1. 程式人生 > >驅動你的串列埠 和暫存器打交道

驅動你的串列埠 和暫存器打交道

/* UART primitives */
#define GET_STATUS(p) (*(volatile unsigned  *)((p) + USTAT))  // 獲得當前 UART 狀態 //offset?? //因為有了MMU,so要找到Pmemory要加偏移量
#define RX_DATA(s)      ((s) & USRRxData)    //接收資料到達標誌
#define GET_CHAR(p) (*(volatile unsigned  *)((p) + URXBUF))  //從緩衝獲得(接受)一個數據
#define TX_READY(s)     ((s) & USRTxHoldEmpty)    //傳送資料就緒狀態標誌
#define PUT_CHAR(p,c)   (*(unsigned  *)((p) + UTXBUF) = (unsigned )(c)) //向緩衝傳送一個數據  //?緩衝??
       
int uart_putchar( unsigned int UART_BASE, char ch )  //UART_BASE 在Uart.c中定義
{
 /* read tx ready flag, when =1 break */
 while ( TX_READY(GET_STATUS(UART_BASE))==0)
  ;
 
 PUT_CHAR(UART_BASE, ch);