?? flash.c
字號:
/*******************************************************************************
- Chip : MG24500/55
- Author : RadioPulse Inc, 2007.
- Date : 2007-07-02
- Version : VER 1.0
*******************************************************************************/
/****************************************************************
MG245X Embedded FLASH
+ Memory Size : 96KB + 1KB
+ Page Size : 512 Bytes
+ Erase Unit : 512 Bytes
+ Bank Structure
Bank0 : 0x0000 ~ 0x7FFF
Bank1 : 0x8000 ~ 0xFFFF
Bank2 : 0x8000 ~ 0xFFFF
Bank3 : Reserved as 0
Bank4 : 0x8000 ~ 0x8400
****************************************************************/
#include "INCLUDE_TOP.h"
void ZHAL_FLASH_PAGE_ERASE(UINT16 FlashWordAddr)
{
xFCN_NOWAIT = 0x00;
while(xFCN_STS0 & 0x01);
_nop_();
_nop_();
_nop_();
_nop_();
xFCN_ADR0 = FlashWordAddr & 0xFF;
xFCN_ADR1 = (FlashWordAddr>>8);
xFCN_LEN1 = 0;
xFCN_LEN0 = 1;
xFCN_CMD = 0x02; // Page Erase
_nop_();
_nop_();
_nop_();
_nop_();
while(xFCN_STS0 & 0x01);
}
// 512 Byte Addr Write
void ZHAL_FLASH_PAGE_WRITE(UINT16 CodeAddr, UINT8 *pByteBuf)
{
UINT16 i;
UINT16 len;
UINT16 dst;
UINT16 FlashWordAddr;
FlashWordAddr = CodeAddr >> 2; // FlashWordAddr = CodeAddr / 4
//
// STEP-1 : CLOCK STALL OFF
//
xFCN_NOWAIT = 0x00;
xFCN_LEN0 = 0x01;
xFCN_LEN1 = 0x00;
//
// STEP-2 : Erase Page
//
ZHAL_FLASH_PAGE_ERASE(FlashWordAddr);
//
// STEP-3 : IDLE CHECK
//
while(xFCN_STS0&0x01);
//
// STEP-4 : PAGE WRITE
//
i = 0;
dst = FlashWordAddr;
len = 512/4;
while(len)
{
xFCN_ADR0 = dst & 0xFF;
xFCN_ADR1 = (dst>>8);
xFCN_DAT3 = pByteBuf[i+3];
xFCN_DAT2 = pByteBuf[i+2];
xFCN_DAT1 = pByteBuf[i+1];
xFCN_DAT0 = pByteBuf[i+0];
xFCN_CMD = 0x01;
_nop_();
_nop_();
_nop_();
_nop_();
i += 4; /* byte addr */
dst += 1; /* word addr */
len -= 1; /* word wlen */
}
while(xFCN_STS0 & 0x01);
}
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -