Other Parts Discussed in Thread: TRF7960A, CC2650
主题中讨论的其他器件:TRF7960A、
团队、
我有一位客户正在使用 CC2650和 TRF7960A 扫描 RFID 标签。 凭借 CC2650上的 SLOC297代码准工作模式、他们可以扫描标签、但代码最终因未知原因而被欺骗、并且需要重启电源。 下面是他们的关键代码片段的摘要、他们不清楚应该如何配置这些代码片段。
这就是它们在 transferMode=SPI_MODE_Blocking 中打开 SPI 驱动器的方式。 您可以看到他们已经注释出了替代的 transferMode=spi_mode_callback、他们不知道如何实现。 也许在阅读此处的注释后、建议帮助他们设置 SPI_MODE_CALLACK?
静态 botool SPI_open (uint32_t bitrate、spi_FrameFormat frameFormat)//更改是静态 的{ //将 SPI 配置为主控方*/ spi_Params_init (&spiNFCParams); spiNFCParams.transferMode = SPI_MODE_BLOCKING;//spi_MODE_callback; NFCparams.pitimmaster/spiCalls = NFCtransferrackn.pid.transferrack_params.pirtid/SPI = SPI_Calls/sime.pirt_transferrackn.spi_params.pit. spiNFCParams.bitrate =比特率; spiNFCParams.dataSize = 8; spiNFCParams.frameFormat =帧格式; //尝试打开 SPI。 // spiNFCHandle = SPI_OPEN (Board_SPI0、&spiNFCParams); 返回 spiNFCHandle!= NULL; }
此外、它们已经设置了 PIN_Handle 和 PIN_Config 表、然后在 IRQ 线路变为高电平时为 GPIO 中断注册了一个回调函数:
静态 PIN_STATE 引脚 NFCSTATE; 静态 PIN_Handle hNFCPin; 静态 PIN_Config BoardNFCPinTable[]= { Board_NFC_EN | PIN_GPIO_OUTP_EN | PIN_GPIO_PUTLOW | PIN_PushPull | PIN_DRVSTR_MAX、/* NFC PLUG_IN_PIN_INPUT_IN_IN_ING_INPUT_ING_INPUT_HRESHOT | PIN_PIN_INP| ING_INPUT_ING_INPUT_ING_INPUT_INPUT_ERR_PIN_INPUT_HREST_IN_IN_INP| PIN_INPUT_INPUT_INP_INP /* NFC_IRQ 为高电平有效*/ Board_LED1 | PIN_GPIO_OUTP_EN | PIN_GPIO_HIGH | PIN_PushPull | PIN_DRVSTR_MAX、// LED 最初关闭*/ Board_LED2 | PIN_GPIO_OUTPUT EN | PIN_GPIO_HIGH | PIN_PushPushPull | PIN_DRVSTR_MAX * PIN_NFCPNFC96x、NFCPINTH_OFF * (PIN_NFCQ_INPUT);PIN_NFC9_PIN_PIN_NOT_NFCQ_INTRF_IN);PIN_PIN_PIN_PIN_NFC96*引脚在初始关闭*、NFCP_INSTR_INPUT
在不起作用的回调函数的以下实现中、它们从 SLOC297移植 TRF796x_Callback、如下所示。 在这种情况下、他们面临着从 GPIO 中断回调函数进行 SPI_MODE_BLOCK 调用的挑战、这会导致他们在没有异常处理程序的无限 while 循环中卡在 Hwi.c 中。 我们发现一些关于这一点的弱在线讨论不是一个很好的组合(即阻止 GPIO 中断回调函数内的函数调用)。
静态空 TRF796x_Callback (PIN_Handle handle、PIN_ID pinId) { uint8_t ui8IrqStatus; stop_counter;//停止计时器模式 g_ui8IrqFlag = 0x01; do { read_CLR;// port2中断标志清除 // IRQ 状态寄存器必须被读取 ui8IrqStatus (TRF79xxA);读入 TRF79_CLR if (ui8IrqStatus = 0xA0)// TX 有效且只有3个字节保留在 FIFO 中{ g_sTrfStatus = TX_WAIT; break; } 否则 { TRF79xxA_processIRQ (&ui8IrqStatus); } while (IRQ_PIN_STATUS);//(IRQ_PORT & IRQ_PIN)== TRF79xxA_PROCESS_ (&ui8IrqStatus);}}}while (IRQ_PIN_PIN_PIN_PIN_EXIT)=/PMIC_BIT_BIT_BIT_BIT_BIT_BI
因此、解决方法是简化 TRF796x_Callback 函数、使其仅设置一个标志、然后他们编写了一个应用程序回调函数、该函数经过轮询以查看是否设置了该标志、但它们在这方面存在问题。 最后、他们想知道是否应该将 SPI 驱动程序配置为传输模式=SPI_MODE_CALLBACK、这样他们就可以将 TRF796x_Callback 保持在上面、并从例程内部进行 SPI 调用、而不会卡在 Hwi.c while 循环中无限。
有什么想法吗?