📄 drv_timer0.c
字号:
#include "config_GD61.h"
#include "include_GD61.h"
#include <stdio.h>
#include <math.h>
/////////////////////////////////////////////////////////////////////////////
volatile uint16 mSecondTick; // for delay function
void DelayMS_(uint16 dly);
void __irq IRQ_Timer0 (void);
void TimerInitialize(void);
/****************************************************************************
** 函数名称 :DelayMS() ;delay 1 mil second
** 函数功能 :长软件延时
** 入口参数 :dly 延时参数,值越大,延时越久
** 出口参数 :无
****************************************************************************/
void DelayMS_(uint16 dly)
{
mSecondTick=(dly+1); //resolution is 1 mS
while(mSecondTick>1);
}
/****************************************************************************
** 函数名称 :IRQ_Timer0()
** 函数功能 :定时器0中断服务程序,取反LED9控制口。
** 入口参数 :无
** 出口参数 :无
*****************************************************************************/
void __irq IRQ_Timer0(void)
{
if(mSecondTick!=0){
mSecondTick--; // ms running, for delay function
}
////
T0IR = 0x01; /* 清除中断标志*/
VICVectAddr = 0x00; /* 通知VIC中断处理结束*/
}
////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////
//////////////////////////////////////////////////////////////////////////
//////////////////////////////////////////////////////////////////////////
void TimerInitialize(void)
{
/* 定时器0初始化 */
T0TC = 0; /* 定时器设置为0 */
T0PR = 0; /* 时钟不分频 */
T0MCR = 0x03; /* 设置T0MR0匹配后复位T0TC,并产生中断标志 */
T0MR0 = LPC_FPCLK /1000; /* 1/1000秒钟定时 */
T0TCR = 0x01; /* 启动定时器 */
/* 设置定时器0中断IRQ */
// VICIntSelect = 0x00000000; /* 所有中断通道设置为IRQ中断*/
VICVectCntl5 = 0x20|INT_TIMER0; /* 设置定时器0中断通道分配最高优先级*/
VICVectAddr5 = (uint32)IRQ_Timer0; /* 设置中断服务程序地址*/
VICIntEnable = 1<<INT_TIMER0; /* 使能定时器0中断*/
}
//////////////////////////////////////////////////////////////////////////
// end of file //
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -