现在CLK SIMO信号都是有的,CS也是有的,就是SOMI不正常,一直是高电平,而且rx读出来都是0x00
初始化程序是改自开发板:
//** Configures SPI Controller
static void SetUpSPI(void)
[
unsigned char cs = 0x20;//0x04;******************
unsigned char dcs = 0x20;//0x04;******************
unsigned int val = SIMO_SOMI_CLK_CS5;
SPIReset(SOC_SPI_0_REGS);
SPIOutOfReset(SOC_SPI_0_REGS);
SPIModeConfigure(SOC_SPI_0_REGS, SPI_MASTER_MODE);
SPIClkConfigure(SOC_SPI_0_REGS, 150000000, 1000000, SPI_DATA_FORMAT0);//SCLK原为1M
SPIPinControl(SOC_SPI_0_REGS, 0, 0, &val);
SPIDefaultCSSet(SOC_SPI_0_REGS, dcs);
/* Configures SPI Data Format Register */
SPIConfigDataFmtReg(SPI_DATA_FORMAT0);
/* Selects the SPI Data format register to used and Sets CSHOLD
* to assert CS pin(line)
*/
SPIDat1Config(SOC_SPI_0_REGS, (SPI_CSHOLD | SPI_DATA_FORMAT0), cs);
/* map interrupts to interrupt line INT1 */
SPIIntLevelSet(SOC_SPI_0_REGS, SPI_RECV_INTLVL | SPI_TRANSMIT_INTLVL);
/* Enable SPI communication */
SPIEnable(SOC_SPI_0_REGS);
]
//** Configures Data Format register of SPI
static void SPIConfigDataFmtReg(unsigned int dataFormat)
[
/* Configures the polarity and phase of SPI clock */
SPIConfigClkFormat(SOC_SPI_0_REGS,(SPI_CLK_POL_HIGH | SPI_CLK_INPHASE),dataFormat);//SPI_CLK_POL_HIGH SPI_CLK_OUTOFPHASE
//SPIConfigClkFormat(SOC_SPI_0_REGS,(SPI_CLK_POL_LOW | SPI_CLK_INPHASE),dataFormat);
/* Configures SPI to transmit MSB bit First during data transfer */
SPIShiftM***First(SOC_SPI_0_REGS, dataFormat);
/* Sets the Charcter length */
SPICharLengthSet(SOC_SPI_0_REGS, CHAR_LENGTH, dataFormat);
]
//** Enables SPI Transmit and Receive interrupt.** Deasserts Chip Select line.
static void SpiTransfer(void)
[
SPIIntEnable(SOC_SPI_0_REGS, (SPI_RECV_INT | SPI_TRANSMIT_INT));
while(flag);
flag = 1;
/* Deasserts the CS pin(line) */
SPIDat1Config(SOC_SPI_0_REGS, SPI_DATA_FORMAT0, 0x20);
]
//** Data transmission and receiption SPIIsr
void SPIIsr(void)
[
unsigned int intCode = 0;
IntEventClear(SYS_INT_SPI0_INT);
intCode = SPIInterruptVectorGet(SOC_SPI_0_REGS);
while (intCode)
[
if(intCode == SPI_TX_BUF_EMPTY)
[
SPITransmitData1(SOC_SPI_0_REGS, tx_data);
SPIIntDisable(SOC_SPI_0_REGS, SPI_TRANSMIT_INT);
]
if(intCode == SPI_RECV_FULL)
[
rx_data = (short)SPIDataReceive(SOC_SPI_0_REGS);
flag = 0;
SPIIntDisable(SOC_SPI_0_REGS, SPI_RECV_INT);
]
intCode = SPIInterruptVectorGet(SOC_SPI_0_REGS);
]
]