arduino_midi_player/Midi/music-box-nv32-master/nv32lib/cpu/systick.c
2025-03-24 14:30:56 +08:00

90 lines
2.3 KiB
C

/******************************************************************************
*
* @brief provide systick utility routines.
*
*******************************************************************************/
#include "common.h"
#include "systick.h"
//#include "stdint.h"
uint32_t cnt_start_value;
uint32_t cnt_end_value;
uint32_t overhead;
SysTick_CallbackType SysTick_Callback[1] = {NULL};
#if 0
__IO uint32_t CTRL; /*!< Offset: 0x000 (R/W) SysTick Control and Status Register */
__IO uint32_t LOAD; /*!< Offset: 0x004 (R/W) SysTick Reload Value Register */
__IO uint32_t VAL; /*!< Offset: 0x008 (R/W) SysTick Current Value Register */
__I uint32_t CALIB; /*!< Offset: 0x00C (R/ ) SysTick Calibration Register */
#endif
void systick_init(void)
{
SysTick->VAL = 0x0; /* clear current ETMer value */
SysTick->LOAD = 0x00FFFFFF;
SysTick->CTRL = SysTick_CTRL_CLKSOURCE_Msk | SysTick_CTRL_ENABLE_Msk;
}
void SysTick_SetCallBack(SysTick_CallbackType pSysTick_CallBack)
{
SysTick_Callback[0] = pSysTick_CallBack;
}
/***
void delay_us(int n)//微秒级别的延时
{
int temp;
SysTick->LOAD= 48 *n; //????
SysTick->VAL=0x00000000; //?????
SysTick->CTRL=0x00000005;
while(SysTick->CTRL&0x00010000); //????
SysTick->CTRL=0x00000004;
}
***/
/****
void delay_ms(int n)//毫秒级别的延时
{
int temp;
SysTick->LOAD= 48000 *n; //????
SysTick->VAL=0x00000000; //?????
SysTick->CTRL=0x00000005;
while(SysTick->CTRL&0x00010000); //????
SysTick->CTRL=0x00000004;
}******////
void systick_disable(void)
{
SysTick->CTRL &= ~SysTick_CTRL_ENABLE_Msk;
}
void cal_systick_read_overhead(void)
{
uint32_t cnt_start_value;
uint32_t cnt_end_value;
cnt_start_value = SysTick->VAL;
cnt_end_value = SysTick->VAL;
overhead = cnt_start_value - cnt_end_value;
#ifdef DEBUG_PRINT
printf("systick start value: 0x%x\n\r", (unsigned int)cnt_start_value);
printf("systick end value: 0x%x\n\r", (unsigned int) cnt_end_value);
printf("systick current value read overhead: 0x%x\n\r", (unsigned int)overhead);
#endif
}
void SysTick_Isr(void)
{
//printf("input any character to start a new conversion!\n");
if( SysTick_Callback[0] )
{
SysTick_Callback[0]();
}
}