feat add RS485 using usart4 for edu_arm32 board and fix test_rs485 error

This commit is contained in:
Liu_Weichao
2023-08-17 15:04:48 +08:00
parent d73470de3c
commit 7077cf74c2
5 changed files with 211 additions and 29 deletions
@@ -50,6 +50,7 @@ Modification:
#include <bus_serial.h>
#include <dev_serial.h>
static int serial_isr_cnt = 0;
static DoubleLinklistType serialdev_linklist;
static int SerialWorkModeCheck(struct SerialDevParam *serial_dev_param)
@@ -138,6 +139,9 @@ static inline int SerialDevIntRead(struct SerialHardwareDevice *serial_dev, stru
if (serial_dev->serial_fifo.serial_rx->serial_recv_num == serial_dev->serial_fifo.serial_rx->serial_send_num) {
if (RET_FALSE == serial_dev->serial_fifo.serial_rx->serial_rx_full) {
CriticalAreaUnLock(lock);
if (0 == serial_isr_cnt) {
KSemaphoreSetValue(serial_dev->haldev.dev_sem, 0);
}
break;
}
}
@@ -151,11 +155,13 @@ static inline int SerialDevIntRead(struct SerialHardwareDevice *serial_dev, stru
if (RET_TRUE == serial_dev->serial_fifo.serial_rx->serial_rx_full) {
serial_dev->serial_fifo.serial_rx->serial_rx_full = RET_FALSE;
}
if (serial_isr_cnt > 0) {
serial_isr_cnt--;
}
CriticalAreaUnLock(lock);
//MdelayKTask(20);
*read_data = get_char;
read_data++;
read_length--;
@@ -713,6 +719,10 @@ void SerialSetIsr(struct SerialHardwareDevice *serial_dev, int event)
if (serial_dev->haldev.dev_recv_callback) {
serial_dev->haldev.dev_recv_callback((void *)serial_dev, serial_rx_length);
}
lock = CriticalAreaLock();
serial_isr_cnt += 1;
CriticalAreaUnLock(lock);
KSemaphoreAbandon(serial_dev->haldev.dev_sem);
}