驅動你的串列埠 和暫存器打交道
阿新 • • 發佈:2019-01-06
/* 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);
#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);