单片机入门的方法与学习误区介绍

发布者:uioo9158最新更新时间:2021-06-30 来源: eefocus关键字:单片机入门  方法  学习误区 手机看文章 扫描二维码
随时随地手机看文章

简介:ARM单片机是大多数新手选择的入门切入点,但由于知识的不足,在设计过程中新手们经常会遇到这样或那样的问题,ARM异常中断返回就是这样一种令人头疼的问题。在ARM的使用问题中异常中断返回是新手们较为苦恼的问题,本文就将对ARM异常中断的集中情况进行总结,并给出了一些解决方法。


在正式介绍之前,要为大家补充一些较为重要的基础知识。首先R15(PC)总是指向“正在取指”的指令,而不是指向“正在执行”的指令或正在“译码”的指令。一般来说,人们习惯性约定将“正在执行的指令作为参考点”,称之为当前第一条指令,因此PC总是指向第三条指令。当ARM状态时,每条指令为4字节长,所以PC始终指向该指令地址加8字节的地址,即:PC值=当前程序执行位置+8;而ADS中的pc,是为了调试看着方便而修改过的,它指向的是正在执行的指令,即“真正pc-8”!


SWI和未定义指令异常中断的返回


指令地址:


A PC-8当前指令为SWI或未定义指令,此时发生中断.PC的值还没有更新。


A+4 PC-4中断时处理器将PC-4保存到LR。;r!


A+8 PC


返回时,从发生中断的指令A(PC-8)的下一条指令A+4(PC-4)处开始执行,所以直接把LR的值赋给PC就行了,具体指令为MOV PC,LR(PC=A+4=LR)。


白话解释:对于SWI和未定义指令发生异常时pc没有更新,根据ARM的三级流水线原理,pc没有更新,仍然等于(A+8);lr = pc – 4(这时处理器决定的,无法更改!)即A+4。


由于这类异常返回后应执行下一条指令(A+4),所以返回时,pc=lr即可。


IRQ 和FIQ异常中断处理的返回指令地址对应于PC A,PC-8执行此指令完成后(!)查询IRQ及FIQ,如果有中断请求则产生中断。


A+4 PC-4


A+8 PC ;lr!


(此时PC的值已经更新,指向A+12.将当前PC-4,即A+8)。


保存到LR.返回时,要接着执行A+4(LR-4)处的指令,所以返回指令为:


SUBS PC,LR,#4(PC=A+4=LR-4)


白话解释:对于普中断和快中断异常,中断必须在一条指令执行完以后被检测到,如正在执行指令甲时发生了中断,不等指令甲执行完是不会处理该中断的,发生异常时pc已经更新(A+12); lr=pc– 4(这时处理器决定的,无法更改!)即A+8返回后,应执行被中断而没有执行的指令(上面的A+4),所以返回时,pc= lr-4。


指令预取中止异常中断处理的返回


指令地址:


A PC-8 执行本指令时发生中断,A+4 PC-4处理器将A+4(PC-4)保存到:


LR. ;lr!A+8 PC


返回时,发生指令预取中止的指令A(PC-8)处重新执行,所以返回指令为SUBS PC,LR,#4(PC=A=LR-4)。


白话解释:对于预取指令中止异常发生预取指令异常时,是在执行时发生的异常,pc未更新,即pc=A+8;lr=pc – 4(这时处理器决定的,无法更改!)即A+4。


由于这类异常返回后应重新执行异常的那个指令(A),所以返回时,pc = lr-4。


数据访问中止异常中断处理的返回


指令地址:


A PC-8 本指令访问有问题的数据,产生中断时,PC的值已经更新。


A+4 PC-4 中断发生时PC=A+12,处理器将A+8(PC-4)保存到LR.。


A+8 PC ;lr!


返回时,要返回到A处继续执行,所以指令为SUBS PC,LR,#8.(PC=A=LR-8)


白话解释:对于数据访问中止异常时,是在执行时访问数据错误。


导致的异常,pc已经更新,即pc=A+12。


lr=pc–4(这时处理器决定的,无法更改!)即A+8。


由于这类异常返回后应重新执行异常的那个指令(A),所以返回时,pc=lr-8。


