アプリ版:「スタンプのみでお礼する」機能のリリースについて

秋月電子で
http://akizukidenshi.com/catalog/items2.php?p=1& …
を買いマイコンの勉強をしています。
コンパイル等はGCC Developer Lite、モニタプログラムを使いRAM上で
動作確認をしています。
タイマによる割り込みをしたいと思い、参考書のプログラムを参考に
マザーボード上の2つのLEDが交互に光るようにしたいのですが、
肝心のint_imaia0()が全く実行されていません。

#include <3048.h>

int c;

void int_imia0( void )
{
ITU0.TSR.BIT.IMFA = 0;
c -= 1;
if( c == 0 ){
P5.DR.BYTE = ~ P5.DR.BYTE;
c = 10;
}
}

int main( void )
{
c = 10;
P5.DDR = 0x03;
ITU0.TCR.BIT.CCLR = 1;
ITU0.TCR.BIT.TPSC = 3;
ITU0.GRA = 39999;
ITU.TSTR.BIT.STR0 = 1;
P5.DR.BYTE = 0x01;
EI;
while( 1 ){
}
}

また、割り込みを使わない方法ということで

#include <3048.h>

int main( void )
{
int c = 10;
P5.DDR = 0x03;
ITU0.TCR.BIT.CCLR = 1;
ITU0.TCR.BIT.TPSC = 3;
ITU0.GRA = 39999;
ITU.TSTR.BIT.STR0 = 1;
P5.DR.BYTE = 0x01;
while( 1 ){
while( !ITU0.TSR.BIT.IMFA );
c -= 1;
if( c == 0 ){
P5.DR.BYTE = ~ P5.DR.BYTE;
c = 10;
}
ITU0.TSR.BIT.IMFA = 0;
}
}

を試したのですが、こちらはLEDが交互に点滅して成功しています。
なのでタイマ自体は動作していると思うのでですが、上のプログラムだと
int_imaia0()動作しません。
何がいけないのでしょうか?よろしくお願いします。

A 回答 (2件)

タイマインタラプトイネーブルレジスタ(TIER)の


設定し忘れのみのように思います。

#GDLのリンク参照しました。ベクタ登録等必要なしとは、
#便利にしているんですね。参考になりました。

この回答への補足

無事にRAMに転送し動作させることが出来ました。

具体的にはソースで
ITU0.TIER.BIT.IMIEA = 1;
が抜けていたこと。

それとGDLでのリンカのスクリプトファイル(h8rom.x等)をRAM用に書き換える際に
http://d.hatena.ne.jp/gimme2s/20051114
を参考にしていたのですが、モニタプログラムで「?」としメモリの配置を見ると
Monitor Vector 00000 - 000FF
Monitor ROM 00100 - 07E65
Monitor RAM FEF10 - FF02F
User Vector FF030 - FF12F
となっていたので、h8rom.xの最初を
MEMORY {
vectors : org =0xff000, len =0x100
rom : org =0xff100, len =128k-0x100
ram : org =0xffef10, len =4k
eight : org =0xffff00, len =0x100
}
にすることで無事動作することが出来ました。
アドレスの設定が間違っていると、書き込めなかったり実行できなかったり、
割り込みが出来なかったりします。

同じH8/3048F+GDL+hterm+RAMに転送という環境で使っている人に
参考になれば幸いです。

補足日時:2006/10/23 21:34
    • good
    • 0

割り込みベクタの登録はできていますか?



また、int_imia0関数は普通の関数ですが、このままでは割り込みハンドラとしては使えません。
アセンブリ言語で、レジスタの退避・復帰処理と割り込みからのリターン処理を記述し、そこからこの関数を呼び出すようにするか、__attribute__((interrupt_handler))属性を付けてやる必要があるかと思います。

この回答への補足

GDLを使う限りそういった宣言はいらないように思えるのですが・・
http://homepage1.nifty.com/rikiya/software/4GDL. …

補足日時:2006/10/21 09:06
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!