- 1、本文档共19页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
(原创) 如何使用硬体 μCOS-II 的方式播放SD卡内wav档音乐
(原創) 如何使用硬體 + μC/OS-II 的方式『播放SD 卡內wav 檔音樂』? (IC
Design) (DE2) (Quartus II) (Nios II) (μC/OS-II)
Abstract
之前已經討論過使用硬體的方式『播放SD 卡內wav 檔音樂』,本文將討論硬體 + μC/OS-II
這種軟硬體合作的方式播放SD 卡內wav 檔音樂。
使用環境 : Quartus II 6.0 + Nios II 6.0
Introduction
μC/OS-II 為一嵌入式real time OS,本文希望能透過OS 以軟體的方式控制硬體,播放SD
卡內wav 檔音樂。
Solution
Step 1:
下載DE2_System_v1.5
從友晶科技的/downloads/cd-rom/de2/下載
DE2_System_v1.5.zip
Step 2:
建立DE2_SD_Card_Audio_MicroCOS2 目錄
在c:\DE2\下建立[DE2_SD_Card_Audio_MicroCOS2] 目錄,將下載的
DE2_System_v1.5 解壓縮到c:\,將
c:\DE2_System_v1.5\DE2_demonstrations\DE2_SD_Card_Audio\下所有檔案複製到
c:\DE2\DE2_SD_Card_Audio_MicroCOS2 下
Step 3:
將硬體燒進DE2
開啟Quartus II 後,載入
c:\DE2\DE2_SD_Card_Audio_MicroCOS2\DE2_SD_Card_Audio.qpf,並開啟
Programmer,將c:\DE2\DE2_SD_Card_Audio_MicroCOS2\DE2_SD_Card_Audio.sof
燒進DE2
Step 4:
將舊的workspace 和project 刪除
將c:\DE2\DE2_SD_Card_Audio_MicroCOS2\的三個目錄刪除
[.metadata]
[hello_led_0]
[hello_led_0_syslib]
.metadata 紀錄舊有workspace 資訊,hello_led_0 和hello_led_0_syslib 則為原來
DE2_SD_Card_Audio 所建立的專案目錄
Step 5:
切換workspace
開啟Nios II 後,切換workspace 到c:\DE2\DE2_SD_Card_Audio_MicroCOS2,此時沒
有任何專案,因為已經被刪除了。
Step 6:
建立一個新的Nios II C/C++ Application
Step 7:
選擇Hello MicroC/OS-II 這個project template,,並選取正確路徑的SOPC Builder
System。
Step 8:
建立一個新的System Library
Step 9:
修改hello_ucosii.c
將DE2_System_v1.5.zip 中,純硬體的
c:\DE2_System_v1.5\DE2_demonstrations\DE2_SD_Card_Audio\hello_led_0\hell
o_led.c 內
#include basic_io.h
#include LCD.h
#include SD_Card.h
int main(void)
{
UINT16 i=0,Tmp1=0,Tmp2=0;
UINT32 j=720;
BYTE Buffer[512]={0};
while(SD_card_init())
usleep(500000);
LCD_Test();
while(1)
{
SD_read_lba(Buffer,j,1);
while(i512)
{
if(!IORD(AUDIO_0_BASE,0))
{
Tmp1=(Buffer[i+1]8)|Buffer[i];
IOWR(AUDIO_0_BASE,0,Tmp1);
i+=2;
}
}
if(j%64==0)
{
Tmp2=Tmp1*Tmp1;
IOWR(LED_RED_BASE,0,Tmp2);
IOWR(LED_GRE
文档评论(0)