您好,欢迎访问三七文档
定时器中断实验目的:了解时钟系统熟悉ARM定时器中断会使用定时器中断产生PWM波形每当程序需要延时时,我们是利用循环语句来实现。这种方法的延时简单,但不是很精确,就是说不能得到确切的一段时间的延时。因此当需要精确延时时,就不能采用这种方法了。一般是利用定时器来实现。MCU的主时钟源主要是外部晶振或外部时钟,而用的最多的是外部晶振系统内所使用的时钟都是外部时钟源经过一定的处理得到的。由于外部时钟源的频率一般不能满足系统所需要的高频条件,所以往往需要PLL(锁相环)进行倍频处理。在s3c2440中,有2个不同的PLL,一个是MPLL,另一个是UPLL。UPLL是给USB提供48MHz。MPLL处理后能够得到三个不同的系统时钟:FCLK、HCLK和PCLKFCLK是主频时钟,用于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)÷dividerprescaler等于249,divider等于8。25kHz这个频率用来给计数器TCNTB0用。假如:我们设置TCNTB0=1000,TCNTB0从1000减到0需要(1000/25000)秒如果我们要定1秒钟的时间,怎么设置TCNTB0?当TCNTB0减到0的时候,就会产生TIMER0中断,也就是定时器0中断,当然在程序前要先把中断相关的屏弊打开,和定义TIMER0中断服务程序.当设置了频率和计数值之后,还要在TCON寄存器中来更新你设置的TCNTB0值,并可以启动定时器。TCON定时器控制寄存器,是用来设置自动重载,更新TCNTB0,和启动,停止定时器用的//中断服务程序void__irqTimer4_ISR(void){rSRCPND=rSRCPND|(0x114);rINTPND=rINTPND|(0x114);…….…….}注意:中断服务程序要以__irq开头,一般在中断服务程序中,清除本中断标志练习:用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参数。然后设置脉冲的具体宽度,它的基本原理是通过寄存器TCNTBn来对寄存器TCNTn(内部寄存器)进行配置计数,TCNTn是递减的,如果减到零,则它又会重新装载TCNTBn里的数,重新开始计数而寄存器TCMPBn作为比较寄存器与计数值进行比较,当TCNTn=TCMPBn时,TOUTn输出的电平会翻转,而当TCNTn减为零时,电平会又翻转过来,就这样周而复始。因此这一步的关键是设置寄存器TCNTBn和TCMPBn,前者可以确定一个计数周期的时间长度,而后者可以确定方波的占空比。从上面的图来看,谁来确定周期?谁来确实占空比?最后就是对PWM的控制,它是通过寄存器TCON来实现的启动/终止位,用于启动和终止定时器手动更新位,用于手动更新TCNTBn和TCMPBn输出反转位,用于改变输出的电平方向,使原先是高电平输出的变为低电平,而低电平的变为高电平自动重载位,用于TCNTn减为零后重载TCNTBn里的值,当不想计数了,可以使自动重载无效练习:利用PWM驱动开发板的资源,用它来驱动蜂鸣器,并通过改变脉宽来改变蜂鸣器发声的频率
本文标题:定时器中断实验
链接地址:https://www.777doc.com/doc-3257515 .html