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

📄 1m.c

📁 旺宏 MXIC 28F1000 flash ROM 燒錄範例程序, 含C & ASM源碼
💻 C
字号:
//******************************************************************
//  MXF28F1000P: C sample code
//******************************************************************
#define Mode_1M_2M 0x02
#define f1m_Read_ID_CMD 0x90
#define f1m_Auto_Chip_Erase_CMD 0x30
#define f1m_Reset_CMD 0xff
#define f1m_Block_Erase_CMD 0x20
#define f1m_Block_Erase_CMD2 0xD0
#define f1m_Program_CMD 0x40
//******************************************************************
// hardware setting
// dependent MXIC's evaluation
//******************************************************************
#define Max_1M_Address 0x1FFFFL
#define Max_2M_Address 0x3FFFFL
#define Win64k 0x00
#define Win32k 0x01
#define Win16k 0x02
#define ID_MXIC 0xC2
#define ID_MX28F1000P 0x1A
#define ID_MX28F2000P 0x2A
-----------------------------
//******************************************************************
// function: Read ID Code
// command : write [xxxx],00H
// m_id - manufacture ID
// d_id - device ID
//******************************************************************
f1m_Read_ID()
{
unsigned d_id,m_id;
  outportb(ControlPort,Mode_1M_2M);
  fmemptr[0]=f1m_Read_ID_CMD;
  m_id=fmemptr[0];
  fmemptr[0]=f1m_Read_ID_CMD;
  d_id=fmemptr[1];
}
-----------------------------
//******************************************************************
// function: Auto Chip Erase:
// command:  Write [XXXX],30H
//	     Write [XXXX],30H
//******************************************************************
f1m_Chip_Erase()
{
 fmemptr[0]=f1m_Auto_Chip_Erase_CMD;
 fmemptr[0]=f1m_Auto_Chip_Erase_CMD;
 Toggle_Polling();
 if( !((fmemptr[0])& 0x80))
  {
   f1m_ResetSTM();
   printf("Auto chip erase failed");
   return -1;
  }
 f1m_ResetSTM();
 printf("Auto chip erase completed");
}
-----------------------------
//******************************************************************
// function:Toggle Bit Checking
// description: wait till DQ6 stops toggling fortwo consecutive
//              read cycles
//******************************************************************
Toggle_Polling(void)
{
 unsigned char data;
 do
  {
   data=fmemptr[0];
   }while((data ^ fmemptr[0])&0x40);
 return(0);
}
-----------------------------
//******************************************************************
// function: Auto Block Erase:
//  command: Write [XXXX],20H
//	     Write [blk Addr],D0H
// input: Address - block address
//        Winselect - select window
//******************************************************************
int f1m_Block_Erase ()
{
 int Winselect=0;
 if (Address > Max_1M_Address)
   {
    printf("Address Error!!");
    return -1;
   }
// get selected memory window no.
 while (Address > Winsize_64K )
   {
    Address = Address-Winsize_64K;
    Winselect ++;
   }
 outport(WindowPort,Winselect);
 fmemptr[0]=f1m_Block_Erase_CMD;
 fmemptr[Address]=f1m_Block_Erase_CMD2;
 delay_100us(2); // delay 200us
 Toggle_Polling();
 if ( !(fmemptr[Address] & 0x80) )
  {
   f1m_ResetSTM();
   printf("Block Erase Fail");
   return -1;
  }
  f1m_ResetSTM();
  printf("Block Erase Completed");
  return 0;
}
-----------------------------
//******************************************************************
// function: Reset
// command:  Write [XXXX],FFH
//	     Write [XXXX],FFH
//******************************************************************
f1m_ResetSTM(void)
{
 fmemptr[0]=f1m_Reset_CMD;
 fmemptr[0]=f1m_Reset_CMD;
 return (0);
}
-----------------------------
//******************************************************************
// function: Read Memory
// command : Write [XXXX],00H
// input:  address
// output: rbyte - read data
//******************************************************************
unsigned char f1m_Read_Byte()
{
  int Winselect;
  unsigned char rbyte;
  Winselect = 0;
  message[0]='\0';
  if (address > Max_1M_Address)
    {
     printf("address error.");
     return -1;
    }
  while (address > Winsize_64K )
    {
     address=address-Winsize_64K;
     Winselect ++;
    }
  bstart=clock();
  outport(WindowPort,Winselect);
  rbyte=fmemptr[byte_address];
  bend=clock();
  return(rbyte);
}
-----------------------------
//******************************************************************
// function:Auto Program:
// command: Write [XXXX],40H
//	    Write [Addr],Data
// input :addr - program address
//       :data - program data
//******************************************************************
int f1m_Byte_Program ()
{
  unsigned char databuf;
  int Winselect;
  Winselect = 0;
  message[0]='\0';
  if (prog_addr > Max_1M_Address)
    {
     printf("address error.");
     return -1;
    }
  while (addr > Winsize_64K )
    {
     addr = addr - Winsize_64K;
     Winselect ++;
    }
  outportb(WindowPort,Winselect);
  fmemptr[0]=f1m_Program_CMD;
  fmemptr[addr]=data;
  do
    {
     databuf=fmemptr[0];
    } while( (databuf ^ fmemptr[0]) &  0x40);
  if (data!=fmemptr[addr])
     {
     f1m_ResetSTM();
     printf("Write error !");
     return  -1;
     }
   return(0);
}
---------------------------

⌨️ 快捷键说明

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