CC2430 –UART簡(jiǎn)析
TI-zigbee-CC2430 –UART是片山數(shù)字資源數(shù)據(jù)采集處理不可避免的基本通信單元,下面以西安達(dá)泰電子zigbee開(kāi)發(fā)套件為例,簡(jiǎn)單講解下CC2430的串口基本工作原理
在串口接收數(shù)據(jù)的這個(gè)部分有兩種方法——查詢(xún)法和中斷法:
1.查詢(xún)法就是要串口一直處于等待的狀態(tài),看串口上是不是有數(shù)據(jù)(主要是看URX0IF的值,一旦是1,表示串口上有數(shù)據(jù)并且串口上的數(shù)據(jù)已經(jīng)接收完畢可以進(jìn)行下一步的操作了)一旦數(shù)據(jù)接收完畢,就開(kāi)始對(duì)接收的數(shù)據(jù)進(jìn)行相應(yīng)的操作。這個(gè)方法需要讓程序一直等待串口,所以個(gè)人覺(jué)得效率還是比較的低的,不過(guò)通過(guò)使用發(fā)現(xiàn)這種方法的穩(wěn)定性還是比較的高的,所以個(gè)人建議就是如果你做的項(xiàng)目里只有與串口相關(guān)的工作的話,那么還是用查詢(xún)的比較的好。
2.中斷法,這種方法是運(yùn)用的串口中斷服務(wù)子程序(ISR)來(lái)完成的,如果串口上有值的話,那么會(huì)調(diào)用中斷向量,中斷向量則把程序指針指到相應(yīng)的ISR中去。對(duì)接收到的數(shù)據(jù)的操作在ISR中進(jìn)行,ISR完成之后程序指針會(huì)跳回中斷前的地方繼續(xù)進(jìn)行剛才被中斷的事情,中斷法就是這么一個(gè)流程了。這種方法的效率比較的高,而且程序不需要一直的等待串口,但是個(gè)人認(rèn)為這種方法的穩(wěn)定性不如查詢(xún)的方式,出錯(cuò)率比較的高。不過(guò)如果你想要完成更多的工作的話,這種方法還是比較的適用的。說(shuō)了這么多理論的問(wèn)題,現(xiàn)在舉幾個(gè)例子吧。
下面是一個(gè)查詢(xún)法的程序段:
void UartRX_Send_String(char *Data,int len)
{
int j;
for(j=0;j<len;j++)
{
U0DBUF = *Data++;
while(URX0IF == 0);
URX0IF = 0;
}
}
這個(gè)程序就是比較典型的一個(gè)查詢(xún)法的程序,一直都是在查看URX0IF的狀態(tài)。在接收完一個(gè)8bit的數(shù)據(jù)后,需要軟件將URX0IF的標(biāo)志位置0,等待下一個(gè)收據(jù)
#pragma vector = URX0_VECTOR
__interrupt void URX0_ISR(void)
{
uarttemp = U0DBUF;
U0DBUF = uarttemp;
}
而這個(gè)程序就是比較典型的一個(gè)中斷法的程序,上面的程序斷是中斷向量里的程序。將串口的值讀出后再回顯,串口有數(shù)據(jù)的時(shí)候就回調(diào)用這個(gè)ISR,然后執(zhí)行里面的程序。
對(duì)于串口發(fā)送數(shù)據(jù)的方法,我很遺憾的說(shuō)只有一種方法,那就是查詢(xún)法。發(fā)送數(shù)據(jù)的查詢(xún)法和接收數(shù)據(jù)的查詢(xún)法基本上是一樣的,這里就不再多說(shuō)了。只是給大家一個(gè)例子看一下吧。
void UartTX_Send_String(char *Data,int len)
{
int j;
for(j=0;j<len;j++)
{
U0DBUF = *Data++;
while(UTX0IF == 0);
UTX0IF = 0;
}
}
這個(gè)程序就是串口發(fā)送數(shù)據(jù)的典型程序。和接收的部分基本相似。
更多zigbee相關(guān)應(yīng)用及技術(shù)交流:http://www.dataie.com/productShow.asp?ArticleID=605