
秋月電子で
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()動作しません。
何がいけないのでしょうか?よろしくお願いします。
No.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に転送という環境で使っている人に
参考になれば幸いです。
No.1
- 回答日時:
割り込みベクタの登録はできていますか?
また、int_imia0関数は普通の関数ですが、このままでは割り込みハンドラとしては使えません。
アセンブリ言語で、レジスタの退避・復帰処理と割り込みからのリターン処理を記述し、そこからこの関数を呼び出すようにするか、__attribute__((interrupt_handler))属性を付けてやる必要があるかと思います。
この回答への補足
GDLを使う限りそういった宣言はいらないように思えるのですが・・
http://homepage1.nifty.com/rikiya/software/4GDL. …
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
sleep関数の原理について
-
割り込みの衝突
-
スーパーのレジで並んでいたら...
-
volatileについて
-
このレジの並び方は間違ってま...
-
電車で待機列の割り込みについ...
-
Macターミナルで実行中のプログ...
-
エクセルVBA 大容量CSVファイル...
-
FOM出版の公認テキスト&問題集...
-
vb.netでバッチ処理
-
VB 電卓 メモリー機能
-
ソケット通信 同じポート番号...
-
Linuxでのシリアル通信について...
-
powershell を使いカレントディ...
-
VBA:CSVファイルの読出し手法...
-
.sb3のファイルを.sb2に変換す...
-
C# シリアル通信でデータ受信...
-
ACCESSでフォームのUnloadでデ...
-
メッセージボックスのボタン名変更
-
TCP/IP通信時のサーバーからの受信
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
電車で待機列の割り込みについ...
-
CPUの処理量を減らすコーデ...
-
スーパーのレジで並んでいたら...
-
このレジの並び方は間違ってま...
-
Amazonfireタブレットにわから...
-
CPU負荷率の安全な上限と計...
-
【組込み】割り込み中のstatic...
-
USJでの割り込み
-
VB6でSendKeyを利用したTab移動...
-
irqbalance って
-
インバウンドで迷惑している人...
-
VB.NET スレッドからのイベント...
-
デュアルCPUのパソコンでCPUを1...
-
Timerコンポーネントのインター...
-
C言語でPICマイコン開発
-
Arduinoのプログラムで質問です。
-
マイコンSH-2の割り込みを用い...
-
H8マイコンでの割り込み(シリ...
-
優先度順方式とプリエンプショ...
-
マイコン C言語 割り込み処理...
おすすめ情報