MCC(MPLAB Code Configurator)を操作して見る(Memory編)
〔導入編〕
〔操作編〕
〔Timer〕
〔CLC〕
〔MPLAB X の使い方に戻る〕
前前ページの〔導入編〕でMCCのインストールの行い方を記述しました。
前ページの〔操作編〕でMCCの基本モジュール[System Module][Pin Module][Interrupt Module]の
操作方法を記述しました、なので基本操作は読んでいる者として以下は記述します。
このページでは〔Memory編〕としてEEPROM/HEF/Flashの操作方法です。
従来の方法
従来の方法は、”PICのEEPROMとHEFについて”を参照下さい。
そのページに記述して有る様にEEPROMからの読み書きは、"eeprom_read( )/eeprom_write( )"関数で
行っていました。
ですがぁ"XC8 v1.40"のコンパイラに切り替えた所、PIC18系ではeeprom関数はサポートしなくなった
様です、PIC12/PIC16系は従来通り利用出来ます。
従来通りコンパイルをしてみるとぉ、”ルーチンはサポートされなくなりました。
MPLAB X MCCを使用して下さい。”っと来たもんだ。
《Memory》
なのでぇ、MCCでMemoryにアクセスする方法を書いて置きます。
(もちろん、PIC12/16/18系の全てで動作可能です、又、旧コンパイラでも動作します)
Memoryモジュール設定ウインドウの開き方
IDE左側まん中のウインドウの[Device Resources]画面で操作を行います。
1. Memoryの文字をダブルクリックするか左横の▼をクリックします。
2. 左図の様になるので、MEMORYをダブルクリックします。
(この後、少し時間が掛かります)
3. MEMORYの文字が消え、設定ウインドウが展開されます。
この様な"MEMORY"画面が表示されます。
"Add DataEE Routines"はeepromにアクセスする為のルーチン追加の事です。
このまま何も操作をしないで[Generate]を行います。
[Generate]の行い方
IDE左側上のウインドウの[Project Resources]画面で
操作を行います。
[Generate]ボタンを押し自動生成させましょう。
下の様にGenerateファイル保存画面が表示されます。
プロジェクトのフォルダーが開くと思うのでこのまま[保存]ボタンをクリックします。
IDEの下ウインドウに"completed"文字が表示されたら終了です。
左の如く生成されたファイルが、プロジェクトにも
登録されています。
私はこの登録されたファイルではあつかいづらいので、
登録されたファイルは一旦全て
"Remove From Project"を行いました。
[Generate]の際にProjectに登録するか聞いて来て
欲しいぞぉ。Microchipさん!
プロジェクトのフォルダにもこの様に生成されたファイルが
追加されています。
"mcc_generated_files"フォルダーの中に有る、
[memory.h][memory.c]のファイルを使用します。
後のファイルは消してしまっても良いでしょう。
[memory.h][memory.c]のファイルについて
このファイルがData EEPROM MemoryとFlash Program Memoryにアクセスする為の関数集です。
この関数集はそのまま利用する事にします。
[memory.h]を見れば、Example等が書いて有るのでぇさほど難しい事もないと思われますがぁ...
以下はPIC18F26K22で[Generate]した結果です。
使用するPICで若干関数が異なる所に注意しましょう、詳しくは生成されたファイルを見ましょう。
Flash Module APIs
uint8_t FLASH_ReadByte(uint32_t flashAddr)
uint16_t FLASH_ReadWord(uint32_t flashAddr)
void FLASH_WriteByte(uint32_t flashAddr, uint8_t *flashRdBufPtr, uint8_t byte)
int8_t FLASH_WriteBlock(uint32_t writeAddr, uint8_t *flashWrBufPtr)
void FLASH_EraseBlock(uint32_t baseAddr)
これらの関数はプログラムエリアのメモリに読み書き出来ます、十分に注意が必要です。
"FLASH_WriteByte"は一旦 1ブロック読出され、指定バイトを変更後"FLASH_WriteBlock"されます。
"FLASH_WriteBlock"は該当ブロックを"FLASH_EraseBlock"で消去された後に書き込まれます。
1ブロックのサイズはPICにより異なるので[memory.h]を見ましょう。
Data EEPROM Module APIs
void DATAEE_WriteByte(uint8_t bAdd, uint8_t bData)
uint8_t DATAEE_ReadByte(uint8_t bAdd)
この関数が従来の"eeprom_read( )/eeprom_write( )"の代わりを行う物です。
上の関数は、"uint8_t bAdd"と8ビットアドレス指定ですが、
PIC16F18313の様に16ビットアドレス指定が下記の様に有るので注意しましょう。
void DATAEE_WriteByte(uint16_t bAdd, uint8_t bData)
uint8_t DATAEE_ReadByte(uint16_t bAdd)
8ビットアドレスでの動作結果
以下はPIC18F26K22でシミュレータを動作させて見た結果の画面です。
"FLASH_ReadWord( )"でFlash Program Memoryのアドレス=0x02番地を読み出した物です。
変数のiを表示させてみると、ちゃんと”FO7F”の内容が読み出されている事が解ると思います。
まず、"__EEPROM_DATA"でEEPROMに初期値データを書き込んで置きます。
そして、"DATAEE_ReadByte( )"で"EEPROM"のアドレス=0x01番地を読み出すとぉ、
変数のcには"0x11"が読み出されていますね。
16ビットアドレスでの動作結果
以下はPIC16F18313でシミュレータを動作させて見た結果の画面です。
PIC16系は"eeprom_read( )"も使えるので、"DATAEE_ReadByte( )"の両方で読み出して見ました。
画面を見てもらえば変数のcとnumがちゃんと内容を表示していますね。
上の画面で、青色四角内のアドレス表示が"F000"と16ビットで表示されています、
8ビットの画面では"000"と表示されているので違いが解るかと思います。
※ 上の画面で、EEPROMに初期値データを書込む方法で"eeprom char dt=0x30 ;"の行が有りますが
PIC18系では使えません、記述しても無視されます、"__EEPROM_DATA"のみ可能です。
《HEF》
EEPROMの無いPIC12F1501等の系統はHEFと言うFlash Program Memoryの一部に書き込める機能が
有ります。
PIC12F1501でGenerateした結果の[memory.c]を見てみます。
Flash Module APIs
uint16_t FLASH_ReadWord(uint16_t flashAddr)
void FLASH_WriteWord(uint16_t flashAddr, uint16_t *ramBuf, uint16_t word)
int8_t FLASH_WriteBlock(uint16_t writeAddr, uint16_t *flashWordArray)
void FLASH_EraseBlock(uint16_t startAddr)
EEPROMが無いので以上の関数のみです。
HEFに関する詳しい内容は、”PICのEEPROMとHEFについて”を見て下さい。
《その他》
それにしても、コンパイラのバージョンが変わる度に前の関数や記述方法等が使えなくなる様な事は
止めて欲しいもんだ。
その度にMyHPの見直し等にせまられるんだぞぉ!!!
【きむ茶工房ガレージハウス】
Copyright (C) 2006-2020 Shigehiro Kimura All Rights Reserved.