📄 main.c
字号:
#include <string.h>
#include <stdio.h>
#include "config.h"
#include "isp.h"
#include "lcd.h"
#include "system.h"
#include "hex.h"
void vInitSystem(void);
void uart_tx(Uchar tx_data);
extern unsigned char Msg;
extern unsigned char m_BankSector;
extern unsigned char mBuffer[256];
extern unsigned int offset;
extern unsigned char SreialStr;
unsigned int mSectorSize;
unsigned char m_Bank;
unsigned int moffset;
float mPer;
float mPercent;
void main(void)
{
unsigned char mPTick=0;
unsigned char mFlashTimes;
unsigned int mFlashMax;
unsigned int mFlashID;
unsigned long mErrsum;
mFlashID = vFlashId();
vInitSystem();
SreialStr = 0;
//界面显示
vDrawLogo(4, 36, 256, 72, 1);
lprintf(7,166,0,"FirmWare V1.0 12/15/06");
lprintf(7,184,0,"Serial No xxxx-xxxx");
lprintf(7,202,0,"Device ID = %4X",mFlashID);
lprintf(3,220,0,"Cheng Ji Ltd.");
Msg = HEX_DEC_OK;
while(1)
{
switch (Msg)
{
case HEX_DEC_SECTOR_IRQ :
mFlashID = vFlashId();
Msg = HEX_DEC_OK;
vCOmSend(2, 0x1D, mFlashID); //返回FLASH ID号
break;
case HEX_DEC_SECTOR_BANK :
mSectorSize = offset;
Msg = HEX_DEC_OK;
vCOmSend(2, 0x1E, mSectorSize); //返回FLASH扇区大小
break;
case HEX_DEC_START : //开始
mFlashMax = 0; //每帧允许编程次数
mPer = 0;
mPTick = 0;
mErrsum = 0;
vFlashErase(); //擦除Flash
Msg = HEX_DEC_OK;
lprintf(7,126,0,"Programing ...... ");
vCOmSend(0, 0x05, 0); //就绪
break;
case HEX_DEC_SEG_ERR : //段错误
Msg = HEX_DEC_OK;
vCOmSend(0, 0x09, 0);
break;
case HEX_DEC_SEG_DATA : //段数据
m_Bank = m_BankSector;
Msg = HEX_DEC_OK;
vCOmSend(0, 0x08, 0); //段正确
break;
case HEX_DEC_FRAME_ERR : //帧错误
Msg = HEX_DEC_OK;
vCOmSend(0, 0x07, 0); //帧错误
break;
case HEX_DEC_FRAME_DATA : //帧数据
moffset = offset;
mFlashMax = 0;
vWriteSector(mBuffer,mSectorSize,offset,m_Bank);
if((mFlashMax = vVerify(mBuffer,mSectorSize,moffset,m_Bank)) !=0)
{
mFlashTimes = 1;
vWriteSector(mBuffer,mSectorSize,offset,m_Bank);
if((mFlashMax = vVerify(mBuffer,mSectorSize,moffset,m_Bank)) !=0)
{
mFlashTimes = 2;
vWriteSector(mBuffer,mSectorSize,offset,m_Bank);
if((mFlashMax = vVerify(mBuffer,mSectorSize,moffset,m_Bank)) !=0)
{
vWriteSector(mBuffer,mSectorSize,offset,m_Bank);
mFlashMax = vVerify(mBuffer,mSectorSize,moffset,m_Bank);
}
}
}
if(mFlashMax != 0)
{
mErrsum += (unsigned long )mFlashMax;
lprintf(7,148,0,"Error Number is %ld",mErrsum);
Msg = HEX_DEC_OK;
vCOmSend(0, 0x1A, 0); //烧写错误
break;
}
mPer += (float)mSectorSize;
mPTick++;
if(7<mPTick)
{
mPTick = 0;
mPercent = (float)(mPer/(4*65536.0));
mPercent = mPercent*100+0.5;
lprintf(24,126,0,"%3d%c",(unsigned int)mPercent,'%');
}
Msg = HEX_DEC_OK;
vCOmSend(0, 0x06, 0); //帧正确
break;
case HEX_DEC_FRAME_IRQ : //帧请求
Msg = HEX_DEC_OK;
if(((moffset == 0xFF80)&&(mSectorSize==128))||((moffset == 0xFF00)&&(mSectorSize==256)))
{
vCOmSend(0, 0x0F, 0); //帧结束
}
else vCOmSend(0, 0x0E, 0); //下一帧
break;
case HEX_DEC_SEG_IRQ : //段请求
Msg = HEX_DEC_OK;
if(m_Bank<3)vCOmSend(0, 0x0B, 0); //下一段
else vCOmSend(0, 0x0C, 0); //段结束
break;
case HEX_DEC_END : //结束
Msg = HEX_DEC_OK;
mFlashMax = 0; //每帧允许编程次数
mPer = 0;
mPTick = 0;
mErrsum = 0;
lprintf(7,148,0,"256K Btye Program Sucess");
break;
case HEX_DEC_PROGRAM_ERR :
Msg = HEX_DEC_OK;
mFlashMax = 0; //每帧允许编程次数
mPer = 0;
mPTick = 0;
mErrsum = 0;
lprintf(7,126,0,"Programing Error ...... ");
break;
//////////////////////////////////////////////////////////////////
case HEX_DEC_VERIFY_START : //开始比较命令
mPer = 0;
mPTick = 0;
moffset = 0;
lprintf(7,126,0,"Veriy Processing ... ");
lprintf(7,148,0," ");
Msg = HEX_DEC_OK;
vCOmSend(0, 0x11, 0); //比较就绪
break;
case HEX_DEC_SEG_VERIFY_ERR : //比较段数据错误
Msg = HEX_DEC_OK;
vCOmSend(0, 0x14, 0); //比较段数据错误
break;
case HEX_DEC_SEG_VERIFY_DATA : //比较段地址正确
m_Bank = m_BankSector;
Msg = HEX_DEC_OK;
vCOmSend(0, 0x13, 0); //比较段地址正确
break;
case HEX_DEC_FRAME_VERIFY_DATA : //比较帧地址
moffset = offset;
mPer += (float)mSectorSize;
mPTick++;
if(7<mPTick)
{
mPTick = 0;
mPercent = (float)(mPer/(4*65536.0));
mPercent = mPercent*100+0.5;
lprintf(28,126,0,"%3d%c",(unsigned int)mPercent,'%');
}
Msg = HEX_DEC_OK;
vSendBuff(offset,mSectorSize,m_Bank);
break;
case HEX_DEC_VERIFY_FRAME_IRQ : //帧比较请求
Msg = HEX_DEC_OK;
if(((moffset == 0xFF80)&&(mSectorSize==128))||((moffset == 0xFF00)&&(mSectorSize==256)))
{
vCOmSend(0, 0x18, 0); //比较帧结束
}
else
{
vCOmSend(0, 0x17, 0); //比较帧继续
}
break;
case HEX_DEC_VERIFY_FRAME_END :
Msg = HEX_DEC_OK;
lprintf(7,126,0,"%s%c","Success for Verify...100",'%');
break;
case HEX_DEC_OK :
break;
default : break;
}
}
}
void vInitSystem(void)
{
#if Sp756P==1
vInitUart();
vInitLcd();
vClearLcd();
#else
vInitUart();
vInitLcd();
vClearLcd();
UsbWriteCom(0xF3);
UsbWriteData(0x0E);
UsbWriteData(0x0B);
#endif
vEnterInterrupt();
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -