DSP2812 PWM生成 QEP光電編碼器解碼實現_第1頁
DSP2812 PWM生成 QEP光電編碼器解碼實現_第2頁
DSP2812 PWM生成 QEP光電編碼器解碼實現_第3頁
DSP2812 PWM生成 QEP光電編碼器解碼實現_第4頁
DSP2812 PWM生成 QEP光電編碼器解碼實現_第5頁
已閱讀5頁,還剩1頁未讀, 繼續免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

1、DSP2812 PWM生成+QEP光電編碼器解碼實現2011-04-13 19:54#include "DSP281x_Device.h"     / DSP281x Headerfile Include File#include "DSP281x_Examples.h"   / DSP281x Examples Include File#define PWM_Divide 1  /#define Fre_1KHz   /0x493D/0x927B/ Pr

2、ototype statements for functions found within this file./void init_eva(void);/void init_evb(void);void init_PWM(void);void init_QEP_CAP(void);interrupt void T4PINT00_ISR(void);/ Global counts used in this exampleUint16 TEST;Uint32 T2PINT00_ISR_Count;Uint32 T4PINT00_ISR_Count;Uint32 T1CNT0;Uint32 T1C

3、NT1;Uint32 QEPFlag;Uint16 Fre_1KHz;Uint16 Fre_Flag;Uint32 TimeQEP;void main(void) TEST = 0; TimeQEP = 0; QEPFlag = 0; T2PINT00_ISR_Count = 0; T4PINT00_ISR_Count = 0; T1CNT0 = 0; T1CNT1 = 0; Fre_1KHz = 0x927B;/0x493D; Fre_Flag = Fre_1KHz; / Step 1. In

4、itialize System Control: / PLL, WatchDog, enable Peripheral Clocks / This example function is found in the DSP281x_SysCtrl.c file. InitSysCtrl(); / Step 2. Initalize GPIO:  / This example function is found in the DSP281x_Gpio.c file and / illustrates how to set the

5、 GPIO to it's default state. / InitGpio();  / Skipped for this example  / Initialize only GPAMUX and GPBMUX for this test EALLOW; / Enable PWM pins GpioMuxRegs.GPAMUX.all = 0x00FF; / EVA PWM 1-6  pins GpioMuxRegs.GPBMUX.all = 0x00FF; / EVB PWM 7-12 pi

6、ns EDIS; / Step 3. Clear all interrupts and initialize PIE vector table: / Disable CPU interrupts  DINT; / Initialize PIE control registers to their default state. / The default state is all PIE interrupts disabled and flags / are cleared.   / T

7、his function is found in the DSP281x_PieCtrl.c file. InitPieCtrl(); / Disable CPU interrupts and clear all CPU interrupt flags: IER = 0x0000; IFR = 0x0000; / Initialize the PIE vector table with pointers to the shell Interrupt  / Service Routines (ISR).  

8、 / 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 DSP281x_DefaultIsr.c. / This function is found in DSP281x_PieVect.c. InitPieVectTable(); EALLOW;&#

9、160; / This is needed to write to EALLOW protected registers PieVectTable.T4PINT = &T4PINT00_ISR; EDIS;    / This is needed to disable write to EALLOW protected registers / Step 4. Initialize all the Device Peripherals: / This function is found in DSP281x_InitP

10、eripherals.c / InitPeripherals(); / Not required for this example init_PWM(); init_QEP_CAP(); / Step 5. User specific code, enable interrupts: / Enable CPU INT1 which is connected to CPU-Timer 0: IER |= M_INT5; / Enable T2CINT in the PIE: Group 3 interrupt 2 P

11、ieCtrlRegs.PIEIER5.bit.INTx1 = 1; / Enable global Interrupts and higher priority real-time debug events: EINT;   / Enable Global interrupt INTM ERTM;   / Enable Global realtime interrupt DBGM / Just sit and loop forever: / PWM pins can be observed with a

12、scope.  /for(;); while(1)   /TEST = EvaRegs.GPTCONA.bit.T2STAT;/方向測試  if(QEPFlag=1)     if(T1CNT1>T1CNT0)       TimeQEP = (T1CNT1-T1CNT0+65535*T4PINT00_ISR_Count);     

13、0;else       TimeQEP = (T1CNT1-T1CNT0+65535+65535*T4PINT00_ISR_Count);      T1CNT0 = 0;   T1CNT1 = 0;   QEPFlag = 0;    / 對PWM進行實時更改會產生問題,不可以這樣操作  /*if(Fre_Flag != Fre_1KHz)&#

14、160;    EvaRegs.T1CON.bit.TENABLE = 0;   EvbRegs.T3CON.bit.TENABLE = 0;   Fre_Flag = Fre_1KHz;      EvaRegs.T1PR = Fre_Flag;         / Timer1 period      EvaReg

15、s.T1CMPR = Fre_Flag>>1;      / Timer1 compare   Fre_Flag = Fre_1KHz;   EvbRegs.T3PR = Fre_Flag;         / Timer3 period   EvbRegs.T3CMPR = Fre_Flag>>1;     &#

16、160;/ Timer3 compare   Fre_Flag = Fre_1KHz;   EvbRegs.T3CNT = (Fre_Flag*3)>>2;    / Timer3 counter   EvaRegs.T1CON.bit.TENABLE = 1;   EvbRegs.T3CON.bit.TENABLE = 1;  */ void init_PWM(void) / Initaliz

