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);
}
Viki Shi:
请参考这边的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例程
user4988634:
回复 Viki Shi:
#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;/******************************************************************************* * @fnSpi_open * @briefOpen the RTOS SPI driver * @parambitRate - transfer speed in bits/sec * @returntrue 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; }/******************************************************************************* * @fnSpi_close * * @briefClose the RTOS SPI driver * * @returnnone */ void Spi_close(void) {if (spiHandle != NULL){// Close the RTOS driverSPI_close(spiHandle);spiHandle = NULL;} }spi口是 8 9 10
Dong Chen7:
回复 user4988634:
感谢回复,看了你代码,跟我代码没有什么区别,就多了一个读数据的部分。
user4988634:
回复 Dong Chen7:
我使用了很久了,你可以用示波器看看数据,另外8,9 ,10的顺序不要搞错了
Dong Chen7:
回复 user4988634:
Hi
我发现没有配置MISO就会有这个问题,因为我不需要读,所以就没有配置。
Dong Chen7:
回复 user4988634:
看一下你pin confg那里怎么配置的。
user4988634:
回复 Dong Chen7:
不需要自己配置,默认配置了,调用Spi_open();,就可以发送和接受数据了。你用C:\ti\simplelink_cc13x0_sdk_1_30_00_06\examples\rtos\CC1310_LAUNCHXL\drivers\empty这个历程移植看看
Dong Chen7:
回复 user4988634:
用empty那个测试程序,发送数据的时候一样会卡死。
Dong Chen7:
回复 user4988634:
你那里有没有测试程序,发一个我试试。
Dong Chen7:
回复 user4988634:
你那里有没有测试程序,发一个我试试。