📄 main.c
字号:
#include <stdio.h>
#include "config.h"
#include "isp.h"
/***************************** _DEAD_()函数 *******************************
* 功 能:输出错误提示信息并进入一个死循环,当发生致命错误时调用本函数。
**************************************************************************/
void _DEAD_(void) {
printf("\nError: cannot continue!\n");
while (1);
}
/**************************** 系统初始化函数 *****************************
* 功 能:进行系统初始化,禁止片上XRAM,设置串行口工作方式。
**************************************************************************/
void system_init(void) {
#ifdef HAVE_XRAM /* 禁止片上 XRAM */
AUXR = NO_XDATA;
#endif
uart_init(); /* 设置串行口工作方式 */
EA = 1; /* 开中断 */
}
/****************************** 主函数 **********************************
* 功 能:提供程序入口,管理从芯片擦除到芯片编程的全部ISP工作过程。
*************************************************************************/
void main(void) {
Uchar status;
system_init(); /* 系统初始化 */
printf("\n\n** Welcome to the ISP program! **\n\n"); /* 输出提示信息 */
/* 检查FLASH存储器生产厂商及芯片ID(Atmel=1F, 49HF010=17) */
printf("Check if FLASH device is a Atmel AT49HF010... ");
if (flash_id()==0x1F17) {
printf("OK.\n"); /* FLASH存储器是AT49HF010,继续 */
}
else {
printf("KO!\n"); /* FLASH存储器不是AT49HF010 */
_DEAD_(); /* 发生致命错误,进入死循环 */
}
/* 擦除FLASH存储器 */
printf("\nErasing the on-board FLASH memory... ");
flash_erase();
printf("OK.\n\n");
/* 擦除完成,准备从PC机下载更新代码,输出提示信息 */
printf("Ready for FLASH programming.\n");
printf("Send .hex file with the following terminal configuration:\n");
printf(" - ASCII character transmission,\n");
printf(" - 8 bits, 1 stop, parity none,\n"),
printf(" - XON-XOFF flow control.\n");
printf("\nWaiting for download...\n");
/* 整理从PC机下载的HEX文件更新代码,并将其编程到FLASH存储器中 */
uart_rx_enable();
status = hex_parser();
uart_rx_disable();
if (status == HEX_DEC_CSERR) {
printf("\nChecksum error: external FLASH memory is not programmed!\n");
_DEAD_();
}
else
printf("\nExternal FLASH memory is now programmed.\n");
while(1);
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -