12417|20

152

帖子

0

TA的资源

裸片初长成(初级)

楼主
 

【EEWORLD】救火车和你一起学ARM系列活动之五 [复制链接]

----定时器中断

在实验三和实验四中,我们研究了ARM的PLL倍频和中断体系的基本知识。本次实验,我们将深入研究定时器中断。把实验三、实验四的东西贯穿起来,与定时器0一起,组成一个完整的实验。学习中要注意的几个问问:1、定时器时钟源的倍频分频。2、理解匹配及如何产生中断。3、产生中断后,如何跳转到中断函数。4、完成一次中断后,如何进入下一次定时。
我们开始。
定时器中断简介
ARM的定时器比51单片机的功能要强大很多。我们来对比一下。

51定时器0
LPC2103定时器0
时钟源
机器周期(晶振的12分频)
VPB分频器输出(活动三中有介绍)
位数
最大16位定时器
32位定时器
预分频计数器

32位预分频
产生中断的方式
TH0、TL0进位溢出产生中断请求
匹配寄存器值与定时器计数器值相等时产生中断请求
跳转到中断函数
中断后跳到固定地址
可以选择向量中断通道或非向量中断
计数器重新装入
计数器不停的增一
需要软件重新赋值(方式2自动重装8位)
可以设置,清零TC或不清零TC。

相对于晶振频率,定时器计数器TC的增一频率是经过 [PLL倍频]-[VPB分频]-[预分频]

请看上图,显示了外部晶振、PLL倍频、VPB分频(pclk)和定时器预分频器的关系。

PLL倍频设置和VPB分频设置,我们在活动三中,已经介绍。预分频寄存器将在下文介绍。

  主要寄存器介绍
通过对比,我们可以看到,LPC2103定时器与51不同的特点。也是我们需要了解的重点。
1、预分频寄存器(T0PR、T1PR):每经过PR+1个pclk周期加1。例如:T0PR = 10 表示pclk传输过来的11个周期,分频寄存器就会输出一个周期。有了分频寄存器,我们就可以把定时器的时间定得相当的长。
2、预分频计数器寄存器(T0PC、T1PC):CPU内部使用,我们不必管它。
3、定时器控制寄存器(T0TCR、T1TCR):
   第0位:使能位。 1:使能定时器  0:禁止定时器。
   第1位:定时器复位  1:复位(定时器回零) 0:无用
   其他位无用。
4、匹配寄存器(MR0-MR3):它的值与TC相比较,相同时产生中断或其他动作。
5、匹配控制寄存器(T0MCR、T1MCR):控制匹配后,产生的动作。包括中断、复位、停止。具体功能,请参数据手册或书籍。
6、中断请求寄存器(T0IR,T1IR)
定时器产生匹配或者捕获动作,会自动对相应的请求位置1(四个匹配、四个捕获共八种中断请求)。我们实验用的匹配寄存器0,对应些寄存器的第0位。也可以读取此寄存器来区分中断来自于哪个条件。处理完中断请求以后,需要软件对此寄存器置0。否则中断请求仍然存在,程序马上会重新进入中断。
7、程序状态寄存器(CPSR):它的第5位是IRQ中断禁止位。芯片复位后,这个位是1(禁止IRQ中断)。我们需要把它置成0,来允许IRQ中断。
__enable_interrupt(); //在IAR编译器中,使用这条语句,来对CPSR[bit5]置0
在MDK编译器中,此位已经在startup.s中置0.

上图是IAR仿真状态的 菜单VIEW-Register选项 CPSR的“I”那个位必须是0,才能响应IRQ中断。我在这个地方吃了不少苦头。


我们准备做一个1秒钟的中断程序,下面给合程序,一边计算,一边讲解。
程序
//中断函数写法
unsigned char led_tt=0;
__irq __arm void T0_IRQ(void)
{  
T0IR=0;
if (led_tt) LED_ON;
else  LED_OFF;
led_tt = ~led_tt;
VICVectAddr = 0;     //中断程序结束时对向量地址寄存器执行 写 “0”操作
}

//在main函数中设置IRQ中断的例子
void Init_T0()
{
VICIntSelect = 0x00000000;  //中断选择寄存器第9位是0就行。
VICVectCntl9 = 0x24;  //第5位置1:向量使能,[4:0]中断源序号
VICVectAddr9 = (unsigned long)&T0_IRQ; //中断函数地址  
VICIntEnable = 0x00000010; //中断使能寄存器 第4位置1.
__enable_interrupt();
// 11.0592M×6(PLL倍频)/ 4(VPB分频)= 16.5888MHz (Fpclk)
T0PR = 165887;  //设置预分频寄存器   经分频后,变成100Hz,每10ms T0TC增一
T0MR0 = 99;     //设置匹配值
T0MCR = 0x03;  //设置匹配后的动作。匹配后产生中断(第0位置1),并且复位T0TC(第1位置1)
T0TCR = 0x01;   //启动定时器
}
修改启动文件,lpc2xxx_cstartup.s 中的部分内容,使中断程序能够跳转到我们的函数 void T0_IRQ(void)中。
__vector_0x14
        DC32  0                         ;; RESERVED

