Other Parts Discussed in Thread:CONTROLSUITE
把例程cla_adc_fir32_cpu01烧到CPU,为什么在void cla1Isr7 ()打断点,程序进不去,自己写的程序也进不去?
Susan Yang:
应该是没有满足 ISR的条件,所以不会进入中断服务程序中
//! This example implements a 5 Tap FIR filter. It will setup
//! EPWM1 to trigger ADCA at a frequency of 50KHz. Once the ADC
//! completes sampling, it will trigger task 7 of the CLA which
//! runs the filter on the ADC sample.//! \b External \b Connections \n
//!- EPWM2A (GPIO2) to ADCA0您是否有连接对应的引脚?目前使用的硬件是什么?
,
user5860441:
EPWM1 触发 ADCA采样,转换完成后触发CLA task7,task7执行完,返回到CPU中的void cla1Isr7 (),和EPWM2没有关系吧?
,
Susan Yang:
所以您现在使用的是launchpad?程序是否load到CLA了?请先看一下我之前的帖子
e2echina.ti.com/…/529741
,
user5860441:
我是按照28035的使用方法来的,不知道28377d有什么不同,load symbol是啥意思,只有一个.out文件,我先不debug CLA我只想让CLA运行起来,程序load到CLA是要单独烧写CLA程序吗?
,
user5860441:
控制板是自己画的。
,
Susan Yang:
我们有一个专门的CLA workshop,您可以看一下training.ti.com/control-law-accelerator-cla-hands-workshoptraining.ti.com/cla-hands-workshop-part-4-debugging-cla讲述了如何debug CLA
,
user5860441:
第一,我的目的不是验证这个滤波器的效果,所以那两个引脚连不连在一起没关系。
第二,我也不是想学CLA怎么debug,调试的方法很多,可以把cla中的变量传到cpu,在cpu中查看,还可以在cla中控制EPWM,用示波器看。
第三,给的链接我看了,前面介绍了CLA的知识,中间基本是代码的解释,最后讲了CLA调试。
第四,我的目的是验证CLAtask有没有运行,在CLA中变量自加,传到cpu查看,这个值没有变化,cla task end触发的中断也进不去。当我给adc引脚电压扰动,结果寄存器值发生变化,说明ADC是正常的,就是不知道为什么CLAtask不运行?麻烦帮我想想
,
user4522357:
用Cla1ForceTask2andWait();应该能判断出来是不是运行了,进入了死循环就是CLA没运行,我也遇见了问题,现在也是不知道为什么CLA没有运行,不知道是设置的问题还是CMD的问题
,
user5860441:
for(;;){
//if(SampleCount == ADC_BUF_LEN-1)
//{
////asm(" ESTOP0");
//SampleCount = 0;
//}cpudata2++;if (Cla1Regs.MIRUN.bit.INT7 == 1){cpudata1++;}
}cpudata1一直是0,cla没有运行
,
user5860441:
下午把F28379D_CLAHandsOn_Solution程序烧进芯片,在调试时,task end触发的中断能够进去,说明cla task执行了。但是例程cla_adc_fir32_cpu01不行。
,
Susan Yang:
我试了一下是可以进入中断的(连接了launchpad的GPIO2和GPIO30)
,
user5860441:
我把我写的程序发给你,帮我看看,能否,感谢。
,
Susan Yang:
请问您现在解决问题了吗?
,
user5860441:
感谢关注,我更新C2000,利用里面的empty_project和一个cla例程,在上面添加自己的代码,实现了CLA运行,cla task end 触发的中断,每次都能进去。自己建工程没搞出来,问题没找出来。
,
Susan Yang:
若是可以的话,请您私信一下工程,我们具体看一下,谢谢
,
user5860441:
终于知道原因了,原来是cla program的段和ramfuncs的段重合了,在初始化CLA时,如果把cla的program 定义在RAMLS4 RAMLS5,在执行ADC初始化的DELAY_US(1000);时,就进入了非法中断;如果把cla的program 定义在别处,不会出现非法中断,但是cla program的定义与CMD不符合。
如果把ramfuncs的段定义在RAMD0,就正常了。
我这个CMD是从controlSUITE F28377D V210中拷贝的2837xD_FLASH_CLA_lnk_cpu1。
感觉例程中给的CMD太多了,有的名字一样,但是内容不同,比如F2837xD_Headers_nonBIOS_cpu1,有一个缺少CANA CANB的段定义。
这对新手很不友好。