//
bool CORETIMER_CompareHasExpired( void )
{
if (IFS0bits.CTIF != 0)
{
// Clear Compare Timer Interrupt Flag
IFS0CLR=0x1;
return true;
}
return false;
}
//内核定时器毫秒延时
void CORETIMER_DelayMs ( uint32_t delay_ms)
{
uint32_t startCount, endCount;
/* Calculate the end count for the given delay */
endCount=(CORE_TIMER_FREQUENCY/1000)*delay_ms;
startCount=_CP0_GET_COUNT();
while((_CP0_GET_COUNT()-startCount)<endCount);
}
//内核定时器微秒延时
void CORETIMER_DelayUs ( uint32_t delay_us)
{
uint32_t startCount, endCount;
/* Calculate the end count for the given delay */
endCount=(CORE_TIMER_FREQUENCY/1000000)*delay_us;
startCount=_CP0_GET_COUNT();
while((_CP0_GET_COUNT()-startCount)<endCount);
}
需要注意的点:毫秒延时函数以及微秒延时函数采用当前值减去起始值,再与需要计数的值进行比较,数值类型均为32位,因此长时间计数可能存在溢出的情况,该点需要注意。