Пробуждение PIC с USART RX
Я работаю с микроконтроллером eXtreme Low Power (XLP) PIC 16LF1933.
Чтобы он разрядил батарею, я усыпляю его, пока он не получит символ перерыва (00h) в RX. Документация хорошо объясняет, как настроить автоматический пробуждение с помощью символа "Разрыв" в RX. Я следовал за этим.
Я использую Proteus для имитации проекта, с Виртуальным терминалом для отправки информации. Если вы нажмете
CTRL + SHIFT + @ отправляет de 00h (ноль / все 0), поэтому это разбудит PIC, как сказано в документации.
Проблема в том, что, когда я делаю это, я получаю журнал предупреждений о том, чтоWake up event is only 937.500003us wide. Minimum (at current baudrate) expected is 6.656ms. I'm using 9600 baudrate.
Как сделать правильное событие Wake Up с RX?
мой while
код
while (1) {
BAUDCONbits.WUE = 1; //Wake-up Enable
SLEEP();
while (BAUDCONbits.WUE);
msg = Receive_Serial(); //Clear RCIF
__delay_ms(100);
msg = '\0'; //Discard
__delay_ms(100);
msg = Receive_Serial(); //Receive the next character
__delay_ms(100);
RCREG = 0;
msg = '\0';
__delay_ms(100);
}
И моя функция приема
unsigned char Receive_Serial() {
if (OERR) { //Overrun error
RCSTAbits.CREN = 0; //Fix reset Enable Receive
RCSTAbits.CREN = 1;
}
while (!RCIF);
return RCREG;
}
1 ответ
Предупреждающее сообщение, которое вы получаете, просто связано с тем, что нулевой символ (00h) НЕ является условием прерывания.
Ваш рис-код может быть в порядке, но инструмент разработки не генерирует правильные тестовые данные.
Давным-давно я отчаянно пытался отправить перерыв, чтобы разбудить кусок неактивного оборудования, и мне нужно было отправить его в перерыв. Мой терминал не может отправить один. Я должен был заставить это работать, поэтому быстрый взлом состоял в том, чтобы отправить нулевой символ с терминалом, установленным на более низкую скорость передачи данных, и переключиться обратно на правильную скорость передачи данных.