IS31IO8972 EVB user guide
APPENDIX Ⅰ: Basic APIs for accessing SPI mode (with CS8961)
void SetSPI()
{
XFR_PADMOD0 = 0x80; // SPI_MOD: P72=SCS, P73=MOSI, P74=MISO, P75=MSCK
SPICR = 0x7C; // SPIE=0, SPIEN, MSTR, CPOL=1, CPHA=1, SCKE=1, -, -
SPIMR = 0x03; // 1Byte INT(polling flag), SCK=SYSCLK/8, MSB first
}
//------------------------------------------------------------------------------
// read one byte
uchar SPI_read_1(uchar addr)
{
uchar dout;
SPIMR |= 0x20; // clear FIFO
SPIMR &= 0xDF;
SPIST &= 0x7F; // clear SSPIF
P7
&= 0xFB; // P72: SCS low
SPIDATA = 0x23; // "read" instruction
while ((SPIST & 0x80) == 0x00){}; SPIST &= 0x7F; // wait and clear SSPIF
dout = SPIDATA;
SPIDATA = addr;
while ((SPIST & 0x80) == 0x00){}; SPIST &= 0x7F; // wait and clear SSPIF
dout = SPIDATA;
SPIDATA = 0x55; // dummy
while ((SPIST & 0x80) == 0x00){}; SPIST &= 0x7F; // wait and clear SSPIF
dout = SPIDATA;
P7
|= 0x04; // P72: SCS high
return dout;
}
//------------------------------------------------------------------------------
// read n bytes starting from remote_addr
void SPI_read_n(uchar remote_addr, uchar n, uchar* rd_buffer)
{
uchar tmp;
SPIMR |= 0x20; // clear FIFO
SPIMR &= 0xDF;
SPIST &= 0x7F; // clear SSPIF
P7
&= 0xFB; // P72: SCS low
SPIDATA = 0x23; // "read" instruction
while ((SPIST & 0x80) == 0x00){}; SPIST &= 0x7F; // wait and clear SSPIF
tmp = SPIDATA;
SPIDATA = remote_addr;
while ((SPIST & 0x80) == 0x00){}; SPIST &= 0x7F; // wait and clear SSPIF
tmp = SPIDATA;
while(n>0)
{
SPIDATA = 0x55; // dummy
while ((SPIST & 0x80) == 0x00){}; SPIST &= 0x7F; // wait and clear SSPIF
*rd_buffer = SPIDATA;
rd_buffer++;
n--;
}
P7
|= 0x04; // P72: SCS high
}
//------------------------------------------------------------------------------
// bit modify
void SPI_bit_modify(uchar addr, uchar mask, uchar din)
{
uchar i;
SPIMR |= 0x20; // clear FIFO
SPIMR &= 0xDF;
SPIST &= 0x7F; // clear SSPIF
P7
&= 0xFB; // P72: SCS low
SPIDATA = 0x25; // "bit modify" instruction
while ((SPIST & 0x80) == 0x00){}; SPIST &= 0x7F; // wait and clear SSPIF
SPIDATA = addr;
while ((SPIST & 0x80) == 0x00){}; SPIST &= 0x7F; // wait and clear SSPIF
Integrated Silicon Solution, Inc. – www.issi.com
Rev. A, 14/03/2019
11
Need help?
Do you have a question about the IS31IO8972 EVB and is the answer not in the manual?
Questions and answers