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

📄 main.c

📁 完整的wav文件播放程序采用lpc2148芯片
💻 C
字号:
/******************************************************************************/
/*  This file is part of the uVision/ARM development tools                    */
/*  Copyright KEIL ELEKTRONIK GmbH 2002-2004                                  */
/******************************************************************************/
/*                                                                            */
/*  MAIN.C:  Wave Player                                                      */
/*                                                                            */
/******************************************************************************/
                  
#include <stdio.h>                         /* standard I/O .h-file */
#include <LPC213x.H>                       /* LPC21xx definitions  */
#include <math.h>

extern int getkey(void);
#include "arm.h"

#include "modes.h"
extern enum modes mode;

#include "riffwave.h"
static const unsigned char alignment[][5] = {{"ERR"},{"BYTE"},{"WORD"},{"ERR"},{"DWORD"}};

extern void init_serial (void);            /* Initialize Serial Interface     */
extern void init_timer (void);             /* 8kHz Timer Interrupt Routine */

extern unsigned long timeval;
extern unsigned char print_info;
extern struct wav_hdr* p_wav_hdr;
extern unsigned int blockindex;

signed int volume;

extern void IRQDisable(void);
extern void IRQEnable(void);
char test;
void IRQDisable1 (void) __swi(0)
{
	__asm
	{
	MRS     R0, SPSR
	ORR     R0, R0, #0x80
	MSR     SPSR_c, R0
//	MOVS    PC, LR
	}
	
	test++;
}
void IRQEnable1 (void) __swi(1)
{
	__asm
	{
	MRS   R0, SPSR
	BIC   R0, R0, #0x80
	MSR   SPSR_c, R0
//	MOVS    PC, LR
	}
	
	test++;
}


void get_input(void) {                       /* HID processing function */
  unsigned int cnt=0;
  unsigned int val;
  unsigned int key;

  if(key=getkey()) {                        /* Next track    */
    switch(key){
      case 'n':
      case 'N':
        mode = NEXT;
        break;                               /* Previous track */
      case 'p':
      case 'P':
        mode = PREV;
        break;
    }
  }

  AD0CR |= 0x01000000;                  /* Start A/D Conversion           */
  do {
    val = AD0DR;                        /* Read A/D Data Register         */
  } while ((val & 0x80000000) == 0);    /* Wait for end of A/D Conversion */
  AD0CR &= ~0x01000000;                 /* Stop A/D Conversion            */
  volume = ((val >> 1) & 0x7FE0);       /* Extract AIN0 Value */
}

int main (void) {
  unsigned int alignidx;

  IODIR1  = 0x00FF0000;                     /* P1.16..23 defined as Outputs  */
  AD0CR   = 0x00200402;                     /* Setup A/D: 10-bit AIN0 @ 3MHz */
  PINSEL1 = 0x01080000;                     /* enable DAC */

	test=0;
//	IRQDisable();
//	IRQEnable();
//	IRQDisable1();
	IRQEnable1();

  get_input();                              /* has to be called before starting the timer to get volume level */
  
  init_serial();                            /* Initialize Serial Interface to 115200 baud */
  init_timer ();
  
  printf ("\nMCB2130 WAVE AUDIO PLAYER\n\n");

  while (1) {                               /* Loop forever */
    if (print_info)
    {
	  alignidx = p_wav_hdr->sample_size;
	    if (alignidx > 4) alignidx = 0; 
      print_info = 0;
      printf ("Playing Block %01d\n", blockindex);
      printf ("File information:\n");
      printf ("=================\n");
      printf ("File Size:        : %d\n",      p_wav_hdr->length);
      printf ("Format identifier : %01d\n",    p_wav_hdr->format);
      printf ("Number of Channels: %01d\n",    p_wav_hdr->channels);
      printf ("Sampling Rate     : %05d Hz\n", p_wav_hdr->sample_rate);
      printf ("Bytes per Second  : %05d\n",    p_wav_hdr->bytes_per_second);
      printf ("Sample Alignment  : %s\n",      alignment[alignidx]);
      printf ("Sample resolution : %02d\n\n",  p_wav_hdr->precision);
    }
  get_input();
  }
}

⌨️ 快捷键说明

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