Итак, у меня есть терминал, подключенный к контактам TxD0 и RxD0. Допустим, я просто хочу проверить, работает ли запись в него в конце концов.
Я написал несколько функций, чтобы UART мог читать и записывать символы и строки. Хотя, если я попытаюсь запустить его в симуляторе, он выдаст ошибку переполнения.
Вот функции в файле uart. c:
void uart0_write(unsigned char reg_data)
{
while((U0LSR & (0x20)) != 0x20);/*wait until holding register is empty*/
U0THR = (int) reg_data;/*write to holding register*/
}
void uart0_write_str(char str[])
{
while(*str != '\0')/*check for EOF*/
{
uart0_write(*str);/*write a char*/
str++;
}
}
Функция инициализации UART0:
void uart0_init(void)
{
PINSEL0 = 0x05; /*set pin P0.0 to TXD0 and P0.1 RxD0 (TXD0 - 01; RxD0 - 01; 0101 = 0x05)*/
U0LCR = 0x83; /*set length for 8-bit word, set the stop bit, enable DLAB*/
U0IER = (1<<0) | (1<<1);/*enable RBR and THR interrupts*/
U0FCR = 0xC7; /*enable FIFO; reset Tx FIFO; set interrupt after 14 characters*/
/*Baud rate configured to 9600 Baud (from lecture notes)*/
U0DLL = 0x9D;
U0DLM = 0x0;
U0LCR = 0x03; /*8-bit character selection; disable DLAB*/
}
Примерное использование в основном:
int main(void)
{
char *introMsg;
introMsg = "Hello World\n";
systemInit();
ADC_init();
timer0_init();
uart0_init();
uart0_write_str(introMsg);
/*or: */
while(1)
{
uart0_write('c');
}
return 0;
}
С этими демонстрационными фрагментами кода UART должен работать правильно, как я видел в других местах в Интернете. Но при попытке запустить его ничего не печатается и выскакивает OE. Что я делаю неправильно? Я только начинаю погружаться в глубины программирования на голом металле, поэтому, возможно, есть какая-то ошибка, которую я не заметил.
Я бы приветствовал любые идеи!
Оставайтесь дома,
Иаков