Files
RS485_T1_Transition/Source/mcu_initial.c
yeyangwen 13980737e3 feat:修改设备类型
feat:修改为红外转发设备,将中弘网关协议转换为主机红外协议
2026-02-09 17:32:59 +08:00

331 lines
14 KiB
C
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
#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,0b0000000000100000); //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 clockincreasing 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(); //复位所有IObootload中初始化了所有IO
//------------------------------------------------------------/
//Other IP config
//------------------------------------------------------------/
BT_CONFIG(); //BT initial
UARTx_Init(UART_2,IrSend_Rs485_Pro); //通讯串口
UARTx_Init(UART_1,Ctrller_RecData_Processing); //通讯串口
EEPROM_Init();
DIP_Switch_Init();
TemCtrl_Init();
}
/******************* (C) COPYRIGHT 2019 APT Chip *****END OF FILE****/