75 lines
1.5 KiB
C
Raw Normal View History

2025-05-21 11:31:07 +08:00
/*
* S32K144<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
* <EFBFBD><EFBFBD>лԭ<EFBFBD>Ӹ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʱ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>
*/
#include"cpu.h"
#include"delay.h"
#include"uart.h"
static uint32_t fac_us;
/*<2A>ӳٺ<D3B3><D9BA><EFBFBD><EFBFBD>¾<EFBFBD>ԭ<EFBFBD>Ӹ<EFBFBD>*/
void SysTick_Init(void) //systick <20><> core_clk 48mhz <20><>װ<EFBFBD>ؼĴ<D8BC><C4B4><EFBFBD> FFFFFF Ϊ16 777 215hz 16.77mhz/48mhz Լ<><D4BC><EFBFBD><EFBFBD>333<33><33><EFBFBD><EFBFBD>
{
S32_SysTick->RVR = 0xFFFFFFul; //<2F><>װ<EFBFBD>ؼĴ<D8BC><C4B4><EFBFBD>
S32_SysTick->CVR = 0ul; //<2F><>ǰ<EFBFBD><C7B0><EFBFBD><EFBFBD>
S32_SysTick->CSR = 0u; //<2F><><EFBFBD>ƼĴ<C6BC><C4B4><EFBFBD>
}
/* Enable SysTick counter and interrupt */
void SysTick_Enable(void)
{
S32_SysTick->CSR = S32_SysTick_CSR_TICKINT(1u) | S32_SysTick_CSR_ENABLE(1);
}
/* Disable SysTick */
void SysTick_Disable(void)
{
S32_SysTick->CSR = 0ul;
}
static uint32_t fac_us;
void delay_us(uint32_t nus)
{
uint32_t ticks;
uint32_t told,tnow,tcnt=0;
uint32_t reload=S32_SysTick->RVR; //LOAD<41><44>ֵ
ticks=nus*fac_us; //<2F><>Ҫ<EFBFBD>Ľ<EFBFBD><C4BD><EFBFBD><EFBFBD><EFBFBD>
told= S32_SysTick->CVR ; //<2F>ս<EFBFBD><D5BD><EFBFBD>ʱ<EFBFBD>ļ<EFBFBD><C4BC><EFBFBD><EFBFBD><EFBFBD>ֵ
while(1)
{
tnow= S32_SysTick->CVR ;
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; //ʱ<><EFBFBD><E4B3AC>/<2F><><EFBFBD><EFBFBD>Ҫ<EFBFBD>ӳٵ<D3B3>ʱ<EFBFBD><CAB1>,<2C><><EFBFBD>˳<EFBFBD>.
}
};
}
void delay_ms(uint32_t nms)
{
uint32_t i;
for(i=0;i<nms;i++) delay_us(1000);
}
int delay_init(void)
{
uint32_t frequency;
CLOCK_SYS_GetFreq(CORE_CLK, &frequency);
fac_us = frequency / 1000000;// <20>õ<EFBFBD><C3B5><EFBFBD>Ƶ<EFBFBD><C6B5><EFBFBD><EFBFBD>mhz <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>֪<EFBFBD><D6AA>1us<75><73><EFBFBD>ٸ<EFBFBD><D9B8><EFBFBD><EFBFBD><EFBFBD>,<2C><>Ҫ<EFBFBD><D2AA> 1 000 000
SysTick_Init(); //systick <20><> core_clk 48mhz <20><>װ<EFBFBD>ؼĴ<D8BC><C4B4><EFBFBD> FFFFFF Ϊ16 777 215hz 16.77mhz/48mhz 0.333<EFBFBD><EFBFBD> Լ<><D4BC><EFBFBD><EFBFBD>333<33><33><EFBFBD><EFBFBD>
SysTick_Enable();
return fac_us;
}