Autor Tema: No me funciona la recepcion por interrupcion pic24hj128gp502  (Leído 1370 veces)

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

Desconectado lfedericop

  • PIC10
  • *
  • Mensajes: 7
No me funciona la recepcion por interrupcion pic24hj128gp502
« en: 10 de Julio de 2012, 16:28:53 »
Que tal como les va, estoy haciendo unas pruebas con el pic24hj128gp502, ya logro transmitir datos por ambas uart, el tema es que no puedo recibir de ninguna si utilizo la interrupcion

Código: C
  1. void UART2Init()
  2. {      
  3.         U2MODEbits.UARTEN=1;
  4.         U2MODEbits.USIDL=1; // Al pasar al modo Sleep, apagar modulo.
  5.         U2MODEbits.IREN=0; // Codificacion/decodificacion IrDA deshabilitado.
  6.         U2MODEbits.RTSMD=1; // RTS en modo simple.
  7.         U2MODEbits.UEN=0b00; // Tx/Rx habilitado, CTS/RTS deshabilitados.
  8.         U2MODEbits.WAKE=0; // Wake-up deshabilitado.
  9.         U2MODEbits.LPBACK=0; // Modo LoopBack deshabilitado.
  10.         U2MODEbits.ABAUD=0; // Auto-Baud rate deshabilitado.
  11.         U2MODEbits.URXINV=1; // Modo normal de pin RX, en reposo = 0.
  12.         U2MODEbits.BRGH=0; // Mode seleccionado en define.-
  13.         U2MODEbits.PDSEL=0b00; // 8 bits- sin paridad.
  14.         U2MODEbits.STSEL=0; // 1 bit de Stop.  
  15.        
  16.         U2STAbits.UTXISEL1=1; // Interrupcion por transimision no usada.
  17.         U2STAbits.UTXISEL0=1; // Interrupcion por transimision no usada.
  18.         U2STAbits.UTXINV=0; // Pin Tx en reposo igual a 1.
  19.         U2STAbits.UTXBRK=0; // Break deshabilitado.
  20.         U2STAbits.UTXEN=1;
  21.         U2STAbits.URXISEL=0b01; // Interrumpir cuando se recibe un caracter.
  22.         U2STAbits.ADDEN=0; // Auto-Address deshabilitado.
  23.         U2STAbits.OERR=0; // Borramos bits de error por overflow.
  24.         U2BRG = BAUDRATEREG2;  // Baud Rate determinado en define.
  25.         IFS1bits.U2RXIF = 0;
  26. }
  27. void init_all_interrupts(void)
  28. {
  29.        
  30.         INTCON1=0x0000;
  31.         INTCON2=0x0000;
  32.        
  33.         //SPI 1
  34.         IEC0bits.SPI1IE = 0;
  35.         IFS0bits.SPI1IF = 0;
  36.        
  37.         //UART1 RX
  38.         IEC0bits.U1RXIE = 1;
  39.         IPC2bits.U1RXIP=0b111; ////PRIORIDAD
  40.         IFS0bits.U1RXIF = 0;
  41.  
  42.         //UART2 RX // HABILITA INTERRUPT
  43.         IEC1bits.U2RXIE=1; //interrupcion
  44.         IPC7bits.U2RXIP=0b111; //PRIORIDAD
  45.         IFS1bits.U2RXIF=0;
  46.  
  47.         return;
  48. }
  49.  
  50. void __attribute__((__interrupt__, __shadow__,no_auto_psv)) _U2RXInterrupt(void)
  51. {
  52.         unsigned int timeout=0;
  53.         unsigned char i=0;
  54.  
  55.         //UART1 RX    // INHABILITA LA UART1
  56.         IEC0bits.U1RXIE = 0;
  57.         IFS0bits.U1RXIF = 0;
  58.  
  59.         /* Read the receive buffer till atleast one or more character can be read */
  60.         while (1)
  61.                 {              
  62.                 timeout=1000;
  63.                 while(!U2STAbits.URXDA)
  64.                         {
  65.                         timeout--;
  66.                         if (timeout == 0) break;
  67.                         }          
  68.             Receiveddata[i] = U2RXREG;
  69.                 i++;
  70.                 if (timeout == 0) break;               
  71.                 }
  72.  
  73.         IFS1bits.U2RXIF = 0;
  74.         flagrx_2 = 1;
  75.         //UART1 RX    // REHABILITA LA UART1
  76.         IEC0bits.U1RXIE = 1;
  77.         //IFS0bits.U1RXIF = 0;
  78. }
Estoy trabajando con un cristal de 8MHZ y a 9600 baudios.
Alguien me podria decir donde estoy errando.
saludos y muchas gracias

Desconectado lfedericop

  • PIC10
  • *
  • Mensajes: 7
Re: No me funciona la recepcion por interrupcion pic24hj128gp502
« Respuesta #1 en: 10 de Julio de 2012, 18:05:40 »
Código: C
  1. void asignar_pines(void)
  2. {
  3.  
  4.         // Habilitamos escritura sobre registros RPINRx y RPORX.
  5.         __builtin_write_OSCCONL(OSCCON & ~(1<<6));     
  6.         RPOR0bits.RP0R =  0b00011;  // Asigno RP0 tx UART1
  7.         RPINR18bits.U1RXR = 1;          //Asignamos pin recepción UART1 a RP1.-
  8.         RPOR1bits.RP2R =  0b00101;  // Asigno RP2 tx UART2
  9.         RPINR19bits.U2RXR = 3;          //Asignamos pin recepción UART2 a RP3.-
  10.        
  11.         RPINR20bits.SDI1R = 6; // ASIGO EL PIN SDI1 al pin RP6 //SPI1
  12.         RPOR2bits.RP5R = 0b01001; // Asigno RP5 !SS 1 //SPI1
  13.         RPOR3bits.RP7R = 0b00111; // Asigno RP7 SDO1 //SPI1
  14.         // Bloqueamos escritura sobre registros RPINRx y RPORX.
  15.         __builtin_write_OSCCONL(OSCCON | (1<<6));
  16.  
  17.         return;
  18. }
  19. Agrego el mapeo de los pines por si sirve para algo.
  20. saludos


 

anything