NIOSII下簡單的串口實驗


本來是寫個最簡單的程序 就一個串口通信的程序
剛剛開始是完全不出字符
一單步發現 那個狀態位卡那裏了
於是果斷的把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

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章