时钟源及定时器计算方法
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
时钟源及定时器计算方法示例一.时钟源
Fin=8MHz
●时钟源定义
规则:
Fpllo必须大于20MHZ且少于66MHZ
Fpllo * 2s必须少于170MHZ
Fin/p推荐为1MHZ 或大于,但小于2MHZ
例:设晶振工作频率fin=8MHz,要求产生主时钟频率MCLK==64MHz m = (MDIV + 8),p = (PDIV + 2),s = SDIV
由于Fpllo * 2s<170MHZ →2s <170MHz/64 MHz = 2.65
→s=1=SDIV
Fin/p推荐为1MHZ 或大于,但小于2MHZ, 1MHz<=Fin/p<2M Fin /2M<=P< Fin/1M →4<=P<8
p = (PDIV + 2) →2<=PDIV<6
Fpllo = (m * Fin)/(p * 2s)
注:答案不唯一
●SDIV=1 (0x01) PLLCON[1:0] 2位0~3
●取PDIV=2 (0x02) PLLCON[9:4] 6位0~63
●MDIV=?(0x38) PLLCON[19:12] 8位0~255
由
Fpllo=MCLK=( MDIV +8)*8M/( PDIV +2)*2SDIV =( MDIV +8)*8M/((2+2)*21)= 64MHz
→( MDIV +8)*8M/8= 64MHz
→MDIV +8=64
→MDIV=56
PLLCON:MDIV[19:12],PDIV[9:4],SDIV[1:0]
0x38 0x2 0x1
●对PLLCON赋值方法一:
PLLCON=0b0011 1000 0000 0010 0001或PLLCON=0x380201
●对PLLCON赋值方法二:
PLLCON= ((MDIV<<12)| (PDIV<<4)|( SDIV<<0))
二.定时器定义
定时器输入时钟频率f in=MCLK/{预分频值+1}/{再分频值}= MCLK/{ prescaler +1}/{DIV},其中预分频值为0~255,再分频DIV为2,4,8,16,32
例:设系统输入主时钟频率为MCLK=64MHz,要求定时器Time0输出脉冲时间间隔T=5s,占空比为20%。
注:答案不唯一。
●由定时器输出频率要求可知:f out=1/T=1/5=0.2Hz
●设取DIV= 32
Prescaler=199 Prescaler:0~255
●由f in= MCLK/{ prescaler +1}/DIV=64MHz/200/32=10KHz 尽量保持整除
●TCNTBn = f in / f out=10KHz/0.2=50K=50000 TCNTBn寄存器为16位:0~65535
●占空比20%,可得TCMPBn= TCNTBn*20%=50000*20%=10000,即定时器从50000递
减计数至10000时(即TCMPBn= TCNTBn),Tout输出高电平
定时器配置及启动!
●第一步:配置定时器配置寄存器0(TCFG0)以设置定时器的预分频值
prescaler=199
rTCFG0 = TCFG0 &~(0xff)| 199;
●第二步:配置定时器配置寄存器1(TCFG1)以设置定时器的再分频值DIV=32
rTCFG1 = TCFG1 & ~0b1111|0b0100;
●第三步:设置定时器0初值TCNTn=50000,TCNTBn=50000及比较寄存器
TCMPn=10000,TCMPBn=10000
rTCNT0=50000;
rTCNT B0=50000;
rTCMP0=10000;
rTCMP B0=10000
●第四步:配置定时器0控制寄存器TCON的定时器自动重载位,翻转位,手动更
新位,及启动定时器位。注:启动定时器的同时应清除手动更新位。
rTCON = rTCON & ~0xff|0b01010; //设置设置Timer0 (rTCON[4:0])不使能死区,自动重载,不反转输出,手动更新,停止定时器
启动定时器的同时应清除手动更新位。
rTCON |= (1 <<0); //启动定时器Timer0(rTCON[0]=1)
rTCON &= ~(1 << 1); //清除Timer0 (rTCON[1]手动更新位
●第五步:如果要产生定时器0输出,则应配置GPIO端口E为功能2,
rPCONE = rPCONE&~(0b11<<6)| (0b10<<6);
//设置端口E第PE3位为功能2(PCONE[7:6]=10)(TOUT0)
●第六步:若定时器0要产生中断,则应将定时器中断屏蔽位使能
rINTMSK = rINTMSK& ~(0x1<<26)|0x1<<13;//写0开启全局屏蔽位(rINTMSK[26]),定时器Timer0屏蔽位(rINTMSK[13])