UPD78F9211/9212/9210 自寫(xiě)方式編程
如果振蕩器時(shí)鐘/外部時(shí)鐘被選擇為系統時(shí)鐘,執行指定序列的命令設定自編程模式后,立即執行NOP 和HALT 指令,在HATL 狀態(tài)釋放后等待8 s,然后執行自編程。
通過(guò)使用1 位存儲器操作指令驗證FPRERR。
自編程模式下和HALT 模式下引腳的狀態(tài)是相同的。
在自編程模式中,禁止通過(guò)on-board/off-board 編程設置安全功能,無(wú)論安全功能如何設定,自編程命令都可執行。想要在自編程期間禁止寫(xiě)入或擦除進(jìn)程,則需要設定保護字節。
在執行自編程命令前,確保對Flash 地址指針H(FLAPH)的第4 ~ 7 位和Flash地址指針H比較寄存器(FLAPHC)清零。如果這些位為1 時(shí)執行自編程,設備將會(huì )故障。
在設置為自編程模式和普通模式以前,立即將FLCMD 寄存器清零(00H)。
1.3 自編程功能所使用的寄存器
自編程使用以下的寄存器
Flash 編程模式控制寄存器(FLPMC)
Flash 保護命令寄存器(PFCMD)
Flash 狀態(tài)寄存器(PFS)
Flash 編程命令寄存器(FLCMD)
Flash 地址指針H 和L 寄存器(FLAPH 和FLAPL)
Flash 地址指針H 比較寄存器和FLASH 地址指針L 比較寄存器(FLAPH 和FLAPLC)
Flash 寫(xiě)入緩存寄存器(FLW)
78K0S/KY1+ 在FLASH 存儲器的0081H 地址有一個(gè)區域被稱(chēng)為保護字節。
(1)Flash 編程模式控制寄存器(FLPMC)
這個(gè)寄存器用于在自編程模式下向FLASH 存儲器寫(xiě)入數據時(shí)設定工作模式,并可用于讀取保護字節的值。
只有按特定順序(參考16.8.3(2) FLASH 保護命令寄存器(PFCMD))才能寫(xiě)入數據,如此就不會(huì )因為偶然的噪聲干擾或者程序掛起等故障導致應用系統意外停止。
該寄存器可通過(guò)一個(gè)8 位的存儲操作指令來(lái)設置。
復位后寄存器狀態(tài)值不確定。

