1 /* (CC-BY-NC-SA) ROBIN KRENS - ROBIN @ ROBINKRENS.NL
4 * 2019/7/20 - ROBIN KRENS
8 * Memory map for the Cortex-A3
9 * Implementations vary among manufacturers. This one is
10 * a STM32F013RC6. Addresses of peripherals vary amongst
11 * manufacturers of boards with similar chips
14 * These are volatile memory addresses of 32 bit. The macro's
15 * MEM_VALUE and MEM_ADDR should used.
16 * In case you want to use a address on the lside of a assigment
17 * use volatile uint32_t * p = MEM_ADDR(0x20000000);
25 /* 64kB SRAM located at SRAM_OFFSET */
26 #define SRAM_SIZE 0x00010000
27 #define SRAM_OFFSET 0x20000000
29 /* Safety macro's to get the address or value */
30 #define MEM_VALUE(addr) *((volatile uint32_t(*) (addr))
31 #define MEM_ADDR(addr) ((volatile uint32_t *) (addr))
33 /* SYSTEM INFO AND DEBUG */
34 #define MCU_ID MEM_ADDR(0xE000ED00)
35 #define FLASH_MEM MEM_ADDR(0x1FFFF000)
37 /* POWER CONTROL REGISTERS */
38 #define PWR_CR MEM_ADDR(0x40007000)
40 /* SYSTEM CONTROL BLOCK REGISTER */
41 #define SCB_VTOR MEM_ADDR(0xE000ED08) // VECTOR TABLE
42 #define SCB_VTOR_ST MEM_ADDR(0xE000ED04) // STATUS OF VECTOR
43 #define SCB_CCR MEM_ADDR(0xE000ED14) // SET SOFTWARE TRAPS
45 /* NESTED VECTOR INTERRUPT CONTROL REGISTER */
46 #define NVIC_ISER0 MEM_ADDR(0xE000E100) // interrupt set enable register
47 #define NVIC_ISER1 MEM_ADDR(0xE000E104) // interrupt set enable register
49 /* SYSTICK REGISTER */
50 #define STK_CTRL MEM_ADDR(0xE000E010)
51 #define STK_RELOAD MEM_ADDR(0xE000E014)
52 #define STK_CALIB MEM_ADDR(0xE000E01C)
55 #define RCC_CR MEM_ADDR(0x40021000)
56 #define RCC_CFGR MEM_ADDR(0x40021004)
57 #define RCC_BDCR MEM_ADDR(0x40021020)
59 /* SYSTEM CONTROL REGISTER */
60 #define SYSCTRL_RCC MEM_ADDR(0x40021000)
61 #define RCC_APB1ENR MEM_ADDR(0x4002101C) // register to enable I2C
62 #define RCC_APB2ENR MEM_ADDR(0x40021018) // register to enable USART1
64 #define SYSCTRL_RIS MEM_ADDR(0x400FE050)
65 #define SYSCTRL_RCGC1 MEM_ADDR(0x400FE104)
66 #define SYSCTRL_RCGC2 MEM_ADDR(0x400FE108)
67 #define GPIOPA_AFSEL MEM_ADDR(0x40004420)
69 #define GPIOA_CRH MEM_ADDR(0x40010804) // for USART1
70 #define GPIOB_CRL MEM_ADDR(0x40010C00) // low register (!) for I2C1
71 #define GPIOC_CRL MEM_ADDR(0x40011000) // for led
72 #define GPIOC_ODR MEM_ADDR(0x4001100C) //
74 #define AFIO_EVCR MEM_ADDR(0x40010000)
77 #define I2C_CR1 MEM_ADDR(0x40005400)
78 #define I2C_CR2 MEM_ADDR(0x40005404)
79 #define I2C_DR MEM_ADDR(0x40005410)
80 #define I2C_SR1 MEM_ADDR(0x40005414)
81 #define I2C_SR2 MEM_ADDR(0x40005418)
82 #define I2C_CCR MEM_ADDR(0x4000541C)
83 #define I2C_TRISE MEM_ADDR(0x40005420)
85 /* EXTERNAL INTERRUPTS */
86 #define EXTI_IMR MEM_ADDR(0x40010400)
87 #define EXTI_RTSR MEM_ADDR(0x40010408)
90 #define USART1_BASE MEM_ADDR(0x40013800)
91 #define USART1_SR MEM_ADDR(0x40013800)
92 #define USART1_DR MEM_ADDR(0x40013804)
93 #define USART1_BRR MEM_ADDR(0x40013808)
94 #define USART1_CR1 MEM_ADDR(0x4001380C)
95 #define USART1_CR2 MEM_ADDR(0x40013810)
96 #define USART1_CR3 MEM_ADDR(0x40013814)