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