DSP28335中文資料_第1頁
DSP28335中文資料_第2頁
DSP28335中文資料_第3頁
DSP28335中文資料_第4頁
DSP28335中文資料_第5頁
已閱讀5頁,還剩41頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

1、TMS320F28335 TechV_28335目錄1 DSP的PWM信號(hào)111簡(jiǎn)介112端口對(duì)應(yīng)關(guān)系213初始化程序注釋22 DSP的CAN通信321CAN2.0B協(xié)議簡(jiǎn)述322CAN總線電平423CAN總線上的120歐電阻624DSP的CAN時(shí)鐘模塊625郵箱初始化例程注解726消息發(fā)送和接收827CAN的適配器存在的一些問題93 DSP的32位浮點(diǎn)運(yùn)算測(cè)試104 DSP定時(shí)器中斷1141 DSP28335的定時(shí)器1142定時(shí)器分頻1143 計(jì)數(shù)器計(jì)數(shù)1244定時(shí)器時(shí)鐘周期125 DSP看門狗復(fù)位1251看門狗時(shí)鐘1252看門狗系統(tǒng)控制和狀態(tài)寄存器(SCSR)1353看門狗計(jì)數(shù)寄存器(WD

2、CNTR)1354看門狗重啟管理器(WDKEY)1455看門狗控制寄存器(WDCR)146 軟件報(bào)錯(cuò)與處理1561CCS Setup中仿真器的配置1562Connect報(bào)錯(cuò)1145換仿真器解決1763CAN口測(cè)試A發(fā)B收,數(shù)據(jù)發(fā)不出去1964編譯Pwm測(cè)試文件出錯(cuò)1965could not open source file "DSP2833x_Device.h207 備注與注意事項(xiàng)228 附錄 C源程序2281PWM初始化及脈沖產(chǎn)生函數(shù)2282郵箱初始化函數(shù)3383浮點(diǎn)運(yùn)算測(cè)試函數(shù)3684定時(shí)器中斷初始化函數(shù)3785采用定時(shí)器的延時(shí)函數(shù)3986看門狗初始化函數(shù)40DSP28335測(cè)試

3、總結(jié)1 DSP的PWM信號(hào)11簡(jiǎn)介DSP28335共12路16位的ePWM,能進(jìn)行頻率和占空比控制。ePWM的時(shí)鐘TBCLK=SYSCLKOUT/(HSPCLKDIV×CLKDIV):PWM信號(hào)頻率由時(shí)基周期寄存器TBPDR和時(shí)基計(jì)數(shù)器的計(jì)數(shù)模式?jīng)Q定。初始化程序采用的計(jì)數(shù)模式為遞增計(jì)數(shù)模式。在遞增計(jì)數(shù)模式下,時(shí)基計(jì)數(shù)器從零開始增加,直到達(dá)到周期寄存器值(TBPDR)。然后時(shí)基計(jì)數(shù)器復(fù)位到零,再次開始增加。PWM信號(hào)周期與頻率的計(jì)算如下:12端口對(duì)應(yīng)關(guān)系通道相應(yīng)PWM的A/B對(duì)應(yīng)JP0B端口號(hào)1ePWMA92ePWM103ePWMA114ePWM125ePWMA136ePWM147eP

4、WMA158ePWM169ePWMA1710ePWM1811ePWMA1912ePWM20說明:JP0B的端口號(hào)按“Z”字形順序數(shù)。13初始化程序注釋void InitPwm1AB(float32 f)Uint16 T= 2343750/f-1.0;/系統(tǒng)時(shí)鐘SYSCLKOUT=150MHz,TBCLK=6.6666667ns,在連續(xù)增計(jì)數(shù)模式下,f=150000000/(TBPDR+1)EALLOW;/先初始化通用輸入輸出口/GpioCtrlRegs.GPAPUD.bit.GPIO0 = 0;GpioCtrlRegs.GPAMUX1.bit.GPIO0 = 1;GpioCtrlRegs.GP

5、APUD.bit.GPIO1 = 0; GpioCtrlRegs.GPAMUX1.bit.GPIO1 = 1; EPwm1Regs.TBPHS.half.TBPHS = 0; / 在相位寄存器中設(shè)置計(jì)數(shù)器的起始計(jì)數(shù)位置/下面兩條語句組合對(duì)PWM的時(shí)鐘進(jìn)行分頻EPwm1Regs.TBCTL.bit.CLKDIV = 6;EPwm1Regs.TBCTL.bit.HSPCLKDIV = 0;EPwm1Regs.TBPRD = T; /在周期寄存器中設(shè)置計(jì)數(shù)器的計(jì)數(shù)周期/TBCTL為定時(shí)器控制寄存器EPwm1Regs.TBCTL.bit.CTRMODE = TB_COUNT_UP; /設(shè)置計(jì)數(shù)模式位為

