※ ChatGPTを利用し、要約された質問です(原文:H8S 調歩同期通信のデータ送信ができない)
H8S 調歩同期通信のデータ送信ができない
このQ&Aのポイント
ルネサスのCPU H8S2378を使用してプログラムを組んでいるが、調歩同期式通信によるデータの送信が上手く行かない。
送信動作の確認はPCに接続してteratermで行ったが、データが入ってこず、オシロスコープでTXD1のポートを確認してもデータは出力されていない。
プログラムはポート割り込みなどの初期設定を行い、無限ループに入ってLEDの点滅とデータ'A'の送信を繰り返すように記述しているが、LEDの点滅とデータの送信が行われていない。
ルネサスのCPU H8S2378 を使用してプログラムを組んでいるのですが、
どうしても調歩同期式通信によるデータの送信が上手く行きません。
自分でマニュアル等を調べているのですが、原因が分からず困っています。
どなたか、アドバイス頂けないでしょうか。
以下に現状の動作とソースを記述致します。
プログラムがスタートすると、
ポート割り込みなどの初期設定を行い、
無限ループに入り、LEDの点滅とデータ'A'の送信を繰り返すことを
意図して記述しました。
しかし、実際にはLEDの点滅、データ送信は行われず、
SCI1.TDR = data; で送信するデータをセットして、
SCI1.SSR.BIT.TDRE = 0x00; で送信フラグのクリアをした後、
送信フラグ(TDRE)がセットされていないようで
2ループ目のwhile( SCI1.SSR.BIT.TDRE == 0x00 );のところで
止まっているようです。
送信動作の確認は、PCに接続してteratermで行ったのですが、
データが入ってきていないようで、オシロスコープでTXD1のポートを当たったのですが、データは全く出力されていないようです。
/*初期化部分*/
void h8_sciinit( void ){
SCI1.SCR.BYTE = 0x00; /* 内部クロック/SCK*/
SCI1.SMR.BYTE = 0x00; /* 調歩同期式モード*/
/* データ長:8ビット*/
/* バリティ:なし*/
/* ストップビット:1ビット*/
/* 内部クロック:Φクロック*/
SCI1.BRR = 0x6A;//106 /* ビットレート設定(9600bit/s)*/
for(i = 0;i < 0xFFFF; i++);/*待ち*/
SCI1.SCR.BYTE = 0x30; /* RE,TE->1送受信を許可*/
SCI1.SSR.BYTE; /* ダミーリード*/
SCI1.SSR.BYTE = 0x80; /* エラービットをクリア*/
}
/* 送信部分 */
void SCI1_SendData( char data )
{
while( SCI1.SSR.BIT.TDRE == 0x00 );
/*未送信データが送られるまで待つ */
SCI1.TDR = data; /* 送信データのセット*/
SCI1.SSR.BIT.TDRE = 0x00; /* 送信フラグのクリア*/
}
/* Main関数 */
void Main(void)
{
GA_Port_init(); //各GAのポートを初期化
INT_INIT(); /* 割り込みの初期設定 */
ipr_register_set(); /* 割り込み優先順位レジスタ 設定 */
DEBUG_LED1 = 0x01; /* デバッグLED設定 */
DEBUG_LED2 = 0x01; /* デバッグLED設定 */
DEBUG_LED3 = 0x00; /* デバッグLED設定 */
DEBUG_LED4 = 0x00; /* デバッグLED設定 */
h8_sciinit(); /* SCI初期設定 */
while(1){
SCI1_SendData( 'A' );
wait();
DEBUG_LED2 = ~DEBUG_LED2 ;
}
}
お礼
モジュールストップ状態の解除を行ったら送信できるようになりました。 モジュールストップモードの存在を知らずに何日も悩んでいましたので、アドバイス頂き大変感謝しております。 ありがとうございました。