[ZLG-MCU] P89C669 IAP的实现

[复制链接]
3059|6
 楼主| hawktca 发表于 2007-7-6 18:31 | 显示全部楼层 |阅读模式
TE, ov, AD, se, BLE
嵌入的IAP汇编代码如下:<br />$MOD_MX51<br /><br />NAME&nbsp;&nbsp;&nbsp;&nbsp;IAP<br /><br />?PR?_EraseBootLoader?IAP&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;SEGMENT&nbsp;ECODE&nbsp;INSEG&nbsp;<br />?DT?_EraseBootLoader?IAP&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;SEGMENT&nbsp;DATA&nbsp;OVERLAYABLE<br />?PR?_WriteBootLoader?IAP&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;SEGMENT&nbsp;ECODE&nbsp;INSEG&nbsp;<br />?DT?_WriteBootLoader?IAP&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;SEGMENT&nbsp;DATA&nbsp;OVERLAYABLE<br />?PR?_ReadBootLoader?IAP&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;SEGMENT&nbsp;ECODE&nbsp;INSEG&nbsp;<br />?DT?_ReadBootLoader?IAP&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;SEGMENT&nbsp;DATA&nbsp;OVERLAYABLE<br />?PR?_DelFlashByte?IAP&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;SEGMENT&nbsp;ECODE&nbsp;INSEG&nbsp;<br />?DT?_DelFlashByte?IAP&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;SEGMENT&nbsp;DATA&nbsp;OVERLAYABLE<br />?PR?_WriteFlashByte?IAP&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;SEGMENT&nbsp;ECODE&nbsp;INSEG&nbsp;<br />?DT?_WriteFlashByte?IAP&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;SEGMENT&nbsp;DATA&nbsp;OVERLAYABLE<br />?PR?_ReadFlashByte?IAP&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;SEGMENT&nbsp;ECODE&nbsp;INSEG&nbsp;<br />?DT?_ReadFlashByte?IAP&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;SEGMENT&nbsp;DATA&nbsp;OVERLAYABLE<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;PUBLIC&nbsp;&nbsp;&nbsp;&nbsp;_ReadFlashByte<br />&nbsp;&nbsp;&nbsp;&nbsp;PUBLIC&nbsp;&nbsp;&nbsp;&nbsp;_WriteFlashByte<br />&nbsp;&nbsp;&nbsp;&nbsp;PUBLIC&nbsp;&nbsp;&nbsp;&nbsp;_DelFlashByte<br />&nbsp;&nbsp;&nbsp;&nbsp;PUBLIC&nbsp;&nbsp;&nbsp;&nbsp;_ReadBootLoader<br />&nbsp;&nbsp;&nbsp;&nbsp;PUBLIC&nbsp;&nbsp;&nbsp;&nbsp;_WriteBootLoader<br />&nbsp;&nbsp;&nbsp;&nbsp;PUBLIC&nbsp;&nbsp;&nbsp;&nbsp;_EraseBootLoader<br /><br />;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;<br />&nbsp;&nbsp;&nbsp;&nbsp;DPH&nbsp;&nbsp;&nbsp;&nbsp;DATA&nbsp;083H&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;DPL&nbsp;&nbsp;&nbsp;&nbsp;DATA&nbsp;082H&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;AUXR1&nbsp;&nbsp;DATA&nbsp;0A2H&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;EA&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;BIT&nbsp;&nbsp;0AFH&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;CMOD&nbsp;&nbsp;&nbsp;DATA&nbsp;0D9H&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;ACC&nbsp;&nbsp;&nbsp;&nbsp;DATA&nbsp;0E0H&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;IE&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;DATA&nbsp;0A8H&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;ESFR&nbsp;EPL&nbsp;=&nbsp;01FCH;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ESFR&nbsp;EPM&nbsp;=&nbsp;01FDH;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ESFR&nbsp;EPH&nbsp;=&nbsp;01FEH;<br />;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;<br /><br />;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;<br />XTAL_MHZ&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;EQU&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;11&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;;&nbsp;Chip&nbsp;runs&nbsp;at&nbsp;11.0592MHz,no&nbsp;use&nbsp;?<br />PGM_MTP&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;EQU&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;00FFF0H&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;;&nbsp;PGM-MTP&nbsp;routine&nbsp;enrty&nbsp;&nbsp;<br />WriteDatByte&nbsp;&nbsp;&nbsp;&nbsp;EQU&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;02H&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;;&nbsp;program&nbsp;data&nbsp;byte&nbsp;,function&nbsp;code<br />ReadDatByte&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;EQU&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;03H&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;;&nbsp;read&nbsp;device&nbsp;data&nbsp;of&nbsp;pointed&nbsp;address,function&nbsp;code<br />EraseBlock&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;EQU&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;0CH&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;;&nbsp;erase&nbsp;one&nbsp;of&nbsp;11&nbsp;blocks,function&nbsp;code<br />EraseBL&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;EQU&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;04H&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;;&nbsp;erase&nbsp;status&nbsp;or&nbsp;boot&nbsp;vector,function&nbsp;code<br />ProgramBL&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;EQU&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;06H&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;;&nbsp;program&nbsp;status&nbsp;byte&nbsp;or&nbsp;boot&nbsp;vector,function&nbsp;code<br />FetchBL&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;EQU&nbsp;&nbsp;&nbsp;&nbsp;07H&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;;&nbsp;read&nbsp;status&nbsp;or&nbsp;boot&nbsp;vector,function&nbsp;code&nbsp;&nbsp;&nbsp;&nbsp;<br />;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;<br /><br />;&nbsp;#define&nbsp;uINT8&nbsp;&nbsp;unsigned&nbsp;char&nbsp;<br />;&nbsp;#define&nbsp;uINT16&nbsp;unsigned&nbsp;int&nbsp;&nbsp;<br />;&nbsp;/***************************************************<br />;&nbsp;****&nbsp;unsigned&nbsp;char&nbsp;EraseBootLoader(uINT8&nbsp;nDatAll);<br />;&nbsp;****&nbsp;unsigned&nbsp;char&nbsp;DelFlashByte(uINT8&nbsp;BlockHi,&nbsp;uINT8&nbsp;FlashBlock);&nbsp;<br />;&nbsp;****&nbsp;unsigned&nbsp;char&nbsp;WriteFlashByte(uINT8&nbsp;FlashData,&nbsp;uINT16&nbsp;FlashAddress);&nbsp;<br />;&nbsp;****&nbsp;unsigned&nbsp;char&nbsp;ReadFlashByte(uINT16&nbsp;FlashAddress);&nbsp;<br />;&nbsp;****&nbsp;unsigned&nbsp;char&nbsp;WriteBootLoader(uINT8&nbsp;nBL,uINT8&nbsp;nDat);&nbsp;&nbsp;//nBL={0---StatusByte,1-----BootVectorMiddle,2----BootVectorHigh}<br />;&nbsp;****&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//R7----uBL;R5------nDat&nbsp;&nbsp;&nbsp;&nbsp;<br />;&nbsp;****&nbsp;unsigned&nbsp;char&nbsp;ReadBootLoader(uINT8&nbsp;nBL);&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//nBL={0---SecERETByte,1-----StatusByte,2-----BootVector}<br />;&nbsp;****&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//nBL=0/1/2/3/4/5<br />;&nbsp;*****************************************************************/&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />;&nbsp;void&nbsp;WaiteHere(uINT16&nbsp;Delayus);<br />;&nbsp;<br />;&nbsp;/****************************************************************<br />;&nbsp;*FUNCTION&nbsp;DESCRIBATION:<br />;&nbsp;*&nbsp;uINT8&nbsp;nDatAll:&nbsp;dump&nbsp;variable<br />;&nbsp;*<br />;&nbsp;*<br />;&nbsp;*<br />;&nbsp;*<br />;&nbsp;****************************************************************/<br />;&nbsp;uINT8&nbsp;EraseBootLoader(uINT8&nbsp;nDatAll)<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;RSEG&nbsp;&nbsp;?PR?_EraseBootLoader?IAP<br />_EraseBootLoader:<br />&nbsp;&nbsp;&nbsp;&nbsp;USING&nbsp;&nbsp;&nbsp;&nbsp;0<br />&nbsp;&nbsp;&nbsp;&nbsp;PUSH&nbsp;&nbsp;&nbsp;&nbsp;IE<br />&nbsp;&nbsp;&nbsp;&nbsp;CLR&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;EA;&nbsp;&nbsp;//disable&nbsp;interrupt&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;MOV&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;A,CMOD&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;MOV&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;R2,A&nbsp;;&nbsp;store&nbsp;copy&nbsp;of&nbsp;CMOD&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;JNB&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ACC.6,?IAPTAG0&nbsp;;&nbsp;if&nbsp;watchdog&nbsp;enabled&nbsp;then&nbsp;disable&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;ANL&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;CMOD,#0BFH&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;?IAPTAG0:<br />&nbsp;&nbsp;&nbsp;&nbsp;ORL&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;AUXR1,#020H&nbsp;;&nbsp;enable&nbsp;bootrom&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;MOV&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;R0,XTAL_MHZ&nbsp;;&nbsp;osc&nbsp;frequency&nbsp;11.0592MHz&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;MOV&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;R1,EraseBL&nbsp;;&nbsp;function&nbsp;code&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ECALL&nbsp;&nbsp;&nbsp;PGM_MTP&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;;ECALL&nbsp;&nbsp;&nbsp;&nbsp;L?0014&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;;&nbsp;&nbsp;WaiteHere(20);<br />&nbsp;&nbsp;&nbsp;&nbsp;MOV&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;R7,ACC&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;;<br />&nbsp;&nbsp;&nbsp;&nbsp;ANL&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;AUXR1,#0DFH&nbsp;;disable&nbsp;boot-rom&nbsp;function<br />&nbsp;&nbsp;&nbsp;&nbsp;MOV&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;CMOD,R2;&nbsp;&nbsp;&nbsp;&nbsp;;recover&nbsp;COMD&nbsp;register<br />&nbsp;&nbsp;&nbsp;&nbsp;SETB&nbsp;&nbsp;&nbsp;&nbsp;EA;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;;&nbsp;enable&nbsp;interrupt&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;POP&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;IE;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;ERET&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />;&nbsp;END&nbsp;OF&nbsp;_EraseBootLoader<br /><br />;&nbsp;/****************************************************************<br />;&nbsp;*FUNCTION&nbsp;DESCRIBATION:&nbsp;&nbsp;WriteBootLoader<br />;&nbsp;*&nbsp;uINT8&nbsp;nBL&nbsp;:<br />;&nbsp;*&nbsp;uINT8&nbsp;nDat:<br />;&nbsp;*<br />;&nbsp;*<br />;&nbsp;*<br />;&nbsp;****************************************************************/<br />;&nbsp;uINT8&nbsp;WriteBootLoader(uINT8&nbsp;nBL,uINT8&nbsp;nDat)<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;RSEG&nbsp;&nbsp;?PR?_WriteBootLoader?IAP<br />_WriteBootLoader:<br />&nbsp;&nbsp;&nbsp;&nbsp;USING&nbsp;&nbsp;&nbsp;&nbsp;0&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;PUSH&nbsp;&nbsp;&nbsp;&nbsp;IE<br />&nbsp;&nbsp;&nbsp;&nbsp;CLR&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;EA;&nbsp;&nbsp;//disable&nbsp;interrupt&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;MOV&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;A,CMOD&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;MOV&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;R2,A&nbsp;;&nbsp;store&nbsp;copy&nbsp;of&nbsp;CMOD&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;JNB&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ACC.6,?IAPTAG1&nbsp;;&nbsp;if&nbsp;watchdog&nbsp;enabled&nbsp;then&nbsp;disable&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;ANL&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;CMOD,#0BFH&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;?IAPTAG1:<br />&nbsp;&nbsp;&nbsp;&nbsp;ORL&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;AUXR1,#020H&nbsp;;&nbsp;enable&nbsp;bootrom&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;MOV&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;R0,XTAL_MHZ&nbsp;;&nbsp;osc&nbsp;frequency&nbsp;11.0592MHz&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;MOV&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;R1,ProgramBL&nbsp;;&nbsp;function&nbsp;code<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;MOV&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;EPL,&nbsp;R7;&nbsp;which&nbsp;cell&nbsp;to&nbsp;be&nbsp;written<br />&nbsp;&nbsp;&nbsp;&nbsp;MOV&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ACC,&nbsp;R5;&nbsp;data&nbsp;to&nbsp;be&nbsp;written<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ECALL&nbsp;&nbsp;&nbsp;PGM_MTP;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;;ECALL&nbsp;&nbsp;&nbsp;&nbsp;L?0014&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;;&nbsp;waite&nbsp;here&nbsp;for&nbsp;ready<br />&nbsp;&nbsp;&nbsp;&nbsp;MOV&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;R7,ACC;&nbsp;copy&nbsp;Flag&nbsp;of&nbsp;operation<br />&nbsp;&nbsp;&nbsp;&nbsp;ANL&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;AUXR1,#0DFH&nbsp;;disable&nbsp;boot-rom&nbsp;function<br />&nbsp;&nbsp;&nbsp;&nbsp;MOV&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;CMOD,R2&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;;&nbsp;recover&nbsp;COMD<br />&nbsp;&nbsp;&nbsp;&nbsp;SETB&nbsp;&nbsp;&nbsp;&nbsp;EA;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;;&nbsp;enable&nbsp;interrupt&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;POP&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;IE<br />&nbsp;&nbsp;&nbsp;&nbsp;ERET&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />;&nbsp;END&nbsp;OF&nbsp;_WriteBootLoader<br /><br />;&nbsp;/****************************************************************<br />;&nbsp;*FUNCTION&nbsp;DESCRIBATION:&nbsp;&nbsp;ReadBootLoader<br />;&nbsp;*&nbsp;uINT8&nbsp;nBL:<br />;&nbsp;*<br />;&nbsp;*<br />;&nbsp;*<br />;&nbsp;*<br />;&nbsp;****************************************************************/<br />;&nbsp;uINT8&nbsp;ReadBootLoader(uINT8&nbsp;nBL)<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;RSEG&nbsp;&nbsp;?PR?_ReadBootLoader?IAP<br />_ReadBootLoader:<br />&nbsp;&nbsp;&nbsp;&nbsp;USING&nbsp;&nbsp;&nbsp;&nbsp;0<br />&nbsp;&nbsp;&nbsp;&nbsp;PUSH&nbsp;&nbsp;&nbsp;&nbsp;IE<br />&nbsp;&nbsp;&nbsp;&nbsp;CLR&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;EA;&nbsp;&nbsp;//disable&nbsp;interrupt&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;MOV&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;A,CMOD&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;MOV&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;R2,A&nbsp;;&nbsp;store&nbsp;copy&nbsp;of&nbsp;CMOD&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;JNB&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ACC.6,?IAPTAG2&nbsp;;&nbsp;if&nbsp;watchdog&nbsp;enabled&nbsp;then&nbsp;disable&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;ANL&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;CMOD,#0BFH&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;?IAPTAG2:<br />&nbsp;&nbsp;&nbsp;&nbsp;ORL&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;AUXR1,#020H&nbsp;;&nbsp;enable&nbsp;bootrom&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;MOV&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;R0,XTAL_MHZ&nbsp;;&nbsp;osc&nbsp;frequency&nbsp;11.0592MHz&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;MOV&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;R1,FetchBL&nbsp;&nbsp;;&nbsp;function&nbsp;code<br />&nbsp;&nbsp;&nbsp;&nbsp;MOV&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;EPL,&nbsp;R7&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ECALL&nbsp;&nbsp;&nbsp;PGM_MTP&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;;ECALL&nbsp;&nbsp;&nbsp;&nbsp;L?0014&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;;&nbsp;waite&nbsp;for&nbsp;end&nbsp;of&nbsp;operation<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;MOV&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;R7,ACC;<br />&nbsp;&nbsp;&nbsp;&nbsp;ANL&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;AUXR1,#0DFH&nbsp;;disable&nbsp;boot-rom&nbsp;function<br />&nbsp;&nbsp;&nbsp;&nbsp;MOV&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;CMOD,R2&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;;&nbsp;recover&nbsp;COMD<br />&nbsp;&nbsp;&nbsp;&nbsp;SETB&nbsp;&nbsp;&nbsp;&nbsp;EA;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;;&nbsp;enable&nbsp;interrupt&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;POP&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;IE<br />&nbsp;&nbsp;&nbsp;&nbsp;ERET&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />;&nbsp;END&nbsp;OF&nbsp;_ReadBootLoader<br /><br />;&nbsp;/****************************************************************<br />;&nbsp;*FUNCTION&nbsp;DESCRIBATION:&nbsp;&nbsp;DelFlashByte<br />;&nbsp;*&nbsp;uINT16&nbsp;FlashBlock:<br />;&nbsp;*<br />;&nbsp;*<br />;&nbsp;*<br />;&nbsp;*<br />;&nbsp;****************************************************************/<br />;&nbsp;uINT8&nbsp;DelFlashByte(uINT8&nbsp;BlockHi,&nbsp;uINT8&nbsp;FlashBlock)<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;RSEG&nbsp;&nbsp;?PR?_DelFlashByte?IAP<br />_DelFlashByte:<br />&nbsp;&nbsp;&nbsp;&nbsp;USING&nbsp;&nbsp;&nbsp;&nbsp;0<br />&nbsp;&nbsp;&nbsp;&nbsp;PUSH&nbsp;&nbsp;&nbsp;&nbsp;IE<br />&nbsp;&nbsp;&nbsp;&nbsp;CLR&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;EA;&nbsp;&nbsp;//disable&nbsp;interrupt&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;MOV&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;A,CMOD&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;MOV&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;R2,A&nbsp;;&nbsp;store&nbsp;copy&nbsp;of&nbsp;CMOD&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;JNB&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ACC.6,?IAPTAG3&nbsp;;&nbsp;if&nbsp;watchdog&nbsp;enabled&nbsp;then&nbsp;disable&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;ANL&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;CMOD,#0BFH&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;?IAPTAG3:<br />&nbsp;&nbsp;&nbsp;&nbsp;ORL&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;AUXR1,#020H&nbsp;;&nbsp;enable&nbsp;bootrom&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;MOV&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;R0,XTAL_MHZ&nbsp;;&nbsp;osc&nbsp;frequency&nbsp;11.0592MHz&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;MOV&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;R1,EraseBlock&nbsp;&nbsp;;&nbsp;function&nbsp;code<br />&nbsp;&nbsp;&nbsp;&nbsp;MOV&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;EPH,&nbsp;R7;<br />&nbsp;&nbsp;&nbsp;&nbsp;MOV&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;EPM,&nbsp;R5;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ECALL&nbsp;&nbsp;&nbsp;PGM_MTP&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;;;;;;;;;;;;;;;;;;;Delay&nbsp;here&nbsp;for&nbsp;about&nbsp;1&nbsp;second<br />&nbsp;&nbsp;&nbsp;&nbsp;;<br />&nbsp;&nbsp;&nbsp;&nbsp;;;;;;;;;;End&nbsp;of&nbsp;waiting&nbsp;here&nbsp;;;;;;;;;;;;;;;;;;;<br />&nbsp;&nbsp;&nbsp;&nbsp;MOV&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;R7,ACC;<br />&nbsp;&nbsp;&nbsp;&nbsp;ANL&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;AUXR1,#0DFH&nbsp;;disable&nbsp;boot-rom&nbsp;function<br />&nbsp;&nbsp;&nbsp;&nbsp;MOV&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;CMOD,R2&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;;&nbsp;recover&nbsp;COMD<br />&nbsp;&nbsp;&nbsp;&nbsp;SETB&nbsp;&nbsp;&nbsp;&nbsp;EA;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;;&nbsp;enable&nbsp;interrupt&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;POP&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;IE<br />&nbsp;&nbsp;&nbsp;&nbsp;ERET&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />;&nbsp;END&nbsp;OF&nbsp;_DelFlashByte<br /><br />;&nbsp;/****************************************************************<br />;&nbsp;*FUNCTION&nbsp;DESCRIBATION:&nbsp;&nbsp;DelFlashByte<br />;&nbsp;*&nbsp;uINT16&nbsp;FlashBlock:<br />;&nbsp;*<br />;&nbsp;*<br />;&nbsp;*<br />;&nbsp;*<br />;&nbsp;****************************************************************/<br />;&nbsp;uINT8&nbsp;WriteFlashByte(uINT8&nbsp;FlashData,&nbsp;uINT16&nbsp;FlashAddress)<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;RSEG&nbsp;&nbsp;?PR?_WriteFlashByte?IAP<br />_WriteFlashByte:<br />&nbsp;&nbsp;&nbsp;&nbsp;USING&nbsp;&nbsp;&nbsp;&nbsp;0<br />&nbsp;&nbsp;&nbsp;&nbsp;PUSH&nbsp;&nbsp;&nbsp;&nbsp;IE<br />&nbsp;&nbsp;&nbsp;&nbsp;CLR&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;EA;&nbsp;&nbsp;//disable&nbsp;interrupt&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;MOV&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;A,CMOD&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;MOV&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;R2,A&nbsp;;&nbsp;store&nbsp;copy&nbsp;of&nbsp;CMOD&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;JNB&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ACC.6,?IAPTAG4&nbsp;;&nbsp;if&nbsp;watchdog&nbsp;enabled&nbsp;then&nbsp;disable&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;ANL&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;CMOD,#0BFH&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;?IAPTAG4:<br />&nbsp;&nbsp;&nbsp;&nbsp;ORL&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;AUXR1,#020H&nbsp;;&nbsp;enable&nbsp;bootrom&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;MOV&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;R0,XTAL_MHZ&nbsp;;&nbsp;osc&nbsp;frequency&nbsp;11.0592MHz&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;MOV&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;R1,WriteDatByte&nbsp;&nbsp;;&nbsp;function&nbsp;code&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;MOV&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ACC,&nbsp;R7&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;;data&nbsp;to&nbsp;be&nbsp;written&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;MOV&nbsp;&nbsp;&nbsp;&nbsp;EPH,#00&nbsp;&nbsp;;<br />&nbsp;&nbsp;&nbsp;&nbsp;MOV&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;EPM,R4&nbsp;&nbsp;&nbsp;;<br />&nbsp;&nbsp;&nbsp;&nbsp;MOV&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;EPL,R5&nbsp;&nbsp;&nbsp;;which&nbsp;cell&nbsp;to&nbsp;be&nbsp;written<br />&nbsp;&nbsp;&nbsp;&nbsp;ECALL&nbsp;&nbsp;&nbsp;PGM_MTP&nbsp;&nbsp;;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;;ECALL&nbsp;&nbsp;&nbsp;&nbsp;L?0014&nbsp;&nbsp;&nbsp;;&nbsp;waite&nbsp;for&nbsp;ready<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;MOV&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;R7,ACC&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;ANL&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;AUXR1,#0DFH&nbsp;;disable&nbsp;boot-rom&nbsp;function<br />&nbsp;&nbsp;&nbsp;&nbsp;MOV&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;CMOD,R2&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;;&nbsp;recover&nbsp;COMD<br />&nbsp;&nbsp;&nbsp;&nbsp;SETB&nbsp;&nbsp;&nbsp;&nbsp;EA;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;;&nbsp;enable&nbsp;interrupt&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;POP&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;IE<br />&nbsp;&nbsp;&nbsp;&nbsp;ERET&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />;&nbsp;END&nbsp;OF&nbsp;_WriteFlashByte<br /><br />;&nbsp;/****************************************************************<br />;&nbsp;*FUNCTION&nbsp;DESCRIBATION:&nbsp;&nbsp;ReadFlashByte<br />;&nbsp;*&nbsp;uINT16&nbsp;FlashAddress:<br />;&nbsp;*<br />;&nbsp;*<br />;&nbsp;*<br />;&nbsp;*<br />;&nbsp;****************************************************************/<br />;&nbsp;uINT8&nbsp;ReadFlashByte(uINT16&nbsp;FlashAddress)<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;RSEG&nbsp;&nbsp;?PR?_ReadFlashByte?IAP<br />_ReadFlashByte:<br />&nbsp;&nbsp;&nbsp;&nbsp;USING&nbsp;&nbsp;&nbsp;&nbsp;0<br />&nbsp;&nbsp;&nbsp;&nbsp;PUSH&nbsp;&nbsp;&nbsp;&nbsp;IE<br />&nbsp;&nbsp;&nbsp;&nbsp;CLR&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;EA;&nbsp;&nbsp;//disable&nbsp;interrupt&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;MOV&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;A,CMOD&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;MOV&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;R2,A&nbsp;;&nbsp;store&nbsp;copy&nbsp;of&nbsp;CMOD&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;JNB&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ACC.6,?IAPTAG5&nbsp;;&nbsp;if&nbsp;watchdog&nbsp;enabled&nbsp;then&nbsp;disable&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;ANL&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;CMOD,#0BFH&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;?IAPTAG5:<br />&nbsp;&nbsp;&nbsp;&nbsp;ORL&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;AUXR1,#020H&nbsp;;&nbsp;enable&nbsp;bootrom&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;MOV&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;R0,XTAL_MHZ&nbsp;;&nbsp;osc&nbsp;frequency&nbsp;11.0592MHz&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;MOV&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;R1,ReadDatByte&nbsp;;&nbsp;function&nbsp;code&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;MOV&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;EPH,#00<br />&nbsp;&nbsp;&nbsp;&nbsp;MOV&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;EPM,R6;<br />&nbsp;&nbsp;&nbsp;&nbsp;MOV&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;EPL,R7;<br />&nbsp;&nbsp;&nbsp;&nbsp;ECALL&nbsp;&nbsp;&nbsp;PGM_MTP&nbsp;&nbsp;;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;;ECALL&nbsp;&nbsp;&nbsp;&nbsp;L?0014&nbsp;&nbsp;&nbsp;;&nbsp;waite&nbsp;for&nbsp;ready<br />&nbsp;&nbsp;&nbsp;&nbsp;MOV&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;R7,ACC;<br />&nbsp;&nbsp;&nbsp;&nbsp;ANL&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;AUXR1,#0DFH&nbsp;;disable&nbsp;boot-rom&nbsp;function<br />&nbsp;&nbsp;&nbsp;&nbsp;MOV&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;CMOD,R2&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;;&nbsp;recover&nbsp;COMD<br />&nbsp;&nbsp;&nbsp;&nbsp;SETB&nbsp;&nbsp;&nbsp;&nbsp;EA;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;;&nbsp;enable&nbsp;interrupt&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;POP&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;IE;<br />&nbsp;&nbsp;&nbsp;&nbsp;ERET&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />;&nbsp;END&nbsp;OF&nbsp;_ReadFlashByte<br /><br />;&nbsp;/****************************************************************<br />;&nbsp;*FUNCTION&nbsp;DESCRIBATION:&nbsp;&nbsp;WaiteHere<br />;&nbsp;*&nbsp;uINT16&nbsp;Delayus:<br />;&nbsp;*<br />;&nbsp;*<br />;&nbsp;*<br />;&nbsp;*<br />;&nbsp;****************************************************************/<br />;&nbsp;void&nbsp;WaiteHere(uINT16&nbsp;Delayus)<br /><br /><br />&nbsp;&nbsp;&nbsp;&nbsp;END
chirk 发表于 2007-7-10 13:54 | 显示全部楼层

