The communication works at bit rate of 115200 only, even configuring the IBRD and FBRD registers following the datasheet instructions not have effect. So what the values that I have to put in this registers to work at 19200 baud? My board's model is RPi b+ rev. 1.2
I'm not sure about the register's offsets informed by datasheet or the uart clock of the board to calculate the integer and fractional part of the baud rate generator. I'm trying with 19.2Mhz so IBRD = 19200000/(16*19200) = 62 and FBRD = 0.5*64 = 32. But none values that I enter are doing effect. Sorry by boring text
I'm not using Linux, the O.S is custom.
My code:
static volatile uint *uart_base;
#define UART0 0x20201000// base addres UART0
#define UART_DR 0x0 // data register ok
#define UART_RSR 0x4 // receive status register/error clear register
#define UART_FR 0x6 // flag register
#define UART_IBRD 0x24 // integer baud rate register
#define UART_FBRD 0x28 // Fractional baud rate register
#define UART_LCRH 0x2c // line control register
#define UART_CR 0x30 // control register
#define UART_IFLS 0x34 // FIFO control register
#define UART_IMSC 0x38 // interrupt mask set/clear register
#define UART_MIS 0x10 // Status masked interrupt register
#define UART_ICR 0x44 // interrupts flags
// bits in registers
#define UART_RXI (1 << 4) // receive interrupt
void U0init(void)
{
uart_base = (void*)UART0;// (void*) only prevent compilator's boring warning
uart_base[UART_CR] = 0x00; // disable uart
uart_base[UART_ICR] = 0x7FF; /* Clear all interrupt status */
uart_base[UART_IBRD] = 62;// 19200000 / (16x19200)
uart_base[UART_FBRD] = 32;// (19200000 % (16x19200) )*64
uart_base[UART_IMSC] = UART_RXI;
uart_base[UART_IFLS] = 0x24; // transit/receive FIFOs
uart_base[UART_LCRH] = 0x70; // 8, N, 1 - fifo enabled
uart_base[UART_CR] = 0x301; // enable uart
}
For exemple, the FR register's offset in datasheet is 0x18 but not work for me, however 0x6 worked! Because this I'm thinking that there are more wrong information... anyone can help me? I forgot something? Doing something wrong?
Thanks!