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

📄 l2_flash.c

📁 凌阳MP3 spSPCA755yuanma
💻 C
字号:
/*++

Copyright (c) 2001 Sunplus Technology Co., Ltd.

Module Name:

        L2_flash.c

Abstract:

        Module related to L2 flash functions

Environment:

        Keil C51 Compiler

Revision History:

        11/12/2001      WZH    created                 

--*/
//=============================================================================
//Header file
//=============================================================================
#include "general.h"

//=============================================================================
//Symbol
//=============================================================================
//-----------------------------------------------------------------------------
//Constant
//-----------------------------------------------------------------------------

//-----------------------------------------------------------------------------
//Variable
//-----------------------------------------------------------------------------
//=============================================================================
//Program       
//=============================================================================

//-----------------------------------------------------------------------------
//L2_FlashMode
//-----------------------------------------------------------------------------
/* 
routine description:
  Flash type selection
arguments:
  ActFlash : active flash type
          0: None (fmgpio[29:0] is used as GPIO's)
          1: NAND gate flash
		2: SMC 
		3: CF (True IDE mode)
		4: CF (Memory mode)
		5: SD
		6: MMC
		7: SPI interface
		8: NX  interface
  InactFlash : inactive flash type
          0: None (only one storage media type use in SPCA533)
          1: NAND gate flash
		2: SMC 
		3: CF (True IDE mode)
		4: CF (Memory mode)
		5: SD
		6: MMC
		7: SPI interface
		8: NX  interface
  PageSize : page size of active flash
          0: 256 bytes/page
		1: 512 bytes/page
		2: 1024 bytes/page
return value:
  0x00	 - success
  others - error

*/

UCHAR L2_FlashMode(UCHAR ActFlash, UCHAR InactFlash, UCHAR PageSize) USING_0
{
	BYTE inActieFlag;

	
    //printf("L2_FlashMode: (Active Flash Type=%bx,Inactive Flash Type= %bx)\n",ActFlash,InactFlash);

	#if 0
	switch(InactFlash)
	    {
	        case 0: break;
		case 1: XBYTE[0x2401] |= 0x01; XBYTE[0x2405] |= 0x01; break;
		case 2: XBYTE[0x2401] |= 0x04; XBYTE[0x2405] |= 0x04; break;
		case 3: XBYTE[0x2401] |= 0x0C; XBYTE[0x2405] |= 0x0C; break;
		case 4: XBYTE[0x2401] |= 0x04; XBYTE[0x2405] |= 0x04; break;
		case 5: XBYTE[0x2401] |= 0x08; XBYTE[0x2405] |= 0x08; break;
		case 6: XBYTE[0x2401] |= 0x0C; XBYTE[0x2405] |= 0x0C; break;
//Chamber@1223
//		case 7: XBYTE[0x2401] |= 0x04; XBYTE[0x2405] |= 0x04; break;
//		case 8: XBYTE[0x2401] |= 0x08; XBYTE[0x2405] |= 0x08; break;
	        default : return 0x01; break;
	    }
	#endif

	#if 1
	switch(InactFlash)
	    {
	        case 0: break;
		case 1: inActieFlag = 0x01; break;
		case 2: inActieFlag = 0x04; break;
		case 3: inActieFlag = 0x0C; break;
		case 4: inActieFlag = 0x04; break;
		case 5: inActieFlag = 0x0C; break;
		case 6: inActieFlag = 0x0C; break;
//Chamber@1223
//		case 7: inActieFlag = 0x04 break;
//		case 8: inActieFlag = 0x08 break;
	        default : return 0x01; break;
	    }
		XBYTE[0x2401] &= 0xF0;
		XBYTE[0x2401] |= inActieFlag;
		XBYTE[0x2405] &= 0xF0;
		XBYTE[0x2405] |= inActieFlag;	
		
	#endif

	switch(ActFlash)
	    {
	        case 0: XBYTE[0x2400] = 0x00;
		case 1: XBYTE[0x2400] = 0x11; XBYTE[0x2422] = 0x00; break;
		case 2: XBYTE[0x2400] = 0x11; XBYTE[0x2422] = 0x01; break;
		case 3: XBYTE[0x2400] = 0x43; XBYTE[0x2434] &= 0xfb; break;
		case 4: XBYTE[0x2400] = 0x43; XBYTE[0x2434] |= 0x04; break;
		case 5: XBYTE[0x2400] = 0x06; XBYTE[0x2450] = 0x03; break;
		case 6: XBYTE[0x2400] = 0x06; XBYTE[0x2450] = 0x03; break;
//Chamber@1223
//		case 7: XBYTE[0x2400] = 0x04; XBYTE[0x2446] = 0x00; XBYTE[0x2447] = 0x0d; XBYTE[0x2448] = 0x00; break;
//		case 8: XBYTE[0x2400] = 0x05; XBYTE[0x2446] = 0x00; XBYTE[0x2447] = 0x02; break;
	        
                default : return 0x01; break;
	    }

        switch(PageSize)
            {
//Chamber@1223
//                case 0: XBYTE[0x24A3] = 0x00; XBYTE[0x2455] = 0x00; XBYTE[0x2456] = 0x01; break;
		case 1: XBYTE[0x24A3] = 0x01; XBYTE[0x2455] = 0x00; XBYTE[0x2456] = 0x02; break;
//Chamber@1223
//		case 2: XBYTE[0x24A3] = 0x02; XBYTE[0x2455] = 0x00; XBYTE[0x2456] = 0x04; break;
		
                default : return 0x01; break;
            }
  
    //PRINT_L2("        L2_FlashMode: Exit L2_FlashMode\n");

    return L2K_SUCCESS;
}


