Autor Tema: Iniciando pic32MZ  (Leído 15219 veces)

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

Desconectado KILLERJC

  • Colaborador
  • DsPIC33
  • *****
  • Mensajes: 8242
Re: Iniciando pic32MZ
« Respuesta #15 en: 11 de Diciembre de 2014, 15:01:16 »
Lo que me molesto siempre apartir de los dsPIC es que tiene todos los documentos descentralizados. Antes 1 solo datasheet era suficiente.
Ahora hace uno para toda la familia, y ademas 1 por cada seccion ( que es general para todos los PIC32 ). Entonces te volves loco mirando 3 datasheets a la ves xD

http://www.microchip.com/wwwproducts/Devices.aspx?product=PIC32MZ2048ECG100
En Documentation and Software -> Reference Manual
PIC32 Family Reference Manual, Sect. 08 Interrupts
PIC32 Family Reference Manual, Sect. 21 UART

Incluso en el de la UART estan todos los pasos a seguir ya sea para transmision o recepcion con interrupcion, pero es masomenos lo que hiciste vos.

Desconectado KALLITOS

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 1256
Re: Iniciando pic32MZ
« Respuesta #16 en: 12 de Diciembre de 2014, 16:45:49 »
Definitivamente no puedo hacer funcionar la interrupcion UART.

A diferencia del C30 solo hay que habilitar el

Código: C
  1. INTCONbits.MVEC = 1; /// MULTIVECTOR INTERRUPCIONES

De alli todo es lo mismo, no entiendo que mas me falta hacer.

La documentación que colocas la teno guardada en mi disco duro y lo leo cuando voy programando, pero no encuentro la salida.

A un microcontrolador hay que sacarle hasta el ultimo byte....(YO)

Cómo puede ser que un pic24EP512 me quede corto de memoria, señores de MICROCHIP saquen pics con más memoria flash

Más de 45 mil lineas de codigo y aun no termino el equipo, asu mare!!

S34ML08G1TFI200 no necesito mas memoria externa.

Desconectado KALLITOS

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 1256
Re: Iniciando pic32MZ
« Respuesta #17 en: 12 de Diciembre de 2014, 17:10:44 »
Todo empuja a Harmony, hasta en el foro de microchip.
Ta mare  :?
A un microcontrolador hay que sacarle hasta el ultimo byte....(YO)

Cómo puede ser que un pic24EP512 me quede corto de memoria, señores de MICROCHIP saquen pics con más memoria flash

Más de 45 mil lineas de codigo y aun no termino el equipo, asu mare!!

S34ML08G1TFI200 no necesito mas memoria externa.

Desconectado migsantiago

  • Colaborador
  • DsPIC33
  • *****
  • Mensajes: 8257
    • Sitio de MigSantiago
Re: Iniciando pic32MZ
« Respuesta #18 en: 13 de Diciembre de 2014, 16:15:22 »
Podrías habilitarla en Harmony y ver las diferencias de código fuente que genera.  8)

Desconectado KALLITOS

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 1256
Re: Iniciando pic32MZ
« Respuesta #19 en: 13 de Diciembre de 2014, 18:14:59 »
En el Help de Harmony recomienda MPLABX IDE 2.2 o superior, intento descargar el 2.26 que está disponible y después de un rato se cancela y no puedo descargarla.
Ahora eso juega en mi contra, jajajaja  :8} :8} rio para no llorar.
A un microcontrolador hay que sacarle hasta el ultimo byte....(YO)

Cómo puede ser que un pic24EP512 me quede corto de memoria, señores de MICROCHIP saquen pics con más memoria flash

Más de 45 mil lineas de codigo y aun no termino el equipo, asu mare!!

S34ML08G1TFI200 no necesito mas memoria externa.

Desconectado migsantiago

  • Colaborador
  • DsPIC33
  • *****
  • Mensajes: 8257
    • Sitio de MigSantiago
Re: Iniciando pic32MZ
« Respuesta #20 en: 13 de Diciembre de 2014, 18:42:18 »
Kallitos, adjunto las diferencias en código fuente que agregó Harmony para darle servicio a las interrupciones. Comprimí el HTML en ZIP.

Saludos.

Desconectado KALLITOS

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 1256
Re: Iniciando pic32MZ
« Respuesta #21 en: 13 de Diciembre de 2014, 22:39:51 »
Migsantiago muchas gracias por tu apoyo.

Ok, vamos demembrando esta y veremos como va:

