課程設(shè)計(jì)(論文)基于FPGA的音樂播放器設(shè)計(jì)_第1頁
課程設(shè)計(jì)(論文)基于FPGA的音樂播放器設(shè)計(jì)_第2頁
課程設(shè)計(jì)(論文)基于FPGA的音樂播放器設(shè)計(jì)_第3頁
課程設(shè)計(jì)(論文)基于FPGA的音樂播放器設(shè)計(jì)_第4頁
課程設(shè)計(jì)(論文)基于FPGA的音樂播放器設(shè)計(jì)_第5頁
已閱讀5頁,還剩17頁未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡介

1、中國地質(zhì)大學(xué)(武漢) 基于fpga的音樂播放器設(shè)計(jì) 專 業(yè) 班 級(jí) 小組成員 指導(dǎo)老師 2015.06目錄一、 實(shí)現(xiàn)功能2二、 成員及任務(wù)分工2三、詳細(xì)設(shè)計(jì)及原理31.系統(tǒng)硬件結(jié)構(gòu)設(shè)計(jì)32.程序流程4四、 具體實(shí)現(xiàn)51.sd卡文件系統(tǒng)的初始化52.按鍵選歌模式63.自動(dòng)播放模式74.快進(jìn)、快退、播放/暫停功能75.lcd顯示歌曲名及歌詞模塊86.led顯示功能107.數(shù)碼管顯示當(dāng)前曲目、總歌曲數(shù)和時(shí)間功能11五、碰到的問題及解決過程121.問題一122.問題二123. 問題三134. 問題四13六、運(yùn)行效果13七、設(shè)計(jì)小結(jié)22一、 實(shí)現(xiàn)功能 1. 支持sd卡文件讀取功能;2. 支持wav格式音

2、頻功能;3. 支持歌詞同步顯示功能;3. 支持歌曲名稱顯示功能;4. 支持“播放/暫?!笨刂乒δ?;5. 支持歌曲選擇功能;6. 支持led燈顯示音量功能;7. 支持返回功能;8. 支持硬啟動(dòng)從rom啟動(dòng);9.支持?jǐn)?shù)碼管顯示總歌曲數(shù)和第幾首歌曲功能;10.支持?jǐn)?shù)碼管顯示歌曲的播放進(jìn)度功能;11. 支持led燈指示撥碼開關(guān)07狀態(tài)功能;12. 支持前6首歌曲直接選擇功能。 2、 成員及任務(wù)分工 姓名所做任務(wù)熟悉nios ii 系統(tǒng)開發(fā)流程,看懂原工程文件。了解sd卡fat文件系統(tǒng)大致的讀寫流程;格式化sd卡為fat16格式并將.wav和.lrc文件復(fù)制到sd卡根目錄下。到實(shí)驗(yàn)室去測試原工程文件的硬

3、件設(shè)置和軟件功能。測試軟件功能,明確各個(gè)按鍵對應(yīng)的功能。一起討論如何更改原來的功能,并添加新功能。完成實(shí)驗(yàn)任務(wù),分工書寫課程設(shè)計(jì)報(bào)告。 三、詳細(xì)設(shè)計(jì)及原理1.系統(tǒng)硬件結(jié)構(gòu)設(shè)計(jì)本設(shè)計(jì)采用de2 開發(fā)板,充分利用niosii 軟核的特性,結(jié)合自定義用戶組件、自定義用戶外設(shè)。在fpga 中使用軟核處理器的優(yōu)勢在于靈活高效,硬核實(shí)現(xiàn)沒有靈活性,通常無法使用最新的技術(shù)。而應(yīng)用nios ii 軟核處理器,開發(fā)者能夠完全定制cpu 和外設(shè),獲得恰好滿足需求的處理器,充分利用了nios ii 處理器靈活和高效的特性。通過de2 開發(fā)板上的sd 卡插槽,讀取sd 卡上的音頻數(shù)據(jù)后,送到音頻編/解碼器,對音質(zhì)進(jìn)行

