cursada_mc2
Base de control de temperatura para EDU-CIAA-NXP
Loading...
Searching...
No Matches
uart_driver_irq.c File Reference

Implementacion del driver UART por interrupciones. More...

#include "uart_driver_irq.h"
#include <ring_buffer.h>
+ Include dependency graph for uart_driver_irq.c:

Go to the source code of this file.

Data Structures

struct  driver_uart_irq_state_t
 

Functions

static bool driver_uart_irq_select_channel (uint8_t channel)
 
bool driver_uart_irq_init (uint8_t channel, uint32_t baudrate)
 Inicializa un canal UART para operar por interrupciones.
 
void driver_uart_irq_deinit (void)
 Desinicializa la UART configurada y deshabilita sus interrupciones.
 
int driver_uart_irq_write (const void *data, uint16_t num_bytes)
 Encola datos para transmision por UART.
 
int driver_uart_irq_read (void *data, uint16_t num_bytes)
 Lee datos disponibles desde el buffer de recepcion.
 
int driver_uart_irq_available (void)
 Informa cuantos bytes hay disponibles para leer.
 
int driver_uart_irq_tx_free (void)
 Informa cuanto espacio libre queda en el buffer de transmision.
 
void driver_uart_irq_flush (void)
 Vacia los buffers de recepcion y transmision.
 
bool driver_uart_irq_is_initialized (void)
 Informa si el driver ya fue inicializado.
 
void driver_uart_irq_handler (void)
 Handler generico del driver para ser invocado desde la IRQ activa.
 
void UART0_IRQHandler (void)
 
void UART2_IRQHandler (void)
 
void UART3_IRQHandler (void)
 

Variables

static driver_uart_irq_state_t driver_uart_irq_state_
 Estado global de una unica instancia activa del driver.
 

Function Documentation

◆ driver_uart_irq_available()

int driver_uart_irq_available ( void  )
Returns
Cantidad de bytes pendientes en el buffer RX.

Definition at line 139 of file uart_driver_irq.c.

References driver_uart_irq_state_, driver_uart_irq_state_t::initialized, and driver_uart_irq_state_t::rx_ring.

◆ driver_uart_irq_deinit()

◆ driver_uart_irq_flush()

◆ driver_uart_irq_handler()

void driver_uart_irq_handler ( void  )

Normalmente no se llama desde la aplicacion. Se expone para permitir redireccionar handlers si fuera necesario.

LPCOpen mueve bytes entre la UART y los ring buffers.

Segun la fuente de interrupcion, la libreria deposita bytes recibidos en rx_ring o drena tx_ring hacia la FIFO de transmision.

Definition at line 172 of file uart_driver_irq.c.

References driver_uart_irq_state_, driver_uart_irq_state_t::initialized, driver_uart_irq_state_t::peripheral, driver_uart_irq_state_t::rx_ring, and driver_uart_irq_state_t::tx_ring.

Referenced by UART0_IRQHandler(), UART2_IRQHandler(), and UART3_IRQHandler().

◆ driver_uart_irq_init()

bool driver_uart_irq_init ( uint8_t  channel,
uint32_t  baudrate 
)

Configura el pinmux, la UART seleccionada, los buffers circulares y la IRQ correspondiente al canal.

Parameters
channelCanal UART a utilizar.
baudrateVelocidad de comunicacion en baudios.
Return values
trueSi la inicializacion fue correcta.
falseSi el canal solicitado no es valido.

RX y TX quedan desacopladas mediante buffers circulares.

La aplicacion trabaja contra estos buffers mientras la rutina de interrupcion atiende la FIFO fisica del periferico.

Definition at line 64 of file uart_driver_irq.c.

References driver_uart_irq_select_channel(), driver_uart_irq_state_, driver_uart_irq_state_t::initialized, driver_uart_irq_state_t::irq, driver_uart_irq_state_t::peripheral, driver_uart_irq_state_t::rx_data, driver_uart_irq_state_t::rx_ring, driver_uart_irq_state_t::tx_data, driver_uart_irq_state_t::tx_ring, UART_IRQ_RX_BUFFER_SIZE, and UART_IRQ_TX_BUFFER_SIZE.

◆ driver_uart_irq_is_initialized()

bool driver_uart_irq_is_initialized ( void  )
Return values
trueSi el driver se encuentra operativo.
falseSi el driver aun no fue inicializado.

Definition at line 167 of file uart_driver_irq.c.

References driver_uart_irq_state_, and driver_uart_irq_state_t::initialized.

◆ driver_uart_irq_read()

int driver_uart_irq_read ( void *  data,
uint16_t  num_bytes 
)
Parameters
dataPuntero al buffer destino.
num_bytesCantidad maxima de bytes a leer.
Returns
Cantidad de bytes efectivamente leidos.

Definition at line 127 of file uart_driver_irq.c.

References driver_uart_irq_state_, driver_uart_irq_state_t::initialized, driver_uart_irq_state_t::peripheral, and driver_uart_irq_state_t::rx_ring.

◆ driver_uart_irq_select_channel()

static bool driver_uart_irq_select_channel ( uint8_t  channel)
static

La seleccion del canal incluye tambien el pinmux.

De esta forma la inicializacion del driver queda autocontenida y no depende de una configuracion externa previa.

Definition at line 29 of file uart_driver_irq.c.

References driver_uart_irq_state_t::channel, driver_uart_irq_state_, driver_uart_irq_state_t::irq, driver_uart_irq_state_t::peripheral, UART_IRQ_CHANNEL_0, UART_IRQ_CHANNEL_2, and UART_IRQ_CHANNEL_3.

Referenced by driver_uart_irq_init().

◆ driver_uart_irq_tx_free()

int driver_uart_irq_tx_free ( void  )
Returns
Cantidad de bytes libres en el buffer TX.

Definition at line 148 of file uart_driver_irq.c.

References driver_uart_irq_state_, driver_uart_irq_state_t::initialized, and driver_uart_irq_state_t::tx_ring.

◆ driver_uart_irq_write()

int driver_uart_irq_write ( const void *  data,
uint16_t  num_bytes 
)
Parameters
dataPuntero al buffer de datos a transmitir.
num_bytesCantidad de bytes a transmitir.
Returns
Cantidad de bytes efectivamente encolados.

Definition at line 115 of file uart_driver_irq.c.

References driver_uart_irq_state_, driver_uart_irq_state_t::initialized, driver_uart_irq_state_t::peripheral, and driver_uart_irq_state_t::tx_ring.

◆ UART0_IRQHandler()

void UART0_IRQHandler ( void  )

Wrapper explicito para el vector UART0.

Solo despacha si el canal actualmente configurado pertenece a esta IRQ.

Definition at line 189 of file uart_driver_irq.c.

References driver_uart_irq_state_t::channel, driver_uart_irq_handler(), driver_uart_irq_state_, and UART_IRQ_CHANNEL_0.

◆ UART2_IRQHandler()

void UART2_IRQHandler ( void  )

◆ UART3_IRQHandler()

void UART3_IRQHandler ( void  )

Variable Documentation

◆ driver_uart_irq_state_