⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 interrupt.c

📁 mp3播放器
💻 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 + -