基于F2812的eCAN自測程序分析_第1頁
基于F2812的eCAN自測程序分析_第2頁
基于F2812的eCAN自測程序分析_第3頁
基于F2812的eCAN自測程序分析_第4頁
基于F2812的eCAN自測程序分析_第5頁
已閱讀5頁,還剩3頁未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)

文檔簡介

1、基于F2812eCAN的自測程序分析1 eCAN總線模塊1.1 CAN總線介紹近年來CAN總線以其可靠性高、實(shí)時性好而在工業(yè)現(xiàn)場控制、電力通信、航空航天等領(lǐng)域得到廣泛應(yīng)用。C28x系列DSP芯片內(nèi)有增強(qiáng)型CAN總線通信接口,該接口能夠與CAN2.0B標(biāo)準(zhǔn)完全兼容。CAN總線串行協(xié)議具有很強(qiáng)的抗干擾能力,能夠在電磁干擾的環(huán)境下進(jìn)行通信。eCAN模塊具有32個完全可配置郵箱和時間標(biāo)記功能,能夠?qū)崿F(xiàn)靈活、可靠的串行通信。1.2 eCAN結(jié)構(gòu)和特點(diǎn)eCAN的特點(diǎn)包括以下9點(diǎn): 與CAN2.0B標(biāo)準(zhǔn)完全兼容; 支持最高1Mb/s的傳輸速率; 含有32個郵箱,每個郵箱都有很多功能; 低功耗模式; 可編程的

2、總線喚醒功能; 可自動應(yīng)答遠(yuǎn)程請求消息; 在發(fā)生仲裁丟失或錯誤時,自動重發(fā); 可通過特定消息(與16號郵箱有關(guān))與32位時間標(biāo)記計(jì)數(shù)器同步。 具有自測試模式;F2812的eCAN模塊由一個32為構(gòu)架的CAN控制器組成,為CPU提供了完整的CAN協(xié)議,減少CPU開銷。eCAN模塊主要由CAN協(xié)議內(nèi)核(CPK)和消息控制器組成。1.3 eCAN工作方式1.3.1 初始化、郵箱的配置和收發(fā) eCAN模塊的初始化。eCAN模塊在使用之前必須初始化,并且只有在模塊處于初始化模式下才能進(jìn)行初始化。通過把CCR位置1可設(shè)置為初始化模式,并且只有當(dāng)CCE位為1時,才能開始執(zhí)行初始化操作,然后配置各個寄存器。

3、eCAN模塊的配置。 配置發(fā)送郵箱。 發(fā)送消息步驟。 配置接收郵箱。 接收消息步驟。 CAN波特率計(jì)算。波特率為每秒傳輸?shù)奈粩?shù):1.3.2 遠(yuǎn)程幀郵箱的處理遠(yuǎn)程幀有兩種操作模式:一種是本模塊向另一節(jié)點(diǎn)發(fā)出數(shù)據(jù)請求;一種是本模塊應(yīng)答另一點(diǎn)發(fā)出的數(shù)據(jù)請求。 向另一節(jié)點(diǎn)請求數(shù)據(jù)。 應(yīng)答一個遠(yuǎn)程請求。 更新數(shù)據(jù)區(qū)。1.3.4 中斷eCAN模塊有兩種中斷類型:一種是與郵箱相關(guān)的中斷,另一種是系統(tǒng)中斷,用來處理錯誤或系統(tǒng)相關(guān)的中斷。 中斷配置。如果滿足了某個中斷條件,就會置位相應(yīng)的中斷標(biāo)志。 郵箱中斷。eCAN模式中的32個郵箱和標(biāo)準(zhǔn)CAN控制模式中的16個郵箱都可以在兩條輸出線0/1上引起中斷。這些中斷

