mirror of
https://gitee.com/cosyos/cosyos.git
synced 2026-08-17 08:42:13 +08:00
删除文件 Port/port_x32/RISC-V32/port_rv32.h
This commit is contained in:
@@ -1,175 +0,0 @@
|
||||
/**************************************************************************//**
|
||||
* @item CosyOS-III Port
|
||||
* @file port_rv32.h
|
||||
* @brief RISC-V32 Core Port File
|
||||
* @author 迟凯峰
|
||||
* @version v3.0.1
|
||||
* @date 2026.07.29
|
||||
******************************************************************************/
|
||||
|
||||
#ifndef __PORT_RV32_H
|
||||
#define __PORT_RV32_H
|
||||
|
||||
/* INCLUDE */
|
||||
#include "port_x32.h"
|
||||
#include "mcucfg_rv32.h"
|
||||
#include SYSCFG_STANDARDHEAD
|
||||
#include "os_cmsis.h"
|
||||
#include "os_stack.h"
|
||||
|
||||
|
||||
/* CONST & ATTRIBUTE */
|
||||
#define MCUCFG_STACK_ALIGN __ALIGNED(16)
|
||||
#define MCUCFG_TASKSTACK_REALLOC __DISABLED__
|
||||
#if (MCUCFG_FPU_AUTOSTORE == __ENABLED__)
|
||||
#define MCUCFG_CALLEE_PUSH_FPU (32 * MCUCFG_FPUBYTES)
|
||||
#else
|
||||
#define MCUCFG_CALLEE_PUSH_FPU 0
|
||||
#endif
|
||||
#if !defined ( __riscv_32e )
|
||||
#define MCUCFG_CALLEE_PUSH_REG (32 * MCUCFG_REGBYTES)
|
||||
#else
|
||||
#define MCUCFG_CALLEE_PUSH_REG (16 * MCUCFG_REGBYTES)
|
||||
#endif
|
||||
#define MCUCFG_CALLEE_PUSH (MCUCFG_CALLEE_PUSH_FPU + MCUCFG_CALLEE_PUSH_REG)
|
||||
#define MCUCFG_BASICSTACKSIZE (MCUCFG_CALLEE_PUSH)
|
||||
|
||||
|
||||
/* TaskCtrl */
|
||||
#define mTaskCtrl_Head_ m_sp_t psp;
|
||||
#define mTaskCtrl_Tail_ m_sp_t psp_top;
|
||||
|
||||
|
||||
/*
|
||||
* SysTick
|
||||
*/
|
||||
#if (MCUCFG_SYSTICK_AUTOCONFIG == __ENABLED__)
|
||||
/* 自动配置 */
|
||||
#define MCUCFG_SYSTICK_COUNTMODE 2 /*!< 计数方式,2:从重装载值向下计数至零溢出 */
|
||||
#define MCUCFG_SYSTICK_LIMITVALUE (1UL << 32) /*!< 极限值 */
|
||||
#define MCUCFG_SYSTICK_CURRVALUE *(volatile s_u32_t *)(0xE000F008) /*!< 当前值寄存器 */
|
||||
#define MCUCFG_SYSTICK_CLK MCUCFG_SYSCLK
|
||||
#define MCUCFG_SYSTICK_COUNT1CYC (SYSCFG_SYSTICK_CYCLE * MCUCFG_SYSTICK_CLK * 1UL)
|
||||
#define MCUCFG_SYSTICK_LOADVALUE (MCUCFG_SYSTICK_COUNT1CYC - 1)
|
||||
#define MCUCFG_SYSTICK_MAXVALUE MCUCFG_SYSTICK_LOADVALUE
|
||||
#define MCUCFG_SYSTICK_MINVALUE 0
|
||||
#if (MCUCFG_SYSTICK_COUNT1CYC > MCUCFG_SYSTICK_LIMITVALUE)
|
||||
#error 系统滴答定时器溢出。
|
||||
#endif
|
||||
#define mSysTick_SetLOAD() *(volatile s_u32_t *)(0xE000F010) = MCUCFG_SYSTICK_LOADVALUE
|
||||
#define mSysTick_SetCTRL() *(volatile s_u32_t *)(0xE000F000) = 0x3F
|
||||
#define mSysTick_INIT() \
|
||||
do{ \
|
||||
mSysTick_SetPRI(); \
|
||||
mSysTick_SetLOAD(); \
|
||||
mSysTick_SetCTRL(); \
|
||||
}while(false)
|
||||
|
||||
#else
|
||||
/* 手动配置 */
|
||||
#if (MCUCFG_SYSTICK_COUNTMODE == 1 || MCUCFG_SYSTICK_COUNTMODE == 2)
|
||||
#define MCUCFG_SYSTICK_MAXVALUE (MCUCFG_SYSTICK_LOADVALUE)
|
||||
#define MCUCFG_SYSTICK_MINVALUE 0
|
||||
#define MCUCFG_SYSTICK_COUNT1CYC (MCUCFG_SYSTICK_LOADVALUE + 1UL)
|
||||
|
||||
#elif (MCUCFG_SYSTICK_COUNTMODE == 3 || MCUCFG_SYSTICK_COUNTMODE == 4)
|
||||
#define MCUCFG_SYSTICK_LIMITVALUE (1UL << MCUCFG_SYSTICK_BITS)
|
||||
#define MCUCFG_SYSTICK_MAXVALUE (MCUCFG_SYSTICK_LIMITVALUE)
|
||||
#define MCUCFG_SYSTICK_MINVALUE (MCUCFG_SYSTICK_LOADVALUE)
|
||||
#define MCUCFG_SYSTICK_COUNT1CYC (MCUCFG_SYSTICK_MAXVALUE - MCUCFG_SYSTICK_MINVALUE)
|
||||
#endif
|
||||
|
||||
#define mSysTick_INIT() mSysTick_SetPRI()
|
||||
#endif
|
||||
|
||||
|
||||
/*
|
||||
* SysTick_Handler + PendSV_Handler
|
||||
*/
|
||||
|
||||
/* SysTick */
|
||||
#define mSysTick_SetPRI() \
|
||||
*(volatile s_u8_t *)(0xE000E400 + MCUCFG_TIMn_IRQn) = 0xFF
|
||||
|
||||
/* PendSV */
|
||||
#define mPendSV_SetPRI() \
|
||||
*(volatile s_u8_t *)(0xE000E400 + MCUCFG_XXXx_IRQn) = 0xFF
|
||||
|
||||
#define mPendSV_Set() \
|
||||
*(volatile s_u32_t *)(0xE000E200 + MCUCFG_XXXx_IRQn / 32 * 4) = 0x01UL << (MCUCFG_XXXx_IRQn % 32)
|
||||
|
||||
#define mPendSV_Clear() \
|
||||
*(volatile s_u32_t *)(0xE000E280 + MCUCFG_XXXx_IRQn / 32 * 4) = 0x01UL << (MCUCFG_XXXx_IRQn % 32)
|
||||
|
||||
#define mPendSV_INIT() mPendSV_SetPRI()
|
||||
|
||||
/* 内核锁 */
|
||||
#define mSysINT_Disable() \
|
||||
*(volatile s_u32_t *)(0xE000E180 + MCUCFG_XXXx_IRQn / 32 * 4) = (0x01UL << (MCUCFG_XXXx_IRQn % 32)) \
|
||||
| (0x01UL << (MCUCFG_TIMn_IRQn % 32))
|
||||
#define mSysINT_Enable() \
|
||||
*(volatile s_u32_t *)(0xE000E100 + MCUCFG_XXXx_IRQn / 32 * 4) = (0x01UL << (MCUCFG_XXXx_IRQn % 32)) \
|
||||
| (0x01UL << (MCUCFG_TIMn_IRQn % 32))
|
||||
__STATIC_FORCEINLINE void __mu_disable_sysirq(void)
|
||||
{
|
||||
mSysINT_Disable();
|
||||
__ASM("fence.i");
|
||||
}
|
||||
|
||||
__STATIC_FORCEINLINE void __mu_enable_sysirq(void)
|
||||
{
|
||||
__ASM("fence rw, rw");
|
||||
mSysINT_Enable();
|
||||
}
|
||||
|
||||
|
||||
/* CosyOS初始化 */
|
||||
#define mCosyOS_INIT() \
|
||||
do{ \
|
||||
mPendSV_INIT(); \
|
||||
mSysTick_INIT(); \
|
||||
}while(false)
|
||||
|
||||
|
||||
/* CosyOS低功耗 */
|
||||
#define mCosyOS_IDLE() __WFI()
|
||||
|
||||
|
||||
/* 任务栈 */
|
||||
#define MCUCFG_TASKSTACK_MODE __PSP__
|
||||
|
||||
#define mTaskStack_Init() \
|
||||
do{ \
|
||||
node_news->psp_top = (m_sp_t)node_news->bsp + node_news->stacksize; \
|
||||
if(node_news->psp_top % 16){ \
|
||||
node_news->psp_top /= 16; \
|
||||
node_news->psp_top *= 16; \
|
||||
node_news->stacksize = node_news->psp_top - (m_sp_t)node_news->bsp; \
|
||||
} \
|
||||
mTaskStack_CheckInit(); \
|
||||
mTaskStack_Reset(); \
|
||||
}while(false)
|
||||
|
||||
#define mTaskStack_Reset() \
|
||||
do{ \
|
||||
node_news->psp = node_news->psp_top; \
|
||||
node_news->psp -= MCUCFG_BASICSTACKSIZE; \
|
||||
*(volatile s_u32_t *)(node_news->psp + MCUCFG_CALLEE_PUSH_FPU) = (s_u32_t)node_news->entry; /* x0(mepc) */ \
|
||||
}while(false)
|
||||
|
||||
/* 栈监控 */
|
||||
#if (SYSCFG_DEBUGGING == __ENABLED__)
|
||||
#define mTaskStack_Check0() s_task_current->psp_top - __get_SP() + MCUCFG_CALLEE_PUSH_FPU
|
||||
#define mTaskStack_Check() s_stack_check((s_u8_t *)(s_task_current->psp_top), s_task_current->stacksize)
|
||||
#define mTaskStack_CheckInit() s_stack_check_init((s_u8_t *)(node_news->psp_top), node_news->stacksize)
|
||||
|
||||
#else
|
||||
#define mTaskStack_CheckInit()
|
||||
#endif
|
||||
|
||||
|
||||
/* 内存访问屏障 */
|
||||
#define __mx_MMB() __ASM("fence rw, rw")
|
||||
|
||||
|
||||
#endif
|
||||
Reference in New Issue
Block a user