2022/12/02 15:27
串口驱动文件:Ma35d1_serial.c (drivers\tty\serial)
函数ma35d1serial_set_termios中会根据是否设置CRTSCTS这个flag,来让
函数ma35d1serial_set_mctrl设置enable CTS/RTS auto-flow control
if (up->mcr & UART_MCR_AFE) {
// set RTS high level trigger
mcr = serial_in(up, UART_REG_MCR);
mcr |= 0x200;
mcr &= ~(0x2);
// enable CTS/RTS auto-flow control
serial_out(up, UART_REG_IER, (serial_in(up, UART_REG_IER) | (0x3000)));
// Set hardware flow control
up->port.flags |= UPF_HARD_FLOW;
}
如果需要使用这个功能,在用户层使用串口设置参数时需要设置CRTSCTS,这样驱动就会开启自动流控制
自动流控制,这个控制在FIFO达到最大时触发。
测试的时候可以将FIFO值改成最小(1byte),然后编写相关测试application,对串口进行读写,用示波器抓取RTS、CTS信号,看有没有高电平(正常传输数据时低电平有效)
修改FIFO:
函数ma35d1serial_startup
// FIFO trigger level 4 byte // RTS trigger level 8 bytes
serial_out(up, UART_REG_FCR, serial_in(up, UART_REG_FCR) | 0x10 | 0x20000);
-->修改为(参考FIFO设置寄存器)
// FIFO trigger level 4 byte // RTS trigger level 1 bytes
serial_out(up, UART_REG_FCR, serial_in(up, UART_REG_FCR) | 0x10 | 0x00000);
测试步骤:
1、烧录修改FIFO的image
2、编写串口应用程序,实现对串口进行读写
3、测试串口连接电脑
4、电脑串口应用打开并设置RTS/CTS
5、在开发板中运行步骤2编写的串口应用
6、输入/输出字符并用示波器测量RTS/CTS信号