domingo, 22 de enero de 2017

PRACTICA # 3 UART


OBJETIVO:
          Se hará uso del módulo del puerto serial UART2 con el que cuenta el MCU R5F562N8 de la tarjeta de evaluación YRDKRX62N. Se le enviara un dato de 8 bits por medio de una hypeterminal serial, el MCU la recibe en su interrupción y ese mismo dato de 8 bits lo reenvía de regreso a la hypeterminal.
  •  Configurar la unidad UART2
  •  Habilitar ambas interrupciones (Send – Receive)
  •  Hacer Eco del dato recibido

DESARROLLO:
Del manual Renesas RX62N RDK User's Manual ubicamos los pines del UART2:

  • Para poder utilizar el conversor USB-SERIAL necesitamos soldar 3 cables a la tarjeta YRDKRX62N (ya que no se dispone de un socket para estas señales). Los cuales irán a TXD2, RXD2 y GND de la figura página 1 del documento YRDKRX62N schematic.pdf

  •  La conexión con el USB-Serial será:
Conectamos TxD2 --> RxD, TxD --> RxD2 y GND --> GND


PASOS:

  •  Creación de un proyecto:
1.- Abrir el software e2studio
2.- New/ C Project / Renesas RXC ToolChain


3.- Seleccionar el target R5F562N8, debug hardware Segger jLink, después next


4.- Seleccionar C/C++ Source file y por ultimo Finish.


5.- Configuraremos el UART 2 por medio del módulo SCI2 a 9600 bps, 1 bit stop y no paridad en el archivo uart.c:

extern void sci2_init(void)
{
            MSTP(SCI2) = 0; /* Enable module */
            SCI2.SCR.BYTE = 0; /* Reset module */
            IOPORT.PFFSCI.BIT.SCI2S = 1; /* Remap pins to B set */

            PORT5.DDR.BIT.B2 = 0;        // P52 RxD2-B
            PORT5.ICR.BIT.B2 = 1;        // Input buffer enabled
            PORT5.DDR.BIT.B0 = 1;        // P50 TxD2-B

            SCI2.SCR.BIT.CKE = 0;   /* Use internal baudrate generator, SCK pin function os IO port */
            SCI2.SMR.BYTE = 0;      /* PCLK/1, 8N1, async mode, multiprocessor mode disabled */
            SCI2.SCMR.BIT.SMIF = 0; /* Not smart card mode */
            SCI2.SCMR.BIT.SINV = 0; /* No TDR inversion */
            SCI2.SCMR.BIT.SDIR = 0; /* LSB first */
            SCI2.SEMR.BIT.ACS0 = 0; /* Use external clock */
            SCI2.SEMR.BIT.ABCS = 0; /* 16 base clock cycles for 1 bit period */

            /* Set baudrate */
            /* For 16 base clock cycles change formula to PCLK / (32 * BAUD ) - 1 */
            /* For 8 base clock cycles change formula to PCLK / (16 * BAUD ) - 1 */
            // set for 9600BPS with pclk/1   -> n = 0
            // (48000000/64*(2^[(2*n)-1)]*9600)-1
            SCI2.BRR = PCLK_FREQUENCY / (32 * SCI2_BAUDRATE) - 1;

            /* Reset interrupt flags */
            IR(SCI2, TXI2)= 0;
            IR(SCI2, RXI2)= 0;

            /* Set priorities */
            IPR(SCI2, TXI2)= 3;  // highest = 15
            IPR(SCI2, RXI2)= 3;  // highest = 15

            /* Enable interrupts */
            IEN(SCI2, RXI2)= 1;   // Enable Interrupt RX
            IEN(SCI2, TXI2)= 1;   // Enable Interrupt TX

            SCI2.SCR.BYTE |= 0xF0; //enable tx/rx  NOTA: No se puede hacer funcionar el uart si se escriben los bits individuales de abajo ;(

            //SCI2.SCR.BIT.RIE = 1; /* Enable RX interrupt flag */
            //SCI2.SCR.BIT.TIE = 1; /* Enable TX interrupt flag */
            //SCI2.SCR.BIT.RE = 1; /* Enable receiver  */
            //SCI2.SCR.BIT.TE = 1; /* Enable transmitter */

}

6.- Agregaremos el siguiente código a las 2 interrupciónes que está en el archivo interrupt_handlers.c:

// SCI2 RXI2
unsigned char data_uart;
void Excep_SCI2_RXI2(void)
{
            data_uart = SCI2.RDR;
            SCI2.TDR = data_uart;
            IEN(SCI2, TXI2)= 1;   // Enable Interrupt TX2
}

// SCI2 TXI2
void Excep_SCI2_TXI2(void)
{
            IEN(SCI2, TXI2)= 0;   // Disable TX2 interrupt */
}

Como se puede observar lo que recibe data_uart en su interrupción de vector Excep_SCI2_RXI2 es cargado al registro SCI2.TDR y se habilita su interrupción TXI2 para que lo envié de regreso al puerto UART y así hacer eco de todo lo que se reciba.

  •  Agregar código, compilar y debug:
1.- Bajar el código de:

2.- Si el compilador llega a marcar un error como:

Ir a propiedades del proyecto y agregar BIntPRG_1 como se muestra en la siguiente imagen:



3.- Compilar con el icono del martillo y debug con el icono del insecto:


4.- Abrir Comm operator u alguna otra hypeterminal serial, configurarla a 9600 bps:



CONEXIÓN:

No hay comentarios.:

Publicar un comentario