📄 tc.c
字号:
#include "AT91RM9200.h"
#include "lib_AT91RM9200.h"
#include "flash.h"
#include "sys.h"
unsigned int TC3Count=0;
void AT91F_TC3_Handler()//TC3_中断服务程序
{
unsigned int dummy;
unsigned int i;
volatile unsigned short *ad_data;
volatile unsigned short *ad_address;
volatile unsigned short temp_data;
dummy=*AT91C_TC3_SR;
if(TC3Count==0)
{
TC3Count =1;
AT91F_PIO_SetOutput(AT91C_BASE_PIOC,AT91C_PIO_PC14);
AT91F_PIO_ClearOutput(AT91C_BASE_PIOC,AT91C_PIO_PC15);
AT91F_PIO_ClearOutput(AT91C_BASE_PIOA,AT91C_PIO_PA22);
}
else if(TC3Count==1)
{
TC3Count =2;
AT91F_PIO_SetOutput(AT91C_BASE_PIOC,AT91C_PIO_PC15);
AT91F_PIO_ClearOutput(AT91C_BASE_PIOC,AT91C_PIO_PC14);
AT91F_PIO_ClearOutput(AT91C_BASE_PIOA,AT91C_PIO_PA22);
}
else if(TC3Count==2)
{
TC3Count =0;
AT91F_PIO_SetOutput(AT91C_BASE_PIOA,AT91C_PIO_PA22);
AT91F_PIO_ClearOutput(AT91C_BASE_PIOC,AT91C_PIO_PC14);
AT91F_PIO_ClearOutput(AT91C_BASE_PIOC,AT91C_PIO_PA15);
}
*AT91C_AIC_EOICR = 0x00000000;
}
void TcInterrupt_Init(unsigned short id)//TC中断_初始化
{
unsigned int dummy;
if(id == 0)
{
}
else if(id == 1)
{
}
else if(id == 2)
{
}
else if(id == 3)
{
TC3Count=0;
AT91F_TC3_CfgPMC();
*AT91C_TC3_CCR=AT91C_TC_CLKDIS; //禁止中断
*AT91C_TC3_IDR=0xFFFFFFFF; //禁止中断
dummy=*AT91C_TC3_SR; //读TC状态
//#define AT91C_TC_CPCTRG ((unsigned int) 0x1 << 14) // (TC) RC Compare Trigger Enable
//CMR(page490),MCK=59.904MHz,TIMER_CLOCK1=MCK/2=29.925MHz,
//TIMER_CLOCK5=SLOWCLOCK=32768,达到计数值后停止TC
*AT91C_TC3_CMR=(unsigned int)(0x1<<2)|AT91C_TC_CPCTRG;//TIMER_CLOCK5=SLOWCLOCK=32768Hz,达到计数值后停止TC
//*AT91C_TC3_CMR=(unsigned int)(0x0<<0)|AT91C_TC_CPCTRG;//TIMER_CLOCK1=MCK/2=29.925MHz,达到计数值后停止TC
*AT91C_TC3_CCR=AT91C_TC_CLKEN; //Enable the Clock Counter
*AT91C_TC3_IER=AT91C_TC_CPCS; //Validate the RC compare interrupt
//AIC_IDCR(page249),AIC Interrupt Disable Command Register
*AT91C_AIC_IDCR=(unsigned int)(1<<AT91C_ID_TC3); //Disable timer 1 interrupt at AIC level
AT91F_AIC_ConfigureIt (
AT91C_BASE_AIC,
AT91C_ID_TC3,
AT91C_AIC_PRIOR_HIGHEST,
AT91C_AIC_SRCTYPE_INT_LEVEL_SENSITIVE,
AT91F_ASM_TC3_Handler);
*AT91C_AIC_ICCR=(1<<AT91C_ID_TC3); //Clear the TC3 interrupt
*AT91C_AIC_IECR=(1<<AT91C_ID_TC3); //Enable the TC3 interrupt
*AT91C_AIC_IMR=(1<<AT91C_ID_TC3); //Clear the TC3 interrupt mask
//*AT91C_TC3_RC=12479; //period=12479/TIMER_CLOCK1(29.925M)=20ms/48=0.417ms
//*AT91C_TC3_RC=1638; //period=1638/TIMER_CLOCK5=50ms
*AT91C_TC3_RC=32768; //period=32768/TIMER_CLOCK5=1s
//CCR(page487),TC Channel Control Register
*AT91C_TC3_CCR=AT91C_TC_SWTRG; //触发
//US1_Printf("TC3(1s) Initialized Compeletly!\r\n\r\n");
}
else if(id == 4)
{
}
else if(id == 5)
{
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -