SOPC第二课 新手易犯错误和小灯闪烁SOPC代码以及固化讲解
-
QSYS復位端連接錯誤
如上圖所示,由于我們的reset是外邊按鍵給的,我說我們需要導出來,但是如果我們點選了,就不會導出了,一旦點選,復位信號由我們的nios系統給。 -
nios是否破解
由于我們的nios IP核的fast版本是收費的,我們需要打開我們的license,看我們是否購買(破解)了nios的IP核. -
關閉優化
如果LED燈下載到開發板,仍然未閃爍。那么關閉掉優化,很有可能編譯器把延時給優化掉了。 -
重新生成BSP
只要quartus編譯了,就必須重新編譯bsp,
- 代碼解析
#include “system.h”
system.h包含了我們在QSYS設計的硬件信息。
我們可以雙擊打開
上圖代表CPU的頻率是50MHz
從上面我們可以清晰地看到這個地址,就是我們硬件對應的基地址。
同理我們也可以看到我們的RAM基地址和rom的基地址。
#include “altera_avalon_pio_regs.h”
下面我們來查看第二句代碼的含義,按住ctrl鍵,即可打開說明。
我們來看一下這三句代表什么意思呢?第一個代表PIO的地址,第二個代表rd,讀取pio的數據,第三個代表給pio寫入數據。這里我們僅僅用了第三句而已。PIO寄存器的其他特性,我們可以暫時不用管,后面再補充。
#include “alt_types.h”
下面我們來看第三句代碼的含義。
這句話代表了數據類型的定義
我們再看下一句代碼
int main(void)
{
alt_u8 led = 0;
那么 alt_u8 代表什么意思呢,代表了數據的定義。
說明了這是一個unsigned char類型
同理,下一句代碼
alt_u32 i;
這是一個無符號,長整型
第一句賦值初值0
然后對我們的PIO寄存器賦值,這里可以看到用了我們之前說過的 IOWR_ALTERA_AVALON_PIO_DATA 函數,調用此函數
這個函數是寫函數,給一個地址,給一個數據。
我們給了一個基地址,這個地址在哪里定義的呢?
在我們的system.h里面
另外注意的是PIO_LED 這個名稱是我們QSYS中定義PIO的名稱,所以,如果直接拷貝別人的代碼,一定要把QSYS的名字設置一樣。
所以經過了上面的代碼,置位為0,就將我們的LED點亮了。
我們再接著看下面的代碼
while(i<500000) //延時功能,非精確延時,數值太小將無法看到燈的閃爍效果 { i++; } led = 1; IOWR_ALTERA_AVALON_PIO_DATA(PIO_LED_BASE, led);//熄滅LED燈上面的代碼就很容易看懂了,給PIO的寄存器賦值為1,就是熄滅狀態
while(i<500000) //延時功能,非精確延時,數值太小將無法看到燈的閃爍效果{i++;}}
return 0;
}
然后又延時一段時間,繼續while循環,回到開頭又賦值為0.
綜上述,代碼就解釋完畢了。
下面我們再做一些補充
搜索字符串:ctrl+H
PIO的寄存器這個頭文件在哪里呢/
- 如何固化到開發板上
選中第二個,存儲器的初始化文件。
然后點擊build
其中sys_rom.hex就是我們需要的文件
然后回到quartus中,添加文件到工程
重新編譯
這個時候,我們不用再eclipse就能看到我們的效果了。
然后掉電不丟失的話,我們按照quartus的操作就行了
成功固化實現小燈閃爍
總結
以上是生活随笔為你收集整理的SOPC第二课 新手易犯错误和小灯闪烁SOPC代码以及固化讲解的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 被人崇拜的欧拉恒等式
- 下一篇: 解决NIOS II工程拷贝后无法编译问题