uart.c

来自「一个基于ARM9的操作系统, 实现了很多的功能,包括内存管理,进程创建等」· C语言 代码 · 共 51 行

C
51
字号
/*
* file:
*       uart.c
* description:
*       uart controller code.
*/

void uart_ctrl_init(unsigned long pclk, int baudrate)
{
    int i;

    /* enable dbgu rx/tx */
    *AT91C_PIOA_PPUSR = (AT91C_PA9_DRXD | AT91C_PA10_DTXD);
    *AT91C_PIOA_ASR   = (AT91C_PA9_DRXD | AT91C_PA10_DTXD);
    *AT91C_PIOA_PDR   = (AT91C_PA9_DRXD | AT91C_PA10_DTXD);

    *AT91C_DBGU_CR    = (AT91C_US_RSTRX | AT91C_US_RSTTX | AT91C_US_RSTSTA);
    *AT91C_DBGU_MR    = (AT91C_US_PAR_NONE | AT91C_US_CHMODE_NORMAL);
    *AT91C_DBGU_IDR   = (0xffffffff);
    *AT91C_DBGU_BRGR  = (unsigned int)((pclk/(baudrate*16.0f) + 0.5f) - 1);

    *AT91C_DBGU_PTCR  = (AT91C_PDC_RXTDIS | AT91C_PDC_TXTDIS);
    *AT91C_DBGU_RNPR  = 0;
    *AT91C_DBGU_RNCR  = 0;
    *AT91C_DBGU_TNPR  = 0;
    *AT91C_DBGU_TNCR  = 0;
    *AT91C_DBGU_RPR   = 0;
    *AT91C_DBGU_RCR   = 0;
    *AT91C_DBGU_TPR   = 0;
    *AT91C_DBGU_TCR   = 0;
    *AT91C_DBGU_PTCR  = (AT91C_PDC_RXTEN | AT91C_PDC_TXTEN);

    *AT91C_DBGU_CR    = (AT91C_US_RXEN | AT91C_US_TXEN);

    for(i=0; i<100; i++);
}


int uart_ctrl_putchar(int c)
{
    /* wait until THR is empty. */
    while(!(*AT91C_DBGU_CSR & AT91C_US_TXRDY))
        /* nop */;
    *AT91C_DBGU_THR = (unsigned char)c;

    return c;
}


/* end of file */

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?