在用nios ii做外設時序驅動的時候,經常會用延時函式。有時會常使用某個fpga晶元和時鐘,比如筆者一直使用的晶元是cyclone系列 ep2c35f484c8n,pll輸入sopc時鐘是50m。因此,提前測試硬體執行延時情況並編寫今後常用的延時函式有一定的意義。
軟體:quartus ii 9.0, nios ii 9.0
硬體配置:
1、 在sopc中呼叫interval timer核
圖 1 呼叫interval timer核
2、配置interval time
圖 2 interval timer引數配置
各引數說明請參照quartus ii handbook version 9.0 volume 5: embedded peripherals, chapter 24: interval timer core.請根據需要進行設定。
3、更改核的名稱
該名稱可以按照自己的習慣取名。
圖 3 更改核的名稱
4、生成sopc系統後,要在nios ii中進行設定。右擊工程名->system library properties-> system library->timestamp timer
圖 4 nios ii設定
5、完成nios ii設定後,編譯。
軟體程式設計
參考nios ii software developer』s handbook
例程:#include //printf()
#include //usleep()
#include "system.h"
#include //timestamp
#include "alt_types.h"
void delay0(unsigned long m)
void delay1(unsigned long n)
void delay2(unsigned long p)
int main(void)
else
return 0; }
執行結果如下:
系統時鐘頻率是 50000000 hz
usleep(1)= 42 us
usleep(4)= 38 us
usleep(7)= 40 us
usleep(10)= 44 us
usleep(40)= 72 us
usleep(70)= 102 us
usleep(100)= 130 us
usleep(400)= 418 us
usleep(700)= 706 us
usleep(1000)= 994 us
usleep(4000)= 3874 us
usleep(7000)= 6754 us
usleep(10000)= 9634 us
usleep(40000)= 38435 us
usleep(70000)= 67234 us
usleep(100000)= 96035 us
for(1)= 9 us
for(4)= 11 us
for(7)= 15 us
for(10)= 18 us
for(40)= 53 us
for(70)= 87 us
for(100)= 122 us
for(400)= 465 us
for(700)= 809 us
for(1000)= 226971 us
for(4000)= 0 us
for(7000)= 8018 us
for(10000)= 11452 us
for(40000)= 45782 us
for(70000)= 80115 us
for(100000)= 114447 us
while(1)= 7 us
while(4)= 10 us
while(7)= 11 us
while(10)= 14 us
while(40)= 35 us
while(70)= 58 us
while(100)= 79 us
while(400)= 298 us
while(700)= 516 us
while(1000)= 734 us
while(4000)= 2916 us
while(7000)= 5099 us
while(10000)= 7281 us
while(40000)= 29104 us
while(70000)= 50927 us
while(100000)= 72751 us
在alt_cpu_freq處右擊,選中open declaration,可以找到alt_cpu_freq在system.h中的定義。其值與函式alt_timestamp_freq()返回的值相同,都是在sopc中設定的。如圖5所示。
圖5 系統時鐘設定
分析得知, 100us以下用while較準確, 100us以上用usleep。
補充:1、 要在sopc中加入interval timer,並在nios ii中」system library properties」中的」system library」中,為timestamp timer指定物理裝置,即在sopcbuilder中新增的timer。否則出現如下錯誤。
2、 如果沒有標頭檔案alt_types.h,會出現如下警告。
在除錯好延時函式之後,要將紅圈處system library properties-> system library->timestamp timer設定成none。本人就是遇到問題,比如最簡單的led跑馬燈,同樣的ptf和nios ii程式,之前做的可以執行。設定timer之後,實驗沒有現象,也沒有提示錯誤,過了很久才找到的問題產生的原因。
4、(2011.6.15)對於時序比較複雜要求嚴格的控制,比如ds18b20,不適用於nios ii完全控制它的操作。先用硬體邏輯實現,再用nios ii讀取溫度資料的辦法較好。
sap系統搭建教程 Nios ii最小系統搭建教程
1.基於片上ram的最小系統搭建 2.基於ddr2的最小系統搭建 3.uart core 3.1.core 硬體組成 3.2.core配置選項 3.3.軟體程式設計 3.4.暫存器整理 3.5.外設uart新增及驅動編寫 4.spi core 4.1.core 解析 4.2.外設spi新增及驅動編寫...
實時(RTC)時鐘,系統時鐘和CPU時鐘
最近在學stm32的時候看到rtc時鐘和系統時鐘,不知道區別在 於是上網查了一下。實時時鐘 rtc時鐘,用於提供年 月 日 時 分 秒和星期等的實時時間資訊,由後備電池供電,當你晚上關閉系統和早上開啟系統時,rtc仍然會保持正確的時間和日期。系統時鐘 是乙個儲存於系統記憶體中的邏輯時鐘。用於系統的計...
Linux系統時鐘與硬體時鐘
linux系統有兩個時鐘 乙個是由主機板電池驅動的硬體時鐘 real time clock 也叫做rtc或者叫cmos時鐘。當作業系統關機的時候,用這個來記錄時間,但是對於執行的系統是不用這個時間的 另乙個時間是系統時鐘 system clock 也叫核心時鐘或者軟體時鐘,是由軟體根據時間中斷來進行...