205 lines
6.9 KiB
C
205 lines
6.9 KiB
C
#define PERIPH_BASE 0x40000000
|
|
#define APB2PERIPH_BASE (PERIPH_BASE + 0x10000)
|
|
#define AHBPERIPH_BASE (PERIPH_BASE + 0x20000)
|
|
|
|
#define RCC_APB2RSTR_ADC1RST 0x00000200
|
|
#define RCC_APB2RSTR_ADC2RST 0x00000400
|
|
|
|
struct RCC {
|
|
volatile uint32_t CR;
|
|
volatile uint32_t CFGR;
|
|
volatile uint32_t CIR;
|
|
volatile uint32_t APB2RSTR;
|
|
volatile uint32_t APB1RSTR;
|
|
volatile uint32_t AHBENR;
|
|
volatile uint32_t APB2ENR;
|
|
volatile uint32_t APB1ENR;
|
|
volatile uint32_t BDCR;
|
|
volatile uint32_t CSR;
|
|
};
|
|
|
|
#define RCC_BASE (AHBPERIPH_BASE + 0x1000)
|
|
static struct RCC *const RCC = (struct RCC *)RCC_BASE;
|
|
|
|
#define RCC_AHBENR_DMA1EN 0x00000001
|
|
#define RCC_AHBENR_CRCEN 0x00000040
|
|
|
|
#define RCC_APB2ENR_ADC1EN 0x00000200
|
|
#define RCC_APB2ENR_ADC2EN 0x00000400
|
|
|
|
#define CRC_CR_RESET 0x00000001
|
|
|
|
struct CRC {
|
|
volatile uint32_t DR;
|
|
volatile uint8_t IDR;
|
|
uint8_t RESERVED0;
|
|
uint16_t RESERVED1;
|
|
volatile uint32_t CR;
|
|
};
|
|
|
|
#define CRC_BASE (AHBPERIPH_BASE + 0x3000)
|
|
static struct CRC *const CRC = (struct CRC *)CRC_BASE;
|
|
|
|
|
|
struct ADC {
|
|
volatile uint32_t SR;
|
|
volatile uint32_t CR1;
|
|
volatile uint32_t CR2;
|
|
volatile uint32_t SMPR1;
|
|
volatile uint32_t SMPR2;
|
|
volatile uint32_t JOFR1;
|
|
volatile uint32_t JOFR2;
|
|
volatile uint32_t JOFR3;
|
|
volatile uint32_t JOFR4;
|
|
volatile uint32_t HTR;
|
|
volatile uint32_t LTR;
|
|
volatile uint32_t SQR1;
|
|
volatile uint32_t SQR2;
|
|
volatile uint32_t SQR3;
|
|
volatile uint32_t JSQR;
|
|
volatile uint32_t JDR1;
|
|
volatile uint32_t JDR2;
|
|
volatile uint32_t JDR3;
|
|
volatile uint32_t JDR4;
|
|
volatile uint32_t DR;
|
|
};
|
|
|
|
#define ADC1_BASE (APB2PERIPH_BASE + 0x2400)
|
|
#define ADC2_BASE (APB2PERIPH_BASE + 0x2800)
|
|
|
|
static struct ADC *const ADC1 = (struct ADC *)ADC1_BASE;
|
|
static struct ADC *const ADC2 = (struct ADC *)ADC2_BASE;
|
|
|
|
#define ADC_CR1_DUALMOD_0 0x00010000
|
|
#define ADC_CR1_DUALMOD_1 0x00020000
|
|
#define ADC_CR1_DUALMOD_2 0x00040000
|
|
#define ADC_CR1_DUALMOD_3 0x00080000
|
|
|
|
#define ADC_CR1_SCAN 0x00000100
|
|
|
|
#define ADC_CR2_ADON 0x00000001
|
|
#define ADC_CR2_CONT 0x00000002
|
|
#define ADC_CR2_CAL 0x00000004
|
|
#define ADC_CR2_RSTCAL 0x00000008
|
|
#define ADC_CR2_DMA 0x00000100
|
|
#define ADC_CR2_ALIGN 0x00000800
|
|
#define ADC_CR2_EXTSEL 0x000E0000
|
|
#define ADC_CR2_EXTSEL_0 0x00020000
|
|
#define ADC_CR2_EXTSEL_1 0x00040000
|
|
#define ADC_CR2_EXTSEL_2 0x00080000
|
|
#define ADC_CR2_EXTTRIG 0x00100000
|
|
#define ADC_CR2_SWSTART 0x00400000
|
|
#define ADC_CR2_TSVREFE 0x00800000
|
|
|
|
struct DMA_Channel {
|
|
volatile uint32_t CCR;
|
|
volatile uint32_t CNDTR;
|
|
volatile uint32_t CPAR;
|
|
volatile uint32_t CMAR;
|
|
};
|
|
|
|
struct DMA {
|
|
volatile uint32_t ISR;
|
|
volatile uint32_t IFCR;
|
|
};
|
|
|
|
#define STM32_DMA_CR_MINC DMA_CCR1_MINC
|
|
#define STM32_DMA_CR_MSIZE_WORD DMA_CCR1_MSIZE_1
|
|
#define STM32_DMA_CR_PSIZE_WORD DMA_CCR1_PSIZE_1
|
|
#define STM32_DMA_CR_TCIE DMA_CCR1_TCIE
|
|
#define STM32_DMA_CR_TEIE DMA_CCR1_TEIE
|
|
#define STM32_DMA_CR_HTIE DMA_CCR1_HTIE
|
|
#define STM32_DMA_ISR_TEIF DMA_ISR_TEIF1
|
|
#define STM32_DMA_ISR_HTIF DMA_ISR_HTIF1
|
|
#define STM32_DMA_ISR_TCIF DMA_ISR_TCIF1
|
|
|
|
#define STM32_DMA_ISR_MASK 0x0F
|
|
#define STM32_DMA_CCR_RESET_VALUE 0x00000000
|
|
#define STM32_DMA_CR_PL_MASK DMA_CCR1_PL
|
|
#define STM32_DMA_CR_PL(n) ((n) << 12)
|
|
|
|
#define DMA_CCR1_EN 0x00000001
|
|
#define DMA_CCR1_TCIE 0x00000002
|
|
#define DMA_CCR1_HTIE 0x00000004
|
|
#define DMA_CCR1_TEIE 0x00000008
|
|
#define DMA_CCR1_DIR 0x00000010
|
|
#define DMA_CCR1_CIRC 0x00000020
|
|
#define DMA_CCR1_PINC 0x00000040
|
|
#define DMA_CCR1_MINC 0x00000080
|
|
#define DMA_CCR1_PSIZE 0x00000300
|
|
#define DMA_CCR1_PSIZE_0 0x00000100
|
|
#define DMA_CCR1_PSIZE_1 0x00000200
|
|
#define DMA_CCR1_MSIZE 0x00000C00
|
|
#define DMA_CCR1_MSIZE_0 0x00000400
|
|
#define DMA_CCR1_MSIZE_1 0x00000800
|
|
#define DMA_CCR1_PL 0x00003000
|
|
#define DMA_CCR1_PL_0 0x00001000
|
|
#define DMA_CCR1_PL_1 0x00002000
|
|
#define DMA_CCR1_MEM2MEM 0x00004000
|
|
|
|
#define DMA_ISR_GIF1 0x00000001
|
|
#define DMA_ISR_TCIF1 0x00000002
|
|
#define DMA_ISR_HTIF1 0x00000004
|
|
#define DMA_ISR_TEIF1 0x00000008
|
|
#define DMA_ISR_GIF2 0x00000010
|
|
#define DMA_ISR_TCIF2 0x00000020
|
|
#define DMA_ISR_HTIF2 0x00000040
|
|
#define DMA_ISR_TEIF2 0x00000080
|
|
#define DMA_ISR_GIF3 0x00000100
|
|
#define DMA_ISR_TCIF3 0x00000200
|
|
#define DMA_ISR_HTIF3 0x00000400
|
|
#define DMA_ISR_TEIF3 0x00000800
|
|
#define DMA_ISR_GIF4 0x00001000
|
|
#define DMA_ISR_TCIF4 0x00002000
|
|
#define DMA_ISR_HTIF4 0x00004000
|
|
#define DMA_ISR_TEIF4 0x00008000
|
|
#define DMA_ISR_GIF5 0x00010000
|
|
#define DMA_ISR_TCIF5 0x00020000
|
|
#define DMA_ISR_HTIF5 0x00040000
|
|
#define DMA_ISR_TEIF5 0x00080000
|
|
#define DMA_ISR_GIF6 0x00100000
|
|
#define DMA_ISR_TCIF6 0x00200000
|
|
#define DMA_ISR_HTIF6 0x00400000
|
|
#define DMA_ISR_TEIF6 0x00800000
|
|
#define DMA_ISR_GIF7 0x01000000
|
|
#define DMA_ISR_TCIF7 0x02000000
|
|
#define DMA_ISR_HTIF7 0x04000000
|
|
#define DMA_ISR_TEIF7 0x08000000
|
|
|
|
#define DMA1_BASE (AHBPERIPH_BASE + 0x0000)
|
|
static struct DMA *const DMA1 = (struct DMA *)DMA1_BASE;
|
|
|
|
#define DMA1_Channel1_BASE (AHBPERIPH_BASE + 0x0008)
|
|
static struct DMA_Channel *const DMA1_Channel1 =
|
|
(struct DMA_Channel *)DMA1_Channel1_BASE;
|
|
|
|
/* System Control Block */
|
|
struct SCB
|
|
{
|
|
volatile uint32_t CPUID;
|
|
volatile uint32_t ICSR;
|
|
volatile uint32_t VTOR;
|
|
volatile uint32_t AIRCR;
|
|
volatile uint32_t SCR;
|
|
volatile uint32_t CCR;
|
|
volatile uint8_t SHP[12];
|
|
volatile uint32_t SHCSR;
|
|
volatile uint32_t CFSR;
|
|
volatile uint32_t HFSR;
|
|
volatile uint32_t DFSR;
|
|
volatile uint32_t MMFAR;
|
|
volatile uint32_t BFAR;
|
|
volatile uint32_t AFSR;
|
|
volatile uint32_t PFR[2];
|
|
volatile uint32_t DFR;
|
|
volatile uint32_t ADR;
|
|
volatile uint32_t MMFR[4];
|
|
volatile uint32_t ISAR[5];
|
|
uint32_t RESERVED0[5];
|
|
volatile uint32_t CPACR;
|
|
};
|
|
|
|
#define SCS_BASE 0xE000E000
|
|
#define SCB_BASE (SCS_BASE + 0x0D00)
|
|
static struct SCB *const SCB = (struct SCB *)SCB_BASE;
|