打印

有没有谁知道3.5.0库开关总中断怎么办

[复制链接]
3969|6
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
高个书呆子|  楼主 | 2013-1-29 13:54 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
大家快来讨论一下3.5.0库是怎样开关总中断的,我上网查资料找不到,都针对老库的
沙发
airwill| | 2013-1-30 16:33 | 只看该作者
#define __enable_irq                              __enable_interrupt        /*!< global Interrupt enable */
#define __disable_irq                             __disable_interrupt       /*!< global Interrupt disable */

CMSIS 的 core_cm3.c 里定义的函数

使用特权

评论回复
板凳
uet_cache| | 2013-1-30 16:45 | 只看该作者
看个官方例程不就清楚了?

使用特权

评论回复
地板
zdx818| | 2013-1-31 13:49 | 只看该作者
本帖最后由 zdx818 于 2013-1-31 13:51 编辑

我这里有一个,你参考下:

其实,为了快速地开关中断,CM3 还专门设置了一条CPS 指令,有4 种用法
CPSID I ;  PRIMASK=1, ;关中断
CPSIE I ;  PRIMASK=0, ;开中断
CPSID F ;  FAULTMASK=1, ;关异常
CPSIE F ;  FAULTMASK=0 ;开异常

//THUMB指令不支持汇编内联
//采用如下方法实现执行汇编指令WFI
//CHECK OK
//091209
__asm void WFI_SET(void)
{
        WFI;   
}
WFE 休眠并且在发生事件时被唤醒
WFI 休眠并且在发生中断时被唤醒//进入待机模式         
//check ok
//091202
void Sys_Standby(void)
{
        SCB->SCR|=1<<2;//使能SLEEPDEEP位 (SYS->CTRL)           
          RCC->APB1ENR|=1<<28;     //使能电源时钟            
        PWR->CSR|=1<<8;          //设置WKUP用于唤醒
        PWR->CR|=1<<2;           //清除Wake-up 标志
        PWR->CR|=1<<1;           //PDDS置位                  
        WFI_SET();                                 //执行WFI指令                 
}

使用特权

评论回复
5
21ID| | 2013-1-31 14:53 | 只看该作者
#define DisableAllIRQs() __set_PRIMASK(1);__set_FAULTMASK(1)
#define EnableAllIRQs()  __set_PRIMASK(0);__set_FAULTMASK(0)

上面是我自己的定义。

使用特权

评论回复
6
21ID| | 2013-1-31 14:57 | 只看该作者
airwill 发表于 2013-1-30 16:33
#define __enable_irq                              __enable_interrupt        /*!< global Interrupt en ...

这个是针对ICC Compiler 的吧

使用特权

评论回复
7
mcuatmel| | 2013-1-31 16:08 | 只看该作者
我还真不知道有这样一条指令,学习了!!
以前一直在想:为什么STM32会没有象51一样有一个EA,所以想控制所有中断的开和关时简直是大大的工作量。

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

7

主题

40

帖子

0

粉丝