AT91SAM9260定时器计数器模块(翻译)

来源:互联网 发布:linux入门教程 pdf 编辑:程序博客网 时间:2024/04/30 18:52

发现自己看了英文资料后,很容易见忘,因此翻译了AT91SAM9260芯片的定时计数器模块一节的内容,同时在翻译之时,也加上了自己的理解。作为笔记备忘!

 

34.1:描述

AT91SAM9260芯片有两个定时计数器模块:TCB0(TC0、TC1、TC2)和TCB1(TC3、TC4、TC5),偏移地址分别为0xFFFA 0000和0xFFFD C000,每个定时计数器模块包含3个一样的16bit定时计数器通道,每个通道能独立编程,可以出色地完成诸如频率测量、事件计数、间隔测量、脉冲产生、延时和PWM信号等等功能。

 

每个定时计数器通道有3个外部时钟、5个内部时钟(注:这5个内部时钟是主时钟的分频)和2个用户可编程的多用途输入输出信号作为时钟源,同时每个通道能驱动产生一个中断信号。

 

AT91SAM9260定时器计数器模块含有2个对3个定时计数器通道起作用的寄存器。

 

通道模块控制寄存器允许使用同样的指令同时启动3个定时计数器。

 

通道模块模式寄存器用来选择外部时钟信号输入(注:每个通道都都有一个连接外部时钟信号输入的选择开关,通道1对应XC0;通道2对应XC1;通道3对应XC2)。

 

34.5.2: 16bit计数器

每个通道有一个16bit计数器,其值在所配置的时钟源的上升沿向上计数,当计数值达到0xffff并越到0x0000时,此时计数器发生溢出, 寄存器TC_SR (Status Register)的位COVFS被置1。通过读取计数器值寄存器TC_CV可实时读取计数器的当前值。计数器在一个触发条件下能被复位,此时其值为0x0000。

 

34.5.3:时钟选择

定时器计数器模块的外部时钟输入要么被连接到外部时钟信号输入TCLK0, TCLK1 or TCLK2,要么被连接到内部IO信号TIOA0, TIOA1 or TIOA2。

 

每个通道可以为它的计数器独立选择为内部时钟源(TIMER_CLOCK1, TIMER_CLOCK2, TIMER_CLOCK3, TIMER_CLOCK4, TIMER_CLOCK5)还是外部时钟源(XC0, XC1 or XC2),通过配置TC通道模式寄存器 TC_CMRx(x=0,1,2)的位TCCLKS[2..0]来完成是选择内部时钟源还是选择外部时钟源。(注:如果选择外部时钟,还需设置模块模式寄存器选择哪钟外部时钟源作为输入)

 

被选择的时钟源可以设置为反向输入。

 

 34.5.4:时钟控制

每个通道的时钟可以以两钟方式控制计数器的时钟:使能/禁止;启动/停止。

 

 34.5.5:定时计数器操作模式

每个通道能够独立的工作在两种模式:

1)捕获模式,提供信号测量功能,此时,TIOA和TIOB引脚配置为输入;

2)波形模式,用来产生波形信号功能,此时,TIOA总是配置为输出,如果没有选择为外部触发,TIOB引脚也配置为输出。

通过编程 TC通道模式寄存器 TC_CMRx(x=0,1,2)的位WAVE来选择定时计数器的工作模式。

 

34.5.6:触发

一个触发会复位计数器并且启动计数器的时钟。

对于定时计数器模块的两种工作模式,有三种可使用的触发模式且操作方式相同,同时,提供了一个外部触发模式,这种触发模式在两种工作模式下稍微有些不同。

 

34.5.7:捕获操作模式

把通道模式寄存器TC_CMR (Channel Mode Register)的位WAVE置为0,则定时计数器模块进入捕获操作工作模式。

在捕获操作模式下,TC通道能够完成TIOA和TIOB引脚输入信号的脉冲计时、频率、周期、占空比和相位等测量的功能。

 

34.5.8:捕获寄存器A和寄存器B

捕获操作模式下,寄存器A(RA)和寄存器B(RB)用作捕获寄存器(注:此时RA和RB为只读寄存器),这就是说,当在TIOA引脚上发生了一个可编程的事件后,计数寄存器TC_CV的值能被导入到RA或RB寄存器中。

 

34.5.10:波形操作模式

如前所述,这种工作模式用来产生波形信号,包括PWM信号等等。

在波形操作模式下,通道模式寄存器TC_CMR (Channel Mode Register)的位WAVE必须置1;此模式下,TIOA总是被配置为输出,而TIOB是输入还是输出,要看TIOB是否被配置为了外部事件信号,如果道模式寄存器TC_CMR 的位EEVT[1..0]配置为00,则TIOB被设置为外部事件信号输入引脚,其它值时,TIOB被设置为输出,产生波形信号。

 

34.5.11:波形选择

定时计数器值寄存器TC_CV值的递增行为由通道模式寄存器TC_CMR 的位WAVSEL[1..0]的设置决定。但不管如何设置,RA(寄存器A)、RB(寄存器B)、RC(寄存器C)都能用作比较寄存器。RA寄存器用来控制TIOA引脚的输出,RB寄存器用来控制TIOB引脚的输出(如果配置正确的话),RC寄存器用来控制TIOA和/或TIOB引脚的输出。

 

34.5.11.1 WAVSEL = 00时:

 

 

 

 

 

原创粉丝点击