#if (SMC || NAND)	// 110102@wyeo
//-----------------------------------------------------------------------------
//L2_ReadECC
//-----------------------------------------------------------------------------
/* 
routine description:
  Read ECC code
arguments:
  ECCCount: the number of ECC code (3/6/12 is valid), otherwise invalid 
  ECCData : the ECC data

return value:
  0x00	 - success
  others - error

*/

UCHAR L2_ReadECC(UCHAR ECCCount, UCHAR* ECCData) USING_0
{

	//PRINT_L2("        L2_ReadECC: Enter L2_ReadECC(ECC count=8'h%x)\n",(USHORT)ECCCount);

    if(ECCCount == 12) {
	                    ECCData[11]=XBYTE[0x24AF]; ECCData[10]=XBYTE[0x24AD]; ECCData[9]=XBYTE[0x24AE]; 
	                    ECCData[8]=XBYTE[0x24AC]; ECCData[7]=XBYTE[0x24AA]; ECCData[6]=XBYTE[0x24AB];  
					   }
    if((ECCCount == 6)||(ECCCount == 12))  
	                   {ECCData[5]=XBYTE[0x24A9]; ECCData[4]=XBYTE[0x24A7]; ECCData[3]=XBYTE[0x24A8];}
    if((ECCCount == 6)||(ECCCount == 12)||(ECCCount == 3))  
	                   {ECCData[2]=XBYTE[0x24A6]; ECCData[1]=XBYTE[0x24A4]; ECCData[0]=XBYTE[0x24A5];}

    //PRINT_L2("        L2_ReadECC: Exit L2_ReadECC\n");

    return L2K_SUCCESS;
}


//-----------------------------------------------------------------------------
//L2_ClearECC
//-----------------------------------------------------------------------------
/* 
routine description:
  Restart ECC code calculation
arguments:
  None
return value:
  None

*/

void L2_ClearECC(void) USING_0
{
//PRINT_L2("        L2_ClearECC: Enter L2_ClearECC\n");
XBYTE[0x24A0] = 0x01;
//PRINT_L2("        L2_ClearECC: Exit L2_ClearECC\n");
}


//-----------------------------------------------------------------------------
//L2_ECCMode
//-----------------------------------------------------------------------------
/* 
routine description:
  Enable or disable ECC generator
arguments:
  Mode : 0 enable ECC generator
         1 disable ECC generator
    
return value:
  None

*/

void L2_ECCMode(UCHAR Mode) USING_0
{
	XBYTE[0x24A2] = 0x00; 	//WWTEST
	return;			//WWTEST

//PRINT_L2("        L2_ECCMode: Enter L2_ECCMode(Mode=8'h%x)\n",(USHORT)Mode);
if(Mode) XBYTE[0x24A2] = 0x01;
else     XBYTE[0x24A2] = 0x00;
//PRINT_L2("        L2_ECCMode: Exit L2_ECCMode\n");
}

#endif // 110102@wyeo	






⌨️ 快捷键说明

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