主题中讨论的其他器件:CC1310
大家好!
我尝试合并 SPI 从器件和 RF Tx 模块、
我在代码中连接到 SPI 从器件阻塞模式。 它正在运行、但运行不正确。
我想与 SPI 主器件同步。
我需要设置不具有重叠的读取位置。
我认为 SPI 从器件回调模式可以使用中断模式。 但它不起作用。
我有一些问题。
1. 如何在非 RTOS 中使用 SPI 从站回调? 如果无法实现、如何同步 SPI 主器件?
2.您有 SPI 从时序图吗?
以下是我的代码部分。
------------------------------------------------------------------------------------------------------------------------------------------------
void *mainThread (void *arg0)
{
//射频设置
RF_Params rfParams;
rf_params_init (&rfParams);
RF_cmdPropTx.pktLen = SPI_MSG_LENGTH;
rf_cmdPropTx.pPkt = RFTxBuffer;//数据包;
RF_cmdPropTx.startTrigger.triggerType = TRIG_NOW;
// SPI Rx 设置
SPI_Handle slaveSpi;
SPI_Params spiParams;
SPI_Transaction 传输;
GPIO_init ();
SPI_INIT();
uart_init();
静态 UART_Handle UART;
静态 UART_Params uartParams;
/*创建一个数据处理关闭的 UART 模块。 */
uart_params_init (&uartParams);
uartParams.writeDataMode = UART_DATA_binary;
uartParams.readDataMode = UART_DATA_binary;
uartParams.readReturnMode = UART_RETURN_FULL;
uartParams.readEcho = uart_echo_off;
uartParams.baudrate = 115200;
UART = UART_OPEN (Board_UART0、&uartParams);
if (uart == NULL){
/* uart_open()失败*/
while (1);
}
SPI_PARAMS_INIT (&spiParams);
spiParams.dataSize = 8;
spiParams.bitrate = 4000000;
spiParams.frameFormat = SPI_POL0_PHA0;
spiParams.mode = SPI_SLAVE;
spiParams.transferCallbackFxn =回调;
spiParams.transferMode = SPI_MODE_CALLBACK;
slaveSpi = SPI_open (Board_SPI_SLAVE、&spiParams);
if (slaveSpi == NULL){
while (1);
}
/*打开 LED 引脚*/
ledPinHandle1 = PIN_OPEN (&ledPinState1、pinTable1);
ledPinHandle2 = PIN_OPEN (&ledPinStatus2、pinTable2);
如果(ledPinHandle1 == NULL || ledPinHandle2 == NULL)
{
while (1);
}
/*请求访问对讲机*/
rfHandle = rf_open (&rfObject、&rf_prop、(RF_RadioSetup*)&RF_cmdPropRadioDivSetup、&rfParams);
/*设置频率*/
RF_postCmd (rfHandle、(RF_Op*)和 RF_cmdfs、RF_PriorityNormal、NULL、0);
/*初始化从器件 SPI 事务结构*/
transaction.count = SPI_MSG_LENGTH;
transaction.txBuf = NULL;
transaction.rxBuf =(void *) slaveRxBuffer;
while (1)
{
// spi_transfer (slaveSpi、&transaction);
// if (packetRxCb){
// RF_postCmd (rfHandle、(RF_Op*)和 RF_cmdPropTx、RF_PriorityNormal、NULL、0);
// packetRxCb = false;
//}
SPI_TRANSMIT (slaveSpi、&TRANSACTION);
如果(转让确定){
memcpy (RFTxBuffer、slaveRxBuffer、SPI_MSG_LENGTH);
UART_WRITE (UART、(&RFTxBuffer)、SPI_MSG_LENGTH);
UART_WRITE (UART、"\n\n"、2);
转让 OK = false;
PIN_setOutputValue (ledPinHandle1、Board_PIN_LED1、!PIN_getOutputValue (Board_PIN_LED1));
}
否则{
PIN_setOutputValue (ledPinHandle2、Board_PIN_LED2、!PIN_getOutputValue (Board_PIN_LED2));
}
}
}
空回调(SPI_Handle handle、SPI_Transaction * transaction)
{
if (transaction->status == spi_transfer_completed){
转让 OK = true;
}
}