时基信号发生器:
时刻基准信号,简称时基信号,来自于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(void);
功用阐明 读计数器的值
用法
TimerA_Data = Get_TimerA_Data();
TimerB_Data = Get_TimerB_Data();
函数原型
void Set_TimerA_Ctrl(unsigned int);
void Set_TimerB_Ctrl(unsigned int);
功用阐明 挑选时钟源频率和占空比
用法
Set_TimerA_Ctrl(TimerA_Ctrl_Data);
Set_TimerB_Ctrl(TimerB_Ctrl_Data);
参数
TimerA_Ctrl_Data = Source A + Source B Frequency + Duty Cycle
TimerB_Ctrl_Data = Source C Frequency + Duty Cycle