17、e EVA Timer1    EvaRegs.T1PR = Fre_Flag;          / Timer1 period    EvaRegs.T1CMPR = Fre_Flag>>1;      / Timer1 compare    EvaRegs.T1CNT = 0x0000;      &

18、#160;  / Timer1 counter    / T1CON      EvaRegs.T1CON.bit.TMODE = 2;    EvaRegs.T1CON.bit.TPS = PWM_Divide;   / 75000000/8    EvaRegs.T1CON.bit.TENABLE = 0;    EvaRegs.T1CON.bit.TCLKS10 = 0; 

19、;EvaRegs.T1CON.bit.TCLD10 = 0;    EvaRegs.T1CON.bit.TECMPR = 1; / Drive T1 PWM by compare logic EvaRegs.GPTCONA.bit.TCMPOE = 1; / Polarity of GP Timer 1 Compare = Active low EvaRegs.GPTCONA.bit.T1PIN = 1; Fre_Flag = Fre_1KHz; / Initialize EVB Timer3 

20、 EvbRegs.T3PR = Fre_Flag;          / Timer3 period EvbRegs.T3CMPR = Fre_Flag>>1;       / Timer3 compare Fre_Flag = Fre_1KHz; EvbRegs.T3CNT = (Fre_Flag>>2)*3;      / Tim

21、er3 counter / T3CON EvbRegs.T3CON.bit.TMODE = 2; EvbRegs.T3CON.bit.TPS = PWM_Divide;   / 75000000/8 EvbRegs.T3CON.bit.TENABLE = 0; EvbRegs.T3CON.bit.TCLKS10 = 0; EvbRegs.T3CON.bit.TCLD10 = 0; EvbRegs.T3CON.bit.TECMPR = 1; / Drive T3 PWM by compare lo

22、gic EvbRegs.GPTCONB.bit.TCMPOE = 1; / Polarity of GP Timer 3 Compare = Active low EvbRegs.GPTCONB.bit.T3PIN = 1; EvaRegs.T1CON.bit.TENABLE = 1; EvbRegs.T3CON.bit.TENABLE = 1;void init_QEP_CAP(void) / Initalize EVA Timer2  EvaRegs.T2PR = 0xFFFF;  

23、0;      / Timer2 period /EvaRegs.T2CMPR = 0x7000;       / Timer2 compare EvaRegs.T2CNT = 0x0000;        / Timer2 counter / T2CON EvaRegs.T2CON.bit.FREE = 0; EvaRegs.T2CON.bit.SOFT = 0;&

24、#160;EvaRegs.T2CON.bit.rsvd = 0; EvaRegs.T2CON.bit.TMODE = 3;  / 定向增減模式 EvaRegs.T2CON.bit.TPS = 0; EvaRegs.T2CON.bit.T2SWT1 = 0; EvaRegs.T2CON.bit.TENABLE = 1; EvaRegs.T2CON.bit.TCLKS10 = 3;  / QEP為時鐘源 EvaRegs.T2CON.bit.TCLD10 = 0;  / 禁止比較操

25、作 EvaRegs.T2CON.bit.TECMPR = 0; EvaRegs.T2CON.bit.SET1PR = 0; / CAPCONA EvaRegs.CAPCONA.bit.CAPRES = 0;  /  EvaRegs.CAPCONA.bit.CAP12EN = 3; / 使能QRP1、2 EvaRegs.CAPCONA.bit.CAP3EN = 0; EvaRegs.CAPCONA.bit.CAP3TSEL = 0; EvaRegs.CAPCONA.bit.CA

26、P12TSEL = 0; / 定時器選T2 EvaRegs.CAPCONA.bit.CAP3TOADC = 0; / 無操作 EvaRegs.CAPCONA.bit.CAP1EDGE = 3; / QEP1兩個邊沿都檢測 EvaRegs.CAPCONA.bit.CAP2EDGE = 3; / QEP2兩個邊沿都檢測 EvaRegs.CAPCONA.bit.CAP3EDGE = 0; / 不檢測 EvaRegs.CAPFIFOA.all = 0;    / 清除FIF

27、O EvaRegs.EVAIMRB.bit.T2PINT = 1;  / 允許周期中斷 EvaRegs.EVAIFRB.bit.T2PINT = 1;  / 復位中斷標志位 / Initialize EVB Timer4  EvbRegs.T4PR = 0xB71B;         / Timer4 period EvbRegs.T4CNT = 0x0000;    

28、0;   / Timer4 counter EvbRegs.T4CON.bit.FREE = 0; EvbRegs.T4CON.bit.SOFT = 0; EvbRegs.T4CON.bit.rsvd = 0; EvbRegs.T4CON.bit.TMODE = 2;  / 連增模式 EvbRegs.T4CON.bit.TPS = 3;   / 75000000/8 EvbRegs.T4CON.bit.T4SWT3 = 0; EvbRegs.T4CON.bit.TENABLE = 1; EvbRegs.T4CON.bit.TCLKS10 = 0;  

溫馨提示

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

評論

0/150

提交評論