RX130 調歩同期式シリアル受信割込みできない

CS+ マイコンRX130でシリアル通信の受信を行っていますが、受信割込みが発生しないため、行き詰ってしまったので誰かアドバイスお願いします。

設定

マイコンクロック32MHz、ボーレート19200bps、パリティなし、ストップビット1bit データ長8bitで

下記のように、設定をコード自動生成で作成しました。

void R_SCI1_Create(void)
{
  /* Cancel SCI1 module stop state */
  MSTP(SCI1) = 0U;

  /* Set interrupt priority */
  IPR(SCI1, ERI1) = _0F_SCI_PRIORITY_LEVEL15;

   /* Clear the control register */
   SCI1.SCR.BYTE = 0x00U;

   /* 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 = _01_SCI_CLOCK_PCLK_4 | _00_SCI_STOP_1 | _00_SCI_PARITY_DISABLE | _00_SCI_DATA_LENGTH_8 |
            _00_SCI_MULTI_PROCESSOR_DISABLE | _00_SCI_ASYNCHRONOUS_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 = _00_SCI_LOW_LEVEL_START_BIT | _00_SCI_NOISE_FILTER_DISABLE | _00_SCI_16_BASE_CLOCK |
            _00_SCI_BAUDRATE_SINGLE | _00_SCI_BIT_MODULATION_DISABLE;

   /* Set bitrate */
   SCI1.BRR = 0x0CU;

   /* Set RXD1 pin */
   MPC.P30PFS.BYTE = 0x0AU;
   PORT3.PMR.BYTE |= 0x01U;

   /* Set TXD1 pin */
   MPC.P26PFS.BYTE = 0x0AU;
   PORT2.PODR.BYTE |= 0x40U;
   PORT2.PDR.BYTE |= 0x40U;
   PORT2.PMR.BYTE |= 0x40U;

}

下記受信割込み処理内にブレークポイントを設置して、割込みが入ることを確認使用としたが、受信割込みも、受信エラー割込みには

RXD1端子に波形入力があることを確認したが、下記割込み処理内に入らない。何か足らない設定等がありますでしょうか。

教えてください。

#if FAST_INTERRUPT_VECTOR == VECT_SCI1_RXI1
#pragma interrupt r_sci1_receive_interrupt(vect=VECT(SCI1,RXI1),fint)
#else
#pragma interrupt r_sci1_receive_interrupt(vect=VECT(SCI1,RXI1))
#endif
static void r_sci1_receive_interrupt(void)
{
      if (g_sci1_rx_length > g_sci1_rx_count)
      {
             *gp_sci1_rx_address = SCI1.RDR;
             gp_sci1_rx_address++;
             g_sci1_rx_count++;
      }
}

#if FAST_INTERRUPT_VECTOR == VECT_SCI1_ERI1
#pragma interrupt r_sci1_receiveerror_interrupt(vect=VECT(SCI1,ERI1),fint)
#else
#pragma interrupt r_sci1_receiveerror_interrupt(vect=VECT(SCI1,ERI1))
#endif
static void r_sci1_receiveerror_interrupt(void)
{
      uint8_t err_type;

      /* Clear overrun, framing and parity error flags */
      err_type = SCI1.SSR.BYTE;
      err_type &= 0xC7U;
      err_type |= 0xC0U;
      SCI1.SSR.BYTE = err_type;
}

Parents
  • 返信ありがとうございます。

    PWPRの設定は最初に以下のように設定しております。

    MPC.PWPR.BIT.B0WI = 0U;
    MPC.PWPR.BIT.PFSWE = 1U;

    /* Initialize non-existent pins */
    PORT0.PDR.BYTE = 0x07U;
    PORT1.PDR.BYTE = 0x03U;
    PORT2.PDR.BYTE = 0x3CU;
    PORT3.PDR.BYTE = 0x08U;
    PORT5.PDR.BYTE = 0xCFU;
    PORTA.PDR.BYTE = 0x80U;
    PORTC.PDR.BYTE = 0x03U;
    PORTD.PDR.BYTE = 0xF8U;
    PORTE.PDR.BYTE = 0xC0U;
    PORTH.PDR.BYTE = 0xF0U;
    PORTJ.PDR.BYTE = 0x3DU;

    /* Set peripheral settings */
    R_CGC_Create();
    R_IWDT_Create();
    R_PORT_Create();
    R_SCI1_Create();

    /* Disable writing to MPC pin function control registers */
    MPC.PWPR.BIT.PFSWE = 0U;
    MPC.PWPR.BIT.B0WI = 1U;

    受信動作の許可や、受信割り込みの許可は、他では実施していません。

Reply
  • 返信ありがとうございます。

    PWPRの設定は最初に以下のように設定しております。

    MPC.PWPR.BIT.B0WI = 0U;
    MPC.PWPR.BIT.PFSWE = 1U;

    /* Initialize non-existent pins */
    PORT0.PDR.BYTE = 0x07U;
    PORT1.PDR.BYTE = 0x03U;
    PORT2.PDR.BYTE = 0x3CU;
    PORT3.PDR.BYTE = 0x08U;
    PORT5.PDR.BYTE = 0xCFU;
    PORTA.PDR.BYTE = 0x80U;
    PORTC.PDR.BYTE = 0x03U;
    PORTD.PDR.BYTE = 0xF8U;
    PORTE.PDR.BYTE = 0xC0U;
    PORTH.PDR.BYTE = 0xF0U;
    PORTJ.PDR.BYTE = 0x3DU;

    /* Set peripheral settings */
    R_CGC_Create();
    R_IWDT_Create();
    R_PORT_Create();
    R_SCI1_Create();

    /* Disable writing to MPC pin function control registers */
    MPC.PWPR.BIT.PFSWE = 0U;
    MPC.PWPR.BIT.B0WI = 1U;

    受信動作の許可や、受信割り込みの許可は、他では実施していません。

Children
No Data