uplooking_sh
全部博文(171)
2011年(9)
2010年(162)
mcxiaora
robertwa
unixpan
Phyllis6
浪花小雨
分类: 嵌入式
2010-09-16 16:49:57
//==========================================================================// AT91SAM7S256 定时器 时钟使用例子。比较方式// 说明: AT91SAM7S256 ARM7 时钟设为48MHZ, 外部晶振为18.432MHZ !// netjob @ 2008-6-5//==========================================================================//==========================================================================// 当WAVSEL = 10 时,TC_CV 值由0 增加到RC 值,然后【自动复位】。一旦TC_CV 值复位,它// 开始【重新循环】// TC_VC与RC比较,相等触发中断。//==========================================================================// MCK=48055000 (HZ)// 下面是TC的时钟源。// MCK/2=24,027,500 0.0416us 2.726 ms 中断一次@ 16位溢出中断!// MCK/8=6,006,875 0.1665us 10.912 ms 中断一次@ 16位溢出中断!// MCK/32=1,501,719 0.6659us 43.640 ms 中断一次@ 16位溢出中断!// MCK/128=375,429 2.6636us 174.562 ms 中断一次@ 16位溢出中断!// MCK/1024=46,928 21.3089us 1.3965 s 中断一次@ 16位溢出中断!//// 下面选择使用 MCK/2 也就是 AT91C_TC_CLKS_TIMER_DIV1_CLOCK 时,TC1 定时长度的数值// 0.3125ms 比较值为 7512 ( 312.5us/0.0416us )// 0.3333ms 比较值为 8012 ( 333.3us/0.0416us )// 0.625ms 比较值为 15024 ( 625.0us/0.0416us )// 0.833ms 比较值为 20024 ( 833.0us/0.0416us )// 1.667ms 比较值为 40072 ( 1667 us/0.0416us )////==========================================================================//// TC1 中断初始化函数, 1.667毫秒中断//==========================================================================void AT91_TIMER1_Configure(void){//打开定时器,设置时钟源为 MCK/2AT91F_TC_Open(AT91C_BASE_TC1,AT91C_TC_CLKS_TIMER_DIV1_CLOCK,AT91C_ID_TC1);AT91C_BASE_TC1->TC_CMR = AT91C_TC_WAVE | AT91C_TC_WAVESEL_UP_AUTO | AT91C_TC_ACPC_NONE | AT91C_TC_ACPC_NONE | AT91C_TC_AEEVT_NONE| AT91C_TC_ASWTRG_NONE| AT91C_TC_BCPB_NONE| AT91C_TC_BCPC_NONE | AT91C_TC_BEEVT_NONE| AT91C_TC_BSWTRG_NONE | AT91C_TC_CLKS_TIMER_DIV1_CLOCK | AT91C_TC_EEVT_TIOB; AT91C_BASE_TC1->TC_RA=40072-30;AT91C_BASE_TC1->TC_RB=40072-20;AT91C_BASE_TC1->TC_RC=40072; // 1.667ms 定时 //设置定时中断句柄 AT91F_AIC_ConfigureIt ( AT91C_BASE_AIC, AT91C_ID_TC1,INT_LEVEL_5,AT91C_AIC_SRCTYPE_INT_LEVEL_SENSITIVE, IRQ_TIMER1);//设置中断触发方式AT91C_BASE_TC1->TC_IER = AT91C_TC_CPCS; // 在此改变中断触发模式,TC_RC 与TC_CV比较中断//允许中断AT91F_AIC_EnableIt (AT91C_BASE_AIC, AT91C_ID_TC1);//触发一次中断 AT91F_AIC_Trig (AT91C_BASE_AIC,AT91C_ID_TC1) ;//开始计时AT91C_BASE_TC1->TC_CCR = AT91C_TC_SWTRG ;}//end timer1//=========================================================================//// TC1 中断函数。1.667毫秒//=========================================================================//void IRQ_TIMER1(void){ int status; status = *AT91C_TC1_SR; // 清标志 status= status; AT91F_PIO_ClearOutput(AT91C_BASE_PIOA, P23);// ON LED ADC_XRead((short *)&UVol); // ADC转换 AT91F_ADC_StartConversion(AT91C_BASE_ADC); AT91F_PIO_SetOutput(AT91C_BASE_PIOA, P23); // OFF LED // AT91F_AIC_ClearIt(AT91C_BASE_AIC, AT91C_ID_TC1);
上一篇:Qtopia4移植到ARM9+Linux平台
下一篇:开贴学习ARM
登录 注册