优化SPI通信

This commit is contained in:
SEEKFREE_BUDING
2022-11-04 18:46:12 +08:00
parent d58a6d77a1
commit 72cc841e66
2 changed files with 9 additions and 14 deletions

View File

@@ -1239,17 +1239,9 @@ IFX_INLINE void IfxQspi_writeMixedDataTransmitFifo(Ifx_QSPI *qspi, uint32 mixEnt
qspi->MIXENTRY.U = mixEntryVal;
}
extern uint8 spi_mosi_data_not;
IFX_INLINE void IfxQspi_writeTransmitFifo(Ifx_QSPI *qspi, uint32 data)
{
if(spi_mosi_data_not)
{
qspi->DATAENTRY[0].U = ~data;
}
else
{
qspi->DATAENTRY[0].U = data;
}
}

View File

@@ -28,7 +28,7 @@
#define MAX_BAUD 50000000
uint8 spi_mosi_data_not;
uint8 spi_not[4] = {0};
void spi_mux(SPIN_enum spi_n, SPI_PIN_enum sck_pin, SPI_PIN_enum mosi_pin, SPI_PIN_enum miso_pin, SPI_PIN_enum cs_pin, IfxQspi_SpiMaster_Pins *set_pin, IfxQspi_SpiMaster_Output *set_cs)
{
@@ -313,9 +313,9 @@ void spi_init(SPIN_enum spi_n, SPI_PIN_enum sck_pin, SPI_PIN_enum mosi_pin, SPI_
MasterChConfig.sls.output = SlsoPin;
IfxQspi_SpiMaster_initChannel(&MasterChHandle, &MasterChConfig);
if(mosi_pin == SPI2_MOSI_P13_2 || mosi_pin == SPI3_MOSI_P22_2)
if((mosi_pin == SPI2_MOSI_P13_2 && spi_n == SPI_2) || (mosi_pin == SPI3_MOSI_P22_2 && spi_n == SPI_2))
{
spi_mosi_data_not = 1;
spi_not[spi_n] = 1;
}
}
@@ -373,8 +373,8 @@ void spi_mosi(SPIN_enum spi_n, SPI_PIN_enum cs_pin, uint8 *modata, uint8 *midata
len -= 1;
while(i < len)
{
IfxQspi_writeTransmitFifo(moudle, *modata++);
if(spi_not[spi_n]) IfxQspi_writeTransmitFifo(moudle, ~(*modata++));
else IfxQspi_writeTransmitFifo(moudle, (*modata++));
if(midata)
{
while(moudle->STATUS.B.RXFIFOLEVEL == 0);
@@ -388,7 +388,10 @@ void spi_mosi(SPIN_enum spi_n, SPI_PIN_enum cs_pin, uint8 *modata, uint8 *midata
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>һ<EFBFBD><D2BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
if(continuous) IfxQspi_writeBasicConfigurationEndStream(moudle, bacon.U);
IfxQspi_writeTransmitFifo(moudle, *modata);
if(spi_not[spi_n]) IfxQspi_writeTransmitFifo(moudle, ~(*modata));
else IfxQspi_writeTransmitFifo(moudle, *modata);
while(moudle->STATUS.B.TXFIFOLEVEL != 0);
if(midata)