CC3200 LPDS模式无法退出
时间:10-02
整理:3721RD
点击:
Hi all
我写了一个小应用程序, 使用到的资源大致如下
GPIO使用了pin64作为led, pin04作为按键, pin59作为AD引脚.
建立了4个线程, 栈都是1024. 使用了timer Framework 里面的高精度timer和RTC.
遇到的问题如下:
配置系统在vApplicationIdleHook调用cc_idle_task_pm(), 之前设置好了进入lp3p0_setup_power_policy(POWER_POLICY_STANDBY) 进入LPDS.
有关RTC唤醒的配置如下
static void TimerTask(void *pvParameters)
{
int ret;
unsigned char sig = 0;
while (1) {
osi_MsgQRead(&g_timer_signal_queue, &sig, OSI_WAIT_FOREVER);
BatterySample();
if (device_status_get(DEVICE_STATUS_NET_ONLINE) &&
device_status_get(DEVICE_STATUS_NET_SOCK_OPEN)) {
ret = net_send_heartbeat();
if (ret < 0)
ERR_PRINT(ret);
}
}
}
static void rtc_timer_cb(void *vParam)
{
unsigned char timer_sig = 1;
osi_MsgQWrite(&g_timer_signal_queue, &timer_sig, OSI_NO_WAIT);
}
static int rtc_timer_set(void)
{
struct cc_timer_cfg sRealTimeTimer;
struct u64_time sInitTime;
int iRetVal;
sInitTime.secs = 0;
sInitTime.nsec = 0;
cc_rtc_set(&sInitTime);
sRealTimeTimer.source = HW_REALTIME_CLK;
sRealTimeTimer.timeout_cb = rtc_timer_cb;
sRealTimeTimer.cb_param = NULL;
g_rtc_hndl = cc_timer_create(&sRealTimeTimer);
iRetVal = osi_MsgQCreate(&g_timer_signal_queue, NULL, sizeof(unsigned char), TIMER_SIGNAL_QUEUE_LEN);
if (iRetVal < 0) {
UART_PRINT("unable to create timer signal queue\n\r");
return iRetVal;
}
iRetVal = osi_TaskCreate(TimerTask,
(const signed char *)"Timer Task",
OSI_STACK_SIZE, NULL, 2, NULL );
if (iRetVal < 0) {
UART_PRINT("unable to create timer task\n\r");
return iRetVal;
}
return 0;
}
static int rtc_timer_start(void)
{
struct u64_time sIntervalTimer;
sIntervalTimer.secs = NET_HEARTBEAT_INTERVAL_S;
sIntervalTimer.nsec = 0;
cc_timer_start(g_rtc_hndl, &sIntervalTimer, OPT_TIMER_PERIODIC);
return 0;
}
大致是参照idle_profile例程做的. 这样子系统可以顺利从LPDS唤醒.
但是当我想加入按键作为LPDS作为唤醒中断, 配置如下
static void set_gpio_as_wakeup_pin()
{
cc_hndl tGPIOHndl;
tGPIOHndl = cc_gpio_open(BUT_GPIO, GPIO_DIR_INPUT);
cc_gpio_enable_notification(tGPIOHndl, BUT_GPIO, (enum gpio_int_type)BUT_ACTIVE_EDGE,
(GPIO_TYPE_NORMAL | GPIO_TYPE_WAKE_SOURCE));
}
配置后, 系统就无法从LPDS唤醒了, RTC也唤醒不了了.
请问这个可能的原因是什么? 是否有建议我从哪里排查问题呢?
最终找到了问题原因.
其实已经从lpds退出了, 但是由于没有恢复GPIO的配制, 所以后面代码执行出错了.
是的,你如果加了外设方面的控制的话,是需要加相应的配置的。
