From d17e1cd93384d56886be7e67cf2b31e97118d811 Mon Sep 17 00:00:00 2001 From: oharboe Date: Thu, 28 Feb 2008 08:25:46 +0000 Subject: eCos flash driver. git-svn-id: svn://svn.berlios.de/openocd/trunk@365 b42882b7-edfa-0310-969c-e2dbd0fdcd60 --- ecosflash/flash.c | 72 +++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 72 insertions(+) create mode 100644 ecosflash/flash.c (limited to 'ecosflash/flash.c') diff --git a/ecosflash/flash.c b/ecosflash/flash.c new file mode 100644 index 00000000..654273d3 --- /dev/null +++ b/ecosflash/flash.c @@ -0,0 +1,72 @@ +#include +#define _FLASH_PRIVATE_ +#include + + + +int myprintf(char *format, ...) +{ + return 0; +} + +extern char _start_bss_clear; +extern char __bss_end__; + +int init() +{ + // set up runtime environment + char *t; + for (t=&_start_bss_clear; t<&__bss_end__; t++) + { + *t=0; + } + return flash_init((_printf *)&myprintf); + +} + + +int checkFlash(void *addr, int len) +{ + // Return error for illegal addresses + if ((addrflash_info.end)) + return FLASH_ERR_INVALID; + if ((((cyg_uint8 *)addr)+len)>(cyg_uint8 *)flash_info.end) + return FLASH_ERR_INVALID; + return FLASH_ERR_OK; +} + + +int erase(void *address, int len) +{ + int retval; + void *failAddress; + + retval=checkFlash(address, len); + if (retval!=0) + return retval; + + retval=init(); + if (retval!=0) + return retval; + return flash_erase(address, len, &failAddress); +} + + + +extern char _end; + +// Data follows immediately after program, long word aligned. +int program(void *buffer, void *address, int len) +{ + int retval; + void *failAddress; + retval=checkFlash(address, len); + if (retval!=0) + return retval; + + retval=init(); + if (retval!=0) + return retval; + //int flash_program(void *_addr, void *_data, int len, void **err_addr) + return flash_program(address, buffer, len, &failAddress); +} -- cgit v1.2.3