From c3f7e0e76e47751fef436e58a6651cb60570e0b2 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Markus=20Fr=C3=B6schle?= Date: Mon, 19 Nov 2012 15:02:06 +0000 Subject: [PATCH] use shorter sd_send_bytes() routines --- BaS_gcc/include/sd_card.h | 2 ++ BaS_gcc/sources/sd_card.c | 55 +++++++++++++++++++-------------------- 2 files changed, 29 insertions(+), 28 deletions(-) diff --git a/BaS_gcc/include/sd_card.h b/BaS_gcc/include/sd_card.h index 2503d8a..23c6216 100644 --- a/BaS_gcc/include/sd_card.h +++ b/BaS_gcc/include/sd_card.h @@ -28,5 +28,7 @@ extern int sd_card_init(void); extern uint32_t sd_com(uint32_t data); extern void sd_card_idle(void); extern uint32_t sd_card_get_status(void); +extern uint8_t sd_send_byte(uint8_t byte); +extern uint16_t sd_send_word(uint16_t word); #endif /* _SD_CARD_H_ */ diff --git a/BaS_gcc/sources/sd_card.c b/BaS_gcc/sources/sd_card.c index 3141710..a8bb6c4 100644 --- a/BaS_gcc/sources/sd_card.c +++ b/BaS_gcc/sources/sd_card.c @@ -65,7 +65,7 @@ uint32_t sd_com(uint32_t data) * initialized previously (either by sd_com or a direct register write). * Returns a byte received from SPI (contents of the RX FIFO). */ -inline uint8_t sd_byte(uint8_t byte) +inline uint8_t sd_send_byte(uint8_t byte) { * (volatile uint8_t *) (&MCF_DSPI_DTFR + 3) = byte; @@ -75,7 +75,7 @@ inline uint8_t sd_byte(uint8_t byte) /* * as above, but word sized */ -inline uint16_t sd_word(uint16_t word) +inline uint16_t sd_send_word(uint16_t word) { * (volatile uint16_t *) (&MCF_DSPI_DTFR + 2) = word; @@ -116,9 +116,11 @@ int sd_card_init(void) wait(10000); MCF_DSPI_DMCR = DSPI_DMCR_CONF; - for (i = 0; i < 10; i++) + + ret = sd_com(MCF_DSPI_DTFR_EOQ | MCF_DSPI_DTFR_CS5 | 0x00FF); + for (i = 1; i < 10; i++) { - ret = sd_com(MCF_DSPI_DTFR_EOQ | MCF_DSPI_DTFR_CS5 | 0x00FF); + ret = sd_send_byte(0xff); } MCF_DSPI_DMCR = DSPI_DMCR_CONF | MCF_DSPI_DMCR_CSIS5; /* CS5 inactive */ @@ -130,10 +132,8 @@ int sd_card_init(void) } MCF_DSPI_DMCR = DSPI_DMCR_CONF; - for (i = 0; i < 2; i++) - { - ret = sd_com(MCF_DSPI_DTFR_EOQ | MCF_DSPI_DTFR_CS5 | 0x00FF); - } + ret = sd_com(MCF_DSPI_DTFR_EOQ | MCF_DSPI_DTFR_CS5 | 0x00FF); + ret = sd_send_byte(0xff); MCF_DSPI_DMCR = DSPI_DMCR_CONF; @@ -154,23 +154,22 @@ void sd_card_idle(void) for (i = 0; i < 100; i++) { - ret = sd_com(MCF_DSPI_DTFR_EOQ | MCF_DSPI_DTFR_CS5 | 0x00FF); - ret = sd_com(MCF_DSPI_DTFR_EOQ | MCF_DSPI_DTFR_CS5 | 0x0040); - ret = sd_com(MCF_DSPI_DTFR_EOQ | MCF_DSPI_DTFR_CS5 | 0x0000); - ret = sd_com(MCF_DSPI_DTFR_EOQ | MCF_DSPI_DTFR_CS5 | 0x0000); - ret = sd_com(MCF_DSPI_DTFR_EOQ | MCF_DSPI_DTFR_CS5 | 0x0000); - ret = sd_com(MCF_DSPI_DTFR_EOQ | MCF_DSPI_DTFR_CS5 | 0x0000); - ret = sd_com(MCF_DSPI_DTFR_EOQ | MCF_DSPI_DTFR_CS5 | 0x0095); + ret = sd_send_byte(0xff); + ret = sd_send_byte(0x40); + ret = sd_send_byte(0x00); + ret = sd_send_byte(0x00); + ret = sd_send_byte(0x00); + ret = sd_send_byte(0x00); + ret = sd_send_byte(0x95); for (j = 0; j < 6; j++) { - ret = sd_com(MCF_DSPI_DTFR_EOQ | MCF_DSPI_DTFR_CS5 | 0x00FF); - + ret = sd_send_byte(0xff); if (ret & 0x01) - { break; - } } + if (ret & 0x01) + break; } } @@ -180,13 +179,13 @@ void sd_card_read_ic(void) while (/* no suitable data received */ 1) { - ret = sd_com(MCF_DSPI_DTFR_EOQ | MCF_DSPI_DTFR_CS5 | 0x00FF); - ret = sd_com(MCF_DSPI_DTFR_EOQ | MCF_DSPI_DTFR_CS5 | 0x0048); - ret = sd_com(MCF_DSPI_DTFR_EOQ | MCF_DSPI_DTFR_CS5 | 0x0000); - ret = sd_com(MCF_DSPI_DTFR_EOQ | MCF_DSPI_DTFR_CS5 | 0x0000); - ret = sd_com(MCF_DSPI_DTFR_EOQ | MCF_DSPI_DTFR_CS5 | 0x0001); - ret = sd_com(MCF_DSPI_DTFR_EOQ | MCF_DSPI_DTFR_CS5 | 0x00aa); - ret = sd_com(MCF_DSPI_DTFR_EOQ | MCF_DSPI_DTFR_CS5 | 0x0087); + ret = sd_send_byte(0xFF); + ret = sd_send_byte(0x48); + ret = sd_send_byte(0x00); + ret = sd_send_byte(0x00); + ret = sd_send_byte(0x01); + ret = sd_send_byte(0xaa); + ret = sd_send_byte(0x87); ret = sd_card_get_status(); @@ -198,7 +197,7 @@ void sd_card_read_ic(void) { continue; } - ret = sd_com(MCF_DSPI_DTFR_EOQ | MCF_DSPI_DTFR_CS5 | 0x00ff); + ret = sd_send_byte(0xff); /* move.b d5,d0 ? */ } } @@ -209,7 +208,7 @@ uint32_t sd_card_get_status(void) do { - ret = sd_com(MCF_DSPI_DTFR_EOQ | MCF_DSPI_DTFR_CS5 | 0x00FF); + ret = sd_send_byte(0xFF); } while ((ret & 0xff) == 0xff); return ret;