首页 > 应用 > 单片机应用
[导读]由于在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推出服务器合规认证计划Arm ServerReady

Arm推出服务器合规认证计划Arm ServerReady

Arm宣布正式推出基于Arm架构的服务器合规认证计划——Arm ServerReady,旨在帮助用户安全、合规地部署Arm服务器系统。目前,已有多家芯片供应商获得Arm ServerReady 1.0版本的认证。 ......

关键字:Arm 服务器 Arm ServerReady

[单片机应用] ARM基础:系统调用与软件中断SWI的实现

ARM基础:系统调用与软件中断SWI的实现

1系统调用操作系统的主要功能是为应用程序的运行创建良好的环境,保障每个程序都可以最大化利用硬件资源,防止非法程序破坏其它应用程序执行环境,为了达到这个目的,操作系统会将硬件的操作权限交给内核来管理,用户......

关键字:ARM基础 系统调用 软件中断 SWI

[单片机应用] ARM7入门1,跑马灯实验

ARM7入门1,跑马灯实验

用keil uvision3和proteus做的程序。主程序:/******************************************************************************/ /* This......

关键字:ARM7入门 跑马灯实验

[单片机应用] ARM7单片机(学习ing)—(一)、输入/输出端口GPIO编程—02

ARM7单片机(学习ing)—(一)、输入/输出端口GPIO编程—02

一、输入/输出端口GPIO编程一—(02)、控制LCD1602显示~~废话不多说了~~直接上图~~然后是程序~~MDK1_2.c//------------------------------------------------------......

关键字:ARM7 单片机 GPIO编程

[消费类电子新闻] Arm物联网平台生态系统再扩大,Intel也加入了

Arm物联网平台生态系统再扩大,Intel也加入了

2018年10月16日 – Arm宣布Intel、Arduino及myDevices加入Arm Pelion物联网平台生态系统,进一步强化物联网设备到数据的连接以及设备与数据的管理能力,帮助企业挖掘物联网的巨大潜力,并实现数字化转型。......

关键字:Arm物联网平台 intel

[单片机应用] ARM的37个寄存器

ARM的37个寄存器

1.ARM的7种工作模式ARMv4和ARMv5的指令集规定了ARM的7种工作模式,由寄存器CPSR[4:0]决定(见下表),分别是用户(User)模式:ARM处理器正常的程序执行状态系统(System)模式:运行具有特权的操作系统任务快速中......

关键字:ARM 寄存器

[单片机应用] 朱老师ARM裸机学习笔记(五):ARMCPU工作模式以及寄存器

朱老师ARM裸机学习笔记(五):ARMCPU工作模式以及寄存器

ARM的约定byte 8bitshalfword 16bitsword 32bitsARM Core 提供的指令集ARM指令集 32bitsThumb 指令集 16bitsThumb2 指令集 16&32bitsARM CPU的七种......

关键字:ARM裸机 工作模式 寄存器

[单片机应用] 移植嵌入式Linux到ARM处理器S3C2410:BootLoader

移植嵌入式Linux到ARM处理器S3C2410:BootLoader

BootLoader指系统启动后,在操作系统内核运行之前运行的一段小程序。通过BootLoader,我们可以初始化硬件设备、建立内存空间的映射图,从而将系统的软硬件环境带到一个合适的状态,以便为最终调用操作系统内核准备好......

关键字:移植 Linux ARM处理器 S3C2410 BootLoader

[单片机应用] 【ARM学习笔记】五、操作系统Operation System和内存管理单元MMU

【ARM学习笔记】五、操作系统Operation System和内存管理单元MMU

一、操作系统Operation System第一台计算机并没有操作系统,计算机工作采用手工操作方式,使用效率极其低下。随着计算机的性能越来越快,手工操作的慢速度和计算机的高速度之间形成了尖锐矛盾,人们迫切需要一套完整......

关键字:ARM 操作系统Operation System 内存管理单元 MMU

[测试测量] 浅谈数字示波器的死区时间问题

浅谈数字示波器的死区时间问题

随着科学技术的发展,数字示波器越来越先进,波形刷新率已经成为了数字示波器仅次于带宽、采样率、存储深度之后的第四大技术指标。说到波形刷新率的意义就是和死区时间息息相关了。死区时间是数字示波器与生俱来的一......

关键字:数字示波器 死区时间 波形捕获率

我 要 评 论

网友评论

芯闻号

技术子站

更多

项目外包

更多

推荐博客