📄 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 + -