Part Number:CC1310
使用CC1310的NORTOS的 pininterrupt例程,对其进行如下修改:
void *mainThread(void *arg0)
{
/* Open LED pins */
ledPinHandle = PIN_open(&ledPinState, ledPinTable);
if(!ledPinHandle) {
/* Error initializing board LED pins */
while(1);
}
buttonPinHandle = PIN_open(&buttonPinState, buttonPinTable);
if(!buttonPinHandle) {
/* Error initializing button pins */
while(1);
}
/* Setup callback for button pins */
if (PIN_registerIntCb(buttonPinHandle, &buttonCallbackFxn) != 0) {
/* Error registering button callback function */
while(1);
}
/* Loop forever */
while(1) {
//sleep(1000);
sleep(5); // 休眠5秒
PIN_setOutputValue(ledPinHandle, Board_PIN_LED1, !PIN_getOutputValue(Board_PIN_LED1)); // DIO7电平翻转
}
}
即将原本主循环中的sleep(1000)替换为{sleep(5)和PIN_setOutputValue(ledPinHandle, Board_PIN_LED1, !PIN_getOutputValue(Board_PIN_LED1))}
实测发现,在芯片休眠期间,中断触发之后,不会立即执行DIO7电平翻转,而是等到5秒休眠时间到后才执行。
请问,有什么方法能够在中断触发后,立即结束休眠并执行sleep(5)后面的语句???
Katherine Wang:
已为您咨询TI资深工程师,一旦得到回复会立刻回复给您
,
Katherine Wang:
您可以参阅以下页面的“NoRTOS Power Management”一章,从而在没有 sleep() 的情况下做到这一点:https://www.ti2k.com/wp-content/uploads/ti2k/DeyiSupport_1GHz_Users_Guide.html
原理是您可以循环 5 秒,然后中断循环,或者在标志被切换后立即中断循环,例如在中断中。
,
CoCo Lv:
目前我这边使用永久等待信号量的方式进入休眠;休眠前启用定时器和外部引脚中断,任一触发时发送信号量,使芯片退出休眠。
,
Katherine Wang:
您能详细地展示一下您的永久等待数据量的方式是什么样的吗?