這一篇講一下Blackfin的UART,就是傳說中的串口,OP認(rèn)為的最普通最常見最實(shí)用接口。
串口,做個(gè)簡單的名詞介紹,UART(Universal Asynchronous Receiver/Transmitter (UART) port)接口,是全雙工通用的串行接口,由RX 和TX 兩根線組成,擴(kuò)展RS232 芯片可以直接和計(jì)算機(jī)串口通訊,通常作為調(diào)試用的命令和數(shù)據(jù)通訊接口。
ADSP-BF53x 的UART 接口,除了支持標(biāo)準(zhǔn)串口功能外,還支持IrDA 模式,在硬件上增加一個(gè)紅外通訊模塊,可以進(jìn)行紅外數(shù)據(jù)傳輸。當(dāng)設(shè)置 IrDA 模式后,輸出的波形會(huì)與原數(shù)據(jù)相反,且信號(hào)寬度變窄。
UART 接口通訊的波特率配置值可以通過下面公式進(jìn)行計(jì)算:BAUD RATE = SCLK/(16 x Divisor)
說一說UART的接口寄存器:
寄存器 功能
UART_THR UART 傳輸數(shù)據(jù)寄存器
UART_RBR UART 接收緩存寄存器
UART_DLL UART 波特率配置低8 位寄存器
UART_DLH UART 波特率配置高8 位寄存器
UART_IER UART 中斷使能寄存器
UART_IIR UART 中斷識(shí)別寄存器
UART_LCR UART 線路控制寄存器
UART_MCR UART 調(diào)制控制寄存器
UART_LSR UART 線路狀態(tài)寄存器
UART_SCR UART 暫存寄存器
UART_GCTL UART 全局控制寄存器
來看一段核心代碼:
*pUART_GCTL=0x0009;
*pUART_LCR=0x0080;// DLAB=1 允許訪問DLL 和DLH
*pUART_DLL=div; //將變量div 的值寫入波特率配置寄存器
*pUART_DLH=div>>8; //DLL DLH 分別賦值
*pUART_LCR=0x0003;// 允許訪問 RBR THR 和IER
*pUART_IER=0x0001;// 接收中斷允許
*pSIC_IAR0 = 0xffffffff;
*pSIC_IAR1 = 0xf3ffffff; // UART 中斷等級設(shè)置
*pSIC_IAR2 = 0xffffffff;
register_handler(ik_ivg10, UART_ISR); // 注冊UART 中斷等級為10,標(biāo)志為UART_ISR
*pSIC_IMASK = 0x00004000; //使能UART 中斷
*pUART_THR=TXbuf[i]; //向UART 傳輸數(shù)據(jù)寄存器寫數(shù)據(jù)
while(!(*pUART_LSR&0x0020)); //等待傳輸完成
EX_INTERRUPT_HANDLER(UART_ISR) //UART 接收數(shù)據(jù)中斷函數(shù)
{
if(*pUART_LSR&DR) //判斷是否有新的數(shù)據(jù)。
{
if(cont>512) //防止buff 溢出,測試代碼,將接收到的數(shù)據(jù)重復(fù)寫入512 字節(jié)的buff
cont = 0;
RXbuf[cont]=*pUART_RBR; //讀取數(shù)據(jù)
cont++;
}
}
這段代碼實(shí)現(xiàn)了配置波特率為 9600,設(shè)定了數(shù)據(jù)接收中斷,運(yùn)行代碼后,會(huì)將數(shù)組Txbuf 中的字符串通過串口發(fā)送出,當(dāng)接收到數(shù)據(jù)后,會(huì)進(jìn)入中斷函數(shù)讀取數(shù)據(jù)。
附上這段核心代碼的完整源碼供參考: 鏈接: http://pan.baidu.com/s/1zXVK6 密碼: a841
串口很簡單,沒什么多說的,我們也錄了一個(gè)視頻教程:
視頻的清晰版下載: 鏈接: http://pan.baidu.com/s/1kTGADdP 密碼: gad3
下一篇準(zhǔn)備說說Blackfin的專用音頻接口:SPORT |