微波EDA网,见证研发工程师的成长!
首页 > 硬件设计 > 嵌入式设计 > 凌阳61单片机之定时器

凌阳61单片机之定时器

时间:11-23 来源:互联网 点击:
时基信号发生器:

时间基准信号,简称时基信号,来自于32768Hz实时时钟,通过频率选择组合而成。时基信号发生器的选频逻辑TMB1,为TimerA的时钟源B提供各种频率选择信号,并为中断系统提供中断源(IRQ6)信号。此外,时基信号发生器还可以通过分频产生2Hz、4Hz、1024Hz、2048Hz以及4096Hz的时基信号,为中断系统提供各种实时中断源(IRQ4和IRQ5)信号。

时基信号发生器通过对P_Timebase_Setup(写)($700EH)单元的编程写入来进行选频操作。

定时器/计数器:

SPCE061A提供了两个16位的定时/计数器:TimerA和TimerB。TimerA为通用计数器;TimerB为多功能计数器。TimerA的时钟源由时钟源A和时钟源B进行“与”操作而形成;TimerB的时钟源仅为时钟源A。

定时器发生溢出后会产生一个溢出信号(TAOUT/TBOUT)。一方面,它会作为定时器中断信号传输给CPU中断系统;另一方面,它又会作为4位计数器计数的时钟源信号,输出一个具有4位可调的脉宽调制占空比输出信号APWMO或BPWMO(分别从IOB8 和IOB9输出),可用来控制马达或其它一些设备的速度。此外,定时器溢出信号还可以用于触发ADC输入的自动转换过程和DAC输出的数据锁存。

向定时器的P_TimerA_Data(读/写)($700AH)单元或P_TimerB_Data(读/写)($700CH)单元写入一个计数值N后,选择一个合适的时钟源,定时器/计数器将在所选的时钟频率下开始以递增方式计数N,N+1,N+2,…0xFFFE,0xFFFF。当计数达到0xFFFF后,定时器/计数器溢出,产生中断请求信号,被CPU响应后送入中断控制器进行处理。同时,N值将被重新载入定时器/计数器并重新开始计数。

时钟源A和时钟源C是高频时钟源(从图中可以看出,时钟源A和时钟源C的结构是相同的),来自带锁相环的晶体振荡器输出Fosc;时钟源B的频率来自32768Hz实时时钟系统,也就是说,时钟源B可以作为精确的计时器。例如,2Hz定时器可以作为实时时钟的时钟源。

时钟源A和时钟源B的组合,为TimerA提供了多种计数速度。若以ClkA作为门控信号,‘1’表示允许时钟源B信号通过,而‘0’则表示禁止时钟源B信号通过。例如,如果时钟源A为“1”,TimerA时钟频率将取决于时钟源B;如果时钟源A为“0”,将停止TimerA的计数。EXT1和EXT2为外部时钟源。

定时/计数器控制的寄存器:

这是最重要的,单片机的操作说白了就是对寄存器的操作,不管是8位、16位还是32位。

P_Timebase_Setup(写)($700EH)

时基信号发生器通过对P_Timebase_Setup(写)($700EH)单元的编程写入来进行选频操作。

P_Timebase_Clear(写)($700FH)

TimerA的数据单元,用于向16位预置寄存器写入数据(预置计数初值)或从其中读取数据。在写入数值以后,计数器便会在所选择的频率下进行加一计数,直至计数到0xFFFF产生溢出。溢出后P_TimerA_Data中的值将会被重置,再以置入的值继续加一计数。

P_TimerA_Data(读/写)($700AH)

TimerA的数据单元,用于向16位预置寄存器写入数据(预置计数初值)或从其中读取数据。在写入数值以后,计数器便会在所选择的频率下进行加一计数,直至计数到0xFFFF产生溢出。溢出后P_TimerA_Data中的值将会被重置,再以置入的值继续加一计数。

P_TimerA_Ctrl(写)($700BH)

TimerA的控制单元如表5.3所示。用户可以通过设置该单元的第0~5位来选择TimerA的时钟源(时钟源A、B)。设置该单元的第6~9位(如表2.13所示),TimerA将输出不同频率的脉宽调制信号,即对脉宽占空比输出APWMO进行控制。

P_TimerB_Data(读/写)($700CH)

TimerB的数据单元,用于向16位预置寄存器写入数据(预置计数初值)或从其中读取数据。写入数据后,计数器就会以设定的数值往上累加直至溢出。计数初值的计算方法和TimerA相同。

P_TimerB_Ctrl(写)($700DH)

TimerB的控制单元(如表5.7所示)。用户可以通过设置该单元的第0~2位来选择TimerB的时钟源。设置第6~9位,TimerB将输出不同频率的脉宽调制信号,即对脉宽占空比输出BPWMO进行控制。

定时/计数器设置的C函数:

SPCE061.lib中提供了相应的API函数如下所示:

函数原型:

void Set_TimerA_Data(unsigned int);

void Set_TimerB_Data(unsigned int);

功能说明 预置计数器初值

用法

Set_TimerA_Data(TimerA_Data);

Set_TimerB_Data(TimerB_Data);

参数

TimerA_Data = 0xFFFF – (Source A & Source B Frequency) / Desired Frequency

TimerB_Data = 0xFFFF – (Source C Frequency) / Desired Frequency

函数原型

unsigned int Get_TimerA_Data(void);

unsigned int Get_TimerB_Data

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top