扬州职业大学——电子工程系 智能语音玩具 毕业论文
// }
if(nMp3Pos>= nMp3Size) {
LD_WriteReg(0xBC,0x01);
ucStatus = LD_ReadReg(0x02); ucStatus&= (~MASK_AFIFO_INT); LD_WriteReg(0x02, ucStatus); ucStatus= LD_ReadReg(0x29);
ucStatus&= (~MASK_INT_FIFO);
LD_WriteReg(0x29,ucStatus|MASK_INT_SYNC) ; bMp3Play= 0; EX0= 1; ET0= 1; }
return;
LD_ReloadMp3Data();
LD_WriteReg(0x29,ucHighInt); LD_WriteReg(0x02,ucLowInt) ; delay(10); EX0= 1; ET0= 1;
void LD_play() {
nMp3Pos= 0; bMp3Play= 1;
LD_WriteReg(0x1B, LD_ReadReg(0x1B)|0x08); if (nMp3Pos >= nMp3Size) return ;
LD_ReloadMp3Data();
LD_WriteReg(0xBA, 0); LD_WriteReg(0x17,0x48); LD_WriteReg(0x33, 1);
ucRegVal = LD_ReadReg(0x29);
LD_WriteReg(0x29, ucRegVal|MASK_INT_FIFO);
ucRegVal = LD_ReadReg(0x02);
第 16 页 共 45 页
扬州职业大学——电子工程系 智能语音玩具 毕业论文
LD_WriteReg(0x02, ucRegVal|MASK_AFIFO_INT); ucRegVal=LD_ReadReg(0x89);
LD_WriteReg(0x89, ucRegVal | 0x0c); ucRegVal = (2& 0x03)<<2;//
ucStatus=LD_ReadReg(0x85)&(~0x0c); LD_WriteReg(0x85, ucStatus | ucRegVal);
EX0= 1; }
void LD_AdjustMIX2SPVolume(uint8 val) {
ucSPVol = val;
val = ((15-val)&0x0f) << 2;
ucRegVal = LD_ReadReg(0x8E)&0xc3; LD_WriteReg(0x8E, val | ucRegVal); LD_WriteReg(0x87, 0x78); }
void LD_WriteReg( uint8 ulAddr, uint8 ucVal ) {
LD_INDEX_PORT = ulAddr; LD_DATA_PORT = ucVal; }
uint8 LD_ReadReg( uint8 ulAddr ) {
LD_INDEX_PORT = ulAddr; return (uint8)LD_DATA_PORT; }
void LD_ReloadMp3Data() {
uint32 nCurMp3Pos; uint8 val; uint8 k;
nCurMp3Pos = nMp3StartPos + nMp3Pos; FLASH_CS= 1; FLASH_CLK= 0; FLASH_CS= 0;
IO_Send_Byte(W25P_FastReadData);
IO_Send_Byte(((nCurMp3Pos & 0xFFFFFF) >> 16)); IO_Send_Byte(((nCurMp3Pos & 0xFFFF) >> 8)); IO_Send_Byte(nCurMp3Pos & 0xFF);
第 17 页 共 45 页
扬州职业大学——电子工程系 智能语音玩具 毕业论文
IO_Send_Byte(0xFF);
ucStatus = LD_ReadReg(0x06);
while ( !(ucStatus&MASK_FIFO_STATUS_AFULL) && (nMp3Pos val= 0; for(k= 0;k<8;k++) { FLASH_CLK=0; val<<=1; FLASH_CLK=1; val|=FLASH_DO; } LD_WriteReg(0x01,val); //send_UART(val); nMp3Pos++; ucStatus = LD_ReadReg(0x06); } FLASH_CS=1; FLASH_CLK=0; } // Return 1: success. uint8 LD_Check_ASRBusyFlag_b2() { uint8 j; uint8 flag = 0; for (j=0; j<10; j++) { if (LD_ReadReg(0xb2) == 0x21) { flag = 1; break; } delay(10); } return flag; } void LD_AsrStart() { LD_Init_ASR(); 第 18 页 共 45 页 扬州职业大学——电子工程系 智能语音玩具 毕业论文 } // Return 1: success. uint8 LD_AsrRun() { LD_WriteReg(0x35, MIC_VOL); LD_WriteReg(0x1C, 0x09); LD_WriteReg(0xBD, 0x20); LD_WriteReg(0x08, 0x01); delay( 1 ); LD_WriteReg(0x08, 0x00); delay( 1 ); if(LD_Check_ASRBusyFlag_b2() == 0) { return 0; } LD_WriteReg(0xB2, 0xff); LD_WriteReg(0x37, 0x06); delay( 5 ); LD_WriteReg(0x1C, 0x0b); LD_WriteReg(0x29, 0x10); LD_WriteReg(0xBD, 0x00); EX0=1; return 1; } // Return 1: success. uint8 LD_AsrAddFixed() { uint8 k, flag; uint8 nAsrAddLength; const char sRecog[5][15] = {\er \ const uint8 pCode[5] = {CODE_TANGSHI, CODE_SUANSHU, CODE_SUANSHU, CODE_YIJIAYI,CODE_ERJIAER, }; flag = 1; for (k=0; k<5; k++) { if(LD_Check_ASRBusyFlag_b2() == 0) { 第 19 页 共 45 页 扬州职业大学——电子工程系 智能语音玩具 毕业论文 flag = 0; break; } LD_WriteReg(0xc1, pCode[k] ); LD_WriteReg(0xc3, 0 ); LD_WriteReg(0x08, 0x04); delay(1); LD_WriteReg(0x08, 0x00); delay(1); for (nAsrAddLength=0; nAsrAddLength<20; nAsrAddLength++) { if (sRecog[k][nAsrAddLength] == 0) break; LD_WriteReg(0x5, sRecog[k][nAsrAddLength]); } LD_WriteReg(0xb9, nAsrAddLength); LD_WriteReg(0xb2, 0xff); LD_WriteReg(0x37, 0x04); } return flag; } uint8 LD_GetResult() { return LD_ReadReg(0xc5 ); } #ifndef LD_CHIP_H #define LD_CHIP_H #define uint8 unsigned char #define uint16 unsigned int #define uint32 unsigned long #define LD_MODE_IDLE 0x00 #define LD_MODE_ASR_RUN 0x08 #define LD_MODE_MP3 0x40 #define LD_ASR_NONE 0x00 #define LD_ASR_RUNING 0x01 #define LD_ASR_FOUNDOK 0x10 #define LD_ASR_FOUNDZERO 0x11 #define LD_ASR_ERROR 0x31 第 20 页 共 45 页