はじめまして。下田と申します。 北斗電子の LIN・CANスタータキット(H8S/2612) & HEW ver.4 の開発環境で、 CAN バスへメッセージを送信するソフトを作っています。 ところが、HCANのモジュールストップコンロトールレジスタ(MSTPCRC)を解除する と、 そのまま固まってしまうという問題が解決できずにいます。 RAM上にプログラムを転送し、モニタ上から実行する場合は問題なく動作します。 CANバスへデータが出力されることを確認しました。 しかし、ROMへプログラムを書き込み、電源ONで動作させると、 MSTPCRC を解除する部分で固まってしまいます。 なお、当該個所をコメントアウトすれば、SCI への Read/Write や LED の点灯と いった 他の機能は動作します。 具体的には下のソースように、 MSTPCRC の HCAN の bit(MSTPC3)を解除した所で 固まってしまいます。 「[H8-ML(2686)] HEWでの外部RAM使用 http://www.exp.org/h8/ml/archive/cgi/view.cgi?message=2686 」 の記事を見て、割り込み禁止の処理を加えているのですが、 私の環境では解決されませんでした。 どなたかお心当たりのある方、いらっしゃいましたら、 お知恵を借していただけないでしょうか。 よろしくお願いします。 --------------------------------------------------------------------------------------- #include "can.h" #include "iodefine.h" #include <machine.h> /**********************************************************************************/ /* main関数 */ /**********************************************************************************/ void main(void) { const char cVersion[] = "H8S/2612F"; /* リンカの意味不明Warning対策 */ int i; set_imask_ccr((unsigned char)1); /* 割り込み全禁止 */ ===> MSTP.CRC.BYTE = 0xF7; <===ここで止まる /* HCANのモジュールストップモー ドを解除 */ HCAN.IRR.WORD = 0x0001; /* メールBox空き割り込みフラグのクリア */ HCAN_BCR = 0x0034; /* ビットレートの設定 */ HCAN_MBCR = 0x0100; /* メールボックスの送受信設定 */ for(i=0;i < (16*8);i++){ /* 全メールボックスの初期設定 */ *( HCAN_MC0 + i )=0x00; *( HCAN_MD0 + i )=0x00; } ( HCAN_MC1_5 ) = 0xA0; ( HCAN_MC1_6 ) = 0xAA; /* ID */ ( HCAN_MC1_1 ) = 0x01; /* データ長 byte */ ( HCAN_MD1_1 ) = 0x11; HCAN_TXPR = 0x0200; /* メールBox1を送信待ちに設定 */ while((HCAN_TXPR & 0x0200) == 0x200) /* 通常動作になるまでループ */ HCAN_TXACK = 0x0200; /* 送信待ち状態 */ while(1); }