秋月電子で
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で質問しましょう!
似たような質問が見つかりました
- C言語・C++・C# c言語の問題です 3 2023/01/10 16:15
- C言語・C++・C# C#テキストボックスの文字を配列にいれてその後表示する 4 2022/07/17 04:47
- C言語・C++・C# c言語でユーザ関数を利用して入力された文字列を反転させるプログラムを作りたいです。 3 2023/01/29 19:47
- C言語・C++・C# 宣言する関数の形が決まっている状態で、 str1とstr2の文字列をこの順に引っ付けてstrに保存し 2 2022/05/30 18:21
- C言語・C++・C# c言語配列の結合についてです。 なぜうまくいかないのでしょうか。 #include <stdio.h 4 2022/05/30 22:42
- C言語・C++・C# プログラミング c言語 4 2023/03/07 01:05
- C言語・C++・C# C言語 3 2022/10/04 15:07
- Java javaでのプログラム(配列)について質問です. 2 2022/10/14 22:27
- C言語・C++・C# 質問です 下記のコードを分かりやすく解説お願いします 初心者です #include ‹stdio.h 3 2022/05/26 22:03
- C言語・C++・C# プログラミングの授業の課題です 1 2023/01/17 22:15
このQ&Aを見た人はこんなQ&Aも見ています
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
sleep関数の原理について
-
ショッピング
-
(H8マイコン)タイマ割込で変更...
-
Z80の割り込みについて
-
PICのPIN変化割り込みに...
-
実行した後、どうしてもフリー...
-
pic 複数の割り込み関数 切り分...
-
USJでの割り込み
-
USB機器からのデータ受信による...
-
電車で待機列の割り込みについ...
-
irqbalance って
-
緯度、経度の 10進法と 60進法...
-
Macターミナルで実行中のプログ...
-
VBAの配列サイズとメモリに関して
-
スレッドの安全な終了のさせ方
-
バックグラウンドのプロセスの...
-
Excelでのセル内容の高速消去方法
-
explorer.exeが異様にメモリを食う
-
C言語で、メモリを解放しないで...
-
VBSで応答不要のメッセージボッ...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
インバウンドで迷惑している人...
-
pic 複数の割り込み関数 切り分...
-
スーパーのレジで並んでいたら...
-
ショッピング
-
Excelでタイマーの一時停止する...
-
電車で待機列の割り込みについ...
-
【組込み】割り込み中のstatic...
-
C言語でPICマイコン開発
-
CPUの処理量を減らすコーデ...
-
Amazonfireタブレットにわから...
-
マイコン C言語 割り込み処理...
-
USB機器からのデータ受信による...
-
一定時間操作がなかったら、と...
-
VB.net 割り込みの禁止
-
ウォッチドッグタイマ(WDT)の...
-
電車乗車時、並んでいるのに割...
-
USJでの割り込み
-
VB6でSendKeyを利用したTab移動...
-
PICでのプログラムによるチャタ...
-
H8マイコンで割り込みが任意の...
おすすめ情報