元記事を投稿した下田です。
ご返信をいただいた皆様、どうもありがとうございました。
あれから色々と聞いたり調べたりしてみたところ、
なんとか正常動作までこぎつくことができました。
下記は実際に動作したソースです。
ポイントは
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; /* 送信待ち状態 */
}
}