music.c

来自「dsp2812的源程序」· C语言 代码 · 共 149 行

C
149
字号

/*********音乐示例***************/

#include <stdio.h>
#include "DSP28_Device.h"
#include "music.h"
#include "DSP28_Globalprototypes.h"

#define	 HIGH	GpioDataRegs.GPADAT.bit.GPIOA7=1
#define	 LOW	GpioDataRegs.GPADAT.bit.GPIOA7=0

//float a[100],b[100];
unsigned int Flag1 = 0,Flag;
unsigned int i,k;

/*float a[]={LAL,DO, ME, DO, RE, DO, XIL,ME, RE, LAL, 
			  DO, ME, SO, SO, LA, SO, FA, ME, 
			  FA_S, SO_S, XI, LA, ME, XIL,LAL,ME, RE, FA, 
			  SO, FA, ME, RE, DO, ME, RE, LAL,HHH,0,0};

float b[]={P2, P2, P2, P2, P4, P2, P2, P4, P4, P8,
	          P2, P2, P2, P2, P4, P2, P2, P8, 
			  P4, P4, P2, P2, P6, P4, P2, P2, P2, P8, 
			  P2, P2, P4, P2, P2, P4, P4, P8, P8,0,0};
*/	

interrupt void ISRTimer1(void);
interrupt void ISRTimer2(void);

void main(void)
{

	/*初始化音节*/
float a[]={LAL,DO, ME, DO, RE, DO, XIL,ME, RE, LAL, 
			  DO, ME, SO, SO, LA, SO, FA, ME, 
			  FA_S, SO_S, XI, LA, ME, XIL,LAL,ME, RE, FA, 
			  SO, FA, ME, RE, DO, ME, RE, LAL,HHH,0};

	
	/*输入音节音长*/
float b[]={P2, P2, P2, P2, P4, P2, P2, P4, P4, P8,
	          P2, P2, P2, P2, P4, P2, P2, P8, 
			  P4, P4, P2, P2, P6, P4, P2, P2, P2, P8, 
			  P2, P2, P4, P2, P2, P4, P4, P8, P8};


	/*初始化系统*/

//   printf("This is a test.\n");

	InitSysCtrl();
	
	/*关中断*/
	DINT;
	IER = 0x0000;
	IFR = 0x0000;

 	EALLOW;
	  GpioMuxRegs.GPAMUX.all=0x0000;
	  GpioMuxRegs.GPADIR.all=0xFFFF;	
      GpioMuxRegs.GPAQUAL.all=0x0000;  
    EDIS;

	/*初始化PIE*/
	InitPieCtrl();

	/*初始化PIE中断矢量表*/
	InitPieVectTable();	
	
	/*初始化时钟*/
   	InitCpuTimers();
    	
    
 	/*初始化中断服务子程序入口*/
 	EALLOW;	
	PieVectTable.XINT13 = &ISRTimer1;
	PieVectTable.TINT2 = &ISRTimer2;
	EDIS;   
    	
	/*开中断*/
	IER |= M_INT13;
	IER |= M_INT14;

	EINT;   // Enable Global interrupt INTM
	ERTM;	// Enable Global realtime interrupt DBGM
	
	for(;;)
	{
		for(i = 0;; i++) 
		{		
		
//		printf("a[%d]=%f\n",i,a[i]);
//		printf("b[%d]=%f\n",i,b[i]);
//		printf("Flag=%d\n",Flag);
						
		if(a[i]==0) 
			{
			i = 0;
			break;
			}
	
		/*初始化CPU时钟*/
		ConfigCpuTimer(&CpuTimer1, 150, b[i]);	
 		ConfigCpuTimer(&CpuTimer2, 150, a[i]);  

		StartCpuTimer1();
		StartCpuTimer2();
	
		Flag=0;
			for(;;)
			{
			if(Flag==1)break;
			}
		}
	} 	
}



/*CPUTimer2中断服务子程序*/
interrupt void ISRTimer2(void)
{
	CpuTimer2.InterruptCount++;
	if(Flag1 == 0)
	{
		HIGH;
		Flag1 = 1;
	}
	else
	{
		LOW;
		Flag1 = 0;
	}
}


/*CPUTimer1中断服务子程序*/
interrupt void ISRTimer1(void)
{
	CpuTimer1.InterruptCount++;
	if(Flag == 0)
	{
		Flag = 1;
	}
}


// No more.//

⌨️ 快捷键说明

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