try to use irq for CS and use dedicated SS for hardware SPI

This commit is contained in:
David Voswinkel 2009-08-09 13:12:44 +02:00
parent 2aee210d13
commit d095867fe4
2 changed files with 6 additions and 12 deletions

View File

@ -31,6 +31,7 @@ Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA.
#include <util/delay.h> #include <util/delay.h>
//############################################################################ //############################################################################
//Routine zur Initialisierung der MMC/SD-Karte (SPI-MODE) //Routine zur Initialisierung der MMC/SD-Karte (SPI-MODE)
unsigned char mmc_init (void){ unsigned char mmc_init (void){
@ -43,12 +44,10 @@ unsigned char mmc_init (void){
MMC_Direction_REG |= (1<<SPI_Clock); //Setzen von Pin MMC_Clock auf Output MMC_Direction_REG |= (1<<SPI_Clock); //Setzen von Pin MMC_Clock auf Output
MMC_Direction_REG |= (1<<SPI_DO); //Setzen von Pin MMC_DO auf Output MMC_Direction_REG |= (1<<SPI_DO); //Setzen von Pin MMC_DO auf Output
MMC_Direction_REG |= (1<<MMC_Chip_Select);//Setzen von Pin MMC_Chip_Select auf Output MMC_Direction_REG |= (1<<MMC_Chip_Select);//Setzen von Pin MMC_Chip_Select auf Output
//MMC_Direction_REG |= (1<<SPI_SS); MMC_Direction_REG |= (1<<SPI_SS);
MMC_Write |= (1<<MMC_Chip_Select); //Setzt den Pin MMC_Chip_Select auf High Pegel MMC_Write |= (1<<MMC_Chip_Select); //Setzt den Pin MMC_Chip_Select auf High Pegel
for(a=0;a<200;a++){ for(a=0;a<200;a++){
nop();
nop();
nop(); nop();
}; //Wartet eine kurze Zeit }; //Wartet eine kurze Zeit
@ -56,19 +55,15 @@ unsigned char mmc_init (void){
//SPI Clock teilen durch 128 //SPI Clock teilen durch 128
SPCR = (1<<SPE)|(1<<MSTR)|(1<<SPR0)|(1<<SPR1); //Enable SPI, SPI in Master Mode SPCR = (1<<SPE)|(1<<MSTR)|(1<<SPR0)|(1<<SPR1); //Enable SPI, SPI in Master Mode
_delay_ms(10);
//Initialisiere MMC/SD-Karte in den SPI-Mode //Initialisiere MMC/SD-Karte in den SPI-Mode
for (a = 0;a<0x0f;a++){ //Sendet min 74+ Clocks an die MMC/SD-Karte for (a = 0;a<0x0f;a++){ //Sendet min 74+ Clocks an die MMC/SD-Karte
mmc_write_byte(0xff); mmc_write_byte(0xff);
_delay_us(100); }
}
//Sendet Commando CMD0 an MMC/SD-Karte //Sendet Commando CMD0 an MMC/SD-Karte
unsigned char CMD[] = {0x40,0x00,0x00,0x00,0x00,0x95}; unsigned char CMD[] = {0x40,0x00,0x00,0x00,0x00,0x95};
while(mmc_write_command (CMD) !=1){ while(mmc_write_command (CMD) !=1){
_delay_us(100); if (Timeout++ > 200){
if (Timeout++ > 200){
MMC_Disable(); MMC_Disable();
return(1); //Abbruch bei Commando1 (Return Code1) return(1); //Abbruch bei Commando1 (Return Code1)
} }
@ -93,7 +88,6 @@ unsigned char mmc_init (void){
return(0); return(0);
} }
//############################################################################ //############################################################################
//Sendet ein Commando an die MMC/SD-Karte //Sendet ein Commando an die MMC/SD-Karte
unsigned char mmc_write_command (unsigned char *cmd){ unsigned char mmc_write_command (unsigned char *cmd){

View File

@ -17,8 +17,8 @@ Copyright (C) 2004 Ulrich Radig
#define SPI_DI 6 //Port Pin an dem Data Output der MMC/SD-Karte angeschlossen ist #define SPI_DI 6 //Port Pin an dem Data Output der MMC/SD-Karte angeschlossen ist
#define SPI_DO 5 //Port Pin an dem Data Input der MMC/SD-Karte angeschlossen ist #define SPI_DO 5 //Port Pin an dem Data Input der MMC/SD-Karte angeschlossen ist
#define SPI_Clock 7 //Port Pin an dem die Clock der MMC/SD-Karte angeschlossen ist (clk) #define SPI_Clock 7 //Port Pin an dem die Clock der MMC/SD-Karte angeschlossen ist (clk)
#define MMC_Chip_Select 4 //Port Pin an dem Chip Select der MMC/SD-Karte angeschlossen ist #define MMC_Chip_Select 3 //Port Pin an dem Chip Select der MMC/SD-Karte angeschlossen ist
//#define SPI_SS 4 //Nicht Benutz mu<6D> aber definiert werden #define SPI_SS 4 //Nicht Benutz mu<6D> aber definiert werden
#endif #endif