Изучал хидер файл LPC23xx.H ,который идет в поставке с KEIL обнаружил странную вещь в UART
Разные регистры задефайнены на одни и теже адреса:
Код
/* Universal Asynchronous Receiver Transmitter 0 (UART0) */
#define UART0_BASE_ADDR 0xE000C000
#define U0RBR (*(volatile unsigned long *)(UART0_BASE_ADDR + 0x00)) //0xE000C000
#define U0THR (*(volatile unsigned long *)(UART0_BASE_ADDR + 0x00)) //0xE000C000
#define U0DLL (*(volatile unsigned long *)(UART0_BASE_ADDR + 0x00)) //0xE000C000
#define U0DLM (*(volatile unsigned long *)(UART0_BASE_ADDR + 0x04)) //0xE000C004
#define U0IER (*(volatile unsigned long *)(UART0_BASE_ADDR + 0x04)) //0xE000C004
#define U0IIR (*(volatile unsigned long *)(UART0_BASE_ADDR + 0x08)) //0xE000C008
#define U0FCR (*(volatile unsigned long *)(UART0_BASE_ADDR + 0x08)) //0xE000C008
#define U0LCR (*(volatile unsigned long *)(UART0_BASE_ADDR + 0x0C))
#define U0LSR (*(volatile unsigned long *)(UART0_BASE_ADDR + 0x14))
#define U0SCR (*(volatile unsigned long *)(UART0_BASE_ADDR + 0x1C))
#define U0ACR (*(volatile unsigned long *)(UART0_BASE_ADDR + 0x20))
#define U0ICR (*(volatile unsigned long *)(UART0_BASE_ADDR + 0x24))
#define U0FDR (*(volatile unsigned long *)(UART0_BASE_ADDR + 0x28))
#define U0TER (*(volatile unsigned long *)(UART0_BASE_ADDR + 0x30))
По документации эти регистры находятся в одних и тех же адресах.
И никак не могу взять в толк, как процессор определят, какие значения для каких регистров я ему задаю???