【经验分享】LPC11U68 SPI小雷区莫踩
一,文档简介
最近遇到一个客户在使用LPC11U68 SPI作为从机的时候,无法在MISO引脚输出波形,测试了SPI总线上的波形,可以看到主机给出的数据与波形都是正确的,唯独SPI从机没有反馈,具体波形如下:
1:SCLK, 2:SSEL, 3:MOSI, 4:MISO
所以可以肯定问题出在了SPI的从机侧,但是客户检查了他的代码,也没有发现什么特别的问题,代码也比较简单,大致如下:
Chip_IOCON_PinMuxSet(LPC_IOCON, 1, 29,(IOCON_FUNC1 | IOCON_MODE_INACT));
Chip_IOCON_PinMuxSet(LPC_IOCON, 0, 8,(IOCON_FUNC1 | IOCON_MODE_INACT));
Chip_IOCON_PinMuxSet(LPC_IOCON, 0, 9,(IOCON_FUNC1 | IOCON_MODE_INACT));
Chip_IOCON_PinMuxSet(LPC_IOCON, 0, 2,(IOCON_FUNC1 | IOCON_MODE_INACT));
pSSP = LPC_SSP0;
Chip_Clock_EnablePeriphClock(Chip_SSP_GetClockIndex(pSSP));
Chip_SSP_SetSSPClkDivider(pSSP, 1);
Chip_SYSCTL_PeriphReset(Chip_SSP_GetResetIndex(pSSP));
Chip_SSP_Set_Mode(pSSP, SSP_MODE_SLAVE);
Chip_SSP_SetFormat(pSSP, SSP_BITS_8, SSP_FRAMEFORMAT_SPI, SSP_CLOCK_MODE0);//SSP_CLOCK_CPHA0_CPOL0
Chip_SSP_SetBitRate(pSSP, 1000000);
Chip_SSP_Enable(pSSP);
while (1)
{
Chip_SSP_SendFrame(pSSP, 0x55);
while ((Chip_SSP_GetStatus(pSSP, SSP_STAT_RNE) == SET))
{
rDat = Chip_SSP_ReceiveFrame(pSSP);
}
}
那么到底是什么原因导致这样的问题呢?通过测试,也复现了客户的问题。 更多具体内容,请查看附件文档! |