mirror of
https://github.com/No-Chicken/Power-Pico.git
synced 2026-04-03 13:02:36 +08:00
93 lines
1.6 KiB
C
93 lines
1.6 KiB
C
|
|
#include "delay.h"
|
|||
|
|
#include "sys.h"
|
|||
|
|
|
|||
|
|
/*
|
|||
|
|
//roughly delay
|
|||
|
|
void delay_us(u32 nus)
|
|||
|
|
{
|
|||
|
|
u32 i;
|
|||
|
|
u16 temp;
|
|||
|
|
temp = nus*SYS_CLK/15;
|
|||
|
|
for(i=0;i<temp;i++);
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
//<2F><>ʱnms
|
|||
|
|
//nms:Ҫ<><D2AA>ʱ<EFBFBD><CAB1>ms<6D><73>
|
|||
|
|
void delay_ms(u16 nms)
|
|||
|
|
{
|
|||
|
|
u32 i;
|
|||
|
|
for(i=0;i<nms;i++) delay_us(1000);
|
|||
|
|
}
|
|||
|
|
*/
|
|||
|
|
|
|||
|
|
void delay_init(void)
|
|||
|
|
{
|
|||
|
|
HAL_SYSTICK_CLKSourceConfig(SYSTICK_CLKSOURCE_HCLK);
|
|||
|
|
/* Configure the SysTick to have interrupt in 1ms time basis*/
|
|||
|
|
HAL_SYSTICK_Config(SystemCoreClock / (1000U / uwTickFreq));
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
#if OS_SUPPORT
|
|||
|
|
void delay_us(u32 nus)
|
|||
|
|
{
|
|||
|
|
u32 ticks;
|
|||
|
|
u32 told,tnow,tcnt=0;
|
|||
|
|
u32 reload=SysTick->LOAD;
|
|||
|
|
ticks=nus*SYS_CLK;
|
|||
|
|
delay_osschedlock();
|
|||
|
|
told=SysTick->VAL;
|
|||
|
|
while(1)
|
|||
|
|
{
|
|||
|
|
tnow=SysTick->VAL;
|
|||
|
|
if(tnow!=told)
|
|||
|
|
{
|
|||
|
|
if(tnow<told)tcnt+=told-tnow;//<2F><><EFBFBD><EFBFBD>ע<EFBFBD><D7A2>һ<EFBFBD><D2BB>SYSTICK<43><4B>һ<EFBFBD><D2BB><EFBFBD>ݼ<EFBFBD><DDBC>ļ<EFBFBD><C4BC><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϳ<EFBFBD><CDBF><EFBFBD><EFBFBD><EFBFBD>.
|
|||
|
|
else tcnt+=reload-tnow+told;
|
|||
|
|
told=tnow;
|
|||
|
|
if(tcnt>=ticks)break;
|
|||
|
|
}
|
|||
|
|
};
|
|||
|
|
delay_osschedunlock();
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
void delay_ms(u16 nms)
|
|||
|
|
{
|
|||
|
|
if(delay_osrunning&&delay_osintnesting==0)
|
|||
|
|
{
|
|||
|
|
if(nms>=fac_ms)
|
|||
|
|
{
|
|||
|
|
delay_ostimedly(nms/fac_ms);
|
|||
|
|
}
|
|||
|
|
nms%=fac_ms;
|
|||
|
|
}
|
|||
|
|
delay_us((u32)(nms*1000));
|
|||
|
|
}
|
|||
|
|
#else
|
|||
|
|
|
|||
|
|
void delay_us(u32 nus)
|
|||
|
|
{
|
|||
|
|
u32 ticks;
|
|||
|
|
u32 told,tnow,tcnt=0;
|
|||
|
|
u32 reload=SysTick->LOAD;
|
|||
|
|
ticks=nus*SYS_CLK;
|
|||
|
|
told=SysTick->VAL;
|
|||
|
|
while(1)
|
|||
|
|
{
|
|||
|
|
tnow=SysTick->VAL;
|
|||
|
|
if(tnow!=told)
|
|||
|
|
{
|
|||
|
|
if(tnow<told)tcnt+=told-tnow;
|
|||
|
|
else tcnt+=reload-tnow+told;
|
|||
|
|
told=tnow;
|
|||
|
|
if(tcnt>=ticks)break;
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
void delay_ms(u16 nms)
|
|||
|
|
{
|
|||
|
|
u32 i;
|
|||
|
|
for(i=0;i<nms;i++) delay_us(1000);
|
|||
|
|
}
|
|||
|
|
#endif
|