4、相關(guān)處理后輸出,進(jìn)行音樂的播放 sd 卡音樂播放是由niosii 處理器通過軟件完成的。該音樂播放器主要分兩種播放模式: 按鍵選歌模式和自動(dòng)播放模式。根據(jù)系統(tǒng)所劃分的功能,處理器、音頻設(shè)備、存儲(chǔ)器、輸入、輸出和交互接口都必須選用硬件設(shè)備實(shí)現(xiàn)。其中硬件部分如處理器用altera公司的nios ii軟核來實(shí)現(xiàn),mp3音樂文件存儲(chǔ)于外部的sd卡中,de2開發(fā)板上有4個(gè)為用戶預(yù)留的按鈕可以用來輸入,作為mp3播放器的功能鍵,輸出可以使用開發(fā)板上的輸出口來接音頻設(shè)備,用戶與開發(fā)板的交互可以使用開發(fā)板上rs-232串行口和jtag口。整個(gè)系統(tǒng)分為四個(gè)部分:cpu模塊(包括外圍配置芯片、擴(kuò)展芯片等)、存儲(chǔ)器

5、(sd卡)模塊、lcd顯示模塊、gpio接口模塊。 圖1 mp3播放器硬件整體框圖2.程序流程 圖2 程序流程圖 對于mp3播放器來說,它應(yīng)該在板子加電時(shí)自動(dòng)加載到sram,然后到一個(gè)約定的地方讀取音樂數(shù)據(jù)就可以了。 本系統(tǒng)會(huì)播放幾個(gè)音樂文件,所以mp3播放器就需要通過一個(gè)機(jī)制來管理或定位這些音樂文件,也就是通過一個(gè)文件系統(tǒng)管理功能的程序,讓這個(gè)文件系統(tǒng)軟件和mp3播放器配合使用。 音樂文件的存放應(yīng)該配合mp3音樂的播放,音樂文件的播放和顯示通過文件系統(tǒng)獲得相應(yīng)的播放音樂文件的地址和相關(guān)信息,存儲(chǔ)也應(yīng)該符合系統(tǒng)文件的定義來存放。也就是說文件系統(tǒng)是存放音樂和播放音樂的一個(gè)中間層,是音樂文件播放和

6、音樂文件存放的一個(gè)默認(rèn)標(biāo)準(zhǔn),所以文件系統(tǒng)的結(jié)構(gòu)定義是文件讀取和存儲(chǔ)的關(guān)鍵。4、 具體實(shí)現(xiàn)1.sd卡文件系統(tǒng)的初始化 調(diào)用函數(shù)sd_card_init();(1)sd卡簡介及fat16文件系統(tǒng)構(gòu)成介紹:sd卡(secure digital memory card)是一種基于半導(dǎo)體快閃記憶器的新一代記憶設(shè)備,不需要額外的電源來保持其上記憶的信息。而且它是一體化固體介質(zhì),沒有任何移動(dòng)部分,所以不用擔(dān)心機(jī)械運(yùn)動(dòng)的損壞。sd卡的結(jié)構(gòu)能保證數(shù)字文件傳送的安全性,也很容易重新格式化,所以有著廣泛的應(yīng)用領(lǐng)域,它被廣泛地于便攜式裝置上使用,例如數(shù)碼相機(jī)、個(gè)人數(shù)碼助理(pda)和多媒體播放器等。(2)fat16文

