📄 interrupt.c
字号:
#include "dp8051.h"
#include "config.h"
#include "absacc.h"
#include "constant.h"
#include "variable.h"
#include "function.h"
#include "sdhost.h"
#include "sssmp3_regs.h"
#include "fat.h"
#include "mp3_appl.h"
/************************************************
函 数 名: Timer0_ISR()
功 能:Timer0中断处理
说 明:
调 用:
全局变量:
入口参数:无
出口参数:无
返 回 值:无
************************************************/
void Timer0_ISR(void) interrupt 1
{
//TR0 = 0;
TH0 = 0xD8;//0x3C;
TL0 = 0xF0;//0xB0;
Timer0_Flag = 1;
//TR0 = 1;
}
/************************************************
函 数 名: MP3_ISR()
功 能:MP3中断处理
说 明:
调 用:
全局变量:
入口参数:无
出口参数:无
返 回 值:无
************************************************/
// MP3 Decoder Interrupt
void MP3_ISR(void) interrupt 8//EXTERNAL INT3, Vector address at 0x0043
{
MP3_ISR_Flag = 1;
tmpINT3 |= MP3_INT_FLAG & 0x3F;
MP3_INT_CLR = 0x3F;//Clear MP3 interrupt
}
/************************************************
函 数 名: MP3_deal()
功 能:MP3中断处理
说 明:
调 用:
全局变量:
入口参数:无
出口参数:无
返 回 值:无
************************************************/
// MP3 Decoder Interrupt
#pragma disable
void MP3_deal(void)
{
if(tmpINT3 & IFFC)//FrameLock_Clear
{
tmpINT3 &= ~IFFC;
return;
}
if(tmpINT3 & IFEMPTY)//PCM_FIFO_Empty
{
MP3_CTL |= (MP3_CLR | MUTE);//(1) Must follows procedure -> Reset for MP3 decoder
MP3_FIFOCTL = 0x00;//(2) PCM_output FIFO Disable
MP3_I2S_CTL = 0x00;//(3) I2S Disable
MP3_DMACTL = DMA_CLR;//(4)Clear DMA STM
MP3_DMACTL = 0x00;//(5)
tmpINT3 = 0;
//EIE = 0x00;//Disable INT3
//CLASS_D_DAC_CTL = (SUSPEND | PAUSE);// suspend & Mute Class-D
//MP3_INT_EN = 0x00;
varAl.SystemFlag |= END_FILEADDR_FLAG;
return;
}
if(tmpINT3 & IFL)//Left_DMA_Empty -> prepare Right DMA & move data into Left DMA buffer
{
// set-up MP3 Right DMA
MP3_DMASTART0700_RIGHT = 0x00;
MP3_DMASTART1508_RIGHT = 0x00;
MP3_DMALEN0700_RIGHT = 0xFF;
MP3_DMALEN1508_RIGHT = 0x01;//-> 0x0 ~ 0x01FF= 512 Bytes
//move data to Left DMA Buffer
if( FileData.dwMovedDataToBuffSizeCNT < FileData.dwFileDataSize)
{
if(varAl.SystemFlag & END_FILEADDR_FLAG)
MP3_CTL |= (MP3_CLR | MUTE);
else
{
MP3_DMACTL = DMA_READY_R;
FileData.dwMovedDataToBuffSizeCNT += CFatData.wBytesPerSec;
ReadSector(FileData.dwCurSecLba++,0x05);
}
}
else//FIFO Empty Flag can not rise-up if we disable FIFOCTL in follows...@0927
varAl.SystemFlag |= END_FILEADDR_FLAG;//prepare to disable DMA_CTL
tmpINT3 &= ~IFL;
return;
}
if(tmpINT3 & IFR)//Righ_DMA_Empty -> prepare Left DMA & move data into Right DMA Buffer
{
// set-up MP3 Left DMA
MP3_DMASTART0700_LEFT = 0x00;
MP3_DMASTART1508_LEFT = 0x00;
MP3_DMALEN0700_LEFT = 0xFF;
MP3_DMALEN1508_LEFT = 0x01;//-> 0x0 ~ 0x01FF= 512 Bytes
if(FileData.dwMovedDataToBuffSizeCNT < FileData.dwFileDataSize)
{
if(varAl.SystemFlag & END_FILEADDR_FLAG)
MP3_CTL |= (MP3_CLR | MUTE);
else
{
MP3_DMACTL = DMA_READY_L;
FileData.dwMovedDataToBuffSizeCNT += CFatData.wBytesPerSec;
ReadSector(FileData.dwCurSecLba++,0x06);
}
}
else//FIFO Empty Flag can not rise-up if we disable FIFOCTL in follows...@0927
varAl.SystemFlag |= END_FILEADDR_FLAG;//prepare to disable DMA_CTL
tmpINT3 &= ~IFR;
return;
}
if(tmpINT3 & IFFS)//FrameLock_Set
{
CLASS_D_DAC_CTL = MP3_STATUS0 & 0x70;
MP3_FIFOCTL = FIFO_EN;//PCM_output FIFO enable
tmpINT3 &= ~IFFS;
return;
}
if(tmpINT3 & IFOK)//PCM_FIFO_Buffer_OK
{
//MP3_I2S_RATE = 0x07;
//MP3_I2S_DUTY = 0x04;
MP3_I2S_CTL = 0x00;//for Class-D in Parallel Mode
tmpINT3 &= ~IFOK;
return;
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -