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