6、連續(xù)增計(jì)數(shù)模式,產(chǎn)生對(duì)稱方波EPwm1Regs.TBCTL.bit.PHSEN = TB_DISABLE; / 將定時(shí)器相位使能位關(guān)閉EPwm1Regs.TBCTL.bit.PRDLD = TB_SHADOW;/映射寄存器SHADOW使能并配置映射寄存器為自動(dòng)讀寫EPwm1Regs.TBCTL.bit.SYNCOSEL = TB_CTR_ZERO; / 定時(shí)器時(shí)鐘源選擇,一共有四種時(shí)鐘源EPwm1Regs.CMPA.half.CMPA= 0.0001*T;/ 設(shè)置EPWM1A比較值寄存器的比較值,即體現(xiàn)EPWM1A的占空比EPwm1Regs.CMPB= 0.0001*T;EPwm1Regs.C

7、MPCTL.bit.SHDWAMODE = CC_SHADOW;/A模塊比較模式EPwm1Regs.CMPCTL.bit.SHDWBMODE = CC_SHADOW;/B模塊比較模式EPwm1Regs.CMPCTL.bit.LOADAMODE = CC_CTR_ZERO; / A模塊比較使能,通過寫0來清除SHDWAMODE位來使能load on CTR=ZeroEPwm1Regs.CMPCTL.bit.LOADBMODE = CC_CTR_ZERO; / B模塊比較使能,通過寫0來清除SHDWBMODE位來使能load on CTR=Zero/AQCTLA為輸出A比較方式控制寄存器EPwm1

8、Regs.AQCTLA.bit.ZRO = AQ_SET; / TBCTR(計(jì)數(shù)器)計(jì)到零時(shí)使輸出為反向EPwm1Regs.AQCTLA.bit.CAU = AQ_CLEAR;/TBCTR(計(jì)數(shù)器)與CMPA在up計(jì)數(shù)時(shí)相等使輸出為high,這關(guān)系的輸出的占空比EPwm1Regs.AQCTLB.bit.ZRO = AQ_SET; EPwm1Regs.AQCTLB.bit.CBU = AQ_CLEAR;EDIS;2 DSP的CAN通信21CAN2.0B協(xié)議簡(jiǎn)述TMS320F28335上有2個(gè)增強(qiáng)型CAN總線控制器,符合CAN2.0B協(xié)議,其總線波特率可達(dá)到1Mbps。符合CAN2.0B協(xié)議的數(shù)據(jù)

9、幀為擴(kuò)展數(shù)據(jù)幀,即采用29位標(biāo)識(shí)符。數(shù)據(jù)幀的數(shù)據(jù)域最多可含8個(gè)字節(jié),則DSP28335的數(shù)據(jù)幀位數(shù)為64128位。CAN協(xié)議規(guī)定采用幀的形式進(jìn)行通信,有4種不同類型的幀: 數(shù)據(jù)幀:攜帶數(shù)據(jù)從一個(gè)發(fā)送節(jié)點(diǎn)到一個(gè)接收節(jié)點(diǎn); 遠(yuǎn)程幀:它被一個(gè)節(jié)點(diǎn)發(fā)送出去用以請(qǐng)求發(fā)送具有相同標(biāo)識(shí)符的數(shù)據(jù)幀,通過發(fā)送遠(yuǎn)程幀,一個(gè)節(jié)點(diǎn)需要的數(shù)據(jù)可以通過請(qǐng)求另一個(gè)節(jié)點(diǎn)發(fā)送相應(yīng)的數(shù)據(jù)幀來獲得,數(shù)據(jù)幀和相應(yīng)的遠(yuǎn)程幀使用相同標(biāo)識(shí)符; 錯(cuò)誤幀:在總線錯(cuò)誤檢測(cè)時(shí)由任意節(jié)點(diǎn)發(fā)送的幀; 超載幀:在前后兩個(gè)數(shù)據(jù)幀或遠(yuǎn)程幀之間提供一個(gè)額外的延遲。通信報(bào)文的優(yōu)先級(jí)由標(biāo)識(shí)符決定,標(biāo)識(shí)符數(shù)值越小,優(yōu)先級(jí)越高。最高優(yōu)先級(jí)的報(bào)文在總線仲裁的過程中獲得

10、總線的訪問權(quán),低優(yōu)先級(jí)報(bào)文在下一個(gè)總線空閑自動(dòng)重發(fā)。CAN2.0B協(xié)議的數(shù)據(jù)幀格式如下圖所示:對(duì)于CAN2.0B協(xié)議的消息,其標(biāo)識(shí)符擴(kuò)展位IDE(MSGID31)必須置1,由此可知給DSP的郵箱初始化標(biāo)識(shí)符ID時(shí),其16進(jìn)制賦值的最高位至少應(yīng)當(dāng)為8.在不同的系統(tǒng)中,CAN總線的波特率可以不同,其可適應(yīng)的信息傳輸距離也不同;但在同一個(gè)系統(tǒng)中,其總線波特率必須一致,所以DSP28335在初始化波特率時(shí),A路和B路應(yīng)當(dāng)同時(shí)進(jìn)行一致的初始化。22CAN總線電平CAN總線的理論電平如下圖所示:高速CAN與低速CAN在總線電平上有區(qū)別,如下圖所示:高速CAN與低速CAN的高速低速之分在于支持的總線波特率不

