本来是写个最简单的程序 就一个串口通信的程序
刚刚开始是完全不出字符
一单步发现 那个状态位卡那里了
于是果断的把NIOS的data cache禁掉了
然后把等待状态改变的语句粗暴的去掉了
然后出来的字符了
结果写完了之后是这个样子本来是写个最简单的程序 就一个串口通信的程序
刚刚开始是完全不出字符
一单步发现 那个状态位卡那里了
于是果断的把NIOS的data cache禁掉了
然后把等待状态改变的语句粗暴的去掉了
然后出来的字符了
结果写完了之后是这个样子
说白了就是一堆乱码
然后反复看了代码 除了注册中断的函数更新了 其余的代码和文献上完全一样啊
然后各种尝试 不出来
然后这两天写计划 这事就放下了
然后晚上走之前,忽然想到,有数据出来但是是乱码,应该就是协议参数不匹配的问题。
但是看了波特率 停止位 校验位 都没有错啊
最后在看了一眼设置波特率的函数
set_baudrate(115200);
11520 没有错
再看看实现:
UART->DIVISOR.WORD=(unsigned int)(ALT_CPU_FREQ/baudrate+0.5);
也没有问题
然后在头文件里面看了看这个常量ALT_CPU_FREQ
上面写着#define ALT_CPU_FREQ 50000000
但是我依稀记得给的外部时钟是100000000HZ啊
最后我发现 是我Qsys构建的时候 时钟修改过一次,里面的参数赋值是50MHz,但是在使用pll的时候,给的是100MHz。
然后吧这个参数改成100MHz,重新生成BSP
一切成功了
呵呵
这突然的一下心血来潮 解决了个大问题 否则不知道要调试多长时间
人脑很奇妙啊
一个疑问是,外部时钟给得和设定的完全不一致,其他的部分是怎么正常工作的!因为除了串口,其他对SDRAM和pio以及LCD操作居然都是正常的。
今天很开心,完。
更多相关内容,请关注我的个人微信公众号:hearwithlisten