/*************题目:助学板定时器的应用******************/
/*************功能:LED2灯的闪烁间隔10S***********************/
#include "NUC1xx.h"
#include "DRVTIMER.h"
#include "DRVGPIO.h"
#include "DrvSYS.h"
static uint8_t EGPADATA=0xf7;
static uint8_t IntFlag=0;
/*************函数声明***********/
void InitSYS(void);
void InitGPIO(void);
void InitTIMER(void);
void TMR_CALLBACK() //回调函数;
{
DrvTIMER_ClearIntFlag (E_TMR0); //清楚中断标志;
IntFlag=~IntFlag;
}
int main()
{
InitSYS(); //初始化系统时钟;
InitGPIO(); //设定GPA3端口为普通端口;
InitTIMER(); //初始化定时器;
DrvTIMER_Start (E_TMR0); //指定定时器通道开始计数;
while (1)
{
if(IntFlag)
DrvGPIO_SetPortBits(E_GPA,0xff);
else
DrvGPIO_SetPortBits(E_GPA,EGPADATA);
}
}
void InitSYS()
{
UNLOCKREG();
DrvSYS_SetOscCtrl(E_SYS_XTL12M, 1); //使能外部12M
DrvSYS_Delay(5000);
LOCKREG();
}
void InitGPIO()
{
DrvGPIO_Open(E_GPA, 2, E_IO_OUTPUT); //设置GPA2为输出模式;
DrvGPIO_Open(E_GPA, 12, E_IO_INPUT);
}
void InitTIMER()
{
DrvTIMER_Init(); //在配置定时器寄存器时,必须要执行这步;
DrvTIMER_SetEXTClockFreq (12000000); //选择外部时钟源12M,作为定时器的时钟源;
DrvTIMER_Open( E_TMR0, 1, E_PERIODIC_MODE ); //选择TMR0,1S中断一次,周期性模式;
DrvTIMER_SetTimerEvent(E_TMR0, 10,(TIMER_CALLBACK)TMR_CALLBACK, 0 ); //中断达到10次再分配回调函数;
DrvTIMER_EnableInt (E_TMR0); //使能指定的定时器中断;
DrvTIMER_GetCounters (E_TMR0); //获取指定通道当前计数值;
}
|