[H8-ML(5581)] H8S/2612 HCANのモジュールストップコンロトールレジスタ(MSTPCRC)解除で固まる
From: "Shimoda Kazutaka" <kazutaka75@xxxxxxxxxxx>
Date: 2005年06月02日(木)19時31分26秒
はじめまして。下田と申します。

北斗電子の 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);
}


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


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


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