11、一樣。實(shí)驗(yàn)用的開發(fā)板上的收發(fā)器PCA82C250第8腳接地,故為高速CAN模式。高速CAN為提高通信的抗干擾性和可靠性,應(yīng)進(jìn)行光耦隔離。開發(fā)板的CAN接口部分電路如下圖所示:23CAN總線上的120歐電阻CAN總線終端以及各個(gè)節(jié)點(diǎn)終端通常均有120歐電阻,其作用在于匹配總線阻抗,提高數(shù)據(jù)通信的抗干擾性及可靠行,有效地增強(qiáng)信號(hào)強(qiáng)度。高頻信號(hào)傳輸時(shí),信號(hào)波長(zhǎng)相對(duì)傳輸線較短,信號(hào)在傳輸線終端會(huì)形成反射波,干擾原信號(hào),所以需要在傳輸線末端加終端電阻,根據(jù)傳輸線理論,終端電阻可以吸收網(wǎng)絡(luò)上的反射波,使信號(hào)到達(dá)傳輸線末端后不反射。兩個(gè)終端電阻并聯(lián)后的值應(yīng)當(dāng)基本等于傳輸線在通信頻率上的特性阻抗。終端電阻典型

12、值為120歐姆.在網(wǎng)絡(luò)連接線非常短、臨時(shí)或?qū)嶒?yàn)室測(cè)試時(shí)也可以不使用終端電阻。24DSP的CAN時(shí)鐘模塊CAN的時(shí)鐘頻率 其中,為波特率預(yù)定標(biāo)寄存器,用于將系統(tǒng)時(shí)鐘分頻為CAN時(shí)鐘,。若采用3次采樣模式,必須滿足。CAN總線上的時(shí)間周期長(zhǎng)度由、以及決定:,;,(注意必須大于或等于);波特率25郵箱初始化例程注解void InitMboxA0(Uint32 MID,Uint16 DTL,Uint16 TR)struct ECAN_REGS ECanaShadow;EALLOW; ECanaShadow.CANTIOC.all = ECanaRegs.CANTIOC.all; ECanaShadow

13、.CANTIOC.bit.TXFUNC = 1; ECanaRegs.CANTIOC.all = ECanaShadow.CANTIOC.all; ECanaShadow.CANRIOC.all = ECanaRegs.CANRIOC.all; ECanaShadow.CANRIOC.bit.RXFUNC = 1; ECanaRegs.CANRIOC.all = ECanaShadow.CANRIOC.all;ECanaShadow.CANMC.all = ECanaRegs.CANMC.all;ECanaShadow.CANMC.bit.SCB = 1; /選擇eCAN模式,將32個(gè)郵箱寄存

14、器全部使用起來ECanaRegs.CANMC.all = ECanaShadow.CANMC.all; ECanaMboxes.MBOX0.MSGCTRL.all = 0x00000000;/此語句含郵箱號(hào),可以修改/以下狀態(tài)或標(biāo)志寄存器通過寫1清零/ECanaRegs.CANTA.all= 0xFFFFFFFF;ECanaRegs.CANRMP.all= 0xFFFFFFFF;ECanaRegs.CANGIF0.all= 0xFFFFFFFF;ECanaRegs.CANGIF1.all= 0xFFFFFFFF;/配置郵箱收發(fā)方向/ ECanaShadow.CANMD.all = ECanaR

15、egs.CANMD.all; ECanaShadow.CANMD.bit.MD0 = TR; /此語句含郵箱號(hào),可以修改 ECanaRegs.CANMD.all = ECanaShadow.CANMD.all; /配置標(biāo)識(shí)符ID,寫標(biāo)識(shí)符前必須關(guān)閉使能位/ ECanaShadow.CANME.all = ECanaRegs.CANME.all; ECanaRegs.CANME.bit.ME0= 0; /此語句含郵箱號(hào),可以修改 ECanaRegs.CANME.all = ECanaShadow.CANME.all;ECanaMboxes.MBOX0.MSGID.all = MID; /此語句含

16、郵箱號(hào),可以修改/標(biāo)識(shí)符配置結(jié)束后使能相應(yīng)的郵箱/ ECanaShadow.CANME.all = ECanaRegs.CANME.all; ECanaShadow.CANME.bit.ME0 = 1; /此語句含郵箱號(hào),可以修改 ECanaRegs.CANME.all = ECanaShadow.CANME.all;/設(shè)置數(shù)據(jù)長(zhǎng)度的字節(jié)數(shù)/ ECanaMboxes.MBOX0.MSGCTRL.bit.DLC = DTL;/此語句含郵箱號(hào),可以修改EDIS;26消息發(fā)送和接收1、消息發(fā)送/往發(fā)送郵箱中寫數(shù)據(jù),分別寫低32位4字節(jié)和高32位4字節(jié)ECanaMboxes.MBOX0.MDL.all

