DSP28335CAN通訊程序中文說明.doc_第1頁
DSP28335CAN通訊程序中文說明.doc_第2頁
DSP28335CAN通訊程序中文說明.doc_第3頁
DSP28335CAN通訊程序中文說明.doc_第4頁
DSP28335CAN通訊程序中文說明.doc_第5頁
已閱讀5頁,還剩2頁未讀 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

#include DSP2833x_Device.h / DSP2833x Headerfile Include File#include DSP2833x_Examples.h / DSP2833x Examples Include File/ Prototype statements for functions found within this file.void mailbox_check(int32 T1, int32 T2, int32 T3);void mailbox_read(int16 i); / Global variable for this exampleUint32 ErrorCount;Uint32 PassCount;Uint32 MessageReceivedCount;Uint32 TestMbox1 = 0;Uint32 TestMbox2 = 0;Uint32 TestMbox3 = 0;void main(void) Uint16 j;/ eCAN控制寄存器需要使用32位的讀/寫訪問。 因此,為此示例創(chuàng)建一組影子寄存器。 這些影子寄存器將用于確保訪問是32位而不是16位。 struct ECAN_REGS ECanbShadow; / 步驟1.初始化系統(tǒng)控制:PLL,看門狗,啟用外設(shè)時鐘。該示例功能可在DSP2833x_SysCtrl.c文件中找到。 InitSysCtrl();/ 步驟2.初始化GPIO:在DSP2833x Gpio.c文件中找到該示例函數(shù),并說明如何將GPIO設(shè)置為默認狀態(tài)。/ InitGpio(); / Skipped for this example / 在這個例子中,使用GPIO寄存器在這里配置CAN引腳。這個函數(shù)在DSP2833x_ECan.c中找到 InitECanGpio();/ 步驟3。清除所有中斷并初始化PIE矢量表:禁用CPU中斷 DINT;/ 將PIE控制寄存器初始化為默認狀態(tài)。 默認狀態(tài)是禁止所有的PIE中斷并清除標志。 這個函數(shù)可以在DSP2833x_PieCtrl.c文件中找到。 InitPieCtrl();/ 禁用CPU中斷并清除所有CPU中斷標志: IER = 0x0000; IFR = 0x0000;/ Initialize the PIE vector table with pointers to the shell Interrupt / Service Routines (ISR). / This will populate the entire table, even if the interrupt/ is not used in this example. This is useful for debug purposes./ The shell ISR routines are found in DSP2833x_DefaultIsr.c./ This function is found in DSP2833x_PieVect.c. InitPieVectTable();/ 步驟4.初始化所有器件外設(shè):此功能可在DSP2833x_InitPeripherals.c中找到./ InitPeripherals(); / Not required for this example / 第5步。用戶特定的代碼,啟用中斷: MessageReceivedCount = 0; ErrorCount = 0; PassCount = 0; / eCAN控制寄存器需要32位訪問。 如果要寫入單個位,編譯器可能會將此訪問分解為16位訪問。此處介紹的一種解決方案是使用影子寄存器來強制32位訪問。 / 將整個寄存器讀入一個影子寄存器。 這個訪問將是32位。 更改所需的位并將其值復(fù)制到32位寫入的eCAN寄存器。 / 為eCAN傳輸配置eCAN RX和TX引腳 EALLOW; ECanbShadow.CANTIOC.all = ECanbRegs.CANTIOC.all; /eCAN I/O控制寄存器 ECanbShadow.CANTIOC.bit.TXFUNC = 1; /CANTX引腳用于CAN發(fā)送功能 ECanbRegs.CANTIOC.all = ECanbShadow.CANTIOC.all; ECanbShadow.CANRIOC.all = ECanbRegs.CANRIOC.all; /eCAN I/O控制寄存器 ECanbShadow.CANRIOC.bit.RXFUNC = 1; /CANRX引腳用于CAN發(fā)送功能 ECanbRegs.CANRIOC.all = ECanbShadow.CANRIOC.all; EDIS; /禁用所有的郵箱。 /因為寫入整個寄存器(而不是一個位域),影子寄存器是不需要的。 ECanbRegs.CANME.all = 0; /郵箱激活寄存器:激活或者屏蔽獨立的郵箱 /郵箱可以一次寫入16位或32位。寫入TRANSMIT郵箱的MSGID字段MBOX0-15。 ECanbMboxes.MBOX0.MSGID.all = 0x9555AAA0; /郵箱標識符寄存器 ECanbMboxes.MBOX1.MSGID.all = 0x9555AAA1; ECanbMboxes.MBOX2.MSGID.all = 0x9555AAA2; ECanbMboxes.MBOX3.MSGID.all = 0x9555AAA3; ECanbMboxes.MBOX4.MSGID.all = 0x9555AAA4; ECanbMboxes.MBOX5.MSGID.all = 0x9555AAA5; ECanbMboxes.MBOX6.MSGID.all = 0x9555AAA6; ECanbMboxes.MBOX7.MSGID.all = 0x9555AAA7; ECanbMboxes.MBOX8.MSGID.all = 0x9555AAA8; ECanbMboxes.MBOX9.MSGID.all = 0x9555AAA9; ECanbMboxes.MBOX10.MSGID.all = 0x9555AAAA; ECanbMboxes.MBOX11.MSGID.all = 0x9555AAAB; ECanbMboxes.MBOX12.MSGID.all = 0x9555AAAC; ECanbMboxes.MBOX13.MSGID.all = 0x9555AAAD; ECanbMboxes.MBOX14.MSGID.all = 0x9555AAAE; ECanbMboxes.MBOX15.MSGID.all = 0x9555AAAF; / 寫入RECEIVE郵箱的MSGID字段MBOX16-31 ECanbMboxes.MBOX16.MSGID.all = 0x9555AAA0; ECanbMboxes.MBOX17.MSGID.all = 0x9555AAA1; ECanbMboxes.MBOX18.MSGID.all = 0x9555AAA2; ECanbMboxes.MBOX19.MSGID.all = 0x9555AAA3; ECanbMboxes.MBOX20.MSGID.all = 0x9555AAA4; ECanbMboxes.MBOX21.MSGID.all = 0x9555AAA5; ECanbMboxes.MBOX22.MSGID.all = 0x9555AAA6; ECanbMboxes.MBOX23.MSGID.all = 0x9555AAA7; ECanbMboxes.MBOX24.MSGID.all = 0x9555AAA8; ECanbMboxes.MBOX25.MSGID.all = 0x9555AAA9; ECanbMboxes.MBOX26.MSGID.all = 0x9555AAAA; ECanbMboxes.MBOX27.MSGID.all = 0x9555AAAB; ECanbMboxes.MBOX28.MSGID.all = 0x9555AAAC; ECanbMboxes.MBOX29.MSGID.all = 0x9555AAAD; ECanbMboxes.MBOX30.MSGID.all = 0x9555AAAE; ECanbMboxes.MBOX31.MSGID.all = 0x9555AAAF; / 將郵箱0-15配置為Tx,將16-31配置為Rx / 由于這是寫入整個寄存器(而不是位字段),所以不需要影子寄存器。 ECanbRegs.CANMD.all = 0xFFFF0000; /郵箱方向寄存器 / 啟用所有郵箱 / 由于這是寫入整個寄存器(而不是位字段),所以不需要影子寄存器。 ECanbRegs.CANME.all = 0xFFFFFFFF; / 指定8位將被發(fā)送/接收 ECanbMboxes.MBOX0.MSGCTRL.bit.DLC = 8; /消息控制寄存器,DLC位中的數(shù)字決定了被發(fā)送或接受的字節(jié)數(shù),合適的范圍是0-8. ECanbMboxes.MBOX1.MSGCTRL.bit.DLC = 8; ECanbMboxes.MBOX2.MSGCTRL.bit.DLC = 8; ECanbMboxes.MBOX3.MSGCTRL.bit.DLC = 8; ECanbMboxes.MBOX4.MSGCTRL.bit.DLC = 8; ECanbMboxes.MBOX5.MSGCTRL.bit.DLC = 8; ECanbMboxes.MBOX6.MSGCTRL.bit.DLC = 8; ECanbMboxes.MBOX7.MSGCTRL.bit.DLC = 8; ECanbMboxes.MBOX8.MSGCTRL.bit.DLC = 8; ECanbMboxes.MBOX9.MSGCTRL.bit.DLC = 8; ECanbMboxes.MBOX10.MSGCTRL.bit.DLC = 8; ECanbMboxes.MBOX11.MSGCTRL.bit.DLC = 8; ECanbMboxes.MBOX12.MSGCTRL.bit.DLC = 8; ECanbMboxes.MBOX13.MSGCTRL.bit.DLC = 8; ECanbMboxes.MBOX14.MSGCTRL.bit.DLC = 8; ECanbMboxes.MBOX15.MSGCTRL.bit.DLC = 8; / 設(shè)置為沒有請求遠程幀 / 由于RTR位在復(fù)位時未定義,因此必須將其初始化為適當(dāng)?shù)闹?ECanbMboxes.MBOX0.MSGCTRL.bit.RTR = 0; /消息控制寄存器遠程發(fā)送請求位 ECanbMboxes.MBOX1.MSGCTRL.bit.RTR = 0; ECanbMboxes.MBOX2.MSGCTRL.bit.RTR = 0; ECanbMboxes.MBOX3.MSGCTRL.bit.RTR = 0; ECanbMboxes.MBOX4.MSGCTRL.bit.RTR = 0; ECanbMboxes.MBOX5.MSGCTRL.bit.RTR = 0; ECanbMboxes.MBOX6.MSGCTRL.bit.RTR = 0; ECanbMboxes.MBOX7.MSGCTRL.bit.RTR = 0; ECanbMboxes.MBOX8.MSGCTRL.bit.RTR = 0; ECanbMboxes.MBOX9.MSGCTRL.bit.RTR = 0; ECanbMboxes.MBOX10.MSGCTRL.bit.RTR = 0; ECanbMboxes.MBOX11.MSGCTRL.bit.RTR = 0; ECanbMboxes.MBOX12.MSGCTRL.bit.RTR = 0; ECanbMboxes.MBOX13.MSGCTRL.bit.RTR = 0; ECanbMboxes.MBOX14.MSGCTRL.bit.RTR = 0; ECanbMboxes.MBOX15.MSGCTRL.bit.RTR = 0; / 寫入郵箱MBOX0-15的RAM字段 / 消息數(shù)據(jù)寄存器 ECanbMboxes.MBOX0.MDL.all = 0x9555AAA0; ECanbMboxes.MBOX0.MDH.all = 0x89ABCDEF; ECanbMboxes.MBOX1.MDL.all = 0x9555AAA1; ECanbMboxes.MBOX1.MDH.all = 0x89ABCDEF; ECanbMboxes.MBOX2.MDL.all = 0x9555AAA2; ECanbMboxes.MBOX2.MDH.all = 0x89ABCDEF; ECanbMboxes.MBOX3.MDL.all = 0x9555AAA3; ECanbMboxes.MBOX3.MDH.all = 0x89ABCDEF; ECanbMboxes.MBOX4.MDL.all = 0x9555AAA4; ECanbMboxes.MBOX4.MDH.all = 0x89ABCDEF; ECanbMboxes.MBOX5.MDL.all = 0x9555AAA5; ECanbMboxes.MBOX5.MDH.all = 0x89ABCDEF; ECanbMboxes.MBOX6.MDL.all = 0x9555AAA6; ECanbMboxes.MBOX6.MDH.all = 0x89ABCDEF; ECanbMboxes.MBOX7.MDL.all = 0x9555AAA7; ECanbMboxes.MBOX7.MDH.all = 0x89ABCDEF; ECanbMboxes.MBOX8.MDL.all = 0x9555AAA8; ECanbMboxes.MBOX8.MDH.all = 0x89ABCDEF; ECanbMboxes.MBOX9.MDL.all = 0x9555AAA9; ECanbMboxes.MBOX9.MDH.all = 0x89ABCDEF; ECanbMboxes.MBOX10.MDL.all = 0x9555AAAA; ECanbMboxes.MBOX10.MDH.all = 0x89ABCDEF; ECanbMboxes.MBOX11.MDL.all = 0x9555AAAB; ECanbMboxes.MBOX11.MDH.all = 0x89ABCDEF; ECanbMboxes.MBOX12.MDL.all = 0x9555AAAC; ECanbMboxes.MBOX12.MDH.all = 0x89ABCDEF; ECanbMboxes.MBOX13.MDL.all = 0x9555AAAD; ECanbMboxes.MBOX13.MDH.all = 0x89ABCDEF; ECanbMboxes.MBOX14.MDL.all = 0x9555AAAE; ECanbMboxes.MBOX14.MDH.all = 0x89ABCDEF; ECanbMboxes.MBOX15.MDL.all = 0x9555AAAF; ECanbMboxes.MBOX15.MDH.all = 0x89ABCDEF; / 由于這是寫入整個寄存器(而不是位字段),所以不需要影子寄存器。 EALLOW; ECanbRegs.CANMIM.all = 0xFFFFFFFF; /郵箱中斷屏蔽寄存器,該寄存器受EALLOE保護。郵箱中斷使能。 / 請求權(quán)限來更改配置寄存器 ECanbShadow.CANMC.all = ECanbRegs.CANMC.all; /主控制寄存器 ECanbShadow.CANMC.bit.CCR = 1; /改變配置請求位 ECanbRegs.CANMC.all = ECanbShadow.CANMC.all; EDIS; / 等待CPU被授予更改配置寄存器的權(quán)限 / 等待CCE位置位 do ECanbShadow.CANES.all = ECanbRegs.CANES.all; /錯誤和狀態(tài)寄存器 while(ECanbShadow.CANES.bit.CCE != 1 ); /更改配置使能位,該位顯示了配置訪問權(quán)限。 / 配置eCAN時間 EALLOW; ECanbShadow.CANBTC.all = ECanbRegs.CANBTC.all; /位時序配置寄存器,該寄存器在用戶模式下是寫保護的,并只能在初始化模式下進行寫入。 ECanbShadow.CANBTC.bit.BRPREG = 9; / 波特率欲調(diào)節(jié)。該寄存器為波特率設(shè)置進行預(yù)定義。(BRPREG+1)=10 提供一個15MHz的CAN時鐘 (150/10=15) ECanbShadow.CANBTC.bit.TSEG2REG = 5; / 位定時 bit-time=(TSEG1+1)+(TSEG1 +1)+1 ECanbShadow.CANBTC.bit.TSEG1REG = 7; / Bit time = 15 ECanbRegs.CANBTC.all = ECanbShadow.CANBTC.all; ECanbShadow.CANMC.all = ECanbRegs.CANMC.all; ECanbShadow.CANMC.bit.CCR = 0; ECanbRegs.CANMC.all = ECanbShadow.CANMC.all; EDIS; / 等到CPU不再有權(quán)更改配置寄存器 do ECanbShadow.CANES.all = ECanbRegs.CANES.all; while(ECanbShadow.CANES.bit.CCE != 0 ); / 將eCAN配置為自檢模式 / 啟用eCAN的增強功能。 EALLOW; ECanbShadow.CANMC.all = ECanbRegs.CANMC.all; ECanbShadow.CANMC.bit.STM = 1; / 將CAN配置為自檢模式。在這種模式下,CAN模塊能夠產(chǎn)生它自己的應(yīng)答信號(ACK),從而允許在沒有總線連接到模塊的情況下進行操作。 ECanbShadow.CANMC.bit.SCB = 1; / SCC兼容性位:選擇eCAN模式(需要訪問32個郵箱) ECanbRegs.CANM

溫馨提示

  • 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)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論