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

📄 memory.c

📁 基于MST-G240128点阵液晶的 状态机机制 人机界面四级滚屏菜单 源代码 ,带时间片机制模拟操作系统
💻 C
字号:
/****************************************************************************
 **
 ** 文件名:  momery.c
 ** 功能:    C8051Fxxx的SRAM驱动;
 ** 创建时间:2005.08.05

 ** 修改时间:2005.12.01
 ** 修改说明:

 ** 作者:    李立学
 ** 版权申明:可以拷贝,可以修改,但必须保留修改时间和作者信息
 ** 
 ****************************************************************************/


#include "LZK.H"


/****************************************************************************
** 函数名称: ExInSRAM_Select()
** 功能描述: 片外/片内SRAM选择
** 入口参数: ExInSRAM,
             0:选择片内SRAM;
				 1:选择片外SRAM;
** 出口参数: 无
** 全局变量: 无
** 调用模块: 无
** 说明:
****************************************************************************/
void ExInSRAM_Select(bit ExInSRAM)
{
   SFRPAGE = 0x00;
   if( ExInSRAM )         // ExInSRAM = 1: Use External SRAM,800k/S.
   {
      EMI0CF = 0x25;      // 0010_1101,  ALE: 2SYSCLK. External SRAM Only.     
      EMI0TC = 0x49;      // 01_0010_01: AST:1,nWR/nRd:3SYSCLK,AHT:1. 
   }
   else                   // ExInSRAM = 0: Use Internal SRAM,900k/S.
   {
      EMI0CF = 0x00;      // 0000 0000,  ALE: 1SYSCLK. Internal SRAM Only.    
      EMI0TC = 0x00;      // 00 0000 00: AST:0,nWR/nRd:0SYSCLK,AHT:0. 
   }
}

/****************************************************************************
** 函数名称: ExSRAM_PageSetting()
** 功能描述: 片外SRAM页选择,每页64kB
** 入口参数: PageNum,片外SRAM页号,0~31;
** 出口参数: 无
** 全局变量: ucP4DATA
** 调用模块: 无
** 说明:
****************************************************************************/
void ExSRAM_PageSetting(uint8 PageNum)
{
   uint8 ucTMP;

   if( PageNum >= 16 )
	  return;
   /*******************************
	 *** Switch to ExSRAM ***
	 *******************************/ 
   SFRPAGE = 0x00;
   EMI0CF  = 0x2d;      // 0010 1101,  ALE: 2SYSCLK. External SRAM Only.      
   EMI0TC  = 0x49;      // 01 0010 01: AST:1,nWR/nRd:3SYSCLK,AHT:1. 

   SFRPAGE = 0x0f;
   ucTMP = ucP4DATA & 0xC0 | PageNum;  // ExSRAM Page Caculate,nMCS = 0; 
   P4 = ucTMP;                         // ExSRAM Page Setting.
   SFRPAGE = 0x00;
}

/****************************************************************************
** 函数名称: InSRAM_SelfTest()
** 功能描述: 片内SRAM自检测试
** 入口参数: 无
** 出口参数: 0/1:自检错误/自检正常
** 全局变量: 无
** 调用模块: 无
** 说明:
****************************************************************************/
bit InSRAM_SelfTest(void)      // Toatal bytes: 4k( from 0x0000~0x0fff)
{
   uint16 data  i;  
   uint8  data  j,ucTMP;
   uint8  xdata *idata p1;
     
   p1 = 0x0000;
   for(i=0x0000;i<0x0fff;i++)
   {
      j = i >> 8;              // 256 bytes every SmallPage.
      *p1 = j;
      p1++;                    // Address Increase 1. 
   } 
   p1 = 0x0000;
   for(i=0x0000;i<0x0fff;i++)
   {
      j = i >> 8;
      ucTMP = *p1;
	  p1++;
	  if(ucTMP != j)
	    return 1;
   }
   p1 = 0x0000;
   for(i=0;i<0x0fff;i++)
   {
      *p1 = 0x55;
      p1++;
   }
   p1 = 0x0000;
   for(i=0;i<0x0fff;i++)
   {
      ucTMP = *p1;
      if(ucTMP != 0x55)
        return 1;
   }
   p1 = 0x0000;
   for(i=0;i<0x0fff;i++)
   {
      *p1 = 0xaa;
      p1++;
   }
   p1 = 0x0000;
   for(i=0;i<0x0fff;i++)
   {
      ucTMP = *p1;
   	  if(ucTMP != 0xaa)
        return 1;
   }
   j=0;
   p1 = 0x0000;
   for(i=0x0000;i<0x0fff;i++)
   {
      *p1 = j;
	  p1++;
      j++;
   }
   j=0;
   p1 = 0x0000;
   for(i=0x0000;i<0x0fff;i++)
   {
      ucTMP = *p1;
	  p1++;
	  if(ucTMP != j)
        return 1;        // Testing fail
      j++;
   } 
   return 0;             // Testing success
}

/****************************************************************************
** 函数名称: ExSRAM_SelfTest()
** 功能描述: 片外SRAM自检测试
** 入口参数: 无
** 出口参数: 0/1:自检错误/自检正常
** 全局变量: 无
** 调用模块: ExSRAM_PageSetting();
** 说明:
****************************************************************************/
bit ExSRAM_SelfTest(void)
{
   uint16 data i;  
   uint8  data j, ucTMP, PageNum;

   uint8  xdata *idata p1;
     
   for(PageNum=0;PageNum<8;PageNum++)  // Step 1;
   { 
      ExSRAM_PageSetting(PageNum);
      p1 = 0x0000;
      for(i=0x0000;i<0xffff;i++)
      {
	     j = i >> 8;              // 256 bytes every SmallPage.
         *p1 = j;
         p1++;                    // Address Increase 1. 
      } 
      p1 = 0x0000;
	  for(i=0x0000;i<0xffff;i++)
	  {
	     j = i >> 8;
         ucTMP = *p1;
		 p1++;
		 if(ucTMP != j)
		   return 1;
      }
   }
   for(PageNum=0;PageNum<8;PageNum++)  // Step 2; 
   {
      ExSRAM_PageSetting(PageNum);
      p1 = 0x0000;
      for(i=0;i<0xffff;i++)
	  {
	    *p1 = 0x55;
        p1++;
      }
      p1 = 0x0000;
      for(i=0;i<0xffff;i++)
      {
        ucTMP = *p1;
    	if(ucTMP != 0x55)
           return 1;
      }
   }
   for(PageNum=0;PageNum<8;PageNum++)  // Step 3;
   {
      ExSRAM_PageSetting(PageNum);
      p1 = 0x0000;
      for(i=0;i<0xffff;i++)
	  {
	     *p1 = 0xaa;
         p1++;
      }
      p1 = 0x0000;
      for(i=0;i<0xffff;i++)
      {
         ucTMP = *p1;
    	 if(ucTMP != 0xaa)
           return 1;
      }
   }
   for(PageNum=0;PageNum<8;PageNum++)  // Step 4;
   {
      ExSRAM_PageSetting(PageNum);
      j=0;
      p1 = 0x0000;
      for(i=0x0000;i<0xffff;i++)
      {
         *p1 = j;
		 p1++;
         j++;
      }
      j=0;
	  p1 = 0x0000;
      for(i=0x0000;i<0xffff;i++)
      {
         ucTMP = *p1;
		 p1++;
		 if(ucTMP != j)
           return 1;     // Testing fail
         j++;
      }
   } 
   ExSRAM_PageSetting(0);
   return 0;             // Testing success
}

⌨️ 快捷键说明

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