CC2640+SPI设备,由于要做低功耗,基本上硬件SPI初始化后用一次就关了,然后SPI脚作为普通IO做低功耗处理。基本是5秒钟2640唤醒一次再做初始化然后SPI关闭。休眠使用的是 standby 模式。 就这样控制逻辑,休眠后唤醒初始化硬件SPI后进行读写操作会造成程序死机,请TI大佬给个建议,是不是漏了什么操作。
以下是 spi的相关操作,包括低功耗处理、跳出低功耗处理代码
void Close_sx1278_SPI(void)
{
SPI_close(sx1278Handle);
}
bool Open_sx1278_SPI(void)
{ SPI_init();
sx1278Handle = SPI_open(SX1278BOARD_SPI, (SPI_Params *)&sx1278_SPI_defaultParams);
if(sx1278Handle == NULL)
{
//SPI open failed
return FALSE; }
return TRUE;}
void sx1278_LowPowerMgr(void)
{
Close_sx1278_SPI();
if(!sx1278PowerPin)
sx1278PowerPin = PIN_open(&sx1278PwPinState, sx1278SpiPinTable);
if(RFStatusPin)
PIN_close(RFStatusPin); sx1278RFStatusPinTable[0] = Board_SX1278_DIO0 | PIN_GPIO_OUTPUT_DIS | PIN_INPUT_EN | PIN_NOPULL;
RFStatusPin = PIN_open(&sx1278RFstatusPinState, sx1278RFStatusPinTable);
if(sx1278CsnPin)
PIN_close(sx1278CsnPin); sx1278CsnPinTable[0] = Board_SX1278_CSN | PIN_GPIO_OUTPUT_DIS | PIN_INPUT_EN | PIN_PULLUP;
sx1278CsnPin = PIN_open(&sx1278CsPinState, sx1278CsnPinTable);
}
void sx1278_OutputLowPw(void)
{
/* 释放引脚占用 */
if(sx1278PowerPin)
PIN_close(sx1278PowerPin);
if(!Open_sx1278_SPI())
{
Board_LedCtrl(1);
while(1); }
if(sx1278CsnPin)
PIN_close(sx1278CsnPin); sx1278CsnPinTable[0] = Board_SX1278_CSN | PIN_GPIO_OUTPUT_EN | PIN_GPIO_HIGH | PIN_PUSHPULL;
sx1278CsnPin = PIN_open(&sx1278CsPinState, sx1278CsnPinTable);
Task_sleep(10*1000/Clock_tickPeriod);
}
user5318699:
顶一下 没人回答一下吗
Viki Shi:
回复 user5318699:
结贴很快,还没来得及回帖。。。感谢提供反馈
TI中文支持网


