Thread 中讨论的其他器件: ADS1293、 CC2650、 SYSBIOS、 CC1350
工具/软件:TI-RTOS
您好!
我在具有 CC2640F128RHB 处理器和 TI ADS1293芯片的定制电路板上使用 simple_peripheral 示例的修改版本。 CC2640和 ADS1293通过 SPI 进行连接。
在使用我们的定制板执行任何操作之前、我加载了未修改的 LaunchPad 版本的 simple_peripheral、并能够让该板通过 BLE 进行广播并获取其 MAC 地址。 之后、我添加了一个 RTOS 任务、该任务将使几个 LED 以大约半赫兹的频率闪烁。 这主要是为了进行彻底检查、以便查看电路板并知道它仍然有效。
此时、我有定制电路板闪烁灯、同时通过 BLE 进行广播。 接下来、我添加了用于设置 SPI、读取一个16位字、然后关闭 SPI 的代码。 这就是我现在陷入困境的地方。 我可以成功打开和关闭 SPI、但如果我尝试仅传输一个16位字、则传输会挂起。 我是在阻塞模式还是回调模式下进行传输、这无关紧要。 在阻塞模式下、处理器挂起、在回调模式下、回调函数永远不会执行。 还有人遇到过这样的情况吗?
TI-RTOS 版本为2.20.1.8、CC26xx BLE 堆栈版本为2.2.1.18
下面是相关的代码片段、显示了我为回调模式编写的内容。
(1)以下是 GPIO 位定义:
#define Board_RLED IOID_13
#define Board_GLED IOID_14
#define Board_LED_ON 0
#define Board_LED_OFF 1.
#define Board_SPI0_MISO IOID_4
#define Board_SPI0_MOSI IOID_3
#define Board_SPI0_CLK IOID_2
#define Board_SPI0_CSn IOID_6
#define Board_SPI_ADS1293_CSB IOID_6
#define Board_SPI_ADS1293_DRDYB IOID_11
#define Board_RST_ADS1293 IOID_0
(2)位的定义方式如下:
const PIN_Config BoardGpioInitTable[]={
Board_RLED | PIN_GPIO_OUTP_EN | PIN_GPIO_LOW | PIN_PushPull | PIN_DRVSTR_MAX、 /* LED 最初位于 */上
Board_GLED | PIN_GPIO_OUTP_EN | PIN_GPIO_HIGH | PIN_PushPull | PIN_DRVSTR_MAX, /* LED 最初关闭 */
BOARD_SPI_ADS1293_DRDYB | PIN_INPUT_EN | PIN_PULLUP、 /* ADS1293数据就绪中断引脚*
BOARD_SPI_ADS1293_CSB | PIN_GPIO_OUTP_EN | PIN_GPIO_HIGH | PIN_PushPull | PIN_DRVSTR_MAX、/* ADS1293芯片选择 *
BOARD_SPI0_MOSI | PIN_GPIO_OUTP_EN | PIN_GPIO_HIGH | PIN_PushPull | PIN_DRVSTR_MAX、 /* SPI 主器件输出-从器件输入*/
Board_SPI0_MISO | PIN_INPUT_EN | PIN_PULLUP、 /* SPI 主器件输入-从器件输出*
BOARD_SPI0_CLK | PIN_GPIO_OUTP_EN | PIN_GPIO_HIGH | PIN_PushPull | PIN_DRVSTR_MAX、 /* SPI 时钟*
BOARD_RST_ADS1293 | PIN_GPIO_OUTP_EN | PIN_GPIO_HIGH | PIN_PushPull | PIN_DRVSTR_MAX、 /* ADS1293芯片复位 *
PIN_TERMINATE
};
(3)这是代码。 对 SPI_init()的调用未显示、但在 ADS1293_init()之前调用
SPI_Params 参数;
SPI_Handle handle ={0};
SPI_Transaction 事务={0};
uint16_t txBuf[2]={0x8000、0};
uint16_t rxBuf[2]={0};
uint16_t Rx = 0xAAAA;
uint16_t TX = 0x5555;
SPI_Status stat;
void ADS1293TransferCallback (SPI_Handle cbHandle、SPI_Transaction * cbTransaction){
Tx =*((uint16_t *)(cbTransaction ->txBuf));
Rx =*((uint16_t *)(cbTransaction->rxBuf));
STAT = cbTransaction->status;
}
void ADS1293_init(){
SPI_PARAMS_INIT (params);
params.transferMode = SPI_MODE_CALLACK;
params.transferCallbackFxn = ADS1293TransferCallback;
params.bitrate = 1000000;
params.frameFormat = SPI_POL1_PHA0;
params.dataSize = 16;
params.mode = SPI_MASTER;
transaction.count = 1;
transaction.txBuf = txBuf;
transaction.rxBuf = rxBuf;
句柄= SPI_OPEN (0、params);
if (handle!= NULL){
SPI_TRANSFCTION (句柄、事务);
SPI_Close (handle);
}
}
