Hello friend,
I want to use gpio as CS because I have 3 SPI devices. I use frdmkw38_dspi_polling_b2b_transfer_master project. But the CS (PTA19) pin always high. I cannot control it to low. I modified some code as follows. Can anyone guide me? Thank you in advance.
Best wishes
Ted Wu
pin_mux.c
void BOARD_InitPins(void)
{
...
/* PORTA16 (pin 4) is configured as SPI1_SOUT */
PORT_SetPinMux(PORTA, 16U, kPORT_MuxAlt2);
/* PORTA17 (pin 5) is configured as SPI1_SIN */
PORT_SetPinMux(PORTA, 17U, kPORT_MuxAlt2);
/* PORTA18 (pin 6) is configured as SPI1_SCK */
PORT_SetPinMux(PORTA, 18U, kPORT_MuxAlt2);
/* PORTA19 (pin 7) is configured as SPI1_PCS0 */
PORT_SetPinMux(PORTA, 19U, kPORT_MuxAsGpio);
PORTA->PCR[19] = ((PORTA->PCR[19] &
/* Mask bits to zero which are setting */
(~(PORT_PCR_SRE_MASK | PORT_PCR_ISF_MASK)))
/* Slew Rate Enable: Fast slew rate is configured on the corresponding pin, if the pin is
* configured as a digital output. */
| PORT_PCR_SRE(kPORT_FastSlewRate));
....
}
dspi_polling_b2b_transfer_master.c
int main(void)
{
BOARD_InitPins();
BOARD_BootClockRUN();
BOARD_InitDebugConsole();
/* Define the init structure for the output pin */
gpio_pin_config_t gpio_1_config = {
kGPIO_DigitalOutput,
1,
};
...
srcClock_Hz = DSPI_MASTER_CLK_FREQ;
DSPI_MasterInit(EXAMPLE_DSPI_MASTER_BASEADDR, &masterConfig, srcClock_Hz);
/* Init output CS GPIO. */
GPIO_PinInit(GPIOA, 19U, &gpio_1_config);
while (1)
{
...
/* Start master transfer, send data to slave */
masterXfer.txData = masterTxData;
masterXfer.rxData = NULL;
masterXfer.dataSize = TRANSFER_SIZE;
masterXfer.configFlags = kDSPI_MasterCtar0;
GPIO_PinWrite(GPIOA, 1U << 19, 0);
DSPI_MasterTransferBlocking(EXAMPLE_DSPI_MASTER_BASEADDR, &masterXfer);
GPIO_PinWrite(GPIOA, 1U << 19, 1);
...
}