首页 > 应用 > 单片机应用
[导读]由于在C语言中无法直接访问COSR, 因此需要通过嵌入式汇编语言来将CPSR 中I位清零,此外,访问CPSR 还需要专门的程序状态寄存器访问MSR MRS 来实现。

 __swi void ledtest(); //:声明 edtest 是个软中断。

本文引用地址: http://www.21ic.com/app/mcu/201612/697754.htm

__asm 内嵌汇编 //:通常在C程序里面需要嵌入汇编代码,这是就可以用__asm关键字来指示编译器下面的代码是用汇编语言来写的,

__inline 定义内联函数 //:就像在C语言中用define定义宏一样,用__inline关键字定义的函数在调用的地方被展开,这主要就是为了解决频繁的函数调用开销过大的问题,如果用__inline关键字定义的函数过大,每个调用函数的地方都会将其展开,这样的话在一定程度上也增加代码量,所以说一般用__inline 定义的函数代码量并不是很大。

由于在C语言中无法直接访问COSR, 因此需要通过嵌入式汇编语言来将CPSR 中I位清零,此外,访问CPSR 还需要专门的程序状态寄存器访问MSR MRS 来实现。

用如下代码实现开中断:

__inline void irq_enable(void) //用关键字__inline 声明内联函数irq_enable()

{

int val;              //定义临时变量保存CPSR 的值

__asm              //关键字告诉编译器下面的代码是用汇编语言写的

{

mrs val,cpsr            //用mrs指令将程序状态寄存器cpsr中的值读入到val

bic val,val,#0x80          //用BIC指令将val中第7位(I位)清0

msr cpsr_c,val          //用MSR指令将val 的值写入到cpsr 此时I位已经清零 即开中断。

}

}

下面的函数实现的是关中断:

__inline void irq_disable(void) //用关键字__inline 声明内联函数irq_enable()

{

int val;              //定义临时变量保存CPSR 的值

__asm              //关键字告诉编译器下面的代码是用汇编语言写的

{

mrs val,cpsr            //用mrs指令将程序状态寄存器cpsr中的值读入到val

orr val,val,#0x80          //用BIC指令将val中第7位(I位)清0

msr cpsr_c,val          //用MSR指令将val 的值写入到cpsr 此时I位已经清零 即开中断。

}

}

『本文转载自网络,版权归原作者所有,如有侵权请联系删除』

换一批

延伸阅读

[智能硬件] 全新Arm ISP技术为智能设备打造更敏锐的数字眼

全新Arm ISP技术为智能设备打造更敏锐的数字眼

Arm宣布推出全新Arm Mali-C52 与Mali-C32图像信号处理器(ISP),通过完整的解决方案提供最高的图像质量,应对在智能物联网设备中实现实时的、更高图像质量的要求。 ......

关键字:arm 智能设备 图像信号处理器

[单片机应用] ARM7入门6,LCD显示字符

ARM7入门6,LCD显示字符

用ADS1.2编辑的,注意添加target.c,IRQ.s,Startuo.s和mem.scf文件。主程序:/*****************************************************************......

关键字:ARM7入门 LCD 显示字符

[单片机应用] ARM中断寄存器详解

ARM中断寄存器详解

S3C2440的中断寄存器:1.中断分两大类:内部中断和外部中断。2.外部中断。24个外部中断占用GPF0-GPF7(EINT0-EINT7),GPG0-GPG15(EINT8-EINT23)。用这些脚做中断输入,则必须配置引脚为中断,并且......

关键字:ARM 中断寄存器

[单片机新闻] 亚马逊、华为制支撑,arm服务器芯片不倒?

亚马逊、华为制支撑,arm服务器芯片不倒?

关于ARM服务器芯片不行了的言论不绝于耳。其实,ARM的服务器芯片事业并没有停步,而且是在最前线生根发芽。......

关键字:华为 亚马逊 arm服务器芯片

[单片机应用] 【ARM学习笔记】三、S3C2440A的存储控制器及启动过程

【ARM学习笔记】三、S3C2440A的存储控制器及启动过程

存储控制器S3C2440A是32位处理器,理论上拥有32根地址线,寻址空间0x00000000~0xFFFFFFFF,即4G而实际上,S3C2440A只拥有27根地址线,实际物理寻址空间为0x00000000~0x07FFFFFF,即128......

关键字:ARM S3C2440A 存储控制器 启动过程

[单片机应用] ARM7入门4,单键控制LED

ARM7入门4,单键控制LED

用ADS1.2编辑的,注意添加target.c,IRQ.s,Startuo.s和mem.scf文件。主程序: /***************************************************************......

关键字:ARM7入门 单键控制 LED

[消费类电子新闻] 比尔盖茨发文悼念老友:没有他,就不会有后来的个人电脑

比尔盖茨发文悼念老友:没有他,就不会有后来的个人电脑

10月16日消息 微软联合创始人保罗·艾伦由于出现非霍奇金淋巴瘤(nonhodgkin's lymphoma ,简称NHL)并发症,于今日早晨去世,享年65岁。保罗·艾伦在本月初曾透露,他正接受非霍奇金淋巴瘤治疗,不过癌细胞最终还是夺去了......

关键字:比尔盖茨 微软 联合创始人 保罗·艾伦

[消费类电子新闻] 颇具亮点的中端机,OPPO R17价格公布:3499元

颇具亮点的中端机,OPPO R17价格公布:3499元

8月20日消息,即将于8月23日发布的OPPO新机R17近日曝光了外观与配置信息,而在今天,OPPO官网公布了R17机型的售价为3499元。据悉OPPO R17仅有8GB/128GB一种版本,现在已经开启全网预购,预计于8月30日正式开启发......

关键字:OPPO OPPO R17 价格 骁龙670

[EDA] Coo1Runner

Coo1Runner

I2C总线是一个通用的串行总线,仅有两个信号线,分别是SCL(时钟)和SDA(数据)。每一个连接到总线上的设备,无论是主设备还是从设备,均可以通过软件寻址。而且对于每一个设备,这个地址是惟一的。 本设计在Coo1Runner......

关键字:Coo1Runner

我 要 评 论

网友评论

芯闻号

技术子站

更多

项目外包

更多

推荐博客