7、件系統(tǒng)構(gòu)成 mbr區(qū)裝有用于啟動(dòng)系統(tǒng)的代碼和有關(guān)文件系統(tǒng)的重要信息; 在主引導(dǎo)扇區(qū)的末尾處含有分區(qū)表,分區(qū)表用于標(biāo)識(shí)每個(gè)分區(qū)開始和結(jié)束的表項(xiàng),最多可以有4個(gè)分區(qū), 每個(gè)分區(qū)可以包含不同的文件系統(tǒng)。分區(qū)引導(dǎo)扇區(qū)記錄各個(gè)分區(qū)啟動(dòng)的引導(dǎo)程序。fat表記錄sd存儲(chǔ)卡以簇為單位進(jìn)行記錄的存儲(chǔ)空間的信息,簇的大小根據(jù)實(shí)際系統(tǒng)的電子盤特性設(shè)定。根目錄區(qū)記錄文件名和目錄名。 用戶數(shù)據(jù)區(qū)用于存放用戶數(shù)據(jù)及子目錄。 sd卡格式化時(shí),系統(tǒng)采用了fat16文件格式。主引導(dǎo)區(qū)位于整個(gè)sd卡的0柱面0磁頭,1扇區(qū)存放引導(dǎo)程序用于啟動(dòng)和引導(dǎo)操作系統(tǒng),同時(shí)存放sd卡的主分區(qū)表,記錄卡的分區(qū)信息。在總共512字節(jié)的主引導(dǎo)記錄中

8、,mbr 的引導(dǎo)程序占了其中的446個(gè)字節(jié)(相對于扇區(qū)首地址的偏移量0h1bdh),隨后的64字節(jié)(偏移量1beh1fdh)為dpt(disk partition table,硬盤分區(qū)表),最后的兩個(gè)字節(jié)“55 aa”(偏移量1feh1ffh)是分區(qū)有效的結(jié)束標(biāo)志。fat16文件系統(tǒng)最多支持4個(gè)分區(qū)項(xiàng),對應(yīng)于4個(gè)分區(qū)表。在dpt部分共64字節(jié)中,以16字節(jié)為分區(qū)表項(xiàng)單位描述一個(gè)分區(qū)的屬性。在本系統(tǒng)能夠sd卡只作為一種存儲(chǔ)介質(zhì)使用,且整個(gè)系統(tǒng)作為一個(gè)分區(qū)處理。2.按鍵選歌模式(1) 進(jìn)入按鍵選歌 當(dāng)swit0為0,即無撥碼開關(guān)置為1時(shí),lcd提示“press key3 to choose a s

9、ong”,按下key3 后,lcd先顯示歌曲總數(shù)和歌詞總數(shù),繼而顯示當(dāng)前所選歌名。 lcd_init(); lcd_show_text(title0); lcd_write_cmd(lcd_16207_0_base,0xc0); lcd_show_text(title1); while(1)/檢測進(jìn)入選歌界面 key=iord(button_pio_base,0); key3=key&0x08; if(key3) break; (2)歌曲選擇功能上一首 / 下一首功能分別由按鍵key2和按鍵key1實(shí)現(xiàn),播放至最后一首歌時(shí)按key1按鍵則將播放第一首歌曲;直接選歌功能由撥碼開關(guān)sw1015實(shí)現(xiàn)

10、,可選擇第16首歌曲。a代表當(dāng)前為第幾首歌,num_music為歌曲總數(shù)。 key=iord(button_pio_base,0); key=key&0x0e; key3=key&0x08; key2=key&0x04; key1=key&0x02; swit2=iord(switch_pio_base,0); swit2=swit2&0xfc00; switch(swit2) case 0x0400: a=0; break; case 0x0800: a=1; break; case 0x1000: a=2; break; case 0x2000: a=3; break; case 0x40

11、00: a=4; break; case 0x8000: a=5; break; default: if(key1)a=(a+1)%num_music; else if(key2)a=(a+num_music-1)%num_music; break; 后一首 a=(a+1)%num_music; 前一首 a=(a+num_music-1)%num_music;(3) 確認(rèn)選歌按下key3按鍵,確認(rèn)當(dāng)前所選歌曲,開始播放音樂。 if(key3) break;3.自動(dòng)播放模式(1) 循環(huán)播放模式 else if(swi0)/連續(xù)播放 a=(a+1)%num_music; time(0,a+1,nu

12、m_music);當(dāng)開關(guān)swi0撥動(dòng)到1位置時(shí),為循環(huán)播放模式,播放下一首歌曲。(2) 單曲循環(huán)模式 else if(swi1)/循環(huán)播放 a+=0; time(0,a+1,num_music); /顯示時(shí)間 當(dāng)開關(guān)swi1撥動(dòng)到1位置時(shí),為單曲循環(huán)模式,循環(huán)播放當(dāng)前歌曲。(3) 隨機(jī)播放模式 else if(swi2)/隨機(jī)播放 a=(num_lyrics+tmp1+tmp2+musica.m_name0)%num_music; time(0,a+1,num_music); /顯示時(shí)間 當(dāng)開關(guān)swi2撥動(dòng)到1位置時(shí),為隨機(jī)播放模式,隨機(jī)播放歌曲。4.快進(jìn)、快退、播放/暫停功能(1) 快進(jìn) i

