uart.c
来自「宇航级微处理器LEON2 2.2 VHDL源代码,很难找的.」· C语言 代码 · 共 69 行
C
69 行
#include "leon.h"#include "test.h"#define RX_EN 1#define TX_EN 2#define RIRQ_EN 4#define TIRQ_EN 8#define EVENPAR 16#define PAR_EN 32#define FLOW_EN 64#define LOOPBACK 128int uart_test(){ /* report start of test */ report(UART_TEST); /* enable UARTs */ lr->uartscaler1 = 0; lr->uartscaler2 = 0; lr->piodata = 0xaa00; lr->piodir = 0xaa00; /* test registers */ lr->uartctrl1 = 0; if (lr->uartctrl1) fail(1); lr->uartctrl2 = 0; if (lr->uartctrl2) fail(2); /* Check data transfer */ lr->uartctrl1 = (RX_EN | TX_EN); lr->uartctrl2 = (RX_EN | TX_EN); lr->uartdata1 = 0x55; while(!(lr->uartstatus1 & 4)){} lr->uartdata1 = 0xAA; while(!(lr->uartstatus2 & 1)){} lr->uartdata2 = lr->uartdata2; while(!(lr->uartstatus2 & 1)){} lr->uartdata2 = lr->uartdata2; while(!(lr->uartstatus1 & 1)){} if (lr->uartdata1 != 0x55) fail(3); while(!(lr->uartstatus1 & 1)){} if (lr->uartdata1 != 0xAA) fail(4); /* Check flow control */ lr->uartctrl1 = (RX_EN | TX_EN | FLOW_EN); lr->uartctrl2 = (RX_EN | TX_EN | FLOW_EN); lr->uartdata1 = 0x11; while(!(lr->uartstatus1 & 4)){} lr->uartdata1 = 0x22; while((lr->uartstatus1 & 6) != 6){} lr->uartdata1 = 0x33; while(!(lr->uartstatus2 & 1)){} if (lr->uartdata2 != 0x11) fail(5); while(!(lr->uartstatus2 & 1)){} if (lr->uartdata2 != 0x22) fail(6); while(!(lr->uartstatus2 & 1)){} if (lr->uartdata2 != 0x33) fail(7); /* To be tested: loop-back, parity, frame-error, break, baud-rates */}
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?