// Lesen einer Datei von 64MB MMC-Speicher unter FAT16
// Seriel (9600,n,8,1) bei 20MHz
//
// Michael Dworkin
// 04.12.2003
// Compiler CC5x
#include <D:\cc5\16F877.H>
#pragma config |= 0b.11.111101.11.00.10
#pragma bit CS @ PORTC.2 //Ausgang für Chip Select
uns16 AL, BytN,ByteLes,Claster,FAT,Verz,Dat; // algemeine Variablen
char AH ;
#pragma origin 100
//******************************************************************************
void InitUSART()
{
BRGH=1;
SPBRG=129; // (9600 baud @ 20MHz input clock)
SPEN = 1; // Set_Serial_Pins;
SYNC = 0; // Set_Async_Mode;
TX9 = 0; // Set_8bit_Tx;
RX9 = 0; // Set_8bit_Rx;
CREN = 1; // Enable_Rx;
TXEN = 1; // Enable_Tx;
RCIE=0; // Rx Interrupt aus
}
//**************************************************************************
void SerString(const char *str) //Ein String seriell senden
{
char ps;
ps = *str; // Pointer auf start des Strings ins ps
while(ps>0) // Pruefen ob String zu ende ist
{
str++; // Pointer auf nexte Zeihen erhoehen
if (ps== 0) break; // Pruefen ob String zu ende ist
while(!TXIF); // Pruefen ob register TXREG leher ist
TXREG =ps ; // Datenbyte senden
ps = *str; // Inhalt des ponters ins ps
}
}
//*****************************************************************************
char SPI(char d) // Ueber SPI-Schnittstelle
{ // senden
SSPBUF=d;
while (!BF); // Warten bis gesendet ist
return SSPBUF; // gleichzeitig empfangen
}
//******************************************************************************
char Command(char befF,uns16 AdrH,uns16 AdrL,char befH )
{ // Ein Befehl zum MMC senden
char a;
for (a=0;a<9;a++)
{
Carry=0;
AdrL = rl(AdrL);
AdrH = rl(AdrH);
}
SPI(0xFF);
SPI(befF);
SPI(AdrH.high8);
SPI(AdrH.low8);
SPI(AdrL.high8);
SPI(AdrL.low8);
SPI(befH);
SPI(0xFF);
return SPI(0xFF); // Response als Rueckgabewert
}
//****************************************************************************
bit MMC_Init()
{
SMP=0; // Input ist gueltig in der Mitte des Clock
CKE=0; // CKE=1; // Fordere Flanke (steigende)
CKP=1; // CKP=0; // Low ist Passiwe Zustand
SSPM0=1;
SSPEN=1; // SPI Ein
CS=1; // MMC-Disabled
char i; // Variablen
for(i=0; i < 10; i++)SPI(0xFF)