スキップしてメイン コンテンツに移動

SCI の初期化(調歩同期式モード):RX63N

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;
}

//メモ
//調歩同期式は非同期通信であり、開始ビットと終了ビットが必要

コメント

このブログの人気の投稿

RIIC0(I2C通信設定) : RX63N

#include "iodefine.h" int initRIIC0(void) {  //I2Cモジュールストップ状態の解除  SYSTEM.PRCR.WORD = 0xA502;//モジュールストップレジスタのプロテクト解除  SYSTEM.MSTPCRB.BIT.MSTPB21 = 0;//I2Cモジュールストップ状態の解除  SYSTEM.PRCR.WORD = 0xA500;//モジュールストップレジスタのプロテクト  // set port direction to input  PORT1.PDR.BIT.B3 = 0;// SDA0  PORT1.PDR.BIT.B2 = 0;// SCL0  // set port mode as peripheral device  PORT1.PMR.BIT.B3 = 1;// SDA0  PORT1.PMR.BIT.B2 = 1;// SCL0  // select pin function as RIIC  MPC.PWPR.BIT.B0WI = 0;  MPC.PWPR.BIT.PFSWE = 1;  MPC.P13PFS.BIT.PSEL = 0x0F;// SDA0  MPC.P12PFS.BIT.PSEL = 0x0F;// SCL0  MPC.PWPR.BIT.PFSWE = 0;  MPC.PWPR.BIT.B0WI = 1;  // オープンドレイン設定 外部プルアップ抵抗で出力決めるなら必要  PORT1.ODR0.BIT.B6 = 1;  PORT1.ODR0.BIT.B4 = 1;  //入力プルアップ有効  //PORT1.PCR.BIT.B3 = 1;  //PORT1.PCR.BIT.B2 = 1;  /* RIIC disable for RIIC initial */  RIIC0.ICCR1.BIT.ICE = 0;  RIIC0.ICCR1.BIT.IICR...

IRQ 外部割込みサンプル : RX63N

#include "iodefine.h" #include "global.h" #include "vect.h" extern MAIN_STATE main_state; extern MODE_STATE mode_state; extern unsigned char volume; void initIRQ(void); void initIRQ(void){  int i;  ICU.IER[8].BYTE = 0x00;  //デジタルフィルタ 許可ビット  ICU.IRQFLTE0.BYTE = 0x00;  ICU.IRQFLTC0.WORD = 0xFFFF;//64clockに1回  //デジタルフィルタ 許可ビット IRQ0-7  ICU.IRQFLTE0.BYTE = 0xFF;  PORTD.PDR.BYTE = 0;  PORTD.PMR.BYTE = 0x00;//ポートモードレジスタ(0:汎用入出力ポート, 1:周辺機能)  //マルチファンクションピンコントローラ  MPC.PWPR.BYTE &= ~0x80;//PFSプロテクト解除  MPC.PWPR.BYTE |= 0x40;  MPC.PD0PFS.BYTE = 0x40;  MPC.PD1PFS.BYTE = 0x40;  MPC.PD2PFS.BYTE = 0x40;  MPC.PD3PFS.BYTE = 0x40;  MPC.PD4PFS.BYTE = 0x40;  MPC.PD5PFS.BYTE = 0x40;  MPC.PD6PFS.BYTE = 0x40;  MPC.PD7PFS.BYTE = 0x40;  MPC.PWPR.BYTE &= ~0x40;  MPC.PWPR.BYTE |= 0x80;//PFSプロテクト設定  ICU.IRQCR[0].BIT.IRQMD = 1;  ICU.IRQCR[1].BIT.IRQMD = 1;  ICU.IRQCR[2].BIT.IRQMD =...