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.

CLA中修改PWM寄存器

程序设计初衷是PWM启动ADC,ADC启动CLA任务。

在任务中根据ADC结果调整PRD的占空比。

难道在CLA中无法直接对CMPA直接操作吗?操作方式如下:

EPwm1Regs.CMPA.half.CMPA=Result;

其中Result是uint16类型的。

还是说在cla中要设置什么标志吗?

要设置MEALLOW为1吗?初始化的配置MEALLOW为了也没用啊。CMPA又不受保护啊。

请教是怎么回事?

  • 调整程序找到一个方法修改CMA了,在CLA1对应的中断中修改。

    难道在CLA任务中修改不了吗?

  • 可以操作。

    那么是否有报错呢?是uint16还是Uint16?

    对浮点和Uint16数据类型是可以操作的。

    另外,你是如何确定问题是在这句话呢?有没有单步调试或反汇编看看?

  • he code,

    CLA 对不能在变量定义的时候就初始化,不知道你的代码有没有这样操作。如

    int x;      // valid

      int x=5;    // not valid

    另外,你可以直接给cmpa直接赋一个固定的值,如0x55,并让CLA run,然后在CPU中查看是否正确。

    Eric

  • 你好,我也遇到相同的问题,CLA程序能运行,变量都在变,但是就是无法修改PWM寄存器的值。 请问你们遇到过这样的问题吗?是什么原因呢?

  • 在C28x里是否ok?确定ePWM的时钟有使能,且EALLOW也使能。

  • 请问你用的是哪一款芯片?

  • 问题是在C28x主核里可以,但是在CLA里不可以,所以我觉得GPIO肯定设置成了PWM模式,而且PWM时钟也使能了。

    你说的EALLOW使能是什么意思?修改PWM脉宽,或者Software Force PWM是不需要EALLOW的呀。

  • 在C28x里有效;ePWM时钟肯定使能了;AQ不需要EALLOW。

    问题找到了: 

    1. CLA的16 bit数据类型只能用short。在我们的DSP C2000平台软件的头文件里,是用int去定义16 bit数据类型,所以在CLA操作时有问题。
    2. CLA代码必须调用CLA源文件里leaf函数,否则可能出错:

    a)         编译时出现relocation警告,这也是为什么说“可能”出错的原因,下载到目标MCU中的可执行代码可能会无法得到正确执行。Warning信息是:“Multiple markers at this line   - <a href="file:/D:/Programs/TICCS5/ccsv5/tools/compiler/dmed/HTML/17003.html">#17003-D</a> relocation from function”。

    b)        C源文件中的全局变量虽然初始化了,但是在CLA代码中访问时会有问题。

    例如:在CLA源文件中执行“EPwm1Regs.AQCSFRC.bit.CSFB=2”有效;
    但是,用C源文件中自己定义的全局变量ePWM[0] (指针类型,用于指向PWM寄存器,ePWM[0]=&EPwm1Regs) 去执行“ePWM[0]-> AQCSFRC.bit.CSFB=2”就无效;
    必须在CLA源文件中定义全局变量ePWM_CLA[0] (指针类型,用于指向PWM寄存器,ePWM_CLA[0]=&EPwm1Regs) ,才能通过执行“ePWM_CLA [0]-> AQCSFRC.bit.CSFB=2”改变寄存器值。

    EPwm1Regs是在TI的C源文件《DSP2803x_GlobalVariableDefs.c》中定义的结构体全局变量,并由DATA_SECTION放入指定的PWM寄存器RAM空间。虽然都是在C源文件中定义,但是执行结果却不同,这一点依旧不理解。

  • 通过对生成的Assembly汇编的分析发现,C源文件中自己定义的全局变量ePWM[0](指针类型,用于指向PWM寄存器,ePWM[0]=&EPwm1Regs)位于C28x的RAM空间里,而CLA源文件中定义的ePWM_CLA[0] (指针类型,用于指向PWM寄存器,ePWM_CLA[0]=&EPwm1Regs)位于CLA的RAM空间里。所以,当试图通过CLA代码去访问并操作C28x的RAM空间里的ePWM[0]所指向的PWM寄存器时,操作是无效的。由于TI的C源文件《DSP2803x_GlobalVariableDefs.c》中定义的结构体全局变量EPwm1Regs由DATA_SECTION指定放入PWM寄存器RAM空间,非C28x的RAM空间,而CLA可以直接访问操作PWM模块,所以当试图通过CLA代码去访问并操作EPwm1Regs寄存器时,该操作是有效的,表现为——在CLA代码中执行“EPwm1Regs. AQCSFRC.bit.CSFB=2”,该操作有效。

  • 我也遇到这样的问题,在CLA里比较寄存器无法修改。http://www.deyisupport.com/question_answer/microcontrollers/c2000/f/56/p/44702/96750.aspx#96750