注 1. 當復位釋放時(shí),第0 位(FLSPM)被清零。當復位釋放后,保護字節的設定值可從第2 ~6 位(PRSELF0 ~ RESELF4)讀出。
2. 第2 ~ 6 位(PRSELF0 ~ RESELF4)是只讀的。
注意事項 1. 注意在設定自編程模式的情況下,可參考16.8.2 自編程功能的注意事項。
2. 預先設置CPU 時(shí)鐘,使在自編程中使CPU 時(shí)鐘大于等于1 MHz。
3. 執行指定序列的命令設定自編程模式后,立即執行NOP 和HALT 指令,以執行自編程。10μs(最大值)+ 2 CPU 時(shí)鐘(fCPU)后HALT 指令被自動(dòng)釋放。
4. 如果振蕩器時(shí)鐘/外部時(shí)鐘被選擇為系統時(shí)鐘,執行指定序列的命令設定自編程模式后,立即執行NOP 和HALT 指令,在HATL 狀態(tài)釋放后等待8 μs,然后執行
自編程。
5. 在設置為自編程模式和普通模式以前,立即將FLCMD寄存器清零(00H)。
(2)Flash 保護命令寄存器(PFCMD)
如果由于噪聲或程序掛起等原因引起的故障導致應用系統停止,此時(shí)對FLASH 編程模式控制寄存器(FLPMC)進(jìn)行寫(xiě)入操作將對系統產(chǎn)生嚴重影響。PFCMD 用來(lái)保護FLPMC 的寫(xiě)入,這樣就不會(huì )使應用系統由于疏忽導致停止。
必須按以下順序對FLPMC執行寫(xiě)入操作。
1> 寫(xiě)入一特定的值(A5H)到PFCMD 中。
2> 寫(xiě)入設定值到FLPMC 的第0 位(FLSPM)中(此時(shí)寫(xiě)入操作是無(wú)效的)。
3> 將設定值的反碼寫(xiě)入FLPMC 的第0 位(FLSPM)(此時(shí)寫(xiě)入操作是無(wú)效的)。
4> 將設定值寫(xiě)入FLPMC 的第0 位(FLSPM)(此時(shí)寫(xiě)入操作是有效的)。
注意事項 在自編程模式下,不能執行中斷服務(wù)。在執行指定序列指令設定自編程模式以前,執行指定序列指令設定工作模式為普通模式以后的兩點(diǎn)之間,停止中斷服務(wù)
(通過(guò)在MK0= FFH 時(shí),執行DI 指令)。
這樣重復寫(xiě)入寄存器,可使寄存器不能被非法寫(xiě)入。
可以通過(guò)FLASH 狀態(tài)寄存器(PFS)的第0 位(FPRERR)來(lái)驗證是否出現非法的存儲操作。
使用1 位存儲器操作指令驗證FPRERR。
每當FLPMC的值發(fā)生改變的時(shí)候都必須向PFCMD 寫(xiě)入值A5H。
PFCMD 的值可通過(guò)一個(gè)8 位的存儲器操作指令來(lái)設置。
復位后寄存器PFCMD 值不確定。
(3) Flash 釤寄存器(PFS)
如果不能按正確序(入FLASH 保o命令寄存器PFCMD)入受保o的FLASH 程模式控制寄存器(FLPMC)中,FLPMC不能被入并且出F保oe`,PFS 的第0 位(FPRERR)將被置1。
FPRERR 1 r,可以通^直接0 砬0。
自程模式期g可能b生的e`能蟯ㄟ^(guò)PFS 的第1位(VCERR)和第2 位(WEPRERR)位反出恚(VCERR)和(WEPRERR)可以通^0 砬0。
要C操作是否絳姓確,PFS 寄存器的必被A先清零。
PFS 可以使用1 位或8 位存ζ韃僮髦噶鈐O定。
}位後PFS被置00H。
注意事 使用1 位存ζ韃僮髦噶鋏CFPRERR。
1. FPRERR 標的操作l件
O置l件>
絳械χ苓寄存器的入命令]有oPFCMD入特定值(PFCMD = A5H)r,PFCMDM行入操作。
在1>之後,如果第一l存χ噶畈僮韉氖峭獠看ζ鞫不是FLPMC。
在2>之後,如果第一l存χ噶畈僮韉氖峭獠看ζ鞫不是FLPMC。
在2>之後,如果第一l存χ噶釧的值不同于FLPMC 值的反a。
在3>之後,如果第一l存χ噶畈僮韉氖峭獠看ζ鞫不是FLPMC。
在3>之後,如果第一l存χ噶釧的值不同于FLPMC 值(在2> 中所)。
渥 在菱形括號內的底于(2) Flash 保o命令字(PFCMD)。
}位l件>
如果FPRERR 標志0
}位信號入
2. VCERR標志的操作l件
O定l件>
擦除校e`
內部入校e`
若VCERR 被O1,tf明Flash ]有被正確的擦除/入。在指定的程序Y要再次Flash M行擦除/入。
渥 l生擦除/入保oe`r,VCERR標也被置1。
}位l件>
VCERR標被置0
外部}位信號入
3. WEPRERR 標操作l件
O置l件>
使用保o字指定一^域防止^域因FLASH 地址指H(FLAPH)和絳邢嚓P(guān)命令而引起的擦除/入。
如果“1”被入到一]有被擦除的位(一“0”的位)。
}位l件>
WEPRERR 標被置0
外部}位信號入
(4)FLASH 程命令寄存器(FLCMD)
在自程模式下,FLCMD 被用砣范FLASH 的擦、、校操作。
寄存器可通^1 位或8 位的操作指令碓O置。
}位後寄存器值置00H。
評論