17、 = MDL;ECanaMboxes.MBOX0.MDH.all = MDH;/置位準(zhǔn)備發(fā)送,將發(fā)送請(qǐng)求位置位,使能郵箱發(fā)送功能ECanaShadow.CANTRS.all = 0;ECanaShadow.CANTRS.bit.TRS0 = 1; ECanaRegs.CANTRS.all = ECanaShadow.CANTRS.all;doECanaShadow.CANTA.all = ECanaRegs.CANTA.all; while(ECanaShadow.CANTA.bit.TA0 = 0 ); /當(dāng)郵箱的消息被成功發(fā)送時(shí),發(fā)送應(yīng)答位TA將置1ECanaShadow.CANTA.bi

18、t.TA0 = 1; /寫1清零,準(zhǔn)備判別下一次發(fā)送與否ECanaRegs.CANTA.all=ECanaShadow.CANTA.all;2、消息的接收struct ECAN_REGS ECanaShadow;ECanaShadow.CANRMP.all = ECanaRegs.CANRMP.all;dowhile(ECanaShadow.CANRMP.bit.RMP1 != 1 );/當(dāng)接收消息成功時(shí),接收待決位RMP0置位為1 ECanaShadow.CANRMP.bit.RMP1 = 1;/接收消息待決位通過寫1清零ECanaRegs.CANRMP.all=ECanaShadow.CA

19、NRMP.all;27CAN的適配器存在的一些問題過濾器配置明顯不對(duì)但任然能接受數(shù)據(jù):波特率是2倍關(guān)系3 DSP的32位浮點(diǎn)運(yùn)算測(cè)試TESTCOUNT1對(duì)應(yīng)于正弦運(yùn)算的時(shí)鐘周期數(shù)TESTCOUNT2對(duì)應(yīng)于加法運(yùn)算的時(shí)鐘周期數(shù)TESTCOUNT3對(duì)應(yīng)于除法運(yùn)算的時(shí)鐘周期數(shù)1、單單次運(yùn)算:2、循環(huán)10次運(yùn)算:3、循環(huán)100次運(yùn)算:4、結(jié)果分析:按多次統(tǒng)計(jì)求平均的原則,DSP28335的32位浮點(diǎn)運(yùn)算時(shí)間為:?jiǎn)未渭臃ǎ?0個(gè)時(shí)鐘周期,約為單次除法:250個(gè)時(shí)鐘周期,約為單次正弦:82個(gè)時(shí)鐘周期,約為5、補(bǔ)充說明:系統(tǒng)時(shí)鐘周期為6、浮點(diǎn)運(yùn)算正弦值并畫圖4 DSP定時(shí)器中斷41 DSP28335的定時(shí)器

20、TMS320F28335一共有3個(gè)32位CPU定時(shí)器,其中定時(shí)器0可以被用戶使用,定時(shí)器1和定時(shí)器2則被保留為實(shí)時(shí)操作系統(tǒng)使用(這是文件DSP2833x_CpuTimers.c中的說法,而手冊(cè)2823x System Control and Interrupts Reference Guide中講0和1可用而2被保留。這一點(diǎn)如有必要需更多的測(cè)試)。本程序中主要涉及的定時(shí)器寄存器有計(jì)數(shù)寄存器TIM(32位,分高16位和低16位)、周期寄存器PRD(32位,分高16位和低16位)、定時(shí)器分頻寄存器TDDR(16位,分高8位和低8位)以及定時(shí)器控制寄存器TCR。42定時(shí)器分頻本程序定時(shí)器的分頻值為零

21、,則進(jìn)行1分頻,定時(shí)器周期等于系統(tǒng)輸出時(shí)鐘周期。如下圖,分頻值可以在文件DSP2833x_CpuTimers.c中的函數(shù)void InitCpuTimers(void)中去修改。43 計(jì)數(shù)器計(jì)數(shù)每過一個(gè)定時(shí)器時(shí)鐘周期,定時(shí)器計(jì)數(shù)器寄存器TIM減1,當(dāng)TIM遞減到0時(shí),產(chǎn)生一個(gè)CPU中斷信號(hào)并將PRD的值重載到TIM中,TIM繼續(xù)遞減計(jì)數(shù)。詳參資料2823x System Control and Interrupts Reference Guide第62頁,如下圖:44定時(shí)器時(shí)鐘周期定時(shí)器時(shí)鐘周期即對(duì)系統(tǒng)時(shí)鐘進(jìn)行分頻而得到。注:詳參任潤(rùn)柏,周荔丹等.TMS320F28x源碼解讀,北京:電子工業(yè)出

22、版社,2010,2437.5 DSP看門狗復(fù)位51看門狗時(shí)鐘看門狗時(shí)鐘發(fā)生器:WDCLK = CLKOUT/512,當(dāng)HALT時(shí)停止。6-bits預(yù)定標(biāo)WDPS選擇:將WDCLK再分頻后送給看門狗定時(shí)器。WDPS為WDCR的20 位。其6-bits配置作用如下:000 WDCLK=OSCCLK/512/1;001 WDCLK=OSCCLK/512/1;010 WDCLK=OSCCLK/512/2;011 WDCLK=OSCCLK/512/4;100 WDCLK=OSCCLK/512/8;101 WDCLK=OSCCLK/512/16;110 WDCLK=OSCCLK/512/32;111 WD

