[STM8] AWU有多坑?

[复制链接]
1944|11
 楼主| 紫阳真人 发表于 2016-11-19 16:11 | 显示全部楼层 |阅读模式
ni, TE, ST, syste, pi
ST的参考手册果然只是用来参考的,不能拿来写驱动程序。这是活跃停机模式的部分验证代码:
void Awu_Init(void)
{
    /* Check parameter */

        AWU_CSR1_AWUEN=1;
        AWU_TBR_AWUTB=0x0C;
        AWU_APR=0x20;
}

void main()
{
        SystemInit();/*内包含时钟、GPIO、AWU初始化函数*/

        while (1)
        {
                PB_ODR = 0x20;
                asm("HALT");
                PB_ODR = 0x00;
                asm("HALT");
        }
}

简单的几个配置,折腾了我两个晚上,结果还是呵呵,不能唤醒。
 楼主| 紫阳真人 发表于 2016-11-19 16:15 | 显示全部楼层
后来加了这样一段程序:

#pragma vector=0x03
__interrupt void AWU_IRQHandler(void)
{
        asm("sim");//关中断
        unsigned char temp;
        temp=AWU_CSR1;//读 AWU_CSR 寄存器,清中断标志
        asm("rim"); //开中断
}
我初始化的时候连asm("rim"); 都没写,居然OK了。看来我还是图样,看问题图森破。
aozima 发表于 2016-11-19 16:31 | 显示全部楼层
没看明白楼主想表达什么?

不能唤醒的原因是什么?
怎么处理才能唤醒?
 楼主| 紫阳真人 发表于 2016-11-19 17:47 | 显示全部楼层
aozima 发表于 2016-11-19 16:31
没看明白楼主想表达什么?

不能唤醒的原因是什么?

正确唤醒通过循环0.5S亮灯0.5S灭灯来体现。开始没有写中断服务函数,始终不闪灯,后来加上去,即使没有开总中断,唤醒时也会进入中断函数,正常闪灯。
我的问题点在于:不开中断允许也能进入中断函数是为什么?或者整个操作过程或者说实验方法有什么不妥?
aozima 发表于 2016-11-19 18:14 | 显示全部楼层
1. AWU其实也属于中断?不开中断所以不会唤醒。(猜测)
2. 开了中断,但不写ISR(不写有默认的),那么中断状态不会被清,所以一直重复进ISR。
 楼主| 紫阳真人 发表于 2016-11-19 18:26 | 显示全部楼层
中断映射.png
1、它是中断源,但是我没写asm("rim");也能发生中断,这是问题所在;
2、基本同意。
huangcunxiake 发表于 2016-11-19 19:43 | 显示全部楼层
有点糊涂了。
robter 发表于 2016-11-20 12:18 | 显示全部楼层
没看明白楼主的意思
567 发表于 2016-11-20 13:15 | 显示全部楼层
STM8确实有很多自作聪明的地方,却带来很多不利的方面。
反常规设计,不能用常规思维来理解。

尤其是用其它MCU多年后,转用STM8,它的参考手册又说的不明不白,常常理解不了它硬件的真实机制。
 楼主| 紫阳真人 发表于 2016-11-20 19:15 | 显示全部楼层
robter 发表于 2016-11-20 12:18
没看明白楼主的意思

或许是某些概念我理解错了,如能发现还请不吝赐教
 楼主| 紫阳真人 发表于 2016-11-20 19:16 | 显示全部楼层

或许是某些概念我理解错了,如能发现还请不吝赐教
asimo2010 发表于 2017-4-21 15:49 | 显示全部楼层
asm("HALT"); 里自带asm("rim");
您需要登录后才可以回帖 登录 | 注册

本版积分规则

个人签名:必须有所突破

76

主题

532

帖子

10

粉丝
快速回复 在线客服 返回列表 返回顶部