4、都可配置為接收或發(fā)送中斷。 中斷處理。中斷由中斷信號線向CPU申請中斷。在中斷處理完后,CPU一般會清除中斷源與中斷標(biāo)志。1.4 eCAN發(fā)送和接收程序功能描述:ECAN自測試程序,CAN模塊工作在自測試模式。MBX0發(fā)送到MBX16MBX1發(fā)送到MBX17。該程序不停地高速背靠背傳輸數(shù)據(jù),檢查接數(shù)據(jù)的正確性。#include DSP28_Device.hvoid mailbox_check(int32 T1, int32 T2, int32 T3);void mailbox_read(int16 i); /Uint32 ErrorCount = 0; Uint32 MessageReceiv

5、edCount = 0;Uint32 TestMbox1 = 0;Uint32 TestMbox2 = 0;Uint32 TestMbox3 = 0;void CAN_INIT() struct ECAN_REGS ECanaShadow; EALLOW; GpioMuxRegs.GPFMUX.bit.CANTXA_GPIOF6 = 1; / 設(shè)置GPIOF6為CANTX GpioMuxRegs.GPFMUX.bit.CANRXA_GPIOF7 = 1; / 設(shè)置GPIOF7為CANRX EDIS;/*eCAN 控制寄存器需要32位訪問。如果想向一個單獨(dú)位進(jìn)行寫操作,編譯器可能會使其進(jìn)入16位

6、訪問。*/ EALLOW; ECanaShadow.CANTIOC.all = ECanaRegs.CANTIOC.all; / 把CANTIOC讀入影子寄存器 ECanaShadow.CANTIOC.bit.TXFUNC = 1; / 外部引腳I/O使能標(biāo)志位。/ TXFUNC1 CANTX引腳被用于CAN發(fā)送功能。/ TXFUNC0 CANTX引腳被作為通用I/O引腳被使用 ECanaRegs.CANTIOC.all = ECanaShadow.CANTIOC.all; / 把配置好的寄存器值回寫 ECanaShadow.CANRIOC.all = ECanaRegs.CANRIOC.al

7、l; / 把CANRIOC讀影子寄存器 ECanaShadow.CANRIOC.bit.RXFUNC = 1; / 外部引腳I/O使能標(biāo)志位。/ RXFUNC1 CANRX引腳被用于CAN接收功能。/ RXFUNC0 CANRX引腳被作為通用I/O引腳被使用。 ECanaRegs.CANRIOC.all = ECanaShadow.CANRIOC.all; / 把配置好的寄存器值回寫 EDIS;/ 在配置郵箱ID值之前,CANME對應(yīng),位必須復(fù)位,如果CANME寄存器中對應(yīng)的位被置位,則ID寫入操作無效。ECanaRegs.CANME.all = 0; / 復(fù)位所有的郵箱 ECanaMboxe

8、s.MBOX0.MID.all = 0x9555AAA0; / 配置發(fā)送郵箱0的ID:擴(kuò)展標(biāo)識符29位 ECanaMboxes.MBOX1.MID.all = 0x9555AAA1; / 配置發(fā)送郵箱1的ID:擴(kuò)展標(biāo)識符29位 ECanaMboxes.MBOX16.MID.all = 0x9555AAA0; / 確定接收郵箱16的ID ECanaMboxes.MBOX17.MID.all = 0x9555AAA1; / 確定接收郵箱17的ID / 把郵箱015 配置為發(fā)送郵箱,把郵箱1631 配置為接收郵箱 ECanaRegs.CANMD.all = 0xFFFF0000; ECanaRegs

9、.CANME.all = 0xFFFFFFFF; / CAN模塊使能對應(yīng)的郵箱 ECanaMboxes.MBOX0.MCF.bit.DLC = 8; ECanaMboxes.MBOX1.MCF.bit.DLC = 8; / 把發(fā)送,接收數(shù)據(jù),長度定義為8位 ECanaMboxes.MBOX0.MCF.bit.RTR = 0; / 無遠(yuǎn)程幀請求/ 因?yàn)镽TR位在復(fù)位后狀態(tài)不定,因此在程序進(jìn)行初始化的時候必須對該位賦值。 ECanaMboxes.MBOX1.MCF.bit.RTR = 0;/ 把待發(fā)送的數(shù)據(jù)寫入發(fā)送郵箱 ECanaMboxes.MBOX0.MDRL.all = 0x00112233

