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

📄 mmu.c

📁 s2410测试程序,源码,用来深入了解三星2410芯片
💻 C
字号:
/************************************************ 
  NAME    : MMU.C
  DESC	  :
  Revision: 2002.2.28 ver 0.0
 ************************************************/

#include "def.h"
#include "option.h"
#include "2410addr.h"
#include "2410lib.h"
#include "2410slib.h"
#include "mmu.h"

void MMU_Init(void)
{
    int i,j;


    MMU_DisableDCache();
    MMU_DisableICache();

    for(i=0;i<64;i++)
    	for(j=0;j<8;j++)
    	    MMU_CleanInvalidateDCacheIndex((i<<26)|(j<<5));
    MMU_InvalidateICache();
    
    #if 0
    MMU_EnableICache(); 
    #endif
    
    MMU_DisableMMU();
    MMU_InvalidateTLB();
    
    MMU_SetMTT(0x00000000,0x00100000,0x30000000,RW_CNB);  
    MMU_SetMTT(0x00200000,0x0ff00000,0x00200000,RW_CNB);  
    MMU_SetMTT(0x10000000,0x17f00000,0x10000000,RW_NCNB); 
    MMU_SetMTT(0x18000000,0x1ff00000,0x18000000,RW_NCNB); 
    MMU_SetMTT(0x20000000,0x27f00000,0x20000000,RW_NCNB); 
    MMU_SetMTT(0x28000000,0x2ff00000,0x28000000,RW_NCNB); 
    MMU_SetMTT(0x30000000,0x30f00000,0x30000000,RW_CB);	  
    MMU_SetMTT(0x31000000,0x33e00000,0x31000000,RW_NCNB); 
    MMU_SetMTT(0x33f00000,0x33f00000,0x33f00000,RW_CB);   
    MMU_SetMTT(0x38000000,0x3ff00000,0x38000000,RW_NCNB); 
    
    MMU_SetMTT(0x40000000,0x47f00000,0x40000000,RW_NCNB); 
    MMU_SetMTT(0x48000000,0x5af00000,0x48000000,RW_NCNB); 
    MMU_SetMTT(0x5b000000,0xfff00000,0x5b000000,RW_FAULT);

    MMU_SetTTBase(_MMUTT_STARTADDRESS);
    MMU_SetDomain(0x55555550|DOMAIN1_ATTR|DOMAIN0_ATTR); 
    MMU_SetProcessId(0x0);
    MMU_EnableAlignFault();
    	
    MMU_EnableMMU();

#ifdef S3C2410_MMU_SUPPORT
#if MMU_CACHE == 1
    MMU_EnableICache();
    MMU_EnableDCache(); 
#endif
#endif

}    

void ChangeRomCacheStatus(int attr)
{
    int i,j;
    MMU_DisableDCache();
    MMU_DisableICache();

    for(i=0;i<64;i++)
    	for(j=0;j<8;j++)
    	    MMU_CleanInvalidateDCacheIndex((i<<26)|(j<<5));
    MMU_InvalidateICache();
    MMU_DisableMMU();
    MMU_InvalidateTLB();
    MMU_SetMTT(0x00000000,0x07f00000,0x00000000,attr);
    MMU_SetMTT(0x08000000,0x0ff00000,0x08000000,attr);
    MMU_EnableMMU();
	
	/*
    MMU_EnableICache();
    MMU_EnableDCache();
	*/
}    
    

void MMU_SetMTT(int vaddrStart,int vaddrEnd,int paddrStart,int attr)
{
    U32 *pTT;
    int i,nSec;
    pTT=(U32 *)_MMUTT_STARTADDRESS+(vaddrStart>>20);
    nSec=(vaddrEnd>>20)-(vaddrStart>>20);
    for(i=0;i<=nSec;i++)*pTT++=attr |(((paddrStart>>20)+i)<<20);
}

void MMU_Disable(void)
{
    int i,j;

    MMU_DisableDCache();
    MMU_DisableICache();

    for(i=0;i<64;i++)
    {
    	for(j=0;j<8;j++) 
   		{
    	    MMU_CleanInvalidateDCacheIndex((i<<26)|(j<<5));
		}
    }

    MMU_InvalidateICache();
    
    MMU_DisableMMU();
    MMU_InvalidateTLB();	
}


/*
*********************************************************************************************
*                                       __vPortInit
*
* Description: This routine sets the default GPIO condition.
*
* Arguments  : none.
*
* Return     : none.
*
* Note(s)    : 
*********************************************************************************************
*/