23、CLK=OSCCLK/512/64;52看門狗系統(tǒng)控制和狀態(tài)寄存器(SCSR)高13位均保留,只控制低3位:53看門狗計(jì)數(shù)寄存器(WDCNTR)計(jì)數(shù)器WDCNTR:低8位為計(jì)數(shù)器,當(dāng)?shù)?位溢出時(shí),產(chǎn)生一個(gè)復(fù)位信號(hào)。此寄存器為只讀寄存器。54看門狗重啟管理器(WDKEY)利用軟件定時(shí)向看門狗復(fù)位控制寄存器WDKEY寫“0x55+0xAA”序列,即可以復(fù)位看門狗計(jì)數(shù)器:void ServiceDog(void) EALLOW; SysCtrlRegs.WDKEY = 0x0055; SysCtrlRegs.WDKEY = 0x00AA; EDIS;看門狗重啟管理器(WDKEY)的低8位參與控制,只

24、有先寫入55h后寫入AAh后重啟看門狗計(jì)數(shù)器。不是此順序?qū)懭?5h或AAh,則無效。寫入其他數(shù)值時(shí)則產(chǎn)生復(fù)位信號(hào)。55看門狗控制寄存器(WDCR)看門狗檢測(cè)位WDCHK:需要向WDCHK(20)寫1、0、1,寫其他任何值都會(huì)引起器件內(nèi)核的復(fù)位(看門狗已經(jīng)使能),此檢測(cè)位執(zhí)行讀操作將返回0、0、0.6 軟件報(bào)錯(cuò)與處理61CCS Setup中仿真器的配置新的開發(fā)板買回來,安裝軟件不連接硬件,直接打開后報(bào)錯(cuò):Error initializing emulatorI/O Port = 510Board Name: F28335 XDS510USB EmulatorCpu Name: cpu_0Abor

25、t:Close Code Composer Studio.Retry:Try to initialize the emulator again.Ignore:Ignore the initialization error and startpotentially without target debugging access.Diagnostic:Run diagnostic utility.問題解決:如下圖,一定要在family中找到F28XX,而不能在C28XX中去選F28335在屬性配置中一定設(shè)成下圖所示的選項(xiàng):62Connect報(bào)錯(cuò)1145換仿真器解決Error connecting

26、to the target:Error 0x00001200/-1145Error during: OCS, Target, Unrecoverable emulation errorI/O Port = 240Board Name: F28335 XDS510-USB2.0 emulatorCpu Name: TMS320C2800_0Abort:Close Code Composer Studio.Retry:Try to connect to the target again.Cancel:Remain disconnected from the targetDiagnostic:Run

27、 diagnostic utility.繼續(xù)RETRY之后,會(huì)出下面錯(cuò)誤1037再RETRY一次,錯(cuò)誤變成了1031此時(shí)關(guān)閉軟件,系統(tǒng)還總會(huì)出現(xiàn)下面的錯(cuò)誤解決:用了一個(gè)ICETEK_5100USBV2.0仿真器,此問題解決??磥矸抡嫫骺赡艽嬖谄ヅ浠蛴布葐栴}。63CAN口測(cè)試A發(fā)B收,數(shù)據(jù)發(fā)不出去一般都是導(dǎo)線沒有穩(wěn)定連接而造成。64編譯Pwm測(cè)試文件出錯(cuò)<Linking>error: symbol "_main" redefined: first defined in "E:coreboard_Examples28335_ePWM_generateDe

28、bugCAN.obj" redefined in "E:coreboard_Examples28335_ePWM_generateDebugePWM_Generate.obj"warning: creating ".stack" section with default size of 0x400; use the -stack option to change the default sizeerror: errors encountered during linking; "./Debug/28335_ePWM_generate.

29、out" not built經(jīng)檢查,在工程的源文件中多導(dǎo)入了一個(gè)無關(guān)文件多的can文件中也調(diào)用了main函數(shù),所以出現(xiàn)編譯錯(cuò)誤。65could not open source file "DSP2833x_Device.h 出現(xiàn)這個(gè)錯(cuò)誤,需要對(duì)工程的buile option做設(shè)置如下:打開build option: 復(fù)制圖中的選中部分$(Proj_dir),打開Category的倒數(shù)第二項(xiàng)Preprocessor將之粘貼到圖示鼠標(biāo)箭頭處,并在之后寫Include,即將編譯制定到當(dāng)前工程中,就可以打開頭文件了。7 備注與注意事項(xiàng)1、 CCS開發(fā)環(huán)境的工程文件夾的路徑中不能出現(xiàn)

