ARM9硬件接口學(xué)習之UART
2) 發(fā)送數據:
a.UTRSTAT0 ( UART channel 0 Tx/Rx status register ):
位[2]:無(wú)數據發(fā)送時(shí),自動(dòng)設為1。當我們要使用串口發(fā)送數據時(shí),先讀此位以判斷是否有數據正在占用發(fā)送口。
位[1]:發(fā)送FIFO是否為空,本實(shí)驗未用此位
位[0]:接收緩沖區是否有數據,若有,此位設為1。本實(shí)驗中,需要不斷查詢(xún)此位一判斷是否有數據已經(jīng)被接收。
b.UTXH0 (UART channel 0 transmit buffer register ):
把要發(fā)送的數據寫(xiě)入此寄存器。
3) 接收數據:
a.UTRSTAT0:如上描述,我們用到位[0]
b.URXH0 (UART channel 0 receive buffer register ):
當查詢(xún)到UTRSTAT0 位[0]=1時(shí),讀此寄存器獲得串口接收到的數據。
4) 實(shí)驗源代碼
/* main.c */
#include "uart.h"
#include "clock.h"
#include "watchdog.h"
int Main(void)
{
char key = ' ';
clock_init(); //初始化時(shí)鐘
uart_init(); //初始化串口
close_watchdog();
uart_send("uart communication success!");
while(1)
{
uart_send("If you want to quit ,please pess 'e'");
key = uart_get();
if (key == 'e')
{
uart_send ("you pressed 'e' and you'll quit!");
break;
}
else
{
uart_send("you pressed ");
uart_send(key);
uart_send(",retry!");
}
}
uart_send("the program exited by user!");
return 0;
}
下面是串口相關(guān)部分源碼:
void uart_init(void)
{
ULCON0 = 0x03; //8N1
UCON0 = 0x005; //中斷或查詢(xún)方式
UFCON0 = 0x00; //不使用FIFO
UMCON0 = 0x00; //不使用流控
UBRDIV0 = 27; //波特率為115200
GPHCON |= 0xa0; //GPH2,GPH3 set as TXD0,RXD0
GPHUP = 0x0c; //GPH2,GPH3內部上拉
}
void uart_send(char * c)
{
for (; *c != '国产精品自在自线亚洲|国产精品无圣光一区二区|国产日产欧洲无码视频|久久久一本精品99久久K精品66|欧美人与动牲交片免费播放