Autor Tema: Problemas con las interrupciones del dsPIC30F4013  (Leído 647 veces)

0 Usuarios y 1 Visitante están viendo este tema.

Desconectado Neutrino

  • PIC10
  • *
  • Mensajes: 13
Problemas con las interrupciones del dsPIC30F4013
« en: 09 de Julio de 2018, 19:30:03 »
Hola chicos, estoy intentando hacer funcionar el uart en el dspic, pero no logro hacer funcionar las interrupciones, pero no lo consigo y no sé qué es lo que estoy haciendo mal, así que agradecería cualquier ayuda.

Este es mi user.c
Código: C
  1. void InitApp(void)
  2. {
  3.     /* Setup analog functionality and port direction */
  4.    
  5.     PORTA   = 0x0000;
  6.     LATA    = 0x0000;
  7.     TRISA   = 0x0000;
  8.    
  9.     PORTB   = 0x0000;
  10.     LATB    = 0x0000;
  11.     TRISB   = 0x0000;
  12.    
  13.     PORTC   = 0x0000;
  14.     LATC    = 0x0000;
  15.     TRISC   = 0x0000;
  16.    
  17.     PORTD   = 0x0000;
  18.     LATD    = 0x0000;
  19.     TRISD   = 0x0000;
  20.    
  21.     ADPCFG  = 0xFFFF;       // Todos digitales
  22.     // UART1
  23.     // 115200bd
  24.    
  25.     // TRANSMISIÓN
  26.     U1MODEbits.USIDL        = 1;        // Descontinua en modo idle
  27.     U1MODEbits.ALTIO        = 0;        // UXTX
  28.     U1MODEbits.WAKE         = 0;        // Wakeup disabled
  29.     U1MODEbits.LPBACK       = 0;        // ---------------
  30.     U1MODEbits.ABAUD        = 0;        // Detección baudios por el RX
  31.     U1MODEbits.PDSEL        = 0;        // 8bits sin paridad
  32.     U1MODEbits.STSEL        = 0;        // 1bit de parada
  33.    
  34.     // RECEPCIÓN
  35.     U1STAbits.UTXISEL       = 0;        // Deshabilita interrupciones en el envio datos
  36.     U1STAbits.URXISEL       = 0b00;    // Interrupción cuando se recibe un caracter completo
  37.    
  38.     U1BRG                   = 10;       // 115200
  39.    
  40.     IPC2bits.U1RXIP         = 7;        // Máxima prioridad
  41.    
  42.     U1MODEbits.UARTEN       = 1;        // Habilita UART
  43.     U1STAbits.UTXEN         = 1;        // Habilita la transmisión
  44.    
  45.     //IFS0bits.u1
  46.    
  47.     // INTERRUPCIONES
  48.     INTCON1bits.NSTDIS      = 1;        // Habilitamos el anidamiento de interrupciones
  49. }

Y este mi interrupts.c

Código: C
  1. void __attribute__((interrupt, auto_psv)) _U1RXInterrupt(void) {
  2.     asm("NOP");
  3. }  

Para simular la recepción del mensaje, estoy enviando un estímulo a U1RXREG pero no se activa la interrupción, también hice un pool (no sé si ese es el termino adecuado) en el main de la bandera que se debería levantar, pero no lo hace.

Saludos y gracias de antemano.