Autor Tema: Problema de transmisión en UART en PIC32  (Leído 2858 veces)

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

Desconectado reiniertl

  • Moderadores
  • PIC24H
  • *****
  • Mensajes: 1187
Problema de transmisión en UART en PIC32
« en: 09 de Julio de 2011, 23:17:30 »
He estado experimentando con una placa Ethernet Starter Kit que me ha prestado un colega en la universidad, es una bestialidad. Ya le he puesto FreeRTOS y he estado desarrollando un driver de UART para ella. El problema está en que cuando se habilita la UART en la subrrutina de interrupción limpio la bandera de transmisión de la ISR, esta no se limpia.

Al principio pensaba que era un problema de compilación o algo así o de mi otra placa de PIC32 la de microingenia. Así que me prestan esta que tiene depuración incorporda e integrada con MPLAB y nada el problema sigue.

Probé habilitando y deshabilitando la bandera por sw, sin el transmisor habilitado y todo bien, en cuanto se habilita el TX, vienen los problemas, por más que uno limpie la bandera eta permanece activa. Cuando el modo de trabajo de señalización de it por Tx es ´11´ el cual según datasheet está reservado todo funciona bien, se puede limpiar la bandera, pero lógicamente el periférico no sabe cuando interrumpir. Cuando se pone cualquiera de los otros nada no funciona como dice el datasheet porque la bandera no se puede limpiar, lo que sí hace el módulo es habilitar IT por Tx según el datasheet. He optado por habilitar el transmisor solamente cuando voy a transmitir y deshabilitarlo cuando acabo, y funciona bien, gracias a FreeRTOS no es el mayor problema hacer el driver así. Pero quiero saber de donde sale el problema.

Saludos
Reinier

Desconectado KILLERJC

  • Colaborador
  • DsPIC33
  • *****
  • Mensajes: 8242
Re: Problema de transmisión en UART en PIC32
« Respuesta #1 en: 10 de Julio de 2011, 14:38:44 »
¿Tendra algo que ver con esto?:

Código: [Seleccionar]
2: These registers have an associated Clear register (IFSxCLR) at an offset of 0x4 bytes. Writing a ‘1’ to any
bit position in the Clear register will clear valid bits in the associated register. Reads from the Clear register
should be ignored.
3: These registers have an associated Set register (IFSxSET) at an offset of 0x8 bytes. Writing a ‘1’ to any
bit position in the Set register will set valid bits in the associated register. Reads from the Set register
should be ignored.

Y vos estas tratando de limpiar el flag directamente ¿?

Sacado de la seccion 8 - Interrupciones de los PIC32MX
Código: [Seleccionar]
http://ww1.microchip.com/downloads/en/DeviceDoc/DS-61108E.pdf
¿o Esto?:

Código: [Seleccionar]
21.5.2 Transmit Interrupt

The Transmit Interrupt Flag Status bit (UxTXIF) is located in the corresponding Interrupt Flag
Status register (IFS). The UTXISEL control bits (UxSTA<15:14>) determine when the UART will
generate a transmit interrupt. The UxTXIF bit is set when the module is enabled. Switching
between the interrupt modes during operation is possible, but it is not recommended unless the
buffer is empty.

While the UxTXIF flag bit indicates the status of the UxTXREG register, the TRMT bit
(UxSTA<8>) indicates the status of the UxTSR register. The TRMT status bit is a read-only bit
and it is set when the UxTSR register is empty. No interrupt logic is tied to this bit, so the user
has to poll this bit to determine if the UxTSR register is empty.

To clear an interrupt for UART modules having 4-level-deep FIFO, the corresponding UxTXIF
flag bit must be cleared in the associated IFSx register.

For UART modules having 8-level-deep FIFO, an interrupt is generated and asserted when the
interrupt condition specified by the UTXISEL control bits is true. This means, to clear an interrupt
for these modules, before clearing the corresponding UxTXIF flag bit, the user application must
ensure that the interrupt condition specified by the UTXISEL control bits is no longer true

De. la seccion 21 - UART para PIC32MX

Código: [Seleccionar]
http://ww1.microchip.com/downloads/en/DeviceDoc/61107F.pdf
Aunque yo jamas use un PIC32,, e incluso recien me inicio en los dsPIC... espero lelgar algun dia...
« Última modificación: 10 de Julio de 2011, 14:44:33 por KILLERJC »

Desconectado reiniertl

  • Moderadores
  • PIC24H
  • *****
  • Mensajes: 1187
Re: Problema de transmisión en UART en PIC32
« Respuesta #2 en: 13 de Julio de 2011, 19:35:13 »
Citar
the user application must ensure that the interrupt condition specified by the UTXISEL control bits is no longer true

Esto debió pasarseme porque si lo mira uno bien, en cuanto se me vacíe la FIFO de TX comenzará el problema hasta que haya más datos por transmitir, así que el método de habilitar deshabilitar el Tx es el correcto. Lo que pasa es que migré un código para PIC24 que tenía montado en PROTEUS (no tengo PIC24 de verdad) y todo OK, en cuanto metí el código en PIC32 los problemas, así que voy a dar una pasada más a fondo al manual.

Gracias.
Reinier

Desconectado KILLERJC

  • Colaborador
  • DsPIC33
  • *****
  • Mensajes: 8242
Re: Problema de transmisión en UART en PIC32
« Respuesta #3 en: 14 de Julio de 2011, 00:50:02 »
Bueno me alegro haberte sido util.. Yo cuando termine con ASM en los dsPIC quiero comenzar con los PIC32,, aunque eh visto que no hay mcuha informacion y encima es solo C... no hay ASM o si ?

Desconectado Maxtronic

  • PIC10
  • *
  • Mensajes: 27
Re: Problema de transmisión en UART en PIC32
« Respuesta #4 en: 14 de Julio de 2011, 01:10:05 »
Bien por los Dspic estaras con la transformada Z, eso de hacer filtros, procesamineto de sonido es bastante.

Desconectado cristian_elect

  • PIC18
  • ****
  • Mensajes: 453
Re: Problema de transmisión en UART en PIC32
« Respuesta #5 en: 14 de Julio de 2011, 17:52:54 »
En la escuela los que programan Dspic son los que esta en proyectos de control automatico 2.

Desconectado KILLERJC

  • Colaborador
  • DsPIC33
  • *****
  • Mensajes: 8242
Re: Problema de transmisión en UART en PIC32
« Respuesta #6 en: 25 de Julio de 2011, 00:11:51 »
Suerte q le dan dsPIC xD,, cuando yo curse aprendi con el 16F84A xD

En la univeridad conoci a todos los demas pero jamas pude manejar uno.. entonces como hace poco termine de cursar me quise meter por q me intrigaba en gran medida.. asi que pedi un PIC32 y un dsPIC para jugar un rato.. no sera para armar proyectos pero por lo menos para saber usarlos como minimo.


 

anything