綜合創(chuàng)新實驗匯總課件_第1頁
綜合創(chuàng)新實驗匯總課件_第2頁
綜合創(chuàng)新實驗匯總課件_第3頁
綜合創(chuàng)新實驗匯總課件_第4頁
綜合創(chuàng)新實驗匯總課件_第5頁
已閱讀5頁,還剩50頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)

文檔簡介

1、綜合創(chuàng)新實驗陳文智 浙江大學(xué)計算機(jī)學(xué)院2005年4月1綜合創(chuàng)新實驗陳文智 1提綱1、設(shè)計任務(wù)2、設(shè)計分析3、FPGA設(shè)計基礎(chǔ)4 模塊分析5 驅(qū)動設(shè)計6 測試程序設(shè)計7 GUI程序設(shè)計2提綱1、設(shè)計任務(wù)21. 設(shè)計任務(wù)設(shè)計題目:FGPA擴(kuò)展子板系統(tǒng)設(shè)計設(shè)計內(nèi)容: 擴(kuò)展一塊FPGA子板,合理選用FPGA器件。有效使用XSBase255擴(kuò)展槽資源。擴(kuò)展以下硬件資源:16鍵鍵盤、8個LED燈、撥碼開關(guān)、2路A/D和D/A。31. 設(shè)計任務(wù)設(shè)計題目:FGPA擴(kuò)展子板系統(tǒng)設(shè)計3設(shè)計要求 合理選擇各種元器件,包括FPGA、A/D、D/A芯片。合理使用XSBase255開發(fā)系統(tǒng)擴(kuò)展槽資源,設(shè)計原理圖,要考慮子

2、板和母板的安裝。布局圖: 4設(shè)計要求 4軟件測試要求:LED顯示A/DD/A KeyPad開關(guān)量輸入 5軟件測試要求:52. 設(shè)計分析 嵌入式系統(tǒng)項目開發(fā)流程要經(jīng)歷項目分析、設(shè)計和實現(xiàn)與維護(hù)四個階段 本設(shè)計: 前期準(zhǔn)備 FPGA邏輯設(shè)計 設(shè)備驅(qū)動設(shè)計 驅(qū)動測試 GUI應(yīng)用程序設(shè)計 62. 設(shè)計分析 嵌入式系統(tǒng)項目開發(fā)流程要經(jīng)歷項目分析、設(shè)計和3. FPGA設(shè)計基礎(chǔ) 可編程邏輯器件簡介 什么是FPGA?什么是CPLD? FPGA與CPLD的主要區(qū)別 為什么要使用CPLD/FPGA? 可編程邏輯器件有哪些? 如何使用可編程邏輯器件進(jìn)行開發(fā)? 如何使用Xscale和FPGA進(jìn)行開發(fā)? 73. FPG

