TI中文支持网
TI专业的中文技术问题搜集分享网站

IO中断函数中不能执行RF命令吗?

使用 launchpadCC1310 想按下button0是发送一条TX Packet,在GPIO_Button0_Interrupt函数中执行RF_runCmd发送TX命令时返回值为0。

Viki Shi:

这应该是卡在那了,你单步调试一下,看能走到下一条语句吗

Chen Jian:

下面的GPIO_toggle能执行,随后就卡死了

Viki Shi:

回复 Chen Jian:

先屏蔽button部分代码,只跑RF,能正常发送吗?

Chen Jian:

回复 Viki Shi:

不在按键中断函数中可以执行的,返回值也正常

Viki Shi:

回复 Chen Jian:

图片挂了,请附件上传。

请问你的例程是否参考frPacketTX?此例程是持续发送,而你的要求是“按下button0是发送一条TX Packet”,请排查下是否RF core一直在发送中

Chen Jian:

回复 Viki Shi:

挂了的图片;

直接在主函数中连续发送没有问题;

Chen Jian:

回复 Chen Jian:

//在mainThread中循环发送,没有问题void *mainThread(void *arg0)
{//初始化GPIOGPIO_init();//配置GPIOGPIO_setConfig(Board_GPIO_RLED, GPIO_CFG_OUT_STD | GPIO_CFG_OUT_LOW);GPIO_setConfig(Board_GPIO_GLED, GPIO_CFG_OUT_STD | GPIO_CFG_OUT_LOW);GPIO_setConfig(Board_GPIO_BUTTON0, GPIO_CFG_IN_PU | GPIO_CFG_IN_INT_FALLING);GPIO_setConfig(Board_GPIO_BUTTON1, GPIO_CFG_IN_PU | GPIO_CFG_IN_INT_FALLING);//设置按钮中断回调GPIO_setCallback(Board_GPIO_BUTTON0, GPIO_Button0_Interrupt);GPIO_setCallback(Board_GPIO_BUTTON1, GPIO_Button1_Interrupt);//中断使能GPIO_enableInt(Board_GPIO_BUTTON0);GPIO_enableInt(Board_GPIO_BUTTON1);#if 0//初始化LkEasyLinkLkEasyLink_Kernel_Initialize();while(1);
#elseRF_Params rfParams;RF_Params_init(&rfParams);rfHandle2 = RF_open(&rfObject2, &RF_prop, (RF_RadioSetup*)&RF_cmdPropRadioDivSetup, &rfParams);RF_postCmd(rfHandle2, (RF_Op*)&RF_cmdFs, RF_PriorityNormal, NULL, 0);while(1){RF_cmdPropTx.pktLen = PAYLOAD_LENGTH;RF_cmdPropTx.pPkt = txPacket;RF_cmdPropTx.startTrigger.triggerType = TRIG_NOW;RF_cmdPropTx.startTrigger.pastTrig = 1;RF_cmdPropTx.startTime = 0;RF_cmdPropTx.condition.rule = COND_STOP_ON_FALSE;/* Get current time */uint32_t curtime;curtime = RF_getCurrentTime();/* Create packet with incrementing sequence number and random payload */txPacket[0] = (uint8_t)(seqNumber >> 8);txPacket[1] = (uint8_t)(seqNumber++);for (uint8_t i = 2; i < PAYLOAD_LENGTH; i++){txPacket[i] = rand();}/* Set absolute TX time to utilize automatic power management */curtime += PACKET_INTERVAL;RF_cmdPropTx.startTime = curtime;RF_EventMask terminationReason = RF_runCmd(rfHandle2, (RF_Op*)&RF_cmdPropTx, RF_PriorityNormal,NULL,0);}
#endif
}

Chen Jian:

回复 Viki Shi:

//挂了的图片内容//mainThread循环发送 没有问题void *mainThread(void *arg0)
{//初始化GPIOGPIO_init();//配置GPIOGPIO_setConfig(Board_GPIO_RLED, GPIO_CFG_OUT_STD | GPIO_CFG_OUT_LOW);GPIO_setConfig(Board_GPIO_GLED, GPIO_CFG_OUT_STD | GPIO_CFG_OUT_LOW);GPIO_setConfig(Board_GPIO_BUTTON0, GPIO_CFG_IN_PU | GPIO_CFG_IN_INT_FALLING);GPIO_setConfig(Board_GPIO_BUTTON1, GPIO_CFG_IN_PU | GPIO_CFG_IN_INT_FALLING);//设置按钮中断回调GPIO_setCallback(Board_GPIO_BUTTON0, GPIO_Button0_Interrupt);GPIO_setCallback(Board_GPIO_BUTTON1, GPIO_Button1_Interrupt);//中断使能GPIO_enableInt(Board_GPIO_BUTTON0);GPIO_enableInt(Board_GPIO_BUTTON1);#if 0//初始化LkEasyLinkLkEasyLink_Kernel_Initialize();while(1);
#elseRF_Params rfParams;RF_Params_init(&rfParams);rfHandle2 = RF_open(&rfObject2, &RF_prop, (RF_RadioSetup*)&RF_cmdPropRadioDivSetup, &rfParams);RF_postCmd(rfHandle2, (RF_Op*)&RF_cmdFs, RF_PriorityNormal, NULL, 0);while(1){RF_cmdPropTx.pktLen = PAYLOAD_LENGTH;RF_cmdPropTx.pPkt = txPacket;RF_cmdPropTx.startTrigger.triggerType = TRIG_NOW;RF_cmdPropTx.startTrigger.pastTrig = 1;RF_cmdPropTx.startTime = 0;RF_cmdPropTx.condition.rule = COND_STOP_ON_FALSE;/* Get current time */uint32_t curtime;curtime = RF_getCurrentTime();/* Create packet with incrementing sequence number and random payload */txPacket[0] = (uint8_t)(seqNumber >> 8);txPacket[1] = (uint8_t)(seqNumber++);for (uint8_t i = 2; i < PAYLOAD_LENGTH; i++){txPacket[i] = rand();}/* Set absolute TX time to utilize automatic power management */curtime += PACKET_INTERVAL;RF_cmdPropTx.startTime = curtime;RF_EventMask terminationReason = RF_runCmd(rfHandle2, (RF_Op*)&RF_cmdPropTx, RF_PriorityNormal,NULL,0);}
#endif
}

Viki Shi:

回复 Chen Jian:

你在上面代码中持续发送当然没问题,就这一个任务。你现在的目标不是实现按下button发送一次吗?如果这里还持续发送,那程序不就一直在这里循环了

Chen Jian:

回复 Viki Shi:

是的,我想实现按下button发送一次吗?这样可以实现吗?或者我之前的做法有问题吗?

赞(0)
未经允许不得转载:TI中文支持网 » IO中断函数中不能执行RF命令吗?
分享到: 更多 (0)