From 438c940ed7328ea97db1753326fef51b203e9370 Mon Sep 17 00:00:00 2001 From: Mariano Alvira Date: Wed, 15 Apr 2009 17:32:00 -0400 Subject: [PATCH] nvm read works now. --- include/nvm.h | 4 ++-- src/start.S | 3 ++- tests/nvm-read.c | 21 +++++++++++++++++++-- 3 files changed, 23 insertions(+), 5 deletions(-) diff --git a/include/nvm.h b/include/nvm.h index 3b30575b1..edae0030d 100644 --- a/include/nvm.h +++ b/include/nvm.h @@ -35,6 +35,6 @@ typedef enum /* ROM code seems to be THUMB */ /* need to be in a THUMB block before calling them */ volatile nvmErr_t (*nvm_detect)(nvmInterface_t nvmInterface,nvmType_t* pNvmType) = 0x00006cb9; -volatile nvmErr_t (*nvm_read)(nvmInterface_t nvmInterface , nvmType_t nvmType , void *pDest, uint32_t address, uint32_t numBytes); - +volatile nvmErr_t (*nvm_read)(nvmInterface_t nvmInterface , nvmType_t nvmType , void *pDest, uint32_t address, uint32_t numBytes) = 0x00006d69; +volatile void(*nvm_setsvar)(uint32_t zero_for_awesome) = 0x00007085; #endif //NVM_H diff --git a/src/start.S b/src/start.S index 54d36f4d6..ec6f93444 100644 --- a/src/start.S +++ b/src/start.S @@ -49,6 +49,7 @@ _start: b _begin /* these vectors are used for rom patching */ .org 0x20 +.code 16 _RPTV_0_START: bx lr /* do nothing */ @@ -68,7 +69,7 @@ _RPTV_3_START: ROM_var_start: .word 0 .org 0x7ff ROM_var_end: .word 0 - +.code 32 .align _begin: bl _rom_data_init+.-base diff --git a/tests/nvm-read.c b/tests/nvm-read.c index b06829c42..75d2a6238 100644 --- a/tests/nvm-read.c +++ b/tests/nvm-read.c @@ -29,10 +29,13 @@ void put_hex32(uint32_t x); const uint8_t hex[16]={'0','1','2','3','4','5','6','7', '8','9','a','b','c','d','e','f'}; +#define NBYTES 128 __attribute__ ((section ("startup"))) void main(void) { - uint32_t type=0xdeadbeef; + nvmType_t type=0; nvmErr_t err; + uint32_t buf[NBYTES/4]; + uint32_t i; *(volatile uint32_t *)GPIO_PAD_DIR0 = 0x00000100; @@ -62,13 +65,27 @@ void main(void) { puts("Detecting internal nvm\n\r"); err = nvm_detect(gNvmInternalInterface_c, &type); - + puts("nvm_detect returned: 0x"); put_hex(err); puts(" type is: 0x"); put_hex32(type); puts("\n\r"); + nvm_setsvar(0); + + err = nvm_read(gNvmInternalInterface_c, type, (uint8_t *)buf, 0x1F000, NBYTES); + puts("nvm_read returned: 0x"); + put_hex(err); + puts("\n\r"); + + for(i=0; i