30、中文,否側(cè)工程打開出錯(cuò)。2、 當(dāng)前USB2CAN適配器的串口波特率的配置為115200bps。3、 CAN通信在編譯可執(zhí)行文件時(shí),如果在原工程中做修改,需要將原來工程中的DSP2833x_eCAN.C移除,因?yàn)樵撐募c新編寫的三個(gè)初始化函數(shù)有近似的功能。就8月3日進(jìn)行的測(cè)試來看,A路CAN的0號(hào)郵箱數(shù)據(jù)字節(jié)位失控、1號(hào)和2號(hào)郵箱的ID標(biāo)識(shí)符寄存器失控。8 附錄 C源程序81PWM初始化及脈沖產(chǎn)生函數(shù)#include "DSP2833x_Device.h" / DSP2833x Headerfile Include File#include "DSP2833x_Ex

31、amples.h" / DSP2833x Examples Include File/-/ InitPwm:/-/必要的函數(shù)聲明/void InitPwm(int16 c,float32 f);void UpdatePwm(int16 c,float32 pw,float32 f);void InitPwm1AB(float32 f);void InitPwm2AB(float32 f);void InitPwm3AB(float32 f);void InitPwm4AB(float32 f);void InitPwm5AB(float32 f);void InitPwm6AB(fl

32、oat32 f);void UpdatePwm1A(float32 pw,float32 f);void UpdatePwm1B(float32 pw,float32 f);void UpdatePwm2A(float32 pw,float32 f);void UpdatePwm2B(float32 pw,float32 f);void UpdatePwm3A(float32 pw,float32 f);void UpdatePwm3B(float32 pw,float32 f);void UpdatePwm4A(float32 pw,float32 f);void UpdatePwm4B(f

33、loat32 pw,float32 f);void UpdatePwm5A(float32 pw,float32 f);void UpdatePwm5B(float32 pw,float32 f);void UpdatePwm6A(float32 pw,float32 f);void UpdatePwm6B(float32 pw,float32 f);/初始化PWM函數(shù)/void InitPwm(int16 c,float32 f)switch(c)case 0:InitPwm1AB(f); break;case 1:InitPwm1AB(f);break;case 2:InitPwm2AB(

34、f); break;case 3:InitPwm2AB(f);break;case 4:InitPwm3AB(f); break;case 5:InitPwm3AB(f);break;case 6:InitPwm4AB(f); break;case 7:InitPwm4AB(f);break;case 8:InitPwm5AB(f); break;case 9:InitPwm5AB(f);break;case 10:InitPwm6AB(f); break;case 11:InitPwm6AB(f);break;default: break;/PWM信號(hào)產(chǎn)生函數(shù)/void UpdatePwm(

35、int16 c,float32 pw,float32 f)/入口參數(shù):通道、占空比、頻率if(pw<=0.0001)pw=0.0001;else if(pw>99.9999)pw=99.9999;pw = pw/100.0;switch(c)case 0:UpdatePwm1A(pw,f);break;case 1:UpdatePwm1B(pw,f);break;case 2:UpdatePwm2A(pw,f);break;case 3:UpdatePwm2B(pw,f);break;case 4:UpdatePwm3A(pw,f);break;case 5:UpdatePwm3B

36、(pw,f);break;case 6:UpdatePwm4A(pw,f);break;case 7:UpdatePwm4B(pw,f);break;case 8:UpdatePwm5A(pw,f);break;case 9:UpdatePwm5B(pw,f);break;case 10:UpdatePwm6A(pw,f);break;case 11:UpdatePwm6B(pw,f);break;default:break;/初始化子函數(shù),對(duì)第一個(gè)函數(shù)作注釋/void InitPwm1AB(float32 f)Uint16 T= 2343750/f-1.0;/系統(tǒng)時(shí)鐘SYSCLKOUT=15

37、0MHz,TBCLK=6.6666667ns,在連續(xù)增計(jì)數(shù)模式下,f=150000000/(TBPDR+1)/ T = 150 000 000 /CLKDIV/HSPCLKDIV/f - 1.0EALLOW;/先初始化通用輸入輸出口/GpioCtrlRegs.GPAPUD.bit.GPIO0 = 0;GpioCtrlRegs.GPAMUX1.bit.GPIO0 = 1;GpioCtrlRegs.GPAPUD.bit.GPIO1 = 0; GpioCtrlRegs.GPAMUX1.bit.GPIO1 = 1; EPwm1Regs.TBPHS.half.TBPHS = 0; / 在相位寄存器中設(shè)置

38、計(jì)數(shù)器的起始計(jì)數(shù)位置/下面兩條語句組合對(duì)PWM的時(shí)鐘進(jìn)行分頻EPwm1Regs.TBCTL.bit.CLKDIV = 6;EPwm1Regs.TBCTL.bit.HSPCLKDIV = 0;EPwm1Regs.TBPRD = T; /在周期寄存器中設(shè)置計(jì)數(shù)器的計(jì)數(shù)周期/TBCTL為定時(shí)器控制寄存器EPwm1Regs.TBCTL.bit.CTRMODE = TB_COUNT_UP; /設(shè)置計(jì)數(shù)模式位為連續(xù)增計(jì)數(shù)模式,產(chǎn)生對(duì)稱方波EPwm1Regs.TBCTL.bit.PHSEN = TB_DISABLE; / 將定時(shí)器相位使能位關(guān)閉EPwm1Regs.TBCTL.bit.PRDLD = TB_S

