LPC1768 Timer0详细Demo使用示例

设计要求: 设计一个基于Timer0,要求1ms定时中断?

答: 代码如下(开发环境:路虎NPC1768开发板)

/* Include files */
/* <<add include files here>> */
#include "lpc17xx_libcfg.h"
#include "lpc17xx.h"

/* Add Private Types */
/* <<add private type here >> */

#define CCLK 	100000000
#define PCLK0 	CCLK/4

/* Add Private Variables */
/* <<add private variables here >> */

/* Add Private Functions */
/* <<add private functions here >> */

void Init_Timer0(void)
{
	LPC_TIM0->CTCR=0;	//定时器模式
	LPC_TIM0->PR=0;
	LPC_TIM0->PC=0;
	LPC_TIM0->TC=0;		//计数寄存器清零
	LPC_TIM0->MR0=PCLK0/1000-1;
	LPC_TIM0->MCR=0x03;	//匹配后产生中断和复位TC
	LPC_TIM0->TCR=1;	//启动定时器0
	
	NVIC_EnableIRQ(TIMER0_IRQn);
}

/**
 * @brief Main program body
 */
int c_entry(void)
{
	/* <<add code here >> */
	
	LPC_GPIO2->FIODIR = 0xff;               /* LEDs PORT2 are Output */
	LPC_GPIO2->FIOPIN = 0x00;
	
	Init_Timer0();
	
	while(1);
	return 1;
}

void TIMER0_IRQHandler(void)
{
	LPC_TIM0->IR |= 1;	//清除MR0
	LPC_GPIO2->FIOPIN ^= (1<<0);
	__NOP();
}

/* Support required entry point for other toolchain */
int main (void)
{
	return c_entry();
}

程序点拨: 第一次玩NPC单片机的,或者说之前玩的是STM32, 可能对定时器里的PR和PC这两个寄存器有点蒙,它们的默认值是0,

 

 

说简单点,PR是对PCLK进一步分配,PC值计数,计数到跟PR值相等的时候TC值才加1,可以将PR理解成Timerx的预分频寄存器;

初始化时候PC保持默认值0就可以了。

还有一点需要注意下:

CPU主频默认是100MHz,外设主频默认是四分之一CCLK!!!

看下面的截图就知道上面各个模块的当前频率值了:

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值