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!!!

看下面的截圖就知道上面各個模塊的當前頻率值了:

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章