This thread has been locked.

If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.

cc3200 LPDS被唤醒后 uart中断 无法被触发

Other Parts Discussed in Thread: CC3200

TI的工程师,你们好!

cc3200 开发过程中遇到问题如下:

添加idle_profile lpds模式后,通过注册的GPIO深度唤醒源唤醒后,UART中断无法抢占。

问题描述如下:

2个线程:task1 优先级为1, task2 优先级为2.  task1 在深度唤醒源唤醒后,占用cpu 10s 并同时给task2 发信号。task2 为串口数据读,正常情况下阻塞,等到DMA中断到来,通知task2 读串口数据。

设置一个GPIO9为低电平,在uart中断中将其拉高。

在不进入LPDS模式下,当串口有数据接收时,串口中断 会将GPIO9拉高,并发信号给task2 触发其读串口数据。

问题是:在进入LPDS模式下后,按下GPIO 触发深度唤醒源中断唤醒CC3200后,task1 被唤醒,占用cpu,task1并没有设置GPIO9为高电平,而实测发现 GPIO9 此时为高电平。 同时 向串口写数据,串口中断没有被触发。 我的理解应该是 此时中断会抢占task1,从而通知task2 去收数据。

请问一下,在LPDS 模式下,寄存器的状态是否会被保存? 为何此时,串口中断没有被触发?

其中,task1 死循环代码如下:

while(FOREVER) {
  UART_PRINT("WakeupTask\n\r");
  osi_MsgQRead(&g_tWkupQueue, &ucQueueMsg, OSI_WAIT_FOREVER);
  switch(ucQueueMsg){
        case 1:
            UART_PRINT("timer\n\r");
            break;
        case 2:
            UART_PRINT("CPU running\n\r");
   while(i > 0) {
    osi_MsgQWrite(&g_tUartMonitorFlag, (void*)1, OSI_NO_WAIT);
    MAP_UtilsDelay(8000000); //delay 3s
    i--;
   }
   i = 12;
   osi_Sleep(1000);
            break;
        case 3:
            UART_PRINT("host irq\n\r");
            break;
        default:
            UART_PRINT("invalid msg\n\r");
            break;
        }
 }