3、A設(shè)計基礎(chǔ) 可編程邏輯器件簡介 73.1 VHDL語言介紹隨著EDA技術(shù)的發(fā)展,使用硬件描述語言(HDL)設(shè)計CPLD/FPGA成為一種趨勢VHDL的程序結(jié)構(gòu)特點是將一項工程設(shè)計,分成外部(端口)和內(nèi)部(涉及實體的內(nèi)部功能實現(xiàn)部分) VHDL主要用于描述數(shù)字系統(tǒng)的結(jié)構(gòu)、行為、功能和接口,跟原理圖有對應(yīng)的關(guān)系 83.1 VHDL語言介紹隨著EDA技術(shù)的發(fā)展,使用硬件描述語一個簡單的VHDL例子 :ENTITY REG12 IS-外部端口定義:數(shù)據(jù),時鐘,輸出 PORT(d: IN BIT_VECTOR(11 DOWNTO 0); clk : IN BIT; q : OUT BIT_VECTOR(

4、11 DOWNTO 0);END REG12;-內(nèi)部實體邏輯ARCHITECTURE a OF REG12 ISBEGIN PROCESS BEGIN WAIT UNTIL clk = 1; -等待時鐘上升沿 q private_data; /*判斷是否設(shè)置了允許鍵盤產(chǎn)生中斷*/ if (readb(f_b_p-ICNTR_VIR_ADDR) & KEY_EN ) /*如果設(shè)置了允許鍵盤產(chǎn)生中斷,程序向下執(zhí)行*/ if (filp-f_flags & O_NONBLOCK) /*如果設(shè)置了非阻塞就立刻返回*/ return -EAGAIN; wait_event_interruptible(f

5、_b_p-key_readq, f_b_p-key_int_occur); /*睡眠點*/ f_b_p-key_int_occur = 0; value = (readb(f_b_p-KEY_VIR_ADDR) & KEY_VALID_VAL); /*讀取鍵值*/ copy_to_user(buff, &value, count); /*將鍵值返回給應(yīng)用程序*/ 30static ssize_t key_read(structpoll方法分兩步完成第一步,poll方法需要將所有這些可讓進(jìn)程睡眠的事件隊列都加入到poll_table結(jié)構(gòu)的鏈表中 第二步是返回一個用來描述操作是否可以立即無阻塞執(zhí)行

6、的位掩碼 31poll方法分兩步完成31Poll方法代碼如下: static unsigned int fpga_board_poll(struct file * filp, poll_table * wait) unsigned int mask=0; FPGA_BOARD * f_b_p; f_b_p = filp-private_data; poll_wait(filp, &f_b_p-key_readq, wait); /*鍵盤 */ poll_wait(filp, &f_b_p-sw_readq, wait); /*撥碼開關(guān) */ poll_wait(filp, &f_b_p-ad_

7、readq, wait); /*AD控制器 */ if (f_b_p-key_int_occur | f_b_p-sw_int_occur | f_b_p-ad_int_occur ) mask |= POLLIN | POLLRDNORM ; return mask;32Poll方法代碼如下: static unsigned infasync方法當(dāng)應(yīng)用程序修改文件描述符的FASYNC標(biāo)志(filp-f_flags)時,該方法就會被調(diào)用。fasync方法代碼如下: static int fpga_board_fasync( int fd, struct file * filp, int mod

8、e) FPGA_BOARD * f_b_p; f_b_p = filp-private_data; return fasync_helper(fd, filp, mode, &f_b_p-fasync); 33fasync方法static int fpga_board_中斷處理函數(shù)在注冊中斷號中,使用如下函數(shù): 參數(shù)filp用于傳遞信息給中斷處理函數(shù),中斷處理函數(shù)通過參數(shù)dev_id接收中斷處理函數(shù)的代碼,以鍵盤為例: request_irq(IRQ_GPIO(GPIO_X), board_irq_handle, SA_INTERRUPT | SA_SHIRQ , INT_OWNER, fil

9、p);34中斷處理函數(shù)request_irq(IRQ_GPIO(GPIstatic void board_irq_handle(int irq, void * dev_id, struct pt_regs * regs) FPGA_BOARD * f_b_p; struct file * flip; char icntr_cur=0, iflag_cur=0; flip = (struct file *)dev_id; f_b_p = (FPGA_BOARD *) flip-private_data; if (f_b_p-fasync) kill_fasync( &f_b_p-fasync,

10、SIGIO, POLL_IN ); wake_up_interruptible(&f_b_p-key_readq); f_b_p-key_int_occur = 1; 35static void board_irq_handle(i驅(qū)動的加載 1.安裝位置 將以上的驅(qū)動程序文件放入嵌入式Linux的源代碼目錄中:driver/char/ 2.修改Makefile在位于driver/char/目錄下的Makefile文件中加入如下語句: obj-$(CONFIG_FPGA) += fpga_board_0.o fpga_board_1.o fpga_board_2.o fpga_board_3.

11、o fpga_board_4.o 36驅(qū)動的加載 1.安裝位置 363.修改菜單文件修改config.in文件,增加如下語句: dep_tristate ADS7843Touchcontroller CONFIG_FPGA $CONFIG_ARCH_XSBASE255dep_tristate FPGA_BOARD CONFIG_FPGA $CONFIG_ARCH_XSBASE255 /添加語句373.修改菜單文件dep_tristate ADS7843T4.初始化FPGA擴(kuò)展板的中斷引腳 修改 include/asm-arm/arch-pxa/xsbase255.h,增加以下語句:修改arch

12、/arm/mach-pxa/xsbase255.c, 增加以下語句:#define IRQ_GPIO_EXTEND IRQ_GPIO(11)set_GPIO_IRQ_edge(IRQ_TO_GPIO_2_80(IRQ_GPIO_EXTEND), GPIO_RISING_EDGE);384.初始化FPGA擴(kuò)展板的中斷引腳 #define IRQ5.編譯Linux內(nèi)核 進(jìn)入Linux源代碼目錄中,執(zhí)行make menuconfig,進(jìn)入Linux內(nèi)核配置菜單將FPGA擴(kuò)展板的驅(qū)動加入內(nèi)核中 進(jìn)入Character devices菜單 選擇“FPGA_BOARD” 編譯內(nèi)核 make depmake

13、 zImage395.編譯Linux內(nèi)核 make dep396. 測試程序設(shè)計 測試程序(應(yīng)用程序)可以通過驅(qū)動提供的接口函數(shù)來操作設(shè)備文件結(jié)點來控制設(shè)備6.1 設(shè)備文件FPGA擴(kuò)展板的設(shè)備文件為“fpga_board_x” 在應(yīng)用程序中通過以下指令打開設(shè)備文件:open(/dev/fpga_board_x, O_RDWR); x可以具體指定為0,1,2,3,4406. 測試程序設(shè)計 測試程序(應(yīng)用程序)可以通過驅(qū)動提供的接6.2 操作命令字 操作命令字是一些符號,通過ioctl系統(tǒng)調(diào)用,將這些符號傳遞到底層驅(qū)動程序,告訴驅(qū)動程序?qū)⒁獔?zhí)行的操作 FPGA擴(kuò)展板上有五個部件:分別是燈,鍵盤,撥

14、碼開關(guān),A/D控制器,D/A控制器,相應(yīng)的操作對象可以使用對象選擇命令字來表示:LED、KEYBOARD、SWBOARD、DAC和ADC 416.2 操作命令字 操作命令字是一些符號,通過ioctl系統(tǒng)如果需要操作擴(kuò)展板上燈,鍵盤,撥碼開關(guān),可使用以下程序 :int fd_key, fd_sw, fd_led;fd_key = open(/dev/fpga_board_0, O_RDWR);fd_sw = open(/dev/fpga_board_1, O_RDWR);fd_led = open(/dev/fpga_board_2, O_RDWR);ioctl(fd_key,,KEYBOARD

15、);ioctl(fd_sw,SWBOARD);ioctl(fd_led,LED);42如果需要操作擴(kuò)展板上燈,鍵盤,撥碼開關(guān),可使用以下程序 :iselect系統(tǒng)調(diào)用:是用在訪問多個設(shè)備文件,但又不想阻塞于任何一個設(shè)備文件時使用 異步通知:是應(yīng)用程序中通過向系統(tǒng)注冊一個信號,并且將該信號與某一處理函數(shù)相關(guān)聯(lián),當(dāng)中斷產(chǎn)生時,激發(fā)該信號,然后系統(tǒng)調(diào)用與該信號相關(guān)聯(lián)的處理函數(shù) FPGA擴(kuò)展板中只有鍵盤,撥碼開關(guān),A/D控制器才能使用異步通知,當(dāng)使用異步通知前需要開啟中斷43select系統(tǒng)調(diào)用:是用在訪問多個設(shè)備文件,但又不想阻塞于KEYBOARD對象KEYBOARD對象命令字 使用方式:鍵盤的操作

16、模式有查詢和中斷方式兩種 ioctl(fd, KEYBOARD, KEYBOARD_READ_KEYVALUE)ioctl(fd, KEYBOARD, KEYBOARD_READ_IFLAG)ioctl(fd, KEYBOARD, KEYBOARD_READ_ICNTR)ioctl(fd, KEYBOARD, KEYBOARD_UNMASK_INTERRUPT)ioctl(fd, KEYBOARD, KEYBOARD_MASK_INTERRUPT)ioctl(fd, KEYBOARD, KEYBOARD_CLEAR_IFLAG)ioctl(fd, KEYBOARD, KEYBOARD_SET_

17、DEFAULT)44KEYBOARD對象ioctl(fd, KEYBOARD,ADC對象 A/D控制器有兩個輸入通道,并且每個通道的工作模式都有兩種選擇:模式一. 即時輸入方式 模式二. 自動緩沖采集 采集頻率設(shè)置unsigned short feq;ioctl(fd ADC, ADC_SET_FREQUENCY); /*通知底層驅(qū)動以下write操 作是設(shè)置頻率*/feq = 1; write(fd, &feq, sizeof(feq); /*頻率的數(shù)值將通過write操作傳遞到底層驅(qū)動*/45ADC對象 unsigned short feq;45板級對象 有一些命令字是針對整個FPGA擴(kuò)展

18、板的,包括如下: 命令字描述INIT_FPGA初始化FPGA擴(kuò)展板各模塊INTERRUPT_ENABLE響應(yīng)FPGA擴(kuò)展板發(fā)出的中斷請求INTERRUPT_DISABLE不允許響應(yīng)FPGA擴(kuò)展板發(fā)出的中斷請求46板級對象 命令字描述INIT_FPGA初始化FPGA擴(kuò)展板各7. GUI程序設(shè)計 著重介紹如何為FPGA擴(kuò)展板設(shè)計具有圖形用戶介面的應(yīng)用程序 建立回調(diào)函數(shù) 監(jiān)控I/O 繪制圖形 477. GUI程序設(shè)計 著重介紹如何為FPGA擴(kuò)展板設(shè)計具有圖Key&Led 界面48Key&Led 界面48DA控制界面49DA控制界面49AD控制界面50AD控制界面50完成界面后,還需完成以下工作:響應(yīng)ADC發(fā)出的中斷。為控件的事件添加回調(diào)函數(shù)。繪制圖形。 51完成界面后,還需完成以下工作:51建立回調(diào)函數(shù) 以普通按鈕控件為例,在Glade的Properties窗口的Signal下拉菜單中,為按鈕的clicked事件添加回調(diào)函數(shù) 52建立回調(diào)函數(shù) 52監(jiān)控I/O 這一步我們需要控制AD控制器對外部信號的采集 對ADC的控制

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

最新文檔

評論

0/150

提交評論