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

提交评论