时钟源及定时器计算方法

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 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])

相关文档
最新文档