预览加载中,请您耐心等待几秒...
1/10
2/10
3/10
4/10
5/10
6/10
7/10
8/10
9/10
10/10
亲,该文档总共28页,到这已经超出免费预览范围,如果喜欢就直接下载吧~
如果您无法下载资料,请参考说明:
1、部分资料下载需要金币,请确保您的账户上有足够的金币
2、已购买过的文档,再次下载不重复扣费
3、资料包下载后请先用软件解压,在使用对应软件打开
定时器中断实验
目的:
了解时钟系统
熟悉ARM定时器中断
会使用定时器中断产生PWM波形每当程序需要延时时,我们是利用循环语句来实现。
这种方法的延时简单,但不是很精确,就是说不能得到确切的一段时间的延时。
因此当需要精确延时时,就不能采用这种方法了。一般是利用定时器来实现。MCU的主时钟源主要是外部晶振或外部时钟,而用的最多的是外部晶振系统内所使用的时钟都是外部时钟源经过一定的处理得到的。
由于外部时钟源的频率一般不能满足系统所需要的高频条件,所以往往需要PLL(锁相环)进行倍频处理。在s3c2440中,有2个不同的PLL,一个是MPLL,另一个是UPLL。
UPLL是给USB提供48MHz。
MPLL处理后能够得到三个不同的系统时钟:
FCLK、HCLK和PCLK
FCLK是主频时钟,用于ARM920T内核;
HCLK用于AHB总线设备,如ARM920T,内存控制,中断控制,LCD控制,DMA以及USB主模块;PCLK用于APB总线设备,
如外围设备的看门狗,IIS,I2C,PWM,MMC接口,ADC,UART,GPIO,RTC以及SPI。三个系统时钟(FCLK、HCLK和PCLK)是有一定的比例关系
这种关系是通过寄存器CLKDIVN中的HDIVN位和PDIVN位来控制的
因此我们只要知道了FCLK,再通过这两位的控制,就能确定HCLK和PCLK而FCLK是如何得到的呢?
它是通过输入时钟(即外部时钟源)的频率,经过一个计算公式得到的,这个计算公式(查阅数据手册)还需要三个参数(MDIV、PDIV、SDIV),而这三个参数是经过寄存器MPLLCON配置得到的最后,我们用最清晰的线路来绘制一下时钟的产生过程:
外部时钟源→通过寄存器MPLLCON得到FCLK→再通过寄存器CLKDIVN得到HCLK和PCLK。
在本开发板上,外部晶振为12MHz,进过MPLL倍频以后得到400MHz的FCLK,
而FCLK、HCLK、PCLK之间的比例关系为1:4:8,
因此HCLK为100MHz,PCLK为50MHz定时器中断定时器输出时钟频率=
PCLK÷(prescaler+1)÷divider
其中prescaler值由TCFG0决定,divider值由TCFG1决定,而prescaler只能取0~255之间的整数,divider只能取2、4、8和16。比如已知PCLK为50MHz,而我们想得到某一定时器的输出时钟频率为25kHz,则依据公式可以使
PCLK÷(prescaler+1)÷divider
prescaler等于249,divider等于8。当TCNTB0减到0的时候,就会产生TIMER0中断,也就是定时器0中断,
当然在程序前要先把中断相关的屏弊打开,
和定义TIMER0中断服务程序.
当设置了频率和计数值之后,还要在TCON寄存器中来更新你设置的TCNTB0值,并可以启动定时器。TCON定时器控制寄存器,是用来设置自动重载,更新TCNTB0,和启动,停止定时器用的//中断服务程序
void__irqTimer4_ISR(void)
{
rSRCPND=rSRCPND|(0x1<<14);
rINTPND=rINTPND|(0x1<<14);
…….
…….
}练习:
用TIMER4中断来控制,蜂鸣器的响声,每0.5秒响一次。PWM(PulseWidthModulation)
——脉宽调制,
它是利用微控制器的数字输出来对模拟电路进行控制的一种非常有效的技术,广泛应用于测量、通信、功率控制与变换等许多领域。s3c2440芯片中一共有5个16位的定时器,其中有4个定时器(定时器0~定时器3)具有脉宽调制功能,
因此用s3c2440可以很容易地实现PWM功能。
PWM是通过引脚TOUT0~TOUT3输出的,而这4个引脚是与GPB0~GPB3复用的,
因此要实现PWM功能首先要把相应的引脚配置成TOUT输出。再设置定时器的输出时钟频率,它是以PCLK为基准,再除以用寄存器TCFG0配置的prescaler参数,和用寄存器TCFG1配置的divider参数。而寄存器TCMPBn作为比较寄存器与计数值进行比较,当TCNTn=TCMPBn时,TOUTn输出的电平会翻转,而当TCNTn减为零时,电平会又翻转过来,就这样周而复始。从上面的图来看,
谁来确定周期?
谁来确实占空比?最后就是对PWM的控制,它是通过寄存器TCON来实现的
启动/终止位,用于启动和终止定时器
手动更新位,用于手动更新TCNTBn和TCMPBn
输出反转位,用于改变输出的电平方向,使原先是高电平输出的变为低电平,而低电平的变为高电平
自动重载位,用于TCNTn减为零后重载TCNTBn里的值,当不想计数了,可以