X-Git-Url: http://wien.tomnetworks.com/gitweb/?p=pyfrprog.git;a=blobdiff_plain;f=pkernel%2Fmain.c;h=8e92a3a7616c8ca4e4b7c52e2aa5f98b48dd5da9;hp=a001e876ee8970803dcbe9f1f5843f4a7486583c;hb=HEAD;hpb=941d772e9fd7d430bc960475c4a10e93d97fa2e2 diff --git a/pkernel/main.c b/pkernel/main.c index a001e87..8e92a3a 100644 --- a/pkernel/main.c +++ b/pkernel/main.c @@ -1,112 +1,153 @@ #include "mb91465k.h" -#include "vectors.h" -#include "rlt.h" #include "flash.h" +#define BUFSIZE 0x20 +#define cleardata() memset(data,0,BUFSIZE) + +void increaseled(void) +{ +#define T_INIT 1100 + static unsigned int t = T_INIT; + static unsigned char l = (1<<0); + static unsigned char s = 1; + if(t == 0) { + if(l & (1<<0)) { + s = 1; + } else if (l & (1<<7)) { + s = 0; + } + l = s ? l << 1 : l >> 1; + PDR14 = ~l; + t = T_INIT; + } else { + t--; + } +} + +static unsigned char recvbyte(void) +{ + return Getch4(); +} + +static unsigned short recvword(void) +{ + static unsigned char b1, b2; + static unsigned short ret; + b1 = recvbyte(); + b2 = recvbyte(); + ret = (unsigned short)(b2 << 8) | b1; + return ret; +} + +static unsigned int recvdword(void) +{ + static unsigned char b1, b2, b3, b4; + static unsigned int ret; + b1 = recvbyte(); + b2 = recvbyte(); + b3 = recvbyte(); + b4 = recvbyte(); + ret = ((unsigned int) (b4 << 24)) | ((unsigned int) (b3 << 16)) | ((unsigned int) (b2 << 8)) |(unsigned int)b1; + return ret; +} + +static void halt(void) +{ + while(1) { + HWWD_CL = 0; + } +} + +static void panic(void) +{ + PDR14 = 0x22; + halt(); +} + void main(void) { - unsigned char error = 0; - unsigned char global_error = 0; - unsigned int i, baseaddr; - unsigned int toflash[] = {0x9b00, - 0x0d4e, - 0xcff1, - 0x1601, - 0x9b05, - 0x04c7, - 0xc106, - 0x1656, - 0xe0fb}; //len = 9 + unsigned int address; + unsigned short i, size, next; + unsigned char running = 1, data[BUFSIZE] = {0}; - /* Enable Clock Monitor */ - CSCFG_MONCKI = 1; - CMCFG = 0x0D; - - __EI(); /* enable interrupts */ - __set_il(31); /* allow all levels */ - InitIrqLevels(); /* init interrupts */ - - PORTEN = 0x3; /* enable I/O Ports */ - /* This feature is not supported by MB91V460A */ - /* For all other devices the I/O Ports must be enabled*/ - - /* Enable LEDs */ + /*Enable LEDs*/ DDR14 = 0xFF; PDR14 = 0xff; - /* Initialize Reload Timer Channel 0 */ - RLT_InitializeTimer(0, RLT_RUMMODE_RELOAD, RLT_CLOCKMODE_DIV32, RLT_TRIGGER_SOFTWARE, RLT_OUTOUTMODE_HIGHLEVEL); - RLT_SetReloadValue(0,0xfffe); - RLT_TriggerTimer(0); - RLT_EnableInterrupt(0, 1); - - /* Initialize UART4 */ + /*Initialize UART4*/ InitUart4(); - /* Output Welcome Message */ - Puts4(" \n\n"); - Puts4("\n\n********** Welcome to FUJITSU FLASH Programming Demo **********\n"); + while(running) { + cleardata(); + increaseled(); + switch(recvbyte()) { + case 0x15: //chip erase + Putch4(0x45); + PDR14 = ~(0x05); + if(FLASH_ChipErase() != 1) { + panic(); + } + Putch4(0x23); + break; + + case 0x13: //receive + Putch4(0x37); + increaseled(); + + address = recvdword(); + increaseled(); + + size = recvword(); + increaseled(); + + for(i=0; i