Fixed SRAM interface. master
authorethereal <ethereal@ethv.net>
Sat, 15 Mar 2014 08:05:21 +0000 (02:05 -0600)
committerethereal <ethereal@ethv.net>
Sat, 15 Mar 2014 08:05:21 +0000 (02:05 -0600)
vm/Makefile
vm/src/mem.c
vm/src/spi.c
vm/src/startup.c

index 98db2b7..945ac74 100644 (file)
@@ -10,7 +10,7 @@ OBJCOPY=$(COMPILER_PREFIX)objcopy
 
 EXEC=vm
 
-LOCAL_CFLAGS=-std=c11 -Wextra -Wall -Wno-unused-parameter -ffreestanding -nostdlib -mthumb -mcpu=cortex-m3
+LOCAL_CFLAGS=-std=c11 -Wextra -Wall -Wno-unused-parameter -ffreestanding -nostdlib -mthumb -mcpu=cortex-m3 -O2
 LOCAL_LDFLAGS=-nostdlib -T src/sam3n.ld
 
 CFLAGS=$(LOCAL_CFLAGS)
index c0a6c48..e4f5253 100644 (file)
@@ -12,20 +12,34 @@ uint32_t sram_23lc1024_size(void __attribute__((unused)) *mem) {
 uint32_t sram_23lc1024_read_word(void *mem, uint32_t address) {
     spi_setwhich((uint32_t)mem);
 
+    // word-index the address
+    address <<= 2;
+
     uint8_t tx_buffer[8] =
-        {0x03, address >> 16, address >> 8, address, 0xff, 0xff, 0xff, 0xff};
+        {0x03,
+            (address >> 16) & 0xff,
+            (address >> 8) & 0xff,
+            (address >> 0) & 0xff,
+            0xff, 0xff, 0xff, 0xff};
     uint8_t rx_buffer[8];
 
     spi_xfer(tx_buffer, rx_buffer, 8);
 
-    return *(uint32_t *)(&rx_buffer[4]);
+    return *((uint32_t *)(&rx_buffer[4]));
 }
 
 void sram_23lc1024_write_word(void *mem, uint32_t address, uint32_t value) {
     spi_setwhich((uint32_t)mem);
 
+    // word-index the address
+    address <<= 2;
+
     uint8_t tx_buffer[8] =
-        {0x02, address >> 16, address >> 8, address, 0, 0, 0, 0};
+        {0x02,
+            (address >> 16) & 0xff,
+            (address >> 8) & 0xff,
+            address & 0xff,
+            0, 0, 0, 0};
     *(uint32_t *)(&tx_buffer[4]) = value;
     uint8_t rx_buffer[8];
 
index 627be0c..9fcfefc 100644 (file)
@@ -6,9 +6,6 @@
 #include "uart.h"
 #include "debug.h"
 
-static void spi_wait_tdre(void);
-static void spi_wait_rdrf(void);
-
 void spi_init(void) {
     /* enable perclock */
     pmc_enable_perclock(PERIPHERAL_ID_SPI);
index 5b4ac92..bc2cd9c 100644 (file)
@@ -112,27 +112,14 @@ static void startup_reset_handler(void) {
 
     DEBUG("word 0: %x", sram_int->read_word(sram_obj, 0x0));
 
-    /* turn on LED on PA3 */
-    *(uint32_t *)(0x400e0e00) = 0x8;
-    *(uint32_t *)(0x400e0e10) = 0x8;
-    *(uint32_t *)(0x400e0e30) = 0x8;
+    sram_int->write_word(sram_obj, 0x1, sram_int->read_word(sram_obj, 0x1)+1);
 
-    while(1) {}
-
-    uint8_t v = 'A';
-    while(1) {
-        //uart_send(&v, 1);
-        for(int i = 0; i < 1000000; i ++) {}
-        v ++;
-        if(v > 'Z') v = 'A';
-    }
+    DEBUG("word 1: %x", sram_int->read_word(sram_obj, 0x1));
 
-    /* make PA3 high */
+    /* turn on LED on PA3 */
     *(uint32_t *)(0x400e0e00) = 0x8;
     *(uint32_t *)(0x400e0e10) = 0x8;
     *(uint32_t *)(0x400e0e30) = 0x8;
-    for(int i = 0; i < 500000; i ++) {}
-    *(uint32_t *)(0x400e0e34) = 0x8;
 
     while(1) {}
 }