乐鑫技术交流
直播中

康辅佑

7年用户 967经验值
擅长:控制/MCU
私信 关注
[问答]

mcpwm_intr_status值一直为零,没有产生tez或tep中断,为什么?

ESP32-WROOM-32UE
comit: af8bc4c

/**
* @brief this is ISR handler function
*/
static void IRAM_ATTR isr_handler()
{
    uint32_t mcpwm_intr_status;
    mcpwm_intr_status = MCPWM[MCPWM_UNIT_0]->int_st.val; //Read interrupt status
    tmp = mcpwm_intr_status;
    MCPWM[MCPWM_UNIT_0]->int_clr.val = mcpwm_intr_status;
}

   mcpwm_config_t pwm_config;
    pwm_config.frequency = 5000; //frequency = 1000Hz, i.e. for every servo motor time period should be 1ms
    pwm_config.cmpr_a = 50;      //duty cycle of PWMxA = 0
    pwm_config.cmpr_b = 50;      //duty cycle of PWMxb = 0
    pwm_config.counter_mode = MCPWM_UP_COUNTER;
    pwm_config.duty_mode = MCPWM_DUTY_MODE_0;
    mcpwm_init(MCPWM_UNIT_0, MCPWM_TIMER_0, &pwm_config);                          //Configure PWM0A & PWM0B with above settings
    MCPWM[MCPWM_UNIT_0]->int_ena.timer0_tez_int_ena = 1;
    MCPWM[MCPWM_UNIT_0]->int_ena.timer0_tep_int_ena = 1;
    mcpwm_isr_register(MCPWM_UNIT_0, isr_handler, NULL, ESP_INTR_FLAG_IRAM, NULL); //Set ISR Handler
   printf("TMR0TEZ intr status %d n", tmp);

mcpwm_intr_status值一直为零,没有产生tez或tep中断。
                          

回帖(1)

我有一车切糕

2024-6-22 15:31:14
从您提供的代码片段来看,您正在尝试使用ESP32的MCPWM模块来处理中断。但是,您遇到了一个问题,即`mcpwm_intr_status`值一直为零,没有产生TEZ或TEP中断。这里有几个可能的原因:

1. **中断配置不正确**:确保您已经正确配置了MCPWM的中断。这包括设置正确的中断类型(如TEZ或TEP),并启用了中断。

2. **中断使能未设置**:在配置MCPWM中断之前,需要确保中断使能位已经被设置。例如,使用`MCPWM.int_ena.val`来启用所需的中断。

3. **中断清除逻辑问题**:在您的代码中,您在读取中断状态后立即清除了中断。这可能导致中断状态在读取后立即被清除,从而无法在中断服务例程中检测到。您可以尝试在处理完中断后清除中断状态。

4. **中断优先级设置问题**:ESP32的中断系统允许设置不同的优先级。如果您的MCPWM中断优先级设置得太低,可能会被其他更高优先级的中断抢占。确保MCPWM中断的优先级设置正确。

5. **硬件问题**:虽然不太可能,但也不能排除硬件问题。确保您的硬件连接正确,MCPWM模块没有损坏。

6. **代码逻辑问题**:检查您的代码逻辑,确保在调用中断服务例程之前,MCPWM模块已经正确初始化并配置。

7. **固件/软件版本问题**:有时候,固件或软件库的特定版本可能存在bug。尝试更新ESP32的固件或使用的软件库到最新版本。

8. **调试和日志**:增加更多的调试信息和日志输出,以便更好地了解中断服务例程何时被调用,以及中断状态的具体值。

为了解决这个问题,您可以尝试以下步骤:

- 确保MCPWM模块已经正确初始化。
- 检查并确保中断使能位已经被设置。
- 调整中断服务例程中的逻辑,确保在处理中断后清除中断状态。
- 检查中断优先级设置。
- 使用调试工具和日志输出来跟踪中断状态和中断服务例程的调用情况。

如果问题仍然存在,您可能需要更详细地检查您的代码和硬件设置,或者寻求社区的帮助。
举报

更多回帖

发帖
×
20
完善资料,
赚取积分