系统进入deepsleep后,整个cm3会处于断电复位状态,外部中断通过wic唤醒cm3。由于wic会将会中断信息一直pending,导致cm3醒来后,enable中断,马上进入wakeup中断服务程序,并且无法清除中断;
想请教一般情况下,wic输出给cm3的中断用什么方式清除?
WIC有一个叫做WICCLEAR的input信号线,驱动这个线的时候会清楚WIC输出给CM3的中断。
Arm设计CM3时,与WIC配合的deepsleep是指M3进入retention模式保存CPU所有状态,所以当CPU退出deepsleep模式时,CM3会assert WICCLEAR ouput清除WIC pending的中断。如果你的系统deepsleep采用CM3断电的模式,那么CM3的WICCLEAR output不会被assert,造成你说的情况。一个简单的办法是系统里添加一个控制寄存器,在CM3上电复位的程序里用软件assert WIC的WICCLEAR input。
感谢啊,我们目前就是做成和你说的一样的,wakeup后,用软件assert的方式去clear,只是一直没想明白为何明明有一个wicclear的信号,为何没有用。原来这个wicclear只是适用于不复位cm3的deepsleep;