馬然江嵌入式_第1頁
馬然江嵌入式_第2頁
馬然江嵌入式_第3頁
馬然江嵌入式_第4頁
馬然江嵌入式_第5頁
已閱讀5頁,還剩16頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡介

1、 東北大學(xué)信息學(xué)院2010級嵌入式課程設(shè)計(jì) 東北大學(xué)信息學(xué)院2010級電子信息工程專業(yè)嵌入式系統(tǒng)課程設(shè)計(jì)報(bào)告姓名: 馬然江·艾合買提學(xué)號:20113079班級:電子1101電話mail:3947250782013年7月 8 日 摘要嵌入式系統(tǒng)應(yīng)用廣泛,涉及通信、網(wǎng)絡(luò)消費(fèi)電子產(chǎn)品、醫(yī)療儀器、汽車電子、工業(yè)控制、儀器儀表、航天軍事等各個(gè)行業(yè)和領(lǐng)域。目前全球嵌入式芯片的年出貨量達(dá)到了60億。嵌入式系統(tǒng)在應(yīng)用數(shù)量上已經(jīng)遠(yuǎn)遠(yuǎn)超過了各種通用計(jì)算機(jī)。可以說嵌入式產(chǎn)品“無處不在”。本次課程設(shè)計(jì),使用基于ARM7TDMI內(nèi)核的華邦W90P710處理器, 它提供了4K的指令緩存

2、和4K的數(shù)據(jù)緩存,并具有強(qiáng)大的外設(shè)資源,同時(shí)具有一個(gè)AC97控制器,一個(gè)雙向通道GDMA,一個(gè)LCD控制器,兩個(gè)24位定時(shí)器,它的外部總線接口控制器支持SDRAM、ROM/SRAM、FLASH存儲器和I/O設(shè)備的方便接入,還具有串行通信和以太網(wǎng)接口,以適應(yīng)通信網(wǎng)關(guān)和其他的應(yīng)用場合。在人們對個(gè)人隱私等權(quán)益愈發(fā)注重的今天,個(gè)人信息及所有物的安全性不容忽視。而本次課程設(shè)計(jì)的題目基于華邦W90P710處理器的電子密碼鎖設(shè)計(jì)就是基于這一現(xiàn)狀給出的具有使用性的設(shè)計(jì)。實(shí)現(xiàn)了密碼設(shè)定、三次密碼輸入、顯示電子相冊及播放音樂的功能。 關(guān)鍵字:華邦W90P710微處理器、電子密碼鎖、嵌入式系統(tǒng)目 錄目 錄3一、題目

3、設(shè)計(jì)意義及特點(diǎn)4 1.1 設(shè)計(jì)意義及特點(diǎn)41.2 系統(tǒng)的主要功能4二、系統(tǒng)功能設(shè)計(jì)52.1 硬件設(shè)計(jì)及描述52.1.1系統(tǒng)功能模塊整體52.1.2各模塊作用及硬件連接圖52.2 軟件設(shè)計(jì)及描述82.2.1 程序流程框圖82.2.2 源程序代碼9一、題目設(shè)計(jì)意義及特點(diǎn)1.1 設(shè)計(jì)意義及特點(diǎn)(1)設(shè)計(jì)意義如今個(gè)人物品等問題開始暴露,傳統(tǒng)的密碼鎖容易損壞、丟失,實(shí)用性、安全性很低,而電子密碼鎖因其絕對的精度使信息及物品的保密稱為可能。此次題目具有很強(qiáng)的實(shí)際意義。另外,在老師對程序例子的講解及自己的理解之后,通過查閱資料在原有程序上進(jìn)行改寫、融合和添加,設(shè)計(jì)出了電子密碼鎖,提高了自己的程序閱讀能力,并

4、了解了嵌入式系統(tǒng)的開發(fā)流程,應(yīng)用軟件的使用方法。增強(qiáng)了自主學(xué)習(xí)能力,能與課本知識相融合,更加靈活的使用ARM變成語言。(2)特點(diǎn)電子密碼鎖與電子相冊、音樂播放相結(jié)合,在登錄成功后播放相冊及音樂;具有密碼設(shè)定及三次輸入機(jī)會。1.2 系統(tǒng)的主要功能(1) 設(shè)置密碼: LCD顯示“請輸入密碼”,從鍵盤輸入任意6位數(shù)字作為密碼存入寄存 器,設(shè)置成功。(2)通過密碼登陸系統(tǒng): LCD顯示“請輸入密碼”從鍵盤輸入密碼,比較鍵盤輸入的密碼與Flash 中是否相,每次按鍵則相應(yīng)LED燈點(diǎn)亮; 如果密碼正確,則LED燈全亮,LCD顯示“密碼正確”,并且開始切換 圖片,播放電子相冊,最后播放音頻文件; 如果第一次

