牛卧堂MCU技术交流
标题: NUC980 串口设置1200及以下波特率时无法设置成功 [打印本页]
作者: 匿名 时间: 2024-12-6 18:13
标题: NUC980 串口设置1200及以下波特率时无法设置成功
内核版本:
使用的就是github上最新的内核
在内核驱动代码nuc980_serial.c文件里的nuc980serial_set_termios函数里加入一条打印信息:
static void
nuc980serial_set_termios(struct uart_port *port, struct ktermios *termios, struct ktermios *old)
{
struct uart_nuc980_port *up = (struct uart_nuc980_port *)port;
unsigned int lcr = 0;
unsigned long flags;
unsigned int baud, quot;
switch (termios->c_cflag & CSIZE) {
case CS5:
lcr = 0;
break;
case CS6:
lcr |= 1;
break;
case CS7:
lcr |= 2;
break;
default:
case CS8:
lcr |= 3;
break;
}
if (termios->c_cflag & CSTOPB)
lcr |= NSB;
if (termios->c_cflag & PARENB)
lcr |= PBE;
if (!(termios->c_cflag & PARODD))
lcr |= EPE;
if (termios->c_cflag & CMSPAR)
lcr |= SPE;
baud = uart_get_baud_rate(port, termios, old, port->uartclk / 0xffff, port->uartclk / 11);
quot = nuc980serial_get_divisor(port, baud);
printk("in nuc980serial_set_termios, quot = %d, baud = %d \n", quot, baud); //增加这一条打印信息
/*
* Ok, we're now changing the port state. Do it with
* interrupts disabled.
*/
spin_lock_irqsave(&up->port.lock, flags);
up->port.read_status_mask = RX_OVER_IF /*| UART_LSR_THRE | UART_LSR_DR*/;
if (termios->c_iflag & INPCK)
up->port.read_status_mask |= FEF | PEF;
if (termios->c_iflag & (BRKINT | PARMRK))
up->port.read_status_mask |= BIF;
/*
* Characteres to ignore
*/
up->port.ignore_status_mask = 0;
if (termios->c_iflag & IGNPAR)
up->port.ignore_status_mask |= FEF | PEF;
if (termios->c_iflag & IGNBRK) {
up->port.ignore_status_mask |= BIF;
/*
* If we're ignoring parity and break indicators,
* ignore overruns too (for real raw support).
*/
if (termios->c_iflag & IGNPAR)
up->port.ignore_status_mask |= RX_OVER_IF;
}
if (termios->c_cflag & CRTSCTS)
up->mcr |= UART_MCR_AFE;
else
up->mcr &= ~UART_MCR_AFE;
nuc980serial_set_mctrl(&up->port, up->port.mctrl);
serial_out(up, UART_REG_BAUD, quot | 0x30000000);
serial_out(up, UART_REG_LCR, lcr);
spin_unlock_irqrestore(&up->port.lock, flags);
}
然后重新编译内核,下载重启后,通过应用程序设置波特率,设置1200波特率及以下波特率时,
这个打印的波特率就一直是9600
请问这个问题应该如何解决?
谢谢!
作者: 匿名 时间: 2024-12-10 15:36
检查下uartclk 是否设置成功
欢迎光临 牛卧堂MCU技术交流 (http://nuvoton-mcu.com/) |
Powered by Discuz! X3.2 |