📄 main.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 + -