打印

发生中断的时候TBPRD TBCTR不相等

[复制链接]
2130|11
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
lizye|  楼主 | 2014-3-26 17:29 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
我用的是f28016,只开了eva的定时器,但发生中断的时候TBPRD TBCTR不相等,TBCTR总比TBPRD小,请问这是哪里有问题

相关帖子

沙发
jiahy| | 2014-3-26 17:30 | 只看该作者
程序

使用特权

评论回复
板凳
lizye|  楼主 | 2014-3-26 17:37 | 只看该作者
程序如下:


void init_eva_time1(void)
{

// Setup TBCLK
// TBCLK=SYSCLKOUT/(HSPCLKDIV*CLKDIV)=60M/(2*2)=15M
// PWM FREQUENCY=15M/(EPWM1_TIMER_TBPRD*2)=15M/(750*2)=10K
EPwm1Regs.TBCTL.bit.CTRMODE = 2; // up down
EPwm1Regs.TBPRD = 750; / t period

EPwm1Regs.TBCTL.bit.PHSEN = 0; // Disable phase loading Clearing the TBCTL[PHSEN] bit configures the ePWM to ignore the synchronization input pulse
EPwm1Regs.TBPHS.half.TBPHS = 0x0000; // Phase is 0
EPwm1Regs.TBCTR = 0x0000; // Clear counter
EPwm1Regs.TBCTL.bit.HSPCLKDIV =1; // /2
EPwm1Regs.TBCTL.bit.CLKDIV = 1; // /2



// Setup shadow register load on PERIOD
// EPwm1Regs.CMPCTL.bit.SHDWAMODE = 0; //Shadow mode
// EPwm1Regs.CMPCTL.bit.LOADAMODE = 1; //Load on CTR = PRD
// Set Compare values
// EPwm1Regs.CMPA.half.CMP_A = 300; // Set Compare A value
// EPwm1Regs.CMPB = 300; // Set Compare B value


// EPwm1Regs.AQCTLA.bit.CAU=1;//force low,when incrementing
// EPwm1Regs.AQCTLA.bit.CAD=2;//force high,when decrementing

// EPwm1Regs.AQCTLB.bit.CBU=1;//force low,when incrementing
// EPwm1Regs.AQCTLB.bit.CBD=2;//force high,when decrementing

// set deadband
EPwm1Regs.DBCTL.bit.OUT_MODE = 3; //deadband enabled for both rising-edge and falling-edge

EPwm1Regs.DBCTL.bit.POLSEL = 0; //AH mode
EPwm1Regs.DBCTL.bit.IN_MODE = 3; //EPWMB is the source
EPwm1Regs.DBRED = 35; //rising-edge delay
EPwm1Regs.DBFED = 35; //falling-edge delay

EPwm1Regs.ETSEL.bit.INTSEL = 2; // period interrupt TBCTR = TBPRD
EPwm1Regs.ETSEL.bit.INTEN = 1; // enable interrupt
EPwm1Regs.ETPS.bit.INTPRD = 1; // Generate INT on first event

}


interrupt void eva_time1_isr(void)
{
// Clear INT flag for this timer
EPwm1Regs.ETCLR.bit.INT = 1;
// Acknowledge this interrupt to receive more interrupts from group 3
PieCtrlRegs.PIEACK.all = PIEACK_GROUP3;
}

使用特权

评论回复
地板
shimx| | 2014-3-26 17:38 | 只看该作者
TBCTR不会比TBPRD大,他们是包含关系.

使用特权

评论回复
5
wyjie| | 2014-3-26 17:56 | 只看该作者
进入中断的条件不应该是两个相等么,怎么不相等的时候就进入中断了?

使用特权

评论回复
6
jiaxw| | 2014-3-26 17:56 | 只看该作者
楼主是怎么看的?楼主在中断子程序中添加一句:

kkk=EPwm1Regs.TBCTR;

保存一下进入到中断子程序时候的 EPwm1Regs.TBCTR;
的值。

楼主设置的是:CTRMODE = 2; 上升下降模式,从发生中断到进入中断子程序需要一些时间,我估计kkk的值和周期只相差并不大20来个时钟周期吧。

使用特权

评论回复
7
spark周| | 2014-3-26 17:59 | 只看该作者
我是同时把这两个值加入watch,在中断中设断点看的,并没有像楼主那样间接的赋值

使用特权

评论回复
8
spark周| | 2014-3-26 17:59 | 只看该作者
我等会儿用楼主的方法再看看,而且改变TBPRD,TBCTR总比TBPRD小4,为什么从发生中断到进入中断子程序需要时间

使用特权

评论回复
9
zhenykun| | 2014-3-26 18:01 | 只看该作者
即使有,这个应该微乎其微到可以忽略吧

使用特权

评论回复
10
spark周| | 2014-3-26 18:01 | 只看该作者
我只是粗浅的这么觉得.这个有没有文档说明啊,小弟刚入手dsp,求指教.

使用特权

评论回复
11
lizye|  楼主 | 2014-3-26 18:04 | 只看该作者
我好想知道了,多谢啊

使用特权

评论回复
12
lizye|  楼主 | 2014-3-26 18:04 | 只看该作者
那就先结贴了哈

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

852

主题

9757

帖子

2

粉丝