1、调试情况说明:
使用DSP238335的ADC模块进行采样电流,使用EPWM模块触发ADC采样,ADC采样级联模式,EPWM采用up-down模式。
实现功能需要了解EPWM和ADC的基本工作原理,相关寄存器的设置,使用何种触发模式,ADC的采样方式等等。此次主要简单记录解决问题的思路和过程。
问题: 使用ADC中断读取采样数据,并进行数据转换计算,进行仿真调试时ADC采样没有采样到数值。 2、调试思路及过程:
1、第一步首先检查ADC中断是否产生,对于DSP的三级中断检查所有与ADC中断相关的标志位(如下图),ADC是INT1.6,利用仿真调试检查对应的PIEIFR、PIEIER、IER、IFR等标志位状态是否正确,经检查中断标志位无异常,ADC可以正常中断,怀疑ADC模块没有正常转换数据;
2、由于是EPWMxSOCA触发采样,第二步检查触发源(下图红线)是否正常,EPWM所用产生触发事件的方式如下图红框所示,CTR= CMPA时产生触发事件。检查EPWM模块触发ADC的触发源ETFLG.SOCA=0;所示并没有SOCA触发事件产生,故无法进行AD采样;
3、第三步检查ADC初始化的触发源部分的寄存器设置,仿真调试看变量发现TBCTR的值没有变化,一直为0,将CMPA=0后发现产生触发事件,由此可知时基(TB)模块并没有工作,使得TBCTR时基计数寄存器无法工作(计数),主要怀疑TB模块工作,具体如下图红圈所示。
4、 时基模块工作需要时钟信号,经检查,对系统时钟的分频得到时基时钟(红圈1)进行了设置,此处没有问题;
5、 检查TBCLK时基时钟是否使能,EPWM模块时钟是否使能(如下图),经检查发现并未对TBCLK时基时钟以及使用的EPWM1模块时钟进行使能,在程序中(DSP2833x_SysCtrl.c中)置1使能后ADC能够正常进行采样。
SysCtrlRegs.PCLKCR1.bit.EPWM1ENCLK = 1; // ePWM1
SysCtrlRegs.PCLKCR0.bit.TBCLKSYNC = 1; // Enable TBCLK within the ePWM
PCLKCR0寄存器的TBCLKSYNC使能: PCLKCR1寄存器的EPWM1使能:
[size=0.83em]image.png (228.01 KB, 下载次数: 0) 下载附件 [url=]保存到相册[/url] [color=rgb(153, 153, 153) !important]2020-6-13 20:24 上传
写在最后
时钟设置是TI官方的.DSP2833x_SysCtrl.c之后设置的,一般不会更改,我由于在检查其他模块的问题的时候将其关闭,后来使用的时候未打开,才出现这种情况,虽然后来解决了问题,却浪费了许多时间,以后一定要细心。
|