⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 armreg.c

📁 瑞星微公司RK27XX系列芯片的SDK开发包
💻 C
字号:
// armReg.c : 模拟 ARM REGISTER
//
/******************************************************************/

#include "include.h"

#include "..\os\Lib\core\core.h"

/******************************************************************/
//extern
void PCCEnterCritical(void);
void PCCExitCritical(void);
/**********************************************************************/

#define RPC_REGISTER_MAX   7

char*    RockPCRegRegName[] =
{
    "unkwon",
    "cpsr",
    "spsr",
    "pc",
    "lp",
    "sp",
    "sb"
};

/***********************************************************************/
//因为TASK 切换,必须给每个 TASK 定义一组寄存器.
REGISTER RockPCRegReg[OS_LOWEST_PRIO + 6][RPC_REGISTER_MAX] =
{

    {
        0,
        PC_ARMREG_SVC,
        PC_ARMREG_SVC,
        0,
        0,
        0,
        0}, // 0
    {
        0,
        PC_ARMREG_SVC,
        PC_ARMREG_SVC,
        0,
        0,
        0,
        0}, // 1
    {
        0,
        PC_ARMREG_SVC,
        PC_ARMREG_SVC,
        0,
        0,
        0,
        0}, // 2
    {
        0,
        PC_ARMREG_SVC,
        PC_ARMREG_SVC,
        0,
        0,
        0,
        0}, // 3
    {
        0,
        PC_ARMREG_SVC,
        PC_ARMREG_SVC,
        0,
        0,
        0,
        0}, // 4
    {
        0,
        PC_ARMREG_SVC,
        PC_ARMREG_SVC,
        0,
        0,
        0,
        0}, // 5
    {
        0,
        PC_ARMREG_SVC,
        PC_ARMREG_SVC,
        0,
        0,
        0,
        0}, // 6
    {
        0,
        PC_ARMREG_SVC,
        PC_ARMREG_SVC,
        0,
        0,
        0,
        0}, // 7
    {
        0,
        PC_ARMREG_SVC,
        PC_ARMREG_SVC,
        0,
        0,
        0,
        0}, // 8
    {
        0,
        PC_ARMREG_SVC,
        PC_ARMREG_SVC,
        0,
        0,
        0,
        0},  // 9  
    {
        0,
        PC_ARMREG_SVC,
        PC_ARMREG_SVC,
        0,
        0,
        0,
        0}, // 10
        {
        0,
        PC_ARMREG_SVC,
        PC_ARMREG_SVC,
        0,
        0,
        0,
        0
        }, // 11

        {
        0,
        PC_ARMREG_SVC,
        PC_ARMREG_SVC,
        0,
        0,
        0,
        0
        }, // 12

        {
        0,
        PC_ARMREG_SVC,
        PC_ARMREG_SVC,
        0,
        0,
        0,
        0
        }, // 13

        {
        0,
        PC_ARMREG_SVC,
        PC_ARMREG_SVC,
        0,
        0,
        0,
        0
        }, // 14
} ;

/**************************************************************/
REGISTER *RockPCRegGetAddrByName(char * creg)
{
    INT16U  ii ;
    for (ii = 1; ii < RPC_REGISTER_MAX ; ii++)
    {
        if (!stricmp(RockPCRegRegName[ii] , creg))
            return &RockPCRegReg[OSPrioCur][ii];
    }
    TR("ERROR CREG[%s]", creg);  //由于 creg 前面存在 %,会进行转义,倒置打印错误
    return &RockPCRegReg[OSPrioCur][0];
}

REGISTER RockPcRegRead_Creg(char* creg)
{
    REGISTER    reg = *RockPCRegGetAddrByName(creg);
    if (OSPrioCur != OS_IDLE_PRIO)
        return reg;
    return PC_ARMREG_SVC;
}

void RockPcRegWrite_Creg(char* creg  , REGISTER val)
{
     if( OSPrioCur == 3 && val == 0X93 )
        {
//        TR("Write Reg[%s] Value=0x%x", creg , val);
        }
    *RockPCRegGetAddrByName(creg) = val ;
    
}

void RockPcRegBitSet_Creg(char* creg  , INT16U bitNum)
{
    REGISTER  *reg;
    
    reg = RockPCRegGetAddrByName(creg) ;
    *reg = (*reg) | (0x0001 << bitNum) ;
    
}

void RockPcRegBitClear_Creg(char* creg  , INT16U bitNum)
{
    REGISTER *reg;
//       PCCEnterCritical();
    reg = RockPCRegGetAddrByName(creg) ;
    *reg = (*reg) & (~(0x0001 << bitNum)) ;
    //      PCCExitCritical();
}

void RockPcRegBitInvert_Creg(char* creg  , INT16U bitNum)
{
    REGISTER *reg = RockPCRegGetAddrByName(creg) ;
    *reg = (*reg) ^((0x0001 << bitNum)) ;
}


//重新打开所有的中断!!
void RockPcRegClearAll(void)
{
    INT16U  ii ;
    for (ii = 0; ii < OS_LOWEST_PRIO + 1 ; ii++)
    {
        RockPCRegReg[ii][1] = PC_ARMREG_SVC;
    }
}


/*--------------------------------------*/


⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -