http://www.kumikomi.net/interface/editors/2011/04/6cd-romrx62n.php
mp3p_rx62n_hew.zip を RX63Nで動作させようとしたが、手間取ったので、記載しておきます。
要は、RSPI0.SPSR.BIT.SPRF,SPTEFビットが RX63Nで消えたのが問題で
ある人はRSPI0.SPSR.BIT.IDLNF ビットを流用していたので、真似てみたが、動きが怪しい。
やっぱり、IR(RSPI0,SPRI0) で見るしかないもんかというわけで、IR(RSPI0,SPRI0)をみるようにしてやっと動作確認できた。
初期化部は
/* CS#(PC0/SSLA1)をLにする(RSPI_CH=0のとき) */ static void CS_LOW() { PORTC.PODR.BIT.B0 = 0; } /* CS#(PC0/SSLA1)をHにする(RSPI_CH=0のとき) */ static void CS_HIGH() { PORTC.PODR.BIT.B0 = 1; } //#define INS (!PORT1.PIDR.BIT.B5) /* SD_CD(P15)カード検出(真:あり, 偽:なし) */ //#define WP 0 /* 書き込み禁止(真:禁止, 偽:許可) */ static void CS_INIT() { /* CS#,INS#,WP 各端子の初期化(RSPI_CH=0のとき) */ PORTC.PMR.BIT.B0 = 0; /* CS#=GPIO */ PORTC.PDR.BIT.B0 = 1; /* CS#=OUT */ PORTC.PODR.BIT.B0 = 1; /* CS#=H */ } void SPI_ATTACH() { SYSTEM.PRCR.WORD = 0xA502; MSTP(RSPI0)=0; SYSTEM.PRCR.WORD = 0xA500; PORTC.PMR.BIT.B5 = 0; PORTC.PMR.BIT.B6 = 0; PORTC.PMR.BIT.B7 = 0; MPC.PWPR.BIT.B0WI = 0; MPC.PWPR.BIT.PFSWE = 1; MPC.PC5PFS.BYTE = 13; /* RSPI RSPCKA */ MPC.PC6PFS.BYTE = 13; /* RSPI MOSIA */ MPC.PC7PFS.BYTE = 13; /* RSPI MISOA */ MPC.PWPR.BIT.PFSWE = 0; PORTC.ODR0.BYTE = 0; /* CMOS */ PORTC.ODR1.BYTE = 0; /* CMOS */ PORTC.PMR.BIT.B5 = 1; PORTC.PMR.BIT.B6 = 1; PORTC.PMR.BIT.B7 = 1; IPR(RSPI0,SPRI0)=0; IEN(RSPI0,SPRI0)=0; }送受信部(他3箇所も修正)
/* Receive a byte */ static BYTE rcvr_spi (void) { BYTE c; + IR(RSPI0,SPRI0)=0; RSPI0.SPDR = 0xFF; /* Send a 0xFF */ - while (!RSPI.SPSR.BIT.SPRF) ; /* Wait for end of transfer */ + while (!IR(RSPI0,SPRI0)) ; /* Wait for end of transfer */ return RSPI0.SPDR; /* Returen received byte */ }電源ON部
static void power_on (void) /* Enable SPI */ { CS_INIT(); /* Attach RSPI module to I/O pads */ SPI_ATTACH(); /* Initialize RSPI module */ RSPI0.SPCR.BYTE = 0; /* Stop SPI */ RSPI0.SPSR.BYTE = 0xa0; RSPI0.SPPCR.BYTE = 0x00; /* Fixed idle value, disable loop-back mode */ RSPI0.SPSCR.BYTE = 0; /* Disable sequence control */ RSPI0.SPDCR.BYTE = 0x20; /* SPLW=1 */ RSPI0.SPCMD0.WORD = 0x0700; /* LSBF=0, SPB=7, BRDV=0, CPOL=0, CPHA=0 */ RSPI0.SPBR.BYTE = (PCLK / 2 / CLK_SLOW )- 1; /* Bit rate */ - RSPI0.SPCR.BYTE = 0x49; /* Start SPI in master mode */ + RSPI0.SPCR.BYTE = 0xC9; /* Start SPI in master mode w/SPRIE */ RSPI0.SPCR2.BYTE = 0; /* */ }
TNRXA147AJ::Renesasからupdateが出てました。
返信削除RSPI0.SPSR.BYTE;/* TNRXA147AJ */
while (RSPI0.SPSR.BIT.IDLNF) ;
//while(!IR(RSPI0,SPRI0)) ;
//IR(RSPI0,SPRI0)=0;
SPSRをカラ読みしてからIDLNFビットを確認すればよいらしい。