TC包含三个相同的16位定时器/计数器通道,两种模式(捕获模式和波形模式)
功能:频率测量、事件计数、间隔测量、脉冲产生、延时时间及脉宽调制
各通道包含:三个外部时钟输入,五个内部时钟输入,两个多功能输入/输出信号,可配置产生中断
内部时钟源:TIMER_CLOCK1(MCK/2)、TIMER_CLOCK2(MCK/8)、TIMER_CLOCK3(MCK/32)、TIMER_CLOCK4(MCK/128)、TIMER_CLOCK5(MCK/1024)
外部时钟信号:XC0、XC1、XC2
四种触发类型:SYNC信号、软件触发器、RC比较寄存器和外部触发
定时的周期 T = (1/时钟源)*TC_RC 例如这里MCK=18.432M T =(1024/MCK)* 18432 = 1S 那么一秒钟中断一次
TC_BCR TC块控制寄存器
[0]SYNC:同步命令 1-每个通道同事产生软件触发
TC_BMR TC块模式寄存器
[0-1]TX0XC0S:外部时钟信号0选择 0-TCLK0 1-无 2-TIOA1 3-TIOA2
[2-3]TX1XC1S:外部时钟信号1选择 0-TCLK1 1-无 2-TIOA0 3-TIOA2
[4-5]TX2XC2S:外部时钟信号2选择 0-TCLK2 1-无 2-TIOA0 3-TIOA1
TC_CCR TC通道控制寄存器
[0]CLKEN:计数器时钟使能命令
[1]CLKDIS:计数器时钟禁用命令
[2]SWTRG:软件触发命令 1-软触发 计数器复位 时钟启动
TC_CMR TC通道模式寄存器(捕获模式)
[0-2]TCCLKS:时钟选择 0-TIMER_CLOCK1 ... 4-TIMER_CLOCK5 5-XC0 6-XC1 7-XC2
[3]CLKI:时钟反转 0-上升沿计数器增加 1-下降沿
[4-5]BURST:脉冲信号选择
[6]LDBSTOP:RB载入时,计数器时钟停止
[7]LDBDIS:RB载入时,计数器时钟禁用
[8-9]ETRGEDG:外部触发边沿选择 0-无 1-上升沿 2-下降沿
[10]ABETRG:TIOA或TIOB外部触发选择 0-TIOB用作外部触发器 1-TIOA
[14]CPCTRG:RC比较触发使能 1-RC比较复位计数器并启动计数器时钟
[15]WAVE 0-捕获模式使能 1-禁用(波形模式使能)
[16-17]LDRA:RA载入选择 1-TIOA上升沿 2-下降沿 3-任意
[18-19]LDRB:RB载入选择
TC_CMR TC通道模式寄存器(波形模式)
[0-2]TCCLKS:时钟选择 0-TIMER_CLOCK1 ... 4-TIMER_CLOCK5 5-XC0 6-XC1 7-XC2
[3]CLKI:时钟反转 0-上升沿计数器增加 1-下降沿
[4-5]BURST:脉冲信号选择
[6]CPCSTOP:RC比较时,计数器时钟停止
[7]CPCDIS:RC比较时,计数器时钟禁用
[8-9]EEVTEDG:外部事件边沿选择 0-无 1-上升沿 2-下降沿 3-任意
[10-11]EEVT:外部事件选择 0-TIOB 1-XC0 2-XC1 3-XC2
[12]ENETRG:外部事件触发使能 1-复位计数器并启动计数器时钟
[13-14]WAVSEL:波形选择
[15]WAVE 1-波形模式使能
[16-17]ACPA:TIOA上RA比较效果 1-置位 2-清零 3-切换
[18-19]ACPC:TIOC上RC比较效果
[20-21]AEEVT:TIOA上外部事件效果
[22-23]ASWTRG:TIOA上软件触发效果
[24-25]BCPB:TIOB上RB比较效果
[26-27]BCPC:TIOB上RC比较效果
[28-29]BEEVT:TIOB上外部事件效果
[30-31]BSWTRG:TIOB上软件触发效果
TC_CV TC计数器值寄存器
[0-15]CV:实时计数器值
TC_RA TC寄存器A
[0-15]RA:实时寄存器A值
TC_RB TC寄存器B
[0-15]RB: 实时寄存器B值
TC_RC TC寄存器C
[0-15]RC: 实时寄存器C值
TC_SR TC状态寄存器
[0]COVFS:计数器溢出状态
[1]LOVRS:载入溢出状态
[2]CPAS:RA比较状态
[3]CPBS:RB比较状态
[4]CPCS:RC比较状态
[5]LDRAS:RA载入状态
[6]LDRBS:RB载入状态
[7]ETRGS:外部触发状态
[16]CLKSTA:时钟使能状态
[17]MTIOA:TIOA镜像
[18]MTIOB:TIOB镜像
TC_IER TC中断使能寄存器
[0]COVFS:计数器溢出
[1]LOVRS:载入溢出
[2]CPAS:RA比较
[3]CPBS:RB比较
[4]CPCS:RC比较
[5]LDRAS:RA载入
[6]LDRBS:RB载入
[7]ETRGS:外部触发
0-无效 1-中断使能
TC_IDR TC中断禁用寄存器
[0]COVFS:计数器溢出
[1]LOVRS:载入溢出
[2]CPAS:RA比较
[3]CPBS:RB比较
[4]CPCS:RC比较
[5]LDRAS:RA载入
[6]LDRBS:RB载入
[7]ETRGS:外部触发
0-无效 1-中断禁用
TC_IMR TC中断屏蔽寄存器
[0]COVFS:计数器溢出
[1]LOVRS:载入溢出
[2]CPAS:RA比较
[3]CPBS:RB比较
[4]CPCS:RC比较
[5]LDRAS:RA载入
[6]LDRBS:RB载入
[7]ETRGS:外部触发
0-禁用 1-使能
//============================TC调试 wang@20080612==================================
#include "../Startup/Board.h"
void Timer0ISR(void);
/*
* 初始化定时器T0
*/
void Timer0Init(void)
{
AT91F_TC0_CfgPMC();
*AT91C_PIOA_PDR = AT91C_PA0_TIOA0;
*AT91C_PIOA_BSR = AT91C_PA0_TIOA0;
AT91C_BASE_TC0->TC_CCR = AT91C_TC_CLKDIS; // Disable TC.
AT91C_BASE_TC0->TC_IDR = 0xFFFFFFFF;
*AT91C_TC0_CMR =(AT91C_TC_CLKS_TIMER_DIV5_CLOCK
| AT91C_TC_BURST_NONE
| AT91C_TC_WAVE
| AT91C_TC_WAVESEL_UP_AUTO
| AT91C_TC_ACPA_SET
| AT91C_TC_ACPC_CLEAR
);
AT91C_BASE_TC0->TC_RC = MCK/1024;// 1/(1/(MCK/1024)) 1秒中断一次 定时的周期 T = (1/时钟源)*TC_RC // T=1 时钟源=MCK/1024 1=(1/(MCK/1024))*TC_RC
AT91C_BASE_TC0->TC_CCR = AT91C_TC_CLKEN;
AT91F_AIC_ConfigureIt (
AT91C_BASE_AIC, // AIC base address
AT91C_ID_TC0, // SYSTEM peripheral ID
AT91C_AIC_PRIOR_HIGHEST, // Max priority
AT91C_AIC_SRCTYPE_EXT_LOW_LEVEL, // Internal Sources Code Label Edge triggered
Timer0ISR );
AT91C_BASE_TC0->TC_IER = AT91C_TC_CPCS; // RC比较使能
AT91F_AIC_EnableIt(AT91C_BASE_AIC, AT91C_ID_TC0);//使能时钟中断
AT91C_BASE_TC0->TC_CCR = AT91C_TC_SWTRG; // 软件触发命令 1-软触发 计数器复位 时钟启动
}
/*
* 定时器T0中断
*/
void Timer0ISR(void)
{
int status;
status = *AT91C_TC0_SR;
if ( (AT91F_PIO_GetInput(AT91C_BASE_PIOA) & LED2) == LED2 )
{
AT91F_PIO_ClearOutput(AT91C_BASE_PIOA,LED2);
}
else
{
AT91F_PIO_SetOutput(AT91C_BASE_PIOA,LED2);
}
}
void main(void)
{
AT91F_PMC_EnablePeriphClock ( AT91C_BASE_PMC, 1 << AT91C_ID_PIOA ) ;
AT91F_PIO_CfgOutput( AT91C_BASE_PIOA, LED_MASK ) ;
AT91F_PIO_SetOutput( AT91C_BASE_PIOA, LED_MASK ) ;
Timer0Init();
while(1)
{
;
}
}
//============================end=================================