X-Git-Url: http://wien.tomnetworks.com/gitweb/?a=blobdiff_plain;f=pkernel%2Fmain.c;h=20334cda7c8d435e042866d25b564e869aa68d76;hb=9b83ed6dabe88a769c740567ebabc9679213a24c;hp=3676387a43694582dcf5e33e73b4d59a5a15f63e;hpb=53f7a41d712ea632f433699ad64900fd23d42a89;p=pyfrprog.git diff --git a/pkernel/main.c b/pkernel/main.c index 3676387..20334cd 100644 --- a/pkernel/main.c +++ b/pkernel/main.c @@ -1,15 +1,12 @@ #include "mb91465k.h" #include "flash.h" -#pragma section CODE=IRAM,attr=CODE - #define BUFSIZE 0x20 #define cleardata() memset(data,0,BUFSIZE) static void increaseled(void) { PDR14 = ~(((~PDR14)+1)%256); - HWWD_CL = 0; } static unsigned char recvbyte(void) @@ -20,10 +17,10 @@ static unsigned char recvbyte(void) static unsigned short recvword(void) { static unsigned char b1, b2; - static unsigned int ret; + static unsigned short ret; b1 = recvbyte(); b2 = recvbyte(); - ret = (b2 << 8) | b1; + ret = (unsigned short)(b2 << 8) | b1; return ret; } @@ -35,7 +32,7 @@ static unsigned int recvdword(void) b2 = recvbyte(); b3 = recvbyte(); b4 = recvbyte(); - ret = (b4 << 24) | (b3 << 16) | (b2 << 8) | b1; + ret = ((unsigned int) (b4 << 24)) | ((unsigned int) (b3 << 16)) | ((unsigned int) (b2 << 8)) |(unsigned int)b1; return ret; } @@ -48,7 +45,6 @@ static void halt(void) static void panic(void) { - PDR14 = 0xff; PDR14 = 0x22; halt(); } @@ -56,11 +52,9 @@ static void panic(void) void main(void) { unsigned int address; - unsigned short i, size; + unsigned short i, size, next; unsigned char running = 1, data[BUFSIZE] = {0}; - PORTEN = 0x3; /* enable I/O Ports */ - /*Enable LEDs*/ DDR14 = 0xFF; PDR14 = 0xff; @@ -72,6 +66,33 @@ void main(void) cleardata(); increaseled(); switch(recvbyte()) { + case 0x15: //chip erase + Putch4(0x45); + increaseled(); + if(FLASH_ChipErase() != 1) { + panic(); + } + Putch4(0x23); + break; + + case 0x12: //erase + Putch4(0x11); + address = recvdword(); + increaseled(); + + size = recvword(); + increaseled(); + + PDR14 = 0xff; + for(i=0; i<(size+4); i+=4) { /* erase */ + if(FLASH_SectorErase(address + i) != 1) { + panic(); + } + increaseled(); + } + Putch4(0x18); //Erasing done. + break; + case 0x13: //receive Putch4(0x37); increaseled(); @@ -82,32 +103,28 @@ void main(void) size = recvword(); increaseled(); - Putch4(0x04); //Received Metadata. PDR14 = 0xff; for(i=0; i