60
2018 Microchip Technology Inc. DS50002509B_JP - p. 1 組み込みエンジニア向け MPLAB ® XC32ユ ーザガイド 組み込みエンジニア向け MPLAB ® XC32 ユーザガイド はじめに 本書には 32 ビットデバイスと MPLAB ® XC32 C コンパイラ向けの 7 つのサンプル コードを掲載しています。読者にはマイクロコントローラと C 言語プログラミングに 関するある程度の知識が必要です。 1. LED を点灯 / 消灯させる 2. 遅延関数を使って LED を点滅させる 3. 遅延用に割り込みを使って LED を点滅させる 4. ADC を使ってポテンショメータの値を LED で表示する (MPLAB Harmony を使用 ) 5. ADC を使ってポテンショメータの値を LED で表示する (MCC を使用 ) 6. フラッシュメモリへの書き込みステータスを LED で表示する (MPLAB Harmony を使用 ) 7. フラッシュメモリの値を LED で表示する (MCC を使用 ) 補遺A MPLAB X IDE内でのコード実行 補遺B ソフトウェアとハードウェアの入手先 注意 : この日本語版文書は参考資料としてご利用ください。最 新情報は必ずオリジナルの英語版をご参照願います。

組み込みエンジニア向け MPLAB XC32ユーザガイド ...ww1.microchip.com/downloads/jp/DeviceDoc/50002509B_JP.pdf組み込みエンジニア向けMPLAB® XC32ユーザガイド

  • Upload
    others

  • View
    10

  • Download
    0

Embed Size (px)

Citation preview

Page 1: 組み込みエンジニア向け MPLAB XC32ユーザガイド ...ww1.microchip.com/downloads/jp/DeviceDoc/50002509B_JP.pdf組み込みエンジニア向けMPLAB® XC32ユーザガイド

組み込みエンジニア向け®

注意 : この日本語版文書は参考資料としてご利用ください。最新情報は必ずオリジナルの英語版をご参照願います。

MPLAB XC32ユ ーザガイド

組み込みエンジニア向け MPLAB® XC32 ユーザガイド

はじめに

本書には 32 ビットデバイスと MPLAB® XC32 C コンパイラ向けの 7 つのサンプルコードを掲載しています。読者にはマイクロコントローラと C 言語プログラミングに関するある程度の知識が必要です。

1. LED を点灯 / 消灯させる

2. 遅延関数を使って LED を点滅させる

3. 遅延用に割り込みを使って LED を点滅させる

4. ADC を使ってポテンショメータの値を LED で表示する (MPLAB Harmony を使用 )5. ADC を使ってポテンショメータの値を LED で表示する (MCC を使用 )6. フラッシュメモリへの書き込みステータスを LED で表示する (MPLAB Harmony

を使用 )7. フラッシュメモリの値を LED で表示する (MCC を使用 )

補遺A MPLAB X IDE内でのコード実行

補遺B ソフトウェアとハードウェアの入手先

2018 Microchip Technology Inc. DS50002509B_JP - p. 1

Page 2: 組み込みエンジニア向け MPLAB XC32ユーザガイド ...ww1.microchip.com/downloads/jp/DeviceDoc/50002509B_JP.pdf組み込みエンジニア向けMPLAB® XC32ユーザガイド

組み込みエンジニア向け MPLAB® XC32 ユーザガイド

1. LED を点灯 / 消灯させる

以下のサンプルコードは、PIC32MX470F512L プラグイン モジュール (PIM) を挿したExplorer 16/32 開発ボード上の LED を点灯 / 消灯します。詳細は B.「ソフトウェアとハードウェアの入手先」を参照してください。

// PIC32MX470F512L Configuration Bit Settings// 'C' source line config statements

// DEVCFG3// USERID = No Setting#pragma config FSRSSEL = PRIORITY_7 // Shadow Register Set Priority 7#pragma config PMDL1WAY = ON // Peripheral Module - One Reconfig#pragma config IOL1WAY = ON // Peripheral Pin Select - One Reconfig#pragma config FUSBIDIO = ON // USB USID Selection - Port Function#pragma config FVBUSONIO = ON // USB VBUS ON Selection - Port Function

// DEVCFG2#pragma config FPLLIDIV = DIV_12 // PLL Input Divider - 12x#pragma config FPLLMUL = MUL_24 // PLL Multiplier - 24x#pragma config UPLLIDIV = DIV_12 // USB PLL Input Divider - 12x#pragma config UPLLEN = OFF // USB PLL Disabled and Bypassed#pragma config FPLLODIV = DIV_256 // Sys PLL Output Divide by 256

// DEVCFG1#pragma config FNOSC = FRCDIV // Oscillator - Fast RC Osc w/Div-by-N#pragma config FSOSCEN = ON // Secondary Oscillator Enabled#pragma config IESO = OFF // Internal/External Switch Over Disabled#pragma config POSCMOD = OFF // Primary Oscillator Disabled#pragma config OSCIOFNC = OFF // CLKO on OSCO Pin Disabled#pragma config FPBDIV = DIV_8 // Peripheral Clock Divisor:Sys_Clk/8#pragma config FCKSM = CSDCMD // Clock Switch Disable, FSCM Disabled#pragma config WDTPS = PS1048576 // WDT Postscaler 1:1048576#pragma config WINDIS = OFF // Watchdog Timer is in Non-Window Mode#pragma config FWDTEN = OFF // WDT Disabled (SWDTEN Control)#pragma config FWDTWINSZ = WINSZ_25 // Watchdog Timer Window 25%

// DEVCFG0#pragma config DEBUG = OFF // Background Debugger Disabled#pragma config JTAGEN = OFF // JTAG Disabled#pragma config ICESEL = ICS_PGx2 // ICE/ICD Comm Channel PGEC2/PGED2#pragma config PWP = OFF // Program Flash Write Protect Disabled#pragma config BWP = OFF // Boot Flash Write Protect Disabled#pragma config CP = OFF // Code Protect Disabled

// #pragma config statements should precede project file includes.// Use project enums instead of #define for ON and OFF.

#include <xc.h>

#define LEDS_ON_OFF 0x55