Código: C++
  1. 1)   PLIB_USART_BaudRateSet(USART_ID_2, SYS_CLK_PeripheralFrequencyGet(CLK_BUS_PERIPHERAL_2), 38400);
  2. 2)   PLIB_USART_HandshakeModeSelect(USART_ID_2, USART_HANDSHAKE_MODE_FLOW_CONTROL);
  3. 3)   PLIB_USART_OperationModeSelect(USART_ID_2, USART_ENABLE_TX_RX_USED);
  4. 4)   PLIB_USART_LineControlModeSelect(USART_ID_2, USART_8N1);
  5. 5)   PLIB_USART_TransmitterEnable(USART_ID_2);
  6. 6)   PLIB_USART_TransmitterInterruptModeSelect(USART_ID_2, USART_TRANSMIT_FIFO_NOT_FULL);

Vamos por ítems.
1)
Código: C
  1. PB2DIVbits.ON = 1; ////    CLOCK PB2 ENABLE PARA UART
  2. PB2DIVbits.PBDIV = 2; ////    DIVIDE LOS 200Mhz ENTRE 2 Y LOGRA 100Mhz
  3.  
  4. #define BAUDIOS_9600            9600
  5. #define _9600_BAUDIOS           (FCY/(4*(unsigned long)BAUDIOS_9600))-1

2)  Seteado en 0, aunque no es usado:
Código: C
  1. RTSMD: Mode Selection for UxRTS Pin bit
  2. 1 = UxRTS pin is in Simplex mode
  3. 0 = UxRTS pin is in Flow Control mode

3)seteados ambos a 1.
Código: C
  1. URXEN: Receiver Enable bit
  2. 1 = UARTx receiver is enabled. UxRX pin is controlled by UARTx (if ON = 1)
  3. 0 = UARTx receiver is disabled. UxRX pin is ignored by the UARTx module
  4.  
  5. UTXEN: Transmit Enable bit
  6. 1 = UARTx transmitter is enabled. UxTX pin is controlled by UARTx (if ON = 1)
  7. 0 = UARTx transmitter is disabled. Any pending transmission is aborted and buffer is reset

4) seteado a 0.
Código: C
  1. PDSEL<1:0>: Parity and Data Selection bits
  2. 11 = 9-bit data, no parity
  3. 10 = 8-bit data, odd parity
  4. 01 = 8-bit data, even parity
  5. 00 = 8-bit data, no parity

5)Creo que se está repitiendo, en el caso de estar equivocado, la transmisión si funciona, no en modo interrupción, aun no la uso.
Seteado a 1
Código: C
  1. UTXEN: Transmit Enable bit
  2. 1 = UARTx transmitter is enabled. UxTX pin is controlled by UARTx (if ON = 1)
  3. 0 = UARTx transmitter is disabled. Any pending transmission is aborted and buffer is reset

6) No usado ya que no uso transmisión vía interrupción, talvez por alli esté el problema?

Código: C
  1. PLIB_USART_ReceiverEnable(USART_ID_2);
  2. PLIB_USART_ReceiverInterruptModeSelect(USART_ID_2, USART_RECEIVE_FIFO_ONE_CHAR);
  3.  
  4. /* Initialize TX interrupt */
  5. 7)   PLIB_INT_SourceEnable(INT_ID_0, INT_SOURCE_USART_2_TRANSMIT);
  6. 8)   PLIB_INT_VectorPrioritySet(INT_ID_0, INT_VECTOR_UART2_TX, INT_PRIORITY_LEVEL1);
  7. 9)   PLIB_INT_VectorSubPrioritySet(INT_ID_0, INT_VECTOR_UART2_TX, INT_SUBPRIORITY_LEVEL0);
  8.  
  9. /* Initialize RX interrupt */
  10. 10)   PLIB_INT_SourceEnable(INT_ID_0, INT_SOURCE_USART_2_RECEIVE);
  11. 11)   PLIB_INT_VectorPrioritySet(INT_ID_0, INT_VECTOR_UART2_RX, INT_PRIORITY_LEVEL1);
  12. 12)   PLIB_INT_VectorSubPrioritySet(INT_ID_0, INT_VECTOR_UART2_RX, INT_SUBPRIORITY_LEVEL0);
  13.  
  14. /* Initialize Fault interrupt */
  15. 13)   PLIB_INT_SourceEnable(INT_ID_0, INT_SOURCE_USART_2_ERROR);
  16. 14)   PLIB_INT_VectorPrioritySet(INT_ID_0, INT_VECTOR_UART2_FAULT, INT_PRIORITY_LEVEL1);
  17. 15)   PLIB_INT_VectorSubPrioritySet(INT_ID_0, INT_VECTOR_UART2_FAULT, INT_SUBPRIORITY_LEVEL0);

