マイコン初心者です。初めて投稿します。
RX660の調歩同期式シリアル通信を行うためにRTSの Hi/Lo で送信制御をしようとしています。しかし、初期化の際にRTSをLo出力しようと、void R_Config_SCI1_Create_UserInit(void)の関数内にSCI1.SCR.BIT.RE = 1U; を追加したところ、RTSの信号がHi/Loを繰り返すという現象が起きております。Low固定の予想でしたが、繰り替えす原因が不明なため、助けていただけないでしょうか。
環境はCS+(V9.09)とスマート・コンフィグレータ(V1.02)で生成したコードをE2 Liteで書き込んで使っています。
以下初期化部分<Config_SCI1.c>void R_Config_SCI1_Create(void){ /* Cancel SCI stop state */ MSTP(SCI1) = 0U;
/* Set interrupt priority */ IPR(SCI1, RXI1) = _0F_SCI_PRIORITY_LEVEL15; IPR(SCI1, TXI1) = _0F_SCI_PRIORITY_LEVEL15;
/* Clear the control register */ SCI1.SCR.BYTE = 0x00U;
/* Set TXD1 pin */ MPC.P16PFS.BYTE = 0x0AU; PORT1.PODR.BYTE |= 0x40U; PORT1.PDR.BYTE |= 0x40U;
/* Set RXD1 pin */ MPC.P15PFS.BYTE = 0x0AU; PORT1.PMR.BYTE |= 0x20U;
/* Set clock enable */ SCI1.SCR.BYTE = _00_SCI_INTERNAL_SCK_UNUSED;
/* Clear the SIMR1.IICM, SPMR.CKPH, and CKPOL bit, and set SPMR */ SCI1.SIMR1.BIT.IICM = 0U; SCI1.SPMR.BYTE = _00_SCI_RTS | _00_SCI_CLOCK_NOT_INVERTED | _00_SCI_CLOCK_NOT_DELAYED;
/* Set control registers */ SCI1.SMR.BYTE = _00_SCI_CLOCK_PCLK | _00_SCI_MULTI_PROCESSOR_DISABLE | _00_SCI_STOP_1 | _00_SCI_PARITY_DISABLE | _00_SCI_DATA_LENGTH_8 | _00_SCI_ASYNCHRONOUS_OR_I2C_MODE; SCI1.SCMR.BYTE = _00_SCI_SERIAL_MODE | _00_SCI_DATA_INVERT_NONE | _00_SCI_DATA_LSB_FIRST | _10_SCI_DATA_LENGTH_8_OR_7 | _62_SCI_SCMR_DEFAULT; SCI1.SEMR.BYTE = _02_SCI_INSTANT_TRANSMIT_ENABLE | _00_SCI_BIT_MODULATION_DISABLE | _00_SCI_DEPEND_BGDM_ABCS | _00_SCI_16_BASE_CLOCK | _00_SCI_NOISE_FILTER_DISABLE | _00_SCI_BAUDRATE_SINGLE | _00_SCI_LOW_LEVEL_START_BIT; SCI1.SPTR.BYTE = _00_SCI_IN_SIGNAL_NOT_INVERT | _00_SCI_OUT_SIGNAL_NOT_INVERT | _00_SCI_RECEIVE_TIME_NOT_ADJUST | _00_SCI_TRANSMIT_TIME_NOT_ADJUST | _03_SCI_SPTR_DEFAULT;
/* Set bit rate */ SCI1.BRR = 0xC2U;
/* Set RTS1# pin */ MPC.P14PFS.BYTE = 0x0BU; PORT1.PMR.BYTE |= 0x10U;
R_Config_SCI1_Create_UserInit();}
<Config_SCI1_user.c>void R_Config_SCI1_Create_UserInit(void){ /* Start user code for user init. Do not edit comment generated here */ SCI1.SCR.BIT.RE = 1U; /* End user code. Do not edit comment generated here */}
わわいです
> RTSの信号がHi/Loを繰り返すという現象が起きております。
そもそも、RTSという信号は、受信可能になるとLowになる信号ってことですんで、それで正常な動作なんではないでしょうか。
Highになって困るということならば、受信可能にした後に、RTSを有効にするとかする必要があるのでは。
RTS(P14)がH/L繰り返している時、RXD(P15)に何か信号が入っていないでしょうか。(有効な通信ではなく、偽パルスの様な信号。)
可能であれば、P15の波形を見てみてください。外部から信号を入れなければ、Hをキープしているはずです。(通信相手のTXD以外で)回路的に、P15につながっている信号はないか。(P14の立ち下がりエッジ→P15に信号が回り込む様な回路上のパスが存在しないでしょうか。)
Yamamoto様、わわい様、tf様
回答ありがとうございます。
私自身が RTSの使い方等を勘違いしていた部分もあったので、
もう一度マニュアル、コード等見直してみます。
ご教授頂きありがとうございます!!