wang1216 发表于 2017-11-9 21:29:35

mc9s12操作eeprom

unsigned char write(unsigned long addr, unsigned long data)
{
      
      ESTAT_PVIOL = 1;
      ESTAT_ACCERR = 1;                            //clear error flags
      if(( ESTAT_PVIOL == 1) || (ESTAT_ACCERR == 1))
      {
                ESTAT_PVIOL = 1;
                ESTAT_ACCERR = 1;                        //clear error flags
            return(0);
      }

      while(!ESTAT_CBEIF);                        //if there are still some commands in the buffer, wait

      
                *(unsigned short *far)addr = 0xFF;
      ECMD = EE_CMD_SECTORERASE;
      ESTAT |= 0x80;                            //clear the interrupt flag
      if((ESTAT_PVIOL == 1) || (ESTAT_ACCERR == 1))//if there are erros
      {
                ESTAT_PVIOL = 1;
                ESTAT_ACCERR = 1;                        //clear error flags
                return(0);
      }

      while(!ESTAT_CBEIF);                        //if there are still some commands in the buffer, wait
while(!ESTAT_CCIF);


               
      if( (ESTAT_PVIOL == 1) || (ESTAT_ACCERR == 1))
      {
                ESTAT_PVIOL=1;
                ESTAT_ACCERR=1;                                 //clear error flags
                return(0);
      }
      
      while(!ESTAT_CBEIF){};                            //if there are still some commands in the buffer, wait
      *(unsigned short *far)addr = ((unsigned short *)&data);
                                  //write the data into the address
      ECMD = EE_CMD_WORDWRITE;
      ESTAT |= 0x80;                                    //clear the interrupt flag.
      if(ESTAT_PVIOL == 1 || ESTAT_ACCERR == 1)         //there are errors.
      {
                ESTAT_PVIOL=1;
                ESTAT_ACCERR=1;                                 //clear the error flags.
                return(0);
               
      }
      while(!ESTAT_CCIF);
      
      
      
      if( (ESTAT_PVIOL == 1) || (ESTAT_ACCERR == 1))
      {
                ESTAT_PVIOL=1;
                ESTAT_ACCERR=1;                                 //clear error flags
                return(0);
      }
      
      while(!ESTAT_CBEIF){};                            //if there are still some commands in the buffer, wait
      *(unsigned short *far)(addr+2) = ((unsigned short *)&data);                                    //write the data into the address
      ECMD = EE_CMD_WORDWRITE;
      ESTAT |= 0x80;                                    //clear the interrupt flag.
      if(ESTAT_PVIOL == 1 || ESTAT_ACCERR == 1)         //there are errors.
      {
                ESTAT_PVIOL=1;
                ESTAT_ACCERR=1;                                 //clear the error flags.
                return(0);
               
      }
      while(!ESTAT_CCIF);
      return 1;

}
地址从0x13f000开始
不知道能不能用?
页: [1]
查看完整版本: mc9s12操作eeprom