LM3S的SPI,用SPI读写TC72一直都不到数据,读时,在主模式下SCK有波形吗?设置如下。
// Enables a peripheral SSI0
SysCtlPeripheralEnable(SYSCTL_PERIPH_SSI0);
// Configures pin(s) for use by the SSI peripheral
// PA2 SSI0CLK(SSCK) PA4 SSI0RX(MISO) PA5 SSI0TX(MOSI)
GPIOPinTypeSSI(GPIO_PORTA_BASE,(GPIO_PIN_2 | GPIO_PIN_4 | GPIO_PIN_5));
// PA2 SSI0CLK(SSCK)
//GPIOPinTypeSSI(GPIO_PORTA_BASE, GPIO_PIN_2);
// PA4 SSI0RX(MISO)
//GPIOPinTypeSSI(GPIO_PORTA_BASE, GPIO_PIN_4);
// PA5 SSI0TX(MOSI)
//GPIOPinTypeSSI(GPIO_PORTA_BASE, GPIO_PIN_5);
// Disables the synchronous serial interface
SSIDisable(SSI0_BASE);
// Configure the SSI, 1MHZ
SSIConfigSetExpClk(SSI0_BASE, // Base
//SysCtlClockGet(), // SSIClk
20000000, // 5MHZ
SSI_FRF_MOTO_MODE_2, // Protocol
SSI_MODE_MASTER, // Mode
1000000, // BitRate
8 // DataWidth
);
// Enables the synchronous serial interface
SSIEnable(SSI0_BASE);
有用模块读写SPI EEPROM的吗?
此帖出自
小平头技术问答
第一:你的CS端是用的SSI的FSS吗?如果不是,这个会有可能影响你的数据发送。
怎么解释呢?咱们先看看函数给的发送函数是怎么编写的吧:
void
SSIDataPut(unsigned long ulBase, unsigned long ulData)
{
ASSERT((ulBase == SSI0_BASE) || (ulBase == SSI1_BASE));
ASSERT((ulData & (0xfffffffe << (HWREG(ulBase + SSI_O_CR0) &
SSI_CR0_DSS_M))) == 0);// 这个不管
while(!(HWREG(ulBase + SSI_O_SR) & SSI_SR_TNF)) //(重要)先等待缓冲区中的数据为空
{
}
HWREG(ulBase + SSI_O_DR) = ulData; // 再把数据发送出去!!!
}
这样的程序有可能发生这样的状况就是:你往外发送数据,用SSIDataPut函数,如果下一条指令是CS(无效),那么你的从芯片还没有接收到数据,你就把信号接收功能给断掉了。实际ARM还在发送信号,只是从芯片接收不到!!!
第二、接收函数之前进行了多少次发送。如果超过八次,则你的接收FIFO已经满了,SSIDataGet函数只是从FIFO中接收数据。你可以做个简单的测试,让你的RX和TX接在一起。然后用SSIDataPut发送8个字符,然后发送第九个字符的时候和前面八个不一样,你用SSIDataGet读取数据,只能读到前八个数据,第九个数据就丢失了。
如果这样还不行,我就没有太好的办法了。呵呵。
写的有些乱,自己领悟吧。
祝你早日调出来。
一周热门 更多>