X-Git-Url: http://wien.tomnetworks.com/gitweb/?p=pyfrprog.git;a=blobdiff_plain;f=pkernel%2Fflash.c;h=8379d1c9d9ae5dc97c6a5670221496d717a1bf8f;hp=cd1b20c26c108ea286c2625fdc7b7da2ca0800df;hb=HEAD;hpb=010ec00f3bac42076fa4ae45ff2a9e492b959759 diff --git a/pkernel/flash.c b/pkernel/flash.c index cd1b20c..8379d1c 100644 --- a/pkernel/flash.c +++ b/pkernel/flash.c @@ -1,10 +1,3 @@ -/*****************************************************************************/ -/* THIS SAMPLE CODE IS PROVIDED AS IS AND IS SUBJECT TO ALTERATIONS. FUJITSU */ -/* MICROELECTRONICS ACCEPTS NO RESPONSIBILITY OR LIABILITY FOR ANY ERRORS OR */ -/* ELIGIBILITY FOR ANY PURPOSES. */ -/* (C) Fujitsu Microelectronics Europe GmbH */ -/*****************************************************************************/ - #include "flash.h" #include "mb91465k.h" @@ -99,103 +92,9 @@ unsigned char FLASH_ChipErase(void) return flag; } - -unsigned char FLASH_SectorErase(unsigned int secadr) -{ - unsigned char flag = 0; - volatile unsigned int value = 0; - - /* Set FLASH access mode to 16Bit Write Mode */ - FLASH_PrepareWriteHalfWordMode(); - - secadr |= 0x0003; - - /* Start FLASH Sector Erase Sequence */ - *hseq_1 = 0x00AA; - *hseq_2 = 0x0055; - *hseq_1 = 0x0080; - *hseq_1 = 0x00AA; - *hseq_2 = 0x0055; - *(unsigned short int *)secadr = 0x0030; - - /* Wait for the Auto Algorithm to start */ - while( !( *(unsigned short int *)secadr & SETIMR ) ) - { - /* Feed the Hardware Watchdog */ - HWWD_CL = 0; - - /* Check for Pending Interrupts */ - if( FLASH_CheckPendingInterrupt() ) - { - /* Wait for Sector Erase Suspend */ - FLASH_SuspendSectorErase(secadr); - - /* Set FLASH access mode to 32Bit Read Mode */ - FLASH_PrepareReadMode(); - - /* Keep on checking for pending Interrupts */ - while( FLASH_CheckPendingInterrupt() ) HWWD_CL = 0; - - /* Set FLASH access mode to 16Bit Write Mode */ - FLASH_PrepareWriteHalfWordMode(); - - /* Sector Erase Resume */ - FLASH_ResumeSectorErase(secadr); - } - } - - /* Wait for the Auto Algorithm to finish */ - while( flag == 0 ) - { - /* Feed Hardware Watchdog */ - HWWD_CL = 0; - - /* Check for Pending Interrupts */ - if( FLASH_CheckPendingInterrupt() ) - { - /* Sector Erase Suspend */ - FLASH_SuspendSectorErase(secadr); - - /* Set FLASH access mode to 32Bit Read Mode */ - FLASH_PrepareReadMode(); - - /* Keep on checking for pending Interrupts */ - while( FLASH_CheckPendingInterrupt() ) HWWD_CL = 0; - - /* Set FLASH access mode to 16Bit Write Mode */ - FLASH_PrepareWriteHalfWordMode(); - - /* Sector Erase Resume */ - FLASH_ResumeSectorErase(secadr); - } - - - /* Check the Hardware Sequence Flags */ - if( ( *(unsigned short int *)secadr /* value */ & DPOLL ) ) - { - flag = 1; - } - if( ( *(unsigned short int *)secadr /* value */ & TLOVER ) ) - { - if( ( *(unsigned short int *)secadr /* value */ & DPOLL ) ) - { - flag = 1; - } - else - { - /* Reset FLASH */ - FLASH_ReadReset(); - - flag = 2; - } - } - } - /* Set FLASH access mode to 32Bit Read Mode */ - FLASH_PrepareReadMode(); - - return flag; -} +//maybe implement this check too! +#if 0 unsigned char FLASH_SectorBlankCheck(unsigned int secaddr, unsigned int size) { unsigned int count; @@ -223,6 +122,7 @@ unsigned char FLASH_SectorBlankCheck(unsigned int secaddr, unsigned int size) return 1; } +#endif unsigned char FLASH_WriteHalfWord(unsigned int adr, unsigned short int data) { @@ -269,7 +169,6 @@ unsigned char FLASH_WriteHalfWord(unsigned int adr, unsigned short int data) return flag; } - unsigned char FLASH_ReadReset() { *hseq_1 = 0x00F0; @@ -277,35 +176,6 @@ unsigned char FLASH_ReadReset() return 1; } - -unsigned char FLASH_SuspendSectorErase(unsigned int secaddr) -{ - /* Write Sector Erase Suspend Command */ - *(volatile unsigned short int *)secaddr = 0x00B0; - - /* Wait for the FLASH macro to suspend sector erase */ - while(!(*(unsigned short int *)secaddr /* value */ & DPOLL) && (*(unsigned short int *)secaddr /* value */ & SETIMR)) - { - HWWD_CL=0; - } - - return 1; -} - -unsigned char FLASH_ResumeSectorErase(unsigned int secaddr) -{ - /* Write the Sector Erase Resume Command */ - *(volatile unsigned short int *)secaddr = 0x0030; - - /* Wait for the FLASH Macro to resume sector erase */ - while((*(unsigned short int *)secaddr /*value */ & DPOLL) && !(*(unsigned short int *)secaddr /*value */ & SETIMR)) - { - HWWD_CL=0; - } - - return 1; -} - unsigned char FLASH_CheckPendingInterrupt() { /* Poll for Pending Interrupts which are needed here */ @@ -314,3 +184,4 @@ unsigned char FLASH_CheckPendingInterrupt() /* and return 1 when an Interrupt is pending */ return 0; } +