SCI の初期化(調歩同期式モード)
参照:RX63Nハードウェアマニュアル
http://resource.renesas.com/lib/jpn/online_docs/um/RX/RX63N_RX631_ja/?SCI#TOC_35_3_5
int initSCI0(void){
SYSTEM.PRCR.WORD = 0xA502;//プロテクト解除
SYSTEM.MSTPCRB.BIT.MSTPB31 = 0;//SCI0のモジュールストップ解除
SYSTEM.PRCR.WORD = 0xA500;//プロテクト設定
//トランスミットイネーブルビット(0:シリアル送信動作を禁止、1:許可)
SCI0.SCR.BIT.TE = 0;
//レシーブイネーブルビット(0:シリアル受信動作を禁止、1:許可)
SCI0.SCR.BIT.RE = 0;
//トランスミットインタラプトイネーブルビット(0:TXI割込み要求を禁止、1:許可)
SCI0.SCR.BIT.TIE = 0;
//レシーブインタラプトイネーブルビット(0:RXI及びERI割込み要求を禁止、1:許可)
SCI0.SCR.BIT.RIE = 0;
//トランスミットエンドインタラプトイネーブルビット
//(0:TEI割込み要求を禁止、1:許可)
SCI0.SCR.BIT.TEIE = 0;
//P20端子を周辺機能として利用(TXD0)
PORT2.PMR.BIT.B0 = 1;
//P20端子を周辺機能として利用(RXD0)
PORT2.PMR.BIT.B1 = 1;
//PFSWEビット書き込み禁止ビット(0:PFSWEビットへの書き込みを許可)
MPC.PWPR.BIT.B0WI = 0;
//PFSレジスタ書き込み許可ビット(1:PFSレジスタへの書き込みを許可)
MPC.PWPR.BIT.PFSWE = 1;
//端子機能制御レジスタの設定
MPC.P20PFS.BYTE = 0x0A;//TXD0を選択
MPC.P21PFS.BYTE = 0x0A;//RXD0を選択
//PFSレジスタ書き込み許可ビット(0:PFSレジスタへの書き込みを禁止)
MPC.PWPR.BIT.PFSWE = 0;
//PFSWEビット書き込み禁止ビット(1:PFSWEビットへの書き込みを禁止)
MPC.PWPR.BIT.B0WI = 1;
//クロックイネーブルビット
//調歩同期式の場合
//00:内蔵ボーレートジェネレータ(端子は入出力ポートとして利用可)
//01:内蔵ボーレートジェネレータ(SCKn端子からビットレートと同じ周波数のクロックを出力)
//1x:外部クロック(SCKn端子からビットレートの16倍の周波数のクロックを入力)
SCI0.SCR.BIT.CKE = 0;
//簡易I2Cモードセレクトビット
//00:シリアルインターフェースモード選択(01で簡易I2Cモード)
SCI0.SIMR1.BIT.IICM = 0;
//クロック位相選択ビット(0:クロック遅れなし)
SCI0.SPMR.BIT.CKPH = 0;
//クロック極性選択ビット(0:クロック極性反転なし)
SCI0.SPMR.BIT.CKPOL = 0;
//シリアルモードレジスタ
//クロック選択ビット(00:PCLK,01:PCLK/4,10:PCLK/16,11:PCLK/64)
SCI0.SMR.BIT.CKS = 0x01;
//マルチプロセッサモード(0:●マルチプロセッサ通信機能を禁止)
SCI0.SMR.BIT.MP = 0;
//ストップビットレングス(0:1ストップビット、1:2ストップビット)
SCI0.SMR.BIT.STOP = 0;
//パリティモード選択(0:偶数パリティで送受信)
SCI0.SMR.BIT.PM = 0;
//パリティ使用可否(0:パリティなし、1:パリティあり)
SCI0.SMR.BIT.PE = 0;
//キャラクタレングス(データ長)(0:8ビットで送受信)
SCI0.SMR.BIT.CHR = 0;
//コミュニケーションモード選択(0:調歩同期式、1:クロック同期式)
SCI0.SMR.BIT.CM = 0;
//スマートカードモードレジスタ
//スマートカードモード選択(0:シリアルコミュニケーション、1:スマートカード)
SCI0.SCMR.BIT.SMIF = 0;
//送受信データインバートビット(0:そのまま送受信、1:反転して送受信)
SCI0.SCMR.BIT.SINV = 0;
//0:LSBファースト、1:MSBファーストで送受信
SCI0.SCMR.BIT.SDIR = 0;
//シリアル拡張モードレジスタ(1ビット期間のクロックを選択)
//調歩同期クロック(0:外部クロック入力、1:TMRクロック入力)
SCI0.SEMR.BIT.ACS0 = 0;
//調歩同期基本クロック選択(0:クロック16サイクルが1ビット、1:クロック8サイクルが1ビット)
SCI0.SEMR.BIT.ABCS = 0;
//デジタルノイズフィルタ機能選択(0:無効、1:有効)
SCI0.SEMR.BIT.NFEN = 0;
//ビットレート及び周波数から設定(設定例)
SCI0.BRR = 38;
SCI0.SCR.BIT.TEIE = 0;
SCI0.SCR.BIT.MPIE = 0;
SCI0.SCR.BIT.RE = 1;
SCI0.SCR.BIT.TE = 1;
SCI0.SCR.BIT.RIE = 1;
SCI0.SCR.BIT.TIE = 0;
ICU.IPR[214].BIT.IPR = 10;//割込み優先度設定
ICU.IR[214].BIT.IR = 0;//割込みステータスフラグを初期化
ICU.IER[0x1A].BIT.IEN6 = 1;//割込み機能を許可
return 0;
}
//メモ
//調歩同期式は非同期通信であり、開始ビットと終了ビットが必要
参照:RX63Nハードウェアマニュアル
http://resource.renesas.com/lib/jpn/online_docs/um/RX/RX63N_RX631_ja/?SCI#TOC_35_3_5
int initSCI0(void){
SYSTEM.PRCR.WORD = 0xA502;//プロテクト解除
SYSTEM.MSTPCRB.BIT.MSTPB31 = 0;//SCI0のモジュールストップ解除
SYSTEM.PRCR.WORD = 0xA500;//プロテクト設定
//トランスミットイネーブルビット(0:シリアル送信動作を禁止、1:許可)
SCI0.SCR.BIT.TE = 0;
//レシーブイネーブルビット(0:シリアル受信動作を禁止、1:許可)
SCI0.SCR.BIT.RE = 0;
//トランスミットインタラプトイネーブルビット(0:TXI割込み要求を禁止、1:許可)
SCI0.SCR.BIT.TIE = 0;
//レシーブインタラプトイネーブルビット(0:RXI及びERI割込み要求を禁止、1:許可)
SCI0.SCR.BIT.RIE = 0;
//トランスミットエンドインタラプトイネーブルビット
//(0:TEI割込み要求を禁止、1:許可)
SCI0.SCR.BIT.TEIE = 0;
//P20端子を周辺機能として利用(TXD0)
PORT2.PMR.BIT.B0 = 1;
//P20端子を周辺機能として利用(RXD0)
PORT2.PMR.BIT.B1 = 1;
//PFSWEビット書き込み禁止ビット(0:PFSWEビットへの書き込みを許可)
MPC.PWPR.BIT.B0WI = 0;
//PFSレジスタ書き込み許可ビット(1:PFSレジスタへの書き込みを許可)
MPC.PWPR.BIT.PFSWE = 1;
//端子機能制御レジスタの設定
MPC.P20PFS.BYTE = 0x0A;//TXD0を選択
MPC.P21PFS.BYTE = 0x0A;//RXD0を選択
//PFSレジスタ書き込み許可ビット(0:PFSレジスタへの書き込みを禁止)
MPC.PWPR.BIT.PFSWE = 0;
//PFSWEビット書き込み禁止ビット(1:PFSWEビットへの書き込みを禁止)
MPC.PWPR.BIT.B0WI = 1;
//クロックイネーブルビット
//調歩同期式の場合
//00:内蔵ボーレートジェネレータ(端子は入出力ポートとして利用可)
//01:内蔵ボーレートジェネレータ(SCKn端子からビットレートと同じ周波数のクロックを出力)
//1x:外部クロック(SCKn端子からビットレートの16倍の周波数のクロックを入力)
SCI0.SCR.BIT.CKE = 0;
//簡易I2Cモードセレクトビット
//00:シリアルインターフェースモード選択(01で簡易I2Cモード)
SCI0.SIMR1.BIT.IICM = 0;
//クロック位相選択ビット(0:クロック遅れなし)
SCI0.SPMR.BIT.CKPH = 0;
//クロック極性選択ビット(0:クロック極性反転なし)
SCI0.SPMR.BIT.CKPOL = 0;
//シリアルモードレジスタ
//クロック選択ビット(00:PCLK,01:PCLK/4,10:PCLK/16,11:PCLK/64)
SCI0.SMR.BIT.CKS = 0x01;
//マルチプロセッサモード(0:●マルチプロセッサ通信機能を禁止)
SCI0.SMR.BIT.MP = 0;
//ストップビットレングス(0:1ストップビット、1:2ストップビット)
SCI0.SMR.BIT.STOP = 0;
//パリティモード選択(0:偶数パリティで送受信)
SCI0.SMR.BIT.PM = 0;
//パリティ使用可否(0:パリティなし、1:パリティあり)
SCI0.SMR.BIT.PE = 0;
//キャラクタレングス(データ長)(0:8ビットで送受信)
SCI0.SMR.BIT.CHR = 0;
//コミュニケーションモード選択(0:調歩同期式、1:クロック同期式)
SCI0.SMR.BIT.CM = 0;
//スマートカードモードレジスタ
//スマートカードモード選択(0:シリアルコミュニケーション、1:スマートカード)
SCI0.SCMR.BIT.SMIF = 0;
//送受信データインバートビット(0:そのまま送受信、1:反転して送受信)
SCI0.SCMR.BIT.SINV = 0;
//0:LSBファースト、1:MSBファーストで送受信
SCI0.SCMR.BIT.SDIR = 0;
//シリアル拡張モードレジスタ(1ビット期間のクロックを選択)
//調歩同期クロック(0:外部クロック入力、1:TMRクロック入力)
SCI0.SEMR.BIT.ACS0 = 0;
//調歩同期基本クロック選択(0:クロック16サイクルが1ビット、1:クロック8サイクルが1ビット)
SCI0.SEMR.BIT.ABCS = 0;
//デジタルノイズフィルタ機能選択(0:無効、1:有効)
SCI0.SEMR.BIT.NFEN = 0;
//ビットレート及び周波数から設定(設定例)
SCI0.BRR = 38;
SCI0.SCR.BIT.TEIE = 0;
SCI0.SCR.BIT.MPIE = 0;
SCI0.SCR.BIT.RE = 1;
SCI0.SCR.BIT.TE = 1;
SCI0.SCR.BIT.RIE = 1;
SCI0.SCR.BIT.TIE = 0;
ICU.IPR[214].BIT.IPR = 10;//割込み優先度設定
ICU.IR[214].BIT.IR = 0;//割込みステータスフラグを初期化
ICU.IER[0x1A].BIT.IEN6 = 1;//割込み機能を許可
return 0;
}
//メモ
//調歩同期式は非同期通信であり、開始ビットと終了ビットが必要
コメント
コメントを投稿