基于LPC2131嵌入式系統(tǒng)μCOS-II實現(xiàn)CAN通訊
·數(shù)據(jù)接受模塊
根據(jù)電路圖1,采用中斷接受的方式來接受數(shù)據(jù),LPC2131的P0.30設(shè)置為外部中斷3,整個數(shù)據(jù)接受模塊由數(shù)據(jù)接受函數(shù)void ReceiveData(uint8 *Rt)、中斷處理函數(shù)Can_Exception(void)構(gòu)成。當(dāng)SJA1000接受到CAN總線數(shù)據(jù),通過接收中斷使得LPC2131產(chǎn)生外部中斷3而使其進入中斷處理函數(shù),進而對接受到的數(shù)據(jù)進行處理。其中數(shù)據(jù)接受函數(shù)和中斷處理函數(shù)如下:
void ReceiveData (void)
{
uint8 i, err,*Rt;
OS_ENTER_CRITICAL();
Rt=(uint8 *)OSMboxPend(OSCANMbox,0,err);
//通過郵箱接受數(shù)據(jù)
for (i=0;i13;i++)
ReceiveData[i]=*Rt++; //將接受到的數(shù)據(jù)存在全局變量中供后續(xù)處理
OS_EXIT_CRITICAL();
}
void Can_Exception(void)
{
u
int8 temp[13],i;
OS_ENTER_CRITICAL();
for (i=0;i13;i++)
temp[i]=ReadCan(16+i); //讀取CAN數(shù)據(jù)
OSMboxPost(OSCANMbox,(void *)temp); //將
CAN數(shù)據(jù)以郵箱發(fā)送到接受函數(shù)
EXTINT=0x08; //清楚ENT3
VICVectAddr=0; //中斷返回
OS_EXIT_CRITICAL();
}
結(jié)語
以ARM芯片作為主控制器,CAN總線作為數(shù)據(jù)傳輸方式來進行通訊的嵌入式系統(tǒng)得到了越來越廣泛的應(yīng)用。同時CAN通訊的可靠性也成為影響系統(tǒng)性能的關(guān)鍵部分之一。本文以LPC2131為例,給出了一類微處理器與CAN控制器SJA1000之間的較為通用的硬件連接方法,對CAN總線進行了可靠性設(shè)計,并基于嵌入式實時操作系統(tǒng)μCOS-II進行了CAN通訊軟件開發(fā),該設(shè)計現(xiàn)已在工廠車間中的分布式監(jiān)控系統(tǒng)中得到了應(yīng)用,運行可靠、穩(wěn)定。
評論