aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authordave2006-07-03 11:22:28 +0000
committerdave2006-07-03 11:22:28 +0000
commit6c57026f384479d41caabe122a820ecdee1db17e (patch)
tree86a733d2db7fdf1d62084baab5f3e5d756f1827e
parent84bd297c95d6c41ea8dfd89a83a54ef1018e3530 (diff)
Make the estorm firmware image link properly, and adapt the firmware flasher to flash images that aren't 256k long.
-rw-r--r--estorm/Makefile2
-rw-r--r--estorm/boot.c6
-rw-r--r--estorm/estorm.lds4
-rw-r--r--libnxt/firmware.c16
-rw-r--r--libnxt/flash_write/Makefile12
-rw-r--r--libnxt/flash_write/flash.c4
6 files changed, 28 insertions, 16 deletions
diff --git a/estorm/Makefile b/estorm/Makefile
index 9b3c7ab..19936c9 100644
--- a/estorm/Makefile
+++ b/estorm/Makefile
@@ -9,7 +9,7 @@ TOOL_PREFIX=arm-elf-
all:
$(TOOL_PREFIX)gcc -W -Wall -O3 -mcpu=arm7tdmi -mapcs -mthumb-interwork -c -o boot.o boot.c
$(TOOL_PREFIX)as --warn -mcpu=arm7tdmi -mapcs-32 -EL -mthumb-interwork -o crt0.o crt0.s
- $(TOOL_PREFIX)ld -T estorm.lds --gc-sections crt0.o boot.o -o estorm
+ $(TOOL_PREFIX)ld -N -O3 -T estorm.lds crt0.o boot.o -o estorm
$(TOOL_PREFIX)objcopy -O binary estorm estorm.bin
$(TOOL_PREFIX)objdump --disassemble-all -b binary -m arm7tdmi estorm.bin > estorm.asm
diff --git a/estorm/boot.c b/estorm/boot.c
index b73c25e..ccd9173 100644
--- a/estorm/boot.c
+++ b/estorm/boot.c
@@ -68,10 +68,12 @@ inline void estorm_init_ticker()
/* Set the PWM channel 0 to a 0-duty-cycle period of 0x7FFF, twice
* faster than SAM-BA */
- *AT91C_PWMC_CH0_CPRDR = 0x7FFF;
+ *AT91C_PWMC_CH2_CMR = 0x8;
+ *AT91C_PWMC_CH2_CDTYR = 440;
+ *AT91C_PWMC_CH2_CPRDR = 880;
/* Activate PWM channel 0 */
- *AT91C_PWMC_ENA = 0x1;
+ *AT91C_PWMC_ENA = 0x8;
}
void estorm_boot()
diff --git a/estorm/estorm.lds b/estorm/estorm.lds
index e80f68b..54f2b14 100644
--- a/estorm/estorm.lds
+++ b/estorm/estorm.lds
@@ -3,7 +3,7 @@ SECTIONS
. = 0x00000000;
. = ALIGN(4);
start = 0x00000000;
- .bootstrap : { *(.bootstrap) }
- .text : { *(.text*) }
+ .text : { *(.bootstrap) *(.text*) }
.data : { *(.data*) }
+ .bss : { *(.bss*) }
}
diff --git a/libnxt/firmware.c b/libnxt/firmware.c
index abd810f..1c4092b 100644
--- a/libnxt/firmware.c
+++ b/libnxt/firmware.c
@@ -21,6 +21,7 @@
#include <stdio.h>
#include <errno.h>
+#include <string.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <unistd.h>
@@ -80,7 +81,7 @@ nxt_firmware_validate_fd(int fd)
if (fstat(fd, &s) < 0)
return NXT_FILE_ERROR;
- if (s.st_size != 256*1024)
+ if (s.st_size > 256*1024)
return NXT_INVALID_FIRMWARE;
return NXT_OK;
@@ -125,13 +126,20 @@ nxt_firmware_flash(nxt_t *nxt, char *fw_path)
for (i = 0; i < 1024; i++) //256*1024; i += 256)
{
char buf[256];
+ int ret;
- if (read(fd, buf, 256) != 256)
+ memset(buf, 0, 256);
+ ret = read(fd, buf, 256);
+
+ if (ret != -1)
+ NXT_ERR(nxt_flash_block(nxt, i, buf));
+
+ if (ret < 256)
{
close(fd);
- nxt_flash_finish(nxt);
+ NXT_ERR(nxt_flash_finish(nxt));
- return NXT_FILE_ERROR;
+ return ret == -1 ? NXT_FILE_ERROR : NXT_OK;
}
NXT_ERR(nxt_flash_block(nxt, i, buf));
diff --git a/libnxt/flash_write/Makefile b/libnxt/flash_write/Makefile
index efbeaef..2bc9417 100644
--- a/libnxt/flash_write/Makefile
+++ b/libnxt/flash_write/Makefile
@@ -4,12 +4,14 @@
# objdump --disassemble-all -bbinary -marm7tdmi flash.bin > flash.asm
#
+TOOL_PREFIX=arm-elf-
+
all:
- arm-linux-gcc -W -Wall -O3 -mcpu=arm7tdmi -mapcs -mthumb-interwork -c -o flash.o flash.c
- arm-linux-as --warn -mcpu=arm7tdmi -mapcs-32 -EL -mthumb-interwork -o crt0.o crt0.s
- arm-linux-ld --gc-sections crt0.o flash.o -o flash
- arm-linux-objcopy -O binary flash flash.bin
- arm-linux-objdump --disassemble-all -b binary -m arm7tdmi flash.bin > flash.asm
+ $(TOOL_PREFIX)gcc -W -Wall -O3 -mcpu=arm7tdmi -mapcs -mthumb-interwork -c -o flash.o flash.c
+ $(TOOL_PREFIX)as --warn -mcpu=arm7tdmi -mapcs-32 -EL -mthumb-interwork -o crt0.o crt0.s
+ $(TOOL_PREFIX)ld -O3 --gc-sections crt0.o flash.o -o flash
+ $(TOOL_PREFIX)objcopy -O binary flash flash.bin
+ $(TOOL_PREFIX)objdump --disassemble-all -b binary -m arm7tdmi flash.bin > flash.asm
clean:
rm -f flash.o flash.bin flash.asm
diff --git a/libnxt/flash_write/flash.c b/libnxt/flash_write/flash.c
index 6f38f8f..043b616 100644
--- a/libnxt/flash_write/flash.c
+++ b/libnxt/flash_write/flash.c
@@ -19,8 +19,8 @@
* USA
*/
-#define VINTPTR(addr) ((volatile unsigned long *)(addr))
-#define VINT(addr) ((volatile unsigned long)(*(VINTPTR(addr))))
+#define VINTPTR(addr) ((volatile unsigned int *)(addr))
+#define VINT(addr) (*(VINTPTR(addr)))
#define USER_PAGE VINTPTR(0x00202100)
#define USER_PAGE_NUM VINT(0x00202300)