diff --git a/cpu/cc430/flashrom.c b/cpu/cc430/flashrom.c new file mode 100644 index 0000000000..1314b4a170 --- /dev/null +++ b/cpu/cc430/flashrom.c @@ -0,0 +1,41 @@ +#include +#include +#include +#include + +static uint8_t prepare(void); +static void finish(uint8_t istate); +static inline void busy_wait(void); + +/*---------------------------------------------------------------------------*/ +uint8_t flashrom_erase(uint8_t *addr) +{ + // TODO implement this function + return 0; +} +/*---------------------------------------------------------------------------*/ +void flashrom_write(uint8_t *dst, uint8_t *src, size_t size) +{ + // TODO implement this function +} + +/*---------------------------------------------------------------------------*/ +static uint8_t prepare(void) +{ + // TODO implement this function + + return 0; +} +/*---------------------------------------------------------------------------*/ +void finish(uint8_t istate) +{ + // TODO implement this function +} +/*---------------------------------------------------------------------------*/ +static inline void busy_wait(void) +{ + /* Wait for BUSY = 0, not needed unless run from RAM */ + while (FCTL3 & 0x0001) { + nop(); + } +} diff --git a/cpu/msp430-common/flashrom.c b/cpu/msp430-common/flashrom.c deleted file mode 100644 index 440c6efa30..0000000000 --- a/cpu/msp430-common/flashrom.c +++ /dev/null @@ -1,91 +0,0 @@ -#include -#include - -#include "board.h" -#include - -#include "irq.h" - -uint8_t ie1, ie2; - -static uint8_t prepare(void); -static void finish(uint8_t istate); -static inline void busy_wait(void); - -/*---------------------------------------------------------------------------*/ -uint8_t flashrom_erase(uint8_t *addr) -{ - uint8_t istate = prepare(); - - FCTL3 = FWKEY; /* Lock = 0 */ - busy_wait(); - FCTL1 = FWKEY | ERASE; - *addr = 0; /* erase Flash segment */ - busy_wait(); - FCTL1 = FWKEY; /* ERASE = 0 */ - FCTL3 = FWKEY | LOCK; - finish(istate); - return 1; -} - -void flashrom_write(uint8_t *dst, uint8_t *src, size_t size) -{ - unsigned int i; - FCTL3 = FWKEY; /* Lock = 0 */ - busy_wait(); - - for (i = size; i > 0; i--) { - FCTL1 = FWKEY | WRT; - *dst = *src; /* program Flash word */ - - while (!(FCTL3 & WAIT)) { - nop(); - } - } - - busy_wait(); - FCTL1 = FWKEY; /* WRT = 0 */ - FCTL3 = FWKEY | LOCK; /* Lock = 1 */ -} - -/*---------------------------------------------------------------------------*/ -static uint8_t prepare(void) -{ - uint8_t istate; - - /* Disable all interrupts. */ - - /* Clear interrupt flag1. */ - IFG1 = 0; - - /* DCO(SMCLK) is 2,4576MHz, /6 = 409600 Hz - select SMCLK for flash timing, divider 4+1 */ - FCTL2 = FWKEY | FSSEL_3 | FN2 | FN0; - - /* disable all interrupts to protect CPU - during programming from system crash */ - istate = disableIRQ(); - - /* disable all NMI-Interrupt sources */ - ie1 = IE1; - ie2 = IE2; - IE1 = 0x00; - IE2 = 0x00; - return istate; -} -/*---------------------------------------------------------------------------*/ -void finish(uint8_t istate) -{ - /* Enable interrupts. */ - IE1 = ie1; - IE2 = ie2; - restoreIRQ(istate); -} - -static inline void busy_wait(void) -{ - /* Wait for BUSY = 0, not needed unless run from RAM */ - while (FCTL3 & 0x0001) { - nop(); - } -}