📄 main.i
字号:
#line 1 "C:\DATA\MP3\Player\Code\main.c"
#line 1 "C:/iccavr/include/iom128v.h"
#line 7 "C:/iccavr/include/iom128v.h"
#line 11 "C:/iccavr/include/iom128v.h"
#line 14 "C:/iccavr/include/iom128v.h"
#line 17 "C:/iccavr/include/iom128v.h"
#line 20 "C:/iccavr/include/iom128v.h"
#line 2 "C:\DATA\MP3\Player\Code\main.c"
#line 1 "C:\DATA\MP3\Player\Code/fat.h"
void InitFat(void);
unsigned long Clust2LBA(unsigned long clust);
unsigned long GetNextCluster(unsigned long Clust);
int GetDir(unsigned long Cluster, unsigned int From, unsigned int Qte, unsigned int Display);
void DisplayFiles(unsigned char *LinePtr);
struct PartRecord
{
unsigned char IsActive;
unsigned char StartHead;
unsigned int StartCylSect;
unsigned char PartType;
unsigned char EndHead;
unsigned int EndCylSect;
unsigned long StartLBA;
unsigned long Size;
};
struct BootRecord
{
unsigned char jmp[3];
unsigned char name[8];
unsigned int BytesPerSec;
unsigned char SecPerClust;
unsigned int ResSectors;
unsigned char FATs;
unsigned int RootDirEnts;
unsigned int Sectors;
unsigned char Media;
unsigned int FATsecs;
unsigned int SecPerTrack;
unsigned int Heads;
unsigned long HiddenSecs;
unsigned long HugeSectors;
unsigned long FATSize;
unsigned int ExtFlags;
unsigned int FSVers;
unsigned long RootClust;
unsigned int FSInfo;
unsigned int Backup;
};
struct DirEntry
{
unsigned char Name[8];
unsigned char Extension[3];
unsigned char Attributes;
unsigned char LowerCase;
unsigned char CHundredth;
unsigned char CTime[2];
unsigned char CDate[2];
unsigned char ADate[2];
unsigned int FirstClustHi;
unsigned char MTime[2];
unsigned char MDate[2];
unsigned int FirstClustLo;
unsigned long FileSize;
};
struct WinEntry
{
unsigned char Cnt;
unsigned int Part1[5];
unsigned char Attr;
unsigned char Reserved1;
unsigned char Chksum;
unsigned int Part2[6];
unsigned int Reserved2;
unsigned int Part3[2];
};
struct FileInfo
{
unsigned char Name[256];
unsigned char Extension[3];
unsigned char Attr;
unsigned long FirstClust;
unsigned long FileSize;
};
#line 3 "C:\DATA\MP3\Player\Code\main.c"
#line 1 "C:\DATA\MP3\Player\Code/ata.h"
int init_ata(unsigned char device);
void ata_hard_reset(void);
void ata_select_device(unsigned char device);
void ata_write_word(unsigned char reg,unsigned int wordout);
void ata_write_byte(unsigned char reg,unsigned char byteout);
unsigned int ata_read_word(unsigned char reg);
unsigned char ata_read_byte(unsigned char reg);
unsigned char ata_rdy(void);
unsigned char ata_bsy(void);
unsigned char ata_drq(void);
unsigned char ata_err(void);
void ata_write_sector(unsigned char device, unsigned long lbasector, unsigned int *ptr);
void ata_read_sector_byte(unsigned char device, unsigned long lbasector,
unsigned int from, unsigned int qte,unsigned char *ptr);
#line 147 "C:\DATA\MP3\Player\Code/ata.h"
#line 150 "C:\DATA\MP3\Player\Code/ata.h"
#line 154 "C:\DATA\MP3\Player\Code/ata.h"
#line 4 "C:\DATA\MP3\Player\Code\main.c"
#line 1 "C:\DATA\MP3\Player\Code/vs1001.h"
void VS1001Init(unsigned char HardReset);
void VS1001_SetVolume(unsigned char Left,unsigned char Rignt);
void VS1001_Stream(unsigned char *Data,unsigned char Qte);
void VS1001_Write(unsigned char Address,int Count,unsigned int *pData);
void VS1001_Read(unsigned char Address,int Count,unsigned int *pData);
unsigned char Reg_Test(void);
void Sine_On(unsigned char Freq);
void Sine_Off(void);
void Sine_Sweep(void);
unsigned char WriteByteSPI(unsigned char byte);
#line 5 "C:\DATA\MP3\Player\Code\main.c"
#line 1 "C:\DATA\MP3\Player\Code/remote.h"
void InitRemote(void);
void RemoteSendLine(unsigned char LinePtr);
void RemoteSendScreen(unsigned char Header,unsigned char LinePtr);
void SendRemote(char *buffer);
void SendByte(unsigned char TxByte);
void TxChar(unsigned char ch);
void RxChar(void);
#line 6 "C:\DATA\MP3\Player\Code\main.c"
#line 1 "C:\DATA\MP3\Player\Code/main.h"
void main(void);
void DirBrowser(unsigned long Cluster);
void FileBrowser(unsigned long Cluster);
int PlayMP3(void);
int DoTask(int Percent);
#line 7 "C:\DATA\MP3\Player\Code\main.c"
#line 1 "C:\DATA\MP3\Player\Code/generic.h"
void delay_ms(int ms);
void delay_us(unsigned int us);
#line 8 "C:\DATA\MP3\Player\Code\main.c"
#line 1 "C:/iccavr/include/string.h"
#line 1 "C:/iccavr/include/_const.h"
#line 10 "C:/iccavr/include/_const.h"
#line 4 "C:/iccavr/include/string.h"
typedef unsigned int size_t;
void *memcpy(void *, void *, size_t);
void *memset(void *, int, size_t);
void *memchr(void *, int, size_t);
int memcmp(void *, void *, size_t);
void *memmove(void *, void *, size_t);
char *strchr( char *, int);
int strcoll( char *, char *);
size_t strcspn( char *, char *);
char *strncat(char *, char *, size_t);
int strncmp( char *, char *, size_t);
char *strncpy(char *, char *, size_t);
char *strpbrk( char *, char *);
char *strrchr( char *, int);
size_t strspn( char *, char *);
char *strstr( char *, char *);
char *strtok(char *, char *);
size_t strlen( char *);
char *strcpy(char *, char *);
int strcmp( char *, char *);
char *strcat(char *, char *);
size_t cstrlen(const char *cs);
char *cstrcpy(char *, const char *cs);
char *cstrncpy(char *, const char *cs, size_t);
int cstrcmp(const char *cs, char *);
char *cstrcat(char *, const char *);
char *cstrstr(char *ramstr, const char *romstr);
char *cstrstrx(char *ramstr, const char *romstr);
#line 57 "C:/iccavr/include/string.h"
#line 9 "C:\DATA\MP3\Player\Code\main.c"
#line 1 "C:/iccavr/include/stdio.h"
#line 1 "C:/iccavr/include/stdarg.h"
typedef char *va_list;
#line 9 "C:/iccavr/include/stdarg.h"
char *_va_start(void *, int);
#line 13 "C:/iccavr/include/stdarg.h"
#line 4 "C:/iccavr/include/stdio.h"
#line 1 "C:/iccavr/include/_const.h"
#line 10 "C:/iccavr/include/_const.h"
#line 5 "C:/iccavr/include/stdio.h"
int getchar(void);
int putchar(char);
int puts( char *);
int printf( char *, ...);
int vprintf( char *, va_list va);
int sprintf(char *, char *, ...);
int scanf( char *, ...);
int sscanf(char *, char *, ...);
int vscanf( char *, va_list va);
int cprintf(const char *, ...);
int csprintf(char *, const char *, ...);
#line 10 "C:\DATA\MP3\Player\Code\main.c"
#line 1 "C:/iccavr/include/macros.h"
#line 33 "C:/iccavr/include/macros.h"
void _StackCheck(void);
void _StackOverflowed(char);
#line 11 "C:\DATA\MP3\Player\Code\main.c"
unsigned char text[255];
void main(void)
{
init_sci();
ClrScr();
tx_char(1,0x07);
GotoXY(1,1);
tx_string(1,"MP3 Player 1.0\0");
GotoXY(1,2);
tx_string(1,"--------------\0");
GotoXY(1,3);
if ((*(volatile unsigned char *)0x54) & 0x01) tx_string(1,"-Power ON\0");
GotoXY(1,4);
if ((*(volatile unsigned char *)0x54) & 0x02) tx_string(1,"-Ext RESET\0");
GotoXY(1,5);
if ((*(volatile unsigned char *)0x54) & 0x04) tx_string(1,"-Brown Out\0");
GotoXY(1,6);
if ((*(volatile unsigned char *)0x54) & 0x08) tx_string(1,"-Watch Dog\0");
(*(volatile unsigned char *)0x54) = 0x0f;
delay_ms(5000);
asm("wdr");
(*(volatile unsigned char *)0x41) = 0x0f;
ClrScr();
GotoXY(1,1);
tx_string(1,"MP3 Player 1.0\0");
GotoXY(1,2);
tx_string(1,"--------------\0");
VS1001Init();
GotoXY(1,4);
if (init_ata(0)) tx_string(1,"-ATA OK\0");
else tx_string(1,"-ATA FAIL\0");
GotoXY(1,5);
if (Reg_Test()) tx_string(1,"-MP3 OK\0");
else tx_string(1,"-MP3 FAIL\0");
GotoXY(1,6);
tx_string(1," Press a key \0");
InitFat();
VS1001_SetVolume(50,50);
Sine_Sweep();
while(!is_char(1))asm("wdr");
rx_char(1);
DirBrowser(2);
}
void DirBrowser(unsigned long Cluster)
{
extern unsigned char text[255];
extern struct FileInfo File;
unsigned char ch;
unsigned int MaxFile;
static int FilePtr = 0;
static int Page = 0;
static int FilePtrSave;
ClrScr();
GotoXY(1,1);
tx_string(1,"-- Dir List --\0");
FilePtr = Page * 5;
MaxFile = GetDir(Cluster,FilePtr,999,1,0);
GotoXY(2,2);
GetDir(2,FilePtr,5,1,1);
FilePtr = FilePtrSave;
GotoXY(1,(FilePtr% 5)+2);
while(1)
{
while(!is_char(1))asm("wdr");
ch = rx_char(1);
if (ch == '2')
{
FilePtr++;
if (FilePtr >= MaxFile) FilePtr--;
if ((FilePtr / 5) != Page)
{
Page = FilePtr / 5;
ClrScr();
GotoXY(1,1);
tx_string(1,"-- Dir List --\0");
GotoXY(2,2);
GetDir(Cluster,FilePtr,5,1,1);
}
GotoXY(1,(FilePtr% 5)+2);
}
if (ch == '8')
{
FilePtr--;
if (FilePtr < 0) FilePtr = 0;
if ((FilePtr / 5) != Page)
{
FilePtr -= (5 - 1);
Page = FilePtr / 5;
ClrScr();
GotoXY(1,1);
tx_string(1,"-- Dir List --\0");
GotoXY(2,2);
GetDir(Cluster,FilePtr,5,1,1);
FilePtr += (5 - 1);
}
GotoXY(1,(FilePtr% 5)+2);
}
if (ch == '6')
{
FilePtrSave = FilePtr;
GetDir(Cluster,FilePtr,1,1,1);
FileBrowser(File.FirstClust);
}
}
}
void FileBrowser(unsigned long Cluster)
{
extern unsigned char text[255];
extern struct FileInfo File;
unsigned char ch;
unsigned int MaxFile;
int FilePtr,Page;
ClrScr();
GotoXY(1,1);
tx_string(1,"--Song List --\0");
FilePtr = 0;
Page = 0;
MaxFile = GetDir(Cluster,FilePtr,999,0,0);
GotoXY(2,2);
GetDir(Cluster,FilePtr,5,0,1);
GotoXY(2,2);
while(1)
{
while(!is_char(1))asm("wdr");
ch = rx_char(1);
if (ch == '2')
{
FilePtr++;
if (FilePtr >= MaxFile) FilePtr--;
if ((FilePtr / 5) != Page)
{
Page = FilePtr / 5;
ClrScr();
GotoXY(1,1);
tx_string(1,"--Song List --\0");
GotoXY(2,2);
GetDir(Cluster,FilePtr,5,0,1);
}
GotoXY(1,(FilePtr% 5)+2);
}
if (ch == '8')
{
FilePtr--;
if (FilePtr < 0) FilePtr = 0;
if ((FilePtr / 5) != Page)
{
FilePtr -= (5 - 1);
Page = FilePtr / 5;
ClrScr();
GotoXY(1,1);
tx_string(1,"--Song List --\0");
GotoXY(2,2);
GetDir(Cluster,FilePtr,5,0,1);
FilePtr += (5 - 1);
}
GotoXY(1,(FilePtr% 5)+2);
}
if (ch == '6')
{
FilePtr--;
do
{
FilePtr++;
if (FilePtr > MaxFile) break;
ClrScr();
GotoXY(1,1);
GetDir(Cluster,FilePtr,1,0,0);
tx_string(1,"-Song Playing-\0");
GotoXY(1,3);
sprintf(&text[0],"%s\0",&File.Name[0]);
tx_string(1,&text[0]);
GotoXY(2,5);
sprintf(&text[0],"Percent = 0 \0");
tx_string(1,&text[0]);
}
while(PlayMP3());
ClrScr();
GotoXY(1,1);
tx_string(1,"--Song List --\0");
GotoXY(2,2);
GetDir(Cluster,FilePtr,5,0,1);
GotoXY(1,(FilePtr% 5)+2);
}
if (ch == '4')
{
DirBrowser(2);
}
}
}
int PlayMP3(void)
{
unsigned char buffer[512];
unsigned long LBA,i,j,NextCluster,TimeOut,ByteSend,Percent;
extern struct FileInfo File;
extern struct BootRecord Boot;
VS1001Init();
ByteSend = 0;
NextCluster = File.FirstClust;
while (1)
{
LBA = Clust2LBA(NextCluster);
for (i=0;i<Boot.SecPerClust;i++)
{
ata_read_sector_byte(0, LBA+i, 0, 512, (unsigned char*)&buffer);
for (j=0;j<Boot.BytesPerSec;j=j+32)
{
TimeOut = 0;
while (!((*(volatile unsigned char *)0x36) & 0x80))
{
asm("wdr");
if (DoTask((int)Percent) == 1) return 0;
TimeOut++;
if (TimeOut > 100000) return 0;
}
VS1001_Stream(&buffer[j],32);
}
}
ByteSend += (Boot.BytesPerSec * Boot.SecPerClust);
Percent = (ByteSend / (File.FileSize / 100));
NextCluster = GetNextCluster(NextCluster);
if (NextCluster > 0x0ffffff6) break;
}
return 1;
}
int DoTask(int Percent)
{
extern unsigned char text[255];
static int LastPercent;
if ((Percent != LastPercent) && (Percent < 100))
{
LastPercent = Percent;
GotoXY(2,5);
sprintf(&text[0],"Percent = %d\0",Percent);
tx_string(1,&text[0]);
}
if (is_char(1))
{
if (rx_char(1) == '5') return 1;
}
return 0;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -