您好 JingJing Zhong,
U32 FlashCmdSeq(U8 cmd_code, //command code
FlashCmdSeq_ADDR ADDR, //address
FlashCmdSeq_DATA WtoWr, //word to write
U8 index) //command count
{
U8 counter,err;
err=E_OK;
for(counter=0; counter<index; counter++)
{
switch (counter)
{
case 0: err=SWDWrAPReg(ahbap_rw_TAR, FTFA_FCCOB0);
err=SWDWrAPReg(ahbap_rw_DRW, cmd_code);
break;
case 1: err=SWDWrAPReg(ahbap_rw_TAR, FTFA_FCCOB1);
err=SWDWrAPReg(ahbap_rw_DRW, ADDR.Addr24_16);
break;
case 2: err=SWDWrAPReg(ahbap_rw_TAR, FTFA_FCCOB2);
err=SWDWrAPReg(ahbap_rw_DRW, ADDR.Addr15_8);
break;
case 3: err=SWDWrAPReg(ahbap_rw_TAR, FTFA_FCCOB3);
err=SWDWrAPReg(ahbap_rw_DRW, ADDR.Addr7_0);
break;
case 4: err=SWDWrAPReg(ahbap_rw_TAR, FTFA_FCCOB4);
err=SWDWrAPReg(ahbap_rw_DRW, WtoWr.BYTE0);
break;
case 5: err=SWDWrAPReg(ahbap_rw_TAR, FTFA_FCCOB5);
err=SWDWrAPReg(ahbap_rw_DRW, WtoWr.BYTE1);
break;
case 6: err=SWDWrAPReg(ahbap_rw_TAR, FTFA_FCCOB6);
err=SWDWrAPReg(ahbap_rw_DRW, WtoWr.BYTE2);
break;
case 7: err=SWDWrAPReg(ahbap_rw_TAR, FTFA_FCCOB7);
err=SWDWrAPReg(ahbap_rw_DRW, WtoWr.BYTE3);
break;
case 8: err=SWDWrAPReg(ahbap_rw_TAR, FTFA_FCCOB8);
err=SWDWrAPReg(ahbap_rw_DRW, WtoWr.BYTE4);
break;
case 9: err=SWDWrAPReg(ahbap_rw_TAR, FTFA_FCCOB9);
err=SWDWrAPReg(ahbap_rw_DRW, WtoWr.BYTE5);
break;
case 10: err=SWDWrAPReg(ahbap_rw_TAR, FTFA_FCCOBA);
err=SWDWrAPReg(ahbap_rw_DRW, WtoWr.BYTE6);
break;
case 11: err=SWDWrAPReg(ahbap_rw_TAR, FTFA_FCCOBB);
err=SWDWrAPReg(ahbap_rw_DRW, WtoWr.BYTE7);
break;
default: break;
}
}
return err;
}
U32 ISP_SEQ(U8 cmd_code, //command code
FlashCmdSeq_ADDR ADDR, //address
FlashCmdSeq_DATA WtoWr, //word to write
U8 index) //command count
{
volatile unsigned int cmd_data;
U8 err = E_OK;
err = SWDRdMemWd(FTFA_FSTAT, &cmd_data)
if((cmd_data&0x30)!=0)
err = SWDWrMemWd(FTFA_FSTAT, 0x30); // write 1 to clear error flags(ACCERR & FPVIOL)
err = FlashCmdSeq(cmd_code, ADDR, WtoWr, index);
err = SWDWrMemWd(FTFA_FSTAT, 0x80); // write 1 to clear flag (executes command)
LP_wait_ms(15);
err = SWDRdMemWd(FTFA_FSTAT, &cmd_data);
if(!(cmd_data&0x80)) //if CCIF(bit7) have not set to 1 return error
return err;
}