查看: 4006|回复: 2

[已解决] KEA128的Sleep模式通过MSCAN的唤醒中断唤醒

[复制链接]

该用户从未签到

2

主题

6

帖子

0

新手上路

Rank: 1

积分
36
最后登录
2018-7-25
发表于 2018-4-17 16:57:44 | 显示全部楼层 |阅读模式
我在论坛上看了好几篇关于KEA128在Sleep模式下的唤醒,例如KBI和MSCAN。我跟着相关的步骤进行配置我的MSCAN唤醒功能。
首先CPU处于正常模式下,我使MSCAN进行休眠模式,通过唤醒中断进行唤醒。
但是我使用WFI指令使CPU进入Sleep模式下,MSCAN就不能产生中断把CPU唤醒。下面是我配置的步骤:
1、MSCAN_CANRFLG |= (1<<MSCAN_CANRFLG_WUPIF_SHIFT);      使能唤醒功能
        MSCAN_CANCTL0 |= (1<<MSCAN_CANCTL0_WUPE_SHIFT);
        MSCAN_CANRIER |= (1<<MSCAN_CANRIER_WUPIE_SHIFT);

2、MSCAN_CANCTL0 |= (1<<MSCAN_CANCTL0_SLPRQ_SHIFT);    进入睡眠状态
        while((MSCAN_CANCTL1 & MSCAN_CANCTL1_SLPAK_MASK) == 0U) ;

3、PMC_SetMode(2);  使CPU进入Sleep模式,这个函数和论坛中提供进行低功耗模式的函数一致。

我通过CAN盒给KEA128+TJA1042发送数据,没办法使CPU唤醒。

最佳答案

845780319 发表于 2018-4-17 19:57 上述步骤是可以将CPU从中断唤醒的,但是由于我在定时器中使CPU进入Sleep模式,而且定时器的中断优先级比CAN ... 那么这个就是程序设计的问题了,你让高优先级的代码让CPU进入sleep ...
回复

使用道具 举报

该用户从未签到

2

主题

6

帖子

0

新手上路

Rank: 1

积分
36
最后登录
2018-7-25
 楼主| 发表于 2018-4-17 19:57:18 | 显示全部楼层
上述步骤是可以将CPU从中断唤醒的,但是由于我在定时器中使CPU进入Sleep模式,而且定时器的中断优先级比CAN的唤醒优先级高,所以没办法触发CAN唤醒中断。

回复 支持 反对

使用道具 举报

该用户从未签到

723

主题

6382

帖子

0

超级版主

Rank: 8Rank: 8

积分
25445
最后登录
2025-9-4
发表于 2018-4-18 11:06:42 | 显示全部楼层
845780319 发表于 2018-4-17 19:57
上述步骤是可以将CPU从中断唤醒的,但是由于我在定时器中使CPU进入Sleep模式,而且定时器的中断优先级比CAN ...

那么这个就是程序设计的问题了,你让高优先级的代码让CPU进入sleep, 又把唤醒的搞成低优先级,很可能会出现这样的问题,或者说唤醒之后,你定时器又让MCU进sleep了。
我觉得你还是要好好考虑下程序结构与功能的问题,如果要唤醒高,你可以把唤醒源优先级搞高点。
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 注册/登录

本版积分规则

关闭

站长推荐上一条 /3 下一条

Archiver|手机版|小黑屋|恩智浦技术社区

GMT+8, 2025-9-6 12:04 , Processed in 0.086822 second(s), 24 queries , MemCache On.

Powered by Discuz! X3.4

Copyright © 2001-2024, Tencent Cloud.

快速回复 返回顶部 返回列表