レジスタを色々と書き換えていると、デバッグするときに実際に狙ったとおりに値が反映されているか確認したくなりますね。今回はMCUXpressoでデバッグ時にメモリマップ上にあるレジスター値をチェックする方法をまとめました。
この記事でわかること
MCUXpressoでメモリマップをチェックする方法
参考に以前あつかったLチカのサンプルコードを使います。
while (1)
{
/* Delay 1000 ms */
SysTick_DelayTicks(1000U);
//Lチカ PTB22に赤LEDがつながっているので
//GPIOB pin22の出力をこの関数でLO/HIしてる
GPIO_PortToggle(GPIOB, 1u << 22);
}
確認するレジスター
前記事でも説明してますが、GPIO_PortToggle関数は、以下のPTORというレジスタを書き換えています。
ちなみにサンプルは基板に実装された赤色LED(GPIOB22)をチカチカしてます。
赤枠が赤色LEDがアサインされている所です。細かい点は前記事に説明しています。これによれば、例えば、PTORのbit22に1を書けば、その時のPDORのbit22が1だったら0になって、0だったら1になるようです。
PTORはWrite only のレジスターなので、値が見られません。なので、PDORのPDO22のbitを確認して、デジタル出力の指示がHIGH/LOWと切り替わっているか確認します。
メモリーマップを表示する
defaultの画面レイアウトで説明しますので、もしカスタマイズされていて、よくわからないなら、メニューバーからWindow -> Perspective -> Reset Perspectiveで画面をリセットしましょう。
画面の左上のウィンドウのタブでPeripherals+をクリックすると、K64Fで利用できるモジュールの一覧が表示されます。今回は、GPIOBにあるレジスタを表示させたいので、GPIOBにチェックをいれます。
チェックをいれると下みたいなwindowが表示されます。New RenderingsのところでPeripheralをクリックします。
何かでてきました。これはGPIOBのレジスタのリストです。目的のレジスタはPDORでした。一番上にあります。クリックして、中身を展開します。
なんか32bit分全部でました。赤色LEDはGPIOB22なので、PDO22に注目します。
プログラムをデバッグモードでスタートさせます。最初、Lチカ用のdelay関数のループにはいってもどってこないので、F7を押して、脱出しときます。
あとはF6を押していくと、メインループの処理をステップで実行してくれます。下が、確認結果です。
PDO22のValueを見てください、上の画像が0で下の画像では、1になってます。ちゃんとレジスタが書き換わっています。
Renderingの指定のところで設定をHexにすると別のスタイルでも値を確認できます。
他にも表示フォーマットがあるので、用途に合わせて選ぶとよいですね。
以上になります。簡単ですが、デバッグ時にはいつか必ず必要になる機能ですので、覚えておく必要があります。
それでわ、ばんざいMCUXpresso🙌