projects
/
my-code
/
arm.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
Makefile: fixed; fwbc: mem, bl init; fwflash: 1 bit shift in addresses
[my-code/arm.git]
/
betty
/
lpcload.c
diff --git
a/betty/lpcload.c
b/betty/lpcload.c
index
0d2f9c8
..
80af804
100644
(file)
--- a/
betty/lpcload.c
+++ b/
betty/lpcload.c
@@
-112,11
+112,15
@@
int open_serial_device(t_lpc *lpc) {
//term.c_iflag&=~(IXON|IXOFF|IXANY|INLCR|ICRNL);
term.c_iflag&=~(INLCR|ICRNL|IXANY);
term.c_iflag|=(IXON|IXOFF);
//term.c_iflag&=~(IXON|IXOFF|IXANY|INLCR|ICRNL);
term.c_iflag&=~(INLCR|ICRNL|IXANY);
term.c_iflag|=(IXON|IXOFF);
+
+ // output options
+
+ term.c_oflag=0;
// more control options -> timeout / flow control
term.c_cc[VMIN]=0;
// more control options -> timeout / flow control
term.c_cc[VMIN]=0;
- term.c_cc[VTIME]=
10; // 1
second timeout
+ term.c_cc[VTIME]=
40; // 4
second timeout
term.c_cc[VSTART]=0x11;
term.c_cc[VSTOP]=0x13;
term.c_cc[VSTART]=0x11;
term.c_cc[VSTOP]=0x13;
@@
-471,12
+475,15
@@
int firmware_to_ram(t_lpc *lpc) {
}
/* act according to type */
switch(type) {
}
/* act according to type */
switch(type) {
- case 0x03:
-
/* get cs and ip */
-
break;
+
//
case 0x03:
+
//
/* get cs and ip */
+
//
break;
case 0x00:
write_to_ram(lpc,buf,addr,len);
break;
case 0x00:
write_to_ram(lpc,buf,addr,len);
break;
+ case 0x01:
+ write_to_ram(lpc,buf,addr,len);
+ break;
default:
printf("fw to ram: unknown type %02x\n",type);
return -1;
default:
printf("fw to ram: unknown type %02x\n",type);
return -1;
@@
-490,6
+497,8
@@
int main(int argc,char **argv) {
t_lpc lpc;
int i;
t_lpc lpc;
int i;
+ u8 buf[BUFSIZE];
+ int ret;
/*
* initial ...
/*
* initial ...
@@
-533,15
+542,21
@@
int main(int argc,char **argv) {
if(open_serial_device(&lpc)<0)
goto end;
if(open_serial_device(&lpc)<0)
goto end;
- /* open firmware file */
- if(open_firmware(&lpc)<0)
- goto end;
-
/* boot loader init */
printf("boot loader init ...\n");
if(bl_init(&lpc)<0)
return -1;
/* boot loader init */
printf("boot loader init ...\n");
if(bl_init(&lpc)<0)
return -1;
+ /* quit if there is no hex file to process */
+ if(!(lpc.info&FIRMWARE)) {
+ printf("no firmware -> aborting\n");
+ goto end;
+ }
+
+ /* open firmware file */
+ if(open_firmware(&lpc)<0)
+ goto end;
+
/* parse intel hex file and write to ram */
printf("write firmware to ram ...\n");
firmware_to_ram(&lpc);
/* parse intel hex file and write to ram */
printf("write firmware to ram ...\n");
firmware_to_ram(&lpc);
@@
-552,9
+567,31
@@
int main(int argc,char **argv) {
/* go! */
printf("go ...\n");
/* go! */
printf("go ...\n");
- go(&lpc);
+ ret=go(&lpc);
+
+ /* tell the user that the error might be due to the jump */
+ printf("\n\n");
+ if(ret<0)
+ printf("the above error might be due to the jump!\n\n");
+
+ /* query user for serial port listening */
+ printf("continue listening on serial port? (ctrl+c to quit) [y|n]: ");
+ buf[0]=getchar();
printf("\n");
printf("\n");
+ if(buf[0]!='y')
+ goto end;
+
+ /* continue lsitening on serial port */
+ ret=1;
+ while(ret) {
+ ret=read(lpc.sfd,buf,BUFSIZE);
+ printf("\rread %d bytes: ",ret);
+ for(i=0;i<ret;i++)
+ printf("%02x ",buf[i]);
+ printf("\n");
+ }
+
end:
close(lpc.sfd);
close(lpc.fwfd);
end:
close(lpc.sfd);
close(lpc.fwfd);