92 lines
2.1 KiB
C
92 lines
2.1 KiB
C
#include "Includes.h"
|
|
|
|
#define u32 uint32_t
|
|
|
|
volatile uint32_t GulSystickCount=0;
|
|
void SysTick_Handler(void)
|
|
{
|
|
GulSystickCount++;//
|
|
gpio_output_low(0);
|
|
gpio_output_high(0);
|
|
|
|
}
|
|
|
|
|
|
|
|
/*
|
|
nus:要延时的us数.
|
|
nus:0~204522252(最大值即(2^32)/32)
|
|
*/
|
|
|
|
//#define TICK_PER_US 16
|
|
//#define TICK_PER_US 32
|
|
//#define TICK_PER_US 12
|
|
#define TICK_PER_US 24
|
|
|
|
void delay_us(u32 nus)
|
|
{
|
|
u32 ticks;
|
|
u32 told,tnow,tcnt=0;
|
|
u32 reload=SysTick->LOAD; //LOAD的值
|
|
ticks=nus*TICK_PER_US; //需要的节拍数 32M速度 1us需要32个时钟周期
|
|
told=SysTick->VAL; //刚进入时的计数器值
|
|
while(1)
|
|
{
|
|
tnow=SysTick->VAL;
|
|
if(tnow!=told)
|
|
{
|
|
if(tnow<told)tcnt+=told-tnow; //这里注意一下SYSTICK是一个递减的计数器就可以了.
|
|
else tcnt+=reload-tnow+told;
|
|
told=tnow;
|
|
if(tcnt>=ticks)break; //时间超过/等于要延迟的时间,则退出.
|
|
}
|
|
};
|
|
}
|
|
|
|
|
|
void delay_ms(u32 nms)
|
|
{
|
|
for(uint32_t i=0;i<nms;i++) delay_us(1000);
|
|
}
|
|
|
|
//#define configCPU_CLOCK_HZ ( ( unsigned long ) 16000000 )
|
|
//#define configCPU_CLOCK_HZ ( ( unsigned long ) 32000000 )
|
|
//#define configCPU_CLOCK_HZ ( ( unsigned long ) 12000000 )
|
|
#define configCPU_CLOCK_HZ ( ( unsigned long ) 24000000 )
|
|
|
|
//#define configTICK_RATE_HZ ( 20 ) //50ms滴答定时器中断一次调度一次
|
|
#define configTICK_RATE_HZ ( 1000 ) //1ms滴答定时器中断一次调度一次
|
|
void delay_Init(void)
|
|
{
|
|
// SysTick->LOAD=( configCPU_CLOCK_HZ / configTICK_RATE_HZ ) - 1UL;
|
|
// SysTick->CTRL|=SysTick_CTRL_CLKSOURCE_Msk;
|
|
// SysTick->CTRL|=SysTick_CTRL_ENABLE_Msk;
|
|
SysTick_Config(configCPU_CLOCK_HZ / configTICK_RATE_HZ);
|
|
}
|
|
|
|
|
|
|
|
extern void test_systick(void)
|
|
{
|
|
gpio_mux_ctl(0,0);gpio_fun_inter(0,0);gpio_fun_sel(0,0);gpio_direction_output(0);
|
|
gpio_mux_ctl(1,0);gpio_fun_inter(1,0);gpio_fun_sel(1,0);gpio_direction_output(1);
|
|
SysTick_Config(configCPU_CLOCK_HZ / configTICK_RATE_HZ);
|
|
while(1)
|
|
{
|
|
#if 0
|
|
delay_ms(5);
|
|
gpio_output_low(1);
|
|
delay_ms(5);
|
|
gpio_output_high(1);
|
|
#endif
|
|
|
|
#if 1
|
|
delay_us(200);
|
|
gpio_output_low(1);
|
|
delay_us(200);
|
|
gpio_output_high(1);
|
|
#endif
|
|
|
|
}
|
|
}
|