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

📄 frmwrk.c

📁 这是s3c2410的几个基础实验代码,在ads下编译通过,上机调过,能用
💻 C
📖 第 1 页 / 共 2 页
字号:
    //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   LED3  IRQ_PCMCIA
    //Setting:  SPIMISO1  LCD_PWRDN EINT11   nSS0   Output   EINT8
    //Binary :     11         11   ,  10      11  ,  01        10
    rGPGCON = 0xff95ffb6;
    rGPGUP  = 0xffff;    // The pull up function is disabled GPG[15:0]

/*    
    //GPG4 Output Port [9:8] 01      -> LCD_PWREN Enable
    rGPGCON = (rGPGCON & 0xfffffcff) | (1<<8);
    rGPGDAT = (rGPGDAT & 0xffef) | (1<<4);
*/
    //=== 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
    	__vChangeMPllValue(0xa1,0x3,0x1);    	// FCLK=202.8MHz  
    	
        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();
        
		//lzfdebug
		
        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 + -