はじめまして。初心者のため不手際等ございましたらご指摘いただけると幸いです。
RX62TのSCI受信割込みに関する質問です。 割込み関数が呼ばれているかの確認のため、割込み関数内でチェック用のポートの出力を反転させるプログラムを書きました。
下記のプログラムだと、1文字入力すると「 0 (初期値) → 1 」、次に1文字入力すると「 1 → 0 」となるのではないかと考えておりました。 オシロスコープでチェック用ポートを確認しながら文字を1つ入力すると、出力が 0 (初期値)→ 1 → 0 という風に2回反転されています。(以下画像あり) このように1文字の入力で2回割込み関数が呼ばれている原因を教えていただけると幸いです。
//--- set Check Port ---// PORT9.DDR.BIT.B2 = 1 ; //P92 output PORT9.DR.BIT.B2 = 0 ; //P92 初期値 0//--- set PORTD ---// PORTD.DDR.BIT.B3 = 1 ; PORTD.DDR.BIT.B5 = 0 ; PORTD.ICR.BIT.B5 = 1 ;//--- set UART0 ---// SCI1.SCR.BYTE = 0x00 ; SCI1.SMR.BYTE = 0x00 ; SCI1.BRR = 12 ; SCI1.SCR.BYTE = 0xf0 ;
以下割込み関数ですvoid Uart0DataReceive(void){
unsigned char receiveData; CHECKPORT_1 =~ CHECKPORT_1; receiveData = UART0_RECEIVE_PORT;
if(receiveData != '\n'){ Uart0.receiveBuffer[Uart0.receiveWritePointer++ & 0xff] = receiveData; } if(receiveData == '\r'){ Uart0.comPointer = Uart0.receiveWritePointer; }
}
以下、オシロスコープで観測した波形です。
黄色がチェック用ポート P92
青色はマイコンのシリアル受信ポートです PD5
以上。よろしくお願いいたします。
追記
初心者のため不手際等ありましたらご指摘いただけると幸いです。
ご指摘をいただき、オシロの波形画像を追加いたしました。
何が観測されたのかよくわからないのでオシロスコープを使っているなら波形の映像を送った方がいいと思いますよ。そのほうが回答が得られやすいと思います。
ご指摘ありがとうございます。
不手際申し訳ございません。
質問の投稿を編集させていただきました。
ご査収いただけますと幸いです。
RXDに送っているシリアルデータはどこから出ていますか?自分自身のTXDから出している信号を折り返してRXDに入れて実験されていますか?そうじゃなくてPCなど別の装置から送ってるならボーレートなど通信設定が一致してなくてRXDで受け取ったのは二文字分として扱われている可能性があります。受信したデータとオシロスコープの波形は一致していますか?波形からは0x0D (CR)のコードを送っているようですが、割り込みハンドラで実際に受け取ったデータがそうじゃないなら通信設定の食い違いが原因だと思います。
ヤマモト様
ご回答ありがとうございます。
ご回答の通りで、PCからの送信だったため、ボーレートの設定を見直すことで解決いたしました。
大変感謝しております。この度はありがとうございました。
いくら