PIC16(L)F1703/7
PIC16(L)F1703/7
10.2.1
フラッシュ プログラムメモリの読み出し
プログラムメモリからの読み出しは、以下の手順で実 行します。
1.
読み出したいアドレスをPMADRH:PMADRLレジ スタペアに書き込む。2. PMCON1レジスタの CFGS
ビットをクリアする。3. PMCON1
レジスタのRD
制御ビットをセットする。読み出し制御ビットをセットした後、プログラムメモ リ フラッシュ コントローラは2番目の命令サイクルで データを読み出します。このため、「
BSF PMCON1,RD
」 命令に続く2
番目の命令は無視されます。データは、そ の次のサイクルでPMDATH:PMDATL
レジスタペアに 格納されます。従って、これ以降の命令で2
バイトと して読み出す事ができます。PMDATH:PMDATLレジスタペアに格納された値は、
次 の読み出し動作か、ユーザが書き込みを実行するまで 保持されます。図 10-1: フラッシュ プログラムメモリの 読み出しフローチャート 表 10-1: 各デバイスのフラッシュメモリの構成
デバイス 行消去
(
ワード)
書き込みラッチ
(
ワード) PIC16(L)F1703
32 32
PIC16(L)F1707
Note:
プログラムメモリの読み出し後の2
つの命令は、
NOP
とする必要があります。こ れにより、RD
ビットがセットされた後の 次の命令でユーザが2
サイクル命令を実 行するのを防ぐ事ができます。Start Read Operation
Select
Program or Configuration Memory (CFGS)
Select Word Address (PMADRH:PMADRL)
End Read Operation Instruction Fetched ignored
NOP execution forced
Instruction Fetched ignored NOP execution forced Initiate Read operation
(RD = 1)
Data read now in PMDATH:PMDATL
PIC16(L)F1703/7
図 10-2: フラッシュ プログラムメモリの読み出しサイクルの実行
例 10-1: フラッシュ プログラムメモリの読み出し
Q1 Q2 Q3 Q4 Q1 Q2 Q3 Q4 Q1 Q2 Q3 Q4 Q1 Q2 Q3 Q4 Q1 Q2 Q3 Q4 Q1 Q2 Q3 Q4
BSF PMCON1,RD executed here
INSTR(PC + 1)
executed here
PC PC + 1 PMADRH,PMADRL PC+3 PC + 5
Flash ADDR
RD bit
PMDATH,PMDATL
PC + 3 PC + 4
INSTR (PC + 1)
INSTR(PC - 1)
executed here INSTR(PC + 3)
executed here INSTR(PC + 4) executed here Flash Data
PMDATH PMDATL Register
INSTR (PC) INSTR (PC + 3) INSTR (PC + 4)
instruction ignored Forced NOP
INSTR(PC + 2)
executed here instruction ignored Forced NOP
* This code block will read 1 word of program
* memory at the memory address:
PROG_ADDR_HI : PROG_ADDR_LO
* data will be returned in the variables;
* PROG_DATA_HI, PROG_DATA_LO
BANKSEL PMADRL ; Select Bank for PMCON registers MOVLW PROG_ADDR_LO ;
MOVWF PMADRL ; Store LSB of address MOVLW PROG_ADDR_HI ;
MOVWF PMADRH ; Store MSB of address
BCF PMCON1,CFGS ; Do not select Configuration Space BSF PMCON1,RD ; Initiate read
NOP ; Ignored (図10-1)
NOP ; Ignored (図10-1)
MOVF PMDATL,W ; Get LSB of word
MOVWF PROG_DATA_LO ; Store in user location MOVF PMDATH,W ; Get MSB of word
MOVWF PROG_DATA_HI ; Store in user location
PIC16(L)F1703/7
10.2.2
フラッシュメモリのロック解除シーケンス
ロック解除シーケンスは、意図しない自己書き込みま たは消去からフラッシュ プログラムメモリを保護す る仕組みです。以下の全ての動作を正常に完了するに は、このシーケンスを中断する事なく実行し、完了さ せる必要があります。
•
行消去•
プログラムメモリ書き込みラッチへの書き込み•
プログラムメモリ書き込みラッチからプログラム メモリへの書き込み•
プログラムメモリ書き込みラッチからユーザID
へ の書き込みロック解除シーケンスは、以下のステップで構成され ます。
1. PMCON2
への55h
書き込み2. PMCON2
へのAAh
書き込み3. PMCON1
のWR
ビットのセット4. NOP
命令5. NOP
命令WR
ビットがセットされると、プロセッサは常に2
つのNOP
命令を実行します。行消去または行書き込み動作 中、プロセッサは内部動作をストールさせ(
通常2 ms)、
動作が完了してから次の命令を再開します。動作がプ ログラムメモリ書き込みラッチへの読み込みの場合、
プロセッサは常に
2
つのNOP
命令を実行し、続けて次 の命令を継続します。ロック解除シーケンスが中断される事のないように、
シーケンスの実行前にグローバル割り込みを無効にし て、完了後に再度有効にします。
図 10-3: フラッシュ プログラムメモリ ロック 解除シーケンスのフローチャート
Write 055h to PMCON2
Start Unlock Sequence
Write 0AAh to PMCON2
Initiate
Write or Erase operation (WR = 1)
Instruction Fetched ignored NOP execution forced
End Unlock Sequence Instruction Fetched ignored
NOP execution forced
PIC16(L)F1703/7
10.2.3
フラッシュ プログラムメモリの消去コード実行時、プログラムメモリの消去は行単位での み可能です。行を消去するには、以下の手順を実行し ます。
1.
消去する行内のいずれかのアドレスをPMADRH:PMADRL
レジスタペアに書き込む。2. PMCON1レジスタの CFGS
ビットをクリアする。3. PMCON1
レジスタのFREE
およびWREN
ビット をセットする。4. PMCON2
レジスタに55h、AAh
を順に書き込む(フラッシュ
プログラミング ロック解除シーケンス)。5. PMCON1
レジスタのWR
制御ビットをセットして消去を開始する。
例10-2を参照してください。
「
BSF PMCON1,WR
」命令の後、プロセッサは消去動作 をセットするために2
サイクル必要です。このため、WR
ビットをセットした直後は、2
つのNOP
命令を実行 する必要があります。プロセッサは2 ms (typ.)
の消去 時間の間、内部動作を停止します。クロックと周辺モ ジュールは動作を継続するため、これはスリープとは 異なります。消去サイクル後、プロセッサはPMCON1
書き込み命令後の3
番目の命令から動作を再開します。図 10-4: フラッシュ プログラムメモリ消去の フローチャート
Disable Interrupts (GIE = 0)
Start Erase Operation
Select
Program or Configuration Memory (CFGS)
Select Row Address (PMADRH:PMADRL)
Select Erase Operation (FREE = 1)
Enable Write/Erase Operation (WREN = 1)
Unlock Sequence (FIGURE x-x)
Disable Write/Erase Operation (WREN = 0)
Re-enable Interrupts (GIE = 1)
End Erase Operation CPU stalls while Erase operation completes
(2ms typical) 図10-3
PIC16(L)F1703/7
例 10-2: プログラムメモリの
1
行消去; This row erase routine assumes the following:
; 1. A valid address within the erase row is loaded in ADDRH:ADDRL
; 2. ADDRH and ADDRL are located in shared data memory 0x70 - 0x7F (common RAM)
BCF INTCON,GIE ; Disable ints so required sequences will execute properly BANKSEL PMADRL
MOVF ADDRL,W ; Load lower 8 bits of erase address boundary MOVWF PMADRL
MOVF ADDRH,W ; Load upper 6 bits of erase address boundary MOVWF PMADRH
BCF PMCON1,CFGS ; Not configuration space BSF PMCON1,FREE ; Specify an erase operation BSF PMCON1,WREN ; Enable writes
MOVLW 55h ; Start of required sequence to initiate erase MOVWF PMCON2 ; Write 55h
MOVLW 0AAh ;
MOVWF PMCON2 ; Write AAh
BSF PMCON1,WR ; Set WR bit to begin erase
NOP ; NOP instructions are forced as processor starts
NOP ; row erase of program memory.
;
; The processor stalls until the erase process is complete
; after erase processor continues with 3rd instruction BCF PMCON1,WREN ; Disable writes
BSF INTCON,GIE ; Enable interrupts Required Sequence
PIC16(L)F1703/7
10.2.4
フラッシュ プログラムメモリへの書き込み
プログラムメモリに書き込むには、以下の手順を実行 します。
1.
書き込む行のアドレスをPMADRH:PMADRLに書 き込む。2.
各書き込みラッチにデータを書き込む。3.
書き込み動作を開始する。4.
全てのデータの書き込みが完了するまでステップ1
~3
を繰り返す。プログラムメモリに書き込みを実行する際は、書き込 み先に何もデータが書き込まれていないか、書き込ま れている場合、事前に消去しておく必要があります。プ ログラムメモリの消去は行単位でのみ可能です。書き 込み開始時に自動的に消去が実行される事はありま せん。
プログラムメモリへの書き込みは、1ワードずつまた は複数ワードを一度に書き込む事ができます。一度に 書き込む事ができる最大ワード数は、書き込みラッチ の数と同じです。詳細は、図 10-5 (32 個の書き込み ラッチによるプログラムメモリへの行書き込み
)
を参 照してください。書き込みラッチは、
PMADRH:PMADRL
の上位10
ビット(PMADRH<6:0>:PMADRL<7:5>)
で定義されるフラッ シュ行アドレスの境界に対応づけられ、PMADRLの下 位5ビット(PMADRL<4:0>)
が読み込む書き込みラッチ を決定します。この境界を越えて書き込む事はできま せん。プログラムメモリへの書き込みが完了したら、書き込みラッチのデータは0x3FFFにリセットされます。
書き込みラッチにデータを書き込んでプログラムメモ リの行書き込みを実行するには、以下の手順を実行す る必要があります。この手順は大きく
2
つの部分に分 かれます。最初に、PMDATH:PMDATL からのデータを、
LWLO = 1
のロック解除シーケンスで各書き込みラッチに書き込みます。書き込みラッチに書き込む最 後のワードの準備が整ったら、LWLOビットをクリア してロック解除シーケンスを実行します。これによっ てプログラミング動作が始まり、全てのラッチの内容 がフラッシュ プログラムメモリに書き込まれます。
1. PMCON1レジスタのWRENビットをセットする。
2. PMCON1レジスタの CFGS
ビットをクリアする。3. PMCON1レジスタの LWLO
ビットをセットする。PMCON1
レジスタのLWLO
ビットが「1
」の場 合、書き込みシーケンスを実行しても書き込み ラッチにデータが書き込まれるだけでフラッシュ プログラムメモリへの書き込みは始まりません。4.
書き込み先のアドレスをPMADRH:PMADRLレジ スタペアに書き込む。5.
プログラムメモリに書き込むデータをPMDATH:PMDATL
レジスタペアに書き込む。6.
ロック解除シーケンスを実行する(
セクション10.2.2「フラッシュメモリのロック解除 シーケンス」)。以 上で書き込みラッチへの書き込みが完了します。
7.
次のアドレスを指すようにPMADRH:PMADRLレ ジスタペアをインクリメントする。8.
前回から2
番目のラッチへの書き込みが完了する まで手順5
~7
を繰り返す。9. PMCON1レジスタの LWLO
ビットをクリアする。PMCON1
レジスタのLWLO
ビットが「0
」の場 合、書き込みシーケンスを実行するとフラッシュ プログラムメモリへの書き込みが始まります。10.
プログラムメモリに書き込むデータをPMDATH:PMDATL
レジスタペアに書き込む。11.
ロック解除シーケンスを実行する(セクション10.2.2「フラッシュメモリのロック解除シーケンス」
)
。以 上でプログラムメモリ ラッチの内容が全てフ ラッシュプログラムメモリに書き込まれました。Note:
書き込みラッチへのデータ書き込み、またはフラッシュ書き込みの動作を始める には、特定のロック解除シーケンスが必 要です。ロック解除シーケンスが中断さ れた場合、ラッチまたはプログラムメモ リへの書き込みは始まりません。
Note:
プログラムメモリ書き込みラッチは、書き込みまたは消去動作が完了するたびにブ ランク状態(0x3FFF)にリセットされます。
こ のた め、プロ グラ ムメ モリ 書き 込み
PIC16(L)F1703/7
DS40001722A_JP - p.109
Prelimina ry
2014 Microchip Technology Inc.図 10-5:
32
個の書き込みラッチによるフラッシュ プログラムメモリへのブロック書き込み6 8
14
14 14
Write Latch #31 1Fh
14 14
Program Memory Write Latches
14 14 14
PMADRH<6:0>:
PMADRL<7:5>
Flash Program Memory
Row
Row Address Decode
Addr
Write Latch #30 1Eh Write Latch #1
01h Write Latch #0
00h
Addr Addr Addr
000h 0000h 0001h 001Eh 001Fh
001h 0020h 0021h 003Eh 003Fh
002h 0040h 0041h 005Eh 005Fh
3FEh 7FC0h 7FC1h 7FDEh 7FDFh
3FFh 7FE0h 7FE1h 7FFEh 7FFFh
14
PMADRL<4:0>
400h 8000h - 8003h 8009h - 801Fh
Configuration Words USER ID 0 - 3
8007h – 8008h 8006h
DEVICE ID Dev / Rev
reserved reserved
Configuration Memory
CFGS = 0
CFGS = 1
PMADRH PMADRL
7 6 0 7 5 4 0
c4 c3 c2 c1 c0
r9 r8 r7 r6 r5 r4 r3
- r2 r1 r0
10 5
PMDATH PMDATL
7 5 0 7 0
-8004h – 8005h
Rev. 10-000004A_A0