时钟源及定时器计算方法2

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

相关文档
最新文档