5、密碼不正確,則LED燈閃爍,LCD顯示“密碼不正確,請重新輸入”;如果第二次密碼不正確,則LED燈閃爍,LCD顯示“密碼不正確,您還有一次機(jī)會,請重新輸入”;如果第三次密碼不正確,則LED燈閃爍,LCD顯示“對不起,您已經(jīng)連續(xù)三次輸入密碼錯(cuò)誤,系統(tǒng)鎖定”,鎖定系統(tǒng),無法進(jìn)行任何操作。 (3)電子相冊 顯示“密碼正確”后,自動播放電子相冊,多張圖片順序播放。并在 播放完成后播放音樂。二、系統(tǒng)功能設(shè)計(jì) 2.1 硬件設(shè)計(jì)及描述 2.1.1系統(tǒng)功能模塊整體 華邦 嵌入式 處理器芯片 W90P710LCD顯示模塊LED燈模塊鍵盤輸入模塊音頻模塊 2.1.2各模塊作用及硬件連接圖 (1)華邦嵌入式處理器芯

6、片W90P710 W90P710為此次課程設(shè)計(jì)的中心和運(yùn)行平臺。 它是基于ARM7TDMI內(nèi)核的處理器,提供了4K的指令緩存和4K的數(shù)據(jù)緩存,并具有強(qiáng)大的外設(shè)資源,包括一個(gè)USB1.1主控制器,一個(gè)SD/SDIO主控制器,4個(gè)獨(dú)立的UART接口,一個(gè)看門狗定時(shí)器,71個(gè)可編程I/O口,PS/2鍵盤控制器和高級中斷控制器AIC,同時(shí)具有一個(gè)AC97控制器,一個(gè)雙向通道GDMA,一個(gè)LCD控制器,兩個(gè)24位定時(shí)器,它的外部總線接口控制器支持SDRAM、ROM/SRAM、FLASH存儲器和I/O設(shè)備的方便接入,還具有串行通信和以太網(wǎng)接口,以適應(yīng)通信網(wǎng)關(guān)和其他的應(yīng)用場合。 (2)LCD顯示模塊 90P

7、710試驗(yàn)板,使用的是AUO 3.0" TFT A030DL01(960x240, 8 位數(shù)據(jù)總線) 數(shù)字式TFT 液晶屏,可以將video/OSD的原始圖像數(shù)據(jù)顯示到外部顯示設(shè)備。TFT液晶屏的顯示是對屏上每個(gè)像素點(diǎn)進(jìn)行操作,通過向這些像素點(diǎn)配置不同的值,以顯示不同的顏色,由于其內(nèi)部沒有緩存,所要顯示的數(shù)據(jù)要隨著時(shí)鐘脈沖一點(diǎn)一點(diǎn)的傳送過來。因此,它需要在中開辟出一片緩沖區(qū),將要顯示的數(shù)據(jù)先存放到的緩沖區(qū)中,即存在SDRAM 中,一般按照一維數(shù)組的形式進(jìn)行存儲,然后把存儲數(shù)據(jù)的SDRAM的地址送給FIFO,然后送給顏色生成器,進(jìn)而實(shí)現(xiàn)在屏幕上的顯示;如果在屏上的定位顯示,算出所要顯示

8、的內(nèi)容在屏幕上的位置,然后在相應(yīng)的SDRAM的地址內(nèi)存入要顯示的數(shù)據(jù)即可。 (3)鍵盤輸入模塊 通過外部鍵盤輸入及軟件編程實(shí)現(xiàn)鍵盤對系統(tǒng)的控制(4)LED模塊 2.2 軟件設(shè)計(jì)及描述 2.2.1 程序流程框圖主函數(shù)中,函數(shù)調(diào)用了KPI、USI、LCD、AC-97、LED初始化程序。第一次輸入為設(shè)定密碼,之后13次為密碼匹配,成功則播放相冊及音樂,否則三次后鎖定密碼鎖。程序框圖如下:NYYY 開始系統(tǒng)初始化 讀取密碼設(shè)定標(biāo)志是否已設(shè)定密碼設(shè)定密碼寫入FLASH是否超過三次密碼鎖鎖定 輸入密碼密碼是否正確 電子相冊及音樂 結(jié)束NN 2.2.2 源程序代碼一、主程序部分 int main(void)

