I have a very basic question regarding LPC2418 UART. The UART has got different registers with the same addresses. So while loading the data from the test bench, will it not load into all the registers?
1) For example,RBR(receiver buffer register) and THR(transmit holding register) have the address 32'hE000C000.And I know that you can only read from RBR and only write into THR. So if(addr = 32'hE000C000) data = 32'h10100010; wont the above code write into both THR and RBR?
2)Same case applies even for IIR(interrupt id reg) and FCR(FIFO control register) as they share the same address E000C008 and there is no signal to distinguish between the two registers like we could have used a sel signal of a mux to select either IIR or FCR,but there isnt one.
Best Answer
For example 1:
The way registers like that work is that the hardware handles register reads, and register writes differently.
Basically, there are actually two registers in the physical chip. When you read from the address, it retrieves the contents of register A. When you write to the address, it writes into register B.
You should note that the hardware documentation states the following:
(Emphasis mine)
For example 2:
I believe that which register is available is a function of the current execution context. When the execution is within the interrupt handler, reads to 0xE000C000 access the IIR register (which is read-only, incidentally).
During normal execution, (or possibly when any non-UART interrupts are firing), read/writes are to the FCR register.