Raisonance Ride7 & ARM Tools (17) LPC2xxx の Startup (3) ― 2012年09月26日 20時04分26秒
SWI_Handler 、なかなか手ごわかった。
結局Cとインラインアセンブラが混在する形になってしまった。さらに crt0_LPC23x.s にも修正を加えなければならなくなった。テストのためのテストだからいいことにしよう。
では、さっそく crt0_LPC23x.s の修正部分を見てみよう。
そして SWI 割り込みサンプル。main_swi.c
SWI_Handler を呼び出す部分をCでどのようにすればよいのか分からなかったのでインラインアセンブラでそのまま書いている。実際に使う場合は NXP サンプル swi_handler.s のようにするのがよいだろう。
いろいろやってわかった事、割り込みのエントリー部分はじゃまなだけで必要ないということだ。さっさと削除してしまおう。そのほうがすっきりして分かりやすくなる。
環境:CQ-FRK-NXP-ARM
+ Ride7 version 7.30.10.0169
+ RKit-ARM version 1.30.10.0356
+ GCC Sourcery CodeBench Lite 2012.03-56
結局Cとインラインアセンブラが混在する形になってしまった。さらに crt0_LPC23x.s にも修正を加えなければならなくなった。テストのためのテストだからいいことにしよう。
では、さっそく crt0_LPC23x.s の修正部分を見てみよう。
SWIHandler: SaveContext r0,r12 /*; Save the workspace plus the current*/ /*; return address lr_ svc and spsr_svc.*/ ldr r0, [lr, #-4] /*; Get swi code.*/ and r0, #0xFF bl SWI_Handler /*; Branch to SWI_Handler.*/ RestoreContext r0,r12 /*; Return to the instruction following...*/ /*; ...the SWI instruction.*/赤で記したのが追加した部分になる。SWI コードを取り出すためのものだがこれをコール先に持ち込むことができなかった。
そして SWI 割り込みサンプル。main_swi.c
SWI_Handler を呼び出す部分をCでどのようにすればよいのか分からなかったのでインラインアセンブラでそのまま書いている。実際に使う場合は NXP サンプル swi_handler.s のようにするのがよいだろう。
いろいろやってわかった事、割り込みのエントリー部分はじゃまなだけで必要ないということだ。さっさと削除してしまおう。そのほうがすっきりして分かりやすくなる。
環境:CQ-FRK-NXP-ARM
+ Ride7 version 7.30.10.0169
+ RKit-ARM version 1.30.10.0356
+ GCC Sourcery CodeBench Lite 2012.03-56
コメント
トラックバック
このエントリのトラックバックURL: http://syslab.asablo.jp/blog/2012/09/26/6585801/tb
コメントをどうぞ
※メールアドレスとURLの入力は必須ではありません。 入力されたメールアドレスは記事に反映されず、ブログの管理者のみが参照できます。
※投稿には管理者が設定した質問に答える必要があります。