⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 uart.c

📁 一个航天航空用的Sparc处理器(配美国欧洲宇航局用的R_tems嵌入式操作系统)的VHDL源代码
💻 C
字号:

#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 128


int uart_test()
{
    
    /* report start of test */
    report(UART_TEST);

    /* test registers */
    lr->uartctrl1 = 0;
    if (lr->uartctrl1) fail(1);
    lr->uartctrl2 = 0;
    if (lr->uartctrl2) fail(2);

    /* enable UARTs */

    lr->uartscaler1 = 0;
    lr->uartscaler2 = 0;
    lr->piodata = 0xaa00;
    lr->piodir = 0xaa00;
    lr->uartctrl1 = (RX_EN | TX_EN);
    lr->uartctrl2 = (RX_EN | TX_EN);

    /* Check data transfer */

    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 + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -