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á:
- Creación de un proyecto:
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 */
}
- Agregar código, compilar y debug:
--> Practica #3
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:
No hay comentarios.:
Publicar un comentario