Haremos uso del módulo ETHERNET con el que cuenta el MCU R5F563NB de la tarjeta de evaluación YRDKRX63N. Configuraremos el stack uIP partiendo de la nota de aplicación de Renesas R01AN0586EU0100 y arrancaremos el sistema en modo web Server.
- Configuraremos stack del uIP
- Se configura el driver RSPI
- Se correrá web Server y se mostrará la IP de asignación vía LCD
DESARROLLO:
- Del documento Renesas RX63N RDK User's Manual mostramos los pines asignados para la interfaz Ethernet.
PASOS:
- Creación de un proyecto:
2.- New/ C Project / Renesas RXC ToolChain
3.- Seleccionar el target R5F563NB, debug hardware Segger jLink, después next
4.- Seleccionar C/C++ Source file y por ultimo Finish.
5.- Una vez agregado el stack uIP a las carpetas, el árbol de archivos queda de la siguiente manera:
Donde bsp es a carpeta de inicialización y arranque del microcontrolador.
La carpeta Driver posee la capa física y registros del módulo ethernet.
La carpeta r_rspi_rx600 contiene todos los archivos necesarios para así poder acceder de forma fácil al RSPI.
La carpeta uip es el stack del ethernet.
La carpeta r_glyph contiene los archivos driver para el control de la LCD gráfica.
La carpeta user-app se define el arranque del tipo de aplicaciones a ejecutar sobre la capa del stack uip, es decir si es webserver, cliente, telnet, etc.
6.- La sección de memoria queda como la siguiente imagen:
Nota: en la carpeta del proyecto se tiene el archivo linker.esi el cual puede exportar toda la configuración sin necesidad de agregarles manualmente.
7.- Incluir todas las carpetas de los directorios mostrados a continuación:
8.- La función principal main.c que se encuentra en la carpeta uIP queda de la siguiente forma:
int main(void)
{
int i;
// Renesas -- uip_ipaddr_t ipaddr;
struct timer
periodic_timer, arp_timer;
struct uip_eth_addr mac_addr;
uint32_t ch = 0;
lcd_initialize();
display_uip_demo();
timer_init();
timer_set(&periodic_timer, CLOCK_SECOND / 2);
timer_set(&arp_timer, CLOCK_SECOND * 10);
/* Retrieve the MAC address and display
result. */
if (!get_mac(&mac_addr))
{
lcd_display(LCD_LINE5, "Using Default MAC:");
}
else
{
lcd_display(LCD_LINE5, "MAC Address = ");
}
display_mac_address(mac_addr.addr);
// Renesas --
network_device_init();
/* Wait until Ether device initailize
succesfully.
Make sure Ethernet cable is plugged in. */
while (R_ETHER_ERROR == R_Ether_Open(ch, (uint8_t*) &mac_addr.addr[0]));
// Renesas ++ set Ethernet
address
uip_setethaddr(mac_addr);
uip_init();
// Renesas --
//uip_ipaddr(ipaddr,
192,168,0,2);
//uip_sethostaddr(ipaddr);
dhcpc_init(&mac_addr.addr[0], 6);
httpd_init();
while (1)
{
// Renesas
-- uip_len = network_device_read();
uip_len = R_Ether_Read(ch, (void *)uip_buf);
if (uip_len > 0)
{
if (BUF->type == htons(UIP_ETHTYPE_IP))
{
uip_arp_ipin();
uip_input();
/* If the above function invocation
resulted in data that
should be sent out on the
network, the global variable
uip_len is set to a value >
0. */
if (uip_len > 0)
{
uip_arp_out();
// Renesas --
network_device_send();
R_Ether_Write(ch, (void *)uip_buf, (uint32_t)uip_len);
}
}
else if (BUF->type == htons(UIP_ETHTYPE_ARP))
{
uip_arp_arpin();
/* If the above function invocation
resulted in data that
should be sent out on the
network, the global variable
uip_len is set to a value >
0. */
if (uip_len >
0)
{
// Renesas --
network_device_send();
R_Ether_Write(ch, (void *)uip_buf, (uint32_t)uip_len);
}
}
}
else if (timer_expired(&periodic_timer))
{
timer_reset(&periodic_timer);
for (i = 0; i < UIP_CONNS; i++)
{
uip_periodic(i);
/* If the above function invocation
resulted in data that
should be sent out on
the network, the global variable
uip_len is set to a value >
0. */
if (uip_len > 0)
{
uip_arp_out();
// Renesas --
network_device_send();
R_Ether_Write(ch, (void *)uip_buf, (uint32_t)uip_len);
}
}
#if UIP_UDP
for (i = 0; i < UIP_UDP_CONNS; i++)
{
uip_udp_periodic(i);
/* If the above function invocation
resulted in data that
should be sent out on the
network, the global variable
uip_len is set to a value >
0. */
if (uip_len > 0)
{
uip_arp_out();
// Renesas --
network_device_send();
R_Ether_Write(ch, (void *)uip_buf, (uint32_t)uip_len);
}
}
#endif /* UIP_UDP */
/* Call the ARP
timer function every 10 seconds. */
if (timer_expired(&arp_timer))
{
timer_reset(&arp_timer);
uip_arp_timer();
}
}
// Insert user aplications
here.
// Call WEB
application that controls LEDs on the target board.
user_app();
}
return 0;
}
- Agregar código, compilar y debug:
Practica #18
2.- Compilar con el icono del martillo y debug con el icono del insecto:
No hay comentarios.:
Publicar un comentario