DSP28335 eCAP 测频
F28335共有6組eCAP模塊,每個eCAP不但具有捕獲功能,而且還可用作PWM輸出功能。F28335捕獲模塊的主要特征如下:
1. 150MHz系統時鐘的情況下,32位時基的時間分辨率為6.67ns;
2. 4組32位的時間標志寄存器;
3. 4級捕獲事件序列,可以靈活配置捕獲事件邊沿極性;
4. 四級觸發事件均可以產生中斷;
5. 軟件配置一次捕獲可以最多得到4個捕獲時間;
6. 可連續循環4級捕獲;
7. 絕對時間捕獲;
8. 不同模式的時間捕獲;
9. 所有捕獲都發生在一個輸入引腳上;
10. 如果eCAP模塊不作捕獲使用,可以配置成一個單通道輸出的PWM模式。
eCAP模塊中一個捕獲通道完成一次捕獲任務,需要以下關鍵資源:
1、專用捕獲輸入引腳;
2、32位時基(計數器);
3、4*32位時間標簽捕獲寄存器;
4、4級序列器,與外部eCAP引腳的上升/下降沿同步;
5、4個事件可獨立配置邊沿極性;
6、輸入捕獲信號預定標(2-62);
7、一個2位的比較寄存器,一次觸發后可以捕獲4個時間標簽事件;
8、采用4級深度的循環緩沖器以進行連續捕獲;
9、4個捕獲事件中任意一個都可以產生中斷。
DSP2833x_SysCtrl.h
// Peripheral clock control register 1 bit definitions:
struct PCLKCR1_BITS { // bits description
Uint16 EPWM1ENCLK:1; // 0 Enable SYSCLKOUT to EPWM1
Uint16 EPWM2ENCLK:1; // 1 Enable SYSCLKOUT to EPWM2
Uint16 EPWM3ENCLK:1; // 2 Enable SYSCLKOUT to EPWM3
Uint16 EPWM4ENCLK:1; // 3 Enable SYSCLKOUT to EPWM4
Uint16 EPWM5ENCLK:1; // 4 Enable SYSCLKOUT to EPWM5
Uint16 EPWM6ENCLK:1; // 5 Enable SYSCLKOUT to EPWM6
Uint16 rsvd1:2; // 7:6 reserved
Uint16 ECAP1ENCLK:1; // 8 Enable SYSCLKOUT to ECAP1 系統時鐘150MHz
Uint16 ECAP2ENCLK:1; // 9 Enable SYSCLKOUT to ECAP2
Uint16 ECAP3ENCLK:1; // 10 Enable SYSCLKOUT to ECAP3
Uint16 ECAP4ENCLK:1; // 11 Enable SYSCLKOUT to ECAP4
Uint16 ECAP5ENCLK:1; // 12 Enable SYSCLKOUT to ECAP5
Uint16 ECAP6ENCLK:1; // 13 Enable SYSCLKOUT to ECAP6
Uint16 EQEP1ENCLK:1; // 14 Enable SYSCLKOUT to EQEP1
Uint16 EQEP2ENCLK:1; // 15 Enable SYSCLKOUT to EQEP2
};
由上面代碼可知eCAP模塊的時鐘為系統時鐘,時基是6.67ns
#define EC_RISING 0 //上升沿電平值 #define EC_FALLING 1 //下降沿電平值 #define EC_ABS_MODE 0 //在CAPx事件中不重置計數器 #define EC_ENABLE 1 //使能在捕獲事件中加載CAP1-4寄存器的時間 #define EC_DIV1 00000 //輸入信號分頻選擇 不分頻 #define EC_CAP_MODE 0 //ECAP工作于捕獲工作模式 #define EC_CONTINUOUS 0 //0為連續模式 1為單次模式 #define EC_SYNCO_DIS 2 //同步輸出選擇: 10、11屏蔽同步信號輸出 #define EC_DISABLE 0 //屏蔽同步輸入操作 #define EC_RUN 1 //1計數器啟動 0計數器停止
以上代碼為宏定義
void InitECAP()
{
SysCtrlRegs.PCLKCR1.bit.ECAP1ENCLK = 1;//使能eCAP1
SysCtrlRegs.PCLKCR1.bit.ECAP2ENCLK = 1;//使能eCAP2
// SysCtrlRegs.PCLKCR1.bit.ECAP3ENCLK = 1;//使能eCAP3
// SysCtrlRegs.PCLKCR1.bit.ECAP4ENCLK = 1;//使能eCAP4
// SysCtrlRegs.PCLKCR1.bit.ECAP5ENCLK = 1;//使能eCAP5
// SysCtrlRegs.PCLKCR1.bit.ECAP6ENCLK = 1;//使能eCAP6
IER |= M_INT4;//
ECap1Regs.ECEINT.all = 0x0000; // Disable all capture interrupts
ECap1Regs.ECCLR.all = 0xFFFF; // Clear all CAP interrupt flags
ECap1Regs.ECCTL1.bit.CAPLDEN = 0; // Disable CAP1-CAP4 register loads
ECap1Regs.ECCTL2.bit.TSCTRSTOP = 0; // Make sure the counter is stopped
SetCap1();
SetCap2();
}
void SetCap1()
{
ECap1Regs.ECCTL1.bit.CAP1POL = EC_RISING; //一級事件捕捉上升沿
ECap1Regs.ECCTL1.bit.CAP2POL = EC_RISING; //二級事件捕捉上升沿
ECap1Regs.ECCTL1.bit.CAP3POL = EC_RISING; //三級事件捕捉上升沿
ECap1Regs.ECCTL1.bit.CAP4POL = EC_RISING; //四級事件捕捉上升沿
ECap1Regs.ECCTL1.bit.CTRRST1 = EC_ABS_MODE; //一級事件捕捉后不清零計數器
ECap1Regs.ECCTL1.bit.CTRRST2 = EC_ABS_MODE; //二級事件捕捉后不清零計數器
ECap1Regs.ECCTL1.bit.CTRRST3 = EC_ABS_MODE; //三級事件捕捉后不清零計數器
ECap1Regs.ECCTL1.bit.CTRRST4 = EC_ABS_MODE; //四級事件捕捉后不清零計數器
ECap1Regs.ECCTL1.bit.CAPLDEN = EC_ENABLE; //使能事件捕捉時捕捉寄存器裝載計數器值
ECap1Regs.ECCTL1.bit.PRESCALE = EC_DIV1; //對外部信號不分頻
ECap1Regs.ECCTL2.bit.CAP_APWM = EC_CAP_MODE; //捕捉模式ECAP
ECap1Regs.ECCTL2.bit.CONT_ONESHT = EC_CONTINUOUS; //連續模式
ECap1Regs.ECCTL2.bit.SYNCO_SEL = EC_SYNCO_DIS; //屏蔽同步信號輸出
ECap1Regs.ECCTL2.bit.SYNCI_EN = EC_DISABLE; //屏蔽同步輸入操作
ECap1Regs.ECEINT.all=0x0000; //關閉所有 CAP 中斷
ECap1Regs.ECCLR.all=0xFFFF; //清除所有中斷標志位
ECap1Regs.ECCTL2.bit.TSCTRSTOP = EC_RUN; //啟動 CAP 計數器
ECap1Regs.ECEINT.bit.CEVT4=1; //使能四級事件中斷,即當發生第四次捕捉時進入中斷
}
在四級事件后進中斷
interrupt void ECAP1_INT_ISR(void) // ECAP-1
{
// Insert ISR Code here
Uint32 t1,t2,t3,t4,T1,T2;
t1 = ECap1Regs.CAP1;
t2 = ECap1Regs.CAP2;
t3 = ECap1Regs.CAP3;
t4 = ECap1Regs.CAP4;
T1 = t2-t1;
T2 = t4-t3;
// To receive more interrupts from this PIE group, acknowledge this interrupt
PieCtrlRegs.PIEACK.all = PIEACK_GROUP4;
ECap1Regs.ECCLR.all=0xFFFF; //clare all flag
}
總結
以上是生活随笔為你收集整理的DSP28335 eCAP 测频的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: lds天线技术流程图_音箱耳机入门,蓝牙
- 下一篇: 【电商项目】切图仔——神器插件cutte