39、HADOW;/映射寄存器SHADOW使能并配置映射寄存器為自動(dòng)讀寫EPwm1Regs.TBCTL.bit.SYNCOSEL = TB_CTR_ZERO; / 定時(shí)器時(shí)鐘源選擇,一共有四種時(shí)鐘源EPwm1Regs.CMPA.half.CMPA= 0.0001*T;/ 設(shè)置EPWM1A比較值寄存器的比較值,即體現(xiàn)EPWM1A的占空比EPwm1Regs.CMPB= 0.0001*T;EPwm1Regs.CMPCTL.bit.SHDWAMODE = CC_SHADOW;/A模塊比較模式EPwm1Regs.CMPCTL.bit.SHDWBMODE = CC_SHADOW;/B模塊比較模式EPwm1Reg

40、s.CMPCTL.bit.LOADAMODE = CC_CTR_ZERO; / A模塊比較使能,通過寫0來清除SHDWAMODE位來使能load on CTR=ZeroEPwm1Regs.CMPCTL.bit.LOADBMODE = CC_CTR_ZERO; / B模塊比較使能,通過寫0來清除SHDWBMODE位來使能load on CTR=Zero/AQCTLA為輸出A比較方式控制寄存器EPwm1Regs.AQCTLA.bit.ZRO = AQ_SET; / TBCTR(計(jì)數(shù)器)計(jì)到零時(shí)使輸出為反向EPwm1Regs.AQCTLA.bit.CAU = AQ_CLEAR;/TBCTR(計(jì)數(shù)器)

41、與CMPA在up計(jì)數(shù)時(shí)相等使輸出為high,這關(guān)系的輸出的占空比EPwm1Regs.AQCTLB.bit.ZRO = AQ_SET; EPwm1Regs.AQCTLB.bit.CBU = AQ_CLEAR;EDIS;void InitPwm2AB(float32 f)Uint16 T= 2343750/f-1.0;EALLOW;GpioCtrlRegs.GPAPUD.bit.GPIO2 = 0;GpioCtrlRegs.GPAMUX1.bit.GPIO2 = 1;GpioCtrlRegs.GPAPUD.bit.GPIO3 = 0; GpioCtrlRegs.GPAMUX1.bit.GPIO3

42、= 1; EPwm1Regs.TBCTL.bit.CLKDIV = 6;EPwm1Regs.TBCTL.bit.HSPCLKDIV = 0;EPwm1Regs.TBPRD = T; EPwm2Regs.TBPHS.half.TBPHS = 0; EPwm2Regs.TBCTL.bit.CTRMODE = TB_COUNT_UP; EPwm2Regs.TBCTL.bit.PHSEN = TB_DISABLE; EPwm2Regs.TBCTL.bit.PRDLD = TB_SHADOW;EPwm2Regs.TBCTL.bit.SYNCOSEL = TB_CTR_ZERO; EPwm2Regs.CM

43、PA.half.CMPA= 0.0001*T;EPwm2Regs.CMPB= 0.0001*T;EPwm2Regs.CMPCTL.bit.SHDWAMODE = CC_SHADOW;EPwm2Regs.CMPCTL.bit.SHDWBMODE = CC_SHADOW;EPwm2Regs.CMPCTL.bit.LOADAMODE = CC_CTR_ZERO; EPwm2Regs.CMPCTL.bit.LOADBMODE = CC_CTR_ZERO; EPwm2Regs.AQCTLA.bit.ZRO = AQ_SET; EPwm2Regs.AQCTLA.bit.CAU = AQ_CLEAR;EPw

44、m2Regs.AQCTLB.bit.ZRO = AQ_SET; EPwm2Regs.AQCTLB.bit.CBU = AQ_CLEAR;EDIS;void InitPwm3AB(float32 f)Uint16 T= 2343750/f-1.0;EALLOW;GpioCtrlRegs.GPAPUD.bit.GPIO4 = 0;GpioCtrlRegs.GPAMUX1.bit.GPIO4 = 1;GpioCtrlRegs.GPAPUD.bit.GPIO5 = 0; GpioCtrlRegs.GPAMUX1.bit.GPIO5 = 1; EPwm1Regs.TBCTL.bit.CLKDIV = 6

45、;EPwm1Regs.TBCTL.bit.HSPCLKDIV = 0;EPwm1Regs.TBPRD = T;EPwm3Regs.TBPHS.half.TBPHS = 0; EPwm3Regs.TBCTL.bit.CTRMODE = TB_COUNT_UP; EPwm3Regs.TBCTL.bit.PHSEN = TB_DISABLE; EPwm3Regs.TBCTL.bit.PRDLD = TB_SHADOW;EPwm3Regs.TBCTL.bit.SYNCOSEL = TB_CTR_ZERO; EPwm3Regs.CMPA.half.CMPA= 0.0001*T;EPwm3Regs.CMP

