Left Justified Audio Client Mode Operation
Use the following steps to set up the SPI module for the Left Justified Audio Client mode of operation:
- If using interrupts, disable the SPIx interrupts in the respective IECx register.
- Stop and reset the SPI module by clearing the ON bit (SPIxCON1[15]).
- Reset the SPIx Control Register 1, SPIxCON1.
- Clear the receive buffer.
- Clear the ENHBUF bit (SPIxCON1[0]) if using Standard Buffer mode or set the bit if using Enhanced Buffer mode.
- If using interrupts, the following additional steps are performed:
- Clear the SPIx interrupt flags/events in the respective IFSx register.
- Write the SPIx interrupt priority and sub-priority bits in the respective IPCx register.
- Set the SPIx interrupt enable bits in the respective IECx register.
- Clear the SPIROV bit (SPIxSTAT[6]).
- Write the desired settings in the SPIxCON1 register. The AUDMOD[1:0] bits
(SPIxCON1[25:24]) must be set to ‘
01
’ for Left Justified mode and the AUDEN bit (SPIxCON1[31]) must be set to ‘1
’ to enable the audio protocol. - Write the desired settings to the SPIxCON1 register:
- Set to Client mode, MSTEN (SPIxCON1[5]) =
0
. - Set Clock Polarity, CKP
(SPIxCON1[6]) =
0
. - Set Frame Polarity,
FRMPOL (SPIxCON1[5]) =
1
. - Set MODE[32,16] (SPIxCON1[11:10]) =
0
for 16-bit audio channel data. - Enable SPI operation by setting the ON bit (SPIxCON1[15]).
- Set to Client mode, MSTEN (SPIxCON1[5]) =
- Transmission (and reception) will start as soon as the host provides the BCLK and LRCK.
Left Justified Client Mode, 16-Bit Channel Data, 32-Bit Frame
/* The following code example will initialize the SPI1 Module in Left Justified Client mode. */
_SPI1RXIP = 4;
SPI1STATbits.SPIROV = 0; // clear the Overflow
SPI1CON1=0x81200400; // AUDEN=1, Left justified mode, stereo mode,
// FRMPOL = 1,16 bits/32 channel transfer,
SPI1IMSKbits.SPIRBFEN = 1; // SPI1 receive buffer full generates interrupt event
_SPI1RXIE = 1; // Enable interrupts
SPI1CON1bits.ENHBUF = 1;
SPI1CON1bits.ON = 1;
// from here, the device is ready to receive and transmit data