;ldr   pc,[pc,#+24]              ;; IRQ  原来的语句

ldr   pc, [pc, #-0x0FF0]         ;  改成这条语句
        ldr   pc,[pc,#+24]              ;; FIQ
以下是我们做的程序代码,和中断修改文件,朋友们可以根据这2个文件建立项目,进行实验。
IAR_arm.rar (3.17 KB, 下载次数: 156)

注意:
1、我们这里使用的是Release 模式.
2、IAR编译器32K限制版调试中断程序有问题,请尝试其他版本,或到IAR网址下载30天限制版。


[实验效果图]发光管,交替亮一秒再灭一秒。


这是经过计算的精确的1秒钟。理论上,是不差的,实际误差来自晶振和中断的延迟。
经过活动三、四、五,我们已经把LPC2103系统最难的部分攻下来了。如果你把这些部分理解透了,可以说,其他的部分肯定难不住你。

下一次我们该补补基础课了,做[IO引脚配置和输入输出实验],请大家准备一个按键。我们做输入实验中要用到。

[ 本帖最后由 救火车 于 2009-4-16 08:39 编辑 ]
此帖出自单片机论坛

最新回复

强大!!!  详情 回复 发表于 2011-7-15 19:05
点赞 关注
个人签名我是有火救火,无火灌水的救火车
救火车单片机工作室
http://www.qm999.cn
 

回复
举报

33

帖子

0

TA的资源

一粒金砂(高级)

沙发
 

Re: [讨论] 【EEWORLD】救火车和你一起学ARM系列活动之五

来了!支持救火车!
此帖出自单片机论坛
 
 

回复

73

帖子

0

TA的资源

纯净的硅(中级)

板凳
 

Re: [讨论] 【EEWORLD】救火车和你一起学ARM系列活动之五

来了!支持救火车!写的很好!
此帖出自单片机论坛
 
 
 

回复

2498

帖子

0

TA的资源

至上芯片

4
 

Re: [讨论] 【EEWORLD】救火车和你一起学ARM系列活动之五

好啊,我是新手,刚刚来取经来了!
此帖出自单片机论坛
 
 
 

回复

20

帖子

0

TA的资源

一粒金砂(高级)

5
 
好,学习!
此帖出自单片机论坛
 
 
 

回复

73

帖子

0

TA的资源

纯净的硅(中级)

6
 
好啊,我是新手,刚刚来取经来了!
此帖出自单片机论坛
 
 
 

回复

57

帖子

0

TA的资源

纯净的硅(高级)

7
 
回帖是一种美德,回好贴是美德和责任!
此帖出自单片机论坛
 
 
 

回复

2

帖子

0

TA的资源

一粒金砂(中级)

8
 
回帖是一种美德,回好贴是美德和责任!
此帖出自单片机论坛
 
 
 

回复

68

帖子

0

TA的资源

五彩晶圆(中级)

9
 
好,
此帖出自单片机论坛
 
 
 

回复

4

帖子

0

TA的资源

一粒金砂(初级)

10
 
好啊 顶一下
此帖出自单片机论坛
 
 
 

回复

4

帖子

0

TA的资源

一粒金砂(初级)

11
 
好啊 顶一下
此帖出自单片机论坛
 
 
 

回复

7

帖子

0

TA的资源

一粒金砂(中级)

12
 

支持

支持,虽然我看了之后收获不大,:'(
此帖出自单片机论坛
 
 
 

回复

36

帖子

0

TA的资源

纯净的硅(初级)

13
 
Thanks for your share!!
此帖出自单片机论坛
 
 
 

回复

36

帖子

0

TA的资源

纯净的硅(初级)

14
 
VICVectAddr0
此帖出自单片机论坛
 
 
 

回复

20

帖子

0

TA的资源

一粒金砂(高级)

15
 
非常感谢!
此帖出自单片机论坛
 
 
 

回复

3

帖子

0

TA的资源

一粒金砂(中级)

16
 
确实获益匪浅啊~~
此帖出自单片机论坛
 
 
 

回复

1

帖子

0

TA的资源

一粒金砂(初级)

17
 
321321321
此帖出自单片机论坛
 
 
 

回复

1

帖子

0

TA的资源

一粒金砂(初级)

18
 
:$
此帖出自单片机论坛
 
 
 

回复

2

帖子

0

TA的资源

一粒金砂(初级)

19
 

支持救火车.

此帖出自单片机论坛
 
 
 

回复

7219

帖子

192

TA的资源

五彩晶圆(高级)

20
 
新手 来取经来了呢
此帖出自单片机论坛
 
 
 

回复
您需要登录后才可以回帖 登录 | 注册

随便看看
查找数据手册?

EEWorld Datasheet 技术支持

相关文章 更多>>
关闭
站长推荐上一条 1/9 下一条

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

站点相关: 国产芯 安防电子 汽车电子 手机便携 工业控制 家用电子 医疗电子 测试测量 网络通信 物联网

北京市海淀区中关村大街18号B座15层1530室 电话:(010)82350740 邮编:100190

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