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

📄 main.c

📁 为三星440处理器编写的播放MP3的程序
💻 C
字号:
//*************www.arm88.com*************//

#include "option.h"
#include "def.h"
#include "44b.h"
#include "vs1001k.h"
#include "44blib.h"
#include "vs1001k.h"
#include <string.h>


#define F_VS1001	(6144 + 0x8000)	

char *mp3dat;
char  which_int=0;
void spicommand(char aa, char bb, char a, char b);
void __irq Key_Int(void)
{	

    which_int=rEXTINTPND;
   
            switch(which_int)
            {
        	case 1:
        	    Uart_Printf("\n***音量0X45***");
				spicommand(0x02,0x0b,0x45,0X45);
				Delay(500);
        	    which_int=0;
        	    break;
        	case 2:
        	    Uart_Printf("\n***音量0X35***");
				spicommand(0x02,0x0b,0x35,0X35);
				Delay(500);
        	    which_int=0;
        	    break;
        	case 4:
        		Uart_Printf("\n***音量0X25***");
				spicommand(0x02,0x0b,0x25,0X25);
				Delay(500);        					
        	    which_int=0;
        	    break;
        	case 8:
        	    Uart_Printf("\n***音量0X10***");
				spicommand(0x02,0x0b,0x10,0X10);
				Delay(500);        	
        	    which_int=0;
        	    break;
        	default :
        	    break;
            }
            rEXTINTPND=0xf;		//clear EXTINTPND reg.		
    		rI_ISPC=BIT_EINT4567;	//clear pending_bit
 
}
void Key_Init(void)
{
	rINTCON=0x5;
	rINTMOD=0x0;    //All=IRQ mode
//	rEXTINT=0x22222222; //Falling edge mode 
	rEXTINT=0x0;		//"0" level mode
    rPCONG=0xffff;	//EINT7~0
    rPUPG=0x0;		//pull up enable
    pISR_EINT4567=(unsigned)Key_Int;
    rINTMSK=~(BIT_GLOBAL|BIT_EINT4567);	//start INT
}

//*************www.arm88.com*************//
void VSSendMP3(char data)
{
	char i;
	XCS_1;
	
	BSYNC_1;
	DCLK_0;
	
	for (i=0;i<8;i++)
	{
	if ((data<<i)&0x80) SIO_DATA_1;
	else                SIO_DATA_0;
	
	if (i==5) BSYNC_0;
	
    DCLK_1;
    DCLK_1;  
    DCLK_1;
    
    DCLK_0;
    }
}
//*************www.arm88.com*************//
void Send_Com(char data)
{
	char i;
	XCS_0;
	SCK_0;
		
	for (i=0;i<8;i++)
	{
	if ((data<<i)&0x80) SIO_DATA_1;
	else                SIO_DATA_0;
	
	SCK_1;
    SCK_1;
    SCK_1;
    
    SCK_0;
    }
    Delayms(1); 
}
//*************www.arm88.com*************//

void Initvs1001_port(void)
{
	rPDATC=0xff60;	
    rPCONC=0x0f051545;	
    rPUPC=0x309f;	
  
}



//*************www.arm88.com*************//
void vs1001_test(void){

    while(!DREQ) ;   
     
    VSSendMP3(0X53);	
  	VSSendMP3(0xEF);	
  	VSSendMP3(0x6E);	
  	VSSendMP3(0x40);	
	VSSendMP3(0x00);	
  	VSSendMP3(0x00);	
  	VSSendMP3(0x00);	
  	VSSendMP3(0x00);
  		
    Delay(100);
    VSSendMP3(0x45);	
  	VSSendMP3(0x78);	
  	VSSendMP3(0x69);
  	VSSendMP3(0x74);	
 	VSSendMP3(0x00);	
  	VSSendMP3(0x00);
  	VSSendMP3(0x00);	
  	VSSendMP3(0x00);  	 
    Delay(100);
   
}

//*************www.arm88.com*************//
void spicommand(char aa, char bb, char a, char b)
{

    XCS_0;	
    Delayms(4);
    Send_Com(aa);
    Send_Com(bb);
	Send_Com(a);  	  
 	Send_Com(b);		
    XCS_1;				
    Delayms(400);
   
}
//*************www.arm88.com*************//

void Zeros(void)
{
	int c=0;            
    char  i=0;            

   while(c <2048)        
   {
      if(!DREQ)
      {
	      for(i=0;i<32;i++)
         {
			   VSSendMP3(0);
		   }
         c+=32;
      }
	}
}


//*************www.arm88.com*************//
void Playmp3(void){
	int c=0;            
   char  i=0;            
   mp3dat=(char *)0x0c008000;
  
   while(!DREQ) ; 
   while(c <520000)        
   {
      if(DREQ)
      {
     
	      for(i=0;i<32;i++)
         {
			   VSSendMP3(*mp3dat);
			   mp3dat++;
		   }
		
         c+=32;
      }
	}
	
}
//*************www.arm88.com*************//
void vs1001_nulls(short nNulls)
{
	while (nNulls--)
	VSSendMP3(0);
}

void vs1001_reset(void)
{
	XRESET_0;
	Delayms(1);          
	XRESET_1;
    Delay(2000);   
					// wait 20 mS
	spicommand(0x02,0x00,0x00,0x04);// set SW reset bit						
		
	Delay(10);						// wait 10 uS
	while(!DREQ) ;                  // wait for DREQ	
	vs1001_nulls(32);
	
	spicommand(0x02,0x00,0x00,0x80);
	Delay(500);
	spicommand(0x02,0x0b,0x38,0X38);
	Delay(500);
	spicommand(0x02,0x03,0x98,0X00);
	Delay(500);
	
	vs1001_nulls(32);
	Uart_Printf("\n-----vs1001_set-----");	
	
}



//*************www.arm88.com*************//

void Main(void)
{
    rSYSCFG=CACHECFG;   
    Port_Init();
    Uart_Init(0,57600);
    Delay(10);
    Uart_Select(0);
    Uart_Printf("\n***********************************");
    Uart_Printf("\n*     MP3播放演示程序             *");
    Uart_Printf("\n* 请按开发板上的按键选择音量大小! *");
    Uart_Printf("\n***********************************");
    
    Key_Init();
    
    Initvs1001_port();   
    vs1001_reset();   
 // vs1001_test();
	Playmp3();
   
    while(1);
    
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -