STM 8s 外部中断寄存器无法写入

 虽然说单片机开发就是对手册的研究,但是开发过程中,还是要做些笔记的,方便以后注意那些坑.

工作要求所以接触了一下STM328s00f3这个芯片,配置外部中断的时候遇到了一点问题

PS:IAR这个开发软件真不好用.

外部中断:

配置PD口的外部中断是,发现EXTI_CR1寄存器无法写入.于是开始寻找原因.

 

在配置EXTI_CR1寄存器时看见"

这些位仅在CC寄存器的I1I0位都为1(级别3)时才可以写入。这些位定义端口D
中断触发位

"这句话,但是CC寄存器要如何配置呢?

 首先来看看这个寄存器的描述,默认值是符合前面的要求的,并且I1 和 I0是rw的,于是尝试写入,但是没有找到地址的相关说明.

 1 #ifdef __cplusplus
 2 extern "C"
 3 {
 4 #endif
 5 
 6   __intrinsic void __enable_interrupt(void);     /* RIM */
 7   __intrinsic void __disable_interrupt(void);    /* SIM */
 8 
 9   __intrinsic __istate_t __get_interrupt_state(void);
10   __intrinsic void       __set_interrupt_state(__istate_t);
11 
12   /* Special instruction intrinsics */
13   __intrinsic void __no_operation(void);         /* NOP */
14   __intrinsic void __halt(void);                 /* HALT */
15   __intrinsic void __trap(void);                 /* TRAP */
16   __intrinsic void __wait_for_event(void);       /* WFE */
17   __intrinsic void __wait_for_interrupt(void);   /* WFI */
18 
19   /* Bit manipulation */
20   __intrinsic void __BCPL(unsigned char __near *, unsigned char);
21   __intrinsic void __BRES(unsigned char __near *, unsigned char);
22   __intrinsic void __BSET(unsigned char __near *, unsigned char);
23 
24 #ifdef __cplusplus
25 }
26 #endif

后来在库文件中找到了__enable_interrupt(); 只需要在这个函数之前配置外部中断寄存器就好了.

    Fun_HardInit_Hall(); //hall硬件初始化
    // 开总中断
    __enable_interrupt();

哈哈,有点水哈   没有从寄存器说明真正的原因,以后查到了,再更新吧,IAR也没有寄存查看的功能SWIM的调试调试真的好难用.

 

posted @ 2017-05-17 09:31  阿呆阿萌  阅读(889)  评论(0编辑  收藏  举报