2026-01-19 15:51:03 +08:00
# include "includes.h"
/*************************************************************/
//software delay
//EntryParameter:NONE
//ReturnValue:NONE
/*************************************************************/
void delay_nms ( unsigned int t )
{
volatile unsigned int i , j , k = 0 ;
j = 50 * t ;
for ( i = 0 ; i < j ; i + + )
{
k + + ;
SYSCON_IWDCNT_Reload ( ) ;
}
}
void delay_nus ( unsigned int t )
{
volatile unsigned int i , j , k = 0 ;
j = 1 * t ;
for ( i = 0 ; i < j ; i + + )
{
k + + ;
}
}
/*************************************************************/
//GPIO Initial
//EntryParameter:NONE
//ReturnValue:NONE
/*************************************************************/
void GPIO_CONFIG ( void )
{
//2025-03-29, 串口2的RX管脚外部中断, 用于通讯总线繁忙判断。
GPIO_PullHigh_Init ( GPIOB0 , 5 ) ; //RX,PB0.5
GPIO_IntGroup_Set ( PB0 , 5 , Selete_EXI_PIN5 ) ; //EXI0 set PB0.2
GPIOB0_EXI_Init ( EXI5 ) ; //PB0.2 as input
EXTI_trigger_CMD ( ENABLE , EXI_PIN5 , _EXIFT ) ; //ENABLE falling edge, 下降沿触发
EXTI_trigger_CMD ( ENABLE , EXI_PIN5 , _EXIRT ) ; //上升沿触发
EXTI_interrupt_CMD ( ENABLE , EXI_PIN5 ) ; //enable EXI
GPIO_EXTI_interrupt ( GPIOB0 , 0 b0000000000100000 ) ; //enable GPIOB02 as EXI
EXI3_Int_Enable ( ) ;
// GPIO_PullHigh_Init(GPIOB0,5);
////------------ EXI FUNTION --------------------------------/
////EXI0_INT= EXI0/EXI16,EXI1_INT= EXI1/EXI17, EXI2_INT=EXI2~EXI3/EXI18/EXI19, EXI3_INT=EXI4~EXI9, EXI4_INT=EXI10~EXI15
// GPIO_IntGroup_Set(PB0,5,Selete_EXI_PIN5); //EXI0 set PB0.5
// GPIOB0_EXI_Init(EXI5); //PB0.5 as input
// EXTI_trigger_CMD(ENABLE,EXI_PIN5,_EXIFT); //ENABLE falling edge
// EXTI_trigger_CMD(ENABLE,EXI_PIN5,_EXIRT); //ENABLE falling edge
// EXTI_interrupt_CMD(ENABLE,EXI_PIN5); //enable EXI
// GPIO_EXTI_interrupt(GPIOB0,0b00000000100000); //enable GPIOB05 as EXI
// EXI3_Int_Enable(); //EXI2~EXI3 INT Vector
//GPIO初始化
// GPIO_Init(GPIOB0,3,0); //PB0.4 set as output
//
// GPIO_DriveStrength_EN(GPIOB0,3);
//
// GPIO_Write_High(GPIOB0,3); //上电默认为高电平
}
/*************************************************************/
//ETP0 Functions
//EntryParameter:NONE
//ReturnValue:NONE
/*************************************************************/
void EPT0_CONFIG ( void )
{
//4路 PWM初始化
EPT_Software_Prg ( ) ; //EPT software reset
//------------ EPT GPIO Setting --------------------------------/
//EPT_IO_SET(EPT_IO_CHAX,IO_NUM_PA10); //AX channel selection
// EPT_IO_SET(EPT_IO_CHBX,IO_NUM_PB02); //BX channel selection
EPT_IO_SET ( EPT_IO_CHCX , IO_NUM_PB00 ) ; //CX channel selection
//EPT_IO_SET(EPT_IO_CHD,IO_NUM_PA08); //D channel selection
//------------ EPT Control --------------------------------/
EPT_PWM_Config ( EPT_Selecte_PCLK , EPT_CNTMD_increase , EPT_OPM_Continue , 0 ) ; //PCLK as clock, increasing mode,continuous mode,TCLK=PCLK/(0+1)
// EPT_PWMX_Output_Control(EPT_PWMA,EPT_CA_Selecte_CMPA,EPT_CB_Selecte_CMPA,EPT_PWM_ZRO_Event_OutLow,EPT_PWM_PRD_Event_Nochange,
// EPT_PWM_CAU_Event_OutHigh,EPT_PWM_CAD_Event_OutHigh,
// EPT_PWM_CBU_Event_Nochange,EPT_PWM_CBD_Event_Nochange,
// EPT_PWM_T1U_Event_Nochange,EPT_PWM_T1D_Event_Nochange,
// EPT_PWM_T2U_Event_Nochange,EPT_PWM_T2D_Event_Nochange);
// EPT_PWMX_Output_Control(EPT_PWMB,EPT_CA_Selecte_CMPB,EPT_CB_Selecte_CMPB,EPT_PWM_ZRO_Event_OutLow,EPT_PWM_PRD_Event_OutLow,
// EPT_PWM_CAU_Event_OutHigh,EPT_PWM_CAD_Event_OutHigh,
// EPT_PWM_CBU_Event_Nochange,EPT_PWM_CBD_Event_Nochange,
// EPT_PWM_T1U_Event_Nochange,EPT_PWM_T1D_Event_Nochange,
// EPT_PWM_T2U_Event_Nochange,EPT_PWM_T2D_Event_Nochange);
EPT_PWMX_Output_Control ( EPT_PWMC , EPT_CA_Selecte_CMPC , EPT_CB_Selecte_CMPC , EPT_PWM_ZRO_Event_OutLow , EPT_PWM_PRD_Event_Nochange ,
EPT_PWM_CAU_Event_OutHigh , EPT_PWM_CAD_Event_OutHigh ,
EPT_PWM_CBU_Event_Nochange , EPT_PWM_CBD_Event_Nochange ,
EPT_PWM_T1U_Event_Nochange , EPT_PWM_T1D_Event_Nochange ,
EPT_PWM_T2U_Event_Nochange , EPT_PWM_T2D_Event_Nochange ) ;
// EPT_PWMX_Output_Control(EPT_PWMD,EPT_CA_Selecte_CMPD,EPT_CB_Selecte_CMPD,EPT_PWM_ZRO_Event_OutLow,EPT_PWM_PRD_Event_Nochange,
// EPT_PWM_CAU_Event_OutHigh,EPT_PWM_CAD_Event_OutHigh,
// EPT_PWM_CBU_Event_Nochange,EPT_PWM_CBD_Event_Nochange,
// EPT_PWM_T1U_Event_Nochange,EPT_PWM_T1D_Event_Nochange,
// EPT_PWM_T2U_Event_Nochange,EPT_PWM_T2D_Event_Nochange);
EPT_PRDR_CMPA_CMPB_CMPC_CMPD_Config ( 3000 , 0 , 0 , 3000 , 0 ) ; //PRDR=2400,CMPA=1200,CMPB=600,CMPC=2400,CMPD=0
// EPT_Int_Enable(EPT_PEND);//End of cycle interrupt request raw status
// EPT_Vector_Int_Enable(); //开启EPT中断
//------------ EPT start --------------------------------/
EPT_Start ( ) ;
}
/*************************************************************/
//BT Initial
//EntryParameter:NONE
//ReturnValue:NONE
/*************************************************************/
void BT_CONFIG ( void )
{
//PB 保护电流PWM_CURR_LMT
// BT_DeInit(BT0);
// BT_IO_Init(BT0_PB02);
// BT_Configure(BT0,BTCLK_EN,0,BT_IMMEDIATE,BT_CONTINUOUS,BT_PCLKDIV);//TCLK=PCLK/(0+1)
// BT_ControlSet_Configure(BT0,BT_START_HIGH,BT_IDLE_LOW,BT_SYNC_DIS,BT_SYNCMD_DIS,BT_OSTMDX_ONCE,BT_AREARM_DIS,BT_CNTRLD_EN);
// //BT_ControlSet_Configure(BT0,BT_START_HIGH,BT_IDLE_LOW,BT_SYNC_EN,BT_SYNCMD_DIS,BT_OSTMDX_ONCE,BT_AREARM_DIS,BT_CNTRLD_EN);
// //BT_Trigger_Configure(BT0,BT_TRGSRC_PEND,BT_TRGOE_EN);
// BT_Period_CMP_Write(BT0,50,1);
// BT_Start(BT0);
// BT_ConfigInterrupt_CMD(BT0,ENABLE,BT_PEND);
// BT0_INT_ENABLE();
//100us 定时器初始化
BT_DeInit ( BT1 ) ;
BT_Configure ( BT1 , BTCLK_EN , 0 , BT_IMMEDIATE , BT_CONTINUOUS , BT_PCLKDIV ) ;
BT_ControlSet_Configure ( BT1 , BT_START_HIGH , BT_IDLE_LOW , BT_SYNC_DIS , BT_SYNCMD_DIS , BT_OSTMDX_ONCE , BT_AREARM_DIS , BT_CNTRLD_EN ) ;
BT_Period_CMP_Write ( BT1 , 4780 , 1 ) ;
BT_Start ( BT1 ) ;
BT_ConfigInterrupt_CMD ( BT1 , ENABLE , BT_CMP ) ;
BT1_INT_ENABLE ( ) ;
}
/*************************************************************/
//UART0 CONFIG
//EntryParameter:NONE
//ReturnValue:NONE
/*************************************************************/
void UART0_CONFIG ( void )
{
UART0_DeInit ( ) ; //clear all UART Register
UART_IO_Init ( IO_UART0 , 0 ) ; //use PA0.1->RXD0, PA0.0->TXD0
UARTInit ( UART0 , 416 , UART_PAR_NONE ) ; //baudrate=sysclock 48M/416=115200
UARTInitRxTxIntEn ( UART0 , 416 , UART_PAR_NONE ) ; //baudrate=sysclock 48M/416=115200,tx rx int enabled
UART0_Int_Enable ( ) ;
}
/*************************************************************/
//UART1 CONFIG
//EntryParameter:NONE
//ReturnValue:NONE
/*************************************************************/
void UART1_CONFIG ( void )
{
UART1_DeInit ( ) ; //clear all UART Register
UART_IO_Init ( IO_UART1 , 0 ) ; //use PA0.13->RXD1, PB0.0->TXD1
UARTInit ( UART1 , 416 , UART_PAR_NONE ) ; //baudrate=sysclock 48M/416=115200
UARTInitRxTxIntEn ( UART1 , 416 , UART_PAR_NONE ) ; //baudrate=sysclock 48M/416=115200 tx rx int enabled
UART1_Int_Enable ( ) ;
}
/*************************************************************/
//UART2 CONFIG
//EntryParameter:NONE
//ReturnValue:NONE
/*************************************************************/
void UART2_CONFIG ( void )
{
UART2_DeInit ( ) ; //clear all UART Register
UART_IO_Init ( IO_UART2 , 2 ) ; //use PA0.7->RXD2, PA0.6->TXD2
UARTInit ( UART2 , 416 , UART_PAR_NONE ) ; //baudrate=sysclock 48M/416=115200
//UARTInitRxTxIntEn(UART2,416,UART_PAR_NONE); //baudrate=sysclock 48M/416=115200 tx rx int enabled
//UART2_Int_Enable();
}
/*************************************************************/
//adc config
//EntryParameter:NONE
//ReturnValue:NONE
/*************************************************************/
void ADC12_CONFIG ( void )
{
ADC12_RESET_VALUE ( ) ; //ADC所有寄存器复位
ADC12_Software_Reset ( ) ; //ADC软件复位
ADC12_CLK_CMD ( ADC_CLK_CR , ENABLE ) ; //使能ADC CLK
ADC12_Configure_Mode ( ADC12_12BIT , Continuous_mode , 0 , 6 , 2 , 4 ) ;
ADC12_Configure_VREF_Selecte ( ADC12_VREFP_VDD_VREFN_VSS ) ;
ADC12_ConversionChannel_Config ( ADC12_ADCIN4 , ADC12_CV_RepeatNum1 , ADC12_AVGDIS , 0 ) ;
ADC12_ConversionChannel_Config ( ADC12_ADCIN7 , ADC12_CV_RepeatNum1 , ADC12_AVGDIS , 1 ) ;
ADC12_ConversionChannel_Config ( ADC12_ADCIN8 , ADC12_CV_RepeatNum1 , ADC12_AVGDIS , 2 ) ;
ADC12_ConversionChannel_Config ( ADC12_ADCIN10 , ADC12_CV_RepeatNum1 , ADC12_AVGDIS , 3 ) ;
ADC12_CMD ( ENABLE ) ;
ADC12_ready_wait ( ) ;
ADC12_Control ( ADC12_START ) ;
}
/*************************************************************/
//SIO Functions
//EntryParameter:NONE
//ReturnValue:NONE
// sio 驱动RGB LED(ws2812), RGB DATA = 24bit; 驱动数据输出排列方式:GRB
/*************************************************************/
void SIO_CONFIG ( void )
{
SIO_DeInit ( ) ;
//
SIO_IO_Init ( SIO_PA03 ) ; //配置IO为SIO模式
//tx clk =4MHz, Ttxshift = 1/4 = 250ns; 发送每bit时间是250ns
SIO_TX_Init ( SIOCLK_EN , 9 ) ; //
//TXCR1 TXCR0--空闲输出L
//TXBUFLEN = 8-1 TXCNT =24-1
// D0 D1 不使用
//
SIO_TX_Configure ( SIO_IDLE_LOW , SIO_TX_LSB , 7 , 23 , 0 , 0 , SIO_OBH_6BIT , SIO_OBL_6BIT , 0x0F , 0x03 ) ;
//SIO_TXBUF_Set(TX_DH,TX_DL,TX_DH,TX_DL,TX_DH,TX_DL,TX_DH,TX_DL,TX_D1,TX_D0,TX_D1,TX_D0,TX_D1,TX_D0,TX_D1,TX_D0);
// SIO_ConfigInterrupt_CMD(ENABLE,SIO_TXDNE); //配置
// SIO_INT_ENABLE();
}
/*************************************************************/
//syscon Functions
//EntryParameter:NONE
//ReturnValue:NONE
/*************************************************************/
void SYSCON_CONFIG ( void )
{
//------SYSTEM CLK AND PCLK FUNTION---------------------------/
SYSCON_RST_VALUE ( ) ; //SYSCON all register clr
SYSCON_General_CMD ( ENABLE , ENDIS_ISOSC ) ; //SYSCON enable/disable clock source
//EMOSC_OSTR_Config(0XAD,0X1f,EM_LFSEL_EN,EM_FLEN_EN,EM_FLSEL_10ns); //EM_CNT=0X3FF,0xAD(36K),EM_GM=0,Low F modedisable,EM filter disable,if enable,cont set 5ns
//SYSCON_General_CMD(ENABLE,ENDIS_EMOSC);
SYSCON_HFOSC_SELECTE ( HFOSC_SELECTE_48M ) ; //HFOSC selected 48MHz
SystemCLK_HCLKDIV_PCLKDIV_Config ( SYSCLK_HFOSC , HCLK_DIV_1 , PCLK_DIV_1 , HFOSC_48M ) ; //system clock set, Hclk div ,Pclk div set system clock=SystemCLK/Hclk div/Pclk div
//------------ WDT FUNTION --------------------------------/
SYSCON_IWDCNT_Config ( IWDT_TIME_500MS , IWDT_INTW_DIV_7 ) ; //WDT TIME 1s,WDT alarm interrupt time=1s-1s*1/8=0.875S
SYSCON_WDT_CMD ( ENABLE ) ; //enable/disable WDT
SYSCON_IWDCNT_Reload ( ) ; //reload WDT
IWDT_Int_Enable ( ) ;
//------------ WWDT FUNTION --------------------------------/
// WWDT_CNT_Load(0xFF);
// WWDT_CONFIG(PCLK_4096_DIV0,0xFF,WWDT_DBGDIS);
// WWDT_Int_Config(ENABLE);
//WWDT_CMD(ENABLE); //enable wwdt
//------------ CLO Output --------------------------------/
//SYSCON_CLO_CONFIG(CLO_PA08); //CLO output setting
//SYSCON_CLO_SRC_SET(CLO_HFCLK,CLO_DIV16); //CLO output clock and div
//------------ LVD FUNTION --------------------------------/
SYSCON_LVD_Config ( ENABLE_LVDEN , INTDET_LVL_3_9V , RSTDET_LVL_1_9V , ENABLE_LVD_INT , INTDET_POL_fall ) ; //LVD LVR Enable/Disable
LVD_Int_Enable ( ) ;
//------------ SYSCON Vector --------------------------------/
SYSCON_Int_Enable ( ) ; //SYSCON VECTOR
//SYSCON_WakeUp_Enable(); //Enable WDT wakeup INT
//------------------------------------------------------------/
//OSC CLOCK Calibration
//------------------------------------------------------------/
std_clk_calib ( CLK_HFOSC_48M ) ; //Select the same clock source as the system
}
/*********************************************************************************/
/*********************************************************************************/
//APT32F102_init /
//EntryParameter:NONE /
//ReturnValue:NONE /
/*********************************************************************************/
void APT32F102_init ( void )
{
Sys_RSR = 0x00000000 ;
Sys_RSR = SYSCON - > RSR ; //读取复位源 2024-03-15
Sav_Temp = 0x00000000 ;
Sav_Temp = SYSCON - > UREG0 ; //读取保存的温控数据 2024-03-15
//------------------------------------------------------------/
//Peripheral clock enable and disable
//EntryParameter:NONE
//ReturnValue:NONE
//------------------------------------------------------------/
SYSCON - > PCER0 = 0xFFFFFFF ; //PCLK Enable
SYSCON - > PCER1 = 0xFFFFFFF ; //PCLK Enable
while ( ! ( SYSCON - > PCSR0 & 0x1 ) ) ; //Wait PCLK enabled
//------------------------------------------------------------/
//ISOSC/IMOSC/EMOSC/SYSCLK/IWDT/LVD/EM_CMFAIL/EM_CMRCV/CMD_ERR OSC stable interrupt
//EntryParameter:NONE
//ReturnValue:NONE
//------------------------------------------------------------/
SYSCON_CONFIG ( ) ; //syscon initial
CK_CPU_EnAllNormalIrq ( ) ; //enable all IRQ
SYSCON_INT_Priority ( ) ; //initial all Priority=0xC0
//设置中断优先级 0最高, 3最低
Set_INT_Priority ( UART2_IRQ , 1 ) ; //串口优先级最高
Set_INT_Priority ( UART1_IRQ , 1 ) ; //串口优先级最高
Set_INT_Priority ( EXI3_IRQ , 1 ) ; //总线繁忙判断外部IO中断
GPIO_DeInit ( ) ; //复位所有IO, bootload中初始化了所有IO
//------------------------------------------------------------/
//Other IP config
//------------------------------------------------------------/
BT_CONFIG ( ) ; //BT initial
2026-02-09 17:32:59 +08:00
UARTx_Init ( UART_2 , IrSend_Rs485_Pro ) ; //通讯串口
2026-01-19 15:51:03 +08:00
UARTx_Init ( UART_1 , Ctrller_RecData_Processing ) ; //通讯串口
EEPROM_Init ( ) ;
DIP_Switch_Init ( ) ;
TemCtrl_Init ( ) ;
}
/******************* (C) COPYRIGHT 2019 APT Chip *****END OF FILE****/