播放mp3不連貫,請(qǐng)攤主看看問題在那里。
查詢播放很不連貫,中斷播放更不行,好像中斷的時(shí)間太長(zhǎng)。
LPC2132+CH375+VS1003
兩個(gè)緩沖區(qū)輪循,讀一個(gè)時(shí),寫另外一個(gè)。 //////////////////////////////////////////////////////////// void disk_mp3_read(void) { if(w_p==1) { w_p=3; mCmdParam.ReadX.mDataBuffer = &FILE_DATA_BUF1_MP3[0]; /* 指向文件數(shù)據(jù)緩沖區(qū) */ mCmdParam.Read.mSectorCount =1; //讀出的扇區(qū)數(shù) CH375vFileSize += 511; /* 默認(rèn)情況下,以扇區(qū)方式讀取數(shù)據(jù)時(shí),無法讀出文件尾部不足1個(gè)扇區(qū)的部分,所以必須臨時(shí)加大文件長(zhǎng)度以讀取尾部零頭 */ i = CH375FileReadX( ); /* 從文件讀取數(shù)據(jù) */ CH375vFileSize -= 511; /* 恢復(fù)原文件長(zhǎng)度 */ } if(w_p==0) { w_p=3; mCmdParam.ReadX.mDataBuffer = &FILE_DATA_BUF0_MP3[0]; /* 指向文件數(shù)據(jù)緩沖區(qū) */ mCmdParam.Read.mSectorCount =1; //讀出的扇區(qū)數(shù) CH375vFileSize += 511; /* 默認(rèn)情況下,以扇區(qū)方式讀取數(shù)據(jù)時(shí),無法讀出文件尾部不足1個(gè)扇區(qū)的部分,所以必須臨時(shí)加大文件長(zhǎng)度以讀取尾部零頭 */ i = CH375FileReadX( ); /* 從文件讀取數(shù)據(jù) */ CH375vFileSize -= 511; /* 恢復(fù)原文件長(zhǎng)度 */ } } ////////////////////////////////////////////////////////////// void disk_mp3_play(void) //查詢DREQ播放 { uint i; if((IO0PIN & MP3_DREQ)!=0) { if((r_p>=0)&&(r_p<512)) { Mp3SelectData(); for(i=0;i<32;i++) { SPIPutChar(FILE_DATA_BUF0_MP3[r_p]); r_p++; if(r_p==1) w_p=1;
} Mp3DeselectData(); } if((r_p>=512)&&(r_p<1024)) { Mp3SelectData(); for(i=0;i<32;i++) { SPIPutChar(FILE_DATA_BUF1_MP3[r_p-512]); r_p++; if(r_p>=1024) r_p=0; if(r_p==513) w_p=0; } Mp3DeselectData(); } } } ////////////////////////////////////////////////////////////////// void IRQ_EXINT0(void) __irq //DREQ中斷播放函數(shù) { uint i; IO0SET |= lcd_led; if((r_p>=0)&&(r_p<512)) { Mp3SelectData(); for(i=0;i<32;i++) { SPIPutChar(FILE_DATA_BUF0_MP3[r_p]); r_p++; if(r_p==1) w_p=1; num+=10000;
} Mp3DeselectData(); } if((r_p>=512)&&(r_p<1024)) { Mp3SelectData(); for(i=0;i<32;i++) { SPIPutChar(FILE_DATA_BUF1_MP3[r_p-512]); r_p++; if(r_p>=1024) r_p=0; if(r_p==513) w_p=0; num+=10000; } Mp3DeselectData(); } EXTINT=0X1; //清除中斷標(biāo)志 VICVectAddr = 0; // 向量中斷結(jié)束 } ///////////////////////////////////////////////////////////////////// void mp3_DREQ_init(void) //打開中斷播放 { PINSEL1|=0x1; VICVectCntl6 = 0x2E; // EXINT0中斷通道分配到IRQ slot 6,即優(yōu)先級(jí)6 VICVectAddr6 = (unsigned long)IRQ_EXINT0; // 設(shè)置EXINT0向量地址 EXTMODE=0; //0為電平激活中斷 EXTPOLAR=1; //1為高點(diǎn)平或上升沿中斷 VICIntEnable |=(1<< 0XE); // 使能EXINT0中斷
} ////////////////////////////////////////////////////////////////////// void InitPortVS1003(void) //初始化VS1003 { IO0DIR |= MP3_SCLK | MP3_MOSI ; IO0DIR |= IO0DIR& (~ MP3_MISO);
IO0DIR |= IO0DIR&(~MP3_DREQ);
IO0DIR |= MP3_XRESET | MP3_XCS | MP3_XDCS;//xRESET,xCS,xDS均為輸出口 IO0SET |= MP3_XRESET | MP3_XCS | MP3_XDCS;//xRESET,xCS,xDS默認(rèn)輸出高電平 Mp3Reset(); } ///////////////////////////////////////////////////////////////////////