freepeople性欧美熟妇, 色戒完整版无删减158分钟hd, 无码精品国产vα在线观看DVD, 丰满少妇伦精品无码专区在线观看,艾栗栗与纹身男宾馆3p50分钟,国产AV片在线观看,黑人与美女高潮,18岁女RAPPERDISSSUBS,国产手机在机看影片

正文內(nèi)容

嵌入式終端中mp3功能的研究與實(shí)現(xiàn)-資料下載頁(yè)

2025-05-13 01:17本頁(yè)面

【導(dǎo)讀】與此同時(shí),以手機(jī)、PDA為代表的嵌入式終端類(lèi)產(chǎn)品的普及率也越來(lái)越高,本文的。門(mén)的硬件解碼芯片的支持。本文主要研究在以Motorola公司的MC68VZ328為核心處理器的嵌入。實(shí)用范圍后,選擇了使用硬件解碼方式在目標(biāo)系統(tǒng)中實(shí)現(xiàn)MP3功能。塊采用MMC卡來(lái)存儲(chǔ)MP3文件,并通過(guò)USB和桌面PC機(jī)進(jìn)行文件的同步。串口來(lái)控制MP3模塊的運(yùn)行,并通過(guò)Xmodem協(xié)議實(shí)現(xiàn)兩部分間的文件傳輸。

  

