NIOSII下简单的串口实验


本来是写个最简单的程序 就一个串口通信的程序
刚刚开始是完全不出字符
一单步发现 那个状态位卡那里了
于是果断的把NIOS的data cache禁掉了
然后把等待状态改变的语句粗暴的去掉了
然后出来的字符了
结果写完了之后是这个样子本来是写个最简单的程序 就一个串口通信的程序
刚刚开始是完全不出字符
一单步发现 那个状态位卡那里了
于是果断的把NIOS的data cache禁掉了
然后把等待状态改变的语句粗暴的去掉了
然后出来的字符了
结果写完了之后是这个样子

NIOSII下简单的串口实验_第1张图片
说白了就是一堆乱码 
然后反复看了代码 除了注册中断的函数更新了 其余的代码和文献上完全一样啊
然后各种尝试 不出来 
 然后这两天写计划 这事就放下了

然后晚上走之前,忽然想到,有数据出来但是是乱码,应该就是协议参数不匹配的问题。
但是看了波特率 停止位 校验位 都没有错啊
最后在看了一眼设置波特率的函数
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

一切成功了NIOSII下简单的串口实验_第2张图片
呵呵
这突然的一下心血来潮 解决了个大问题 否则不知道要调试多长时间
人脑很奇妙啊
一个疑问是,外部时钟给得和设定的完全不一致,其他的部分是怎么正常工作的!因为除了串口,其他对SDRAM和pio以及LCD操作居然都是正常的。

今天很开心,完。

 更多相关内容,请关注我的个人微信公众号:hearwithlisten

你可能感兴趣的:(FPGA,NIOS)