13、f(swi4)/快進(jìn) b=(b+4)%cluster_num; time(b*clupsec_num,a+1,num_music); /顯示時(shí)間 usleep(20000); continue; 當(dāng)開關(guān)swi4撥動(dòng)到1位置時(shí),b是第幾個(gè)簇,執(zhí)行b=(b+4)%cluster_num實(shí)現(xiàn)快進(jìn)。(2) 快退 else if(swi5)/快退 b=(b+cluster_num-4)%cluster_num; time(b*clupsec_num,a+1,num_music); /顯示時(shí)間 usleep(20000); continue; 當(dāng)開關(guān)swi5撥動(dòng)到1位置時(shí),執(zhí)行b=(b+cluster_n

14、um-4)%cluster_num實(shí)現(xiàn)快退。(3)播放/暫停功能由開關(guān)swi6實(shí)現(xiàn),實(shí)現(xiàn)代碼: else if(swi6)/暫停 b=(b+cluster_num-1)%cluster_num; usleep(20000); continue; 當(dāng)開關(guān)swi6撥動(dòng)到1位置時(shí),執(zhí)行b=(b+cluster_num-1)%cluster_num,實(shí)現(xiàn)暫停。5.lcd顯示歌曲名及歌詞模塊(1)顯示歌名選歌定播放歌曲后,歌曲名會(huì)顯示在lcd上,調(diào)用函數(shù): void show_name(char *name) uint16 i,j,length_temp,length_n;/歌名顯示的頁面數(shù) lcd_i

15、nit(); length_temp=strlen(name); if(length_temp=32) length_n=1; else length_n=(length_temp-32)/16+1; for(i=0;ilength_n;i+)/歌名顯示的頁面數(shù),歌名滾動(dòng)顯示 lcd_write_cmd(lcd_16207_0_base,0x80);/寫第一行 usleep(100); for(j=0;j16;j+) lcd_write_data(lcd_16207_0_base,namej+i*16); usleep(100); lcd_write_cmd(lcd_16207_0_base,

16、0xc0);/寫第二行 usleep(100); for(j=0;j1) usleep(1000000); else usleep(300000); (2)顯示歌詞歌曲播放時(shí)lcd則會(huì)顯示歌曲的歌詞,先讀取歌詞后顯示歌詞,調(diào)用函數(shù):num_lyrics=read_lyrics(musica.m_name,lyric,&lyrics,num_lyric,&clupsec_num, &data_sect);/讀歌詞 for(k=0;k=lyrics.timek+2) &(j+j_base=lyrics.timek+38) &(j+j_baselyrics.timek+70) lcd_write_d

17、ata(lcd_16207_0_base, lyrics.textk(j+time_base)/2-2); break; 該函數(shù)中首先匹配歌曲名字和歌詞名字,找到匹配歌詞后,讀扇區(qū),讀入一個(gè)簇的歌詞。如果歌詞時(shí)間沒有重復(fù),即一句歌詞對應(yīng)一個(gè)時(shí)間標(biāo)志的情況,從歌詞開始標(biāo)志開始讀,一個(gè)扇區(qū)的數(shù)據(jù)讀完,讀取下一個(gè)扇區(qū),讀時(shí)間,計(jì)算歌詞的長度是32的多少倍,將歌詞補(bǔ)滿32的整數(shù)倍個(gè);如果歌詞時(shí)間有重復(fù),即一句歌詞對應(yīng)多個(gè)時(shí)間標(biāo)志的情況,有幾個(gè)時(shí)間信息,取出這句歌詞對應(yīng)的所有時(shí)間信息,如果一個(gè)扇區(qū)的數(shù)據(jù)讀完,讀取下一個(gè)扇區(qū),進(jìn)行時(shí)間轉(zhuǎn)換,轉(zhuǎn)換成這句歌詞時(shí)間對應(yīng)的扇區(qū)數(shù),計(jì)算歌詞的長度是32的多少倍,將歌