int main(void) {

// Port A access

TRISA = 0x0000; // set all port bits to be output LATA = LEDS_ON_OFF; // write to port latch return 0;}

1.1 参照

1.2 参照

1.3 参照

1.4 参照

DS50002509B_JP - p. 2 2018 Microchip Technology Inc.

Page 3: 組み込みエンジニア向け MPLAB XC32ユーザガイド ...ww1.microchip.com/downloads/jp/DeviceDoc/50002509B_JP.pdf組み込みエンジニア向けMPLAB® XC32ユーザガイド

組み込みエンジニア向け MPLAB® XC32 ユーザガイド

1.1 コンフィグレーション ビット

Microchip 社製デバイスは、各種デバイス機能の動作を設定する ( または有効 / 無効にする ) ためのビットを格納したコンフィグレーション レジスタを備えています。

1.1.1 設定が必要なコンフィグレーション ビット

特に以下の設定が必要です。

• オシレータの選択 - ハードウェアのオシレータ回路に適合させる必要があります。正しく選択しないとデバイスクロックは動作しません。一般的に、開発ボードは高速水晶振動子を使います。以下はサンプルコードからの抜粋です。#pragma config FNOSC = PRI#pragma config POSCMOD = HS

• ウォッチドッグ タイマ - このタイマは、必要になるまで無効にしておく事を推奨します。そうする事で、予期せぬリセットを防ぎます。以下はサンプルコードからの抜粋です。#pragma config FWDTEN = OFF

• コード保護 - コード保護は、必要になるまで無効にしておきます。そうする事で、デバイスメモリへのフルアクセスを確保します。以下はサンプルコードからの抜粋です。#pragma config CP = OFF

本書のサンプルコードとは異なる 32 ビットデバイスを使う場合、上記とは異なるコンフィグレーション ビットの設定が必要になる場合があります。対応するコンフィグレーション ビットの番号と機能は、各デバイスのデータシートを参照してください。データシートは http://www.microchip.com で製品番号を使って検索できます。

各デバイスが備えるコンフィグレーション ビットの詳細は、MPLAB XC32 インストール ディレクトリに保存されている以下のファイルを参照してください。

MPLAB XC32 Installation Directory/docs/PIC32ConfigSet.html

1.1.2 コンフィグレーション ビットの設定方法

MPLAB X IDE では、[Configuration Bits] ウィンドウを使ってコンフィグレーションビットを表示 / 設定できます。このウィンドウは、メニューを Window > PIC MemoryViews > Configuration Bits と選択すると開きます。

図 1: [Configuration Bits] ウィンドウ

必要な設定を済ませたら、コード内で pragma ディレクティブを挿入する位置(main() より前 ) をクリックしてから、[Insert Source Code in Editor] アイコンをクリックします。または、[Generate Source Code to Output] をクリックした後に、[Output]ウィンドウ内のpragmaディレクティブをコードにコピーする事もできます。

Note: コンフィグレーション ビットを正しく設定しないと、デバイスは期待通りに ( あるいは全く ) 機能しません。

2018 Microchip Technology Inc. DS50002509B_JP - p. 3

Page 4: 組み込みエンジニア向け MPLAB XC32ユーザガイド ...ww1.microchip.com/downloads/jp/DeviceDoc/50002509B_JP.pdf組み込みエンジニア向けMPLAB® XC32ユーザガイド

組み込みエンジニア向け MPLAB® XC32 ユーザガイド

1.2 ヘッダファイル <xc.h>このヘッダファイルは、ソースファイル内のコードからコンパイラ固有またはデバイス固有の機能を使えるようにします。xc.h とその他のヘッダファイルは、MPLABXC32 インストール ディレクトリ内の pic32mx/include サブディレクトリに保存されています。

ユーザが選択したデバイスに基づき、コンパイラは xc.hが適切なデバイス固有ヘッダファイルを指定できるようにマクロを設定します。デバイス固有ヘッダは、ユーザコード内でインクルードしない事が必要です ( コードの移植性が失われるため )。

1.3 LED 値マクロの定義

LED に書き込む値は、マクロ記述 (LEDS_ON_OFF) に割り当て済みです (LEDD3/D5/D7/D9 は ON、LED D4/D6/D8/D10 は OFF)。Explorer 16/32 開発ボード関連の文書 ( 回路図を含む ) は、B.5「Explorer 16/32 開発ボードの入手先と設定方法」に記載したリンクから入手できます。

1.4 ポートアクセス

デジタル I/O デバイスピンは周辺モジュール I/O ピンと多重化されている場合があります。デジタル I/O のみを使うため、多重化されている周辺モジュールは無効にします。これには、周辺モジュール レジスタ内のビット値を定義済みの C 変数を使います。これらの変数は、デバイス固有ヘッダファイル ( コンパイラ インストール ディレクトリ内のpic32mx/include/proc,)に書かれています。 どの周辺モジュールがどのピンを共有しているかは、各デバイスのデータシートを参照してください。

「1. LED を点灯または消灯させる」サンプルコードのデバイスでは、ポート A ピンが周辺モジュール ( 既定値では無効 ) と多重化されています。また、ポート A はアナログ I/O 機能を備えないため、全てのポート A ピンは既定値によりデジタル I/O として動作します。ポートがアナログ I/O 機能を備えている場合、ピンをデジタル I/O として動作させるには、ADxPCFT レジスタを使ってアナログ機能を無効にする必要があります。

デバイスピンは、デジタル I/O ポート (PORT) またはデバイス内のラッチ (LAT) レジスタのどちらかに接続します。このサンプルコードでは LATA を使います。変数portValueに代入された値がラッチに代入されます。

LATA = portValue; // write to port latchさらに、ピン方向 ( 入力または出力 ) を指定するために TRIS レジスタを使います。サンプルコードでは TRISAを使います。このレジスタ内のビットを「0」にクリアすると対応するピンは出力として設定され、「1」にセットすると入力として設定されます。以下に例を示します。

TRISA = 0x0000; // set all port bits to be output

DS50002509B_JP - p. 4 2018 Microchip Technology Inc.

Page 5: 組み込みエンジニア向け MPLAB XC32ユーザガイド ...ww1.microchip.com/downloads/jp/DeviceDoc/50002509B_JP.pdf組み込みエンジニア向けMPLAB® XC32ユーザガイド

組み込みエンジニア向け MPLAB® XC32 ユーザガイド

2. 遅延関数を使って LED を点滅させる

以下のサンプルコードでは、前のサンプルコードの一部を変更しています。このサンプルコードは LED を単純に点灯するのではなく、自動的に点滅させます。追加したコードを赤字で示しています。

// PIC32MX470F512L Configuration Bit Settings// 'C' source line config statements

// DEVCFG3// USERID = No Setting#pragma config FSRSSEL = PRIORITY_7 // Shadow Register Set Priority 7#pragma config PMDL1WAY = ON // Peripheral Module - One Reconfig#pragma config IOL1WAY = ON // Peripheral Pin Select - One Reconfig#pragma config FUSBIDIO = ON // USB USID Selection - Port Function#pragma config FVBUSONIO = ON // USB VBUS ON Selection - Port Function

// DEVCFG2#pragma config FPLLIDIV = DIV_12 // PLL Input Divider - 12x#pragma config FPLLMUL = MUL_24 // PLL Multiplier - 24x#pragma config UPLLIDIV = DIV_12 // USB PLL Input Divider - 12x#pragma config UPLLEN = OFF // USB PLL Disabled and Bypassed#pragma config FPLLODIV = DIV_256 // Sys PLL Output Divide by 256

// DEVCFG1#pragma config FNOSC = FRCDIV // Oscillator - Fast RC Osc w/Div-by-N#pragma config FSOSCEN = ON // Secondary Oscillator Enabled#pragma config IESO = OFF // Internal/External Switch Over Disabled#pragma config POSCMOD = OFF // Primary Oscillator Disabled#pragma config OSCIOFNC = OFF // CLKO on OSCO Pin Disabled#pragma config FPBDIV = DIV_8 // Peripheral Clock Divisor:Sys_Clk/8#pragma config FCKSM = CSDCMD // Clock Switch Disable, FSCM Disabled#pragma config WDTPS = PS1048576 // WDT Postscaler 1:1048576#pragma config WINDIS = OFF // Watchdog Timer is in Non-Window Mode#pragma config FWDTEN = OFF // WDT Disabled (SWDTEN Control)#pragma config FWDTWINSZ = WINSZ_25 // Watchdog Timer Window 25%

// DEVCFG0#pragma config DEBUG = OFF // Background Debugger Disabled#pragma config JTAGEN = OFF // JTAG Disabled#pragma config ICESEL = ICS_PGx2 // ICE/ICD Comm Channel PGEC2/PGED2#pragma config PWP = OFF // Program Flash Write Protect Disabled#pragma config BWP = OFF // Boot Flash Write Protect Disabled#pragma config CP = OFF // Code Protect Disabled

// #pragma config statements should precede project file includes.// Use project enums instead of #define for ON and OFF.

#include <xc.h>

#define LEDS_ON_OFF 0x55#define LEDS_OFF_ON 0xAA

void delay (void){ int n = 50000; while(n>0) {n--;}}

2018 Microchip Technology Inc. DS50002509B_JP - p. 5

Page 6: 組み込みエンジニア向け MPLAB XC32ユーザガイド ...ww1.microchip.com/downloads/jp/DeviceDoc/50002509B_JP.pdf組み込みエンジニア向けMPLAB® XC32ユーザガイド

組み込みエンジニア向け MPLAB® XC32 ユーザガイド

int main(void) {

// Port A access TRISA = 0x0; // set all port bits to be output

while(1) {

LATA = LEDS_ON_OFF; // write to port latch

// delay value change delay();

LATA = LEDS_OFF_ON; // write to port latch

// delay value change delay(); } return -1;}

2.1 while() ループと変数値

ループ内で最初に portValueに値を代入し、次にその相補値を代入する事で、ポート A の LED の状態 ( 点灯 / 消灯 ) を変更します。このループは while(1) { }を使って実行します。正常に動作している限り、この whileループは終了しません。エラーが発生すると、main関数は -1を返します。

2.2 delay() 関数

実行速度が速いため、LED は点滅しているように見えません。このため実行速度を遅くする必要があります。このため、関数 delay()を main()の前で宣言および定義し、main()コード内で 2 度呼び出します。

2.1 参照

2.2 参照

Note: コンパイル時は、コードを最適化しない事が必要です ( 最適化オプションは -O0を指定 )。最適化すると遅延ループは削除されます。次のサンプルコードでは、別の方法でコード実行を遅延させます。

DS50002509B_JP - p. 6 2018 Microchip Technology Inc.

Page 7: 組み込みエンジニア向け MPLAB XC32ユーザガイド ...ww1.microchip.com/downloads/jp/DeviceDoc/50002509B_JP.pdf組み込みエンジニア向けMPLAB® XC32ユーザガイド

組み込みエンジニア向け MPLAB® XC32 ユーザガイド

3. 遅延用に割り込みを使って LED を点滅させる

以下のサンプルコードでは、前のサンプルコードの一部を変更しています。前のサンプルコードでは、ループの実行を遅らせるために遅延関数を使いましたが、それによってプログラムにデッドタイムが生じました。これを防ぐため、以下のサンプルコードではタイマ割り込みを使います。割り込みが発生するたびに変数値をインクリメントし、この値を LED で表示します。

このサンプルコードでは、コアタイマを使います。プリスケーラ / ポストスケーラを設定しない場合、このタイマは 2 システムクロック周期でインクリメントします ( この動作は全ての PIC32 MCU で一貫しています )。その他のデバイスタイマも遅延用に使えますが、他のモジュールもそのタイマを使っている場合、注意が必要です。追加したコードを赤字で示しています。

// PIC32MX470F512L Configuration Bit Settings// 'C' source line config statements

// DEVCFG3// USERID = No Setting#pragma config FSRSSEL = PRIORITY_7 // Shadow Register Set Priority 7#pragma config PMDL1WAY = ON // Peripheral Module - One Reconfig#pragma config IOL1WAY = ON // Peripheral Pin Select - One Reconfig#pragma config FUSBIDIO = ON // USB USID Selection - Port Function#pragma config FVBUSONIO = ON // USB VBUS ON Selection - Port Function

// DEVCFG2#pragma config FPLLIDIV = DIV_12 // PLL Input Divider - 12x#pragma config FPLLMUL = MUL_24 // PLL Multiplier - 24x#pragma config UPLLIDIV = DIV_12 // USB PLL Input Divider - 12x#pragma config UPLLEN = OFF // USB PLL Disabled and Bypassed#pragma config FPLLODIV = DIV_256 // Sys PLL Output Divide by 256

// DEVCFG1#pragma config FNOSC = FRCDIV // Oscillator - Fast RC Osc w/Div-by-N#pragma config FSOSCEN = ON // Secondary Oscillator Enabled#pragma config IESO = OFF // Internal/External Switch Over Disabled#pragma config POSCMOD = OFF // Primary Oscillator Disabled#pragma config OSCIOFNC = OFF // CLKO on OSCO Pin Disabled#pragma config FPBDIV = DIV_8 // Peripheral Clock Divisor:Sys_Clk/8#pragma config FCKSM = CSDCMD // Clock Switch Disable, FSCM Disabled#pragma config WDTPS = PS1048576 // WDT Postscaler 1:1048576#pragma config WINDIS = OFF // Watchdog Timer is in Non-Window Mode#pragma config FWDTEN = OFF // WDT Disabled (SWDTEN Control)#pragma config FWDTWINSZ = WINSZ_25 // Watchdog Timer Window 25%

// DEVCFG0#pragma config DEBUG = OFF // Background Debugger Disabled#pragma config JTAGEN = OFF // JTAG Disabled#pragma config ICESEL = ICS_PGx2 // ICE/ICD Comm Channel PGEC2/PGED2#pragma config PWP = OFF // Program Flash Write Protect Disabled#pragma config BWP = OFF // Boot Flash Write Protect Disabled#pragma config CP = OFF // Code Protect Disabled

// #pragma config statements should precede project file includes.// Use project enums instead of #define for ON and OFF.

#include <xc.h> #include <cp0defs.h> #include <sys/attribs.h>

3.1 参照

2018 Microchip Technology Inc. DS50002509B_JP - p. 7

Page 8: 組み込みエンジニア向け MPLAB XC32ユーザガイド ...ww1.microchip.com/downloads/jp/DeviceDoc/50002509B_JP.pdf組み込みエンジニア向けMPLAB® XC32ユーザガイド

組み込みエンジニア向け MPLAB® XC32 ユーザガイド

// CORE_TICK_RATE = FOSC/2/TOGGLES_PER_SEC// FOSC/2 = Core timer clock frequency = 8MHz/2=4MHz// TOGGLES_PER_SEC = Toggle LED x times per second; x=5#define CORE_TICK_RATE 800000u

// Interrupt function

void __ISR(_CORE_TIMER_VECTOR, IPL2SOFT) CTInterruptHandler(void){ // static variable for permanent storage duration static unsigned char portValue = 0; // variables for Compare period unsigned long ct_count = _CP0_GET_COUNT(); unsigned long period = CORE_TICK_RATE;

// write to port latch LATA = portValue++; // update the Compare period period += ct_count; _CP0_SET_COMPARE(period); // clear the interrupt flag IFS0CLR = _IFS0_CTIF_MASK;}

int main(void) {

unsigned int stat_gie, cause_val;

// Disables interrupts by clearing the global interrupt enable bit // in the STATUS register. stat_gie = __builtin_disable_interrupts();

// Port A access TRISA = 0x0; // set all port bits to be output LATA = 0x0; // clear all bits

// Configure the core timer // clear the CP0 Count register _CP0_SET_COUNT(0); // set up the period in the CP0 Compare register _CP0_SET_COMPARE(CORE_TICK_RATE); // halt core timer and program at a debug breakpoint _CP0_BIC_DEBUG(_CP0_DEBUG_COUNTDM_MASK);

// Set up core timer interrupt // clear core timer interrupt flag IFS0CLR = _IFS0_CTIF_MASK; // set core time interrupt priority of 2 IPC0CLR = _IPC0_CTIP_MASK; IPC0SET = (2 << _IPC0_CTIP_POSITION); // set core time interrupt subpriority of 0 IPC0CLR = _IPC0_CTIS_MASK; IPC0SET = (0 << _IPC0_CTIS_POSITION); // enable core timer interrupt IEC0CLR = _IEC0_CTIE_MASK; IEC0SET = (1 << _IEC0_CTIE_POSITION);

3.2 参照

3.3 参照

3.4 参照

DS50002509B_JP - p. 8 2018 Microchip Technology Inc.

Page 9: 組み込みエンジニア向け MPLAB XC32ユーザガイド ...ww1.microchip.com/downloads/jp/DeviceDoc/50002509B_JP.pdf組み込みエンジニア向けMPLAB® XC32ユーザガイド

組み込みエンジニア向け MPLAB® XC32 ユーザガイド

// set the CP0 Cause register Interrupt Vector bit cause_val = _CP0_GET_CAUSE(); cause_val |= _CP0_CAUSE_IV_MASK; _CP0_SET_CAUSE(cause_val); // enable multi-vector interrupts INTCONSET = _INTCON_MVEC_MASK; // enable global interrupts __builtin_enable_interrupts();

while(1);

return -1;}

2018 Microchip Technology Inc. DS50002509B_JP - p. 9

Page 10: 組み込みエンジニア向け MPLAB XC32ユーザガイド ...ww1.microchip.com/downloads/jp/DeviceDoc/50002509B_JP.pdf組み込みエンジニア向けMPLAB® XC32ユーザガイド

組み込みエンジニア向け MPLAB® XC32 ユーザガイド

3.1 追加のヘッダファイル

xc.hに加えて、2つのヘッダファイル (CP0マクロ用のcp0defs.hと ISRマクロ用のsys/attribs.h) をインクルードする必要があります。

3.2 割り込み関数

このサンプルコードでは、ISRマクロ__ISR(v,IPL)を使ってCTInterruptHandler()を割り込み関数にします (v: コアタイマの割り込みベクタ、IPL: 割り込み優先度 (2)とソフトウェアによるコンテクスト保存方法を IPL2SOFTとして指定 )。ISR の詳細は、『MPLAB® XC32 C/C++ コンパイラ ユーザガイド』(DS50001686) 内の「割り込み」を参照してください。

割り込み関数内でカウンタ portValueがインクリメントし、LED で表示されます。

割り込みをクリアするには、CP0 コンペアレジスタに値を書き込む必要があります。その後、コンペアレジスタ内の値とコアタイマの値が比較され、次の割り込みが生成されます。コアタイマの現在の値は _CP0_GET_COUNT()により取得します。

最終的に割り込みフラグがクリアされます。

3.3 コアタイマの設定

32 ビットコアタイマは「0」に初期設定します。コンペアレジスタは、初期値CORE_TICK_RATE に設定します。コアタイマ値がコンペアレジスタ値に達した時に割り込みがトリガされます。

加えて、デバッグを支援するため、ブレークポイントでコアタイマが停止するよう設定します。

コアタイマの詳細は、『PIC32 ファミリ リファレンス マニュアル、セクション 2.M4K® コア搭載デバイス用 CPU』(DS61113) を参照してください。

3.4 コアタイマ割り込み

コアタイマ割り込みは以下の手順で設定します。

mainコードの最初で、__builtin_disable_interrupts()を使ってグローバル割り込みを無効にします。 while(1) ループへジャンプする前に、__builtin_enable_interrupts()を使ってグローバル割り込みを有効にします。

デバイス ヘッダファイル内のマクロを使ってコアタイマ割り込みフラグをクリアします (xc.hからアクセス )。デバイスマクロを使って割り込みの優先度と副優先度を設定します。この優先度は、割り込み関数の優先度 (= 2) と一致する必要があります。

デバイスマクロを使ってコアタイマとマルチベクタ割り込みを有効にします。デバイスマクロと CP0 マクロを使って CP0 Cause レジスタ内の割り込みベクタビットをセットします

DS50002509B_JP - p. 10 2018 Microchip Technology Inc.

Page 11: 組み込みエンジニア向け MPLAB XC32ユーザガイド ...ww1.microchip.com/downloads/jp/DeviceDoc/50002509B_JP.pdf組み込みエンジニア向けMPLAB® XC32ユーザガイド

組み込みエンジニア向け MPLAB® XC32 ユーザガイド

4. ADC を使ってポテンショメータの値を LED で表示する (MPLAB Harmony を使用 )このサンプルコードは、3.「遅延用に割り込みを使って LED を点滅させる」と同じデバイスとポート A LED を使います。ただし、このサンプルコードでは、デモボード上のポテンショメータからの値をポートB (RB2/AN2)経由でアナログ /デジタル コンバータ (ADC) に入力し、その変換結果を LED で表示します。

また、コードは手書きではなく MPLAB Harmony を使って生成します。MPLABHarmony 統合ソフトウェア フレームワークは以下からダウンロードできます。

http://www.microchip.com/mplab/mplab-harmony

MPLAB Harmony Configurator (MHC) は、MPLAB Harmony の GUI をセットアップするための MPLAB X IDE プラグインです。このプラグインは、MPLAB X IDE の[Available Plugins] タブ (Tools > Plugins で開く ) を使ってインストールできます。プラグインのインストール方法は MPLAB X IDE のヘルプを参照してください。

このサンプルコードは、adc_pot サンプルコードに基づきます。Windows®PC の場合、このコードは以下に格納されています : C:\microchip\harmony\v1_10\apps\examples\peripheral\adc\adc_pot

4.1 MPLAB X IDE 内で MPLAB Harmony プロジェクトを作成する

以下のダイアログにより、このサンプルコード向けに MPLAB Harmony プロジェクトを設定します。

MPLAB X IDE で、メニューから File > New Project を選択します。

図 2: 新しい MPLAB Harmony プロジェクト - ステップ 1

2018 Microchip Technology Inc. DS50002509B_JP - p. 11

Page 12: 組み込みエンジニア向け MPLAB XC32ユーザガイド ...ww1.microchip.com/downloads/jp/DeviceDoc/50002509B_JP.pdf組み込みエンジニア向けMPLAB® XC32ユーザガイド

組み込みエンジニア向け MPLAB® XC32 ユーザガイド

[Harmony Path] が MPLAB Harmony の実際のインストール先を指している事を確認します。

図 3: 新しい MPLAB Harmony プロジェクト - ステップ 2

DS50002509B_JP - p. 12 2018 Microchip Technology Inc.

Page 13: 組み込みエンジニア向け MPLAB XC32ユーザガイド ...ww1.microchip.com/downloads/jp/DeviceDoc/50002509B_JP.pdf組み込みエンジニア向けMPLAB® XC32ユーザガイド

組み込みエンジニア向け MPLAB® XC32 ユーザガイド

4.2 MPLAB Harmony プロジェクトの設定

プロジェクトの設定に従い、MHC は実装済みクロックの情報を表示します。青でハイライト表示されたテキストは変更を示します。このサンプルコードでは、クロック設定を一切変更しません。

ADC ドライバを図 6 の通りに設定し、BSP (Board Support Packages) を図 7 の通りに設定します。

図 4: MPLAB Harmony プロジェクトと MHC

図 5: Harmony フレームワークの設定 - クロック

2018 Microchip Technology Inc. DS50002509B_JP - p. 13

Page 14: 組み込みエンジニア向け MPLAB XC32ユーザガイド ...ww1.microchip.com/downloads/jp/DeviceDoc/50002509B_JP.pdf組み込みエンジニア向けMPLAB® XC32ユーザガイド

組み込みエンジニア向け MPLAB® XC32 ユーザガイド

図 6: Harmony フレームワークの設定 - ADC ドライバ

図 7: ADC プロジェクトのリソース設定

DS50002509B_JP - p. 14 2018 Microchip Technology Inc.

Page 15: 組み込みエンジニア向け MPLAB XC32ユーザガイド ...ww1.microchip.com/downloads/jp/DeviceDoc/50002509B_JP.pdf組み込みエンジニア向けMPLAB® XC32ユーザガイド

組み込みエンジニア向け MPLAB® XC32 ユーザガイド

図 8: ADC プロジェクトのピン設定

2018 Microchip Technology Inc. DS50002509B_JP - p. 15

Page 16: 組み込みエンジニア向け MPLAB XC32ユーザガイド ...ww1.microchip.com/downloads/jp/DeviceDoc/50002509B_JP.pdf組み込みエンジニア向けMPLAB® XC32ユーザガイド

組み込みエンジニア向け MPLAB® XC32 ユーザガイド

4.3 コードを生成してアプリケーション ファイルを編集する

以上の図の通りに MHC を設定した後に、[MPLAB Harmony Configurator] タブ上の[Generate Code] ボタンをクリックします。

設定を保存し ( 図 9 参照 )、プロジェクト コードを生成します ( 図 10 参照 )。

図 9: 設定の保存

図 10: プロジェクト コードの生成

DS50002509B_JP - p. 16 2018 Microchip Technology Inc.

Page 17: 組み込みエンジニア向け MPLAB XC32ユーザガイド ...ww1.microchip.com/downloads/jp/DeviceDoc/50002509B_JP.pdf組み込みエンジニア向けMPLAB® XC32ユーザガイド

組み込みエンジニア向け MPLAB® XC32 ユーザガイド

図 11 に示す通り、MPLAB Harmony が生成するコードはモジュール化されています。アプリケーション ファイル (app.hと app.c) は、本サンプルコード向けに編集します。

フラッシュメモリの使い方の詳細は、『PIC32 ファミリ リファレンス マニュアル、セクション 17. 10 ビットアナログ / デジタルコンバータ (ADC)』 (DS61104) を参照してください。

図 11: MHC が生成したコードの ADC プロジェクト ツリー

2018 Microchip Technology Inc. DS50002509B_JP - p. 17

Page 18: 組み込みエンジニア向け MPLAB XC32ユーザガイド ...ww1.microchip.com/downloads/jp/DeviceDoc/50002509B_JP.pdf組み込みエンジニア向けMPLAB® XC32ユーザガイド

組み込みエンジニア向け MPLAB® XC32 ユーザガイド

4.4 編集後の app.hコード

編集後の app.hテンプレート ファイルを以下に示します。一部のコメントは省略しました ( 省略箇所には < >で囲んだ注釈を記入しています )。追加したコードを赤字で示しています。

/******************************************************************** MPLAB Harmony Application Header File

<See generated app.h file for file information.>

********************************************************************/

//DOM-IGNORE-BEGIN/********************************************************************Copyright (c) 2013-2014 released Microchip Technology Inc. All rights reserved.

<See generated app.h file for copyright information.>

********************************************************************///DOM-IGNORE-END

#ifndef _APP_H#define _APP_H

#define ADC_NUM_SAMPLE_PER_AVERAGE 16

// ******************************************************************// ******************************************************************// Section:Included Files// ******************************************************************// ******************************************************************

#include <stdint.h>#include <stdbool.h>#include <stddef.h>#include <stdlib.h>#include "system_config.h"#include "system_definitions.h"

// DOM-IGNORE-BEGIN#ifdef __cplusplus // Provide C++ Compatibility

extern "C" {

#endif// DOM-IGNORE-END

// ******************************************************************// ******************************************************************// Section:Type Definitions// ******************************************************************// ******************************************************************

// ******************************************************************/* Application states

Summary: Application states enumeration

Description:

DS50002509B_JP - p. 18 2018 Microchip Technology Inc.

Page 19: 組み込みエンジニア向け MPLAB XC32ユーザガイド ...ww1.microchip.com/downloads/jp/DeviceDoc/50002509B_JP.pdf組み込みエンジニア向けMPLAB® XC32ユーザガイド

組み込みエンジニア向け MPLAB® XC32 ユーザガイド

This enumeration defines the valid application states.These states determine the behavior of the application at various times.*/

typedef enum{ /* Application's state machine's initial state.*/ APP_STATE_INIT=0, APP_ADC_WAIT, APP_ADC_DISPLAY

} APP_STATES;

// ******************************************************************/* Application Data

Summary: Holds application data

Description: This structure holds the application's data.

Remarks: Application strings and buffers are be defined outside this structure.*/

typedef struct{ /* The application's current state */ APP_STATES state;

/* Values for the conversions */ int potValue; int ledMask;

} APP_DATA;

// ******************************************************************// ******************************************************************// Section:Application Callback Routines// ******************************************************************// ******************************************************************/* These routines are called by drivers when certain events occur.*/

// ******************************************************************// ******************************************************************// Section:Application Initialization and State Machine Functions// ******************************************************************// ******************************************************************

/******************************************************************** Function: void APP_Initialize ( void )

Summary: MPLAB Harmony application initialization routine.

<See generated app.h file for app init information.>

2018 Microchip Technology Inc. DS50002509B_JP - p. 19

Page 20: 組み込みエンジニア向け MPLAB XC32ユーザガイド ...ww1.microchip.com/downloads/jp/DeviceDoc/50002509B_JP.pdf組み込みエンジニア向けMPLAB® XC32ユーザガイド

組み込みエンジニア向け MPLAB® XC32 ユーザガイド

*/

void APP_Initialize ( void );

/******************************************************************** Function: void APP_Tasks ( void )

Summary: MPLAB Harmony Demo application tasks function

<See generated app.h file for app tasks information.>

*/

void APP_Tasks( void );

#endif /* _APP_H */

//DOM-IGNORE-BEGIN#ifdef __cplusplus}#endif//DOM-IGNORE-END

/******************************************************************** End of File*/

DS50002509B_JP - p. 20 2018 Microchip Technology Inc.

Page 21: 組み込みエンジニア向け MPLAB XC32ユーザガイド ...ww1.microchip.com/downloads/jp/DeviceDoc/50002509B_JP.pdf組み込みエンジニア向けMPLAB® XC32ユーザガイド

組み込みエンジニア向け MPLAB® XC32 ユーザガイド

4.5 編集後の app.cコード

編集後の app.cテンプレート ファイルを以下に示します。一部のコメントは省略しました ( 省略箇所には < >で囲んだ注釈を記入しています )。追加したコードを赤字で示しています。

一部の長いコード行は次のページにまたがっています。これは、本書のコードをそのままエディタへカット & ペーストできるように配慮したためです。

/******************************************************************** MPLAB Harmony Application Source File <See generated app.c file for file information.>

********************************************************************/

// DOM-IGNORE-BEGIN/********************************************************************Copyright (c) 2013-2014 released Microchip Technology Inc. All rights reserved.

<See generated app.c file for copyright information.>

********************************************************************/// DOM-IGNORE-END

// ******************************************************************// ******************************************************************// Section:Included Files // ******************************************************************// ******************************************************************

#include "app.h"

// ******************************************************************// ******************************************************************// Section:Global Data Definitions// ******************************************************************// ******************************************************************

// ******************************************************************/* Application Data

Summary: Holds application data

Description: This structure holds the application's data.

Remarks: This structure should be initialized by the APP_Initialize function. Application strings and buffers are be defined outside this structure.*/

APP_DATA appData;

// ******************************************************************// ******************************************************************// Section:Application Callback Functions

2018 Microchip Technology Inc. DS50002509B_JP - p. 21

Page 22: 組み込みエンジニア向け MPLAB XC32ユーザガイド ...ww1.microchip.com/downloads/jp/DeviceDoc/50002509B_JP.pdf組み込みエンジニア向けMPLAB® XC32ユーザガイド

組み込みエンジニア向け MPLAB® XC32 ユーザガイド

// ******************************************************************// ******************************************************************

/* TODO:Add any necessary callback functions.*/

// ******************************************************************// ******************************************************************// Section:Application Local Functions// ******************************************************************// ******************************************************************

/******************************************************************** Function: void Set_LED_Status ( void )

Description: Set LEDs to display the ADC average result.*/

void Set_LED_Status(void){ int i;

appData.ledMask = 0; /* Creates a mask for the LEDs, corresponding to the value read * from the potentiometer */ appData.potValue >>= 7; /* 10-bit value to 3-bit value */ for (i = 0; i <= appData.potValue; i++) { appData.ledMask |= 1<<(i); } /* Write the mask to the LEDs */ SYS_PORTS_Write( PORTS_ID_0, PORT_CHANNEL_A, (PORTS_DATA_MASK)appData.ledMask );}

// ******************************************************************// ******************************************************************// Section:Application Initialization and State Machine Functions// ******************************************************************// ******************************************************************

/******************************************************************** Function: void APP_Initialize ( void )

Remarks: See prototype in app.h. */

void APP_Initialize ( void ){ /* Place the App state machine in its initial state.*/ appData.state = APP_STATE_INIT;

/* TODO:Initialize your application's state machine and other * parameters.

DS50002509B_JP - p. 22 2018 Microchip Technology Inc.

Page 23: 組み込みエンジニア向け MPLAB XC32ユーザガイド ...ww1.microchip.com/downloads/jp/DeviceDoc/50002509B_JP.pdf組み込みエンジニア向けMPLAB® XC32ユーザガイド

組み込みエンジニア向け MPLAB® XC32 ユーザガイド

*/}

/******************************************************************** Function: void APP_Tasks ( void )

Remarks: See prototype in app.h.*/

void APP_Tasks ( void ){

/* Check the application's current state.*/ switch ( appData.state ) { /* Application's initial state.*/ case APP_STATE_INIT: { /* Enable ADC */ DRV_ADC_Open(); appData.state = APP_ADC_WAIT; break; } /* Display pot value on LEDs*/ case APP_ADC_DISPLAY: { Set_LED_Status(); appData.state = APP_ADC_WAIT; break; } /* Wait for ADC */ case APP_ADC_WAIT: { /* Wait for conversion*/ if (DRV_ADC_SamplesAvailable()) { int i; //Read data for(i=0;i<ADC_NUM_SAMPLE_PER_AVERAGE;i++) appData.potValue += PLIB_ADC_ResultGetByIndex(ADC_ID_1, i); appData.potValue = appData.potValue / ADC_NUM_SAMPLE_PER_AVERAGE; appData.state = APP_ADC_DISPLAY; } break; } /* The default state should never be executed.*/ default:

4.6 参照

4.7 参照

4.8 参照

2018 Microchip Technology Inc. DS50002509B_JP - p. 23

Page 24: 組み込みエンジニア向け MPLAB XC32ユーザガイド ...ww1.microchip.com/downloads/jp/DeviceDoc/50002509B_JP.pdf組み込みエンジニア向けMPLAB® XC32ユーザガイド

組み込みエンジニア向け MPLAB® XC32 ユーザガイド

{ /* TODO:Handle error in application's state machine.*/ break; } }}

/******************************************************************** End of File */

4.6 アプリケーション ステート - APP_STATE_INITタスクループの開始時にアプリケーションは初期ステートです。この場合、ADC は自動サンプリング モードで有効になります。次に、アプリケーションは待機ステート(APP_ADC_WAIT) に移行します。アプリケーション ステートは app.h内で定義されます。

4.7 アプリケーション ステート - APP_ADC_DISPLAYAPP_ADC_WAIT中に ADC 値がキャプチャされると、Application Local Functions セクション内で関数 Set_LED_Status() を呼び出す事によって、その値を表示します。この関数は、マスク (appData.ledMask) を使って、ポテンショメータからの ADC値 (appData.potValue) を LED に表示します。これらの変数は、app.h 内で定義されます。

この関数が戻ると、アプリケーション ステートは APP_ADC_WAITに戻り、次のサンプルを待機します。

4.8 アプリケーション ステート - APP_ADC_WAIT初期化 (APP_STATE_INIT) 後に、アプリケーションはポテンショメータ値が変換されるまで待機します。ADC値が変数appData.potValueに代入されると、ステートAPP_ADC_DISPLAYでその値が LED に表示されます。ADC_NUM_SAMPLE_PER_AVERAGEは app.h内で定義されます。

DS50002509B_JP - p. 24 2018 Microchip Technology Inc.

Page 25: 組み込みエンジニア向け MPLAB XC32ユーザガイド ...ww1.microchip.com/downloads/jp/DeviceDoc/50002509B_JP.pdf組み込みエンジニア向けMPLAB® XC32ユーザガイド

組み込みエンジニア向け MPLAB® XC32 ユーザガイド

5. ADC を使ってポテンショメータの値を LED で表示する (MCC を使用 )このサンプルコードは、3.「遅延用に割り込みを使って LED を点滅させる」と同じデバイスとポート A LED を使います。ただし、このサンプルコードでは、デモボード上のポテンショメータからの値をポートB (RB2/AN2)経由でアナログ /デジタル コンバータ (ADC) に入力し、その変換結果を LED で表示します。

コードは手書きではなくMPLAB Code Configurator (MCC)を使って生成します。MCCプラグインは、MPLAB X IDE の [Available Plugins] タブ (Tools > Plugins で開く ) を使ってインストールできます。プラグインのインストール方法は MPLAB X IDE のヘルプを参照してください。

MCC のインストール情報と『MPLAB® Code Configurator ユーザガイド』(DS40001725)は、以下の MPLAB Code Configurator ウェブページで入手できます。

http://www.microchip.com/mplab/mplab-code-configurator

このサンプルコードを生成するために使った MCC の設定を以下の図に示します。

図 12: ADC プロジェクト - リソース - システム モジュール

2018 Microchip Technology Inc. DS50002509B_JP - p. 25

Page 26: 組み込みエンジニア向け MPLAB XC32ユーザガイド ...ww1.microchip.com/downloads/jp/DeviceDoc/50002509B_JP.pdf組み込みエンジニア向けMPLAB® XC32ユーザガイド

組み込みエンジニア向け MPLAB® XC32 ユーザガイド

図 13: ADC プロジェクト - システム モジュール - Easy Setup

DS50002509B_JP - p. 26 2018 Microchip Technology Inc.

Page 27: 組み込みエンジニア向け MPLAB XC32ユーザガイド ...ww1.microchip.com/downloads/jp/DeviceDoc/50002509B_JP.pdf組み込みエンジニア向けMPLAB® XC32ユーザガイド

組み込みエンジニア向け MPLAB® XC32 ユーザガイド

図 14: ADC プロジェクト - システム モジュール - レジスタ

2018 Microchip Technology Inc. DS50002509B_JP - p. 27

Page 28: 組み込みエンジニア向け MPLAB XC32ユーザガイド ...ww1.microchip.com/downloads/jp/DeviceDoc/50002509B_JP.pdf組み込みエンジニア向けMPLAB® XC32ユーザガイド

組み込みエンジニア向け MPLAB® XC32 ユーザガイド

図 15: ADC プロジェクト - リソース - ADC1

DS50002509B_JP - p. 28 2018 Microchip Technology Inc.

Page 29: 組み込みエンジニア向け MPLAB XC32ユーザガイド ...ww1.microchip.com/downloads/jp/DeviceDoc/50002509B_JP.pdf組み込みエンジニア向けMPLAB® XC32ユーザガイド

組み込みエンジニア向け MPLAB® XC32 ユーザガイド

図 16: ADC プロジェクト - ADC1 - Easy Setup

図 17: ADC プロジェクト - ADC1 - ピンリソース

図 17 での選択後に、RB2 から AN2 への割り当てが表示されます。

2018 Microchip Technology Inc. DS50002509B_JP - p. 29

Page 30: 組み込みエンジニア向け MPLAB XC32ユーザガイド ...ww1.microchip.com/downloads/jp/DeviceDoc/50002509B_JP.pdf組み込みエンジニア向けMPLAB® XC32ユーザガイド

組み込みエンジニア向け MPLAB® XC32 ユーザガイド

図 18: ADC プロジェクト - リソース - ピンモジュール

図 19: ADC プロジェクト - ピンモジュール - Easy Setup

図 20 でピン RA0:7 が選択されている場合、これらのピンは上図のウィンドウに表示されます。

RB2 は図 17 で選択済みです。

RB6 と RB7 は、図 13 で PGEC2/PGED2 向けに選択済みです。 ウィンドウ内にピン設定が表示されたら、各ピンの設定を表示および選択できます。

DS50002509B_JP - p. 30 2018 Microchip Technology Inc.

Page 31: 組み込みエンジニア向け MPLAB XC32ユーザガイド ...ww1.microchip.com/downloads/jp/DeviceDoc/50002509B_JP.pdf組み込みエンジニア向けMPLAB® XC32ユーザガイド

組み込みエンジニア向け MPLAB® XC32 ユーザガイド

図 20: ADC プロジェクト - ピンリソース

2018 Microchip Technology Inc. DS50002509B_JP - p. 31

Page 32: 組み込みエンジニア向け MPLAB XC32ユーザガイド ...ww1.microchip.com/downloads/jp/DeviceDoc/50002509B_JP.pdf組み込みエンジニア向けMPLAB® XC32ユーザガイド

組み込みエンジニア向け MPLAB® XC32 ユーザガイド

以上のようにコードを設定した後に、[Project Resources] ウィンドウの [Generate]ボタンをクリックします ( 図 12)。MCC はモジュール形式のコードを生成します。従って main、システム、周辺モジュールコードは全て別々のファイルとして生成されます。各周辺モジュールのヘッダファイルも別々です。

潜在的なエラーを捉えるために割り込みマネージャ ファイルが生成されます。このアプリケーションでは割り込みは使いませんが、将来用に割り込みマネージャ ファイルが生成されます。

プログラムに機能を追加する場合、必ず main.c を編集する必要があります。また、そのコードに必要な全ての関数またはマクロが生成されたファイル内に含まれているかどうか確認する必要があります。

フラッシュメモリの使い方の詳細は、『PIC32 ファミリ リファレンス マニュアル、セクション 17. 10 ビットアナログ / デジタルコンバータ (ADC)』 (DS61104) を参照してください。

図 21: MCC が生成したコードの ADC プロジェクト ツリー

DS50002509B_JP - p. 32 2018 Microchip Technology Inc.

Page 33: 組み込みエンジニア向け MPLAB XC32ユーザガイド ...ww1.microchip.com/downloads/jp/DeviceDoc/50002509B_JP.pdf組み込みエンジニア向けMPLAB® XC32ユーザガイド

組み込みエンジニア向け MPLAB® XC32 ユーザガイド

5.1 編集後の main.cコード

編集後の main.c テンプレート ファイルを以下に示します。一部のコメントは省略しました ( 省略箇所には < >で囲んだ注釈を記入しています )。main()に追加したコードを赤字で示しています。

/** Generated Main Source File

<See generated main.c file for file information.> */

/*(c) 2016 Microchip Technology Inc. and its subsidiaries.You may use this software and any derivatives exclusively with Microchip products.

<See generated main.c file for additional copyright information.> */

#include "mcc_generated_files/mcc.h"

unsigned int value = 0;

/* Creates a mask for the LEDs, corresponding * to the value read from the potentiometer */unsigned int Mask_Value(unsigned int pot_value){ int i; unsigned int mask_value = 0; pot_value >>= 7; /* 10-bit value to 3-bit value */ for (i = 0; i <= pot_value; i++) { mask_value |= 1<<(i); } return mask_value;}

/* Main application */int main(void) { // initialize the device SYSTEM_Initialize();

while (1) {

// Wait for conversion // and then get result while(!ADC1_IsConversionComplete()); value = ADC1_ConversionResultGet(); // Mark value value = Mask_Value(value); // Write to Port Latch/LEDs LATA = value;

} return -1;}

5.2 参照

5.3 参照

5.4 参照

2018 Microchip Technology Inc. DS50002509B_JP - p. 33

Page 34: 組み込みエンジニア向け MPLAB XC32ユーザガイド ...ww1.microchip.com/downloads/jp/DeviceDoc/50002509B_JP.pdf組み込みエンジニア向けMPLAB® XC32ユーザガイド

組み込みエンジニア向け MPLAB® XC32 ユーザガイド

/** End of File */

5.2 ADC 変換および結果

MCCはAD1CON1レジスタ内のビットを次の通りに設定します : ADCを有効にする、自動サンプリングを使う、内部カウンタを使ってサンプリングを終了 / 変換を開始する。従って、main()コードは変換の終了を待機し、結果を取得するだけで済みます。

adc1.cモジュールから以下の関数を使います。

bool ADC1_IsConversionComplete(void)uint16_t ADC1_ConversionResultGet(void)その他の ADC 機能の設定の詳細は『PIC32 ファミリ リファレンス マニュアル、セクション 17. 10 ビットアナログ / デジタルコンバータ (ADC)』 (DS61104) を参照してください。

5.3 ADC 変換結果のマスク

ADC 変換結果は 10 ビットであるのに対し LED は 8 個しかないため、関数Mask_Value()を使って変数 value内の変換結果をマスクする事により、最上位の3 ビットだけを 3 個の LED で表示します。。

5.4 ポートラッチと LED への書き込み

マスクした ADC 変換結果は、ポート A の LED で表示します。

DS50002509B_JP - p. 34 2018 Microchip Technology Inc.

Page 35: 組み込みエンジニア向け MPLAB XC32ユーザガイド ...ww1.microchip.com/downloads/jp/DeviceDoc/50002509B_JP.pdf組み込みエンジニア向けMPLAB® XC32ユーザガイド

組み込みエンジニア向け MPLAB® XC32 ユーザガイド

6. フラッシュメモリへの書き込みステータスを LEDで表示する (MPLAB Harmonyを使用 )このサンプルコードは、4.「ADC を使ってポテンショメータの値を LED で表示する(MPLAB Harmony を使用 )」と同じデバイスとポート A LED を使います。ただし、このサンプルコードでは、フラッシュ ( 不揮発性 ) メモリに対して値を読み書きし、それが成功した時に LED2 を点灯させ、失敗した時に LED0 を点灯させます。

コードは手書きではなく MPLAB Harmony を使って生成します。MPLAB Harmony 統合ソフトウェア フレームワークと MPLAB Harmony Configurator (MHC) MPLAB XIDE プラグインのダウンロード / インストール方法は、4.「ADC を使ってポテンショメータの値を LED で表示する (MPLAB Harmony を使用 )」を参照してください。

MPLAB X IDE における MPLAB Harmony プロジェクトの作成方法については、4.1「MPLAB X IDE 内で MPLAB Harmony プロジェクトを作成する」を参照してください。以下のサンプルコードのプロジェクト名は「Expample6」です。

このサンプルコードは、以下の場所にあるフラッシュ ドライバ アプリケーションに基づきます (Windows OS の場合 ): C:\microchip\harmony\v1_10\apps\examples\peripheral\flash\flash_modify

6.1 MPLAB Harmony プロジェクトの設定

プロジェクトの設定に従い、MPLAB Harmony Configurator (MHC) は実装済みクロックの情報を表示します。青のハイライトは変更を示します。このサンプルコードでは、クロック設定を一切変更しません。

フラッシュドライバを図 22 の通りに設定し、BSP (Board Support Packages) を図 23の通りに設定します。

図 22: Harmony フレームワークの設定 - フラッシュ ドライバ

2018 Microchip Technology Inc. DS50002509B_JP - p. 35

Page 36: 組み込みエンジニア向け MPLAB XC32ユーザガイド ...ww1.microchip.com/downloads/jp/DeviceDoc/50002509B_JP.pdf組み込みエンジニア向けMPLAB® XC32ユーザガイド

組み込みエンジニア向け MPLAB® XC32 ユーザガイド

図 23: フラッシュ プロジェクトのリソース設定

DS50002509B_JP - p. 36 2018 Microchip Technology Inc.

Page 37: 組み込みエンジニア向け MPLAB XC32ユーザガイド ...ww1.microchip.com/downloads/jp/DeviceDoc/50002509B_JP.pdf組み込みエンジニア向けMPLAB® XC32ユーザガイド

組み込みエンジニア向け MPLAB® XC32 ユーザガイド

6.2 コードを生成してアプリケーション ファイルを編集する

以上の図の通りに MHC を設定した後に、[MPLAB Harmony Configurator] タブ上の[Generate Code] ボタンをクリックします。

設定を保存し、プロジェクト コードを生成します (4.3「コードを生成してアプリケーション ファイルを編集する」参照 )。図 24 に示す通り、MPLAB Harmony が生成するコードはモジュール化されています。アプリケーション ファイル (app.hと app.c) は、本サンプルコード向けに編集します。

フラッシュメモリの使い方の詳細は、『PIC32 ファミリ リファレンス マニュアル、セクション 5. 10 ビットアナログ / デジタルコンバータ (ADC)』(DS60001121) を参照してください。

図 24: MHC が生成したコードのフラッシュ プロジェクト ツリー

2018 Microchip Technology Inc. DS50002509B_JP - p. 37

Page 38: 組み込みエンジニア向け MPLAB XC32ユーザガイド ...ww1.microchip.com/downloads/jp/DeviceDoc/50002509B_JP.pdf組み込みエンジニア向けMPLAB® XC32ユーザガイド

組み込みエンジニア向け MPLAB® XC32 ユーザガイド

6.3 編集後の app.hコード

編集後の app.hテンプレート ファイルを以下に示します。一部のコメントは省略しました ( 省略箇所には < >で囲んだ注釈を記入しています )。追加したコードを赤字で示しています。

/******************************************************************** MPLAB Harmony Application Header File

<See generated app.h file for file information.>

********************************************************************/

//DOM-IGNORE-BEGIN/********************************************************************Copyright (c) 2013-2014 released Microchip Technology Inc. All rights reserved.

<See generated app.h file for copyright information.>

*******************************************************************///DOM-IGNORE-END

#ifndef _APP_H#define _APP_H

#define USERLED_SUCCESS LED_2 //D5 on Explorer 16/32#define USERLED_ERROR LED_0 //D3 on Explorer 16/32

// ******************************************************************// ******************************************************************// Section:Included Files// ******************************************************************// ******************************************************************

#include <stdint.h>#include <stdbool.h>#include <stddef.h>#include <stdlib.h>#include "system_config.h"#include "system_definitions.h"

// DOM-IGNORE-BEGIN#ifdef __cplusplus // Provide C++ Compatibility

extern "C" {

#endif// DOM-IGNORE-END

// ******************************************************************// ******************************************************************// Section:Type Definitions// ******************************************************************// ******************************************************************

#define APP_DATABUFF_SIZE (sizeof(databuff) / sizeof(uint32_t))

/* Row size for device is 2Kbytes */#define APP_DEVICE_ROW_SIZE_DIVIDED_BY_4 (DRV_FLASH_ROW_SIZE/4)

DS50002509B_JP - p. 38 2018 Microchip Technology Inc.

Page 39: 組み込みエンジニア向け MPLAB XC32ユーザガイド ...ww1.microchip.com/downloads/jp/DeviceDoc/50002509B_JP.pdf組み込みエンジニア向けMPLAB® XC32ユーザガイド

組み込みエンジニア向け MPLAB® XC32 ユーザガイド

/* Page size for device is 16Kbytes */#define APP_DEVICE_PAGE_SIZE_DIVIDED_BY_4 (DRV_FLASH_PAGE_SIZE/4)

#define APP_PROGRAM_FLASH_BASE_ADDRESS_VALUE (unsigned int) 0x9D008000#define APP_PROGRAM_FLASH_BASE_ADDRESS (unsigned int *) APP_PROGRAM_FLASH_BASE_ADDRESS_VALUE

// ******************************************************************/* Application states

Summary: Application states enumeration

Description: This enumeration defines the valid application states.These states determine the behavior of the application at various times.*/

typedef enum{

/* Application's state machine's initial state.*/APP_STATE_INIT=0,APP_STATE_NVM_FILL_DATABUF_AND_ERASE_STATE,APP_STATE_NVM_ERASE_COMPLETION_CHECK,APP_STATE_NVM_WRITE_START,APP_STATE_NVM_WRITE_COMPLETION_CHECK_AND_VERIFY_CHECK,APP_STATE_NVM_ERROR_STATE,APP_STATE_NVM_SUCCESS_STATE,

} APP_STATES;

// ******************************************************************/* Application Data

Summary: Holds application data

Description: This structure holds the application's data.

Remarks: Application strings and buffers are be defined outside this structure. */

typedef struct{ /* The application's current state */ APP_STATES state; DRV_HANDLE flashHandle;

} APP_DATA;

// ******************************************************************// ******************************************************************

2018 Microchip Technology Inc. DS50002509B_JP - p. 39

Page 40: 組み込みエンジニア向け MPLAB XC32ユーザガイド ...ww1.microchip.com/downloads/jp/DeviceDoc/50002509B_JP.pdf組み込みエンジニア向けMPLAB® XC32ユーザガイド

組み込みエンジニア向け MPLAB® XC32 ユーザガイド

// Section:Application Callback Routines// ******************************************************************// ******************************************************************/* These routines are called by drivers when certain events occur.*/

// ******************************************************************// ******************************************************************// Section:Application Initialization and State Machine Functions// ******************************************************************// ******************************************************************

/******************************************************************** Function: void APP_Initialize ( void )

Summary: MPLAB Harmony application initialization routine.

<See generated app.h file for app init information.>

*/

void APP_Initialize ( void );

/******************************************************************** Function: void APP_Tasks ( void )

Summary: MPLAB Harmony Demo application tasks function

<See generated app.h file for app tasks information.>

*/

void APP_Tasks( void );

#endif /* _APP_H */

//DOM-IGNORE-BEGIN#ifdef __cplusplus}#endif//DOM-IGNORE-END

/******************************************************************** End of File */

DS50002509B_JP - p. 40 2018 Microchip Technology Inc.

Page 41: 組み込みエンジニア向け MPLAB XC32ユーザガイド ...ww1.microchip.com/downloads/jp/DeviceDoc/50002509B_JP.pdf組み込みエンジニア向けMPLAB® XC32ユーザガイド

組み込みエンジニア向け MPLAB® XC32 ユーザガイド

6.4 編集後の app.cコード

編集後の app.cテンプレート ファイルを以下に示します。一部のコメントは省略しました ( 省略箇所には < >で囲んだ注釈を記入しています )。追加したコードを赤字で示しています。

一部の長いコード行は次のページにまたがっています。これは、本書のコードをそのままエディタへカット & ペーストできるように配慮したためです。

/******************************************************************** MPLAB Harmony Application Source File

<See generated app.c file for file information.>

*******************************************************************/

// DOM-IGNORE-BEGIN/********************************************************************Copyright (c) 2013-2014 released Microchip Technology Inc. All rights reserved.

<See generated app.c file for copyright information.>

*******************************************************************/// DOM-IGNORE-END

// ******************************************************************// ******************************************************************// Section:Included Files // ******************************************************************// ******************************************************************

#include "app.h"

// ******************************************************************// ******************************************************************// Section:Global Data Definitions// ******************************************************************// ******************************************************************

/***************************************************** * Initialize the application data structure.All * application related variables are stored in this * data structure. *****************************************************/

/* Array in the KSEG1 RAM to store the data */uint32_t databuff[APP_DEVICE_ROW_SIZE_DIVIDED_BY_4] __attribute__((coherent, aligned(16)));

// ******************************************************************/* Application Data

Summary: Holds application data

Description: This structure holds the application's data.

Remarks:

2018 Microchip Technology Inc. DS50002509B_JP - p. 41

Page 42: 組み込みエンジニア向け MPLAB XC32ユーザガイド ...ww1.microchip.com/downloads/jp/DeviceDoc/50002509B_JP.pdf組み込みエンジニア向けMPLAB® XC32ユーザガイド

組み込みエンジニア向け MPLAB® XC32 ユーザガイド

This structure should be initialized by the APP_Initialize function. Application strings and buffers are be defined outside this structure.*/

APP_DATA appData;

// ******************************************************************// ******************************************************************// Section:Application Callback Functions// ******************************************************************// ******************************************************************

/* TODO:Add any necessary callback functions.*/

// ******************************************************************// ******************************************************************// Section:Application Local Functions// ******************************************************************// ******************************************************************

/* TODO:Add any necessary local functions.*/

// ******************************************************************// ******************************************************************// Section:Application Initialization and State Machine Functions// ******************************************************************// ******************************************************************

/******************************************************************** Function: void APP_Initialize ( void )

Remarks: See prototype in app.h. */

void APP_Initialize ( void ){ /* Place the App state machine in its initial state.*/ appData.state = APP_STATE_INIT;

/* TODO:Initialize your application's state machine and other * parameters. */}

/******************************************************************** Function: void APP_Tasks ( void )

Remarks:

DS50002509B_JP - p. 42 2018 Microchip Technology Inc.

Page 43: 組み込みエンジニア向け MPLAB XC32ユーザガイド ...ww1.microchip.com/downloads/jp/DeviceDoc/50002509B_JP.pdf組み込みエンジニア向けMPLAB® XC32ユーザガイド

組み込みエンジニア向け MPLAB® XC32 ユーザガイド

See prototype in app.h. */

void APP_Tasks ( void ){ unsigned int x; /* Check the application's current state.*/ switch ( appData.state ) { /* Application's initial state.*/ case APP_STATE_INIT: appData.flashHandle = DRV_FLASH_Open(DRV_FLASH_INDEX_0, intent); appData.state = APP_STATE_NVM_FILL_DATABUF_AND_ERASE_STATE; break;

/* Fill data buffer, clear LEDs, * and begin erase page */ case APP_STATE_NVM_FILL_DATABUF_AND_ERASE_STATE: for (x = 0; x < APP_DATABUFF_SIZE; x++) { databuff[x] = x; } BSP_LEDOff(USERLED_SUCCESS); BSP_LEDOff(USERLED_ERROR);

/* Erase the page which consist of the row to be written */ DRV_FLASH_ErasePage(appData.flashHandle, APP_PROGRAM_FLASH_BASE_ADDRESS_VALUE); appData.state = APP_STATE_NVM_ERASE_COMPLETION_CHECK; break;

/* Check for erase complete */ case APP_STATE_NVM_ERASE_COMPLETION_CHECK: if(!DRV_FLASH_IsBusy(appData.flashHandle)) { appData.state = APP_STATE_NVM_WRITE_START; } break;

/* Write row of Flash */ case APP_STATE_NVM_WRITE_START: /* Erase Success */ /* Write a row of data to PROGRAM_FLASH_BASE_ADDRESS, * using databuff array as the source */ DRV_FLASH_WriteRow(appData.flashHandle, APP_PROGRAM_FLASH_BASE_ADDRESS_VALUE, databuff); appData.state = APP_STATE_NVM_WRITE_COMPLETION_CHECK_AND_VERIFY_CHECK; break;

/* Check for write complete * and verify write operation */ case APP_STATE_NVM_WRITE_COMPLETION_CHECK_AND_VERIFY_CHECK: if(!DRV_FLASH_IsBusy(appData.flashHandle)) { /* Verify that data written to flash memory is valid * (databuff array read from kseg1) */ if (!memcmp(databuff, (void *)KVA0_TO_KVA1(APP_PROGRAM_FLASH_BASE_ADDRESS),

6.5 参照

6.6 参照

6.7 参照

6.8 参照

6.9 参照

2018 Microchip Technology Inc. DS50002509B_JP - p. 43

Page 44: 組み込みエンジニア向け MPLAB XC32ユーザガイド ...ww1.microchip.com/downloads/jp/DeviceDoc/50002509B_JP.pdf組み込みエンジニア向けMPLAB® XC32ユーザガイド

組み込みエンジニア向け MPLAB® XC32 ユーザガイド

sizeof(databuff))) { appData.state = APP_STATE_NVM_SUCCESS_STATE; } else { appData.state = APP_STATE_NVM_ERROR_STATE; } } break;

/* Write Failure */ case APP_STATE_NVM_ERROR_STATE: /*stay here, nvm had a failure*/ BSP_LEDOn(USERLED_ERROR); BSP_LEDOff(USERLED_SUCCESS); break;

/* Write Success */ case APP_STATE_NVM_SUCCESS_STATE: BSP_LEDOn(USERLED_SUCCESS); BSP_LEDOff(USERLED_ERROR); break;

}}

/******************************************************************** End of File */

6.5 アプリケーション ステート - 初期ステート

タスクループの開始時にアプリケーションは初期ステート (APP_STATE_INIT)です。このステートではフラッシュ ドライバが初期化され、アプリケーションは次のステート (APP_STATE_NVM_FILL_DATABUF_AND_ERASE_STATE) に移行します。アプリケーション ステートは app.h内で定義されます。

6.6 アプリケーション ステート - データバッファの書き込みとページ消去

初期化が完了すると、書き込みの準備を実行します。最初に、フラッシュメモリに書き込むデータをデータバッファに書き込みます ( データバッファは、「Section: GlobalData Definitions」内で定義されます )。次に、動作の成功 / 失敗を示す LED をクリアします ( これらの値は app.h内で設定されます )。その後、フラッシュメモリ (NVM)ページの消去を開始します。最後に、アプリケーションはページ消去の完了を待機するためのステート (APP_STATE_NVM_ERASE_COMPLETION_CHECK) に移行します。

6.7 アプリケーション ステート - ページ消去の完了

このステートは、前のステートで開始したページ消去が完了するまで待機します。ページ消去が完了すると、アプリケーションはフラッシュメモリ (NVM) への書き込みを開始するためのステート (APP_STATE_NVM_WRITE_START) に移行します。

6.8 アプリケーション ステート フラッシュメモリの行書き込み

フラッシュメモリ内の消去済みページへの行書き込みを開始します。この行には、データバッファ内の値を書き込みます。その後、アプリケーション ステートは書き込みの終了と検証のためのステート(APP_STATE_NVM_WRITE_COMPLETION_CHECK_AND_VERIFY_CHECK)に移行します。

6.10 参照

6.11 参照

DS50002509B_JP - p. 44 2018 Microchip Technology Inc.

Page 45: 組み込みエンジニア向け MPLAB XC32ユーザガイド ...ww1.microchip.com/downloads/jp/DeviceDoc/50002509B_JP.pdf組み込みエンジニア向けMPLAB® XC32ユーザガイド

組み込みエンジニア向け MPLAB® XC32 ユーザガイド

6.9 アプリケーション ステート 行書き込みの完了と検証

このステートは、前のステートで開始した行書き込みが完了するまで待機します。完了すると、書き込んだ値とデータバッファ内の値を照合します。書き込みが成功していた場合、アプリケーション ステートは APP_STATE_NVM_SUCCESS_STATE に移行します。失敗していた場合、アプリケーション ステートは APP_STATE_NVM_ERROR_STATEに移行します。

6.10 アプリケーション ステート - エラーステート

フラッシュメモリの書き込みに失敗した場合、エラーステートに移行します。デモボード上の LED 3 (D3) を点灯させる事でエラーの発生を示します。

6.11 アプリケーション ステート - 成功ステート

フラッシュメモリの消去 / 書き込みに成功した場合、成功ステートに移行します。デモボード上の LED 5 (D5) を点灯させる事でアプリケーションの実行が成功した事を示します。

2018 Microchip Technology Inc. DS50002509B_JP - p. 45

Page 46: 組み込みエンジニア向け MPLAB XC32ユーザガイド ...ww1.microchip.com/downloads/jp/DeviceDoc/50002509B_JP.pdf組み込みエンジニア向けMPLAB® XC32ユーザガイド

組み込みエンジニア向け MPLAB® XC32 ユーザガイド

7. フラッシュメモリの値を LED で表示する (MCC を使用 )このサンプルコードは、5.「ADC を使ってポテンショメータの値を LED で表示する(MCC を使用 )」と同じデバイスとポート A LED を使います。ただし、このサンプルコードでは、フラッシュ ( 不揮発性 ) メモリに対して値を読み書きし、それが成功した時に LED2 を点灯させ、失敗した時に LED0 を点灯させます。

コードの一部は MPLAB Code Configurator (MCC) で生成します。MCC のインストール方法とユーザガイドの入手方法は、 5.「ADC を使ってポテンショメータの値を LEDで表示する (MCC を使用 )」を参照してください。

このサンプルコードを生成するために使った MCC の設定を以下の図に示します。

図 25: フラッシュ プロジェクト - リソース - システム モジュール

DS50002509B_JP - p. 46 2018 Microchip Technology Inc.

Page 47: 組み込みエンジニア向け MPLAB XC32ユーザガイド ...ww1.microchip.com/downloads/jp/DeviceDoc/50002509B_JP.pdf組み込みエンジニア向けMPLAB® XC32ユーザガイド

組み込みエンジニア向け MPLAB® XC32 ユーザガイド

図 26: フラッシュ プロジェクト - システム モジュール - Easy Setup

2018 Microchip Technology Inc. DS50002509B_JP - p. 47

Page 48: 組み込みエンジニア向け MPLAB XC32ユーザガイド ...ww1.microchip.com/downloads/jp/DeviceDoc/50002509B_JP.pdf組み込みエンジニア向けMPLAB® XC32ユーザガイド

組み込みエンジニア向け MPLAB® XC32 ユーザガイド

図 27: フラッシュ プロジェクト - システム モジュール - レジスタ

DS50002509B_JP - p. 48 2018 Microchip Technology Inc.

Page 49: 組み込みエンジニア向け MPLAB XC32ユーザガイド ...ww1.microchip.com/downloads/jp/DeviceDoc/50002509B_JP.pdf組み込みエンジニア向けMPLAB® XC32ユーザガイド

組み込みエンジニア向け MPLAB® XC32 ユーザガイド

図 28: フラッシュ プロジェクト - リソース - NVM

2018 Microchip Technology Inc. DS50002509B_JP - p. 49

Page 50: 組み込みエンジニア向け MPLAB XC32ユーザガイド ...ww1.microchip.com/downloads/jp/DeviceDoc/50002509B_JP.pdf組み込みエンジニア向けMPLAB® XC32ユーザガイド

組み込みエンジニア向け MPLAB® XC32 ユーザガイド

図 29: フラッシュ プロジェクト - NVM - レジスタ

DS50002509B_JP - p. 50 2018 Microchip Technology Inc.

Page 51: 組み込みエンジニア向け MPLAB XC32ユーザガイド ...ww1.microchip.com/downloads/jp/DeviceDoc/50002509B_JP.pdf組み込みエンジニア向けMPLAB® XC32ユーザガイド

組み込みエンジニア向け MPLAB® XC32 ユーザガイド

図 30: フラッシュ プロジェクト - リソース - ピンモジュール

図 31: フラッシュ プロジェクト -I/O ピン設定

図 32: フラッシュ プロジェクト - I/O ピンリソース

図 32 でピン RA0 と RA2 が選択されている場合、これらのピンは上図のウィンドウに表示されます。

RB6 と RB7 は、図 26 で PGEC2/PGED2 向けに選択済みです。

ウィンドウ内にピン設定が表示されたら、各ピンに対してピン設定を表示および選択できます。

2018 Microchip Technology Inc. DS50002509B_JP - p. 51

Page 52: 組み込みエンジニア向け MPLAB XC32ユーザガイド ...ww1.microchip.com/downloads/jp/DeviceDoc/50002509B_JP.pdf組み込みエンジニア向けMPLAB® XC32ユーザガイド

組み込みエンジニア向け MPLAB® XC32 ユーザガイド

以上のようにコードを設定した後に、[Project Resources] ウィンドウの [Generate]ボタンをクリックします ( 図 12)。MCC はモジュール形式でコードを生成します。従って main、システム、周辺モジュールコードは全て別々のファイルとして生成されます。各周辺モジュールのヘッダファイルも別々です。

潜在的なエラーを捉えるために割り込みマネージャ ファイルが生成されます。このアプリケーションでは割り込みは使いませんが、将来用に割り込みマネージャ ファイルが生成されます。

プログラムに機能を追加する場合、必ず main.c を編集する必要があります。また、そのコードに必要な全ての関数またはマクロが生成されたファイル内に含まれているかどうか確認する必要があります。

フラッシュメモリの使い方の詳細は、『PIC32 ファミリ リファレンス マニュアル、セクション 5. 10 ビットアナログ / デジタルコンバータ (ADC)』(DS60001121) を参照してください。

図 33: MCC が生成したコードのフラッシュ プロジェクト ツリー

DS50002509B_JP - p. 52 2018 Microchip Technology Inc.

Page 53: 組み込みエンジニア向け MPLAB XC32ユーザガイド ...ww1.microchip.com/downloads/jp/DeviceDoc/50002509B_JP.pdf組み込みエンジニア向けMPLAB® XC32ユーザガイド

組み込みエンジニア向け MPLAB® XC32 ユーザガイド

7.1 編集後の main.cコード

編集後の main.c テンプレート ファイルを以下に示します。一部のコメントは省略しました ( 省略箇所には < >で囲んだ注釈を記入しています )。追加済みコードは赤字で示しています。

/** Generated Main Source File

<See generated main.c for file information.> */

/*(c) 2016 Microchip Technology Inc. and its subsidiaries.You may use this software and any derivatives exclusively with Microchip products.

<See generated main.c for additional copyright information.> */

#include "mcc_generated_files/mcc.h"

// Program Flash Physical Addresses:0x1D00_0000?0x1D07_FFFF// Program Flash Virtual Addresses:KSEG0:0x9D00_0000?0x9D07_FFFF// KSEG1:0xBD00_0000?0xBD07_FFFF#define NVM_PROGRAM_PAGE 0xbd008000

unsigned int databuff[128];

/* Main application */int main(void) {

unsigned int x;

// initialize the device SYSTEM_Initialize();

// Fill databuff with some datafor(x =0; x < sizeof(databuff); x++)

databuff[x] = x;

// Erase second page of Program Flash NVM_ErasePage((void *)NVM_PROGRAM_PAGE);

// Write 128 words starting at // Row Address NVM_PROGRAM_PAGENVM_WriteRow((void *)NVM_PROGRAM_PAGE, (void*)databuff);

// Verify data matches

if(memcmp(databuff, (void *)NVM_PROGRAM_PAGE, sizeof(databuff))){

// If not turn led0 on to indicate an errorIO_RA0_SetHigh();

} else {

// If true turn led2 on to indicate successIO_RA2_SetHigh();

}

7.2 参照

7.3 参照

7.4 参照

2018 Microchip Technology Inc. DS50002509B_JP - p. 53

Page 54: 組み込みエンジニア向け MPLAB XC32ユーザガイド ...ww1.microchip.com/downloads/jp/DeviceDoc/50002509B_JP.pdf組み込みエンジニア向けMPLAB® XC32ユーザガイド

組み込みエンジニア向け MPLAB® XC32 ユーザガイド

while (1) {// End of program

}

return -1;}/** End of File */

7.2 フラッシュメモリのページ消去

フラッシュメモリの消去可能な最小領域は 1 ページです。

これには nvm.cファイル内の NVM_ErasePage()関数を使います。

7.3 フラッシュメモリの行書き込み

データバッファの内容は、フラッシュメモリ内の 1 行に書き込みます。

これには nvm.cファイル内の NVM_WriteRow()関数を使います。

7.4 書き込みの検証と LED でのデータ表示

フラッシュメモリに書き込まれたデータとデータバッファの内容を比較します。両者が一致しない場合、LED0/D3 を点灯させてエラーが発生した事を示します。一致する場合、LED2/D5 を点灯させて書き込みが成功した事を示します。

DS50002509B_JP - p. 54 2018 Microchip Technology Inc.

Page 55: 組み込みエンジニア向け MPLAB XC32ユーザガイド ...ww1.microchip.com/downloads/jp/DeviceDoc/50002509B_JP.pdf組み込みエンジニア向けMPLAB® XC32ユーザガイド

組み込みエンジニア向け MPLAB® XC32 ユーザガイド

補遺A. MPLAB X IDE 内でのコード実行

サンプルコード 1、2、3 のプロジェクトの作成手順は以下の通りです。

1. MPLAB X IDE を起動します。

2. IDE から [New Project] ウィザードを起動します (File > New Project)。3. 画面の指示に従って以下の手順で新しいプロジェクトを作成します。

a) プロジェクトの選択 : 「Microchip Embedded」を選択し、次に「StandaloneProject」を選択します。

b) デバイスの選択 : サンプルコードのデバイスを選択します。

c) ヘッダの選択 : 何も選択しません。

d) ツールの選択: 使用するハードウェア デバッグツールのシリアル番号(SNxxxxxx)を選択します。デバッグツール名の下にシリアル番号 (SN) が表示されない場合、そのデバッグツールが正しくインストールされているか確認します。詳細はデバッグツールのマニュアルを参照してください。

e) プラグインボードの選択 : 何も選択しません。

f) コンパイラの選択 : XC32 (最新バージョン番号 )を選択します ([bin location])。XC32 の下にコンパイラが表示されない場合、コンパイラが正しくインストールされているか、および MPLAB X IDE がコンパイラを検出できているかを確認します。Tools > Options を選択し、[Build Tools] タブの [Embedded] ボタンをクリックして使用中のコンパイラを確認します。詳細は MPLAB XC32と MPLAB X IDE のマニュアルを参照してください。

g) プロジェクト名とフォルダの選択 : プロジェクト名を指定します。

4. [Projects] ウィンドウ内でプロジェクト名を右クリックし、New > Empty FIle を選択します。[New Empty File] ダイアログが開きます。

5. 「File name」に名前を入力します。

6. [Finish] をクリックします。

7. 本書のサンプルコードを空白のエディタ ウィンドウにコピー / ペーストし、File> Save を選択します。

サンプルコード 4 および 6 のプロジェクトの作成手順は、4.1「MPLAB X IDE 内でMPLAB Harmony プロジェクトを作成する」に記載した通りです。プロジェクトを作成した後、MHC を設定してコードを生成し、本書に記載した通りに編集します。

サンプルコード 5 および 7 の場合、上記のステップ 1 ~ 3 を実行します。その後、MCC を設定してコードを生成し、本書に記載した通りに編集します。

最後に [Debug Run] を選択します。これによりコードをビルドしてデバイスにダウンロードし、実行します。そしてコードの出力を LED で確認します。実行を終了するには [Halt] をクリックします。

図 34: ツールバー アイコン

DEBUG RUN HALT

2018 Microchip Technology Inc. DS50002509B_JP - p. 55

Page 56: 組み込みエンジニア向け MPLAB XC32ユーザガイド ...ww1.microchip.com/downloads/jp/DeviceDoc/50002509B_JP.pdf組み込みエンジニア向けMPLAB® XC32ユーザガイド

組み込みエンジニア向け MPLAB® XC32 ユーザガイド

補遺B. ソフトウェアとハードウェアの入手先

本書の MPLAB XC32 プロジェクトには PIC32 PIM を実装した Explorer 16/32 開発ボードを使います。ボードには外部電源から 9 V を供給し、標準の (ICSP™) 通信を使います。開発には MPLAB X IDE を使いました。

B.1 MPLAB X IDE と MPLAB XC32 C コンパイラの入手先

MPLAB X IDE (v3.55 ~ ) は以下で入手できます。

http://www.microchip.com/mplabx

MPLAB XC32 C コンパイラ (v1.42 ~ ) は以下で入手できます。

http://www.microchip.com/mplabxc

B.2 MPLAB Harmony および Configurator プラグインの入手先

MPLAB Harmony Configurator (v1.0.10.xx~ )はMPLAB X IDEの [Available Plugins]タブ (Tools > Plugins で開く ) で選択できます。

MPLAB Harmony (v1.10 ~ ) は以下で入手できます。

http://www.microchip.com/mplab/mplab-harmony

B.3 MPLAB Code Configurator (MCC) の入手先

MCC (v3.26 ~ ) は以下で入手できます。

http://www.microchip.com/mplab/mplab-code-configurator

B.4 PIC® MCU プラグイン モジュール (PIM) の入手先

本書のサンプルコードで使う PIC MCU PIM は以下の Microchip 社ウェブページで入手できます。

PIC32MX470F512L: http://www.microchip.com/MA320002-2

B.5 Explorer 16/32 開発ボードの入手先と設定方法

Explorer 16/32 開発ボードと回路図、マニュアルは以下のウェブページで入手できます。

http://www.microchip.com/dm240001-2

ジャンパとスイッチは下表の通りに設定します。

表 1-1: プロジェクト向けのジャンパ /ス イッチの選択

ジャンパ / スイッチ 選択 ジャンパ / スイッチ 選択

JP2 ショート J37 オープン

J19 オープン J38 オープン

J22 オープン J39 既定値

J23 既定値 J41 オープン

J25 ショート J42 オープン

J26 ショート J43 既定値

J27 オープン J44 既定値

J28 オープン J45 既定値

J29 オープン J50 ショート

J33 オープン

DS50002509B_JP - p. 56 2018 Microchip Technology Inc.

Page 57: 組み込みエンジニア向け MPLAB XC32ユーザガイド ...ww1.microchip.com/downloads/jp/DeviceDoc/50002509B_JP.pdf組み込みエンジニア向けMPLAB® XC32ユーザガイド

組み込みエンジニア向け MPLAB® XC32 ユーザガイド

B.6 Microchip 社製デバッグツールの入手先

エミュレータとデバッガは以下の開発ツール ウェブページで入手できます。

http://www.microchip.com/development-tools

B.7 サンプルコードの入手先

本書に記載したサンプルコードは、http://www.microchip.com/mplabxc にアクセスし、[Documentation] タブからダウンロードできます。これらの MPLAB Harmony サンプルコードは、以下のフォルダに格納します。

C:\microchip\harmony\v1_10\apps

2018 Microchip Technology Inc. DS50002509B_JP - p. 57

Page 58: 組み込みエンジニア向け MPLAB XC32ユーザガイド ...ww1.microchip.com/downloads/jp/DeviceDoc/50002509B_JP.pdf組み込みエンジニア向けMPLAB® XC32ユーザガイド

組み込みエンジニア向け MPLAB® XC32 ユーザガイド

NOTE:

DS50002509B_JP - p. 58 2018 Microchip Technology Inc.

Page 59: 組み込みエンジニア向け MPLAB XC32ユーザガイド ...ww1.microchip.com/downloads/jp/DeviceDoc/50002509B_JP.pdf組み込みエンジニア向けMPLAB® XC32ユーザガイド

2018 Microchip Technology Inc. DS50002509B_JP - p. 59

本書に記載されているデバイス アプリケーション等に関する

情報は、ユーザの便宜のためにのみ提供されているものであ

り、更新によって無効とされる事があります。お客様のアプ

リケーションが仕様を満たす事を保証する責任は、お客様に

あります。Microchip 社は、明示的、暗黙的、書面、口頭、法

定のいずれであるかを問わず、本書に記載されている情報に

関して、状態、品質、性能、商品性、特定目的への適合性を

はじめとする、いかなる類の表明も保証も行いません。

Microchip 社は、本書の情報およびその使用に起因する一切の

責任を否認します。Microchip 社の明示的な書面による承認な

しに、生命維持装置あるいは生命安全用途に Microchip 社の製

品を使用する事は全て購入者のリスクとし、また購入者はこ

れによって発生したあらゆる損害、クレーム、訴訟、費用に

関して、Microchip 社は擁護され、免責され、損害をうけない

事に同意するものとします。暗黙的あるいは明示的を問わず、

Microchip社が知的財産権を保有しているライセンスは一切譲

渡されません。

商標

Microchip 社の名称と Microchip ロゴ、dsPIC、FlashFlex、KEELOQ、KEELOQ ロゴ、MPLAB、PIC、PICmicro、PICSTART、PIC32 ロゴ、rfPIC、SST、SST ロゴ、SuperFlash、UNI/O は、

米国およびその他の国における Microchip TechnologyIncorporated の登録商標です。

FilterLab、Hampshire、HI-TECH C、Linear Active Thermistor、MTP、SEEVAL、Embedded Control Solutions Company は、

米国における Microchip Technology Incorporated の登録商標

です。

Silicon Storage Technologyは、その他の国におけるMicrochipTechnology Incorporated の登録商標です。

Analog-for-the-Digital Age、Application Maestro、BodyCom、

chipKIT、chipKIT ロゴ、CodeGuard、dsPICDEM、dsPICDEM.net、dsPICworks、dsSPEAK、ECAN、ECONOMONITOR、FanSense、HI-TIDE、In-Circuit Serial Programming、ICSP、Mindi、MiWi、MPASM、MPF、MPLAB 認証ロゴ、MPLIB、MPLINK、mTouch、Omniscient Code Generation、PICC、PICC-18、PICDEM、

PICDEM.net、PICkit、PICtail、REAL ICE、rfLAB、Select Mode、SQI、Serial Quad I/O、Total Endurance、TSHARC、UniWinDriver、WiperLock、ZENA、Z-Scale は、米国およびその他の国におけ

る Microchip Technology Incorporatedの登録商標です。

SQTP は、米国における Microchip Technology Incorporatedのサービスマークです。

GestICとULPPは、その他の国におけるMicrochip TechnologyGermany II GmbH & Co. & KG (Microchip TechnologyIncorporated の子会社 ) の登録商標です。

その他、本書に記載されている商標は各社に帰属します。

©2013, Microchip Technology Incorporated, Printed in theU.S.A., All Rights Reserved.

ISBN: 978-1-5224-2338-6

Microchip 社製デバイスのコード保護機能に関して次の点にご注意ください。

• Microchip 社製品は、該当する Microchip 社データシートに記載の仕様を満たしています。

• Microchip 社では、通常の条件ならびに仕様に従って使用した場合、Microchip 社製品のセキュリティ レベルは、現在市場に流

通している同種製品の中でも最も高度であると考えています。

• しかし、コード保護機能を解除するための不正かつ違法な方法が存在する事もまた事実です。弊社の理解ではこうした手法は、

Microchip 社データシートにある動作仕様書以外の方法で Microchip 社製品を使用する事になります。このような行為は知的所

有権の侵害に該当する可能性が非常に高いと言えます。

• Microchip 社は、コードの保全性に懸念を抱くお客様と連携し、対応策に取り組んでいきます。

• Microchip 社を含む全ての半導体メーカーで、自社のコードのセキュリティを完全に保証できる企業はありません。コード保護

機能とは、Microchip 社が製品を「解読不能」として保証するものではありません。

コード保護機能は常に進歩しています。Microchip 社では、常に製品のコード保護機能の改善に取り組んでいます。Microchip 社

のコード保護機能の侵害は、デジタル ミレニアム著作権法に違反します。そのような行為によってソフトウェアまたはその他の著

Microchip 社では、Chandler および Tempe ( アリゾナ州 )、Gresham( オレゴン州 ) の本部、設計部およびウェハー製造工場そしてカリフォルニア州とインドのデザインセンターが ISO/TS-16949:2009 認証を取得しています。Microchip 社の品質システム プロセスおよび手順は、PIC® MCU および dsPIC® DSC、KEELOQ® コード ホッピング デバイス、シリアル EEPROM、マイクロペリフェラル、不揮発性メモリ、アナログ製品に採用されています。さらに、開発システムの設計と製造に関する Microchip 社の品質システムは ISO 9001:2000 認証を取得しています。

QUALITY MANAGEMENT SYSTEM CERTIFIED BY DNV

== ISO/TS 16949 ==

Page 60: 組み込みエンジニア向け MPLAB XC32ユーザガイド ...ww1.microchip.com/downloads/jp/DeviceDoc/50002509B_JP.pdf組み込みエンジニア向けMPLAB® XC32ユーザガイド

DS50002509B_JP - p. 60 2018 Microchip Technology Inc.

北米本社2355 West Chandler Blvd.Chandler, AZ 85224-6199Tel:480-792-7200 Fax:480-792-7277技術サポート : http://www.microchip.com/supportURL: www.microchip.com

アトランタDuluth, GA Tel:678-957-9614 Fax:678-957-1455

オースティン (TX)Tel:512-257-3370

ボストンWestborough, MA Tel:774-760-0087 Fax:774-760-0088

シカゴItasca, IL Tel:630-285-0071 Fax:630-285-0075

クリーブランドIndependence, OH Tel:216-447-0464

Fax:216-447-0643

ダラスAddison, TX Tel:972-818-7423 Fax:972-818-2924

デトロイトNovi, MI Tel:248-848-4000

ヒューストン (TX) Tel:281-894-5983

インディアナポリスNoblesville, IN Tel:317-773-8323Fax:317-773-5453

ロサンゼルスMission Viejo, CA Tel:949-462-9523 Fax:949-462-9608

ニューヨーク (NY) Tel:631-435-6000

サンノゼ (CA) Tel:408-735-9110

カナダ - トロントTel:905-673-0699 Fax:905-673-6509

アジア / 太平洋

アジア太平洋支社Suites 3707-14, 37th FloorTower 6, The GatewayHarbour City, KowloonHong KongTel:852-2943-5100Fax:852-2401-3431

オーストラリア - シドニーTel:61-2-9868-6733Fax:61-2-9868-6755

中国 - 北京Tel:86-10-8569-7000 Fax:86-10-8528-2104

中国 - 成都Tel:86-28-8665-5511Fax:86-28-8665-7889

中国 - 重慶Tel:86-23-8980-9588Fax:86-23-8980-9500

中国 - 東莞

Tel:86-769-8702-9880

中国 - 杭州Tel:86-571-8792-8115 Fax:86-571-8792-8116

中国 - 香港 SARTel:852-2943-5100 Fax:852-2401-3431

中国 - 南京Tel:86-25-8473-2460Fax:86-25-8473-2470

中国 - 青島Tel:86-532-8502-7355Fax:86-532-8502-7205

中国 - 上海Tel:86-21-5407-5533 Fax:86-21-5407-5066

中国 - 瀋陽Tel:86-24-2334-2829Fax:86-24-2334-2393

中国 - 深圳Tel:86-755-8864-2200 Fax:86-755-8203-1760

中国 - 武漢Tel:86-27-5980-5300Fax:86-27-5980-5118

中国 - 西安Tel:86-29-8833-7252Fax:86-29-8833-7256

アジア / 太平洋

中国 - 厦門Tel:86-592-2388138 Fax:86-592-2388130

中国 - 珠海Tel:86-756-3210040 Fax:86-756-3210049

インド - バンガロールTel:91-80-3090-4444 Fax:91-80-3090-4123

インド - ニューデリーTel:91-11-4160-8631Fax:91-11-4160-8632

インド - プネTel:91-20-3019-1500

日本 - 大阪Tel:81-6-6152-7160 Fax:81-6-6152-9310

日本 - 東京Tel:81-3-6880- 3770 Fax:81-3-6880-3771

韓国 - 大邱Tel:82-53-744-4301Fax:82-53-744-4302

韓国 - ソウルTel:82-2-554-7200Fax:82-2-558-5932 または 82-2-558-5934

マレーシア - クアラルンプールTel:60-3-6201-9857Fax:60-3-6201-9859

マレーシア - ペナンTel:60-4-227-8870Fax:60-4-227-4068

フィリピン - マニラTel:63-2-634-9065Fax:63-2-634-9069

シンガポールTel:65-6334-8870Fax:65-6334-8850

台湾 - 新竹Tel:886-3-5778-366Fax:886-3-5770-955

台湾 - 高雄Tel:886-7-213-7828

台湾 - 台北Tel:886-2-2508-8600 Fax:886-2-2508-0102

タイ - バンコクTel:66-2-694-1351Fax:66-2-694-1350

ヨーロッパ

オーストリア - ヴェルスTel:43-7242-2244-39

Fax:43-7242-2244-393

デンマーク - コペンハーゲンTel:45-4450-2828 Fax:45-4485-2829

フランス - パリTel:33-1-69-53-63-20 Fax:33-1-69-30-90-79

ドイツ - デュッセルドルフTel:49-2129-3766400

ドイツ - ミュンヘンTel:49-89-627-144-0 Fax:49-89-627-144-44

ドイツ - プフォルツハイムTel:49-7231-424750

イタリア - ミラノ Tel:39-0331-742611 Fax:39-0331-466781

イタリア - ベニスTel:39-049-7625286

オランダ - ドリューネンTel:31-416-690399 Fax:31-416-690340

ポーランド - ワルシャワTel:48-22-3325737

スペイン - マドリッドTel:34-91-708-08-90Fax:34-91-708-08-91

スウェーデン - ストックホルムTel:46-8-5090-4654

イギリス - ウォーキンガムTel:44-118-921-5800Fax:44-118-921-5820

各国の営業所とサービス

01/27/15