【正文】 后的參數(shù)為子目錄名時(shí)則執(zhí)行如下語(yǔ)句來(lái)完成命令: File_goto_first()。 while(1) { 此資料來(lái)自 臺(tái)商訊息網(wǎng) , 大量管理資料下載 12 if(!strncmp(File_get_name(),p_dir,len)) break。 if(File_goto_next() == KO) { printf(Fold name not found.\n)。 break。 } if(fat_goto_subdir(0)==OK) cd_depth++。 即在當(dāng)前目錄中尋找命令參數(shù)中所包含的子目錄名,如存在該子目錄則調(diào)用 fat_goto_subdir()函數(shù)進(jìn)入下一級(jí)子目錄并使目錄深度加一,否則打印出錯(cuò)信息。 cat 命令。 cat 命令的作用是通過(guò)串口打印出文件的內(nèi)容,即按字節(jié)讀取文件的內(nèi)容并向串口輸出。 cat 帶有一命令參數(shù),即要顯示的文件名, cat 命令在執(zhí)行時(shí)首先根據(jù)文件名參數(shù)在當(dāng)前目錄中尋找該文件,如文件存在則執(zhí)行以下語(yǔ)句輸出文件內(nèi)容,否則顯示出錯(cuò)信息。 fat_fopen(READ)。 while(!fat_feof()) { putchar(fat_fgetc())。 } fat_fclose()。 二、 MP3 播放命令類(lèi): MP3 播放類(lèi)命令用來(lái)控制 MP3 的播放、停止、音量、音色等。 ATMEL 提供的 demo代碼中使用鍵盤(pán)來(lái)控制 MP3 的播放,其用兩個(gè)變量 gl_key_press 和 gl_key 來(lái)表示按鍵的狀態(tài),如有鍵按下則 gl_key_press 的值為 TRUE, gl_key 的值表示所按下的鍵。為了和 demo代碼的風(fēng)格保持一致,在 MP3 模塊的代碼實(shí)現(xiàn)中沿襲了此鍵值表示法,但因 MP3 模塊中沒(méi)有使用按鍵,所以不能從按鍵得到鍵值,而采用從串口發(fā)送命令再由驅(qū)動(dòng)程序完成命令到鍵值的轉(zhuǎn)換,從而實(shí)現(xiàn)對(duì) MP3 的控制。 MP3 播放控制命令及功能如表 所示: 表 命令 鍵值 說(shuō) 明 play KEY_PLAY MP3 播放,當(dāng)再次發(fā)送此命令時(shí) MP3 播放暫停。 stop KEY_STOP MP3 播放停止。 next KEY_NEXT 播放下一首 MP3。 prev KEY_PREV 播放前一首 MP3。 up KEY_UP 音量提升或音調(diào)提升 down KEY_DEWN 音量降低或音調(diào)降低 volume KEY_VOL 選擇當(dāng)前控制參數(shù)為音量 bass KEY_BASS 選擇當(dāng)前控制參數(shù)為低音音調(diào) medium KEY_MED 選擇當(dāng)前控制參數(shù)為中音音調(diào) 此資料來(lái)自 臺(tái)商訊息網(wǎng) , 大量管理資料下載 13 treble KEY_TREBL 選擇當(dāng)前控制參數(shù)為高音音調(diào) AT89C51SND1 的 MP3 解碼器提供對(duì)音調(diào)控制的支持,其把音調(diào)分為三個(gè)區(qū)域:低音、中音和高音,可以分別控制這三個(gè)音域的放大倍數(shù), 另外還提供對(duì)音量的控制。在代碼的實(shí)現(xiàn)中使用 volume、 bass、 medium 和 treble 命令來(lái)選擇當(dāng)前的控制屬性,如通過(guò)串口發(fā)送 meduim命令后當(dāng)前控制屬性即為中音,此時(shí)發(fā)送 up 命令則對(duì)中音的放大倍數(shù)提高一個(gè)單位。 驅(qū)動(dòng)程序接收到 MP3 播放控制命令后把其轉(zhuǎn)換為對(duì)應(yīng)的鍵值賦給全局變量 gl_key,并把 gl_key_press變量設(shè)置為‘ TRUE’通知 MP3的 song_task()任務(wù)有新的鍵按下,由 song_task()任務(wù)根據(jù) gl_key 變量的值進(jìn)行相應(yīng)的處理。 三、文件傳輸命令 文件傳輸命令包括 xrecv 和 xsend,其主要作用是使用 Xmodem 協(xié)議在 MP3 模塊和嵌入式終端之間進(jìn)行文件的傳輸。當(dāng) MP3 模塊接收到 xrecv 命令時(shí)調(diào)用 xmodemReceive()函數(shù)接收文件至 MMC 卡上的 FAT 文件系統(tǒng)中,當(dāng)接收到的命令為 xsend 時(shí)調(diào)用 xmodemTransmit()函數(shù)把 FAT 文件系統(tǒng)內(nèi)的指定文件通過(guò)串口發(fā)送出去。 Xmodem 傳輸協(xié)議的實(shí)現(xiàn) Xmodem 協(xié)議出現(xiàn)于上世紀(jì) 70 年代,是一種廣泛使用的數(shù)據(jù)傳輸協(xié)議。 Xmodem 協(xié)議的基本數(shù)據(jù)傳輸單位為信息包,接收方每接收 到一信息包都要檢查其正確性,如信息包錯(cuò)誤則要求發(fā)送方重發(fā)該信息包, 因此 XMODEM 是一種發(fā)送等待協(xié)議 , 具有流量控制功能 ,其優(yōu)點(diǎn)是簡(jiǎn)單,容易實(shí)現(xiàn),缺點(diǎn)是傳輸速度比較慢。 Xmodem 協(xié)議 Xmodem 傳輸協(xié)議使用 5 個(gè)基本的控制字符來(lái)作為握手信號(hào): SOH( 0x01),傳輸開(kāi)始;EOT( 0x04),傳輸結(jié)束; ACK( 0x05),肯定應(yīng)答; NAK( 0x15),否定應(yīng)答; CAN( 0x18)傳輸取消。其信息包的長(zhǎng)度為 132 或 133 字節(jié),其結(jié)構(gòu)如圖 所示,信息包的開(kāi)始字節(jié) 圖 Xmodem 協(xié)議信息包結(jié) 構(gòu) 必須為 SOH,當(dāng)接收方收到 SOH 時(shí)開(kāi)始對(duì)包的接收,緊接 SOH 后的一字節(jié)為包序號(hào) (blk),序號(hào)從 0 開(kāi)始,最大至 255,發(fā)送方每發(fā)送一信息包必須把包序號(hào)加一,當(dāng)序號(hào)超過(guò) 255 時(shí)溢出,繼續(xù)從 0 開(kāi)始計(jì)數(shù),其后一字節(jié)的值為 (255blk),用來(lái)對(duì)序號(hào)的校驗(yàn),即序號(hào)的校驗(yàn)碼,在序號(hào)的校驗(yàn)碼后為 128 字節(jié)的數(shù)據(jù)塊,包的最后為 128 字節(jié)的數(shù)據(jù)塊的校驗(yàn)碼,校驗(yàn)碼有兩種產(chǎn)生方式: 檢查和,及把 128 字節(jié)數(shù)據(jù)塊的數(shù)據(jù)進(jìn)行簡(jiǎn)單的累加,并把累加和的最低位一字節(jié)的值作為信息包中的 chksum 值,采用檢查和的方式對(duì)包中數(shù)據(jù) 錯(cuò)誤的檢出率較低,現(xiàn)已很少采用,但為了保持和以前的 Xmodem 協(xié)議兼容,系統(tǒng)在實(shí)現(xiàn)時(shí)保留了此種校驗(yàn)方式,因檢查和只占用一字節(jié),此時(shí)信息包的總長(zhǎng)度為 132 字節(jié); CRC16,對(duì)128 字節(jié)數(shù)據(jù)按 CCITT 標(biāo)準(zhǔn)進(jìn)行 CRC16 校驗(yàn),因 CRC16 的校驗(yàn)碼為兩字節(jié),所以此時(shí)的信息包長(zhǎng)度為 133 字節(jié) [13]。 信息包中的 128 字節(jié)數(shù)據(jù)區(qū)不包含任何控制字節(jié),所以 Xmoddem 協(xié)議可以傳輸任何格式的數(shù)據(jù),包括 ASC 碼、二進(jìn)制代碼等,因其傳輸時(shí)必須以 128 字節(jié)為一傳輸單位,當(dāng)要傳輸?shù)奈募L(zhǎng)度不為 128 字節(jié)的整倍數(shù)時(shí),在最后一 數(shù)據(jù)包中必須用 0x1A( ^Z)字符來(lái)填充。假如要被傳輸?shù)奈募挥幸蛔止?jié),經(jīng) Xmodem 協(xié)議傳輸?shù)浇邮辗胶笪募L(zhǎng)度變?yōu)?128字節(jié),除第一字節(jié)為有用字節(jié)外,其余的 127 字節(jié)都為字符‘ ^Z’,這是 Xmodem 協(xié)議的最大缺陷。 Xmodem 協(xié)議包括接收和發(fā)送兩部分,系統(tǒng)在實(shí)現(xiàn)時(shí)對(duì)所有的錯(cuò)誤都重復(fù) 16 次,不論S O H b l k 2 5 5 b l k 1 2 8 d a t a b y t e s C k s u m o r C R C 1 6此資料來(lái)自 臺(tái)商訊息網(wǎng) , 大量管理資料下載 14 接收方還是發(fā)送方,當(dāng)檢測(cè)到錯(cuò)誤次數(shù)超過(guò)設(shè)定值時(shí)都應(yīng)向?qū)Ψ桨l(fā)送 CAN 字符以取消傳輸操作。 當(dāng)接收方需要接收數(shù)據(jù)時(shí),首先向發(fā)送方發(fā)送字符‘ C’,以通知對(duì)方發(fā)送數(shù)據(jù)且數(shù)據(jù)校驗(yàn)碼的格式為 CRC16,如發(fā)送方接收到字符‘ C’且支持 CRC16 校驗(yàn)碼,則開(kāi)始發(fā)送數(shù)據(jù)包。如發(fā)送方不支持 CRC16 校驗(yàn),接收方收不到任何回應(yīng),接收方在重復(fù) 16 次(每次間隔為 1 秒)發(fā)送字符‘ C’后改發(fā)字符 NAK,通知對(duì)方發(fā)送數(shù)據(jù)其校驗(yàn)碼的格式為檢查和。如經(jīng)過(guò)連續(xù) 16 次(每次間隔也為 1 秒)發(fā)送 NAK 時(shí)都收不到回應(yīng),則發(fā)送 CAN 以停止數(shù)據(jù)接收,并返回出錯(cuò)信息。 發(fā)送方要發(fā)送數(shù)據(jù)時(shí),必須等待接收方發(fā)送的‘ C’或 NAK 字符,如接收到的字符為‘ C’,則發(fā)送數(shù)據(jù)時(shí)采用 CRC16 格式的校驗(yàn)碼,如接收的字符為 NAK,則采用檢查和作為校驗(yàn)碼。如在設(shè)定的時(shí)間沒(méi)有接收到任何字 符,則發(fā)送 CAN 字符,同時(shí)返回錯(cuò)誤信息。 字符的接收和發(fā)送: AT89C51SND1 中 Xmodem 協(xié)議的實(shí)現(xiàn)基于芯片內(nèi)建的 UART 串口,字符的發(fā)送由函數(shù) _outbyte()完成,待發(fā)送的字符作為參數(shù)傳遞給該函數(shù),當(dāng)字符發(fā)送完畢時(shí)返回值為已發(fā)送的字符。由 _inbyte()函數(shù)來(lái)接收串口的輸入字符,其函數(shù)參數(shù)為等待時(shí)間,以毫秒為單位,如在指定的時(shí)間內(nèi)沒(méi)有接收到字符則返回‘ 2’,表示超時(shí),如接收到字符則立刻返回所接收到的字符, _inbyte()內(nèi)部使用 mdelay()函數(shù)計(jì)算時(shí)間延遲, mdelay()使用忙等待的方式來(lái)實(shí)現(xiàn)延時(shí),其函數(shù)體如下所示: void mdelay(Uint16 delay) //time delay n*ms { Uint16 xdata i,j。 for(j=0。jdelay。j++) for(i=0。i121。i++)。 } mdelay()內(nèi)的 for 循環(huán)次數(shù)是 在系統(tǒng)頻率為 16MHz 的條件下實(shí)測(cè)而得。 數(shù)據(jù)的校驗(yàn): 數(shù)據(jù)的校驗(yàn)由函數(shù) check()完成,包含 CRC16 和檢查和校驗(yàn),函數(shù)有三個(gè)參數(shù): crc、 buf和 sz。 crc 為 Uint16 類(lèi)型,如數(shù)據(jù)包采用 CRC16 校驗(yàn)方式,則 crc 應(yīng)為數(shù)據(jù)包內(nèi)的 CRC 校驗(yàn)碼,否則 crc 必須為‘ 0’,因 check()函數(shù)內(nèi)根據(jù) crc 的值來(lái)決定進(jìn)行何種類(lèi)型的校驗(yàn),當(dāng)crc 不為‘ 0’時(shí)進(jìn)行 CRC16 校驗(yàn),否則進(jìn)行檢查和校驗(yàn)。 buf 為數(shù)據(jù)緩沖區(qū)的地址指針,被接收到的信息包存放在此緩沖區(qū)內(nèi),其類(lèi)型為 const Byte xdata*。 sz 為信息包的長(zhǎng)度,為Byte 類(lèi)型。 CRC16 校驗(yàn)碼的生成由函數(shù) crc16_ccit()完成,其有兩個(gè)參數(shù):地址指針 ptr 和用來(lái)表示數(shù)據(jù)長(zhǎng)度的變量 count,其返回值 crc16 即為所需校驗(yàn)碼,函數(shù)如下所示: Uint16 crc16_ccitt(ptr, count) Byte xdata *ptr。 int count。 { Uint16 crc, i。 crc = 0。 while(count = 0) { crc = crc ^ (int)*ptr++ 8。 for(i = 0。 i 8。 ++i) if(crc amp。 0x8000) crc = crc 1 ^ 0x1021。 else 此資料來(lái)自 臺(tái)商訊息網(wǎng) , 大量管理資料下載 15 crc = crc 1。 } return (crc amp。 0xFFFF)。 } 文件的接收和發(fā)送 函數(shù): 數(shù)據(jù)的接收和發(fā)送分別使用函數(shù) xmodemReceive()和 xmodemTransmit(),其返回類(lèi)型都為 signed long,當(dāng)返回值為正值時(shí)表示實(shí)際接收或發(fā)送的數(shù)據(jù)長(zhǎng)度,為負(fù)值時(shí)表示錯(cuò)誤類(lèi)型,錯(cuò)誤類(lèi)型和返回值之間的關(guān)系如表 所示 [13]: 表 返回值 錯(cuò) 誤 類(lèi) 型 說(shuō) 明 1 接收到對(duì)方發(fā)出的 CAN 信號(hào),取消傳輸操作。 2 傳輸開(kāi)始時(shí)無(wú)‘ C’或 NAK 字符,同步錯(cuò)誤。 3 重試次數(shù)太多 4 發(fā)送數(shù)據(jù)時(shí)錯(cuò)誤 5 沒(méi)有找到要發(fā)送的文件 接收 和發(fā)送函數(shù)的參數(shù)都為文件名,接收函數(shù)根據(jù)指定的文件名在 FAT 文件系統(tǒng)中創(chuàng)建文件用來(lái)接收數(shù)據(jù),發(fā)送函數(shù)在當(dāng)前目錄中找到所需文件,并把文件內(nèi)容發(fā)送出去。
點(diǎn)擊復(fù)制文檔內(nèi)容
公司管理相關(guān)推薦
文庫(kù)吧 www.dybbs8.com
備案圖鄂ICP備17016276號(hào)-1