RX65N の RSPI の受信方法

こんにちはNAKAといいます。あんぽんたんです。

RL78F15で使ってたSPIデバイス(下記ごくふつーな感じ)をRX65N(GR-ROSE)で使おうと思った

のですが、複数バイト読み込みの1バイト目だけが読めません!!

無理やり読み込みを繰り返し、オシロで観測してますが、書き込みはできていて、デバイスから波形も

ちゃんと出ています。(一番下オシロ絵みたいな感じ)

何かアドバイス頂けたら嬉しいです!

使ったデバイスはこんな感じ

①まずRSPIを初期化して (割込みも使いません。)

//***********************************************************************
// 関数名 : fn_Init_RSPI1(void)
// 動作 : SPI1の初期化   
// 引数 : 
// 作成 : NAKA  21.04.27
// **********************************************************************
void fn_Init_RSPI1(void)
{
volatile unsigned char dummy;

    MSTP(RSPI1) = 0; //モジュール「ストップ解除
    RSPI1.SPCR.BIT.SPE = 0;     //SPI動作停止

    RSPI1.SPPCR.BYTE = 0x00; //0x00:MOSIの最後出力は保持?  は0x20:MOSIの最後の出力は"L"?
    RSPI1.SPDCR.BYTE = 0x40; //バイトアクセス
    RSPI1.SPCMD0.WORD = 0x0400;//奇数エッジでデータサンプル、偶数エッジでデータ変化 8bit

    RSPI1.SPDCR2.BYTE = 0x00;//スワップ無

    /* Set RSPCKB pin */
    MPC.PE5PFS.BYTE = 0x0D;
    PORTE.ODR1.BYTE &= 0xFB;
    PORTE.PMR.BYTE |= 0x20;

    /* Set MOSIB pin */
    MPC.PE6PFS.BYTE = 0x0D;
    PORTE.ODR1.BYTE &= 0xEF;
    PORTE.PMR.BYTE |= 0x40;

    /* Set MISOB pin */
    MPC.PE7PFS.BYTE = 0x0D;
    PORTE.ODR1.BYTE &= 0xBF;
    PORTE.PMR.BYTE |= 0x80;

  RSPI1.SPCR.BIT.SPMS = 1; //★3線式クロック同期モード
  RSPI1.SPCR.BIT.MSTR = 1; //★マスターモード
    dummy = RSPI1.SPCR.BYTE; 
 
    dummy = RSPI1.SPSR.BYTE;
    RSPI1.SPSR.BYTE = 0xA0; //エラ-クリア

  RSPI1.SPCR.BIT.SPE = 1; //SPI動作開始
 
  //ビットレート調整
  RSPI1.SPBR = 3;  //PCLK(60MHz)
  RSPI1.SPCMD0.BIT.BRDV = 0; //3_0 = 1/8    60Mhz/8=  7.5Mbps   
}

②受信関数
/************************************************/
/* SPI1 1バイト受信   */
/************************************************/
unsigned char ReadSPI1(void)
{
 RSPI1.SPDR.BYTE.HH = 0xFF ;   //ダミー書き込み バイトアクセス
 while(RSPI1.SPSR.BIT.IDLNF){__nop();}  //RSPIが転送状態  
 return (unsigned char)(RSPI1.SPDR.BYTE.HH);
}

③SFR(特殊レジスタ)読み込み関数
/*******************************************************************************
// 関数名 : SFR_RD(unsigned short ADD, unsigned char LEN, unsigned char *RdDATA)
// 動作 : CANコントローラSFRへの読み込み
// 引数 : ADD→アドレス
//   : LEN→データ長
//   : RdDATA→データ
// 戻り値 : 無し
// 作成 : NAKA  21.04.27
// ****************************************************************************/
void SFR_RD(unsigned short ADD, unsigned char LEN, unsigned char *RdDATA)
{
unsigned char i;
 FD_CS = 0;     //CSをL 開始
 WriteSPI1(0x30 | (ADD >> 8));   //WRITE コマンド+MSBアドレス
 WriteSPI1((unsigned char)(ADD & 0x00FF)); //LSBアドレス
 for(i=0;i<LEN;i++)
 {
  *RdDATA++ = ReadSPI1();  
 }
 FD_CS = 1;     //CSをH 終了 
}

SFR(特殊レジスタ)設定の設定のところで 0x0F,0x0F,0x3E,0x00を”C1NBTCFG ”レジスタ(アドレス)
に書き込んでみますが

最初のバイトだけ読めない!!!!(T_T)

よろしくお願いいたします。

  • Higetakaさま

    NoMaYさま

    NAKAです。

    すみませ~ん! お礼をわすれてました! 空読みして、CSをちゃんと通信が終りをフラグで確認してから”H”にしたら動きました。久々にかふぇルネにお邪魔してお礼を忘れていたことに気づきました!!(^^)/

    P.S.

    後輩がGR-ROSEでRT-OSをやるみたい!いつもベタ書きしかしないNAKAに聞かれたらどうしよう!!

    やさしく、たよりになる NoMaYさまに、聞いちゃおっかなぁ~

    その節はよろしくお願いいたします。......優しくしてね!チュッ!