DSP28335eCAP模块使用总结

更新时间:2023-06-19 05:41:30 阅读: 评论:0

DSP28335eCAP模块使⽤总结
28335DSP的捕获模块(ECAP)的⼀些使⽤总结(转帖)留着⽇后⽤
个⼈理解的捕获模块就是在捕捉到跳变时(上升沿或下降沿)将定时器的值存⼊寄存器,通过时间来计算周期和频率。因为本⼈也是初学,讲不清楚,还请⼤家看下⾯的讲解吧。
有使⽤OMAPL138的亲的话可以⼀起交流⼀下啊~~
第⼀:捕获外部信号,可以设置为捕捉信号的上升还是下降沿,该功能⼀般最常⽤;
第⼆:计算外部⽅波信号的周期和占空⽐,在这⾥可以分别对CAP1、CAP2、CAP3和CAP4上升沿或下降沿动作进⾏设置,当外部信号和当前CAPx设置⼀致时,并将当前CTR值赋给CAPx寄存器。这样,可以根据四个CAPx寄存器⾥⾯的值,进⾏捕获的⽅波信号周期和占空⽐的计算。另外,CTR的变化模式取决于ECap6Regs.ECCTL1.bit.CTRRSTx的设置,如果为‘0’,则动作匹配时,不复位CTR,将⼀直往上增加,直⾄溢出;如果为‘1’,则动作匹配时,复位CTR。
如果,⼀个程序当中,四个CPAx均⽤到的话,假如:
吃螃蟹后不能吃什么东西CPA1:上升沿
CPA2:下降沿
CPA3:上升沿
CPA4:下降沿
对于输⼊信号,第⼀上升沿时,CPA1动作,并且产⽣CEVT1事件(如果该事件中断使能的话,则可以进⼊中断),同时将CTR数加载到CPA1中;接下来,下降沿时,CPA2动作,并且产⽣CEVT2事件(如果该事件中断使能的话,则可以进⼊中断),同时将CTR数加载到CPA2中;再接下来,上升沿时,CPA3动作,并且产⽣CEVT3事件(如果该事件中断使能的话,则可以进⼊中断),同时将CTR数加载到CPA3中;再接下来,下降沿时,CPA4动作,并且产⽣CEVT4事件(如果该事件中断使能的话,则可以进⼊中断),同时将CTR数加载到CPA4中;接下来在从CPA1往返动作。这时在⼀个循环⾥,可以利⽤四个CAPx⾥⾯的值进⾏周期和占空⽐的计算。
如果,程序不需要计算输⼊信号的周期和占空⽐,那么可能只要⽤到⼀个CAPx,这时就更简单了。(如下⾯觉得例⼦),这时CTR可以不运⾏(ECap6Regs.ECCTL2.bit.TSCTRSTOP = EC_FREEZE),CAPx寄存器加载也可以禁⽌
(ECap6Regs.ECCTL1.bit.CAPLDEN = EC_DISABLE;)。
以上2个其实均为CAP⼝捕获功能,对应的I/O⼝为输⼊。ECAP⼝另外⼀个功能是产⽣APWM,和上述2个有很⼤的差别,对应的I/O⼝为输出。由于上⾯2个⽐较常⽤,特别是第⼀个,所以接下来,对设置CAP⼝为捕获功能的配置进⾏相关说明,以Ecap为例:
⾸先要设置GPIO引脚:
EALLOW;
三纲六纪GpioCtrlRegs.GPAPUD.bit.GPIO1 = 0;    // Enable pull-up on GPIO1 (CAP6)
// GpioCtrlRegs.GPBPUD.bit.GPIO49 = 0;    // Enable pull-up on GPIO49 (CAP6)
// Inputs are synchronized to SYSCLKOUT by default.
// Comment out other unwanted lines.
GpioCtrlRegs.GPAQSEL1.bit.GPIO1 = 0;  // Synch to SYSCLKOUT GPIO1 (CAP6)设备管理制度大全
// GpioCtrlRegs.GPBQSEL2.bit.GPIO49 = 0; // Synch to SYSCLKOUT GPIO49 (CAP6)
GpioCtrlRegs.GPAMUX1.bit.GPIO1 = 2;  // Configure GPIO1 as CAP6
// GpioCtrlRegs.GPBMUX2.bit.GPIO49 = 1;  // Configure GPIO49 as CAP6
EDIS;
足球对抗赛
Ecap6的外部信号输⼊引脚,可以选择GPIO1或.GPIO49。
其次,功能寄存器设置:
ECap6Regs.ECEINT.all = 0x0000;            // Disable all capture interrupts
ECap6Regs.ECCLR.all = 0xFFFF;              // Clear all CAP interrupt flags
ECap6Regs.ECCTL1.bit.CAPLDEN = EC_DISABLE; // Disable CAP1-CAP4 register loads
ECap6Regs.ECCTL2.bit.TSCTRSTOP = EC_FREEZE; // Make sure the counter is stopped
// Configure peripheral registers
ECap6Regs.ECCTL2.bit.CAP_APWM = EC_CAP_MODE;  //CAP mode
ECap6Regs.ECCTL2.bit.CONT_ONESHT = EC_ONESHOT; // One-shot
ECap6Regs.ECCTL2.bit.STOP_WRAP = EC_EVENT1;  // Stop at 1 events
ECap6Regs.ECCTL1.bit.CAP1POL = EC_FALLING;    // Falling edge
ECap6Regs.ECCTL2.bit.SYNCI_EN = EC_DISABLE;  // Disable sync in
ECap6Regs.ECCTL2.bit.SYNCO_SEL = EC_SYNCO_DIS;// Disable sync out signal
中国神话传说故事ECap6Regs.ECCTL2.bit.REARM = 1;  // Arm one-shot
ECap6Regs.ECEINT.bit.CEVT1 = 1;  // Enable 1 events interrupt
其中,ECap6Regs.ECCTL2.bit.REARM这位决定ECAP⼝能否多次捕捉,外部信号的边沿。如果在中断响应函数⾥⾯没有“ECap6Regs.ECCTL2.bit.REARM = 1;”语句,则该ECAP⼝以后不响应信号边沿中断;如果为
有“ECap6Regs.ECCTL2.bit.REARM = 1;”语句,则该ECAP⼝可以继续响应下⼀次中断。
ECAP可以产⽣以下⼏个中断:
CTR = CMP
CTR = PRD  ------- 针对APWM功能
CTROVF
CEVT4
CEVT3
CEVT2
CEVT1      ------- ECAP⼝,CAPx对应的动作匹配
最后,外部PIE和CPU中断使能。
DINT;
EALLOW;  // This is needed to write to EALLOW protected registers
PieVectTable.ECAP6_INT = &ECap6_isr;
EDIS;
/
/ Enable CPU INT4 which is connected to ECap6-4 INT:
IER |= M_INT4;
// Enable eCAP INTn in the PIE: Group 3 interrupt 1-6
PieCtrlRegs.PIEIER4.bit.INTx6 = 1;
// Enable global Interrupts and higher priority real-time debug events:
EINT;  // Enable Global interrupt INTM
ERTM;  // Enable Global realtime interrupt DBGM
interrupt void ECap6_isr(void)
{
LED1_flash;扬州运河博物馆
ECap6IntCount++;
ECap6Regs.ECCLR.bit.CEVT1 = 1;
ECap6Regs.ECCLR.bit.INT = 1;
ECap6Regs.ECCTL2.bit.REARM = 1; //该句要不要,在上⾯已经分析过,取决于系统设计要求
Acknowledge this interrupt to receive more interrupts from group 4
PieCtrlRegs.PIEACK.all = PIEACK_GROUP4;
抓住机遇
衡阳破坏选举案}

本文发布于:2023-06-19 05:41:30,感谢您对本站的认可!

本文链接:https://www.wtabcd.cn/fanwen/fan/82/988729.html

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。

标签:信号   捕获   设置   中断   取决于
相关文章
留言与评论(共有 0 条评论)
   
验证码:
推荐文章
排行榜
Copyright ©2019-2022 Comsenz Inc.Powered by © 专利检索| 网站地图