34 #include "sys/clock.h"
40 #include "dev/flash.h"
42 #include "loader/loader-arch.h"
44 void *loader_arch_codeaddr, *loader_arch_dataaddr;
47 #define FLASHADDR ((char *)0x8000)
48 #define DATAADDR ((char *)0x900)
51 #define beep(n) do { } while (0)
52 #define beep_beep(n) do { } while (0)
56 loader_arch_load(
unsigned short startaddr)
59 unsigned short codelen, datalen, sumlen;
62 unsigned short *flashptr;
63 void (* init)(
void *);
64 unsigned char tmpdata[READSIZE];
76 if(tmp !=
UIP_HTONS(LOADER_ARCH_VERSION)) {
89 for(i = 0; sumlen - i > READSIZE; i += READSIZE) {
92 for(j = 0; j < READSIZE; ++j) {
94 if(sum < tmpdata[j]) {
102 for(j = 0; j < sumlen - i; ++j) {
104 if(sum < tmpdata[j]) {
115 for(i = 0; i < (sum >> 4); ++i) {
117 for(j = 0; j < 2; ++j) {
122 for(j = 0; j < 8; ++j) {
126 for(i = 0; i < (sum & 0x0f); ++i) {
128 for(j = 0; j < 2; ++j) {
139 for(i = 0; i < 4; ++i) {
141 for(j = 0; j < 2; ++j) {
163 flashptr = (
unsigned short *)FLASHADDR;
164 for(ptr = startaddr + 2; ptr < startaddr + 2 + codelen; ptr += READSIZE) {
170 if((((
unsigned short)flashptr) & 0x01ff) == 0) {
179 for(i = 0; i < READSIZE / 2; ++i) {
180 flash_write(flashptr, ((
unsigned short *)DATAADDR)[i]);
192 eeprom_read(startaddr + 2 + codelen, (
char *)&datalen, 2);
199 eeprom_read(startaddr + 2 + codelen + 2, DATAADDR, datalen);
202 for(i = 0; i < 4; ++i) {
210 init = ((void (*)(
void *))FLASHADDR);
215 loader_arch_free(
void *code,
void *data)
void eeprom_read(eeprom_addr_t addr, unsigned char *buf, int size)
Read data from the EEPROM.
#define LEDS_RED
LED1 (Red) -> PC0.
void flash_clear(unsigned short *ptr)
Clear a 16-bit word in flash ROM.
Header file for the uIP TCP/IP stack.
#define UIP_HTONS(n)
Convert 16-bit quantity from host byte order to network byte order.
#define LEDS_YELLOW
LED2 (Yellow) -> PC1.
#define LEDS_GREEN
LED3 (Green) -> PC2.
void beep_beep(int i)
Beep for a specified time.
CCIF uint16_t uip_htons(uint16_t val)
Convert a 16-bit quantity from host byte order to network byte order.
void flash_done(void)
Function that is to be called after flashing is done.
void flash_write(unsigned short *ptr, unsigned short word)
Write a 16-bit word to flash ROM.
void clock_delay(unsigned int delay)
Obsolete delay function but we implement it here since some code still uses it.
void flash_setup(void)
Setup function to be called before any of the flash programming functions.