[H8-ML(5585)] Re: H8S/2612 HCANのモジュールストップコンロトールレジスタ(MSTPCRC)解除で固まる
From: "Shimoda Kazutaka" <kazutaka75@xxxxxxxxxxx>
Date: 2005年06月06日(月)09時51分31秒
元記事を投稿した下田です。
ご返信をいただいた皆様、どうもありがとうございました。

あれから色々と聞いたり調べたりしてみたところ、
なんとか正常動作までこぎつくことができました。
下記は実際に動作したソースです。
ポイントは

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;					/* 送信待ち状態 */
	}
}


スレッド概略
[表示中](起点)


投稿順に移動
[←前の記事へ(P)]
[→次の記事へ(N)]


リスト表示へ
[このスレッド(T)]
[本記事の前後(L)]