You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
57 lines
1019 B
57 lines
1019 B
#include "main.h"
|
|
#include "sd.h"
|
|
#include "spi.h"
|
|
|
|
static uint8_t sd_buffer[512];
|
|
static sd_context_t sdc;
|
|
|
|
void main(void)
|
|
{
|
|
int j, ok;
|
|
ok = 0;
|
|
|
|
/* Stop the watchdog timer */
|
|
WDTCTL = WDTPW | WDTHOLD;
|
|
|
|
/* Set some reasonable values for the timeouts.
|
|
*/
|
|
sdc.timeout_write = PERIPH_CLOCKRATE / 8;
|
|
sdc.timeout_read = PERIPH_CLOCKRATE / 20;
|
|
|
|
sdc.busyflag = 0;
|
|
for (j = 0; j < SD_INIT_TRY && ok != 1; j++)
|
|
{
|
|
ok = do_sd_initialize(&sdc);
|
|
}
|
|
|
|
/* Read in the first block on the SD Card */
|
|
if (ok == 1)
|
|
{
|
|
sd_read_block(&sdc, 0, sd_buffer);
|
|
sd_wait_notbusy(&sdc);
|
|
}
|
|
|
|
/* Wait forever */
|
|
while (1) { }
|
|
}
|
|
|
|
|
|
int do_sd_initialize(sd_context_t *sdc)
|
|
{
|
|
/* Initialize the SPI controller */
|
|
spi_initialize();
|
|
|
|
/* Start out with a slow SPI clock, 400kHz, as required
|
|
by the SD spec
|
|
(for MMC compatibility). */
|
|
spi_set_divisor(PERIPH_CLOCKRATE / 400000);
|
|
|
|
/* Initialization OK? */
|
|
if (sd_initialize(sdc) != 1)
|
|
return 0;
|
|
|
|
/* Set the maximum SPI clock rate possible */
|
|
spi_set_divisor(2);
|
|
|
|
return 1;
|
|
}
|
|
|