18、詞補(bǔ)滿32的整數(shù)倍個(gè);重復(fù)歌詞讀取。將讀出來的歌詞及其時(shí)間按時(shí)間順序排序,將讀出來的長歌詞轉(zhuǎn)換為短歌詞,函數(shù)返回?cái)?shù)值numb1。6.led顯示功能(1)紅燈顯示音量將送入播放器的電平buffer的值取出后按比例縮小,使其最大值為16,然后將縮小后的值通過處理后由led燈顯示。buffer的值越大,表示當(dāng)前電平值越大,則led燈點(diǎn)亮的個(gè)數(shù)越多。 sd_read_lba(buffer,j,1); i=0; while(i512) if(!iord(audio_0_base,0) tmp1=(bufferi+1(16-tmp2); tmp2=tmp2&0xffff; iowr(led_red_bas

19、e,0,tmp2);(2)綠燈指示撥碼開關(guān)狀態(tài)de2平臺(tái)上只有9個(gè)綠色的led燈,所以只能夠指示撥碼開關(guān)swi08的狀態(tài),開關(guān)狀態(tài)為“0”,則對應(yīng)的燈滅;開關(guān)狀態(tài)為“1”,則對應(yīng)的燈亮。swit1=iord(switch_pio_base,0);iowr(led_green_base,0,swit1);7.數(shù)碼管顯示當(dāng)前曲目、總歌曲數(shù)和時(shí)間功能de2開發(fā)平臺(tái)上共8個(gè)數(shù)碼管,1、2兩個(gè)數(shù)碼管顯示當(dāng)前曲目,3、4數(shù)碼管顯示歌曲總數(shù),5、6、7、8四個(gè)數(shù)碼管顯示當(dāng)前歌曲的播放時(shí)間。數(shù)碼管顯示時(shí)調(diào)用函數(shù): void time(int j,int n,int num) int tim2,h2,m2,s2

20、,b2; unsigned int display; j=j/375; tim0=j/60; /min tim1=j%60; /s m1=tim0%10; m0=tim0/10; s1=tim1%10; s0=tim1/10; b1=n%10; b0=n/10; h1=num%10; h0=num/10; display = b0*16*16*16*16*16*16*16+b1*16*16*16*16*16*16+h0*16*16*16*16*16+h1*16*16*16*16+m0*16*16*16+m1*16*16+s0*16+s1; iowr(seg7_display_base,0,di

21、splay);該函數(shù)的傳入?yún)?shù)j是簇中第幾個(gè)扇區(qū),n為當(dāng)前播放的歌曲序號(hào),num為歌曲總數(shù)。函數(shù)中完成根據(jù)j計(jì)算當(dāng)前時(shí)間,并將歌曲序號(hào)、歌曲總數(shù)和時(shí)間顯示到對應(yīng)數(shù)碼管上。五、碰到的問題及解決過程1.問題一在原始軟件工程上直接編譯,出現(xiàn)system_0.ptf的存儲(chǔ)路徑與nios ii工程不相符,導(dǎo)致運(yùn)行時(shí)找不到.ptf文件,錯(cuò)誤如下所示。 解決方法:熟悉軟件開發(fā)流程,在軟件工程編譯時(shí)需要用到相對應(yīng)的硬件平臺(tái)的配置信息。新建一個(gè)nios ii工程,在添加 sopc builder system ptf file 時(shí),添加正確的ptf文件,添加所需的.c和.h文件,再次編譯。2.問題二編譯工程時(shí),

