stm32/uart: Factor out code to set RX buffer to function uart_set_rxbuf.
This commit is contained in:
parent
9690757cca
commit
7d7f59d78b
@ -223,25 +223,18 @@ STATIC mp_obj_t pyb_uart_init_helper(pyb_uart_obj_t *self, size_t n_args, const
|
|||||||
}
|
}
|
||||||
self->char_width = CHAR_WIDTH_8BIT;
|
self->char_width = CHAR_WIDTH_8BIT;
|
||||||
}
|
}
|
||||||
self->read_buf_head = 0;
|
|
||||||
self->read_buf_tail = 0;
|
|
||||||
if (args.rxbuf.u_int >= 0) {
|
if (args.rxbuf.u_int >= 0) {
|
||||||
// rxbuf overrides legacy read_buf_len
|
// rxbuf overrides legacy read_buf_len
|
||||||
args.read_buf_len.u_int = args.rxbuf.u_int;
|
args.read_buf_len.u_int = args.rxbuf.u_int;
|
||||||
}
|
}
|
||||||
if (args.read_buf_len.u_int <= 0) {
|
if (args.read_buf_len.u_int <= 0) {
|
||||||
// no read buffer
|
// no read buffer
|
||||||
self->read_buf_len = 0;
|
uart_set_rxbuf(self, 0, NULL);
|
||||||
self->read_buf = NULL;
|
|
||||||
HAL_NVIC_DisableIRQ(self->irqn);
|
|
||||||
__HAL_UART_DISABLE_IT(&self->uart, UART_IT_RXNE);
|
|
||||||
} else {
|
} else {
|
||||||
// read buffer using interrupts
|
// read buffer using interrupts
|
||||||
self->read_buf_len = args.read_buf_len.u_int + 1; // +1 to adjust for usable length of buffer
|
size_t len = args.read_buf_len.u_int + 1; // +1 to adjust for usable length of buffer
|
||||||
self->read_buf = m_new(byte, self->read_buf_len << self->char_width);
|
uint8_t *buf = m_new(byte, len << self->char_width);
|
||||||
__HAL_UART_ENABLE_IT(&self->uart, UART_IT_RXNE);
|
uart_set_rxbuf(self, len, buf);
|
||||||
NVIC_SetPriority(IRQn_NONNEG(self->irqn), IRQ_PRI_UART);
|
|
||||||
HAL_NVIC_EnableIRQ(self->irqn);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// compute actual baudrate that was configured
|
// compute actual baudrate that was configured
|
||||||
|
@ -302,6 +302,21 @@ bool uart_init2(pyb_uart_obj_t *uart_obj) {
|
|||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void uart_set_rxbuf(pyb_uart_obj_t *self, size_t len, void *buf) {
|
||||||
|
self->read_buf_head = 0;
|
||||||
|
self->read_buf_tail = 0;
|
||||||
|
self->read_buf_len = len;
|
||||||
|
self->read_buf = buf;
|
||||||
|
if (len == 0) {
|
||||||
|
HAL_NVIC_DisableIRQ(self->irqn);
|
||||||
|
__HAL_UART_DISABLE_IT(&self->uart, UART_IT_RXNE);
|
||||||
|
} else {
|
||||||
|
__HAL_UART_ENABLE_IT(&self->uart, UART_IT_RXNE);
|
||||||
|
NVIC_SetPriority(IRQn_NONNEG(self->irqn), IRQ_PRI_UART);
|
||||||
|
HAL_NVIC_EnableIRQ(self->irqn);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
void uart_deinit(pyb_uart_obj_t *self) {
|
void uart_deinit(pyb_uart_obj_t *self) {
|
||||||
self->is_enabled = false;
|
self->is_enabled = false;
|
||||||
UART_HandleTypeDef *uart = &self->uart;
|
UART_HandleTypeDef *uart = &self->uart;
|
||||||
|
@ -64,6 +64,7 @@ void uart_init0(void);
|
|||||||
void uart_deinit_all(void);
|
void uart_deinit_all(void);
|
||||||
bool uart_exists(int uart_id);
|
bool uart_exists(int uart_id);
|
||||||
bool uart_init2(pyb_uart_obj_t *uart_obj);
|
bool uart_init2(pyb_uart_obj_t *uart_obj);
|
||||||
|
void uart_set_rxbuf(pyb_uart_obj_t *self, size_t len, void *buf);
|
||||||
void uart_deinit(pyb_uart_obj_t *uart_obj);
|
void uart_deinit(pyb_uart_obj_t *uart_obj);
|
||||||
void uart_irq_handler(mp_uint_t uart_id);
|
void uart_irq_handler(mp_uint_t uart_id);
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user