rl78/g13 周辺機能紹介 sau - renesas e-learning 動作クロックと転送クロック 11...
TRANSCRIPT
00000-A
Rev. 0.00
ルネサス エレクトロニクス株式会社
ルネサス半導体トレーニングセンター
© 2013 Renesas Electronics Corporation. All rights reserved.
2013/08/02
RL78/G13 周辺機能紹介 SAU シリアル・アレイ・ユニット
© 2013 Renesas Electronics Corporation. All rights reserved. 2
コンテンツ
SAUの概要
UART通信機能のプログラム・サンプル紹介
© 2013 Renesas Electronics Corporation. All rights reserved. 3
SAUの概要
© 2013 Renesas Electronics Corporation. All rights reserved. 4
SAUの機能
クロック同期式 調歩同期式 マスタ動作のみ
チャネル0:送信 チャネル1:受信
© 2013 Renesas Electronics Corporation. All rights reserved. 5
UART通信機能のプログラム・サンプル紹介
© 2013 Renesas Electronics Corporation. All rights reserved. 6
仕様(1/2)
■ UART通信機能のプログラム例 対向機器から受信を行い、受信キャラクタまたは受信エラーの種別に応じたメッセージを送信します。受信と送信の対応は以下の通りです。
受信キャラクタ 応答メッセージ
’T’ ”OK¥r¥n”
’t’ ”ok¥r¥n”
上記以外 ”UC¥r¥n”
受信エラー 応答メッセージ
パリティ・エラー ”PE¥r¥n”
フレーミング・エラー ”OE¥r¥n”
オーバーラン・エラー ”FE¥r¥n”
© 2013 Renesas Electronics Corporation. All rights reserved. 7
仕様(2/2)
<設定条件> •高速オンチップオシレータのクロックは32MHzで動作します。 •CPU/周辺ハードウェア・クロックは32MHzで動作します。 •SAU0チャネル0、1をUARTとして使用します。 •データ出力はP12/TxD0端子、データ入力はP11/RxD0端子を使用します。 •データ長は8ビットを使用します。 •データ転送方向設定はLSBファーストを使用します。 •パリティ設定は偶数パリティを使用します。 •受信データ・レベル設定は標準を使用します。 •転送レートは9600bps を使用します。 •受信完了割り込み(INTSR0)、送信完了割り込み(INTST0)、エラー割り込み (INTSRE0)を使用します。 •INTSR0、INTST0、INTSRE0 の割り込み優先順位は低優先を使用します。
© 2013 Renesas Electronics Corporation. All rights reserved. 8
初期設定のフロー
© 2013 Renesas Electronics Corporation. All rights reserved. 9
シリアル・アレイ・ユニットの設定フロー
fCLKの4クロック以上間隔をあける
© 2013 Renesas Electronics Corporation. All rights reserved. 10
シリアル・アレイ・ユニットへのクロック供給開始
周辺イネーブル・レジスタ0(PER0) 各周辺ハードウエアへのクロック供給許可/禁止の設定
シリアル・アレイ・ユニットへのクロック供給開始
© 2013 Renesas Electronics Corporation. All rights reserved.
SAUの動作クロックと転送クロック
11
シリアル・アレイ・ユニット0
fCLK 32MHz
セレクタ
セレクタ
チャネル0
外部クロック
外部クロック
0
セレクタ クロック0
クロック1
セレクタ
fMCK
プリスケーラ
レジスタ
16
16
クロック 制御
fTCLK
チャネル1
0
セレクタ
セレクタ
fMCK
クロック 制御
fTCLK
ユニット0共通の 2種類のクロック
2種類のクロックと 外部クロックから
選択 分周
転送クロック
© 2013 Renesas Electronics Corporation. All rights reserved.
クロック周波数の設定
シリアル・クロック選択レジスタ0(SPS0) CK00、CK01動作クロックの設定
CK01 CK00
12
0 1 0 0 0 1 0 0
サンプルの 周辺ハードウエア・クロック
クロック周波数の設定
© 2013 Renesas Electronics Corporation. All rights reserved.
シリアル・アレイ・ユニットの設定関数
13
fCLKの4クロック以上間隔をあける
void R_SAU0_Create(void) { SAU0EN = 1; NOP(); NOP(); NOP(); NOP(); SPS0 = 0x0044; R_UART0_Create(); }
© 2013 Renesas Electronics Corporation. All rights reserved.
UART0の設定フロー(1/4)
14
R_UART0_Create()
チャネルの動作停止
割り込みの禁止
チャネル0の設定 ・動作モードの設定 ・通信動作の設定
・転送クロックの設定
割り込み要求フラグのクリア
割り込み優先度の設定
1
RxD端子のノイズ・フィルタの設定
エラー・フラグのクリア
入出力端子の設定
チャネル1の設定 ・動作モードの設定 ・通信動作の設定
・転送クロックの設定
チャネル0の出力の設定
1
return
© 2013 Renesas Electronics Corporation. All rights reserved.
チャネルの動作停止
15
シリアル・チャネル停止レジスタ0(ST0) チャネルの動作停止
チャネル0 チャネル1
© 2013 Renesas Electronics Corporation. All rights reserved.
割り込みの禁止
割り込みマスク・フラグ・レジスタ(MK0H) 対応するマスカブル割り込み処理の許可/禁止を設定
受信完了割り込み SRMK0ビット
送信完了割り込み STMK0ビット
エラー割り込み SREMK0ビット
16
© 2013 Renesas Electronics Corporation. All rights reserved.
割り込み要求フラグのクリア
割り込み要求フラグ・レジスタ(IF0H) 対応する割り込み要求の発生または命令の実行によりセット リセット信号発生時または命令の実行によりクリア 割り込みが受け付けられた場合は自動的にクリア
受信完了割り込み SRIF0ビット
送信完了割り込み STIF0ビット
エラー割り込み SREIF0ビット
17
© 2013 Renesas Electronics Corporation. All rights reserved.
割り込み優先順位レベルの設定
優先順位指定フラグ・レジスタ(PR00H, PR10H) PR00HレジスタとPR10Hレジスタを組み合わせて,対応するマスカブル割り込み
の優先順位レベルを設定
受信完了割り込み SRPR00、10ビット
送信完了割り込み STPR00、10ビット
エラー割り込み SREPR00、10ビット
18
© 2013 Renesas Electronics Corporation. All rights reserved.
UART0の設定関数(1/4)
19
NFEN0 |= 0x01; SIR01 = 0x0007; SMR01 = 0x0122; SCR01 = 0x4697; SDR01 = 0xce00; SO0 |= 0x0001; SOL0 |= 0x0000; SOE0 |= 0x0001; PM1 |= 0x02; P1 |= 0x04; PM1 &= 0xfb; }
R_UART0_Create()
チャネルの動作停止
割り込みの禁止
チャネル0の設定 ・動作モードの設定 ・通信動作の設定
・転送クロックの設定
割り込み要求フラグのクリア
割り込み優先順位レベルの設定
1
void R_UART0_Create(void) { ST0 |= 0x0003; STMK0 = 1; STIF0 = 0; SRMK0 = 1; SRIF0 = 0; SREMK0 = 1; SREIF0 = 0; STPR10 = 1; STPR00 = 1; SRPR10 = 1; SRPR00 = 1; SREPR10 = 1; SREPR00 = 1; SMR00 = 0x0022; SCR00 = 0x8297; SDR00 = 0xce00;
© 2013 Renesas Electronics Corporation. All rights reserved.
UART0の設定フロー(2/4)
20
R_UART0_Create()
チャネルの動作停止
割り込みの禁止
チャネル0の設定 ・動作モードの設定 ・通信動作の設定
・転送クロックの設定
割り込み要求フラグのクリア
割り込み優先順位レベルの設定
1
送信
© 2013 Renesas Electronics Corporation. All rights reserved.
送信チャネルの動作モードの設定(1/4)
シリアル・モード・レジスタ00(SMR00) 動作クロックの選択
21
クロック0=2MHz
クロック1=2MHz
UART通信モードでは設定固定
クロック0=2MHz
© 2013 Renesas Electronics Corporation. All rights reserved.
送信チャネルの動作モードの設定(2/4)
シリアル・モード・レジスタ00(SMR00) スタート・トリガ要因の選択
22
UART送信モードでは設定固定
© 2013 Renesas Electronics Corporation. All rights reserved.
送信チャネルの動作モードの設定(3/4)
シリアル・モード・レジスタ00(SMR00) 動作モードの設定
23
UART通信モードでは設定固定
© 2013 Renesas Electronics Corporation. All rights reserved.
送信チャネルの動作モードの設定(4/4)
シリアル・モード・レジスタ00(SMR00) 割り込み要因の選択
24
© 2013 Renesas Electronics Corporation. All rights reserved.
送信チャネルの通信動作の設定(1/7)
シリアル通信動作設定レジスタ00(SCR00) 動作モードの設定
25
UART送信モードでは設定固定
© 2013 Renesas Electronics Corporation. All rights reserved.
送信チャネルの通信動作の設定(2/7)
シリアル通信動作設定レジスタ00(SCR00) データとクロックの位相選択
26
UART通信モードでは設定固定
© 2013 Renesas Electronics Corporation. All rights reserved.
送信チャネルの通信動作の設定(3/7)
シリアル通信動作設定レジスタ00(SCR00) エラー割り込み信号のマスク可否の選択
UART送信モードでは設定固定
27
© 2013 Renesas Electronics Corporation. All rights reserved.
送信チャネルの通信動作の設定(4/7)
シリアル通信動作設定レジスタ00(SCR00) パリティ・ビットの設定
28
© 2013 Renesas Electronics Corporation. All rights reserved.
送信チャネルの通信動作の設定(5/7)
シリアル通信動作設定レジスタ00(SCR00) データ転送順序の選択
29
© 2013 Renesas Electronics Corporation. All rights reserved.
送信チャネルの通信動作の設定(6/7)
シリアル通信動作設定レジスタ00(SCR00) ストップ・ビットの設定
30
© 2013 Renesas Electronics Corporation. All rights reserved.
送信チャネルの通信動作の設定(7/7)
シリアル通信動作設定レジスタ00(SCR00) データ長の設定
31
© 2013 Renesas Electronics Corporation. All rights reserved.
送信チャネルの転送クロックの設定
シリアル・データ・レジスタ00(SDR00) 動作クロックの分周設定
32
1 1 0 0 1 1 1 fMCK/208
fMCK = 2MHz
2MHz/208 ≒ 9600Hz
© 2013 Renesas Electronics Corporation. All rights reserved. 33
UART0の設定関数(2/4)
R_UART0_Create()
チャネルの動作停止
割り込みの禁止
チャネル0の設定 ・動作モードの設定 ・通信動作の設定
・転送クロックの設定
割り込み要求フラグのクリア
割り込み優先順位レベルの設定
1
NFEN0 |= 0x01; SIR01 = 0x0007; SMR01 = 0x0122; SCR01 = 0x4697; SDR01 = 0xce00; SO0 |= 0x0001; SOL0 |= 0x0000; SOE0 |= 0x0001; PM1 |= 0x02; P1 |= 0x04; PM1 &= 0xfb; }
void R_UART0_Create(void) { ST0 |= 0x0003; STMK0 = 1; STIF0 = 0; SRMK0 = 1; SRIF0 = 0; SREMK0 = 1; SREIF0 = 0; STPR10 = 1; STPR00 = 1; SRPR10 = 1; SRPR00 = 1; SREPR10 = 1; SREPR00 = 1; SMR00 = 0x0022; SCR00 = 0x8297; SDR00 = 0xce00;
© 2013 Renesas Electronics Corporation. All rights reserved.
UART0の設定フロー(3/4)
34
RxD端子のノイズ・フィルタの設定
エラー・フラグのクリア
入出力端子の設定
チャネル1の設定 ・動作モードの設定 ・通信動作の設定
・転送クロックの設定
チャネル0の出力の設定
1
return
受信
© 2013 Renesas Electronics Corporation. All rights reserved.
受信チャネルの動作モードの設定(1/4)
シリアル・モード・レジスタ01(SMR01) 動作クロックの選択
35
UART通信モードでは設定固定
クロック0=2MHz
クロック1=2MHz
クロック0=2MHz
© 2013 Renesas Electronics Corporation. All rights reserved.
受信チャネルの動作モードの設定(2/4)
シリアル・モード・レジスタ01(SMR01) スタート・トリガ要因の選択
36
UART受信モードでは設定固定
© 2013 Renesas Electronics Corporation. All rights reserved.
受信チャネルの動作モードの設定(3/4)
シリアル・モード・レジスタ01(SMR01) 受信データのレベル反転の設定
37
© 2013 Renesas Electronics Corporation. All rights reserved.
受信チャネルの動作モードの設定(4/4)
シリアル・モード・レジスタ01(SMR01) 割り込み要因の選択
38
UART受信モードでは設定固定
© 2013 Renesas Electronics Corporation. All rights reserved.
受信チャネルの通信動作の設定(1/3)
シリアル通信動作設定レジスタ01(SCR01) 動作モードの設定
39
UART受信モードでは設定固定
© 2013 Renesas Electronics Corporation. All rights reserved.
受信チャネルの通信動作の設定(2/3)
シリアル通信動作設定レジスタ01(SCR01) エラー割り込み信号のマスク可否の選択
40
© 2013 Renesas Electronics Corporation. All rights reserved.
受信チャネルの通信動作の設定(3/3)
シリアル通信動作設定レジスタ01(SCR01) パリティ・ビットの設定 データ転送順序の選択 ストップ・ビットの設定 データ長の設定
41
偶数パリティ LSBファースト ストップビット = 1ビット データ長 = 8ビット
© 2013 Renesas Electronics Corporation. All rights reserved.
受信チャネルの転送クロックの設定
シリアル・データ・レジスタ01(SDR01) 動作クロックの分周設定
42
1 1 0 0 1 1 1 fMCK/208
fMCK = 2MHz
2MHz/208 ≒ 9600Hz
© 2013 Renesas Electronics Corporation. All rights reserved. 43
UART0の設定関数(3/4)
RxD端子のノイズ・フィルタの設定
エラー・フラグのクリア
入出力端子の設定
チャネル1の設定 ・動作モードの設定 ・通信動作の設定
・転送クロックの設定
チャネル0の出力の設定
1
return
NFEN0 |= 0x01; SIR01 = 0x0007; SMR01 = 0x0122; SCR01 = 0x4697; SDR01 = 0xce00; SO0 |= 0x0001; SOL0 |= 0x0000; SOE0 |= 0x0001; PM1 |= 0x02; P1 |= 0x04; PM1 &= 0xfb; }
void R_UART0_Create(void) { ST0 |= 0x0003; STMK0 = 1; STIF0 = 0; SRMK0 = 1; SRIF0 = 0; SREMK0 = 1; SREIF0 = 0; STPR10 = 1; STPR00 = 1; SRPR10 = 1; SRPR00 = 1; SREPR10 = 1; SREPR00 = 1; SMR00 = 0x0022; SCR00 = 0x8297; SDR00 = 0xce00;
© 2013 Renesas Electronics Corporation. All rights reserved.
UART0の設定フロー(4/4)
44
R_UART0_Create()
チャネルの動作停止
割り込みの禁止
チャネル0の設定 ・動作モードの設定 ・通信動作の設定
・転送クロックの設定
割り込み要求フラグのクリア
割り込み優先度の設定
1
RxD端子のノイズ・フィルタの設定
エラー・フラグのクリア
入出力端子の設定
チャネル1の設定 ・動作モードの設定 ・通信動作の設定
・転送クロックの設定
チャネル0の出力の設定
1
return
© 2013 Renesas Electronics Corporation. All rights reserved.
RxD端子のノイズ・フィルタの設定
45
ノイズ・フィルタ許可レジスタ0(NFEN0) ノイズ・フィルタの使用可否
RxD0端子
UART受信モードでは設定固定
© 2013 Renesas Electronics Corporation. All rights reserved.
エラー・フラグのクリア
46
シリアル・フラグ・クリア・トリガ・レジスタ01(SIR01) チャネルの各エラー・フラグのクリア
受信チャネル (チャネル1)
© 2013 Renesas Electronics Corporation. All rights reserved.
チャネル0の出力の設定(1/2)
シリアル出力許可レジスタ0(SOE0) シリアル通信動作の出力許可/停止を設定
47
シリアル出力レジスタ0(SO0) シリアル出力のバッファ・レジスタ
ユニット0のチャネル0
SOE00=1のときの書き換えは無視
© 2013 Renesas Electronics Corporation. All rights reserved.
チャネル0の出力の設定(2/2)
48
シリアル出力許可レジスタ0(SOE0) シリアル通信動作の出力許可/停止を設定
ユニット0のチャネル0
シリアル出力レベル・レジスタ0(SOL0) データ出力レベルの反転を設定する
© 2013 Renesas Electronics Corporation. All rights reserved.
入出力端子の設定
ポート・レジスタ(P1) ポートの出力ラッチの値を設定
ポート・モード・レジスタ(PM1) ポートの入出力モードの選択
TxD端子
TxD端子 RxD端子
49
© 2013 Renesas Electronics Corporation. All rights reserved. 50
UART0の設定関数(4/4)
RxD端子のノイズ・フィルタの設定
エラー・フラグのクリア
入出力端子の設定
チャネル1の設定 ・動作モードの設定 ・通信動作の設定
・転送クロックの設定
チャネル0の出力の設定
1
return
void R_UART0_Create(void) { ST0 |= 0x0003; STMK0 = 1; STIF0 = 0; SRMK0 = 1; SRIF0 = 0; SREMK0 = 1; SREIF0 = 0; STPR10 = 1; STPR00 = 1; SRPR10 = 1; SRPR00 = 1; SREPR10 = 1; SREPR00 = 1; SMR00 = 0x0022; SCR00 = 0x8297; SDR00 = 0xce00;
NFEN0 |= 0x01; SIR01 = 0x0007; SMR01 = 0x0122; SCR01 = 0x4697; SDR01 = 0xce00; SO0 |= 0x0001; SOL0 |= 0x0000; SOE0 |= 0x0001; PM1 |= 0x02; P1 |= 0x04; PM1 &= 0xfb; }
© 2013 Renesas Electronics Corporation. All rights reserved. 51
UART0の設定関数のコード生成(1/3)
© 2013 Renesas Electronics Corporation. All rights reserved. 52
UART0の設定関数のコード生成(2/3)
転送完了割り込み バッファ空き割り込み
© 2013 Renesas Electronics Corporation. All rights reserved. 53
UART0の設定関数のコード生成(3/3)
© 2013 Renesas Electronics Corporation. All rights reserved.
mainのフロー
54
main
R_UART0_Receive
R_UART0_Start
HALTモードへ移行
受信割り込み禁止
受信エラー検出?
受信エラーを判定し、 対応したデータの送信
Yes
No
受信データを判定し、 対応したデータの送信
受信割り込み許可
R_UART0_Receive
オーバラン・エラー?
© 2013 Renesas Electronics Corporation. All rights reserved.
UART0 動作開始関数
55
void R_UART0_Start(void) { STIF0 = 0; STMK0 = 0; SRIF0 = 0; SRMK0 = 0; SREIF0 = 0; SREMK0 = 0; SO0 |= 0x0001; SOE0 |= 0x0001; SS0 |= 0x0003; }
© 2013 Renesas Electronics Corporation. All rights reserved.
UART動作の許可
56
送信 受信
シリアル・チャネル開始レジスタ0(SS0) 通信/カウント開始の許可
© 2013 Renesas Electronics Corporation. All rights reserved.
正常受信のシーケンス
57
割り込み メイン
R_UART0_Send() 格納先アドレスと受信回数(1回)を通知
HALT() 受信待ち
R_UART0_Interrupt_Receive() 通知アドレスに受信データを格納
R_UART0_Callback_ReceiveEnd() 正常終了を通知
© 2013 Renesas Electronics Corporation. All rights reserved.
エラー受信のシーケンス
58
割り込み メイン
HALT() 受信待ち
R_UART0_Interrupt_Error() エラーの判定
R_UART0_Callback_Error() エラー情報を通知
R_UART0_Receive() 格納先アドレスと受信回数(1回)を通知
© 2013 Renesas Electronics Corporation. All rights reserved.
受信完了割り込み処理
59
__interrupt void R_UART0_Interrupt_Receive(void) { uint8_t rx_data; rx_data = RXD0; if (g_Uart0RxLen > g_Uart0RxCnt) { *gp_Uart0RxAddress = rx_data; gp_Uart0RxAddress++; g_Uart0RxCnt++; if (g_Uart0RxLen == g_Uart0RxCnt) { R_UART0_Callback_ReceiveEnd(); } } } void R_UART0_Callback_ReceiveEnd(void) { g_Uart0RxErr = 0U; /* Clear error flag */ }
© 2013 Renesas Electronics Corporation. All rights reserved.
受信データの読み出し
シリアル・データ・レジスタ01(SDR01) 下位8ビットは受信バッファ・レジスタ
60
RXD0 動作クロックの分周設定
© 2013 Renesas Electronics Corporation. All rights reserved.
エラー割り込み処理
61
__interrupt void R_UART0_Interrupt_Error(void) { uint8_t err_type; *gp_Uart0RxAddress = RXD0; err_type = (uint8_t)(SSR01 & 0x0007U); SIR01 = (uint16_t)err_type; R_UART0_Callback_Error(err_type); } void R_UART0_Callback_Error(uint8_t err_type) { g_Uart0RxErr = err_type; /* Get error type */ }
© 2013 Renesas Electronics Corporation. All rights reserved.
エラー・フラグの読み出し
62
シリアル・ステータス・レジスタ01(SSR01) 通信ステータス,エラー発生状況を表示するレジスタ
© 2013 Renesas Electronics Corporation. All rights reserved.
トリガによるエラー・フラグのクリア
63
シリアル・フラグ・クリア・トリガ・レジスタ01(SIR 01) エラー・フラグをクリアするためのトリガ・レジスタ
1 1 1
フレーミング パリティ オーバラン
1 1 1 0 0 0
エラーフラグをクリア
© 2013 Renesas Electronics Corporation. All rights reserved.
送信のシーケンス
64
割り込み メイン
R_UART0_Receive() 1バイトデータの送信後、残りの送信回数と 送信メッセージのアドレスを通知
R_UART0_Interrupt_Send() 1バイトデータの送信
R_UART0_Callback_ReceiveEnd() 送信終了を通知
R_UART0_Interrupt_Send() 1バイトデータの送信
3回
© 2013 Renesas Electronics Corporation. All rights reserved.
UART0 データ送信関数
65
MD_STATUS R_UART0_Send(uint8_t* txbuf, uint16_t txnum) { MD_STATUS status = MD_OK; if (txnum < 1U) { status = MD_ARGERROR; } else { gp_Uart0TxAddress = txbuf; g_Uart0TxCnt = txnum; STMK0 = 1U; /* disable INTST0 interrupt */ TXD0 = *gp_Uart0TxAddress; gp_Uart0TxAddress++; g_Uart0TxCnt--; STMK0 = 0U; /* enable INTST0 interrupt */ } return (status); }
© 2013 Renesas Electronics Corporation. All rights reserved.
送信チャネルの転送クロックの設定
シリアル・データ・レジスタ00(SDR00) 下位8ビットは送信バッファ・レジスタ
66
TXD0 動作クロックの分周設定
© 2013 Renesas Electronics Corporation. All rights reserved.
送信完了割り込み処理
67
__interrupt void R_UART0_Interrupt_Send(void) { if (g_Uart0TxCnt > 0U) { TXD0 = *gp_Uart0TxAddress; gp_Uart0TxAddress++; g_Uart0TxCnt--; } else { R_UART0_Callback_SendEnd(); } } void R_UART0_Callback_SendEnd(void) { g_Uart0TxEnd = 1U; /* Set transmission end flag */ }
ルネサス エレクトロニクス株式会社 © 2013 Renesas Electronics Corporation. All rights reserved.
END