📄 amd16.c
字号:
/*************************************************************************/
/* */
/* FILE NAME VERSION */
/* */
/* Amd16.c 1.0 */
/* */
/* */
/* */
/* FUNCTIONS : AMD Flash program code */
/* */
/* DEPENDENCIES */
/* */
/* */
/*************************************************************************/
#include <stdio.h>
#include <string.h>
#include "common.h"
volatile uchar *firstAddr = (uchar *)(BASE_ADDRESS+0xaaa);
volatile uchar *secondAddr = (uchar *)(BASE_ADDRESS+0x555);
void Main(void)
{
EraseAll();
}
// Flash program function
/*void Program(void)
{
ulong i;
volatile uchar *targetP;
volatile uchar *srcP;
targetP=(uchar *)TARGET_ADDR;
srcP= (uchar *)SOURCE_ADDR;
for(i=0; i<SOURCE_LENGTH; i++, targetP++, srcP++)
{
__asm{
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
}
*firstAddr = FIRST_CMD;
*secondAddr = SECOND_CMD;
*firstAddr = PROGRAM_CMD;
*targetP=*srcP;
if(!Wait((ulong)targetP))
return;
}
}*/
// Chip erase function
void EraseAll(void)
{
// First Flash erase
*firstAddr = FIRST_CMD;
*secondAddr = SECOND_CMD;
*firstAddr = ERASE_CMD;
*firstAddr = FIRST_CMD;
*secondAddr = SECOND_CMD;
*firstAddr = ERASE_ALL_CMD;
// Second flash erase
//*thirdAddr = FIRST_CMD;
//*fourthAddr = SECOND_CMD;
//*thirdAddr = ERASE_CMD;
//*thirdAddr = FIRST_CMD;
//*fourthAddr = SECOND_CMD;
//*thirdAddr = ERASE_ALL_CMD;
*firstAddr = RESET_CMD;
//if(!Wait((ulong)thirdAddr))
//return;
//;
//Flash_Info.Result=1;
}
int Wait(ulong tAddr)
{
volatile ushort old, status;
volatile ushort * targetP;
targetP = (ushort *)tAddr;
old = *targetP;
while(1)
{
status=*targetP;
//Toggle algorithm
if((status & TOGGLE_MASK1) == (old & TOGGLE_MASK1))
break;
if(status & TOGGLE_MASK2)
{
old = *targetP;
status=*targetP;
if((status & TOGGLE_MASK1) == (old & TOGGLE_MASK1))
break;
else {
*firstAddr = RESET_CMD;
return 0;
}
}
old = status;
}
return 1;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -