This thread has been locked.

If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.

280049C CLA2背景任务被中断之后执行结果异常

Other Parts Discussed in Thread: C2000WARE

在例程“cla_ex4_pwm_control”的基础上修改的程序:

CPUTimer0运行在50KHz:1.CPUTimer0中端处理程序生成一个50Hz交流信号,传递给CLA。之后再使能CLA task3。

  2.CPUTimer0触发CLA background任务,接收从CPU传来的交流信号,执行锁相环(中途会被task3打断)。

CLA 背景任务不被中断的话执行结果正常:

CLA背景任务被task3中断之后运行结果异常:

cla_ex4_pwm_control__.zip

  • 请问您现在使用的是launchpad还是自己的硬件?若是可以的话,请您私信一下工程,我们具体测试一下,谢谢
  • 你好,使用的是launchpad,工程已经私信

  • 好的,我会在测试后给您回复
  • 请问您是可以成功编译的吗?我这边编译会报错
  • 我的环境是CCS10.1,编译正常
  • 请问您的编译器版本呢?C2000ware版本是多少?我这边报了很多错误
  • CCS10.1

    C2000Ware_3_02_00_00    

    C2000Ware_DigitalPower_SDK_3_00_01_00

    我把引用的库全部打包放到文件里面发给您,试一下。

  • 我这边可以正常编译了。使用开发板launchpad测试了一下,fo fn 和您正常的测试是基本相同的

    "CLA背景任务被task3中断之后运行结果异常"

    请问您是如何操作的(CLA背景任务被task3中断)? 我这边没有看到CLA背景任务被task3中断
  • control.c里面,在CPU的timer0中断处理程序里面用软件使能的, CLA_forceTasks(CLA1_BASE, CLA_TASKFLAG_3);

    上一次我测试的时候注释掉这一行结果正常,不注释掉结果就不对。

    后续测试

    中断程序里面
    while(0)//(EPwm1Regs.TBCTR-tt1)<400)
    {
    NOP;
    }

    这一段换成

    for(i=0,i<20,i++)
    {
    }
    CLA那边也会正常执行

    如果把循环条件改到100变成
    for(i=0,i<100,i++)
    {
    }

    CLA那边结果也会不正常。
  • 谢谢您的详细反馈。我会在测试后给您回复
  • shu hai feng 说:
    在CPU的timer0中断处理程序里面用软件使能的, CLA_forceTasks(CLA1_BASE, CLA_TASKFLAG_3);

    上一次我测试的时候注释掉这一行结果正常,不注释掉结果就不对

    我直接使用您给出的程序测试,结果是正常的

    shu hai feng 说:
    如果把循环条件改到100变成
    for(i=0,i<100,i++)
    {
    }

    CLA那边结果也会不正常。

    根据您的描述,这更像是在中断服务中处理的时间太长了,增加了中断处理时间。如果有其它低级中断了,就会延误响应中断或者造成其他意外结果。

    一般在中断子程序中不要写调用循环或者延时子程序,中断子程序也不要写得过长,处理过多的任务,要尽快处理后及时返回

  • 感谢您的回复,我试了一下上次提供的工程,结果确实和你一样。应该是不小心把哪里改掉之后正常了。

    至于中断的问题,CPU中断只打开了INT1,PIEIER1里面只打开了INTX.7 。看门狗关闭。NMIFLG显示没有发生NMI中断。应该没有别的中断了吧?

    这个问题后续又断断续续的出现,让人头大。如果方便的话我重新提供一下工程,cla_ex4_pwm_control.c这个文件里面:245行到263行,注释掉结果正常,执行的话CLA那边又出问题。

    另外调试的时候初始化完成之后(未开始执行main()),寄存器就已经显示

    CPUWRITE 1 Master CPU Write Access Violation Flag

    地址 0x00001480

    MCPUWRAVADDR 00000000000000000001010010000000 Master CPU write access violation address register.

    这个会是什么原因?