Items del 7 al 9 no usado aun.
10)
Código: C
  1. IEC3bits.U1RXIE = 1;

11)
Código: C
  1. IPC28bits.U1EIP = 2;

12)
Código: C
  1. IPC28bits.U1EIS = 2;

Items del 13 al 15 no usados.

Me pongo con los items no usados.

Gracias mig!!
A un microcontrolador hay que sacarle hasta el ultimo byte....(YO)

Cómo puede ser que un pic24EP512 me quede corto de memoria, señores de MICROCHIP saquen pics con más memoria flash

Más de 45 mil lineas de codigo y aun no termino el equipo, asu mare!!

S34ML08G1TFI200 no necesito mas memoria externa.

Desconectado migsantiago

  • Colaborador
  • DsPIC33
  • *****
  • Mensajes: 8257
    • Sitio de MigSantiago
Re: Iniciando pic32MZ
« Respuesta #22 en: 14 de Diciembre de 2014, 14:22:07 »
Oye Kallitos, ¿tienes bien implementados los PPS para el pin RX que debe arrojar la interrución? ¿Se está transmitiendo el byte a ese pin a una velocidad apropiada? Si no fuera una buena velocidad, estaría detonándose la interrupción por falla.

Desconectado KALLITOS

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 1256
Re: Iniciando pic32MZ
« Respuesta #23 en: 14 de Diciembre de 2014, 21:00:45 »
Bueno ya en casa despues de este fin de semana.

La recepción si me funciona, en el main me detecta el flag de interrupción y puedo leer el UxRXREG, pero no entra en el handler. Por lo dicho el pps, baudios y demás está bien, pero aun asi voy a implementar la interrupción por falla a ver que sale.

saludos.
A un microcontrolador hay que sacarle hasta el ultimo byte....(YO)

Cómo puede ser que un pic24EP512 me quede corto de memoria, señores de MICROCHIP saquen pics con más memoria flash

Más de 45 mil lineas de codigo y aun no termino el equipo, asu mare!!

S34ML08G1TFI200 no necesito mas memoria externa.

Desconectado KALLITOS

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 1256
Re: Iniciando pic32MZ
« Respuesta #24 en: 14 de Diciembre de 2014, 21:37:07 »
Habilitacion de interrupcion FAULT UART
Código: C
  1. ///HABILITACION DE INTERRUPCION DE ERROR
  2.     IFS3bits.U1EIF = 0;
  3.     IEC3bits.U1EIE = 1;
  4.     IPC28bits.U1EIP = 1;
  5.     IPC28bits.U1RXIS = 1;
  6.  
  7.     ///HABILITACION DE INTERRUPCION DE ERROR
  8.     IFS4bits.U2EIF = 0;
  9.     IEC4bits.U2EIE = 1;
  10.     IPC36bits.U2EIP = 1;
  11.     IPC36bits.U2RXIS = 1;

Handler de interrupción.

Código: C
  1. void __ISR(_UART1_FAULT_VECTOR, ipl1)U1RX_error_Handler(void) {
  2.     flag_U1_error = 1; //
  3.     IFS3bits.U1EIF = 0;
  4. }
  5.  
  6. void __ISR(_UART2_FAULT_VECTOR, ipl1)U2RX_error_Handler(void) {
  7.     flag_U2_error = 1; //
  8.     IFS4bits.U2EIF = 0;
  9. }

Codigo para envío por UART de que sucedió error.

Código: C
  1. if (flag_U1_error) {
  2.             flag_U1_error = 0; //
  3.             sprintf(str_TX_UART, "UART1 ERROR!!!\r\n");
  4.             UART2PrintString(str_TX_UART);
  5.         }
  6.  
  7.         if (flag_U2_error) {
  8.             flag_U2_error = 0; //
  9.             sprintf(str_TX_UART, "UART2 ERROR!!!\r\n");
  10.             UART1PrintString(str_TX_UART);
  11.         }

Y qué creen..... nada, sigue igual.

Lo que he notado es que cuando no leo el UxRXREG y envío datos al pic, éste se resetea después de unos cuantos. Pero no salta el error o la interrupción.

