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