22、出現(xiàn)gnu_rules.mk和gtf_rules.mk文件不存在的問題,錯(cuò)誤如下圖所示。解決方法:在網(wǎng)上搜索了一下所遇到的問題,網(wǎng)友給出的回答是軟件與電腦操作系統(tǒng)不兼容,于是將軟件的兼容模式設(shè)置為 windows 7,再次編譯工程,錯(cuò)誤消失,編譯成功。3. 問題三在修改nios ii工程時(shí),不了解sd卡的扇區(qū)、簇等概念。解決方法:在網(wǎng)上搜索了關(guān)于“sd卡中fat16文件分析”的文章,了解sd卡的fat16文件系統(tǒng)。每個(gè)扇區(qū)通常有512個(gè)字節(jié),每個(gè)簇可以包括2、4、8、16、32或64個(gè)扇區(qū),一個(gè)簇中只能放置一個(gè)文件的內(nèi)容,因此文件所占用的空間,只能是簇的整數(shù)倍,如果文件實(shí)際大小小于一簇,它也要

23、占一簇的空間;如果文件實(shí)際大小大于一簇,根據(jù)邏輯推算,那么該文件就要占兩個(gè)簇的空間。一個(gè)簇只能容納一個(gè)文件占用,即使這個(gè)文件只有0字節(jié),也決不允許兩個(gè)文件或兩個(gè)以上的文件共用一個(gè)簇,不然會(huì)造成數(shù)據(jù)混亂。因此,單片機(jī)讀sd卡上的文件時(shí)是以簇為單位的。4. 問題四sd卡沒有格式化為fat格式,2g的sd顯示為3.18g,導(dǎo)致de2開發(fā)平臺(tái)無法識(shí)別sd卡,程序停在sd卡初始化位置。解決方法:將sd卡在電腦上格式為fat格式,內(nèi)存大小恢復(fù)到2g一下,再插入到de2開發(fā)平臺(tái)上,sd卡被成功識(shí)別,程序運(yùn)行正確。六、運(yùn)行效果1、開機(jī)界面 2、歌曲選擇模式 3、前一首/后一首功能;按key2鍵選擇前一首歌,如

24、果當(dāng)前為第一首,則前一首為最后一首歌。按key1鍵選擇下一首歌,如果當(dāng)前為最后一首,則下一首為第一首歌。按確認(rèn)鍵key3選擇當(dāng)前歌曲,繼而播放當(dāng)前歌曲。數(shù)碼管顯示當(dāng)前歌曲為第幾首歌、總歌曲數(shù)、當(dāng)前歌曲播放時(shí)長;lcd屏顯示播放時(shí)長及歌詞。4、返回功能撥碼開關(guān)sw17的狀態(tài)改變后,直接跳到選歌界面。sw1狀態(tài)為“1”時(shí),撥碼開關(guān)sw17的狀態(tài)改變后,直接跳到循環(huán)播放模式。sw2狀態(tài)為“1”時(shí),撥碼開關(guān)sw17的狀態(tài)改變后,直接跳到單曲循環(huán)模式。sw3狀態(tài)為“1”時(shí),撥碼開關(guān)sw17的狀態(tài)改變后,直接跳到隨機(jī)播放模式。5直接選歌功能撥動(dòng)撥碼開關(guān)sw1015,直接選擇歌曲16。七、設(shè)計(jì)小結(jié) 本次課程設(shè)計(jì)完成了以下工作:1. 研究了軟硬件協(xié)同技術(shù),具體研究了軟硬件的系統(tǒng)描述、軟硬件劃分等方面的技術(shù)。了解nios ii處理器的結(jié)構(gòu)特性,掌握基于nios ii的嵌入式sopc系統(tǒng)軟硬件設(shè)計(jì)方法。2. 實(shí)現(xiàn)sd卡讀寫歌詞和歌曲的驅(qū)動(dòng)程序

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲(chǔ)空間,僅對用戶上傳內(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

提交評論