总结


引起PC更新的原因一种是数据中止,还有就是中断了。


中断必须是在一条指令执行完毕后才能被检测到,所以它中断的只是还未执行的那条。指令(pc-8),所以pc=lr – 4;


与中断相同,SWI和未定义指令异常也是返回到下一条指令(pc-4),只是他们在执行时,PC的值并没有更新,所以pc= lr。


预取指令中止异常,也没有发生pc更新,但它还得重新执行发生异常的那条指令,所以pc=lr–4。


数据访问中止异常,发生了pc更新,并且它也需要重新执行发生异常的那条指令,所以pc=lr–8。


通过以上的介绍,可以看到造成单片机中断返回的原因非常多,每种方法的应对方案都不尽相同。在ARM芯片调试过程中遇到中断返回问题的朋友不妨仔细阅读本文,相信会从中找到问题的解决方法。也可收藏本文以备不时之需,在遇到错误的时候进行查阅。

关键字:单片机入门  方法  学习误区 引用地址:单片机入门的方法与学习误区介绍

上一篇:基于ARM和CPLD的嵌入式视觉系统设计
下一篇:ARM+Linux代表了嵌入式未来趋势

推荐阅读最新更新时间:2024-11-13 12:25

keil5软件仿真出现unknown signal解决方法
用keil uvision5软件仿真时,MDK Logic Analyzer添加current logic analyzer signals时总是显示Unknown Signal? 解决方法如下: Debug选项设置如下:其中Parameter的设置根据自己建立项目时选的开发板型号填写。 在添加就不会出现Unknown Signal。
[单片机]
keil5软件仿真出现unknown signal解决<font color='red'>方法</font>
安捷伦示波器DCA-J 86100C的测试方法和应用领域
安捷伦 示波器 DCA-J86100C搭配光采样模块86105C、电时钟恢复模块83496B,可以实现对 光纤 中的 以太网 信号质量分析。 DCA-J86100C宽带宽示波器主机 测试 项目: 1、光纤信号上升时间 2、光信号下降时间测试 3、数据抖动测试 4、发送光信号波形测试 接线方法: 光信号发生器(光纤交换机)连接Agilent83496B光电 时钟 恢复模块DataInputs口内部进行时钟恢复处理后从DataOutputs口输出,连线至安捷伦86105C光电采样模块的光输入口,内部进行光电转换并测试。 测试设置: 1.眼图模板模式 2.TDR/TDT模式 3.示波器模式 4.抖动测试模式 当需要测眼图和抖
[测试测量]
安捷伦示波器DCA-J 86100C的测试<font color='red'>方法</font>和应用领域
附着力的测量仪器及测量方法
磁吸力测量原理:   永久磁铁(测头)与导磁钢材之间的吸力大小与处于这两者之间的距离成一定比例关系,这个距离就是覆层的厚度。利用这一原理制成测厚仪,只要覆层与基材的导磁率之差足够大,就可进行测量。鉴于大多数工业品采用结构钢和热轧冷轧钢板冲压成型,所以磁性测厚仪应用最广。测厚仪基本结构由磁钢,接力簧,标尺及自停机构组成。磁钢与被测物吸合后,将测量簧在其后逐渐拉长,拉力逐渐增大。当拉力刚好大于吸力,磁钢脱离的一瞬间记录下拉力的大小即可获得覆层厚度。新型的产品可以自动完成这一记录过程。不同的型号有不同的量程与适用场合。 特点及用途: 这种仪器的特点是操作简便、坚固耐用、不用电源,测量前无须校准,价格也较低,很适合车间做现场质量控制。
[测试测量]
电源模块中低电磁干扰设计的折中方法
电源设计中即使是普通的直流到直流开关转换器的设计都会出现一系列问题,尤其在高功率电源设计中更是如此。除功能性考虑以外,工程师必须保证设计的鲁棒性,以符合成本目标要求以及热性能和空间限制,当然同时还要保证设计的进度。另外,出于产品规范和系统性能的考虑,电源产生的电磁干扰(EMI)必须足够低。不过,电源的电磁干扰水平却是设计中最难精确预计的项目。有些人甚至认为这简直是不可能的,设计人员能做的最多就是在设计中进行充分考虑,尤其在布局时。   尽管本文所讨论的原理适用于广泛的电源设计,但我们在此只关注直流到直流的转换器,因为它的应用相当广泛,几乎每一位硬件工程师都会接触到与它相关的工作,说不定什么时候就必须设计一个电源转换器。本文中我们将
[电源管理]
电源模块中低电磁干扰设计的折中<font color='red'>方法</font>
电力变压器直流电阻的快速测量方法----恒流源的设计与试验(三)
4.6.2恒流源的试验设计和试验数据 将组成恒流源的器件设计为一个模块,引出主电源与辅助电源的正负端子,测试恒流源的性能和得到其各种参数,设计实验电路如下 实验中主电源直流电压10V,辅助电源采用12V直流电源。 经分析和实验得出几点结论: (1)恒流源工作在自身最大功率范围内,输出的电流不随负载的变化而变化。功率大小为P=V AK *I L ,若外加电压使其功率超过最大值,恒流源器件就会失去恒流特性。其中V AK 为A、K两端间电压,I L 为回路输出电流,E A =V AK + R L ×I L ,V AK = E A -R L ×I L .V AK 是恒流源模块阳极与阴极之间的电压,V AK ≥0.5V就能
[测试测量]
电力变压器直流电阻的快速测量<font color='red'>方法</font>----恒流源的设计与试验(三)
单片机MSP430入门--理论③--时钟模块-DCO和BCS寄存器
上期大概给大家汇总介绍了,MSP430时钟模块的3个晶振和3个主要时钟信号,要知道时钟是单片机的脉搏,如果时钟没设置好,单片机将无法工作 本期将重点介绍下,在MSP430环境下的时钟寄存器BCSCTL1,BCSCTL2,以及他们的设置方法 1.0 DCOCTL,DCO寄存控制器 DCO0-DCO2(BIT5-7):定义了8种频率,而频率由直流发生器的不同电流来定义 MOD0-MOD4(BIT0-4):频率的微调 1.1 DCO的调节: ①设置BCSCTL2的DCOR的bit来选择是1为外部电阻还是0为内部电阻,以确定一个基准频率,默认为0
[单片机]
<font color='red'>单片机</font>MSP430<font color='red'>入门</font>--理论③--时钟模块-DCO和BCS寄存器
单片机系统对RAM的测试方法
  在各种单片机应用系统中,存储器的正常与否直接关系到该系统的正常工作。为了提高系统的可靠性,对系统的可靠性进行测试是十分必要的。通过测试可以有效地发现并解决因存储器发生故障对系统带来的破坏问题。本文针对性地介绍了几种常用的单片机系统RAM测试方法,并在其基础上提出了一种基于种子和逐位倒转的RAM故障测试方法。   1 RAM测试方法回顾   (1)方法1   参考文献中给出了一种测试系统RAM的方法。该方法是分两步来检查,先后向整个数据区送入#00H和#FFH,再先后读出进行比较,若不一样,则说明出错。   (2)方法2   方法1并不能完全检查出RAM的错误,在参考文献中分析介绍了一种进行RAM检测的标准算法MARC
[单片机]
单片机入门第一课:点亮一个发光二极管
单片机入门第一课 点亮一个发光二极管 我们先打开 keic51软件,把程序写进去。 先看程序吧,很简单。就是让单片机点亮嘛。简单的很。 #include sbit D1=P1^0; void main() { D1=0; } 这个程序写好后,然后编译成hex文件。基本上就差不多了。 简单的讲解下这个程序(入门第一课啊) 我们如何用单片机点亮一个led灯呢??? 先看下电路图吧,要不然打死你,你也不知道为什么这样就能点亮我们的led灯。这里的led灯的负极通过 74hc573接到了单片机的p1 口。我们要想点亮它,就把p1口的某一个口为0,(电平为0)就可以点亮它,有这个思路,看我们的程序。 #includ
[单片机]
小广播
设计资源 培训 开发板 精华推荐

最新单片机文章
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

换一换 更多 相关热搜器件
更多往期活动

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved