Files
player/Project/Src/rt-thread/board.c
2025-06-27 00:32:57 +08:00

149 lines
3.3 KiB
C
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

/*
* Copyright (c) 2006-2018, RT-Thread Development Team
*
* SPDX-License-Identifier: Apache-2.0
*
* Change Logs:
* Date Author Notes
* 2017-07-24 Tanek the first version
* 2018-11-12 Ernest Chen modify copyright
*/
//#include "bsp_led.h"
//#include "device.h"
//#include "device_drv_config.h"
#include "main.h"
#include <rthw.h>
#include <rtthread.h>
void SystemClock_Config(void);
#if 1
#define _SCB_BASE (0xE000E010UL)
#define _SYSTICK_CTRL (*(rt_uint32_t *)(_SCB_BASE + 0x0))
#define _SYSTICK_LOAD (*(rt_uint32_t *)(_SCB_BASE + 0x4))
#define _SYSTICK_VAL (*(rt_uint32_t *)(_SCB_BASE + 0x8))
#define _SYSTICK_CALIB (*(rt_uint32_t *)(_SCB_BASE + 0xC))
#define _SYSTICK_PRI (*(rt_uint8_t *)(0xE000ED23UL))
// Updates the variable SystemCoreClock and must be called
// whenever the core clock is changed during program execution.
extern void SystemCoreClockUpdate(void);
// Holds the system core clock, which is the system clock
// frequency supplied to the SysTick timer and the processor
// core clock.
extern uint32_t SystemCoreClock;
static uint32_t _SysTick_Config(rt_uint32_t ticks)
{
if ((ticks - 1) > 0xFFFFFF)
{
return 1;
}
_SYSTICK_LOAD = ticks - 1;
_SYSTICK_PRI = 0xFF;
_SYSTICK_VAL = 0;
_SYSTICK_CTRL = 0x07;
return 0;
}
// us级延时
void rt_hw_us_delay(rt_uint32_t us)
{
u32 ticks;
u32 told,tnow,tcnt=0;
u32 reload=SysTick->LOAD; //LOAD的值
ticks=us; //需要的节拍数
rt_enter_critical(); //阻止OS调度防止打断us延时
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; //时间超过/等于要延迟的时间,则退出.
}
};
rt_exit_critical(); //恢复OS调度
}
#endif
#if defined(RT_USING_USER_MAIN) && defined(RT_USING_HEAP)
#define RT_HEAP_SIZE 5*1024//1536
//static uint32_t rt_heap[RT_HEAP_SIZE]; // heap default size: 6K(1536 * 4)
RT_WEAK void *rt_heap_begin_get(void)
{
// return rt_heap;
return (void *)0x10000000;
}
RT_WEAK void *rt_heap_end_get(void)
{
// return rt_heap + RT_HEAP_SIZE;
return (void *)(0x10000000+64*1024/4);
}
#endif
void mpu_init(void)
{
//选择0号region
MPU->RNR=0;
//选择基地址
MPU->RBAR=0x00000000;
//设置属性及容量
MPU->RASR=((0x3)<<MPU_RASR_AP_Pos)|((31)<<MPU_RASR_SIZE_Pos)|(0x5<<16)|1;
//开启MPU
MPU->CTRL=1;
}
/**
* This function will initial your board.
*/
void rt_hw_board_init()
{
NVIC_SetVectorTable(NVIC_VectTab_FLASH,(u32)128*1024);
_SysTick_Config (SystemCoreClock/1000);
// LED_Init(); // LED鍒濆<E98D92>鍖?
// Usart_Config(); // 涓插彛鍒濆<E98D92>鍖?
// SDRAM_Init(); // sdram瑕佸厛浜巈mwin涔嬪墠鍒濆<E98D92>鍖?
// sFLASH_Init();
//SPI_Flash_Init();
mymem_init();
rt_system_heap_init(rt_heap_begin_get(),rt_heap_end_get());
irq_vector_init();
mpu_init();
Touch_Init(); // 瑙︽懜灞忓垵濮嬪寲
USART3_Init();
RANDOM_Init();
USBD_InitAsVcp ( );
}
void OS_CPU_SysTickHandler(void)
{
/* enter interrupt */
rt_interrupt_enter();
rt_tick_increase();
/* leave interrupt */
rt_interrupt_leave();
}
/**
* @brief System Clock Configuration
* @retval None
*/
__weak void SystemClock_Config(void)
{
}