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

📄 frmwrk.c

📁 ADS开发环境下移植的ucos实时操作系统
💻 C
📖 第 1 页 / 共 2 页
字号:
*
* Description: This routine sets the MPLL value.
*
* Arguments  : none.
*
* Return     : none.
*
* Note(s)    : 
*********************************************************************************************
*/

static void __vChangeMPllValue(int wMdiv, int wPdiv, int wSdiv)
{
        rMPLLCON = (wMdiv<<12) | (wPdiv<<4) | wSdiv;
}

/*
*********************************************************************************************
*                                       __vChangeClockDivider
*
* Description: This routine sets the HCLK and PCLK.
*
* Arguments  : none.
*
* Return     : none.
*
* Note(s)    : 
*********************************************************************************************
*/

static void __vChangeClockDivider(int wHdivn, int wPdivn)
{
        //        wHdivn,wPdivn FCLK:HCLK:PCLK
        //            0,0                1:1:1
        //            0,1                1:1:2
        //            1,0                1:2:2
        //            1,1                1:2:4
        rCLKDIVN = (wHdivn<<1) | wPdivn;

       if(wHdivn)
               MMU_SetAsyncBusMode();
       else
               MMU_SetFastBusMode();
}


/* ********************************************************************* */
/* Global functions */

/*
*********************************************************************************************
*                                       C_IRQHandler
*
* Description: This routine is the IRQ handler. Handles all peripheral interrupts.
*
* Arguments  : none.
*
* Return     : none.
*
* Note(s)    : 
*********************************************************************************************
*/

void C_IRQHandler(void)
{
        U32 wTemp;

        wTemp = rINTOFFSET<<2;

        ((void(*)(void))(*((U32 *)(aISR_EINT0+wTemp))))();
}

/*
*********************************************************************************************
*                                       FRMWRK_vStartTicker
*
* Description: This routine starts the Watchdog timer (WDT) for OS Tick.
*
* Arguments  : wTicksPerSec - Time ticks per second.
*
* Return     : none.
*
* Note(s)    : 
*********************************************************************************************
*/

void FRMWRK_vStartTicker(U32 wTicksPerSec)
{
#if OS_CRITICAL_METHOD == 3                         /* Allocate storage for CPU status register           */
        OS_CPU_SR  cpu_sr;
#endif

        OS_ENTER_CRITICAL();

        rWTCON = 0;                                 // Disable watchdog

        rSRCPND = BIT_WDT;                          // Clear any pending WDT int
        rINTPND = BIT_WDT;

        pISR_WDT = (U32)__vWDTInterrupt;

        rWTDAT = rWTCNT = PCLK / 16 / wTicksPerSec; //set up the WDT for wTicksPerSec

        rWTCON = (0<<8)|(1<<5)|(0<<3)|(1<<2)|(0<<0);// Enable WDT & interrupt on

        BIT_CLR(rINTMSK, BIT_WDT);                  // Enable WatchDog interrupts

        OS_EXIT_CRITICAL();
}

#if (INCLUDE_CONSOL == 1)
/*
*********************************************************************************************
*                                       FRMWRK_vRamTest
*
* Description: This routine is used do RAM test.
*
* Arguments  : pbID   - Test identification string.
*              wSAddr - RAM starting address.
*              wEAddr - RAM end address.
*
* Return     : none.
*
* Note(s)    : Do not test the following areas using this routine:
*                       1. Stack
*                       2. Software vector table
*                       3. C Variables (RW & ZI)
*********************************************************************************************
*/

void FRMWRK_vRamTest(U8 *pbID,U32 wSAddr,U32 wEAddr)
{
        U32 wI,wJ;
        U8 bError=0;
        
        CONSOL_Printf("\n%s(%08xh-%08xh):WR",pbID,wSAddr,wEAddr);
        for(wI=wSAddr;wI<wEAddr;wI+=4)
        {
                *((volatile unsigned *)wI)=wI;
        }
        CONSOL_Printf("\b\bRD");
        for(wI=wSAddr;wI<wEAddr;wI+=4)
        {
                wJ=*((volatile unsigned *)wI);
                if(wJ!=wI)bError=1;
        }

        if(bError==0)CONSOL_Printf("\b\bO.K.\n");
        else CONSOL_Printf("\b\bFAIL\n");
}
#endif

/*
*********************************************************************************************
*                                       C_vMain
*
* Description: This is the main C entry function.
*
* Arguments  : none.
*
* Return     : none.
*
* Note(s)    : 
*********************************************************************************************
*/

void C_vMain(void)
{
        __vChangeClockDivider(1,1);            // 1:2:4
        __vChangeMPllValue(84,1,1);            // FCLK=184 MHz

        rINTMOD     = 0x0;                     //All=IRQ mode
        rINTMSK     = BIT_ALLMSK;              //All interrupt is masked.
        rINTSUBMSK  = BIT_SUB_ALLMSK;          //All sub-interrupt is masked. <- April 01, 2002 SOP

        HALT_vInitARMModeHandlers();

        pISR_IRQ = (U32)UCOS_IRQHandler;

        __vPortInit();

#if (INCLUDE_CONSOL == 1)
        CONSOL_Select(__nConsolPort);
        CONSOL_Init(__nConsolBaud);
#endif

        MMU_Init();

#if (INCLUDE_CONSOL == 1)
        __vLogo();
#endif
        
        APP_vMain();

        SEND_STR("APP has ended...\n");
}

#if (INCLUDE_CONSOL == 1) & (CONSOL_VARARG == 1)
/*
*********************************************************************************************
*                                       printf
*
* Description: This is a stdio.h function.
*
* Arguments  : .
*
* Return     : Returns 0.
*
* Note(s)    : 
*********************************************************************************************
*/

int printf(const char *pbFmt,...)
{
        va_list pArg;
        char abString[256];

        va_start(pArg,pbFmt);
        vsprintf(abString,pbFmt,pArg);
        CONSOL_SendString(abString);
        va_end(pArg);

        return 0;
}
#endif /* (INCLUDE_CONSOL == 1) & (CONSOL_VARARG == 1) */


/* ********************************************************************* */

⌨️ 快捷键说明

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