Files

218 lines
5.5 KiB
C
Raw Permalink Normal View History

/********************************** (C) COPYRIGHT *******************************
* File Name : main.c
* Author : WCH
* Version : V1.0.0
* Date : 2024/05/05
* Description : Main program body.
*********************************************************************************
* Copyright (c) 2021 Nanjing Qinheng Microelectronics Co., Ltd.
* Attention: This software (modified or not) and binary are used for
* microcontroller manufactured by Nanjing Qinheng Microelectronics.
*******************************************************************************/
#include "includes.h"
#include <stdio.h>
#include <string.h>
const char Prject_File_Name[] __attribute__((section(".project_info"))) = Project_Version;
uint32_t test_tick = 0;
/*********************************************************************
* @fn main
*
* @brief Main program.
*
* @return none
*/
int main(void)
{
uint8_t sys_reset = 0;
unsigned char Buffer;
/* - <20>ϵ<EFBFBD>ǰ<EFBFBD><C7B0>Ҫ<EFBFBD>رտ<D8B1><D5BF>Ź<EFBFBD>
* - ԭ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ź<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>и<EFBFBD>λ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ź<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ڣ<EFBFBD><EFBFBD><EFBFBD>һֱ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>λ
* */
WDT_Reinit();
SystemCoreClockUpdate(); //ϵͳ<CFB5><CDB3>ʼ<EFBFBD><CABC>
Systick_Init();
2026-02-10 17:48:22 +08:00
UARTx_Init(UART_1,512000);
UARTx_Init(UART_2,512000);
SYS_LED_Init();
SPI_SRAM_Init();
SPI_FLASH_Init();
Get_Flash_Size(&Buffer);
if(Buffer){
DBG_SYS_Printf("CH564 ROMA :0x0 - 0x6FFFF");
DBG_SYS_Printf("CH564 EEPROM :0x70000 - 0x77FFF");
}else {
DBG_SYS_Printf("CH564 ROMA :0x0 - 0x2FFFF");
DBG_SYS_Printf("CH564 EEPROM :0x30000 - 0x37FFF");
}
EEPROM_Init();
memset((uint8_t *)&g_app_feature,0,sizeof(G_SYS_FEATURE_T));
memset((uint8_t *)&g_mcu_app_feature,0,sizeof(G_SYS_FEATURE_T));
memset((uint8_t *)&g_update_recode,0,sizeof(UPDATE_RECORD_T));
DBG_SYS_Printf("Project Name:%s",Prject_File_Name);
2026-02-10 17:48:22 +08:00
DBG_SYS_Printf("Project - SYSCLK_FREQ_120MHz_HSI");
sys_reset = RCC_GET_GLOB_RST_KEEP(); //<2F><>λ<EFBFBD><CEBB><EFBFBD>ּĴ<D6BC><C4B4><EFBFBD>
if(sys_reset == 0x00)
{
DBG_SYS_Printf("<EFBFBD>ϵ縴λ \r\n");
g_Boot_Time = 10000;
2026-02-10 17:48:22 +08:00
}else if(sys_reset == 0x02){
DBG_SYS_Printf("<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>λ \r\n");
2026-02-10 17:48:22 +08:00
g_Boot_Time = 10000;
}else if(sys_reset == 0x03){
DBG_SYS_Printf("MCU Flash<73><68><EFBFBD><EFBFBD><EFBFBD><EFBFBD>λ \r\n");
g_Boot_Time = 3000;
}else {
DBG_SYS_Printf("<EFBFBD><EFBFBD><EFBFBD>λ \r\n");
2026-02-10 17:48:22 +08:00
g_Boot_Time = 10000;
}
RCC_SET_GLOB_RST_KEEP(0x01);
2026-02-10 17:48:22 +08:00
SPIFLASH_Read_Update_Recode(&g_update_recode); //<2F><>ȡAPPд<50><D0B4><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
g_jump_flag = Read_APP_Feature();
//<2F><><EFBFBD><EFBFBD>ʹ<EFBFBD>õ<EFBFBD> - <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>״̬
if(g_jump_flag == 2) {
MCU_APP_Write(); //MCU<43><55>Ҫд<D2AA><D0B4>
DBG_SYS_Printf("<EFBFBD><EFBFBD><EFBFBD><EFBFBD>MCU Flash<73><68><EFBFBD><EFBFBD><EFBFBD><EFBFBD>λ \r\n");
2026-02-10 17:48:22 +08:00
RCC_SET_GLOB_RST_KEEP(0x03);
Delay_Ms(1000);
// - <20><><EFBFBD><EFBFBD>ȫ<EFBFBD>ָ<EFBFBD>λ<EFBFBD><CEBB><EFBFBD><EFBFBD>оƬ<D0BE><C6AC><EFBFBD><EFBFBD>ת<EFBFBD><D7AA>Code Flash
2026-02-10 17:48:22 +08:00
//RCC_GlobleRstCFG(RB_GLOB_FORCE_RST, ENABLE);
// - <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>λ<EFBFBD><CEBB>оƬ<D0BE><C6AC><EFBFBD><EFBFBD>ת<EFBFBD><D7AA>Code Flash,<2C><>Ҫ<EFBFBD><D2AA><EFBFBD><EFBFBD><EFBFBD>ļ<EFBFBD><C4BC>е<EFBFBD>LD<4C>ļ<EFBFBD> .vector<6F>ֶ<EFBFBD><D6B6>м<EFBFBD><D0BC><EFBFBD> KEEP,<2C><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʹ<EFBFBD><CAB9>
NVIC_SystemReset();
while(1);
}
2026-02-10 17:48:22 +08:00
//Dbg_Switch = 0x00;
WDT_Init();
while (1)
{
WDT_Feed();
SYS_LED_Task();
2026-02-10 17:48:22 +08:00
Uart1_Task();
Uart2_Task();
//<2F><><EFBFBD><EFBFBD>ʹ<EFBFBD>õ<EFBFBD> - <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>״̬
if(g_jump_flag == 0x00)
{
2026-02-10 17:48:22 +08:00
if(SysTick_1ms - g_Boot_Tick >= g_Boot_Time)
{
g_Boot_Tick = SysTick_1ms;
DBG_SYS_Printf("Jump APP 2\r\n");
Delay_Ms(1000);
WDT_Reinit();
NVIC_EnableIRQ( Software_IRQn );
Delay_Ms( 20 );
HSI_ON();
CLKSEL_HSI();
SYSCLK_SOURCE_SELECT(SYSCLK_SOURCE_HSI_HSE);
RCC_UNLOCK_SAFE_ACCESS();
BITS_CFG( R32_EXTEN_CTLR0 , RB_FLASH_PRE_EN , DISABLE );
RCC_LOCK_SAFE_ACCESS();
NVIC_SetPendingIRQ( Software_IRQn );
}
}else {
if(SysTick_1ms - g_Boot_Tick >= g_Boot_Time)
{
DBG_SYS_Printf("<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>λ ....");
RCC_SET_GLOB_RST_KEEP(0x02);
Delay_Ms(1000);
2026-02-10 17:48:22 +08:00
//<2F><>ʽ1<CABD><31>
//RCC_GlobleRstCFG(RB_GLOB_FORCE_RST, ENABLE);
//<2F><>ʽ2<CABD><32>
NVIC_SystemReset();
while(1);
}
}
}
}
void NMI_Handler(void) __attribute__((interrupt("WCH-Interrupt-fast")));
void HardFault_Handler(void) __attribute__((interrupt("WCH-Interrupt-fast")));
/*********************************************************************
* @fn NMI_Handler
*
* @brief This function handles NMI exception.
*
* @return none
*/
void NMI_Handler(void)
{
while (1)
{
}
}
/*********************************************************************
* @fn HardFault_Handler
*
* @brief This function handles Hard Fault exception.
*
* @return none
*/
void HardFault_Handler(void)
{
/* MRS_<53><5F><EFBFBD><EFBFBD>HardFault<6C><74><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>˼· : https://www.cnblogs.com/wchmcu/p/17545931.html */
uint32_t v_mepc,v_mcause,v_mtval;
//Dbg_Println(DBG_BIT_SYS_STATUS_bit,"hardfault\n");
v_mepc = __get_MEPC();
v_mcause = __get_MCAUSE();
v_mtval = __get_MTVAL();
printf("boot mepc:%x\n",v_mepc);
printf("boot mcause:%x\n",v_mcause);
printf("boot mtval:%x\n",v_mtval);
while(1);
}
/* - <20><>תAPP <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>SW_Handler<65>ж<EFBFBD><D0B6><EFBFBD><EFBFBD><EFBFBD>ת
* - <EFBFBD><EFBFBD>Ϊ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>SW_Handler<EFBFBD>жϺ<EFBFBD><EFBFBD><EFBFBD>оƬ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ģʽ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>תAPP */
void SW_Handler(void) {
__asm volatile("li a6, 0x01000");
__asm volatile("jr a6");
while(1);
}