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

📄 frmwrk.c

📁 请把uCosII的文件放到Core文件夹下。 共有三个任务
💻 C
📖 第 1 页 / 共 2 页
字号:
        //*** PORT F GROUP
        //Ports  : GPF7   GPF6   GPF5   GPF4      GPF3     GPF2  GPF1   GPF0
        //Signal : nLED_8 nLED_4 nLED_2 nLED_1 nIRQ_PCMCIA EINT2 KBDINT EINT0
        //Setting: Output Output Output Output    EINT3    EINT2 EINT1  EINT0
        //Binary :  01      01 ,  01     01  ,     10       10  , 10     10
        rGPFCON = 0x55aa;
        rGPFUP  = 0xff;     // The pull up function is disabled GPF[7:0]

        //*** PORT G GROUP
        //Ports  : GPG15 GPG14 GPG13 GPG12 GPG11    GPG10    GPG9     GPG8     GPG7      GPG6    
        //Signal : nYPON  YMON nXPON XMON  EINT19 DMAMODE1 DMAMODE0 DMASTART KBDSPICLK KBDSPIMOSI
        //Setting: nYPON  YMON nXPON XMON  EINT19  Output   Output   Output   SPICLK1    SPIMOSI1
        //Binary :   11    11 , 11    11  , 10      01    ,   01       01   ,    11         11
        //-----------------------------------------------------------------------------------------
        //Ports  :    GPG5       GPG4    GPG3    GPG2    GPG1    GPG0    
        //Signal : KBDSPIMISO LCD_PWREN EINT11 nSS_SPI IRQ_LAN IRQ_PCMCIA
        //Setting:  SPIMISO1  LCD_PWRDN EINT11   nSS0   EINT9    EINT8
        //Binary :     11         11   ,  10      11  ,  10        10
        rGPGCON = 0xff95ffba;
        rGPGUP  = 0xffff;    // The pull up function is disabled GPG[15:0]

        //*** PORT H GROUP
        //Ports  :  GPH10    GPH9  GPH8 GPH7  GPH6  GPH5 GPH4 GPH3 GPH2 GPH1  GPH0 
        //Signal : CLKOUT1 CLKOUT0 UCLK nCTS1 nRTS1 RXD1 TXD1 RXD0 TXD0 nRTS0 nCTS0
        //Binary :   10   ,  10     10 , 11    11  , 10   10 , 10   10 , 10    10
        rGPHCON = 0x2afaaa;
        rGPHUP  = 0x7ff;    // The pull up function is disabled GPH[10:0]
    
        //External interrupt will be falling edge triggered. 
        rEXTINT0 = 0x22222222;    // EINT[7:0]
        rEXTINT1 = 0x22222222;    // EINT[15:8]
        rEXTINT2 = 0x22222222;    // EINT[23:16]
}

/*
*********************************************************************************************
*                                       __vChangeMPllValue
*
* 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 Timer1 (TC1) in the Prescale mode 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 WD 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: WD, WD interrupts

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

        OS_EXIT_CRITICAL();
}

/*
*********************************************************************************************
*                                       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");
}

/*
*********************************************************************************************
*                                       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

        __vInitHaltHandlers();

        pISR_IRQ = (U32)UCOS_IRQHandler;

        __vPortInit();

        CONSOL_Select(__nConsolPort);
        CONSOL_Init(__nConsolBaud);

        MMU_Init();

        __vLogo();
        
        APP_vMain();

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

/*
*********************************************************************************************
*                                       printf
*
* Description: This is a stdio.h function.
*
* Arguments  : .
*
* Return     : Returns 0.
*
* Note(s)    : 
*********************************************************************************************
*/

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

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

        return 0;
}


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

⌨️ 快捷键说明

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