ATmega32 发表于 2008-2-17 17:59:36

Cortex-M3 IAR怎么用C或内嵌汇编读写PRIMASK(中断标志位)?

Cortex-M3 IAR怎么用C或内嵌汇编读写PRIMASK(中断标志位)?

static inline uint32 __get_primask(void)
{
uint32 flags=PRIMASK;
return flags;
}

static inline void __set_primask(uint32 flags)
{
    PRIMASK=flags;
}

Grant 发表于 2008-2-17 20:07:10

同样的问题,你在N个地方发了N次。ST已经回答了你的问题:

原文如下:

在STM32的固件库中,这是用一段汇编实现的

请看STM32F10xFWLib\FWLib\project\EWARM目录下的cortexm3_macro.s文件,其中有两个函数:__SETPRIMASK 和 __RESETPRIMASK

在C程序中只需包含头文件STM32F10xFWLib\FWLib\library\inc\cortexm3_macro.h,即可使用这两个函数。

Qhjh 发表于 2008-2-17 20:18:29

呵呵!人家心急嘛!
21ic香香很温柔哦

ATmega32 发表于 2008-2-18 13:29:23

我本意希望用C或者内嵌汇编。


看来只能:
uint8 __get_primask(void)
{
asm(
      "mrs r0,primask \n\t"
       "bx lr\n\t"   
      );
return 0;
}

void __set_primask(uint8 flags)
{
asm(
      "msr primask,r0 \n\t"
      );
}

ATmega32 发表于 2008-2-18 13:46:54

LM3S临界断宏:
#define CRITICAL()\
for(uint8 __flags=CriticalEnter(),__ToDo=1;__ToDo;__ToDo=0,CriticalExit(__flags))

uint8 __get_primask(void);

void __set_primask(uint8 flags);

static inline uint8 CriticalEnter(void)
{
uint8 flags=__get_primask();
__disable_interrupt();
return flags;
}

static inline void CriticalExit(uint8 flags)
{
__set_primask(flags);
}



使用:
CRITICAL()
{
………………//临界断
}

heky 发表于 2008-2-18 16:15:19

你去关心这些位干嘛用?

ATmega32 发表于 2008-2-18 16:35:04

PRIMASK是中断允许标志位,相当于AVR SREG里面的I,当然有用。

charlieholy 发表于 2013-3-20 20:30:23

路过                                 
页: [1]
查看完整版本: Cortex-M3 IAR怎么用C或内嵌汇编读写PRIMASK(中断标志位)?