//*********************************************************************************************************** // Ver 1.0 // 2022.04.02 1、新建文件。 //*********************************************************************************************************** //#include "gd32l23x_config.h" //#include "bat32g135_config.h" //#include "acm32f4_config.h" #include "stm32f10x_config.h" //#include "mm32f016x_config.h" #define __CVD__ #define SVS_STACK_SIZE 0x200 unsigned char SvsStack[SVS_STACK_SIZE]; //参数块定义 #define BUFFER_SIZE 4096 #ifdef __CVD__ typedef struct { unsigned int status; //Command; unsigned int Result; unsigned int Reserved1[4]; unsigned int Reserved2; unsigned int addr; //TargetAddr; unsigned int size; //Length; unsigned int Reserved3; unsigned int Reserved4; unsigned int Reserved5; unsigned int Reserved6; unsigned int Reserved7; unsigned int Reserved8; unsigned char data[BUFFER_SIZE]; } FlashParameter_Str; static FlashParameter_Str FlashParameter;// __attribute__((at(0x20000ce4))); enum{ FLASH_PROGRAM = 0x00, FLASH_CHIP_ERASE = 0x01, FLASH_ERASE_PAGE = 0x02, FLASH_CHIP_ID = 0x03, }; #else typedef struct{ unsigned int flashaddr; //0x800,芯片起始地址 unsigned int flashwidth; //0x804,1=8bit,2=16bit,4=32bit unsigned int width; //0x808,数据总线位宽 unsigned int offset; //0x80c, unsigned int addr; //0x810,FLASH操作地址 unsigned int size; //0x814,擦除、写入字节数 unsigned int Result; //reserved; //0x818, unsigned int status; //0x81c,in: 1=program, 2=erase, 5=chip erase, out: 0=o.k., 0x100=fail unsigned char data[BUFFER_SIZE]; //0x820,缓冲区起始地址 }FlashParameter_Str; static FlashParameter_Str FlashParameter __attribute__((at(0x20000800))); //static FlashParameter_Str FlashParameter __attribute__((section(".ARM.__at_0x20000800"))); enum{ FLASH_PROGRAM = 0x01, FLASH_ERASE_PAGE = 0x02, FLASH_CHIP_ERASE = 0x05, FLASH_CHIP_ID = 0x00, }; #endif static inline void __set_MSP(unsigned int topOfMainStack) { register unsigned int __regMainStackPointer __asm("msp"); __regMainStackPointer = topOfMainStack; } extern int _USAGEFAULT[]; volatile int *p_usagefault = _USAGEFAULT; // 添加引用,防止被优化掉 #define DEBUG_BREAK_NOP() __asm { BKPT 0x000000 } #define DEBUG_BREAK() __asm { BKPT 0x00 } #define NOP() __asm { NOP } static int __main2(void); extern void _STOP(void); #pragma arm section code = ".ARM.__at_0x20000100" //#pragma clang section text = ".ARM.__at_0x20000000" //AC6 unsigned int errCnt = 65535; unsigned int tMs; int main(void) { __set_MSP ((int)SvsStack+SVS_STACK_SIZE); __main2(); NOP(); //DEBUG_BREAK_NOP(); //DEBUG_BREAK(); //DEBUG_BREAK(); _STOP(); } #pragma arm section code = ".ARM.__at_0x20000200" static int __main2(void) { system_init(); while(1) { switch(FlashParameter.status) { case FLASH_PROGRAM: flash_program(); return(0); //break; case FLASH_ERASE_PAGE: flash_erasepage(); return(0); //break; case FLASH_CHIP_ERASE: flash_erasechip(); return(0); //break; case FLASH_CHIP_ID: flash_readchip(); return(0); //break; default: tMs = 65535; while(tMs--); FlashParameter.Result = 0; break; } if(errCnt > 0) errCnt--; else return(1); } } #pragma arm section //#pragma clang section