Leo el flag de interrupción FAULT en el main, por si anda igual al UART que leyendo el flag en el main si funciona, y nada, no me manda error, y el micro se resetea.

Seguimos por acá.

saludos!!.
A un microcontrolador hay que sacarle hasta el ultimo byte....(YO)

Cómo puede ser que un pic24EP512 me quede corto de memoria, señores de MICROCHIP saquen pics con más memoria flash

Más de 45 mil lineas de codigo y aun no termino el equipo, asu mare!!

S34ML08G1TFI200 no necesito mas memoria externa.

Desconectado KALLITOS

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 1256
Re: Iniciando pic32MZ
« Respuesta #25 en: 14 de Diciembre de 2014, 21:51:56 »
Del pic32mz por el momento sólo me importan las interrupciones de Uart y Timers, y justo uart no jala, no puede ser. :?
Claro está, sus 200Mhz y sus 2MB de flash, ojala que esto último no me juegue mala pasada después.
A un microcontrolador hay que sacarle hasta el ultimo byte....(YO)

Cómo puede ser que un pic24EP512 me quede corto de memoria, señores de MICROCHIP saquen pics con más memoria flash

Más de 45 mil lineas de codigo y aun no termino el equipo, asu mare!!

S34ML08G1TFI200 no necesito mas memoria externa.

Desconectado KALLITOS

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 1256
Re: Iniciando pic32MZ
« Respuesta #26 en: 14 de Diciembre de 2014, 22:59:41 »
He modificado la frecuencia del PBclock y sigue igual.
A un microcontrolador hay que sacarle hasta el ultimo byte....(YO)

Cómo puede ser que un pic24EP512 me quede corto de memoria, señores de MICROCHIP saquen pics con más memoria flash

Más de 45 mil lineas de codigo y aun no termino el equipo, asu mare!!

S34ML08G1TFI200 no necesito mas memoria externa.

Desconectado migsantiago

  • Colaborador
  • DsPIC33
  • *****
  • Mensajes: 8257
    • Sitio de MigSantiago
Re: Iniciando pic32MZ
« Respuesta #27 en: 15 de Diciembre de 2014, 12:14:29 »
Kallitos, checa entonces que no esté habilitada la DMA. Checa que la interrupción se detone cuando llegue un byte, no cuando esté a medio llenarse el buffer (creoq ue ya lo hiciste). Checa que el Watchdog y el DeadMan estén deshabilitados.  :mrgreen:

Desconectado KILLERJC

  • Colaborador
  • DsPIC33
  • *****
  • Mensajes: 8242
Re: Iniciando pic32MZ
« Respuesta #28 en: 15 de Diciembre de 2014, 12:27:47 »
Kallitos, checa entonces que no esté habilitada la DMA. Checa que la interrupción se detone cuando llegue un byte, no cuando esté a medio llenarse el buffer (creo que ya lo hiciste). Checa que el Watchdog y el DeadMan estén deshabilitados.  :mrgreen:

Igual lo raro es que la interrupcion se dispara. Es decir su flag se activa, pero no procede a enviarlo al vector de interrupcion. Con lo que la configuracion de la UART andaria bien, lo unico que andaria mal es la parte de interrupciones.

Ahora se me ocurre lo siguiente

__ISR(_UART2_RX_VECTOR, ipl1)U2RXHandler

Tiene un offset definido? cuando se carga ese offset a los registros para el calculo de la interrupcion?. Los demas te andan pero jamas definiste un offset ( me refiero a cargarlos dentro del correspondiente registro ).
Podrias quitar casi todo y probar la UART pero con el Single Vector Mode, a lo que me refiero es que probes solo la UART2 asi y si ejecuta la interrupcion entonces no es un fallo de hardware sino un problema en la configuracion del Multi Vector Mode

Desconectado KALLITOS

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 1256
Re: Iniciando pic32MZ
« Respuesta #29 en: 15 de Diciembre de 2014, 13:03:51 »
Ya descargué MPLABX 2.26 y la cosa sigue igual, he creado un proyecto desde cero por si algo arrastra del 2.10, pero sigue igual.

Voy a probar con Single Vector Mode.
A ver como va.

Gracias por sus respuestas.
A un microcontrolador hay que sacarle hasta el ultimo byte....(YO)

Cómo puede ser que un pic24EP512 me quede corto de memoria, señores de MICROCHIP saquen pics con más memoria flash

Más de 45 mil lineas de codigo y aun no termino el equipo, asu mare!!

S34ML08G1TFI200 no necesito mas memoria externa.