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

📄 pctimer.c

📁 瑞星微公司RK27XX系列芯片的SDK开发包
💻 C
字号:
// pctimer.c : 模拟Timer 中断计时
// 或者模拟所有的外围设备寄存器.
//通过地址来定位.

/******************************************************************/
#include "include.h"
#include "hw_interrupt.h"
/******************************************************************/

#define PCTM_ENABLE                                 (0X0001<<0) // TIMER 允许.
#define PCTM_INTERRUPT                              (0X0001<<1) // 正在产生中断.

typedef struct _PCTIMER_REGISTER
{
    PERIPH_REG          pcTimerMask;
    PERIPH_REG          pcTimerCurCnt;
    PERIPH_REG          pcTimerInitCnt;
} PCTIMER_REGISTER , *PPCTIMER_REGISTER;

PPCTIMER_REGISTER       gpPCTimerRegister = (PPCTIMER_REGISTER)TMRCTRL_BASE;
INT32U                  PCTimerOSStartFlag = 0;
INT32U                  PCTimerRouting = 0;
/******************************************************************/
BOOL Timer_PowerOnInit(UINT8 index, UINT32 mstick)
{
    if (index >= TIMER_COUNT)
        return FALSE;
    gpPCTimerRegister[index].pcTimerMask = PCTM_ENABLE;
    gpPCTimerRegister[index].pcTimerInitCnt = gpPCTimerRegister[index].pcTimerCurCnt = mstick / 5;
    return TRUE;
}

void Timer_ClearIntrFlag(UINT8 index)
{
    gpPCTimerRegister[index].pcTimerMask &= (~PCTM_INTERRUPT);
}

UINT32 Timer_GetCount(UINT8 index)
{
    return gpPCTimerRegister[index].pcTimerCurCnt;
}


void PCTimerUpdate(void)
{
    INT32U      index = 0;
    if ((!PCTimerOSStartFlag) || PCTimerRouting)
        return;
    PCTimerRouting = 1;
    while (index < TIMER_COUNT)
    {

        if ((gpPCTimerRegister[index].pcTimerMask  & PCTM_ENABLE))
        {
            gpPCTimerRegister[index].pcTimerCurCnt --;
            if (gpPCTimerRegister[index].pcTimerCurCnt == 0)
            {
                gpPCTimerRegister[index].pcTimerCurCnt = gpPCTimerRegister[index].pcTimerInitCnt;
                gpPCTimerRegister[index].pcTimerMask |= PCTM_INTERRUPT;
                PCCoreSystemRestart(0);
                PCIGenerateIRQ(INTC_TMR0 + index);
            }
        }
        index++;
    }
    PCTimerRouting = 0;
}

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


⌨️ 快捷键说明

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