📄 procyon.c
字号:
}
// write sector/buffer to disk
//ataWriteSectorsLBAforCHS(0, LBAsector+j, 1, buffer);
ataWriteSectorsLBA(0, LBAsector+j, 1, buffer);
}
uartPrintStr("\r\nDone Loading...\r\n");
timerPause(4000);
uartPrintStr("Flushing Receive Buffer\r\n");
uartFlushReceiveBuffer();
}
void mainPlayFromDisk(void)
{
unsigned int i,j;
u08 burstSectors;
u08* bufferptr;
u32 LBAsector;
i = 0;
j = 0;
// print intro message
uartPrintStr("Play MP3 data from disk\r\n");
uartPrintStr("Initializing play manager\r\n");
// initialize the play manager and buffers
playmgrInit();
// initialize LBA sector
//LBAsector = 0x00010000;
LBAsector = 0x0000160F;
//LBAsector = 0x00001890;
// go to play
lcdGotoXY(0,1); lcdPrintStr("Play: ");
lcdGotoXY(0,2); lcdPrintStr("Prebuffering... ");
// get the play buffer full
// read sectors from disk into play buffer
uartPrintStr("Read sectors from disk into buffer\r\n");
/* for(j=0; j<PlayBuffer.size>>9; j++)
{
//ataReadSectorsLBAforCHS(0, LBAsector, 1, PlayBuffer.dataptr );
ataReadSectorsLBA(0, LBAsector+j, 1, (PlayBuffer.dataptr+(j<<9)) );
//timerPause(400);
}
*/
// read all sectors at once
j = PlayBuffer.size>>9;
// ataReadSectorsLBAforCHS(0, LBAsector, j, PlayBuffer.dataptr );
ataReadSectorsLBA(0, LBAsector, j, PlayBuffer.dataptr );
// set data length to reflect a full buffer
PlayBuffer.datalength = PlayBuffer.size;
ataPrintSector( PlayBuffer.dataptr );
burstSectors = 1;
uartPrintStr("Start Play...\r\n");
playmgrStart();
// while(j<0x60)
while(1)
{
// print status
lcdGotoXY(0,2); lcdPrintStr("P="); lcdPrintfu32(PlayBuffer.dataindex);
lcdGotoXY(10,2); lcdPrintStr(" Len="); lcdPrintfu16(PlayBuffer.datalength);
lcdGotoXY(0,3); lcdPrintStr("S="); lcdPrintfu32(j);
if(PlayBuffer.datalength < (PlayBuffer.size-((burstSectors+1)*512)))
{
// buffer has one sector or more empty
// time to fill up
// get a pointer to the end of the buffer
// ***should only be on sector boundaries
bufferptr = PlayBuffer.dataptr + ((PlayBuffer.dataindex + PlayBuffer.datalength) & (PlayBuffer.size-1));
// load in the new sectors
for(i=0; i<burstSectors; i++)
{
ataReadSectorsLBA(0, LBAsector+j+i, 1, bufferptr+(i<<9));
}
// add sectors to the buffer length
PlayBuffer.datalength += (burstSectors<<9);
// increment LBA position
j+=burstSectors;
}
}
playmgrStop();
uartPrintStr("Done!\r\n");
}
void mainPlayFromDisk2(void)
{
unsigned int i,j,k;
u08 burstSectors;
u08* bufferptr;
u32 LBAsector;
i = 0;
j = 0;
// print intro message
uartPrintStr("Play MP3 data from disk\r\n");
uartPrintStr("Initializing play manager\r\n");
// initialize the play manager and buffers
playmgrInit();
// initialize LBA sector
//LBAsector = 0x00100000;
//LBAsector = 0x0000160F;
//LBAsector = 0x00001890;
//LBAsector = 0x00000112;
//LBAsector = 0x000002F0;
LBAsector = 0x00000AA0;
// go to play
lcdGotoXY(0,1); lcdPrintStr("Play: ");
lcdGotoXY(0,2); lcdPrintStr("Prebuffering... ");
// get the play buffer full
// read sectors from disk into play buffer
uartPrintStr("Read sectors from disk into buffer\r\n");
for(j=0; j<PlayBuffer.size>>9; j++)
{
ataReadSectorsLBAforCHS(0, LBAsector+j, 1, (PlayBuffer.dataptr+(j<<9)) );
//ataReadSectorsLBA(0, LBAsector+j, 1, (PlayBuffer.dataptr+(j<<9)) );
//timerPause(400);
}
// read all sectors at once
// j = PlayBuffer.size>>9;
// ataReadSectorsLBAforCHS(0, LBAsector, j, PlayBuffer.dataptr );
// ataReadSectorsLBA(0, LBAsector, j, PlayBuffer.dataptr );
// set data length to reflect a full buffer
PlayBuffer.datalength = PlayBuffer.size;
// ataPrintSector( PlayBuffer.dataptr );
burstSectors = 1;
k = (PlayBuffer.size>>9)-1;
uartPrintStr("Start Play...\r\n");
playmgrStart();
// while(j<0x60)
while(1)
{
// print status
lcdGotoXY(0,2); lcdPrintStr("P="); lcdPrintfu32(PlayBuffer.dataindex);
lcdGotoXY(10,2); lcdPrintStr(" Len="); lcdPrintfu16(PlayBuffer.datalength);
lcdGotoXY(0,3); lcdPrintStr("S="); lcdPrintfu32(j);
if(PlayBuffer.datalength < (PlayBuffer.size-((burstSectors)*512)))
{
// buffer has one sector or more empty
// time to fill up
// get a pointer to the end of the buffer
// ***should only be on sector boundaries
//bufferptr = PlayBuffer.dataptr + ((PlayBuffer.dataindex + PlayBuffer.datalength) & (PlayBuffer.size-1));
// load in the new sectors
for(i=0; i<burstSectors; i++)
{
//ataReadSectorsLBA(0, LBAsector+j+i, 1, PlayBuffer.dataptr+((j & k)<<9));
ataReadSectorsLBAforCHS(0, LBAsector+j+i, 1, PlayBuffer.dataptr+((j & k)<<9));
}
// add sectors to the buffer length
PlayBuffer.datalength += (burstSectors<<9);
// increment LBA position
j+=burstSectors;
}
}
playmgrStop();
uartPrintStr("Done!\r\n");
}
void mainDumpFromDisk(void)
{
unsigned int i,j;
unsigned char *buffer;
unsigned char s;
u32 LBAsector;
u32 bytesSent;
i = 0;
j = 0;
// print intro message
uartPrintStr("Dump MP3 data from disk via serial port\r\n");
// setup our local sector buffer
buffer = (unsigned char*) SECTOR_BUFFER_ADDR;
bytesSent = 0;
uartPrintStr("Press key when ready for MP3 data...\r\n");
while(!uartReceiveByte(&s));
lcdGotoXY(0,1); lcdPrintStr("Sending... ");
// initialize LBA sector
LBAsector = 0x0000160F;
// fill up 0x80 sectors
for(j=0; j<0x80; j++)
{
// fill up a sector buffer
//cli();
ataReadSectorsLBA(0, LBAsector+j, 1, buffer);
//sei();
// dump to serial port
for(i=0; i<0x200; i++)
{
// send byte to serial port
uartSendByte(buffer[i]);
// do some stats
bytesSent++;
// print status
lcdGotoXY(0,2); lcdPrintStr("B="); lcdPrintfu32(bytesSent);
lcdGotoXY(0,3); lcdPrintStr("S="); lcdPrintfu32(j);
}
}
uartPrintStr("\r\nDone Sending...\r\n");
timerPause(4000);
uartPrintStr("Flushing Receive Buffer\r\n");
uartFlushReceiveBuffer();
}
void mainSTA013test2(void)
{
}
void mainHDItest(void)
{
unsigned int i;
unsigned int j;
unsigned char run;
unsigned char s,r;
unsigned char head, sector;
unsigned int track;
unsigned long LBAsector;
unsigned char* buffer = (unsigned char*) SECTOR_BUFFER_ADDR;
i = 0;
j = 0;
s = 0;
r = 0;
head = 1;
track = 0x10;
sector = 1;
LBAsector = 1;
uartPrintStr("\r\n\nWelcome to Hard Disk Test.\r\n");
uartPrintStr("Press ""?"" for help.\r\n");
run = TRUE;
while(run)
{
// print prompt & current CHS position
uartPrintStr("\r\nHDtest");
uartPrintStr(" H="); uartPrintfu08(head);
uartPrintStr(" T="); uartPrintfu16(track);
uartPrintStr(" S="); uartPrintfu08(sector);
uartPrintStr(" LBA="); uartPrintfu32(LBAsector);
uartPrintStr(">");
while(!uartReceiveByte(&s));
uartPrintChar(s);
uartPrintStr("\r\n\n");
switch(s)
{
case '1': head--; break;
case '2': head++; break;
case '3': track--; break;
case '4': track++; break;
case '5': sector--; break;
case '6': sector++; break;
case '7': LBAsector--; break;
case '8': LBAsector++; break;
case '9': LBAsector-=0x100; break;
case '0': LBAsector+=0x100; break;
case 'r':
// read current sector to current buffer
uartPrintStr("Reading H="); uartPrintfu08(head);
uartPrintStr(" T="); uartPrintfu16(track);
uartPrintStr(" S="); uartPrintfu08(sector);
uartPrintStr(" into buffer...\r\n");
ataReadSectors(0, head, track, sector, 1, buffer);
break;
case 'w':
// write current buffer to current sector
uartPrintStr("Writing H="); uartPrintfu08(head);
uartPrintStr(" T="); uartPrintfu16(track);
uartPrintStr(" S="); uartPrintfu08(sector);
uartPrintStr(" from buffer...\r\n");
ataWriteSectors(0, head, track, sector, 1, buffer);
break;
case 'z':
// read current sector to current buffer using LBA
uartPrintStr("Reading LBA="); uartPrintfu32(LBAsector);
uartPrintStr(" into buffer...\r\n");
ataReadSectorsLBA(0, LBAsector, 1, buffer);
break;
case 'x':
// write current buffer to current sector using LBA
uartPrintStr("Writing LBA="); uartPrintfu32(LBAsector);
uartPrintStr(" from buffer...\r\n");
ataWriteSectorsLBA(0, LBAsector, 1, buffer);
break;
case 'c':
// read current sector to current buffer using LBA
uartPrintStr("Reading LBA for CHS="); uartPrintfu32(LBAsector);
uartPrintStr(" into buffer...\r\n");
ataReadSectorsLBAforCHS(0, LBAsector, 1, buffer);
break;
case 'v':
// write current buffer to current sector using LBA
uartPrintStr("Writing LBA for CHS="); uartPrintfu32(LBAsector);
uartPrintStr(" from buffer...\r\n");
ataWriteSectorsLBAforCHS(0, LBAsector, 1, buffer);
break;
case 's':
// print ata registers
uartPrintStr("ATA registers:\r\n");
ataShowRegisters(0);
break;
case 'k':
// test reading sectors quickly
uartPrintStr("Test reading 16MB from hard disk (at current sector):\r\n");
for(i=0; i<0x8000; i++)
{
ataReadSectors(0, head, track, sector, 1, buffer);
}
uartPrintStr("Done!\r\n");
break;
case 'l':
// test writing sectors quickly
uartPrintStr("Test writing 16MB from hard disk (at current sector):\r\n");
for(i=0; i<0x8000; i++)
{
ataWriteSectors(0, head, track, sector, 1, buffer);
}
uartPrintStr("Done!\r\n");
break;
case 'n':
// do read from ATA_REG_DATA low and high for ~30 seconds
uartPrintStr("Test reading from ATA_REG_DATA L/H:\r\n");
for(j=0; j<0x0030; j++)
{
for(i=0; i<0x8000; i++)
{
r = *((volatile unsigned char*) ATA_REG_BASE + ATA_REG_DATAL);
r = *((volatile unsigned char*) ATA_REG_BASE + ATA_REG_DATAH);
}
uartPrintStr(".");
}
uartPrintStr("Done!\r\n");
break;
case 'm':
// do write to ATA_REG_DATA low and high for ~30 seconds
uartPrintStr("Test writing to ATA_REG_DATA H/L:\r\n");
for(j=0; j<0x0030; j++)
{
for(i=0; i<0x8000; i++)
{
*((volatile unsigned char*) ATA_REG_BASE + ATA_REG_DATAH) = r;
*((volatile unsigned char*) ATA_REG_BASE + ATA_REG_DATAL) = r;
}
uartPrintStr(".");
}
uartPrintStr("Done!\r\n");
break;
case 'p':
// print sector buffer
ataPrintSector(buffer);
break;
case 'i':
uartPrintStr("Reading drive identity into buffer...");
// Issue identify command
ataWriteByte(ATA_REG_CMDSTATUS1, 0xEC);
// wait for drive to request data transfer
ataStatusWait(ATA_SR_DRQ, ATA_SR_DRQ);
timerPause(200);
// read in the data
ataReadDataBuffer(buffer, 512);
break;
case '?':
uartPrintStr("Commands:\r\n");
uartPrintStr("(r)ead/(w)rite sector, (k/l) read/write 16MB, (n/m) read/write reg\r\n");
uartPrintStr("(z) LBA read, (x) LBA write, (c) LBA readCHS, (v) LBA writeCHS\r\n");
uartPrintStr("(p)rint buffer, (i)dentify drive, (s)how ATA registers\r\n");
uartPrintStr("(1/2) head-/+, (3/4) track-/+, (5/6) sector-/+, (7/8) LBA-/+, (9,0) LBA -/+ 0x100\r\n");
uartPrintStr("(?) for help, (e)xit\r\n");
break;
case 'e':
uartPrintStr("Exiting Hard Disk Test...\r\n");
run = FALSE;
break;
default:
uartPrintStr("Unknown command\r\n");
break;
}
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -