单片机/MCU论坛
直播中

贾飞世

7年用户 1770经验值
私信 关注
[问答]

ADUCM360如何用外部中断将CPU从睡眠模式唤醒?

需要实现的功能:ADUCM360外接时钟,时钟定时中断引脚连接CPU的外部中断6,CPU不工作时进入睡眠模式,当时钟定时到达5分钟时,外部中断将CPU从睡眠模式唤醒,并执行一些测量运算,完成后继续进入睡眠模式,周而复始。
代码都是利用EVLES提供的库函数代码。
进入睡眠模式的代码如下:
PwrCfg(PWRMOD_MOD_TOTALHALT);
外部中断设置如下:
  EiCfg(EXtiNT6,INT_EN,INT_RISE);//外部中断6,P1.6使能,上升沿触发   NVIC_EnableIRQ(EINT6_IRQn);    //开启外部中断6使能   
但是发现定时到达时间后,外部中断并未唤醒CPU执行其他操作。
问题是:
1.设置的代码是否有错误或者遗漏的地方?
2.外部中断是否上升沿或下降沿触发都可以?

回帖(1)

王超

2024-1-12 16:31:12
ADUCM360的外部中断可以被配置为唤醒处理器从睡眠模式中。以下是将CPU从睡眠模式唤醒的步骤:

1. 配置外部中断引脚:将外部中断引脚连接到CPU的外部中断6引脚。使用EiCfg函数来配置外部中断6引脚为使能状态,并设置上升沿触发。

```csharp
EiCfg(EXTINT6,INT_EN,INT_RISE); // 外部中断6,P1.6使能,上升沿触发
```

2. 启用外部中断:使用NVIC_EnableIRQ函数来启用外部中断6。

```csharp
NVIC_EnableIRQ(EINT6_IRQn); // 开启外部中断6使能
```

3. 配置睡眠模式:使用PwrCfg函数来配置睡眠模式为总体停机模式(PWRMOD_MOD_TOTALHALT)。

```csharp
PwrCfg(PWRMOD_MOD_TOTALHALT);
```

4. 进入睡眠模式:使用PwrCfg函数将CPU进入睡眠模式。

```csharp
PwrCfg(PWRMOD_MOD_TOTALHALT);
```

5. 处理中断:在外部中断处理函数EINT6_IRQHandler中,进行测量运算。

```csharp
void EINT6_IRQHandler(void)
{
    // 进行测量运算

    // 清除中断标志位
    EiClr(INTCLR_IRQ6);

    // 唤醒处理器继续工作
    PwrCfg(PWRMOD_MOD_RUN);
}
```

6. 周而复始:在完成测量运算后,将处理器重新设置为睡眠模式。

```csharp
void main(void)
{
    while(1)
    {
        // 进入睡眠模式
        PwrCfg(PWRMOD_MOD_TOTALHALT);
    }
}
```

通过以上步骤,可以实现ADUCM360在睡眠模式下,通过外部中断6唤醒CPU并进行测量运算的功能,并在完成后继续进入睡眠模式,周而复始的运行。
举报

更多回帖

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