秋月電子で
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も見ています
-
映画のエンドロール観る派?観ない派?
映画が終わった後、すぐに席を立って帰る方もちらほら見かけます。皆さんはエンドロールの最後まで観ていきますか?
-
フォロワー20万人のアカウントであなたのあるあるを披露してみませんか?
あなたが普段思っている「これまだ誰も言ってなかったけど共感されるだろうな」というあるあるを教えてください
-
映画のエンドロール観る派?観ない派?
映画が終わった後、すぐに席を立って帰る方もちらほら見かけます。皆さんはエンドロールの最後まで観ていきますか?
-
海外旅行から帰ってきたら、まず何を食べる?
帰国して1番食べたくなるもの、食べたくなるだろうなと思うもの、皆さんはありますか?
-
天使と悪魔選手権
悪魔がこんなささやきをしていたら、天使のあなたはなんと言って止めますか?
-
HEWを使用しているのですが、このようなエラーが出ました。
C言語・C++・C#
関連するカテゴリからQ&Aを探す
おすすめ情報
- ・漫画をレンタルでお得に読める!
- ・人生のプチ美学を教えてください!!
- ・10秒目をつむったら…
- ・あなたの習慣について教えてください!!
- ・牛、豚、鶏、どれか一つ食べられなくなるとしたら?
- ・【大喜利】【投稿~9/18】 おとぎ話『桃太郎』の知られざるエピソード
- ・街中で見かけて「グッときた人」の思い出
- ・「一気に最後まで読んだ」本、教えて下さい!
- ・幼稚園時代「何組」でしたか?
- ・激凹みから立ち直る方法
- ・1つだけ過去を変えられるとしたら?
- ・【あるあるbot連動企画】あるあるbotに投稿したけど採用されなかったあるある募集
- ・【あるあるbot連動企画】フォロワー20万人のアカウントであなたのあるあるを披露してみませんか?
- ・映画のエンドロール観る派?観ない派?
- ・海外旅行から帰ってきたら、まず何を食べる?
- ・誕生日にもらった意外なもの
- ・天使と悪魔選手権
- ・ちょっと先の未来クイズ第2問
- ・【大喜利】【投稿~9/7】 ロボットの住む世界で流行ってる罰ゲームとは?
- ・推しミネラルウォーターはありますか?
- ・都道府県穴埋めゲーム
- ・この人頭いいなと思ったエピソード
- ・準・究極の選択
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
このレジの並び方は間違ってま...
-
Arduinoのプログラムで質問です。
-
スーパーのレジで並んでいたら...
-
電車で待機列の割り込みについ...
-
Macターミナルで実行中のプログ...
-
緯度、経度の 10進法と 60進法...
-
C# シリアル通信でデータ受信...
-
UWSCがうまく動かない
-
マージャンのゲームを作りたい...
-
プロセス終了の検知について
-
VBA kernel32 の意味
-
家電製品の電力周波数を変える機械
-
isoをimgに変換したいのですが...
-
c++からfortranの関数を呼び出す
-
Mac 乗数の入力方法
-
clock関数は正確じゃないの?
-
N88BASICのバイナリデータをテ...
-
オープンアプリの 通信許可の...
-
VC++スレッドの正しい終了のさ...
-
アセンブラ言語の数字を数値に...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
スーパーのレジで並んでいたら...
-
電車で待機列の割り込みについ...
-
このレジの並び方は間違ってま...
-
pic 複数の割り込み関数 切り分...
-
マイコン C言語 割り込み処理...
-
USB機器からのデータ受信による...
-
【組込み】割り込み中のstatic...
-
USJでの割り込み
-
CPUの処理量を減らすコーデ...
-
マイコンSH-2の割り込みを用い...
-
VBAのDoEventsが上手く動きません
-
PICで内部タイマーを使わずカウ...
-
CPU負荷率の安全な上限と計...
-
プリントスクリーンの自動化
-
一定時間操作がなかったら、と...
-
割り込み処理について
-
複数の割込み処理からアクセス...
-
アセンブラのタイマー割り込み
-
電車乗車時、並んでいるのに割...
-
VB6でSendKeyを利用したTab移動...
おすすめ情報