版權(quán)說(shuō)明:本文檔由用戶(hù)提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
基于ARM芯片的數(shù)碼相框開(kāi)發(fā)(完整資料)(可以直接使用,可編輯優(yōu)秀版資料,歡迎下載)
基于ARM芯片的數(shù)碼相框開(kāi)發(fā)(完整資料)(可以直接使用,可編輯優(yōu)秀版資料,歡迎下載)深圳大學(xué)實(shí)驗(yàn)報(bào)告實(shí)驗(yàn)課程名稱(chēng):實(shí)驗(yàn)項(xiàng)目名稱(chēng):基于ARM7芯片的數(shù)碼相框開(kāi)發(fā)學(xué)院:計(jì)算機(jī)與軟件學(xué)院專(zhuān)業(yè):軟件工程報(bào)告人:學(xué)號(hào):班級(jí):同組人:學(xué)號(hào):班級(jí):指導(dǎo)教師:實(shí)驗(yàn)時(shí)間:2009-10-12~2010-9—12實(shí)驗(yàn)報(bào)告提交時(shí)間:教務(wù)處制實(shí)驗(yàn)?zāi)康呐c要求:了解ARM指令集;掌握直入鍵盤(pán)與矩陣鍵盤(pán)的原理和鍵盤(pán)寄存器的功能;掌握?qǐng)D像處理算法;掌握配置LCD控制器實(shí)現(xiàn)顯示圖片與文字。使用實(shí)驗(yàn)箱實(shí)現(xiàn)數(shù)碼相框的功能;了解AXDDebugger仿真調(diào)試的使用方法;掌握8段碼的知識(shí);方法、步驟:系統(tǒng)設(shè)計(jì)思路:實(shí)驗(yàn)中使用的硬件設(shè)備是實(shí)驗(yàn)箱的LCD顯示模塊,LED顯示模塊,4*4鍵盤(pán)模塊.系統(tǒng)開(kāi)始時(shí),先顯示開(kāi)機(jī)圖片,然后進(jìn)入圖片播放模式,當(dāng)有按鍵捕獲信號(hào)時(shí),在LED上顯示相應(yīng)的值并進(jìn)入相對(duì)應(yīng)的按鍵中斷程序。當(dāng)要進(jìn)行圖片處理時(shí),使用按鍵上一張或下一張選擇要處理的圖片、再按對(duì)應(yīng)的圖片處理按鍵進(jìn)行圖片處理.系統(tǒng)流程圖:以上為整個(gè)系統(tǒng)簡(jiǎn)要流程圖,之后各種模塊實(shí)現(xiàn)皆是為此展開(kāi).LCD顯示圖片原理:在系統(tǒng)內(nèi)會(huì)有一段存儲(chǔ)空間與顯示屏的像素點(diǎn)對(duì)應(yīng),通過(guò)改變?cè)摯鎯?chǔ)空間的內(nèi)容,從而改變顯示屏的內(nèi)容,該存儲(chǔ)空間被稱(chēng)為FrameBuffer,或顯存,顯示屏上的每一點(diǎn)都必然與FrameBuffer里的某一位置對(duì)應(yīng),所以解決顯示屏的顯示問(wèn)題,首先需要解決的是FrameBuffer的大小以及屏上的每一象素與FrameBuffer的映射關(guān)系.按照顯示屏的性能或顯示模式區(qū)分,顯示屏可以以單色或彩色顯示,我們的數(shù)碼相框采用的是16位色(65536種顏色)顯示。計(jì)算機(jī)反映自然界的顏色是通過(guò)RGB值來(lái)表示的,如果要在屏幕某一點(diǎn)顯示某種顏色,則必須給出響應(yīng)的RGB值,FrameBuffer?yàn)槠聊惶峁╋@示的內(nèi)容,就必須能夠從FrameBuffer里得到每一個(gè)象素的RGB值,在16位/象素的模式下,FrameBuffer里的每個(gè)單元16位,每個(gè)單元代表一個(gè)象素的RGB值,如下圖顯示:FrameBufferSize的大小計(jì)算公式如下圖,所以640×480,16位/象素,單屏幕模式,Framebuffer大小為614400個(gè)字節(jié)。我們使用image2LCD軟件將圖片裝換成數(shù)組形式,數(shù)組開(kāi)始的8個(gè)數(shù)據(jù)為圖片信息,之后數(shù)組中每2個(gè)數(shù)據(jù)為一個(gè)像素點(diǎn)的顏色,由數(shù)組開(kāi)始的8?jìng)€(gè)數(shù)據(jù)得出圖片大小,按順序排列之后數(shù)據(jù)便可在LCD中顯示整個(gè)圖片。由于長(zhǎng)度問(wèn)題,存在高8位與低8位,所以像素點(diǎn)的對(duì)應(yīng)RGB值為后一個(gè)數(shù)據(jù)左移8位再加上前一個(gè)數(shù)據(jù).LCD像素顯示主要函數(shù):voidlcd_put_pixel(intx,inty,unsignedcharc){longintbase_addr;base_addr=0xa0500000;if(x〈1280&&y<480)//限制圖片顯示范圍 (*((unsignedchar*)(base_addr+y*1280+x)))=c;}4*4鍵盤(pán)捕獲原理:通過(guò)調(diào)用直入鍵盤(pán)接口和矩陣鍵盤(pán)、并初始化和調(diào)用鍵盤(pán)寄存器,實(shí)現(xiàn)了4*4鍵盤(pán)同時(shí)使用,使得系統(tǒng)可以通過(guò)鍵盤(pán)的按鍵來(lái)驅(qū)動(dòng)8段數(shù)碼管的點(diǎn)亮(在此實(shí)驗(yàn)中,LED的點(diǎn)亮是為了檢驗(yàn)按鍵是否正常,在日后版本中此功能可去掉)和做出相應(yīng)圖片處理效果。4*4鍵盤(pán)的主要功能:系統(tǒng)進(jìn)入圖片處理時(shí),通過(guò)按鍵捕獲進(jìn)行相應(yīng)的圖片處理效果.同時(shí)也會(huì)顯示相應(yīng)的LED。(測(cè)試期間方便檢驗(yàn)按鍵是否正確)實(shí)驗(yàn)過(guò)程及內(nèi)容:圖像處理算法:(所有效果圖請(qǐng)見(jiàn)數(shù)據(jù)處理分析)正常圖片顯示:(之后所有圖像處理的基礎(chǔ))判斷圖片數(shù)組前8?jìng)€(gè)數(shù)據(jù)得到圖片長(zhǎng)寬后,通過(guò)LCD像素顯示主要函數(shù)按順序把圖片數(shù)組數(shù)據(jù)填充到FrameBuffer中,最終LCD得以把圖片顯示出來(lái)。(之后各圖像處理算法均通過(guò)此算法基礎(chǔ)進(jìn)行修改得來(lái))圖片放大:圖片放大采用整數(shù)倍放大,簡(jiǎn)單來(lái)說(shuō)就是原來(lái)一個(gè)像素點(diǎn)在放大后顯示4個(gè)像素點(diǎn)。例如2倍放大時(shí)就是將每個(gè)像素點(diǎn)的顏色填充為以他為左上角的2*2矩形的4個(gè)像素點(diǎn),此時(shí)圖片長(zhǎng)寬都增大一倍實(shí)現(xiàn)圖像放大效果?;叶刃Ч夯叶刃Ч褪菍D像各個(gè)像素的RGB值提取出來(lái)進(jìn)行加權(quán)運(yùn)算后再填充回去,便可達(dá)到灰度效果.值得注意的是,在本實(shí)驗(yàn)中,加權(quán)運(yùn)算之前G值需要右移一位(因?yàn)楸緦?shí)驗(yàn)中LCD顯示的R、G、B長(zhǎng)度分別為5、6、5,經(jīng)過(guò)實(shí)驗(yàn)多次嘗試,要得到灰度需要在加權(quán)運(yùn)算中保持長(zhǎng)度一致),加權(quán)運(yùn)算后G值再左移一位,并RGB值判斷是否溢出。圖片鏡像:鏡像變換是指將指定區(qū)域的圖像左右翻轉(zhuǎn)地顯示在屏幕。分析鏡像變換過(guò)程可以發(fā)現(xiàn):每行圖像信息的處理方式是相同的,而且行順序不發(fā)生變化,只是每一行的像素信息按從左到右的順序進(jìn)行了左右顛倒,從而實(shí)現(xiàn)了鏡像變換。因此,采用按行逐點(diǎn)變換的方式實(shí)現(xiàn)圖像的鏡像。圖片縮小:圖片縮小采用整數(shù)倍縮小,簡(jiǎn)單來(lái)說(shuō)就是像素點(diǎn)間隔顯示。例如2倍縮小時(shí)就是將像素點(diǎn)矩陣的奇數(shù)坐標(biāo)保留,偶數(shù)坐標(biāo)舍去來(lái)實(shí)現(xiàn)圖像縮小效果。石雕效果:浮雕效果就是只將圖像的變化部分突出出來(lái),而相同顏色部分則被淡化,使圖像出現(xiàn)縱深感,從而達(dá)到浮雕效果,實(shí)驗(yàn)采用的算法是將要處理的像素取值為與處于對(duì)角線(xiàn)上的另一個(gè)像素間的差值,然后在讓對(duì)應(yīng)的RGB值分別加上16、32、16,作為新像素點(diǎn)的值。顏色翻轉(zhuǎn):反色的原理是將R、G、B值反轉(zhuǎn)。用0XFF減去數(shù)組中的每一個(gè)值即可以得到新的數(shù)組,在對(duì)應(yīng)顯示即可.旋轉(zhuǎn)90°:圖片旋轉(zhuǎn)的原理就是將像素點(diǎn)矩陣旋轉(zhuǎn)90°,然后將再將新的矩陣顯示出來(lái)。如下圖:百葉窗效果:圖片百葉窗效果顯示就是顯示圖片時(shí)按一定的數(shù)目間隔顯示(實(shí)驗(yàn)中取10)。例如縱向的百葉窗效果就是當(dāng)?shù)?列顯示完畢后顯示第11列,當(dāng)超多圖片長(zhǎng)度后回到第2列顯示,如此類(lèi)推知道顯示完圖片。圖像切換的算法:程序一開(kāi)始聲明一指針,通過(guò)按鍵捕獲和指針切換指向不同的圖像數(shù)組便可實(shí)現(xiàn)不同圖片間的切換。以此為基礎(chǔ),實(shí)現(xiàn)了圖片的幻燈片播放效果、下一張和上一張的切換等.下一張圖片切換的流程圖:數(shù)據(jù)處理分析:圖像放大:(左邊為原圖(正常效果),右邊為效果圖)灰度效果:(左邊為原圖,右邊為效果圖)鏡像效果:(左邊為原圖,右邊為效果圖)圖像縮小:(左邊為原圖,右邊為效果圖)石雕效果:(左邊為原圖,右邊為效果圖)顏色翻轉(zhuǎn):(左邊為原圖,右邊為效果圖)旋轉(zhuǎn)90°:(左邊為原圖,右邊為效果圖)百葉窗效果:(左邊為原圖,中間為橫向效果圖,右邊為縱向效果圖)圖像切換效果:數(shù)目相框市場(chǎng)調(diào)研與功能設(shè)想PPT:數(shù)碼相框功能實(shí)現(xiàn)PPT:實(shí)驗(yàn)結(jié)論:通過(guò)本次實(shí)驗(yàn),使我對(duì)匯編與C語(yǔ)言混合編程,掌握了8段碼的知識(shí),直入鍵盤(pán)與矩陣鍵盤(pán)的原理和鍵盤(pán)寄存器的功能有了更深入的了解,并清楚了解到如何配置LCD控制器,實(shí)現(xiàn)顯示圖片與文字,還有學(xué)會(huì)許多圖像處理算法。在實(shí)驗(yàn)中,使得自己學(xué)到的東西得以學(xué)以致用,并成功實(shí)現(xiàn)各種功能,那種喜悅心情令人難以忘懷。但同時(shí)在實(shí)驗(yàn)中也認(rèn)識(shí)到了自己學(xué)習(xí)中的不足。在實(shí)驗(yàn)中遇到關(guān)于過(guò)不少的難題,如:圖像顯示的實(shí)驗(yàn)、系統(tǒng)架構(gòu)、圖像處理方面的算法等.但通過(guò)與隊(duì)友相互討論,上網(wǎng)或去圖書(shū)館找資料,最終都一一克服了這些難題并最后成功地完成實(shí)驗(yàn).期間不僅增強(qiáng)了自己團(tuán)隊(duì)合作能力與自我學(xué)習(xí)能力,更使自己的編程能力在本次實(shí)驗(yàn)中得到了很大的提升。雖然本次實(shí)驗(yàn)完成的數(shù)碼相框還有一些代碼沒(méi)有很好完善,例如實(shí)數(shù)倍縮放,任意角度旋轉(zhuǎn)等功能.功能效果方面也還存在一些不足,例如圖像不能二次處理,圖像壓縮,缺少系統(tǒng)菜單等不足。但我相信通過(guò)本次實(shí)驗(yàn)種種成功的、不足的、失敗的經(jīng)驗(yàn),能使我在日后的實(shí)驗(yàn)中更好地發(fā)揮,并使我不斷進(jìn)步。缺陷與不足是在所難免的,但它們卻能鞭策我向前。指導(dǎo)教師批閱意見(jiàn):成績(jī)?cè)u(píng)定:指導(dǎo)教師簽字:年月日備注:注:1、報(bào)告內(nèi)的項(xiàng)目或內(nèi)容設(shè)置,可根據(jù)實(shí)際情況加以調(diào)整和補(bǔ)充。2、教師批改學(xué)生實(shí)驗(yàn)報(bào)告時(shí)間應(yīng)在學(xué)生提交實(shí)驗(yàn)報(bào)告時(shí)間后10日內(nèi).附錄:(源程序代碼)library_register.sEXPORTgpio_GPDR1EXPORTgpio_GPDR2EXPORTgpio_GAFR1_UEXPORTgpio_GAFR2_LEXPORTinit_GPDR1EXPORTinit_GPDR2EXPORTinit_GAFR1_UEXPORTinit_GAFR2_LEXPORTdesc_word_0EXPORTdesc_word_1EXPORTdesc_word_2EXPORTdesc_word_3EXPORTinit_word_0EXPORTinit_word_1EXPORTinit_word_2EXPORTinit_word_3EXPORTLCCR0EXPORTLCCR1EXPORTLCCR2EXPORTL(fǎng)CCR3EXPORTFBR0EXPORTFBR1EXPORTLCSREXPORTL(fǎng)IIDREXPORTFDADR0EXPORTFDADR1EXPORTinit_LCCR0EXPORTinit_LCCR1EXPORTinit_LCCR2EXPORTinit_LCCR3EXPORTinit_FBR0EXPORTinit_FBR1EXPORTinit_FDADR0EXPORTbacklight_csEXPORTlcdlightEXPORTMDCNFGEXPORTMDREFREXPORTMSC0EXPORTMSC1EXPORTMSC2EXPORTMECREXPORTSX(jué)CNFGEXPORTSXMRSEXPORTMDMRSEXPORTBOOT_DEFEXPORTinit_MDCNFGEXPORTinit_MDREFREXPORTinit_MSC0EXPORTinit_MSC1EXPORTinit_MSC2EXPORTinit_MECREXPORTinit_SXCNFGEXPORTinit_SXMRSEXPORTinit_MDMRSEXPORTinit_BOOT_DEF AREAlibrary_register,DATA,READONLY;GPIOconfigurationgpio_GPDR1EQU0x40e00010gpio_GPDR2EQU0x40e00014gpio_GAFR1_UEQU0x40e00060gpio_GAFR2_LEQU0x40e00064init_GPDR1EQU0xfc000000init_GPDR2EQU0x7fffinit_GAFR1_UEQU0xaaa00000init_GAFR2_LEQU0x2aaaaaaa;FrameDescriptordesc_word_0EQU0xa0300000desc_word_1EQU0xa0300004desc_word_2EQU0xa0300008desc_word_3EQU0xa030000cinit_word_0EQU0xa0300000init_word_1EQU0xa0500000init_word_2EQU0x0init_word_3EQU0x00096000;LCDControllerLCCR0EQU0x44000000LCCR1EQU0x44000004LCCR2EQU0x44000008LCCR3EQU0x4400000CFBR0EQU0x44000020FBR1EQU0x44000024LCSREQU0x44000038LIIDREQU0x4400003CFDADR0EQU0x44000200FDADR1EQU0x44000210init_LCCR0EQU0x7b008f9;3b008f8;003008f8init_LCCR1EQU0x6481067f;530fee(cuò)7finit_LCCR2EQU0x220001df;210a05dfinit_LCCR3EQU0x4400006;0440ff07init_FBR0EQU0x0init_FBR1EQU0x0init_FDADR0EQU0xa0300000backlight_csEQU0x08000000l(fā)cdlightEQU0x80;MemoryControllerMDCNFGEQU0x48000000MDREFREQU0x48000004MSC0EQU0x48000008MSC1EQU0x4800000cMSC2EQU0x48000010MECREQU0x48000014SXCNFGEQU0x4800001CSXMRSEQU0x48000024MDMRSEQU0x48000040BOOT_DEFEQU0x48000044init_M(jìn)DCNFGEQU0x02000ac9init_MDREFREQU0x0011e018init_MSC0EQU0x95c095c0init_MSC1EQU0xb884a691init_MSC2EQU0x7ff4b88cinit_M(jìn)ECREQU0x1init_SXCNFGEQU0x0;6011init_SXMRSEQU0x0init_MDMRSEQU0x320032init_BOOT_DEFEQU0x00000008 ENDlibrary_variant。s EXPORT postDelay EXPORTstack_myself?AREAlibrary_variant,DATA,READONLYpostDelay EQU?0x1000stack_myselfEQU0xa0700000 ENDos_lcd.cexternvoidprint_3232(char*,int,int);//externvoidprint_0808(char*,int,int);//externvoidprint_0813(char*,int,int);externvoidprint_song2312(char*,int,int);externvoiddisable_lcd(void);externvoidenable_lcd(void);externvoidlighton1(void);externvoidlighton2(void);externvoidlightoff1(void);externvoidlightoff2(void);//externvoidtypename(void);externchargImage_00[];externchargImage_01[];externchargImage_02[];externchargImage_03[];externchargImage_04[];externchargImage_4114[];externchargImage_123[];externchargImage_pic[];externchargImage_111[];externchargImage_11[];externchargImage_22[];externchargImage_33[];externchargImage_0[];externchargImage_1[];externchargImage_2[];externchargImage_3[];externchargImage_4[];externchargImage_5[];externvoidprint_pic(char*);externvoidprint_pic1(char*);externvoidprint_pic2(char*);externvoidprint_pic5(char*);externvoidprint_pic6(char*);externvoidprint_pic7(char*);externvoidprint_pic8(char*);externvoidprint_pic9(char*);externvoidprint_pic10(char*);externvoidprint_pic_test(char*);externvoidprint_pic_exchange(char*);externvoidprint_pic_exchange2(char*);externvoidscreen_clean(int);//externcharword_1[32][4];//externcharword_2[32][4];//externcharword_3[32][4];//externcharword_4[32][4];//externcharword_5[32][4];//externcharword_6[32][4];//externcharword_7[32][4];//externcharcharacter8_8[];//externcharcharacter8_13[];externcharsong2312_1612[];#defineLED_CS3? (*((volatileunsignedshortint*)(0x10300000)))#defineLED_CS4 (*((volatileunsignedshortint*)(0x10400000)))//鍵盤(pán)設(shè)置寄存器#defineKEYPAD_1(*((volatileunsignedint*)(0x41500000)))#defineKEYPAD_2(*((volatileunsignedint*)(0x41500048)))//鍵盤(pán)允許中斷設(shè)置#defineINTERRUPTION(*((volat(yī)ileunsignedint*)(0x40d00004)))//只讀寄存器#defineKEYPAD_8 (*((volatileunsignedchar*)(0x41500008)))#defineKEYPAD0_11 (*((volatileunsignedchar*)(0x41500020)))char*pictest;intpic_no=0;voidudelay(intmulti){longintdelay_1,delay_2;multi*=5;for(delay_2=0;delay_2〈multi;delay_2++)for(delay_1=0;delay_1〈100000;delay_1++);}voidtest(){ //white ?scree(cuò)n_clean(0xFFFFFFFF); print_pic(gImage_pic);??udelay(50);??screen_clean(0xFFFFFFFF);??print_pic5(gImage_pic);? udelay(50);}//選擇顯示圖片voidpic_test(inti){?switch(i)?{?case0:??pictest=gImage_01; ?break;case1:??pictest=gImage_02; break;?case2: ?pictest=gImage_03; break; case3:??pictest=gImage_04;??break; default:? break;}}//全部自動(dòng)播放voidpic_all(){ inti;?for(i=0;i<4;i++) { screen_clean(0xFFFFFFFF); print_pic(pictest);? pic_no++;if(pic_no>3)pic_no=0;pic_test(pic_no);udelay(40); }}voidIRQ_keypad(void){chark;charch;k=KEYPAD_8;ch=KEYPAD0_11;switch(k) { case0x40: ?LED_CS3=0xf040; screen_clean(0xFFFFFFFF); print_pic(pictest);//由上到下,左到右顯示圖片 break;case0x02: LED_CS3=0xf079;??scree(cuò)n_clean(0xFFFFFFFF); ?print_pic5(pictest);//左右交換,顯示圖片 break; case0x04:??LED_CS3=0xf024; screen_clean(0xFFFFFFFF); print_pic2(pictest);//由上到下,左到右顯示圖片(長(zhǎng)寬各*2) ?break; case0x20:? LED_CS3=0xf030; screen_clean(0xFFFFFFFF);print_pic10(pictest);//縮小? break; default:? break;}switch(ch){case0x00:LED_CS3=0xf019;screen_clean(0xFFFFFFFF);print_pic_exchange2(pictest);//石雕break;case0x01:LED_CS3=0xf012;screen_clean(0xFFFFFFFF);print_pic6(pictest);//灰度顯示break;case0x02:LED_CS3=0xf003;screen_clean(0xFFFFFFFF);print_pic_exchange(pictest);//顏色反轉(zhuǎn)break;case0x05:LED_CS3=0xf078;screen_clean(0xFFFFFFFF);print_pic7(pictest);//圖片旋轉(zhuǎn)90度break;case0x10:LED_CS3=0xf000;screen_clean(0xFFFFFFFF);print_pic8(pictest);//百葉窗橫向break;case0x11:LED_CS3=0xf018;screen_clean(0xFFFFFFFF);print_pic9(pictest);//百葉窗縱向break;case0x12:??scree(cuò)n_clean(0xFFFFFFFF);? pic_all();//播放全部圖片LED_CS3=0xf008;break;case0x15:LED_CS3=0xf000;test();break;case0x20:LED_CS3=0xf046;screen_clean(0xFFFFFFFF);pic_no++;//播放下一張圖片if(pic_no>3)pic_no=0;pic_test(pic_no);print_pic(pictest);udelay(20);break;case0x21:LED_CS3=0xf040;screen_clean(0xFFFFFFFF);pic_no--;//播放下一張圖片if(pic_no〈0)pic_no=3;pic_test(pic_no);print_pic(pictest);udelay(20);break;case0x22:LED_CS3=0xf006;scree(cuò)n_clean(0xFFFFFFFF);print_pic(gImage_123);break;case0x25:LED_CS3=0xf00e;scree(cuò)n_clean(0xFFFFFFFF);//清屏break;default: ?break;}}voiddummyOs(){?//screen_clean(0xFFFFFFFF);?//charpictest[];?//intpic_no;?pictest=gImage_01;?KEYPAD_1=0x7ffffff3;//中斷直接鍵盤(pán)0x600003f3;//0x2faff1c2;//KEYPAD_2=0x00000303;INTERRUPTION=0x00000010;LED_CS3=0x007f;LED_CS4=0xf0f0;?while(1) {? //white ?scree(cuò)n_clean(0xFFFFFFFF); //typename(); print_pic8(gImage_00); udelay(100);??scree(cuò)n_clean(0xFFFFFFFF); ?//typename(); print_pic9(gImage_00);??udelay(100);??lighton1();? lightoff2(); }}boot.s IMPORT postDelay IMPORT?post_initGpio?IMPORT?dummyOs IMPORT post_LcdController?IMPORT backlight_cs?IMPORT?lcdlight?IMPORT?stack_myself IMPORT init_Memory?IMPORT screen_clean?IMPORT?IRQ_Handler?AREAboot,CODE,READONLY?ENTRYResetEntry ?BReset_Handler?BUndefined_Handler BSWI_Handler BPrefetch_Handler BDat(yī)aAbort_Handler?NOP?BIRQ_Handler?BFIQ_HandlerUndefined_Handler ?B Undefined_HandlerSWI_Handler B SWI_HandlerPrefetch_Handler?B Prefetch_HandlerDataAbort_Handler?B DataAbort_Handler;IRQ_Handler ;B?IRQ_Handler FIQ_Handler?B FIQ_Handler???;DefinedbyyourselfReset_Handler??;**************************?;InitGPIO ;**************************?movr14,pc ldrpc,=post_initGpio ;**************************?;InitMemory ;**************************?movr14,pc ldrpc,=init_Memory ;**************************?;InitStack ;************************** ldrr11,=stack_myself movr13,r11?;************************** ;堆棧init_Stack ;**************************MSRCPSR_c,#0xd2;MRS和MSR都是程序狀態(tài)寄存器傳指令。把0XD2送到CPSR_c中的低字節(jié)中[7~0]?LDRSP,=0xa0605000;LDR是把一個(gè)數(shù)字常量或一個(gè)地址加載到寄存器偽指令0xa0605000MSRCPSR_c,#0xd1?LDRSP,=0xa060a000MSRCPSR_c,#0xd7 LDRSP,=0xa060e000MSRCPSR_c,#0xdb LDRSP,=0xa0714000?MSRCPSR_c,#0xdf LDRSP,=0xa0720000?MSRCPSR_c,#0xd3?LDRSP,=0xa0600000;///////////////////////;I位置1才允許IRQ中斷P23 MRSR1,CPSR?BICR1,R1,#0x80 MSRCPSR_c,r1;***************************** IMPORT|Image$$RO$$Base|IMPORT|Image$$RO$$Limit| IMPORT|Image$$RW$$Base| IMPORT|Image$$ZI$$Base| IMPORT|Image$$ZI$$Limit|BaseOfROM DCD |Image$$RO$$Base|TopOfROM?DCD?|Image$$RO$$Limit|BaseOfRW?DCD |Image$$RW$$Base|BaseOfZero DCD |Image$$ZI$$Base|EndOfBSS DCD?|Image$$ZI$$Limit| adrr0,ResetEntry ldrr2,BaseOfROM?cmpr0,r2?ldreqr0,TopOfROM beqInitRAM?ldrr3,TopOfROM?;copyROData0? ldmiar0!,{r4-r7}?stmiar2!,{r4-r7}?cmpr2,r3 bcc%B0 subr2,r2,r3?subr0,r0,r2InitRAM?;copyRWData?ldrr2,BaseOfRW ldrr3,BaseOfZero1 cmpr2,r3 ldrccr1,[r0],#4?strccr1,[r2],#4 bcc%B1 ;zeroinit movr0,#0 ldrr3,EndOfBSS2 cmpr2,r3 strccr0,[r2],#4bcc%B2?;movr14,pc ;ldrpc,=screen_clean?;*************************** ;LCD_Controller?;***************************?movr14,pc?ldrpc,=post_LcdController?;*************************** ;Loop?;***************************?ldrr0,=postDelaypostLoop?subr0,r0,#0x1?cmpr0,#0x0bnepostLoop?;**************************** ;turnonthelightofboard;**************************** MOVR0,#0xa000000? ?LDRHR2,[R0,#0]?AND?R2,R2,#0xFFFFCFFF?STRHR2,[R0,#0];**************************** ;turnonbacklight ;**************************** LDRHR2,[R0,#0]??ORR R2,R2,#0x100 STRHR2,[R0,#0]ldrpc,=dummyOs ENDpost_initDescriptor.sIMPORTdesc_word_0IMPORTdesc_word_1IMPORTdesc_word_2IMPORTdesc_word_3IMPORTinit_word_0IMPORTinit_word_1IMPORTinit_word_2IMPORTinit_word_3IMPORTLCCR0IMPORTLCCR1IMPORTLCCR2IMPORTL(fǎng)CCR3IMPORTFBR0IMPORTFBR1IMPORTLCSRIMPORTLIIDRIMPORTFDADR0IMPORTFDADR1IMPORTinit_LCCR0IMPORTinit_LCCR1IMPORTinit_LCCR2IMPORTinit_LCCR3IMPORTinit_FBR0IMPORTinit_FBR1IMPORTinit_FDADR0EXPORTpost_LcdControllerAREApost_LcdController,CODE,READONLYldrr11,=desc_word_0ldrr1,=init_word_0strr1,[r11]nopnopldrr11,=desc_word_1ldrr1,=init_word_1strr1,[r11]nopnopldrr11,=desc_word_2ldrr1,=init_word_2strr1,[r11]nopnopldrr11,=desc_word_3ldrr1,=init_word_3strr1,[r11]nopnopnopnopldrr11,=LCCR1ldrr1,=init_LCCR1strr1,[r11]nopnopldrr11,=LCCR2ldrr1,=init_LCCR2strr1,[r11]nopnopldrr11,=LCCR3ldrr1,=init_LCCR3strr1,[r11]nopnopldrr11,=FDADR0ldrr1,=init_FDADR0strr1,[r11]nopnopldrr11,=LCCR0ldrr1,=init_LCCR0strr1,[r11]nopnopldrr11,=LCCR0ldrr1,[r11]orrr1,r1,#0x01strr1,[r11]movpc,r14ENDpost_initGpio.sIMPORTgpio_GPDR1IMPORT?gpio_GPDR2IMPORTgpio_GAFR1_UIMPORTgpio_GAFR2_LIMPORTinit_GPDR1IMPORTinit_GPDR2IMPORTinit_GAFR1_UIMPORTinit_GAFR2_L EXPORT post_initGpio AREApost_initGpio,CODE,READONLYldrr1,=0x40e00000?MOVR0,#0x3000?STRR0,[R1,#0x18]?MOVR0,#0x800 STRR0,[R1,#0x24]?MOVR0,#0x80000000 STRR0,[R1,#0x54] ldrR0,=0x10 ;0xa5000010 STRR0,[R1,#0x58] ldrR0,=0xc1a08000 STRR0,[R1,#0xc] MOVR0,#0?STRR0,[R1,#0x1c] MOVR0,#0 STRR0,[R1,#0x28] LDRR0,=0xc9c??;0xa9558 STRR0,[R1,#0x5c] LDRR0,=0xca0 ;0xaaa590aa?STRR0,[R1,#0x60]?LDRR0,=0xca4 ;0xfccf0382?STRR0,[R1,#0x10] MOVR0,#0x10000 STRR0,[R1,#0x20]?MOVR0,#0?STRR0,[R1,#0x2c] ldrR0,=0xa0000000?;0xaaaaaaaa STRR0,[R1,#0x64] ldrR0,=0x400? ;0x90402?STRR0,[R1,#0x68]?ldrR0,=0x0221ffff?STRR0,[R1,#0x14]; LDRR0,=0xca8;?STRR0,[R1,#0x68]?MOVR0,#0x20000?STRR0,[R1,#0x118]?MOVR0,#0?STRR0,[R1,#0x124]?LDR? R0,=0x020a9550;0xa9510;0x020a9950?STRR0,[R1,#0x6c]?ldrR0,=0x1408 STRR0,[R1,#0x70] LDR? R0,=0x21380;0x20380?STRR0,[R1,#0x10c];configtwice: ldrR0,=0xa5000010 ;0x0x10 STRR0,[R1,#0x58]?LDRR0,=0xa9558 ;0xc9c STRR0,[R1,#0x5c] LDRR0,=0xaaa590aa ;0xca0 STRR0,[R1,#0x60] LDRR0,=0xfccf0382 ;0xca4 STRR0,[R1,#0x10]?ldrR0,=0xaaaaaaaa?;0xa0000000 STRR0,[R1,#0x64] ldrR0,=0x50090402 ?;0x400 STRR0,[R1,#0x68]movpc,r14 ENDpost_initMemory。sIMPORTMDCNFGIMPORTMDREFRIMPORTMSC0IMPORTMSC1IMPORTMSC2IMPORTMECRIMPORTSX(jué)CNFGIMPORTSX(jué)MRSIMPORTMDMRSIMPORTBOOT_DEFIMPORTinit_MDCNFGIMPORTinit_MDREFRIMPORTinit_MSC0IMPORTinit_MSC1IMPORTinit_MSC2IMPORTinit_MECRIMPORTinit_SXCNFGIMPORTinit_SXMRSIMPORTinit_MDMRSIMPORTinit_BOOT_DEFEXPORTinit_MemoryAREAinit_Memory,CODE,READONLYldrr11,=MDCNFGldrr1,=init_MDCNFGstrr1,[r11]nopnopldrr11,=MDREFRldrr1,=init_MDREFRstrr1,[r11]nopnopldrr11,=MSC0ldrr1,=init_MSC0strr1,[r11]nopnopldrr11,=MSC1ldrr1,=init_MSC1strr1,[r11]nopnopldrr11,=MSC2ldrr1,=init_MSC2strr1,[r11]nopnopldrr11,=MECRldrr1,=init_MECRstrr1,[r11]nopnopldrr11,=SXCNFGldrr1,=init_SX(jué)CNFGstrr1,[r11]nopnopldrr11,=SXMRSldrr1,=init_SXMRSstrr1,[r11]nopnopldrr11,=MDMRSldrr1,=init_MDMRSstrr1,[r11]nopnopldrr11,=BOOT_DEFldrr1,=init_BOOT_DEFstrr1,[r11]nopnopmovpc,r14ENDprint_method。c#defineLCD_LCCR0(*(volatileunsignedlong*)(0x44000000))#defineLCD_FDADR0(*(volat(yī)ileunsignedlong*)(0x44000200))#defineLCD_FSADR0(*(volatileunsignedlong*)(0xa0300004))#defineLCD_LCSR(*(volatileunsignedlong*)(0x44000038))#defineLCD_LIGHT(*(volat(yī)ileunsignedlong*)(0xa000000))#defineLIGHT1?(1<<12)#defineLIGHT2?(1〈<13)#defineBACKLIGHT(1〈<8)externvoidudelay(intmulti);externcharword_1[32][4];externcharword_2[32][4];externcharword_3[32][4];externcharword_4[32][4];externcharword_5[32][4];externcharword_6[32][4];externcharword_7[32][4];externvoidprint_3232(char*,int,int);externvoidlcd_put_pixel(int,int,unsignedchar);externvoidlcd_put_pixel2(int,int,longint);voidlighton1(void){ LCD_LIGHT=(~LIGHT1)|BACKLIGHT; }voidlighton2(void){?LCD_LIGHT=(~LIGHT2)|BACKLIGHT;}voidlightoff1(void){ LCD_LIGHT=LIGHT1|BACKLIGHT; }voidlightoff2(void){?LCD_LIGHT=LIGHT2|BACKLIGHT;}voidtypename(void){print_3232(word_1[0],200,200);print_3232(word_2[0],250,200);print_3232(word_3[0],300,200);print_3232(word_4[0],350,200);print_3232(word_5[0],400,200);print_3232(word_6[0],450,200);}voidscreen_clean(longintcolor){longinti,fill_color;i=0x96000/4;fill_color=color;for(;i>0;i--)(*(volatileunsignedlongint*)(0xa0500000+i*4))=fill_color;}voidlcd_put_pixel(intx,inty,unsignedcharc){longintbase_addr;base_addr=0xa0500000;if(x<1280&&y<480)? (*((unsignedchar*)(base_addr+y*1280+x)))=c;}voidlcd_put_pixel2(intx,inty,longintc){longintbase_addr;base_addr=0xa0500000;if(x〈1280&&y〈480)??(*((volatileunsignedlongint*)(base_addr+y*1280+x)))=c;}//由上到下,左到右顯示圖片voidprint_pic(char*pic){intx,y;intwidth,height,rw,rh;rw=*(pic+3);rh=*(pic+5);width=*(pic+2)+rw*256;height=*(pic+4)+rh*256;for(y=0;y〈height;y++)? for(x=0;x<width*2;x++)? lcd_put_pixel(640-width+x,240-height/2+y,*(pic+8+y*width*2+x));}//縮小voidprint_pic10(char*pic){intx,y;intwidth,height,rw,rh;rw=*(pic+3);rh=*(pic+5);width=*(pic+2)+rw*256;height=*(pic+4)+rh*256;for(y=0;y<height;y=y+2)??for(x=0;x<width*2;x=x+4)? {? lcd_put_pixel(640-width+x/2,240-height/2+y/2,*(pic+8+y*2*width+x));? lcd_put_pixel(640-width+x/2+1,240—height/2+y/2,*(pic+8+y*2*width+x+1));}}//百葉窗橫向voidprint_pic8(char*pic){intx,y,i;intwidth,height,rw,rh;rw=*(pic+3);rh=*(pic+5);width=*(pic+2)+rw*256;height=*(pic+4)+rh*256;for(y=0;y<10;y++) for(i=0;i〈height/10;i++)?? for(x=0;x〈width*2;x++) ??lcd_put_pixel(640-width+x,240-h(huán)eight/2+y+i*10,*(pic+8+(y+i*10)*width*2+x));}//百葉窗縱向voidprint_pic9(char*pic){intx,y,i;intwidth,height,rw,rh;rw=*(pic+3);rh=*(pic+5);width=*(pic+2)+rw*256;height=*(pic+4)+rh*256;for(x=0;x<10;x++)?for(i=0;i<width*2/10;i++)?? for(y=0;y〈height;y++)?? lcd_put_pixel(640—width+x+i*10,240-height/2+y,*(pic+8+y*width*2+x+i*10));}//由左到右,上到下顯示圖片voidprint_pic1(char*pic){intx,y;intwidth,height,rw,rh;rw=*(pic+3);rh=*(pic+5);width=*(pic+2)+rw*256;height=*(pic+4)+rh*256;for(x=0;x<width*2;x++)? for(y=0;y<height;y++)? lcd_put_pixel(640-width+x,240-height/2+y,*(pic+8+y*width*2+x));}//圖片旋轉(zhuǎn)90度voidprint_pic7(char*pic){intx,y;intwidth,height,rw,rh;rw=*(pic+3);rh=*(pic+5);width=*(pic+2)+rw*256;height=*(pic+4)+rh*256;for(y=0;y<height;y++) for(x=0;x〈width*2;x=x+2) {??lcd_put_pixel(640-height+y*2,240-width/2+x/2,*(pic+8+(height—y-1)*width*2+x));??lcd_put_pixel(640-height+y*2+1,240-width/2+x/2+1,*(pic+8+(height-y-1)*width*2+x+1));?}}//灰度顯示voidprint_pic6(char*pic){intx,y;intwidth,height,rw,rh;intr,g,b,rr,gg,bb,temp1,temp2,temp3,result1,result2;longtemp4;rw=*(pic+3);rh=*(pic+5);width=*(pic+2)+rw*256;height=*(pic+4)+rh*256;for(y=0;y<height;y++)??for(x=0;x<width*2;x=x+2) { ? temp1=*(pic+8+y*width*2+x);???temp2=*(pic+8+y*width*2+x+1);r=(temp2>>3);? ?g=(temp2%8)*8+(temp1>>5); ? b=temp1%32; ? temp3=(30*r+59*g/2+11*b)/100;rr=temp3; ?gg=temp3*2;???bb=temp3;???if(rr>0x1f)rr=0x1f; ??if(rr<0)rr=0;? if(gg〉0x3f)gg=0x3f;?? if(gg<0)gg=0; ?if(bb〉0x1f)bb=0x1f; ? if(bb〈0)bb=0; ?temp4=rr*2048+gg*32+bb;???result1=(temp4〉〉8); result2=temp4%256;? lcd_put_pixel(640-width+x,240-h(huán)eight/2+y,result2); lcd_put_pixel(640-width+x+1,240-height/2+y,result1);? }}//testvoidprint_pic_test(char*pic){intx,y;intwidth,height,rw,rh;intr,g,b,temp1,temp2,result1,result2;longtemp3;rw=*(pic+3);rh=*(pic+5);width=*(pic+2)+rw*256;height=*(pic+4)+rh*256;for(y=0;y<height;y++)??for(x=0;x〈width*2;x=x+2) ?{ ??temp1=*(pic+8+y*width*2+x); ?temp2=*(pic+8+y*width*2+x+1);r=(temp2〉〉3); ?g=(temp2%8)*8+(temp1〉>5); b=temp1%32; ??temp3=r*2048+32*g+b;result1=(temp3>〉8); ?result2=temp3%256; ?lcd_put_pixel(640-width+x,240-height/2+y,result2); ? lcd_put_pixel(640—width+x+1,240—height/2+y,result1); ?}}//左右交換,顯示圖片voidprint_pic5(char*pic){intx,y;intwidth,height,rw,rh;rw=*(pic+3);rh=*(pic+5);width=*(pic+2)+rw*256;height=*(pic+4)+rh*256;for(y=0;y〈height;y++) ?for(x=0;x〈width*2;x=x+2)??{??lcd_put_pixel(640+width-x—2,240-height/2+y,*(pic+8+y*width*2+x));? lcd_put_pixel(640+width-x-1,240-height/2+y,*(pic+8+y*width*2+x+1));?}}//由上到下,左到右顯示圖片(長(zhǎng)寬各*2)voidprint_pic2(char*pic){inti,j,x,y;intwidth,height,rw,rh;rw=*(pic+3);rh=*(pic+5);width=*(pic+2)+rw*256;height=*(pic+4)+rh*256;for(j=0;j〈height*4;j=j+2) for(i=0;i〈width*4;i=i+4)? { ??y=j/2;? ?x=i/2;?? lcd_put_pixel(640-width*2+i,240—height+y,*(pic+8+y/2*width*2+x)); lcd_put_pixel(640-width*2+i+1,240-h(huán)eight+y,*(pic+8+y/2*width*2+x+1)); ?lcd_put_pixel(640—width*2+i+2,240—height+y,*(pic+8+y/2*width*2+x));? lcd_put_pixel(640-width*2+i+3,240-height+y,*(pic+8+y/2*width*2+x+1)); ?lcd_put_pixel(640—width*2+i,240—height+y+1,*(pic+8+y/2*width*2+x)); lcd_put_pixel(640-width*2+i+1,240—height+y+1,*(pic+8+y/2*width*2+x+1)); lcd_put_pixel(640—width*2+i+2,240-h(huán)eight+y+1,*(pic+8+y/2*width*2+x));??lcd_put_pixel(640—width*2+i+3,240—height+y+1,*(pic+8+y/2*width*2+x+1)); ?}}//顏色反轉(zhuǎn)voidprint_pic_exchange(char*pic){intx,y;intwidth,height,rw,rh;rw=*(pic+3);rh=*(pic+5);width=*(pic+2)+rw*256;height=*(pic+4)+rh*256;for(y=0;y<height;y++) for(x=0;x〈width*2;x++)? lcd_put_pixel(640—width+x,240—height/2+y,0xff—*(pic+8+y*2*width+x));}//石雕voidprint_pic_exchange2(char*pic){intx,y;intwidth,height,rw,rh;intr1,g1,b1,rr,gg,bb,temp1,temp2,result1,result2;intr2,g2,b2,temp5,temp6;longtemp4;rw=*(pic+3);rh=*(pic+5);width=*(pic+2)+rw*256;height=*(pic+4)+rh*256;for(y=0;y<height;y++)??for(x=0;x〈width*2;x=x+2) ?{ ? temp1=*(pic+8+y*width*2+x);?? temp2=*(pic+8+
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶(hù)所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶(hù)上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶(hù)上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶(hù)因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 小學(xué)數(shù)學(xué)二年級(jí)100以?xún)?nèi)連加連減口算題卡
- 2025年中考語(yǔ)文文言文總復(fù)習(xí)-學(xué)生版-專(zhuān)題02:文言文閱讀之虛詞意義和用法(練習(xí))
- 廣東省汕頭市2023-2024學(xué)年高三上學(xué)期普通高中畢業(yè)班期末調(diào)研測(cè)試英語(yǔ)試題
- 建筑設(shè)計(jì)銷(xiāo)售工作總結(jié)
- 家具店衛(wèi)生消毒標(biāo)準(zhǔn)
- 美容美發(fā)店前臺(tái)工作體會(huì)
- 《親子上網(wǎng)樂(lè)》課件
- 《尿路癥狀的鑒別》課件
- 體育行業(yè)賽事組織管理總結(jié)
- 醫(yī)療行業(yè)護(hù)理師培訓(xùn)總結(jié)
- 2023-2024學(xué)年河北省唐山市灤州市數(shù)學(xué)七年級(jí)第一學(xué)期期末教學(xué)質(zhì)量檢測(cè)模擬試題含解析
- 數(shù)字油畫(huà)課件
- 2023年小學(xué)五年級(jí)數(shù)學(xué)上學(xué)期期末水平測(cè)試試卷(天河區(qū))
- 中考數(shù)學(xué)計(jì)算題100道
- 高壓變頻器整流變壓器
- 集團(tuán)資產(chǎn)重組實(shí)施方案
- 《新唯識(shí)論》儒佛會(huì)通思想研究
- 《減法教育》讀書(shū)筆記思維導(dǎo)圖PPT模板下載
- 慢性阻塞性肺疾病全球倡議(GOLD)
- 工程項(xiàng)目管理(第五版)叢培經(jīng) 第七章
- GB/T 33195-2016道路交通事故車(chē)輛速度鑒定
評(píng)論
0/150
提交評(píng)論