基于SOPC控制流水燈課程設(shè)計(jì)_第1頁(yè)
基于SOPC控制流水燈課程設(shè)計(jì)_第2頁(yè)
基于SOPC控制流水燈課程設(shè)計(jì)_第3頁(yè)
基于SOPC控制流水燈課程設(shè)計(jì)_第4頁(yè)
基于SOPC控制流水燈課程設(shè)計(jì)_第5頁(yè)
已閱讀5頁(yè),還剩15頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

《片上系統(tǒng)》課程設(shè)計(jì)報(bào)告設(shè)計(jì)題目:基于SOPC控制流水燈

目錄一、控制要求: 3二、設(shè)計(jì)思路: 3三、設(shè)計(jì)目的: 3四、實(shí)驗(yàn)步驟: 41、打開實(shí)驗(yàn)完整硬件后,使用SOPC軟件進(jìn)行硬件剪裁: 42、剪裁后對(duì)CPU存儲(chǔ)重新配置: 53、重新編輯symbol以及管腳分配: 64、完全編譯后,通過JTAG端口,燒錄到試驗(yàn)箱中: 85、NIOSII8.0IDE中進(jìn)行軟件編譯: 86、編譯完成后,選擇RUNASniosⅡhardware: 9五、實(shí)驗(yàn)結(jié)果(實(shí)驗(yàn)箱截圖): 10六、心得體會(huì)。 10七、程序: 111、主程序:seven_seg.c 112、CH452_I2C.h 133、define.h 164、key.c 175、key.h 19一、控制要求:通過Quartus=2\*ROMANII中SOPC工具,構(gòu)建開發(fā)板硬件,以及NIOSII8.0IDE編譯軟件程序,在實(shí)驗(yàn)箱(GX-SOC/SOPC-CIDE綜合創(chuàng)新開發(fā)試驗(yàn)平臺(tái))控制7段數(shù)碼管,實(shí)現(xiàn)以下功能:按鍵1:控制7段數(shù)碼管從0~999按照一秒加1操作;按鍵2:控制7段數(shù)碼管從0~999按照一秒減1操作;按鍵3:控制7段數(shù)碼管加1或者減1操作停止。二、設(shè)計(jì)思路:添加實(shí)驗(yàn)范例cide_c2中的完整硬件,對(duì)本次實(shí)驗(yàn)需要使用到的硬件進(jìn)行剪裁,僅留下必須的最小硬件系統(tǒng)。軟件方面,使用到i2c總線讀取、ch452芯片的7段數(shù)碼管。程序需要完成按鍵的判斷,實(shí)現(xiàn)該按鍵對(duì)應(yīng)的操作??刂瞥绦蚴褂肅語(yǔ)言編程。三、設(shè)計(jì)目的:學(xué)習(xí)應(yīng)用i2c總線的讀寫方式;運(yùn)用ch452芯片的數(shù)碼管顯示功能。四、實(shí)驗(yàn)步驟:1、打開實(shí)驗(yàn)完整硬件后,使用SOPC軟件進(jìn)行硬件剪裁:(剪裁前)(剪裁后)2、剪裁后對(duì)CPU存儲(chǔ)重新配置:3、重新編輯symbol以及管腳分配:管腳分配,可以使用文本方式修改,在記錄管腳分配的QSF文件中,保留以下文本即可:set_location_assignmentPIN_L1-toclk_sysset_location_assignmentPIN_L2-toresetset_location_assignmentPIN_R5-tosdram_addr[0]set_location_assignmentPIN_U2-tosdram_addr[1]set_location_assignmentPIN_U1-tosdram_addr[2]set_location_assignmentPIN_T2-tosdram_addr[3]set_location_assignmentPIN_T1-tosdram_addr[4]set_location_assignmentPIN_R2-tosdram_addr[5]set_location_assignmentPIN_R1-tosdram_addr[6]set_location_assignmentPIN_P6-tosdram_addr[7]set_location_assignmentPIN_P5-tosdram_addr[8]set_location_assignmentPIN_P3-tosdram_addr[9]set_location_assignmentPIN_R6-tosdram_addr[10]set_location_assignmentPIN_N4-tosdram_addr[11]set_location_assignmentPIN_V2-tosdram_ba[0]set_location_assignmentPIN_V1-tosdram_ba[1]set_location_assignmentPIN_U3-tosdram_nCASset_location_assignmentPIN_N6-tosdram_CKEset_location_assignmentPIN_T6-tosdram_nCSset_location_assignmentPIN_V4-tosdram_data[0]set_location_assignmentPIN_W5-tosdram_data[1]set_location_assignmentPIN_Y4-tosdram_data[2]set_location_assignmentPIN_Y3-tosdram_data[3]set_location_assignmentPIN_W4-tosdram_data[4]set_location_assignmentPIN_W3-tosdram_data[5]set_location_assignmentPIN_Y2-tosdram_data[6]set_location_assignmentPIN_Y1-tosdram_data[7]set_location_assignmentPIN_P1-tosdram_data[8]set_location_assignmentPIN_N2-tosdram_data[9]set_location_assignmentPIN_N1-tosdram_data[10]set_location_assignmentPIN_M6-tosdram_data[11]set_location_assignmentPIN_M5-tosdram_data[12]set_location_assignmentPIN_J2-tosdram_data[13]set_location_assignmentPIN_J1-tosdram_data[14]set_location_assignmentPIN_J4-tosdram_data[15]set_location_assignmentPIN_W2-tosdram_DQM[0]set_location_assignmentPIN_P2-tosdram_DQM[1]set_location_assignmentPIN_T3-tosdram_nRASset_location_assignmentPIN_W1-tosdram_nWEset_location_assignmentPIN_C14-tosram_nCS1set_location_assignmentPIN_U4-tosdram_clkset_location_assignmentPIN_Y20-tobutton_pio[7]set_location_assignmentPIN_Y21-tobutton_pio[6]set_location_assignmentPIN_Y22-tobutton_pio[5]set_location_assignmentPIN_W22-tobutton_pio[4]set_location_assignmentPIN_N21-tobutton_pio[3]set_location_assignmentPIN_R18-tobutton_pio[2]set_location_assignmentPIN_AB17-tobutton_pio[1]set_location_assignmentPIN_U18-tobutton_pio[0]set_location_assignmentPIN_AA14-tokey_INT_nset_location_assignmentPIN_Y18-tosclset_location_assignmentPIN_AA19-tosdaset_location_assignmentPIN_AB13-toseg_key_sclset_location_assignmentPIN_AA12-toseg_key_sda4、完全編譯后,通過JTAG端口,燒錄到試驗(yàn)箱中:5、NIOSII8.0IDE中進(jìn)行軟件編譯:建立工程,把所有使用到的程序添加到工程文件下,進(jìn)行編譯6、編譯完成后,選擇RUNASniosⅡhardware:五、實(shí)驗(yàn)結(jié)果(實(shí)驗(yàn)箱截圖):六、心得體會(huì)。這門課程在開始的時(shí)候毫無頭緒,不知從何下手,然后經(jīng)過慢慢學(xué)習(xí)了解,才開始對(duì)SOPC稍微有了整體概念、思路。通過這學(xué)期的學(xué)期,有了很到收獲:首先,通過學(xué)習(xí),使自己對(duì)課本上的知識(shí)可以應(yīng)用于實(shí)際,使得理論與實(shí)際相結(jié)合,加深自己對(duì)課本上的知識(shí)更好的理解,同事事實(shí)也鍛煉了個(gè)人動(dòng)手能力,對(duì)quartusⅡniosⅡ等仿真軟件操作達(dá)到學(xué)以致用。在設(shè)計(jì)中遇到了很多問題,在張老師的辛勤指導(dǎo)下,得以解決。最后對(duì)自己有過幫助的同學(xué)和老師表示感謝!七、程序:1、主程序:seven_seg.c#include"system.h"#include"alt_types.h"#include"altera_avalon_pio_regs.h"#include"define.h"#include"CH452_I2C.h"#include"key.h"#include"priv/alt_busy_sleep.h"#include"sys/alt_irq.h"#include"key.h"#defineADDKEY1//#defineDECREASEKEY2//#defineSTOPKEY3//intmain(void){alt_u8KeyVlaue;inti;KeyPIOInit();KeyIntEnable();CH452_Write(CH452_SYSON2);//兩線制方式,如果SDA用做按鍵中斷輸出,那么命令應(yīng)該為(0x04,0x23)CH452_Write(CH452_BCD);//BCD譯碼,8個(gè)數(shù)碼管while(1){KeyVlaue=GetKeyValue();switch(KeyVlaue){caseADD:{while(1){KeyVlaue=GetKeyValue();if(KeyVlaue==DECREASE)break;elseif(KeyVlaue==STOP)break;else{if(i>999)i=0;elsei+=1;}alt_busy_sleep(100000);CH452_Write(CH452_DIG2|i/100);CH452_Write(CH452_DIG1|i/10%10);CH452_Write(CH452_DIG0|i%10);}break;}caseDECREASE:{while(1){KeyVlaue=GetKeyValue();if(KeyVlaue==ADD)break;elseif(KeyVlaue==STOP)break;else{if(i<=0)i=999;elsei-=1;}alt_busy_sleep(100000);CH452_Write(CH452_DIG2|i/100);CH452_Write(CH452_DIG1|i/10%10);CH452_Write(CH452_DIG0|i%10);}break;}caseSTOP:{while(1){KeyVlaue=GetKeyValue();if(KeyVlaue==ADD)break;elseif(KeyVlaue==DECREASE)break;elsei=i;alt_busy_sleep(100000);CH452_Write(CH452_DIG2|i/100);CH452_Write(CH452_DIG1|i/10%10);CH452_Write(CH452_DIG0|i%10);}break;}}}}2、CH452_I2C.h#include"system.h"#include"altera_avalon_pio_regs.h"#include"alt_types.h"#include"priv/alt_busy_sleep.h"#include<stdio.h>#include"sys/alt_irq.h"#include"define.h"voidCH452_I2c_Start_2(void)//操作起始,兩線制方式,SDA用做中斷輸出,使用以下兩個(gè)函數(shù){IOWR_ALTERA_AVALON_PIO_DIRECTION(SEG_KEY_SDA_BASE,1);IOWR_ALTERA_AVALON_PIO_DIRECTION(SEG_KEY_SCL_BASE,1);IOWR_ALTERA_AVALON_PIO_DATA(SEG_KEY_SDA_BASE,1);IOWR_ALTERA_AVALON_PIO_DATA(SEG_KEY_SCL_BASE,1);usleep(5);IOWR_ALTERA_AVALON_PIO_DATA(SEG_KEY_SDA_BASE,0);usleep(5);IOWR_ALTERA_AVALON_PIO_DATA(SEG_KEY_SCL_BASE,0);//usleep(3);}voidCH452_I2c_Stop_2(void)//操作結(jié)束{IOWR_ALTERA_AVALON_PIO_DIRECTION(SEG_KEY_SDA_BASE,1);IOWR_ALTERA_AVALON_PIO_DIRECTION(SEG_KEY_SCL_BASE,1);IOWR_ALTERA_AVALON_PIO_DATA(SEG_KEY_SDA_BASE,0);IOWR_ALTERA_AVALON_PIO_DATA(SEG_KEY_SCL_BASE,1);usleep(5);IOWR_ALTERA_AVALON_PIO_DATA(SEG_KEY_SDA_BASE,1);usleep(5);IOWR_ALTERA_AVALON_PIO_DATA(SEG_KEY_SCL_BASE,0);}voidack()//確認(rèn){IOWR_ALTERA_AVALON_PIO_DIRECTION(SEG_KEY_SDA_BASE,0);IOWR_ALTERA_AVALON_PIO_DIRECTION(SEG_KEY_SCL_BASE,1);IOWR_ALTERA_AVALON_PIO_DATA(SEG_KEY_SDA_BASE,0);usleep(5);IOWR_ALTERA_AVALON_PIO_DATA(SEG_KEY_SCL_BASE,1);usleep(5);IOWR_ALTERA_AVALON_PIO_DATA(SEG_KEY_SCL_BASE,0);}voidCH452_I2c_WrByte(unsignedchardat)//寫一個(gè)字節(jié)數(shù)據(jù){unsignedchartemp_number;unsignedchari;intdelay;IOWR_ALTERA_AVALON_PIO_DIRECTION(SEG_KEY_SDA_BASE,1);IOWR_ALTERA_AVALON_PIO_DIRECTION(SEG_KEY_SCL_BASE,1);for(i=0;i<8;i++){temp_number=dat>>7;IOWR_ALTERA_AVALON_PIO_DATA(SEG_KEY_SCL_BASE,0);usleep(5);IOWR_ALTERA_AVALON_PIO_DATA(SEG_KEY_SDA_BASE,temp_number);for(delay=0;delay<5;delay++);IOWR_ALTERA_AVALON_PIO_DATA(SEG_KEY_SCL_BASE,1);dat=dat<<1;}IOWR_ALTERA_AVALON_PIO_DATA(SEG_KEY_SCL_BASE,0);}unsignedcharCH452_I2c_RdByte(void)//讀一個(gè)字節(jié)數(shù)據(jù){unsignedchari=8;unsignedcharDATA_received=0;intdelay;IOWR_ALTERA_AVALON_PIO_DIRECTION(SEG_KEY_SDA_BASE,0);IOWR_ALTERA_AVALON_PIO_DIRECTION(SEG_KEY_SCL_BASE,1);while(i--){DATA_received<<=1;IOWR_ALTERA_AVALON_PIO_DATA(SEG_KEY_SCL_BASE,0);usleep(5);for(delay=0;delay<5;delay++);IOWR_ALTERA_AVALON_PIO_DATA(SEG_KEY_SCL_BASE,1);DATA_received|=IORD_ALTERA_AVALON_PIO_DATA(SEG_KEY_SDA_BASE);}IOWR_ALTERA_AVALON_PIO_DATA(SEG_KEY_SCL_BASE,0);returnDATA_received;}voidCH452_Write(unsignedshortcmd)//寫命令{CH452_I2c_Start_2();/*啟動(dòng)總線*/#ifdefENABLE_2_CH452//若有兩個(gè)CH452并連CH452_I2c_WrByte((unsignedchar)(cmd>>7)&CH452_I2C_MASK|CH452_I2C_ADDR0);//CH452的ADDR=0時(shí)#elseCH452_I2c_WrByte((unsignedchar)(cmd>>7)&CH452_I2C_MASK|CH452_I2C_ADDR1);//CH452的ADDR=1時(shí)(默認(rèn))#endifack();CH452_I2c_WrByte((unsignedchar)cmd);/*發(fā)送數(shù)據(jù)*/ack();CH452_I2c_Stop_2();/*結(jié)束總線*/}unsignedcharCH452_Read(void)//讀取按鍵{unsignedcharkeycode;CH452_I2c_Start_2();/*啟動(dòng)總線*/CH452_I2c_WrByte((unsignedchar)(CH452_GET_KEY>>7)&CH452_I2C_MASK|0x01|CH452_I2C_ADDR1);//若有兩個(gè)CH452并連,當(dāng)ADDR=0時(shí),需修改為CH452_I2C_ADDR0ack();keycode=CH452_I2c_RdByte();/*讀取數(shù)據(jù)*/ack();CH452_I2c_Stop_2();/*結(jié)束總線*/return(keycode);}3、define.h#ifndef_DEFINE_H_#define_DEFINE_H_#endif//_DEFINE_H_#defineCH452_NOP0x0000//空操作#defineCH452_RESET0x0201//復(fù)位#defineCH452_LEVEL0x0100//加載光柱值#defineCH452_CLR_BIT0x0180//段位清0#defineCH452_SET_BIT0x01C0//段位置1#defineCH452_SLEEP0x0202//進(jìn)入睡眠狀態(tài)#defineCH452_LEFTMOV0x0300//設(shè)置移動(dòng)方式-作移#defineCH452_LEFTCYC0x0301//設(shè)置移動(dòng)方式-左循#defineCH452_RIGHTMOV0x0302//設(shè)置移動(dòng)方式-右移#defineCH452_RIGHTCYC0x0303//設(shè)置移動(dòng)方式-右循#defineCH452_SELF_BCD0x0380//自定義BCD碼#defineCH452_SYSOFF0x0400//關(guān)顯示、鍵盤#defineCH452_SYSON10x0401//開顯示#defineCH452_SYSON20x0403//開顯示、鍵盤#defineCH452_SYSON2W0x0423//開顯示、鍵盤,真正2線接口#defineCH452_DSP0x0500//設(shè)置默認(rèn)顯示方式#defineCH452_BCD0x0580//設(shè)置BCD譯碼方式#defineCH452_TWINKLE0x0600//設(shè)置閃爍控制#defineCH452_GET_KEY0x0700//獲取按鍵#defineCH452_DIG00x0800//數(shù)碼管位0顯示,需另加8位數(shù)據(jù)#defineCH452_DIG10x0900//數(shù)碼管位1顯示,需另加8位數(shù)據(jù)#defineCH452_DIG20x0a00//數(shù)碼管位2顯示,需另加8位數(shù)據(jù)#defineCH452_DIG30x0b00//數(shù)碼管位3顯示,需另加8位數(shù)據(jù)#defineCH452_DIG40x0c00//數(shù)碼管位4顯示,需另加8位數(shù)據(jù)#defineCH452_DIG50x0d00//數(shù)碼管位5顯示,需另加8位數(shù)據(jù)#defineCH452_DIG60x0e00//數(shù)碼管位6顯示,需另加8位數(shù)據(jù)#defineCH452_DIG70x0f00//數(shù)碼管位7顯示,需另加8位數(shù)據(jù)#defineCH452_SCL_SET{IOWR_ALTERA_AVALON_PIO_DATA(SEG_KEY_SCL_BASE,1);}#defineCH452_SCL_CLR{IOWR_ALTERA_AVALON_PIO_DATA(SEG_KEY_SCL_BASE,0);}#defineCH452_SDA_SET{IOWR_ALTERA_AVALON_PIO_DATA(SEG_KEY_SDA_BASE,1);}#defineCH452_SDA_CLR{IOWR_ALTERA_AVALON_PIO_DATA(SEG_KEY_SCL_BASE,0);}#defineCH452_SDA_IN(IORD_ALTERA_AVALON_PIO_DATA(SEG_KEY_SDA_BASE);)#defineCH452_SDA_D_OUT{IOWR_ALTERA_AVALON_PIO_DIRECTION(SEG_KEY_SDA_BASE,1);}//設(shè)置SDA為輸出方向,對(duì)于雙向I/O需切換為輸出#defineCH452_SDA_D_IN{IOWR_ALTERA_AVALON_PIO_DIRECTION(SEG_KEY_SDA_BASE,0);}//設(shè)置SDA為輸入方向,對(duì)于雙向I/O需切換為輸入#defineCH452_SCL_D_OUT{IOWR_ALTERA_AVALON_PIO_DIRECTION(SEG_KEY_SCL_BASE,1);}//設(shè)置SCL為輸出方向,對(duì)于雙向I/O需切換為輸出#defineCH452_I2C_ADDR10x60//CH452的ADDR=1時(shí)的地址,默認(rèn)值#defineCH452_I2C_MASK0x3E//CH452的2線接口高字節(jié)命令掩碼alt_u8flag;//隊(duì)列放滿標(biāo)志alt_u32key_value;//存儲(chǔ)鍵盤值4、key.c#include"system.h"#include<stdio.h>#include"altera_avalon_pio_regs.h"#include"alt_types.h"#include"sys/alt_irq.h"#include"key.h"#defineBUF_SIZE10alt_u32done=0;//信號(hào)量:通知外部中斷事件發(fā)生staticalt_u8key_value;staticvoidKeyDownISR(void*context,alt_u32id);staticvoidKeyDownISR(void*context,alt_u32id){/*clearcaptureregister*/IOWR_ALTERA_AVALON_PIO_EDGE_CAP(BUTTON_PIO_BASE,0);/*Getthekeyvalue*/key_value=IORD_ALTERA_AVALON_PIO_DATA(BUTTON_PIO_BASE);done++;} alt_u32KeyPIOInit(void){ //initializetheKEY_PIOdirectionasinput IOWR_ALTERA_AVALON_PIO_DIRECTION(BUTTON_PIO_BASE,0x00);//thedirectionisinput IOWR_ALTERA_AVALON_PIO_IRQ_MASK(BUTTON_PIO_BASE,0xff);//enableinterrupts IOWR_ALTERA_AVALON_PIO_EDGE_CAP(BUTTON_PIO_BASE,0x00);//clearcaptureregister //registerkeydownISR returnalt_irq_register(BUTTON_PIO_IRQ,NULL,KeyDownISR);}voidKeyIntEnable(void){ IOWR_ALTERA

溫馨提示

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

最新文檔

評(píng)論

0/150

提交評(píng)論