AT91单片机中断设置怎么设置定时中断

ARM Cortex微控制器教程-图书分类-北航出版社单片机世界
?????图书检索
?????本类图书
?????分类浏览
ARM Cortex微控制器教程
[单片机与嵌入式系统 ┈→ 单片机]
定价:38元
作者:马忠梅 徐琰 叶青林
书号:978-7-
配盘:无盘
出版日期:201001
开本:787×开
字数:582千字
点击次数:4028
&&&&本书是32位微控制器教材,基于ARM&Cortex讲述嵌入式系统概念、软硬件组成、开发过程以及Cortex体系结构和应用程序开发设计方法。全书共8章,有嵌入式系统基础和ARM&CortexM体系结构等理论内容,也有TI、ST、NXP和Atmel四家公司的Cortex微控制器时钟控制和应用程序设计等实践内容,另外还包括μC/OS移植和UML设计方法。本书有两个主要目的,一是普及高端MCU,不要再面向寄存器编程,而要使用库函数;二是体现Cortex&MCU很好的“生态环境”,有多家厂商支持。
&&&&本教材的特点是取材于最新资料,总结实际竞赛经验,实例较多,实用性较强。本书适用于没有操作系统知识的单片机开发人员学习嵌入式系统,可作为研究生和本科生嵌入式系统课程的教材使用。
&&&&笔者从1985年初接触单片机到现在已25年,亲历了我国嵌入式系统的发展,同时也进行了嵌入式系统教学的探索。笔者1997年出版的《单片机的C语言应用程序设计》是国内第1本单片机C语言图书。该书推广单片机编程,以C语言为主,汇编为辅,采用模块化的编程方法。用C语言编程,程序可读性强、可重用性高,提高了编程的效率。为了程序的可移植性更强,上操作系统是进一步发展的必然趋势,但8/16位单片机上操作系统有其局限性。正是由于想上操作系统,才关注到了ARM。从计算机体系结构发展看,精简指令集计算机(RISC)在低功耗、流水线执行方面更具优势。ARM公司由于手机的火爆,已成为32位RISC处理器的事实标准。
&&&&笔者自2002年出版国内第1本ARM图书《ARM嵌入式处理器结构与应用基础》后,一直致力于ARM处理器的应用推广工作,编写了《ARM&Linux嵌入式系统教程》,在本科教学中使用。Linux的教学难度很大,一般要求学生学习过操作系统。最早的嵌入式系统课在教学生怎么用Linux上耗费了很大精力,直到计算机操作系统课加了Linux上机实验,情况才好转。但有限的理论课时和实验学时,软硬件很难兼顾。研究生教学一直就没有放弃单片机。从研究生教学调查看,还是微控制器(俗称单片机,简称MCU)用得多。嵌入式系统应用以微控制器为主。微控制器用量大,应用面广,已有很好的应用基础。一个MCU设计可以改造一个旧产品,也可以创造一个新产品。MCU对于本科生和研究生容易上手,更重要的是它集成度高,能够便于学生学做电路板、学习硬件接口技术和学习直接面向硬件的软件编程技术,这样才能对嵌入式软硬件有深入的理解。
&&&&ARM公司推出的CortexM核专门针对微控制器市场,并收购了德国的Keil公司,推出中国版的RealView&MDK开发工具。这样原用8051单片机的用户可以将熟悉的开发环境过渡到ARM&MCU的应用。2008年,ARM公司“微控制器市场创新研讨会”的新理念是就支离破碎的微控制器市场,以ARM来统一微控制器市场开发环境,以后微控制器的选型不再以8位、16位和32位来划分,而是以高、中、低档芯片来划分。因为这些微控制器都有统一的机芯,区别只是它们的外围部件不同和厂商的技术支持不同。这样,工具和软件都可以重复使用,不用购置各种开发工具。国际著名的生产单片机的半导体公司TI、ST、NXP、Atmel等都得到Cortex授权,有望在32位嵌入式处理器市场统一机芯,构成很好的“生态环境”。ARM微控制器比8/16位单片机速度快,适合运算量大的应用,用此进行产品设计更有竞争优势。原ARM微控制器和CortexM微控制器差别较大,后者有CMSIS编程标准,有一致的存储器映射,便于软件移植。
&&&&本书是32位微控制器教材,包括四家MCU,主要涉及GPIO、中断和定时器的片上资源基本编程,力图做类似的样例,比较各家的编程方式。主要目的有两个,一是普及高端MCU,不要再面向寄存器编程,而要使用库函数;二是体现Cortex&MCU很好的“生态环境”,有多家厂商支持。还有一点是尽量给出寄存器名、指令等的英文原义,我们发现这是国内翻译资料没有注意到的。对于LM3S,我们带过竞赛,接口以它为主。通过竞赛看到,优秀的大三学生就能上手使用Cortex微控制器。这种32位MCU完全可用C语言编程,不涉及汇编。片上外设的寄存器配置更为复杂,支持的工作方式更多。厂家都纷纷提供了库函数,只要用户依据参数配置外设,使用库函数就能方便地操作外设,再没必要记住寄存器名、寄存器位定义和使用汇编了。这也是学生原来感觉学习单片机难度最大的地方。现编程只需关注外设的工作方式和可有哪些操作即可,大大降低了学习门槛。只要会C语言,许多样例程序就可直接使用。
&&&&由采用8/16位单片机到采用32位嵌入式处理器的嵌入式系统,一方面是由于互联网的普及和高端应用的需求,另一方面是由于8位单片机在半导体公司的利润空间已经很小了。由全国大学生电子设计竞赛组委会主办,Intel公司协办的“全国大学生电子设计竞赛——嵌入式系统专题竞赛”进一步丰富了全国大学生电子设计竞赛的形式和内容,推动了高校信息电子类专业的教学改革、课程体系及实验室建设,各高校纷纷开设了嵌入式系统课程。本书前3章即为开课后的讲稿整理而成。全书共8章,各章节内容安排如下:
&&&&第1章为嵌入式系统的基础知识,讲述嵌入式系统概念、嵌入式系统应用、嵌入式处理器、嵌入式操作系统和实时操作系统内核。
&&&&第2章介绍嵌入式系统开发的特点、开发流程、调试方法和板级支持包的功能。
&&&&第3章详细介绍ARM&Cortex体系结构和编程模型,分类给出ARM指令集的说明及汇编语言程序设计,特别讲述存储器映射及中断和异常的处理方法,最后介绍Cortex的优势。
&&&&第4章给出TI、ST、NXP和Atmel四家公司的Cortex微控制器分类、特性、结构和时钟控制等。
&&&&第5章给出TI、ST、NXP和Atmel四家公司的Cortex微控制器应用程序的编写方法,侧重于GPIO、中断和定时器的片上资源基本编程。
&&&&第6章详细给出了LCD显示模块、行列式键盘、电机控制、串行总线接口SPI和I2C接口及编程实例。
&&&&第7章为将μC/OSII移植到Cortex处理器上需要修改的内容。
&&&&第8章简要介绍UML设计方法中常见的模型元素、图和视图。
&&&&本书是由北京理工大学教师带领学生共同完成的。笔者负责全书内容的统稿,许多内容取材于学生的例程开发和竞赛设计。徐琰、叶青林、卢彦超、金伟、陈航、宋亚斐、施度、谢华勇同学参与了开发设计实践。下决心写此书是由于国内缺少合适的高端32位微控制器教材,全校研究生的课程又不好局限于某一家公司的芯片。我们只希望培养学生对嵌入式系统的兴趣,更多地让学生比较与选型,只有共同把Cortex微控制器应用推动起来,国内高端嵌入式应用才能健康发展。希望不久的将来,在国内能看到大量基于Cortex微控制器的产品,学生们能更好找到工作。
&&&&感谢ARM中国公司前总裁谭军,是他的鼓励和支持才使我们下决心写此书。感谢周立功提供EasyARM开发板,周立功公司李佰华、周小明提供NXP公司的LPC1700系列和TI公司LM3S系列翻译资料;感谢ST公司梁平、张军辉提供STM32开发板并允许使用翻译资料;感谢NXP公司王朋朋提供LPC1700系列开发板,并对样例程序提出宝贵建议;感谢IAR公司叶涛提供JLINK仿真器;感谢英蓓特公司廖武提供ULINK仿真器;感谢Atmel公司庞长富抽奖出的SAM3U开发板,应了笔者和Atmel公司的缘分,编写的第一本ARM芯片的书就是《AT91&ARM核微控制器结构与开发》;感谢武汉理工大学李宁提供了一部分SAM3U翻译资料。希望借此书感谢帮助过我们的人,在此谨向他们深表谢意。
第1章&嵌入式系统基础
1.1嵌入式系统概念1
1.1.1嵌入式系统定义1
1.1.2嵌入式系统组成2
1.1.3嵌入式系统特点3
1.1.4嵌入式系统应用5
1.1.5实时系统6
1.2嵌入式处理器7
1.2.1嵌入式处理器分类7
1.2.2微控制器8
1.2.3嵌入式微处理器9
1.2.4&DSP处理器9
1.2.5片上系统10
1.2.6典型的嵌入式处理器11
1.3嵌入式操作系统12
1.3.1操作系统概念和分类12
1.3.2实时操作系统16
1.3.3常见的嵌入式操作系统19
1.4实时操作系统的内核23
1.4.1任务管理23
1.4.2任务间的通信和同步30
1.4.3存储器管理32
1.4.4定时器和中断管理33
第2章&嵌入式系统开发过程
2.1嵌入式软件开发的特点35
2.2嵌入式软件的开发流程36
2.3嵌入式系统调试42
2.4板级支持包46
第3章CortexM体系结构
3.1&ARM体系结构概述49
3.1.1&ARM体系结构的特点49
3.1.2流水线52
3.1.3&ARM处理器核54
3.1.4结构框图64
3.1.5典型的连接方式65
3.1.6&ARM&JTAG调试接口67
3.2&编程模型68
3.2.1&Thumb2指令集体系结构(ISA)68
3.2.2寄存器69
3.2.3工作模式和特权级别72
3.2.4&CortexM3堆栈73
3.2.5数据类型74
3.2.6存储器和存储器映射I/O74
3.3&ARM基本寻址方式77
3.4&Thumb2指令集说明82
3.4.1条件执行82
3.4.2指令分类说明83
3.4.3&Thumb2指令集的特点103
3.4.4&ARM汇编语言程序设计108
3.5存储器映射111
3.5.1存储系统简介111
3.5.2存储器映射空间111
3.5.3位绑定操作114
3.6中断和异常117
3.6.1异常类型118
3.6.2优先级的定义119
3.6.3向量表121
3.6.4中断输入及挂起行为122
3.6.5&NVIC与中断控制124
3.6.6中断/异常的响应序列126
3.6.7尾链中断127
3.6.8迟到异常处理128
3.6.9异常返回值128
3.6.10中断延迟130
3.7&ARM&CortexM的优势&130
第4章ARM&CortexM微控制器
4.1&LM3S微控制器134
4.1.1&LM3S微控制器分类134
4.1.2&LM3S微控制器特性和结构135
4.1.3系统控制和时钟144
4.1.4&Stellaris外设驱动库150
4.2&STM32微控制器155
4.2.1&STM32微控制器分类155
4.2.2&STM32F103微控制器特性和结构156
4.2.3&STM32复位与时钟控制163
4.2.4&STM32启动模式168
4.2.5&STM32固件库169
4.3&LPC1000系列微控制器174
4.3.1&LPC1000系列微控制器分类174
4.3.2&LPC1700微控制器特性和结构175
4.3.3&LPC1700系统控制179
4.3.4&LPC1700时钟和功耗控制181
4.4&SAM3U微控制器187
4.4.1&SAM3U微控制器系列187
4.4.2&SAM3U微控制器特性和结构188
4.4.3&SAM3U复位与时钟控制191
第5章&片上资源的编程技术
5.1&LM3S微控制器片上资源199
5.1.1&LM3S通用输入/输出端口GPIO199
5.1.2&LM3S按键中断208
5.1.3&LM3S通用定时器210
5.1.4&LM3S串行口UART221
5.1.5&LM3S模/数转换器(ADC)226
5.2&STM32微控制器片上资源228
5.2.1&STM32通用和复用功能I/O(GPIO和AFIO)228
5.2.2&STM32按键中断234
5.2.3&STM32通用定时器240
5.3&LPC1700微控制器片上资源267
5.3.1&LPC1700通用输入输出口GPIO267
5.3.2&LPC1700按键中断276
5.3.3&LPC1700通用定时器284
5.4&SAM3U微控制器片上资源298
5.4.1&SAM3U通用输入输出口GPIO298
5.4.2&SAM3U按键中断304
5.4.3&SAM3U通用定时器307
第6章&嵌入式系统接口及编程
6.1字符型LCD显示模块322
6.1.1&LCD硬件接口设计322
6.1.2&LCD显示编程323
6.2行列式键盘326
6.2.1键盘硬件接口设计326
6.2.2键盘扫描程序设计327
6.3电机控制332
6.3.1步进电机控制模块332
6.3.2直流电机控制模块339
6.4串行总线接口SPI343
6.4.1串行总线接口SPI简介343
6.4.2&Stellaris的同步串行接口(SSI)343
6.4.3与串行总线接口SPI有关的函数346
6.4.4&ZigBee通信实例347
6.5&I2C接口360
6.5.1&I2C总线简介360
6.5.2&I2C总线的通信规约360
6.5.3&Stellaris的I2C接口362
6.5.4与I2C有关的库函数364
6.5.5&I2C接口应用实例365
第7章&μC/OSII移植
7.1移植代码说明371
7.1.1&includes.h372
7.1.2&OS_CPU.H文件372
7.1.3&OS_CPU_C.C文件374
7.1.4&OS_CPU_A.ASM375
7.2&异常/中断381
7.3&启动文件和目标板配置文件381
7.3.1&startup_ewarm.c文件382
7.3.2&Target.H文件384
7.3.3&Target.C文件387
7.4用户文件389
第8章UML设计方法
8.1常见的模型元素391
8.1.1结构要素391
8.1.2行为要素393
8.1.3分组要素393
8.1.4注释要素394
8.1.5关系394
8.3视图400
参考文献402
版权所有:
??设计制作:
地址:北京市海淀区学院路37号北航出版社 邮编:100191
电 话:010-17027  传 真:010-  邮购传真:010-AT89S52的定时器2为何不能用? - 初学园地 -
51单片机学习论坛
- Powered by Discuz!
AT89S52的定时器2为何不能用?
单片机高中生
AT89S52的定时器2为何不能用?
下面这个程序用定时器 0 已经编译通过,但是在用定时器 2&&代替定时器 0 时,有TR2 , TH2 , TL2 的语句都提示错误:UNDEFINED&&SYMBOL (PASS-2) , 不能编译,我是对照从网上下载的 89S52 的技术资料试着做这个实验的,不知错在哪里,请各位指教,先谢谢!!& & (注释后面的内容是原用定时器0的语句)
;& & 警报声程序:改写自XL2000\xljb.asm小喇叭警报程序
;& && && && && & 已编译通过
;*********************************************************
& &&&SPK&&BIT&&P3.3
& &&&frq&&equ&&40h
& &&&org&&0000h
& & LJMP&&MAIN
& &&&org&&002bh& && && &&&;000bh
& & LJMP&&TIMER0
& &&&ORG&&0080h
& &&&mov&&sp ,#30h
& &&&MOV&&T2MOD,#02h& &;TMOD,#01H
& &&&MOV&&FRQ,#0
& &&&MOV&&TH2,#00h& && && &;TH0,#00h
& &&&MOV&&TL2,#0ffh& && && & ;TL0,#0FFH
& & SETB&&TR2& && && && && && &;TR0
& &&&MOV&&IE,#0A0h& && && &&&;#082H
& &&&INC&&FRQ&&
& &LCALL&&DELAYMS
& & sjmp&&main_lp& &
& &&&MOV&&TH2,#0fdh& && & ;TH0,#0FdH
& &&&MOV&&TL2,fqr& && && && &;TL0,frq
& &&&CPL&&SPK
& &&&RETI&&
& &&&MOV&&R7,#04
& &&&MOV&&R6,#185
& & DJNZ&&R6,DLY_LP2
& & DJNZ&&R7,DLY_LP1
单片机教授
MOV&&TL2,fqr&&这个错了,
应该是MOV&&TL2,frq
TR2 , TH2 , TL2 有定义吗
MCU:AJMP MCU
UID440&帖子2210&精华&积分2245&阅读权限90&在线时间1019 小时&注册时间&最后登录&
单片机高中生
回复 2# 明白 的帖子
先向明白教授表示感谢!用89s52 的定时器 2 还需要先对TR2 , TH2 , TL2 定义吗?如何定义?定时器 0 和 1 为什么不要定义?另外我怀疑是不是“为目标选择设备”选择错了,我选择的是89C52,于是重新选择,设备数据库里没有 89S52,我选择了89F52 和 89S53 做试验,问题依旧。
单片机教授
选择89S52,就不要定义
设备数据库里应该有 89S52,仔细看一下。
如何要定义可以:
sbit TR2& & = 0xC8^2;
sfr TL2& & = 0xCC;
sfr TH2& & = 0xCD;
MCU:AJMP MCU
UID440&帖子2210&精华&积分2245&阅读权限90&在线时间1019 小时&注册时间&最后登录&
单片机高中生
回复 4# 明白 的帖子
设备数据库里确实没有89S52&&,有89S8252 , 89LS8252 , 它们能用吗?您提供的定义语句是C语言的吧?有用汇编的吗?如果指不到89S52 ,就用89C52加上定义可以解决问题吗?另外有没有往数据库里添加设备的办法?再次谢谢!!
单片机教授
用汇编定义TR2,TL2, TH2:
TR2&&BIT& &0C8H.2
TL2& &data 0CCH;
TH2& & data 0CDH;
MCU:AJMP MCU
UID440&帖子2210&精华&积分2245&阅读权限90&在线时间1019 小时&注册时间&最后登录&
单片机高中生
回复 6# 明白 的帖子
明白教授您好!又要麻烦您了,真不好意思。按照您说的将 TR2&&TH2&&TL2&&定义了,又提示 T2MOD 同样的错误,于是将其定义 T2MOD&&DATA&&0CEH&&(说实话为什么将它们定义在这些位或单元我还没清楚,定义在其他地方行吗?),程序是可以编译了,但未出现预期的效果(发出警报声),还是失败了。于是重新研究 89S52 的资料,发现其中有一句话:在89S52中,定时器0和定时器1的操作与89C51和89C52一样。也就是说不能选用C52作设备编译S52的程序,设备库里的其他设备我也做了好多试验,都不能编译S52的程序,尽管它们也有三个定时器。看来只有找到将S52加入设备库的办法才能解决问题,否则只能放弃了。有什么法子更新设备库呢?不管怎样,跟明白教授学到了很多东西,再说一声:谢谢!!
单片机教授
T2MOD的地址是0C9H
ET2,还没有打开
MCU:AJMP MCU
UID440&帖子2210&精华&积分2245&阅读权限90&在线时间1019 小时&注册时间&最后登录&
单片机高中生
回复 8# 明白 的帖子
T2MOD 的错误已经发现,TH2&&TR2&&TL2&&的定义都已明白,MOV&&IE ,#0A0H&&已经将 ET2&&打开了。即是再加一句 SETB&&ET2&&也不管用,我在网上下载了一个KEIL&&UVISION4, 安装以后其设备库里ATMEL仅有一类&&AT91,&&真是不可思议!下载了一个 UVISION3,安装以后倒是有 S52 ,&&也能编译,但是烧写后仍然没有出现需要的警报声,真晕了!
单片机教授
回复 9# wh8010jky 的帖子
下面红色是修改的,试试看吧
T2CON& & data 0C8H;
T2MOD& & data 0C9H;
RCAP2L& &data 0CAH;
RCAP2H&&data 0CBH;
TL2& && && & data 0CCH;
TH2& && && &data 0CDH;& &
TR2& &BIT& &T2CON.2
TF2& & BIT& &T2CON.7
&&SPK&&BIT&&P3.3
& &&&frq&&equ&&40h
& &&&org&&0000h
& & LJMP&&MAIN
& &&&org&&002bh& && && &&&;000bh
& & LJMP&&TIMER0
& &&&ORG&&0080h
& &&&mov&&sp ,#30h
& &&&;MOV&&T2MOD,#02h& &;TMOD,#01H
& && &MOV&&T2MOD,#00;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
& &&&MOV&&FRQ,#0
MOV RCAP2H,#00h& & ;;;;;;;;;;16位自动重载用到的重载值;;;;;;;;;;
MOV RCAP2L,#0ffh& &;;;;;;;;;;16位自动重载用到的重载值;;;;;;;;;;
& &&&MOV&&TH2,#00h& && && &;TH0,#00h
& &&&MOV&&TL2,#0ffh& && && & ;TL0,#0FFH
& & SETB&&TR2& && && && && && &;TR0
& &&&MOV&&IE,#0A0h& && && &&&;#082H
& &&&INC&&FRQ&&
& &LCALL&&DELAYMS
& & sjmp&&main_lp& &
CLR TF2& && && && & ;;;;;;;;;定时器2 溢出时置位,必须由软件清除。;;;;;;;;;;;;;
& &&&;MOV&&TH2,#0fdh& && & ;TH0,#0FdH& &;;;;;;;;;;16位自动重载,不用赋值
& &&&;MOV&&TL2,fqr& && && && &;TL0,frq&&;;;;;;;;;;16位自动重载,不用赋值
& &&&CPL&&SPK
& &&&RETI&&
& &&&MOV&&R7,#04
& &&&MOV&&R6,#185
& & DJNZ&&R6,DLY_LP2
& & DJNZ&&R7,DLY_LP1
希望对你有作用
MCU:AJMP MCU
UID440&帖子2210&精华&积分2245&阅读权限90&在线时间1019 小时&注册时间&最后登录&
单片机高中生
回复 10# 明白 的帖子
谢谢明白教授!!刚才我突然想到S52有三个定时器,与有两个定时器的单片机有什么不一样?仔细看看,真是不一样,定时器0和1不需要软件清0,而定时器2必须由软件清0 ,于是增加了两句:TF2&&BIT&&0C8H.7&&和 CLR&&TF2,&&一切都OK了,很高兴,于是想很快告诉明白教授,想不到进入论坛,就看到明白教授的帖子,真是激动不已!!真的为明白教授助人为乐的精神所折服!!希望多出现几个有这样精神的高手,我们初学者将会更爱单片学习,更爱这个网站,更爱这个论坛!& & 我现在唯一的问题是:如何把S52加入到设备库。因为我现在的程序里必须先定义那么多语句,我想弄明白选用S52后是否还需要定义。现在我用 S53 和 C52 都可以运行程序。
单片机教授
回复 11# wh8010jky 的帖子
楼主夸奖了,我也是老菜鸟,一起学习,共同进步。
以前没有用S52的第3个定时器,
但是STC第3个定时器,用过,并且好正常,
以上程序是从STC移植出来的,放心使用吧。
【选用S52后是否还需要定义??】,如果设备库没有
肯定要定义。
我用STC是用C语言编程,有头文件定义,无需再定义。
上面汇编语言是从C语言改过来的
MCU:AJMP MCU
UID440&帖子2210&精华&积分2245&阅读权限90&在线时间1019 小时&注册时间&最后登录&
单片机高中生
回复 12# 明白 的帖子
实在说我是个初学者,而且是自学者,完全靠书本和网上朋友的指点,所以真的非常感谢您和曾经帮助过的朋友!谢谢!!at91sam9261中断处理-单片机新闻
&&&&&|&&|&&&|&&|&&|&&|&&|&&|&&|&
作者: 发布时间: 来源: 
  一、AT91SAM9261先进中断控制器(AIC)介绍   ARM核结构采用了一个简单的双中断机制,处理器内核有两个中断接口IRQ(标准中断接口)和FIQ(快速中断接口),而AT91SAM9261片内的先进中断控制器
  一、AT91SAM9261先进中断控制器(AIC)介绍   ARM核结构采用了一个简单的双中断机制,处理器内核有两个中断接口IRQ(标准中断接口)和FIQ(快速中断接口),而AT91SAM9261片内的先进中断控制器(AIC)利用这两个接口将外设的中断请求有序的传递到内核。如下图所示:
  AT91SAM9261的先进中断控制器(AIC)是一个8优先级,可独立屏蔽中断的向量中断控制器,可处理32个中断源。它的设计思想是从本质上减少在处理内部和外部中断时的软件和实时系统开销。AIC驱动ARM内核的nIRQ和nFIQ,它的输入来自内部外设中断或产品引脚的外部中断。   AIC的8优先级控制器允许用户对每个中断源定义优先级。即使一个低优先级中断正在被处理,也允许高优先级的中断被服务。   内部中断源可被编程为电平有效或者边沿触发,外部中断源可被编程为上升沿或下降沿触发或者高电平或低电平有效。   快速强制特性可重定向任何内部或外部中断源为一个快速中断而不是一个普通中断。   AIC的详细方块图如下所示:
  二、AIC的向量中断机制   AIC 采用&向量中断&的中断跳转机制,这种机制与三星的S3C2410芯片的中断控制器有很大不同。2410在有中断触发之后,首先会进入异常向量表,然后跳转到IRQ或FIQ服务程序,这段代码负责解析具体是哪一个中断源产生了中断,然后才跳转到具体的处理函数去执行。而向量中断的中断跳转机制则不需要软件来识别中断源,也就是不需要IRQ或FIQ服务程序,而完全由硬件自动跳转到对应的中断地址,相当于硬件帮助我们完成了一些必要的处理,减小了中断响应延时。   也就是说,AIC对于各个中断源的管理是采用硬件和软件两个方面的分发处理来完成的。首先AIC为每一个中断源向量寄存器(AIC_SVR0~ AIC_SVR31),在配置使能相应外设时用户将设备的中断处理函数地址写入对应的中断源向量寄存器,而当中断请求发生时AIC将对应的源向量寄存器中的地址复制到中断向量寄存器(AIC_IVR)并向内核发出IRQ请求,以上都是硬件实现的中断分发过程;在软件层面也必须做相应的处理才能完成IRQ的分发处理,对于ARM内核来讲,IRQ只是一个中断向量,当IRQ中断请求时内核会跳到其在异常向量表中所处的位置去处理请求,ARM的启动代码必须在这个IRQ中断处理程序中分发处理才能分辨不同设备的中断请求,但有了上面的硬件的预处理过程,软件分发变得十分简单,一条语句就够了:即将AIC中断向量寄存器(AIC_IVR)里的值赋给PC就可以了。下面是AT91SAM9261的启动代码中定义的异常向量表:   Vectors LDR PC,Reset_Addr   LDR PC,Undef_Addr   LDR PC,SWI_Addr   LDR PC,PAbt_Addr   LDR PC,Dabt_Addr   ; Reserved vector is used as size information for 2-nd level   ; bootloader to use when copying program code to External SDRAM   IF :DEF:SIZE_INFO   DCD ||Image$$ER_ROM1$$RO$$Length||+/   ||Image$$RW_RAM1$$RW$$Length||   ELSE   NOP   ENDIF   LDR PC,[PC,#-0xF20] ; Vector From AIC_IVR   LDR PC,[PC,#-0xF20] ; Vector From AIC_FVR   可以看到:IRQ对应异常处理指令是LDR PC,[PC,#-0xF20],当执行这条指令时,由ARM流水线结构,此时的PC = 0x18 + 2*4 = 0x20,因此执行之后PC被赋予地址:0x20 & 0xF20 = 0xFFFFF100里的内容,即IRQ向量寄存器AIC_IVR的内容,程序跳转到相应的中断例程中。   
对比一下S3C2410的启动代码:   Vectors LDR PC, Reset_Addr   LDR PC, Undef_Addr   LDR PC, SWI_Addr   LDR PC, PAbt_Addr   LDR PC, DAbt_Addr   NOP ; Reserved Vector   LDR PC, IRQ_Addr   LDR PC, FIQ_Addr   Reset_Addr DCD Reset_Handler   Undef_Addr DCD Undef_Handler   SWI_Addr DCD SWI_Handler   PAbt_Addr DCD PAbt_Handler   DAbt_Addr DCD DAbt_Handler   DCD 0 ; Reserved Address   IRQ_Addr DCD IRQ_Handler   FIQ_Addr DCD FIQ_Handler   Undef_Handler B Undef_Handler   SWI_Handler B SWI_Handler   PAbt_Handler B PAbt_Handler   DAbt_Handler B DAbt_Handler   IF IntVT_SETUP && 0   IRQ_Handler B IRQ_Entry   ENDIF   FIQ_Handler B FIQ_Handler   在异常向量表中,IRQ对应的处理指令是:LDR PC, IRQ_Addr,最终PC会跳到IRQ_Entry去执行。IRQ_Entry里面做了相应处理,即找到中断源,跳转到中断向量表的合适位置去执行具体的中断处理程序(当然之前要定义中断向量入口表)。如下所示:   ;Interrupt Vector Table Address   HandleEINT0 EQU IntVTAddress   HandleEINT1 EQU IntVTAddress +4   HandleEINT2 EQU IntVTAddress +4*2   HandleEINT3 EQU IntVTAddress +4*3   HandleEINT4_7 EQU IntVTAddress +4*4   HandleEINT8_23 EQU IntVTAddress +4*5   HandleReserved EQU IntVTAddress +4*6   HandleBATFLT EQU IntVTAddress +4*7   HandleTICK EQU IntVTAddress +4*8
【】【】【
※ 相关信息
无相关信息
※ 其他信息
访问数:&|&
数据加载中..

我要回帖

更多关于 单片机中断设置 的文章

 

随机推荐