| 本帖最后由 LOVE_ELEC 于 2013-2-22 11:04 编辑 
 tj_zhaozq 发表于 2013-2-21 22:16  把详细情况和状态说清楚些。
 1. 程序的功能。
 2. 有没有使用外部资源。
 程序功能是对芯片内部的Flash的擦出和写操作!(所用芯片型号为 MC9S12XDT256)
 工作流程:操作地址、页、写入数据、写入数据个数设置——Flash擦除—— Flash写(主函数部分)
 
 源码:(该部分代码全部存在 RAM 中)
 写Flash函数部分:
 ErrorStatus Flash_Program(Transfer_Information Transfer_InformationStruct)
 {
 byte Inum;
 Transfer_Information *Tinformation;
 Tinformation = &Transfer_InformationStruct;
 while (!FCLKDIV_FDIVLD)
 {
 FLASH_READ_REG8(&FCLKDIV);
 }
 while (!FSTAT_CBEIF)
 {
 FLASH_READ_REG8(&FSTAT);
 }
 if (FSTAT_PVIOL || FSTAT_ACCERR)
 {
 FLASH_WRITE_REG8(FSTAT,0x30);
 }
 FLASH_WRITE_REG8(FPROT,NoProtection); /*Set Flash Protect Range*/
 for (Inum = 0; Inum < Tinformation->WByteNum; Inum++)
 {
 PPAGE = Tinformation->Page;
 
 *((volatile word *)(Tinformation->Addr)) = (*(Tinformation->DFaddr));
 FLASH_WRITE_REG8(FCMD,Flash_Command_Program);
 FSTAT |= 0x80;
 while (!FSTAT_CBEIF)
 {
 FLASH_READ_REG8(&FSTAT);
 }
 Tinformation->Addr += 2;
 Tinformation->DFaddr++;
 }
 while (!FSTAT_CCIF)
 {
 FLASH_READ_REG8(&FSTAT);
 }
 return SUCCESS;
 }
 擦出Flash函数部分:
 ErrorStatus Flash_SectorErase(Transfer_Information Transfer_InformationStruct)
 {
 Transfer_Information *Tinformation;
 Tinformation = &Transfer_InformationStruct;
 while (!FCLKDIV_FDIVLD)
 {
 FCLKDIV = FCLKDIV_FDIV5_MASK | FCLKDIV_FDIV3_MASK | FCLKDIV_FDIV1_MASK;
 FLASH_READ_REG8(&FCLKDIV);
 }
 while (!FSTAT_CBEIF)
 {
 FLASH_READ_REG8(&FSTAT);
 }
 if (FSTAT_PVIOL || FSTAT_ACCERR)
 {
 FLASH_WRITE_REG8(FSTAT,0x30);
 }
 PPAGE = Tinformation->Page;
 *((volatile word *)(Tinformation->Addr)) = 0xFF;  /*OxFF 将被忽略*/
 
 FLASH_WRITE_REG8(FCMD,Flash_Command_SectorErase);
 FSTAT |= 0x80;
 while (!FSTAT_CCIF);
 return SUCCESS;
 }
 请指教!
 
 
 
 |