9、 int cnt,i; U8 wchar1= "請輸入密碼" U8 wchar3= "密碼不正確,請重新輸入" U8 wchar4= "密碼不正確,您還有一次機(jī)會,請重新輸入" U8 wchar5= "對不起,您已經(jīng)連續(xù)三次輸入密碼錯(cuò)誤,系統(tǒng)鎖定" /* U32 j;*/U8 LBuffer512=0;U32 ClearLoop;LCD_IMAGE_T LCD_Size;LCD_LOCATION_T LCD_Location;LCDShowParameter LSP;LCD_Size.width = 480;LCD

10、_Size.height = 240;LCD_Location.StartX = 0;LCD_Location.StartY = 0;LCD_Location.EndX = 960;LCD_Location.EndY = 240;LCDInit();LCDShow(LCD_Size, LCD_Location);LCDFIFOBufferSet(shurumima);LCDDisplayOn();printf("*USI測試程序*n");printf("*Flash型號W25P10*n");USIInit();/讀器件IDprintf("讀器件

11、ID:");USIRead_ID(); /擦除扇區(qū)0printf("寫使能:n");USIWriteEnable();while(USICheckBusy();USISectorErease(0x0); for(cnt=0;cnt<5;cnt+) acnt =cnt;/發(fā)送數(shù)據(jù)初始化 LSP.StartX = 12; LSP.StartY = 7; LSP.LibPlace = 0x400000; LSP.Color = 0x07ff; LSP.LetterChar = wchar1;/顯示漢字"請輸入密碼" LSP.LCDBuffer

12、= shurumima;/顯示圖片 LCDOutputShow(LSP,5); Delay(10000000); KPIInit(); /鍵盤初始化 EBILedInit(0x00); printf("Please press keys.n"); while(1) if(p=1)/輸入密碼正確 EBILedInit(0xFF);/輸入密碼正確,燈全亮 LCDFIFOBufferSet(sky); LSP.LCDBuffer = sky; LCDDisplayOn(); LetterConvert(mi, LBuffer);LetterShow(224, 52, LBuffe

13、r, sky);/X、Y,shurumima=LBufferDelay(3000000);LetterConvert(ma, LBuffer);LetterShow(352, 52, LBuffer, sky);Delay(3000000);LetterConvert(zheng, LBuffer);LetterShow(480, 52, LBuffer, sky);Delay(3000000);LetterConvert(que, LBuffer);LetterShow(608, 52, LBuffer, sky);Delay(6000000);LCDFIFOBufferSet(yuansu

14、);temp = (U32)yuansu;Delay(6000000);LCDFIFOBufferSet(yuanyuan);temp = (U32)yuanyuan;Delay(6000000); LCDFIFOBufferSet(shici);temp = (U32)shici;Delay(6000000);LCDFIFOBufferSet(xinshang);temp = (U32)xinshang;Delay(6000000);music();if(p=2)/第一次輸入密碼不正確,顯示"密碼不正確,請重新輸入" LSP.StartX = 12; LSP.StartY

15、 = 7; LSP.LibPlace = 0x400000; LSP.Color = 0x07ff; LSP.LetterChar = wchar3; LSP.LCDBuffer = shurumima; LCDOutputShow(LSP,11); EBILedInit(0xFF);/燈閃爍 Delay(0x7270E0); EBILedInit(0x00);Delay(0x7270E0); if(p=3)/第二次輸入密碼不正確,顯示"密碼不正確,您還有一次機(jī)會,請重新輸入" LSP.StartX = 6; LSP.StartY = 7; LSP.LibPlace = 0

16、x400000; LSP.Color = 0x07ff; LSP.LetterChar = wchar4; LSP.LCDBuffer = shurumima; LCDOutputShow(LSP,19); EBILedInit(0xFF);/燈閃爍 Delay(0x7270E0); EBILedInit(0x00);Delay(0x7270E0); if(p=4)/第三次輸入密碼不正確,顯示對不起,您已經(jīng)連續(xù)三次輸入密碼錯(cuò)誤,系統(tǒng)鎖定 LSP.StartX = 5; LSP.StartY = 7; LSP.LibPlace = 0x400000; LSP.Color = 0x07ff; LS

17、P.LetterChar = wchar5; LSP.LCDBuffer =shurumima; LCDOutputShow(LSP,22); EBILedInit(0xFF); Delay(0x7270E0); EBILedInit(0x00);Delay(0x7270E0); return 0;2、 音樂播放程序部分 /*延時(shí)函數(shù)*/static void Delay(int nCnt) volatile int loop; for (loop=0; loop<nCnt; loop+);/*播放函數(shù)*/INT PlayCallback(UINT8 *pucBuff, UINT32 u

18、DataLen) UINT nLen; nLen = PCM_QUEUE_LEN - _uPcmQHead; /*將數(shù)據(jù)從PCM隊(duì)列中取出放到DMA緩存區(qū)*/ if (nLen >= uDataLen) memcpy(pucBuff, &PlayData_uPcmQHead, uDataLen); _uPcmQHead = (_uPcmQHead + uDataLen) % PCM_QUEUE_LEN; else memcpy(pucBuff, &PlayData_uPcmQHead, nLen); memcpy(&pucBuffnLen, PlayData, u

19、DataLen - nLen); _uPcmQHead = uDataLen - nLen; return 0;/* 讀AC97寄存器*/static UINT16 ac97_read_register(INT nIdx) UINT volatile nWait; /* 置起R_WB位并寫入寄存器地址 */ REG_ACTL_ACOS1 = (0x80 | nIdx); /* 設(shè)置幀是否有效和有效的時(shí)隙 */ REG_ACTL_ACOS0 = 0x11; Delay(100); /* 檢查AC_ACTL_ACCON的AC_R_FINISH位是否被置高,若被置高,說明讀數(shù)據(jù)緩存區(qū)已經(jīng)準(zhǔn)備好給CP

20、U讀取 */ for (nWait = 0; nWait < 0x10000; nWait+) if (REG_ACTL_ACCON & AC_R_FINISH) break; REG_ACTL_ACOS0 = 0; Delay(100); return (REG_ACTL_ACIS2 & 0xFFFF);/* 寫AC97寄存器*/static INT ac97_write_register(INT nIdx, UINT16 sValue) volatile UINT nWait; /* 清R_WB位并寫入寄存器地址*/ REG_ACTL_ACOS1 = nIdx; /*

21、 寫入AC97寄存器的值*/ REG_ACTL_ACOS2 = sValue; /* 設(shè)置幀的有效位和有效的時(shí)隙*/ REG_ACTL_ACOS0 = 0x13; Delay(100); /* 檢查AC_ACTL_ACCON的AC_W_FINISH位,若被清零,說明AC-LINK控制數(shù)據(jù)輸出緩存已經(jīng)被CPU移到編解碼器*/ for (nWait = 0; nWait < 0x10000; nWait+) if (!(REG_ACTL_ACCON & AC_W_FINISH) break; /*若讀回的值和寫入的值相同,則說明寫入成功*/ if (ac97_read_registe

22、r(nIdx) != sValue) while(1) ; REG_ACTL_ACOS0 = 0; return 0;/*初始化AC97*/UINT8 Initac97() /*使能音頻控制器和AC-LINK接口*/ REG_ACTL_CON = REG_ACTL_CON | IIS_AC_PIN_SEL | AUDIO_EN | ACLINK_EN | PFIFO_EN | RFIFO_EN | T_DMA_IRQ | R_DMA_IRQ | DMA_EN; Delay(1000); /*stereo模式*/ REG_ACTL_RESET = REG_ACTL_RESET | 0x3000;

23、 /* 重啟音頻控制器 */ REG_ACTL_RESET = REG_ACTL_RESET | ACTL_RESET_BIT; Delay(1000); REG_ACTL_RESET = REG_ACTL_RESET & ACTL_RESET_BIT;Delay(1000); /* 重啟AC97接口 */ REG_ACTL_RESET = REG_ACTL_RESET | AC_RESET; Delay(1000); REG_ACTL_RESET = REG_ACTL_RESET & AC_RESET; Delay(1000); /* 冷啟動AC97 */ REG_ACTL_

24、ACCON = REG_ACTL_ACCON | AC_C_RES; Delay(1000); REG_ACTL_ACCON = REG_ACTL_ACCON & AC_C_RES; Delay(1000); /* 檢查AC97的ACTL_ACIS0的CODEC_READY位,若置起則說明AC97準(zhǔn)備好了 */ if (!(REG_ACTL_ACIS0 & 0x10) while(1); Delay(100); /*選擇麥克 1;3D控制 關(guān);looback 關(guān)*/ ac97_write_register(AC97_GENERAL_PURPOSE, 0); return 0;

25、UINT8 StartPlay(INT nSamplingRate) /* 使能VRA(variable rate audio)并設(shè)置播放采樣率*/ ac97_write_register(AC97_EXT_AUDIO_CTRL, ac97_read_register(AC97_EXT_AUDIO_CTRL)|0x1); ac97_write_register(AC97_FRONT_DAC_RATE, nSamplingRate); /*設(shè)置DMA基地址和目的地址長度*/ REG_ACTL_PDSTB = base_addres; REG_ACTL_PDST_LENGTH = 0x1000;

26、PlayLastBlock = 0; /* 開始播放 */ REG_ACTL_ACOS0 = 0x1c; /設(shè)置數(shù)據(jù)傳輸時(shí)隙有效 REG_ACTL_PSR = 0x3; REG_ACTL_RESET = REG_ACTL_RESET | AC_PLAY; return 0; /* 設(shè)置音量 */INT SetPlayVolume(UINT8 ucLeftVol, UINT8 ucRightVol) INT nLData, nRData; if (ucLeftVol = 0) nLData = 0x80; else nLData = 31 - (ucLeftVol & 0x1f); if

27、 (ucRightVol = 0) nRData = 0x80; else nRData = 31 - (ucRightVol & 0x1f); sPlayVolume = (nLData << 8) | nRData; if (ucLeftVol = 0) nLData = 0x80; else nLData = 62 - ucLeftVol*2; if (ucRightVol = 0) nRData = 0x80; else nRData = 62 - ucRightVol*2; _uPlayVol = (nLData << 8) | nRData; /*

28、設(shè)置音量 */ ac97_write_register(AC97_PCM_OUT_VOLUME, sPlayVolume ); /PCM數(shù)據(jù)輸出音量 ac97_write_register(AC97_AUX_OUT_VOLUME, _uPlayVol); /耳機(jī)音量設(shè)置 ac97_write_register(AC97_MASTER_VOLUME, _uPlayVol); /全局音量設(shè)置return 0;UINT8 StopPlay() /* 停止播放 */ REG_ACTL_RESET = REG_ACTL_RESET & AC_PLAY; REG_ACTL_ACOS0 = 0; /

29、*關(guān)閉音頻播放中斷 */ REG_AIC_MDCR = REG_AIC_MDCR | 0x40; return 0;void music(void) PCM_QUEUE_LEN = sizeof (PlayData); _uPcmQHead = 0; /* 設(shè)置I/O連接到音頻 */ REG_GPIO_CFG0 = 0x155; /*/ GPIO4,1:輸入 GPIO0,2,3:輸出 */ REG_GPIO_DIR0 = 0xd; /*使能音頻時(shí)鐘 */ REG_CLKSEL = REG_CLKSEL|0x10000; Initac97(); /* 使能AC97播放中斷 */ REG_AIC_

30、SCR6 = 0x41; REG_AIC_MECR = 0x40; SetPlayVolume(30,30); StartPlay(8000); /* 檢查是否播放完成 */ while(1) if (_uPcmQHead >= (PCM_QUEUE_LEN-4096) break; StopPlay();3、 鍵盤及驗(yàn)證密碼部分 void KPI_Handler(void) /int i;U8 KeyValue, tmp;int cnt,sum=0;tmp = REG_KPISTATUS; /取按鍵值tmp &= 0x0000000f; /因?yàn)橛布B接關(guān)系,需要對按鍵進(jìn)行處理i

31、f(tmp > 0x7) && (tmp < 0xC)KeyValue = tmp - 4;else if(tmp > 0x3) && (tmp < 0x8)KeyValue = tmp + 4;elseKeyValue = tmp;switch(KeyValue)/實(shí)現(xiàn)按0-7,燈從左向右對應(yīng)亮,按8,左邊兩個(gè)燈亮,按9,右邊兩個(gè)燈亮case 0:EBILedInit(0x01);/0000 0001,0對應(yīng)燈亮break;case 1:EBILedInit(0x02);/0000 0010break;case 2:EBILedInit(0x04);/0000 0100break;case 3:EBILedInit(0x08);/0000 1000break;case 4:EBILedInit(0x10);/0001 0000bre

溫馨提示

  • 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)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論