在线看毛片网站电影-亚洲国产欧美日韩精品一区二区三区,国产欧美乱夫不卡无乱码,国产精品欧美久久久天天影视,精品一区二区三区视频在线观看,亚洲国产精品人成乱码天天看,日韩久久久一区,91精品国产91免费

<menu id="6qfwx"><li id="6qfwx"></li></menu>
    1. <menu id="6qfwx"><dl id="6qfwx"></dl></menu>

      <label id="6qfwx"><ol id="6qfwx"></ol></label><menu id="6qfwx"></menu><object id="6qfwx"><strike id="6qfwx"><noscript id="6qfwx"></noscript></strike></object>
        1. <center id="6qfwx"><dl id="6qfwx"></dl></center>

            新聞中心

            EEPW首頁 > 嵌入式系統(tǒng) > 設(shè)計應(yīng)用 > 基于LPC2131嵌入式系統(tǒng)μCOS-II實現(xiàn)CAN通訊

            基于LPC2131嵌入式系統(tǒng)μCOS-II實現(xiàn)CAN通訊

            作者: 時間:2013-09-12 來源:網(wǎng)絡(luò) 收藏

            CAN收發(fā)器與總線接口電路

            圖2 CAN收發(fā)器與總線接口電路

            對于其他無內(nèi)置CAN控制器的能夠承受5V的TTL電平的處理器來說,只需改變與SJA1000的數(shù)據(jù)端口ALE/AS,RD/E,WR,CS,INT,RST相連接的引腳即可完成外擴CAN接口的硬件設(shè)計工作,否則在兩者之間加一個邏輯電平轉(zhuǎn)換的器件即可。

            軟件設(shè)計

            對SJA1000的讀寫訪問

            由于的48個引腳全是IO,所以首先需要通過軟件模擬讀寫SJA1000的時序,來對SJA1000進行操作,進而完成功能。

            依據(jù)SJA1000在Intel模式下的讀寫時序[4],可編寫通過CAN控制器SJA1000發(fā)送數(shù)據(jù)的寫函數(shù)void WriteCan(uint8 Addr,uint8 Data)和接受CAN控制器所接受的數(shù)據(jù)的讀函數(shù)uint8 ReadCan(uint8 Addr),其中Addr為SJA1000相應(yīng)的寄存器的地址,Data為所發(fā)送的數(shù)據(jù),讀函數(shù)ReadCan可返回所接受的數(shù)據(jù)。

            的實現(xiàn)

            要實現(xiàn)一個需要實現(xiàn)3個功能模塊:對SJA1000的初始化模塊;數(shù)據(jù)發(fā)送模塊;數(shù)據(jù)接受模塊。

            ·對SJA1000的初始化模塊

            在開始通訊之前,首先要在SJA

            1000的各個功能寄存器進行設(shè)置,包括模式寄存器,波特率,時鐘分頻器,中斷使能寄存器,,濾波寄存器,輸出控制寄存器。

            uint8 IniSJA1000(uint8 BTR0,uint8 BTR1)

            {

            IO0CLR=CS; //片選SJA1000

            WriteCan(0,0x09); //進入復(fù)位模式

            WriteCan(31,0xe8); //設(shè)置時鐘分頻器

            WriteCan(4,0xfd); //設(shè)置中斷使能寄存器

            WriteCan(16,AcceptCode1);//設(shè)置驗收代碼1

            WriteCan(17,AcceptCode2);//設(shè)置驗收代碼2

            WriteCan(18,AcceptCode3);//設(shè)置驗收代碼3

            WriteCan(19,AcceptCode4);//設(shè)置驗收代碼4

            WriteCan(20,MaskCode1); //設(shè)置驗收屏蔽1

            WriteCan(21,MaskCode2); //設(shè)置驗收屏蔽2

            WriteCan(22,MaskCode3); //設(shè)置驗收屏蔽3

            WriteCan(23,MaskCode4); //設(shè)置驗收屏蔽4

            WriteCan(6,BTR0); //設(shè)置總線時序寄存器1

            WriteCan(7,BTR1); //設(shè)置總線時序寄存器2

            WriteCan(8,0xfa); //設(shè)置輸出控制積存器

            WriteCan(0,0x08); //進入操作模式

            OSCANMbox=OSMboxCreate(0);/建立CAN通訊郵箱

            if (OSCANMbox==NULL)

            {

            return FALSE;

            }

            return TRUE;

            }

            ·數(shù)據(jù)發(fā)送模塊

            假設(shè)要發(fā)送的數(shù)據(jù)的ID存儲在數(shù)組ID[4]中,數(shù)據(jù)存儲在數(shù)組SendData[8]中,其發(fā)送模塊程序如下所示,其中參數(shù)DLC為發(fā)送的字節(jié)數(shù),F(xiàn)F為幀類型,即0為數(shù)據(jù)幀,1為遠程幀。

            void Tx(uint8 DLC,uint8 FF)

            {

            uint8 i;

            OS_ENTER_CRITICAL();

            If (FF==0x01)

            {

            WriteCan(16,DLC+0x80); //數(shù)據(jù)幀

            }

            else

            {

            WriteCan(16,DLC+0xd0); //遠程幀

            }

            WriteCan(17,ID[0]);

            WriteCan(18,ID[1]);

            WriteCan(19,ID[2]);

            WriteCan(20,ID[3]); //TX標識碼

            for (i=0;i

            WriteCan(21+i,sentdata[i]); //TX數(shù)據(jù)

            WriteCan(1,0x01);//設(shè)置發(fā)送寄存器發(fā)送

            OS_EXIT_CRITICAL();

            }



            評論


            相關(guān)推薦

            技術(shù)專區(qū)

            關(guān)閉