カレンダー(月別)
04 ≪│2017/05│≫ 06
- 1 2 3 4 5 6
7 8 9 10 11 12 13
14 15 16 17 18 19 20
21 22 23 24 25 26 27
28 29 30 31 - - -
プロフィール

Suma

Author:Suma
東北の田舎でロボット開発に励んでいます。
現在のメインはマイクロマウス。目指すは東北地区大会優勝!!

ご注意
・当ブログはリンクフリーです ・当ブログの掲載情報を元に行った行為によって何らかの損害が生じたとしても管理人は一切責任を負いません。予めご了承ください。
上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。

--/--/--(--) --:-- |
今回はセンサ値の表示やログデータ取得等、デバッガが接続できない環境でのデバッグに絶大な威力を発揮するシリアル通信を実装

と言ってもSH7125とRX62Tではレジスタ名が異なるだけでほぼ同じ処理で動作する

まずシリアル通信のパラメータは以下の通り
使用チャンネル:SCI1
ボーレート:9600bps
データ:8bit
パリティ:なし
ストップビット:1bit

SCI1のベースクロックはPCLKのため48MHz

TXD1端子(PD3)を出力、RXD1端子(PD5)を入力に設定し、入力バッファも設定しておく
PORTD.DDR.BYTE = 0xD8u;
PORTD.ICR.BYTE = 0x20u;

まずはCMT0を設定した時と同じくストップ状態の解除
SYSTEM.MSTPCRB.BIT.MSTPB30 = 0; //SCI1ストップ解除

そして初期設定(調歩同期式モード)
SCI1.SCR.BYTE = 0x00u; //SCI1停止
SCI1.SMR.BYTE = 0x00u; //PCLK分周無し、ストップビット1、パリティ無し、データ8bit、調歩同期式
SCI1.BRR = 155;
SCI1.SEMR.BYTE = 0x20u; //1bit=16ClockCycle、ノイズ除去機能有効、スタートビットはLOWレベルで検出

for (Cnt=0;Cnt<1000;Cnt++); //1bit(@9600bps) Wait

SCI1.SSR.BYTE &= ~0x78u; //エラーフラグクリア
SCI1.SCR.BIT.TE = 1; //送信許可
SCI1.SCR.BIT.RE = 1; //受信許可

SCI1で使用するクロックはベースクロックを分周無しで使用
初期化後、送受信有効とするまでの1bit分以上の待ち時間は適当なWaitでOK

これで初期化は完了

次に送信と受信処理部分
私のマウスでは、送信は割り込みを使わず、受信は割り込みを使用している

まずは送信処理
if (SCI1.SSR.BIT.TDRE == 1) {
SCI1.TDR = data; /* 送信レジスタへ送信データを設定 */
}
SSRレジスタで送信データを設定できるかを確認して、送信したいデータを設定するだけ

受信割り込みの設定はタイマー割り込みと同じように行う
・ICUレジスタで受信割り込み許可、割り込み優先度設定
・ICUレジスタで受信エラー割り込み許可、割り込み優先度設定
・intprg.cを編集
・pragma宣言追加
 #pragma interrupt (Excep_SCI1_ERI1(vect=218))
 #pragma interrupt (Excep_SCI1_RXI1(vect=219))

受信処理は割り込みで行うが、受信割り込みによって通常処理が処理落ちするのは避けたい
そのため受信許可・禁止を切り替える関数を用意している
例:最短走行時は受信禁止にする、等
void SciRxSetting_v(u8 u8Mode) {
 if (u8Mode == SET_SCI_RX_ENABLE) {
  SCI1.SCR.BIT.RIE = 1;
  SCI1.SCR.BIT.RE = 1;
 } else {
  SCI1.SCR.BIT.RE = 0;
  SCI1.SCR.BIT.RIE = 0;
 }
}

受信処理は、受信割り込み(RXI)が発生する
受信したデータはバッファに貯めておき、後で読みだして使用する
data = SCI1.RDR; /* 受信レジスタからデータ読み出し */
/* 受信データをバッファにセット */

受信エラー発生時は受信エラー割り込み(ERI)が発生する
受信エラーが発生時は、パリティエラー(PER)、フレーミングエラー(FER)、オーバーランエラー(ORER)フラグのうちどれかが1になるが、このフラグが1の間は受信割り込みが発生しないため受信エラー割り込み内でこれらのフラグをクリアする必要がある
errData = SCI1.SSR.BYTE;
SCI1.SSR.BYTE &= ~0x38; /* ステータス(受信,エラー)クリア */
/* エラー時の処理 */

動作確認はTera Term等のターミナルソフトを使用
シリアル通信パラメータを冒頭でSCI1に設定したパラメータと同じにすること

2015/01/05(月) 06:38 | コメント:0 | トラックバック:0 |
コメント
コメントを投稿
名前
タイトル
メール
URL
コメント
パスワード
管理者にだけ表示を許可する


トラックバック

この記事のトラックバックURL
 

この記事にトラックバックする (FC2 blog user only!)
 
この記事へのトラックバック


探索済み区画
これまで
区画を探索
検索フォーム
夢を叶えるための名言集


presented by 地球の名言
上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。