PIC32MX250 休眠后电平中断唤醒不成功

2019-03-25 18:54发布

MCU:  PIC32MX250F128D   A1
问题:怎么样才能成功电平变化唤醒MCU?
调试程序,发现不能进入电平变化中断;
关于寄存器设置如下:
  1. void CN_config()
  2. {
  3. //    bool tFlag;
  4.     INTDisableInterrupts(); // off interrupt
  5.     TRISCbits.TRISC3 = 1;   // ADC button
  6.     TRISBbits.TRISB13 = 1;   // hold

  7.     CNCONBbits.ON = 1;
  8.     CNCONCbits.ON = 1;
  9. //        CNPUCbits.CNPUC3 = 1;
  10. //        CNPDBbits.CNPDB13 = 1;
  11. ////        CNCONCbits.ON = TRUE;
  12. //    CNSTATBbits.CNSTATB13 = 0;  // up
  13. //    CNSTATCbits.CNSTATC3 = 0;//  down
  14. //    tFlag = PORTCbits.RC3;
  15. //    tFlag = PORTBbits.RB13;
  16.     PORTB = PORTB;
  17.     PORTC = PORTC;
  18.     INTSetVectorPriority ( INT_CHANGE_NOTICE_VECTOR, INT_PRIORITY_LEVEL_1 );
  19.     INTSetVectorSubPriority ( INT_CHANGE_NOTICE_VECTOR, INT_SUB_PRIORITY_LEVEL_0 );

  20.     IFS1bits.CNCIF = 0;
  21.     IFS1bits.CNBIF = 0;

  22. //        CNCONCbits.

  23. //    INTEnable ( INT_CNC, INT_ENABLED );// Enable CNCI interrupt  IEC1bits.CNCIE = 1;
  24. //    INTEnable ( INT_CNB, INT_ENABLED );
  25.     CNENBbits.CNIEB13 = 1;
  26.     CNENCbits.CNIEC3 = 1;
  27.     INTEnableInterrupts(); // on interrupt
  28. }
复制代码


下面是进入sleep的程序;
  1. VOID SYSTEM_EnableWDT (  )
  2. {
  3.    
  4.    EnterLowPowerMode();
  5.    //        // off ADC
  6.         AD1CON1bits.ADON   = FALSE; // off adc
  7.         ANSELCbits.ANSC3 = FALSE;   // set adc pin is digital
  8.    CN_config();

  9.    while(!U1STAbits.RIDLE);
  10.    U1MODEbits.WAKE = 1;   // UART sleep wake up
  11.     SYSTEM_Sleep();
  12. //    WDTCONbits.ON = 0;  // off WDT
  13.     OSCCONbits.SLPEN = 0; // wait -> idle
  14. //        // enable ADC
  15.         ANSELCbits.ANSC3 = TRUE;
  16.         AD1CON1bits.ADON   = TRUE;
  17.     ExitLowPowerMode();   
  18. }
复制代码


此帖出自小平头技术问答
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
2条回答
mzb2012
1楼-- · 2019-03-26 00:00
可以先尝试在正常运行状态下,调试电平变化中断,看是否可以进入中断,然后在调试休眠状态中断。
viphotman
2楼-- · 2019-03-26 00:05
谢谢,已经解决了,将之前程序一个屏蔽的地方释放掉
    INTEnable ( INT_CNC, INT_ENABLED );// Enable CNCI interrupt  
    INTEnable ( INT_CNB, INT_ENABLED );
程序就可以唤醒了;

一周热门 更多>