页次: 1
你这个是spi屏,ili9341
https://www.kancloud.cn/lichee/lpi0/538999
我想让uart1在230400波特率下输出
在不分频的情况下,输出的是乱码
但是在115200波特率下输出是没问题的
查资料以后按照这里的方法进行了分频:https://wiki.sipeed.com/soft/Lichee/zh/Zero-Doc/Drive/UART.html
分频以后,发现有2个问题
1.uart1的在230400波特率下输出不是乱码了,但是信号不稳定,每200个字节就有一个错的
2.如果在uart0控制台进行键盘输入,就会出现如下的错误
buildroot login: !"#$%&'()*+,-./01234[ 4688.082081] serial8250_interrupt: 10186593 callbacks suppressed
[ 4688.082091] serial8250: too much work for irq36
[ 4688.092845] serial8250: too much work for irq36
[ 4688.097636] serial8250: too much work for irq36
[ 4688.102425] serial8250: too much work for irq36
[ 4688.107215] serial8250: too much work for irq36
[ 4688.112002] serial8250: too much work for irq36
[ 4688.116792] serial8250: too much work for irq36
[ 4688.121579] serial8250: too much work for irq36
[ 4688.126368] serial8250: too much work for irq36
[ 4688.131155] serial8250: too much work for irq36
请问是什么原因呢?如果要波特率超过115200,有什么办法呢?
--------------------下面是分配的操作方法-----------------------------------------------------------------------
https://wiki.sipeed.com/soft/Lichee/zh/Zero-Doc/Drive/UART.html
一、波特率分频问题#
为了串口通信稳定,一般要求波特率误差在2.5%以内。
V3S的uart是挂在APB2下,而APB2时钟是24M,所以对一些高速率的波特率,难以分频到合适的频率。
以921600为例,下面进行修改:
进入 uboot的arch/arm/mach-sunxi/clock_sun6i.c,修改uart时钟:
void clock_init_uart(void)
{
#if CONFIG_CONS_INDEX < 5
struct sunxi_ccm_reg *const ccm =
(struct sunxi_ccm_reg *)SUNXI_CCM_BASE;
/* uart clock source is apb2 */
writel(APB2_CLK_SRC_OSC24M| //这里改为APB2_CLK_SRC_PLL6,从内部pll6时钟分频
APB2_CLK_RATE_N_1| //这里预分频不变
APB2_CLK_RATE_M(1),
&ccm->apb2_div);
pll6时钟默认为600MHz,可以分出比较高的串口波特率。
600/0.9216/16=40.69, 舍入为41,相对误差为0.75%
/* ns16550 reg in the low bits of cpu reg */
#define CONFIG_SYS_NS16550_CLK 24000000 //这里改为600000000
#ifndef CONFIG_DM_SERIAL
请问从内核态发一个消息给用户态的进程,一般用什么方法?
v3s上试过netlink,第一条语句就出错了
/* 创建NETLINK socket */
skfd = socket(AF_NETLINK, SOCK_RAW, NETLINK_TEST);
if(skfd == -1)
{
perror("create socket error\n");
return -1;
}
# df
Filesystem 1K-blocks Used Available Use% Mounted on
/dev/root 991512 8148 915780 1% /
devtmpfs 27524 0 27524 0% /dev
tmpfs 28036 0 28036 0% /dev/shm
tmpfs 28036 24 28012 0% /tmp
tmpfs 28036 16 28020 0% /run
# fdisk -l
Disk /dev/mmcblk0: 29 GB, 31267487744 bytes, 61069312 sectors
954208 cylinders, 4 heads, 16 sectors/track
Units: cylinders of 64 * 512 = 32768 bytes
Device Boot StartCHS EndCHS StartLBA EndLBA Sectors Size Id Type
/dev/mmcblk0p1 0,32,33 8,73,1 2048 133119 131072 64.0M 6 FAT16
Partition 1 does not end on cylinder boundary
/dev/mmcblk0p2 8,73,2 135,195,60 133120 2181119 2048000 1000M 83 Linux
Partition 2 does not end on cylinder boundary
# ls /dev/mmcblk0p1
df不行,fdisk可以看到
usb_set_device_state(udev, USB_STATE_NOTATTACHED);
dev_info(&udev->dev, "1AAUSB disconnect, device number %d\n",
udev->devnum);
_dev_info(&udev->dev, "2BBBBUSB disconnect, device number %d\n",
udev->devnum);
printk(KERN_ERR "BBBcan't register hub driver\n"),
printk_emit(0,1,0,0, "KERN_ALERT AAAAAAAAAAAAA");
printk_emit(0,2,0,0, "KERN_INFO AAAAAAAAAAAAA");
printk_emit(0,3,0,0, "KERN_WARNING AAAAAAAAAAAAA");
printk_emit(0,4,0,0, "KERN_NOTICE AAAAAAAAAAAAA");
printk_emit(0,5,0,0, "KERN_DEBUG AAAAAAAAAAAAA");
这几个都可以输出
现在可以了,谁定义的这种语法啊,printk(KERN_ERR "BBBcan't register hub driver\n"), KERN_ERR后面没逗号
用的是V3s 4.13的版本,已经在menuconfig中设置了Kernel debugging,Kernel low-level debugging functions
在usb_disconnect这个函数中加了几句话,如下
void usb_disconnect(struct usb_device **pdev)
{
struct usb_port *port_dev = NULL;
struct usb_device *udev = *pdev;
struct usb_hub *hub = NULL;
int port1 = 1;
printk(KERN_NOTICE, "usb_disconnect begin\n");
/* mark the device as inactive, so any further urb submissions for
* this device (and any of its children) will fail immediately.
* this quiesces everything except pending urbs.
*/
usb_set_device_state(udev, USB_STATE_NOTATTACHED);
dev_info(&udev->dev, "AAUSB disconnect, device number %d\n",
udev->devnum);
_dev_info(&udev->dev, "BBBBUSB disconnect, device number %d\n",
udev->devnum);
printk(KERN_INFO, "---KERN_INFO usb_disconnect begin\n");
printk(KERN_ALERT, "--- KERN_ALERTalert usb_disconnect begin\n");
printk(KERN_WARNING, "---KERN_WARNING usb_disconnect begin\n");
printk(KERN_NOTICE, "---KERN_WARNING usb_disconnect begin\n");
printk(KERN_DEBUG, "---KERN_DEBUG usb_disconnect begin\n");
.....
}
输出结果为:
[ 35.141543] usb 2-1: AAUSB disconnect, device number 3
[ 35.146689] usb 2-1: BBBBUSB disconnect, device number 3
就是说dev_info,_dev_info两个函数可以输出,而printk函数没有输出,这是怎么回事啊?
页次: 1