46、B= 0.0001*T;EPwm3Regs.CMPCTL.bit.SHDWAMODE = CC_SHADOW;EPwm3Regs.CMPCTL.bit.SHDWBMODE = CC_SHADOW;EPwm3Regs.CMPCTL.bit.LOADAMODE = CC_CTR_ZERO; EPwm3Regs.CMPCTL.bit.LOADBMODE = CC_CTR_ZERO; EPwm3Regs.AQCTLA.bit.ZRO = AQ_SET; EPwm3Regs.AQCTLA.bit.CAU = AQ_CLEAR;EPwm3Regs.AQCTLB.bit.ZRO = AQ_SET; EPwm

47、3Regs.AQCTLB.bit.CBU = AQ_CLEAR;EDIS;void InitPwm4AB(float32 f)Uint16 T= 2343750/f-1.0;EALLOW;GpioCtrlRegs.GPAPUD.bit.GPIO6 = 0;GpioCtrlRegs.GPAMUX1.bit.GPIO6 = 1;GpioCtrlRegs.GPAPUD.bit.GPIO7 = 0; GpioCtrlRegs.GPAMUX1.bit.GPIO7 = 1; EPwm1Regs.TBCTL.bit.CLKDIV = 6;EPwm1Regs.TBCTL.bit.HSPCLKDIV = 0;E

48、Pwm1Regs.TBPRD = T; EPwm4Regs.TBPHS.half.TBPHS = 0; EPwm4Regs.TBCTL.bit.CTRMODE = TB_COUNT_UP; EPwm4Regs.TBCTL.bit.PHSEN = TB_DISABLE; EPwm4Regs.TBCTL.bit.PRDLD = TB_SHADOW;EPwm4Regs.TBCTL.bit.SYNCOSEL = TB_CTR_ZERO; EPwm4Regs.CMPA.half.CMPA= 0.0001*T;EPwm4Regs.CMPB= 0.0001*T;EPwm4Regs.CMPCTL.bit.SH

49、DWAMODE = CC_SHADOW;EPwm4Regs.CMPCTL.bit.SHDWBMODE = CC_SHADOW;EPwm4Regs.CMPCTL.bit.LOADAMODE = CC_CTR_ZERO; EPwm4Regs.CMPCTL.bit.LOADBMODE = CC_CTR_ZERO; EPwm4Regs.AQCTLA.bit.ZRO = AQ_SET; EPwm4Regs.AQCTLA.bit.CAU = AQ_CLEAR;EPwm4Regs.AQCTLB.bit.ZRO = AQ_SET; EPwm4Regs.AQCTLB.bit.CBU = AQ_CLEAR;EDI

50、S;void InitPwm5AB(float32 f)Uint16 T= 2343750/f-1.0;EALLOW;GpioCtrlRegs.GPAPUD.bit.GPIO8 = 0;GpioCtrlRegs.GPAMUX1.bit.GPIO8 = 1;GpioCtrlRegs.GPAPUD.bit.GPIO9 = 0; GpioCtrlRegs.GPAMUX1.bit.GPIO9 = 1; EPwm1Regs.TBCTL.bit.CLKDIV = 6;EPwm1Regs.TBCTL.bit.HSPCLKDIV = 0;EPwm1Regs.TBPRD = T; EPwm5Regs.TBPHS

51、.half.TBPHS = 0; EPwm5Regs.TBCTL.bit.CTRMODE = TB_COUNT_UP; EPwm5Regs.TBCTL.bit.PHSEN = TB_DISABLE; EPwm5Regs.TBCTL.bit.PRDLD = TB_SHADOW;EPwm5Regs.TBCTL.bit.SYNCOSEL = TB_CTR_ZERO; EPwm5Regs.CMPA.half.CMPA= 0.0001*T;EPwm5Regs.CMPB= 0.0001*T;EPwm5Regs.CMPCTL.bit.SHDWAMODE = CC_SHADOW;EPwm5Regs.CMPCT

52、L.bit.SHDWBMODE = CC_SHADOW;EPwm5Regs.CMPCTL.bit.LOADAMODE = CC_CTR_ZERO; EPwm5Regs.CMPCTL.bit.LOADBMODE = CC_CTR_ZERO; EPwm5Regs.AQCTLA.bit.ZRO = AQ_SET; EPwm5Regs.AQCTLA.bit.CAU = AQ_CLEAR;EPwm5Regs.AQCTLB.bit.ZRO = AQ_SET; EPwm5Regs.AQCTLB.bit.CBU = AQ_CLEAR;EDIS;void InitPwm6AB(float32 f)Uint16 T= 2343750/f-1.0;EALLOW;GpioCtrlRegs.GPAPUD.bit.GPIO10 = 0;GpioCtrlRegs.GPAMUX1.bit.GPIO10 = 1;GpioCtrlRegs.GPAPUD.bit.GPIO11 = 0; GpioCtrlRegs.GPAMUX1.bit.GPIO11 = 1; EPwm1Regs.TBCTL.bit.CLKDIV = 6;EPwm1Regs.TBCTL.

溫馨提示

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

評(píng)論

0/150

提交評(píng)論