From 1a11ab00d898c4484bc0f518a1d53b1f4cbf5fb4 Mon Sep 17 00:00:00 2001 From: Clyne Sullivan Date: Wed, 18 Apr 2018 23:17:25 -0400 Subject: SD cardgit status FAT32git status Beautiful! --- src/main.c | 43 +++++++++++++++++++++++++++++++++++-------- 1 file changed, 35 insertions(+), 8 deletions(-) (limited to 'src/main.c') diff --git a/src/main.c b/src/main.c index a86db6a..4380eae 100644 --- a/src/main.c +++ b/src/main.c @@ -21,6 +21,7 @@ #include #include #include +#include #include #include #include @@ -30,6 +31,7 @@ #include #include #include +#include #include #include #include @@ -60,7 +62,7 @@ int main(void) keypad_init(); flash_init(); - gpio_mode(GPIOA, 5, OUTPUT); + //gpio_mode(GPIOA, 5, OUTPUT); // taken by sd // enable FPU SCB->CPACR |= (0xF << 20); @@ -71,9 +73,25 @@ int main(void) while (1); } +void sleep(void) +{ + dsp_sleep(); + *((uint32_t *)0xE000ED10) |= 4; // SLEEPDEEP + PWR->CR1 |= 2; + asm("wfi"); +} + +void wakeup(void) +{ + clock_init(); + dsp_wakeup(); +} + void kmain(void) { dsp_init(); + sd_init(); + fat_find(); dsp_cursoron(); keypad_start(); @@ -81,30 +99,37 @@ void kmain(void) task_start(task_status, 512); while (1) { - gpio_dout(GPIOA, 5, 1); - delay(250); - gpio_dout(GPIOA, 5, 0); - delay(250); + extern uint32_t sleep_pending; + if (sleep_pending != 0) { + sleep(); + while (sleep_pending) + delay(1); + } + //gpio_dout(GPIOA, 5, 1); + //delay(250); + //gpio_dout(GPIOA, 5, 0); + delay(100); } } instance *load_program(const char *name) { // load file - char *s = initrd_readfile(name); - if (s == 0) { + file_t *file = fat_findfile(name); + if (file == 0) { dsp_puts("can't find "); dsp_puts(name); goto fail; } + char *s = fat_readfile(file); instance *it = inewinstance(); script_loadlib(it); // read in, parse into script code char *linebuf = (char *)malloc(120); uint32_t i = 0, prev = 0, lc; - uint32_t size = initrd_filesize(name); + uint32_t size = file->size; int ret = 0; while (i < size) { for (; s[i] != '\n' && s[i] != '\0'; i++); @@ -121,6 +146,8 @@ instance *load_program(const char *name) prev = ++i; } free(linebuf); + free(s); + free(file); return it; fail: while (1); -- cgit v1.2.3