diff options
author | Evan Lojewski <github@meklort.com> | 2019-02-09 15:59:35 -0700 |
---|---|---|
committer | Evan Lojewski <github@meklort.com> | 2019-02-09 15:59:35 -0700 |
commit | c7abbe964d09a0c744da30bf26214781b9d814dc (patch) | |
tree | 6fce036739400b11daeac764be40a0810bc5d33f /libs | |
parent | cb3e5ff8d63e97f27c9d24996a032de221b0dcb1 (diff) | |
download | bcm5719-ortega-c7abbe964d09a0c744da30bf26214781b9d814dc.tar.gz bcm5719-ortega-c7abbe964d09a0c744da30bf26214781b9d814dc.zip |
Update NVM API to use words instead of bytes.
Diffstat (limited to 'libs')
-rw-r--r-- | libs/NVRam/include/NVRam.h | 4 | ||||
-rw-r--r-- | libs/NVRam/nvm.c | 25 |
2 files changed, 16 insertions, 13 deletions
diff --git a/libs/NVRam/include/NVRam.h b/libs/NVRam/include/NVRam.h index 944b806..cb822df 100644 --- a/libs/NVRam/include/NVRam.h +++ b/libs/NVRam/include/NVRam.h @@ -51,10 +51,10 @@ bool NVRam_acquireLock(void); bool NVRam_releaseLock(void); -uint32_t NVRam_readByte(uint32_t address); +uint32_t NVRam_readWord(uint32_t address); void NVRam_read(uint32_t address, uint32_t* buffer, size_t words); -void NVRam_writeByte(uint32_t address, uint32_t data); +void NVRam_writeWord(uint32_t address, uint32_t data); void NVRam_write(uint32_t address, uint32_t* buffer, size_t words); void NVRam_enable(void); diff --git a/libs/NVRam/nvm.c b/libs/NVRam/nvm.c index 07f3dd6..2e3e965 100644 --- a/libs/NVRam/nvm.c +++ b/libs/NVRam/nvm.c @@ -53,10 +53,13 @@ #define NEEDS_ERASE ATMEL_AT45DB0X1B_ERASE #ifdef CXX_SIMULATOR +#include <arpa/inet.h> #define REQ ReqSet2 #define CLR ReqClr2 #define WON ArbWon2 #else /* Firmware */ +#define ntohl(__x__) (__x__) +#define htonl(__x__) (__x__) #define REQ ReqSet0 #define CLR ReqClr0 #define WON ArbWon0 @@ -125,7 +128,7 @@ bool NVRam_releaseLock(void) return true; } -static uint32_t NVRam_readByteInternal(uint32_t address, RegNVMCommand_t cmd) +static uint32_t NVRam_readWordInternal(uint32_t address, RegNVMCommand_t cmd) { address = NVRam_translate(address); @@ -139,9 +142,9 @@ static uint32_t NVRam_readByteInternal(uint32_t address, RegNVMCommand_t cmd) NVRam_waitDone(); - return NVM.Read.r32; + return ntohl(NVM.Read.r32); } -static void NVRam_writeByteInternal(uint32_t address, uint32_t data, RegNVMCommand_t cmd) +static void NVRam_writeWordInternal(uint32_t address, uint32_t data, RegNVMCommand_t cmd) { address = NVRam_translate(address); @@ -150,28 +153,28 @@ static void NVRam_writeByteInternal(uint32_t address, uint32_t data, RegNVMComma done.bits.Done = 1; NVM.Command = done; - NVM.Write.r32 = data; + NVM.Write.r32 = htonl(data); NVM.Addr.r32 = address; NVM.Command = cmd; NVRam_waitDone(); } -uint32_t NVRam_readByte(uint32_t address) +uint32_t NVRam_readWord(uint32_t address) { RegNVMCommand_t cmd; cmd.bits.First = 1; cmd.bits.Last = 1; cmd.bits.Doit = 1; - return NVRam_readByteInternal(address, cmd); + return NVRam_readWordInternal(address, cmd); } void NVRam_read(uint32_t address, uint32_t* buffer, size_t words) { if(!words) { - // No bytes to read. + // No data to read. return; } @@ -188,7 +191,7 @@ void NVRam_read(uint32_t address, uint32_t* buffer, size_t words) cmd.bits.Last = 1; } - *buffer = NVRam_readByteInternal(address, cmd); + *buffer = NVRam_readWordInternal(address, cmd); buffer++; words--; address +=4; @@ -198,7 +201,7 @@ void NVRam_read(uint32_t address, uint32_t* buffer, size_t words) } } -void NVRam_writeByte(uint32_t address, uint32_t data) +void NVRam_writeWord(uint32_t address, uint32_t data) { RegNVMCommand_t cmd; cmd.bits.First = 1; @@ -206,7 +209,7 @@ void NVRam_writeByte(uint32_t address, uint32_t data) cmd.bits.Doit = 1; cmd.bits.Wr = 1; - NVRam_writeByteInternal(address, data, cmd); + NVRam_writeWordInternal(address, data, cmd); } void NVRam_write(uint32_t address, uint32_t* buffer, size_t words) @@ -231,7 +234,7 @@ void NVRam_write(uint32_t address, uint32_t* buffer, size_t words) cmd.bits.Last = 1; } - NVRam_writeByteInternal(address, *buffer, cmd); + NVRam_writeWordInternal(address, *buffer, cmd); buffer++; words--; address += 4; |