void PortInit(void)
{
		/*
        //CAUTION:Follow the configuration order for setting the ports. 
        // 1) setting value(GPnDAT) 
        // 2) setting control register  (GPnCON)
        // 3) configure pull-up resistor(GPnUP)  
		*/

		/*
        //32bit data bus configuration  
        //PORT A GROUP
        //Ports  : GPA22 GPA21  GPA20 GPA19 GPA18 GPA17 GPA16 GPA15 GPA14 GPA13 GPA12  
        //Signal : nFCE nRSTOUT nFRE   nFWE  ALE   CLE  nGCS5 nGCS4 nGCS3 nGCS2 nGCS1 
        //Binary :  1     1      1  , 1   1   1    1   ,  1     1     1     1
        //Ports  : GPA11   GPA10  GPA9   GPA8   GPA7   GPA6   GPA5   GPA4   GPA3   GPA2   GPA1  GPA0
        //Signal : ADDR26 ADDR25 ADDR24 ADDR23 ADDR22 ADDR21 ADDR20 ADDR19 ADDR18 ADDR17 ADDR16 ADDR0 
        //Binary :  1       1      1      1   , 1       1      1      1   ,  1       1     1      1         
		*/
        rGPACON = 0x7fffff; 

		/*
        //PORT B GROUP
        //Ports  : GPB10    GPB9    GPB8    GPB7    GPB6     GPB5    GPB4   GPB3   GPB2     GPB1      GPB0
        //Signal : nXDREQ0 nXDACK0 nXDREQ1 nXDACK1 nSS_KBD nDIS_OFF L3CLOCK L3DATA L3MODE nIrDATXDEN Keyboard
        //Setting: INPUT  OUTPUT   INPUT  OUTPUT   INPUT   OUTPUT   OUTPUT OUTPUT OUTPUT   OUTPUT    OUTPUT 
        //Binary :   00  ,  01       00  ,   01      00   ,  01       01  ,   01     01   ,  01        01  
		*/
        rGPBCON = 0x044555;
        rGPBUP  = 0x7ff;     /* The pull up function is disabled GPB[10:0] */
	
		/*
        //PORT C GROUP
        //Ports  : GPC15 GPC14 GPC13 GPC12 GPC11 GPC10 GPC9 GPC8  GPC7   GPC6   GPC5 GPC4 GPC3  GPC2  GPC1 GPC0
        //Signal : VD7   VD6   VD5   VD4   VD3   VD2   VD1  VD0 LCDVF2 LCDVF1 LCDVF0 VM VFRAME VLINE VCLK LEND  
        //Binary :  10   10  , 10    10  , 10    10  , 10   10  , 10     10  ,  10   10 , 10     10 , 10   10
		*/
        rGPCCON = 0xaaaaaaaa;       
        rGPCUP  = 0xffff;     /* The pull up function is disabled GPC[15:0] */

		/*
        //PORT D GROUP
        //Ports  : GPD15 GPD14 GPD13 GPD12 GPD11 GPD10 GPD9 GPD8 GPD7 GPD6 GPD5 GPD4 GPD3 GPD2 GPD1 GPD0
        //Signal : VD23  VD22  VD21  VD20  VD19  VD18  VD17 VD16 VD15 VD14 VD13 VD12 VD11 VD10 VD9  VD8
        //Binary : 10    10  , 10    10  , 10    10  , 10   10 , 10   10 , 10   10 , 10   10 ,10   10
		*/
        rGPDCON = 0xaaaaaaaa;       
        rGPDUP  = 0xffff;         /* The pull up function is disabled GPD[15:0] */


		/*
        //PORT E GROUP
        //Ports  : GPE15  GPE14 GPE13   GPE12   GPE11   GPE10   GPE9    GPE8     GPE7  GPE6  GPE5   GPE4  
        //Signal : IICSDA IICSCL SPICLK SPIMOSI SPIMISO SDDATA3 SDDATA2 SDDATA1 SDDATA0 SDCMD SDCLK I2SSDO 
        //Binary :  10     10  ,  10      10  ,  10      10   ,  10      10   ,   10    10  , 10     10  ,     
        //-------------------------------------------------------------------------------------------------------
        //Ports  :  GPE3   GPE2  GPE1    GPE0    
        //Signal : I2SSDI CDCLK I2SSCLK I2SLRCK     
        //Binary :  10     10  ,  10      10 
		*/
        rGPECON = 0xaaaaaaaa;       
        rGPEUP  = 0xffff;     /* The pull up function is disabled GPE[15:0] */

		/*
        //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; */
        rGPGCON = 0xff95ff9a;	/* nSS0 act as output pin */
        
        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)    : 
*********************************************************************************************
*/

void ChangeMPllValue(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)    : 
*********************************************************************************************
*/

void ChangeClockDivider(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();
}

⌨️ 快捷键说明

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