Al actualizar el CCS me han dejado de funcionar las interrupciones de un código que ya funcionaba con anterioridad. Esto sucede cada vez que utilizo el LCD, cuando envío datos al LCD las interrupciones globales se quedan deshabilitadas. ¿Esto puede ser un Bug o son cambios realizados a partir de cierta versión?.
Dejo la parte del código que he tenido que modificar para que vuelva a funcionar en parte, y digo en parte porque el LCD es un dispositivo muy lento y no me hace ninguna gracia que el CCS me deshabilite las interrupciones cuando lo utilizo.
Enable_interrupts(GLOBAL);
// _LcdClear();
while(1){
if (_Btimer0 == 1) {
_rldbt(0, 200);
printf(LCD_PUTC, "\f\GIE=%u PEIE=%u", INTCON_GIE, INTCON_PEIE);
Enable_Interrupts(GLOBAL);
printf(LCD_PUTC, "\nIE=%u IF=%u B:%u", PIE1_RCIE, PIR1_RCIF, _Buffer);
Enable_Interrupts(GLOBAL);
// LedA = !LedA;
}
// if (_Btimer1 == 1) {
// _rldbt(1, 5);
if (_Buffer == 0) LedV = 1;
if (_Buffer > 0) {
putc(_Receive());
LedV = !LedV;
}
// }
if (_Btimer2 == 1) {
_rldbt(2, 500);
LCD = !LCD;
}
Nota: Al final he corregido el problema añadiendo Enable_Interrupts(GLOBAL); al principio de las funciones principales de la Flex_Lcd, pero me gustaria saber si se puede solucionar el problema de otra forma.