cc1310 spi通信不成功
Hi,
我现在使用硬件SPI,调用SPI_transfer()函数发送数据时卡死,能帮忙解决一下吗。
还有就是,默认的代码里面SPI的pin配置如下:
CC1310_LAUNCHXL_SPI0_MOSI | PIN_INPUT_EN | PIN_PULLDOWN, /* SPI master out - slave in */
CC1310_LAUNCHXL_SPI0_MISO | PIN_INPUT_EN | PIN_PULLDOWN,
CC1310_LAUNCHXL_SPI0_CLK | PIN_INPUT_EN | PIN_PULLDOWN,
为什么要这样配置,没有配置输出,全是输入。
我的SPI代码如下:
static SPI_Handle spi_handle;
int spi_init(void)
{
SPI_Params spiParams;
SPI_init();
SPI_Params_init(&spiParams);
spi_handle = SPI_open(Board_SPI0, &spiParams);
if (!spi_handle) {
return false;
}
return true;
}
void spi_write_data(unsigned char data)
{
SPI_Transaction masterTransaction;
masterTransaction.count = 1;
masterTransaction.txBuf = (void *)&data;
masterTransaction.arg = NULL;
masterTransaction.rxBuf = NULL;
SPI_transfer(spi_handle, &masterTransaction);
}
请参考这边的SPI driver guide: http://software-dl.ti.com/dsps/dsps_public_sw/sdo_sb/targetcontent/tirtos/2_14_02_22/exports/tirtos_full_2_14_02_22/docs/doxygen/html/_s_p_i_c_c26_x_x_d_m_a_8h.html【与CC1310类似】
另外,在 Sensor Controller Studio--help section里,也有部分SPI例程
#include "Board.h" #include "spitext.h" #include <ti/drivers/spi/SPICC26XXDMA.h> #include <ti/drivers/SPI.h> #include <ti/drivers/spi/SPICC26XXDMA.h> #include <ti/drivers/dma/UDMACC26XX.h> static SPI_Handle spiHandle = NULL; /******************************************************************************* * @fn Spi_open * @brief Open the RTOS SPI driver * @param bitRate - transfer speed in bits/sec * @return true if success */ bool Spi_open(void) { SPI_Params spiParams; SPI_init(); /* Configure SPI as master */ SPI_Params_init(&spiParams); spiParams.bitRate = 1000000; spiParams.mode = SPI_MASTER; spiParams.transferMode = SPI_MODE_BLOCKING; spiParams.frameFormat = SPI_POL0_PHA0; /* Attempt to open SPI. */ spiHandle = SPI_open(Board_SPI0, &spiParams); return spiHandle != NULL; } uint8_t Spi_Read_Write(uint8_t data) { uint8_t data1; SPI_Transaction masterTransaction; masterTransaction.count = 1; masterTransaction.txBuf = &data; masterTransaction.rxBuf = &data1; masterTransaction.arg = NULL; SPI_transfer(spiHandle, &masterTransaction); return data1; } /******************************************************************************* * @fn Spi_close * * @brief Close the RTOS SPI driver * * @return none */ void Spi_close(void) { if (spiHandle != NULL) { // Close the RTOS driver SPI_close(spiHandle); spiHandle = NULL; } }
spi口是 8 9 10
感谢回复,看了你代码,跟我代码没有什么区别,就多了一个读数据的部分。
我使用了很久了,你可以用示波器看看数据,另外8,9 ,10的顺序不要搞错了
Hi
我发现没有配置MISO就会有这个问题,因为我不需要读,所以就没有配置。
看一下你pin confg那里怎么配置的。
不需要自己配置,默认配置了,调用Spi_open();,就可以发送和接受数据了。你用C:\ti\simplelink_cc13x0_sdk_1_30_00_06\examples\rtos\CC1310_LAUNCHXL\drivers\empty这个历程移植看看
用empty那个测试程序,发送数据的时候一样会卡死。
你那里有没有测试程序,发一个我试试。
你那里有没有测试程序,发一个我试试。
7128.1 CC1310_TEXT_UART_SPI.rar
非常感谢,SPI的初始化必须在一个线程里面,如果在main()函数里面的话就会有这种情况。