分类:
2009-05-20 14:20:35
S3C2410有5个16bit定时器。定时器0-3有脉宽调制功能(Pulse Width
Modulation,PWM),定时器4是内部定时器,没有输出引脚。定时器0有Dead-zone发生器,可以保证一对反向信号不会同时改变状态,常
用于大电流设备中。
定时器0-1共用一个8bit prescaler,定时器2-4共用另外一个。每个定时器有一个时钟分频器,可以选择5种分频方法。每个定时器从各自的时钟分频器获取时钟信号。prescaler是可编程的,并依据TCFG0-1寄存器数值对PCLK进行分频。
当定时器被使能之后,定时器计数缓冲寄存器(TCNTBn)中初始的数值就被加载到递减计数器中。定时器比较缓冲寄存器(TCMPBn)中的初始数值被加
载到比较寄存器中,以备与递减计数器数值进行比较。这种双缓冲特点可以让定时器在频率和占空比变化时输出的信号更加稳定。
每个定时器都有一个各自时钟驱动的16bit递减计数器,当计数器数值为0时,产生一个定时中断,同时TCNTBn中的数值被再次载入递减计数器中再次开
始计数。只有关闭定时器才不会重载。TCMPBn的数值用于PWM,当递减计数器的数值和比较寄存器数值一样时,定时器改变输出电平,因此,比较寄存器决
定了PWM输出的开启和关闭。
S3C2410的PWM定时器采用双buffer机制,可以不停止当前定时器的情况下设置下一轮定时操作。定时器值可以写到TCNTBn,而当前定时的计数值可以从TCNTOn获得,即,从TCNTBn获得的不是当前数值而是下一次计数的初始值。
自动加载功能被打开后,当TCNTn数值递减到0时,芯片自动将TCNTBn的数值拷贝到TCNTn,从而开始下一次循环,若TCNTBn数值为0,则不会有递减操作,定时器停止。
第一次启动定时器的过程如下:
若定时器在计数过程中被停止,则TCNTn保持计数值,若需要设置新的数值需要人工加载。定时器的工作过程可以用下图表示。
同时,由上面的工作过程可以看出,通过ISR或别的方法写入不同的TCMPBn的数值,就可以调节输出信号的占空比,实现脉宽调制(PWM)。
Dead Zone主要用在控制外设的使能,其功能主要是在关闭一个设备和开启另一个设备之间,插入一个时间间隙,以防止两个设备同时改变状态。(有利于减小系统干扰?)
定时器可以通过TCFG1寄存器的DMA模式位配置为DMA请求源信号(nDMA_REQ)发生器,当定时器被这样配置后,它将nDMA_REQ信号一直
置低,直到接收到ACK信号。当定时器收到ACK信号,它将nDMA_REQ信号置高(无效)。当定时器被设置为DMA请求模式时,不会产生中断请求。只
能有一个定时器被配置为DMA请求源。