10、; ECanaMboxes.MBOX0.MDRH.all = 0x44556677; ECanaMboxes.MBOX1.MDRL.all = 0x8899AABB; ECanaMboxes.MBOX1.MDRH.all = 0xCCDDEEFF; EALLOW;/ 郵箱中斷屏蔽寄存器上電后所有的中斷屏蔽位都清零且停止中斷使能。/ 這些位允許獨(dú)立屏蔽任何郵箱中斷。 ECanaRegs.CANMIM.all = 0xFFFFFFFF; / CANMIM .BIT.X1 郵箱中斷被使能(X131)/ CANMIM .BIT.X0 郵箱中斷被禁止(X131) ECanaShadow.CANMC.al

11、l = ECanaRegs.CANMC.all; / 把CANMC讀入影子寄存器 ECanaShadow.CANMC.bit.CCR = 1; / 改變配置請求位 ECanaRegs.CANMC.all = ECanaShadow.CANMC.all; / 把配置好的寄存器值回寫 EDIS;/*CPU要求對配置寄存器CANBTC和SCC的接收屏蔽寄存器(CANGAM,LAM0和LAM3)進(jìn)行寫操作。對該位置位后,CPU必須等待,直到CANES寄存器的CCE標(biāo)志位在送入CANBTC寄存器之前為1 */do ECanaShadow.CANES.all = ECanaRegs.CANES.all;

12、while(ECanaShadow.CANES.bit.CCE != 1 ); / 當(dāng)CCE1時可以對CANBTC進(jìn)行操作。 / 配置波特率 EALLOW; ECanaShadow.CANBTC.all = ECanaRegs.CANBTC.all; / 把CANBTC讀入影子寄存器 ECanaShadow.CANBTC.bit.BRP = 149; / (BRP+1)150,最小時間單位TQ1us ECanaShadow.CANBTC.bit.TSEG2 = 2; / 位定時bit-time(TSEG1+1)+(TSEG1+1)+1 ECanaShadow.CANBTC.bit.TSEG1

13、= 3; / bit-time8us, 所以波特率為125Kpbs ECanaRegs.CANBTC.all = ECanaShadow.CANBTC.all; / 把配置好的寄存器值回寫 ECanaShadow.CANMC.all = ECanaRegs.CANMC.all; / 把CANMC讀入影子寄存器 ECanaShadow.CANMC.bit.CCR = 0 ; / 設(shè)置CCR0, CPU請求正常模式 ECanaRegs.CANMC.all = ECanaShadow.CANMC.all; / 把配置好的寄存器值回寫 EDIS; do ECanaShadow.CANES.all =

14、ECanaRegs.CANES.all; while(ECanaShadow.CANES.bit.CCE != 0 ); / 等待 CCE 位被清零/ 配置eCAN為自測試模式,使能eCAN的增強(qiáng)特性 EALLOW; ECanaShadow.CANMC.all = ECanaRegs.CANMC.all; ECanaShadow.CANMC.bit.STM = 1; / 配置CAN 為自測試模式 / CANMC.bit.STM0,正常模式,CANMC.bit.STM1,自測試模式 ECanaShadow.CANMC.bit.SCM = 1; / 選擇HECC工作模式 ECanaRegs.CAN

15、MC.all = ECanaShadow.CANMC.all; EDIS;void main(void) Uint16 j; InitSysCtrl(); / 系統(tǒng)初始化程序該子程序DSP28_sysctrl.c中 DINT; / 關(guān)閉總中斷 IER = 0x0000; / 關(guān)閉外設(shè)中斷 IFR = 0x0000; / 請中斷標(biāo)志 CAN_INIT();/ 開始循環(huán)發(fā)送數(shù)據(jù) while(1) ECanaRegs.CANTRS.all = 0x00000003; while(ECanaRegs.CANTA.all != 0x00000003 ) ; ECanaRegs.CANTA.all = 0x0000FFFF; MessageReceivedCount+; for(j

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論