#include <stdio.h>
#include "NUC1xx.h"
#include "DrvGPIO.h"
#include "DrvSYS.h"
#include "Drvtimer.h"
void Timer0_Callback(void)
{
if (DrvGPIO_GetBit(E_GPA,4))
DrvGPIO_ClrBit(E_GPA,4);
else
DrvGPIO_SetBit(E_GPA,4);
DrvTIMER_ClearIntFlag(E_TMR0);
}
void delay_ms(unsigned int ms)
{
unsigned int i ;
for(i=0;i<ms;i++)
{
DrvTIMER_EnableInt(E_TMR0);
while(DrvTIMER_GetIntFlag(E_TMR0)==0);
DrvTIMER_DisableInt(E_TMR0);
}
}
int main (void)
{
UNLOCKREG();
SYSCLK->PWRCON.XTL12M_EN = 1;
DrvSYS_Delay(5000);
DrvTIMER_Init();
/*定时器初始化函数*/
DrvSYS_SelectIPClockSource(E_SYS_TMR0_CLKSRC,0);
/*TIMER0 时钟源选择:000 =外部12MHz 晶振 、001 =外部 32KHz 晶振 、010 = HCLK 、011 = 外部触发时钟 、1xx =内部 22MHz 振荡器 */
DrvTIMER_Open(E_TMR0,10,E_PERIODIC_MODE);
/*此处可以设定每次循环延时的长度!!!修改*/ /*设定定时器 tick 周期并且启动定时器:定时器通道 TMR0 每秒1次 周期模式*/
DrvTIMER_SetTimerEvent(E_TMR0,1,(TIMER_CALLBACK) Timer0_Callback,0);
/* 隔1个tick执行事件,parameter3-事件处理函数指针,4-传递参数*/
DrvTIMER_Start(E_TMR0);
DrvGPIO_Open(E_GPB, 10, E_IO_OUTPUT); DrvGPIO_ClrBit(E_GPB, 10); // 清GPB10端口 蜂鸣器不叫唤
while(1)
{
DrvGPIO_ClrBit(E_GPA, 2);
DrvGPIO_ClrBit(E_GPA, 3);
DrvGPIO_ClrBit(E_GPA, 5);
delay_ms(5);
DrvGPIO_SetBit(E_GPA, 2); // 关灯
DrvGPIO_SetBit(E_GPA, 3);
DrvGPIO_SetBit(E_GPA, 5);
delay_ms(5);
}
}
第4个例程--定时器设置延时.zip
(2.5 MB)
|