打印
[DSP]

F280069使用PWM触发CLA

[复制链接]
721|7
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
18817327137|  楼主 | 2020-10-19 23:31 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
请问有哪位大神配置过使用PWM触发CLA的功能吗?我配置了一下,程序烧进去刚开始CLA任务可以运行,但是运行一段时间就停掉了,完全找不到是啥问题

使用特权

评论回复

相关帖子

沙发
18817327137|  楼主 | 2020-10-19 23:37 | 只看该作者
附上我的程序
CLA初始化:
void InitCLA_Driver(void)
{
        // Copy the program and constants from FLASH to RAM before configuring
        // the CLA
        //
    #if defined(_FLASH)
        memcpy((uint32_t *)&Cla1ProgRunStart, (uint32_t *)&Cla1ProgLoadStart,
            (uint32_t)&Cla1ProgLoadSize );
        memcpy((uint32_t *)&Cla1ConstRunStart, (uint32_t *)&Cla1ConstLoadStart,
            (uint32_t)&Cla1ConstLoadSize );
    #endif //defined(_FLASH)
        EALLOW;
        // CLA Program will reside in RAMLS0 and data in RAMLS1, RAMLS2
        MemCfgRegs.LSxCLAPGM.bit.CLAPGM_LS0 = 1U;
        MemCfgRegs.LSxCLAPGM.bit.CLAPGM_LS1 = 0U;
        MemCfgRegs.LSxCLAPGM.bit.CLAPGM_LS2 = 0U;

        // Select CLA as the master of RAMLS0, RAMSL1, RAMLS2
        MemCfgRegs.LSxMSEL.bit.MSEL_LS0 = 1U;
        MemCfgRegs.LSxMSEL.bit.MSEL_LS1 = 1U;
        MemCfgRegs.LSxMSEL.bit.MSEL_LS2 = 1U;

        //
        // Suppressing #770-D conversion from pointer to smaller integer
        // The CLA address range is 16 bits so the addresses passed to the MVECT
        // registers will be in the lower 64KW address space. Turn the warning
        // back on after the MVECTs are assigned addresses
        //
    #pragma diag_suppress=770
        //
        // Assign the task vectors and set the triggers for task 1 and 7
        //
        Cla1Regs.MVECT1 = (uint16_t)&Cla1Task1;

        DmaClaSrcSelRegs.CLA1TASKSRCSEL1.bit.TASK1 = CLA_TRIG_EPWM4INT;
        //
        // Enable Tasks 1.
        //
         Cla1Regs.MIER.bit.INT1 = 1U;     
        EDIS;
}

PWM4初始化:
void intpwm(void)
{
     EALLOW;
     EPwm4Regs.TBPRD = SysPara.Ctrl_Freq;           // Control_ePWM 设定10k
     EPwm4Regs.TBPHS.bit.TBPHS = 0x0000;           // Phase is 0
     EPwm4Regs.TBCTR = 0x0000;                    // Clear counter

     /*Setup compare*/
     EPwm4Regs.CMPA.bit.CMPA = 0;  // (SysPara.Ctrl_Freq/3);//(SysPara.Ctrl_Freq/2);
     EPwm4Regs.CMPB.bit.CMPB = SysPara.Ctrl_Freq;

     /*Set actions*/
     EPwm4Regs.AQCTLA.bit.CAU = AQ_CLEAR;
     EPwm4Regs.AQCTLA.bit.CAD = AQ_SET;
     EPwm4Regs.AQCTLA.bit.CBU = AQ_SET;
     EPwm4Regs.AQCTLA.bit.CBD = AQ_CLEAR;

     /*Set actions*/
     EPwm4Regs.TBCTL.bit.CTRMODE   = TB_COUNT_UPDOWN;    // Count up and down
     EPwm4Regs.TBCTL.bit.PHSEN     = TB_DISABLE;        // Disable phase loading
     EPwm4Regs.TBCTL.bit.HSPCLKDIV = TB_DIV1;          // Clock ratio to SYSCLKOUT
     EPwm4Regs.TBCTL.bit.CLKDIV    = TB_DIV1;

     /*Set INT*/
     EPwm4Regs.ETSEL.bit.INTSEL = ET_CTR_ZERO;         // Select INT on Zero event
     EPwm4Regs.ETSEL.bit.INTEN  = 1;                  // Enable INT
     EPwm4Regs.ETPS.bit.INTPRD  = ET_1ST;            // Generate INT on 1rd event
     EPwm4Regs.ETCLR.bit.INT = 1;

     EPwm4Re4 should run freely in emulation mode
     //
     //EPwm4Regs.TBCTL.bit.FREE_SOFT = 2U;
     EDIS;
}
CLA中断:
{
__attribute__((interrupt)) void cla1_task1_isr(void){   
    EALLOW;
   PieCtrlRegs.PIEACK.bit.ACK11 = 1U;        // Acknowledge the end-of-task interrupt for task 1
   EPwm4Regs.ETCLR.bit.INT = 1;
   PieCtrlRegs.PIEACK.all = PIEACK_GROUP3;
    EDIS;
}

使用特权

评论回复
板凳
airwill| | 2020-10-25 11:15 | 只看该作者
运行一段时间就停掉了,    可能这才是个关键!
想办法捕捉一下寄存器的变化,  触发设置寄存器的位被篡改了吗?

使用特权

评论回复
地板
aoyi| | 2020-11-11 12:46 | 只看该作者
触发的是什么啊

使用特权

评论回复
5
drer| | 2020-11-11 12:46 | 只看该作者
楼主可以详细的介绍一下这个功能吗  谢谢啊

使用特权

评论回复
6
gwsan| | 2020-11-11 12:47 | 只看该作者
能找到停掉的那个点吗

使用特权

评论回复
7
kxsi| | 2020-11-11 12:47 | 只看该作者
一点一点的排除检查

使用特权

评论回复
8
nawu| | 2020-11-11 12:47 | 只看该作者
光看这部分代码是看不出来什么的

使用特权

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

本版积分规则

2

主题

5

帖子

0

粉丝