1、【优化】RTT串口框架中断读取及设置接口。
Signed-off-by: armink <armink.ztl@gmail.com>
This commit is contained in:
parent
8a913c86b5
commit
334f97f211
|
@ -95,7 +95,7 @@ static rt_err_t stm32_configure(struct rt_serial_device *serial, struct serial_c
|
|||
static rt_err_t stm32_control(struct rt_serial_device *serial, int cmd, void *arg)
|
||||
{
|
||||
struct stm32_uart* uart;
|
||||
rt_uint32_t *irq_type = (rt_uint32_t *)(arg);
|
||||
rt_uint32_t irq_type = (rt_uint32_t)(arg);
|
||||
|
||||
RT_ASSERT(serial != RT_NULL);
|
||||
uart = (struct stm32_uart *)serial->parent.user_data;
|
||||
|
@ -105,12 +105,12 @@ static rt_err_t stm32_control(struct rt_serial_device *serial, int cmd, void *ar
|
|||
/* disable interrupt */
|
||||
case RT_DEVICE_CTRL_CLR_INT:
|
||||
|
||||
if ((*irq_type) == RT_DEVICE_FLAG_INT_RX)
|
||||
if (irq_type == RT_DEVICE_FLAG_INT_RX)
|
||||
{
|
||||
/* disable rx irq */
|
||||
USART_ITConfig(uart->uart_device, USART_IT_RXNE, DISABLE);
|
||||
}
|
||||
else if ((*irq_type) == RT_DEVICE_FLAG_INT_TX)
|
||||
else if (irq_type == RT_DEVICE_FLAG_INT_TX)
|
||||
{
|
||||
/* disable tx irq */
|
||||
USART_ITConfig(uart->uart_device, uart->tx_irq_type, DISABLE);
|
||||
|
@ -123,12 +123,12 @@ static rt_err_t stm32_control(struct rt_serial_device *serial, int cmd, void *ar
|
|||
break;
|
||||
/* enable interrupt */
|
||||
case RT_DEVICE_CTRL_SET_INT:
|
||||
if ((*irq_type) == RT_DEVICE_FLAG_INT_RX)
|
||||
if (irq_type == RT_DEVICE_FLAG_INT_RX)
|
||||
{
|
||||
/* enable rx irq */
|
||||
USART_ITConfig(uart->uart_device, USART_IT_RXNE, ENABLE);
|
||||
}
|
||||
else if ((*irq_type) == RT_DEVICE_FLAG_INT_TX)
|
||||
else if (irq_type == RT_DEVICE_FLAG_INT_TX)
|
||||
{
|
||||
/* enable tx irq */
|
||||
USART_ITConfig(uart->uart_device, uart->tx_irq_type, ENABLE);
|
||||
|
@ -141,37 +141,34 @@ static rt_err_t stm32_control(struct rt_serial_device *serial, int cmd, void *ar
|
|||
break;
|
||||
/* get interrupt flag */
|
||||
case RT_DEVICE_CTRL_GET_INT:
|
||||
if ((*irq_type) == RT_DEVICE_FLAG_INT_RX)
|
||||
if (irq_type == RT_DEVICE_FLAG_INT_RX)
|
||||
{
|
||||
/* return rx irq flag */
|
||||
(*irq_type) = USART_GetITStatus(uart->uart_device, USART_IT_RXNE);
|
||||
return USART_GetITStatus(uart->uart_device, USART_IT_RXNE);
|
||||
}
|
||||
else if ((*irq_type) == RT_DEVICE_FLAG_INT_TX)
|
||||
else if (irq_type == RT_DEVICE_FLAG_INT_TX)
|
||||
{
|
||||
/* return tx irq flag */
|
||||
(*irq_type) = USART_GetITStatus(uart->uart_device, uart->tx_irq_type);
|
||||
return USART_GetITStatus(uart->uart_device, uart->tx_irq_type);
|
||||
}
|
||||
break;
|
||||
/* get USART flag */
|
||||
case RT_DEVICE_CTRL_GET_FLAG:
|
||||
if ((*irq_type) == RT_DEVICE_FLAG_INT_RX)
|
||||
if (irq_type == RT_DEVICE_FLAG_INT_RX)
|
||||
{
|
||||
/* return rx irq flag */
|
||||
(*irq_type) = USART_GetFlagStatus(uart->uart_device,
|
||||
USART_FLAG_RXNE);
|
||||
return USART_GetFlagStatus(uart->uart_device, USART_FLAG_RXNE);
|
||||
}
|
||||
else if ((*irq_type) == RT_DEVICE_FLAG_INT_TX)
|
||||
else if (irq_type == RT_DEVICE_FLAG_INT_TX)
|
||||
{
|
||||
/* return tx flag */
|
||||
if (uart->tx_irq_type == USART_IT_TC)
|
||||
{
|
||||
(*irq_type) = USART_GetFlagStatus(uart->uart_device,
|
||||
USART_FLAG_TC);
|
||||
return USART_GetFlagStatus(uart->uart_device, USART_FLAG_TC);
|
||||
}
|
||||
else if (uart->tx_irq_type == USART_IT_TXE)
|
||||
{
|
||||
(*irq_type) = USART_GetFlagStatus(uart->uart_device,
|
||||
USART_FLAG_TXE);
|
||||
return USART_GetFlagStatus(uart->uart_device, USART_FLAG_TXE);
|
||||
}
|
||||
}
|
||||
break;
|
||||
|
@ -445,7 +442,7 @@ void rt_hw_usart_init(void)
|
|||
|
||||
#if defined(RT_USING_UART1) || defined(RT_USING_REMAP_UART1)
|
||||
uart = &uart1;
|
||||
config.baud_rate = BAUD_RATE_9600;
|
||||
config.baud_rate = BAUD_RATE_115200;
|
||||
|
||||
serial1.ops = &stm32_uart_ops;
|
||||
serial1.config = config;
|
||||
|
|
|
@ -131,22 +131,18 @@ BOOL xMBPortSerialInit(UCHAR ucPORT, ULONG ulBaudRate, UCHAR ucDataBits,
|
|||
void vMBPortSerialEnable(BOOL xRxEnable, BOOL xTxEnable)
|
||||
{
|
||||
rt_uint32_t recved_event;
|
||||
uint32_t irq_type;
|
||||
if (xRxEnable)
|
||||
{
|
||||
/* waiting for last transmit complete */
|
||||
while (1)
|
||||
{
|
||||
irq_type = RT_DEVICE_FLAG_INT_TX;
|
||||
serial->ops->control(serial, RT_DEVICE_CTRL_GET_FLAG, &irq_type);
|
||||
if (irq_type)
|
||||
if (serial->ops->control(serial, RT_DEVICE_CTRL_GET_FLAG, (void *)RT_DEVICE_FLAG_INT_TX))
|
||||
{
|
||||
break;
|
||||
}
|
||||
}
|
||||
/* enable RX interrupt */
|
||||
irq_type = RT_DEVICE_FLAG_INT_RX;
|
||||
serial->ops->control(serial, RT_DEVICE_CTRL_SET_INT, &irq_type);
|
||||
serial->ops->control(serial, RT_DEVICE_CTRL_SET_INT, (void *)RT_DEVICE_FLAG_INT_RX);
|
||||
/* switch 485 to receive mode */
|
||||
SLAVE_RS485_RECEIVE_MODE;
|
||||
}
|
||||
|
@ -155,14 +151,12 @@ void vMBPortSerialEnable(BOOL xRxEnable, BOOL xTxEnable)
|
|||
/* switch 485 to transmit mode */
|
||||
SLAVE_RS485_TRANS_MODE;
|
||||
/* disable RX interrupt */
|
||||
irq_type = RT_DEVICE_FLAG_INT_RX;
|
||||
serial->ops->control(serial, RT_DEVICE_CTRL_CLR_INT, &irq_type);
|
||||
serial->ops->control(serial, RT_DEVICE_CTRL_CLR_INT, (void *)RT_DEVICE_FLAG_INT_RX);
|
||||
}
|
||||
if (xTxEnable)
|
||||
{
|
||||
/* start serial transmit */
|
||||
rt_event_send(&event_serial, EVENT_SERIAL_TRANS_START);
|
||||
irq_type = RT_DEVICE_FLAG_INT_TX;
|
||||
}
|
||||
else
|
||||
{
|
||||
|
@ -170,7 +164,6 @@ void vMBPortSerialEnable(BOOL xRxEnable, BOOL xTxEnable)
|
|||
rt_event_recv(&event_serial, EVENT_SERIAL_TRANS_START,
|
||||
RT_EVENT_FLAG_OR | RT_EVENT_FLAG_CLEAR, 0,
|
||||
&recved_event);
|
||||
irq_type = RT_DEVICE_FLAG_INT_TX;
|
||||
}
|
||||
}
|
||||
|
||||
|
|
Loading…
Reference in New Issue