黑金AC7010开发板, rtt v4.0.1 zynq7000 串口打印出的字符是乱码的,, 应该是串口波特率没调好, 看设置bsp里面的clk是50MHz,, 板子实际是100MHz,
uart_hw.h 文件里面 UART_BAUDDIV_115200 定义从6 改为 13,, 串口还是乱码,, 有没有人遇到同样的问题?
这两天也在折腾zynq,碰到和楼主一样的问题,仔细检查后发现,应该是uart驱动里面写的不够严谨造成的,具体地方请见:
这个函数里面的这句话
这里的目的是设定分频系数,但是设定方法是直接在原有基础上采取了或运算,但是问题也就出在这里,因为在载入rtt镜像前,不管是前处理程序或者uboot都会对这个寄存器进行操作,把uart外设的输入频率设置成100M,至少我这边用的xilinx的原厂sdk是这么做的,那在原有数据的基础上,再叠加一个或运算,那这个分频系数,未必就是你想要的20,比如原来我这个里面启动程序设定的就是0xa,当执行了上面这句,就相当远0x0a | 0x14 = 0x1e,所以分频结果就不可能是50M,而是33.333M了,所以串口出来的数据就肯定是乱的了。知道原因后怎么修改应该不用说了吧
此时应该先mask一下
@aozima 解决这个问题是要Mask一下吗?楼主最后说不用说修改办法,可我真的没搞懂怎么去做。。。。
百度一下 https://www.cnblogs.com/sypspace/p/12284098.html
@aozima 楼主说的是在原来的基础上进行或运算。但是,上述算法不就是直接对寄存器的一些控制位,0x14<<8|0x01是对寄存器的第9-13位设置20分频器和第1位设置为1,使能参考时钟。不是直接进行置位赋值吗?为什么会有在原来基础上进行或运算?
@aozima 对,是应该mask一下的。多谢您了