时钟源及定时器计算方法2
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
●时钟源选择
●时钟源定义
例1.
设晶振工作频率fin=8MHz,要求产生主时钟频率MCLK==64MHz
P 219页
PLLCON|= ((MDIV<<12)| (PDIV<<4)|( SDIV<<0))
●定时器定义
定时器输入时钟频率=MCLK/{预分频值+1}/{再分频值}= MCLK/{ prescaler +1}/{DIV}
其中预分频值为0~255
再分频DIV为2,4,8,16,32
例1.MCLK=64MHz,时间间隔T=5s
定时器输出频率fout=1/T=1/5=0.2Hz
DIV= 32
Prescaler=199 Prescaler:0~255
Fin= MCLK/{ prescaler +1}/DIV 尽量保持整除
=64MHz/200/32=10KHz
TCNTBn = Fin / fout=10KHz/0.2=50K=50000 TCNTBn:0~65535
ARM7的定时器配置及启动!
第一步:配置定时器配置寄存器0(TCFG0)以设置定时器的预分频值prescaler
第二步:配置定时器配置寄存器1(TCFG1)以设置定时器的再分频值DIV
第三步:设置定时器初值TCNTn,TCNTBn及比较寄存器TCMPn,TCMPBn
rTCNTB0 = 792;
rTCMPB0 = 396;
第四步:配置定时器控制寄存器TCON的定时器自动重载位,翻转位,手动更新位,及启动定时器位。注:启动定时器的同时应清除手动更新位。
rTCON |= (1<<10)|(1<<9)|(1<<2)|(1<<1); // 手动更新
delay(10);
rTCON &= ~((1<<9)|(1<<1)); // 自动加载
delay(10);
rTCON |= (1<<11)|(1<<3)|(1<<8)|1; // 启动定时器,自动加载
第五步:如果要产生定时器输出,则应配置GPIO端口E为功能2,
rPCONE |=0x200;// set GPE[9:8]=10 :TOUT1
第六步:若定时器要产生中断,则应将定时器中断屏蔽位使能
pISR_TIMER0=(unsigned)timer0_int;
ClearPending(BIT_TIMER0);
rINTMSK &=~(BIT_GLOBAL|BIT_TIMER0);
定时器控制寄存器(TCON)
定时器配置寄存器0
中断
void init_int(void)
{
// interrupt settings
rI_ISPC = 0x3ffffff; // clear interrupt pending register
rEXTINTPND = 0xf; // clear EXTINTPND register
rINTMOD = 0x0; // all for IRQ mode
rINTCON = 0x5; // nonVectored mode, IRQ disable, FIQ disable rINTMSK = ~(BIT_GLOBAL|BIT_EINT4567);// set EINT interrupt handler
pISR_EINT4567 = (int)int4567_isr; // PORT G configuration
rPCONG = 0xffff; // EINT7~0
rPUPG = 0x0; // pull up enable
rEXTINT = rEXTINT | 0x22220020; // EINT4567 falling edge mode
rI_ISPC |= BIT_EINT4567;
rEXTINTPND = 0xf; // clear EXTINTPND reg
}
IO端口使用例子
rPDATB = 0xff;
rPCONB = 0xffff;
rPUPG = 0x0;
rSPUCR = 0x7; //使能数据线上拉电阻