元記事を投稿した下田です。 ご返信をいただいた皆様、どうもありがとうございました。 あれから色々と聞いたり調べたりしてみたところ、 なんとか正常動作までこぎつくことができました。 下記は実際に動作したソースです。 ポイントは 1.HCANのモジュールストップコントロールレジスタを解除する前に、 全ての割り込み(NMIを除く)を禁止する。 2.HCANの初期化が終わったら、コンフィギュレーションモードを解除する。 の2つでした。 ただ、今の状態は割り込みを禁止しているので、当然、割り込みは使えません。 どこかで禁止を解除すればいいと思うのですが、そのタイミングはどこなんだろう ..... イマイチ、よく分かりません(^^; --- /* ヘッダファイル (このソースには北斗とResesasの表記が混在しているので注意 !) */ #include "can.h" /* CAN用のヘッダファイル(北斗電子) */ #include "iodefine.h" /* CAN用のヘッダファイル(Renesas) */ #include <machine.h> #define MSTPCRA *((volatile unsigned char*) 0xfffffde8) /* モジュールストッ プコントロールレジスタA */ #define MSTPCRB *((volatile unsigned char*) 0xfffffde9) /* モジュールストッ プコントロールレジスタB */ #define MSTPCRC *((volatile unsigned char*) 0xfffffdea) /* モジュールストッ プコントロールレジスタC */ /**********************************************************************************/ /* main関数 */ /**********************************************************************************/ void main(void) { const char cVersion[] = "H8S/2612F"; /* リンカの意味不明Warning対策 */ int i; set_imask_ccr((unsigned char)1); /* 全ての割り込み禁止 */ MSTP.CRC.BYTE = 0xF7; /* HCANのモジュールストップモードを解除 */ /* 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=16 (=0x10) */ ( HCAN_MC1_1 ) = 0x01; /* データ長 byte */ HCAN_MCR = HCAN_MCR | 0x84; /* メッセージ送信方式の設定(メールボックス順) */ HCAN_MCR = HCAN_MCR & ~0x01; /* ビットコンフィギュレーション終了 */ while( ( HCAN_GSR & 0x08 ) == 1 ){ /* 通常動作になるまでループ */ } /* 送信 */ while(1) { ( HCAN_MD1_1 ) = 0x11; HCAN_TXPR = 0x0200; /* メールBox1を送信待ちに設定 */ while((HCAN_TXPR & 0x0200) == 0x200) /* 通常動作になるまでループ */ HCAN_TXACK = 0x0200; /* 送信待ち状態 */ } }