调试通过了吗?

  
mcu123ad 发表于 2007-7-10 15:31 | 显示全部楼层

顶一下...看了眼花了.

  
 楼主| hawktca 发表于 2007-7-10 22:37 | 显示全部楼层

Flash读写通过

如题,Flash的读写测试通过.如果只用到了64K的空间则在以上汇编接口代码中将ECALL/ERET分别修改伟LCALL与RET.<br />不过我现在遇到新问题:如何实现在将一部分功能代码制定分配到指定地址段中?比如我希望我的Boot代码位于0xC000以上的地址处,如何在Keil&nbsp;C开环境中设置.<br />如果简单修改startup文件中的起始地址和目标文件选项中中断矢量偏移地址好像不行,编译厚的代码不能在目标板上运行.<br /><br />急盼,高手指导!!<br />谢谢!!!!<br />1
zlgmcu 发表于 2007-7-11 10:07 | 显示全部楼层

re

keil/help&nbsp;目录中,有c51.pdf,&nbsp;a51.pdf<br />就各个程序段,或者各个文件的定位问题有详细描述,<br />推荐欣赏.
 楼主| hawktca 发表于 2007-7-19 14:07 | 显示全部楼层

IAP已经通过

如题,我已经调测通过IAP功能。思路如下:<br />在用户代码运行中如果遇到IAP请求,则设置statusByte以及BootVector,然后使系统远程复位,系统再次重启后进入IAP代码部分。在该部分根据用户下载的烧写文件将从0x0000开始的位置开始写入,完成后再次修改状态字和引导矢量字,再次重启。系统自动开始运行升级后的程序。<br />我随后有尝试将IAP代码写入到64K空间以上的部分,但是没有成功。主要的问题还是代码定位的实现?C51、A51的手册中对此没有详细的说明。再摸索看看。<br />不过我觉得这种方法试验还行实用的话可能需要改进,比如一旦下载失败后则MCU陷入到错误码中不能回复到IAP状态或者将原先代码恢复,各位大侠有无高招?
mn14174 发表于 2008-5-11 17:56 | 显示全部楼层

IAP还有问题就是下载的源代码格式,不能是HEX格式的

我也在做IAP,程序一个月前写好的,发现iap能够下载HEX,中间没有任何转换,直接使用超级终端下载的,但是,在lpc芯片FLASH中表现的就是ASCII码,是纯字符,而不是能被运行的机器代码,后来看了这个论坛的一些评论IAP的,说是把HEX转成BIN文件再下载,这样也不行!<br />最后终于发现,可以用ADS1.2在线调试的ADX软件,可以IAP&nbsp;flash&nbsp;不过这个不是使用IAP功能IAP&nbsp;hex的,所以IAP还是不成功,希望有成功人士给个明确的正确的方法,IAP&nbsp;通过超级终端等串口工具直接下载的源代码是什么格式的才行呢?
您需要登录后才可以回帖 登录 | 注册

本版积分规则

6

主题

18

帖子

1

粉丝
快速回复 在线客服 返回列表 返回顶部