お世話になります。
問い合わせの現象はとしては、外部のINT信号なし、IRQ0フラグは0という状態でもベクタテーブルからIRQ0割り込みが不定期にコールされることです。INT信号、IRQ0フラグの状態はオシロスコープで確認済です。
システムの仕様は、外部デバイス(バス接続)からのINT信号を/IRQ0 I/Oに入れ、それを契機にIRQ0割り込みを発生させています。また、他の割り込みについては、MTUのタイマ割り込みを使用しており、それ以外の割り込みは使用していません。MTUのタイマ割り込みでIRQ0割り込みが呼ばれていないことは確認しています。同じようは現象を経験された方、回避方法などご教示お願い致します。
No Name said:外部のINT信号なし、IRQ0フラグは0という状態でもベクタテーブルからIRQ0割り込みが不定期にコールされる
//割り込み禁止 set_fpscr(FPSCR_Init);
でも禁止できませんか?
IKUZO様
早速のご回答ありがとうございます。
set_imask(0xF)で割り込み禁止をすると、割り込みが入らなくなることは確認できています。
今回は、割り込みは常時受け付けたままで、現象を回避したいです。
何かご存知でしたら、ご教授いただけますと幸いです。
No Name said:外部デバイスからINT信号が入っていない、かつ、CPUのステータスとしては割り込みが発生していないのに、割り込みが発生する理由が不明です。
であれば一つ提案です
割り込みハンドラを下記のように作成します
void irq0_int(void)
{
nop();
}
そこで
// *** Interrupt IRQ0void INT_IRQ0(void){ extern void irq0_int(void); irq0_int(); /* sleep(); */}
のようにベクタ処理先を書き換えて
nopでブレークしてみてください。
これで割り込みが入らないとしたらIRQ0以外から
該当のIRQ0ハンドラをコールしているということです。
IKUZO said:ベクタ処理先を書き換えて nopでブレークしてみてください。
ベクタ処理先を書き換えて
アドバイス頂いた調査は実施しておりまして、結果 該当のIRQ0ハンドラがコールされます。
動きとしては正しくコールされている状態です。
ベクターテーブル→INT_IRQ0→irq0_intです。
繰り返しとなり恐縮ですが、IRQ0のベクタ番地のトリガである、
IRQ0ピン(I/O)に割り込みトリガが入っていないにも関わらず、
INT_IRQ0に飛んでくることが投稿させて頂いた件になります。
No Name said:IRQ0ピン(I/O)に割り込みトリガが入っていないにも関わらず、 INT_IRQ0に飛んでくることが投稿させて頂いた件になります。
そうでしたか、難しい内容ですね
サポートに相談されてみてはいかがでしょうか
きっと珍しい現象ですから
調べていただけるのではないでしょうか。
追記:その前にCPU交換しましょう
あるいはボード3枚ぐらい同じ現象があるのか確認してください。
IKUZO said:追記:その前にCPU交換しましょう あるいはボード3枚ぐらい同じ現象があるのか確認してください。
こちらも実施しておりまして、同じ現象が出ております。
サポートへの相談は、別途検討したいと思います。
ありがとうございます。
No Name said:実績のある基板のため
余談かもしれませんが
CPUボード自体のノイズ耐性とか大丈夫なんでしょうか?
CPUボードに電源を供給していた電源装置からノイズが乗っていたとか、CPUの1.8Vが1.5Vしかなかったとか基板自体はどうなのでしょうか?CPU周りのデカップリングコンデンサー等は十分ですか?
基板製造現場で部品を間違えることは良くあることですよ。
開発環境はまさかアセンブラではないですよね
HEWでもコンパイラバージョンは?やCPUの選択等の設定も大丈夫ですよね。
IKUZO said:CPUボード自体のノイズ耐性とか大丈夫なんでしょうか?
こちらについては、別部隊で確認しています。
IKUZO said:開発環境はまさかアセンブラではないですよね HEWでもコンパイラバージョンは?やCPUの選択
HEWでもコンパイラバージョンは?やCPUの選択
ベアメタルのC言語です。
Hew:4.08.0、コンパイラ: V.9.04 、CPU:SH2A-FPU(SH7216のため)
※Hewにアップデート版4.09.1があることは認知しています。
本事案が他のルネサスユーザでご経験があるか?という期待を込めておりました。
Hew、コンパイラ等の開発環境は別カットで確認中ですが、
エラッタ等もないために開発環境でこのような事案が出る(発生させられる)ということも
なかなか考えにくいと推察しております。
No Name said:本事案が他のルネサスユーザでご経験があるか?
ちょっと誤解してたら申し訳ありません
今では廃盤のSH7670を使用した経験があります
ですのでSH7216ではないので、的外れだったかもしれません
しかし非常に興味深い内容であったので投稿させていただきましたが
たぶんこんな経験をされたかたというのは希有ではないでしょうか
解決に至らなかったということで、力不足で申し訳ありませんでした。
IKUZO said:解決に至らなかったということで、力不足で申し訳ありませんでした。
とんでもございません。稀な事象であるため、レスポンスを頂けないことも想定しておりました。
お時間を割いて頂いてありがとうございました。
(一般的には?)プログラムの先頭の方でクロック設定をしてるかと思うのですが、
その設定をコメントアウトしても、状況は変わらないでしょうか?
SH7216は、クロック設定(分周比の変更)に関して、
・RAMでプログラムを実行する事
・分周比変更後周辺クロックで32クロック分のNOPを入れる
等の事がハードウェアマニュアルに記載されています。(RAM実行というのが意外に面倒です)
ROMに配置したプログラムで分周比を変えてしまっても、問題なく動作する事が多いですが、
なんか変な挙動を示すケースもありました。
分周比設定の問題である事が疑われる場合は、アプリケーションノート
「SH7216/SH7239グループ CPG 動作周波数変更時の設定例」
(ルネサスWebで、"an1182"で検索するとヒットします)に、サンプルコードがありますので、
参照してみてください。
今回の不具合とは関係が無いかも知れませんが、ちょっと気になりました。
th様
ご回答ありがとうございます。
tf said:SH7216は、クロック設定(分周比の変更)に関して、 ・RAMでプログラムを実行する事 ・分周比変更後周辺クロックで32クロック分のNOPを入れる 等の事がハードウェアマニュアルに記載されています。(RAM実行というのが意外に面倒です)
RAM実行は試せていませんが、クロック設定後に周辺クロックで32クロック分のNOPを追加することは実行しました。
しかし、現象は変わりませんでした。