diff --git a/CFG/SC92F8363B/Keil_Mould/Drivers/SCDriver_List.h b/CFG/SC92F8363B/Keil_Mould/Drivers/SCDriver_List.h new file mode 100644 index 0000000..1764b86 --- /dev/null +++ b/CFG/SC92F8363B/Keil_Mould/Drivers/SCDriver_List.h @@ -0,0 +1,6 @@ +#ifndef _SCDriver_List_H_ +#define _SCDriver_List_H_ + +/*write H Files here*/ + +#endif \ No newline at end of file diff --git a/CFG/SC92F8363B/Keil_Mould/FWLib/SC92F_Lib/inc/SC92F7003_C.H b/CFG/SC92F8363B/Keil_Mould/FWLib/SC92F_Lib/inc/SC92F7003_C.H new file mode 100644 index 0000000..7e09ca4 --- /dev/null +++ b/CFG/SC92F8363B/Keil_Mould/FWLib/SC92F_Lib/inc/SC92F7003_C.H @@ -0,0 +1,206 @@ + /*-------------------------------------------------------------------------- +SC92F7003_C.H + +C Header file for SC92F7003 microcontroller. +Copyright (c) 2019 Shenzhen SinOne Chip Electronic CO., Ltd. +All rights reserved. +深圳市赛元微电子有限公司 +版本号: V1.0 +日期: 2019.06.24 +--------------------------------------------------------------------------*/ +#ifndef _SC92F7003_H_ +#define _SC92F7003_H_ + +/* ------------------- 字节寄存器-------------------- */ +///*CPU*/ +sfr ACC = 0xE0; //累加器A +sfr B = 0xF0; //通用寄存器B +sfr PSW = 0xD0; //程序状态字 +sfr DPH = 0x83; //数据指针高8位 +sfr DPL = 0x82; //数据指针低8位 +sfr SP = 0x81; //堆栈指针 + + +/*system*/ +sfr PCON = 0x87; //电源管理控制寄存器 + +/*interrupt*/ +sfr IP1 = 0XB9; //中断优先级控制寄存器1 +sfr IP = 0xB8; //中断优先权控制寄存器 +sfr IE = 0xA8; //中断控制寄存器 +sfr IE1 = 0XA9; //中断控制寄存器1 + +/*PORT*/ +sfr P2PH = 0xA2; //P2口模式控制寄存器 +sfr P2CON = 0xA1; //P2口模式控制寄存器 +sfr P2 = 0xA0; //P2口数据寄存器 +sfr P1PH = 0x92; //P1口模式控制寄存器 +sfr P1CON = 0x91; //P1口模式控制寄存器 +sfr P1 = 0x90; //P1口数据寄存器 +sfr P0PH = 0x9B; //P0口模式控制寄存器 +sfr P0CON = 0x9A; //P0口模式控制寄存器 +sfr P0 = 0x80; //P0口数据寄存器 + +/*TIMER*/ +sfr TMCON = 0x8E; //定时器频率控制寄存器 +sfr TH1 = 0x8D; //定时器1高8位 +sfr TH0 = 0x8C; //定时器0高8位 +sfr TL1 = 0x8B; //定时器1低8位 +sfr TL0 = 0x8A; //定时器0低8位 +sfr TMOD = 0x89; //定时器工作模式寄存器 +sfr TCON = 0x88; //定时器控制寄存器 +sfr T2CON = 0xC8; //定时器2控制寄存器 +sfr T2MOD = 0xC9; //定时器2工作模式寄存器 +sfr RCAP2L = 0xCA; //定时器2重载/捕捉低8位 +sfr RCAP2H = 0xCB; //定时器2重载/捕捉高8位 +sfr TL2 = 0xCC; //定时器2低8位 +sfr TH2 = 0xCD; //定时器2高8位 + + +/*ADC*/ +sfr ADCCFG1 = 0xAA; //ADC功能配置寄存器0 +sfr ADCCFG0 = 0xAB; //ADC功能配置寄存器1 +sfr ADCCON = 0XAD; //ADC控制寄存器 +sfr ADCVL = 0xAE; //ADC 结果寄存器 +sfr ADCVH = 0xAF; //ADC 结果寄存器 + +/*PWM*/ +sfr PWMCFG = 0xD1; //PWM设置寄存器 +sfr PWMCON0 = 0xD2; //PWM控制寄存器 +sfr PWMPRD = 0xD3; //PWM周期设置寄存器 +sfr PWMDTYA = 0xD4; //PWM占空比设置寄存器A +sfr PWMDTY0 = 0xD5; //PWM0设置寄存器 +sfr PWMDTY1 = 0xD6; //PWM1设置寄存器 +sfr PWMDTY2 = 0xD7; //PWM2设置寄存器 +sfr PWMCON1 = 0xDA; //PWM控制寄存器 +sfr PWMDTYB = 0xDB; //PWM占空比设置寄存器B +sfr PWMDTY3 = 0xDC; //PWM3设置寄存器 +sfr PWMDTY4 = 0xDD; //PWM4设置寄存器 +sfr PWMDTY5 = 0xDE; //PWM5设置寄存器 +sfr PWMDTY6 = 0xDF; //PWM6设置寄存器 + + +// +///*WatchDog*/ +sfr BTMCON = 0XCE; //低频定时器控制寄存器 +sfr WDTCON = 0xCF; //WDT控制寄存器 + + +sfr OTCON = 0X8F; //输出控制寄存器 + +/*INT*/ +sfr INT0F = 0XBA; //INT0 下降沿中断控制寄存器 +sfr INT0R = 0XBB; //INT0 上降沿中断控制寄存器 +sfr INT1F = 0XBC; //INT1 下降沿中断控制寄存器 +sfr INT1R = 0XBD; //INT1 上降沿中断控制寄存器 +sfr INT2F = 0XC6; //INT2 下降沿中断控制寄存器 +sfr INT2R = 0XC7; //INT2 上降沿中断控制寄存器 + +/*IAP */ +sfr IAPCTL = 0xF6; //IAP控制寄存器 +sfr IAPDAT = 0xF5; //IAP数据寄存器 +sfr IAPADE = 0xF4; //IAP扩展地址寄存器 +sfr IAPADH = 0xF3; //IAP写入地址高位寄存器 +sfr IAPADL = 0xF2; //IAP写入地址低8位寄存器 +sfr IAPKEY = 0xF1; //IAP保护寄存器 + +/*uart0*/ +sfr SCON = 0X98; //uart控制寄存器 +sfr SBUF = 0X99; //uart0数据寄存器 + +/*三合一*/ +sfr SSCON0 = 0X9D; //SSI控制寄存器0 +sfr SSCON1 = 0X9E; //SSI控制寄存器1 +sfr SSCON2 = 0X95; //SSI控制寄存器2 +sfr SSDAT = 0X9F; //SSI数据寄存器 + +sfr OPINX = 0XFE; +sfr OPREG = 0XFF; + +/*Check Sum*/ +sfr CHKSUML = 0XFC; //Check Sum结果寄存器低位 +sfr CHKSUMH = 0XFD; //Check Sum结果寄存器高位 + +sfr OPERCON = 0xEF; //运算控制寄存器 + +///* ------------------- 位寄存器-------------------- */ +/*PSW*/ +sbit CY = PSW^7; //标志位 0:加法运算最高位无进位,或者减法运算最高位无借位时 1:加法运算最高位有进位,或者减法运算最高位有借位时 +sbit AC = PSW^6; //进位辅助标志位 0:无借位、进位 1:加法运算时在bit3位有进位,或减法运算在bit3位有借位时 +sbit F0 = PSW^5; //用户标志位 +sbit RS1 = PSW^4; //工作寄存器组选择位 +sbit RS0 = PSW^3; //工作寄存器组选择位 +sbit OV = PSW^2; //溢出标志位 +sbit F1 = PSW^1; //F1标志 +sbit P = PSW^0; //奇偶标志位 0:ACC中1的个数为偶数(包括0个) 1:ACC中1的个数为奇数 + +/*T2CON*/ +sbit TF2 = T2CON^7; +sbit EXF2 = T2CON^6; +sbit RCLK = T2CON^5; +sbit TCLK = T2CON^4; +sbit EXEN2 = T2CON^3; +sbit TR2 = T2CON^2; +sbit T2 = T2CON^1; +sbit CP = T2CON^0; + +/*IP*/ +sbit IPADC = IP^6; //ADC中断优先控制位 0:设定 ADC的中断优先权是 “低” 1:设定 ADC的中断优先权是 “高” +sbit IPT2 = IP^5; //Timer2中断优先控制位 0:设定 Timer2的中断优先权是 “低” 1:设定Timer2的中断优先权是 “高” +sbit IPUART = IP^4; //UART中断优先控制位 0:设定 UART的中断优先权是 “低” 1:设定UART的中断优先权是 “高” +sbit IPT1 = IP^3; //Timer1中断优先控制位 0:设定 Timer 1的中断优先权是 “低” 1:设定 Timer 1的中断优先权是 “高” +sbit IPINT1 = IP^2; //INT1中断优先控制位 0:设定 INT1中断优先权是 “低” 1:设定INT1的中断优先权是 “高” +sbit IPT0 = IP^1; //Timer0中断优先控制位 0:设定 Timer 0的中断优先权是 “低” 1:设定 Timer 0的中断优先权是 “高” +sbit IPINT0 = IP^0; //INT0中断优先控制位 0:设定 INT0中断优先权是 “低” 1:设定INT0的中断优先权是 “高” + +/*IE*/ +sbit EA = IE^7; //中断使能的总控制 0:关闭所有的中断 1:打开所有的中断 +sbit EADC = IE^6; //ADC中断使能控制 0:关闭ADC中断 1:打开ADC中断 +sbit ET2 = IE^5; //Timer2中断使能控制 0:关闭Timer2中断 1:打开Timer2中断 +sbit EUART = IE^4; //UART中断使能控制 0:关闭UART中断 1:打开UART中断 +sbit ET1 = IE^3; //Timer1中断使能控制 0:关闭TIMER1中断 1:打开TIMER1中断 +sbit EINT1 = IE^2; //INT1中断使能控制 0:关闭INT1中断 1:打开INT1中断 +sbit ET0 = IE^1; //Timer0中断使能控制 0:关闭TIMER0中断 1:打开TIMER0中断 +sbit EINT0 = IE^0; //INT0中断使能控制 0:关闭INT0中断 1:打开INT0中断 + +/*TCON*/ +sbit TF1 = TCON^7; //T1溢出中断请求标志位 T1产生溢出,发生中断时,硬件将TF1置为“1”,申请中断,CPU响应时,硬件清“0”。 +sbit TR1 = TCON^6; //定时器T1的运行控制位 0:Timer1禁止计数 1:Timer1开始计数 +sbit TF0 = TCON^5; //T0溢出中断请求标志位 T0产生溢出,发生中断时,硬件将TF0置为“1”,申请中断,CPU响应时,硬件清“0”。 +sbit TR0 = TCON^4; //定时器T0的运行控制位 0:Timer0禁止计数 1:Timer0开始计数 + +/*SCON*/ +sbit SM0 = SCON^7; +sbit SM1 = SCON^6; +sbit SM2 = SCON^5; +sbit REN = SCON^4; +sbit TB8 = SCON^3; +sbit RB8 = SCON^2; +sbit TI = SCON^1; +sbit RI = SCON^0; + +/* P0 */ +sbit P01 = P0^1; +sbit P00 = P0^0; + +/* P1 */ +sbit P17 = P1^7; +sbit P16 = P1^6; +sbit P15 = P1^5; +sbit P14 = P1^4; +sbit P13 = P1^3; +sbit P12 = P1^2; +sbit P11 = P1^1; +sbit P10 = P1^0; + +/* P2 */ +sbit P27 = P2^7; +sbit P26 = P2^6; +sbit P25 = P2^5; +sbit P24 = P2^4; +sbit P23 = P2^3; +sbit P22 = P2^2; +sbit P21 = P2^1; +sbit P20 = P2^0; + +#endif \ No newline at end of file diff --git a/CFG/SC92F8363B/Keil_Mould/FWLib/SC92F_Lib/inc/SC92F725X_C.H b/CFG/SC92F8363B/Keil_Mould/FWLib/SC92F_Lib/inc/SC92F725X_C.H new file mode 100644 index 0000000..8703946 --- /dev/null +++ b/CFG/SC92F8363B/Keil_Mould/FWLib/SC92F_Lib/inc/SC92F725X_C.H @@ -0,0 +1,209 @@ + /*-------------------------------------------------------------------------- +SC92F725x_C.H + +C Header file for SC92F725x microcontroller. +Copyright (c) 2018 Shenzhen SinOne Chip Electronic CO., Ltd. +All rights reserved. +深圳市赛元微电子有限公司 +版本号: V1.0 +日期: 2018.04.25 +--------------------------------------------------------------------------*/ +#ifndef _SC92F725x_H_ +#define _SC92F725x_H_ + +/* ------------------- 字节寄存器-------------------- */ +///*CPU*/ +sfr ACC = 0xE0; //累加器A +sfr B = 0xF0; //通用寄存器B +sfr PSW = 0xD0; //程序状态字 +sfr DPH = 0x83; //数据指针高8位 +sfr DPL = 0x82; //数据指针低8位 +sfr SP = 0x81; //堆栈指针 + +/*system*/ +sfr PCON = 0x87; //电源管理控制寄存器 + +/*interrupt*/ +sfr IP1 = 0XB9; //中断优先级控制寄存器1 +sfr IP = 0xB8; //中断优先权控制寄存器 +sfr IE = 0xA8; //中断控制寄存器 +sfr IE1 = 0XA9; //中断控制寄存器1 + +/*PORT*/ +sfr P2PH = 0xA2; //P2口模式控制寄存器0 +sfr P2CON = 0xA1; //P2口模式控制寄存器1 +sfr P2 = 0xA0; //P2口数据寄存器 +sfr P1PH = 0x92; //P1口模式控制寄存器0 +sfr P1CON = 0x91; //P1口模式控制寄存器1 +sfr P1 = 0x90; //P1口数据寄存器 +sfr P0PH = 0x9B; //P0口模式控制寄存器1 +sfr P0CON = 0x9A; //P0口模式控制寄存器1 +sfr P0 = 0x80; //P0口数据寄存器 +sfr IOHCON= 0x97; //IOH设置寄存器 + +/*TIMER*/ +sfr TMCON = 0x8E; //定时器频率控制寄存器 +sfr TH1 = 0x8D; //定时器1高8位 +sfr TH0 = 0x8C; //定时器0高8位 +sfr TL1 = 0x8B; //定时器1低8位 +sfr TL0 = 0x8A; //定时器0低8位 +sfr TMOD = 0x89; //定时器工作模式寄存器 +sfr TCON = 0x88; //定时器控制寄存器 +sfr T2CON = 0XC8; //定时器2控制寄存器 +sfr T2MOD = 0XC9; //定时器2工作模式寄存器 +sfr RCAP2L = 0XCA; //定时器2重载/捕捉低8位 +sfr RCAP2H = 0XCB; //定时器2重载/捕捉高8位 +sfr TL2 = 0XCC; //定时器2低8位 +sfr TH2 = 0XCD; //定时器2高8位 + + +/*ADC*/ +sfr ADCCFG0 = 0xAB; //P1口ADC功能配置寄存器/参考电压 +sfr ADCCFG1 = 0xAC; //P1口ADC功能配置寄存器/参考电压 +sfr ADCCON = 0XAD; //ADC控制寄存器 +sfr ADCVL = 0xAE; //ADC 结果寄存器 +sfr ADCVH = 0xAF; //ADC 结果寄存器 + +/*PWM*/ +sfr PWMCFG0 = 0xD1; //PWM设置寄存器 + +sfr PWMCON = 0xD2; //PWM控制寄存器 +sfr PWMPRD = 0xD3; //PWM周期设置寄存器 +sfr PWMCFG1 = 0xD4; //PWM设置寄存器 +sfr PWMDTY0 = 0xD5; //PWM占空比设置寄存器 +sfr PWMDTY1 = 0XD6; //PWM占空比设置寄存器 +sfr PWMDTY2 = 0XD7; //PWM占空比设置寄存器 +sfr PWMDTY3 = 0xDD; //PWM占空比设置寄存器 +sfr PWMDTY4 = 0XDE; //PWM占空比设置寄存器 +sfr PWMDTY5 = 0XDF; //PWM占空比设置寄存器 + +///*WatchDog*/ +sfr BTMCON = 0XCE; //低频定时器控制寄存器 +sfr WDTCON = 0xCF; //WDT控制寄存器 + +/*LCD*/ +sfr OTCON = 0X8F; //LCD电压输出控制寄存器 +sfr P0VO = 0X9C; //P0 LCD Bais 输出寄存器 + +/*INT*/ +sfr INT0F = 0XBA; //INT0 下降沿中断控制寄存器 +sfr INT0R = 0XBB; //INT0 上降沿中断控制寄存器 +sfr INT2F = 0XC6; //INT2 下降沿中断控制寄存器 +sfr INT2R = 0XC7; //INT2 上降沿中断控制寄存器 + +/*IAP */ +sfr IAPCTL = 0xF6; //IAP控制寄存器 +sfr IAPDAT = 0xF5; //IAP数据寄存器 +sfr IAPADE = 0xF4; //IAP扩展地址寄存器 +sfr IAPADH = 0xF3; //IAP写入地址高位寄存器 +sfr IAPADL = 0xF2; //IAP写入地址低8位寄存器 +sfr IAPKEY = 0xF1; //IAP保护寄存器 + +/*UART*/ +sfr SCON = 0X98; //串口控制寄存器 +sfr SBUF = 0X99; //串口数据缓存寄存器 + +/*option*/ +sfr OPINX = 0XFE; +sfr OPREG = 0XFF; + +///* ------------------- 位寄存器-------------------- */ + +/*PSW*/ +sbit CY = PSW^7; //标志位 0:加法运算最高位无进位,或者减法运算最高位无借位时 1:加法运算最高位有进位,或者减法运算最高位有借位时 +sbit AC = PSW^6; //进位辅助标志位 0:无借位、进位 1:加法运算时在bit3位有进位,或减法运算在bit3位有借位时 +sbit F0 = PSW^5; //用户标志位 +sbit RS1 = PSW^4; //工作寄存器组选择位 +sbit RS0 = PSW^3; //工作寄存器组选择位 +sbit OV = PSW^2; //溢出标志位 +sbit P = PSW^0; //奇偶标志位 0:ACC中1的个数为偶数(包括0个) 1:ACC中1的个数为奇数 + +/*T2CON*/ +sbit TF2 = T2CON^7; +sbit EXF2 = T2CON^6; +sbit RCLK = T2CON^5; +sbit TCLK = T2CON^4; +sbit EXEN2 = T2CON^3; +sbit TR2 = T2CON^2; +sbit T2 = T2CON^1; +sbit CP = T2CON^0; + + +/*IP*/ +sbit IPADC = IP^6; //ADC中断优先控制位 0:设定 ADC的中断优先权是 “低” 1:设定 ADC的中断优先权是 “高” +sbit IPT2 = IP^5; //Timer2中断优先控制位 0:设定 Timer2的中断优先权是 “低” 1:设定Timer2的中断优先权是 “高” +sbit IPUART = IP^4; //UART中断优先控制位 0:设定UART的中断优先权是 “低” 1:设定UART的中断优先权是 “高” +sbit IPT1 = IP^3; //Timer1中断优先控制位 0:设定 Timer 1的中断优先权是 “低” 1:设定 Timer 1的中断优先权是 “高” 1:设定INT0的中断优先权是 “高” +sbit IPT0 = IP^1; //Timer0中断优先控制位 0:设定 Timer 0的中断优先权是 “低” 1:设定 Timer 0的中断优先权是 “高” +sbit IPINT0 = IP^0; //INT0中断优先控制位 0:设定INT0中断优先权是 “低” 1:设定INT1的中断优先权是 “高” + +/*IE*/ +sbit EA = IE^7; //中断使能的总控制 0:关闭所有的中断 1:打开所有的中断 +sbit EADC = IE^6; //ADC中断使能控制 0:关闭ADC中断 1:打开ADC中断 +sbit ET2 = IE^5; //Timer2中断使能控制 0:关闭Timer2中断 1:打开Timer2中断 +sbit EUART = IE^4; //UART中断使能控制 0:关闭UART中断 1:打开UART中断 +sbit ET1 = IE^3; //Timer1中断使能控制 0:关闭TIMER1中断 1:打开TIMER1中断 +sbit ET0 = IE^1; //Timer0中断使能控制 0:关闭TIMER0中断 1:打开TIMER0中断 +sbit EINT0 = IE^0; //INT0中断使能控制 0:关闭INT1中断 1:打开INT1中断 + +/*TCON*/ +sbit TF1 = TCON^7; //T1溢出中断请求标志位 T1产生溢出,发生中断时,硬件将TF1置为“1”,申请中断,CPU响应时,硬件清“0”。 +sbit TR1 = TCON^6; //定时器T1的运行控制位 0:Timer1禁止计数 1:Timer1开始计数 +sbit TF0 = TCON^5; //T0溢出中断请求标志位 T0产生溢出,发生中断时,硬件将TF0置为“1”,申请中断,CPU响应时,硬件清“0”。 +sbit TR0 = TCON^4; //定时器T0的运行控制位 0:Timer0禁止计数 1:Timer0开始计数 + +/*SCON*/ +sbit SM0 = SCON^7; +sbit SM1 = SCON^6; +sbit SM2 = SCON^5; +sbit REN = SCON^4; +sbit TB8 = SCON^3; +sbit RB8 = SCON^2; +sbit TI = SCON^1; +sbit RI = SCON^0; + +/******************* P0 ****************** +*SC92F7252封装未引出的管脚:无 +*SC92F7251封装未引出的管脚:P04/P05 +*SC92F7250封装未引出的管脚:P0 +******************************************/ +sbit P05 = P0^5; +sbit P04 = P0^4; +sbit P03 = P0^3; +sbit P02 = P0^2; +sbit P01 = P0^1; +sbit P00 = P0^0; + +/******************* P1 ****************** +*SC92F7252封装未引出的管脚:无 +*SC92F7251封装未引出的管脚:无 +*SC92F7250封装未引出的管脚:P10/P11/P16/P17 +******************************************/ +sbit P17 = P1^7; +sbit P16 = P1^6; +sbit P13 = P1^3; +sbit P12 = P1^2; +sbit P11 = P1^1; +sbit P10 = P1^0; + +/******************* P2 ****************** +*SC92F7252封装未引出的管脚:无 +*SC92F7251封装未引出的管脚:P26/P27 +*SC92F7250封装未引出的管脚:P24/P25 +******************************************/ +sbit P27 = P2^7; +sbit P26 = P2^6; +sbit P25 = P2^5; +sbit P24 = P2^4; +sbit P21 = P2^1; +sbit P20 = P2^0; + +/**************************************************************************** +*注意:封装未引出的管脚,需设置为强推挽输出模式 +*IC选型:请根据所使用的IC型号,在初始化完IO口后,调用相对应的未引出管脚的IO口配置; +*如若选择SC92F7252,则不用调用宏定义。 +*****************************************************************************/ +#define SC92F7251_NIO_Init() {P0CON|=0xF0;P1CON|=0x30;P2CON|=0xCC;} //SC92F7251的未引出来的IO口配置 +#define SC92F7250_NIO_Init() {P0CON|=0xFF;P1CON|=0xF3;P2CON|=0x3C;} //SC92F7250的未引出来的IO口配置 + +#endif \ No newline at end of file diff --git a/CFG/SC92F8363B/Keil_Mould/FWLib/SC92F_Lib/inc/SC92F730x_C.H b/CFG/SC92F8363B/Keil_Mould/FWLib/SC92F_Lib/inc/SC92F730x_C.H new file mode 100644 index 0000000..5e3255f --- /dev/null +++ b/CFG/SC92F8363B/Keil_Mould/FWLib/SC92F_Lib/inc/SC92F730x_C.H @@ -0,0 +1,199 @@ + /*-------------------------------------------------------------------------- +SC92F730x_C.H + +C Header file for SC92F730x microcontroller. +Copyright (c) 2018 Shenzhen SinOne Chip Electronic CO., Ltd. +All rights reserved. +深圳市赛元微电子有限公司 +版本号: V1.0 +日期: 2018.11.23 +--------------------------------------------------------------------------*/ +#ifndef _SC92F730x_H_ +#define _SC92F730x_H_ + +/* ------------------- 字节寄存器-------------------- */ +///*CPU*/ +sfr ACC = 0xE0; //累加器A +sfr B = 0xF0; //通用寄存器B +sfr PSW = 0xD0; //程序状态字 +sfr DPH = 0x83; //数据指针高8位 +sfr DPL = 0x82; //数据指针低8位 +sfr SP = 0x81; //堆栈指针 + +/*system*/ +sfr PCON = 0x87; //电源管理控制寄存器 + +/*interrupt*/ +sfr IP1 = 0XB9; //中断优先级控制寄存器1 +sfr IP = 0xB8; //中断优先权控制寄存器 +sfr IE = 0xA8; //中断控制寄存器 +sfr IE1 = 0XA9; //中断控制寄存器1 + +/*PORT*/ +sfr P2PH = 0xA2; //P2口模式控制寄存器0 +sfr P2CON = 0xA1; //P2口模式控制寄存器1 +sfr P2 = 0xA0; //P2口数据寄存器 +sfr P1PH = 0x92; //P1口模式控制寄存器0 +sfr P1CON = 0x91; //P1口模式控制寄存器1 +sfr P1 = 0x90; //P1口数据寄存器 +sfr P0PH = 0x9B; //P0口模式控制寄存器1 +sfr P0CON = 0x9A; //P0口模式控制寄存器1 +sfr P0 = 0x80; //P0口数据寄存器 +sfr IOHCON= 0x97; //IOH设置寄存器 + +/*TIMER*/ +sfr TMCON = 0x8E; //定时器频率控制寄存器 +sfr TH1 = 0x8D; //定时器1高8位 +sfr TH0 = 0x8C; //定时器0高8位 +sfr TL1 = 0x8B; //定时器1低8位 +sfr TL0 = 0x8A; //定时器0低8位 +sfr TMOD = 0x89; //定时器工作模式寄存器 +sfr TCON = 0x88; //定时器控制寄存器 +sfr T2CON = 0XC8; //定时器2控制寄存器 +sfr T2MOD = 0XC9; //定时器2工作模式寄存器 +sfr RCAP2L = 0XCA; //定时器2重载/捕捉低8位 +sfr RCAP2H = 0XCB; //定时器2重载/捕捉高8位 +sfr TL2 = 0XCC; //定时器2低8位 +sfr TH2 = 0XCD; //定时器2高8位 + + +/*ADC*/ +sfr ADCCFG0 = 0xAB; //P1口ADC功能配置寄存器/参考电压 +sfr ADCCFG1 = 0xAC; //P1口ADC功能配置寄存器/参考电压 +sfr ADCCON = 0XAD; //ADC控制寄存器 +sfr ADCVL = 0xAE; //ADC 结果寄存器 +sfr ADCVH = 0xAF; //ADC 结果寄存器 + +/*PWM*/ +sfr PWMCFG0 = 0xD1; //PWM设置寄存器 + +sfr PWMCON = 0xD2; //PWM控制寄存器 +sfr PWMPRD = 0xD3; //PWM周期设置寄存器 +sfr PWMCFG1 = 0xD4; //PWM设置寄存器 +sfr PWMDTY0 = 0xD5; //PWM占空比设置寄存器 +sfr PWMDTY1 = 0XD6; //PWM占空比设置寄存器 +sfr PWMDTY2 = 0XD7; //PWM占空比设置寄存器 +sfr PWMDTY3 = 0xDD; //PWM占空比设置寄存器 +sfr PWMDTY4 = 0XDE; //PWM占空比设置寄存器 +sfr PWMDTY5 = 0XDF; //PWM占空比设置寄存器 + +///*WatchDog*/ +sfr BTMCON = 0XCE; //低频定时器控制寄存器 +sfr WDTCON = 0xCF; //WDT控制寄存器 + +/*LCD*/ +sfr OTCON = 0X8F; //LCD电压输出控制寄存器 +sfr P0VO = 0X9C; //P0 LCD Bais 输出寄存器 + +/*INT*/ +sfr INT0F = 0XBA; //INT0 下降沿中断控制寄存器 +sfr INT0R = 0XBB; //INT0 上降沿中断控制寄存器 +sfr INT2F = 0XC6; //INT2 下降沿中断控制寄存器 +sfr INT2R = 0XC7; //INT2 上降沿中断控制寄存器 + +/*IAP */ +sfr IAPCTL = 0xF6; //IAP控制寄存器 +sfr IAPDAT = 0xF5; //IAP数据寄存器 +sfr IAPADE = 0xF4; //IAP扩展地址寄存器 +sfr IAPADH = 0xF3; //IAP写入地址高位寄存器 +sfr IAPADL = 0xF2; //IAP写入地址低8位寄存器 +sfr IAPKEY = 0xF1; //IAP保护寄存器 + +/*UART*/ +sfr SCON = 0X98; //串口控制寄存器 +sfr SBUF = 0X99; //串口数据缓存寄存器 + +/*option*/ +sfr OPINX = 0XFE; +sfr OPREG = 0XFF; + +///* ------------------- 位寄存器-------------------- */ + +/*PSW*/ +sbit CY = PSW^7; //标志位 0:加法运算最高位无进位,或者减法运算最高位无借位时 1:加法运算最高位有进位,或者减法运算最高位有借位时 +sbit AC = PSW^6; //进位辅助标志位 0:无借位、进位 1:加法运算时在bit3位有进位,或减法运算在bit3位有借位时 +sbit F0 = PSW^5; //用户标志位 +sbit RS1 = PSW^4; //工作寄存器组选择位 +sbit RS0 = PSW^3; //工作寄存器组选择位 +sbit OV = PSW^2; //溢出标志位 +sbit P = PSW^0; //奇偶标志位 0:ACC中1的个数为偶数(包括0个) 1:ACC中1的个数为奇数 + +/*T2CON*/ +sbit TF2 = T2CON^7; +sbit EXF2 = T2CON^6; +sbit RCLK = T2CON^5; +sbit TCLK = T2CON^4; +sbit EXEN2 = T2CON^3; +sbit TR2 = T2CON^2; +sbit T2 = T2CON^1; +sbit CP = T2CON^0; + + +/*IP*/ +sbit IPADC = IP^6; //ADC中断优先控制位 0:设定 ADC的中断优先权是 “低” 1:设定 ADC的中断优先权是 “高” +sbit IPT2 = IP^5; //Timer2中断优先控制位 0:设定 Timer2的中断优先权是 “低” 1:设定Timer2的中断优先权是 “高” +sbit IPUART = IP^4; //UART中断优先控制位 0:设定UART的中断优先权是 “低” 1:设定UART的中断优先权是 “高” +sbit IPT1 = IP^3; //Timer1中断优先控制位 0:设定 Timer 1的中断优先权是 “低” 1:设定 Timer 1的中断优先权是 “高” 1:设定INT0的中断优先权是 “高” +sbit IPT0 = IP^1; //Timer0中断优先控制位 0:设定 Timer 0的中断优先权是 “低” 1:设定 Timer 0的中断优先权是 “高” +sbit IPINT0 = IP^0; //INT0中断优先控制位 0:设定INT0中断优先权是 “低” 1:设定INT1的中断优先权是 “高” + +/*IE*/ +sbit EA = IE^7; //中断使能的总控制 0:关闭所有的中断 1:打开所有的中断 +sbit EADC = IE^6; //ADC中断使能控制 0:关闭ADC中断 1:打开ADC中断 +sbit ET2 = IE^5; //Timer2中断使能控制 0:关闭Timer2中断 1:打开Timer2中断 +sbit EUART = IE^4; //UART中断使能控制 0:关闭UART中断 1:打开UART中断 +sbit ET1 = IE^3; //Timer1中断使能控制 0:关闭TIMER1中断 1:打开TIMER1中断 +sbit ET0 = IE^1; //Timer0中断使能控制 0:关闭TIMER0中断 1:打开TIMER0中断 +sbit EINT0 = IE^0; //INT0中断使能控制 0:关闭INT0中断 1:打开INT0中断 + +/*TCON*/ +sbit TF1 = TCON^7; //T1溢出中断请求标志位 T1产生溢出,发生中断时,硬件将TF1置为“1”,申请中断,CPU响应时,硬件清“0”。 +sbit TR1 = TCON^6; //定时器T1的运行控制位 0:Timer1禁止计数 1:Timer1开始计数 +sbit TF0 = TCON^5; //T0溢出中断请求标志位 T0产生溢出,发生中断时,硬件将TF0置为“1”,申请中断,CPU响应时,硬件清“0”。 +sbit TR0 = TCON^4; //定时器T0的运行控制位 0:Timer0禁止计数 1:Timer0开始计数 + +/*SCON*/ +sbit SM0 = SCON^7; +sbit SM1 = SCON^6; +sbit SM2 = SCON^5; +sbit REN = SCON^4; +sbit TB8 = SCON^3; +sbit RB8 = SCON^2; +sbit TI = SCON^1; +sbit RI = SCON^0; + +/******************* P0 ****************** +*SC92F7309封装未引出的管脚:无 +*SC92F7308封装未引出的管脚:P00/P01 +******************************************/ +sbit P03 = P0^3; +sbit P02 = P0^2; +sbit P01 = P0^1; +sbit P00 = P0^0; + +/******************* P1 ****************** +*SC92F7309封装未引出的管脚:无 +*SC92F7308封装未引出的管脚:P10/P11 +******************************************/ +sbit P13 = P1^3; +sbit P12 = P1^2; +sbit P11 = P1^1; +sbit P10 = P1^0; + +/******************* P2 ****************** +*SC92F7309封装未引出的管脚:无 +*SC92F7308封装未引出的管脚:无 +******************************************/ +sbit P27 = P2^7; +sbit P26 = P2^6; +sbit P21 = P2^1; +sbit P20 = P2^0; + +/**************************************************************************** +*注意:封装未引出的管脚,需设置为强推挽输出模式 +*IC选型:请根据所使用的IC型号,在初始化完IO口后,调用相对应的未引出管脚的IO口配置; +*****************************************************************************/ +#define SC92F7309_NIO_Init() {P0CON|=0xF0;P1CON|=0xF0;P2CON|=0x3C;} //SC92F7309的未引出来的IO口配置 +#define SC92F7308_NIO_Init() {P0CON|=0xF3;P1CON|=0xF3;P2CON|=0x3C;} //SC92F7308的未引出来的IO口配置 + +#endif \ No newline at end of file diff --git a/CFG/SC92F8363B/Keil_Mould/FWLib/SC92F_Lib/inc/SC92F732x_C.H b/CFG/SC92F8363B/Keil_Mould/FWLib/SC92F_Lib/inc/SC92F732x_C.H new file mode 100644 index 0000000..18f9a07 --- /dev/null +++ b/CFG/SC92F8363B/Keil_Mould/FWLib/SC92F_Lib/inc/SC92F732x_C.H @@ -0,0 +1,232 @@ + /*-------------------------------------------------------------------------- +SC92F732x_C.H + +C Header file for SC92F732x microcontroller. +Copyright (c) 2018 Shenzhen SinOne Chip Electronic CO., Ltd. +All rights reserved. +深圳市赛元微电子有限公司 +版本号: V1.0 +日期: 2018.04.25 +--------------------------------------------------------------------------*/ +#ifndef _SC92F732x_H_ +#define _SC92F732x_H_ + +/* ------------------- 字节寄存器-------------------- */ +///*CPU*/ +sfr ACC = 0xE0; //累加器A +sfr B = 0xF0; //通用寄存器B +sfr PSW = 0xD0; //程序状态字 +sfr DPH = 0x83; //数据指针高8位 +sfr DPL = 0x82; //数据指针低8位 +sfr SP = 0x81; //堆栈指针 + +/*system*/ +sfr PCON = 0x87; //电源管理控制寄存器 + +/*interrupt*/ +sfr IP1 = 0XB9; //中断优先级控制寄存器1 +sfr IP = 0xB8; //中断优先权控制寄存器 +sfr IE = 0xA8; //中断控制寄存器 +sfr IE1 = 0XA9; //中断控制寄存器1 + +/*PORT*/ +sfr P5PH = 0xDA; //P5口模式控制寄存器0 +sfr P5CON = 0xD9; //P5口模式控制寄存器1 +sfr P5 = 0xD8; //P5口数据寄存器 +sfr P2PH = 0xA2; //P2口模式控制寄存器0 +sfr P2CON = 0xA1; //P2口模式控制寄存器1 +sfr P2 = 0xA0; //P2口数据寄存器 +sfr P1PH = 0x92; //P1口模式控制寄存器0 +sfr P1CON = 0x91; //P1口模式控制寄存器1 +sfr P1 = 0x90; //P1口数据寄存器 +sfr P0PH = 0x9B; //P0口模式控制寄存器1 +sfr P0CON = 0x9A; //P0口模式控制寄存器1 +sfr P0 = 0x80; //P0口数据寄存器 +sfr IOHCON= 0x97; //IOH设置寄存器 + +/*TIMER*/ +sfr TMCON = 0x8E; //定时器频率控制寄存器 +sfr TH1 = 0x8D; //定时器1高8位 +sfr TH0 = 0x8C; //定时器0高8位 +sfr TL1 = 0x8B; //定时器1低8位 +sfr TL0 = 0x8A; //定时器0低8位 +sfr TMOD = 0x89; //定时器工作模式寄存器 +sfr TCON = 0x88; //定时器控制寄存器 +sfr T2CON = 0XC8; //定时器2控制寄存器 +sfr T2MOD = 0XC9; //定时器2工作模式寄存器 +sfr RCAP2L= 0XCA; //定时器2重载/捕捉低8位 +sfr RCAP2H= 0XCB; //定时器2重载/捕捉高8位 +sfr TL2 = 0XCC; //定时器2低8位 +sfr TH2 = 0XCD; //定时器2高8位 + + +/*ADC*/ +sfr ADCCFG0 = 0xAB; //P1口ADC功能配置寄存器/参考电压 +sfr ADCCFG1 = 0xAC; //P1口ADC功能配置寄存器/参考电压 +sfr ADCCON = 0XAD; //ADC控制寄存器 +sfr ADCVL = 0xAE; //ADC 结果寄存器 +sfr ADCVH = 0xAF; //ADC 结果寄存器 + +/*PWM*/ +sfr PWMCFG = 0xD1; //PWM设置寄存器 +sfr PWMCON = 0xD2; //PWM控制寄存器 +sfr PWMPRD = 0xD3; //PWM周期设置寄存器 +sfr PWMDTYA = 0xD4; //PWM高电平设置寄存器 +sfr PWMDTY0 = 0xD5; //PWM高电平设置寄存器 +sfr PWMDTY1 = 0XD6; //PWM高电平设置寄存器 +sfr PWMDTY2 = 0XD7; //PWM高电平设置寄存器 + +///*WatchDog*/ +sfr BTMCON = 0XCE; //低频定时器控制寄存器 +sfr WDTCON = 0xCF; //WDT控制寄存器 + +/*LCD*/ +sfr OTCON = 0X8F; //LCD电压输出控制寄存器 +sfr P0VO = 0X9C; //P0 LCD Bais 输出寄存器 + +/*INT*/ +sfr INT0F = 0XBA; //INT0 下降沿中断控制寄存器 +sfr INT0R = 0XBB; //INT0 上降沿中断控制寄存器 +sfr INT1F = 0XBC; //INT1 下降沿中断控制寄存器 +sfr INT1R = 0XBD; //INT1 上降沿中断控制寄存器 +sfr INT2F = 0XC6; //INT2 下降沿中断控制寄存器 +sfr INT2R = 0XC7; //INT2 上降沿中断控制寄存器 + +/*IAP */ +sfr IAPCTL = 0xF6; //IAP控制寄存器 +sfr IAPDAT = 0xF5; //IAP数据寄存器 +sfr IAPADE = 0xF4; //IAP扩展地址寄存器 +sfr IAPADH = 0xF3; //IAP写入地址高位寄存器 +sfr IAPADL = 0xF2; //IAP写入地址低8位寄存器 +sfr IAPKEY = 0xF1; //IAP保护寄存器 + +/*UART*/ +sfr SCON = 0X98; //串口控制寄存器 +sfr SBUF = 0X99; //串口数据缓存寄存器 + +/*option*/ +sfr OPINX = 0XFE; +sfr OPREG = 0XFF; + +///* ------------------- 位寄存器-------------------- */ + +/*PSW*/ +sbit CY = PSW^7; //标志位 0:加法运算最高位无进位,或者减法运算最高位无借位时 1:加法运算最高位有进位,或者减法运算最高位有借位时 +sbit AC = PSW^6; //进位辅助标志位 0:无借位、进位 1:加法运算时在bit3位有进位,或减法运算在bit3位有借位时 +sbit F0 = PSW^5; //用户标志位 +sbit RS1 = PSW^4; //工作寄存器组选择位 +sbit RS0 = PSW^3; //工作寄存器组选择位 +sbit OV = PSW^2; //溢出标志位 +sbit F1 = PSW^1; //F1标志 +sbit P = PSW^0; //奇偶标志位 0:ACC中1的个数为偶数(包括0个) 1:ACC中1的个数为奇数 + +/*T2CON*/ +sbit TF2 = T2CON^7; +sbit EXF2 = T2CON^6; +sbit RCLK = T2CON^5; +sbit TCLK = T2CON^4; +sbit EXEN2 = T2CON^3; +sbit TR2 = T2CON^2; +sbit T2 = T2CON^1; +sbit CP = T2CON^0; + + +/*IP*/ +sbit IPADC = IP^6; //ADC中断优先控制位 0:设定 ADC的中断优先权是 “低” 1:设定 ADC的中断优先权是 “高” +sbit IPT2 = IP^5; //Timer2中断优先控制位 0:设定 Timer2的中断优先权是 “低” 1:设定Timer2的中断优先权是 “高” +sbit IPUART = IP^4; //UART中断优先控制位 0:设定UART的中断优先权是 “低” 1:设定UART的中断优先权是 “高” +sbit IPT1 = IP^3; //Timer1中断优先控制位 0:设定 Timer 1的中断优先权是 “低” 1:设定 Timer 1的中断优先权是 “高” +sbit IPINT1 = IP^2; //INT1中断优先控制位 0:设定INT1中断优先权是 “低” 1:设定INT1的中断优先权是 “高” +sbit IPT0 = IP^1; //Timer0中断优先控制位 0:设定 Timer 0的中断优先权是 “低” 1:设定 Timer 0的中断优先权是 “高” +sbit IPINT0 = IP^0; //INT0中断优先控制位 0:设定INT0中断优先权是 “低” 1:设定INT0的中断优先权是 “高” + +/*IE*/ +sbit EA = IE^7; //中断使能的总控制 0:关闭所有的中断 1:打开所有的中断 +sbit EADC = IE^6; //ADC中断使能控制 0:关闭ADC中断 1:打开ADC中断 +sbit ET2 = IE^5; //Timer2中断使能控制 0:关闭Timer2中断 1:打开Timer2中断 +sbit EUART = IE^4; //UART中断使能控制 0:关闭UART中断 1:打开UART中断 +sbit ET1 = IE^3; //Timer1中断使能控制 0:关闭TIMER1中断 1:打开TIMER1中断 +sbit EINT1 = IE^2; //INT1中断使能控制 0:关闭INT1中断 1:打开INT1中断 +sbit ET0 = IE^1; //Timer0中断使能控制 0:关闭TIMER0中断 1:打开TIMER0中断 +sbit EINT0 = IE^0; //INT0中断使能控制 0:关闭INT0中断 1:打开INT0中断 + +/*TCON*/ +sbit TF1 = TCON^7; //T1溢出中断请求标志位 T1产生溢出,发生中断时,硬件将TF1置为“1”,申请中断,CPU响应时,硬件清“0”。 +sbit TR1 = TCON^6; //定时器T1的运行控制位 0:Timer1禁止计数 1:Timer1开始计数 +sbit TF0 = TCON^5; //T0溢出中断请求标志位 T0产生溢出,发生中断时,硬件将TF0置为“1”,申请中断,CPU响应时,硬件清“0”。 +sbit TR0 = TCON^4; //定时器T0的运行控制位 0:Timer0禁止计数 1:Timer0开始计数 + +/*SCON*/ +sbit SM0 = SCON^7; +sbit SM1 = SCON^6; +sbit SM2 = SCON^5; +sbit REN = SCON^4; +sbit TB8 = SCON^3; +sbit RB8 = SCON^2; +sbit TI = SCON^1; +sbit RI = SCON^0; + +/******************* P0 ****************** +*SC92F7323封装未引出的管脚:无 +*SC92F7322封装未引出的管脚:P06/P07 +*SC92F7321封装未引出的管脚:P04/P05/P06/P07 +*SC92F7320封装未引出的管脚:P0 +******************************************/ +sbit P07 = P0^7; +sbit P06 = P0^6; +sbit P05 = P0^5; +sbit P04 = P0^4; +sbit P03 = P0^3; +sbit P02 = P0^2; +sbit P01 = P0^1; +sbit P00 = P0^0; + +/************************ P1 ********************* +*SC92F7323封装未引出的管脚:无 +*SC92F7322封装未引出的管脚:P14/P15 +*SC92F7321封装未引出的管脚:P14/P15 +*SC92F7320封装未引出的管脚:P10/P11/P14/P15/P16/P17 +**************************************************/ +sbit P17 = P1^7; +sbit P16 = P1^6; +sbit P15 = P1^5; +sbit P14 = P1^4; +sbit P13 = P1^3; +sbit P12 = P1^2; +sbit P11 = P1^1; +sbit P10 = P1^0; + +/******************** P2 *******%********** +*SC92F7323封装未引出的管脚:无 +*SC92F7322封装未引出的管脚:P22/P23 +*SC92F7321封装未引出的管脚:P24/P25/P26/P27 +*SC92F7320封装未引出的管脚:P22/P23/P24/P25 +*********************************%*********/ +sbit P27 = P2^7; +sbit P26 = P2^6; +sbit P25 = P2^5; +sbit P24 = P2^4; +sbit P23 = P2^3; +sbit P22 = P2^2; +sbit P21 = P2^1; +sbit P20 = P2^0; + +/**************** P5 ************** +*SC92F7323封装未引出的管脚:无 +*SC92F7322封装未引出的管脚:P50/P51 +*SC92F7321封装未引出的管脚:P50/P51 +*SC92F7320封装未引出的管脚:P50/P51 +***********************************/ +sbit P51 = P5^1; +sbit P50 = P5^0; + +/**************************************************************************** +*注意:封装未引出的管脚,需设置为强推挽输出模式 +*IC选型:请根据所使用的IC型号,在初始化完IO口后,调用相对应的未引出管脚的IO口配置; +*如若选择SC92F7323,则不用调用宏定义。 +*****************************************************************************/ +#define SC92F7322_NIO_Init() {P0CON|=0xC0;P1CON|=0x30;P2CON|=0x0C;P5CON|=0x03;} //SC92F7322的未引出来的IO口配置 +#define SC92F7321_NIO_Init() {P0CON|=0xF0;P1CON|=0x30;P2CON|=0xF0;P5CON|=0x03;} //SC92F7321的未引出来的IO口配置 +#define SC92F7320_NIO_Init() {P0CON|=0xFF;P1CON|=0xF3;P2CON|=0x3C;P5CON|=0x03;} //SC92F7320的未引出来的IO口配置 + +#endif \ No newline at end of file diff --git a/CFG/SC92F8363B/Keil_Mould/FWLib/SC92F_Lib/inc/SC92F735x_C.H b/CFG/SC92F8363B/Keil_Mould/FWLib/SC92F_Lib/inc/SC92F735x_C.H new file mode 100644 index 0000000..1b062fb --- /dev/null +++ b/CFG/SC92F8363B/Keil_Mould/FWLib/SC92F_Lib/inc/SC92F735x_C.H @@ -0,0 +1,209 @@ + /*-------------------------------------------------------------------------- +SC92F735x_C.H + +C Header file for SC92F735x microcontroller. +Copyright (c) 2018 Shenzhen SinOne Chip Electronic CO., Ltd. +All rights reserved. +深圳市赛元微电子有限公司 +版本号: V1.0 +日期: 2018.04.25 +--------------------------------------------------------------------------*/ +#ifndef _SC92F735x_H_ +#define _SC92F735x_H_ + +/* ------------------- 字节寄存器-------------------- */ +///*CPU*/ +sfr ACC = 0xE0; //累加器A +sfr B = 0xF0; //通用寄存器B +sfr PSW = 0xD0; //程序状态字 +sfr DPH = 0x83; //数据指针高8位 +sfr DPL = 0x82; //数据指针低8位 +sfr SP = 0x81; //堆栈指针 + +/*system*/ +sfr PCON = 0x87; //电源管理控制寄存器 + +/*interrupt*/ +sfr IP1 = 0XB9; //中断优先级控制寄存器1 +sfr IP = 0xB8; //中断优先权控制寄存器 +sfr IE = 0xA8; //中断控制寄存器 +sfr IE1 = 0XA9; //中断控制寄存器1 + +/*PORT*/ +sfr P2PH = 0xA2; //P2口模式控制寄存器0 +sfr P2CON = 0xA1; //P2口模式控制寄存器1 +sfr P2 = 0xA0; //P2口数据寄存器 +sfr P1PH = 0x92; //P1口模式控制寄存器0 +sfr P1CON = 0x91; //P1口模式控制寄存器1 +sfr P1 = 0x90; //P1口数据寄存器 +sfr P0PH = 0x9B; //P0口模式控制寄存器1 +sfr P0CON = 0x9A; //P0口模式控制寄存器1 +sfr P0 = 0x80; //P0口数据寄存器 +sfr IOHCON= 0x97; //IOH设置寄存器 + +/*TIMER*/ +sfr TMCON = 0x8E; //定时器频率控制寄存器 +sfr TH1 = 0x8D; //定时器1高8位 +sfr TH0 = 0x8C; //定时器0高8位 +sfr TL1 = 0x8B; //定时器1低8位 +sfr TL0 = 0x8A; //定时器0低8位 +sfr TMOD = 0x89; //定时器工作模式寄存器 +sfr TCON = 0x88; //定时器控制寄存器 +sfr T2CON = 0XC8; //定时器2控制寄存器 +sfr T2MOD = 0XC9; //定时器2工作模式寄存器 +sfr RCAP2L = 0XCA; //定时器2重载/捕捉低8位 +sfr RCAP2H = 0XCB; //定时器2重载/捕捉高8位 +sfr TL2 = 0XCC; //定时器2低8位 +sfr TH2 = 0XCD; //定时器2高8位 + + +/*ADC*/ +sfr ADCCFG0 = 0xAB; //P1口ADC功能配置寄存器/参考电压 +sfr ADCCFG1 = 0xAC; //P1口ADC功能配置寄存器/参考电压 +sfr ADCCON = 0XAD; //ADC控制寄存器 +sfr ADCVL = 0xAE; //ADC 结果寄存器 +sfr ADCVH = 0xAF; //ADC 结果寄存器 + +/*PWM*/ +sfr PWMCFG0 = 0xD1; //PWM设置寄存器 + +sfr PWMCON = 0xD2; //PWM控制寄存器 +sfr PWMPRD = 0xD3; //PWM周期设置寄存器 +sfr PWMCFG1 = 0xD4; //PWM设置寄存器 +sfr PWMDTY0 = 0xD5; //PWM占空比设置寄存器 +sfr PWMDTY1 = 0XD6; //PWM占空比设置寄存器 +sfr PWMDTY2 = 0XD7; //PWM占空比设置寄存器 +sfr PWMDTY3 = 0xDD; //PWM占空比设置寄存器 +sfr PWMDTY4 = 0XDE; //PWM占空比设置寄存器 +sfr PWMDTY5 = 0XDF; //PWM占空比设置寄存器 + +///*WatchDog*/ +sfr BTMCON = 0XCE; //低频定时器控制寄存器 +sfr WDTCON = 0xCF; //WDT控制寄存器 + +/*LCD*/ +sfr OTCON = 0X8F; //LCD电压输出控制寄存器 +sfr P0VO = 0X9C; //P0 LCD Bais 输出寄存器 + +/*INT*/ +sfr INT0F = 0XBA; //INT0 下降沿中断控制寄存器 +sfr INT0R = 0XBB; //INT0 上降沿中断控制寄存器 +sfr INT2F = 0XC6; //INT2 下降沿中断控制寄存器 +sfr INT2R = 0XC7; //INT2 上降沿中断控制寄存器 + +/*IAP */ +sfr IAPCTL = 0xF6; //IAP控制寄存器 +sfr IAPDAT = 0xF5; //IAP数据寄存器 +sfr IAPADE = 0xF4; //IAP扩展地址寄存器 +sfr IAPADH = 0xF3; //IAP写入地址高位寄存器 +sfr IAPADL = 0xF2; //IAP写入地址低8位寄存器 +sfr IAPKEY = 0xF1; //IAP保护寄存器 + +/*UART*/ +sfr SCON = 0X98; //串口控制寄存器 +sfr SBUF = 0X99; //串口数据缓存寄存器 + +/*option*/ +sfr OPINX = 0XFE; +sfr OPREG = 0XFF; + +///* ------------------- 位寄存器-------------------- */ + +/*PSW*/ +sbit CY = PSW^7; //标志位 0:加法运算最高位无进位,或者减法运算最高位无借位时 1:加法运算最高位有进位,或者减法运算最高位有借位时 +sbit AC = PSW^6; //进位辅助标志位 0:无借位、进位 1:加法运算时在bit3位有进位,或减法运算在bit3位有借位时 +sbit F0 = PSW^5; //用户标志位 +sbit RS1 = PSW^4; //工作寄存器组选择位 +sbit RS0 = PSW^3; //工作寄存器组选择位 +sbit OV = PSW^2; //溢出标志位 +sbit P = PSW^0; //奇偶标志位 0:ACC中1的个数为偶数(包括0个) 1:ACC中1的个数为奇数 + +/*T2CON*/ +sbit TF2 = T2CON^7; +sbit EXF2 = T2CON^6; +sbit RCLK = T2CON^5; +sbit TCLK = T2CON^4; +sbit EXEN2 = T2CON^3; +sbit TR2 = T2CON^2; +sbit T2 = T2CON^1; +sbit CP = T2CON^0; + + +/*IP*/ +sbit IPADC = IP^6; //ADC中断优先控制位 0:设定 ADC的中断优先权是 “低” 1:设定 ADC的中断优先权是 “高” +sbit IPT2 = IP^5; //Timer2中断优先控制位 0:设定 Timer2的中断优先权是 “低” 1:设定Timer2的中断优先权是 “高” +sbit IPUART = IP^4; //UART中断优先控制位 0:设定UART的中断优先权是 “低” 1:设定UART的中断优先权是 “高” +sbit IPT1 = IP^3; //Timer1中断优先控制位 0:设定 Timer 1的中断优先权是 “低” 1:设定 Timer 1的中断优先权是 “高” 1:设定INT0的中断优先权是 “高” +sbit IPT0 = IP^1; //Timer0中断优先控制位 0:设定 Timer 0的中断优先权是 “低” 1:设定 Timer 0的中断优先权是 “高” +sbit IPINT0 = IP^0; //INT0中断优先控制位 0:设定INT0中断优先权是 “低” 1:设定INT1的中断优先权是 “高” + +/*IE*/ +sbit EA = IE^7; //中断使能的总控制 0:关闭所有的中断 1:打开所有的中断 +sbit EADC = IE^6; //ADC中断使能控制 0:关闭ADC中断 1:打开ADC中断 +sbit ET2 = IE^5; //Timer2中断使能控制 0:关闭Timer2中断 1:打开Timer2中断 +sbit EUART = IE^4; //UART中断使能控制 0:关闭UART中断 1:打开UART中断 +sbit ET1 = IE^3; //Timer1中断使能控制 0:关闭TIMER1中断 1:打开TIMER1中断 +sbit ET0 = IE^1; //Timer0中断使能控制 0:关闭TIMER0中断 1:打开TIMER0中断 +sbit EINT0 = IE^0; //INT0中断使能控制 0:关闭INT0中断 1:打开INT0中断 + +/*TCON*/ +sbit TF1 = TCON^7; //T1溢出中断请求标志位 T1产生溢出,发生中断时,硬件将TF1置为“1”,申请中断,CPU响应时,硬件清“0”。 +sbit TR1 = TCON^6; //定时器T1的运行控制位 0:Timer1禁止计数 1:Timer1开始计数 +sbit TF0 = TCON^5; //T0溢出中断请求标志位 T0产生溢出,发生中断时,硬件将TF0置为“1”,申请中断,CPU响应时,硬件清“0”。 +sbit TR0 = TCON^4; //定时器T0的运行控制位 0:Timer0禁止计数 1:Timer0开始计数 + +/*SCON*/ +sbit SM0 = SCON^7; +sbit SM1 = SCON^6; +sbit SM2 = SCON^5; +sbit REN = SCON^4; +sbit TB8 = SCON^3; +sbit RB8 = SCON^2; +sbit TI = SCON^1; +sbit RI = SCON^0; + +/******************* P0 ****************** +*SC92F7352封装未引出的管脚:无 +*SC92F7351封装未引出的管脚:P04/P05 +*SC92F7350封装未引出的管脚:P0 +******************************************/ +sbit P05 = P0^5; +sbit P04 = P0^4; +sbit P03 = P0^3; +sbit P02 = P0^2; +sbit P01 = P0^1; +sbit P00 = P0^0; + +/******************* P1 ****************** +*SC92F7352封装未引出的管脚:无 +*SC92F7351封装未引出的管脚:无 +*SC92F7350封装未引出的管脚:P10/P11/P16/P17 +******************************************/ +sbit P17 = P1^7; +sbit P16 = P1^6; +sbit P13 = P1^3; +sbit P12 = P1^2; +sbit P11 = P1^1; +sbit P10 = P1^0; + +/******************* P2 ****************** +*SC92F7352封装未引出的管脚:无 +*SC92F7351封装未引出的管脚:P26/P27 +*SC92F7350封装未引出的管脚:P24/P25 +******************************************/ +sbit P27 = P2^7; +sbit P26 = P2^6; +sbit P25 = P2^5; +sbit P24 = P2^4; +sbit P21 = P2^1; +sbit P20 = P2^0; + +/**************************************************************************** +*注意:封装未引出的管脚,需设置为强推挽输出模式 +*IC选型:请根据所使用的IC型号,在初始化完IO口后,调用相对应的未引出管脚的IO口配置; +*如若选择SC92F7352,则不用调用宏定义。 +*****************************************************************************/ +#define SC92F7351_NIO_Init() {P0CON|=0xF0;P1CON|=0x30;P2CON|=0xCC;} //SC92F7351的未引出来的IO口配置 +#define SC92F7350_NIO_Init() {P0CON|=0xFF;P1CON|=0xF3;P2CON|=0x3C;} //SC92F7350的未引出来的IO口配置 + +#endif \ No newline at end of file diff --git a/CFG/SC92F8363B/Keil_Mould/FWLib/SC92F_Lib/inc/SC92F736xB_C.H b/CFG/SC92F8363B/Keil_Mould/FWLib/SC92F_Lib/inc/SC92F736xB_C.H new file mode 100644 index 0000000..7ece2bf --- /dev/null +++ b/CFG/SC92F8363B/Keil_Mould/FWLib/SC92F_Lib/inc/SC92F736xB_C.H @@ -0,0 +1,252 @@ + /*-------------------------------------------------------------------------- +SC92F746xB_C.H + +C Header file for SC92F736xB microcontroller. +Copyright (c) 2018 Shenzhen SinOne Chip Electronic CO., Ltd. +All rights reserved. +深圳市赛元微电子有限公司 +版本号: V1.0 +日期: 2018.06.15 +--------------------------------------------------------------------------*/ +#ifndef _SC92F736xB_H_ +#define _SC92F736xB_H_ + +/* ------------------- 字节寄存器-------------------- */ +///*CPU*/ +sfr ACC = 0xE0; //累加器A +sfr B = 0xF0; //通用寄存器B +sfr PSW = 0xD0; //程序状态字 +sfr DPH = 0x83; //数据指针高8位 +sfr DPL = 0x82; //数据指针低8位 +sfr SP = 0x81; //堆栈指针 + + +/*system*/ +sfr PCON = 0x87; //电源管理控制寄存器 + +/*interrupt*/ +sfr IP1 = 0XB9; //中断优先级控制寄存器1 +sfr IP = 0xB8; //中断优先权控制寄存器 +sfr IE = 0xA8; //中断控制寄存器 +sfr IE1 = 0XA9; //中断控制寄存器1 + +/*PORT*/ +sfr P5PH = 0xDA; //P5口模式控制寄存器 +sfr P5CON = 0xD9; //P5口模式控制寄存器 +sfr P5 = 0xD8; //P5口数据寄存器 +sfr P2PH = 0xA2; //P2口模式控制寄存器 +sfr P2CON = 0xA1; //P2口模式控制寄存器 +sfr P2 = 0xA0; //P2口数据寄存器 +sfr P1PH = 0x92; //P1口模式控制寄存器 +sfr P1CON = 0x91; //P1口模式控制寄存器 +sfr P1 = 0x90; //P1口数据寄存器 +sfr P0PH = 0x9B; //P0口模式控制寄存器 +sfr P0CON = 0x9A; //P0口模式控制寄存器 +sfr P0 = 0x80; //P0口数据寄存器 +sfr IOHCON = 0x97; //IOH设置寄存器 + +/*TIMER*/ +sfr TMCON = 0x8E; //定时器频率控制寄存器 +sfr TH1 = 0x8D; //定时器1高8位 +sfr TH0 = 0x8C; //定时器0高8位 +sfr TL1 = 0x8B; //定时器1低8位 +sfr TL0 = 0x8A; //定时器0低8位 +sfr TMOD = 0x89; //定时器工作模式寄存器 +sfr TCON = 0x88; //定时器控制寄存器 +sfr T2CON = 0xC8; //定时器2控制寄存器 +sfr T2MOD = 0xC9; //定时器2工作模式寄存器 +sfr RCAP2L = 0xCA; //定时器2重载/捕捉低8位 +sfr RCAP2H = 0xCB; //定时器2重载/捕捉高8位 +sfr16 RCAP2 = 0xCA; +sfr TL2 = 0xCC; //定时器2低8位 +sfr TH2 = 0xCD; //定时器2高8位 + + +/*ADC*/ +sfr ADCCFG0 = 0xAB; //ADC功能配置寄存器0 +sfr ADCCFG1 = 0xAC; //ADC功能配置寄存器1 +sfr ADCCFG2 = 0XAA; //ADC功能配置寄存器2 +sfr ADCCON = 0XAD; //ADC控制寄存器 +sfr ADCVL = 0xAE; //ADC 结果寄存器 +sfr ADCVH = 0xAF; //ADC 结果寄存器 + +/*PWM*/ +sfr PWMCFG = 0xD1; //PWM设置寄存器 +sfr PWMCON = 0xD2; //PWM控制寄存器 +sfr PWMPRD = 0xD3; //PWM周期设置寄存器 +sfr PWMDTYA = 0xD4; //PWM占空比设置寄存器A +sfr PWMDTY0 = 0xD5; //PWM0设置寄存器 +sfr PWMDTY1 = 0xD6; //PWM1设置寄存器 +sfr PWMDTY2 = 0xD7; //PWM2设置寄存器 +sfr PWMDTYB = 0xDC; //PWM占空比设置寄存器B +sfr PWMDTY3 = 0xDD; //PWM3设置寄存器 +sfr PWMDTY4 = 0xDE; //PWM4设置寄存器 +sfr PWMDTY5 = 0xDF; //PWM5设置寄存器 + +///*WatchDog*/ +sfr BTMCON = 0XCE; //低频定时器控制寄存器 +sfr WDTCON = 0xCF; //WDT控制寄存器 + +/*LCD*/ +sfr OTCON = 0X8F; //LCD电压输出控制寄存器 +sfr P0VO = 0X9C; //P0 LCD Bais 输出寄存器 + +/*INT*/ +sfr INT0F = 0XBA; //INT0 下降沿中断控制寄存器 +sfr INT0R = 0XBB; //INT0 上降沿中断控制寄存器 +sfr INT1F = 0XBC; //INT1 下降沿中断控制寄存器 +sfr INT1R = 0XBD; //INT1 上降沿中断控制寄存器 +sfr INT2F = 0XC6; //INT2 下降沿中断控制寄存器 +sfr INT2R = 0XC7; //INT2 上降沿中断控制寄存器 + +/*IAP */ +sfr IAPCTL = 0xF6; //IAP控制寄存器 +sfr IAPDAT = 0xF5; //IAP数据寄存器 +sfr IAPADE = 0xF4; //IAP扩展地址寄存器 +sfr IAPADH = 0xF3; //IAP写入地址高位寄存器 +sfr IAPADL = 0xF2; //IAP写入地址低8位寄存器 +sfr IAPKEY = 0xF1; //IAP保护寄存器 + +/*uart*/ +sfr SCON = 0x98; //串口控制寄存器 +sfr SBUF = 0x99; //串口数据缓存寄存器 + +/*三合一*/ +sfr SSCON0 = 0X9D; //SPI控制寄存器0 +sfr SSCON1 = 0X9E; //SPI控制寄存器1 +sfr SSCON2 = 0X95; //SPI控制寄存器2 +sfr SSDAT = 0X9F; //SPI数据寄存器 + +sfr OPINX = 0XFE; +sfr OPREG = 0XFF; +sfr EXADH = 0XF7; + +/*Check Sum*/ +sfr CHKSUML = 0XFC; //Check Sum结果寄存器低位 +sfr CHKSUMH = 0XFD; //Check Sum结果寄存器高位 + +/*乘除法*/ +sfr EXA0 = 0xE9; //扩展累加器0 +sfr EXA1 = 0xEA; //扩展累加器1 +sfr EXA2 = 0xEB; //扩展累加器2 +sfr EXA3 = 0xEC; //扩展累加器3 +sfr EXBL = 0xED; //扩展B寄存器0 +sfr EXBH = 0xEE; //扩展B寄存器1 +sfr OPERCON = 0xEF; //运算控制寄存器 + +/* ------------------- 位寄存器-------------------- */ +/*PSW*/ +sbit CY = PSW^7; //标志位 0:加法运算最高位无进位,或者减法运算最高位无借位时 1:加法运算最高位有进位,或者减法运算最高位有借位时 +sbit AC = PSW^6; //进位辅助标志位 0:无借位、进位 1:加法运算时在bit3位有进位,或减法运算在bit3位有借位时 +sbit F0 = PSW^5; //用户标志位 +sbit RS1 = PSW^4; //工作寄存器组选择位 +sbit RS0 = PSW^3; //工作寄存器组选择位 +sbit OV = PSW^2; //溢出标志位 +sbit F1 = PSW^1; //F1标志 +sbit P = PSW^0; //奇偶标志位 0:ACC中1的个数为偶数(包括0个) 1:ACC中1的个数为奇数 + +/*T2CON*/ +sbit TF2 = T2CON^7; +sbit EXF2 = T2CON^6; +sbit RCLK = T2CON^5; +sbit TCLK = T2CON^4; +sbit EXEN2 = T2CON^3; +sbit TR2 = T2CON^2; +sbit T2 = T2CON^1; +sbit CP = T2CON^0; + + +/*IP*/ +sbit IPADC = IP^6; //ADC中断优先控制位 0:设定 ADC的中断优先权是 “低” 1:设定 ADC的中断优先权是 “高” +sbit IPT2 = IP^5; //Timer2中断优先控制位 0:设定 Timer2的中断优先权是 “低” 1:设定Timer2的中断优先权是 “高” +sbit IPUART = IP^4; //UART中断优先控制位 0:设定UART的中断优先权是 “低” 1:设定UART的中断优先权是 “高” +sbit IPT1 = IP^3; //Timer1中断优先控制位 0:设定 Timer 1的中断优先权是 “低” 1:设定 Timer 1的中断优先权是 “高” 1:设定INT0的中断优先权是 “高” +sbit IPINT1 = IP^2; //INT1中断优先控制位 0:设定INT1中断优先权是 “低” 1:设定INT1的中断优先权是 “高” +sbit IPT0 = IP^1; //Timer0中断优先控制位 0:设定 Timer 0的中断优先权是 “低” 1:设定 Timer 0的中断优先权是 “高” +sbit IPINT0 = IP^0; //INT0中断优先控制位 0:设定INT0中断优先权是 “低” 1:设定INT0的中断优先权是 “高” + +/*IE*/ +sbit EA = IE^7; //中断使能的总控制 0:关闭所有的中断 1:打开所有的中断 +sbit EADC = IE^6; //ADC中断使能控制 0:关闭ADC中断 1:打开ADC中断 +sbit ET2 = IE^5; //Timer2中断使能控制 0:关闭Timer2中断 1:打开Timer2中断 +sbit EUART = IE^4; //UART中断使能控制 0:关闭UART中断 1:打开UART中断 +sbit ET1 = IE^3; //Timer1中断使能控制 0:关闭TIMER1中断 1:打开TIMER1中断 +sbit EINT1 = IE^2; //INT1中断使能控制 0:关闭INT1中断 1:打开INT1中断 +sbit ET0 = IE^1; //Timer0中断使能控制 0:关闭TIMER0中断 1:打开TIMER0中断 +sbit EINT0 = IE^0; //INT0中断使能控制 0:关闭INT0中断 1:打开INT0中断 + +/*TCON*/ +sbit TF1 = TCON^7; //T1溢出中断请求标志位 T1产生溢出,发生中断时,硬件将TF1置为“1”,申请中断,CPU响应时,硬件清“0”。 +sbit TR1 = TCON^6; //定时器T1的运行控制位 0:Timer1禁止计数 1:Timer1开始计数 +sbit TF0 = TCON^5; //T0溢出中断请求标志位 T0产生溢出,发生中断时,硬件将TF0置为“1”,申请中断,CPU响应时,硬件清“0”。 +sbit TR0 = TCON^4; //定时器T0的运行控制位 0:Timer0禁止计数 1:Timer0开始计数 + +/*SCON*/ +sbit SM0 = SCON^7; +sbit SM1 = SCON^6; +sbit SM2 = SCON^5; +sbit REN = SCON^4; +sbit TB8 = SCON^3; +sbit RB8 = SCON^2; +sbit TI = SCON^1; +sbit RI = SCON^0; + +/******************* P0 ****************** +*SC92F7363B封装未引出的管脚:无 +*SC92F736B封装未引出的管脚:P06/P07 +*SC92F7361B封装未引出的管脚:P02/P03/P04/P06/P07 +******************************************/ +sbit P07 = P0^7; +sbit P06 = P0^6; +sbit P05 = P0^5; +sbit P04 = P0^4; +sbit P03 = P0^3; +sbit P02 = P0^2; +sbit P01 = P0^1; +sbit P00 = P0^0; + +/******************* P1 ****************** +*SC92F7363B封装未引出的管脚:无 +*SC92F7362B封装未引出的管脚:P16/P17 +*SC92F7361B封装未引出的管脚:P16/P17 +******************************************/ +sbit P17 = P1^7; +sbit P16 = P1^6; +sbit P15 = P1^5; +sbit P14 = P1^4; +sbit P13 = P1^3; +sbit P12 = P1^2; +sbit P11 = P1^1; +sbit P10 = P1^0; + +/******************* P2 ****************** +*SC92F7363B封装未引出的管脚:无 +*SC92F7362B封装未引出的管脚:P22/P23 +*SC92F7361B封装未引出的管脚:P22/P23/P27 +******************************************/ +sbit P27 = P2^7; +sbit P26 = P2^6; +sbit P25 = P2^5; +sbit P24 = P2^4; +sbit P23 = P2^3; +sbit P22 = P2^2; +sbit P21 = P2^1; +sbit P20 = P2^0; + +/******************* P5 ****************** +*SC92F7363B封装未引出的管脚:无 +*SC92F7362B封装未引出的管脚:P50/P51 +*SC92F7361B封装未引出的管脚:P50/P51 +******************************************/ +sbit P51 = P5^1; +sbit P50 = P5^0; + +/**************************************************************************** +*注意:封装未引出的管脚,需设置为强推挽输出模式 +*IC选型:请根据所使用的IC型号,在初始化完IO口后,调用相对应的未引出管脚的IO口配置; +*如若选择SC92F7363B,则不用调用宏定义。 +*****************************************************************************/ +#define SC92F7362B_NIO_Init() {P0CON|=0xC0,P1CON|=0xC0,P2CON|=0x0C,P5CON|=0x03;} //SC92F7362B的未引出来的IO口配置 +#define SC92F7361B_NIO_Init() {P0CON|=0xEC,P1CON|=0xC0,P2CON|=0x8C,P5CON|=0x03;} //SC92F7361B的未引出来的IO口配置 + +#endif \ No newline at end of file diff --git a/CFG/SC92F8363B/Keil_Mould/FWLib/SC92F_Lib/inc/SC92F740x_C.H b/CFG/SC92F8363B/Keil_Mould/FWLib/SC92F_Lib/inc/SC92F740x_C.H new file mode 100644 index 0000000..76a2903 --- /dev/null +++ b/CFG/SC92F8363B/Keil_Mould/FWLib/SC92F_Lib/inc/SC92F740x_C.H @@ -0,0 +1,222 @@ + /*-------------------------------------------------------------------------- +SC92F740x_C.H + +C Header file for SC92F740x microcontroller. +Copyright (c) 2019 Shenzhen SinOne Chip Electronic CO., Ltd. +All rights reserved. +深圳市赛元微电子有限公司 +版本号: V1.0 +日期: 2019.10.31 +--------------------------------------------------------------------------*/ +#ifndef _SC92F740x_H_ +#define _SC92F740x_H_ + +/* ------------------- 字节寄存器-------------------- */ +///*CPU*/ +sfr ACC = 0xE0; //累加器A +sfr B = 0xF0; //通用寄存器B +sfr PSW = 0xD0; //程序状态字 +sfr DPH = 0x83; //数据指针高8位 +sfr DPL = 0x82; //数据指针低8位 +sfr SP = 0x81; //堆栈指针 + + +/*system*/ +sfr PCON = 0x87; //电源管理控制寄存器 + +/*interrupt*/ +sfr IP1 = 0XB9; //中断优先级控制寄存器1 +sfr IP = 0xB8; //中断优先权控制寄存器 +sfr IE = 0xA8; //中断控制寄存器 +sfr IE1 = 0XA9; //中断控制寄存器1 + +/*PORT*/ +sfr P2PH = 0xA2; //P2口模式控制寄存器 +sfr P2CON = 0xA1; //P2口模式控制寄存器 +sfr P2 = 0xA0; //P2口数据寄存器 +sfr P1PH = 0x92; //P1口模式控制寄存器 +sfr P1CON = 0x91; //P1口模式控制寄存器 +sfr P1 = 0x90; //P1口数据寄存器 +sfr P0PH = 0x9B; //P0口模式控制寄存器 +sfr P0CON = 0x9A; //P0口模式控制寄存器 +sfr P0 = 0x80; //P0口数据寄存器 + +/*TIMER*/ +sfr TMCON = 0x8E; //定时器频率控制寄存器 +sfr TH1 = 0x8D; //定时器1高8位 +sfr TH0 = 0x8C; //定时器0高8位 +sfr TL1 = 0x8B; //定时器1低8位 +sfr TL0 = 0x8A; //定时器0低8位 +sfr TMOD = 0x89; //定时器工作模式寄存器 +sfr TCON = 0x88; //定时器控制寄存器 +sfr T2CON = 0xC8; //定时器2控制寄存器 +sfr T2MOD = 0xC9; //定时器2工作模式寄存器 +sfr RCAP2L = 0xCA; //定时器2重载/捕捉低8位 +sfr RCAP2H = 0xCB; //定时器2重载/捕捉高8位 +sfr TL2 = 0xCC; //定时器2低8位 +sfr TH2 = 0xCD; //定时器2高8位 + + +/*ADC*/ +sfr ADCCFG1 = 0xAA; //ADC功能配置寄存器0 +sfr ADCCFG0 = 0xAB; //ADC功能配置寄存器1 +sfr ADCCON = 0XAD; //ADC控制寄存器 +sfr ADCVL = 0xAE; //ADC 结果寄存器 +sfr ADCVH = 0xAF; //ADC 结果寄存器 + +/*PWM*/ +sfr PWMCFG = 0xD1; //PWM设置寄存器 +sfr PWMCON0 = 0xD2; //PWM控制寄存器 +sfr PWMPRD = 0xD3; //PWM周期设置寄存器 +sfr PWMDTYA = 0xD4; //PWM占空比设置寄存器A +sfr PWMDTY0 = 0xD5; //PWM0设置寄存器 +sfr PWMDTY1 = 0xD6; //PWM1设置寄存器 +sfr PWMDTY2 = 0xD7; //PWM2设置寄存器 +sfr PWMCON1 = 0xDA; //PWM控制寄存器 +sfr PWMDTYB = 0xDB; //PWM占空比设置寄存器B +sfr PWMDTY3 = 0xDC; //PWM3设置寄存器 +sfr PWMDTY4 = 0xDD; //PWM4设置寄存器 +sfr PWMDTY5 = 0xDE; //PWM5设置寄存器 +sfr PWMDTY6 = 0xDF; //PWM6设置寄存器 + + +// +///*WatchDog*/ +sfr BTMCON = 0XCE; //低频定时器控制寄存器 +sfr WDTCON = 0xCF; //WDT控制寄存器 + + +sfr OTCON = 0X8F; //输出控制寄存器 + +/*INT*/ +sfr INT0F = 0XBA; //INT0 下降沿中断控制寄存器 +sfr INT0R = 0XBB; //INT0 上降沿中断控制寄存器 +sfr INT1F = 0XBC; //INT1 下降沿中断控制寄存器 +sfr INT1R = 0XBD; //INT1 上降沿中断控制寄存器 +sfr INT2F = 0XC6; //INT2 下降沿中断控制寄存器 +sfr INT2R = 0XC7; //INT2 上降沿中断控制寄存器 + +/*IAP */ +sfr IAPCTL = 0xF6; //IAP控制寄存器 +sfr IAPDAT = 0xF5; //IAP数据寄存器 +sfr IAPADE = 0xF4; //IAP扩展地址寄存器 +sfr IAPADH = 0xF3; //IAP写入地址高位寄存器 +sfr IAPADL = 0xF2; //IAP写入地址低8位寄存器 +sfr IAPKEY = 0xF1; //IAP保护寄存器 + +/*uart0*/ +sfr SCON = 0X98; //uart控制寄存器 +sfr SBUF = 0X99; //uart0数据寄存器 + +/*三合一*/ +sfr SSCON0 = 0X9D; //SSI控制寄存器0 +sfr SSCON1 = 0X9E; //SSI控制寄存器1 +sfr SSCON2 = 0X95; //SSI控制寄存器2 +sfr SSDAT = 0X9F; //SSI数据寄存器 + +sfr OPINX = 0XFE; +sfr OPREG = 0XFF; + +/*Check Sum*/ +sfr CHKSUML = 0XFC; //Check Sum结果寄存器低位 +sfr CHKSUMH = 0XFD; //Check Sum结果寄存器高位 + +sfr OPERCON = 0xEF; //运算控制寄存器 + +///* ------------------- 位寄存器-------------------- */ +/*PSW*/ +sbit CY = PSW^7; //标志位 0:加法运算最高位无进位,或者减法运算最高位无借位时 1:加法运算最高位有进位,或者减法运算最高位有借位时 +sbit AC = PSW^6; //进位辅助标志位 0:无借位、进位 1:加法运算时在bit3位有进位,或减法运算在bit3位有借位时 +sbit F0 = PSW^5; //用户标志位 +sbit RS1 = PSW^4; //工作寄存器组选择位 +sbit RS0 = PSW^3; //工作寄存器组选择位 +sbit OV = PSW^2; //溢出标志位 +sbit F1 = PSW^1; //F1标志 +sbit P = PSW^0; //奇偶标志位 0:ACC中1的个数为偶数(包括0个) 1:ACC中1的个数为奇数 + +/*T2CON*/ +sbit TF2 = T2CON^7; +sbit EXF2 = T2CON^6; +sbit RCLK = T2CON^5; +sbit TCLK = T2CON^4; +sbit EXEN2 = T2CON^3; +sbit TR2 = T2CON^2; +sbit T2 = T2CON^1; +sbit CP = T2CON^0; + + +/*IP*/ +sbit IPADC = IP^6; //ADC中断优先控制位 0:设定 ADC的中断优先权是 “低” 1:设定 ADC的中断优先权是 “高” +sbit IPT2 = IP^5; //Timer2中断优先控制位 0:设定 Timer2的中断优先权是 “低” 1:设定Timer2的中断优先权是 “高” +sbit IPUART = IP^4; //UART中断优先控制位 0:设定 UART的中断优先权是 “低” 1:设定UART的中断优先权是 “高” +sbit IPT1 = IP^3; //Timer1中断优先控制位 0:设定 Timer 1的中断优先权是 “低” 1:设定 Timer 1的中断优先权是 “高” +sbit IPINT1 = IP^2; //INT1中断优先控制位 0:设定 INT1中断优先权是 “低” 1:设定INT1的中断优先权是 “高” +sbit IPT0 = IP^1; //Timer0中断优先控制位 0:设定 Timer 0的中断优先权是 “低” 1:设定 Timer 0的中断优先权是 “高” +sbit IPINT0 = IP^0; //INT0中断优先控制位 0:设定 INT0中断优先权是 “低” 1:设定INT0的中断优先权是 “高” + +/*IE*/ +sbit EA = IE^7; //中断使能的总控制 0:关闭所有的中断 1:打开所有的中断 +sbit EADC = IE^6; //ADC中断使能控制 0:关闭ADC中断 1:打开ADC中断 +sbit ET2 = IE^5; //Timer2中断使能控制 0:关闭Timer2中断 1:打开Timer2中断 +sbit EUART = IE^4; //UART中断使能控制 0:关闭UART中断 1:打开UART中断 +sbit ET1 = IE^3; //Timer1中断使能控制 0:关闭TIMER1中断 1:打开TIMER1中断 +sbit EINT1 = IE^2; //INT1中断使能控制 0:关闭INT1中断 1:打开INT1中断 +sbit ET0 = IE^1; //Timer0中断使能控制 0:关闭TIMER0中断 1:打开TIMER0中断 +sbit EINT0 = IE^0; //INT0中断使能控制 0:关闭INT0中断 1:打开INT0中断 + +/*TCON*/ +sbit TF1 = TCON^7; //T1溢出中断请求标志位 T1产生溢出,发生中断时,硬件将TF1置为“1”,申请中断,CPU响应时,硬件清“0”。 +sbit TR1 = TCON^6; //定时器T1的运行控制位 0:Timer1禁止计数 1:Timer1开始计数 +sbit TF0 = TCON^5; //T0溢出中断请求标志位 T0产生溢出,发生中断时,硬件将TF0置为“1”,申请中断,CPU响应时,硬件清“0”。 +sbit TR0 = TCON^4; //定时器T0的运行控制位 0:Timer0禁止计数 1:Timer0开始计数 + +/*SCON*/ +sbit SM0 = SCON^7; +sbit SM1 = SCON^6; +sbit SM2 = SCON^5; +sbit REN = SCON^4; +sbit TB8 = SCON^3; +sbit RB8 = SCON^2; +sbit TI = SCON^1; +sbit RI = SCON^0; + +/******************* P0 ****************** +*SC92F7402封装未引出的管脚:无 +*SC92F7401封装未引出的管脚:无 +******************************************/ +sbit P01 = P0^1; +sbit P00 = P0^0; + +/******************* P1 ****************** +*SC92F7402封装未引出的管脚:无 +*SC92F7401封装未引出的管脚:P12/P13 +******************************************/ +sbit P17 = P1^7; +sbit P16 = P1^6; +sbit P15 = P1^5; +sbit P14 = P1^4; +sbit P13 = P1^3; +sbit P12 = P1^2; +sbit P11 = P1^1; +sbit P10 = P1^0; + +/******************* P2 ****************** +*SC92F7402封装未引出的管脚:无 +*SC92F7401封装未引出的管脚:P24/P25 +******************************************/ +sbit P27 = P2^7; +sbit P26 = P2^6; +sbit P25 = P2^5; +sbit P24 = P2^4; +sbit P23 = P2^3; +sbit P22 = P2^2; +sbit P21 = P2^1; +sbit P20 = P2^0; + +/**************************************************************************** +*注意:封装未引出的管脚,需设置为强推挽输出模式 +*IC选型:请根据所使用的IC型号,在初始化完IO口后,调用相对应的未引出管脚的IO口配置; +*如若选择SC92F7402,则不用调用宏定义。 +*****************************************************************************/ +#define SC92F7401_NIO_Init() {P1CON|=0x0C,P2CON|=0x30;} //SC92F7401的未引出来的IO口配置 +#endif \ No newline at end of file diff --git a/CFG/SC92F8363B/Keil_Mould/FWLib/SC92F_Lib/inc/SC92F742x_C.H b/CFG/SC92F8363B/Keil_Mould/FWLib/SC92F_Lib/inc/SC92F742x_C.H new file mode 100644 index 0000000..99ae7c6 --- /dev/null +++ b/CFG/SC92F8363B/Keil_Mould/FWLib/SC92F_Lib/inc/SC92F742x_C.H @@ -0,0 +1,237 @@ + /*-------------------------------------------------------------------------- +SC92F742x_C.H + +C Header file for SC92F742x microcontroller. +Copyright (c) 2018 Shenzhen SinOne Chip Electronic CO., Ltd. +All rights reserved. +深圳市赛元微电子有限公司 +版本号: V1.0 +日期: 2018.05.15 +--------------------------------------------------------------------------*/ +#ifndef _SC92F742x_H_ +#define _SC92F742x_H_ + +/* ------------------- 字节寄存器-------------------- */ +///*CPU*/ +sfr ACC = 0xE0; //累加器A +sfr B = 0xF0; //通用寄存器B +sfr PSW = 0xD0; //程序状态字 +sfr DPH = 0x83; //数据指针高8位 +sfr DPL = 0x82; //数据指针低8位 +sfr SP = 0x81; //堆栈指针 + +/*system*/ +sfr PCON = 0x87; //电源管理控制寄存器 + +/*interrupt*/ +sfr IP1 = 0XB9; //中断优先级控制寄存器1 +sfr IP = 0xB8; //中断优先权控制寄存器 +sfr IE = 0xA8; //中断控制寄存器 +sfr IE1 = 0XA9; //中断控制寄存器1 + +/*PORT*/ +sfr P5PH = 0xDA; //P5口模式控制寄存器0 +sfr P5CON = 0xD9; //P5口模式控制寄存器1 +sfr P5 = 0xD8; //P5口数据寄存器 +sfr P2PH = 0xA2; //P2口模式控制寄存器0 +sfr P2CON = 0xA1; //P2口模式控制寄存器1 +sfr P2 = 0xA0; //P2口数据寄存器 +sfr P1PH = 0x92; //P1口模式控制寄存器0 +sfr P1CON = 0x91; //P1口模式控制寄存器1 +sfr P1 = 0x90; //P1口数据寄存器 +sfr P0PH = 0x9B; //P0口模式控制寄存器1 +sfr P0CON = 0x9A; //P0口模式控制寄存器1 +sfr P0 = 0x80; //P0口数据寄存器 +sfr IOHCON = 0x97; //IOH设置寄存器 + +/*TIMER*/ +sfr TMCON = 0x8E; //定时器频率控制寄存器 +sfr TH1 = 0x8D; //定时器1高8位 +sfr TH0 = 0x8C; //定时器0高8位 +sfr TL1 = 0x8B; //定时器1低8位 +sfr TL0 = 0x8A; //定时器0低8位 +sfr TMOD = 0x89; //定时器工作模式寄存器 +sfr TCON = 0x88; //定时器控制寄存器 +sfr T2CON = 0XC8; //定时器2控制寄存器 +sfr T2MOD = 0XC9; //定时器2工作模式寄存器 +sfr RCAP2L = 0XCA; //定时器2重载/捕捉低8位 +sfr RCAP2H = 0XCB; //定时器2重载/捕捉高8位 +sfr TL2 = 0XCC; //定时器2低8位 +sfr TH2 = 0XCD; //定时器2高8位 + + +/*ADC*/ +sfr ADCCFG0 = 0xAB; //ADC设置寄存器0 +sfr ADCCFG1 = 0xAC; //ADC设置寄存器1 +sfr ADCCON = 0XAD; //ADC控制寄存器 +sfr ADCVL = 0xAE; //ADC 结果寄存器 +sfr ADCVH = 0xAF; //ADC 结果寄存器 + +/*PWM*/ +sfr PWMCFG0 = 0xD1; //PWM设置寄存器0 +sfr PWMCON = 0xD2; //PWM控制寄存器 +sfr PWMPRD = 0xD3; //PWM周期设置寄存器 +sfr PWMCFG1 = 0xD4; //PWM设置寄存器1 +sfr PWMDTY0 = 0xD5; //PWM0占空比设置寄存器 +sfr PWMDTY1 = 0XD6; //PWM1占空比设置寄存器 +sfr PWMDTY2 = 0XD7; //PWM2占空比设置寄存器 +sfr PWMDTY3 = 0xDD; //PWM3占空比设置寄存器 +sfr PWMDTY4 = 0XDE; //PWM4占空比设置寄存器 +sfr PWMDTY5 = 0XDF; //PWM5占空比设置寄存器 + +///*WatchDog*/ +sfr BTMCON = 0XCE; //低频定时器控制寄存器 +sfr WDTCON = 0xCF; //WDT控制寄存器 + +/*LCD*/ +sfr OTCON = 0X8F; //LCD电压输出控制寄存器 +sfr P0VO = 0X9C; //P0 LCD Bais 输出寄存器 + +/*INT*/ +sfr INT0F = 0XBA; //INT0 下降沿中断控制寄存器 +sfr INT0R = 0XBB; //INT0 上降沿中断控制寄存器 +sfr INT1F = 0XBC; //INT1 下降沿中断控制寄存器 +sfr INT1R = 0XBD; //INT1 上降沿中断控制寄存器 +sfr INT2F = 0XC6; //INT2 下降沿中断控制寄存器 +sfr INT2R = 0XC7; //INT2 上降沿中断控制寄存器 + +/*IAP */ +sfr IAPCTL = 0xF6; //IAP控制寄存器 +sfr IAPDAT = 0xF5; //IAP数据寄存器 +sfr IAPADE = 0xF4; //IAP扩展地址寄存器 +sfr IAPADH = 0xF3; //IAP写入地址高位寄存器 +sfr IAPADL = 0xF2; //IAP写入地址低8位寄存器 +sfr IAPKEY = 0xF1; //IAP保护寄存器 + +/*SSI*/ +sfr SS0CON0 = 0XA5; //SSI0控制寄存器2 +sfr SS0CON1 = 0XA6; //SSI0控制寄存器1 +sfr SS0CON2 = 0XA4; //SSI0控制寄存器0 +sfr SS0DAT = 0XA7; //SSI0数据寄存器 + +sfr SS1CON2 = 0X95; //SSI1控制寄存器2 +sfr SS1CON0 = 0X9D; //SSI1控制寄存器0 +sfr SS1CON1 = 0X9E; //SSI1控制寄存器1 +sfr SS1DAT = 0X9F; //SSI1数据寄存器 + +/*CHKSUM*/ +sfr OPERCON = 0xEF; //运算控制寄存器 +sfr CHKSUML = 0xFC; //CHKSUM结果寄存器低位 +sfr CHKSUMH = 0XFD; //CHKSUM结果寄存器高位 + +/*option*/ +sfr OPINX = 0XFE; //Option指针 +sfr OPREG = 0XFF; //Option寄存器 + +///* ------------------- 位寄存器-------------------- */ + +/*PSW*/ +sbit CY = PSW^7; //标志位 0:加法运算最高位无进位,或者减法运算最高位无借位时 1:加法运算最高位有进位,或者减法运算最高位有借位时 +sbit AC = PSW^6; //进位辅助标志位 0:无借位、进位 1:加法运算时在bit3位有进位,或减法运算在bit3位有借位时 +sbit F0 = PSW^5; //用户标志位 +sbit RS1 = PSW^4; //工作寄存器组选择位 +sbit RS0 = PSW^3; //工作寄存器组选择位 +sbit OV = PSW^2; //溢出标志位 +sbit F1 = PSW^1; //F1标志 +sbit P = PSW^0; //奇偶标志位 0:ACC中1的个数为偶数(包括0个) 1:ACC中1的个数为奇数 + +/*T2CON*/ +sbit TF2 = T2CON^7; +sbit EXF2 = T2CON^6; +sbit RCLK = T2CON^5; +sbit TCLK = T2CON^4; +sbit EXEN2 = T2CON^3; +sbit TR2 = T2CON^2; +sbit T2 = T2CON^1; +sbit CP = T2CON^0; + + +/*IP*/ +sbit IPADC = IP^6; //ADC中断优先控制位 0:设定 ADC的中断优先权是 “低” 1:设定 ADC的中断优先权是 “高” +sbit IPT2 = IP^5; //Timer2中断优先控制位 0:设定 Timer2的中断优先权是 “低” 1:设定Timer2的中断优先权是 “高” +sbit IPSSI0 = IP^4; //SSI0中断优先控制位 0:设定SSI0的中断优先权是 “低” 1:设定SSI0的中断优先权是 “高” +sbit IPT1 = IP^3; //Timer1中断优先控制位 0:设定 Timer 1的中断优先权是 “低” 1:设定 Timer 1的中断优先权是 “高” +sbit IPINT1 = IP^2; //INT1中断优先控制位 0:设定INT1中断优先权是 “低” 1:设定INT1的中断优先权是 “高” +sbit IPT0 = IP^1; //Timer0中断优先控制位 0:设定 Timer 0的中断优先权是 “低” 1:设定 Timer 0的中断优先权是 “高” +sbit IPINT0 = IP^0; //INT0中断优先控制位 0:设定INT0中断优先权是 “低” 1:设定INT0的中断优先权是 “高” + +/*IE*/ +sbit EA = IE^7; //中断使能的总控制 0:关闭所有的中断 1:打开所有的中断 +sbit EADC = IE^6; //ADC中断使能控制 0:关闭ADC中断 1:打开ADC中断 +sbit ET2 = IE^5; //Timer2中断使能控制 0:关闭Timer2中断 1:打开Timer2中断 +sbit ESSI0 = IE^4; //SSI0中断使能控制 0:关闭SSI0中断 1:打开SSI0中断 +sbit ET1 = IE^3; //Timer1中断使能控制 0:关闭TIMER1中断 1:打开TIMER1中断 +sbit EINT1 = IE^2; //INT1中断使能控制 0:关闭INT1中断 1:打开INT1中断 +sbit ET0 = IE^1; //Timer0中断使能控制 0:关闭TIMER0中断 1:打开TIMER0中断 +sbit EINT0 = IE^0; //INT0中断使能控制 0:关闭INT0中断 1:打开INT0中断 + +/*TCON*/ +sbit TF1 = TCON^7; //T1溢出中断请求标志位 T1产生溢出,发生中断时,硬件将TF1置为“1”,申请中断,CPU响应时,硬件清“0”。 +sbit TR1 = TCON^6; //定时器T1的运行控制位 0:Timer1禁止计数 1:Timer1开始计数 +sbit TF0 = TCON^5; //T0溢出中断请求标志位 T0产生溢出,发生中断时,硬件将TF0置为“1”,申请中断,CPU响应时,硬件清“0”。 +sbit TR0 = TCON^4; //定时器T0的运行控制位 0:Timer0禁止计数 1:Timer0开始计数 + +/******************* P0 ****************** +*SC92F7423封装未引出的管脚:无 +*SC92F7422封装未引出的管脚:P06/P07 +*SC92F7421封装未引出的管脚:P04/P05/P06/P07 +*SC92F7420封装未引出的管脚:P0 +******************************************/ +sbit P07 = P0^7; +sbit P06 = P0^6; +sbit P05 = P0^5; +sbit P04 = P0^4; +sbit P03 = P0^3; +sbit P02 = P0^2; +sbit P01 = P0^1; +sbit P00 = P0^0; + +/************************ P1 ********************* +*SC92F7423封装未引出的管脚:无 +*SC92F7422封装未引出的管脚:P14/P15 +*SC92F7421封装未引出的管脚:P14/P15 +*SC92F7420封装未引出的管脚:P10/P11/P14/P15/P16/P17 +**************************************************/ +sbit P17 = P1^7; +sbit P16 = P1^6; +sbit P15 = P1^5; +sbit P14 = P1^4; +sbit P13 = P1^3; +sbit P12 = P1^2; +sbit P11 = P1^1; +sbit P10 = P1^0; + +/******************** P2 *******%********** +*SC92F7423封装未引出的管脚:无 +*SC92F7422封装未引出的管脚:P22/P23 +*SC92F7421封装未引出的管脚:P24/P25/P26/P27 +*SC92F7420封装未引出的管脚:P22/P23/P24/P25 +*********************************%*********/ +sbit P27 = P2^7; +sbit P26 = P2^6; +sbit P25 = P2^5; +sbit P24 = P2^4; +sbit P23 = P2^3; +sbit P22 = P2^2; +sbit P21 = P2^1; +sbit P20 = P2^0; + +/**************** P5 ************** +*SC92F7423封装未引出的管脚:无 +*SC92F7422封装未引出的管脚:P50/P51 +*SC92F7421封装未引出的管脚:P50/P51 +*SC92F7420封装未引出的管脚:P50/P51 +***********************************/ +sbit P51 = P5^1; +sbit P50 = P5^0; + +/**************************************************************************** +*注意:封装未引出的管脚,需设置为强推挽输出模式 +*IC选型:请根据所使用的IC型号,在初始化完IO口后,调用相对应的未引出管脚的IO口配置; +*如若选择SC92F7423,则不用调用宏定义。 +*****************************************************************************/ +#define SC92F7422_NIO_Init() {P0CON|=0xC0;P1CON|=0x30;P2CON|=0x0C;P5CON|=0x03;} //SC92F7422的未引出来的IO口配置 +#define SC92F7421_NIO_Init() {P0CON|=0xF0;P1CON|=0x30;P2CON|=0xF0;P5CON|=0x03;} //SC92F7421的未引出来的IO口配置 +#define SC92F7420_NIO_Init() {P0CON|=0xFF;P1CON|=0xF3;P2CON|=0x3C;P5CON|=0x03;} //SC92F7420的未引出来的IO口配置 + +#endif \ No newline at end of file diff --git a/CFG/SC92F8363B/Keil_Mould/FWLib/SC92F_Lib/inc/SC92F744xB_C.H b/CFG/SC92F8363B/Keil_Mould/FWLib/SC92F_Lib/inc/SC92F744xB_C.H new file mode 100644 index 0000000..e48dd76 --- /dev/null +++ b/CFG/SC92F8363B/Keil_Mould/FWLib/SC92F_Lib/inc/SC92F744xB_C.H @@ -0,0 +1,294 @@ +/*-------------------------------------------------------------------------- +SC92F744xB_C.H + +C Header file for SC92F744xB microcontroller. +Copyright (c) 2018 Shenzhen SinOne Chip Electronic CO., Ltd. +All rights reserved. +深圳市赛元微电子有限公司 +版本号: V1.0 +日期: 2018.10.30 +--------------------------------------------------------------------------*/ +#ifndef _SC92F744xB_H_ +#define _SC92F744xB_H_ + +/* ------------------- 字节寄存器-------------------- */ +///*CPU*/ +sfr ACC = 0xE0; //累加器A +sfr B = 0xF0; //通用寄存器B +sfr PSW = 0xD0; //程序状态字 +sfr DPH = 0x83; //数据指针高8位 +sfr DPL = 0x82; //数据指针低8位 +sfr SP = 0x81; //堆栈指针 + + +/*system*/ +sfr PCON = 0x87; //电源管理控制寄存器 + +/*interrupt*/ +sfr IP1 = 0XB9; //中断优先级控制寄存器1 +sfr IP = 0xB8; //中断优先权控制寄存器 +sfr IE = 0xA8; //中断控制寄存器 +sfr IE1 = 0XA9; //中断控制寄存器1 + +/*PORT*/ +sfr P5PH = 0xDA; //P5口模式控制寄存器 +sfr P5CON = 0xD9; //P5口模式控制寄存器 +sfr P5 = 0xD8; //P5口数据寄存器 +sfr P4PH = 0xC2; //P4口模式控制寄存器 +sfr P4CON = 0xC1; //P4口模式控制寄存器 +sfr P4 = 0xC0; //P4口数据寄存器 +sfr P3PH = 0xB2; //P3口模式控制寄存器 +sfr P3CON = 0xB1; //P3口模式控制寄存器 +sfr P3 = 0xB0; //P3口数据寄存器 +sfr P2PH = 0xA2; //P2口模式控制寄存器 +sfr P2CON = 0xA1; //P2口模式控制寄存器 +sfr P2 = 0xA0; //P2口数据寄存器 +sfr P1PH = 0x92; //P1口模式控制寄存器 +sfr P1CON = 0x91; //P1口模式控制寄存器 +sfr P1 = 0x90; //P1口数据寄存器 +sfr P0PH = 0x9B; //P0口模式控制寄存器 +sfr P0CON = 0x9A; //P0口模式控制寄存器 +sfr P0 = 0x80; //P0口数据寄存器 +sfr IOHCON0 = 0x96; //IOH0设置寄存器 +sfr IOHCON1 = 0x97; //IOH1设置寄存器 + +/*TIMER*/ +sfr TMCON = 0x8E; //定时器频率控制寄存器 +sfr TH1 = 0x8D; //定时器1高8位 +sfr TH0 = 0x8C; //定时器0高8位 +sfr TL1 = 0x8B; //定时器1低8位 +sfr TL0 = 0x8A; //定时器0低8位 +sfr TMOD = 0x89; //定时器工作模式寄存器 +sfr TCON = 0x88; //定时器控制寄存器 +sfr T2CON = 0xC8; //定时器2控制寄存器 +sfr T2MOD = 0xC9; //定时器2工作模式寄存器 +sfr RCAP2L = 0xCA; //定时器2重载/捕捉低8位 +sfr RCAP2H = 0xCB; //定时器2重载/捕捉高8位 +sfr TL2 = 0xCC; //定时器2低8位 +sfr TH2 = 0xCD; //定时器2高8位 + + +/*ADC*/ +sfr ADCCFG0 = 0xAB; //ADC功能配置寄存器0 +sfr ADCCFG1 = 0xAC; //ADC功能配置寄存器1 +sfr ADCCFG2 = 0XAA; //ADC功能配置寄存器2 +sfr ADCCON = 0XAD; //ADC控制寄存器 +sfr ADCVL = 0xAE; //ADC 结果寄存器 +sfr ADCVH = 0xAF; //ADC 结果寄存器 + +/*PWM*/ +sfr PWMCFG = 0xD4; //PWM设置寄存器 +sfr PWMCON = 0xD3; //PWM控制寄存器 + + +// +///*WatchDog*/ +sfr BTMCON = 0XCE; //低频定时器控制寄存器 +sfr WDTCON = 0xCF; //WDT控制寄存器 + + +/*LCD*/ +sfr OTCON = 0X8F; //LCD电压输出控制寄存器 +sfr P0VO = 0X9C; //P0 LCD Bais 输出寄存器 +sfr P1VO = 0X94; //P1 LCD Bais 输出寄存器 +sfr P2VO = 0XA3; //P2 LCD Bais 输出寄存器 +sfr P3VO = 0XB3; //P3 LCD Bais 输出寄存器 + +sfr DDRCON = 0X93; //显示驱动设置寄存器 + + +/*INT*/ +sfr INT0F = 0XBA; //INT0 下降沿中断控制寄存器 +sfr INT0R = 0XBB; //INT0 上降沿中断控制寄存器 +sfr INT1F = 0XBC; //INT1 下降沿中断控制寄存器 +sfr INT1R = 0XBD; //INT1 上降沿中断控制寄存器 +sfr INT2F = 0XC6; //INT2 下降沿中断控制寄存器 +sfr INT2R = 0XC7; //INT2 上降沿中断控制寄存器 + + +/*IAP */ +sfr IAPCTL = 0xF6; //IAP控制寄存器 +sfr IAPDAT = 0xF5; //IAP数据寄存器 +sfr IAPADE = 0xF4; //IAP扩展地址寄存器 +sfr IAPADH = 0xF3; //IAP写入地址高位寄存器 +sfr IAPADL = 0xF2; //IAP写入地址低8位寄存器 +sfr IAPKEY = 0xF1; //IAP保护寄存器 + +/*UART*/ +sfr SCON = 0X98; //串口控制寄存器 +sfr SBUF = 0X99; //串口数据缓存寄存器 + +/*SPI*/ +sfr SSCON0 = 0X9D; //SPI控制寄存器0 +sfr SSCON1 = 0X9E; //SPI控制寄存器1 +sfr SSCON2 = 0X95; //SPI控制寄存器2 +sfr SSDAT = 0X9F; //SPI数据寄存器 + +sfr OPINX = 0XFE; +sfr OPREG = 0XFF; +sfr EXADH = 0XF7; + +/*Check Sum*/ +sfr CHKSUML = 0XFC; //Check Sum结果寄存器低位 +sfr CHKSUMH = 0XFD; //Check Sum结果寄存器高位 + +/*模拟比较器*/ +sfr CMPCFG = 0XB6; //模拟比较器设置寄存器 +sfr CMPCON = 0XB7; //模拟比较器控制寄存器 + +/*乘除法器*/ +sfr EXA0 = 0xE9; //扩展累加器0 +sfr EXA1 = 0xEA; //扩展累加器1 +sfr EXA2 = 0xEB; //扩展累加器2 +sfr EXA3 = 0xEC; //扩展累加器3 +sfr EXBL = 0xED; //扩展B寄存器0 +sfr EXBH = 0xEE; //扩展B寄存器1 +sfr OPERCON = 0xEF; //运算控制寄存器 + +///* ------------------- 位寄存器-------------------- */ +/*PSW*/ +sbit CY = PSW^7; //标志位 0:加法运算最高位无进位,或者减法运算最高位无借位时 1:加法运算最高位有进位,或者减法运算最高位有借位时 +sbit AC = PSW^6; //进位辅助标志位 0:无借位、进位 1:加法运算时在bit3位有进位,或减法运算在bit3位有借位时 +sbit F0 = PSW^5; //用户标志位 +sbit RS1 = PSW^4; //工作寄存器组选择位 +sbit RS0 = PSW^3; //工作寄存器组选择位 +sbit OV = PSW^2; //溢出标志位 +sbit F1 = PSW^1; //F1标志 +sbit P = PSW^0; //奇偶标志位 0:ACC中1的个数为偶数(包括0个) 1:ACC中1的个数为奇数 + +/*T2CON*/ +sbit TF2 = T2CON^7; +sbit EXF2 = T2CON^6; +sbit RCLK = T2CON^5; +sbit CLK = T2CON^4; +sbit EXEN2 = T2CON^3; +sbit TR2 = T2CON^2; +sbit T2 = T2CON^1; +sbit CP = T2CON^0; + + +/*IP*/ +sbit IPADC = IP^6; //ADC中断优先控制位 0:设定 ADC的中断优先权是 “低” 1:设定 ADC的中断优先权是 “高” +sbit IPT2 = IP^5; //Timer2中断优先控制位 0:设定 Timer2的中断优先权是 “低” 1:设定Timer2的中断优先权是 “高” +sbit IPUART = IP^4; //UART中断优先控制位 0:设定UART的中断优先权是 “低” 1:设定UART的中断优先权是 “高” +sbit IPT1 = IP^3; //Timer1中断优先控制位 0:设定 Timer 1的中断优先权是 “低” 1:设定 Timer 1的中断优先权是 “高” +sbit IPINT1 = IP^2; //INT1中断优先控制位 0:设定INT1中断优先权是 “低” 1:设定INT1的中断优先权是 “高” +sbit IPT0 = IP^1; //Timer0中断优先控制位 0:设定 Timer 0的中断优先权是 “低” 1:设定 Timer 0的中断优先权是 “高” +sbit IPINT0 = IP^0; //INT0中断优先控制位 0:设定INT0中断优先权是 “低” 1:设定INT0的中断优先权是 “高” + +/*IE*/ +sbit EA = IE^7; //中断使能的总控制 0:关闭所有的中断 1:打开所有的中断 +sbit EADC = IE^6; //ADC中断使能控制 0:关闭ADC中断 1:打开ADC中断 +sbit ET2 = IE^5; //Timer2中断使能控制 0:关闭Timer2中断 1:打开Timer2中断 +sbit EUART = IE^4; //UART中断使能控制 0:关闭UART中断 1:打开UART中断 +sbit ET1 = IE^3; //Timer1中断使能控制 0:关闭TIMER1中断 1:打开TIMER1中断 +sbit EINT1 = IE^2; //INT1中断使能控制 0:关闭INT1中断 1:打开INT1中断 +sbit ET0 = IE^1; //Timer0中断使能控制 0:关闭TIMER0中断 1:打开TIMER0中断 +sbit EINT0 = IE^0; //INT0中断使能控制 0:关闭INT0中断 1:打开INT0中断 + +/*TCON*/ +sbit TF1 = TCON^7; //T1溢出中断请求标志位 T1产生溢出,发生中断时,硬件将TF1置为“1”,申请中断,CPU响应时,硬件清“0”。 +sbit TR1 = TCON^6; //定时器T1的运行控制位 0:Timer1禁止计数 1:Timer1开始计数 +sbit TF0 = TCON^5; //T0溢出中断请求标志位 T0产生溢出,发生中断时,硬件将TF0置为“1”,申请中断,CPU响应时,硬件清“0”。 +sbit TR0 = TCON^4; //定时器T0的运行控制位 0:Timer0禁止计数 1:Timer0开始计数 + +/*SCON*/ +sbit SM0 = SCON^7; +sbit SM1 = SCON^6; +sbit SM2 = SCON^5; +sbit REN = SCON^4; +sbit TB8 = SCON^3; +sbit RB8 = SCON^2; +sbit TI = SCON^1; +sbit RI = SCON^0; + +/******************* P0 ****************** +*SC92F7447B封装未引出的管脚:无 +*SC92F7446B封装未引出的管脚:无 +*SC92F7445B封装未引出的管脚:P00 +******************************************/ +sbit P07 = P0^7; +sbit P06 = P0^6; +sbit P05 = P0^5; +sbit P04 = P0^4; +sbit P03 = P0^3; +sbit P02 = P0^2; +sbit P01 = P0^1; +sbit P00 = P0^0; + +/******************* P1 ****************** +*SC92F7447B封装未引出的管脚:无 +*SC92F7446B封装未引出的管脚:无 +*SC92F7445B封装未引出的管脚:无 +******************************************/ +sbit P17 = P1^7; +sbit P16 = P1^6; +sbit P15 = P1^5; +sbit P14 = P1^4; +sbit P13 = P1^3; +sbit P12 = P1^2; +sbit P11 = P1^1; +sbit P10 = P1^0; + +/******************* P2 ****************** +*SC92F7447B封装未引出的管脚:无 +*SC92F7446B封装未引出的管脚:无 +*SC92F7445B封装未引出的管脚:无 +******************************************/ +sbit P27 = P2^7; +sbit P26 = P2^6; +sbit P25 = P2^5; +sbit P24 = P2^4; +sbit P23 = P2^3; +sbit P22 = P2^2; +sbit P21 = P2^1; +sbit P20 = P2^0; + +/******************* P3 ****************** +*SC92F7447B封装未引出的管脚:无 +*SC92F7446B封装未引出的管脚:无 +*SC92F7445B封装未引出的管脚:P3 +******************************************/ +sbit P37 = P3^7; +sbit P36 = P3^6; +sbit P35 = P3^5; +sbit P34 = P3^4; +sbit P33 = P3^3; +sbit P32 = P3^2; +sbit P31 = P3^1; +sbit P30 = P3^0; + +/******************* P4 ****************** +*SC92F7447B封装未引出的管脚:无 +*SC92F7446B封装未引出的管脚:P46/P47 +*SC92F7445B封装未引出的管脚:P40 +******************************************/ +sbit P47 = P4^7; +sbit P46 = P4^6; +sbit P45 = P4^5; +sbit P44 = P4^4; +sbit P43 = P4^3; +sbit P42 = P4^2; +sbit P41 = P4^1; +sbit P40 = P4^0; + +/******************* P5 ****************** +*SC92F7447B封装未引出的管脚:无 +*SC92F7446B封装未引出的管脚:P54/P55 +*SC92F7445B封装未引出的管脚:P5 +******************************************/ +sbit P55 = P5^5; +sbit P54 = P5^4; +sbit P53 = P5^3; +sbit P52 = P5^2; +sbit P51 = P5^1; +sbit P50 = P5^0; + +/**************************************************************************** +*注意:封装未引出的管脚,需设置为强推挽输出模式 +*IC选型:请根据所使用的IC型号,在初始化完IO口后,调用相对应的未引出管脚的IO口配置; +*如若选SC92F7447B,则不用调用宏定义。 +*****************************************************************************/ +#define SC92F7446B_NIO_Init() {P4CON|=0xC0,P5CON|=0x30;} //SC92F7546B的未引出来的IO口配置 +#define SC92F7445B_NIO_Init() {P0CON|=0x01,P3CON|=0xFF,P4CON|=0x01,P5CON|=0xFF;} //SC92F7545B的未引出来的IO口配置 +#endif \ No newline at end of file diff --git a/CFG/SC92F8363B/Keil_Mould/FWLib/SC92F_Lib/inc/SC92F746xB_C.H b/CFG/SC92F8363B/Keil_Mould/FWLib/SC92F_Lib/inc/SC92F746xB_C.H new file mode 100644 index 0000000..4cd2c72 --- /dev/null +++ b/CFG/SC92F8363B/Keil_Mould/FWLib/SC92F_Lib/inc/SC92F746xB_C.H @@ -0,0 +1,251 @@ + /*-------------------------------------------------------------------------- +SC92F746XB_C.H + +C Header file for SC92F746XB microcontroller. +Copyright (c) 2018 Shenzhen SinOne Chip Electronic CO., Ltd. +All rights reserved. +深圳市赛元微电子有限公司 +版本号: V2.0 +日期: 2018.08.24 +--------------------------------------------------------------------------*/ +#ifndef _SC92F746XB_H_ +#define _SC92F746XB_H_ + +/* ------------------- 字节寄存器-------------------- */ +///*CPU*/ +sfr ACC = 0xE0; //累加器A +sfr B = 0xF0; //通用寄存器B +sfr PSW = 0xD0; //程序状态字 +sfr DPH = 0x83; //数据指针高8位 +sfr DPL = 0x82; //数据指针低8位 +sfr SP = 0x81; //堆栈指针 + + +/*system*/ +sfr PCON = 0x87; //电源管理控制寄存器 + +/*interrupt*/ +sfr IP1 = 0XB9; //中断优先级控制寄存器1 +sfr IP = 0xB8; //中断优先权控制寄存器 +sfr IE = 0xA8; //中断控制寄存器 +sfr IE1 = 0XA9; //中断控制寄存器1 + +/*PORT*/ +sfr P5PH = 0xDA; //P5口模式控制寄存器 +sfr P5CON = 0xD9; //P5口模式控制寄存器 +sfr P5 = 0xD8; //P5口数据寄存器 +sfr P2PH = 0xA2; //P2口模式控制寄存器 +sfr P2CON = 0xA1; //P2口模式控制寄存器 +sfr P2 = 0xA0; //P2口数据寄存器 +sfr P1PH = 0x92; //P1口模式控制寄存器 +sfr P1CON = 0x91; //P1口模式控制寄存器 +sfr P1 = 0x90; //P1口数据寄存器 +sfr P0PH = 0x9B; //P0口模式控制寄存器 +sfr P0CON = 0x9A; //P0口模式控制寄存器 +sfr P0 = 0x80; //P0口数据寄存器 +sfr IOHCON = 0x97; //IOH设置寄存器 + +/*TIMER*/ +sfr TMCON = 0x8E; //定时器频率控制寄存器 +sfr TH1 = 0x8D; //定时器1高8位 +sfr TH0 = 0x8C; //定时器0高8位 +sfr TL1 = 0x8B; //定时器1低8位 +sfr TL0 = 0x8A; //定时器0低8位 +sfr TMOD = 0x89; //定时器工作模式寄存器 +sfr TCON = 0x88; //定时器控制寄存器 +sfr T2CON = 0xC8; //定时器2控制寄存器 +sfr T2MOD = 0xC9; //定时器2工作模式寄存器 +sfr RCAP2L = 0xCA; //定时器2重载/捕捉低8位 +sfr RCAP2H = 0xCB; //定时器2重载/捕捉高8位 +sfr TL2 = 0xCC; //定时器2低8位 +sfr TH2 = 0xCD; //定时器2高8位 + + +/*ADC*/ +sfr ADCCFG0 = 0xAB; //ADC功能配置寄存器0 +sfr ADCCFG1 = 0xAC; //ADC功能配置寄存器1 +sfr ADCCFG2 = 0XAA; //ADC功能配置寄存器2 +sfr ADCCON = 0XAD; //ADC控制寄存器 +sfr ADCVL = 0xAE; //ADC 结果寄存器 +sfr ADCVH = 0xAF; //ADC 结果寄存器 + +/*PWM*/ +sfr PWMCFG = 0xD1; //PWM设置寄存器 +sfr PWMCON = 0xD2; //PWM控制寄存器 +sfr PWMPRD = 0xD3; //PWM周期设置寄存器 +sfr PWMDTYA = 0xD4; //PWM占空比设置寄存器A +sfr PWMDTY0 = 0xD5; //PWM0设置寄存器 +sfr PWMDTY1 = 0xD6; //PWM1设置寄存器 +sfr PWMDTY2 = 0xD7; //PWM2设置寄存器 +sfr PWMDTYB = 0xDC; //PWM占空比设置寄存器B +sfr PWMDTY3 = 0xDD; //PWM3设置寄存器 +sfr PWMDTY4 = 0xDE; //PWM4设置寄存器 +sfr PWMDTY5 = 0xDF; //PWM5设置寄存器 + +///*WatchDog*/ +sfr BTMCON = 0XCE; //低频定时器控制寄存器 +sfr WDTCON = 0xCF; //WDT控制寄存器 + +/*LCD*/ +sfr OTCON = 0X8F; //LCD电压输出控制寄存器 +sfr P0VO = 0X9C; //P0 LCD Bais 输出寄存器 + +/*INT*/ +sfr INT0F = 0XBA; //INT0 下降沿中断控制寄存器 +sfr INT0R = 0XBB; //INT0 上降沿中断控制寄存器 +sfr INT1F = 0XBC; //INT1 下降沿中断控制寄存器 +sfr INT1R = 0XBD; //INT1 上降沿中断控制寄存器 +sfr INT2F = 0XC6; //INT2 下降沿中断控制寄存器 +sfr INT2R = 0XC7; //INT2 上降沿中断控制寄存器 + +/*IAP */ +sfr IAPCTL = 0xF6; //IAP控制寄存器 +sfr IAPDAT = 0xF5; //IAP数据寄存器 +sfr IAPADE = 0xF4; //IAP扩展地址寄存器 +sfr IAPADH = 0xF3; //IAP写入地址高位寄存器 +sfr IAPADL = 0xF2; //IAP写入地址低8位寄存器 +sfr IAPKEY = 0xF1; //IAP保护寄存器 + +/*uart*/ +sfr SCON = 0x98; //串口控制寄存器 +sfr SBUF = 0x99; //串口数据缓存寄存器 + +/*三合一*/ +sfr SSCON0 = 0X9D; //SPI控制寄存器0 +sfr SSCON1 = 0X9E; //SPI控制寄存器1 +sfr SSCON2 = 0X95; //SPI控制寄存器2 +sfr SSDAT = 0X9F; //SPI数据寄存器 + +sfr OPINX = 0XFE; +sfr OPREG = 0XFF; +sfr EXADH = 0XF7; + +/*Check Sum*/ +sfr CHKSUML = 0XFC; //Check Sum结果寄存器低位 +sfr CHKSUMH = 0XFD; //Check Sum结果寄存器高位 + +/*乘除法*/ +sfr EXA0 = 0xE9; //扩展累加器0 +sfr EXA1 = 0xEA; //扩展累加器1 +sfr EXA2 = 0xEB; //扩展累加器2 +sfr EXA3 = 0xEC; //扩展累加器3 +sfr EXBL = 0xED; //扩展B寄存器0 +sfr EXBH = 0xEE; //扩展B寄存器1 +sfr OPERCON = 0xEF; //运算控制寄存器 + +/* ------------------- 位寄存器-------------------- */ +/*PSW*/ +sbit CY = PSW^7; //标志位 0:加法运算最高位无进位,或者减法运算最高位无借位时 1:加法运算最高位有进位,或者减法运算最高位有借位时 +sbit AC = PSW^6; //进位辅助标志位 0:无借位、进位 1:加法运算时在bit3位有进位,或减法运算在bit3位有借位时 +sbit F0 = PSW^5; //用户标志位 +sbit RS1 = PSW^4; //工作寄存器组选择位 +sbit RS0 = PSW^3; //工作寄存器组选择位 +sbit OV = PSW^2; //溢出标志位 +sbit F1 = PSW^1; //F1标志 +sbit P = PSW^0; //奇偶标志位 0:ACC中1的个数为偶数(包括0个) 1:ACC中1的个数为奇数 + +/*T2CON*/ +sbit TF2 = T2CON^7; +sbit EXF2 = T2CON^6; +sbit RCLK = T2CON^5; +sbit TCLK = T2CON^4; +sbit EXEN2 = T2CON^3; +sbit TR2 = T2CON^2; +sbit T2 = T2CON^1; +sbit CP = T2CON^0; + + +/*IP*/ +sbit IPADC = IP^6; //ADC中断优先控制位 0:设定 ADC的中断优先权是 “低” 1:设定 ADC的中断优先权是 “高” +sbit IPT2 = IP^5; //Timer2中断优先控制位 0:设定 Timer2的中断优先权是 “低” 1:设定Timer2的中断优先权是 “高” +sbit IPUART = IP^4; //UART中断优先控制位 0:设定UART的中断优先权是 “低” 1:设定UART的中断优先权是 “高” +sbit IPT1 = IP^3; //Timer1中断优先控制位 0:设定 Timer 1的中断优先权是 “低” 1:设定 Timer 1的中断优先权是 “高” +sbit IPINT1 = IP^2; //INT1中断优先控制位 0:设定INT1中断优先权是 “低” 1:设定INT1的中断优先权是 “高” +sbit IPT0 = IP^1; //Timer0中断优先控制位 0:设定 Timer 0的中断优先权是 “低” 1:设定 Timer 0的中断优先权是 “高” +sbit IPINT0 = IP^0; //INT0中断优先控制位 0:设定INT0中断优先权是 “低” 1:设定INT0的中断优先权是 “高” + +/*IE*/ +sbit EA = IE^7; //中断使能的总控制 0:关闭所有的中断 1:打开所有的中断 +sbit EADC = IE^6; //ADC中断使能控制 0:关闭ADC中断 1:打开ADC中断 +sbit ET2 = IE^5; //Timer2中断使能控制 0:关闭Timer2中断 1:打开Timer2中断 +sbit EUART = IE^4; //UART中断使能控制 0:关闭UART中断 1:打开UART中断 +sbit ET1 = IE^3; //Timer1中断使能控制 0:关闭TIMER1中断 1:打开TIMER1中断 +sbit EINT1 = IE^2; //INT1中断使能控制 0:关闭INT1中断 1:打开INT1中断 +sbit ET0 = IE^1; //Timer0中断使能控制 0:关闭TIMER0中断 1:打开TIMER0中断 +sbit EINT0 = IE^0; //INT0中断使能控制 0:关闭INT0中断 1:打开INT0中断 + +/*TCON*/ +sbit TF1 = TCON^7; //T1溢出中断请求标志位 T1产生溢出,发生中断时,硬件将TF1置为“1”,申请中断,CPU响应时,硬件清“0”。 +sbit TR1 = TCON^6; //定时器T1的运行控制位 0:Timer1禁止计数 1:Timer1开始计数 +sbit TF0 = TCON^5; //T0溢出中断请求标志位 T0产生溢出,发生中断时,硬件将TF0置为“1”,申请中断,CPU响应时,硬件清“0”。 +sbit TR0 = TCON^4; //定时器T0的运行控制位 0:Timer0禁止计数 1:Timer0开始计数 + +/*SCON*/ +sbit SM0 = SCON^7; +sbit SM1 = SCON^6; +sbit SM2 = SCON^5; +sbit REN = SCON^4; +sbit TB8 = SCON^3; +sbit RB8 = SCON^2; +sbit TI = SCON^1; +sbit RI = SCON^0; + +/******************* P0 ****************** +*SC92F7463B封装未引出的管脚:无 +*SC92F7462B封装未引出的管脚:P06/P07 +*SC92F7461B封装未引出的管脚:P02/P03/P04/P06/P07 +******************************************/ +sbit P07 = P0^7; +sbit P06 = P0^6; +sbit P05 = P0^5; +sbit P04 = P0^4; +sbit P03 = P0^3; +sbit P02 = P0^2; +sbit P01 = P0^1; +sbit P00 = P0^0; + +/******************* P1 ****************** +*SC92F7463B封装未引出的管脚:无 +*SC92F7462B封装未引出的管脚:P16/P17 +*SC92F7461B封装未引出的管脚:P16/P17 +******************************************/ +sbit P17 = P1^7; +sbit P16 = P1^6; +sbit P15 = P1^5; +sbit P14 = P1^4; +sbit P13 = P1^3; +sbit P12 = P1^2; +sbit P11 = P1^1; +sbit P10 = P1^0; + +/******************* P2 ****************** +*SC92F7463B封装未引出的管脚:无 +*SC92F7462B封装未引出的管脚:P22/P23 +*SC92F7461B封装未引出的管脚:P22/P23/P27 +******************************************/ +sbit P27 = P2^7; +sbit P26 = P2^6; +sbit P25 = P2^5; +sbit P24 = P2^4; +sbit P23 = P2^3; +sbit P22 = P2^2; +sbit P21 = P2^1; +sbit P20 = P2^0; + +/******************* P5 ****************** +*SC92F7463B封装未引出的管脚:无 +*SC92F7462B封装未引出的管脚:P50/P51 +*SC92F7461B封装未引出的管脚:P50/P51 +******************************************/ +sbit P51 = P5^1; +sbit P50 = P5^0; + +/**************************************************************************** +*注意:封装未引出的管脚,需设置为强推挽输出模式 +*IC选型:请根据所使用的IC型号,在初始化完IO口后,调用相对应的未引出管脚的IO口配置; +*如若选择SC92F7463B,则不用调用宏定义。 +*****************************************************************************/ +#define SC92F7462B_IO_Init() {P0CON|=0xC0,P1CON|=0xC0,P2CON|=0x0C,P5CON|=0x03;} //SC92F7462B的未引出来的IO口配置 +#define SC92F7461B_IO_Init() {P0CON|=0xEC,P1CON|=0xC0,P2CON|=0x8C,P5CON|=0x03;} //SC92F7461B的未引出来的IO口配置 + +#endif \ No newline at end of file diff --git a/CFG/SC92F8363B/Keil_Mould/FWLib/SC92F_Lib/inc/SC92F748x_C.H b/CFG/SC92F8363B/Keil_Mould/FWLib/SC92F_Lib/inc/SC92F748x_C.H new file mode 100644 index 0000000..6ac39b7 --- /dev/null +++ b/CFG/SC92F8363B/Keil_Mould/FWLib/SC92F_Lib/inc/SC92F748x_C.H @@ -0,0 +1,254 @@ +/*-------------------------------------------------------------------------- +SC92F748x_C.H + +C Header file for SC92F748x microcontroller. +Copyright (c) 2021 Shenzhen SinOne Microelectronics Co., Ltd. +All rights reserved. +深圳市赛元微电子有限公司 +版本号: V1.2 +日期: 2021.07.14 +--------------------------------------------------------------------------*/ +#ifndef _SC92F748x_H_ +#define _SC92F748x_H_ + +///* ------------------- 字节寄存器-------------------- */ +/*CPU*/ +sfr ACC = 0XE0; //累加器A +sfr B = 0XF0; //B寄存器 +sfr PSW = 0XD0; //程序状态字寄存器 +sfr DPH = 0X83; //DPTR数据指针高位 +sfr DPL = 0X82; //DPTR数据指针低位 +sfr SP = 0X81; //堆栈指针 +sfr EXA0 = 0XE9; //扩展累加器0 +sfr EXA1 = 0XEA; //扩展累加器1 +sfr EXA2 = 0XEB; //扩展累加器2 +sfr EXA3 = 0XEC; //扩展累加器3 +sfr EXBL = 0XED; //扩展B寄存器0 +sfr EXBH = 0XEE; //扩展B寄存器1 + +/*SRAM*/ +sfr EXADH = 0XF7; //外部SRAM操作地址高位 + +/*system*/ +sfr PCON = 0X87; //电源管理控制寄存器 + +/*Interrupt*/ +sfr IP1 = 0XB9; //中断优先级控制寄存器1 +sfr IP = 0XB8; //中断优先权控制寄存器 +sfr IE = 0XA8; //中断控制寄存器 +sfr IE1 = 0XA9; //中断控制寄存器1 + +/*PORT*/ +sfr IOHCON = 0X97; //IOH设置寄存器 +sfr P5PH = 0XDA; //P5口上拉电阻控制寄存器 +sfr P5CON = 0XD9; //P5口输入/输出控制寄存器 +sfr P5 = 0XD8; //P5口数据寄存器 +sfr P2PH = 0XA2; //P2口上拉电阻控制寄存器 +sfr P2CON = 0XA1; //P2口输入/输出控制寄存器 +sfr P2 = 0XA0; //P2口数据寄存器 +sfr P1PH = 0X92; //P1口上拉电阻控制寄存器 +sfr P1CON = 0X91; //P1口输入/输出控制寄存器 +sfr P1 = 0X90; //P1口数据寄存器 +sfr P0PH = 0X9B; //P0口上拉电阻控制寄存器 +sfr P0VO = 0X9C; //P0口LCD电压输出寄存器 +sfr P0CON = 0X9A; //P0口输入/输出控制寄存器 +sfr P0 = 0X80; //P0口数据寄存器 + +/*TIMER*/ +sfr TMCON = 0X8E; //定时器频率控制寄存器 +sfr TH1 = 0X8D; //定时器1高8位 +sfr TH0 = 0X8C; //定时器0高8位 +sfr TL1 = 0X8B; //定时器1低8位 +sfr TL0 = 0X8A; //定时器0低8位 +sfr TMOD = 0X89; //定时器工作模式寄存器 +sfr TCON = 0X88; //定时器控制寄存器 +sfr T2CON = 0XC8; //定时器2控制寄存器 +sfr T2MOD = 0XC9; //定时器2工作模式寄存器 +sfr RCAP2L = 0XCA; //定时器2重载/捕捉低8位 +sfr RCAP2H = 0XCB; //定时器2重载/捕捉高8位 +sfr TL2 = 0XCC; //定时器2低8位 +sfr TH2 = 0XCD; //定时器2高8位 + +/*ADC*/ +sfr ADCCFG2 = 0XAA; //ADC设置寄存器2 +sfr ADCCFG1 = 0XAC; //ADC设置寄存器1 +sfr ADCCFG0 = 0XAB; //ADC设置寄存器0 +sfr ADCCON = 0XAD; //ADC控制寄存器 +sfr ADCVL = 0XAE; //ADC结果寄存器 +sfr ADCVH = 0XAF; //ADC结果寄存器 + +/*PWM*/ +sfr PWMCFG = 0XD1; //PWM设置寄存器 +sfr PWMCON = 0XD2; //PWM控制寄存器 +sfr PWMPRD = 0XD3; //PWM周期设置寄存器 +sfr PWMDTYA = 0XD4; //PWM占空比设置寄存器A +sfr PWMDTY0 = 0XD5; //PWM0设置寄存器 +sfr PWMDTY1 = 0XD6; //PWM1占空比设置寄存器 +sfr PWMDTY2 = 0XD7; //PWM2占空比设置寄存器 +sfr PWMDTYB = 0XDC; //PWM占空比设置寄存器B +sfr PWMDTY3 = 0XDD; //PWM3占空比设置寄存器/PWM死区时间配置寄存器 +sfr PWMDTY4 = 0XDE; //PWM4占空比设置寄存器 +sfr PWMDTY5 = 0XDF; //PWM5占空比设置寄存器 + +/*WatchDog*/ +sfr WDTCON = 0XCF; //WDT控制寄存器 + +/*BTM*/ +sfr BTMCON = 0XCE; //低频定时器控制寄存器 + +/*INT*/ +sfr INT0F = 0XBA; //INT0 下降沿中断控制寄存器 +sfr INT0R = 0XBB; //INT0 上降沿中断控制寄存器 +sfr INT1F = 0XBC; //INT1 下降沿中断控制寄存器 +sfr INT1R = 0XBD; //INT1 上降沿中断控制寄存器 +sfr INT2F = 0XC6; //INT2 下降沿中断控制寄存器 +sfr INT2R = 0XC7; //INT2 上降沿中断控制寄存器 + +/*IAP */ +sfr IAPCTL = 0XF6; //IAP控制寄存器 +sfr IAPDAT = 0XF5; //IAP数据寄存器 +sfr IAPADE = 0XF4; //IAP扩展地址寄存器 +sfr IAPADH = 0XF3; //IAP写入地址高位寄存器 +sfr IAPADL = 0XF2; //IAP写入地址低位寄存器 +sfr IAPKEY = 0XF1; //IAP保护寄存器 + +/*uart0*/ +sfr SCON = 0X98; //串口控制寄存器 +sfr SBUF = 0X99; //串口数据缓存寄存器 +sfr OTCON = 0X8F; //输出控制寄存器 + +/*三合一*/ +sfr SSCON0 = 0X9D; //USCI控制寄存器0 +sfr SSCON1 = 0X9E; //USCI控制寄存器1 +sfr SSCON2 = 0X95; //USCI控制寄存器2 +sfr SSDAT = 0X9F; //USCI数据寄存器3 + +/*OPTION*/ +sfr OPINX = 0XFE; //Customer Option指针 +sfr OPREG = 0XFF; //Customer Option寄存器 + +/*Check Sum*/ +sfr CHKSUML = 0XFC; //Check Sum结果寄存器低位 +sfr CHKSUMH = 0XFD; //Check Sum结果寄存器高位 +sfr OPERCON = 0XEF; //运算控制寄存器 + +///* ------------------- 位寄存器-------------------- */ +/*PSW*/ +sbit CY = PSW^7; //标志位 0:加法运算最高位无进位,或者减法运算最高位无借位时 1:加法运算最高位有进位,或者减法运算最高位有借位时 +sbit AC = PSW^6; //进位辅助标志位 0:无借位、进位 1:加法运算时在bit3位有进位,或减法运算在bit3位有借位时 +sbit F0 = PSW^5; //用户标志位 +sbit RS1 = PSW^4; //工作寄存器组选择位 +sbit RS0 = PSW^3; //工作寄存器组选择位 +sbit OV = PSW^2; //溢出标志位 +sbit F1 = PSW^1; //F1标志 +sbit P = PSW^0; //奇偶标志位 0:ACC中1的个数为偶数(包括0个) 1:ACC中1的个数为奇数 + +/*T2CON*/ +sbit TF2 = T2CON^7; //定时器2溢出标志位 +sbit EXF2 = T2CON^6; //T2EX引脚外部事件输入(下降沿)被检测到的标志位 +sbit RCLK = T2CON^5; //UART0接收时钟控制位 0: 定时器1产生接收波特率 1: 定时器2产生接收波特率 +sbit TCLK = T2CON^4; //UART0发送时钟控制位 0: 定时器1产生发送波特率 1: 定时器2产生发送波特率 +sbit EXEN2 = T2CON^3; //T2EX引脚上的外部事件输入(下降沿)用作重载/捕获触发器允许/禁止控制 +sbit TR2 = T2CON^2; //定时器2开始/停止控制位 0: 停止定时器2 1: 开始定时器2 +sbit T2 = T2CON^1; //定时器2定时器/计数器方式选定位2 +sbit CP = T2CON^0; //捕获/重载方式选定位 + +/*IP*/ +sbit IPADC = IP^6; //ADC中断优先权选择 0:设定 ADC的中断优先权是 “低” 1:设定 ADC的中断优先权是 “高” +sbit IPT2 = IP^5; //Timer2中断优先权选择 0:设定 Timer 2的中断优先权是 “低” 1:设定 Timer 2的中断优先权是 “高” +sbit IPUART = IP^4; //UART中断优先权选择 0:设定 UART的中断优先权是 “低” 1:设定 UART的中断优先权是 “高” +sbit IPT1 = IP^3; //Timer1中断优先权选择 0:设定 Timer 1的中断优先权是 “低” 1:设定 Timer 1的中断优先权是 “高” +sbit IPINT1 = IP^2; //INT1计数器中断优先权选择 0:设定 INT1的中断优先权是 “低” 1:设定 INT1的中断优先权是 “高” +sbit IPT0 = IP^1; //Timer0中断优先权选择 0:设定 Timer 0的中断优先权是 “低” 1:设定 Timer 0的中断优先权是 “高” +sbit IPINT0 = IP^0; //INT0计数器中断优先权选择 0:设定 INT0的中断优先权为 “低” 1: INT0中断优先权为高 + +/*IE*/ +sbit EA = IE^7; //中断使能的总控制 0:关闭所有的中断 1:打开所有的中断 +sbit EADC = IE^6; //ADC中断使能控制 0:关闭ADC中断 1:打开ADC中断 +sbit ET2 = IE^5; //Timer2中断使能控制 0:关闭TIMER2中断 1:打开TIMER2中断 +sbit EUART = IE^4; //UART中断使能控制 0:关闭SIF中断 1:打开SIF中断 +sbit ET1 = IE^3; //Timer1中断使能控制 0:关闭TIMER1中断 1:打开TIMER1中断 +sbit EINT1 = IE^2; //外部中断1中断使能控制 0:关闭外部中断1中断 1:打开外部中断1中断 +sbit ET0 = IE^1; //Timer0中断使能控制 0:关闭TIMER0中断 1:打开TIMER0中断 +sbit EINT0 = IE^0; //外部中断0中断使能控制 0:关闭外部中断0中断 1:打开外部中断0中断 + +/*TCON*/ +sbit TF1 = TCON^7; //T1溢出中断请求标志位 T1产生溢出,发生中断时,硬件将TF1置为“1”,申请中断,CPU响应时,硬件清“0”。 +sbit TR1 = TCON^6; //定时器T1的运行控制位 0:Timer1禁止计数 1:Timer1开始计数 +sbit TF0 = TCON^5; //T0溢出中断请求标志位 T0产生溢出,发生中断时,硬件将TF0置为“1”,申请中断,CPU响应时,硬件清“0”。 +sbit TR0 = TCON^4; //定时器T0的运行控制位 0:Timer0禁止计数 1:Timer0开始计数 + +/*SCON*/ +sbit SM0 = SCON^7; //串行通信模式控制位:与SM1配合使用 00: 模式0,8位半双工同步通信模式 01: 模式1,10位全双工异步通信 11: 模式3,11位全双工异步通信 +sbit SM1 = SCON^6; //串行通信模式控制位 +sbit SM2 = SCON^5; //串行通信模式控制位2,此控制位只对模式3有效 0:每收到一个完整数据帧就置位RI产生中断请求 1:收到一个完整的数据帧时,只有当RB8=1时才会置位RI产生中断请求 +sbit REN = SCON^4; //接收允许控制位 0:不允许接受数据 1:允许接受数据 +sbit TB8 = SCON^3; //只对模式3有效,为发送数据的第9位 +sbit RB8 = SCON^2; //只对模式3有效,为接收数据的第9位 +sbit TI = SCON^1; //发送中断标志位 +sbit RI = SCON^0; //接收中断标志位 + +/******************* P0 ****************** +*SC92F7483封装未引出的管脚:无 +*SC92F7482封装未引出的管脚:P06/P07 +*SC92F7481封装未引出的管脚:P02/P03/P04/P05/P06/P07 +*SC92F7480封装未引出的管脚:P0 +******************************************/ +sbit P07 = P0^7; +sbit P06 = P0^6; +sbit P05 = P0^5; +sbit P04 = P0^4; +sbit P03 = P0^3; +sbit P02 = P0^2; +sbit P01 = P0^1; +sbit P00 = P0^0; + +/******************* P1 ****************** +*SC92F7483封装未引出的管脚:无 +*SC92F7482封装未引出的管脚:P16/P17 +*SC92F7481封装未引出的管脚:P16/P17 +*SC92F7480封装未引出的管脚:P14/P15/P16/P17 +******************************************/ +sbit P17 = P1^7; +sbit P16 = P1^6; +sbit P15 = P1^5; +sbit P14 = P1^4; +sbit P13 = P1^3; +sbit P12 = P1^2; +sbit P11 = P1^1; +sbit P10 = P1^0; + +/******************* P2 ****************** +*SC92F7483封装未引出的管脚:无 +*SC92F7482封装未引出的管脚:P22/P23 +*SC92F7481封装未引出的管脚:P22/P23/P27 +*SC92F7480封装未引出的管脚:P22/P23/P25/P26/P27 +******************************************/ +sbit P27 = P2^7; +sbit P26 = P2^6; +sbit P25 = P2^5; +sbit P24 = P2^4; +sbit P23 = P2^3; +sbit P22 = P2^2; +sbit P21 = P2^1; +sbit P20 = P2^0; + +/******************* P5 ****************** +*SC92F7483封装未引出的管脚:无 +*SC92F7482封装未引出的管脚:P50/P51 +*SC92F7481封装未引出的管脚:P50/P51 +*SC92F7480封装未引出的管脚:P50/P51 +******************************************/ +sbit P51 = P5^1; +sbit P50 = P5^0; + +/**************************************************************************** +*注意:封装未引出的管脚,需设置为强推挽输出模式 +*IC选型:请根据所使用的IC型号,在初始化完IO口后,调用相对应的未引出管脚的IO口配置; +*如若选SC92F7483,则不用调用宏定义。 +*****************************************************************************/ +#define SC92F7482_NIO_Init() {P0CON|=0xC0,P1CON|=0xC0,P2CON|=0x0C,P5CON|=0x03;}//SC92F7482的未引出来的IO口配置 +#define SC92F7481_NIO_Init() {P0CON|=0xFC,P1CON|=0xC0,P2CON|=0x8C,P5CON|=0x03;}//SC92F7481的未引出来的IO口配置 +#define SC92F7480_NIO_Init() {P0CON|=0xFF,P1CON|=0xF0,P2CON|=0xEC,P5CON|=0x03;}//SC92F7480的未引出来的IO口配置 + +#endif \ No newline at end of file diff --git a/CFG/SC92F8363B/Keil_Mould/FWLib/SC92F_Lib/inc/SC92F7490_C.H b/CFG/SC92F8363B/Keil_Mould/FWLib/SC92F_Lib/inc/SC92F7490_C.H new file mode 100644 index 0000000..6a22ab7 --- /dev/null +++ b/CFG/SC92F8363B/Keil_Mould/FWLib/SC92F_Lib/inc/SC92F7490_C.H @@ -0,0 +1,176 @@ + /*-------------------------------------------------------------------------- +SC92F7490_C.H + +C Header file for SC92F7490 microcontroller. +Copyright (c) 2018 Shenzhen SinOne Chip Electronic CO., Ltd. +All rights reserved. +深圳市赛元微电子有限公司 +版本号: V1.0 +日期: 2018.07.25 +--------------------------------------------------------------------------*/ +#ifndef _SC92F7490_H_ +#define _SC92F7490_H_ + +/* ------------------- 字节寄存器-------------------- */ +///*CPU*/ +sfr ACC = 0xE0; //累加器A +sfr B = 0xF0; //通用寄存器B +sfr PSW = 0xD0; //程序状态字 +sfr DPH = 0x83; //数据指针高8位 +sfr DPL = 0x82; //数据指针低8位 +sfr SP = 0x81; //堆栈指针 + +/*system*/ +sfr PCON = 0x87; //电源管理控制寄存器 + +/*interrupt*/ +sfr IP1 = 0XB9; //中断优先级控制寄存器1 +sfr IP = 0xB8; //中断优先权控制寄存器 +sfr IE = 0xA8; //中断控制寄存器 +sfr IE1 = 0XA9; //中断控制寄存器1 + +/*PORT*/ + +sfr P2PH = 0xA2; //P2口模式控制寄存器0 +sfr P2CON = 0xA1; //P2口模式控制寄存器1 +sfr P2 = 0xA0; //P2口数据寄存器 +sfr P1PH = 0x92; //P1口模式控制寄存器0 +sfr P1CON = 0x91; //P1口模式控制寄存器1 +sfr P1 = 0x90; //P1口数据寄存器 +sfr P0PH = 0x9B; //P0口模式控制寄存器1 +sfr P0CON = 0x9A; //P0口模式控制寄存器1 +sfr P0 = 0x80; //P0口数据寄存器 +sfr IOHCON = 0x97; //IOH设置寄存器 + +/*TIMER*/ +sfr TMCON = 0x8E; //定时器频率控制寄存器 +sfr TH1 = 0x8D; //定时器1高8位 +sfr TH0 = 0x8C; //定时器0高8位 +sfr TL1 = 0x8B; //定时器1低8位 +sfr TL0 = 0x8A; //定时器0低8位 +sfr TMOD = 0x89; //定时器工作模式寄存器 +sfr TCON = 0x88; //定时器控制寄存器 +sfr T2CON = 0XC8; //定时器2控制寄存器 +sfr T2MOD = 0XC9; //定时器2工作模式寄存器 +sfr RCAP2L = 0XCA; //定时器2重载/捕捉低8位 +sfr RCAP2H = 0XCB; //定时器2重载/捕捉高8位 +sfr TL2 = 0XCC; //定时器2低8位 +sfr TH2 = 0XCD; //定时器2高8位 + + +/*ADC*/ +sfr ADCCFG0 = 0xAB; //ADC设置寄存器0 +sfr ADCCFG1 = 0xAC; //ADC设置寄存器1 +sfr ADCCON = 0XAD; //ADC控制寄存器 +sfr ADCVL = 0xAE; //ADC 结果寄存器 +sfr ADCVH = 0xAF; //ADC 结果寄存器 + +///*WatchDog*/ +sfr BTMCON = 0XCE; //低频定时器控制寄存器 +sfr WDTCON = 0xCF; //WDT控制寄存器 + +/*LCD*/ +sfr OTCON = 0X8F; //LCD电压输出控制寄存器 +sfr P0VO = 0X9C; //P0 LCD Bais 输出寄存器 + +/*INT*/ +sfr INT0F = 0XBA; //INT0 下降沿中断控制寄存器 +sfr INT0R = 0XBB; //INT0 上降沿中断控制寄存器 +sfr INT2F = 0XC6; //INT2 下降沿中断控制寄存器 +sfr INT2R = 0XC7; //INT2 上降沿中断控制寄存器 + +/*IAP */ +sfr IAPCTL = 0xF6; //IAP控制寄存器 +sfr IAPDAT = 0xF5; //IAP数据寄存器 +sfr IAPADE = 0xF4; //IAP扩展地址寄存器 +sfr IAPADH = 0xF3; //IAP写入地址高位寄存器 +sfr IAPADL = 0xF2; //IAP写入地址低8位寄存器 +sfr IAPKEY = 0xF1; //IAP保护寄存器 + +/*SSI*/ +sfr SS0CON0 = 0XA5; //SSI0控制寄存器2 +sfr SS0CON1 = 0XA6; //SSI0控制寄存器1 +sfr SS0CON2 = 0XA4; //SSI0控制寄存器0 +sfr SS0DAT = 0XA7; //SSI0数据寄存器 + +sfr SS1CON2 = 0X95; //SSI1控制寄存器2 +sfr SS1CON0 = 0X9D; //SSI1控制寄存器0 +sfr SS1CON1 = 0X9E; //SSI1控制寄存器1 +sfr SS1DAT = 0X9F; //SSI1数据寄存器 + +/*CHKSUM*/ +sfr OPERCON = 0xEF; //运算控制寄存器 +sfr CHKSUML = 0xFC; //CHKSUM结果寄存器低位 +sfr CHKSUMH = 0XFD; //CHKSUM结果寄存器高位 + +/*option*/ +sfr OPINX = 0XFE; //Option指针 +sfr OPREG = 0XFF; //Option寄存器 + +sfr P5PH = 0xDA; +sfr P5CON = 0xD9; +sfr P5 = 0xD8; +///* ------------------- 位寄存器-------------------- */ + +/*PSW*/ +sbit CY = PSW^7; //标志位 0:加法运算最高位无进位,或者减法运算最高位无借位时 1:加法运算最高位有进位,或者减法运算最高位有借位时 +sbit AC = PSW^6; //进位辅助标志位 0:无借位、进位 1:加法运算时在bit3位有进位,或减法运算在bit3位有借位时 +sbit F0 = PSW^5; //用户标志位 +sbit RS1 = PSW^4; //工作寄存器组选择位 +sbit RS0 = PSW^3; //工作寄存器组选择位 +sbit OV = PSW^2; //溢出标志位 +sbit F1 = PSW^1; //F1标志 +sbit P = PSW^0; //奇偶标志位 0:ACC中1的个数为偶数(包括0个) 1:ACC中1的个数为奇数 + +/*T2CON*/ +sbit TF2 = T2CON^7; +sbit EXF2 = T2CON^6; +sbit RCLK = T2CON^5; +sbit TCLK = T2CON^4; +sbit EXEN2 = T2CON^3; +sbit TR2 = T2CON^2; +sbit T2 = T2CON^1; +sbit CP = T2CON^0; + + +/*IP*/ +sbit IPADC = IP^6; //ADC中断优先控制位 0:设定 ADC的中断优先权是 “低” 1:设定 ADC的中断优先权是 “高” +sbit IPT2 = IP^5; //Timer2中断优先控制位 0:设定 Timer2的中断优先权是 “低” 1:设定Timer2的中断优先权是 “高” +sbit IPSSI0 = IP^4; //SSI0中断优先控制位 0:设定SSI0的中断优先权是 “低” 1:设定SSI0的中断优先权是 “高” +sbit IPT1 = IP^3; //Timer1中断优先控制位 0:设定 Timer 1的中断优先权是 “低” 1:设定 Timer 1的中断优先权是 “高” +sbit IPT0 = IP^1; //Timer0中断优先控制位 0:设定 Timer 0的中断优先权是 “低” 1:设定 Timer 0的中断优先权是 “高” +sbit IPINT0 = IP^0; //INT0中断优先控制位 0:设定INT0中断优先权是 “低” 1:设定INT0的中断优先权是 “高” + +/*IE*/ +sbit EA = IE^7; //中断使能的总控制 0:关闭所有的中断 1:打开所有的中断 +sbit EADC = IE^6; //ADC中断使能控制 0:关闭ADC中断 1:打开ADC中断 +sbit ET2 = IE^5; //Timer2中断使能控制 0:关闭Timer2中断 1:打开Timer2中断 +sbit ESSI0 = IE^4; //SSI0中断使能控制 0:关闭SSI0中断 1:打开SSI0中断 +sbit ET1 = IE^3; //Timer1中断使能控制 0:关闭TIMER1中断 1:打开TIMER1中断 +sbit ET0 = IE^1; //Timer0中断使能控制 0:关闭TIMER0中断 1:打开TIMER0中断 +sbit EINT0 = IE^0; //INT0中断使能控制 0:关闭INT0中断 1:打开INT0中断 + +/*TCON*/ +sbit TF1 = TCON^7; //T1溢出中断请求标志位 T1产生溢出,发生中断时,硬件将TF1置为“1”,申请中断,CPU响应时,硬件清“0”。 +sbit TR1 = TCON^6; //定时器T1的运行控制位 0:Timer1禁止计数 1:Timer1开始计数 +sbit TF0 = TCON^5; //T0溢出中断请求标志位 T0产生溢出,发生中断时,硬件将TF0置为“1”,申请中断,CPU响应时,硬件清“0”。 +sbit TR0 = TCON^4; //定时器T0的运行控制位 0:Timer0禁止计数 1:Timer0开始计数 + +/******************* P0 ******************/ +sbit P05 = P0^5; + +/******************* P1 ******************/ +sbit P13 = P1^3; +sbit P12 = P1^2; +sbit P11 = P1^1; + +/******************* P2 ******************/ +sbit P21 = P2^1; +sbit P20 = P2^0; + +/**************************************************************************** +*注意:初始化IO口后,需调用以下宏。 +*****************************************************************************/ +#define SC92F7490_NIO_Init() {P0CON|=0xDF;P1CON|=0xF1;P2CON|=0xFC;P5CON|=0x03;} + +#endif \ No newline at end of file diff --git a/CFG/SC92F8363B/Keil_Mould/FWLib/SC92F_Lib/inc/SC92F74Ax_2_ASM.H b/CFG/SC92F8363B/Keil_Mould/FWLib/SC92F_Lib/inc/SC92F74Ax_2_ASM.H new file mode 100644 index 0000000..ffec448 --- /dev/null +++ b/CFG/SC92F8363B/Keil_Mould/FWLib/SC92F_Lib/inc/SC92F74Ax_2_ASM.H @@ -0,0 +1,294 @@ +/*-------------------------------------------------------------------------- +SC92F74Ax_ASM.H + +ASM Header file for SC92F74Ax microcontroller. +Copyright (c) 2020 Shenzhen SinOne Chip Electronic CO., Ltd. +All rights reserved. +深圳市赛元微电子有限公司 +版本号: V1.0 +日期: 2020.07.01 + + +--------------------------------------------------------------------------*/ +#ifndef _SC92F74Ax_ASM_H_ +#define _SC92F74Ax_ASM_H_ + +/* ------------------- 字节寄存器-------------------- */ +/*CPU*/ +ACC EQU 0xE0; //累加器A +B EQU 0xF0; //通用寄存器B +PSW EQU 0xD0; //程序状态字 +DPH EQU 0x83; //数据指针高8位 +DPL EQU 0x82; //数据指针低8位 +SP EQU 0x81; //堆栈指针 + +/*system*/ +PCON EQU 0x87; //电源管理控制寄存器 + +/*interrupt*/ +IP EQU 0xB8; //中断优先权控制寄存器 +IE EQU 0xA8; //中断控制寄存器 +IP1 EQU 0XB9; //中断优先级控制寄存器1 +IE1 EQU 0XA9; //中断控制寄存器1 + +/*PORT*/ +P5PH EQU 0xDA; //P5口模式控制寄存器 +P5CON EQU 0xD9; //P5口模式控制寄存器 +P5 EQU 0xD8; //P5口数据寄存器 +P4PH EQU 0xC2; //P4口模式控制寄存器 +P4CON EQU 0xC1; //P4口模式控制寄存器 +P4 EQU 0xC0; //P4口数据寄存器 +P3PH EQU 0xB2; //P3口模式控制寄存器 +P3CON EQU 0xB1; //P3口模式控制寄存器 +P3 EQU 0xB0; //P3口数据寄存器 +P2PH EQU 0xA2; //P2口模式控制寄存器 +P2CON EQU 0xA1; //P2口模式控制寄存器 +P2 EQU 0xA0; //P2口数据寄存器 +P1PH EQU 0x92; //P1口模式控制寄存器 +P1CON EQU 0x91; //P1口模式控制寄存器 +P1 EQU 0x90; //P1口数据寄存器 +P0PH EQU 0x9B; //P0口模式控制寄存器 +P0CON EQU 0x9A; //P0口模式控制寄存器 +P0 EQU 0x80; //P0口数据寄存器 +IOHCON0 EQU 0x96; //IOH0设置寄存器 +IOHCON1 EQU 0x97; //IOH1设置寄存器 + +/*TIMER*/ +TMCON EQU 0x8E; //定时器频率控制寄存器 +TH1 EQU 0x8D; //定时器1高8位 +TH0 EQU 0x8C; //定时器0高8位 +TL1 EQU 0x8B; //定时器1低8位 +TL0 EQU 0x8A; //定时器0低8位 +TMOD EQU 0x89; //定时器工作模式寄存器 +TCON EQU 0x88; //定时器控制寄存器 +T2CON EQU 0XC8; //定时器2控制寄存器 +T2MOD EQU 0XC9; //定时器2工作模式寄存器 +RCAP2L EQU 0XCA; //定时器2重载/捕捉低8位 +RCAP2H EQU 0XCB; //定时器2重载/捕捉高8位 +TL2 EQU 0XCC; //定时器2低8位 +TH2 EQU 0XCD; //定时器2高8位 + +/*ADC*/ +ADCCFG0 EQU 0xAB; //ADC功能配置寄存器0 +ADCCFG1 EQU 0xAC; //ADC功能配置寄存器1 +ADCCFG2 EQU 0xAA; //ADC功能配置寄存器2 +ADCCON EQU 0XAD; //ADC控制寄存器 +ADCVL EQU 0xAE; //ADC 结果寄存器 +ADCVH EQU 0xAF; //ADC 结果寄存器 + +/*PWM*/ +PWMCFG EQU 0xD4; //PWM设置寄存器 +PWMCON EQU 0xD3; //PWM控制寄存器 + +/*WatchDog*/ +BTMCON EQU 0XCE; //低频定时器控制寄存器 +WDTCON EQU 0xCF; //WDT控制寄存器 + +/*LCD*/ +OTCON EQU 0X8F; //LCD电压输出控制寄存器 +P0VO EQU 0X9C; //P0 LCD Bais 输出寄存器 +P1VO EQU 0X94; //P1 LCD Bais 输出寄存器 +P2VO EQU 0XA3; //P2 LCD Bais 输出寄存器 +P3VO EQU 0XB3; //P3 LCD Bais 输出寄存器 + +DDRCON EQU 0X93; //显示驱动设置寄存器 + +/*INT*/ +INT0F EQU 0XBA; //INT0 下降沿中断控制寄存器 +INT0R EQU 0XBB; //INT0 上降沿中断控制寄存器 +INT1F EQU 0XBC; //INT1 下降沿中断控制寄存器 +INT1R EQU 0XBD; //INT1 上降沿中断控制寄存器 +INT2F EQU 0XC6; //INT2 下降沿中断控制寄存器 +INT2R EQU 0XC7; //INT2 上降沿中断控制寄存器 + +/*IAP */ +IAPCTL EQU 0xF6; //IAP控制寄存器 +IAPDAT EQU 0xF5; //IAP数据寄存器 +IAPADE EQU 0xF4; //IAP扩展地址寄存器 +IAPADH EQU 0xF3; //IAP写入地址高位寄存器 +IAPADL EQU 0xF2; //IAP写入地址低8位寄存器 +IAPKEY EQU 0xF1; //IAP保护寄存器 + +/*uart*/ +SCON EQU 0x98; //串口控制寄存器 +SBUF EQU 0x99; //串口数据缓存寄存器 + +/*三合一*/ +SSCON0 EQU 0X9D; //SSI控制寄存器0 +SSCON1 EQU 0X9E; //SSI控制寄存器1 +SSCON2 EQU 0X95; //SSI控制寄存器2 +SSDAT EQU 0X9F; //SPI数据寄存器 + +OPINX EQU 0XFE; +OPREG EQU 0XFF; +EXADH EQU 0XF7; + +/*Check Sum*/ +CHKSUML EQU 0XFC; //Check Sum结果寄存器低位 +CHKSUMH EQU 0XFD; //Check Sum结果寄存器高位 + +/*乘除法*/ +EXA0 EQU 0xE9; //扩展累加器0 +EXA1 EQU 0xEA; //扩展累加器1 +EXA2 EQU 0xEB; //扩展累加器2 +EXA3 EQU 0xEC; //扩展累加器3 +EXBL EQU 0xED; //扩展B寄存器0 +EXBH EQU 0xEE; //扩展B寄存器1 +OPERCON EQU 0xEF; //运算控制寄存器 + +/* ------------------- 位寄存器-------------------- */ +/*PSW*/ +CY EQU PSW .7; //标志位 0:加法运算最高位无进位,或者减法运算最高位无借位时 1:加法运算最高位有进位,或者减法运算最高位有借位时 +AC EQU PSW .6; //进位辅助标志位 0:无借位、进位 1:加法运算时在bit3位有进位,或减法运算在bit3位有借位时 +F0 EQU PSW .5; //用户标志位 +RS1 EQU PSW .4; //工作寄存器组选择位 +RS0 EQU PSW .3; //工作寄存器组选择位 +OV EQU PSW .2; //溢出标志位 +F1 EQU PSW .1; //F1标志 +P EQU PSW .0; //奇偶标志位 0:ACC中1的个数为偶数(包括0个) 1:ACC中1的个数为奇数 + +/*T2CON*/ +TF2 EQU T2CON .7; +EXF2 EQU T2CON .6; +RCLK EQU T2CON .5; +TCLK EQU T2CON .4; +EXEN2 EQU T2CON .3; +TR2 EQU T2CON .2; +T2 EQU T2CON .1; +CP EQU T2CON .0; + +/*IP*/ +IPADC EQU IP .6; //ADC中断优先控制位 0:设定ADC的中断优先权是 “低” 1:设定ADC的中断优先权是 “高” +IPT2 EQU IP .5; //PWM中断优先控制位 0:设定PWM的中断优先权是 “低” 1:设定PWM 的中断优先权是 “高” +IPUART EQU IP .4; //Uart中断优先控制位 0:设定Uart的中断优先权是 “低” 1:设定Uart的中断优先权是 “高” +IPT1 EQU IP .3; //Timer1中断优先控制位 0:设定Timer1的中断优先权是 “低” 1:设定Timer1的中断优先权是 “高” +IPINT1 EQU IP .2; //INT1中断优先控制位 0:设定INT1中断优先权是 “低” 1:设定INT1中断优先权是 “高” +IPT0 EQU IP .1; //Timer0中断优先控制位 0:设定Timer0的中断优先权是 “低” 1:设定Timer0的中断优先权是 “高” +IPINT0 EQU IP .0; //INT0中断优先控制位 0:设定INT0中断优先权是 “低” 1:设定INT0中断优先权是 “高” + +/*IE*/ +EA EQU IE .7; //中断使能的总控制 0:关闭所有的中断 1:打开所有的中断 +EADC EQU IE .6; //ADC中断使能控制 0:关闭ADC中断 1:打开ADC中断 +ET2 EQU IE .5; //PWM中断使能控制 0:关闭PWM中断 1:打开PWM中断 +EUART EQU IE .4; //UART中断使能控制 0:关闭UART中断 1:打开UART中断 +ET1 EQU IE .3; //Timer1中断使能控制 0:关闭TIMER1中断 1:打开TIMER1中断 +EINT1 EQU IE .2; //INT1中断使能控制 0:关闭INT1中断 1:打开INT1中断 +ET0 EQU IE .1; //Timer0中断使能控制 0:关闭TIMER0中断 1:打开TIMER0中断 +EINT0 EQU IE .0; //INT0的中断使能控制 0:关闭INT0中断 1:打开INT0中断 + +/*TCON*/ +TF1 EQU TCON .7; //T1溢出中断请求标志位 T1产生溢出,发生中断时,硬件将TF1置为“1”,申请中断,CPU响应时,硬件清“0”。 +TR1 EQU TCON .6; //定时器T1的运行控制位 0:Timer1禁止计数 1:Timer1开始计数 +TF0 EQU TCON .5; //T0溢出中断请求标志位 T0产生溢出,发生中断时,硬件将TF0置为“1”,申请中断,CPU响应时,硬件清“0”。 +TR0 EQU TCON .4; //定时器T0的运行控制位 0:Timer0禁止计数 1:Timer0开始计数 +BITIE1 EQU TCON .3; //INT1溢出中断请求标志 +BITIE0 EQU TCON .1; //INT0溢出中断请求标志 + +/*SCON*/ +SM0 EQU SCON .7; +SM1 EQU SCON .6; +SM2 EQU SCON .5; +REN EQU SCON .4; +TB8 EQU SCON .3; +RB8 EQU SCON .2; +TI EQU SCON .1; +RI EQU SCON .0; + +/******************* P0 ****************** +*SC92F74A7封装未引出的管脚:无 +*SC92F74A6封装未引出的管脚:无 +*SC92F74A5封装未引出的管脚:P00 +******************************************/ +P07 EQU P0 .7; +P06 EQU P0 .6; +P05 EQU P0 .5; +P04 EQU P0 .4; +P03 EQU P0 .3; +P02 EQU P0 .2; +P01 EQU P0 .1; +P00 EQU P0 .0; + +/******************* P1 ****************** +*SC92F74A7封装未引出的管脚:无 +*SC92F74A6封装未引出的管脚:无 +*SC92F74A5封装未引出的管脚:无 +******************************************/ +P17 EQU P1 .7; +P16 EQU P1 .6; +P15 EQU P1 .5; +P14 EQU P1 .4; +P13 EQU P1 .3; +P12 EQU P1 .2; +P11 EQU P1 .1; +P10 EQU P1 .0; + +/******************* P2 ****************** +*SC92F74A7封装未引出的管脚:无 +*SC92F74A6封装未引出的管脚:无 +*SC92F74A5封装未引出的管脚:无 +******************************************/ +P27 EQU P2 .7; +P26 EQU P2 .6; +P25 EQU P2 .5; +P24 EQU P2 .4; +P23 EQU P2 .3; +P22 EQU P2 .2; +P21 EQU P2 .1; +P20 EQU P2 .0; + +/******************* P3 ****************** +*SC92F74A7封装未引出的管脚:无 +*SC92F74A6封装未引出的管脚:无 +*SC92F74A5封装未引出的管脚:P3 +******************************************/ +P37 EQU P3 .7; +P36 EQU P3 .6; +P35 EQU P3 .5; +P34 EQU P3 .4; +P33 EQU P3 .3; +P32 EQU P3 .2; +P31 EQU P3 .1; +P30 EQU P3 .0; + +/******************* P4 ****************** +*SC92F74A7封装未引出的管脚:无 +*SC92F84A6封装未引出的管脚:P46/P47 +*SC92F84A5封装未引出的管脚:P40 +******************************************/ +P47 EQU P4 .7; +P46 EQU P4 .6; +P45 EQU P4 .5; +P44 EQU P4 .4; +P43 EQU P4 .3; +P42 EQU P4 .2; +P41 EQU P4 .1; +P40 EQU P4 .0; + +/******************* P5 ****************** +*SC92F84A7封装未引出的管脚:无 +*SC92F84A6封装未引出的管脚:P54/P55 +*SC92F84A5封装未引出的管脚:P5 +******************************************/ +P55 EQU P5 .5; +P54 EQU P5 .4; +P53 EQU P5 .3; +P52 EQU P5 .2; +P51 EQU P5 .1; +P50 EQU P5 .0; + +/**************************************************************************** +*注意:封装未引出的管脚,需设置为强推挽输出模式 +*IC选型:请根据所使用的IC型号,在初始化完IO口后,调用相对应的未引出管脚的IO口配置; +*如若选择SC92F74A7,则不用调用宏定义。 +*****************************************************************************/ +SC92F74A6_NIO_Init MACRO IO //SC92F74A6未引出管脚的IO口配置 + ORL P4CON,#0XC0 + ORL P5CON,#0X30 + ENDM +SC92F74A5_NIO_Init MACRO IO //SC92F74A5未引出管脚的IO口配置 + ORL P0CON,#0X01 + ORL P3CON,#0XFF + ORL P4CON,#0X01 + ORL P5CON,#0X3F + ENDM +#endif diff --git a/CFG/SC92F8363B/Keil_Mould/FWLib/SC92F_Lib/inc/SC92F74Ax_2_C.H b/CFG/SC92F8363B/Keil_Mould/FWLib/SC92F_Lib/inc/SC92F74Ax_2_C.H new file mode 100644 index 0000000..6356b52 --- /dev/null +++ b/CFG/SC92F8363B/Keil_Mould/FWLib/SC92F_Lib/inc/SC92F74Ax_2_C.H @@ -0,0 +1,296 @@ +/*-------------------------------------------------------------------------- +SC92F74Ax_C.H + +C Header file for SC92F74Ax microcontroller. +Copyright (c) 2020 Shenzhen SinOne Chip Electronic CO., Ltd. +All rights reserved. +深圳市赛元微电子有限公司 +版本号: V1.0 +日期: 2020.07.01 +--------------------------------------------------------------------------*/ +#ifndef _SC92F74Ax_H_ +#define _SC92F74Ax_H_ + +/* ------------------- 字节寄存器-------------------- */ +/*CPU*/ +sfr ACC = 0xE0; //累加器A +sfr B = 0xF0; //通用寄存器B +sfr PSW = 0xD0; //程序状态字 +sfr DPH = 0x83; //数据指针高8位 +sfr DPL = 0x82; //数据指针低8位 +sfr SP = 0x81; //堆栈指针 + + +/*system*/ +sfr PCON = 0x87; //电源管理控制寄存器 + +/*interrupt*/ +sfr IP1 = 0XB9; //中断优先级控制寄存器1 +sfr IP = 0xB8; //中断优先权控制寄存器 +sfr IE = 0xA8; //中断控制寄存器 +sfr IE1 = 0XA9; //中断控制寄存器1 + +/*PORT*/ +sfr P5PH = 0xDA; //P5口模式控制寄存器 +sfr P5CON = 0xD9; //P5口模式控制寄存器 +sfr P5 = 0xD8; //P5口数据寄存器 +sfr P4PH = 0xC2; //P4口模式控制寄存器 +sfr P4CON = 0xC1; //P4口模式控制寄存器 +sfr P4 = 0xC0; //P4口数据寄存器 +sfr P3PH = 0xB2; //P3口模式控制寄存器 +sfr P3CON = 0xB1; //P3口模式控制寄存器 +sfr P3 = 0xB0; //P3口数据寄存器 +sfr P2PH = 0xA2; //P2口模式控制寄存器 +sfr P2CON = 0xA1; //P2口模式控制寄存器 +sfr P2 = 0xA0; //P2口数据寄存器 +sfr P1PH = 0x92; //P1口模式控制寄存器 +sfr P1CON = 0x91; //P1口模式控制寄存器 +sfr P1 = 0x90; //P1口数据寄存器 +sfr P0PH = 0x9B; //P0口模式控制寄存器 +sfr P0CON = 0x9A; //P0口模式控制寄存器 +sfr P0 = 0x80; //P0口数据寄存器 +sfr IOHCON0 = 0x96; //IOH0设置寄存器 +sfr IOHCON1 = 0x97; //IOH1设置寄存器 + +/*TIMER*/ +sfr TMCON = 0x8E; //定时器频率控制寄存器 +sfr TH1 = 0x8D; //定时器1高8位 +sfr TH0 = 0x8C; //定时器0高8位 +sfr TL1 = 0x8B; //定时器1低8位 +sfr TL0 = 0x8A; //定时器0低8位 +sfr TMOD = 0x89; //定时器工作模式寄存器 +sfr TCON = 0x88; //定时器控制寄存器 +sfr T2CON = 0xC8; //定时器2控制寄存器 +sfr T2MOD = 0xC9; //定时器2工作模式寄存器 +sfr RCAP2L = 0xCA; //定时器2重载/捕捉低8位 +sfr RCAP2H = 0xCB; //定时器2重载/捕捉高8位 +sfr TL2 = 0xCC; //定时器2低8位 +sfr TH2 = 0xCD; //定时器2高8位 + + +/*ADC*/ +sfr ADCCFG0 = 0xAB; //ADC功能配置寄存器0 +sfr ADCCFG1 = 0xAC; //ADC功能配置寄存器1 +sfr ADCCFG2 = 0XAA; //ADC功能配置寄存器2 +sfr ADCCON = 0XAD; //ADC控制寄存器 +sfr ADCVL = 0xAE; //ADC 结果寄存器 +sfr ADCVH = 0xAF; //ADC 结果寄存器 + +/*PWM*/ +sfr PWMCFG = 0xD4; //PWM设置寄存器 +sfr PWMCON = 0xD3; //PWM控制寄存器 + + +// +//*WatchDog*/ +sfr BTMCON = 0XCE; //低频定时器控制寄存器 +sfr WDTCON = 0xCF; //WDT控制寄存器 + + +/*LCD*/ +sfr OTCON = 0X8F; //LCD电压输出控制寄存器 +sfr P0VO = 0X9C; //P0 LCD Bais 输出寄存器 +sfr P1VO = 0X94; //P1 LCD Bais 输出寄存器 +sfr P2VO = 0XA3; //P2 LCD Bais 输出寄存器 +sfr P3VO = 0XB3; //P3 LCD Bais 输出寄存器 + +sfr DDRCON = 0X93; //显示驱动设置寄存器 + + +/*INT*/ +sfr INT0F = 0XBA; //INT0 下降沿中断控制寄存器 +sfr INT0R = 0XBB; //INT0 上降沿中断控制寄存器 +sfr INT1F = 0XBC; //INT1 下降沿中断控制寄存器 +sfr INT1R = 0XBD; //INT1 上降沿中断控制寄存器 +sfr INT2F = 0XC6; //INT2 下降沿中断控制寄存器 +sfr INT2R = 0XC7; //INT2 上降沿中断控制寄存器 + + +/*IAP */ +sfr IAPCTL = 0xF6; //IAP控制寄存器 +sfr IAPDAT = 0xF5; //IAP数据寄存器 +sfr IAPADE = 0xF4; //IAP扩展地址寄存器 +sfr IAPADH = 0xF3; //IAP写入地址高位寄存器 +sfr IAPADL = 0xF2; //IAP写入地址低8位寄存器 +sfr IAPKEY = 0xF1; //IAP保护寄存器 + +/*UART*/ +sfr SCON = 0X98; //串口控制寄存器 +sfr SBUF = 0X99; //串口数据缓存寄存器 + +/*SPI*/ +sfr SSCON0 = 0X9D; //SPI控制寄存器0 +sfr SSCON1 = 0X9E; //SPI控制寄存器1 +sfr SSCON2 = 0X95; //SPI控制寄存器2 +sfr SSDAT = 0X9F; //SPI数据寄存器 + +sfr OPINX = 0XFE; +sfr OPREG = 0XFF; +sfr EXADH = 0XF7; + +/*Check Sum*/ +sfr CHKSUML = 0XFC; //Check Sum结果寄存器低位 +sfr CHKSUMH = 0XFD; //Check Sum结果寄存器高位 + +/*模拟比较器*/ +sfr CMPCFG = 0XB6; //模拟比较器设置寄存器 +sfr CMPCON = 0XB7; //模拟比较器控制寄存器 + +/*乘除法器*/ +sfr EXA0 = 0xE9; //扩展累加器0 +sfr EXA1 = 0xEA; //扩展累加器1 +sfr EXA2 = 0xEB; //扩展累加器2 +sfr EXA3 = 0xEC; //扩展累加器3 +sfr EXBL = 0xED; //扩展B寄存器0 +sfr EXBH = 0xEE; //扩展B寄存器1 +sfr OPERCON = 0xEF; //运算控制寄存器 + +/* ------------------- 位寄存器-------------------- */ +/*PSW*/ +sbit CY = PSW^7; //标志位 0:加法运算最高位无进位,或者减法运算最高位无借位时 1:加法运算最高位有进位,或者减法运算最高位有借位时 +sbit AC = PSW^6; //进位辅助标志位 0:无借位、进位 1:加法运算时在bit3位有进位,或减法运算在bit3位有借位时 +sbit F0 = PSW^5; //用户标志位 +sbit RS1 = PSW^4; //工作寄存器组选择位 +sbit RS0 = PSW^3; //工作寄存器组选择位 +sbit OV = PSW^2; //溢出标志位 +sbit F1 = PSW^1; //F1标志 +sbit P = PSW^0; //奇偶标志位 0:ACC中1的个数为偶数(包括0个) 1:ACC中1的个数为奇数 + +/*T2CON*/ +sbit TF2 = T2CON^7; +sbit EXF2 = T2CON^6; +sbit RCLK = T2CON^5; +sbit CLK = T2CON^4; +sbit EXEN2 = T2CON^3; +sbit TR2 = T2CON^2; +sbit T2 = T2CON^1; +sbit CP = T2CON^0; + + +/*IP*/ +sbit IPADC = IP^6; //ADC中断优先控制位 0:设定 ADC的中断优先权是 “低” 1:设定 ADC的中断优先权是 “高” +sbit IPT2 = IP^5; //Timer2中断优先控制位 0:设定 Timer2的中断优先权是 “低” 1:设定Timer2的中断优先权是 “高” +sbit IPUART = IP^4; //UART中断优先控制位 0:设定UART的中断优先权是 “低” 1:设定UART的中断优先权是 “高” +sbit IPT1 = IP^3; //Timer1中断优先控制位 0:设定 Timer 1的中断优先权是 “低” 1:设定 Timer 1的中断优先权是 “高” +sbit IPINT1 = IP^2; //INT1中断优先控制位 0:设定INT1中断优先权是 “低” 1:设定INT1的中断优先权是 “高” +sbit IPT0 = IP^1; //Timer0中断优先控制位 0:设定 Timer 0的中断优先权是 “低” 1:设定 Timer 0的中断优先权是 “高” +sbit IPINT0 = IP^0; //INT0中断优先控制位 0:设定INT0中断优先权是 “低” 1:设定INT0的中断优先权是 “高” + +/*IE*/ +sbit EA = IE^7; //中断使能的总控制 0:关闭所有的中断 1:打开所有的中断 +sbit EADC = IE^6; //ADC中断使能控制 0:关闭ADC中断 1:打开ADC中断 +sbit ET2 = IE^5; //Timer2中断使能控制 0:关闭Timer2中断 1:打开Timer2中断 +sbit EUART = IE^4; //UART中断使能控制 0:关闭UART中断 1:打开UART中断 +sbit ET1 = IE^3; //Timer1中断使能控制 0:关闭TIMER1中断 1:打开TIMER1中断 +sbit EINT1 = IE^2; //INT1中断使能控制 0:关闭INT1中断 1:打开INT1中断 +sbit ET0 = IE^1; //Timer0中断使能控制 0:关闭TIMER0中断 1:打开TIMER0中断 +sbit EINT0 = IE^0; //INT0中断使能控制 0:关闭INT0中断 1:打开INT0中断 + +/*TCON*/ +sbit TF1 = TCON^7; //T1溢出中断请求标志位 T1产生溢出,发生中断时,硬件将TF1置为“1”,申请中断,CPU响应时,硬件清“0”。 +sbit TR1 = TCON^6; //定时器T1的运行控制位 0:Timer1禁止计数 1:Timer1开始计数 +sbit TF0 = TCON^5; //T0溢出中断请求标志位 T0产生溢出,发生中断时,硬件将TF0置为“1”,申请中断,CPU响应时,硬件清“0”。 +sbit TR0 = TCON^4; //定时器T0的运行控制位 0:Timer0禁止计数 1:Timer0开始计数 +sbit BITIE1 = TCON^3; //INT1溢出中断请求标志 +sbit BITIE0 = TCON^1; //INT0溢出中断请求标志 + +/*SCON*/ +sbit SM0 = SCON^7; +sbit SM1 = SCON^6; +sbit SM2 = SCON^5; +sbit REN = SCON^4; +sbit TB8 = SCON^3; +sbit RB8 = SCON^2; +sbit TI = SCON^1; +sbit RI = SCON^0; + +/******************* P0 ****************** +*SC92F74A7封装未引出的管脚:无 +*SC92F74A6封装未引出的管脚:无 +*SC92F74A5封装未引出的管脚:P00 +******************************************/ +sbit P07 = P0^7; +sbit P06 = P0^6; +sbit P05 = P0^5; +sbit P04 = P0^4; +sbit P03 = P0^3; +sbit P02 = P0^2; +sbit P01 = P0^1; +sbit P00 = P0^0; + +/******************* P1 ****************** +*SC92F74A7封装未引出的管脚:无 +*SC92F74A6封装未引出的管脚:无 +*SC92F74A5封装未引出的管脚:无 +******************************************/ +sbit P17 = P1^7; +sbit P16 = P1^6; +sbit P15 = P1^5; +sbit P14 = P1^4; +sbit P13 = P1^3; +sbit P12 = P1^2; +sbit P11 = P1^1; +sbit P10 = P1^0; + +/******************* P2 ****************** +*SC92F74A7封装未引出的管脚:无 +*SC92F74A6封装未引出的管脚:无 +*SC92F74A5封装未引出的管脚:无 +******************************************/ +sbit P27 = P2^7; +sbit P26 = P2^6; +sbit P25 = P2^5; +sbit P24 = P2^4; +sbit P23 = P2^3; +sbit P22 = P2^2; +sbit P21 = P2^1; +sbit P20 = P2^0; + +/******************* P3 ****************** +*SC92F74A7封装未引出的管脚:无 +*SC92F74A6封装未引出的管脚:无 +*SC92F74A5封装未引出的管脚:P3 +******************************************/ +sbit P37 = P3^7; +sbit P36 = P3^6; +sbit P35 = P3^5; +sbit P34 = P3^4; +sbit P33 = P3^3; +sbit P32 = P3^2; +sbit P31 = P3^1; +sbit P30 = P3^0; + +/******************* P4 ****************** +*SC92F74A7封装未引出的管脚:无 +*SC92F74A6封装未引出的管脚:P46/P47 +*SC92F74A5封装未引出的管脚:P40 +******************************************/ +sbit P47 = P4^7; +sbit P46 = P4^6; +sbit P45 = P4^5; +sbit P44 = P4^4; +sbit P43 = P4^3; +sbit P42 = P4^2; +sbit P41 = P4^1; +sbit P40 = P4^0; + +/******************* P5 ****************** +*SC92F74A7封装未引出的管脚:无 +*SC92F74A6封装未引出的管脚:P54/P55 +*SC92F74A5封装未引出的管脚:P5 +******************************************/ +sbit P55 = P5^5; +sbit P54 = P5^4; +sbit P53 = P5^3; +sbit P52 = P5^2; +sbit P51 = P5^1; +sbit P50 = P5^0; + +/**************************************************************************** +*注意:封装未引出的管脚,需设置为强推挽输出模式 +*IC选型:请根据所使用的IC型号,在初始化完IO口后,调用相对应的未引出管脚的IO口配置; +*如若选SC92F74A7,则不用调用宏定义。 +*****************************************************************************/ +#define SC92F74A6_NIO_Init() {P4CON|=0xC0,P5CON|=0x30;} //SC92F74A6的未引出来的IO口配置 +#define SC92F74A5_NIO_Init() {P0CON|=0x01,P3CON|=0xFF,P4CON|=0x01,P5CON|=0x3F;} //SC92F74A5的未引出来的IO口配置 +#endif \ No newline at end of file diff --git a/CFG/SC92F8363B/Keil_Mould/FWLib/SC92F_Lib/inc/SC92F754x_C.H b/CFG/SC92F8363B/Keil_Mould/FWLib/SC92F_Lib/inc/SC92F754x_C.H new file mode 100644 index 0000000..fe6f5d3 --- /dev/null +++ b/CFG/SC92F8363B/Keil_Mould/FWLib/SC92F_Lib/inc/SC92F754x_C.H @@ -0,0 +1,313 @@ + /*-------------------------------------------------------------------------- +SC92F754X_C.H + +C Header file for SC92F754X microcontroller. +Copyright (c) 2018 Shenzhen SinOne Chip Electronic CO., Ltd. +All rights reserved. +深圳市赛元微电子有限公司 +版本号: V2.0 +日期: 2019.03.18 +--------------------------------------------------------------------------*/ +#ifndef _SC92F754X_H_ +#define _SC92F754X_H_ + +/* ------------------- 字节寄存器-------------------- */ +///*CPU*/ +sfr ACC = 0xE0; //累加器A +sfr B = 0xF0; //通用寄存器B +sfr PSW = 0xD0; //程序状态字 +sfr DPH = 0x83; //数据指针高8位 +sfr DPL = 0x82; //数据指针低8位 +sfr SP = 0x81; //堆栈指针 + + +/*system*/ +sfr PCON = 0x87; //电源管理控制寄存器 + +/*interrupt*/ +sfr IP1 = 0XB9; //中断优先级控制寄存器1 +sfr IP = 0xB8; //中断优先权控制寄存器 +sfr IE = 0xA8; //中断控制寄存器 +sfr IE1 = 0XA9; //中断控制寄存器1 + +/*PORT*/ +sfr P5PH = 0xDA; //P5口模式控制寄存器 +sfr P5CON = 0xD9; //P5口模式控制寄存器 +sfr P5 = 0xD8; //P5口数据寄存器 +sfr P4PH = 0xC2; //P4口模式控制寄存器 +sfr P4CON = 0xC1; //P4口模式控制寄存器 +sfr P4 = 0xC0; //P4口数据寄存器 +sfr P3PH = 0xB2; //P3口模式控制寄存器 +sfr P3CON = 0xB1; //P3口模式控制寄存器 +sfr P3 = 0xB0; //P3口数据寄存器 +sfr P2PH = 0xA2; //P2口模式控制寄存器 +sfr P2CON = 0xA1; //P2口模式控制寄存器 +sfr P2 = 0xA0; //P2口数据寄存器 +sfr P1PH = 0x92; //P1口模式控制寄存器 +sfr P1CON = 0x91; //P1口模式控制寄存器 +sfr P1 = 0x90; //P1口数据寄存器 +sfr P0PH = 0x9B; //P0口模式控制寄存器 +sfr P0CON = 0x9A; //P0口模式控制寄存器 +sfr P0 = 0x80; //P0口数据寄存器 +sfr IOHCON0 = 0x96; //IOH0设置寄存器 +sfr IOHCON1 = 0x97; //IOH1设置寄存器 + +/*TIMER*/ +sfr TMCON = 0x8E; //定时器频率控制寄存器 +sfr TH1 = 0x8D; //定时器1高8位 +sfr TH0 = 0x8C; //定时器0高8位 +sfr TL1 = 0x8B; //定时器1低8位 +sfr TL0 = 0x8A; //定时器0低8位 +sfr TMOD = 0x89; //定时器工作模式寄存器 +sfr TCON = 0x88; //定时器控制寄存器 +sfr T2CON = 0xC8; //定时器2控制寄存器 +sfr T2MOD = 0xC9; //定时器2工作模式寄存器 +sfr RCAP2L = 0xCA; //定时器2重载/捕捉低8位 +sfr RCAP2H = 0xCB; //定时器2重载/捕捉高8位 +sfr TL2 = 0xCC; //定时器2低8位 +sfr TH2 = 0xCD; //定时器2高8位 + + +/*ADC*/ +sfr ADCCFG0 = 0xAB; //ADC功能配置寄存器0 +sfr ADCCFG1 = 0xAC; //ADC功能配置寄存器1 +sfr ADCCFG2 = 0XAA; //ADC功能配置寄存器2 +sfr ADCCON = 0XAD; //ADC控制寄存器 +sfr ADCVL = 0xAE; //ADC 结果寄存器 +sfr ADCVH = 0xAF; //ADC 结果寄存器 + +/*PWM*/ +sfr PWMCFG = 0xD4; //PWM设置寄存器 +sfr PWMCON = 0xD3; //PWM设置寄存器 + + +// +///*WatchDog*/ +sfr BTMCON = 0XCE; //低频定时器控制寄存器 +sfr WDTCON = 0xCF; //WDT控制寄存器 + + +/*LCD*/ +sfr OTCON = 0X8F; //LCD电压输出控制寄存器 +sfr P0VO = 0X9C; //P0 LCD Bais 输出寄存器 +sfr P1VO = 0X94; //P1 LCD Bais 输出寄存器 +sfr P2VO = 0XA3; //P2 LCD Bais 输出寄存器 +sfr P3VO = 0XB3; //P3 LCD Bais 输出寄存器 + +sfr DDRCON = 0X93; //显示驱动设置寄存器 + + +/*INT*/ +sfr INT0F = 0XBA; //INT0 下降沿中断控制寄存器 +sfr INT0R = 0XBB; //INT0 上降沿中断控制寄存器 +sfr INT1F = 0XBC; //INT1 下降沿中断控制寄存器 +sfr INT1R = 0XBD; //INT1 上降沿中断控制寄存器 +sfr INT2F = 0XC6; //INT2 下降沿中断控制寄存器 +sfr INT2R = 0XC7; //INT2 上降沿中断控制寄存器 + +/*PGA*/ + + +/*IAP */ +sfr IAPCTL = 0xF6; //IAP控制寄存器 +sfr IAPDAT = 0xF5; //IAP数据寄存器 +sfr IAPADE = 0xF4; //IAP扩展地址寄存器 +sfr IAPADH = 0xF3; //IAP写入地址高位寄存器 +sfr IAPADL = 0xF2; //IAP写入地址低8位寄存器 +sfr IAPKEY = 0xF1; //IAP保护寄存器 + +/*UART*/ +sfr SCON = 0X98; //串口控制寄存器 +sfr SBUF = 0X99; //串口数据缓存寄存器 + +/*SPI*/ +sfr SSCON0 = 0X9D; //SPI控制寄存器0 +sfr SSCON1 = 0X9E; //SPI控制寄存器1 +sfr SSCON2 = 0X95; //SPI控制寄存器2 +sfr SSDAT = 0X9F; //SPI数据寄存器 + +sfr OPINX = 0XFE; +sfr OPREG = 0XFF; +sfr EXADH = 0XF7; + +/*Check Sum*/ +sfr CHKSUML = 0XFC; //Check Sum结果寄存器低位 +sfr CHKSUMH = 0XFD; //Check Sum结果寄存器高位 + +/*模拟比较器*/ +sfr CMPCFG = 0XB6; //模拟比较器设置寄存器 +sfr CMPCON = 0XB7; //模拟比较器控制寄存器 + +/*乘除法器*/ +sfr EXA0 = 0xE9; //扩展累加器0 +sfr EXA1 = 0xEA; //扩展累加器1 +sfr EXA2 = 0xEB; //扩展累加器2 +sfr EXA3 = 0xEC; //扩展累加器3 +sfr EXBL = 0xED; //扩展B寄存器0 +sfr EXBH = 0xEE; //扩展B寄存器1 +sfr OPERCON = 0xEF; //运算控制寄存器 + +///* ------------------- 位寄存器-------------------- */ +/*B*/ +/*TKCON*/ +/*ACC*/ +/*PSW*/ +sbit CY = PSW^7; //标志位 0:加法运算最高位无进位,或者减法运算最高位无借位时 1:加法运算最高位有进位,或者减法运算最高位有借位时 +sbit AC = PSW^6; //进位辅助标志位 0:无借位、进位 1:加法运算时在bit3位有进位,或减法运算在bit3位有借位时 +sbit F0 = PSW^5; //用户标志位 +sbit RS1 = PSW^4; //工作寄存器组选择位 +sbit RS0 = PSW^3; //工作寄存器组选择位 +sbit OV = PSW^2; //溢出标志位 +sbit F1 = PSW^1; //F1标志 +sbit P = PSW^0; //奇偶标志位 0:ACC中1的个数为偶数(包括0个) 1:ACC中1的个数为奇数 + +/*T2CON*/ +sbit TF2 = T2CON^7; +sbit EXF2 = T2CON^6; +sbit RCLK = T2CON^5; +sbit CLK = T2CON^4; +sbit EXEN2 = T2CON^3; +sbit TR2 = T2CON^2; +sbit T2 = T2CON^1; +sbit CP = T2CON^0; + + +/*IP*/ +sbit IPADC = IP^6; //ADC中断优先控制位 0:设定 ADC的中断优先权是 “低” 1:设定 ADC的中断优先权是 “高” +sbit IPT2 = IP^5; //Timer2中断优先控制位 0:设定 Timer2的中断优先权是 “低” 1:设定Timer2的中断优先权是 “高” +sbit IPUART = IP^4; //UART中断优先控制位 0:设定UART的中断优先权是 “低” 1:设定UART的中断优先权是 “高” +sbit IPT1 = IP^3; //Timer1中断优先控制位 0:设定 Timer 1的中断优先权是 “低” 1:设定 Timer 1的中断优先权是 “高” +sbit IPINT1 = IP^2; //INT1中断优先控制位 0:设定INT1中断优先权是 “低” 1:设定INT1的中断优先权是 “高” +sbit IPT0 = IP^1; //Timer0中断优先控制位 0:设定 Timer 0的中断优先权是 “低” 1:设定 Timer 0的中断优先权是 “高” +sbit IPINT0 = IP^0; //INT0中断优先控制位 0:设定INT0中断优先权是 “低” 1:设定INT0的中断优先权是 “高” + +/*IE*/ +sbit EA = IE^7; //中断使能的总控制 0:关闭所有的中断 1:打开所有的中断 +sbit EADC = IE^6; //ADC中断使能控制 0:关闭ADC中断 1:打开ADC中断 +sbit ET2 = IE^5; //Timer2中断使能控制 0:关闭Timer2中断 1:打开Timer2中断 +sbit EUART = IE^4; //UART中断使能控制 0:关闭UART中断 1:打开UART中断 +sbit ET1 = IE^3; //Timer1中断使能控制 0:关闭TIMER1中断 1:打开TIMER1中断 +sbit EINT1 = IE^2; //INT1中断使能控制 0:关闭INT1中断 1:打开INT1中断 +sbit ET0 = IE^1; //Timer0中断使能控制 0:关闭TIMER0中断 1:打开TIMER0中断 +sbit EINT0 = IE^0; //INT0中断使能控制 0:关闭INT0中断 1:打开INT0中断 + +/*TCON*/ +sbit TF1 = TCON^7; //T1溢出中断请求标志位 T1产生溢出,发生中断时,硬件将TF1置为“1”,申请中断,CPU响应时,硬件清“0”。 +sbit TR1 = TCON^6; //定时器T1的运行控制位 0:Timer1禁止计数 1:Timer1开始计数 +sbit TF0 = TCON^5; //T0溢出中断请求标志位 T0产生溢出,发生中断时,硬件将TF0置为“1”,申请中断,CPU响应时,硬件清“0”。 +sbit TR0 = TCON^4; //定时器T0的运行控制位 0:Timer0禁止计数 1:Timer0开始计数 + +/*SCON*/ +sbit SM0 = SCON^7; +sbit SM1 = SCON^6; +sbit SM2 = SCON^5; +sbit REN = SCON^4; +sbit TB8 = SCON^3; +sbit RB8 = SCON^2; +sbit TI = SCON^1; +sbit RI = SCON^0; + +/******************* P0 ****************** +*SC92F7547封装未引出的管脚:无 +*SC92F7546封装未引出的管脚:无 +*SC92F7545封装未引出的管脚:P00 +*SC92F7543封装未引出的管脚:P00/P01 +*SC92F7541封装未引出的管脚:P00/P01/P04/P05/P06 +******************************************/ +sbit P07 = P0^7; +sbit P06 = P0^6; +sbit P05 = P0^5; +sbit P04 = P0^4; +sbit P03 = P0^3; +sbit P02 = P0^2; +sbit P01 = P0^1; +sbit P00 = P0^0; + +/******************* P1 ****************** +*SC92F7547封装未引出的管脚:无 +*SC92F7546封装未引出的管脚:无 +*SC92F7545封装未引出的管脚:无 +*SC92F7543封装未引出的管脚:P10/P14/P15/P16/P17 +*SC92F7541封装未引出的管脚:P10/P16/P17 +******************************************/ +sbit P17 = P1^7; +sbit P16 = P1^6; +sbit P15 = P1^5; +sbit P14 = P1^4; +sbit P13 = P1^3; +sbit P12 = P1^2; +sbit P11 = P1^1; +sbit P10 = P1^0; + +/******************* P2 ****************** +*SC92F7547封装未引出的管脚:无 +*SC92F7546封装未引出的管脚:无 +*SC92F7545封装未引出的管脚:无 +*SC92F7543封装未引出的管脚:P26/P27 +*SC92F7541封装未引出的管脚:P24/P25/P26/P27 +******************************************/ +sbit P27 = P2^7; +sbit P26 = P2^6; +sbit P25 = P2^5; +sbit P24 = P2^4; +sbit P23 = P2^3; +sbit P22 = P2^2; +sbit P21 = P2^1; +sbit P20 = P2^0; + +/******************* P3 ****************** +*SC92F7547封装未引出的管脚:无 +*SC92F7546封装未引出的管脚:无 +*SC92F7545封装未引出的管脚:P3 +*SC92F7543封装未引出的管脚:无 +*SC92F7541封装未引出的管脚:P30/P31/P32/P33/P34/P35 +******************************************/ +sbit P37 = P3^7; +sbit P36 = P3^6; +sbit P35 = P3^5; +sbit P34 = P3^4; +sbit P33 = P3^3; +sbit P32 = P3^2; +sbit P31 = P3^1; +sbit P30 = P3^0; + +/******************* P4 ****************** +*SC92F7547封装未引出的管脚:无 +*SC92F7546封装未引出的管脚:P46/P47 +*SC92F7545封装未引出的管脚:P40 +*SC92F7543封装未引出的管脚:P40/P44/P45/P46/P47 +*SC92F7541封装未引出的管脚:P4 +******************************************/ +sbit P47 = P4^7; +sbit P46 = P4^6; +sbit P45 = P4^5; +sbit P44 = P4^4; +sbit P43 = P4^3; +sbit P42 = P4^2; +sbit P41 = P4^1; +sbit P40 = P4^0; + +/******************* P5 ****************** +*SC92F7547封装未引出的管脚:无 +*SC92F7546封装未引出的管脚:P54/P55 +*SC92F7545封装未引出的管脚:P5 +*SC92F7543封装未引出的管脚:P5 +*SC92F7541封装未引出的管脚:P5 +******************************************/ +sbit P55 = P5^5; +sbit P54 = P5^4; +sbit P53 = P5^3; +sbit P52 = P5^2; +sbit P51 = P5^1; +sbit P50 = P5^0; + +/**************************************************************************** +*注意:封装未引出的管脚,需设置为强推挽输出模式 +*IC选型:请根据所使用的IC型号,在初始化完IO口后,调用相对应的未引出管脚的IO口配置; +*如若选择SC92F7547,则不用调用宏定义。 +*****************************************************************************/ +#define SC92F7546_NIO_Init() {P4CON|=0xC0,P5CON|=0x30;} //SC92F7546的未引出来的IO口配置 +#define SC92F7545_NIO_Init() {P0CON|=0x01,P3CON|=0xFF,P4CON|=0x01,P5CON|=0xFF;} //SC92F7545的未引出来的IO口配置 +#define SC92F7543_NIO_Init() {P0CON|=0x03,P1CON|=0xF1,P2CON|=0xC0,P4CON|=0xF1,P5CON|=0xFF;} //SC92F7543的未引出来的IO口配置 +#define SC92F7541_NIO_Init() {P0CON|=0x73,P1CON|=0xC1,P2CON|=0xF0,P3CON|=0x3F,P4CON|=0xFF,P5CON|=0xFF;} //SC92F7541的未引出来的IO口配置 +#endif \ No newline at end of file diff --git a/CFG/SC92F8363B/Keil_Mould/FWLib/SC92F_Lib/inc/SC92F759x_C.H b/CFG/SC92F8363B/Keil_Mould/FWLib/SC92F_Lib/inc/SC92F759x_C.H new file mode 100644 index 0000000..5ab2301 --- /dev/null +++ b/CFG/SC92F8363B/Keil_Mould/FWLib/SC92F_Lib/inc/SC92F759x_C.H @@ -0,0 +1,297 @@ +/*-------------------------------------------------------------------------- +SC92F859x_C.H + +C Header file for SC92F859x microcontroller. +Copyright (c) 2021 Shenzhen SinOne Microelectronics Co., Ltd. +All rights reserved. +深圳市赛元微电子有限公司 +版本号: V1.1 +日期: 2021.10.22 +--------------------------------------------------------------------------*/ +#ifndef _SC92F859x_H_ +#define _SC92F859x_H_ + +///* ------------------- 字节寄存器-------------------- */ +/*CPU*/ +sfr SP = 0X81; //堆栈指针 +sfr DPL = 0X82; //DPTR数据指针低位 +sfr DPH = 0X83; //DPTR数据指针高位 +sfr PSW = 0XD0; //程序状态字寄存器 +sfr ACC = 0XE0; //累加器A +sfr EXA0 = 0XE9; //扩展累加器0 +sfr EXA1 = 0XEA; //扩展累加器1 +sfr EXA2 = 0XEB; //扩展累加器2 +sfr EXA3 = 0XEC; //扩展累加器3 +sfr EXBL = 0XED; //扩展B寄存器0 +sfr EXBH = 0XEE; //扩展B寄存器1 +sfr B = 0XF0; //B寄存器 + +/*SRAM*/ +sfr EXADH = 0XF7; //外部SRAM操作地址高位 + +/*system*/ +sfr PCON = 0X87; //电源管理控制寄存器 + +/*Interrupt*/ +sfr IE = 0XA8; //中断控制寄存器 +sfr IE1 = 0XA9; //中断控制寄存器1 +sfr IP = 0XB8; //中断优先权控制寄存器 +sfr IP1 = 0XB9; //中断优先级控制寄存器1 + +/*PORT*/ +sfr P0 = 0X80; //P0口数据寄存器 +sfr P1 = 0X90; //P1口数据寄存器 +sfr P1CON = 0X91; //P1口输入/输出控制寄存器 +sfr P1PH = 0X92; //P1口上拉电阻控制寄存器 +sfr DDRCON = 0X93; //显示驱动控制寄存器 +sfr P1VO = 0X94; //P1口显示驱动输出寄存器 +sfr IOHCON0 = 0X96; //IOH设置寄存器0 +sfr IOHCON1 = 0X97; //IOH设置寄存器1 +sfr P0CON = 0X9A; //P0口输入/输出控制寄存器 +sfr P0PH = 0X9B; //P0口上拉电阻控制寄存器 +sfr P0VO = 0X9C; //P0口LCD电压输出寄存器 +sfr P2 = 0XA0; //P2口数据寄存器 +sfr P2CON = 0XA1; //P2口输入/输出控制寄存器 +sfr P2PH = 0XA2; //P2口上拉电阻控制寄存器 +sfr P2VO = 0XA3; //P2口显示驱动输出寄存器 +sfr P3 = 0XB0; //P3口数据寄存器 +sfr P3CON = 0XB1; //P3口输入/输出控制寄存器 +sfr P3PH = 0XB2; //P3口上拉电阻控制寄存器 +sfr P3VO = 0XB3; //P3口显示驱动输出寄存器 +sfr P4 = 0XC0; //P4口数据寄存器 +sfr P4CON = 0XC1; //P4口输入/输出控制寄存器 +sfr P4PH = 0XC2; //P4口上拉电阻控制寄存器 +sfr P5 = 0XD8; //P5口数据寄存器 +sfr P5CON = 0XD9; //P5口输入/输出控制寄存器 +sfr P5PH = 0XDA; //P5口上拉电阻控制寄存器 + +/*模拟比较器*/ +sfr CMPCFG = 0XB6; //模拟比较器设置寄存器 +sfr CMPCON = 0XB7; //模拟比较器控制寄存器 + +/*TIMER*/ +sfr TCON = 0X88; //定时器控制寄存器 +sfr TMOD = 0X89; //定时器工作模式寄存器 +sfr TL0 = 0X8A; //定时器0低8位 +sfr TL1 = 0X8B; //定时器1低8位 +sfr TH0 = 0X8C; //定时器0高8位 +sfr TH1 = 0X8D; //定时器1高8位 +sfr TMCON = 0X8E; //定时器频率控制寄存器 +sfr T2CON = 0XC8; //定时器2控制寄存器 +sfr T2MOD = 0XC9; //定时器2工作模式寄存器 +sfr RCAP2L = 0XCA; //定时器2重载/捕捉低8位 +sfr RCAP2H = 0XCB; //定时器2重载/捕捉高8位 +sfr TL2 = 0XCC; //定时器2低8位 +sfr TH2 = 0XCD; //定时器2高8位 + +/*ADC*/ +sfr ADCCFG2 = 0XAA; //ADC设置寄存器2 +sfr ADCCFG0 = 0XAB; //ADC设置寄存器0 +sfr ADCCFG1 = 0XAC; //ADC设置寄存器1 +sfr ADCCON = 0XAD; //ADC控制寄存器 +sfr ADCVL = 0XAE; //ADC结果寄存器 +sfr ADCVH = 0XAF; //ADC结果寄存器 + +/*PWM*/ +sfr PWMCON = 0XD3; //PWM0控制寄存器0 +sfr PWMCFG = 0XD4; //PWM设置寄存器 + +/*WatchDog*/ +sfr WDTCON = 0XCF; //WDT控制寄存器 + +/*BTM*/ +sfr BTMCON = 0XCE; //低频定时器控制寄存器 + +/*INT*/ +sfr INT0F = 0XBA; //INT0 下降沿中断控制寄存器 +sfr INT0R = 0XBB; //INT0 上降沿中断控制寄存器 +sfr INT1F = 0XBC; //INT1 下降沿中断控制寄存器 +sfr INT1R = 0XBD; //INT1 上降沿中断控制寄存器 +sfr INT2F = 0XC6; //INT2 下降沿中断控制寄存器 +sfr INT2R = 0XC7; //INT2 上降沿中断控制寄存器 + +/*IAP */ +sfr IAPKEY = 0XF1; //IAP保护寄存器 +sfr IAPADL = 0XF2; //IAP写入地址低位寄存器 +sfr IAPADH = 0XF3; //IAP写入地址高位寄存器 +sfr IAPADE = 0XF4; //IAP扩展地址寄存器 +sfr IAPDAT = 0XF5; //IAP数据寄存器 +sfr IAPCTL = 0XF6; //IAP控制寄存器 + +/*uart0*/ +sfr OTCON = 0X8F; //输出控制寄存器 +sfr SCON = 0X98; //串口控制寄存器 +sfr SBUF = 0X99; //串口数据缓存寄存器 + +/*三合一*/ +sfr SSCON2 = 0X95;//SSI控制寄存器2 +sfr SSCON0 = 0X9D; //SSI控制寄存器0 +sfr SSCON1 = 0X9E; //SSI控制寄存器1 +sfr SSDAT = 0X9F; //SSI数据寄存器 + +/*OPTION*/ +sfr OPINX = 0XFE; //Customer Option指针 +sfr OPREG = 0XFF; //Customer Option寄存器 + +/*CRC*/ +sfr OPERCON = 0XEF; //运算控制寄存器 +sfr CHKSUML = 0XFC; //Check Sum结果寄存器低位 +sfr CHKSUMH = 0XFD; //Check Sum结果寄存器高位 + + +///* ------------------- 位寄存器-------------------- */ +/*PSW*/ +sbit CY = PSW^7; //标志位 0:加法运算最高位无进位,或者减法运算最高位无借位时 1:加法运算最高位有进位,或者减法运算最高位有借位时 +sbit AC = PSW^6; //进位辅助标志位 0:无借位、进位 1:加法运算时在bit3位有进位,或减法运算在bit3位有借位时 +sbit F0 = PSW^5; //用户标志位 +sbit RS1 = PSW^4; //工作寄存器组选择位 +sbit RS0 = PSW^3; //工作寄存器组选择位 +sbit OV = PSW^2; //溢出标志位 +sbit F1 = PSW^1; //F1标志 +sbit P = PSW^0; //奇偶标志位 0:ACC中1的个数为偶数(包括0个) 1:ACC中1的个数为奇数 + +/*T2CON*/ +sbit TF2 = T2CON^7; //定时器2溢出标志位 +sbit EXF2 = T2CON^6; //T2EX引脚外部事件输入(下降沿)被检测到的标志位 +sbit RCLK = T2CON^5; //UART0接收时钟控制位 0: 定时器1产生接收波特率 1: 定时器2产生接收波特率 +sbit TCLK = T2CON^4; //UART0发送时钟控制位 0: 定时器1产生发送波特率 1: 定时器2产生发送波特率 +sbit EXEN2 = T2CON^3; //T2EX引脚上的外部事件输入(下降沿)用作重载/捕获触发器允许/禁止控制 +sbit TR2 = T2CON^2; //定时器2开始/停止控制位 0: 停止定时器2 1: 开始定时器2 +sbit T2 = T2CON^1; //定时器2定时器/计数器方式选定位2 +sbit CP = T2CON^0; //捕获/重载方式选定位 + +/*IP*/ +sbit IPADC = IP^6; //ADC中断优先权选择 0:设定 ADC的中断优先权是 “低” 1:设定 ADC的中断优先权是 “高” +sbit IPT2 = IP^5; //Timer2中断优先权选择 0:设定 Timer 2的中断优先权是 “低” 1:设定 Timer 2的中断优先权是 “高” +sbit IPUART = IP^4; //UART中断优先权选择 0:设定 UART的中断优先权是 “低” 1:设定 UART的中断优先权是 “高” +sbit IPT1 = IP^3; //Timer1中断优先权选择 0:设定 Timer 1的中断优先权是 “低” 1:设定 Timer 1的中断优先权是 “高” +sbit IPINT1 = IP^2; //INT1计数器中断优先权选择 0:设定 INT1的中断优先权是 “低” 1:设定 INT1的中断优先权是 “高” +sbit IPT0 = IP^1; //Timer0中断优先权选择 0:设定 Timer 0的中断优先权是 “低” 1:设定 Timer 0的中断优先权是 “高” +sbit IPINT0 = IP^0; //INT0计数器中断优先权选择 0:设定 INT0的中断优先权为 “低” 1: INT0中断优先权为高 + +/*IE*/ +sbit EA = IE^7; //中断使能的总控制 0:关闭所有的中断 1:打开所有的中断 +sbit EADC = IE^6; //ADC中断使能控制 0:关闭ADC中断 1:打开ADC中断 +sbit ET2 = IE^5; //Timer2中断使能控制 0:关闭TIMER2中断 1:打开TIMER2中断 +sbit EUART = IE^4; //UART中断使能控制 0:关闭SIF中断 1:打开SIF中断 +sbit ET1 = IE^3; //Timer1中断使能控制 0:关闭TIMER1中断 1:打开TIMER1中断 +sbit EINT1 = IE^2; //外部中断1中断使能控制 0:关闭外部中断1中断 1:打开外部中断1中断 +sbit ET0 = IE^1; //Timer0中断使能控制 0:关闭TIMER0中断 1:打开TIMER0中断 +sbit EINT0 = IE^0; //外部中断0中断使能控制 0:关闭外部中断0中断 1:打开外部中断0中断 + +/*TCON*/ +sbit TF1 = TCON^7; //T1溢出中断请求标志位 T1产生溢出,发生中断时,硬件将TF1置为“1”,申请中断,CPU响应时,硬件清“0”。 +sbit TR1 = TCON^6; //定时器T1的运行控制位 0:Timer1禁止计数 1:Timer1开始计数 +sbit TF0 = TCON^5; //T0溢出中断请求标志位 T0产生溢出,发生中断时,硬件将TF0置为“1”,申请中断,CPU响应时,硬件清“0”。 +sbit TR0 = TCON^4; //定时器T0的运行控制位 0:Timer0禁止计数 1:Timer0开始计数 + +/*SCON*/ +sbit SM0 = SCON^7; //串行通信模式控制位:与SM1配合使用 00: 模式0,8位半双工同步通信模式 01: 模式1,10位全双工异步通信 11: 模式3,11位全双工异步通信 +sbit SM1 = SCON^6; //串行通信模式控制位 +sbit SM2 = SCON^5; //串行通信模式控制位2,此控制位只对模式3有效 0:每收到一个完整数据帧就置位RI产生中断请求 1:收到一个完整的数据帧时,只有当RB8=1时才会置位RI产生中断请求 +sbit REN = SCON^4; //接收允许控制位 0:不允许接受数据 1:允许接受数据 +sbit TB8 = SCON^3; //只对模式3有效,为发送数据的第9位 +sbit RB8 = SCON^2; //只对模式3有效,为接收数据的第9位 +sbit TI = SCON^1; //发送中断标志位 +sbit RI = SCON^0; //接收中断标志位 + + +/******************* P0 ****************** +*SC92F8597封装未引出的管脚:无 +*SC92F8596封装未引出的管脚:无 +*SC92F8595封装未引出的管脚:P00 +*SC92F8593封装未引出的管脚:P00/P01 +******************************************/ +sbit P07 = P0^7; +sbit P06 = P0^6; +sbit P05 = P0^5; +sbit P04 = P0^4; +sbit P03 = P0^3; +sbit P02 = P0^2; +sbit P01 = P0^1; +sbit P00 = P0^0; + +/******************* P1 ****************** +*SC92F8597封装未引出的管脚:无 +*SC92F8596封装未引出的管脚:无 +*SC92F8595封装未引出的管脚:无 +*SC92F8593封装未引出的管脚:P10/P14/P15/P16/P17 +******************************************/ +sbit P17 = P1^7; +sbit P16 = P1^6; +sbit P15 = P1^5; +sbit P14 = P1^4; +sbit P13 = P1^3; +sbit P12 = P1^2; +sbit P11 = P1^1; +sbit P10 = P1^0; + +/******************* P2 ****************** +*SC92F8597封装未引出的管脚:无 +*SC92F8596封装未引出的管脚:无 +*SC92F8595封装未引出的管脚:无 +*SC92F8593封装未引出的管脚:P26/P27 +******************************************/ +sbit P27 = P2^7; +sbit P26 = P2^6; +sbit P25 = P2^5; +sbit P24 = P2^4; +sbit P23 = P2^3; +sbit P22 = P2^2; +sbit P21 = P2^1; +sbit P20 = P2^0; + +/******************* P3 ****************** +*SC92F8597封装未引出的管脚:无 +*SC92F8596封装未引出的管脚:无 +*SC92F8595封装未引出的管脚:P3 +*SC92F8593封装未引出的管脚:无 +******************************************/ +sbit P37 = P3^7; +sbit P36 = P3^6; +sbit P35 = P3^5; +sbit P34 = P3^4; +sbit P33 = P3^3; +sbit P32 = P3^2; +sbit P31 = P3^1; +sbit P30 = P3^0; + +/******************* P4 ****************** +*SC92F8597封装未引出的管脚:无 +*SC92F8596封装未引出的管脚:P46/P47 +*SC92F8595封装未引出的管脚:P40 +*SC92F8593封装未引出的管脚:P40/P44/P45/P46/P47 +******************************************/ +sbit P47 = P4^7; +sbit P46 = P4^6; +sbit P45 = P4^5; +sbit P44 = P4^4; +sbit P43 = P4^3; +sbit P42 = P4^2; +sbit P41 = P4^1; +sbit P40 = P4^0; + +/******************* P5 ****************** +*SC92F8597封装未引出的管脚:无 +*SC92F8596封装未引出的管脚:P54/P55 +*SC92F8595封装未引出的管脚:P5 +*SC92F8593封装未引出的管脚:P5 +******************************************/ +sbit P55 = P5^5; +sbit P54 = P5^4; +sbit P53 = P5^3; +sbit P52 = P5^2; +sbit P51 = P5^1; +sbit P50 = P5^0; + +/**************************************************************************** +*注意:封装未引出的管脚,需设置为强推挽输出模式 +*IC选型:请根据所使用的IC型号,在初始化完IO口后,调用相对应的未引出管脚的IO口配置; +*如若选SC92F8597,则不用调用宏定义。 +*****************************************************************************/ +#define SC92F8596_NIO_Init() {P4CON|=0xC0,P5CON|=0x30;} //SC92F8596的未引出来的IO口配置 +#define SC92F8595_NIO_Init() {P0CON|=0x01,P3CON|=0xFF,P4CON|=0x01,P5CON|=0xFF;} //SC92F8595的未引出来的IO口配置 +#define SC92F8593_NIO_Init() {P0CON|=0x03,P1CON|=0xF1,P2CON|=0xC0,P4CON|=0xF1,P5CON|=0xFF;}//SC92F8593的未引出来的IO口配置 + + +#endif \ No newline at end of file diff --git a/CFG/SC92F8363B/Keil_Mould/FWLib/SC92F_Lib/inc/SC92F8003_C.H b/CFG/SC92F8363B/Keil_Mould/FWLib/SC92F_Lib/inc/SC92F8003_C.H new file mode 100644 index 0000000..d8e44f1 --- /dev/null +++ b/CFG/SC92F8363B/Keil_Mould/FWLib/SC92F_Lib/inc/SC92F8003_C.H @@ -0,0 +1,207 @@ + /*-------------------------------------------------------------------------- +SC92F8003_C.H + +C Header file for SC92F8003 microcontroller. +Copyright (c) 2018 Shenzhen SinOne Chip Electronic CO., Ltd. +All rights reserved. +深圳市赛元微电子有限公司 +版本号: V1.0 +日期: 2018.05.02 +--------------------------------------------------------------------------*/ +#ifndef _SC92F8003_H_ +#define _SC92F8003_H_ + +/* ------------------- 字节寄存器-------------------- */ +///*CPU*/ +sfr ACC = 0xE0; //累加器A +sfr B = 0xF0; //通用寄存器B +sfr PSW = 0xD0; //程序状态字 +sfr DPH = 0x83; //数据指针高8位 +sfr DPL = 0x82; //数据指针低8位 +sfr SP = 0x81; //堆栈指针 + + +/*system*/ +sfr PCON = 0x87; //电源管理控制寄存器 + +/*interrupt*/ +sfr IP1 = 0XB9; //中断优先级控制寄存器1 +sfr IP = 0xB8; //中断优先权控制寄存器 +sfr IE = 0xA8; //中断控制寄存器 +sfr IE1 = 0XA9; //中断控制寄存器1 + +/*PORT*/ +sfr P2PH = 0xA2; //P2口模式控制寄存器 +sfr P2CON = 0xA1; //P2口模式控制寄存器 +sfr P2 = 0xA0; //P2口数据寄存器 +sfr P1PH = 0x92; //P1口模式控制寄存器 +sfr P1CON = 0x91; //P1口模式控制寄存器 +sfr P1 = 0x90; //P1口数据寄存器 +sfr P0PH = 0x9B; //P0口模式控制寄存器 +sfr P0CON = 0x9A; //P0口模式控制寄存器 +sfr P0 = 0x80; //P0口数据寄存器 + +/*TIMER*/ +sfr TMCON = 0x8E; //定时器频率控制寄存器 +sfr TH1 = 0x8D; //定时器1高8位 +sfr TH0 = 0x8C; //定时器0高8位 +sfr TL1 = 0x8B; //定时器1低8位 +sfr TL0 = 0x8A; //定时器0低8位 +sfr TMOD = 0x89; //定时器工作模式寄存器 +sfr TCON = 0x88; //定时器控制寄存器 +sfr T2CON = 0xC8; //定时器2控制寄存器 +sfr T2MOD = 0xC9; //定时器2工作模式寄存器 +sfr RCAP2L = 0xCA; //定时器2重载/捕捉低8位 +sfr RCAP2H = 0xCB; //定时器2重载/捕捉高8位 +sfr TL2 = 0xCC; //定时器2低8位 +sfr TH2 = 0xCD; //定时器2高8位 + + +/*ADC*/ +sfr ADCCFG1 = 0xAA; //ADC功能配置寄存器0 +sfr ADCCFG0 = 0xAB; //ADC功能配置寄存器1 +sfr ADCCON = 0XAD; //ADC控制寄存器 +sfr ADCVL = 0xAE; //ADC 结果寄存器 +sfr ADCVH = 0xAF; //ADC 结果寄存器 + +/*PWM*/ +sfr PWMCFG = 0xD1; //PWM设置寄存器 +sfr PWMCON0 = 0xD2; //PWM控制寄存器 +sfr PWMPRD = 0xD3; //PWM周期设置寄存器 +sfr PWMDTYA = 0xD4; //PWM占空比设置寄存器A +sfr PWMDTY0 = 0xD5; //PWM0设置寄存器 +sfr PWMDTY1 = 0xD6; //PWM1设置寄存器 +sfr PWMDTY2 = 0xD7; //PWM2设置寄存器 +sfr PWMCON1 = 0xDA; //PWM控制寄存器 +sfr PWMDTYB = 0xDB; //PWM占空比设置寄存器B +sfr PWMDTY3 = 0xDC; //PWM3设置寄存器 +sfr PWMDTY4 = 0xDD; //PWM4设置寄存器 +sfr PWMDTY5 = 0xDE; //PWM5设置寄存器 +sfr PWMDTY6 = 0xDF; //PWM6设置寄存器 + + +// +///*WatchDog*/ +sfr BTMCON = 0XCE; //低频定时器控制寄存器 +sfr WDTCON = 0xCF; //WDT控制寄存器 + + +sfr OTCON = 0X8F; //输出控制寄存器 + +/*INT*/ +sfr INT0F = 0XBA; //INT0 下降沿中断控制寄存器 +sfr INT0R = 0XBB; //INT0 上降沿中断控制寄存器 +sfr INT1F = 0XBC; //INT1 下降沿中断控制寄存器 +sfr INT1R = 0XBD; //INT1 上降沿中断控制寄存器 +sfr INT2F = 0XC6; //INT2 下降沿中断控制寄存器 +sfr INT2R = 0XC7; //INT2 上降沿中断控制寄存器 + +/*IAP */ +sfr IAPCTL = 0xF6; //IAP控制寄存器 +sfr IAPDAT = 0xF5; //IAP数据寄存器 +sfr IAPADE = 0xF4; //IAP扩展地址寄存器 +sfr IAPADH = 0xF3; //IAP写入地址高位寄存器 +sfr IAPADL = 0xF2; //IAP写入地址低8位寄存器 +sfr IAPKEY = 0xF1; //IAP保护寄存器 + +/*uart0*/ +sfr SCON = 0X98; //uart控制寄存器 +sfr SBUF = 0X99; //uart0数据寄存器 + +/*三合一*/ +sfr SSCON0 = 0X9D; //SSI控制寄存器0 +sfr SSCON1 = 0X9E; //SSI控制寄存器1 +sfr SSCON2 = 0X95; //SSI控制寄存器2 +sfr SSDAT = 0X9F; //SSI数据寄存器 + +sfr OPINX = 0XFE; +sfr OPREG = 0XFF; + +/*Check Sum*/ +sfr CHKSUML = 0XFC; //Check Sum结果寄存器低位 +sfr CHKSUMH = 0XFD; //Check Sum结果寄存器高位 + +sfr OPERCON = 0xEF; //运算控制寄存器 + +///* ------------------- 位寄存器-------------------- */ +/*PSW*/ +sbit CY = PSW^7; //标志位 0:加法运算最高位无进位,或者减法运算最高位无借位时 1:加法运算最高位有进位,或者减法运算最高位有借位时 +sbit AC = PSW^6; //进位辅助标志位 0:无借位、进位 1:加法运算时在bit3位有进位,或减法运算在bit3位有借位时 +sbit F0 = PSW^5; //用户标志位 +sbit RS1 = PSW^4; //工作寄存器组选择位 +sbit RS0 = PSW^3; //工作寄存器组选择位 +sbit OV = PSW^2; //溢出标志位 +sbit F1 = PSW^1; //F1标志 +sbit P = PSW^0; //奇偶标志位 0:ACC中1的个数为偶数(包括0个) 1:ACC中1的个数为奇数 + +/*T2CON*/ +sbit TF2 = T2CON^7; +sbit EXF2 = T2CON^6; +sbit RCLK = T2CON^5; +sbit TCLK = T2CON^4; +sbit EXEN2 = T2CON^3; +sbit TR2 = T2CON^2; +sbit T2 = T2CON^1; +sbit CP = T2CON^0; + + +/*IP*/ +sbit IPADC = IP^6; //ADC中断优先控制位 0:设定 ADC的中断优先权是 “低” 1:设定 ADC的中断优先权是 “高” +sbit IPT2 = IP^5; //PWM中断优先控制位 0:设定 PWM的中断优先权是 “低” 1:设定 PWM 的中断优先权是 “高” +sbit IPUART = IP^4; //SIF中断优先控制位 0:设定 SIF的中断优先权是 “低” 1:设定 SIF的中断优先权是 “高” +sbit IPT1 = IP^3; //Timer1中断优先控制位 0:设定 Timer 1的中断优先权是 “低” 1:设定 Timer 1的中断优先权是 “高” +sbit IPINT1 = IP^2; //32K Base Timer中断优先控制位 0:设定 32K的中断优先权是 “低” 1:设定 32K的中断优先权是 “高” +sbit IPT0 = IP^1; //Timer0中断优先控制位 0:设定 Timer 0的中断优先权是 “低” 1:设定 Timer 0的中断优先权是 “高” +sbit IPINT0 = IP^0; + +/*IE*/ +sbit EA = IE^7; //中断使能的总控制 0:关闭所有的中断 1:打开所有的中断 +sbit EADC = IE^6; //ADC中断使能控制 0:关闭ADC中断 1:打开ADC中断 +sbit ET2 = IE^5; //PWM中断使能控制 0:关闭PWM中断 1:打开PWM中断 +sbit EUART = IE^4; //UART中断使能控制 0:关闭SIF中断 1:打开SIF中断 +sbit ET1 = IE^3; //Timer1中断使能控制 0:关闭TIMER1中断 1:打开TIMER1中断 +sbit EINT1 = IE^2; //32K Base Timer中断使能控制 0:关闭32K中断 1:打开32K中断 +sbit ET0 = IE^1; //Timer0中断使能控制 0:关闭TIMER0中断 1:打开TIMER0中断 +sbit EINT0 = IE^0; //TouchKey的中断使能控制 0:关闭TouchKey中断 1:打开TouchKey中断 + +/*TCON*/ +sbit TF1 = TCON^7; //T1溢出中断请求标志位 T1产生溢出,发生中断时,硬件将TF1置为“1”,申请中断,CPU响应时,硬件清“0”。 +sbit TR1 = TCON^6; //定时器T1的运行控制位 0:Timer1禁止计数 1:Timer1开始计数 +sbit TF0 = TCON^5; //T0溢出中断请求标志位 T0产生溢出,发生中断时,硬件将TF0置为“1”,申请中断,CPU响应时,硬件清“0”。 +sbit TR0 = TCON^4; //定时器T0的运行控制位 0:Timer0禁止计数 1:Timer0开始计数 + +/*SCON*/ +sbit SM0 = SCON^7; +sbit SM1 = SCON^6; +sbit SM2 = SCON^5; +sbit REN = SCON^4; +sbit TB8 = SCON^3; +sbit RB8 = SCON^2; +sbit TI = SCON^1; +sbit RI = SCON^0; + +/* P0 */ +sbit P01 = P0^1; +sbit P00 = P0^0; + +/* P1 */ +sbit P17 = P1^7; +sbit P16 = P1^6; +sbit P15 = P1^5; +sbit P14 = P1^4; +sbit P13 = P1^3; +sbit P12 = P1^2; +sbit P11 = P1^1; +sbit P10 = P1^0; + +/* P2 */ +sbit P27 = P2^7; +sbit P26 = P2^6; +sbit P25 = P2^5; +sbit P24 = P2^4; +sbit P23 = P2^3; +sbit P22 = P2^2; +sbit P21 = P2^1; +sbit P20 = P2^0; + +#endif \ No newline at end of file diff --git a/CFG/SC92F8363B/Keil_Mould/FWLib/SC92F_Lib/inc/SC92F827X_C.H b/CFG/SC92F8363B/Keil_Mould/FWLib/SC92F_Lib/inc/SC92F827X_C.H new file mode 100644 index 0000000..8f6faa5 --- /dev/null +++ b/CFG/SC92F8363B/Keil_Mould/FWLib/SC92F_Lib/inc/SC92F827X_C.H @@ -0,0 +1,195 @@ + /*-------------------------------------------------------------------------- +SC92F827x_C.H + +C Header file for SC92F827x microcontroller. +Copyright (c) 2018 Shenzhen SinOne Chip Electronic CO., Ltd. +All rights reserved. +深圳市赛元微电子有限公司 +版本号: V1.0 +日期: 2018.04.25 +--------------------------------------------------------------------------*/ +#ifndef _SC92F827x_H_ +#define _SC92F827x_H_ + +/* ------------------- 字节寄存器-------------------- */ +///*CPU*/ +sfr ACC = 0xE0; //累加器A +sfr B = 0xF0; //通用寄存器B +sfr PSW = 0xD0; //程序状态字 +sfr DPH = 0x83; //数据指针高8位 +sfr DPL = 0x82; //数据指针低8位 +sfr SP = 0x81; //堆栈指针 + + +/*system*/ +sfr PCON = 0x87; //电源管理控制寄存器 + +/*interrupt*/ +sfr IP1 = 0XB9; //中断优先级控制寄存器1 +sfr IP = 0xB8; //中断优先权控制寄存器 +sfr IE = 0xA8; //中断控制寄存器 +sfr IE1 = 0XA9; //中断控制寄存器1 + +/*PORT*/ +sfr P2PH = 0xA2; //P2口模式控制寄存器 +sfr P2CON = 0xA1; //P2口模式控制寄存器 +sfr P2 = 0xA0; //P2口数据寄存器 +sfr P1PH = 0x92; //P1口模式控制寄存器 +sfr P1CON = 0x91; //P1口模式控制寄存器 +sfr P1 = 0x90; //P1口数据寄存器 +sfr P0PH = 0x9B; //P0口模式控制寄存器 +sfr P0CON = 0x9A; //P0口模式控制寄存器 +sfr P0 = 0x80; //P0口数据寄存器 +sfr IOHCON = 0x97; //IOH1设置寄存器 + +/*TIMER*/ +sfr TMCON = 0x8E; //定时器频率控制寄存器 +sfr TH1 = 0x8D; //定时器1高8位 +sfr TH0 = 0x8C; //定时器0高8位 +sfr TL1 = 0x8B; //定时器1低8位 +sfr TL0 = 0x8A; //定时器0低8位 +sfr TMOD = 0x89; //定时器工作模式寄存器 +sfr TCON = 0x88; //定时器控制寄存器 +sfr T2CON = 0xC8; //定时器2控制寄存器 +sfr RCAP2L = 0xCA; //定时器2重载/捕捉低8位 +sfr RCAP2H = 0xCB; //定时器2重载/捕捉高8位 +sfr TL2 = 0xCC; //定时器2低8位 +sfr TH2 = 0xCD; //定时器2高8位 + +/*PWM*/ +sfr PWMCFG = 0xD1; //PWM设置寄存器 +sfr PWMCON = 0xD2; //PWM控制寄存器 +sfr PWMPRD = 0xD3; //PWM周期设置寄存器 +sfr PWMDTY3 = 0xD4; //PWM3占空比设置寄存器 +sfr PWMDTY0 = 0xD5; //PWM0占空比设置寄存器 +sfr PWMDTY1 = 0xD6; //PWM1占空比设置寄存器 +sfr PWMDTY2 = 0xD7; //PWM2占空比设置寄存器 + +// +///*WatchDog*/ +sfr BTMCON = 0XCE; //低频定时器控制寄存器 +sfr WDTCON = 0xCF; //WDT控制寄存器 + + +/*LCD*/ +sfr OTCON = 0X8F; //LCD电压输出控制寄存器 + + +/*INT*/ +sfr INT0F = 0XBA; //INT0 下降沿中断控制寄存器 +sfr INT0R = 0XBB; //INT0 上降沿中断控制寄存器 +sfr INT2F = 0XC6; //INT2 下降沿中断控制寄存器 +sfr INT2R = 0XC7; //INT2 上降沿中断控制寄存器 + +/*IAP */ +sfr IAPCTL = 0xF6; //IAP控制寄存器 +sfr IAPDAT = 0xF5; //IAP数据寄存器 +sfr IAPADE = 0xF4; //IAP扩展地址寄存器 +sfr IAPADH = 0xF3; //IAP写入地址高位寄存器 +sfr IAPADL = 0xF2; //IAP写入地址低8位寄存器 +sfr IAPKEY = 0xF1; //IAP保护寄存器 + +/*SPI*/ +sfr SSCON0 = 0X9D; //SPI控制寄存器0 +sfr SSCON1 = 0X9E; //SPI控制寄存器1 +sfr SSCON2 = 0X95; //SPI控制寄存器2 +sfr SSDAT = 0X9F; //SPI数据寄存器 + +sfr OPINX = 0XFE; +sfr OPREG = 0XFF; + +/*Check Sum*/ +sfr CHKSUML = 0XFC; //Check Sum结果寄存器低位 +sfr CHKSUMH = 0XFD; //Check Sum结果寄存器高位 + +sfr OPERCON = 0xEF; //运算控制寄存器 + +///* ------------------- 位寄存器-------------------- */ +/*B*/ +/*TKCON*/ +/*ACC*/ +/*PSW*/ +sbit CY = PSW^7; //标志位 0:加法运算最高位无进位,或者减法运算最高位无借位时 1:加法运算最高位有进位,或者减法运算最高位有借位时 +sbit AC = PSW^6; //进位辅助标志位 0:无借位、进位 1:加法运算时在bit3位有进位,或减法运算在bit3位有借位时 +sbit F0 = PSW^5; //用户标志位 +sbit RS1 = PSW^4; //工作寄存器组选择位 +sbit RS0 = PSW^3; //工作寄存器组选择位 +sbit OV = PSW^2; //溢出标志位 +sbit F1 = PSW^1; //F1标志 +sbit P = PSW^0; //奇偶标志位 0:ACC中1的个数为偶数(包括0个) 1:ACC中1的个数为奇数 + +/*T2CON*/ +sbit TF2 = T2CON^7; +sbit EXF2 = T2CON^6; +sbit RCLK = T2CON^5; +sbit TCLK = T2CON^4; +sbit EXEN2 = T2CON^3; +sbit TR2 = T2CON^2; +sbit T2 = T2CON^1; +sbit CP = T2CON^0; + + +/*IP*/ +sbit IPT2 = IP^5; //Timer2中断优先控制位 0:设定 Timer2的中断优先权是 “低” 1:设定Timer2的中断优先权是 “高” +sbit IPT1 = IP^3; //Timer1中断优先控制位 0:设定 Timer 1的中断优先权是 “低” 1:设定 Timer 1的中断优先权是 “高” 1:设定INT1的中断优先权是 “高” +sbit IPT0 = IP^1; //Timer0中断优先控制位 0:设定 Timer 0的中断优先权是 “低” 1:设定 Timer 0的中断优先权是 “高” +sbit IPINT0 = IP^0; //INT0中断优先控制位 0:设定INT0中断优先权是 “低” 1:设定INT0的中断优先权是 “高” + +/*IE*/ +sbit EA = IE^7; //中断使能的总控制 0:关闭所有的中断 1:打开所有的中断 +sbit ET2 = IE^5; //Timer2中断使能控制 0:关闭Timer2中断 1:打开Timer2中断 +sbit ET1 = IE^3; //Timer1中断使能控制 0:关闭TIMER1中断 1:打开TIMER1中断 +sbit ET0 = IE^1; //Timer0中断使能控制 0:关闭TIMER0中断 1:打开TIMER0中断 +sbit EINT0 = IE^0; //INT0中断使能控制 0:关闭INT0中断 1:打开INT0中断 + +/*TCON*/ +sbit TF1 = TCON^7; //T1溢出中断请求标志位 T1产生溢出,发生中断时,硬件将TF1置为“1”,申请中断,CPU响应时,硬件清“0”。 +sbit TR1 = TCON^6; //定时器T1的运行控制位 0:Timer1禁止计数 1:Timer1开始计数 +sbit TF0 = TCON^5; //T0溢出中断请求标志位 T0产生溢出,发生中断时,硬件将TF0置为“1”,申请中断,CPU响应时,硬件清“0”。 +sbit TR0 = TCON^4; //定时器T0的运行控制位 0:Timer0禁止计数 1:Timer0开始计数 + +/******************* P0 ****************** +*SC92F8272封装未引出的管脚:无 +*SC92F8271封装未引出的管脚:P02/P03/P04 +*SC92F8270封装未引出的管脚:P00/P02/P03/P04/P05 +******************************************/ +sbit P05 = P0^5; +sbit P04 = P0^4; +sbit P03 = P0^3; +sbit P02 = P0^2; +sbit P01 = P0^1; +sbit P00 = P0^0; + +/******************* P1 ****************** +*SC92F8272封装未引出的管脚:无 +*SC92F8271封装未引出的管脚:无 +*SC92F8270封装未引出的管脚:P11/P14/P15 +******************************************/ +sbit P15 = P1^5; +sbit P14 = P1^4; +sbit P13 = P1^3; +sbit P12 = P1^2; +sbit P11 = P1^1; +sbit P10 = P1^0; + +/******************* P2 ****************** +*SC92F8272封装未引出的管脚:无 +*SC92F8271封装未引出的管脚:P27 +*SC92F8270封装未引出的管脚:P24/P25/P26/P27 +******************************************/ +sbit P27 = P2^7; +sbit P26 = P2^6; +sbit P25 = P2^5; +sbit P24 = P2^4; +sbit P21 = P2^1; +sbit P20 = P2^0; + +/**************************************************************************** +*注意:封装未引出的管脚,需设置为强推挽输出模式 +*IC选型:请根据所使用的IC型号,在初始化完IO口后,调用相对应的未引出管脚的IO口配置; +*如若选择SC92F8272,则不用调用宏定义。 +*****************************************************************************/ +#define SC92F8271_NIO_Init() {P0CON|=0x1C,P2CON|=0x80;} //SC92F8271的未引出来的IO口配置 +#define SC92F8270_NIO_Init() {P0CON|=0x3D,P1CON|=0x32,P2CON|=0xF0;} //SC92F8270的未引出来的IO口配置 + +#endif \ No newline at end of file diff --git a/CFG/SC92F8363B/Keil_Mould/FWLib/SC92F_Lib/inc/SC92F836xB_C.H b/CFG/SC92F8363B/Keil_Mould/FWLib/SC92F_Lib/inc/SC92F836xB_C.H new file mode 100644 index 0000000..b0dcdef --- /dev/null +++ b/CFG/SC92F8363B/Keil_Mould/FWLib/SC92F_Lib/inc/SC92F836xB_C.H @@ -0,0 +1,251 @@ + /*-------------------------------------------------------------------------- +SC92F836XB_C.H + +C Header file for SC92F836XB microcontroller. +Copyright (c) 2018 Shenzhen SinOne Chip Electronic CO., Ltd. +All rights reserved. +深圳市赛元微电子有限公司 +版本号: V2.0 +日期: 2018.08.24 +--------------------------------------------------------------------------*/ +#ifndef _SC92F836XB_H_ +#define _SC92F836XB_H_ + +/* ------------------- 字节寄存器-------------------- */ +///*CPU*/ +sfr ACC = 0xE0; //累加器A +sfr B = 0xF0; //通用寄存器B +sfr PSW = 0xD0; //程序状态字 +sfr DPH = 0x83; //数据指针高8位 +sfr DPL = 0x82; //数据指针低8位 +sfr SP = 0x81; //堆栈指针 + + +/*system*/ +sfr PCON = 0x87; //电源管理控制寄存器 + +/*interrupt*/ +sfr IP1 = 0XB9; //中断优先级控制寄存器1 +sfr IP = 0xB8; //中断优先权控制寄存器 +sfr IE = 0xA8; //中断控制寄存器 +sfr IE1 = 0XA9; //中断控制寄存器1 + +/*PORT*/ +sfr P5PH = 0xDA; //P5口模式控制寄存器 +sfr P5CON = 0xD9; //P5口模式控制寄存器 +sfr P5 = 0xD8; //P5口数据寄存器 +sfr P2PH = 0xA2; //P2口模式控制寄存器 +sfr P2CON = 0xA1; //P2口模式控制寄存器 +sfr P2 = 0xA0; //P2口数据寄存器 +sfr P1PH = 0x92; //P1口模式控制寄存器 +sfr P1CON = 0x91; //P1口模式控制寄存器 +sfr P1 = 0x90; //P1口数据寄存器 +sfr P0PH = 0x9B; //P0口模式控制寄存器 +sfr P0CON = 0x9A; //P0口模式控制寄存器 +sfr P0 = 0x80; //P0口数据寄存器 +sfr IOHCON = 0x97; //IOH设置寄存器 + +/*TIMER*/ +sfr TMCON = 0x8E; //定时器频率控制寄存器 +sfr TH1 = 0x8D; //定时器1高8位 +sfr TH0 = 0x8C; //定时器0高8位 +sfr TL1 = 0x8B; //定时器1低8位 +sfr TL0 = 0x8A; //定时器0低8位 +sfr TMOD = 0x89; //定时器工作模式寄存器 +sfr TCON = 0x88; //定时器控制寄存器 +sfr T2CON = 0xC8; //定时器2控制寄存器 +sfr T2MOD = 0xC9; //定时器2工作模式寄存器 +sfr RCAP2L = 0xCA; //定时器2重载/捕捉低8位 +sfr RCAP2H = 0xCB; //定时器2重载/捕捉高8位 +sfr TL2 = 0xCC; //定时器2低8位 +sfr TH2 = 0xCD; //定时器2高8位 + + +/*ADC*/ +sfr ADCCFG0 = 0xAB; //ADC功能配置寄存器0 +sfr ADCCFG1 = 0xAC; //ADC功能配置寄存器1 +sfr ADCCFG2 = 0XAA; //ADC功能配置寄存器2 +sfr ADCCON = 0XAD; //ADC控制寄存器 +sfr ADCVL = 0xAE; //ADC 结果寄存器 +sfr ADCVH = 0xAF; //ADC 结果寄存器 + +/*PWM*/ +sfr PWMCFG = 0xD1; //PWM设置寄存器 +sfr PWMCON = 0xD2; //PWM控制寄存器 +sfr PWMPRD = 0xD3; //PWM周期设置寄存器 +sfr PWMDTYA = 0xD4; //PWM占空比设置寄存器A +sfr PWMDTY0 = 0xD5; //PWM0设置寄存器 +sfr PWMDTY1 = 0xD6; //PWM1设置寄存器 +sfr PWMDTY2 = 0xD7; //PWM2设置寄存器 +sfr PWMDTYB = 0xDC; //PWM占空比设置寄存器B +sfr PWMDTY3 = 0xDD; //PWM3设置寄存器 +sfr PWMDTY4 = 0xDE; //PWM4设置寄存器 +sfr PWMDTY5 = 0xDF; //PWM5设置寄存器 + +///*WatchDog*/ +sfr BTMCON = 0XCE; //低频定时器控制寄存器 +sfr WDTCON = 0xCF; //WDT控制寄存器 + +/*LCD*/ +sfr OTCON = 0X8F; //LCD电压输出控制寄存器 +sfr P0VO = 0X9C; //P0 LCD Bais 输出寄存器 + +/*INT*/ +sfr INT0F = 0XBA; //INT0 下降沿中断控制寄存器 +sfr INT0R = 0XBB; //INT0 上降沿中断控制寄存器 +sfr INT1F = 0XBC; //INT1 下降沿中断控制寄存器 +sfr INT1R = 0XBD; //INT1 上降沿中断控制寄存器 +sfr INT2F = 0XC6; //INT2 下降沿中断控制寄存器 +sfr INT2R = 0XC7; //INT2 上降沿中断控制寄存器 + +/*IAP */ +sfr IAPCTL = 0xF6; //IAP控制寄存器 +sfr IAPDAT = 0xF5; //IAP数据寄存器 +sfr IAPADE = 0xF4; //IAP扩展地址寄存器 +sfr IAPADH = 0xF3; //IAP写入地址高位寄存器 +sfr IAPADL = 0xF2; //IAP写入地址低8位寄存器 +sfr IAPKEY = 0xF1; //IAP保护寄存器 + +/*uart*/ +sfr SCON = 0x98; //串口控制寄存器 +sfr SBUF = 0x99; //串口数据缓存寄存器 + +/*三合一*/ +sfr SSCON0 = 0X9D; //SPI控制寄存器0 +sfr SSCON1 = 0X9E; //SPI控制寄存器1 +sfr SSCON2 = 0X95; //SPI控制寄存器2 +sfr SSDAT = 0X9F; //SPI数据寄存器 + +sfr OPINX = 0XFE; +sfr OPREG = 0XFF; +sfr EXADH = 0XF7; + +/*Check Sum*/ +sfr CHKSUML = 0XFC; //Check Sum结果寄存器低位 +sfr CHKSUMH = 0XFD; //Check Sum结果寄存器高位 + +/*乘除法*/ +sfr EXA0 = 0xE9; //扩展累加器0 +sfr EXA1 = 0xEA; //扩展累加器1 +sfr EXA2 = 0xEB; //扩展累加器2 +sfr EXA3 = 0xEC; //扩展累加器3 +sfr EXBL = 0xED; //扩展B寄存器0 +sfr EXBH = 0xEE; //扩展B寄存器1 +sfr OPERCON = 0xEF; //运算控制寄存器 + +/* ------------------- 位寄存器-------------------- */ +/*PSW*/ +sbit CY = PSW^7; //标志位 0:加法运算最高位无进位,或者减法运算最高位无借位时 1:加法运算最高位有进位,或者减法运算最高位有借位时 +sbit AC = PSW^6; //进位辅助标志位 0:无借位、进位 1:加法运算时在bit3位有进位,或减法运算在bit3位有借位时 +sbit F0 = PSW^5; //用户标志位 +sbit RS1 = PSW^4; //工作寄存器组选择位 +sbit RS0 = PSW^3; //工作寄存器组选择位 +sbit OV = PSW^2; //溢出标志位 +sbit F1 = PSW^1; //F1标志 +sbit P = PSW^0; //奇偶标志位 0:ACC中1的个数为偶数(包括0个) 1:ACC中1的个数为奇数 + +/*T2CON*/ +sbit TF2 = T2CON^7; +sbit EXF2 = T2CON^6; +sbit RCLK = T2CON^5; +sbit TCLK = T2CON^4; +sbit EXEN2 = T2CON^3; +sbit TR2 = T2CON^2; +sbit T2 = T2CON^1; +sbit CP = T2CON^0; + + +/*IP*/ +sbit IPADC = IP^6; //ADC中断优先控制位 0:设定 ADC的中断优先权是 “低” 1:设定 ADC的中断优先权是 “高” +sbit IPT2 = IP^5; //Timer2中断优先控制位 0:设定 Timer2的中断优先权是 “低” 1:设定Timer2的中断优先权是 “高” +sbit IPUART = IP^4; //UART中断优先控制位 0:设定UART的中断优先权是 “低” 1:设定UART的中断优先权是 “高” +sbit IPT1 = IP^3; //Timer1中断优先控制位 0:设定 Timer 1的中断优先权是 “低” 1:设定 Timer 1的中断优先权是 “高” +sbit IPINT1 = IP^2; //INT1中断优先控制位 0:设定INT1中断优先权是 “低” 1:设定INT1的中断优先权是 “高” +sbit IPT0 = IP^1; //Timer0中断优先控制位 0:设定 Timer 0的中断优先权是 “低” 1:设定 Timer 0的中断优先权是 “高” +sbit IPINT0 = IP^0; //INT0中断优先控制位 0:设定INT0中断优先权是 “低” 1:设定INT0的中断优先权是 “高” + +/*IE*/ +sbit EA = IE^7; //中断使能的总控制 0:关闭所有的中断 1:打开所有的中断 +sbit EADC = IE^6; //ADC中断使能控制 0:关闭ADC中断 1:打开ADC中断 +sbit ET2 = IE^5; //Timer2中断使能控制 0:关闭Timer2中断 1:打开Timer2中断 +sbit EUART = IE^4; //UART中断使能控制 0:关闭UART中断 1:打开UART中断 +sbit ET1 = IE^3; //Timer1中断使能控制 0:关闭TIMER1中断 1:打开TIMER1中断 +sbit EINT1 = IE^2; //INT1中断使能控制 0:关闭INT1中断 1:打开INT1中断 +sbit ET0 = IE^1; //Timer0中断使能控制 0:关闭TIMER0中断 1:打开TIMER0中断 +sbit EINT0 = IE^0; //INT0中断使能控制 0:关闭INT0中断 1:打开INT0中断 + +/*TCON*/ +sbit TF1 = TCON^7; //T1溢出中断请求标志位 T1产生溢出,发生中断时,硬件将TF1置为“1”,申请中断,CPU响应时,硬件清“0”。 +sbit TR1 = TCON^6; //定时器T1的运行控制位 0:Timer1禁止计数 1:Timer1开始计数 +sbit TF0 = TCON^5; //T0溢出中断请求标志位 T0产生溢出,发生中断时,硬件将TF0置为“1”,申请中断,CPU响应时,硬件清“0”。 +sbit TR0 = TCON^4; //定时器T0的运行控制位 0:Timer0禁止计数 1:Timer0开始计数 + +/*SCON*/ +sbit SM0 = SCON^7; +sbit SM1 = SCON^6; +sbit SM2 = SCON^5; +sbit REN = SCON^4; +sbit TB8 = SCON^3; +sbit RB8 = SCON^2; +sbit TI = SCON^1; +sbit RI = SCON^0; + +/******************* P0 ****************** +*SC92F8363B封装未引出的管脚:无 +*SC92F8362B封装未引出的管脚:P06/P07 +*SC92F8361B封装未引出的管脚:P02/P03/P04/P06/P07 +******************************************/ +sbit P07 = P0^7; +sbit P06 = P0^6; +sbit P05 = P0^5; +sbit P04 = P0^4; +sbit P03 = P0^3; +sbit P02 = P0^2; +sbit P01 = P0^1; +sbit P00 = P0^0; + +/******************* P1 ****************** +*SC92F8363B封装未引出的管脚:无 +*SC92F8362B封装未引出的管脚:P16/P17 +*SC92F8361B封装未引出的管脚:P16/P17 +******************************************/ +sbit P17 = P1^7; +sbit P16 = P1^6; +sbit P15 = P1^5; +sbit P14 = P1^4; +sbit P13 = P1^3; +sbit P12 = P1^2; +sbit P11 = P1^1; +sbit P10 = P1^0; + +/******************* P2 ****************** +*SC92F8363B封装未引出的管脚:无 +*SC92F8362B封装未引出的管脚:P22/P23 +*SC92F8361B封装未引出的管脚:P22/P23/P27 +******************************************/ +sbit P27 = P2^7; +sbit P26 = P2^6; +sbit P25 = P2^5; +sbit P24 = P2^4; +sbit P23 = P2^3; +sbit P22 = P2^2; +sbit P21 = P2^1; +sbit P20 = P2^0; + +/******************* P5 ****************** +*SC92F8363B封装未引出的管脚:无 +*SC92F8362B封装未引出的管脚:P50/P51 +*SC92F8361B封装未引出的管脚:P50/P51 +******************************************/ +sbit P51 = P5^1; +sbit P50 = P5^0; + +/**************************************************************************** +*注意:封装未引出的管脚,需设置为强推挽输出模式 +*IC选型:请根据所使用的IC型号,在初始化完IO口后,调用相对应的未引出管脚的IO口配置; +*如若选择SC92F8363B,则不用调用宏定义。 +*****************************************************************************/ +#define SC92F8362B_NIO_Init() {P0CON|=0xC0,P1CON|=0xC0,P2CON|=0x0C,P5CON|=0x03;} //SC92F8362B的未引出来的IO口配置 +#define SC92F8361B_NIO_Init() {P0CON|=0xEC,P1CON|=0xC0,P2CON|=0x8C,P5CON|=0x03;} //SC92F8361B的未引出来的IO口配置 + +#endif \ No newline at end of file diff --git a/CFG/SC92F8363B/Keil_Mould/FWLib/SC92F_Lib/inc/SC92F837X_C.H b/CFG/SC92F8363B/Keil_Mould/FWLib/SC92F_Lib/inc/SC92F837X_C.H new file mode 100644 index 0000000..8da7e43 --- /dev/null +++ b/CFG/SC92F8363B/Keil_Mould/FWLib/SC92F_Lib/inc/SC92F837X_C.H @@ -0,0 +1,199 @@ + /*-------------------------------------------------------------------------- +SC92F837x_C.H + +C Header file for SC92F837x microcontroller. +Copyright (c) 2018 Shenzhen SinOne Chip Electronic CO., Ltd. +All rights reserved. +深圳市赛元微电子有限公司 +版本号: V1.0 +日期: 2019.03.06 +--------------------------------------------------------------------------*/ +#ifndef _SC92F837x_H_ +#define _SC92F837x_H_ + +/* ------------------- 字节寄存器-------------------- */ +///*CPU*/ +sfr ACC = 0xE0; //累加器A +sfr B = 0xF0; //通用寄存器B +sfr PSW = 0xD0; //程序状态字 +sfr DPH = 0x83; //数据指针高8位 +sfr DPL = 0x82; //数据指针低8位 +sfr SP = 0x81; //堆栈指针 + + +/*system*/ +sfr PCON = 0x87; //电源管理控制寄存器 + +/*interrupt*/ +sfr IP1 = 0XB9; //中断优先级控制寄存器1 +sfr IP = 0xB8; //中断优先权控制寄存器 +sfr IE = 0xA8; //中断控制寄存器 +sfr IE1 = 0XA9; //中断控制寄存器1 + +/*PORT*/ +sfr P2PH = 0xA2; //P2口模式控制寄存器 +sfr P2CON = 0xA1; //P2口模式控制寄存器 +sfr P2 = 0xA0; //P2口数据寄存器 +sfr P1PH = 0x92; //P1口模式控制寄存器 +sfr P1CON = 0x91; //P1口模式控制寄存器 +sfr P1 = 0x90; //P1口数据寄存器 +sfr P0PH = 0x9B; //P0口模式控制寄存器 +sfr P0CON = 0x9A; //P0口模式控制寄存器 +sfr P0 = 0x80; //P0口数据寄存器 +sfr IOHCON = 0x97; //IOH1设置寄存器 + +/*TIMER*/ +sfr TMCON = 0x8E; //定时器频率控制寄存器 +sfr TH1 = 0x8D; //定时器1高8位 +sfr TH0 = 0x8C; //定时器0高8位 +sfr TL1 = 0x8B; //定时器1低8位 +sfr TL0 = 0x8A; //定时器0低8位 +sfr TMOD = 0x89; //定时器工作模式寄存器 +sfr TCON = 0x88; //定时器控制寄存器 +sfr T2CON = 0xC8; //定时器2控制寄存器 +sfr RCAP2L = 0xCA; //定时器2重载/捕捉低8位 +sfr RCAP2H = 0xCB; //定时器2重载/捕捉高8位 +sfr TL2 = 0xCC; //定时器2低8位 +sfr TH2 = 0xCD; //定时器2高8位 + +/*PWM*/ +sfr PWMCFG = 0xD1; //PWM设置寄存器 +sfr PWMCON = 0xD2; //PWM控制寄存器 +sfr PWMPRD = 0xD3; //PWM周期设置寄存器 +sfr PWMDTY3 = 0xD4; //PWM3占空比设置寄存器 +sfr PWMDTY0 = 0xD5; //PWM0占空比设置寄存器 +sfr PWMDTY1 = 0xD6; //PWM1占空比设置寄存器 +sfr PWMDTY2 = 0xD7; //PWM2占空比设置寄存器 + +// +///*WatchDog*/ +sfr BTMCON = 0XCE; //低频定时器控制寄存器 +sfr WDTCON = 0xCF; //WDT控制寄存器 + + +/*LCD*/ +sfr OTCON = 0X8F; //LCD电压输出控制寄存器 + + +/*INT*/ +sfr INT0F = 0XBA; //INT0 下降沿中断控制寄存器 +sfr INT0R = 0XBB; //INT0 上降沿中断控制寄存器 +sfr INT2F = 0XC6; //INT2 下降沿中断控制寄存器 +sfr INT2R = 0XC7; //INT2 上降沿中断控制寄存器 + +/*IAP */ +sfr IAPCTL = 0xF6; //IAP控制寄存器 +sfr IAPDAT = 0xF5; //IAP数据寄存器 +sfr IAPADE = 0xF4; //IAP扩展地址寄存器 +sfr IAPADH = 0xF3; //IAP写入地址高位寄存器 +sfr IAPADL = 0xF2; //IAP写入地址低8位寄存器 +sfr IAPKEY = 0xF1; //IAP保护寄存器 + +/*SPI*/ +sfr SSCON0 = 0X9D; //SPI控制寄存器0 +sfr SSCON1 = 0X9E; //SPI控制寄存器1 +sfr SSCON2 = 0X95; //SPI控制寄存器2 +sfr SSDAT = 0X9F; //SPI数据寄存器 + +sfr OPINX = 0XFE; +sfr OPREG = 0XFF; + +/*Check Sum*/ +sfr CHKSUML = 0XFC; //Check Sum结果寄存器低位 +sfr CHKSUMH = 0XFD; //Check Sum结果寄存器高位 + +sfr OPERCON = 0xEF; //运算控制寄存器 + +///* ------------------- 位寄存器-------------------- */ +/*B*/ +/*TKCON*/ +/*ACC*/ +/*PSW*/ +sbit CY = PSW^7; //标志位 0:加法运算最高位无进位,或者减法运算最高位无借位时 1:加法运算最高位有进位,或者减法运算最高位有借位时 +sbit AC = PSW^6; //进位辅助标志位 0:无借位、进位 1:加法运算时在bit3位有进位,或减法运算在bit3位有借位时 +sbit F0 = PSW^5; //用户标志位 +sbit RS1 = PSW^4; //工作寄存器组选择位 +sbit RS0 = PSW^3; //工作寄存器组选择位 +sbit OV = PSW^2; //溢出标志位 +sbit F1 = PSW^1; //F1标志 +sbit P = PSW^0; //奇偶标志位 0:ACC中1的个数为偶数(包括0个) 1:ACC中1的个数为奇数 + +/*T2CON*/ +sbit TF2 = T2CON^7; +sbit EXF2 = T2CON^6; +sbit RCLK = T2CON^5; +sbit TCLK = T2CON^4; +sbit EXEN2 = T2CON^3; +sbit TR2 = T2CON^2; +sbit T2 = T2CON^1; +sbit CP = T2CON^0; + + +/*IP*/ +sbit IPT2 = IP^5; //Timer2中断优先控制位 0:设定 Timer2的中断优先权是 “低” 1:设定Timer2的中断优先权是 “高” +sbit IPT1 = IP^3; //Timer1中断优先控制位 0:设定 Timer 1的中断优先权是 “低” 1:设定 Timer 1的中断优先权是 “高” 1:设定INT1的中断优先权是 “高” +sbit IPT0 = IP^1; //Timer0中断优先控制位 0:设定 Timer 0的中断优先权是 “低” 1:设定 Timer 0的中断优先权是 “高” +sbit IPINT0 = IP^0; //INT0中断优先控制位 0:设定INT0中断优先权是 “低” 1:设定INT0的中断优先权是 “高” + +/*IE*/ +sbit EA = IE^7; //中断使能的总控制 0:关闭所有的中断 1:打开所有的中断 +sbit ET2 = IE^5; //Timer2中断使能控制 0:关闭Timer2中断 1:打开Timer2中断 +sbit ET1 = IE^3; //Timer1中断使能控制 0:关闭TIMER1中断 1:打开TIMER1中断 +sbit ET0 = IE^1; //Timer0中断使能控制 0:关闭TIMER0中断 1:打开TIMER0中断 +sbit EINT0 = IE^0; //INT0中断使能控制 0:关闭INT0中断 1:打开INT0中断 + +/*TCON*/ +sbit TF1 = TCON^7; //T1溢出中断请求标志位 T1产生溢出,发生中断时,硬件将TF1置为“1”,申请中断,CPU响应时,硬件清“0”。 +sbit TR1 = TCON^6; //定时器T1的运行控制位 0:Timer1禁止计数 1:Timer1开始计数 +sbit TF0 = TCON^5; //T0溢出中断请求标志位 T0产生溢出,发生中断时,硬件将TF0置为“1”,申请中断,CPU响应时,硬件清“0”。 +sbit TR0 = TCON^4; //定时器T0的运行控制位 0:Timer0禁止计数 1:Timer0开始计数 + +/******************* P0 ****************** +*SC92F8378封装未引出的管脚:P02/P03/P04/P05 +*SC92F8372封装未引出的管脚:无 +*SC92F8371封装未引出的管脚:P02/P03/P04 +*SC92F8370封装未引出的管脚:P00/P02/P03/P04/P05 +******************************************/ +sbit P05 = P0^5; +sbit P04 = P0^4; +sbit P03 = P0^3; +sbit P02 = P0^2; +sbit P01 = P0^1; +sbit P00 = P0^0; + +/******************* P1 ****************** +*SC92F8378封装未引出的管脚:P11/P15 +*SC92F8372封装未引出的管脚:无 +*SC92F8371封装未引出的管脚:无 +*SC92F8370封装未引出的管脚:P11/P14/P15 +******************************************/ +sbit P15 = P1^5; +sbit P14 = P1^4; +sbit P13 = P1^3; +sbit P12 = P1^2; +sbit P11 = P1^1; +sbit P10 = P1^0; + +/******************* P2 ****************** +*SC92F8378封装未引出的管脚:P24/P25/P26/P27 +*SC92F8372封装未引出的管脚:无 +*SC92F8371封装未引出的管脚:P27 +*SC92F8370封装未引出的管脚:P24/P25/P26/P27 +******************************************/ +sbit P27 = P2^7; +sbit P26 = P2^6; +sbit P25 = P2^5; +sbit P24 = P2^4; +sbit P21 = P2^1; +sbit P20 = P2^0; + +/**************************************************************************** +*注意:封装未引出的管脚,需设置为强推挽输出模式 +*IC选型:请根据所使用的IC型号,在初始化完IO口后,调用相对应的未引出管脚的IO口配置; +*如若选择SC92F8372,则不用调用宏定义。 +*****************************************************************************/ +#define SC92F8378_NIO_Init() {P0CON|=0x3C,P1CON|=0x22,P2CON|=0xF0;} //SC92F8378的未引出来的IO口配置 +#define SC92F8371_NIO_Init() {P0CON|=0x1C,P2CON|=0x80;} //SC92F8371的未引出来的IO口配置 +#define SC92F8370_NIO_Init() {P0CON|=0x3D,P1CON|=0x32,P2CON|=0xF0;} //SC92F8370的未引出来的IO口配置 + +#endif \ No newline at end of file diff --git a/CFG/SC92F8363B/Keil_Mould/FWLib/SC92F_Lib/inc/SC92F844xB_C.H b/CFG/SC92F8363B/Keil_Mould/FWLib/SC92F_Lib/inc/SC92F844xB_C.H new file mode 100644 index 0000000..0358107 --- /dev/null +++ b/CFG/SC92F8363B/Keil_Mould/FWLib/SC92F_Lib/inc/SC92F844xB_C.H @@ -0,0 +1,294 @@ +/*-------------------------------------------------------------------------- +SC92F844xB_C.H + +C Header file for SC92F844xB microcontroller. +Copyright (c) 2018 Shenzhen SinOne Chip Electronic CO., Ltd. +All rights reserved. +深圳市赛元微电子有限公司 +版本号: V1.0 +日期: 2018.09.04 +--------------------------------------------------------------------------*/ +#ifndef _SC92F844xB_H_ +#define _SC92F844xB_H_ + +/* ------------------- 字节寄存器-------------------- */ +///*CPU*/ +sfr ACC = 0xE0; //累加器A +sfr B = 0xF0; //通用寄存器B +sfr PSW = 0xD0; //程序状态字 +sfr DPH = 0x83; //数据指针高8位 +sfr DPL = 0x82; //数据指针低8位 +sfr SP = 0x81; //堆栈指针 + + +/*system*/ +sfr PCON = 0x87; //电源管理控制寄存器 + +/*interrupt*/ +sfr IP1 = 0XB9; //中断优先级控制寄存器1 +sfr IP = 0xB8; //中断优先权控制寄存器 +sfr IE = 0xA8; //中断控制寄存器 +sfr IE1 = 0XA9; //中断控制寄存器1 + +/*PORT*/ +sfr P5PH = 0xDA; //P5口模式控制寄存器 +sfr P5CON = 0xD9; //P5口模式控制寄存器 +sfr P5 = 0xD8; //P5口数据寄存器 +sfr P4PH = 0xC2; //P4口模式控制寄存器 +sfr P4CON = 0xC1; //P4口模式控制寄存器 +sfr P4 = 0xC0; //P4口数据寄存器 +sfr P3PH = 0xB2; //P3口模式控制寄存器 +sfr P3CON = 0xB1; //P3口模式控制寄存器 +sfr P3 = 0xB0; //P3口数据寄存器 +sfr P2PH = 0xA2; //P2口模式控制寄存器 +sfr P2CON = 0xA1; //P2口模式控制寄存器 +sfr P2 = 0xA0; //P2口数据寄存器 +sfr P1PH = 0x92; //P1口模式控制寄存器 +sfr P1CON = 0x91; //P1口模式控制寄存器 +sfr P1 = 0x90; //P1口数据寄存器 +sfr P0PH = 0x9B; //P0口模式控制寄存器 +sfr P0CON = 0x9A; //P0口模式控制寄存器 +sfr P0 = 0x80; //P0口数据寄存器 +sfr IOHCON0 = 0x96; //IOH0设置寄存器 +sfr IOHCON1 = 0x97; //IOH1设置寄存器 + +/*TIMER*/ +sfr TMCON = 0x8E; //定时器频率控制寄存器 +sfr TH1 = 0x8D; //定时器1高8位 +sfr TH0 = 0x8C; //定时器0高8位 +sfr TL1 = 0x8B; //定时器1低8位 +sfr TL0 = 0x8A; //定时器0低8位 +sfr TMOD = 0x89; //定时器工作模式寄存器 +sfr TCON = 0x88; //定时器控制寄存器 +sfr T2CON = 0xC8; //定时器2控制寄存器 +sfr T2MOD = 0xC9; //定时器2工作模式寄存器 +sfr RCAP2L = 0xCA; //定时器2重载/捕捉低8位 +sfr RCAP2H = 0xCB; //定时器2重载/捕捉高8位 +sfr TL2 = 0xCC; //定时器2低8位 +sfr TH2 = 0xCD; //定时器2高8位 + + +/*ADC*/ +sfr ADCCFG0 = 0xAB; //ADC功能配置寄存器0 +sfr ADCCFG1 = 0xAC; //ADC功能配置寄存器1 +sfr ADCCFG2 = 0XAA; //ADC功能配置寄存器2 +sfr ADCCON = 0XAD; //ADC控制寄存器 +sfr ADCVL = 0xAE; //ADC 结果寄存器 +sfr ADCVH = 0xAF; //ADC 结果寄存器 + +/*PWM*/ +sfr PWMCFG = 0xD4; //PWM设置寄存器 +sfr PWMCON = 0xD3; //PWM控制寄存器 + + +// +///*WatchDog*/ +sfr BTMCON = 0XCE; //低频定时器控制寄存器 +sfr WDTCON = 0xCF; //WDT控制寄存器 + + +/*LCD*/ +sfr OTCON = 0X8F; //LCD电压输出控制寄存器 +sfr P0VO = 0X9C; //P0 LCD Bais 输出寄存器 +sfr P1VO = 0X94; //P1 LCD Bais 输出寄存器 +sfr P2VO = 0XA3; //P2 LCD Bais 输出寄存器 +sfr P3VO = 0XB3; //P3 LCD Bais 输出寄存器 + +sfr DDRCON = 0X93; //显示驱动设置寄存器 + + +/*INT*/ +sfr INT0F = 0XBA; //INT0 下降沿中断控制寄存器 +sfr INT0R = 0XBB; //INT0 上降沿中断控制寄存器 +sfr INT1F = 0XBC; //INT1 下降沿中断控制寄存器 +sfr INT1R = 0XBD; //INT1 上降沿中断控制寄存器 +sfr INT2F = 0XC6; //INT2 下降沿中断控制寄存器 +sfr INT2R = 0XC7; //INT2 上降沿中断控制寄存器 + + +/*IAP */ +sfr IAPCTL = 0xF6; //IAP控制寄存器 +sfr IAPDAT = 0xF5; //IAP数据寄存器 +sfr IAPADE = 0xF4; //IAP扩展地址寄存器 +sfr IAPADH = 0xF3; //IAP写入地址高位寄存器 +sfr IAPADL = 0xF2; //IAP写入地址低8位寄存器 +sfr IAPKEY = 0xF1; //IAP保护寄存器 + +/*UART*/ +sfr SCON = 0X98; //串口控制寄存器 +sfr SBUF = 0X99; //串口数据缓存寄存器 + +/*SPI*/ +sfr SSCON0 = 0X9D; //SPI控制寄存器0 +sfr SSCON1 = 0X9E; //SPI控制寄存器1 +sfr SSCON2 = 0X95; //SPI控制寄存器2 +sfr SSDAT = 0X9F; //SPI数据寄存器 + +sfr OPINX = 0XFE; +sfr OPREG = 0XFF; +sfr EXADH = 0XF7; + +/*Check Sum*/ +sfr CHKSUML = 0XFC; //Check Sum结果寄存器低位 +sfr CHKSUMH = 0XFD; //Check Sum结果寄存器高位 + +/*模拟比较器*/ +sfr CMPCFG = 0XB6; //模拟比较器设置寄存器 +sfr CMPCON = 0XB7; //模拟比较器控制寄存器 + +/*乘除法器*/ +sfr EXA0 = 0xE9; //扩展累加器0 +sfr EXA1 = 0xEA; //扩展累加器1 +sfr EXA2 = 0xEB; //扩展累加器2 +sfr EXA3 = 0xEC; //扩展累加器3 +sfr EXBL = 0xED; //扩展B寄存器0 +sfr EXBH = 0xEE; //扩展B寄存器1 +sfr OPERCON = 0xEF; //运算控制寄存器 + +///* ------------------- 位寄存器-------------------- */ +/*PSW*/ +sbit CY = PSW^7; //标志位 0:加法运算最高位无进位,或者减法运算最高位无借位时 1:加法运算最高位有进位,或者减法运算最高位有借位时 +sbit AC = PSW^6; //进位辅助标志位 0:无借位、进位 1:加法运算时在bit3位有进位,或减法运算在bit3位有借位时 +sbit F0 = PSW^5; //用户标志位 +sbit RS1 = PSW^4; //工作寄存器组选择位 +sbit RS0 = PSW^3; //工作寄存器组选择位 +sbit OV = PSW^2; //溢出标志位 +sbit F1 = PSW^1; //F1标志 +sbit P = PSW^0; //奇偶标志位 0:ACC中1的个数为偶数(包括0个) 1:ACC中1的个数为奇数 + +/*T2CON*/ +sbit TF2 = T2CON^7; +sbit EXF2 = T2CON^6; +sbit RCLK = T2CON^5; +sbit CLK = T2CON^4; +sbit EXEN2 = T2CON^3; +sbit TR2 = T2CON^2; +sbit T2 = T2CON^1; +sbit CP = T2CON^0; + + +/*IP*/ +sbit IPADC = IP^6; //ADC中断优先控制位 0:设定 ADC的中断优先权是 “低” 1:设定 ADC的中断优先权是 “高” +sbit IPT2 = IP^5; //Timer2中断优先控制位 0:设定 Timer2的中断优先权是 “低” 1:设定Timer2的中断优先权是 “高” +sbit IPUART = IP^4; //UART中断优先控制位 0:设定UART的中断优先权是 “低” 1:设定UART的中断优先权是 “高” +sbit IPT1 = IP^3; //Timer1中断优先控制位 0:设定 Timer 1的中断优先权是 “低” 1:设定 Timer 1的中断优先权是 “高” +sbit IPINT1 = IP^2; //INT1中断优先控制位 0:设定INT1中断优先权是 “低” 1:设定INT1的中断优先权是 “高” +sbit IPT0 = IP^1; //Timer0中断优先控制位 0:设定 Timer 0的中断优先权是 “低” 1:设定 Timer 0的中断优先权是 “高” +sbit IPINT0 = IP^0; //INT0中断优先控制位 0:设定INT0中断优先权是 “低” 1:设定INT0的中断优先权是 “高” + +/*IE*/ +sbit EA = IE^7; //中断使能的总控制 0:关闭所有的中断 1:打开所有的中断 +sbit EADC = IE^6; //ADC中断使能控制 0:关闭ADC中断 1:打开ADC中断 +sbit ET2 = IE^5; //Timer2中断使能控制 0:关闭Timer2中断 1:打开Timer2中断 +sbit EUART = IE^4; //UART中断使能控制 0:关闭UART中断 1:打开UART中断 +sbit ET1 = IE^3; //Timer1中断使能控制 0:关闭TIMER1中断 1:打开TIMER1中断 +sbit EINT1 = IE^2; //INT1中断使能控制 0:关闭INT1中断 1:打开INT1中断 +sbit ET0 = IE^1; //Timer0中断使能控制 0:关闭TIMER0中断 1:打开TIMER0中断 +sbit EINT0 = IE^0; //INT0中断使能控制 0:关闭INT0中断 1:打开INT0中断 + +/*TCON*/ +sbit TF1 = TCON^7; //T1溢出中断请求标志位 T1产生溢出,发生中断时,硬件将TF1置为“1”,申请中断,CPU响应时,硬件清“0”。 +sbit TR1 = TCON^6; //定时器T1的运行控制位 0:Timer1禁止计数 1:Timer1开始计数 +sbit TF0 = TCON^5; //T0溢出中断请求标志位 T0产生溢出,发生中断时,硬件将TF0置为“1”,申请中断,CPU响应时,硬件清“0”。 +sbit TR0 = TCON^4; //定时器T0的运行控制位 0:Timer0禁止计数 1:Timer0开始计数 + +/*SCON*/ +sbit SM0 = SCON^7; +sbit SM1 = SCON^6; +sbit SM2 = SCON^5; +sbit REN = SCON^4; +sbit TB8 = SCON^3; +sbit RB8 = SCON^2; +sbit TI = SCON^1; +sbit RI = SCON^0; + +/******************* P0 ****************** +*SC92F8447B封装未引出的管脚:无 +*SC92F8446B封装未引出的管脚:无 +*SC92F8445B封装未引出的管脚:P00 +******************************************/ +sbit P07 = P0^7; +sbit P06 = P0^6; +sbit P05 = P0^5; +sbit P04 = P0^4; +sbit P03 = P0^3; +sbit P02 = P0^2; +sbit P01 = P0^1; +sbit P00 = P0^0; + +/******************* P1 ****************** +*SC92F8447B封装未引出的管脚:无 +*SC92F8446B封装未引出的管脚:无 +*SC92F8445B封装未引出的管脚:无 +******************************************/ +sbit P17 = P1^7; +sbit P16 = P1^6; +sbit P15 = P1^5; +sbit P14 = P1^4; +sbit P13 = P1^3; +sbit P12 = P1^2; +sbit P11 = P1^1; +sbit P10 = P1^0; + +/******************* P2 ****************** +*SC92F8447B封装未引出的管脚:无 +*SC92F8446B封装未引出的管脚:无 +*SC92F8445B封装未引出的管脚:无 +******************************************/ +sbit P27 = P2^7; +sbit P26 = P2^6; +sbit P25 = P2^5; +sbit P24 = P2^4; +sbit P23 = P2^3; +sbit P22 = P2^2; +sbit P21 = P2^1; +sbit P20 = P2^0; + +/******************* P3 ****************** +*SC92F8447B封装未引出的管脚:无 +*SC92F8446B封装未引出的管脚:无 +*SC92F8445B封装未引出的管脚:P3 +******************************************/ +sbit P37 = P3^7; +sbit P36 = P3^6; +sbit P35 = P3^5; +sbit P34 = P3^4; +sbit P33 = P3^3; +sbit P32 = P3^2; +sbit P31 = P3^1; +sbit P30 = P3^0; + +/******************* P4 ****************** +*SC92F8447B封装未引出的管脚:无 +*SC92F8446B封装未引出的管脚:P46/P47 +*SC92F8445B封装未引出的管脚:P40 +******************************************/ +sbit P47 = P4^7; +sbit P46 = P4^6; +sbit P45 = P4^5; +sbit P44 = P4^4; +sbit P43 = P4^3; +sbit P42 = P4^2; +sbit P41 = P4^1; +sbit P40 = P4^0; + +/******************* P5 ****************** +*SC92F8447B封装未引出的管脚:无 +*SC92F8446B封装未引出的管脚:P54/P55 +*SC92F8445B封装未引出的管脚:P5 +******************************************/ +sbit P55 = P5^5; +sbit P54 = P5^4; +sbit P53 = P5^3; +sbit P52 = P5^2; +sbit P51 = P5^1; +sbit P50 = P5^0; + +/**************************************************************************** +*注意:封装未引出的管脚,需设置为强推挽输出模式 +*IC选型:请根据所使用的IC型号,在初始化完IO口后,调用相对应的未引出管脚的IO口配置; +*如若选SC92F8447B,则不用调用宏定义。 +*****************************************************************************/ +#define SC92F8446B_NIO_Init() {P4CON|=0xC0,P5CON|=0x30;} //SC92F8546B的未引出来的IO口配置 +#define SC92F8445B_NIO_Init() {P0CON|=0x01,P3CON|=0xFF,P4CON|=0x01,P5CON|=0xFF;} //SC92F8545B的未引出来的IO口配置 +#endif \ No newline at end of file diff --git a/CFG/SC92F8363B/Keil_Mould/FWLib/SC92F_Lib/inc/SC92F846xB_C.H b/CFG/SC92F8363B/Keil_Mould/FWLib/SC92F_Lib/inc/SC92F846xB_C.H new file mode 100644 index 0000000..6b09632 --- /dev/null +++ b/CFG/SC92F8363B/Keil_Mould/FWLib/SC92F_Lib/inc/SC92F846xB_C.H @@ -0,0 +1,251 @@ + /*-------------------------------------------------------------------------- +SC92F846XB_C.H + +C Header file for SC92F846XB microcontroller. +Copyright (c) 2018 Shenzhen SinOne Chip Electronic CO., Ltd. +All rights reserved. +深圳市赛元微电子有限公司 +版本号: V2.0 +日期: 2018.08.24 +--------------------------------------------------------------------------*/ +#ifndef _SC92F846XB_H_ +#define _SC92F846XB_H_ + +/* ------------------- 字节寄存器-------------------- */ +///*CPU*/ +sfr ACC = 0xE0; //累加器A +sfr B = 0xF0; //通用寄存器B +sfr PSW = 0xD0; //程序状态字 +sfr DPH = 0x83; //数据指针高8位 +sfr DPL = 0x82; //数据指针低8位 +sfr SP = 0x81; //堆栈指针 + + +/*system*/ +sfr PCON = 0x87; //电源管理控制寄存器 + +/*interrupt*/ +sfr IP1 = 0XB9; //中断优先级控制寄存器1 +sfr IP = 0xB8; //中断优先权控制寄存器 +sfr IE = 0xA8; //中断控制寄存器 +sfr IE1 = 0XA9; //中断控制寄存器1 + +/*PORT*/ +sfr P5PH = 0xDA; //P5口模式控制寄存器 +sfr P5CON = 0xD9; //P5口模式控制寄存器 +sfr P5 = 0xD8; //P5口数据寄存器 +sfr P2PH = 0xA2; //P2口模式控制寄存器 +sfr P2CON = 0xA1; //P2口模式控制寄存器 +sfr P2 = 0xA0; //P2口数据寄存器 +sfr P1PH = 0x92; //P1口模式控制寄存器 +sfr P1CON = 0x91; //P1口模式控制寄存器 +sfr P1 = 0x90; //P1口数据寄存器 +sfr P0PH = 0x9B; //P0口模式控制寄存器 +sfr P0CON = 0x9A; //P0口模式控制寄存器 +sfr P0 = 0x80; //P0口数据寄存器 +sfr IOHCON = 0x97; //IOH设置寄存器 + +/*TIMER*/ +sfr TMCON = 0x8E; //定时器频率控制寄存器 +sfr TH1 = 0x8D; //定时器1高8位 +sfr TH0 = 0x8C; //定时器0高8位 +sfr TL1 = 0x8B; //定时器1低8位 +sfr TL0 = 0x8A; //定时器0低8位 +sfr TMOD = 0x89; //定时器工作模式寄存器 +sfr TCON = 0x88; //定时器控制寄存器 +sfr T2CON = 0xC8; //定时器2控制寄存器 +sfr T2MOD = 0xC9; //定时器2工作模式寄存器 +sfr RCAP2L = 0xCA; //定时器2重载/捕捉低8位 +sfr RCAP2H = 0xCB; //定时器2重载/捕捉高8位 +sfr TL2 = 0xCC; //定时器2低8位 +sfr TH2 = 0xCD; //定时器2高8位 + + +/*ADC*/ +sfr ADCCFG0 = 0xAB; //ADC功能配置寄存器0 +sfr ADCCFG1 = 0xAC; //ADC功能配置寄存器1 +sfr ADCCFG2 = 0XAA; //ADC功能配置寄存器2 +sfr ADCCON = 0XAD; //ADC控制寄存器 +sfr ADCVL = 0xAE; //ADC 结果寄存器 +sfr ADCVH = 0xAF; //ADC 结果寄存器 + +/*PWM*/ +sfr PWMCFG = 0xD1; //PWM设置寄存器 +sfr PWMCON = 0xD2; //PWM控制寄存器 +sfr PWMPRD = 0xD3; //PWM周期设置寄存器 +sfr PWMDTYA = 0xD4; //PWM占空比设置寄存器A +sfr PWMDTY0 = 0xD5; //PWM0设置寄存器 +sfr PWMDTY1 = 0xD6; //PWM1设置寄存器 +sfr PWMDTY2 = 0xD7; //PWM2设置寄存器 +sfr PWMDTYB = 0xDC; //PWM占空比设置寄存器B +sfr PWMDTY3 = 0xDD; //PWM3设置寄存器 +sfr PWMDTY4 = 0xDE; //PWM4设置寄存器 +sfr PWMDTY5 = 0xDF; //PWM5设置寄存器 + +///*WatchDog*/ +sfr BTMCON = 0XCE; //低频定时器控制寄存器 +sfr WDTCON = 0xCF; //WDT控制寄存器 + +/*LCD*/ +sfr OTCON = 0X8F; //LCD电压输出控制寄存器 +sfr P0VO = 0X9C; //P0 LCD Bais 输出寄存器 + +/*INT*/ +sfr INT0F = 0XBA; //INT0 下降沿中断控制寄存器 +sfr INT0R = 0XBB; //INT0 上降沿中断控制寄存器 +sfr INT1F = 0XBC; //INT1 下降沿中断控制寄存器 +sfr INT1R = 0XBD; //INT1 上降沿中断控制寄存器 +sfr INT2F = 0XC6; //INT2 下降沿中断控制寄存器 +sfr INT2R = 0XC7; //INT2 上降沿中断控制寄存器 + +/*IAP */ +sfr IAPCTL = 0xF6; //IAP控制寄存器 +sfr IAPDAT = 0xF5; //IAP数据寄存器 +sfr IAPADE = 0xF4; //IAP扩展地址寄存器 +sfr IAPADH = 0xF3; //IAP写入地址高位寄存器 +sfr IAPADL = 0xF2; //IAP写入地址低8位寄存器 +sfr IAPKEY = 0xF1; //IAP保护寄存器 + +/*uart*/ +sfr SCON = 0x98; //串口控制寄存器 +sfr SBUF = 0x99; //串口数据缓存寄存器 + +/*三合一*/ +sfr SSCON0 = 0X9D; //SPI控制寄存器0 +sfr SSCON1 = 0X9E; //SPI控制寄存器1 +sfr SSCON2 = 0X95; //SPI控制寄存器2 +sfr SSDAT = 0X9F; //SPI数据寄存器 + +sfr OPINX = 0XFE; +sfr OPREG = 0XFF; +sfr EXADH = 0XF7; + +/*Check Sum*/ +sfr CHKSUML = 0XFC; //Check Sum结果寄存器低位 +sfr CHKSUMH = 0XFD; //Check Sum结果寄存器高位 + +/*乘除法*/ +sfr EXA0 = 0xE9; //扩展累加器0 +sfr EXA1 = 0xEA; //扩展累加器1 +sfr EXA2 = 0xEB; //扩展累加器2 +sfr EXA3 = 0xEC; //扩展累加器3 +sfr EXBL = 0xED; //扩展B寄存器0 +sfr EXBH = 0xEE; //扩展B寄存器1 +sfr OPERCON = 0xEF; //运算控制寄存器 + +/* ------------------- 位寄存器-------------------- */ +/*PSW*/ +sbit CY = PSW^7; //标志位 0:加法运算最高位无进位,或者减法运算最高位无借位时 1:加法运算最高位有进位,或者减法运算最高位有借位时 +sbit AC = PSW^6; //进位辅助标志位 0:无借位、进位 1:加法运算时在bit3位有进位,或减法运算在bit3位有借位时 +sbit F0 = PSW^5; //用户标志位 +sbit RS1 = PSW^4; //工作寄存器组选择位 +sbit RS0 = PSW^3; //工作寄存器组选择位 +sbit OV = PSW^2; //溢出标志位 +sbit F1 = PSW^1; //F1标志 +sbit P = PSW^0; //奇偶标志位 0:ACC中1的个数为偶数(包括0个) 1:ACC中1的个数为奇数 + +/*T2CON*/ +sbit TF2 = T2CON^7; +sbit EXF2 = T2CON^6; +sbit RCLK = T2CON^5; +sbit TCLK = T2CON^4; +sbit EXEN2 = T2CON^3; +sbit TR2 = T2CON^2; +sbit T2 = T2CON^1; +sbit CP = T2CON^0; + + +/*IP*/ +sbit IPADC = IP^6; //ADC中断优先控制位 0:设定 ADC的中断优先权是 “低” 1:设定 ADC的中断优先权是 “高” +sbit IPT2 = IP^5; //Timer2中断优先控制位 0:设定 Timer2的中断优先权是 “低” 1:设定Timer2的中断优先权是 “高” +sbit IPUART = IP^4; //UART中断优先控制位 0:设定UART的中断优先权是 “低” 1:设定UART的中断优先权是 “高” +sbit IPT1 = IP^3; //Timer1中断优先控制位 0:设定 Timer 1的中断优先权是 “低” 1:设定 Timer 1的中断优先权是 “高” +sbit IPINT1 = IP^2; //INT1中断优先控制位 0:设定INT1中断优先权是 “低” 1:设定INT1的中断优先权是 “高” +sbit IPT0 = IP^1; //Timer0中断优先控制位 0:设定 Timer 0的中断优先权是 “低” 1:设定 Timer 0的中断优先权是 “高” +sbit IPINT0 = IP^0; //INT0中断优先控制位 0:设定INT0中断优先权是 “低” 1:设定INT0的中断优先权是 “高” + +/*IE*/ +sbit EA = IE^7; //中断使能的总控制 0:关闭所有的中断 1:打开所有的中断 +sbit EADC = IE^6; //ADC中断使能控制 0:关闭ADC中断 1:打开ADC中断 +sbit ET2 = IE^5; //Timer2中断使能控制 0:关闭Timer2中断 1:打开Timer2中断 +sbit EUART = IE^4; //UART中断使能控制 0:关闭UART中断 1:打开UART中断 +sbit ET1 = IE^3; //Timer1中断使能控制 0:关闭TIMER1中断 1:打开TIMER1中断 +sbit EINT1 = IE^2; //INT1中断使能控制 0:关闭INT1中断 1:打开INT1中断 +sbit ET0 = IE^1; //Timer0中断使能控制 0:关闭TIMER0中断 1:打开TIMER0中断 +sbit EINT0 = IE^0; //INT0中断使能控制 0:关闭INT0中断 1:打开INT0中断 + +/*TCON*/ +sbit TF1 = TCON^7; //T1溢出中断请求标志位 T1产生溢出,发生中断时,硬件将TF1置为“1”,申请中断,CPU响应时,硬件清“0”。 +sbit TR1 = TCON^6; //定时器T1的运行控制位 0:Timer1禁止计数 1:Timer1开始计数 +sbit TF0 = TCON^5; //T0溢出中断请求标志位 T0产生溢出,发生中断时,硬件将TF0置为“1”,申请中断,CPU响应时,硬件清“0”。 +sbit TR0 = TCON^4; //定时器T0的运行控制位 0:Timer0禁止计数 1:Timer0开始计数 + +/*SCON*/ +sbit SM0 = SCON^7; +sbit SM1 = SCON^6; +sbit SM2 = SCON^5; +sbit REN = SCON^4; +sbit TB8 = SCON^3; +sbit RB8 = SCON^2; +sbit TI = SCON^1; +sbit RI = SCON^0; + +/******************* P0 ****************** +*SC92F8463B封装未引出的管脚:无 +*SC92F8462B封装未引出的管脚:P06/P07 +*SC92F8461B封装未引出的管脚:P02/P03/P04/P06/P07 +******************************************/ +sbit P07 = P0^7; +sbit P06 = P0^6; +sbit P05 = P0^5; +sbit P04 = P0^4; +sbit P03 = P0^3; +sbit P02 = P0^2; +sbit P01 = P0^1; +sbit P00 = P0^0; + +/******************* P1 ****************** +*SC92F8463B封装未引出的管脚:无 +*SC92F8462B封装未引出的管脚:P16/P17 +*SC92F8461B封装未引出的管脚:P16/P17 +******************************************/ +sbit P17 = P1^7; +sbit P16 = P1^6; +sbit P15 = P1^5; +sbit P14 = P1^4; +sbit P13 = P1^3; +sbit P12 = P1^2; +sbit P11 = P1^1; +sbit P10 = P1^0; + +/******************* P2 ****************** +*SC92F8463B封装未引出的管脚:无 +*SC92F8462B封装未引出的管脚:P22/P23 +*SC92F8461B封装未引出的管脚:P22/P23/P27 +******************************************/ +sbit P27 = P2^7; +sbit P26 = P2^6; +sbit P25 = P2^5; +sbit P24 = P2^4; +sbit P23 = P2^3; +sbit P22 = P2^2; +sbit P21 = P2^1; +sbit P20 = P2^0; + +/******************* P5 ****************** +*SC92F8463B封装未引出的管脚:无 +*SC92F8462B封装未引出的管脚:P50/P51 +*SC92F8461B封装未引出的管脚:P50/P51 +******************************************/ +sbit P51 = P5^1; +sbit P50 = P5^0; + +/**************************************************************************** +*注意:封装未引出的管脚,需设置为强推挽输出模式 +*IC选型:请根据所使用的IC型号,在初始化完IO口后,调用相对应的未引出管脚的IO口配置; +*如若选择SC92F8463B,则不用调用宏定义。 +*****************************************************************************/ +#define SC92F8462B_NIO_Init() {P0CON|=0xC0,P1CON|=0xC0,P2CON|=0x0C,P5CON|=0x03;} //SC92F8462B的未引出来的IO口配置 +#define SC92F8461B_NIO_Init() {P0CON|=0xEC,P1CON|=0xC0,P2CON|=0x8C,P5CON|=0x03;} //SC92F8461B的未引出来的IO口配置 + +#endif \ No newline at end of file diff --git a/CFG/SC92F8363B/Keil_Mould/FWLib/SC92F_Lib/inc/SC92F848x_C.H b/CFG/SC92F8363B/Keil_Mould/FWLib/SC92F_Lib/inc/SC92F848x_C.H new file mode 100644 index 0000000..df073b7 --- /dev/null +++ b/CFG/SC92F8363B/Keil_Mould/FWLib/SC92F_Lib/inc/SC92F848x_C.H @@ -0,0 +1,254 @@ +/*-------------------------------------------------------------------------- +SC92F848x_C.H + +C Header file for SC92F848x microcontroller. +Copyright (c) 2021 Shenzhen SinOne Microelectronics Co., Ltd. +All rights reserved. +深圳市赛元微电子有限公司 +版本号: V1.2 +日期: 2021.07.14 +--------------------------------------------------------------------------*/ +#ifndef _SC92F848x_H_ +#define _SC92F848x_H_ + +///* ------------------- 字节寄存器-------------------- */ +/*CPU*/ +sfr ACC = 0XE0; //累加器A +sfr B = 0XF0; //B寄存器 +sfr PSW = 0XD0; //程序状态字寄存器 +sfr DPH = 0X83; //DPTR数据指针高位 +sfr DPL = 0X82; //DPTR数据指针低位 +sfr SP = 0X81; //堆栈指针 +sfr EXA0 = 0XE9; //扩展累加器0 +sfr EXA1 = 0XEA; //扩展累加器1 +sfr EXA2 = 0XEB; //扩展累加器2 +sfr EXA3 = 0XEC; //扩展累加器3 +sfr EXBL = 0XED; //扩展B寄存器0 +sfr EXBH = 0XEE; //扩展B寄存器1 + +/*SRAM*/ +sfr EXADH = 0XF7; //外部SRAM操作地址高位 + +/*system*/ +sfr PCON = 0X87; //电源管理控制寄存器 + +/*Interrupt*/ +sfr IP1 = 0XB9; //中断优先级控制寄存器1 +sfr IP = 0XB8; //中断优先权控制寄存器 +sfr IE = 0XA8; //中断控制寄存器 +sfr IE1 = 0XA9; //中断控制寄存器1 + +/*PORT*/ +sfr IOHCON = 0X97; //IOH设置寄存器 +sfr P5PH = 0XDA; //P5口上拉电阻控制寄存器 +sfr P5CON = 0XD9; //P5口输入/输出控制寄存器 +sfr P5 = 0XD8; //P5口数据寄存器 +sfr P2PH = 0XA2; //P2口上拉电阻控制寄存器 +sfr P2CON = 0XA1; //P2口输入/输出控制寄存器 +sfr P2 = 0XA0; //P2口数据寄存器 +sfr P1PH = 0X92; //P1口上拉电阻控制寄存器 +sfr P1CON = 0X91; //P1口输入/输出控制寄存器 +sfr P1 = 0X90; //P1口数据寄存器 +sfr P0PH = 0X9B; //P0口上拉电阻控制寄存器 +sfr P0VO = 0X9C; //P0口LCD电压输出寄存器 +sfr P0CON = 0X9A; //P0口输入/输出控制寄存器 +sfr P0 = 0X80; //P0口数据寄存器 + +/*TIMER*/ +sfr TMCON = 0X8E; //定时器频率控制寄存器 +sfr TH1 = 0X8D; //定时器1高8位 +sfr TH0 = 0X8C; //定时器0高8位 +sfr TL1 = 0X8B; //定时器1低8位 +sfr TL0 = 0X8A; //定时器0低8位 +sfr TMOD = 0X89; //定时器工作模式寄存器 +sfr TCON = 0X88; //定时器控制寄存器 +sfr T2CON = 0XC8; //定时器2控制寄存器 +sfr T2MOD = 0XC9; //定时器2工作模式寄存器 +sfr RCAP2L = 0XCA; //定时器2重载/捕捉低8位 +sfr RCAP2H = 0XCB; //定时器2重载/捕捉高8位 +sfr TL2 = 0XCC; //定时器2低8位 +sfr TH2 = 0XCD; //定时器2高8位 + +/*ADC*/ +sfr ADCCFG2 = 0XAA; //ADC设置寄存器2 +sfr ADCCFG1 = 0XAC; //ADC设置寄存器1 +sfr ADCCFG0 = 0XAB; //ADC设置寄存器0 +sfr ADCCON = 0XAD; //ADC控制寄存器 +sfr ADCVL = 0XAE; //ADC结果寄存器 +sfr ADCVH = 0XAF; //ADC结果寄存器 + +/*PWM*/ +sfr PWMCFG = 0XD1; //PWM设置寄存器 +sfr PWMCON = 0XD2; //PWM控制寄存器 +sfr PWMPRD = 0XD3; //PWM周期设置寄存器 +sfr PWMDTYA = 0XD4; //PWM占空比设置寄存器A +sfr PWMDTY0 = 0XD5; //PWM0设置寄存器 +sfr PWMDTY1 = 0XD6; //PWM1占空比设置寄存器 +sfr PWMDTY2 = 0XD7; //PWM2占空比设置寄存器 +sfr PWMDTYB = 0XDC; //PWM占空比设置寄存器B +sfr PWMDTY3 = 0XDD; //PWM3占空比设置寄存器/PWM死区时间配置寄存器 +sfr PWMDTY4 = 0XDE; //PWM4占空比设置寄存器 +sfr PWMDTY5 = 0XDF; //PWM5占空比设置寄存器 + +/*WatchDog*/ +sfr WDTCON = 0XCF; //WDT控制寄存器 + +/*BTM*/ +sfr BTMCON = 0XCE; //低频定时器控制寄存器 + +/*INT*/ +sfr INT0F = 0XBA; //INT0 下降沿中断控制寄存器 +sfr INT0R = 0XBB; //INT0 上降沿中断控制寄存器 +sfr INT1F = 0XBC; //INT1 下降沿中断控制寄存器 +sfr INT1R = 0XBD; //INT1 上降沿中断控制寄存器 +sfr INT2F = 0XC6; //INT2 下降沿中断控制寄存器 +sfr INT2R = 0XC7; //INT2 上降沿中断控制寄存器 + +/*IAP */ +sfr IAPCTL = 0XF6; //IAP控制寄存器 +sfr IAPDAT = 0XF5; //IAP数据寄存器 +sfr IAPADE = 0XF4; //IAP扩展地址寄存器 +sfr IAPADH = 0XF3; //IAP写入地址高位寄存器 +sfr IAPADL = 0XF2; //IAP写入地址低位寄存器 +sfr IAPKEY = 0XF1; //IAP保护寄存器 + +/*uart0*/ +sfr SCON = 0X98; //串口控制寄存器 +sfr SBUF = 0X99; //串口数据缓存寄存器 +sfr OTCON = 0X8F; //输出控制寄存器 + +/*三合一*/ +sfr SSCON0 = 0X9D; //USCI控制寄存器0 +sfr SSCON1 = 0X9E; //USCI控制寄存器1 +sfr SSCON2 = 0X95; //USCI控制寄存器2 +sfr SSDAT = 0X9F; //USCI数据寄存器3 + +/*OPTION*/ +sfr OPINX = 0XFE; //Customer Option指针 +sfr OPREG = 0XFF; //Customer Option寄存器 + +/*Check Sum*/ +sfr CHKSUML = 0XFC; //Check Sum结果寄存器低位 +sfr CHKSUMH = 0XFD; //Check Sum结果寄存器高位 +sfr OPERCON = 0XEF; //运算控制寄存器 + +///* ------------------- 位寄存器-------------------- */ +/*PSW*/ +sbit CY = PSW^7; //标志位 0:加法运算最高位无进位,或者减法运算最高位无借位时 1:加法运算最高位有进位,或者减法运算最高位有借位时 +sbit AC = PSW^6; //进位辅助标志位 0:无借位、进位 1:加法运算时在bit3位有进位,或减法运算在bit3位有借位时 +sbit F0 = PSW^5; //用户标志位 +sbit RS1 = PSW^4; //工作寄存器组选择位 +sbit RS0 = PSW^3; //工作寄存器组选择位 +sbit OV = PSW^2; //溢出标志位 +sbit F1 = PSW^1; //F1标志 +sbit P = PSW^0; //奇偶标志位 0:ACC中1的个数为偶数(包括0个) 1:ACC中1的个数为奇数 + +/*T2CON*/ +sbit TF2 = T2CON^7; //定时器2溢出标志位 +sbit EXF2 = T2CON^6; //T2EX引脚外部事件输入(下降沿)被检测到的标志位 +sbit RCLK = T2CON^5; //UART0接收时钟控制位 0: 定时器1产生接收波特率 1: 定时器2产生接收波特率 +sbit TCLK = T2CON^4; //UART0发送时钟控制位 0: 定时器1产生发送波特率 1: 定时器2产生发送波特率 +sbit EXEN2 = T2CON^3; //T2EX引脚上的外部事件输入(下降沿)用作重载/捕获触发器允许/禁止控制 +sbit TR2 = T2CON^2; //定时器2开始/停止控制位 0: 停止定时器2 1: 开始定时器2 +sbit T2 = T2CON^1; //定时器2定时器/计数器方式选定位2 +sbit CP = T2CON^0; //捕获/重载方式选定位 + +/*IP*/ +sbit IPADC = IP^6; //ADC中断优先权选择 0:设定 ADC的中断优先权是 “低” 1:设定 ADC的中断优先权是 “高” +sbit IPT2 = IP^5; //Timer2中断优先权选择 0:设定 Timer 2的中断优先权是 “低” 1:设定 Timer 2的中断优先权是 “高” +sbit IPUART = IP^4; //UART中断优先权选择 0:设定 UART的中断优先权是 “低” 1:设定 UART的中断优先权是 “高” +sbit IPT1 = IP^3; //Timer1中断优先权选择 0:设定 Timer 1的中断优先权是 “低” 1:设定 Timer 1的中断优先权是 “高” +sbit IPINT1 = IP^2; //INT1计数器中断优先权选择 0:设定 INT1的中断优先权是 “低” 1:设定 INT1的中断优先权是 “高” +sbit IPT0 = IP^1; //Timer0中断优先权选择 0:设定 Timer 0的中断优先权是 “低” 1:设定 Timer 0的中断优先权是 “高” +sbit IPINT0 = IP^0; //INT0计数器中断优先权选择 0:设定 INT0的中断优先权为 “低” 1: INT0中断优先权为高 + +/*IE*/ +sbit EA = IE^7; //中断使能的总控制 0:关闭所有的中断 1:打开所有的中断 +sbit EADC = IE^6; //ADC中断使能控制 0:关闭ADC中断 1:打开ADC中断 +sbit ET2 = IE^5; //Timer2中断使能控制 0:关闭TIMER2中断 1:打开TIMER2中断 +sbit EUART = IE^4; //UART中断使能控制 0:关闭SIF中断 1:打开SIF中断 +sbit ET1 = IE^3; //Timer1中断使能控制 0:关闭TIMER1中断 1:打开TIMER1中断 +sbit EINT1 = IE^2; //外部中断1中断使能控制 0:关闭外部中断1中断 1:打开外部中断1中断 +sbit ET0 = IE^1; //Timer0中断使能控制 0:关闭TIMER0中断 1:打开TIMER0中断 +sbit EINT0 = IE^0; //外部中断0中断使能控制 0:关闭外部中断0中断 1:打开外部中断0中断 + +/*TCON*/ +sbit TF1 = TCON^7; //T1溢出中断请求标志位 T1产生溢出,发生中断时,硬件将TF1置为“1”,申请中断,CPU响应时,硬件清“0”。 +sbit TR1 = TCON^6; //定时器T1的运行控制位 0:Timer1禁止计数 1:Timer1开始计数 +sbit TF0 = TCON^5; //T0溢出中断请求标志位 T0产生溢出,发生中断时,硬件将TF0置为“1”,申请中断,CPU响应时,硬件清“0”。 +sbit TR0 = TCON^4; //定时器T0的运行控制位 0:Timer0禁止计数 1:Timer0开始计数 + +/*SCON*/ +sbit SM0 = SCON^7; //串行通信模式控制位:与SM1配合使用 00: 模式0,8位半双工同步通信模式 01: 模式1,10位全双工异步通信 11: 模式3,11位全双工异步通信 +sbit SM1 = SCON^6; //串行通信模式控制位 +sbit SM2 = SCON^5; //串行通信模式控制位2,此控制位只对模式3有效 0:每收到一个完整数据帧就置位RI产生中断请求 1:收到一个完整的数据帧时,只有当RB8=1时才会置位RI产生中断请求 +sbit REN = SCON^4; //接收允许控制位 0:不允许接受数据 1:允许接受数据 +sbit TB8 = SCON^3; //只对模式3有效,为发送数据的第9位 +sbit RB8 = SCON^2; //只对模式3有效,为接收数据的第9位 +sbit TI = SCON^1; //发送中断标志位 +sbit RI = SCON^0; //接收中断标志位 + +/******************* P0 ****************** +*SC92F8483封装未引出的管脚:无 +*SC92F8482封装未引出的管脚:P06/P07 +*SC92F8481封装未引出的管脚:P02/P03/P04/P05/P06/P07 +*SC92F8480封装未引出的管脚:P0 +******************************************/ +sbit P07 = P0^7; +sbit P06 = P0^6; +sbit P05 = P0^5; +sbit P04 = P0^4; +sbit P03 = P0^3; +sbit P02 = P0^2; +sbit P01 = P0^1; +sbit P00 = P0^0; + +/******************* P1 ****************** +*SC92F8483封装未引出的管脚:无 +*SC92F8482封装未引出的管脚:P16/P17 +*SC92F8481封装未引出的管脚:P16/P17 +*SC92F8480封装未引出的管脚:P14/P15/P16/P17 +******************************************/ +sbit P17 = P1^7; +sbit P16 = P1^6; +sbit P15 = P1^5; +sbit P14 = P1^4; +sbit P13 = P1^3; +sbit P12 = P1^2; +sbit P11 = P1^1; +sbit P10 = P1^0; + +/******************* P2 ****************** +*SC92F8483封装未引出的管脚:无 +*SC92F8482封装未引出的管脚:P22/P23 +*SC92F8481封装未引出的管脚:P22/P23/P27 +*SC92F8480封装未引出的管脚:P22/P23/P25/P26/P27 +******************************************/ +sbit P27 = P2^7; +sbit P26 = P2^6; +sbit P25 = P2^5; +sbit P24 = P2^4; +sbit P23 = P2^3; +sbit P22 = P2^2; +sbit P21 = P2^1; +sbit P20 = P2^0; + +/******************* P5 ****************** +*SC92F8483封装未引出的管脚:无 +*SC92F8482封装未引出的管脚:P50/P51 +*SC92F8481封装未引出的管脚:P50/P51 +*SC92F8480封装未引出的管脚:P50/P51 +******************************************/ +sbit P51 = P5^1; +sbit P50 = P5^0; + +/**************************************************************************** +*注意:封装未引出的管脚,需设置为强推挽输出模式 +*IC选型:请根据所使用的IC型号,在初始化完IO口后,调用相对应的未引出管脚的IO口配置; +*如若选SC92F8483,则不用调用宏定义。 +*****************************************************************************/ +#define SC92F8482_NIO_Init() {P0CON|=0xC0,P1CON|=0xC0,P2CON|=0x0C,P5CON|=0x03;}//SC92F8482的未引出来的IO口配置 +#define SC92F8481_NIO_Init() {P0CON|=0xFC,P1CON|=0xC0,P2CON|=0x8C,P5CON|=0x03;}//SC92F8481的未引出来的IO口配置 +#define SC92F8480_NIO_Init() {P0CON|=0xFF,P1CON|=0xF0,P2CON|=0xEC,P5CON|=0x03;}//SC92F8480的未引出来的IO口配置 + +#endif \ No newline at end of file diff --git a/CFG/SC92F8363B/Keil_Mould/FWLib/SC92F_Lib/inc/SC92F84Ax_2_ASM.H b/CFG/SC92F8363B/Keil_Mould/FWLib/SC92F_Lib/inc/SC92F84Ax_2_ASM.H new file mode 100644 index 0000000..6a83914 --- /dev/null +++ b/CFG/SC92F8363B/Keil_Mould/FWLib/SC92F_Lib/inc/SC92F84Ax_2_ASM.H @@ -0,0 +1,294 @@ +/*-------------------------------------------------------------------------- +SC92F84Ax_ASM.H + +ASM Header file for SC92F84Ax microcontroller. +Copyright (c) 2020 Shenzhen SinOne Chip Electronic CO., Ltd. +All rights reserved. +深圳市赛元微电子有限公司 +版本号: V1.0 +日期: 2020.07.01 + + +--------------------------------------------------------------------------*/ +#ifndef _SC92F84Ax_ASM_H_ +#define _SC92F84Ax_ASM_H_ + +/* ------------------- 字节寄存器-------------------- */ +/*CPU*/ +ACC EQU 0xE0; //累加器A +B EQU 0xF0; //通用寄存器B +PSW EQU 0xD0; //程序状态字 +DPH EQU 0x83; //数据指针高8位 +DPL EQU 0x82; //数据指针低8位 +SP EQU 0x81; //堆栈指针 + +/*system*/ +PCON EQU 0x87; //电源管理控制寄存器 + +/*interrupt*/ +IP EQU 0xB8; //中断优先权控制寄存器 +IE EQU 0xA8; //中断控制寄存器 +IP1 EQU 0XB9; //中断优先级控制寄存器1 +IE1 EQU 0XA9; //中断控制寄存器1 + +/*PORT*/ +P5PH EQU 0xDA; //P5口模式控制寄存器 +P5CON EQU 0xD9; //P5口模式控制寄存器 +P5 EQU 0xD8; //P5口数据寄存器 +P4PH EQU 0xC2; //P4口模式控制寄存器 +P4CON EQU 0xC1; //P4口模式控制寄存器 +P4 EQU 0xC0; //P4口数据寄存器 +P3PH EQU 0xB2; //P3口模式控制寄存器 +P3CON EQU 0xB1; //P3口模式控制寄存器 +P3 EQU 0xB0; //P3口数据寄存器 +P2PH EQU 0xA2; //P2口模式控制寄存器 +P2CON EQU 0xA1; //P2口模式控制寄存器 +P2 EQU 0xA0; //P2口数据寄存器 +P1PH EQU 0x92; //P1口模式控制寄存器 +P1CON EQU 0x91; //P1口模式控制寄存器 +P1 EQU 0x90; //P1口数据寄存器 +P0PH EQU 0x9B; //P0口模式控制寄存器 +P0CON EQU 0x9A; //P0口模式控制寄存器 +P0 EQU 0x80; //P0口数据寄存器 +IOHCON0 EQU 0x96; //IOH0设置寄存器 +IOHCON1 EQU 0x97; //IOH1设置寄存器 + +/*TIMER*/ +TMCON EQU 0x8E; //定时器频率控制寄存器 +TH1 EQU 0x8D; //定时器1高8位 +TH0 EQU 0x8C; //定时器0高8位 +TL1 EQU 0x8B; //定时器1低8位 +TL0 EQU 0x8A; //定时器0低8位 +TMOD EQU 0x89; //定时器工作模式寄存器 +TCON EQU 0x88; //定时器控制寄存器 +T2CON EQU 0XC8; //定时器2控制寄存器 +T2MOD EQU 0XC9; //定时器2工作模式寄存器 +RCAP2L EQU 0XCA; //定时器2重载/捕捉低8位 +RCAP2H EQU 0XCB; //定时器2重载/捕捉高8位 +TL2 EQU 0XCC; //定时器2低8位 +TH2 EQU 0XCD; //定时器2高8位 + +/*ADC*/ +ADCCFG0 EQU 0xAB; //ADC功能配置寄存器0 +ADCCFG1 EQU 0xAC; //ADC功能配置寄存器1 +ADCCFG2 EQU 0xAA; //ADC功能配置寄存器2 +ADCCON EQU 0XAD; //ADC控制寄存器 +ADCVL EQU 0xAE; //ADC 结果寄存器 +ADCVH EQU 0xAF; //ADC 结果寄存器 + +/*PWM*/ +PWMCFG EQU 0xD4; //PWM设置寄存器 +PWMCON EQU 0xD3; //PWM控制寄存器 + +/*WatchDog*/ +BTMCON EQU 0XCE; //低频定时器控制寄存器 +WDTCON EQU 0xCF; //WDT控制寄存器 + +/*LCD*/ +OTCON EQU 0X8F; //LCD电压输出控制寄存器 +P0VO EQU 0X9C; //P0 LCD Bais 输出寄存器 +P1VO EQU 0X94; //P1 LCD Bais 输出寄存器 +P2VO EQU 0XA3; //P2 LCD Bais 输出寄存器 +P3VO EQU 0XB3; //P3 LCD Bais 输出寄存器 + +DDRCON EQU 0X93; //显示驱动设置寄存器 + +/*INT*/ +INT0F EQU 0XBA; //INT0 下降沿中断控制寄存器 +INT0R EQU 0XBB; //INT0 上降沿中断控制寄存器 +INT1F EQU 0XBC; //INT1 下降沿中断控制寄存器 +INT1R EQU 0XBD; //INT1 上降沿中断控制寄存器 +INT2F EQU 0XC6; //INT2 下降沿中断控制寄存器 +INT2R EQU 0XC7; //INT2 上降沿中断控制寄存器 + +/*IAP */ +IAPCTL EQU 0xF6; //IAP控制寄存器 +IAPDAT EQU 0xF5; //IAP数据寄存器 +IAPADE EQU 0xF4; //IAP扩展地址寄存器 +IAPADH EQU 0xF3; //IAP写入地址高位寄存器 +IAPADL EQU 0xF2; //IAP写入地址低8位寄存器 +IAPKEY EQU 0xF1; //IAP保护寄存器 + +/*uart*/ +SCON EQU 0x98; //串口控制寄存器 +SBUF EQU 0x99; //串口数据缓存寄存器 + +/*三合一*/ +SSCON0 EQU 0X9D; //SSI控制寄存器0 +SSCON1 EQU 0X9E; //SSI控制寄存器1 +SSCON2 EQU 0X95; //SSI控制寄存器2 +SSDAT EQU 0X9F; //SPI数据寄存器 + +OPINX EQU 0XFE; +OPREG EQU 0XFF; +EXADH EQU 0XF7; + +/*Check Sum*/ +CHKSUML EQU 0XFC; //Check Sum结果寄存器低位 +CHKSUMH EQU 0XFD; //Check Sum结果寄存器高位 + +/*乘除法*/ +EXA0 EQU 0xE9; //扩展累加器0 +EXA1 EQU 0xEA; //扩展累加器1 +EXA2 EQU 0xEB; //扩展累加器2 +EXA3 EQU 0xEC; //扩展累加器3 +EXBL EQU 0xED; //扩展B寄存器0 +EXBH EQU 0xEE; //扩展B寄存器1 +OPERCON EQU 0xEF; //运算控制寄存器 + +/* ------------------- 位寄存器-------------------- */ +/*PSW*/ +CY EQU PSW .7; //标志位 0:加法运算最高位无进位,或者减法运算最高位无借位时 1:加法运算最高位有进位,或者减法运算最高位有借位时 +AC EQU PSW .6; //进位辅助标志位 0:无借位、进位 1:加法运算时在bit3位有进位,或减法运算在bit3位有借位时 +F0 EQU PSW .5; //用户标志位 +RS1 EQU PSW .4; //工作寄存器组选择位 +RS0 EQU PSW .3; //工作寄存器组选择位 +OV EQU PSW .2; //溢出标志位 +F1 EQU PSW .1; //F1标志 +P EQU PSW .0; //奇偶标志位 0:ACC中1的个数为偶数(包括0个) 1:ACC中1的个数为奇数 + +/*T2CON*/ +TF2 EQU T2CON .7; +EXF2 EQU T2CON .6; +RCLK EQU T2CON .5; +TCLK EQU T2CON .4; +EXEN2 EQU T2CON .3; +TR2 EQU T2CON .2; +T2 EQU T2CON .1; +CP EQU T2CON .0; + +/*IP*/ +IPADC EQU IP .6; //ADC中断优先控制位 0:设定ADC的中断优先权是 “低” 1:设定ADC的中断优先权是 “高” +IPT2 EQU IP .5; //PWM中断优先控制位 0:设定PWM的中断优先权是 “低” 1:设定PWM 的中断优先权是 “高” +IPUART EQU IP .4; //Uart中断优先控制位 0:设定Uart的中断优先权是 “低” 1:设定Uart的中断优先权是 “高” +IPT1 EQU IP .3; //Timer1中断优先控制位 0:设定Timer1的中断优先权是 “低” 1:设定Timer1的中断优先权是 “高” +IPINT1 EQU IP .2; //INT1中断优先控制位 0:设定INT1中断优先权是 “低” 1:设定INT1中断优先权是 “高” +IPT0 EQU IP .1; //Timer0中断优先控制位 0:设定Timer0的中断优先权是 “低” 1:设定Timer0的中断优先权是 “高” +IPINT0 EQU IP .0; //INT0中断优先控制位 0:设定INT0中断优先权是 “低” 1:设定INT0中断优先权是 “高” + +/*IE*/ +EA EQU IE .7; //中断使能的总控制 0:关闭所有的中断 1:打开所有的中断 +EADC EQU IE .6; //ADC中断使能控制 0:关闭ADC中断 1:打开ADC中断 +ET2 EQU IE .5; //PWM中断使能控制 0:关闭PWM中断 1:打开PWM中断 +EUART EQU IE .4; //UART中断使能控制 0:关闭UART中断 1:打开UART中断 +ET1 EQU IE .3; //Timer1中断使能控制 0:关闭TIMER1中断 1:打开TIMER1中断 +EINT1 EQU IE .2; //INT1中断使能控制 0:关闭INT1中断 1:打开INT1中断 +ET0 EQU IE .1; //Timer0中断使能控制 0:关闭TIMER0中断 1:打开TIMER0中断 +EINT0 EQU IE .0; //INT0的中断使能控制 0:关闭INT0中断 1:打开INT0中断 + +/*TCON*/ +TF1 EQU TCON .7; //T1溢出中断请求标志位 T1产生溢出,发生中断时,硬件将TF1置为“1”,申请中断,CPU响应时,硬件清“0”。 +TR1 EQU TCON .6; //定时器T1的运行控制位 0:Timer1禁止计数 1:Timer1开始计数 +TF0 EQU TCON .5; //T0溢出中断请求标志位 T0产生溢出,发生中断时,硬件将TF0置为“1”,申请中断,CPU响应时,硬件清“0”。 +TR0 EQU TCON .4; //定时器T0的运行控制位 0:Timer0禁止计数 1:Timer0开始计数 +BITIE1 EQU TCON .3; //INT1溢出中断请求标志 +BITIE0 EQU TCON .1; //INT0溢出中断请求标志 + +/*SCON*/ +SM0 EQU SCON .7; +SM1 EQU SCON .6; +SM2 EQU SCON .5; +REN EQU SCON .4; +TB8 EQU SCON .3; +RB8 EQU SCON .2; +TI EQU SCON .1; +RI EQU SCON .0; + +/******************* P0 ****************** +*SC92F84A7封装未引出的管脚:无 +*SC92F84A6封装未引出的管脚:无 +*SC92F84A5封装未引出的管脚:P00 +******************************************/ +P07 EQU P0 .7; +P06 EQU P0 .6; +P05 EQU P0 .5; +P04 EQU P0 .4; +P03 EQU P0 .3; +P02 EQU P0 .2; +P01 EQU P0 .1; +P00 EQU P0 .0; + +/******************* P1 ****************** +*SC92F84A7封装未引出的管脚:无 +*SC92F84A6封装未引出的管脚:无 +*SC92F84A5封装未引出的管脚:无 +******************************************/ +P17 EQU P1 .7; +P16 EQU P1 .6; +P15 EQU P1 .5; +P14 EQU P1 .4; +P13 EQU P1 .3; +P12 EQU P1 .2; +P11 EQU P1 .1; +P10 EQU P1 .0; + +/******************* P2 ****************** +*SC92F84A7封装未引出的管脚:无 +*SC92F84A6封装未引出的管脚:无 +*SC92F84A5封装未引出的管脚:无 +******************************************/ +P27 EQU P2 .7; +P26 EQU P2 .6; +P25 EQU P2 .5; +P24 EQU P2 .4; +P23 EQU P2 .3; +P22 EQU P2 .2; +P21 EQU P2 .1; +P20 EQU P2 .0; + +/******************* P3 ****************** +*SC92F84A7封装未引出的管脚:无 +*SC92F84A6封装未引出的管脚:无 +*SC92F84A5封装未引出的管脚:P3 +******************************************/ +P37 EQU P3 .7; +P36 EQU P3 .6; +P35 EQU P3 .5; +P34 EQU P3 .4; +P33 EQU P3 .3; +P32 EQU P3 .2; +P31 EQU P3 .1; +P30 EQU P3 .0; + +/******************* P4 ****************** +*SC92F84A7封装未引出的管脚:无 +*SC92F84A6封装未引出的管脚:P46/P47 +*SC92F84A5封装未引出的管脚:P40 +******************************************/ +P47 EQU P4 .7; +P46 EQU P4 .6; +P45 EQU P4 .5; +P44 EQU P4 .4; +P43 EQU P4 .3; +P42 EQU P4 .2; +P41 EQU P4 .1; +P40 EQU P4 .0; + +/******************* P5 ****************** +*SC92F84A7封装未引出的管脚:无 +*SC92F84A6封装未引出的管脚:P54/P55 +*SC92F84A5封装未引出的管脚:P5 +******************************************/ +P55 EQU P5 .5; +P54 EQU P5 .4; +P53 EQU P5 .3; +P52 EQU P5 .2; +P51 EQU P5 .1; +P50 EQU P5 .0; + +/**************************************************************************** +*注意:封装未引出的管脚,需设置为强推挽输出模式 +*IC选型:请根据所使用的IC型号,在初始化完IO口后,调用相对应的未引出管脚的IO口配置; +*如若选择SC92F84A7,则不用调用宏定义。 +*****************************************************************************/ +SC92F84A6_NIO_Init MACRO IO //SC92F84A6未引出管脚的IO口配置 + ORL P4CON,#0XC0 + ORL P5CON,#0X30 + ENDM +SC92F84A5_NIO_Init MACRO IO //SC92F84A5未引出管脚的IO口配置 + ORL P0CON,#0X01 + ORL P3CON,#0XFF + ORL P4CON,#0X01 + ORL P5CON,#0X3F + ENDM +#endif diff --git a/CFG/SC92F8363B/Keil_Mould/FWLib/SC92F_Lib/inc/SC92F84Ax_2_C.H b/CFG/SC92F8363B/Keil_Mould/FWLib/SC92F_Lib/inc/SC92F84Ax_2_C.H new file mode 100644 index 0000000..ade8ddb --- /dev/null +++ b/CFG/SC92F8363B/Keil_Mould/FWLib/SC92F_Lib/inc/SC92F84Ax_2_C.H @@ -0,0 +1,296 @@ +/*-------------------------------------------------------------------------- +SC92F84Ax_C.H + +C Header file for SC92F84Ax microcontroller. +Copyright (c) 2020 Shenzhen SinOne Chip Electronic CO., Ltd. +All rights reserved. +深圳市赛元微电子有限公司 +版本号: V1.0 +日期: 2020.07.01 +--------------------------------------------------------------------------*/ +#ifndef _SC92F84Ax_H_ +#define _SC92F84Ax_H_ + +/* ------------------- 字节寄存器-------------------- */ +///*CPU*/ +sfr ACC = 0xE0; //累加器A +sfr B = 0xF0; //通用寄存器B +sfr PSW = 0xD0; //程序状态字 +sfr DPH = 0x83; //数据指针高8位 +sfr DPL = 0x82; //数据指针低8位 +sfr SP = 0x81; //堆栈指针 + + +/*system*/ +sfr PCON = 0x87; //电源管理控制寄存器 + +/*interrupt*/ +sfr IP1 = 0XB9; //中断优先级控制寄存器1 +sfr IP = 0xB8; //中断优先权控制寄存器 +sfr IE = 0xA8; //中断控制寄存器 +sfr IE1 = 0XA9; //中断控制寄存器1 + +/*PORT*/ +sfr P5PH = 0xDA; //P5口模式控制寄存器 +sfr P5CON = 0xD9; //P5口模式控制寄存器 +sfr P5 = 0xD8; //P5口数据寄存器 +sfr P4PH = 0xC2; //P4口模式控制寄存器 +sfr P4CON = 0xC1; //P4口模式控制寄存器 +sfr P4 = 0xC0; //P4口数据寄存器 +sfr P3PH = 0xB2; //P3口模式控制寄存器 +sfr P3CON = 0xB1; //P3口模式控制寄存器 +sfr P3 = 0xB0; //P3口数据寄存器 +sfr P2PH = 0xA2; //P2口模式控制寄存器 +sfr P2CON = 0xA1; //P2口模式控制寄存器 +sfr P2 = 0xA0; //P2口数据寄存器 +sfr P1PH = 0x92; //P1口模式控制寄存器 +sfr P1CON = 0x91; //P1口模式控制寄存器 +sfr P1 = 0x90; //P1口数据寄存器 +sfr P0PH = 0x9B; //P0口模式控制寄存器 +sfr P0CON = 0x9A; //P0口模式控制寄存器 +sfr P0 = 0x80; //P0口数据寄存器 +sfr IOHCON0 = 0x96; //IOH0设置寄存器 +sfr IOHCON1 = 0x97; //IOH1设置寄存器 + +/*TIMER*/ +sfr TMCON = 0x8E; //定时器频率控制寄存器 +sfr TH1 = 0x8D; //定时器1高8位 +sfr TH0 = 0x8C; //定时器0高8位 +sfr TL1 = 0x8B; //定时器1低8位 +sfr TL0 = 0x8A; //定时器0低8位 +sfr TMOD = 0x89; //定时器工作模式寄存器 +sfr TCON = 0x88; //定时器控制寄存器 +sfr T2CON = 0xC8; //定时器2控制寄存器 +sfr T2MOD = 0xC9; //定时器2工作模式寄存器 +sfr RCAP2L = 0xCA; //定时器2重载/捕捉低8位 +sfr RCAP2H = 0xCB; //定时器2重载/捕捉高8位 +sfr TL2 = 0xCC; //定时器2低8位 +sfr TH2 = 0xCD; //定时器2高8位 + + +/*ADC*/ +sfr ADCCFG0 = 0xAB; //ADC功能配置寄存器0 +sfr ADCCFG1 = 0xAC; //ADC功能配置寄存器1 +sfr ADCCFG2 = 0XAA; //ADC功能配置寄存器2 +sfr ADCCON = 0XAD; //ADC控制寄存器 +sfr ADCVL = 0xAE; //ADC 结果寄存器 +sfr ADCVH = 0xAF; //ADC 结果寄存器 + +/*PWM*/ +sfr PWMCFG = 0xD4; //PWM设置寄存器 +sfr PWMCON = 0xD3; //PWM控制寄存器 + + +// +//*WatchDog*/ +sfr BTMCON = 0XCE; //低频定时器控制寄存器 +sfr WDTCON = 0xCF; //WDT控制寄存器 + + +/*LCD*/ +sfr OTCON = 0X8F; //LCD电压输出控制寄存器 +sfr P0VO = 0X9C; //P0 LCD Bais 输出寄存器 +sfr P1VO = 0X94; //P1 LCD Bais 输出寄存器 +sfr P2VO = 0XA3; //P2 LCD Bais 输出寄存器 +sfr P3VO = 0XB3; //P3 LCD Bais 输出寄存器 + +sfr DDRCON = 0X93; //显示驱动设置寄存器 + + +/*INT*/ +sfr INT0F = 0XBA; //INT0 下降沿中断控制寄存器 +sfr INT0R = 0XBB; //INT0 上降沿中断控制寄存器 +sfr INT1F = 0XBC; //INT1 下降沿中断控制寄存器 +sfr INT1R = 0XBD; //INT1 上降沿中断控制寄存器 +sfr INT2F = 0XC6; //INT2 下降沿中断控制寄存器 +sfr INT2R = 0XC7; //INT2 上降沿中断控制寄存器 + + +/*IAP */ +sfr IAPCTL = 0xF6; //IAP控制寄存器 +sfr IAPDAT = 0xF5; //IAP数据寄存器 +sfr IAPADE = 0xF4; //IAP扩展地址寄存器 +sfr IAPADH = 0xF3; //IAP写入地址高位寄存器 +sfr IAPADL = 0xF2; //IAP写入地址低8位寄存器 +sfr IAPKEY = 0xF1; //IAP保护寄存器 + +/*UART*/ +sfr SCON = 0X98; //串口控制寄存器 +sfr SBUF = 0X99; //串口数据缓存寄存器 + +/*SPI*/ +sfr SSCON0 = 0X9D; //SPI控制寄存器0 +sfr SSCON1 = 0X9E; //SPI控制寄存器1 +sfr SSCON2 = 0X95; //SPI控制寄存器2 +sfr SSDAT = 0X9F; //SPI数据寄存器 + +sfr OPINX = 0XFE; +sfr OPREG = 0XFF; +sfr EXADH = 0XF7; + +/*Check Sum*/ +sfr CHKSUML = 0XFC; //Check Sum结果寄存器低位 +sfr CHKSUMH = 0XFD; //Check Sum结果寄存器高位 + +/*模拟比较器*/ +sfr CMPCFG = 0XB6; //模拟比较器设置寄存器 +sfr CMPCON = 0XB7; //模拟比较器控制寄存器 + +/*乘除法器*/ +sfr EXA0 = 0xE9; //扩展累加器0 +sfr EXA1 = 0xEA; //扩展累加器1 +sfr EXA2 = 0xEB; //扩展累加器2 +sfr EXA3 = 0xEC; //扩展累加器3 +sfr EXBL = 0xED; //扩展B寄存器0 +sfr EXBH = 0xEE; //扩展B寄存器1 +sfr OPERCON = 0xEF; //运算控制寄存器 + +/* ------------------- 位寄存器-------------------- */ +/*PSW*/ +sbit CY = PSW^7; //标志位 0:加法运算最高位无进位,或者减法运算最高位无借位时 1:加法运算最高位有进位,或者减法运算最高位有借位时 +sbit AC = PSW^6; //进位辅助标志位 0:无借位、进位 1:加法运算时在bit3位有进位,或减法运算在bit3位有借位时 +sbit F0 = PSW^5; //用户标志位 +sbit RS1 = PSW^4; //工作寄存器组选择位 +sbit RS0 = PSW^3; //工作寄存器组选择位 +sbit OV = PSW^2; //溢出标志位 +sbit F1 = PSW^1; //F1标志 +sbit P = PSW^0; //奇偶标志位 0:ACC中1的个数为偶数(包括0个) 1:ACC中1的个数为奇数 + +/*T2CON*/ +sbit TF2 = T2CON^7; +sbit EXF2 = T2CON^6; +sbit RCLK = T2CON^5; +sbit CLK = T2CON^4; +sbit EXEN2 = T2CON^3; +sbit TR2 = T2CON^2; +sbit T2 = T2CON^1; +sbit CP = T2CON^0; + + +/*IP*/ +sbit IPADC = IP^6; //ADC中断优先控制位 0:设定 ADC的中断优先权是 “低” 1:设定 ADC的中断优先权是 “高” +sbit IPT2 = IP^5; //Timer2中断优先控制位 0:设定 Timer2的中断优先权是 “低” 1:设定Timer2的中断优先权是 “高” +sbit IPUART = IP^4; //UART中断优先控制位 0:设定UART的中断优先权是 “低” 1:设定UART的中断优先权是 “高” +sbit IPT1 = IP^3; //Timer1中断优先控制位 0:设定 Timer 1的中断优先权是 “低” 1:设定 Timer 1的中断优先权是 “高” +sbit IPINT1 = IP^2; //INT1中断优先控制位 0:设定INT1中断优先权是 “低” 1:设定INT1的中断优先权是 “高” +sbit IPT0 = IP^1; //Timer0中断优先控制位 0:设定 Timer 0的中断优先权是 “低” 1:设定 Timer 0的中断优先权是 “高” +sbit IPINT0 = IP^0; //INT0中断优先控制位 0:设定INT0中断优先权是 “低” 1:设定INT0的中断优先权是 “高” + +/*IE*/ +sbit EA = IE^7; //中断使能的总控制 0:关闭所有的中断 1:打开所有的中断 +sbit EADC = IE^6; //ADC中断使能控制 0:关闭ADC中断 1:打开ADC中断 +sbit ET2 = IE^5; //Timer2中断使能控制 0:关闭Timer2中断 1:打开Timer2中断 +sbit EUART = IE^4; //UART中断使能控制 0:关闭UART中断 1:打开UART中断 +sbit ET1 = IE^3; //Timer1中断使能控制 0:关闭TIMER1中断 1:打开TIMER1中断 +sbit EINT1 = IE^2; //INT1中断使能控制 0:关闭INT1中断 1:打开INT1中断 +sbit ET0 = IE^1; //Timer0中断使能控制 0:关闭TIMER0中断 1:打开TIMER0中断 +sbit EINT0 = IE^0; //INT0中断使能控制 0:关闭INT0中断 1:打开INT0中断 + +/*TCON*/ +sbit TF1 = TCON^7; //T1溢出中断请求标志位 T1产生溢出,发生中断时,硬件将TF1置为“1”,申请中断,CPU响应时,硬件清“0”。 +sbit TR1 = TCON^6; //定时器T1的运行控制位 0:Timer1禁止计数 1:Timer1开始计数 +sbit TF0 = TCON^5; //T0溢出中断请求标志位 T0产生溢出,发生中断时,硬件将TF0置为“1”,申请中断,CPU响应时,硬件清“0”。 +sbit TR0 = TCON^4; //定时器T0的运行控制位 0:Timer0禁止计数 1:Timer0开始计数 +sbit BITIE1 = TCON^3; //INT1溢出中断请求标志 +sbit BITIE0 = TCON^1; //INT0溢出中断请求标志 + +/*SCON*/ +sbit SM0 = SCON^7; +sbit SM1 = SCON^6; +sbit SM2 = SCON^5; +sbit REN = SCON^4; +sbit TB8 = SCON^3; +sbit RB8 = SCON^2; +sbit TI = SCON^1; +sbit RI = SCON^0; + +/******************* P0 ****************** +*SC92F84A7封装未引出的管脚:无 +*SC92F84A6封装未引出的管脚:无 +*SC92F84A5封装未引出的管脚:P00 +******************************************/ +sbit P07 = P0^7; +sbit P06 = P0^6; +sbit P05 = P0^5; +sbit P04 = P0^4; +sbit P03 = P0^3; +sbit P02 = P0^2; +sbit P01 = P0^1; +sbit P00 = P0^0; + +/******************* P1 ****************** +*SC92F84A7封装未引出的管脚:无 +*SC92F84A6封装未引出的管脚:无 +*SC92F84A5封装未引出的管脚:无 +******************************************/ +sbit P17 = P1^7; +sbit P16 = P1^6; +sbit P15 = P1^5; +sbit P14 = P1^4; +sbit P13 = P1^3; +sbit P12 = P1^2; +sbit P11 = P1^1; +sbit P10 = P1^0; + +/******************* P2 ****************** +*SC92F84A7封装未引出的管脚:无 +*SC92F84A6封装未引出的管脚:无 +*SC92F84A5封装未引出的管脚:无 +******************************************/ +sbit P27 = P2^7; +sbit P26 = P2^6; +sbit P25 = P2^5; +sbit P24 = P2^4; +sbit P23 = P2^3; +sbit P22 = P2^2; +sbit P21 = P2^1; +sbit P20 = P2^0; + +/******************* P3 ****************** +*SC92F84A7封装未引出的管脚:无 +*SC92F84A6封装未引出的管脚:无 +*SC92F84A5封装未引出的管脚:P3 +******************************************/ +sbit P37 = P3^7; +sbit P36 = P3^6; +sbit P35 = P3^5; +sbit P34 = P3^4; +sbit P33 = P3^3; +sbit P32 = P3^2; +sbit P31 = P3^1; +sbit P30 = P3^0; + +/******************* P4 ****************** +*SC92F84A7封装未引出的管脚:无 +*SC92F84A6封装未引出的管脚:P46/P47 +*SC92F84A5封装未引出的管脚:P40 +******************************************/ +sbit P47 = P4^7; +sbit P46 = P4^6; +sbit P45 = P4^5; +sbit P44 = P4^4; +sbit P43 = P4^3; +sbit P42 = P4^2; +sbit P41 = P4^1; +sbit P40 = P4^0; + +/******************* P5 ****************** +*SC92F84A7封装未引出的管脚:无 +*SC92F84A6封装未引出的管脚:P54/P55 +*SC92F84A5封装未引出的管脚:P5 +******************************************/ +sbit P55 = P5^5; +sbit P54 = P5^4; +sbit P53 = P5^3; +sbit P52 = P5^2; +sbit P51 = P5^1; +sbit P50 = P5^0; + +/**************************************************************************** +*注意:封装未引出的管脚,需设置为强推挽输出模式 +*IC选型:请根据所使用的IC型号,在初始化完IO口后,调用相对应的未引出管脚的IO口配置; +*如若选SC92F84A7,则不用调用宏定义。 +*****************************************************************************/ +#define SC92F84A6_NIO_Init() {P4CON|=0xC0,P5CON|=0x30;} //SC92F84A6的未引出来的IO口配置 +#define SC92F84A5_NIO_Init() {P0CON|=0x01,P3CON|=0xFF,P4CON|=0x01,P5CON|=0x3F;} //SC92F84A5的未引出来的IO口配置 +#endif \ No newline at end of file diff --git a/CFG/SC92F8363B/Keil_Mould/FWLib/SC92F_Lib/inc/SC92F854x_C.H b/CFG/SC92F8363B/Keil_Mould/FWLib/SC92F_Lib/inc/SC92F854x_C.H new file mode 100644 index 0000000..1ca0703 --- /dev/null +++ b/CFG/SC92F8363B/Keil_Mould/FWLib/SC92F_Lib/inc/SC92F854x_C.H @@ -0,0 +1,320 @@ + /*-------------------------------------------------------------------------- +SC92F854X_C.H + +C Header file for SC92F854X microcontroller. +Copyright (c) 2018 Shenzhen SinOne Chip Electronic CO., Ltd. +All rights reserved. +深圳市赛元微电子有限公司 +版本号: V1.0 +日期: 2018.10.09 +--------------------------------------------------------------------------*/ +#ifndef _SC92F854X_H_ +#define _SC92F854X_H_ + +/* ------------------- 字节寄存器-------------------- */ +///*CPU*/ +sfr ACC = 0xE0; //累加器A +sfr B = 0xF0; //通用寄存器B +sfr PSW = 0xD0; //程序状态字 +sfr DPH = 0x83; //数据指针高8位 +sfr DPL = 0x82; //数据指针低8位 +sfr SP = 0x81; //堆栈指针 + + +/*system*/ +sfr PCON = 0x87; //电源管理控制寄存器 + +/*interrupt*/ +sfr IP1 = 0XB9; //中断优先级控制寄存器1 +sfr IP = 0xB8; //中断优先权控制寄存器 +sfr IE = 0xA8; //中断控制寄存器 +sfr IE1 = 0XA9; //中断控制寄存器1 + +/*PORT*/ +sfr P5PH = 0xDA; //P5口模式控制寄存器 +sfr P5CON = 0xD9; //P5口模式控制寄存器 +sfr P5 = 0xD8; //P5口数据寄存器 +sfr P4PH = 0xC2; //P4口模式控制寄存器 +sfr P4CON = 0xC1; //P4口模式控制寄存器 +sfr P4 = 0xC0; //P4口数据寄存器 +sfr P3PH = 0xB2; //P3口模式控制寄存器 +sfr P3CON = 0xB1; //P3口模式控制寄存器 +sfr P3 = 0xB0; //P3口数据寄存器 +sfr P2PH = 0xA2; //P2口模式控制寄存器 +sfr P2CON = 0xA1; //P2口模式控制寄存器 +sfr P2 = 0xA0; //P2口数据寄存器 +sfr P1PH = 0x92; //P1口模式控制寄存器 +sfr P1CON = 0x91; //P1口模式控制寄存器 +sfr P1 = 0x90; //P1口数据寄存器 +sfr P0PH = 0x9B; //P0口模式控制寄存器 +sfr P0CON = 0x9A; //P0口模式控制寄存器 +sfr P0 = 0x80; //P0口数据寄存器 +sfr IOHCON0 = 0x96; //IOH0设置寄存器 +sfr IOHCON1 = 0x97; //IOH1设置寄存器 + +/*TIMER*/ +sfr TMCON = 0x8E; //定时器频率控制寄存器 +sfr TH1 = 0x8D; //定时器1高8位 +sfr TH0 = 0x8C; //定时器0高8位 +sfr TL1 = 0x8B; //定时器1低8位 +sfr TL0 = 0x8A; //定时器0低8位 +sfr TMOD = 0x89; //定时器工作模式寄存器 +sfr TCON = 0x88; //定时器控制寄存器 +sfr T2CON = 0xC8; //定时器2控制寄存器 +sfr T2MOD = 0xC9; //定时器2工作模式寄存器 +sfr RCAP2L = 0xCA; //定时器2重载/捕捉低8位 +sfr RCAP2H = 0xCB; //定时器2重载/捕捉高8位 +sfr TL2 = 0xCC; //定时器2低8位 +sfr TH2 = 0xCD; //定时器2高8位 + + +/*ADC*/ +sfr ADCCFG0 = 0xAB; //ADC功能配置寄存器0 +sfr ADCCFG1 = 0xAC; //ADC功能配置寄存器1 +sfr ADCCFG2 = 0XAA; //ADC功能配置寄存器2 +sfr ADCCON = 0XAD; //ADC控制寄存器 +sfr ADCVL = 0xAE; //ADC 结果寄存器 +sfr ADCVH = 0xAF; //ADC 结果寄存器 + +/*PWM*/ +sfr PWMCFG = 0xD4; //PWM设置寄存器 +sfr PWMCON = 0xD3; //PWM设置寄存器 + + +// +///*WatchDog*/ +sfr BTMCON = 0XCE; //低频定时器控制寄存器 +sfr WDTCON = 0xCF; //WDT控制寄存器 + + +/*LCD*/ +sfr OTCON = 0X8F; //LCD电压输出控制寄存器 +sfr P0VO = 0X9C; //P0 LCD Bais 输出寄存器 +sfr P1VO = 0X94; //P1 LCD Bais 输出寄存器 +sfr P2VO = 0XA3; //P2 LCD Bais 输出寄存器 +sfr P3VO = 0XB3; //P3 LCD Bais 输出寄存器 + +sfr DDRCON = 0X93; //显示驱动设置寄存器 + + +/*INT*/ +sfr INT0F = 0XBA; //INT0 下降沿中断控制寄存器 +sfr INT0R = 0XBB; //INT0 上降沿中断控制寄存器 +sfr INT1F = 0XBC; //INT1 下降沿中断控制寄存器 +sfr INT1R = 0XBD; //INT1 上降沿中断控制寄存器 +sfr INT2F = 0XC6; //INT2 下降沿中断控制寄存器 +sfr INT2R = 0XC7; //INT2 上降沿中断控制寄存器 + +/*PGA*/ + + +/*IAP */ +sfr IAPCTL = 0xF6; //IAP控制寄存器 +sfr IAPDAT = 0xF5; //IAP数据寄存器 +sfr IAPADE = 0xF4; //IAP扩展地址寄存器 +sfr IAPADH = 0xF3; //IAP写入地址高位寄存器 +sfr IAPADL = 0xF2; //IAP写入地址低8位寄存器 +sfr IAPKEY = 0xF1; //IAP保护寄存器 + +/*UART*/ +sfr SCON = 0X98; //串口控制寄存器 +sfr SBUF = 0X99; //串口数据缓存寄存器 + +/*SPI*/ +sfr SSCON0 = 0X9D; //SPI控制寄存器0 +sfr SSCON1 = 0X9E; //SPI控制寄存器1 +sfr SSCON2 = 0X95; //SPI控制寄存器2 +sfr SSDAT = 0X9F; //SPI数据寄存器 + +sfr OPINX = 0XFE; +sfr OPREG = 0XFF; +sfr EXADH = 0XF7; + +/*Check Sum*/ +sfr CHKSUML = 0XFC; //Check Sum结果寄存器低位 +sfr CHKSUMH = 0XFD; //Check Sum结果寄存器高位 + +/*模拟比较器*/ +sfr CMPCFG = 0XB6; //模拟比较器设置寄存器 +sfr CMPCON = 0XB7; //模拟比较器控制寄存器 + +/*乘除法器*/ +sfr EXA0 = 0xE9; //扩展累加器0 +sfr EXA1 = 0xEA; //扩展累加器1 +sfr EXA2 = 0xEB; //扩展累加器2 +sfr EXA3 = 0xEC; //扩展累加器3 +sfr EXBL = 0xED; //扩展B寄存器0 +sfr EXBH = 0xEE; //扩展B寄存器1 +sfr OPERCON = 0xEF; //运算控制寄存器 + +///* ------------------- 位寄存器-------------------- */ +/*B*/ +/*TKCON*/ +/*ACC*/ +/*PSW*/ +sbit CY = PSW^7; //标志位 0:加法运算最高位无进位,或者减法运算最高位无借位时 1:加法运算最高位有进位,或者减法运算最高位有借位时 +sbit AC = PSW^6; //进位辅助标志位 0:无借位、进位 1:加法运算时在bit3位有进位,或减法运算在bit3位有借位时 +sbit F0 = PSW^5; //用户标志位 +sbit RS1 = PSW^4; //工作寄存器组选择位 +sbit RS0 = PSW^3; //工作寄存器组选择位 +sbit OV = PSW^2; //溢出标志位 +sbit F1 = PSW^1; //F1标志 +sbit P = PSW^0; //奇偶标志位 0:ACC中1的个数为偶数(包括0个) 1:ACC中1的个数为奇数 + +/*T2CON*/ +sbit TF2 = T2CON^7; +sbit EXF2 = T2CON^6; +sbit RCLK = T2CON^5; +sbit CLK = T2CON^4; +sbit EXEN2 = T2CON^3; +sbit TR2 = T2CON^2; +sbit T2 = T2CON^1; +sbit CP = T2CON^0; + + +/*IP*/ +sbit IPADC = IP^6; //ADC中断优先控制位 0:设定 ADC的中断优先权是 “低” 1:设定 ADC的中断优先权是 “高” +sbit IPT2 = IP^5; //Timer2中断优先控制位 0:设定 Timer2的中断优先权是 “低” 1:设定Timer2的中断优先权是 “高” +sbit IPUART = IP^4; //UART中断优先控制位 0:设定UART的中断优先权是 “低” 1:设定UART的中断优先权是 “高” +sbit IPT1 = IP^3; //Timer1中断优先控制位 0:设定 Timer 1的中断优先权是 “低” 1:设定 Timer 1的中断优先权是 “高” +sbit IPINT1 = IP^2; //INT1中断优先控制位 0:设定INT1中断优先权是 “低” 1:设定INT1的中断优先权是 “高” +sbit IPT0 = IP^1; //Timer0中断优先控制位 0:设定 Timer 0的中断优先权是 “低” 1:设定 Timer 0的中断优先权是 “高” +sbit IPINT0 = IP^0; //INT0中断优先控制位 0:设定INT0中断优先权是 “低” 1:设定INT0的中断优先权是 “高” + +/*IE*/ +sbit EA = IE^7; //中断使能的总控制 0:关闭所有的中断 1:打开所有的中断 +sbit EADC = IE^6; //ADC中断使能控制 0:关闭ADC中断 1:打开ADC中断 +sbit ET2 = IE^5; //Timer2中断使能控制 0:关闭Timer2中断 1:打开Timer2中断 +sbit EUART = IE^4; //UART中断使能控制 0:关闭UART中断 1:打开UART中断 +sbit ET1 = IE^3; //Timer1中断使能控制 0:关闭TIMER1中断 1:打开TIMER1中断 +sbit EINT1 = IE^2; //INT1中断使能控制 0:关闭INT1中断 1:打开INT1中断 +sbit ET0 = IE^1; //Timer0中断使能控制 0:关闭TIMER0中断 1:打开TIMER0中断 +sbit EINT0 = IE^0; //INT0中断使能控制 0:关闭INT0中断 1:打开INT0中断 + +/*TCON*/ +sbit TF1 = TCON^7; //T1溢出中断请求标志位 T1产生溢出,发生中断时,硬件将TF1置为“1”,申请中断,CPU响应时,硬件清“0”。 +sbit TR1 = TCON^6; //定时器T1的运行控制位 0:Timer1禁止计数 1:Timer1开始计数 +sbit TF0 = TCON^5; //T0溢出中断请求标志位 T0产生溢出,发生中断时,硬件将TF0置为“1”,申请中断,CPU响应时,硬件清“0”。 +sbit TR0 = TCON^4; //定时器T0的运行控制位 0:Timer0禁止计数 1:Timer0开始计数 + +/*SCON*/ +sbit SM0 = SCON^7; +sbit SM1 = SCON^6; +sbit SM2 = SCON^5; +sbit REN = SCON^4; +sbit TB8 = SCON^3; +sbit RB8 = SCON^2; +sbit TI = SCON^1; +sbit RI = SCON^0; + +/******************* P0 ****************** +*SC92F8547封装未引出的管脚:无 +*SC92F8546封装未引出的管脚:无 +*SC92F8545封装未引出的管脚:P00 +*SC92F8543封装未引出的管脚:P00/P01 +*SC92F8542封装未引出的管脚:P00/P01/P04/P05 +*SC92F8541封装未引出的管脚:P00/P01/P04/P05/P06 +******************************************/ +sbit P07 = P0^7; +sbit P06 = P0^6; +sbit P05 = P0^5; +sbit P04 = P0^4; +sbit P03 = P0^3; +sbit P02 = P0^2; +sbit P01 = P0^1; +sbit P00 = P0^0; + +/******************* P1 ****************** +*SC92F8547封装未引出的管脚:无 +*SC92F8546封装未引出的管脚:无 +*SC92F8545封装未引出的管脚:无 +*SC92F8543封装未引出的管脚:P10/P14/P15/P16/P17 +*SC92F8542封装未引出的管脚:P14/P15/P16/P17 +*SC92F8541封装未引出的管脚:P10/P16/P17 +******************************************/ +sbit P17 = P1^7; +sbit P16 = P1^6; +sbit P15 = P1^5; +sbit P14 = P1^4; +sbit P13 = P1^3; +sbit P12 = P1^2; +sbit P11 = P1^1; +sbit P10 = P1^0; + +/******************* P2 ****************** +*SC92F8547封装未引出的管脚:无 +*SC92F8546封装未引出的管脚:无 +*SC92F8545封装未引出的管脚:无 +*SC92F8543封装未引出的管脚:P26/P27 +*SC92F8542封装未引出的管脚:P26/P27 +*SC92F8541封装未引出的管脚:P24/P25/P26/P27 +******************************************/ +sbit P27 = P2^7; +sbit P26 = P2^6; +sbit P25 = P2^5; +sbit P24 = P2^4; +sbit P23 = P2^3; +sbit P22 = P2^2; +sbit P21 = P2^1; +sbit P20 = P2^0; + +/******************* P3 ****************** +*SC92F8547封装未引出的管脚:无 +*SC92F8546封装未引出的管脚:无 +*SC92F8545封装未引出的管脚:P3 +*SC92F8543封装未引出的管脚:无 +*SC92F8542封装未引出的管脚:P3 +*SC92F8541封装未引出的管脚:P30/P31/P32/P33/P34/P35 +******************************************/ +sbit P37 = P3^7; +sbit P36 = P3^6; +sbit P35 = P3^5; +sbit P34 = P3^4; +sbit P33 = P3^3; +sbit P32 = P3^2; +sbit P31 = P3^1; +sbit P30 = P3^0; + +/******************* P4 ****************** +*SC92F8547封装未引出的管脚:无 +*SC92F8546封装未引出的管脚:P46/P47 +*SC92F8545封装未引出的管脚:P40 +*SC92F8543封装未引出的管脚:P40/P44/P45/P46/P47 +*SC92F8542封装未引出的管脚:P44/P45/P46/P47 +*SC92F8541封装未引出的管脚:P4 +******************************************/ +sbit P47 = P4^7; +sbit P46 = P4^6; +sbit P45 = P4^5; +sbit P44 = P4^4; +sbit P43 = P4^3; +sbit P42 = P4^2; +sbit P41 = P4^1; +sbit P40 = P4^0; + +/******************* P5 ****************** +*SC92F8547封装未引出的管脚:无 +*SC92F8546封装未引出的管脚:P54/P55 +*SC92F8545封装未引出的管脚:P5 +*SC92F8543封装未引出的管脚:P5 +*SC92F8542封装未引出的管脚:P5 +*SC92F8541封装未引出的管脚:P5 +******************************************/ +sbit P55 = P5^5; +sbit P54 = P5^4; +sbit P53 = P5^3; +sbit P52 = P5^2; +sbit P51 = P5^1; +sbit P50 = P5^0; + +/**************************************************************************** +*注意:封装未引出的管脚,需设置为强推挽输出模式 +*IC选型:请根据所使用的IC型号,在初始化完IO口后,调用相对应的未引出管脚的IO口配置; +*如若选择SC92F8547,则不用调用宏定义。 +*****************************************************************************/ +#define SC92F8546_NIO_Init() {P4CON|=0xC0,P5CON|=0x30;} //SC92F8546的未引出来的IO口配置 +#define SC92F8545_NIO_Init() {P0CON|=0x01,P3CON|=0xFF,P4CON|=0x01,P5CON|=0xFF;} //SC92F8545的未引出来的IO口配置 +#define SC92F8543_NIO_Init() {P0CON|=0x03,P1CON|=0xF1,P2CON|=0xC0,P4CON|=0xF1,P5CON|=0xFF;} //SC92F8543的未引出来的IO口配置 +#define SC92F8542_NIO_Init() {P0CON|=0x33,P1CON|=0xF0,P2CON|=0xC0,P3CON|=0xFF,P4CON|=0xF0,P5CON|=0xFF;} //SC92F8542的未引出来的IO口配置 +#define SC92F8541_NIO_Init() {P0CON|=0x73,P1CON|=0xC1,P2CON|=0xF0,P3CON|=0x3F,P4CON|=0xFF,P5CON|=0xFF;} //SC92F8541的未引出来的IO口配置 +#endif \ No newline at end of file diff --git a/CFG/SC92F8363B/Keil_Mould/FWLib/SC92F_Lib/inc/SC92F859x_C.H b/CFG/SC92F8363B/Keil_Mould/FWLib/SC92F_Lib/inc/SC92F859x_C.H new file mode 100644 index 0000000..5ab2301 --- /dev/null +++ b/CFG/SC92F8363B/Keil_Mould/FWLib/SC92F_Lib/inc/SC92F859x_C.H @@ -0,0 +1,297 @@ +/*-------------------------------------------------------------------------- +SC92F859x_C.H + +C Header file for SC92F859x microcontroller. +Copyright (c) 2021 Shenzhen SinOne Microelectronics Co., Ltd. +All rights reserved. +深圳市赛元微电子有限公司 +版本号: V1.1 +日期: 2021.10.22 +--------------------------------------------------------------------------*/ +#ifndef _SC92F859x_H_ +#define _SC92F859x_H_ + +///* ------------------- 字节寄存器-------------------- */ +/*CPU*/ +sfr SP = 0X81; //堆栈指针 +sfr DPL = 0X82; //DPTR数据指针低位 +sfr DPH = 0X83; //DPTR数据指针高位 +sfr PSW = 0XD0; //程序状态字寄存器 +sfr ACC = 0XE0; //累加器A +sfr EXA0 = 0XE9; //扩展累加器0 +sfr EXA1 = 0XEA; //扩展累加器1 +sfr EXA2 = 0XEB; //扩展累加器2 +sfr EXA3 = 0XEC; //扩展累加器3 +sfr EXBL = 0XED; //扩展B寄存器0 +sfr EXBH = 0XEE; //扩展B寄存器1 +sfr B = 0XF0; //B寄存器 + +/*SRAM*/ +sfr EXADH = 0XF7; //外部SRAM操作地址高位 + +/*system*/ +sfr PCON = 0X87; //电源管理控制寄存器 + +/*Interrupt*/ +sfr IE = 0XA8; //中断控制寄存器 +sfr IE1 = 0XA9; //中断控制寄存器1 +sfr IP = 0XB8; //中断优先权控制寄存器 +sfr IP1 = 0XB9; //中断优先级控制寄存器1 + +/*PORT*/ +sfr P0 = 0X80; //P0口数据寄存器 +sfr P1 = 0X90; //P1口数据寄存器 +sfr P1CON = 0X91; //P1口输入/输出控制寄存器 +sfr P1PH = 0X92; //P1口上拉电阻控制寄存器 +sfr DDRCON = 0X93; //显示驱动控制寄存器 +sfr P1VO = 0X94; //P1口显示驱动输出寄存器 +sfr IOHCON0 = 0X96; //IOH设置寄存器0 +sfr IOHCON1 = 0X97; //IOH设置寄存器1 +sfr P0CON = 0X9A; //P0口输入/输出控制寄存器 +sfr P0PH = 0X9B; //P0口上拉电阻控制寄存器 +sfr P0VO = 0X9C; //P0口LCD电压输出寄存器 +sfr P2 = 0XA0; //P2口数据寄存器 +sfr P2CON = 0XA1; //P2口输入/输出控制寄存器 +sfr P2PH = 0XA2; //P2口上拉电阻控制寄存器 +sfr P2VO = 0XA3; //P2口显示驱动输出寄存器 +sfr P3 = 0XB0; //P3口数据寄存器 +sfr P3CON = 0XB1; //P3口输入/输出控制寄存器 +sfr P3PH = 0XB2; //P3口上拉电阻控制寄存器 +sfr P3VO = 0XB3; //P3口显示驱动输出寄存器 +sfr P4 = 0XC0; //P4口数据寄存器 +sfr P4CON = 0XC1; //P4口输入/输出控制寄存器 +sfr P4PH = 0XC2; //P4口上拉电阻控制寄存器 +sfr P5 = 0XD8; //P5口数据寄存器 +sfr P5CON = 0XD9; //P5口输入/输出控制寄存器 +sfr P5PH = 0XDA; //P5口上拉电阻控制寄存器 + +/*模拟比较器*/ +sfr CMPCFG = 0XB6; //模拟比较器设置寄存器 +sfr CMPCON = 0XB7; //模拟比较器控制寄存器 + +/*TIMER*/ +sfr TCON = 0X88; //定时器控制寄存器 +sfr TMOD = 0X89; //定时器工作模式寄存器 +sfr TL0 = 0X8A; //定时器0低8位 +sfr TL1 = 0X8B; //定时器1低8位 +sfr TH0 = 0X8C; //定时器0高8位 +sfr TH1 = 0X8D; //定时器1高8位 +sfr TMCON = 0X8E; //定时器频率控制寄存器 +sfr T2CON = 0XC8; //定时器2控制寄存器 +sfr T2MOD = 0XC9; //定时器2工作模式寄存器 +sfr RCAP2L = 0XCA; //定时器2重载/捕捉低8位 +sfr RCAP2H = 0XCB; //定时器2重载/捕捉高8位 +sfr TL2 = 0XCC; //定时器2低8位 +sfr TH2 = 0XCD; //定时器2高8位 + +/*ADC*/ +sfr ADCCFG2 = 0XAA; //ADC设置寄存器2 +sfr ADCCFG0 = 0XAB; //ADC设置寄存器0 +sfr ADCCFG1 = 0XAC; //ADC设置寄存器1 +sfr ADCCON = 0XAD; //ADC控制寄存器 +sfr ADCVL = 0XAE; //ADC结果寄存器 +sfr ADCVH = 0XAF; //ADC结果寄存器 + +/*PWM*/ +sfr PWMCON = 0XD3; //PWM0控制寄存器0 +sfr PWMCFG = 0XD4; //PWM设置寄存器 + +/*WatchDog*/ +sfr WDTCON = 0XCF; //WDT控制寄存器 + +/*BTM*/ +sfr BTMCON = 0XCE; //低频定时器控制寄存器 + +/*INT*/ +sfr INT0F = 0XBA; //INT0 下降沿中断控制寄存器 +sfr INT0R = 0XBB; //INT0 上降沿中断控制寄存器 +sfr INT1F = 0XBC; //INT1 下降沿中断控制寄存器 +sfr INT1R = 0XBD; //INT1 上降沿中断控制寄存器 +sfr INT2F = 0XC6; //INT2 下降沿中断控制寄存器 +sfr INT2R = 0XC7; //INT2 上降沿中断控制寄存器 + +/*IAP */ +sfr IAPKEY = 0XF1; //IAP保护寄存器 +sfr IAPADL = 0XF2; //IAP写入地址低位寄存器 +sfr IAPADH = 0XF3; //IAP写入地址高位寄存器 +sfr IAPADE = 0XF4; //IAP扩展地址寄存器 +sfr IAPDAT = 0XF5; //IAP数据寄存器 +sfr IAPCTL = 0XF6; //IAP控制寄存器 + +/*uart0*/ +sfr OTCON = 0X8F; //输出控制寄存器 +sfr SCON = 0X98; //串口控制寄存器 +sfr SBUF = 0X99; //串口数据缓存寄存器 + +/*三合一*/ +sfr SSCON2 = 0X95;//SSI控制寄存器2 +sfr SSCON0 = 0X9D; //SSI控制寄存器0 +sfr SSCON1 = 0X9E; //SSI控制寄存器1 +sfr SSDAT = 0X9F; //SSI数据寄存器 + +/*OPTION*/ +sfr OPINX = 0XFE; //Customer Option指针 +sfr OPREG = 0XFF; //Customer Option寄存器 + +/*CRC*/ +sfr OPERCON = 0XEF; //运算控制寄存器 +sfr CHKSUML = 0XFC; //Check Sum结果寄存器低位 +sfr CHKSUMH = 0XFD; //Check Sum结果寄存器高位 + + +///* ------------------- 位寄存器-------------------- */ +/*PSW*/ +sbit CY = PSW^7; //标志位 0:加法运算最高位无进位,或者减法运算最高位无借位时 1:加法运算最高位有进位,或者减法运算最高位有借位时 +sbit AC = PSW^6; //进位辅助标志位 0:无借位、进位 1:加法运算时在bit3位有进位,或减法运算在bit3位有借位时 +sbit F0 = PSW^5; //用户标志位 +sbit RS1 = PSW^4; //工作寄存器组选择位 +sbit RS0 = PSW^3; //工作寄存器组选择位 +sbit OV = PSW^2; //溢出标志位 +sbit F1 = PSW^1; //F1标志 +sbit P = PSW^0; //奇偶标志位 0:ACC中1的个数为偶数(包括0个) 1:ACC中1的个数为奇数 + +/*T2CON*/ +sbit TF2 = T2CON^7; //定时器2溢出标志位 +sbit EXF2 = T2CON^6; //T2EX引脚外部事件输入(下降沿)被检测到的标志位 +sbit RCLK = T2CON^5; //UART0接收时钟控制位 0: 定时器1产生接收波特率 1: 定时器2产生接收波特率 +sbit TCLK = T2CON^4; //UART0发送时钟控制位 0: 定时器1产生发送波特率 1: 定时器2产生发送波特率 +sbit EXEN2 = T2CON^3; //T2EX引脚上的外部事件输入(下降沿)用作重载/捕获触发器允许/禁止控制 +sbit TR2 = T2CON^2; //定时器2开始/停止控制位 0: 停止定时器2 1: 开始定时器2 +sbit T2 = T2CON^1; //定时器2定时器/计数器方式选定位2 +sbit CP = T2CON^0; //捕获/重载方式选定位 + +/*IP*/ +sbit IPADC = IP^6; //ADC中断优先权选择 0:设定 ADC的中断优先权是 “低” 1:设定 ADC的中断优先权是 “高” +sbit IPT2 = IP^5; //Timer2中断优先权选择 0:设定 Timer 2的中断优先权是 “低” 1:设定 Timer 2的中断优先权是 “高” +sbit IPUART = IP^4; //UART中断优先权选择 0:设定 UART的中断优先权是 “低” 1:设定 UART的中断优先权是 “高” +sbit IPT1 = IP^3; //Timer1中断优先权选择 0:设定 Timer 1的中断优先权是 “低” 1:设定 Timer 1的中断优先权是 “高” +sbit IPINT1 = IP^2; //INT1计数器中断优先权选择 0:设定 INT1的中断优先权是 “低” 1:设定 INT1的中断优先权是 “高” +sbit IPT0 = IP^1; //Timer0中断优先权选择 0:设定 Timer 0的中断优先权是 “低” 1:设定 Timer 0的中断优先权是 “高” +sbit IPINT0 = IP^0; //INT0计数器中断优先权选择 0:设定 INT0的中断优先权为 “低” 1: INT0中断优先权为高 + +/*IE*/ +sbit EA = IE^7; //中断使能的总控制 0:关闭所有的中断 1:打开所有的中断 +sbit EADC = IE^6; //ADC中断使能控制 0:关闭ADC中断 1:打开ADC中断 +sbit ET2 = IE^5; //Timer2中断使能控制 0:关闭TIMER2中断 1:打开TIMER2中断 +sbit EUART = IE^4; //UART中断使能控制 0:关闭SIF中断 1:打开SIF中断 +sbit ET1 = IE^3; //Timer1中断使能控制 0:关闭TIMER1中断 1:打开TIMER1中断 +sbit EINT1 = IE^2; //外部中断1中断使能控制 0:关闭外部中断1中断 1:打开外部中断1中断 +sbit ET0 = IE^1; //Timer0中断使能控制 0:关闭TIMER0中断 1:打开TIMER0中断 +sbit EINT0 = IE^0; //外部中断0中断使能控制 0:关闭外部中断0中断 1:打开外部中断0中断 + +/*TCON*/ +sbit TF1 = TCON^7; //T1溢出中断请求标志位 T1产生溢出,发生中断时,硬件将TF1置为“1”,申请中断,CPU响应时,硬件清“0”。 +sbit TR1 = TCON^6; //定时器T1的运行控制位 0:Timer1禁止计数 1:Timer1开始计数 +sbit TF0 = TCON^5; //T0溢出中断请求标志位 T0产生溢出,发生中断时,硬件将TF0置为“1”,申请中断,CPU响应时,硬件清“0”。 +sbit TR0 = TCON^4; //定时器T0的运行控制位 0:Timer0禁止计数 1:Timer0开始计数 + +/*SCON*/ +sbit SM0 = SCON^7; //串行通信模式控制位:与SM1配合使用 00: 模式0,8位半双工同步通信模式 01: 模式1,10位全双工异步通信 11: 模式3,11位全双工异步通信 +sbit SM1 = SCON^6; //串行通信模式控制位 +sbit SM2 = SCON^5; //串行通信模式控制位2,此控制位只对模式3有效 0:每收到一个完整数据帧就置位RI产生中断请求 1:收到一个完整的数据帧时,只有当RB8=1时才会置位RI产生中断请求 +sbit REN = SCON^4; //接收允许控制位 0:不允许接受数据 1:允许接受数据 +sbit TB8 = SCON^3; //只对模式3有效,为发送数据的第9位 +sbit RB8 = SCON^2; //只对模式3有效,为接收数据的第9位 +sbit TI = SCON^1; //发送中断标志位 +sbit RI = SCON^0; //接收中断标志位 + + +/******************* P0 ****************** +*SC92F8597封装未引出的管脚:无 +*SC92F8596封装未引出的管脚:无 +*SC92F8595封装未引出的管脚:P00 +*SC92F8593封装未引出的管脚:P00/P01 +******************************************/ +sbit P07 = P0^7; +sbit P06 = P0^6; +sbit P05 = P0^5; +sbit P04 = P0^4; +sbit P03 = P0^3; +sbit P02 = P0^2; +sbit P01 = P0^1; +sbit P00 = P0^0; + +/******************* P1 ****************** +*SC92F8597封装未引出的管脚:无 +*SC92F8596封装未引出的管脚:无 +*SC92F8595封装未引出的管脚:无 +*SC92F8593封装未引出的管脚:P10/P14/P15/P16/P17 +******************************************/ +sbit P17 = P1^7; +sbit P16 = P1^6; +sbit P15 = P1^5; +sbit P14 = P1^4; +sbit P13 = P1^3; +sbit P12 = P1^2; +sbit P11 = P1^1; +sbit P10 = P1^0; + +/******************* P2 ****************** +*SC92F8597封装未引出的管脚:无 +*SC92F8596封装未引出的管脚:无 +*SC92F8595封装未引出的管脚:无 +*SC92F8593封装未引出的管脚:P26/P27 +******************************************/ +sbit P27 = P2^7; +sbit P26 = P2^6; +sbit P25 = P2^5; +sbit P24 = P2^4; +sbit P23 = P2^3; +sbit P22 = P2^2; +sbit P21 = P2^1; +sbit P20 = P2^0; + +/******************* P3 ****************** +*SC92F8597封装未引出的管脚:无 +*SC92F8596封装未引出的管脚:无 +*SC92F8595封装未引出的管脚:P3 +*SC92F8593封装未引出的管脚:无 +******************************************/ +sbit P37 = P3^7; +sbit P36 = P3^6; +sbit P35 = P3^5; +sbit P34 = P3^4; +sbit P33 = P3^3; +sbit P32 = P3^2; +sbit P31 = P3^1; +sbit P30 = P3^0; + +/******************* P4 ****************** +*SC92F8597封装未引出的管脚:无 +*SC92F8596封装未引出的管脚:P46/P47 +*SC92F8595封装未引出的管脚:P40 +*SC92F8593封装未引出的管脚:P40/P44/P45/P46/P47 +******************************************/ +sbit P47 = P4^7; +sbit P46 = P4^6; +sbit P45 = P4^5; +sbit P44 = P4^4; +sbit P43 = P4^3; +sbit P42 = P4^2; +sbit P41 = P4^1; +sbit P40 = P4^0; + +/******************* P5 ****************** +*SC92F8597封装未引出的管脚:无 +*SC92F8596封装未引出的管脚:P54/P55 +*SC92F8595封装未引出的管脚:P5 +*SC92F8593封装未引出的管脚:P5 +******************************************/ +sbit P55 = P5^5; +sbit P54 = P5^4; +sbit P53 = P5^3; +sbit P52 = P5^2; +sbit P51 = P5^1; +sbit P50 = P5^0; + +/**************************************************************************** +*注意:封装未引出的管脚,需设置为强推挽输出模式 +*IC选型:请根据所使用的IC型号,在初始化完IO口后,调用相对应的未引出管脚的IO口配置; +*如若选SC92F8597,则不用调用宏定义。 +*****************************************************************************/ +#define SC92F8596_NIO_Init() {P4CON|=0xC0,P5CON|=0x30;} //SC92F8596的未引出来的IO口配置 +#define SC92F8595_NIO_Init() {P0CON|=0x01,P3CON|=0xFF,P4CON|=0x01,P5CON|=0xFF;} //SC92F8595的未引出来的IO口配置 +#define SC92F8593_NIO_Init() {P0CON|=0x03,P1CON|=0xF1,P2CON|=0xC0,P4CON|=0xF1,P5CON|=0xFF;}//SC92F8593的未引出来的IO口配置 + + +#endif \ No newline at end of file diff --git a/CFG/SC92F8363B/Keil_Mould/FWLib/SC92F_Lib/inc/SC92FWxx_C.H b/CFG/SC92F8363B/Keil_Mould/FWLib/SC92F_Lib/inc/SC92FWxx_C.H new file mode 100644 index 0000000..815b979 --- /dev/null +++ b/CFG/SC92F8363B/Keil_Mould/FWLib/SC92F_Lib/inc/SC92FWxx_C.H @@ -0,0 +1,286 @@ + /*-------------------------------------------------------------------------- +SC92FWxx_C.H + +C Header file for SC92FWxx microcontroller. +Copyright (c) 2018 Shenzhen SinOne Chip Electronic CO., Ltd. +All rights reserved. +深圳市赛元微电子有限公司 +版本号: V1.0 +日期: 2018.10.09 +--------------------------------------------------------------------------*/ +#ifndef _SC92FWxx_H_ +#define _SC92FWxx_H_ + +/* ------------------- 字节寄存器-------------------- */ +///*CPU*/ +sfr ACC = 0xE0; //累加器A +sfr B = 0xF0; //通用寄存器B +sfr PSW = 0xD0; //程序状态字 +sfr DPH = 0x83; //数据指针高8位 +sfr DPL = 0x82; //数据指针低8位 +sfr SP = 0x81; //堆栈指针 + + +/*system*/ +sfr PCON = 0x87; //电源管理控制寄存器 + +/*interrupt*/ +sfr IP1 = 0XB9; //中断优先级控制寄存器1 +sfr IP = 0xB8; //中断优先权控制寄存器 +sfr IE = 0xA8; //中断控制寄存器 +sfr IE1 = 0XA9; //中断控制寄存器1 + +/*PORT*/ +sfr P5PH = 0xDA; //P5口模式控制寄存器 +sfr P5CON = 0xD9; //P5口模式控制寄存器 +sfr P5 = 0xD8; //P5口数据寄存器 +sfr P4PH = 0xC2; //P4口模式控制寄存器 +sfr P4CON = 0xC1; //P4口模式控制寄存器 +sfr P4 = 0xC0; //P4口数据寄存器 +sfr P3PH = 0xB2; //P3口模式控制寄存器 +sfr P3CON = 0xB1; //P3口模式控制寄存器 +sfr P3 = 0xB0; //P3口数据寄存器 +sfr P2PH = 0xA2; //P2口模式控制寄存器 +sfr P2CON = 0xA1; //P2口模式控制寄存器 +sfr P2 = 0xA0; //P2口数据寄存器 +sfr P1PH = 0x92; //P1口模式控制寄存器 +sfr P1CON = 0x91; //P1口模式控制寄存器 +sfr P1 = 0x90; //P1口数据寄存器 +sfr P0PH = 0x9B; //P0口模式控制寄存器 +sfr P0CON = 0x9A; //P0口模式控制寄存器 +sfr P0 = 0x80; //P0口数据寄存器 +sfr IOHCON0 = 0x96; //IOH0设置寄存器 +sfr IOHCON1 = 0x97; //IOH1设置寄存器 + +/*TIMER*/ +sfr TMCON = 0x8E; //定时器频率控制寄存器 +sfr TH1 = 0x8D; //定时器1高8位 +sfr TH0 = 0x8C; //定时器0高8位 +sfr TL1 = 0x8B; //定时器1低8位 +sfr TL0 = 0x8A; //定时器0低8位 +sfr TMOD = 0x89; //定时器工作模式寄存器 +sfr TCON = 0x88; //定时器控制寄存器 +sfr T2CON = 0xC8; //定时器2控制寄存器 +sfr T2MOD = 0xC9; //定时器2工作模式寄存器 +sfr RCAP2L = 0xCA; //定时器2重载/捕捉低8位 +sfr RCAP2H = 0xCB; //定时器2重载/捕捉高8位 +sfr TL2 = 0xCC; //定时器2低8位 +sfr TH2 = 0xCD; //定时器2高8位 + + +/*ADC*/ +sfr ADCCFG0 = 0xAB; //ADC功能配置寄存器0 +sfr ADCCFG1 = 0xAC; //ADC功能配置寄存器1 +sfr ADCCFG2 = 0XAA; //ADC功能配置寄存器2 +sfr ADCCON = 0XAD; //ADC控制寄存器 +sfr ADCVL = 0xAE; //ADC 结果寄存器 +sfr ADCVH = 0xAF; //ADC 结果寄存器 + +/*PWM*/ +sfr PWMCFG0 = 0xD2; //PWM0设置寄存器 +sfr PWMCON0 = 0xD1; //PWM0控制寄存器 +sfr PWMCFG1 = 0xD4; //PWM1设置寄存器 +sfr PWMCON1 = 0xD3; //PWM1设置寄存器 + +///*WatchDog*/ +sfr BTMCON = 0XCE; //低频定时器控制寄存器 +sfr WDTCON = 0xCF; //WDT控制寄存器 + +sfr OTCON = 0X8F; //输出控制寄存器 + +/*INT*/ +sfr INT0F = 0XBA; //INT0 下降沿中断控制寄存器 +sfr INT0R = 0XBB; //INT0 上降沿中断控制寄存器 +sfr INT1F = 0XBC; //INT1 下降沿中断控制寄存器 +sfr INT1R = 0XBD; //INT1 上降沿中断控制寄存器 +sfr INT2F = 0XC6; //INT2 下降沿中断控制寄存器 +sfr INT2R = 0XC7; //INT2 上降沿中断控制寄存器 + +/*IAP */ +sfr IAPCTL = 0xF6; //IAP控制寄存器 +sfr IAPDAT = 0xF5; //IAP数据寄存器 +sfr IAPADE = 0xF4; //IAP扩展地址寄存器 +sfr IAPADH = 0xF3; //IAP写入地址高位寄存器 +sfr IAPADL = 0xF2; //IAP写入地址低8位寄存器 +sfr IAPKEY = 0xF1; //IAP保护寄存器 + +/*UART*/ +sfr SCON = 0X98; //串口控制寄存器 +sfr SBUF = 0X99; //串口数据缓存寄存器 + +/*SPI*/ +sfr SSCON0 = 0X9D; //SPI控制寄存器0 +sfr SSCON1 = 0X9E; //SPI控制寄存器1 +sfr SSCON2 = 0X95; //SPI控制寄存器2 +sfr SSDAT = 0X9F; //SPI数据寄存器 + +sfr OPINX = 0XFE; +sfr OPREG = 0XFF; +sfr EXADH = 0XF7; + +/*Check Sum*/ +sfr CHKSUML = 0XFC; //Check Sum结果寄存器低位 +sfr CHKSUMH = 0XFD; //Check Sum结果寄存器高位 + +/*模拟比较器*/ +sfr CMPCFG = 0XB6; //模拟比较器设置寄存器 +sfr CMPCON = 0XB7; //模拟比较器控制寄存器 + +/*乘除法器*/ +sfr EXA0 = 0xE9; //扩展累加器0 +sfr EXA1 = 0xEA; //扩展累加器1 +sfr EXA2 = 0xEB; //扩展累加器2 +sfr EXA3 = 0xEC; //扩展累加器3 +sfr EXBL = 0xED; //扩展B寄存器0 +sfr EXBH = 0xEE; //扩展B寄存器1 +sfr OPERCON = 0xEF; //运算控制寄存器 + +///* ------------------- 位寄存器-------------------- */ +/*B*/ +/*ACC*/ +/*PSW*/ +sbit CY = PSW^7; //标志位 0:加法运算最高位无进位,或者减法运算最高位无借位时 1:加法运算最高位有进位,或者减法运算最高位有借位时 +sbit AC = PSW^6; //进位辅助标志位 0:无借位、进位 1:加法运算时在bit3位有进位,或减法运算在bit3位有借位时 +sbit F0 = PSW^5; //用户标志位 +sbit RS1 = PSW^4; //工作寄存器组选择位 +sbit RS0 = PSW^3; //工作寄存器组选择位 +sbit OV = PSW^2; //溢出标志位 +sbit F1 = PSW^1; //F1标志 +sbit P = PSW^0; //奇偶标志位 0:ACC中1的个数为偶数(包括0个) 1:ACC中1的个数为奇数 + +/*T2CON*/ +sbit TF2 = T2CON^7; +sbit EXF2 = T2CON^6; +sbit RCLK = T2CON^5; +sbit CLK = T2CON^4; +sbit EXEN2 = T2CON^3; +sbit TR2 = T2CON^2; +sbit T2 = T2CON^1; +sbit CP = T2CON^0; + + +/*IP*/ +sbit IPADC = IP^6; //ADC中断优先控制位 0:设定 ADC的中断优先权是 “低” 1:设定 ADC的中断优先权是 “高” +sbit IPT2 = IP^5; //Timer2中断优先控制位 0:设定 Timer2的中断优先权是 “低” 1:设定Timer2的中断优先权是 “高” +sbit IPUART = IP^4; //UART中断优先控制位 0:设定UART的中断优先权是 “低” 1:设定UART的中断优先权是 “高” +sbit IPT1 = IP^3; //Timer1中断优先控制位 0:设定 Timer 1的中断优先权是 “低” 1:设定 Timer 1的中断优先权是 “高” +sbit IPINT1 = IP^2; //INT1中断优先控制位 0:设定INT1中断优先权是 “低” 1:设定INT1的中断优先权是 “高” +sbit IPT0 = IP^1; //Timer0中断优先控制位 0:设定 Timer 0的中断优先权是 “低” 1:设定 Timer 0的中断优先权是 “高” +sbit IPINT0 = IP^0; //INT0中断优先控制位 0:设定INT0中断优先权是 “低” 1:设定INT0的中断优先权是 “高” + +/*IE*/ +sbit EA = IE^7; //中断使能的总控制 0:关闭所有的中断 1:打开所有的中断 +sbit EADC = IE^6; //ADC中断使能控制 0:关闭ADC中断 1:打开ADC中断 +sbit ET2 = IE^5; //Timer2中断使能控制 0:关闭Timer2中断 1:打开Timer2中断 +sbit EUART = IE^4; //UART中断使能控制 0:关闭UART中断 1:打开UART中断 +sbit ET1 = IE^3; //Timer1中断使能控制 0:关闭TIMER1中断 1:打开TIMER1中断 +sbit EINT1 = IE^2; //INT1中断使能控制 0:关闭INT1中断 1:打开INT1中断 +sbit ET0 = IE^1; //Timer0中断使能控制 0:关闭TIMER0中断 1:打开TIMER0中断 +sbit EINT0 = IE^0; //INT0中断使能控制 0:关闭INT0中断 1:打开INT0中断 + +/*TCON*/ +sbit TF1 = TCON^7; //T1溢出中断请求标志位 T1产生溢出,发生中断时,硬件将TF1置为“1”,申请中断,CPU响应时,硬件清“0”。 +sbit TR1 = TCON^6; //定时器T1的运行控制位 0:Timer1禁止计数 1:Timer1开始计数 +sbit TF0 = TCON^5; //T0溢出中断请求标志位 T0产生溢出,发生中断时,硬件将TF0置为“1”,申请中断,CPU响应时,硬件清“0”。 +sbit TR0 = TCON^4; //定时器T0的运行控制位 0:Timer0禁止计数 1:Timer0开始计数 + +/*SCON*/ +sbit SM0 = SCON^7; +sbit SM1 = SCON^6; +sbit SM2 = SCON^5; +sbit REN = SCON^4; +sbit TB8 = SCON^3; +sbit RB8 = SCON^2; +sbit TI = SCON^1; +sbit RI = SCON^0; + +/******************* P0 ****************** +*SC92FW40封装未引出的管脚:无 +*SC92FW24封装未引出的管脚:P04/P05/P06/P07 +*SC92FW16封装未引出的管脚:P00/P01/P04/P05 +******************************************/ +sbit P07 = P0^7; +sbit P06 = P0^6; +sbit P05 = P0^5; +sbit P04 = P0^4; +sbit P03 = P0^3; +sbit P02 = P0^2; +sbit P01 = P0^1; +sbit P00 = P0^0; + +/******************* P1 ****************** +*SC92FW40封装未引出的管脚:无 +*SC92FW24封装未引出的管脚:P10/P12/P14/P15/P16/P17 +*SC92FW16封装未引出的管脚:P14/P15/P16/P17 +******************************************/ +sbit P17 = P1^7; +sbit P16 = P1^6; +sbit P15 = P1^5; +sbit P14 = P1^4; +sbit P13 = P1^3; +sbit P12 = P1^2; +sbit P11 = P1^1; +sbit P10 = P1^0; + +/******************* P2 ****************** +*SC92FW40封装未引出的管脚:无 +*SC92FW24封装未引出的管脚:P26/P27 +*SC92FW16封装未引出的管脚:P26/P27 +******************************************/ +sbit P27 = P2^7; +sbit P26 = P2^6; +sbit P25 = P2^5; +sbit P24 = P2^4; +sbit P23 = P2^3; +sbit P22 = P2^2; +sbit P21 = P2^1; +sbit P20 = P2^0; + +/******************* P3 ****************** +*SC92FW40封装未引出的管脚:无 +*SC92FW24封装未引出的管脚:P34/P35/P36/P37 +*SC92FW16封装未引出的管脚:P3 +******************************************/ +sbit P37 = P3^7; +sbit P36 = P3^6; +sbit P35 = P3^5; +sbit P34 = P3^4; +sbit P33 = P3^3; +sbit P32 = P3^2; +sbit P31 = P3^1; +sbit P30 = P3^0; + +/******************* P4 ****************** +*SC92FW40封装未引出的管脚:无 +*SC92FW24封装未引出的管脚:P46/P47 +*SC92FW16封装未引出的管脚:P44/P45/P46/P47 +******************************************/ +sbit P47 = P4^7; +sbit P46 = P4^6; +sbit P45 = P4^5; +sbit P44 = P4^4; +sbit P43 = P4^3; +sbit P42 = P4^2; +sbit P41 = P4^1; +sbit P40 = P4^0; + +/******************* P5 ****************** +*SC92FW40封装未引出的管脚:无 +*SC92FW24封装未引出的管脚:P54/P55 +*SC92FW16封装未引出的管脚:P5 +******************************************/ +sbit P55 = P5^5; +sbit P54 = P5^4; +sbit P53 = P5^3; +sbit P52 = P5^2; +sbit P51 = P5^1; +sbit P50 = P5^0; + +/**************************************************************************** +*注意:封装未引出的管脚,需设置为强推挽输出模式 +*IC选型:请根据所使用的IC型号,在初始化完IO口后,调用相对应的未引出管脚的IO口配置; +*如若选择SC92FW40,则不用调用宏定义。 +*****************************************************************************/ +#define SC92FW24_NIO_Init() {P0CON|=0xF0,P1CON|=0xF5,P2CON|=0xC0,P3CON|=0xF0,P4CON|=0xC0,P5CON|=0xF0;} //SC92FW24的未引出来的IO口配置 +#define SC92FW16_NIO_Init() {P0CON|=0x33,P1CON|=0xF0,P2CON|=0xC0,P3CON|=0xFF,P4CON|=0xF0,P5CON|=0xFF;} //SC92FW16的未引出来的IO口配置 +#endif \ No newline at end of file diff --git a/CFG/SC92F8363B/Keil_Mould/FWLib/SC92F_Lib/inc/SC92L753x_C.H b/CFG/SC92F8363B/Keil_Mould/FWLib/SC92F_Lib/inc/SC92L753x_C.H new file mode 100644 index 0000000..15aba03 --- /dev/null +++ b/CFG/SC92F8363B/Keil_Mould/FWLib/SC92F_Lib/inc/SC92L753x_C.H @@ -0,0 +1,277 @@ +/*-------------------------------------------------------------------------- +SC92L753x_C.H + +C Header file for SC92L853x microcontroller. +Copyright (c) 2022 Shenzhen SinOne Microelectronics Co., Ltd. +All rights reserved. +深圳市赛元微电子有限公司 +版本号: V0.1 +日期: 2022.01.18 +--------------------------------------------------------------------------*/ +#ifndef _SC92L753x_C_H_ +#define _SC92L753x_C_H_ + +///* ------------------- 字节寄存器-------------------- */ +/*CPU*/ +sfr SP = 0X81; //堆栈指针 +sfr DPL = 0X82; //DPTR数据指针低位 +sfr DPH = 0X83; //DPTR数据指针高位 +sfr PSW = 0XD0; //程序状态字寄存器 +sfr ACC = 0XE0; //累加器A +sfr EXA0 = 0XE9; //扩展累加器0 +sfr EXA1 = 0XEA; //扩展累加器1 +sfr EXA2 = 0XEB; //扩展累加器2 +sfr EXA3 = 0XEC; //扩展累加器3 +sfr EXBL = 0XED; //扩展B寄存器0 +sfr EXBH = 0XEE; //扩展B寄存器1 +sfr B = 0XF0; //B寄存器 + +/*SRAM*/ +sfr EXADH = 0XF7; //外部SRAM操作地址高位 + +/*system*/ +sfr PCON = 0X87; //电源管理控制寄存器 + +/*Interrupt*/ +sfr IE = 0XA8; //中断控制寄存器 +sfr IE1 = 0XA9; //中断控制寄存器1 +sfr IE2 = 0XAA; //中断使能寄存器2 +sfr IP = 0XB8; //中断优先权控制寄存器 +sfr IP1 = 0XB9; //中断优先级控制寄存器1 +sfr IP2 = 0XBA; //中断优先级控制寄存器2 + +/*PORT*/ +sfr P0 = 0X80; //P0口数据寄存器 +sfr P1 = 0X90; //P1口数据寄存器 +sfr P1CON = 0X91; //P1口输入/输出控制寄存器 +sfr P1PH = 0X92; //P1口上拉电阻控制寄存器 +sfr P1VO = 0X93; //P1口显示驱动输出寄存器 +sfr P0VO = 0X94; //P0口LCD电压输出寄存器 +sfr DDRCON = 0X95; //显示驱动控制寄存器 +sfr IOHCON0 = 0X96; //IOH设置寄存器0 +sfr IOHCON1 = 0X97; //IOH设置寄存器1 +sfr P0CON = 0X9A; //P0口输入/输出控制寄存器 +sfr P0PH = 0X9B; //P0口上拉电阻控制寄存器 +sfr P2 = 0XA0; //P2口数据寄存器 +sfr P2CON = 0XA1; //P2口输入/输出控制寄存器 +sfr P2PH = 0XA2; //P2口上拉电阻控制寄存器 +sfr P2VO = 0XA3; //P2口显示驱动输出寄存器 +sfr P5 = 0XD8; //P5口数据寄存器 +sfr P5CON = 0XD9; //P5口输入/输出控制寄存器 +sfr P5PH = 0XDA; //P5口上拉电阻控制寄存器 +sfr P5VO = 0XDB; //P5口显示驱动输出寄存器 + + +/*TIMER*/ +sfr TCON = 0X88; //定时器控制寄存器 +sfr TMOD = 0X89; //定时器工作模式寄存器 +sfr TL0 = 0X8A; //定时器0低8位 +sfr TL1 = 0X8B; //定时器1低8位 +sfr TH0 = 0X8C; //定时器0高8位 +sfr TH1 = 0X8D; //定时器1高8位 +sfr TMCON = 0X8E; //定时器频率控制寄存器 +sfr TXCON = 0XC8; //定时器2/3/4控制寄存器 +sfr TXMOD = 0XC9; //定时器2/3/4工作模式寄存器 +sfr RCAPXL = 0XCA; //定时器2/3/4重载/捕捉低8位 +sfr RCAPXH = 0XCB; //定时器2/3/4重载/捕捉高8位 +sfr TLX = 0XCC; //定时器2/3/4低8位 +sfr THX = 0XCD; //定时器2/3/4高8位 +sfr TXINX = 0XCE; //定时器控制寄存器指针 + +/*ADC*/ +sfr ADCCFG0 = 0XAB; //ADC设置寄存器0 +sfr ADCCFG1 = 0XAC; //ADC设置寄存器1 +sfr ADCCON = 0XAD; //ADC控制寄存器 +sfr ADCVL = 0XAE; //ADC结果寄存器 +sfr ADCVH = 0XAF; //ADC结果寄存器 +sfr ADCCFG2 = 0XB5; //ADC设置寄存器2 + +/*PWM*/ +sfr PWMCFG = 0XD1; //PWM设置寄存器 +sfr PWMCON0 = 0XD2; //PWM控制寄存器0 +sfr PWMCON1 = 0XD3; //PWM控制寄存器1 +sfr PWMPDL = 0XD4; //PWM周期寄存器低8位 +sfr PWMPDH = 0XD5; //PWM周期寄存器高8位 +sfr PWMDFR = 0XD6; //PWM死区设置寄存器 +sfr PWMFLT = 0XD7; //PWM故障检测设置寄存器 + +/*LPD*/ +sfr LPDCFG = 0XB7; //LPD控制器 + +/*WatchDog*/ +sfr WDTCON = 0XCF; //WDT控制寄存器 + +/*BTM*/ +sfr BTMCON = 0XFB; //低频定时器控制寄存器 + +/*INT*/ +sfr INT0F = 0XB4; //INT0 下降沿中断控制寄存器 +sfr INT0R = 0XBB; //INT0 上降沿中断控制寄存器 +sfr INT1F = 0XBC; //INT1 下降沿中断控制寄存器 +sfr INT1R = 0XBD; //INT1 上降沿中断控制寄存器 +sfr INT2F = 0XBE; //INT2 下降沿中断控制寄存器 +sfr INT2R = 0XBF; //INT2 上降沿中断控制寄存器 + +/*IAP */ +sfr IAPKEY = 0XF1; //IAP保护寄存器 +sfr IAPADL = 0XF2; //IAP写入地址低位寄存器 +sfr IAPADH = 0XF3; //IAP写入地址高位寄存器 +sfr IAPADE = 0XF4; //IAP写入扩展地址寄存器 +sfr IAPDAT = 0XF5; //IAP数据寄存器 +sfr IAPCTL = 0XF6; //IAP控制寄存器 + +/*uart0*/ +sfr OTCON = 0X8F; //输出控制寄存器 +sfr SCON = 0X98; //串口控制寄存器 +sfr SBUF = 0X99; //串口数据缓存寄存器 + +/*三合一*/ +sfr US0CON0 = 0X9C; //USCI0控制寄存器0 +sfr US0CON1 = 0X9D; //USCI0控制寄存器1 +sfr US0CON2 = 0X9E; //USCI0控制寄存器2 +sfr US0CON3 = 0X9F; //USCI0控制寄存器3 +sfr US1CON0 = 0XA4; //USCI1控制寄存器0 +sfr US1CON1 = 0XA5; //USCI1控制寄存器1 +sfr US1CON2 = 0XA6; //USCI1控制寄存器2 +sfr US1CON3 = 0XA7; //USCI1控制寄存器3 +sfr US2CON0 = 0XC4; //USCI2控制寄存器0 +sfr US2CON1 = 0XC5; //USCI2控制寄存器1 +sfr US2CON2 = 0XC6; //USCI2控制寄存器2 +sfr US2CON3 = 0XC7; //USCI2控制寄存器3 + +/*OPTION*/ +sfr OPINX = 0XFE; //Option指针 +sfr OPREG = 0XFF; //Option寄存器 + +/*CRC*/ +sfr OPERCON = 0XEF; //运算控制寄存器 +sfr CRCINX = 0XFC; //CRC指针 +sfr CRCREG = 0XFD; //CRC寄存器 + + +///* ------------------- 位寄存器-------------------- */ +/*PSW*/ +sbit CY = PSW^7; //标志位 0:加法运算最高位无进位,或者减法运算最高位无借位时 1:加法运算最高位有进位,或者减法运算最高位有借位时 +sbit AC = PSW^6; //进位辅助标志位 0:无借位、进位 1:加法运算时在bit3位有进位,或减法运算在bit3位有借位时 +sbit F0 = PSW^5; //用户标志位 +sbit RS1 = PSW^4; //工作寄存器组选择位 +sbit RS0 = PSW^3; //工作寄存器组选择位 +sbit OV = PSW^2; //溢出标志位 +sbit F1 = PSW^1; //F1标志 +sbit P = PSW^0; //奇偶标志位 0:ACC中1的个数为偶数(包括0个) 1:ACC中1的个数为奇数 + +/*TXCON*/ +sbit TFX = TXCON^7; //定时器2/3/4溢出标志位 +sbit EXFX = TXCON^6; //TnEX(n=2/3/4)引脚外部事件输入(下降沿)被检测到的标志位 +sbit RCLKX = TXCON^5; //UART0接收时钟控制位 0: 定时器1产生接收波特率 1: 定时器2产生接收波特率 +sbit TCLKX = TXCON^4; //UART0发送时钟控制位 0: 定时器1产生发送波特率 1: 定时器2产生发送波特率 +sbit EXENX = TXCON^3; //T2EX引脚上的外部事件输入(下降沿)用作重载/捕获触发器允许/禁止控制 +sbit TRX = TXCON^2; //定时器2开始/停止控制位 0: 停止定时器2 1: 开始定时器2 +sbit TX = TXCON^1; //定时器2定时器/计数器方式选定位2 +sbit CP = TXCON^0; //捕获/重载方式选定位 + +/*IP*/ +sbit IPADC = IP^6; //ADC中断优先权选择 0:设定 ADC的中断优先权是 “低” 1:设定 ADC的中断优先权是 “高” +sbit IPT2 = IP^5; //Timer2中断优先权选择 0:设定 Timer 2的中断优先权是 “低” 1:设定 Timer 2的中断优先权是 “高” +sbit IPUART = IP^4; //UART中断优先权选择 0:设定 UART的中断优先权是 “低” 1:设定 UART的中断优先权是 “高” +sbit IPT1 = IP^3; //Timer1中断优先权选择 0:设定 Timer 1的中断优先权是 “低” 1:设定 Timer 1的中断优先权是 “高” +sbit IPINT1 = IP^2; //INT1计数器中断优先权选择 0:设定 INT1的中断优先权是 “低” 1:设定 INT1的中断优先权是 “高” +sbit IPT0 = IP^1; //Timer0中断优先权选择 0:设定 Timer 0的中断优先权是 “低” 1:设定 Timer 0的中断优先权是 “高” +sbit IPINT0 = IP^0; //INT0计数器中断优先权选择 0:设定 INT0的中断优先权为 “低” 1: INT0中断优先权为高 + +/*IE*/ +sbit EA = IE^7; //中断使能的总控制 0:关闭所有的中断 1:打开所有的中断 +sbit EADC = IE^6; //ADC中断使能控制 0:关闭ADC中断 1:打开ADC中断 +sbit ET2 = IE^5; //Timer2中断使能控制 0:关闭TIMER2中断 1:打开TIMER2中断 +sbit EUART = IE^4; //UART中断使能控制 0:关闭SIF中断 1:打开SIF中断 +sbit ET1 = IE^3; //Timer1中断使能控制 0:关闭TIMER1中断 1:打开TIMER1中断 +sbit EINT1 = IE^2; //外部中断1中断使能控制 0:关闭外部中断1中断 1:打开外部中断1中断 +sbit ET0 = IE^1; //Timer0中断使能控制 0:关闭TIMER0中断 1:打开TIMER0中断 +sbit EINT0 = IE^0; //外部中断0中断使能控制 0:关闭外部中断0中断 1:打开外部中断0中断 + +/*TCON*/ +sbit TF1 = TCON^7; //T1溢出中断请求标志位 T1产生溢出,发生中断时,硬件将TF1置为“1”,申请中断,CPU响应时,硬件清“0”。 +sbit TR1 = TCON^6; //定时器T1的运行控制位 0:Timer1禁止计数 1:Timer1开始计数 +sbit TF0 = TCON^5; //T0溢出中断请求标志位 T0产生溢出,发生中断时,硬件将TF0置为“1”,申请中断,CPU响应时,硬件清“0”。 +sbit TR0 = TCON^4; //定时器T0的运行控制位 0:Timer0禁止计数 1:Timer0开始计数 + + +/*SCON*/ +sbit SM0 = SCON^7; //串行通信模式控制位:与SM1配合使用 00: 模式0,8位半双工同步通信模式 01: 模式1,10位全双工异步通信 11: 模式3,11位全双工异步通信 +sbit SM1 = SCON^6; //串行通信模式控制位 +sbit SM2 = SCON^5; //串行通信模式控制位2,此控制位只对模式3有效 0:每收到一个完整数据帧就置位RI产生中断请求 1:收到一个完整的数据帧时,只有当RB8=1时才会置位RI产生中断请求 +sbit REN = SCON^4; //接收允许控制位 0:不允许接受数据 1:允许接受数据 +sbit TB8 = SCON^3; //只对模式3有效,为发送数据的第9位 +sbit RB8 = SCON^2; //只对模式3有效,为接收数据的第9位 +sbit TI = SCON^1; //发送中断标志位 +sbit RI = SCON^0; //接收中断标志位 + + +/******************* P0 *********************** +*SC92L8535封装未引出的管脚:无 +*SC92L8533封装未引出的管脚:无 +*SC92L8532封装未引出的管脚:P06/P07 +*SC92L8531封装未引出的管脚:P02/P03/P04/P06/P07 +***********************************************/ +sbit P07 = P0^7; +sbit P06 = P0^6; +sbit P05 = P0^5; +sbit P04 = P0^4; +sbit P03 = P0^3; +sbit P02 = P0^2; +sbit P01 = P0^1; +sbit P00 = P0^0; + +/******************* P1 *********************** +*SC92L8535封装未引出的管脚:无 +*SC92L8533封装未引出的管脚:无 +*SC92L8532封装未引出的管脚:无 +*SC92L8531封装未引出的管脚:无 +***********************************************/ +sbit P17 = P1^7; +sbit P16 = P1^6; +sbit P15 = P1^5; +sbit P14 = P1^4; +sbit P13 = P1^3; +sbit P12 = P1^2; +sbit P11 = P1^1; +sbit P10 = P1^0; + +/******************* P2 *********************** +*SC92L8535封装未引出的管脚:无 +*SC92L8533封装未引出的管脚:无 +*SC92L8532封装未引出的管脚:无 +*SC92L8531封装未引出的管脚:P22/P23/P27 +***********************************************/ +sbit P27 = P2^7; +sbit P26 = P2^6; +sbit P25 = P2^5; +sbit P24 = P2^4; +sbit P23 = P2^3; +sbit P22 = P2^2; +sbit P21 = P2^1; +sbit P20 = P2^0; + + +/******************* P5 *********************** +*SC92L8535封装未引出的管脚:无 +*SC92L8533封装未引出的管脚:P52/P53/P54/P55 +*SC92L8532封装未引出的管脚:P5 +*SC92L8531封装未引出的管脚:P5 +***********************************************/ +sbit P55 = P5^5; +sbit P54 = P5^4; +sbit P53 = P5^3; +sbit P52 = P5^2; +sbit P51 = P5^1; +sbit P50 = P5^0; + +/**************************************************************************** +*注意:封装未引出的管脚,需设置为强推挽输出模式 +*IC选型:请根据所使用的IC型号,在初始化完IO口后,调用相对应的未引出管脚的IO口配置; +*如若选SC92L7535,则不用调用宏定义。 +*****************************************************************************/ +#define SC92L7533_NIO_Init() {P5CON|=0x3C;} //SC92L8533的未引出来的IO口配置 +#define SC92L7532_NIO_Init() {P0CON|=0xC0,P5CON|=0x3F;} //SC92L8532的未引出来的IO口配置 +#define SC92L7531_NIO_Init() {P0CON|=0xDC,P2CON|=0X8C,P5CON|=0x3F;} //SC92L8531的未引出来的IO口配置 +#endif diff --git a/CFG/SC92F8363B/Keil_Mould/FWLib/SC92F_Lib/inc/SC92L853x_C.H b/CFG/SC92F8363B/Keil_Mould/FWLib/SC92F_Lib/inc/SC92L853x_C.H new file mode 100644 index 0000000..857cfa5 --- /dev/null +++ b/CFG/SC92F8363B/Keil_Mould/FWLib/SC92F_Lib/inc/SC92L853x_C.H @@ -0,0 +1,277 @@ +/*-------------------------------------------------------------------------- +SC92L853x_C.H + +C Header file for SC92L853x microcontroller. +Copyright (c) 2022 Shenzhen SinOne Microelectronics Co., Ltd. +All rights reserved. +深圳市赛元微电子有限公司 +版本号: V0.1 +日期: 2022.01.18 +--------------------------------------------------------------------------*/ +#ifndef _SC92L853x_C_H_ +#define _SC92L853x_C_H_ + +///* ------------------- 字节寄存器-------------------- */ +/*CPU*/ +sfr SP = 0X81; //堆栈指针 +sfr DPL = 0X82; //DPTR数据指针低位 +sfr DPH = 0X83; //DPTR数据指针高位 +sfr PSW = 0XD0; //程序状态字寄存器 +sfr ACC = 0XE0; //累加器A +sfr EXA0 = 0XE9; //扩展累加器0 +sfr EXA1 = 0XEA; //扩展累加器1 +sfr EXA2 = 0XEB; //扩展累加器2 +sfr EXA3 = 0XEC; //扩展累加器3 +sfr EXBL = 0XED; //扩展B寄存器0 +sfr EXBH = 0XEE; //扩展B寄存器1 +sfr B = 0XF0; //B寄存器 + +/*SRAM*/ +sfr EXADH = 0XF7; //外部SRAM操作地址高位 + +/*system*/ +sfr PCON = 0X87; //电源管理控制寄存器 + +/*Interrupt*/ +sfr IE = 0XA8; //中断控制寄存器 +sfr IE1 = 0XA9; //中断控制寄存器1 +sfr IE2 = 0XAA; //中断使能寄存器2 +sfr IP = 0XB8; //中断优先权控制寄存器 +sfr IP1 = 0XB9; //中断优先级控制寄存器1 +sfr IP2 = 0XBA; //中断优先级控制寄存器2 + +/*PORT*/ +sfr P0 = 0X80; //P0口数据寄存器 +sfr P1 = 0X90; //P1口数据寄存器 +sfr P1CON = 0X91; //P1口输入/输出控制寄存器 +sfr P1PH = 0X92; //P1口上拉电阻控制寄存器 +sfr P1VO = 0X93; //P1口显示驱动输出寄存器 +sfr P0VO = 0X94; //P0口LCD电压输出寄存器 +sfr DDRCON = 0X95; //显示驱动控制寄存器 +sfr IOHCON0 = 0X96; //IOH设置寄存器0 +sfr IOHCON1 = 0X97; //IOH设置寄存器1 +sfr P0CON = 0X9A; //P0口输入/输出控制寄存器 +sfr P0PH = 0X9B; //P0口上拉电阻控制寄存器 +sfr P2 = 0XA0; //P2口数据寄存器 +sfr P2CON = 0XA1; //P2口输入/输出控制寄存器 +sfr P2PH = 0XA2; //P2口上拉电阻控制寄存器 +sfr P2VO = 0XA3; //P2口显示驱动输出寄存器 +sfr P5 = 0XD8; //P5口数据寄存器 +sfr P5CON = 0XD9; //P5口输入/输出控制寄存器 +sfr P5PH = 0XDA; //P5口上拉电阻控制寄存器 +sfr P5VO = 0XDB; //P5口显示驱动输出寄存器 + + +/*TIMER*/ +sfr TCON = 0X88; //定时器控制寄存器 +sfr TMOD = 0X89; //定时器工作模式寄存器 +sfr TL0 = 0X8A; //定时器0低8位 +sfr TL1 = 0X8B; //定时器1低8位 +sfr TH0 = 0X8C; //定时器0高8位 +sfr TH1 = 0X8D; //定时器1高8位 +sfr TMCON = 0X8E; //定时器频率控制寄存器 +sfr TXCON = 0XC8; //定时器2/3/4控制寄存器 +sfr TXMOD = 0XC9; //定时器2/3/4工作模式寄存器 +sfr RCAPXL = 0XCA; //定时器2/3/4重载/捕捉低8位 +sfr RCAPXH = 0XCB; //定时器2/3/4重载/捕捉高8位 +sfr TLX = 0XCC; //定时器2/3/4低8位 +sfr THX = 0XCD; //定时器2/3/4高8位 +sfr TXINX = 0XCE; //定时器控制寄存器指针 + +/*ADC*/ +sfr ADCCFG0 = 0XAB; //ADC设置寄存器0 +sfr ADCCFG1 = 0XAC; //ADC设置寄存器1 +sfr ADCCON = 0XAD; //ADC控制寄存器 +sfr ADCVL = 0XAE; //ADC结果寄存器 +sfr ADCVH = 0XAF; //ADC结果寄存器 +sfr ADCCFG2 = 0XB5; //ADC设置寄存器2 + +/*PWM*/ +sfr PWMCFG = 0XD1; //PWM设置寄存器 +sfr PWMCON0 = 0XD2; //PWM控制寄存器0 +sfr PWMCON1 = 0XD3; //PWM控制寄存器1 +sfr PWMPDL = 0XD4; //PWM周期寄存器低8位 +sfr PWMPDH = 0XD5; //PWM周期寄存器高8位 +sfr PWMDFR = 0XD6; //PWM死区设置寄存器 +sfr PWMFLT = 0XD7; //PWM故障检测设置寄存器 + +/*LPD*/ +sfr LPDCFG = 0XB7; //LPD控制器 + +/*WatchDog*/ +sfr WDTCON = 0XCF; //WDT控制寄存器 + +/*BTM*/ +sfr BTMCON = 0XFB; //低频定时器控制寄存器 + +/*INT*/ +sfr INT0F = 0XB4; //INT0 下降沿中断控制寄存器 +sfr INT0R = 0XBB; //INT0 上降沿中断控制寄存器 +sfr INT1F = 0XBC; //INT1 下降沿中断控制寄存器 +sfr INT1R = 0XBD; //INT1 上降沿中断控制寄存器 +sfr INT2F = 0XBE; //INT2 下降沿中断控制寄存器 +sfr INT2R = 0XBF; //INT2 上降沿中断控制寄存器 + +/*IAP */ +sfr IAPKEY = 0XF1; //IAP保护寄存器 +sfr IAPADL = 0XF2; //IAP写入地址低位寄存器 +sfr IAPADH = 0XF3; //IAP写入地址高位寄存器 +sfr IAPADE = 0XF4; //IAP写入扩展地址寄存器 +sfr IAPDAT = 0XF5; //IAP数据寄存器 +sfr IAPCTL = 0XF6; //IAP控制寄存器 + +/*uart0*/ +sfr OTCON = 0X8F; //输出控制寄存器 +sfr SCON = 0X98; //串口控制寄存器 +sfr SBUF = 0X99; //串口数据缓存寄存器 + +/*三合一*/ +sfr US0CON0 = 0X9C; //USCI0控制寄存器0 +sfr US0CON1 = 0X9D; //USCI0控制寄存器1 +sfr US0CON2 = 0X9E; //USCI0控制寄存器2 +sfr US0CON3 = 0X9F; //USCI0控制寄存器3 +sfr US1CON0 = 0XA4; //USCI1控制寄存器0 +sfr US1CON1 = 0XA5; //USCI1控制寄存器1 +sfr US1CON2 = 0XA6; //USCI1控制寄存器2 +sfr US1CON3 = 0XA7; //USCI1控制寄存器3 +sfr US2CON0 = 0XC4; //USCI2控制寄存器0 +sfr US2CON1 = 0XC5; //USCI2控制寄存器1 +sfr US2CON2 = 0XC6; //USCI2控制寄存器2 +sfr US2CON3 = 0XC7; //USCI2控制寄存器3 + +/*OPTION*/ +sfr OPINX = 0XFE; //Option指针 +sfr OPREG = 0XFF; //Option寄存器 + +/*CRC*/ +sfr OPERCON = 0XEF; //运算控制寄存器 +sfr CRCINX = 0XFC; //CRC指针 +sfr CRCREG = 0XFD; //CRC寄存器 + + +///* ------------------- 位寄存器-------------------- */ +/*PSW*/ +sbit CY = PSW^7; //标志位 0:加法运算最高位无进位,或者减法运算最高位无借位时 1:加法运算最高位有进位,或者减法运算最高位有借位时 +sbit AC = PSW^6; //进位辅助标志位 0:无借位、进位 1:加法运算时在bit3位有进位,或减法运算在bit3位有借位时 +sbit F0 = PSW^5; //用户标志位 +sbit RS1 = PSW^4; //工作寄存器组选择位 +sbit RS0 = PSW^3; //工作寄存器组选择位 +sbit OV = PSW^2; //溢出标志位 +sbit F1 = PSW^1; //F1标志 +sbit P = PSW^0; //奇偶标志位 0:ACC中1的个数为偶数(包括0个) 1:ACC中1的个数为奇数 + +/*TXCON*/ +sbit TFX = TXCON^7; //定时器2/3/4溢出标志位 +sbit EXFX = TXCON^6; //TnEX(n=2/3/4)引脚外部事件输入(下降沿)被检测到的标志位 +sbit RCLKX = TXCON^5; //UART0接收时钟控制位 0: 定时器1产生接收波特率 1: 定时器2产生接收波特率 +sbit TCLKX = TXCON^4; //UART0发送时钟控制位 0: 定时器1产生发送波特率 1: 定时器2产生发送波特率 +sbit EXENX = TXCON^3; //T2EX引脚上的外部事件输入(下降沿)用作重载/捕获触发器允许/禁止控制 +sbit TRX = TXCON^2; //定时器2开始/停止控制位 0: 停止定时器2 1: 开始定时器2 +sbit TX = TXCON^1; //定时器2定时器/计数器方式选定位2 +sbit CP = TXCON^0; //捕获/重载方式选定位 + +/*IP*/ +sbit IPADC = IP^6; //ADC中断优先权选择 0:设定 ADC的中断优先权是 “低” 1:设定 ADC的中断优先权是 “高” +sbit IPT2 = IP^5; //Timer2中断优先权选择 0:设定 Timer 2的中断优先权是 “低” 1:设定 Timer 2的中断优先权是 “高” +sbit IPUART = IP^4; //UART中断优先权选择 0:设定 UART的中断优先权是 “低” 1:设定 UART的中断优先权是 “高” +sbit IPT1 = IP^3; //Timer1中断优先权选择 0:设定 Timer 1的中断优先权是 “低” 1:设定 Timer 1的中断优先权是 “高” +sbit IPINT1 = IP^2; //INT1计数器中断优先权选择 0:设定 INT1的中断优先权是 “低” 1:设定 INT1的中断优先权是 “高” +sbit IPT0 = IP^1; //Timer0中断优先权选择 0:设定 Timer 0的中断优先权是 “低” 1:设定 Timer 0的中断优先权是 “高” +sbit IPINT0 = IP^0; //INT0计数器中断优先权选择 0:设定 INT0的中断优先权为 “低” 1: INT0中断优先权为高 + +/*IE*/ +sbit EA = IE^7; //中断使能的总控制 0:关闭所有的中断 1:打开所有的中断 +sbit EADC = IE^6; //ADC中断使能控制 0:关闭ADC中断 1:打开ADC中断 +sbit ET2 = IE^5; //Timer2中断使能控制 0:关闭TIMER2中断 1:打开TIMER2中断 +sbit EUART = IE^4; //UART中断使能控制 0:关闭SIF中断 1:打开SIF中断 +sbit ET1 = IE^3; //Timer1中断使能控制 0:关闭TIMER1中断 1:打开TIMER1中断 +sbit EINT1 = IE^2; //外部中断1中断使能控制 0:关闭外部中断1中断 1:打开外部中断1中断 +sbit ET0 = IE^1; //Timer0中断使能控制 0:关闭TIMER0中断 1:打开TIMER0中断 +sbit EINT0 = IE^0; //外部中断0中断使能控制 0:关闭外部中断0中断 1:打开外部中断0中断 + +/*TCON*/ +sbit TF1 = TCON^7; //T1溢出中断请求标志位 T1产生溢出,发生中断时,硬件将TF1置为“1”,申请中断,CPU响应时,硬件清“0”。 +sbit TR1 = TCON^6; //定时器T1的运行控制位 0:Timer1禁止计数 1:Timer1开始计数 +sbit TF0 = TCON^5; //T0溢出中断请求标志位 T0产生溢出,发生中断时,硬件将TF0置为“1”,申请中断,CPU响应时,硬件清“0”。 +sbit TR0 = TCON^4; //定时器T0的运行控制位 0:Timer0禁止计数 1:Timer0开始计数 + + +/*SCON*/ +sbit SM0 = SCON^7; //串行通信模式控制位:与SM1配合使用 00: 模式0,8位半双工同步通信模式 01: 模式1,10位全双工异步通信 11: 模式3,11位全双工异步通信 +sbit SM1 = SCON^6; //串行通信模式控制位 +sbit SM2 = SCON^5; //串行通信模式控制位2,此控制位只对模式3有效 0:每收到一个完整数据帧就置位RI产生中断请求 1:收到一个完整的数据帧时,只有当RB8=1时才会置位RI产生中断请求 +sbit REN = SCON^4; //接收允许控制位 0:不允许接受数据 1:允许接受数据 +sbit TB8 = SCON^3; //只对模式3有效,为发送数据的第9位 +sbit RB8 = SCON^2; //只对模式3有效,为接收数据的第9位 +sbit TI = SCON^1; //发送中断标志位 +sbit RI = SCON^0; //接收中断标志位 + + +/******************* P0 *********************** +*SC92L8535封装未引出的管脚:无 +*SC92L8533封装未引出的管脚:无 +*SC92L8532封装未引出的管脚:P06/P07 +*SC92L8531封装未引出的管脚:P02/P03/P04/P06/P07 +***********************************************/ +sbit P07 = P0^7; +sbit P06 = P0^6; +sbit P05 = P0^5; +sbit P04 = P0^4; +sbit P03 = P0^3; +sbit P02 = P0^2; +sbit P01 = P0^1; +sbit P00 = P0^0; + +/******************* P1 *********************** +*SC92L8535封装未引出的管脚:无 +*SC92L8533封装未引出的管脚:无 +*SC92L8532封装未引出的管脚:无 +*SC92L8531封装未引出的管脚:无 +***********************************************/ +sbit P17 = P1^7; +sbit P16 = P1^6; +sbit P15 = P1^5; +sbit P14 = P1^4; +sbit P13 = P1^3; +sbit P12 = P1^2; +sbit P11 = P1^1; +sbit P10 = P1^0; + +/******************* P2 *********************** +*SC92L8535封装未引出的管脚:无 +*SC92L8533封装未引出的管脚:无 +*SC92L8532封装未引出的管脚:无 +*SC92L8531封装未引出的管脚:P22/P23/P27 +***********************************************/ +sbit P27 = P2^7; +sbit P26 = P2^6; +sbit P25 = P2^5; +sbit P24 = P2^4; +sbit P23 = P2^3; +sbit P22 = P2^2; +sbit P21 = P2^1; +sbit P20 = P2^0; + + +/******************* P5 *********************** +*SC92L8535封装未引出的管脚:无 +*SC92L8533封装未引出的管脚:P52/P53/P54/P55 +*SC92L8532封装未引出的管脚:P5 +*SC92L8531封装未引出的管脚:P5 +***********************************************/ +sbit P55 = P5^5; +sbit P54 = P5^4; +sbit P53 = P5^3; +sbit P52 = P5^2; +sbit P51 = P5^1; +sbit P50 = P5^0; + +/**************************************************************************** +*注意:封装未引出的管脚,需设置为强推挽输出模式 +*IC选型:请根据所使用的IC型号,在初始化完IO口后,调用相对应的未引出管脚的IO口配置; +*如若选SC92L8535,则不用调用宏定义。 +*****************************************************************************/ +#define SC92L8533_NIO_Init() {P5CON|=0x3C;} //SC92L8533的未引出来的IO口配置 +#define SC92L8532_NIO_Init() {P0CON|=0xC0,P5CON|=0x3F;} //SC92L8532的未引出来的IO口配置 +#define SC92L8531_NIO_Init() {P0CON|=0xDC,P2CON|=0X8C,P5CON|=0x3F;} //SC92L8531的未引出来的IO口配置 +#endif diff --git a/CFG/SC92F8363B/Keil_Mould/FWLib/SC92F_Lib/inc/SC92f73Ax_C.H b/CFG/SC92F8363B/Keil_Mould/FWLib/SC92F_Lib/inc/SC92f73Ax_C.H new file mode 100644 index 0000000..724dc4a --- /dev/null +++ b/CFG/SC92F8363B/Keil_Mould/FWLib/SC92F_Lib/inc/SC92f73Ax_C.H @@ -0,0 +1,252 @@ + /*-------------------------------------------------------------------------- +SC92F73Ax_C.H + +C Header file for SC92F73Ax microcontroller. +Copyright (c) 2019 Shenzhen SinOne Chip Electronic CO., Ltd. +All rights reserved. +深圳市赛元微电子有限公司 +版本号: V1.0 +日期: 2019.06.17 +--------------------------------------------------------------------------*/ +#ifndef _SC92F73Ax_H_ +#define _SC92F73Ax_H_ + +/* ------------------- 字节寄存器-------------------- */ +///*CPU*/ +sfr ACC = 0xE0; //累加器A +sfr B = 0xF0; //通用寄存器B +sfr PSW = 0xD0; //程序状态字 +sfr DPH = 0x83; //数据指针高8位 +sfr DPL = 0x82; //数据指针低8位 +sfr SP = 0x81; //堆栈指针 + + +/*system*/ +sfr PCON = 0x87; //电源管理控制寄存器 + +/*interrupt*/ +sfr IP1 = 0XB9; //中断优先级控制寄存器1 +sfr IP = 0xB8; //中断优先权控制寄存器 +sfr IE = 0xA8; //中断控制寄存器 +sfr IE1 = 0XA9; //中断控制寄存器1 + +/*PORT*/ +sfr P5PH = 0xDA; //P5口模式控制寄存器 +sfr P5CON = 0xD9; //P5口模式控制寄存器 +sfr P5 = 0xD8; //P5口数据寄存器 +sfr P2PH = 0xA2; //P2口模式控制寄存器 +sfr P2CON = 0xA1; //P2口模式控制寄存器 +sfr P2 = 0xA0; //P2口数据寄存器 +sfr P1PH = 0x92; //P1口模式控制寄存器 +sfr P1CON = 0x91; //P1口模式控制寄存器 +sfr P1 = 0x90; //P1口数据寄存器 +sfr P0PH = 0x9B; //P0口模式控制寄存器 +sfr P0CON = 0x9A; //P0口模式控制寄存器 +sfr P0 = 0x80; //P0口数据寄存器 +sfr IOHCON = 0x97; //IOH设置寄存器 + +/*TIMER*/ +sfr TMCON = 0x8E; //定时器频率控制寄存器 +sfr TH1 = 0x8D; //定时器1高8位 +sfr TH0 = 0x8C; //定时器0高8位 +sfr TL1 = 0x8B; //定时器1低8位 +sfr TL0 = 0x8A; //定时器0低8位 +sfr TMOD = 0x89; //定时器工作模式寄存器 +sfr TCON = 0x88; //定时器控制寄存器 +sfr T2CON = 0xC8; //定时器2控制寄存器 +sfr T2MOD = 0xC9; //定时器2工作模式寄存器 +sfr RCAP2L = 0xCA; //定时器2重载/捕捉低8位 +sfr RCAP2H = 0xCB; //定时器2重载/捕捉高8位 +sfr TL2 = 0xCC; //定时器2低8位 +sfr TH2 = 0xCD; //定时器2高8位 + +/*ADC*/ +sfr ADCCFG0 = 0xAB; //ADC功能配置寄存器0 +sfr ADCCFG1 = 0xAC; //ADC功能配置寄存器1 +sfr ADCCFG2 = 0XAA; //ADC功能配置寄存器2 +sfr ADCCON = 0XAD; //ADC控制寄存器 +sfr ADCVL = 0xAE; //ADC 结果寄存器 +sfr ADCVH = 0xAF; //ADC 结果寄存器 + +/*PWM*/ +sfr PWMCFG = 0xD1; //PWM设置寄存器 +sfr PWMCON = 0xD2; //PWM控制寄存器 +sfr PWMPRD = 0xD3; //PWM周期设置寄存器 +sfr PWMDTYA = 0xD4; //PWM占空比设置寄存器A +sfr PWMDTY0 = 0xD5; //PWM0设置寄存器 +sfr PWMDTY1 = 0xD6; //PWM1设置寄存器 +sfr PWMDTY2 = 0xD7; //PWM2设置寄存器 +sfr PWMDTYB = 0xDC; //PWM占空比设置寄存器B +sfr PWMDTY3 = 0xDD; //PWM3设置寄存器 +sfr PWMDTY4 = 0xDE; //PWM4设置寄存器 +sfr PWMDTY5 = 0xDF; //PWM5设置寄存器 + +///*WatchDog*/ +sfr BTMCON = 0XCE; //低频定时器控制寄存器 +sfr WDTCON = 0xCF; //WDT控制寄存器 + +/*LCD*/ +sfr OTCON = 0X8F; //输出控制寄存器 +sfr P0VO = 0X9C; //P0 LCD Bais 输出寄存器 + +/*INT*/ +sfr INT0F = 0XBA; //INT0 下降沿中断控制寄存器 +sfr INT0R = 0XBB; //INT0 上降沿中断控制寄存器 +sfr INT1F = 0XBC; //INT1 下降沿中断控制寄存器 +sfr INT1R = 0XBD; //INT1 上降沿中断控制寄存器 +sfr INT2F = 0XC6; //INT2 下降沿中断控制寄存器 +sfr INT2R = 0XC7; //INT2 上降沿中断控制寄存器 + +/*IAP */ +sfr IAPCTL = 0xF6; //IAP控制寄存器 +sfr IAPDAT = 0xF5; //IAP数据寄存器 +sfr IAPADE = 0xF4; //IAP扩展地址寄存器 +sfr IAPADH = 0xF3; //IAP写入地址高位寄存器 +sfr IAPADL = 0xF2; //IAP写入地址低8位寄存器 +sfr IAPKEY = 0xF1; //IAP保护寄存器 + +/*uart*/ +sfr SCON = 0x98; //串口控制寄存器 +sfr SBUF = 0x99; //串口数据缓存寄存器 + +/*三合一*/ +sfr SSCON0 = 0X9D; //SPI控制寄存器0 +sfr SSCON1 = 0X9E; //SPI控制寄存器1 +sfr SSCON2 = 0X95; //SPI控制寄存器2 +sfr SSDAT = 0X9F; //SPI数据寄存器 + +sfr OPINX = 0XFE; //Option 指针 +sfr OPREG = 0XFF; //Option寄存器 +sfr EXADH = 0XF7; //外部SRAM操作地址高位 + +/*Check Sum*/ +sfr CHKSUML = 0XFC; //Check Sum结果寄存器低位 +sfr CHKSUMH = 0XFD; //Check Sum结果寄存器高位 + +/*乘除法*/ +sfr EXA0 = 0xE9; //扩展累加器0 +sfr EXA1 = 0xEA; //扩展累加器1 +sfr EXA2 = 0xEB; //扩展累加器2 +sfr EXA3 = 0xEC; //扩展累加器3 +sfr EXBL = 0xED; //扩展B寄存器0 +sfr EXBH = 0xEE; //扩展B寄存器1 +sfr OPERCON = 0xEF; //运算控制寄存器 + +/* ------------------- 位寄存器-------------------- */ +/*PSW*/ +sbit CY = PSW^7; //标志位 0:加法运算最高位无进位,或者减法运算最高位无借位时 1:加法运算最高位有进位,或者减法运算最高位有借位时 +sbit AC = PSW^6; //进位辅助标志位 0:无借位、进位 1:加法运算时在bit3位有进位,或减法运算在bit3位有借位时 +sbit F0 = PSW^5; //用户标志位 +sbit RS1 = PSW^4; //工作寄存器组选择位 +sbit RS0 = PSW^3; //工作寄存器组选择位 +sbit OV = PSW^2; //溢出标志位 +sbit F1 = PSW^1; //F1标志 +sbit P = PSW^0; //奇偶标志位 0:ACC中1的个数为偶数(包括0个) 1:ACC中1的个数为奇数 + +/*T2CON*/ +sbit TF2 = T2CON^7; +sbit EXF2 = T2CON^6; +sbit RCLK = T2CON^5; +sbit TCLK = T2CON^4; +sbit EXEN2 = T2CON^3; +sbit TR2 = T2CON^2; +sbit T2 = T2CON^1; +sbit CP = T2CON^0; + + +/*IP*/ +sbit IPADC = IP^6; //ADC中断优先控制位 0:设定 ADC的中断优先权是 “低” 1:设定 ADC的中断优先权是 “高” +sbit IPT2 = IP^5; //Timer2中断优先控制位 0:设定 Timer2的中断优先权是 “低” 1:设定Timer2的中断优先权是 “高” +sbit IPUART = IP^4; //UART中断优先控制位 0:设定UART的中断优先权是 “低” 1:设定UART的中断优先权是 “高” +sbit IPT1 = IP^3; //Timer1中断优先控制位 0:设定 Timer 1的中断优先权是 “低” 1:设定 Timer 1的中断优先权是 “高” +sbit IPINT1 = IP^2; //INT1中断优先控制位 0:设定INT1中断优先权是 “低” 1:设定INT1的中断优先权是 “高” +sbit IPT0 = IP^1; //Timer0中断优先控制位 0:设定 Timer 0的中断优先权是 “低” 1:设定 Timer 0的中断优先权是 “高” +sbit IPINT0 = IP^0; //INT0中断优先控制位 0:设定INT0中断优先权是 “低” 1:设定INT0的中断优先权是 “高” + +/*IE*/ +sbit EA = IE^7; //中断使能的总控制 0:关闭所有的中断 1:打开所有的中断 +sbit EADC = IE^6; //ADC中断使能控制 0:关闭ADC中断 1:打开ADC中断 +sbit ET2 = IE^5; //Timer2中断使能控制 0:关闭Timer2中断 1:打开Timer2中断 +sbit EUART = IE^4; //UART中断使能控制 0:关闭UART中断 1:打开UART中断 +sbit ET1 = IE^3; //Timer1中断使能控制 0:关闭TIMER1中断 1:打开TIMER1中断 +sbit EINT1 = IE^2; //INT1中断使能控制 0:关闭INT1中断 1:打开INT1中断 +sbit ET0 = IE^1; //Timer0中断使能控制 0:关闭TIMER0中断 1:打开TIMER0中断 +sbit EINT0 = IE^0; //INT0中断使能控制 0:关闭INT0中断 1:打开INT0中断 + +/*TCON*/ +sbit TF1 = TCON^7; //T1溢出中断请求标志位 T1产生溢出,发生中断时,硬件将TF1置为“1”,申请中断,CPU响应时,硬件清“0”。 +sbit TR1 = TCON^6; //定时器T1的运行控制位 0:Timer1禁止计数 1:Timer1开始计数 +sbit TF0 = TCON^5; //T0溢出中断请求标志位 T0产生溢出,发生中断时,硬件将TF0置为“1”,申请中断,CPU响应时,硬件清“0”。 +sbit TR0 = TCON^4; //定时器T0的运行控制位 0:Timer0禁止计数 1:Timer0开始计数 +sbit BITIE1 = TCON^3; //INT1溢出中断请求标志 0:CPU响应后,硬件清零 1:中断产生 +sbit BITIE0 = TCON^1; //INT0溢出中断请求标志 0:CPU响应后,硬件清零 1:中断产生 + +/*SCON*/ +sbit SM0 = SCON^7; +sbit SM1 = SCON^6; +sbit SM2 = SCON^5; +sbit REN = SCON^4; +sbit TB8 = SCON^3; +sbit RB8 = SCON^2; +sbit TI = SCON^1; +sbit RI = SCON^0; + +/******************* P0 ****************** +*SC92F73A3封装未引出的管脚:无 +*SC92F73A2封装未引出的管脚:P06/P07 +*SC92F73A1封装未引出的管脚:P02/P03/P04/P06/P07 +******************************************/ +sbit P07 = P0^7; +sbit P06 = P0^6; +sbit P05 = P0^5; +sbit P04 = P0^4; +sbit P03 = P0^3; +sbit P02 = P0^2; +sbit P01 = P0^1; +sbit P00 = P0^0; + +/******************* P1 ****************** +*SC92F73A3封装未引出的管脚:无 +*SC92F73A2封装未引出的管脚:P16/P17 +*SC92F73A1封装未引出的管脚:P16/P17 +******************************************/ +sbit P17 = P1^7; +sbit P16 = P1^6; +sbit P15 = P1^5; +sbit P14 = P1^4; +sbit P13 = P1^3; +sbit P12 = P1^2; +sbit P11 = P1^1; +sbit P10 = P1^0; + +/******************* P2 ****************** +*SC92F73A3封装未引出的管脚:无 +*SC92F73A2封装未引出的管脚:P22/P23 +*SC92F73A1封装未引出的管脚:P22/P23/P27 +******************************************/ +sbit P27 = P2^7; +sbit P26 = P2^6; +sbit P25 = P2^5; +sbit P24 = P2^4; +sbit P23 = P2^3; +sbit P22 = P2^2; +sbit P21 = P2^1; +sbit P20 = P2^0; + +/******************* P5 ****************** +*SC92F73A3封装未引出的管脚:无 +*SC92F73A2封装未引出的管脚:P50/P51 +*SC92F73A1封装未引出的管脚:P50/P51 +******************************************/ +sbit P51 = P5^1; +sbit P50 = P5^0; + +/**************************************************************************** +*注意:封装未引出的管脚,需设置为强推挽输出模式 +*IC选型:请根据所使用的IC型号,在初始化完IO口后,调用相对应的未引出管脚的IO口配置; +*如若选择SC92F73A3,则不用调用宏定义。 +*****************************************************************************/ +#define SC92F73A2_NIO_Init() {P0CON|=0xC0,P1CON|=0xC0,P2CON|=0x0C,P5CON|=0x03;} //SC92F73A2的未引出来的IO口配置 +#define SC92F73A1_NIO_Init() {P0CON|=0xDC,P1CON|=0xC0,P2CON|=0x8C,P5CON|=0x03;} //SC92F73A1的未引出来的IO口配置 + +#endif \ No newline at end of file diff --git a/CFG/SC92F8363B/Keil_Mould/FWLib/SC92F_Lib/inc/SC92f74Ax_C.H b/CFG/SC92F8363B/Keil_Mould/FWLib/SC92F_Lib/inc/SC92f74Ax_C.H new file mode 100644 index 0000000..03a091e --- /dev/null +++ b/CFG/SC92F8363B/Keil_Mould/FWLib/SC92F_Lib/inc/SC92f74Ax_C.H @@ -0,0 +1,253 @@ + /*-------------------------------------------------------------------------- +SC92F74Ax_C.H + +C Header file for SC92F74Ax microcontroller. +Copyright (c) 2019 Shenzhen SinOne Chip Electronic CO., Ltd. +All rights reserved. +深圳市赛元微电子有限公司 +版本号: V1.0 +日期: 2019.06.17 +--------------------------------------------------------------------------*/ +#ifndef _SC92F74Ax_H_ +#define _SC92F74Ax_H_ + +/* ------------------- 字节寄存器-------------------- */ +///*CPU*/ +sfr ACC = 0xE0; //累加器A +sfr B = 0xF0; //通用寄存器B +sfr PSW = 0xD0; //程序状态字 +sfr DPH = 0x83; //数据指针高8位 +sfr DPL = 0x82; //数据指针低8位 +sfr SP = 0x81; //堆栈指针 + + +/*system*/ +sfr PCON = 0x87; //电源管理控制寄存器 + +/*interrupt*/ +sfr IP1 = 0XB9; //中断优先级控制寄存器1 +sfr IP = 0xB8; //中断优先权控制寄存器 +sfr IE = 0xA8; //中断控制寄存器 +sfr IE1 = 0XA9; //中断控制寄存器1 + +/*PORT*/ +sfr P5PH = 0xDA; //P5口模式控制寄存器 +sfr P5CON = 0xD9; //P5口模式控制寄存器 +sfr P5 = 0xD8; //P5口数据寄存器 +sfr P2PH = 0xA2; //P2口模式控制寄存器 +sfr P2CON = 0xA1; //P2口模式控制寄存器 +sfr P2 = 0xA0; //P2口数据寄存器 +sfr P1PH = 0x92; //P1口模式控制寄存器 +sfr P1CON = 0x91; //P1口模式控制寄存器 +sfr P1 = 0x90; //P1口数据寄存器 +sfr P0PH = 0x9B; //P0口模式控制寄存器 +sfr P0CON = 0x9A; //P0口模式控制寄存器 +sfr P0 = 0x80; //P0口数据寄存器 +sfr IOHCON = 0x97; //IOH设置寄存器 + +/*TIMER*/ +sfr TMCON = 0x8E; //定时器频率控制寄存器 +sfr TH1 = 0x8D; //定时器1高8位 +sfr TH0 = 0x8C; //定时器0高8位 +sfr TL1 = 0x8B; //定时器1低8位 +sfr TL0 = 0x8A; //定时器0低8位 +sfr TMOD = 0x89; //定时器工作模式寄存器 +sfr TCON = 0x88; //定时器控制寄存器 +sfr T2CON = 0xC8; //定时器2控制寄存器 +sfr T2MOD = 0xC9; //定时器2工作模式寄存器 +sfr RCAP2L = 0xCA; //定时器2重载/捕捉低8位 +sfr RCAP2H = 0xCB; //定时器2重载/捕捉高8位 +sfr TL2 = 0xCC; //定时器2低8位 +sfr TH2 = 0xCD; //定时器2高8位 + + +/*ADC*/ +sfr ADCCFG0 = 0xAB; //ADC功能配置寄存器0 +sfr ADCCFG1 = 0xAC; //ADC功能配置寄存器1 +sfr ADCCFG2 = 0XAA; //ADC功能配置寄存器2 +sfr ADCCON = 0XAD; //ADC控制寄存器 +sfr ADCVL = 0xAE; //ADC 结果寄存器 +sfr ADCVH = 0xAF; //ADC 结果寄存器 + +/*PWM*/ +sfr PWMCFG = 0xD1; //PWM设置寄存器 +sfr PWMCON = 0xD2; //PWM控制寄存器 +sfr PWMPRD = 0xD3; //PWM周期设置寄存器 +sfr PWMDTYA = 0xD4; //PWM占空比设置寄存器A +sfr PWMDTY0 = 0xD5; //PWM0设置寄存器 +sfr PWMDTY1 = 0xD6; //PWM1设置寄存器 +sfr PWMDTY2 = 0xD7; //PWM2设置寄存器 +sfr PWMDTYB = 0xDC; //PWM占空比设置寄存器B +sfr PWMDTY3 = 0xDD; //PWM3设置寄存器 +sfr PWMDTY4 = 0xDE; //PWM4设置寄存器 +sfr PWMDTY5 = 0xDF; //PWM5设置寄存器 + +///*WatchDog*/ +sfr BTMCON = 0XCE; //低频定时器控制寄存器 +sfr WDTCON = 0xCF; //WDT控制寄存器 + +/*LCD*/ +sfr OTCON = 0X8F; //输出控制寄存器 +sfr P0VO = 0X9C; //P0 LCD Bais 输出寄存器 + +/*INT*/ +sfr INT0F = 0XBA; //INT0 下降沿中断控制寄存器 +sfr INT0R = 0XBB; //INT0 上降沿中断控制寄存器 +sfr INT1F = 0XBC; //INT1 下降沿中断控制寄存器 +sfr INT1R = 0XBD; //INT1 上降沿中断控制寄存器 +sfr INT2F = 0XC6; //INT2 下降沿中断控制寄存器 +sfr INT2R = 0XC7; //INT2 上降沿中断控制寄存器 + +/*IAP */ +sfr IAPCTL = 0xF6; //IAP控制寄存器 +sfr IAPDAT = 0xF5; //IAP数据寄存器 +sfr IAPADE = 0xF4; //IAP扩展地址寄存器 +sfr IAPADH = 0xF3; //IAP写入地址高位寄存器 +sfr IAPADL = 0xF2; //IAP写入地址低8位寄存器 +sfr IAPKEY = 0xF1; //IAP保护寄存器 + +/*uart*/ +sfr SCON = 0x98; //串口控制寄存器 +sfr SBUF = 0x99; //串口数据缓存寄存器 + +/*三合一*/ +sfr SSCON0 = 0X9D; //SPI控制寄存器0 +sfr SSCON1 = 0X9E; //SPI控制寄存器1 +sfr SSCON2 = 0X95; //SPI控制寄存器2 +sfr SSDAT = 0X9F; //SPI数据寄存器 + +sfr OPINX = 0XFE; //Option 指针 +sfr OPREG = 0XFF; //Option寄存器 +sfr EXADH = 0XF7; //外部SRAM操作地址高位 + +/*Check Sum*/ +sfr CHKSUML = 0XFC; //Check Sum结果寄存器低位 +sfr CHKSUMH = 0XFD; //Check Sum结果寄存器高位 + +/*乘除法*/ +sfr EXA0 = 0xE9; //扩展累加器0 +sfr EXA1 = 0xEA; //扩展累加器1 +sfr EXA2 = 0xEB; //扩展累加器2 +sfr EXA3 = 0xEC; //扩展累加器3 +sfr EXBL = 0xED; //扩展B寄存器0 +sfr EXBH = 0xEE; //扩展B寄存器1 +sfr OPERCON = 0xEF; //运算控制寄存器 + +/* ------------------- 位寄存器-------------------- */ +/*PSW*/ +sbit CY = PSW^7; //标志位 0:加法运算最高位无进位,或者减法运算最高位无借位时 1:加法运算最高位有进位,或者减法运算最高位有借位时 +sbit AC = PSW^6; //进位辅助标志位 0:无借位、进位 1:加法运算时在bit3位有进位,或减法运算在bit3位有借位时 +sbit F0 = PSW^5; //用户标志位 +sbit RS1 = PSW^4; //工作寄存器组选择位 +sbit RS0 = PSW^3; //工作寄存器组选择位 +sbit OV = PSW^2; //溢出标志位 +sbit F1 = PSW^1; //F1标志 +sbit P = PSW^0; //奇偶标志位 0:ACC中1的个数为偶数(包括0个) 1:ACC中1的个数为奇数 + +/*T2CON*/ +sbit TF2 = T2CON^7; +sbit EXF2 = T2CON^6; +sbit RCLK = T2CON^5; +sbit TCLK = T2CON^4; +sbit EXEN2 = T2CON^3; +sbit TR2 = T2CON^2; +sbit T2 = T2CON^1; +sbit CP = T2CON^0; + + +/*IP*/ +sbit IPADC = IP^6; //ADC中断优先控制位 0:设定 ADC的中断优先权是 “低” 1:设定 ADC的中断优先权是 “高” +sbit IPT2 = IP^5; //Timer2中断优先控制位 0:设定 Timer2的中断优先权是 “低” 1:设定Timer2的中断优先权是 “高” +sbit IPUART = IP^4; //UART中断优先控制位 0:设定UART的中断优先权是 “低” 1:设定UART的中断优先权是 “高” +sbit IPT1 = IP^3; //Timer1中断优先控制位 0:设定 Timer 1的中断优先权是 “低” 1:设定 Timer 1的中断优先权是 “高” +sbit IPINT1 = IP^2; //INT1中断优先控制位 0:设定INT1中断优先权是 “低” 1:设定INT1的中断优先权是 “高” +sbit IPT0 = IP^1; //Timer0中断优先控制位 0:设定 Timer 0的中断优先权是 “低” 1:设定 Timer 0的中断优先权是 “高” +sbit IPINT0 = IP^0; //INT0中断优先控制位 0:设定INT0中断优先权是 “低” 1:设定INT0的中断优先权是 “高” + +/*IE*/ +sbit EA = IE^7; //中断使能的总控制 0:关闭所有的中断 1:打开所有的中断 +sbit EADC = IE^6; //ADC中断使能控制 0:关闭ADC中断 1:打开ADC中断 +sbit ET2 = IE^5; //Timer2中断使能控制 0:关闭Timer2中断 1:打开Timer2中断 +sbit EUART = IE^4; //UART中断使能控制 0:关闭UART中断 1:打开UART中断 +sbit ET1 = IE^3; //Timer1中断使能控制 0:关闭TIMER1中断 1:打开TIMER1中断 +sbit EINT1 = IE^2; //INT1中断使能控制 0:关闭INT1中断 1:打开INT1中断 +sbit ET0 = IE^1; //Timer0中断使能控制 0:关闭TIMER0中断 1:打开TIMER0中断 +sbit EINT0 = IE^0; //INT0中断使能控制 0:关闭INT0中断 1:打开INT0中断 + +/*TCON*/ +sbit TF1 = TCON^7; //T1溢出中断请求标志位 T1产生溢出,发生中断时,硬件将TF1置为“1”,申请中断,CPU响应时,硬件清“0”。 +sbit TR1 = TCON^6; //定时器T1的运行控制位 0:Timer1禁止计数 1:Timer1开始计数 +sbit TF0 = TCON^5; //T0溢出中断请求标志位 T0产生溢出,发生中断时,硬件将TF0置为“1”,申请中断,CPU响应时,硬件清“0”。 +sbit TR0 = TCON^4; //定时器T0的运行控制位 0:Timer0禁止计数 1:Timer0开始计数 +sbit BITIE1 = TCON^3; //INT1溢出中断请求标志 0:CPU响应后,硬件清零 1:中断产生 +sbit BITIE0 = TCON^1; //INT0溢出中断请求标志 0:CPU响应后,硬件清零 1:中断产生 + +/*SCON*/ +sbit SM0 = SCON^7; +sbit SM1 = SCON^6; +sbit SM2 = SCON^5; +sbit REN = SCON^4; +sbit TB8 = SCON^3; +sbit RB8 = SCON^2; +sbit TI = SCON^1; +sbit RI = SCON^0; + +/******************* P0 ****************** +*SC92F74A3封装未引出的管脚:无 +*SC92F74A2封装未引出的管脚:P06/P07 +*SC92F74A1封装未引出的管脚:P02/P03/P04/P06/P07 +******************************************/ +sbit P07 = P0^7; +sbit P06 = P0^6; +sbit P05 = P0^5; +sbit P04 = P0^4; +sbit P03 = P0^3; +sbit P02 = P0^2; +sbit P01 = P0^1; +sbit P00 = P0^0; + +/******************* P1 ****************** +*SC92F74A3封装未引出的管脚:无 +*SC92F74A2封装未引出的管脚:P16/P17 +*SC92F74A1封装未引出的管脚:P16/P17 +******************************************/ +sbit P17 = P1^7; +sbit P16 = P1^6; +sbit P15 = P1^5; +sbit P14 = P1^4; +sbit P13 = P1^3; +sbit P12 = P1^2; +sbit P11 = P1^1; +sbit P10 = P1^0; + +/******************* P2 ****************** +*SC92F74A3封装未引出的管脚:无 +*SC92F74A2封装未引出的管脚:P22/P23 +*SC92F74A1封装未引出的管脚:P22/P23/P27 +******************************************/ +sbit P27 = P2^7; +sbit P26 = P2^6; +sbit P25 = P2^5; +sbit P24 = P2^4; +sbit P23 = P2^3; +sbit P22 = P2^2; +sbit P21 = P2^1; +sbit P20 = P2^0; + +/******************* P5 ****************** +*SC92F74A3封装未引出的管脚:无 +*SC92F74A2封装未引出的管脚:P50/P51 +*SC92F74A1封装未引出的管脚:P50/P51 +******************************************/ +sbit P51 = P5^1; +sbit P50 = P5^0; + +/**************************************************************************** +*注意:封装未引出的管脚,需设置为强推挽输出模式 +*IC选型:请根据所使用的IC型号,在初始化完IO口后,调用相对应的未引出管脚的IO口配置; +*如若选择SC92F74A3,则不用调用宏定义。 +*****************************************************************************/ +#define SC92F74A2_NIO_Init() {P0CON|=0xC0,P1CON|=0xC0,P2CON|=0x0C,P5CON|=0x03;} //SC92F74A2的未引出来的IO口配置 +#define SC92F74A1_NIO_Init() {P0CON|=0xDC,P1CON|=0xC0,P2CON|=0x8C,P5CON|=0x03;} //SC92F74A1的未引出来的IO口配置 + +#endif \ No newline at end of file diff --git a/CFG/SC92F8363B/Keil_Mould/FWLib/SC92F_Lib/inc/SC92f83Ax_C.H b/CFG/SC92F8363B/Keil_Mould/FWLib/SC92F_Lib/inc/SC92f83Ax_C.H new file mode 100644 index 0000000..04c9bc5 --- /dev/null +++ b/CFG/SC92F8363B/Keil_Mould/FWLib/SC92F_Lib/inc/SC92f83Ax_C.H @@ -0,0 +1,253 @@ + /*-------------------------------------------------------------------------- +SC92F83Ax_C.H + +C Header file for SC92F83Ax microcontroller. +Copyright (c) 2019 Shenzhen SinOne Chip Electronic CO., Ltd. +All rights reserved. +深圳市赛元微电子有限公司 +版本号: V1.0 +日期: 2019.06.17 +--------------------------------------------------------------------------*/ +#ifndef _SC92F83Ax_H_ +#define _SC92F83Ax_H_ + +/* ------------------- 字节寄存器-------------------- */ +///*CPU*/ +sfr ACC = 0xE0; //累加器A +sfr B = 0xF0; //通用寄存器B +sfr PSW = 0xD0; //程序状态字 +sfr DPH = 0x83; //数据指针高8位 +sfr DPL = 0x82; //数据指针低8位 +sfr SP = 0x81; //堆栈指针 + + +/*system*/ +sfr PCON = 0x87; //电源管理控制寄存器 + +/*interrupt*/ +sfr IP1 = 0XB9; //中断优先级控制寄存器1 +sfr IP = 0xB8; //中断优先权控制寄存器 +sfr IE = 0xA8; //中断控制寄存器 +sfr IE1 = 0XA9; //中断控制寄存器1 + +/*PORT*/ +sfr P5PH = 0xDA; //P5口模式控制寄存器 +sfr P5CON = 0xD9; //P5口模式控制寄存器 +sfr P5 = 0xD8; //P5口数据寄存器 +sfr P2PH = 0xA2; //P2口模式控制寄存器 +sfr P2CON = 0xA1; //P2口模式控制寄存器 +sfr P2 = 0xA0; //P2口数据寄存器 +sfr P1PH = 0x92; //P1口模式控制寄存器 +sfr P1CON = 0x91; //P1口模式控制寄存器 +sfr P1 = 0x90; //P1口数据寄存器 +sfr P0PH = 0x9B; //P0口模式控制寄存器 +sfr P0CON = 0x9A; //P0口模式控制寄存器 +sfr P0 = 0x80; //P0口数据寄存器 +sfr IOHCON = 0x97; //IOH设置寄存器 + +/*TIMER*/ +sfr TMCON = 0x8E; //定时器频率控制寄存器 +sfr TH1 = 0x8D; //定时器1高8位 +sfr TH0 = 0x8C; //定时器0高8位 +sfr TL1 = 0x8B; //定时器1低8位 +sfr TL0 = 0x8A; //定时器0低8位 +sfr TMOD = 0x89; //定时器工作模式寄存器 +sfr TCON = 0x88; //定时器控制寄存器 +sfr T2CON = 0xC8; //定时器2控制寄存器 +sfr T2MOD = 0xC9; //定时器2工作模式寄存器 +sfr RCAP2L = 0xCA; //定时器2重载/捕捉低8位 +sfr RCAP2H = 0xCB; //定时器2重载/捕捉高8位 +sfr TL2 = 0xCC; //定时器2低8位 +sfr TH2 = 0xCD; //定时器2高8位 + + +/*ADC*/ +sfr ADCCFG0 = 0xAB; //ADC功能配置寄存器0 +sfr ADCCFG1 = 0xAC; //ADC功能配置寄存器1 +sfr ADCCFG2 = 0XAA; //ADC功能配置寄存器2 +sfr ADCCON = 0XAD; //ADC控制寄存器 +sfr ADCVL = 0xAE; //ADC 结果寄存器 +sfr ADCVH = 0xAF; //ADC 结果寄存器 + +/*PWM*/ +sfr PWMCFG = 0xD1; //PWM设置寄存器 +sfr PWMCON = 0xD2; //PWM控制寄存器 +sfr PWMPRD = 0xD3; //PWM周期设置寄存器 +sfr PWMDTYA = 0xD4; //PWM占空比设置寄存器A +sfr PWMDTY0 = 0xD5; //PWM0设置寄存器 +sfr PWMDTY1 = 0xD6; //PWM1设置寄存器 +sfr PWMDTY2 = 0xD7; //PWM2设置寄存器 +sfr PWMDTYB = 0xDC; //PWM占空比设置寄存器B +sfr PWMDTY3 = 0xDD; //PWM3设置寄存器 +sfr PWMDTY4 = 0xDE; //PWM4设置寄存器 +sfr PWMDTY5 = 0xDF; //PWM5设置寄存器 + +///*WatchDog*/ +sfr BTMCON = 0XCE; //低频定时器控制寄存器 +sfr WDTCON = 0xCF; //WDT控制寄存器 + +/*LCD*/ +sfr OTCON = 0X8F; //输出控制寄存器 +sfr P0VO = 0X9C; //P0 LCD Bais 输出寄存器 + +/*INT*/ +sfr INT0F = 0XBA; //INT0 下降沿中断控制寄存器 +sfr INT0R = 0XBB; //INT0 上降沿中断控制寄存器 +sfr INT1F = 0XBC; //INT1 下降沿中断控制寄存器 +sfr INT1R = 0XBD; //INT1 上降沿中断控制寄存器 +sfr INT2F = 0XC6; //INT2 下降沿中断控制寄存器 +sfr INT2R = 0XC7; //INT2 上降沿中断控制寄存器 + +/*IAP */ +sfr IAPCTL = 0xF6; //IAP控制寄存器 +sfr IAPDAT = 0xF5; //IAP数据寄存器 +sfr IAPADE = 0xF4; //IAP扩展地址寄存器 +sfr IAPADH = 0xF3; //IAP写入地址高位寄存器 +sfr IAPADL = 0xF2; //IAP写入地址低8位寄存器 +sfr IAPKEY = 0xF1; //IAP保护寄存器 + +/*uart*/ +sfr SCON = 0x98; //串口控制寄存器 +sfr SBUF = 0x99; //串口数据缓存寄存器 + +/*三合一*/ +sfr SSCON0 = 0X9D; //SPI控制寄存器0 +sfr SSCON1 = 0X9E; //SPI控制寄存器1 +sfr SSCON2 = 0X95; //SPI控制寄存器2 +sfr SSDAT = 0X9F; //SPI数据寄存器 + +sfr OPINX = 0XFE; //Option 指针 +sfr OPREG = 0XFF; //Option寄存器 +sfr EXADH = 0XF7; //外部SRAM操作地址高位 + +/*Check Sum*/ +sfr CHKSUML = 0XFC; //Check Sum结果寄存器低位 +sfr CHKSUMH = 0XFD; //Check Sum结果寄存器高位 + +/*乘除法*/ +sfr EXA0 = 0xE9; //扩展累加器0 +sfr EXA1 = 0xEA; //扩展累加器1 +sfr EXA2 = 0xEB; //扩展累加器2 +sfr EXA3 = 0xEC; //扩展累加器3 +sfr EXBL = 0xED; //扩展B寄存器0 +sfr EXBH = 0xEE; //扩展B寄存器1 +sfr OPERCON = 0xEF; //运算控制寄存器 + +/* ------------------- 位寄存器-------------------- */ +/*PSW*/ +sbit CY = PSW^7; //标志位 0:加法运算最高位无进位,或者减法运算最高位无借位时 1:加法运算最高位有进位,或者减法运算最高位有借位时 +sbit AC = PSW^6; //进位辅助标志位 0:无借位、进位 1:加法运算时在bit3位有进位,或减法运算在bit3位有借位时 +sbit F0 = PSW^5; //用户标志位 +sbit RS1 = PSW^4; //工作寄存器组选择位 +sbit RS0 = PSW^3; //工作寄存器组选择位 +sbit OV = PSW^2; //溢出标志位 +sbit F1 = PSW^1; //F1标志 +sbit P = PSW^0; //奇偶标志位 0:ACC中1的个数为偶数(包括0个) 1:ACC中1的个数为奇数 + +/*T2CON*/ +sbit TF2 = T2CON^7; +sbit EXF2 = T2CON^6; +sbit RCLK = T2CON^5; +sbit TCLK = T2CON^4; +sbit EXEN2 = T2CON^3; +sbit TR2 = T2CON^2; +sbit T2 = T2CON^1; +sbit CP = T2CON^0; + + +/*IP*/ +sbit IPADC = IP^6; //ADC中断优先控制位 0:设定 ADC的中断优先权是 “低” 1:设定 ADC的中断优先权是 “高” +sbit IPT2 = IP^5; //Timer2中断优先控制位 0:设定 Timer2的中断优先权是 “低” 1:设定Timer2的中断优先权是 “高” +sbit IPUART = IP^4; //UART中断优先控制位 0:设定UART的中断优先权是 “低” 1:设定UART的中断优先权是 “高” +sbit IPT1 = IP^3; //Timer1中断优先控制位 0:设定 Timer 1的中断优先权是 “低” 1:设定 Timer 1的中断优先权是 “高” +sbit IPINT1 = IP^2; //INT1中断优先控制位 0:设定INT1中断优先权是 “低” 1:设定INT1的中断优先权是 “高” +sbit IPT0 = IP^1; //Timer0中断优先控制位 0:设定 Timer 0的中断优先权是 “低” 1:设定 Timer 0的中断优先权是 “高” +sbit IPINT0 = IP^0; //INT0中断优先控制位 0:设定INT0中断优先权是 “低” 1:设定INT0的中断优先权是 “高” + +/*IE*/ +sbit EA = IE^7; //中断使能的总控制 0:关闭所有的中断 1:打开所有的中断 +sbit EADC = IE^6; //ADC中断使能控制 0:关闭ADC中断 1:打开ADC中断 +sbit ET2 = IE^5; //Timer2中断使能控制 0:关闭Timer2中断 1:打开Timer2中断 +sbit EUART = IE^4; //UART中断使能控制 0:关闭UART中断 1:打开UART中断 +sbit ET1 = IE^3; //Timer1中断使能控制 0:关闭TIMER1中断 1:打开TIMER1中断 +sbit EINT1 = IE^2; //INT1中断使能控制 0:关闭INT1中断 1:打开INT1中断 +sbit ET0 = IE^1; //Timer0中断使能控制 0:关闭TIMER0中断 1:打开TIMER0中断 +sbit EINT0 = IE^0; //INT0中断使能控制 0:关闭INT0中断 1:打开INT0中断 + +/*TCON*/ +sbit TF1 = TCON^7; //T1溢出中断请求标志位 T1产生溢出,发生中断时,硬件将TF1置为“1”,申请中断,CPU响应时,硬件清“0”。 +sbit TR1 = TCON^6; //定时器T1的运行控制位 0:Timer1禁止计数 1:Timer1开始计数 +sbit TF0 = TCON^5; //T0溢出中断请求标志位 T0产生溢出,发生中断时,硬件将TF0置为“1”,申请中断,CPU响应时,硬件清“0”。 +sbit TR0 = TCON^4; //定时器T0的运行控制位 0:Timer0禁止计数 1:Timer0开始计数 +sbit BITIE1 = TCON^3; //INT1溢出中断请求标志 0:CPU响应后,硬件清零 1:中断产生 +sbit BITIE0 = TCON^1; //INT0溢出中断请求标志 0:CPU响应后,硬件清零 1:中断产生 + +/*SCON*/ +sbit SM0 = SCON^7; +sbit SM1 = SCON^6; +sbit SM2 = SCON^5; +sbit REN = SCON^4; +sbit TB8 = SCON^3; +sbit RB8 = SCON^2; +sbit TI = SCON^1; +sbit RI = SCON^0; + +/******************* P0 ****************** +*SC92F83A3封装未引出的管脚:无 +*SC92F83A2封装未引出的管脚:P06/P07 +*SC92F83A1封装未引出的管脚:P02/P03/P04/P06/P07 +******************************************/ +sbit P07 = P0^7; +sbit P06 = P0^6; +sbit P05 = P0^5; +sbit P04 = P0^4; +sbit P03 = P0^3; +sbit P02 = P0^2; +sbit P01 = P0^1; +sbit P00 = P0^0; + +/******************* P1 ****************** +*SC92F83A3封装未引出的管脚:无 +*SC92F83A2封装未引出的管脚:P16/P17 +*SC92F83A1封装未引出的管脚:P16/P17 +******************************************/ +sbit P17 = P1^7; +sbit P16 = P1^6; +sbit P15 = P1^5; +sbit P14 = P1^4; +sbit P13 = P1^3; +sbit P12 = P1^2; +sbit P11 = P1^1; +sbit P10 = P1^0; + +/******************* P2 ****************** +*SC92F83A3封装未引出的管脚:无 +*SC92F83A2封装未引出的管脚:P22/P23 +*SC92F83A1封装未引出的管脚:P22/P23/P27 +******************************************/ +sbit P27 = P2^7; +sbit P26 = P2^6; +sbit P25 = P2^5; +sbit P24 = P2^4; +sbit P23 = P2^3; +sbit P22 = P2^2; +sbit P21 = P2^1; +sbit P20 = P2^0; + +/******************* P5 ****************** +*SC92F83A3封装未引出的管脚:无 +*SC92F83A2封装未引出的管脚:P50/P51 +*SC92F83A1封装未引出的管脚:P50/P51 +******************************************/ +sbit P51 = P5^1; +sbit P50 = P5^0; + +/**************************************************************************** +*注意:封装未引出的管脚,需设置为强推挽输出模式 +*IC选型:请根据所使用的IC型号,在初始化完IO口后,调用相对应的未引出管脚的IO口配置; +*如若选择SC92F83A3,则不用调用宏定义。 +*****************************************************************************/ +#define SC92F83A2_NIO_Init() {P0CON|=0xC0,P1CON|=0xC0,P2CON|=0x0C,P5CON|=0x03;} //SC92F83A2的未引出来的IO口配置 +#define SC92F83A1_NIO_Init() {P0CON|=0xDC,P1CON|=0xC0,P2CON|=0x8C,P5CON|=0x03;} //SC92F83A1的未引出来的IO口配置 + +#endif \ No newline at end of file diff --git a/CFG/SC92F8363B/Keil_Mould/FWLib/SC92F_Lib/inc/SC92f84Ax_C.H b/CFG/SC92F8363B/Keil_Mould/FWLib/SC92F_Lib/inc/SC92f84Ax_C.H new file mode 100644 index 0000000..06d7a8e --- /dev/null +++ b/CFG/SC92F8363B/Keil_Mould/FWLib/SC92F_Lib/inc/SC92f84Ax_C.H @@ -0,0 +1,253 @@ + /*-------------------------------------------------------------------------- +SC92F84Ax_C.H + +C Header file for SC92F84Ax microcontroller. +Copyright (c) 2019 Shenzhen SinOne Chip Electronic CO., Ltd. +All rights reserved. +深圳市赛元微电子有限公司 +版本号: V1.0 +日期: 2019.06.17 +--------------------------------------------------------------------------*/ +#ifndef _SC92F84Ax_H_ +#define _SC92F84Ax_H_ + +/* ------------------- 字节寄存器-------------------- */ +///*CPU*/ +sfr ACC = 0xE0; //累加器A +sfr B = 0xF0; //通用寄存器B +sfr PSW = 0xD0; //程序状态字 +sfr DPH = 0x83; //数据指针高8位 +sfr DPL = 0x82; //数据指针低8位 +sfr SP = 0x81; //堆栈指针 + + +/*system*/ +sfr PCON = 0x87; //电源管理控制寄存器 + +/*interrupt*/ +sfr IP1 = 0XB9; //中断优先级控制寄存器1 +sfr IP = 0xB8; //中断优先权控制寄存器 +sfr IE = 0xA8; //中断控制寄存器 +sfr IE1 = 0XA9; //中断控制寄存器1 + +/*PORT*/ +sfr P5PH = 0xDA; //P5口模式控制寄存器 +sfr P5CON = 0xD9; //P5口模式控制寄存器 +sfr P5 = 0xD8; //P5口数据寄存器 +sfr P2PH = 0xA2; //P2口模式控制寄存器 +sfr P2CON = 0xA1; //P2口模式控制寄存器 +sfr P2 = 0xA0; //P2口数据寄存器 +sfr P1PH = 0x92; //P1口模式控制寄存器 +sfr P1CON = 0x91; //P1口模式控制寄存器 +sfr P1 = 0x90; //P1口数据寄存器 +sfr P0PH = 0x9B; //P0口模式控制寄存器 +sfr P0CON = 0x9A; //P0口模式控制寄存器 +sfr P0 = 0x80; //P0口数据寄存器 +sfr IOHCON = 0x97; //IOH设置寄存器 + +/*TIMER*/ +sfr TMCON = 0x8E; //定时器频率控制寄存器 +sfr TH1 = 0x8D; //定时器1高8位 +sfr TH0 = 0x8C; //定时器0高8位 +sfr TL1 = 0x8B; //定时器1低8位 +sfr TL0 = 0x8A; //定时器0低8位 +sfr TMOD = 0x89; //定时器工作模式寄存器 +sfr TCON = 0x88; //定时器控制寄存器 +sfr T2CON = 0xC8; //定时器2控制寄存器 +sfr T2MOD = 0xC9; //定时器2工作模式寄存器 +sfr RCAP2L = 0xCA; //定时器2重载/捕捉低8位 +sfr RCAP2H = 0xCB; //定时器2重载/捕捉高8位 +sfr TL2 = 0xCC; //定时器2低8位 +sfr TH2 = 0xCD; //定时器2高8位 + + +/*ADC*/ +sfr ADCCFG0 = 0xAB; //ADC功能配置寄存器0 +sfr ADCCFG1 = 0xAC; //ADC功能配置寄存器1 +sfr ADCCFG2 = 0XAA; //ADC功能配置寄存器2 +sfr ADCCON = 0XAD; //ADC控制寄存器 +sfr ADCVL = 0xAE; //ADC 结果寄存器 +sfr ADCVH = 0xAF; //ADC 结果寄存器 + +/*PWM*/ +sfr PWMCFG = 0xD1; //PWM设置寄存器 +sfr PWMCON = 0xD2; //PWM控制寄存器 +sfr PWMPRD = 0xD3; //PWM周期设置寄存器 +sfr PWMDTYA = 0xD4; //PWM占空比设置寄存器A +sfr PWMDTY0 = 0xD5; //PWM0设置寄存器 +sfr PWMDTY1 = 0xD6; //PWM1设置寄存器 +sfr PWMDTY2 = 0xD7; //PWM2设置寄存器 +sfr PWMDTYB = 0xDC; //PWM占空比设置寄存器B +sfr PWMDTY3 = 0xDD; //PWM3设置寄存器 +sfr PWMDTY4 = 0xDE; //PWM4设置寄存器 +sfr PWMDTY5 = 0xDF; //PWM5设置寄存器 + +///*WatchDog*/ +sfr BTMCON = 0XCE; //低频定时器控制寄存器 +sfr WDTCON = 0xCF; //WDT控制寄存器 + +/*LCD*/ +sfr OTCON = 0X8F; //输出控制寄存器 +sfr P0VO = 0X9C; //P0 LCD Bais 输出寄存器 + +/*INT*/ +sfr INT0F = 0XBA; //INT0 下降沿中断控制寄存器 +sfr INT0R = 0XBB; //INT0 上降沿中断控制寄存器 +sfr INT1F = 0XBC; //INT1 下降沿中断控制寄存器 +sfr INT1R = 0XBD; //INT1 上降沿中断控制寄存器 +sfr INT2F = 0XC6; //INT2 下降沿中断控制寄存器 +sfr INT2R = 0XC7; //INT2 上降沿中断控制寄存器 + +/*IAP */ +sfr IAPCTL = 0xF6; //IAP控制寄存器 +sfr IAPDAT = 0xF5; //IAP数据寄存器 +sfr IAPADE = 0xF4; //IAP扩展地址寄存器 +sfr IAPADH = 0xF3; //IAP写入地址高位寄存器 +sfr IAPADL = 0xF2; //IAP写入地址低8位寄存器 +sfr IAPKEY = 0xF1; //IAP保护寄存器 + +/*uart*/ +sfr SCON = 0x98; //串口控制寄存器 +sfr SBUF = 0x99; //串口数据缓存寄存器 + +/*三合一*/ +sfr SSCON0 = 0X9D; //SPI控制寄存器0 +sfr SSCON1 = 0X9E; //SPI控制寄存器1 +sfr SSCON2 = 0X95; //SPI控制寄存器2 +sfr SSDAT = 0X9F; //SPI数据寄存器 + +sfr OPINX = 0XFE; //Option 指针 +sfr OPREG = 0XFF; //Option寄存器 +sfr EXADH = 0XF7; //外部SRAM操作地址高位 + +/*Check Sum*/ +sfr CHKSUML = 0XFC; //Check Sum结果寄存器低位 +sfr CHKSUMH = 0XFD; //Check Sum结果寄存器高位 + +/*乘除法*/ +sfr EXA0 = 0xE9; //扩展累加器0 +sfr EXA1 = 0xEA; //扩展累加器1 +sfr EXA2 = 0xEB; //扩展累加器2 +sfr EXA3 = 0xEC; //扩展累加器3 +sfr EXBL = 0xED; //扩展B寄存器0 +sfr EXBH = 0xEE; //扩展B寄存器1 +sfr OPERCON = 0xEF; //运算控制寄存器 + +/* ------------------- 位寄存器-------------------- */ +/*PSW*/ +sbit CY = PSW^7; //标志位 0:加法运算最高位无进位,或者减法运算最高位无借位时 1:加法运算最高位有进位,或者减法运算最高位有借位时 +sbit AC = PSW^6; //进位辅助标志位 0:无借位、进位 1:加法运算时在bit3位有进位,或减法运算在bit3位有借位时 +sbit F0 = PSW^5; //用户标志位 +sbit RS1 = PSW^4; //工作寄存器组选择位 +sbit RS0 = PSW^3; //工作寄存器组选择位 +sbit OV = PSW^2; //溢出标志位 +sbit F1 = PSW^1; //F1标志 +sbit P = PSW^0; //奇偶标志位 0:ACC中1的个数为偶数(包括0个) 1:ACC中1的个数为奇数 + +/*T2CON*/ +sbit TF2 = T2CON^7; +sbit EXF2 = T2CON^6; +sbit RCLK = T2CON^5; +sbit TCLK = T2CON^4; +sbit EXEN2 = T2CON^3; +sbit TR2 = T2CON^2; +sbit T2 = T2CON^1; +sbit CP = T2CON^0; + + +/*IP*/ +sbit IPADC = IP^6; //ADC中断优先控制位 0:设定 ADC的中断优先权是 “低” 1:设定 ADC的中断优先权是 “高” +sbit IPT2 = IP^5; //Timer2中断优先控制位 0:设定 Timer2的中断优先权是 “低” 1:设定Timer2的中断优先权是 “高” +sbit IPUART = IP^4; //UART中断优先控制位 0:设定UART的中断优先权是 “低” 1:设定UART的中断优先权是 “高” +sbit IPT1 = IP^3; //Timer1中断优先控制位 0:设定 Timer 1的中断优先权是 “低” 1:设定 Timer 1的中断优先权是 “高” +sbit IPINT1 = IP^2; //INT1中断优先控制位 0:设定INT1中断优先权是 “低” 1:设定INT1的中断优先权是 “高” +sbit IPT0 = IP^1; //Timer0中断优先控制位 0:设定 Timer 0的中断优先权是 “低” 1:设定 Timer 0的中断优先权是 “高” +sbit IPINT0 = IP^0; //INT0中断优先控制位 0:设定INT0中断优先权是 “低” 1:设定INT0的中断优先权是 “高” + +/*IE*/ +sbit EA = IE^7; //中断使能的总控制 0:关闭所有的中断 1:打开所有的中断 +sbit EADC = IE^6; //ADC中断使能控制 0:关闭ADC中断 1:打开ADC中断 +sbit ET2 = IE^5; //Timer2中断使能控制 0:关闭Timer2中断 1:打开Timer2中断 +sbit EUART = IE^4; //UART中断使能控制 0:关闭UART中断 1:打开UART中断 +sbit ET1 = IE^3; //Timer1中断使能控制 0:关闭TIMER1中断 1:打开TIMER1中断 +sbit EINT1 = IE^2; //INT1中断使能控制 0:关闭INT1中断 1:打开INT1中断 +sbit ET0 = IE^1; //Timer0中断使能控制 0:关闭TIMER0中断 1:打开TIMER0中断 +sbit EINT0 = IE^0; //INT0中断使能控制 0:关闭INT0中断 1:打开INT0中断 + +/*TCON*/ +sbit TF1 = TCON^7; //T1溢出中断请求标志位 T1产生溢出,发生中断时,硬件将TF1置为“1”,申请中断,CPU响应时,硬件清“0”。 +sbit TR1 = TCON^6; //定时器T1的运行控制位 0:Timer1禁止计数 1:Timer1开始计数 +sbit TF0 = TCON^5; //T0溢出中断请求标志位 T0产生溢出,发生中断时,硬件将TF0置为“1”,申请中断,CPU响应时,硬件清“0”。 +sbit TR0 = TCON^4; //定时器T0的运行控制位 0:Timer0禁止计数 1:Timer0开始计数 +sbit BITIE1 = TCON^3; //INT1溢出中断请求标志 0:CPU响应后,硬件清零 1:中断产生 +sbit BITIE0 = TCON^1; //INT0溢出中断请求标志 0:CPU响应后,硬件清零 1:中断产生 + +/*SCON*/ +sbit SM0 = SCON^7; +sbit SM1 = SCON^6; +sbit SM2 = SCON^5; +sbit REN = SCON^4; +sbit TB8 = SCON^3; +sbit RB8 = SCON^2; +sbit TI = SCON^1; +sbit RI = SCON^0; + +/******************* P0 ****************** +*SC92F84A3封装未引出的管脚:无 +*SC92F84A2封装未引出的管脚:P06/P07 +*SC92F84A1封装未引出的管脚:P02/P03/P04/P06/P07 +******************************************/ +sbit P07 = P0^7; +sbit P06 = P0^6; +sbit P05 = P0^5; +sbit P04 = P0^4; +sbit P03 = P0^3; +sbit P02 = P0^2; +sbit P01 = P0^1; +sbit P00 = P0^0; + +/******************* P1 ****************** +*SC92F84A3封装未引出的管脚:无 +*SC92F84A2封装未引出的管脚:P16/P17 +*SC92F84A1封装未引出的管脚:P16/P17 +******************************************/ +sbit P17 = P1^7; +sbit P16 = P1^6; +sbit P15 = P1^5; +sbit P14 = P1^4; +sbit P13 = P1^3; +sbit P12 = P1^2; +sbit P11 = P1^1; +sbit P10 = P1^0; + +/******************* P2 ****************** +*SC92F84A3封装未引出的管脚:无 +*SC92F84A2封装未引出的管脚:P22/P23 +*SC92F84A1封装未引出的管脚:P22/P23/P27 +******************************************/ +sbit P27 = P2^7; +sbit P26 = P2^6; +sbit P25 = P2^5; +sbit P24 = P2^4; +sbit P23 = P2^3; +sbit P22 = P2^2; +sbit P21 = P2^1; +sbit P20 = P2^0; + +/******************* P5 ****************** +*SC92F84A3封装未引出的管脚:无 +*SC92F84A2封装未引出的管脚:P50/P51 +*SC92F84A1封装未引出的管脚:P50/P51 +******************************************/ +sbit P51 = P5^1; +sbit P50 = P5^0; + +/**************************************************************************** +*注意:封装未引出的管脚,需设置为强推挽输出模式 +*IC选型:请根据所使用的IC型号,在初始化完IO口后,调用相对应的未引出管脚的IO口配置; +*如若选择SC92F84A3,则不用调用宏定义。 +*****************************************************************************/ +#define SC92F84A2_NIO_Init() {P0CON|=0xC0,P1CON|=0xC0,P2CON|=0x0C,P5CON|=0x03;} //SC92F84A2的未引出来的IO口配置 +#define SC92F84A1_NIO_Init() {P0CON|=0xDC,P1CON|=0xC0,P2CON|=0x8C,P5CON|=0x03;} //SC92F84A1的未引出来的IO口配置 + +#endif \ No newline at end of file diff --git a/CFG/SC92F8363B/Keil_Mould/FWLib/SC92F_Lib/inc/SC93F743x_C.H b/CFG/SC92F8363B/Keil_Mould/FWLib/SC92F_Lib/inc/SC93F743x_C.H new file mode 100644 index 0000000..5726c5b --- /dev/null +++ b/CFG/SC92F8363B/Keil_Mould/FWLib/SC92F_Lib/inc/SC93F743x_C.H @@ -0,0 +1,242 @@ + /*-------------------------------------------------------------------------- +SC93F743x_C.H + +C Header file for SC93F743x microcontroller. +Copyright (c) 2019 Shenzhen SinOne Chip Electronic CO., Ltd. +All rights reserved. +深圳市赛元微电子有限公司 +版本号: V2.0 +日期: 2019.06.24 +--------------------------------------------------------------------------*/ +#ifndef _SC93F743x_H_ +#define _SC93F743x_H_ + +/* ------------------- 字节寄存器-------------------- */ +///*CPU*/ +sfr ACC = 0xE0; //累加器A +sfr B = 0xF0; //通用寄存器B +sfr PSW = 0xD0; //程序状态字 +sfr DPH = 0x83; //数据指针高8位 +sfr DPL = 0x82; //数据指针低8位 +sfr SP = 0x81; //堆栈指针 +sfr DPL1 = 0x84; //DPTR1数据指针1低位 +sfr DPH1 = 0x85; //DPTR1数据指针1高位 +sfr DPS = 0x86; //DPTR选择寄存器 + +/*system*/ +sfr PCON = 0x87; //电源管理控制寄存器 + +/*interrupt*/ +sfr IP1 = 0XB9; //中断优先级控制寄存器1 +sfr IP = 0xB8; //中断优先权控制寄存器 +sfr IE = 0xA8; //中断控制寄存器 +sfr IE1 = 0XA9; //中断控制寄存器1 + +/*PORT*/ +sfr P5PH = 0xDA; //P5口模式控制寄存器0 +sfr P5CON = 0xD9; //P5口模式控制寄存器1 +sfr P5 = 0xD8; //P5口数据寄存器 +sfr P2PH = 0xA2; //P2口模式控制寄存器0 +sfr P2CON = 0xA1; //P2口模式控制寄存器1 +sfr P2 = 0xA0; //P2口数据寄存器 +sfr P1PH = 0x92; //P1口模式控制寄存器0 +sfr P1CON = 0x91; //P1口模式控制寄存器1 +sfr P1 = 0x90; //P1口数据寄存器 +sfr P0PH = 0x9B; //P0口模式控制寄存器1 +sfr P0CON = 0x9A; //P0口模式控制寄存器1 +sfr P0 = 0x80; //P0口数据寄存器 +sfr IOHCON = 0x97; //IOH设置寄存器 + +/*TIMER*/ +sfr TMCON = 0x8E; //定时器频率控制寄存器 +sfr TH1 = 0x8D; //定时器1高8位 +sfr TH0 = 0x8C; //定时器0高8位 +sfr TL1 = 0x8B; //定时器1低8位 +sfr TL0 = 0x8A; //定时器0低8位 +sfr TMOD = 0x89; //定时器工作模式寄存器 +sfr TCON = 0x88; //定时器控制寄存器 +sfr T2CON = 0XC8; //定时器2控制寄存器 +sfr T2MOD = 0XC9; //定时器2工作模式寄存器 +sfr RCAP2L = 0XCA; //定时器2重载/捕捉低8位 +sfr RCAP2H = 0XCB; //定时器2重载/捕捉高8位 +sfr TL2 = 0XCC; //定时器2低8位 +sfr TH2 = 0XCD; //定时器2高8位 + + +/*ADC*/ +sfr ADCCFG0 = 0xAB; //P1口ADC功能配置寄存器/参考电压 +sfr ADCCFG1 = 0xAC; //P1口ADC功能配置寄存器/参考电压 +sfr ADCCON = 0XAD; //ADC控制寄存器 +sfr ADCVL = 0xAE; //ADC 结果寄存器 +sfr ADCVH = 0xAF; //ADC 结果寄存器 + +/*PWM*/ +sfr PWMCFG = 0xD1; //PWM设置寄存器 +sfr PWMCON = 0xD2; //PWM控制寄存器 +sfr PWMPRD = 0xD3; //PWM周期设置寄存器 +sfr PWMDTYA = 0xD4; //PWM高电平设置寄存器 +sfr PWMDTY0 = 0xD5; //PWM高电平设置寄存器 +sfr PWMDTY1 = 0XD6; //PWM高电平设置寄存器 +sfr PWMDTY2 = 0XD7; //PWM高电平设置寄存器 + +// +///*WatchDog*/ +sfr BTMCON = 0XCE; //低频定时器控制寄存器 +sfr WDTCON = 0xCF; //WDT控制寄存器 + + +/*LCD*/ +sfr OTCON = 0X8F; //LCD电压输出控制寄存器 +sfr P0VO = 0X9C; //P0 LCD Bais 输出寄存器 + +/*INT*/ +sfr INT0F = 0XBA; //INT0 下降沿中断控制寄存器 +sfr INT0R = 0XBB; //INT0 上降沿中断控制寄存器 +sfr INT1F = 0XBC; //INT1 下降沿中断控制寄存器 +sfr INT1R = 0XBD; //INT1 上降沿中断控制寄存器 +sfr INT2F = 0XC6; //INT2 下降沿中断控制寄存器 +sfr INT2R = 0XC7; //INT2 上降沿中断控制寄存器 + +/*PGA*/ +sfr PGACFG = 0XBE; //PGA设置寄存器 +sfr PGACON = 0XBF; //PGA控制寄存器 + +/*IAP */ +sfr IAPCTL = 0xF6; //IAP控制寄存器 +sfr IAPDAT = 0xF5; //IAP数据寄存器 +sfr IAPADE = 0xF4; //IAP扩展地址寄存器 +sfr IAPADH = 0xF3; //IAP写入地址高位寄存器 +sfr IAPADL = 0xF2; //IAP写入地址低8位寄存器 +sfr IAPKEY = 0xF1; //IAP保护寄存器 + +/*UART*/ +sfr SCON = 0X98; //串口控制寄存器 +sfr SBUF = 0X99; //串口数据缓存寄存器 + +/*SPI*/ +sfr SSCON0 = 0X9D; //SPI控制寄存器 +sfr SSCON1 = 0X9E; //SPI状态寄存器 +sfr SSCON2 = 0X95; //SPI状态寄存器 +sfr SSDAT = 0X9F; //SPI数据寄存器 + +sfr MXAX = 0XEA; +sfr TA = 0XEB; +sfr OPINX = 0XFE; +sfr OPREG = 0XFF; +sfr EXADH = 0XF7; + +/*temperature sensor*/ +sfr TSCFG = 0XAA; + +///* ------------------- 位寄存器-------------------- */ + +/*PSW*/ +sbit CY = PSW^7; //标志位 0:加法运算最高位无进位,或者减法运算最高位无借位时 1:加法运算最高位有进位,或者减法运算最高位有借位时 +sbit AC = PSW^6; //进位辅助标志位 0:无借位、进位 1:加法运算时在bit3位有进位,或减法运算在bit3位有借位时 +sbit F0 = PSW^5; //用户标志位 +sbit RS1 = PSW^4; //工作寄存器组选择位 +sbit RS0 = PSW^3; //工作寄存器组选择位 +sbit OV = PSW^2; //溢出标志位 +sbit P = PSW^0; //奇偶标志位 0:ACC中1的个数为偶数(包括0个) 1:ACC中1的个数为奇数 + +/*T2CON*/ +sbit TF2 = T2CON^7; +sbit EXF2 = T2CON^6; +sbit RCLK = T2CON^5; +sbit TCLK = T2CON^4; +sbit EXEN2 = T2CON^3; +sbit TR2 = T2CON^2; +sbit T2 = T2CON^1; +sbit CP = T2CON^0; + + +/*IP*/ +sbit IPADC = IP^6; //ADC中断优先控制位 0:设定 ADC的中断优先权是 “低” 1:设定 ADC的中断优先权是 “高” +sbit IPT2 = IP^5; //Timer2中断优先控制位 0:设定 Timer2的中断优先权是 “低” 1:设定Timer2的中断优先权是 “高” +sbit IPUART = IP^4; //UART中断优先控制位 0:设定UART的中断优先权是 “低” 1:设定UART的中断优先权是 “高” +sbit IPT1 = IP^3; //Timer1中断优先控制位 0:设定 Timer 1的中断优先权是 “低” 1:设定 Timer 1的中断优先权是 “高” +sbit IPINT1 = IP^2; //INT1中断优先控制位 0:设定INT1中断优先权是 “低” 1:设定INT1的中断优先权是 “高” +sbit IPT0 = IP^1; //Timer0中断优先控制位 0:设定 Timer 0的中断优先权是 “低” 1:设定 Timer 0的中断优先权是 “高” +sbit IPINT0 = IP^0; //INT0中断优先控制位 0:设定INT0中断优先权是 “低” 1:设定INT0的中断优先权是 “高” + +/*IE*/ +sbit EA = IE^7; //中断使能的总控制 0:关闭所有的中断 1:打开所有的中断 +sbit EADC = IE^6; //ADC中断使能控制 0:关闭ADC中断 1:打开ADC中断 +sbit ET2 = IE^5; //Timer2中断使能控制 0:关闭Timer2中断 1:打开Timer2中断 +sbit EUART = IE^4; //UART中断使能控制 0:关闭UART中断 1:打开UART中断 +sbit ET1 = IE^3; //Timer1中断使能控制 0:关闭TIMER1中断 1:打开TIMER1中断 +sbit EINT1 = IE^2; //INT1中断使能控制 0:关闭INT1中断 1:打开INT1中断 +sbit ET0 = IE^1; //Timer0中断使能控制 0:关闭TIMER0中断 1:打开TIMER0中断 +sbit EINT0 = IE^0; //INT0中断使能控制 0:关闭INT0中断 1:打开INT0中断 + +/*TCON*/ +sbit TF1 = TCON^7; //T1溢出中断请求标志位 T1产生溢出,发生中断时,硬件将TF1置为“1”,申请中断,CPU响应时,硬件清“0”。 +sbit TR1 = TCON^6; //定时器T1的运行控制位 0:Timer1禁止计数 1:Timer1开始计数 +sbit TF0 = TCON^5; //T0溢出中断请求标志位 T0产生溢出,发生中断时,硬件将TF0置为“1”,申请中断,CPU响应时,硬件清“0”。 +sbit TR0 = TCON^4; //定时器T0的运行控制位 0:Timer0禁止计数 1:Timer0开始计数 + +/*SCON*/ +sbit SM0 = SCON^7; +sbit SM1 = SCON^6; +sbit SM2 = SCON^5; +sbit REN = SCON^4; +sbit TB8 = SCON^3; +sbit RB8 = SCON^2; +sbit TI = SCON^1; +sbit RI = SCON^0; + +/******************* P0 ****************** +*SC93F7433封装未引出的管脚:无 +*SC93F7432封装未引出的管脚:P06/P07 +******************************************/ +sbit P07 = P0^7; +sbit P06 = P0^6; +sbit P05 = P0^5; +sbit P04 = P0^4; +sbit P03 = P0^3; +sbit P02 = P0^2; +sbit P01 = P0^1; +sbit P00 = P0^0; + +/******************* P1 ****************** +*SC93F7433封装未引出的管脚:P10 +*SC93F7432封装未引出的管脚:P10/P16/P17 +******************************************/ +sbit P17 = P1^7; +sbit P16 = P1^6; +sbit P15 = P1^5; +sbit P14 = P1^4; +sbit P13 = P1^3; +sbit P12 = P1^2; +sbit P11 = P1^1; + +/******************* P2 ****************** +*SC93F7433封装未引出的管脚:无 +*SC93F7432封装未引出的管脚:P22/P23 +******************************************/ +sbit P27 = P2^7; +sbit P26 = P2^6; +sbit P25 = P2^5; +sbit P24 = P2^4; +sbit P23 = P2^3; +sbit P22 = P2^2; +sbit P21 = P2^1; +sbit P20 = P2^0; + +/******************* P5 ****************** +*SC93F7433封装未引出的管脚:无 +*SC93F7432封装未引出的管脚:P50/P51 +******************************************/ +sbit P52 = P5^2; +sbit P51 = P5^1; +sbit P50 = P5^0; + +/**************************************************************************** +*注意:封装未引出的管脚,需设置为强推挽输出模式 +*IC选型:请根据所使用的IC型号,在初始化完IO口后,调用相对应的未引出管脚的IO口配置; +* +*****************************************************************************/ +#define SC93F7433_NIO_Init() {P1CON|=0x01;} //SC93F7433的未引出来的IO口配置 +#define SC93F7432_NIO_Init() {P0CON|=0xC0,P1CON|=0xC1,P2CON|=0x0C,P5CON|=0x03;} //SC93F7432的未引出来的IO口配置 + +#endif \ No newline at end of file diff --git a/CFG/SC92F8363B/Keil_Mould/FWLib/SC92F_Lib/inc/SC93F833x_C.H b/CFG/SC92F8363B/Keil_Mould/FWLib/SC92F_Lib/inc/SC93F833x_C.H new file mode 100644 index 0000000..02a0741 --- /dev/null +++ b/CFG/SC92F8363B/Keil_Mould/FWLib/SC92F_Lib/inc/SC93F833x_C.H @@ -0,0 +1,247 @@ + /*-------------------------------------------------------------------------- +SC93F833x_C.H + +C Header file for SC93F833x microcontroller. +Copyright (c) 2019 Shenzhen SinOne Chip Electronic CO., Ltd. +All rights reserved. +深圳市赛元微电子有限公司 +版本号: V2.0 +日期: 2019.06.24 +--------------------------------------------------------------------------*/ +#ifndef _SC93F833x_H_ +#define _SC93F833x_H_ + +/* ------------------- 字节寄存器-------------------- */ +///*CPU*/ +sfr ACC = 0xE0; //累加器A +sfr B = 0xF0; //通用寄存器B +sfr PSW = 0xD0; //程序状态字 +sfr DPH = 0x83; //数据指针高8位 +sfr DPL = 0x82; //数据指针低8位 +sfr SP = 0x81; //堆栈指针 +sfr DPL1 = 0x84; //DPTR1数据指针1低位 +sfr DPH1 = 0x85; //DPTR1数据指针1高位 +sfr DPS = 0x86; //DPTR选择寄存器 + +/*system*/ +sfr PCON = 0x87; //电源管理控制寄存器 + +/*interrupt*/ +sfr IP1 = 0XB9; //中断优先级控制寄存器1 +sfr IP = 0xB8; //中断优先权控制寄存器 +sfr IE = 0xA8; //中断控制寄存器 +sfr IE1 = 0XA9; //中断控制寄存器1 + +/*PORT*/ +sfr P5PH = 0xDA; //P5口模式控制寄存器0 +sfr P5CON = 0xD9; //P5口模式控制寄存器1 +sfr P5 = 0xD8; //P5口数据寄存器 +sfr P2PH = 0xA2; //P2口模式控制寄存器0 +sfr P2CON = 0xA1; //P2口模式控制寄存器1 +sfr P2 = 0xA0; //P2口数据寄存器 +sfr P1PH = 0x92; //P1口模式控制寄存器0 +sfr P1CON = 0x91; //P1口模式控制寄存器1 +sfr P1 = 0x90; //P1口数据寄存器 +sfr P0PH = 0x9B; //P0口模式控制寄存器1 +sfr P0CON = 0x9A; //P0口模式控制寄存器1 +sfr P0 = 0x80; //P0口数据寄存器 +sfr IOHCON = 0x97; //IOH设置寄存器 + +/*TIMER*/ +sfr TMCON = 0x8E; //定时器频率控制寄存器 +sfr TH1 = 0x8D; //定时器1高8位 +sfr TH0 = 0x8C; //定时器0高8位 +sfr TL1 = 0x8B; //定时器1低8位 +sfr TL0 = 0x8A; //定时器0低8位 +sfr TMOD = 0x89; //定时器工作模式寄存器 +sfr TCON = 0x88; //定时器控制寄存器 +sfr T2CON = 0XC8; //定时器2控制寄存器 +sfr T2MOD = 0XC9; //定时器2工作模式寄存器 +sfr RCAP2L = 0XCA; //定时器2重载/捕捉低8位 +sfr RCAP2H = 0XCB; //定时器2重载/捕捉高8位 +sfr TL2 = 0XCC; //定时器2低8位 +sfr TH2 = 0XCD; //定时器2高8位 + + +/*ADC*/ +sfr ADCCFG0 = 0xAB; //P1口ADC功能配置寄存器/参考电压 +sfr ADCCFG1 = 0xAC; //P1口ADC功能配置寄存器/参考电压 +sfr ADCCON = 0XAD; //ADC控制寄存器 +sfr ADCVL = 0xAE; //ADC 结果寄存器 +sfr ADCVH = 0xAF; //ADC 结果寄存器 + +/*PWM*/ +sfr PWMCFG = 0xD1; //PWM设置寄存器 +sfr PWMCON = 0xD2; //PWM控制寄存器 +sfr PWMPRD = 0xD3; //PWM周期设置寄存器 +sfr PWMDTYA = 0xD4; //PWM高电平设置寄存器 +sfr PWMDTY0 = 0xD5; //PWM高电平设置寄存器 +sfr PWMDTY1 = 0XD6; //PWM高电平设置寄存器 +sfr PWMDTY2 = 0XD7; //PWM高电平设置寄存器 + +// +///*WatchDog*/ +sfr BTMCON = 0XCE; //低频定时器控制寄存器 +sfr WDTCON = 0xCF; //WDT控制寄存器 + + +/*LCD*/ +sfr OTCON = 0X8F; //LCD电压输出控制寄存器 +sfr P0VO = 0X9C; //P0 LCD Bais 输出寄存器 + +/*INT*/ +sfr INT0F = 0XBA; //INT0 下降沿中断控制寄存器 +sfr INT0R = 0XBB; //INT0 上降沿中断控制寄存器 +sfr INT1F = 0XBC; //INT1 下降沿中断控制寄存器 +sfr INT1R = 0XBD; //INT1 上降沿中断控制寄存器 +sfr INT2F = 0XC6; //INT2 下降沿中断控制寄存器 +sfr INT2R = 0XC7; //INT2 上降沿中断控制寄存器 + +/*PGA*/ +sfr PGACFG = 0XBE; //PGA设置寄存器 +sfr PGACON = 0XBF; //PGA控制寄存器 + +/*IAP */ +sfr IAPCTL = 0xF6; //IAP控制寄存器 +sfr IAPDAT = 0xF5; //IAP数据寄存器 +sfr IAPADE = 0xF4; //IAP扩展地址寄存器 +sfr IAPADH = 0xF3; //IAP写入地址高位寄存器 +sfr IAPADL = 0xF2; //IAP写入地址低8位寄存器 +sfr IAPKEY = 0xF1; //IAP保护寄存器 + +/*UART*/ +sfr SCON = 0X98; //串口控制寄存器 +sfr SBUF = 0X99; //串口数据缓存寄存器 + +/*SPI*/ +sfr SSCON0 = 0X9D; //SPI控制寄存器 +sfr SSCON1 = 0X9E; //SPI状态寄存器 +sfr SSCON2 = 0X95; //SPI状态寄存器 +sfr SSDAT = 0X9F; //SPI数据寄存器 + +sfr MXAX = 0XEA; +sfr TA = 0XEB; +sfr OPINX = 0XFE; +sfr OPREG = 0XFF; +sfr EXADH = 0XF7; + +/*temperature sensor*/ +sfr TSCFG = 0XAA; + +///* ------------------- 位寄存器-------------------- */ + +/*PSW*/ +sbit CY = PSW^7; //标志位 0:加法运算最高位无进位,或者减法运算最高位无借位时 1:加法运算最高位有进位,或者减法运算最高位有借位时 +sbit AC = PSW^6; //进位辅助标志位 0:无借位、进位 1:加法运算时在bit3位有进位,或减法运算在bit3位有借位时 +sbit F0 = PSW^5; //用户标志位 +sbit RS1 = PSW^4; //工作寄存器组选择位 +sbit RS0 = PSW^3; //工作寄存器组选择位 +sbit OV = PSW^2; //溢出标志位 +sbit P = PSW^0; //奇偶标志位 0:ACC中1的个数为偶数(包括0个) 1:ACC中1的个数为奇数 + +/*T2CON*/ +sbit TF2 = T2CON^7; +sbit EXF2 = T2CON^6; +sbit RCLK = T2CON^5; +sbit TCLK = T2CON^4; +sbit EXEN2 = T2CON^3; +sbit TR2 = T2CON^2; +sbit T2 = T2CON^1; +sbit CP = T2CON^0; + + +/*IP*/ +sbit IPADC = IP^6; //ADC中断优先控制位 0:设定 ADC的中断优先权是 “低” 1:设定 ADC的中断优先权是 “高” +sbit IPT2 = IP^5; //Timer2中断优先控制位 0:设定 Timer2的中断优先权是 “低” 1:设定Timer2的中断优先权是 “高” +sbit IPUART = IP^4; //UART中断优先控制位 0:设定UART的中断优先权是 “低” 1:设定UART的中断优先权是 “高” +sbit IPT1 = IP^3; //Timer1中断优先控制位 0:设定 Timer 1的中断优先权是 “低” 1:设定 Timer 1的中断优先权是 “高” +sbit IPINT1 = IP^2; //INT1中断优先控制位 0:设定INT1中断优先权是 “低” 1:设定INT1的中断优先权是 “高” +sbit IPT0 = IP^1; //Timer0中断优先控制位 0:设定 Timer 0的中断优先权是 “低” 1:设定 Timer 0的中断优先权是 “高” +sbit IPINT0 = IP^0; //INT0中断优先控制位 0:设定INT0中断优先权是 “低” 1:设定INT0的中断优先权是 “高” + +/*IE*/ +sbit EA = IE^7; //中断使能的总控制 0:关闭所有的中断 1:打开所有的中断 +sbit EADC = IE^6; //ADC中断使能控制 0:关闭ADC中断 1:打开ADC中断 +sbit ET2 = IE^5; //Timer2中断使能控制 0:关闭Timer2中断 1:打开Timer2中断 +sbit EUART = IE^4; //UART中断使能控制 0:关闭UART中断 1:打开UART中断 +sbit ET1 = IE^3; //Timer1中断使能控制 0:关闭TIMER1中断 1:打开TIMER1中断 +sbit EINT1 = IE^2; //INT1中断使能控制 0:关闭INT1中断 1:打开INT1中断 +sbit ET0 = IE^1; //Timer0中断使能控制 0:关闭TIMER0中断 1:打开TIMER0中断 +sbit EINT0 = IE^0; //INT0中断使能控制 0:关闭INT0中断 1:打开INT0中断 + +/*TCON*/ +sbit TF1 = TCON^7; //T1溢出中断请求标志位 T1产生溢出,发生中断时,硬件将TF1置为“1”,申请中断,CPU响应时,硬件清“0”。 +sbit TR1 = TCON^6; //定时器T1的运行控制位 0:Timer1禁止计数 1:Timer1开始计数 +sbit TF0 = TCON^5; //T0溢出中断请求标志位 T0产生溢出,发生中断时,硬件将TF0置为“1”,申请中断,CPU响应时,硬件清“0”。 +sbit TR0 = TCON^4; //定时器T0的运行控制位 0:Timer0禁止计数 1:Timer0开始计数 + +/*SCON*/ +sbit SM0 = SCON^7; +sbit SM1 = SCON^6; +sbit SM2 = SCON^5; +sbit REN = SCON^4; +sbit TB8 = SCON^3; +sbit RB8 = SCON^2; +sbit TI = SCON^1; +sbit RI = SCON^0; + +/******************* P0 ****************** +*SC93F8333封装未引出的管脚:无 +*SC93F8332封装未引出的管脚:P06/P07 +*SC93F8331封装未引出的管脚:P02/P03/P05/P06/P07 +******************************************/ +sbit P07 = P0^7; +sbit P06 = P0^6; +sbit P05 = P0^5; +sbit P04 = P0^4; +sbit P03 = P0^3; +sbit P02 = P0^2; +sbit P01 = P0^1; +sbit P00 = P0^0; + +/******************* P1 ****************** +*SC93F8333封装未引出的管脚:P10 +*SC93F8332封装未引出的管脚:P10/P16/P17 +*SC93F8331封装未引出的管脚:P10/P16/P17 +******************************************/ +sbit P17 = P1^7; +sbit P16 = P1^6; +sbit P15 = P1^5; +sbit P14 = P1^4; +sbit P13 = P1^3; +sbit P12 = P1^2; +sbit P11 = P1^1; + +/******************* P2 ****************** +*SC93F8333封装未引出的管脚:无 +*SC93F8332封装未引出的管脚:P22/P23 +*SC93F8331封装未引出的管脚:P22/P23/P27 +******************************************/ +sbit P27 = P2^7; +sbit P26 = P2^6; +sbit P25 = P2^5; +sbit P24 = P2^4; +sbit P23 = P2^3; +sbit P22 = P2^2; +sbit P21 = P2^1; +sbit P20 = P2^0; + +/******************* P5 ****************** +*SC93F8333封装未引出的管脚:无 +*SC93F8332封装未引出的管脚:P50/P51 +*SC93F8331封装未引出的管脚:P50/P51 +******************************************/ +sbit P52 = P5^2; +sbit P51 = P5^1; +sbit P50 = P5^0; + +/**************************************************************************** +*注意:封装未引出的管脚,需设置为强推挽输出模式 +*IC选型:请根据所使用的IC型号,在初始化完IO口后,调用相对应的未引出管脚的IO口配置; +* +*****************************************************************************/ +#define SC93F8333_NIO_Init() {P1CON|=0x01;} //SC93F8333的未引出来的IO口配置 +#define SC93F8332_NIO_Init() {P0CON|=0xC0,P1CON|=0xC1,P2CON|=0x0C,P5CON|=0x03;} //SC93F8332的未引出来的IO口配置 +#define SC93F8331_NIO_Init() {P0CON|=0xEC,P1CON|=0xC1,P2CON|=0x8C,P5CON|=0x03;} //SC93F8331的未引出来的IO口配置 + +#endif \ No newline at end of file diff --git a/CFG/SC92F8363B/Keil_Mould/FWLib/SC92F_Lib/inc/SC93F843X_C.H b/CFG/SC92F8363B/Keil_Mould/FWLib/SC92F_Lib/inc/SC93F843X_C.H new file mode 100644 index 0000000..1ac6a17 --- /dev/null +++ b/CFG/SC92F8363B/Keil_Mould/FWLib/SC92F_Lib/inc/SC93F843X_C.H @@ -0,0 +1,247 @@ + /*-------------------------------------------------------------------------- +SC93F843x_C.H + +C Header file for SC93F843x microcontroller. +Copyright (c) 2019 Shenzhen SinOne Chip Electronic CO., Ltd. +All rights reserved. +深圳市赛元微电子有限公司 +版本号: V2.0 +日期: 2019.06.24 +--------------------------------------------------------------------------*/ +#ifndef _SC93F843x_H_ +#define _SC93F843x_H_ + +/* ------------------- 字节寄存器-------------------- */ +///*CPU*/ +sfr ACC = 0xE0; //累加器A +sfr B = 0xF0; //通用寄存器B +sfr PSW = 0xD0; //程序状态字 +sfr DPH = 0x83; //数据指针高8位 +sfr DPL = 0x82; //数据指针低8位 +sfr SP = 0x81; //堆栈指针 +sfr DPL1 = 0x84; //DPTR1数据指针1低位 +sfr DPH1 = 0x85; //DPTR1数据指针1高位 +sfr DPS = 0x86; //DPTR选择寄存器 + +/*system*/ +sfr PCON = 0x87; //电源管理控制寄存器 + +/*interrupt*/ +sfr IP1 = 0XB9; //中断优先级控制寄存器1 +sfr IP = 0xB8; //中断优先权控制寄存器 +sfr IE = 0xA8; //中断控制寄存器 +sfr IE1 = 0XA9; //中断控制寄存器1 + +/*PORT*/ +sfr P5PH = 0xDA; //P5口模式控制寄存器0 +sfr P5CON = 0xD9; //P5口模式控制寄存器1 +sfr P5 = 0xD8; //P5口数据寄存器 +sfr P2PH = 0xA2; //P2口模式控制寄存器0 +sfr P2CON = 0xA1; //P2口模式控制寄存器1 +sfr P2 = 0xA0; //P2口数据寄存器 +sfr P1PH = 0x92; //P1口模式控制寄存器0 +sfr P1CON = 0x91; //P1口模式控制寄存器1 +sfr P1 = 0x90; //P1口数据寄存器 +sfr P0PH = 0x9B; //P0口模式控制寄存器1 +sfr P0CON = 0x9A; //P0口模式控制寄存器1 +sfr P0 = 0x80; //P0口数据寄存器 +sfr IOHCON = 0x97; //IOH设置寄存器 + +/*TIMER*/ +sfr TMCON = 0x8E; //定时器频率控制寄存器 +sfr TH1 = 0x8D; //定时器1高8位 +sfr TH0 = 0x8C; //定时器0高8位 +sfr TL1 = 0x8B; //定时器1低8位 +sfr TL0 = 0x8A; //定时器0低8位 +sfr TMOD = 0x89; //定时器工作模式寄存器 +sfr TCON = 0x88; //定时器控制寄存器 +sfr T2CON = 0XC8; //定时器2控制寄存器 +sfr T2MOD = 0XC9; //定时器2工作模式寄存器 +sfr RCAP2L = 0XCA; //定时器2重载/捕捉低8位 +sfr RCAP2H = 0XCB; //定时器2重载/捕捉高8位 +sfr TL2 = 0XCC; //定时器2低8位 +sfr TH2 = 0XCD; //定时器2高8位 + + +/*ADC*/ +sfr ADCCFG0 = 0xAB; //P1口ADC功能配置寄存器/参考电压 +sfr ADCCFG1 = 0xAC; //P1口ADC功能配置寄存器/参考电压 +sfr ADCCON = 0XAD; //ADC控制寄存器 +sfr ADCVL = 0xAE; //ADC 结果寄存器 +sfr ADCVH = 0xAF; //ADC 结果寄存器 + +/*PWM*/ +sfr PWMCFG = 0xD1; //PWM设置寄存器 +sfr PWMCON = 0xD2; //PWM控制寄存器 +sfr PWMPRD = 0xD3; //PWM周期设置寄存器 +sfr PWMDTYA = 0xD4; //PWM高电平设置寄存器 +sfr PWMDTY0 = 0xD5; //PWM高电平设置寄存器 +sfr PWMDTY1 = 0XD6; //PWM高电平设置寄存器 +sfr PWMDTY2 = 0XD7; //PWM高电平设置寄存器 + +// +///*WatchDog*/ +sfr BTMCON = 0XCE; //低频定时器控制寄存器 +sfr WDTCON = 0xCF; //WDT控制寄存器 + + +/*LCD*/ +sfr OTCON = 0X8F; //LCD电压输出控制寄存器 +sfr P0VO = 0X9C; //P0 LCD Bais 输出寄存器 + +/*INT*/ +sfr INT0F = 0XBA; //INT0 下降沿中断控制寄存器 +sfr INT0R = 0XBB; //INT0 上降沿中断控制寄存器 +sfr INT1F = 0XBC; //INT1 下降沿中断控制寄存器 +sfr INT1R = 0XBD; //INT1 上降沿中断控制寄存器 +sfr INT2F = 0XC6; //INT2 下降沿中断控制寄存器 +sfr INT2R = 0XC7; //INT2 上降沿中断控制寄存器 + +/*PGA*/ +sfr PGACFG = 0XBE; //PGA设置寄存器 +sfr PGACON = 0XBF; //PGA控制寄存器 + +/*IAP */ +sfr IAPCTL = 0xF6; //IAP控制寄存器 +sfr IAPDAT = 0xF5; //IAP数据寄存器 +sfr IAPADE = 0xF4; //IAP扩展地址寄存器 +sfr IAPADH = 0xF3; //IAP写入地址高位寄存器 +sfr IAPADL = 0xF2; //IAP写入地址低8位寄存器 +sfr IAPKEY = 0xF1; //IAP保护寄存器 + +/*UART*/ +sfr SCON = 0X98; //串口控制寄存器 +sfr SBUF = 0X99; //串口数据缓存寄存器 + +/*SPI*/ +sfr SSCON0 = 0X9D; //SPI控制寄存器 +sfr SSCON1 = 0X9E; //SPI状态寄存器 +sfr SSCON2 = 0X95; //SPI状态寄存器 +sfr SSDAT = 0X9F; //SPI数据寄存器 + +sfr MXAX = 0XEA; +sfr TA = 0XEB; +sfr OPINX = 0XFE; +sfr OPREG = 0XFF; +sfr EXADH = 0XF7; + +/*temperature sensor*/ +sfr TSCFG = 0XAA; + +///* ------------------- 位寄存器-------------------- */ + +/*PSW*/ +sbit CY = PSW^7; //标志位 0:加法运算最高位无进位,或者减法运算最高位无借位时 1:加法运算最高位有进位,或者减法运算最高位有借位时 +sbit AC = PSW^6; //进位辅助标志位 0:无借位、进位 1:加法运算时在bit3位有进位,或减法运算在bit3位有借位时 +sbit F0 = PSW^5; //用户标志位 +sbit RS1 = PSW^4; //工作寄存器组选择位 +sbit RS0 = PSW^3; //工作寄存器组选择位 +sbit OV = PSW^2; //溢出标志位 +sbit P = PSW^0; //奇偶标志位 0:ACC中1的个数为偶数(包括0个) 1:ACC中1的个数为奇数 + +/*T2CON*/ +sbit TF2 = T2CON^7; +sbit EXF2 = T2CON^6; +sbit RCLK = T2CON^5; +sbit TCLK = T2CON^4; +sbit EXEN2 = T2CON^3; +sbit TR2 = T2CON^2; +sbit T2 = T2CON^1; +sbit CP = T2CON^0; + + +/*IP*/ +sbit IPADC = IP^6; //ADC中断优先控制位 0:设定 ADC的中断优先权是 “低” 1:设定 ADC的中断优先权是 “高” +sbit IPT2 = IP^5; //Timer2中断优先控制位 0:设定 Timer2的中断优先权是 “低” 1:设定Timer2的中断优先权是 “高” +sbit IPUART = IP^4; //UART中断优先控制位 0:设定UART的中断优先权是 “低” 1:设定UART的中断优先权是 “高” +sbit IPT1 = IP^3; //Timer1中断优先控制位 0:设定 Timer 1的中断优先权是 “低” 1:设定 Timer 1的中断优先权是 “高” +sbit IPINT1 = IP^2; //INT1中断优先控制位 0:设定INT1中断优先权是 “低” 1:设定INT1的中断优先权是 “高” +sbit IPT0 = IP^1; //Timer0中断优先控制位 0:设定 Timer 0的中断优先权是 “低” 1:设定 Timer 0的中断优先权是 “高” +sbit IPINT0 = IP^0; //INT0中断优先控制位 0:设定INT0中断优先权是 “低” 1:设定INT0的中断优先权是 “高” + +/*IE*/ +sbit EA = IE^7; //中断使能的总控制 0:关闭所有的中断 1:打开所有的中断 +sbit EADC = IE^6; //ADC中断使能控制 0:关闭ADC中断 1:打开ADC中断 +sbit ET2 = IE^5; //Timer2中断使能控制 0:关闭Timer2中断 1:打开Timer2中断 +sbit EUART = IE^4; //UART中断使能控制 0:关闭UART中断 1:打开UART中断 +sbit ET1 = IE^3; //Timer1中断使能控制 0:关闭TIMER1中断 1:打开TIMER1中断 +sbit EINT1 = IE^2; //INT1中断使能控制 0:关闭INT1中断 1:打开INT1中断 +sbit ET0 = IE^1; //Timer0中断使能控制 0:关闭TIMER0中断 1:打开TIMER0中断 +sbit EINT0 = IE^0; //INT0中断使能控制 0:关闭INT0中断 1:打开INT0中断 + +/*TCON*/ +sbit TF1 = TCON^7; //T1溢出中断请求标志位 T1产生溢出,发生中断时,硬件将TF1置为“1”,申请中断,CPU响应时,硬件清“0”。 +sbit TR1 = TCON^6; //定时器T1的运行控制位 0:Timer1禁止计数 1:Timer1开始计数 +sbit TF0 = TCON^5; //T0溢出中断请求标志位 T0产生溢出,发生中断时,硬件将TF0置为“1”,申请中断,CPU响应时,硬件清“0”。 +sbit TR0 = TCON^4; //定时器T0的运行控制位 0:Timer0禁止计数 1:Timer0开始计数 + +/*SCON*/ +sbit SM0 = SCON^7; +sbit SM1 = SCON^6; +sbit SM2 = SCON^5; +sbit REN = SCON^4; +sbit TB8 = SCON^3; +sbit RB8 = SCON^2; +sbit TI = SCON^1; +sbit RI = SCON^0; + +/******************* P0 ****************** +*SC93F8433封装未引出的管脚:无 +*SC93F8432封装未引出的管脚:P06/P07 +*SC93F8431封装未引出的管脚:P02/P03/P05/P06/P07 +******************************************/ +sbit P07 = P0^7; +sbit P06 = P0^6; +sbit P05 = P0^5; +sbit P04 = P0^4; +sbit P03 = P0^3; +sbit P02 = P0^2; +sbit P01 = P0^1; +sbit P00 = P0^0; + +/******************* P1 ****************** +*SC93F8433封装未引出的管脚:P10 +*SC93F8432封装未引出的管脚:P10/P16/P17 +*SC93F8431封装未引出的管脚:P10/P16/P17 +******************************************/ +sbit P17 = P1^7; +sbit P16 = P1^6; +sbit P15 = P1^5; +sbit P14 = P1^4; +sbit P13 = P1^3; +sbit P12 = P1^2; +sbit P11 = P1^1; + +/******************* P2 ****************** +*SC93F8433封装未引出的管脚:无 +*SC93F8432封装未引出的管脚:P22/P23 +*SC93F8431封装未引出的管脚:P22/P23/P27 +******************************************/ +sbit P27 = P2^7; +sbit P26 = P2^6; +sbit P25 = P2^5; +sbit P24 = P2^4; +sbit P23 = P2^3; +sbit P22 = P2^2; +sbit P21 = P2^1; +sbit P20 = P2^0; + +/******************* P5 ****************** +*SC93F8433封装未引出的管脚:无 +*SC93F8432封装未引出的管脚:P50/P51 +*SC93F8431封装未引出的管脚:P50/P51 +******************************************/ +sbit P52 = P5^2; +sbit P51 = P5^1; +sbit P50 = P5^0; + +/**************************************************************************** +*注意:封装未引出的管脚,需设置为强推挽输出模式 +*IC选型:请根据所使用的IC型号,在初始化完IO口后,调用相对应的未引出管脚的IO口配置; +* +*****************************************************************************/ +#define SC93F8433_NIO_Init() {P1CON|=0x01;} //SC93F8433的未引出来的IO口配置 +#define SC93F8432_NIO_Init() {P0CON|=0xC0;P1CON|=0xC1;P2CON|=0x0C;P5CON|=0x03;} //SC93F8432的未引出来的IO口配置 +#define SC93F8431_NIO_Init() {P0CON|=0xEC;P1CON|=0xC1;P2CON|=0x8C;P5CON|=0x03;} //SC93F8431的未引出来的IO口配置 + +#endif \ No newline at end of file diff --git a/CFG/SC92F8363B/Keil_Mould/FWLib/SC92F_Lib/inc/sc92f.h b/CFG/SC92F8363B/Keil_Mould/FWLib/SC92F_Lib/inc/sc92f.h new file mode 100644 index 0000000..7b393f5 --- /dev/null +++ b/CFG/SC92F8363B/Keil_Mould/FWLib/SC92F_Lib/inc/sc92f.h @@ -0,0 +1,201 @@ +//************************************************************ +// Copyright (c) 深圳市赛元微电子有限公司 +// 文件名称 : sc92f.h +// 作者 : +// 模块功能 : 赛元SC92系列系统头文件 +// 局部函数列表: +// 最后更正日期: 2022年7月6日 +// 版本 : V1.10030 +// 说明 :本文件仅适用于赛元92F系列单片机 +//************************************************************* + +#ifndef _sc92f_H +#define _sc92f_H + +#ifdef SC92F854x + #include "SC92F854x_C.H" +#endif + +#ifdef SC92F754x + #include "SC92F754x_C.H" +#endif + +#ifdef SC92F844xB + #include "SC92F844xB_C.H" +#endif + +#ifdef SC92F744xB + #include "SC92F744xB_C.H" +#endif + +#ifdef SC92F846xB + #include "SC92F846xB_C.H" +#endif + +#ifdef SC92F746xB + #include "SC92F746xB_C.H" +#endif + +#ifdef SC92F836xB + #include "SC92F836xB_C.H" +#endif + +#ifdef SC92F736xB + #include "SC92F736xB_C.H" +#endif + +#ifdef SC92F742x + #include "SC92F742x_C.H" +#endif + +#ifdef SC92F7003 + #include "SC92F7003_C.H" +#endif + +#ifdef SC92F8003 + #include "SC92F8003_C.H" +#endif + +#ifdef SC92F740x + #include "SC92F740x_C.H" +#endif + +#ifdef SC92F74Ax + #include "SC92F74Ax_C.H" +#endif + +#ifdef SC92F84Ax + #include "SC92F84Ax_C.H" +#endif + +#ifdef SC92F73Ax + #include "SC92F73Ax_C.H" +#endif + +#ifdef SC92F83Ax + #include "SC92F83Ax_C.H" +#endif + +#ifdef SC92F74Ax_2 + #include "SC92F74Ax_2_C.H" +#endif + +#ifdef SC92F84Ax_2 + #include "SC92F84Ax_2_C.H" +#endif + +#ifdef SC92F730x + #include "SC92F730x_C.h" +#endif + +#ifdef SC92F827X + #include "SC92F827X_C.h" +#endif + +#ifdef SC92F837X + #include "SC92F837X_C.H" +#endif + +#ifdef SC92F7490 + #include "SC92F7490_C.H" +#endif + +#ifdef SC92F725X + #include "SC92F725X_C.h" +#endif + +#ifdef SC92F735X + #include "SC92F735X_C.h" +#endif + +#ifdef SC92F732X + #include "SC92F732X_C.H" +#endif + +#ifdef SC92FWxx + #include "SC92FWxx_C.H" +#endif + +#ifdef SC93F833x + #include "SC93F833x_C.H" +#endif + +#ifdef SC93F843x + #include "SC93F843x_C.H" +#endif + +#ifdef SC93F743x + #include "SC93F743x_C.H" +#endif + +#ifdef SC92F848x + #include "SC92F848x_C.H" +#endif + +#ifdef SC92F748x + #include "SC92F748x_C.H" +#endif + +#ifdef SC92F859x + #include "SC92F859x_C.H" +#endif + +#ifdef SC92F759x + #include "SC92F759x_C.H" +#endif + +#ifdef SC92L853x + #include "SC92L853x_C.H" +#endif + +#ifdef SC92L753x + #include "SC92L753x_C.H" +#endif + +#define enableInterrupts() EA=1 /** 开启总中断 **/ +#define disableInterrupts() EA=0 /** 关闭总中断 **/ + +#define __I volatile const /*!< defines 'read only' permissions */ +#define __O volatile /*!< defines 'write only' permissions */ +#define __IO volatile /*!< defines 'read / write' permissions */ + +/*!< Signed integer types */ +typedef signed char int8_t; +typedef signed short int16_t; +typedef signed long int32_t; + +/*!< Unsigned integer types */ +typedef unsigned char uint8_t; +typedef unsigned short uint16_t; +typedef unsigned long uint32_t; + +typedef int32_t s32; +typedef int16_t s16; +typedef int8_t s8; + +typedef uint32_t u32; +typedef uint16_t u16; +typedef uint8_t u8; + +typedef enum {FALSE = 0, TRUE = !FALSE} bool; + +typedef enum {RESET = 0, SET = !RESET} FlagStatus, +ITStatus, BitStatus; + +typedef enum {DISABLE = 0, ENABLE = !DISABLE} FunctionalState; + +typedef enum {ERROR = 0, SUCCESS = !ERROR} ErrorStatus; + +typedef enum {LOW = 0, HIGH = !LOW} PriorityStatus; + +#define SET_BIT(SFR,BIT) ((SFR) |= (BIT)) + +#define CLEAR_BIT(SFR,BIT) ((SFR) &= ~(BIT)) + +#define READ_BIT(SFR, BIT) ((SFR) & (BIT)) + +#define CLEAR_REG(SFR) ((SFR) = (0x0)) + +#define WRITE_REG(SFR, VAL) ((SFR) = (VAL)) + +#endif \ No newline at end of file diff --git a/CFG/SC92F8363B/Keil_Mould/FWLib/SC92F_Lib/inc/sc92f_acmp.h b/CFG/SC92F8363B/Keil_Mould/FWLib/SC92F_Lib/inc/sc92f_acmp.h new file mode 100644 index 0000000..6844837 --- /dev/null +++ b/CFG/SC92F8363B/Keil_Mould/FWLib/SC92F_Lib/inc/sc92f_acmp.h @@ -0,0 +1,78 @@ +//************************************************************ +// Copyright (c) 深圳市赛元微电子有限公司 +// 文件名称 : sc92f_acmp.h +// 作者 : +// 模块功能 : ACMP固件库函数头文件 +// 最后更正日期: 2020/8/20 +// 版本 : V1.0001 +// 说明 : +//************************************************************* + +#ifndef _sc92f_ACMP_H_ +#define _sc92f_ACMP_H_ + +#include "sc92f.h" +#if defined(SC92F854x) || defined(SC92F754x) || defined(SC92F844xB) || defined(SC92F744xB) || defined(SC92F84Ax_2) || defined(SC92F74Ax_2)\ + || defined(SC92FWxx) || defined(SC92F859x) || defined(SC92F759x) +typedef enum +{ + ACMP_VREF_EXTERNAL = (uint8_t)0X00, //选用CMPR为ACMP的比较电压 + ACMP_VREF_1D16VDD = (uint8_t)0X01, //选用1/16VDD为ACMP的比较电压 + ACMP_VREF_2D16VDD = (uint8_t)0X02, //选用2/16VDD为ACMP的比较电压 + ACMP_VREF_3D16VDD = (uint8_t)0X03, //选用3/16VDD为ACMP的比较电压 + ACMP_VREF_4D16VDD = (uint8_t)0X04, //选用4/16VDD为ACMP的比较电压 + ACMP_VREF_5D16VDD = (uint8_t)0X05, //选用5/16VDD为ACMP的比较电压 + ACMP_VREF_6D16VDD = (uint8_t)0X06, //选用6/16VDD为ACMP的比较电压 + ACMP_VREF_7D16VDD = (uint8_t)0X07, //选用7/16VDD为ACMP的比较电压 + ACMP_VREF_8D16VDD = (uint8_t)0X08, //选用8/16VDD为ACMP的比较电压 + ACMP_VREF_9D16VDD = (uint8_t)0X09, //选用9/16VDD为ACMP的比较电压 + ACMP_VREF_10D16VDD = (uint8_t)0X0A, //选用10/16VDD为ACMP的比较电压 + ACMP_VREF_11D16VDD = (uint8_t)0X0B, //选用11/16VDD为ACMP的比较电压 + ACMP_VREF_12D16VDD = (uint8_t)0X0C, //选用12/16VDD为ACMP的比较电压 + ACMP_VREF_13D16VDD = (uint8_t)0X0D, //选用13/16VDD为ACMP的比较电压 + ACMP_VREF_14D16VDD = (uint8_t)0X0E, //选用14/16VDD为ACMP的比较电压 + ACMP_VREF_15D16VDD = (uint8_t)0X0F //选用15/16VDD为ACMP的比较电压 +} ACMP_Vref_Typedef; + +typedef enum +{ + ACMP_CHANNEL_0 = (uint8_t)0x00, //选择CMP0做ACMP输入口 + ACMP_CHANNEL_1 = (uint8_t)0x01, //选择CMP1做ACMP输入口 + ACMP_CHANNEL_2 = (uint8_t)0x02, //选择CMP2做ACMP输入口 + ACMP_CHANNEL_3 = (uint8_t)0x03, //选择CMP3做ACMP输入口 + #if defined(SC92F859x) || defined (SC92F759x) + ACMP_CHANNEL_P = (uint8_t)0x10, //选择CMPP做ACMP输入口,CMPP为基准电压1.5V + #endif +} ACMP_Channel_TypeDef; + +typedef enum +{ + ACMP_TRIGGER_NO = (uint8_t)0x00, //不产生中断 + ACMP_TRIGGER_RISE_ONLY = (uint8_t)0x04, //模拟比较器触发方式为上升沿 + ACMP_TRIGGER_FALL_ONLY = (uint8_t)0x08, //模拟比较器触发方式为下降沿 + ACMP_TRIGGER_RISE_FALL = (uint8_t)0x0C //模拟比较器触发方式为上升沿与下降沿 +} ACMP_TriggerMode_Typedef; + +typedef enum +{ + ACMP_FLAG_CMPIF = (uint8_t)0x40, //ACMP中断标志位 + ACMP_FLAG_CMPSTA = (uint8_t)0x20 //ACMP输出状态 +} ACMP_Flag_TypeDef; + +void ACMP_DeInit(void); +void ACMP_Init(ACMP_Vref_Typedef ACMP_Vref, + ACMP_Channel_TypeDef ACMP_Channel); +void ACMP_SetTriggerMode(ACMP_TriggerMode_Typedef + ACMP_TriggerMode); +void ACMP_Cmd(FunctionalState NewState); +void ACMP_ITConfig(FunctionalState NewState, + PriorityStatus Priority); +FlagStatus ACMP_GetFlagStatus(ACMP_Flag_TypeDef + ACMP_Flag); +void ACMP_ClearFlag(void); + +#endif + +#endif + +/******************* (C) COPYRIGHT 2020 SinOne Microelectronics *****END OF FILE****/ \ No newline at end of file diff --git a/CFG/SC92F8363B/Keil_Mould/FWLib/SC92F_Lib/inc/sc92f_adc.h b/CFG/SC92F8363B/Keil_Mould/FWLib/SC92F_Lib/inc/sc92f_adc.h new file mode 100644 index 0000000..d0a2d7d --- /dev/null +++ b/CFG/SC92F8363B/Keil_Mould/FWLib/SC92F_Lib/inc/sc92f_adc.h @@ -0,0 +1,326 @@ +//************************************************************ +// Copyright (c) 深圳市赛元微电子有限公司 +// 文件名称: sc92f_adc.h +// 作者: 赛元应用团队 +// 模块功能: ADC固件库函数头文件 +// 最后更正日期: 2022年3月23日 +// 版本: V1.100014 +// 说明: 本文件仅适用于赛元92F/93F/92L系列单片机 +//************************************************************* +#ifndef _sc92f_ADC_H_ +#define _sc92f_ADC_H_ + +/* 头文件引用 */ +#include "sc92f.h" +/* 说明:ADC参考电源枚举定义在sc92f_option.h,使用ADC请注意将该文件导入 */ +#include "sc92f_option.h" + +#if !defined(SC92F827X) && !defined(SC92F837X) +/* ADC采样时钟分频转换 */ +#if defined(SC92F854x) || defined(SC92F754x) || defined(SC92F844xB) || defined(SC92F744xB) || defined(SC92F84Ax_2) || defined(SC92F74Ax_2) || defined(SC92FWxx) +typedef enum +{ + ADC_PRESSEL_FOSC_D6 = (uint8_t)0x02, //预分频 fADC = fHRC/6 + ADC_PRESSEL_FOSC_D12 = (uint8_t)0x01 //预分频 fADC = fHRC/12 +} ADC_PresSel_TypeDef; +#elif defined (SC92F846xB) || defined (SC92F746xB) || defined (SC92F836xB) || defined (SC92F736xB)|| defined (SC92F83Ax) || defined (SC92F73Ax)\ + || defined (SC92F84Ax) || defined (SC92F74Ax) || defined (SC92F7003) || defined (SC92F8003) || defined (SC92F740x) +typedef enum +{ + ADC_PRESSEL_FHRC_D32 = (uint8_t)0x00, //预分频 fADC = fHRC/32 + ADC_PRESSEL_FHRC_D24 = (uint8_t)0x01, //预分频 fADC = fHRC/24 + ADC_PRESSEL_FHRC_D16 = (uint8_t)0x02, //预分频 fADC = fHRC/16 + ADC_PRESSEL_FHRC_D12 = (uint8_t)0x03, //预分频 fADC = fHRC/12 + ADC_PRESSEL_FHRC_D8 = (uint8_t)0x04, //预分频 fADC = fHRC/8 + ADC_PRESSEL_FHRC_D6 = (uint8_t)0x05, //预分频 fADC = fHRC/6 + ADC_PRESSEL_FHRC_D4 = (uint8_t)0x06, //预分频 fADC = fHRC/4 + ADC_PRESSEL_FHRC_D3 = (uint8_t)0x07 //预分频 fADC = fHRC/3 +} ADC_PresSel_TypeDef; +#elif defined (SC92F742x) || defined (SC92F730x) || defined (SC92F725X) || defined (SC92F735X) || defined (SC92F732X) || defined (SC92F7490)\ + || defined (SC93F833x) || defined (SC93F843x) || defined (SC93F743x) +typedef enum +{ + ADC_PRESSEL_2_MHz = (uint8_t)0x00, //预分频 fADC = 2MHz + ADC_PRESSEL_333_kHz = (uint8_t)0x20 //预分频 fADC = 333kHz +} ADC_PresSel_TypeDef; +#elif defined(SC92F848x) || defined(SC92F748x) +typedef enum +{ + ADC_PRESSEL_FSYS_D16 = (uint8_t)0x00, //预分频 fADC = fSYS/16 + ADC_PRESSEL_FSYS_D12 = (uint8_t)0x01, //预分频 fADC = fSYS/12 + ADC_PRESSEL_FSYS_D8 = (uint8_t)0x02, //预分频 fADC = fSYS/8 + ADC_PRESSEL_FSYS_D6 = (uint8_t)0x03, //预分频 fADC = fSYS/6 + ADC_PRESSEL_FSYS_D4 = (uint8_t)0x04, //预分频 fADC = fSYS/4 + ADC_PRESSEL_FSYS_D3 = (uint8_t)0x05, //预分频 fADC = fSYS/3 + ADC_PRESSEL_FSYS_D2 = (uint8_t)0x06, //预分频 fADC = fSYS/2 + ADC_PRESSEL_FSYS_D1 = (uint8_t)0x07 //预分频 fADC = fSYS/1 +} ADC_PresSel_TypeDef; +#elif defined(SC92F859x) || defined(SC92F759x) +typedef enum +{ + ADC_PRESSEL_FSYS_D16 = (uint8_t)0x00, //预分频 fADC = fSYS/16 + ADC_PRESSEL_FSYS_D12 = (uint8_t)0x01, //预分频 fADC = fSYS/12 + ADC_PRESSEL_FSYS_D6 = (uint8_t)0x02, //预分频 fADC = fSYS/6 + ADC_PRESSEL_FSYS_D4 = (uint8_t)0x03, //预分频 fADC = fSYS/4 +} ADC_PresSel_TypeDef; +#elif defined (SC92L853x) || defined (SC92L753x) +typedef enum +{ + ADC_PRESSEL_3CLOCK = (uint8_t)0x10, //采样时间为3个系统时钟 + ADC_PRESSEL_6CLOCK = (uint8_t)0x14, //采样时间为6个系统时钟 + ADC_PRESSEL_16CLOCK = (uint8_t)0x18, //采样时间为16个系统时钟 + ADC_PRESSEL_32CLOCK = (uint8_t)0x1c //采样时间为32个系统时钟 +} ADC_PresSel_TypeDef; +#endif + +#if defined(SC92F854x) || defined(SC92F754x) || defined(SC92F844xB) || defined(SC92F744xB) || defined(SC92F84Ax_2) || defined(SC92F74Ax_2)\ +|| defined(SC92FWxx) || defined(SC92F859x) || defined (SC92F759x) +typedef enum +{ + ADC_Cycle_6Cycle = (uint8_t)0x00, //ADC采样时间为6个ADC采样时钟周期 + ADC_Cycle_36Cycle = (uint8_t)0x04 //ADC采样时间为36个ADC采样时钟周期 +} ADC_Cycle_TypeDef; +#elif defined (SC92F846xB) || defined (SC92F746xB) || defined (SC92F836xB) || defined (SC92F736xB) || defined (SC92F83Ax) || defined (SC92F73Ax)\ + || defined (SC92F84Ax) || defined (SC92F74Ax) || defined (SC92F7003) || defined(SC92F8003) || defined (SC92F740x) || defined (SC92F848x) || defined (SC92F748x) +typedef enum +{ + ADC_Cycle_6Cycle = (uint8_t)0x00, //ADC采样时间为6个ADC采样时钟周期 + ADC_Cycle_36Cycle = (uint8_t)0x08 //ADC采样时间为36个ADC采样时钟周期 +} ADC_Cycle_TypeDef; +#elif defined (SC92F742x) || defined (SC92F730x) || defined (SC92F725X) || defined (SC92F735X) || defined (SC92F732X)\ +|| defined (SC92F7490) || defined (SC93F833x) || defined (SC93F843x) || defined (SC93F743x) || defined (SC92L853x) || defined (SC92L753x) +typedef enum +{ + ADC_Cycle_Null = (uint8_t)0x00, +} ADC_Cycle_TypeDef; +#endif + +#if defined(SC92F854x) || defined(SC92F754x) || defined(SC92F844xB) || defined(SC92F744xB) || defined(SC92F84Ax_2) || defined(SC92F74Ax_2)\ + || defined(SC92FWxx) || defined(SC92F859x) || defined(SC92F759x) +typedef enum +{ + ADC_CHANNEL_0 = (uint8_t)0x00, //选择AIN0做AD输入口 + ADC_CHANNEL_1 = (uint8_t)0x01, //选择AIN1做AD输入口 + ADC_CHANNEL_2 = (uint8_t)0x02, //选择AIN2做AD输入口 + ADC_CHANNEL_3 = (uint8_t)0x03, //选择AIN3做AD输入口 + ADC_CHANNEL_4 = (uint8_t)0x04, //选择AIN4做AD输入口 + ADC_CHANNEL_5 = (uint8_t)0x05, //选择AIN5做AD输入口 + ADC_CHANNEL_6 = (uint8_t)0x06, //选择AIN6做AD输入口 + ADC_CHANNEL_7 = (uint8_t)0x07, //选择AIN7做AD输入口 + ADC_CHANNEL_8 = (uint8_t)0x08, //选择AIN8做AD输入口 + ADC_CHANNEL_9 = (uint8_t)0x09, //选择AIN9做AD输入口 + ADC_CHANNEL_10 = (uint8_t)0x0A, //选择AIN10做AD输入口 + ADC_CHANNEL_11 = (uint8_t)0x0B, //选择AIN11做AD输入口 + ADC_CHANNEL_12 = (uint8_t)0x0C, //选择AIN12做AD输入口 + ADC_CHANNEL_13 = (uint8_t)0x0D, //选择AIN13做AD输入口 + ADC_CHANNEL_14 = (uint8_t)0x0E, //选择AIN14做AD输入口 + ADC_CHANNEL_15 = (uint8_t)0x0F, //选择AIN15做AD输入口 + ADC_CHANNEL_VDD_D4 = (uint8_t)0x1f //选择内部1/4VDD做AD输入口 +} ADC_Channel_TypeDef; +#elif defined(SC92F7003) || defined(SC92F8003) || defined(SC92F740x) +typedef enum +{ + ADC_CHANNEL_0 = (uint8_t)0x00, //选择AIN0做AD输入口 + ADC_CHANNEL_1 = (uint8_t)0x01, //选择AIN1做AD输入口 + ADC_CHANNEL_2 = (uint8_t)0x02, //选择AIN2做AD输入口 + ADC_CHANNEL_3 = (uint8_t)0x03, //选择AIN3做AD输入口 + ADC_CHANNEL_4 = (uint8_t)0x04, //选择AIN4做AD输入口 + ADC_CHANNEL_5 = (uint8_t)0x05, //选择AIN5做AD输入口 + ADC_CHANNEL_6 = (uint8_t)0x06, //选择AIN6做AD输入口 + ADC_CHANNEL_VDD_D4 = (uint8_t)0x1f //选择内部1/4VDD做AD输入口 +} ADC_Channel_TypeDef; +#elif defined(SC92F846xB) || defined(SC92F746xB) || defined(SC92F836xB) || defined(SC92F736xB) || defined(SC92F83Ax)\ +|| defined(SC92F73Ax) || defined(SC92F84Ax) || defined(SC92F74Ax) || defined(SC92F742x) || defined(SC92F725X)\ +|| defined(SC92F735X) || defined(SC92F732X) || defined(SC92F848x) || defined(SC92F748x) || defined (SC92L853x) || defined (SC92L753x) +typedef enum +{ + ADC_CHANNEL_0 = (uint8_t)0x00, //选择AIN0做AD输入口 + ADC_CHANNEL_1 = (uint8_t)0x01, //选择AIN1做AD输入口 + ADC_CHANNEL_2 = (uint8_t)0x02, //选择AIN2做AD输入口 + ADC_CHANNEL_3 = (uint8_t)0x03, //选择AIN3做AD输入口 + ADC_CHANNEL_4 = (uint8_t)0x04, //选择AIN4做AD输入口 + ADC_CHANNEL_5 = (uint8_t)0x05, //选择AIN5做AD输入口 + ADC_CHANNEL_6 = (uint8_t)0x06, //选择AIN6做AD输入口 + ADC_CHANNEL_7 = (uint8_t)0x07, //选择AIN7做AD输入口 + ADC_CHANNEL_8 = (uint8_t)0x08, //选择AIN8做AD输入口 + ADC_CHANNEL_9 = (uint8_t)0x09, //选择AIN9做AD输入口 + ADC_CHANNEL_VDD_D4 = (uint8_t)0x1f //选择内部1/4VDD做AD输入口 +} ADC_Channel_TypeDef; +#elif defined(SC92F730x) +typedef enum +{ + ADC_CHANNEL_0 = (uint8_t)0x00, //选择AIN0做AD输入口 + ADC_CHANNEL_1 = (uint8_t)0x01, //选择AIN1做AD输入口 + ADC_CHANNEL_6 = (uint8_t)0x06, //选择AIN6做AD输入口 + ADC_CHANNEL_7 = (uint8_t)0x07, //选择AIN7做AD输入口 + ADC_CHANNEL_VDD_D4 = (uint8_t)0x1f //选择内部1/4VDD做AD输入口 +} ADC_Channel_TypeDef; +#elif defined(SC92F7490) +typedef enum +{ + ADC_CHANNEL_0 = (uint8_t)0x00, //选择AIN0做AD输入口 + ADC_CHANNEL_1 = (uint8_t)0x01, //选择AIN1做AD输入口 + ADC_CHANNEL_VDD_D4 = (uint8_t)0x1f //选择内部1/4VDD做AD输入口 +} ADC_Channel_TypeDef; +#elif defined(SC93F833x) || defined(SC93F843x) || defined(SC93F743x) +typedef enum +{ + ADC_CHANNEL_0 = (uint8_t)0x00, //选择AIN0做AD输入口 + ADC_CHANNEL_1 = (uint8_t)0x01, //选择AIN1做AD输入口 + ADC_CHANNEL_2 = (uint8_t)0x02, //选择AIN2做AD输入口 + ADC_CHANNEL_3 = (uint8_t)0x03, //选择AIN3做AD输入口 + ADC_CHANNEL_4 = (uint8_t)0x04, //选择AIN4做AD输入口 + ADC_CHANNEL_5 = (uint8_t)0x05, //选择AIN5做AD输入口 + ADC_CHANNEL_6 = (uint8_t)0x06, //选择AIN6做AD输入口 + ADC_CHANNEL_7 = (uint8_t)0x07, //选择AIN7做AD输入口 + ADC_CHANNEL_8 = (uint8_t)0x08, //选择AIN8做AD输入口 + ADC_CHANNEL_9 = (uint8_t)0x09, //选择AIN9做AD输入口 + ADC_CHANNEL_9_PGA = (uint8_t)0x19, //选择AIN9做PGA输入口 + ADC_CHANNEL_Temp = (uint8_t)0x0e, //选择内部温度传感器做为AD输入口 + ADC_CHANNEL_VDD_D4 = (uint8_t)0x0f //选择内部1/4VDD做AD输入口 +} ADC_Channel_TypeDef; +#endif + +#if defined(SC92F854x) || defined(SC92F754x) || defined(SC92F844xB) || defined(SC92F744xB) || defined(SC92F84Ax_2) || defined(SC92F74Ax_2)\ + || defined(SC92FWxx) || defined(SC92F859x) || defined(SC92F759x) +typedef enum +{ + ADC_EAIN_0 = (uint16_t)0x0001, //选择AIN0 + ADC_EAIN_1 = (uint16_t)0x0002, //选择AIN1 + ADC_EAIN_2 = (uint16_t)0x0004, //选择AIN2 + ADC_EAIN_3 = (uint16_t)0x0008, //选择AIN3 + ADC_EAIN_4 = (uint16_t)0x0010, //选择AIN4 + ADC_EAIN_5 = (uint16_t)0x0020, //选择AIN5 + ADC_EAIN_6 = (uint16_t)0x0040, //选择AIN6 + ADC_EAIN_7 = (uint16_t)0x0080, //选择AIN7 + ADC_EAIN_8 = (uint16_t)0x0100, //选择AIN8 + ADC_EAIN_9 = (uint16_t)0x0200, //选择AIN9 + ADC_EAIN_10 = (uint16_t)0x0400, //选择AIN10 + ADC_EAIN_11 = (uint16_t)0x0800, //选择AIN11 + ADC_EAIN_12 = (uint16_t)0x1000, //选择AIN12 + ADC_EAIN_13 = (uint16_t)0x2000, //选择AIN13 + ADC_EAIN_14 = (uint16_t)0x4000, //选择AIN14 + ADC_EAIN_15 = (uint16_t)0x8000 //选择AIN15 +} ADC_EAIN_TypeDef; +#elif defined(SC92F7003) || defined(SC92F8003) || defined(SC92F740x) +typedef enum +{ + ADC_EAIN_0 = (uint16_t)0x0001, //选择AIN0 + ADC_EAIN_1 = (uint16_t)0x0002, //选择AIN1 + ADC_EAIN_2 = (uint16_t)0x0004, //选择AIN2 + ADC_EAIN_3 = (uint16_t)0x0008, //选择AIN3 + ADC_EAIN_4 = (uint16_t)0x0010, //选择AIN4 + ADC_EAIN_5 = (uint16_t)0x0020, //选择AIN5 + ADC_EAIN_6 = (uint16_t)0x0040 //选择AIN6 +} ADC_EAIN_TypeDef; +#elif defined(SC92F846xB) || defined(SC92F746xB) || defined(SC92F836xB) || defined(SC92F736xB) || defined(SC92F83Ax)\ +|| defined(SC92F73Ax) || defined(SC92F84Ax) || defined(SC92F74Ax) || defined(SC92F742x) || defined(SC92F725X)\ +|| defined(SC92F735X) || defined(SC92F732X) || defined(SC93F833x) || defined(SC93F843x) || defined(SC93F743x)\ +|| defined(SC92F848x) || defined(SC92F748x) || defined (SC92L853x) || defined (SC92L753x) +typedef enum +{ + ADC_EAIN_0 = (uint16_t)0x0001, //选择AIN0 + ADC_EAIN_1 = (uint16_t)0x0002, //选择AIN1 + ADC_EAIN_2 = (uint16_t)0x0004, //选择AIN2 + ADC_EAIN_3 = (uint16_t)0x0008, //选择AIN3 + ADC_EAIN_4 = (uint16_t)0x0010, //选择AIN4 + ADC_EAIN_5 = (uint16_t)0x0020, //选择AIN5 + ADC_EAIN_6 = (uint16_t)0x0040, //选择AIN6 + ADC_EAIN_7 = (uint16_t)0x0080, //选择AIN7 + ADC_EAIN_8 = (uint16_t)0x0100, //选择AIN8 + ADC_EAIN_9 = (uint16_t)0x0200, //选择AIN9 +} ADC_EAIN_TypeDef; +#elif defined(SC92F730x) +typedef enum +{ + ADC_EAIN_0 = (uint16_t)0x0001, //选择AIN0 + ADC_EAIN_1 = (uint16_t)0x0002, //选择AIN1 + ADC_EAIN_6 = (uint16_t)0x0040, //选择AIN6 + ADC_EAIN_7 = (uint16_t)0x0080, //选择AIN7 +} ADC_EAIN_TypeDef; +#elif defined(SC92F7490) +typedef enum +{ + ADC_EAIN_0 = (uint16_t)0x0001, //选择AIN0 + ADC_EAIN_1 = (uint16_t)0x0002, //选择AIN1 +} ADC_EAIN_TypeDef; +#endif + +/* 内部温度采集和可调节增益放大器(PGA)枚举*/ +#if defined(SC93F833x) || defined(SC93F843x) || defined(SC93F743x) +/* PGA共模电压枚举 */ +typedef enum +{ + ADC_PGACOM_0V = 0x00, //共模电压为0V + ADC_PGACOM_1_2V = 0x40, //共模电压为1.2V +} ADC_PGACOM_TypeDef; + +/* PGA同相增益枚举 */ +typedef enum +{ + ADC_PGAGAN_NonInvert20 = 0x00, //同相增益为20,反相增益为19 + ADC_PGAGAN_NonInvert100 = 0x20, //同相增益为100,反相增益为99 +} ADC_PGAGAN_TypeDef; + +/* PGA相位枚举 */ +typedef enum +{ + ADC_PGAIPT_NonInvert = 0x00, //同相输入 + ADC_PGAIPT_Invert = 0x10, //反相输入 +} ADC_PGAIPT_TypeDef; +#endif + +/*******************************宏函数*******************************/ +/***************************************************** +*函数名称:void ADC_ITConfig(FunctionalState NewState, PriorityStatus Priority) +*函数功能:ADC中断初始化 +*入口参数: +FunctionalState:NewState:中断使能/关闭选择 +PriorityStatus:Priority:中断优先级选择 +*出口参数:void +*****************************************************/ +#define ADC_ITConfig(NewState,Priority) \ + do{ \ + EADC = (bit)NewState; \ + IPADC = (bit)Priority; \ + }while(0) + +/***************************************************** +*函数名称:void ADC_StartConversion(void) +*函数功能:开始一次AD转换 +*入口参数:void +*出口参数:void +*****************************************************/ +#define ADC_StartConversion() SET_BIT(ADCCON,0X40) + +/* 内部温度采集和可调节增益放大器函数声明 */ +#if defined(SC93F833x) || defined(SC93F843x) || defined(SC93F743x) +/* 内部温度采集相关函数声明 */ +void ADC_TSCmd(FunctionalState NewState); +void ADC_CHOPConfig(PriorityStatus NewState); +uint16_t ADC_Get_TS_StandardData(void); +float ADC_GetTSValue(void); +/* PGA相关函数声明 */ +void ADC_PGAConfig(ADC_PGACOM_TypeDef ADC_PGACOM, ADC_PGAGAN_TypeDef ADC_PGAGAN, ADC_PGAIPT_TypeDef ADC_PGAIPT); +void ADC_PGACmd(PriorityStatus NewState); +#endif + +/* ADC通用函数声明 */ +void ADC_DeInit(void); +void ADC_Init(ADC_PresSel_TypeDef ADC_PrescalerSelection, ADC_Cycle_TypeDef ADC_Cycle); +void ADC_ChannelConfig(ADC_Channel_TypeDef ADC_Channel, + FunctionalState NewState); +void ADC_Cmd(FunctionalState NewState); +unsigned int ADC_GetConversionValue(void); +FlagStatus ADC_GetFlagStatus(void); +void ADC_ClearFlag(void); +void ADC_EAINConfig(uint16_t ADC_EAIN_Select, + FunctionalState NewState); +void ADC_VrefConfig(ADC_Vref_TypeDef ADC_Vref); + + +#endif + +#endif + +/******************* (C) COPYRIGHT 2020 SinOne Microelectronics *****END OF FILE****/ \ No newline at end of file diff --git a/CFG/SC92F8363B/Keil_Mould/FWLib/SC92F_Lib/inc/sc92f_btm.h b/CFG/SC92F8363B/Keil_Mould/FWLib/SC92F_Lib/inc/sc92f_btm.h new file mode 100644 index 0000000..5eb4f1b --- /dev/null +++ b/CFG/SC92F8363B/Keil_Mould/FWLib/SC92F_Lib/inc/sc92f_btm.h @@ -0,0 +1,89 @@ +//************************************************************ +// Copyright (c) 深圳市赛元微电子有限公司 +// 文件名称: sc92f_btm.h +// 作者: 赛元应用团队 +// 模块功能: BTM固件库函数H文件 +// 最后更正日期: 2022年4月2日 +// 版本: V1.10002 +// 说明: +//************************************************************* +#ifndef _sc92f_BTM_H_ +#define _sc92f_BTM_H_ + +#include "sc92f.h" + +#if defined(SC92F748x) || defined(SC92F848x) || defined(SC92F859x) || defined(SC92F759x) || defined (SC92L853x) || defined (SC92L753x) +typedef enum +{ + BTM_TIMEBASE_15_625MS = (uint8_t)0x00, //BTM每15.625MS产生一次中断 + BTM_TIMEBASE_31_25MS = (uint8_t)0x01, //BTM每31.25MS产生一次中断 + BTM_TIMEBASE_62_5MS = (uint8_t)0x02, //BTM每62.5MS产生一次中断 + BTM_TIMEBASE_125MS = (uint8_t)0x03, //BTM每125MS产生一次中断 + BTM_TIMEBASE_250MS = (uint8_t)0x04, //BTM每0.25S产生一次中断 + BTM_TIMEBASE_500MS = (uint8_t)0x05, //BTM每0.5S产生一次中断 + BTM_TIMEBASE_1S = (uint8_t)0x06, //BTM每1S产生一次中断 + BTM_TIMEBASE_2S = (uint8_t)0x07, //BTM每2S产生一次中断 + BTM_TIMEBASE_8S = (uint8_t)0x09, //BTM每8S产生一次中断 + BTM_TIMEBASE_16S = (uint8_t)0x0A, //BTM每16S产生一次中断 + BTM_TIMEBASE_32S = (uint8_t)0x0B, //BTM每32产生一次中断 +} BTM_Timebase_TypeDef; +#elif defined (SC92F732X) +typedef enum +{ + BTM_TIMEBASE_15_625MS = (uint8_t)0x00, //BTM每15.625MS产生一次中断 + BTM_TIMEBASE_31_25MS = (uint8_t)0x01, //BTM每31.25MS产生一次中断 + BTM_TIMEBASE_62_5MS = (uint8_t)0x02, //BTM每62.5MS产生一次中断 + BTM_TIMEBASE_125MS = (uint8_t)0x03, //BTM每125MS产生一次中断 + BTM_TIMEBASE_250MS = (uint8_t)0x04, //BTM每0.25S产生一次中断 + BTM_TIMEBASE_500MS = (uint8_t)0x05, //BTM每0.5S产生一次中断 + BTM_TIMEBASE_1S = (uint8_t)0x06, //BTM每1S产生一次中断 + BTM_TIMEBASE_2S = (uint8_t)0x07, //BTM每2S产生一次中断 +} BTM_Timebase_TypeDef; +#else +typedef enum +{ + BTM_TIMEBASE_15_625MS = (uint8_t)0x00, //BTM每15.625MS产生一次中断 + BTM_TIMEBASE_31_25MS = (uint8_t)0x01, //BTM每31.25MS产生一次中断 + BTM_TIMEBASE_62_5MS = (uint8_t)0x02, //BTM每62.5MS产生一次中断 + BTM_TIMEBASE_125MS = (uint8_t)0x03, //BTM每125MS产生一次中断 + BTM_TIMEBASE_250MS = (uint8_t)0x04, //BTM每0.25S产生一次中断 + BTM_TIMEBASE_500MS = (uint8_t)0x05, //BTM每0.5S产生一次中断 + BTM_TIMEBASE_1S = (uint8_t)0x06, //BTM每1S产生一次中断 + BTM_TIMEBASE_2S = (uint8_t)0x07, //BTM每2S产生一次中断 + BTM_TIMEBASE_4S = (uint8_t)0x08, //BTM每4S产生一次中断 +} BTM_Timebase_TypeDef; +#endif + +/*******************************宏函数*******************************/ +/************************************************** +*函数名称:void BTM_DeInit(void) +*函数功能:BTM相关寄存器复位至缺省值 +*入口参数:void +*出口参数:void +**************************************************/ +#define BTM_DeInit() CLEAR_REG(BTMCON) + +/***************************************************** +*函数名称:void BTM_GetFlagStatus(void) +*函数功能:获取BTM中断标志状态 +*入口参数:void +*出口参数: +FlagStatus:BTM中断标志状态 +*****************************************************/ +#define BTM_GetFlagStatus() ((READ_BIT(BTMCON,0x40)) ? (SET):(RESET)) + +/***************************************************** +*函数名称:void BTM_ClearFlag(void) +*函数功能:清除BTM中断标志状态 +*入口参数:void +*出口参数:void +*****************************************************/ +#define BTM_ClearFlag() CLEAR_BIT(BTMCON,0x40) + +void BTM_Init(BTM_Timebase_TypeDef BTM_Timebase); +void BTM_Cmd(FunctionalState NewState); +void BTM_ITConfig(FunctionalState NewState, + PriorityStatus Priority); +#endif + +/******************* (C) COPYRIGHT 2020 SinOne Microelectronics *****END OF FILE****/ \ No newline at end of file diff --git a/CFG/SC92F8363B/Keil_Mould/FWLib/SC92F_Lib/inc/sc92f_chksum.h b/CFG/SC92F8363B/Keil_Mould/FWLib/SC92F_Lib/inc/sc92f_chksum.h new file mode 100644 index 0000000..b75a7b1 --- /dev/null +++ b/CFG/SC92F8363B/Keil_Mould/FWLib/SC92F_Lib/inc/sc92f_chksum.h @@ -0,0 +1,28 @@ +//************************************************************ +// Copyright (c) 深圳市赛元微电子有限公司 +// 文件名称 : sc92f_chksum.h +// 作者 : +// 模块功能 : CHKSUM固件库函数头文件 +// 最后更正日期: 2021/8/20 +// 版本 : V1.10000 +// 说明 : +//************************************************************* + +#ifndef _sc92f_CHKSUM_H_ +#define _sc92f_CHKSUM_H_ + +#include "sc92f.h" + +#if defined(SC92F7003) || defined(SC92F8003) || defined(SC92F736xB) || defined(SC92F836xB) || defined(SC92F740x) || defined(SC92F742x)\ + || defined(SC92F73Ax) || defined(SC92F83Ax) || defined(SC92F744xB) || defined(SC92F844xB) || defined(SC92F746xB) || defined(SC92F846xB)\ + || defined(SC92F748x) || defined(SC92F848x) || defined(SC92F74Ax) || defined(SC92F84Ax) || defined(SC92F74Ax_2) || defined(SC92F84Ax_2)\ + || defined(SC92F754x) || defined (SC92F854x) || defined (SC92F759x) || defined(SC92F859x) || defined (SC92F7490) || defined(SC92FWxx)\ + || defined(SC92F827X) || defined(SC92F847X) + void CHKSUM_DeInit(void); + void CHKSUM_StartOperation(void); + uint16_t CHKSUM_GetCheckValue(void); +#endif + +#endif + +/******************* (C) COPYRIGHT 2020 SinOne Microelectronics *****END OF FILE****/ \ No newline at end of file diff --git a/CFG/SC92F8363B/Keil_Mould/FWLib/SC92F_Lib/inc/sc92f_conf.h b/CFG/SC92F8363B/Keil_Mould/FWLib/SC92F_Lib/inc/sc92f_conf.h new file mode 100644 index 0000000..ad2c889 --- /dev/null +++ b/CFG/SC92F8363B/Keil_Mould/FWLib/SC92F_Lib/inc/sc92f_conf.h @@ -0,0 +1,40 @@ +//************************************************************ +// Copyright (c) 深圳市赛元微电子有限公司 +// 文件名称 : sc92f_conf.h +// 作者 : +// 模块功能 : sc92f配置头文件 +// 最后更正日期: 2022/01/24 +// 版本 : V1.10002 +// 说明 :本文件仅适用于赛元92F系列单片机 +//************************************************************* + +#ifndef _sc92f_CONF_H_ +#define _sc92f_CONF_H_ + +#include "sc92f_gpio.h" +#include "sc92f_timer0.h" +#include "sc92f_timer1.h" +#include "sc92f_timer2.h" +#include "sc92f_timer3.h" +#include "sc92f_timer4.h" +#include "sc92f_adc.h" +#include "sc92f_btm.h" +#include "sc92f_pwm.h" +#include "sc92f_int.h" +#include "sc92f_uart0.h" +#include "sc92f_ssi.h" +#include "sc92f_chksum.h" +#include "sc92f_iap.h" +#include "sc92f_option.h" +#include "sc92f_wdt.h" +#include "sc92f_pwr.h" +#include "sc92f_ddic.h" +#include "sc92f_acmp.h" +#include "sc92f_mdu.h" +#include "sc92f_CRC.h" +#include "sc92f_usci0.h" +#include "sc92f_usci1.h" +#include "sc92f_usci2.h" +#include "sc92f_lpd.h" + +#endif \ No newline at end of file diff --git a/CFG/SC92F8363B/Keil_Mould/FWLib/SC92F_Lib/inc/sc92f_crc.h b/CFG/SC92F8363B/Keil_Mould/FWLib/SC92F_Lib/inc/sc92f_crc.h new file mode 100644 index 0000000..bafba09 --- /dev/null +++ b/CFG/SC92F8363B/Keil_Mould/FWLib/SC92F_Lib/inc/sc92f_crc.h @@ -0,0 +1,24 @@ +//************************************************************ +// Copyright (c) 深圳市赛元微电子有限公司 +// 文件名称 : sc92F_CRC.h +// 作者 : +// 模块功能 : CRC固件库函数头文件 +// 最后更正日期: 2020/8/14 +// 版本 : V1.0 +// 说明 :该文件仅适用于SC92F系列芯片 +//************************************************************* + +#ifndef _sc92f_CRC_H_ +#define _sc92f_CRC_H_ + +#include "sc92f.h" + +#if defined (SC92L853x) || defined (SC92L753x) +uint32_t CRC_All(void); //根据IAP Range选项,硬件CRC运算CODE内容,返回CRC结果 +uint32_t CRC_Frame(uint8_t *buff, + uint8_t Length); //软件CRC,将buff指向的数组进行CRC运算,返回CRC结果 +#endif + +#endif + +/******************* (C) COPYRIGHT 2020 SinOne Microelectronics *****END OF FILE****/ \ No newline at end of file diff --git a/CFG/SC92F8363B/Keil_Mould/FWLib/SC92F_Lib/inc/sc92f_ddic.h b/CFG/SC92F8363B/Keil_Mould/FWLib/SC92F_Lib/inc/sc92f_ddic.h new file mode 100644 index 0000000..3933fe3 --- /dev/null +++ b/CFG/SC92F8363B/Keil_Mould/FWLib/SC92F_Lib/inc/sc92f_ddic.h @@ -0,0 +1,195 @@ +//************************************************************ +// Copyright (c) 深圳市赛元微电子有限公司 +// 文件名称 : sc92f_ddic.c +// 作者 : +// 模块功能 : DDIC固件库函数C文件 +// 局部函数列表: +// 最后更正日期: 2022/01/20 +// 版本 : V1.10002 +// 说明 : +//************************************************************* +#ifndef _sc92f_DDIC_H_ +#define _sc92f_DDIC_H_ + +#include "sc92f.h" + +#if defined(SC92F854x) || defined(SC92F754x) || defined(SC92F844xB) || defined(SC92F744xB) || defined(SC92F84Ax_2) || defined(SC92F74Ax_2)\ + || defined(SC92F859x) || defined(SC92F759x) || defined (SC92L853x) || defined (SC92L753x) +typedef enum +{ + DDIC_PIN_X0 = ((uint8_t)0x01), //Px0口打开显示驱动功能 + DDIC_PIN_X1 = ((uint8_t)0x02), //Px1口打开显示驱动功能 + DDIC_PIN_X2 = ((uint8_t)0x04), //Px2口打开显示驱动功能 + DDIC_PIN_X3 = ((uint8_t)0x08), //Px3口打开显示驱动功能 + DDIC_PIN_X4 = ((uint8_t)0x10), //Px4口打开显示驱动功能 + DDIC_PIN_X5 = ((uint8_t)0x20), //Px5口打开显示驱动功能 + DDIC_PIN_X6 = ((uint8_t)0x40), //Px6口打开显示驱动功能 + DDIC_PIN_X7 = ((uint8_t)0x80), //Px7口打开显示驱动功能 +} DDIC_Pin_TypeDef; + +typedef enum +{ + DDIC_DUTYCYCLE_D8 = (uint8_t)0x00, //1/8 占空比 + DDIC_DUTYCYCLE_D6 = (uint8_t)0x10, //1/6 占空比 + DDIC_DUTYCYCLE_D5 = (uint8_t)0x20, //1/5 占空比 + DDIC_DUTYCYCLE_D4 = (uint8_t)0x30 //1/4 占空比 +} DDIC_DutyCycle_TypeDef; + +typedef enum +{ + DDIC_ResSel_100K = (uint8_t)0X00, //设定内部分压电阻为100k + DDIC_ResSel_200K = (uint8_t)0X04, //设定内部分压电阻为200k + DDIC_ResSel_400K = (uint8_t)0X08, //设定内部分压电阻为400k + DDIC_ResSel_800K = (uint8_t)0X0C //设定内部分压电阻为800k +} DDIC_ResSel_Typedef; + +typedef enum +{ + DDIC_BIAS_D3 = 0X01, //LCD偏置电压为1/3 + DDIC_BIAS_D4 = 0X00 //LCD偏置电压为1/4 +} DDIC_BiasVoltage_Typedef; + +#if defined (SC92L853x) || defined (SC92L753x) +typedef enum +{ + SEG0_27COM4_7 = (uint8_t)0x01, // 1/4占空比时,S0-S27为segment,C4-C7为common + SEG4_27COM0_3 = (uint8_t)0x00 // 1/4占空比时,S4-S27为segment,C0-C3为common +} DDIC_OutputPin_TypeDef; + +#else + +typedef enum +{ + SEG0_27COM4_7 = (uint8_t)0x00, // 1/4占空比时,S0-S27为segment,C4-C7为common + SEG4_27COM0_3 = (uint8_t)0x01 // 1/4占空比时,S4-S27为segment,C0-C3为common +} DDIC_OutputPin_TypeDef; + +#endif + +typedef enum +{ + DMOD_LCD = (uint8_t)0x00, // LCD模式 + DMOD_LED = (uint8_t)0x01 // LED模式 +} DDIC_DMOD_TypeDef; + +typedef enum +{ + DDIC_SEG0 = (uint8_t)0, //SEG0 + DDIC_SEG1 = (uint8_t)1, //SEG1 + DDIC_SEG2 = (uint8_t)2, //SEG2 + DDIC_SEG3 = (uint8_t)3, //SEG3 + DDIC_SEG4 = (uint8_t)4, //SEG4 + DDIC_SEG5 = (uint8_t)5, //SEG5 + DDIC_SEG6 = (uint8_t)6, //SEG6 + DDIC_SEG7 = (uint8_t)7, //SEG7 + DDIC_SEG8 = (uint8_t)8, //SEG8 + DDIC_SEG9 = (uint8_t)9, //SEG9 + DDIC_SEG10 = (uint8_t)10, //SEG10 + DDIC_SEG11 = (uint8_t)11, //SEG11 + DDIC_SEG12 = (uint8_t)12, //SEG12 + DDIC_SEG13 = (uint8_t)13, //SEG13 + DDIC_SEG14 = (uint8_t)14, //SEG14 + DDIC_SEG15 = (uint8_t)15, //SEG15 + DDIC_SEG16 = (uint8_t)16, //SEG16 + DDIC_SEG17 = (uint8_t)17, //SEG17 + DDIC_SEG18 = (uint8_t)18, //SEG18 + DDIC_SEG19 = (uint8_t)19, //SEG19 + DDIC_SEG20 = (uint8_t)20, //SEG20 + DDIC_SEG21 = (uint8_t)21, //SEG21 + DDIC_SEG22 = (uint8_t)22, //SEG22 + DDIC_SEG23 = (uint8_t)23, //SEG23 + DDIC_SEG24 = (uint8_t)24, //SEG24 + DDIC_SEG25 = (uint8_t)25, //SEG25 + DDIC_SEG26 = (uint8_t)26, //SEG26 + DDIC_SEG27 = (uint8_t)27, //SEG27 +} DDIC_Control_SEG_TypeDef; + +typedef enum +{ + DDIC_COM0 = (uint8_t)0x01, //COM0 + DDIC_COM1 = (uint8_t)0x02, //COM1 + DDIC_COM2 = (uint8_t)0x04, //COM2 + DDIC_COM3 = (uint8_t)0x08, //COM3 + DDIC_COM4 = (uint8_t)0x10, //COM4 + DDIC_COM5 = (uint8_t)0x20, //COM5 + DDIC_COM6 = (uint8_t)0x40, //COM6 + DDIC_COM7 = (uint8_t)0x80 //COM7 +} DDIC_Control_COM_TypeDef; +typedef enum +{ + DDIC_Control_ON = (uint8_t)0x01, //点亮 + DDIC_Control_OFF = (uint8_t)0x00 //熄灭 +} DDIC_Control_Status; + + +extern uint8_t xdata LCDRAM[30]; + +void DDIC_DeInit(void); +void DDIC_Init(DDIC_DutyCycle_TypeDef + DDIC_DutyCylce, uint8_t P0OutputPin, + uint8_t P1OutputPin, uint8_t P2OutputPin, + uint8_t P3OutputPin); +void DDIC_LEDConfig(void); +void DDIC_LCDConfig(uint8_t LCDVoltage, + DDIC_ResSel_Typedef DDIC_ResSel, + DDIC_BiasVoltage_Typedef DDIC_BiasVoltage); +void DDIC_Cmd(FunctionalState NewState); +void DDIC_OutputPinOfDutycycleD4( + DDIC_OutputPin_TypeDef DDIC_OutputPin); +void DDIC_DMOD_Selcet(DDIC_DMOD_TypeDef + DDIC_DMOD); +void DDIC_Control(DDIC_Control_SEG_TypeDef DDIC_Seg, + uint8_t DDIC_Com, + DDIC_Control_Status DDIC_Contr); +#endif + +#if defined (SC92F846xB) || defined (SC92F746xB) || defined (SC92F836xB) || defined (SC92F736xB)|| defined (SC92F83Ax) || defined (SC92F73Ax)|| defined (SC92F84Ax)|| defined (SC92F74Ax)|| defined (SC92F742x) || defined (SC92F730x) || defined (SC92F725X) || defined (SC92F735X) || defined (SC92F732X) || defined (SC93F833x) || defined (SC93F843x) || defined (SC93F743x) || defined (SC92F848x) || defined (SC92F748x) +#if defined (SC92F730x) +typedef enum +{ + DDIC_PIN_00 = ((uint8_t)0x01), //P0x0口输出LCD + DDIC_PIN_01 = ((uint8_t)0x02), //P0x1口输出LCD + DDIC_PIN_02 = ((uint8_t)0x04), //P0x2口输出LCD + DDIC_PIN_03 = ((uint8_t)0x08), //P0x3口输出LCD +} DDIC_Pin_TypeDef; +#else +typedef enum +{ + DDIC_PIN_00 = ((uint8_t)0x01), //P0x0口输出LCD + DDIC_PIN_01 = ((uint8_t)0x02), //P0x1口输出LCD + DDIC_PIN_02 = ((uint8_t)0x04), //P0x2口输出LCD + DDIC_PIN_03 = ((uint8_t)0x08), //P0x3口输出LCD + DDIC_PIN_04 = ((uint8_t)0x10), //P0x4口输出LCD +} DDIC_Pin_TypeDef; +#endif + +#if defined (SC93F833x) || defined (SC93F843x) || defined (SC93F743x) +typedef enum +{ + DDIC_ResSel_0K = (uint8_t)0X00, //关闭内部分压电阻 + DDIC_ResSel_25K = (uint8_t)0X04, //设定内部分压电阻为12.5k + DDIC_ResSel_50K = (uint8_t)0X08, //设定内部分压电阻为37.5k + DDIC_ResSel_100K = (uint8_t)0X0c //设定内部分压电阻为87.5k +} DDIC_ResSel_Typedef; +#else +typedef enum +{ + DDIC_ResSel_0K = (uint8_t)0X00, //关闭内部分压电阻 + DDIC_ResSel_12_5K = (uint8_t)0X04, //设定内部分压电阻为12.5k + DDIC_ResSel_37_5K = (uint8_t)0X08, //设定内部分压电阻为37.5k + DDIC_ResSel_87_5K = (uint8_t)0X0c //设定内部分压电阻为87.5k +} DDIC_ResSel_Typedef; + +#endif + +void DDIC_DeInit(); +void DDIC_Init(uint8_t P0OutputPin); +void DDIC_LCDConfig(DDIC_ResSel_Typedef + DDIC_ResSel); +void DDIC_Config_Init(uint8_t P0OutputPin, + DDIC_ResSel_Typedef DDIC_ResSel); +#endif + +#endif + +/******************* (C) COPYRIGHT 2022 SinOne Microelectronics *****END OF FILE****/ \ No newline at end of file diff --git a/CFG/SC92F8363B/Keil_Mould/FWLib/SC92F_Lib/inc/sc92f_gpio.h b/CFG/SC92F8363B/Keil_Mould/FWLib/SC92F_Lib/inc/sc92f_gpio.h new file mode 100644 index 0000000..c5d7396 --- /dev/null +++ b/CFG/SC92F8363B/Keil_Mould/FWLib/SC92F_Lib/inc/sc92f_gpio.h @@ -0,0 +1,94 @@ +//************************************************************ +// Copyright (c) 深圳市赛元微电子有限公司 +// 文件名称 : sc92f_gpio.h +// 作者 : +// 模块功能 : GPIO固件库函数头文件 +// 局部函数列表: +// 最后更正日期: 2021/08/20 +// 版本 : V1.10001 +// 说明 : +//************************************************************* + +#ifndef _sc92f_GPIO_H_ +#define _sc92f_GPIO_H_ + +#include "sc92f.h" + +#if defined (SC92F854x) || defined (SC92F754x) ||defined (SC92F844xB) || defined (SC92F744xB) || defined (SC92F84Ax_2) || defined (SC92F74Ax_2)\ + || defined(SC92FWxx)|| defined(SC92F859x) || defined(SC92F759x) +typedef enum +{ + + GPIO0 = (uint8_t)0x00, //P0 + GPIO1 = (uint8_t)0x01, //P1 + GPIO2 = (uint8_t)0x02, //P2 + GPIO3 = (uint8_t)0x03, //P3 + GPIO4 = (uint8_t)0x04, //P4 + GPIO5 = (uint8_t)0x05 //P5 +}GPIO_TypeDef; +#elif defined (SC92F730x ) || defined (SC92F725X) || defined (SC92F735X) || defined (SC92F8003) || defined (SC92F740x) || defined (SC92F827X) || defined (SC92F837X) || defined (SC92F7003) +typedef enum +{ + GPIO0 = (uint8_t)0x00, //P0 + GPIO1 = (uint8_t)0x01, //P1 + GPIO2 = (uint8_t)0x02, //P2 +}GPIO_TypeDef; +#else +typedef enum +{ + GPIO0 = (uint8_t)0x00, //P0 + GPIO1 = (uint8_t)0x01, //P1 + GPIO2 = (uint8_t)0x02, //P2 + GPIO5 = (uint8_t)0x05 //P5 +}GPIO_TypeDef; +#endif + + +typedef enum +{ + GPIO_MODE_IN_HI = (uint8_t)0x00, //高阻输入模式 + GPIO_MODE_IN_PU = (uint8_t)0x01, //带上拉的输入模式 + GPIO_MODE_OUT_PP = (uint8_t)0x02 //强推挽输出模式 +} GPIO_Mode_TypeDef; + +typedef enum +{ + GPIO_PIN_0 = ((uint8_t)0x01), //IO管脚Px0 + GPIO_PIN_1 = ((uint8_t)0x02), //IO管脚Px1 + GPIO_PIN_2 = ((uint8_t)0x04), //IO管脚Px2 + GPIO_PIN_3 = ((uint8_t)0x08), //IO管脚Px3 + GPIO_PIN_4 = ((uint8_t)0x10), //IO管脚Px4 + GPIO_PIN_5 = ((uint8_t)0x20), //IO管脚Px5 + GPIO_PIN_6 = ((uint8_t)0x40), //IO管脚Px6 + GPIO_PIN_7 = ((uint8_t)0x80), //IO管脚Px7 + GPIO_PIN_LNIB = ((uint8_t)0x0F), //IO管脚Px0~3 + GPIO_PIN_HNIB = ((uint8_t)0xF0), //IO管脚Px4~7 + GPIO_PIN_ALL = ((uint8_t)0xFF) //IO管脚Px0~7 +} GPIO_Pin_TypeDef; + +typedef enum +{ + IOH_Grade_0 = ((uint8_t)0x00), //IOH等级0 + IOH_Grade_1 = ((uint8_t)0x01), //IOH等级1 + IOH_Grade_2 = ((uint8_t)0x02), //IOH等级2 + IOH_Grade_3 = ((uint8_t)0x03), //IOH等级3 +} GPIO_IOH_Grade_TypeDef; + +void GPIO_IOH_Config(GPIO_TypeDef GPIOx, GPIO_Pin_TypeDef PortPins,GPIO_IOH_Grade_TypeDef GPIO_IOH_Grade); + +void GPIO_DeInit(void); +void GPIO_Init(GPIO_TypeDef GPIOx, + uint8_t PortPins, GPIO_Mode_TypeDef GPIO_Mode); +void GPIO_Write(GPIO_TypeDef GPIOx, + uint8_t PortVal); +void GPIO_WriteHigh(GPIO_TypeDef GPIOx, + uint8_t PortPins); +void GPIO_WriteLow(GPIO_TypeDef GPIOx, + uint8_t PortPins); +uint8_t GPIO_ReadPort(GPIO_TypeDef GPIOx); +BitStatus GPIO_ReadPin(GPIO_TypeDef GPIOx, + uint8_t PortPins); + +#endif + +/******************* (C) COPYRIGHT 2020 SinOne Microelectronics *****END OF FILE****/ diff --git a/CFG/SC92F8363B/Keil_Mould/FWLib/SC92F_Lib/inc/sc92f_iap.h b/CFG/SC92F8363B/Keil_Mould/FWLib/SC92F_Lib/inc/sc92f_iap.h new file mode 100644 index 0000000..9f8ccf9 --- /dev/null +++ b/CFG/SC92F8363B/Keil_Mould/FWLib/SC92F_Lib/inc/sc92f_iap.h @@ -0,0 +1,82 @@ +//************************************************************ +// Copyright (c) 深圳市赛元微电子有限公司 +// 文件名称: sc92f_iap.h +// 作者: 赛元应用团队 +// 模块功能: IAP固件库函数头文件 +// 最后更正日期: 2022年3月23日 +// 版本: V1.100005 +// 说明: 本文件仅适用于赛元92F/93F/92L系列单片机 +//************************************************************* + +#ifndef _sc92f_IAP_H_ +#define _sc92f_IAP_H_ + +#include "sc92f.h" +#include "intrins.h" + +typedef enum +{ + IAP_MEMTYPE_ROM = (uint8_t)0x00, //IAP操作区域为ROM + IAP_MEMTYPE_UID = (uint8_t)0x01, //IAP操作区域为UID,只允许读操作!!! + IAP_MEMTYPE_EEPROM = (uint8_t)0x02 //IAP操作区域为EEPROM +} IAP_MemType_TypeDef; + + +#if defined(SC92F854x) || defined(SC92F754x) || defined(SC92F844xB) || defined(SC92F744xB) || defined(SC92F84Ax_2) || defined(SC92F74Ax_2)\ +|| defined(SC92F7003) || defined(SC92F8003) || defined(SC92F740x) +typedef enum +{ + IAP_HOLDTIME_1500US = (uint8_t)0x08, //设定CPU Hold Time为1.5MS + IAP_HOLDTIME_3000US = (uint8_t)0x04, //设定CPU Hold Time为3MS + IAP_HOLDTIME_6000US = (uint8_t)0x00 //设定CPU Hold Time为6MS +}IAP_HoldTime_TypeDef; +#elif defined (SC92F846xB) || defined (SC92F746xB) || defined (SC92F836xB) || defined (SC92F736xB)|| defined (SC92F83Ax) || defined (SC92F73Ax)\ + || defined (SC92F84Ax) || defined (SC92F74Ax)|| defined (SC92F742x) || defined (SC92F730x) || defined (SC92F827X) || defined (SC92F837X) \ + || defined (SC92F725X) || defined (SC92F735X) || defined (SC92F732X) || defined (SC92F7490) || defined (SC93F833x) || defined (SC93F843x)\ + || defined (SC93F733x) || defined (SC93F743x) +typedef enum +{ + IAP_HOLDTIME_4MS = (uint8_t)0x00, //设定CPU Hold Time为4MS + IAP_HOLDTIME_2MS = (uint8_t)0x04, //设定CPU Hold Time为2MS + IAP_HOLDTIME_1MS = (uint8_t)0x08 //设定CPU Hold Time为1MS +}IAP_HoldTime_TypeDef; +#elif defined (SC92FWxx) +typedef enum +{ + IAP_HOLDTIME_3000US = (uint8_t)0x00, //设定CPU Hold Time为4MS + IAP_HOLDTIME_1500US = (uint8_t)0x04, //设定CPU Hold Time为2MS + IAP_HOLDTIME_1000US = (uint8_t)0x08 //设定CPU Hold Time为1MS +}IAP_HoldTime_TypeDef; +#elif defined(SC92F848x) || defined(SC92F748x) || defined(SC92F859x) || defined(SC92F759x) || defined (SC92L853x) || defined (SC92L753x) +typedef enum +{ + IAP_HOLDTIME_Null = (uint8_t)0x00 //高速Flash,不需要Hold Time +}IAP_HoldTime_TypeDef; + +typedef enum +{ + IAP_BTLDType_APPROM = (uint8_t)0x00, //MCU复位后从APROM复位 + IAP_BTLDType_LDROM = (uint8_t)0x01, //MCU复位后从LDROM复位 +} IAP_BTLDType_TypeDef; + + +#endif + + +void IAP_DeInit(void); +void IAP_SetHoldTime(IAP_HoldTime_TypeDef IAP_HoldTime); +void IAP_ProgramByte(uint16_t Address, + uint8_t Data, IAP_MemType_TypeDef IAP_MemType, + uint8_t WriteTimeLimit); +uint8_t IAP_ReadByte(uint16_t Address, + IAP_MemType_TypeDef IAP_MemType); + +#if defined(SC92F848x) || defined(SC92F748x) || defined(SC92F859x) || defined(SC92F759x) || defined (SC92L853x) || defined (SC92L753x) +void IAP_SectorErase(IAP_MemType_TypeDef IAP_MemType, uint32_t IAP_SectorEraseAddress, + uint8_t WriteTimeLimit); +void IAP_BootLoaderControl(IAP_BTLDType_TypeDef IAP_BTLDType); +#endif + +#endif + +/******************* (C) COPYRIGHT 2020 SinOne Microelectronics *****END OF FILE****/ \ No newline at end of file diff --git a/CFG/SC92F8363B/Keil_Mould/FWLib/SC92F_Lib/inc/sc92f_int.h b/CFG/SC92F8363B/Keil_Mould/FWLib/SC92F_Lib/inc/sc92f_int.h new file mode 100644 index 0000000..ccc3d04 --- /dev/null +++ b/CFG/SC92F8363B/Keil_Mould/FWLib/SC92F_Lib/inc/sc92f_int.h @@ -0,0 +1,220 @@ +//************************************************************ +// Copyright (c) 深圳市赛元微电子有限公司 +// 文件名称 : sc92f_INT.h +// 作者 : +// 模块功能 : INT固件库函数头文件 +// 局部函数列表: +// 最后更正日期: 2022/01/05 +// 版本 : V1.10003 +// 说明 : +//************************************************************* + +#ifndef _sc92f_INT_H_ +#define _sc92f_INT_H_ + +#include "sc92f.h" + +typedef enum +{ + INT_TRIGGER_RISE_ONLY = (uint8_t)0x01, //外部中断触发方式为上升沿 + INT_TRIGGER_FALL_ONLY = (uint8_t)0x02, //外部中断触发方式为下降沿 + INT_TRIGGER_RISE_FALL = (uint8_t)0x03, //外部中断触发方式为上升沿与下降沿 + INT_TRIGGER_DISABLE = (uint8_t)0x04 //关闭外部中断触发 +} INT_TriggerMode_Typedef; + +typedef enum +{ + INT0 = (uint8_t)0x00, //外部中断0 + INT1 = (uint8_t)0x01, //外部中断1 + INT2 = (uint8_t)0x02 //外部中断2 +} INTx_Typedef; + +#if defined (SC92F846xB) || defined (SC92F746xB) || defined (SC92F836xB) || defined (SC92F736xB)|| defined (SC92F83Ax) || defined (SC92F73Ax)\ + || defined (SC92F84Ax) || defined (SC92F74Ax) || defined (SC92F848x) || defined (SC92F748x) +typedef enum +{ + INT01 = (uint8_t)0x02, //将P11设置为INT0脚 + INT02 = (uint8_t)0x04, //将P12设置为INT0脚 + INT03 = (uint8_t)0x08 //将P13设置为INT0脚 + +} INT0x_Typedef; + +#elif defined (SC92F854x) || defined (SC92F754x) ||defined (SC92F844xB) || defined (SC92F744xB)||defined (SC92F84Ax_2) || defined (SC92F74Ax_2)\ +|| defined (SC92FWxx) || defined (SC92F859x) || defined (SC92F759x) +typedef enum +{ + INT04 = (uint8_t)0x10, //将P04设置为外部中断脚 + INT05 = (uint8_t)0x20, //将P05设置为外部中断脚 + INT06 = (uint8_t)0x40, //将P06设置为外部中断脚 + INT07 = (uint8_t)0x80 //将P07设置为外部中断脚 +} INT0x_Typedef; + +#elif defined (SC92F7003) || defined (SC92F8003) || defined (SC92F740x) +typedef enum +{ + INT00 = (uint8_t)0x01, //将P00设置为INT0脚 + INT01 = (uint8_t)0x02 //将P01设置为INT0脚 +} INT0x_Typedef; + +#elif defined (SC92F742x) || defined (SC92F730x) || defined (SC92F725X) || defined (SC92F735X) || defined (SC92F732X) +typedef enum +{ + INT00 = (uint8_t)0x01, //将P10设置为INT0脚 + INT01 = (uint8_t)0x02, //将P11设置为INT0脚 + INT02 = (uint8_t)0x04, //将P12设置为INT0脚 + INT03 = (uint8_t)0x08 //将P13设置为INT0脚 +} INT0x_Typedef; + +#elif defined (SC92F827X) || defined (SC92F837X) || defined (SC92F7490) || defined (SC93F833x) || defined (SC93F843x) || defined (SC93F743x) || defined (SC92L853x) || defined (SC92L753x) +typedef enum +{ + INT01 = (uint8_t)0x02, //将P11设置为INT0脚 + INT02 = (uint8_t)0x04, //将P12设置为INT0脚 + INT03 = (uint8_t)0x08 //将P13设置为INT0脚 +} INT0x_Typedef; + +#endif + +#if defined (SC92F854x) || defined (SC92F754x) ||defined (SC92F844xB) || defined (SC92F744xB)||defined (SC92F84Ax_2) || defined (SC92F74Ax_2)\ +|| defined (SC92FWxx) || defined (SC92F859x) || defined (SC92F759x) +typedef enum +{ + INT10 = (uint8_t)0x01, //将P40设置为外部中断脚 + INT11 = (uint8_t)0x02, //将P41设置为外部中断脚 + INT12 = (uint8_t)0x04, //将P42设置为外部中断脚 + INT13 = (uint8_t)0x08, //将P43设置为外部中断脚 + INT14 = (uint8_t)0x10, //将P14设置为外部中断脚 + INT15 = (uint8_t)0x20, //将P15设置为外部中断脚 + INT16 = (uint8_t)0x40, //将P16设置为外部中断脚 + INT17 = (uint8_t)0x80 //将P17设置为外部中断脚 +} INT1x_Typedef; + +#elif defined (SC92F846xB) || defined (SC92F746xB) || defined (SC92F836xB) || defined (SC92F736xB)|| defined (SC92F83Ax) || defined (SC92F73Ax)\ + || defined (SC92F84Ax) || defined (SC92F74Ax) || defined (SC92F848x) || defined (SC92F748x) || defined (SC92L853x) || defined (SC92L753x) +typedef enum +{ + INT10 = (uint8_t)0x01, //将P14设置为INT1脚 + INT11 = (uint8_t)0x02, //将P15设置为INT1脚 + INT12 = (uint8_t)0x04, //将P16设置为INT1脚 + INT13 = (uint8_t)0x08 //将P17设置为INT1脚 +} INT1x_Typedef; + +#elif defined (SC92F7003) || defined (SC92F8003) || defined (SC92F740x) +typedef enum +{ + INT10 = (uint8_t)0x01, //将P10设置为INT1脚 + INT11 = (uint8_t)0x02, //将P11设置为INT1脚 + INT12 = (uint8_t)0x04, //将P12设置为INT1脚 + INT13 = (uint8_t)0x08, //将P13设置为INT1脚 + INT14 = (uint8_t)0x10, //将P14设置为INT1脚 + INT15 = (uint8_t)0x20, //将P15设置为INT1脚 + INT16 = (uint8_t)0x40 //将P16设置为INT1脚 +} INT1x_Typedef; + +#elif defined (SC92F742x) || defined (SC92F732X) || defined (SC93F833x) || defined (SC93F843x) || defined (SC93F743x) +typedef enum +{ + INT10 = (uint8_t)0x01, //将P14设置为INT1脚 + INT11 = (uint8_t)0x02, //将P15设置为INT1脚 + INT12 = (uint8_t)0x04, //将P16设置为INT1脚 + INT13 = (uint8_t)0x08 //将P17设置为INT1脚 +} INT1x_Typedef; + +#elif defined (SC92F730x) || defined (SC92F827X) || defined (SC92F837X) || defined (SC92F725X) || defined (SC92F735X) || defined (SC92F7490) +typedef enum +{ + INT_Null = (uint8_t)0x00, //没有INT1引脚 +} INT1x_Typedef; + +#endif + +#if defined (SC92F854x) || defined (SC92F754x) ||defined (SC92F844xB) || defined (SC92F744xB)||defined (SC92F84Ax_2) || defined (SC92F74Ax_2)\ +|| defined (SC92FWxx) || defined (SC92F859x) || defined (SC92F759x) +typedef enum +{ + INT20 = (uint8_t)0x01, //将P20设置为外部中断脚 + INT21 = (uint8_t)0x02, //将P21设置为外部中断脚 + INT22 = (uint8_t)0x04, //将P22设置为外部中断脚 + INT23 = (uint8_t)0x08 //将P23设置为外部中断脚 +} INT2x_Typedef; + +#elif defined (SC92F846xB) || defined (SC92F746xB) || defined (SC92F836xB) || defined (SC92F736xB)|| defined (SC92F83Ax) || defined (SC92F73Ax)\ + || defined (SC92F84Ax) || defined (SC92F74Ax) || defined (SC92F848x) || defined (SC92F748x) || defined (SC92L853x) || defined (SC92L753x) +typedef enum +{ + INT20 = (uint8_t)0x01, //将P04设置为INT2脚 + INT21 = (uint8_t)0x02, //将P05设置为INT2脚 + INT22 = (uint8_t)0x04, //将P06设置为INT2脚 + INT23 = (uint8_t)0x08, //将P07设置为INT2脚 + INT24 = (uint8_t)0x10, //将P20设置为INT2脚 + INT25 = (uint8_t)0x20 //将P21设置为INT2脚 +} INT2x_Typedef; + +#elif defined (SC92F7003) || defined (SC92F8003) || defined (SC92F740x) +typedef enum +{ + INT21 = (uint8_t)0x02, //将P21设置为INT2脚 + INT22 = (uint8_t)0x04, //将P22设置为INT2脚 + INT23 = (uint8_t)0x08, //将P23设置为INT2脚 + INT24 = (uint8_t)0x10, //将P24设置为INT2脚 + INT25 = (uint8_t)0x20, //将P25设置为INT2脚 + INT26 = (uint8_t)0x40, //将P26设置为INT2脚 + INT27 = (uint8_t)0x80 //将P27设置为INT2脚 +} INT2x_Typedef; + +#elif defined (SC92F742x) || defined (SC92F732X) || defined (SC93F833x) || defined (SC93F843x) || defined (SC93F743x) +typedef enum +{ + INT20 = (uint8_t)0x01, //将P04设置为INT2脚 + INT21 = (uint8_t)0x02, //将P05设置为INT2脚 + INT22 = (uint8_t)0x04, //将P06设置为INT2脚 + INT23 = (uint8_t)0x08, //将P07设置为INT2脚 + INT24 = (uint8_t)0x10, //将P20设置为INT2脚 + INT25 = (uint8_t)0x20 //将P21设置为INT2脚 +} INT2x_Typedef; + +#elif defined (SC92F730x) || defined (SC92F725X) || defined (SC92F735X) +typedef enum +{ + INT24 = (uint8_t)0x10, //将P20设置为外部中断脚 + INT25 = (uint8_t)0x20 //将P21设置为外部中断脚 +} INT2x_Typedef; + +#elif defined (SC92F837X) +typedef enum +{ + INT20 = (uint8_t)0x01, //将P04设置为INT2脚 + INT21 = (uint8_t)0x02, //将P05设置为INT2脚 + INT24 = (uint8_t)0x10, //将P20设置为INT2脚 + INT25 = (uint8_t)0x20 //将P21设置为INT2脚 +} INT2x_Typedef; + +#elif defined (SC92F7490) || defined (SC92F827X) +typedef enum +{ + INT21 = (uint8_t)0x02, //将P05设置为INT2脚 + INT24 = (uint8_t)0x10, //将P20设置为INT2脚 + INT25 = (uint8_t)0x20 //将P21设置为INT2脚 +} INT2x_Typedef; + +#endif + + +void INT_DeInit(INTx_Typedef INTx); +void INT0_SetTriggerMode(uint8_t INT0x, + INT_TriggerMode_Typedef TriggerMode); +void INT0_ITConfig(FunctionalState NewState, + PriorityStatus Priority); +#if !defined (SC92F730x) && !defined (SC92F827X) && !defined (SC92F837X) && !defined (SC92F725X) || defined (SC92F735X) +void INT1_SetTriggerMode(uint8_t INT1x, + INT_TriggerMode_Typedef TriggerMode); +void INT1_ITConfig(FunctionalState NewState, + PriorityStatus Priority); +#endif +void INT2_SetTriggerMode(uint8_t INT2x, + INT_TriggerMode_Typedef TriggerMode); +void INT2_ITConfig(FunctionalState NewState, + PriorityStatus Priority); +#endif + +/******************* (C) COPYRIGHT 2020 SinOne Microelectronics *****END OF FILE****/ \ No newline at end of file diff --git a/CFG/SC92F8363B/Keil_Mould/FWLib/SC92F_Lib/inc/sc92f_lpd.h b/CFG/SC92F8363B/Keil_Mould/FWLib/SC92F_Lib/inc/sc92f_lpd.h new file mode 100644 index 0000000..fdc7da1 --- /dev/null +++ b/CFG/SC92F8363B/Keil_Mould/FWLib/SC92F_Lib/inc/sc92f_lpd.h @@ -0,0 +1,59 @@ +//************************************************************ +// Copyright (c) 深圳市赛元微电子有限公司 +// 文件名称: sc92F_LPD.h +// 作者: 赛元应用团队 +// 模块功能: LPD固件库函数头文件 +// 最后更正日期: 2022年3月23日 +// 版本: V1.100001 +// 说明: 该文件仅适用于SC92L系列芯片 +//************************************************************* + +#ifndef _sc92f_LPD_H_ +#define _sc92f_LPD_H_ + +#include "sc92f.h" + +typedef enum +{ + LPD_VTRIP_1_85V = (uint8_t)0x00, //LPD门限电压阈值为1.85V + LPD_VTRIP_2_05V = (uint8_t)0x01, //LPD门限电压阈值为2.05V + LPD_VTRIP_2_25V = (uint8_t)0x02, //LPD门限电压阈值为2.25V + LPD_VTRIP_2_45V = (uint8_t)0x03, //LPD门限电压阈值为2.45V + LPD_VTRIP_2_85V = (uint8_t)0x04, //LPD门限电压阈值为2.85V + LPD_VTRIP_3_45V = (uint8_t)0x05, //LPD门限电压阈值为3.45V + LPD_VTRIP_3_85V = (uint8_t)0x06, //LPD门限电压阈值为3.85V + LPD_VTRIP_4_45V = (uint8_t)0x07, //LPD门限电压阈值为4.45V +} LPD_Vtrip_TypeDef; + +typedef enum +{ + LPD_FLAG_LPDIF = (uint8_t)0x40, //LPD中断请求标志 + LPD_FLAG_LPDOF = (uint8_t)0x80, //LPD状态标志位 +} LPD_Flag_TypeDef; + +/*******************************宏函数*******************************/ +/***************************************************** +*函数名称:FlagStatus LPD_GetFlagStatus(LPD_Flag_Typedef LPD_Flag) +*函数功能:获得LPD中断标志状态 +*入口参数: +LPD_GetFlagStatus:LPD_Flag:中断标志位选择 +*出口参数: +FlagStatus:LPD中断标志位置起状态 +*****************************************************/ +#define LPD_GetFlagStatus(LPD_Flag) ((READ_BIT(SCON,LPD_Flag)) ? (SET):(RESET)) + +/***************************************************** +*函数名称:void LPD_ClearFlag(LPD_Flag_Typedef LPD_Flag) +*函数功能:清除LPD中断标志状态 +*入口参数: +LPD_Flag_Typedef;LPD_Flag:中断标志位选择 +*出口参数:void +*****************************************************/ +#define LPD_ClearFlag() CLEAR_BIT(SCON,LPD_Flag) + +void LPD_DeInit(void); +void LPD_VtripConfig(LPD_Vtrip_TypeDef LPD_Vtrip); +void LPD_ITConfig(FunctionalState NewState, PriorityStatus Priority); +void LPD_Cmd(FunctionalState NewState); + +#endif \ No newline at end of file diff --git a/CFG/SC92F8363B/Keil_Mould/FWLib/SC92F_Lib/inc/sc92f_mdu.h b/CFG/SC92F8363B/Keil_Mould/FWLib/SC92F_Lib/inc/sc92f_mdu.h new file mode 100644 index 0000000..250de4d --- /dev/null +++ b/CFG/SC92F8363B/Keil_Mould/FWLib/SC92F_Lib/inc/sc92f_mdu.h @@ -0,0 +1,48 @@ +//************************************************************ +// Copyright (c) 深圳市赛元微电子有限公司 +// 文件名称 : sc92f_mdu.h +// 作者 : +// 模块功能 : MDU固件库函数头文件 +// 局部函数列表: +// 最后更正日期: 2022/01/24 +// 版本 : V1.10001 +// 说明 : +//************************************************************* + +#ifndef _sc92f_MDU_H_ +#define _sc92f_MDU_H_ + +#include "sc92f.h" + +#if defined (SC92F854x) || defined (SC92F754x) || defined (SC92F844xB) || defined (SC92F744xB) || defined (SC92F84Ax_2) || defined (SC92F74Ax_2)\ + || defined (SC92F846xB) || defined (SC92F746xB) || defined (SC92F836xB) || defined (SC92F736xB) || defined (SC92F848x) || defined (SC92F748x)\ + || defined (SC92F859x) || defined (SC92F759x) || defined (SC92L853x) || defined (SC92L753x) +typedef struct +{ + uint8_t MDU_EXA3Reg; //EXA3寄存器 + uint8_t MDU_EXA2Reg; //EXA2寄存器 + uint8_t MDU_EXA1Reg; //EXA1寄存器 + uint8_t MDU_EXA0Reg; //EXA0寄存器 +} MDU_EXAxReg_Typedef; + +typedef union +{ + MDU_EXAxReg_Typedef MDU_EXAxReg; + uint32_t MDU_Temp; +} MDU_Temp_Union; + +void MDU_DeInit(void); +void MDU_MultiplicationConfig(uint16_t + Multiplicand, uint16_t Multiplier); +void MDU_DivisionConfig(uint32_t Dividend, + uint16_t Divisor); +void MDU_StartOperation(void); +uint32_t MDU_GetProduct(void); +uint32_t MDU_GetQuotient(void); +uint16_t MDU_GetRemainder(void); + +#endif + +#endif + +/******************* (C) COPYRIGHT 2020 SinOne Microelectronics *****END OF FILE****/ \ No newline at end of file diff --git a/CFG/SC92F8363B/Keil_Mould/FWLib/SC92F_Lib/inc/sc92f_option.h b/CFG/SC92F8363B/Keil_Mould/FWLib/SC92F_Lib/inc/sc92f_option.h new file mode 100644 index 0000000..d7bc40b --- /dev/null +++ b/CFG/SC92F8363B/Keil_Mould/FWLib/SC92F_Lib/inc/sc92f_option.h @@ -0,0 +1,141 @@ +//************************************************************ +// Copyright (c) 深圳市赛元微电子有限公司 +// 文件名称 : sc92f_option.h +// 作者 : +// 模块功能 : Customer Option寄存器配置头文件 +// 局部函数列表: +// 最后更正日期: 2022/01/24 +// 版本 : V1.0007 +// 说明 : +//************************************************************* + +#ifndef _sc92f_OPTION_H_ +#define _sc92f_OPTION_H_ + +#include "sc92f.h" + +#if defined (SC92L853x) || defined (SC92L753x) +typedef enum +{ + SYSCLK_PRESSEL_FOSC_D1 = (uint8_t)0x00, //预分频 Fsys = Fosc/1 + SYSCLK_PRESSEL_FOSC_D2 = (uint8_t)0x10, //预分频 Fsys = Fosc/2 + SYSCLK_PRESSEL_FOSC_D4 = (uint8_t)0x20, //预分频 Fsys = Fosc/4 + SYSCLK_PRESSEL_FOSC_D8 = (uint8_t)0x30 //预分频 Fsys = Fosc/8 +} SYSCLK_PresSel_TypeDef; +#else +typedef enum +{ + SYSCLK_PRESSEL_FOSC_D1 = (uint8_t)0x00, //预分频 Fsys = Fosc/1 + SYSCLK_PRESSEL_FOSC_D2 = (uint8_t)0x10, //预分频 Fsys = Fosc/2 + SYSCLK_PRESSEL_FOSC_D4 = (uint8_t)0x20, //预分频 Fsys = Fosc/4 + SYSCLK_PRESSEL_FOSC_D12 = (uint8_t)0x30 //预分频 Fsys = Fosc/12 +} SYSCLK_PresSel_TypeDef; +#endif + +#if defined (SC92F859x) || defined (SC92F759x)||defined (SC92F848x) || defined (SC92F748x) +typedef enum +{ + LVR_INVALID = (uint8_t)0x04, //LVR无效 + LVR_1_9V = (uint8_t)0x00, //LVR 1.9V复位 + LVR_2_9V = (uint8_t)0x01, //LVR 2.9V复位 + LVR_3_7V = (uint8_t)0x02, //LVR 3.7V复位 + LVR_4_3V = (uint8_t)0x03 //LVR 4.3V复位 +} LVR_Config_TypeDef; +#elif defined (SC92L853x) || defined (SC92L753x) +typedef enum +{ + LVR_INVALID = (uint8_t)0x04, //LVR无效 + LVR_1_7V = (uint8_t)0x00, //LVR 1.7V复位 + LVR_2_7V = (uint8_t)0x01, //LVR 2.7V复位 + LVR_3_7V = (uint8_t)0x02, //LVR 3.7V复位 + LVR_4_3V = (uint8_t)0x03 //LVR 4.3V复位 +} LVR_Config_TypeDef; +#else +typedef enum +{ + LVR_INVALID = (uint8_t)0x04, //LVR无效 + LVR_2_3V = (uint8_t)0x00, //LVR 2.3V复位 + LVR_2_9V = (uint8_t)0x01, //LVR 2.9V复位 + LVR_3_7V = (uint8_t)0x02, //LVR 3.7V复位 + LVR_4_3V = (uint8_t)0x03 //LVR 4.3V复位 +} LVR_Config_TypeDef; +#endif + +#if defined (SC92F848x) || defined (SC92F748x) || defined (SC92L853x) || defined (SC92L753x) +typedef enum +{ + IAP_OPERATERANGE_ONLY_EEPROM = (uint8_t)0x00, //只允许EEPROM进行IAP操作 + IAP_OPERATERANGE__LAST_1K_CODEREGION = (uint8_t)0x04, //允许ROM最后1k和EEPROM进行IAP操作 + IAP_OPERATERANGE__LAST_2K_CODEREGION = (uint8_t)0x08, //允许ROM最后2k和EEPROM进行IAP操作 + IAP_OPERATERANGE__ALL_CODEREGION = (uint8_t)0x0c //允许ROM和EEPROM所有区域进行IAP操作 +} IAP_OperateRange_TypeDef; +#else +typedef enum +{ + IAP_OPERATERANGE_ONLY_EEPROM = (uint8_t)0x00, //只允许EEPROM进行IAP操作 + IAP_OPERATERANGE__LAST_0_5K_CODEREGION = (uint8_t)0x04, //允许ROM最后0.5k和EEPROM进行IAP操作 + IAP_OPERATERANGE__LAST_1K_CODEREGION = (uint8_t)0x08, //允许ROM最后1k和EEPROM进行IAP操作 + IAP_OPERATERANGE__ALL_CODEREGION = (uint8_t)0x0c //允许ROM和EEPROM所有区域进行IAP操作 +} IAP_OperateRange_TypeDef; +#endif + + +#if defined (SC92F859x) || defined (SC92F759x) || defined (SC92F848x) || defined (SC92F748x) || defined (SC92L853x) || defined (SC92L753x) +typedef enum +{ + ADC_VREF_VDD = 0x00, //选择VDD做ADC参考电压 + ADC_VREF_1_024V = 0x40, //选择内部1.024V做ADC参考电压 + ADC_VREF_2_4V = 0x80, //选择内部2.4V做ADC参考电压 + ADC_VREF_2_048V = 0xC0, //选择内部2.048V做ADC参考电压 +} ADC_Vref_TypeDef; +#else + +typedef enum +{ + ADC_VREF_VDD = 0x00, //选择VDD做ADC参考电压 + ADC_VREF_2_4V = 0x80, //选择内部2.4V做ADC参考电压 +} ADC_Vref_TypeDef; +#endif + +#if defined (SC92F846xB) || defined (SC92F746xB) || defined (SC92F836xB) || defined (SC92F736xB)|| defined (SC92F83Ax)\ + || defined (SC92F73Ax) || defined (SC92F84Ax) || defined (SC92F74Ax) || defined (SC92F740x)\ + || defined (SC92F848x) || defined (SC92F748x) || defined (SC92F8003) || defined (SC92F7003) +typedef enum +{ + XTIPLL_HIGHER_THAN_12M = (uint8_t)0x40, //外接晶振振荡频率大于等于12M + XTIPLL_UNDER_12M = (uint8_t)0x00 //外接晶振振荡频率小于12M +} XTIPLL_Range_TypeDef; +#endif + +void OPTION_WDT_Cmd(FunctionalState NewState); + +void OPTION_SYSCLK_Init(SYSCLK_PresSel_TypeDef + SYSCLK_PresSel); +#if !defined(SC92F848x) && !defined(SC92F748x) && !defined(SC92F859x) && !defined (SC92F759x) && !defined(SC92L853x) && !defined (SC92L753x) +void OPTION_RST_PIN_Cmd(FunctionalState NewState); +#endif +void OPTION_LVR_Init(LVR_Config_TypeDef + LVR_Config); +void OPTION_ADC_VrefConfig(ADC_Vref_TypeDef ADC_Vref); +void OPTION_IAP_SetOperateRange( + IAP_OperateRange_TypeDef IAP_OperateRange); + +#if defined (SC92F846xB) || defined (SC92F746xB) || defined (SC92F836xB) || defined (SC92F736xB)|| defined (SC92F83Ax)\ + || defined (SC92F73Ax) || defined (SC92F84Ax) || defined (SC92F74Ax) || defined (SC92F740x)\ + || defined (SC92F8003) || defined (SC92F7003) +void OPTION_XTIPLL_SetRange(XTIPLL_Range_TypeDef + XTIPLL_Range); +#endif + +#if !defined(SC92F848x) && !defined(SC92F748x) +void OPTION_XTIPLL_Cmd(FunctionalState NewState); +#endif + +#if defined (SC92F742x)||defined (SC92F83Ax) || defined (SC92F73Ax)|| defined (SC92F84Ax) || defined (SC92F74Ax) \ + ||defined (SC92F74Ax_2)||defined (SC92F84Ax_2)||defined (SC92F844xB)||defined (SC92F744xB) \ + ||defined (SC92F859x) || defined (SC92F759x) ||defined (SC92F848x) || defined (SC92F748x) || defined (SC92L853x) || defined (SC92L753x) +void OPTION_JTG_Cmd(FunctionalState NewState); +#endif + + +#endif \ No newline at end of file diff --git a/CFG/SC92F8363B/Keil_Mould/FWLib/SC92F_Lib/inc/sc92f_pwm.h b/CFG/SC92F8363B/Keil_Mould/FWLib/SC92F_Lib/inc/sc92f_pwm.h new file mode 100644 index 0000000..2309a85 --- /dev/null +++ b/CFG/SC92F8363B/Keil_Mould/FWLib/SC92F_Lib/inc/sc92f_pwm.h @@ -0,0 +1,406 @@ +//************************************************************ +// Copyright (c) 深圳市赛元微电子有限公司 +// 文件名称 : sc92f_pwm.h +// 作者 : +// 模块功能 : PWM固件库函数头文件 +// 局部函数列表: +// 最后更正日期: 2022年7月6日 +// 版本 : V1.10005 +// 说明 : +//************************************************************* + +#ifndef _sc92f_PWM_H_ +#define _sc92f_PWM_H_ + +#include "sc92f.h" +#if !defined (SC92F7490) +#if defined(SC92F854x) || defined(SC92F754x) || defined(SC92F844xB) || defined(SC92F744xB) || defined(SC92F84Ax_2) || defined(SC92F74Ax_2)\ + || defined(SC92F859x) || defined(SC92F759x) +typedef enum +{ + PWM_PRESSEL_FHRC_D1 = (uint8_t)0x00, //PWM预分频为Fhrc/1 + PWM_PRESSEL_FHRC_D2 = (uint8_t)0x10, //PWM预分频为Fhrc/2 + PWM_PRESSEL_FHRC_D4 = (uint8_t)0x20, //PWM预分频为Fhrc/4 + PWM_PRESSEL_FHRC_D8 = (uint8_t)0x30 //PWM预分频为Fhrc/8 +} PWM_PresSel_TypeDef; + +typedef enum +{ + PWM40 = (uint8_t)0x01, //PWM输出通道选择:PWM40 + PWM41 = (uint8_t)0x02, //PWM输出通道选择:PWM41 + PWM42 = (uint8_t)0x04, //PWM输出通道选择:PWM42 + PWM43 = (uint8_t)0x08, //PWM输出通道选择:PWM43 + PWM50 = (uint8_t)0x10, //PWM输出通道选择:PWM50 + PWM51 = (uint8_t)0x20, //PWM输出通道选择:PWM51 + PWM52 = (uint8_t)0x40, //PWM输出通道选择:PWM52 + PWM53 = (uint8_t)0x80 //PWM输出通道选择:PWM53 +} PWM_OutputPin_TypeDef; +#elif defined (SC92F742x) || defined (SC92F730x) || defined (SC92F827X) || defined (SC92F837X) || defined (SC92F725X) || defined(SC92F735X) +typedef enum +{ + PWM_PRESSEL_FSYS_D1 = (uint8_t)0x00, //PWM预分频为Fsys/1 + PWM_PRESSEL_FSYS_D2 = (uint8_t)0x01, //PWM预分频为Fsys/2 + PWM_PRESSEL_FSYS_D4 = (uint8_t)0x02, //PWM预分频为Fsys/4 + PWM_PRESSEL_FSYS_D8 = (uint8_t)0x03, //PWM预分频为Fsys/8 + PWM_PRESSEL_FSYS_D32 = (uint8_t)0x04, //PWM预分频为Fsys/32 + PWM_PRESSEL_FSYS_D64 = (uint8_t)0x05, //PWM预分频为Fsys/64 + PWM_PRESSEL_FSYS_D128 = (uint8_t)0x06, //PWM预分频为Fsys/128 + PWM_PRESSEL_FSYS_D256 = (uint8_t)0x07 //PWM预分频为Fsys/256 +} PWM_PresSel_TypeDef; + +#if defined (SC92F827X) +typedef enum +{ + PWM0 = (uint8_t)0x01, //PWM输出通道选择:PWM0 + PWM1 = (uint8_t)0x02, //PWM输出通道选择:PWM1 +} PWM_OutputPin_TypeDef; +#elif defined (SC92F732X) || defined (SC93F833x) || defined (SC93F843x) || defined (SC93F743x) +typedef enum +{ + PWM0 = (uint8_t)0x01, //PWM输出通道选择:PWM0 + PWM1 = (uint8_t)0x02, //PWM输出通道选择:PWM1 + PWM2 = (uint8_t)0x04, //PWM输出通道选择:PWM2 +} PWM_OutputPin_TypeDef; +#elif defined (SC92F837X) +typedef enum +{ + PWM0 = (uint8_t)0x01, //PWM输出通道选择:PWM0 + PWM1 = (uint8_t)0x02, //PWM输出通道选择:PWM1 + PWM2 = (uint8_t)0x04, //PWM输出通道选择:PWM2 + PWM3 = (uint8_t)0x08, //PWM输出通道选择:PWM3 +} PWM_OutputPin_TypeDef; +#elif defined (SC92F730x) +typedef enum +{ + PWM0 = (uint8_t)0x01, //PWM输出通道选择:PWM0 + PWM1 = (uint8_t)0x02, //PWM输出通道选择:PWM1 + PWM2 = (uint8_t)0x04, //PWM输出通道选择:PWM2 + PWM4 = (uint8_t)0x10, //PWM输出通道选择:PWM4 + PWM5 = (uint8_t)0x20 //PWM输出通道选择:PWM5 +} PWM_OutputPin_TypeDef; +#else +typedef enum +{ + PWM0 = (uint8_t)0x01, //PWM输出通道选择:PWM0 + PWM1 = (uint8_t)0x02, //PWM输出通道选择:PWM1 + PWM2 = (uint8_t)0x04, //PWM输出通道选择:PWM2 + PWM3 = (uint8_t)0x08, //PWM输出通道选择:PWM3 + PWM4 = (uint8_t)0x10, //PWM输出通道选择:PWM4 + PWM5 = (uint8_t)0x20 //PWM输出通道选择:PWM5 +} PWM_OutputPin_TypeDef; +#endif + +#elif defined (SC92F846xB) || defined (SC92F746xB) || defined (SC92F836xB) || defined (SC92F736xB)|| defined (SC92F83Ax) || defined (SC92F73Ax)|| defined (SC92F84Ax) || defined (SC92F74Ax) || defined (SC92F848x) || defined (SC92F748x) +typedef enum +{ + PWM_PRESSEL_FOSC_D1 = (uint8_t)0x00, //PWM预分频为Fosc/1 + PWM_PRESSEL_FOSC_D2 = (uint8_t)0x01, //PWM预分频为Fosc/2 + PWM_PRESSEL_FOSC_D8 = (uint8_t)0x02, //PWM预分频为Fosc/8 + PWM_PRESSEL_FOSC_D32 = (uint8_t)0x03 //PWM预分频为Fosc/32 +} PWM_PresSel_TypeDef; +typedef enum +{ + PWM0 = (uint8_t)0x01, //PWM输出通道选择:PWM0 + PWM1 = (uint8_t)0x02, //PWM输出通道选择:PWM1 + PWM2 = (uint8_t)0x04, //PWM输出通道选择:PWM2 + PWM3 = (uint8_t)0x08, //PWM输出通道选择:PWM3 + PWM4 = (uint8_t)0x10, //PWM输出通道选择:PWM4 + PWM5 = (uint8_t)0x20, //PWM输出通道选择:PWM5 +} PWM_OutputPin_TypeDef; + +typedef enum +{ + PWM0PWM3 = (uint8_t)0x00, //PWM互补模式通道选择:PWM0、PWM3 + PWM1PWM4 = (uint8_t)0x01, //PWM互补模式通道选择:PWM1、PWM4 + PWM2PWM5 = (uint8_t)0x02 //PWM互补模式通道选择:PWM2、PWM5 +} PWM_ComplementaryOutputPin_TypeDef; +#elif defined (SC92F7003) || defined (SC92F8003) || defined (SC92F740x) +typedef enum +{ + PWM_PRESSEL_FOSC_D1 = (uint8_t)0x00, //PWM预分频为Fosc/1 + PWM_PRESSEL_FOSC_D2 = (uint8_t)0x01, //PWM预分频为Fosc/2 + PWM_PRESSEL_FOSC_D8 = (uint8_t)0x02, //PWM预分频为Fosc/8 + PWM_PRESSEL_FOSC_D32 = (uint8_t)0x03 //PWM预分频为Fosc/32 +} PWM_PresSel_TypeDef; +typedef enum +{ + PWM2_OutputPin_P26 = ((uint8_t)0x00), //PWM2输出口选择P26 + PWM2_OutputPin_P14 = ((uint8_t)0x04) //PWM2输出口选择P14 +} PWM2_OutputPin_TypeDef; + +typedef enum +{ + PWM5_OutputPin_P12 = ((uint8_t)0x00), //PWM5输出口选择P12 + PWM5_OutputPin_P21 = ((uint8_t)0x08) //PWM5输出口选择P21 +} PWM5_OutputPin_TypeDef; + +typedef enum +{ + PWM0 = (uint8_t)0x01, //PWM输出通道选择:PWM0 + PWM1 = (uint8_t)0x02, //PWM输出通道选择:PWM1 + PWM2 = (uint8_t)0x04, //PWM输出通道选择:PWM2 + PWM3 = (uint8_t)0x08, //PWM输出通道选择:PWM3 + PWM4 = (uint8_t)0x10, //PWM输出通道选择:PWM4 + PWM5 = (uint8_t)0x20, //PWM输出通道选择:PWM5 + PWM6 = (uint8_t)0x40, //PWM输出通道选择:PWM6 +} PWM_OutputPin_TypeDef; + +typedef enum +{ + PWM0PWM3 = (uint8_t)0x00, //PWM互补模式通道选择:PWM0、PWM3 + PWM1PWM4 = (uint8_t)0x01, //PWM互补模式通道选择:PWM1、PWM4 + PWM2PWM5 = (uint8_t)0x02 //PWM互补模式通道选择:PWM2、PWM5 +} PWM_ComplementaryOutputPin_TypeDef; +#elif defined (SC92F732X) || defined (SC93F833x) || defined (SC93F843x) || defined (SC93F743x) +typedef enum +{ + PWM_PRESSEL_FSYS_D1 = (uint8_t)0x00, //PWM预分频为Fsys/1 + PWM_PRESSEL_FSYS_D2 = (uint8_t)0x01, //PWM预分频为Fsys/2 + PWM_PRESSEL_FSYS_D4 = (uint8_t)0x02, //PWM预分频为Fsys/4 + PWM_PRESSEL_FSYS_D8 = (uint8_t)0x03, //PWM预分频为Fsys/8 + PWM_PRESSEL_FSYS_D32 = (uint8_t)0x04, //PWM预分频为Fsys/32 + PWM_PRESSEL_FSYS_D64 = (uint8_t)0x05, //PWM预分频为Fsys/64 + PWM_PRESSEL_FSYS_D128 = (uint8_t)0x06, //PWM预分频为Fsys/128 + PWM_PRESSEL_FSYS_D256 = (uint8_t)0x07 //PWM预分频为Fsys/256 +} PWM_PresSel_TypeDef; + +typedef enum +{ + PWM0 = (uint8_t)0x01, //PWM输出通道选择:PWM0 + PWM1 = (uint8_t)0x02, //PWM输出通道选择:PWM1 + PWM2 = (uint8_t)0x04, //PWM输出通道选择:PWM2 +} PWM_OutputPin_TypeDef; + +typedef enum +{ + PWM0_OutputPin_P00 = ((uint8_t)0x00), //PWM2输出口选择P26 + PWM0_OutputPin_P25 = ((uint8_t)0x01) //PWM2输出口选择P14 +} PWM0_OutputPin_TypeDef; + +typedef enum +{ + PWM1_OutputPin_P01 = ((uint8_t)0x00), //PWM5输出口选择P12 + PWM1_OutputPin_P26 = ((uint8_t)0x02) //PWM5输出口选择P21 +} PWM1_OutputPin_TypeDef; + +typedef enum +{ + PWM2_OutputPin_P02 = ((uint8_t)0x00), //PWM2输出口选择P26 + PWM2_OutputPin_P27 = ((uint8_t)0x04) //PWM2输出口选择P14 +} PWM2_OutputPin_TypeDef; + +//duty微调控制,以四个PWM2周期为一个循环: +typedef enum +{ + PWM_DutyMode0 = ((uint8_t)0x00), //00:四个PWM2输出的duty均为PDT2设定值;(D、D、D、D) + PWM_DutyMode1 = ((uint8_t)0x01), //01:第一个PWM2输出的duty为PDT2设定值加1,其余三个PWM2输出的duty均为PDT2设定值;(D+1、D、D、D) + PWM_DutyMode2 = ((uint8_t)0x02), //10:第一和第二个PWM2输出的duty为PDT2设定值加1,其余二个PWM2输出的duty均为PDT2设定值;(D+1、D+1、D、D) + PWM_DutyMode3 = ((uint8_t)0x03), //11:第一、第二和第三个PWM2输出的duty为PDT2设定值加1,第四个PWM2输出的Duty为PDT2设定值; (D+1、D+1、D+1、D) +} PWM_DutyMode_TypeDef; +#elif defined (SC92FWxx) +typedef enum +{ + PWM0_PRESSEL_FHRC_D1 = (uint8_t)0x00, //PWM0预分频为Fhrc/1 + PWM0_PRESSEL_FHRC_D2 = (uint8_t)0x10, //PWM0预分频为Fhrc/2 + PWM0_PRESSEL_FHRC_D4 = (uint8_t)0x20, //PWM0预分频为Fhrc/4 + PWM0_PRESSEL_FHRC_D8 = (uint8_t)0x30, //PWM0预分频为Fhrc/8 + PWM1_PRESSEL_FHRC_D1 = (uint8_t)0x01, //PWM1预分频为Fhrc/1 + PWM1_PRESSEL_FHRC_D2 = (uint8_t)0x11, //PWM1预分频为Fhrc/2 + PWM1_PRESSEL_FHRC_D4 = (uint8_t)0x21, //PWM1预分频为Fhrc/4 + PWM1_PRESSEL_FHRC_D8 = (uint8_t)0x31, //PWM1预分频为Fhrc/8 +} PWM_PresSel_TypeDef; + +typedef enum +{ + PWM000 = (uint8_t)0x00, //PWM输出通道选择: PWM000 + PWM001 = (uint8_t)0x02, //PWM输出通道选择: PWM001 + PWM002 = (uint8_t)0x04, //PWM输出通道选择: PWM002 + PWM003 = (uint8_t)0x06, //PWM输出通道选择: PWM003 + PWM004 = (uint8_t)0x08, //PWM输出通道选择: PWM004 + PWM005 = (uint8_t)0x0A, //PWM输出通道选择: PWM005 + PWM006 = (uint8_t)0x0C, //PWM输出通道选择: PWM006 + PWM007 = (uint8_t)0x0E, //PWM输出通道选择: PWM007 + PWM010 = (uint8_t)0x10, //PWM输出通道选择: PWM010 + PWM011 = (uint8_t)0x12, //PWM输出通道选择: PWM011 + PWM012 = (uint8_t)0x14, //PWM输出通道选择: PWM012 + PWM013 = (uint8_t)0x16, //PWM输出通道选择: PWM013 + PWM014 = (uint8_t)0x18, //PWM输出通道选择: PWM014 + PWM015 = (uint8_t)0x1A, //PWM输出通道选择: PWM015 + PWM016 = (uint8_t)0x1C, //PWM输出通道选择: PWM016 + PWM017 = (uint8_t)0x1E, //PWM输出通道选择: PWM017 + PWM020 = (uint8_t)0x20, //PWM输出通道选择: PWM020 + PWM021 = (uint8_t)0x22, //PWM输出通道选择: PWM021 + PWM022 = (uint8_t)0x24, //PWM输出通道选择: PWM022 + PWM023 = (uint8_t)0x26, //PWM输出通道选择: PWM023 + PWM024 = (uint8_t)0x28, //PWM输出通道选择: PWM024 + PWM025 = (uint8_t)0x2A, //PWM输出通道选择: PWM025 + PWM026 = (uint8_t)0x2C, //PWM输出通道选择: PWM026 + PWM027 = (uint8_t)0x2E, //PWM输出通道选择: PWM027 + PWM030 = (uint8_t)0x30, //PWM输出通道选择: PWM030 + PWM031 = (uint8_t)0x32, //PWM输出通道选择: PWM031 + PWM032 = (uint8_t)0x34, //PWM输出通道选择: PWM032 + PWM033 = (uint8_t)0x36, //PWM输出通道选择: PWM033 + PWM034 = (uint8_t)0x38, //PWM输出通道选择: PWM034 + PWM035 = (uint8_t)0x3A, //PWM输出通道选择: PWM025 + PWM036 = (uint8_t)0x3C, //PWM输出通道选择: PWM026 + PWM037 = (uint8_t)0x3E, //PWM输出通道选择: PWM027 + PWM140 = (uint8_t)0x40, //PWM输出通道选择: PWM140 + PWM141 = (uint8_t)0x42, //PWM输出通道选择: PWM141 + PWM142 = (uint8_t)0x44, //PWM输出通道选择: PWM142 + PWM143 = (uint8_t)0x46, //PWM输出通道选择: PWM153 + PWM150 = (uint8_t)0x48, //PWM输出通道选择: PWM150 + PWM151 = (uint8_t)0x4A, //PWM输出通道选择: PWM151 + PWM152 = (uint8_t)0x4C, //PWM输出通道选择: PWM152 + PWM153 = (uint8_t)0x4E, //PWM输出通道选择: PWM153 +} PWM_OutputPin_TypeDef; + +typedef enum +{ + PWM0_Type = (uint8_t)0x00, //PWM预分频为Fhrc/1 + PWM1_Type = (uint8_t)0x01, //PWM预分频为Fhrc/2 +} PWM_Type_TypeDef; + +#elif defined (SC92L853x) || defined (SC92L753x) +//PWM预分频选择 +typedef enum +{ + PWM_PRESSEL_FHRC_D1 = (uint8_t)0x00, //PWM0预分频为Fhrc/1 + PWM_PRESSEL_FHRC_D2 = (uint8_t)0x10, //PWM0预分频为Fhrc/2 + PWM_PRESSEL_FHRC_D4 = (uint8_t)0x20, //PWM0预分频为Fhrc/4 + PWM_PRESSEL_FHRC_D8 = (uint8_t)0x30, //PWM0预分频为Fhrc/8 +} PWM_PresSel_TypeDef; + +//PWM输出通道选择 +typedef enum +{ + PWM0 = (uint8_t)0x00, //PWM输出通道选择: PWM00 + PWM1 = (uint8_t)0x02, //PWM输出通道选择: PWM01 + PWM2 = (uint8_t)0x04, //PWM输出通道选择: PWM02 + PWM3 = (uint8_t)0x06, //PWM输出通道选择: PWM03 + PWM4 = (uint8_t)0x08, //PWM输出通道选择: PWM04 + PWM5 = (uint8_t)0x0A, //PWM输出通道选择: PWM05 + PWM6 = (uint8_t)0x0C, //PWM输出通道选择: PWM06 + PWM7 = (uint8_t)0x0E, //PWM输出通道选择: PWM07 +} PWM_OutputPin_TypeDef; + +//PWM对齐模式 +typedef enum +{ + PWM0_Edge_Aligned_Mode = (uint8_t)0x00, //PWM边沿对齐模式 + PWM0_Center_Alignment_Mode = (uint8_t)0x01, //PWM中间对齐模式 +} PWM_Aligned_Mode_TypeDef; + +//PWM故障检测模式 +typedef enum +{ + PWM0_Latch_Mode = ((uint8_t)0x00), //PWM故障检测模式:锁存模式 + PWM0_Immediate_Mode = ((uint8_t)0x20) //PWM故障检测模式:立即模式 +} PWM_FaultDetectionMode_TypeDef; + +//PWM故障检测电平选择 +typedef enum +{ + PWM0_FaultDetectionVoltage_Low = ((uint8_t)0x00), //PWM故障检测低电平选择 + PWM0_FaultDetectionVoltage_high = ((uint8_t)0x10) //PWM故障检测高电平选择 +} PWM_FaultDetectionVoltageSelect_TypeDef; + +//PWM故障检测输入信号滤波时间 +typedef enum +{ + PWM0_WaveFilteringTime_0us = ((uint8_t)0x00), //PWM故障检测输入信号滤波时间0us + PWM0_WaveFilteringTime_1us = ((uint8_t)0x01), //PWM故障检测输入信号滤波时间1us + PWM0_WaveFilteringTime_4us = ((uint8_t)0x02), //PWM故障检测输入信号滤波时间4us + PWM0_WaveFilteringTime_16us = ((uint8_t)0x03) //PWM故障检测输入信号滤波时间16us +} PWM_FaultDetectionWaveFilteringTime_TypeDef; + +//PWM互补模式通道选择 +typedef enum +{ + PWM0PWM1 = (uint8_t)0x00, //PWM互补模式通道选择:PWM00、PWM01 + PWM2PWM3 = (uint8_t)0x04, //PWM互补模式通道选择:PWM02、PWM03 + PWM4PWM5 = (uint8_t)0x08, //PWM互补模式通道选择:PWM04、PWM05 + PWM6PWM7 = (uint8_t)0x0C //PWM互补模式通道选择:PWM06、PWM07 +} PWM_ComplementaryOutputPin_TypeDef; + +//PWM源选择 +typedef enum +{ + PWM0_Type = (uint8_t)0x00, //操作PWM0 +} PWM_Type_TypeDef; +#endif + +typedef enum +{ + PWM_OUTPUTSTATE_DISABLE = ((uint8_t)0x00), //该PIN脚作为GPIO + PWM_OUTPUTSTATE_ENABLE = ((uint8_t)0x01) //该PIN脚作为PWM +} PWM_OutputState_TypeDef; + +typedef enum +{ + PWM_POLARITY_NON_INVERT = ((uint8_t)0x00), //PWM输出不反向` + PWM_POLARITY_INVERT = ((uint8_t)0x01) //PWM输出反向 +} PWM_Polarity_TypeDef; + +void PWM_DeInit(void); +void PWM_Init(PWM_PresSel_TypeDef PWM_PresSel, + uint16_t PWM_Period); +void PWM_OutputStateConfig(uint8_t PWM_OutputPin, + PWM_OutputState_TypeDef PWM_OutputState); +void PWM_PolarityConfig(uint8_t PWM_OutputPin, + PWM_Polarity_TypeDef PWM_Polarity); +void PWM_IndependentModeConfig(PWM_OutputPin_TypeDef PWM_OutputPin, + uint16_t PWM_DutyCycle); +void PWM_ITConfig(FunctionalState NewState, + PriorityStatus Priority); + +#if defined (SC92FWxx) || defined (SC92L853x) || defined (SC92L753x) +#if !defined (SC92FWxx) +void PWM_Aligned_Mode_Select(PWM_Aligned_Mode_TypeDef PWM_Aligned_Mode); +void PWM_FaultDetectionModeConfigEX(PWM_Type_TypeDef PWM_Type, + PWM_FaultDetectionMode_TypeDef FaultDetectionMode, + PWM_FaultDetectionVoltageSelect_TypeDef FaultDetectionVoltageSelect, + PWM_FaultDetectionWaveFilteringTime_TypeDef FaultDetectionWaveFilteringTime); +#endif +void PWM_CmdEX(PWM_Type_TypeDef PWM_Type, + FunctionalState NewState); +FlagStatus PWM_GetFlagStatusEX(PWM_Type_TypeDef PWM_Type); +void PWM_ClearFlagEX(PWM_Type_TypeDef PWM_Type); +void PWM_IndependentModeConfigEX(PWM_OutputPin_TypeDef PWM_OutputPin, uint16_t PWM_DutyCycle, + PWM_OutputState_TypeDef PWM_OutputState); + +void PWM_ITConfigEX(PWM_Type_TypeDef PWM_Type, FunctionalState NewState, PriorityStatus Priority); +FlagStatus PWM_GetFaultDetectionFlagStatusEX(PWM_Type_TypeDef PWM_Type); +void PWM_ClearFaultDetectionFlagEX(PWM_Type_TypeDef PWM_Type); +void PWM_FaultDetectionConfigEX(PWM_Type_TypeDef PWM_Type, FunctionalState NewState); +#else +void PWM_Cmd(FunctionalState NewState); +FlagStatus PWM_GetFlagStatus(void); +void PWM_ClearFlag(void); +#endif + +/* 复用通道以及死区配置函数 */ +#if defined (SC92F846xB) || defined (SC92F746xB) || defined (SC92F836xB) || defined (SC92F736xB)|| defined (SC92F83Ax) || defined (SC92F73Ax)|| defined (SC92F84Ax) || defined (SC92F74Ax)|| defined (SC92F7003) || defined (SC92F8003) || defined (SC92F740x) || defined (SC92F848x) || defined (SC92F748x) || defined (SC92F848x) || defined (SC92F748x) +void PWM_ComplementaryModeConfig( PWM_ComplementaryOutputPin_TypeDef + PWM_ComplementaryOutputPin, + uint16_t PWM_DutyCycle); +void PWM_DeadTimeConfig(uint8_t PWM012_RisingDeadTime, uint8_t PWM345_fallingDeadTime); +#endif +#if defined (SC92L853x) || defined (SC92L753x) +void PWM_DeadTimeConfigEX(PWM_Type_TypeDef PWM_Type, uint8_t PWM_RisingDeadTime, uint8_t PWM_FallingDeadTime); +#endif +/* PWM输出通道选择 */ +#if defined (SC92F8003) || defined (SC92F740x) || defined (SC92F7003) + void PWM_PWM2Selection(PWM2_OutputPin_TypeDef PWM2_OutputPin); + void PWM_PWM5Selection(PWM5_OutputPin_TypeDef PWM5_OutputPin); +#endif +#if defined (SC92F732X) || defined (SC93F833x) || defined (SC93F843x) || defined (SC93F743x) + void PWM_PWM0Selection(PWM0_OutputPin_TypeDef PWM0_OutputPin); + void PWM_PWM1Selection(PWM1_OutputPin_TypeDef PWM1_OutputPin); + void PWM_PWM2Selection(PWM2_OutputPin_TypeDef PWM2_OutputPin); + void PMM_DutyModeSelection(PWM_OutputPin_TypeDef PWM_OutputPin, PWM_DutyMode_TypeDef PWM_DutyMode); +#endif + +#endif + +#endif +/******************* (C) COPYRIGHT 2020 SinOne Microelectronics *****END OF FILE****/ \ No newline at end of file diff --git a/CFG/SC92F8363B/Keil_Mould/FWLib/SC92F_Lib/inc/sc92f_pwr.h b/CFG/SC92F8363B/Keil_Mould/FWLib/SC92F_Lib/inc/sc92f_pwr.h new file mode 100644 index 0000000..ddb4f72 --- /dev/null +++ b/CFG/SC92F8363B/Keil_Mould/FWLib/SC92F_Lib/inc/sc92f_pwr.h @@ -0,0 +1,24 @@ +//************************************************************ +// Copyright (c) 深圳市赛元微电子有限公司 +// 文件名称 : sc92f_pwr.h +// 作者 : +// 模块功能 : PWR固件库函数头文件 +// 局部函数列表: +// 最后更正日期: 2020/8/18 +// 版本 : V1.0 +// 说明 : +//************************************************************* + +#ifndef _sc92f_PWR_H_ +#define _sc92f_PWR_H_ + +#include "sc92f.h" +#include + +void PWR_DeInit(void); +void PWR_EnterSTOPMode(void); +void PWR_EnterIDLEMode(void); + +#endif + +/******************* (C) COPYRIGHT 2020 SinOne Microelectronics *****END OF FILE****/ \ No newline at end of file diff --git a/CFG/SC92F8363B/Keil_Mould/FWLib/SC92F_Lib/inc/sc92f_ssi.h b/CFG/SC92F8363B/Keil_Mould/FWLib/SC92F_Lib/inc/sc92f_ssi.h new file mode 100644 index 0000000..4d9d33e --- /dev/null +++ b/CFG/SC92F8363B/Keil_Mould/FWLib/SC92F_Lib/inc/sc92f_ssi.h @@ -0,0 +1,282 @@ +//************************************************************ +// Copyright (c) 深圳市赛元微电子有限公司 +// 文件名称 : sc92f_ssi.h +// 作者 : +// 模块功能 : SSI固件库函数头文件 +// 局部函数列表: +// 最后更正日期: 2020/08/20 +// 版本 : V1.10001 +// 说明 : +//************************************************************* + +#ifndef _sc92f_SSI_H_ +#define _sc92f_SSI_H_ + +#include "sc92f.h" + +#if defined (SC92F854x) || defined (SC92F754x) ||defined (SC92F844xB) || defined (SC92F744xB)||defined (SC92F84Ax_2) || defined (SC92F74Ax_2)\ + || defined (SC92F846xB) || defined (SC92F746xB) || defined (SC92F836xB) || defined (SC92F736xB)||defined (SC92F84Ax) || defined (SC92F74Ax)\ + || defined (SC92F83Ax) || defined (SC92F73Ax) || defined (SC92F7003) || defined(SC92F8003) || defined (SC92F740x) || defined (SC92F827X)\ + || defined (SC92F837X) || defined (SC92FWxx) || defined (SC93F833x) || defined (SC93F843x) || defined (SC93F743x) || defined (SC92F848x) || defined (SC92F748x)\ + || defined (SC92F859x) || defined (SC92F859x) +typedef enum +{ + SPI_FIRSTBIT_MSB = (uint8_t)0x00, //MSB优先发送 + SPI_FIRSTBIT_LSB = (uint8_t)0x04 //LSB优先发送 +} SPI_FirstBit_TypeDef; + +typedef enum +{ + SPI_BAUDRATEPRESCALER_4 = (uint8_t)0x00, //SPI时钟速率为系统时钟除以4 + SPI_BAUDRATEPRESCALER_8 = (uint8_t)0x01, //SPI时钟速率为系统时钟除以8 + SPI_BAUDRATEPRESCALER_16 = (uint8_t)0x02, //SPI时钟速率为系统时钟除以16 + SPI_BAUDRATEPRESCALER_32 = (uint8_t)0x03, //SPI时钟速率为系统时钟除以32 + SPI_BAUDRATEPRESCALER_64 = (uint8_t)0x04, //SPI时钟速率为系统时钟除以64 + SPI_BAUDRATEPRESCALER_128 = (uint8_t)0x05, //SPI时钟速率为系统时钟除以128 + SPI_BAUDRATEPRESCALER_256 = (uint8_t)0x06, //SPI时钟速率为系统时钟除以256 + SPI_BAUDRATEPRESCALER_512 = (uint8_t)0x07 //SPI时钟速率为系统时钟除以512 +} SPI_BaudRatePrescaler_TypeDef; + +typedef enum +{ + SPI_MODE_MASTER = (uint8_t)0x20, //SPI为主设备 + SPI_MODE_SLAVE = (uint8_t)0x00 //SPI为从设备 +} SPI_Mode_TypeDef; + +typedef enum +{ + SPI_CLOCKPOLARITY_LOW = (uint8_t)0x00, //SCK在空闲状态下为低电平 + SPI_CLOCKPOLARITY_HIGH = (uint8_t)0x10 //SCK在空闲状态下为高电平 +} SPI_ClockPolarity_TypeDef; + +typedef enum +{ + SPI_CLOCKPHASE_1EDGE = (uint8_t)0x00, //SCK的第一沿采集数据 + SPI_CLOCKPHASE_2EDGE = (uint8_t)0x08 //SCK的第二沿采集数据 +} SPI_ClockPhase_TypeDef; + +typedef enum + { + //作为从机 + TWI_SlaveBusy = 0x00, + TWI_SlaveReceivedaAddress = 0x01, + TWI_SlaveReceivedaData = 0x02, + TWI_SlaveSendData = 0x03, + TWI_SlaveReceivedaUACK = 0x04, + TWI_SlaveDisableACK = 0x05, + TWI_SlaveAddressError = 0x06, + +}SSI_TWIState_TypeDef; + +typedef enum +{ + SPI_TXE_DISINT = (uint8_t)0x00, //TXE为1时不允许发送中断 + SPI_TXE_ENINT = (uint8_t)0x01 //TXE为1时允许发送中断 +} SPI_TXE_INT_TypeDef; + +typedef enum +{ + UART1_Mode_10B = 0X00,//UART1设置为10位模式 + UART1_Mode_11B = 0X80 //UART1设置为11位模式 +} UART1_Mode_TypeDef; + +typedef enum +{ + UART1_RX_ENABLE = 0X10,//UART1允许接收 + UART1_RX_DISABLE = 0X00 //UART1禁止接收 +} UART1_RX_TypeDef; + +typedef enum +{ + SPI_FLAG_SPIF = (uint8_t)0x80, //SPI数据传送标志位SPIF + SPI_FLAG_WCOL = (uint8_t)0x50, //SPI写入冲突标志位WCOL + SPI_FLAG_TXE = (uint8_t)0x08, //SPI发送缓存器空标志TXE + TWI_FLAG_TWIF = (uint8_t)0x40, //TWI中断标志位TWIF + TWI_FLAG_GCA = (uint8_t)0x10, //TWI通用地址响应标志位GCA + UART1_FLAG_TI = (uint8_t)0x02, //UART1发送中断标志位TI + UART1_FLAG_RI = (uint8_t)0x01 //UART1接收中断标志位RI +} SSI_Flag_TypeDef; + +#if defined (SC92F7003) || defined (SC92F8003) || defined (SC92F740x) +typedef enum +{ + SSI_PinSelection_P10P27P26 = (uint8_t)0x00, //SSI共用引脚为P10,P27,P26 + SSI_PinSelection_P21P22P23 = (uint8_t)0x20, //SSI共用引脚为P21,P22,P23 + SSI_PinSelection_URATP27 = (uint8_t)0x00, //SSIUART引脚为P27,无RX + SSI_PinSelection_URATP22 = (uint8_t)0x20 //SSIUART引脚为P22,无RX +} SSI_PinSelection_TypeDef; +void SSI_PinSelection(SSI_PinSelection_TypeDef + PinSeletion); +#endif + +void SSI_DeInit(void); +void SSI_SPI_Init(SPI_FirstBit_TypeDef FirstBit, + SPI_BaudRatePrescaler_TypeDef BaudRatePrescaler, + SPI_Mode_TypeDef Mode, + SPI_ClockPolarity_TypeDef ClockPolarity, + SPI_ClockPhase_TypeDef ClockPhase, + SPI_TXE_INT_TypeDef SPI_TXE_INT); +void SSI_SPI_Cmd(FunctionalState NewState); +void SSI_SPI_SendData(uint8_t Data); +uint8_t SSI_SPI_ReceiveData(void); +void SSI_TWI_Init(uint8_t TWI_Address); +void SSI_TWI_AcknowledgeConfig(FunctionalState NewState); +void SSI_TWI_GeneralCallCmd(FunctionalState NewState); +FlagStatus SSI_GetTWIStatus(SSI_TWIState_TypeDef SSI_TWIState); +FlagStatus SSI_GetFlagStatus(SSI_Flag_TypeDef SSI_FLAG); +void SSI_TWI_Cmd(FunctionalState NewState); +void SSI_TWI_SendData(uint8_t Data); +uint8_t SSI_TWI_ReceiveData(void); +void SSI_UART1_Init(uint32_t UART1Fsys, + uint32_t BaudRate, UART1_Mode_TypeDef Mode, + UART1_RX_TypeDef RxMode); +void SSI_UART1_SendData8(uint8_t Data); +uint8_t SSI_UART1_ReceiveData8(void); +void SSI_UART1_SendData9(uint16_t Data); +uint16_t SSI_UART1_ReceiveData9(void); +void SSI_ITConfig(FunctionalState NewState, + PriorityStatus Priority); +void SSI_ClearFlag(SSI_Flag_TypeDef SSI_FLAG); +#endif + +#if defined (SC92F742x) || defined (SC92F7490) +typedef enum +{ + SPI_FIRSTBIT_MSB = (uint8_t)0x00, //MSB优先发送 + SPI_FIRSTBIT_LSB = (uint8_t)0x04 //LSB优先发送 +} SPI_FirstBit_TypeDef; + +typedef enum +{ + SPI_BAUDRATEPRESCALER_1 = (uint8_t)0x00, //SPI时钟速率为Fsys/1 + SPI_BAUDRATEPRESCALER_2 = (uint8_t)0x01, //SPI时钟速率为Fsys/2 + SPI_BAUDRATEPRESCALER_4 = (uint8_t)0x02, //SPI时钟速率为Fsys/4 + SPI_BAUDRATEPRESCALER_8 = (uint8_t)0x03, //SPI时钟速率为Fsys/8 + SPI_BAUDRATEPRESCALER_16 = (uint8_t)0x04, //SPI时钟速率为Fsys/16 + SPI_BAUDRATEPRESCALER_32 = (uint8_t)0x05, //SPI时钟速率为Fsys/32 + SPI_BAUDRATEPRESCALER_64 = (uint8_t)0x06, //SPI时钟速率为Fsys/64 + SPI_BAUDRATEPRESCALER_128 = (uint8_t)0x07 //SPI时钟速率为Fsys/128 +} SPI_BaudRatePrescaler_TypeDef; + +typedef enum +{ + SPI_MODE_MASTER = (uint8_t)0x20, //SPI为主设备 + SPI_MODE_SLAVE = (uint8_t)0x00 //SPI为从设备 +} SPI_Mode_TypeDef; + +typedef enum +{ + SPI_CLOCKPOLARITY_LOW = (uint8_t)0x00, //SCK在空闲状态下为低电平 + SPI_CLOCKPOLARITY_HIGH = (uint8_t)0x10 //SCK在空闲状态下为高电平 +} SPI_ClockPolarity_TypeDef; + +typedef enum +{ + SPI_CLOCKPHASE_1EDGE = (uint8_t)0x00, //SCK的第一沿采集数据 + SPI_CLOCKPHASE_2EDGE = (uint8_t)0x08 //SCK的第二沿采集数据 +} SPI_ClockPhase_TypeDef; + +typedef enum +{ + SPI_TXE_DISINT = (uint8_t)0x00, //TXE为0时不允许发送中断 + SPI_TXE_ENINT = (uint8_t)0x01 //TXE为1时允许发送中断 +} SPI_TXE_INT_TypeDef; + +typedef enum +{ + UART_Mode_10B = 0X00, //UART设置为10位模式 + UART_Mode_11B = 0X80 //UART设置为11位模式 +} UART_Mode_TypeDef; + +typedef enum +{ + UART_RX_ENABLE = 0X10, //UART允许接收 + UART_RX_DISABLE = 0X00 //UART禁止接收 +} UART_RX_TypeDef; + +typedef enum{ + //作为从机 + TWI_SlaveBusy = 0x00, + TWI_SlaveReceivedaAddress = 0x01, + TWI_SlaveReceivedaData = 0x02, + TWI_SlaveSendData = 0x03, + TWI_SlaveReceivedaUACK = 0x04, + TWI_SlaveDisableACK = 0x05, + TWI_SlaveAddressError = 0x06, + +}SSI_TWIState_TypeDef; + +typedef enum +{ + SPI_FLAG_SPIF = (uint8_t)0x80, //SPI数据传送标志位SPIF + SPI_FLAG_WCOL = (uint8_t)0x50, //SPI写入冲突标志位WCOL + SPI_FLAG_TXE = (uint8_t)0x08, //SPI发送缓存器空标志TXE + TWI_FLAG_TWIF = (uint8_t)0x40, //TWI中断标志位TWIF + TWI_FLAG_GCA = (uint8_t)0x10, //TWI通用地址响应标志位GCA + UART_FLAG_TI = (uint8_t)0x02, //UART发送中断标志位TI + UART_FLAG_RI = (uint8_t)0x01 //UART接收中断标志位RI +} SSI_Flag_TypeDef; + +void SSI0_DeInit(void); +void SSI0_SPI_Init(SPI_FirstBit_TypeDef FirstBit, + SPI_BaudRatePrescaler_TypeDef BaudRatePrescaler, + SPI_Mode_TypeDef Mode, + SPI_ClockPolarity_TypeDef ClockPolarity, + SPI_ClockPhase_TypeDef ClockPhase, + SPI_TXE_INT_TypeDef SPI_TXE_INT); +void SSI0_SPI_Cmd(FunctionalState NewState); +void SSI0_SPI_SendData(uint8_t Data); +uint8_t SSI0_SPI_ReceiveData(void); +void SSI0_TWI_Init(uint8_t TWI_Address); +void SSI0_TWI_AcknowledgeConfig(FunctionalState NewState); +void SSI0_TWI_GeneralCallCmd(FunctionalState NewState); +FlagStatus SSI0_GetTWIStatus(SSI_TWIState_TypeDef SSI_TWIState); +void SSI0_TWI_Cmd(FunctionalState NewState); +void SSI0_TWI_SendData(uint8_t Data); +uint8_t SSI0_TWI_ReceiveData(void); +void SSI0_UART_Init(uint32_t UARTFsys, + uint32_t BaudRate, UART_Mode_TypeDef Mode, + UART_RX_TypeDef RxMode); +void SSI0_UART_SendData8(uint8_t Data); +uint8_t SSI0_UART_ReceiveData8(void); +void SSI0_UART_SendData9(uint16_t Data); +uint16_t SSI0_UART_ReceiveData9(void); +void SSI0_ITConfig(FunctionalState NewState, + PriorityStatus Priority); +FlagStatus SSI0_GetFlagStatus(SSI_Flag_TypeDef SSI_FLAG); +void SSI0_ClearFlag(SSI_Flag_TypeDef SSI_FLAG); + +void SSI1_DeInit(void); +void SSI1_SPI_Init(SPI_FirstBit_TypeDef FirstBit, + SPI_BaudRatePrescaler_TypeDef BaudRatePrescaler, + SPI_Mode_TypeDef Mode, + SPI_ClockPolarity_TypeDef ClockPolarity, + SPI_ClockPhase_TypeDef ClockPhase, + SPI_TXE_INT_TypeDef SPI_TXE_INT); +void SSI1_SPI_Cmd(FunctionalState NewState); +void SSI1_SPI_SendData(uint8_t Data); +uint8_t SSI1_SPI_ReceiveData(void); +void SSI1_TWI_Init(uint8_t TWI_Address); +void SSI1_TWI_AcknowledgeConfig(FunctionalState NewState); +void SSI1_TWI_GeneralCallCmd(FunctionalState NewState); +FlagStatus SSI1_GetTWIStatus(SSI_TWIState_TypeDef SSI_TWIState); +void SSI1_TWI_Cmd(FunctionalState NewState); +void SSI1_TWI_SendData(uint8_t Data); +uint8_t SSI1_TWI_ReceiveData(void); +void SSI1_UART_Init(uint32_t UARTFsys, + uint32_t BaudRate, UART_Mode_TypeDef Mode, + UART_RX_TypeDef RxMode); +void SSI1_UART_SendData8(uint8_t Data); +uint8_t SSI1_UART_ReceiveData8(void); +void SSI1_UART_SendData9(uint16_t Data); +uint16_t SSI1_UART_ReceiveData9(void); +void SSI1_ITConfig(FunctionalState NewState, + PriorityStatus Priority); +FlagStatus SSI1_GetFlagStatus(SSI_Flag_TypeDef + SSI_FLAG); +void SSI1_ClearFlag(SSI_Flag_TypeDef SSI_FLAG); +#endif + +#endif + +/******************* (C) COPYRIGHT 2020 SinOne Microelectronics *****END OF FILE****/ \ No newline at end of file diff --git a/CFG/SC92F8363B/Keil_Mould/FWLib/SC92F_Lib/inc/sc92f_timer0.h b/CFG/SC92F8363B/Keil_Mould/FWLib/SC92F_Lib/inc/sc92f_timer0.h new file mode 100644 index 0000000..5dcd8bc --- /dev/null +++ b/CFG/SC92F8363B/Keil_Mould/FWLib/SC92F_Lib/inc/sc92f_timer0.h @@ -0,0 +1,139 @@ +//************************************************************ +// Copyright (c) 深圳市赛元微电子有限公司 +// 文件名称: sc92f_tiemr0.h +// 作者: 赛元应用团队 +// 模块功能: TIMER0固件库函数C文件 +// 最后更正日期: 2022年3月23日 +// 版本: V1.10001 +// 说明: +//************************************************************* + +#ifndef _sc92f_TIMER0_H_ +#define _sc92f_TIMER0_H_ + +#include "sc92f.h" + +typedef enum +{ + TIM0_PRESSEL_FSYS_D12 = ((uint8_t)0x00), //TIMER0计数源来自系统时钟12分频 + TIM0_PRESSEL_FSYS_D1 = ((uint8_t)0x01) //TIMER0计数源来自系统时钟 +} TIM0_PresSel_TypeDef; + +typedef enum +{ + TIM0_MODE_TIMER = ((uint8_t)0x01), //TIMER0做定时器 + TIM0_MODE_COUNTER = ((uint8_t)0x02) //TIMER0做计数器 +} TIM0_CountMode_TypeDef; + +typedef enum +{ + TIM0_WORK_MODE0 = ((uint8_t)0x00), //TIMER0选择工作模式0 + TIM0_WORK_MODE1 = ((uint8_t)0x01), //TIMER0选择工作模式1 + TIM0_WORK_MODE2 = ((uint8_t)0x02), //TIMER0选择工作模式2 + TIM0_WORK_MODE3 = ((uint8_t)0x03) //TIMER0选择工作模式3 +} TIM0_WorkMode_TypeDef; + +/************************宏函数************************/ +/************************************************** +*函数名称:void TIM0_Mode0SetReloadCounter(uint16_t TIM0_SetCounter) +*函数功能:TIMER0工作模式0初值重载函数 +*入口参数: +uint16_t:TIM0_SetCounter:配置TIMER0重载值 +*出口参数:void +**************************************************/ +#define TIM0_Mode0SetReloadCounter(TIM0_SetCounter) \ + do{ \ + TL0 = (uint8_t)TIM0_SetCounter; \ + TH0 = (TIM0_SetCounter >> 5); \ + }while(0) + +/************************************************** +*函数名称:void TIM0_Mode1SetReloadCounter(uint16_t TIM0_SetCounter) +*函数功能:TIMER0工作模式1初值重载函数 +*入口参数: +uint16_t:TIM0_SetCounter:配置TIMER0重载值 +*出口参数:void +**************************************************/ +#define TIM0_Mode1SetReloadCounter(TIM0_SetCounter) \ + do{ \ + TL0 = (uint8_t)TIM0_SetCounter; \ + TH0 = (TIM0_SetCounter >> 8); \ + }while(0) + +/************************************************** +*函数名称:void TIM0_SetTH0Counter(uint8_t TIM0_SetCounter) +*函数功能:TIMER0 TH0赋值函数 +*入口参数: +uint8_t:TIM0_SetCounter:配置TH0 +*出口参数:void +**************************************************/ +#define TIM0_SetTH0Counter(TIM0_SetCounter) (TH0 = TIM0_SetCounter) + +/************************************************** +*函数名称:void TIM0_SetTL0Counter(uint8_t TIM0_SetCounter) +*函数功能:TIMER0 TL0赋值函数 +*入口参数: +uint8_t:TIM0_SetCounter:配置TL0 +*出口参数:void +**************************************************/ +#define TIM0_SetTL0Counter(TIM0_SetCounter) (TL0 = TIM0_SetCounter) + +/***************************************************** +*函数名称:void TIM0_Cmd(FunctionalState NewState) +*函数功能:TIMER0功能开关函数 +*入口参数: +FunctionalState:NewState:功能启动/关闭选择 +*出口参数:void +*****************************************************/ +#define TIM0_Cmd(NewState) (TR0 = (bit)NewState) + +/***************************************************** +*函数名称:FlagStatus TIM0_GetFlagStatus(void) +*函数功能:获得TIMER0中断标志状态 +*入口参数:void +*出口参数: +FlagStatus:TIMER0中断标志状态 +*****************************************************/ +#define TIM0_GetFlagStatus() (TF0) + +/***************************************************** +*函数名称:void TIM0_ITConfig(FunctionalState NewState, PriorityStatus Priority) +*函数功能:TIMER1中断初始化 +*入口参数: +FunctionalState:NewState:中断使能/关闭选择 +PriorityStatus:Priority:中断优先级选择 +*出口参数:void +*****************************************************/ +#define TIM0_ITConfig(NewState,Priority) \ + do{ \ + ET0 = (bit)NewState; \ + IPT0 = (bit)Priority; \ + }while(0) + +/***************************************************** +*函数名称:void TIM0_ClearFlag(void) +*函数功能:清除TIMER0中断标志状态 +*入口参数:void +*出口参数:void +*****************************************************/ +#define TIM0_ClearFlag() (TF0 = 0) + +void TIM0_DeInit(void); +void TIM0_TimeBaseInit(TIM0_PresSel_TypeDef + TIM0_PrescalerSelection, + TIM0_CountMode_TypeDef TIM0_CountMode); +void TIM0_WorkMode0Config(uint16_t + TIM0_SetCounter); +void TIM0_WorkMode1Config(uint16_t + TIM0_SetCounter); +void TIM0_WorkMode2Config(uint8_t + TIM0_SetCounter); +void TIM0_WorkMode3Config(uint8_t TIM0_SetCounter, + uint8_t TIM1_SetCounter); +void TIM0_WorkModeConfig(TIM0_WorkMode_TypeDef + TIM0_WorkMode, uint16_t TIM0_SetCounter1, + uint16_t TIM0_SetCounter2); + +#endif + +/******************* (C) COPYRIGHT 2020 SinOne Microelectronics *****END OF FILE****/ \ No newline at end of file diff --git a/CFG/SC92F8363B/Keil_Mould/FWLib/SC92F_Lib/inc/sc92f_timer1.h b/CFG/SC92F8363B/Keil_Mould/FWLib/SC92F_Lib/inc/sc92f_timer1.h new file mode 100644 index 0000000..bdf392f --- /dev/null +++ b/CFG/SC92F8363B/Keil_Mould/FWLib/SC92F_Lib/inc/sc92f_timer1.h @@ -0,0 +1,116 @@ +//************************************************************ +// Copyright (c) 深圳市赛元微电子有限公司 +// 文件名称 : sc92f_timer1.h +// 作者 : +// 模块功能 : TIMER1固件库函数头文件 +// 局部函数列表: +// 最后更正日期: 2020/8/18 +// 版本 : V1.0 +// 说明 : +//************************************************************* + +#ifndef _sc92f_TIMER1_H_ +#define _sc92f_TIMER1_H_ + +#include "sc92f.h" + +typedef enum +{ + TIM1_PRESSEL_FSYS_D12 = ((uint8_t)0x00), //TIMER1计数源来自系统时钟12分频 + TIM1_PRESSEL_FSYS_D1 = ((uint8_t)0x01) //TIMER1计数源来自系统时钟 +} TIM1_PresSel_TypeDef; + +typedef enum +{ + TIM1_MODE_TIMER = ((uint8_t)0x01), //TIMER1做定时器 + TIM1_MODE_COUNTER = ((uint8_t)0x02) //TIMER1做计数器 +} TIM1_CountMode_TypeDef; + +typedef enum +{ + TIM1_WORK_MODE0 = ((uint8_t)0x00), //TIMER1选择工作模式0 + TIM1_WORK_MODE1 = ((uint8_t)0x01), //TIMER1选择工作模式1 + TIM1_WORK_MODE2 = ((uint8_t)0x02), //TIMER1选择工作模式2 +} TIM1_WorkMode_TypeDef; + +/************************宏函数************************/ +/************************************************** +*函数名称:void TIM1_Mode0SetReloadCounter(uint16_t TIM1_SetCounter) +*函数功能:TIMER1工作模式0初值重载函数 +*入口参数: +uint16_t:TIM1_SetCounter:配置TIMER0重载值 +*出口参数:void +**************************************************/ +#define TIM1_Mode0SetReloadCounter(TIM1_SetCounter) \ + do{ \ + TL1 = (uint8_t)TIM1_SetCounter; \ + TH1 = (TIM1_SetCounter >> 5); \ + }while(0) + +/************************************************** +*函数名称:void TIM1_Mode1SetReloadCounter(uint16_t TIM1_SetCounter) +*函数功能:TIMER0工作模式1初值重载函数 +*入口参数: +uint16_t:TIM1_SetCounter:配置TIMER0重载值 +*出口参数:void +**************************************************/ +#define TIM1_Mode1SetReloadCounter(TIM1_SetCounter) \ + do{ \ + TL1 = (uint8_t)TIM1_SetCounter; \ + TH1 = (TIM1_SetCounter >> 8); \ + }while(0) + +/***************************************************** +*函数名称:void TIM1_Cmd(FunctionalState NewState) +*函数功能:TIMER1功能开关函数 +*入口参数: +FunctionalState:NewState:功能启动/关闭选择 +*出口参数:void +*****************************************************/ +#define TIM1_Cmd(NewState) (TR1 = (bit)NewState) + +/***************************************************** +*函数名称:void TIM1_ITConfig(FunctionalState NewState, PriorityStatus Priority) +*函数功能:TIMER1中断初始化 +*入口参数: +FunctionalState:NewState:中断使能/关闭选择 +PriorityStatus:Priority:中断优先级选择 +*出口参数:void +*****************************************************/ +#define TIM1_ITConfig(NewState,Priority) \ + do{ \ + ET1 = (bit)NewState; \ + IPT1 = (bit)Priority; \ + }while(0) + +/***************************************************** +*函数名称:FlagStatus TIM1_GetFlagStatus(void) +*函数功能:获得TIMER1中断标志状态 +*入口参数:void +*出口参数: +FlagStatus:TIMER1中断标志状态 +*****************************************************/ +#define TIM1_GetFlagStatus() (TF1) + +/***************************************************** +*函数名称:void TIM1_ClearFlag(void) +*函数功能:清除TIMER1中断标志状态 +*入口参数:void +*出口参数:void +*****************************************************/ +#define TIM1_ClearFlag() (TF1 = 0) + +void TIM1_DeInit(void); +void TIM1_TimeBaseInit(TIM1_PresSel_TypeDef + TIM1_PrescalerSelection, + TIM1_CountMode_TypeDef TIM1_CountMode); +void TIM1_WorkMode0Config(uint16_t TIM1_SetCounter); +void TIM1_WorkMode1Config(uint16_t TIM1_SetCounter); +void TIM1_WorkMode2Config(uint8_t TIM1_SetCounter); +void TIM1_WorkModeConfig(TIM1_WorkMode_TypeDef TIM1_WorkMode, + uint16_t TIM1_SetCounter); + + +#endif + +/******************* (C) COPYRIGHT 2020 SinOne Microelectronics *****END OF FILE****/ \ No newline at end of file diff --git a/CFG/SC92F8363B/Keil_Mould/FWLib/SC92F_Lib/inc/sc92f_timer2.h b/CFG/SC92F8363B/Keil_Mould/FWLib/SC92F_Lib/inc/sc92f_timer2.h new file mode 100644 index 0000000..883933b --- /dev/null +++ b/CFG/SC92F8363B/Keil_Mould/FWLib/SC92F_Lib/inc/sc92f_timer2.h @@ -0,0 +1,98 @@ +//************************************************************ +// Copyright (c) 深圳市赛元微电子有限公司 +// 文件名称: sc92f_timer2.h +// 作者: 赛元应用团队 +// 模块功能: TIMER2固件库函数头文件 +// 最后更正日期: 2022年3月23日 +// 版本: V1.10003 +// 说明: 该文件仅适用于SC92F系列芯片 +//************************************************************* + +#ifndef _sc92f_TIMER2_H_ +#define _sc92f_TIMER2_H_ + +#include "sc92f.h" + +typedef enum +{ + TIM2_PRESSEL_FSYS_D12 = ((uint8_t)0x00), //TIMER2计数源来自系统时钟12分频 + TIM2_PRESSEL_FSYS_D1 = ((uint8_t)0x01) //TIMER2计数源来自系统时钟 +} TIM2_PresSel_TypeDef; + +#if defined (SC92F730x) || defined (SC92F827X) || defined (SC92F837X) || defined (SC92F725X) || defined (SC92F735X) + +typedef enum +{ + TIM2_MODE_TIMER = ((uint8_t)0x01), //TIMER2做定时器 +} TIM2_CountMode_TypeDef; + +typedef enum +{ + TIM2_COUNTDIRECTION_UP = ((uint8_t)0x00), //向上计数模式 +} TIM2_CountDirection_TypeDef; + +typedef enum +{ + TIM2_FLAG_TF2 = (uint8_t)0x80, //中断标志位TF2,计数溢出 +} TIM2_Flag_TypeDef; + +typedef enum +{ + TIM2_WORK_MODE1 = ((uint8_t)0x00), //TIMER2选择工作模式1 +} TIM2_WorkMode_TypeDef; + +#else + +typedef enum +{ + TIM2_MODE_TIMER = ((uint8_t)0x01), //TIMER2做定时器 + TIM2_MODE_COUNTER = ((uint8_t)0x02) //TIMER2做计数器 +} TIM2_CountMode_TypeDef; + +typedef enum +{ + TIM2_COUNTDIRECTION_UP = ((uint8_t)0x00), //向上计数模式 + TIM2_COUNTDIRECTION_DOWN_UP = ((uint8_t)0x10) //向上/向下计数模式 +} TIM2_CountDirection_TypeDef; + +typedef enum +{ + TIM2_FLAG_TF2 = (uint8_t)0x80, //中断标志位TF2,计数溢出 + TIM2_FLAG_EXF2 = (uint8_t)0x40 //中断标志位EXF2,外部触发 +} TIM2_Flag_TypeDef; + +typedef enum +{ + TIM2_WORK_MODE0 = ((uint8_t)0x00), //TIMER2选择工作模式0 + TIM2_WORK_MODE1 = ((uint8_t)0x01), //TIMER2选择工作模式1 + TIM2_WORK_MODE3 = ((uint8_t)0x03), //TIMER2选择工作模式3 +} TIM2_WorkMode_TypeDef; + +#endif + +/***************************************************** +*函数名称:void BTM_ClearFlag(void) +*函数功能:清除BTM中断标志状态 +*入口参数:void +*出口参数:void +*****************************************************/ +#define BTM_ClearFlag() CLEAR_BIT(BTMCON,0x40) + +void TIM2_DeInit(); +void TIM2_PrescalerSelection(TIM2_PresSel_TypeDef TIM2_PrescalerSelection); +void TIM2_TimeBaseInit(TIM2_PresSel_TypeDef TIM2_PrescalerSelection, + TIM2_CountMode_TypeDef TIM2_CountMode, + TIM2_CountDirection_TypeDef TIM2_CountDirection); +void TIM2_WorkMode0Config(uint16_t TIM2_SetCounter); +void TIM2_WorkMode1Config(uint16_t TIM2_SetCounter); +void TIM2_WorkMode3Config(uint16_t TIM2_SetCounter); +void TIM2_WorkModeConfig(TIM2_WorkMode_TypeDef TIM2_WorkMode, uint16_t TIM2_SetCounter); +void TIM2_SetEXEN2(FunctionalState NewState); +void TIM2_Cmd(FunctionalState NewState); +void TIM2_ITConfig(FunctionalState NewState, PriorityStatus Priority); +FlagStatus TIM2_GetFlagStatus(TIM2_Flag_TypeDef TIM2_Flag); +void TIM2_ClearFlag(TIM2_Flag_TypeDef TIM2_Flag); + +#endif + +/******************* (C) COPYRIGHT 2020 SinOne Microelectronics *****END OF FILE****/ \ No newline at end of file diff --git a/CFG/SC92F8363B/Keil_Mould/FWLib/SC92F_Lib/inc/sc92f_timer3.h b/CFG/SC92F8363B/Keil_Mould/FWLib/SC92F_Lib/inc/sc92f_timer3.h new file mode 100644 index 0000000..9521c8c --- /dev/null +++ b/CFG/SC92F8363B/Keil_Mould/FWLib/SC92F_Lib/inc/sc92f_timer3.h @@ -0,0 +1,63 @@ +//************************************************************ +// Copyright (c) 深圳市赛元微电子有限公司 +// 文件名称 : sc92f_timer3.h +// 作者 : +// 模块功能 : TIMER3固件库函数头文件 +// 最后更正日期: 2022/01/18 +// 版本 : V1.10000 +// 说明 :该文件仅适用于SC92F系列芯片 +//************************************************************* + +#ifndef _sc92f_TIMER3_H_ +#define _sc92f_TIMER3_H_ + +#include "sc92f.H" + +typedef enum +{ + TIM3_PRESSEL_FSYS_D12 = ((uint8_t)0x00), //TIMER3计数源来自系统时钟12分频 + TIM3_PRESSEL_FSYS_D1 = ((uint8_t)0x01) //TIMER3计数源来自系统时钟 +} TIM3_PresSel_TypeDef; + +typedef enum +{ + TIM3_MODE_TIMER = ((uint8_t)0x01), //TIMER3做定时器 + TIM3_MODE_COUNTER = ((uint8_t)0x02) //TIMER3做计数器 +} TIM3_CountMode_TypeDef; + +typedef enum +{ + TIM3_COUNTDIRECTION_UP = ((uint8_t)0x00), //向上计数模式 + TIM3_COUNTDIRECTION_DOWN_UP = ((uint8_t)0x10) //向上/向下计数模式 +} TIM3_CountDirection_TypeDef; + +typedef enum +{ + TIM3_FLAG_TF3 = (uint8_t)0x80, //中断标志位TF3 + TIM3_FLAG_EXF3 = (uint8_t)0x40 //中断标志位EXF3 +} TIM3_Flag_TypeDef; + +typedef enum +{ + TIM3_WORK_MODE0 = ((uint8_t)0x00), //TIMER3选择工作模式0 + TIM3_WORK_MODE1 = ((uint8_t)0x01), //TIMER3选择工作模式1 + TIM3_WORK_MODE3 = ((uint8_t)0x03), //TIMER3选择工作模式3 +} TIM3_WorkMode_TypeDef; + +void TIM3_DeInit(); +void TIM3_PrescalerSelection(TIM3_PresSel_TypeDef TIM3_PrescalerSelection); +void TIM3_WorkMode1Config(uint16_t TIM3_SetCounter); +void TIM3_Cmd(FunctionalState NewState); +void TIM3_ITConfig(FunctionalState NewState, PriorityStatus Priority); +FlagStatus TIM3_GetFlagStatus(TIM3_Flag_TypeDef TIM3_Flag); +void TIM3_ClearFlag(TIM3_Flag_TypeDef TIM3_Flag); + +void TIM3_TimeBaseInit(TIM3_CountMode_TypeDef TIM3_CountMode, + TIM3_CountDirection_TypeDef TIM3_CountDirection); +void TIM3_WorkMode0Config(uint16_t TIM3_SetCounter); +void TIM3_WorkMode3Config(uint16_t TIM3_SetCounter); +void TIM3_WorkModeConfig(TIM3_WorkMode_TypeDef TIM3_WorkMode, uint16_t TIM3_SetCounter); +void TIM3_SetEXEN3(FunctionalState NewState); + +#endif +/******************* (C) COPYRIGHT 2020 SinOne Microelectronics *****END OF FILE****/ \ No newline at end of file diff --git a/CFG/SC92F8363B/Keil_Mould/FWLib/SC92F_Lib/inc/sc92f_timer4.h b/CFG/SC92F8363B/Keil_Mould/FWLib/SC92F_Lib/inc/sc92f_timer4.h new file mode 100644 index 0000000..b454786 --- /dev/null +++ b/CFG/SC92F8363B/Keil_Mould/FWLib/SC92F_Lib/inc/sc92f_timer4.h @@ -0,0 +1,62 @@ +//************************************************************ +// Copyright (c) 深圳市赛元微电子有限公司 +// 文件名称 : sc92f_timerx.h +// 作者 : +// 模块功能 : TIMER4固件库函数头文件 +// 最后更正日期: 2021/01/18 +// 版本 : V1.10000 +// 说明 :该文件仅适用于SC92F系列芯片 +//************************************************************* + +#ifndef _sc92f_TIMER4_H_ +#define _sc92f_TIMER4_H_ + +#include "sc92f.H" + +typedef enum +{ + TIM4_PRESSEL_FSYS_D12 = ((uint8_t)0x00), //TIMER4计数源来自系统时钟12分频 + TIM4_PRESSEL_FSYS_D1 = ((uint8_t)0x01) //TIMER4计数源来自系统时钟 +} TIM4_PresSel_TypeDef; + +typedef enum +{ + TIM4_MODE_TIMER = ((uint8_t)0x01), //TIMER2做定时器 + TIM4_MODE_COUNTER = ((uint8_t)0x02) //TIMER2做计数器 +} TIM4_CountMode_TypeDef; + +typedef enum +{ + TIM4_COUNTDIRECTION_UP = ((uint8_t)0x00), //向上计数模式 + TIM4_COUNTDIRECTION_DOWN_UP = ((uint8_t)0x10) //向上/向下计数模式 +} TIM4_CountDirection_TypeDef; + +typedef enum +{ + TIM4_FLAG_TF4 = (uint8_t)0x80, //中断标志位TF4 + TIM4_FLAG_EXF4 = (uint8_t)0x40 //中断标志位EXF4 +} TIM4_Flag_TypeDef; + +typedef enum +{ + TIM4_WORK_MODE0 = ((uint8_t)0x00), //TIMER4选择工作模式0 + TIM4_WORK_MODE1 = ((uint8_t)0x01), //TIMER4选择工作模式1 + TIM4_WORK_MODE3 = ((uint8_t)0x03), //TIMER4选择工作模式3 +} TIM4_WorkMode_TypeDef; + +void TIM4_DeInit(); +void TIM4_PrescalerSelection(TIM4_PresSel_TypeDef TIM4_PrescalerSelection); +void TIM4_WorkMode1Config(uint16_t TIM4_SetCounter); +void TIM4_Cmd(FunctionalState NewState); +void TIM4_ITConfig(FunctionalState NewState, PriorityStatus Priority); +FlagStatus TIM4_GetFlagStatus(TIM4_Flag_TypeDef TIM4_Flag); +void TIM4_ClearFlag(TIM4_Flag_TypeDef TIM4_Flag); + +void TIM4_TimeBaseInit(TIM4_CountMode_TypeDef TIM4_CountMode, + TIM4_CountDirection_TypeDef TIM4_CountDirection); +void TIM4_WorkMode0Config(uint16_t TIM4_SetCounter); +void TIM4_WorkMode3Config(uint16_t TIM4_SetCounter); +void TIM4_WorkModeConfig(TIM4_WorkMode_TypeDef TIM4_WorkMode, uint16_t TIM4_SetCounter); +void TIM4_SetEXEN4(FunctionalState NewState); + +#endif \ No newline at end of file diff --git a/CFG/SC92F8363B/Keil_Mould/FWLib/SC92F_Lib/inc/sc92f_uart0.h b/CFG/SC92F8363B/Keil_Mould/FWLib/SC92F_Lib/inc/sc92f_uart0.h new file mode 100644 index 0000000..a236e3e --- /dev/null +++ b/CFG/SC92F8363B/Keil_Mould/FWLib/SC92F_Lib/inc/sc92f_uart0.h @@ -0,0 +1,127 @@ +//************************************************************ +// Copyright (c) 深圳市赛元微电子有限公司 +// 文件名称 : sc92f_uart0.h +// 作者 : +// 模块功能 : UART0固件库函数头文件 +// 局部函数列表: +// 最后更正日期: 2022/01/24 +// 版本 : V1.10002 +// 说明 :本文件仅适用于赛元92F/93F/92L系列单片机 +//************************************************************* +#ifndef _sc92f_UART0_H_ +#define _sc92f_UART0_H_ + +#include "sc92f.h" +#if !defined (SC92F742x) && !defined (SC92F827X) && !defined (SC92F837X) + +#define UART0_BaudRate_FsysDIV12 0X00 //仅模式0可用,串行端口在系统时钟的1/12下运行 +#define UART0_BaudRate_FsysDIV4 0X01 //仅模式0可用,串行端口在系统时钟的1/4下运行 +#define UART0_BaudRate_FsysDIV64 0X00 //仅模式1可用,串行端口在系统时钟的1/64下运行 +#define UART0_BaudRate_FsysDIV32 0X01 //仅模式1可用,串行端口在系统时钟的1/32下运行 +#if defined (SC92F7003) || defined (SC92F8003) || defined (SC92F740x) +typedef enum +{ + UART0_PinSelection_P15P16 = (uint8_t)0x00, //UART0引脚为P15,P16 + UART0_PinSelection_P15 = (uint8_t)0x00, //UART0引脚为P15,P16,无RX + UART0_PinSelection_P11P20 = (uint8_t)0x10, //UART0引脚为P11,P20 + UART0_PinSelection_P20 = (uint8_t)0x10, //UART0引脚为P20,无RX +} UART0_PinSelection_TypeDef; +#endif + +#if defined(SC92F725X) || defined(SC92F735X)|| defined (SC92F730x ) || defined (SC92F732X) || defined (SC93F833x) || defined (SC93F843x) || defined (SC93F743x) +typedef enum +{ + UART0_CLOCK_TIMER1 = (uint8_t)0X02, //TIMER1做波特率发生器 + UART0_CLOCK_TIMER1_FreqMcl2 = (uint8_t)0X82, //TIMER1做波特率发生器,且二倍频 + UART0_CLOCK_TIMER1_DIV6 = (uint8_t)0X80, //TIMER1做波特率发生器,且6分频 + UART0_CLOCK_TIMER1_DIV12 = (uint8_t)0X00, //TIMER1做波特率发生器,且12分频 + UART0_CLOCK_TIMER2 = (uint8_t)0X34, //TIMER2做波特率发生器 + UART0_CLOCK_TIMER2_DIV12 = (uint8_t)0X30, //定时器2 12分频,模式1和3通用 +}UART0_Clock_Typedef; +#elif defined (SC92F848x) || defined (SC92F748x) || defined(SC92F859x) || defined(SC92F759x) || defined(SC92L853x) || defined(SC92L753x) +typedef enum +{ + UART0_CLOCK_TIMER1 = (uint8_t)0X00, //TIMER1做波特率发生器 + UART0_CLOCK_TIMER2 = (uint8_t)0X30, //TIMER2做波特率发生器 + UART0_CLOCK_TIMER1_DIV16 = (uint8_t)0X80, //TIMER1做波特率发生器 + UART0_CLOCK_TIMER2_DIV16 = (uint8_t)0XB0, //TIMER2做波特率发生器 +}UART0_Clock_Typedef; +#else +typedef enum +{ + //模式0和3的定时器选择 + UART0_CLOCK_TIMER1 = (uint8_t)0X00, //TIMER1做波特率发生器 + UART0_CLOCK_TIMER2 = (uint8_t)0X30, //TIMER2做波特率发生器 +}UART0_Clock_Typedef; +#endif + +#if defined (SC92F730x) || defined (SC92F725X) || defined (SC92F735X) || defined (SC92F732X) || defined (SC93F833x) || defined (SC93F843x) || defined (SC93F743x) +typedef enum +{ + UART0_Mode_8B = 0X00, //UART工作模式:8位半双工 + UART0_Mode_10B = 0X40, //UART工作模式:10位全双工 + UART0_Mode_11B = 0XC0, //UART工作模式:11位全双工 + UART0_Mode_11B_BaudRateFix = 80//UART工作模式:11位全双工,波特率固定 +}UART0_Mode_Typedef; +#else +typedef enum +{ + UART0_Mode_8B = 0X00, //UART工作模式:8位半双工 + UART0_Mode_10B = 0X40, //UART工作模式:10位全双工 + UART0_Mode_11B = 0XC0, //UART工作模式:11位全双工 +}UART0_Mode_Typedef; +#endif + +typedef enum +{ + UART0_RX_ENABLE = 0x10, //允许接收数据 + UART0_RX_DISABLE = 0x00 //不允许接收数据 +} UART0_RX_Typedef; + +typedef enum +{ + UART0_FLAG_RI = 0X01, //接收中断标志位RI + UART0_FLAG_TI = 0X02 //发送中断标志位TI +} UART0_Flag_Typedef; + +/*******************************宏函数*******************************/ +/***************************************************** +*函数名称:FlagStatus UART0_GetFlagStatus(UART0_Flag_Typedef UART0_Flag) +*函数功能:获得UART0中断标志状态 +*入口参数: +UART0_GetFlagStatus:UART0_Flag:中断标志位选择 +*出口参数: +FlagStatus:UART0中断标志位置起状态 +*****************************************************/ +#define UART0_GetFlagStatus(UART0_Flag) ((UART0_Flag == UART0_FLAG_TI) ? (TI):(RI)) + +/***************************************************** +*函数名称:void UART0_ClearFlag(UART0_Flag_Typedef UART0_Flag) +*函数功能:清除UART0中断标志状态 +*入口参数: +UART0_Flag_Typedef;UART0_Flag:中断标志位选择 +*出口参数:void +*****************************************************/ +#define UART0_ClearFlag(UART0_Flag) CLEAR_BIT(SCON,UART0_Flag) + +void UART0_DeInit(void); +void UART0_Init(uint32_t Uart0Fsys, + uint32_t BaudRate, UART0_Mode_Typedef Mode, + UART0_Clock_Typedef ClockMode, + UART0_RX_Typedef RxMode); +void UART0_SendData8(uint8_t Data); +uint8_t UART0_ReceiveData8(void); +void UART0_SendData9(uint16_t Data); +uint16_t UART0_ReceiveData9(void); +void UART0_ITConfig(FunctionalState NewState, + PriorityStatus Priority); +#if defined (SC92F8003) || defined (SC92F740x) || defined (SC92F7003) +void UART0_PinSelection(UART0_PinSelection_TypeDef + PinSeletion); +#endif + +#endif + +#endif + +/******************* (C) COPYRIGHT 2020 SinOne Microelectronics *****END OF FILE****/ diff --git a/CFG/SC92F8363B/Keil_Mould/FWLib/SC92F_Lib/inc/sc92f_usci0.h b/CFG/SC92F8363B/Keil_Mould/FWLib/SC92F_Lib/inc/sc92f_usci0.h new file mode 100644 index 0000000..32b97b4 --- /dev/null +++ b/CFG/SC92F8363B/Keil_Mould/FWLib/SC92F_Lib/inc/sc92f_usci0.h @@ -0,0 +1,171 @@ +//************************************************************ +// Copyright (c) 深圳市赛元微电子有限公司 +// 文件名称 : sc92F_usci0.h +// 作者 : +// 模块功能 : USCI0固件库函数头文件 +// 最后更正日期: 2022/01/05 +// 版本 : V1.1000 +// 说明 : 该文件仅适用于SC92F系列芯片 +//************************************************************* + +#ifndef _sc92f_USCI0_H_ +#define _sc92f_USCI0_H_ + +#include "sc92f.h" + +#define USCI0_UART_BaudRate_FsysDIV12 0X00 //仅模式0可用,串行端口在系统时钟的1/12下运行 +#define USCI0_UART_BaudRate_FsysDIV4 0X01 //仅模式0可用,串行端口在系统时钟的1/4下运行 + +#if defined(SC92L853x) || defined(SC92L753x) +typedef enum +{ + USCI0_Mode_SPI = (uint8_t)0x01, //SPI + USCI0_Mode_TWI = (uint8_t)0x02, //TWI + USCI0_Mode_UART = (uint8_t)0x03 //UART +} USCI0_CommunicationMode_TypeDef; +#endif + +typedef enum +{ + USCI0_SPI_FIRSTBIT_MSB = (uint8_t)0x00, //MSB优先发送 + USCI0_SPI_FIRSTBIT_LSB = (uint8_t)0x04 //LSB优先发送 +} USCI0_SPI_FirstBit_TypeDef; + +typedef enum +{ + USCI0_SPI_BAUDRATEPRESCALER_1 = (uint8_t)0x00, //SPI时钟速率为系统时钟除以1 + USCI0_SPI_BAUDRATEPRESCALER_2 = (uint8_t)0x01, //SPI时钟速率为系统时钟除以2 + USCI0_SPI_BAUDRATEPRESCALER_4 = (uint8_t)0x02, //SPI时钟速率为系统时钟除以4 + USCI0_SPI_BAUDRATEPRESCALER_8 = (uint8_t)0x03, //SPI时钟速率为系统时钟除以8 + USCI0_SPI_BAUDRATEPRESCALER_16 = (uint8_t)0x04, //SPI时钟速率为系统时钟除以16 + USCI0_SPI_BAUDRATEPRESCALER_32 = (uint8_t)0x05, //SPI时钟速率为系统时钟除以32 + USCI0_SPI_BAUDRATEPRESCALER_64 = (uint8_t)0x06, //SPI时钟速率为系统时钟除以64 + USCI0_SPI_BAUDRATEPRESCALER_128 = (uint8_t)0x07 //SPI时钟速率为系统时钟除以128 +} USCI0_SPI_BaudRatePrescaler_TypeDef; + +typedef enum +{ + USCI0_SPI_MODE_MASTER = (uint8_t)0x20, //SPI为主设备 + USCI0_SPI_MODE_SLAVE = (uint8_t)0x00 //SPI为从设备 +} USCI0_SPI_Mode_TypeDef; + +typedef enum +{ + USCI0_SPI_CLOCKPOLARITY_LOW = (uint8_t)0x00, //SCK在空闲状态下为低电平 + USCI0_SPI_CLOCKPOLARITY_HIGH = (uint8_t)0x10 //SCK在空闲状态下为高电平 +} USCI0_SPI_ClockPolarity_TypeDef; + +typedef enum +{ + USCI0_SPI_CLOCKPHASE_1EDGE = (uint8_t)0x00, //SCK的第一沿采集数据 + USCI0_SPI_CLOCKPHASE_2EDGE = (uint8_t)0x08 //SCK的第二沿采集数据 +} USCI0_SPI_ClockPhase_TypeDef; + +typedef enum +{ + USCI0_SPI_TXE_DISINT = (uint8_t)0x00, //TBIE为0时不允许发送中断 + USCI0_SPI_TXE_ENINT = (uint8_t)0x01 //TBIE为1时允许发送中断 +} USCI0_SPI_TXE_INT_TypeDef; + +typedef enum +{ + USCI0_SPI_DATA8 = (uint8_t)0x00, //SPI 8位传输模式 + USCI0_SPI_DATA16 = (uint8_t)0x02 //SPI 16位传输模式 +} USCI0_TransmissionMode_TypeDef; + +typedef enum +{ + USCI0_TWI_1024 = (uint8_t)0x00, //TWI通信速率 Fhrc/1024 + USCI0_TWI_512 = (uint8_t)0x01, //TWI通信速率 Fhrc/512 + USCI0_TWI_256 = (uint8_t)0x02, //TWI通信速率 Fhrc/256 + USCI0_TWI_128 = (uint8_t)0x03, //TWI通信速率 Fhrc/128 + USCI0_TWI_64 = (uint8_t)0x04, //TWI通信速率 Fhrc/64 + USCI0_TWI_32 = (uint8_t)0x05, //TWI通信速率 Fhrc/32 + USCI0_TWI_16 = (uint8_t)0x06, //TWI通信速率 Fhrc/16 +} USCI0_TWI_MasterCommunicationRate_TypeDef; + +typedef enum +{ + USCI0_TWI_SlaveBusy = 0x00, //作为从机 + USCI0_TWI_SlaveReceivedaAddress = 0x01, + USCI0_TWI_SlaveReceivedaData = 0x02, + USCI0_TWI_SlaveSendData = 0x03, + USCI0_TWI_SlaveReceivedaUACK = 0x04, + USCI0_TWI_SlaveDisableACK = 0x05, + USCI0_TWI_SlaveAddressError = 0x06, + USCI0_TWI_MasterBusy = 0x00, //作为主机 + USCI0_TWI_MasterSendAddress = 0x01, + USCI0_TWI_MasterSendData = 0x02, + USCI0_TWI_MasterReceivedaData = 0x03, + USCI0_TWI_MasterReceivedaUACK = 0x04, +} USCI0_TWIState_TypeDef; + +typedef enum +{ + USCI0_UART_Mode_8B = 0X00, //UART设置为8位模式 + USCI0_UART_Mode_10B = 0X40, //UART设置为10位模式 + USCI0_UART_Mode_11B = 0X80 //UART设置为11位模式 +} USCI0_UART_Mode_TypeDef; + +typedef enum +{ + USCI0_UART_RX_ENABLE = 0X10, //UART允许接收 + USCI0_UART_RX_DISABLE = 0X00 //UART禁止接收 +} USCI0_UART_RX_TypeDef; + +typedef enum +{ + USCI0_SPI_FLAG_SPIF = (uint8_t)0x80, //SPI数据传送标志位SPIF + USCI0_SPI_FLAG_WCOL = (uint8_t)0x50, //SPI写入冲突标志位WCOL + USCI0_SPI_FLAG_TXE = (uint8_t)0x08, //SPI发送缓存器空标志TXE + USCI0_TWI_FLAG_TWIF = (uint8_t)0x40, //TWI中断标志位TWIF + USCI0_TWI_FLAG_GCA = (uint8_t)0x10, //TWI通用地址响应标志位GCA + USCI0_TWI_FLAG_MSTR = (uint8_t)0x20, //TWI主从标志位MSTR + USCI0_TWI_FLAG_TXRXnE = (uint8_t)0x80, + USCI0_UART_FLAG_RI = (uint8_t)0x01, //UART接收中断标志位RI + USCI0_UART_FLAG_TI = (uint8_t)0x02, //UART发送中断标志位TI +} USCI0_Flag_TypeDef; + +typedef enum +{ + USCI0_TWI_Write = 0x00, //写操作 + USCI0_TWI_Read = 0x01, //读操作 +} USCI0_TWI_RWType; + +void USCI0_DeInit(void); +void USCI0_SPI_Init(USCI0_SPI_FirstBit_TypeDef FirstBit, + USCI0_SPI_BaudRatePrescaler_TypeDef BaudRatePrescaler, USCI0_SPI_Mode_TypeDef Mode, + USCI0_SPI_ClockPolarity_TypeDef ClockPolarity, USCI0_SPI_ClockPhase_TypeDef ClockPhase, + USCI0_SPI_TXE_INT_TypeDef SPI_TXE_INT, USCI0_TransmissionMode_TypeDef TransmissionMode); +void USCI0_TransmissionMode(USCI0_TransmissionMode_TypeDef TransmissionMode); +void USCI0_SPI_Cmd(FunctionalState NewState); +void USCI0_SPI_SendData_8(uint8_t Data); +uint8_t USCI0_SPI_ReceiveData_8(void); +void USCI0_SPI_SendData_16(uint16_t Data); +uint16_t USCI0_SPI_ReceiveData_16(void); +void USCI0_TWI_Slave_Init(uint8_t TWI_Address); +void USCI0_TWI_MasterCommunicationRate(USCI0_TWI_MasterCommunicationRate_TypeDef + TWI_MasterCommunicationRate); +void USCI0_TWI_Start(void); +void USCI0_TWI_MasterModeStop(void); +void USCI0_TWI_SendAddr(uint8_t Addr, USCI0_TWI_RWType RW); +void USCI0_TWI_SlaveClockExtension(FunctionalState NewState); +void USCI0_TWI_AcknowledgeConfig(FunctionalState NewState); +void USCI0_TWI_GeneralCallCmd(FunctionalState NewState); +FlagStatus USCI0_GetTWIStatus(USCI0_TWIState_TypeDef USCI0_TWIState); +void USCI0_TWI_Cmd(FunctionalState NewState); +void USCI0_TWI_SendData(uint8_t Data); +uint8_t USCI0_TWI_ReceiveData(void); +void USCI0_UART_Init(uint32_t UART1Fsys, uint32_t BaudRate, USCI0_UART_Mode_TypeDef Mode, + USCI0_UART_RX_TypeDef RxMode); +void USCI0_UART_SendData8(uint8_t Data); +uint8_t USCI0_UART_ReceiveData8(void); +void USCI0_UART_SendData9(uint16_t Data); +uint16_t USCI0_UART_ReceiveData9(void); +void USCI0_ITConfig(FunctionalState NewState, PriorityStatus Priority); +FlagStatus USCI0_GetFlagStatus(USCI0_Flag_TypeDef USCI0_FLAG); +void USCI0_ClearFlag(USCI0_Flag_TypeDef USCI0_FLAG); + +#endif + +/******************* (C) COPYRIGHT 2019 SinOne Microelectronics *****END OF FILE****/ \ No newline at end of file diff --git a/CFG/SC92F8363B/Keil_Mould/FWLib/SC92F_Lib/inc/sc92f_usci1.h b/CFG/SC92F8363B/Keil_Mould/FWLib/SC92F_Lib/inc/sc92f_usci1.h new file mode 100644 index 0000000..df5ff09 --- /dev/null +++ b/CFG/SC92F8363B/Keil_Mould/FWLib/SC92F_Lib/inc/sc92f_usci1.h @@ -0,0 +1,168 @@ +//************************************************************ +// Copyright (c) 深圳市赛元微电子有限公司 +// 文件名称 : sc92F_usci1.h +// 作者 : +// 模块功能 : USCI1固件库函数头文件 +// 最后更正日期: 2022/01/05 +// 版本 : V1.10000 +// 说明 :该文件仅适用于SC92F系列芯片 +//************************************************************* + +#ifndef _sc92f_USCI1_H_ +#define _sc92f_USCI1_H_ + +#include "sc92f.h" + +#define USCI1_UART_BaudRate_FsysDIV12 0X00 //仅模式0可用,串行端口在系统时钟的1/12下运行 +#define USCI1_UART_BaudRate_FsysDIV4 0X01 //仅模式0可用,串行端口在系统时钟的1/4下运行 + +typedef enum +{ + USCI1_Mode_SPI = (uint8_t)0x01, //SPI + USCI1_Mode_TWI = (uint8_t)0x02, //TWI + USCI1_Mode_UART = (uint8_t)0x03 //UART +} USCI1_CommunicationMode_TypeDef; + +typedef enum +{ + USCI1_SPI_FIRSTBIT_MSB = (uint8_t)0x00, //MSB优先发送 + USCI1_SPI_FIRSTBIT_LSB = (uint8_t)0x04 //LSB优先发送 +} USCI1_SPI_FirstBit_TypeDef; + +typedef enum +{ + USCI1_SPI_BAUDRATEPRESCALER_1 = (uint8_t)0x00, //SPI时钟速率为系统时钟除以1 + USCI1_SPI_BAUDRATEPRESCALER_2 = (uint8_t)0x01, //SPI时钟速率为系统时钟除以2 + USCI1_SPI_BAUDRATEPRESCALER_4 = (uint8_t)0x02, //SPI时钟速率为系统时钟除以4 + USCI1_SPI_BAUDRATEPRESCALER_8 = (uint8_t)0x03, //SPI时钟速率为系统时钟除以8 + USCI1_SPI_BAUDRATEPRESCALER_16 = (uint8_t)0x04, //SPI时钟速率为系统时钟除以16 + USCI1_SPI_BAUDRATEPRESCALER_32 = (uint8_t)0x05, //SPI时钟速率为系统时钟除以32 + USCI1_SPI_BAUDRATEPRESCALER_64 = (uint8_t)0x06, //SPI时钟速率为系统时钟除以64 + USCI1_SPI_BAUDRATEPRESCALER_128 = (uint8_t)0x07 //SPI时钟速率为系统时钟除以128 +} USCI1_SPI_BaudRatePrescaler_TypeDef; + +typedef enum +{ + USCI1_SPI_MODE_MASTER = (uint8_t)0x20, //SPI为主设备 + USCI1_SPI_MODE_SLAVE = (uint8_t)0x00 //SPI为从设备 +} USCI1_SPI_Mode_TypeDef; + +typedef enum +{ + USCI1_SPI_CLOCKPOLARITY_LOW = (uint8_t)0x00, //SCK在空闲状态下为低电平 + USCI1_SPI_CLOCKPOLARITY_HIGH = (uint8_t)0x10 //SCK在空闲状态下为高电平 +} USCI1_SPI_ClockPolarity_TypeDef; + +typedef enum +{ + USCI1_SPI_CLOCKPHASE_1EDGE = (uint8_t)0x00, //SCK的第一沿采集数据 + USCI1_SPI_CLOCKPHASE_2EDGE = (uint8_t)0x08 //SCK的第二沿采集数据 +} USCI1_SPI_ClockPhase_TypeDef; + +typedef enum +{ + USCI1_SPI_TXE_DISINT = (uint8_t)0x00, //TBIE为0时不允许发送中断 + USCI1_SPI_TXE_ENINT = (uint8_t)0x01 //TBIE为1时允许发送中断 +} USCI1_SPI_TXE_INT_TypeDef; + +typedef enum +{ + USCI1_SPI_DATA8 = (uint8_t)0x00, //SPI 8位传输模式 + USCI1_SPI_DATA16 = (uint8_t)0x02 //SPI 16位传输模式 +} USCI1_TransmissionMode_TypeDef; + +typedef enum +{ + USCI1_TWI_1024 = (uint8_t)0x00, //TWI通信速率 Fhrc/1024 + USCI1_TWI_512 = (uint8_t)0x01, //TWI通信速率 Fhrc/512 + USCI1_TWI_256 = (uint8_t)0x02, //TWI通信速率 Fhrc/256 + USCI1_TWI_128 = (uint8_t)0x03, //TWI通信速率 Fhrc/128 + USCI1_TWI_64 = (uint8_t)0x04, //TWI通信速率 Fhrc/64 + USCI1_TWI_32 = (uint8_t)0x05, //TWI通信速率 Fhrc/32 + USCI1_TWI_16 = (uint8_t)0x06, //TWI通信速率 Fhrc/16 +} USCI1_TWI_MasterCommunicationRate_TypeDef; + +typedef enum +{ + USCI1_TWI_SlaveBusy = 0x00, + USCI1_TWI_SlaveReceivedaAddress = 0x01, + USCI1_TWI_SlaveReceivedaData = 0x02, + USCI1_TWI_SlaveSendData = 0x03, + USCI1_TWI_SlaveReceivedaUACK = 0x04, + USCI1_TWI_SlaveDisableACK = 0x05, + USCI1_TWI_SlaveAddressError = 0x06, + USCI1_TWI_MasterBusy = 0x00, + USCI1_TWI_MasterSendAddress = 0x01, + USCI1_TWI_MasterSendData = 0x02, + USCI1_TWI_MasterReceivedaData = 0x03, + USCI1_TWI_MasterReceivedaUACK = 0x04, +} USCI1_TWIState_TypeDef; + +typedef enum +{ + USCI1_UART_Mode_8B = 0X00, //UART设置为8位模式 + USCI1_UART_Mode_10B = 0X40, //UART设置为10位模式 + USCI1_UART_Mode_11B = 0X80 //UART设置为11位模式 +} USCI1_UART_Mode_TypeDef; + +typedef enum +{ + USCI1_UART_RX_ENABLE = 0X10, //UART允许接收 + USCI1_UART_RX_DISABLE = 0X00 //UART禁止接收 +} USCI1_UART_RX_TypeDef; + +typedef enum +{ + USCI1_SPI_FLAG_SPIF = (uint8_t)0x80, //SPI数据传送标志位SPIF + USCI1_SPI_FLAG_WCOL = (uint8_t)0x50, //SPI写入冲突标志位WCOL + USCI1_SPI_FLAG_TXE = (uint8_t)0x08, //SPI发送缓存器空标志TXE + USCI1_TWI_FLAG_TWIF = (uint8_t)0x40, //TWI中断标志位TWIF + USCI1_TWI_FLAG_GCA = (uint8_t)0x10, //TWI通用地址响应标志位GCA + USCI1_TWI_FLAG_MSTR = (uint8_t)0x20, //TWI主从标志位MSTR + USCI1_TWI_FLAG_TXRXnE = (uint8_t)0x80, + USCI1_UART_FLAG_RI = (uint8_t)0x01, //UART接收中断标志位RI + USCI1_UART_FLAG_TI = (uint8_t)0x02, //UART发送中断标志位TI +} USCI1_Flag_TypeDef; + +typedef enum +{ + USCI1_TWI_Write = 0x00, //写操作 + USCI1_TWI_Read = 0x01, //读操作 +} USCI1_TWI_RWType; + +void USCI1_DeInit(void); +void USCI1_SPI_Init(USCI1_SPI_FirstBit_TypeDef FirstBit, + USCI1_SPI_BaudRatePrescaler_TypeDef BaudRatePrescaler, USCI1_SPI_Mode_TypeDef Mode, + USCI1_SPI_ClockPolarity_TypeDef ClockPolarity, USCI1_SPI_ClockPhase_TypeDef ClockPhase, + USCI1_SPI_TXE_INT_TypeDef SPI_TXE_INT, USCI1_TransmissionMode_TypeDef TransmissionMode); +void USCI1_TransmissionMode(USCI1_TransmissionMode_TypeDef TransmissionMode); +void USCI1_SPI_Cmd(FunctionalState NewState); +void USCI1_SPI_SendData_8(uint8_t Data); +uint8_t USCI1_SPI_ReceiveData_8(void); +void USCI1_SPI_SendData_16(uint16_t Data); +uint16_t USCI1_SPI_ReceiveData_16(void); +void USCI1_TWI_Slave_Init(uint8_t TWI_Address); +void USCI1_TWI_MasterCommunicationRate(USCI1_TWI_MasterCommunicationRate_TypeDef + TWI_MasterCommunicationRate); +void USCI1_TWI_Start(void); +void USCI1_TWI_MasterModeStop(void); +void USCI1_TWI_SlaveClockExtension(FunctionalState NewState); +void USCI1_TWI_AcknowledgeConfig(FunctionalState NewState); +void USCI1_TWI_GeneralCallCmd(FunctionalState NewState); +FlagStatus USCI1_GetTWIStatus(USCI1_TWIState_TypeDef USCI1_TWIState); +void USCI1_TWI_Cmd(FunctionalState NewState); +void USCI1_TWI_SendData(uint8_t Data); +uint8_t USCI1_TWI_ReceiveData(void); +void USCI1_UART_Init(uint32_t UART1Fsys, uint32_t BaudRate, USCI1_UART_Mode_TypeDef Mode, + USCI1_UART_RX_TypeDef RxMode); +void USCI1_UART_SendData8(uint8_t Data); +uint8_t USCI1_UART_ReceiveData8(void); +void USCI1_UART_SendData9(uint16_t Data); +uint16_t USCI1_UART_ReceiveData9(void); +void USCI1_ITConfig(FunctionalState NewState, PriorityStatus Priority); +FlagStatus USCI1_GetFlagStatus(USCI1_Flag_TypeDef USCI1_FLAG); +void USCI1_ClearFlag(USCI1_Flag_TypeDef USCI1_FLAG); +void USCI1_TWI_SendAddr(uint8_t Addr, USCI1_TWI_RWType RW); +#endif + +/******************* (C) COPYRIGHT 2019 SinOne Microelectronics *****END OF FILE****/ \ No newline at end of file diff --git a/CFG/SC92F8363B/Keil_Mould/FWLib/SC92F_Lib/inc/sc92f_usci2.h b/CFG/SC92F8363B/Keil_Mould/FWLib/SC92F_Lib/inc/sc92f_usci2.h new file mode 100644 index 0000000..9b82bf0 --- /dev/null +++ b/CFG/SC92F8363B/Keil_Mould/FWLib/SC92F_Lib/inc/sc92f_usci2.h @@ -0,0 +1,168 @@ +//************************************************************ +// Copyright (c) 深圳市赛元微电子有限公司 +// 文件名称 : sc92F_usci2.h +// 作者 : +// 模块功能 : USCI2固件库函数头文件 +// 最后更正日期: 2022/01/05 +// 版本 : V1.10000 +// 说明 :该文件仅适用于SC92F系列芯片 +//************************************************************* + +#ifndef _sc92f_USCI2_H_ +#define _sc92f_USCI2_H_ + +#include "sc92f.h" + +#define USCI2_UART_BaudRate_FsysDIV12 0X00 //仅模式0可用,串行端口在系统时钟的1/12下运行 +#define USCI2_UART_BaudRate_FsysDIV4 0X01 //仅模式0可用,串行端口在系统时钟的1/4下运行 + +typedef enum +{ + USCI2_Mode_SPI = (uint8_t)0x01, //SPI + USCI2_Mode_TWI = (uint8_t)0x02, //TWI + USCI2_Mode_UART = (uint8_t)0x03 //UART +} USCI2_CommunicationMode_TypeDef; + +typedef enum +{ + USCI2_SPI_FIRSTBIT_MSB = (uint8_t)0x00, //MSB优先发送 + USCI2_SPI_FIRSTBIT_LSB = (uint8_t)0x04 //LSB优先发送 +} USCI2_SPI_FirstBit_TypeDef; + +typedef enum +{ + USCI2_SPI_BAUDRATEPRESCALER_1 = (uint8_t)0x00, //SPI时钟速率为系统时钟除以1 + USCI2_SPI_BAUDRATEPRESCALER_2 = (uint8_t)0x01, //SPI时钟速率为系统时钟除以2 + USCI2_SPI_BAUDRATEPRESCALER_4 = (uint8_t)0x02, //SPI时钟速率为系统时钟除以4 + USCI2_SPI_BAUDRATEPRESCALER_8 = (uint8_t)0x03, //SPI时钟速率为系统时钟除以8 + USCI2_SPI_BAUDRATEPRESCALER_16 = (uint8_t)0x04, //SPI时钟速率为系统时钟除以16 + USCI2_SPI_BAUDRATEPRESCALER_32 = (uint8_t)0x05, //SPI时钟速率为系统时钟除以32 + USCI2_SPI_BAUDRATEPRESCALER_64 = (uint8_t)0x06, //SPI时钟速率为系统时钟除以64 + USCI2_SPI_BAUDRATEPRESCALER_128 = (uint8_t)0x07 //SPI时钟速率为系统时钟除以128 +} USCI2_SPI_BaudRatePrescaler_TypeDef; + +typedef enum +{ + USCI2_SPI_MODE_MASTER = (uint8_t)0x20, //SPI为主设备 + USCI2_SPI_MODE_SLAVE = (uint8_t)0x00 //SPI为从设备 +} USCI2_SPI_Mode_TypeDef; + +typedef enum +{ + USCI2_SPI_CLOCKPOLARITY_LOW = (uint8_t)0x00, //SCK在空闲状态下为低电平 + USCI2_SPI_CLOCKPOLARITY_HIGH = (uint8_t)0x10 //SCK在空闲状态下为高电平 +} USCI2_SPI_ClockPolarity_TypeDef; + +typedef enum +{ + USCI2_SPI_CLOCKPHASE_1EDGE = (uint8_t)0x00, //SCK的第一沿采集数据 + USCI2_SPI_CLOCKPHASE_2EDGE = (uint8_t)0x08 //SCK的第二沿采集数据 +} USCI2_SPI_ClockPhase_TypeDef; + +typedef enum +{ + USCI2_SPI_TXE_DISINT = (uint8_t)0x00, //TBIE为0时不允许发送中断 + USCI2_SPI_TXE_ENINT = (uint8_t)0x01 //TBIE为1时允许发送中断 +} USCI2_SPI_TXE_INT_TypeDef; + +typedef enum +{ + USCI2_SPI_DATA8 = (uint8_t)0x00, //SPI 8位传输模式 + USCI2_SPI_DATA16 = (uint8_t)0x01 //SPI 16位传输模式 +} USCI2_TransmissionMode_TypeDef; + +typedef enum +{ + USCI2_TWI_1024 = (uint8_t)0x00, //TWI通信速率 Fhrc/1024 + USCI2_TWI_512 = (uint8_t)0x01, //TWI通信速率 Fhrc/512 + USCI2_TWI_256 = (uint8_t)0x02, //TWI通信速率 Fhrc/256 + USCI2_TWI_128 = (uint8_t)0x03, //TWI通信速率 Fhrc/128 + USCI2_TWI_64 = (uint8_t)0x04, //TWI通信速率 Fhrc/64 + USCI2_TWI_32 = (uint8_t)0x05, //TWI通信速率 Fhrc/32 + USCI2_TWI_16 = (uint8_t)0x06, //TWI通信速率 Fhrc/16 +} USCI2_TWI_MasterCommunicationRate_TypeDef; + +typedef enum +{ + USCI2_TWI_SlaveBusy = 0x00, + USCI2_TWI_SlaveReceivedaAddress = 0x01, + USCI2_TWI_SlaveReceivedaData = 0x02, + USCI2_TWI_SlaveSendData = 0x03, + USCI2_TWI_SlaveReceivedaUACK = 0x04, + USCI2_TWI_SlaveDisableACK = 0x05, + USCI2_TWI_SlaveAddressError = 0x06, + USCI2_TWI_MasterBusy = 0x00, + USCI2_TWI_MasterSendAddress = 0x01, + USCI2_TWI_MasterSendData = 0x02, + USCI2_TWI_MasterReceivedaData = 0x03, + USCI2_TWI_MasterReceivedaUACK = 0x04, +} USCI2_TWIState_TypeDef; + +typedef enum +{ + USCI2_UART_Mode_8B = 0X00, //UART设置为8位模式 + USCI2_UART_Mode_10B = 0X40, //UART设置为10位模式 + USCI2_UART_Mode_11B = 0X80 //UART设置为11位模式 +} USCI2_UART_Mode_TypeDef; + +typedef enum +{ + USCI2_UART_RX_ENABLE = 0X10, //UART允许接收 + USCI2_UART_RX_DISABLE = 0X00 //UART禁止接收 +} USCI2_UART_RX_TypeDef; + +typedef enum +{ + USCI2_SPI_FLAG_SPIF = (uint8_t)0x80, //SPI数据传送标志位SPIF + USCI2_SPI_FLAG_WCOL = (uint8_t)0x50, //SPI写入冲突标志位WCOL + USCI2_SPI_FLAG_TXE = (uint8_t)0x08, //SPI发送缓存器空标志TXE + USCI2_TWI_FLAG_TWIF = (uint8_t)0x40, //TWI中断标志位TWIF + USCI2_TWI_FLAG_GCA = (uint8_t)0x10, //TWI通用地址响应标志位GCA + USCI2_TWI_FLAG_MSTR = (uint8_t)0x20, //TWI主从标志位MSTR + USCI2_TWI_FLAG_TXRXnE = (uint8_t)0x80, + USCI2_UART_FLAG_RI = (uint8_t)0x01, //UART接收中断标志位RI + USCI2_UART_FLAG_TI = (uint8_t)0x02, //UART发送中断标志位TI +} USCI2_Flag_TypeDef; + +typedef enum +{ + USCI2_TWI_Write = 0x00, //写操作 + USCI2_TWI_Read = 0x01, //读操作 +} USCI2_TWI_RWType; + +void USCI2_DeInit(void); +void USCI2_SPI_Init(USCI2_SPI_FirstBit_TypeDef FirstBit, + USCI2_SPI_BaudRatePrescaler_TypeDef BaudRatePrescaler, USCI2_SPI_Mode_TypeDef Mode, + USCI2_SPI_ClockPolarity_TypeDef ClockPolarity, USCI2_SPI_ClockPhase_TypeDef ClockPhase, + USCI2_SPI_TXE_INT_TypeDef SPI_TXE_INT, USCI2_TransmissionMode_TypeDef TransmissionMode); +void USCI2_TransmissionMode(USCI2_TransmissionMode_TypeDef TransmissionMode); +void USCI2_SPI_Cmd(FunctionalState NewState); +void USCI2_SPI_SendData_8(uint8_t Data); +uint8_t USCI2_SPI_ReceiveData_8(void); +void USCI2_SPI_SendData_16(uint16_t Data); +uint16_t USCI2_SPI_ReceiveData_16(void); +void USCI2_TWI_Slave_Init(uint8_t TWI_Address); +void USCI2_TWI_MasterCommunicationRate(USCI2_TWI_MasterCommunicationRate_TypeDef + TWI_MasterCommunicationRate); +void USCI2_TWI_Start(void); +void USCI2_TWI_MasterModeStop(void); +void USCI2_TWI_SlaveClockExtension(FunctionalState NewState); +void USCI2_TWI_AcknowledgeConfig(FunctionalState NewState); +void USCI2_TWI_GeneralCallCmd(FunctionalState NewState); +FlagStatus USCI2_GetTWIStatus(USCI2_TWIState_TypeDef USCI2_TWIState); +void USCI2_TWI_Cmd(FunctionalState NewState); +void USCI2_TWI_SendData(uint8_t Data); +uint8_t USCI2_TWI_ReceiveData(void); +void USCI2_UART_Init(uint32_t UART1Fsys, uint32_t BaudRate, USCI2_UART_Mode_TypeDef Mode, + USCI2_UART_RX_TypeDef RxMode); +void USCI2_UART_SendData8(uint8_t Data); +uint8_t USCI2_UART_ReceiveData8(void); +void USCI2_UART_SendData9(uint16_t Data); +uint16_t USCI2_UART_ReceiveData9(void); +void USCI2_ITConfig(FunctionalState NewState, PriorityStatus Priority); +FlagStatus USCI2_GetFlagStatus(USCI2_Flag_TypeDef USCI2_FLAG); +void USCI2_ClearFlag(USCI2_Flag_TypeDef USCI2_FLAG); +void USCI2_TWI_SendAddr(uint8_t Addr, USCI2_TWI_RWType RW); +#endif + +/******************* (C) COPYRIGHT 2019 SinOne Microelectronics *****END OF FILE****/ \ No newline at end of file diff --git a/CFG/SC92F8363B/Keil_Mould/FWLib/SC92F_Lib/inc/sc92f_wdt.h b/CFG/SC92F8363B/Keil_Mould/FWLib/SC92F_Lib/inc/sc92f_wdt.h new file mode 100644 index 0000000..e0bdf38 --- /dev/null +++ b/CFG/SC92F8363B/Keil_Mould/FWLib/SC92F_Lib/inc/sc92f_wdt.h @@ -0,0 +1,43 @@ +//************************************************************ +// Copyright (c) 深圳市赛元微电子有限公司 +// 文件名称: sc92f_wdt.h +// 作者: +// 模块功能: WDT固件库函数头文件 +// 最后更正日期: 2022年3月23日 +// 版本: V1.10002 +// 说明: +//************************************************************* + +#ifndef _sc92f_WDT_H_ +#define _sc92f_WDT_H_ + +#include "sc92f.h" + +typedef enum +{ + WDT_OverflowTime_500MS = (uint8_t)0x00, //看门狗溢出时间为500MS + WDT_OverflowTime_250MS = (uint8_t)0x01, //看门狗溢出时间为250MS + WDT_OverflowTime_125MS = (uint8_t)0x02, //看门狗溢出时间为125MS + WDT_OverflowTime_62_5MS = (uint8_t)0x03, //看门狗溢出时间为62.5MS + WDT_OverflowTime_31_5MS = (uint8_t)0x04, //看门狗溢出时间为31.5MS + WDT_OverflowTime_15_75MS = (uint8_t)0x05, //看门狗溢出时间为15.75MS + WDT_OverflowTime_7_88MS = (uint8_t)0x06, //看门狗溢出时间为7.88MS + WDT_OverflowTime_3_94MS = (uint8_t)0x07 //看门狗溢出时间为3.94MS +} WDT_OverflowTime_TypeDef; + +/************************宏函数************************/ +/***************************************************** +*函数名称:void WDT_SetReload(void) +*函数功能:WDT喂狗 +*入口参数:void +*出口参数:void +*****************************************************/ +#define WDT_SetReload() SET_BIT(WDTCON,0x10) + +void WDT_DeInit(void); +void WDT_Init(WDT_OverflowTime_TypeDef + OverflowTime); +void WDT_Cmd(FunctionalState NewState); +#endif + +/******************* (C) COPYRIGHT 2020 SinOne Microelectronics *****END OF FILE****/ \ No newline at end of file diff --git a/CFG/SC92F8363B/Keil_Mould/FWLib/SC92F_Lib/src/sc92f_acmp.c b/CFG/SC92F8363B/Keil_Mould/FWLib/SC92F_Lib/src/sc92f_acmp.c new file mode 100644 index 0000000..039b3b4 --- /dev/null +++ b/CFG/SC92F8363B/Keil_Mould/FWLib/SC92F_Lib/src/sc92f_acmp.c @@ -0,0 +1,129 @@ +//************************************************************ +// Copyright (c) 深圳市赛元微电子有限公司 +// 文件名称 : sc92f_acmp.c +// 作者 : +// 模块功能 : ACMP固件库函数C文件 +// 局部函数列表: +// 最后更正日期: 2020/8/18 +// 版本 : V1.00000 +// 说明 : +//************************************************************* + +#include "sc92f_acmp.h" + +#if defined (SC92F854x) || defined (SC92F754x) ||defined (SC92F844xB) || defined (SC92F744xB) || defined (SC92F84Ax_2) || defined (SC92F74Ax_2)\ + || defined (SC92FWxx) || defined(SC92F859x) || defined(SC92F759x) +/************************************************** +*函数名称:void ACMP_DeInit(void) +*函数功能:MDU相关寄存器复位至缺省值 +*入口参数:void +*出口参数:void +**************************************************/ +void ACMP_DeInit(void) +{ + CMPCON = 0X00; + CMPCFG = 0X00; +} + +/************************************************** +*函数名称:void ACMP_Init(ACMP_Vref_Typedef ACMP_Vref, ACMP_Channel_TypeDef ACMP_Channel) +*函数功能:模拟比较器初始化配置函数 +*入口参数: +ACMP_Vref_Typedef:ACMP_Vref:ACMP参考电压选择 +ACMP_Channel_TypeDef:ACMP_Channel:ACMP输入通道选择 +*出口参数:void +**************************************************/ +void ACMP_Init(ACMP_Vref_Typedef ACMP_Vref, + ACMP_Channel_TypeDef ACMP_Channel) +{ + CMPCON = CMPCON & 0XF0 | ACMP_Vref; + CMPCFG = CMPCFG & 0XEC | ACMP_Channel; +} + +/************************************************** +*函数名称:void ACMP_SetTriggerMode(ACMP_TriggerMode_Typedef ACMP_TriggerMode) +*函数功能:ACMP中断触发方式配置函数 +*入口参数: +ACMP_TriggerMode_Typedef:ACMP_TriggerMode:中断触发方式选择 +*出口参数:void +**************************************************/ +void ACMP_SetTriggerMode(ACMP_TriggerMode_Typedef + ACMP_TriggerMode) +{ + CMPCFG = CMPCFG & 0XF3 | ACMP_TriggerMode; +} + +/***************************************************** +*函数名称:void ACMP_Cmd(FunctionalState NewState) +*函数功能:ACMP功能开关函数 +*入口参数: +FunctionalState:NewState:功能启动/关闭选择 +*出口参数:void +*****************************************************/ +void ACMP_Cmd(FunctionalState NewState) +{ + if(NewState == DISABLE) + { + CMPCON &= 0X7F; + } + else + { + CMPCON |= 0x80; + } +} + +/***************************************************** +*函数名称:void ACMP_ITConfig(FunctionalState NewState, PriorityStatus Priority) +*函数功能:ACMP中断初始化 +*入口参数:FunctionalState:NewState:中断使能/关闭选择 + PriorityStatus:Priority:中断优先级选择 +*出口参数:void +*****************************************************/ +void ACMP_ITConfig(FunctionalState NewState, + PriorityStatus Priority) +{ + if(NewState == DISABLE) + { + IE1 &= 0XBF; + } + else + { + IE1 |= 0X20; + } + + /************************************************************/ + if(Priority == LOW) + { + IP1 &= 0XBF; + } + else + { + IP1 |= 0X20; + } +} + +/***************************************************** +*函数名称:FlagStatus ACMP_GetFlagStatus(ACMP_Flag_TypeDef ACMP_Flag) +*函数功能:获得ACMP标志状态 +*入口参数:ACMP_Flag 标志位选择 +*出口参数: +ACMP_Flag_TypeDef:FlagStatus:ACMP标志状态 +*****************************************************/ +FlagStatus ACMP_GetFlagStatus(ACMP_Flag_TypeDef + ACMP_Flag) +{ + return (bool)(CMPCON & ACMP_Flag); +} + +/***************************************************** +*函数名称:void ACMP_ClearFlag(void) +*函数功能:清除标志状态 +*入口参数:void +*出口参数:void +*****************************************************/ +void ACMP_ClearFlag(void) +{ + CMPCON &= (~ACMP_FLAG_CMPIF); +} +#endif +/******************* (C) COPYRIGHT 2020 SinOne Microelectronics *****END OF FILE****/ \ No newline at end of file diff --git a/CFG/SC92F8363B/Keil_Mould/FWLib/SC92F_Lib/src/sc92f_adc.c b/CFG/SC92F8363B/Keil_Mould/FWLib/SC92F_Lib/src/sc92f_adc.c new file mode 100644 index 0000000..3669941 --- /dev/null +++ b/CFG/SC92F8363B/Keil_Mould/FWLib/SC92F_Lib/src/sc92f_adc.c @@ -0,0 +1,462 @@ +//************************************************************ +// Copyright (c) 深圳市赛元微电子有限公司 +// 文件名称: sc92f_adc.c +// 作者: 赛元应用团队 +// 模块功能: ADC固件库函数C文件 +// 最后更正日期: 2022年3月23日 +// 版本: V1.10005 +// 说明: +//************************************************************* + +/* 头文件引用 */ +#include "sc92f_adc.h" + +#if !defined(SC92F827X) && !defined(SC92F837X) +/************************************************** +*函数名称:void ADC_DeInit(void) +*函数功能:ADC相关寄存器复位至缺省值 +*入口参数:void +*出口参数:void +**************************************************/ +void ADC_DeInit(void) +{ + ADCCON = 0x00; + ADCCFG0 = 0X00; + ADCCFG1 = 0X00; +#if defined(SC92F854x) || defined(SC92F754x) || defined(SC92F844xB) || defined(SC92F744xB) || defined(SC92F84Ax_2) || defined(SC92F74Ax_2)\ + || defined(SC92F846xB) || defined(SC92F746xB) || defined(SC92F836xB) || defined(SC92F736xB) || defined(SC92F84Ax) || defined(SC92F74Ax)\ + || defined(SC92F83Ax) || defined(SC92F73Ax) || defined(SC92F848x) || defined(SC92F748x) || defined (SC92F859x) || defined (SC92F759x)\ + || defined (SC92L853x) || defined (SC92L753x) + ADCCFG2 = 0X00; +#endif + ADCVL = 0X00; + ADCVH = 0X00; + EADC = 0; + IPADC = 0; +} + +/************************************************** +*函数名称:void ADC_Init(ADC_PresSel_TypeDef ADC_PrescalerSelection, ADC_Cycle_TypeDef ADC_Cycle) +*函数功能:ADC初始化配置函数 +*入口参数: +ADC_PresSel_TypeDef:ADC_PrescalerSelection:预分频选择 +ADC_Cycle_TypeDef:ADC_Cycle:采样时钟周期选择 +*出口参数:void +**************************************************/ +#if defined(SC92F854x) || defined(SC92F754x) || defined(SC92F844xB) || defined(SC92F744xB) || defined(SC92F84Ax_2) || defined(SC92F74Ax_2)\ + || defined(SC92F846xB) || defined(SC92F746xB) || defined(SC92F836xB) || defined(SC92F736xB) || defined(SC92F84Ax) || defined(SC92F74Ax)\ + || defined(SC92F83Ax) || defined(SC92F73Ax) || defined(SC92FWxx) || defined(SC92F848x) || defined(SC92F748x)\ + || defined (SC92F859x) || defined (SC92F759x) +void ADC_Init(ADC_PresSel_TypeDef ADC_PrescalerSelection, + ADC_Cycle_TypeDef ADC_Cycle) +{ + /* 配置ADC时钟分频和采样周期 */ + ADCCFG2 = ADC_PrescalerSelection | ADC_Cycle; +} +#elif defined(SC92F7003) || defined(SC92F8003) || defined(SC92F740x) +void ADC_Init(ADC_PresSel_TypeDef ADC_PrescalerSelection, + ADC_Cycle_TypeDef ADC_Cycle) +{ + /* 配置ADC时钟分频和采样周期 */ + ADCCFG1 = ADC_PrescalerSelection | ADC_Cycle; +} +#elif defined(SC92F742x) || defined(SC92F725X) || defined(SC92F735X) || defined(SC92F730x) || defined(SC92F732X) || defined(SC92F7490)\ + || defined(SC93F833x) || defined(SC93F843x) || defined(SC93F743x) +void ADC_Init(ADC_PresSel_TypeDef ADC_PrescalerSelection, + ADC_Cycle_TypeDef ADC_Cycle) +{ + ADC_Cycle = 0; //SC92F742x无此功能 + /* 配置ADC时钟分频 */ + ADCCON = (ADCCON & 0xDF) | ADC_PrescalerSelection; +} +#elif defined (SC92L853x) || defined (SC92L753x) +void ADC_Init(ADC_PresSel_TypeDef ADC_PrescalerSelection, ADC_Cycle_TypeDef ADC_Cycle) +{ + ADC_Cycle = 0x00; //该入参在92L系列无效 + /* 配置ADC时钟分频 */ + ADCCFG2 = ADC_PrescalerSelection; +} +#endif + +/************************************************** +*函数名称:void ADC_ChannelConfig(ADC_Channel_TypeDef ADC_Channel, FunctionalState NewState) +*函数功能:ADC输入口配置函数,并且使能相关功能 +*入口参数: +ADC_Channel_TypeDef:ADC_Channel:ADC输入口选择 +FunctionalState:NewState:ADCx使能/关闭选择 +*出口参数:void +**************************************************/ +#if defined(SC92F854x) || defined(SC92F754x) || defined(SC92F844xB) || defined(SC92F744xB) || defined(SC92F84Ax_2) || defined(SC92F74Ax_2)\ + || defined(SC92F846xB) || defined(SC92F746xB) || defined(SC92F836xB) || defined(SC92F736xB) || defined(SC92F84Ax) || defined(SC92F74Ax)\ + || defined(SC92F83Ax) || defined(SC92F73Ax) || defined(SC92FWxx) || defined(SC92F848x) || defined(SC92F748x)\ + || defined(SC92F859x) || defined(SC92F759x) || defined (SC92L853x) || defined (SC92L753x) +void ADC_ChannelConfig(ADC_Channel_TypeDef ADC_Channel, FunctionalState NewState) +{ + uint16_t TempReg; + /* 配置ADC转换通道 */ + ADCCON = (ADCCON & 0XE0) | ADC_Channel; + + /* 配置ADC外部采样通道 */ + if (ADC_Channel < ADC_CHANNEL_VDD_D4) //内部采样通道无需配置 + { + TempReg = (0x0001 << ADC_Channel); + if (NewState == DISABLE)// 使能ADC采样通道 + { + ADCCFG0 &= (~(uint8_t)TempReg); + ADCCFG1 &= (~(uint8_t)(TempReg >> 8)); + } + else // 失能ADC采样通道 + { + ADCCFG0 |= ((uint8_t)TempReg); + ADCCFG1 |= ((uint8_t)(TempReg >> 8)); + } + } +} +#elif defined(SC92F7003) || defined(SC92F8003) || defined(SC92F740x) || defined(SC92F7490) +void ADC_ChannelConfig(ADC_Channel_TypeDef ADC_Channel, FunctionalState NewState) +{ + uint8_t TempReg; + /* 配置ADC转换通道 */ + ADCCON = (ADCCON & 0xE0) | ADC_Channel; + + /* 配置ADC采样通道 */ + if (ADC_Channel < ADC_CHANNEL_VDD_D4) //内部采样通道无需配置 + { + TempReg = (0x01 << ADC_Channel); + if (ADC_Channel < ADC_CHANNEL_VDD_D4) + { + if (NewState == DISABLE) //失能ADC采样通道 + { + ADCCFG0 &= (~TempReg); + } + else //使能ADC采样通道 + { + ADCCFG0 |= TempReg; + } + } + } +} +#elif defined(SC92F742x) || defined(SC92F730x) || defined(SC92F725X) || defined(SC92F735X) || defined(SC92F732X) +void ADC_ChannelConfig(ADC_Channel_TypeDef ADC_Channel, FunctionalState NewState) +{ + uint16_t TempReg; + /* 配置ADC转换通道 */ + ADCCON = (ADCCON & 0xF0) | ADC_Channel; + + /* 配置ADC采样通道 */ + if (ADC_Channel < ADC_CHANNEL_VDD_D4) //内部采样通道无需配置 + { + TempReg = (0x0001 << ADC_Channel); + if (NewState == DISABLE) + { + ADCCFG0 &= (~(uint8_t)TempReg); + ADCCFG1 &= (~(uint8_t)(TempReg >> 8)); + } + else + { + ADCCFG0 |= ((uint8_t)TempReg); + ADCCFG1 |= ((uint8_t)(TempReg >> 8)); + } + } +} +#elif defined(SC93F833x) || defined(SC93F843x) || defined(SC93F743x) +void ADC_ChannelConfig(ADC_Channel_TypeDef ADC_Channel, FunctionalState NewState) +{ + uint16_t TempReg; + /* 配置ADC转换通道 */ + ADCCON = (ADCCON & 0xF0) | ADC_Channel; + + /* 配置ADC采样通道 */ + if (ADC_Channel < ADC_CHANNEL_Temp) //配置外部采样通道 + { + TempReg = (0x0001 << ADC_Channel); + if (NewState == DISABLE) + { + ADCCFG0 &= (~(uint8_t)TempReg); + ADCCFG1 &= (~(uint8_t)(TempReg >> 8)); + } + else + { + ADCCFG0 |= ((uint8_t)TempReg); + ADCCFG1 |= ((uint8_t)(TempReg >> 8)); + } + } + else if (ADC_Channel == ADC_CHANNEL_Temp) //内部温度采样通道 + { + if (NewState == DISABLE) + { + TSCFG &= 0X7F; + } + else + { + /* ADC参考电压选择内部2.4V作为参考 */ + OPINX = 0xC2; + OPREG = OPREG & 0X7F | 0x80; + + TSCFG |= 0x80; + } + } + else if (ADC_Channel == ADC_CHANNEL_9_PGA) //可变增益放大器采样通道 + { + unsigned char code *IFBAddr = 0x3D; + if (NewState == DISABLE) + { + ADCCFG1 &= (~(uint8_t)0x02); //关闭通道9 + PGACON &= 0x7F; //使能PGA + } + /* 读取PGA内部出厂校准值 */ + else + { + ADCCFG1 |= ((uint8_t)0x02); //PGA输入通道与通道9复用,使能通道9 + + IAPADE = 0x01; //指针指向 IFB 区 + PGACFG = *(IFBAddr); //读取校准值 + IAPADE = 0x00; //指针指向 ROM 区 + + PGACON |= 0x80; //使能PGA + } + } +} +#endif + +/************************************************** +*函数名称:void ADC_EAINConfig(uint16_t ADC_Channel, FunctionalState NewState) +*函数功能:将对应的ADC输入口设置为模拟输入模式 +*入口参数: +ADC_EAIN_TypeDef:ADC_EAIN_Select:选择需要设置的ADC口 +FunctionalState:NewState:ADC通道使能/关闭选择 +*出口参数:void +**************************************************/ +void ADC_EAINConfig(uint16_t ADC_EAIN_Select, + FunctionalState NewState) +{ + if (NewState == DISABLE) + { + ADCCFG0 &= (~(uint8_t)ADC_EAIN_Select); +#if defined (SC92F854x) || defined (SC92F754x) || defined (SC92F844xB) || defined (SC92F744xB) || defined (SC92F84Ax_2) || defined (SC92F74Ax_2)\ + || defined (SC92F846xB) || defined (SC92F746xB) || defined (SC92F836xB) || defined (SC92F736xB)||defined (SC92F84Ax) || defined (SC92F74Ax)\ + || defined(SC92F83Ax) || defined(SC92F73Ax) || defined(SC92F848x) || defined(SC92F748x) || defined(SC92F859x) || defined (SC92F759x)\ + || defined (SC92L853x) || defined (SC92L753x) + ADCCFG1 &= (~(uint8_t)(ADC_EAIN_Select >> 8)); +#endif + } + else + { + ADCCFG0 |= ((uint8_t)ADC_EAIN_Select); +#if defined (SC92F854x) || defined (SC92F754x) || defined (SC92F844xB) || defined (SC92F744xB)||defined (SC92F84Ax_2) || defined (SC92F74Ax_2)\ + || defined (SC92F846xB) || defined (SC92F746xB) || defined (SC92F836xB) || defined (SC92F736xB) || defined (SC92F84Ax) || defined (SC92F74Ax)\ + || defined(SC92F83Ax) || defined(SC92F73Ax) || defined(SC92F848x) || defined(SC92F748x) || defined(SC92F859x) || defined (SC92F759x)\ + || defined (SC92L853x) || defined (SC92L753x) + ADCCFG1 |= ((uint8_t)(ADC_EAIN_Select >> 8)); +#endif + } +} +/***************************************************** +*函数名称:void ADC_Cmd(FunctionalState NewState) +*函数功能:ADC功能开关函数 +*入口参数: +FunctionalState:NewState:功能启动/关闭选择 +*出口参数:void +*****************************************************/ +void ADC_Cmd(FunctionalState NewState) +{ + if (NewState == DISABLE) + { + ADCCON &= 0X7F; + } + else + { + ADCCON |= 0x80; + } +} + +/***************************************************** +*函数名称:uint16_t ADC_GetConversionValue(void) +*函数功能:获得一次AD转换数据 +*入口参数:void +*出口参数:uint16_t +*****************************************************/ +unsigned int ADC_GetConversionValue(void) +{ + return ((ADCVH << 4) + (ADCVL >> 4)); +} + +/***************************************************** +*函数名称:FlagStatus ADC_GetFlagStatus(void) +*函数功能:获得ADC中断标志状态 +*入口参数:void +*出口参数: +FlagStatus:ADC中断标志状态 +*****************************************************/ +FlagStatus ADC_GetFlagStatus(void) +{ +#if defined (SC92F854x) || defined (SC92F754x) ||defined (SC92F844xB) || defined (SC92F744xB)||defined (SC92F84Ax_2) || defined (SC92F74Ax_2)\ + || defined (SC92F846xB) || defined (SC92F746xB) || defined (SC92F836xB) || defined (SC92F736xB)||defined (SC92F84Ax) || defined (SC92F74Ax)\ + || defined (SC92F83Ax) || defined (SC92F73Ax) || defined (SC92F7003) || defined (SC92F8003) || defined (SC92F740x) || defined (SC92FWxx)\ + || defined(SC92F848x) || defined(SC92F748x) || defined(SC92F859x) || defined (SC92F759x) || defined (SC92L853x) || defined (SC92L753x) + return (bool)(ADCCON & 0x20); +#elif defined(SC92F742x) || defined(SC92F730x) || defined(SC92F725X) || defined(SC92F735X) || defined(SC92F732X) || defined(SC92F7490) || defined(SC93F833x) || defined(SC93F843x) || defined(SC93F743x) + return (bool)(ADCCON & 0x10); +#endif +} + +/***************************************************** +*函数名称:void ADC_ClearFlag(void) +*函数功能:清除ADC中断标志状态 +*入口参数:void +*出口参数:void +*****************************************************/ +void ADC_ClearFlag(void) +{ +#if defined(SC92F854x) || defined(SC92F754x) || defined(SC92F844xB) || defined(SC92F744xB) || defined(SC92F84Ax_2) || defined(SC92F74Ax_2)\ + || defined(SC92F846xB) || defined(SC92F746xB) || defined(SC92F836xB) || defined(SC92F736xB) || defined(SC92F84Ax) || defined(SC92F74Ax)\ + || defined(SC92F83Ax) || defined(SC92F73Ax) || defined(SC92F8003) || defined(SC92F740x) || defined(SC92F848x) || defined(SC92F748x)\ + || defined(SC92F859x) || defined(SC92F759x) || defined (SC92L853x) || defined (SC92L753x) + ADCCON &= 0xdf; +#endif +#if defined(SC92F742x) || defined(SC92F730x) || defined(SC92F725X) || defined(SC92F735X) || defined(SC92F732X) || defined(SC92F7490) || defined(SC93F833x) || defined(SC93F843x) || defined(SC93F743x) + ADCCON &= 0xef; +#endif +} + +#if defined(SC93F833x) || defined(SC93F843x) || defined(SC93F743x) +unsigned int ADC_TS_StandardData = 0x8000; + +/***************************************************** +*函数名称:void ADC_TSCmd(PriorityStatus NewState) +*函数功能:ADC 温度传感器功能开关函数 +*入口参数: +FunctionalState:NewState:功能启动/关闭选择 +*出口参数:void +*****************************************************/ +void ADC_TSCmd(FunctionalState NewState) +{ + if (NewState == DISABLE) + { + TSCFG &= 0X7F; + } + else + { + TSCFG |= 0X80; + } +} + +/***************************************************** +*函数名称:void ADC_CHOPConfig(PriorityStatus NewState) +*函数功能:拉高或者拉低抵消offset的应用控制位 +*入口参数: +PriorityStatus:NewState:温度传感器高/低选择 +*出口参数:void +*****************************************************/ +void ADC_CHOPConfig(PriorityStatus NewState) +{ + if (NewState == LOW) + { + TSCFG &= 0XFE; + } + else + { + TSCFG |= 0x01; + } +} + +/***************************************************** +*函数名称:void ADC_CHOPConfig(PriorityStatus NewState) +*函数功能:获取出厂时ADC 25度时的转换值 +*入口参数:void +*出口参数:void +*****************************************************/ +uint16_t ADC_Get_TS_StandardData(void) +{ + unsigned int code *IFBAddr = 0x3E; + IAPADE = 0x01; //指针指向 IFB 区 + ADC_TS_StandardData = *(IFBAddr); + IAPADE = 0x00; //指针指向 ROM 区 + return ADC_TS_StandardData; +} + +/***************************************************** +*函数名称:void ADC_GetTSValue(void) +*函数功能:直接获取float类型温度值,获取温度时会关闭中断 +*入口参数:void +*出口参数: +float:温度值 +*****************************************************/ +float ADC_GetTSValue(void) +{ + unsigned char EADC_Flag = EADC; //获取EA标志位状态 + unsigned int ADC_Value1 = 0, ADC_Value2 = 0, ADC_Value = 0; + unsigned int code *IFBAddr = 0x3E; + + ADC_Get_TS_StandardData(); + disableInterrupts(); //关闭中断 + ADC_CHOPConfig(LOW); //拉低抵消offset的应用控制位 + ADC_StartConversion(); //开始AD转换 + while(!ADC_GetFlagStatus()); //等待转换完成 + ADC_ClearFlag(); //清除转换标志位 + ADC_Value1 = ADC_GetConversionValue(); //获取第一次AD的转换值 + ADC_CHOPConfig(HIGH); //拉高抵消offset的应用控制位 + ADC_StartConversion(); //开始AD转换 + while(!ADC_GetFlagStatus()); //等待转换完成 + ADC_ClearFlag(); //清除转换标志位 + ADC_Value2 = ADC_GetConversionValue(); //获取第二次AD的转换值 + ADC_Value = (ADC_Value1 + ADC_Value2) / 2; //获取两次AD采样的平均值 + + if (EADC_Flag) //还原加入运算前的EA标志位 + { + enableInterrupts(); + } + return (25 + ((float)ADC_Value - (float)ADC_TS_StandardData) / 8); +} + +/***************************************************** +*函数名称:ADC_PGAConfig(ADC_PGACOM_TypeDef ADC_PGACOM,ADC_PGAGAN_TypeDef ADC_PGAGAN,ADC_PGAIPT_TypeDef ADC_PGAIPT) +*函数功能:PGA相关配置 +*入口参数: +ADC_PGACOM_TypeDef:ADC_PGACOM:PGA共模电压选择 +ADC_PGAGAN_TypeDef:ADC_PGAGAN:PGA增益放大倍数 +ADC_PGAIPT_TypeDef:ADC_PGAIPT:PGA同相/反相选择 +*出口参数:void +*****************************************************/ +void ADC_PGAConfig(ADC_PGACOM_TypeDef ADC_PGACOM, ADC_PGAGAN_TypeDef ADC_PGAGAN, ADC_PGAIPT_TypeDef ADC_PGAIPT) +{ + PGACON &= 0x8F; + PGACON |= (ADC_PGACOM | ADC_PGAGAN | ADC_PGAIPT); +} + +/***************************************************** +*函数名称:void ADC_PGACmd(PriorityStatus NewState) +*函数功能:ADC PGA功能开关函数 +*入口参数: +FunctionalState:NewState:功能启动/关闭选择 +*出口参数:void +*****************************************************/ +void ADC_PGACmd(PriorityStatus NewState) +{ + if (NewState == LOW) + { + PGACON &= 0XFE; + } + else + { + PGACON |= 0x01; + } +} +#endif + + +/***************************************************** +*函数名称:void ADC_VrefConfig(ADC_Vref_TypeDef ADC_Vref) +*函数功能:ADC 参考电压选择 +*入口参数: +ADC_Vref_TypeDef:ADC_Vref:选择ADC参考电压 +*出口参数:void +*****************************************************/ +void ADC_VrefConfig(ADC_Vref_TypeDef ADC_Vref) +{ + OPINX = 0xC2; + OPREG = OPREG & 0X7F | ADC_Vref; +} +#endif + +/******************* (C) COPYRIGHT 2021 SinOne Microelectronics *****END OF FILE****/ \ No newline at end of file diff --git a/CFG/SC92F8363B/Keil_Mould/FWLib/SC92F_Lib/src/sc92f_btm.c b/CFG/SC92F8363B/Keil_Mould/FWLib/SC92F_Lib/src/sc92f_btm.c new file mode 100644 index 0000000..e14a5ad --- /dev/null +++ b/CFG/SC92F8363B/Keil_Mould/FWLib/SC92F_Lib/src/sc92f_btm.c @@ -0,0 +1,78 @@ +//************************************************************ +// Copyright (c) 深圳市赛元微电子有限公司 +// 文件名称: sc92f_btm.c +// 作者: 赛元应用团队 +// 模块功能: BTM固件库函数C文件 +// 局部函数列表: +// 最后更正日期: 2022年4月2日 +// 版本: V1.10002 +// 说明: +//************************************************************* + +#include "sc92f_btm.h" + + +/************************************************** +*函数名称:void BTM_Init(BTM_Timebase_TypeDef BTM_Timebase) +*函数功能:BTM初始化配置函数 +*入口参数: +BTM_Timebase_TypeDef:BTM_Timebase:BTM溢出时间选择 +*出口参数:void +**************************************************/ +void BTM_Init(BTM_Timebase_TypeDef BTM_Timebase) +{ + BTMCON = (BTMCON & 0xF0) | BTM_Timebase; //配置溢出时间 +} + +/***************************************************** +*函数名称:void BTM_Cmd(FunctionalState NewState) +*函数功能:BTM功能开关函数 +*入口参数: +FunctionalState:NewState:功能启动/关闭选择 +*出口参数:void +*****************************************************/ +void BTM_Cmd(FunctionalState NewState) +{ + if(NewState == DISABLE) + { + BTMCON &= 0x7f; //失能BTM + } + else + { + BTMCON |= 0x80; //使能BTM + } +} + +/***************************************************** +*函数名称:void BTM_ITConfig(FunctionalState NewState, PriorityStatus Priority) +*函数功能:BTM中断初始化 +*入口参数: +FunctionalState:NewState:中断使能/关闭选择 +PriorityStatus:Priority:中断优先级选择 +*出口参数:void +*****************************************************/ +void BTM_ITConfig(FunctionalState NewState, + PriorityStatus Priority) +{ + //中断使能设置 + if(NewState == DISABLE) + { + IE1 &= 0xfb; + } + else + { + IE1 |= 0x04; + } + + //中断优先级设置 + if(Priority == LOW) + { + IP1 &= 0xfb; + } + else + { + IP1 |= 0x04; + } +} + +/******************* (C) COPYRIGHT 2020 SinOne Microelectronics *****END OF FILE****/ \ No newline at end of file diff --git a/CFG/SC92F8363B/Keil_Mould/FWLib/SC92F_Lib/src/sc92f_chksum.c b/CFG/SC92F8363B/Keil_Mould/FWLib/SC92F_Lib/src/sc92f_chksum.c new file mode 100644 index 0000000..24412e7 --- /dev/null +++ b/CFG/SC92F8363B/Keil_Mould/FWLib/SC92F_Lib/src/sc92f_chksum.c @@ -0,0 +1,59 @@ +//************************************************************ +// Copyright (c) 深圳市赛元微电子有限公司 +// 文件名称 : sc92f_chksum.c +// 作者 : +// 模块功能 : CHKSUM固件库函数C文件 +// 最后更正日期: 2021/08/20 +// 版本 : V1.10001 +// 说明 : +//************************************************************* + +#include "sc92f_chksum.h" + +#if defined(SC92F7003) || defined(SC92F8003) || defined(SC92F736xB) || defined(SC92F836xB) || defined(SC92F740x) || defined(SC92F742x)\ + || defined(SC92F73Ax) || defined(SC92F83Ax) || defined(SC92F744xB) || defined(SC92F844xB) || defined(SC92F746xB) || defined(SC92F846xB)\ + || defined(SC92F748x) || defined(SC92F848x) || defined(SC92F74Ax) || defined(SC92F84Ax) || defined(SC92F74Ax_2) || defined(SC92F84Ax_2)\ + || defined(SC92F754x) || defined (SC92F854x) || defined (SC92F759x) || defined(SC92F859x) || defined (SC92F7490) || defined(SC92FWxx)\ + || defined(SC92F827X) || defined(SC92F847X) +/************************************************** +*函数名称:void CHKSUM_DeInit(void) +*函数功能:CHKSUM相关寄存器复位至缺省值 +*入口参数:void +*出口参数:void +**************************************************/ +void CHKSUM_DeInit(void) +{ + OPERCON &= 0XFE; + CHKSUML = 0X00; + CHKSUMH = 0X00; +} + +/************************************************** +*函数名称:void CHKSUM_StartOperation(void) +*函数功能:触发一次check sum计算 +*入口参数:void +*出口参数:void +**************************************************/ +void CHKSUM_StartOperation(void) +{ + OPERCON |= 0X01; + + while(OPERCON & 0x01); +} + +/************************************************** +*函数名称:uint16_t CHKSUM_GetCheckValue(void) +*函数功能:获取一次check sum计算值 +*入口参数:void +*出口参数: +uint16_t:check sum计算值 +**************************************************/ +uint16_t CHKSUM_GetCheckValue(void) +{ + uint16_t checktemp; + checktemp = (uint16_t)(CHKSUMH << 8) + + (uint16_t)CHKSUML; + return checktemp; +} +#endif +/******************* (C) COPYRIGHT 2020 SinOne Microelectronics *****END OF FILE****/ \ No newline at end of file diff --git a/CFG/SC92F8363B/Keil_Mould/FWLib/SC92F_Lib/src/sc92f_crc.c b/CFG/SC92F8363B/Keil_Mould/FWLib/SC92F_Lib/src/sc92f_crc.c new file mode 100644 index 0000000..73fac1d --- /dev/null +++ b/CFG/SC92F8363B/Keil_Mould/FWLib/SC92F_Lib/src/sc92f_crc.c @@ -0,0 +1,97 @@ +//************************************************************ +// Copyright (c) 深圳市赛元微电子有限公司 +// 文件名称 : sc92F_CRC.c +// 作者 : +// 模块功能 : CRC固件库函数C文件 +// 最后更正日期: 2020/8/13 +// 版本 : V1.0000 +// 说明 :该文件仅适用于SC92F系列芯片 +//************************************************************* + +#include "sc92f_CRC.h" +#include "intrins.H" + +#if defined (SC92L853x) || defined (SC92L753x) +/************************************************** +*函数名称:unsigned long CRC_All() +*函数功能:求本工程HEX的CRC32校验值,该计算结果会根据OPTION的IAR Range不同而变化 +*入口参数:void +*出口参数: +uint32_t:返回CRC计算结果 +**************************************************/ +uint32_t CRC_All() +{ + uint32_t CRC_Result; + OPERCON |= 0x01; + _nop_(); + _nop_(); + _nop_(); + _nop_(); + _nop_(); + _nop_(); + _nop_(); + _nop_(); + _nop_(); + _nop_(); + CRCINX = 0x00; + CRC_Result = CRCREG; + CRC_Result = CRCREG * 256 + CRC_Result; + CRC_Result = CRCREG * 65536 + CRC_Result; + CRC_Result = CRCREG * 16777216 + CRC_Result; + return CRC_Result; +} + +/************************************************** +*函数名称:uint32_t CRC_Frame(uint8_t* buff,uint8_t Length) +*函数功能:求输入帧的CRC校验值 +*入口参数: +uint8_t*:buff:传入需要进行CRC计算的数组 +uint8_t:Length:传入需要计算的数组长度 +*出口参数: +uint32_t:CRC计算结果 +**************************************************/ +uint32_t CRC_Frame(uint8_t *buff, uint8_t Length) +{ + uint8_t i; + uint32_t CRC_Result = 0; + + EA = 0; + OPERCON |= 0x02; + _nop_(); + _nop_(); + _nop_(); + _nop_(); + _nop_(); + _nop_(); + _nop_(); + _nop_(); + _nop_(); + _nop_(); + + for (i = 0; i < Length; i++) + { + CRC_Result = *(buff + i); + CRCREG = CRC_Result; + _nop_(); + _nop_(); + _nop_(); + _nop_(); + _nop_(); + _nop_(); + _nop_(); + _nop_(); + _nop_(); + _nop_(); + } + + CRCINX = 0x00; + CRC_Result = CRCREG; + CRC_Result = CRCREG * 256 + CRC_Result; + CRC_Result = CRCREG * 65536 + CRC_Result; + CRC_Result = CRCREG * 16777216 + CRC_Result; + EA = 1; + + return CRC_Result; +} +#endif +/******************* (C) COPYRIGHT 2020 SinOne Microelectronics *****END OF FILE****/ \ No newline at end of file diff --git a/CFG/SC92F8363B/Keil_Mould/FWLib/SC92F_Lib/src/sc92f_ddic.c b/CFG/SC92F8363B/Keil_Mould/FWLib/SC92F_Lib/src/sc92f_ddic.c new file mode 100644 index 0000000..eaf69f8 --- /dev/null +++ b/CFG/SC92F8363B/Keil_Mould/FWLib/SC92F_Lib/src/sc92f_ddic.c @@ -0,0 +1,228 @@ +//************************************************************ +// Copyright (c) 深圳市赛元微电子有限公司 +// 文件名称 : sc92f_ddic.c +// 作者 : +// 模块功能 : DDIC固件库函数C文件 +// 局部函数列表: +// 最后更正日期: 2022/01/20 +// 版本 : V1.10002 +// 说明 : +//************************************************************* + +#include "sc92f_ddic.h" + +#if defined (SC92F854x) || defined (SC92F754x) ||defined (SC92F844xB) || defined (SC92F744xB)||defined (SC92F84Ax_2) || defined (SC92F74Ax_2)\ + || defined (SC92F859x) || defined (SC92F759x) || defined (SC92L853x) || defined (SC92L753x) + +#if defined (SC92L853x) || defined (SC92L753x) +uint8_t xdata LCDRAM[30] _at_ 0xF00; +#else +uint8_t xdata LCDRAM[30] _at_ 0x700; +#endif + +/************************************************** +*函数名称:void DDIC_DeInit(void) +*函数功能:DDIC相关寄存器复位至缺省值 +*入口参数:void +*出口参数:void +**************************************************/ +void DDIC_DeInit(void) +{ + DDRCON = 0X00; + P0VO = 0X00; + P1VO = 0X00; + P2VO = 0X00; +#if defined (SC92L853x) || defined (SC92L753x) + P5VO = 0X00; +#else + P3VO = 0X00; +#endif + OTCON &= 0XF0; +} + +/************************************************** +*函数名称:void DDIC_Init(uint8_t P0OutputPin) +*函数功能:DDIC初始化配置函数 +*入口参数: +DDIC_DutyCycle_TypeDef:DDIC_DutyCylce:LCD/LED显示占空比控制 +DDIC_Pin_TypeDef:P0OutputPin:设置P0口引脚为LCD电压输出口,可以使用或语句操作枚举的多个成员 +DDIC_Pin_TypeDef:P1OutputPin:设置P1口引脚为LCD电压输出口,可以使用或语句操作枚举的多个成员 +DDIC_Pin_TypeDef:P2OutputPin:设置P2口引脚为LCD电压输出口,可以使用或语句操作枚举的多个成员 +DDIC_Pin_TypeDef:P3OutputPin:设置P3口引脚为LCD电压输出口,可以使用或语句操作枚举的多个成员 + 注:当型号为SC92L853x或SC92L753x时,实际为设置P5口 +*出口参数:void +**************************************************/ +void DDIC_Init(DDIC_DutyCycle_TypeDef DDIC_DutyCylce, + uint8_t P0OutputPin, uint8_t P1OutputPin, + uint8_t P2OutputPin, uint8_t P3OutputPin) +{ + DDRCON = DDRCON & 0XCF | DDIC_DutyCylce; + P0VO = P0OutputPin; + P1VO = P1OutputPin; + P2VO = P2OutputPin; +#if defined (SC92L853x) || defined (SC92L753x) + P5VO = P3OutputPin; +#else + P3VO = P3OutputPin; +#endif +} + +/************************************************** +*函数名称:void DDIC_LEDConfig(void) +*函数功能:LED配置函数 +*入口参数:void +*出口参数:void +**************************************************/ +void DDIC_LEDConfig(void) +{ + DDRCON |= 0X40; +} + +/************************************************** +*函数名称:void DDIC_LCDConfig(uint8_t LCDVoltage, + DDIC_ResSel_Typedef DDIC_ResSel, + DDIC_BiasVoltage_Typedef DDIC_BiasVoltage) +*函数功能:LCD配置函数 +*入口参数: +uint8_t:LCDVoltage:LCD电压调节 +DDIC_ResSel_Typedef:DDIC_ResSel:LCD电压输出口电阻选择 +DDIC_BiasVoltage_Typedef:DDIC_BiasVoltage:LCD显示驱动偏置电压设置 +*出口参数:void +**************************************************/ +void DDIC_LCDConfig(uint8_t LCDVoltage, + DDIC_ResSel_Typedef DDIC_ResSel, + DDIC_BiasVoltage_Typedef DDIC_BiasVoltage) +{ + DDRCON = DDRCON & 0XB0 | LCDVoltage; + OTCON = OTCON & 0XF2 | DDIC_ResSel | DDIC_BiasVoltage; +} +/************************************************** +*函数名称:void DDIC_DMOD_Selcet(DDIC_DMOD_TypeDef DDIC_DMOD) +*函数功能:显示驱动模式选择 +*入口参数: +DDIC_DMOD_TypeDef:DDIC_DMOD:选择显示模式 +*出口参数:void +**************************************************/ +void DDIC_DMOD_Selcet(DDIC_DMOD_TypeDef DDIC_DMOD) +{ + if(DDIC_DMOD == DMOD_LED) + { + DDRCON |= 0X40; + } + else + { + DDRCON &= 0XBF; + } +} +/***************************************************** +*函数名称:void DDIC_OutputPinOfDutycycleD4(DDIC_OutputPin_TypeDef DDIC_OutputPin) +*函数功能:1/4占空比时segment与common复用管脚选择 +*入口参数: +DDIC_OutputPin_TypeDef:DDIC_OutputPin:输出管脚选择 +*出口参数:void +*****************************************************/ +void DDIC_OutputPinOfDutycycleD4( + DDIC_OutputPin_TypeDef DDIC_OutputPin) +{ + OTCON &= ~0X02; + OTCON = DDIC_OutputPin<<1; +} + +/***************************************************** +*函数名称:void DDIC_Cmd(FunctionalState NewState) +*函数功能:显示驱动功能开关函数 +*入口参数: +FunctionalState:NewState:功能启动/关闭选择 +*出口参数:void +*****************************************************/ +void DDIC_Cmd(FunctionalState NewState) +{ + if(NewState == DISABLE) + { + DDRCON &= 0X7F; + } + else + { + DDRCON |= 0x80; + } +} + +/***************************************************** +*函数名称:void DDIC_Control(DDIC_Control_SEG_TypeDef DDIC_Seg,DDIC_Control_COM_TypeDef DDIC_Com,DDIC_Control_Status DDIC_Contr) +*函数功能:控制输入的SEG和COM脚对应LCD/LED的亮灭 +*入口参数:DDIC_Control_SEG_TypeDef DDIC_Seg 选择控制的SEG口 + DDIC_Control_COM_TypeDef DDIC_Com 选择控制的COM口 + DDIC_Control_Status DDIC_Contr 控制状态 +*出口参数:void +*****************************************************/ +void DDIC_Control(DDIC_Control_SEG_TypeDef DDIC_Seg, + uint8_t DDIC_Com, + DDIC_Control_Status DDIC_Contr) +{ + if(DDIC_Contr) + { + LCDRAM[DDIC_Seg] |= DDIC_Com; + } + else + { + LCDRAM[DDIC_Seg] &= (~DDIC_Com); + } +} +#endif + +#if defined (SC92F846xB) || defined (SC92F746xB) || defined (SC92F836xB) || defined (SC92F736xB) || defined (SC92F83Ax) || defined (SC92F73Ax)\ + || defined (SC92F84Ax) || defined (SC92F74Ax) || defined (SC92F742x) || defined (SC92F730x) || defined (SC92F725X) || defined (SC92F735X)\ + || defined (SC92F732X) || defined (SC93F833x) || defined (SC93F843x) || defined (SC93F743x) || defined (SC92F848x) || defined (SC92F748x) +/************************************************** +*函数名称:void DDIC_DeInit(void) +*函数功能:DDIC相关寄存器复位至缺省值 +*入口参数:void +*出口参数:void +**************************************************/ +void DDIC_DeInit(void) +{ + P0VO = 0X00; + OTCON &= 0XF3; +} + +/************************************************** +*函数名称:void DDIC_Init(uint8_t P0OutputPin) +*函数功能:DDIC初始化配置函数 +*入口参数: +DDIC_Pin_TypeDef:P0OutputPin:设置P0口引脚为LCD电压输出口,可以使用或语句操作枚举的多个成员 +*出口参数:void +**************************************************/ +void DDIC_Init(uint8_t P0OutputPin) +{ + P0VO = P0OutputPin; +} + +/************************************************** +*函数名称:void DDIC_LCDConfig(DDIC_ResSel_Typedef DDIC_ResSel) +*函数功能:LCD配置函数 +*入口参数: +DDIC_ResSel_Typedef:DDIC_ResSel:LCD电压输出口电阻选择 +*出口参数:void +**************************************************/ +void DDIC_LCDConfig(DDIC_ResSel_Typedef DDIC_ResSel) +{ + OTCON = (OTCON & 0XF3) | DDIC_ResSel; +} + +/************************************************** +*函数名称:void DDIC_Config_Init(uint8_t P0OutputPin,DDIC_ResSel_Typedef DDIC_ResSel) +*函数功能:LCD初始化及配置函数 +*入口参数: +DDIC_Pin_TypeDef:P0OutputPin:设置P0口引脚为LCD电压输出口,可以使用或语句操作枚举的多个成员 +DDIC_ResSel_Typedef:DDIC_ResSel:LCD电压输出口电阻选择 +*出口参数:void +**************************************************/ +void DDIC_Config_Init(uint8_t P0OutputPin, + DDIC_ResSel_Typedef DDIC_ResSel) +{ + P0VO = P0OutputPin; + OTCON = (OTCON & 0XF3) | DDIC_ResSel; +} + +#endif +/******************* (C) COPYRIGHT 2019 SinOne Microelectronics *****END OF FILE****/ \ No newline at end of file diff --git a/CFG/SC92F8363B/Keil_Mould/FWLib/SC92F_Lib/src/sc92f_gpio.c b/CFG/SC92F8363B/Keil_Mould/FWLib/SC92F_Lib/src/sc92f_gpio.c new file mode 100644 index 0000000..d18e543 --- /dev/null +++ b/CFG/SC92F8363B/Keil_Mould/FWLib/SC92F_Lib/src/sc92f_gpio.c @@ -0,0 +1,539 @@ +//************************************************************ +// Copyright (c) 深圳市赛元微电子有限公司 +// 文件名称 : sc92f_gpio.c +// 作者 : +// 模块功能 : GPIO固件库函数C文件 +// 局部函数列表 : +// 最后更正日期 : 2022/01/11 +// 版本 : V1.10004 +// 说明 : 本文件仅适用于赛元92F/93F/92L系列单片机 +//************************************************************* + + +#include "sc92f_gpio.h" + +/************************************************** +*函数名称:void GPIO_DeInit(void) +*函数功能:GPIO相关寄存器复位至缺省值 +*入口参数:void +*出口参数:void +**************************************************/ +void GPIO_DeInit(void) +{ + P0CON = 0x00; + P0PH = 0x00; + P0 = 0; + P1CON = 0x00; + P1PH = 0x00; + P1 = 0; + P2CON = 0x00; + P2PH = 0x00; + P2 = 0; +#if defined(SC92F854x) || defined(SC92F754x) || defined(SC92F844xB) || defined(SC92F744xB) || defined(SC92F84Ax_2) || defined(SC92F74Ax_2)\ + || defined(SC92FWxx) || defined(SC92F859x) || defined(SC92F759x) + P3CON = 0x00; + P3PH = 0x00; + P3 = 0; + P4CON = 0x00; + P4PH = 0x00; + P4 = 0; +#endif +#if !defined(SC92F730x) && !defined(SC92F725X) && !defined(SC92F735X) && !defined(SC92F7003) && !defined(SC92F8003) && !defined(SC92F740x) && !defined(SC92F827X) && !defined(SC92F837X) + P5CON = 0x00; + P5PH = 0x00; + P5 = 0; +#endif +} + +/************************************************** +*函数名称:void GPIO_Init(GPIO_TypeDef GPIOx, uint8_t PortPins, GPIO_Mode_TypeDef GPIO_Mode) +*函数功能:GPIO口模式配置初始化 +*入口参数: +GPIO_TypeDef:GPIOx:选择操作的GPIO口 +GPIO_Pin_TypeDef:PortPins:选择GPIO管脚Pxy +GPIO_Mode_TypeDef:GPIO_Mode:选择GPIO口模式(高阻输入、上拉输入、推挽输出) +*出口参数:void +**************************************************/ +void GPIO_Init(GPIO_TypeDef GPIOx, + uint8_t PortPins, GPIO_Mode_TypeDef GPIO_Mode) +{ + if (GPIOx == GPIO0) + { + if (GPIO_Mode == GPIO_MODE_IN_HI) + { + P0CON &= ~PortPins; + P0PH &= ~PortPins; + } + + if (GPIO_Mode == GPIO_MODE_IN_PU) + { + P0CON &= ~PortPins; + P0PH |= PortPins; + } + + if (GPIO_Mode == GPIO_MODE_OUT_PP) + { + P0CON |= PortPins; + } + } + else if (GPIOx == GPIO1) + { + if (GPIO_Mode == GPIO_MODE_IN_HI) + { + P1CON &= ~PortPins; + P1PH &= ~PortPins; + } + + if (GPIO_Mode == GPIO_MODE_IN_PU) + { + P1CON &= ~PortPins; + P1PH |= PortPins; + } + + if (GPIO_Mode == GPIO_MODE_OUT_PP) + { + P1CON |= PortPins; + } + } + else if (GPIOx == GPIO2) + { + if (GPIO_Mode == GPIO_MODE_IN_HI) + { + P2CON &= ~PortPins; + P2PH &= ~PortPins; + } + + if (GPIO_Mode == GPIO_MODE_IN_PU) + { + P2CON &= ~PortPins; + P2PH |= PortPins; + } + + if (GPIO_Mode == GPIO_MODE_OUT_PP) + { + P2CON |= PortPins; + } + } + +#if defined(SC92F854x) || defined(SC92F754x) || defined(SC92F844xB) || defined(SC92F744xB) || defined(SC92F84Ax_2) || defined(SC92F74Ax_2)\ + || defined(SC92FWxx) || defined(SC92F859x) || defined(SC92F759x) + else if (GPIOx == GPIO3) + { + if (GPIO_Mode == GPIO_MODE_IN_HI) + { + P3CON &= ~PortPins; + P3PH &= ~PortPins; + } + + if (GPIO_Mode == GPIO_MODE_IN_PU) + { + P3CON &= ~PortPins; + P3PH |= PortPins; + } + + if (GPIO_Mode == GPIO_MODE_OUT_PP) + { + P3CON |= PortPins; + } + } + else if (GPIOx == GPIO4) + { + if (GPIO_Mode == GPIO_MODE_IN_HI) + { + P4CON &= ~PortPins; + P4PH &= ~PortPins; + } + + if (GPIO_Mode == GPIO_MODE_IN_PU) + { + P4CON &= ~PortPins; + P4PH |= PortPins; + } + + if (GPIO_Mode == GPIO_MODE_OUT_PP) + { + P4CON |= PortPins; + } + } + +#endif +#if !defined(SC92F730x) && !defined(SC92F725X) && !defined(SC92F735X) && !defined(SC92F7003) && !defined(SC92F8003) && !defined(SC92F740x) && !defined(SC92F827X) && !defined(SC92F837X) + else if (GPIOx == GPIO5) + { + if (GPIO_Mode == GPIO_MODE_IN_HI) + { + P5CON &= ~PortPins; + P5PH &= ~PortPins; + } + + if (GPIO_Mode == GPIO_MODE_IN_PU) + { + P5CON &= ~PortPins; + P5PH |= PortPins; + } + + if (GPIO_Mode == GPIO_MODE_OUT_PP) + { + P5CON |= PortPins; + } + } + +#endif +} + +/************************************************** +*函数名称:void GPIO_Write(GPIO_TypeDef GPIOx, uint8_t PortVal) +*函数功能:GPIO口赋值 +*入口参数: +GPIO_TypeDef:GPIOx:选择操作的GPIO口 +uint8_t:PortVal:GPIO口的值 +*出口参数:void +**************************************************/ +void GPIO_Write(GPIO_TypeDef GPIOx, + uint8_t PortVal) +{ + if (GPIOx == GPIO0) + { + P0 = PortVal; + } + + if (GPIOx == GPIO1) + { + P1 = PortVal; + } + + if (GPIOx == GPIO2) + { + P2 = PortVal; + } + +#if defined(SC92F854x) || defined(SC92F754x) || defined(SC92F844xB) || defined(SC92F744xB) || defined(SC92F84Ax_2) || defined(SC92F74Ax_2)\ + || defined(SC92FWxx) || defined(SC92F859x) || defined(SC92F759x) + + if (GPIOx == GPIO3) + { + P3 = PortVal; + } + + if (GPIOx == GPIO4) + { + P4 = PortVal; + } + +#endif +#if !defined(SC92F730x) && !defined(SC92F725X) && !defined(SC92F735X) && !defined(SC92F8003) && !defined(SC92F740x) && !defined(SC92F827X) && !defined(SC92F837X) && !defined(SC92F7003) + + if (GPIOx == GPIO5) + { + P5 = PortVal; + } + +#endif +} + +/************************************************** +*函数名称:void GPIO_WriteHigh(GPIO_TypeDef GPIOx, uint8_t PortPins) +*函数功能:GPIO口管脚Pxy置位 +*入口参数: +GPIO_TypeDef:GPIOx:选择操作的GPIO口 +GPIO_Pin_TypeDef:PortPins:选择GPIO口管脚Pxy +*出口参数:void +**************************************************/ +void GPIO_WriteHigh(GPIO_TypeDef GPIOx, + uint8_t PortPins) +{ + if (GPIOx == GPIO0) + { + P0 |= PortPins; + } + + if (GPIOx == GPIO1) + { + P1 |= PortPins; + } + + if (GPIOx == GPIO2) + { + P2 |= PortPins; + } + +#if defined(SC92F854x) || defined(SC92F754x) || defined(SC92F844xB) || defined(SC92F744xB) || defined(SC92F84Ax_2) || defined(SC92F74Ax_2)\ + || defined(SC92FWxx) || defined(SC92F859x) || defined(SC92F759x) + + if (GPIOx == GPIO3) + { + P3 |= PortPins; + } + + if (GPIOx == GPIO4) + { + P4 |= PortPins; + } + +#endif +#if !defined(SC92F730x) && !defined(SC92F725X) && !defined(SC92F735X) && !defined(SC92F8003) && !defined(SC92F740x) && !defined(SC92F827X) && !defined(SC92F837X) && !defined(SC92F7003) + + if (GPIOx == GPIO5) + { + P5 |= PortPins; + } + +#endif +} + +/************************************************** +*函数名称:void GPIO_WriteLow(GPIO_TypeDef GPIOx, uint8_t PortPins) +*函数功能:GPIO口管脚Pxy复位 +*入口参数: +GPIO_TypeDef:GPIOx:选择操作的GPIO口 +GPIO_Pin_TypeDef:PortPins:选择GPIO口管脚Pxy +*出口参数:void +**************************************************/ +void GPIO_WriteLow(GPIO_TypeDef GPIOx, + uint8_t PortPins) +{ + if (GPIOx == GPIO0) + { + P0 &= ~PortPins; + } + + if (GPIOx == GPIO1) + { + P1 &= ~PortPins; + } + + if (GPIOx == GPIO2) + { + P2 &= ~PortPins; + } + +#if defined(SC92F854x) || defined(SC92F754x) || defined(SC92F844xB) || defined(SC92F744xB) || defined(SC92F84Ax_2) || defined(SC92F74Ax_2)\ + || defined(SC92FWxx) || defined(SC92F859x) || defined(SC92F759x) + + if (GPIOx == GPIO3) + { + P3 &= ~PortPins; + } + + if (GPIOx == GPIO4) + { + P4 &= ~PortPins; + } + +#endif +#if !defined(SC92F730x) && !defined(SC92F725X) && !defined(SC92F735X) && !defined(SC92F8003) && !defined(SC92F740x) && !defined(SC92F827X) && !defined(SC92F837X) && !defined(SC92F7003) + + if (GPIOx == GPIO5) + { + P5 &= ~PortPins; + } + +#endif +} + +/************************************************** +*函数名称:uint8_t GPIO_ReadPort(GPIO_TypeDef GPIOx) +*函数功能:读GPIO口Px的值 +*入口参数: +GPIO_TypeDef:GPIOx:选择操作的GPIO口 +*出口参数:uint8_t 返回Px的值 +**************************************************/ +uint8_t GPIO_ReadPort(GPIO_TypeDef GPIOx) +{ + if (GPIOx == GPIO0) + { + return P0; + } + else if (GPIOx == GPIO1) + { + return P1; + } + else if (GPIOx == GPIO2) + { + return P2; + } + +#if defined(SC92F854x) || defined(SC92F754x) || defined(SC92F844xB) || defined(SC92F744xB) || defined(SC92F84Ax_2) || defined(SC92F74Ax_2)\ + || defined(SC92FWxx) || defined(SC92F859x) || defined(SC92F759x) + else if (GPIOx == GPIO3) + { + return P3; + } + else if (GPIOx == GPIO4) + { + return P4; + } + +#endif +#if !defined(SC92F730x) && !defined(SC92F725X) && !defined(SC92F735X) && !defined(SC92F8003) && !defined(SC92F740x) && !defined(SC92F827X) && !defined(SC92F837X) && !defined(SC92F7003) + else if (GPIOx == GPIO5) + { + return P5; + } + +#endif + else + { + return 0; + } +} + +/************************************************** +*函数名称:BitStatus GPIO_ReadPin(GPIO_TypeDef GPIOx, uint8_t PortPins) +*函数功能:读GPIO口管脚Pxy的值 +*入口参数: +GPIO_TypeDef:GPIOx:选择操作的GPIO口 +GPIO_Pin_TypeDef:PortPins:选择GPIO口管脚Pxy +*出口参数:BitStatus 返回Pxy的值 +**************************************************/ +BitStatus GPIO_ReadPin(GPIO_TypeDef GPIOx, + uint8_t PortPins) +{ + if (GPIOx == GPIO0) + { + return ((bit)(P0 & PortPins)); + } + else if (GPIOx == GPIO1) + { + return ((bit)(P1 & PortPins)); + } + else if (GPIOx == GPIO2) + { + return ((bit)(P2 & PortPins)); + } + +#if defined(SC92F854x) || defined(SC92F754x) || defined(SC92F844xB) || defined(SC92F744xB) || defined(SC92F84Ax_2) || defined(SC92F74Ax_2)\ + || defined(SC92FWxx) || defined(SC92F859x) || defined(SC92F759x) + else if (GPIOx == GPIO3) + { + return ((bit)(P3 & PortPins)); + } + else if (GPIOx == GPIO4) + { + return ((bit)(P4 & PortPins)); + } + +#endif +#if !defined(SC92F730x) && !defined(SC92F725X) && !defined(SC92F735X) && !defined(SC92F8003) && !defined(SC92F740x) && !defined(SC92F827X) && !defined(SC92F837X) && !defined(SC92F7003) + else if (GPIOx == GPIO5) + { + return ((bit)(P5 & PortPins)); + } + +#endif + return 0; +} + + +/************************************************** +*函数名称:void GPIO_IOH_Config(GPIO_TypeDef GPIOx, uint8_t PortPins,GPIO_IOH_Grade_TypeDef GPIO_IOH_Grade) +*函数功能:设置GPIO口管脚IOH输出能力 +*入口参数: +GPIO_TypeDef:GPIOx:选择操作的GPIO口 +GPIO_Pin_TypeDef:PortPins:选择GPIO口管脚Pxy +GPIO_IOH_Grade_TypeDef:GPIO_IOH_Grade:IO输出等级 +*出口参数:BitStatus 返回Pxy的值 +**************************************************/ +#if !defined(SC92F7003) && !defined(SC92F8003) && !defined(SC92F740x) +void GPIO_IOH_Config(GPIO_TypeDef GPIOx, GPIO_Pin_TypeDef PortPins, GPIO_IOH_Grade_TypeDef GPIO_IOH_Grade) +{ +#if defined(SC92F854x) || defined(SC92F754x) || defined(SC92F844xB) || defined(SC92F744xB) || defined(SC92F84Ax_2) || defined(SC92F74Ax_2)\ + || defined(SC92FWxx) || defined(SC92F859x) || defined(SC92F759x) || defined (SC92L853x) || defined (SC92L753x) + switch (GPIOx) + { + case GPIO0: + if (PortPins == GPIO_PIN_LNIB) + { + IOHCON0 &= 0xFC; + IOHCON0 |= GPIO_IOH_Grade; + } + else if (PortPins == GPIO_PIN_HNIB) + { + IOHCON0 &= 0xF3; + IOHCON0 |= GPIO_IOH_Grade << 2; + } + break; + case GPIO1: + if (PortPins == GPIO_PIN_LNIB) + { + IOHCON0 &= 0xCF; + IOHCON0 |= GPIO_IOH_Grade << 4; + } + else if (PortPins == GPIO_PIN_HNIB) + { + IOHCON0 &= 0x3F; + IOHCON0 |= GPIO_IOH_Grade << 6; + } + break; + case GPIO2: + if (PortPins == GPIO_PIN_LNIB) + { + IOHCON1 &= 0xFC; + IOHCON1 |= GPIO_IOH_Grade; + } + else if (PortPins == GPIO_PIN_HNIB) + { + IOHCON1 &= 0xF3; + IOHCON1 |= GPIO_IOH_Grade << 2; + } + break; +#if defined (SC92L853x) || defined (SC92L753x) + case GPIO5: + if (PortPins == GPIO_PIN_LNIB) + { + IOHCON1 &= 0xCF; + IOHCON1 |= GPIO_IOH_Grade << 4; + } + else if (PortPins == GPIO_PIN_HNIB) + { + IOHCON1 &= 0x3f; + IOHCON1 |= GPIO_IOH_Grade << 6; + } + break; +#else + case GPIO3: + if (PortPins == GPIO_PIN_LNIB) + { + IOHCON1 &= 0xCF; + IOHCON1 |= GPIO_IOH_Grade << 4; + } + break; +#endif + default: + break; + } +#else + switch (GPIOx) + { + case GPIO0: + if (PortPins == GPIO_PIN_LNIB) + { + IOHCON &= 0xFC; + IOHCON |= GPIO_IOH_Grade; + } + else if (PortPins == GPIO_PIN_HNIB) + { + IOHCON &= 0xF3; + IOHCON |= GPIO_IOH_Grade << 2; + } + break; + case GPIO2: + if (PortPins == GPIO_PIN_LNIB) + { + IOHCON &= 0xFC; + IOHCON |= GPIO_IOH_Grade; + } + else if (PortPins == GPIO_PIN_HNIB) + { + IOHCON &= 0xF3; + IOHCON |= GPIO_IOH_Grade << 2; + } + break; + default: + break; + } +#endif +} +#endif + +/******************* (C) COPYRIGHT 2021 SinOne Microelectronics *****END OF FILE****/ \ No newline at end of file diff --git a/CFG/SC92F8363B/Keil_Mould/FWLib/SC92F_Lib/src/sc92f_iap.c b/CFG/SC92F8363B/Keil_Mould/FWLib/SC92F_Lib/src/sc92f_iap.c new file mode 100644 index 0000000..71d92fa --- /dev/null +++ b/CFG/SC92F8363B/Keil_Mould/FWLib/SC92F_Lib/src/sc92f_iap.c @@ -0,0 +1,172 @@ +//************************************************************ +// Copyright (c) 深圳市赛元微电子有限公司 +// 文件名称 : sc92f_iap.c +// 作者 : +// 模块功能 : IAP固件库函数C文件 +// 最后更正日期: 2022/01/24 +// 版本 : V1.10002 +// 说明 :本文件仅适用于赛元92F/93F/92L系列单片机 +//************************************************************* + +#include "sc92f_iap.h" + +/************************************************** +*函数名称:void IAP_DeInit(void) +*函数功能:IAP相关寄存器复位至缺省值 +*入口参数:void +*出口参数:void +**************************************************/ +void IAP_DeInit(void) +{ + IAPKEY = 0X00; + IAPADL = 0X00; + IAPADH = 0X00; + IAPADE = 0X00; + IAPDAT = 0X00; + IAPCTL = 0X00; +} + +/************************************************** +*函数名称:void IAP_SetHoldTime(IAP_HoldTime_TypeDef IAP_HoldTime) +*函数功能:IAP操作CPU Hold Time配置函数 +*入口参数: +IAP_HoldTime_TypeDef:IAP_HoldTimed:Hold TimeTime选择 +*出口参数:void +**************************************************/ +void IAP_SetHoldTime(IAP_HoldTime_TypeDef + IAP_HoldTime) +{ + IAPCTL = IAPCTL & 0XF3 | IAP_HoldTime; +} + +/************************************************** +*函数名称:void IAP_ProgramByte(uint16_t Address, uint8_t Data, IAP_MemType_TypeDef IAP_MemType, uint8_t WriteTimeLimit) +*函数功能:IAP写入一个字节 +*入口参数: +uint16_t:Address:IAP操作地址 +uint8_t:Data:写入的数据 +IAP_MemType_TypeDef:IAP_MemType:IAP操作对象(ROM、EEPROM) +备注:IAP_MEMTYPE_UID不允许写操作,对UID进行写操作无效 +uint8_t:WriteTimeLimit:IAP操作时限 (非零值) +*出口参数:void +**************************************************/ +void IAP_ProgramByte(uint16_t Address, + uint8_t Data, IAP_MemType_TypeDef IAP_MemType, + uint8_t WriteTimeLimit) +{ + BitStatus tmpbit; + + /* UID操作区域不允许写操作 */ + if(IAP_MemType == IAP_MEMTYPE_UID) + return; + + tmpbit = (BitStatus)EA; + if(tmpbit != RESET) + { + disableInterrupts(); + } + + IAPADE = IAP_MemType; + IAPDAT = Data; + IAPADH = (uint8_t)(Address >> 8); + IAPADL = (uint8_t)Address; + IAPKEY = WriteTimeLimit; +#if defined (SC92F848x) || defined (SC92F748x) || defined (SC92F859x) || defined (SC92F759x) || defined (SC92L853x) || defined (SC92L753x) + IAPCTL |= 0x10; +#endif + IAPCTL |= 0x02; + _nop_(); + _nop_(); + _nop_(); + _nop_(); + _nop_(); + _nop_(); + _nop_(); + _nop_(); + IAPADE = IAP_MEMTYPE_ROM; + + if(tmpbit != RESET) + { + enableInterrupts(); + } +} + +/************************************************** +*函数名称:uint8_t IAP_ReadByte(uint16_t Address, IAP_MemType_TypeDef IAP_MemType) +*函数功能:IAP读一个字节 +*入口参数: +uint16_t:Address:IAP操作地址 +IAP_MemType_TypeDef:FLASH_MemType:IAP操作对象(ROM、UID、EEPROM) +*出口参数:uint8_t 读到的字节数据 +**************************************************/ +uint8_t IAP_ReadByte(uint16_t Address, + IAP_MemType_TypeDef IAP_MemType) +{ + uint8_t tmpbyte; + BitStatus tmpbit; + tmpbit = (BitStatus)EA; + + if(tmpbit != RESET) + { + disableInterrupts(); + } + + IAPADE = IAP_MemType; + tmpbyte = *((uint8_t code*)Address); + IAPADE = IAP_MEMTYPE_ROM; + + if(tmpbit != RESET) + { + enableInterrupts(); + } + + return tmpbyte; +} + +#if defined (SC92F848x) || defined (SC92F748x) || defined (SC92F859x) || defined (SC92F759x) || defined (SC92L853x) || defined (SC92L753x) +/************************************************** +*函数名称:void IAP_SectorErase(IAP_MemType_TypeDef IAP_MemType, uint16_t IAP_SectorEraseAddress) +*函数功能:IAP扇区擦除 +*入口参数: +IAP_MemType_TypeDef:IAP_MemType:IAP操作对象(ROM) +uint32_t:IAP_SectorEraseAddress:IAP扇区擦除目标地址 +uint8_t:WriteTimeLimit:IAP操作时限(值需大于等于0x40) +*出口参数:void +**************************************************/ +void IAP_SectorErase(IAP_MemType_TypeDef IAP_MemType, uint32_t IAP_SectorEraseAddress, + uint8_t WriteTimeLimit) +{ + /* UID操作区域不允许扇区擦除操作 */ + if((IAP_MemType == IAP_MEMTYPE_UID) || (IAP_MemType == IAP_MEMTYPE_EEPROM)) + return; + + IAPADE = IAP_MemType; + IAPADH = (uint8_t)(IAP_SectorEraseAddress >> 8); //擦除IAP目标地址高位值 + IAPADL = (uint8_t)IAP_SectorEraseAddress; //擦除IAP目标地址低位值 + IAPKEY = WriteTimeLimit; + IAPCTL = 0x20; + IAPCTL |= 0x02; + _nop_(); + _nop_(); + _nop_(); + _nop_(); + _nop_(); + _nop_(); + _nop_(); + _nop_(); + IAPADE = IAP_MEMTYPE_ROM; +} + +/************************************************** +*函数名称:void IAP_BootLoaderControl(IAP_BTLDType_TypeDef IAP_BTLDType) +*函数功能:MCU复位后从那个区域启动 +*入口参数: +IAP_BTLDType_TypeDef:IAP_BTLDType:选择启动区域 +*出口参数:void +**************************************************/ +void IAP_BootLoaderControl(IAP_BTLDType_TypeDef IAP_BTLDType) +{ + IAPCTL = (IAPCTL & ~IAP_BTLDType_LDROM) | IAP_BTLDType; +} +#endif +/******************* (C) COPYRIGHT 2020 SinOne Microelectronics *****END OF FILE****/ \ No newline at end of file diff --git a/CFG/SC92F8363B/Keil_Mould/FWLib/SC92F_Lib/src/sc92f_int.c b/CFG/SC92F8363B/Keil_Mould/FWLib/SC92F_Lib/src/sc92f_int.c new file mode 100644 index 0000000..e0e08ae --- /dev/null +++ b/CFG/SC92F8363B/Keil_Mould/FWLib/SC92F_Lib/src/sc92f_int.c @@ -0,0 +1,284 @@ +//************************************************************ +// Copyright (c) 深圳市赛元微电子有限公司 +// 文件名称 : sc92f_int.c +// 作者 : +// 模块功能 : INT固件库函数C文件 +// 局部函数列表: +// 最后更正日期: 2022/01/05 +// 版本 : V1.10003 +// 说明 : +//************************************************************* + +#include "sc92f_int.h" + +/************************************************** +*函数名称:void INT_DeInit(INTx_Typedef INTx) +*函数功能:INTx相关寄存器复位至缺省值 +*入口参数: +INTx_Typedef:INTx:INTx选择 +*出口参数:void +**************************************************/ +#if !defined (SC92F827X) && !defined (SC92F837X) && !defined (SC92F730x) && !defined (SC92F725X) && !defined (SC92F735X) && !defined (SC92F7490) +void INT_DeInit(INTx_Typedef INTx) +{ + switch(INTx) + { + case INT0: + INT0R = 0x00; + INT0F = 0x00; + IE &= (~0X01); + IP &= ~0X01; + TCON &= (~0X02); + break; + + case INT1: + INT1R = 0x00; + INT1F = 0x00; + IE &= (~0X04); + IP &= ~0X04; + TCON &= (~0X08); + break; + + case INT2: + INT2R = 0x00; + INT2F = 0x00; + IE1 &= (~0X08); + IP1 &= ~0X08; + break; + + default: + break; + } +} +#else +void INT_DeInit(INTx_Typedef INTx) +{ + switch(INTx) + { + case INT0: + INT0R = 0x00; + INT0F = 0x00; + IE &= (~0X01); + IP &= ~0X01; + TCON &= (~0X02); + break; + + case INT2: + INT2R = 0x00; + INT2F = 0x00; + IE1 &= (~0X08); + IP1 &= ~0X08; + break; + + default: + break; + } +} +#endif + +/************************************************** +*函数名称:void INT0_SetTriggerMode(uint8_t INT0x, INT_TriggerMode_Typedef TriggerMode) +*函数功能:INT0x中断触发方式配置函数 +*入口参数: +INT0x_Typedef:INT0x:INT0x选择 +INT_TriggerMode_Typedef:TriggerMode:中断触发方式选择 +*出口参数:void +**************************************************/ +void INT0_SetTriggerMode(uint8_t INT0x, + INT_TriggerMode_Typedef TriggerMode) +{ + switch(TriggerMode) + { + case INT_TRIGGER_RISE_ONLY: + INT0R |= INT0x; + INT0F &= (~INT0x); + break; + + case INT_TRIGGER_FALL_ONLY: + INT0R &= (~INT0x); + INT0F |= INT0x; + break; + + case INT_TRIGGER_RISE_FALL: + INT0R |= INT0x; + INT0F |= INT0x; + break; + + case INT_TRIGGER_DISABLE: + INT0R &= (~INT0x); + INT0F &= (~INT0x); + + default: + break; + } +} + + +/************************************************** +*函数名称:void INT1_SetTriggerMode(uint8_t INT1x, INT_TriggerMode_Typedef TriggerMode) +*函数功能:INT1x中断触发方式配置函数 +*入口参数: +INT1x_Typedef:INT1x:INT1x选择 +INT_TriggerMode_Typedef:TriggerMode:中断触发方式选择 +*出口参数:void +**************************************************/ +#if !defined (SC92F827X) && !defined (SC92F837X) && !defined (SC92F730x) && !defined (SC92F725X) && !defined (SC92F735X) && !defined (SC92F7490) +void INT1_SetTriggerMode(uint8_t INT1x, + INT_TriggerMode_Typedef TriggerMode) +{ + switch(TriggerMode) + { + case INT_TRIGGER_RISE_ONLY: + INT1R |= INT1x; + INT1F &= (~INT1x); + break; + + case INT_TRIGGER_FALL_ONLY: + INT1R &= (~INT1x); + INT1F |= INT1x; + break; + + case INT_TRIGGER_RISE_FALL: + INT1R |= INT1x; + INT1F |= INT1x; + break; + + case INT_TRIGGER_DISABLE: + INT1R &= (~INT1x); + INT1F &= (~INT1x); + + default: + break; + } +} +#endif + +/************************************************** +*函数名称:void INT2_SetTriggerMode(uint8_t INT2x, INT_TriggerMode_Typedef TriggerMode) +*函数功能:INT2x中断触发方式配置函数 +*入口参数: +INT2x_Typedef:INT2x:INT2x选择 +INT_TriggerMode_Typedef:TriggerMode:中断触发方式选择 +*出口参数:void +**************************************************/ +void INT2_SetTriggerMode(uint8_t INT2x, + INT_TriggerMode_Typedef TriggerMode) +{ + switch(TriggerMode) + { + case INT_TRIGGER_RISE_ONLY: + INT2R |= INT2x; + INT2F &= (~INT2x); + break; + + case INT_TRIGGER_FALL_ONLY: + INT2R &= (~INT2x); + INT2F |= INT2x; + break; + + case INT_TRIGGER_RISE_FALL: + INT2R |= INT2x; + INT2F |= INT2x; + break; + + case INT_TRIGGER_DISABLE: + INT2R &= (~INT2x); + INT2F &= (~INT2x); + + default: + break; + } +} + +/***************************************************** +*函数名称:void INT0_ITConfig(FunctionalState NewState, PriorityStatus Priority) +*函数功能:INT0中断初始化 +*入口参数: +FunctionalState:NewState:中断使能/关闭选择 +PriorityStatus:Priority:中断优先级选择 +*出口参数:void +*****************************************************/ +void INT0_ITConfig(FunctionalState NewState, + PriorityStatus Priority) +{ + if(NewState != DISABLE) + { + IE |= 0X01; + } + else + { + IE &= (~0X01); + } + + if(Priority == LOW) + { + IP &= ~0X01; + } + else + { + IP |= 0X01; + } +} + +/***************************************************** +*函数名称:void INT1_ITConfig(FunctionalState NewState, PriorityStatus Priority) +*函数功能:INT1中断初始化 +*入口参数: +FunctionalState:NewState:中断使能/关闭选择 +PriorityStatus:Priority:中断优先级选择 +*出口参数:void +*****************************************************/ +void INT1_ITConfig(FunctionalState NewState, + PriorityStatus Priority) +{ + if(NewState != DISABLE) + { + IE |= 0X04; + } + else + { + IE &= (~0X04); + } + + if(Priority == LOW) + { + IP &= ~0X04; + } + else + { + IP |= 0X04; + } +} + +/***************************************************** +*函数名称:void INT2_ITConfig(FunctionalState NewState, PriorityStatus Priority) +*函数功能:INT0中断初始化 +*入口参数: +FunctionalState:NewState:中断使能/关闭选择 +PriorityStatus:Priority:中断优先级选择 +*出口参数:void +*****************************************************/ +void INT2_ITConfig(FunctionalState NewState, + PriorityStatus Priority) +{ + if(NewState != DISABLE) + { + IE1 |= 0X08; + } + else + { + IE1 &= (~0X08); + } + + if(Priority == LOW) + { + IP1 &= ~0X08; + } + else + { + IP1 |= 0X08; + } +} + +/******************* (C) COPYRIGHT 2021 SinOne Microelectronics *****END OF FILE****/ + diff --git a/CFG/SC92F8363B/Keil_Mould/FWLib/SC92F_Lib/src/sc92f_lpd.c b/CFG/SC92F8363B/Keil_Mould/FWLib/SC92F_Lib/src/sc92f_lpd.c new file mode 100644 index 0000000..c562f5c --- /dev/null +++ b/CFG/SC92F8363B/Keil_Mould/FWLib/SC92F_Lib/src/sc92f_lpd.c @@ -0,0 +1,94 @@ +//************************************************************ +// Copyright (c) 深圳市赛元微电子有限公司 +// 文件名称: sc92F_LPD.c +// 作者: 赛元应用团队 +// 模块功能: LPD固件库函数C文件 +// 最后更正日期: 2022年3月23日 +// 版本: V1.100002 +// 说明: 该文件仅适用于SC92L系列芯片 +//************************************************************* + +#include "sc92f_lpd.h" + +#if defined (SC92L853x) || defined (SC92L753x) + +/************************************************** +*函数名称:void USCI1_DeInit(void) +*函数功能:USCI1相关寄存器复位至缺省值 +*入口参数:void +*出口参数:void +**************************************************/ +void LPD_DeInit(void) +{ + /* 配置相关寄存器复位 */ + LPDCFG = 0x00; + /* 中断相关寄存器复位 */ + IE2 &= 0x7F; + IP2 &= 0x7F; +} + +/************************************************** +*函数名称:void LPD_VtripConfig(LPD_Vtrip_TypeDef LPD_Vtrip) +*函数功能:设置LPD门限电压阈值 +*入口参数: +LPD_Vtrip_TypeDef:LPD_Vtrip:LPD门限电压阈值 +*出口参数:void +**************************************************/ +void LPD_VtripConfig(LPD_Vtrip_TypeDef LPD_Vtrip) +{ + LPDCFG &= 0xF1; //复位门限电压阈值寄存器 + LPDCFG = LPD_Vtrip << 1; //设置门限电压阈值寄存器 +} + +/************************************************** +*函数名称:void LPD_Cmd(FunctionalState NewState) +*函数功能:使能LPD功能 +*入口参数: +FunctionalState:NewState:功能使能/失能 +*出口参数:void +**************************************************/ +void LPD_Cmd(FunctionalState NewState) +{ + if(NewState == ENABLE) + { + LPDCFG &= 0xFE; + } + else + { + LPDCFG |= 0x01; + } +} + +/***************************************************** +*函数名称:void LPD_ITConfig(FunctionalState NewState, PriorityStatus Priority) +*函数功能:LPD中断初始化 +*入口参数: +FunctionalState:NewState:中断使能/关闭选择 +PriorityStatus:Priority:中断优先级选择 +*出口参数:void +*****************************************************/ +void LPD_ITConfig(FunctionalState NewState, PriorityStatus Priority) +{ + /* 中断开关 */ + if (NewState != DISABLE) + { + IE2 |= 0x01; + } + else + { + IE2 &= 0xFE; + } + + /* 中断优先级 */ + if (Priority != LOW) + { + IP2 |= 0x01; + } + else + { + IP2 &= 0xFE; + } +} + + +#endif \ No newline at end of file diff --git a/CFG/SC92F8363B/Keil_Mould/FWLib/SC92F_Lib/src/sc92f_mdu.c b/CFG/SC92F8363B/Keil_Mould/FWLib/SC92F_Lib/src/sc92f_mdu.c new file mode 100644 index 0000000..0301ee8 --- /dev/null +++ b/CFG/SC92F8363B/Keil_Mould/FWLib/SC92F_Lib/src/sc92f_mdu.c @@ -0,0 +1,132 @@ +//************************************************************ +// Copyright (c) 深圳市赛元微电子有限公司 +// 文件名称 : sc92f_mdu.c +// 作者 : +// 模块功能 : MDU固件库函数C文件 +// 局部函数列表: +// 最后更正日期: 2022/01/24 +// 版本 : V1.10001 +// 说明 : +//************************************************************* + +#include "sc92f_mdu.h" + +#if defined (SC92F854x) || defined (SC92F754x) || defined (SC92F844xB) || defined (SC92F744xB) || defined (SC92F84Ax_2) || defined (SC92F74Ax_2)\ + || defined (SC92F846xB) || defined (SC92F746xB) || defined (SC92F836xB) || defined (SC92F736xB) || defined (SC92F848x) || defined (SC92F748x)\ + || defined (SC92F859x) || defined (SC92F759x) || defined (SC92L853x) || defined (SC92L753x) +/************************************************** +*函数名称:void MDU_DeInit(void) +*函数功能:MDU相关寄存器复位至缺省值 +*入口参数:void +*出口参数:void +**************************************************/ +void MDU_DeInit(void) +{ + OPERCON &= 0X3F; + EXA0 = 0X00; + EXA1 = 0X00; + EXA2 = 0X00; + EXA3 = 0X00; + EXBL = 0X00; + EXBH = 0X00; +} + +/************************************************** +*函数名称:void MDU_MultiplicationConfig(uint16_t Multiplicand, uint16_t Multiplier) +*函数功能:MDU乘法运算配置函数 +*入口参数: +uint32_t:Multiplicand:被乘数 +uint32_t:Multiplier:乘数 +*出口参数:void +**************************************************/ +void MDU_MultiplicationConfig(uint16_t + Multiplicand, uint16_t Multiplier) +{ + OPERCON &= 0XBF; + EXBL = Multiplier ; + EXBH = Multiplier >> 8; + EXA0 = Multiplicand ; + EXA1 = Multiplicand >> 8; +} + +/************************************************** +*函数名称:void MDU_DivisionConfig(uint32_t Dividend, uint16_t Divisor) +*函数功能:MDU除法运算配置函数 +*入口参数: +uint32_t:Dividend:被除数 +uint32_t:Divisor:除数 +*出口参数:void +**************************************************/ +void MDU_DivisionConfig(uint32_t Dividend, + uint16_t Divisor) +{ + MDU_Temp_Union MDU_DivisionTemp; + MDU_DivisionTemp.MDU_Temp = Dividend; + OPERCON |= 0X40; + EXA0 = MDU_DivisionTemp.MDU_EXAxReg.MDU_EXA0Reg; + EXA1 = MDU_DivisionTemp.MDU_EXAxReg.MDU_EXA1Reg; + EXA2 = MDU_DivisionTemp.MDU_EXAxReg.MDU_EXA2Reg; + EXA3 = MDU_DivisionTemp.MDU_EXAxReg.MDU_EXA3Reg; + EXBL = Divisor; + EXBH = Divisor >> 8; +} + +/************************************************** +*函数名称:void MDU_StartOperation(void) +*函数功能:MDU启动一次运算 +*入口参数:void +*出口参数:void +**************************************************/ +void MDU_StartOperation(void) +{ + OPERCON |= 0x80; + + while(OPERCON & 0x80); +} + +/************************************************** +*函数名称:uint32_t MDU_GetProduct(void) +*函数功能:获取乘积 +*入口参数:void +*出口参数:uint32_t:乘积 +**************************************************/ +uint32_t MDU_GetProduct(void) +{ + MDU_Temp_Union MDU_ProductTemp; + MDU_ProductTemp.MDU_EXAxReg.MDU_EXA0Reg = EXA0; + MDU_ProductTemp.MDU_EXAxReg.MDU_EXA1Reg = EXA1; + MDU_ProductTemp.MDU_EXAxReg.MDU_EXA2Reg = EXA2; + MDU_ProductTemp.MDU_EXAxReg.MDU_EXA3Reg = EXA3; + return MDU_ProductTemp.MDU_Temp; +} + +/************************************************** +*函数名称:uint32_t MDU_GetQuotient(void) +*函数功能:获取商 +*入口参数:void +*出口参数:uint32_t:商 +**************************************************/ +uint32_t MDU_GetQuotient(void) +{ + MDU_Temp_Union MDU_QuotientTemp; + MDU_QuotientTemp.MDU_EXAxReg.MDU_EXA0Reg = EXA0; + MDU_QuotientTemp.MDU_EXAxReg.MDU_EXA1Reg = EXA1; + MDU_QuotientTemp.MDU_EXAxReg.MDU_EXA2Reg = EXA2; + MDU_QuotientTemp.MDU_EXAxReg.MDU_EXA3Reg = EXA3; + return MDU_QuotientTemp.MDU_Temp; +} + +/************************************************** +*函数名称:uint16_t MDU_GetRemainder(void) +*函数功能:获取余数 +*入口参数:void +*出口参数:uint16_t:余数 +**************************************************/ +uint16_t MDU_GetRemainder(void) +{ + uint16_t MDU_RemainderTemp; + MDU_RemainderTemp = EXBH * 256 + EXBL; + return MDU_RemainderTemp; +} +#endif +/******************* (C) COPYRIGHT 2020 SinOne Microelectronics *****END OF FILE****/ \ No newline at end of file diff --git a/CFG/SC92F8363B/Keil_Mould/FWLib/SC92F_Lib/src/sc92f_option.c b/CFG/SC92F8363B/Keil_Mould/FWLib/SC92F_Lib/src/sc92f_option.c new file mode 100644 index 0000000..f93b338 --- /dev/null +++ b/CFG/SC92F8363B/Keil_Mould/FWLib/SC92F_Lib/src/sc92f_option.c @@ -0,0 +1,178 @@ +//************************************************************ +// Copyright (c) 深圳市赛元微电子有限公司 +// 文件名称 : sc92f_option.c +// 作者 : +// 模块功能 : Customer Option寄存器配置C文件 +// 局部函数列表: +// 最后更正日期: 2022/01/24 +// 版本 : V1.0005 +// 说明 : +//************************************************************* + +#include "sc92f_option.h" + +/***************************************************** +*函数名称:void OPTION_WDT_Cmd(FunctionalState NewState) +*函数功能:WDT功能开关函数 +*入口参数: +FunctionalState:NewState:功能启动/关闭选择 +*出口参数:void +*****************************************************/ +void OPTION_WDT_Cmd(FunctionalState NewState) +{ + OPINX = 0XC1; + + if(NewState == DISABLE) + { + OPREG &= 0X7F; + } + else + { + OPREG |= 0X80; + } +} + +/***************************************************** +*函数名称:void OPTION_XTIPLL_Cmd(FunctionalState NewState) +*函数功能:外接晶振使能 +*入口参数: +FunctionalState:NewState:启动/关闭选择 +*出口参数:void +*****************************************************/ +#if !defined(SC92F848x) && !defined(SC92F748x) +void OPTION_XTIPLL_Cmd(FunctionalState NewState) +{ + OPINX = 0XC1; + + if(NewState == DISABLE) + { + OPREG &= 0XBF; + } + else + { + OPREG |= 0X40; + } +} +#endif +/***************************************************** +*函数名称:void OPTION_SYSCLK_Init(SYSCLK_PresSel_TypeDef SYSCLK_PresSel) +*函数功能:系统时钟分频初始化 +*入口参数: +SYSCLK_PresSel_TypeDef:SYSCLK_PresSel:选择系统时钟分频 +*出口参数:void +*****************************************************/ +void OPTION_SYSCLK_Init(SYSCLK_PresSel_TypeDef + SYSCLK_PresSel) +{ + OPINX = 0XC1; + OPREG = OPREG & 0XCF | SYSCLK_PresSel; +} + +/***************************************************** +*函数名称:void OPTION_RST_PIN_Cmd(FunctionalState NewState) +*函数功能:外部复位管脚(P17)使能 +*入口参数: +FunctionalState:NewState:使能/关闭选择 +*出口参数:void +*****************************************************/ +#if !defined(SC92F848x) && !defined(SC92F748x) && !defined(SC92F859x) && !defined (SC92F759x) && !defined(SC92L853x) && !defined (SC92L753x) +void OPTION_RST_PIN_Cmd(FunctionalState NewState) +{ + OPINX = 0XC1; + + if(NewState == DISABLE) + { + OPREG |= 0X08; + } + else + { + OPREG &= 0XF7; + } +} +#endif + +/***************************************************** +*函数名称:void OPTION_LVR_Init(LVR_Config_TypeDef LVR_Config) +*函数功能:LVR 电压选择 +*入口参数: +LVR_Config_TypeDef:LVR_Config:选择LVR电压 +*出口参数:void +*****************************************************/ +void OPTION_LVR_Init(LVR_Config_TypeDef + LVR_Config) +{ + OPINX = 0XC1; + OPREG = OPREG & 0XF8 | LVR_Config; +} + +/***************************************************** +*函数名称:void OPTION_ADC_VrefConfig(ADC_Vref_TypeDef ADC_Vref) +*函数功能:ADC 参考电压选择 +*入口参数: +ADC_Vref_TypeDef:ADC_Vref:选择ADC参考电压 +*出口参数:void +*****************************************************/ +void OPTION_ADC_VrefConfig(ADC_Vref_TypeDef + ADC_Vref) +{ + OPINX = 0xC2; + OPREG = OPREG & 0X7F | ADC_Vref; +} + +/************************************************** +*函数名称:void OPTION_IAP_SetOperateRange(IAP_OperateRange_TypeDef IAP_OperateRange) +*函数功能:允许IAP操作的范围设置 +*入口参数: +IAP_OperateRange_TypeDef:IAP_OperateRange:IAP操作范围 +*出口参数:void +**************************************************/ +void OPTION_IAP_SetOperateRange( + IAP_OperateRange_TypeDef IAP_OperateRange) +{ + OPINX = 0xC2; + OPREG = (OPREG & 0xF3) | IAP_OperateRange; +} + +#if defined (SC92F846xB) || defined (SC92F746xB) || defined (SC92F836xB) || defined (SC92F736xB)|| defined (SC92F83Ax)\ + || defined (SC92F73Ax) || defined (SC92F84Ax) || defined (SC92F74Ax) || defined (SC92F740x)\ + || defined (SC92F8003) || defined (SC92F7003) +/***************************************************** +*函数名称:void OPTION_XTIPLL_SetRange(XTIPLL_Range_TypeDef XTIPLL_Range) +*函数功能:外部高频晶振频率范围 +*入口参数: +XTIPLL_Range_TypeDef:XTIPLL_Range:外部晶振频率选择 +*出口参数:void +*****************************************************/ +void OPTION_XTIPLL_SetRange(XTIPLL_Range_TypeDef + XTIPLL_Range) +{ + OPINX = 0XC2; + OPREG = OPREG & 0XBF | XTIPLL_Range; +} +#endif + +#if defined (SC92F742x)||defined (SC92F83Ax) || defined (SC92F73Ax)|| defined (SC92F84Ax) || defined (SC92F74Ax) \ + ||defined (SC92F74Ax_2)||defined (SC92F84Ax_2)||defined (SC92F844xB)||defined (SC92F744xB) \ + ||defined (SC92F859x) || defined (SC92F759x) ||defined (SC92F848x) || defined (SC92F748x) || defined (SC92L853x) || defined (SC92L753x) +/************************************************** +*函数名称:void OPTION_JTG_Cmd(FunctionalState NewState) +*函数功能:JTAG模式使能开关 +*入口参数: +FunctionalState:NewState:功能启动/关闭选择 +*出口参数:void +**************************************************/ +void OPTION_JTG_Cmd(FunctionalState NewState) +{ + OPINX = 0xC2; + + if(NewState == DISABLE) + { + OPREG |= 0X10; //1 JTAG无效 + } + else + { + OPREG &= 0XEF; //0 JTAG有效 + } +} +#endif +/******************* (C) COPYRIGHT 2020 SinOne Microelectronics *****END OF FILE****/ \ No newline at end of file diff --git a/CFG/SC92F8363B/Keil_Mould/FWLib/SC92F_Lib/src/sc92f_pwm.c b/CFG/SC92F8363B/Keil_Mould/FWLib/SC92F_Lib/src/sc92f_pwm.c new file mode 100644 index 0000000..8d2e174 --- /dev/null +++ b/CFG/SC92F8363B/Keil_Mould/FWLib/SC92F_Lib/src/sc92f_pwm.c @@ -0,0 +1,2086 @@ +//************************************************************ +// Copyright (c) 深圳市赛元微电子有限公司 +// 文件名称 : sc92f_pwm.c +// 作者 : +// 模块功能 : PWM固件库函数C文件 +// 局部函数列表: +// 最后更正日期: 2022年6月2日 +// 版本 : V1.10004 +// 说明 :本文件仅适用于赛元92F/93F/92L系列单片机 +//************************************************************* + +#include "sc92f_pwm.h" + +#if defined (SC92F854x) || defined (SC92F754x) ||defined (SC92F844xB) || defined (SC92F744xB)||defined (SC92F84Ax_2) || defined (SC92F74Ax_2)\ +||defined (SC92F859x) || defined (SC92F759x) +uint16_t xdata PWMREG[8] _at_ +0x740; //PWM占空比调节寄存器 +uint16_t pwm_tmpreg[8] = {0, 0, 0, 0, 0, 0, 0, 0}; //PWM占空比调节寄存器缓存数组 + +/************************************************** +*函数名称:void PWM_DeInit(void) +*函数功能:PWM相关寄存器复位至缺省值 +*入口参数:void +*出口参数:void +**************************************************/ +void PWM_DeInit(void) +{ + static uint8_t i; + PWMCFG = 0X00; + PWMCON = 0X00; + IE1 &= 0XFD; + IP1 &= 0XFD; + + for(i = 0; i < 8; i++) + { + PWMREG[i] = 0; + } +} + +/************************************************** +*函数名称:void PWM_Init(PWM_PresSel_TypeDef PWM_PresSel, uint16_t PWM_Period) +*函数功能:PWM初始化配置函数 +*入口参数: +PWM_PresSel_TypeDef:PWM_PresSel:预分频选择 +uint16_t:PWM_Period:PWM周期配置 +*出口参数:void +**************************************************/ +void PWM_Init(PWM_PresSel_TypeDef PWM_PresSel, + uint16_t PWM_Period) +{ + PWM_Period -= 1; + PWMCFG = (PWMCFG & 0XCF) | + PWM_PresSel; //预分频 + PWMCFG = (PWMCFG & 0XF0) | (uint8_t)( + PWM_Period / 256); //周期高4位 + PWMCON = (uint8_t)(PWM_Period & + 0X00FF); //周期低8位 +} + +/************************************************** +*函数名称:void PWM_OutputStateConfig(uint8_t PWM_OutputPin, PWM_OutputState_TypeDef PWM_OutputState) +*函数功能:PWMx输出使能/失能配置函数 +*入口参数: +uint8_t:PWM_OutputPin:PWMx选择 +PWM_OutputState_TypeDef:PWM_OutputState:PWM输出状态配置 +*出口参数:void +**************************************************/ +void PWM_OutputStateConfig(uint8_t PWM_OutputPin, + PWM_OutputState_TypeDef PWM_OutputState) +{ + uint8_t i; + + for(i = 0; i < 8; i++) + { + if(PWM_OutputPin & (0x01 << i)) + { + if(PWM_OutputState == PWM_OUTPUTSTATE_DISABLE) + { + pwm_tmpreg[i] &= 0X7FFF; + } + else + { + pwm_tmpreg[i] |= 0X8000; + } + + PWMREG[i] = pwm_tmpreg[i]; + } + } +} + + +/************************************************** +*函数名称:void PWM_PolarityConfig(uint8_t PWM_OutputPin, PWM_Polarity_TypeDef PWM_Polarity) +*函数功能:PWMx正/反向输出配置函数 +*入口参数: +uint8_t:PWM_OutputPin:PWMx选择 +PWM_Polarity_TypeDef:PWM_Polarity:PWM输出正/反向配置 +*出口参数:void +**************************************************/ +void PWM_PolarityConfig(uint8_t PWM_OutputPin, + PWM_Polarity_TypeDef PWM_Polarity) +{ + uint8_t i; + + for(i = 0; i < 8; i++) + { + if(PWM_OutputPin & (0x01 << i)) + { + if(PWM_Polarity == PWM_POLARITY_NON_INVERT) + { + pwm_tmpreg[i] &= 0XBFFF; + } + else + { + pwm_tmpreg[i] |= 0X4000; + } + + PWMREG[i] = pwm_tmpreg[i]; + } + } +} +/************************************************** +*函数名称:void PWM_IndependentModeConfig(PWM_OutputPin_TypeDef PWM_OutputPin, uint16_t PWM_DutyCycle) +*函数功能:PWMx独立工作模式配置函数 +*入口参数: +PWM_OutputPin_TypeDef:PWM_OutputPin:PWMx独立通道选择 +uint16_t:PWM_DutyCycle:PWM占空比配置 +*出口参数:void +**************************************************/ +void PWM_IndependentModeConfig(PWM_OutputPin_TypeDef PWM_OutputPin, + uint16_t PWM_DutyCycle) +{ + uint8_t i; + + for(i = 0; i < 8; i++) + { + if(PWM_OutputPin & (0x01 << i)) + { + pwm_tmpreg[i] = pwm_tmpreg[i] & 0XF000 | + PWM_DutyCycle; + PWMREG[i] = pwm_tmpreg[i]; + } + } +} + +/***************************************************** +*函数名称:void PWM_Cmd(FunctionalState NewState) +*函数功能:PWM功能开关函数 +*入口参数: +FunctionalState:NewState:功能启动/关闭选择 +*出口参数:void +*****************************************************/ +void PWM_Cmd(FunctionalState NewState) +{ + if (NewState != DISABLE) + { + PWMCFG |= 0X80; + } + else + { + PWMCFG &= 0X7F; + } +} + +/***************************************************** +*函数名称:void PWM_ITConfig(FunctionalState NewState, PriorityStatus Priority) +*函数功能:PWM中断初始化 +*入口参数: +FunctionalState:NewState:中断使能/关闭选择 +PriorityStatus:Priority:中断优先级选择 +*出口参数:void +*****************************************************/ +void PWM_ITConfig(FunctionalState NewState, + PriorityStatus Priority) +{ + if (NewState != DISABLE) + { + IE1 |= 0X02; + } + else + { + IE1 &= 0XFD; + } + + if(Priority == LOW) + { + IP1 &= ~0X02; + } + else + { + IP1 |= 0X02; + } +} + +/***************************************************** +*函数名称:FlagStatus PWM_GetFlagStatus(void) +*函数功能:获得PWM中断标志状态 +*入口参数:void +*出口参数: +FlagStatus:PWM中断标志状态 +*****************************************************/ +FlagStatus PWM_GetFlagStatus(void) +{ + return (bool)(PWMCFG & 0X40); +} + +/***************************************************** +*函数名称:void PWM_ClearFlag(void) +*函数功能:清除PWM中断标志状态 +*入口参数:void +*出口参数:void +*****************************************************/ +void PWM_ClearFlag(void) +{ + PWMCFG &= 0XBF; +} +#endif + +#if defined (SC92F846xB) || defined (SC92F746xB) || defined (SC92F836xB) || defined (SC92F736xB)|| defined (SC92F83Ax) || defined (SC92F73Ax)|| defined (SC92F84Ax) || defined (SC92F74Ax) || defined (SC92F848x) || defined (SC92F748x) +/************************************************** +*函数名称:void PWM_DeInit(void) +*函数功能:PWM相关寄存器复位至缺省值 +*入口参数:void +*出口参数:void +**************************************************/ +void PWM_DeInit(void) +{ + PWMCFG = 0X00; + PWMCON = 0X00; + PWMPRD = 0X00; + PWMDTYA = 0X00; + PWMDTY0 = 0X00; + PWMDTY1 = 0X00; + PWMDTY2 = 0X00; + PWMDTYB = 0X00; + PWMDTY3 = 0X00; + PWMDTY4 = 0X00; + PWMDTY5 = 0X00; + IE1 &= ~0X02; + IP1 &= ~0X02; +} + +/************************************************** +*函数名称:void PWM_Init(PWM_PresSel_TypeDef PWM_PresSel, uint16_t PWM_Period) +*函数功能:PWM初始化配置函数 +*入口参数: +PWM_PresSel_TypeDef:PWM_PresSel:预分频选择 +uint16_t:PWM_Period:PWM周期配置 +*出口参数:void +**************************************************/ +void PWM_Init(PWM_PresSel_TypeDef PWM_PresSel, + uint16_t PWM_Period) +{ + PWM_Period -= 1; + PWMCFG = (PWMCFG & 0X3F) | (PWM_PresSel << 6); //预分频 + PWMDTYA = (PWMDTYA & 0X3F) | ((uint8_t)( PWM_Period % 4) << 6); //周期低两位 + PWMPRD = (uint8_t)(PWM_Period >> 2); //周期高八位 +} + +/************************************************** +*函数名称:void PWM_OutputStateConfig(uint8_t PWM_OutputPin, PWM_OutputState_TypeDef PWM_OutputState) +*函数功能:PWMx输出使能/失能配置函数 +*入口参数: +PWM_OutputPin_TypeDef:PWM_OutputPin:PWMx选择 +PWM_OutputState_TypeDef:PWM_OutputState:PWM输出状态配置 +*出口参数:void +**************************************************/ +void PWM_OutputStateConfig(uint8_t PWM_OutputPin, + PWM_OutputState_TypeDef PWM_OutputState) +{ + if(PWM_OutputState == PWM_OUTPUTSTATE_ENABLE) + { + PWMCON |= PWM_OutputPin; + } + else + { + PWMCON &= (~PWM_OutputPin); + } +} + +/************************************************** +*函数名称:void PWM_PolarityConfig(uint8_t PWM_OutputPin, PWM_Polarity_TypeDef PWM_Polarity) +*函数功能:PWMx正/反向输出配置函数 +*入口参数: +PWM_OutputPin_TypeDef:PWM_OutputPin:PWMx选择 +PWM_Polarity_TypeDef:PWM_Polarity:PWM输出正/反向配置 +*出口参数:void +**************************************************/ +void PWM_PolarityConfig(uint8_t PWM_OutputPin, + PWM_Polarity_TypeDef PWM_Polarity) +{ + if(PWM_Polarity == PWM_POLARITY_INVERT) + { + PWMCFG |= PWM_OutputPin; + } + else + { + PWMCFG &= (~PWM_OutputPin); + } +} + +/************************************************** +*函数名称:void PWM_IndependentModeConfig(PWM_OutputPin_TypeDef PWM_OutputPin, uint16_t PWM_DutyCycle) +*函数功能:PWMx独立工作模式配置函数 +*入口参数: +PWM_OutputPin_TypeDef:PWM_OutputPin:PWMx独立通道选择 +uint16_t:PWM_DutyCycle:PWM占空比配置 +*出口参数:void +**************************************************/ +void PWM_IndependentModeConfig(PWM_OutputPin_TypeDef PWM_OutputPin, + uint16_t PWM_DutyCycle) +{ + PWMDTYB &= 0X7F; //设置PWM为独立模式 + + switch(PWM_OutputPin) //设置占空比 + { + case PWM0: + PWMDTYA = PWMDTYA & 0xfc | (PWM_DutyCycle % 4); + PWMDTY0 = (uint8_t)(PWM_DutyCycle >> 2); + break; + + case PWM1: + PWMDTYA = PWMDTYA & 0xf3 | ((PWM_DutyCycle % 4) << + 2); + PWMDTY1 = (uint8_t)(PWM_DutyCycle >> 2); + break; + + case PWM2: + PWMDTYA = PWMDTYA & 0xcf | ((PWM_DutyCycle % 4) << + 4); + PWMDTY2 = (uint8_t)(PWM_DutyCycle >> 2); + break; + + case PWM3: + PWMDTYB = PWMDTYB & 0xfc | (PWM_DutyCycle % 4); + PWMDTY3 = (uint8_t)(PWM_DutyCycle >> 2); + break; + + case PWM4: + PWMDTYB = PWMDTYB & 0xf3 | ((PWM_DutyCycle % 4) << + 2); + PWMDTY4 = (uint8_t)(PWM_DutyCycle >> 2); + break; + + case PWM5: + PWMDTYB = PWMDTYB & 0xcf | ((PWM_DutyCycle % 4) << + 4); + PWMDTY5 = (uint8_t)(PWM_DutyCycle >> 2); + break; + + default: + break; + } +} + +/************************************************** +*函数名称:void PWM_ComplementaryModeConfig(PWM_ComplementaryOutputPin_TypeDef PWM_ComplementaryOutputPin, uint16_t PWM_DutyCycle) +*函数功能:PWMxPWMy互补工作模式配置函数 +*入口参数: +PWM_ComplementaryOutputPin_TypeDef:PWM_ComplementaryOutputPin:PWMxPWMy互补通道选择 +uint16_t:PWM_DutyCycle:PWM占空比配置 +*出口参数:void +**************************************************/ +void PWM_ComplementaryModeConfig(PWM_ComplementaryOutputPin_TypeDef PWM_ComplementaryOutputPin, + uint16_t PWM_DutyCycle) +{ + PWMDTYB |= 0X80; //设置PWM为互补模式 + + switch(PWM_ComplementaryOutputPin) //设置占空比 + { + case PWM0PWM3: + PWMDTYA = PWMDTYA & 0xfc | (PWM_DutyCycle % 4); + PWMDTY0 = (uint8_t)(PWM_DutyCycle >> 2); + break; + + case PWM1PWM4: + PWMDTYA = PWMDTYA & 0xf3 | ((PWM_DutyCycle % 4) << + 2); + PWMDTY1 = (uint8_t)(PWM_DutyCycle >> 2); + break; + + case PWM2PWM5: + PWMDTYA = PWMDTYA & 0xcf | ((PWM_DutyCycle % 4) << + 4); + PWMDTY2 = (uint8_t)(PWM_DutyCycle >> 2); + break; + + default: + break; + } +} + +/************************************************** +*函数名称:void PWM_DeadTimeConfig(uint8_t PWM012_RisingDeadTime, uint8_t PWM345_fallingDeadTime) +*函数功能:PWM互补工作模式下死区时间配置函数 +*入口参数: +uint8_t:PWM012_RisingDeadTime:PWM死区上升时间 +uint8_t:PWM345_fallingDeadTime:PWM死区下降时间 +*出口参数:void +**************************************************/ +void PWM_DeadTimeConfig(uint8_t PWM012_RisingDeadTime, + uint8_t PWM345_fallingDeadTime) +{ + PWMDTY3 = (PWM012_RisingDeadTime | + (PWM345_fallingDeadTime << 4)); +} + +/***************************************************** +*函数名称:void PWM_Cmd(FunctionalState NewState) +*函数功能:PWM功能开关函数 +*入口参数: +FunctionalState:NewState:功能启动/关闭选择 +*出口参数:void +*****************************************************/ +void PWM_Cmd(FunctionalState NewState) +{ + if (NewState != DISABLE) + { + PWMCON |= 0X80; + } + else + { + PWMCON &= ~0X80; + } +} + +/***************************************************** +*函数名称:void PWM_ITConfig(FunctionalState NewState, PriorityStatus Priority) +*函数功能:PWM中断初始化 +*入口参数: +FunctionalState:NewState:中断使能/关闭选择 +PriorityStatus:Priority:中断优先级选择 +*出口参数:void +*****************************************************/ +void PWM_ITConfig(FunctionalState NewState, + PriorityStatus Priority) +{ + if (NewState != DISABLE) + { + IE1 |= 0X02; + } + else + { + IE1 &= 0XFD; + } + + if(Priority == LOW) + { + IP1 &= 0XFD; + } + else + { + IP1 |= 0X02; + } +} + +/***************************************************** +*函数名称:FlagStatus PWM_GetFlagStatus(void) +*函数功能:获得PWM中断标志状态 +*入口参数:void +*出口参数: +FlagStatus:PWM中断标志状态 +*****************************************************/ +FlagStatus PWM_GetFlagStatus(void) +{ + return (bool)(PWMCON & 0X40); +} + +/***************************************************** +*函数名称:void PWM_ClearFlag(void) +*函数功能:清除PWM中断标志状态 +*入口参数:void +*出口参数:void +*****************************************************/ +void PWM_ClearFlag(void) +{ + PWMCON &= 0XBF; +} +#endif + +#if defined (SC92F7003) || defined (SC92F8003) || defined (SC92F740x) +/************************************************** +*函数名称:void PWM_DeInit(void) +*函数功能:PWM相关寄存器复位至缺省值 +*入口参数:void +*出口参数:void +**************************************************/ +void PWM_DeInit(void) +{ + PWMCFG = 0X00; + PWMCON0 = 0X00; + PWMPRD = 0X00; + PWMDTYA = 0X00; + PWMDTY0 = 0X00; + PWMDTY1 = 0X00; + PWMDTY2 = 0X00; + PWMCON1 = 0X00; + PWMDTYB = 0X00; + PWMDTY3 = 0X00; + PWMDTY4 = 0X00; + PWMDTY5 = 0X00; + PWMDTY6 = 0X00; + IE1 &= 0XFD; + IP1 &= 0XFD; +} + +/************************************************** +*函数名称:void PWM_Init(PWM_PresSel_TypeDef PWM_PresSel, uint16_t PWM_Period) +*函数功能:PWM初始化配置函数 +*入口参数: +PWM_PresSel_TypeDef:PWM_PresSel:预分频选择 +uint16_t:PWM_Period:PWM周期配置 +*出口参数:void +**************************************************/ +void PWM_Init(PWM_PresSel_TypeDef PWM_PresSel, + uint16_t PWM_Period) +{ + PWM_Period -= 1; + PWMCON0 = (PWMCON0 & 0XCC) | PWM_PresSel | + (uint8_t)(PWM_Period & + 0X0003); //预分频及周期的低2位 + PWMPRD = (uint8_t)(PWM_Period >> + 2); //周期高八位 +} + +/************************************************** +*函数名称:void PWM_OutputStateConfig(uint8_t PWM_OutputPin, PWM_OutputState_TypeDef PWM_OutputState) +*函数功能:PWMx输出使能/失能配置函数 +*入口参数: +PWM_OutputPin_TypeDef:PWM_OutputPin:PWMx选择 +PWM_OutputState_TypeDef:PWM_OutputState:PWM输出状态配置 +*出口参数:void +**************************************************/ +void PWM_OutputStateConfig(uint8_t PWM_OutputPin, + PWM_OutputState_TypeDef PWM_OutputState) +{ + if(PWM_OutputState == PWM_OUTPUTSTATE_ENABLE) + { + PWMCON1 |= PWM_OutputPin; + } + else + { + PWMCON1 &= (~PWM_OutputPin); + } +} + +/************************************************** +*函数名称:void PWM_PWM2Selection(PWM2_OutputPin_TypeDef PWM2_OutputPin) +*函数功能:PWM2管脚选择函数 +*入口参数: +PWM2_OutputPin_TypeDef:PWM2_OutputPin:PWM2管脚选择 +*出口参数:void +**************************************************/ +void PWM_PWM2Selection(PWM2_OutputPin_TypeDef + PWM2_OutputPin) +{ + PWMCON0 = PWMCON0 & 0XFB | PWM2_OutputPin; +} + +/************************************************** +*函数名称:void PWM_PWM5Selection(PWM5_OutputPin_TypeDef PWM5_OutputPin) +*函数功能:PWM5管脚选择函数 +*入口参数: +PWM5_OutputPin_TypeDef:PWM5_OutputPin:PWM5管脚选择 +*出口参数:void +**************************************************/ +void PWM_PWM5Selection(PWM5_OutputPin_TypeDef + PWM5_OutputPin) +{ + PWMCON0 = PWMCON0 & 0XF7 | PWM5_OutputPin; +} + +/************************************************** +*函数名称:void PWM_PolarityConfig(uint8_t PWM_OutputPin, PWM_Polarity_TypeDef PWM_Polarity) +*函数功能:PWMx正/反向输出配置函数 +*入口参数: +PWM_OutputPin_TypeDef:PWM_OutputPin:PWMx选择 +PWM_Polarity_TypeDef:PWM_Polarity:PWM输出正/反向配置 +*出口参数:void +**************************************************/ +void PWM_PolarityConfig(uint8_t PWM_OutputPin, + PWM_Polarity_TypeDef PWM_Polarity) +{ + if(PWM_Polarity == PWM_POLARITY_INVERT) + { + PWMCFG |= PWM_OutputPin; + } + else + { + PWMCFG &= (~PWM_OutputPin); + } +} + +/************************************************** +*函数名称:void PWM_IndependentModeConfig(PWM_OutputPin_TypeDef PWM_OutputPin, uint16_t PWM_DutyCycle) +*函数功能:PWMx独立工作模式配置函数 +*入口参数: +PWM_OutputPin_TypeDef:PWM_OutputPin:PWMx独立通道选择 +uint16_t:PWM_DutyCycle:PWM占空比配置 +*出口参数:void +**************************************************/ +void PWM_IndependentModeConfig(PWM_OutputPin_TypeDef PWM_OutputPin, + uint16_t PWM_DutyCycle) +{ + if(PWM_OutputPin != PWM6) + { + PWMCON1 &= 0X7F; //设置PWM为独立模式 + } + + switch(PWM_OutputPin) //设置占空比 + { + case PWM0: + PWMDTYA = PWMDTYA & 0XFC | (PWM_DutyCycle % 4); + PWMDTY0 = (uint8_t)(PWM_DutyCycle >> 2); + break; + + case PWM1: + PWMDTYA = PWMDTYA & 0XF3 | ((PWM_DutyCycle % 4) << + 2); + PWMDTY1 = (uint8_t)(PWM_DutyCycle >> 2); + break; + + case PWM2: + PWMDTYA = PWMDTYA & 0XCF | ((PWM_DutyCycle % 4) << + 4); + PWMDTY2 = (uint8_t)(PWM_DutyCycle >> 2); + break; + + case PWM3: + PWMDTYA = PWMDTYA & 0X3F | ((PWM_DutyCycle % 4) << + 6); + PWMDTY3 = (uint8_t)(PWM_DutyCycle >> 2); + break; + + case PWM4: + PWMDTYB = PWMDTYB & 0XFC | (PWM_DutyCycle % 4); + PWMDTY4 = (uint8_t)(PWM_DutyCycle >> 2); + break; + + case PWM5: + PWMDTYB = PWMDTYB & 0XF3 | ((PWM_DutyCycle % 4) << + 2); + PWMDTY5 = (uint8_t)(PWM_DutyCycle >> 2); + break; + + case PWM6: + PWMDTYB = PWMDTYB & 0XCF | ((PWM_DutyCycle % 4) << + 4); + PWMDTY6 = (uint8_t)(PWM_DutyCycle >> 2); + break; + + default: + break; + } +} + +/************************************************** +*函数名称:void PWM_ComplementaryModeConfig(PWM_ComplementaryOutputPin_TypeDef PWM_ComplementaryOutputPin, uint16_t PWM_DutyCycle) +*函数功能:PWMxPWMy互补工作模式配置函数 +*入口参数: +PWM_ComplementaryOutputPin_TypeDef:PWM_ComplementaryOutputPin:PWMxPWMy互补通道选择 +uint16_t:PWM_DutyCycle:PWM占空比配置 +*出口参数:void +**************************************************/ +void PWM_ComplementaryModeConfig(PWM_ComplementaryOutputPin_TypeDef PWM_ComplementaryOutputPin, + uint16_t PWM_DutyCycle) +{ + PWMCON1 |= 0X80; //设置PWM为互补模式 + + switch(PWM_ComplementaryOutputPin) //设置占空比 + { + case PWM0PWM3: + PWMDTYA = PWMDTYA & 0XFC | (PWM_DutyCycle % 4); + PWMDTY0 = (uint8_t)(PWM_DutyCycle >> 2); + break; + + case PWM1PWM4: + PWMDTYA = PWMDTYA & 0XF3 | ((PWM_DutyCycle % 4) << + 2); + PWMDTY1 = (uint8_t)(PWM_DutyCycle >> 2); + break; + + case PWM2PWM5: + PWMDTYA = PWMDTYA & 0XCF | ((PWM_DutyCycle % 4) << + 4); + PWMDTY2 = (uint8_t)(PWM_DutyCycle >> 2); + break; + + default: + break; + } +} + +/************************************************** +*函数名称:void PWM_DeadTimeConfig(uint8_t PWM012_RisingDeadTime, uint8_t PWM345_fallingDeadTime) +*函数功能:PWM互补工作模式下死区时间配置函数 +*入口参数: +uint8_t:PWM012_RisingDeadTime:PWM死区上升时间 +uint8_t:PWM345_fallingDeadTime:PWM死区下降时间 +*出口参数:void +**************************************************/ +void PWM_DeadTimeConfig(uint8_t + PWM012_RisingDeadTime, + uint8_t PWM345_fallingDeadTime) +{ + PWMDTY3 = (PWM012_RisingDeadTime | + (PWM345_fallingDeadTime << 4)); +} + +/***************************************************** +*函数名称:void PWM_Cmd(FunctionalState NewState) +*函数功能:PWM功能开关函数 +*入口参数: +FunctionalState:NewState:功能启动/关闭选择 +*出口参数:void +*****************************************************/ +void PWM_Cmd(FunctionalState NewState) +{ + if (NewState != DISABLE) + { + PWMCON0 |= 0X80; + } + else + { + PWMCON0 &= ~0X80; + } +} + +/***************************************************** +*函数名称:void PWM_ITConfig(FunctionalState NewState, PriorityStatus Priority) +*函数功能:PWM中断初始化 +*入口参数: +FunctionalState:NewState:中断使能/关闭选择 +PriorityStatus:Priority:中断优先级选择 +*出口参数:void +*****************************************************/ +void PWM_ITConfig(FunctionalState NewState, + PriorityStatus Priority) +{ + if (NewState != DISABLE) + { + IE1 |= 0X02; + } + else + { + IE1 &= 0XFD; + } + + if(Priority == LOW) + { + IP1 &= 0XFD; + } + else + { + IP1 |= 0X02; + } +} + +/***************************************************** +*函数名称:FlagStatus PWM_GetFlagStatus(void) +*函数功能:获得PWM中断标志状态 +*入口参数:void +*出口参数: +FlagStatus:PWM中断标志状态 +*****************************************************/ +FlagStatus PWM_GetFlagStatus(void) +{ + return (bool)(PWMCON0 & 0X40); +} + +/***************************************************** +*函数名称:void PWM_ClearFlag(void) +*函数功能:清除PWM中断标志状态 +*入口参数:void +*出口参数:void +*****************************************************/ +void PWM_ClearFlag(void) +{ + PWMCON0 &= 0XBF; +} +#endif + +#if defined (SC92F742x) || defined (SC92F730x) || defined (SC92F725X) || defined(SC92F735X) +/************************************************** +*函数名称:void PWM_DeInit(void) +*函数功能:PWM相关寄存器复位至缺省值 +*入口参数:void +*出口参数:void +**************************************************/ +void PWM_DeInit(void) +{ + PWMCFG0 = 0X00; + PWMCON = 0X00; + PWMPRD = 0X00; + PWMCFG1 = 0X00; + PWMDTY0 = 0X00; + PWMDTY1 = 0X00; + PWMDTY2 = 0X00; +#if !defined (SC92F730x) + PWMDTY3 = 0X00; +#endif + PWMDTY4 = 0X00; + PWMDTY5 = 0X00; + IE1 &= ~0X02; + IP1 &= ~0X02; +} + +/************************************************** +*函数名称:void PWM_Init(PWM_PresSel_TypeDef PWM_PresSel, uint16_t PWM_Period) +*函数功能:PWM初始化配置函数 +*入口参数: +PWM_PresSel_TypeDef:PWM_PresSel:预分频选择 +uint16_t:PWM_Period:PWM周期配置 +*出口参数:void +**************************************************/ +void PWM_Init(PWM_PresSel_TypeDef PWM_PresSel, + uint16_t PWM_Period) +{ + PWM_Period -= 1; + PWMCON = (PWMCON & 0XF8) | PWM_PresSel; //预分频 + PWMPRD = PWM_Period; //周期配置 +} + +/************************************************** +*函数名称:void PWM_OutputStateConfig(PWM_OutputPin_TypeDef PWM_OutputPin, PWM_OutputState_TypeDef PWM_OutputState) +*函数功能:PWMx输出使能/失能配置函数 +*入口参数: +uint8_t:PWM_OutputPin:PWMx选择 +PWM_OutputState_TypeDef:PWM_OutputState:PWM输出状态配置 +*出口参数:void +**************************************************/ +void PWM_OutputStateConfig(uint8_t PWM_OutputPin, + PWM_OutputState_TypeDef PWM_OutputState) +{ + if(PWM_OutputState == PWM_OUTPUTSTATE_DISABLE) + { + PWMCON = PWMCON & (~((PWM_OutputPin & 0x07) << 3)); + PWMCON = PWMCON | (PWM_OutputPin & 0x07) << 3; + } + else + { + PWMCON = PWMCON | (PWM_OutputPin & 0x07) << 3; + PWMCFG0 = PWMCFG0 | (PWM_OutputPin & 0x38) >> 3; + } +} + +/************************************************** +*函数名称:void PWM_PolarityConfig(PWM_OutputPin_TypeDef PWM_OutputPin, PWM_Polarity_TypeDef PWM_Polarity) +*函数功能:PWMx正/反向输出配置函数 +*入口参数: +PWM_PolarityConfig:PWM_OutputPin:PWMx选择 +PWM_Polarity_TypeDef:PWM_Polarity:PWM输出正/反向配置 +*出口参数:void +**************************************************/ +void PWM_PolarityConfig(uint8_t PWM_OutputPin, + PWM_Polarity_TypeDef PWM_Polarity) +{ + if(PWM_Polarity == PWM_POLARITY_NON_INVERT) + { + PWMCFG0 = PWMCFG0 & ~((PWM_OutputPin & 0x07) << 3); + PWMCFG1 = PWMCFG1 & ~((PWM_OutputPin & 0x38)); + } + else + { + PWMCFG0 = PWMCFG0 | (PWM_OutputPin & 0x07) << 3; + PWMCFG1 = PWMCFG1 | (PWM_OutputPin & 0x38); + } + +} + +/************************************************** +*函数名称:void PWM_IndependentModeConfig(PWM_OutputPin_TypeDef PWM_OutputPin, uint16_t PWM_DutyCycle) +*函数功能:PWMx独立工作模式配置函数 +*入口参数: +PWM_OutputPin_TypeDef:PWM_OutputPin:PWMx独立通道选择 +uint16_t:PWM_DutyCycle:PWM占空比配置 +*出口参数:void +**************************************************/ +void PWM_IndependentModeConfig( + PWM_OutputPin_TypeDef PWM_OutputPin, + uint16_t PWM_DutyCycle) +{ + switch(PWM_OutputPin) //设置占空比 + { + case PWM0: + PWMDTY0 = PWM_DutyCycle; + break; + + case PWM1: + PWMDTY1 = PWM_DutyCycle; + break; + + case PWM2: + PWMDTY2 = PWM_DutyCycle; + break; +#if !defined (SC92F730x) + + case PWM3: + PWMDTY3 = PWM_DutyCycle; + break; +#endif + + case PWM4: + PWMDTY4 = PWM_DutyCycle; + break; + + case PWM5: + PWMDTY5 = PWM_DutyCycle; + break; + + default: + break; + } +} + +/***************************************************** +*函数名称:void PWM_Cmd(FunctionalState NewState) +*函数功能:PWM功能开关函数 +*入口参数: +FunctionalState:NewState:功能启动/关闭选择 +*出口参数:void +*****************************************************/ +void PWM_Cmd(FunctionalState NewState) +{ + if (NewState != DISABLE) + { + PWMCON |= 0X80; + } + else + { + PWMCON &= ~0X80; + } +} + +/***************************************************** +*函数名称:void PWM_ITConfig(FunctionalState NewState, PriorityStatus Priority) +*函数功能:PWM中断初始化 +*入口参数: +FunctionalState:NewState:中断使能/关闭选择 +PriorityStatus:Priority:中断优先级选择 +*出口参数:void +*****************************************************/ +void PWM_ITConfig(FunctionalState NewState, + PriorityStatus Priority) +{ + if (NewState != DISABLE) + { + IE1 |= 0X02; + } + else + { + IE1 &= ~0X02; + } + + if(Priority == LOW) + { + IP1 &= ~0X02; + } + else + { + IP1 |= 0X02; + } +} + +/***************************************************** +*函数名称:FlagStatus PWM_GetFlagStatus(void) +*函数功能:获得PWM中断标志状态 +*入口参数:void +*出口参数: +FlagStatus:PWM中断标志状态 +*****************************************************/ +FlagStatus PWM_GetFlagStatus(void) +{ + return (bool)(PWMCON & 0X40); +} + +/***************************************************** +*函数名称:void PWM_ClearFlag(void) +*函数功能:清除PWM中断标志状态 +*入口参数:void +*出口参数:void +*****************************************************/ +void PWM_ClearFlag(void) +{ + PWMCON &= 0XBF; +} +#endif + +#if defined (SC92F827X) || defined (SC92F837X) +/************************************************** +*函数名称:void PWM_DeInit(void) +*函数功能:PWM相关寄存器复位至缺省值 +*入口参数:void +*出口参数:void +**************************************************/ +void PWM_DeInit(void) +{ + PWMCFG = 0X00; + PWMCON = 0X00; + PWMPRD = 0X00; + PWMDTY0 = 0X00; + PWMDTY1 = 0X00; +#if !defined (SC92F827X) + PWMDTY2 = 0X00; + PWMDTY3 = 0X00; +#if !defined (SC92F837X) + PWMDTY4 = 0X00; + PWMDTY5 = 0X00; +#endif +#endif + IE1 &= ~0X02; + IP1 &= ~0X02; +} + +/************************************************** +*函数名称:void PWM_Init(PWM_PresSel_TypeDef PWM_PresSel, uint16_t PWM_Period) +*函数功能:PWM初始化配置函数 +*入口参数: +PWM_PresSel_TypeDef:PWM_PresSel:预分频选择 +uint16_t:PWM_Period:PWM周期配置 +*出口参数:void +**************************************************/ +void PWM_Init(PWM_PresSel_TypeDef PWM_PresSel, + uint16_t PWM_Period) +{ + PWM_Period -= 1; + PWMCON = (PWMCON & 0XF8) | PWM_PresSel; //预分频 + PWMPRD = PWM_Period; //周期配置 +} + +/************************************************** +*函数名称:void PWM_OutputStateConfig(uint8_t PWM_OutputPin, PWM_OutputState_TypeDef PWM_OutputState) +*函数功能:PWMx输出使能/失能配置函数 +*入口参数: +PWM_OutputPin_TypeDef:PWM_OutputPin:PWMx选择 +PWM_OutputState_TypeDef:PWM_OutputState:PWM输出状态配置 +*出口参数:void +**************************************************/ +void PWM_OutputStateConfig(uint8_t PWM_OutputPin, + PWM_OutputState_TypeDef PWM_OutputState) +{ + if(PWM_OutputState == PWM_OUTPUTSTATE_ENABLE) + { + PWMCON |= PWM_OutputPin; + } + else + { + PWMCON &= (~PWM_OutputPin); + } +} + +/************************************************** +*函数名称:void PWM_PolarityConfig(uint8_t PWM_OutputPin, PWM_Polarity_TypeDef PWM_Polarity) +*函数功能:PWMx正/反向输出配置函数 +*入口参数: +PWM_OutputPin_TypeDef:PWM_OutputPin:PWMx选择 +PWM_Polarity_TypeDef:PWM_Polarity:PWM输出正/反向配置 +*出口参数:void +**************************************************/ +void PWM_PolarityConfig(uint8_t PWM_OutputPin, + PWM_Polarity_TypeDef PWM_Polarity) +{ + if(PWM_Polarity == PWM_POLARITY_INVERT) + { + PWMCFG |= PWM_OutputPin; + } + else + { + PWMCFG &= (~PWM_OutputPin); + } +} + +/************************************************** +*函数名称:void PWM_IndependentModeConfig(PWM_OutputPin_TypeDef PWM_OutputPin, uint16_t PWM_DutyCycle) +*函数功能:PWMx独立工作模式配置函数 +*入口参数: +PWM_OutputPin_TypeDef:PWM_OutputPin:PWMx独立通道选择 +uint16_t:PWM_DutyCycle:PWM占空比配置 +*出口参数:void +**************************************************/ +void PWM_IndependentModeConfig( + PWM_OutputPin_TypeDef PWM_OutputPin, + uint16_t PWM_DutyCycle) +{ + switch(PWM_OutputPin) //设置占空比 + { + case PWM0: + PWMDTY0 = PWM_DutyCycle; + break; + + case PWM1: + PWMDTY1 = PWM_DutyCycle; + break; +#if !defined (SC92F827X) + + case PWM2: + PWMDTY2 = PWM_DutyCycle; + break; + + case PWM3: + PWMDTY3 = PWM_DutyCycle; + break; +#if !defined (SC92F837X) + + case PWM4: + PWMDTY4 = PWM_DutyCycle; + break; + + case PWM5: + PWMDTY5 = PWM_DutyCycle; + break; +#endif +#endif + + default: + break; + } +} + +/***************************************************** +*函数名称:void PWM_Cmd(FunctionalState NewState) +*函数功能:PWM功能开关函数 +*入口参数: +FunctionalState:NewState:功能启动/关闭选择 +*出口参数:void +*****************************************************/ +void PWM_Cmd(FunctionalState NewState) +{ + if (NewState != DISABLE) + { + PWMCON |= 0X80; + } + else + { + PWMCON &= ~0X80; + } +} + +/***************************************************** +*函数名称:void PWM_ITConfig(FunctionalState NewState, PriorityStatus Priority) +*函数功能:PWM中断初始化 +*入口参数: +FunctionalState:NewState:中断使能/关闭选择 +PriorityStatus:Priority:中断优先级选择 +*出口参数:void +*****************************************************/ +void PWM_ITConfig(FunctionalState NewState, + PriorityStatus Priority) +{ + if (NewState != DISABLE) + { + IE1 |= 0X02; + } + else + { + IE1 &= 0XFD; + } + + if(Priority == LOW) + { + IP1 &= 0XFD; + } + else + { + IP1 |= 0X02; + } +} + +/***************************************************** +*函数名称:FlagStatus PWM_GetFlagStatus(void) +*函数功能:获得PWM中断标志状态 +*入口参数:void +*出口参数:FlagStatus PWM中断标志状态 +*****************************************************/ +FlagStatus PWM_GetFlagStatus(void) +{ + return (bool)(PWMCON & 0X40); +} + +/***************************************************** +*函数名称:void PWM_ClearFlag(void) +*函数功能:清除PWM中断标志状态 +*入口参数:void +*出口参数:void +*****************************************************/ +void PWM_ClearFlag(void) +{ + PWMCON &= 0XBF; +} +#endif + +#if defined (SC92F732X) || defined (SC93F833x) || defined (SC93F843x) || defined (SC93F743x) +/************************************************** +*函数名称:void PWM_DeInit(void) +*函数功能:PWM相关寄存器复位至缺省值 +*入口参数:void +*出口参数:void +**************************************************/ +void PWM_DeInit(void) +{ + PWMCFG = 0X00; + PWMCON = 0X00; + PWMPRD = 0X00; + PWMDTYA = 0X00; + PWMDTY0 = 0X00; + PWMDTY1 = 0X00; + PWMDTY2 = 0X00; + IE1 &= ~0X02; + IP1 &= ~0X02; +} + +/************************************************** +*函数名称:void PWM_Init(PWM_PresSel_TypeDef PWM_PresSel, uint16_t PWM_Period) +*函数功能:PWM初始化配置函数 +*入口参数: +PWM_PresSel_TypeDef:PWM_PresSel:预分频选择 +uint16_t:PWM_Period:PWM周期配置 +*出口参数:void +**************************************************/ +void PWM_Init(PWM_PresSel_TypeDef PWM_PresSel, + uint16_t PWM_Period) +{ + PWM_Period -= 1; + PWMCON = (PWMCON & 0XF8) | PWM_PresSel; //预分频 + PWMPRD = PWM_Period; //周期配置 +} + +/************************************************** +*函数名称:void PWM_OutputStateConfig(PWM_OutputPin_TypeDef PWM_OutputPin, PWM_OutputState_TypeDef PWM_OutputState) +*函数功能:PWMx输出使能/失能配置函数 +*入口参数: +PWM_OutputPin_TypeDef:PWM_OutputPin:PWMx选择 +PWM_OutputState_TypeDef:PWM_OutputState:PWM输出状态配置 +*出口参数:void +**************************************************/ +void PWM_OutputStateConfig(uint8_t PWM_OutputPin, + PWM_OutputState_TypeDef PWM_OutputState) +{ + if(PWM_OutputState == PWM_OUTPUTSTATE_DISABLE) + { + PWMCON = PWMCON & (~(PWM_OutputPin << 3)); + } + else + { + PWMCON = PWMCON | (PWM_OutputPin << 3); + } +} + +/************************************************** +*函数名称:void PWM_PolarityConfig(PWM_OutputPin_TypeDef PWM_OutputPin, PWM_Polarity_TypeDef PWM_Polarity) +*函数功能:PWMx正/反向输出配置函数 +*入口参数: +PWM_OutputPin_TypeDef:WM_OutputPin:PWMx选择 +PWM_Polarity_TypeDef:PWM_Polarity:PWM输出正/反向配置 +*出口参数:void +**************************************************/ +void PWM_PolarityConfig(uint8_t PWM_OutputPin, + PWM_Polarity_TypeDef PWM_Polarity) +{ + if(PWM_Polarity == PWM_POLARITY_NON_INVERT) + { + PWMCFG = PWMCFG & (~PWM_OutputPin<<3); + } + else + { + PWMCFG = PWMCFG | (PWM_OutputPin<<3); + } +} + +/************************************************** +*函数名称:void PWM_IndependentModeConfig(PWM_OutputPin_TypeDef PWM_OutputPin, uint16_t PWM_DutyCycle) +*函数功能:PWMx独立工作模式配置函数 +*入口参数: +PWM_OutputPin_TypeDef:PWM_OutputPin:PWMx独立通道选择 +uint16_t:PWM_DutyCycle:PWM占空比配置 +*出口参数:void +**************************************************/ +void PWM_IndependentModeConfig( + PWM_OutputPin_TypeDef PWM_OutputPin, + uint16_t PWM_DutyCycle) +{ + switch(PWM_OutputPin) //设置占空比 + { + case PWM0: + PWMDTY0 = PWM_DutyCycle; + break; + + case PWM1: + PWMDTY1 = PWM_DutyCycle; + break; + + case PWM2: + PWMDTY2 = PWM_DutyCycle; + break; + + default: + break; + } +} + +/***************************************************** +*函数名称:void PWM_Cmd(FunctionalState NewState) +*函数功能:PWM功能开关函数 +*入口参数: +FunctionalState:NewState:功能启动/关闭选择 +*出口参数:void +*****************************************************/ +void PWM_Cmd(FunctionalState NewState) +{ + if (NewState != DISABLE) + { + PWMCON |= 0X80; + } + else + { + PWMCON &= ~0X80; + } +} + +/***************************************************** +*函数名称:void PWM_ITConfig(FunctionalState NewState, PriorityStatus Priority) +*函数功能:PWM中断初始化 +*入口参数: +FunctionalState:NewState:中断使能/关闭选择 +PriorityStatus:Priority:中断优先级选择 +*出口参数:void +*****************************************************/ +void PWM_ITConfig(FunctionalState NewState, + PriorityStatus Priority) +{ + if (NewState != DISABLE) + { + IE1 |= 0X02; + } + else + { + IE1 &= ~0X02; + } + + if(Priority == LOW) + { + IP1 &= ~0X02; + } + else + { + IP1 |= 0X02; + } +} + +/***************************************************** +*函数名称:FlagStatus PWM_GetFlagStatus(void) +*函数功能:获得PWM中断标志状态 +*入口参数:void +*出口参数: +FlagStatus:PWM中断标志状态 +*****************************************************/ +FlagStatus PWM_GetFlagStatus(void) +{ + return (bool)(PWMCON & 0X40); +} + +/***************************************************** +*函数名称:void PWM_ClearFlag(void) +*函数功能:清除PWM中断标志状态 +*入口参数:void +*出口参数:void +*****************************************************/ +void PWM_ClearFlag(void) +{ + PWMCON &= 0XBF; +} + +/************************************************** +*函数名称:void PWM_PWM0Selection(PWM0_OutputPin_TypeDef PWM0_OutputPin) +*函数功能:PWM0管脚选择函数 +*入口参数: +PWM0_OutputPin_TypeDef:PWM0_OutputPin:PWM0管脚选择 +*出口参数:void +**************************************************/ +void PWM_PWM0Selection(PWM0_OutputPin_TypeDef + PWM0_OutputPin) +{ + PWMCFG = PWMCFG & 0XFE | PWM0_OutputPin; +} + +/************************************************** +*函数名称:void PWM_PWM1Selection(PWM1_OutputPin_TypeDef PWM1_OutputPin) +*函数功能:PWM1管脚选择函数 +*入口参数: +PWM1_OutputPin_TypeDef:PWM1_OutputPin:PWM1管脚选择 +*出口参数:void +**************************************************/ +void PWM_PWM1Selection(PWM1_OutputPin_TypeDef + PWM1_OutputPin) +{ + PWMCFG = PWMCFG & 0XFD | PWM1_OutputPin; +} + +/************************************************** +*函数名称:void PWM_PWM1Selection(PWM2_OutputPin_TypeDef PWM2_OutputPin) +*函数功能:PWM2管脚选择函数 +*入口参数: +PWM2_OutputPin_TypeDef:PWM2_OutputPin:PWM1管脚选择 +*出口参数:void +**************************************************/ +void PWM_PWM2Selection(PWM2_OutputPin_TypeDef + PWM2_OutputPin) +{ + PWMCFG = PWMCFG & 0XFB | PWM2_OutputPin; +} + +/************************************************** +*函数名称:void PMM_DutyModeSelection(PWM_DutyMode_TypeDef PWM_DutyMode) +*函数功能:PWM占空比微调模式选择 +*入口参数: +PWM_OutputPin_TypeDef:PWM_OutputPin:PWM通道 +PWM_DutyMode_TypeDef:PWM_DutyMode:PWM微调模式 +*出口参数:void +**************************************************/ +void PMM_DutyModeSelection(PWM_OutputPin_TypeDef + PWM_OutputPin, PWM_DutyMode_TypeDef PWM_DutyMode) +{ + PWMDTYA = PWMDTYA & (~(0x03 << (PWM_OutputPin - + 1))) | (PWM_DutyMode << (PWM_OutputPin - 1)); +} +#endif + +#if defined (SC92FWxx) + +uint8_t xdata PWMREG[80] _at_ +0x700; //PWM占空比调节寄存器 +uint8_t PWMREG_Status[10]; +/************************************************** +*函数名称:void PWM_DeInit(void) +*函数功能:PWM相关寄存器复位至缺省值 +*入口参数:void +*出口参数:void +**************************************************/ +void PWM_DeInit(void) +{ + static uint8_t i; + PWMCFG0 = 0X00; + PWMCON0 = 0X00; + PWMCFG1 = 0X00; + PWMCON1 = 0X00; + IE1 &= 0XFD; + IP1 &= 0XFD; + + for(i = 0; i < 80; i++) + { + PWMREG[i] = 0; + } +} + +/************************************************** +*函数名称:PWM_Init(PWM_PresSel_TypeDef PWM_PresSel, uint16_t PWM_Period) +*函数功能:PWM初始化配置函数 +*入口参数: +PWM_PresSel_TypeDef:PWM_PresSel:预分频选择 +uint16_t:PWM_Period:PWM周期配置 +*出口参数:void +**************************************************/ +void PWM_Init(PWM_PresSel_TypeDef PWM_PresSel, + uint16_t PWM_Period) +{ + if((PWM_PresSel & 0X0F) == PWM0_Type) + { + PWM_Period -= 1; + PWMCFG0 = (PWMCFG0 & 0XCF) | (PWM_PresSel & + 0XF0); //预分频 + PWMCFG0 = (PWMCFG0 & 0XF0) | (uint8_t)( + PWM_Period / 256); //周期高4位 + PWMCON0 = (uint8_t)(PWM_Period & + 0X00FF); //周期低8位 + } + else + if ((PWM_PresSel & 0X0F) == PWM1_Type) + { + PWM_Period -= 1; + PWMCFG1 = (PWMCFG1 & 0XCF) | (PWM_PresSel & + 0XF0); //预分频 + PWMCFG1 = (PWMCFG1 & 0XF0) | (uint8_t)( + PWM_Period / 256); //周期高4位 + PWMCON1 = (uint8_t)(PWM_Period & + 0X00FF); //周期低8位 + } +} + +/************************************************** +*函数名称:void PWM_OutputStateConfig(uint8_t PWM_OutputPin, PWM_OutputState_TypeDef PWM_OutputState) +*函数功能:PWMx输出使能/失能配置函数 +*入口参数: +PWM_OutputPin_TypeDef:PWM_OutputPin:PWMx选择(该型号入参不支持围未或操作) +PWM_OutputState_TypeDef:PWM_OutputState:PWM输出状态配置 +*出口参数:void +**************************************************/ +void PWM_OutputStateConfig(uint8_t PWM_OutputPin, + PWM_OutputState_TypeDef PWM_OutputState) +{ + if(PWM_OutputState == ENABLE) + { + PWMREG[PWM_OutputPin] |= 0x80; + } + else + { + PWMREG[PWM_OutputPin] &= 0x7F; + } +} + +/************************************************** +*函数名称:void PWM_PolarityConfig(PWM_OutputPin_TypeDef PWM_OutputPin, PWM_Polarity_TypeDef PWM_Polarity) +*函数功能:PWMx正/反向输出配置函数 +*入口参数: +PWM_OutputPin_TypeDef:PWM_OutputPin:PWMx选择(该型号入参不支持围未或操作) +PWM_Polarity_TypeDef:PWM_Polarity:PWM输出正/反向配置 +*出口参数:void +**************************************************/ +void PWM_PolarityConfig(uint8_t PWM_OutputPin, + PWM_Polarity_TypeDef PWM_Polarity) +{ + if(PWM_Polarity == PWM_POLARITY_INVERT) + { + PWMREG[PWM_OutputPin] |= 0x40; + } + else + { + PWMREG[PWM_OutputPin] &= 0xBF; + } +} + +/************************************************** +*函数名称:void PWM_IndependentModeConfig(PWM_OutputPin_TypeDef PWM_OutputPin, uint16_t PWM_DutyCycle) +*函数功能:PWMx独立工作模式配置函数 +*入口参数: +PWM_OutputPin_TypeDef:PWM_OutputPin:PWMx选择(该型号入参不支持围未或操作) +uint16_t:PWM_DutyCycle:PWM占空比配置 +*出口参数:void +**************************************************/ +void PWM_IndependentModeConfig(PWM_OutputPin_TypeDef PWM_OutputPin, + uint16_t PWM_DutyCycle) +{ + PWMREG[PWM_OutputPin + 1] = PWM_DutyCycle; + PWMREG[PWM_OutputPin] = (PWMREG[PWM_OutputPin] * 0xF0) |(PWM_DutyCycle / 256); +} + +/***************************************************** +*函数名称:void PWM_Cmd(PWM_Type_TypeDef PWM_Type,FunctionalState NewState) +*函数功能:PWM功能开关函数 +*入口参数: +PWM_Type_TypeDef:PWM_Type:PWM类型 +FunctionalState:NewState:功能启动/关闭选择 +*出口参数:void +*****************************************************/ +void PWM_CmdEX(PWM_Type_TypeDef PWM_Type, + FunctionalState NewState) +{ + if(PWM_Type == PWM0_Type) + { + if (NewState != DISABLE) + { + PWMCFG0 |= 0X80; + } + else + { + PWMCFG0 &= 0X7F; + } + } + else + { + if (NewState != DISABLE) + { + PWMCFG1 |= 0X80; + } + else + { + PWMCFG1 &= 0X7F; + } + } +} + +/***************************************************** +*函数名称:void PWM_ITConfig(FunctionalState NewState, PriorityStatus Priority) +*函数功能:PWM中断初始化 +*入口参数: +FunctionalState:NewState:中断使能/关闭选择 +PriorityStatus:Priority:中断优先级选择 +*出口参数:void +*****************************************************/ +void PWM_ITConfig(FunctionalState NewState, + PriorityStatus Priority) +{ + if (NewState != DISABLE) + { + IE1 |= 0X02; + } + else + { + IE1 &= 0XFD; + } + + if(Priority == LOW) + { + IP1 &= ~0X02; + } + else + { + IP1 |= 0X02; + } +} + +/***************************************************** +*函数名称:FlagStatus PWM1_Type_GetFlagStatus(void) +*函数功能:获得PWM中断标志状态 +*入口参数: +PWM_Type_TypeDef:PWM_Type:PWM类型 +*出口参数:FlagStatus PWM中断标志状态 +*****************************************************/ +FlagStatus PWM_GetFlagStatusEX(PWM_Type_TypeDef + PWM_Type) +{ + if(PWM_Type == PWM0_Type) + { + return (bool)(PWMCFG0 & 0X40); + } + else + { + return (bool)(PWMCFG1 & 0X40); + } +} + +/***************************************************** +*函数名称:void PWM1_ClearFlag(void) +*函数功能:清除PWM中断标志状态 +*入口参数: +PWM_Type_TypeDef:PWM_Type:PWM类型 +*出口参数:void +*****************************************************/ +void PWM_ClearFlagEX(PWM_Type_TypeDef PWM_Type) +{ + if(PWM_Type == PWM0_Type) + { + PWMCFG0 &= 0XBF; + } + else + { + PWMCFG1 &= 0XBF; + } +} + +/***************************************************** +*函数名称:void PWM_IndependentModeConfigEX(PWM_OutputPin_TypeDef PWM_OutputPin, uint16_t PWM_DutyCycle, PWM_OutputState_TypeDef PWM_OutputState) +*函数功能:清除PWM中断标志状态 +*入口参数: +PWM_OutputPin_TypeDef:PWM_OutputPin:独立PWM通道选择 +uint16_t:PWM_DutyCycle:PWM占空比配置 +FunctionalState:NewState:功能启动/关闭选择 +*出口参数:void +*****************************************************/ +void PWM_IndependentModeConfigEX(PWM_OutputPin_TypeDef PWM_OutputPin, + uint16_t PWM_DutyCycle, + PWM_OutputState_TypeDef PWM_OutputState) +{ + if(PWM_OutputState == ENABLE) + { + PWMREG[PWM_OutputPin] = (PWMREG[PWM_OutputPin] * 0xF0) | (0x80 | (PWM_DutyCycle / + 256)); + PWMREG[PWM_OutputPin + 1] = PWM_DutyCycle; + } + else + { + PWMREG[PWM_OutputPin] &= 0x7F; + } +} + +#endif + +#if defined (SC92L853x) || defined (SC92L753x) +uint8_t xdata PWMREG[28] _at_ 0x0F40; //PWM占空比调节寄存器 +/************************************************** +*函数名称:void PWM_DeInit(void) +*函数功能:PWM相关寄存器复位至缺省值 +*入口参数:void +*出口参数:void +**************************************************/ +void PWM_DeInit(void) +{ + static uint8_t i; + + //PWM0相关寄存器清零 + PWMCON0 = 0X00; + PWMCFG = 0X00; + PWMCON1 = 0X00; + PWMPDL = 0x00; + PWMPDH = 0x00; + IE1 &= 0XFD; + IP1 &= 0XFD; + + //占空比寄存器 + for (i = 0; i < 14; i++) + { + PWMREG[i] = 0; + } +} + +/************************************************** +*函数名称:PWM_Init(PWM_Type_TypeDef PWM_Type,PWM_PresSel_TypeDef PWM_PresSel, uint16_t PWM_Period) +*函数功能:PWM初始化配置函数 +*入口参数: +PWM_PresSel_TypeDef:PWM_PresSel:预分频选择 +uint16_t:PWM_Period:PWM周期配置 +*出口参数:void +**************************************************/ +void PWM_Init(PWM_PresSel_TypeDef PWM_PresSel, uint16_t PWM_Period) +{ + /* PWM0时基初始化 */ + PWM_Period -= 1; + PWMCON0 = ((PWMCON0 & 0XCF) | PWM_PresSel); //预分频 + PWMPDH = (uint8_t)(PWM_Period >> 8); //周期高8位 + PWMPDL = (uint8_t)(PWM_Period & 0X00FF); //周期低8位 +} + +/***************************************************** +*函数名称:void PWM_Aligned_Mode_Select(void) +*函数功能:选择PWM的对齐模式 +*入口参数: +PWM_Aligned_Mode_TypeDef:PWM_Aligned_Mode:选择对齐模式 +*出口参数:void +*****************************************************/ +void PWM_Aligned_Mode_Select(PWM_Aligned_Mode_TypeDef PWM_Aligned_Mode) +{ + PWMCON0 &= ~0x01; //清除PWM对齐模式配置 + PWMCON0 |= (PWM_Aligned_Mode<<1); //设置PWM对齐模式 +} + +/************************************************** +*函数名称:void PWM_OutputStateConfig(uint8_t PWM_OutputPin, PWM_OutputState_TypeDef PWM_OutputState) +*函数功能:PWMx输出使能/失能配置函数 +*入口参数: +PWM_OutputPin_TypeDef:PWM_OutputPin:PWMx选择(uint8_t作为入参,方便进行位或操作) +PWM_OutputState_TypeDef:PWM_OutputState:PWM输出状态配置 +*出口参数:void +**************************************************/ +void PWM_OutputStateConfig(uint8_t PWM_OutputPin, + PWM_OutputState_TypeDef PWM_OutputState) +{ + /* PWM0输出通道使能配置 */ + if (PWM_OutputState == PWM_OUTPUTSTATE_ENABLE) + { + PWMCON1 |= 1 << ((PWM_OutputPin >> 1) & 0x0F); + } + else + { + PWMCON1 &= ~(1 << ((PWM_OutputPin >> 1) & 0x0F)); + } +} + +/************************************************** +*函数名称:void PWM_PolarityConfig(PWM_OutputPin_TypeDef PWM_OutputPin, PWM_Polarity_TypeDef PWM_Polarity) +*函数功能:PWMx正/反向输出配置函数 +*入口参数: +PWM_OutputPin_TypeDef:PWM_OutputPin:PWMx选择(uint8_t作为入参,方便进行位或操作) +PWM_Polarity_TypeDef:PWM_Polarity:PWM输出正/反向配置 +*出口参数:void +**************************************************/ +void PWM_PolarityConfig(uint8_t PWM_OutputPin, + PWM_Polarity_TypeDef PWM_Polarity) +{ + if (PWM_Polarity == PWM_POLARITY_INVERT) + { + PWMCFG |= 1 << ((PWM_OutputPin >> 1) & 0x0F); + } + else + { + PWMCFG &= ~(1 << ((PWM_OutputPin >> 1) & 0x0F)); + } +} + +/************************************************** +*函数名称:void PWM_IndependentModeConfig(PWM_OutputPin_TypeDef PWM_OutputPin, uint16_t PWM_DutyCycle) +*函数功能:PWMx独立工作模式配置函数 +*入口参数: +PWM_OutputPin_TypeDef:PWM_OutputPin:PWMx独立通道选择 +uint16_t:PWM_DutyCycle:PWM占空比配置 +*出口参数:void +**************************************************/ +void PWM_IndependentModeConfig(PWM_OutputPin_TypeDef PWM_OutputPin, uint16_t PWM_DutyCycle) +{ + PWMCON0 &= ~0x02; //设置PWM为独立模式 + /* 设置PWM周期 */ + PWMREG[ PWM_ComplementaryOutputPin] = PWM_DutyCycle; + PWMREG[ PWM_ComplementaryOutputPin+1] = PWM_DutyCycle >> 8; +} + +/************************************************** +*函数名称:void PWM_ComplementaryModeConfig(PWM_ComplementaryOutputPin_TypeDef PWM_ComplementaryOutputPin, uint16_t PWM_DutyCycle) +*函数功能:PWMxPWMy互补工作模式配置函数 +*入口参数: +PWM_ComplementaryOutputPin_TypeDef:PWM_ComplementaryOutputPin:PWMxPWMy互补通道选择 +uint16_t:PWM_DutyCycle:PWM占空比配置 +*出口参数:void +**************************************************/ +void PWM_ComplementaryModeConfig(PWM_ComplementaryOutputPin_TypeDef PWM_ComplementaryOutputPin, + uint16_t PWM_DutyCycle) +{ + PWMCON0 |= 0x02; + PWMREG[ PWM_ComplementaryOutputPin] = PWM_DutyCycle; + PWMREG[ PWM_ComplementaryOutputPin+1] = PWM_DutyCycle >> 8; +} + +/************************************************** +*函数名称:PWM_DeadTimeConfigEX(PWM_Type_TypeDef PWM_Type,uint8_t PWM_RisingDeadTime, uint8_t PWM_FallingDeadTime) +*函数功能:PWM互补工作模式下死区时间配置函数 +*入口参数: +PWM_Type_TypeDef:PWM_Type:PWM源选择 +uint8_t:PWM_RisingDeadTime:PWM死区上升时间 00-FF +uint8_t:PWM_FallingDeadTime:PWM死区下降时间 00-FF +*出口参数:void +**************************************************/ +void PWM_DeadTimeConfigEX(PWM_Type_TypeDef PWM_Type, uint8_t PWM_RisingDeadTime, uint8_t PWM_FallingDeadTime) +{ + if (PWM_Type == PWM0_Type) + { + PWMDFR = (PWM_RisingDeadTime | (PWM_FallingDeadTime << 4)); + } +} + +/***************************************************** +*函数名称:void PWM_Cmd(PWM_Type_TypeDef PWM_Type,FunctionalState NewState) +*函数功能:PWM功能开关函数 +*入口参数: +PWM_Type_TypeDef:PWM_Type:PWM类型 +FunctionalState:NewState:功能启动/关闭选择 +*出口参数:void +*****************************************************/ +void PWM_CmdEX(PWM_Type_TypeDef PWM_Type, + FunctionalState NewState) +{ + if (PWM_Type == PWM0_Type) + { + if (NewState != DISABLE) + { + PWMCON0 |= 0X80; + } + else + { + PWMCON0 &= 0X7F; + } + } + else + { + TXINX = PWM_Type; + if (NewState != DISABLE) + { + TXCON |= 0X04; + } + else + { + TXCON &= ~0X04; + } + } +} + +/***************************************************** +*函数名称:void PWM_ITConfig(FunctionalState NewState, PriorityStatus Priority) +*函数功能:PWM中断初始化 +*入口参数: +FunctionalState:NewState:中断使能/关闭选择 +PriorityStatus:Priority:中断优先级选择 +*出口参数:void +*****************************************************/ +void PWM_ITConfig(FunctionalState NewState, + PriorityStatus Priority) +{ + if (NewState != DISABLE) + { + IE1 |= 0X02; + } + else + { + IE1 &= 0XFD; + } + + if (Priority == LOW) + { + IP1 &= ~0X02; + } + else + { + IP1 |= 0X02; + } +} + +/***************************************************** +*函数名称:void PWM_IndependentModeConfigEX(PWM_OutputPin_TypeDef PWM_OutputPin, uint16_t PWM_DutyCycle, PWM_OutputState_TypeDef PWM_OutputState) +*函数功能:PWM独立模式配置 +*入口参数: +PWM_OutputPin_TypeDef:PWM_ComplementaryOutputPin:PWM通道 +uint16_t:PWM_DutyCycle:PWM占空比配置 +FunctionalState:NewState:功能启动/关闭选择 +*出口参数:void +*****************************************************/ +void PWM_IndependentModeConfigEX(PWM_OutputPin_TypeDef PWM_ComplementaryOutputPin, + uint16_t PWM_DutyCycle, + PWM_OutputState_TypeDef PWM_OutputState) +{ + PWM_IndependentModeConfig(PWM_ComplementaryOutputPin, PWM_DutyCycle); //配置占空比 + PWM_OutputStateConfig(PWM_ComplementaryOutputPin, PWM_OutputState); //IO复用PWM配置函数 + if (PWM_OutputState == ENABLE) + { + PWM_CmdEX(PWM_ComplementaryOutputPin >> 4, ENABLE); //开启PWM + } +} + +/***************************************************** +*函数名称:void PWM_ComplementaryModeConfigEX(PWM_OutputPin_TypeDef PWM_OutputPin, uint16_t PWM_DutyCycle, PWM_OutputState_TypeDef PWM_OutputState) +*函数功能:PWM互补 +*入口参数: +PWM_ComplementaryOutputPin_TypeDef:PWM_OutputPin:PWM通道 +uint16_t:PWM_DutyCycle:PWM占空比配置 +FunctionalState:NewState:功能启动/关闭选择 +*出口参数:void +*****************************************************/ +void PWM_ComplementaryModeConfigEX(PWM_ComplementaryOutputPin_TypeDef PWM_OutputPin, + uint16_t PWM_DutyCycle, + PWM_OutputState_TypeDef PWM_OutputState) +{ + PWM_ComplementaryModeConfig(PWM_OutputPin, PWM_DutyCycle); //配置占空比 + PWM_OutputStateConfig(PWM_OutputPin, PWM_OutputState); //IO复用PWM配置函数 + PWM_OutputStateConfig(PWM_OutputPin + 2, PWM_OutputState); //IO复用PWM配置函数 + if (PWM_OutputState == ENABLE) + { + PWM_CmdEX(PWM_OutputPin >> 4, ENABLE); //开启PWM + } +} + +/***************************************************** +*函数名称:PWM_GetFlagStatusEX(PWM_Type_TypeDef PWM_Type) +*函数功能:获取PWM中断标志位 +*入口参数: +PWM_Type_TypeDef:PWM_Type:PWM源选择 +*出口参数:void +*****************************************************/ +FlagStatus PWM_GetFlagStatusEX(PWM_Type_TypeDef PWM_Type) +{ + if ((PWM_Type == PWM0_Type)) + { + return (bool)(PWMCON0 & 0X40); + } + + return RESET; +} + +/***************************************************** +*函数名称:void PWM_ClearFlagEX(PWM_Type_TypeDef PWM_Type) +*函数功能:清除PWM中断 +*入口参数: +PWM_Type_TypeDef:PWM_Type:PWM源选择 +*出口参数:void +*****************************************************/ +void PWM_ClearFlagEX(PWM_Type_TypeDef PWM_Type) +{ + if ((PWM_Type == PWM0_Type)) + { + PWMCON0 &= ~0X40; + } +} + +/***************************************************** +*函数名称:FlagStatus PWM_GetFaultDetectionFlagStatus(void) +*函数功能:获得PWM故障检测标志位状态 +*入口参数: +PWM_Type_TypeDef:PWM_Type:PWM类型 +*出口参数: +FlagStatus:PWM故障检测标志位状态 +*****************************************************/ +FlagStatus PWM_GetFaultDetectionFlagStatusEX(PWM_Type_TypeDef PWM_Type) +{ + if (PWM_Type == PWM0_Type) + { + return (bool)(PWMFLT & 0X40); + } + return RESET; +} + +/***************************************************** +*函数名称:void PWM_ClearFaultDetectionFlag(void) +*函数功能:清除PWM故障检测标志位状态 // !注意,处于锁存模式下,此位可软件清除 +*入口参数: +PWM_Type_TypeDef:PWM_Type:PWM类型 +*出口参数:void +*****************************************************/ +void PWM_ClearFaultDetectionFlagEX(PWM_Type_TypeDef PWM_Type) +{ + if (PWM_Type == PWM0_Type) + { + PWMFLT &= 0XBF; + } +} + +/***************************************************** +*函数名称:void PWM_FaultDetectionFunctionConfigEX(PWM_Type_TypeDef PWM_Type, FunctionalState NewState) +*函数功能:PWM故障检测功能开启/关闭-扩展版 +*入口参数: +PWM_Type_TypeDef:PWM_Type:PWM类型选择 +FunctionalState:NewState:故障检测功能开启/关闭 +*出口参数:void +*****************************************************/ +void PWM_FaultDetectionConfigEX(PWM_Type_TypeDef PWM_Type, FunctionalState NewState) +{ + if (PWM_Type == PWM0_Type) + { + if (NewState != DISABLE) + { + PWMFLT |= 0X80; + } + else + { + PWMFLT &= 0X7F; + } + } +} + +/***************************************************** +*函数名称:void PWM_FaultDetectionModeConfigEX(PWM_Type_TypeDef PWM_Type, PWM_FaultDetectionMode_TypeDef FaultDetectionMode, PWM_FaultDetectionVoltageSelect_TypeDef FaultDetectionVoltageSelect, PWM_FaultDetectionWaveFilteringTime_TypeDef FaultDetectionWaveFilteringTime) +*函数功能:PWM故障检测模式设置 +*入口参数: +PWM_Type_TypeDef:PWM_Type:PWM类型选择 +PWM_FaultDetectionMode_TypeDef:FaultDetectionMode:故障检测功能模式设置: 立即模式/锁存模式 +PWM_FaultDetectionVoltageSelect_TypeDef:FaultDetectionVoltageSelect:故障检测电平选择 +PWM_FaultDetectionWaveFilteringTime_TypeDef:FaultDetectionWaveFilteringTime:故障检测输入信号滤波时间选择 +*出口参数:void +*****************************************************/ +void PWM_FaultDetectionModeConfigEX(PWM_Type_TypeDef PWM_Type, + PWM_FaultDetectionMode_TypeDef FaultDetectionMode, + PWM_FaultDetectionVoltageSelect_TypeDef FaultDetectionVoltageSelect, + PWM_FaultDetectionWaveFilteringTime_TypeDef FaultDetectionWaveFilteringTime) +{ + if (PWM_Type == PWM0_Type) + { + PWMFLT = (PWMFLT & 0XC0) | FaultDetectionMode | FaultDetectionVoltageSelect | + FaultDetectionWaveFilteringTime; + } +} + +/***************************************************** +*函数名称:void PWM_ITConfigEX(PWM_Type_TypeDef PWM_Type,FunctionalState NewState, PriorityStatus Priority) +*函数功能:PWM中断配置函数-扩展版 +*入口参数: +PWM_Type_TypeDef:PWM_Type:PWM源选择 +FunctionalState:NewState:中断使能/关闭选择 +PriorityStatus:Priority:中断优先级选择 +*出口参数:void +*****************************************************/ +void PWM_ITConfigEX(PWM_Type_TypeDef PWM_Type, FunctionalState NewState, PriorityStatus Priority) +{ + + if ((PWM_Type == PWM0_Type)) + { + PWM_ITConfig(NewState, Priority); + } + else + { + TXINX = PWM_Type; + + if (NewState == DISABLE) + { + ET2 = 0; + } + else + { + ET2 = 1; + } + + if (Priority == LOW) + { + IPT2 = 0; + } + else + { + IPT2 = 1; + } + } +} + +#endif +/******************* (C) COPYRIGHT 2020 SinOne Microelectronics *****END OF FILE****/ \ No newline at end of file diff --git a/CFG/SC92F8363B/Keil_Mould/FWLib/SC92F_Lib/src/sc92f_pwr.c b/CFG/SC92F8363B/Keil_Mould/FWLib/SC92F_Lib/src/sc92f_pwr.c new file mode 100644 index 0000000..285df16 --- /dev/null +++ b/CFG/SC92F8363B/Keil_Mould/FWLib/SC92F_Lib/src/sc92f_pwr.c @@ -0,0 +1,62 @@ +//************************************************************ +// Copyright (c) 深圳市赛元微电子有限公司 +// 文件名称 : sc92f_pwr.c +// 作者 : +// 模块功能 : PWR固件库函数C文件 +// 局部函数列表: +// 最后更正日期: 2020/8/18 +// 版本 : V1.0 +// 说明 :本文件仅适用于赛元92F系列单片机 +//************************************************************* +#include "sc92f_pwr.h" + +/************************************************** +*函数名称:void PWR_DeInit(void) +*函数功能:PWR相关寄存器复位至缺省值 +*入口参数:void +*出口参数:void +**************************************************/ +void PWR_DeInit(void) +{ + PCON &= 0XFC; +} + +/************************************************** +*函数名称:void PWR_EnterSTOPMode(void) +*函数功能:MCU进入STOP模式 +*入口参数:void +*出口参数:void +**************************************************/ +void PWR_EnterSTOPMode(void) +{ + PCON |= 0X02; + _nop_(); + _nop_(); + _nop_(); + _nop_(); + _nop_(); + _nop_(); + _nop_(); + _nop_(); +} + +/************************************************** +*函数名称:void PWR_EnterIDLEMode(void) +*函数功能:MCU进入IDLE模式 +*入口参数:void +*出口参数:void +**************************************************/ +void PWR_EnterIDLEMode(void) +{ + PCON |= 0X01; + _nop_(); + _nop_(); + _nop_(); + _nop_(); + _nop_(); + _nop_(); + _nop_(); + _nop_(); +} + +/******************* (C) COPYRIGHT 2020 SinOne Microelectronics *****END OF FILE****/ \ No newline at end of file diff --git a/CFG/SC92F8363B/Keil_Mould/FWLib/SC92F_Lib/src/sc92f_ssi.c b/CFG/SC92F8363B/Keil_Mould/FWLib/SC92F_Lib/src/sc92f_ssi.c new file mode 100644 index 0000000..8399abf --- /dev/null +++ b/CFG/SC92F8363B/Keil_Mould/FWLib/SC92F_Lib/src/sc92f_ssi.c @@ -0,0 +1,420 @@ +//************************************************************ +// Copyright (c) 深圳市赛元微电子有限公司 +// 文件名称 : sc92f_ssi.c +// 作者 : +// 模块功能 : SSI固件库函数C文件 +// 局部函数列表: +// 最后更正日期: 2021/08/20 +// 版本 : V1.10001 +// 说明 : +//************************************************************* + +#include "sc92f_ssi.h" + +#if defined (SC92F854x) || defined (SC92F754x) ||defined (SC92F844xB) || defined (SC92F744xB)||defined (SC92F84Ax_2) || defined (SC92F74Ax_2)\ + || defined (SC92F846xB) || defined (SC92F746xB) || defined (SC92F836xB) || defined (SC92F736xB) || defined (SC92F84Ax) || defined (SC92F74Ax)\ + || defined (SC92F83Ax) || defined (SC92F73Ax) || defined (SC92F7003) || defined (SC92F8003) || defined (SC92F740x) || defined (SC92F827X)\ + || defined (SC92F837X) || defined (SC92FWxx) || defined (SC93F833x) || defined (SC93F843x) || defined (SC93F743x) || defined (SC92F848x) || defined (SC92F748x)\ + || defined (SC92F859x) || defined (SC92F759x) +/************************************************** +*函数名称:void SSI_DeInit(void) +*函数功能:SSI相关寄存器复位至缺省值 +*入口参数:void +*出口参数:void +**************************************************/ +void SSI_DeInit(void) +{ + OTCON &= 0X3F; + SSCON0 = 0X00; + SSCON1 = 0X00; + SSCON2 = 0X00; + SSDAT = 0X00; + IE1 &= (~0X01); + IP1 &= (~0X01); +} + +#if defined (SC92F7003) || defined (SC92F8003) || defined (SC92F740x) +/************************************************** +*函数名称:SSI_PinSelection(SSI_PinSelection_TypeDef PinSeletion) +*函数功能:SSI引脚选择 +*入口参数: +SSI_PinSelection_TypeDef:PinSeletion:选择SSI引脚为P10P27P26或P21P22P23 +*出口参数:void +**************************************************/ +void SSI_PinSelection(SSI_PinSelection_TypeDef + PinSeletion) +{ + OTCON = OTCON & 0XDF | PinSeletion; +} +#endif + +/************************************************** +*函数名称:void SSI_SPI_Init(SPI_FirstBit_TypeDef FirstBit, SPI_BaudRatePrescaler_TypeDef BaudRatePrescaler,SPI_Mode_TypeDef Mode, + SPI_ClockPolarity_TypeDef ClockPolarity, SPI_ClockPhase_TypeDef ClockPhase,SPI_TXE_INT_TypeDef SPI_TXE_INT) +*函数功能:SPI初始化配置函数 +*入口参数: +SPI_FirstBit_TypeDef:FirstBit:优先传送位选择(MSB/LSB) +SPI_BaudRatePrescaler_TypeDef:BaudRatePrescaler:SPI时钟频率选择 +SPI_Mode_TypeDef:Mode:SPI工作模式选择 +SPI_ClockPolarity_TypeDef:ClockPolarity:SPI时钟极性选择 +SPI_ClockPhase_TypeDef:ClockPhase:SPI时钟相位选择 +SPI_TXE_INT_TypeDef:SPI_TXE_INT:发送缓存器中断允许选择 +*出口参数:void +**************************************************/ +void SSI_SPI_Init(SPI_FirstBit_TypeDef FirstBit, + SPI_BaudRatePrescaler_TypeDef BaudRatePrescaler, + SPI_Mode_TypeDef Mode, + SPI_ClockPolarity_TypeDef ClockPolarity, + SPI_ClockPhase_TypeDef ClockPhase, + SPI_TXE_INT_TypeDef SPI_TXE_INT) +{ + OTCON = (OTCON & 0X3F) | 0X40; + SSCON1 = SSCON1 & (~0X05) | FirstBit | + SPI_TXE_INT; + SSCON0 = SSCON0 & 0X80 | BaudRatePrescaler | Mode + | ClockPolarity | ClockPhase; +} + +/***************************************************** +*函数名称:void SSI_SPI_Cmd(FunctionalState NewState) +*函数功能:SPI功能开关函数 +*入口参数: +FunctionalState:NewState:功能启动/关闭选择 +*出口参数:void +*****************************************************/ +void SSI_SPI_Cmd(FunctionalState NewState) +{ + if(NewState != DISABLE) + { + SSCON0 |= 0X80; + } + else + { + SSCON0 &= (~0X80); + } +} + +/***************************************************** +*函数名称:void SSI_SPI_SendData(uint8_t Data) +*函数功能:SPI发送数据 +*入口参数: +uint8_t:Data:发送的数据 +*出口参数:void +*****************************************************/ +void SSI_SPI_SendData(uint8_t Data) +{ + SSDAT = Data; +} + +/***************************************************** +*函数名称:uint8_t SSI_SPI_ReceiveData(void) +*函数功能:获得SSDAT中的值 +*入口参数:void +*出口参数: +uint8_t:SPI接收到的8位数据 +*****************************************************/ +uint8_t SSI_SPI_ReceiveData(void) +{ + return SSDAT; +} + +/************************************************** +*函数名称:void SSI_TWI_Init(uint8_t TWI_Address) +*函数功能:TWI初始化配置函数 +*入口参数: +uint8_t:TWI_Address:TWI作为从机时7位从机地址配置 +*出口参数:void +**************************************************/ +void SSI_TWI_Init(uint8_t TWI_Address) +{ + OTCON = OTCON & 0X3F | 0X80; + SSCON1 = TWI_Address << 1; +} + +/************************************************** +*函数名称:void SSI_TWI_AcknowledgeConfig(FunctionalState NewState) +*函数功能:TWI接收应答使能函数 +*入口参数: +FunctionalState:NewState:接收应答使能/失能选择 +*出口参数:void +**************************************************/ +void SSI_TWI_AcknowledgeConfig(FunctionalState + NewState) +{ + if (NewState != DISABLE) + { + SSCON0 |= 0X08; + } + else + { + SSCON0 &= 0XF7; + } +} + +/************************************************** +*函数名称:void SSI_TWI_GeneralCallCmd(FunctionalState NewState) +*函数功能:TWI通用地址响应使能函数 +*入口参数: +FunctionalState:NewState:通用地址响应使能/失能选择 +*出口参数:void +**************************************************/ +void SSI_TWI_GeneralCallCmd(FunctionalState + NewState) +{ + if (NewState != DISABLE) + { + SSCON1 |= 0X01; + } + else + { + SSCON1 &= 0XFE; + } +} + +/************************************************** +*函数名称:FlagStatus SSI_GetTWIStatus(SSI_TWIState_TypeDef SSI_TWIState) +*函数功能:获取TWI状态机 +*入口参数: +SSI_TWIState_TypeDef:SSI_TWIState:TWI状态机状态 +*出口参数:void +**************************************************/ +FlagStatus SSI_GetTWIStatus(SSI_TWIState_TypeDef SSI_TWIState) +{ + if((SSCON0&0x07) == SSI_TWIState) + return SET; + else + return RESET; +} + +/***************************************************** +*函数名称:void SSI_TWI_Cmd(FunctionalState NewState) +*函数功能:TWI功能开关函数 +*入口参数:FunctionalState NewState 功能启动/关闭选择 +*出口参数:void +*****************************************************/ +void SSI_TWI_Cmd(FunctionalState NewState) +{ + if(NewState != DISABLE) + { + SSCON0 |= 0X80; + } + else + { + SSCON0 &= (~0X80); + } +} + +/***************************************************** +*函数名称:void SSI_TWI_SendData(uint8_t Data) +*函数功能:TWI发送数据 +*入口参数: +uint8_t:Data:发送的数据 +*出口参数:void +*****************************************************/ +void SSI_TWI_SendData(uint8_t Data) +{ + SSDAT = Data; +} + +/***************************************************** +*函数名称:uint8_t SSI_TWI_ReceiveData(void) +*函数功能:获得SSDAT中的值 +*入口参数:void +*出口参数: +uint8_t:TWI接收到的8位数据 +*****************************************************/ +uint8_t SSI_TWI_ReceiveData(void) +{ + return SSDAT; +} + +/************************************************** +*函数名称:void SSI_UART1_Init(uint32_t UART1Fsys, uint32_t BaudRate, UART1_Mode_TypeDef Mode, UART1_RX_TypeDef RxMode) +*函数功能:UART1初始化配置函数 +*入口参数: +uint32_t:UART1Fsys:系统时钟频率 +uint32_t:BaudRate:波特率 +UART1_Mode_TypeDef:Mode:UART1工作模式 +UART1_RX_TypeDef:RxMode:接收允许选择 +*出口参数:void +**************************************************/ +void SSI_UART1_Init(uint32_t UART1Fsys, + uint32_t BaudRate, UART1_Mode_TypeDef Mode, + UART1_RX_TypeDef RxMode) +{ + + #if defined (SC93F833x) || defined (SC93F843x) || defined (SC93F743x) + OTCON |= 0xC0; + SSCON0 = SSCON0 & 0X0F | Mode | RxMode; + SSCON2 = UART1Fsys / 16 / BaudRate / 256; + SSCON1 = UART1Fsys / 16 / BaudRate % 256; + + #else + OTCON |= 0xC0; + SSCON0 = SSCON0 & 0X0F | Mode | RxMode; + SSCON2 = UART1Fsys / BaudRate / 256; + SSCON1 = UART1Fsys / BaudRate % 256; + + #endif + + +} + +/***************************************************** +*函数名称:void SSI_UART1_SendData8(uint8_t Data) +*函数功能:UART1发送8位数据 +*入口参数: +uint8_t:Data:发送的数据 +*出口参数:void +*****************************************************/ +void SSI_UART1_SendData8(uint8_t Data) +{ + SSDAT = Data; +} + +/***************************************************** +*函数名称:uint8_t SSI_UART1_ReceiveData8(void) +*函数功能:获得SSDAT中的值 +*入口参数:void +*出口参数: +uint8_t:UART接收到的8位数据 +*****************************************************/ +uint8_t SSI_UART1_ReceiveData8(void) +{ + return SSDAT; +} + +/***************************************************** +*函数名称:void SSI_UART1_SendData9(uint16_t Data) +*函数功能:UART1发送9位数据 +*入口参数: +uint16_t:Data:发送的数据 +*出口参数:void +*****************************************************/ +void SSI_UART1_SendData9(uint16_t Data) +{ + uint8_t Data_9Bit; + Data_9Bit = (Data >> 8); + + if(Data_9Bit) + { + SSCON0 |= 0x08; + } + else + { + SSCON0 &= 0xf7; + } + + SSDAT = (uint8_t)Data; +} + +/***************************************************** +*函数名称:uint16_t SSI_UART1_ReceiveData9(void) +*函数功能:获得SSDAT中的值及第九位的值 +*入口参数:void +*出口参数: +uint16_t:接收到的数据 +*****************************************************/ +uint16_t SSI_UART1_ReceiveData9(void) +{ + uint16_t Data9; + Data9 = SSDAT + ((uint16_t)(SSCON0 & 0X04) << 6); + SSCON0 &= 0XFB; + return Data9; +} + +/***************************************************** +*函数名称:void SSI_ITConfig(FunctionalState NewState, PriorityStatus Priority) +*函数功能:SSI中断初始化 +*入口参数: +FunctionalState:NewState:中断使能/关闭选择 +PriorityStatus:Priority:中断优先级选择 +*出口参数:void +*****************************************************/ +void SSI_ITConfig(FunctionalState NewState, + PriorityStatus Priority) +{ + if(NewState != DISABLE) + { + IE1 |= 0x01; + } + else + { + IE1 &= 0xFE; + } + + /************************************************************/ + if(Priority != LOW) + { + IP1 |= 0x01; + } + else + { + IP1 &= 0xFE; + } +} + +/***************************************************** +*函数名称:FlagStatus SSI_GetFlagStatus(SSI_Flag_TypeDef SSI_FLAG) +*函数功能:获得SSI标志状态 +*入口参数: +SSI_Flag_TypeDef:SSI_FLAG:所需获取的标志位 +*出口参数: +FlagStatus:SSI标志位置起状态 +*****************************************************/ +FlagStatus SSI_GetFlagStatus(SSI_Flag_TypeDef + SSI_FLAG) +{ + FlagStatus bitstatus = RESET; + + if((SSI_FLAG == SPI_FLAG_SPIF) || + (SSI_FLAG == SPI_FLAG_WCOL) || + (SSI_FLAG == SPI_FLAG_TXE)) + { + if((SSI_FLAG & SSCON1) != (uint8_t)RESET) + { + bitstatus = SET; + } + else + { + bitstatus = RESET; + } + } + else + { + if((SSI_FLAG & SSCON0) != (uint8_t)RESET) + { + bitstatus = SET; + } + else + { + bitstatus = RESET; + } + } + + return bitstatus; +} + +/***************************************************** +*函数名称:void SSI_ClearFlag(SSI_Flag_TypeDef SSI_FLAG) +*函数功能:清除SSI标志状态 +*入口参数: +SSI_Flag_TypeDef:SSI_FLAG:所需清除的标志位 +*出口参数:void +*****************************************************/ +void SSI_ClearFlag(SSI_Flag_TypeDef SSI_FLAG) +{ + if((SSI_FLAG == SPI_FLAG_SPIF) || + (SSI_FLAG == SPI_FLAG_WCOL) || + (SSI_FLAG == SPI_FLAG_TXE)) + { + SSCON1 &= (~SSI_FLAG); + } + else + { + SSCON0 &= (~SSI_FLAG); + } +} +#endif + +/******************* (C) COPYRIGHT 2020 SinOne Microelectronics *****END OF FILE****/ \ No newline at end of file diff --git a/CFG/SC92F8363B/Keil_Mould/FWLib/SC92F_Lib/src/sc92f_ssi0.c b/CFG/SC92F8363B/Keil_Mould/FWLib/SC92F_Lib/src/sc92f_ssi0.c new file mode 100644 index 0000000..e9ec582 --- /dev/null +++ b/CFG/SC92F8363B/Keil_Mould/FWLib/SC92F_Lib/src/sc92f_ssi0.c @@ -0,0 +1,392 @@ +//************************************************************ +// Copyright (c) 深圳市赛元微电子有限公司 +// 文件名称 : sc92f_ssi0.c +// 作者 : +// 模块功能 : SSI0固件库函数C文件 +// 局部函数列表: +// 最后更正日期: 2021/07/23 +// 版本 : V1.10000 +// 说明 : +//************************************************************* + +#include "sc92f_ssi.h" + +#if defined (SC92F742x) || defined (SC92F7490) +/************************************************** +*函数名称:void SSI0_DeInit(void) +*函数功能:SSI0相关寄存器复位至缺省值 +*入口参数:void +*出口参数:void +**************************************************/ +void SSI0_DeInit(void) +{ + OTCON &= 0XCF; + SS0CON0 = 0X00; + SS0CON1 = 0X00; + SS0CON2 = 0X00; + SS0DAT = 0X00; + IE &= (~0X10); + IP &= (~0X10); +} + +/************************************************** +*函数名称:void SSI0_SPI_Init(SPI_FirstBit_TypeDef FirstBit, SPI_BaudRatePrescaler_TypeDef BaudRatePrescaler,SPI_Mode_TypeDef Mode, + SPI_ClockPolarity_TypeDef ClockPolarity, SPI_ClockPhase_TypeDef ClockPhase,SPI_TXE_INT_TypeDef SPI_TXE_INT) +*函数功能:SPI初始化配置函数 +*入口参数: +SPI_FirstBit_TypeDef:FirstBit:优先传送位选择(MSB/LSB) +SPI_BaudRatePrescaler_TypeDef:BaudRatePrescaler:SPI时钟频率选择 +SPI_Mode_TypeDef:Mode:SPI工作模式选择 +SPI_ClockPolarity_TypeDef:ClockPolarityLSPI时钟极性选择 +SPI_ClockPhase_TypeDef:ClockPhase:SPI时钟相位选择 +SPI_TXE_INT_TypeDef:SPI_TXE_INT:发送缓存器中断允许选择 +*出口参数:void +**************************************************/ +void SSI0_SPI_Init(SPI_FirstBit_TypeDef FirstBit, + SPI_BaudRatePrescaler_TypeDef BaudRatePrescaler, + SPI_Mode_TypeDef Mode, + SPI_ClockPolarity_TypeDef ClockPolarity, + SPI_ClockPhase_TypeDef ClockPhase, + SPI_TXE_INT_TypeDef SPI_TXE_INT) +{ + OTCON = (OTCON & 0XCF) | 0X10; + SS0CON1 = SS0CON1 & (~0X05) | FirstBit | + SPI_TXE_INT; + SS0CON0 = SS0CON0 & 0X80 | BaudRatePrescaler | + Mode | ClockPolarity | ClockPhase; +} + +/***************************************************** +*函数名称:void SSI0_SPI_Cmd(FunctionalState NewState) +*函数功能:SPI功能开关函数 +*入口参数: +FunctionalState:NewState:功能启动/关闭选择 +*出口参数:void +*****************************************************/ +void SSI0_SPI_Cmd(FunctionalState NewState) +{ + if(NewState != DISABLE) + { + SS0CON0 |= 0X80; + } + else + { + SS0CON0 &= (~0X80); + } +} + +/***************************************************** +*函数名称:void SSI0_SPI_SendData(uint8_t Data) +*函数功能:SPI发送数据 +*入口参数: +uint8_t:Data:S{PI发送的8位数据 +*出口参数:void +*****************************************************/ +void SSI0_SPI_SendData(uint8_t Data) +{ + SS0DAT = Data; +} + +/***************************************************** +*函数名称:uint8_t SSI0_SPI_ReceiveData(void) +*函数功能:获得SS0DAT中的值 +*入口参数:void +*出口参数: +uint8_t:SPI接收到的8位数据 +*****************************************************/ +uint8_t SSI0_SPI_ReceiveData(void) +{ + return SS0DAT; +} + +/************************************************** +*函数名称:void SSI0_TWI_Init(uint8_t TWI_Address) +*函数功能:TWI初始化配置函数 +*入口参数: +uint8_t:TWI_Address:TWI作为从机时7位从机地址配置 +*出口参数:void +**************************************************/ +void SSI0_TWI_Init(uint8_t TWI_Address) +{ + OTCON = OTCON & 0XCF | 0X20; + SS0CON1 = TWI_Address << 1; +} + +/************************************************** +*函数名称:void SSI0_TWI_AcknowledgeConfig(FunctionalState NewState) +*函数功能:TWI接收应答使能函数 +*入口参数: +FunctionalState:NewState:接收应答使能/失能选择 +*出口参数:void +**************************************************/ +void SSI0_TWI_AcknowledgeConfig(FunctionalState + NewState) +{ + if (NewState != DISABLE) + { + SS0CON0 |= 0X08; + } + else + { + SS0CON0 &= 0XF7; + } +} + +/************************************************** +*函数名称:void SSI0_TWI_GeneralCallCmd(FunctionalState NewState) +*函数功能:TWI通用地址响应使能函数 +*入口参数: +FunctionalState:NewState:通用地址响应使能/失能选择 +*出口参数:void +**************************************************/ +void SSI0_TWI_GeneralCallCmd(FunctionalState + NewState) +{ + if (NewState != DISABLE) + { + SS0CON1 |= 0X01; + } + else + { + SS0CON1 &= 0XFE; + } +} + +/************************************************** +*函数名称:FlagStatus SSI0_GetTWIStatus(SSI_TWIState_TypeDef SSI_TWIState) +*函数功能:获取TWI状态机 +*入口参数: +SSI_TWIState_TypeDef:SSI_TWIState:TWI状态机状态 +*出口参数:void +**************************************************/ +FlagStatus SSI0_GetTWIStatus(SSI_TWIState_TypeDef SSI_TWIState) +{ + if((SS0CON0&0x07) == SSI_TWIState) + return SET; + else + return RESET; +} + +/***************************************************** +*函数名称:void SSI0_TWI_Cmd(FunctionalState NewState) +*函数功能:TWI功能开关函数 +*入口参数: +FunctionalState:NewState:功能启动/关闭选择 +*出口参数:void +*****************************************************/ +void SSI0_TWI_Cmd(FunctionalState NewState) +{ + if(NewState != DISABLE) + { + SS0CON0 |= 0X80; + } + else + { + SS0CON0 &= (~0X80); + } +} + +/***************************************************** +*函数名称:void SSI0_TWI_SendData(uint8_t Data) +*函数功能:TWI发送数据 +*入口参数: +uint8_t:Data:TWI发送的8位数据 +*出口参数:void +*****************************************************/ +void SSI0_TWI_SendData(uint8_t Data) +{ + SS0DAT = Data; +} + +/***************************************************** +*函数名称:uint8_t SSI0_TWI_ReceiveData(void) +*函数功能:获得SS0DAT中的值 +*入口参数:void +*出口参数: +uint8_t:TWI接收到的8位数据 +*****************************************************/ +uint8_t SSI0_TWI_ReceiveData(void) +{ + return SS0DAT; +} + +/************************************************** +*函数名称:void SSI0_UART_Init(uint32_t UARTFsys, uint32_t BaudRate, UART_Mode_TypeDef Mode, UART_RX_TypeDef RxMode) +*函数功能:UART初始化配置函数 +*入口参数: +uint32_t:UARTFsys:系统时钟频率 +uint32_t:BaudRate:波特率 +UART_Mode_TypeDef:Mode:UART1工作模式 +UART_RX_TypeDef:RxMode:接收允许选择 +*出口参数:void +**************************************************/ +void SSI0_UART_Init(uint32_t UARTFsys, + uint32_t BaudRate, UART_Mode_TypeDef Mode, + UART_RX_TypeDef RxMode) +{ + OTCON |= 0x30; + SS0CON0 = SS0CON0 & 0X0F | Mode | RxMode; + SS0CON2 = UARTFsys / BaudRate / 256; + SS0CON1 = UARTFsys / BaudRate % 256; +} + +/***************************************************** +*函数名称:void SSI0_UART_SendData8(uint8_t Data) +*函数功能:UART发送8位数据 +*入口参数: +uint8_t:Data:UART发送的8位数据 +*出口参数:void +*****************************************************/ +void SSI0_UART_SendData8(uint8_t Data) +{ + SS0DAT = Data; +} + +/***************************************************** +*函数名称:uint8_t SSI0_UART_ReceiveData8(void) +*函数功能:获得SS0DAT中的值 +*入口参数:void +*出口参数: +uint8_t:UART接收到的8位数据 +*****************************************************/ +uint8_t SSI0_UART_ReceiveData8(void) +{ + return SS0DAT; +} + +/***************************************************** +*函数名称:void SSI0_UART_SendData9(uint16_t Data) +*函数功能:UART发送9位数据 +*入口参数: +Data:发送的数据 +*出口参数:void +*****************************************************/ +void SSI0_UART_SendData9(uint16_t Data) +{ + uint8_t Data_9Bit; + Data_9Bit = (Data >> 8); + + if(Data_9Bit) + { + SS0CON0 |= 0x08; + } + else + { + SS0CON0 &= 0xf7; + } + + SS0DAT = (uint8_t)Data; +} + +/***************************************************** +*函数名称:uint16_t SSI0_UART_ReceiveData9(void) +*函数功能:获得SS0DAT中的值及第九位的值 +*入口参数:void +*出口参数: +uint16_t:接收到的数据 +*****************************************************/ +uint16_t SSI0_UART_ReceiveData9(void) +{ + uint16_t Data9; + Data9 = SS0DAT + ((uint16_t)(SS0CON0 & 0X04) << + 6); + SS0CON0 &= 0XFB; + return Data9; +} + +/***************************************************** +*函数名称:void SSI0_ITConfig(FunctionalState NewState, PriorityStatus Priority) +*函数功能:SSI0中断初始化 +*入口参数: +FunctionalState:NewState:中断使能/关闭选择 +PriorityStatus:Priority:中断优先级选择 +*出口参数:void +*****************************************************/ +void SSI0_ITConfig(FunctionalState NewState, + PriorityStatus Priority) +{ + //中断使能/关闭设置 + if(NewState != DISABLE) + { + IE |= 0x10; + } + else + { + IE &= ~0x10; + } + + //中断优先级设置 + if(Priority != LOW) + { + IP |= 0x10; + } + else + { + IP &= ~0x10; + } +} + +/***************************************************** +*函数名称:FlagStatus SSI0_GetFlagStatus(SSI_Flag_TypeDef SSI_FLAG) +*函数功能:获得SSI0标志状态 +*入口参数: +SSI_Flag_TypeDef:SSI_FLAG:所需获取的标志位 +*出口参数: +FlagStatus:SSI标志位置起状态 +*****************************************************/ +FlagStatus SSI0_GetFlagStatus(SSI_Flag_TypeDef + SSI_FLAG) +{ + FlagStatus bitstatus = RESET; + + if((SSI_FLAG == SPI_FLAG_SPIF) || + (SSI_FLAG == SPI_FLAG_WCOL) || + (SSI_FLAG == SPI_FLAG_TXE)) + { + if((SSI_FLAG & SS0CON1) != (uint8_t)RESET) + { + bitstatus = SET; + } + else + { + bitstatus = RESET; + } + } + else + { + if((SSI_FLAG & SS0CON0) != (uint8_t)RESET) + { + bitstatus = SET; + } + else + { + bitstatus = RESET; + } + } + + return bitstatus; +} + +/***************************************************** +*函数名称:void SSI0_ClearFlag(SSI_Flag_TypeDef SSI_FLAG) +*函数功能:清除SSI0标志状态 +*入口参数: +SSI_Flag_TypeDef:SSI_FLAG:所需清除的标志位 +*出口参数:void +*****************************************************/ +void SSI0_ClearFlag(SSI_Flag_TypeDef SSI_FLAG) +{ + if((SSI_FLAG == SPI_FLAG_SPIF) || + (SSI_FLAG == SPI_FLAG_WCOL) || + (SSI_FLAG == SPI_FLAG_TXE)) + { + SS0CON1 &= (~SSI_FLAG); + } + else + { + SS0CON0 &= (~SSI_FLAG); + } +} +#endif + +/******************* (C) COPYRIGHT 2021 SinOne Microelectronics *****END OF FILE****/ \ No newline at end of file diff --git a/CFG/SC92F8363B/Keil_Mould/FWLib/SC92F_Lib/src/sc92f_ssi1.c b/CFG/SC92F8363B/Keil_Mould/FWLib/SC92F_Lib/src/sc92f_ssi1.c new file mode 100644 index 0000000..afb2d84 --- /dev/null +++ b/CFG/SC92F8363B/Keil_Mould/FWLib/SC92F_Lib/src/sc92f_ssi1.c @@ -0,0 +1,392 @@ +//************************************************************ +// Copyright (c) 深圳市赛元微电子有限公司 +// 文件名称 : sc92f_ssi1.c +// 作者 : +// 模块功能 : SSI1固件库函数C文件 +// 局部函数列表: +// 最后更正日期: 2021/09/06 +// 版本 : V1.0001 +// 说明 : +//************************************************************* + +#include "sc92f_ssi.h" + +#if defined (SC92F742x) || defined (SC92F7490) +/************************************************** +*函数名称:void SSI1_DeInit(void) +*函数功能:SSI1相关寄存器复位至缺省值 +*入口参数:void +*出口参数:void +**************************************************/ +void SSI1_DeInit(void) +{ + OTCON &= 0X3F; + SS1CON0 = 0X00; + SS1CON1 = 0X00; + SS1CON2 = 0X00; + SS1DAT = 0X00; + IE1 &= (~0X01); + IP1 &= (~0X01); +} + +/************************************************** +*函数名称:void SSI1_SPI_Init(SPI_FirstBit_TypeDef FirstBit, SPI_BaudRatePrescaler_TypeDef BaudRatePrescaler,SPI_Mode_TypeDef Mode, + SPI_ClockPolarity_TypeDef ClockPolarity, SPI_ClockPhase_TypeDef ClockPhase,SPI_TXE_INT_TypeDef SPI_TXE_INT) +*函数功能:SPI初始化配置函数 +*入口参数: +SPI_FirstBit_TypeDef:FirstBit:优先传送位选择(MSB/LSB) +SPI_BaudRatePrescaler_TypeDef:BaudRatePrescaler:SPI时钟频率选择 +SPI_Mode_TypeDef:Mode:SPI工作模式选择 +SPI_ClockPolarity_TypeDef:ClockPolarityLSPI时钟极性选择 +SPI_ClockPhase_TypeDef:ClockPhase:SPI时钟相位选择 +SPI_TXE_INT_TypeDef:SPI_TXE_INT:发送缓存器中断允许选择 +*出口参数:void +**************************************************/ +void SSI1_SPI_Init(SPI_FirstBit_TypeDef FirstBit, + SPI_BaudRatePrescaler_TypeDef BaudRatePrescaler, + SPI_Mode_TypeDef Mode, + SPI_ClockPolarity_TypeDef ClockPolarity, + SPI_ClockPhase_TypeDef ClockPhase, + SPI_TXE_INT_TypeDef SPI_TXE_INT) +{ + OTCON = (OTCON & 0X3F) | 0X40; + SS1CON1 = SS1CON1 & (~0X05) | FirstBit | + SPI_TXE_INT; + SS1CON0 = SS1CON0 & 0X80 | BaudRatePrescaler | + Mode | ClockPolarity | ClockPhase; +} + +/***************************************************** +*函数名称:void SSI1_SPI_Cmd(FunctionalState NewState) +*函数功能:SPI功能开关函数 +*入口参数: +FunctionalState:NewState:功能启动/关闭选择 +*出口参数:void +*****************************************************/ +void SSI1_SPI_Cmd(FunctionalState NewState) +{ + if(NewState != DISABLE) + { + SS1CON0 |= 0X80; + } + else + { + SS1CON0 &= (~0X80); + } +} + +/***************************************************** +*函数名称:void SSI1_SPI_SendData(uint8_t Data) +*函数功能:SPI发送数据 +*入口参数: +uint8_t:Data:S{PI发送的8位数据 +*出口参数:void +*****************************************************/ +void SSI1_SPI_SendData(uint8_t Data) +{ + SS1DAT = Data; +} + +/***************************************************** +*函数名称:uint8_t SSI1_SPI_ReceiveData(void) +*函数功能:获得SS1DAT中的值 +*入口参数:void +*出口参数: +uint8_t:SPI接收到的8位数据 +*****************************************************/ +uint8_t SSI1_SPI_ReceiveData(void) +{ + return SS1DAT; +} + +/************************************************** +*函数名称:void SSI1_TWI_Init(uint8_t TWI_Address) +*函数功能:TWI初始化配置函数 +*入口参数: +uint8_t:TWI_Address:TWI作为从机时7位从机地址配置 +*出口参数:void +**************************************************/ +void SSI1_TWI_Init(uint8_t TWI_Address) +{ + OTCON = OTCON & 0X3F | 0X80; + SS1CON1 = TWI_Address << 1; +} + +/************************************************** +*函数名称:void SSI1_TWI_AcknowledgeConfig(FunctionalState NewState) +*函数功能:TWI接收应答使能函数 +*入口参数: +FunctionalState:NewState:接收应答使能/失能选择 +*出口参数:void +**************************************************/ +void SSI1_TWI_AcknowledgeConfig(FunctionalState + NewState) +{ + if (NewState != DISABLE) + { + SS1CON0 |= 0X08; + } + else + { + SS1CON0 &= 0XF7; + } +} + +/************************************************** +*函数名称:void SSI1_TWI_GeneralCallCmd(FunctionalState NewState) +*函数功能:TWI通用地址响应使能函数 +*入口参数: +FunctionalState:NewState:通用地址响应使能/失能选择 +*出口参数:void +**************************************************/ +void SSI1_TWI_GeneralCallCmd(FunctionalState + NewState) +{ + if (NewState != DISABLE) + { + SS1CON1 |= 0X01; + } + else + { + SS1CON1 &= 0XFE; + } +} + +/***************************************************** +*函数名称:void SSI1_TWI_Cmd(FunctionalState NewState) +*函数功能:TWI功能开关函数 +*入口参数: +FunctionalState:NewState:功能启动/关闭选择 +*出口参数:void +*****************************************************/ +void SSI1_TWI_Cmd(FunctionalState NewState) +{ + if(NewState != DISABLE) + { + SS1CON0 |= 0X80; + } + else + { + SS1CON0 &= (~0X80); + } +} + +/************************************************** +*函数名称:FlagStatus SSI0_GetTWIStatus(SSI_TWIState_TypeDef SSI_TWIState) +*函数功能:获取TWI状态机 +*入口参数: +SSI_TWIState_TypeDef:SSI_TWIState:TWI状态机状态 +*出口参数:void +**************************************************/ +FlagStatus SSI1_GetTWIStatus(SSI_TWIState_TypeDef SSI_TWIState) +{ + if((SS1CON0&0x07) == SSI_TWIState) + return SET; + else + return RESET; +} + +/***************************************************** +*函数名称:void SSI1_TWI_SendData(uint8_t Data) +*函数功能:TWI发送数据 +*入口参数: +uint8_t:Data:TWI发送的8位数据 +*出口参数:void +*****************************************************/ +void SSI1_TWI_SendData(uint8_t Data) +{ + SS1DAT = Data; +} + +/***************************************************** +*函数名称:uint8_t SSI1_TWI_ReceiveData(void) +*函数功能:获得SS1DAT中的值 +*入口参数:void +*出口参数: +uint8_t:TWI接收到的8位数据 +*****************************************************/ +uint8_t SSI1_TWI_ReceiveData(void) +{ + return SS1DAT; +} + +/************************************************** +*函数名称:void SSI1_UART_Init(uint32_t UARTFsys, uint32_t BaudRate, UART_Mode_TypeDef Mode, UART_RX_TypeDef RxMode) +*函数功能:UART初始化配置函数 +*入口参数: +uint32_t:UARTFsys:系统时钟频率 +uint32_t:BaudRate:波特率 +UART_Mode_TypeDef:Mode:UART1工作模式 +UART_RX_TypeDef:RxMode:接收允许选择 +*出口参数:void +**************************************************/ +void SSI1_UART_Init(uint32_t UARTFsys, + uint32_t BaudRate, UART_Mode_TypeDef Mode, + UART_RX_TypeDef RxMode) +{ + OTCON |= 0xC0; + SS1CON0 = SS1CON0 & 0X0F | Mode | RxMode; + SS1CON2 = UARTFsys / BaudRate / 256; + SS1CON1 = UARTFsys / BaudRate % 256; +} + +/***************************************************** +*函数名称:void SSI1_UART_SendData8(uint8_t Data) +*函数功能:UART发送8位数据 +*入口参数: +uint8_t:Data:UART发送的8位数据 +*出口参数:void +*****************************************************/ +void SSI1_UART_SendData8(uint8_t Data) +{ + SS1DAT = Data; +} + +/***************************************************** +*函数名称:uint8_t SSI1_UART_ReceiveData8(void) +*函数功能:获得SS0DAT中的值 +*入口参数:void +*出口参数: +uint8_t:UART接收到的8位数据 +*****************************************************/ +uint8_t SSI1_UART_ReceiveData8(void) +{ + return SS1DAT; +} + +/***************************************************** +*函数名称:void SSI1_UART_SendData9(uint16_t Data) +*函数功能:UART发送9位数据 +*入口参数: +Data:发送的数据 +*出口参数:void +*****************************************************/ +void SSI1_UART_SendData9(uint16_t Data) +{ + uint8_t Data_9Bit; + Data_9Bit = (Data >> 8); + + if(Data_9Bit) + { + SS1CON0 |= 0x08; + } + else + { + SS1CON0 &= 0xf7; + } + + SS1DAT = (uint8_t)Data; +} + +/***************************************************** +*函数名称:uint16_t SSI1_UART_ReceiveData9(void) +*函数功能:获得SS1DAT中的值及第九位的值 +*入口参数:void +*出口参数: +uint16_t:接收到的数据 +*****************************************************/ +uint16_t SSI1_UART_ReceiveData9(void) +{ + uint16_t Data9; + Data9 = SS1DAT + ((uint16_t)(SS1CON0 & 0X04) << + 6); + SS1CON0 &= 0XFB; + return Data9; +} + +/***************************************************** +*函数名称:void SSI1_ITConfig(FunctionalState NewState, PriorityStatus Priority) +*函数功能:SSI1中断初始化 +*入口参数: +FunctionalState:NewState:中断使能/关闭选择 +PriorityStatus:Priority:中断优先级选择 +*出口参数:void +*****************************************************/ +void SSI1_ITConfig(FunctionalState NewState, + PriorityStatus Priority) +{ + //中断使能/关闭设置 + if(NewState != DISABLE) + { + IE1 |= 0x01; + } + else + { + IE1 &= 0xFE; + } + + //中断优先级设置 + if(Priority != LOW) + { + IP1 |= 0x01; + } + else + { + IP1 &= 0xFE; + } +} + +/***************************************************** +*函数名称:FlagStatus SSI1_GetFlagStatus(SSI_Flag_TypeDef SSI_FLAG) +*函数功能:获得SSI1标志状态 +*入口参数: +SSI_Flag_TypeDef:SSI_FLAG:所需获取的标志位 +*出口参数: +FlagStatus:SSI标志位置起状态 +*****************************************************/ +FlagStatus SSI1_GetFlagStatus(SSI_Flag_TypeDef + SSI_FLAG) +{ + FlagStatus bitstatus = RESET; + + if((SSI_FLAG == SPI_FLAG_SPIF) || + (SSI_FLAG == SPI_FLAG_WCOL) || + (SSI_FLAG == SPI_FLAG_TXE)) + { + if((SSI_FLAG & SS1CON1) != (uint8_t)RESET) + { + bitstatus = SET; + } + else + { + bitstatus = RESET; + } + } + else + { + if((SSI_FLAG & SS1CON0) != (uint8_t)RESET) + { + bitstatus = SET; + } + else + { + bitstatus = RESET; + } + } + + return bitstatus; +} + +/***************************************************** +*函数名称:void SSI1_ClearFlag(SSI_Flag_TypeDef SSI_FLAG) +*函数功能:清除SSI1标志状态 +*入口参数: +SSI_Flag_TypeDef:SSI_FLAG:所需清除的标志位 +*出口参数:void +*****************************************************/ +void SSI1_ClearFlag(SSI_Flag_TypeDef SSI_FLAG) +{ + if((SSI_FLAG == SPI_FLAG_SPIF) || + (SSI_FLAG == SPI_FLAG_WCOL) || + (SSI_FLAG == SPI_FLAG_TXE)) + { + SS1CON1 &= (~SSI_FLAG); + } + else + { + SS1CON0 &= (~SSI_FLAG); + } +} +#endif + +/******************* (C) COPYRIGHT 2018 SinOne Microelectronics *****END OF FILE****/ \ No newline at end of file diff --git a/CFG/SC92F8363B/Keil_Mould/FWLib/SC92F_Lib/src/sc92f_timer0.c b/CFG/SC92F8363B/Keil_Mould/FWLib/SC92F_Lib/src/sc92f_timer0.c new file mode 100644 index 0000000..a178d70 --- /dev/null +++ b/CFG/SC92F8363B/Keil_Mould/FWLib/SC92F_Lib/src/sc92f_timer0.c @@ -0,0 +1,165 @@ +//************************************************************ +// Copyright (c) 深圳市赛元微电子有限公司 +// 文件名称: sc92f_tiemr0.c +// 作者: 赛元应用团队 +// 模块功能: TIMER0固件库函数C文件 +// 最后更正日期: 2022年3月23日 +// 版本: V1.10002 +// 说明: +//************************************************************* + +#include "sc92f_timer0.h" + +/************************************************** +*函数名称:void TIM0_DeInit(void) +*函数功能:TIMER0相关寄存器复位至缺省值 +*入口参数:void +*出口参数:void +**************************************************/ +void TIM0_DeInit(void) +{ + TMOD &= 0XF0; + TCON &= 0XCD; + TMCON &= 0XFE; + TH0 = 0X00; + TL0 = 0X00; + ET0 = 0; + IPT0 = 0; +} + +/************************************************** +*函数名称:void TIM0_TimeBaseInit(TIM0_PresSel_TypeDef TIM0_PrescalerSelection, TIM0_CountMode_TypeDef TIM0_CountMode) +*函数功能:TIMER0基本设置配置函数 +*入口参数: +TIM0_PresSel_TypeDef:TIM0_PrescalerSelection:预分频选择 +TIM0_CountMode_TypeDef:TIM0_CountMode:计数/定时模式选择 +*出口参数:void +**************************************************/ +void TIM0_TimeBaseInit(TIM0_PresSel_TypeDef + TIM0_PrescalerSelection, + TIM0_CountMode_TypeDef TIM0_CountMode) +{ + if(TIM0_PrescalerSelection == + TIM0_PRESSEL_FSYS_D12) + { + TMCON &= 0XFE; + } + else + if(TIM0_PrescalerSelection == + TIM0_PRESSEL_FSYS_D1) + { + TMCON |= 0X01; + } + + if(TIM0_CountMode == TIM0_MODE_TIMER) + { + TMOD &= 0xFB; + } + else + if(TIM0_CountMode == TIM0_MODE_COUNTER) + { + TMOD |= 0x04; + } +} + +/************************************************** +*函数名称:void TIM0_WorkMode0Config(uint16_t TIM0_SetCounter) +*函数功能:TIMER0工作模式0配置函数 +*入口参数: +uint16_t:TIM0_SetCounter:配置计数初值 +*出口参数:void +**************************************************/ +void TIM0_WorkMode0Config(uint16_t + TIM0_SetCounter) +{ + TMOD &= 0XFC; + TL0 = (uint8_t)TIM0_SetCounter; + TH0 = (TIM0_SetCounter >> 5); +} + +/************************************************** +*函数名称:void TIM0_WorkMode1Config(uint16_t TIM0_SetCounter) +*函数功能:TIMER0工作模式1配置函数 +*入口参数: +uint16_t:TIM0_SetCounter:配置计数初值 +*出口参数:void +**************************************************/ +void TIM0_WorkMode1Config(uint16_t + TIM0_SetCounter) +{ + TMOD &= 0XFC; + TMOD |= 0X01; + TL0 = TIM0_SetCounter % 256; + TH0 = TIM0_SetCounter / 256; +} + +/************************************************** +*函数名称:void TIM0_WorkMode2Config(uint8_t TIM0_SetCounter) +*函数功能:TIMER0工作模式2配置函数 +*入口参数: +uint8_t:TIM0_SetCounter:配置计数初值 +*出口参数:void +**************************************************/ +void TIM0_WorkMode2Config(uint8_t TIM0_SetCounter) +{ + TMOD &= 0XFC; + TMOD |= 0X02; + TL0 = TIM0_SetCounter; + TH0 = TIM0_SetCounter; +} + +/************************************************** +*函数名称:void TIM0_WorkModeConfig(TIM0_WorkMode_TypeDef TIM0_WorkMode, uint16_t TIM0_SetCounter1, uint16_t TIM0_SetCounter2) +*函数功能:TIMER0工作模式配置函数 +*入口参数: +TIM0_WorkMode_TypeDef:TIM0_WorkMode:TIMER0工作模式选择 +uint16_t:TIM0_SetCounter1:TIMER0计数初值配置1 +uint16_t:TIM0_SetCounter2:TIMER0计数初值配置2 +*出口参数:void +**************************************************/ +void TIM0_WorkModeConfig(TIM0_WorkMode_TypeDef + TIM0_WorkMode, uint16_t TIM0_SetCounter1, + uint16_t TIM0_SetCounter2) +{ + switch (TIM0_WorkMode) + { + case TIM0_WORK_MODE0: + TIM0_WorkMode0Config(TIM0_SetCounter1); + break; + + case TIM0_WORK_MODE1: + TIM0_WorkMode1Config(TIM0_SetCounter1); + break; + + case TIM0_WORK_MODE2: + TIM0_WorkMode2Config(TIM0_SetCounter1); + break; + + case TIM0_WORK_MODE3: + TIM0_WorkMode3Config(TIM0_SetCounter1, + TIM0_SetCounter2); + break; + default: + break; + } +} + +/************************************************** +*函数名称:void TIM0_WorkMode3Config(uint8_t TIM0_SetCounter, uint8_t TIM1_SetCounter) +*函数功能:TIMER0工作模式3配置函数 +*入口参数: +uint8_t:TIM0_SetCounter:配置TIMER0_TL0计数初值 +uint8_t:TIM1_SetCounter +配置TIMER0_TH0计数初值 +*出口参数:void +**************************************************/ +void TIM0_WorkMode3Config(uint8_t TIM0_SetCounter, + uint8_t TIM1_SetCounter) +{ + TMOD |= 0X03; + TL0 = TIM0_SetCounter; + TH0 = TIM1_SetCounter; +} + + +/******************* (C) COPYRIGHT 2020 SinOne Microelectronics *****END OF FILE****/ \ No newline at end of file diff --git a/CFG/SC92F8363B/Keil_Mould/FWLib/SC92F_Lib/src/sc92f_timer1.c b/CFG/SC92F8363B/Keil_Mould/FWLib/SC92F_Lib/src/sc92f_timer1.c new file mode 100644 index 0000000..cc1974b --- /dev/null +++ b/CFG/SC92F8363B/Keil_Mould/FWLib/SC92F_Lib/src/sc92f_timer1.c @@ -0,0 +1,140 @@ +//************************************************************ +// Copyright (c) 深圳市赛元微电子有限公司 +// 文件名称: sc92f_timer1.c +// 作者: 赛元应用团队 +// 模块功能: TIMER1固件库函数C文件 +// 局部函数列表: +// 最后更正日期: 2022年3月23日 +// 版本: V1.10001 +// 说明:该文件仅适用于SC92F系列芯片 +//************************************************************* +#include "sc92f_timer1.h" + +/************************************************** +*函数名称:void TIM1_DeInit(void) +*函数功能:TIMER1相关寄存器复位至缺省值 +*入口参数:void +*出口参数:void +**************************************************/ +void TIM1_DeInit(void) +{ + TMOD &= 0X0F; + TCON &= 0X37; + TMCON &= 0XFD; + TH1 = 0X00; + TL1 = 0X00; + ET1 = 0; + IPT1 = 0; +} + +/************************************************** +*函数名称:void TIM1_TimeBaseInit(TIM1_PresSel_TypeDef TIM1_PrescalerSelection, TIM1_CountMode_TypeDef TIM1_CountMode) +*函数功能:TIMER1基本设置配置函数 +*入口参数: +TIM1_PresSel_TypeDef:TIM1_PrescalerSelection:预分频选择 +TIM1_CountMode_TypeDef:TIM1_CountMode:计数/定时模式选择 +*出口参数:void +**************************************************/ +void TIM1_TimeBaseInit(TIM1_PresSel_TypeDef TIM1_PrescalerSelection, + TIM1_CountMode_TypeDef TIM1_CountMode) +{ + //判断是否需要进行分频 + if(TIM1_PrescalerSelection == TIM1_PRESSEL_FSYS_D12) + { + TMCON &= 0xFD; + } + else if(TIM1_PrescalerSelection == TIM1_PRESSEL_FSYS_D1) + { + TMCON |= 0x02; + } + + //TIM1工作模式 + if(TIM1_CountMode == TIM1_MODE_TIMER) + { + TMOD &= 0xBF; + } + else if(TIM1_CountMode == TIM1_MODE_COUNTER) + { + TMOD |= 0x40; + } +} + +/************************************************** +*函数名称:void TIM1_WorkMode0Config(uint16_t TIM1_SetCounter) +*函数功能:TIMER1工作模式0配置函数 +*入口参数: +uint16_t:TIM1_SetCounter:配置计数初值 +*出口参数:void +**************************************************/ +void TIM1_WorkMode0Config(uint16_t + TIM1_SetCounter) +{ + TMOD &= 0XCF; + TL1 = (uint8_t)TIM1_SetCounter; + TH1 = (TIM1_SetCounter >> 5); +} + +/************************************************** +*函数名称:void TIM1_WorkMode1Config(uint16_t TIM1_SetCounter) +*函数功能:TIMER1工作模式1配置函数 +*入口参数: +uint16_t:TIM1_SetCounter:配置计数初值 +*出口参数:void +**************************************************/ +void TIM1_WorkMode1Config(uint16_t + TIM1_SetCounter) +{ + TMOD &= 0XCF; + TMOD |= 0X10; + TL1 = TIM1_SetCounter % 256; + TH1 = TIM1_SetCounter / 256; +} + +/************************************************** +*函数名称:void TIM1_WorkMode2Config(uint8_t TIM1_SetCounter) +*函数功能:TIMER1工作模式2配置函数 +*入口参数: +uint8_t:TIM1_SetCounter:配置计数初值 +*出口参数:void +**************************************************/ +void TIM1_WorkMode2Config(uint8_t TIM1_SetCounter) +{ + TMOD &= 0XCF; + TMOD |= 0X20; + TL1 = TIM1_SetCounter; + TH1 = TIM1_SetCounter; +} + +/************************************************** +*函数名称:void TIM1_WorkModeConfig(TIM1_WorkMode_TypeDef TIM1_WorkMode, uint16_t TIM1_SetCounter) +*函数功能:TIMER1工作模式配置函数 +*入口参数: +TIM1_WorkMode_TypeDef:TIM1_WorkMode:TIMER1工作模式选择 +uint16_t:TIM1_SetCounter:TIMER1计数初值配置 +*出口参数:void +**************************************************/ +void TIM1_WorkModeConfig(TIM1_WorkMode_TypeDef + TIM1_WorkMode, uint16_t TIM1_SetCounter) +{ + switch(TIM1_WorkMode) + { + case TIM1_WORK_MODE0: + TIM1_WorkMode0Config(TIM1_SetCounter); + break; + + case TIM1_WORK_MODE1: + TIM1_WorkMode1Config(TIM1_SetCounter); + break; + + case TIM1_WORK_MODE2: + TIM1_WorkMode2Config(TIM1_SetCounter); + break; + + default: + break; + } +} + + + +/******************* (C) COPYRIGHT 2020 SinOne Microelectronics *****END OF FILE****/ \ No newline at end of file diff --git a/CFG/SC92F8363B/Keil_Mould/FWLib/SC92F_Lib/src/sc92f_timer2.c b/CFG/SC92F8363B/Keil_Mould/FWLib/SC92F_Lib/src/sc92f_timer2.c new file mode 100644 index 0000000..a9ea6a1 --- /dev/null +++ b/CFG/SC92F8363B/Keil_Mould/FWLib/SC92F_Lib/src/sc92f_timer2.c @@ -0,0 +1,541 @@ +//************************************************************ +// Copyright (c) 娣卞湷甯傝禌鍏冨井鐢靛瓙鏈夐檺鍏徃 +// 鏂囦欢鍚嶇О: sc92f_timer2.c +// 浣滆: 璧涘厓搴旂敤鍥㈤槦 +// 妯″潡鍔熻兘: TIMER2鍥轰欢搴撳嚱鏁癈鏂囦欢 +// 鏈鍚庢洿姝f棩鏈: 2022骞3鏈23鏃 +// 鐗堟湰: V1.10004 +// 璇存槑: 璇ユ枃浠朵粎閫傜敤浜嶴C92F绯诲垪鑺墖 +//************************************************************* + +#include "sc92f_timer2.h" + +#if !defined (SC92L853x) && !defined(SC92L753x) + +/************************************************** +*鍑芥暟鍚嶇О:void TIM2_DeInit(void) +*鍑芥暟鍔熻兘:TIMER2鐩稿叧瀵勫瓨鍣ㄥ浣嶈嚦缂虹渷鍊 +*鍏ュ彛鍙傛暟:void +*鍑哄彛鍙傛暟:void +**************************************************/ +void TIM2_DeInit(void) +{ + T2CON = 0X00; +#if !defined (SC92F730x) && !defined (SC92F827X) && !defined (SC92F837X) && !defined (SC92F725X) && !defined (SC92F735X) + T2MOD = 0X00; +#endif + TMCON &= 0XFB; + TH2 = 0X00; + TL2 = 0X00; + RCAP2H = 0X00; + RCAP2L = 0X00; + ET2 = 0; + IPT2 = 0; +} + +/************************************************** +*鍑芥暟鍚嶇О:void TIM2_TimeBaseInit(TIM2_PresSel_TypeDef TIM2_PrescalerSelection,TIM2_CountMode_TypeDef TIM2_CountMode, TIM2_CountDirection_TypeDef TIM2_CountDirection) +*鍑芥暟鍔熻兘:TIMER2鍩烘湰璁剧疆閰嶇疆鍑芥暟 +*鍏ュ彛鍙傛暟: +TIM2_PresSel_TypeDef:TIM2_PrescalerSelection:棰勫垎棰戦夋嫨 +TIM2_CountMode_TypeDef:TIM2_CountMode:璁℃暟/瀹氭椂妯″紡閫夋嫨 +TIM2_CountDirection_TypeDef:TIM2_CountDirection:璁℃暟鏂瑰悜閫夋嫨 +*鍑哄彛鍙傛暟:void +**************************************************/ +void TIM2_TimeBaseInit(TIM2_PresSel_TypeDef + TIM2_PrescalerSelection, + TIM2_CountMode_TypeDef TIM2_CountMode, + TIM2_CountDirection_TypeDef TIM2_CountDirection) +{ + if(TIM2_PrescalerSelection == TIM2_PRESSEL_FSYS_D12) + { + TMCON &= 0XFB; + } + else if(TIM2_PrescalerSelection == TIM2_PRESSEL_FSYS_D1) + { + TMCON |= 0X04; + } + + + +#if !defined (SC92F730x) && !defined (SC92F827X) && !defined (SC92F837X) && !defined (SC92F725X) && !defined (SC92F735X)\ + && !defined (SC92F825X) && !defined (SC92F835X) + + if(TIM2_CountDirection == TIM2_COUNTDIRECTION_UP) + { + T2MOD &= 0XFE; + } + else if(TIM2_CountDirection == + TIM2_COUNTDIRECTION_DOWN_UP) + { + T2MOD |= 0X01; + } + + if(TIM2_CountMode == TIM2_MODE_TIMER) + { + T2CON &= 0XFD; + } + else if(TIM2_CountMode == TIM2_MODE_COUNTER) + { + T2CON |= 0X02; + } + + +#else + TIM2_CountMode = 1; + TIM2_CountDirection = 0; +#endif + +} + + +/************************************************** +*鍑芥暟鍚嶇О:void TIM2_WorkMode1Config(uint16_t TIM2_SetCounter) +*鍑芥暟鍔熻兘:TIMER2宸ヤ綔妯″紡1閰嶇疆鍑芥暟 +*鍏ュ彛鍙傛暟: +uint16_t:TIM2_SetCounter:閰嶇疆璁℃暟鍒濆 +*鍑哄彛鍙傛暟:void +**************************************************/ +void TIM2_WorkMode1Config(uint16_t + TIM2_SetCounter) +{ + RCAP2L = TIM2_SetCounter % 256; + RCAP2H = TIM2_SetCounter / 256; + TL2 = RCAP2L; + TH2 = RCAP2H; +} + +/************************************************** +*鍑芥暟鍚嶇О:void TIM2_WorkModeConfig(TIM2_WorkMode_TypeDef TIM2_WorkMode, uint16_t TIM2_SetCounter) +*鍑芥暟鍔熻兘:TIMER2宸ヤ綔妯″紡閰嶇疆鍑芥暟 +*鍏ュ彛鍙傛暟: +TIM2_WorkMode_TypeDef:TIM2_WorkMode:TIMER2宸ヤ綔妯″紡閫夋嫨 +uint16_t:TIM2_SetCounter:TIMER2璁℃暟鍒濆奸厤缃 +*鍑哄彛鍙傛暟:void +**************************************************/ +void TIM2_WorkModeConfig(TIM2_WorkMode_TypeDef + TIM2_WorkMode, uint16_t TIM2_SetCounter) +{ + switch(TIM2_WorkMode) + { + case TIM2_WORK_MODE1: + TIM2_WorkMode1Config(TIM2_SetCounter); + break; +#if !defined (SC92F730x) && !defined (SC92F827X) && !defined (SC92F837X) && !defined (SC92F725X) && !defined (SC92F735X) && !defined (SC92F725X) + case TIM2_WORK_MODE0: + TIM2_WorkMode0Config(TIM2_SetCounter); + break; + + case TIM2_WORK_MODE3: + TIM2_WorkMode3Config(TIM2_SetCounter); + break; +#endif + default: + break; + } +} + +#if !defined (SC92F730x) && !defined (SC92F827X) && !defined (SC92F837X) && !defined (SC92F725X) && !defined (SC92F735X) +/************************************************** +*鍑芥暟鍚嶇О:void TIM2_WorkMode0Config(uint16_t TIM2_SetCounter) +*鍑芥暟鍔熻兘:TIMER2宸ヤ綔妯″紡0閰嶇疆鍑芥暟 +*鍏ュ彛鍙傛暟: +uint16_t:TIM2_SetCounter:閰嶇疆璁℃暟鍒濆 +*鍑哄彛鍙傛暟:void +**************************************************/ +void TIM2_WorkMode0Config(uint16_t + TIM2_SetCounter) +{ + T2CON |= 0x09; + TL2 = TIM2_SetCounter % 256; + TH2 = TIM2_SetCounter / 256; +} + +/************************************************** +*鍑芥暟鍚嶇О:void TIM2_WorkMode3Config(uint16_t TIM2_SetCounter) +*鍑芥暟鍔熻兘:TIMER2宸ヤ綔妯″紡3閰嶇疆鍑芥暟 +*鍏ュ彛鍙傛暟: +uint16_t:TIM2_SetCounter:閰嶇疆璁℃暟鍒濆 +*鍑哄彛鍙傛暟:void +**************************************************/ +void TIM2_WorkMode3Config(uint16_t + TIM2_SetCounter) +{ + RCAP2L = TIM2_SetCounter % 256; + RCAP2H = TIM2_SetCounter / 256; + T2MOD |= 0X02; +} + +/***************************************************** +*鍑芥暟鍚嶇О:void TIM2_SetEXEN2(FunctionalState NewState) +*鍑芥暟鍔熻兘:TIMER2_EXEN2閰嶇疆鍑芥暟 +*鍏ュ彛鍙傛暟: +FunctionalState:NewState:EXEN2浣胯兘閫夋嫨 +*鍑哄彛鍙傛暟:void +*****************************************************/ +void TIM2_SetEXEN2(FunctionalState NewState) +{ + if(NewState == DISABLE) + { + EXEN2 = 0; + } + else + { + EXEN2 = 1; + } +} +#endif + +/***************************************************** +*鍑芥暟鍚嶇О:void TIM2_Cmd(FunctionalState NewState) +*鍑芥暟鍔熻兘:TIMER2鍔熻兘寮鍏冲嚱鏁 +*鍏ュ彛鍙傛暟: +FunctionalState:NewState:鍔熻兘鍚姩/鍏抽棴閫夋嫨 +*鍑哄彛鍙傛暟:void +*****************************************************/ +void TIM2_Cmd(FunctionalState NewState) +{ + if(NewState == DISABLE) + { + TR2 = 0; + } + else + { + TR2 = 1; + } +} + +/***************************************************** +*鍑芥暟鍚嶇О:void TIM2_ITConfig(FunctionalState NewState, PriorityStatus Priority) +*鍑芥暟鍔熻兘:TIMER2涓柇鍒濆鍖 +*鍏ュ彛鍙傛暟: +FunctionalState:NewState:涓柇浣胯兘/鍏抽棴閫夋嫨 +PriorityStatus:Priority:涓柇浼樺厛绾ч夋嫨 +*鍑哄彛鍙傛暟:void +*****************************************************/ +void TIM2_ITConfig(FunctionalState NewState, + PriorityStatus Priority) +{ + if(NewState == DISABLE) + { + ET2 = 0; + } + else + { + ET2 = 1; + } + + /************************************************************/ + if(Priority == LOW) + { + IPT2 = 0; + } + else + { + IPT2 = 1; + } +} + +/***************************************************** +*鍑芥暟鍚嶇О:FlagStatus TIM2_GetFlagStatus(void) +*鍑芥暟鍔熻兘:鑾峰緱TIMER2涓柇鏍囧織鐘舵 +*鍏ュ彛鍙傛暟:void +*鍑哄彛鍙傛暟: +FlagStatus:TIMER2涓柇鏍囧織鐘舵 +*****************************************************/ +FlagStatus TIM2_GetFlagStatus(TIM2_Flag_TypeDef + TIM2_Flag) +{ + FlagStatus status = RESET; + + if((TIM2_Flag & T2CON) != (uint8_t)RESET) + { + status = SET; + } + else + { + status = RESET; + } + + return status; +} + +/***************************************************** +*鍑芥暟鍚嶇О:void TIM2_ClearFlag(void) +*鍑芥暟鍔熻兘:娓呴櫎TIMER2涓柇鏍囧織鐘舵 +*鍏ュ彛鍙傛暟:void +*鍑哄彛鍙傛暟:void +*****************************************************/ +void TIM2_ClearFlag(TIM2_Flag_TypeDef TIM2_Flag) +{ + T2CON &= (~TIM2_Flag); +} + +#else + +/************************************************** +*鍑芥暟鍚嶇О:void TIM2_DeInit(void) +*鍑芥暟鍔熻兘:TIMER2鐩稿叧瀵勫瓨鍣ㄥ浣嶈嚦鍒濆鍊 +*鍏ュ彛鍙傛暟:void +*鍑哄彛鍙傛暟:void +**************************************************/ +void TIM2_DeInit() +{ + TXINX = 0x02; //TIMER2閫夋嫨 + TXCON = 0X00; + TXMOD = 0X00; + RCAPXH = 0X00; + RCAPXL = 0X00; + THX = 0X00; + TLX = 0X00; + IE1 &= 0X3F; + IP1 &= 0X3F; + ET2 = 0; + IPT2 = 0; +} + +/************************************************** +*鍑芥暟鍚嶇О:void TIM2_PrescalerSelection(TIM2_PresSel_TypeDef TIM2_PrescalerSelection) +*鍑芥暟鍔熻兘:TIMER2 棰勫垎棰戦夋嫨 +*鍏ュ彛鍙傛暟: +TIM2_PresSel_TypeDef:TIM2_PrescalerSelection:棰勫垎棰戦夋嫨 +*鍑哄彛鍙傛暟:void +**************************************************/ +void TIM2_PrescalerSelection(TIM2_PresSel_TypeDef TIM2_PrescalerSelection) +{ + TXINX = 0x02; + + if (TIM2_PrescalerSelection == TIM2_PRESSEL_FSYS_D12) + { + TXMOD &= 0X7F; + } + else if (TIM2_PrescalerSelection == TIM2_PRESSEL_FSYS_D1) + { + TXMOD |= 0X80; + } +} + +/************************************************** +*鍑芥暟鍚嶇О:void TIM2_TimeBaseInit(TIM2_CountMode_TypeDef TIM2_CountMode, TIM2_CountDirection_TypeDef TIM2_CountDirection) +*鍑芥暟鍔熻兘:TIM2鍩烘湰璁剧疆閰嶇疆鍑芥暟 +*鍏ュ彛鍙傛暟: +TIM2_CountMode_TypeDef:TIM2_CountMode:璁℃暟/瀹氭椂妯″紡閫夋嫨 +TIM2_CountDirection_TypeDef:TIM2_CountDirection:璁℃暟鏂瑰悜閫夋嫨 +*鍑哄彛鍙傛暟:void +**************************************************/ +void TIM2_TimeBaseInit(TIM2_PresSel_TypeDef TIM2_PrescalerSelection, + TIM2_CountMode_TypeDef TIM2_CountMode, + TIM2_CountDirection_TypeDef TIM2_CountDirection) +{ + TXINX = 0x02; + + TXMOD &= 0X7F; + TXMOD = TIM2_PrescalerSelection<<7; + + if (TIM2_CountMode == TIM2_MODE_TIMER) + { + TXCON &= 0XFD; + } + else if (TIM2_CountMode == TIM2_MODE_COUNTER) + { + TXCON |= 0X02; + } + + if (TIM2_CountDirection == TIM2_COUNTDIRECTION_UP) + { + TXMOD &= 0XFE; + } + else if (TIM2_CountDirection == TIM2_COUNTDIRECTION_DOWN_UP) + { + TXMOD |= 0X01; + } +} + +/************************************************** +*鍑芥暟鍚嶇О:void TIM2_WorkMode0Config(uint16_t TIM2_SetCounter) +*鍑芥暟鍔熻兘:TIMER2宸ヤ綔妯″紡0閰嶇疆鍑芥暟 +*鍏ュ彛鍙傛暟: +uint16_t:TIM2_SetCounter:閰嶇疆璁℃暟鍒濆 +*鍑哄彛鍙傛暟:void +**************************************************/ +void TIM2_WorkMode0Config(uint16_t TIM2_SetCounter) +{ + TXINX = 0x02; + CP = 1; + TLX = TIM2_SetCounter % 256; + THX = TIM2_SetCounter / 256; +} + +/************************************************** +*鍑芥暟鍚嶇О:void TIM2_WorkMode1Config(uint16_t TIM2_SetCounter) +*鍑芥暟鍔熻兘:TIMER2宸ヤ綔妯″紡1閰嶇疆鍑芥暟 +*鍏ュ彛鍙傛暟: +uint16_t:TIM2_SetCounter:閰嶇疆璁℃暟鍒濆 +*鍑哄彛鍙傛暟:void +**************************************************/ +void TIM2_WorkMode1Config(uint16_t TIM2_SetCounter) +{ + TXINX = 0x02; + RCAPXL = TIM2_SetCounter % 256; + RCAPXH = TIM2_SetCounter / 256; + + TLX = RCAPXL; + THX = RCAPXH; +} + +/************************************************** +*鍑芥暟鍚嶇О:void TIM2_WorkMode3Config(uint16_t TIM2_SetCounter) +*鍑芥暟鍔熻兘:TIMER2宸ヤ綔妯″紡3閰嶇疆鍑芥暟 +*鍏ュ彛鍙傛暟: +uint16_t:TIM2_SetCounter:閰嶇疆璁℃暟鍒濆 +*鍑哄彛鍙傛暟:void +**************************************************/ +void TIM2_WorkMode3Config(uint16_t TIM2_SetCounter) +{ + TXINX = 0x02; + RCAPXL = TIM2_SetCounter % 256; + RCAPXH = TIM2_SetCounter / 256; + TXMOD |= 0X02; +} +/************************************************** +*鍑芥暟鍚嶇О:void TIM2_WorkModeConfig(TIM2_WorkMode_TypeDef TIM2_WorkMode, uint16_t TIM2_SetCounter) +*鍑芥暟鍔熻兘:TIMER2宸ヤ綔妯″紡閰嶇疆鍑芥暟 +*鍏ュ彛鍙傛暟: +TIM2_WorkMode_TypeDef:TIM2_WorkMode:TIMER2宸ヤ綔妯″紡閫夋嫨 +uint16_t:TIM2_SetCounter:TIMER2璁℃暟鍒濆奸厤缃 +*鍑哄彛鍙傛暟:void +**************************************************/ +void TIM2_WorkModeConfig(TIM2_WorkMode_TypeDef TIM2_WorkMode, uint16_t TIM2_SetCounter) +{ + switch (TIM2_WorkMode) + { + case TIM2_WORK_MODE0: + TIM2_WorkMode0Config(TIM2_SetCounter); + break; + + case TIM2_WORK_MODE1: + TIM2_WorkMode1Config(TIM2_SetCounter); + break; + + case TIM2_WORK_MODE3: + TIM2_WorkMode3Config(TIM2_SetCounter); + break; + + default: + break; + } +} +/***************************************************** +*鍑芥暟鍚嶇О:void TIM2_SetEXEN2(FunctionalState NewState) +*鍑芥暟鍔熻兘:TIMER2_EXEN2閰嶇疆鍑芥暟 +*鍏ュ彛鍙傛暟: +FunctionalState:NewState:EXEN2浣胯兘閫夋嫨 +*鍑哄彛鍙傛暟:void +*****************************************************/ +void TIM2_SetEXEN2(FunctionalState NewState) +{ + TXINX = 0x02; + + if (NewState == DISABLE) + { + EXENX = 0; + } + else + { + EXENX = 1; + } +} + +/***************************************************** +*鍑芥暟鍚嶇О:void TIM2_Cmd(FunctionalState NewState) +*鍑芥暟鍔熻兘:TIMER2鍔熻兘寮鍏冲嚱鏁 +*鍏ュ彛鍙傛暟: +FunctionalState:NewState:鍔熻兘鍚姩/鍏抽棴閫夋嫨 +*鍑哄彛鍙傛暟:void +*****************************************************/ +void TIM2_Cmd(FunctionalState NewState) +{ + TXINX = 0x02; + + if (NewState == DISABLE) + { + TRX = 0; + } + else + { + TRX = 1; + } +} + +/***************************************************** +*鍑芥暟鍚嶇О:void TIM2_ITConfig(FunctionalState NewState, PriorityStatus Priority) +*鍑芥暟鍔熻兘:TIMER2 +*鍏ュ彛鍙傛暟: +FunctionalState:NewState:涓柇浣胯兘/鍏抽棴閫夋嫨 +PriorityStatus:Priority:涓柇浼樺厛绾ч夋嫨 +*鍑哄彛鍙傛暟:void +*****************************************************/ +void TIM2_ITConfig(FunctionalState NewState, PriorityStatus Priority) +{ + TXINX = 0x02; + + if (NewState == DISABLE) + { + ET2 = 0; + } + else + { + ET2 = 1; + } + + if (Priority == LOW) + { + IPT2 = 0; + } + else + { + IPT2 = 1; + } +} + +/***************************************************** +*鍑芥暟鍚嶇О:FlagStatus TIM2_GetFlagStatus(void) +*鍑芥暟鍔熻兘:鑾峰緱TIMER2涓柇鏍囧織鐘舵 +*鍏ュ彛鍙傛暟: +TIM2_Flag_TypeDef:TIM2_Flag:TIMER2鏍囧織閫夋嫨 +*鍑哄彛鍙傛暟: +FlagStatus:TIMER2涓柇鏍囧織鐘舵 +*****************************************************/ +FlagStatus TIM2_GetFlagStatus(TIM2_Flag_TypeDef TIM2_Flag) +{ + FlagStatus status = RESET; + TXINX = 0x02; + + if ((TIM2_Flag & TXCON) != (uint8_t)RESET) + { + status = SET; + } + else + { + status = RESET; + } + + return status; +} + +/***************************************************** +*鍑芥暟鍚嶇О:void TIMX_ClearFlag(void) +*鍑芥暟鍔熻兘:娓呴櫎TIMER2涓柇鏍囧織鐘舵 +*鍏ュ彛鍙傛暟: +TIM2_Flag_TypeDef:TIM2_Flag:TIMER2鏍囧織閫夋嫨 +*鍑哄彛鍙傛暟:void +*****************************************************/ +void TIM2_ClearFlag(TIM2_Flag_TypeDef TIM2_Flag) +{ + TXINX = 0x02; + TXCON &= (~TIM2_Flag); +} + +#endif + +/******************* (C) COPYRIGHT 2020 SinOne Microelectronics *****END OF FILE****/ \ No newline at end of file diff --git a/CFG/SC92F8363B/Keil_Mould/FWLib/SC92F_Lib/src/sc92f_timer3.c b/CFG/SC92F8363B/Keil_Mould/FWLib/SC92F_Lib/src/sc92f_timer3.c new file mode 100644 index 0000000..4adab11 --- /dev/null +++ b/CFG/SC92F8363B/Keil_Mould/FWLib/SC92F_Lib/src/sc92f_timer3.c @@ -0,0 +1,280 @@ +//************************************************************ +// Copyright (c) 深圳市赛元微电子有限公司 +// 文件名称 : sc92f_timerx.c +// 作者 : +// 模块功能 : TIMER3固件库函数C文件 +// 最后更正日期: 2022/01/14 +// 版本 : V1.1000 +// 说明 :该文件仅适用于SC92F系列芯片 +//************************************************************* + +#include "sc92f_timer3.h" + +#if defined (SC92L853x) || defined (SC92L753x) +/************************************************** +*函数名称:void TIMX_DeInit(void) +*函数功能:TIMER3相关寄存器复位至初始值 +*入口参数:void +*出口参数:void +**************************************************/ +void TIM3_DeInit() +{ + TXINX = 0x03; //TIMER3 选择 + TXCON = 0X00; + TXMOD = 0X00; + RCAPXH = 0X00; + RCAPXL = 0X00; + THX = 0X00; + TLX = 0X00; + IE1 &= 0X3F; + IP1 &= 0X3F; + ET2 = 0; + IPT2 = 0; +} + +/************************************************** +*函数名称:void TIM3_PrescalerSelection(TIMX_TimerSelect_TypeDef TIMX_TimerSelect, TIMX_PresSel_TypeDef TIMX_PrescalerSelection) +*函数功能:TIMER3 预分频选择 +*入口参数: +TIM3_PresSel_TypeDef:TIM3_PrescalerSelection:预分频选择 +*出口参数:void +**************************************************/ +void TIM3_PrescalerSelection(TIM3_PresSel_TypeDef TIM3_PrescalerSelection) +{ + TXINX = 0x03; + + if(TIM3_PrescalerSelection == TIM3_PRESSEL_FSYS_D12) + { + TXMOD &= 0X7F; + } + else + if(TIM3_PrescalerSelection == TIM3_PRESSEL_FSYS_D1) + { + TXMOD |= 0X80; + } +} + +/************************************************** +*函数名称:void TIM3_WorkMode1Config(uint16_t TIM3_SetCounter) +*函数功能:TIMER3工作模式1配置函数 +*入口参数: +uint16_t TIM3_SetCounter 配置计数初值 +*出口参数:void +**************************************************/ +void TIM3_WorkMode1Config(uint16_t TIM3_SetCounter) +{ + TXINX = 0x03; + RCAPXL = TIM3_SetCounter % 256; + RCAPXH = TIM3_SetCounter / 256; + + TLX = RCAPXL; + THX = RCAPXH; +} + +/***************************************************** +*函数名称:void TIM3_Cmd(FunctionalState NewState) +*函数功能:TIMER3功能开关函数 +*入口参数: +FunctionalState:NewState:功能启动/关闭选择 +*出口参数:void +*****************************************************/ +void TIM3_Cmd(FunctionalState NewState) +{ + TXINX = 0x03; + + if (NewState == DISABLE) + { + TRX = 0; + } + else + { + TRX = 1; + } +} + +/***************************************************** +*函数名称:void TIM3_ITConfig(TIM3_TimerSelect_TypeDef TIM3_TimerSelect, FunctionalState NewState, PriorityStatus Priority) +*函数功能:TIMER3中断初始化 +*入口参数: +FunctionalState:NewState:中断使能/关闭选择 +PriorityStatus:Priority:中断优先级选择 +*出口参数:void +*****************************************************/ +void TIM3_ITConfig(FunctionalState NewState, PriorityStatus Priority) +{ + TXINX = 0x03; + + if(NewState == DISABLE) + { + IE1 &= 0XBF; + } + else + { + IE1 |= 0X40; + } + + if(Priority == LOW) + { + IP1 &= 0XBF; + } + else + { + IP1 |= 0X40; + } +} + +/***************************************************** +*函数名称:FlagStatus TIM3_GetFlagStatus(void) +*函数功能:获得TIMER3中断标志状态 +*入口参数: +TIM3_Flag_TypeDef:TIM3_Flag:TIMER3标志选择 +*出口参数: +FlagStatus:TIMER3中断标志状态 +*****************************************************/ +FlagStatus TIM3_GetFlagStatus(TIM3_Flag_TypeDef TIM3_Flag) +{ + FlagStatus status = RESET; + TXINX = 0x03; + + if((TIM3_Flag & TXCON) != (uint8_t)RESET) + { + status = SET; + } + else + { + status = RESET; + } + + return status; +} + +/***************************************************** +*函数名称:void TIM3_ClearFlag(TIM3_Flag_TypeDef TIM3_Flag) +*函数功能:清除TIMER3中断标志状态 +*入口参数: +TIM3_Flag_TypeDef:TIM3_Flag:TIMER3标志选择 +*出口参数:void +*****************************************************/ +void TIM3_ClearFlag(TIM3_Flag_TypeDef TIM3_Flag) +{ + TXINX = 0x03; + TXCON &= (~TIM3_Flag); +} + + +/************************************************** +*函数名称:void TIM3_TimeBaseInit(TIM3_CountMode_TypeDef TIM3_CountMode, TIM3_CountDirection_TypeDef TIM3_CountDirection) +*函数功能:TIM3基本设置配置函数 +*入口参数: +TIM3_CountMode_TypeDef:TIM3_CountMode:计数/定时模式选择 +TIM3_CountDirection_TypeDef:TIM3_CountDirection:计数方向选择 +*出口参数:void +**************************************************/ +void TIM3_TimeBaseInit(TIM3_CountMode_TypeDef TIM3_CountMode, + TIM3_CountDirection_TypeDef TIM3_CountDirection) +{ + TXINX = 0x03; + + if(TIM3_CountMode == TIM3_MODE_TIMER) + { + TXCON &= 0XFD; + } + else + if(TIM3_CountMode == TIM3_MODE_COUNTER) + { + TXCON |= 0X02; + } + + /************************************************************/ + if(TIM3_CountDirection == TIM3_COUNTDIRECTION_UP) + { + TXMOD &= 0XFE; + } + else + if(TIM3_CountDirection == TIM3_COUNTDIRECTION_DOWN_UP) + { + TXMOD |= 0X01; + } +} + +/************************************************** +*函数名称:void TIM3_WorkMode0Config(uint16_t TIM3_SetCounter) +*函数功能:TIMER3工作模式0配置函数 +*入口参数: +uint16_t:TIM3_SetCounter:配置计数初值 +*出口参数:void +**************************************************/ +void TIM3_WorkMode0Config(uint16_t TIM3_SetCounter) +{ + TXINX = 0x03; + CP = 1; + TLX = TIM3_SetCounter % 256; + THX = TIM3_SetCounter / 256; +} +/************************************************** +*函数名称:void TIM3_WorkMode3Config(uint16_t TIM3_SetCounter) +*函数功能:TIMER3工作模式3配置函数 +*入口参数: +uint16_t:TIM3_SetCounter:配置计数初值 +*出口参数:void +**************************************************/ +void TIM3_WorkMode3Config(uint16_t TIM3_SetCounter) +{ + TXINX = 0x03; + RCAPXL = TIM3_SetCounter % 256; + RCAPXH = TIM3_SetCounter / 256; + TXMOD |= 0X02; +} +/************************************************** +*函数名称:void TIM3_WorkModeConfig(TIM3_WorkMode_TypeDef TIM3_WorkMode, uint16_t TIM3_SetCounter) +*函数功能:TIMER3工作模式配置函数 +*入口参数: +TIM3_WorkMode_TypeDef:TIM3_WorkMode:TIMER3工作模式选择 +uint16_t:TIM3_SetCounter:TIMER3计数初值配置 +*出口参数:void +**************************************************/ +void TIM3_WorkModeConfig(TIM3_WorkMode_TypeDef TIM3_WorkMode, uint16_t TIM3_SetCounter) +{ + switch (TIM3_WorkMode) + { + case TIM3_WORK_MODE0: + TIM3_WorkMode0Config(TIM3_SetCounter); + break; + + case TIM3_WORK_MODE1: + TIM3_WorkMode1Config(TIM3_SetCounter); + break; + + case TIM3_WORK_MODE3: + TIM3_WorkMode3Config(TIM3_SetCounter); + break; + + default: + break; + } +} +/***************************************************** +*函数名称:void TIM3_SetEXEN3(FunctionalState NewState) +*函数功能:TIMER3_EXEN3配置函数 +*入口参数: +FunctionalState:NewState:EXEN3使能选择 +*出口参数:void +*****************************************************/ +void TIM3_SetEXEN3(FunctionalState NewState) +{ + TXINX = 0x03; + + if (NewState == DISABLE) + { + EXENX = 0; + } + else + { + EXENX = 1; + } +} + +#endif + +/******************* (C) COPYRIGHT 2020 SinOne Microelectronics *****END OF FILE****/ + diff --git a/CFG/SC92F8363B/Keil_Mould/FWLib/SC92F_Lib/src/sc92f_timer4.c b/CFG/SC92F8363B/Keil_Mould/FWLib/SC92F_Lib/src/sc92f_timer4.c new file mode 100644 index 0000000..6c649b7 --- /dev/null +++ b/CFG/SC92F8363B/Keil_Mould/FWLib/SC92F_Lib/src/sc92f_timer4.c @@ -0,0 +1,278 @@ +//************************************************************ +// Copyright (c) 深圳市赛元微电子有限公司 +// 文件名称 : sc92f_timer4.c +// 作者 : +// 模块功能 : TIMER4固件库函数C文件 +// 最后更正日期: 2022/01/18 +// 版本 : V1.10000 +// 说明 :该文件仅适用于SC92F系列芯片 +//************************************************************* + +#include "sc92f_timer4.h" + + +#if defined (SC92L853x) || defined (SC92L753x) +/************************************************** +*函数名称:void TIM4_DeInit(void) +*函数功能:TIMER4相关寄存器复位至缺省值 +*入口参数:void +*出口参数:void +**************************************************/ +void TIM4_DeInit() +{ + TXINX = 0x04; //TIMER4 选择 + TXCON = 0X00; + TXMOD = 0X00; + RCAPXH = 0X00; + RCAPXL = 0X00; + THX = 0X00; + TLX = 0X00; + IE1 &= 0X3F; + IP1 &= 0X3F; + ET2 = 0; + IPT2 = 0; +} + +/************************************************** +*函数名称:void TIM4_PrescalerSelection(TIM4_PresSel_TypeDef TIM4_PrescalerSelection) +*函数功能:TIMER4 预分频选择 +*入口参数: +TIM4_PresSel_TypeDef:TIM4_PrescalerSelection:预分频选择 +*出口参数:void +**************************************************/ +void TIM4_PrescalerSelection(TIM4_PresSel_TypeDef TIM4_PrescalerSelection) +{ + TXINX = 0x04; + + if (TIM4_PrescalerSelection == TIM4_PRESSEL_FSYS_D12) + { + TXMOD &= 0X7F; + } + else if (TIM4_PrescalerSelection == TIM4_PRESSEL_FSYS_D1) + { + TXMOD |= 0X80; + } +} + +/************************************************** +*函数名称:void TIM4_WorkMode1Config(uint16_t TIM4_SetCounter) +*函数功能:TIMER4工作模式1配置函数 +*入口参数: +uint16_t:TIM4_SetCounter:配置计数初值 +*出口参数:void +**************************************************/ +void TIM4_WorkMode1Config(uint16_t TIM4_SetCounter) +{ + TXINX = 0x04; + RCAPXL = TIM4_SetCounter % 256; + RCAPXH = TIM4_SetCounter / 256; + + TLX = RCAPXL; + THX = RCAPXH; +} + +/***************************************************** +*函数名称:void TIM4_Cmd(FunctionalState NewState) +*函数功能:TIMER4功能开关函数 +*入口参数: +FunctionalState:NewState:功能启动/关闭选择 +*出口参数:void +*****************************************************/ +void TIM4_Cmd(FunctionalState NewState) +{ + TXINX = 0x04; + + if (NewState == DISABLE) + { + TRX = 0; + } + else + { + TRX = 1; + } +} + +/***************************************************** +*函数名称:void TIMX_ITConfig(FunctionalState NewState, PriorityStatus Priority) +*函数功能:TIMER4中断初始化 +*入口参数: +FunctionalState:NewState:中断使能/关闭选择 +PriorityStatus:Priority:中断优先级选择 +*出口参数:void +*****************************************************/ +void TIM4_ITConfig(FunctionalState NewState, PriorityStatus Priority) +{ + TXINX = 0x04; + + if (NewState == DISABLE) + { + IE1 &= 0X7F; + } + else + { + IE1 |= 0X80; + } + + if (Priority == LOW) + { + IP1 &= 0X7F; + } + else + { + IP1 |= 0X80; + } +} + +/***************************************************** +*函数名称:FlagStatus TIM4_GetFlagStatus(TIM4_Flag_TypeDef TIM4_Flag) +*函数功能:获得TIMER4中断标志状态 +*入口参数: +TIM4_Flag_TypeDef:TIM4_Flag:TIMER4标志选择 +*出口参数: +FlagStatus:TIMER4中断标志状态 +*****************************************************/ +FlagStatus TIM4_GetFlagStatus(TIM4_Flag_TypeDef TIM4_Flag) +{ + FlagStatus status = RESET; + TXINX = 0x04; + + if ((TIM4_Flag & TXCON) != (uint8_t)RESET) + { + status = SET; + } + else + { + status = RESET; + } + + return status; +} + +/***************************************************** +*函数名称:void TIM4_ClearFlag(TIM4_Flag_TypeDef TIM4_Flag) +*函数功能:清除TIMER4中断标志状态 +*入口参数: +TIM4_Flag_TypeDef:TIM4_Flag:TIMER4标志选择 +*出口参数:void +*****************************************************/ +void TIM4_ClearFlag(TIM4_Flag_TypeDef TIM4_Flag) +{ + TXINX = 0x04; + TXCON &= (~TIM4_Flag); +} + +/************************************************** +*函数名称:void TIM4_TimeBaseInit(TIM4_CountMode_TypeDef TIM4_CountMode, TIM4_CountDirection_TypeDef TIM4_CountDirection) +*函数功能:TIM4基本设置配置函数 +*入口参数: +TIM4_CountMode_TypeDef:TIM4_CountMode:计数/定时模式选择 +TIM4_CountDirection_TypeDef:TIM4_CountDirection:计数方向选择 +*出口参数:void +**************************************************/ +void TIM4_TimeBaseInit(TIM4_CountMode_TypeDef TIM4_CountMode, + TIM4_CountDirection_TypeDef TIM4_CountDirection) +{ + TXINX = 0x04; + + if (TIM4_CountMode == TIM4_MODE_TIMER) + { + TXCON &= 0XFD; + } + else if (TIM4_CountMode == TIM4_MODE_COUNTER) + { + TXCON |= 0X02; + } + + /************************************************************/ + if (TIM4_CountDirection == TIM4_COUNTDIRECTION_UP) + { + TXMOD &= 0XFE; + } + else if (TIM4_CountDirection == TIM4_COUNTDIRECTION_DOWN_UP) + { + TXMOD |= 0X01; + } +} + +/************************************************** +*函数名称:void TIM4_WorkMode0Config(uint16_t TIM4_SetCounter) +*函数功能:TIMER4工作模式0配置函数 +*入口参数: +uint16_t:TIM4_SetCounter:配置计数初值 +*出口参数:void +**************************************************/ +void TIM4_WorkMode0Config(uint16_t TIM4_SetCounter) +{ + TXINX = 0x04; + CP = 1; + TLX = TIM4_SetCounter % 256; + THX = TIM4_SetCounter / 256; +} + +/************************************************** +*函数名称:void TIM4_WorkMode3Config(uint16_t TIM4_SetCounter) +*函数功能:TIMER2工作模式3配置函数 +*入口参数: +uint16_t:TIM2_SetCounter:配置计数初值 +*出口参数:void +**************************************************/ +void TIM4_WorkMode3Config(uint16_t TIM4_SetCounter) +{ + TXINX = 0x04; + RCAPXL = TIM4_SetCounter % 256; + RCAPXH = TIM4_SetCounter / 256; + TXMOD |= 0X02; +} + +/************************************************** +*函数名称:void TIM4_WorkModeConfig(TIM4_WorkMode_TypeDef TIM4_WorkMode, uint16_t TIM4_SetCounter) +*函数功能:TIMER4工作模式配置函数 +*入口参数: +TIM4_WorkMode_TypeDef:TIM4_WorkMode:TIMER2工作模式选择 +uint16_t:TIM4_SetCounter:TIMER2计数初值配置 +*出口参数:void +**************************************************/ +void TIM4_WorkModeConfig(TIM4_WorkMode_TypeDef TIM4_WorkMode, uint16_t TIM4_SetCounter) +{ + switch (TIM4_WorkMode) + { + case TIM4_WORK_MODE0: + TIM4_WorkMode0Config(TIM4_SetCounter); + break; + + case TIM4_WORK_MODE1: + TIM4_WorkMode1Config(TIM4_SetCounter); + break; + + case TIM4_WORK_MODE3: + TIM4_WorkMode3Config(TIM4_SetCounter); + break; + + default: + break; + } +} + +/***************************************************** +*函数名称:void TIM4_SetEXEN4(FunctionalState NewState) +*函数功能:TIMER4_EXEN4配置函数 +*入口参数: +FunctionalState:NewState:EXEN4使能选择 +*出口参数:void +*****************************************************/ +void TIM4_SetEXEN4(FunctionalState NewState) +{ + TXINX = 0x04; + + if (NewState == DISABLE) + { + EXENX = 0; + } + else + { + EXENX = 1; + } +} + +#endif +/******************* (C) COPYRIGHT 2020 SinOne Microelectronics *****END OF FILE****/ \ No newline at end of file diff --git a/CFG/SC92F8363B/Keil_Mould/FWLib/SC92F_Lib/src/sc92f_uart0.c b/CFG/SC92F8363B/Keil_Mould/FWLib/SC92F_Lib/src/sc92f_uart0.c new file mode 100644 index 0000000..b26511f --- /dev/null +++ b/CFG/SC92F8363B/Keil_Mould/FWLib/SC92F_Lib/src/sc92f_uart0.c @@ -0,0 +1,388 @@ +//************************************************************ +// Copyright (c) 深圳市赛元微电子有限公司 +// 文件名称 : sc92f_uart0.c +// 作者 : +// 模块功能 : UART0固件库函数C文件 +// 局部函数列表: +// 最后更正日期: 2022/01/01 +// 版本 : V1.10005 +// 说明 :本文件仅适用于赛元92F/93F/92L系列单片机 +//************************************************************* + +#include "sc92f_uart0.h" + +#if !defined (SC92F742x) && !defined (SC92F827X) && !defined (SC92F837X) && !defined (SC92F7490) + +/************************************************** +*函数名称:void UART0_DeInit(void) +*函数功能:UART0相关寄存器复位至缺省值 +*入口参数:void +*出口参数:void +**************************************************/ +void UART0_DeInit(void) +{ +#if defined (SC92F7003) || defined (SC92F8003) || defined (SC92F740x) + OTCON &= 0XEF; +#endif + SCON = 0X00; + PCON &= 0X7F; + IE &= 0XEF; + IP &= 0XEF; +} + +#if defined (SC92F7003) || defined (SC92F8003) || defined (SC92F740x) +/************************************************** +*函数名称:UART0_PinSelection(UART0_PinSelection_TypeDef PinSeletion) +*函数功能:UART0引脚选择 +*入口参数: +UART0_PinSelection_TypeDef:PinSeletion:选择UART0引脚为P15P16或P11P20 +*出口参数:void +**************************************************/ +void UART0_PinSelection(UART0_PinSelection_TypeDef + PinSeletion) +{ + OTCON = OTCON & 0XDF | PinSeletion; +} +#endif + +/************************************************** +*函数名称:void UART0_Init(uint32_t Uart0Fsys, uint32_t BaudRate, UART0_Mode_Typedef Mode,UART0_Clock_Typedef ClockMode, UART0_RX_Typedef RxMode) +*函数功能:UART0初始化配置函数 +*入口参数: +uint32_t:Uart0Fsys:系统时钟频率 +uint32_t:BaudRate:波特率 +UART0_Mode_Typedef:Mode:UART0工作模式 +UART0_Clock_Typedef:ClockMode:波特率时钟源(TIMER1/TIMER2) +UART0_RX_Typedef:RxMode:接收允许选择 +*出口参数:void +**************************************************/ +void UART0_Init(uint32_t Uart0Fsys, uint32_t BaudRate, + UART0_Mode_Typedef Mode, UART0_Clock_Typedef ClockMode, + UART0_RX_Typedef RxMode) +{ +#if defined (SC92F725X) || defined (SC92F735X) || defined (SC92F730x ) || defined (SC92F732X) || defined (SC93F833x) || defined (SC93F843x) || defined (SC93F743x) + { + SCON = SCON & 0X2F | Mode | RxMode; //设置UART工作模式,设置接收允许位 + + if(Mode == UART0_Mode_8B || + Mode == UART0_Mode_11B_BaudRateFix) + { + if(BaudRate == UART0_BaudRate_FsysDIV12 || + BaudRate == UART0_BaudRate_FsysDIV64) + { + PCON &= 0X7F; + } + else if(BaudRate == UART0_BaudRate_FsysDIV4 || + BaudRate == UART0_BaudRate_FsysDIV32) + { + PCON |= 0X80; + } + } + else + { + T2CON = (T2CON & 0xCF) | (ClockMode & + 0X30); //设置波特率时钟源 + + if((ClockMode & 0X70) == 0X00) + { + TMOD |= 0X20; + if(ClockMode & 0x80) + { + PCON |= 0X80; + Uart0Fsys = Uart0Fsys * 2; + } + else + { + PCON &= 0X7F; + } + + if(ClockMode & 0x0F) + { + TMCON |= 0x02; + } + else + { + TMCON &= 0xFD; + Uart0Fsys = Uart0Fsys / 12; + } + + TH1 = 256 - (Uart0Fsys / 32 / BaudRate); + TL1 = TH1; + TR1 = 1; + } + else if((ClockMode & 0X70) == 0X30) + { + if(ClockMode & 0x0F) + { + TMCON |= 0x04; + } + else + { + TMCON &= 0xFB; + Uart0Fsys = Uart0Fsys / 12; + } + + RCAP2H = (65536 - Uart0Fsys / 32 / BaudRate) / + 256; + RCAP2L = (65536 - Uart0Fsys / 32 / BaudRate) % + 256; + TR2 = 1; + } + } + } +#elif defined (SC92F848x) || defined (SC92F748x) || defined (SC92F859x) || defined (SC92F759x) + { + SCON = (SCON & 0X2F) | Mode | RxMode; //设置UART工作模式,设置接收允许位 + + if(Mode == UART0_Mode_8B) + { + if(BaudRate == UART0_BaudRate_FsysDIV12) + { + PCON &= 0X7F; + } + else if(BaudRate == UART0_BaudRate_FsysDIV4) + { + PCON |= 0X80; + } + } + else + { + T2CON = (T2CON & 0xCF) | + (ClockMode & 0x30); //设置波特率时钟源 + + if(ClockMode & 0x80) + { + PCON |= 0x80; + Uart0Fsys = Uart0Fsys / 16; + } + else + { + PCON &= 0x7F; + } + + if((ClockMode & 0x7F) == UART0_CLOCK_TIMER1) + { + TH1 = (Uart0Fsys / BaudRate) / 256; + TL1 = (Uart0Fsys / BaudRate) % 256; + TR1 = 0; + } + else if((ClockMode & 0x7F) == UART0_CLOCK_TIMER2) + { + RCAP2H = (Uart0Fsys / BaudRate) / 256; + RCAP2L = (Uart0Fsys / BaudRate) % 256; + TR2 = 1; + } + } + } +#elif defined (SC92L853x) || defined (SC92L753x) + { + SCON = (SCON & 0X2F) | Mode | RxMode; //设置UART工作模式,设置接收允许位 + + /* 如果UART0选择为8位半双工同步通信模式,串行端口在系统时钟的12分频或4分频下运行*/ + if(Mode == UART0_Mode_8B) + { + if(BaudRate == UART0_BaudRate_FsysDIV12) + { + PCON &= 0X7F; + } + else if(BaudRate == UART0_BaudRate_FsysDIV4) + { + PCON |= 0X80; + } + } + /* UART0选择模式1/3,波特率为可变 */ + else + { + TXCON = (TXCON & 0xCF) | ClockMode; //设置波特率时钟源 + + /* 模式1/3可以在系统时钟的1分频或16分频下运行 */ + if(ClockMode & 0x80) + { + PCON |= 0x80; + Uart0Fsys = Uart0Fsys / 16; + } + else + { + PCON &= 0x7F; + } + + /* 配置UART0时钟源 */ + if((ClockMode & 0x7F) == UART0_CLOCK_TIMER1)//UART0时钟源为TIMER1 + { + TH1 = (Uart0Fsys / BaudRate) / 256; + TL1 = (Uart0Fsys / BaudRate) % 256; + TR1 = 0; + } + else if((ClockMode & 0x7F) == UART0_CLOCK_TIMER2)//UART0时钟源为TIMER2 + { + RCAPXH = (Uart0Fsys / BaudRate) / 256; + RCAPXL = (Uart0Fsys / BaudRate) % 256; + TRX = 1; + } + } + } + +#else + { + SCON = (SCON & 0X2F) | Mode | + RxMode; //设置UART工作模式,设置接收允许位 + + if(Mode == UART0_Mode_8B) + { + if(BaudRate == UART0_BaudRate_FsysDIV12) + { + PCON &= 0X7F; + } + else if(BaudRate == UART0_BaudRate_FsysDIV4) + { + PCON |= 0X80; + } + } + else + { + T2CON = (T2CON & 0xCF) | + (ClockMode & 0x30); //设置波特率时钟源 + + if(ClockMode == UART0_CLOCK_TIMER1) + { + TH1 = (Uart0Fsys / BaudRate) / 256; + TL1 = (Uart0Fsys / BaudRate) % 256; + TR1 = 0; + } + else if(ClockMode == UART0_CLOCK_TIMER2) + { + RCAP2H = (Uart0Fsys / BaudRate) / 256; + RCAP2L = (Uart0Fsys / BaudRate) % 256; +#if defined (SC92F846xB) || defined (SC92F746xB) || defined (SC92F836xB) || defined (SC92F736xB)|| defined (SC92F83Ax) || defined (SC92F73Ax)|| defined (SC92F84Ax) || defined (SC92F74Ax) || defined (SC92F7003) || defined (SC92F8003) || defined (SC92F740x) + TR2 = 1; +#endif + } + } + } +#endif +} + +/***************************************************** +*函数名称:void UART0_SendData8(uint8_t Data) +*函数功能:UART0发送8位数据 +*入口参数: +uint8_t:Data:发送的数据 +*出口参数:void +*****************************************************/ +void UART0_SendData8(uint8_t Data) +{ + SBUF = Data; +} + +/************************************************** +*函数名称:uint8_t UART0_ReceiveData8(void) +*函数功能:获得SBUF中的值 +*入口参数:void +*出口参数: +uint8_t:UART接收到的8位数据 +**************************************************/ +uint8_t UART0_ReceiveData8(void) +{ + return SBUF; +} + +/***************************************************** +*函数名称:void UART0_SendData9(uint16_t Data) +*函数功能:UART0发送9位数据 +*入口参数: +uint16_t:Data:发送的数据 +*出口参数:void +*****************************************************/ +void UART0_SendData9(uint16_t Data) +{ + uint8_t Data_9Bit; + Data_9Bit = (Data >> 8); + + if(Data_9Bit) + { + SCON |= 0X08; + } + else + { + SCON &= 0XF7; + } + + SBUF = (uint8_t)Data; +} + +/************************************************** +*函数名称:uint16_t UART0_ReceiveData9(void) +*函数功能:获得SBUF中的值及第九位的值 +*入口参数:void +*出口参数: +uint16_t:UART接收到的数据 +**************************************************/ +uint16_t UART0_ReceiveData9(void) +{ + uint16_t Data9; + Data9 = SBUF + ((uint16_t)(SCON & 0X04) << 6); + SCON &= 0XFB; + return Data9; +} + +/***************************************************** +*函数名称:void UART0_ITConfig(FunctionalState NewState, PriorityStatus Priority) +*函数功能:UART0中断初始化 +*入口参数: +FunctionalState:NewState:中断使能/关闭选择 +PriorityStatus:Priority:中断优先级选择 +*出口参数:void +*****************************************************/ +void UART0_ITConfig(FunctionalState NewState, + PriorityStatus Priority) +{ + if(NewState == DISABLE) + { + EUART = 0; + } + else + { + EUART = 1; + } + + //设置中断优先级 + if(Priority == LOW) + { + IPUART = 0; + } + else + { + IPUART = 1; + } +} + +/***************************************************** +*函数名称:FlagStatus UART0_GetFlagStatus(UART0_Flag_Typedef UART0_Flag) +*函数功能:获得UART0中断标志状态 +*入口参数: +UART0_GetFlagStatus:UART0_Flag:中断标志位选择 +*出口参数: +FlagStatus:UART0中断标志位置起状态 +*****************************************************/ +//FlagStatus UART0_GetFlagStatus(UART0_Flag_Typedef +// UART0_Flag) +//{ +// return (bool)(SCON & UART0_Flag); +//} + +/***************************************************** +*函数名称:void UART0_ClearFlag(UART0_Flag_Typedef UART0_Flag) +*函数功能:清除UART0中断标志状态 +*入口参数: +UART0_Flag_Typedef;UART0_Flag:中断标志位选择 +*出口参数:void +*****************************************************/ +//void UART0_ClearFlag(UART0_Flag_Typedef +// UART0_Flag) +//{ +// SCON &= (~UART0_Flag); +//} + +#endif + +/******************* (C) COPYRIGHT 2020 SinOne Microelectronics *****END OF FILE****/ \ No newline at end of file diff --git a/CFG/SC92F8363B/Keil_Mould/FWLib/SC92F_Lib/src/sc92f_usci0.c b/CFG/SC92F8363B/Keil_Mould/FWLib/SC92F_Lib/src/sc92f_usci0.c new file mode 100644 index 0000000..16a302a --- /dev/null +++ b/CFG/SC92F8363B/Keil_Mould/FWLib/SC92F_Lib/src/sc92f_usci0.c @@ -0,0 +1,529 @@ +//************************************************************ +// Copyright (c) 深圳市赛元微电子有限公司 +// 文件名称 : sc92F_usci0.c +// 作者 : +// 模块功能 : USCI0固件库函数C文件 +// 最后更正日期: 2022/01/05 +// 版本 : V1.10000 +// 说明 :该文件仅适用于SC92F系列芯片 +//************************************************************* + +#include "sc92f_usci0.h" + +#if defined (SC92L853x) || defined (SC92L753x) +/************************************************** +*函数名称:void USCI0_DeInit(void) +*函数功能:USCI0相关寄存器复位至缺省值 +*入口参数:void +*出口参数:void +**************************************************/ +void USCI0_DeInit(void) +{ + OTCON &= 0XCF; + US0CON0 = 0X00; + US0CON1 = 0X00; + US0CON2 = 0X00; + US0CON3 = 0X00; + IE1 &= (~0X01); + IP1 &= (~0X01); +} + +/************************************************** +*函数名称:void USCI0_SPI_Init(USCI0_SPI_FirstBit_TypeDef FirstBit, USCI0_SPI_BaudRatePrescaler_TypeDef BaudRatePrescaler,USCI0_SPI_Mode_TypeDef Mode, + USCI0_SPI_ClockPolarity_TypeDef ClockPolarity, USCI0_SPI_ClockPhase_TypeDef ClockPhase,USCI0_SPI_TXE_INT_TypeDef SPI_TXE_INT,USCI0_TransmissionMode_TypeDef TransmissionMode) +*函数功能:SPI初始化配置函数 +*入口参数: +USCI0_SPI_FirstBit_TypeDef:FirstBit:优先传送位选择(MSB/LSB) +USCI0_SPI_BaudRatePrescaler_TypeDef:BaudRatePrescaler:SPI时钟频率选择 +USCI0_SPI_Mode_TypeDef:Mode:SPI工作模式选择 +USCI0_SPI_ClockPolarity_TypeDef:ClockPolarity:SPI时钟极性选择 +USCI0_SPI_ClockPhase_TypeDef:ClockPhase:SPI时钟相位选择 +USCI0_SPI_TXE_INT_TypeDef:SPI_TXE_INT:发送缓存器中断允许选择,该功能在SC92FXX1X芯片上无效 +USCI0_TransmissionMode_TypeDef:TransmissionMode:SPI传输模式选择 8/16位 +*出口参数:void +**************************************************/ +void USCI0_SPI_Init(USCI0_SPI_FirstBit_TypeDef FirstBit, + USCI0_SPI_BaudRatePrescaler_TypeDef BaudRatePrescaler, USCI0_SPI_Mode_TypeDef Mode, + USCI0_SPI_ClockPolarity_TypeDef ClockPolarity, USCI0_SPI_ClockPhase_TypeDef ClockPhase, + USCI0_SPI_TXE_INT_TypeDef SPI_TXE_INT, USCI0_TransmissionMode_TypeDef TransmissionMode) +{ + + OTCON = (OTCON & 0XCF) | 0X10; +#if defined(SC92L853x) || defined(SC92L753x) + SPI_TXE_INT = USCI0_SPI_TXE_DISINT; //SPI_TXE_INT该功能在该类芯片上无效 + US0CON1 = US0CON1 & (~0X05) | FirstBit | TransmissionMode; +#endif + US0CON0 = US0CON0 & 0X80 | BaudRatePrescaler | Mode | ClockPolarity | ClockPhase; +} + +/************************************************** +*函数名称:void USCI0_TransmissionMode(USCI0_TransmissionMode_TypeDef TransmissionMode) +*函数功能:SPI 传输模式配置函数 +*入口参数: +USCI0_TransmissionMode_TypeDef:TransmissionMode:SPI传输模式选择 8/16e位 +*出口参数:void +**************************************************/ +void USCI0_TransmissionMode(USCI0_TransmissionMode_TypeDef TransmissionMode) +{ + if (TransmissionMode == USCI0_SPI_DATA8) + { + US0CON1 &= 0xFD; + } + else + { + US0CON1 |= 0x02; + } +} + +/***************************************************** +*函数名称:void USCI0_SPI_Cmd(FunctionalState NewState) +*函数功能:SPI功能开关函数 +*入口参数: +FunctionalState:NewState:功能启动/关闭选择 +*出口参数:void +*****************************************************/ +void USCI0_SPI_Cmd(FunctionalState NewState) +{ + OTCON = (OTCON & 0XCF) | 0X10; + + if (NewState != DISABLE) + { + US0CON0 |= 0X80; + } + else + { + US0CON0 &= (~0X80); + } +} +/***************************************************** +*函数名称:void USCI0_SPI_SendData_8(uint8_t Data) +*函数功能:USCI0 SPI发送数据 +*入口参数: +uint8_t:Data:发送的数据 +*出口参数:void +*****************************************************/ +void USCI0_SPI_SendData_8(uint8_t Data) +{ + US0CON2 = Data; +} + +/***************************************************** +*函数名称:uint8_t USCI0_SPI_ReceiveData_8(void) +*函数功能:获得US0CON2中的值 +*入口参数:void +*出口参数: +uint8_t:接收到的数据 +*****************************************************/ +uint8_t USCI0_SPI_ReceiveData_8(void) +{ + return US0CON2; +} + +/***************************************************** +*函数名称:void USCI0_SPI_SendData_16(uint16_t Data) +*函数功能:US0CON2 SPI发送数据 +*入口参数: +uint16_t:Data:发送的数据 +*出口参数:void +*****************************************************/ +void USCI0_SPI_SendData_16(uint16_t Data) +{ + US0CON3 = (uint8_t)(Data >> 8); + US0CON2 = (uint8_t)Data; +} + +/***************************************************** +*函数名称:uint16_t USCI0_SPI_ReceiveData_16(void) +*函数功能:获得US0CON2中的值 +*入口参数:void +*出口参数: +uint16_t:接收的数据 +*****************************************************/ +uint16_t USCI0_SPI_ReceiveData_16(void) +{ + uint16_t SPI_data; + SPI_data = (uint16_t)((US0CON3 << 8) | US0CON2); + return SPI_data; +} + +/************************************************** +*函数名称:void USCI0_TWI_Slave_Init(uint8_t TWI_Address) +*函数功能:USCI0 TWI从机初始化配置函数 +*入口参数: +uint8_t:TWI_Address:TWI作为从机时的7位从机地址 +*出口参数:void +**************************************************/ +void USCI0_TWI_Slave_Init(uint8_t TWI_Address) +{ + OTCON = OTCON & 0XCF | 0X20; + US0CON2 = TWI_Address << 1; +} + +/************************************************** +*函数名称:void USCI0_TWI_MasterCommunicationRate(USCI0_TWI_MasterCommunicationRate_TypeDef TWI_MasterCommunicationRate) +*函数功能:USCI0 TWI主机模式下通讯速率设定 +*入口参数: +USCI0_TWI_MasterCommunicationRate_TypeDef:TWI_MasterCommunicationRate:TWI主机模式下通讯速率 +*出口参数:void +**************************************************/ +void USCI0_TWI_MasterCommunicationRate(USCI0_TWI_MasterCommunicationRate_TypeDef + TWI_MasterCommunicationRate) +{ + OTCON = OTCON & 0XCF | 0X20; + US0CON1 |= TWI_MasterCommunicationRate; +} + +/************************************************** +*函数名称:void USCI0_TWI_Start(void) +*函数功能:USCI0 TWI 起始位 +*入口参数:void +*出口参数:void +**************************************************/ +void USCI0_TWI_Start(void) +{ + US0CON1 |= 0x20; +} + +/************************************************** +*函数名称:void USCI0_TWI_MasterModeStop(void) +*函数功能:USCI0 TWI主机模式停止位 +*入口参数:void +*出口参数:void +**************************************************/ +void USCI0_TWI_MasterModeStop(void) +{ + US0CON1 |= 0x10; +} + +/************************************************** +*函数名称:void USCI0_TWI_SlaveClockExtension(void) +*函数功能:USCI0 TWI从机模式时钟延长功能位 +*入口参数: +FunctionalState:NewState:功能启动/关闭选择 +*出口参数:void +**************************************************/ +void USCI0_TWI_SlaveClockExtension(FunctionalState NewState) +{ + OTCON = OTCON & 0XCF | 0X20; + + if (NewState != DISABLE) + { + US0CON1 |= 0x40; + } + else + { + US0CON1 &= 0XBF; + } +} + +/************************************************** +*函数名称:void USCI0_TWI_AcknowledgeConfig(FunctionalState NewState) +*函数功能:TWI接收应答使能函数 +*入口参数: +FunctionalState:NewState:接收应答使能/失能选择 +*出口参数:void +**************************************************/ +void USCI0_TWI_AcknowledgeConfig(FunctionalState NewState) +{ + OTCON = OTCON & 0XCF | 0X20; + + if (NewState != DISABLE) + { + US0CON0 |= 0X08; + } + else + { + US0CON0 &= 0XF7; + } +} + +/************************************************** +*函数名称:void USCI0_TWI_GeneralCallCmd(FunctionalState NewState) +*函数功能:TWI通用地址响应使能函数 +*入口参数: +FunctionalState:NewState:通用地址响应使能/失能选择 +*出口参数:void +**************************************************/ +void USCI0_TWI_GeneralCallCmd(FunctionalState NewState) +{ + OTCON = OTCON & 0XCF | 0X20; + + if (NewState != DISABLE) + { + US0CON2 |= 0X01; + } + else + { + US0CON2 &= 0XFE; + } +} + +/***************************************************** +*函数名称:FlagStatus USCI0_GetTWIStatus(USCI0_TWIState_TypeDef USCI0_TWIState) +*函数功能:读取TWI状态 +*入口参数: +USCI0_TWIState_TypeDef:USCI0_TWIState:TWI状态类型 +*出口参数: +FlagStatus:USCI0_SC标志状态 +*****************************************************/ +FlagStatus USCI0_GetTWIStatus(USCI0_TWIState_TypeDef USCI0_TWIState) +{ + if ((US0CON0 & 0x07) == USCI0_TWIState) + return SET; + else + return RESET; +} + +/***************************************************** +*函数名称:void USCI0_TWI_Cmd(FunctionalState NewState) +*函数功能:TWI功能开关函数 +*入口参数: +FunctionalState:NewState:功能启动/关闭选择 +*出口参数:void +*****************************************************/ +void USCI0_TWI_Cmd(FunctionalState NewState) +{ + OTCON = OTCON & 0XCF | 0X20; + + if (NewState != DISABLE) + { + US0CON0 |= 0X80; + } + else + { + US0CON0 &= (~0X80); + } +} + +/***************************************************** +*函数名称:void USCI0_TWI_SendData(uint8_t Data) +*函数功能:TWI发送数据 +*入口参数: +uint8_t:Data:发送的数据 +*出口参数:void +*****************************************************/ +void USCI0_TWI_SendData(uint8_t Data) +{ + US0CON3 = Data; +} + +/***************************************************** +*函数名称:uint8_t USCI0_TWI_SendData(void) +*函数功能:获得US0CON3中的值 +*入口参数:void +*出口参数: +uint8_t:接收的数据 +*****************************************************/ +uint8_t USCI0_TWI_ReceiveData(void) +{ + return US0CON3; +} + +/************************************************** +*函数名称:void USCI0_UART_Init(uint32_t UARTFsys, uint32_t BaudRate, USCI0_UART_Mode_TypeDef Mode, USCI0_UART_RX_TypeDef RxMode) +*函数功能:UART初始化配置函数 +*入口参数: +uint32_t:UARTFsys:系统时钟频率 +uint32_t:BaudRate:波特率 +USCI0_UART_Mode_TypeDef:Mode:UART1工作模式 +USCI0_UART_RX_TypeDef:RxMode:接收允许选择 +*出口参数:void +**************************************************/ +void USCI0_UART_Init(uint32_t UARTFsys, uint32_t BaudRate, USCI0_UART_Mode_TypeDef Mode, + USCI0_UART_RX_TypeDef RxMode) +{ + OTCON |= 0x30; + US0CON0 = US0CON0 & 0X0F | Mode | RxMode; + + if (Mode == USCI0_UART_Mode_8B) + { + if (BaudRate == USCI0_UART_BaudRate_FsysDIV12) + { + US0CON0 &= 0XDF; + } + else if (BaudRate == USCI0_UART_BaudRate_FsysDIV4) + { + US0CON0 |= 0X20; + } + } + else + { + US0CON2 = UARTFsys / BaudRate / 256; + US0CON1 = UARTFsys / BaudRate % 256; + } +} + +/***************************************************** +*函数名称:void USCI0_UART_SendData8(uint8_t Data) +*函数功能:USCI0 UART1发送8位数据 +*入口参数: +uint8_t:Data:发送的数据 +*出口参数:void +*****************************************************/ +void USCI0_UART_SendData8(uint8_t Data) +{ + US0CON3 = Data; +} + +/***************************************************** +*函数名称:uint8_t USCI0_UART_ReceiveData8(void) +*函数功能:获得US0CON3中的值 +*入口参数:void +*出口参数: +uint8_t:接收的数据 +*****************************************************/ +uint8_t USCI0_UART_ReceiveData8(void) +{ + return US0CON3; +} + +/***************************************************** +*函数名称:void USCI0_UART_SendData9(uint16_t Data) +*函数功能:UART1发送9位数据 +*入口参数: +uint16_t:Data:发送的数据 +*出口参数:void +*****************************************************/ +void USCI0_UART_SendData9(uint16_t Data) +{ + uint8_t Data_9Bit; + Data_9Bit = (Data >> 8); + + if (Data_9Bit) + { + US0CON0 |= 0x08; + } + else + { + US0CON0 &= 0xf7; + } + + US0CON3 = (uint8_t)Data; +} + +/***************************************************** +*函数名称:uint16_t USCI0_UART_ReceiveData9(void) +*函数功能:获得US0CON3中的值及第九位的值 +*入口参数:void +*出口参数: +uint16_t:接收的数据 +*****************************************************/ +uint16_t USCI0_UART_ReceiveData9(void) +{ + uint16_t Data9; + Data9 = US0CON3 + ((uint16_t)(US0CON0 & 0X04) << 6); + return Data9; +} + +/***************************************************** +*函数名称:void USCI0_ITConfig(FunctionalState NewState, PriorityStatus Priority) +*函数功能:USCI0中断初始化 +*入口参数: +FunctionalState:NewState:中断使能/关闭选择 +PriorityStatus:Priority:中断优先级选择 +*出口参数:void +*****************************************************/ +void USCI0_ITConfig(FunctionalState NewState, PriorityStatus Priority) +{ + if (NewState != DISABLE) + { + IE1 |= 0x01; + } + else + { + IE1 &= 0xFE; + } + + /************************************************************/ + if (Priority != LOW) + { + IP1 |= 0x01; + } + else + { + IP1 &= 0xFE; + } +} + +/***************************************************** +*函数名称:FlagStatus USCI0_GetFlagStatus(USCI0_Flag_TypeDef USCI0_FLAG) +*函数功能:获得USCI0标志状态 +*入口参数: +USCI0_Flag_TypeDef:USCI0_FLAG:所需获取的标志位 +*出口参数: +FlagStatus:USCI0标志状态 +*****************************************************/ +FlagStatus USCI0_GetFlagStatus(USCI0_Flag_TypeDef USCI0_FLAG) +{ + FlagStatus bitstatus = RESET; +#if defined(SC92L853x) || defined(SC92L753x) + if ((USCI0_FLAG == USCI0_SPI_FLAG_SPIF) || (USCI0_FLAG == USCI0_SPI_FLAG_WCOL) || (USCI0_FLAG == USCI0_TWI_FLAG_TXRXnE)) +#endif + { + if ((USCI0_FLAG & US0CON1) != (uint8_t)RESET) + { + bitstatus = SET; + } + else + { + bitstatus = RESET; + } + } + else + { + if ((USCI0_FLAG & US0CON0) != (uint8_t)RESET) + { + bitstatus = SET; + } + else + { + bitstatus = RESET; + } + } + + return bitstatus; +} + +/***************************************************** +*函数名称:void USCI0_ClearFlag(USCI0_Flag_TypeDef USCI0_FLAG) +*函数功能:清除USCI0标志状态 +*入口参数: +USCI0_Flag_TypeDef:USCI0_FLAG:所需清除的标志位 +*出口参数:void +*****************************************************/ +void USCI0_ClearFlag(USCI0_Flag_TypeDef USCI0_FLAG) +{ +#if defined(SC92L853x) || defined(SC92L753x) + if ((USCI0_FLAG == USCI0_SPI_FLAG_SPIF) || (USCI0_FLAG == USCI0_SPI_FLAG_WCOL) || (USCI0_FLAG == USCI0_TWI_FLAG_TXRXnE)) +#endif + { + US0CON1 &= (~USCI0_FLAG); //操作寄存器US0CON1 + } + else if ((USCI0_FLAG == USCI0_UART_FLAG_TI) || (USCI0_FLAG == USCI0_UART_FLAG_RI)) + { +#if defined(SC92L853x) || defined(SC92L753x) + US0CON0 = US0CON0 & 0xFC | USCI0_FLAG;//写1清零 +#endif + } + else + { + US0CON0 &= (~USCI0_FLAG); //操作寄存器US0CON0 + } +} + +/***************************************************** +*函数名称:void USCI0_TWI_SendAddr(uint8_t Addr,USCI0_TWI_RWType RW) +*函数功能:TWI发送地址,读写类型 +*入口参数: +uint8_t:Addr:发送的地址 0~127 +USCI0_TWI_RWType:RW:读写类型 +*出口参数:void +*****************************************************/ +void USCI0_TWI_SendAddr(uint8_t Addr, USCI0_TWI_RWType RW) +{ + US0CON3 = (Addr << 1) | RW; +} + +#endif + +/******************* (C) COPYRIGHT 2020 SinOne Microelectronics *****END OF FILE****/ diff --git a/CFG/SC92F8363B/Keil_Mould/FWLib/SC92F_Lib/src/sc92f_usci1.c b/CFG/SC92F8363B/Keil_Mould/FWLib/SC92F_Lib/src/sc92f_usci1.c new file mode 100644 index 0000000..95e0773 --- /dev/null +++ b/CFG/SC92F8363B/Keil_Mould/FWLib/SC92F_Lib/src/sc92f_usci1.c @@ -0,0 +1,528 @@ +//************************************************************ +// Copyright (c) 深圳市赛元微电子有限公司 +// 文件名称 : sc92F_USCI1.c +// 作者 : +// 模块功能 : USCI1固件库函数C文件 +// 最后更正日期: 2022/01/05 +// 版本 : V1.10000 +// 说明 :该文件仅适用于SC92F系列芯片 +//************************************************************* + +#include "sc92f_usci1.h" + +#if defined (SC92L853x) || defined (SC92L753x) +/************************************************** +*函数名称:void USCI1_DeInit(void) +*函数功能:USCI1相关寄存器复位至缺省值 +*入口参数:void +*出口参数:void +**************************************************/ +void USCI1_DeInit(void) +{ + OTCON &= 0X3F; + US1CON0 = 0X00; + US1CON1 = 0X00; + US1CON2 = 0X00; + US1CON3 = 0X00; + IE2 &= (~0X01); + IP2 &= (~0X01); +} + +/************************************************** +*函数名称:void USCI1_SPI_Init(USCI1_SPI_FirstBit_TypeDef FirstBit, USCI1_SPI_BaudRatePrescaler_TypeDef BaudRatePrescaler,USCI1_SPI_Mode_TypeDef Mode, + USCI1_SPI_ClockPolarity_TypeDef ClockPolarity, USCI1_SPI_ClockPhase_TypeDef ClockPhase,USCI1_SPI_TXE_INT_TypeDef SPI_TXE_INT,USCI1_TransmissionMode_TypeDef TransmissionMode) +*函数功能:SPI初始化配置函数 +*入口参数: +USCI1_SPI_FirstBit_TypeDef:FirstBit:优先传送位选择(MSB/LSB) +USCI1_SPI_BaudRatePrescaler_TypeDef:BaudRatePrescaler:SPI时钟频率选择 +USCI1_SPI_Mode_TypeDef:Mode:SPI工作模式选择 +USCI1_SPI_ClockPolarity_TypeDef:ClockPolarity:SPI时钟极性选择 +USCI1_SPI_ClockPhase_TypeDef:ClockPhase:SPI时钟相位选择 +USCI1_SPI_TXE_INT_TypeDef:SPI_TXE_INT:发送缓存器中断允许选择,该功能在SC92FXX1X芯片上无效 +USCI1_TransmissionMode_TypeDef:TransmissionMode:SPI传输模式选择 8/16位 +*出口参数:void +**************************************************/ +void USCI1_SPI_Init(USCI1_SPI_FirstBit_TypeDef FirstBit, + USCI1_SPI_BaudRatePrescaler_TypeDef BaudRatePrescaler, USCI1_SPI_Mode_TypeDef Mode, + USCI1_SPI_ClockPolarity_TypeDef ClockPolarity, USCI1_SPI_ClockPhase_TypeDef ClockPhase, + USCI1_SPI_TXE_INT_TypeDef SPI_TXE_INT, USCI1_TransmissionMode_TypeDef TransmissionMode) +{ + + OTCON = (OTCON & 0X3F) | 0X40; +#if defined(SC92L853x) || defined(SC92L753x) + SPI_TXE_INT = USCI1_SPI_TXE_DISINT; //SPI_TXE_INT该功能无效 + US1CON1 = US1CON1 & (~0X05) | FirstBit | TransmissionMode; +#endif + US1CON0 = US1CON0 & 0X80 | BaudRatePrescaler | Mode | ClockPolarity | ClockPhase; +} + +/************************************************** +*函数名称:void USCI1_TransmissionMode(USCI1_TransmissionMode_TypeDef TransmissionMode) +*函数功能:SPI 传输模式配置函数 +*入口参数: +USCI1_TransmissionMode_TypeDef:TransmissionMode:SPI传输模式选择 8/16e位 +*出口参数:void +**************************************************/ +void USCI1_TransmissionMode(USCI1_TransmissionMode_TypeDef TransmissionMode) +{ + if (TransmissionMode == USCI1_SPI_DATA8) + { + US1CON1 &= 0xFD; + } + else + { + US1CON1 |= 0x02; + } +} + +/***************************************************** +*函数名称:void USCI1_SPI_Cmd(FunctionalState NewState) +*函数功能:SPI功能开关函数 +*入口参数: +FunctionalState:NewState:功能启动/关闭选择 +*出口参数:void +*****************************************************/ +void USCI1_SPI_Cmd(FunctionalState NewState) +{ + OTCON = (OTCON & 0X3F) | 0X40; + + if (NewState != DISABLE) + { + US1CON0 |= 0X80; + } + else + { + US1CON0 &= (~0X80); + } +} +/***************************************************** +*函数名称:void USCI1_SPI_SendData_8(uint8_t Data) +*函数功能:USCI1 SPI发送数据 +*入口参数: +uint8_t:Data:发送的数据 +*出口参数:void +*****************************************************/ +void USCI1_SPI_SendData_8(uint8_t Data) +{ + US1CON2 = Data; +} + +/***************************************************** +*函数名称:uint8_t USCI1_SPI_ReceiveData_8(void) +*函数功能:获得US1CON2中的值 +*入口参数:void +*出口参数: +uint8_t:接收的数据 +*****************************************************/ +uint8_t USCI1_SPI_ReceiveData_8(void) +{ + return US1CON2; +} + +/***************************************************** +*函数名称:void USCI1_SPI_SendData_16(uint16_t Data) +*函数功能:US1CON2 SPI发送数据 +*入口参数: +uint16_t:Data:发送的数据 +*出口参数:void +*****************************************************/ +void USCI1_SPI_SendData_16(uint16_t Data) +{ + US1CON3 = (uint8_t)(Data >> 8); + US1CON2 = (uint8_t)Data; +} + +/***************************************************** +*函数名称:uint16_t USCI1_SPI_ReceiveData_16(void) +*函数功能:获得US1CON2中的值 +*入口参数:void +*出口参数: +uint16_t:接收的数据 +*****************************************************/ +uint16_t USCI1_SPI_ReceiveData_16(void) +{ + uint16_t SPI_data; + SPI_data = (uint16_t)((US1CON3 << 8) | US1CON2); + return SPI_data; +} + +/************************************************** +*函数名称:void USCI1_TWI_Slave_Init(uint8_t TWI_Address) +*函数功能:USCI1 TWI从机初始化配置函数 +*入口参数: +uint8_t:TWI_Address:TWI作为从机时的7位从机地址 +*出口参数:void +**************************************************/ +void USCI1_TWI_Slave_Init(uint8_t TWI_Address) +{ + OTCON = OTCON & 0X3F | 0X80; + US1CON2 = TWI_Address << 1; +} + +/************************************************** +*函数名称:void USCI1_TWI_MasterCommunicationRate(USCI1_TWI_MasterCommunicationRate_TypeDef TWI_MasterCommunicationRate) +*函数功能:USCI1 TWI主机模式下通讯速率设定 +*入口参数: +USCI1_TWI_MasterCommunicationRate_TypeDef:TWI_MasterCommunicationRate:TWI主机模式下通讯速率 +*出口参数:void +**************************************************/ +void USCI1_TWI_MasterCommunicationRate(USCI1_TWI_MasterCommunicationRate_TypeDef + TWI_MasterCommunicationRate) +{ + OTCON = OTCON & 0X3F | 0X80; + US1CON1 |= TWI_MasterCommunicationRate; +} + +/************************************************** +*函数名称:void USCI1_TWI_Start(void) +*函数功能:USCI1 TWI 起始位 +*入口参数:void +*出口参数:void +**************************************************/ +void USCI1_TWI_Start(void) +{ + US1CON1 |= 0x20; +} + +/************************************************** +*函数名称:void USCI1_TWI_MasterModeStop(void) +*函数功能:USCI1 TWI主机模式停止位 +*入口参数:void +*出口参数:void +**************************************************/ +void USCI1_TWI_MasterModeStop(void) +{ + US1CON1 |= 0x10; +} + +/************************************************** +*函数名称:void USCI1_TWI_SlaveClockExtension(FunctionalState NewState) +*函数功能:USCI1 TWI从机模式时钟延长功能位 +*入口参数: +FunctionalState:NewState:使能/失能选择 +*出口参数:void +**************************************************/ +void USCI1_TWI_SlaveClockExtension(FunctionalState NewState) +{ + OTCON = OTCON & 0X3F | 0X80; + + if (NewState != DISABLE) + { + US1CON1 |= 0x40; + } + else + { + US1CON1 &= 0XBF; + } +} + +/************************************************** +*函数名称:void USCI1_TWI_AcknowledgeConfig(FunctionalState NewState) +*函数功能:TWI接收应答使能函数 +*入口参数: +FunctionalState:NewState:接收应答使能/失能选择 +*出口参数:void +**************************************************/ +void USCI1_TWI_AcknowledgeConfig(FunctionalState NewState) +{ + OTCON = OTCON & 0X3F | 0X80; + + if (NewState != DISABLE) + { + US1CON0 |= 0X08; + } + else + { + US1CON0 &= 0XF7; + } +} + +/************************************************** +*函数名称:void USCI1_TWI_GeneralCallCmd(FunctionalState NewState) +*函数功能:TWI通用地址响应使能函数 +*入口参数: +FunctionalState:NewState:接收应答使能/失能选择 +*出口参数:void +**************************************************/ +void USCI1_TWI_GeneralCallCmd(FunctionalState NewState) +{ + OTCON = OTCON & 0X3F | 0X80; + + if (NewState != DISABLE) + { + US1CON2 |= 0X01; + } + else + { + US1CON2 &= 0XFE; + } +} + +/***************************************************** +*函数名称:FlagStatus USCI1_GetTWIStatus(USCI1_TWIState_TypeDef USCI1_TWIState) +*函数功能:读取TWI状态 +*入口参数: +USCI1_TWIState_TypeDef:USCI1_TWIState:TWI状态类型 +*出口参数: +FlagStatus:USCI1_TWI标志状态 +*****************************************************/ +FlagStatus USCI1_GetTWIStatus(USCI1_TWIState_TypeDef USCI1_TWIState) +{ + if ((US1CON0 & 0x07) == USCI1_TWIState) + return SET; + else + return RESET; +} + +/***************************************************** +*函数名称:void USCI1_TWI_Cmd(FunctionalState NewState) +*函数功能:TWI功能开关函数 +*入口参数: +FunctionalState:NewState:功能启动/关闭选择 +*出口参数:void +*****************************************************/ +void USCI1_TWI_Cmd(FunctionalState NewState) +{ + OTCON = OTCON & 0X3F | 0X80; + + if (NewState != DISABLE) + { + US1CON0 |= 0X80; + } + else + { + US1CON0 &= (~0X80); + } +} + +/***************************************************** +*函数名称:void USCI1_TWI_SendData(uint8_t Data) +*函数功能:TWI发送数据 +*入口参数: +uint8_t:Data:发送的数据 +*出口参数:void +*****************************************************/ +void USCI1_TWI_SendData(uint8_t Data) +{ + US1CON3 = Data; +} + +/***************************************************** +*函数名称:uint8_t USCI1_TWI_SendData(void) +*函数功能:获得US1CON3中的值 +*入口参数:void +*出口参数: +uint8_t:接收的数据 +*****************************************************/ +uint8_t USCI1_TWI_ReceiveData(void) +{ + return US1CON3; +} + +/************************************************** +*函数名称:void USCI1_UART_Init(uint32_t UARTFsys, uint32_t BaudRate, USCI1_UART_Mode_TypeDef Mode, USCI1_UART_RX_TypeDef RxMode) +*函数功能:UART初始化配置函数 +*入口参数: +uint32_t:UARTFsys:系统时钟频率 +uint32_t:BaudRate:波特率 +USCI1_UART_Mode_TypeDef:Mode:UART1工作模式 +USCI1_UART_RX_TypeDef:RxMode:接收允许选择 +*出口参数:void +**************************************************/ +void USCI1_UART_Init(uint32_t UARTFsys, uint32_t BaudRate, USCI1_UART_Mode_TypeDef Mode, + USCI1_UART_RX_TypeDef RxMode) +{ + OTCON |= 0xC0; + US1CON0 = US1CON0 & 0X0F | Mode | RxMode; + + if (Mode == USCI1_UART_Mode_8B) + { + if (BaudRate == USCI1_UART_BaudRate_FsysDIV12) + { + US1CON0 &= 0XDF; + } + else if (BaudRate == USCI1_UART_BaudRate_FsysDIV4) + { + US1CON0 |= 0X20; + } + } + else + { + US1CON2 = UARTFsys / BaudRate / 256; + US1CON1 = UARTFsys / BaudRate % 256; + } +} + +/***************************************************** +*函数名称:void USCI1_UART_SendData8(uint8_t Data) +*函数功能:USCI1 UART1发送8位数据 +*入口参数: +uint8_t:Data:发送的数据 +*出口参数:void +*****************************************************/ +void USCI1_UART_SendData8(uint8_t Data) +{ + US1CON3 = Data; +} + +/***************************************************** +*函数名称:uint8_t USCI1_UART_ReceiveData8(void) +*函数功能:获得US1CON3中的值 +*入口参数:void +*出口参数: +uint8_t:接收的数据 +*****************************************************/ +uint8_t USCI1_UART_ReceiveData8(void) +{ + return US1CON3; +} + +/***************************************************** +*函数名称:void USCI1_UART_SendData9(uint16_t Data) +*函数功能:UART1发送9位数据 +*入口参数: +uint16_t:Data:发送的数据 +*出口参数:void +*****************************************************/ +void USCI1_UART_SendData9(uint16_t Data) +{ + uint8_t Data_9Bit; + Data_9Bit = (Data >> 8); + + if (Data_9Bit) + { + US1CON0 |= 0x08; + } + else + { + US1CON0 &= 0xf7; + } + + US1CON3 = (uint8_t)Data; +} + +/***************************************************** +*函数名称:uint16_t USCI1_UART_ReceiveData9(void) +*函数功能:获得US1CON3中的值及第九位的值 +*入口参数:void +*出口参数: +uint16_t:接收的数据 +*****************************************************/ +uint16_t USCI1_UART_ReceiveData9(void) +{ + uint16_t Data9; + Data9 = US1CON3 + ((uint16_t)(US1CON0 & 0X04) << 6); + return Data9; +} + +/***************************************************** +*函数名称:void USCI1_ITConfig(FunctionalState NewState, PriorityStatus Priority) +*函数功能:USCI1中断初始化 +*入口参数: +FunctionalState:NewState:中断使能/关闭选择 +PriorityStatus:Priority:中断优先级选择 +*出口参数:void +*****************************************************/ +void USCI1_ITConfig(FunctionalState NewState, PriorityStatus Priority) +{ + if (NewState != DISABLE) + { + IE2 |= 0x01; + } + else + { + IE2 &= 0xFE; + } + + /************************************************************/ + if (Priority != LOW) + { + IP2 |= 0x01; + } + else + { + IP2 &= 0xFE; + } +} + +/***************************************************** +*函数名称:FlagStatus USCI1_GetFlagStatus(USCI1_Flag_TypeDef USCI1_FLAG) +*函数功能:获得USCI1标志状态 +*入口参数: +USCI1_Flag_Typedef:USCI1_Flag:中断标志位选择 +*出口参数: +FlagStatus:USCI1标志状态 +*****************************************************/ +FlagStatus USCI1_GetFlagStatus(USCI1_Flag_TypeDef USCI1_FLAG) +{ + FlagStatus bitstatus = RESET; +#if defined(SC92L853x) || defined(SC92L753x) + if ((USCI1_FLAG == USCI1_SPI_FLAG_SPIF) || (USCI1_FLAG == USCI1_SPI_FLAG_WCOL) || (USCI1_FLAG == USCI1_TWI_FLAG_TXRXnE)) +#endif + { + if ((USCI1_FLAG & US1CON1) != (uint8_t)RESET) + { + bitstatus = SET; + } + else + { + bitstatus = RESET; + } + } + else + { + if ((USCI1_FLAG & US1CON0) != (uint8_t)RESET) + { + bitstatus = SET; + } + else + { + bitstatus = RESET; + } + } + + return bitstatus; +} + +/***************************************************** +*函数名称:void USCI1_ClearFlag(USCI1_Flag_TypeDef USCI1_FLAG) +*函数功能:清除USCI1标志状态 +*入口参数: +USCI1_Flag_TypeDef:USCI1_FLAG:所需清除的标志位 +*出口参数:void +*****************************************************/ +void USCI1_ClearFlag(USCI1_Flag_TypeDef USCI1_FLAG) +{ +#if defined(SC92L853x) || defined(SC92L753x) + if ((USCI1_FLAG == USCI1_SPI_FLAG_SPIF) || (USCI1_FLAG == USCI1_SPI_FLAG_WCOL) || (USCI1_FLAG == USCI1_TWI_FLAG_TXRXnE)) +#endif + { + US1CON1 &= (~USCI1_FLAG); //操作寄存器US1CON1 + } + else if ((USCI1_FLAG == USCI1_UART_FLAG_TI) || (USCI1_FLAG == USCI1_UART_FLAG_RI)) + { +#if defined(SC92L853x) || defined(SC92L753x) + US1CON0 = US1CON0 & 0xFC | USCI1_FLAG; //写1清零 +#endif + } + else + { + US1CON0 &= (~USCI1_FLAG); //操作寄存器US1CON0 + } +} + +/***************************************************** +*函数名称:void USCI1_TWI_SendAddr(uint8_t Addr,USCI1_TWI_RWType RW) +*函数功能:TWI发送地址,读写类型 +*入口参数: +uint8_t:Addr:发送的地址 0~127 +USCI1_TWI_RWType:RW:读写类型 +*出口参数:void +*****************************************************/ +void USCI1_TWI_SendAddr(uint8_t Addr, USCI1_TWI_RWType RW) +{ + US1CON3 = (Addr << 1) | RW; +} + +#endif +/******************* (C) COPYRIGHT 2020 SinOne Microelectronics *****END OF FILE****/ diff --git a/CFG/SC92F8363B/Keil_Mould/FWLib/SC92F_Lib/src/sc92f_usci2.c b/CFG/SC92F8363B/Keil_Mould/FWLib/SC92F_Lib/src/sc92f_usci2.c new file mode 100644 index 0000000..4059545 --- /dev/null +++ b/CFG/SC92F8363B/Keil_Mould/FWLib/SC92F_Lib/src/sc92f_usci2.c @@ -0,0 +1,535 @@ +//************************************************************ +// Copyright (c) 深圳市赛元微电子有限公司 +// 文件名称: sc92F_usci2.c +// 作者: 赛元应用团队 +// 模块功能: USCI2固件库函数C文件 +// 最后更正日期: 2022/01/05 +// 版本: V1.10001 +// 说明: 该文件仅适用于SC92系列芯片 +//************************************************************* + +/* 头文件引用 */ +#include "sc92f_usci2.h" + +#if defined (SC92L853x) || defined (SC92L753x) +/************************************************** +*函数名称:void USCI2_DeInit(void) +*函数功能:USCI2相关寄存器复位至缺省值 +*入口参数:void +*出口参数:void +**************************************************/ +void USCI2_DeInit(void) +{ + TMCON &= 0X3F; + US2CON0 = 0X00; + US2CON1 = 0X00; + US2CON2 = 0X00; + US2CON3 = 0X00; + IE2 &= (~0X02); + IP2 &= (~0X02); +} + +/************************************************** +*函数名称:void USCI2_SPI_Init(USCI2_SPI_FirstBit_TypeDef FirstBit, USCI2_SPI_BaudRatePrescaler_TypeDef BaudRatePrescaler,USCI2_SPI_Mode_TypeDef Mode, + USCI2_SPI_ClockPolarity_TypeDef ClockPolarity, USCI2_SPI_ClockPhase_TypeDef ClockPhase,USCI2_SPI_TXE_INT_TypeDef SPI_TXE_INT,USCI2_TransmissionMode_TypeDef TransmissionMode) +*函数功能:SPI初始化配置函数 +*入口参数: +USCI2_SPI_FirstBit_TypeDef:FirstBit:优先传送位选择(MSB/LSB) +USCI2_SPI_BaudRatePrescaler_TypeDef:BaudRatePrescaler:SPI时钟频率选择 +USCI2_SPI_Mode_TypeDef:Mode:SPI工作模式选择 +USCI2_SPI_ClockPolarity_TypeDef:ClockPolarity:SPI时钟极性选择 +USCI2_SPI_ClockPhase_TypeDef:ClockPhase:SPI时钟相位选择 +USCI2_SPI_TXE_INT_TypeDef:SPI_TXE_INT:发送缓存器中断允许选择,该功能在SC92FXX1X芯片上无效 +USCI2_TransmissionMode_TypeDef:TransmissionMode:SPI传输模式选择 8/16位 +*出口参数:void +**************************************************/ +void USCI2_SPI_Init(USCI2_SPI_FirstBit_TypeDef FirstBit, + USCI2_SPI_BaudRatePrescaler_TypeDef BaudRatePrescaler, USCI2_SPI_Mode_TypeDef Mode, + USCI2_SPI_ClockPolarity_TypeDef ClockPolarity, USCI2_SPI_ClockPhase_TypeDef ClockPhase, + USCI2_SPI_TXE_INT_TypeDef SPI_TXE_INT, USCI2_TransmissionMode_TypeDef TransmissionMode) +{ + TMCON = (TMCON & 0X3F) | 0X40; +#if defined(SC92L853x) || defined(SC92L753x) + SPI_TXE_INT = USCI2_SPI_TXE_DISINT; //SPI_TXE_INT该功能在SC92FXX1X芯片上无效 + US2CON1 = US2CON1 & (~0X05) | FirstBit | TransmissionMode; + +#endif +#if defined(SC92L853x) || defined(SC92L753x) + US2CON1 = US2CON1 & (~0X05) | FirstBit | SPI_TXE_INT | TransmissionMode; +#endif + US2CON0 = US2CON0 & 0X80 | BaudRatePrescaler | Mode | ClockPolarity | ClockPhase; +} + +/************************************************** +*函数名称:void USCI2_TransmissionMode(USCI2_TransmissionMode_TypeDef TransmissionMode) +*函数功能:SPI 传输模式配置函数 +*入口参数: +USCI2_TransmissionMode_TypeDef:TransmissionMode:SPI传输模式选择 8/16e位 +*出口参数:void +**************************************************/ +void USCI2_TransmissionMode(USCI2_TransmissionMode_TypeDef TransmissionMode) +{ + + TMCON = (TMCON & 0X3F) | 0X40; + if (TransmissionMode == USCI2_SPI_DATA8) + { + US2CON1 &= 0xFD; + } + else + { + US2CON1 |= 0x02; + } +} + +/***************************************************** +*函数名称:void USCI2_SPI_Cmd(FunctionalState NewState) +*函数功能:SPI功能开关函数 +*入口参数: +FunctionalState:NewState:功能启动/关闭选择 +*出口参数:void +*****************************************************/ +void USCI2_SPI_Cmd(FunctionalState NewState) +{ + TMCON = (TMCON & 0X3F) | 0X40; + + if (NewState != DISABLE) + { + US2CON0 |= 0X80; + } + else + { + US2CON0 &= (~0X80); + } +} + +/***************************************************** +*函数名称:void USCI2_SPI_SendData_8(uint8_t Data) +*函数功能:USCI2 SPI发送数据 +*入口参数: +uint8_t:Data:发送的数据 +*出口参数:void +*****************************************************/ +void USCI2_SPI_SendData_8(uint8_t Data) +{ + US2CON2 = Data; +} + +/***************************************************** +*函数名称:uint8_t USCI2_SPI_ReceiveData_8(void) +*函数功能:获得US2CON2中的值 +*入口参数:void +*出口参数: +uint8_t:接收的数据 +*****************************************************/ +uint8_t USCI2_SPI_ReceiveData_8(void) +{ + return US2CON2; +} + +/***************************************************** +*函数名称:void USCI2_SPI_SendData_16(uint16_t Data) +*函数功能:US2CON2 SPI发送数据 +*入口参数: +uint16_t:Data:发送的数据 +*出口参数:void +*****************************************************/ +void USCI2_SPI_SendData_16(uint16_t Data) +{ + US2CON3 = (uint8_t)(Data >> 8); + US2CON2 = (uint8_t)Data; +} + +/***************************************************** +*函数名称:uint16_t USCI2_SPI_ReceiveData_16(void) +*函数功能:获得US2CON2中的值 +*入口参数:void +*出口参数: +uint16_t:接收的数据 +*****************************************************/ +uint16_t USCI2_SPI_ReceiveData_16(void) +{ + uint16_t SPI_data; + SPI_data = (uint16_t)((US2CON3 << 8) | US2CON2); + return SPI_data; +} + +/************************************************** +*函数名称:void USCI2_TWI_Slave_Init(uint8_t TWI_Address) +*函数功能:USCI2 TWI 从机初始化配置函数 +*入口参数: +uint8_t:TWI_Address:TWI作为从机时的7位从机地址 +*出口参数:void +**************************************************/ +void USCI2_TWI_Slave_Init(uint8_t TWI_Address) +{ + TMCON = TMCON & 0X3F | 0X80; + US2CON2 = TWI_Address << 1; +} + +/************************************************** +*函数名称:void USCI2_TWI_MasterCommunicationRate(USCI2_TWI_MasterCommunicationRate_TypeDef TWI_MasterCommunicationRate) +*函数功能:USCI2 TWI主机模式下通讯速率设定 +*入口参数: +USCI2_TWI_MasterCommunicationRate_TypeDef:TWI_MasterCommunicationRate:TWI主机模式下通讯速率 +*出口参数:void +**************************************************/ +void USCI2_TWI_MasterCommunicationRate(USCI2_TWI_MasterCommunicationRate_TypeDef + TWI_MasterCommunicationRate) +{ + TMCON = TMCON & 0X3F | 0X80; //选择usci2为TWI + + US2CON1 = TWI_MasterCommunicationRate; +} + +/************************************************** +*函数名称:void USCI2_TWI_Start(void) +*函数功能:USCI2 TWI 起始位 +*入口参数:void +*出口参数:void +**************************************************/ +void USCI2_TWI_Start(void) +{ + US2CON1 |= 0x20; +} + +/************************************************** +*函数名称:void USCI2_TWI_MasterModeStop(void) +*函数功能:USCI2 TWI主机模式停止位 +*入口参数:void +*出口参数:void +**************************************************/ +void USCI2_TWI_MasterModeStop(void) +{ + US2CON1 |= 0x10; +} + +/************************************************** +*函数名称:void USCI2_TWI_SlaveClockExtension(void) +*函数功能:USCI2 TWI从机模式时钟延长功能位 +*入口参数:void +*出口参数:void +**************************************************/ +void USCI2_TWI_SlaveClockExtension(FunctionalState NewState) +{ + TMCON = TMCON & 0X3F | 0X80; + + if (NewState != DISABLE) + { + US2CON1 |= 0x40; + } + else + { + US2CON1 &= 0XBF; + } +} + +/************************************************** +*函数名称:void USCI2_TWI_AcknowledgeConfig(FunctionalState NewState) +*函数功能:TWI接收应答使能函数 +*入口参数: +FunctionalState:NewState:接收应答使能/失能选择 +*出口参数:void +**************************************************/ +void USCI2_TWI_AcknowledgeConfig(FunctionalState NewState) +{ + TMCON = TMCON & 0X3F | 0X80; + + if (NewState != DISABLE) + { + US2CON0 |= 0X08; + } + else + { + US2CON0 &= 0XF7; + } +} + +/************************************************** +*函数名称:void USCI2_TWI_GeneralCallCmd(FunctionalState NewState) +*函数功能:TWI通用地址响应使能函数 +*入口参数: +FunctionalState:NewState:接收应答使能/失能选择 +*出口参数:void +**************************************************/ +void USCI2_TWI_GeneralCallCmd(FunctionalState NewState) +{ + TMCON = TMCON & 0X3F | 0X80; + + if (NewState != DISABLE) + { + US2CON2 |= 0X01; + } + else + { + US2CON2 &= 0XFE; + } +} + +/***************************************************** +*函数名称:FlagStatus USCI2_GetTWIStatus(USCI2_TWIState_TypeDef USCI2_TWIState) +*函数功能:读取TWI状态 +*入口参数: +USCI2_TWIState_TypeDef:USCI2_TWIState:TWI状态类型 +*出口参数: +FlagStatus:USCI2_TWI标志状态 +*****************************************************/ +FlagStatus USCI2_GetTWIStatus(USCI2_TWIState_TypeDef USCI2_TWIState) +{ + if ((US2CON0 & 0x07) == USCI2_TWIState) + return SET; + else + return RESET; +} + +/***************************************************** +*函数名称:void USCI2_TWI_Cmd(FunctionalState NewState) +*函数功能:TWI功能开关函数 +*入口参数: +FunctionalState:NewState:功能启动/关闭选择 +*出口参数:void +*****************************************************/ +void USCI2_TWI_Cmd(FunctionalState NewState) +{ + TMCON = TMCON & 0X3F | 0X80; + + if (NewState != DISABLE) + { + US2CON0 |= 0X80; + } + else + { + US2CON0 &= (~0X80); + } +} + +/***************************************************** +*函数名称:void USCI2_TWI_SendData(uint8_t Data) +*函数功能:TWI发送数据 +*入口参数: +uint8_t:Data:发送的数据 +*出口参数:void +*****************************************************/ +void USCI2_TWI_SendData(uint8_t Data) +{ + US2CON3 = Data; +} +/***************************************************** +*函数名称:void USCI2_TWI_SendAddr(uint8_t Addr,USCI2_TWI_RWType RW) +*函数功能:TWI发送地址,读写类型 +*入口参数: +uint8_t:Addr:发送的地址 +USCI2_TWI_RWType:RW:读写类型 +*出口参数:void +*****************************************************/ +void USCI2_TWI_SendAddr(uint8_t Addr, USCI2_TWI_RWType RW) +{ + US2CON3 = (Addr << 1) | RW; +} +/***************************************************** +*函数名称:uint8_t USCI2_TWI_ReceiveData(void) +*函数功能:获得US2CON3中的值 +*入口参数:void +*出口参数: +uint8_t:接收的数据 +*****************************************************/ +uint8_t USCI2_TWI_ReceiveData(void) +{ + return US2CON3; +} + +/************************************************** +*函数名称:void USCI2_UART_Init(uint32_t UARTFsys, uint32_t BaudRate, USCI2_UART_Mode_TypeDef Mode, USCI2_UART_RX_TypeDef RxMode) +*函数功能:UART初始化配置函数 +*入口参数: +uint32_t:UARTFsys:系统时钟频率 +uint32_t:BaudRate:波特率 +USCI2_UART_Mode_TypeDef:Mode:UART1工作模式 +USCI2_UART_RX_TypeDef:RxMode:接收允许选择 +*出口参数:void +**************************************************/ +void USCI2_UART_Init(uint32_t UARTFsys, uint32_t BaudRate, USCI2_UART_Mode_TypeDef Mode, + USCI2_UART_RX_TypeDef RxMode) +{ + TMCON |= 0xC0; + US2CON0 = US2CON0 & 0X0F | Mode | RxMode; + + if (Mode == USCI2_UART_Mode_8B) + { + if (BaudRate == USCI2_UART_BaudRate_FsysDIV12) + { + US2CON0 &= 0XDF; + } + else if (BaudRate == USCI2_UART_BaudRate_FsysDIV4) + { + US2CON0 |= 0X20; + } + } + else + { + US2CON2 = UARTFsys / BaudRate / 256; + US2CON1 = UARTFsys / BaudRate % 256; + } +} + +/***************************************************** +*函数名称:void USCI2_UART_SendData8(uint8_t Data) +*函数功能:USCI2 UART1发送8位数据 +*入口参数: +uint8_t:Data:发送的数据 +*出口参数:void +*****************************************************/ +void USCI2_UART_SendData8(uint8_t Data) +{ + US2CON3 = Data; +} + +/***************************************************** +*函数名称:uint8_t USCI2_UART_ReceiveData8(void) +*函数功能:获得US2CON3中的值 +*入口参数:void +*出口参数: +uint8_t:接收的数据 +*****************************************************/ +uint8_t USCI2_UART_ReceiveData8(void) +{ + return US2CON3; +} + +/***************************************************** +*函数名称:void USCI2_UART_SendData9(uint16_t Data) +*函数功能:UART发送9位数据 +*入口参数: +uint16_t:Data:发送的数据 +*出口参数:void +*****************************************************/ +void USCI2_UART_SendData9(uint16_t Data) +{ + uint8_t Data_9Bit; + Data_9Bit = (Data >> 8); + + if (Data_9Bit) + { + US2CON0 |= 0x08; + } + else + { + US2CON0 &= 0xf7; + } + + US2CON3 = (uint8_t)Data; +} + +/***************************************************** +*函数名称:uint16_t USCI2_UART_ReceiveData9(void) +*函数功能:获得US2CON3中的值及第九位的值 +*入口参数:void +*出口参数: +uint16_t:接收的数据 +*****************************************************/ +uint16_t USCI2_UART_ReceiveData9(void) +{ + uint16_t Data9; + Data9 = US2CON3 + ((uint16_t)(US2CON0 & 0X04) << 6); + return Data9; +} + +/***************************************************** +*函数名称:void USCI2_ITConfig(FunctionalState NewState, PriorityStatus Priority) +*函数功能:USCI2中断初始化 +*入口参数: +FunctionalState:NewState:中断使能/关闭选择 +PriorityStatus:Priority:中断优先级选择 +*出口参数:void +*****************************************************/ +void USCI2_ITConfig(FunctionalState NewState, PriorityStatus Priority) +{ + if (NewState != DISABLE) + { + IE2 |= 0x02; + } + else + { + IE2 &= 0xFD; + } + + /************************************************************/ + if (Priority != LOW) + { + IP2 |= 0x02; + } + else + { + IP2 &= 0xFD; + } +} + +/***************************************************** +*函数名称:FlagStatus USCI2_GetFlagStatus(USCI2_Flag_TypeDef USCI2_FLAG) +*函数功能:获得USCI2标志状态 +*入口参数: +USCI2_Flag_Typedef:USCI2_Flag:所需获取的标志位 +*出口参数: +FlagStatus:USCI2标志状态 +*****************************************************/ +FlagStatus USCI2_GetFlagStatus(USCI2_Flag_TypeDef USCI2_FLAG) +{ + FlagStatus bitstatus = RESET; + +#if defined(SC92L853x) || defined(SC92L753x) + + if ((USCI2_FLAG == USCI2_SPI_FLAG_SPIF) || (USCI2_FLAG == USCI2_SPI_FLAG_WCOL)) +#endif + { + if ((USCI2_FLAG & US2CON1) != (uint8_t)RESET) + { + bitstatus = SET; + } + else + { + bitstatus = RESET; + } + } + else + { + if ((USCI2_FLAG & US2CON0) != (uint8_t)RESET) + { + bitstatus = SET; + } + else + { + bitstatus = RESET; + } + } + + return bitstatus; +} + +/***************************************************** +*函数名称:void USCI2_ClearFlag(USCI2_Flag_TypeDef USCI2_FLAG) +*函数功能:清除USCI2标志状态 +*入口参数: +USCI2_Flag_TypeDef:USCI2_FLAG:所需清除的标志位 +*出口参数:void +*****************************************************/ +void USCI2_ClearFlag(USCI2_Flag_TypeDef USCI2_FLAG) +{ +#if defined(SC92L853x) || defined(SC92L753x) + if ((USCI2_FLAG == USCI2_SPI_FLAG_SPIF) || (USCI2_FLAG == USCI2_SPI_FLAG_WCOL) || (USCI2_FLAG == USCI2_TWI_FLAG_TXRXnE)) +#endif + { + US2CON1 &= (~USCI2_FLAG); //操作寄存器US2CON1 + } + else if ((USCI2_FLAG == USCI2_UART_FLAG_TI) || (USCI2_FLAG == USCI2_UART_FLAG_RI)) + { +#if defined(SC92L853x) || defined(SC92L753x) + US2CON0 = US2CON0 & 0xFC | USCI2_FLAG; //写1清零 +#endif + } + else + { + US2CON0 &= (~USCI2_FLAG); //操作寄存器US2CON0 + } +} + +#endif +/******************* (C) COPYRIGHT 2020 SinOne Microelectronics *****END OF FILE****/ diff --git a/CFG/SC92F8363B/Keil_Mould/FWLib/SC92F_Lib/src/sc92f_wdt.c b/CFG/SC92F8363B/Keil_Mould/FWLib/SC92F_Lib/src/sc92f_wdt.c new file mode 100644 index 0000000..c5737c2 --- /dev/null +++ b/CFG/SC92F8363B/Keil_Mould/FWLib/SC92F_Lib/src/sc92f_wdt.c @@ -0,0 +1,58 @@ +//************************************************************ +// Copyright (c) 深圳市赛元微电子有限公司 +// 文件名称: sc92f_wdt.c +// 作者: +// 模块功能: WDT固件库函数C文件 +// 最后更正日期: 2022年3月23日 +// 版本: V1.10002 +// 说明: +//************************************************************* + +#include "sc92f_wdt.h" + +/************************************************** +*函数名称:void WDT_DeInit(void) +*函数功能:WDT相关寄存器复位至缺省值 +*入口参数:void +*出口参数:void +**************************************************/ +void WDT_DeInit(void) +{ + WDTCON = 0X00; +} + +/************************************************** +*函数名称:void WDT_Init(WDT_OverflowTime_TypeDef OverflowTime) +*函数功能:WDT初始化配置函数 +*入口参数: +WDT_OverflowTime_TypeDef:OverflowTime:WDT溢出时间选择 +*出口参数:void +**************************************************/ +void WDT_Init(WDT_OverflowTime_TypeDef + OverflowTime) +{ + WDTCON = (WDTCON & 0XF8) | OverflowTime; +} + +/***************************************************** +*函数名称:void WDT_Cmd(FunctionalState NewState) +*函数功能:WDT功能开关函数 +*入口参数: +FunctionalState:NewState:功能启动/关闭选择 +*出口参数:void +*****************************************************/ +void WDT_Cmd(FunctionalState NewState) +{ + OPINX = 0XC1; + + if(NewState == DISABLE) + { + OPREG &= 0X7F; + } + else + { + OPREG |= 0X80; + } +} + +/******************* (C) COPYRIGHT 2021 SinOne Microelectronics *****END OF FILE****/ \ No newline at end of file diff --git a/CFG/SC92F8363B/Keil_Mould/List/SC_Init.lst b/CFG/SC92F8363B/Keil_Mould/List/SC_Init.lst new file mode 100644 index 0000000..017c4bc --- /dev/null +++ b/CFG/SC92F8363B/Keil_Mould/List/SC_Init.lst @@ -0,0 +1,284 @@ +C51 COMPILER V9.01 SC_INIT 09/11/2020 09:48:38 PAGE 1 + + +C51 COMPILER V9.01, COMPILATION OF MODULE SC_INIT +OBJECT MODULE PLACED IN ..\Output\SC_Init.obj +COMPILER INVOKED BY: E:\Keil\C51\BIN\C51.EXE ..\User\SC_Init.c OMF2 BROWSE INCDIR(..\FWLib\SC92F_Lib\inc;..\User) DEBUG + -PRINT(..\List\SC_Init.lst) OBJECT(..\Output\SC_Init.obj) + +line level source + + 1 //************************************************************ + 2 // Copyright (c) 深圳市赛元微电子有限公司 + 3 // 文件名称 : SC_Init.c + 4 // 模块功能 : MCU初始化函数C文件 + 5 // 说明 : + 6 //************************************************************* + 7 + 8 #include "SC_Init.h" //MCU初始化头文件,包含固件库所有头文件 + 9 + 10 /***************************************************** + 11 *函数名称: SC_Init + 12 *函数功能: MCU初始化函数 + 13 *入口参数:void + 14 *出口参数:void + 15 *****************************************************/ + 16 void SC_Init(void) + 17 { + 18 1 /*write initial function here*/ + 19 1 + 20 1 EA = 1; + 21 1 } + 22 + 23 /***************************************************** + 24 *函数名称: SC_OPTION_Init + 25 *函数功能: OPTION配置初始化函数 + 26 *入口参数:void + 27 *出口参数:void + 28 *****************************************************/ + 29 void SC_OPTION_Init(void) + 30 { + 31 1 /*OPTION_Init write here*/ + 32 1 } + 33 + 34 /***************************************************** + 35 *函数名称: SC_GPIO_Init + 36 *函数功能: GPIO初始化函数 + 37 *入口参数:void + 38 *出口参数:void + 39 *****************************************************/ + 40 void SC_GPIO_Init(void) + 41 { + 42 1 /*GPIO_Init write here*/ + 43 1 } + 44 #if defined (SC92F854x) || defined (SC92F754x) ||defined (SC92F844xB) || defined (SC92F744xB)||defined ( + -SC92F84Ax_2) || defined (SC92F74Ax_2)|| defined (SC92F846xB) || defined (SC92F746xB) || defined (SC92F836xB) || defined + -(SC92F736xB) || defined (SC92F8003)||defined (SC92F84Ax) || defined (SC92F74Ax)||defined (SC92F83Ax) || defined (SC92F + -73Ax) + 45 /***************************************************** + 46 *函数名称: SC_UART0_Init + 47 *函数功能: UART0初始化函数 + 48 *入口参数:void + 49 *出口参数:void + 50 *****************************************************/ + 51 void SC_UART0_Init(void) + C51 COMPILER V9.01 SC_INIT 09/11/2020 09:48:38 PAGE 2 + + 52 { + 53 1 /*UART0_Init write here*/ + 54 1 } + 55 #endif + 56 /***************************************************** + 57 *函数名称: SC_TIM0_Init + 58 *函数功能: TIMER0初始化函数 + 59 *入口参数:void + 60 *出口参数:void + 61 *****************************************************/ + 62 void SC_TIM0_Init(void) + 63 { + 64 1 /*TIM0_Init write here*/ + 65 1 } + 66 + 67 /***************************************************** + 68 *函数名称: SC_TIM1_Init + 69 *函数功能: TIMER1初始化函数 + 70 *入口参数:void + 71 *出口参数:void + 72 *****************************************************/ + 73 void SC_TIM1_Init(void) + 74 { + 75 1 /*TIM1_Init write here*/ + 76 1 } + 77 + 78 /***************************************************** + 79 *函数名称: SC_TIM2_Init + 80 *函数功能: TIMER2初始化函数 + 81 *入口参数:void + 82 *出口参数:void + 83 *****************************************************/ + 84 void SC_TIM2_Init(void) + 85 { + 86 1 /*TIM2_Init write here*/ + 87 1 } + 88 + 89 + 90 /***************************************************** + 91 *函数名称: SC_PWM_Init + 92 *函数功能: PWM初始化函数 + 93 *入口参数:void + 94 *出口参数:void + 95 *****************************************************/ + 96 void SC_PWM_Init(void) + 97 { + 98 1 /*PWM_Init write here*/ + 99 1 } + 100 + 101 /***************************************************** + 102 *函数名称: SC_INT_Init + 103 *函数功能: INT初始化函数 + 104 *入口参数:void + 105 *出口参数:void + 106 *****************************************************/ + 107 void SC_INT_Init(void) + 108 { + 109 1 /*INT_Init write here*/ + 110 1 } + 111 + 112 /***************************************************** + 113 *函数名称: SC_ADC_Init + C51 COMPILER V9.01 SC_INIT 09/11/2020 09:48:38 PAGE 3 + + 114 *函数功能: ADC初始化函数 + 115 *入口参数:void + 116 *出口参数:void + 117 *****************************************************/ + 118 void SC_ADC_Init(void) + 119 { + 120 1 /*ADC_Init write here*/ + 121 1 } + 122 + 123 /***************************************************** + 124 *函数名称: SC_IAP_Init + 125 *函数功能: IAP初始化函数 + 126 *入口参数:void + 127 *出口参数:void + 128 *****************************************************/ + 129 void SC_IAP_Init(void) + 130 { + 131 1 /*IAP_Init write here*/ + 132 1 } + 133 #if defined (SC92F854x) || defined (SC92F754x) ||defined (SC92F844xB) || defined (SC92F744xB)||defined ( + -SC92F84Ax_2) || defined (SC92F74Ax_2)|| defined (SC92F846xB) || defined (SC92F746xB) || defined (SC92F836xB) || defined + -(SC92F736xB) || defined (SC92F8003)||defined (SC92F84Ax) || defined (SC92F74Ax)||defined (SC92F83Ax) || defined (SC92F + -73Ax) + 134 /***************************************************** + 135 *函数名称: SC_SSI_Init + 136 *函数功能: SSI初始化函数 + 137 *入口参数:void + 138 *出口参数:void + 139 *****************************************************/ + 140 void SC_SSI_Init(void) + 141 { + 142 1 /*SSI_Init write here*/ + 143 1 } + 144 #endif + 145 #if defined (SC92F742x) + /***************************************************** + *函数名称: SC_SSI0_Init + *函数功能: SSI初始化函数 + *入口参数:void + *出口参数:void + *****************************************************/ + void SC_SSI0_Init(void) + { + /*SSI0_Init write here*/ + } + /***************************************************** + *函数名称: SC_SSI1_Init + *函数功能: SSI初始化函数 + *入口参数:void + *出口参数:void + *****************************************************/ + void SC_SSI1_Init(void) + { + /*SSI1_Init write here*/ + } + #endif + 167 /***************************************************** + 168 *函数名称: SC_BTM_Init + 169 *函数功能: 低频时钟定时器初始化函数 + 170 *入口参数:void + 171 *出口参数:void + 172 *****************************************************/ + C51 COMPILER V9.01 SC_INIT 09/11/2020 09:48:38 PAGE 4 + + 173 void SC_BTM_Init(void) + 174 { + 175 1 /*BTM_Init write here*/ + 176 1 } + 177 + 178 /***************************************************** + 179 *函数名称: SC_CHKSUM_Init + 180 *函数功能: check sum 初始化函数 + 181 *入口参数:void + 182 *出口参数:void + 183 *****************************************************/ + 184 void SC_CHKSUM_Init(void) + 185 { + 186 1 /*CHKSUM_Init write here*/ + 187 1 } + 188 + 189 /***************************************************** + 190 *函数名称: SC_WDT_Init + 191 *函数功能: 看门狗初始化函数 + 192 *入口参数:void + 193 *出口参数:void + 194 *****************************************************/ + 195 void SC_WDT_Init(void) + 196 { + 197 1 /*WDT_Init write here*/ + 198 1 } + 199 + 200 /***************************************************** + 201 *函数名称: SC_PWR_Init + 202 *函数功能: 电源/功耗控制初始化函数 + 203 *入口参数:void + 204 *出口参数:void + 205 *****************************************************/ + 206 void SC_PWR_Init(void) + 207 { + 208 1 /*PWR_Init write here*/ + 209 1 } + 210 /***************************************************** + 211 *函数名称: SC_DDIC_Init + 212 *函数功能: 显示控制初始化函数 + 213 *入口参数:void + 214 *出口参数:void + 215 *****************************************************/ + 216 void SC_DDIC_Init(void) + 217 { + 218 1 /*DDIC_Init write here*/ + 219 1 } + 220 #if defined (SC92F854x) || defined (SC92F754x) ||defined (SC92F844xB) || defined (SC92F744xB)||defined ( + -SC92F84Ax_2) || defined (SC92F74Ax_2) + /***************************************************** + *函数名称: SC_ACMP_Init + *函数功能: 运放初始化函数 + *入口参数:void + *出口参数:void + *****************************************************/ + void SC_ACMP_Init(void) + { + /*ACMP_Init write here*/ + } + #endif + 232 /***************************************************** + 233 *函数名称: SC_MDU_Init + C51 COMPILER V9.01 SC_INIT 09/11/2020 09:48:38 PAGE 5 + + 234 *函数功能: 乘除法器初始化函数 + 235 *入口参数:void + 236 *出口参数:void + 237 *****************************************************/ + 238 void SC_MDU_Init(void) + 239 { + 240 1 /*MDU_Init write here*/ + 241 1 } + + +MODULE INFORMATION: STATIC OVERLAYABLE + CODE SIZE = 20 ---- + CONSTANT SIZE = ---- ---- + XDATA SIZE = ---- ---- + PDATA SIZE = ---- ---- + DATA SIZE = ---- ---- + IDATA SIZE = ---- ---- + BIT SIZE = ---- ---- + EDATA SIZE = ---- ---- + HDATA SIZE = ---- ---- + XDATA CONST SIZE = ---- ---- + FAR CONST SIZE = ---- ---- +END OF MODULE INFORMATION. + + +C51 COMPILATION COMPLETE. 0 WARNING(S), 0 ERROR(S) diff --git a/CFG/SC92F8363B/Keil_Mould/List/SC_it.lst b/CFG/SC92F8363B/Keil_Mould/List/SC_it.lst new file mode 100644 index 0000000..c873d06 --- /dev/null +++ b/CFG/SC92F8363B/Keil_Mould/List/SC_it.lst @@ -0,0 +1,124 @@ +C51 COMPILER V9.01 SC_IT 09/11/2020 09:48:38 PAGE 1 + + +C51 COMPILER V9.01, COMPILATION OF MODULE SC_IT +OBJECT MODULE PLACED IN ..\Output\SC_it.obj +COMPILER INVOKED BY: E:\Keil\C51\BIN\C51.EXE ..\User\SC_it.c OMF2 BROWSE INCDIR(..\FWLib\SC92F_Lib\inc;..\User) DEBUG PR + -INT(..\List\SC_it.lst) OBJECT(..\Output\SC_it.obj) + +line level source + + 1 //************************************************************ + 2 // Copyright (c) 深圳市赛元微电子有限公司 + 3 // 文件名称 : SC_it.c + 4 // 作者 : + 5 // 模块功能 : sc92f 中断服务程序 + 6 // 局部函数列表: + 7 // 最后更正日期: 2020/8/18 + 8 // 版本 : V1.0 + 9 //************************************************************* + 10 #include "SC_it.h" + 11 #include "..\Drivers\SCDriver_List.h" + 12 void INT0Interrupt() interrupt 0 + 13 { + 14 1 TCON &= 0XFD;//清中断标志位 + 15 1 /*INT0_it write here*/ + 16 1 + 17 1 } + 18 + 19 void Timer0Interrupt() interrupt 1 + 20 { + 21 1 /*TIM0_it write here*/ + 22 1 } + 23 + 24 void INT1Interrupt() interrupt 2 + 25 { + 26 1 TCON &= 0XF7;//清中断标志位 + 27 1 /*INT1_it write here*/ + 28 1 + 29 1 } + 30 + 31 void Timer1Interrupt() interrupt 3 + 32 { + 33 1 /*TIM1_it write here*/ + 34 1 } + 35 #if defined (SC92F854x) || defined (SC92F754x) ||defined (SC92F844xB) || defined (SC92F744xB)||defined ( + -SC92F84Ax_2) || defined (SC92F74Ax_2)|| defined (SC92F846xB) || defined (SC92F746xB) || defined (SC92F836xB) || defined + -(SC92F736xB) || defined (SC92F8003)||defined (SC92F84Ax) || defined (SC92F74Ax)||defined (SC92F83Ax) || defined (SC92F + -73Ax) + 36 void UART0Interrupt() interrupt 4 + 37 { + 38 1 /*UART0_it write here*/ + 39 1 } + 40 #endif + 41 #if defined(SC92F742x) + void SSI0Interrupt() interrupt 4 + { + /*SSI0_it write here*/ + } + #endif + 47 void Timer2Interrupt() interrupt 5 + 48 { + 49 1 /*TIM2_it write here*/ + 50 1 } + 51 + C51 COMPILER V9.01 SC_IT 09/11/2020 09:48:38 PAGE 2 + + 52 void ADCInterrupt() interrupt 6 + 53 { + 54 1 /*ADC_it write here*/ + 55 1 } + 56 #if defined (SC92F854x) || defined (SC92F754x) ||defined (SC92F844xB) || defined (SC92F744xB)||defined ( + -SC92F84Ax_2) || defined (SC92F74Ax_2)|| defined (SC92F846xB) || defined (SC92F746xB) || defined (SC92F836xB) || defined + -(SC92F736xB) || defined (SC92F8003)||defined (SC92F84Ax) || defined (SC92F74Ax)||defined (SC92F83Ax) || defined (SC92F + -73Ax) + 57 void SSIInterrupt() interrupt 7 + 58 { + 59 1 /*SSI_it write here*/ + 60 1 } + 61 #endif + 62 #if defined (SC92F742x) + void SSI1Interrupt() interrupt 7 + { + /*SSI1_it write here*/ + } + #endif + 68 void PWMInterrupt() interrupt 8 + 69 { + 70 1 /*PWM_it write here*/ + 71 1 } + 72 + 73 void BTMInterrupt() interrupt 9 + 74 { + 75 1 /*BTM_it write here*/ + 76 1 } + 77 + 78 void INT2Interrupt() interrupt 10 + 79 { + 80 1 /*INT2_it write here*/ + 81 1 } + 82 #if defined (SC92F854x) || defined (SC92F754x) ||defined (SC92F844xB) || defined (SC92F744xB)||defined ( + -SC92F84Ax_2) || defined (SC92F74Ax_2) + void ACMPInterrupt() interrupt 12 + { + /*ACMP_it write here*/ + } + #endif + + +MODULE INFORMATION: STATIC OVERLAYABLE + CODE SIZE = 50 ---- + CONSTANT SIZE = ---- ---- + XDATA SIZE = ---- ---- + PDATA SIZE = ---- ---- + DATA SIZE = ---- ---- + IDATA SIZE = ---- ---- + BIT SIZE = ---- ---- + EDATA SIZE = ---- ---- + HDATA SIZE = ---- ---- + XDATA CONST SIZE = ---- ---- + FAR CONST SIZE = ---- ---- +END OF MODULE INFORMATION. + + +C51 COMPILATION COMPLETE. 0 WARNING(S), 0 ERROR(S) diff --git a/CFG/SC92F8363B/Keil_Mould/List/STARTUP.lst b/CFG/SC92F8363B/Keil_Mould/List/STARTUP.lst new file mode 100644 index 0000000..f460d8f --- /dev/null +++ b/CFG/SC92F8363B/Keil_Mould/List/STARTUP.lst @@ -0,0 +1,254 @@ +A51 MACRO ASSEMBLER STARTUP 09/11/2020 09:13:24 PAGE 1 + + +MACRO ASSEMBLER A51 V8.02 +OBJECT MODULE PLACED IN ..\Output\STARTUP.obj +ASSEMBLER INVOKED BY: E:\Keil\C51\BIN\A51.EXE STARTUP.A51 SET(SMALL) DEBUG PRINT(..\List\STARTUP.lst) OBJECT(..\Output\S + TARTUP.obj) EP + +LOC OBJ LINE SOURCE + + 1 $nomod51 + 2 ;------------------------------------------------------------------------------ + 3 ; This file is part of the C51 Compiler package + 4 ; Copyright (c) 1988-2005 Keil Elektronik GmbH and Keil Software, Inc. + 5 ; Version 8.01 + 6 ; + 7 ; *** <<< Use Configuration Wizard in Context Menu >>> *** + 8 ;------------------------------------------------------------------------------ + 9 ; STARTUP.A51: This code is executed after processor reset. + 10 ; + 11 ; To translate this file use A51 with the following invocation: + 12 ; + 13 ; A51 STARTUP.A51 + 14 ; + 15 ; To link the modified STARTUP.OBJ file to your application use the following + 16 ; Lx51 invocation: + 17 ; + 18 ; Lx51 your object file list, STARTUP.OBJ controls + 19 ; + 20 ;------------------------------------------------------------------------------ + 21 ; + 22 ; User-defined Power-On Initialization of Memory + 23 ; + 24 ; With the following EQU statements the initialization of memory + 25 ; at processor reset can be defined: + 26 ; + 27 ; IDATALEN: IDATA memory size <0x0-0x100> + 28 ; Note: The absolute start-address of IDATA memory is always 0 + 29 ; The IDATA space overlaps physically the DATA and BIT areas. + 0100 30 IDATALEN EQU 100H + 31 ; + 32 ; XDATASTART: XDATA memory start address <0x0-0xFFFF> + 33 ; The absolute start address of XDATA memory + 0000 34 XDATASTART EQU 0 + 35 ; + 36 ; XDATALEN: XDATA memory size <0x0-0xFFFF> + 37 ; The length of XDATA memory in bytes. + 0100 38 XDATALEN EQU 100H + 39 ; + 40 ; PDATASTART: PDATA memory start address <0x0-0xFFFF> + 41 ; The absolute start address of PDATA memory + 0000 42 PDATASTART EQU 0H + 43 ; + 44 ; PDATALEN: PDATA memory size <0x0-0xFF> + 45 ; The length of PDATA memory in bytes. + 0000 46 PDATALEN EQU 0H + 47 ; + 48 ; + 49 ;------------------------------------------------------------------------------ + 50 ; + 51 ; Reentrant Stack Initialization + 52 ; + 53 ; The following EQU statements define the stack pointer for reentrant + 54 ; functions and initialized it: + 55 ; + 56 ; Stack Space for reentrant functions in the SMALL model. + 57 ; IBPSTACK: Enable SMALL model reentrant stack + A51 MACRO ASSEMBLER STARTUP 09/11/2020 09:13:24 PAGE 2 + + 58 ; Stack space for reentrant functions in the SMALL model. + 0000 59 IBPSTACK EQU 0 ; set to 1 if small reentrant is used. + 60 ; IBPSTACKTOP: End address of SMALL model stack <0x0-0xFF> + 61 ; Set the top of the stack to the highest location. + 0100 62 IBPSTACKTOP EQU 0xFF +1 ; default 0FFH+1 + 63 ; + 64 ; + 65 ; Stack Space for reentrant functions in the LARGE model. + 66 ; XBPSTACK: Enable LARGE model reentrant stack + 67 ; Stack space for reentrant functions in the LARGE model. + 0000 68 XBPSTACK EQU 0 ; set to 1 if large reentrant is used. + 69 ; XBPSTACKTOP: End address of LARGE model stack <0x0-0xFFFF> + 70 ; Set the top of the stack to the highest location. + 0000 71 XBPSTACKTOP EQU 0xFFFF +1 ; default 0FFFFH+1 + 72 ; + 73 ; + 74 ; Stack Space for reentrant functions in the COMPACT model. + 75 ; PBPSTACK: Enable COMPACT model reentrant stack + 76 ; Stack space for reentrant functions in the COMPACT model. + 0000 77 PBPSTACK EQU 0 ; set to 1 if compact reentrant is used. + 78 ; + 79 ; PBPSTACKTOP: End address of COMPACT model stack <0x0-0xFFFF> + 80 ; Set the top of the stack to the highest location. + 0100 81 PBPSTACKTOP EQU 0xFF +1 ; default 0FFH+1 + 82 ; + 83 ; + 84 ;------------------------------------------------------------------------------ + 85 ; + 86 ; Memory Page for Using the Compact Model with 64 KByte xdata RAM + 87 ; Compact Model Page Definition + 88 ; + 89 ; Define the XDATA page used for PDATA variables. + 90 ; PPAGE must conform with the PPAGE set in the linker invocation. + 91 ; + 92 ; Enable pdata memory page initalization + 0000 93 PPAGEENABLE EQU 0 ; set to 1 if pdata object are used. + 94 ; + 95 ; PPAGE number <0x0-0xFF> + 96 ; uppermost 256-byte address of the page used for PDATA variables. + 0000 97 PPAGE EQU 0 + 98 ; + 99 ; SFR address which supplies uppermost address byte <0x0-0xFF> + 100 ; most 8051 variants use P2 as uppermost address byte + 00A0 101 PPAGE_SFR DATA 0A0H + 102 ; + 103 ; + 104 ;------------------------------------------------------------------------------ + 105 + 106 ; Standard SFR Symbols + 00E0 107 ACC DATA 0E0H + 00F0 108 B DATA 0F0H + 0081 109 SP DATA 81H + 0082 110 DPL DATA 82H + 0083 111 DPH DATA 83H + 112 + 113 NAME ?C_STARTUP + 114 + 115 + 116 ?C_C51STARTUP SEGMENT CODE + 117 ?STACK SEGMENT IDATA + 118 +---- 119 RSEG ?STACK +0000 120 DS 1 + 121 + 122 EXTRN CODE (?C_START) + 123 PUBLIC ?C_STARTUP + A51 MACRO ASSEMBLER STARTUP 09/11/2020 09:13:24 PAGE 3 + + 124 +---- 125 CSEG AT 0 +0000 020000 F 126 ?C_STARTUP: LJMP STARTUP1 + 127 +---- 128 RSEG ?C_C51STARTUP + 129 +0000 130 STARTUP1: + 131 + 132 IF IDATALEN <> 0 +0000 78FF 133 MOV R0,#IDATALEN - 1 +0002 E4 134 CLR A +0003 F6 135 IDATALOOP: MOV @R0,A +0004 D8FD 136 DJNZ R0,IDATALOOP + 137 ENDIF + 138 + 139 IF XDATALEN <> 0 +0006 900000 140 MOV DPTR,#XDATASTART +0009 7F00 141 MOV R7,#LOW (XDATALEN) + 142 IF (LOW (XDATALEN)) <> 0 + MOV R6,#(HIGH (XDATALEN)) +1 + ELSE +000B 7E01 145 MOV R6,#HIGH (XDATALEN) + 146 ENDIF +000D E4 147 CLR A +000E F0 148 XDATALOOP: MOVX @DPTR,A +000F A3 149 INC DPTR +0010 DFFC 150 DJNZ R7,XDATALOOP +0012 DEFA 151 DJNZ R6,XDATALOOP + 152 ENDIF + 153 + 154 IF PPAGEENABLE <> 0 + MOV PPAGE_SFR,#PPAGE + ENDIF + 157 + 158 IF PDATALEN <> 0 + MOV R0,#LOW (PDATASTART) + MOV R7,#LOW (PDATALEN) + CLR A + PDATALOOP: MOVX @R0,A + INC R0 + DJNZ R7,PDATALOOP + ENDIF + 166 + 167 IF IBPSTACK <> 0 + EXTRN DATA (?C_IBP) + + MOV ?C_IBP,#LOW IBPSTACKTOP + ENDIF + 172 + 173 IF XBPSTACK <> 0 + EXTRN DATA (?C_XBP) + + MOV ?C_XBP,#HIGH XBPSTACKTOP + MOV ?C_XBP+1,#LOW XBPSTACKTOP + ENDIF + 179 + 180 IF PBPSTACK <> 0 + EXTRN DATA (?C_PBP) + MOV ?C_PBP,#LOW PBPSTACKTOP + ENDIF + 184 +0014 758100 F 185 MOV SP,#?STACK-1 + 186 + 187 ; This code is required if you use L51_BANK.A51 with Banking Mode 4 + 188 ; Code Banking + 189 ; Select Bank 0 for L51_BANK.A51 Mode 4 + A51 MACRO ASSEMBLER STARTUP 09/11/2020 09:13:24 PAGE 4 + + 190 + + + + + 195 ; +0017 020000 F 196 LJMP ?C_START + 197 + 198 END + A51 MACRO ASSEMBLER STARTUP 09/11/2020 09:13:24 PAGE 5 + +SYMBOL TABLE LISTING +------ ----- ------- + + +N A M E T Y P E V A L U E ATTRIBUTES + +?C_C51STARTUP. . . C SEG 001AH REL=UNIT +?C_START . . . . . C ADDR ----- EXT +?C_STARTUP . . . . C ADDR 0000H A +?STACK . . . . . . I SEG 0001H REL=UNIT +ACC. . . . . . . . D ADDR 00E0H A +B. . . . . . . . . D ADDR 00F0H A +DPH. . . . . . . . D ADDR 0083H A +DPL. . . . . . . . D ADDR 0082H A +IBPSTACK . . . . . N NUMB 0000H A +IBPSTACKTOP. . . . N NUMB 0100H A +IDATALEN . . . . . N NUMB 0100H A +IDATALOOP. . . . . C ADDR 0003H R SEG=?C_C51STARTUP +PBPSTACK . . . . . N NUMB 0000H A +PBPSTACKTOP. . . . N NUMB 0100H A +PDATALEN . . . . . N NUMB 0000H A +PDATASTART . . . . N NUMB 0000H A +PPAGE. . . . . . . N NUMB 0000H A +PPAGEENABLE. . . . N NUMB 0000H A +PPAGE_SFR. . . . . D ADDR 00A0H A +SP . . . . . . . . D ADDR 0081H A +STARTUP1 . . . . . C ADDR 0000H R SEG=?C_C51STARTUP +XBPSTACK . . . . . N NUMB 0000H A +XBPSTACKTOP. . . . N NUMB 0000H A +XDATALEN . . . . . N NUMB 0100H A +XDATALOOP. . . . . C ADDR 000EH R SEG=?C_C51STARTUP +XDATASTART . . . . N NUMB 0000H A + + +REGISTER BANK(S) USED: 0 + + +ASSEMBLY COMPLETE. 0 WARNING(S), 0 ERROR(S) diff --git a/CFG/SC92F8363B/Keil_Mould/List/main.lst b/CFG/SC92F8363B/Keil_Mould/List/main.lst new file mode 100644 index 0000000..f6a422d --- /dev/null +++ b/CFG/SC92F8363B/Keil_Mould/List/main.lst @@ -0,0 +1,52 @@ +C51 COMPILER V9.01 MAIN 09/11/2020 09:48:37 PAGE 1 + + +C51 COMPILER V9.01, COMPILATION OF MODULE MAIN +OBJECT MODULE PLACED IN ..\Output\main.obj +COMPILER INVOKED BY: E:\Keil\C51\BIN\C51.EXE ..\User\main.c OMF2 BROWSE INCDIR(..\FWLib\SC92F_Lib\inc;..\User) DEBUG PRI + -NT(..\List\main.lst) OBJECT(..\Output\main.obj) + +line level source + + 1 //************************************************************ + 2 // Copyright (c) 深圳市赛元微电子有限公司 + 3 // 文件名称 : main.c + 4 // 模块功能 : 主函数 + 5 // 说明 : 包含MCU初始化函数及其头文件 + 6 //************************************************************ + 7 + 8 #include "SC_Init.h" //MCU初始化头文件,包含固件库所有头文件 + 9 #include "SC_it.h" + 10 #include "..\Drivers\SCDriver_List.h" + 11 + 12 int main(void) + 13 { + 14 1 + 15 1 /*** MCU初始化函数 ***/ + 16 1 SC_Init(); + 17 1 while(1) + 18 1 { + 19 2 + 20 2 } + 21 1 + 22 1 } + 23 + 24 + + +MODULE INFORMATION: STATIC OVERLAYABLE + CODE SIZE = 5 ---- + CONSTANT SIZE = ---- ---- + XDATA SIZE = ---- ---- + PDATA SIZE = ---- ---- + DATA SIZE = ---- ---- + IDATA SIZE = ---- ---- + BIT SIZE = ---- ---- + EDATA SIZE = ---- ---- + HDATA SIZE = ---- ---- + XDATA CONST SIZE = ---- ---- + FAR CONST SIZE = ---- ---- +END OF MODULE INFORMATION. + + +C51 COMPILATION COMPLETE. 0 WARNING(S), 0 ERROR(S) diff --git a/CFG/SC92F8363B/Keil_Mould/List/sc92f_chksum.lst b/CFG/SC92F8363B/Keil_Mould/List/sc92f_chksum.lst new file mode 100644 index 0000000..6abe113 --- /dev/null +++ b/CFG/SC92F8363B/Keil_Mould/List/sc92f_chksum.lst @@ -0,0 +1,86 @@ +C51 COMPILER V9.01 SC92F_CHKSUM 09/11/2020 09:49:58 PAGE 1 + + +C51 COMPILER V9.01, COMPILATION OF MODULE SC92F_CHKSUM +OBJECT MODULE PLACED IN ..\Output\sc92f_chksum.obj +COMPILER INVOKED BY: E:\Keil\C51\BIN\C51.EXE ..\FWLib\SC92F_Lib\src\sc92f_chksum.c OMF2 BROWSE INCDIR(..\FWLib\SC92F_Lib + -\inc;..\User) DEBUG PRINT(..\List\sc92f_chksum.lst) OBJECT(..\Output\sc92f_chksum.obj) + +line level source + + 1 //************************************************************ + 2 // Copyright (c) 深圳市赛元微电子有限公司 + 3 // 文件名称 : sc92f_chksum.c + 4 // 作者 : + 5 // 模块功能 : CHKSUM固件库函数C文件 + 6 // 局部函数列表: + 7 // 最后更正日期: 2020/8/18 + 8 // 版本 : V1.0 + 9 // 说明 : + 10 //************************************************************* + 11 + 12 #include "sc92f_chksum.h" + 13 + 14 #if defined (SC92F854x) || defined (SC92F754x) ||defined (SC92F844xB) || defined (SC92F744xB)||defined ( + -SC92F84Ax_2) || defined (SC92F74Ax_2)|| defined (SC92F846xB) || defined (SC92F746xB) || defined (SC92F836xB) || defined + -(SC92F736xB) || defined (SC92F8003)|| defined (SC92F742x) + 15 /************************************************** + 16 *函数名称:void CHKSUM_DeInit(void) + 17 *函数功能:CHKSUM相关寄存器复位至缺省值 + 18 *入口参数:void + 19 *出口参数:void + 20 **************************************************/ + 21 void CHKSUM_DeInit(void) + 22 { + 23 1 OPERCON &= 0XFE; + 24 1 CHKSUML = 0X00; + 25 1 CHKSUMH = 0X00; + 26 1 } + 27 + 28 /************************************************** + 29 *函数名称:void CHKSUM_StartOperation(void) + 30 *函数功能:触发一次check sum计算 + 31 *入口参数:void + 32 *出口参数:void + 33 **************************************************/ + 34 void CHKSUM_StartOperation(void) + 35 { + 36 1 OPERCON |= 0X01; + 37 1 while(OPERCON & 0x01); + 38 1 } + 39 + 40 /************************************************** + 41 *函数名称:uint16_t CHKSUM_GetCheckValue(void) + 42 *函数功能:获取一次check sum计算值 + 43 *入口参数:void + 44 *出口参数:uint16_t check sum计算值 + 45 **************************************************/ + 46 uint16_t CHKSUM_GetCheckValue(void) + 47 { + 48 1 uint16_t checktemp; + 49 1 + 50 1 checktemp = (uint16_t)(CHKSUMH << 8)+ (uint16_t)CHKSUML; + 51 1 return checktemp; + 52 1 } + C51 COMPILER V9.01 SC92F_CHKSUM 09/11/2020 09:49:58 PAGE 2 + + 53 #endif + 54 /******************* (C) COPYRIGHT 2020 SinOne Microelectronics *****END OF FILE****/ + + +MODULE INFORMATION: STATIC OVERLAYABLE + CODE SIZE = 33 ---- + CONSTANT SIZE = ---- ---- + XDATA SIZE = ---- ---- + PDATA SIZE = ---- ---- + DATA SIZE = ---- ---- + IDATA SIZE = ---- ---- + BIT SIZE = ---- ---- + EDATA SIZE = ---- ---- + HDATA SIZE = ---- ---- + XDATA CONST SIZE = ---- ---- + FAR CONST SIZE = ---- ---- +END OF MODULE INFORMATION. + + +C51 COMPILATION COMPLETE. 0 WARNING(S), 0 ERROR(S) diff --git a/CFG/SC92F8363B/Keil_Mould/List/sc92f_gpio.lst b/CFG/SC92F8363B/Keil_Mould/List/sc92f_gpio.lst new file mode 100644 index 0000000..57237fb --- /dev/null +++ b/CFG/SC92F8363B/Keil_Mould/List/sc92f_gpio.lst @@ -0,0 +1,433 @@ +C51 COMPILER V9.01 SC92F_GPIO 09/11/2020 09:48:38 PAGE 1 + + +C51 COMPILER V9.01, COMPILATION OF MODULE SC92F_GPIO +OBJECT MODULE PLACED IN ..\Output\sc92f_gpio.obj +COMPILER INVOKED BY: E:\Keil\C51\BIN\C51.EXE ..\FWLib\SC92F_Lib\src\sc92f_gpio.c OMF2 BROWSE INCDIR(..\FWLib\SC92F_Lib\i + -nc;..\User) DEBUG PRINT(..\List\sc92f_gpio.lst) OBJECT(..\Output\sc92f_gpio.obj) + +line level source + + 1 //************************************************************ + 2 // Copyright (c) 深圳市赛元微电子有限公司 + 3 // 文件名称 : sc92f_gpio.c + 4 // 作者 : + 5 // 模块功能 : GPIO固件库函数C文件 + 6 // 局部函数列表: + 7 // 最后更正日期: 2020/4/20 + 8 // 版本 : V1.0 + 9 // 说明 : 本文件仅适用于赛元92F系列单片机 + 10 //************************************************************* + 11 + 12 + 13 #include "sc92f_gpio.h" + 14 + 15 /************************************************** + 16 *函数名称:void GPIO_DeInit(void) + 17 *函数功能:GPIO相关寄存器复位至缺省值 + 18 *入口参数:void + 19 *出口参数:void + 20 **************************************************/ + 21 void GPIO_DeInit(void) + 22 { + 23 1 P0CON = 0x00; + 24 1 P1CON = 0x00; + 25 1 P2CON = 0x00; + 26 1 #if defined (SC92F854x) || defined (SC92F754x) ||defined (SC92F844xB) || defined (SC92F744xB)||defined + -(SC92F84Ax_2) || defined (SC92F74Ax_2) + P3CON = 0x00; + P4CON = 0x00; + #endif + 30 1 P0PH = 0x00; + 31 1 P1PH = 0x00; + 32 1 P2PH = 0x00; + 33 1 #if defined (SC92F854x) || defined (SC92F754x) ||defined (SC92F844xB) || defined (SC92F744xB)||defined + -(SC92F84Ax_2) || defined (SC92F74Ax_2) + P3PH = 0x00; + P4PH = 0x00; + #endif + 37 1 #if defined (SC92F854x) || defined (SC92F754x) ||defined (SC92F844xB) || defined (SC92F744xB)||defined + -(SC92F84Ax_2) || defined (SC92F74Ax_2)|| defined (SC92F846xB) || defined (SC92F746xB) || defined (SC92F836xB) || defined + - (SC92F736xB) + P5CON = 0x00; + P5PH = 0x00; + P5 = 0; + #endif + 42 1 P0=0; + 43 1 P1=0; + 44 1 P2=0; + 45 1 #if defined (SC92F854x) || defined (SC92F754x) ||defined (SC92F844xB) || defined (SC92F744xB)||defined + -(SC92F84Ax_2) || defined (SC92F74Ax_2) + P3=0; + P4=0; + #endif + 49 1 + C51 COMPILER V9.01 SC92F_GPIO 09/11/2020 09:48:38 PAGE 2 + + 50 1 } + 51 + 52 /************************************************** + 53 *函数名称:void GPIO_Init(GPIO_TypeDef GPIOx, uint8_t PortPins, GPIO_Mode_TypeDef GPIO_Mode) + 54 *函数功能:GPIO口模式配置初始化 + 55 *入口参数:GPIOx 选择操作的GPIO口 + 56 PortPins 选择GPIO管脚Pxy + 57 GPIO_Mode 选择GPIO口模式(高阻输入、上拉输入、推挽输出) + 58 *出口参数:void + 59 **************************************************/ + 60 void GPIO_Init(GPIO_TypeDef GPIOx, uint8_t PortPins, GPIO_Mode_TypeDef GPIO_Mode) + 61 { + 62 1 if(GPIOx == GPIO0) + 63 1 { + 64 2 if(GPIO_Mode == GPIO_MODE_IN_HI) + 65 2 { + 66 3 P0CON &= ~PortPins; + 67 3 P0PH &= ~PortPins; + 68 3 } + 69 2 if(GPIO_Mode == GPIO_MODE_IN_PU) + 70 2 { + 71 3 P0CON &= ~PortPins; + 72 3 P0PH |= PortPins; + 73 3 } + 74 2 if(GPIO_Mode == GPIO_MODE_OUT_PP) + 75 2 { + 76 3 P0CON |= PortPins; + 77 3 } + 78 2 } + 79 1 else if(GPIOx == GPIO1) + 80 1 { + 81 2 if(GPIO_Mode == GPIO_MODE_IN_HI) + 82 2 { + 83 3 P1CON &= ~PortPins; + 84 3 P1PH &= ~PortPins; + 85 3 } + 86 2 if(GPIO_Mode == GPIO_MODE_IN_PU) + 87 2 { + 88 3 P1CON &= ~PortPins; + 89 3 P1PH |= PortPins; + 90 3 } + 91 2 if(GPIO_Mode == GPIO_MODE_OUT_PP) + 92 2 { + 93 3 P1CON |= PortPins; + 94 3 } + 95 2 } + 96 1 + 97 1 else if(GPIOx == GPIO2) + 98 1 { + 99 2 if(GPIO_Mode == GPIO_MODE_IN_HI) + 100 2 { + 101 3 P2CON &= ~PortPins; + 102 3 P2PH &= ~PortPins; + 103 3 } + 104 2 if(GPIO_Mode == GPIO_MODE_IN_PU) + 105 2 { + 106 3 P2CON &= ~PortPins; + 107 3 P2PH |= PortPins; + 108 3 } + 109 2 if(GPIO_Mode == GPIO_MODE_OUT_PP) + 110 2 { + 111 3 P2CON |= PortPins; + C51 COMPILER V9.01 SC92F_GPIO 09/11/2020 09:48:38 PAGE 3 + + 112 3 } + 113 2 } + 114 1 #if defined (SC92F854x) || defined (SC92F754x) ||defined (SC92F844xB) || defined (SC92F744xB)||defined + -(SC92F84Ax_2) || defined (SC92F74Ax_2) + else if(GPIOx == GPIO3) + { + if(GPIO_Mode == GPIO_MODE_IN_HI) + { + P3CON &= ~PortPins; + P3PH &= ~PortPins; + } + if(GPIO_Mode == GPIO_MODE_IN_PU) + { + P3CON &= ~PortPins; + P3PH |= PortPins; + } + if(GPIO_Mode == GPIO_MODE_OUT_PP) + { + P3CON |= PortPins; + } + } + else if(GPIOx == GPIO4) + { + if(GPIO_Mode == GPIO_MODE_IN_HI) + { + P4CON &= ~PortPins; + P4PH &= ~PortPins; + } + if(GPIO_Mode == GPIO_MODE_IN_PU) + { + P4CON &= ~PortPins; + P4PH |= PortPins; + } + if(GPIO_Mode == GPIO_MODE_OUT_PP) + { + P4CON |= PortPins; + } + } + #endif + 150 1 #if defined (SC92F854x) || defined (SC92F754x) ||defined (SC92F844xB) || defined (SC92F744xB)||defined + -(SC92F84Ax_2) || defined (SC92F74Ax_2)|| defined (SC92F846xB) || defined (SC92F746xB) || defined (SC92F836xB) || defined + - (SC92F736xB) + else + { + if(GPIOx == GPIO5) + { + if(GPIO_Mode == GPIO_MODE_IN_HI) + { + P5CON &= ~PortPins; + P5PH &= ~PortPins; + } + if(GPIO_Mode == GPIO_MODE_IN_PU) + { + P5CON &= ~PortPins; + P5PH |= PortPins; + } + if(GPIO_Mode == GPIO_MODE_OUT_PP) + { + P5CON |= PortPins; + } + } + } + C51 COMPILER V9.01 SC92F_GPIO 09/11/2020 09:48:38 PAGE 4 + + #endif + 172 1 } + 173 + 174 /************************************************** + 175 *函数名称:void GPIO_Write(GPIO_TypeDef GPIOx, uint8_t PortVal) + 176 *函数功能:GPIO口赋值 + 177 *入口参数:GPIOx 选择操作的GPIO口 + 178 PortVal GPIO口的值 + 179 *出口参数:void + 180 **************************************************/ + 181 void GPIO_Write(GPIO_TypeDef GPIOx, uint8_t PortVal) + 182 { + 183 1 if(GPIOx == GPIO0) + 184 1 { + 185 2 P0 = PortVal; + 186 2 } + 187 1 if(GPIOx == GPIO1) + 188 1 { + 189 2 P1 = PortVal; + 190 2 } + 191 1 if(GPIOx == GPIO2) + 192 1 { + 193 2 P2 = PortVal; + 194 2 } + 195 1 #if defined (SC92F854x) || defined (SC92F754x) ||defined (SC92F844xB) || defined (SC92F744xB)||defined + -(SC92F84Ax_2) || defined (SC92F74Ax_2) + if(GPIOx == GPIO3) + { + P3 = PortVal; + } + if(GPIOx == GPIO4) + { + P4 = PortVal; + } + #endif + 205 1 #if defined (SC92F854x) || defined (SC92F754x) ||defined (SC92F844xB) || defined (SC92F744xB)||defined + -(SC92F84Ax_2) || defined (SC92F74Ax_2)|| defined (SC92F846xB) || defined (SC92F746xB) || defined (SC92F836xB) || defined + - (SC92F736xB) + if(GPIOx == GPIO5) + { + P5 = PortVal; + } + #endif + 211 1 } + 212 + 213 /************************************************** + 214 *函数名称:void GPIO_WriteHigh(GPIO_TypeDef GPIOx, uint8_t PortPins) + 215 *函数功能:GPIO口管脚Pxy置位 + 216 *入口参数:GPIOx 选择操作的GPIO口 + 217 PortPins 选择GPIO口管脚Pxy + 218 *出口参数:void + 219 **************************************************/ + 220 void GPIO_WriteHigh(GPIO_TypeDef GPIOx, uint8_t PortPins) + 221 { + 222 1 if(GPIOx == GPIO0) + 223 1 { + 224 2 P0 |= PortPins; + 225 2 } + 226 1 if(GPIOx == GPIO1) + 227 1 { + 228 2 P1 |= PortPins; + 229 2 } + C51 COMPILER V9.01 SC92F_GPIO 09/11/2020 09:48:38 PAGE 5 + + 230 1 if(GPIOx == GPIO2) + 231 1 { + 232 2 P2 |= PortPins; + 233 2 } + 234 1 #if defined (SC92F854x) || defined (SC92F754x) ||defined (SC92F844xB) || defined (SC92F744xB)||defined + -(SC92F84Ax_2) || defined (SC92F74Ax_2) + if(GPIOx == GPIO3) + { + P3 |= PortPins; + } + if(GPIOx == GPIO4) + { + P4 |= PortPins; + } + #endif + 244 1 #if defined (SC92F854x) || defined (SC92F754x) ||defined (SC92F844xB) || defined (SC92F744xB)||defined + -(SC92F84Ax_2) || defined (SC92F74Ax_2)|| defined (SC92F846xB) || defined (SC92F746xB) || defined (SC92F836xB) || defined + - (SC92F736xB) + if(GPIOx == GPIO5) + { + P5 |= PortPins; + } + #endif + 250 1 } + 251 + 252 /************************************************** + 253 *函数名称:void GPIO_WriteLow(GPIO_TypeDef GPIOx, uint8_t PortPins) + 254 *函数功能:GPIO口管脚Pxy复位 + 255 *入口参数:GPIOx 选择操作的GPIO口 + 256 PortPins 选择GPIO口管脚Pxy + 257 *出口参数:void + 258 **************************************************/ + 259 void GPIO_WriteLow(GPIO_TypeDef GPIOx, uint8_t PortPins) + 260 { + 261 1 if(GPIOx == GPIO0) + 262 1 { + 263 2 P0 &= ~PortPins; + 264 2 } + 265 1 if(GPIOx == GPIO1) + 266 1 { + 267 2 P1 &= ~PortPins; + 268 2 } + 269 1 if(GPIOx == GPIO2) + 270 1 { + 271 2 P2 &= ~PortPins; + 272 2 } + 273 1 #if defined (SC92F854x) || defined (SC92F754x) ||defined (SC92F844xB) || defined (SC92F744xB)||defined + -(SC92F84Ax_2) || defined (SC92F74Ax_2) + if(GPIOx == GPIO3) + { + P3 &= ~PortPins; + } + if(GPIOx == GPIO4) + { + P4 &= ~PortPins; + } + #endif + 283 1 #if defined (SC92F854x) || defined (SC92F754x) ||defined (SC92F844xB) || defined (SC92F744xB)||defined + -(SC92F84Ax_2) || defined (SC92F74Ax_2)|| defined (SC92F846xB) || defined (SC92F746xB) || defined (SC92F836xB) || defined + - (SC92F736xB) + if(GPIOx == GPIO5) + { + C51 COMPILER V9.01 SC92F_GPIO 09/11/2020 09:48:38 PAGE 6 + + P5 &= ~PortPins; + } + #endif + 289 1 } + 290 + 291 /************************************************** + 292 *函数名称:uint8_t GPIO_ReadPort(GPIO_TypeDef GPIOx) + 293 *函数功能:读GPIO口Px的值 + 294 *入口参数:GPIOx 选择操作的GPIO口 + 295 *出口参数:uint8_t 返回Px的值 + 296 **************************************************/ + 297 uint8_t GPIO_ReadPort(GPIO_TypeDef GPIOx) + 298 { + 299 1 if(GPIOx == GPIO0) + 300 1 { + 301 2 return P0; + 302 2 } + 303 1 else if(GPIOx == GPIO1) + 304 1 { + 305 2 return P1; + 306 2 } + 307 1 else if(GPIOx == GPIO2) + 308 1 { + 309 2 return P2; + 310 2 } + 311 1 #if defined (SC92F854x) || defined (SC92F754x) ||defined (SC92F844xB) || defined (SC92F744xB)||defined + -(SC92F84Ax_2) || defined (SC92F74Ax_2) + else if(GPIOx == GPIO3) + { + return P3; + } + else if(GPIOx == GPIO4) + { + return P4; + } + #endif + 321 1 #if defined (SC92F854x) || defined (SC92F754x) ||defined (SC92F844xB) || defined (SC92F744xB)||defined + -(SC92F84Ax_2) || defined (SC92F74Ax_2)|| defined (SC92F846xB) || defined (SC92F746xB) || defined (SC92F836xB) || defined + - (SC92F736xB) + else + { + return P5; + } + #endif + 327 1 return 0; + 328 1 } + 329 + 330 /************************************************** + 331 *函数名称:BitStatus GPIO_ReadPin(GPIO_TypeDef GPIOx, uint8_t PortPins) + 332 *函数功能:读GPIO口管脚Pxy的值 + 333 *入口参数:GPIOx 选择操作的GPIO口 + 334 PortPins 选择GPIO口管脚Pxy + 335 *出口参数:BitStatus 返回Pxy的值 + 336 **************************************************/ + 337 BitStatus GPIO_ReadPin(GPIO_TypeDef GPIOx, uint8_t PortPins) + 338 { + 339 1 if(GPIOx == GPIO0) + 340 1 { + 341 2 return ((BitStatus)(P0 & PortPins)); + 342 2 } + 343 1 else if(GPIOx == GPIO1) + 344 1 { + C51 COMPILER V9.01 SC92F_GPIO 09/11/2020 09:48:38 PAGE 7 + + 345 2 return ((BitStatus)(P1 & PortPins)); + 346 2 } + 347 1 else if(GPIOx == GPIO2) + 348 1 { + 349 2 return ((BitStatus)(P2 & PortPins)); + 350 2 } + 351 1 #if defined (SC92F854x) || defined (SC92F754x) ||defined (SC92F844xB) || defined (SC92F744xB)||defined + -(SC92F84Ax_2) || defined (SC92F74Ax_2) + else if(GPIOx == GPIO3) + { + return ((BitStatus)(P3 & PortPins)); + } + else if(GPIOx == GPIO4) + { + return ((BitStatus)(P4 & PortPins)); + } + #endif + 361 1 #if defined (SC92F854x) || defined (SC92F754x) ||defined (SC92F844xB) || defined (SC92F744xB)||defined + -(SC92F84Ax_2) || defined (SC92F74Ax_2)|| defined (SC92F846xB) || defined (SC92F746xB) || defined (SC92F836xB) || defined + - (SC92F736xB) + else if(GPIOx == GPIO5) + { + return ((BitStatus)(P5 & PortPins)); + } + #endif + 367 1 return 0; + 368 1 } + 369 + 370 /******************* (C) COPYRIGHT 2020 SinOne Microelectronics *****END OF FILE****/ + + +MODULE INFORMATION: STATIC OVERLAYABLE + CODE SIZE = 220 ---- + CONSTANT SIZE = ---- ---- + XDATA SIZE = ---- ---- + PDATA SIZE = ---- ---- + DATA SIZE = ---- ---- + IDATA SIZE = ---- ---- + BIT SIZE = ---- ---- + EDATA SIZE = ---- ---- + HDATA SIZE = ---- ---- + XDATA CONST SIZE = ---- ---- + FAR CONST SIZE = ---- ---- +END OF MODULE INFORMATION. + + +C51 COMPILATION COMPLETE. 0 WARNING(S), 0 ERROR(S) diff --git a/CFG/SC92F8363B/Keil_Mould/List/sc92f_option.lst b/CFG/SC92F8363B/Keil_Mould/List/sc92f_option.lst new file mode 100644 index 0000000..07dd1ad --- /dev/null +++ b/CFG/SC92F8363B/Keil_Mould/List/sc92f_option.lst @@ -0,0 +1,187 @@ +C51 COMPILER V9.01 SC92F_OPTION 09/11/2020 09:48:38 PAGE 1 + + +C51 COMPILER V9.01, COMPILATION OF MODULE SC92F_OPTION +OBJECT MODULE PLACED IN ..\Output\sc92f_option.obj +COMPILER INVOKED BY: E:\Keil\C51\BIN\C51.EXE ..\FWLib\SC92F_Lib\src\sc92f_option.c OMF2 BROWSE INCDIR(..\FWLib\SC92F_Lib + -\inc;..\User) DEBUG PRINT(..\List\sc92f_option.lst) OBJECT(..\Output\sc92f_option.obj) + +line level source + + 1 //************************************************************ + 2 // Copyright (c) 深圳市赛元微电子有限公司 + 3 // 文件名称 : sc92f_option.c + 4 // 作者 : + 5 // 模块功能 : Customer Option寄存器配置C文件 + 6 // 局部函数列表: + 7 // 最后更正日期: 2020/8/18 + 8 // 版本 : V1.0 + 9 // 说明 : + 10 //************************************************************* + 11 + 12 #include "sc92f_option.h" + 13 + 14 /***************************************************** + 15 *函数名称:void OPTION_WDT_Cmd(FunctionalState NewState) + 16 *函数功能:WDT功能开关函数 + 17 *入口参数:FunctionalState NewState 功能启动/关闭选择 + 18 *出口参数:void + 19 *****************************************************/ + 20 void OPTION_WDT_Cmd(FunctionalState NewState) + 21 { + 22 1 OPINX = 0XC1; + 23 1 if(NewState == DISABLE) + 24 1 { + 25 2 OPREG &= 0X7F; + 26 2 } + 27 1 else + 28 1 { + 29 2 OPREG |= 0X80; + 30 2 } + 31 1 } + 32 + 33 /***************************************************** + 34 *函数名称:void OPTION_XTIPLL_Cmd(FunctionalState NewState) + 35 *函数功能:外部低频晶振使能 + 36 *入口参数:FunctionalState NewState 启动/关闭选择 + 37 *出口参数:void + 38 *****************************************************/ + 39 void OPTION_XTIPLL_Cmd(FunctionalState NewState) + 40 { + 41 1 OPINX = 0XC1; + 42 1 if(NewState == DISABLE) + 43 1 { + 44 2 OPREG &= 0XBF; + 45 2 } + 46 1 else + 47 1 { + 48 2 OPREG |= 0X40; + 49 2 } + 50 1 } + 51 + 52 /***************************************************** + 53 *函数名称:void OPTION_SYSCLK_Init(SYSCLK_PresSel_TypeDef SYSCLK_PresSel) + 54 *函数功能:系统时钟分频初始化 + C51 COMPILER V9.01 SC92F_OPTION 09/11/2020 09:48:38 PAGE 2 + + 55 *入口参数:SYSCLK_PresSel 选择系统时钟分频 + 56 *出口参数:void + 57 *****************************************************/ + 58 void OPTION_SYSCLK_Init(SYSCLK_PresSel_TypeDef SYSCLK_PresSel) + 59 { + 60 1 OPINX = 0XC1; + 61 1 OPREG = OPREG & 0XCF | SYSCLK_PresSel; + 62 1 } + 63 + 64 /***************************************************** + 65 *函数名称:void OPTION_RST_PIN_Cmd(FunctionalState NewState) + 66 *函数功能:外部复位管脚(P17)使能 + 67 *入口参数:FunctionalState NewState 使能/关闭选择 + 68 *出口参数:void + 69 *****************************************************/ + 70 void OPTION_RST_PIN_Cmd(FunctionalState NewState) + 71 { + 72 1 OPINX = 0XC1; + 73 1 if(NewState == DISABLE) + 74 1 { + 75 2 OPREG |= 0X08; + 76 2 } + 77 1 else + 78 1 { + 79 2 OPREG &= 0XF7; + 80 2 } + 81 1 } + 82 + 83 /***************************************************** + 84 *函数名称:void OPTION_LVR_Init(LVR_Config_TypeDef LVR_Config) + 85 *函数功能:LVR 电压选择 + 86 *入口参数:LVR_Config 选择LVR电压 + 87 *出口参数:void + 88 *****************************************************/ + 89 void OPTION_LVR_Init(LVR_Config_TypeDef LVR_Config) + 90 { + 91 1 OPINX = 0XC1; + 92 1 OPREG = OPREG & 0XF8 | LVR_Config; + 93 1 } + 94 + 95 /***************************************************** + 96 *函数名称:void OPTION_ADC_VrefConfig(ADC_Vref_TypeDef ADC_Vref) + 97 *函数功能:ADC 参考电压选择 + 98 *入口参数:ADC_Vref 选择ADC参考电压 + 99 *出口参数:void + 100 *****************************************************/ + 101 void OPTION_ADC_VrefConfig(ADC_Vref_TypeDef ADC_Vref) + 102 { + 103 1 OPINX = 0xC2; + 104 1 OPREG = OPREG & 0X7F | ADC_Vref; + 105 1 } + 106 + 107 /************************************************** + 108 *函数名称:void OPTION_IAP_SetOperateRange(IAP_OperateRange_TypeDef IAP_OperateRange) + 109 *函数功能:允许IAP操作的范围设置 + 110 *入口参数:IAP_OperateRange IAP操作范围 + 111 *出口参数:void + 112 **************************************************/ + 113 void OPTION_IAP_SetOperateRange(IAP_OperateRange_TypeDef IAP_OperateRange) + 114 { + 115 1 OPINX = 0xC2; + 116 1 OPREG = (OPREG & 0xF3) | IAP_OperateRange; + C51 COMPILER V9.01 SC92F_OPTION 09/11/2020 09:48:38 PAGE 3 + + 117 1 } + 118 + 119 #if defined (SC92F846xB) || defined (SC92F746xB) || defined (SC92F836xB) || defined (SC92F736xB)|| defined + - (SC92F83Ax) || defined (SC92F73Ax)|| defined (SC92F84Ax) || defined (SC92F74Ax)|| defined (SC92F8003)|| defined (SC92F7 + -42x) + 120 /***************************************************** + 121 *函数名称:void OPTION_XTIPLL_SetRange(XTIPLL_Range_TypeDef XTIPLL_Range) + 122 *函数功能:外部高频晶振频率范围 + 123 *入口参数:XTIPLL_Range 外部晶振频率选择 + 124 *出口参数:void + 125 *****************************************************/ + 126 void OPTION_XTIPLL_SetRange(XTIPLL_Range_TypeDef XTIPLL_Range) + 127 { + 128 1 OPINX = 0XC2; + 129 1 OPREG = OPREG & 0XBF | XTIPLL_Range; + 130 1 } + 131 #endif + 132 + 133 #if defined (SC92F742x)||defined (SC92F83Ax) || defined (SC92F73Ax)|| defined (SC92F84Ax) || defined (SC92 + -F74Ax) ||defined (SC92F74Ax_2)||defined (SC92F84Ax_2) + /************************************************** + *函数名称:void OPTION_JTAG_Cmd(FunctionalState NewState) + *函数功能:JTAG模式使能开关 + *入口参数:FunctionalState NewState 功能启动/关闭选择 + *出口参数:void + **************************************************/ + void OPTION_JTAG_Cmd(FunctionalState NewState) + { + OPINX = 0xC2; + if(NewState == DISABLE) + { + OPREG |= 0X10; //1 JTAG无效 + } + else + { + OPREG &= 0XEF; //0 JTAG有效 + } + } + #endif + + +MODULE INFORMATION: STATIC OVERLAYABLE + CODE SIZE = 97 ---- + CONSTANT SIZE = ---- ---- + XDATA SIZE = ---- ---- + PDATA SIZE = ---- ---- + DATA SIZE = ---- ---- + IDATA SIZE = ---- ---- + BIT SIZE = ---- ---- + EDATA SIZE = ---- ---- + HDATA SIZE = ---- ---- + XDATA CONST SIZE = ---- ---- + FAR CONST SIZE = ---- ---- +END OF MODULE INFORMATION. + + +C51 COMPILATION COMPLETE. 0 WARNING(S), 0 ERROR(S) diff --git a/CFG/SC92F8363B/Keil_Mould/List/sc92f_pwm.lst b/CFG/SC92F8363B/Keil_Mould/List/sc92f_pwm.lst new file mode 100644 index 0000000..ec3ad96 --- /dev/null +++ b/CFG/SC92F8363B/Keil_Mould/List/sc92f_pwm.lst @@ -0,0 +1,945 @@ +C51 COMPILER V9.01 SC92F_PWM 09/11/2020 09:48:38 PAGE 1 + + +C51 COMPILER V9.01, COMPILATION OF MODULE SC92F_PWM +OBJECT MODULE PLACED IN ..\Output\sc92f_pwm.obj +COMPILER INVOKED BY: E:\Keil\C51\BIN\C51.EXE ..\FWLib\SC92F_Lib\src\sc92f_pwm.c OMF2 BROWSE INCDIR(..\FWLib\SC92F_Lib\in + -c;..\User) DEBUG PRINT(..\List\sc92f_pwm.lst) OBJECT(..\Output\sc92f_pwm.obj) + +line level source + + 1 //************************************************************ + 2 // Copyright (c) 深圳市赛元微电子有限公司 + 3 // 文件名称 : sc92f_pwm.c + 4 // 作者 : + 5 // 模块功能 : PWM固件库函数C文件 + 6 // 局部函数列表: + 7 // 最后更正日期: 2020/8/18 + 8 // 版本 : V1.0 + 9 // 说明 :本文件仅适用于赛元92F系列单片机 + 10 //************************************************************* + 11 + 12 #include "sc92f_pwm.h" + 13 + 14 #if defined (SC92F854x) || defined (SC92F754x) ||defined (SC92F844xB) || defined (SC92F744xB)||defined ( + -SC92F84Ax_2) || defined (SC92F74Ax_2) + uint16_t xdata PWMREG[8] _at_ 0x740; //PWM占空比调节寄存器 + uint16_t pwm_tmpreg[8] = {0,0,0,0,0,0,0,0}; //PWM占空比调节寄存器缓存数组 + + /************************************************** + *函数名称:void PWM_DeInit(void) + *函数功能:PWM相关寄存器复位至缺省值 + *入口参数:void + *出口参数:void + **************************************************/ + void PWM_DeInit(void) + { + static uint8_t i; + PWMCFG = 0X00; + PWMCON = 0X00; + IE1 &= 0XFD; + IP1 &= 0XFD; + for(i=0;i<8;i++) + { + PWMREG[i] = 0; + } + } + + /************************************************** + *函数名称:void PWM_Init(PWM_PresSel_TypeDef PWM_PresSel, uint16_t PWM_Period) + *函数功能:PWM初始化配置函数 + *入口参数:PWM_PresSel 预分频选择 + PWM_Period PWM周期配置 + *出口参数:void + **************************************************/ + void PWM_Init(PWM_PresSel_TypeDef PWM_PresSel, uint16_t PWM_Period) + { + PWM_Period -= 1; + PWMCFG = (PWMCFG & 0XCF) | PWM_PresSel; //预分频 + PWMCFG = (PWMCFG & 0XF0) | (uint8_t)(PWM_Period / 256); //周期高4位 + PWMCON = (uint8_t)(PWM_Period & 0X00FF); //周期低8位 + } + + /************************************************** + *函数名称:void PWM_OutputStateConfig(uint8_t PWM_OutputPin, PWM_OutputState_TypeDef PWM_OutputState) + C51 COMPILER V9.01 SC92F_PWM 09/11/2020 09:48:38 PAGE 2 + + *函数功能:PWMx输出使能/失能配置函数 + *入口参数:PWM_OutputPin PWMx选择 + PWM_OutputState PWM输出状态配置 + *出口参数:void + **************************************************/ + void PWM_OutputStateConfig(uint8_t PWM_OutputPin, PWM_OutputState_TypeDef PWM_OutputState) + { + uint8_t i; + for(i=0;i<8;i++) + { + if(PWM_OutputPin&(0x01<> 2); //周期高八位 + } + + /************************************************** + *函数名称:void PWM_OutputStateConfig(uint8_t PWM_OutputPin, PWM_OutputState_TypeDef PWM_OutputState) + *函数功能:PWMx输出使能/失能配置函数 + *入口参数:PWM_OutputPin PWMx选择 + PWM_OutputState PWM输出状态配置 + C51 COMPILER V9.01 SC92F_PWM 09/11/2020 09:48:38 PAGE 5 + + *出口参数:void + **************************************************/ + void PWM_OutputStateConfig(uint8_t PWM_OutputPin, PWM_OutputState_TypeDef PWM_OutputState) + { + if(PWM_OutputState == PWM_OUTPUTSTATE_ENABLE) + { + PWMCON |= PWM_OutputPin; + } + else + { + PWMCON &= (~PWM_OutputPin); + } + } + + /************************************************** + *函数名称:void PWM_PolarityConfig(uint8_t PWM_OutputPin, PWM_Polarity_TypeDef PWM_Polarity) + *函数功能:PWMx正/反向输出配置函数 + *入口参数:PWM_OutputPin PWMx选择 + PWM_Polarity PWM输出正/反向配置 + *出口参数:void + **************************************************/ + void PWM_PolarityConfig(uint8_t PWM_OutputPin, PWM_Polarity_TypeDef PWM_Polarity) + { + if(PWM_Polarity == PWM_POLARITY_INVERT) + { + PWMCFG |= PWM_OutputPin; + } + else + { + PWMCFG &= (~PWM_OutputPin); + } + } + + /************************************************** + *函数名称:void PWM_IndependentModeConfig(PWM_OutputPin_TypeDef PWM_OutputPin, uint16_t PWM_DutyCycle) + *函数功能:PWMx独立工作模式配置函数 + *入口参数:PWM_OutputPin PWMx独立通道选择 + PWM_DutyCycle PWM占空比配置 + *出口参数:void + **************************************************/ + void PWM_IndependentModeConfig(PWM_OutputPin_TypeDef PWM_OutputPin, uint16_t PWM_DutyCycle) + { + PWMDTYB &= 0X7F; //设置PWM为独立模式 + switch(PWM_OutputPin) //设置占空比 + { + case PWM0: + PWMDTYA = PWMDTYA & 0xfc | (PWM_DutyCycle % 4); + PWMDTY0 = (uint8_t)(PWM_DutyCycle >> 2); + break; + case PWM1: + PWMDTYA = PWMDTYA & 0xf3 | ((PWM_DutyCycle % 4) << 2); + PWMDTY1 = (uint8_t)(PWM_DutyCycle >> 2); + break; + case PWM2: + PWMDTYA = PWMDTYA & 0xcf | ((PWM_DutyCycle % 4) << 4); + PWMDTY2 = (uint8_t)(PWM_DutyCycle >> 2); + break; + case PWM3: + PWMDTYB = PWMDTYB & 0xfc | (PWM_DutyCycle % 4); + PWMDTY3 = (uint8_t)(PWM_DutyCycle >> 2); + break; + case PWM4: + C51 COMPILER V9.01 SC92F_PWM 09/11/2020 09:48:38 PAGE 6 + + PWMDTYB = PWMDTYB & 0xf3 | ((PWM_DutyCycle % 4) << 2); + PWMDTY4 = (uint8_t)(PWM_DutyCycle >> 2); + break; + case PWM5: + PWMDTYB = PWMDTYB & 0xcf | ((PWM_DutyCycle % 4) << 4); + PWMDTY5 = (uint8_t)(PWM_DutyCycle >> 2); + break; + default: + break; + } + } + + /************************************************** + *函数名称:void PWM_ComplementaryModeConfig(PWM_ComplementaryOutputPin_TypeDef PWM_ComplementaryOutputPin, + - uint16_t PWM_DutyCycle) + *函数功能:PWMxPWMy互补工作模式配置函数 + *入口参数:PWM_ComplementaryOutputPin PWMxPWMy互补通道选择 + PWM_DutyCycle PWM占空比配置 + *出口参数:void + **************************************************/ + void PWM_ComplementaryModeConfig(PWM_ComplementaryOutputPin_TypeDef PWM_ComplementaryOutputPin, uint16_t P + -WM_DutyCycle) + { + PWMDTYB |= 0X80; //设置PWM为互补模式 + switch(PWM_ComplementaryOutputPin) //设置占空比 + { + case PWM0PWM3: + PWMDTYA = PWMDTYA & 0xfc | (PWM_DutyCycle % 4); + PWMDTY0 = (uint8_t)(PWM_DutyCycle >> 2); + break; + case PWM1PWM4: + PWMDTYA = PWMDTYA & 0xf3 | ((PWM_DutyCycle % 4) << 2); + PWMDTY1 = (uint8_t)(PWM_DutyCycle >> 2); + break; + case PWM2PWM5: + PWMDTYA = PWMDTYA & 0xcf | ((PWM_DutyCycle % 4) << 4); + PWMDTY2 = (uint8_t)(PWM_DutyCycle >> 2); + break; + default: + break; + } + } + + /************************************************** + *函数名称:void PWM_DeadTimeConfig(uint8_t PWM012_RisingDeadTime, uint8_t PWM345_fallingDeadTime) + *函数功能:PWM互补工作模式下死区时间配置函数 + *入口参数:PWM012_RisingDeadTime PWM死区上升时间 + PWM345_fallingDeadTime PWM死区下降时间 + *出口参数:void + **************************************************/ + void PWM_DeadTimeConfig(uint8_t PWM012_RisingDeadTime, uint8_t PWM345_fallingDeadTime) + { + PWMDTY3 = (PWM012_RisingDeadTime | (PWM345_fallingDeadTime << 4)); + } + + /***************************************************** + *函数名称:void PWM_Cmd(FunctionalState NewState) + *函数功能:PWM功能开关函数 + *入口参数:FunctionalState NewState 功能启动/关闭选择 + *出口参数:void + *****************************************************/ + void PWM_Cmd(FunctionalState NewState) + C51 COMPILER V9.01 SC92F_PWM 09/11/2020 09:48:38 PAGE 7 + + { + if (NewState != DISABLE) + { + PWMCON |= 0X80; + } + else + { + PWMCON &= ~0X80; + } + } + + /***************************************************** + *函数名称:void PWM_ITConfig(FunctionalState NewState, PriorityStatus Priority) + *函数功能:PWM中断初始化 + *入口参数:FunctionalState NewState 中断使能/关闭选择 + PriorityStatus Priority 中断优先级选择 + *出口参数:void + *****************************************************/ + void PWM_ITConfig(FunctionalState NewState, PriorityStatus Priority) + { + if (NewState != DISABLE) + { + IE1 |= 0X02; + } + else + { + IE1 &= 0XFD; + } + + if(Priority == LOW) + { + IP1 &= 0XFD; + } + else + { + IP1 |= 0X02; + } + } + + /***************************************************** + *函数名称:FlagStatus PWM_GetFlagStatus(void) + *函数功能:获得PWM中断标志状态 + *入口参数:void + *出口参数:FlagStatus PWM中断标志状态 + *****************************************************/ + FlagStatus PWM_GetFlagStatus(void) + { + return (FlagStatus)(PWMCON & 0X40); + } + + /***************************************************** + *函数名称:void PWM_ClearFlag(void) + *函数功能:清除PWM中断标志状态 + *入口参数:void + *出口参数:void + *****************************************************/ + void PWM_ClearFlag(void) + { + PWMCON &= 0XBF; + } + #endif + 422 + C51 COMPILER V9.01 SC92F_PWM 09/11/2020 09:48:38 PAGE 8 + + 423 + 424 + 425 + 426 + 427 + 428 + 429 + 430 + 431 #if defined (SC92F8003) + 432 /************************************************** + 433 *函数名称:void PWM_DeInit(void) + 434 *函数功能:PWM相关寄存器复位至缺省值 + 435 *入口参数:void + 436 *出口参数:void + 437 **************************************************/ + 438 void PWM_DeInit(void) + 439 { + 440 1 PWMCFG = 0X00; + 441 1 PWMCON0 = 0X00; + 442 1 PWMPRD = 0X00; + 443 1 PWMDTYA = 0X00; + 444 1 PWMDTY0 = 0X00; + 445 1 PWMDTY1 = 0X00; + 446 1 PWMDTY2 = 0X00; + 447 1 PWMCON1 = 0X00; + 448 1 PWMDTYB = 0X00; + 449 1 PWMDTY3 = 0X00; + 450 1 PWMDTY4 = 0X00; + 451 1 PWMDTY5 = 0X00; + 452 1 PWMDTY6 = 0X00; + 453 1 IE1 &= 0XFD; + 454 1 IP1 &= 0XFD; + 455 1 } + 456 + 457 /************************************************** + 458 *函数名称:void PWM_Init(PWM_PresSel_TypeDef PWM_PresSel, uint16_t PWM_Period) + 459 *函数功能:PWM初始化配置函数 + 460 *入口参数:PWM_PresSel 预分频选择 + 461 PWM_Period PWM周期配置 + 462 *出口参数:void + 463 **************************************************/ + 464 void PWM_Init(PWM_PresSel_TypeDef PWM_PresSel, uint16_t PWM_Period) + 465 { + 466 1 PWM_Period -= 1; + 467 1 PWMCON0 = (PWMCON0 & 0XCC) | PWM_PresSel | (uint8_t)(PWM_Period & 0X0003); //预分频及周期的低2位 + 468 1 PWMPRD = (uint8_t)(PWM_Period >> 2); //周期高八位 + 469 1 } + 470 + 471 /************************************************** + 472 *函数名称:void PWM_OutputStateConfig(uint8_t PWM_OutputPin, PWM_OutputState_TypeDef PWM_OutputState) + 473 *函数功能:PWMx输出使能/失能配置函数 + 474 *入口参数:PWM_OutputPin PWMx选择 + 475 PWM_OutputState PWM输出状态配置 + 476 *出口参数:void + 477 **************************************************/ + 478 void PWM_OutputStateConfig(uint8_t PWM_OutputPin, PWM_OutputState_TypeDef PWM_OutputState) + 479 { + 480 1 if(PWM_OutputState == PWM_OUTPUTSTATE_ENABLE) + 481 1 { + 482 2 PWMCON1 |= PWM_OutputPin; + 483 2 } + 484 1 else + C51 COMPILER V9.01 SC92F_PWM 09/11/2020 09:48:38 PAGE 9 + + 485 1 { + 486 2 PWMCON1 &= (~PWM_OutputPin); + 487 2 } + 488 1 } + 489 + 490 /************************************************** + 491 *函数名称:void PWM_PWM2Selection(PWM2_OutputPin_TypeDef PWM2_OutputPin) + 492 *函数功能:PWM2管脚选择函数 + 493 *入口参数:PWM2_OutputPin PWM2管脚选择 + 494 *出口参数:void + 495 **************************************************/ + 496 void PWM_PWM2Selection(PWM2_OutputPin_TypeDef PWM2_OutputPin) + 497 { + 498 1 PWMCON0 = PWMCON0 & 0XFB | PWM2_OutputPin; + 499 1 } + 500 + 501 /************************************************** + 502 *函数名称:void PWM_PWM5Selection(PWM5_OutputPin_TypeDef PWM5_OutputPin) + 503 *函数功能:PWM5管脚选择函数 + 504 *入口参数:PWM5_OutputPin PWM5管脚选择 + 505 *出口参数:void + 506 **************************************************/ + 507 void PWM_PWM5Selection(PWM5_OutputPin_TypeDef PWM5_OutputPin) + 508 { + 509 1 PWMCON0 = PWMCON0 & 0XF7 | PWM5_OutputPin; + 510 1 } + 511 + 512 /************************************************** + 513 *函数名称:void PWM_PolarityConfig(uint8_t PWM_OutputPin, PWM_Polarity_TypeDef PWM_Polarity) + 514 *函数功能:PWMx正/反向输出配置函数 + 515 *入口参数:PWM_OutputPin PWMx选择 + 516 PWM_Polarity PWM输出正/反向配置 + 517 *出口参数:void + 518 **************************************************/ + 519 void PWM_PolarityConfig(uint8_t PWM_OutputPin, PWM_Polarity_TypeDef PWM_Polarity) + 520 { + 521 1 if(PWM_Polarity == PWM_POLARITY_INVERT) + 522 1 { + 523 2 PWMCFG |= PWM_OutputPin; + 524 2 } + 525 1 else + 526 1 { + 527 2 PWMCFG &= (~PWM_OutputPin); + 528 2 } + 529 1 } + 530 + 531 /************************************************** + 532 *函数名称:void PWM_IndependentModeConfig(PWM_OutputPin_TypeDef PWM_OutputPin, uint16_t PWM_DutyCycle) + 533 *函数功能:PWMx独立工作模式配置函数 + 534 *入口参数:PWM_OutputPin PWMx独立通道选择 + 535 PWM_DutyCycle PWM占空比配置 + 536 *出口参数:void + 537 **************************************************/ + 538 void PWM_IndependentModeConfig(PWM_OutputPin_TypeDef PWM_OutputPin, uint16_t PWM_DutyCycle) + 539 { + 540 1 if(PWM_OutputPin!=PWM6) + 541 1 { + 542 2 PWMCON1 &= 0X7F; //设置PWM为独立模式 + 543 2 } + 544 1 switch(PWM_OutputPin) //设置占空比 + 545 1 { + 546 2 case PWM0: + C51 COMPILER V9.01 SC92F_PWM 09/11/2020 09:48:38 PAGE 10 + + 547 2 PWMDTYA = PWMDTYA & 0XFC | (PWM_DutyCycle % 4); + 548 2 PWMDTY0 = (uint8_t)(PWM_DutyCycle >> 2); + 549 2 break; + 550 2 case PWM1: + 551 2 PWMDTYA = PWMDTYA & 0XF3 | ((PWM_DutyCycle % 4) << 2); + 552 2 PWMDTY1 = (uint8_t)(PWM_DutyCycle >> 2); + 553 2 break; + 554 2 case PWM2: + 555 2 PWMDTYA = PWMDTYA & 0XCF | ((PWM_DutyCycle % 4) << 4); + 556 2 PWMDTY2 = (uint8_t)(PWM_DutyCycle >> 2); + 557 2 break; + 558 2 case PWM3: + 559 2 PWMDTYA = PWMDTYA & 0X3F | ((PWM_DutyCycle % 4) << 6); + 560 2 PWMDTY3 = (uint8_t)(PWM_DutyCycle >> 2); + 561 2 break; + 562 2 case PWM4: + 563 2 PWMDTYB = PWMDTYB & 0XFC | (PWM_DutyCycle % 4); + 564 2 PWMDTY4 = (uint8_t)(PWM_DutyCycle >> 2); + 565 2 break; + 566 2 case PWM5: + 567 2 PWMDTYB = PWMDTYB & 0XF3 | ((PWM_DutyCycle % 4) << 2); + 568 2 PWMDTY5 = (uint8_t)(PWM_DutyCycle >> 2); + 569 2 break; + 570 2 case PWM6: + 571 2 PWMDTYB = PWMDTYB & 0XCF | ((PWM_DutyCycle % 4) << 4); + 572 2 PWMDTY6 = (uint8_t)(PWM_DutyCycle >> 2); + 573 2 break; + 574 2 default: + 575 2 break; + 576 2 } + 577 1 } + 578 + 579 /************************************************** + 580 *函数名称:void PWM_ComplementaryModeConfig(PWM_ComplementaryOutputPin_TypeDef PWM_ComplementaryOutputPin, + - uint16_t PWM_DutyCycle) + 581 *函数功能:PWMxPWMy互补工作模式配置函数 + 582 *入口参数:PWM_ComplementaryOutputPin PWMxPWMy互补通道选择 + 583 PWM_DutyCycle PWM占空比配置 + 584 *出口参数:void + 585 **************************************************/ + 586 void PWM_ComplementaryModeConfig(PWM_ComplementaryOutputPin_TypeDef PWM_ComplementaryOutputPin, uint16_t P + -WM_DutyCycle) + 587 { + 588 1 PWMCON1 |= 0X80; //设置PWM为互补模式 + 589 1 switch(PWM_ComplementaryOutputPin) //设置占空比 + 590 1 { + 591 2 case PWM0PWM3: + 592 2 PWMDTYA = PWMDTYA & 0XFC | (PWM_DutyCycle % 4); + 593 2 PWMDTY0 = (uint8_t)(PWM_DutyCycle >> 2); + 594 2 break; + 595 2 case PWM1PWM4: + 596 2 PWMDTYA = PWMDTYA & 0XF3 | ((PWM_DutyCycle % 4) << 2); + 597 2 PWMDTY1 = (uint8_t)(PWM_DutyCycle >> 2); + 598 2 break; + 599 2 case PWM2PWM5: + 600 2 PWMDTYA = PWMDTYA & 0XCF | ((PWM_DutyCycle % 4) << 4); + 601 2 PWMDTY2 = (uint8_t)(PWM_DutyCycle >> 2); + 602 2 break; + 603 2 default: + 604 2 break; + 605 2 } + 606 1 } + C51 COMPILER V9.01 SC92F_PWM 09/11/2020 09:48:38 PAGE 11 + + 607 + 608 /************************************************** + 609 *函数名称:void PWM_DeadTimeConfig(uint8_t PWM012_RisingDeadTime, uint8_t PWM345_fallingDeadTime) + 610 *函数功能:PWM互补工作模式下死区时间配置函数 + 611 *入口参数:PWM012_RisingDeadTime PWM死区上升时间 + 612 PWM345_fallingDeadTime PWM死区下降时间 + 613 *出口参数:void + 614 **************************************************/ + 615 void PWM_DeadTimeConfig(uint8_t PWM012_RisingDeadTime, uint8_t PWM345_fallingDeadTime) + 616 { + 617 1 PWMDTY3 = (PWM012_RisingDeadTime | (PWM345_fallingDeadTime << 4)); + 618 1 } + 619 + 620 /***************************************************** + 621 *函数名称:void PWM_Cmd(FunctionalState NewState) + 622 *函数功能:PWM功能开关函数 + 623 *入口参数:FunctionalState NewState 功能启动/关闭选择 + 624 *出口参数:void + 625 *****************************************************/ + 626 void PWM_Cmd(FunctionalState NewState) + 627 { + 628 1 if (NewState != DISABLE) + 629 1 { + 630 2 PWMCON0 |= 0X80; + 631 2 } + 632 1 else + 633 1 { + 634 2 PWMCON0 &= ~0X80; + 635 2 } + 636 1 } + 637 + 638 /***************************************************** + 639 *函数名称:void PWM_ITConfig(FunctionalState NewState, PriorityStatus Priority) + 640 *函数功能:PWM中断初始化 + 641 *入口参数:FunctionalState NewState 中断使能/关闭选择 + 642 PriorityStatus Priority 中断优先级选择 + 643 *出口参数:void + 644 *****************************************************/ + 645 void PWM_ITConfig(FunctionalState NewState, PriorityStatus Priority) + 646 { + 647 1 if (NewState != DISABLE) + 648 1 { + 649 2 IE1 |= 0X02; + 650 2 } + 651 1 else + 652 1 { + 653 2 IE1 &= 0XFD; + 654 2 } + 655 1 + 656 1 if(Priority == LOW) + 657 1 { + 658 2 IP1 &= 0XFD; + 659 2 } + 660 1 else + 661 1 { + 662 2 IP1 |= 0X02; + 663 2 } + 664 1 } + 665 + 666 /***************************************************** + 667 *函数名称:FlagStatus PWM_GetFlagStatus(void) + 668 *函数功能:获得PWM中断标志状态 + C51 COMPILER V9.01 SC92F_PWM 09/11/2020 09:48:38 PAGE 12 + + 669 *入口参数:void + 670 *出口参数:FlagStatus PWM中断标志状态 + 671 *****************************************************/ + 672 FlagStatus PWM_GetFlagStatus(void) + 673 { + 674 1 return (FlagStatus)(PWMCON0 & 0X40); + 675 1 } + 676 + 677 /***************************************************** + 678 *函数名称:void PWM_ClearFlag(void) + 679 *函数功能:清除PWM中断标志状态 + 680 *入口参数:void + 681 *出口参数:void + 682 *****************************************************/ + 683 void PWM_ClearFlag(void) + 684 { + 685 1 PWMCON0 &= 0XBF; + 686 1 } + 687 #endif + 688 + 689 + 690 + 691 + 692 + 693 + 694 + 695 + 696 + 697 + 698 + 699 + 700 #if defined (SC92F742x) + /************************************************** + *函数名称:void PWM_DeInit(void) + *函数功能:PWM相关寄存器复位至缺省值 + *入口参数:void + *出口参数:void + **************************************************/ + void PWM_DeInit(void) + { + PWMCFG0 = 0X00; + PWMCON = 0X00; + PWMPRD = 0X00; + PWMCFG1 = 0X00; + PWMDTY0 = 0X00; + PWMDTY1 = 0X00; + PWMDTY2 = 0X00; + PWMDTY3 = 0X00; + PWMDTY4 = 0X00; + PWMDTY5 = 0X00; + IE1 &= ~0X02; + IP1 &= ~0X02; + } + + /************************************************** + *函数名称:void PWM_Init(PWM_PresSel_TypeDef PWM_PresSel, uint16_t PWM_Period) + *函数功能:PWM初始化配置函数 + *入口参数:PWM_PresSel 预分频选择 + PWM_Period PWM周期配置 + *出口参数:void + **************************************************/ + void PWM_Init(PWM_PresSel_TypeDef PWM_PresSel, uint16_t PWM_Period) + C51 COMPILER V9.01 SC92F_PWM 09/11/2020 09:48:38 PAGE 13 + + { + PWM_Period -= 1; + PWMCON = (PWMCON & 0XF8) | PWM_PresSel; //预分频 + PWMPRD = PWM_Period; //周期配置 + } + + /************************************************** + *函数名称:void PWM_OutputStateConfig(PWM_OutputPin_TypeDef PWM_OutputPin, PWM_OutputState_TypeDef PWM_Out + -putState) + *函数功能:PWMx输出使能/失能配置函数 + *入口参数:PWM_OutputPin PWMx选择 + PWM_OutputState PWM输出状态配置 + *出口参数:void + **************************************************/ + void PWM_OutputStateConfig(uint8_t PWM_OutputPin, PWM_OutputState_TypeDef PWM_OutputState) + { + if(PWM_OutputState==PWM_OUTPUTSTATE_DISABLE) + { + PWMCON = PWMCON & (~(PWM_OutputPin&0x38)); + PWMCFG0 = PWMCFG0 & (~(PWM_OutputPin&0x07)); + } + else + { + PWMCON = PWMCON | (PWM_OutputPin&0x38); + PWMCFG0 = PWMCFG0 |(PWM_OutputPin&0x07); + } + } + + /************************************************** + *函数名称:void PWM_PolarityConfig(PWM_OutputPin_TypeDef PWM_OutputPin, PWM_Polarity_TypeDef PWM_Polarity) + *函数功能:PWMx正/反向输出配置函数 + *入口参数:PWM_OutputPin PWMx选择 + PWM_Polarity PWM输出正/反向配置 + *出口参数:void + **************************************************/ + void PWM_PolarityConfig(uint8_t PWM_OutputPin, PWM_Polarity_TypeDef PWM_Polarity) + { + if(PWM_Polarity==PWM_POLARITY_NON_INVERT) + { + PWMCFG0 = PWMCFG0 & (~(PWM_OutputPin&0x38)); + PWMCFG1 = PWMCFG1 & (~((PWM_OutputPin<<3)&0x38)); + } + else + { + PWMCFG0 = PWMCFG0 | (PWM_OutputPin&0x38); + PWMCFG1 = PWMCFG1 |((PWM_OutputPin<<3)&0x38); + } + } + + /************************************************** + *函数名称:void PWM_IndependentModeConfig(PWM_OutputPin_TypeDef PWM_OutputPin, uint16_t PWM_DutyCycle) + *函数功能:PWMx独立工作模式配置函数 + *入口参数:PWM_OutputPin PWMx独立通道选择 + PWM_DutyCycle PWM占空比配置 + *出口参数:void + **************************************************/ + void PWM_IndependentModeConfig(PWM_OutputPin_TypeDef PWM_OutputPin, uint16_t PWM_DutyCycle) + { + switch(PWM_OutputPin) //设置占空比 + { + case PWM0: + PWMDTY0 = PWM_DutyCycle; + C51 COMPILER V9.01 SC92F_PWM 09/11/2020 09:48:38 PAGE 14 + + break; + case PWM1: + PWMDTY1 = PWM_DutyCycle; + break; + case PWM2: + PWMDTY2 = PWM_DutyCycle; + break; + case PWM3: + PWMDTY3 = PWM_DutyCycle; + break; + case PWM4: + PWMDTY4 = PWM_DutyCycle; + break; + case PWM5: + PWMDTY5 = PWM_DutyCycle; + break; + default: + break; + } + } + + /***************************************************** + *函数名称:void PWM_Cmd(FunctionalState NewState) + *函数功能:PWM功能开关函数 + *入口参数:FunctionalState NewState 功能启动/关闭选择 + *出口参数:void + *****************************************************/ + void PWM_Cmd(FunctionalState NewState) + { + if (NewState != DISABLE) + { + PWMCON |= 0X80; + } + else + { + PWMCON &= ~0X80; + } + } + + /***************************************************** + *函数名称:void PWM_ITConfig(FunctionalState NewState, PriorityStatus Priority) + *函数功能:PWM中断初始化 + *入口参数:FunctionalState NewState 中断使能/关闭选择 + PriorityStatus Priority 中断优先级选择 + *出口参数:void + *****************************************************/ + void PWM_ITConfig(FunctionalState NewState, PriorityStatus Priority) + { + if (NewState != DISABLE) + { + IE1 |= 0X02; + } + else + { + IE1 &= ~0X02; + } + + if(Priority == LOW) + { + IP1 &= ~0X02; + } + else + C51 COMPILER V9.01 SC92F_PWM 09/11/2020 09:48:38 PAGE 15 + + { + IP1 |= 0X02; + } + } + + /***************************************************** + *函数名称:FlagStatus PWM_GetFlagStatus(void) + *函数功能:获得PWM中断标志状态 + *入口参数:void + *出口参数:FlagStatus PWM中断标志状态 + *****************************************************/ + FlagStatus PWM_GetFlagStatus(void) + { + return (FlagStatus)(PWMCON & 0X40); + } + + /***************************************************** + *函数名称:void PWM_ClearFlag(void) + *函数功能:清除PWM中断标志状态 + *入口参数:void + *出口参数:void + *****************************************************/ + void PWM_ClearFlag(void) + { + PWMCON &= 0XBF; + } + #endif + 881 + 882 /******************* (C) COPYRIGHT 2020 SinOne Microelectronics *****END OF FILE****/ + + +MODULE INFORMATION: STATIC OVERLAYABLE + CODE SIZE = 504 ---- + CONSTANT SIZE = ---- ---- + XDATA SIZE = ---- ---- + PDATA SIZE = ---- ---- + DATA SIZE = ---- ---- + IDATA SIZE = ---- ---- + BIT SIZE = ---- ---- + EDATA SIZE = ---- ---- + HDATA SIZE = ---- ---- + XDATA CONST SIZE = ---- ---- + FAR CONST SIZE = ---- ---- +END OF MODULE INFORMATION. + + +C51 COMPILATION COMPLETE. 0 WARNING(S), 0 ERROR(S) diff --git a/CFG/SC92F8363B/Keil_Mould/List/sc92f_pwr.lst b/CFG/SC92F8363B/Keil_Mould/List/sc92f_pwr.lst new file mode 100644 index 0000000..d994f8e --- /dev/null +++ b/CFG/SC92F8363B/Keil_Mould/List/sc92f_pwr.lst @@ -0,0 +1,92 @@ +C51 COMPILER V9.01 SC92F_PWR 09/11/2020 09:48:39 PAGE 1 + + +C51 COMPILER V9.01, COMPILATION OF MODULE SC92F_PWR +OBJECT MODULE PLACED IN ..\Output\sc92f_pwr.obj +COMPILER INVOKED BY: E:\Keil\C51\BIN\C51.EXE ..\FWLib\SC92F_Lib\src\sc92f_pwr.c OMF2 BROWSE INCDIR(..\FWLib\SC92F_Lib\in + -c;..\User) DEBUG PRINT(..\List\sc92f_pwr.lst) OBJECT(..\Output\sc92f_pwr.obj) + +line level source + + 1 //************************************************************ + 2 // Copyright (c) 深圳市赛元微电子有限公司 + 3 // 文件名称 : sc92f_pwr.c + 4 // 作者 : + 5 // 模块功能 : PWR固件库函数C文件 + 6 // 局部函数列表: + 7 // 最后更正日期: 2020/8/18 + 8 // 版本 : V1.0 + 9 // 说明 :本文件仅适用于赛元92F系列单片机 + 10 //************************************************************* + 11 #include "sc92f_pwr.h" + 12 + 13 /************************************************** + 14 *函数名称:void PWR_DeInit(void) + 15 *函数功能:PWR相关寄存器复位至缺省值 + 16 *入口参数:void + 17 *出口参数:void + 18 **************************************************/ + 19 void PWR_DeInit(void) + 20 { + 21 1 PCON &= 0XFC; + 22 1 } + 23 + 24 /************************************************** + 25 *函数名称:void PWR_EnterSTOPMode(void) + 26 *函数功能:MCU进入STOP模式 + 27 *入口参数:void + 28 *出口参数:void + 29 **************************************************/ + 30 void PWR_EnterSTOPMode(void) + 31 { + 32 1 PCON |= 0X02; + 33 1 _nop_(); + 34 1 _nop_(); + 35 1 _nop_(); + 36 1 _nop_(); + 37 1 _nop_(); + 38 1 _nop_(); + 39 1 _nop_(); + 40 1 _nop_(); + 41 1 } + 42 + 43 /************************************************** + 44 *函数名称:void PWR_EnterIDLEMode(void) + 45 *函数功能:MCU进入IDLE模式 + 46 *入口参数:void + 47 *出口参数:void + 48 **************************************************/ + 49 void PWR_EnterIDLEMode(void) + 50 { + 51 1 PCON |= 0X01; + 52 1 _nop_(); + 53 1 _nop_(); + 54 1 _nop_(); + C51 COMPILER V9.01 SC92F_PWR 09/11/2020 09:48:39 PAGE 2 + + 55 1 _nop_(); + 56 1 _nop_(); + 57 1 _nop_(); + 58 1 _nop_(); + 59 1 _nop_(); + 60 1 } + 61 + 62 /******************* (C) COPYRIGHT 2020 SinOne Microelectronics *****END OF FILE****/ + + +MODULE INFORMATION: STATIC OVERLAYABLE + CODE SIZE = 28 ---- + CONSTANT SIZE = ---- ---- + XDATA SIZE = ---- ---- + PDATA SIZE = ---- ---- + DATA SIZE = ---- ---- + IDATA SIZE = ---- ---- + BIT SIZE = ---- ---- + EDATA SIZE = ---- ---- + HDATA SIZE = ---- ---- + XDATA CONST SIZE = ---- ---- + FAR CONST SIZE = ---- ---- +END OF MODULE INFORMATION. + + +C51 COMPILATION COMPLETE. 0 WARNING(S), 0 ERROR(S) diff --git a/CFG/SC92F8363B/Keil_Mould/Output/project name b/CFG/SC92F8363B/Keil_Mould/Output/project name new file mode 100644 index 0000000..a71e9d9 Binary files /dev/null and b/CFG/SC92F8363B/Keil_Mould/Output/project name differ diff --git a/CFG/SC92F8363B/Keil_Mould/Output/project name.SBR b/CFG/SC92F8363B/Keil_Mould/Output/project name.SBR new file mode 100644 index 0000000..e9de136 Binary files /dev/null and b/CFG/SC92F8363B/Keil_Mould/Output/project name.SBR differ diff --git a/CFG/SC92F8363B/Keil_Mould/Output/project name.build_log.htm b/CFG/SC92F8363B/Keil_Mould/Output/project name.build_log.htm new file mode 100644 index 0000000..2c35492 --- /dev/null +++ b/CFG/SC92F8363B/Keil_Mould/Output/project name.build_log.htm @@ -0,0 +1,12 @@ + + +
+

礦ision Build Log

+

Project:

+E:\工作\工作项目\BSP包\SC92F系列通用BSP包V0.0.1\Keil_Mould\Project\project name.uvproj +Project File Date: 09/02/2020 + +

Output:

+
+ + diff --git a/CFG/SC92F8363B/Keil_Mould/Output/project name.lnp b/CFG/SC92F8363B/Keil_Mould/Output/project name.lnp new file mode 100644 index 0000000..cb1c9ce --- /dev/null +++ b/CFG/SC92F8363B/Keil_Mould/Output/project name.lnp @@ -0,0 +1,11 @@ +"..\Output\main.obj", +"..\Output\SC_Init.obj", +"..\Output\SC_it.obj", +"..\Output\sc92f_gpio.obj", +"..\Output\sc92f_option.obj", +"..\Output\STARTUP.obj" +TO "..\Output\project name" + +PRINT("..\List\project name.map") REMOVEUNUSED +CLASSES (CODE(C:0X100), +CONST(C:0X100)) diff --git a/CFG/SC92F8363B/Keil_Mould/Output/sc92f_chksum.__i b/CFG/SC92F8363B/Keil_Mould/Output/sc92f_chksum.__i new file mode 100644 index 0000000..5ef1a8f --- /dev/null +++ b/CFG/SC92F8363B/Keil_Mould/Output/sc92f_chksum.__i @@ -0,0 +1 @@ +"..\FWLib\SC92F_Lib\src\sc92f_chksum.c" OMF2 BROWSE INCDIR(..\FWLib\SC92F_Lib\inc;..\User) DEBUG PRINT(..\List\sc92f_chksum.lst) OBJECT(..\Output\sc92f_chksum.obj) \ No newline at end of file diff --git a/CFG/SC92F8363B/Keil_Mould/Project/STARTUP.A51 b/CFG/SC92F8363B/Keil_Mould/Project/STARTUP.A51 new file mode 100644 index 0000000..7cf4ad8 --- /dev/null +++ b/CFG/SC92F8363B/Keil_Mould/Project/STARTUP.A51 @@ -0,0 +1,198 @@ +$NOMOD51 +;------------------------------------------------------------------------------ +; This file is part of the C51 Compiler package +; Copyright (c) 1988-2005 Keil Elektronik GmbH and Keil Software, Inc. +; Version 8.01 +; +; *** <<< Use Configuration Wizard in Context Menu >>> *** +;------------------------------------------------------------------------------ +; STARTUP.A51: This code is executed after processor reset. +; +; To translate this file use A51 with the following invocation: +; +; A51 STARTUP.A51 +; +; To link the modified STARTUP.OBJ file to your application use the following +; Lx51 invocation: +; +; Lx51 your object file list, STARTUP.OBJ controls +; +;------------------------------------------------------------------------------ +; +; User-defined Power-On Initialization of Memory +; +; With the following EQU statements the initialization of memory +; at processor reset can be defined: +; +; IDATALEN: IDATA memory size <0x0-0x100> +; Note: The absolute start-address of IDATA memory is always 0 +; The IDATA space overlaps physically the DATA and BIT areas. +IDATALEN EQU 100H +; +; XDATASTART: XDATA memory start address <0x0-0xFFFF> +; The absolute start address of XDATA memory +XDATASTART EQU 0 +; +; XDATALEN: XDATA memory size <0x0-0xFFFF> +; The length of XDATA memory in bytes. +XDATALEN EQU 100H +; +; PDATASTART: PDATA memory start address <0x0-0xFFFF> +; The absolute start address of PDATA memory +PDATASTART EQU 0H +; +; PDATALEN: PDATA memory size <0x0-0xFF> +; The length of PDATA memory in bytes. +PDATALEN EQU 0H +; +; +;------------------------------------------------------------------------------ +; +; Reentrant Stack Initialization +; +; The following EQU statements define the stack pointer for reentrant +; functions and initialized it: +; +; Stack Space for reentrant functions in the SMALL model. +; IBPSTACK: Enable SMALL model reentrant stack +; Stack space for reentrant functions in the SMALL model. +IBPSTACK EQU 0 ; set to 1 if small reentrant is used. +; IBPSTACKTOP: End address of SMALL model stack <0x0-0xFF> +; Set the top of the stack to the highest location. +IBPSTACKTOP EQU 0xFF +1 ; default 0FFH+1 +; +; +; Stack Space for reentrant functions in the LARGE model. +; XBPSTACK: Enable LARGE model reentrant stack +; Stack space for reentrant functions in the LARGE model. +XBPSTACK EQU 0 ; set to 1 if large reentrant is used. +; XBPSTACKTOP: End address of LARGE model stack <0x0-0xFFFF> +; Set the top of the stack to the highest location. +XBPSTACKTOP EQU 0xFFFF +1 ; default 0FFFFH+1 +; +; +; Stack Space for reentrant functions in the COMPACT model. +; PBPSTACK: Enable COMPACT model reentrant stack +; Stack space for reentrant functions in the COMPACT model. +PBPSTACK EQU 0 ; set to 1 if compact reentrant is used. +; +; PBPSTACKTOP: End address of COMPACT model stack <0x0-0xFFFF> +; Set the top of the stack to the highest location. +PBPSTACKTOP EQU 0xFF +1 ; default 0FFH+1 +; +; +;------------------------------------------------------------------------------ +; +; Memory Page for Using the Compact Model with 64 KByte xdata RAM +; Compact Model Page Definition +; +; Define the XDATA page used for PDATA variables. +; PPAGE must conform with the PPAGE set in the linker invocation. +; +; Enable pdata memory page initalization +PPAGEENABLE EQU 0 ; set to 1 if pdata object are used. +; +; PPAGE number <0x0-0xFF> +; uppermost 256-byte address of the page used for PDATA variables. +PPAGE EQU 0 +; +; SFR address which supplies uppermost address byte <0x0-0xFF> +; most 8051 variants use P2 as uppermost address byte +PPAGE_SFR DATA 0A0H +; +; +;------------------------------------------------------------------------------ + +; Standard SFR Symbols +ACC DATA 0E0H +B DATA 0F0H +SP DATA 81H +DPL DATA 82H +DPH DATA 83H + + NAME ?C_STARTUP + + +?C_C51STARTUP SEGMENT CODE +?STACK SEGMENT IDATA + + RSEG ?STACK + DS 1 + + EXTRN CODE (?C_START) + PUBLIC ?C_STARTUP + + CSEG AT 0 +?C_STARTUP: LJMP STARTUP1 + + RSEG ?C_C51STARTUP + +STARTUP1: + +IF IDATALEN <> 0 + MOV R0,#IDATALEN - 1 + CLR A +IDATALOOP: MOV @R0,A + DJNZ R0,IDATALOOP +ENDIF + +IF XDATALEN <> 0 + MOV DPTR,#XDATASTART + MOV R7,#LOW (XDATALEN) + IF (LOW (XDATALEN)) <> 0 + MOV R6,#(HIGH (XDATALEN)) +1 + ELSE + MOV R6,#HIGH (XDATALEN) + ENDIF + CLR A +XDATALOOP: MOVX @DPTR,A + INC DPTR + DJNZ R7,XDATALOOP + DJNZ R6,XDATALOOP +ENDIF + +IF PPAGEENABLE <> 0 + MOV PPAGE_SFR,#PPAGE +ENDIF + +IF PDATALEN <> 0 + MOV R0,#LOW (PDATASTART) + MOV R7,#LOW (PDATALEN) + CLR A +PDATALOOP: MOVX @R0,A + INC R0 + DJNZ R7,PDATALOOP +ENDIF + +IF IBPSTACK <> 0 +EXTRN DATA (?C_IBP) + + MOV ?C_IBP,#LOW IBPSTACKTOP +ENDIF + +IF XBPSTACK <> 0 +EXTRN DATA (?C_XBP) + + MOV ?C_XBP,#HIGH XBPSTACKTOP + MOV ?C_XBP+1,#LOW XBPSTACKTOP +ENDIF + +IF PBPSTACK <> 0 +EXTRN DATA (?C_PBP) + MOV ?C_PBP,#LOW PBPSTACKTOP +ENDIF + + MOV SP,#?STACK-1 + +; This code is required if you use L51_BANK.A51 with Banking Mode 4 +; Code Banking +; Select Bank 0 for L51_BANK.A51 Mode 4 +#if 0 +; Initialize bank mechanism to code bank 0 when using L51_BANK.A51 with Banking Mode 4. +EXTRN CODE (?B_SWITCH0) + CALL ?B_SWITCH0 ; init bank mechanism to code bank 0 +#endif +; + LJMP ?C_START + + END diff --git a/CFG/SC92F8363B/Keil_Mould/Project/SinOne.soc b/CFG/SC92F8363B/Keil_Mould/Project/SinOne.soc new file mode 100644 index 0000000..b1ac533 Binary files /dev/null and b/CFG/SC92F8363B/Keil_Mould/Project/SinOne.soc differ diff --git a/CFG/SC92F8363B/Keil_Mould/Project/project name.uvgui.Andy b/CFG/SC92F8363B/Keil_Mould/Project/project name.uvgui.Andy new file mode 100644 index 0000000..10f9901 --- /dev/null +++ b/CFG/SC92F8363B/Keil_Mould/Project/project name.uvgui.Andy @@ -0,0 +1,2737 @@ + + + + -4.1 + +
### uVision Project, (C) Keil Software
+ + + + + + 38003 + Registers + 115 192 + + + 346 + Code Coverage + 735 160 + + + 204 + Performance Analyzer + 895 + + + + + + 1506 + Symbols + + 133 133 133 + + + 1936 + Watch 1 + + 133 133 133 + + + 1937 + Watch 2 + + 133 133 133 + + + 1935 + Call Stack + Locals + + 133 133 133 + + + 2506 + Trace Data + + 75 135 130 95 70 230 200 + + + + + + 0 + 0 + 0 + + + + + + + 44 + 2 + 3 + + -1 + -1 + + + -1 + -1 + + + 64 + 94 + 1246 + 657 + + + + 0 + + 1370 + 0100000004000000010000000100000001000000010000000000000002000000000000000100000001000000000000002800000028000000010000000A00000000000000010000005D453A5CB9A4D7F75CB9A4D7F7CFEEC4BF5C425350B0FC5C5343393246CFB5C1D0CDA8D3C3425350B0FC56302E302E315C4B65696C5F4D6F756C645C46574C69625C53433932465F4C69625C7372635C73633932665F63686B73756D2E63000000000E73633932665F63686B73756D2E6300000000FFDC7800FFFFFFFF5A453A5CB9A4D7F75CB9A4D7F7CFEEC4BF5C425350B0FC5C5343393246CFB5C1D0CDA8D3C3425350B0FC56302E302E315C4B65696C5F4D6F756C645C46574C69625C53433932465F4C69625C7372635C73633932665F70776D2E63000000000B73633932665F70776D2E6300000000BECEA100FFFFFFFF5A453A5CB9A4D7F75CB9A4D7F7CFEEC4BF5C425350B0FC5C5343393246CFB5C1D0CDA8D3C3425350B0FC56302E302E315C4B65696C5F4D6F756C645C46574C69625C53433932465F4C69625C7372635C73633932665F7077722E63000000000B73633932665F7077722E6300000000BECEA100FFFFFFFF5B453A5CB9A4D7F75CB9A4D7F7CFEEC4BF5C425350B0FC5C5343393246CFB5C1D0CDA8D3C3425350B0FC56302E302E315C4B65696C5F4D6F756C645C46574C69625C53433932465F4C69625C7372635C73633932665F6770696F2E63000000000C73633932665F6770696F2E6300000000F0A0A100FFFFFFFF5A453A5CB9A4D7F75CB9A4D7F7CFEEC4BF5C425350B0FC5C5343393246CFB5C1D0CDA8D3C3425350B0FC56302E302E315C4B65696C5F4D6F756C645C46574C69625C53433932465F4C69625C7372635C73633932665F6961702E63000000000B73633932665F6961702E6300000000BCA8E100FFFFFFFF56453A5CB9A4D7F75CB9A4D7F7CFEEC4BF5C425350B0FC5C5343393246CFB5C1D0CDA8D3C3425350B0FC56302E302E315C4B45494C5F4D4F554C445C46574C49425C53433932465F4C49425C494E435C53433932462E48000000000753433932462E48000000009CC1B600FFFFFFFF5C453A5CB9A4D7F75CB9A4D7F7CFEEC4BF5C425350B0FC5C5343393246CFB5C1D0CDA8D3C3425350B0FC56302E302E315C4B65696C5F4D6F756C645C46574C49425C53433932465F4C49425C5352435C53433932465F55415254302E43000000000D53433932465F55415254302E4300000000F7B88600FFFFFFFF5C453A5CB9A4D7F75CB9A4D7F7CFEEC4BF5C425350B0FC5C5343393246CFB5C1D0CDA8D3C3425350B0FC56302E302E315C4B45494C5F4D4F554C445C46574C49425C53433932465F4C49425C494E435C53433932465F55415254302E48000000000D53433932465F55415254302E4800000000D9ADC200FFFFFFFF5A453A5CB9A4D7F75CB9A4D7F7CFEEC4BF5C425350B0FC5C5343393246CFB5C1D0CDA8D3C3425350B0FC56302E302E315C4B45494C5F4D4F554C445C46574C49425C53433932465F4C49425C494E435C53433932465F4941502E48000000000B53433932465F4941502E4800000000A5C2D700FFFFFFFF5A453A5CB9A4D7F75CB9A4D7F7CFEEC4BF5C425350B0FC5C5343393246CFB5C1D0CDA8D3C3425350B0FC56302E302E315C4B45494C5F4D4F554C445C46574C49425C53433932465F4C49425C494E435C53433932465F50574D2E48000000000B53433932465F50574D2E4800000000B3A6BE00FFFFFFFF0100000010000000C5D4F200FFDC7800BECEA100F0A0A100BCA8E1009CC1B600F7B88600D9ADC200A5C2D700B3A6BE00EAD6A300F6FA7D00B5E99D005FC3CF00C1838300CACAD50001000000000000000200000041010000660000000006000046020000 + + + + 0 + Build + + -1 + -1 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + E70000004F00000070040000BD000000 + + + 16 + 71010000F0000000FA0400005E010000 + + + + 1005 + 1005 + 1 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + 03000000660000003A01000016020000 + + + 16 + 8A000000A10000006D0100005D020000 + + + + 109 + 109 + 1 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + 03000000660000003A01000016020000 + + + 16 + 8A000000A10000006D0100005D020000 + + + + 1465 + 1465 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + 03000000AC0100006D040000FE010000 + + + 16 + 8A000000A1000000C20200000F010000 + + + + 1466 + 1466 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + 03000000AC0100006D040000FE010000 + + + 16 + 8A000000A1000000C20200000F010000 + + + + 1467 + 1467 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + 03000000AC0100006D040000FE010000 + + + 16 + 8A000000A1000000C20200000F010000 + + + + 1468 + 1468 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + 03000000AC0100006D040000FE010000 + + + 16 + 8A000000A1000000C20200000F010000 + + + + 1506 + 1506 + 0 + 0 + 0 + 0 + 32767 + 0 + 16384 + 0 + + 16 + E3020000660000006D0400008C010000 + + + 16 + 8A000000A10000001A02000031020000 + + + + 1913 + 1913 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + EA000000660000006D040000A4000000 + + + 16 + 8A000000A1000000C20200000F010000 + + + + 1935 + 1935 + 0 + 0 + 0 + 0 + 32767 + 0 + 32768 + 0 + + 16 + 03000000AC0100006D040000FE010000 + + + 16 + 8A000000A10000001A02000031020000 + + + + 1936 + 1936 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + 03000000AC0100006D040000FE010000 + + + 16 + 8A000000A10000001A02000031020000 + + + + 1937 + 1937 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + 03000000AC0100006D040000FE010000 + + + 16 + 8A000000A10000001A02000031020000 + + + + 1939 + 1939 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + 03000000AC0100006D040000FE010000 + + + 16 + 8A000000A1000000C20200000F010000 + + + + 1940 + 1940 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + 03000000AC0100006D040000FE010000 + + + 16 + 8A000000A1000000C20200000F010000 + + + + 1941 + 1941 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + 03000000AC0100006D040000FE010000 + + + 16 + 8A000000A1000000C20200000F010000 + + + + 1942 + 1942 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + 03000000AC0100006D040000FE010000 + + + 16 + 8A000000A1000000C20200000F010000 + + + + 195 + 195 + 1 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + 03000000660000003A01000016020000 + + + 16 + 8A000000A10000006D0100005D020000 + + + + 196 + 196 + 1 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + 03000000660000003A01000016020000 + + + 16 + 8A000000A10000006D0100005D020000 + + + + 197 + 197 + 1 + 0 + 0 + 0 + 32767 + 0 + 32768 + 0 + + 16 + 030000004A020000FD050000F5020000 + + + 16 + 8A000000A1000000C20200000F010000 + + + + 198 + 198 + 0 + 0 + 0 + 0 + 32767 + 0 + 32768 + 0 + + 16 + 00000000950100007004000017020000 + + + 16 + 8A000000A1000000C20200000F010000 + + + + 199 + 199 + 1 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + 030000004A020000FD050000F5020000 + + + 16 + 8A000000A1000000C20200000F010000 + + + + 203 + 203 + 0 + 0 + 0 + 0 + 32767 + 0 + 8192 + 0 + + 16 + EA000000660000006D040000A4000000 + + + 16 + 8A000000A1000000C20200000F010000 + + + + 204 + 204 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + EA000000660000006D040000A4000000 + + + 16 + 8A000000A1000000C20200000F010000 + + + + 221 + 221 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + 00000000000000000000000000000000 + + + 16 + 0A0000000A0000006E0000006E000000 + + + + 2506 + 2506 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + E3020000660000006D0400008C010000 + + + 16 + 8A000000A10000001A02000031020000 + + + + 2507 + 2507 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + 03000000AC0100006D040000FE010000 + + + 16 + 8A000000A1000000C20200000F010000 + + + + 343 + 343 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + EA000000660000006D040000A4000000 + + + 16 + 8A000000A1000000C20200000F010000 + + + + 346 + 346 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + EA000000660000006D040000A4000000 + + + 16 + 8A000000A1000000C20200000F010000 + + + + 35824 + 35824 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + EA000000660000006D040000A4000000 + + + 16 + 8A000000A1000000C20200000F010000 + + + + 35885 + 35885 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + E3020000660000006D0400008C010000 + + + 16 + 8A000000A10000001A02000031020000 + + + + 35886 + 35886 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + E3020000660000006D0400008C010000 + + + 16 + 8A000000A10000001A02000031020000 + + + + 35887 + 35887 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + E3020000660000006D0400008C010000 + + + 16 + 8A000000A10000001A02000031020000 + + + + 35888 + 35888 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + E3020000660000006D0400008C010000 + + + 16 + 8A000000A10000001A02000031020000 + + + + 35889 + 35889 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + E3020000660000006D0400008C010000 + + + 16 + 8A000000A10000001A02000031020000 + + + + 35890 + 35890 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + E3020000660000006D0400008C010000 + + + 16 + 8A000000A10000001A02000031020000 + + + + 35891 + 35891 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + E3020000660000006D0400008C010000 + + + 16 + 8A000000A10000001A02000031020000 + + + + 35892 + 35892 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + E3020000660000006D0400008C010000 + + + 16 + 8A000000A10000001A02000031020000 + + + + 35893 + 35893 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + E3020000660000006D0400008C010000 + + + 16 + 8A000000A10000001A02000031020000 + + + + 35894 + 35894 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + E3020000660000006D0400008C010000 + + + 16 + 8A000000A10000001A02000031020000 + + + + 35895 + 35895 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + E3020000660000006D0400008C010000 + + + 16 + 8A000000A10000001A02000031020000 + + + + 35896 + 35896 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + E3020000660000006D0400008C010000 + + + 16 + 8A000000A10000001A02000031020000 + + + + 35897 + 35897 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + E3020000660000006D0400008C010000 + + + 16 + 8A000000A10000001A02000031020000 + + + + 35898 + 35898 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + E3020000660000006D0400008C010000 + + + 16 + 8A000000A10000001A02000031020000 + + + + 35899 + 35899 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + E3020000660000006D0400008C010000 + + + 16 + 8A000000A10000001A02000031020000 + + + + 35900 + 35900 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + E3020000660000006D0400008C010000 + + + 16 + 8A000000A10000001A02000031020000 + + + + 35901 + 35901 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + E3020000660000006D0400008C010000 + + + 16 + 8A000000A10000001A02000031020000 + + + + 35902 + 35902 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + E3020000660000006D0400008C010000 + + + 16 + 8A000000A10000001A02000031020000 + + + + 35903 + 35903 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + E3020000660000006D0400008C010000 + + + 16 + 8A000000A10000001A02000031020000 + + + + 35904 + 35904 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + E3020000660000006D0400008C010000 + + + 16 + 8A000000A10000001A02000031020000 + + + + 35905 + 35905 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + E3020000660000006D0400008C010000 + + + 16 + 8A000000A10000001A02000031020000 + + + + 38003 + 38003 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + 03000000660000003A01000016020000 + + + 16 + 8A000000A10000006D0100005D020000 + + + + 38007 + 38007 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + 030000004A020000FD050000F5020000 + + + 16 + 8A000000A1000000C20200000F010000 + + + + 436 + 436 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + 030000004A020000FD050000F5020000 + + + 16 + 8A000000A10000006D0100005D020000 + + + + 437 + 437 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + 03000000AC0100006D040000FE010000 + + + 16 + 8A000000A10000001A02000031020000 + + + + 440 + 440 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + 03000000AC0100006D040000FE010000 + + + 16 + 8A000000A10000001A02000031020000 + + + + 59392 + 59392 + 1 + 0 + 0 + 0 + 940 + 0 + 8192 + 0 + + 16 + 0000000000000000B70300001C000000 + + + 16 + 0A0000000A0000006E0000006E000000 + + + + 59393 + 0 + 1 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + 000000000E0300000006000021030000 + + + 16 + 0A0000000A0000006E0000006E000000 + + + + 59399 + 59399 + 1 + 0 + 0 + 0 + 439 + 0 + 8192 + 1 + + 16 + 000000001C000000C201000038000000 + + + 16 + 0A0000000A0000006E0000006E000000 + + + + 59400 + 59400 + 0 + 0 + 0 + 0 + 612 + 0 + 8192 + 2 + + 16 + 00000000380000006F02000054000000 + + + 16 + 0A0000000A0000006E0000006E000000 + + + + 2619 + 000000000B000000000000000020000000000000FFFFFFFFFFFFFFFFE7000000BD00000070040000C1000000000000000100000004000000010000000000000000000000FFFFFFFF06000000CB00000057010000CC000000F08B00005A01000079070000FFFF02000B004354616262656450616E65002000000000000071010000F0000000FA0400005E010000E70000004F00000070040000BD0000000000000040280046060000000B446973617373656D626C7900000000CB00000001000000FFFFFFFFFFFFFFFF14506572666F726D616E636520416E616C797A6572000000005701000001000000FFFFFFFFFFFFFFFF14506572666F726D616E636520416E616C797A657200000000CC00000001000000FFFFFFFFFFFFFFFF0E4C6F67696320416E616C797A657200000000F08B000001000000FFFFFFFFFFFFFFFF0D436F646520436F766572616765000000005A01000001000000FFFFFFFFFFFFFFFF11496E737472756374696F6E205472616365000000007907000001000000FFFFFFFFFFFFFFFFFFFFFFFF000000000000000000000000000000000000000001000000FFFFFFFFCB00000001000000FFFFFFFFCB000000000000000040000000000000FFFFFFFFFFFFFFFFDC0200004F000000E0020000A5010000000000000200000004000000010000000000000000000000FFFFFFFF17000000E2050000CA0900002D8C00002E8C00002F8C0000308C0000318C0000328C0000338C0000348C0000358C0000368C0000378C0000388C0000398C00003A8C00003B8C00003C8C00003D8C00003E8C00003F8C0000408C0000418C0000018000400000000000006A030000F0000000FA04000046020000E00200004F00000070040000A50100000000000040410046170000000753796D626F6C7300000000E205000001000000FFFFFFFFFFFFFFFF0A5472616365204461746100000000CA09000001000000FFFFFFFFFFFFFFFF00000000002D8C000001000000FFFFFFFFFFFFFFFF00000000002E8C000001000000FFFFFFFFFFFFFFFF00000000002F8C000001000000FFFFFFFFFFFFFFFF0000000000308C000001000000FFFFFFFFFFFFFFFF0000000000318C000001000000FFFFFFFFFFFFFFFF0000000000328C000001000000FFFFFFFFFFFFFFFF0000000000338C000001000000FFFFFFFFFFFFFFFF0000000000348C000001000000FFFFFFFFFFFFFFFF0000000000358C000001000000FFFFFFFFFFFFFFFF0000000000368C000001000000FFFFFFFFFFFFFFFF0000000000378C000001000000FFFFFFFFFFFFFFFF0000000000388C000001000000FFFFFFFFFFFFFFFF0000000000398C000001000000FFFFFFFFFFFFFFFF00000000003A8C000001000000FFFFFFFFFFFFFFFF00000000003B8C000001000000FFFFFFFFFFFFFFFF00000000003C8C000001000000FFFFFFFFFFFFFFFF00000000003D8C000001000000FFFFFFFFFFFFFFFF00000000003E8C000001000000FFFFFFFFFFFFFFFF00000000003F8C000001000000FFFFFFFFFFFFFFFF0000000000408C000001000000FFFFFFFFFFFFFFFF0000000000418C000001000000FFFFFFFFFFFFFFFFFFFFFFFF000000000000000000000000000000000000000001000000FFFFFFFFE205000001000000FFFFFFFFE2050000000000000010000001000000FFFFFFFFFFFFFFFF3D0100004F000000410100002F02000001000000020000100400000001000000F6FEFFFFEB040000FFFFFFFF05000000ED0300006D000000C3000000C400000073940000018000100000010000008A000000F0000000C7010000D0020000000000004F0000003D0100002F0200000000000040140056050000000750726F6A65637401000000ED03000001000000FFFFFFFFFFFFFFFF05426F6F6B73010000006D00000001000000FFFFFFFFFFFFFFFF0946756E6374696F6E7301000000C300000001000000FFFFFFFFFFFFFFFF0954656D706C6174657301000000C400000001000000FFFFFFFFFFFFFFFF09526567697374657273000000007394000001000000FFFFFFFFFFFFFFFF00000000000000000000000000000000000000000000000001000000FFFFFFFFED03000001000000FFFFFFFFED030000000000000080000000000000FFFFFFFFFFFFFFFF0000000091010000700400009501000000000000010000000400000001000000000000000000000000000000000000000000000001000000C6000000FFFFFFFF0E0000008F070000930700009407000095070000960700009007000091070000B5010000B8010000B9050000BA050000BB050000BC050000CB090000018000800000000000008A00000036020000FA040000B80200000000000095010000700400001702000000000000404100460E0000001343616C6C20537461636B202B204C6F63616C73000000008F07000001000000FFFFFFFFFFFFFFFF0755415254202331000000009307000001000000FFFFFFFFFFFFFFFF0755415254202332000000009407000001000000FFFFFFFFFFFFFFFF0755415254202333000000009507000001000000FFFFFFFFFFFFFFFF15446562756720287072696E74662920566965776572000000009607000001000000FFFFFFFFFFFFFFFF0757617463682031000000009007000001000000FFFFFFFFFFFFFFFF0757617463682032000000009107000001000000FFFFFFFFFFFFFFFF10547261636520457863657074696F6E7300000000B501000001000000FFFFFFFFFFFFFFFF0E4576656E7420436F756E7465727300000000B801000001000000FFFFFFFFFFFFFFFF084D656D6F7279203100000000B905000001000000FFFFFFFFFFFFFFFF084D656D6F7279203200000000BA05000001000000FFFFFFFFFFFFFFFF084D656D6F7279203300000000BB05000001000000FFFFFFFFFFFFFFFF084D656D6F7279203400000000BC05000001000000FFFFFFFFFFFFFFFF105472616365204E617669676174696F6E00000000CB09000001000000FFFFFFFFFFFFFFFFFFFFFFFF0000000001000000000000000000000001000000FFFFFFFF38020000950100003C0200001702000000000000020000000400000000000000000000000000000000000000000000000000000002000000C6000000FFFFFFFF8F07000001000000FFFFFFFF8F07000001000000C6000000000000000080000001000000FFFFFFFFFFFFFFFF000000002F02000000060000330200000100000001000010040000000100000021FEFFFFD5000000FFFFFFFF04000000C5000000C7000000B401000077940000018000800000010000008A000000D40200008A060000AF0300000000000033020000000600000E0300000000000040820056040000000C4275696C64204F757470757401000000C500000001000000FFFFFFFFFFFFFFFF0D46696E6420496E2046696C657301000000C700000001000000FFFFFFFFFFFFFFFF0A4572726F72204C69737400000000B401000001000000FFFFFFFFFFFFFFFF0742726F77736572000000007794000001000000FFFFFFFFFFFFFFFF00000000000000000000000000000000000000000000000001000000FFFFFFFFC500000001000000FFFFFFFFC5000000000000000000000000000000 + + + 59392 + File + + 2362 + 00200000010000002800FFFF01001100434D4643546F6F6C426172427574746F6E00E100000000000000000000000000000000000000000000000100000001000000018001E100000000000001000000000000000000000000000000000100000001000000018003E1000000000000020000000000000000000000000000000001000000010000000180CD7F0000000000000300000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF000000000000000000000000000100000001000000018023E100000000040004000000000000000000000000000000000100000001000000018022E100000000040005000000000000000000000000000000000100000001000000018025E10000000000000600000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF00000000000000000000000000010000000100000001802BE10000000004000700000000000000000000000000000000010000000100000001802CE10000000004000800000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF00000000000000000000000000010000000100000001807A8A0000000004000900000000000000000000000000000000010000000100000001807B8A0000000004000A00000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF0000000000000000000000000001000000010000000180D3B00000000000000B000000000000000000000000000000000100000001000000018015B10000000004000C0000000000000000000000000000000001000000010000000180F4B00000000004000D000000000000000000000000000000000100000001000000018036B10000000004000E00000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF0000000000000000000000000001000000010000000180FF88000000000400460000000000000000000000000000000001000000010000000180FE880000000004004500000000000000000000000000000000010000000100000001800B810000000004001300000000000000000000000000000000010000000100000001800C810000000004001400000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF0000000000000000000000000001000000010000000180F0880000020000000F000000000000000000000000000000000100000001000000FFFF0100120043555646696E64436F6D626F427574746F6EE80300000000000000000000000000000000000000000000000100000001000000960000000200205000000000025030960000000000000011000250300F5343445F434F4D5F4269744C6973740C5343445F434F4D5F4C6973740F5343445F5345475F4269744C6973740E5343445F4E545F547970654465660C5343447269766572496E69740F5343445F4E545F536567436F756E740C5343445F4E545F436F756E740A5343445F436F6D4E756D1250574D5F506F6C6172697479436F6E666967095343393546387832782E23696620646566696E6564202873633935663878327829207C7C20646566696E6564202873633935663778327829095343393566387831782E23696620646566696E6564202853433935663878317829207C7C20646566696E656420285343393566377831782902B7E407476F546F4150501D49454336303733305F4350555F5265675F546573745F52756E54696D650000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000018024E10000000000001100000000000000000000000000000000010000000100000001800A810000000000001200000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF000000000000000000000000000100000001000000018022800000020000001500000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF0000000000000000000000000001000000010000000180C488000000000400160000000000000000000000000000000001000000010000000180C988000000000400180000000000000000000000000000000001000000010000000180C788000000000000190000000000000000000000000000000001000000010000000180C8880000000000001700000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF000000000000000000000000000100000001000000FFFF01001500434D4643546F6F6C4261724D656E75427574746F6E4C010000020001001A0000000F50726F6A6563742057696E646F7773000000000000000000000000010000000100000000000000000000000100000008002880DD880000000000001A0000000750726F6A656374000000000000000000000000010000000100000000000000000000000100000000002880DC8B0000000000003A00000005426F6F6B73000000000000000000000000010000000100000000000000000000000100000000002880E18B0000000000003B0000000946756E6374696F6E73000000000000000000000000010000000100000000000000000000000100000000002880E28B000000000000400000000954656D706C6174657300000000000000000000000001000000010000000000000000000000010000000000288018890000000000003D0000000E536F757263652042726F777365720000000000000000000000000100000001000000000000000000000001000000000028800000000000000400FFFFFFFF00000000000000000001000000000000000100000000000000000000000100000000002880D988000000000000390000000C4275696C64204F7574707574000000000000000000000000010000000100000000000000000000000100000000002880E38B000000000000410000000B46696E64204F75747075740000000000000000000000000100000001000000000000000000000001000000000001800000000001000000FFFFFFFF0000000000000000000000000001000000010000000180FB7F0000000000001B000000000000000000000000000000000100000001000000000000000446696C65AC030000 + + + 1423 + 2800FFFF01001100434D4643546F6F6C426172427574746F6E00E1000000000000FFFFFFFF000100000000000000010000000000000001000000018001E1000000000000FFFFFFFF000100000000000000010000000000000001000000018003E1000000000000FFFFFFFF0001000000000000000100000000000000010000000180CD7F000000000000FFFFFFFF00010000000000000001000000000000000100000001800000000000000000FFFFFFFF000000000000000000010000000000000001000000018023E1000000000000FFFFFFFF000100000000000000010000000000000001000000018022E1000000000000FFFFFFFF000100000000000000010000000000000001000000018025E1000000000000FFFFFFFF00010000000000000001000000000000000100000001800000000000000000FFFFFFFF00000000000000000001000000000000000100000001802BE1000000000000FFFFFFFF00010000000000000001000000000000000100000001802CE1000000000000FFFFFFFF00010000000000000001000000000000000100000001800000000000000000FFFFFFFF00000000000000000001000000000000000100000001807A8A000000000000FFFFFFFF00010000000000000001000000000000000100000001807B8A000000000000FFFFFFFF00010000000000000001000000000000000100000001800000000000000000FFFFFFFF0000000000000000000100000000000000010000000180D3B0000000000000FFFFFFFF000100000000000000010000000000000001000000018015B1000000000000FFFFFFFF0001000000000000000100000000000000010000000180F4B0000000000000FFFFFFFF000100000000000000010000000000000001000000018036B1000000000000FFFFFFFF00010000000000000001000000000000000100000001800000000000000000FFFFFFFF0000000000000000000100000000000000010000000180FF88000000000000FFFFFFFF0001000000000000000100000000000000010000000180FE88000000000000FFFFFFFF00010000000000000001000000000000000100000001800B81000000000000FFFFFFFF00010000000000000001000000000000000100000001800C81000000000000FFFFFFFF00010000000000000001000000000000000100000001800000000000000000FFFFFFFF0000000000000000000100000000000000010000000180F088000000000000FFFFFFFF0001000000000000000100000000000000010000000180EE7F000000000000FFFFFFFF000100000000000000010000000000000001000000018024E1000000000000FFFFFFFF00010000000000000001000000000000000100000001800A81000000000000FFFFFFFF00010000000000000001000000000000000100000001800000000000000000FFFFFFFF00000000000000000001000000000000000100000001802280000000000000FFFFFFFF00010000000000000001000000000000000100000001800000000000000000FFFFFFFF0000000000000000000100000000000000010000000180C488000000000000FFFFFFFF0001000000000000000100000000000000010000000180C988000000000000FFFFFFFF0001000000000000000100000000000000010000000180C788000000000000FFFFFFFF0001000000000000000100000000000000010000000180C888000000000000FFFFFFFF00010000000000000001000000000000000100000001800000000000000000FFFFFFFF0000000000000000000100000000000000010000000180DD88000000000000FFFFFFFF00010000000000000001000000000000000100000001800000000000000000FFFFFFFF0000000000000000000100000000000000010000000180FB7F000000000000FFFFFFFF000100000000000000010000000000000001000000 + + + 1423 + 2800FFFF01001100434D4643546F6F6C426172427574746F6E00E100000000000000000000000000000000000000000000000100000001000000018001E100000000000001000000000000000000000000000000000100000001000000018003E1000000000000020000000000000000000000000000000001000000010000000180CD7F0000000000000300000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF000000000000000000000000000100000001000000018023E100000000000004000000000000000000000000000000000100000001000000018022E100000000000005000000000000000000000000000000000100000001000000018025E10000000000000600000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF00000000000000000000000000010000000100000001802BE10000000000000700000000000000000000000000000000010000000100000001802CE10000000000000800000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF00000000000000000000000000010000000100000001807A8A0000000000000900000000000000000000000000000000010000000100000001807B8A0000000000000A00000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF0000000000000000000000000001000000010000000180D3B00000000000000B000000000000000000000000000000000100000001000000018015B10000000000000C0000000000000000000000000000000001000000010000000180F4B00000000000000D000000000000000000000000000000000100000001000000018036B10000000000000E00000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF0000000000000000000000000001000000010000000180FF880000000000000F0000000000000000000000000000000001000000010000000180FE880000000000001000000000000000000000000000000000010000000100000001800B810000000000001100000000000000000000000000000000010000000100000001800C810000000000001200000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF0000000000000000000000000001000000010000000180F088000000000000130000000000000000000000000000000001000000010000000180EE7F00000000000014000000000000000000000000000000000100000001000000018024E10000000000001500000000000000000000000000000000010000000100000001800A810000000000001600000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF000000000000000000000000000100000001000000018022800000000000001700000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF0000000000000000000000000001000000010000000180C488000000000000180000000000000000000000000000000001000000010000000180C988000000000000190000000000000000000000000000000001000000010000000180C7880000000000001A0000000000000000000000000000000001000000010000000180C8880000000000001B00000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF0000000000000000000000000001000000010000000180DD880000000000001C00000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF0000000000000000000000000001000000010000000180FB7F0000000000001D000000000000000000000000000000000100000001000000 + + + + 59399 + Build + + 655 + 00200000010000000F00FFFF01001100434D4643546F6F6C426172427574746F6ECF7F0000000004001C0000000000000000000000000000000001000000010000000180D07F0000000000001D000000000000000000000000000000000100000001000000018030800000000000001E00000000000000000000000000000000010000000100000001809E8A0000000004001F0000000000000000000000000000000001000000010000000180D17F0000000004002000000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF00000000000000000000000000010000000100000001804C8A0000000000002100000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF000000000000000000000000000100000001000000FFFF01001900434D4643546F6F6C426172436F6D626F426F78427574746F6EBA00000000000000000000000000000000000000000000000001000000010000009600000003002050000000000E3C70726F6A656374206E616D653E960000000000000001000E3C70726F6A656374206E616D653E000000000180EB880000000000002200000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF0000000000000000000000000001000000010000000180C07F000000000000230000000000000000000000000000000001000000010000000180B08A000000000400240000000000000000000000000000000001000000010000000180A8010000000004004E0000000000000000000000000000000001000000010000000180BE010000000004005000000000000000000000000000000000010000000100000000000000054275696C64B7010000 + + + 548 + 0F00FFFF01001100434D4643546F6F6C426172427574746F6ECF7F000000000000FFFFFFFF0001000000000000000100000000000000010000000180D07F000000000000FFFFFFFF00010000000000000001000000000000000100000001803080000000000000FFFFFFFF00010000000000000001000000000000000100000001809E8A000000000000FFFFFFFF0001000000000000000100000000000000010000000180D17F000000000000FFFFFFFF00010000000000000001000000000000000100000001800000000000000000FFFFFFFF00000000000000000001000000000000000100000001804C8A000000000000FFFFFFFF00010000000000000001000000000000000100000001800000000000000000FFFFFFFF00000000000000000001000000000000000100000001806680000000000000FFFFFFFF0001000000000000000100000000000000010000000180EB88000000000000FFFFFFFF00010000000000000001000000000000000100000001800000000000000000FFFFFFFF0000000000000000000100000000000000010000000180C07F000000000000FFFFFFFF0001000000000000000100000000000000010000000180B08A000000000000FFFFFFFF0001000000000000000100000000000000010000000180A801000000000000FFFFFFFF0001000000000000000100000000000000010000000180BE01000000000000FFFFFFFF000100000000000000010000000000000001000000 + + + 548 + 0F00FFFF01001100434D4643546F6F6C426172427574746F6ECF7F000000000000000000000000000000000000000000000001000000010000000180D07F00000000000001000000000000000000000000000000000100000001000000018030800000000000000200000000000000000000000000000000010000000100000001809E8A000000000000030000000000000000000000000000000001000000010000000180D17F0000000000000400000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF00000000000000000000000000010000000100000001804C8A0000000000000500000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF00000000000000000000000000010000000100000001806680000000000000060000000000000000000000000000000001000000010000000180EB880000000000000700000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF0000000000000000000000000001000000010000000180C07F000000000000080000000000000000000000000000000001000000010000000180B08A000000000000090000000000000000000000000000000001000000010000000180A8010000000000000A0000000000000000000000000000000001000000010000000180BE010000000000000B000000000000000000000000000000000100000001000000 + + + + 59400 + Debug + + 2220 + 00200000000000001900FFFF01001100434D4643546F6F6C426172427574746F6ECC880000000000002500000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF000000000000000000000000000100000001000000018017800000000000002600000000000000000000000000000000010000000100000001801D800000000000002700000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF00000000000000000000000000010000000100000001801A800000000000002800000000000000000000000000000000010000000100000001801B80000000000000290000000000000000000000000000000001000000010000000180E57F0000000000002A00000000000000000000000000000000010000000100000001801C800000000000002B00000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF000000000000000000000000000100000001000000018000890000000000002C00000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF0000000000000000000000000001000000010000000180E48B0000000000002D0000000000000000000000000000000001000000010000000180F07F0000000000002E0000000000000000000000000000000001000000010000000180E8880000000000003700000000000000000000000000000000010000000100000001803B010000000000002F0000000000000000000000000000000001000000010000000180BB8A00000000000030000000000000000000000000000000000100000001000000FFFF01001500434D4643546F6F6C4261724D656E75427574746F6E0E01000000000000310000000D57617463682057696E646F7773000000000000000000000000010000000100000000000000000000000100000002001380D88B000000000000310000000757617463682031000000000000000000000000010000000100000000000000000000000100000000001380D98B0000000000003100000007576174636820320000000000000000000000000100000001000000000000000000000001000000000013800F01000000000000320000000E4D656D6F72792057696E646F7773000000000000000000000000010000000100000000000000000000000100000004001380D28B00000000000032000000084D656D6F72792031000000000000000000000000010000000100000000000000000000000100000000001380D38B00000000000032000000084D656D6F72792032000000000000000000000000010000000100000000000000000000000100000000001380D48B00000000000032000000084D656D6F72792033000000000000000000000000010000000100000000000000000000000100000000001380D58B00000000000032000000084D656D6F727920340000000000000000000000000100000001000000000000000000000001000000000013801001000000000000330000000E53657269616C2057696E646F77730000000000000000000000000100000001000000000000000000000001000000040013809307000000000000330000000755415254202331000000000000000000000000010000000100000000000000000000000100000000001380940700000000000033000000075541525420233200000000000000000000000001000000010000000000000000000000010000000000138095070000000000003300000007554152542023330000000000000000000000000100000001000000000000000000000001000000000013809607000000000000330000000E49544D2F525441205669657765720000000000000000000000000100000001000000000000000000000001000000000013803C010000000000003400000010416E616C797369732057696E646F7773000000000000000000000000010000000100000000000000000000000100000003001380658A000000000000340000000E4C6F67696320416E616C797A6572000000000000000000000000010000000100000000000000000000000100000000001380DC7F0000000000003E00000014506572666F726D616E636520416E616C797A6572000000000000000000000000010000000100000000000000000000000100000000001380E788000000000000380000000D436F646520436F76657261676500000000000000000000000001000000010000000000000000000000010000000000138053010000000000003F0000000D54726163652057696E646F77730000000000000000000000000100000001000000000000000000000001000000010013805401000000000000FFFFFFFF115472616365204D656E7520416E63686F720100000000000000010000000000000001000000000000000000000001000000000013802901000000000000350000001553797374656D205669657765722057696E646F77730000000000000000000000000100000001000000000000000000000001000000010013804B01000000000000FFFFFFFF1453797374656D2056696577657220416E63686F720100000000000000010000000000000001000000000000000000000001000000000001800000000001000000FFFFFFFF000000000000000000000000000100000001000000138001890000000000003600000007546F6F6C626F7800000000000000000000000001000000010000000000000000000000010000000300138044C5000000000000FFFFFFFF0E5570646174652057696E646F77730100000000000000010000000000000001000000000000000000000001000000000013800000000000000400FFFFFFFF000000000000000000010000000000000001000000000000000000000001000000000013805B01000000000000FFFFFFFF12546F6F6C626F78204D656E75416E63686F72010000000000000001000000000000000100000000000000000000000100000000000000000005446562756764020000 + + + 898 + 1900FFFF01001100434D4643546F6F6C426172427574746F6ECC88000000000000FFFFFFFF00010000000000000001000000000000000100000001800000000000000000FFFFFFFF00000000000000000001000000000000000100000001801780000000000000FFFFFFFF00010000000000000001000000000000000100000001801D80000000000000FFFFFFFF00010000000000000001000000000000000100000001800000000000000000FFFFFFFF00000000000000000001000000000000000100000001801A80000000000000FFFFFFFF00010000000000000001000000000000000100000001801B80000000000000FFFFFFFF0001000000000000000100000000000000010000000180E57F000000000000FFFFFFFF00010000000000000001000000000000000100000001801C80000000000000FFFFFFFF00010000000000000001000000000000000100000001800000000000000000FFFFFFFF00000000000000000001000000000000000100000001800089000000000000FFFFFFFF00010000000000000001000000000000000100000001800000000000000000FFFFFFFF0000000000000000000100000000000000010000000180E48B000000000000FFFFFFFF0001000000000000000100000000000000010000000180F07F000000000000FFFFFFFF0001000000000000000100000000000000010000000180E888000000000000FFFFFFFF00010000000000000001000000000000000100000001803B01000000000000FFFFFFFF0001000000000000000100000000000000010000000180BB8A000000000000FFFFFFFF0001000000000000000100000000000000010000000180D88B000000000000FFFFFFFF0001000000000000000100000000000000010000000180D28B000000000000FFFFFFFF00010000000000000001000000000000000100000001809307000000000000FFFFFFFF0001000000000000000100000000000000010000000180658A000000000000FFFFFFFF0001000000000000000100000000000000010000000180C18A000000000000FFFFFFFF0001000000000000000100000000000000010000000180EE8B000000000000FFFFFFFF00010000000000000001000000000000000100000001800000000000000000FFFFFFFF00000000000000000001000000000000000100000001800189000000000000FFFFFFFF000100000000000000010000000000000001000000 + + + 898 + 1900FFFF01001100434D4643546F6F6C426172427574746F6ECC880000000000000000000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF000000000000000000000000000100000001000000018017800000000000000100000000000000000000000000000000010000000100000001801D800000000000000200000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF00000000000000000000000000010000000100000001801A800000000000000300000000000000000000000000000000010000000100000001801B80000000000000040000000000000000000000000000000001000000010000000180E57F0000000000000500000000000000000000000000000000010000000100000001801C800000000000000600000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF000000000000000000000000000100000001000000018000890000000000000700000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF0000000000000000000000000001000000010000000180E48B000000000000080000000000000000000000000000000001000000010000000180F07F000000000000090000000000000000000000000000000001000000010000000180E8880000000000000A00000000000000000000000000000000010000000100000001803B010000000000000B0000000000000000000000000000000001000000010000000180BB8A0000000000000C0000000000000000000000000000000001000000010000000180D88B0000000000000D0000000000000000000000000000000001000000010000000180D28B0000000000000E000000000000000000000000000000000100000001000000018093070000000000000F0000000000000000000000000000000001000000010000000180658A000000000000100000000000000000000000000000000001000000010000000180C18A000000000000110000000000000000000000000000000001000000010000000180EE8B0000000000001200000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF0000000000000000000000000001000000010000000180018900000000000013000000000000000000000000000000000100000001000000 + + + + 0 + 1536 + 864 + + + + 1 + Debug + + -1 + -1 + 1 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + E70000004F00000000060000BD000000 + + + 16 + E70000006600000000060000D4000000 + + + + 1005 + 1005 + 1 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + 0300000066000000E000000022020000 + + + 16 + 8A000000A10000006D0100005D020000 + + + + 109 + 109 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + 0300000066000000E000000022020000 + + + 16 + 8A000000A10000006D0100005D020000 + + + + 1465 + 1465 + 1 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + 0703000056020000FD050000F5020000 + + + 16 + 8A000000A1000000C20200000F010000 + + + + 1466 + 1466 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + 0703000056020000FD050000F5020000 + + + 16 + 8A000000A1000000C20200000F010000 + + + + 1467 + 1467 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + 0703000056020000FD050000F5020000 + + + 16 + 8A000000A1000000C20200000F010000 + + + + 1468 + 1468 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + 0703000056020000FD050000F5020000 + + + 16 + 8A000000A1000000C20200000F010000 + + + + 1506 + 1506 + 0 + 0 + 0 + 0 + 32767 + 0 + 16384 + 0 + + 16 + E3020000660000006D0400008C010000 + + + 16 + 8A000000A10000001A02000031020000 + + + + 1913 + 1913 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + EA00000066000000FD050000A4000000 + + + 16 + 8A000000A1000000C20200000F010000 + + + + 1935 + 1935 + 1 + 0 + 0 + 0 + 32767 + 0 + 32768 + 0 + + 16 + 0703000056020000FD050000F5020000 + + + 16 + 8A000000A10000001A02000031020000 + + + + 1936 + 1936 + 1 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + 0703000056020000FD050000F5020000 + + + 16 + 8A000000A10000001A02000031020000 + + + + 1937 + 1937 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + 0703000056020000FD050000F5020000 + + + 16 + 8A000000A10000001A02000031020000 + + + + 1939 + 1939 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + 0703000056020000FD050000F5020000 + + + 16 + 8A000000A1000000C20200000F010000 + + + + 1940 + 1940 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + 0703000056020000FD050000F5020000 + + + 16 + 8A000000A1000000C20200000F010000 + + + + 1941 + 1941 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + 0703000056020000FD050000F5020000 + + + 16 + 8A000000A1000000C20200000F010000 + + + + 1942 + 1942 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + 0703000056020000FD050000F5020000 + + + 16 + 8A000000A1000000C20200000F010000 + + + + 195 + 195 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + 0300000066000000E000000022020000 + + + 16 + 8A000000A10000006D0100005D020000 + + + + 196 + 196 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + 0300000066000000E000000022020000 + + + 16 + 8A000000A10000006D0100005D020000 + + + + 197 + 197 + 0 + 0 + 0 + 0 + 32767 + 0 + 32768 + 0 + + 16 + 03000000C00100006D040000FE010000 + + + 16 + 8A000000A1000000C20200000F010000 + + + + 198 + 198 + 1 + 0 + 0 + 0 + 32767 + 0 + 32768 + 0 + + 16 + 000000003F020000000300000E030000 + + + 16 + 8A000000A1000000C20200000F010000 + + + + 199 + 199 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + 03000000C00100006D040000FE010000 + + + 16 + 8A000000A1000000C20200000F010000 + + + + 203 + 203 + 1 + 0 + 0 + 0 + 32767 + 0 + 8192 + 0 + + 16 + E70000006300000000060000BD000000 + + + 16 + 8A000000A1000000C20200000F010000 + + + + 204 + 204 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + EA00000066000000FD050000A4000000 + + + 16 + 8A000000A1000000C20200000F010000 + + + + 221 + 221 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + 00000000000000000000000000000000 + + + 16 + 0A0000000A0000006E0000006E000000 + + + + 2506 + 2506 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + E3020000660000006D0400008C010000 + + + 16 + 8A000000A10000001A02000031020000 + + + + 2507 + 2507 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + 0703000056020000FD050000F5020000 + + + 16 + 8A000000A1000000C20200000F010000 + + + + 343 + 343 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + EA00000066000000FD050000A4000000 + + + 16 + 8A000000A1000000C20200000F010000 + + + + 346 + 346 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + EA00000066000000FD050000A4000000 + + + 16 + 8A000000A1000000C20200000F010000 + + + + 35824 + 35824 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + EA00000066000000FD050000A4000000 + + + 16 + 8A000000A1000000C20200000F010000 + + + + 35885 + 35885 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + E3020000660000006D0400008C010000 + + + 16 + 8A000000A10000001A02000031020000 + + + + 35886 + 35886 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + E3020000660000006D0400008C010000 + + + 16 + 8A000000A10000001A02000031020000 + + + + 35887 + 35887 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + E3020000660000006D0400008C010000 + + + 16 + 8A000000A10000001A02000031020000 + + + + 35888 + 35888 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + E3020000660000006D0400008C010000 + + + 16 + 8A000000A10000001A02000031020000 + + + + 35889 + 35889 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + E3020000660000006D0400008C010000 + + + 16 + 8A000000A10000001A02000031020000 + + + + 35890 + 35890 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + E3020000660000006D0400008C010000 + + + 16 + 8A000000A10000001A02000031020000 + + + + 35891 + 35891 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + E3020000660000006D0400008C010000 + + + 16 + 8A000000A10000001A02000031020000 + + + + 35892 + 35892 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + E3020000660000006D0400008C010000 + + + 16 + 8A000000A10000001A02000031020000 + + + + 35893 + 35893 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + E3020000660000006D0400008C010000 + + + 16 + 8A000000A10000001A02000031020000 + + + + 35894 + 35894 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + E3020000660000006D0400008C010000 + + + 16 + 8A000000A10000001A02000031020000 + + + + 35895 + 35895 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + E3020000660000006D0400008C010000 + + + 16 + 8A000000A10000001A02000031020000 + + + + 35896 + 35896 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + E3020000660000006D0400008C010000 + + + 16 + 8A000000A10000001A02000031020000 + + + + 35897 + 35897 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + E3020000660000006D0400008C010000 + + + 16 + 8A000000A10000001A02000031020000 + + + + 35898 + 35898 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + E3020000660000006D0400008C010000 + + + 16 + 8A000000A10000001A02000031020000 + + + + 35899 + 35899 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + E3020000660000006D0400008C010000 + + + 16 + 8A000000A10000001A02000031020000 + + + + 35900 + 35900 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + E3020000660000006D0400008C010000 + + + 16 + 8A000000A10000001A02000031020000 + + + + 35901 + 35901 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + E3020000660000006D0400008C010000 + + + 16 + 8A000000A10000001A02000031020000 + + + + 35902 + 35902 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + E3020000660000006D0400008C010000 + + + 16 + 8A000000A10000001A02000031020000 + + + + 35903 + 35903 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + E3020000660000006D0400008C010000 + + + 16 + 8A000000A10000001A02000031020000 + + + + 35904 + 35904 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + E3020000660000006D0400008C010000 + + + 16 + 8A000000A10000001A02000031020000 + + + + 35905 + 35905 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + E3020000660000006D0400008C010000 + + + 16 + 8A000000A10000001A02000031020000 + + + + 38003 + 38003 + 1 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + 0300000066000000E000000022020000 + + + 16 + 8A000000A10000006D0100005D020000 + + + + 38007 + 38007 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + 03000000C00100006D040000FE010000 + + + 16 + 8A000000A1000000C20200000F010000 + + + + 436 + 436 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + 03000000C00100006D040000FE010000 + + + 16 + 8A000000A10000006D0100005D020000 + + + + 437 + 437 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + 0703000056020000FD050000F5020000 + + + 16 + 8A000000A10000001A02000031020000 + + + + 440 + 440 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + 0703000056020000FD050000F5020000 + + + 16 + 8A000000A10000001A02000031020000 + + + + 59392 + 59392 + 1 + 0 + 0 + 0 + 940 + 0 + 8192 + 0 + + 16 + 0000000000000000B70300001C000000 + + + 16 + 0A0000000A0000006E0000006E000000 + + + + 59393 + 0 + 1 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + 000000000E0300000006000021030000 + + + 16 + 0A0000000A0000006E0000006E000000 + + + + 59399 + 59399 + 0 + 0 + 0 + 0 + 439 + 0 + 8192 + 1 + + 16 + 000000001C000000C201000038000000 + + + 16 + 0A0000000A0000006E0000006E000000 + + + + 59400 + 59400 + 1 + 0 + 0 + 0 + 612 + 0 + 8192 + 2 + + 16 + 000000001C0000006F02000038000000 + + + 16 + 0A0000000A0000006E0000006E000000 + + + + 2618 + 000000000B000000000000000020000001000000FFFFFFFFFFFFFFFFE7000000BD00000000060000C1000000010000000100001004000000010000000000000000000000FFFFFFFF06000000CB00000057010000CC000000F08B00005A01000079070000FFFF02000B004354616262656450616E650020000001000000E70000006600000000060000D4000000E70000004F00000000060000BD0000000000000040280056060000000B446973617373656D626C7901000000CB00000001000000FFFFFFFFFFFFFFFF14506572666F726D616E636520416E616C797A6572000000005701000001000000FFFFFFFFFFFFFFFF14506572666F726D616E636520416E616C797A657200000000CC00000001000000FFFFFFFFFFFFFFFF0E4C6F67696320416E616C797A657200000000F08B000001000000FFFFFFFFFFFFFFFF0D436F646520436F766572616765000000005A01000001000000FFFFFFFFFFFFFFFF11496E737472756374696F6E205472616365000000007907000001000000FFFFFFFFFFFFFFFF00000000000000000000000000000000000000000000000001000000FFFFFFFFCB00000001000000FFFFFFFFCB000000000000000040000000000000FFFFFFFFFFFFFFFFDC0200004F000000E0020000A5010000000000000200000004000000010000000000000000000000FFFFFFFF17000000E2050000CA0900002D8C00002E8C00002F8C0000308C0000318C0000328C0000338C0000348C0000358C0000368C0000378C0000388C0000398C00003A8C00003B8C00003C8C00003D8C00003E8C00003F8C0000408C0000418C000001800040000000000000E00200006600000070040000BC010000E00200004F00000070040000A50100000000000040410046170000000753796D626F6C7300000000E205000001000000FFFFFFFFFFFFFFFF0A5472616365204461746100000000CA09000001000000FFFFFFFFFFFFFFFF00000000002D8C000001000000FFFFFFFFFFFFFFFF00000000002E8C000001000000FFFFFFFFFFFFFFFF00000000002F8C000001000000FFFFFFFFFFFFFFFF0000000000308C000001000000FFFFFFFFFFFFFFFF0000000000318C000001000000FFFFFFFFFFFFFFFF0000000000328C000001000000FFFFFFFFFFFFFFFF0000000000338C000001000000FFFFFFFFFFFFFFFF0000000000348C000001000000FFFFFFFFFFFFFFFF0000000000358C000001000000FFFFFFFFFFFFFFFF0000000000368C000001000000FFFFFFFFFFFFFFFF0000000000378C000001000000FFFFFFFFFFFFFFFF0000000000388C000001000000FFFFFFFFFFFFFFFF0000000000398C000001000000FFFFFFFFFFFFFFFF00000000003A8C000001000000FFFFFFFFFFFFFFFF00000000003B8C000001000000FFFFFFFFFFFFFFFF00000000003C8C000001000000FFFFFFFFFFFFFFFF00000000003D8C000001000000FFFFFFFFFFFFFFFF00000000003E8C000001000000FFFFFFFFFFFFFFFF00000000003F8C000001000000FFFFFFFFFFFFFFFF0000000000408C000001000000FFFFFFFFFFFFFFFF0000000000418C000001000000FFFFFFFFFFFFFFFFFFFFFFFF000000000000000000000000000000000000000001000000FFFFFFFFE205000001000000FFFFFFFFE2050000000000000010000001000000FFFFFFFFFFFFFFFFE30000004F000000E70000003B020000010000000200001004000000010000000000000000000000FFFFFFFF05000000ED0300006D000000C3000000C400000073940000018000100000010000000000000066000000E300000052020000000000004F000000E30000003B0200000000000040140056050000000750726F6A65637401000000ED03000001000000FFFFFFFFFFFFFFFF05426F6F6B73000000006D00000001000000FFFFFFFFFFFFFFFF0946756E6374696F6E7300000000C300000001000000FFFFFFFFFFFFFFFF0954656D706C6174657300000000C400000001000000FFFFFFFFFFFFFFFF09526567697374657273010000007394000001000000FFFFFFFFFFFFFFFF04000000000000000000000000000000000000000000000001000000FFFFFFFFED03000001000000FFFFFFFFED030000000000000080000001000000FFFFFFFFFFFFFFFF000000003B020000000600003F020000010000000100001004000000010000003EFEFFFF1D00000000000000000000000000000001000000C6000000FFFFFFFF0E0000008F070000930700009407000095070000960700009007000091070000B5010000B8010000B9050000BA050000BB050000BC050000CB0900000180008000000100000004030000560200000006000025030000040300003F020000000600000E03000000000000404100560E0000001343616C6C20537461636B202B204C6F63616C73010000008F07000001000000FFFFFFFFFFFFFFFF0755415254202331000000009307000001000000FFFFFFFFFFFFFFFF0755415254202332000000009407000001000000FFFFFFFFFFFFFFFF0755415254202333000000009507000001000000FFFFFFFFFFFFFFFF15446562756720287072696E74662920566965776572000000009607000001000000FFFFFFFFFFFFFFFF0757617463682031010000009007000001000000FFFFFFFFFFFFFFFF0757617463682032000000009107000001000000FFFFFFFFFFFFFFFF10547261636520457863657074696F6E7300000000B501000001000000FFFFFFFFFFFFFFFF0E4576656E7420436F756E7465727300000000B801000001000000FFFFFFFFFFFFFFFF084D656D6F7279203101000000B905000001000000FFFFFFFFFFFFFFFF084D656D6F7279203200000000BA05000001000000FFFFFFFFFFFFFFFF084D656D6F7279203300000000BB05000001000000FFFFFFFFFFFFFFFF084D656D6F7279203400000000BC05000001000000FFFFFFFFFFFFFFFF105472616365204E617669676174696F6E00000000CB09000001000000FFFFFFFFFFFFFFFF090000000000000001000000000000000100000001000000FFFFFFFF000300003F020000040300000E03000001000000020000100400000000000000000000000000000000000000000000000000000002000000C6000000FFFFFFFF8F07000001000000FFFFFFFF8F07000001000000C6000000000000000080000000000000FFFFFFFFFFFFFFFF00000000A501000070040000A9010000000000000100000004000000010000000000000000000000FFFFFFFF04000000C5000000C7000000B4010000779400000180008000000000000000000000C0010000700400002E02000000000000A901000070040000170200000000000040820046040000000C4275696C64204F757470757400000000C500000001000000FFFFFFFFFFFFFFFF0D46696E6420496E2046696C657300000000C700000001000000FFFFFFFFFFFFFFFF0A4572726F72204C69737400000000B401000001000000FFFFFFFFFFFFFFFF0642726F777365000000007794000001000000FFFFFFFFFFFFFFFFFFFFFFFF000000000000000000000000000000000000000001000000FFFFFFFFC500000001000000FFFFFFFFC5000000000000000000000000000000 + + + 59392 + File + + 2775 + 00200000010000002800FFFF01001100434D4643546F6F6C426172427574746F6E00E100000000000000000000000000000000000000000000000100000001000000018001E100000000000001000000000000000000000000000000000100000001000000018003E1000000000000020000000000000000000000000000000001000000010000000180CD7F0000000000000300000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF000000000000000000000000000100000001000000018023E100000000040004000000000000000000000000000000000100000001000000018022E100000000040005000000000000000000000000000000000100000001000000018025E10000000000000600000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF00000000000000000000000000010000000100000001802BE10000000000000700000000000000000000000000000000010000000100000001802CE10000000004000800000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF00000000000000000000000000010000000100000001807A8A0000000000000900000000000000000000000000000000010000000100000001807B8A0000000004000A00000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF0000000000000000000000000001000000010000000180D3B00000000000000B000000000000000000000000000000000100000001000000018015B10000000004000C0000000000000000000000000000000001000000010000000180F4B00000000004000D000000000000000000000000000000000100000001000000018036B10000000004000E00000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF0000000000000000000000000001000000010000000180FF88000000000400460000000000000000000000000000000001000000010000000180FE880000000004004500000000000000000000000000000000010000000100000001800B810000000004001300000000000000000000000000000000010000000100000001800C810000000004001400000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF0000000000000000000000000001000000010000000180F0880000020000000F000000000000000000000000000000000100000001000000FFFF0100120043555646696E64436F6D626F427574746F6EE803000000000000000000000000000000000000000000000001000000010000009600000002002050000000006023696620646566696E656420285343393246383436784229207C7C20646566696E656420285343393246373436784229207C7C20646566696E656420285343393246383336784229207C7C20646566696E656420285343393246373336784229960000000000000004006023696620646566696E656420285343393246383436784229207C7C20646566696E656420285343393246373436784229207C7C20646566696E656420285343393246383336784229207C7C20646566696E656420285343393246373336784229C023696620646566696E6564202853433932463835347829207C7C20646566696E6564202853433932463735347829207C7C646566696E65642020285343393246383434784229207C7C20646566696E6564202853433932463734347842297C7C646566696E65642020285343393246383441785F3229207C7C20646566696E656420285343393246373441785F32297C7C20646566696E656420285343393246383341785F3229207C7C20646566696E656420285343393246373341785F3229B823696620646566696E6564202853433932463835347829207C7C20646566696E6564202853433932463735347829207C7C646566696E65642020285343393246383434784229207C7C20646566696E6564202853433932463734347842297C7C646566696E656420202853433932463834417829207C7C20646566696E65642028534339324637344178297C7C20646566696E6564202853433932463833417829207C7C20646566696E6564202853433932463733417829B923696620646566696E6564202853433932463835347829207C7C20646566696E6564202853433932463735347829207C7C20646566696E656420285343393246383434784229207C7C20646566696E6564202853433932463734347842297C7C20646566696E6564202853433932463834417829207C7C20646566696E65642028534339324637344178297C7C20646566696E6564202853433932463833417829207C7C20646566696E65642028534339324637334178292000000000000000000000000000000000018024E10000000000001100000000000000000000000000000000010000000100000001800A810000000000001200000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF000000000000000000000000000100000001000000018022800000020003001500000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF0000000000000000000000000001000000010000000180C488000000000000160000000000000000000000000000000001000000010000000180C988000000000400180000000000000000000000000000000001000000010000000180C788000000000000190000000000000000000000000000000001000000010000000180C8880000000000001700000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF000000000000000000000000000100000001000000FFFF01001500434D4643546F6F6C4261724D656E75427574746F6E4C010000020001001A0000000F50726F6A6563742057696E646F7773000000000000000000000000010000000100000000000000000000000100000008002880DD880000000000001A0000000750726F6A656374000000000000000000000000010000000100000000000000000000000100000000002880DC8B0000000000003A00000005426F6F6B73000000000000000000000000010000000100000000000000000000000100000000002880E18B0000000000003B0000000946756E6374696F6E73000000000000000000000000010000000100000000000000000000000100000000002880E28B000000000000400000000954656D706C6174657300000000000000000000000001000000010000000000000000000000010000000000288018890000000000003D0000000E536F757263652042726F777365720000000000000000000000000100000001000000000000000000000001000000000028800000000000000400FFFFFFFF00000000000000000001000000000000000100000000000000000000000100000000002880D988000000000000390000000C4275696C64204F7574707574000000000000000000000000010000000100000000000000000000000100000000002880E38B000000000000410000000B46696E64204F75747075740000000000000000000000000100000001000000000000000000000001000000000001800000000001000000FFFFFFFF0000000000000000000000000001000000010000000180FB7F0000000000001B000000000000000000000000000000000100000001000000000000000446696C65AC030000 + + + 1423 + 2800FFFF01001100434D4643546F6F6C426172427574746F6E00E1000000000000FFFFFFFF000100000000000000010000000000000001000000018001E1000000000000FFFFFFFF000100000000000000010000000000000001000000018003E1000000000000FFFFFFFF0001000000000000000100000000000000010000000180CD7F000000000000FFFFFFFF00010000000000000001000000000000000100000001800000000000000000FFFFFFFF000000000000000000010000000000000001000000018023E1000000000000FFFFFFFF000100000000000000010000000000000001000000018022E1000000000000FFFFFFFF000100000000000000010000000000000001000000018025E1000000000000FFFFFFFF00010000000000000001000000000000000100000001800000000000000000FFFFFFFF00000000000000000001000000000000000100000001802BE1000000000000FFFFFFFF00010000000000000001000000000000000100000001802CE1000000000000FFFFFFFF00010000000000000001000000000000000100000001800000000000000000FFFFFFFF00000000000000000001000000000000000100000001807A8A000000000000FFFFFFFF00010000000000000001000000000000000100000001807B8A000000000000FFFFFFFF00010000000000000001000000000000000100000001800000000000000000FFFFFFFF0000000000000000000100000000000000010000000180D3B0000000000000FFFFFFFF000100000000000000010000000000000001000000018015B1000000000000FFFFFFFF0001000000000000000100000000000000010000000180F4B0000000000000FFFFFFFF000100000000000000010000000000000001000000018036B1000000000000FFFFFFFF00010000000000000001000000000000000100000001800000000000000000FFFFFFFF0000000000000000000100000000000000010000000180FF88000000000000FFFFFFFF0001000000000000000100000000000000010000000180FE88000000000000FFFFFFFF00010000000000000001000000000000000100000001800B81000000000000FFFFFFFF00010000000000000001000000000000000100000001800C81000000000000FFFFFFFF00010000000000000001000000000000000100000001800000000000000000FFFFFFFF0000000000000000000100000000000000010000000180F088000000000000FFFFFFFF0001000000000000000100000000000000010000000180EE7F000000000000FFFFFFFF000100000000000000010000000000000001000000018024E1000000000000FFFFFFFF00010000000000000001000000000000000100000001800A81000000000000FFFFFFFF00010000000000000001000000000000000100000001800000000000000000FFFFFFFF00000000000000000001000000000000000100000001802280000000000000FFFFFFFF00010000000000000001000000000000000100000001800000000000000000FFFFFFFF0000000000000000000100000000000000010000000180C488000000000000FFFFFFFF0001000000000000000100000000000000010000000180C988000000000000FFFFFFFF0001000000000000000100000000000000010000000180C788000000000000FFFFFFFF0001000000000000000100000000000000010000000180C888000000000000FFFFFFFF00010000000000000001000000000000000100000001800000000000000000FFFFFFFF0000000000000000000100000000000000010000000180DD88000000000000FFFFFFFF00010000000000000001000000000000000100000001800000000000000000FFFFFFFF0000000000000000000100000000000000010000000180FB7F000000000000FFFFFFFF000100000000000000010000000000000001000000 + + + 1423 + 2800FFFF01001100434D4643546F6F6C426172427574746F6E00E100000000000000000000000000000000000000000000000100000001000000018001E100000000000001000000000000000000000000000000000100000001000000018003E1000000000000020000000000000000000000000000000001000000010000000180CD7F0000000000000300000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF000000000000000000000000000100000001000000018023E100000000000004000000000000000000000000000000000100000001000000018022E100000000000005000000000000000000000000000000000100000001000000018025E10000000000000600000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF00000000000000000000000000010000000100000001802BE10000000000000700000000000000000000000000000000010000000100000001802CE10000000000000800000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF00000000000000000000000000010000000100000001807A8A0000000000000900000000000000000000000000000000010000000100000001807B8A0000000000000A00000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF0000000000000000000000000001000000010000000180D3B00000000000000B000000000000000000000000000000000100000001000000018015B10000000000000C0000000000000000000000000000000001000000010000000180F4B00000000000000D000000000000000000000000000000000100000001000000018036B10000000000000E00000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF0000000000000000000000000001000000010000000180FF880000000000000F0000000000000000000000000000000001000000010000000180FE880000000000001000000000000000000000000000000000010000000100000001800B810000000000001100000000000000000000000000000000010000000100000001800C810000000000001200000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF0000000000000000000000000001000000010000000180F088000000000000130000000000000000000000000000000001000000010000000180EE7F00000000000014000000000000000000000000000000000100000001000000018024E10000000000001500000000000000000000000000000000010000000100000001800A810000000000001600000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF000000000000000000000000000100000001000000018022800000000000001700000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF0000000000000000000000000001000000010000000180C488000000000000180000000000000000000000000000000001000000010000000180C988000000000000190000000000000000000000000000000001000000010000000180C7880000000000001A0000000000000000000000000000000001000000010000000180C8880000000000001B00000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF0000000000000000000000000001000000010000000180DD880000000000001C00000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF0000000000000000000000000001000000010000000180FB7F0000000000001D000000000000000000000000000000000100000001000000 + + + + 59399 + Build + + 622 + 00200000000000000F00FFFF01001100434D4643546F6F6C426172427574746F6ECF7F0000000000001C0000000000000000000000000000000001000000010000000180D07F0000000000001D000000000000000000000000000000000100000001000000018030800000000000001E00000000000000000000000000000000010000000100000001809E8A0000000000001F0000000000000000000000000000000001000000010000000180D17F0000000000002000000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF00000000000000000000000000010000000100000001804C8A0000000000002100000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF000000000000000000000000000100000001000000FFFF01001900434D4643546F6F6C426172436F6D626F426F78427574746F6EBA00000000000000000000000000000000000000000000000001000000010000009600000003002050FFFFFFFF00960000000000000000000180EB880000000000002200000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF0000000000000000000000000001000000010000000180C07F000000000000230000000000000000000000000000000001000000010000000180B08A000000000000240000000000000000000000000000000001000000010000000180A8010000000000004E0000000000000000000000000000000001000000010000000180BE010000000000005000000000000000000000000000000000010000000100000000000000054275696C64B7010000 + + + 548 + 0F00FFFF01001100434D4643546F6F6C426172427574746F6ECF7F000000000000FFFFFFFF0001000000000000000100000000000000010000000180D07F000000000000FFFFFFFF00010000000000000001000000000000000100000001803080000000000000FFFFFFFF00010000000000000001000000000000000100000001809E8A000000000000FFFFFFFF0001000000000000000100000000000000010000000180D17F000000000000FFFFFFFF00010000000000000001000000000000000100000001800000000000000000FFFFFFFF00000000000000000001000000000000000100000001804C8A000000000000FFFFFFFF00010000000000000001000000000000000100000001800000000000000000FFFFFFFF00000000000000000001000000000000000100000001806680000000000000FFFFFFFF0001000000000000000100000000000000010000000180EB88000000000000FFFFFFFF00010000000000000001000000000000000100000001800000000000000000FFFFFFFF0000000000000000000100000000000000010000000180C07F000000000000FFFFFFFF0001000000000000000100000000000000010000000180B08A000000000000FFFFFFFF0001000000000000000100000000000000010000000180A801000000000000FFFFFFFF0001000000000000000100000000000000010000000180BE01000000000000FFFFFFFF000100000000000000010000000000000001000000 + + + 548 + 0F00FFFF01001100434D4643546F6F6C426172427574746F6ECF7F000000000000000000000000000000000000000000000001000000010000000180D07F00000000000001000000000000000000000000000000000100000001000000018030800000000000000200000000000000000000000000000000010000000100000001809E8A000000000000030000000000000000000000000000000001000000010000000180D17F0000000000000400000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF00000000000000000000000000010000000100000001804C8A0000000000000500000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF00000000000000000000000000010000000100000001806680000000000000060000000000000000000000000000000001000000010000000180EB880000000000000700000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF0000000000000000000000000001000000010000000180C07F000000000000080000000000000000000000000000000001000000010000000180B08A000000000000090000000000000000000000000000000001000000010000000180A8010000000000000A0000000000000000000000000000000001000000010000000180BE010000000000000B000000000000000000000000000000000100000001000000 + + + + 59400 + Debug + + 2220 + 00200000010000001900FFFF01001100434D4643546F6F6C426172427574746F6ECC880000000000002500000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF000000000000000000000000000100000001000000018017800000000000002600000000000000000000000000000000010000000100000001801D800000000004002700000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF00000000000000000000000000010000000100000001801A800000000000002800000000000000000000000000000000010000000100000001801B80000000000000290000000000000000000000000000000001000000010000000180E57F0000000004002A00000000000000000000000000000000010000000100000001801C800000000000002B00000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF000000000000000000000000000100000001000000018000890000000000002C00000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF0000000000000000000000000001000000010000000180E48B0000020001002D0000000000000000000000000000000001000000010000000180F07F0000020001002E0000000000000000000000000000000001000000010000000180E8880000020000003700000000000000000000000000000000010000000100000001803B010000020001002F0000000000000000000000000000000001000000010000000180BB8A00000200010030000000000000000000000000000000000100000001000000FFFF01001500434D4643546F6F6C4261724D656E75427574746F6E0E01000002000100310000000D57617463682057696E646F7773000000000000000000000000010000000100000000000000000000000100000002001380D88B000000000000310000000757617463682031000000000000000000000000010000000100000000000000000000000100000000001380D98B0000000000003100000007576174636820320000000000000000000000000100000001000000000000000000000001000000000013800F01000002000100320000000E4D656D6F72792057696E646F7773000000000000000000000000010000000100000000000000000000000100000004001380D28B00000000000032000000084D656D6F72792031000000000000000000000000010000000100000000000000000000000100000000001380D38B00000000000032000000084D656D6F72792032000000000000000000000000010000000100000000000000000000000100000000001380D48B00000000000032000000084D656D6F72792033000000000000000000000000010000000100000000000000000000000100000000001380D58B00000000000032000000084D656D6F727920340000000000000000000000000100000001000000000000000000000001000000000013801001000002000000330000000E53657269616C2057696E646F77730000000000000000000000000100000001000000000000000000000001000000040013809307000000000000330000000755415254202331000000000000000000000000010000000100000000000000000000000100000000001380940700000000000033000000075541525420233200000000000000000000000001000000010000000000000000000000010000000000138095070000000000003300000007554152542023330000000000000000000000000100000001000000000000000000000001000000000013809607000000000000330000000E49544D2F525441205669657765720000000000000000000000000100000001000000000000000000000001000000000013803C010000020000003400000010416E616C797369732057696E646F7773000000000000000000000000010000000100000000000000000000000100000003001380658A000000000000340000000E4C6F67696320416E616C797A6572000000000000000000000000010000000100000000000000000000000100000000001380DC7F0000000000003E00000014506572666F726D616E636520416E616C797A6572000000000000000000000000010000000100000000000000000000000100000000001380E788000000000000380000000D436F646520436F76657261676500000000000000000000000001000000010000000000000000000000010000000000138053010000000000003F0000000D54726163652057696E646F77730000000000000000000000000100000001000000000000000000000001000000010013805401000000000000FFFFFFFF115472616365204D656E7520416E63686F720100000000000000010000000000000001000000000000000000000001000000000013802901000000000000350000001553797374656D205669657765722057696E646F77730000000000000000000000000100000001000000000000000000000001000000010013804B01000000000000FFFFFFFF1453797374656D2056696577657220416E63686F720100000000000000010000000000000001000000000000000000000001000000000001800000000001000000FFFFFFFF000000000000000000000000000100000001000000138001890000020000003600000007546F6F6C626F7800000000000000000000000001000000010000000000000000000000010000000300138044C5000000000000FFFFFFFF0E5570646174652057696E646F77730100000000000000010000000000000001000000000000000000000001000000000013800000000000000400FFFFFFFF000000000000000000010000000000000001000000000000000000000001000000000013805B01000000000000FFFFFFFF12546F6F6C626F78204D656E75416E63686F72010000000000000001000000000000000100000000000000000000000100000000000000000005446562756764020000 + + + 898 + 1900FFFF01001100434D4643546F6F6C426172427574746F6ECC88000000000000FFFFFFFF00010000000000000001000000000000000100000001800000000000000000FFFFFFFF00000000000000000001000000000000000100000001801780000000000000FFFFFFFF00010000000000000001000000000000000100000001801D80000000000000FFFFFFFF00010000000000000001000000000000000100000001800000000000000000FFFFFFFF00000000000000000001000000000000000100000001801A80000000000000FFFFFFFF00010000000000000001000000000000000100000001801B80000000000000FFFFFFFF0001000000000000000100000000000000010000000180E57F000000000000FFFFFFFF00010000000000000001000000000000000100000001801C80000000000000FFFFFFFF00010000000000000001000000000000000100000001800000000000000000FFFFFFFF00000000000000000001000000000000000100000001800089000000000000FFFFFFFF00010000000000000001000000000000000100000001800000000000000000FFFFFFFF0000000000000000000100000000000000010000000180E48B000000000000FFFFFFFF0001000000000000000100000000000000010000000180F07F000000000000FFFFFFFF0001000000000000000100000000000000010000000180E888000000000000FFFFFFFF00010000000000000001000000000000000100000001803B01000000000000FFFFFFFF0001000000000000000100000000000000010000000180BB8A000000000000FFFFFFFF0001000000000000000100000000000000010000000180D88B000000000000FFFFFFFF0001000000000000000100000000000000010000000180D28B000000000000FFFFFFFF00010000000000000001000000000000000100000001809307000000000000FFFFFFFF0001000000000000000100000000000000010000000180658A000000000000FFFFFFFF0001000000000000000100000000000000010000000180C18A000000000000FFFFFFFF0001000000000000000100000000000000010000000180EE8B000000000000FFFFFFFF00010000000000000001000000000000000100000001800000000000000000FFFFFFFF00000000000000000001000000000000000100000001800189000000000000FFFFFFFF000100000000000000010000000000000001000000 + + + 898 + 1900FFFF01001100434D4643546F6F6C426172427574746F6ECC880000000000000000000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF000000000000000000000000000100000001000000018017800000000000000100000000000000000000000000000000010000000100000001801D800000000000000200000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF00000000000000000000000000010000000100000001801A800000000000000300000000000000000000000000000000010000000100000001801B80000000000000040000000000000000000000000000000001000000010000000180E57F0000000000000500000000000000000000000000000000010000000100000001801C800000000000000600000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF000000000000000000000000000100000001000000018000890000000000000700000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF0000000000000000000000000001000000010000000180E48B000000000000080000000000000000000000000000000001000000010000000180F07F000000000000090000000000000000000000000000000001000000010000000180E8880000000000000A00000000000000000000000000000000010000000100000001803B010000000000000B0000000000000000000000000000000001000000010000000180BB8A0000000000000C0000000000000000000000000000000001000000010000000180D88B0000000000000D0000000000000000000000000000000001000000010000000180D28B0000000000000E000000000000000000000000000000000100000001000000018093070000000000000F0000000000000000000000000000000001000000010000000180658A000000000000100000000000000000000000000000000001000000010000000180C18A000000000000110000000000000000000000000000000001000000010000000180EE8B0000000000001200000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF0000000000000000000000000001000000010000000180018900000000000013000000000000000000000000000000000100000001000000 + + + + 0 + 1536 + 864 + + + + + + + E:\宸ヤ綔\宸ヤ綔椤圭洰\BSP鍖匼SC92F绯诲垪閫氱敤BSP鍖匳0.0.1\KEIL_MOULD\FWLIB\SC92F_LIB\INC\SC92F_PWM.H + 0 + 121 + 132 + + + E:\宸ヤ綔\宸ヤ綔椤圭洰\BSP鍖匼SC92F绯诲垪閫氱敤BSP鍖匳0.0.1\KEIL_MOULD\FWLIB\SC92F_LIB\INC\SC92F_IAP.H + 0 + 2 + 9 + + + E:\宸ヤ綔\宸ヤ綔椤圭洰\BSP鍖匼SC92F绯诲垪閫氱敤BSP鍖匳0.0.1\KEIL_MOULD\FWLIB\SC92F_LIB\INC\SC92F_UART0.H + 0 + 4 + 9 + + + E:\宸ヤ綔\宸ヤ綔椤圭洰\BSP鍖匼SC92F绯诲垪閫氱敤BSP鍖匳0.0.1\Keil_Mould\FWLIB\SC92F_LIB\SRC\SC92F_UART0.C + 0 + 2 + 9 + + + E:\宸ヤ綔\宸ヤ綔椤圭洰\BSP鍖匼SC92F绯诲垪閫氱敤BSP鍖匳0.0.1\KEIL_MOULD\FWLIB\SC92F_LIB\INC\SC92F.H + 0 + 2 + 9 + + + E:\宸ヤ綔\宸ヤ綔椤圭洰\BSP鍖匼SC92F绯诲垪閫氱敤BSP鍖匳0.0.1\Keil_Mould\FWLib\SC92F_Lib\src\sc92f_iap.c + 0 + 2 + 9 + + + E:\宸ヤ綔\宸ヤ綔椤圭洰\BSP鍖匼SC92F绯诲垪閫氱敤BSP鍖匳0.0.1\Keil_Mould\FWLib\SC92F_Lib\src\sc92f_pwr.c + 0 + 2 + 9 + + + E:\宸ヤ綔\宸ヤ綔椤圭洰\BSP鍖匼SC92F绯诲垪閫氱敤BSP鍖匳0.0.1\Keil_Mould\FWLib\SC92F_Lib\src\sc92f_pwm.c + 0 + 2 + 12 + + + E:\宸ヤ綔\宸ヤ綔椤圭洰\BSP鍖匼SC92F绯诲垪閫氱敤BSP鍖匳0.0.1\Keil_Mould\FWLib\SC92F_Lib\src\sc92f_chksum.c + 0 + 22 + 31 + + + + + 1 + 0 + + 100 + 0 + + E:\宸ヤ綔\宸ヤ綔椤圭洰\BSP鍖匼SC92F绯诲垪閫氱敤BSP鍖匳0.0.1\Keil_Mould\FWLib\SC92F_Lib\src\sc92f_chksum.c + 6 + 22 + 31 + 1 + + 0 + + + E:\宸ヤ綔\宸ヤ綔椤圭洰\BSP鍖匼SC92F绯诲垪閫氱敤BSP鍖匳0.0.1\Keil_Mould\FWLib\SC92F_Lib\src\sc92f_pwm.c + 17 + 2 + 12 + 1 + + 0 + + + E:\宸ヤ綔\宸ヤ綔椤圭洰\BSP鍖匼SC92F绯诲垪閫氱敤BSP鍖匳0.0.1\Keil_Mould\FWLib\SC92F_Lib\src\sc92f_pwr.c + 23 + 2 + 9 + 1 + + 0 + + + ..\FWLib\SC92F_Lib\src\sc92f_gpio.c + 24 + 8 + 9 + 1 + + 0 + + + E:\宸ヤ綔\宸ヤ綔椤圭洰\BSP鍖匼SC92F绯诲垪閫氱敤BSP鍖匳0.0.1\Keil_Mould\FWLib\SC92F_Lib\src\sc92f_iap.c + 23 + 2 + 9 + 1 + + 0 + + + \宸ヤ綔\宸ヤ綔椤圭洰\BSP鍖匼SC92F绯诲垪閫氱敤BSP鍖匳0.0.1\KEIL_MOULD\FWLIB\SC92F_LIB\INC\SC92F.H + 23 + 2 + 9 + 1 + + 0 + + + E:\宸ヤ綔\宸ヤ綔椤圭洰\BSP鍖匼SC92F绯诲垪閫氱敤BSP鍖匳0.0.1\Keil_Mould\FWLIB\SC92F_LIB\SRC\SC92F_UART0.C + 23 + 2 + 9 + 1 + + 0 + + + \宸ヤ綔\宸ヤ綔椤圭洰\BSP鍖匼SC92F绯诲垪閫氱敤BSP鍖匳0.0.1\KEIL_MOULD\FWLIB\SC92F_LIB\INC\SC92F_UART0.H + 23 + 4 + 9 + 1 + + 0 + + + \宸ヤ綔\宸ヤ綔椤圭洰\BSP鍖匼SC92F绯诲垪閫氱敤BSP鍖匳0.0.1\KEIL_MOULD\FWLIB\SC92F_LIB\INC\SC92F_IAP.H + 23 + 2 + 9 + 1 + + 0 + + + \宸ヤ綔\宸ヤ綔椤圭洰\BSP鍖匼SC92F绯诲垪閫氱敤BSP鍖匳0.0.1\KEIL_MOULD\FWLIB\SC92F_LIB\INC\SC92F_PWM.H + 370 + 121 + 132 + 1 + + 0 + + + + +
diff --git a/CFG/SC92F8363B/Keil_Mould/Project/project name.uvgui_Andy.bak b/CFG/SC92F8363B/Keil_Mould/Project/project name.uvgui_Andy.bak new file mode 100644 index 0000000..b0b87ba --- /dev/null +++ b/CFG/SC92F8363B/Keil_Mould/Project/project name.uvgui_Andy.bak @@ -0,0 +1,2737 @@ + + + + -4.1 + +
### uVision Project, (C) Keil Software
+ + + + + + 38003 + Registers + 115 192 + + + 346 + Code Coverage + 735 160 + + + 204 + Performance Analyzer + 895 + + + + + + 1506 + Symbols + + 133 133 133 + + + 1936 + Watch 1 + + 133 133 133 + + + 1937 + Watch 2 + + 133 133 133 + + + 1935 + Call Stack + Locals + + 133 133 133 + + + 2506 + Trace Data + + 75 135 130 95 70 230 200 + + + + + + 0 + 0 + 0 + + + + + + + 44 + 2 + 3 + + -32000 + -32000 + + + -1 + -1 + + + 64 + 94 + 1246 + 657 + + + + 0 + + 1370 + 0100000004000000010000000100000001000000010000000000000002000000000000000100000001000000000000002800000028000000010000000A00000000000000010000005D453A5CB9A4D7F75CB9A4D7F7CFEEC4BF5C425350B0FC5C5343393246CFB5C1D0CDA8D3C3425350B0FC56302E302E315C4B65696C5F4D6F756C645C46574C69625C53433932465F4C69625C7372635C73633932665F63686B73756D2E63000000000E73633932665F63686B73756D2E6300000000B3A6BE00FFFFFFFF5A453A5CB9A4D7F75CB9A4D7F7CFEEC4BF5C425350B0FC5C5343393246CFB5C1D0CDA8D3C3425350B0FC56302E302E315C4B65696C5F4D6F756C645C46574C69625C53433932465F4C69625C7372635C73633932665F70776D2E63000000000B73633932665F70776D2E6300000000D9ADC200FFFFFFFF5A453A5CB9A4D7F75CB9A4D7F7CFEEC4BF5C425350B0FC5C5343393246CFB5C1D0CDA8D3C3425350B0FC56302E302E315C4B65696C5F4D6F756C645C46574C69625C53433932465F4C69625C7372635C73633932665F7077722E63000000000B73633932665F7077722E6300000000F7B88600FFFFFFFF5B453A5CB9A4D7F75CB9A4D7F7CFEEC4BF5C425350B0FC5C5343393246CFB5C1D0CDA8D3C3425350B0FC56302E302E315C4B65696C5F4D6F756C645C46574C69625C53433932465F4C69625C7372635C73633932665F6770696F2E63000000000C73633932665F6770696F2E6300000000F0A0A100FFFFFFFF5A453A5CB9A4D7F75CB9A4D7F7CFEEC4BF5C425350B0FC5C5343393246CFB5C1D0CDA8D3C3425350B0FC56302E302E315C4B65696C5F4D6F756C645C46574C69625C53433932465F4C69625C7372635C73633932665F6961702E63000000000B73633932665F6961702E6300000000BCA8E100FFFFFFFF56453A5CB9A4D7F75CB9A4D7F7CFEEC4BF5C425350B0FC5C5343393246CFB5C1D0CDA8D3C3425350B0FC56302E302E315C4B45494C5F4D4F554C445C46574C49425C53433932465F4C49425C494E435C53433932462E48000000000753433932462E4800000000C5D4F200FFFFFFFF5C453A5CB9A4D7F75CB9A4D7F7CFEEC4BF5C425350B0FC5C5343393246CFB5C1D0CDA8D3C3425350B0FC56302E302E315C4B65696C5F4D6F756C645C46574C49425C53433932465F4C49425C5352435C53433932465F55415254302E43000000000D53433932465F55415254302E4300000000FFDC7800FFFFFFFF5C453A5CB9A4D7F75CB9A4D7F7CFEEC4BF5C425350B0FC5C5343393246CFB5C1D0CDA8D3C3425350B0FC56302E302E315C4B45494C5F4D4F554C445C46574C49425C53433932465F4C49425C494E435C53433932465F55415254302E48000000000D53433932465F55415254302E4800000000BECEA100FFFFFFFF5A453A5CB9A4D7F75CB9A4D7F7CFEEC4BF5C425350B0FC5C5343393246CFB5C1D0CDA8D3C3425350B0FC56302E302E315C4B65696C5F4D6F756C645C46574C69625C53433932465F4C69625C696E635C73633932665F6961702E68000000000B73633932665F6961702E68000000009CC1B600FFFFFFFF5A453A5CB9A4D7F75CB9A4D7F7CFEEC4BF5C425350B0FC5C5343393246CFB5C1D0CDA8D3C3425350B0FC56302E302E315C4B65696C5F4D6F756C645C46574C69625C53433932465F4C69625C696E635C73633932665F70776D2E68000000000B73633932665F70776D2E6800000000A5C2D700FFFFFFFF0100000010000000C5D4F200FFDC7800BECEA100F0A0A100BCA8E1009CC1B600F7B88600D9ADC200A5C2D700B3A6BE00EAD6A300F6FA7D00B5E99D005FC3CF00C1838300CACAD50001000000000000000200000041010000660000000006000046020000 + + + + 0 + Build + + -1 + -1 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + E70000004F00000070040000BD000000 + + + 16 + 3D010000BC000000C60400002A010000 + + + + 1005 + 1005 + 1 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + 03000000660000003A01000016020000 + + + 16 + 8A000000A10000006D0100005D020000 + + + + 109 + 109 + 1 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + 03000000660000003A01000016020000 + + + 16 + 8A000000A10000006D0100005D020000 + + + + 1465 + 1465 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + 03000000AC0100006D040000FE010000 + + + 16 + 8A000000A1000000C20200000F010000 + + + + 1466 + 1466 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + 03000000AC0100006D040000FE010000 + + + 16 + 8A000000A1000000C20200000F010000 + + + + 1467 + 1467 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + 03000000AC0100006D040000FE010000 + + + 16 + 8A000000A1000000C20200000F010000 + + + + 1468 + 1468 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + 03000000AC0100006D040000FE010000 + + + 16 + 8A000000A1000000C20200000F010000 + + + + 1506 + 1506 + 0 + 0 + 0 + 0 + 32767 + 0 + 16384 + 0 + + 16 + E3020000660000006D0400008C010000 + + + 16 + 8A000000A10000001A02000031020000 + + + + 1913 + 1913 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + EA000000660000006D040000A4000000 + + + 16 + 8A000000A1000000C20200000F010000 + + + + 1935 + 1935 + 0 + 0 + 0 + 0 + 32767 + 0 + 32768 + 0 + + 16 + 03000000AC0100006D040000FE010000 + + + 16 + 8A000000A10000001A02000031020000 + + + + 1936 + 1936 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + 03000000AC0100006D040000FE010000 + + + 16 + 8A000000A10000001A02000031020000 + + + + 1937 + 1937 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + 03000000AC0100006D040000FE010000 + + + 16 + 8A000000A10000001A02000031020000 + + + + 1939 + 1939 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + 03000000AC0100006D040000FE010000 + + + 16 + 8A000000A1000000C20200000F010000 + + + + 1940 + 1940 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + 03000000AC0100006D040000FE010000 + + + 16 + 8A000000A1000000C20200000F010000 + + + + 1941 + 1941 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + 03000000AC0100006D040000FE010000 + + + 16 + 8A000000A1000000C20200000F010000 + + + + 1942 + 1942 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + 03000000AC0100006D040000FE010000 + + + 16 + 8A000000A1000000C20200000F010000 + + + + 195 + 195 + 1 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + 03000000660000003A01000016020000 + + + 16 + 8A000000A10000006D0100005D020000 + + + + 196 + 196 + 1 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + 03000000660000003A01000016020000 + + + 16 + 8A000000A10000006D0100005D020000 + + + + 197 + 197 + 1 + 0 + 0 + 0 + 32767 + 0 + 32768 + 0 + + 16 + 030000004A020000FD050000F5020000 + + + 16 + 8A000000A1000000C20200000F010000 + + + + 198 + 198 + 0 + 0 + 0 + 0 + 32767 + 0 + 32768 + 0 + + 16 + 00000000950100007004000017020000 + + + 16 + 8A000000A1000000C20200000F010000 + + + + 199 + 199 + 1 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + 030000004A020000FD050000F5020000 + + + 16 + 8A000000A1000000C20200000F010000 + + + + 203 + 203 + 0 + 0 + 0 + 0 + 32767 + 0 + 8192 + 0 + + 16 + EA000000660000006D040000A4000000 + + + 16 + 8A000000A1000000C20200000F010000 + + + + 204 + 204 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + EA000000660000006D040000A4000000 + + + 16 + 8A000000A1000000C20200000F010000 + + + + 221 + 221 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + 00000000000000000000000000000000 + + + 16 + 0A0000000A0000006E0000006E000000 + + + + 2506 + 2506 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + E3020000660000006D0400008C010000 + + + 16 + 8A000000A10000001A02000031020000 + + + + 2507 + 2507 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + 03000000AC0100006D040000FE010000 + + + 16 + 8A000000A1000000C20200000F010000 + + + + 343 + 343 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + EA000000660000006D040000A4000000 + + + 16 + 8A000000A1000000C20200000F010000 + + + + 346 + 346 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + EA000000660000006D040000A4000000 + + + 16 + 8A000000A1000000C20200000F010000 + + + + 35824 + 35824 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + EA000000660000006D040000A4000000 + + + 16 + 8A000000A1000000C20200000F010000 + + + + 35885 + 35885 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + E3020000660000006D0400008C010000 + + + 16 + 8A000000A10000001A02000031020000 + + + + 35886 + 35886 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + E3020000660000006D0400008C010000 + + + 16 + 8A000000A10000001A02000031020000 + + + + 35887 + 35887 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + E3020000660000006D0400008C010000 + + + 16 + 8A000000A10000001A02000031020000 + + + + 35888 + 35888 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + E3020000660000006D0400008C010000 + + + 16 + 8A000000A10000001A02000031020000 + + + + 35889 + 35889 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + E3020000660000006D0400008C010000 + + + 16 + 8A000000A10000001A02000031020000 + + + + 35890 + 35890 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + E3020000660000006D0400008C010000 + + + 16 + 8A000000A10000001A02000031020000 + + + + 35891 + 35891 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + E3020000660000006D0400008C010000 + + + 16 + 8A000000A10000001A02000031020000 + + + + 35892 + 35892 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + E3020000660000006D0400008C010000 + + + 16 + 8A000000A10000001A02000031020000 + + + + 35893 + 35893 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + E3020000660000006D0400008C010000 + + + 16 + 8A000000A10000001A02000031020000 + + + + 35894 + 35894 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + E3020000660000006D0400008C010000 + + + 16 + 8A000000A10000001A02000031020000 + + + + 35895 + 35895 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + E3020000660000006D0400008C010000 + + + 16 + 8A000000A10000001A02000031020000 + + + + 35896 + 35896 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + E3020000660000006D0400008C010000 + + + 16 + 8A000000A10000001A02000031020000 + + + + 35897 + 35897 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + E3020000660000006D0400008C010000 + + + 16 + 8A000000A10000001A02000031020000 + + + + 35898 + 35898 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + E3020000660000006D0400008C010000 + + + 16 + 8A000000A10000001A02000031020000 + + + + 35899 + 35899 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + E3020000660000006D0400008C010000 + + + 16 + 8A000000A10000001A02000031020000 + + + + 35900 + 35900 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + E3020000660000006D0400008C010000 + + + 16 + 8A000000A10000001A02000031020000 + + + + 35901 + 35901 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + E3020000660000006D0400008C010000 + + + 16 + 8A000000A10000001A02000031020000 + + + + 35902 + 35902 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + E3020000660000006D0400008C010000 + + + 16 + 8A000000A10000001A02000031020000 + + + + 35903 + 35903 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + E3020000660000006D0400008C010000 + + + 16 + 8A000000A10000001A02000031020000 + + + + 35904 + 35904 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + E3020000660000006D0400008C010000 + + + 16 + 8A000000A10000001A02000031020000 + + + + 35905 + 35905 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + E3020000660000006D0400008C010000 + + + 16 + 8A000000A10000001A02000031020000 + + + + 38003 + 38003 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + 03000000660000003A01000016020000 + + + 16 + 8A000000A10000006D0100005D020000 + + + + 38007 + 38007 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + 030000004A020000FD050000F5020000 + + + 16 + 8A000000A1000000C20200000F010000 + + + + 436 + 436 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + 030000004A020000FD050000F5020000 + + + 16 + 8A000000A10000006D0100005D020000 + + + + 437 + 437 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + 03000000AC0100006D040000FE010000 + + + 16 + 8A000000A10000001A02000031020000 + + + + 440 + 440 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + 03000000AC0100006D040000FE010000 + + + 16 + 8A000000A10000001A02000031020000 + + + + 59392 + 59392 + 1 + 0 + 0 + 0 + 940 + 0 + 8192 + 0 + + 16 + 0000000000000000B70300001C000000 + + + 16 + 0A0000000A0000006E0000006E000000 + + + + 59393 + 0 + 1 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + 000000000E0300000006000021030000 + + + 16 + 0A0000000A0000006E0000006E000000 + + + + 59399 + 59399 + 1 + 0 + 0 + 0 + 439 + 0 + 8192 + 1 + + 16 + 000000001C000000C201000038000000 + + + 16 + 0A0000000A0000006E0000006E000000 + + + + 59400 + 59400 + 0 + 0 + 0 + 0 + 612 + 0 + 8192 + 2 + + 16 + 00000000380000006F02000054000000 + + + 16 + 0A0000000A0000006E0000006E000000 + + + + 2619 + 000000000B000000000000000020000000000000FFFFFFFFFFFFFFFFE7000000BD00000070040000C1000000000000000100000004000000010000000000000000000000FFFFFFFF06000000CB00000057010000CC000000F08B00005A01000079070000FFFF02000B004354616262656450616E6500200000000000003D010000BC000000C60400002A010000E70000004F00000070040000BD0000000000000040280046060000000B446973617373656D626C7900000000CB00000001000000FFFFFFFFFFFFFFFF14506572666F726D616E636520416E616C797A6572000000005701000001000000FFFFFFFFFFFFFFFF14506572666F726D616E636520416E616C797A657200000000CC00000001000000FFFFFFFFFFFFFFFF0E4C6F67696320416E616C797A657200000000F08B000001000000FFFFFFFFFFFFFFFF0D436F646520436F766572616765000000005A01000001000000FFFFFFFFFFFFFFFF11496E737472756374696F6E205472616365000000007907000001000000FFFFFFFFFFFFFFFFFFFFFFFF000000000000000000000000000000000000000001000000FFFFFFFFCB00000001000000FFFFFFFFCB000000000000000040000000000000FFFFFFFFFFFFFFFFDC0200004F000000E0020000A5010000000000000200000004000000010000000000000000000000FFFFFFFF17000000E2050000CA0900002D8C00002E8C00002F8C0000308C0000318C0000328C0000338C0000348C0000358C0000368C0000378C0000388C0000398C00003A8C00003B8C00003C8C00003D8C00003E8C00003F8C0000408C0000418C00000180004000000000000036030000BC000000C604000012020000E00200004F00000070040000A50100000000000040410046170000000753796D626F6C7300000000E205000001000000FFFFFFFFFFFFFFFF0A5472616365204461746100000000CA09000001000000FFFFFFFFFFFFFFFF00000000002D8C000001000000FFFFFFFFFFFFFFFF00000000002E8C000001000000FFFFFFFFFFFFFFFF00000000002F8C000001000000FFFFFFFFFFFFFFFF0000000000308C000001000000FFFFFFFFFFFFFFFF0000000000318C000001000000FFFFFFFFFFFFFFFF0000000000328C000001000000FFFFFFFFFFFFFFFF0000000000338C000001000000FFFFFFFFFFFFFFFF0000000000348C000001000000FFFFFFFFFFFFFFFF0000000000358C000001000000FFFFFFFFFFFFFFFF0000000000368C000001000000FFFFFFFFFFFFFFFF0000000000378C000001000000FFFFFFFFFFFFFFFF0000000000388C000001000000FFFFFFFFFFFFFFFF0000000000398C000001000000FFFFFFFFFFFFFFFF00000000003A8C000001000000FFFFFFFFFFFFFFFF00000000003B8C000001000000FFFFFFFFFFFFFFFF00000000003C8C000001000000FFFFFFFFFFFFFFFF00000000003D8C000001000000FFFFFFFFFFFFFFFF00000000003E8C000001000000FFFFFFFFFFFFFFFF00000000003F8C000001000000FFFFFFFFFFFFFFFF0000000000408C000001000000FFFFFFFFFFFFFFFF0000000000418C000001000000FFFFFFFFFFFFFFFFFFFFFFFF000000000000000000000000000000000000000001000000FFFFFFFFE205000001000000FFFFFFFFE2050000000000000010000001000000FFFFFFFFFFFFFFFF3D0100004F000000410100002F02000001000000020000100400000001000000F6FEFFFFEB040000FFFFFFFF05000000ED0300006D000000C3000000C4000000739400000180001000000100000056000000BC000000930100009C020000000000004F0000003D0100002F0200000000000040140056050000000750726F6A65637401000000ED03000001000000FFFFFFFFFFFFFFFF05426F6F6B73010000006D00000001000000FFFFFFFFFFFFFFFF0946756E6374696F6E7301000000C300000001000000FFFFFFFFFFFFFFFF0954656D706C6174657301000000C400000001000000FFFFFFFFFFFFFFFF09526567697374657273000000007394000001000000FFFFFFFFFFFFFFFF00000000000000000000000000000000000000000000000001000000FFFFFFFFED03000001000000FFFFFFFFED030000000000000080000000000000FFFFFFFFFFFFFFFF0000000091010000700400009501000000000000010000000400000001000000000000000000000000000000000000000000000001000000C6000000FFFFFFFF0E0000008F070000930700009407000095070000960700009007000091070000B5010000B8010000B9050000BA050000BB050000BC050000CB090000018000800000000000005600000002020000C6040000840200000000000095010000700400001702000000000000404100460E0000001343616C6C20537461636B202B204C6F63616C73000000008F07000001000000FFFFFFFFFFFFFFFF0755415254202331000000009307000001000000FFFFFFFFFFFFFFFF0755415254202332000000009407000001000000FFFFFFFFFFFFFFFF0755415254202333000000009507000001000000FFFFFFFFFFFFFFFF15446562756720287072696E74662920566965776572000000009607000001000000FFFFFFFFFFFFFFFF0757617463682031000000009007000001000000FFFFFFFFFFFFFFFF0757617463682032000000009107000001000000FFFFFFFFFFFFFFFF10547261636520457863657074696F6E7300000000B501000001000000FFFFFFFFFFFFFFFF0E4576656E7420436F756E7465727300000000B801000001000000FFFFFFFFFFFFFFFF084D656D6F7279203100000000B905000001000000FFFFFFFFFFFFFFFF084D656D6F7279203200000000BA05000001000000FFFFFFFFFFFFFFFF084D656D6F7279203300000000BB05000001000000FFFFFFFFFFFFFFFF084D656D6F7279203400000000BC05000001000000FFFFFFFFFFFFFFFF105472616365204E617669676174696F6E00000000CB09000001000000FFFFFFFFFFFFFFFFFFFFFFFF0000000001000000000000000000000001000000FFFFFFFF38020000950100003C0200001702000000000000020000000400000000000000000000000000000000000000000000000000000002000000C6000000FFFFFFFF8F07000001000000FFFFFFFF8F07000001000000C6000000000000000080000001000000FFFFFFFFFFFFFFFF000000002F02000000060000330200000100000001000010040000000100000021FEFFFFD5000000FFFFFFFF04000000C5000000C7000000B4010000779400000180008000000100000056000000A0020000560600007B0300000000000033020000000600000E0300000000000040820056040000000C4275696C64204F757470757401000000C500000001000000FFFFFFFFFFFFFFFF0D46696E6420496E2046696C657301000000C700000001000000FFFFFFFFFFFFFFFF0A4572726F72204C69737400000000B401000001000000FFFFFFFFFFFFFFFF0742726F77736572000000007794000001000000FFFFFFFFFFFFFFFF00000000000000000000000000000000000000000000000001000000FFFFFFFFC500000001000000FFFFFFFFC5000000000000000000000000000000 + + + 59392 + File + + 2362 + 00200000010000002800FFFF01001100434D4643546F6F6C426172427574746F6E00E100000000000000000000000000000000000000000000000100000001000000018001E100000000000001000000000000000000000000000000000100000001000000018003E1000000000000020000000000000000000000000000000001000000010000000180CD7F0000000000000300000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF000000000000000000000000000100000001000000018023E100000000040004000000000000000000000000000000000100000001000000018022E100000000040005000000000000000000000000000000000100000001000000018025E10000000000000600000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF00000000000000000000000000010000000100000001802BE10000000000000700000000000000000000000000000000010000000100000001802CE10000000004000800000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF00000000000000000000000000010000000100000001807A8A0000000004000900000000000000000000000000000000010000000100000001807B8A0000000004000A00000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF0000000000000000000000000001000000010000000180D3B00000000000000B000000000000000000000000000000000100000001000000018015B10000000004000C0000000000000000000000000000000001000000010000000180F4B00000000004000D000000000000000000000000000000000100000001000000018036B10000000004000E00000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF0000000000000000000000000001000000010000000180FF88000000000400460000000000000000000000000000000001000000010000000180FE880000000004004500000000000000000000000000000000010000000100000001800B810000000004001300000000000000000000000000000000010000000100000001800C810000000004001400000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF0000000000000000000000000001000000010000000180F0880000020000000F000000000000000000000000000000000100000001000000FFFF0100120043555646696E64436F6D626F427574746F6EE80300000000000000000000000000000000000000000000000100000001000000960000000200205000000000025030960000000000000011000250300F5343445F434F4D5F4269744C6973740C5343445F434F4D5F4C6973740F5343445F5345475F4269744C6973740E5343445F4E545F547970654465660C5343447269766572496E69740F5343445F4E545F536567436F756E740C5343445F4E545F436F756E740A5343445F436F6D4E756D1250574D5F506F6C6172697479436F6E666967095343393546387832782E23696620646566696E6564202873633935663878327829207C7C20646566696E6564202873633935663778327829095343393566387831782E23696620646566696E6564202853433935663878317829207C7C20646566696E656420285343393566377831782902B7E407476F546F4150501D49454336303733305F4350555F5265675F546573745F52756E54696D650000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000018024E10000000000001100000000000000000000000000000000010000000100000001800A810000000000001200000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF000000000000000000000000000100000001000000018022800000020000001500000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF0000000000000000000000000001000000010000000180C488000000000400160000000000000000000000000000000001000000010000000180C988000000000400180000000000000000000000000000000001000000010000000180C788000000000000190000000000000000000000000000000001000000010000000180C8880000000000001700000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF000000000000000000000000000100000001000000FFFF01001500434D4643546F6F6C4261724D656E75427574746F6E4C010000020001001A0000000F50726F6A6563742057696E646F7773000000000000000000000000010000000100000000000000000000000100000008002880DD880000000000001A0000000750726F6A656374000000000000000000000000010000000100000000000000000000000100000000002880DC8B0000000000003A00000005426F6F6B73000000000000000000000000010000000100000000000000000000000100000000002880E18B0000000000003B0000000946756E6374696F6E73000000000000000000000000010000000100000000000000000000000100000000002880E28B000000000000400000000954656D706C6174657300000000000000000000000001000000010000000000000000000000010000000000288018890000000000003D0000000E536F757263652042726F777365720000000000000000000000000100000001000000000000000000000001000000000028800000000000000400FFFFFFFF00000000000000000001000000000000000100000000000000000000000100000000002880D988000000000000390000000C4275696C64204F7574707574000000000000000000000000010000000100000000000000000000000100000000002880E38B000000000000410000000B46696E64204F75747075740000000000000000000000000100000001000000000000000000000001000000000001800000000001000000FFFFFFFF0000000000000000000000000001000000010000000180FB7F0000000000001B000000000000000000000000000000000100000001000000000000000446696C65AC030000 + + + 1423 + 2800FFFF01001100434D4643546F6F6C426172427574746F6E00E1000000000000FFFFFFFF000100000000000000010000000000000001000000018001E1000000000000FFFFFFFF000100000000000000010000000000000001000000018003E1000000000000FFFFFFFF0001000000000000000100000000000000010000000180CD7F000000000000FFFFFFFF00010000000000000001000000000000000100000001800000000000000000FFFFFFFF000000000000000000010000000000000001000000018023E1000000000000FFFFFFFF000100000000000000010000000000000001000000018022E1000000000000FFFFFFFF000100000000000000010000000000000001000000018025E1000000000000FFFFFFFF00010000000000000001000000000000000100000001800000000000000000FFFFFFFF00000000000000000001000000000000000100000001802BE1000000000000FFFFFFFF00010000000000000001000000000000000100000001802CE1000000000000FFFFFFFF00010000000000000001000000000000000100000001800000000000000000FFFFFFFF00000000000000000001000000000000000100000001807A8A000000000000FFFFFFFF00010000000000000001000000000000000100000001807B8A000000000000FFFFFFFF00010000000000000001000000000000000100000001800000000000000000FFFFFFFF0000000000000000000100000000000000010000000180D3B0000000000000FFFFFFFF000100000000000000010000000000000001000000018015B1000000000000FFFFFFFF0001000000000000000100000000000000010000000180F4B0000000000000FFFFFFFF000100000000000000010000000000000001000000018036B1000000000000FFFFFFFF00010000000000000001000000000000000100000001800000000000000000FFFFFFFF0000000000000000000100000000000000010000000180FF88000000000000FFFFFFFF0001000000000000000100000000000000010000000180FE88000000000000FFFFFFFF00010000000000000001000000000000000100000001800B81000000000000FFFFFFFF00010000000000000001000000000000000100000001800C81000000000000FFFFFFFF00010000000000000001000000000000000100000001800000000000000000FFFFFFFF0000000000000000000100000000000000010000000180F088000000000000FFFFFFFF0001000000000000000100000000000000010000000180EE7F000000000000FFFFFFFF000100000000000000010000000000000001000000018024E1000000000000FFFFFFFF00010000000000000001000000000000000100000001800A81000000000000FFFFFFFF00010000000000000001000000000000000100000001800000000000000000FFFFFFFF00000000000000000001000000000000000100000001802280000000000000FFFFFFFF00010000000000000001000000000000000100000001800000000000000000FFFFFFFF0000000000000000000100000000000000010000000180C488000000000000FFFFFFFF0001000000000000000100000000000000010000000180C988000000000000FFFFFFFF0001000000000000000100000000000000010000000180C788000000000000FFFFFFFF0001000000000000000100000000000000010000000180C888000000000000FFFFFFFF00010000000000000001000000000000000100000001800000000000000000FFFFFFFF0000000000000000000100000000000000010000000180DD88000000000000FFFFFFFF00010000000000000001000000000000000100000001800000000000000000FFFFFFFF0000000000000000000100000000000000010000000180FB7F000000000000FFFFFFFF000100000000000000010000000000000001000000 + + + 1423 + 2800FFFF01001100434D4643546F6F6C426172427574746F6E00E100000000000000000000000000000000000000000000000100000001000000018001E100000000000001000000000000000000000000000000000100000001000000018003E1000000000000020000000000000000000000000000000001000000010000000180CD7F0000000000000300000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF000000000000000000000000000100000001000000018023E100000000000004000000000000000000000000000000000100000001000000018022E100000000000005000000000000000000000000000000000100000001000000018025E10000000000000600000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF00000000000000000000000000010000000100000001802BE10000000000000700000000000000000000000000000000010000000100000001802CE10000000000000800000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF00000000000000000000000000010000000100000001807A8A0000000000000900000000000000000000000000000000010000000100000001807B8A0000000000000A00000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF0000000000000000000000000001000000010000000180D3B00000000000000B000000000000000000000000000000000100000001000000018015B10000000000000C0000000000000000000000000000000001000000010000000180F4B00000000000000D000000000000000000000000000000000100000001000000018036B10000000000000E00000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF0000000000000000000000000001000000010000000180FF880000000000000F0000000000000000000000000000000001000000010000000180FE880000000000001000000000000000000000000000000000010000000100000001800B810000000000001100000000000000000000000000000000010000000100000001800C810000000000001200000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF0000000000000000000000000001000000010000000180F088000000000000130000000000000000000000000000000001000000010000000180EE7F00000000000014000000000000000000000000000000000100000001000000018024E10000000000001500000000000000000000000000000000010000000100000001800A810000000000001600000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF000000000000000000000000000100000001000000018022800000000000001700000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF0000000000000000000000000001000000010000000180C488000000000000180000000000000000000000000000000001000000010000000180C988000000000000190000000000000000000000000000000001000000010000000180C7880000000000001A0000000000000000000000000000000001000000010000000180C8880000000000001B00000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF0000000000000000000000000001000000010000000180DD880000000000001C00000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF0000000000000000000000000001000000010000000180FB7F0000000000001D000000000000000000000000000000000100000001000000 + + + + 59399 + Build + + 655 + 00200000010000000F00FFFF01001100434D4643546F6F6C426172427574746F6ECF7F0000000000001C0000000000000000000000000000000001000000010000000180D07F0000000000001D000000000000000000000000000000000100000001000000018030800000000000001E00000000000000000000000000000000010000000100000001809E8A0000000004001F0000000000000000000000000000000001000000010000000180D17F0000000004002000000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF00000000000000000000000000010000000100000001804C8A0000000000002100000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF000000000000000000000000000100000001000000FFFF01001900434D4643546F6F6C426172436F6D626F426F78427574746F6EBA00000000000000000000000000000000000000000000000001000000010000009600000003002050000000000E3C70726F6A656374206E616D653E960000000000000001000E3C70726F6A656374206E616D653E000000000180EB880000000000002200000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF0000000000000000000000000001000000010000000180C07F000000000000230000000000000000000000000000000001000000010000000180B08A000000000400240000000000000000000000000000000001000000010000000180A8010000000004004E0000000000000000000000000000000001000000010000000180BE010000000004005000000000000000000000000000000000010000000100000000000000054275696C64B7010000 + + + 548 + 0F00FFFF01001100434D4643546F6F6C426172427574746F6ECF7F000000000000FFFFFFFF0001000000000000000100000000000000010000000180D07F000000000000FFFFFFFF00010000000000000001000000000000000100000001803080000000000000FFFFFFFF00010000000000000001000000000000000100000001809E8A000000000000FFFFFFFF0001000000000000000100000000000000010000000180D17F000000000000FFFFFFFF00010000000000000001000000000000000100000001800000000000000000FFFFFFFF00000000000000000001000000000000000100000001804C8A000000000000FFFFFFFF00010000000000000001000000000000000100000001800000000000000000FFFFFFFF00000000000000000001000000000000000100000001806680000000000000FFFFFFFF0001000000000000000100000000000000010000000180EB88000000000000FFFFFFFF00010000000000000001000000000000000100000001800000000000000000FFFFFFFF0000000000000000000100000000000000010000000180C07F000000000000FFFFFFFF0001000000000000000100000000000000010000000180B08A000000000000FFFFFFFF0001000000000000000100000000000000010000000180A801000000000000FFFFFFFF0001000000000000000100000000000000010000000180BE01000000000000FFFFFFFF000100000000000000010000000000000001000000 + + + 548 + 0F00FFFF01001100434D4643546F6F6C426172427574746F6ECF7F000000000000000000000000000000000000000000000001000000010000000180D07F00000000000001000000000000000000000000000000000100000001000000018030800000000000000200000000000000000000000000000000010000000100000001809E8A000000000000030000000000000000000000000000000001000000010000000180D17F0000000000000400000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF00000000000000000000000000010000000100000001804C8A0000000000000500000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF00000000000000000000000000010000000100000001806680000000000000060000000000000000000000000000000001000000010000000180EB880000000000000700000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF0000000000000000000000000001000000010000000180C07F000000000000080000000000000000000000000000000001000000010000000180B08A000000000000090000000000000000000000000000000001000000010000000180A8010000000000000A0000000000000000000000000000000001000000010000000180BE010000000000000B000000000000000000000000000000000100000001000000 + + + + 59400 + Debug + + 2220 + 00200000000000001900FFFF01001100434D4643546F6F6C426172427574746F6ECC880000000000002500000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF000000000000000000000000000100000001000000018017800000000000002600000000000000000000000000000000010000000100000001801D800000000000002700000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF00000000000000000000000000010000000100000001801A800000000000002800000000000000000000000000000000010000000100000001801B80000000000000290000000000000000000000000000000001000000010000000180E57F0000000000002A00000000000000000000000000000000010000000100000001801C800000000000002B00000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF000000000000000000000000000100000001000000018000890000000000002C00000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF0000000000000000000000000001000000010000000180E48B0000000000002D0000000000000000000000000000000001000000010000000180F07F0000000000002E0000000000000000000000000000000001000000010000000180E8880000000000003700000000000000000000000000000000010000000100000001803B010000000000002F0000000000000000000000000000000001000000010000000180BB8A00000000000030000000000000000000000000000000000100000001000000FFFF01001500434D4643546F6F6C4261724D656E75427574746F6E0E01000000000000310000000D57617463682057696E646F7773000000000000000000000000010000000100000000000000000000000100000002001380D88B000000000000310000000757617463682031000000000000000000000000010000000100000000000000000000000100000000001380D98B0000000000003100000007576174636820320000000000000000000000000100000001000000000000000000000001000000000013800F01000000000000320000000E4D656D6F72792057696E646F7773000000000000000000000000010000000100000000000000000000000100000004001380D28B00000000000032000000084D656D6F72792031000000000000000000000000010000000100000000000000000000000100000000001380D38B00000000000032000000084D656D6F72792032000000000000000000000000010000000100000000000000000000000100000000001380D48B00000000000032000000084D656D6F72792033000000000000000000000000010000000100000000000000000000000100000000001380D58B00000000000032000000084D656D6F727920340000000000000000000000000100000001000000000000000000000001000000000013801001000000000000330000000E53657269616C2057696E646F77730000000000000000000000000100000001000000000000000000000001000000040013809307000000000000330000000755415254202331000000000000000000000000010000000100000000000000000000000100000000001380940700000000000033000000075541525420233200000000000000000000000001000000010000000000000000000000010000000000138095070000000000003300000007554152542023330000000000000000000000000100000001000000000000000000000001000000000013809607000000000000330000000E49544D2F525441205669657765720000000000000000000000000100000001000000000000000000000001000000000013803C010000000000003400000010416E616C797369732057696E646F7773000000000000000000000000010000000100000000000000000000000100000003001380658A000000000000340000000E4C6F67696320416E616C797A6572000000000000000000000000010000000100000000000000000000000100000000001380DC7F0000000000003E00000014506572666F726D616E636520416E616C797A6572000000000000000000000000010000000100000000000000000000000100000000001380E788000000000000380000000D436F646520436F76657261676500000000000000000000000001000000010000000000000000000000010000000000138053010000000000003F0000000D54726163652057696E646F77730000000000000000000000000100000001000000000000000000000001000000010013805401000000000000FFFFFFFF115472616365204D656E7520416E63686F720000000000000000010000000000000001000000000000000000000001000000000013802901000000000000350000001553797374656D205669657765722057696E646F77730000000000000000000000000100000001000000000000000000000001000000010013804B01000000000000FFFFFFFF1453797374656D2056696577657220416E63686F720000000000000000010000000000000001000000000000000000000001000000000001800000000001000000FFFFFFFF000000000000000000000000000100000001000000138001890000000000003600000007546F6F6C626F7800000000000000000000000001000000010000000000000000000000010000000300138044C5000000000000FFFFFFFF0E5570646174652057696E646F77730000000000000000010000000000000001000000000000000000000001000000000013800000000000000400FFFFFFFF000000000000000000010000000000000001000000000000000000000001000000000013805B01000000000000FFFFFFFF12546F6F6C626F78204D656E75416E63686F72000000000000000001000000000000000100000000000000000000000100000000000000000005446562756764020000 + + + 898 + 1900FFFF01001100434D4643546F6F6C426172427574746F6ECC88000000000000FFFFFFFF00010000000000000001000000000000000100000001800000000000000000FFFFFFFF00000000000000000001000000000000000100000001801780000000000000FFFFFFFF00010000000000000001000000000000000100000001801D80000000000000FFFFFFFF00010000000000000001000000000000000100000001800000000000000000FFFFFFFF00000000000000000001000000000000000100000001801A80000000000000FFFFFFFF00010000000000000001000000000000000100000001801B80000000000000FFFFFFFF0001000000000000000100000000000000010000000180E57F000000000000FFFFFFFF00010000000000000001000000000000000100000001801C80000000000000FFFFFFFF00010000000000000001000000000000000100000001800000000000000000FFFFFFFF00000000000000000001000000000000000100000001800089000000000000FFFFFFFF00010000000000000001000000000000000100000001800000000000000000FFFFFFFF0000000000000000000100000000000000010000000180E48B000000000000FFFFFFFF0001000000000000000100000000000000010000000180F07F000000000000FFFFFFFF0001000000000000000100000000000000010000000180E888000000000000FFFFFFFF00010000000000000001000000000000000100000001803B01000000000000FFFFFFFF0001000000000000000100000000000000010000000180BB8A000000000000FFFFFFFF0001000000000000000100000000000000010000000180D88B000000000000FFFFFFFF0001000000000000000100000000000000010000000180D28B000000000000FFFFFFFF00010000000000000001000000000000000100000001809307000000000000FFFFFFFF0001000000000000000100000000000000010000000180658A000000000000FFFFFFFF0001000000000000000100000000000000010000000180C18A000000000000FFFFFFFF0001000000000000000100000000000000010000000180EE8B000000000000FFFFFFFF00010000000000000001000000000000000100000001800000000000000000FFFFFFFF00000000000000000001000000000000000100000001800189000000000000FFFFFFFF000100000000000000010000000000000001000000 + + + 898 + 1900FFFF01001100434D4643546F6F6C426172427574746F6ECC880000000000000000000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF000000000000000000000000000100000001000000018017800000000000000100000000000000000000000000000000010000000100000001801D800000000000000200000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF00000000000000000000000000010000000100000001801A800000000000000300000000000000000000000000000000010000000100000001801B80000000000000040000000000000000000000000000000001000000010000000180E57F0000000000000500000000000000000000000000000000010000000100000001801C800000000000000600000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF000000000000000000000000000100000001000000018000890000000000000700000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF0000000000000000000000000001000000010000000180E48B000000000000080000000000000000000000000000000001000000010000000180F07F000000000000090000000000000000000000000000000001000000010000000180E8880000000000000A00000000000000000000000000000000010000000100000001803B010000000000000B0000000000000000000000000000000001000000010000000180BB8A0000000000000C0000000000000000000000000000000001000000010000000180D88B0000000000000D0000000000000000000000000000000001000000010000000180D28B0000000000000E000000000000000000000000000000000100000001000000018093070000000000000F0000000000000000000000000000000001000000010000000180658A000000000000100000000000000000000000000000000001000000010000000180C18A000000000000110000000000000000000000000000000001000000010000000180EE8B0000000000001200000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF0000000000000000000000000001000000010000000180018900000000000013000000000000000000000000000000000100000001000000 + + + + 0 + 1536 + 864 + + + + 1 + Debug + + -1 + -1 + 1 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + E70000004F00000000060000BD000000 + + + 16 + E70000006600000000060000D4000000 + + + + 1005 + 1005 + 1 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + 0300000066000000E000000022020000 + + + 16 + 8A000000A10000006D0100005D020000 + + + + 109 + 109 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + 0300000066000000E000000022020000 + + + 16 + 8A000000A10000006D0100005D020000 + + + + 1465 + 1465 + 1 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + 0703000056020000FD050000F5020000 + + + 16 + 8A000000A1000000C20200000F010000 + + + + 1466 + 1466 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + 0703000056020000FD050000F5020000 + + + 16 + 8A000000A1000000C20200000F010000 + + + + 1467 + 1467 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + 0703000056020000FD050000F5020000 + + + 16 + 8A000000A1000000C20200000F010000 + + + + 1468 + 1468 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + 0703000056020000FD050000F5020000 + + + 16 + 8A000000A1000000C20200000F010000 + + + + 1506 + 1506 + 0 + 0 + 0 + 0 + 32767 + 0 + 16384 + 0 + + 16 + E3020000660000006D0400008C010000 + + + 16 + 8A000000A10000001A02000031020000 + + + + 1913 + 1913 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + EA00000066000000FD050000A4000000 + + + 16 + 8A000000A1000000C20200000F010000 + + + + 1935 + 1935 + 1 + 0 + 0 + 0 + 32767 + 0 + 32768 + 0 + + 16 + 0703000056020000FD050000F5020000 + + + 16 + 8A000000A10000001A02000031020000 + + + + 1936 + 1936 + 1 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + 0703000056020000FD050000F5020000 + + + 16 + 8A000000A10000001A02000031020000 + + + + 1937 + 1937 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + 0703000056020000FD050000F5020000 + + + 16 + 8A000000A10000001A02000031020000 + + + + 1939 + 1939 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + 0703000056020000FD050000F5020000 + + + 16 + 8A000000A1000000C20200000F010000 + + + + 1940 + 1940 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + 0703000056020000FD050000F5020000 + + + 16 + 8A000000A1000000C20200000F010000 + + + + 1941 + 1941 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + 0703000056020000FD050000F5020000 + + + 16 + 8A000000A1000000C20200000F010000 + + + + 1942 + 1942 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + 0703000056020000FD050000F5020000 + + + 16 + 8A000000A1000000C20200000F010000 + + + + 195 + 195 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + 0300000066000000E000000022020000 + + + 16 + 8A000000A10000006D0100005D020000 + + + + 196 + 196 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + 0300000066000000E000000022020000 + + + 16 + 8A000000A10000006D0100005D020000 + + + + 197 + 197 + 0 + 0 + 0 + 0 + 32767 + 0 + 32768 + 0 + + 16 + 03000000C00100006D040000FE010000 + + + 16 + 8A000000A1000000C20200000F010000 + + + + 198 + 198 + 1 + 0 + 0 + 0 + 32767 + 0 + 32768 + 0 + + 16 + 000000003F020000000300000E030000 + + + 16 + 8A000000A1000000C20200000F010000 + + + + 199 + 199 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + 03000000C00100006D040000FE010000 + + + 16 + 8A000000A1000000C20200000F010000 + + + + 203 + 203 + 1 + 0 + 0 + 0 + 32767 + 0 + 8192 + 0 + + 16 + E70000006300000000060000BD000000 + + + 16 + 8A000000A1000000C20200000F010000 + + + + 204 + 204 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + EA00000066000000FD050000A4000000 + + + 16 + 8A000000A1000000C20200000F010000 + + + + 221 + 221 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + 00000000000000000000000000000000 + + + 16 + 0A0000000A0000006E0000006E000000 + + + + 2506 + 2506 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + E3020000660000006D0400008C010000 + + + 16 + 8A000000A10000001A02000031020000 + + + + 2507 + 2507 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + 0703000056020000FD050000F5020000 + + + 16 + 8A000000A1000000C20200000F010000 + + + + 343 + 343 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + EA00000066000000FD050000A4000000 + + + 16 + 8A000000A1000000C20200000F010000 + + + + 346 + 346 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + EA00000066000000FD050000A4000000 + + + 16 + 8A000000A1000000C20200000F010000 + + + + 35824 + 35824 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + EA00000066000000FD050000A4000000 + + + 16 + 8A000000A1000000C20200000F010000 + + + + 35885 + 35885 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + E3020000660000006D0400008C010000 + + + 16 + 8A000000A10000001A02000031020000 + + + + 35886 + 35886 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + E3020000660000006D0400008C010000 + + + 16 + 8A000000A10000001A02000031020000 + + + + 35887 + 35887 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + E3020000660000006D0400008C010000 + + + 16 + 8A000000A10000001A02000031020000 + + + + 35888 + 35888 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + E3020000660000006D0400008C010000 + + + 16 + 8A000000A10000001A02000031020000 + + + + 35889 + 35889 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + E3020000660000006D0400008C010000 + + + 16 + 8A000000A10000001A02000031020000 + + + + 35890 + 35890 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + E3020000660000006D0400008C010000 + + + 16 + 8A000000A10000001A02000031020000 + + + + 35891 + 35891 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + E3020000660000006D0400008C010000 + + + 16 + 8A000000A10000001A02000031020000 + + + + 35892 + 35892 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + E3020000660000006D0400008C010000 + + + 16 + 8A000000A10000001A02000031020000 + + + + 35893 + 35893 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + E3020000660000006D0400008C010000 + + + 16 + 8A000000A10000001A02000031020000 + + + + 35894 + 35894 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + E3020000660000006D0400008C010000 + + + 16 + 8A000000A10000001A02000031020000 + + + + 35895 + 35895 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + E3020000660000006D0400008C010000 + + + 16 + 8A000000A10000001A02000031020000 + + + + 35896 + 35896 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + E3020000660000006D0400008C010000 + + + 16 + 8A000000A10000001A02000031020000 + + + + 35897 + 35897 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + E3020000660000006D0400008C010000 + + + 16 + 8A000000A10000001A02000031020000 + + + + 35898 + 35898 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + E3020000660000006D0400008C010000 + + + 16 + 8A000000A10000001A02000031020000 + + + + 35899 + 35899 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + E3020000660000006D0400008C010000 + + + 16 + 8A000000A10000001A02000031020000 + + + + 35900 + 35900 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + E3020000660000006D0400008C010000 + + + 16 + 8A000000A10000001A02000031020000 + + + + 35901 + 35901 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + E3020000660000006D0400008C010000 + + + 16 + 8A000000A10000001A02000031020000 + + + + 35902 + 35902 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + E3020000660000006D0400008C010000 + + + 16 + 8A000000A10000001A02000031020000 + + + + 35903 + 35903 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + E3020000660000006D0400008C010000 + + + 16 + 8A000000A10000001A02000031020000 + + + + 35904 + 35904 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + E3020000660000006D0400008C010000 + + + 16 + 8A000000A10000001A02000031020000 + + + + 35905 + 35905 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + E3020000660000006D0400008C010000 + + + 16 + 8A000000A10000001A02000031020000 + + + + 38003 + 38003 + 1 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + 0300000066000000E000000022020000 + + + 16 + 8A000000A10000006D0100005D020000 + + + + 38007 + 38007 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + 03000000C00100006D040000FE010000 + + + 16 + 8A000000A1000000C20200000F010000 + + + + 436 + 436 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + 03000000C00100006D040000FE010000 + + + 16 + 8A000000A10000006D0100005D020000 + + + + 437 + 437 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + 0703000056020000FD050000F5020000 + + + 16 + 8A000000A10000001A02000031020000 + + + + 440 + 440 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + 0703000056020000FD050000F5020000 + + + 16 + 8A000000A10000001A02000031020000 + + + + 59392 + 59392 + 1 + 0 + 0 + 0 + 940 + 0 + 8192 + 0 + + 16 + 0000000000000000B70300001C000000 + + + 16 + 0A0000000A0000006E0000006E000000 + + + + 59393 + 0 + 1 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + 000000000E0300000006000021030000 + + + 16 + 0A0000000A0000006E0000006E000000 + + + + 59399 + 59399 + 0 + 0 + 0 + 0 + 439 + 0 + 8192 + 1 + + 16 + 000000001C000000C201000038000000 + + + 16 + 0A0000000A0000006E0000006E000000 + + + + 59400 + 59400 + 1 + 0 + 0 + 0 + 612 + 0 + 8192 + 2 + + 16 + 000000001C0000006F02000038000000 + + + 16 + 0A0000000A0000006E0000006E000000 + + + + 2618 + 000000000B000000000000000020000001000000FFFFFFFFFFFFFFFFE7000000BD00000000060000C1000000010000000100001004000000010000000000000000000000FFFFFFFF06000000CB00000057010000CC000000F08B00005A01000079070000FFFF02000B004354616262656450616E650020000001000000E70000006600000000060000D4000000E70000004F00000000060000BD0000000000000040280056060000000B446973617373656D626C7901000000CB00000001000000FFFFFFFFFFFFFFFF14506572666F726D616E636520416E616C797A6572000000005701000001000000FFFFFFFFFFFFFFFF14506572666F726D616E636520416E616C797A657200000000CC00000001000000FFFFFFFFFFFFFFFF0E4C6F67696320416E616C797A657200000000F08B000001000000FFFFFFFFFFFFFFFF0D436F646520436F766572616765000000005A01000001000000FFFFFFFFFFFFFFFF11496E737472756374696F6E205472616365000000007907000001000000FFFFFFFFFFFFFFFF00000000000000000000000000000000000000000000000001000000FFFFFFFFCB00000001000000FFFFFFFFCB000000000000000040000000000000FFFFFFFFFFFFFFFFDC0200004F000000E0020000A5010000000000000200000004000000010000000000000000000000FFFFFFFF17000000E2050000CA0900002D8C00002E8C00002F8C0000308C0000318C0000328C0000338C0000348C0000358C0000368C0000378C0000388C0000398C00003A8C00003B8C00003C8C00003D8C00003E8C00003F8C0000408C0000418C000001800040000000000000E00200006600000070040000BC010000E00200004F00000070040000A50100000000000040410046170000000753796D626F6C7300000000E205000001000000FFFFFFFFFFFFFFFF0A5472616365204461746100000000CA09000001000000FFFFFFFFFFFFFFFF00000000002D8C000001000000FFFFFFFFFFFFFFFF00000000002E8C000001000000FFFFFFFFFFFFFFFF00000000002F8C000001000000FFFFFFFFFFFFFFFF0000000000308C000001000000FFFFFFFFFFFFFFFF0000000000318C000001000000FFFFFFFFFFFFFFFF0000000000328C000001000000FFFFFFFFFFFFFFFF0000000000338C000001000000FFFFFFFFFFFFFFFF0000000000348C000001000000FFFFFFFFFFFFFFFF0000000000358C000001000000FFFFFFFFFFFFFFFF0000000000368C000001000000FFFFFFFFFFFFFFFF0000000000378C000001000000FFFFFFFFFFFFFFFF0000000000388C000001000000FFFFFFFFFFFFFFFF0000000000398C000001000000FFFFFFFFFFFFFFFF00000000003A8C000001000000FFFFFFFFFFFFFFFF00000000003B8C000001000000FFFFFFFFFFFFFFFF00000000003C8C000001000000FFFFFFFFFFFFFFFF00000000003D8C000001000000FFFFFFFFFFFFFFFF00000000003E8C000001000000FFFFFFFFFFFFFFFF00000000003F8C000001000000FFFFFFFFFFFFFFFF0000000000408C000001000000FFFFFFFFFFFFFFFF0000000000418C000001000000FFFFFFFFFFFFFFFFFFFFFFFF000000000000000000000000000000000000000001000000FFFFFFFFE205000001000000FFFFFFFFE2050000000000000010000001000000FFFFFFFFFFFFFFFFE30000004F000000E70000003B020000010000000200001004000000010000000000000000000000FFFFFFFF05000000ED0300006D000000C3000000C400000073940000018000100000010000000000000066000000E300000052020000000000004F000000E30000003B0200000000000040140056050000000750726F6A65637401000000ED03000001000000FFFFFFFFFFFFFFFF05426F6F6B73000000006D00000001000000FFFFFFFFFFFFFFFF0946756E6374696F6E7300000000C300000001000000FFFFFFFFFFFFFFFF0954656D706C6174657300000000C400000001000000FFFFFFFFFFFFFFFF09526567697374657273010000007394000001000000FFFFFFFFFFFFFFFF04000000000000000000000000000000000000000000000001000000FFFFFFFFED03000001000000FFFFFFFFED030000000000000080000001000000FFFFFFFFFFFFFFFF000000003B020000000600003F020000010000000100001004000000010000003EFEFFFF1D00000000000000000000000000000001000000C6000000FFFFFFFF0E0000008F070000930700009407000095070000960700009007000091070000B5010000B8010000B9050000BA050000BB050000BC050000CB0900000180008000000100000004030000560200000006000025030000040300003F020000000600000E03000000000000404100560E0000001343616C6C20537461636B202B204C6F63616C73010000008F07000001000000FFFFFFFFFFFFFFFF0755415254202331000000009307000001000000FFFFFFFFFFFFFFFF0755415254202332000000009407000001000000FFFFFFFFFFFFFFFF0755415254202333000000009507000001000000FFFFFFFFFFFFFFFF15446562756720287072696E74662920566965776572000000009607000001000000FFFFFFFFFFFFFFFF0757617463682031010000009007000001000000FFFFFFFFFFFFFFFF0757617463682032000000009107000001000000FFFFFFFFFFFFFFFF10547261636520457863657074696F6E7300000000B501000001000000FFFFFFFFFFFFFFFF0E4576656E7420436F756E7465727300000000B801000001000000FFFFFFFFFFFFFFFF084D656D6F7279203101000000B905000001000000FFFFFFFFFFFFFFFF084D656D6F7279203200000000BA05000001000000FFFFFFFFFFFFFFFF084D656D6F7279203300000000BB05000001000000FFFFFFFFFFFFFFFF084D656D6F7279203400000000BC05000001000000FFFFFFFFFFFFFFFF105472616365204E617669676174696F6E00000000CB09000001000000FFFFFFFFFFFFFFFF090000000000000001000000000000000100000001000000FFFFFFFF000300003F020000040300000E03000001000000020000100400000000000000000000000000000000000000000000000000000002000000C6000000FFFFFFFF8F07000001000000FFFFFFFF8F07000001000000C6000000000000000080000000000000FFFFFFFFFFFFFFFF00000000A501000070040000A9010000000000000100000004000000010000000000000000000000FFFFFFFF04000000C5000000C7000000B4010000779400000180008000000000000000000000C0010000700400002E02000000000000A901000070040000170200000000000040820046040000000C4275696C64204F757470757400000000C500000001000000FFFFFFFFFFFFFFFF0D46696E6420496E2046696C657300000000C700000001000000FFFFFFFFFFFFFFFF0A4572726F72204C69737400000000B401000001000000FFFFFFFFFFFFFFFF0642726F777365000000007794000001000000FFFFFFFFFFFFFFFFFFFFFFFF000000000000000000000000000000000000000001000000FFFFFFFFC500000001000000FFFFFFFFC5000000000000000000000000000000 + + + 59392 + File + + 2775 + 00200000010000002800FFFF01001100434D4643546F6F6C426172427574746F6E00E100000000000000000000000000000000000000000000000100000001000000018001E100000000000001000000000000000000000000000000000100000001000000018003E1000000000000020000000000000000000000000000000001000000010000000180CD7F0000000000000300000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF000000000000000000000000000100000001000000018023E100000000040004000000000000000000000000000000000100000001000000018022E100000000040005000000000000000000000000000000000100000001000000018025E10000000000000600000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF00000000000000000000000000010000000100000001802BE10000000000000700000000000000000000000000000000010000000100000001802CE10000000004000800000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF00000000000000000000000000010000000100000001807A8A0000000000000900000000000000000000000000000000010000000100000001807B8A0000000004000A00000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF0000000000000000000000000001000000010000000180D3B00000000000000B000000000000000000000000000000000100000001000000018015B10000000004000C0000000000000000000000000000000001000000010000000180F4B00000000004000D000000000000000000000000000000000100000001000000018036B10000000004000E00000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF0000000000000000000000000001000000010000000180FF88000000000400460000000000000000000000000000000001000000010000000180FE880000000004004500000000000000000000000000000000010000000100000001800B810000000004001300000000000000000000000000000000010000000100000001800C810000000004001400000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF0000000000000000000000000001000000010000000180F0880000020000000F000000000000000000000000000000000100000001000000FFFF0100120043555646696E64436F6D626F427574746F6EE803000000000000000000000000000000000000000000000001000000010000009600000002002050000000006023696620646566696E656420285343393246383436784229207C7C20646566696E656420285343393246373436784229207C7C20646566696E656420285343393246383336784229207C7C20646566696E656420285343393246373336784229960000000000000004006023696620646566696E656420285343393246383436784229207C7C20646566696E656420285343393246373436784229207C7C20646566696E656420285343393246383336784229207C7C20646566696E656420285343393246373336784229C023696620646566696E6564202853433932463835347829207C7C20646566696E6564202853433932463735347829207C7C646566696E65642020285343393246383434784229207C7C20646566696E6564202853433932463734347842297C7C646566696E65642020285343393246383441785F3229207C7C20646566696E656420285343393246373441785F32297C7C20646566696E656420285343393246383341785F3229207C7C20646566696E656420285343393246373341785F3229B823696620646566696E6564202853433932463835347829207C7C20646566696E6564202853433932463735347829207C7C646566696E65642020285343393246383434784229207C7C20646566696E6564202853433932463734347842297C7C646566696E656420202853433932463834417829207C7C20646566696E65642028534339324637344178297C7C20646566696E6564202853433932463833417829207C7C20646566696E6564202853433932463733417829B923696620646566696E6564202853433932463835347829207C7C20646566696E6564202853433932463735347829207C7C20646566696E656420285343393246383434784229207C7C20646566696E6564202853433932463734347842297C7C20646566696E6564202853433932463834417829207C7C20646566696E65642028534339324637344178297C7C20646566696E6564202853433932463833417829207C7C20646566696E65642028534339324637334178292000000000000000000000000000000000018024E10000000000001100000000000000000000000000000000010000000100000001800A810000000000001200000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF000000000000000000000000000100000001000000018022800000020003001500000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF0000000000000000000000000001000000010000000180C488000000000000160000000000000000000000000000000001000000010000000180C988000000000400180000000000000000000000000000000001000000010000000180C788000000000000190000000000000000000000000000000001000000010000000180C8880000000000001700000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF000000000000000000000000000100000001000000FFFF01001500434D4643546F6F6C4261724D656E75427574746F6E4C010000020001001A0000000F50726F6A6563742057696E646F7773000000000000000000000000010000000100000000000000000000000100000008002880DD880000000000001A0000000750726F6A656374000000000000000000000000010000000100000000000000000000000100000000002880DC8B0000000000003A00000005426F6F6B73000000000000000000000000010000000100000000000000000000000100000000002880E18B0000000000003B0000000946756E6374696F6E73000000000000000000000000010000000100000000000000000000000100000000002880E28B000000000000400000000954656D706C6174657300000000000000000000000001000000010000000000000000000000010000000000288018890000000000003D0000000E536F757263652042726F777365720000000000000000000000000100000001000000000000000000000001000000000028800000000000000400FFFFFFFF00000000000000000001000000000000000100000000000000000000000100000000002880D988000000000000390000000C4275696C64204F7574707574000000000000000000000000010000000100000000000000000000000100000000002880E38B000000000000410000000B46696E64204F75747075740000000000000000000000000100000001000000000000000000000001000000000001800000000001000000FFFFFFFF0000000000000000000000000001000000010000000180FB7F0000000000001B000000000000000000000000000000000100000001000000000000000446696C65AC030000 + + + 1423 + 2800FFFF01001100434D4643546F6F6C426172427574746F6E00E1000000000000FFFFFFFF000100000000000000010000000000000001000000018001E1000000000000FFFFFFFF000100000000000000010000000000000001000000018003E1000000000000FFFFFFFF0001000000000000000100000000000000010000000180CD7F000000000000FFFFFFFF00010000000000000001000000000000000100000001800000000000000000FFFFFFFF000000000000000000010000000000000001000000018023E1000000000000FFFFFFFF000100000000000000010000000000000001000000018022E1000000000000FFFFFFFF000100000000000000010000000000000001000000018025E1000000000000FFFFFFFF00010000000000000001000000000000000100000001800000000000000000FFFFFFFF00000000000000000001000000000000000100000001802BE1000000000000FFFFFFFF00010000000000000001000000000000000100000001802CE1000000000000FFFFFFFF00010000000000000001000000000000000100000001800000000000000000FFFFFFFF00000000000000000001000000000000000100000001807A8A000000000000FFFFFFFF00010000000000000001000000000000000100000001807B8A000000000000FFFFFFFF00010000000000000001000000000000000100000001800000000000000000FFFFFFFF0000000000000000000100000000000000010000000180D3B0000000000000FFFFFFFF000100000000000000010000000000000001000000018015B1000000000000FFFFFFFF0001000000000000000100000000000000010000000180F4B0000000000000FFFFFFFF000100000000000000010000000000000001000000018036B1000000000000FFFFFFFF00010000000000000001000000000000000100000001800000000000000000FFFFFFFF0000000000000000000100000000000000010000000180FF88000000000000FFFFFFFF0001000000000000000100000000000000010000000180FE88000000000000FFFFFFFF00010000000000000001000000000000000100000001800B81000000000000FFFFFFFF00010000000000000001000000000000000100000001800C81000000000000FFFFFFFF00010000000000000001000000000000000100000001800000000000000000FFFFFFFF0000000000000000000100000000000000010000000180F088000000000000FFFFFFFF0001000000000000000100000000000000010000000180EE7F000000000000FFFFFFFF000100000000000000010000000000000001000000018024E1000000000000FFFFFFFF00010000000000000001000000000000000100000001800A81000000000000FFFFFFFF00010000000000000001000000000000000100000001800000000000000000FFFFFFFF00000000000000000001000000000000000100000001802280000000000000FFFFFFFF00010000000000000001000000000000000100000001800000000000000000FFFFFFFF0000000000000000000100000000000000010000000180C488000000000000FFFFFFFF0001000000000000000100000000000000010000000180C988000000000000FFFFFFFF0001000000000000000100000000000000010000000180C788000000000000FFFFFFFF0001000000000000000100000000000000010000000180C888000000000000FFFFFFFF00010000000000000001000000000000000100000001800000000000000000FFFFFFFF0000000000000000000100000000000000010000000180DD88000000000000FFFFFFFF00010000000000000001000000000000000100000001800000000000000000FFFFFFFF0000000000000000000100000000000000010000000180FB7F000000000000FFFFFFFF000100000000000000010000000000000001000000 + + + 1423 + 2800FFFF01001100434D4643546F6F6C426172427574746F6E00E100000000000000000000000000000000000000000000000100000001000000018001E100000000000001000000000000000000000000000000000100000001000000018003E1000000000000020000000000000000000000000000000001000000010000000180CD7F0000000000000300000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF000000000000000000000000000100000001000000018023E100000000000004000000000000000000000000000000000100000001000000018022E100000000000005000000000000000000000000000000000100000001000000018025E10000000000000600000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF00000000000000000000000000010000000100000001802BE10000000000000700000000000000000000000000000000010000000100000001802CE10000000000000800000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF00000000000000000000000000010000000100000001807A8A0000000000000900000000000000000000000000000000010000000100000001807B8A0000000000000A00000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF0000000000000000000000000001000000010000000180D3B00000000000000B000000000000000000000000000000000100000001000000018015B10000000000000C0000000000000000000000000000000001000000010000000180F4B00000000000000D000000000000000000000000000000000100000001000000018036B10000000000000E00000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF0000000000000000000000000001000000010000000180FF880000000000000F0000000000000000000000000000000001000000010000000180FE880000000000001000000000000000000000000000000000010000000100000001800B810000000000001100000000000000000000000000000000010000000100000001800C810000000000001200000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF0000000000000000000000000001000000010000000180F088000000000000130000000000000000000000000000000001000000010000000180EE7F00000000000014000000000000000000000000000000000100000001000000018024E10000000000001500000000000000000000000000000000010000000100000001800A810000000000001600000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF000000000000000000000000000100000001000000018022800000000000001700000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF0000000000000000000000000001000000010000000180C488000000000000180000000000000000000000000000000001000000010000000180C988000000000000190000000000000000000000000000000001000000010000000180C7880000000000001A0000000000000000000000000000000001000000010000000180C8880000000000001B00000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF0000000000000000000000000001000000010000000180DD880000000000001C00000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF0000000000000000000000000001000000010000000180FB7F0000000000001D000000000000000000000000000000000100000001000000 + + + + 59399 + Build + + 622 + 00200000000000000F00FFFF01001100434D4643546F6F6C426172427574746F6ECF7F0000000000001C0000000000000000000000000000000001000000010000000180D07F0000000000001D000000000000000000000000000000000100000001000000018030800000000000001E00000000000000000000000000000000010000000100000001809E8A0000000000001F0000000000000000000000000000000001000000010000000180D17F0000000000002000000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF00000000000000000000000000010000000100000001804C8A0000000000002100000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF000000000000000000000000000100000001000000FFFF01001900434D4643546F6F6C426172436F6D626F426F78427574746F6EBA00000000000000000000000000000000000000000000000001000000010000009600000003002050FFFFFFFF00960000000000000000000180EB880000000000002200000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF0000000000000000000000000001000000010000000180C07F000000000000230000000000000000000000000000000001000000010000000180B08A000000000000240000000000000000000000000000000001000000010000000180A8010000000000004E0000000000000000000000000000000001000000010000000180BE010000000000005000000000000000000000000000000000010000000100000000000000054275696C64B7010000 + + + 548 + 0F00FFFF01001100434D4643546F6F6C426172427574746F6ECF7F000000000000FFFFFFFF0001000000000000000100000000000000010000000180D07F000000000000FFFFFFFF00010000000000000001000000000000000100000001803080000000000000FFFFFFFF00010000000000000001000000000000000100000001809E8A000000000000FFFFFFFF0001000000000000000100000000000000010000000180D17F000000000000FFFFFFFF00010000000000000001000000000000000100000001800000000000000000FFFFFFFF00000000000000000001000000000000000100000001804C8A000000000000FFFFFFFF00010000000000000001000000000000000100000001800000000000000000FFFFFFFF00000000000000000001000000000000000100000001806680000000000000FFFFFFFF0001000000000000000100000000000000010000000180EB88000000000000FFFFFFFF00010000000000000001000000000000000100000001800000000000000000FFFFFFFF0000000000000000000100000000000000010000000180C07F000000000000FFFFFFFF0001000000000000000100000000000000010000000180B08A000000000000FFFFFFFF0001000000000000000100000000000000010000000180A801000000000000FFFFFFFF0001000000000000000100000000000000010000000180BE01000000000000FFFFFFFF000100000000000000010000000000000001000000 + + + 548 + 0F00FFFF01001100434D4643546F6F6C426172427574746F6ECF7F000000000000000000000000000000000000000000000001000000010000000180D07F00000000000001000000000000000000000000000000000100000001000000018030800000000000000200000000000000000000000000000000010000000100000001809E8A000000000000030000000000000000000000000000000001000000010000000180D17F0000000000000400000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF00000000000000000000000000010000000100000001804C8A0000000000000500000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF00000000000000000000000000010000000100000001806680000000000000060000000000000000000000000000000001000000010000000180EB880000000000000700000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF0000000000000000000000000001000000010000000180C07F000000000000080000000000000000000000000000000001000000010000000180B08A000000000000090000000000000000000000000000000001000000010000000180A8010000000000000A0000000000000000000000000000000001000000010000000180BE010000000000000B000000000000000000000000000000000100000001000000 + + + + 59400 + Debug + + 2220 + 00200000010000001900FFFF01001100434D4643546F6F6C426172427574746F6ECC880000000000002500000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF000000000000000000000000000100000001000000018017800000000000002600000000000000000000000000000000010000000100000001801D800000000004002700000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF00000000000000000000000000010000000100000001801A800000000000002800000000000000000000000000000000010000000100000001801B80000000000000290000000000000000000000000000000001000000010000000180E57F0000000004002A00000000000000000000000000000000010000000100000001801C800000000000002B00000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF000000000000000000000000000100000001000000018000890000000000002C00000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF0000000000000000000000000001000000010000000180E48B0000020001002D0000000000000000000000000000000001000000010000000180F07F0000020001002E0000000000000000000000000000000001000000010000000180E8880000020000003700000000000000000000000000000000010000000100000001803B010000020001002F0000000000000000000000000000000001000000010000000180BB8A00000200010030000000000000000000000000000000000100000001000000FFFF01001500434D4643546F6F6C4261724D656E75427574746F6E0E01000002000100310000000D57617463682057696E646F7773000000000000000000000000010000000100000000000000000000000100000002001380D88B000000000000310000000757617463682031000000000000000000000000010000000100000000000000000000000100000000001380D98B0000000000003100000007576174636820320000000000000000000000000100000001000000000000000000000001000000000013800F01000002000100320000000E4D656D6F72792057696E646F7773000000000000000000000000010000000100000000000000000000000100000004001380D28B00000000000032000000084D656D6F72792031000000000000000000000000010000000100000000000000000000000100000000001380D38B00000000000032000000084D656D6F72792032000000000000000000000000010000000100000000000000000000000100000000001380D48B00000000000032000000084D656D6F72792033000000000000000000000000010000000100000000000000000000000100000000001380D58B00000000000032000000084D656D6F727920340000000000000000000000000100000001000000000000000000000001000000000013801001000002000000330000000E53657269616C2057696E646F77730000000000000000000000000100000001000000000000000000000001000000040013809307000000000000330000000755415254202331000000000000000000000000010000000100000000000000000000000100000000001380940700000000000033000000075541525420233200000000000000000000000001000000010000000000000000000000010000000000138095070000000000003300000007554152542023330000000000000000000000000100000001000000000000000000000001000000000013809607000000000000330000000E49544D2F525441205669657765720000000000000000000000000100000001000000000000000000000001000000000013803C010000020000003400000010416E616C797369732057696E646F7773000000000000000000000000010000000100000000000000000000000100000003001380658A000000000000340000000E4C6F67696320416E616C797A6572000000000000000000000000010000000100000000000000000000000100000000001380DC7F0000000000003E00000014506572666F726D616E636520416E616C797A6572000000000000000000000000010000000100000000000000000000000100000000001380E788000000000000380000000D436F646520436F76657261676500000000000000000000000001000000010000000000000000000000010000000000138053010000000000003F0000000D54726163652057696E646F77730000000000000000000000000100000001000000000000000000000001000000010013805401000000000000FFFFFFFF115472616365204D656E7520416E63686F720100000000000000010000000000000001000000000000000000000001000000000013802901000000000000350000001553797374656D205669657765722057696E646F77730000000000000000000000000100000001000000000000000000000001000000010013804B01000000000000FFFFFFFF1453797374656D2056696577657220416E63686F720100000000000000010000000000000001000000000000000000000001000000000001800000000001000000FFFFFFFF000000000000000000000000000100000001000000138001890000020000003600000007546F6F6C626F7800000000000000000000000001000000010000000000000000000000010000000300138044C5000000000000FFFFFFFF0E5570646174652057696E646F77730100000000000000010000000000000001000000000000000000000001000000000013800000000000000400FFFFFFFF000000000000000000010000000000000001000000000000000000000001000000000013805B01000000000000FFFFFFFF12546F6F6C626F78204D656E75416E63686F72010000000000000001000000000000000100000000000000000000000100000000000000000005446562756764020000 + + + 898 + 1900FFFF01001100434D4643546F6F6C426172427574746F6ECC88000000000000FFFFFFFF00010000000000000001000000000000000100000001800000000000000000FFFFFFFF00000000000000000001000000000000000100000001801780000000000000FFFFFFFF00010000000000000001000000000000000100000001801D80000000000000FFFFFFFF00010000000000000001000000000000000100000001800000000000000000FFFFFFFF00000000000000000001000000000000000100000001801A80000000000000FFFFFFFF00010000000000000001000000000000000100000001801B80000000000000FFFFFFFF0001000000000000000100000000000000010000000180E57F000000000000FFFFFFFF00010000000000000001000000000000000100000001801C80000000000000FFFFFFFF00010000000000000001000000000000000100000001800000000000000000FFFFFFFF00000000000000000001000000000000000100000001800089000000000000FFFFFFFF00010000000000000001000000000000000100000001800000000000000000FFFFFFFF0000000000000000000100000000000000010000000180E48B000000000000FFFFFFFF0001000000000000000100000000000000010000000180F07F000000000000FFFFFFFF0001000000000000000100000000000000010000000180E888000000000000FFFFFFFF00010000000000000001000000000000000100000001803B01000000000000FFFFFFFF0001000000000000000100000000000000010000000180BB8A000000000000FFFFFFFF0001000000000000000100000000000000010000000180D88B000000000000FFFFFFFF0001000000000000000100000000000000010000000180D28B000000000000FFFFFFFF00010000000000000001000000000000000100000001809307000000000000FFFFFFFF0001000000000000000100000000000000010000000180658A000000000000FFFFFFFF0001000000000000000100000000000000010000000180C18A000000000000FFFFFFFF0001000000000000000100000000000000010000000180EE8B000000000000FFFFFFFF00010000000000000001000000000000000100000001800000000000000000FFFFFFFF00000000000000000001000000000000000100000001800189000000000000FFFFFFFF000100000000000000010000000000000001000000 + + + 898 + 1900FFFF01001100434D4643546F6F6C426172427574746F6ECC880000000000000000000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF000000000000000000000000000100000001000000018017800000000000000100000000000000000000000000000000010000000100000001801D800000000000000200000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF00000000000000000000000000010000000100000001801A800000000000000300000000000000000000000000000000010000000100000001801B80000000000000040000000000000000000000000000000001000000010000000180E57F0000000000000500000000000000000000000000000000010000000100000001801C800000000000000600000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF000000000000000000000000000100000001000000018000890000000000000700000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF0000000000000000000000000001000000010000000180E48B000000000000080000000000000000000000000000000001000000010000000180F07F000000000000090000000000000000000000000000000001000000010000000180E8880000000000000A00000000000000000000000000000000010000000100000001803B010000000000000B0000000000000000000000000000000001000000010000000180BB8A0000000000000C0000000000000000000000000000000001000000010000000180D88B0000000000000D0000000000000000000000000000000001000000010000000180D28B0000000000000E000000000000000000000000000000000100000001000000018093070000000000000F0000000000000000000000000000000001000000010000000180658A000000000000100000000000000000000000000000000001000000010000000180C18A000000000000110000000000000000000000000000000001000000010000000180EE8B0000000000001200000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF0000000000000000000000000001000000010000000180018900000000000013000000000000000000000000000000000100000001000000 + + + + 0 + 1536 + 864 + + + + + + + E:\宸ヤ綔\宸ヤ綔椤圭洰\BSP鍖匼SC92F绯诲垪閫氱敤BSP鍖匳0.0.1\KEIL_MOULD\FWLIB\SC92F_LIB\INC\SC92F_UART0.H + 0 + 3 + 9 + + + E:\宸ヤ綔\宸ヤ綔椤圭洰\BSP鍖匼SC92F绯诲垪閫氱敤BSP鍖匳0.0.1\Keil_Mould\FWLIB\SC92F_LIB\SRC\SC92F_UART0.C + 0 + 1 + 9 + + + E:\宸ヤ綔\宸ヤ綔椤圭洰\BSP鍖匼SC92F绯诲垪閫氱敤BSP鍖匳0.0.1\KEIL_MOULD\FWLIB\SC92F_LIB\INC\SC92F.H + 0 + 1 + 9 + + + E:\宸ヤ綔\宸ヤ綔椤圭洰\BSP鍖匼SC92F绯诲垪閫氱敤BSP鍖匳0.0.1\Keil_Mould\FWLib\SC92F_Lib\src\sc92f_iap.c + 0 + 1 + 9 + + + E:\宸ヤ綔\宸ヤ綔椤圭洰\BSP鍖匼SC92F绯诲垪閫氱敤BSP鍖匳0.0.1\Keil_Mould\FWLib\SC92F_Lib\inc\sc92f_iap.h + 0 + 1 + 9 + + + E:\宸ヤ綔\宸ヤ綔椤圭洰\BSP鍖匼SC92F绯诲垪閫氱敤BSP鍖匳0.0.1\Keil_Mould\FWLib\SC92F_Lib\src\sc92f_pwr.c + 0 + 1 + 9 + + + E:\宸ヤ綔\宸ヤ綔椤圭洰\BSP鍖匼SC92F绯诲垪閫氱敤BSP鍖匳0.0.1\Keil_Mould\FWLib\SC92F_Lib\src\sc92f_pwm.c + 0 + 1 + 12 + + + E:\宸ヤ綔\宸ヤ綔椤圭洰\BSP鍖匼SC92F绯诲垪閫氱敤BSP鍖匳0.0.1\Keil_Mould\FWLib\SC92F_Lib\inc\sc92f_pwm.h + 0 + 121 + 132 + + + E:\宸ヤ綔\宸ヤ綔椤圭洰\BSP鍖匼SC92F绯诲垪閫氱敤BSP鍖匳0.0.1\Keil_Mould\FWLib\SC92F_Lib\src\sc92f_chksum.c + 0 + 22 + 31 + + + + + 1 + 0 + + 100 + 0 + + E:\宸ヤ綔\宸ヤ綔椤圭洰\BSP鍖匼SC92F绯诲垪閫氱敤BSP鍖匳0.0.1\Keil_Mould\FWLib\SC92F_Lib\src\sc92f_chksum.c + 10 + 22 + 31 + 1 + + 0 + + + E:\宸ヤ綔\宸ヤ綔椤圭洰\BSP鍖匼SC92F绯诲垪閫氱敤BSP鍖匳0.0.1\Keil_Mould\FWLib\SC92F_Lib\src\sc92f_pwm.c + 17 + 1 + 12 + 1 + + 0 + + + E:\宸ヤ綔\宸ヤ綔椤圭洰\BSP鍖匼SC92F绯诲垪閫氱敤BSP鍖匳0.0.1\Keil_Mould\FWLib\SC92F_Lib\src\sc92f_pwr.c + 33 + 1 + 9 + 1 + + 0 + + + ..\FWLib\SC92F_Lib\src\sc92f_gpio.c + 34 + 19 + 9 + 1 + + 0 + + + E:\宸ヤ綔\宸ヤ綔椤圭洰\BSP鍖匼SC92F绯诲垪閫氱敤BSP鍖匳0.0.1\Keil_Mould\FWLib\SC92F_Lib\src\sc92f_iap.c + 33 + 1 + 9 + 1 + + 0 + + + \宸ヤ綔\宸ヤ綔椤圭洰\BSP鍖匼SC92F绯诲垪閫氱敤BSP鍖匳0.0.1\KEIL_MOULD\FWLIB\SC92F_LIB\INC\SC92F.H + 33 + 1 + 9 + 1 + + 0 + + + E:\宸ヤ綔\宸ヤ綔椤圭洰\BSP鍖匼SC92F绯诲垪閫氱敤BSP鍖匳0.0.1\Keil_Mould\FWLIB\SC92F_LIB\SRC\SC92F_UART0.C + 33 + 1 + 9 + 1 + + 0 + + + \宸ヤ綔\宸ヤ綔椤圭洰\BSP鍖匼SC92F绯诲垪閫氱敤BSP鍖匳0.0.1\KEIL_MOULD\FWLIB\SC92F_LIB\INC\SC92F_UART0.H + 33 + 3 + 9 + 1 + + 0 + + + \宸ヤ綔\宸ヤ綔椤圭洰\BSP鍖匼SC92F绯诲垪閫氱敤BSP鍖匳0.0.1\KEIL_MOULD\FWLIB\SC92F_LIB\INC\SC92F_IAP.H + 33 + 1 + 9 + 1 + + 0 + + + \宸ヤ綔\宸ヤ綔椤圭洰\BSP鍖匼SC92F绯诲垪閫氱敤BSP鍖匳0.0.1\KEIL_MOULD\FWLIB\SC92F_LIB\INC\SC92F_PWM.H + 370 + 121 + 132 + 1 + + 0 + + + + +
diff --git a/CFG/SC92F8363B/Keil_Mould/Project/project name.uvopt b/CFG/SC92F8363B/Keil_Mould/Project/project name.uvopt new file mode 100644 index 0000000..a9c14e2 --- /dev/null +++ b/CFG/SC92F8363B/Keil_Mould/Project/project name.uvopt @@ -0,0 +1,1683 @@ + + + + 1.0 + +
### uVision Project, (C) Keil Software
+ + + *.c + *.s*; *.src; *.a* + *.obj + *.lib + *.txt; *.h; *.inc; *.md + *.plm + *.cpp + + + + 0 + 0 + + + + <project name> + 0x0 + MCS-51 + + 16000000 + + 1 + 1 + 1 + 0 + + + 0 + 65535 + 0 + 0 + 0 + + + 120 + 65 + 8 + ..\List\ + + + 1 + 1 + 1 + 0 + 1 + 1 + 0 + 1 + 0 + 0 + 0 + 0 + + + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 0 + + + 1 + 0 + 1 + + 0 + + S8051.DLL + + DP51.DLL + -p51 + S8051.DLL + + TP51.DLL + -p51 + + + 1 + 0 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 1 + 1 + 1 + 0 + 1 + 0 + 0 + 9 + + + + + + + + + + + SinOne_Chip\SOC_Debug_Driver\SinOne_Chip_Debug_Driver.dll + + + + 0 + DLGDP51 + (98=-1,-1,-1,-1,0)(82=-1,-1,-1,-1,0)(83=-1,-1,-1,-1,0)(84=-1,-1,-1,-1,0)(85=-1,-1,-1,-1,0)(80=-1,-1,-1,-1,0)(91=-1,-1,-1,-1,0)(92=-1,-1,-1,-1,0) + + + 0 + DLGTP51 + (98=-1,-1,-1,-1,0)(82=-1,-1,-1,-1,0)(83=-1,-1,-1,-1,0)(84=-1,-1,-1,-1,0)(85=-1,-1,-1,-1,0)(80=-1,-1,-1,-1,0)(91=-1,-1,-1,-1,0)(92=-1,-1,-1,-1,0) + + + 0 + SinOne_Chip_Debug_Driver + + + + + + 0 + 0 + 20 + 1 +
-16776800
+ 0 + 0 + 0 + 0 + 1 + D:\project\test\tag\1216-20220525\SOCCodeGenerator\bin\Debug\CFG\SDK\92F\Keil_Mould\Project\User\main.c + + +
+
+ + + 0 + 1 + test + + + + + 1 + 0 + D:0 + + + + 0 + 0 + 1 + 0 + 0 + 0 + 0 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + + + +
+
+ + + User + 1 + 0 + 0 + + 1 + 1 + 1 + 0 + 0 + 16793171 + 0 + 0 + 0 + 0 + ..\User\main.c + main.c + + + 1 + 2 + 1 + 0 + 0 + 16793171 + 0 + 0 + 0 + 0 + ..\User\SC_Init.c + SC_Init.c + + + 1 + 3 + 1 + 0 + 0 + 16793171 + 0 + 0 + 0 + 0 + ..\User\SC_it.c + SC_it.c + + + 1 + 4 + 1 + 0 + 0 + 16793171 + 0 + 0 + 0 + 0 + ..\User\SysFunVarDefine.c + SysFunVarDefine.c + + + 1 + 5 + 1 + 0 + 0 + 16793171 + 0 + 0 + 0 + 0 + ..\User\CompCtrlDefine.c + CompCtrlDefine.c + + + + + Apps + 0 + 0 + 0 + + + + Drivers + 1 + 0 + 0 + + + + FWLib + 1 + 0 + 0 + + 4 + 6 + 1 + 0 + 0 + 16793171 + 0 + 0 + 0 + 0 + ..\FWLib\SC92F_Lib\src\sc92f_gpio.c + sc92f_gpio.c + + + 4 + 7 + 1 + 0 + 0 + 16793171 + 0 + 0 + 0 + 0 + ..\FWLib\SC92F_Lib\src\sc92f_option.c + sc92f_option.c + + + + + Startup + 1 + 0 + 0 + + 5 + 8 + 2 + 0 + 0 + 16793171 + 0 + 0 + 0 + 0 + .\STARTUP.A51 + STARTUP.A51 + + + + + Default + 1 + Build + 0 + + Default + 1 + + 59392 + 1 + File + 0 + + 0 + + 1 + 2 + 3 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 100 + 0 + 1 + 0 + + + 59398 + 2 + Build + 0 + + 0 + + 1 + 2 + 3 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 100 + 0 + 0 + 0 + + + 59399 + 3 + Debug + 0 + + 0 + + 1 + 2 + 3 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 100 + 0 + 1 + 0 + + + 197 + 4 + Build Output + 0 + + 0 + + 1 + 2 + 4 + 0 + 0 + 0 + 210 + 600 + 0 + 0 + 250 + 600 + 100 + 1 + 0 + 0 + + + 198 + 5 + Command + 197 + + 197 + + 1 + 4 + 2 + 0 + 0 + 0 + 210 + 600 + 0 + 0 + 250 + 600 + 100 + 1 + 1 + 0 + + + 199 + 6 + Find in Files + 197 + + 197 + + 1 + 4 + 2 + 0 + 0 + 0 + 210 + 600 + 0 + 0 + 250 + 600 + 100 + 0 + 0 + 0 + + + 38007 + 7 + Browse + 197 + + 197 + + 1 + 4 + 2 + 0 + 0 + 0 + 210 + 600 + 0 + 0 + 250 + 600 + 100 + 0 + 0 + 0 + + + 1939 + 8 + UART #1 + 197 + + 197 + + 1 + 4 + 2 + 0 + 0 + 0 + 210 + 600 + 0 + 0 + 250 + 600 + 100 + 0 + 0 + 0 + + + 1940 + 9 + UART #2 + 197 + + 197 + + 1 + 4 + 2 + 0 + 0 + 0 + 210 + 600 + 0 + 0 + 250 + 600 + 100 + 0 + 0 + 0 + + + 1941 + 10 + UART #3 + 197 + + 197 + + 1 + 4 + 2 + 0 + 0 + 0 + 210 + 600 + 0 + 0 + 250 + 600 + 100 + 0 + 0 + 0 + + + 1942 + 11 + UART #4 + 197 + + 197 + + 1 + 4 + 2 + 0 + 0 + 0 + 210 + 600 + 0 + 0 + 250 + 600 + 100 + 0 + 0 + 0 + + + 1944 + 12 + Call Stack + 197 + + 197 + + 1 + 2 + 2 + 0 + 0 + 0 + 600 + 210 + 0 + 0 + 600 + 250 + 50 + 0 + 1 + 0 + + + 1507 + 13 + Call Stack + 1944 + + 197 + + 1 + 4 + 2 + 0 + 0 + 0 + 600 + 210 + 0 + 0 + 600 + 250 + 50 + 0 + 1 + 0 + + + 1935 + 14 + Locals + 1944 + + 197 + + 1 + 4 + 2 + 0 + 0 + 0 + 210 + 600 + 0 + 0 + 250 + 600 + 100 + 0 + 1 + 0 + + + 1936 + 15 + Watch 1 + 1944 + + 197 + + 1 + 4 + 2 + 0 + 0 + 0 + 210 + 600 + 0 + 0 + 250 + 600 + 100 + 0 + 1 + 0 + + + 1937 + 16 + Watch 2 + 1944 + + 197 + + 1 + 4 + 2 + 0 + 0 + 0 + 210 + 600 + 0 + 0 + 250 + 600 + 100 + 0 + 0 + 0 + + + 1465 + 17 + Memory 1 + 1944 + + 197 + + 1 + 4 + 2 + 0 + 0 + 0 + 210 + 600 + 0 + 0 + 250 + 600 + 100 + 0 + 1 + 0 + + + 1466 + 18 + Memory 2 + 1944 + + 197 + + 1 + 4 + 2 + 0 + 0 + 0 + 210 + 600 + 0 + 0 + 250 + 600 + 100 + 0 + 0 + 0 + + + 1467 + 19 + Memory 3 + 1944 + + 197 + + 1 + 4 + 2 + 0 + 0 + 0 + 210 + 600 + 0 + 0 + 250 + 600 + 100 + 0 + 0 + 0 + + + 1468 + 20 + Memory 4 + 1944 + + 197 + + 1 + 4 + 2 + 0 + 0 + 0 + 210 + 600 + 0 + 0 + 250 + 600 + 100 + 0 + 0 + 0 + + + 1506 + 21 + Symbols + 1944 + + 197 + + 1 + 4 + 2 + 0 + 0 + 0 + 210 + 600 + 0 + 0 + 250 + 600 + 100 + 0 + 1 + 0 + + + 1005 + 22 + Project + 0 + + 0 + + 1 + 2 + 1 + 0 + 0 + 0 + 600 + 210 + 0 + 0 + 600 + 250 + 100 + 0 + 1 + 0 + + + 109 + 23 + Books + 1005 + + 1005 + + 1 + 4 + 2 + 0 + 0 + 0 + 600 + 210 + 0 + 0 + 600 + 250 + 100 + 0 + 0 + 0 + + + 195 + 24 + Functions + 1005 + + 1005 + + 1 + 4 + 2 + 0 + 0 + 0 + 600 + 210 + 0 + 0 + 600 + 250 + 100 + 0 + 0 + 0 + + + 196 + 25 + Templates + 1005 + + 1005 + + 1 + 4 + 2 + 0 + 0 + 0 + 600 + 210 + 0 + 0 + 600 + 250 + 100 + 0 + 0 + 0 + + + 38003 + 26 + Registers + 1005 + + 1005 + + 1 + 4 + 2 + 0 + 0 + 0 + 600 + 210 + 0 + 0 + 600 + 250 + 100 + 1 + 1 + 0 + + + 35885 + 27 + not set + 0 + + 0 + + 1 + 2 + 2 + 0 + 0 + 0 + 600 + 210 + 0 + 0 + 600 + 250 + 100 + 0 + 0 + 0 + + + 35886 + 28 + not set + 35885 + + 35885 + + 1 + 4 + 2 + 0 + 0 + 0 + 600 + 210 + 0 + 0 + 600 + 250 + 100 + 0 + 0 + 0 + + + 35887 + 29 + not set + 35885 + + 35885 + + 1 + 4 + 2 + 0 + 0 + 0 + 600 + 210 + 0 + 0 + 600 + 250 + 100 + 0 + 0 + 0 + + + 35888 + 30 + not set + 35885 + + 35885 + + 1 + 4 + 2 + 0 + 0 + 0 + 600 + 210 + 0 + 0 + 600 + 250 + 100 + 0 + 0 + 0 + + + 35889 + 31 + not set + 35885 + + 35885 + + 1 + 4 + 2 + 0 + 0 + 0 + 600 + 210 + 0 + 0 + 600 + 250 + 100 + 0 + 0 + 0 + + + 35890 + 32 + not set + 35885 + + 35885 + + 1 + 4 + 2 + 0 + 0 + 0 + 600 + 210 + 0 + 0 + 600 + 250 + 100 + 0 + 0 + 0 + + + 35891 + 33 + not set + 35885 + + 35885 + + 1 + 4 + 2 + 0 + 0 + 0 + 600 + 210 + 0 + 0 + 600 + 250 + 100 + 0 + 0 + 0 + + + 35892 + 34 + not set + 35885 + + 35885 + + 1 + 4 + 2 + 0 + 0 + 0 + 600 + 210 + 0 + 0 + 600 + 250 + 100 + 0 + 0 + 0 + + + 35893 + 35 + not set + 35885 + + 35885 + + 1 + 4 + 2 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 100 + 0 + 0 + 0 + + + 35894 + 36 + not set + 35885 + + 35885 + + 1 + 4 + 2 + 0 + 0 + 0 + 600 + 210 + 0 + 0 + 600 + 250 + 100 + 0 + 0 + 0 + + + 35895 + 37 + not set + 35885 + + 35885 + + 1 + 4 + 2 + 0 + 0 + 0 + 600 + 210 + 0 + 0 + 600 + 250 + 100 + 0 + 0 + 0 + + + 35896 + 38 + not set + 35885 + + 35885 + + 1 + 4 + 2 + 0 + 0 + 0 + 600 + 210 + 0 + 0 + 600 + 250 + 100 + 0 + 0 + 0 + + + 35897 + 39 + not set + 35885 + + 35885 + + 1 + 4 + 2 + 0 + 0 + 0 + 600 + 210 + 0 + 0 + 600 + 250 + 100 + 0 + 0 + 0 + + + 35898 + 40 + not set + 35885 + + 35885 + + 1 + 4 + 2 + 0 + 0 + 0 + 600 + 210 + 0 + 0 + 600 + 250 + 100 + 0 + 0 + 0 + + + 35899 + 41 + not set + 35885 + + 35885 + + 1 + 4 + 5 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 100 + 0 + 0 + 0 + + + 35900 + 42 + not set + 35885 + + 35885 + + 1 + 4 + 2 + 0 + 0 + 0 + 600 + 210 + 0 + 0 + 600 + 250 + 100 + 0 + 0 + 0 + + + 35901 + 43 + not set + 35885 + + 35885 + + 1 + 4 + 2 + 0 + 0 + 0 + 600 + 210 + 0 + 0 + 600 + 250 + 100 + 0 + 0 + 0 + + + 35902 + 44 + not set + 35885 + + 35885 + + 1 + 4 + 2 + 0 + 0 + 0 + 600 + 210 + 0 + 0 + 600 + 250 + 100 + 0 + 0 + 0 + + + 35903 + 45 + not set + 35885 + + 35885 + + 1 + 4 + 2 + 0 + 0 + 0 + 600 + 210 + 0 + 0 + 600 + 250 + 100 + 0 + 0 + 0 + + + 35904 + 46 + not set + 35885 + + 35885 + + 1 + 4 + 2 + 0 + 0 + 0 + 600 + 210 + 0 + 0 + 600 + 250 + 100 + 0 + 0 + 0 + + + 35905 + 47 + not set + 35885 + + 35885 + + 1 + 4 + 2 + 0 + 0 + 0 + 600 + 210 + 0 + 0 + 600 + 250 + 100 + 0 + 0 + 0 + + + 203 + 48 + Disassembly + 0 + + 0 + + 1 + 2 + 3 + 0 + 0 + 0 + 210 + 600 + 0 + 0 + 250 + 600 + 100 + 0 + 1 + 0 + + + 1913 + 49 + Instruction Trace + 203 + + 203 + + 1 + 4 + 2 + 0 + 0 + 0 + 600 + 210 + 0 + 0 + 600 + 250 + 100 + 0 + 0 + 0 + + + 35824 + 50 + Logic Analyzer + 0 + + 0 + + 1 + 6 + 0 + 0 + 0 + 0 + 210 + 600 + 0 + 0 + 250 + 600 + 1 + 0 + 0 + 0 + + + 343 + 51 + Performance Analyzer + 203 + + 203 + + 1 + 4 + 2 + 0 + 0 + 0 + 210 + 600 + 0 + 0 + 250 + 600 + 100 + 0 + 0 + 0 + + + 204 + 52 + Performance Analyzer + 203 + + 203 + + 1 + 4 + 2 + 0 + 0 + 0 + 210 + 600 + 0 + 0 + 250 + 600 + 100 + 0 + 0 + 0 + + + 346 + 53 + Code Coverage + 203 + + 203 + + 1 + 4 + 2 + 0 + 0 + 0 + 210 + 600 + 0 + 0 + 250 + 600 + 100 + 0 + 0 + 0 + + + + +
diff --git a/CFG/SC92F8363B/Keil_Mould/Project/project name.uvproj b/CFG/SC92F8363B/Keil_Mould/Project/project name.uvproj new file mode 100644 index 0000000..635c328 --- /dev/null +++ b/CFG/SC92F8363B/Keil_Mould/Project/project name.uvproj @@ -0,0 +1,417 @@ + + + + 1.0 + +
### uVision Project, (C) Keil Software
+ + + + <project name> + 0x0 + MCS-51 + + + SC92F8003 + SC92Fxx Series + IRAM(0-0xFF) IROM(0-0x3FFF) XRAM(0-0xFF) CLOCK(16000000) + + "LIB\STARTUP.A51" ("Standard 8051 Startup Code") + + 0 + SC92F8003.H + + + + + + + + + + 0 + + + + SOC\ + SOC\ + + 0 + 0 + 0 + 0 + 1 + + ..\Output\ + project name + 1 + 0 + 1 + 1 + 1 + ..\List\ + 0 + 0 + 0 + + 0 + 0 + + + 0 + 0 + + + 0 + 0 + + + 0 + 0 + + + 0 + 0 + + + 0 + 0 + + 0 + + + + 0 + 0 + 0 + 0 + 0 + 1 + 0 + 0 + 0 + 0 + 3 + + + 65535 + + + S8051.DLL + + DP51.DLL + -p51 + S8051.DLL + + TP51.DLL + -p51 + + + + 0 + 0 + 0 + 0 + 16 + + + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + + + 0 + 1 + 0 + 1 + 1 + 1 + 0 + 1 + + 0 + 9 + + + + + + + + + + + + + + SinOne_Chip\SOC_Debug_Driver\SinOne_Chip_Debug_Driver.dll + + + + + 1 + 0 + 0 + 0 + 1 + 4101 + + SinOne_Chip\SOC_Debug_Driver\SinOne_Chip_Debug_Driver.dll + "" () + + + + + 2 + 0 + 2 + 0 + 0 + 0 + 0 + 0 + 0 + 1 + 1 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + + + 0 + 0x0 + 0xffff + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 1 + 0x0 + 0x4000 + + + 0 + 0x0 + 0x100 + + + 0 + 0x0 + 0x100 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + + + 0 + 0 + 1 + 0 + 1 + 3 + 8 + 2 + 0 + 1 + 1 + 0 + + + SC92F836xB + + ..\FWLib\SC92F_Lib\inc;..\User + + + + 0 + 1 + 0 + 0 + + + + + + + + + 0 + 0 + 0 + 0 + 2 + 1 + + REMOVEUNUSED + + + + + + CODE(C:0X100), +CONST(C:0X100) + + + + + + + + + + + + + + + + + + + + + User + + + main.c + 1 + ..\User\main.c + + + SC_Init.c + 1 + ..\User\SC_Init.c + + + SC_it.c + 1 + ..\User\SC_it.c + + + SysFunVarDefine.c + 1 + ..\User\SysFunVarDefine.c + + + CompCtrlDefine.c + 1 + ..\User\CompCtrlDefine.c + + + CallBackFunction.c + 1 + ..\User\CallBackFunction.c + + + + + Apps + + + Drivers + + + FWLib + + + sc92f_gpio.c + 1 + ..\FWLib\SC92F_Lib\src\sc92f_gpio.c + + + sc92f_option.c + 1 + ..\FWLib\SC92F_Lib\src\sc92f_option.c + + + + + Startup + + + STARTUP.A51 + 2 + .\STARTUP.A51 + + + + + + + +
diff --git a/CFG/SC92F8363B/Keil_Mould/Project/project name_uvopt.bak b/CFG/SC92F8363B/Keil_Mould/Project/project name_uvopt.bak new file mode 100644 index 0000000..17da3b7 --- /dev/null +++ b/CFG/SC92F8363B/Keil_Mould/Project/project name_uvopt.bak @@ -0,0 +1,1683 @@ + + + + 1.0 + +
### uVision Project, (C) Keil Software
+ + + *.c + *.s*; *.src; *.a* + *.obj + *.lib + *.txt; *.h; *.inc; *.md + *.plm + *.cpp + + + + 0 + 0 + + + + <project name> + 0x0 + MCS-51 + + 16000000 + + 1 + 1 + 1 + 0 + + + 0 + 65535 + 0 + 0 + 0 + + + 120 + 65 + 8 + ..\List\ + + + 1 + 1 + 1 + 0 + 1 + 1 + 0 + 1 + 0 + 0 + 0 + 0 + + + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 0 + + + 1 + 0 + 1 + + 0 + + S8051.DLL + + DP51.DLL + -p51 + S8051.DLL + + TP51.DLL + -p51 + + + 1 + 0 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 1 + 1 + 1 + 0 + 1 + 0 + 0 + 9 + + + + + + + + + + + SinOne_Chip\SOC_Debug_Driver\SinOne_Chip_Debug_Driver.dll + + + + 0 + DLGDP51 + (98=-1,-1,-1,-1,0)(82=-1,-1,-1,-1,0)(83=-1,-1,-1,-1,0)(84=-1,-1,-1,-1,0)(85=-1,-1,-1,-1,0)(80=-1,-1,-1,-1,0)(91=-1,-1,-1,-1,0)(92=-1,-1,-1,-1,0) + + + 0 + DLGTP51 + (98=-1,-1,-1,-1,0)(82=-1,-1,-1,-1,0)(83=-1,-1,-1,-1,0)(84=-1,-1,-1,-1,0)(85=-1,-1,-1,-1,0)(80=-1,-1,-1,-1,0)(91=-1,-1,-1,-1,0)(92=-1,-1,-1,-1,0) + + + 0 + SinOne_Chip_Debug_Driver + + + + + + 0 + 0 + 20 + 1 +
-16776800
+ 0 + 0 + 0 + 0 + 1 + D:\project\test\tag\1216-20220525\SOCCodeGenerator\bin\Debug\CFG\SDK\92F\Keil_Mould\Project\User\main.c + + +
+
+ + + 0 + 1 + test + + + + + 1 + 0 + D:0 + + + + 0 + 0 + 1 + 0 + 0 + 0 + 0 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + + + +
+
+ + + User + 1 + 0 + 0 + + 1 + 1 + 1 + 0 + 0 + 16793171 + 0 + 63189560 + 7280300 + 0 + ..\User\main.c + main.c + + + 1 + 2 + 1 + 0 + 0 + 16793171 + 0 + 63189560 + 7280300 + 0 + ..\User\SC_Init.c + SC_Init.c + + + 1 + 3 + 1 + 0 + 0 + 16793171 + 0 + 63189560 + 7280300 + 0 + ..\User\SC_it.c + SC_it.c + + + 1 + 4 + 1 + 0 + 0 + 16793171 + 0 + 63189560 + 7280300 + 0 + ..\User\SysFunVarDefine.c + SysFunVarDefine.c + + + 1 + 5 + 1 + 0 + 0 + 16793171 + 0 + 63189560 + 7280300 + 0 + ..\User\CompCtrlDefine.c + CompCtrlDefine.c + + + + + Apps + 0 + 0 + 0 + + + + Drivers + 1 + 0 + 0 + + + + FWLib + 1 + 0 + 0 + + 4 + 6 + 1 + 0 + 0 + 16793171 + 0 + 63189640 + 7280300 + 0 + ..\FWLib\SC92F_Lib\src\sc92f_gpio.c + sc92f_gpio.c + + + 4 + 7 + 1 + 0 + 0 + 16793171 + 0 + 63189640 + 7280300 + 0 + ..\FWLib\SC92F_Lib\src\sc92f_option.c + sc92f_option.c + + + + + Startup + 1 + 0 + 0 + + 5 + 8 + 2 + 0 + 0 + 16793171 + 0 + 63189560 + 7280300 + 0 + .\STARTUP.A51 + STARTUP.A51 + + + + + + 0 + + 0 + + Default + 1 + + 59392 + 1 + File + 0 + + 0 + + 1 + 2 + 3 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 100 + 0 + 1 + 0 + + + 59398 + 2 + Build + 0 + + 0 + + 1 + 2 + 3 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 100 + 0 + 0 + 0 + + + 59399 + 3 + Debug + 0 + + 0 + + 1 + 2 + 3 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 100 + 0 + 1 + 0 + + + 197 + 4 + Build Output + 0 + + 0 + + 1 + 2 + 4 + 0 + 0 + 0 + 210 + 600 + 0 + 0 + 250 + 600 + 100 + 1 + 0 + 0 + + + 198 + 5 + Command + 197 + + 197 + + 1 + 4 + 2 + 0 + 0 + 0 + 210 + 600 + 0 + 0 + 250 + 600 + 100 + 1 + 1 + 0 + + + 199 + 6 + Find in Files + 197 + + 197 + + 1 + 4 + 2 + 0 + 0 + 0 + 210 + 600 + 0 + 0 + 250 + 600 + 100 + 0 + 0 + 0 + + + 38007 + 7 + Browse + 197 + + 197 + + 1 + 4 + 2 + 0 + 0 + 0 + 210 + 600 + 0 + 0 + 250 + 600 + 100 + 0 + 0 + 0 + + + 1939 + 8 + UART #1 + 197 + + 197 + + 1 + 4 + 2 + 0 + 0 + 0 + 210 + 600 + 0 + 0 + 250 + 600 + 100 + 0 + 0 + 0 + + + 1940 + 9 + UART #2 + 197 + + 197 + + 1 + 4 + 2 + 0 + 0 + 0 + 210 + 600 + 0 + 0 + 250 + 600 + 100 + 0 + 0 + 0 + + + 1941 + 10 + UART #3 + 197 + + 197 + + 1 + 4 + 2 + 0 + 0 + 0 + 210 + 600 + 0 + 0 + 250 + 600 + 100 + 0 + 0 + 0 + + + 1942 + 11 + UART #4 + 197 + + 197 + + 1 + 4 + 2 + 0 + 0 + 0 + 210 + 600 + 0 + 0 + 250 + 600 + 100 + 0 + 0 + 0 + + + 1944 + 12 + Call Stack + 197 + + 197 + + 1 + 2 + 2 + 0 + 0 + 0 + 600 + 210 + 0 + 0 + 600 + 250 + 50 + 0 + 1 + 0 + + + 1507 + 13 + Call Stack + 1944 + + 197 + + 1 + 4 + 2 + 0 + 0 + 0 + 600 + 210 + 0 + 0 + 600 + 250 + 50 + 0 + 1 + 0 + + + 1935 + 14 + Locals + 1944 + + 197 + + 1 + 4 + 2 + 0 + 0 + 0 + 210 + 600 + 0 + 0 + 250 + 600 + 100 + 0 + 1 + 0 + + + 1936 + 15 + Watch 1 + 1944 + + 197 + + 1 + 4 + 2 + 0 + 0 + 0 + 210 + 600 + 0 + 0 + 250 + 600 + 100 + 0 + 1 + 0 + + + 1937 + 16 + Watch 2 + 1944 + + 197 + + 1 + 4 + 2 + 0 + 0 + 0 + 210 + 600 + 0 + 0 + 250 + 600 + 100 + 0 + 0 + 0 + + + 1465 + 17 + Memory 1 + 1944 + + 197 + + 1 + 4 + 2 + 0 + 0 + 0 + 210 + 600 + 0 + 0 + 250 + 600 + 100 + 0 + 1 + 0 + + + 1466 + 18 + Memory 2 + 1944 + + 197 + + 1 + 4 + 2 + 0 + 0 + 0 + 210 + 600 + 0 + 0 + 250 + 600 + 100 + 0 + 0 + 0 + + + 1467 + 19 + Memory 3 + 1944 + + 197 + + 1 + 4 + 2 + 0 + 0 + 0 + 210 + 600 + 0 + 0 + 250 + 600 + 100 + 0 + 0 + 0 + + + 1468 + 20 + Memory 4 + 1944 + + 197 + + 1 + 4 + 2 + 0 + 0 + 0 + 210 + 600 + 0 + 0 + 250 + 600 + 100 + 0 + 0 + 0 + + + 1506 + 21 + Symbols + 1944 + + 197 + + 1 + 4 + 2 + 0 + 0 + 0 + 210 + 600 + 0 + 0 + 250 + 600 + 100 + 0 + 1 + 0 + + + 1005 + 22 + Project + 0 + + 0 + + 1 + 2 + 1 + 0 + 0 + 0 + 600 + 210 + 0 + 0 + 600 + 250 + 100 + 0 + 1 + 0 + + + 109 + 23 + Books + 1005 + + 1005 + + 1 + 4 + 2 + 0 + 0 + 0 + 600 + 210 + 0 + 0 + 600 + 250 + 100 + 0 + 0 + 0 + + + 195 + 24 + Functions + 1005 + + 1005 + + 1 + 4 + 2 + 0 + 0 + 0 + 600 + 210 + 0 + 0 + 600 + 250 + 100 + 0 + 0 + 0 + + + 196 + 25 + Templates + 1005 + + 1005 + + 1 + 4 + 2 + 0 + 0 + 0 + 600 + 210 + 0 + 0 + 600 + 250 + 100 + 0 + 0 + 0 + + + 38003 + 26 + Registers + 1005 + + 1005 + + 1 + 4 + 2 + 0 + 0 + 0 + 600 + 210 + 0 + 0 + 600 + 250 + 100 + 1 + 1 + 0 + + + 35885 + 27 + not set + 0 + + 0 + + 1 + 2 + 2 + 0 + 0 + 0 + 600 + 210 + 0 + 0 + 600 + 250 + 100 + 0 + 0 + 0 + + + 35886 + 28 + not set + 35885 + + 35885 + + 1 + 4 + 2 + 0 + 0 + 0 + 600 + 210 + 0 + 0 + 600 + 250 + 100 + 0 + 0 + 0 + + + 35887 + 29 + not set + 35885 + + 35885 + + 1 + 4 + 2 + 0 + 0 + 0 + 600 + 210 + 0 + 0 + 600 + 250 + 100 + 0 + 0 + 0 + + + 35888 + 30 + not set + 35885 + + 35885 + + 1 + 4 + 2 + 0 + 0 + 0 + 600 + 210 + 0 + 0 + 600 + 250 + 100 + 0 + 0 + 0 + + + 35889 + 31 + not set + 35885 + + 35885 + + 1 + 4 + 2 + 0 + 0 + 0 + 600 + 210 + 0 + 0 + 600 + 250 + 100 + 0 + 0 + 0 + + + 35890 + 32 + not set + 35885 + + 35885 + + 1 + 4 + 2 + 0 + 0 + 0 + 600 + 210 + 0 + 0 + 600 + 250 + 100 + 0 + 0 + 0 + + + 35891 + 33 + not set + 35885 + + 35885 + + 1 + 4 + 2 + 0 + 0 + 0 + 600 + 210 + 0 + 0 + 600 + 250 + 100 + 0 + 0 + 0 + + + 35892 + 34 + not set + 35885 + + 35885 + + 1 + 4 + 2 + 0 + 0 + 0 + 600 + 210 + 0 + 0 + 600 + 250 + 100 + 0 + 0 + 0 + + + 35893 + 35 + not set + 35885 + + 35885 + + 1 + 4 + 2 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 100 + 0 + 0 + 0 + + + 35894 + 36 + not set + 35885 + + 35885 + + 1 + 4 + 2 + 0 + 0 + 0 + 600 + 210 + 0 + 0 + 600 + 250 + 100 + 0 + 0 + 0 + + + 35895 + 37 + not set + 35885 + + 35885 + + 1 + 4 + 2 + 0 + 0 + 0 + 600 + 210 + 0 + 0 + 600 + 250 + 100 + 0 + 0 + 0 + + + 35896 + 38 + not set + 35885 + + 35885 + + 1 + 4 + 2 + 0 + 0 + 0 + 600 + 210 + 0 + 0 + 600 + 250 + 100 + 0 + 0 + 0 + + + 35897 + 39 + not set + 35885 + + 35885 + + 1 + 4 + 2 + 0 + 0 + 0 + 600 + 210 + 0 + 0 + 600 + 250 + 100 + 0 + 0 + 0 + + + 35898 + 40 + not set + 35885 + + 35885 + + 1 + 4 + 2 + 0 + 0 + 0 + 600 + 210 + 0 + 0 + 600 + 250 + 100 + 0 + 0 + 0 + + + 35899 + 41 + not set + 35885 + + 35885 + + 1 + 4 + 5 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 100 + 0 + 0 + 0 + + + 35900 + 42 + not set + 35885 + + 35885 + + 1 + 4 + 2 + 0 + 0 + 0 + 600 + 210 + 0 + 0 + 600 + 250 + 100 + 0 + 0 + 0 + + + 35901 + 43 + not set + 35885 + + 35885 + + 1 + 4 + 2 + 0 + 0 + 0 + 600 + 210 + 0 + 0 + 600 + 250 + 100 + 0 + 0 + 0 + + + 35902 + 44 + not set + 35885 + + 35885 + + 1 + 4 + 2 + 0 + 0 + 0 + 600 + 210 + 0 + 0 + 600 + 250 + 100 + 0 + 0 + 0 + + + 35903 + 45 + not set + 35885 + + 35885 + + 1 + 4 + 2 + 0 + 0 + 0 + 600 + 210 + 0 + 0 + 600 + 250 + 100 + 0 + 0 + 0 + + + 35904 + 46 + not set + 35885 + + 35885 + + 1 + 4 + 2 + 0 + 0 + 0 + 600 + 210 + 0 + 0 + 600 + 250 + 100 + 0 + 0 + 0 + + + 35905 + 47 + not set + 35885 + + 35885 + + 1 + 4 + 2 + 0 + 0 + 0 + 600 + 210 + 0 + 0 + 600 + 250 + 100 + 0 + 0 + 0 + + + 203 + 48 + Disassembly + 0 + + 0 + + 1 + 2 + 3 + 0 + 0 + 0 + 210 + 600 + 0 + 0 + 250 + 600 + 100 + 0 + 1 + 0 + + + 1913 + 49 + Instruction Trace + 203 + + 203 + + 1 + 4 + 2 + 0 + 0 + 0 + 600 + 210 + 0 + 0 + 600 + 250 + 100 + 0 + 0 + 0 + + + 35824 + 50 + Logic Analyzer + 0 + + 0 + + 1 + 6 + 0 + 0 + 0 + 0 + 210 + 600 + 0 + 0 + 250 + 600 + 1 + 0 + 0 + 0 + + + 343 + 51 + Performance Analyzer + 203 + + 203 + + 1 + 4 + 2 + 0 + 0 + 0 + 210 + 600 + 0 + 0 + 250 + 600 + 100 + 0 + 0 + 0 + + + 204 + 52 + Performance Analyzer + 203 + + 203 + + 1 + 4 + 2 + 0 + 0 + 0 + 210 + 600 + 0 + 0 + 250 + 600 + 100 + 0 + 0 + 0 + + + 346 + 53 + Code Coverage + 203 + + 203 + + 1 + 4 + 2 + 0 + 0 + 0 + 210 + 600 + 0 + 0 + 250 + 600 + 100 + 0 + 0 + 0 + + + + +
diff --git a/CFG/SC92F8363B/Keil_Mould/Project/project name_uvproj.bak b/CFG/SC92F8363B/Keil_Mould/Project/project name_uvproj.bak new file mode 100644 index 0000000..bbd5b71 --- /dev/null +++ b/CFG/SC92F8363B/Keil_Mould/Project/project name_uvproj.bak @@ -0,0 +1,442 @@ + + + + 1.1 + +
### uVision Project, (C) Keil Software
+ + + + <project name> + 0x0 + MCS-51 + 8 + + + SC92F8003 + SC92Fxx Series + IRAM(0-0xFF) IROM(0-0x3FFF) XRAM(0-0xFF) CLOCK(16000000) + + "LIB\STARTUP.A51" ("Standard 8051 Startup Code") + + 0 + SC92F8003.H + + + + + + + + + + + 0 + 0 + + + + SOC\ + SOC\ + + 0 + 0 + 0 + 0 + 1 + + ..\Output\ + project name + 1 + 0 + 1 + 1 + 1 + ..\List\ + 0 + 0 + 0 + + 0 + 0 + + + 0 + 0 + 0 + 0 + + + 0 + 0 + + + 0 + 0 + 0 + 0 + + + 0 + 0 + + + 0 + 0 + 0 + 0 + + 0 + + + + 0 + 0 + 0 + 0 + 0 + 1 + 0 + 0 + 0 + 0 + 3 + + + 1 + 65535 + + + S8051.DLL + + DP51.DLL + -p51 + S8051.DLL + + TP51.DLL + -p51 + + + + 0 + 0 + 0 + 0 + 16 + + + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 1 + + + 0 + 1 + 0 + 1 + 1 + 1 + 0 + 1 + 0 + 1 + + 0 + 9 + + + + + + + + + + + + + + SinOne_Chip\SOC_Debug_Driver\SinOne_Chip_Debug_Driver.dll + + + + + 1 + 0 + 0 + 0 + 1 + 4101 + + 0 + SinOne_Chip\SOC_Debug_Driver\SinOne_Chip_Debug_Driver.dll + "" () + + + + + 0 + + + + 2 + 0 + 2 + 0 + 0 + 0 + 0 + 0 + 0 + 1 + 1 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + + + 0 + 0x0 + 0xffff + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 1 + 0x0 + 0x4000 + + + 0 + 0x0 + 0x100 + + + 0 + 0x0 + 0x100 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + + + 0 + 0 + 1 + 0 + 1 + 3 + 9 + 2 + 0 + 1 + 1 + 0 + + + + + ..\FWLib\SC92F_Lib\inc;..\User + + + + 0 + 1 + 0 + 0 + + + + + + + + + 0 + 0 + 0 + 0 + 2 + 1 + + REMOVEUNUSED + + + + + + CODE(C:0X100), +CONST(C:0X100) + + + + + + + + + + + + + + + + + + + + + User + + + main.c + 1 + ..\User\main.c + + + SC_Init.c + 1 + ..\User\SC_Init.c + + + SC_it.c + 1 + ..\User\SC_it.c + + + SysFunVarDefine.c + 1 + ..\User\SysFunVarDefine.c + + + CompCtrlDefine.c + 1 + ..\User\CompCtrlDefine.c + + + + + Apps + + + Drivers + + + FWLib + + + sc92f_gpio.c + 1 + ..\FWLib\SC92F_Lib\src\sc92f_gpio.c + + + sc92f_option.c + 1 + ..\FWLib\SC92F_Lib\src\sc92f_option.c + + + + + Startup + + + STARTUP.A51 + 2 + .\STARTUP.A51 + + + + + + + +
diff --git a/CFG/SC92F8363B/Keil_Mould/User/CallBackFunction.c b/CFG/SC92F8363B/Keil_Mould/User/CallBackFunction.c new file mode 100644 index 0000000..0502a44 --- /dev/null +++ b/CFG/SC92F8363B/Keil_Mould/User/CallBackFunction.c @@ -0,0 +1,14 @@ +//*************************************************************************************************** +// CopyRight (c) +// File Name : CallBackFunction.c +// Function : Write the logic you want to implement in the function body +// Version : V3.0 +// Date : 2022.07.14 +//*************************************************************************************************** +#include "SC_Init.h" +#include "SC_it.h" +#include "..\Drivers\SCDriver_list.h" +#include "HeadFiles\SysFunVarDefine.h" +/**************************************Generated by EasyCodeCube*************************************/ + +/*************************************.Generated by EasyCodeCube.************************************/ diff --git a/CFG/SC92F8363B/Keil_Mould/User/CompCtrlDefine.c b/CFG/SC92F8363B/Keil_Mould/User/CompCtrlDefine.c new file mode 100644 index 0000000..b57b2a5 --- /dev/null +++ b/CFG/SC92F8363B/Keil_Mould/User/CompCtrlDefine.c @@ -0,0 +1,14 @@ +//********************************************************************** +// CopyRight (c) +// File Name : CompCtrlDefine.C +// Function : Store composite control define +// Version : V3.2.0 +// Date : 2022.02.16 +///********************************************************************* +#include "SC_Init.h" +#include "SC_it.h" +#include "..\Drivers\SCDriver_list.h" +#include "HeadFiles\SysFunVarDefine.h" +/**************************************Generated by EasyCodeCube*************************************/ + +/*************************************.Generated by EasyCodeCube.************************************/ diff --git a/CFG/SC92F8363B/Keil_Mould/User/HeadFiles/CompCtrlDefine.h b/CFG/SC92F8363B/Keil_Mould/User/HeadFiles/CompCtrlDefine.h new file mode 100644 index 0000000..dc8da2a --- /dev/null +++ b/CFG/SC92F8363B/Keil_Mould/User/HeadFiles/CompCtrlDefine.h @@ -0,0 +1,14 @@ +//********************************************************************** +// CopyRight (c) +// File Name : CompCtrlDefine.h +// Function : Store composite control define +// Version : V3.2.0 +// Date : 2022.02.16 +///********************************************************************* +#ifndef COMP_CTRL_DEFINE_H + #define COMP_CTRL_DEFINE_H +#endif + +/**************************************Generated by EasyCodeCube*************************************/ + +/*************************************.Generated by EasyCodeCube.************************************/ diff --git a/CFG/SC92F8363B/Keil_Mould/User/HeadFiles/CustomType.h b/CFG/SC92F8363B/Keil_Mould/User/HeadFiles/CustomType.h new file mode 100644 index 0000000..358033d --- /dev/null +++ b/CFG/SC92F8363B/Keil_Mould/User/HeadFiles/CustomType.h @@ -0,0 +1,14 @@ +//********************************************************************** +// CopyRight (c) +// File Name : CustomType.h +// Function : +// Version : V3.2.0 +// Date : 2022.02.16 +//********************************************************************** +#ifndef CUSTOM_TYPE_H + #define CUSTOM_TYPE_H +#endif + +/**************************************Generated by EasyCodeCube*************************************/ + +/*************************************.Generated by EasyCodeCube.************************************/ diff --git a/CFG/SC92F8363B/Keil_Mould/User/HeadFiles/FunctionType.h b/CFG/SC92F8363B/Keil_Mould/User/HeadFiles/FunctionType.h new file mode 100644 index 0000000..a2823fe --- /dev/null +++ b/CFG/SC92F8363B/Keil_Mould/User/HeadFiles/FunctionType.h @@ -0,0 +1,14 @@ +//********************************************************************** +// CopyRight (c) +// File Name : Function.h +// Function : Store quote of the function +// Version : V3.2.0 +// Date : 2022.02.16 +//********************************************************************** +#ifndef FUNCTION_H + #define FUNCTION_H +#endif + +/**************************************Generated by EasyCodeCube*************************************/ + +/*************************************.Generated by EasyCodeCube.************************************/ diff --git a/CFG/SC92F8363B/Keil_Mould/User/HeadFiles/SC_itExtern.h b/CFG/SC92F8363B/Keil_Mould/User/HeadFiles/SC_itExtern.h new file mode 100644 index 0000000..405cdc5 --- /dev/null +++ b/CFG/SC92F8363B/Keil_Mould/User/HeadFiles/SC_itExtern.h @@ -0,0 +1,15 @@ +///**********************************************************************/ +// CopyRight (c) +// File Name : SC_itExtern.h +// Function : store extern var code +// Version : V3.2.0 +// Date : 2022.02.16 +///**********************************************************************/ +#ifndef SC_IT_EXTERN_H + #define SC_IT_EXTERN_H +#include "HeadFiles\SysFunVarDefine.h" +#endif + +/**************************************Generated by EasyCodeCube*************************************/ + +/*************************************.Generated by EasyCodeCube.************************************/ diff --git a/CFG/SC92F8363B/Keil_Mould/User/HeadFiles/SysFunVarDefine.h b/CFG/SC92F8363B/Keil_Mould/User/HeadFiles/SysFunVarDefine.h new file mode 100644 index 0000000..4aaf151 --- /dev/null +++ b/CFG/SC92F8363B/Keil_Mould/User/HeadFiles/SysFunVarDefine.h @@ -0,0 +1,19 @@ +//********************************************************************** +// CopyRight (c) +// File Name : SysFunVarDefine.h +// Function : Store var control and function control extern +// Version : V3.2.0 +// Date : 2022.02.16 +//********************************************************************** +#ifndef SYS_FUN_VAR_DEFINE + #define SYS_FUN_VAR_DEFINE +#include "HeadFiles\CustomType.h" +#include "HeadFiles\UserExport.h" +#include "HeadFiles\FunctionType.h" +#include "HeadFiles\CompCtrlDefine.h" +#endif + +/**************************************Generated by EasyCodeCube*************************************/ + +/*************************************.Generated by EasyCodeCube.************************************/ + diff --git a/CFG/SC92F8363B/Keil_Mould/User/HeadFiles/UserExport.h b/CFG/SC92F8363B/Keil_Mould/User/HeadFiles/UserExport.h new file mode 100644 index 0000000..b8a383c --- /dev/null +++ b/CFG/SC92F8363B/Keil_Mould/User/HeadFiles/UserExport.h @@ -0,0 +1,15 @@ +//********************************************************************** +// CopyRight (c) +// File Name : UserExport.h +// Function : Store head files +// Version : V3.2.0 +// Date : 2022.02.16 +//********************************************************************** +#ifndef USER_EXPORT_H + #define USER_EXPORT_H +#endif + +/**************************************Generated by EasyCodeCube*************************************/ + +/*************************************.Generated by EasyCodeCube.************************************/ + diff --git a/CFG/SC92F8363B/Keil_Mould/User/SC_Init.c b/CFG/SC92F8363B/Keil_Mould/User/SC_Init.c new file mode 100644 index 0000000..0598243 --- /dev/null +++ b/CFG/SC92F8363B/Keil_Mould/User/SC_Init.c @@ -0,0 +1,419 @@ +//************************************************************ +// Copyright (c) +// FileName : SC_Init.c +// Function : Contains the MCU initialization function and its C file +// Instructions : +//************************************************************* + +#include "SC_Init.h" // MCU initialization header file, including all firmware library header files +#include "..\Drivers\SCDriver_list.h" +#include "HeadFiles\SC_itExtern.h" + +//************************************************************* + +/***************************************************** +*函数名称: SC_Init +*函数功能: MCU初始化函数 +*入口参数:void +*出口参数:void +*****************************************************/ +void SC_Init(void) +{ + /*write initial function here*/ + EA = 1; +} + +/***************************************************** +*函数名称: SC_OPTION_Init +*函数功能: OPTION配置初始化函数 +*入口参数:void +*出口参数:void +*****************************************************/ +void SC_OPTION_Init(void) +{ + /*OPTION_Init write here*/ +} + +/***************************************************** +*函数名称: SC_GPIO_Init +*函数功能: GPIO初始化函数 +*入口参数:void +*出口参数:void +*****************************************************/ +void SC_GPIO_Init(void) +{ + /*GPIO_Init write here*/ +} + +/***************************************************** +*函数名称: SC_UART0_Init +*函数功能: UART0初始化函数 +*入口参数:void +*出口参数:void +*****************************************************/ +void SC_UART0_Init(void) +{ + /*UART0_Init write here*/ +} + +/***************************************************** +*函数名称: SC_TIM0_Init +*函数功能: TIMER0初始化函数 +*入口参数:void +*出口参数:void +*****************************************************/ +void SC_TIM0_Init(void) +{ + /*TIM0_Init write here*/ +} + +/***************************************************** +*函数名称: SC_TIM1_Init +*函数功能: TIMER1初始化函数 +*入口参数:void +*出口参数:void +*****************************************************/ +void SC_TIM1_Init(void) +{ + /*TIM1_Init write here*/ +} + +/***************************************************** +*函数名称: SC_TIM2_Init +*函数功能: TIMER2初始化函数 +*入口参数:void +*出口参数:void +*****************************************************/ +void SC_TIM2_Init(void) +{ + /*TIM2_Init write here*/ +} + +/***************************************************** +*函数名称: SC_TIM3_Init +*函数功能: TIMER3初始化函数 +*入口参数:void +*出口参数:void +*****************************************************/ +void SC_TIM3_Init(void) +{ + /*TIM3_Init write here*/ +} + +/***************************************************** +*函数名称: SC_TIM4_Init +*函数功能: TIMER4初始化函数 +*入口参数:void +*出口参数:void +*****************************************************/ +void SC_TIM4_Init(void) +{ + /*TIM4_Init write here*/ +} + +/***************************************************** +*函数名称: SC_PWM_Init +*函数功能: PWM初始化函数 +*入口参数:void +*出口参数:void +*****************************************************/ +void SC_PWM_Init(void) +{ + /*PWM_Init write here*/ +} + +/***************************************************** +*函数名称: SC_PWM0_Init +*函数功能: PWM0初始化函数 +*入口参数:void +*出口参数:void +*****************************************************/ +void SC_PWM0_Init(void) +{ + /*PWM0_Init write here*/ +} + +/***************************************************** +*函数名称: SC_PWM1_Init +*函数功能: PWM1初始化函数 +*入口参数:void +*出口参数:void +*****************************************************/ +void SC_PWM1_Init(void) +{ + /*PWM1_Init write here*/ +} + +/***************************************************** +*函数名称: SC_PWM2_Init +*函数功能: PWM1初始化函数 +*入口参数:void +*出口参数:void +*****************************************************/ +void SC_PWM2_Init(void) +{ + /*PWM2_Init write here*/ +} + +/***************************************************** +*函数名称: SC_PWM3_Init +*函数功能: PWM1初始化函数 +*入口参数:void +*出口参数:void +*****************************************************/ +void SC_PWM3_Init(void) +{ + /*PWM3_Init write here*/ +} + +/***************************************************** +*函数名称: SC_PWM4_Init +*函数功能: PWM1初始化函数 +*入口参数:void +*出口参数:void +*****************************************************/ +void SC_PWM4_Init(void) +{ + /* + PWM4_Init write here*/ +} +/***************************************************** +*函数名称: SC_INT_Init +*函数功能: INT初始化函数 +*入口参数:void +*出口参数:void +*****************************************************/ +void SC_INT_Init(void) +{ + /*INT_Init write here*/ +} + +/***************************************************** +*函数名称: SC_ADC_Init +*函数功能: ADC初始化函数 +*入口参数:void +*出口参数:void +*****************************************************/ +void SC_ADC_Init(void) +{ + /*ADC_Init write here*/ +} + +/***************************************************** +*函数名称: SC_PGA_Init +*函数功能: PGA初始化函数 +*入口参数:void +*出口参数:void +*****************************************************/ +void SC_PGA_Init(void) +{ + /*PGA_Init write here*/ +} + +/***************************************************** +*函数名称: SC_IAP_Init +*函数功能: IAP初始化函数 +*入口参数:void +*出口参数:void +*****************************************************/ +void SC_IAP_Init(void) +{ + /*IAP_Init write here*/ +} + +/***************************************************** +*函数名称: SC_USCI0_Init +*函数功能: USCI0初始化函数 +*入口参数:void +*出口参数:void +*****************************************************/ +void SC_USCI0_Init(void) +{ + /*USCI0_Init write here*/ +} + +/***************************************************** +*函数名称: SC_USCI1_Init +*函数功能: USCI1初始化函数 +*入口参数:void +*出口参数:void +*****************************************************/ +void SC_USCI1_Init(void) +{ + /*USCI1_Init write here*/ +} + +/***************************************************** +*函数名称: SC_USCI2_Init +*函数功能: USCI2初始化函数 +*入口参数:void +*出口参数:void +*****************************************************/ +void SC_USCI2_Init(void) +{ + /*USCI2_Init write here*/ +} + +/***************************************************** +*函数名称: SC_USCI3_Init +*函数功能: USCI3初始化函数 +*入口参数:void +*出口参数:void +*****************************************************/ +void SC_USCI3_Init(void) +{ + /*USCI3_Init write here*/ +} + +/***************************************************** +*函数名称: SC_USCI4_Init +*函数功能: USCI4初始化函数 +*入口参数:void +*出口参数:void +*****************************************************/ +void SC_USCI4_Init(void) +{ + /*USCI4_Init write here*/ +} + +/***************************************************** +*函数名称: SC_USCI5_Init +*函数功能: USCI5初始化函数 +*入口参数:void +*出口参数:void +*****************************************************/ +void SC_USCI5_Init(void) +{ + /*USCI5_Init write here*/ +} + +/***************************************************** +*函数名称: SC_SSI_Init +*函数功能: SSI初始化函数 +*入口参数:void +*出口参数:void +*****************************************************/ +void SC_SSI_Init(void) +{ + /*SSI_Init write here*/ +} + +/***************************************************** +*函数名称: SC_SSI0_Init +*函数功能: SSI初始化函数 +*入口参数:void +*出口参数:void +*****************************************************/ +void SC_SSI0_Init(void) +{ + /*SSI0_Init write here*/ +} + +/***************************************************** +*函数名称: SC_SSI1_Init +*函数功能: SSI初始化函数 +*入口参数:void +*出口参数:void +*****************************************************/ +void SC_SSI1_Init(void) +{ + /*SSI1_Init write here*/ +} + +/***************************************************** +*函数名称: SC_BTM_Init +*函数功能: 低频时钟定时器初始化函数 +*入口参数:void +*出口参数:void +*****************************************************/ +void SC_BTM_Init(void) +{ + /*BTM_Init write here*/ +} + +/***************************************************** +*函数名称: SC_CRC_Init +*函数功能: check sum 初始化函数 +*入口参数:void +*出口参数:void +*****************************************************/ +void SC_CRC_Init(void) +{ + /*CRC_Init write here*/ +} + +/***************************************************** +*函数名称: SC_CHKSUM_Init +*函数功能: check sum 初始化函数 +*入口参数:void +*出口参数:void +*****************************************************/ +void SC_CHKSUM_Init(void) +{ + /*CHKSUM_Init write here*/ +} + +/***************************************************** +*函数名称: SC_WDT_Init +*函数功能: 看门狗初始化函数 +*入口参数:void +*出口参数:void +*****************************************************/ +void SC_WDT_Init(void) +{ + /*WDT_Init write here*/ +} + +/***************************************************** +*函数名称: SC_PWR_Init +*函数功能: 电源/功耗控制初始化函数 +*入口参数:void +*出口参数:void +*****************************************************/ +void SC_PWR_Init(void) +{ + /*PWR_Init write here*/ +} +/***************************************************** +*函数名称: SC_DDIC_Init +*函数功能: 显示控制初始化函数 +*入口参数:void +*出口参数:void +*****************************************************/ +void SC_DDIC_Init(void) +{ + /*DDIC_Init write here*/ +} + +/***************************************************** +*函数名称: SC_ACMP_Init +*函数功能: 运放初始化函数 +*入口参数:void +*出口参数:void +*****************************************************/ +void SC_ACMP_Init(void) +{ + /*ACMP_Init write here*/ +} + +/***************************************************** +*函数名称: SC_MDU_Init +*函数功能: 乘除法器初始化函数 +*入口参数:void +*出口参数:void +*****************************************************/ +void SC_MDU_Init(void) +{ + /*MDU_Init write here*/ +} + +/***************************************************** +*函数名称: SC_LPD_Init +*函数功能: LPD初始化函数 +*入口参数:void +*出口参数:void +*****************************************************/ +void SC_LPD_Init(void) +{ + /*LPD_Init write here*/ +} diff --git a/CFG/SC92F8363B/Keil_Mould/User/SC_Init.h b/CFG/SC92F8363B/Keil_Mould/User/SC_Init.h new file mode 100644 index 0000000..69d233c --- /dev/null +++ b/CFG/SC92F8363B/Keil_Mould/User/SC_Init.h @@ -0,0 +1,58 @@ +//************************************************************ +// Copyright (c) +// FileName : SC_Init.h +// Function : Contains the MCU initialization function and its H file +// Instructions : +//************************************************************* + +#ifndef _SC_INIT_H_ +#define _SC_INIT_H_ + +#if defined (SC95F8x1x) || defined (SC95F7x1x) || defined (SC95F8x2x) || defined (SC95F7x2x) || defined (SC95F8x3x) || defined (SC95F7x3x) \ + || defined (SC95F8x6x) || defined (SC95F7x6x) || defined (SC95F8x1xB) || defined (SC95F7x1xB) +#include "sc95f_conf.h" +#else +#include "sc92f_conf.h" +#endif + +void SC_Init(void); + +void SC_OPTION_Init(void); +void SC_GPIO_Init(void); +void SC_UART0_Init(void); +void SC_TIM0_Init(void); +void SC_TIM1_Init(void); +void SC_TIM2_Init(void); +void SC_TIM3_Init(void); +void SC_TIM4_Init(void); +void SC_PWM_Init(void); +void SC_PWM0_Init(void); +void SC_PWM1_Init(void); +void SC_INT_Init(void); +void SC_ADC_Init(void); +void SC_IAP_Init(void); +void SC_USCI0_Init(void); +void SC_USCI1_Init(void); +void SC_USCI2_Init(void); +void SC_BTM_Init(void); +void SC_CRC_Init(void); +void SC_WDT_Init(void); +void SC_PWR_Init(void); +void SC_DDIC_Init(void); +void SC_MDU_Init(void); +void SC_ACMP_Init(void); +void SC_USCI3_Init(void); +void SC_USCI4_Init(void); +void SC_USCI5_Init(void); +void SC_PWM2_Init(void); +void SC_PWM3_Init(void); +void SC_PWM4_Init(void); + +void SC_PGA_Init(void); +void SC_SSI_Init(void); +void SC_SSI0_Init(void); +void SC_SSI1_Init(void); +void SC_CHKSUM_Init(void); +void SC_LPD_Init(void); +#endif + diff --git a/CFG/SC92F8363B/Keil_Mould/User/SC_it.c b/CFG/SC92F8363B/Keil_Mould/User/SC_it.c new file mode 100644 index 0000000..f46d202 --- /dev/null +++ b/CFG/SC92F8363B/Keil_Mould/User/SC_it.c @@ -0,0 +1,237 @@ +//************************************************************ +// Copyright (c) +// FileName : SC_it.c +// Function : Interrupt Service Routine +// Instructions : +// Date : 2022/03/03 +// Version : V1.0002 +//************************************************************* +/********************Includes************************************************************************/ +#include "SC_it.h" +#include "..\Drivers\SCDriver_list.h" +#include "HeadFiles\SC_itExtern.h" +/**************************************Generated by EasyCodeCube*************************************/ + +/*************************************.Generated by EasyCodeCube.************************************/ + +void INT0Interrupt() interrupt 0 +{ + TCON &= 0XFD;//Clear interrupt flag bit + /*INT0_it write here begin*/ + /*INT0_it write here*/ + /**/ + /**/ + /*INT0Interrupt Flag Clear begin*/ + /*INT0Interrupt Flag Clear end*/ +} +void Timer0Interrupt() interrupt 1 +{ + /*TIM0_it write here begin*/ + /*TIM0_it write here*/ + /**/ + /**/ + /*Timer0Interrupt Flag Clear begin*/ + /*Timer0Interrupt Flag Clear end*/ +} +void INT1Interrupt() interrupt 2 +{ + TCON &= 0XF7;//Clear interrupt flag bit + /*INT1_it write here begin*/ + /*INT1_it write here*/ + /**/ + /**/ + /*INT1Interrupt Flag Clear begin*/ + /*INT1Interrupt Flag Clear end*/ +} +void Timer1Interrupt() interrupt 3 +{ + /*TIM1_it write here begin*/ + /*TIM1_it write here*/ + /**/ + /**/ + /*Timer1Interrupt Flag Clear begin*/ + /*Timer1Interrupt Flag Clear end*/ +} +#if defined (SC92F742x) || defined (SC92F7490) +void SSI0Interrupt() interrupt 4 +{ + /*SSI0_it write here begin*/ + /*SSI0_it write here*/ + /**/ + /**/ + /*SSI0Interrupt Flag Clear begin*/ + /*SSI0Interrupt Flag Clear end*/ +} +#else +void UART0Interrupt() interrupt 4 +{ + /*UART0_it write here begin*/ + /*UART0_it write here*/ + /**/ + /**/ + /*UART0Interrupt Flag Clear begin*/ + /*UART0Interrupt Flag Clear end*/ +} +#endif +void Timer2Interrupt() interrupt 5 +{ + /*TIM2_it write here begin*/ + /*TIM2_it write here*/ + /**/ + /**/ + /*Timer2Interrupt Flag Clear begin*/ + /*Timer2Interrupt Flag Clear end*/ +} +void ADCInterrupt() interrupt 6 +{ + /*ADC_it write here begin*/ + /*ADC_it write here*/ + /**/ + /**/ + /*ADCInterrupt Flag Clear begin*/ + /*ADCInterrupt Flag Clear end*/ +} +#if defined (SC92F854x) || defined (SC92F754x) ||defined (SC92F844xB) || defined (SC92F744xB)||defined (SC92F84Ax_2) || defined (SC92F74Ax_2)|| defined (SC92F846xB) \ +|| defined (SC92F746xB) || defined (SC92F836xB) || defined (SC92F736xB) || defined (SC92F8003)||defined (SC92F84Ax) || defined (SC92F74Ax) || defined (SC92F83Ax) \ +|| defined (SC92F73Ax) || defined (SC92F7003) || defined (SC92F740x) || defined (SC92FWxx) || defined (SC93F743x) || defined (SC93F833x) || defined (SC93F843x)\ +|| defined (SC92F848x) || defined (SC92F748x)|| defined (SC92F859x) || defined (SC92F759x) +void SSIInterrupt() interrupt 7 +{ + /*SSI_it write here begin*/ + /*SSI_it write here*/ + /**/ + /**/ + /*SSIInterrupt Flag Clear begin*/ + /*SSIInterrupt Flag Clear end*/ +} +#elif defined (SC92F742x) || defined (SC92F7490) +void SSI1Interrupt() interrupt 7 +{ + /*SSI1_it write here begin*/ + /*SSI1_it write here*/ + /**/ + /**/ + /*SSI1Interrupt Flag Clear begin*/ + /*SSI1Interrupt Flag Clear end*/ +} +#else +void USCI0Interrupt() interrupt 7 +{ + /*USCI0_it write here begin*/ + /*USCI0_it write here*/ + /**/ + /**/ + /*USCI0Interrupt Flag Clear begin*/ + /*USCI0Interrupt Flag Clear end*/ +} +#endif +void PWMInterrupt() interrupt 8 +{ + /*PWM_it write here begin*/ + /*PWM_it write here*/ + /**/ + /**/ + /*PWMInterrupt Flag Clear begin*/ + /*PWMInterrupt Flag Clear end*/ +} +#if !defined (TK_USE_BTM) +void BTMInterrupt() interrupt 9 +{ + /*BTM_it write here begin*/ + /*BTM_it write here*/ + /**/ + /**/ + /*BTMInterrupt Flag Clear begin*/ + /*BTMInterrupt Flag Clear end*/ +} +#endif +void INT2Interrupt() interrupt 10 +{ + /*INT2_it write here begin*/ + /*INT2_it write here*/ + /**/ + /**/ + /*INT2Interrupt Flag Clear begin*/ + /*INT2Interrupt Flag Clear end*/ +} +void ACMPInterrupt() interrupt 12 +{ + /*ACMP_it write here begin*/ + /*ACMP_it write here*/ + /**/ + /**/ + /*ACMPInterrupt Flag Clear begin*/ + /*ACMPInterrupt Flag Clear end*/ +} +void Timer3Interrupt() interrupt 13 +{ + /*Timer3_it write here begin*/ + /*Timer3_it write here*/ + /**/ + /**/ + /*Timer3Interrupt Flag Clear begin*/ + /*Timer3Interrupt Flag Clear end*/ +} +void Timer4Interrupt() interrupt 14 +{ + /*Timer4_it write here begin*/ + /*Timer4_it write here*/ + /**/ + /**/ + /*Timer4Interrupt Flag Clear begin*/ + /*Timer4Interrupt Flag Clear end*/ +} +void USCI1Interrupt() interrupt 15 +{ + /*USCI1_it write here begin*/ + /*USCI1_it write here*/ + /**/ + /**/ + /*USCI1Interrupt Flag Clear begin*/ + /*USCI1Interrupt Flag Clear end*/ +} +void USCI2Interrupt() interrupt 16 +{ + /*USCI2_it write here begin*/ + /*USCI2_it write here*/ + /**/ + /**/ + /*USCI2Interrupt Flag Clear begin*/ + /*USCI2Interrupt Flag Clear end*/ +} +void USCI3Interrupt() interrupt 17 +{ + /*USCI3_it write here begin*/ + /*USCI3_it write here*/ + /**/ + /**/ + /*USCI3Interrupt Flag Clear begin*/ + /*USCI3Interrupt Flag Clear end*/ +} +void USCI4Interrupt() interrupt 18 +{ + /*USCI4_it write here begin*/ + /*USCI4_it write here*/ + /**/ + /**/ + /*USCI4Interrupt Flag Clear begin*/ + /*USCI4Interrupt Flag Clear end*/ +} +void USCI5Interrupt() interrupt 19 +{ + /*USCI5_it write here begin*/ + /*USCI5_it write here*/ + /**/ + /**/ + /*USCI5Interrupt Flag Clear begin*/ + /*USCI5Interrupt Flag Clear end*/ +} +void LPDInterrupt() interrupt 22 +{ + /*LPD_it write here begin*/ + /*LPD_it write here*/ + /**/ + /**/ + /*LPDInterrupt Flag Clear begin*/ + /*LPDInterrupt Flag Clear end*/ +} diff --git a/CFG/SC92F8363B/Keil_Mould/User/SC_it.h b/CFG/SC92F8363B/Keil_Mould/User/SC_it.h new file mode 100644 index 0000000..0f0580b --- /dev/null +++ b/CFG/SC92F8363B/Keil_Mould/User/SC_it.h @@ -0,0 +1,20 @@ +//************************************************************ +// Copyright (c) +// FileName : SC_it.h +// Author : +// Function : Interrupt service program header file +// Local Functions: +// Date : 2022/04/07 +// Version : V1.3 +//************************************************************* +#ifndef _SC_IT_H_ +#define _SC_IT_H_ + +#if defined (SC95F8x1x) || defined (SC95F7x1x) || defined (SC95F8x2x) || defined (SC95F7x2x) || defined (SC95F8x3x) || defined (SC95F7x3x) \ + || defined (SC95F8x6x) || defined (SC95F7x6x) || defined (SC95F8x1xB) || defined (SC95F7x1xB) +#include "sc95f_conf.h" +#else +#include "sc92f_conf.h" +#endif + +#endif diff --git a/CFG/SC92F8363B/Keil_Mould/User/SysFunVarDefine.c b/CFG/SC92F8363B/Keil_Mould/User/SysFunVarDefine.c new file mode 100644 index 0000000..f55d0bd --- /dev/null +++ b/CFG/SC92F8363B/Keil_Mould/User/SysFunVarDefine.c @@ -0,0 +1,15 @@ +//********************************************************************** +// CopyRight (c) +// File Name : SysFunVarDefine.c +// Function : Store var control and function control define +// Version : V2.0 +// Date : 2021.08.04 +//********************************************************************** +#include "SC_Init.h" +#include "SC_it.h" +#include "..\Drivers\SCDriver_list.h" +#include "HeadFiles\SysFunVarDefine.h" + +/**************************************Generated by EasyCodeCube*************************************/ + +/*************************************.Generated by EasyCodeCube.************************************/ \ No newline at end of file diff --git a/CFG/SC92F8363B/Keil_Mould/User/main.c b/CFG/SC92F8363B/Keil_Mould/User/main.c new file mode 100644 index 0000000..4e29cb3 --- /dev/null +++ b/CFG/SC92F8363B/Keil_Mould/User/main.c @@ -0,0 +1,31 @@ +//************************************************************ +// Copyright (c) +// FileName : main.c +// Module Function : +// Instructions : Contains the MCU initialization function and its H file +//************************************************************ +/********************Includes************************************************************************/ +#include "SC_Init.h" //MCU Init header,Include all IC resource headers +#include "SC_it.h" +#include "..\Drivers\SCDriver_list.h" +#include "HeadFiles\SysFunVarDefine.h" + +/**************************************Generated by EasyCodeCube*************************************/ + +/*************************************.Generated by EasyCodeCube.************************************/ +/***************************************************************************************************** +* Function Name: main +* Description : This function implements main function. +* Arguments : None +* Return Value : None +******************************************************************************************************/ +void main(void) +{ + + /**/ + + /**/ + +} + + diff --git a/CFG/SC92F8363B/PEP/SC92F8363B.db b/CFG/SC92F8363B/PEP/SC92F8363B.db new file mode 100644 index 0000000..625c930 Binary files /dev/null and b/CFG/SC92F8363B/PEP/SC92F8363B.db differ diff --git a/CFG/SC92F8363B/SC92F8363B.txt b/CFG/SC92F8363B/SC92F8363B.txt new file mode 100644 index 0000000..b52845a Binary files /dev/null and b/CFG/SC92F8363B/SC92F8363B.txt differ diff --git a/CFG/SC92F8363B/Temp/Function_Temp/ADC.txt b/CFG/SC92F8363B/Temp/Function_Temp/ADC.txt new file mode 100644 index 0000000..a46fa12 --- /dev/null +++ b/CFG/SC92F8363B/Temp/Function_Temp/ADC.txt @@ -0,0 +1,2 @@ +//gpiomode write here +//functions write here diff --git a/CFG/SC92F8363B/Temp/Function_Temp/OPTION.txt b/CFG/SC92F8363B/Temp/Function_Temp/OPTION.txt new file mode 100644 index 0000000..a46fa12 --- /dev/null +++ b/CFG/SC92F8363B/Temp/Function_Temp/OPTION.txt @@ -0,0 +1,2 @@ +//gpiomode write here +//functions write here diff --git a/CFG/SC92F8363B/Temp/Function_Temp/TIM0.txt b/CFG/SC92F8363B/Temp/Function_Temp/TIM0.txt new file mode 100644 index 0000000..a46fa12 --- /dev/null +++ b/CFG/SC92F8363B/Temp/Function_Temp/TIM0.txt @@ -0,0 +1,2 @@ +//gpiomode write here +//functions write here diff --git a/CFG/SC92F8363B/Temp/Function_Temp/UART1.txt b/CFG/SC92F8363B/Temp/Function_Temp/UART1.txt new file mode 100644 index 0000000..a46fa12 --- /dev/null +++ b/CFG/SC92F8363B/Temp/Function_Temp/UART1.txt @@ -0,0 +1,2 @@ +//gpiomode write here +//functions write here diff --git a/CFG/SC92F8363B/Temp/PEPCFG_Temp/ADC.txt b/CFG/SC92F8363B/Temp/PEPCFG_Temp/ADC.txt new file mode 100644 index 0000000..6203f00 --- /dev/null +++ b/CFG/SC92F8363B/Temp/PEPCFG_Temp/ADC.txt @@ -0,0 +1,19 @@ +时钟源预分频=0 +采样时间=0 +AIN0=True +AIN1=True +AIN2=True +AIN3=False +AIN4=False +AIN5=False +AIN6=False +AIN7=False +AIN8=False +AIN9=False +采样口选择=1 +中断设置=0 +ADC功能开关选择=True +中断清理标志位=True +$16$AIN2 +$17$AIN1 +$18$AIN0 diff --git a/CFG/SC92F8363B/Temp/PEPCFG_Temp/GPIO.txt b/CFG/SC92F8363B/Temp/PEPCFG_Temp/GPIO.txt new file mode 100644 index 0000000..8f65cc9 --- /dev/null +++ b/CFG/SC92F8363B/Temp/PEPCFG_Temp/GPIO.txt @@ -0,0 +1,2 @@ +[PinNumber]19[/PinNumber][UpperIndex]3[/UpperIndex][Iindex]0[/Iindex][PinName]RX1[/PinName] +[PinNumber]20[/PinNumber][UpperIndex]3[/UpperIndex][Iindex]0[/Iindex][PinName]TX1[/PinName] diff --git a/CFG/SC92F8363B/Temp/PEPCFG_Temp/OPTION.txt b/CFG/SC92F8363B/Temp/PEPCFG_Temp/OPTION.txt new file mode 100644 index 0000000..d066119 --- /dev/null +++ b/CFG/SC92F8363B/Temp/PEPCFG_Temp/OPTION.txt @@ -0,0 +1,9 @@ +系统时钟Fsys=0 +频率(Hz)=[24000000] +Option配置使能=0 +内外振选择=0 +外振频率范围=0 +参考电压选择=0 +复位管脚=0 +LVR 电压选择=0 +IAP操作范围=0 diff --git a/CFG/SC92F8363B/Temp/PEPCFG_Temp/TIM0.txt b/CFG/SC92F8363B/Temp/PEPCFG_Temp/TIM0.txt new file mode 100644 index 0000000..ee3a0cd --- /dev/null +++ b/CFG/SC92F8363B/Temp/PEPCFG_Temp/TIM0.txt @@ -0,0 +1,13 @@ +定时/计数模式=0 +时间设置模式=True +定时设置(us)=[1000] +预分频选择=1 +工作模式=1 +计数初值0=[53536] +计数初值1=[10] +Mode0重载值=[8000] +Mode1重载值=[53536] +Mode3重载值L=[100] +Mode3重载值H=[100] +中断设置=0 +TIM0使能=True diff --git a/CFG/SC92F8363B/Temp/PEPCFG_Temp/UART1.txt b/CFG/SC92F8363B/Temp/PEPCFG_Temp/UART1.txt new file mode 100644 index 0000000..1c247ea --- /dev/null +++ b/CFG/SC92F8363B/Temp/PEPCFG_Temp/UART1.txt @@ -0,0 +1,8 @@ +主频=[12000000] +UART1接收=1 +BaudRate=[9600] +工作模式=0 +中断设置=0 +中断清理标志位=True +$19$RX1模式:带上拉的输入 +$20$TX1模式:带上拉的输入 diff --git a/CFG/SC92F8363B/Temp/PEPCFG_Temp/backup/ADC.txt b/CFG/SC92F8363B/Temp/PEPCFG_Temp/backup/ADC.txt new file mode 100644 index 0000000..6203f00 --- /dev/null +++ b/CFG/SC92F8363B/Temp/PEPCFG_Temp/backup/ADC.txt @@ -0,0 +1,19 @@ +时钟源预分频=0 +采样时间=0 +AIN0=True +AIN1=True +AIN2=True +AIN3=False +AIN4=False +AIN5=False +AIN6=False +AIN7=False +AIN8=False +AIN9=False +采样口选择=1 +中断设置=0 +ADC功能开关选择=True +中断清理标志位=True +$16$AIN2 +$17$AIN1 +$18$AIN0 diff --git a/CFG/SC92F8363B/Temp/PEPCFG_Temp/backup/GPIO.txt b/CFG/SC92F8363B/Temp/PEPCFG_Temp/backup/GPIO.txt new file mode 100644 index 0000000..8f65cc9 --- /dev/null +++ b/CFG/SC92F8363B/Temp/PEPCFG_Temp/backup/GPIO.txt @@ -0,0 +1,2 @@ +[PinNumber]19[/PinNumber][UpperIndex]3[/UpperIndex][Iindex]0[/Iindex][PinName]RX1[/PinName] +[PinNumber]20[/PinNumber][UpperIndex]3[/UpperIndex][Iindex]0[/Iindex][PinName]TX1[/PinName] diff --git a/CFG/SC92F8363B/Temp/PEPCFG_Temp/backup/OPTION.txt b/CFG/SC92F8363B/Temp/PEPCFG_Temp/backup/OPTION.txt new file mode 100644 index 0000000..d066119 --- /dev/null +++ b/CFG/SC92F8363B/Temp/PEPCFG_Temp/backup/OPTION.txt @@ -0,0 +1,9 @@ +系统时钟Fsys=0 +频率(Hz)=[24000000] +Option配置使能=0 +内外振选择=0 +外振频率范围=0 +参考电压选择=0 +复位管脚=0 +LVR 电压选择=0 +IAP操作范围=0 diff --git a/CFG/SC92F8363B/Temp/PEPCFG_Temp/backup/TIM0.txt b/CFG/SC92F8363B/Temp/PEPCFG_Temp/backup/TIM0.txt new file mode 100644 index 0000000..ee3a0cd --- /dev/null +++ b/CFG/SC92F8363B/Temp/PEPCFG_Temp/backup/TIM0.txt @@ -0,0 +1,13 @@ +定时/计数模式=0 +时间设置模式=True +定时设置(us)=[1000] +预分频选择=1 +工作模式=1 +计数初值0=[53536] +计数初值1=[10] +Mode0重载值=[8000] +Mode1重载值=[53536] +Mode3重载值L=[100] +Mode3重载值H=[100] +中断设置=0 +TIM0使能=True diff --git a/CFG/SC92F8363B/Temp/PEPCFG_Temp/backup/UART1.txt b/CFG/SC92F8363B/Temp/PEPCFG_Temp/backup/UART1.txt new file mode 100644 index 0000000..1c247ea --- /dev/null +++ b/CFG/SC92F8363B/Temp/PEPCFG_Temp/backup/UART1.txt @@ -0,0 +1,8 @@ +主频=[12000000] +UART1接收=1 +BaudRate=[9600] +工作模式=0 +中断设置=0 +中断清理标志位=True +$19$RX1模式:带上拉的输入 +$20$TX1模式:带上拉的输入 diff --git a/CFG/SC92F8363B/缁撴瀯鍥.png b/CFG/SC92F8363B/缁撴瀯鍥.png new file mode 100644 index 0000000..354fe1e Binary files /dev/null and b/CFG/SC92F8363B/缁撴瀯鍥.png differ diff --git a/Keil_C/Apps/Uart1.c b/Keil_C/Apps/Uart1.c new file mode 100644 index 0000000..3e85d13 --- /dev/null +++ b/Keil_C/Apps/Uart1.c @@ -0,0 +1,780 @@ +/********************************Copyright (c)**********************************\ +** +** (c) Copyright 2019, China, JS. +** All Rights Reserved +** +** +**----------------------------------文件信息------------------------------------ +** 文件名称: ttl_usart.c +** 创建日期: 2022-05-11 +** 文档描述: ttl_usart +** +**----------------------------------版本信息------------------------------------ +** 版本代号: V0.1 +** 版本说明: 初始版本 +** +********************************End of Head************************************/ + +/* Includes ------------------------------------------------------------------*/ + +/** + * @file uart.c + * @author Nations + * @version v1.0.0 + * + * @copyright Copyright (c) 2022, Nations Technologies Inc. All rights reserved. + */ + +#include + + +#include "SC_Init.h" //MCU Init header,Include all IC resource headers +#include "SC_it.h" +#include "..\Drivers\SCDriver_list.h" +#include "HeadFiles\SysFunVarDefine.h" + +#include "Uart1.h" +#include "Motor.h" + +//微秒延时 +void DelayUs(unsigned int delay) +{ + unsigned int i = 0, j = 0; + for(i = 0; i < delay; i++) + { + for(j = 0; j < 125; j++); + } +} + +//毫秒延时 +void DelayMs(unsigned int delay) +{ + unsigned int i = 0; + for(i = 0; i < delay; i++) + { + DelayUs(1000); + } +} + +#define HD_VER 0001 //硬件版本 +#define SW_VER 0001 //软件版本 + +#define TTL_SEND_BUFF_LEN 60 //发送数据长度 +#define TTL_RECEIVE_BUFF_LEN 60 //接收数据长度 + +//---------------------------------------------------------------- +//uart1用于接收usb转ttl的串口 +//---------------------------------------------------------------- + +//存放发送的数据内容 +uint8_t xdata motor_data[10]; + +//发送buff +uint8_t xdata ttl_send_len = 0; +uint8_t xdata ttl_send_buff[TTL_SEND_BUFF_LEN] = {0}; + +//接收buff +uint8_t xdata ttl_receive_len = 0; +uint8_t xdata ttl_receive_buff[TTL_RECEIVE_BUFF_LEN] = {0}; + +//接收超时 +uint8_t xdata ttl_receive_flag = 0; +uint8_t xdata ttl_receive_cnt = 0; +uint8_t xdata ttl_receive_interval = 0; + +#define DATA_LEN TTL_RECEIVE_BUFF_LEN //一般数据长度 +#define UART_ORDER_SOF 0x05 //起始字 +#define UART_ORDER_END 0x1B //结束字 +#define FIXED_LEN 0x0B //固定长度 //取消RW + +uint16_t xdata SUR_DEVICE_ADDR = 0x00A1; //PC //0x00A1; //设备 +uint16_t xdata OBJ_DEVICE_ADDR = 0x00B1; //主板 //0x00B1; //PC群发 FFFF 0000 + +uint8_t xdata order_flag = 0; +unsigned int xdata checksum = 0, re_status = 0, rec_len = 0, data_len = 0, shouldaccept = 0; + +//单独发送 +void UART1_SendData(uint8_t dat) +{ + SSI_UART1_SendData8(dat); +} + +//发送数据 +void UART1_Send_Char(uint8_t dat) +{ + SSI_UART1_SendData8(dat); +} + +//初始化 +void InitUart_Data(void) +{ + order_flag = 0; + rec_len = 0; + re_status = 0; + shouldaccept = 0; + + ttl_receive_flag = 0; + ttl_receive_cnt = 0; + + checksum = 0; + + for(data_len = 0; data_len < DATA_LEN; data_len++) + { + ttl_receive_buff[data_len] = 0; + } + + data_len = 0; + +// UART_Send_Char(0xdd); +} + + + +/* Private function prototypes -----------------------------------------------*/ +/* Private functions ---------------------------------------------------------*/ +//---------------------------------------------------------------- +//接收串口1 +//---------------------------------------------------------------- +/**************************************************************************************************** + * @brief Download a file via serial port + * @param None + * @retval None + **************************************************************************************************/ +void start_ttl_receive_timer(uint32_t ms) +{ + if(ms == 0) + { + return; + } + + ttl_receive_flag = 1; + ttl_receive_cnt = 0; + ttl_receive_interval = ms; +} + +/**************************************************************************************************** + * @brief Upload a file via serial port. + * @param None + * @retval None + **************************************************************************************************/ +void over_ttl_receive_timer(void) +{ + ttl_receive_flag = 0; + ttl_receive_cnt = 0; + ttl_receive_interval = 0; + + InitUart_Data(); + +// UART2_Send_Char(0xed); +} + +/**************************************************************************************************** + * @brief Display the Main Menu on HyperTerminal + * @param None + * @retval None + **************************************************************************************************/ +void clear_ttl_receive_timer(void) +{ + uint16_t i = 0; + ttl_receive_len = 0; + ttl_receive_flag = 0; + ttl_receive_cnt = 0; + ttl_receive_interval = 0; + + for(i = 0; i < TTL_RECEIVE_BUFF_LEN; i++) + { + ttl_receive_buff[i] = 0; + } +} + +//返回串口屏应答是否接收完成的结果 +//0:没超时 1:超时 +uint8_t judge_ttl_receive_timer(void) +{ + if(ttl_receive_flag == 2) + { + return 1; + } + else + { + return 0; + } +} + +/**************************************************************************************************** + * @brief Display the Main Menu on HyperTerminal + * @param None + * @retval None + **************************************************************************************************/ +//放在大循环中的计时器里 +void process_ttl_receive_timer(void) +{ + if(ttl_receive_flag == 1) + { + ttl_receive_cnt++; + } + + if((ttl_receive_interval > 0) && (ttl_receive_cnt >= ttl_receive_interval)) + { + over_ttl_receive_timer(); + } +} + +#define TTL_OVER_TIME 10 +/**************************************************************************************************** + * @brief Display the Main Menu on HyperTerminal + * @param None + * @retval None + **************************************************************************************************/ +//放串口中断内,接收数据 +void receive_ttl_data(uint8_t rx_data) +{ + //不能超过数组的最大长度 + if(ttl_receive_len < TTL_RECEIVE_BUFF_LEN) + { + //开始计时 + start_ttl_receive_timer(TTL_OVER_TIME); + + //串口接收数据分析 + Do_Receive_Uart_For_Module(rx_data); + } + else //超过上限则抛弃后面的数据 + { + //超时处理 + over_ttl_receive_timer(); + + InitUart_Data(); + + //UART_Send_Char(0xcc); + } +} + +#define CRC_PRESET 0xFFFF +#define CRC_POLYNOM 0x4204 +/*--------------------------------------------------------------------------- +调用方式:unsigned int ModbusCRC16(unsigned char *data_value, unsigned char length) +函数说明:CRC校验 +---------------------------------------------------------------------------*/ +unsigned int ModbusCRC16(unsigned char *data_value, unsigned char length) +{ + unsigned int crc_value = CRC_PRESET; + unsigned char i; + data_value++; + while(length-- != 0) + {//ModbusCRC16(PData, Num + FIXED_LEN - 3); + for(i = 0x01; i != 0; i <<= 1) + { + if((crc_value & 0x0001) != 0) + { + crc_value >>= 1; + crc_value ^= CRC_POLYNOM; + } + else + { + crc_value >>= 1; + } + + if((*data_value & i) != 0) + { + crc_value ^= CRC_POLYNOM; + } + } + data_value++; + } + return(crc_value); +} + +/*--------------------------------------------------------------------------- +调用方式:unsigned int VerfiyRC(unsigned char *data_value, unsigned char length) +函数说明:异或校验 +除了头尾固定,不校验外,其他的校验 +-----------------------------------------------------------------------------*/ +unsigned char VerfiyRC(unsigned char data_value[], unsigned char length) //不用异或校验,用crc校验 +{ + unsigned char i; + unsigned char V_b = data_value[1]; + + for(i = 0x00; i < length; i++) + { + //异或校验 + V_b ^= data_value[i]; + } + + return(V_b); +} + +//发送延时 +void Uart_Send_Delay(unsigned int delay) +{ + unsigned int i = 0, j = 0; + + for(i = 0; i < delay; i++) + { + for(j = 0; j < 125; j++); + } +} + +//校验 + 0X1B +#define VERFIY_TYPE 0 + +/* +SOF: 1个字节 0x05 起始字节 +Len: 2个字节 长度 +Fou_adr: 2个字节 源地址 +Com_adr: 2个字节 目标地址,0ff为广播地址 +Cmd16: 2个字节 命令字 +Request-data: N字节 数据 +XOR: 2个字节 校验 +END: 0x1B 结束字节 +*/ + +//发送数据 +void send_set_resp(unsigned int OrderNum, unsigned int addr, unsigned char Num, unsigned char sData[]) +{ + unsigned int xdata xor_data = 0; + unsigned char xdata PData[TTL_SEND_BUFF_LEN]; + unsigned char xdata i = 0; + + PData[0] = UART_ORDER_SOF; //第一个字节 + PData[1] = (Num + FIXED_LEN) / 0x100; //长度 高8位 + PData[2] = (Num + FIXED_LEN) % 0x100; //长度 低8位 + PData[3] = (addr >> 8) & 0xff; //源地址 + PData[4] = addr & 0xff; //源地址 + PData[5] = (SUR_DEVICE_ADDR >> 8) & 0xff; //目标地址 + PData[6] = SUR_DEVICE_ADDR & 0xff; //目标地址 + PData[7] = (OrderNum >> 8) & 0xff; //命令字 -1 + PData[8] = OrderNum & 0xff; //命令字 -2 + +// PData[6] = RW_Flag; //读写标志 + + for(i = 0; i < Num; i++) //发送数据 + { + PData[FIXED_LEN - 2 + i] = sData[i]; //数据 + } + + //校验 + if(VERFIY_TYPE) //异或校验 + 末尾字节 2字节 + { + xor_data = VerfiyRC(PData, Num + FIXED_LEN - 2); + PData[FIXED_LEN + Num - 2] = xor_data; + PData[FIXED_LEN + Num - 1] = 00; + } + else //CRC校验 2字节 + { + xor_data = ModbusCRC16(PData, Num + FIXED_LEN - 3); + PData[FIXED_LEN + Num - 2] = (xor_data) & 0xff; + PData[FIXED_LEN + Num - 1] = (xor_data >> 8) & 0xff; + } + + PData[FIXED_LEN + Num] = UART_ORDER_END; // 末尾字节 + + //全部发送 + for(i = 0; i < (Num + FIXED_LEN + 1); i++) //一次性发送所有数据 + { + UART1_Send_Char(PData[i]); + //增加延时 + Uart_Send_Delay(50); + } +} + + + +//分析地址是否为本地址 +uint8_t Check_Resive_Addr(uint16_t addr) +{ + //确定是否为接收地址 + if((OBJ_DEVICE_ADDR == addr) || (0xFFFF == addr) || (0x0000 == addr) || (0x00B1 == addr)) + { + return 1; + } + else + { + InitUart_Data(); //2清数据 + return 0; + } +} + + +//接收数据判断(放置串口接收数据内) +void Do_Receive_Uart_For_Module(unsigned char ch) +{ + switch(re_status) + { + case 0 : //0x05 1字节 起始字 + { + if(ch == UART_ORDER_SOF) + { + rec_len = 0; + ttl_receive_buff[rec_len] = ch; + re_status = 1; + shouldaccept = 0; +// UART2_Send_Char(0xaa); + } + } + break; + case 1: //长度 2字节 + { + rec_len++; + ttl_receive_buff[rec_len] = ch; + + if(rec_len >= 2) + { + re_status = 2; + shouldaccept = ttl_receive_buff[1] * 0x100 + ttl_receive_buff[2]; + + if(shouldaccept >= TTL_RECEIVE_BUFF_LEN - 1) + { + InitUart_Data(); + return; + } + } + } + break; + case 2: //命令字 2个字节 05 00 0B 00 C1 00 A1 F0 01 87 1B + { + rec_len++; + + if(rec_len >= TTL_RECEIVE_BUFF_LEN - 1) + { + InitUart_Data(); + return; + } + + ttl_receive_buff[rec_len] = ch; //接收 + + if(rec_len >= shouldaccept) //判断是否接收完成 + { +// uint8_t i = 0; +// UART2_Send_Char(0x30); +// UART2_Send_Char(rec_len); +// UART2_Send_Char(shouldaccept); +// UART2_Send_Char(FIXED_LEN - 1); + +// UART2_Send_Char(rec_len); +// for( i = 0;i < shouldaccept;i++) UART2_Send_Char(ttl_receive_buff[i]); + + //等待处理分析,至少要大于固定长度 +// if(rec_len >= FIXED_LEN - 1) +// { + //判断接收目标地址是否是自己 +// int adr = ttl_receive_buff[3]; +// adr = adr << 8; +// adr |= ttl_receive_buff[4]; + int adr = ttl_receive_buff[5]; + adr = adr << 8; + adr |= ttl_receive_buff[6]; + +//UART2_TxByte(0xAA); +//UART2_TxByte(ttl_receive_buff[3]); +//UART2_TxByte(ttl_receive_buff[4]); +// + if(Check_Resive_Addr(adr)) + { + //命令字 + unsigned int order = 0; + order = ttl_receive_buff[7]; + order = order << 8; + order += ttl_receive_buff[8]; + +// //目标地址 +// OBJ_DEVICE_ADDR = ttl_receive_buff[3]; +// OBJ_DEVICE_ADDR <<= 8; +// OBJ_DEVICE_ADDR += ttl_receive_buff[4]; + +//UART2_Send_Char(order / 0x100); +//UART2_Send_Char(order % 0x100); +//UART2_TxByte(0xBB); +//UART2_TxByte(ttl_receive_buff[7]); +//UART2_TxByte(ttl_receive_buff[8]); + + switch(order) + { + //=================== =================================================== + //设备接收数据 + //====================================================================== + case 0xF001 : //解析数据 + { + order_flag = 1; + } + break; + + case 0xF0C1 : //设置设备加密信息 + { + order_flag = 2; + } + break; + + //====================================================================== + //设备信息 + //====================================================================== + case 0xF111 : //控制参数 + { + order_flag = 3; +// UART2_Send_Char(0x33); + } + break; + + //====================================================================== + //设备信息 + //====================================================================== + case 0xF112 : //读 状态与温度 + { + order_flag = 4; + } + break; + case 0xF102 : //读 状态与温度 + { + order_flag = 4; + } + break; + + //====================================================================== + // + //====================================================================== + default : + { + InitUart_Data(); + } + break; + } + } + else + { + InitUart_Data(); + return; + } + } +// } + } + break; + + default : + InitUart_Data(); + break; + } +} + +//数据长度 +uint8_t Get_Data_Len(void) +{ + uint16_t Re_Len = 0; + Re_Len = (ttl_receive_buff[1] * 0x100 + ttl_receive_buff[2]) - FIXED_LEN; + return Re_Len; +} + +//检查校验 +unsigned char Check_VerfiyData(void) +{ + return 1; //调试期间,不用验证 + + if(VERFIY_TYPE) //异或校验 + 末尾字节 + { + unsigned char v_A = 0; + unsigned char v_B = 0; + v_A = ttl_receive_buff[shouldaccept]; + v_B = VerfiyRC(ttl_receive_buff, shouldaccept - 2); + + if(v_A == v_B) //数据的完整性 + { + //结尾数据相同 + if(ttl_receive_buff[shouldaccept + 1] == UART_ORDER_END) + { + + } + else + { + return 0; + } + } + else + { + return 0; + } + } + else //判断CRC校验 + { + unsigned int CRC16 = 0; + unsigned int Get_CRC16 = 0; + CRC16 = ttl_receive_buff[shouldaccept]; + CRC16 = CRC16 << 8; + CRC16 += ttl_receive_buff[shouldaccept - 1]; + + Get_CRC16 = ModbusCRC16(ttl_receive_buff, shouldaccept - 2); + + if(CRC16 == Get_CRC16) //数据的完整性 + { + + } + else + { + InitUart_Data(); + return 0; + } + } + + return 1; +} + + +//数据接收分析(放置大循环内) +void Deal_Uart_Data_For_Module(void) +{ + if(order_flag) //有接收的指令 + { + //校验 + if(Check_VerfiyData() == 1) //测试 + { + switch(order_flag) + { + //-------------------------------------------------------------------- + // + //-------------------------------------------------------------------- + case 1 : //数据解析 + { + uint8_t xdata i = 0; //临时变量 + uint8_t xdata len = 0; //长度 + uint8_t xdata temp[DATA_LEN]; + + //发送标志 + send_flag = 0; + + //数据长度 + len = Get_Data_Len(); + + //解析数据 + for(i = 0; i < len; i++) + { + temp[i] = ttl_receive_buff[i + FIXED_LEN - 2]; + } + + //角行程 、直行程 + Travle_Flag = temp[0]; //0 直 1 角 + Motor_Run = temp[1]; //0 停止 1 运行 2 运行到起始点 3 运行到结束点 + Run_Mode = temp[2]; //0 点动 1 方案一 2 方案二 + + Run_Step = temp[3]; //电机运行多少圈为一个步长 + Run_Step <<= 8; + Run_Step += temp[4]; + + Run_Inter = temp[5]; //电机运行间隔时长 + Run_Inter <<= 8; + Run_Inter += temp[6]; + + Run_Stop = temp[7]; //到“结束点”后,停止时间 + Run_Stop <<= 8; + Run_Stop += temp[8]; + + ClrRunmotorStep();//清除电机标记 + + } + break; + + case 2 : // + { + uint8_t i = 0; + uint8_t len = 0; + uint8_t temp[DATA_LEN]; + + send_set_resp(0xF0C1, OBJ_DEVICE_ADDR, len, temp); + + } + break; + + //-------------------------------------------------------------------- + //LED 控制 + //-------------------------------------------------------------------- + case 3 : //F111 05 00 0C 00 A1 00 C1 F1 01 05 03 50 87 1B + { + u8 addr = 0; + addr = ttl_receive_buff[FIXED_LEN - 2]; + if(addr == ((SUR_DEVICE_ADDR & 0xf0) == 0xC0)) + { + + } + } + break; + + //====================================================================== + // + //====================================================================== + case 4 : // + { + + + } + break; + + //-------------------------------------------------------------------- + //实时信息 + //-------------------------------------------------------------------- + case 5 : // + { + uint8_t len = 0; + uint8_t temp[DATA_LEN]; + + + + temp[0] = (SUR_DEVICE_ADDR >> 8) & 0xff; + temp[1] = (SUR_DEVICE_ADDR >> 0) & 0xff; + +// //版本号 4 + temp[2] = HD_VER >> 8; //HD_VER 0101 //硬件版本号 + temp[3] = HD_VER & 0xff; + + temp[4] = SW_VER >> 8; //SW_VER 0101 //软件版本号 + temp[5] = SW_VER & 0xff; + + len = 6; + send_set_resp(0xF113, OBJ_DEVICE_ADDR, len, temp); + } + break; + case 6 : // 设置 地址 + 版本号 F1D3 05 00 0D 00 A1 00 00 F1 D3 00 C1 07 A9 1B + { + + uint8_t i = 0; + uint8_t len = 0; + uint8_t temp[DATA_LEN]; + + //数据长度 + len = Get_Data_Len(); + + for(i = 0; i < len; i++) + { + temp[i] = ttl_receive_buff[i + FIXED_LEN - 2]; + } + + + send_set_resp(0xF1C3, OBJ_DEVICE_ADDR, len, temp); + } + break; + case 7 : //更新程序 + { + + } + break; + + //-------------------------------------------------------------------- + //设备信息 + //-------------------------------------------------------------------- + case 10 : //F115 05 00 0A 00 C1 00 A1 F1 05 50 87 1B + { + + + } + break; + + + default : + { + + } + break; + } + } + + //清空数据 + InitUart_Data(); + } +} + + diff --git a/Keil_C/Apps/Uart1.h b/Keil_C/Apps/Uart1.h new file mode 100644 index 0000000..e414d26 --- /dev/null +++ b/Keil_C/Apps/Uart1.h @@ -0,0 +1,66 @@ +//微秒延时 +extern void DelayUs(unsigned int delay); + +//毫秒延时 +extern void DelayMs(unsigned int delay); + + +//接收数据判断(放置串口接收数据内) +extern void Do_Receive_Uart_For_Module(unsigned char ch); + +//单独发送 +extern void UART1_SendData(uint8_t dat); + +//发送数据 +extern void UART1_Send_Char(uint8_t dat); + +//发送一个字符串 +//extern void send_string(uchar *p); + +//初始化 +extern void InitUart_Data(void); + +//接收串口1 +extern void start_ttl_receive_timer(uint32_t ms); + +extern void over_ttl_receive_timer(void); + +extern void clear_ttl_receive_timer(void); + + +//返回串口屏应答是否接收完成的结果 +//0:没超时 1:超时 +extern uint8_t judge_ttl_receive_timer(void); + +//放在大循环中的计时器里 +extern void process_ttl_receive_timer(void); + +//放串口中断内,接收数据 +extern void receive_ttl_data(uint8_t rx_data); + +//CRC校验 +extern unsigned int ModbusCRC16(unsigned char *data_value, unsigned char length); + +//异或校验 +extern unsigned char VerfiyRC(unsigned char data_value[], unsigned char length); + +//发送延时 +extern void Uart_Send_Delay(unsigned int delay); + +//发送数据 +extern void send_set_resp(unsigned int OrderNum, unsigned int addr, unsigned char Num, unsigned char sData[]); + +//分析地址是否为本地址 +extern uint8_t Check_Resive_Addr(uint16_t addr); + +//接收数据判断(放置串口接收数据内) +extern void Do_Receive_Uart_For_Module(unsigned char ch); + +//数据长度 +extern uint8_t Get_Data_Len(void); + +//检查校验 +extern unsigned char Check_VerfiyData(void); + +//数据接收分析(放置大循环内) +extern void Deal_Uart_Data_For_Module(void); diff --git a/Keil_C/Apps/adc.c b/Keil_C/Apps/adc.c new file mode 100644 index 0000000..9a816b3 --- /dev/null +++ b/Keil_C/Apps/adc.c @@ -0,0 +1,83 @@ +#include "SC_Init.h" //MCU Init header,Include all IC resource headers +#include "SC_it.h" +#include "..\Drivers\SCDriver_list.h" +#include "HeadFiles\SysFunVarDefine.h" + +#include "adc.h" +#include "Uart1.h" + +unsigned int xdata ADC_Value0 = 0,ADC_Value1 = 0,ADC_Value2 = 0; + +unsigned int xdata ADC_NUM1=0; +//获取adc转换数值 +unsigned int ADC_Convert(void) +{ + unsigned int xdata Tad = 0,MinAd1 = 0x0fff,MaxAd1 = 0x0000,MinAd2 = 0x0fff,MaxAd2 = 0x0000,TempAdd = 0; + unsigned char xdata t = 0; + for(t = 0;t < 10;t++) + { + ADCCON |= 0X40; //开始 ADC 转换 + while(!(ADCCON & 0x20));//等待 ADC 转换完成,不同型号的转换完成标志位位置不同,部分型号在 Bit5,部分型号在Bit4,具体请参照规格。 + //清中断标志位 + ADCCON &= ~(0X20); + Tad = ((unsigned int)ADCVH << 4) + (ADCVL >> 4); //取得一次转换值 + ADC_NUM1=Tad; + if(Tad > MaxAd1) + { + MaxAd1 = Tad;//获得当前的最大值 + } +// else +// { +// if(Tad > MaxAd2) +// MaxAd2 = Tad; +// } + if (Tad < MinAd1) + { + MinAd1 = Tad;//获得当前的最小值 + } +// else +// { +// if(Tad > MinAd2) +// MinAd2 = Tad; +// } + TempAdd += Tad; + } + + //转换值累加 + TempAdd -= MinAd1;//去掉最小值 + TempAdd -= MaxAd1;//去掉最大值 +// TempAdd -= MinAd2;//去掉第二最小值 +// TempAdd -= MaxAd2;//去掉第二最大值 + //TempAdd = TempAdd / 16; + TempAdd >>= 3; //求平均值 + return TempAdd; +} + +//切换ADC入口 +void ADC_channel(unsigned char ADC_Channel) +{ + ADCCFG0 = 0x07; + ADCCON = 0xE0 | ADC_Channel; +} + +extern uint8_t xdata motor_data[]; +void ADC_Multichannel(void) +{ + uint8_t xdata temp_h,temp_l; //定义高八位和低八位 + + ADC_channel(1); //ADC 入口切换至 AIN1 口,采集电压信号 + ADC_Value1 = ADC_Convert(); //启动 ADC 转换,获得转换值 + temp_h = (ADC_Value1 & 0xff00) >> 8;//高8位的值 + temp_l = ADC_Value1 & 0x00ff; //低8位的值 + motor_data[4] = temp_h; + motor_data[5] = temp_l; + + ADC_channel(2); //ADC 入口切换至 AIN2 口,采集激光测距信号 + ADC_Value2 = ADC_Convert(); //启动 ADC 转换,获得转换值 + temp_h = (ADC_Value2 & 0xff00) >> 8;//高8位的值 + temp_l = ADC_Value2 & 0x00ff; //低8位的值 + motor_data[6] = temp_h; + motor_data[7] = temp_l; +} + + diff --git a/Keil_C/Apps/adc.h b/Keil_C/Apps/adc.h new file mode 100644 index 0000000..d82edfd --- /dev/null +++ b/Keil_C/Apps/adc.h @@ -0,0 +1,10 @@ + +//获取adc转换数值 +extern unsigned int ADC_Convert(void); +//切换ADC入口 +extern void ADC_channel(unsigned char ADC_Channel); + +extern void ADC_Multichannel(void); + + + diff --git a/Keil_C/Apps/motor.c b/Keil_C/Apps/motor.c new file mode 100644 index 0000000..b9408f9 --- /dev/null +++ b/Keil_C/Apps/motor.c @@ -0,0 +1,1004 @@ +#include "motor.h" + +#define STEP_LIN 16 //直行程步长单位数值(脉冲数) +#define STEP_ROT 20 //角行程步长单位数值(脉冲数) +#define DATA_LEN 10 //角行程步长单位数值(脉冲数) + +bit Travle_Flag = 0; //0 直 1 角 +char xdata Motor_Run = 0; //0 停止 1 运行 2 运行到起始点 3 运行到结束点 +char xdata Run_Mode = 0; //0 点动 1 方案一 2 方案二 +unsigned int xdata Run_Step = 0; //电机运行步长 +unsigned int xdata Run_Inter = 0; //电机运行间隔时长 +unsigned int xdata Run_Stop = 0; //到“结束点”后,停止时间 +unsigned int xdata Run_mm = 0; //行进长度(mm)/转动角度(°) +unsigned int xdata Run_num = 0; //角行程电机转动圈数 +unsigned int xdata ct_num = 0; //磁条长度 + +bit mov_flag = 0; //脉冲标志 +bit send_flag = 0; //发送标志 +bit seat_flag = 0; //位置标志 +bit motor_dire = 1; //电机转动方向 +bit flag = 0; + + +//步骤 +unsigned char xdata Runmotor_step = 0; + +//次数 +unsigned int xdata Runmotor_Nums = 0; + +//电机启动 +void motor_start(void) +{ + GPIO_Init(GPIO1, GPIO_PIN_7,GPIO_MODE_OUT_PP);//脉冲引脚设置为输出模式,电机可收到脉冲信号 + GPIO_WriteHigh(GPIO1,GPIO_PIN_7); + motor_data[1] = 0x01;//电机启动,对应数据01 +} + +//电机停止 +void motor_stop(void) +{ + GPIO_WriteHigh(GPIO1,GPIO_PIN_7); + GPIO_Init(GPIO1, GPIO_PIN_7,GPIO_MODE_IN_HI);//脉冲引脚设置为输入模式,电机无法收到脉冲信号 + motor_data[1] = 0x00;//电机停止,对应数据00 +} + +//正转 +void FWD(void) +{ + GPIO_WriteLow(GPIO1,GPIO_PIN_6);//引脚电平置低,电机正转 +} + +//反转 +void REV(void) +{ + GPIO_WriteHigh(GPIO1,GPIO_PIN_6);//引脚电平置高,电机反转 +} + + + +//清除电机标记 +void ClrRunmotorStep(void) +{ + //步骤 + Runmotor_step = 0; + //次数 + Runmotor_Nums = 0; + //脉冲标记清0 + mov_flag = 0; + //发送标记清0 + send_flag = 0; + //位置标记清0 + seat_flag = 0; +} + +//处理马达运行 +void Deal_Motor(void) +{ + //判断直行程还是角行程 + if(Travle_Flag == 0)//直行程——电机旋转一圈,磁条水平位移5mm + { + motor_data[0] = 0x00;//00 直行程 01 角行程 + //判断电机停止还是运行,运行到起始位还是结束位 + if( Motor_Run == 0)//停止 + { + motor_stop(); + } + else if(Motor_Run == 1)//运行 + { + if(Motor_Run >= 1 && Runmotor_step == 0) + { + Runmotor_step = 1; + } + + //判断电机运行方式是点动还是连续,点动为方案三,方案一和方案二为连续 + if(Run_Mode == 0)//点动(方案三) + { + motor_data[2] = 0x00;//发送时反馈的数据 + mov_step();//点动 + } + else if(Run_Mode == 1)//连续(方案一)“步长过大可能会越过限位开关” + { + motor_data[2] = 0x01;//发送时反馈的数据 + mov_loop1();//方案一 + } + else if(Run_Mode == 2)//连续(方案二)“步长过大可能会越过限位开关” + { + motor_data[2] = 0x02;//发送时反馈的数据 + //磁条循环“起始点-结束点-起始点”,一定次数后停在起始点 + mov_loop2();//方案二 + } + else//初始化 + { + motor_stop(); + } + } + else if(Motor_Run == 2)//运行到起始位 + { + mov_begin();//回到起始位 + } + else if(Motor_Run == 3)//运行到结束位 + { + mov_end();//移动至结束位 + } + else//数据错误 + SC_Init(); + } + else //角行程——电机旋转一圈,磁条旋转4° + { + motor_data[0] = 0x01;//00 直行程 01 角行程 + //判断电机停止还是运行,运行到起始位还是结束位 + if( Motor_Run == 0)//停止 + { + motor_stop(); + } + else if(Motor_Run == 1)//运行 + { + if(Motor_Run >= 1 && Runmotor_step == 0) + { + Runmotor_step = 1; + } + + //判断电机运行方式是点动还是连续,点动为方案三,方案一和方案二为连续 + if(Run_Mode == 0)//点动(方案三) + { + motor_data[2] = 0x00;//发送时反馈的数据 + mov_step_ang();//电机点动运行 + } + else if(Run_Mode == 1)//连续(方案一) + { + motor_data[2] = 0x01;//发送时反馈的数据 + mov_loop1_ang();//磁条旋转一圈 + } + else if(Run_Mode == 2)//连续(方案二) + { + motor_data[2] = 0x02;//发送时反馈的数据 + if(seat_flag == 0) + { + if(GPIO_ReadPin(GPIO1,GPIO_PIN_4) == 0) //判断是否到达限位处 + { + motor_stop(); //电机停止 + Run_mm = 0; + seat_flag = 1;//位置标记 + } + else + { + REV(); //反转 + motor_start(); //运行 + motor_mov(1); //提供脉冲信号 + } + } + else + { + mov_loop2_ang();//磁条旋转一圈 + } + } + else//初始化 + { + motor_stop(); + } + } + else if(Motor_Run == 2 || Motor_Run == 3)//运行到起始位 + { + mov_begin();//回到起始位 + } + else//数据错误 + SC_Init(); + } +} + + +/***************************************************** +*函数名称: motor_mov +*函数功能: 电机速度控制 +*参数说明:speed 电机速度设定值,1为最快,5为最慢 +*****************************************************/ +void motor_mov(unsigned int speed) +{ + switch(speed)//控制电机速度,设定有五档速度 + { + //脉冲周期2ms + case 1: + { + if(it_1ms_flag) //检查1ms定时标志 + { + it_1ms_flag = 0;//定时标志清零 + if(mov_flag) + { + mov_flag = 0; + GPIO_WriteHigh(GPIO1,GPIO_PIN_7);//P1.7引脚拉高 + } + else + { + mov_flag = 1; + GPIO_WriteLow(GPIO1,GPIO_PIN_7);//P1.7引脚拉低 + } + Runmotor_Nums++; //运行次数 + } + } + break; + //脉冲周期4ms + case 2: + { + if(it_2ms_flag)//检查2ms定时标志 + { + it_2ms_flag = 0;//定时标志清零 + if(mov_flag) + { + mov_flag = 0; + GPIO_WriteHigh(GPIO1,GPIO_PIN_7);//P1.7引脚拉高 + } + else + { + mov_flag = 1; + GPIO_WriteLow(GPIO1,GPIO_PIN_7);//P1.7引脚拉低 + } + Runmotor_Nums++; //运行次数 + } + } + break; + //脉冲周期6ms + case 3: + { + if(it_3ms_flag)//检查3ms定时标志 + { + it_3ms_flag = 0;//定时标志清零 + if(mov_flag) + { + mov_flag = 0; + GPIO_WriteHigh(GPIO1,GPIO_PIN_7);//P1.7引脚拉高 + } + else + { + mov_flag = 1; + GPIO_WriteLow(GPIO1,GPIO_PIN_7);//P1.7引脚拉低 + } + Runmotor_Nums++; //运行次数 + } + } + break; + //脉冲周期8ms + case 4: + { + if(it_4ms_flag)//检查4ms定时标志 + { + it_4ms_flag = 0;//定时标志清零 + if(mov_flag) + { + mov_flag = 0; + GPIO_WriteHigh(GPIO1,GPIO_PIN_7);//P1.7引脚拉高 + } + else + { + mov_flag = 1; + GPIO_WriteLow(GPIO1,GPIO_PIN_7);//P1.7引脚拉低 + } + Runmotor_Nums++; //运行次数 + } + } + break; + //脉冲周期10ms + case 5: + { + if(it_5ms_flag)//检查5ms定时标志 + { + it_5ms_flag = 0;//定时标志清零 + if(mov_flag) + { + mov_flag = 0; + GPIO_WriteHigh(GPIO1,GPIO_PIN_7);//P1.7引脚拉高 + } + else + { + mov_flag = 1; + GPIO_WriteLow(GPIO1,GPIO_PIN_7);//P1.7引脚拉低 + } + Runmotor_Nums++; //运行次数 + } + } + break; + default : + break; + } +} + + + +//电机连续运行,方案一(直行程) +void mov_loop1(void) +{ + if(Run_Step == 0) return;//步长不能为0 + + switch(Runmotor_step) + { + case 1 : //电机运行准备 + { + + FWD(); //正转 + motor_dire = 1; + Run_mm = 0; + Run_num = 0; + motor_data[2] = 0x00; //发送时反馈的数据 + Runmotor_Nums = 0; //运行次数 + mov_flag = 0; + Runmotor_step++; + } + break; + case 2 : //电机运行过程 + { + if(GPIO_ReadPin(GPIO0,GPIO_PIN_5) == 0) //光栅信号判断 + { + if(it_1s_flag) //检查1ms定时标志 + { + it_1s_flag = 0;//定时标志清零 + Runmotor_Nums++; + } + if(Runmotor_Nums >= Run_Stop)//时间 + { + Runmotor_step++; + motor_data[8] = ((Run_mm * Run_Step) & 0xff00) >> 8;//磁条长度高8位 + motor_data[9] = (Run_mm * Run_Step) & 0x00ff; //磁条长度低8位 + motor_seat(); //读取电机当前位置 + send_set_resp(0xF001, OBJ_DEVICE_ADDR, DATA_LEN, motor_data);//数据发送 + } + } + else + { + if(send_flag == 0) + { + send_flag = 1; + motor_seat();//读取电机当前位置 + send_set_resp(0xF001, OBJ_DEVICE_ADDR, DATA_LEN, motor_data);//数据发送 + } + motor_start(); //运行 + motor_mov(1); //运行1个脉冲 + Run_mm = 1; //磁条移动距离清0 + Runmotor_Nums = 0; //计数清零 + Runmotor_step = 6; + } + } + break; + case 3 : //延时 + { + if(motor_dire == 1) + { + motor_start(); //运行 + motor_mov(1); //运行1个脉冲 + if(Runmotor_Nums >= (Run_Step * STEP_LIN))//运行一个步长,脉冲数由驱动器的细分数决定 + { + Runmotor_Nums = 0; //计数清零 + motor_stop(); //马达停止 + motor_data[1] = 0x01; //电机启动,对应数据01 + motor_data[3] = 0x03; //电机方向——始终 + Run_mm++; //磁条移动距离加1 + ct_num = Run_mm; //磁条长度 + motor_data[8] = ((Run_mm * Run_Step) & 0xff00) >> 8;//磁条长度高8位 + motor_data[9] = (Run_mm * Run_Step) & 0x00ff; //磁条长度低8位 + Runmotor_step++; + } + } + else + { + motor_start(); //运行 + motor_mov(1); //运行1个脉冲 + if(Runmotor_Nums >= (Run_Step * STEP_LIN))//运行一个步长,脉冲数由驱动器的细分数决定 + { + Runmotor_Nums = 0; //计数清零 + motor_stop(); //马达停止 + motor_data[1] = 0x01; //电机启动,对应数据01 + motor_data[3] = 0x04; //电机方向——终始 + ct_num = ct_num - 1; //磁条长度 + Run_mm = ct_num; //磁条移动距离减1 + motor_data[8] = ((Run_mm * Run_Step) & 0xff00) >> 8;//磁条长度高8位 + motor_data[9] = (Run_mm * Run_Step) & 0x00ff; //磁条长度低8位 + Runmotor_step++; + } + } + } + break; + case 4 : //延时 + { + if(it_1ms_flag) //检查1ms定时标志 + { + it_1ms_flag = 0;//定时标志清零 + Runmotor_Nums++; + } + if(Runmotor_Nums >= Run_Inter)//时间 + { + + Runmotor_Nums = 0; + Runmotor_step++; + send_flag = 0; + //motor_seat(); //读取电机当前位置 + send_set_resp(0xF001, OBJ_DEVICE_ADDR, DATA_LEN, motor_data);//数据发送 + } + + } + break; + case 5 : + { + if(GPIO_ReadPin(GPIO0,GPIO_PIN_5) == 1 )//光栅信号判断 + { + if(flag == 0) + { + Runmotor_Nums = 0; + Runmotor_step = 3; + if(motor_dire == 1) + { + REV(); + flag = 1; + motor_dire = 0; + } + else + { + Motor_Run = 2; //运行标记改变,电机回到初始位 + } + } + else + { + Runmotor_step = 3; + } + } + else + { + Runmotor_step = 3; + flag = 0 ; + } + } + break; + case 6 : + { + if(GPIO_ReadPin(GPIO1,GPIO_PIN_4) == 0)//起始点限位 + { + FWD();//正转 + motor_dire = 1;//电机转动方向 + } + if(GPIO_ReadPin(GPIO1,GPIO_PIN_5) == 0)//结束点限位 + { + REV();//反转 + motor_dire = 0;//电机转动方向 + } + Runmotor_step = 2; + } + break; + default : + { + + } + break; + } +} + +//电机连续运行,方案一(角行程) +void mov_loop1_ang(void) +{ + if(Run_Step == 0) return;//步长不能为0 + + switch(Runmotor_step) + { + case 1 : //电机运行准备 + { + FWD();//正转 + motor_dire = 1; + motor_data[2] = 0x00;//发送时反馈的数据 + Runmotor_Nums = 0; //运行次数 + mov_flag = 0; + Run_mm = 0; + Run_num = 0; + Runmotor_step++; + } + break; + case 2 : //电机运行过程 + { + if(motor_dire == 1) + { + FWD();//正转 + motor_start(); //运行 + motor_mov(1); //运行1个脉冲 + if(Runmotor_Nums >= (Run_Step * STEP_ROT))//运行一个步长,脉冲数由驱动器的细分数决定 + { + Runmotor_Nums = 0; //计数清零 + motor_stop(); //马达停止 + motor_data[1] = 0x01; //电机启动,对应数据01 + motor_data[3] = 0x03; //电机方向——始终 + Run_mm++; //磁条移动距离加1 + Run_num = Run_mm * Run_Step; + motor_data[8] = (Run_num & 0xff00) >> 8;//磁条长度高8位 + motor_data[9] = Run_num & 0x00ff; //磁条长度低8位 + Runmotor_step++; + } + } + else + { + REV();//反转 + motor_start(); //运行 + motor_mov(1); //运行1个脉冲 + if(Runmotor_Nums >= (Run_Step * STEP_ROT))//运行一个步长,脉冲数由驱动器的细分数决定 + { + Runmotor_Nums = 0; //计数清零 + motor_stop(); //马达停止 + motor_data[1] = 0x01; //电机启动,对应数据01 + motor_data[3] = 0x04; //电机方向——终始 + Run_mm--; //磁条移动距离减1 + Run_num = Run_mm * Run_Step; + motor_data[8] = (Run_num & 0xff00) >> 8;//磁条长度高8位 + motor_data[9] = Run_num & 0x00ff; //磁条长度低8位 + Runmotor_step++; + } + } + } + break; + case 3 : //延时 + { + if(it_1ms_flag) //检查1ms定时标志 + { + it_1ms_flag = 0;//定时标志清零 + Runmotor_Nums++; + } + if(Runmotor_Nums >= Run_Inter)//时间 + { + Runmotor_Nums = 0; + Runmotor_step++; + //motor_seat(); //读取电机当前位置 + send_set_resp(0xF001, OBJ_DEVICE_ADDR, DATA_LEN, motor_data);//数据发送 + } + } + break; + case 4 : + { + if(Run_num >= Run_Stop * 10&& motor_dire == 1)//判断磁条是否转动设定的角度 + { + motor_dire = 0; + Runmotor_step = 2; + } + else if(Run_num <= 0 && motor_dire == 0) + { + //motor_dire = 1; + Motor_Run = 1; + } + else + { + Runmotor_step = 2; + } + } + break; + default : + { + + } + break; + } +} + + +//电机连续运行,方案二(直行程) +void mov_loop2(void) +{ + if(Run_Step == 0) return;//步长不能为0 + + switch(Runmotor_step) + { + case 1 : //电机运行准备 + { + + FWD();//正转 + motor_dire = 1; + motor_data[2] = 0x00;//发送时反馈的数据 + Runmotor_Nums = 0; //运行次数 + mov_flag = 0; // + Runmotor_step++; + } + break; + case 2 : //电机运行过程 + { + if(GPIO_ReadPin(GPIO0,GPIO_PIN_5) == 0)//光栅信号判断 + { + + if(it_1s_flag) //检查1ms定时标志 + { + it_1s_flag = 0;//定时标志清零 + Runmotor_Nums++; + } + if(Runmotor_Nums >= Run_Stop)//时间 + { + Runmotor_step++; + motor_data[8] = ((Run_mm * Run_Step) & 0xff00) >> 8;//磁条长度高8位 + motor_data[9] = (Run_mm * Run_Step) & 0x00ff; //磁条长度低8位 + motor_seat(); //读取电机当前位置 + send_set_resp(0xF001, OBJ_DEVICE_ADDR, DATA_LEN, motor_data);//数据发送 + }//Run_mm = 1; //磁条移动距离置1 + + } + else + { + if(send_flag == 0) + { + send_flag = 1; + motor_seat();//读取电机当前位置 + send_set_resp(0xF001, OBJ_DEVICE_ADDR, DATA_LEN, motor_data);//数据发送 + } + motor_start(); //运行 + motor_mov(1); //运行1个脉冲 + Run_mm = 1; //磁条移动距离清0 + Runmotor_Nums = 0; //计数清零 + Runmotor_step = 6; + } + } + break; + case 3 : //延时 + { + if(motor_dire == 1) + { + motor_start(); //运行 + motor_mov(1); //运行1个脉冲 + if(Runmotor_Nums >= (Run_Step * STEP_LIN))//运行一个步长,脉冲数由驱动器的细分数决定 + { + Runmotor_Nums = 0; //计数清零 + motor_stop(); //马达停止 + motor_data[1] = 0x01; //电机启动,对应数据01 + motor_data[3] = 0x03; //电机方向——始终 + Run_mm++; //磁条移动距离加1 + ct_num = Run_mm; //磁条长度 + motor_data[8] = ((Run_mm * Run_Step) & 0xff00) >> 8;//磁条长度高8位 + motor_data[9] = (Run_mm * Run_Step) & 0x00ff; //磁条长度低8位 + Runmotor_step++; + } + } + else + { + motor_start(); //运行 + motor_mov(1); //运行1个脉冲 + if(Runmotor_Nums >= (Run_Step * STEP_LIN))//运行一个步长,脉冲数由驱动器的细分数决定 + { + Runmotor_Nums = 0; //计数清零 + motor_stop(); //马达停止 + motor_data[1] = 0x01; //电机启动,对应数据01 + motor_data[3] = 0x04; //电机方向——终始 + ct_num = ct_num - 1; //磁条长度 + Run_mm = ct_num; //磁条移动距离减1 + motor_data[8] = ((Run_mm * Run_Step) & 0xff00) >> 8;//磁条长度高8位 + motor_data[9] = (Run_mm * Run_Step) & 0x00ff; //磁条长度低8位 + Runmotor_step++; + } + } + } + break; + case 4 : //延时 + { + if(it_1ms_flag) //检查1ms定时标志 + { + it_1ms_flag = 0;//定时标志清零 + Runmotor_Nums++; + } + if(Runmotor_Nums >= Run_Inter)//时间 + { + + Runmotor_Nums = 0; + Runmotor_step++; + send_flag = 0; + //motor_seat(); //读取电机当前位置 + send_set_resp(0xF001, OBJ_DEVICE_ADDR, DATA_LEN, motor_data);//数据发送 + } + + } + break; + case 5 : + { + if(GPIO_ReadPin(GPIO0,GPIO_PIN_5) == 1 )//光栅信号判断 + { + if(flag == 0) + { + Runmotor_Nums = 0; + Runmotor_step = 3; + if(motor_dire == 1) + { + REV(); + flag = 1; + motor_dire = 0; + } + else + { + FWD(); + flag = 1; + motor_dire = 1; + } + } + else + { + Runmotor_step = 3; + } + } + else + { + Runmotor_step = 3; + flag = 0 ; + } + } + break; + case 6 : + { + if(GPIO_ReadPin(GPIO1,GPIO_PIN_4) == 0)//起始点限位 + { + FWD();//正转 + motor_dire = 1;//电机转动方向 + } + if(GPIO_ReadPin(GPIO1,GPIO_PIN_5) == 0)//结束点限位 + { + REV();//反转 + motor_dire = 0;//电机转动方向 + } + Runmotor_step = 2; + } + break; + + default : + { + + } + break; + } +} + +//电机连续运行,方案二(角行程) +void mov_loop2_ang(void) +{ + if(Run_Step == 0) return;//步长不能为0 + + switch(Runmotor_step) + { + case 1 : //电机运行准备 + { + FWD();//正转 + motor_dire = 1; + motor_data[2] = 0x00;//发送时反馈的数据 + Runmotor_Nums = 0; //运行次数 + mov_flag = 0; + Runmotor_step++; + } + break; + case 2 : //电机运行过程 + { + if(motor_dire == 1) + { + FWD();//正转 + motor_start(); //运行 + motor_mov(1); //运行1个脉冲 + if(Runmotor_Nums >= (Run_Step * STEP_ROT))//运行一个步长,脉冲数由驱动器的细分数决定 + { + Runmotor_Nums = 0; //计数清零 + motor_stop(); //马达停止 + motor_data[1] = 0x01; //电机启动,对应数据01 + motor_data[3] = 0x03; //电机方向——始终 + Run_mm++; //磁条移动距离加1 + Run_num = Run_mm * Run_Step; + motor_data[8] = (Run_num & 0xff00) >> 8;//磁条长度高8位 + motor_data[9] = Run_num & 0x00ff; //磁条长度低8位 + Runmotor_step++; + } + } + else + { + REV();//反转 + motor_start(); //运行 + motor_mov(1); //运行1个脉冲 + if(Runmotor_Nums >= (Run_Step * STEP_ROT))//运行一个步长,脉冲数由驱动器的细分数决定 + { + Runmotor_Nums = 0; //计数清零 + motor_stop(); //马达停止 + motor_data[1] = 0x01; //电机启动,对应数据01 + motor_data[3] = 0x04; //电机方向——终始 + Run_mm--; //磁条移动距离减1 + Run_num = Run_mm * Run_Step; + motor_data[8] = (Run_num & 0xff00) >> 8;//磁条长度高8位 + motor_data[9] = Run_num & 0x00ff; //磁条长度低8位 + Runmotor_step++; + } + } + } + break; + case 3 : //延时 + { + if(it_1ms_flag) //检查1ms定时标志 + { + it_1ms_flag = 0;//定时标志清零 + Runmotor_Nums++; + } + if(Runmotor_Nums >= Run_Inter)//时间 + { + Runmotor_Nums = 0; + Runmotor_step++; + //motor_seat(); //读取电机当前位置 + send_set_resp(0xF001, OBJ_DEVICE_ADDR, DATA_LEN, motor_data);//数据发送 + } + } + break; + case 4 : + { + if(Run_num >= Run_Stop * 10)//判断磁条是否转动设定的角度 + { + motor_dire = 0; + Runmotor_step = 2; + } + else if(Run_num <= 0) + { + motor_dire = 1; + Runmotor_step = 2; + } + else + { + Runmotor_step = 2; + } + } + break; + default : + { + + } + break; + } +} + +//电机点动运行,方案三(直行程) +void mov_step(void) +{ + if(Run_Step == 0) return;//步长不能为0 + + switch(Runmotor_step) + { + case 1 : //电机运行准备 + { + motor_start(); //运行 + if(GPIO_ReadPin(GPIO1,GPIO_PIN_4) == 0)//判断是否到达始限位 + FWD(); //正转 + if(GPIO_ReadPin(GPIO1,GPIO_PIN_5) == 0)//判断是否到达终限位 + REV(); //反转 + Runmotor_Nums = 0; //运行次数 + mov_flag = 0; + Runmotor_step++; + } + break; + case 2 : //电机运行过程 + { + motor_mov(1);//运行1个脉冲 + if(Runmotor_Nums >= (Run_Step * STEP_LIN))//运行一个步长,脉冲数由驱动器的细分数决定 + { + Runmotor_Nums = 0; + motor_stop(); //马达停止 + Runmotor_step++; + Run_mm++; //磁条移动距离加1 + Run_num = Run_mm * Run_Step; + motor_data[8] = (Run_num & 0xff00) >> 8;//磁条长度高8位 + motor_data[9] = Run_num & 0x00ff; //磁条长度低8位 +// motor_seat(); //读取电机当前位置 +// send_set_resp(0xF001, OBJ_DEVICE_ADDR, DATA_LEN, motor_data);//数据发送 + } + } + break; + case 3 : + { + if(it_1ms_flag) //检查1ms定时标志 + { + it_1ms_flag = 0;//定时标志清零 + Runmotor_Nums++; + } + if(Runmotor_Nums >= 50)//时间 + { + Runmotor_Nums = 0; + Runmotor_step++; + motor_seat(); //读取电机当前位置 + send_set_resp(0xF001, OBJ_DEVICE_ADDR, DATA_LEN, motor_data);//数据发送 + } + } + break; + case 4 : + { + Runmotor_step = 0; + Motor_Run = 0; //运行标记清除 + } + break; + default : + { + + } + break; + } +} + +//电机点动运行,方案三(角行程) +void mov_step_ang(void) +{ + if(Run_Step == 0) return;//步长不能为0 + + switch(Runmotor_step) + { + case 1 : //电机运行准备 + { + motor_start(); //运行 + FWD(); //正转 + Runmotor_Nums = 0; //运行次数 + mov_flag = 0; + Runmotor_step++; + } + break; + case 2 : //电机运行过程 + { + motor_mov(1);//运行1个脉冲 + if(Runmotor_Nums >= (Run_Step * STEP_ROT))//运行一个步长,脉冲数由驱动器的细分数决定 + { + Runmotor_Nums = 0; + motor_stop(); //马达停止 + Run_mm++; //磁条移动距离加1 + Run_num = Run_mm * Run_Step; + motor_data[8] = (Run_num & 0xff00) >> 8;//磁条长度高8位 + motor_data[9] = Run_num & 0x00ff; //磁条长度低8位 + motor_seat(); //读取电机当前位置 + send_set_resp(0xF001, OBJ_DEVICE_ADDR, DATA_LEN, motor_data);//数据发送 + Runmotor_step++; + } + } + break; + case 3 : + { + Runmotor_step = 0; + Motor_Run = 0; //运行标记清除 + if(Run_num >= 3600) //判断磁条是否转动一圈 + Run_mm = 0; + } + break; + default : + { + + } + break; + } +} + +//电机回到起始位 +void mov_begin(void) +{ + motor_data[1] = 0x02; //电机运行到起始位,对应数据02 + motor_data[8] = 0x00; //磁条长度高8位 + motor_data[9] = 0x00; //磁条长度低8位 + REV(); //电机反转 + motor_start(); //电机启动 + if(GPIO_ReadPin(GPIO1,GPIO_PIN_4) == 0) //判断是否到达限位处 + { + motor_stop(); //电机停止 + Run_mm = 0; + Run_num = 0; + if(send_flag == 1) + { + send_flag = 0; + motor_seat(); //读取电机当前位置 + send_set_resp(0xF001, OBJ_DEVICE_ADDR, DATA_LEN, motor_data);//数据发送 + } + } + else + motor_mov(1); //提供脉冲 +} + +//电机回到结束位 +void mov_end(void) +{ + motor_data[1] = 0x03; //电机运行到结束位,对应数据03 + FWD(); //电机反转 + motor_start(); //电机启动 + //Run_mm = 0; + if(GPIO_ReadPin(GPIO1,GPIO_PIN_5) == 0)//判断是否到达限位处 + motor_stop(); //电机停止 + else + motor_mov(1); //提供脉冲 +} + +//电机位置判断 +void motor_seat(void) +{ + if(GPIO_ReadPin(GPIO1,GPIO_PIN_4) == 0) //磁条处于起始点限位开关处 + motor_data[3] = 0x01; //发送时反馈的数据 + else if(GPIO_ReadPin(GPIO1,GPIO_PIN_5) == 0)//磁条处于结束点限位开关处 + motor_data[3] = 0x02; //发送时反馈的数据 + else if(GPIO_ReadPin(GPIO0,GPIO_PIN_5) == 0)//磁条正通过光栅 + motor_data[3] = 0x03; //发送时反馈的数据 + else //无状态 + motor_data[3] = 0x00; //发送时反馈的数据 +} diff --git a/Keil_C/Apps/motor.h b/Keil_C/Apps/motor.h new file mode 100644 index 0000000..b6b711a --- /dev/null +++ b/Keil_C/Apps/motor.h @@ -0,0 +1,62 @@ +#ifndef _MOTOR_H_ +#define _MOTOR_H_ + +#include "SC_Init.h" //MCU Init header,Include all IC resource headers +#include "SC_it.h" +#include "..\Drivers\SCDriver_list.h" +#include "HeadFiles\SysFunVarDefine.h" + +#include "sc92f_ssi.h" +#include "Uart1.h" +#include "adc.h" + +extern bit it_1ms_flag; //1ms定时标志 +extern bit it_2ms_flag; //2ms定时标志 +extern bit it_3ms_flag; //3ms定时标志 +extern bit it_4ms_flag; //4ms定时标志 +extern bit it_5ms_flag; //5ms定时标志 +extern bit it_10ms_flag; //10ms定时标志 +extern bit it_100ms_flag; //100ms定时标志 +extern bit it_1s_flag; //1s定时标志 +extern bit it_2s_flag; //1s定时标志 +extern bit it_5s_flag; //5s定时标志 + +extern bit led_flag; //led灯开关标志 +extern bit mov_flag; //脉冲标志 +extern bit send_flag; //发送标志 +extern bit seat_flag; //位置标志 +extern bit motor_dire; //电机转动方向 + +extern bit Travle_Flag; //0 直 1 角 +extern char xdata Motor_Run; //0 停止 1 运行 2 运行到起始点 3 运行到结束点 +extern char xdata Run_Mode; //0 点动 1 连续(方案一) 2 连续(方案二) +extern unsigned int xdata Run_Step; //电机运行步长(0.5mm / °) +extern unsigned int xdata Run_Inter; //电机运行间隔时长(ms) +extern unsigned int xdata Run_Stop; //到“结束点”后,停止时间(s) +extern unsigned int xdata Run_mm; //行进长度(mm) +extern unsigned int xdata Run_num; //角行程转动圈数 +extern unsigned int xdata ct_num; //磁条长度 + +extern uint8_t xdata motor_data[]; //发送数组 + +extern uint16_t xdata SUR_DEVICE_ADDR; //PC //0x00A1; //设备 +extern uint16_t xdata OBJ_DEVICE_ADDR; //主板 //0x00B1; //PC群发 FFFF 0000 + +void motor_start(void); //电机启动 +void motor_stop(void); //电机停止 +void FWD(void); //正转 +void REV(void); //反转 +void ClrRunmotorStep(void); //清除电机标记 +void Deal_Motor(void); //处理马达运行 +void mov_loop1(void); //电机连续运行,方案一(直行程) +void mov_loop1_ang(void); //电机连续运行,方案一(角行程) +void mov_loop2(void); //电机连续运行,方案二(直行程) +void mov_loop2_ang(void); //电机连续运行,方案二(角行程) +void mov_step(void); //电机点动运行,方案三(直行程) +void mov_step_ang(void); //电机点动运行,方案三(角行程) +void motor_mov(unsigned int speed); //电机速度控制 +void mov_begin(void); //电机回到起始位 +void mov_end(void); //电机回到结束位 +void motor_seat(void); //电机位置判断 + +#endif diff --git a/Keil_C/Apps/test.c b/Keil_C/Apps/test.c new file mode 100644 index 0000000..e23676f --- /dev/null +++ b/Keil_C/Apps/test.c @@ -0,0 +1,80 @@ +#include "test.h" + +extern bit it_5s_flag; +extern bit it_2s_flag; +extern bit it_1s_flag; + +extern bit it_10ms_flag; +bit led_flag = 0;//led灯开关标志 +bit motor_flag = 0;//电机方向标志 + +/***************************************************** +*函数名称: led_test +*函数功能: IO口、定时器及串口测试用函数 +*入口参数:void +*出口参数:void +*****************************************************/ +void led_test() +{ + //运行指示灯 + if(it_1s_flag == 1)//1秒 + { + it_1s_flag = 0; + if(led_flag) + { + led_flag = 0; + GPIO_WriteHigh(GPIO0,GPIO_PIN_0);//P0.0输出1,led灯关闭 + GPIO_WriteHigh(GPIO2,GPIO_PIN_6);//P2.6输出1,led灯关闭 + GPIO_WriteHigh(GPIO2,GPIO_PIN_7);//P2.7输出1,led灯关闭 + } + else + { + led_flag = 1; + GPIO_WriteLow(GPIO0,GPIO_PIN_0);//P0.0输出0,led灯亮起 + GPIO_WriteLow(GPIO2,GPIO_PIN_6);//P2.6输出0,led灯亮起 + GPIO_WriteLow(GPIO2,GPIO_PIN_7);//P2.7输出0,led灯亮起 + } + } +} + +/***************************************************** +*函数名称: motor_test +*函数功能: 电机控制测试用函数 +*入口参数:void +*出口参数:void +*****************************************************/ +void motor_test() +{ + bit t1,t2; + t1 = GPIO_ReadPin(GPIO1,GPIO_PIN_4); + t2 = GPIO_ReadPin(GPIO1,GPIO_PIN_5); + motor_start(); + motor_mov(2); + if(~t1) + { + FWD(); + } + if(~t2) + { + REV(); + } + if(it_5s_flag)//检查2秒定时中断标志 + { + it_5s_flag = 0;//标志位清零 + if(motor_flag) + { + motor_flag = 0; + FWD();//电机正转 + GPIO_WriteLow(GPIO0,GPIO_PIN_0);//P0.0输出0,led灯亮起 + } + else + { + motor_flag = 1; + REV();//电机反转 + GPIO_WriteHigh(GPIO0,GPIO_PIN_0);//P0.0输出1,led灯关闭 + } + + } +} + + diff --git a/Keil_C/Apps/test.h b/Keil_C/Apps/test.h new file mode 100644 index 0000000..10725cc --- /dev/null +++ b/Keil_C/Apps/test.h @@ -0,0 +1,21 @@ +#ifndef _TEST_H_ +#define _TEST_H_ + +#include "SC_Init.h" //MCU Init header,Include all IC resource headers +#include "SC_it.h" +#include "..\Drivers\SCDriver_list.h" +#include "HeadFiles\SysFunVarDefine.h" +#include "sc92f_ssi.h" +#include "Uart1.h" +#include "motor.h" + +extern bit it_1s_flag; //1s定时标志 +extern bit it_100ms_flag; //100ms定时标志 +extern bit it_5ms_flag; //5ms定时标志 + +extern bit led_flag; //led灯开关标志 + +void led_test(); +void motor_test(); + +#endif \ No newline at end of file diff --git a/Keil_C/Drivers/SCDriver_List.h b/Keil_C/Drivers/SCDriver_List.h new file mode 100644 index 0000000..31ceae4 --- /dev/null +++ b/Keil_C/Drivers/SCDriver_List.h @@ -0,0 +1,13 @@ +//************************************************************ +// Copyright (c) +// 文件名称 : SCDriver_List.H +// 作者 : Andy +// 模块功能 : 应用驱动库头文件列表 +// 最后更正日期: 2019/1/16 +// 版本 : V0.1 +// 说明 :该头文件包含了所有使用的应用驱动库文件 +//************************************************************* +#ifndef _SCDriver_List_H_ +#define _SCDriver_List_H_ + +#endif \ No newline at end of file diff --git a/Keil_C/FWLib/SC92F_Lib/inc/SC92F7003_C.H b/Keil_C/FWLib/SC92F_Lib/inc/SC92F7003_C.H new file mode 100644 index 0000000..7e09ca4 --- /dev/null +++ b/Keil_C/FWLib/SC92F_Lib/inc/SC92F7003_C.H @@ -0,0 +1,206 @@ + /*-------------------------------------------------------------------------- +SC92F7003_C.H + +C Header file for SC92F7003 microcontroller. +Copyright (c) 2019 Shenzhen SinOne Chip Electronic CO., Ltd. +All rights reserved. +深圳市赛元微电子有限公司 +版本号: V1.0 +日期: 2019.06.24 +--------------------------------------------------------------------------*/ +#ifndef _SC92F7003_H_ +#define _SC92F7003_H_ + +/* ------------------- 字节寄存器-------------------- */ +///*CPU*/ +sfr ACC = 0xE0; //累加器A +sfr B = 0xF0; //通用寄存器B +sfr PSW = 0xD0; //程序状态字 +sfr DPH = 0x83; //数据指针高8位 +sfr DPL = 0x82; //数据指针低8位 +sfr SP = 0x81; //堆栈指针 + + +/*system*/ +sfr PCON = 0x87; //电源管理控制寄存器 + +/*interrupt*/ +sfr IP1 = 0XB9; //中断优先级控制寄存器1 +sfr IP = 0xB8; //中断优先权控制寄存器 +sfr IE = 0xA8; //中断控制寄存器 +sfr IE1 = 0XA9; //中断控制寄存器1 + +/*PORT*/ +sfr P2PH = 0xA2; //P2口模式控制寄存器 +sfr P2CON = 0xA1; //P2口模式控制寄存器 +sfr P2 = 0xA0; //P2口数据寄存器 +sfr P1PH = 0x92; //P1口模式控制寄存器 +sfr P1CON = 0x91; //P1口模式控制寄存器 +sfr P1 = 0x90; //P1口数据寄存器 +sfr P0PH = 0x9B; //P0口模式控制寄存器 +sfr P0CON = 0x9A; //P0口模式控制寄存器 +sfr P0 = 0x80; //P0口数据寄存器 + +/*TIMER*/ +sfr TMCON = 0x8E; //定时器频率控制寄存器 +sfr TH1 = 0x8D; //定时器1高8位 +sfr TH0 = 0x8C; //定时器0高8位 +sfr TL1 = 0x8B; //定时器1低8位 +sfr TL0 = 0x8A; //定时器0低8位 +sfr TMOD = 0x89; //定时器工作模式寄存器 +sfr TCON = 0x88; //定时器控制寄存器 +sfr T2CON = 0xC8; //定时器2控制寄存器 +sfr T2MOD = 0xC9; //定时器2工作模式寄存器 +sfr RCAP2L = 0xCA; //定时器2重载/捕捉低8位 +sfr RCAP2H = 0xCB; //定时器2重载/捕捉高8位 +sfr TL2 = 0xCC; //定时器2低8位 +sfr TH2 = 0xCD; //定时器2高8位 + + +/*ADC*/ +sfr ADCCFG1 = 0xAA; //ADC功能配置寄存器0 +sfr ADCCFG0 = 0xAB; //ADC功能配置寄存器1 +sfr ADCCON = 0XAD; //ADC控制寄存器 +sfr ADCVL = 0xAE; //ADC 结果寄存器 +sfr ADCVH = 0xAF; //ADC 结果寄存器 + +/*PWM*/ +sfr PWMCFG = 0xD1; //PWM设置寄存器 +sfr PWMCON0 = 0xD2; //PWM控制寄存器 +sfr PWMPRD = 0xD3; //PWM周期设置寄存器 +sfr PWMDTYA = 0xD4; //PWM占空比设置寄存器A +sfr PWMDTY0 = 0xD5; //PWM0设置寄存器 +sfr PWMDTY1 = 0xD6; //PWM1设置寄存器 +sfr PWMDTY2 = 0xD7; //PWM2设置寄存器 +sfr PWMCON1 = 0xDA; //PWM控制寄存器 +sfr PWMDTYB = 0xDB; //PWM占空比设置寄存器B +sfr PWMDTY3 = 0xDC; //PWM3设置寄存器 +sfr PWMDTY4 = 0xDD; //PWM4设置寄存器 +sfr PWMDTY5 = 0xDE; //PWM5设置寄存器 +sfr PWMDTY6 = 0xDF; //PWM6设置寄存器 + + +// +///*WatchDog*/ +sfr BTMCON = 0XCE; //低频定时器控制寄存器 +sfr WDTCON = 0xCF; //WDT控制寄存器 + + +sfr OTCON = 0X8F; //输出控制寄存器 + +/*INT*/ +sfr INT0F = 0XBA; //INT0 下降沿中断控制寄存器 +sfr INT0R = 0XBB; //INT0 上降沿中断控制寄存器 +sfr INT1F = 0XBC; //INT1 下降沿中断控制寄存器 +sfr INT1R = 0XBD; //INT1 上降沿中断控制寄存器 +sfr INT2F = 0XC6; //INT2 下降沿中断控制寄存器 +sfr INT2R = 0XC7; //INT2 上降沿中断控制寄存器 + +/*IAP */ +sfr IAPCTL = 0xF6; //IAP控制寄存器 +sfr IAPDAT = 0xF5; //IAP数据寄存器 +sfr IAPADE = 0xF4; //IAP扩展地址寄存器 +sfr IAPADH = 0xF3; //IAP写入地址高位寄存器 +sfr IAPADL = 0xF2; //IAP写入地址低8位寄存器 +sfr IAPKEY = 0xF1; //IAP保护寄存器 + +/*uart0*/ +sfr SCON = 0X98; //uart控制寄存器 +sfr SBUF = 0X99; //uart0数据寄存器 + +/*三合一*/ +sfr SSCON0 = 0X9D; //SSI控制寄存器0 +sfr SSCON1 = 0X9E; //SSI控制寄存器1 +sfr SSCON2 = 0X95; //SSI控制寄存器2 +sfr SSDAT = 0X9F; //SSI数据寄存器 + +sfr OPINX = 0XFE; +sfr OPREG = 0XFF; + +/*Check Sum*/ +sfr CHKSUML = 0XFC; //Check Sum结果寄存器低位 +sfr CHKSUMH = 0XFD; //Check Sum结果寄存器高位 + +sfr OPERCON = 0xEF; //运算控制寄存器 + +///* ------------------- 位寄存器-------------------- */ +/*PSW*/ +sbit CY = PSW^7; //标志位 0:加法运算最高位无进位,或者减法运算最高位无借位时 1:加法运算最高位有进位,或者减法运算最高位有借位时 +sbit AC = PSW^6; //进位辅助标志位 0:无借位、进位 1:加法运算时在bit3位有进位,或减法运算在bit3位有借位时 +sbit F0 = PSW^5; //用户标志位 +sbit RS1 = PSW^4; //工作寄存器组选择位 +sbit RS0 = PSW^3; //工作寄存器组选择位 +sbit OV = PSW^2; //溢出标志位 +sbit F1 = PSW^1; //F1标志 +sbit P = PSW^0; //奇偶标志位 0:ACC中1的个数为偶数(包括0个) 1:ACC中1的个数为奇数 + +/*T2CON*/ +sbit TF2 = T2CON^7; +sbit EXF2 = T2CON^6; +sbit RCLK = T2CON^5; +sbit TCLK = T2CON^4; +sbit EXEN2 = T2CON^3; +sbit TR2 = T2CON^2; +sbit T2 = T2CON^1; +sbit CP = T2CON^0; + +/*IP*/ +sbit IPADC = IP^6; //ADC中断优先控制位 0:设定 ADC的中断优先权是 “低” 1:设定 ADC的中断优先权是 “高” +sbit IPT2 = IP^5; //Timer2中断优先控制位 0:设定 Timer2的中断优先权是 “低” 1:设定Timer2的中断优先权是 “高” +sbit IPUART = IP^4; //UART中断优先控制位 0:设定 UART的中断优先权是 “低” 1:设定UART的中断优先权是 “高” +sbit IPT1 = IP^3; //Timer1中断优先控制位 0:设定 Timer 1的中断优先权是 “低” 1:设定 Timer 1的中断优先权是 “高” +sbit IPINT1 = IP^2; //INT1中断优先控制位 0:设定 INT1中断优先权是 “低” 1:设定INT1的中断优先权是 “高” +sbit IPT0 = IP^1; //Timer0中断优先控制位 0:设定 Timer 0的中断优先权是 “低” 1:设定 Timer 0的中断优先权是 “高” +sbit IPINT0 = IP^0; //INT0中断优先控制位 0:设定 INT0中断优先权是 “低” 1:设定INT0的中断优先权是 “高” + +/*IE*/ +sbit EA = IE^7; //中断使能的总控制 0:关闭所有的中断 1:打开所有的中断 +sbit EADC = IE^6; //ADC中断使能控制 0:关闭ADC中断 1:打开ADC中断 +sbit ET2 = IE^5; //Timer2中断使能控制 0:关闭Timer2中断 1:打开Timer2中断 +sbit EUART = IE^4; //UART中断使能控制 0:关闭UART中断 1:打开UART中断 +sbit ET1 = IE^3; //Timer1中断使能控制 0:关闭TIMER1中断 1:打开TIMER1中断 +sbit EINT1 = IE^2; //INT1中断使能控制 0:关闭INT1中断 1:打开INT1中断 +sbit ET0 = IE^1; //Timer0中断使能控制 0:关闭TIMER0中断 1:打开TIMER0中断 +sbit EINT0 = IE^0; //INT0中断使能控制 0:关闭INT0中断 1:打开INT0中断 + +/*TCON*/ +sbit TF1 = TCON^7; //T1溢出中断请求标志位 T1产生溢出,发生中断时,硬件将TF1置为“1”,申请中断,CPU响应时,硬件清“0”。 +sbit TR1 = TCON^6; //定时器T1的运行控制位 0:Timer1禁止计数 1:Timer1开始计数 +sbit TF0 = TCON^5; //T0溢出中断请求标志位 T0产生溢出,发生中断时,硬件将TF0置为“1”,申请中断,CPU响应时,硬件清“0”。 +sbit TR0 = TCON^4; //定时器T0的运行控制位 0:Timer0禁止计数 1:Timer0开始计数 + +/*SCON*/ +sbit SM0 = SCON^7; +sbit SM1 = SCON^6; +sbit SM2 = SCON^5; +sbit REN = SCON^4; +sbit TB8 = SCON^3; +sbit RB8 = SCON^2; +sbit TI = SCON^1; +sbit RI = SCON^0; + +/* P0 */ +sbit P01 = P0^1; +sbit P00 = P0^0; + +/* P1 */ +sbit P17 = P1^7; +sbit P16 = P1^6; +sbit P15 = P1^5; +sbit P14 = P1^4; +sbit P13 = P1^3; +sbit P12 = P1^2; +sbit P11 = P1^1; +sbit P10 = P1^0; + +/* P2 */ +sbit P27 = P2^7; +sbit P26 = P2^6; +sbit P25 = P2^5; +sbit P24 = P2^4; +sbit P23 = P2^3; +sbit P22 = P2^2; +sbit P21 = P2^1; +sbit P20 = P2^0; + +#endif \ No newline at end of file diff --git a/Keil_C/FWLib/SC92F_Lib/inc/SC92F725X_C.H b/Keil_C/FWLib/SC92F_Lib/inc/SC92F725X_C.H new file mode 100644 index 0000000..8703946 --- /dev/null +++ b/Keil_C/FWLib/SC92F_Lib/inc/SC92F725X_C.H @@ -0,0 +1,209 @@ + /*-------------------------------------------------------------------------- +SC92F725x_C.H + +C Header file for SC92F725x microcontroller. +Copyright (c) 2018 Shenzhen SinOne Chip Electronic CO., Ltd. +All rights reserved. +深圳市赛元微电子有限公司 +版本号: V1.0 +日期: 2018.04.25 +--------------------------------------------------------------------------*/ +#ifndef _SC92F725x_H_ +#define _SC92F725x_H_ + +/* ------------------- 字节寄存器-------------------- */ +///*CPU*/ +sfr ACC = 0xE0; //累加器A +sfr B = 0xF0; //通用寄存器B +sfr PSW = 0xD0; //程序状态字 +sfr DPH = 0x83; //数据指针高8位 +sfr DPL = 0x82; //数据指针低8位 +sfr SP = 0x81; //堆栈指针 + +/*system*/ +sfr PCON = 0x87; //电源管理控制寄存器 + +/*interrupt*/ +sfr IP1 = 0XB9; //中断优先级控制寄存器1 +sfr IP = 0xB8; //中断优先权控制寄存器 +sfr IE = 0xA8; //中断控制寄存器 +sfr IE1 = 0XA9; //中断控制寄存器1 + +/*PORT*/ +sfr P2PH = 0xA2; //P2口模式控制寄存器0 +sfr P2CON = 0xA1; //P2口模式控制寄存器1 +sfr P2 = 0xA0; //P2口数据寄存器 +sfr P1PH = 0x92; //P1口模式控制寄存器0 +sfr P1CON = 0x91; //P1口模式控制寄存器1 +sfr P1 = 0x90; //P1口数据寄存器 +sfr P0PH = 0x9B; //P0口模式控制寄存器1 +sfr P0CON = 0x9A; //P0口模式控制寄存器1 +sfr P0 = 0x80; //P0口数据寄存器 +sfr IOHCON= 0x97; //IOH设置寄存器 + +/*TIMER*/ +sfr TMCON = 0x8E; //定时器频率控制寄存器 +sfr TH1 = 0x8D; //定时器1高8位 +sfr TH0 = 0x8C; //定时器0高8位 +sfr TL1 = 0x8B; //定时器1低8位 +sfr TL0 = 0x8A; //定时器0低8位 +sfr TMOD = 0x89; //定时器工作模式寄存器 +sfr TCON = 0x88; //定时器控制寄存器 +sfr T2CON = 0XC8; //定时器2控制寄存器 +sfr T2MOD = 0XC9; //定时器2工作模式寄存器 +sfr RCAP2L = 0XCA; //定时器2重载/捕捉低8位 +sfr RCAP2H = 0XCB; //定时器2重载/捕捉高8位 +sfr TL2 = 0XCC; //定时器2低8位 +sfr TH2 = 0XCD; //定时器2高8位 + + +/*ADC*/ +sfr ADCCFG0 = 0xAB; //P1口ADC功能配置寄存器/参考电压 +sfr ADCCFG1 = 0xAC; //P1口ADC功能配置寄存器/参考电压 +sfr ADCCON = 0XAD; //ADC控制寄存器 +sfr ADCVL = 0xAE; //ADC 结果寄存器 +sfr ADCVH = 0xAF; //ADC 结果寄存器 + +/*PWM*/ +sfr PWMCFG0 = 0xD1; //PWM设置寄存器 + +sfr PWMCON = 0xD2; //PWM控制寄存器 +sfr PWMPRD = 0xD3; //PWM周期设置寄存器 +sfr PWMCFG1 = 0xD4; //PWM设置寄存器 +sfr PWMDTY0 = 0xD5; //PWM占空比设置寄存器 +sfr PWMDTY1 = 0XD6; //PWM占空比设置寄存器 +sfr PWMDTY2 = 0XD7; //PWM占空比设置寄存器 +sfr PWMDTY3 = 0xDD; //PWM占空比设置寄存器 +sfr PWMDTY4 = 0XDE; //PWM占空比设置寄存器 +sfr PWMDTY5 = 0XDF; //PWM占空比设置寄存器 + +///*WatchDog*/ +sfr BTMCON = 0XCE; //低频定时器控制寄存器 +sfr WDTCON = 0xCF; //WDT控制寄存器 + +/*LCD*/ +sfr OTCON = 0X8F; //LCD电压输出控制寄存器 +sfr P0VO = 0X9C; //P0 LCD Bais 输出寄存器 + +/*INT*/ +sfr INT0F = 0XBA; //INT0 下降沿中断控制寄存器 +sfr INT0R = 0XBB; //INT0 上降沿中断控制寄存器 +sfr INT2F = 0XC6; //INT2 下降沿中断控制寄存器 +sfr INT2R = 0XC7; //INT2 上降沿中断控制寄存器 + +/*IAP */ +sfr IAPCTL = 0xF6; //IAP控制寄存器 +sfr IAPDAT = 0xF5; //IAP数据寄存器 +sfr IAPADE = 0xF4; //IAP扩展地址寄存器 +sfr IAPADH = 0xF3; //IAP写入地址高位寄存器 +sfr IAPADL = 0xF2; //IAP写入地址低8位寄存器 +sfr IAPKEY = 0xF1; //IAP保护寄存器 + +/*UART*/ +sfr SCON = 0X98; //串口控制寄存器 +sfr SBUF = 0X99; //串口数据缓存寄存器 + +/*option*/ +sfr OPINX = 0XFE; +sfr OPREG = 0XFF; + +///* ------------------- 位寄存器-------------------- */ + +/*PSW*/ +sbit CY = PSW^7; //标志位 0:加法运算最高位无进位,或者减法运算最高位无借位时 1:加法运算最高位有进位,或者减法运算最高位有借位时 +sbit AC = PSW^6; //进位辅助标志位 0:无借位、进位 1:加法运算时在bit3位有进位,或减法运算在bit3位有借位时 +sbit F0 = PSW^5; //用户标志位 +sbit RS1 = PSW^4; //工作寄存器组选择位 +sbit RS0 = PSW^3; //工作寄存器组选择位 +sbit OV = PSW^2; //溢出标志位 +sbit P = PSW^0; //奇偶标志位 0:ACC中1的个数为偶数(包括0个) 1:ACC中1的个数为奇数 + +/*T2CON*/ +sbit TF2 = T2CON^7; +sbit EXF2 = T2CON^6; +sbit RCLK = T2CON^5; +sbit TCLK = T2CON^4; +sbit EXEN2 = T2CON^3; +sbit TR2 = T2CON^2; +sbit T2 = T2CON^1; +sbit CP = T2CON^0; + + +/*IP*/ +sbit IPADC = IP^6; //ADC中断优先控制位 0:设定 ADC的中断优先权是 “低” 1:设定 ADC的中断优先权是 “高” +sbit IPT2 = IP^5; //Timer2中断优先控制位 0:设定 Timer2的中断优先权是 “低” 1:设定Timer2的中断优先权是 “高” +sbit IPUART = IP^4; //UART中断优先控制位 0:设定UART的中断优先权是 “低” 1:设定UART的中断优先权是 “高” +sbit IPT1 = IP^3; //Timer1中断优先控制位 0:设定 Timer 1的中断优先权是 “低” 1:设定 Timer 1的中断优先权是 “高” 1:设定INT0的中断优先权是 “高” +sbit IPT0 = IP^1; //Timer0中断优先控制位 0:设定 Timer 0的中断优先权是 “低” 1:设定 Timer 0的中断优先权是 “高” +sbit IPINT0 = IP^0; //INT0中断优先控制位 0:设定INT0中断优先权是 “低” 1:设定INT1的中断优先权是 “高” + +/*IE*/ +sbit EA = IE^7; //中断使能的总控制 0:关闭所有的中断 1:打开所有的中断 +sbit EADC = IE^6; //ADC中断使能控制 0:关闭ADC中断 1:打开ADC中断 +sbit ET2 = IE^5; //Timer2中断使能控制 0:关闭Timer2中断 1:打开Timer2中断 +sbit EUART = IE^4; //UART中断使能控制 0:关闭UART中断 1:打开UART中断 +sbit ET1 = IE^3; //Timer1中断使能控制 0:关闭TIMER1中断 1:打开TIMER1中断 +sbit ET0 = IE^1; //Timer0中断使能控制 0:关闭TIMER0中断 1:打开TIMER0中断 +sbit EINT0 = IE^0; //INT0中断使能控制 0:关闭INT1中断 1:打开INT1中断 + +/*TCON*/ +sbit TF1 = TCON^7; //T1溢出中断请求标志位 T1产生溢出,发生中断时,硬件将TF1置为“1”,申请中断,CPU响应时,硬件清“0”。 +sbit TR1 = TCON^6; //定时器T1的运行控制位 0:Timer1禁止计数 1:Timer1开始计数 +sbit TF0 = TCON^5; //T0溢出中断请求标志位 T0产生溢出,发生中断时,硬件将TF0置为“1”,申请中断,CPU响应时,硬件清“0”。 +sbit TR0 = TCON^4; //定时器T0的运行控制位 0:Timer0禁止计数 1:Timer0开始计数 + +/*SCON*/ +sbit SM0 = SCON^7; +sbit SM1 = SCON^6; +sbit SM2 = SCON^5; +sbit REN = SCON^4; +sbit TB8 = SCON^3; +sbit RB8 = SCON^2; +sbit TI = SCON^1; +sbit RI = SCON^0; + +/******************* P0 ****************** +*SC92F7252封装未引出的管脚:无 +*SC92F7251封装未引出的管脚:P04/P05 +*SC92F7250封装未引出的管脚:P0 +******************************************/ +sbit P05 = P0^5; +sbit P04 = P0^4; +sbit P03 = P0^3; +sbit P02 = P0^2; +sbit P01 = P0^1; +sbit P00 = P0^0; + +/******************* P1 ****************** +*SC92F7252封装未引出的管脚:无 +*SC92F7251封装未引出的管脚:无 +*SC92F7250封装未引出的管脚:P10/P11/P16/P17 +******************************************/ +sbit P17 = P1^7; +sbit P16 = P1^6; +sbit P13 = P1^3; +sbit P12 = P1^2; +sbit P11 = P1^1; +sbit P10 = P1^0; + +/******************* P2 ****************** +*SC92F7252封装未引出的管脚:无 +*SC92F7251封装未引出的管脚:P26/P27 +*SC92F7250封装未引出的管脚:P24/P25 +******************************************/ +sbit P27 = P2^7; +sbit P26 = P2^6; +sbit P25 = P2^5; +sbit P24 = P2^4; +sbit P21 = P2^1; +sbit P20 = P2^0; + +/**************************************************************************** +*注意:封装未引出的管脚,需设置为强推挽输出模式 +*IC选型:请根据所使用的IC型号,在初始化完IO口后,调用相对应的未引出管脚的IO口配置; +*如若选择SC92F7252,则不用调用宏定义。 +*****************************************************************************/ +#define SC92F7251_NIO_Init() {P0CON|=0xF0;P1CON|=0x30;P2CON|=0xCC;} //SC92F7251的未引出来的IO口配置 +#define SC92F7250_NIO_Init() {P0CON|=0xFF;P1CON|=0xF3;P2CON|=0x3C;} //SC92F7250的未引出来的IO口配置 + +#endif \ No newline at end of file diff --git a/Keil_C/FWLib/SC92F_Lib/inc/SC92F730x_C.H b/Keil_C/FWLib/SC92F_Lib/inc/SC92F730x_C.H new file mode 100644 index 0000000..5e3255f --- /dev/null +++ b/Keil_C/FWLib/SC92F_Lib/inc/SC92F730x_C.H @@ -0,0 +1,199 @@ + /*-------------------------------------------------------------------------- +SC92F730x_C.H + +C Header file for SC92F730x microcontroller. +Copyright (c) 2018 Shenzhen SinOne Chip Electronic CO., Ltd. +All rights reserved. +深圳市赛元微电子有限公司 +版本号: V1.0 +日期: 2018.11.23 +--------------------------------------------------------------------------*/ +#ifndef _SC92F730x_H_ +#define _SC92F730x_H_ + +/* ------------------- 字节寄存器-------------------- */ +///*CPU*/ +sfr ACC = 0xE0; //累加器A +sfr B = 0xF0; //通用寄存器B +sfr PSW = 0xD0; //程序状态字 +sfr DPH = 0x83; //数据指针高8位 +sfr DPL = 0x82; //数据指针低8位 +sfr SP = 0x81; //堆栈指针 + +/*system*/ +sfr PCON = 0x87; //电源管理控制寄存器 + +/*interrupt*/ +sfr IP1 = 0XB9; //中断优先级控制寄存器1 +sfr IP = 0xB8; //中断优先权控制寄存器 +sfr IE = 0xA8; //中断控制寄存器 +sfr IE1 = 0XA9; //中断控制寄存器1 + +/*PORT*/ +sfr P2PH = 0xA2; //P2口模式控制寄存器0 +sfr P2CON = 0xA1; //P2口模式控制寄存器1 +sfr P2 = 0xA0; //P2口数据寄存器 +sfr P1PH = 0x92; //P1口模式控制寄存器0 +sfr P1CON = 0x91; //P1口模式控制寄存器1 +sfr P1 = 0x90; //P1口数据寄存器 +sfr P0PH = 0x9B; //P0口模式控制寄存器1 +sfr P0CON = 0x9A; //P0口模式控制寄存器1 +sfr P0 = 0x80; //P0口数据寄存器 +sfr IOHCON= 0x97; //IOH设置寄存器 + +/*TIMER*/ +sfr TMCON = 0x8E; //定时器频率控制寄存器 +sfr TH1 = 0x8D; //定时器1高8位 +sfr TH0 = 0x8C; //定时器0高8位 +sfr TL1 = 0x8B; //定时器1低8位 +sfr TL0 = 0x8A; //定时器0低8位 +sfr TMOD = 0x89; //定时器工作模式寄存器 +sfr TCON = 0x88; //定时器控制寄存器 +sfr T2CON = 0XC8; //定时器2控制寄存器 +sfr T2MOD = 0XC9; //定时器2工作模式寄存器 +sfr RCAP2L = 0XCA; //定时器2重载/捕捉低8位 +sfr RCAP2H = 0XCB; //定时器2重载/捕捉高8位 +sfr TL2 = 0XCC; //定时器2低8位 +sfr TH2 = 0XCD; //定时器2高8位 + + +/*ADC*/ +sfr ADCCFG0 = 0xAB; //P1口ADC功能配置寄存器/参考电压 +sfr ADCCFG1 = 0xAC; //P1口ADC功能配置寄存器/参考电压 +sfr ADCCON = 0XAD; //ADC控制寄存器 +sfr ADCVL = 0xAE; //ADC 结果寄存器 +sfr ADCVH = 0xAF; //ADC 结果寄存器 + +/*PWM*/ +sfr PWMCFG0 = 0xD1; //PWM设置寄存器 + +sfr PWMCON = 0xD2; //PWM控制寄存器 +sfr PWMPRD = 0xD3; //PWM周期设置寄存器 +sfr PWMCFG1 = 0xD4; //PWM设置寄存器 +sfr PWMDTY0 = 0xD5; //PWM占空比设置寄存器 +sfr PWMDTY1 = 0XD6; //PWM占空比设置寄存器 +sfr PWMDTY2 = 0XD7; //PWM占空比设置寄存器 +sfr PWMDTY3 = 0xDD; //PWM占空比设置寄存器 +sfr PWMDTY4 = 0XDE; //PWM占空比设置寄存器 +sfr PWMDTY5 = 0XDF; //PWM占空比设置寄存器 + +///*WatchDog*/ +sfr BTMCON = 0XCE; //低频定时器控制寄存器 +sfr WDTCON = 0xCF; //WDT控制寄存器 + +/*LCD*/ +sfr OTCON = 0X8F; //LCD电压输出控制寄存器 +sfr P0VO = 0X9C; //P0 LCD Bais 输出寄存器 + +/*INT*/ +sfr INT0F = 0XBA; //INT0 下降沿中断控制寄存器 +sfr INT0R = 0XBB; //INT0 上降沿中断控制寄存器 +sfr INT2F = 0XC6; //INT2 下降沿中断控制寄存器 +sfr INT2R = 0XC7; //INT2 上降沿中断控制寄存器 + +/*IAP */ +sfr IAPCTL = 0xF6; //IAP控制寄存器 +sfr IAPDAT = 0xF5; //IAP数据寄存器 +sfr IAPADE = 0xF4; //IAP扩展地址寄存器 +sfr IAPADH = 0xF3; //IAP写入地址高位寄存器 +sfr IAPADL = 0xF2; //IAP写入地址低8位寄存器 +sfr IAPKEY = 0xF1; //IAP保护寄存器 + +/*UART*/ +sfr SCON = 0X98; //串口控制寄存器 +sfr SBUF = 0X99; //串口数据缓存寄存器 + +/*option*/ +sfr OPINX = 0XFE; +sfr OPREG = 0XFF; + +///* ------------------- 位寄存器-------------------- */ + +/*PSW*/ +sbit CY = PSW^7; //标志位 0:加法运算最高位无进位,或者减法运算最高位无借位时 1:加法运算最高位有进位,或者减法运算最高位有借位时 +sbit AC = PSW^6; //进位辅助标志位 0:无借位、进位 1:加法运算时在bit3位有进位,或减法运算在bit3位有借位时 +sbit F0 = PSW^5; //用户标志位 +sbit RS1 = PSW^4; //工作寄存器组选择位 +sbit RS0 = PSW^3; //工作寄存器组选择位 +sbit OV = PSW^2; //溢出标志位 +sbit P = PSW^0; //奇偶标志位 0:ACC中1的个数为偶数(包括0个) 1:ACC中1的个数为奇数 + +/*T2CON*/ +sbit TF2 = T2CON^7; +sbit EXF2 = T2CON^6; +sbit RCLK = T2CON^5; +sbit TCLK = T2CON^4; +sbit EXEN2 = T2CON^3; +sbit TR2 = T2CON^2; +sbit T2 = T2CON^1; +sbit CP = T2CON^0; + + +/*IP*/ +sbit IPADC = IP^6; //ADC中断优先控制位 0:设定 ADC的中断优先权是 “低” 1:设定 ADC的中断优先权是 “高” +sbit IPT2 = IP^5; //Timer2中断优先控制位 0:设定 Timer2的中断优先权是 “低” 1:设定Timer2的中断优先权是 “高” +sbit IPUART = IP^4; //UART中断优先控制位 0:设定UART的中断优先权是 “低” 1:设定UART的中断优先权是 “高” +sbit IPT1 = IP^3; //Timer1中断优先控制位 0:设定 Timer 1的中断优先权是 “低” 1:设定 Timer 1的中断优先权是 “高” 1:设定INT0的中断优先权是 “高” +sbit IPT0 = IP^1; //Timer0中断优先控制位 0:设定 Timer 0的中断优先权是 “低” 1:设定 Timer 0的中断优先权是 “高” +sbit IPINT0 = IP^0; //INT0中断优先控制位 0:设定INT0中断优先权是 “低” 1:设定INT1的中断优先权是 “高” + +/*IE*/ +sbit EA = IE^7; //中断使能的总控制 0:关闭所有的中断 1:打开所有的中断 +sbit EADC = IE^6; //ADC中断使能控制 0:关闭ADC中断 1:打开ADC中断 +sbit ET2 = IE^5; //Timer2中断使能控制 0:关闭Timer2中断 1:打开Timer2中断 +sbit EUART = IE^4; //UART中断使能控制 0:关闭UART中断 1:打开UART中断 +sbit ET1 = IE^3; //Timer1中断使能控制 0:关闭TIMER1中断 1:打开TIMER1中断 +sbit ET0 = IE^1; //Timer0中断使能控制 0:关闭TIMER0中断 1:打开TIMER0中断 +sbit EINT0 = IE^0; //INT0中断使能控制 0:关闭INT0中断 1:打开INT0中断 + +/*TCON*/ +sbit TF1 = TCON^7; //T1溢出中断请求标志位 T1产生溢出,发生中断时,硬件将TF1置为“1”,申请中断,CPU响应时,硬件清“0”。 +sbit TR1 = TCON^6; //定时器T1的运行控制位 0:Timer1禁止计数 1:Timer1开始计数 +sbit TF0 = TCON^5; //T0溢出中断请求标志位 T0产生溢出,发生中断时,硬件将TF0置为“1”,申请中断,CPU响应时,硬件清“0”。 +sbit TR0 = TCON^4; //定时器T0的运行控制位 0:Timer0禁止计数 1:Timer0开始计数 + +/*SCON*/ +sbit SM0 = SCON^7; +sbit SM1 = SCON^6; +sbit SM2 = SCON^5; +sbit REN = SCON^4; +sbit TB8 = SCON^3; +sbit RB8 = SCON^2; +sbit TI = SCON^1; +sbit RI = SCON^0; + +/******************* P0 ****************** +*SC92F7309封装未引出的管脚:无 +*SC92F7308封装未引出的管脚:P00/P01 +******************************************/ +sbit P03 = P0^3; +sbit P02 = P0^2; +sbit P01 = P0^1; +sbit P00 = P0^0; + +/******************* P1 ****************** +*SC92F7309封装未引出的管脚:无 +*SC92F7308封装未引出的管脚:P10/P11 +******************************************/ +sbit P13 = P1^3; +sbit P12 = P1^2; +sbit P11 = P1^1; +sbit P10 = P1^0; + +/******************* P2 ****************** +*SC92F7309封装未引出的管脚:无 +*SC92F7308封装未引出的管脚:无 +******************************************/ +sbit P27 = P2^7; +sbit P26 = P2^6; +sbit P21 = P2^1; +sbit P20 = P2^0; + +/**************************************************************************** +*注意:封装未引出的管脚,需设置为强推挽输出模式 +*IC选型:请根据所使用的IC型号,在初始化完IO口后,调用相对应的未引出管脚的IO口配置; +*****************************************************************************/ +#define SC92F7309_NIO_Init() {P0CON|=0xF0;P1CON|=0xF0;P2CON|=0x3C;} //SC92F7309的未引出来的IO口配置 +#define SC92F7308_NIO_Init() {P0CON|=0xF3;P1CON|=0xF3;P2CON|=0x3C;} //SC92F7308的未引出来的IO口配置 + +#endif \ No newline at end of file diff --git a/Keil_C/FWLib/SC92F_Lib/inc/SC92F732x_C.H b/Keil_C/FWLib/SC92F_Lib/inc/SC92F732x_C.H new file mode 100644 index 0000000..18f9a07 --- /dev/null +++ b/Keil_C/FWLib/SC92F_Lib/inc/SC92F732x_C.H @@ -0,0 +1,232 @@ + /*-------------------------------------------------------------------------- +SC92F732x_C.H + +C Header file for SC92F732x microcontroller. +Copyright (c) 2018 Shenzhen SinOne Chip Electronic CO., Ltd. +All rights reserved. +深圳市赛元微电子有限公司 +版本号: V1.0 +日期: 2018.04.25 +--------------------------------------------------------------------------*/ +#ifndef _SC92F732x_H_ +#define _SC92F732x_H_ + +/* ------------------- 字节寄存器-------------------- */ +///*CPU*/ +sfr ACC = 0xE0; //累加器A +sfr B = 0xF0; //通用寄存器B +sfr PSW = 0xD0; //程序状态字 +sfr DPH = 0x83; //数据指针高8位 +sfr DPL = 0x82; //数据指针低8位 +sfr SP = 0x81; //堆栈指针 + +/*system*/ +sfr PCON = 0x87; //电源管理控制寄存器 + +/*interrupt*/ +sfr IP1 = 0XB9; //中断优先级控制寄存器1 +sfr IP = 0xB8; //中断优先权控制寄存器 +sfr IE = 0xA8; //中断控制寄存器 +sfr IE1 = 0XA9; //中断控制寄存器1 + +/*PORT*/ +sfr P5PH = 0xDA; //P5口模式控制寄存器0 +sfr P5CON = 0xD9; //P5口模式控制寄存器1 +sfr P5 = 0xD8; //P5口数据寄存器 +sfr P2PH = 0xA2; //P2口模式控制寄存器0 +sfr P2CON = 0xA1; //P2口模式控制寄存器1 +sfr P2 = 0xA0; //P2口数据寄存器 +sfr P1PH = 0x92; //P1口模式控制寄存器0 +sfr P1CON = 0x91; //P1口模式控制寄存器1 +sfr P1 = 0x90; //P1口数据寄存器 +sfr P0PH = 0x9B; //P0口模式控制寄存器1 +sfr P0CON = 0x9A; //P0口模式控制寄存器1 +sfr P0 = 0x80; //P0口数据寄存器 +sfr IOHCON= 0x97; //IOH设置寄存器 + +/*TIMER*/ +sfr TMCON = 0x8E; //定时器频率控制寄存器 +sfr TH1 = 0x8D; //定时器1高8位 +sfr TH0 = 0x8C; //定时器0高8位 +sfr TL1 = 0x8B; //定时器1低8位 +sfr TL0 = 0x8A; //定时器0低8位 +sfr TMOD = 0x89; //定时器工作模式寄存器 +sfr TCON = 0x88; //定时器控制寄存器 +sfr T2CON = 0XC8; //定时器2控制寄存器 +sfr T2MOD = 0XC9; //定时器2工作模式寄存器 +sfr RCAP2L= 0XCA; //定时器2重载/捕捉低8位 +sfr RCAP2H= 0XCB; //定时器2重载/捕捉高8位 +sfr TL2 = 0XCC; //定时器2低8位 +sfr TH2 = 0XCD; //定时器2高8位 + + +/*ADC*/ +sfr ADCCFG0 = 0xAB; //P1口ADC功能配置寄存器/参考电压 +sfr ADCCFG1 = 0xAC; //P1口ADC功能配置寄存器/参考电压 +sfr ADCCON = 0XAD; //ADC控制寄存器 +sfr ADCVL = 0xAE; //ADC 结果寄存器 +sfr ADCVH = 0xAF; //ADC 结果寄存器 + +/*PWM*/ +sfr PWMCFG = 0xD1; //PWM设置寄存器 +sfr PWMCON = 0xD2; //PWM控制寄存器 +sfr PWMPRD = 0xD3; //PWM周期设置寄存器 +sfr PWMDTYA = 0xD4; //PWM高电平设置寄存器 +sfr PWMDTY0 = 0xD5; //PWM高电平设置寄存器 +sfr PWMDTY1 = 0XD6; //PWM高电平设置寄存器 +sfr PWMDTY2 = 0XD7; //PWM高电平设置寄存器 + +///*WatchDog*/ +sfr BTMCON = 0XCE; //低频定时器控制寄存器 +sfr WDTCON = 0xCF; //WDT控制寄存器 + +/*LCD*/ +sfr OTCON = 0X8F; //LCD电压输出控制寄存器 +sfr P0VO = 0X9C; //P0 LCD Bais 输出寄存器 + +/*INT*/ +sfr INT0F = 0XBA; //INT0 下降沿中断控制寄存器 +sfr INT0R = 0XBB; //INT0 上降沿中断控制寄存器 +sfr INT1F = 0XBC; //INT1 下降沿中断控制寄存器 +sfr INT1R = 0XBD; //INT1 上降沿中断控制寄存器 +sfr INT2F = 0XC6; //INT2 下降沿中断控制寄存器 +sfr INT2R = 0XC7; //INT2 上降沿中断控制寄存器 + +/*IAP */ +sfr IAPCTL = 0xF6; //IAP控制寄存器 +sfr IAPDAT = 0xF5; //IAP数据寄存器 +sfr IAPADE = 0xF4; //IAP扩展地址寄存器 +sfr IAPADH = 0xF3; //IAP写入地址高位寄存器 +sfr IAPADL = 0xF2; //IAP写入地址低8位寄存器 +sfr IAPKEY = 0xF1; //IAP保护寄存器 + +/*UART*/ +sfr SCON = 0X98; //串口控制寄存器 +sfr SBUF = 0X99; //串口数据缓存寄存器 + +/*option*/ +sfr OPINX = 0XFE; +sfr OPREG = 0XFF; + +///* ------------------- 位寄存器-------------------- */ + +/*PSW*/ +sbit CY = PSW^7; //标志位 0:加法运算最高位无进位,或者减法运算最高位无借位时 1:加法运算最高位有进位,或者减法运算最高位有借位时 +sbit AC = PSW^6; //进位辅助标志位 0:无借位、进位 1:加法运算时在bit3位有进位,或减法运算在bit3位有借位时 +sbit F0 = PSW^5; //用户标志位 +sbit RS1 = PSW^4; //工作寄存器组选择位 +sbit RS0 = PSW^3; //工作寄存器组选择位 +sbit OV = PSW^2; //溢出标志位 +sbit F1 = PSW^1; //F1标志 +sbit P = PSW^0; //奇偶标志位 0:ACC中1的个数为偶数(包括0个) 1:ACC中1的个数为奇数 + +/*T2CON*/ +sbit TF2 = T2CON^7; +sbit EXF2 = T2CON^6; +sbit RCLK = T2CON^5; +sbit TCLK = T2CON^4; +sbit EXEN2 = T2CON^3; +sbit TR2 = T2CON^2; +sbit T2 = T2CON^1; +sbit CP = T2CON^0; + + +/*IP*/ +sbit IPADC = IP^6; //ADC中断优先控制位 0:设定 ADC的中断优先权是 “低” 1:设定 ADC的中断优先权是 “高” +sbit IPT2 = IP^5; //Timer2中断优先控制位 0:设定 Timer2的中断优先权是 “低” 1:设定Timer2的中断优先权是 “高” +sbit IPUART = IP^4; //UART中断优先控制位 0:设定UART的中断优先权是 “低” 1:设定UART的中断优先权是 “高” +sbit IPT1 = IP^3; //Timer1中断优先控制位 0:设定 Timer 1的中断优先权是 “低” 1:设定 Timer 1的中断优先权是 “高” +sbit IPINT1 = IP^2; //INT1中断优先控制位 0:设定INT1中断优先权是 “低” 1:设定INT1的中断优先权是 “高” +sbit IPT0 = IP^1; //Timer0中断优先控制位 0:设定 Timer 0的中断优先权是 “低” 1:设定 Timer 0的中断优先权是 “高” +sbit IPINT0 = IP^0; //INT0中断优先控制位 0:设定INT0中断优先权是 “低” 1:设定INT0的中断优先权是 “高” + +/*IE*/ +sbit EA = IE^7; //中断使能的总控制 0:关闭所有的中断 1:打开所有的中断 +sbit EADC = IE^6; //ADC中断使能控制 0:关闭ADC中断 1:打开ADC中断 +sbit ET2 = IE^5; //Timer2中断使能控制 0:关闭Timer2中断 1:打开Timer2中断 +sbit EUART = IE^4; //UART中断使能控制 0:关闭UART中断 1:打开UART中断 +sbit ET1 = IE^3; //Timer1中断使能控制 0:关闭TIMER1中断 1:打开TIMER1中断 +sbit EINT1 = IE^2; //INT1中断使能控制 0:关闭INT1中断 1:打开INT1中断 +sbit ET0 = IE^1; //Timer0中断使能控制 0:关闭TIMER0中断 1:打开TIMER0中断 +sbit EINT0 = IE^0; //INT0中断使能控制 0:关闭INT0中断 1:打开INT0中断 + +/*TCON*/ +sbit TF1 = TCON^7; //T1溢出中断请求标志位 T1产生溢出,发生中断时,硬件将TF1置为“1”,申请中断,CPU响应时,硬件清“0”。 +sbit TR1 = TCON^6; //定时器T1的运行控制位 0:Timer1禁止计数 1:Timer1开始计数 +sbit TF0 = TCON^5; //T0溢出中断请求标志位 T0产生溢出,发生中断时,硬件将TF0置为“1”,申请中断,CPU响应时,硬件清“0”。 +sbit TR0 = TCON^4; //定时器T0的运行控制位 0:Timer0禁止计数 1:Timer0开始计数 + +/*SCON*/ +sbit SM0 = SCON^7; +sbit SM1 = SCON^6; +sbit SM2 = SCON^5; +sbit REN = SCON^4; +sbit TB8 = SCON^3; +sbit RB8 = SCON^2; +sbit TI = SCON^1; +sbit RI = SCON^0; + +/******************* P0 ****************** +*SC92F7323封装未引出的管脚:无 +*SC92F7322封装未引出的管脚:P06/P07 +*SC92F7321封装未引出的管脚:P04/P05/P06/P07 +*SC92F7320封装未引出的管脚:P0 +******************************************/ +sbit P07 = P0^7; +sbit P06 = P0^6; +sbit P05 = P0^5; +sbit P04 = P0^4; +sbit P03 = P0^3; +sbit P02 = P0^2; +sbit P01 = P0^1; +sbit P00 = P0^0; + +/************************ P1 ********************* +*SC92F7323封装未引出的管脚:无 +*SC92F7322封装未引出的管脚:P14/P15 +*SC92F7321封装未引出的管脚:P14/P15 +*SC92F7320封装未引出的管脚:P10/P11/P14/P15/P16/P17 +**************************************************/ +sbit P17 = P1^7; +sbit P16 = P1^6; +sbit P15 = P1^5; +sbit P14 = P1^4; +sbit P13 = P1^3; +sbit P12 = P1^2; +sbit P11 = P1^1; +sbit P10 = P1^0; + +/******************** P2 *******%********** +*SC92F7323封装未引出的管脚:无 +*SC92F7322封装未引出的管脚:P22/P23 +*SC92F7321封装未引出的管脚:P24/P25/P26/P27 +*SC92F7320封装未引出的管脚:P22/P23/P24/P25 +*********************************%*********/ +sbit P27 = P2^7; +sbit P26 = P2^6; +sbit P25 = P2^5; +sbit P24 = P2^4; +sbit P23 = P2^3; +sbit P22 = P2^2; +sbit P21 = P2^1; +sbit P20 = P2^0; + +/**************** P5 ************** +*SC92F7323封装未引出的管脚:无 +*SC92F7322封装未引出的管脚:P50/P51 +*SC92F7321封装未引出的管脚:P50/P51 +*SC92F7320封装未引出的管脚:P50/P51 +***********************************/ +sbit P51 = P5^1; +sbit P50 = P5^0; + +/**************************************************************************** +*注意:封装未引出的管脚,需设置为强推挽输出模式 +*IC选型:请根据所使用的IC型号,在初始化完IO口后,调用相对应的未引出管脚的IO口配置; +*如若选择SC92F7323,则不用调用宏定义。 +*****************************************************************************/ +#define SC92F7322_NIO_Init() {P0CON|=0xC0;P1CON|=0x30;P2CON|=0x0C;P5CON|=0x03;} //SC92F7322的未引出来的IO口配置 +#define SC92F7321_NIO_Init() {P0CON|=0xF0;P1CON|=0x30;P2CON|=0xF0;P5CON|=0x03;} //SC92F7321的未引出来的IO口配置 +#define SC92F7320_NIO_Init() {P0CON|=0xFF;P1CON|=0xF3;P2CON|=0x3C;P5CON|=0x03;} //SC92F7320的未引出来的IO口配置 + +#endif \ No newline at end of file diff --git a/Keil_C/FWLib/SC92F_Lib/inc/SC92F735x_C.H b/Keil_C/FWLib/SC92F_Lib/inc/SC92F735x_C.H new file mode 100644 index 0000000..1b062fb --- /dev/null +++ b/Keil_C/FWLib/SC92F_Lib/inc/SC92F735x_C.H @@ -0,0 +1,209 @@ + /*-------------------------------------------------------------------------- +SC92F735x_C.H + +C Header file for SC92F735x microcontroller. +Copyright (c) 2018 Shenzhen SinOne Chip Electronic CO., Ltd. +All rights reserved. +深圳市赛元微电子有限公司 +版本号: V1.0 +日期: 2018.04.25 +--------------------------------------------------------------------------*/ +#ifndef _SC92F735x_H_ +#define _SC92F735x_H_ + +/* ------------------- 字节寄存器-------------------- */ +///*CPU*/ +sfr ACC = 0xE0; //累加器A +sfr B = 0xF0; //通用寄存器B +sfr PSW = 0xD0; //程序状态字 +sfr DPH = 0x83; //数据指针高8位 +sfr DPL = 0x82; //数据指针低8位 +sfr SP = 0x81; //堆栈指针 + +/*system*/ +sfr PCON = 0x87; //电源管理控制寄存器 + +/*interrupt*/ +sfr IP1 = 0XB9; //中断优先级控制寄存器1 +sfr IP = 0xB8; //中断优先权控制寄存器 +sfr IE = 0xA8; //中断控制寄存器 +sfr IE1 = 0XA9; //中断控制寄存器1 + +/*PORT*/ +sfr P2PH = 0xA2; //P2口模式控制寄存器0 +sfr P2CON = 0xA1; //P2口模式控制寄存器1 +sfr P2 = 0xA0; //P2口数据寄存器 +sfr P1PH = 0x92; //P1口模式控制寄存器0 +sfr P1CON = 0x91; //P1口模式控制寄存器1 +sfr P1 = 0x90; //P1口数据寄存器 +sfr P0PH = 0x9B; //P0口模式控制寄存器1 +sfr P0CON = 0x9A; //P0口模式控制寄存器1 +sfr P0 = 0x80; //P0口数据寄存器 +sfr IOHCON= 0x97; //IOH设置寄存器 + +/*TIMER*/ +sfr TMCON = 0x8E; //定时器频率控制寄存器 +sfr TH1 = 0x8D; //定时器1高8位 +sfr TH0 = 0x8C; //定时器0高8位 +sfr TL1 = 0x8B; //定时器1低8位 +sfr TL0 = 0x8A; //定时器0低8位 +sfr TMOD = 0x89; //定时器工作模式寄存器 +sfr TCON = 0x88; //定时器控制寄存器 +sfr T2CON = 0XC8; //定时器2控制寄存器 +sfr T2MOD = 0XC9; //定时器2工作模式寄存器 +sfr RCAP2L = 0XCA; //定时器2重载/捕捉低8位 +sfr RCAP2H = 0XCB; //定时器2重载/捕捉高8位 +sfr TL2 = 0XCC; //定时器2低8位 +sfr TH2 = 0XCD; //定时器2高8位 + + +/*ADC*/ +sfr ADCCFG0 = 0xAB; //P1口ADC功能配置寄存器/参考电压 +sfr ADCCFG1 = 0xAC; //P1口ADC功能配置寄存器/参考电压 +sfr ADCCON = 0XAD; //ADC控制寄存器 +sfr ADCVL = 0xAE; //ADC 结果寄存器 +sfr ADCVH = 0xAF; //ADC 结果寄存器 + +/*PWM*/ +sfr PWMCFG0 = 0xD1; //PWM设置寄存器 + +sfr PWMCON = 0xD2; //PWM控制寄存器 +sfr PWMPRD = 0xD3; //PWM周期设置寄存器 +sfr PWMCFG1 = 0xD4; //PWM设置寄存器 +sfr PWMDTY0 = 0xD5; //PWM占空比设置寄存器 +sfr PWMDTY1 = 0XD6; //PWM占空比设置寄存器 +sfr PWMDTY2 = 0XD7; //PWM占空比设置寄存器 +sfr PWMDTY3 = 0xDD; //PWM占空比设置寄存器 +sfr PWMDTY4 = 0XDE; //PWM占空比设置寄存器 +sfr PWMDTY5 = 0XDF; //PWM占空比设置寄存器 + +///*WatchDog*/ +sfr BTMCON = 0XCE; //低频定时器控制寄存器 +sfr WDTCON = 0xCF; //WDT控制寄存器 + +/*LCD*/ +sfr OTCON = 0X8F; //LCD电压输出控制寄存器 +sfr P0VO = 0X9C; //P0 LCD Bais 输出寄存器 + +/*INT*/ +sfr INT0F = 0XBA; //INT0 下降沿中断控制寄存器 +sfr INT0R = 0XBB; //INT0 上降沿中断控制寄存器 +sfr INT2F = 0XC6; //INT2 下降沿中断控制寄存器 +sfr INT2R = 0XC7; //INT2 上降沿中断控制寄存器 + +/*IAP */ +sfr IAPCTL = 0xF6; //IAP控制寄存器 +sfr IAPDAT = 0xF5; //IAP数据寄存器 +sfr IAPADE = 0xF4; //IAP扩展地址寄存器 +sfr IAPADH = 0xF3; //IAP写入地址高位寄存器 +sfr IAPADL = 0xF2; //IAP写入地址低8位寄存器 +sfr IAPKEY = 0xF1; //IAP保护寄存器 + +/*UART*/ +sfr SCON = 0X98; //串口控制寄存器 +sfr SBUF = 0X99; //串口数据缓存寄存器 + +/*option*/ +sfr OPINX = 0XFE; +sfr OPREG = 0XFF; + +///* ------------------- 位寄存器-------------------- */ + +/*PSW*/ +sbit CY = PSW^7; //标志位 0:加法运算最高位无进位,或者减法运算最高位无借位时 1:加法运算最高位有进位,或者减法运算最高位有借位时 +sbit AC = PSW^6; //进位辅助标志位 0:无借位、进位 1:加法运算时在bit3位有进位,或减法运算在bit3位有借位时 +sbit F0 = PSW^5; //用户标志位 +sbit RS1 = PSW^4; //工作寄存器组选择位 +sbit RS0 = PSW^3; //工作寄存器组选择位 +sbit OV = PSW^2; //溢出标志位 +sbit P = PSW^0; //奇偶标志位 0:ACC中1的个数为偶数(包括0个) 1:ACC中1的个数为奇数 + +/*T2CON*/ +sbit TF2 = T2CON^7; +sbit EXF2 = T2CON^6; +sbit RCLK = T2CON^5; +sbit TCLK = T2CON^4; +sbit EXEN2 = T2CON^3; +sbit TR2 = T2CON^2; +sbit T2 = T2CON^1; +sbit CP = T2CON^0; + + +/*IP*/ +sbit IPADC = IP^6; //ADC中断优先控制位 0:设定 ADC的中断优先权是 “低” 1:设定 ADC的中断优先权是 “高” +sbit IPT2 = IP^5; //Timer2中断优先控制位 0:设定 Timer2的中断优先权是 “低” 1:设定Timer2的中断优先权是 “高” +sbit IPUART = IP^4; //UART中断优先控制位 0:设定UART的中断优先权是 “低” 1:设定UART的中断优先权是 “高” +sbit IPT1 = IP^3; //Timer1中断优先控制位 0:设定 Timer 1的中断优先权是 “低” 1:设定 Timer 1的中断优先权是 “高” 1:设定INT0的中断优先权是 “高” +sbit IPT0 = IP^1; //Timer0中断优先控制位 0:设定 Timer 0的中断优先权是 “低” 1:设定 Timer 0的中断优先权是 “高” +sbit IPINT0 = IP^0; //INT0中断优先控制位 0:设定INT0中断优先权是 “低” 1:设定INT1的中断优先权是 “高” + +/*IE*/ +sbit EA = IE^7; //中断使能的总控制 0:关闭所有的中断 1:打开所有的中断 +sbit EADC = IE^6; //ADC中断使能控制 0:关闭ADC中断 1:打开ADC中断 +sbit ET2 = IE^5; //Timer2中断使能控制 0:关闭Timer2中断 1:打开Timer2中断 +sbit EUART = IE^4; //UART中断使能控制 0:关闭UART中断 1:打开UART中断 +sbit ET1 = IE^3; //Timer1中断使能控制 0:关闭TIMER1中断 1:打开TIMER1中断 +sbit ET0 = IE^1; //Timer0中断使能控制 0:关闭TIMER0中断 1:打开TIMER0中断 +sbit EINT0 = IE^0; //INT0中断使能控制 0:关闭INT0中断 1:打开INT0中断 + +/*TCON*/ +sbit TF1 = TCON^7; //T1溢出中断请求标志位 T1产生溢出,发生中断时,硬件将TF1置为“1”,申请中断,CPU响应时,硬件清“0”。 +sbit TR1 = TCON^6; //定时器T1的运行控制位 0:Timer1禁止计数 1:Timer1开始计数 +sbit TF0 = TCON^5; //T0溢出中断请求标志位 T0产生溢出,发生中断时,硬件将TF0置为“1”,申请中断,CPU响应时,硬件清“0”。 +sbit TR0 = TCON^4; //定时器T0的运行控制位 0:Timer0禁止计数 1:Timer0开始计数 + +/*SCON*/ +sbit SM0 = SCON^7; +sbit SM1 = SCON^6; +sbit SM2 = SCON^5; +sbit REN = SCON^4; +sbit TB8 = SCON^3; +sbit RB8 = SCON^2; +sbit TI = SCON^1; +sbit RI = SCON^0; + +/******************* P0 ****************** +*SC92F7352封装未引出的管脚:无 +*SC92F7351封装未引出的管脚:P04/P05 +*SC92F7350封装未引出的管脚:P0 +******************************************/ +sbit P05 = P0^5; +sbit P04 = P0^4; +sbit P03 = P0^3; +sbit P02 = P0^2; +sbit P01 = P0^1; +sbit P00 = P0^0; + +/******************* P1 ****************** +*SC92F7352封装未引出的管脚:无 +*SC92F7351封装未引出的管脚:无 +*SC92F7350封装未引出的管脚:P10/P11/P16/P17 +******************************************/ +sbit P17 = P1^7; +sbit P16 = P1^6; +sbit P13 = P1^3; +sbit P12 = P1^2; +sbit P11 = P1^1; +sbit P10 = P1^0; + +/******************* P2 ****************** +*SC92F7352封装未引出的管脚:无 +*SC92F7351封装未引出的管脚:P26/P27 +*SC92F7350封装未引出的管脚:P24/P25 +******************************************/ +sbit P27 = P2^7; +sbit P26 = P2^6; +sbit P25 = P2^5; +sbit P24 = P2^4; +sbit P21 = P2^1; +sbit P20 = P2^0; + +/**************************************************************************** +*注意:封装未引出的管脚,需设置为强推挽输出模式 +*IC选型:请根据所使用的IC型号,在初始化完IO口后,调用相对应的未引出管脚的IO口配置; +*如若选择SC92F7352,则不用调用宏定义。 +*****************************************************************************/ +#define SC92F7351_NIO_Init() {P0CON|=0xF0;P1CON|=0x30;P2CON|=0xCC;} //SC92F7351的未引出来的IO口配置 +#define SC92F7350_NIO_Init() {P0CON|=0xFF;P1CON|=0xF3;P2CON|=0x3C;} //SC92F7350的未引出来的IO口配置 + +#endif \ No newline at end of file diff --git a/Keil_C/FWLib/SC92F_Lib/inc/SC92F736xB_C.H b/Keil_C/FWLib/SC92F_Lib/inc/SC92F736xB_C.H new file mode 100644 index 0000000..7ece2bf --- /dev/null +++ b/Keil_C/FWLib/SC92F_Lib/inc/SC92F736xB_C.H @@ -0,0 +1,252 @@ + /*-------------------------------------------------------------------------- +SC92F746xB_C.H + +C Header file for SC92F736xB microcontroller. +Copyright (c) 2018 Shenzhen SinOne Chip Electronic CO., Ltd. +All rights reserved. +深圳市赛元微电子有限公司 +版本号: V1.0 +日期: 2018.06.15 +--------------------------------------------------------------------------*/ +#ifndef _SC92F736xB_H_ +#define _SC92F736xB_H_ + +/* ------------------- 字节寄存器-------------------- */ +///*CPU*/ +sfr ACC = 0xE0; //累加器A +sfr B = 0xF0; //通用寄存器B +sfr PSW = 0xD0; //程序状态字 +sfr DPH = 0x83; //数据指针高8位 +sfr DPL = 0x82; //数据指针低8位 +sfr SP = 0x81; //堆栈指针 + + +/*system*/ +sfr PCON = 0x87; //电源管理控制寄存器 + +/*interrupt*/ +sfr IP1 = 0XB9; //中断优先级控制寄存器1 +sfr IP = 0xB8; //中断优先权控制寄存器 +sfr IE = 0xA8; //中断控制寄存器 +sfr IE1 = 0XA9; //中断控制寄存器1 + +/*PORT*/ +sfr P5PH = 0xDA; //P5口模式控制寄存器 +sfr P5CON = 0xD9; //P5口模式控制寄存器 +sfr P5 = 0xD8; //P5口数据寄存器 +sfr P2PH = 0xA2; //P2口模式控制寄存器 +sfr P2CON = 0xA1; //P2口模式控制寄存器 +sfr P2 = 0xA0; //P2口数据寄存器 +sfr P1PH = 0x92; //P1口模式控制寄存器 +sfr P1CON = 0x91; //P1口模式控制寄存器 +sfr P1 = 0x90; //P1口数据寄存器 +sfr P0PH = 0x9B; //P0口模式控制寄存器 +sfr P0CON = 0x9A; //P0口模式控制寄存器 +sfr P0 = 0x80; //P0口数据寄存器 +sfr IOHCON = 0x97; //IOH设置寄存器 + +/*TIMER*/ +sfr TMCON = 0x8E; //定时器频率控制寄存器 +sfr TH1 = 0x8D; //定时器1高8位 +sfr TH0 = 0x8C; //定时器0高8位 +sfr TL1 = 0x8B; //定时器1低8位 +sfr TL0 = 0x8A; //定时器0低8位 +sfr TMOD = 0x89; //定时器工作模式寄存器 +sfr TCON = 0x88; //定时器控制寄存器 +sfr T2CON = 0xC8; //定时器2控制寄存器 +sfr T2MOD = 0xC9; //定时器2工作模式寄存器 +sfr RCAP2L = 0xCA; //定时器2重载/捕捉低8位 +sfr RCAP2H = 0xCB; //定时器2重载/捕捉高8位 +sfr16 RCAP2 = 0xCA; +sfr TL2 = 0xCC; //定时器2低8位 +sfr TH2 = 0xCD; //定时器2高8位 + + +/*ADC*/ +sfr ADCCFG0 = 0xAB; //ADC功能配置寄存器0 +sfr ADCCFG1 = 0xAC; //ADC功能配置寄存器1 +sfr ADCCFG2 = 0XAA; //ADC功能配置寄存器2 +sfr ADCCON = 0XAD; //ADC控制寄存器 +sfr ADCVL = 0xAE; //ADC 结果寄存器 +sfr ADCVH = 0xAF; //ADC 结果寄存器 + +/*PWM*/ +sfr PWMCFG = 0xD1; //PWM设置寄存器 +sfr PWMCON = 0xD2; //PWM控制寄存器 +sfr PWMPRD = 0xD3; //PWM周期设置寄存器 +sfr PWMDTYA = 0xD4; //PWM占空比设置寄存器A +sfr PWMDTY0 = 0xD5; //PWM0设置寄存器 +sfr PWMDTY1 = 0xD6; //PWM1设置寄存器 +sfr PWMDTY2 = 0xD7; //PWM2设置寄存器 +sfr PWMDTYB = 0xDC; //PWM占空比设置寄存器B +sfr PWMDTY3 = 0xDD; //PWM3设置寄存器 +sfr PWMDTY4 = 0xDE; //PWM4设置寄存器 +sfr PWMDTY5 = 0xDF; //PWM5设置寄存器 + +///*WatchDog*/ +sfr BTMCON = 0XCE; //低频定时器控制寄存器 +sfr WDTCON = 0xCF; //WDT控制寄存器 + +/*LCD*/ +sfr OTCON = 0X8F; //LCD电压输出控制寄存器 +sfr P0VO = 0X9C; //P0 LCD Bais 输出寄存器 + +/*INT*/ +sfr INT0F = 0XBA; //INT0 下降沿中断控制寄存器 +sfr INT0R = 0XBB; //INT0 上降沿中断控制寄存器 +sfr INT1F = 0XBC; //INT1 下降沿中断控制寄存器 +sfr INT1R = 0XBD; //INT1 上降沿中断控制寄存器 +sfr INT2F = 0XC6; //INT2 下降沿中断控制寄存器 +sfr INT2R = 0XC7; //INT2 上降沿中断控制寄存器 + +/*IAP */ +sfr IAPCTL = 0xF6; //IAP控制寄存器 +sfr IAPDAT = 0xF5; //IAP数据寄存器 +sfr IAPADE = 0xF4; //IAP扩展地址寄存器 +sfr IAPADH = 0xF3; //IAP写入地址高位寄存器 +sfr IAPADL = 0xF2; //IAP写入地址低8位寄存器 +sfr IAPKEY = 0xF1; //IAP保护寄存器 + +/*uart*/ +sfr SCON = 0x98; //串口控制寄存器 +sfr SBUF = 0x99; //串口数据缓存寄存器 + +/*三合一*/ +sfr SSCON0 = 0X9D; //SPI控制寄存器0 +sfr SSCON1 = 0X9E; //SPI控制寄存器1 +sfr SSCON2 = 0X95; //SPI控制寄存器2 +sfr SSDAT = 0X9F; //SPI数据寄存器 + +sfr OPINX = 0XFE; +sfr OPREG = 0XFF; +sfr EXADH = 0XF7; + +/*Check Sum*/ +sfr CHKSUML = 0XFC; //Check Sum结果寄存器低位 +sfr CHKSUMH = 0XFD; //Check Sum结果寄存器高位 + +/*乘除法*/ +sfr EXA0 = 0xE9; //扩展累加器0 +sfr EXA1 = 0xEA; //扩展累加器1 +sfr EXA2 = 0xEB; //扩展累加器2 +sfr EXA3 = 0xEC; //扩展累加器3 +sfr EXBL = 0xED; //扩展B寄存器0 +sfr EXBH = 0xEE; //扩展B寄存器1 +sfr OPERCON = 0xEF; //运算控制寄存器 + +/* ------------------- 位寄存器-------------------- */ +/*PSW*/ +sbit CY = PSW^7; //标志位 0:加法运算最高位无进位,或者减法运算最高位无借位时 1:加法运算最高位有进位,或者减法运算最高位有借位时 +sbit AC = PSW^6; //进位辅助标志位 0:无借位、进位 1:加法运算时在bit3位有进位,或减法运算在bit3位有借位时 +sbit F0 = PSW^5; //用户标志位 +sbit RS1 = PSW^4; //工作寄存器组选择位 +sbit RS0 = PSW^3; //工作寄存器组选择位 +sbit OV = PSW^2; //溢出标志位 +sbit F1 = PSW^1; //F1标志 +sbit P = PSW^0; //奇偶标志位 0:ACC中1的个数为偶数(包括0个) 1:ACC中1的个数为奇数 + +/*T2CON*/ +sbit TF2 = T2CON^7; +sbit EXF2 = T2CON^6; +sbit RCLK = T2CON^5; +sbit TCLK = T2CON^4; +sbit EXEN2 = T2CON^3; +sbit TR2 = T2CON^2; +sbit T2 = T2CON^1; +sbit CP = T2CON^0; + + +/*IP*/ +sbit IPADC = IP^6; //ADC中断优先控制位 0:设定 ADC的中断优先权是 “低” 1:设定 ADC的中断优先权是 “高” +sbit IPT2 = IP^5; //Timer2中断优先控制位 0:设定 Timer2的中断优先权是 “低” 1:设定Timer2的中断优先权是 “高” +sbit IPUART = IP^4; //UART中断优先控制位 0:设定UART的中断优先权是 “低” 1:设定UART的中断优先权是 “高” +sbit IPT1 = IP^3; //Timer1中断优先控制位 0:设定 Timer 1的中断优先权是 “低” 1:设定 Timer 1的中断优先权是 “高” 1:设定INT0的中断优先权是 “高” +sbit IPINT1 = IP^2; //INT1中断优先控制位 0:设定INT1中断优先权是 “低” 1:设定INT1的中断优先权是 “高” +sbit IPT0 = IP^1; //Timer0中断优先控制位 0:设定 Timer 0的中断优先权是 “低” 1:设定 Timer 0的中断优先权是 “高” +sbit IPINT0 = IP^0; //INT0中断优先控制位 0:设定INT0中断优先权是 “低” 1:设定INT0的中断优先权是 “高” + +/*IE*/ +sbit EA = IE^7; //中断使能的总控制 0:关闭所有的中断 1:打开所有的中断 +sbit EADC = IE^6; //ADC中断使能控制 0:关闭ADC中断 1:打开ADC中断 +sbit ET2 = IE^5; //Timer2中断使能控制 0:关闭Timer2中断 1:打开Timer2中断 +sbit EUART = IE^4; //UART中断使能控制 0:关闭UART中断 1:打开UART中断 +sbit ET1 = IE^3; //Timer1中断使能控制 0:关闭TIMER1中断 1:打开TIMER1中断 +sbit EINT1 = IE^2; //INT1中断使能控制 0:关闭INT1中断 1:打开INT1中断 +sbit ET0 = IE^1; //Timer0中断使能控制 0:关闭TIMER0中断 1:打开TIMER0中断 +sbit EINT0 = IE^0; //INT0中断使能控制 0:关闭INT0中断 1:打开INT0中断 + +/*TCON*/ +sbit TF1 = TCON^7; //T1溢出中断请求标志位 T1产生溢出,发生中断时,硬件将TF1置为“1”,申请中断,CPU响应时,硬件清“0”。 +sbit TR1 = TCON^6; //定时器T1的运行控制位 0:Timer1禁止计数 1:Timer1开始计数 +sbit TF0 = TCON^5; //T0溢出中断请求标志位 T0产生溢出,发生中断时,硬件将TF0置为“1”,申请中断,CPU响应时,硬件清“0”。 +sbit TR0 = TCON^4; //定时器T0的运行控制位 0:Timer0禁止计数 1:Timer0开始计数 + +/*SCON*/ +sbit SM0 = SCON^7; +sbit SM1 = SCON^6; +sbit SM2 = SCON^5; +sbit REN = SCON^4; +sbit TB8 = SCON^3; +sbit RB8 = SCON^2; +sbit TI = SCON^1; +sbit RI = SCON^0; + +/******************* P0 ****************** +*SC92F7363B封装未引出的管脚:无 +*SC92F736B封装未引出的管脚:P06/P07 +*SC92F7361B封装未引出的管脚:P02/P03/P04/P06/P07 +******************************************/ +sbit P07 = P0^7; +sbit P06 = P0^6; +sbit P05 = P0^5; +sbit P04 = P0^4; +sbit P03 = P0^3; +sbit P02 = P0^2; +sbit P01 = P0^1; +sbit P00 = P0^0; + +/******************* P1 ****************** +*SC92F7363B封装未引出的管脚:无 +*SC92F7362B封装未引出的管脚:P16/P17 +*SC92F7361B封装未引出的管脚:P16/P17 +******************************************/ +sbit P17 = P1^7; +sbit P16 = P1^6; +sbit P15 = P1^5; +sbit P14 = P1^4; +sbit P13 = P1^3; +sbit P12 = P1^2; +sbit P11 = P1^1; +sbit P10 = P1^0; + +/******************* P2 ****************** +*SC92F7363B封装未引出的管脚:无 +*SC92F7362B封装未引出的管脚:P22/P23 +*SC92F7361B封装未引出的管脚:P22/P23/P27 +******************************************/ +sbit P27 = P2^7; +sbit P26 = P2^6; +sbit P25 = P2^5; +sbit P24 = P2^4; +sbit P23 = P2^3; +sbit P22 = P2^2; +sbit P21 = P2^1; +sbit P20 = P2^0; + +/******************* P5 ****************** +*SC92F7363B封装未引出的管脚:无 +*SC92F7362B封装未引出的管脚:P50/P51 +*SC92F7361B封装未引出的管脚:P50/P51 +******************************************/ +sbit P51 = P5^1; +sbit P50 = P5^0; + +/**************************************************************************** +*注意:封装未引出的管脚,需设置为强推挽输出模式 +*IC选型:请根据所使用的IC型号,在初始化完IO口后,调用相对应的未引出管脚的IO口配置; +*如若选择SC92F7363B,则不用调用宏定义。 +*****************************************************************************/ +#define SC92F7362B_NIO_Init() {P0CON|=0xC0,P1CON|=0xC0,P2CON|=0x0C,P5CON|=0x03;} //SC92F7362B的未引出来的IO口配置 +#define SC92F7361B_NIO_Init() {P0CON|=0xEC,P1CON|=0xC0,P2CON|=0x8C,P5CON|=0x03;} //SC92F7361B的未引出来的IO口配置 + +#endif \ No newline at end of file diff --git a/Keil_C/FWLib/SC92F_Lib/inc/SC92F740x_C.H b/Keil_C/FWLib/SC92F_Lib/inc/SC92F740x_C.H new file mode 100644 index 0000000..76a2903 --- /dev/null +++ b/Keil_C/FWLib/SC92F_Lib/inc/SC92F740x_C.H @@ -0,0 +1,222 @@ + /*-------------------------------------------------------------------------- +SC92F740x_C.H + +C Header file for SC92F740x microcontroller. +Copyright (c) 2019 Shenzhen SinOne Chip Electronic CO., Ltd. +All rights reserved. +深圳市赛元微电子有限公司 +版本号: V1.0 +日期: 2019.10.31 +--------------------------------------------------------------------------*/ +#ifndef _SC92F740x_H_ +#define _SC92F740x_H_ + +/* ------------------- 字节寄存器-------------------- */ +///*CPU*/ +sfr ACC = 0xE0; //累加器A +sfr B = 0xF0; //通用寄存器B +sfr PSW = 0xD0; //程序状态字 +sfr DPH = 0x83; //数据指针高8位 +sfr DPL = 0x82; //数据指针低8位 +sfr SP = 0x81; //堆栈指针 + + +/*system*/ +sfr PCON = 0x87; //电源管理控制寄存器 + +/*interrupt*/ +sfr IP1 = 0XB9; //中断优先级控制寄存器1 +sfr IP = 0xB8; //中断优先权控制寄存器 +sfr IE = 0xA8; //中断控制寄存器 +sfr IE1 = 0XA9; //中断控制寄存器1 + +/*PORT*/ +sfr P2PH = 0xA2; //P2口模式控制寄存器 +sfr P2CON = 0xA1; //P2口模式控制寄存器 +sfr P2 = 0xA0; //P2口数据寄存器 +sfr P1PH = 0x92; //P1口模式控制寄存器 +sfr P1CON = 0x91; //P1口模式控制寄存器 +sfr P1 = 0x90; //P1口数据寄存器 +sfr P0PH = 0x9B; //P0口模式控制寄存器 +sfr P0CON = 0x9A; //P0口模式控制寄存器 +sfr P0 = 0x80; //P0口数据寄存器 + +/*TIMER*/ +sfr TMCON = 0x8E; //定时器频率控制寄存器 +sfr TH1 = 0x8D; //定时器1高8位 +sfr TH0 = 0x8C; //定时器0高8位 +sfr TL1 = 0x8B; //定时器1低8位 +sfr TL0 = 0x8A; //定时器0低8位 +sfr TMOD = 0x89; //定时器工作模式寄存器 +sfr TCON = 0x88; //定时器控制寄存器 +sfr T2CON = 0xC8; //定时器2控制寄存器 +sfr T2MOD = 0xC9; //定时器2工作模式寄存器 +sfr RCAP2L = 0xCA; //定时器2重载/捕捉低8位 +sfr RCAP2H = 0xCB; //定时器2重载/捕捉高8位 +sfr TL2 = 0xCC; //定时器2低8位 +sfr TH2 = 0xCD; //定时器2高8位 + + +/*ADC*/ +sfr ADCCFG1 = 0xAA; //ADC功能配置寄存器0 +sfr ADCCFG0 = 0xAB; //ADC功能配置寄存器1 +sfr ADCCON = 0XAD; //ADC控制寄存器 +sfr ADCVL = 0xAE; //ADC 结果寄存器 +sfr ADCVH = 0xAF; //ADC 结果寄存器 + +/*PWM*/ +sfr PWMCFG = 0xD1; //PWM设置寄存器 +sfr PWMCON0 = 0xD2; //PWM控制寄存器 +sfr PWMPRD = 0xD3; //PWM周期设置寄存器 +sfr PWMDTYA = 0xD4; //PWM占空比设置寄存器A +sfr PWMDTY0 = 0xD5; //PWM0设置寄存器 +sfr PWMDTY1 = 0xD6; //PWM1设置寄存器 +sfr PWMDTY2 = 0xD7; //PWM2设置寄存器 +sfr PWMCON1 = 0xDA; //PWM控制寄存器 +sfr PWMDTYB = 0xDB; //PWM占空比设置寄存器B +sfr PWMDTY3 = 0xDC; //PWM3设置寄存器 +sfr PWMDTY4 = 0xDD; //PWM4设置寄存器 +sfr PWMDTY5 = 0xDE; //PWM5设置寄存器 +sfr PWMDTY6 = 0xDF; //PWM6设置寄存器 + + +// +///*WatchDog*/ +sfr BTMCON = 0XCE; //低频定时器控制寄存器 +sfr WDTCON = 0xCF; //WDT控制寄存器 + + +sfr OTCON = 0X8F; //输出控制寄存器 + +/*INT*/ +sfr INT0F = 0XBA; //INT0 下降沿中断控制寄存器 +sfr INT0R = 0XBB; //INT0 上降沿中断控制寄存器 +sfr INT1F = 0XBC; //INT1 下降沿中断控制寄存器 +sfr INT1R = 0XBD; //INT1 上降沿中断控制寄存器 +sfr INT2F = 0XC6; //INT2 下降沿中断控制寄存器 +sfr INT2R = 0XC7; //INT2 上降沿中断控制寄存器 + +/*IAP */ +sfr IAPCTL = 0xF6; //IAP控制寄存器 +sfr IAPDAT = 0xF5; //IAP数据寄存器 +sfr IAPADE = 0xF4; //IAP扩展地址寄存器 +sfr IAPADH = 0xF3; //IAP写入地址高位寄存器 +sfr IAPADL = 0xF2; //IAP写入地址低8位寄存器 +sfr IAPKEY = 0xF1; //IAP保护寄存器 + +/*uart0*/ +sfr SCON = 0X98; //uart控制寄存器 +sfr SBUF = 0X99; //uart0数据寄存器 + +/*三合一*/ +sfr SSCON0 = 0X9D; //SSI控制寄存器0 +sfr SSCON1 = 0X9E; //SSI控制寄存器1 +sfr SSCON2 = 0X95; //SSI控制寄存器2 +sfr SSDAT = 0X9F; //SSI数据寄存器 + +sfr OPINX = 0XFE; +sfr OPREG = 0XFF; + +/*Check Sum*/ +sfr CHKSUML = 0XFC; //Check Sum结果寄存器低位 +sfr CHKSUMH = 0XFD; //Check Sum结果寄存器高位 + +sfr OPERCON = 0xEF; //运算控制寄存器 + +///* ------------------- 位寄存器-------------------- */ +/*PSW*/ +sbit CY = PSW^7; //标志位 0:加法运算最高位无进位,或者减法运算最高位无借位时 1:加法运算最高位有进位,或者减法运算最高位有借位时 +sbit AC = PSW^6; //进位辅助标志位 0:无借位、进位 1:加法运算时在bit3位有进位,或减法运算在bit3位有借位时 +sbit F0 = PSW^5; //用户标志位 +sbit RS1 = PSW^4; //工作寄存器组选择位 +sbit RS0 = PSW^3; //工作寄存器组选择位 +sbit OV = PSW^2; //溢出标志位 +sbit F1 = PSW^1; //F1标志 +sbit P = PSW^0; //奇偶标志位 0:ACC中1的个数为偶数(包括0个) 1:ACC中1的个数为奇数 + +/*T2CON*/ +sbit TF2 = T2CON^7; +sbit EXF2 = T2CON^6; +sbit RCLK = T2CON^5; +sbit TCLK = T2CON^4; +sbit EXEN2 = T2CON^3; +sbit TR2 = T2CON^2; +sbit T2 = T2CON^1; +sbit CP = T2CON^0; + + +/*IP*/ +sbit IPADC = IP^6; //ADC中断优先控制位 0:设定 ADC的中断优先权是 “低” 1:设定 ADC的中断优先权是 “高” +sbit IPT2 = IP^5; //Timer2中断优先控制位 0:设定 Timer2的中断优先权是 “低” 1:设定Timer2的中断优先权是 “高” +sbit IPUART = IP^4; //UART中断优先控制位 0:设定 UART的中断优先权是 “低” 1:设定UART的中断优先权是 “高” +sbit IPT1 = IP^3; //Timer1中断优先控制位 0:设定 Timer 1的中断优先权是 “低” 1:设定 Timer 1的中断优先权是 “高” +sbit IPINT1 = IP^2; //INT1中断优先控制位 0:设定 INT1中断优先权是 “低” 1:设定INT1的中断优先权是 “高” +sbit IPT0 = IP^1; //Timer0中断优先控制位 0:设定 Timer 0的中断优先权是 “低” 1:设定 Timer 0的中断优先权是 “高” +sbit IPINT0 = IP^0; //INT0中断优先控制位 0:设定 INT0中断优先权是 “低” 1:设定INT0的中断优先权是 “高” + +/*IE*/ +sbit EA = IE^7; //中断使能的总控制 0:关闭所有的中断 1:打开所有的中断 +sbit EADC = IE^6; //ADC中断使能控制 0:关闭ADC中断 1:打开ADC中断 +sbit ET2 = IE^5; //Timer2中断使能控制 0:关闭Timer2中断 1:打开Timer2中断 +sbit EUART = IE^4; //UART中断使能控制 0:关闭UART中断 1:打开UART中断 +sbit ET1 = IE^3; //Timer1中断使能控制 0:关闭TIMER1中断 1:打开TIMER1中断 +sbit EINT1 = IE^2; //INT1中断使能控制 0:关闭INT1中断 1:打开INT1中断 +sbit ET0 = IE^1; //Timer0中断使能控制 0:关闭TIMER0中断 1:打开TIMER0中断 +sbit EINT0 = IE^0; //INT0中断使能控制 0:关闭INT0中断 1:打开INT0中断 + +/*TCON*/ +sbit TF1 = TCON^7; //T1溢出中断请求标志位 T1产生溢出,发生中断时,硬件将TF1置为“1”,申请中断,CPU响应时,硬件清“0”。 +sbit TR1 = TCON^6; //定时器T1的运行控制位 0:Timer1禁止计数 1:Timer1开始计数 +sbit TF0 = TCON^5; //T0溢出中断请求标志位 T0产生溢出,发生中断时,硬件将TF0置为“1”,申请中断,CPU响应时,硬件清“0”。 +sbit TR0 = TCON^4; //定时器T0的运行控制位 0:Timer0禁止计数 1:Timer0开始计数 + +/*SCON*/ +sbit SM0 = SCON^7; +sbit SM1 = SCON^6; +sbit SM2 = SCON^5; +sbit REN = SCON^4; +sbit TB8 = SCON^3; +sbit RB8 = SCON^2; +sbit TI = SCON^1; +sbit RI = SCON^0; + +/******************* P0 ****************** +*SC92F7402封装未引出的管脚:无 +*SC92F7401封装未引出的管脚:无 +******************************************/ +sbit P01 = P0^1; +sbit P00 = P0^0; + +/******************* P1 ****************** +*SC92F7402封装未引出的管脚:无 +*SC92F7401封装未引出的管脚:P12/P13 +******************************************/ +sbit P17 = P1^7; +sbit P16 = P1^6; +sbit P15 = P1^5; +sbit P14 = P1^4; +sbit P13 = P1^3; +sbit P12 = P1^2; +sbit P11 = P1^1; +sbit P10 = P1^0; + +/******************* P2 ****************** +*SC92F7402封装未引出的管脚:无 +*SC92F7401封装未引出的管脚:P24/P25 +******************************************/ +sbit P27 = P2^7; +sbit P26 = P2^6; +sbit P25 = P2^5; +sbit P24 = P2^4; +sbit P23 = P2^3; +sbit P22 = P2^2; +sbit P21 = P2^1; +sbit P20 = P2^0; + +/**************************************************************************** +*注意:封装未引出的管脚,需设置为强推挽输出模式 +*IC选型:请根据所使用的IC型号,在初始化完IO口后,调用相对应的未引出管脚的IO口配置; +*如若选择SC92F7402,则不用调用宏定义。 +*****************************************************************************/ +#define SC92F7401_NIO_Init() {P1CON|=0x0C,P2CON|=0x30;} //SC92F7401的未引出来的IO口配置 +#endif \ No newline at end of file diff --git a/Keil_C/FWLib/SC92F_Lib/inc/SC92F742x_C.H b/Keil_C/FWLib/SC92F_Lib/inc/SC92F742x_C.H new file mode 100644 index 0000000..99ae7c6 --- /dev/null +++ b/Keil_C/FWLib/SC92F_Lib/inc/SC92F742x_C.H @@ -0,0 +1,237 @@ + /*-------------------------------------------------------------------------- +SC92F742x_C.H + +C Header file for SC92F742x microcontroller. +Copyright (c) 2018 Shenzhen SinOne Chip Electronic CO., Ltd. +All rights reserved. +深圳市赛元微电子有限公司 +版本号: V1.0 +日期: 2018.05.15 +--------------------------------------------------------------------------*/ +#ifndef _SC92F742x_H_ +#define _SC92F742x_H_ + +/* ------------------- 字节寄存器-------------------- */ +///*CPU*/ +sfr ACC = 0xE0; //累加器A +sfr B = 0xF0; //通用寄存器B +sfr PSW = 0xD0; //程序状态字 +sfr DPH = 0x83; //数据指针高8位 +sfr DPL = 0x82; //数据指针低8位 +sfr SP = 0x81; //堆栈指针 + +/*system*/ +sfr PCON = 0x87; //电源管理控制寄存器 + +/*interrupt*/ +sfr IP1 = 0XB9; //中断优先级控制寄存器1 +sfr IP = 0xB8; //中断优先权控制寄存器 +sfr IE = 0xA8; //中断控制寄存器 +sfr IE1 = 0XA9; //中断控制寄存器1 + +/*PORT*/ +sfr P5PH = 0xDA; //P5口模式控制寄存器0 +sfr P5CON = 0xD9; //P5口模式控制寄存器1 +sfr P5 = 0xD8; //P5口数据寄存器 +sfr P2PH = 0xA2; //P2口模式控制寄存器0 +sfr P2CON = 0xA1; //P2口模式控制寄存器1 +sfr P2 = 0xA0; //P2口数据寄存器 +sfr P1PH = 0x92; //P1口模式控制寄存器0 +sfr P1CON = 0x91; //P1口模式控制寄存器1 +sfr P1 = 0x90; //P1口数据寄存器 +sfr P0PH = 0x9B; //P0口模式控制寄存器1 +sfr P0CON = 0x9A; //P0口模式控制寄存器1 +sfr P0 = 0x80; //P0口数据寄存器 +sfr IOHCON = 0x97; //IOH设置寄存器 + +/*TIMER*/ +sfr TMCON = 0x8E; //定时器频率控制寄存器 +sfr TH1 = 0x8D; //定时器1高8位 +sfr TH0 = 0x8C; //定时器0高8位 +sfr TL1 = 0x8B; //定时器1低8位 +sfr TL0 = 0x8A; //定时器0低8位 +sfr TMOD = 0x89; //定时器工作模式寄存器 +sfr TCON = 0x88; //定时器控制寄存器 +sfr T2CON = 0XC8; //定时器2控制寄存器 +sfr T2MOD = 0XC9; //定时器2工作模式寄存器 +sfr RCAP2L = 0XCA; //定时器2重载/捕捉低8位 +sfr RCAP2H = 0XCB; //定时器2重载/捕捉高8位 +sfr TL2 = 0XCC; //定时器2低8位 +sfr TH2 = 0XCD; //定时器2高8位 + + +/*ADC*/ +sfr ADCCFG0 = 0xAB; //ADC设置寄存器0 +sfr ADCCFG1 = 0xAC; //ADC设置寄存器1 +sfr ADCCON = 0XAD; //ADC控制寄存器 +sfr ADCVL = 0xAE; //ADC 结果寄存器 +sfr ADCVH = 0xAF; //ADC 结果寄存器 + +/*PWM*/ +sfr PWMCFG0 = 0xD1; //PWM设置寄存器0 +sfr PWMCON = 0xD2; //PWM控制寄存器 +sfr PWMPRD = 0xD3; //PWM周期设置寄存器 +sfr PWMCFG1 = 0xD4; //PWM设置寄存器1 +sfr PWMDTY0 = 0xD5; //PWM0占空比设置寄存器 +sfr PWMDTY1 = 0XD6; //PWM1占空比设置寄存器 +sfr PWMDTY2 = 0XD7; //PWM2占空比设置寄存器 +sfr PWMDTY3 = 0xDD; //PWM3占空比设置寄存器 +sfr PWMDTY4 = 0XDE; //PWM4占空比设置寄存器 +sfr PWMDTY5 = 0XDF; //PWM5占空比设置寄存器 + +///*WatchDog*/ +sfr BTMCON = 0XCE; //低频定时器控制寄存器 +sfr WDTCON = 0xCF; //WDT控制寄存器 + +/*LCD*/ +sfr OTCON = 0X8F; //LCD电压输出控制寄存器 +sfr P0VO = 0X9C; //P0 LCD Bais 输出寄存器 + +/*INT*/ +sfr INT0F = 0XBA; //INT0 下降沿中断控制寄存器 +sfr INT0R = 0XBB; //INT0 上降沿中断控制寄存器 +sfr INT1F = 0XBC; //INT1 下降沿中断控制寄存器 +sfr INT1R = 0XBD; //INT1 上降沿中断控制寄存器 +sfr INT2F = 0XC6; //INT2 下降沿中断控制寄存器 +sfr INT2R = 0XC7; //INT2 上降沿中断控制寄存器 + +/*IAP */ +sfr IAPCTL = 0xF6; //IAP控制寄存器 +sfr IAPDAT = 0xF5; //IAP数据寄存器 +sfr IAPADE = 0xF4; //IAP扩展地址寄存器 +sfr IAPADH = 0xF3; //IAP写入地址高位寄存器 +sfr IAPADL = 0xF2; //IAP写入地址低8位寄存器 +sfr IAPKEY = 0xF1; //IAP保护寄存器 + +/*SSI*/ +sfr SS0CON0 = 0XA5; //SSI0控制寄存器2 +sfr SS0CON1 = 0XA6; //SSI0控制寄存器1 +sfr SS0CON2 = 0XA4; //SSI0控制寄存器0 +sfr SS0DAT = 0XA7; //SSI0数据寄存器 + +sfr SS1CON2 = 0X95; //SSI1控制寄存器2 +sfr SS1CON0 = 0X9D; //SSI1控制寄存器0 +sfr SS1CON1 = 0X9E; //SSI1控制寄存器1 +sfr SS1DAT = 0X9F; //SSI1数据寄存器 + +/*CHKSUM*/ +sfr OPERCON = 0xEF; //运算控制寄存器 +sfr CHKSUML = 0xFC; //CHKSUM结果寄存器低位 +sfr CHKSUMH = 0XFD; //CHKSUM结果寄存器高位 + +/*option*/ +sfr OPINX = 0XFE; //Option指针 +sfr OPREG = 0XFF; //Option寄存器 + +///* ------------------- 位寄存器-------------------- */ + +/*PSW*/ +sbit CY = PSW^7; //标志位 0:加法运算最高位无进位,或者减法运算最高位无借位时 1:加法运算最高位有进位,或者减法运算最高位有借位时 +sbit AC = PSW^6; //进位辅助标志位 0:无借位、进位 1:加法运算时在bit3位有进位,或减法运算在bit3位有借位时 +sbit F0 = PSW^5; //用户标志位 +sbit RS1 = PSW^4; //工作寄存器组选择位 +sbit RS0 = PSW^3; //工作寄存器组选择位 +sbit OV = PSW^2; //溢出标志位 +sbit F1 = PSW^1; //F1标志 +sbit P = PSW^0; //奇偶标志位 0:ACC中1的个数为偶数(包括0个) 1:ACC中1的个数为奇数 + +/*T2CON*/ +sbit TF2 = T2CON^7; +sbit EXF2 = T2CON^6; +sbit RCLK = T2CON^5; +sbit TCLK = T2CON^4; +sbit EXEN2 = T2CON^3; +sbit TR2 = T2CON^2; +sbit T2 = T2CON^1; +sbit CP = T2CON^0; + + +/*IP*/ +sbit IPADC = IP^6; //ADC中断优先控制位 0:设定 ADC的中断优先权是 “低” 1:设定 ADC的中断优先权是 “高” +sbit IPT2 = IP^5; //Timer2中断优先控制位 0:设定 Timer2的中断优先权是 “低” 1:设定Timer2的中断优先权是 “高” +sbit IPSSI0 = IP^4; //SSI0中断优先控制位 0:设定SSI0的中断优先权是 “低” 1:设定SSI0的中断优先权是 “高” +sbit IPT1 = IP^3; //Timer1中断优先控制位 0:设定 Timer 1的中断优先权是 “低” 1:设定 Timer 1的中断优先权是 “高” +sbit IPINT1 = IP^2; //INT1中断优先控制位 0:设定INT1中断优先权是 “低” 1:设定INT1的中断优先权是 “高” +sbit IPT0 = IP^1; //Timer0中断优先控制位 0:设定 Timer 0的中断优先权是 “低” 1:设定 Timer 0的中断优先权是 “高” +sbit IPINT0 = IP^0; //INT0中断优先控制位 0:设定INT0中断优先权是 “低” 1:设定INT0的中断优先权是 “高” + +/*IE*/ +sbit EA = IE^7; //中断使能的总控制 0:关闭所有的中断 1:打开所有的中断 +sbit EADC = IE^6; //ADC中断使能控制 0:关闭ADC中断 1:打开ADC中断 +sbit ET2 = IE^5; //Timer2中断使能控制 0:关闭Timer2中断 1:打开Timer2中断 +sbit ESSI0 = IE^4; //SSI0中断使能控制 0:关闭SSI0中断 1:打开SSI0中断 +sbit ET1 = IE^3; //Timer1中断使能控制 0:关闭TIMER1中断 1:打开TIMER1中断 +sbit EINT1 = IE^2; //INT1中断使能控制 0:关闭INT1中断 1:打开INT1中断 +sbit ET0 = IE^1; //Timer0中断使能控制 0:关闭TIMER0中断 1:打开TIMER0中断 +sbit EINT0 = IE^0; //INT0中断使能控制 0:关闭INT0中断 1:打开INT0中断 + +/*TCON*/ +sbit TF1 = TCON^7; //T1溢出中断请求标志位 T1产生溢出,发生中断时,硬件将TF1置为“1”,申请中断,CPU响应时,硬件清“0”。 +sbit TR1 = TCON^6; //定时器T1的运行控制位 0:Timer1禁止计数 1:Timer1开始计数 +sbit TF0 = TCON^5; //T0溢出中断请求标志位 T0产生溢出,发生中断时,硬件将TF0置为“1”,申请中断,CPU响应时,硬件清“0”。 +sbit TR0 = TCON^4; //定时器T0的运行控制位 0:Timer0禁止计数 1:Timer0开始计数 + +/******************* P0 ****************** +*SC92F7423封装未引出的管脚:无 +*SC92F7422封装未引出的管脚:P06/P07 +*SC92F7421封装未引出的管脚:P04/P05/P06/P07 +*SC92F7420封装未引出的管脚:P0 +******************************************/ +sbit P07 = P0^7; +sbit P06 = P0^6; +sbit P05 = P0^5; +sbit P04 = P0^4; +sbit P03 = P0^3; +sbit P02 = P0^2; +sbit P01 = P0^1; +sbit P00 = P0^0; + +/************************ P1 ********************* +*SC92F7423封装未引出的管脚:无 +*SC92F7422封装未引出的管脚:P14/P15 +*SC92F7421封装未引出的管脚:P14/P15 +*SC92F7420封装未引出的管脚:P10/P11/P14/P15/P16/P17 +**************************************************/ +sbit P17 = P1^7; +sbit P16 = P1^6; +sbit P15 = P1^5; +sbit P14 = P1^4; +sbit P13 = P1^3; +sbit P12 = P1^2; +sbit P11 = P1^1; +sbit P10 = P1^0; + +/******************** P2 *******%********** +*SC92F7423封装未引出的管脚:无 +*SC92F7422封装未引出的管脚:P22/P23 +*SC92F7421封装未引出的管脚:P24/P25/P26/P27 +*SC92F7420封装未引出的管脚:P22/P23/P24/P25 +*********************************%*********/ +sbit P27 = P2^7; +sbit P26 = P2^6; +sbit P25 = P2^5; +sbit P24 = P2^4; +sbit P23 = P2^3; +sbit P22 = P2^2; +sbit P21 = P2^1; +sbit P20 = P2^0; + +/**************** P5 ************** +*SC92F7423封装未引出的管脚:无 +*SC92F7422封装未引出的管脚:P50/P51 +*SC92F7421封装未引出的管脚:P50/P51 +*SC92F7420封装未引出的管脚:P50/P51 +***********************************/ +sbit P51 = P5^1; +sbit P50 = P5^0; + +/**************************************************************************** +*注意:封装未引出的管脚,需设置为强推挽输出模式 +*IC选型:请根据所使用的IC型号,在初始化完IO口后,调用相对应的未引出管脚的IO口配置; +*如若选择SC92F7423,则不用调用宏定义。 +*****************************************************************************/ +#define SC92F7422_NIO_Init() {P0CON|=0xC0;P1CON|=0x30;P2CON|=0x0C;P5CON|=0x03;} //SC92F7422的未引出来的IO口配置 +#define SC92F7421_NIO_Init() {P0CON|=0xF0;P1CON|=0x30;P2CON|=0xF0;P5CON|=0x03;} //SC92F7421的未引出来的IO口配置 +#define SC92F7420_NIO_Init() {P0CON|=0xFF;P1CON|=0xF3;P2CON|=0x3C;P5CON|=0x03;} //SC92F7420的未引出来的IO口配置 + +#endif \ No newline at end of file diff --git a/Keil_C/FWLib/SC92F_Lib/inc/SC92F744xB_C.H b/Keil_C/FWLib/SC92F_Lib/inc/SC92F744xB_C.H new file mode 100644 index 0000000..e48dd76 --- /dev/null +++ b/Keil_C/FWLib/SC92F_Lib/inc/SC92F744xB_C.H @@ -0,0 +1,294 @@ +/*-------------------------------------------------------------------------- +SC92F744xB_C.H + +C Header file for SC92F744xB microcontroller. +Copyright (c) 2018 Shenzhen SinOne Chip Electronic CO., Ltd. +All rights reserved. +深圳市赛元微电子有限公司 +版本号: V1.0 +日期: 2018.10.30 +--------------------------------------------------------------------------*/ +#ifndef _SC92F744xB_H_ +#define _SC92F744xB_H_ + +/* ------------------- 字节寄存器-------------------- */ +///*CPU*/ +sfr ACC = 0xE0; //累加器A +sfr B = 0xF0; //通用寄存器B +sfr PSW = 0xD0; //程序状态字 +sfr DPH = 0x83; //数据指针高8位 +sfr DPL = 0x82; //数据指针低8位 +sfr SP = 0x81; //堆栈指针 + + +/*system*/ +sfr PCON = 0x87; //电源管理控制寄存器 + +/*interrupt*/ +sfr IP1 = 0XB9; //中断优先级控制寄存器1 +sfr IP = 0xB8; //中断优先权控制寄存器 +sfr IE = 0xA8; //中断控制寄存器 +sfr IE1 = 0XA9; //中断控制寄存器1 + +/*PORT*/ +sfr P5PH = 0xDA; //P5口模式控制寄存器 +sfr P5CON = 0xD9; //P5口模式控制寄存器 +sfr P5 = 0xD8; //P5口数据寄存器 +sfr P4PH = 0xC2; //P4口模式控制寄存器 +sfr P4CON = 0xC1; //P4口模式控制寄存器 +sfr P4 = 0xC0; //P4口数据寄存器 +sfr P3PH = 0xB2; //P3口模式控制寄存器 +sfr P3CON = 0xB1; //P3口模式控制寄存器 +sfr P3 = 0xB0; //P3口数据寄存器 +sfr P2PH = 0xA2; //P2口模式控制寄存器 +sfr P2CON = 0xA1; //P2口模式控制寄存器 +sfr P2 = 0xA0; //P2口数据寄存器 +sfr P1PH = 0x92; //P1口模式控制寄存器 +sfr P1CON = 0x91; //P1口模式控制寄存器 +sfr P1 = 0x90; //P1口数据寄存器 +sfr P0PH = 0x9B; //P0口模式控制寄存器 +sfr P0CON = 0x9A; //P0口模式控制寄存器 +sfr P0 = 0x80; //P0口数据寄存器 +sfr IOHCON0 = 0x96; //IOH0设置寄存器 +sfr IOHCON1 = 0x97; //IOH1设置寄存器 + +/*TIMER*/ +sfr TMCON = 0x8E; //定时器频率控制寄存器 +sfr TH1 = 0x8D; //定时器1高8位 +sfr TH0 = 0x8C; //定时器0高8位 +sfr TL1 = 0x8B; //定时器1低8位 +sfr TL0 = 0x8A; //定时器0低8位 +sfr TMOD = 0x89; //定时器工作模式寄存器 +sfr TCON = 0x88; //定时器控制寄存器 +sfr T2CON = 0xC8; //定时器2控制寄存器 +sfr T2MOD = 0xC9; //定时器2工作模式寄存器 +sfr RCAP2L = 0xCA; //定时器2重载/捕捉低8位 +sfr RCAP2H = 0xCB; //定时器2重载/捕捉高8位 +sfr TL2 = 0xCC; //定时器2低8位 +sfr TH2 = 0xCD; //定时器2高8位 + + +/*ADC*/ +sfr ADCCFG0 = 0xAB; //ADC功能配置寄存器0 +sfr ADCCFG1 = 0xAC; //ADC功能配置寄存器1 +sfr ADCCFG2 = 0XAA; //ADC功能配置寄存器2 +sfr ADCCON = 0XAD; //ADC控制寄存器 +sfr ADCVL = 0xAE; //ADC 结果寄存器 +sfr ADCVH = 0xAF; //ADC 结果寄存器 + +/*PWM*/ +sfr PWMCFG = 0xD4; //PWM设置寄存器 +sfr PWMCON = 0xD3; //PWM控制寄存器 + + +// +///*WatchDog*/ +sfr BTMCON = 0XCE; //低频定时器控制寄存器 +sfr WDTCON = 0xCF; //WDT控制寄存器 + + +/*LCD*/ +sfr OTCON = 0X8F; //LCD电压输出控制寄存器 +sfr P0VO = 0X9C; //P0 LCD Bais 输出寄存器 +sfr P1VO = 0X94; //P1 LCD Bais 输出寄存器 +sfr P2VO = 0XA3; //P2 LCD Bais 输出寄存器 +sfr P3VO = 0XB3; //P3 LCD Bais 输出寄存器 + +sfr DDRCON = 0X93; //显示驱动设置寄存器 + + +/*INT*/ +sfr INT0F = 0XBA; //INT0 下降沿中断控制寄存器 +sfr INT0R = 0XBB; //INT0 上降沿中断控制寄存器 +sfr INT1F = 0XBC; //INT1 下降沿中断控制寄存器 +sfr INT1R = 0XBD; //INT1 上降沿中断控制寄存器 +sfr INT2F = 0XC6; //INT2 下降沿中断控制寄存器 +sfr INT2R = 0XC7; //INT2 上降沿中断控制寄存器 + + +/*IAP */ +sfr IAPCTL = 0xF6; //IAP控制寄存器 +sfr IAPDAT = 0xF5; //IAP数据寄存器 +sfr IAPADE = 0xF4; //IAP扩展地址寄存器 +sfr IAPADH = 0xF3; //IAP写入地址高位寄存器 +sfr IAPADL = 0xF2; //IAP写入地址低8位寄存器 +sfr IAPKEY = 0xF1; //IAP保护寄存器 + +/*UART*/ +sfr SCON = 0X98; //串口控制寄存器 +sfr SBUF = 0X99; //串口数据缓存寄存器 + +/*SPI*/ +sfr SSCON0 = 0X9D; //SPI控制寄存器0 +sfr SSCON1 = 0X9E; //SPI控制寄存器1 +sfr SSCON2 = 0X95; //SPI控制寄存器2 +sfr SSDAT = 0X9F; //SPI数据寄存器 + +sfr OPINX = 0XFE; +sfr OPREG = 0XFF; +sfr EXADH = 0XF7; + +/*Check Sum*/ +sfr CHKSUML = 0XFC; //Check Sum结果寄存器低位 +sfr CHKSUMH = 0XFD; //Check Sum结果寄存器高位 + +/*模拟比较器*/ +sfr CMPCFG = 0XB6; //模拟比较器设置寄存器 +sfr CMPCON = 0XB7; //模拟比较器控制寄存器 + +/*乘除法器*/ +sfr EXA0 = 0xE9; //扩展累加器0 +sfr EXA1 = 0xEA; //扩展累加器1 +sfr EXA2 = 0xEB; //扩展累加器2 +sfr EXA3 = 0xEC; //扩展累加器3 +sfr EXBL = 0xED; //扩展B寄存器0 +sfr EXBH = 0xEE; //扩展B寄存器1 +sfr OPERCON = 0xEF; //运算控制寄存器 + +///* ------------------- 位寄存器-------------------- */ +/*PSW*/ +sbit CY = PSW^7; //标志位 0:加法运算最高位无进位,或者减法运算最高位无借位时 1:加法运算最高位有进位,或者减法运算最高位有借位时 +sbit AC = PSW^6; //进位辅助标志位 0:无借位、进位 1:加法运算时在bit3位有进位,或减法运算在bit3位有借位时 +sbit F0 = PSW^5; //用户标志位 +sbit RS1 = PSW^4; //工作寄存器组选择位 +sbit RS0 = PSW^3; //工作寄存器组选择位 +sbit OV = PSW^2; //溢出标志位 +sbit F1 = PSW^1; //F1标志 +sbit P = PSW^0; //奇偶标志位 0:ACC中1的个数为偶数(包括0个) 1:ACC中1的个数为奇数 + +/*T2CON*/ +sbit TF2 = T2CON^7; +sbit EXF2 = T2CON^6; +sbit RCLK = T2CON^5; +sbit CLK = T2CON^4; +sbit EXEN2 = T2CON^3; +sbit TR2 = T2CON^2; +sbit T2 = T2CON^1; +sbit CP = T2CON^0; + + +/*IP*/ +sbit IPADC = IP^6; //ADC中断优先控制位 0:设定 ADC的中断优先权是 “低” 1:设定 ADC的中断优先权是 “高” +sbit IPT2 = IP^5; //Timer2中断优先控制位 0:设定 Timer2的中断优先权是 “低” 1:设定Timer2的中断优先权是 “高” +sbit IPUART = IP^4; //UART中断优先控制位 0:设定UART的中断优先权是 “低” 1:设定UART的中断优先权是 “高” +sbit IPT1 = IP^3; //Timer1中断优先控制位 0:设定 Timer 1的中断优先权是 “低” 1:设定 Timer 1的中断优先权是 “高” +sbit IPINT1 = IP^2; //INT1中断优先控制位 0:设定INT1中断优先权是 “低” 1:设定INT1的中断优先权是 “高” +sbit IPT0 = IP^1; //Timer0中断优先控制位 0:设定 Timer 0的中断优先权是 “低” 1:设定 Timer 0的中断优先权是 “高” +sbit IPINT0 = IP^0; //INT0中断优先控制位 0:设定INT0中断优先权是 “低” 1:设定INT0的中断优先权是 “高” + +/*IE*/ +sbit EA = IE^7; //中断使能的总控制 0:关闭所有的中断 1:打开所有的中断 +sbit EADC = IE^6; //ADC中断使能控制 0:关闭ADC中断 1:打开ADC中断 +sbit ET2 = IE^5; //Timer2中断使能控制 0:关闭Timer2中断 1:打开Timer2中断 +sbit EUART = IE^4; //UART中断使能控制 0:关闭UART中断 1:打开UART中断 +sbit ET1 = IE^3; //Timer1中断使能控制 0:关闭TIMER1中断 1:打开TIMER1中断 +sbit EINT1 = IE^2; //INT1中断使能控制 0:关闭INT1中断 1:打开INT1中断 +sbit ET0 = IE^1; //Timer0中断使能控制 0:关闭TIMER0中断 1:打开TIMER0中断 +sbit EINT0 = IE^0; //INT0中断使能控制 0:关闭INT0中断 1:打开INT0中断 + +/*TCON*/ +sbit TF1 = TCON^7; //T1溢出中断请求标志位 T1产生溢出,发生中断时,硬件将TF1置为“1”,申请中断,CPU响应时,硬件清“0”。 +sbit TR1 = TCON^6; //定时器T1的运行控制位 0:Timer1禁止计数 1:Timer1开始计数 +sbit TF0 = TCON^5; //T0溢出中断请求标志位 T0产生溢出,发生中断时,硬件将TF0置为“1”,申请中断,CPU响应时,硬件清“0”。 +sbit TR0 = TCON^4; //定时器T0的运行控制位 0:Timer0禁止计数 1:Timer0开始计数 + +/*SCON*/ +sbit SM0 = SCON^7; +sbit SM1 = SCON^6; +sbit SM2 = SCON^5; +sbit REN = SCON^4; +sbit TB8 = SCON^3; +sbit RB8 = SCON^2; +sbit TI = SCON^1; +sbit RI = SCON^0; + +/******************* P0 ****************** +*SC92F7447B封装未引出的管脚:无 +*SC92F7446B封装未引出的管脚:无 +*SC92F7445B封装未引出的管脚:P00 +******************************************/ +sbit P07 = P0^7; +sbit P06 = P0^6; +sbit P05 = P0^5; +sbit P04 = P0^4; +sbit P03 = P0^3; +sbit P02 = P0^2; +sbit P01 = P0^1; +sbit P00 = P0^0; + +/******************* P1 ****************** +*SC92F7447B封装未引出的管脚:无 +*SC92F7446B封装未引出的管脚:无 +*SC92F7445B封装未引出的管脚:无 +******************************************/ +sbit P17 = P1^7; +sbit P16 = P1^6; +sbit P15 = P1^5; +sbit P14 = P1^4; +sbit P13 = P1^3; +sbit P12 = P1^2; +sbit P11 = P1^1; +sbit P10 = P1^0; + +/******************* P2 ****************** +*SC92F7447B封装未引出的管脚:无 +*SC92F7446B封装未引出的管脚:无 +*SC92F7445B封装未引出的管脚:无 +******************************************/ +sbit P27 = P2^7; +sbit P26 = P2^6; +sbit P25 = P2^5; +sbit P24 = P2^4; +sbit P23 = P2^3; +sbit P22 = P2^2; +sbit P21 = P2^1; +sbit P20 = P2^0; + +/******************* P3 ****************** +*SC92F7447B封装未引出的管脚:无 +*SC92F7446B封装未引出的管脚:无 +*SC92F7445B封装未引出的管脚:P3 +******************************************/ +sbit P37 = P3^7; +sbit P36 = P3^6; +sbit P35 = P3^5; +sbit P34 = P3^4; +sbit P33 = P3^3; +sbit P32 = P3^2; +sbit P31 = P3^1; +sbit P30 = P3^0; + +/******************* P4 ****************** +*SC92F7447B封装未引出的管脚:无 +*SC92F7446B封装未引出的管脚:P46/P47 +*SC92F7445B封装未引出的管脚:P40 +******************************************/ +sbit P47 = P4^7; +sbit P46 = P4^6; +sbit P45 = P4^5; +sbit P44 = P4^4; +sbit P43 = P4^3; +sbit P42 = P4^2; +sbit P41 = P4^1; +sbit P40 = P4^0; + +/******************* P5 ****************** +*SC92F7447B封装未引出的管脚:无 +*SC92F7446B封装未引出的管脚:P54/P55 +*SC92F7445B封装未引出的管脚:P5 +******************************************/ +sbit P55 = P5^5; +sbit P54 = P5^4; +sbit P53 = P5^3; +sbit P52 = P5^2; +sbit P51 = P5^1; +sbit P50 = P5^0; + +/**************************************************************************** +*注意:封装未引出的管脚,需设置为强推挽输出模式 +*IC选型:请根据所使用的IC型号,在初始化完IO口后,调用相对应的未引出管脚的IO口配置; +*如若选SC92F7447B,则不用调用宏定义。 +*****************************************************************************/ +#define SC92F7446B_NIO_Init() {P4CON|=0xC0,P5CON|=0x30;} //SC92F7546B的未引出来的IO口配置 +#define SC92F7445B_NIO_Init() {P0CON|=0x01,P3CON|=0xFF,P4CON|=0x01,P5CON|=0xFF;} //SC92F7545B的未引出来的IO口配置 +#endif \ No newline at end of file diff --git a/Keil_C/FWLib/SC92F_Lib/inc/SC92F746xB_C.H b/Keil_C/FWLib/SC92F_Lib/inc/SC92F746xB_C.H new file mode 100644 index 0000000..4cd2c72 --- /dev/null +++ b/Keil_C/FWLib/SC92F_Lib/inc/SC92F746xB_C.H @@ -0,0 +1,251 @@ + /*-------------------------------------------------------------------------- +SC92F746XB_C.H + +C Header file for SC92F746XB microcontroller. +Copyright (c) 2018 Shenzhen SinOne Chip Electronic CO., Ltd. +All rights reserved. +深圳市赛元微电子有限公司 +版本号: V2.0 +日期: 2018.08.24 +--------------------------------------------------------------------------*/ +#ifndef _SC92F746XB_H_ +#define _SC92F746XB_H_ + +/* ------------------- 字节寄存器-------------------- */ +///*CPU*/ +sfr ACC = 0xE0; //累加器A +sfr B = 0xF0; //通用寄存器B +sfr PSW = 0xD0; //程序状态字 +sfr DPH = 0x83; //数据指针高8位 +sfr DPL = 0x82; //数据指针低8位 +sfr SP = 0x81; //堆栈指针 + + +/*system*/ +sfr PCON = 0x87; //电源管理控制寄存器 + +/*interrupt*/ +sfr IP1 = 0XB9; //中断优先级控制寄存器1 +sfr IP = 0xB8; //中断优先权控制寄存器 +sfr IE = 0xA8; //中断控制寄存器 +sfr IE1 = 0XA9; //中断控制寄存器1 + +/*PORT*/ +sfr P5PH = 0xDA; //P5口模式控制寄存器 +sfr P5CON = 0xD9; //P5口模式控制寄存器 +sfr P5 = 0xD8; //P5口数据寄存器 +sfr P2PH = 0xA2; //P2口模式控制寄存器 +sfr P2CON = 0xA1; //P2口模式控制寄存器 +sfr P2 = 0xA0; //P2口数据寄存器 +sfr P1PH = 0x92; //P1口模式控制寄存器 +sfr P1CON = 0x91; //P1口模式控制寄存器 +sfr P1 = 0x90; //P1口数据寄存器 +sfr P0PH = 0x9B; //P0口模式控制寄存器 +sfr P0CON = 0x9A; //P0口模式控制寄存器 +sfr P0 = 0x80; //P0口数据寄存器 +sfr IOHCON = 0x97; //IOH设置寄存器 + +/*TIMER*/ +sfr TMCON = 0x8E; //定时器频率控制寄存器 +sfr TH1 = 0x8D; //定时器1高8位 +sfr TH0 = 0x8C; //定时器0高8位 +sfr TL1 = 0x8B; //定时器1低8位 +sfr TL0 = 0x8A; //定时器0低8位 +sfr TMOD = 0x89; //定时器工作模式寄存器 +sfr TCON = 0x88; //定时器控制寄存器 +sfr T2CON = 0xC8; //定时器2控制寄存器 +sfr T2MOD = 0xC9; //定时器2工作模式寄存器 +sfr RCAP2L = 0xCA; //定时器2重载/捕捉低8位 +sfr RCAP2H = 0xCB; //定时器2重载/捕捉高8位 +sfr TL2 = 0xCC; //定时器2低8位 +sfr TH2 = 0xCD; //定时器2高8位 + + +/*ADC*/ +sfr ADCCFG0 = 0xAB; //ADC功能配置寄存器0 +sfr ADCCFG1 = 0xAC; //ADC功能配置寄存器1 +sfr ADCCFG2 = 0XAA; //ADC功能配置寄存器2 +sfr ADCCON = 0XAD; //ADC控制寄存器 +sfr ADCVL = 0xAE; //ADC 结果寄存器 +sfr ADCVH = 0xAF; //ADC 结果寄存器 + +/*PWM*/ +sfr PWMCFG = 0xD1; //PWM设置寄存器 +sfr PWMCON = 0xD2; //PWM控制寄存器 +sfr PWMPRD = 0xD3; //PWM周期设置寄存器 +sfr PWMDTYA = 0xD4; //PWM占空比设置寄存器A +sfr PWMDTY0 = 0xD5; //PWM0设置寄存器 +sfr PWMDTY1 = 0xD6; //PWM1设置寄存器 +sfr PWMDTY2 = 0xD7; //PWM2设置寄存器 +sfr PWMDTYB = 0xDC; //PWM占空比设置寄存器B +sfr PWMDTY3 = 0xDD; //PWM3设置寄存器 +sfr PWMDTY4 = 0xDE; //PWM4设置寄存器 +sfr PWMDTY5 = 0xDF; //PWM5设置寄存器 + +///*WatchDog*/ +sfr BTMCON = 0XCE; //低频定时器控制寄存器 +sfr WDTCON = 0xCF; //WDT控制寄存器 + +/*LCD*/ +sfr OTCON = 0X8F; //LCD电压输出控制寄存器 +sfr P0VO = 0X9C; //P0 LCD Bais 输出寄存器 + +/*INT*/ +sfr INT0F = 0XBA; //INT0 下降沿中断控制寄存器 +sfr INT0R = 0XBB; //INT0 上降沿中断控制寄存器 +sfr INT1F = 0XBC; //INT1 下降沿中断控制寄存器 +sfr INT1R = 0XBD; //INT1 上降沿中断控制寄存器 +sfr INT2F = 0XC6; //INT2 下降沿中断控制寄存器 +sfr INT2R = 0XC7; //INT2 上降沿中断控制寄存器 + +/*IAP */ +sfr IAPCTL = 0xF6; //IAP控制寄存器 +sfr IAPDAT = 0xF5; //IAP数据寄存器 +sfr IAPADE = 0xF4; //IAP扩展地址寄存器 +sfr IAPADH = 0xF3; //IAP写入地址高位寄存器 +sfr IAPADL = 0xF2; //IAP写入地址低8位寄存器 +sfr IAPKEY = 0xF1; //IAP保护寄存器 + +/*uart*/ +sfr SCON = 0x98; //串口控制寄存器 +sfr SBUF = 0x99; //串口数据缓存寄存器 + +/*三合一*/ +sfr SSCON0 = 0X9D; //SPI控制寄存器0 +sfr SSCON1 = 0X9E; //SPI控制寄存器1 +sfr SSCON2 = 0X95; //SPI控制寄存器2 +sfr SSDAT = 0X9F; //SPI数据寄存器 + +sfr OPINX = 0XFE; +sfr OPREG = 0XFF; +sfr EXADH = 0XF7; + +/*Check Sum*/ +sfr CHKSUML = 0XFC; //Check Sum结果寄存器低位 +sfr CHKSUMH = 0XFD; //Check Sum结果寄存器高位 + +/*乘除法*/ +sfr EXA0 = 0xE9; //扩展累加器0 +sfr EXA1 = 0xEA; //扩展累加器1 +sfr EXA2 = 0xEB; //扩展累加器2 +sfr EXA3 = 0xEC; //扩展累加器3 +sfr EXBL = 0xED; //扩展B寄存器0 +sfr EXBH = 0xEE; //扩展B寄存器1 +sfr OPERCON = 0xEF; //运算控制寄存器 + +/* ------------------- 位寄存器-------------------- */ +/*PSW*/ +sbit CY = PSW^7; //标志位 0:加法运算最高位无进位,或者减法运算最高位无借位时 1:加法运算最高位有进位,或者减法运算最高位有借位时 +sbit AC = PSW^6; //进位辅助标志位 0:无借位、进位 1:加法运算时在bit3位有进位,或减法运算在bit3位有借位时 +sbit F0 = PSW^5; //用户标志位 +sbit RS1 = PSW^4; //工作寄存器组选择位 +sbit RS0 = PSW^3; //工作寄存器组选择位 +sbit OV = PSW^2; //溢出标志位 +sbit F1 = PSW^1; //F1标志 +sbit P = PSW^0; //奇偶标志位 0:ACC中1的个数为偶数(包括0个) 1:ACC中1的个数为奇数 + +/*T2CON*/ +sbit TF2 = T2CON^7; +sbit EXF2 = T2CON^6; +sbit RCLK = T2CON^5; +sbit TCLK = T2CON^4; +sbit EXEN2 = T2CON^3; +sbit TR2 = T2CON^2; +sbit T2 = T2CON^1; +sbit CP = T2CON^0; + + +/*IP*/ +sbit IPADC = IP^6; //ADC中断优先控制位 0:设定 ADC的中断优先权是 “低” 1:设定 ADC的中断优先权是 “高” +sbit IPT2 = IP^5; //Timer2中断优先控制位 0:设定 Timer2的中断优先权是 “低” 1:设定Timer2的中断优先权是 “高” +sbit IPUART = IP^4; //UART中断优先控制位 0:设定UART的中断优先权是 “低” 1:设定UART的中断优先权是 “高” +sbit IPT1 = IP^3; //Timer1中断优先控制位 0:设定 Timer 1的中断优先权是 “低” 1:设定 Timer 1的中断优先权是 “高” +sbit IPINT1 = IP^2; //INT1中断优先控制位 0:设定INT1中断优先权是 “低” 1:设定INT1的中断优先权是 “高” +sbit IPT0 = IP^1; //Timer0中断优先控制位 0:设定 Timer 0的中断优先权是 “低” 1:设定 Timer 0的中断优先权是 “高” +sbit IPINT0 = IP^0; //INT0中断优先控制位 0:设定INT0中断优先权是 “低” 1:设定INT0的中断优先权是 “高” + +/*IE*/ +sbit EA = IE^7; //中断使能的总控制 0:关闭所有的中断 1:打开所有的中断 +sbit EADC = IE^6; //ADC中断使能控制 0:关闭ADC中断 1:打开ADC中断 +sbit ET2 = IE^5; //Timer2中断使能控制 0:关闭Timer2中断 1:打开Timer2中断 +sbit EUART = IE^4; //UART中断使能控制 0:关闭UART中断 1:打开UART中断 +sbit ET1 = IE^3; //Timer1中断使能控制 0:关闭TIMER1中断 1:打开TIMER1中断 +sbit EINT1 = IE^2; //INT1中断使能控制 0:关闭INT1中断 1:打开INT1中断 +sbit ET0 = IE^1; //Timer0中断使能控制 0:关闭TIMER0中断 1:打开TIMER0中断 +sbit EINT0 = IE^0; //INT0中断使能控制 0:关闭INT0中断 1:打开INT0中断 + +/*TCON*/ +sbit TF1 = TCON^7; //T1溢出中断请求标志位 T1产生溢出,发生中断时,硬件将TF1置为“1”,申请中断,CPU响应时,硬件清“0”。 +sbit TR1 = TCON^6; //定时器T1的运行控制位 0:Timer1禁止计数 1:Timer1开始计数 +sbit TF0 = TCON^5; //T0溢出中断请求标志位 T0产生溢出,发生中断时,硬件将TF0置为“1”,申请中断,CPU响应时,硬件清“0”。 +sbit TR0 = TCON^4; //定时器T0的运行控制位 0:Timer0禁止计数 1:Timer0开始计数 + +/*SCON*/ +sbit SM0 = SCON^7; +sbit SM1 = SCON^6; +sbit SM2 = SCON^5; +sbit REN = SCON^4; +sbit TB8 = SCON^3; +sbit RB8 = SCON^2; +sbit TI = SCON^1; +sbit RI = SCON^0; + +/******************* P0 ****************** +*SC92F7463B封装未引出的管脚:无 +*SC92F7462B封装未引出的管脚:P06/P07 +*SC92F7461B封装未引出的管脚:P02/P03/P04/P06/P07 +******************************************/ +sbit P07 = P0^7; +sbit P06 = P0^6; +sbit P05 = P0^5; +sbit P04 = P0^4; +sbit P03 = P0^3; +sbit P02 = P0^2; +sbit P01 = P0^1; +sbit P00 = P0^0; + +/******************* P1 ****************** +*SC92F7463B封装未引出的管脚:无 +*SC92F7462B封装未引出的管脚:P16/P17 +*SC92F7461B封装未引出的管脚:P16/P17 +******************************************/ +sbit P17 = P1^7; +sbit P16 = P1^6; +sbit P15 = P1^5; +sbit P14 = P1^4; +sbit P13 = P1^3; +sbit P12 = P1^2; +sbit P11 = P1^1; +sbit P10 = P1^0; + +/******************* P2 ****************** +*SC92F7463B封装未引出的管脚:无 +*SC92F7462B封装未引出的管脚:P22/P23 +*SC92F7461B封装未引出的管脚:P22/P23/P27 +******************************************/ +sbit P27 = P2^7; +sbit P26 = P2^6; +sbit P25 = P2^5; +sbit P24 = P2^4; +sbit P23 = P2^3; +sbit P22 = P2^2; +sbit P21 = P2^1; +sbit P20 = P2^0; + +/******************* P5 ****************** +*SC92F7463B封装未引出的管脚:无 +*SC92F7462B封装未引出的管脚:P50/P51 +*SC92F7461B封装未引出的管脚:P50/P51 +******************************************/ +sbit P51 = P5^1; +sbit P50 = P5^0; + +/**************************************************************************** +*注意:封装未引出的管脚,需设置为强推挽输出模式 +*IC选型:请根据所使用的IC型号,在初始化完IO口后,调用相对应的未引出管脚的IO口配置; +*如若选择SC92F7463B,则不用调用宏定义。 +*****************************************************************************/ +#define SC92F7462B_IO_Init() {P0CON|=0xC0,P1CON|=0xC0,P2CON|=0x0C,P5CON|=0x03;} //SC92F7462B的未引出来的IO口配置 +#define SC92F7461B_IO_Init() {P0CON|=0xEC,P1CON|=0xC0,P2CON|=0x8C,P5CON|=0x03;} //SC92F7461B的未引出来的IO口配置 + +#endif \ No newline at end of file diff --git a/Keil_C/FWLib/SC92F_Lib/inc/SC92F748x_C.H b/Keil_C/FWLib/SC92F_Lib/inc/SC92F748x_C.H new file mode 100644 index 0000000..6ac39b7 --- /dev/null +++ b/Keil_C/FWLib/SC92F_Lib/inc/SC92F748x_C.H @@ -0,0 +1,254 @@ +/*-------------------------------------------------------------------------- +SC92F748x_C.H + +C Header file for SC92F748x microcontroller. +Copyright (c) 2021 Shenzhen SinOne Microelectronics Co., Ltd. +All rights reserved. +深圳市赛元微电子有限公司 +版本号: V1.2 +日期: 2021.07.14 +--------------------------------------------------------------------------*/ +#ifndef _SC92F748x_H_ +#define _SC92F748x_H_ + +///* ------------------- 字节寄存器-------------------- */ +/*CPU*/ +sfr ACC = 0XE0; //累加器A +sfr B = 0XF0; //B寄存器 +sfr PSW = 0XD0; //程序状态字寄存器 +sfr DPH = 0X83; //DPTR数据指针高位 +sfr DPL = 0X82; //DPTR数据指针低位 +sfr SP = 0X81; //堆栈指针 +sfr EXA0 = 0XE9; //扩展累加器0 +sfr EXA1 = 0XEA; //扩展累加器1 +sfr EXA2 = 0XEB; //扩展累加器2 +sfr EXA3 = 0XEC; //扩展累加器3 +sfr EXBL = 0XED; //扩展B寄存器0 +sfr EXBH = 0XEE; //扩展B寄存器1 + +/*SRAM*/ +sfr EXADH = 0XF7; //外部SRAM操作地址高位 + +/*system*/ +sfr PCON = 0X87; //电源管理控制寄存器 + +/*Interrupt*/ +sfr IP1 = 0XB9; //中断优先级控制寄存器1 +sfr IP = 0XB8; //中断优先权控制寄存器 +sfr IE = 0XA8; //中断控制寄存器 +sfr IE1 = 0XA9; //中断控制寄存器1 + +/*PORT*/ +sfr IOHCON = 0X97; //IOH设置寄存器 +sfr P5PH = 0XDA; //P5口上拉电阻控制寄存器 +sfr P5CON = 0XD9; //P5口输入/输出控制寄存器 +sfr P5 = 0XD8; //P5口数据寄存器 +sfr P2PH = 0XA2; //P2口上拉电阻控制寄存器 +sfr P2CON = 0XA1; //P2口输入/输出控制寄存器 +sfr P2 = 0XA0; //P2口数据寄存器 +sfr P1PH = 0X92; //P1口上拉电阻控制寄存器 +sfr P1CON = 0X91; //P1口输入/输出控制寄存器 +sfr P1 = 0X90; //P1口数据寄存器 +sfr P0PH = 0X9B; //P0口上拉电阻控制寄存器 +sfr P0VO = 0X9C; //P0口LCD电压输出寄存器 +sfr P0CON = 0X9A; //P0口输入/输出控制寄存器 +sfr P0 = 0X80; //P0口数据寄存器 + +/*TIMER*/ +sfr TMCON = 0X8E; //定时器频率控制寄存器 +sfr TH1 = 0X8D; //定时器1高8位 +sfr TH0 = 0X8C; //定时器0高8位 +sfr TL1 = 0X8B; //定时器1低8位 +sfr TL0 = 0X8A; //定时器0低8位 +sfr TMOD = 0X89; //定时器工作模式寄存器 +sfr TCON = 0X88; //定时器控制寄存器 +sfr T2CON = 0XC8; //定时器2控制寄存器 +sfr T2MOD = 0XC9; //定时器2工作模式寄存器 +sfr RCAP2L = 0XCA; //定时器2重载/捕捉低8位 +sfr RCAP2H = 0XCB; //定时器2重载/捕捉高8位 +sfr TL2 = 0XCC; //定时器2低8位 +sfr TH2 = 0XCD; //定时器2高8位 + +/*ADC*/ +sfr ADCCFG2 = 0XAA; //ADC设置寄存器2 +sfr ADCCFG1 = 0XAC; //ADC设置寄存器1 +sfr ADCCFG0 = 0XAB; //ADC设置寄存器0 +sfr ADCCON = 0XAD; //ADC控制寄存器 +sfr ADCVL = 0XAE; //ADC结果寄存器 +sfr ADCVH = 0XAF; //ADC结果寄存器 + +/*PWM*/ +sfr PWMCFG = 0XD1; //PWM设置寄存器 +sfr PWMCON = 0XD2; //PWM控制寄存器 +sfr PWMPRD = 0XD3; //PWM周期设置寄存器 +sfr PWMDTYA = 0XD4; //PWM占空比设置寄存器A +sfr PWMDTY0 = 0XD5; //PWM0设置寄存器 +sfr PWMDTY1 = 0XD6; //PWM1占空比设置寄存器 +sfr PWMDTY2 = 0XD7; //PWM2占空比设置寄存器 +sfr PWMDTYB = 0XDC; //PWM占空比设置寄存器B +sfr PWMDTY3 = 0XDD; //PWM3占空比设置寄存器/PWM死区时间配置寄存器 +sfr PWMDTY4 = 0XDE; //PWM4占空比设置寄存器 +sfr PWMDTY5 = 0XDF; //PWM5占空比设置寄存器 + +/*WatchDog*/ +sfr WDTCON = 0XCF; //WDT控制寄存器 + +/*BTM*/ +sfr BTMCON = 0XCE; //低频定时器控制寄存器 + +/*INT*/ +sfr INT0F = 0XBA; //INT0 下降沿中断控制寄存器 +sfr INT0R = 0XBB; //INT0 上降沿中断控制寄存器 +sfr INT1F = 0XBC; //INT1 下降沿中断控制寄存器 +sfr INT1R = 0XBD; //INT1 上降沿中断控制寄存器 +sfr INT2F = 0XC6; //INT2 下降沿中断控制寄存器 +sfr INT2R = 0XC7; //INT2 上降沿中断控制寄存器 + +/*IAP */ +sfr IAPCTL = 0XF6; //IAP控制寄存器 +sfr IAPDAT = 0XF5; //IAP数据寄存器 +sfr IAPADE = 0XF4; //IAP扩展地址寄存器 +sfr IAPADH = 0XF3; //IAP写入地址高位寄存器 +sfr IAPADL = 0XF2; //IAP写入地址低位寄存器 +sfr IAPKEY = 0XF1; //IAP保护寄存器 + +/*uart0*/ +sfr SCON = 0X98; //串口控制寄存器 +sfr SBUF = 0X99; //串口数据缓存寄存器 +sfr OTCON = 0X8F; //输出控制寄存器 + +/*三合一*/ +sfr SSCON0 = 0X9D; //USCI控制寄存器0 +sfr SSCON1 = 0X9E; //USCI控制寄存器1 +sfr SSCON2 = 0X95; //USCI控制寄存器2 +sfr SSDAT = 0X9F; //USCI数据寄存器3 + +/*OPTION*/ +sfr OPINX = 0XFE; //Customer Option指针 +sfr OPREG = 0XFF; //Customer Option寄存器 + +/*Check Sum*/ +sfr CHKSUML = 0XFC; //Check Sum结果寄存器低位 +sfr CHKSUMH = 0XFD; //Check Sum结果寄存器高位 +sfr OPERCON = 0XEF; //运算控制寄存器 + +///* ------------------- 位寄存器-------------------- */ +/*PSW*/ +sbit CY = PSW^7; //标志位 0:加法运算最高位无进位,或者减法运算最高位无借位时 1:加法运算最高位有进位,或者减法运算最高位有借位时 +sbit AC = PSW^6; //进位辅助标志位 0:无借位、进位 1:加法运算时在bit3位有进位,或减法运算在bit3位有借位时 +sbit F0 = PSW^5; //用户标志位 +sbit RS1 = PSW^4; //工作寄存器组选择位 +sbit RS0 = PSW^3; //工作寄存器组选择位 +sbit OV = PSW^2; //溢出标志位 +sbit F1 = PSW^1; //F1标志 +sbit P = PSW^0; //奇偶标志位 0:ACC中1的个数为偶数(包括0个) 1:ACC中1的个数为奇数 + +/*T2CON*/ +sbit TF2 = T2CON^7; //定时器2溢出标志位 +sbit EXF2 = T2CON^6; //T2EX引脚外部事件输入(下降沿)被检测到的标志位 +sbit RCLK = T2CON^5; //UART0接收时钟控制位 0: 定时器1产生接收波特率 1: 定时器2产生接收波特率 +sbit TCLK = T2CON^4; //UART0发送时钟控制位 0: 定时器1产生发送波特率 1: 定时器2产生发送波特率 +sbit EXEN2 = T2CON^3; //T2EX引脚上的外部事件输入(下降沿)用作重载/捕获触发器允许/禁止控制 +sbit TR2 = T2CON^2; //定时器2开始/停止控制位 0: 停止定时器2 1: 开始定时器2 +sbit T2 = T2CON^1; //定时器2定时器/计数器方式选定位2 +sbit CP = T2CON^0; //捕获/重载方式选定位 + +/*IP*/ +sbit IPADC = IP^6; //ADC中断优先权选择 0:设定 ADC的中断优先权是 “低” 1:设定 ADC的中断优先权是 “高” +sbit IPT2 = IP^5; //Timer2中断优先权选择 0:设定 Timer 2的中断优先权是 “低” 1:设定 Timer 2的中断优先权是 “高” +sbit IPUART = IP^4; //UART中断优先权选择 0:设定 UART的中断优先权是 “低” 1:设定 UART的中断优先权是 “高” +sbit IPT1 = IP^3; //Timer1中断优先权选择 0:设定 Timer 1的中断优先权是 “低” 1:设定 Timer 1的中断优先权是 “高” +sbit IPINT1 = IP^2; //INT1计数器中断优先权选择 0:设定 INT1的中断优先权是 “低” 1:设定 INT1的中断优先权是 “高” +sbit IPT0 = IP^1; //Timer0中断优先权选择 0:设定 Timer 0的中断优先权是 “低” 1:设定 Timer 0的中断优先权是 “高” +sbit IPINT0 = IP^0; //INT0计数器中断优先权选择 0:设定 INT0的中断优先权为 “低” 1: INT0中断优先权为高 + +/*IE*/ +sbit EA = IE^7; //中断使能的总控制 0:关闭所有的中断 1:打开所有的中断 +sbit EADC = IE^6; //ADC中断使能控制 0:关闭ADC中断 1:打开ADC中断 +sbit ET2 = IE^5; //Timer2中断使能控制 0:关闭TIMER2中断 1:打开TIMER2中断 +sbit EUART = IE^4; //UART中断使能控制 0:关闭SIF中断 1:打开SIF中断 +sbit ET1 = IE^3; //Timer1中断使能控制 0:关闭TIMER1中断 1:打开TIMER1中断 +sbit EINT1 = IE^2; //外部中断1中断使能控制 0:关闭外部中断1中断 1:打开外部中断1中断 +sbit ET0 = IE^1; //Timer0中断使能控制 0:关闭TIMER0中断 1:打开TIMER0中断 +sbit EINT0 = IE^0; //外部中断0中断使能控制 0:关闭外部中断0中断 1:打开外部中断0中断 + +/*TCON*/ +sbit TF1 = TCON^7; //T1溢出中断请求标志位 T1产生溢出,发生中断时,硬件将TF1置为“1”,申请中断,CPU响应时,硬件清“0”。 +sbit TR1 = TCON^6; //定时器T1的运行控制位 0:Timer1禁止计数 1:Timer1开始计数 +sbit TF0 = TCON^5; //T0溢出中断请求标志位 T0产生溢出,发生中断时,硬件将TF0置为“1”,申请中断,CPU响应时,硬件清“0”。 +sbit TR0 = TCON^4; //定时器T0的运行控制位 0:Timer0禁止计数 1:Timer0开始计数 + +/*SCON*/ +sbit SM0 = SCON^7; //串行通信模式控制位:与SM1配合使用 00: 模式0,8位半双工同步通信模式 01: 模式1,10位全双工异步通信 11: 模式3,11位全双工异步通信 +sbit SM1 = SCON^6; //串行通信模式控制位 +sbit SM2 = SCON^5; //串行通信模式控制位2,此控制位只对模式3有效 0:每收到一个完整数据帧就置位RI产生中断请求 1:收到一个完整的数据帧时,只有当RB8=1时才会置位RI产生中断请求 +sbit REN = SCON^4; //接收允许控制位 0:不允许接受数据 1:允许接受数据 +sbit TB8 = SCON^3; //只对模式3有效,为发送数据的第9位 +sbit RB8 = SCON^2; //只对模式3有效,为接收数据的第9位 +sbit TI = SCON^1; //发送中断标志位 +sbit RI = SCON^0; //接收中断标志位 + +/******************* P0 ****************** +*SC92F7483封装未引出的管脚:无 +*SC92F7482封装未引出的管脚:P06/P07 +*SC92F7481封装未引出的管脚:P02/P03/P04/P05/P06/P07 +*SC92F7480封装未引出的管脚:P0 +******************************************/ +sbit P07 = P0^7; +sbit P06 = P0^6; +sbit P05 = P0^5; +sbit P04 = P0^4; +sbit P03 = P0^3; +sbit P02 = P0^2; +sbit P01 = P0^1; +sbit P00 = P0^0; + +/******************* P1 ****************** +*SC92F7483封装未引出的管脚:无 +*SC92F7482封装未引出的管脚:P16/P17 +*SC92F7481封装未引出的管脚:P16/P17 +*SC92F7480封装未引出的管脚:P14/P15/P16/P17 +******************************************/ +sbit P17 = P1^7; +sbit P16 = P1^6; +sbit P15 = P1^5; +sbit P14 = P1^4; +sbit P13 = P1^3; +sbit P12 = P1^2; +sbit P11 = P1^1; +sbit P10 = P1^0; + +/******************* P2 ****************** +*SC92F7483封装未引出的管脚:无 +*SC92F7482封装未引出的管脚:P22/P23 +*SC92F7481封装未引出的管脚:P22/P23/P27 +*SC92F7480封装未引出的管脚:P22/P23/P25/P26/P27 +******************************************/ +sbit P27 = P2^7; +sbit P26 = P2^6; +sbit P25 = P2^5; +sbit P24 = P2^4; +sbit P23 = P2^3; +sbit P22 = P2^2; +sbit P21 = P2^1; +sbit P20 = P2^0; + +/******************* P5 ****************** +*SC92F7483封装未引出的管脚:无 +*SC92F7482封装未引出的管脚:P50/P51 +*SC92F7481封装未引出的管脚:P50/P51 +*SC92F7480封装未引出的管脚:P50/P51 +******************************************/ +sbit P51 = P5^1; +sbit P50 = P5^0; + +/**************************************************************************** +*注意:封装未引出的管脚,需设置为强推挽输出模式 +*IC选型:请根据所使用的IC型号,在初始化完IO口后,调用相对应的未引出管脚的IO口配置; +*如若选SC92F7483,则不用调用宏定义。 +*****************************************************************************/ +#define SC92F7482_NIO_Init() {P0CON|=0xC0,P1CON|=0xC0,P2CON|=0x0C,P5CON|=0x03;}//SC92F7482的未引出来的IO口配置 +#define SC92F7481_NIO_Init() {P0CON|=0xFC,P1CON|=0xC0,P2CON|=0x8C,P5CON|=0x03;}//SC92F7481的未引出来的IO口配置 +#define SC92F7480_NIO_Init() {P0CON|=0xFF,P1CON|=0xF0,P2CON|=0xEC,P5CON|=0x03;}//SC92F7480的未引出来的IO口配置 + +#endif \ No newline at end of file diff --git a/Keil_C/FWLib/SC92F_Lib/inc/SC92F7490_C.H b/Keil_C/FWLib/SC92F_Lib/inc/SC92F7490_C.H new file mode 100644 index 0000000..6a22ab7 --- /dev/null +++ b/Keil_C/FWLib/SC92F_Lib/inc/SC92F7490_C.H @@ -0,0 +1,176 @@ + /*-------------------------------------------------------------------------- +SC92F7490_C.H + +C Header file for SC92F7490 microcontroller. +Copyright (c) 2018 Shenzhen SinOne Chip Electronic CO., Ltd. +All rights reserved. +深圳市赛元微电子有限公司 +版本号: V1.0 +日期: 2018.07.25 +--------------------------------------------------------------------------*/ +#ifndef _SC92F7490_H_ +#define _SC92F7490_H_ + +/* ------------------- 字节寄存器-------------------- */ +///*CPU*/ +sfr ACC = 0xE0; //累加器A +sfr B = 0xF0; //通用寄存器B +sfr PSW = 0xD0; //程序状态字 +sfr DPH = 0x83; //数据指针高8位 +sfr DPL = 0x82; //数据指针低8位 +sfr SP = 0x81; //堆栈指针 + +/*system*/ +sfr PCON = 0x87; //电源管理控制寄存器 + +/*interrupt*/ +sfr IP1 = 0XB9; //中断优先级控制寄存器1 +sfr IP = 0xB8; //中断优先权控制寄存器 +sfr IE = 0xA8; //中断控制寄存器 +sfr IE1 = 0XA9; //中断控制寄存器1 + +/*PORT*/ + +sfr P2PH = 0xA2; //P2口模式控制寄存器0 +sfr P2CON = 0xA1; //P2口模式控制寄存器1 +sfr P2 = 0xA0; //P2口数据寄存器 +sfr P1PH = 0x92; //P1口模式控制寄存器0 +sfr P1CON = 0x91; //P1口模式控制寄存器1 +sfr P1 = 0x90; //P1口数据寄存器 +sfr P0PH = 0x9B; //P0口模式控制寄存器1 +sfr P0CON = 0x9A; //P0口模式控制寄存器1 +sfr P0 = 0x80; //P0口数据寄存器 +sfr IOHCON = 0x97; //IOH设置寄存器 + +/*TIMER*/ +sfr TMCON = 0x8E; //定时器频率控制寄存器 +sfr TH1 = 0x8D; //定时器1高8位 +sfr TH0 = 0x8C; //定时器0高8位 +sfr TL1 = 0x8B; //定时器1低8位 +sfr TL0 = 0x8A; //定时器0低8位 +sfr TMOD = 0x89; //定时器工作模式寄存器 +sfr TCON = 0x88; //定时器控制寄存器 +sfr T2CON = 0XC8; //定时器2控制寄存器 +sfr T2MOD = 0XC9; //定时器2工作模式寄存器 +sfr RCAP2L = 0XCA; //定时器2重载/捕捉低8位 +sfr RCAP2H = 0XCB; //定时器2重载/捕捉高8位 +sfr TL2 = 0XCC; //定时器2低8位 +sfr TH2 = 0XCD; //定时器2高8位 + + +/*ADC*/ +sfr ADCCFG0 = 0xAB; //ADC设置寄存器0 +sfr ADCCFG1 = 0xAC; //ADC设置寄存器1 +sfr ADCCON = 0XAD; //ADC控制寄存器 +sfr ADCVL = 0xAE; //ADC 结果寄存器 +sfr ADCVH = 0xAF; //ADC 结果寄存器 + +///*WatchDog*/ +sfr BTMCON = 0XCE; //低频定时器控制寄存器 +sfr WDTCON = 0xCF; //WDT控制寄存器 + +/*LCD*/ +sfr OTCON = 0X8F; //LCD电压输出控制寄存器 +sfr P0VO = 0X9C; //P0 LCD Bais 输出寄存器 + +/*INT*/ +sfr INT0F = 0XBA; //INT0 下降沿中断控制寄存器 +sfr INT0R = 0XBB; //INT0 上降沿中断控制寄存器 +sfr INT2F = 0XC6; //INT2 下降沿中断控制寄存器 +sfr INT2R = 0XC7; //INT2 上降沿中断控制寄存器 + +/*IAP */ +sfr IAPCTL = 0xF6; //IAP控制寄存器 +sfr IAPDAT = 0xF5; //IAP数据寄存器 +sfr IAPADE = 0xF4; //IAP扩展地址寄存器 +sfr IAPADH = 0xF3; //IAP写入地址高位寄存器 +sfr IAPADL = 0xF2; //IAP写入地址低8位寄存器 +sfr IAPKEY = 0xF1; //IAP保护寄存器 + +/*SSI*/ +sfr SS0CON0 = 0XA5; //SSI0控制寄存器2 +sfr SS0CON1 = 0XA6; //SSI0控制寄存器1 +sfr SS0CON2 = 0XA4; //SSI0控制寄存器0 +sfr SS0DAT = 0XA7; //SSI0数据寄存器 + +sfr SS1CON2 = 0X95; //SSI1控制寄存器2 +sfr SS1CON0 = 0X9D; //SSI1控制寄存器0 +sfr SS1CON1 = 0X9E; //SSI1控制寄存器1 +sfr SS1DAT = 0X9F; //SSI1数据寄存器 + +/*CHKSUM*/ +sfr OPERCON = 0xEF; //运算控制寄存器 +sfr CHKSUML = 0xFC; //CHKSUM结果寄存器低位 +sfr CHKSUMH = 0XFD; //CHKSUM结果寄存器高位 + +/*option*/ +sfr OPINX = 0XFE; //Option指针 +sfr OPREG = 0XFF; //Option寄存器 + +sfr P5PH = 0xDA; +sfr P5CON = 0xD9; +sfr P5 = 0xD8; +///* ------------------- 位寄存器-------------------- */ + +/*PSW*/ +sbit CY = PSW^7; //标志位 0:加法运算最高位无进位,或者减法运算最高位无借位时 1:加法运算最高位有进位,或者减法运算最高位有借位时 +sbit AC = PSW^6; //进位辅助标志位 0:无借位、进位 1:加法运算时在bit3位有进位,或减法运算在bit3位有借位时 +sbit F0 = PSW^5; //用户标志位 +sbit RS1 = PSW^4; //工作寄存器组选择位 +sbit RS0 = PSW^3; //工作寄存器组选择位 +sbit OV = PSW^2; //溢出标志位 +sbit F1 = PSW^1; //F1标志 +sbit P = PSW^0; //奇偶标志位 0:ACC中1的个数为偶数(包括0个) 1:ACC中1的个数为奇数 + +/*T2CON*/ +sbit TF2 = T2CON^7; +sbit EXF2 = T2CON^6; +sbit RCLK = T2CON^5; +sbit TCLK = T2CON^4; +sbit EXEN2 = T2CON^3; +sbit TR2 = T2CON^2; +sbit T2 = T2CON^1; +sbit CP = T2CON^0; + + +/*IP*/ +sbit IPADC = IP^6; //ADC中断优先控制位 0:设定 ADC的中断优先权是 “低” 1:设定 ADC的中断优先权是 “高” +sbit IPT2 = IP^5; //Timer2中断优先控制位 0:设定 Timer2的中断优先权是 “低” 1:设定Timer2的中断优先权是 “高” +sbit IPSSI0 = IP^4; //SSI0中断优先控制位 0:设定SSI0的中断优先权是 “低” 1:设定SSI0的中断优先权是 “高” +sbit IPT1 = IP^3; //Timer1中断优先控制位 0:设定 Timer 1的中断优先权是 “低” 1:设定 Timer 1的中断优先权是 “高” +sbit IPT0 = IP^1; //Timer0中断优先控制位 0:设定 Timer 0的中断优先权是 “低” 1:设定 Timer 0的中断优先权是 “高” +sbit IPINT0 = IP^0; //INT0中断优先控制位 0:设定INT0中断优先权是 “低” 1:设定INT0的中断优先权是 “高” + +/*IE*/ +sbit EA = IE^7; //中断使能的总控制 0:关闭所有的中断 1:打开所有的中断 +sbit EADC = IE^6; //ADC中断使能控制 0:关闭ADC中断 1:打开ADC中断 +sbit ET2 = IE^5; //Timer2中断使能控制 0:关闭Timer2中断 1:打开Timer2中断 +sbit ESSI0 = IE^4; //SSI0中断使能控制 0:关闭SSI0中断 1:打开SSI0中断 +sbit ET1 = IE^3; //Timer1中断使能控制 0:关闭TIMER1中断 1:打开TIMER1中断 +sbit ET0 = IE^1; //Timer0中断使能控制 0:关闭TIMER0中断 1:打开TIMER0中断 +sbit EINT0 = IE^0; //INT0中断使能控制 0:关闭INT0中断 1:打开INT0中断 + +/*TCON*/ +sbit TF1 = TCON^7; //T1溢出中断请求标志位 T1产生溢出,发生中断时,硬件将TF1置为“1”,申请中断,CPU响应时,硬件清“0”。 +sbit TR1 = TCON^6; //定时器T1的运行控制位 0:Timer1禁止计数 1:Timer1开始计数 +sbit TF0 = TCON^5; //T0溢出中断请求标志位 T0产生溢出,发生中断时,硬件将TF0置为“1”,申请中断,CPU响应时,硬件清“0”。 +sbit TR0 = TCON^4; //定时器T0的运行控制位 0:Timer0禁止计数 1:Timer0开始计数 + +/******************* P0 ******************/ +sbit P05 = P0^5; + +/******************* P1 ******************/ +sbit P13 = P1^3; +sbit P12 = P1^2; +sbit P11 = P1^1; + +/******************* P2 ******************/ +sbit P21 = P2^1; +sbit P20 = P2^0; + +/**************************************************************************** +*注意:初始化IO口后,需调用以下宏。 +*****************************************************************************/ +#define SC92F7490_NIO_Init() {P0CON|=0xDF;P1CON|=0xF1;P2CON|=0xFC;P5CON|=0x03;} + +#endif \ No newline at end of file diff --git a/Keil_C/FWLib/SC92F_Lib/inc/SC92F74Ax_2_ASM.H b/Keil_C/FWLib/SC92F_Lib/inc/SC92F74Ax_2_ASM.H new file mode 100644 index 0000000..ffec448 --- /dev/null +++ b/Keil_C/FWLib/SC92F_Lib/inc/SC92F74Ax_2_ASM.H @@ -0,0 +1,294 @@ +/*-------------------------------------------------------------------------- +SC92F74Ax_ASM.H + +ASM Header file for SC92F74Ax microcontroller. +Copyright (c) 2020 Shenzhen SinOne Chip Electronic CO., Ltd. +All rights reserved. +深圳市赛元微电子有限公司 +版本号: V1.0 +日期: 2020.07.01 + + +--------------------------------------------------------------------------*/ +#ifndef _SC92F74Ax_ASM_H_ +#define _SC92F74Ax_ASM_H_ + +/* ------------------- 字节寄存器-------------------- */ +/*CPU*/ +ACC EQU 0xE0; //累加器A +B EQU 0xF0; //通用寄存器B +PSW EQU 0xD0; //程序状态字 +DPH EQU 0x83; //数据指针高8位 +DPL EQU 0x82; //数据指针低8位 +SP EQU 0x81; //堆栈指针 + +/*system*/ +PCON EQU 0x87; //电源管理控制寄存器 + +/*interrupt*/ +IP EQU 0xB8; //中断优先权控制寄存器 +IE EQU 0xA8; //中断控制寄存器 +IP1 EQU 0XB9; //中断优先级控制寄存器1 +IE1 EQU 0XA9; //中断控制寄存器1 + +/*PORT*/ +P5PH EQU 0xDA; //P5口模式控制寄存器 +P5CON EQU 0xD9; //P5口模式控制寄存器 +P5 EQU 0xD8; //P5口数据寄存器 +P4PH EQU 0xC2; //P4口模式控制寄存器 +P4CON EQU 0xC1; //P4口模式控制寄存器 +P4 EQU 0xC0; //P4口数据寄存器 +P3PH EQU 0xB2; //P3口模式控制寄存器 +P3CON EQU 0xB1; //P3口模式控制寄存器 +P3 EQU 0xB0; //P3口数据寄存器 +P2PH EQU 0xA2; //P2口模式控制寄存器 +P2CON EQU 0xA1; //P2口模式控制寄存器 +P2 EQU 0xA0; //P2口数据寄存器 +P1PH EQU 0x92; //P1口模式控制寄存器 +P1CON EQU 0x91; //P1口模式控制寄存器 +P1 EQU 0x90; //P1口数据寄存器 +P0PH EQU 0x9B; //P0口模式控制寄存器 +P0CON EQU 0x9A; //P0口模式控制寄存器 +P0 EQU 0x80; //P0口数据寄存器 +IOHCON0 EQU 0x96; //IOH0设置寄存器 +IOHCON1 EQU 0x97; //IOH1设置寄存器 + +/*TIMER*/ +TMCON EQU 0x8E; //定时器频率控制寄存器 +TH1 EQU 0x8D; //定时器1高8位 +TH0 EQU 0x8C; //定时器0高8位 +TL1 EQU 0x8B; //定时器1低8位 +TL0 EQU 0x8A; //定时器0低8位 +TMOD EQU 0x89; //定时器工作模式寄存器 +TCON EQU 0x88; //定时器控制寄存器 +T2CON EQU 0XC8; //定时器2控制寄存器 +T2MOD EQU 0XC9; //定时器2工作模式寄存器 +RCAP2L EQU 0XCA; //定时器2重载/捕捉低8位 +RCAP2H EQU 0XCB; //定时器2重载/捕捉高8位 +TL2 EQU 0XCC; //定时器2低8位 +TH2 EQU 0XCD; //定时器2高8位 + +/*ADC*/ +ADCCFG0 EQU 0xAB; //ADC功能配置寄存器0 +ADCCFG1 EQU 0xAC; //ADC功能配置寄存器1 +ADCCFG2 EQU 0xAA; //ADC功能配置寄存器2 +ADCCON EQU 0XAD; //ADC控制寄存器 +ADCVL EQU 0xAE; //ADC 结果寄存器 +ADCVH EQU 0xAF; //ADC 结果寄存器 + +/*PWM*/ +PWMCFG EQU 0xD4; //PWM设置寄存器 +PWMCON EQU 0xD3; //PWM控制寄存器 + +/*WatchDog*/ +BTMCON EQU 0XCE; //低频定时器控制寄存器 +WDTCON EQU 0xCF; //WDT控制寄存器 + +/*LCD*/ +OTCON EQU 0X8F; //LCD电压输出控制寄存器 +P0VO EQU 0X9C; //P0 LCD Bais 输出寄存器 +P1VO EQU 0X94; //P1 LCD Bais 输出寄存器 +P2VO EQU 0XA3; //P2 LCD Bais 输出寄存器 +P3VO EQU 0XB3; //P3 LCD Bais 输出寄存器 + +DDRCON EQU 0X93; //显示驱动设置寄存器 + +/*INT*/ +INT0F EQU 0XBA; //INT0 下降沿中断控制寄存器 +INT0R EQU 0XBB; //INT0 上降沿中断控制寄存器 +INT1F EQU 0XBC; //INT1 下降沿中断控制寄存器 +INT1R EQU 0XBD; //INT1 上降沿中断控制寄存器 +INT2F EQU 0XC6; //INT2 下降沿中断控制寄存器 +INT2R EQU 0XC7; //INT2 上降沿中断控制寄存器 + +/*IAP */ +IAPCTL EQU 0xF6; //IAP控制寄存器 +IAPDAT EQU 0xF5; //IAP数据寄存器 +IAPADE EQU 0xF4; //IAP扩展地址寄存器 +IAPADH EQU 0xF3; //IAP写入地址高位寄存器 +IAPADL EQU 0xF2; //IAP写入地址低8位寄存器 +IAPKEY EQU 0xF1; //IAP保护寄存器 + +/*uart*/ +SCON EQU 0x98; //串口控制寄存器 +SBUF EQU 0x99; //串口数据缓存寄存器 + +/*三合一*/ +SSCON0 EQU 0X9D; //SSI控制寄存器0 +SSCON1 EQU 0X9E; //SSI控制寄存器1 +SSCON2 EQU 0X95; //SSI控制寄存器2 +SSDAT EQU 0X9F; //SPI数据寄存器 + +OPINX EQU 0XFE; +OPREG EQU 0XFF; +EXADH EQU 0XF7; + +/*Check Sum*/ +CHKSUML EQU 0XFC; //Check Sum结果寄存器低位 +CHKSUMH EQU 0XFD; //Check Sum结果寄存器高位 + +/*乘除法*/ +EXA0 EQU 0xE9; //扩展累加器0 +EXA1 EQU 0xEA; //扩展累加器1 +EXA2 EQU 0xEB; //扩展累加器2 +EXA3 EQU 0xEC; //扩展累加器3 +EXBL EQU 0xED; //扩展B寄存器0 +EXBH EQU 0xEE; //扩展B寄存器1 +OPERCON EQU 0xEF; //运算控制寄存器 + +/* ------------------- 位寄存器-------------------- */ +/*PSW*/ +CY EQU PSW .7; //标志位 0:加法运算最高位无进位,或者减法运算最高位无借位时 1:加法运算最高位有进位,或者减法运算最高位有借位时 +AC EQU PSW .6; //进位辅助标志位 0:无借位、进位 1:加法运算时在bit3位有进位,或减法运算在bit3位有借位时 +F0 EQU PSW .5; //用户标志位 +RS1 EQU PSW .4; //工作寄存器组选择位 +RS0 EQU PSW .3; //工作寄存器组选择位 +OV EQU PSW .2; //溢出标志位 +F1 EQU PSW .1; //F1标志 +P EQU PSW .0; //奇偶标志位 0:ACC中1的个数为偶数(包括0个) 1:ACC中1的个数为奇数 + +/*T2CON*/ +TF2 EQU T2CON .7; +EXF2 EQU T2CON .6; +RCLK EQU T2CON .5; +TCLK EQU T2CON .4; +EXEN2 EQU T2CON .3; +TR2 EQU T2CON .2; +T2 EQU T2CON .1; +CP EQU T2CON .0; + +/*IP*/ +IPADC EQU IP .6; //ADC中断优先控制位 0:设定ADC的中断优先权是 “低” 1:设定ADC的中断优先权是 “高” +IPT2 EQU IP .5; //PWM中断优先控制位 0:设定PWM的中断优先权是 “低” 1:设定PWM 的中断优先权是 “高” +IPUART EQU IP .4; //Uart中断优先控制位 0:设定Uart的中断优先权是 “低” 1:设定Uart的中断优先权是 “高” +IPT1 EQU IP .3; //Timer1中断优先控制位 0:设定Timer1的中断优先权是 “低” 1:设定Timer1的中断优先权是 “高” +IPINT1 EQU IP .2; //INT1中断优先控制位 0:设定INT1中断优先权是 “低” 1:设定INT1中断优先权是 “高” +IPT0 EQU IP .1; //Timer0中断优先控制位 0:设定Timer0的中断优先权是 “低” 1:设定Timer0的中断优先权是 “高” +IPINT0 EQU IP .0; //INT0中断优先控制位 0:设定INT0中断优先权是 “低” 1:设定INT0中断优先权是 “高” + +/*IE*/ +EA EQU IE .7; //中断使能的总控制 0:关闭所有的中断 1:打开所有的中断 +EADC EQU IE .6; //ADC中断使能控制 0:关闭ADC中断 1:打开ADC中断 +ET2 EQU IE .5; //PWM中断使能控制 0:关闭PWM中断 1:打开PWM中断 +EUART EQU IE .4; //UART中断使能控制 0:关闭UART中断 1:打开UART中断 +ET1 EQU IE .3; //Timer1中断使能控制 0:关闭TIMER1中断 1:打开TIMER1中断 +EINT1 EQU IE .2; //INT1中断使能控制 0:关闭INT1中断 1:打开INT1中断 +ET0 EQU IE .1; //Timer0中断使能控制 0:关闭TIMER0中断 1:打开TIMER0中断 +EINT0 EQU IE .0; //INT0的中断使能控制 0:关闭INT0中断 1:打开INT0中断 + +/*TCON*/ +TF1 EQU TCON .7; //T1溢出中断请求标志位 T1产生溢出,发生中断时,硬件将TF1置为“1”,申请中断,CPU响应时,硬件清“0”。 +TR1 EQU TCON .6; //定时器T1的运行控制位 0:Timer1禁止计数 1:Timer1开始计数 +TF0 EQU TCON .5; //T0溢出中断请求标志位 T0产生溢出,发生中断时,硬件将TF0置为“1”,申请中断,CPU响应时,硬件清“0”。 +TR0 EQU TCON .4; //定时器T0的运行控制位 0:Timer0禁止计数 1:Timer0开始计数 +BITIE1 EQU TCON .3; //INT1溢出中断请求标志 +BITIE0 EQU TCON .1; //INT0溢出中断请求标志 + +/*SCON*/ +SM0 EQU SCON .7; +SM1 EQU SCON .6; +SM2 EQU SCON .5; +REN EQU SCON .4; +TB8 EQU SCON .3; +RB8 EQU SCON .2; +TI EQU SCON .1; +RI EQU SCON .0; + +/******************* P0 ****************** +*SC92F74A7封装未引出的管脚:无 +*SC92F74A6封装未引出的管脚:无 +*SC92F74A5封装未引出的管脚:P00 +******************************************/ +P07 EQU P0 .7; +P06 EQU P0 .6; +P05 EQU P0 .5; +P04 EQU P0 .4; +P03 EQU P0 .3; +P02 EQU P0 .2; +P01 EQU P0 .1; +P00 EQU P0 .0; + +/******************* P1 ****************** +*SC92F74A7封装未引出的管脚:无 +*SC92F74A6封装未引出的管脚:无 +*SC92F74A5封装未引出的管脚:无 +******************************************/ +P17 EQU P1 .7; +P16 EQU P1 .6; +P15 EQU P1 .5; +P14 EQU P1 .4; +P13 EQU P1 .3; +P12 EQU P1 .2; +P11 EQU P1 .1; +P10 EQU P1 .0; + +/******************* P2 ****************** +*SC92F74A7封装未引出的管脚:无 +*SC92F74A6封装未引出的管脚:无 +*SC92F74A5封装未引出的管脚:无 +******************************************/ +P27 EQU P2 .7; +P26 EQU P2 .6; +P25 EQU P2 .5; +P24 EQU P2 .4; +P23 EQU P2 .3; +P22 EQU P2 .2; +P21 EQU P2 .1; +P20 EQU P2 .0; + +/******************* P3 ****************** +*SC92F74A7封装未引出的管脚:无 +*SC92F74A6封装未引出的管脚:无 +*SC92F74A5封装未引出的管脚:P3 +******************************************/ +P37 EQU P3 .7; +P36 EQU P3 .6; +P35 EQU P3 .5; +P34 EQU P3 .4; +P33 EQU P3 .3; +P32 EQU P3 .2; +P31 EQU P3 .1; +P30 EQU P3 .0; + +/******************* P4 ****************** +*SC92F74A7封装未引出的管脚:无 +*SC92F84A6封装未引出的管脚:P46/P47 +*SC92F84A5封装未引出的管脚:P40 +******************************************/ +P47 EQU P4 .7; +P46 EQU P4 .6; +P45 EQU P4 .5; +P44 EQU P4 .4; +P43 EQU P4 .3; +P42 EQU P4 .2; +P41 EQU P4 .1; +P40 EQU P4 .0; + +/******************* P5 ****************** +*SC92F84A7封装未引出的管脚:无 +*SC92F84A6封装未引出的管脚:P54/P55 +*SC92F84A5封装未引出的管脚:P5 +******************************************/ +P55 EQU P5 .5; +P54 EQU P5 .4; +P53 EQU P5 .3; +P52 EQU P5 .2; +P51 EQU P5 .1; +P50 EQU P5 .0; + +/**************************************************************************** +*注意:封装未引出的管脚,需设置为强推挽输出模式 +*IC选型:请根据所使用的IC型号,在初始化完IO口后,调用相对应的未引出管脚的IO口配置; +*如若选择SC92F74A7,则不用调用宏定义。 +*****************************************************************************/ +SC92F74A6_NIO_Init MACRO IO //SC92F74A6未引出管脚的IO口配置 + ORL P4CON,#0XC0 + ORL P5CON,#0X30 + ENDM +SC92F74A5_NIO_Init MACRO IO //SC92F74A5未引出管脚的IO口配置 + ORL P0CON,#0X01 + ORL P3CON,#0XFF + ORL P4CON,#0X01 + ORL P5CON,#0X3F + ENDM +#endif diff --git a/Keil_C/FWLib/SC92F_Lib/inc/SC92F74Ax_2_C.H b/Keil_C/FWLib/SC92F_Lib/inc/SC92F74Ax_2_C.H new file mode 100644 index 0000000..6356b52 --- /dev/null +++ b/Keil_C/FWLib/SC92F_Lib/inc/SC92F74Ax_2_C.H @@ -0,0 +1,296 @@ +/*-------------------------------------------------------------------------- +SC92F74Ax_C.H + +C Header file for SC92F74Ax microcontroller. +Copyright (c) 2020 Shenzhen SinOne Chip Electronic CO., Ltd. +All rights reserved. +深圳市赛元微电子有限公司 +版本号: V1.0 +日期: 2020.07.01 +--------------------------------------------------------------------------*/ +#ifndef _SC92F74Ax_H_ +#define _SC92F74Ax_H_ + +/* ------------------- 字节寄存器-------------------- */ +/*CPU*/ +sfr ACC = 0xE0; //累加器A +sfr B = 0xF0; //通用寄存器B +sfr PSW = 0xD0; //程序状态字 +sfr DPH = 0x83; //数据指针高8位 +sfr DPL = 0x82; //数据指针低8位 +sfr SP = 0x81; //堆栈指针 + + +/*system*/ +sfr PCON = 0x87; //电源管理控制寄存器 + +/*interrupt*/ +sfr IP1 = 0XB9; //中断优先级控制寄存器1 +sfr IP = 0xB8; //中断优先权控制寄存器 +sfr IE = 0xA8; //中断控制寄存器 +sfr IE1 = 0XA9; //中断控制寄存器1 + +/*PORT*/ +sfr P5PH = 0xDA; //P5口模式控制寄存器 +sfr P5CON = 0xD9; //P5口模式控制寄存器 +sfr P5 = 0xD8; //P5口数据寄存器 +sfr P4PH = 0xC2; //P4口模式控制寄存器 +sfr P4CON = 0xC1; //P4口模式控制寄存器 +sfr P4 = 0xC0; //P4口数据寄存器 +sfr P3PH = 0xB2; //P3口模式控制寄存器 +sfr P3CON = 0xB1; //P3口模式控制寄存器 +sfr P3 = 0xB0; //P3口数据寄存器 +sfr P2PH = 0xA2; //P2口模式控制寄存器 +sfr P2CON = 0xA1; //P2口模式控制寄存器 +sfr P2 = 0xA0; //P2口数据寄存器 +sfr P1PH = 0x92; //P1口模式控制寄存器 +sfr P1CON = 0x91; //P1口模式控制寄存器 +sfr P1 = 0x90; //P1口数据寄存器 +sfr P0PH = 0x9B; //P0口模式控制寄存器 +sfr P0CON = 0x9A; //P0口模式控制寄存器 +sfr P0 = 0x80; //P0口数据寄存器 +sfr IOHCON0 = 0x96; //IOH0设置寄存器 +sfr IOHCON1 = 0x97; //IOH1设置寄存器 + +/*TIMER*/ +sfr TMCON = 0x8E; //定时器频率控制寄存器 +sfr TH1 = 0x8D; //定时器1高8位 +sfr TH0 = 0x8C; //定时器0高8位 +sfr TL1 = 0x8B; //定时器1低8位 +sfr TL0 = 0x8A; //定时器0低8位 +sfr TMOD = 0x89; //定时器工作模式寄存器 +sfr TCON = 0x88; //定时器控制寄存器 +sfr T2CON = 0xC8; //定时器2控制寄存器 +sfr T2MOD = 0xC9; //定时器2工作模式寄存器 +sfr RCAP2L = 0xCA; //定时器2重载/捕捉低8位 +sfr RCAP2H = 0xCB; //定时器2重载/捕捉高8位 +sfr TL2 = 0xCC; //定时器2低8位 +sfr TH2 = 0xCD; //定时器2高8位 + + +/*ADC*/ +sfr ADCCFG0 = 0xAB; //ADC功能配置寄存器0 +sfr ADCCFG1 = 0xAC; //ADC功能配置寄存器1 +sfr ADCCFG2 = 0XAA; //ADC功能配置寄存器2 +sfr ADCCON = 0XAD; //ADC控制寄存器 +sfr ADCVL = 0xAE; //ADC 结果寄存器 +sfr ADCVH = 0xAF; //ADC 结果寄存器 + +/*PWM*/ +sfr PWMCFG = 0xD4; //PWM设置寄存器 +sfr PWMCON = 0xD3; //PWM控制寄存器 + + +// +//*WatchDog*/ +sfr BTMCON = 0XCE; //低频定时器控制寄存器 +sfr WDTCON = 0xCF; //WDT控制寄存器 + + +/*LCD*/ +sfr OTCON = 0X8F; //LCD电压输出控制寄存器 +sfr P0VO = 0X9C; //P0 LCD Bais 输出寄存器 +sfr P1VO = 0X94; //P1 LCD Bais 输出寄存器 +sfr P2VO = 0XA3; //P2 LCD Bais 输出寄存器 +sfr P3VO = 0XB3; //P3 LCD Bais 输出寄存器 + +sfr DDRCON = 0X93; //显示驱动设置寄存器 + + +/*INT*/ +sfr INT0F = 0XBA; //INT0 下降沿中断控制寄存器 +sfr INT0R = 0XBB; //INT0 上降沿中断控制寄存器 +sfr INT1F = 0XBC; //INT1 下降沿中断控制寄存器 +sfr INT1R = 0XBD; //INT1 上降沿中断控制寄存器 +sfr INT2F = 0XC6; //INT2 下降沿中断控制寄存器 +sfr INT2R = 0XC7; //INT2 上降沿中断控制寄存器 + + +/*IAP */ +sfr IAPCTL = 0xF6; //IAP控制寄存器 +sfr IAPDAT = 0xF5; //IAP数据寄存器 +sfr IAPADE = 0xF4; //IAP扩展地址寄存器 +sfr IAPADH = 0xF3; //IAP写入地址高位寄存器 +sfr IAPADL = 0xF2; //IAP写入地址低8位寄存器 +sfr IAPKEY = 0xF1; //IAP保护寄存器 + +/*UART*/ +sfr SCON = 0X98; //串口控制寄存器 +sfr SBUF = 0X99; //串口数据缓存寄存器 + +/*SPI*/ +sfr SSCON0 = 0X9D; //SPI控制寄存器0 +sfr SSCON1 = 0X9E; //SPI控制寄存器1 +sfr SSCON2 = 0X95; //SPI控制寄存器2 +sfr SSDAT = 0X9F; //SPI数据寄存器 + +sfr OPINX = 0XFE; +sfr OPREG = 0XFF; +sfr EXADH = 0XF7; + +/*Check Sum*/ +sfr CHKSUML = 0XFC; //Check Sum结果寄存器低位 +sfr CHKSUMH = 0XFD; //Check Sum结果寄存器高位 + +/*模拟比较器*/ +sfr CMPCFG = 0XB6; //模拟比较器设置寄存器 +sfr CMPCON = 0XB7; //模拟比较器控制寄存器 + +/*乘除法器*/ +sfr EXA0 = 0xE9; //扩展累加器0 +sfr EXA1 = 0xEA; //扩展累加器1 +sfr EXA2 = 0xEB; //扩展累加器2 +sfr EXA3 = 0xEC; //扩展累加器3 +sfr EXBL = 0xED; //扩展B寄存器0 +sfr EXBH = 0xEE; //扩展B寄存器1 +sfr OPERCON = 0xEF; //运算控制寄存器 + +/* ------------------- 位寄存器-------------------- */ +/*PSW*/ +sbit CY = PSW^7; //标志位 0:加法运算最高位无进位,或者减法运算最高位无借位时 1:加法运算最高位有进位,或者减法运算最高位有借位时 +sbit AC = PSW^6; //进位辅助标志位 0:无借位、进位 1:加法运算时在bit3位有进位,或减法运算在bit3位有借位时 +sbit F0 = PSW^5; //用户标志位 +sbit RS1 = PSW^4; //工作寄存器组选择位 +sbit RS0 = PSW^3; //工作寄存器组选择位 +sbit OV = PSW^2; //溢出标志位 +sbit F1 = PSW^1; //F1标志 +sbit P = PSW^0; //奇偶标志位 0:ACC中1的个数为偶数(包括0个) 1:ACC中1的个数为奇数 + +/*T2CON*/ +sbit TF2 = T2CON^7; +sbit EXF2 = T2CON^6; +sbit RCLK = T2CON^5; +sbit CLK = T2CON^4; +sbit EXEN2 = T2CON^3; +sbit TR2 = T2CON^2; +sbit T2 = T2CON^1; +sbit CP = T2CON^0; + + +/*IP*/ +sbit IPADC = IP^6; //ADC中断优先控制位 0:设定 ADC的中断优先权是 “低” 1:设定 ADC的中断优先权是 “高” +sbit IPT2 = IP^5; //Timer2中断优先控制位 0:设定 Timer2的中断优先权是 “低” 1:设定Timer2的中断优先权是 “高” +sbit IPUART = IP^4; //UART中断优先控制位 0:设定UART的中断优先权是 “低” 1:设定UART的中断优先权是 “高” +sbit IPT1 = IP^3; //Timer1中断优先控制位 0:设定 Timer 1的中断优先权是 “低” 1:设定 Timer 1的中断优先权是 “高” +sbit IPINT1 = IP^2; //INT1中断优先控制位 0:设定INT1中断优先权是 “低” 1:设定INT1的中断优先权是 “高” +sbit IPT0 = IP^1; //Timer0中断优先控制位 0:设定 Timer 0的中断优先权是 “低” 1:设定 Timer 0的中断优先权是 “高” +sbit IPINT0 = IP^0; //INT0中断优先控制位 0:设定INT0中断优先权是 “低” 1:设定INT0的中断优先权是 “高” + +/*IE*/ +sbit EA = IE^7; //中断使能的总控制 0:关闭所有的中断 1:打开所有的中断 +sbit EADC = IE^6; //ADC中断使能控制 0:关闭ADC中断 1:打开ADC中断 +sbit ET2 = IE^5; //Timer2中断使能控制 0:关闭Timer2中断 1:打开Timer2中断 +sbit EUART = IE^4; //UART中断使能控制 0:关闭UART中断 1:打开UART中断 +sbit ET1 = IE^3; //Timer1中断使能控制 0:关闭TIMER1中断 1:打开TIMER1中断 +sbit EINT1 = IE^2; //INT1中断使能控制 0:关闭INT1中断 1:打开INT1中断 +sbit ET0 = IE^1; //Timer0中断使能控制 0:关闭TIMER0中断 1:打开TIMER0中断 +sbit EINT0 = IE^0; //INT0中断使能控制 0:关闭INT0中断 1:打开INT0中断 + +/*TCON*/ +sbit TF1 = TCON^7; //T1溢出中断请求标志位 T1产生溢出,发生中断时,硬件将TF1置为“1”,申请中断,CPU响应时,硬件清“0”。 +sbit TR1 = TCON^6; //定时器T1的运行控制位 0:Timer1禁止计数 1:Timer1开始计数 +sbit TF0 = TCON^5; //T0溢出中断请求标志位 T0产生溢出,发生中断时,硬件将TF0置为“1”,申请中断,CPU响应时,硬件清“0”。 +sbit TR0 = TCON^4; //定时器T0的运行控制位 0:Timer0禁止计数 1:Timer0开始计数 +sbit BITIE1 = TCON^3; //INT1溢出中断请求标志 +sbit BITIE0 = TCON^1; //INT0溢出中断请求标志 + +/*SCON*/ +sbit SM0 = SCON^7; +sbit SM1 = SCON^6; +sbit SM2 = SCON^5; +sbit REN = SCON^4; +sbit TB8 = SCON^3; +sbit RB8 = SCON^2; +sbit TI = SCON^1; +sbit RI = SCON^0; + +/******************* P0 ****************** +*SC92F74A7封装未引出的管脚:无 +*SC92F74A6封装未引出的管脚:无 +*SC92F74A5封装未引出的管脚:P00 +******************************************/ +sbit P07 = P0^7; +sbit P06 = P0^6; +sbit P05 = P0^5; +sbit P04 = P0^4; +sbit P03 = P0^3; +sbit P02 = P0^2; +sbit P01 = P0^1; +sbit P00 = P0^0; + +/******************* P1 ****************** +*SC92F74A7封装未引出的管脚:无 +*SC92F74A6封装未引出的管脚:无 +*SC92F74A5封装未引出的管脚:无 +******************************************/ +sbit P17 = P1^7; +sbit P16 = P1^6; +sbit P15 = P1^5; +sbit P14 = P1^4; +sbit P13 = P1^3; +sbit P12 = P1^2; +sbit P11 = P1^1; +sbit P10 = P1^0; + +/******************* P2 ****************** +*SC92F74A7封装未引出的管脚:无 +*SC92F74A6封装未引出的管脚:无 +*SC92F74A5封装未引出的管脚:无 +******************************************/ +sbit P27 = P2^7; +sbit P26 = P2^6; +sbit P25 = P2^5; +sbit P24 = P2^4; +sbit P23 = P2^3; +sbit P22 = P2^2; +sbit P21 = P2^1; +sbit P20 = P2^0; + +/******************* P3 ****************** +*SC92F74A7封装未引出的管脚:无 +*SC92F74A6封装未引出的管脚:无 +*SC92F74A5封装未引出的管脚:P3 +******************************************/ +sbit P37 = P3^7; +sbit P36 = P3^6; +sbit P35 = P3^5; +sbit P34 = P3^4; +sbit P33 = P3^3; +sbit P32 = P3^2; +sbit P31 = P3^1; +sbit P30 = P3^0; + +/******************* P4 ****************** +*SC92F74A7封装未引出的管脚:无 +*SC92F74A6封装未引出的管脚:P46/P47 +*SC92F74A5封装未引出的管脚:P40 +******************************************/ +sbit P47 = P4^7; +sbit P46 = P4^6; +sbit P45 = P4^5; +sbit P44 = P4^4; +sbit P43 = P4^3; +sbit P42 = P4^2; +sbit P41 = P4^1; +sbit P40 = P4^0; + +/******************* P5 ****************** +*SC92F74A7封装未引出的管脚:无 +*SC92F74A6封装未引出的管脚:P54/P55 +*SC92F74A5封装未引出的管脚:P5 +******************************************/ +sbit P55 = P5^5; +sbit P54 = P5^4; +sbit P53 = P5^3; +sbit P52 = P5^2; +sbit P51 = P5^1; +sbit P50 = P5^0; + +/**************************************************************************** +*注意:封装未引出的管脚,需设置为强推挽输出模式 +*IC选型:请根据所使用的IC型号,在初始化完IO口后,调用相对应的未引出管脚的IO口配置; +*如若选SC92F74A7,则不用调用宏定义。 +*****************************************************************************/ +#define SC92F74A6_NIO_Init() {P4CON|=0xC0,P5CON|=0x30;} //SC92F74A6的未引出来的IO口配置 +#define SC92F74A5_NIO_Init() {P0CON|=0x01,P3CON|=0xFF,P4CON|=0x01,P5CON|=0x3F;} //SC92F74A5的未引出来的IO口配置 +#endif \ No newline at end of file diff --git a/Keil_C/FWLib/SC92F_Lib/inc/SC92F754x_C.H b/Keil_C/FWLib/SC92F_Lib/inc/SC92F754x_C.H new file mode 100644 index 0000000..fe6f5d3 --- /dev/null +++ b/Keil_C/FWLib/SC92F_Lib/inc/SC92F754x_C.H @@ -0,0 +1,313 @@ + /*-------------------------------------------------------------------------- +SC92F754X_C.H + +C Header file for SC92F754X microcontroller. +Copyright (c) 2018 Shenzhen SinOne Chip Electronic CO., Ltd. +All rights reserved. +深圳市赛元微电子有限公司 +版本号: V2.0 +日期: 2019.03.18 +--------------------------------------------------------------------------*/ +#ifndef _SC92F754X_H_ +#define _SC92F754X_H_ + +/* ------------------- 字节寄存器-------------------- */ +///*CPU*/ +sfr ACC = 0xE0; //累加器A +sfr B = 0xF0; //通用寄存器B +sfr PSW = 0xD0; //程序状态字 +sfr DPH = 0x83; //数据指针高8位 +sfr DPL = 0x82; //数据指针低8位 +sfr SP = 0x81; //堆栈指针 + + +/*system*/ +sfr PCON = 0x87; //电源管理控制寄存器 + +/*interrupt*/ +sfr IP1 = 0XB9; //中断优先级控制寄存器1 +sfr IP = 0xB8; //中断优先权控制寄存器 +sfr IE = 0xA8; //中断控制寄存器 +sfr IE1 = 0XA9; //中断控制寄存器1 + +/*PORT*/ +sfr P5PH = 0xDA; //P5口模式控制寄存器 +sfr P5CON = 0xD9; //P5口模式控制寄存器 +sfr P5 = 0xD8; //P5口数据寄存器 +sfr P4PH = 0xC2; //P4口模式控制寄存器 +sfr P4CON = 0xC1; //P4口模式控制寄存器 +sfr P4 = 0xC0; //P4口数据寄存器 +sfr P3PH = 0xB2; //P3口模式控制寄存器 +sfr P3CON = 0xB1; //P3口模式控制寄存器 +sfr P3 = 0xB0; //P3口数据寄存器 +sfr P2PH = 0xA2; //P2口模式控制寄存器 +sfr P2CON = 0xA1; //P2口模式控制寄存器 +sfr P2 = 0xA0; //P2口数据寄存器 +sfr P1PH = 0x92; //P1口模式控制寄存器 +sfr P1CON = 0x91; //P1口模式控制寄存器 +sfr P1 = 0x90; //P1口数据寄存器 +sfr P0PH = 0x9B; //P0口模式控制寄存器 +sfr P0CON = 0x9A; //P0口模式控制寄存器 +sfr P0 = 0x80; //P0口数据寄存器 +sfr IOHCON0 = 0x96; //IOH0设置寄存器 +sfr IOHCON1 = 0x97; //IOH1设置寄存器 + +/*TIMER*/ +sfr TMCON = 0x8E; //定时器频率控制寄存器 +sfr TH1 = 0x8D; //定时器1高8位 +sfr TH0 = 0x8C; //定时器0高8位 +sfr TL1 = 0x8B; //定时器1低8位 +sfr TL0 = 0x8A; //定时器0低8位 +sfr TMOD = 0x89; //定时器工作模式寄存器 +sfr TCON = 0x88; //定时器控制寄存器 +sfr T2CON = 0xC8; //定时器2控制寄存器 +sfr T2MOD = 0xC9; //定时器2工作模式寄存器 +sfr RCAP2L = 0xCA; //定时器2重载/捕捉低8位 +sfr RCAP2H = 0xCB; //定时器2重载/捕捉高8位 +sfr TL2 = 0xCC; //定时器2低8位 +sfr TH2 = 0xCD; //定时器2高8位 + + +/*ADC*/ +sfr ADCCFG0 = 0xAB; //ADC功能配置寄存器0 +sfr ADCCFG1 = 0xAC; //ADC功能配置寄存器1 +sfr ADCCFG2 = 0XAA; //ADC功能配置寄存器2 +sfr ADCCON = 0XAD; //ADC控制寄存器 +sfr ADCVL = 0xAE; //ADC 结果寄存器 +sfr ADCVH = 0xAF; //ADC 结果寄存器 + +/*PWM*/ +sfr PWMCFG = 0xD4; //PWM设置寄存器 +sfr PWMCON = 0xD3; //PWM设置寄存器 + + +// +///*WatchDog*/ +sfr BTMCON = 0XCE; //低频定时器控制寄存器 +sfr WDTCON = 0xCF; //WDT控制寄存器 + + +/*LCD*/ +sfr OTCON = 0X8F; //LCD电压输出控制寄存器 +sfr P0VO = 0X9C; //P0 LCD Bais 输出寄存器 +sfr P1VO = 0X94; //P1 LCD Bais 输出寄存器 +sfr P2VO = 0XA3; //P2 LCD Bais 输出寄存器 +sfr P3VO = 0XB3; //P3 LCD Bais 输出寄存器 + +sfr DDRCON = 0X93; //显示驱动设置寄存器 + + +/*INT*/ +sfr INT0F = 0XBA; //INT0 下降沿中断控制寄存器 +sfr INT0R = 0XBB; //INT0 上降沿中断控制寄存器 +sfr INT1F = 0XBC; //INT1 下降沿中断控制寄存器 +sfr INT1R = 0XBD; //INT1 上降沿中断控制寄存器 +sfr INT2F = 0XC6; //INT2 下降沿中断控制寄存器 +sfr INT2R = 0XC7; //INT2 上降沿中断控制寄存器 + +/*PGA*/ + + +/*IAP */ +sfr IAPCTL = 0xF6; //IAP控制寄存器 +sfr IAPDAT = 0xF5; //IAP数据寄存器 +sfr IAPADE = 0xF4; //IAP扩展地址寄存器 +sfr IAPADH = 0xF3; //IAP写入地址高位寄存器 +sfr IAPADL = 0xF2; //IAP写入地址低8位寄存器 +sfr IAPKEY = 0xF1; //IAP保护寄存器 + +/*UART*/ +sfr SCON = 0X98; //串口控制寄存器 +sfr SBUF = 0X99; //串口数据缓存寄存器 + +/*SPI*/ +sfr SSCON0 = 0X9D; //SPI控制寄存器0 +sfr SSCON1 = 0X9E; //SPI控制寄存器1 +sfr SSCON2 = 0X95; //SPI控制寄存器2 +sfr SSDAT = 0X9F; //SPI数据寄存器 + +sfr OPINX = 0XFE; +sfr OPREG = 0XFF; +sfr EXADH = 0XF7; + +/*Check Sum*/ +sfr CHKSUML = 0XFC; //Check Sum结果寄存器低位 +sfr CHKSUMH = 0XFD; //Check Sum结果寄存器高位 + +/*模拟比较器*/ +sfr CMPCFG = 0XB6; //模拟比较器设置寄存器 +sfr CMPCON = 0XB7; //模拟比较器控制寄存器 + +/*乘除法器*/ +sfr EXA0 = 0xE9; //扩展累加器0 +sfr EXA1 = 0xEA; //扩展累加器1 +sfr EXA2 = 0xEB; //扩展累加器2 +sfr EXA3 = 0xEC; //扩展累加器3 +sfr EXBL = 0xED; //扩展B寄存器0 +sfr EXBH = 0xEE; //扩展B寄存器1 +sfr OPERCON = 0xEF; //运算控制寄存器 + +///* ------------------- 位寄存器-------------------- */ +/*B*/ +/*TKCON*/ +/*ACC*/ +/*PSW*/ +sbit CY = PSW^7; //标志位 0:加法运算最高位无进位,或者减法运算最高位无借位时 1:加法运算最高位有进位,或者减法运算最高位有借位时 +sbit AC = PSW^6; //进位辅助标志位 0:无借位、进位 1:加法运算时在bit3位有进位,或减法运算在bit3位有借位时 +sbit F0 = PSW^5; //用户标志位 +sbit RS1 = PSW^4; //工作寄存器组选择位 +sbit RS0 = PSW^3; //工作寄存器组选择位 +sbit OV = PSW^2; //溢出标志位 +sbit F1 = PSW^1; //F1标志 +sbit P = PSW^0; //奇偶标志位 0:ACC中1的个数为偶数(包括0个) 1:ACC中1的个数为奇数 + +/*T2CON*/ +sbit TF2 = T2CON^7; +sbit EXF2 = T2CON^6; +sbit RCLK = T2CON^5; +sbit CLK = T2CON^4; +sbit EXEN2 = T2CON^3; +sbit TR2 = T2CON^2; +sbit T2 = T2CON^1; +sbit CP = T2CON^0; + + +/*IP*/ +sbit IPADC = IP^6; //ADC中断优先控制位 0:设定 ADC的中断优先权是 “低” 1:设定 ADC的中断优先权是 “高” +sbit IPT2 = IP^5; //Timer2中断优先控制位 0:设定 Timer2的中断优先权是 “低” 1:设定Timer2的中断优先权是 “高” +sbit IPUART = IP^4; //UART中断优先控制位 0:设定UART的中断优先权是 “低” 1:设定UART的中断优先权是 “高” +sbit IPT1 = IP^3; //Timer1中断优先控制位 0:设定 Timer 1的中断优先权是 “低” 1:设定 Timer 1的中断优先权是 “高” +sbit IPINT1 = IP^2; //INT1中断优先控制位 0:设定INT1中断优先权是 “低” 1:设定INT1的中断优先权是 “高” +sbit IPT0 = IP^1; //Timer0中断优先控制位 0:设定 Timer 0的中断优先权是 “低” 1:设定 Timer 0的中断优先权是 “高” +sbit IPINT0 = IP^0; //INT0中断优先控制位 0:设定INT0中断优先权是 “低” 1:设定INT0的中断优先权是 “高” + +/*IE*/ +sbit EA = IE^7; //中断使能的总控制 0:关闭所有的中断 1:打开所有的中断 +sbit EADC = IE^6; //ADC中断使能控制 0:关闭ADC中断 1:打开ADC中断 +sbit ET2 = IE^5; //Timer2中断使能控制 0:关闭Timer2中断 1:打开Timer2中断 +sbit EUART = IE^4; //UART中断使能控制 0:关闭UART中断 1:打开UART中断 +sbit ET1 = IE^3; //Timer1中断使能控制 0:关闭TIMER1中断 1:打开TIMER1中断 +sbit EINT1 = IE^2; //INT1中断使能控制 0:关闭INT1中断 1:打开INT1中断 +sbit ET0 = IE^1; //Timer0中断使能控制 0:关闭TIMER0中断 1:打开TIMER0中断 +sbit EINT0 = IE^0; //INT0中断使能控制 0:关闭INT0中断 1:打开INT0中断 + +/*TCON*/ +sbit TF1 = TCON^7; //T1溢出中断请求标志位 T1产生溢出,发生中断时,硬件将TF1置为“1”,申请中断,CPU响应时,硬件清“0”。 +sbit TR1 = TCON^6; //定时器T1的运行控制位 0:Timer1禁止计数 1:Timer1开始计数 +sbit TF0 = TCON^5; //T0溢出中断请求标志位 T0产生溢出,发生中断时,硬件将TF0置为“1”,申请中断,CPU响应时,硬件清“0”。 +sbit TR0 = TCON^4; //定时器T0的运行控制位 0:Timer0禁止计数 1:Timer0开始计数 + +/*SCON*/ +sbit SM0 = SCON^7; +sbit SM1 = SCON^6; +sbit SM2 = SCON^5; +sbit REN = SCON^4; +sbit TB8 = SCON^3; +sbit RB8 = SCON^2; +sbit TI = SCON^1; +sbit RI = SCON^0; + +/******************* P0 ****************** +*SC92F7547封装未引出的管脚:无 +*SC92F7546封装未引出的管脚:无 +*SC92F7545封装未引出的管脚:P00 +*SC92F7543封装未引出的管脚:P00/P01 +*SC92F7541封装未引出的管脚:P00/P01/P04/P05/P06 +******************************************/ +sbit P07 = P0^7; +sbit P06 = P0^6; +sbit P05 = P0^5; +sbit P04 = P0^4; +sbit P03 = P0^3; +sbit P02 = P0^2; +sbit P01 = P0^1; +sbit P00 = P0^0; + +/******************* P1 ****************** +*SC92F7547封装未引出的管脚:无 +*SC92F7546封装未引出的管脚:无 +*SC92F7545封装未引出的管脚:无 +*SC92F7543封装未引出的管脚:P10/P14/P15/P16/P17 +*SC92F7541封装未引出的管脚:P10/P16/P17 +******************************************/ +sbit P17 = P1^7; +sbit P16 = P1^6; +sbit P15 = P1^5; +sbit P14 = P1^4; +sbit P13 = P1^3; +sbit P12 = P1^2; +sbit P11 = P1^1; +sbit P10 = P1^0; + +/******************* P2 ****************** +*SC92F7547封装未引出的管脚:无 +*SC92F7546封装未引出的管脚:无 +*SC92F7545封装未引出的管脚:无 +*SC92F7543封装未引出的管脚:P26/P27 +*SC92F7541封装未引出的管脚:P24/P25/P26/P27 +******************************************/ +sbit P27 = P2^7; +sbit P26 = P2^6; +sbit P25 = P2^5; +sbit P24 = P2^4; +sbit P23 = P2^3; +sbit P22 = P2^2; +sbit P21 = P2^1; +sbit P20 = P2^0; + +/******************* P3 ****************** +*SC92F7547封装未引出的管脚:无 +*SC92F7546封装未引出的管脚:无 +*SC92F7545封装未引出的管脚:P3 +*SC92F7543封装未引出的管脚:无 +*SC92F7541封装未引出的管脚:P30/P31/P32/P33/P34/P35 +******************************************/ +sbit P37 = P3^7; +sbit P36 = P3^6; +sbit P35 = P3^5; +sbit P34 = P3^4; +sbit P33 = P3^3; +sbit P32 = P3^2; +sbit P31 = P3^1; +sbit P30 = P3^0; + +/******************* P4 ****************** +*SC92F7547封装未引出的管脚:无 +*SC92F7546封装未引出的管脚:P46/P47 +*SC92F7545封装未引出的管脚:P40 +*SC92F7543封装未引出的管脚:P40/P44/P45/P46/P47 +*SC92F7541封装未引出的管脚:P4 +******************************************/ +sbit P47 = P4^7; +sbit P46 = P4^6; +sbit P45 = P4^5; +sbit P44 = P4^4; +sbit P43 = P4^3; +sbit P42 = P4^2; +sbit P41 = P4^1; +sbit P40 = P4^0; + +/******************* P5 ****************** +*SC92F7547封装未引出的管脚:无 +*SC92F7546封装未引出的管脚:P54/P55 +*SC92F7545封装未引出的管脚:P5 +*SC92F7543封装未引出的管脚:P5 +*SC92F7541封装未引出的管脚:P5 +******************************************/ +sbit P55 = P5^5; +sbit P54 = P5^4; +sbit P53 = P5^3; +sbit P52 = P5^2; +sbit P51 = P5^1; +sbit P50 = P5^0; + +/**************************************************************************** +*注意:封装未引出的管脚,需设置为强推挽输出模式 +*IC选型:请根据所使用的IC型号,在初始化完IO口后,调用相对应的未引出管脚的IO口配置; +*如若选择SC92F7547,则不用调用宏定义。 +*****************************************************************************/ +#define SC92F7546_NIO_Init() {P4CON|=0xC0,P5CON|=0x30;} //SC92F7546的未引出来的IO口配置 +#define SC92F7545_NIO_Init() {P0CON|=0x01,P3CON|=0xFF,P4CON|=0x01,P5CON|=0xFF;} //SC92F7545的未引出来的IO口配置 +#define SC92F7543_NIO_Init() {P0CON|=0x03,P1CON|=0xF1,P2CON|=0xC0,P4CON|=0xF1,P5CON|=0xFF;} //SC92F7543的未引出来的IO口配置 +#define SC92F7541_NIO_Init() {P0CON|=0x73,P1CON|=0xC1,P2CON|=0xF0,P3CON|=0x3F,P4CON|=0xFF,P5CON|=0xFF;} //SC92F7541的未引出来的IO口配置 +#endif \ No newline at end of file diff --git a/Keil_C/FWLib/SC92F_Lib/inc/SC92F759x_C.H b/Keil_C/FWLib/SC92F_Lib/inc/SC92F759x_C.H new file mode 100644 index 0000000..5ab2301 --- /dev/null +++ b/Keil_C/FWLib/SC92F_Lib/inc/SC92F759x_C.H @@ -0,0 +1,297 @@ +/*-------------------------------------------------------------------------- +SC92F859x_C.H + +C Header file for SC92F859x microcontroller. +Copyright (c) 2021 Shenzhen SinOne Microelectronics Co., Ltd. +All rights reserved. +深圳市赛元微电子有限公司 +版本号: V1.1 +日期: 2021.10.22 +--------------------------------------------------------------------------*/ +#ifndef _SC92F859x_H_ +#define _SC92F859x_H_ + +///* ------------------- 字节寄存器-------------------- */ +/*CPU*/ +sfr SP = 0X81; //堆栈指针 +sfr DPL = 0X82; //DPTR数据指针低位 +sfr DPH = 0X83; //DPTR数据指针高位 +sfr PSW = 0XD0; //程序状态字寄存器 +sfr ACC = 0XE0; //累加器A +sfr EXA0 = 0XE9; //扩展累加器0 +sfr EXA1 = 0XEA; //扩展累加器1 +sfr EXA2 = 0XEB; //扩展累加器2 +sfr EXA3 = 0XEC; //扩展累加器3 +sfr EXBL = 0XED; //扩展B寄存器0 +sfr EXBH = 0XEE; //扩展B寄存器1 +sfr B = 0XF0; //B寄存器 + +/*SRAM*/ +sfr EXADH = 0XF7; //外部SRAM操作地址高位 + +/*system*/ +sfr PCON = 0X87; //电源管理控制寄存器 + +/*Interrupt*/ +sfr IE = 0XA8; //中断控制寄存器 +sfr IE1 = 0XA9; //中断控制寄存器1 +sfr IP = 0XB8; //中断优先权控制寄存器 +sfr IP1 = 0XB9; //中断优先级控制寄存器1 + +/*PORT*/ +sfr P0 = 0X80; //P0口数据寄存器 +sfr P1 = 0X90; //P1口数据寄存器 +sfr P1CON = 0X91; //P1口输入/输出控制寄存器 +sfr P1PH = 0X92; //P1口上拉电阻控制寄存器 +sfr DDRCON = 0X93; //显示驱动控制寄存器 +sfr P1VO = 0X94; //P1口显示驱动输出寄存器 +sfr IOHCON0 = 0X96; //IOH设置寄存器0 +sfr IOHCON1 = 0X97; //IOH设置寄存器1 +sfr P0CON = 0X9A; //P0口输入/输出控制寄存器 +sfr P0PH = 0X9B; //P0口上拉电阻控制寄存器 +sfr P0VO = 0X9C; //P0口LCD电压输出寄存器 +sfr P2 = 0XA0; //P2口数据寄存器 +sfr P2CON = 0XA1; //P2口输入/输出控制寄存器 +sfr P2PH = 0XA2; //P2口上拉电阻控制寄存器 +sfr P2VO = 0XA3; //P2口显示驱动输出寄存器 +sfr P3 = 0XB0; //P3口数据寄存器 +sfr P3CON = 0XB1; //P3口输入/输出控制寄存器 +sfr P3PH = 0XB2; //P3口上拉电阻控制寄存器 +sfr P3VO = 0XB3; //P3口显示驱动输出寄存器 +sfr P4 = 0XC0; //P4口数据寄存器 +sfr P4CON = 0XC1; //P4口输入/输出控制寄存器 +sfr P4PH = 0XC2; //P4口上拉电阻控制寄存器 +sfr P5 = 0XD8; //P5口数据寄存器 +sfr P5CON = 0XD9; //P5口输入/输出控制寄存器 +sfr P5PH = 0XDA; //P5口上拉电阻控制寄存器 + +/*模拟比较器*/ +sfr CMPCFG = 0XB6; //模拟比较器设置寄存器 +sfr CMPCON = 0XB7; //模拟比较器控制寄存器 + +/*TIMER*/ +sfr TCON = 0X88; //定时器控制寄存器 +sfr TMOD = 0X89; //定时器工作模式寄存器 +sfr TL0 = 0X8A; //定时器0低8位 +sfr TL1 = 0X8B; //定时器1低8位 +sfr TH0 = 0X8C; //定时器0高8位 +sfr TH1 = 0X8D; //定时器1高8位 +sfr TMCON = 0X8E; //定时器频率控制寄存器 +sfr T2CON = 0XC8; //定时器2控制寄存器 +sfr T2MOD = 0XC9; //定时器2工作模式寄存器 +sfr RCAP2L = 0XCA; //定时器2重载/捕捉低8位 +sfr RCAP2H = 0XCB; //定时器2重载/捕捉高8位 +sfr TL2 = 0XCC; //定时器2低8位 +sfr TH2 = 0XCD; //定时器2高8位 + +/*ADC*/ +sfr ADCCFG2 = 0XAA; //ADC设置寄存器2 +sfr ADCCFG0 = 0XAB; //ADC设置寄存器0 +sfr ADCCFG1 = 0XAC; //ADC设置寄存器1 +sfr ADCCON = 0XAD; //ADC控制寄存器 +sfr ADCVL = 0XAE; //ADC结果寄存器 +sfr ADCVH = 0XAF; //ADC结果寄存器 + +/*PWM*/ +sfr PWMCON = 0XD3; //PWM0控制寄存器0 +sfr PWMCFG = 0XD4; //PWM设置寄存器 + +/*WatchDog*/ +sfr WDTCON = 0XCF; //WDT控制寄存器 + +/*BTM*/ +sfr BTMCON = 0XCE; //低频定时器控制寄存器 + +/*INT*/ +sfr INT0F = 0XBA; //INT0 下降沿中断控制寄存器 +sfr INT0R = 0XBB; //INT0 上降沿中断控制寄存器 +sfr INT1F = 0XBC; //INT1 下降沿中断控制寄存器 +sfr INT1R = 0XBD; //INT1 上降沿中断控制寄存器 +sfr INT2F = 0XC6; //INT2 下降沿中断控制寄存器 +sfr INT2R = 0XC7; //INT2 上降沿中断控制寄存器 + +/*IAP */ +sfr IAPKEY = 0XF1; //IAP保护寄存器 +sfr IAPADL = 0XF2; //IAP写入地址低位寄存器 +sfr IAPADH = 0XF3; //IAP写入地址高位寄存器 +sfr IAPADE = 0XF4; //IAP扩展地址寄存器 +sfr IAPDAT = 0XF5; //IAP数据寄存器 +sfr IAPCTL = 0XF6; //IAP控制寄存器 + +/*uart0*/ +sfr OTCON = 0X8F; //输出控制寄存器 +sfr SCON = 0X98; //串口控制寄存器 +sfr SBUF = 0X99; //串口数据缓存寄存器 + +/*三合一*/ +sfr SSCON2 = 0X95;//SSI控制寄存器2 +sfr SSCON0 = 0X9D; //SSI控制寄存器0 +sfr SSCON1 = 0X9E; //SSI控制寄存器1 +sfr SSDAT = 0X9F; //SSI数据寄存器 + +/*OPTION*/ +sfr OPINX = 0XFE; //Customer Option指针 +sfr OPREG = 0XFF; //Customer Option寄存器 + +/*CRC*/ +sfr OPERCON = 0XEF; //运算控制寄存器 +sfr CHKSUML = 0XFC; //Check Sum结果寄存器低位 +sfr CHKSUMH = 0XFD; //Check Sum结果寄存器高位 + + +///* ------------------- 位寄存器-------------------- */ +/*PSW*/ +sbit CY = PSW^7; //标志位 0:加法运算最高位无进位,或者减法运算最高位无借位时 1:加法运算最高位有进位,或者减法运算最高位有借位时 +sbit AC = PSW^6; //进位辅助标志位 0:无借位、进位 1:加法运算时在bit3位有进位,或减法运算在bit3位有借位时 +sbit F0 = PSW^5; //用户标志位 +sbit RS1 = PSW^4; //工作寄存器组选择位 +sbit RS0 = PSW^3; //工作寄存器组选择位 +sbit OV = PSW^2; //溢出标志位 +sbit F1 = PSW^1; //F1标志 +sbit P = PSW^0; //奇偶标志位 0:ACC中1的个数为偶数(包括0个) 1:ACC中1的个数为奇数 + +/*T2CON*/ +sbit TF2 = T2CON^7; //定时器2溢出标志位 +sbit EXF2 = T2CON^6; //T2EX引脚外部事件输入(下降沿)被检测到的标志位 +sbit RCLK = T2CON^5; //UART0接收时钟控制位 0: 定时器1产生接收波特率 1: 定时器2产生接收波特率 +sbit TCLK = T2CON^4; //UART0发送时钟控制位 0: 定时器1产生发送波特率 1: 定时器2产生发送波特率 +sbit EXEN2 = T2CON^3; //T2EX引脚上的外部事件输入(下降沿)用作重载/捕获触发器允许/禁止控制 +sbit TR2 = T2CON^2; //定时器2开始/停止控制位 0: 停止定时器2 1: 开始定时器2 +sbit T2 = T2CON^1; //定时器2定时器/计数器方式选定位2 +sbit CP = T2CON^0; //捕获/重载方式选定位 + +/*IP*/ +sbit IPADC = IP^6; //ADC中断优先权选择 0:设定 ADC的中断优先权是 “低” 1:设定 ADC的中断优先权是 “高” +sbit IPT2 = IP^5; //Timer2中断优先权选择 0:设定 Timer 2的中断优先权是 “低” 1:设定 Timer 2的中断优先权是 “高” +sbit IPUART = IP^4; //UART中断优先权选择 0:设定 UART的中断优先权是 “低” 1:设定 UART的中断优先权是 “高” +sbit IPT1 = IP^3; //Timer1中断优先权选择 0:设定 Timer 1的中断优先权是 “低” 1:设定 Timer 1的中断优先权是 “高” +sbit IPINT1 = IP^2; //INT1计数器中断优先权选择 0:设定 INT1的中断优先权是 “低” 1:设定 INT1的中断优先权是 “高” +sbit IPT0 = IP^1; //Timer0中断优先权选择 0:设定 Timer 0的中断优先权是 “低” 1:设定 Timer 0的中断优先权是 “高” +sbit IPINT0 = IP^0; //INT0计数器中断优先权选择 0:设定 INT0的中断优先权为 “低” 1: INT0中断优先权为高 + +/*IE*/ +sbit EA = IE^7; //中断使能的总控制 0:关闭所有的中断 1:打开所有的中断 +sbit EADC = IE^6; //ADC中断使能控制 0:关闭ADC中断 1:打开ADC中断 +sbit ET2 = IE^5; //Timer2中断使能控制 0:关闭TIMER2中断 1:打开TIMER2中断 +sbit EUART = IE^4; //UART中断使能控制 0:关闭SIF中断 1:打开SIF中断 +sbit ET1 = IE^3; //Timer1中断使能控制 0:关闭TIMER1中断 1:打开TIMER1中断 +sbit EINT1 = IE^2; //外部中断1中断使能控制 0:关闭外部中断1中断 1:打开外部中断1中断 +sbit ET0 = IE^1; //Timer0中断使能控制 0:关闭TIMER0中断 1:打开TIMER0中断 +sbit EINT0 = IE^0; //外部中断0中断使能控制 0:关闭外部中断0中断 1:打开外部中断0中断 + +/*TCON*/ +sbit TF1 = TCON^7; //T1溢出中断请求标志位 T1产生溢出,发生中断时,硬件将TF1置为“1”,申请中断,CPU响应时,硬件清“0”。 +sbit TR1 = TCON^6; //定时器T1的运行控制位 0:Timer1禁止计数 1:Timer1开始计数 +sbit TF0 = TCON^5; //T0溢出中断请求标志位 T0产生溢出,发生中断时,硬件将TF0置为“1”,申请中断,CPU响应时,硬件清“0”。 +sbit TR0 = TCON^4; //定时器T0的运行控制位 0:Timer0禁止计数 1:Timer0开始计数 + +/*SCON*/ +sbit SM0 = SCON^7; //串行通信模式控制位:与SM1配合使用 00: 模式0,8位半双工同步通信模式 01: 模式1,10位全双工异步通信 11: 模式3,11位全双工异步通信 +sbit SM1 = SCON^6; //串行通信模式控制位 +sbit SM2 = SCON^5; //串行通信模式控制位2,此控制位只对模式3有效 0:每收到一个完整数据帧就置位RI产生中断请求 1:收到一个完整的数据帧时,只有当RB8=1时才会置位RI产生中断请求 +sbit REN = SCON^4; //接收允许控制位 0:不允许接受数据 1:允许接受数据 +sbit TB8 = SCON^3; //只对模式3有效,为发送数据的第9位 +sbit RB8 = SCON^2; //只对模式3有效,为接收数据的第9位 +sbit TI = SCON^1; //发送中断标志位 +sbit RI = SCON^0; //接收中断标志位 + + +/******************* P0 ****************** +*SC92F8597封装未引出的管脚:无 +*SC92F8596封装未引出的管脚:无 +*SC92F8595封装未引出的管脚:P00 +*SC92F8593封装未引出的管脚:P00/P01 +******************************************/ +sbit P07 = P0^7; +sbit P06 = P0^6; +sbit P05 = P0^5; +sbit P04 = P0^4; +sbit P03 = P0^3; +sbit P02 = P0^2; +sbit P01 = P0^1; +sbit P00 = P0^0; + +/******************* P1 ****************** +*SC92F8597封装未引出的管脚:无 +*SC92F8596封装未引出的管脚:无 +*SC92F8595封装未引出的管脚:无 +*SC92F8593封装未引出的管脚:P10/P14/P15/P16/P17 +******************************************/ +sbit P17 = P1^7; +sbit P16 = P1^6; +sbit P15 = P1^5; +sbit P14 = P1^4; +sbit P13 = P1^3; +sbit P12 = P1^2; +sbit P11 = P1^1; +sbit P10 = P1^0; + +/******************* P2 ****************** +*SC92F8597封装未引出的管脚:无 +*SC92F8596封装未引出的管脚:无 +*SC92F8595封装未引出的管脚:无 +*SC92F8593封装未引出的管脚:P26/P27 +******************************************/ +sbit P27 = P2^7; +sbit P26 = P2^6; +sbit P25 = P2^5; +sbit P24 = P2^4; +sbit P23 = P2^3; +sbit P22 = P2^2; +sbit P21 = P2^1; +sbit P20 = P2^0; + +/******************* P3 ****************** +*SC92F8597封装未引出的管脚:无 +*SC92F8596封装未引出的管脚:无 +*SC92F8595封装未引出的管脚:P3 +*SC92F8593封装未引出的管脚:无 +******************************************/ +sbit P37 = P3^7; +sbit P36 = P3^6; +sbit P35 = P3^5; +sbit P34 = P3^4; +sbit P33 = P3^3; +sbit P32 = P3^2; +sbit P31 = P3^1; +sbit P30 = P3^0; + +/******************* P4 ****************** +*SC92F8597封装未引出的管脚:无 +*SC92F8596封装未引出的管脚:P46/P47 +*SC92F8595封装未引出的管脚:P40 +*SC92F8593封装未引出的管脚:P40/P44/P45/P46/P47 +******************************************/ +sbit P47 = P4^7; +sbit P46 = P4^6; +sbit P45 = P4^5; +sbit P44 = P4^4; +sbit P43 = P4^3; +sbit P42 = P4^2; +sbit P41 = P4^1; +sbit P40 = P4^0; + +/******************* P5 ****************** +*SC92F8597封装未引出的管脚:无 +*SC92F8596封装未引出的管脚:P54/P55 +*SC92F8595封装未引出的管脚:P5 +*SC92F8593封装未引出的管脚:P5 +******************************************/ +sbit P55 = P5^5; +sbit P54 = P5^4; +sbit P53 = P5^3; +sbit P52 = P5^2; +sbit P51 = P5^1; +sbit P50 = P5^0; + +/**************************************************************************** +*注意:封装未引出的管脚,需设置为强推挽输出模式 +*IC选型:请根据所使用的IC型号,在初始化完IO口后,调用相对应的未引出管脚的IO口配置; +*如若选SC92F8597,则不用调用宏定义。 +*****************************************************************************/ +#define SC92F8596_NIO_Init() {P4CON|=0xC0,P5CON|=0x30;} //SC92F8596的未引出来的IO口配置 +#define SC92F8595_NIO_Init() {P0CON|=0x01,P3CON|=0xFF,P4CON|=0x01,P5CON|=0xFF;} //SC92F8595的未引出来的IO口配置 +#define SC92F8593_NIO_Init() {P0CON|=0x03,P1CON|=0xF1,P2CON|=0xC0,P4CON|=0xF1,P5CON|=0xFF;}//SC92F8593的未引出来的IO口配置 + + +#endif \ No newline at end of file diff --git a/Keil_C/FWLib/SC92F_Lib/inc/SC92F8003_C.H b/Keil_C/FWLib/SC92F_Lib/inc/SC92F8003_C.H new file mode 100644 index 0000000..d8e44f1 --- /dev/null +++ b/Keil_C/FWLib/SC92F_Lib/inc/SC92F8003_C.H @@ -0,0 +1,207 @@ + /*-------------------------------------------------------------------------- +SC92F8003_C.H + +C Header file for SC92F8003 microcontroller. +Copyright (c) 2018 Shenzhen SinOne Chip Electronic CO., Ltd. +All rights reserved. +深圳市赛元微电子有限公司 +版本号: V1.0 +日期: 2018.05.02 +--------------------------------------------------------------------------*/ +#ifndef _SC92F8003_H_ +#define _SC92F8003_H_ + +/* ------------------- 字节寄存器-------------------- */ +///*CPU*/ +sfr ACC = 0xE0; //累加器A +sfr B = 0xF0; //通用寄存器B +sfr PSW = 0xD0; //程序状态字 +sfr DPH = 0x83; //数据指针高8位 +sfr DPL = 0x82; //数据指针低8位 +sfr SP = 0x81; //堆栈指针 + + +/*system*/ +sfr PCON = 0x87; //电源管理控制寄存器 + +/*interrupt*/ +sfr IP1 = 0XB9; //中断优先级控制寄存器1 +sfr IP = 0xB8; //中断优先权控制寄存器 +sfr IE = 0xA8; //中断控制寄存器 +sfr IE1 = 0XA9; //中断控制寄存器1 + +/*PORT*/ +sfr P2PH = 0xA2; //P2口模式控制寄存器 +sfr P2CON = 0xA1; //P2口模式控制寄存器 +sfr P2 = 0xA0; //P2口数据寄存器 +sfr P1PH = 0x92; //P1口模式控制寄存器 +sfr P1CON = 0x91; //P1口模式控制寄存器 +sfr P1 = 0x90; //P1口数据寄存器 +sfr P0PH = 0x9B; //P0口模式控制寄存器 +sfr P0CON = 0x9A; //P0口模式控制寄存器 +sfr P0 = 0x80; //P0口数据寄存器 + +/*TIMER*/ +sfr TMCON = 0x8E; //定时器频率控制寄存器 +sfr TH1 = 0x8D; //定时器1高8位 +sfr TH0 = 0x8C; //定时器0高8位 +sfr TL1 = 0x8B; //定时器1低8位 +sfr TL0 = 0x8A; //定时器0低8位 +sfr TMOD = 0x89; //定时器工作模式寄存器 +sfr TCON = 0x88; //定时器控制寄存器 +sfr T2CON = 0xC8; //定时器2控制寄存器 +sfr T2MOD = 0xC9; //定时器2工作模式寄存器 +sfr RCAP2L = 0xCA; //定时器2重载/捕捉低8位 +sfr RCAP2H = 0xCB; //定时器2重载/捕捉高8位 +sfr TL2 = 0xCC; //定时器2低8位 +sfr TH2 = 0xCD; //定时器2高8位 + + +/*ADC*/ +sfr ADCCFG1 = 0xAA; //ADC功能配置寄存器0 +sfr ADCCFG0 = 0xAB; //ADC功能配置寄存器1 +sfr ADCCON = 0XAD; //ADC控制寄存器 +sfr ADCVL = 0xAE; //ADC 结果寄存器 +sfr ADCVH = 0xAF; //ADC 结果寄存器 + +/*PWM*/ +sfr PWMCFG = 0xD1; //PWM设置寄存器 +sfr PWMCON0 = 0xD2; //PWM控制寄存器 +sfr PWMPRD = 0xD3; //PWM周期设置寄存器 +sfr PWMDTYA = 0xD4; //PWM占空比设置寄存器A +sfr PWMDTY0 = 0xD5; //PWM0设置寄存器 +sfr PWMDTY1 = 0xD6; //PWM1设置寄存器 +sfr PWMDTY2 = 0xD7; //PWM2设置寄存器 +sfr PWMCON1 = 0xDA; //PWM控制寄存器 +sfr PWMDTYB = 0xDB; //PWM占空比设置寄存器B +sfr PWMDTY3 = 0xDC; //PWM3设置寄存器 +sfr PWMDTY4 = 0xDD; //PWM4设置寄存器 +sfr PWMDTY5 = 0xDE; //PWM5设置寄存器 +sfr PWMDTY6 = 0xDF; //PWM6设置寄存器 + + +// +///*WatchDog*/ +sfr BTMCON = 0XCE; //低频定时器控制寄存器 +sfr WDTCON = 0xCF; //WDT控制寄存器 + + +sfr OTCON = 0X8F; //输出控制寄存器 + +/*INT*/ +sfr INT0F = 0XBA; //INT0 下降沿中断控制寄存器 +sfr INT0R = 0XBB; //INT0 上降沿中断控制寄存器 +sfr INT1F = 0XBC; //INT1 下降沿中断控制寄存器 +sfr INT1R = 0XBD; //INT1 上降沿中断控制寄存器 +sfr INT2F = 0XC6; //INT2 下降沿中断控制寄存器 +sfr INT2R = 0XC7; //INT2 上降沿中断控制寄存器 + +/*IAP */ +sfr IAPCTL = 0xF6; //IAP控制寄存器 +sfr IAPDAT = 0xF5; //IAP数据寄存器 +sfr IAPADE = 0xF4; //IAP扩展地址寄存器 +sfr IAPADH = 0xF3; //IAP写入地址高位寄存器 +sfr IAPADL = 0xF2; //IAP写入地址低8位寄存器 +sfr IAPKEY = 0xF1; //IAP保护寄存器 + +/*uart0*/ +sfr SCON = 0X98; //uart控制寄存器 +sfr SBUF = 0X99; //uart0数据寄存器 + +/*三合一*/ +sfr SSCON0 = 0X9D; //SSI控制寄存器0 +sfr SSCON1 = 0X9E; //SSI控制寄存器1 +sfr SSCON2 = 0X95; //SSI控制寄存器2 +sfr SSDAT = 0X9F; //SSI数据寄存器 + +sfr OPINX = 0XFE; +sfr OPREG = 0XFF; + +/*Check Sum*/ +sfr CHKSUML = 0XFC; //Check Sum结果寄存器低位 +sfr CHKSUMH = 0XFD; //Check Sum结果寄存器高位 + +sfr OPERCON = 0xEF; //运算控制寄存器 + +///* ------------------- 位寄存器-------------------- */ +/*PSW*/ +sbit CY = PSW^7; //标志位 0:加法运算最高位无进位,或者减法运算最高位无借位时 1:加法运算最高位有进位,或者减法运算最高位有借位时 +sbit AC = PSW^6; //进位辅助标志位 0:无借位、进位 1:加法运算时在bit3位有进位,或减法运算在bit3位有借位时 +sbit F0 = PSW^5; //用户标志位 +sbit RS1 = PSW^4; //工作寄存器组选择位 +sbit RS0 = PSW^3; //工作寄存器组选择位 +sbit OV = PSW^2; //溢出标志位 +sbit F1 = PSW^1; //F1标志 +sbit P = PSW^0; //奇偶标志位 0:ACC中1的个数为偶数(包括0个) 1:ACC中1的个数为奇数 + +/*T2CON*/ +sbit TF2 = T2CON^7; +sbit EXF2 = T2CON^6; +sbit RCLK = T2CON^5; +sbit TCLK = T2CON^4; +sbit EXEN2 = T2CON^3; +sbit TR2 = T2CON^2; +sbit T2 = T2CON^1; +sbit CP = T2CON^0; + + +/*IP*/ +sbit IPADC = IP^6; //ADC中断优先控制位 0:设定 ADC的中断优先权是 “低” 1:设定 ADC的中断优先权是 “高” +sbit IPT2 = IP^5; //PWM中断优先控制位 0:设定 PWM的中断优先权是 “低” 1:设定 PWM 的中断优先权是 “高” +sbit IPUART = IP^4; //SIF中断优先控制位 0:设定 SIF的中断优先权是 “低” 1:设定 SIF的中断优先权是 “高” +sbit IPT1 = IP^3; //Timer1中断优先控制位 0:设定 Timer 1的中断优先权是 “低” 1:设定 Timer 1的中断优先权是 “高” +sbit IPINT1 = IP^2; //32K Base Timer中断优先控制位 0:设定 32K的中断优先权是 “低” 1:设定 32K的中断优先权是 “高” +sbit IPT0 = IP^1; //Timer0中断优先控制位 0:设定 Timer 0的中断优先权是 “低” 1:设定 Timer 0的中断优先权是 “高” +sbit IPINT0 = IP^0; + +/*IE*/ +sbit EA = IE^7; //中断使能的总控制 0:关闭所有的中断 1:打开所有的中断 +sbit EADC = IE^6; //ADC中断使能控制 0:关闭ADC中断 1:打开ADC中断 +sbit ET2 = IE^5; //PWM中断使能控制 0:关闭PWM中断 1:打开PWM中断 +sbit EUART = IE^4; //UART中断使能控制 0:关闭SIF中断 1:打开SIF中断 +sbit ET1 = IE^3; //Timer1中断使能控制 0:关闭TIMER1中断 1:打开TIMER1中断 +sbit EINT1 = IE^2; //32K Base Timer中断使能控制 0:关闭32K中断 1:打开32K中断 +sbit ET0 = IE^1; //Timer0中断使能控制 0:关闭TIMER0中断 1:打开TIMER0中断 +sbit EINT0 = IE^0; //TouchKey的中断使能控制 0:关闭TouchKey中断 1:打开TouchKey中断 + +/*TCON*/ +sbit TF1 = TCON^7; //T1溢出中断请求标志位 T1产生溢出,发生中断时,硬件将TF1置为“1”,申请中断,CPU响应时,硬件清“0”。 +sbit TR1 = TCON^6; //定时器T1的运行控制位 0:Timer1禁止计数 1:Timer1开始计数 +sbit TF0 = TCON^5; //T0溢出中断请求标志位 T0产生溢出,发生中断时,硬件将TF0置为“1”,申请中断,CPU响应时,硬件清“0”。 +sbit TR0 = TCON^4; //定时器T0的运行控制位 0:Timer0禁止计数 1:Timer0开始计数 + +/*SCON*/ +sbit SM0 = SCON^7; +sbit SM1 = SCON^6; +sbit SM2 = SCON^5; +sbit REN = SCON^4; +sbit TB8 = SCON^3; +sbit RB8 = SCON^2; +sbit TI = SCON^1; +sbit RI = SCON^0; + +/* P0 */ +sbit P01 = P0^1; +sbit P00 = P0^0; + +/* P1 */ +sbit P17 = P1^7; +sbit P16 = P1^6; +sbit P15 = P1^5; +sbit P14 = P1^4; +sbit P13 = P1^3; +sbit P12 = P1^2; +sbit P11 = P1^1; +sbit P10 = P1^0; + +/* P2 */ +sbit P27 = P2^7; +sbit P26 = P2^6; +sbit P25 = P2^5; +sbit P24 = P2^4; +sbit P23 = P2^3; +sbit P22 = P2^2; +sbit P21 = P2^1; +sbit P20 = P2^0; + +#endif \ No newline at end of file diff --git a/Keil_C/FWLib/SC92F_Lib/inc/SC92F827X_C.H b/Keil_C/FWLib/SC92F_Lib/inc/SC92F827X_C.H new file mode 100644 index 0000000..8f6faa5 --- /dev/null +++ b/Keil_C/FWLib/SC92F_Lib/inc/SC92F827X_C.H @@ -0,0 +1,195 @@ + /*-------------------------------------------------------------------------- +SC92F827x_C.H + +C Header file for SC92F827x microcontroller. +Copyright (c) 2018 Shenzhen SinOne Chip Electronic CO., Ltd. +All rights reserved. +深圳市赛元微电子有限公司 +版本号: V1.0 +日期: 2018.04.25 +--------------------------------------------------------------------------*/ +#ifndef _SC92F827x_H_ +#define _SC92F827x_H_ + +/* ------------------- 字节寄存器-------------------- */ +///*CPU*/ +sfr ACC = 0xE0; //累加器A +sfr B = 0xF0; //通用寄存器B +sfr PSW = 0xD0; //程序状态字 +sfr DPH = 0x83; //数据指针高8位 +sfr DPL = 0x82; //数据指针低8位 +sfr SP = 0x81; //堆栈指针 + + +/*system*/ +sfr PCON = 0x87; //电源管理控制寄存器 + +/*interrupt*/ +sfr IP1 = 0XB9; //中断优先级控制寄存器1 +sfr IP = 0xB8; //中断优先权控制寄存器 +sfr IE = 0xA8; //中断控制寄存器 +sfr IE1 = 0XA9; //中断控制寄存器1 + +/*PORT*/ +sfr P2PH = 0xA2; //P2口模式控制寄存器 +sfr P2CON = 0xA1; //P2口模式控制寄存器 +sfr P2 = 0xA0; //P2口数据寄存器 +sfr P1PH = 0x92; //P1口模式控制寄存器 +sfr P1CON = 0x91; //P1口模式控制寄存器 +sfr P1 = 0x90; //P1口数据寄存器 +sfr P0PH = 0x9B; //P0口模式控制寄存器 +sfr P0CON = 0x9A; //P0口模式控制寄存器 +sfr P0 = 0x80; //P0口数据寄存器 +sfr IOHCON = 0x97; //IOH1设置寄存器 + +/*TIMER*/ +sfr TMCON = 0x8E; //定时器频率控制寄存器 +sfr TH1 = 0x8D; //定时器1高8位 +sfr TH0 = 0x8C; //定时器0高8位 +sfr TL1 = 0x8B; //定时器1低8位 +sfr TL0 = 0x8A; //定时器0低8位 +sfr TMOD = 0x89; //定时器工作模式寄存器 +sfr TCON = 0x88; //定时器控制寄存器 +sfr T2CON = 0xC8; //定时器2控制寄存器 +sfr RCAP2L = 0xCA; //定时器2重载/捕捉低8位 +sfr RCAP2H = 0xCB; //定时器2重载/捕捉高8位 +sfr TL2 = 0xCC; //定时器2低8位 +sfr TH2 = 0xCD; //定时器2高8位 + +/*PWM*/ +sfr PWMCFG = 0xD1; //PWM设置寄存器 +sfr PWMCON = 0xD2; //PWM控制寄存器 +sfr PWMPRD = 0xD3; //PWM周期设置寄存器 +sfr PWMDTY3 = 0xD4; //PWM3占空比设置寄存器 +sfr PWMDTY0 = 0xD5; //PWM0占空比设置寄存器 +sfr PWMDTY1 = 0xD6; //PWM1占空比设置寄存器 +sfr PWMDTY2 = 0xD7; //PWM2占空比设置寄存器 + +// +///*WatchDog*/ +sfr BTMCON = 0XCE; //低频定时器控制寄存器 +sfr WDTCON = 0xCF; //WDT控制寄存器 + + +/*LCD*/ +sfr OTCON = 0X8F; //LCD电压输出控制寄存器 + + +/*INT*/ +sfr INT0F = 0XBA; //INT0 下降沿中断控制寄存器 +sfr INT0R = 0XBB; //INT0 上降沿中断控制寄存器 +sfr INT2F = 0XC6; //INT2 下降沿中断控制寄存器 +sfr INT2R = 0XC7; //INT2 上降沿中断控制寄存器 + +/*IAP */ +sfr IAPCTL = 0xF6; //IAP控制寄存器 +sfr IAPDAT = 0xF5; //IAP数据寄存器 +sfr IAPADE = 0xF4; //IAP扩展地址寄存器 +sfr IAPADH = 0xF3; //IAP写入地址高位寄存器 +sfr IAPADL = 0xF2; //IAP写入地址低8位寄存器 +sfr IAPKEY = 0xF1; //IAP保护寄存器 + +/*SPI*/ +sfr SSCON0 = 0X9D; //SPI控制寄存器0 +sfr SSCON1 = 0X9E; //SPI控制寄存器1 +sfr SSCON2 = 0X95; //SPI控制寄存器2 +sfr SSDAT = 0X9F; //SPI数据寄存器 + +sfr OPINX = 0XFE; +sfr OPREG = 0XFF; + +/*Check Sum*/ +sfr CHKSUML = 0XFC; //Check Sum结果寄存器低位 +sfr CHKSUMH = 0XFD; //Check Sum结果寄存器高位 + +sfr OPERCON = 0xEF; //运算控制寄存器 + +///* ------------------- 位寄存器-------------------- */ +/*B*/ +/*TKCON*/ +/*ACC*/ +/*PSW*/ +sbit CY = PSW^7; //标志位 0:加法运算最高位无进位,或者减法运算最高位无借位时 1:加法运算最高位有进位,或者减法运算最高位有借位时 +sbit AC = PSW^6; //进位辅助标志位 0:无借位、进位 1:加法运算时在bit3位有进位,或减法运算在bit3位有借位时 +sbit F0 = PSW^5; //用户标志位 +sbit RS1 = PSW^4; //工作寄存器组选择位 +sbit RS0 = PSW^3; //工作寄存器组选择位 +sbit OV = PSW^2; //溢出标志位 +sbit F1 = PSW^1; //F1标志 +sbit P = PSW^0; //奇偶标志位 0:ACC中1的个数为偶数(包括0个) 1:ACC中1的个数为奇数 + +/*T2CON*/ +sbit TF2 = T2CON^7; +sbit EXF2 = T2CON^6; +sbit RCLK = T2CON^5; +sbit TCLK = T2CON^4; +sbit EXEN2 = T2CON^3; +sbit TR2 = T2CON^2; +sbit T2 = T2CON^1; +sbit CP = T2CON^0; + + +/*IP*/ +sbit IPT2 = IP^5; //Timer2中断优先控制位 0:设定 Timer2的中断优先权是 “低” 1:设定Timer2的中断优先权是 “高” +sbit IPT1 = IP^3; //Timer1中断优先控制位 0:设定 Timer 1的中断优先权是 “低” 1:设定 Timer 1的中断优先权是 “高” 1:设定INT1的中断优先权是 “高” +sbit IPT0 = IP^1; //Timer0中断优先控制位 0:设定 Timer 0的中断优先权是 “低” 1:设定 Timer 0的中断优先权是 “高” +sbit IPINT0 = IP^0; //INT0中断优先控制位 0:设定INT0中断优先权是 “低” 1:设定INT0的中断优先权是 “高” + +/*IE*/ +sbit EA = IE^7; //中断使能的总控制 0:关闭所有的中断 1:打开所有的中断 +sbit ET2 = IE^5; //Timer2中断使能控制 0:关闭Timer2中断 1:打开Timer2中断 +sbit ET1 = IE^3; //Timer1中断使能控制 0:关闭TIMER1中断 1:打开TIMER1中断 +sbit ET0 = IE^1; //Timer0中断使能控制 0:关闭TIMER0中断 1:打开TIMER0中断 +sbit EINT0 = IE^0; //INT0中断使能控制 0:关闭INT0中断 1:打开INT0中断 + +/*TCON*/ +sbit TF1 = TCON^7; //T1溢出中断请求标志位 T1产生溢出,发生中断时,硬件将TF1置为“1”,申请中断,CPU响应时,硬件清“0”。 +sbit TR1 = TCON^6; //定时器T1的运行控制位 0:Timer1禁止计数 1:Timer1开始计数 +sbit TF0 = TCON^5; //T0溢出中断请求标志位 T0产生溢出,发生中断时,硬件将TF0置为“1”,申请中断,CPU响应时,硬件清“0”。 +sbit TR0 = TCON^4; //定时器T0的运行控制位 0:Timer0禁止计数 1:Timer0开始计数 + +/******************* P0 ****************** +*SC92F8272封装未引出的管脚:无 +*SC92F8271封装未引出的管脚:P02/P03/P04 +*SC92F8270封装未引出的管脚:P00/P02/P03/P04/P05 +******************************************/ +sbit P05 = P0^5; +sbit P04 = P0^4; +sbit P03 = P0^3; +sbit P02 = P0^2; +sbit P01 = P0^1; +sbit P00 = P0^0; + +/******************* P1 ****************** +*SC92F8272封装未引出的管脚:无 +*SC92F8271封装未引出的管脚:无 +*SC92F8270封装未引出的管脚:P11/P14/P15 +******************************************/ +sbit P15 = P1^5; +sbit P14 = P1^4; +sbit P13 = P1^3; +sbit P12 = P1^2; +sbit P11 = P1^1; +sbit P10 = P1^0; + +/******************* P2 ****************** +*SC92F8272封装未引出的管脚:无 +*SC92F8271封装未引出的管脚:P27 +*SC92F8270封装未引出的管脚:P24/P25/P26/P27 +******************************************/ +sbit P27 = P2^7; +sbit P26 = P2^6; +sbit P25 = P2^5; +sbit P24 = P2^4; +sbit P21 = P2^1; +sbit P20 = P2^0; + +/**************************************************************************** +*注意:封装未引出的管脚,需设置为强推挽输出模式 +*IC选型:请根据所使用的IC型号,在初始化完IO口后,调用相对应的未引出管脚的IO口配置; +*如若选择SC92F8272,则不用调用宏定义。 +*****************************************************************************/ +#define SC92F8271_NIO_Init() {P0CON|=0x1C,P2CON|=0x80;} //SC92F8271的未引出来的IO口配置 +#define SC92F8270_NIO_Init() {P0CON|=0x3D,P1CON|=0x32,P2CON|=0xF0;} //SC92F8270的未引出来的IO口配置 + +#endif \ No newline at end of file diff --git a/Keil_C/FWLib/SC92F_Lib/inc/SC92F836xB_C.H b/Keil_C/FWLib/SC92F_Lib/inc/SC92F836xB_C.H new file mode 100644 index 0000000..b0dcdef --- /dev/null +++ b/Keil_C/FWLib/SC92F_Lib/inc/SC92F836xB_C.H @@ -0,0 +1,251 @@ + /*-------------------------------------------------------------------------- +SC92F836XB_C.H + +C Header file for SC92F836XB microcontroller. +Copyright (c) 2018 Shenzhen SinOne Chip Electronic CO., Ltd. +All rights reserved. +深圳市赛元微电子有限公司 +版本号: V2.0 +日期: 2018.08.24 +--------------------------------------------------------------------------*/ +#ifndef _SC92F836XB_H_ +#define _SC92F836XB_H_ + +/* ------------------- 字节寄存器-------------------- */ +///*CPU*/ +sfr ACC = 0xE0; //累加器A +sfr B = 0xF0; //通用寄存器B +sfr PSW = 0xD0; //程序状态字 +sfr DPH = 0x83; //数据指针高8位 +sfr DPL = 0x82; //数据指针低8位 +sfr SP = 0x81; //堆栈指针 + + +/*system*/ +sfr PCON = 0x87; //电源管理控制寄存器 + +/*interrupt*/ +sfr IP1 = 0XB9; //中断优先级控制寄存器1 +sfr IP = 0xB8; //中断优先权控制寄存器 +sfr IE = 0xA8; //中断控制寄存器 +sfr IE1 = 0XA9; //中断控制寄存器1 + +/*PORT*/ +sfr P5PH = 0xDA; //P5口模式控制寄存器 +sfr P5CON = 0xD9; //P5口模式控制寄存器 +sfr P5 = 0xD8; //P5口数据寄存器 +sfr P2PH = 0xA2; //P2口模式控制寄存器 +sfr P2CON = 0xA1; //P2口模式控制寄存器 +sfr P2 = 0xA0; //P2口数据寄存器 +sfr P1PH = 0x92; //P1口模式控制寄存器 +sfr P1CON = 0x91; //P1口模式控制寄存器 +sfr P1 = 0x90; //P1口数据寄存器 +sfr P0PH = 0x9B; //P0口模式控制寄存器 +sfr P0CON = 0x9A; //P0口模式控制寄存器 +sfr P0 = 0x80; //P0口数据寄存器 +sfr IOHCON = 0x97; //IOH设置寄存器 + +/*TIMER*/ +sfr TMCON = 0x8E; //定时器频率控制寄存器 +sfr TH1 = 0x8D; //定时器1高8位 +sfr TH0 = 0x8C; //定时器0高8位 +sfr TL1 = 0x8B; //定时器1低8位 +sfr TL0 = 0x8A; //定时器0低8位 +sfr TMOD = 0x89; //定时器工作模式寄存器 +sfr TCON = 0x88; //定时器控制寄存器 +sfr T2CON = 0xC8; //定时器2控制寄存器 +sfr T2MOD = 0xC9; //定时器2工作模式寄存器 +sfr RCAP2L = 0xCA; //定时器2重载/捕捉低8位 +sfr RCAP2H = 0xCB; //定时器2重载/捕捉高8位 +sfr TL2 = 0xCC; //定时器2低8位 +sfr TH2 = 0xCD; //定时器2高8位 + + +/*ADC*/ +sfr ADCCFG0 = 0xAB; //ADC功能配置寄存器0 +sfr ADCCFG1 = 0xAC; //ADC功能配置寄存器1 +sfr ADCCFG2 = 0XAA; //ADC功能配置寄存器2 +sfr ADCCON = 0XAD; //ADC控制寄存器 +sfr ADCVL = 0xAE; //ADC 结果寄存器 +sfr ADCVH = 0xAF; //ADC 结果寄存器 + +/*PWM*/ +sfr PWMCFG = 0xD1; //PWM设置寄存器 +sfr PWMCON = 0xD2; //PWM控制寄存器 +sfr PWMPRD = 0xD3; //PWM周期设置寄存器 +sfr PWMDTYA = 0xD4; //PWM占空比设置寄存器A +sfr PWMDTY0 = 0xD5; //PWM0设置寄存器 +sfr PWMDTY1 = 0xD6; //PWM1设置寄存器 +sfr PWMDTY2 = 0xD7; //PWM2设置寄存器 +sfr PWMDTYB = 0xDC; //PWM占空比设置寄存器B +sfr PWMDTY3 = 0xDD; //PWM3设置寄存器 +sfr PWMDTY4 = 0xDE; //PWM4设置寄存器 +sfr PWMDTY5 = 0xDF; //PWM5设置寄存器 + +///*WatchDog*/ +sfr BTMCON = 0XCE; //低频定时器控制寄存器 +sfr WDTCON = 0xCF; //WDT控制寄存器 + +/*LCD*/ +sfr OTCON = 0X8F; //LCD电压输出控制寄存器 +sfr P0VO = 0X9C; //P0 LCD Bais 输出寄存器 + +/*INT*/ +sfr INT0F = 0XBA; //INT0 下降沿中断控制寄存器 +sfr INT0R = 0XBB; //INT0 上降沿中断控制寄存器 +sfr INT1F = 0XBC; //INT1 下降沿中断控制寄存器 +sfr INT1R = 0XBD; //INT1 上降沿中断控制寄存器 +sfr INT2F = 0XC6; //INT2 下降沿中断控制寄存器 +sfr INT2R = 0XC7; //INT2 上降沿中断控制寄存器 + +/*IAP */ +sfr IAPCTL = 0xF6; //IAP控制寄存器 +sfr IAPDAT = 0xF5; //IAP数据寄存器 +sfr IAPADE = 0xF4; //IAP扩展地址寄存器 +sfr IAPADH = 0xF3; //IAP写入地址高位寄存器 +sfr IAPADL = 0xF2; //IAP写入地址低8位寄存器 +sfr IAPKEY = 0xF1; //IAP保护寄存器 + +/*uart*/ +sfr SCON = 0x98; //串口控制寄存器 +sfr SBUF = 0x99; //串口数据缓存寄存器 + +/*三合一*/ +sfr SSCON0 = 0X9D; //SPI控制寄存器0 +sfr SSCON1 = 0X9E; //SPI控制寄存器1 +sfr SSCON2 = 0X95; //SPI控制寄存器2 +sfr SSDAT = 0X9F; //SPI数据寄存器 + +sfr OPINX = 0XFE; +sfr OPREG = 0XFF; +sfr EXADH = 0XF7; + +/*Check Sum*/ +sfr CHKSUML = 0XFC; //Check Sum结果寄存器低位 +sfr CHKSUMH = 0XFD; //Check Sum结果寄存器高位 + +/*乘除法*/ +sfr EXA0 = 0xE9; //扩展累加器0 +sfr EXA1 = 0xEA; //扩展累加器1 +sfr EXA2 = 0xEB; //扩展累加器2 +sfr EXA3 = 0xEC; //扩展累加器3 +sfr EXBL = 0xED; //扩展B寄存器0 +sfr EXBH = 0xEE; //扩展B寄存器1 +sfr OPERCON = 0xEF; //运算控制寄存器 + +/* ------------------- 位寄存器-------------------- */ +/*PSW*/ +sbit CY = PSW^7; //标志位 0:加法运算最高位无进位,或者减法运算最高位无借位时 1:加法运算最高位有进位,或者减法运算最高位有借位时 +sbit AC = PSW^6; //进位辅助标志位 0:无借位、进位 1:加法运算时在bit3位有进位,或减法运算在bit3位有借位时 +sbit F0 = PSW^5; //用户标志位 +sbit RS1 = PSW^4; //工作寄存器组选择位 +sbit RS0 = PSW^3; //工作寄存器组选择位 +sbit OV = PSW^2; //溢出标志位 +sbit F1 = PSW^1; //F1标志 +sbit P = PSW^0; //奇偶标志位 0:ACC中1的个数为偶数(包括0个) 1:ACC中1的个数为奇数 + +/*T2CON*/ +sbit TF2 = T2CON^7; +sbit EXF2 = T2CON^6; +sbit RCLK = T2CON^5; +sbit TCLK = T2CON^4; +sbit EXEN2 = T2CON^3; +sbit TR2 = T2CON^2; +sbit T2 = T2CON^1; +sbit CP = T2CON^0; + + +/*IP*/ +sbit IPADC = IP^6; //ADC中断优先控制位 0:设定 ADC的中断优先权是 “低” 1:设定 ADC的中断优先权是 “高” +sbit IPT2 = IP^5; //Timer2中断优先控制位 0:设定 Timer2的中断优先权是 “低” 1:设定Timer2的中断优先权是 “高” +sbit IPUART = IP^4; //UART中断优先控制位 0:设定UART的中断优先权是 “低” 1:设定UART的中断优先权是 “高” +sbit IPT1 = IP^3; //Timer1中断优先控制位 0:设定 Timer 1的中断优先权是 “低” 1:设定 Timer 1的中断优先权是 “高” +sbit IPINT1 = IP^2; //INT1中断优先控制位 0:设定INT1中断优先权是 “低” 1:设定INT1的中断优先权是 “高” +sbit IPT0 = IP^1; //Timer0中断优先控制位 0:设定 Timer 0的中断优先权是 “低” 1:设定 Timer 0的中断优先权是 “高” +sbit IPINT0 = IP^0; //INT0中断优先控制位 0:设定INT0中断优先权是 “低” 1:设定INT0的中断优先权是 “高” + +/*IE*/ +sbit EA = IE^7; //中断使能的总控制 0:关闭所有的中断 1:打开所有的中断 +sbit EADC = IE^6; //ADC中断使能控制 0:关闭ADC中断 1:打开ADC中断 +sbit ET2 = IE^5; //Timer2中断使能控制 0:关闭Timer2中断 1:打开Timer2中断 +sbit EUART = IE^4; //UART中断使能控制 0:关闭UART中断 1:打开UART中断 +sbit ET1 = IE^3; //Timer1中断使能控制 0:关闭TIMER1中断 1:打开TIMER1中断 +sbit EINT1 = IE^2; //INT1中断使能控制 0:关闭INT1中断 1:打开INT1中断 +sbit ET0 = IE^1; //Timer0中断使能控制 0:关闭TIMER0中断 1:打开TIMER0中断 +sbit EINT0 = IE^0; //INT0中断使能控制 0:关闭INT0中断 1:打开INT0中断 + +/*TCON*/ +sbit TF1 = TCON^7; //T1溢出中断请求标志位 T1产生溢出,发生中断时,硬件将TF1置为“1”,申请中断,CPU响应时,硬件清“0”。 +sbit TR1 = TCON^6; //定时器T1的运行控制位 0:Timer1禁止计数 1:Timer1开始计数 +sbit TF0 = TCON^5; //T0溢出中断请求标志位 T0产生溢出,发生中断时,硬件将TF0置为“1”,申请中断,CPU响应时,硬件清“0”。 +sbit TR0 = TCON^4; //定时器T0的运行控制位 0:Timer0禁止计数 1:Timer0开始计数 + +/*SCON*/ +sbit SM0 = SCON^7; +sbit SM1 = SCON^6; +sbit SM2 = SCON^5; +sbit REN = SCON^4; +sbit TB8 = SCON^3; +sbit RB8 = SCON^2; +sbit TI = SCON^1; +sbit RI = SCON^0; + +/******************* P0 ****************** +*SC92F8363B封装未引出的管脚:无 +*SC92F8362B封装未引出的管脚:P06/P07 +*SC92F8361B封装未引出的管脚:P02/P03/P04/P06/P07 +******************************************/ +sbit P07 = P0^7; +sbit P06 = P0^6; +sbit P05 = P0^5; +sbit P04 = P0^4; +sbit P03 = P0^3; +sbit P02 = P0^2; +sbit P01 = P0^1; +sbit P00 = P0^0; + +/******************* P1 ****************** +*SC92F8363B封装未引出的管脚:无 +*SC92F8362B封装未引出的管脚:P16/P17 +*SC92F8361B封装未引出的管脚:P16/P17 +******************************************/ +sbit P17 = P1^7; +sbit P16 = P1^6; +sbit P15 = P1^5; +sbit P14 = P1^4; +sbit P13 = P1^3; +sbit P12 = P1^2; +sbit P11 = P1^1; +sbit P10 = P1^0; + +/******************* P2 ****************** +*SC92F8363B封装未引出的管脚:无 +*SC92F8362B封装未引出的管脚:P22/P23 +*SC92F8361B封装未引出的管脚:P22/P23/P27 +******************************************/ +sbit P27 = P2^7; +sbit P26 = P2^6; +sbit P25 = P2^5; +sbit P24 = P2^4; +sbit P23 = P2^3; +sbit P22 = P2^2; +sbit P21 = P2^1; +sbit P20 = P2^0; + +/******************* P5 ****************** +*SC92F8363B封装未引出的管脚:无 +*SC92F8362B封装未引出的管脚:P50/P51 +*SC92F8361B封装未引出的管脚:P50/P51 +******************************************/ +sbit P51 = P5^1; +sbit P50 = P5^0; + +/**************************************************************************** +*注意:封装未引出的管脚,需设置为强推挽输出模式 +*IC选型:请根据所使用的IC型号,在初始化完IO口后,调用相对应的未引出管脚的IO口配置; +*如若选择SC92F8363B,则不用调用宏定义。 +*****************************************************************************/ +#define SC92F8362B_NIO_Init() {P0CON|=0xC0,P1CON|=0xC0,P2CON|=0x0C,P5CON|=0x03;} //SC92F8362B的未引出来的IO口配置 +#define SC92F8361B_NIO_Init() {P0CON|=0xEC,P1CON|=0xC0,P2CON|=0x8C,P5CON|=0x03;} //SC92F8361B的未引出来的IO口配置 + +#endif \ No newline at end of file diff --git a/Keil_C/FWLib/SC92F_Lib/inc/SC92F837X_C.H b/Keil_C/FWLib/SC92F_Lib/inc/SC92F837X_C.H new file mode 100644 index 0000000..8da7e43 --- /dev/null +++ b/Keil_C/FWLib/SC92F_Lib/inc/SC92F837X_C.H @@ -0,0 +1,199 @@ + /*-------------------------------------------------------------------------- +SC92F837x_C.H + +C Header file for SC92F837x microcontroller. +Copyright (c) 2018 Shenzhen SinOne Chip Electronic CO., Ltd. +All rights reserved. +深圳市赛元微电子有限公司 +版本号: V1.0 +日期: 2019.03.06 +--------------------------------------------------------------------------*/ +#ifndef _SC92F837x_H_ +#define _SC92F837x_H_ + +/* ------------------- 字节寄存器-------------------- */ +///*CPU*/ +sfr ACC = 0xE0; //累加器A +sfr B = 0xF0; //通用寄存器B +sfr PSW = 0xD0; //程序状态字 +sfr DPH = 0x83; //数据指针高8位 +sfr DPL = 0x82; //数据指针低8位 +sfr SP = 0x81; //堆栈指针 + + +/*system*/ +sfr PCON = 0x87; //电源管理控制寄存器 + +/*interrupt*/ +sfr IP1 = 0XB9; //中断优先级控制寄存器1 +sfr IP = 0xB8; //中断优先权控制寄存器 +sfr IE = 0xA8; //中断控制寄存器 +sfr IE1 = 0XA9; //中断控制寄存器1 + +/*PORT*/ +sfr P2PH = 0xA2; //P2口模式控制寄存器 +sfr P2CON = 0xA1; //P2口模式控制寄存器 +sfr P2 = 0xA0; //P2口数据寄存器 +sfr P1PH = 0x92; //P1口模式控制寄存器 +sfr P1CON = 0x91; //P1口模式控制寄存器 +sfr P1 = 0x90; //P1口数据寄存器 +sfr P0PH = 0x9B; //P0口模式控制寄存器 +sfr P0CON = 0x9A; //P0口模式控制寄存器 +sfr P0 = 0x80; //P0口数据寄存器 +sfr IOHCON = 0x97; //IOH1设置寄存器 + +/*TIMER*/ +sfr TMCON = 0x8E; //定时器频率控制寄存器 +sfr TH1 = 0x8D; //定时器1高8位 +sfr TH0 = 0x8C; //定时器0高8位 +sfr TL1 = 0x8B; //定时器1低8位 +sfr TL0 = 0x8A; //定时器0低8位 +sfr TMOD = 0x89; //定时器工作模式寄存器 +sfr TCON = 0x88; //定时器控制寄存器 +sfr T2CON = 0xC8; //定时器2控制寄存器 +sfr RCAP2L = 0xCA; //定时器2重载/捕捉低8位 +sfr RCAP2H = 0xCB; //定时器2重载/捕捉高8位 +sfr TL2 = 0xCC; //定时器2低8位 +sfr TH2 = 0xCD; //定时器2高8位 + +/*PWM*/ +sfr PWMCFG = 0xD1; //PWM设置寄存器 +sfr PWMCON = 0xD2; //PWM控制寄存器 +sfr PWMPRD = 0xD3; //PWM周期设置寄存器 +sfr PWMDTY3 = 0xD4; //PWM3占空比设置寄存器 +sfr PWMDTY0 = 0xD5; //PWM0占空比设置寄存器 +sfr PWMDTY1 = 0xD6; //PWM1占空比设置寄存器 +sfr PWMDTY2 = 0xD7; //PWM2占空比设置寄存器 + +// +///*WatchDog*/ +sfr BTMCON = 0XCE; //低频定时器控制寄存器 +sfr WDTCON = 0xCF; //WDT控制寄存器 + + +/*LCD*/ +sfr OTCON = 0X8F; //LCD电压输出控制寄存器 + + +/*INT*/ +sfr INT0F = 0XBA; //INT0 下降沿中断控制寄存器 +sfr INT0R = 0XBB; //INT0 上降沿中断控制寄存器 +sfr INT2F = 0XC6; //INT2 下降沿中断控制寄存器 +sfr INT2R = 0XC7; //INT2 上降沿中断控制寄存器 + +/*IAP */ +sfr IAPCTL = 0xF6; //IAP控制寄存器 +sfr IAPDAT = 0xF5; //IAP数据寄存器 +sfr IAPADE = 0xF4; //IAP扩展地址寄存器 +sfr IAPADH = 0xF3; //IAP写入地址高位寄存器 +sfr IAPADL = 0xF2; //IAP写入地址低8位寄存器 +sfr IAPKEY = 0xF1; //IAP保护寄存器 + +/*SPI*/ +sfr SSCON0 = 0X9D; //SPI控制寄存器0 +sfr SSCON1 = 0X9E; //SPI控制寄存器1 +sfr SSCON2 = 0X95; //SPI控制寄存器2 +sfr SSDAT = 0X9F; //SPI数据寄存器 + +sfr OPINX = 0XFE; +sfr OPREG = 0XFF; + +/*Check Sum*/ +sfr CHKSUML = 0XFC; //Check Sum结果寄存器低位 +sfr CHKSUMH = 0XFD; //Check Sum结果寄存器高位 + +sfr OPERCON = 0xEF; //运算控制寄存器 + +///* ------------------- 位寄存器-------------------- */ +/*B*/ +/*TKCON*/ +/*ACC*/ +/*PSW*/ +sbit CY = PSW^7; //标志位 0:加法运算最高位无进位,或者减法运算最高位无借位时 1:加法运算最高位有进位,或者减法运算最高位有借位时 +sbit AC = PSW^6; //进位辅助标志位 0:无借位、进位 1:加法运算时在bit3位有进位,或减法运算在bit3位有借位时 +sbit F0 = PSW^5; //用户标志位 +sbit RS1 = PSW^4; //工作寄存器组选择位 +sbit RS0 = PSW^3; //工作寄存器组选择位 +sbit OV = PSW^2; //溢出标志位 +sbit F1 = PSW^1; //F1标志 +sbit P = PSW^0; //奇偶标志位 0:ACC中1的个数为偶数(包括0个) 1:ACC中1的个数为奇数 + +/*T2CON*/ +sbit TF2 = T2CON^7; +sbit EXF2 = T2CON^6; +sbit RCLK = T2CON^5; +sbit TCLK = T2CON^4; +sbit EXEN2 = T2CON^3; +sbit TR2 = T2CON^2; +sbit T2 = T2CON^1; +sbit CP = T2CON^0; + + +/*IP*/ +sbit IPT2 = IP^5; //Timer2中断优先控制位 0:设定 Timer2的中断优先权是 “低” 1:设定Timer2的中断优先权是 “高” +sbit IPT1 = IP^3; //Timer1中断优先控制位 0:设定 Timer 1的中断优先权是 “低” 1:设定 Timer 1的中断优先权是 “高” 1:设定INT1的中断优先权是 “高” +sbit IPT0 = IP^1; //Timer0中断优先控制位 0:设定 Timer 0的中断优先权是 “低” 1:设定 Timer 0的中断优先权是 “高” +sbit IPINT0 = IP^0; //INT0中断优先控制位 0:设定INT0中断优先权是 “低” 1:设定INT0的中断优先权是 “高” + +/*IE*/ +sbit EA = IE^7; //中断使能的总控制 0:关闭所有的中断 1:打开所有的中断 +sbit ET2 = IE^5; //Timer2中断使能控制 0:关闭Timer2中断 1:打开Timer2中断 +sbit ET1 = IE^3; //Timer1中断使能控制 0:关闭TIMER1中断 1:打开TIMER1中断 +sbit ET0 = IE^1; //Timer0中断使能控制 0:关闭TIMER0中断 1:打开TIMER0中断 +sbit EINT0 = IE^0; //INT0中断使能控制 0:关闭INT0中断 1:打开INT0中断 + +/*TCON*/ +sbit TF1 = TCON^7; //T1溢出中断请求标志位 T1产生溢出,发生中断时,硬件将TF1置为“1”,申请中断,CPU响应时,硬件清“0”。 +sbit TR1 = TCON^6; //定时器T1的运行控制位 0:Timer1禁止计数 1:Timer1开始计数 +sbit TF0 = TCON^5; //T0溢出中断请求标志位 T0产生溢出,发生中断时,硬件将TF0置为“1”,申请中断,CPU响应时,硬件清“0”。 +sbit TR0 = TCON^4; //定时器T0的运行控制位 0:Timer0禁止计数 1:Timer0开始计数 + +/******************* P0 ****************** +*SC92F8378封装未引出的管脚:P02/P03/P04/P05 +*SC92F8372封装未引出的管脚:无 +*SC92F8371封装未引出的管脚:P02/P03/P04 +*SC92F8370封装未引出的管脚:P00/P02/P03/P04/P05 +******************************************/ +sbit P05 = P0^5; +sbit P04 = P0^4; +sbit P03 = P0^3; +sbit P02 = P0^2; +sbit P01 = P0^1; +sbit P00 = P0^0; + +/******************* P1 ****************** +*SC92F8378封装未引出的管脚:P11/P15 +*SC92F8372封装未引出的管脚:无 +*SC92F8371封装未引出的管脚:无 +*SC92F8370封装未引出的管脚:P11/P14/P15 +******************************************/ +sbit P15 = P1^5; +sbit P14 = P1^4; +sbit P13 = P1^3; +sbit P12 = P1^2; +sbit P11 = P1^1; +sbit P10 = P1^0; + +/******************* P2 ****************** +*SC92F8378封装未引出的管脚:P24/P25/P26/P27 +*SC92F8372封装未引出的管脚:无 +*SC92F8371封装未引出的管脚:P27 +*SC92F8370封装未引出的管脚:P24/P25/P26/P27 +******************************************/ +sbit P27 = P2^7; +sbit P26 = P2^6; +sbit P25 = P2^5; +sbit P24 = P2^4; +sbit P21 = P2^1; +sbit P20 = P2^0; + +/**************************************************************************** +*注意:封装未引出的管脚,需设置为强推挽输出模式 +*IC选型:请根据所使用的IC型号,在初始化完IO口后,调用相对应的未引出管脚的IO口配置; +*如若选择SC92F8372,则不用调用宏定义。 +*****************************************************************************/ +#define SC92F8378_NIO_Init() {P0CON|=0x3C,P1CON|=0x22,P2CON|=0xF0;} //SC92F8378的未引出来的IO口配置 +#define SC92F8371_NIO_Init() {P0CON|=0x1C,P2CON|=0x80;} //SC92F8371的未引出来的IO口配置 +#define SC92F8370_NIO_Init() {P0CON|=0x3D,P1CON|=0x32,P2CON|=0xF0;} //SC92F8370的未引出来的IO口配置 + +#endif \ No newline at end of file diff --git a/Keil_C/FWLib/SC92F_Lib/inc/SC92F844xB_C.H b/Keil_C/FWLib/SC92F_Lib/inc/SC92F844xB_C.H new file mode 100644 index 0000000..0358107 --- /dev/null +++ b/Keil_C/FWLib/SC92F_Lib/inc/SC92F844xB_C.H @@ -0,0 +1,294 @@ +/*-------------------------------------------------------------------------- +SC92F844xB_C.H + +C Header file for SC92F844xB microcontroller. +Copyright (c) 2018 Shenzhen SinOne Chip Electronic CO., Ltd. +All rights reserved. +深圳市赛元微电子有限公司 +版本号: V1.0 +日期: 2018.09.04 +--------------------------------------------------------------------------*/ +#ifndef _SC92F844xB_H_ +#define _SC92F844xB_H_ + +/* ------------------- 字节寄存器-------------------- */ +///*CPU*/ +sfr ACC = 0xE0; //累加器A +sfr B = 0xF0; //通用寄存器B +sfr PSW = 0xD0; //程序状态字 +sfr DPH = 0x83; //数据指针高8位 +sfr DPL = 0x82; //数据指针低8位 +sfr SP = 0x81; //堆栈指针 + + +/*system*/ +sfr PCON = 0x87; //电源管理控制寄存器 + +/*interrupt*/ +sfr IP1 = 0XB9; //中断优先级控制寄存器1 +sfr IP = 0xB8; //中断优先权控制寄存器 +sfr IE = 0xA8; //中断控制寄存器 +sfr IE1 = 0XA9; //中断控制寄存器1 + +/*PORT*/ +sfr P5PH = 0xDA; //P5口模式控制寄存器 +sfr P5CON = 0xD9; //P5口模式控制寄存器 +sfr P5 = 0xD8; //P5口数据寄存器 +sfr P4PH = 0xC2; //P4口模式控制寄存器 +sfr P4CON = 0xC1; //P4口模式控制寄存器 +sfr P4 = 0xC0; //P4口数据寄存器 +sfr P3PH = 0xB2; //P3口模式控制寄存器 +sfr P3CON = 0xB1; //P3口模式控制寄存器 +sfr P3 = 0xB0; //P3口数据寄存器 +sfr P2PH = 0xA2; //P2口模式控制寄存器 +sfr P2CON = 0xA1; //P2口模式控制寄存器 +sfr P2 = 0xA0; //P2口数据寄存器 +sfr P1PH = 0x92; //P1口模式控制寄存器 +sfr P1CON = 0x91; //P1口模式控制寄存器 +sfr P1 = 0x90; //P1口数据寄存器 +sfr P0PH = 0x9B; //P0口模式控制寄存器 +sfr P0CON = 0x9A; //P0口模式控制寄存器 +sfr P0 = 0x80; //P0口数据寄存器 +sfr IOHCON0 = 0x96; //IOH0设置寄存器 +sfr IOHCON1 = 0x97; //IOH1设置寄存器 + +/*TIMER*/ +sfr TMCON = 0x8E; //定时器频率控制寄存器 +sfr TH1 = 0x8D; //定时器1高8位 +sfr TH0 = 0x8C; //定时器0高8位 +sfr TL1 = 0x8B; //定时器1低8位 +sfr TL0 = 0x8A; //定时器0低8位 +sfr TMOD = 0x89; //定时器工作模式寄存器 +sfr TCON = 0x88; //定时器控制寄存器 +sfr T2CON = 0xC8; //定时器2控制寄存器 +sfr T2MOD = 0xC9; //定时器2工作模式寄存器 +sfr RCAP2L = 0xCA; //定时器2重载/捕捉低8位 +sfr RCAP2H = 0xCB; //定时器2重载/捕捉高8位 +sfr TL2 = 0xCC; //定时器2低8位 +sfr TH2 = 0xCD; //定时器2高8位 + + +/*ADC*/ +sfr ADCCFG0 = 0xAB; //ADC功能配置寄存器0 +sfr ADCCFG1 = 0xAC; //ADC功能配置寄存器1 +sfr ADCCFG2 = 0XAA; //ADC功能配置寄存器2 +sfr ADCCON = 0XAD; //ADC控制寄存器 +sfr ADCVL = 0xAE; //ADC 结果寄存器 +sfr ADCVH = 0xAF; //ADC 结果寄存器 + +/*PWM*/ +sfr PWMCFG = 0xD4; //PWM设置寄存器 +sfr PWMCON = 0xD3; //PWM控制寄存器 + + +// +///*WatchDog*/ +sfr BTMCON = 0XCE; //低频定时器控制寄存器 +sfr WDTCON = 0xCF; //WDT控制寄存器 + + +/*LCD*/ +sfr OTCON = 0X8F; //LCD电压输出控制寄存器 +sfr P0VO = 0X9C; //P0 LCD Bais 输出寄存器 +sfr P1VO = 0X94; //P1 LCD Bais 输出寄存器 +sfr P2VO = 0XA3; //P2 LCD Bais 输出寄存器 +sfr P3VO = 0XB3; //P3 LCD Bais 输出寄存器 + +sfr DDRCON = 0X93; //显示驱动设置寄存器 + + +/*INT*/ +sfr INT0F = 0XBA; //INT0 下降沿中断控制寄存器 +sfr INT0R = 0XBB; //INT0 上降沿中断控制寄存器 +sfr INT1F = 0XBC; //INT1 下降沿中断控制寄存器 +sfr INT1R = 0XBD; //INT1 上降沿中断控制寄存器 +sfr INT2F = 0XC6; //INT2 下降沿中断控制寄存器 +sfr INT2R = 0XC7; //INT2 上降沿中断控制寄存器 + + +/*IAP */ +sfr IAPCTL = 0xF6; //IAP控制寄存器 +sfr IAPDAT = 0xF5; //IAP数据寄存器 +sfr IAPADE = 0xF4; //IAP扩展地址寄存器 +sfr IAPADH = 0xF3; //IAP写入地址高位寄存器 +sfr IAPADL = 0xF2; //IAP写入地址低8位寄存器 +sfr IAPKEY = 0xF1; //IAP保护寄存器 + +/*UART*/ +sfr SCON = 0X98; //串口控制寄存器 +sfr SBUF = 0X99; //串口数据缓存寄存器 + +/*SPI*/ +sfr SSCON0 = 0X9D; //SPI控制寄存器0 +sfr SSCON1 = 0X9E; //SPI控制寄存器1 +sfr SSCON2 = 0X95; //SPI控制寄存器2 +sfr SSDAT = 0X9F; //SPI数据寄存器 + +sfr OPINX = 0XFE; +sfr OPREG = 0XFF; +sfr EXADH = 0XF7; + +/*Check Sum*/ +sfr CHKSUML = 0XFC; //Check Sum结果寄存器低位 +sfr CHKSUMH = 0XFD; //Check Sum结果寄存器高位 + +/*模拟比较器*/ +sfr CMPCFG = 0XB6; //模拟比较器设置寄存器 +sfr CMPCON = 0XB7; //模拟比较器控制寄存器 + +/*乘除法器*/ +sfr EXA0 = 0xE9; //扩展累加器0 +sfr EXA1 = 0xEA; //扩展累加器1 +sfr EXA2 = 0xEB; //扩展累加器2 +sfr EXA3 = 0xEC; //扩展累加器3 +sfr EXBL = 0xED; //扩展B寄存器0 +sfr EXBH = 0xEE; //扩展B寄存器1 +sfr OPERCON = 0xEF; //运算控制寄存器 + +///* ------------------- 位寄存器-------------------- */ +/*PSW*/ +sbit CY = PSW^7; //标志位 0:加法运算最高位无进位,或者减法运算最高位无借位时 1:加法运算最高位有进位,或者减法运算最高位有借位时 +sbit AC = PSW^6; //进位辅助标志位 0:无借位、进位 1:加法运算时在bit3位有进位,或减法运算在bit3位有借位时 +sbit F0 = PSW^5; //用户标志位 +sbit RS1 = PSW^4; //工作寄存器组选择位 +sbit RS0 = PSW^3; //工作寄存器组选择位 +sbit OV = PSW^2; //溢出标志位 +sbit F1 = PSW^1; //F1标志 +sbit P = PSW^0; //奇偶标志位 0:ACC中1的个数为偶数(包括0个) 1:ACC中1的个数为奇数 + +/*T2CON*/ +sbit TF2 = T2CON^7; +sbit EXF2 = T2CON^6; +sbit RCLK = T2CON^5; +sbit CLK = T2CON^4; +sbit EXEN2 = T2CON^3; +sbit TR2 = T2CON^2; +sbit T2 = T2CON^1; +sbit CP = T2CON^0; + + +/*IP*/ +sbit IPADC = IP^6; //ADC中断优先控制位 0:设定 ADC的中断优先权是 “低” 1:设定 ADC的中断优先权是 “高” +sbit IPT2 = IP^5; //Timer2中断优先控制位 0:设定 Timer2的中断优先权是 “低” 1:设定Timer2的中断优先权是 “高” +sbit IPUART = IP^4; //UART中断优先控制位 0:设定UART的中断优先权是 “低” 1:设定UART的中断优先权是 “高” +sbit IPT1 = IP^3; //Timer1中断优先控制位 0:设定 Timer 1的中断优先权是 “低” 1:设定 Timer 1的中断优先权是 “高” +sbit IPINT1 = IP^2; //INT1中断优先控制位 0:设定INT1中断优先权是 “低” 1:设定INT1的中断优先权是 “高” +sbit IPT0 = IP^1; //Timer0中断优先控制位 0:设定 Timer 0的中断优先权是 “低” 1:设定 Timer 0的中断优先权是 “高” +sbit IPINT0 = IP^0; //INT0中断优先控制位 0:设定INT0中断优先权是 “低” 1:设定INT0的中断优先权是 “高” + +/*IE*/ +sbit EA = IE^7; //中断使能的总控制 0:关闭所有的中断 1:打开所有的中断 +sbit EADC = IE^6; //ADC中断使能控制 0:关闭ADC中断 1:打开ADC中断 +sbit ET2 = IE^5; //Timer2中断使能控制 0:关闭Timer2中断 1:打开Timer2中断 +sbit EUART = IE^4; //UART中断使能控制 0:关闭UART中断 1:打开UART中断 +sbit ET1 = IE^3; //Timer1中断使能控制 0:关闭TIMER1中断 1:打开TIMER1中断 +sbit EINT1 = IE^2; //INT1中断使能控制 0:关闭INT1中断 1:打开INT1中断 +sbit ET0 = IE^1; //Timer0中断使能控制 0:关闭TIMER0中断 1:打开TIMER0中断 +sbit EINT0 = IE^0; //INT0中断使能控制 0:关闭INT0中断 1:打开INT0中断 + +/*TCON*/ +sbit TF1 = TCON^7; //T1溢出中断请求标志位 T1产生溢出,发生中断时,硬件将TF1置为“1”,申请中断,CPU响应时,硬件清“0”。 +sbit TR1 = TCON^6; //定时器T1的运行控制位 0:Timer1禁止计数 1:Timer1开始计数 +sbit TF0 = TCON^5; //T0溢出中断请求标志位 T0产生溢出,发生中断时,硬件将TF0置为“1”,申请中断,CPU响应时,硬件清“0”。 +sbit TR0 = TCON^4; //定时器T0的运行控制位 0:Timer0禁止计数 1:Timer0开始计数 + +/*SCON*/ +sbit SM0 = SCON^7; +sbit SM1 = SCON^6; +sbit SM2 = SCON^5; +sbit REN = SCON^4; +sbit TB8 = SCON^3; +sbit RB8 = SCON^2; +sbit TI = SCON^1; +sbit RI = SCON^0; + +/******************* P0 ****************** +*SC92F8447B封装未引出的管脚:无 +*SC92F8446B封装未引出的管脚:无 +*SC92F8445B封装未引出的管脚:P00 +******************************************/ +sbit P07 = P0^7; +sbit P06 = P0^6; +sbit P05 = P0^5; +sbit P04 = P0^4; +sbit P03 = P0^3; +sbit P02 = P0^2; +sbit P01 = P0^1; +sbit P00 = P0^0; + +/******************* P1 ****************** +*SC92F8447B封装未引出的管脚:无 +*SC92F8446B封装未引出的管脚:无 +*SC92F8445B封装未引出的管脚:无 +******************************************/ +sbit P17 = P1^7; +sbit P16 = P1^6; +sbit P15 = P1^5; +sbit P14 = P1^4; +sbit P13 = P1^3; +sbit P12 = P1^2; +sbit P11 = P1^1; +sbit P10 = P1^0; + +/******************* P2 ****************** +*SC92F8447B封装未引出的管脚:无 +*SC92F8446B封装未引出的管脚:无 +*SC92F8445B封装未引出的管脚:无 +******************************************/ +sbit P27 = P2^7; +sbit P26 = P2^6; +sbit P25 = P2^5; +sbit P24 = P2^4; +sbit P23 = P2^3; +sbit P22 = P2^2; +sbit P21 = P2^1; +sbit P20 = P2^0; + +/******************* P3 ****************** +*SC92F8447B封装未引出的管脚:无 +*SC92F8446B封装未引出的管脚:无 +*SC92F8445B封装未引出的管脚:P3 +******************************************/ +sbit P37 = P3^7; +sbit P36 = P3^6; +sbit P35 = P3^5; +sbit P34 = P3^4; +sbit P33 = P3^3; +sbit P32 = P3^2; +sbit P31 = P3^1; +sbit P30 = P3^0; + +/******************* P4 ****************** +*SC92F8447B封装未引出的管脚:无 +*SC92F8446B封装未引出的管脚:P46/P47 +*SC92F8445B封装未引出的管脚:P40 +******************************************/ +sbit P47 = P4^7; +sbit P46 = P4^6; +sbit P45 = P4^5; +sbit P44 = P4^4; +sbit P43 = P4^3; +sbit P42 = P4^2; +sbit P41 = P4^1; +sbit P40 = P4^0; + +/******************* P5 ****************** +*SC92F8447B封装未引出的管脚:无 +*SC92F8446B封装未引出的管脚:P54/P55 +*SC92F8445B封装未引出的管脚:P5 +******************************************/ +sbit P55 = P5^5; +sbit P54 = P5^4; +sbit P53 = P5^3; +sbit P52 = P5^2; +sbit P51 = P5^1; +sbit P50 = P5^0; + +/**************************************************************************** +*注意:封装未引出的管脚,需设置为强推挽输出模式 +*IC选型:请根据所使用的IC型号,在初始化完IO口后,调用相对应的未引出管脚的IO口配置; +*如若选SC92F8447B,则不用调用宏定义。 +*****************************************************************************/ +#define SC92F8446B_NIO_Init() {P4CON|=0xC0,P5CON|=0x30;} //SC92F8546B的未引出来的IO口配置 +#define SC92F8445B_NIO_Init() {P0CON|=0x01,P3CON|=0xFF,P4CON|=0x01,P5CON|=0xFF;} //SC92F8545B的未引出来的IO口配置 +#endif \ No newline at end of file diff --git a/Keil_C/FWLib/SC92F_Lib/inc/SC92F846xB_C.H b/Keil_C/FWLib/SC92F_Lib/inc/SC92F846xB_C.H new file mode 100644 index 0000000..6b09632 --- /dev/null +++ b/Keil_C/FWLib/SC92F_Lib/inc/SC92F846xB_C.H @@ -0,0 +1,251 @@ + /*-------------------------------------------------------------------------- +SC92F846XB_C.H + +C Header file for SC92F846XB microcontroller. +Copyright (c) 2018 Shenzhen SinOne Chip Electronic CO., Ltd. +All rights reserved. +深圳市赛元微电子有限公司 +版本号: V2.0 +日期: 2018.08.24 +--------------------------------------------------------------------------*/ +#ifndef _SC92F846XB_H_ +#define _SC92F846XB_H_ + +/* ------------------- 字节寄存器-------------------- */ +///*CPU*/ +sfr ACC = 0xE0; //累加器A +sfr B = 0xF0; //通用寄存器B +sfr PSW = 0xD0; //程序状态字 +sfr DPH = 0x83; //数据指针高8位 +sfr DPL = 0x82; //数据指针低8位 +sfr SP = 0x81; //堆栈指针 + + +/*system*/ +sfr PCON = 0x87; //电源管理控制寄存器 + +/*interrupt*/ +sfr IP1 = 0XB9; //中断优先级控制寄存器1 +sfr IP = 0xB8; //中断优先权控制寄存器 +sfr IE = 0xA8; //中断控制寄存器 +sfr IE1 = 0XA9; //中断控制寄存器1 + +/*PORT*/ +sfr P5PH = 0xDA; //P5口模式控制寄存器 +sfr P5CON = 0xD9; //P5口模式控制寄存器 +sfr P5 = 0xD8; //P5口数据寄存器 +sfr P2PH = 0xA2; //P2口模式控制寄存器 +sfr P2CON = 0xA1; //P2口模式控制寄存器 +sfr P2 = 0xA0; //P2口数据寄存器 +sfr P1PH = 0x92; //P1口模式控制寄存器 +sfr P1CON = 0x91; //P1口模式控制寄存器 +sfr P1 = 0x90; //P1口数据寄存器 +sfr P0PH = 0x9B; //P0口模式控制寄存器 +sfr P0CON = 0x9A; //P0口模式控制寄存器 +sfr P0 = 0x80; //P0口数据寄存器 +sfr IOHCON = 0x97; //IOH设置寄存器 + +/*TIMER*/ +sfr TMCON = 0x8E; //定时器频率控制寄存器 +sfr TH1 = 0x8D; //定时器1高8位 +sfr TH0 = 0x8C; //定时器0高8位 +sfr TL1 = 0x8B; //定时器1低8位 +sfr TL0 = 0x8A; //定时器0低8位 +sfr TMOD = 0x89; //定时器工作模式寄存器 +sfr TCON = 0x88; //定时器控制寄存器 +sfr T2CON = 0xC8; //定时器2控制寄存器 +sfr T2MOD = 0xC9; //定时器2工作模式寄存器 +sfr RCAP2L = 0xCA; //定时器2重载/捕捉低8位 +sfr RCAP2H = 0xCB; //定时器2重载/捕捉高8位 +sfr TL2 = 0xCC; //定时器2低8位 +sfr TH2 = 0xCD; //定时器2高8位 + + +/*ADC*/ +sfr ADCCFG0 = 0xAB; //ADC功能配置寄存器0 +sfr ADCCFG1 = 0xAC; //ADC功能配置寄存器1 +sfr ADCCFG2 = 0XAA; //ADC功能配置寄存器2 +sfr ADCCON = 0XAD; //ADC控制寄存器 +sfr ADCVL = 0xAE; //ADC 结果寄存器 +sfr ADCVH = 0xAF; //ADC 结果寄存器 + +/*PWM*/ +sfr PWMCFG = 0xD1; //PWM设置寄存器 +sfr PWMCON = 0xD2; //PWM控制寄存器 +sfr PWMPRD = 0xD3; //PWM周期设置寄存器 +sfr PWMDTYA = 0xD4; //PWM占空比设置寄存器A +sfr PWMDTY0 = 0xD5; //PWM0设置寄存器 +sfr PWMDTY1 = 0xD6; //PWM1设置寄存器 +sfr PWMDTY2 = 0xD7; //PWM2设置寄存器 +sfr PWMDTYB = 0xDC; //PWM占空比设置寄存器B +sfr PWMDTY3 = 0xDD; //PWM3设置寄存器 +sfr PWMDTY4 = 0xDE; //PWM4设置寄存器 +sfr PWMDTY5 = 0xDF; //PWM5设置寄存器 + +///*WatchDog*/ +sfr BTMCON = 0XCE; //低频定时器控制寄存器 +sfr WDTCON = 0xCF; //WDT控制寄存器 + +/*LCD*/ +sfr OTCON = 0X8F; //LCD电压输出控制寄存器 +sfr P0VO = 0X9C; //P0 LCD Bais 输出寄存器 + +/*INT*/ +sfr INT0F = 0XBA; //INT0 下降沿中断控制寄存器 +sfr INT0R = 0XBB; //INT0 上降沿中断控制寄存器 +sfr INT1F = 0XBC; //INT1 下降沿中断控制寄存器 +sfr INT1R = 0XBD; //INT1 上降沿中断控制寄存器 +sfr INT2F = 0XC6; //INT2 下降沿中断控制寄存器 +sfr INT2R = 0XC7; //INT2 上降沿中断控制寄存器 + +/*IAP */ +sfr IAPCTL = 0xF6; //IAP控制寄存器 +sfr IAPDAT = 0xF5; //IAP数据寄存器 +sfr IAPADE = 0xF4; //IAP扩展地址寄存器 +sfr IAPADH = 0xF3; //IAP写入地址高位寄存器 +sfr IAPADL = 0xF2; //IAP写入地址低8位寄存器 +sfr IAPKEY = 0xF1; //IAP保护寄存器 + +/*uart*/ +sfr SCON = 0x98; //串口控制寄存器 +sfr SBUF = 0x99; //串口数据缓存寄存器 + +/*三合一*/ +sfr SSCON0 = 0X9D; //SPI控制寄存器0 +sfr SSCON1 = 0X9E; //SPI控制寄存器1 +sfr SSCON2 = 0X95; //SPI控制寄存器2 +sfr SSDAT = 0X9F; //SPI数据寄存器 + +sfr OPINX = 0XFE; +sfr OPREG = 0XFF; +sfr EXADH = 0XF7; + +/*Check Sum*/ +sfr CHKSUML = 0XFC; //Check Sum结果寄存器低位 +sfr CHKSUMH = 0XFD; //Check Sum结果寄存器高位 + +/*乘除法*/ +sfr EXA0 = 0xE9; //扩展累加器0 +sfr EXA1 = 0xEA; //扩展累加器1 +sfr EXA2 = 0xEB; //扩展累加器2 +sfr EXA3 = 0xEC; //扩展累加器3 +sfr EXBL = 0xED; //扩展B寄存器0 +sfr EXBH = 0xEE; //扩展B寄存器1 +sfr OPERCON = 0xEF; //运算控制寄存器 + +/* ------------------- 位寄存器-------------------- */ +/*PSW*/ +sbit CY = PSW^7; //标志位 0:加法运算最高位无进位,或者减法运算最高位无借位时 1:加法运算最高位有进位,或者减法运算最高位有借位时 +sbit AC = PSW^6; //进位辅助标志位 0:无借位、进位 1:加法运算时在bit3位有进位,或减法运算在bit3位有借位时 +sbit F0 = PSW^5; //用户标志位 +sbit RS1 = PSW^4; //工作寄存器组选择位 +sbit RS0 = PSW^3; //工作寄存器组选择位 +sbit OV = PSW^2; //溢出标志位 +sbit F1 = PSW^1; //F1标志 +sbit P = PSW^0; //奇偶标志位 0:ACC中1的个数为偶数(包括0个) 1:ACC中1的个数为奇数 + +/*T2CON*/ +sbit TF2 = T2CON^7; +sbit EXF2 = T2CON^6; +sbit RCLK = T2CON^5; +sbit TCLK = T2CON^4; +sbit EXEN2 = T2CON^3; +sbit TR2 = T2CON^2; +sbit T2 = T2CON^1; +sbit CP = T2CON^0; + + +/*IP*/ +sbit IPADC = IP^6; //ADC中断优先控制位 0:设定 ADC的中断优先权是 “低” 1:设定 ADC的中断优先权是 “高” +sbit IPT2 = IP^5; //Timer2中断优先控制位 0:设定 Timer2的中断优先权是 “低” 1:设定Timer2的中断优先权是 “高” +sbit IPUART = IP^4; //UART中断优先控制位 0:设定UART的中断优先权是 “低” 1:设定UART的中断优先权是 “高” +sbit IPT1 = IP^3; //Timer1中断优先控制位 0:设定 Timer 1的中断优先权是 “低” 1:设定 Timer 1的中断优先权是 “高” +sbit IPINT1 = IP^2; //INT1中断优先控制位 0:设定INT1中断优先权是 “低” 1:设定INT1的中断优先权是 “高” +sbit IPT0 = IP^1; //Timer0中断优先控制位 0:设定 Timer 0的中断优先权是 “低” 1:设定 Timer 0的中断优先权是 “高” +sbit IPINT0 = IP^0; //INT0中断优先控制位 0:设定INT0中断优先权是 “低” 1:设定INT0的中断优先权是 “高” + +/*IE*/ +sbit EA = IE^7; //中断使能的总控制 0:关闭所有的中断 1:打开所有的中断 +sbit EADC = IE^6; //ADC中断使能控制 0:关闭ADC中断 1:打开ADC中断 +sbit ET2 = IE^5; //Timer2中断使能控制 0:关闭Timer2中断 1:打开Timer2中断 +sbit EUART = IE^4; //UART中断使能控制 0:关闭UART中断 1:打开UART中断 +sbit ET1 = IE^3; //Timer1中断使能控制 0:关闭TIMER1中断 1:打开TIMER1中断 +sbit EINT1 = IE^2; //INT1中断使能控制 0:关闭INT1中断 1:打开INT1中断 +sbit ET0 = IE^1; //Timer0中断使能控制 0:关闭TIMER0中断 1:打开TIMER0中断 +sbit EINT0 = IE^0; //INT0中断使能控制 0:关闭INT0中断 1:打开INT0中断 + +/*TCON*/ +sbit TF1 = TCON^7; //T1溢出中断请求标志位 T1产生溢出,发生中断时,硬件将TF1置为“1”,申请中断,CPU响应时,硬件清“0”。 +sbit TR1 = TCON^6; //定时器T1的运行控制位 0:Timer1禁止计数 1:Timer1开始计数 +sbit TF0 = TCON^5; //T0溢出中断请求标志位 T0产生溢出,发生中断时,硬件将TF0置为“1”,申请中断,CPU响应时,硬件清“0”。 +sbit TR0 = TCON^4; //定时器T0的运行控制位 0:Timer0禁止计数 1:Timer0开始计数 + +/*SCON*/ +sbit SM0 = SCON^7; +sbit SM1 = SCON^6; +sbit SM2 = SCON^5; +sbit REN = SCON^4; +sbit TB8 = SCON^3; +sbit RB8 = SCON^2; +sbit TI = SCON^1; +sbit RI = SCON^0; + +/******************* P0 ****************** +*SC92F8463B封装未引出的管脚:无 +*SC92F8462B封装未引出的管脚:P06/P07 +*SC92F8461B封装未引出的管脚:P02/P03/P04/P06/P07 +******************************************/ +sbit P07 = P0^7; +sbit P06 = P0^6; +sbit P05 = P0^5; +sbit P04 = P0^4; +sbit P03 = P0^3; +sbit P02 = P0^2; +sbit P01 = P0^1; +sbit P00 = P0^0; + +/******************* P1 ****************** +*SC92F8463B封装未引出的管脚:无 +*SC92F8462B封装未引出的管脚:P16/P17 +*SC92F8461B封装未引出的管脚:P16/P17 +******************************************/ +sbit P17 = P1^7; +sbit P16 = P1^6; +sbit P15 = P1^5; +sbit P14 = P1^4; +sbit P13 = P1^3; +sbit P12 = P1^2; +sbit P11 = P1^1; +sbit P10 = P1^0; + +/******************* P2 ****************** +*SC92F8463B封装未引出的管脚:无 +*SC92F8462B封装未引出的管脚:P22/P23 +*SC92F8461B封装未引出的管脚:P22/P23/P27 +******************************************/ +sbit P27 = P2^7; +sbit P26 = P2^6; +sbit P25 = P2^5; +sbit P24 = P2^4; +sbit P23 = P2^3; +sbit P22 = P2^2; +sbit P21 = P2^1; +sbit P20 = P2^0; + +/******************* P5 ****************** +*SC92F8463B封装未引出的管脚:无 +*SC92F8462B封装未引出的管脚:P50/P51 +*SC92F8461B封装未引出的管脚:P50/P51 +******************************************/ +sbit P51 = P5^1; +sbit P50 = P5^0; + +/**************************************************************************** +*注意:封装未引出的管脚,需设置为强推挽输出模式 +*IC选型:请根据所使用的IC型号,在初始化完IO口后,调用相对应的未引出管脚的IO口配置; +*如若选择SC92F8463B,则不用调用宏定义。 +*****************************************************************************/ +#define SC92F8462B_NIO_Init() {P0CON|=0xC0,P1CON|=0xC0,P2CON|=0x0C,P5CON|=0x03;} //SC92F8462B的未引出来的IO口配置 +#define SC92F8461B_NIO_Init() {P0CON|=0xEC,P1CON|=0xC0,P2CON|=0x8C,P5CON|=0x03;} //SC92F8461B的未引出来的IO口配置 + +#endif \ No newline at end of file diff --git a/Keil_C/FWLib/SC92F_Lib/inc/SC92F848x_C.H b/Keil_C/FWLib/SC92F_Lib/inc/SC92F848x_C.H new file mode 100644 index 0000000..df073b7 --- /dev/null +++ b/Keil_C/FWLib/SC92F_Lib/inc/SC92F848x_C.H @@ -0,0 +1,254 @@ +/*-------------------------------------------------------------------------- +SC92F848x_C.H + +C Header file for SC92F848x microcontroller. +Copyright (c) 2021 Shenzhen SinOne Microelectronics Co., Ltd. +All rights reserved. +深圳市赛元微电子有限公司 +版本号: V1.2 +日期: 2021.07.14 +--------------------------------------------------------------------------*/ +#ifndef _SC92F848x_H_ +#define _SC92F848x_H_ + +///* ------------------- 字节寄存器-------------------- */ +/*CPU*/ +sfr ACC = 0XE0; //累加器A +sfr B = 0XF0; //B寄存器 +sfr PSW = 0XD0; //程序状态字寄存器 +sfr DPH = 0X83; //DPTR数据指针高位 +sfr DPL = 0X82; //DPTR数据指针低位 +sfr SP = 0X81; //堆栈指针 +sfr EXA0 = 0XE9; //扩展累加器0 +sfr EXA1 = 0XEA; //扩展累加器1 +sfr EXA2 = 0XEB; //扩展累加器2 +sfr EXA3 = 0XEC; //扩展累加器3 +sfr EXBL = 0XED; //扩展B寄存器0 +sfr EXBH = 0XEE; //扩展B寄存器1 + +/*SRAM*/ +sfr EXADH = 0XF7; //外部SRAM操作地址高位 + +/*system*/ +sfr PCON = 0X87; //电源管理控制寄存器 + +/*Interrupt*/ +sfr IP1 = 0XB9; //中断优先级控制寄存器1 +sfr IP = 0XB8; //中断优先权控制寄存器 +sfr IE = 0XA8; //中断控制寄存器 +sfr IE1 = 0XA9; //中断控制寄存器1 + +/*PORT*/ +sfr IOHCON = 0X97; //IOH设置寄存器 +sfr P5PH = 0XDA; //P5口上拉电阻控制寄存器 +sfr P5CON = 0XD9; //P5口输入/输出控制寄存器 +sfr P5 = 0XD8; //P5口数据寄存器 +sfr P2PH = 0XA2; //P2口上拉电阻控制寄存器 +sfr P2CON = 0XA1; //P2口输入/输出控制寄存器 +sfr P2 = 0XA0; //P2口数据寄存器 +sfr P1PH = 0X92; //P1口上拉电阻控制寄存器 +sfr P1CON = 0X91; //P1口输入/输出控制寄存器 +sfr P1 = 0X90; //P1口数据寄存器 +sfr P0PH = 0X9B; //P0口上拉电阻控制寄存器 +sfr P0VO = 0X9C; //P0口LCD电压输出寄存器 +sfr P0CON = 0X9A; //P0口输入/输出控制寄存器 +sfr P0 = 0X80; //P0口数据寄存器 + +/*TIMER*/ +sfr TMCON = 0X8E; //定时器频率控制寄存器 +sfr TH1 = 0X8D; //定时器1高8位 +sfr TH0 = 0X8C; //定时器0高8位 +sfr TL1 = 0X8B; //定时器1低8位 +sfr TL0 = 0X8A; //定时器0低8位 +sfr TMOD = 0X89; //定时器工作模式寄存器 +sfr TCON = 0X88; //定时器控制寄存器 +sfr T2CON = 0XC8; //定时器2控制寄存器 +sfr T2MOD = 0XC9; //定时器2工作模式寄存器 +sfr RCAP2L = 0XCA; //定时器2重载/捕捉低8位 +sfr RCAP2H = 0XCB; //定时器2重载/捕捉高8位 +sfr TL2 = 0XCC; //定时器2低8位 +sfr TH2 = 0XCD; //定时器2高8位 + +/*ADC*/ +sfr ADCCFG2 = 0XAA; //ADC设置寄存器2 +sfr ADCCFG1 = 0XAC; //ADC设置寄存器1 +sfr ADCCFG0 = 0XAB; //ADC设置寄存器0 +sfr ADCCON = 0XAD; //ADC控制寄存器 +sfr ADCVL = 0XAE; //ADC结果寄存器 +sfr ADCVH = 0XAF; //ADC结果寄存器 + +/*PWM*/ +sfr PWMCFG = 0XD1; //PWM设置寄存器 +sfr PWMCON = 0XD2; //PWM控制寄存器 +sfr PWMPRD = 0XD3; //PWM周期设置寄存器 +sfr PWMDTYA = 0XD4; //PWM占空比设置寄存器A +sfr PWMDTY0 = 0XD5; //PWM0设置寄存器 +sfr PWMDTY1 = 0XD6; //PWM1占空比设置寄存器 +sfr PWMDTY2 = 0XD7; //PWM2占空比设置寄存器 +sfr PWMDTYB = 0XDC; //PWM占空比设置寄存器B +sfr PWMDTY3 = 0XDD; //PWM3占空比设置寄存器/PWM死区时间配置寄存器 +sfr PWMDTY4 = 0XDE; //PWM4占空比设置寄存器 +sfr PWMDTY5 = 0XDF; //PWM5占空比设置寄存器 + +/*WatchDog*/ +sfr WDTCON = 0XCF; //WDT控制寄存器 + +/*BTM*/ +sfr BTMCON = 0XCE; //低频定时器控制寄存器 + +/*INT*/ +sfr INT0F = 0XBA; //INT0 下降沿中断控制寄存器 +sfr INT0R = 0XBB; //INT0 上降沿中断控制寄存器 +sfr INT1F = 0XBC; //INT1 下降沿中断控制寄存器 +sfr INT1R = 0XBD; //INT1 上降沿中断控制寄存器 +sfr INT2F = 0XC6; //INT2 下降沿中断控制寄存器 +sfr INT2R = 0XC7; //INT2 上降沿中断控制寄存器 + +/*IAP */ +sfr IAPCTL = 0XF6; //IAP控制寄存器 +sfr IAPDAT = 0XF5; //IAP数据寄存器 +sfr IAPADE = 0XF4; //IAP扩展地址寄存器 +sfr IAPADH = 0XF3; //IAP写入地址高位寄存器 +sfr IAPADL = 0XF2; //IAP写入地址低位寄存器 +sfr IAPKEY = 0XF1; //IAP保护寄存器 + +/*uart0*/ +sfr SCON = 0X98; //串口控制寄存器 +sfr SBUF = 0X99; //串口数据缓存寄存器 +sfr OTCON = 0X8F; //输出控制寄存器 + +/*三合一*/ +sfr SSCON0 = 0X9D; //USCI控制寄存器0 +sfr SSCON1 = 0X9E; //USCI控制寄存器1 +sfr SSCON2 = 0X95; //USCI控制寄存器2 +sfr SSDAT = 0X9F; //USCI数据寄存器3 + +/*OPTION*/ +sfr OPINX = 0XFE; //Customer Option指针 +sfr OPREG = 0XFF; //Customer Option寄存器 + +/*Check Sum*/ +sfr CHKSUML = 0XFC; //Check Sum结果寄存器低位 +sfr CHKSUMH = 0XFD; //Check Sum结果寄存器高位 +sfr OPERCON = 0XEF; //运算控制寄存器 + +///* ------------------- 位寄存器-------------------- */ +/*PSW*/ +sbit CY = PSW^7; //标志位 0:加法运算最高位无进位,或者减法运算最高位无借位时 1:加法运算最高位有进位,或者减法运算最高位有借位时 +sbit AC = PSW^6; //进位辅助标志位 0:无借位、进位 1:加法运算时在bit3位有进位,或减法运算在bit3位有借位时 +sbit F0 = PSW^5; //用户标志位 +sbit RS1 = PSW^4; //工作寄存器组选择位 +sbit RS0 = PSW^3; //工作寄存器组选择位 +sbit OV = PSW^2; //溢出标志位 +sbit F1 = PSW^1; //F1标志 +sbit P = PSW^0; //奇偶标志位 0:ACC中1的个数为偶数(包括0个) 1:ACC中1的个数为奇数 + +/*T2CON*/ +sbit TF2 = T2CON^7; //定时器2溢出标志位 +sbit EXF2 = T2CON^6; //T2EX引脚外部事件输入(下降沿)被检测到的标志位 +sbit RCLK = T2CON^5; //UART0接收时钟控制位 0: 定时器1产生接收波特率 1: 定时器2产生接收波特率 +sbit TCLK = T2CON^4; //UART0发送时钟控制位 0: 定时器1产生发送波特率 1: 定时器2产生发送波特率 +sbit EXEN2 = T2CON^3; //T2EX引脚上的外部事件输入(下降沿)用作重载/捕获触发器允许/禁止控制 +sbit TR2 = T2CON^2; //定时器2开始/停止控制位 0: 停止定时器2 1: 开始定时器2 +sbit T2 = T2CON^1; //定时器2定时器/计数器方式选定位2 +sbit CP = T2CON^0; //捕获/重载方式选定位 + +/*IP*/ +sbit IPADC = IP^6; //ADC中断优先权选择 0:设定 ADC的中断优先权是 “低” 1:设定 ADC的中断优先权是 “高” +sbit IPT2 = IP^5; //Timer2中断优先权选择 0:设定 Timer 2的中断优先权是 “低” 1:设定 Timer 2的中断优先权是 “高” +sbit IPUART = IP^4; //UART中断优先权选择 0:设定 UART的中断优先权是 “低” 1:设定 UART的中断优先权是 “高” +sbit IPT1 = IP^3; //Timer1中断优先权选择 0:设定 Timer 1的中断优先权是 “低” 1:设定 Timer 1的中断优先权是 “高” +sbit IPINT1 = IP^2; //INT1计数器中断优先权选择 0:设定 INT1的中断优先权是 “低” 1:设定 INT1的中断优先权是 “高” +sbit IPT0 = IP^1; //Timer0中断优先权选择 0:设定 Timer 0的中断优先权是 “低” 1:设定 Timer 0的中断优先权是 “高” +sbit IPINT0 = IP^0; //INT0计数器中断优先权选择 0:设定 INT0的中断优先权为 “低” 1: INT0中断优先权为高 + +/*IE*/ +sbit EA = IE^7; //中断使能的总控制 0:关闭所有的中断 1:打开所有的中断 +sbit EADC = IE^6; //ADC中断使能控制 0:关闭ADC中断 1:打开ADC中断 +sbit ET2 = IE^5; //Timer2中断使能控制 0:关闭TIMER2中断 1:打开TIMER2中断 +sbit EUART = IE^4; //UART中断使能控制 0:关闭SIF中断 1:打开SIF中断 +sbit ET1 = IE^3; //Timer1中断使能控制 0:关闭TIMER1中断 1:打开TIMER1中断 +sbit EINT1 = IE^2; //外部中断1中断使能控制 0:关闭外部中断1中断 1:打开外部中断1中断 +sbit ET0 = IE^1; //Timer0中断使能控制 0:关闭TIMER0中断 1:打开TIMER0中断 +sbit EINT0 = IE^0; //外部中断0中断使能控制 0:关闭外部中断0中断 1:打开外部中断0中断 + +/*TCON*/ +sbit TF1 = TCON^7; //T1溢出中断请求标志位 T1产生溢出,发生中断时,硬件将TF1置为“1”,申请中断,CPU响应时,硬件清“0”。 +sbit TR1 = TCON^6; //定时器T1的运行控制位 0:Timer1禁止计数 1:Timer1开始计数 +sbit TF0 = TCON^5; //T0溢出中断请求标志位 T0产生溢出,发生中断时,硬件将TF0置为“1”,申请中断,CPU响应时,硬件清“0”。 +sbit TR0 = TCON^4; //定时器T0的运行控制位 0:Timer0禁止计数 1:Timer0开始计数 + +/*SCON*/ +sbit SM0 = SCON^7; //串行通信模式控制位:与SM1配合使用 00: 模式0,8位半双工同步通信模式 01: 模式1,10位全双工异步通信 11: 模式3,11位全双工异步通信 +sbit SM1 = SCON^6; //串行通信模式控制位 +sbit SM2 = SCON^5; //串行通信模式控制位2,此控制位只对模式3有效 0:每收到一个完整数据帧就置位RI产生中断请求 1:收到一个完整的数据帧时,只有当RB8=1时才会置位RI产生中断请求 +sbit REN = SCON^4; //接收允许控制位 0:不允许接受数据 1:允许接受数据 +sbit TB8 = SCON^3; //只对模式3有效,为发送数据的第9位 +sbit RB8 = SCON^2; //只对模式3有效,为接收数据的第9位 +sbit TI = SCON^1; //发送中断标志位 +sbit RI = SCON^0; //接收中断标志位 + +/******************* P0 ****************** +*SC92F8483封装未引出的管脚:无 +*SC92F8482封装未引出的管脚:P06/P07 +*SC92F8481封装未引出的管脚:P02/P03/P04/P05/P06/P07 +*SC92F8480封装未引出的管脚:P0 +******************************************/ +sbit P07 = P0^7; +sbit P06 = P0^6; +sbit P05 = P0^5; +sbit P04 = P0^4; +sbit P03 = P0^3; +sbit P02 = P0^2; +sbit P01 = P0^1; +sbit P00 = P0^0; + +/******************* P1 ****************** +*SC92F8483封装未引出的管脚:无 +*SC92F8482封装未引出的管脚:P16/P17 +*SC92F8481封装未引出的管脚:P16/P17 +*SC92F8480封装未引出的管脚:P14/P15/P16/P17 +******************************************/ +sbit P17 = P1^7; +sbit P16 = P1^6; +sbit P15 = P1^5; +sbit P14 = P1^4; +sbit P13 = P1^3; +sbit P12 = P1^2; +sbit P11 = P1^1; +sbit P10 = P1^0; + +/******************* P2 ****************** +*SC92F8483封装未引出的管脚:无 +*SC92F8482封装未引出的管脚:P22/P23 +*SC92F8481封装未引出的管脚:P22/P23/P27 +*SC92F8480封装未引出的管脚:P22/P23/P25/P26/P27 +******************************************/ +sbit P27 = P2^7; +sbit P26 = P2^6; +sbit P25 = P2^5; +sbit P24 = P2^4; +sbit P23 = P2^3; +sbit P22 = P2^2; +sbit P21 = P2^1; +sbit P20 = P2^0; + +/******************* P5 ****************** +*SC92F8483封装未引出的管脚:无 +*SC92F8482封装未引出的管脚:P50/P51 +*SC92F8481封装未引出的管脚:P50/P51 +*SC92F8480封装未引出的管脚:P50/P51 +******************************************/ +sbit P51 = P5^1; +sbit P50 = P5^0; + +/**************************************************************************** +*注意:封装未引出的管脚,需设置为强推挽输出模式 +*IC选型:请根据所使用的IC型号,在初始化完IO口后,调用相对应的未引出管脚的IO口配置; +*如若选SC92F8483,则不用调用宏定义。 +*****************************************************************************/ +#define SC92F8482_NIO_Init() {P0CON|=0xC0,P1CON|=0xC0,P2CON|=0x0C,P5CON|=0x03;}//SC92F8482的未引出来的IO口配置 +#define SC92F8481_NIO_Init() {P0CON|=0xFC,P1CON|=0xC0,P2CON|=0x8C,P5CON|=0x03;}//SC92F8481的未引出来的IO口配置 +#define SC92F8480_NIO_Init() {P0CON|=0xFF,P1CON|=0xF0,P2CON|=0xEC,P5CON|=0x03;}//SC92F8480的未引出来的IO口配置 + +#endif \ No newline at end of file diff --git a/Keil_C/FWLib/SC92F_Lib/inc/SC92F84Ax_2_ASM.H b/Keil_C/FWLib/SC92F_Lib/inc/SC92F84Ax_2_ASM.H new file mode 100644 index 0000000..6a83914 --- /dev/null +++ b/Keil_C/FWLib/SC92F_Lib/inc/SC92F84Ax_2_ASM.H @@ -0,0 +1,294 @@ +/*-------------------------------------------------------------------------- +SC92F84Ax_ASM.H + +ASM Header file for SC92F84Ax microcontroller. +Copyright (c) 2020 Shenzhen SinOne Chip Electronic CO., Ltd. +All rights reserved. +深圳市赛元微电子有限公司 +版本号: V1.0 +日期: 2020.07.01 + + +--------------------------------------------------------------------------*/ +#ifndef _SC92F84Ax_ASM_H_ +#define _SC92F84Ax_ASM_H_ + +/* ------------------- 字节寄存器-------------------- */ +/*CPU*/ +ACC EQU 0xE0; //累加器A +B EQU 0xF0; //通用寄存器B +PSW EQU 0xD0; //程序状态字 +DPH EQU 0x83; //数据指针高8位 +DPL EQU 0x82; //数据指针低8位 +SP EQU 0x81; //堆栈指针 + +/*system*/ +PCON EQU 0x87; //电源管理控制寄存器 + +/*interrupt*/ +IP EQU 0xB8; //中断优先权控制寄存器 +IE EQU 0xA8; //中断控制寄存器 +IP1 EQU 0XB9; //中断优先级控制寄存器1 +IE1 EQU 0XA9; //中断控制寄存器1 + +/*PORT*/ +P5PH EQU 0xDA; //P5口模式控制寄存器 +P5CON EQU 0xD9; //P5口模式控制寄存器 +P5 EQU 0xD8; //P5口数据寄存器 +P4PH EQU 0xC2; //P4口模式控制寄存器 +P4CON EQU 0xC1; //P4口模式控制寄存器 +P4 EQU 0xC0; //P4口数据寄存器 +P3PH EQU 0xB2; //P3口模式控制寄存器 +P3CON EQU 0xB1; //P3口模式控制寄存器 +P3 EQU 0xB0; //P3口数据寄存器 +P2PH EQU 0xA2; //P2口模式控制寄存器 +P2CON EQU 0xA1; //P2口模式控制寄存器 +P2 EQU 0xA0; //P2口数据寄存器 +P1PH EQU 0x92; //P1口模式控制寄存器 +P1CON EQU 0x91; //P1口模式控制寄存器 +P1 EQU 0x90; //P1口数据寄存器 +P0PH EQU 0x9B; //P0口模式控制寄存器 +P0CON EQU 0x9A; //P0口模式控制寄存器 +P0 EQU 0x80; //P0口数据寄存器 +IOHCON0 EQU 0x96; //IOH0设置寄存器 +IOHCON1 EQU 0x97; //IOH1设置寄存器 + +/*TIMER*/ +TMCON EQU 0x8E; //定时器频率控制寄存器 +TH1 EQU 0x8D; //定时器1高8位 +TH0 EQU 0x8C; //定时器0高8位 +TL1 EQU 0x8B; //定时器1低8位 +TL0 EQU 0x8A; //定时器0低8位 +TMOD EQU 0x89; //定时器工作模式寄存器 +TCON EQU 0x88; //定时器控制寄存器 +T2CON EQU 0XC8; //定时器2控制寄存器 +T2MOD EQU 0XC9; //定时器2工作模式寄存器 +RCAP2L EQU 0XCA; //定时器2重载/捕捉低8位 +RCAP2H EQU 0XCB; //定时器2重载/捕捉高8位 +TL2 EQU 0XCC; //定时器2低8位 +TH2 EQU 0XCD; //定时器2高8位 + +/*ADC*/ +ADCCFG0 EQU 0xAB; //ADC功能配置寄存器0 +ADCCFG1 EQU 0xAC; //ADC功能配置寄存器1 +ADCCFG2 EQU 0xAA; //ADC功能配置寄存器2 +ADCCON EQU 0XAD; //ADC控制寄存器 +ADCVL EQU 0xAE; //ADC 结果寄存器 +ADCVH EQU 0xAF; //ADC 结果寄存器 + +/*PWM*/ +PWMCFG EQU 0xD4; //PWM设置寄存器 +PWMCON EQU 0xD3; //PWM控制寄存器 + +/*WatchDog*/ +BTMCON EQU 0XCE; //低频定时器控制寄存器 +WDTCON EQU 0xCF; //WDT控制寄存器 + +/*LCD*/ +OTCON EQU 0X8F; //LCD电压输出控制寄存器 +P0VO EQU 0X9C; //P0 LCD Bais 输出寄存器 +P1VO EQU 0X94; //P1 LCD Bais 输出寄存器 +P2VO EQU 0XA3; //P2 LCD Bais 输出寄存器 +P3VO EQU 0XB3; //P3 LCD Bais 输出寄存器 + +DDRCON EQU 0X93; //显示驱动设置寄存器 + +/*INT*/ +INT0F EQU 0XBA; //INT0 下降沿中断控制寄存器 +INT0R EQU 0XBB; //INT0 上降沿中断控制寄存器 +INT1F EQU 0XBC; //INT1 下降沿中断控制寄存器 +INT1R EQU 0XBD; //INT1 上降沿中断控制寄存器 +INT2F EQU 0XC6; //INT2 下降沿中断控制寄存器 +INT2R EQU 0XC7; //INT2 上降沿中断控制寄存器 + +/*IAP */ +IAPCTL EQU 0xF6; //IAP控制寄存器 +IAPDAT EQU 0xF5; //IAP数据寄存器 +IAPADE EQU 0xF4; //IAP扩展地址寄存器 +IAPADH EQU 0xF3; //IAP写入地址高位寄存器 +IAPADL EQU 0xF2; //IAP写入地址低8位寄存器 +IAPKEY EQU 0xF1; //IAP保护寄存器 + +/*uart*/ +SCON EQU 0x98; //串口控制寄存器 +SBUF EQU 0x99; //串口数据缓存寄存器 + +/*三合一*/ +SSCON0 EQU 0X9D; //SSI控制寄存器0 +SSCON1 EQU 0X9E; //SSI控制寄存器1 +SSCON2 EQU 0X95; //SSI控制寄存器2 +SSDAT EQU 0X9F; //SPI数据寄存器 + +OPINX EQU 0XFE; +OPREG EQU 0XFF; +EXADH EQU 0XF7; + +/*Check Sum*/ +CHKSUML EQU 0XFC; //Check Sum结果寄存器低位 +CHKSUMH EQU 0XFD; //Check Sum结果寄存器高位 + +/*乘除法*/ +EXA0 EQU 0xE9; //扩展累加器0 +EXA1 EQU 0xEA; //扩展累加器1 +EXA2 EQU 0xEB; //扩展累加器2 +EXA3 EQU 0xEC; //扩展累加器3 +EXBL EQU 0xED; //扩展B寄存器0 +EXBH EQU 0xEE; //扩展B寄存器1 +OPERCON EQU 0xEF; //运算控制寄存器 + +/* ------------------- 位寄存器-------------------- */ +/*PSW*/ +CY EQU PSW .7; //标志位 0:加法运算最高位无进位,或者减法运算最高位无借位时 1:加法运算最高位有进位,或者减法运算最高位有借位时 +AC EQU PSW .6; //进位辅助标志位 0:无借位、进位 1:加法运算时在bit3位有进位,或减法运算在bit3位有借位时 +F0 EQU PSW .5; //用户标志位 +RS1 EQU PSW .4; //工作寄存器组选择位 +RS0 EQU PSW .3; //工作寄存器组选择位 +OV EQU PSW .2; //溢出标志位 +F1 EQU PSW .1; //F1标志 +P EQU PSW .0; //奇偶标志位 0:ACC中1的个数为偶数(包括0个) 1:ACC中1的个数为奇数 + +/*T2CON*/ +TF2 EQU T2CON .7; +EXF2 EQU T2CON .6; +RCLK EQU T2CON .5; +TCLK EQU T2CON .4; +EXEN2 EQU T2CON .3; +TR2 EQU T2CON .2; +T2 EQU T2CON .1; +CP EQU T2CON .0; + +/*IP*/ +IPADC EQU IP .6; //ADC中断优先控制位 0:设定ADC的中断优先权是 “低” 1:设定ADC的中断优先权是 “高” +IPT2 EQU IP .5; //PWM中断优先控制位 0:设定PWM的中断优先权是 “低” 1:设定PWM 的中断优先权是 “高” +IPUART EQU IP .4; //Uart中断优先控制位 0:设定Uart的中断优先权是 “低” 1:设定Uart的中断优先权是 “高” +IPT1 EQU IP .3; //Timer1中断优先控制位 0:设定Timer1的中断优先权是 “低” 1:设定Timer1的中断优先权是 “高” +IPINT1 EQU IP .2; //INT1中断优先控制位 0:设定INT1中断优先权是 “低” 1:设定INT1中断优先权是 “高” +IPT0 EQU IP .1; //Timer0中断优先控制位 0:设定Timer0的中断优先权是 “低” 1:设定Timer0的中断优先权是 “高” +IPINT0 EQU IP .0; //INT0中断优先控制位 0:设定INT0中断优先权是 “低” 1:设定INT0中断优先权是 “高” + +/*IE*/ +EA EQU IE .7; //中断使能的总控制 0:关闭所有的中断 1:打开所有的中断 +EADC EQU IE .6; //ADC中断使能控制 0:关闭ADC中断 1:打开ADC中断 +ET2 EQU IE .5; //PWM中断使能控制 0:关闭PWM中断 1:打开PWM中断 +EUART EQU IE .4; //UART中断使能控制 0:关闭UART中断 1:打开UART中断 +ET1 EQU IE .3; //Timer1中断使能控制 0:关闭TIMER1中断 1:打开TIMER1中断 +EINT1 EQU IE .2; //INT1中断使能控制 0:关闭INT1中断 1:打开INT1中断 +ET0 EQU IE .1; //Timer0中断使能控制 0:关闭TIMER0中断 1:打开TIMER0中断 +EINT0 EQU IE .0; //INT0的中断使能控制 0:关闭INT0中断 1:打开INT0中断 + +/*TCON*/ +TF1 EQU TCON .7; //T1溢出中断请求标志位 T1产生溢出,发生中断时,硬件将TF1置为“1”,申请中断,CPU响应时,硬件清“0”。 +TR1 EQU TCON .6; //定时器T1的运行控制位 0:Timer1禁止计数 1:Timer1开始计数 +TF0 EQU TCON .5; //T0溢出中断请求标志位 T0产生溢出,发生中断时,硬件将TF0置为“1”,申请中断,CPU响应时,硬件清“0”。 +TR0 EQU TCON .4; //定时器T0的运行控制位 0:Timer0禁止计数 1:Timer0开始计数 +BITIE1 EQU TCON .3; //INT1溢出中断请求标志 +BITIE0 EQU TCON .1; //INT0溢出中断请求标志 + +/*SCON*/ +SM0 EQU SCON .7; +SM1 EQU SCON .6; +SM2 EQU SCON .5; +REN EQU SCON .4; +TB8 EQU SCON .3; +RB8 EQU SCON .2; +TI EQU SCON .1; +RI EQU SCON .0; + +/******************* P0 ****************** +*SC92F84A7封装未引出的管脚:无 +*SC92F84A6封装未引出的管脚:无 +*SC92F84A5封装未引出的管脚:P00 +******************************************/ +P07 EQU P0 .7; +P06 EQU P0 .6; +P05 EQU P0 .5; +P04 EQU P0 .4; +P03 EQU P0 .3; +P02 EQU P0 .2; +P01 EQU P0 .1; +P00 EQU P0 .0; + +/******************* P1 ****************** +*SC92F84A7封装未引出的管脚:无 +*SC92F84A6封装未引出的管脚:无 +*SC92F84A5封装未引出的管脚:无 +******************************************/ +P17 EQU P1 .7; +P16 EQU P1 .6; +P15 EQU P1 .5; +P14 EQU P1 .4; +P13 EQU P1 .3; +P12 EQU P1 .2; +P11 EQU P1 .1; +P10 EQU P1 .0; + +/******************* P2 ****************** +*SC92F84A7封装未引出的管脚:无 +*SC92F84A6封装未引出的管脚:无 +*SC92F84A5封装未引出的管脚:无 +******************************************/ +P27 EQU P2 .7; +P26 EQU P2 .6; +P25 EQU P2 .5; +P24 EQU P2 .4; +P23 EQU P2 .3; +P22 EQU P2 .2; +P21 EQU P2 .1; +P20 EQU P2 .0; + +/******************* P3 ****************** +*SC92F84A7封装未引出的管脚:无 +*SC92F84A6封装未引出的管脚:无 +*SC92F84A5封装未引出的管脚:P3 +******************************************/ +P37 EQU P3 .7; +P36 EQU P3 .6; +P35 EQU P3 .5; +P34 EQU P3 .4; +P33 EQU P3 .3; +P32 EQU P3 .2; +P31 EQU P3 .1; +P30 EQU P3 .0; + +/******************* P4 ****************** +*SC92F84A7封装未引出的管脚:无 +*SC92F84A6封装未引出的管脚:P46/P47 +*SC92F84A5封装未引出的管脚:P40 +******************************************/ +P47 EQU P4 .7; +P46 EQU P4 .6; +P45 EQU P4 .5; +P44 EQU P4 .4; +P43 EQU P4 .3; +P42 EQU P4 .2; +P41 EQU P4 .1; +P40 EQU P4 .0; + +/******************* P5 ****************** +*SC92F84A7封装未引出的管脚:无 +*SC92F84A6封装未引出的管脚:P54/P55 +*SC92F84A5封装未引出的管脚:P5 +******************************************/ +P55 EQU P5 .5; +P54 EQU P5 .4; +P53 EQU P5 .3; +P52 EQU P5 .2; +P51 EQU P5 .1; +P50 EQU P5 .0; + +/**************************************************************************** +*注意:封装未引出的管脚,需设置为强推挽输出模式 +*IC选型:请根据所使用的IC型号,在初始化完IO口后,调用相对应的未引出管脚的IO口配置; +*如若选择SC92F84A7,则不用调用宏定义。 +*****************************************************************************/ +SC92F84A6_NIO_Init MACRO IO //SC92F84A6未引出管脚的IO口配置 + ORL P4CON,#0XC0 + ORL P5CON,#0X30 + ENDM +SC92F84A5_NIO_Init MACRO IO //SC92F84A5未引出管脚的IO口配置 + ORL P0CON,#0X01 + ORL P3CON,#0XFF + ORL P4CON,#0X01 + ORL P5CON,#0X3F + ENDM +#endif diff --git a/Keil_C/FWLib/SC92F_Lib/inc/SC92F84Ax_2_C.H b/Keil_C/FWLib/SC92F_Lib/inc/SC92F84Ax_2_C.H new file mode 100644 index 0000000..ade8ddb --- /dev/null +++ b/Keil_C/FWLib/SC92F_Lib/inc/SC92F84Ax_2_C.H @@ -0,0 +1,296 @@ +/*-------------------------------------------------------------------------- +SC92F84Ax_C.H + +C Header file for SC92F84Ax microcontroller. +Copyright (c) 2020 Shenzhen SinOne Chip Electronic CO., Ltd. +All rights reserved. +深圳市赛元微电子有限公司 +版本号: V1.0 +日期: 2020.07.01 +--------------------------------------------------------------------------*/ +#ifndef _SC92F84Ax_H_ +#define _SC92F84Ax_H_ + +/* ------------------- 字节寄存器-------------------- */ +///*CPU*/ +sfr ACC = 0xE0; //累加器A +sfr B = 0xF0; //通用寄存器B +sfr PSW = 0xD0; //程序状态字 +sfr DPH = 0x83; //数据指针高8位 +sfr DPL = 0x82; //数据指针低8位 +sfr SP = 0x81; //堆栈指针 + + +/*system*/ +sfr PCON = 0x87; //电源管理控制寄存器 + +/*interrupt*/ +sfr IP1 = 0XB9; //中断优先级控制寄存器1 +sfr IP = 0xB8; //中断优先权控制寄存器 +sfr IE = 0xA8; //中断控制寄存器 +sfr IE1 = 0XA9; //中断控制寄存器1 + +/*PORT*/ +sfr P5PH = 0xDA; //P5口模式控制寄存器 +sfr P5CON = 0xD9; //P5口模式控制寄存器 +sfr P5 = 0xD8; //P5口数据寄存器 +sfr P4PH = 0xC2; //P4口模式控制寄存器 +sfr P4CON = 0xC1; //P4口模式控制寄存器 +sfr P4 = 0xC0; //P4口数据寄存器 +sfr P3PH = 0xB2; //P3口模式控制寄存器 +sfr P3CON = 0xB1; //P3口模式控制寄存器 +sfr P3 = 0xB0; //P3口数据寄存器 +sfr P2PH = 0xA2; //P2口模式控制寄存器 +sfr P2CON = 0xA1; //P2口模式控制寄存器 +sfr P2 = 0xA0; //P2口数据寄存器 +sfr P1PH = 0x92; //P1口模式控制寄存器 +sfr P1CON = 0x91; //P1口模式控制寄存器 +sfr P1 = 0x90; //P1口数据寄存器 +sfr P0PH = 0x9B; //P0口模式控制寄存器 +sfr P0CON = 0x9A; //P0口模式控制寄存器 +sfr P0 = 0x80; //P0口数据寄存器 +sfr IOHCON0 = 0x96; //IOH0设置寄存器 +sfr IOHCON1 = 0x97; //IOH1设置寄存器 + +/*TIMER*/ +sfr TMCON = 0x8E; //定时器频率控制寄存器 +sfr TH1 = 0x8D; //定时器1高8位 +sfr TH0 = 0x8C; //定时器0高8位 +sfr TL1 = 0x8B; //定时器1低8位 +sfr TL0 = 0x8A; //定时器0低8位 +sfr TMOD = 0x89; //定时器工作模式寄存器 +sfr TCON = 0x88; //定时器控制寄存器 +sfr T2CON = 0xC8; //定时器2控制寄存器 +sfr T2MOD = 0xC9; //定时器2工作模式寄存器 +sfr RCAP2L = 0xCA; //定时器2重载/捕捉低8位 +sfr RCAP2H = 0xCB; //定时器2重载/捕捉高8位 +sfr TL2 = 0xCC; //定时器2低8位 +sfr TH2 = 0xCD; //定时器2高8位 + + +/*ADC*/ +sfr ADCCFG0 = 0xAB; //ADC功能配置寄存器0 +sfr ADCCFG1 = 0xAC; //ADC功能配置寄存器1 +sfr ADCCFG2 = 0XAA; //ADC功能配置寄存器2 +sfr ADCCON = 0XAD; //ADC控制寄存器 +sfr ADCVL = 0xAE; //ADC 结果寄存器 +sfr ADCVH = 0xAF; //ADC 结果寄存器 + +/*PWM*/ +sfr PWMCFG = 0xD4; //PWM设置寄存器 +sfr PWMCON = 0xD3; //PWM控制寄存器 + + +// +//*WatchDog*/ +sfr BTMCON = 0XCE; //低频定时器控制寄存器 +sfr WDTCON = 0xCF; //WDT控制寄存器 + + +/*LCD*/ +sfr OTCON = 0X8F; //LCD电压输出控制寄存器 +sfr P0VO = 0X9C; //P0 LCD Bais 输出寄存器 +sfr P1VO = 0X94; //P1 LCD Bais 输出寄存器 +sfr P2VO = 0XA3; //P2 LCD Bais 输出寄存器 +sfr P3VO = 0XB3; //P3 LCD Bais 输出寄存器 + +sfr DDRCON = 0X93; //显示驱动设置寄存器 + + +/*INT*/ +sfr INT0F = 0XBA; //INT0 下降沿中断控制寄存器 +sfr INT0R = 0XBB; //INT0 上降沿中断控制寄存器 +sfr INT1F = 0XBC; //INT1 下降沿中断控制寄存器 +sfr INT1R = 0XBD; //INT1 上降沿中断控制寄存器 +sfr INT2F = 0XC6; //INT2 下降沿中断控制寄存器 +sfr INT2R = 0XC7; //INT2 上降沿中断控制寄存器 + + +/*IAP */ +sfr IAPCTL = 0xF6; //IAP控制寄存器 +sfr IAPDAT = 0xF5; //IAP数据寄存器 +sfr IAPADE = 0xF4; //IAP扩展地址寄存器 +sfr IAPADH = 0xF3; //IAP写入地址高位寄存器 +sfr IAPADL = 0xF2; //IAP写入地址低8位寄存器 +sfr IAPKEY = 0xF1; //IAP保护寄存器 + +/*UART*/ +sfr SCON = 0X98; //串口控制寄存器 +sfr SBUF = 0X99; //串口数据缓存寄存器 + +/*SPI*/ +sfr SSCON0 = 0X9D; //SPI控制寄存器0 +sfr SSCON1 = 0X9E; //SPI控制寄存器1 +sfr SSCON2 = 0X95; //SPI控制寄存器2 +sfr SSDAT = 0X9F; //SPI数据寄存器 + +sfr OPINX = 0XFE; +sfr OPREG = 0XFF; +sfr EXADH = 0XF7; + +/*Check Sum*/ +sfr CHKSUML = 0XFC; //Check Sum结果寄存器低位 +sfr CHKSUMH = 0XFD; //Check Sum结果寄存器高位 + +/*模拟比较器*/ +sfr CMPCFG = 0XB6; //模拟比较器设置寄存器 +sfr CMPCON = 0XB7; //模拟比较器控制寄存器 + +/*乘除法器*/ +sfr EXA0 = 0xE9; //扩展累加器0 +sfr EXA1 = 0xEA; //扩展累加器1 +sfr EXA2 = 0xEB; //扩展累加器2 +sfr EXA3 = 0xEC; //扩展累加器3 +sfr EXBL = 0xED; //扩展B寄存器0 +sfr EXBH = 0xEE; //扩展B寄存器1 +sfr OPERCON = 0xEF; //运算控制寄存器 + +/* ------------------- 位寄存器-------------------- */ +/*PSW*/ +sbit CY = PSW^7; //标志位 0:加法运算最高位无进位,或者减法运算最高位无借位时 1:加法运算最高位有进位,或者减法运算最高位有借位时 +sbit AC = PSW^6; //进位辅助标志位 0:无借位、进位 1:加法运算时在bit3位有进位,或减法运算在bit3位有借位时 +sbit F0 = PSW^5; //用户标志位 +sbit RS1 = PSW^4; //工作寄存器组选择位 +sbit RS0 = PSW^3; //工作寄存器组选择位 +sbit OV = PSW^2; //溢出标志位 +sbit F1 = PSW^1; //F1标志 +sbit P = PSW^0; //奇偶标志位 0:ACC中1的个数为偶数(包括0个) 1:ACC中1的个数为奇数 + +/*T2CON*/ +sbit TF2 = T2CON^7; +sbit EXF2 = T2CON^6; +sbit RCLK = T2CON^5; +sbit CLK = T2CON^4; +sbit EXEN2 = T2CON^3; +sbit TR2 = T2CON^2; +sbit T2 = T2CON^1; +sbit CP = T2CON^0; + + +/*IP*/ +sbit IPADC = IP^6; //ADC中断优先控制位 0:设定 ADC的中断优先权是 “低” 1:设定 ADC的中断优先权是 “高” +sbit IPT2 = IP^5; //Timer2中断优先控制位 0:设定 Timer2的中断优先权是 “低” 1:设定Timer2的中断优先权是 “高” +sbit IPUART = IP^4; //UART中断优先控制位 0:设定UART的中断优先权是 “低” 1:设定UART的中断优先权是 “高” +sbit IPT1 = IP^3; //Timer1中断优先控制位 0:设定 Timer 1的中断优先权是 “低” 1:设定 Timer 1的中断优先权是 “高” +sbit IPINT1 = IP^2; //INT1中断优先控制位 0:设定INT1中断优先权是 “低” 1:设定INT1的中断优先权是 “高” +sbit IPT0 = IP^1; //Timer0中断优先控制位 0:设定 Timer 0的中断优先权是 “低” 1:设定 Timer 0的中断优先权是 “高” +sbit IPINT0 = IP^0; //INT0中断优先控制位 0:设定INT0中断优先权是 “低” 1:设定INT0的中断优先权是 “高” + +/*IE*/ +sbit EA = IE^7; //中断使能的总控制 0:关闭所有的中断 1:打开所有的中断 +sbit EADC = IE^6; //ADC中断使能控制 0:关闭ADC中断 1:打开ADC中断 +sbit ET2 = IE^5; //Timer2中断使能控制 0:关闭Timer2中断 1:打开Timer2中断 +sbit EUART = IE^4; //UART中断使能控制 0:关闭UART中断 1:打开UART中断 +sbit ET1 = IE^3; //Timer1中断使能控制 0:关闭TIMER1中断 1:打开TIMER1中断 +sbit EINT1 = IE^2; //INT1中断使能控制 0:关闭INT1中断 1:打开INT1中断 +sbit ET0 = IE^1; //Timer0中断使能控制 0:关闭TIMER0中断 1:打开TIMER0中断 +sbit EINT0 = IE^0; //INT0中断使能控制 0:关闭INT0中断 1:打开INT0中断 + +/*TCON*/ +sbit TF1 = TCON^7; //T1溢出中断请求标志位 T1产生溢出,发生中断时,硬件将TF1置为“1”,申请中断,CPU响应时,硬件清“0”。 +sbit TR1 = TCON^6; //定时器T1的运行控制位 0:Timer1禁止计数 1:Timer1开始计数 +sbit TF0 = TCON^5; //T0溢出中断请求标志位 T0产生溢出,发生中断时,硬件将TF0置为“1”,申请中断,CPU响应时,硬件清“0”。 +sbit TR0 = TCON^4; //定时器T0的运行控制位 0:Timer0禁止计数 1:Timer0开始计数 +sbit BITIE1 = TCON^3; //INT1溢出中断请求标志 +sbit BITIE0 = TCON^1; //INT0溢出中断请求标志 + +/*SCON*/ +sbit SM0 = SCON^7; +sbit SM1 = SCON^6; +sbit SM2 = SCON^5; +sbit REN = SCON^4; +sbit TB8 = SCON^3; +sbit RB8 = SCON^2; +sbit TI = SCON^1; +sbit RI = SCON^0; + +/******************* P0 ****************** +*SC92F84A7封装未引出的管脚:无 +*SC92F84A6封装未引出的管脚:无 +*SC92F84A5封装未引出的管脚:P00 +******************************************/ +sbit P07 = P0^7; +sbit P06 = P0^6; +sbit P05 = P0^5; +sbit P04 = P0^4; +sbit P03 = P0^3; +sbit P02 = P0^2; +sbit P01 = P0^1; +sbit P00 = P0^0; + +/******************* P1 ****************** +*SC92F84A7封装未引出的管脚:无 +*SC92F84A6封装未引出的管脚:无 +*SC92F84A5封装未引出的管脚:无 +******************************************/ +sbit P17 = P1^7; +sbit P16 = P1^6; +sbit P15 = P1^5; +sbit P14 = P1^4; +sbit P13 = P1^3; +sbit P12 = P1^2; +sbit P11 = P1^1; +sbit P10 = P1^0; + +/******************* P2 ****************** +*SC92F84A7封装未引出的管脚:无 +*SC92F84A6封装未引出的管脚:无 +*SC92F84A5封装未引出的管脚:无 +******************************************/ +sbit P27 = P2^7; +sbit P26 = P2^6; +sbit P25 = P2^5; +sbit P24 = P2^4; +sbit P23 = P2^3; +sbit P22 = P2^2; +sbit P21 = P2^1; +sbit P20 = P2^0; + +/******************* P3 ****************** +*SC92F84A7封装未引出的管脚:无 +*SC92F84A6封装未引出的管脚:无 +*SC92F84A5封装未引出的管脚:P3 +******************************************/ +sbit P37 = P3^7; +sbit P36 = P3^6; +sbit P35 = P3^5; +sbit P34 = P3^4; +sbit P33 = P3^3; +sbit P32 = P3^2; +sbit P31 = P3^1; +sbit P30 = P3^0; + +/******************* P4 ****************** +*SC92F84A7封装未引出的管脚:无 +*SC92F84A6封装未引出的管脚:P46/P47 +*SC92F84A5封装未引出的管脚:P40 +******************************************/ +sbit P47 = P4^7; +sbit P46 = P4^6; +sbit P45 = P4^5; +sbit P44 = P4^4; +sbit P43 = P4^3; +sbit P42 = P4^2; +sbit P41 = P4^1; +sbit P40 = P4^0; + +/******************* P5 ****************** +*SC92F84A7封装未引出的管脚:无 +*SC92F84A6封装未引出的管脚:P54/P55 +*SC92F84A5封装未引出的管脚:P5 +******************************************/ +sbit P55 = P5^5; +sbit P54 = P5^4; +sbit P53 = P5^3; +sbit P52 = P5^2; +sbit P51 = P5^1; +sbit P50 = P5^0; + +/**************************************************************************** +*注意:封装未引出的管脚,需设置为强推挽输出模式 +*IC选型:请根据所使用的IC型号,在初始化完IO口后,调用相对应的未引出管脚的IO口配置; +*如若选SC92F84A7,则不用调用宏定义。 +*****************************************************************************/ +#define SC92F84A6_NIO_Init() {P4CON|=0xC0,P5CON|=0x30;} //SC92F84A6的未引出来的IO口配置 +#define SC92F84A5_NIO_Init() {P0CON|=0x01,P3CON|=0xFF,P4CON|=0x01,P5CON|=0x3F;} //SC92F84A5的未引出来的IO口配置 +#endif \ No newline at end of file diff --git a/Keil_C/FWLib/SC92F_Lib/inc/SC92F854x_C.H b/Keil_C/FWLib/SC92F_Lib/inc/SC92F854x_C.H new file mode 100644 index 0000000..1ca0703 --- /dev/null +++ b/Keil_C/FWLib/SC92F_Lib/inc/SC92F854x_C.H @@ -0,0 +1,320 @@ + /*-------------------------------------------------------------------------- +SC92F854X_C.H + +C Header file for SC92F854X microcontroller. +Copyright (c) 2018 Shenzhen SinOne Chip Electronic CO., Ltd. +All rights reserved. +深圳市赛元微电子有限公司 +版本号: V1.0 +日期: 2018.10.09 +--------------------------------------------------------------------------*/ +#ifndef _SC92F854X_H_ +#define _SC92F854X_H_ + +/* ------------------- 字节寄存器-------------------- */ +///*CPU*/ +sfr ACC = 0xE0; //累加器A +sfr B = 0xF0; //通用寄存器B +sfr PSW = 0xD0; //程序状态字 +sfr DPH = 0x83; //数据指针高8位 +sfr DPL = 0x82; //数据指针低8位 +sfr SP = 0x81; //堆栈指针 + + +/*system*/ +sfr PCON = 0x87; //电源管理控制寄存器 + +/*interrupt*/ +sfr IP1 = 0XB9; //中断优先级控制寄存器1 +sfr IP = 0xB8; //中断优先权控制寄存器 +sfr IE = 0xA8; //中断控制寄存器 +sfr IE1 = 0XA9; //中断控制寄存器1 + +/*PORT*/ +sfr P5PH = 0xDA; //P5口模式控制寄存器 +sfr P5CON = 0xD9; //P5口模式控制寄存器 +sfr P5 = 0xD8; //P5口数据寄存器 +sfr P4PH = 0xC2; //P4口模式控制寄存器 +sfr P4CON = 0xC1; //P4口模式控制寄存器 +sfr P4 = 0xC0; //P4口数据寄存器 +sfr P3PH = 0xB2; //P3口模式控制寄存器 +sfr P3CON = 0xB1; //P3口模式控制寄存器 +sfr P3 = 0xB0; //P3口数据寄存器 +sfr P2PH = 0xA2; //P2口模式控制寄存器 +sfr P2CON = 0xA1; //P2口模式控制寄存器 +sfr P2 = 0xA0; //P2口数据寄存器 +sfr P1PH = 0x92; //P1口模式控制寄存器 +sfr P1CON = 0x91; //P1口模式控制寄存器 +sfr P1 = 0x90; //P1口数据寄存器 +sfr P0PH = 0x9B; //P0口模式控制寄存器 +sfr P0CON = 0x9A; //P0口模式控制寄存器 +sfr P0 = 0x80; //P0口数据寄存器 +sfr IOHCON0 = 0x96; //IOH0设置寄存器 +sfr IOHCON1 = 0x97; //IOH1设置寄存器 + +/*TIMER*/ +sfr TMCON = 0x8E; //定时器频率控制寄存器 +sfr TH1 = 0x8D; //定时器1高8位 +sfr TH0 = 0x8C; //定时器0高8位 +sfr TL1 = 0x8B; //定时器1低8位 +sfr TL0 = 0x8A; //定时器0低8位 +sfr TMOD = 0x89; //定时器工作模式寄存器 +sfr TCON = 0x88; //定时器控制寄存器 +sfr T2CON = 0xC8; //定时器2控制寄存器 +sfr T2MOD = 0xC9; //定时器2工作模式寄存器 +sfr RCAP2L = 0xCA; //定时器2重载/捕捉低8位 +sfr RCAP2H = 0xCB; //定时器2重载/捕捉高8位 +sfr TL2 = 0xCC; //定时器2低8位 +sfr TH2 = 0xCD; //定时器2高8位 + + +/*ADC*/ +sfr ADCCFG0 = 0xAB; //ADC功能配置寄存器0 +sfr ADCCFG1 = 0xAC; //ADC功能配置寄存器1 +sfr ADCCFG2 = 0XAA; //ADC功能配置寄存器2 +sfr ADCCON = 0XAD; //ADC控制寄存器 +sfr ADCVL = 0xAE; //ADC 结果寄存器 +sfr ADCVH = 0xAF; //ADC 结果寄存器 + +/*PWM*/ +sfr PWMCFG = 0xD4; //PWM设置寄存器 +sfr PWMCON = 0xD3; //PWM设置寄存器 + + +// +///*WatchDog*/ +sfr BTMCON = 0XCE; //低频定时器控制寄存器 +sfr WDTCON = 0xCF; //WDT控制寄存器 + + +/*LCD*/ +sfr OTCON = 0X8F; //LCD电压输出控制寄存器 +sfr P0VO = 0X9C; //P0 LCD Bais 输出寄存器 +sfr P1VO = 0X94; //P1 LCD Bais 输出寄存器 +sfr P2VO = 0XA3; //P2 LCD Bais 输出寄存器 +sfr P3VO = 0XB3; //P3 LCD Bais 输出寄存器 + +sfr DDRCON = 0X93; //显示驱动设置寄存器 + + +/*INT*/ +sfr INT0F = 0XBA; //INT0 下降沿中断控制寄存器 +sfr INT0R = 0XBB; //INT0 上降沿中断控制寄存器 +sfr INT1F = 0XBC; //INT1 下降沿中断控制寄存器 +sfr INT1R = 0XBD; //INT1 上降沿中断控制寄存器 +sfr INT2F = 0XC6; //INT2 下降沿中断控制寄存器 +sfr INT2R = 0XC7; //INT2 上降沿中断控制寄存器 + +/*PGA*/ + + +/*IAP */ +sfr IAPCTL = 0xF6; //IAP控制寄存器 +sfr IAPDAT = 0xF5; //IAP数据寄存器 +sfr IAPADE = 0xF4; //IAP扩展地址寄存器 +sfr IAPADH = 0xF3; //IAP写入地址高位寄存器 +sfr IAPADL = 0xF2; //IAP写入地址低8位寄存器 +sfr IAPKEY = 0xF1; //IAP保护寄存器 + +/*UART*/ +sfr SCON = 0X98; //串口控制寄存器 +sfr SBUF = 0X99; //串口数据缓存寄存器 + +/*SPI*/ +sfr SSCON0 = 0X9D; //SPI控制寄存器0 +sfr SSCON1 = 0X9E; //SPI控制寄存器1 +sfr SSCON2 = 0X95; //SPI控制寄存器2 +sfr SSDAT = 0X9F; //SPI数据寄存器 + +sfr OPINX = 0XFE; +sfr OPREG = 0XFF; +sfr EXADH = 0XF7; + +/*Check Sum*/ +sfr CHKSUML = 0XFC; //Check Sum结果寄存器低位 +sfr CHKSUMH = 0XFD; //Check Sum结果寄存器高位 + +/*模拟比较器*/ +sfr CMPCFG = 0XB6; //模拟比较器设置寄存器 +sfr CMPCON = 0XB7; //模拟比较器控制寄存器 + +/*乘除法器*/ +sfr EXA0 = 0xE9; //扩展累加器0 +sfr EXA1 = 0xEA; //扩展累加器1 +sfr EXA2 = 0xEB; //扩展累加器2 +sfr EXA3 = 0xEC; //扩展累加器3 +sfr EXBL = 0xED; //扩展B寄存器0 +sfr EXBH = 0xEE; //扩展B寄存器1 +sfr OPERCON = 0xEF; //运算控制寄存器 + +///* ------------------- 位寄存器-------------------- */ +/*B*/ +/*TKCON*/ +/*ACC*/ +/*PSW*/ +sbit CY = PSW^7; //标志位 0:加法运算最高位无进位,或者减法运算最高位无借位时 1:加法运算最高位有进位,或者减法运算最高位有借位时 +sbit AC = PSW^6; //进位辅助标志位 0:无借位、进位 1:加法运算时在bit3位有进位,或减法运算在bit3位有借位时 +sbit F0 = PSW^5; //用户标志位 +sbit RS1 = PSW^4; //工作寄存器组选择位 +sbit RS0 = PSW^3; //工作寄存器组选择位 +sbit OV = PSW^2; //溢出标志位 +sbit F1 = PSW^1; //F1标志 +sbit P = PSW^0; //奇偶标志位 0:ACC中1的个数为偶数(包括0个) 1:ACC中1的个数为奇数 + +/*T2CON*/ +sbit TF2 = T2CON^7; +sbit EXF2 = T2CON^6; +sbit RCLK = T2CON^5; +sbit CLK = T2CON^4; +sbit EXEN2 = T2CON^3; +sbit TR2 = T2CON^2; +sbit T2 = T2CON^1; +sbit CP = T2CON^0; + + +/*IP*/ +sbit IPADC = IP^6; //ADC中断优先控制位 0:设定 ADC的中断优先权是 “低” 1:设定 ADC的中断优先权是 “高” +sbit IPT2 = IP^5; //Timer2中断优先控制位 0:设定 Timer2的中断优先权是 “低” 1:设定Timer2的中断优先权是 “高” +sbit IPUART = IP^4; //UART中断优先控制位 0:设定UART的中断优先权是 “低” 1:设定UART的中断优先权是 “高” +sbit IPT1 = IP^3; //Timer1中断优先控制位 0:设定 Timer 1的中断优先权是 “低” 1:设定 Timer 1的中断优先权是 “高” +sbit IPINT1 = IP^2; //INT1中断优先控制位 0:设定INT1中断优先权是 “低” 1:设定INT1的中断优先权是 “高” +sbit IPT0 = IP^1; //Timer0中断优先控制位 0:设定 Timer 0的中断优先权是 “低” 1:设定 Timer 0的中断优先权是 “高” +sbit IPINT0 = IP^0; //INT0中断优先控制位 0:设定INT0中断优先权是 “低” 1:设定INT0的中断优先权是 “高” + +/*IE*/ +sbit EA = IE^7; //中断使能的总控制 0:关闭所有的中断 1:打开所有的中断 +sbit EADC = IE^6; //ADC中断使能控制 0:关闭ADC中断 1:打开ADC中断 +sbit ET2 = IE^5; //Timer2中断使能控制 0:关闭Timer2中断 1:打开Timer2中断 +sbit EUART = IE^4; //UART中断使能控制 0:关闭UART中断 1:打开UART中断 +sbit ET1 = IE^3; //Timer1中断使能控制 0:关闭TIMER1中断 1:打开TIMER1中断 +sbit EINT1 = IE^2; //INT1中断使能控制 0:关闭INT1中断 1:打开INT1中断 +sbit ET0 = IE^1; //Timer0中断使能控制 0:关闭TIMER0中断 1:打开TIMER0中断 +sbit EINT0 = IE^0; //INT0中断使能控制 0:关闭INT0中断 1:打开INT0中断 + +/*TCON*/ +sbit TF1 = TCON^7; //T1溢出中断请求标志位 T1产生溢出,发生中断时,硬件将TF1置为“1”,申请中断,CPU响应时,硬件清“0”。 +sbit TR1 = TCON^6; //定时器T1的运行控制位 0:Timer1禁止计数 1:Timer1开始计数 +sbit TF0 = TCON^5; //T0溢出中断请求标志位 T0产生溢出,发生中断时,硬件将TF0置为“1”,申请中断,CPU响应时,硬件清“0”。 +sbit TR0 = TCON^4; //定时器T0的运行控制位 0:Timer0禁止计数 1:Timer0开始计数 + +/*SCON*/ +sbit SM0 = SCON^7; +sbit SM1 = SCON^6; +sbit SM2 = SCON^5; +sbit REN = SCON^4; +sbit TB8 = SCON^3; +sbit RB8 = SCON^2; +sbit TI = SCON^1; +sbit RI = SCON^0; + +/******************* P0 ****************** +*SC92F8547封装未引出的管脚:无 +*SC92F8546封装未引出的管脚:无 +*SC92F8545封装未引出的管脚:P00 +*SC92F8543封装未引出的管脚:P00/P01 +*SC92F8542封装未引出的管脚:P00/P01/P04/P05 +*SC92F8541封装未引出的管脚:P00/P01/P04/P05/P06 +******************************************/ +sbit P07 = P0^7; +sbit P06 = P0^6; +sbit P05 = P0^5; +sbit P04 = P0^4; +sbit P03 = P0^3; +sbit P02 = P0^2; +sbit P01 = P0^1; +sbit P00 = P0^0; + +/******************* P1 ****************** +*SC92F8547封装未引出的管脚:无 +*SC92F8546封装未引出的管脚:无 +*SC92F8545封装未引出的管脚:无 +*SC92F8543封装未引出的管脚:P10/P14/P15/P16/P17 +*SC92F8542封装未引出的管脚:P14/P15/P16/P17 +*SC92F8541封装未引出的管脚:P10/P16/P17 +******************************************/ +sbit P17 = P1^7; +sbit P16 = P1^6; +sbit P15 = P1^5; +sbit P14 = P1^4; +sbit P13 = P1^3; +sbit P12 = P1^2; +sbit P11 = P1^1; +sbit P10 = P1^0; + +/******************* P2 ****************** +*SC92F8547封装未引出的管脚:无 +*SC92F8546封装未引出的管脚:无 +*SC92F8545封装未引出的管脚:无 +*SC92F8543封装未引出的管脚:P26/P27 +*SC92F8542封装未引出的管脚:P26/P27 +*SC92F8541封装未引出的管脚:P24/P25/P26/P27 +******************************************/ +sbit P27 = P2^7; +sbit P26 = P2^6; +sbit P25 = P2^5; +sbit P24 = P2^4; +sbit P23 = P2^3; +sbit P22 = P2^2; +sbit P21 = P2^1; +sbit P20 = P2^0; + +/******************* P3 ****************** +*SC92F8547封装未引出的管脚:无 +*SC92F8546封装未引出的管脚:无 +*SC92F8545封装未引出的管脚:P3 +*SC92F8543封装未引出的管脚:无 +*SC92F8542封装未引出的管脚:P3 +*SC92F8541封装未引出的管脚:P30/P31/P32/P33/P34/P35 +******************************************/ +sbit P37 = P3^7; +sbit P36 = P3^6; +sbit P35 = P3^5; +sbit P34 = P3^4; +sbit P33 = P3^3; +sbit P32 = P3^2; +sbit P31 = P3^1; +sbit P30 = P3^0; + +/******************* P4 ****************** +*SC92F8547封装未引出的管脚:无 +*SC92F8546封装未引出的管脚:P46/P47 +*SC92F8545封装未引出的管脚:P40 +*SC92F8543封装未引出的管脚:P40/P44/P45/P46/P47 +*SC92F8542封装未引出的管脚:P44/P45/P46/P47 +*SC92F8541封装未引出的管脚:P4 +******************************************/ +sbit P47 = P4^7; +sbit P46 = P4^6; +sbit P45 = P4^5; +sbit P44 = P4^4; +sbit P43 = P4^3; +sbit P42 = P4^2; +sbit P41 = P4^1; +sbit P40 = P4^0; + +/******************* P5 ****************** +*SC92F8547封装未引出的管脚:无 +*SC92F8546封装未引出的管脚:P54/P55 +*SC92F8545封装未引出的管脚:P5 +*SC92F8543封装未引出的管脚:P5 +*SC92F8542封装未引出的管脚:P5 +*SC92F8541封装未引出的管脚:P5 +******************************************/ +sbit P55 = P5^5; +sbit P54 = P5^4; +sbit P53 = P5^3; +sbit P52 = P5^2; +sbit P51 = P5^1; +sbit P50 = P5^0; + +/**************************************************************************** +*注意:封装未引出的管脚,需设置为强推挽输出模式 +*IC选型:请根据所使用的IC型号,在初始化完IO口后,调用相对应的未引出管脚的IO口配置; +*如若选择SC92F8547,则不用调用宏定义。 +*****************************************************************************/ +#define SC92F8546_NIO_Init() {P4CON|=0xC0,P5CON|=0x30;} //SC92F8546的未引出来的IO口配置 +#define SC92F8545_NIO_Init() {P0CON|=0x01,P3CON|=0xFF,P4CON|=0x01,P5CON|=0xFF;} //SC92F8545的未引出来的IO口配置 +#define SC92F8543_NIO_Init() {P0CON|=0x03,P1CON|=0xF1,P2CON|=0xC0,P4CON|=0xF1,P5CON|=0xFF;} //SC92F8543的未引出来的IO口配置 +#define SC92F8542_NIO_Init() {P0CON|=0x33,P1CON|=0xF0,P2CON|=0xC0,P3CON|=0xFF,P4CON|=0xF0,P5CON|=0xFF;} //SC92F8542的未引出来的IO口配置 +#define SC92F8541_NIO_Init() {P0CON|=0x73,P1CON|=0xC1,P2CON|=0xF0,P3CON|=0x3F,P4CON|=0xFF,P5CON|=0xFF;} //SC92F8541的未引出来的IO口配置 +#endif \ No newline at end of file diff --git a/Keil_C/FWLib/SC92F_Lib/inc/SC92F859x_C.H b/Keil_C/FWLib/SC92F_Lib/inc/SC92F859x_C.H new file mode 100644 index 0000000..5ab2301 --- /dev/null +++ b/Keil_C/FWLib/SC92F_Lib/inc/SC92F859x_C.H @@ -0,0 +1,297 @@ +/*-------------------------------------------------------------------------- +SC92F859x_C.H + +C Header file for SC92F859x microcontroller. +Copyright (c) 2021 Shenzhen SinOne Microelectronics Co., Ltd. +All rights reserved. +深圳市赛元微电子有限公司 +版本号: V1.1 +日期: 2021.10.22 +--------------------------------------------------------------------------*/ +#ifndef _SC92F859x_H_ +#define _SC92F859x_H_ + +///* ------------------- 字节寄存器-------------------- */ +/*CPU*/ +sfr SP = 0X81; //堆栈指针 +sfr DPL = 0X82; //DPTR数据指针低位 +sfr DPH = 0X83; //DPTR数据指针高位 +sfr PSW = 0XD0; //程序状态字寄存器 +sfr ACC = 0XE0; //累加器A +sfr EXA0 = 0XE9; //扩展累加器0 +sfr EXA1 = 0XEA; //扩展累加器1 +sfr EXA2 = 0XEB; //扩展累加器2 +sfr EXA3 = 0XEC; //扩展累加器3 +sfr EXBL = 0XED; //扩展B寄存器0 +sfr EXBH = 0XEE; //扩展B寄存器1 +sfr B = 0XF0; //B寄存器 + +/*SRAM*/ +sfr EXADH = 0XF7; //外部SRAM操作地址高位 + +/*system*/ +sfr PCON = 0X87; //电源管理控制寄存器 + +/*Interrupt*/ +sfr IE = 0XA8; //中断控制寄存器 +sfr IE1 = 0XA9; //中断控制寄存器1 +sfr IP = 0XB8; //中断优先权控制寄存器 +sfr IP1 = 0XB9; //中断优先级控制寄存器1 + +/*PORT*/ +sfr P0 = 0X80; //P0口数据寄存器 +sfr P1 = 0X90; //P1口数据寄存器 +sfr P1CON = 0X91; //P1口输入/输出控制寄存器 +sfr P1PH = 0X92; //P1口上拉电阻控制寄存器 +sfr DDRCON = 0X93; //显示驱动控制寄存器 +sfr P1VO = 0X94; //P1口显示驱动输出寄存器 +sfr IOHCON0 = 0X96; //IOH设置寄存器0 +sfr IOHCON1 = 0X97; //IOH设置寄存器1 +sfr P0CON = 0X9A; //P0口输入/输出控制寄存器 +sfr P0PH = 0X9B; //P0口上拉电阻控制寄存器 +sfr P0VO = 0X9C; //P0口LCD电压输出寄存器 +sfr P2 = 0XA0; //P2口数据寄存器 +sfr P2CON = 0XA1; //P2口输入/输出控制寄存器 +sfr P2PH = 0XA2; //P2口上拉电阻控制寄存器 +sfr P2VO = 0XA3; //P2口显示驱动输出寄存器 +sfr P3 = 0XB0; //P3口数据寄存器 +sfr P3CON = 0XB1; //P3口输入/输出控制寄存器 +sfr P3PH = 0XB2; //P3口上拉电阻控制寄存器 +sfr P3VO = 0XB3; //P3口显示驱动输出寄存器 +sfr P4 = 0XC0; //P4口数据寄存器 +sfr P4CON = 0XC1; //P4口输入/输出控制寄存器 +sfr P4PH = 0XC2; //P4口上拉电阻控制寄存器 +sfr P5 = 0XD8; //P5口数据寄存器 +sfr P5CON = 0XD9; //P5口输入/输出控制寄存器 +sfr P5PH = 0XDA; //P5口上拉电阻控制寄存器 + +/*模拟比较器*/ +sfr CMPCFG = 0XB6; //模拟比较器设置寄存器 +sfr CMPCON = 0XB7; //模拟比较器控制寄存器 + +/*TIMER*/ +sfr TCON = 0X88; //定时器控制寄存器 +sfr TMOD = 0X89; //定时器工作模式寄存器 +sfr TL0 = 0X8A; //定时器0低8位 +sfr TL1 = 0X8B; //定时器1低8位 +sfr TH0 = 0X8C; //定时器0高8位 +sfr TH1 = 0X8D; //定时器1高8位 +sfr TMCON = 0X8E; //定时器频率控制寄存器 +sfr T2CON = 0XC8; //定时器2控制寄存器 +sfr T2MOD = 0XC9; //定时器2工作模式寄存器 +sfr RCAP2L = 0XCA; //定时器2重载/捕捉低8位 +sfr RCAP2H = 0XCB; //定时器2重载/捕捉高8位 +sfr TL2 = 0XCC; //定时器2低8位 +sfr TH2 = 0XCD; //定时器2高8位 + +/*ADC*/ +sfr ADCCFG2 = 0XAA; //ADC设置寄存器2 +sfr ADCCFG0 = 0XAB; //ADC设置寄存器0 +sfr ADCCFG1 = 0XAC; //ADC设置寄存器1 +sfr ADCCON = 0XAD; //ADC控制寄存器 +sfr ADCVL = 0XAE; //ADC结果寄存器 +sfr ADCVH = 0XAF; //ADC结果寄存器 + +/*PWM*/ +sfr PWMCON = 0XD3; //PWM0控制寄存器0 +sfr PWMCFG = 0XD4; //PWM设置寄存器 + +/*WatchDog*/ +sfr WDTCON = 0XCF; //WDT控制寄存器 + +/*BTM*/ +sfr BTMCON = 0XCE; //低频定时器控制寄存器 + +/*INT*/ +sfr INT0F = 0XBA; //INT0 下降沿中断控制寄存器 +sfr INT0R = 0XBB; //INT0 上降沿中断控制寄存器 +sfr INT1F = 0XBC; //INT1 下降沿中断控制寄存器 +sfr INT1R = 0XBD; //INT1 上降沿中断控制寄存器 +sfr INT2F = 0XC6; //INT2 下降沿中断控制寄存器 +sfr INT2R = 0XC7; //INT2 上降沿中断控制寄存器 + +/*IAP */ +sfr IAPKEY = 0XF1; //IAP保护寄存器 +sfr IAPADL = 0XF2; //IAP写入地址低位寄存器 +sfr IAPADH = 0XF3; //IAP写入地址高位寄存器 +sfr IAPADE = 0XF4; //IAP扩展地址寄存器 +sfr IAPDAT = 0XF5; //IAP数据寄存器 +sfr IAPCTL = 0XF6; //IAP控制寄存器 + +/*uart0*/ +sfr OTCON = 0X8F; //输出控制寄存器 +sfr SCON = 0X98; //串口控制寄存器 +sfr SBUF = 0X99; //串口数据缓存寄存器 + +/*三合一*/ +sfr SSCON2 = 0X95;//SSI控制寄存器2 +sfr SSCON0 = 0X9D; //SSI控制寄存器0 +sfr SSCON1 = 0X9E; //SSI控制寄存器1 +sfr SSDAT = 0X9F; //SSI数据寄存器 + +/*OPTION*/ +sfr OPINX = 0XFE; //Customer Option指针 +sfr OPREG = 0XFF; //Customer Option寄存器 + +/*CRC*/ +sfr OPERCON = 0XEF; //运算控制寄存器 +sfr CHKSUML = 0XFC; //Check Sum结果寄存器低位 +sfr CHKSUMH = 0XFD; //Check Sum结果寄存器高位 + + +///* ------------------- 位寄存器-------------------- */ +/*PSW*/ +sbit CY = PSW^7; //标志位 0:加法运算最高位无进位,或者减法运算最高位无借位时 1:加法运算最高位有进位,或者减法运算最高位有借位时 +sbit AC = PSW^6; //进位辅助标志位 0:无借位、进位 1:加法运算时在bit3位有进位,或减法运算在bit3位有借位时 +sbit F0 = PSW^5; //用户标志位 +sbit RS1 = PSW^4; //工作寄存器组选择位 +sbit RS0 = PSW^3; //工作寄存器组选择位 +sbit OV = PSW^2; //溢出标志位 +sbit F1 = PSW^1; //F1标志 +sbit P = PSW^0; //奇偶标志位 0:ACC中1的个数为偶数(包括0个) 1:ACC中1的个数为奇数 + +/*T2CON*/ +sbit TF2 = T2CON^7; //定时器2溢出标志位 +sbit EXF2 = T2CON^6; //T2EX引脚外部事件输入(下降沿)被检测到的标志位 +sbit RCLK = T2CON^5; //UART0接收时钟控制位 0: 定时器1产生接收波特率 1: 定时器2产生接收波特率 +sbit TCLK = T2CON^4; //UART0发送时钟控制位 0: 定时器1产生发送波特率 1: 定时器2产生发送波特率 +sbit EXEN2 = T2CON^3; //T2EX引脚上的外部事件输入(下降沿)用作重载/捕获触发器允许/禁止控制 +sbit TR2 = T2CON^2; //定时器2开始/停止控制位 0: 停止定时器2 1: 开始定时器2 +sbit T2 = T2CON^1; //定时器2定时器/计数器方式选定位2 +sbit CP = T2CON^0; //捕获/重载方式选定位 + +/*IP*/ +sbit IPADC = IP^6; //ADC中断优先权选择 0:设定 ADC的中断优先权是 “低” 1:设定 ADC的中断优先权是 “高” +sbit IPT2 = IP^5; //Timer2中断优先权选择 0:设定 Timer 2的中断优先权是 “低” 1:设定 Timer 2的中断优先权是 “高” +sbit IPUART = IP^4; //UART中断优先权选择 0:设定 UART的中断优先权是 “低” 1:设定 UART的中断优先权是 “高” +sbit IPT1 = IP^3; //Timer1中断优先权选择 0:设定 Timer 1的中断优先权是 “低” 1:设定 Timer 1的中断优先权是 “高” +sbit IPINT1 = IP^2; //INT1计数器中断优先权选择 0:设定 INT1的中断优先权是 “低” 1:设定 INT1的中断优先权是 “高” +sbit IPT0 = IP^1; //Timer0中断优先权选择 0:设定 Timer 0的中断优先权是 “低” 1:设定 Timer 0的中断优先权是 “高” +sbit IPINT0 = IP^0; //INT0计数器中断优先权选择 0:设定 INT0的中断优先权为 “低” 1: INT0中断优先权为高 + +/*IE*/ +sbit EA = IE^7; //中断使能的总控制 0:关闭所有的中断 1:打开所有的中断 +sbit EADC = IE^6; //ADC中断使能控制 0:关闭ADC中断 1:打开ADC中断 +sbit ET2 = IE^5; //Timer2中断使能控制 0:关闭TIMER2中断 1:打开TIMER2中断 +sbit EUART = IE^4; //UART中断使能控制 0:关闭SIF中断 1:打开SIF中断 +sbit ET1 = IE^3; //Timer1中断使能控制 0:关闭TIMER1中断 1:打开TIMER1中断 +sbit EINT1 = IE^2; //外部中断1中断使能控制 0:关闭外部中断1中断 1:打开外部中断1中断 +sbit ET0 = IE^1; //Timer0中断使能控制 0:关闭TIMER0中断 1:打开TIMER0中断 +sbit EINT0 = IE^0; //外部中断0中断使能控制 0:关闭外部中断0中断 1:打开外部中断0中断 + +/*TCON*/ +sbit TF1 = TCON^7; //T1溢出中断请求标志位 T1产生溢出,发生中断时,硬件将TF1置为“1”,申请中断,CPU响应时,硬件清“0”。 +sbit TR1 = TCON^6; //定时器T1的运行控制位 0:Timer1禁止计数 1:Timer1开始计数 +sbit TF0 = TCON^5; //T0溢出中断请求标志位 T0产生溢出,发生中断时,硬件将TF0置为“1”,申请中断,CPU响应时,硬件清“0”。 +sbit TR0 = TCON^4; //定时器T0的运行控制位 0:Timer0禁止计数 1:Timer0开始计数 + +/*SCON*/ +sbit SM0 = SCON^7; //串行通信模式控制位:与SM1配合使用 00: 模式0,8位半双工同步通信模式 01: 模式1,10位全双工异步通信 11: 模式3,11位全双工异步通信 +sbit SM1 = SCON^6; //串行通信模式控制位 +sbit SM2 = SCON^5; //串行通信模式控制位2,此控制位只对模式3有效 0:每收到一个完整数据帧就置位RI产生中断请求 1:收到一个完整的数据帧时,只有当RB8=1时才会置位RI产生中断请求 +sbit REN = SCON^4; //接收允许控制位 0:不允许接受数据 1:允许接受数据 +sbit TB8 = SCON^3; //只对模式3有效,为发送数据的第9位 +sbit RB8 = SCON^2; //只对模式3有效,为接收数据的第9位 +sbit TI = SCON^1; //发送中断标志位 +sbit RI = SCON^0; //接收中断标志位 + + +/******************* P0 ****************** +*SC92F8597封装未引出的管脚:无 +*SC92F8596封装未引出的管脚:无 +*SC92F8595封装未引出的管脚:P00 +*SC92F8593封装未引出的管脚:P00/P01 +******************************************/ +sbit P07 = P0^7; +sbit P06 = P0^6; +sbit P05 = P0^5; +sbit P04 = P0^4; +sbit P03 = P0^3; +sbit P02 = P0^2; +sbit P01 = P0^1; +sbit P00 = P0^0; + +/******************* P1 ****************** +*SC92F8597封装未引出的管脚:无 +*SC92F8596封装未引出的管脚:无 +*SC92F8595封装未引出的管脚:无 +*SC92F8593封装未引出的管脚:P10/P14/P15/P16/P17 +******************************************/ +sbit P17 = P1^7; +sbit P16 = P1^6; +sbit P15 = P1^5; +sbit P14 = P1^4; +sbit P13 = P1^3; +sbit P12 = P1^2; +sbit P11 = P1^1; +sbit P10 = P1^0; + +/******************* P2 ****************** +*SC92F8597封装未引出的管脚:无 +*SC92F8596封装未引出的管脚:无 +*SC92F8595封装未引出的管脚:无 +*SC92F8593封装未引出的管脚:P26/P27 +******************************************/ +sbit P27 = P2^7; +sbit P26 = P2^6; +sbit P25 = P2^5; +sbit P24 = P2^4; +sbit P23 = P2^3; +sbit P22 = P2^2; +sbit P21 = P2^1; +sbit P20 = P2^0; + +/******************* P3 ****************** +*SC92F8597封装未引出的管脚:无 +*SC92F8596封装未引出的管脚:无 +*SC92F8595封装未引出的管脚:P3 +*SC92F8593封装未引出的管脚:无 +******************************************/ +sbit P37 = P3^7; +sbit P36 = P3^6; +sbit P35 = P3^5; +sbit P34 = P3^4; +sbit P33 = P3^3; +sbit P32 = P3^2; +sbit P31 = P3^1; +sbit P30 = P3^0; + +/******************* P4 ****************** +*SC92F8597封装未引出的管脚:无 +*SC92F8596封装未引出的管脚:P46/P47 +*SC92F8595封装未引出的管脚:P40 +*SC92F8593封装未引出的管脚:P40/P44/P45/P46/P47 +******************************************/ +sbit P47 = P4^7; +sbit P46 = P4^6; +sbit P45 = P4^5; +sbit P44 = P4^4; +sbit P43 = P4^3; +sbit P42 = P4^2; +sbit P41 = P4^1; +sbit P40 = P4^0; + +/******************* P5 ****************** +*SC92F8597封装未引出的管脚:无 +*SC92F8596封装未引出的管脚:P54/P55 +*SC92F8595封装未引出的管脚:P5 +*SC92F8593封装未引出的管脚:P5 +******************************************/ +sbit P55 = P5^5; +sbit P54 = P5^4; +sbit P53 = P5^3; +sbit P52 = P5^2; +sbit P51 = P5^1; +sbit P50 = P5^0; + +/**************************************************************************** +*注意:封装未引出的管脚,需设置为强推挽输出模式 +*IC选型:请根据所使用的IC型号,在初始化完IO口后,调用相对应的未引出管脚的IO口配置; +*如若选SC92F8597,则不用调用宏定义。 +*****************************************************************************/ +#define SC92F8596_NIO_Init() {P4CON|=0xC0,P5CON|=0x30;} //SC92F8596的未引出来的IO口配置 +#define SC92F8595_NIO_Init() {P0CON|=0x01,P3CON|=0xFF,P4CON|=0x01,P5CON|=0xFF;} //SC92F8595的未引出来的IO口配置 +#define SC92F8593_NIO_Init() {P0CON|=0x03,P1CON|=0xF1,P2CON|=0xC0,P4CON|=0xF1,P5CON|=0xFF;}//SC92F8593的未引出来的IO口配置 + + +#endif \ No newline at end of file diff --git a/Keil_C/FWLib/SC92F_Lib/inc/SC92FWxx_C.H b/Keil_C/FWLib/SC92F_Lib/inc/SC92FWxx_C.H new file mode 100644 index 0000000..815b979 --- /dev/null +++ b/Keil_C/FWLib/SC92F_Lib/inc/SC92FWxx_C.H @@ -0,0 +1,286 @@ + /*-------------------------------------------------------------------------- +SC92FWxx_C.H + +C Header file for SC92FWxx microcontroller. +Copyright (c) 2018 Shenzhen SinOne Chip Electronic CO., Ltd. +All rights reserved. +深圳市赛元微电子有限公司 +版本号: V1.0 +日期: 2018.10.09 +--------------------------------------------------------------------------*/ +#ifndef _SC92FWxx_H_ +#define _SC92FWxx_H_ + +/* ------------------- 字节寄存器-------------------- */ +///*CPU*/ +sfr ACC = 0xE0; //累加器A +sfr B = 0xF0; //通用寄存器B +sfr PSW = 0xD0; //程序状态字 +sfr DPH = 0x83; //数据指针高8位 +sfr DPL = 0x82; //数据指针低8位 +sfr SP = 0x81; //堆栈指针 + + +/*system*/ +sfr PCON = 0x87; //电源管理控制寄存器 + +/*interrupt*/ +sfr IP1 = 0XB9; //中断优先级控制寄存器1 +sfr IP = 0xB8; //中断优先权控制寄存器 +sfr IE = 0xA8; //中断控制寄存器 +sfr IE1 = 0XA9; //中断控制寄存器1 + +/*PORT*/ +sfr P5PH = 0xDA; //P5口模式控制寄存器 +sfr P5CON = 0xD9; //P5口模式控制寄存器 +sfr P5 = 0xD8; //P5口数据寄存器 +sfr P4PH = 0xC2; //P4口模式控制寄存器 +sfr P4CON = 0xC1; //P4口模式控制寄存器 +sfr P4 = 0xC0; //P4口数据寄存器 +sfr P3PH = 0xB2; //P3口模式控制寄存器 +sfr P3CON = 0xB1; //P3口模式控制寄存器 +sfr P3 = 0xB0; //P3口数据寄存器 +sfr P2PH = 0xA2; //P2口模式控制寄存器 +sfr P2CON = 0xA1; //P2口模式控制寄存器 +sfr P2 = 0xA0; //P2口数据寄存器 +sfr P1PH = 0x92; //P1口模式控制寄存器 +sfr P1CON = 0x91; //P1口模式控制寄存器 +sfr P1 = 0x90; //P1口数据寄存器 +sfr P0PH = 0x9B; //P0口模式控制寄存器 +sfr P0CON = 0x9A; //P0口模式控制寄存器 +sfr P0 = 0x80; //P0口数据寄存器 +sfr IOHCON0 = 0x96; //IOH0设置寄存器 +sfr IOHCON1 = 0x97; //IOH1设置寄存器 + +/*TIMER*/ +sfr TMCON = 0x8E; //定时器频率控制寄存器 +sfr TH1 = 0x8D; //定时器1高8位 +sfr TH0 = 0x8C; //定时器0高8位 +sfr TL1 = 0x8B; //定时器1低8位 +sfr TL0 = 0x8A; //定时器0低8位 +sfr TMOD = 0x89; //定时器工作模式寄存器 +sfr TCON = 0x88; //定时器控制寄存器 +sfr T2CON = 0xC8; //定时器2控制寄存器 +sfr T2MOD = 0xC9; //定时器2工作模式寄存器 +sfr RCAP2L = 0xCA; //定时器2重载/捕捉低8位 +sfr RCAP2H = 0xCB; //定时器2重载/捕捉高8位 +sfr TL2 = 0xCC; //定时器2低8位 +sfr TH2 = 0xCD; //定时器2高8位 + + +/*ADC*/ +sfr ADCCFG0 = 0xAB; //ADC功能配置寄存器0 +sfr ADCCFG1 = 0xAC; //ADC功能配置寄存器1 +sfr ADCCFG2 = 0XAA; //ADC功能配置寄存器2 +sfr ADCCON = 0XAD; //ADC控制寄存器 +sfr ADCVL = 0xAE; //ADC 结果寄存器 +sfr ADCVH = 0xAF; //ADC 结果寄存器 + +/*PWM*/ +sfr PWMCFG0 = 0xD2; //PWM0设置寄存器 +sfr PWMCON0 = 0xD1; //PWM0控制寄存器 +sfr PWMCFG1 = 0xD4; //PWM1设置寄存器 +sfr PWMCON1 = 0xD3; //PWM1设置寄存器 + +///*WatchDog*/ +sfr BTMCON = 0XCE; //低频定时器控制寄存器 +sfr WDTCON = 0xCF; //WDT控制寄存器 + +sfr OTCON = 0X8F; //输出控制寄存器 + +/*INT*/ +sfr INT0F = 0XBA; //INT0 下降沿中断控制寄存器 +sfr INT0R = 0XBB; //INT0 上降沿中断控制寄存器 +sfr INT1F = 0XBC; //INT1 下降沿中断控制寄存器 +sfr INT1R = 0XBD; //INT1 上降沿中断控制寄存器 +sfr INT2F = 0XC6; //INT2 下降沿中断控制寄存器 +sfr INT2R = 0XC7; //INT2 上降沿中断控制寄存器 + +/*IAP */ +sfr IAPCTL = 0xF6; //IAP控制寄存器 +sfr IAPDAT = 0xF5; //IAP数据寄存器 +sfr IAPADE = 0xF4; //IAP扩展地址寄存器 +sfr IAPADH = 0xF3; //IAP写入地址高位寄存器 +sfr IAPADL = 0xF2; //IAP写入地址低8位寄存器 +sfr IAPKEY = 0xF1; //IAP保护寄存器 + +/*UART*/ +sfr SCON = 0X98; //串口控制寄存器 +sfr SBUF = 0X99; //串口数据缓存寄存器 + +/*SPI*/ +sfr SSCON0 = 0X9D; //SPI控制寄存器0 +sfr SSCON1 = 0X9E; //SPI控制寄存器1 +sfr SSCON2 = 0X95; //SPI控制寄存器2 +sfr SSDAT = 0X9F; //SPI数据寄存器 + +sfr OPINX = 0XFE; +sfr OPREG = 0XFF; +sfr EXADH = 0XF7; + +/*Check Sum*/ +sfr CHKSUML = 0XFC; //Check Sum结果寄存器低位 +sfr CHKSUMH = 0XFD; //Check Sum结果寄存器高位 + +/*模拟比较器*/ +sfr CMPCFG = 0XB6; //模拟比较器设置寄存器 +sfr CMPCON = 0XB7; //模拟比较器控制寄存器 + +/*乘除法器*/ +sfr EXA0 = 0xE9; //扩展累加器0 +sfr EXA1 = 0xEA; //扩展累加器1 +sfr EXA2 = 0xEB; //扩展累加器2 +sfr EXA3 = 0xEC; //扩展累加器3 +sfr EXBL = 0xED; //扩展B寄存器0 +sfr EXBH = 0xEE; //扩展B寄存器1 +sfr OPERCON = 0xEF; //运算控制寄存器 + +///* ------------------- 位寄存器-------------------- */ +/*B*/ +/*ACC*/ +/*PSW*/ +sbit CY = PSW^7; //标志位 0:加法运算最高位无进位,或者减法运算最高位无借位时 1:加法运算最高位有进位,或者减法运算最高位有借位时 +sbit AC = PSW^6; //进位辅助标志位 0:无借位、进位 1:加法运算时在bit3位有进位,或减法运算在bit3位有借位时 +sbit F0 = PSW^5; //用户标志位 +sbit RS1 = PSW^4; //工作寄存器组选择位 +sbit RS0 = PSW^3; //工作寄存器组选择位 +sbit OV = PSW^2; //溢出标志位 +sbit F1 = PSW^1; //F1标志 +sbit P = PSW^0; //奇偶标志位 0:ACC中1的个数为偶数(包括0个) 1:ACC中1的个数为奇数 + +/*T2CON*/ +sbit TF2 = T2CON^7; +sbit EXF2 = T2CON^6; +sbit RCLK = T2CON^5; +sbit CLK = T2CON^4; +sbit EXEN2 = T2CON^3; +sbit TR2 = T2CON^2; +sbit T2 = T2CON^1; +sbit CP = T2CON^0; + + +/*IP*/ +sbit IPADC = IP^6; //ADC中断优先控制位 0:设定 ADC的中断优先权是 “低” 1:设定 ADC的中断优先权是 “高” +sbit IPT2 = IP^5; //Timer2中断优先控制位 0:设定 Timer2的中断优先权是 “低” 1:设定Timer2的中断优先权是 “高” +sbit IPUART = IP^4; //UART中断优先控制位 0:设定UART的中断优先权是 “低” 1:设定UART的中断优先权是 “高” +sbit IPT1 = IP^3; //Timer1中断优先控制位 0:设定 Timer 1的中断优先权是 “低” 1:设定 Timer 1的中断优先权是 “高” +sbit IPINT1 = IP^2; //INT1中断优先控制位 0:设定INT1中断优先权是 “低” 1:设定INT1的中断优先权是 “高” +sbit IPT0 = IP^1; //Timer0中断优先控制位 0:设定 Timer 0的中断优先权是 “低” 1:设定 Timer 0的中断优先权是 “高” +sbit IPINT0 = IP^0; //INT0中断优先控制位 0:设定INT0中断优先权是 “低” 1:设定INT0的中断优先权是 “高” + +/*IE*/ +sbit EA = IE^7; //中断使能的总控制 0:关闭所有的中断 1:打开所有的中断 +sbit EADC = IE^6; //ADC中断使能控制 0:关闭ADC中断 1:打开ADC中断 +sbit ET2 = IE^5; //Timer2中断使能控制 0:关闭Timer2中断 1:打开Timer2中断 +sbit EUART = IE^4; //UART中断使能控制 0:关闭UART中断 1:打开UART中断 +sbit ET1 = IE^3; //Timer1中断使能控制 0:关闭TIMER1中断 1:打开TIMER1中断 +sbit EINT1 = IE^2; //INT1中断使能控制 0:关闭INT1中断 1:打开INT1中断 +sbit ET0 = IE^1; //Timer0中断使能控制 0:关闭TIMER0中断 1:打开TIMER0中断 +sbit EINT0 = IE^0; //INT0中断使能控制 0:关闭INT0中断 1:打开INT0中断 + +/*TCON*/ +sbit TF1 = TCON^7; //T1溢出中断请求标志位 T1产生溢出,发生中断时,硬件将TF1置为“1”,申请中断,CPU响应时,硬件清“0”。 +sbit TR1 = TCON^6; //定时器T1的运行控制位 0:Timer1禁止计数 1:Timer1开始计数 +sbit TF0 = TCON^5; //T0溢出中断请求标志位 T0产生溢出,发生中断时,硬件将TF0置为“1”,申请中断,CPU响应时,硬件清“0”。 +sbit TR0 = TCON^4; //定时器T0的运行控制位 0:Timer0禁止计数 1:Timer0开始计数 + +/*SCON*/ +sbit SM0 = SCON^7; +sbit SM1 = SCON^6; +sbit SM2 = SCON^5; +sbit REN = SCON^4; +sbit TB8 = SCON^3; +sbit RB8 = SCON^2; +sbit TI = SCON^1; +sbit RI = SCON^0; + +/******************* P0 ****************** +*SC92FW40封装未引出的管脚:无 +*SC92FW24封装未引出的管脚:P04/P05/P06/P07 +*SC92FW16封装未引出的管脚:P00/P01/P04/P05 +******************************************/ +sbit P07 = P0^7; +sbit P06 = P0^6; +sbit P05 = P0^5; +sbit P04 = P0^4; +sbit P03 = P0^3; +sbit P02 = P0^2; +sbit P01 = P0^1; +sbit P00 = P0^0; + +/******************* P1 ****************** +*SC92FW40封装未引出的管脚:无 +*SC92FW24封装未引出的管脚:P10/P12/P14/P15/P16/P17 +*SC92FW16封装未引出的管脚:P14/P15/P16/P17 +******************************************/ +sbit P17 = P1^7; +sbit P16 = P1^6; +sbit P15 = P1^5; +sbit P14 = P1^4; +sbit P13 = P1^3; +sbit P12 = P1^2; +sbit P11 = P1^1; +sbit P10 = P1^0; + +/******************* P2 ****************** +*SC92FW40封装未引出的管脚:无 +*SC92FW24封装未引出的管脚:P26/P27 +*SC92FW16封装未引出的管脚:P26/P27 +******************************************/ +sbit P27 = P2^7; +sbit P26 = P2^6; +sbit P25 = P2^5; +sbit P24 = P2^4; +sbit P23 = P2^3; +sbit P22 = P2^2; +sbit P21 = P2^1; +sbit P20 = P2^0; + +/******************* P3 ****************** +*SC92FW40封装未引出的管脚:无 +*SC92FW24封装未引出的管脚:P34/P35/P36/P37 +*SC92FW16封装未引出的管脚:P3 +******************************************/ +sbit P37 = P3^7; +sbit P36 = P3^6; +sbit P35 = P3^5; +sbit P34 = P3^4; +sbit P33 = P3^3; +sbit P32 = P3^2; +sbit P31 = P3^1; +sbit P30 = P3^0; + +/******************* P4 ****************** +*SC92FW40封装未引出的管脚:无 +*SC92FW24封装未引出的管脚:P46/P47 +*SC92FW16封装未引出的管脚:P44/P45/P46/P47 +******************************************/ +sbit P47 = P4^7; +sbit P46 = P4^6; +sbit P45 = P4^5; +sbit P44 = P4^4; +sbit P43 = P4^3; +sbit P42 = P4^2; +sbit P41 = P4^1; +sbit P40 = P4^0; + +/******************* P5 ****************** +*SC92FW40封装未引出的管脚:无 +*SC92FW24封装未引出的管脚:P54/P55 +*SC92FW16封装未引出的管脚:P5 +******************************************/ +sbit P55 = P5^5; +sbit P54 = P5^4; +sbit P53 = P5^3; +sbit P52 = P5^2; +sbit P51 = P5^1; +sbit P50 = P5^0; + +/**************************************************************************** +*注意:封装未引出的管脚,需设置为强推挽输出模式 +*IC选型:请根据所使用的IC型号,在初始化完IO口后,调用相对应的未引出管脚的IO口配置; +*如若选择SC92FW40,则不用调用宏定义。 +*****************************************************************************/ +#define SC92FW24_NIO_Init() {P0CON|=0xF0,P1CON|=0xF5,P2CON|=0xC0,P3CON|=0xF0,P4CON|=0xC0,P5CON|=0xF0;} //SC92FW24的未引出来的IO口配置 +#define SC92FW16_NIO_Init() {P0CON|=0x33,P1CON|=0xF0,P2CON|=0xC0,P3CON|=0xFF,P4CON|=0xF0,P5CON|=0xFF;} //SC92FW16的未引出来的IO口配置 +#endif \ No newline at end of file diff --git a/Keil_C/FWLib/SC92F_Lib/inc/SC92L753x_C.H b/Keil_C/FWLib/SC92F_Lib/inc/SC92L753x_C.H new file mode 100644 index 0000000..15aba03 --- /dev/null +++ b/Keil_C/FWLib/SC92F_Lib/inc/SC92L753x_C.H @@ -0,0 +1,277 @@ +/*-------------------------------------------------------------------------- +SC92L753x_C.H + +C Header file for SC92L853x microcontroller. +Copyright (c) 2022 Shenzhen SinOne Microelectronics Co., Ltd. +All rights reserved. +深圳市赛元微电子有限公司 +版本号: V0.1 +日期: 2022.01.18 +--------------------------------------------------------------------------*/ +#ifndef _SC92L753x_C_H_ +#define _SC92L753x_C_H_ + +///* ------------------- 字节寄存器-------------------- */ +/*CPU*/ +sfr SP = 0X81; //堆栈指针 +sfr DPL = 0X82; //DPTR数据指针低位 +sfr DPH = 0X83; //DPTR数据指针高位 +sfr PSW = 0XD0; //程序状态字寄存器 +sfr ACC = 0XE0; //累加器A +sfr EXA0 = 0XE9; //扩展累加器0 +sfr EXA1 = 0XEA; //扩展累加器1 +sfr EXA2 = 0XEB; //扩展累加器2 +sfr EXA3 = 0XEC; //扩展累加器3 +sfr EXBL = 0XED; //扩展B寄存器0 +sfr EXBH = 0XEE; //扩展B寄存器1 +sfr B = 0XF0; //B寄存器 + +/*SRAM*/ +sfr EXADH = 0XF7; //外部SRAM操作地址高位 + +/*system*/ +sfr PCON = 0X87; //电源管理控制寄存器 + +/*Interrupt*/ +sfr IE = 0XA8; //中断控制寄存器 +sfr IE1 = 0XA9; //中断控制寄存器1 +sfr IE2 = 0XAA; //中断使能寄存器2 +sfr IP = 0XB8; //中断优先权控制寄存器 +sfr IP1 = 0XB9; //中断优先级控制寄存器1 +sfr IP2 = 0XBA; //中断优先级控制寄存器2 + +/*PORT*/ +sfr P0 = 0X80; //P0口数据寄存器 +sfr P1 = 0X90; //P1口数据寄存器 +sfr P1CON = 0X91; //P1口输入/输出控制寄存器 +sfr P1PH = 0X92; //P1口上拉电阻控制寄存器 +sfr P1VO = 0X93; //P1口显示驱动输出寄存器 +sfr P0VO = 0X94; //P0口LCD电压输出寄存器 +sfr DDRCON = 0X95; //显示驱动控制寄存器 +sfr IOHCON0 = 0X96; //IOH设置寄存器0 +sfr IOHCON1 = 0X97; //IOH设置寄存器1 +sfr P0CON = 0X9A; //P0口输入/输出控制寄存器 +sfr P0PH = 0X9B; //P0口上拉电阻控制寄存器 +sfr P2 = 0XA0; //P2口数据寄存器 +sfr P2CON = 0XA1; //P2口输入/输出控制寄存器 +sfr P2PH = 0XA2; //P2口上拉电阻控制寄存器 +sfr P2VO = 0XA3; //P2口显示驱动输出寄存器 +sfr P5 = 0XD8; //P5口数据寄存器 +sfr P5CON = 0XD9; //P5口输入/输出控制寄存器 +sfr P5PH = 0XDA; //P5口上拉电阻控制寄存器 +sfr P5VO = 0XDB; //P5口显示驱动输出寄存器 + + +/*TIMER*/ +sfr TCON = 0X88; //定时器控制寄存器 +sfr TMOD = 0X89; //定时器工作模式寄存器 +sfr TL0 = 0X8A; //定时器0低8位 +sfr TL1 = 0X8B; //定时器1低8位 +sfr TH0 = 0X8C; //定时器0高8位 +sfr TH1 = 0X8D; //定时器1高8位 +sfr TMCON = 0X8E; //定时器频率控制寄存器 +sfr TXCON = 0XC8; //定时器2/3/4控制寄存器 +sfr TXMOD = 0XC9; //定时器2/3/4工作模式寄存器 +sfr RCAPXL = 0XCA; //定时器2/3/4重载/捕捉低8位 +sfr RCAPXH = 0XCB; //定时器2/3/4重载/捕捉高8位 +sfr TLX = 0XCC; //定时器2/3/4低8位 +sfr THX = 0XCD; //定时器2/3/4高8位 +sfr TXINX = 0XCE; //定时器控制寄存器指针 + +/*ADC*/ +sfr ADCCFG0 = 0XAB; //ADC设置寄存器0 +sfr ADCCFG1 = 0XAC; //ADC设置寄存器1 +sfr ADCCON = 0XAD; //ADC控制寄存器 +sfr ADCVL = 0XAE; //ADC结果寄存器 +sfr ADCVH = 0XAF; //ADC结果寄存器 +sfr ADCCFG2 = 0XB5; //ADC设置寄存器2 + +/*PWM*/ +sfr PWMCFG = 0XD1; //PWM设置寄存器 +sfr PWMCON0 = 0XD2; //PWM控制寄存器0 +sfr PWMCON1 = 0XD3; //PWM控制寄存器1 +sfr PWMPDL = 0XD4; //PWM周期寄存器低8位 +sfr PWMPDH = 0XD5; //PWM周期寄存器高8位 +sfr PWMDFR = 0XD6; //PWM死区设置寄存器 +sfr PWMFLT = 0XD7; //PWM故障检测设置寄存器 + +/*LPD*/ +sfr LPDCFG = 0XB7; //LPD控制器 + +/*WatchDog*/ +sfr WDTCON = 0XCF; //WDT控制寄存器 + +/*BTM*/ +sfr BTMCON = 0XFB; //低频定时器控制寄存器 + +/*INT*/ +sfr INT0F = 0XB4; //INT0 下降沿中断控制寄存器 +sfr INT0R = 0XBB; //INT0 上降沿中断控制寄存器 +sfr INT1F = 0XBC; //INT1 下降沿中断控制寄存器 +sfr INT1R = 0XBD; //INT1 上降沿中断控制寄存器 +sfr INT2F = 0XBE; //INT2 下降沿中断控制寄存器 +sfr INT2R = 0XBF; //INT2 上降沿中断控制寄存器 + +/*IAP */ +sfr IAPKEY = 0XF1; //IAP保护寄存器 +sfr IAPADL = 0XF2; //IAP写入地址低位寄存器 +sfr IAPADH = 0XF3; //IAP写入地址高位寄存器 +sfr IAPADE = 0XF4; //IAP写入扩展地址寄存器 +sfr IAPDAT = 0XF5; //IAP数据寄存器 +sfr IAPCTL = 0XF6; //IAP控制寄存器 + +/*uart0*/ +sfr OTCON = 0X8F; //输出控制寄存器 +sfr SCON = 0X98; //串口控制寄存器 +sfr SBUF = 0X99; //串口数据缓存寄存器 + +/*三合一*/ +sfr US0CON0 = 0X9C; //USCI0控制寄存器0 +sfr US0CON1 = 0X9D; //USCI0控制寄存器1 +sfr US0CON2 = 0X9E; //USCI0控制寄存器2 +sfr US0CON3 = 0X9F; //USCI0控制寄存器3 +sfr US1CON0 = 0XA4; //USCI1控制寄存器0 +sfr US1CON1 = 0XA5; //USCI1控制寄存器1 +sfr US1CON2 = 0XA6; //USCI1控制寄存器2 +sfr US1CON3 = 0XA7; //USCI1控制寄存器3 +sfr US2CON0 = 0XC4; //USCI2控制寄存器0 +sfr US2CON1 = 0XC5; //USCI2控制寄存器1 +sfr US2CON2 = 0XC6; //USCI2控制寄存器2 +sfr US2CON3 = 0XC7; //USCI2控制寄存器3 + +/*OPTION*/ +sfr OPINX = 0XFE; //Option指针 +sfr OPREG = 0XFF; //Option寄存器 + +/*CRC*/ +sfr OPERCON = 0XEF; //运算控制寄存器 +sfr CRCINX = 0XFC; //CRC指针 +sfr CRCREG = 0XFD; //CRC寄存器 + + +///* ------------------- 位寄存器-------------------- */ +/*PSW*/ +sbit CY = PSW^7; //标志位 0:加法运算最高位无进位,或者减法运算最高位无借位时 1:加法运算最高位有进位,或者减法运算最高位有借位时 +sbit AC = PSW^6; //进位辅助标志位 0:无借位、进位 1:加法运算时在bit3位有进位,或减法运算在bit3位有借位时 +sbit F0 = PSW^5; //用户标志位 +sbit RS1 = PSW^4; //工作寄存器组选择位 +sbit RS0 = PSW^3; //工作寄存器组选择位 +sbit OV = PSW^2; //溢出标志位 +sbit F1 = PSW^1; //F1标志 +sbit P = PSW^0; //奇偶标志位 0:ACC中1的个数为偶数(包括0个) 1:ACC中1的个数为奇数 + +/*TXCON*/ +sbit TFX = TXCON^7; //定时器2/3/4溢出标志位 +sbit EXFX = TXCON^6; //TnEX(n=2/3/4)引脚外部事件输入(下降沿)被检测到的标志位 +sbit RCLKX = TXCON^5; //UART0接收时钟控制位 0: 定时器1产生接收波特率 1: 定时器2产生接收波特率 +sbit TCLKX = TXCON^4; //UART0发送时钟控制位 0: 定时器1产生发送波特率 1: 定时器2产生发送波特率 +sbit EXENX = TXCON^3; //T2EX引脚上的外部事件输入(下降沿)用作重载/捕获触发器允许/禁止控制 +sbit TRX = TXCON^2; //定时器2开始/停止控制位 0: 停止定时器2 1: 开始定时器2 +sbit TX = TXCON^1; //定时器2定时器/计数器方式选定位2 +sbit CP = TXCON^0; //捕获/重载方式选定位 + +/*IP*/ +sbit IPADC = IP^6; //ADC中断优先权选择 0:设定 ADC的中断优先权是 “低” 1:设定 ADC的中断优先权是 “高” +sbit IPT2 = IP^5; //Timer2中断优先权选择 0:设定 Timer 2的中断优先权是 “低” 1:设定 Timer 2的中断优先权是 “高” +sbit IPUART = IP^4; //UART中断优先权选择 0:设定 UART的中断优先权是 “低” 1:设定 UART的中断优先权是 “高” +sbit IPT1 = IP^3; //Timer1中断优先权选择 0:设定 Timer 1的中断优先权是 “低” 1:设定 Timer 1的中断优先权是 “高” +sbit IPINT1 = IP^2; //INT1计数器中断优先权选择 0:设定 INT1的中断优先权是 “低” 1:设定 INT1的中断优先权是 “高” +sbit IPT0 = IP^1; //Timer0中断优先权选择 0:设定 Timer 0的中断优先权是 “低” 1:设定 Timer 0的中断优先权是 “高” +sbit IPINT0 = IP^0; //INT0计数器中断优先权选择 0:设定 INT0的中断优先权为 “低” 1: INT0中断优先权为高 + +/*IE*/ +sbit EA = IE^7; //中断使能的总控制 0:关闭所有的中断 1:打开所有的中断 +sbit EADC = IE^6; //ADC中断使能控制 0:关闭ADC中断 1:打开ADC中断 +sbit ET2 = IE^5; //Timer2中断使能控制 0:关闭TIMER2中断 1:打开TIMER2中断 +sbit EUART = IE^4; //UART中断使能控制 0:关闭SIF中断 1:打开SIF中断 +sbit ET1 = IE^3; //Timer1中断使能控制 0:关闭TIMER1中断 1:打开TIMER1中断 +sbit EINT1 = IE^2; //外部中断1中断使能控制 0:关闭外部中断1中断 1:打开外部中断1中断 +sbit ET0 = IE^1; //Timer0中断使能控制 0:关闭TIMER0中断 1:打开TIMER0中断 +sbit EINT0 = IE^0; //外部中断0中断使能控制 0:关闭外部中断0中断 1:打开外部中断0中断 + +/*TCON*/ +sbit TF1 = TCON^7; //T1溢出中断请求标志位 T1产生溢出,发生中断时,硬件将TF1置为“1”,申请中断,CPU响应时,硬件清“0”。 +sbit TR1 = TCON^6; //定时器T1的运行控制位 0:Timer1禁止计数 1:Timer1开始计数 +sbit TF0 = TCON^5; //T0溢出中断请求标志位 T0产生溢出,发生中断时,硬件将TF0置为“1”,申请中断,CPU响应时,硬件清“0”。 +sbit TR0 = TCON^4; //定时器T0的运行控制位 0:Timer0禁止计数 1:Timer0开始计数 + + +/*SCON*/ +sbit SM0 = SCON^7; //串行通信模式控制位:与SM1配合使用 00: 模式0,8位半双工同步通信模式 01: 模式1,10位全双工异步通信 11: 模式3,11位全双工异步通信 +sbit SM1 = SCON^6; //串行通信模式控制位 +sbit SM2 = SCON^5; //串行通信模式控制位2,此控制位只对模式3有效 0:每收到一个完整数据帧就置位RI产生中断请求 1:收到一个完整的数据帧时,只有当RB8=1时才会置位RI产生中断请求 +sbit REN = SCON^4; //接收允许控制位 0:不允许接受数据 1:允许接受数据 +sbit TB8 = SCON^3; //只对模式3有效,为发送数据的第9位 +sbit RB8 = SCON^2; //只对模式3有效,为接收数据的第9位 +sbit TI = SCON^1; //发送中断标志位 +sbit RI = SCON^0; //接收中断标志位 + + +/******************* P0 *********************** +*SC92L8535封装未引出的管脚:无 +*SC92L8533封装未引出的管脚:无 +*SC92L8532封装未引出的管脚:P06/P07 +*SC92L8531封装未引出的管脚:P02/P03/P04/P06/P07 +***********************************************/ +sbit P07 = P0^7; +sbit P06 = P0^6; +sbit P05 = P0^5; +sbit P04 = P0^4; +sbit P03 = P0^3; +sbit P02 = P0^2; +sbit P01 = P0^1; +sbit P00 = P0^0; + +/******************* P1 *********************** +*SC92L8535封装未引出的管脚:无 +*SC92L8533封装未引出的管脚:无 +*SC92L8532封装未引出的管脚:无 +*SC92L8531封装未引出的管脚:无 +***********************************************/ +sbit P17 = P1^7; +sbit P16 = P1^6; +sbit P15 = P1^5; +sbit P14 = P1^4; +sbit P13 = P1^3; +sbit P12 = P1^2; +sbit P11 = P1^1; +sbit P10 = P1^0; + +/******************* P2 *********************** +*SC92L8535封装未引出的管脚:无 +*SC92L8533封装未引出的管脚:无 +*SC92L8532封装未引出的管脚:无 +*SC92L8531封装未引出的管脚:P22/P23/P27 +***********************************************/ +sbit P27 = P2^7; +sbit P26 = P2^6; +sbit P25 = P2^5; +sbit P24 = P2^4; +sbit P23 = P2^3; +sbit P22 = P2^2; +sbit P21 = P2^1; +sbit P20 = P2^0; + + +/******************* P5 *********************** +*SC92L8535封装未引出的管脚:无 +*SC92L8533封装未引出的管脚:P52/P53/P54/P55 +*SC92L8532封装未引出的管脚:P5 +*SC92L8531封装未引出的管脚:P5 +***********************************************/ +sbit P55 = P5^5; +sbit P54 = P5^4; +sbit P53 = P5^3; +sbit P52 = P5^2; +sbit P51 = P5^1; +sbit P50 = P5^0; + +/**************************************************************************** +*注意:封装未引出的管脚,需设置为强推挽输出模式 +*IC选型:请根据所使用的IC型号,在初始化完IO口后,调用相对应的未引出管脚的IO口配置; +*如若选SC92L7535,则不用调用宏定义。 +*****************************************************************************/ +#define SC92L7533_NIO_Init() {P5CON|=0x3C;} //SC92L8533的未引出来的IO口配置 +#define SC92L7532_NIO_Init() {P0CON|=0xC0,P5CON|=0x3F;} //SC92L8532的未引出来的IO口配置 +#define SC92L7531_NIO_Init() {P0CON|=0xDC,P2CON|=0X8C,P5CON|=0x3F;} //SC92L8531的未引出来的IO口配置 +#endif diff --git a/Keil_C/FWLib/SC92F_Lib/inc/SC92L853x_C.H b/Keil_C/FWLib/SC92F_Lib/inc/SC92L853x_C.H new file mode 100644 index 0000000..857cfa5 --- /dev/null +++ b/Keil_C/FWLib/SC92F_Lib/inc/SC92L853x_C.H @@ -0,0 +1,277 @@ +/*-------------------------------------------------------------------------- +SC92L853x_C.H + +C Header file for SC92L853x microcontroller. +Copyright (c) 2022 Shenzhen SinOne Microelectronics Co., Ltd. +All rights reserved. +深圳市赛元微电子有限公司 +版本号: V0.1 +日期: 2022.01.18 +--------------------------------------------------------------------------*/ +#ifndef _SC92L853x_C_H_ +#define _SC92L853x_C_H_ + +///* ------------------- 字节寄存器-------------------- */ +/*CPU*/ +sfr SP = 0X81; //堆栈指针 +sfr DPL = 0X82; //DPTR数据指针低位 +sfr DPH = 0X83; //DPTR数据指针高位 +sfr PSW = 0XD0; //程序状态字寄存器 +sfr ACC = 0XE0; //累加器A +sfr EXA0 = 0XE9; //扩展累加器0 +sfr EXA1 = 0XEA; //扩展累加器1 +sfr EXA2 = 0XEB; //扩展累加器2 +sfr EXA3 = 0XEC; //扩展累加器3 +sfr EXBL = 0XED; //扩展B寄存器0 +sfr EXBH = 0XEE; //扩展B寄存器1 +sfr B = 0XF0; //B寄存器 + +/*SRAM*/ +sfr EXADH = 0XF7; //外部SRAM操作地址高位 + +/*system*/ +sfr PCON = 0X87; //电源管理控制寄存器 + +/*Interrupt*/ +sfr IE = 0XA8; //中断控制寄存器 +sfr IE1 = 0XA9; //中断控制寄存器1 +sfr IE2 = 0XAA; //中断使能寄存器2 +sfr IP = 0XB8; //中断优先权控制寄存器 +sfr IP1 = 0XB9; //中断优先级控制寄存器1 +sfr IP2 = 0XBA; //中断优先级控制寄存器2 + +/*PORT*/ +sfr P0 = 0X80; //P0口数据寄存器 +sfr P1 = 0X90; //P1口数据寄存器 +sfr P1CON = 0X91; //P1口输入/输出控制寄存器 +sfr P1PH = 0X92; //P1口上拉电阻控制寄存器 +sfr P1VO = 0X93; //P1口显示驱动输出寄存器 +sfr P0VO = 0X94; //P0口LCD电压输出寄存器 +sfr DDRCON = 0X95; //显示驱动控制寄存器 +sfr IOHCON0 = 0X96; //IOH设置寄存器0 +sfr IOHCON1 = 0X97; //IOH设置寄存器1 +sfr P0CON = 0X9A; //P0口输入/输出控制寄存器 +sfr P0PH = 0X9B; //P0口上拉电阻控制寄存器 +sfr P2 = 0XA0; //P2口数据寄存器 +sfr P2CON = 0XA1; //P2口输入/输出控制寄存器 +sfr P2PH = 0XA2; //P2口上拉电阻控制寄存器 +sfr P2VO = 0XA3; //P2口显示驱动输出寄存器 +sfr P5 = 0XD8; //P5口数据寄存器 +sfr P5CON = 0XD9; //P5口输入/输出控制寄存器 +sfr P5PH = 0XDA; //P5口上拉电阻控制寄存器 +sfr P5VO = 0XDB; //P5口显示驱动输出寄存器 + + +/*TIMER*/ +sfr TCON = 0X88; //定时器控制寄存器 +sfr TMOD = 0X89; //定时器工作模式寄存器 +sfr TL0 = 0X8A; //定时器0低8位 +sfr TL1 = 0X8B; //定时器1低8位 +sfr TH0 = 0X8C; //定时器0高8位 +sfr TH1 = 0X8D; //定时器1高8位 +sfr TMCON = 0X8E; //定时器频率控制寄存器 +sfr TXCON = 0XC8; //定时器2/3/4控制寄存器 +sfr TXMOD = 0XC9; //定时器2/3/4工作模式寄存器 +sfr RCAPXL = 0XCA; //定时器2/3/4重载/捕捉低8位 +sfr RCAPXH = 0XCB; //定时器2/3/4重载/捕捉高8位 +sfr TLX = 0XCC; //定时器2/3/4低8位 +sfr THX = 0XCD; //定时器2/3/4高8位 +sfr TXINX = 0XCE; //定时器控制寄存器指针 + +/*ADC*/ +sfr ADCCFG0 = 0XAB; //ADC设置寄存器0 +sfr ADCCFG1 = 0XAC; //ADC设置寄存器1 +sfr ADCCON = 0XAD; //ADC控制寄存器 +sfr ADCVL = 0XAE; //ADC结果寄存器 +sfr ADCVH = 0XAF; //ADC结果寄存器 +sfr ADCCFG2 = 0XB5; //ADC设置寄存器2 + +/*PWM*/ +sfr PWMCFG = 0XD1; //PWM设置寄存器 +sfr PWMCON0 = 0XD2; //PWM控制寄存器0 +sfr PWMCON1 = 0XD3; //PWM控制寄存器1 +sfr PWMPDL = 0XD4; //PWM周期寄存器低8位 +sfr PWMPDH = 0XD5; //PWM周期寄存器高8位 +sfr PWMDFR = 0XD6; //PWM死区设置寄存器 +sfr PWMFLT = 0XD7; //PWM故障检测设置寄存器 + +/*LPD*/ +sfr LPDCFG = 0XB7; //LPD控制器 + +/*WatchDog*/ +sfr WDTCON = 0XCF; //WDT控制寄存器 + +/*BTM*/ +sfr BTMCON = 0XFB; //低频定时器控制寄存器 + +/*INT*/ +sfr INT0F = 0XB4; //INT0 下降沿中断控制寄存器 +sfr INT0R = 0XBB; //INT0 上降沿中断控制寄存器 +sfr INT1F = 0XBC; //INT1 下降沿中断控制寄存器 +sfr INT1R = 0XBD; //INT1 上降沿中断控制寄存器 +sfr INT2F = 0XBE; //INT2 下降沿中断控制寄存器 +sfr INT2R = 0XBF; //INT2 上降沿中断控制寄存器 + +/*IAP */ +sfr IAPKEY = 0XF1; //IAP保护寄存器 +sfr IAPADL = 0XF2; //IAP写入地址低位寄存器 +sfr IAPADH = 0XF3; //IAP写入地址高位寄存器 +sfr IAPADE = 0XF4; //IAP写入扩展地址寄存器 +sfr IAPDAT = 0XF5; //IAP数据寄存器 +sfr IAPCTL = 0XF6; //IAP控制寄存器 + +/*uart0*/ +sfr OTCON = 0X8F; //输出控制寄存器 +sfr SCON = 0X98; //串口控制寄存器 +sfr SBUF = 0X99; //串口数据缓存寄存器 + +/*三合一*/ +sfr US0CON0 = 0X9C; //USCI0控制寄存器0 +sfr US0CON1 = 0X9D; //USCI0控制寄存器1 +sfr US0CON2 = 0X9E; //USCI0控制寄存器2 +sfr US0CON3 = 0X9F; //USCI0控制寄存器3 +sfr US1CON0 = 0XA4; //USCI1控制寄存器0 +sfr US1CON1 = 0XA5; //USCI1控制寄存器1 +sfr US1CON2 = 0XA6; //USCI1控制寄存器2 +sfr US1CON3 = 0XA7; //USCI1控制寄存器3 +sfr US2CON0 = 0XC4; //USCI2控制寄存器0 +sfr US2CON1 = 0XC5; //USCI2控制寄存器1 +sfr US2CON2 = 0XC6; //USCI2控制寄存器2 +sfr US2CON3 = 0XC7; //USCI2控制寄存器3 + +/*OPTION*/ +sfr OPINX = 0XFE; //Option指针 +sfr OPREG = 0XFF; //Option寄存器 + +/*CRC*/ +sfr OPERCON = 0XEF; //运算控制寄存器 +sfr CRCINX = 0XFC; //CRC指针 +sfr CRCREG = 0XFD; //CRC寄存器 + + +///* ------------------- 位寄存器-------------------- */ +/*PSW*/ +sbit CY = PSW^7; //标志位 0:加法运算最高位无进位,或者减法运算最高位无借位时 1:加法运算最高位有进位,或者减法运算最高位有借位时 +sbit AC = PSW^6; //进位辅助标志位 0:无借位、进位 1:加法运算时在bit3位有进位,或减法运算在bit3位有借位时 +sbit F0 = PSW^5; //用户标志位 +sbit RS1 = PSW^4; //工作寄存器组选择位 +sbit RS0 = PSW^3; //工作寄存器组选择位 +sbit OV = PSW^2; //溢出标志位 +sbit F1 = PSW^1; //F1标志 +sbit P = PSW^0; //奇偶标志位 0:ACC中1的个数为偶数(包括0个) 1:ACC中1的个数为奇数 + +/*TXCON*/ +sbit TFX = TXCON^7; //定时器2/3/4溢出标志位 +sbit EXFX = TXCON^6; //TnEX(n=2/3/4)引脚外部事件输入(下降沿)被检测到的标志位 +sbit RCLKX = TXCON^5; //UART0接收时钟控制位 0: 定时器1产生接收波特率 1: 定时器2产生接收波特率 +sbit TCLKX = TXCON^4; //UART0发送时钟控制位 0: 定时器1产生发送波特率 1: 定时器2产生发送波特率 +sbit EXENX = TXCON^3; //T2EX引脚上的外部事件输入(下降沿)用作重载/捕获触发器允许/禁止控制 +sbit TRX = TXCON^2; //定时器2开始/停止控制位 0: 停止定时器2 1: 开始定时器2 +sbit TX = TXCON^1; //定时器2定时器/计数器方式选定位2 +sbit CP = TXCON^0; //捕获/重载方式选定位 + +/*IP*/ +sbit IPADC = IP^6; //ADC中断优先权选择 0:设定 ADC的中断优先权是 “低” 1:设定 ADC的中断优先权是 “高” +sbit IPT2 = IP^5; //Timer2中断优先权选择 0:设定 Timer 2的中断优先权是 “低” 1:设定 Timer 2的中断优先权是 “高” +sbit IPUART = IP^4; //UART中断优先权选择 0:设定 UART的中断优先权是 “低” 1:设定 UART的中断优先权是 “高” +sbit IPT1 = IP^3; //Timer1中断优先权选择 0:设定 Timer 1的中断优先权是 “低” 1:设定 Timer 1的中断优先权是 “高” +sbit IPINT1 = IP^2; //INT1计数器中断优先权选择 0:设定 INT1的中断优先权是 “低” 1:设定 INT1的中断优先权是 “高” +sbit IPT0 = IP^1; //Timer0中断优先权选择 0:设定 Timer 0的中断优先权是 “低” 1:设定 Timer 0的中断优先权是 “高” +sbit IPINT0 = IP^0; //INT0计数器中断优先权选择 0:设定 INT0的中断优先权为 “低” 1: INT0中断优先权为高 + +/*IE*/ +sbit EA = IE^7; //中断使能的总控制 0:关闭所有的中断 1:打开所有的中断 +sbit EADC = IE^6; //ADC中断使能控制 0:关闭ADC中断 1:打开ADC中断 +sbit ET2 = IE^5; //Timer2中断使能控制 0:关闭TIMER2中断 1:打开TIMER2中断 +sbit EUART = IE^4; //UART中断使能控制 0:关闭SIF中断 1:打开SIF中断 +sbit ET1 = IE^3; //Timer1中断使能控制 0:关闭TIMER1中断 1:打开TIMER1中断 +sbit EINT1 = IE^2; //外部中断1中断使能控制 0:关闭外部中断1中断 1:打开外部中断1中断 +sbit ET0 = IE^1; //Timer0中断使能控制 0:关闭TIMER0中断 1:打开TIMER0中断 +sbit EINT0 = IE^0; //外部中断0中断使能控制 0:关闭外部中断0中断 1:打开外部中断0中断 + +/*TCON*/ +sbit TF1 = TCON^7; //T1溢出中断请求标志位 T1产生溢出,发生中断时,硬件将TF1置为“1”,申请中断,CPU响应时,硬件清“0”。 +sbit TR1 = TCON^6; //定时器T1的运行控制位 0:Timer1禁止计数 1:Timer1开始计数 +sbit TF0 = TCON^5; //T0溢出中断请求标志位 T0产生溢出,发生中断时,硬件将TF0置为“1”,申请中断,CPU响应时,硬件清“0”。 +sbit TR0 = TCON^4; //定时器T0的运行控制位 0:Timer0禁止计数 1:Timer0开始计数 + + +/*SCON*/ +sbit SM0 = SCON^7; //串行通信模式控制位:与SM1配合使用 00: 模式0,8位半双工同步通信模式 01: 模式1,10位全双工异步通信 11: 模式3,11位全双工异步通信 +sbit SM1 = SCON^6; //串行通信模式控制位 +sbit SM2 = SCON^5; //串行通信模式控制位2,此控制位只对模式3有效 0:每收到一个完整数据帧就置位RI产生中断请求 1:收到一个完整的数据帧时,只有当RB8=1时才会置位RI产生中断请求 +sbit REN = SCON^4; //接收允许控制位 0:不允许接受数据 1:允许接受数据 +sbit TB8 = SCON^3; //只对模式3有效,为发送数据的第9位 +sbit RB8 = SCON^2; //只对模式3有效,为接收数据的第9位 +sbit TI = SCON^1; //发送中断标志位 +sbit RI = SCON^0; //接收中断标志位 + + +/******************* P0 *********************** +*SC92L8535封装未引出的管脚:无 +*SC92L8533封装未引出的管脚:无 +*SC92L8532封装未引出的管脚:P06/P07 +*SC92L8531封装未引出的管脚:P02/P03/P04/P06/P07 +***********************************************/ +sbit P07 = P0^7; +sbit P06 = P0^6; +sbit P05 = P0^5; +sbit P04 = P0^4; +sbit P03 = P0^3; +sbit P02 = P0^2; +sbit P01 = P0^1; +sbit P00 = P0^0; + +/******************* P1 *********************** +*SC92L8535封装未引出的管脚:无 +*SC92L8533封装未引出的管脚:无 +*SC92L8532封装未引出的管脚:无 +*SC92L8531封装未引出的管脚:无 +***********************************************/ +sbit P17 = P1^7; +sbit P16 = P1^6; +sbit P15 = P1^5; +sbit P14 = P1^4; +sbit P13 = P1^3; +sbit P12 = P1^2; +sbit P11 = P1^1; +sbit P10 = P1^0; + +/******************* P2 *********************** +*SC92L8535封装未引出的管脚:无 +*SC92L8533封装未引出的管脚:无 +*SC92L8532封装未引出的管脚:无 +*SC92L8531封装未引出的管脚:P22/P23/P27 +***********************************************/ +sbit P27 = P2^7; +sbit P26 = P2^6; +sbit P25 = P2^5; +sbit P24 = P2^4; +sbit P23 = P2^3; +sbit P22 = P2^2; +sbit P21 = P2^1; +sbit P20 = P2^0; + + +/******************* P5 *********************** +*SC92L8535封装未引出的管脚:无 +*SC92L8533封装未引出的管脚:P52/P53/P54/P55 +*SC92L8532封装未引出的管脚:P5 +*SC92L8531封装未引出的管脚:P5 +***********************************************/ +sbit P55 = P5^5; +sbit P54 = P5^4; +sbit P53 = P5^3; +sbit P52 = P5^2; +sbit P51 = P5^1; +sbit P50 = P5^0; + +/**************************************************************************** +*注意:封装未引出的管脚,需设置为强推挽输出模式 +*IC选型:请根据所使用的IC型号,在初始化完IO口后,调用相对应的未引出管脚的IO口配置; +*如若选SC92L8535,则不用调用宏定义。 +*****************************************************************************/ +#define SC92L8533_NIO_Init() {P5CON|=0x3C;} //SC92L8533的未引出来的IO口配置 +#define SC92L8532_NIO_Init() {P0CON|=0xC0,P5CON|=0x3F;} //SC92L8532的未引出来的IO口配置 +#define SC92L8531_NIO_Init() {P0CON|=0xDC,P2CON|=0X8C,P5CON|=0x3F;} //SC92L8531的未引出来的IO口配置 +#endif diff --git a/Keil_C/FWLib/SC92F_Lib/inc/SC92f73Ax_C.H b/Keil_C/FWLib/SC92F_Lib/inc/SC92f73Ax_C.H new file mode 100644 index 0000000..724dc4a --- /dev/null +++ b/Keil_C/FWLib/SC92F_Lib/inc/SC92f73Ax_C.H @@ -0,0 +1,252 @@ + /*-------------------------------------------------------------------------- +SC92F73Ax_C.H + +C Header file for SC92F73Ax microcontroller. +Copyright (c) 2019 Shenzhen SinOne Chip Electronic CO., Ltd. +All rights reserved. +深圳市赛元微电子有限公司 +版本号: V1.0 +日期: 2019.06.17 +--------------------------------------------------------------------------*/ +#ifndef _SC92F73Ax_H_ +#define _SC92F73Ax_H_ + +/* ------------------- 字节寄存器-------------------- */ +///*CPU*/ +sfr ACC = 0xE0; //累加器A +sfr B = 0xF0; //通用寄存器B +sfr PSW = 0xD0; //程序状态字 +sfr DPH = 0x83; //数据指针高8位 +sfr DPL = 0x82; //数据指针低8位 +sfr SP = 0x81; //堆栈指针 + + +/*system*/ +sfr PCON = 0x87; //电源管理控制寄存器 + +/*interrupt*/ +sfr IP1 = 0XB9; //中断优先级控制寄存器1 +sfr IP = 0xB8; //中断优先权控制寄存器 +sfr IE = 0xA8; //中断控制寄存器 +sfr IE1 = 0XA9; //中断控制寄存器1 + +/*PORT*/ +sfr P5PH = 0xDA; //P5口模式控制寄存器 +sfr P5CON = 0xD9; //P5口模式控制寄存器 +sfr P5 = 0xD8; //P5口数据寄存器 +sfr P2PH = 0xA2; //P2口模式控制寄存器 +sfr P2CON = 0xA1; //P2口模式控制寄存器 +sfr P2 = 0xA0; //P2口数据寄存器 +sfr P1PH = 0x92; //P1口模式控制寄存器 +sfr P1CON = 0x91; //P1口模式控制寄存器 +sfr P1 = 0x90; //P1口数据寄存器 +sfr P0PH = 0x9B; //P0口模式控制寄存器 +sfr P0CON = 0x9A; //P0口模式控制寄存器 +sfr P0 = 0x80; //P0口数据寄存器 +sfr IOHCON = 0x97; //IOH设置寄存器 + +/*TIMER*/ +sfr TMCON = 0x8E; //定时器频率控制寄存器 +sfr TH1 = 0x8D; //定时器1高8位 +sfr TH0 = 0x8C; //定时器0高8位 +sfr TL1 = 0x8B; //定时器1低8位 +sfr TL0 = 0x8A; //定时器0低8位 +sfr TMOD = 0x89; //定时器工作模式寄存器 +sfr TCON = 0x88; //定时器控制寄存器 +sfr T2CON = 0xC8; //定时器2控制寄存器 +sfr T2MOD = 0xC9; //定时器2工作模式寄存器 +sfr RCAP2L = 0xCA; //定时器2重载/捕捉低8位 +sfr RCAP2H = 0xCB; //定时器2重载/捕捉高8位 +sfr TL2 = 0xCC; //定时器2低8位 +sfr TH2 = 0xCD; //定时器2高8位 + +/*ADC*/ +sfr ADCCFG0 = 0xAB; //ADC功能配置寄存器0 +sfr ADCCFG1 = 0xAC; //ADC功能配置寄存器1 +sfr ADCCFG2 = 0XAA; //ADC功能配置寄存器2 +sfr ADCCON = 0XAD; //ADC控制寄存器 +sfr ADCVL = 0xAE; //ADC 结果寄存器 +sfr ADCVH = 0xAF; //ADC 结果寄存器 + +/*PWM*/ +sfr PWMCFG = 0xD1; //PWM设置寄存器 +sfr PWMCON = 0xD2; //PWM控制寄存器 +sfr PWMPRD = 0xD3; //PWM周期设置寄存器 +sfr PWMDTYA = 0xD4; //PWM占空比设置寄存器A +sfr PWMDTY0 = 0xD5; //PWM0设置寄存器 +sfr PWMDTY1 = 0xD6; //PWM1设置寄存器 +sfr PWMDTY2 = 0xD7; //PWM2设置寄存器 +sfr PWMDTYB = 0xDC; //PWM占空比设置寄存器B +sfr PWMDTY3 = 0xDD; //PWM3设置寄存器 +sfr PWMDTY4 = 0xDE; //PWM4设置寄存器 +sfr PWMDTY5 = 0xDF; //PWM5设置寄存器 + +///*WatchDog*/ +sfr BTMCON = 0XCE; //低频定时器控制寄存器 +sfr WDTCON = 0xCF; //WDT控制寄存器 + +/*LCD*/ +sfr OTCON = 0X8F; //输出控制寄存器 +sfr P0VO = 0X9C; //P0 LCD Bais 输出寄存器 + +/*INT*/ +sfr INT0F = 0XBA; //INT0 下降沿中断控制寄存器 +sfr INT0R = 0XBB; //INT0 上降沿中断控制寄存器 +sfr INT1F = 0XBC; //INT1 下降沿中断控制寄存器 +sfr INT1R = 0XBD; //INT1 上降沿中断控制寄存器 +sfr INT2F = 0XC6; //INT2 下降沿中断控制寄存器 +sfr INT2R = 0XC7; //INT2 上降沿中断控制寄存器 + +/*IAP */ +sfr IAPCTL = 0xF6; //IAP控制寄存器 +sfr IAPDAT = 0xF5; //IAP数据寄存器 +sfr IAPADE = 0xF4; //IAP扩展地址寄存器 +sfr IAPADH = 0xF3; //IAP写入地址高位寄存器 +sfr IAPADL = 0xF2; //IAP写入地址低8位寄存器 +sfr IAPKEY = 0xF1; //IAP保护寄存器 + +/*uart*/ +sfr SCON = 0x98; //串口控制寄存器 +sfr SBUF = 0x99; //串口数据缓存寄存器 + +/*三合一*/ +sfr SSCON0 = 0X9D; //SPI控制寄存器0 +sfr SSCON1 = 0X9E; //SPI控制寄存器1 +sfr SSCON2 = 0X95; //SPI控制寄存器2 +sfr SSDAT = 0X9F; //SPI数据寄存器 + +sfr OPINX = 0XFE; //Option 指针 +sfr OPREG = 0XFF; //Option寄存器 +sfr EXADH = 0XF7; //外部SRAM操作地址高位 + +/*Check Sum*/ +sfr CHKSUML = 0XFC; //Check Sum结果寄存器低位 +sfr CHKSUMH = 0XFD; //Check Sum结果寄存器高位 + +/*乘除法*/ +sfr EXA0 = 0xE9; //扩展累加器0 +sfr EXA1 = 0xEA; //扩展累加器1 +sfr EXA2 = 0xEB; //扩展累加器2 +sfr EXA3 = 0xEC; //扩展累加器3 +sfr EXBL = 0xED; //扩展B寄存器0 +sfr EXBH = 0xEE; //扩展B寄存器1 +sfr OPERCON = 0xEF; //运算控制寄存器 + +/* ------------------- 位寄存器-------------------- */ +/*PSW*/ +sbit CY = PSW^7; //标志位 0:加法运算最高位无进位,或者减法运算最高位无借位时 1:加法运算最高位有进位,或者减法运算最高位有借位时 +sbit AC = PSW^6; //进位辅助标志位 0:无借位、进位 1:加法运算时在bit3位有进位,或减法运算在bit3位有借位时 +sbit F0 = PSW^5; //用户标志位 +sbit RS1 = PSW^4; //工作寄存器组选择位 +sbit RS0 = PSW^3; //工作寄存器组选择位 +sbit OV = PSW^2; //溢出标志位 +sbit F1 = PSW^1; //F1标志 +sbit P = PSW^0; //奇偶标志位 0:ACC中1的个数为偶数(包括0个) 1:ACC中1的个数为奇数 + +/*T2CON*/ +sbit TF2 = T2CON^7; +sbit EXF2 = T2CON^6; +sbit RCLK = T2CON^5; +sbit TCLK = T2CON^4; +sbit EXEN2 = T2CON^3; +sbit TR2 = T2CON^2; +sbit T2 = T2CON^1; +sbit CP = T2CON^0; + + +/*IP*/ +sbit IPADC = IP^6; //ADC中断优先控制位 0:设定 ADC的中断优先权是 “低” 1:设定 ADC的中断优先权是 “高” +sbit IPT2 = IP^5; //Timer2中断优先控制位 0:设定 Timer2的中断优先权是 “低” 1:设定Timer2的中断优先权是 “高” +sbit IPUART = IP^4; //UART中断优先控制位 0:设定UART的中断优先权是 “低” 1:设定UART的中断优先权是 “高” +sbit IPT1 = IP^3; //Timer1中断优先控制位 0:设定 Timer 1的中断优先权是 “低” 1:设定 Timer 1的中断优先权是 “高” +sbit IPINT1 = IP^2; //INT1中断优先控制位 0:设定INT1中断优先权是 “低” 1:设定INT1的中断优先权是 “高” +sbit IPT0 = IP^1; //Timer0中断优先控制位 0:设定 Timer 0的中断优先权是 “低” 1:设定 Timer 0的中断优先权是 “高” +sbit IPINT0 = IP^0; //INT0中断优先控制位 0:设定INT0中断优先权是 “低” 1:设定INT0的中断优先权是 “高” + +/*IE*/ +sbit EA = IE^7; //中断使能的总控制 0:关闭所有的中断 1:打开所有的中断 +sbit EADC = IE^6; //ADC中断使能控制 0:关闭ADC中断 1:打开ADC中断 +sbit ET2 = IE^5; //Timer2中断使能控制 0:关闭Timer2中断 1:打开Timer2中断 +sbit EUART = IE^4; //UART中断使能控制 0:关闭UART中断 1:打开UART中断 +sbit ET1 = IE^3; //Timer1中断使能控制 0:关闭TIMER1中断 1:打开TIMER1中断 +sbit EINT1 = IE^2; //INT1中断使能控制 0:关闭INT1中断 1:打开INT1中断 +sbit ET0 = IE^1; //Timer0中断使能控制 0:关闭TIMER0中断 1:打开TIMER0中断 +sbit EINT0 = IE^0; //INT0中断使能控制 0:关闭INT0中断 1:打开INT0中断 + +/*TCON*/ +sbit TF1 = TCON^7; //T1溢出中断请求标志位 T1产生溢出,发生中断时,硬件将TF1置为“1”,申请中断,CPU响应时,硬件清“0”。 +sbit TR1 = TCON^6; //定时器T1的运行控制位 0:Timer1禁止计数 1:Timer1开始计数 +sbit TF0 = TCON^5; //T0溢出中断请求标志位 T0产生溢出,发生中断时,硬件将TF0置为“1”,申请中断,CPU响应时,硬件清“0”。 +sbit TR0 = TCON^4; //定时器T0的运行控制位 0:Timer0禁止计数 1:Timer0开始计数 +sbit BITIE1 = TCON^3; //INT1溢出中断请求标志 0:CPU响应后,硬件清零 1:中断产生 +sbit BITIE0 = TCON^1; //INT0溢出中断请求标志 0:CPU响应后,硬件清零 1:中断产生 + +/*SCON*/ +sbit SM0 = SCON^7; +sbit SM1 = SCON^6; +sbit SM2 = SCON^5; +sbit REN = SCON^4; +sbit TB8 = SCON^3; +sbit RB8 = SCON^2; +sbit TI = SCON^1; +sbit RI = SCON^0; + +/******************* P0 ****************** +*SC92F73A3封装未引出的管脚:无 +*SC92F73A2封装未引出的管脚:P06/P07 +*SC92F73A1封装未引出的管脚:P02/P03/P04/P06/P07 +******************************************/ +sbit P07 = P0^7; +sbit P06 = P0^6; +sbit P05 = P0^5; +sbit P04 = P0^4; +sbit P03 = P0^3; +sbit P02 = P0^2; +sbit P01 = P0^1; +sbit P00 = P0^0; + +/******************* P1 ****************** +*SC92F73A3封装未引出的管脚:无 +*SC92F73A2封装未引出的管脚:P16/P17 +*SC92F73A1封装未引出的管脚:P16/P17 +******************************************/ +sbit P17 = P1^7; +sbit P16 = P1^6; +sbit P15 = P1^5; +sbit P14 = P1^4; +sbit P13 = P1^3; +sbit P12 = P1^2; +sbit P11 = P1^1; +sbit P10 = P1^0; + +/******************* P2 ****************** +*SC92F73A3封装未引出的管脚:无 +*SC92F73A2封装未引出的管脚:P22/P23 +*SC92F73A1封装未引出的管脚:P22/P23/P27 +******************************************/ +sbit P27 = P2^7; +sbit P26 = P2^6; +sbit P25 = P2^5; +sbit P24 = P2^4; +sbit P23 = P2^3; +sbit P22 = P2^2; +sbit P21 = P2^1; +sbit P20 = P2^0; + +/******************* P5 ****************** +*SC92F73A3封装未引出的管脚:无 +*SC92F73A2封装未引出的管脚:P50/P51 +*SC92F73A1封装未引出的管脚:P50/P51 +******************************************/ +sbit P51 = P5^1; +sbit P50 = P5^0; + +/**************************************************************************** +*注意:封装未引出的管脚,需设置为强推挽输出模式 +*IC选型:请根据所使用的IC型号,在初始化完IO口后,调用相对应的未引出管脚的IO口配置; +*如若选择SC92F73A3,则不用调用宏定义。 +*****************************************************************************/ +#define SC92F73A2_NIO_Init() {P0CON|=0xC0,P1CON|=0xC0,P2CON|=0x0C,P5CON|=0x03;} //SC92F73A2的未引出来的IO口配置 +#define SC92F73A1_NIO_Init() {P0CON|=0xDC,P1CON|=0xC0,P2CON|=0x8C,P5CON|=0x03;} //SC92F73A1的未引出来的IO口配置 + +#endif \ No newline at end of file diff --git a/Keil_C/FWLib/SC92F_Lib/inc/SC92f74Ax_C.H b/Keil_C/FWLib/SC92F_Lib/inc/SC92f74Ax_C.H new file mode 100644 index 0000000..03a091e --- /dev/null +++ b/Keil_C/FWLib/SC92F_Lib/inc/SC92f74Ax_C.H @@ -0,0 +1,253 @@ + /*-------------------------------------------------------------------------- +SC92F74Ax_C.H + +C Header file for SC92F74Ax microcontroller. +Copyright (c) 2019 Shenzhen SinOne Chip Electronic CO., Ltd. +All rights reserved. +深圳市赛元微电子有限公司 +版本号: V1.0 +日期: 2019.06.17 +--------------------------------------------------------------------------*/ +#ifndef _SC92F74Ax_H_ +#define _SC92F74Ax_H_ + +/* ------------------- 字节寄存器-------------------- */ +///*CPU*/ +sfr ACC = 0xE0; //累加器A +sfr B = 0xF0; //通用寄存器B +sfr PSW = 0xD0; //程序状态字 +sfr DPH = 0x83; //数据指针高8位 +sfr DPL = 0x82; //数据指针低8位 +sfr SP = 0x81; //堆栈指针 + + +/*system*/ +sfr PCON = 0x87; //电源管理控制寄存器 + +/*interrupt*/ +sfr IP1 = 0XB9; //中断优先级控制寄存器1 +sfr IP = 0xB8; //中断优先权控制寄存器 +sfr IE = 0xA8; //中断控制寄存器 +sfr IE1 = 0XA9; //中断控制寄存器1 + +/*PORT*/ +sfr P5PH = 0xDA; //P5口模式控制寄存器 +sfr P5CON = 0xD9; //P5口模式控制寄存器 +sfr P5 = 0xD8; //P5口数据寄存器 +sfr P2PH = 0xA2; //P2口模式控制寄存器 +sfr P2CON = 0xA1; //P2口模式控制寄存器 +sfr P2 = 0xA0; //P2口数据寄存器 +sfr P1PH = 0x92; //P1口模式控制寄存器 +sfr P1CON = 0x91; //P1口模式控制寄存器 +sfr P1 = 0x90; //P1口数据寄存器 +sfr P0PH = 0x9B; //P0口模式控制寄存器 +sfr P0CON = 0x9A; //P0口模式控制寄存器 +sfr P0 = 0x80; //P0口数据寄存器 +sfr IOHCON = 0x97; //IOH设置寄存器 + +/*TIMER*/ +sfr TMCON = 0x8E; //定时器频率控制寄存器 +sfr TH1 = 0x8D; //定时器1高8位 +sfr TH0 = 0x8C; //定时器0高8位 +sfr TL1 = 0x8B; //定时器1低8位 +sfr TL0 = 0x8A; //定时器0低8位 +sfr TMOD = 0x89; //定时器工作模式寄存器 +sfr TCON = 0x88; //定时器控制寄存器 +sfr T2CON = 0xC8; //定时器2控制寄存器 +sfr T2MOD = 0xC9; //定时器2工作模式寄存器 +sfr RCAP2L = 0xCA; //定时器2重载/捕捉低8位 +sfr RCAP2H = 0xCB; //定时器2重载/捕捉高8位 +sfr TL2 = 0xCC; //定时器2低8位 +sfr TH2 = 0xCD; //定时器2高8位 + + +/*ADC*/ +sfr ADCCFG0 = 0xAB; //ADC功能配置寄存器0 +sfr ADCCFG1 = 0xAC; //ADC功能配置寄存器1 +sfr ADCCFG2 = 0XAA; //ADC功能配置寄存器2 +sfr ADCCON = 0XAD; //ADC控制寄存器 +sfr ADCVL = 0xAE; //ADC 结果寄存器 +sfr ADCVH = 0xAF; //ADC 结果寄存器 + +/*PWM*/ +sfr PWMCFG = 0xD1; //PWM设置寄存器 +sfr PWMCON = 0xD2; //PWM控制寄存器 +sfr PWMPRD = 0xD3; //PWM周期设置寄存器 +sfr PWMDTYA = 0xD4; //PWM占空比设置寄存器A +sfr PWMDTY0 = 0xD5; //PWM0设置寄存器 +sfr PWMDTY1 = 0xD6; //PWM1设置寄存器 +sfr PWMDTY2 = 0xD7; //PWM2设置寄存器 +sfr PWMDTYB = 0xDC; //PWM占空比设置寄存器B +sfr PWMDTY3 = 0xDD; //PWM3设置寄存器 +sfr PWMDTY4 = 0xDE; //PWM4设置寄存器 +sfr PWMDTY5 = 0xDF; //PWM5设置寄存器 + +///*WatchDog*/ +sfr BTMCON = 0XCE; //低频定时器控制寄存器 +sfr WDTCON = 0xCF; //WDT控制寄存器 + +/*LCD*/ +sfr OTCON = 0X8F; //输出控制寄存器 +sfr P0VO = 0X9C; //P0 LCD Bais 输出寄存器 + +/*INT*/ +sfr INT0F = 0XBA; //INT0 下降沿中断控制寄存器 +sfr INT0R = 0XBB; //INT0 上降沿中断控制寄存器 +sfr INT1F = 0XBC; //INT1 下降沿中断控制寄存器 +sfr INT1R = 0XBD; //INT1 上降沿中断控制寄存器 +sfr INT2F = 0XC6; //INT2 下降沿中断控制寄存器 +sfr INT2R = 0XC7; //INT2 上降沿中断控制寄存器 + +/*IAP */ +sfr IAPCTL = 0xF6; //IAP控制寄存器 +sfr IAPDAT = 0xF5; //IAP数据寄存器 +sfr IAPADE = 0xF4; //IAP扩展地址寄存器 +sfr IAPADH = 0xF3; //IAP写入地址高位寄存器 +sfr IAPADL = 0xF2; //IAP写入地址低8位寄存器 +sfr IAPKEY = 0xF1; //IAP保护寄存器 + +/*uart*/ +sfr SCON = 0x98; //串口控制寄存器 +sfr SBUF = 0x99; //串口数据缓存寄存器 + +/*三合一*/ +sfr SSCON0 = 0X9D; //SPI控制寄存器0 +sfr SSCON1 = 0X9E; //SPI控制寄存器1 +sfr SSCON2 = 0X95; //SPI控制寄存器2 +sfr SSDAT = 0X9F; //SPI数据寄存器 + +sfr OPINX = 0XFE; //Option 指针 +sfr OPREG = 0XFF; //Option寄存器 +sfr EXADH = 0XF7; //外部SRAM操作地址高位 + +/*Check Sum*/ +sfr CHKSUML = 0XFC; //Check Sum结果寄存器低位 +sfr CHKSUMH = 0XFD; //Check Sum结果寄存器高位 + +/*乘除法*/ +sfr EXA0 = 0xE9; //扩展累加器0 +sfr EXA1 = 0xEA; //扩展累加器1 +sfr EXA2 = 0xEB; //扩展累加器2 +sfr EXA3 = 0xEC; //扩展累加器3 +sfr EXBL = 0xED; //扩展B寄存器0 +sfr EXBH = 0xEE; //扩展B寄存器1 +sfr OPERCON = 0xEF; //运算控制寄存器 + +/* ------------------- 位寄存器-------------------- */ +/*PSW*/ +sbit CY = PSW^7; //标志位 0:加法运算最高位无进位,或者减法运算最高位无借位时 1:加法运算最高位有进位,或者减法运算最高位有借位时 +sbit AC = PSW^6; //进位辅助标志位 0:无借位、进位 1:加法运算时在bit3位有进位,或减法运算在bit3位有借位时 +sbit F0 = PSW^5; //用户标志位 +sbit RS1 = PSW^4; //工作寄存器组选择位 +sbit RS0 = PSW^3; //工作寄存器组选择位 +sbit OV = PSW^2; //溢出标志位 +sbit F1 = PSW^1; //F1标志 +sbit P = PSW^0; //奇偶标志位 0:ACC中1的个数为偶数(包括0个) 1:ACC中1的个数为奇数 + +/*T2CON*/ +sbit TF2 = T2CON^7; +sbit EXF2 = T2CON^6; +sbit RCLK = T2CON^5; +sbit TCLK = T2CON^4; +sbit EXEN2 = T2CON^3; +sbit TR2 = T2CON^2; +sbit T2 = T2CON^1; +sbit CP = T2CON^0; + + +/*IP*/ +sbit IPADC = IP^6; //ADC中断优先控制位 0:设定 ADC的中断优先权是 “低” 1:设定 ADC的中断优先权是 “高” +sbit IPT2 = IP^5; //Timer2中断优先控制位 0:设定 Timer2的中断优先权是 “低” 1:设定Timer2的中断优先权是 “高” +sbit IPUART = IP^4; //UART中断优先控制位 0:设定UART的中断优先权是 “低” 1:设定UART的中断优先权是 “高” +sbit IPT1 = IP^3; //Timer1中断优先控制位 0:设定 Timer 1的中断优先权是 “低” 1:设定 Timer 1的中断优先权是 “高” +sbit IPINT1 = IP^2; //INT1中断优先控制位 0:设定INT1中断优先权是 “低” 1:设定INT1的中断优先权是 “高” +sbit IPT0 = IP^1; //Timer0中断优先控制位 0:设定 Timer 0的中断优先权是 “低” 1:设定 Timer 0的中断优先权是 “高” +sbit IPINT0 = IP^0; //INT0中断优先控制位 0:设定INT0中断优先权是 “低” 1:设定INT0的中断优先权是 “高” + +/*IE*/ +sbit EA = IE^7; //中断使能的总控制 0:关闭所有的中断 1:打开所有的中断 +sbit EADC = IE^6; //ADC中断使能控制 0:关闭ADC中断 1:打开ADC中断 +sbit ET2 = IE^5; //Timer2中断使能控制 0:关闭Timer2中断 1:打开Timer2中断 +sbit EUART = IE^4; //UART中断使能控制 0:关闭UART中断 1:打开UART中断 +sbit ET1 = IE^3; //Timer1中断使能控制 0:关闭TIMER1中断 1:打开TIMER1中断 +sbit EINT1 = IE^2; //INT1中断使能控制 0:关闭INT1中断 1:打开INT1中断 +sbit ET0 = IE^1; //Timer0中断使能控制 0:关闭TIMER0中断 1:打开TIMER0中断 +sbit EINT0 = IE^0; //INT0中断使能控制 0:关闭INT0中断 1:打开INT0中断 + +/*TCON*/ +sbit TF1 = TCON^7; //T1溢出中断请求标志位 T1产生溢出,发生中断时,硬件将TF1置为“1”,申请中断,CPU响应时,硬件清“0”。 +sbit TR1 = TCON^6; //定时器T1的运行控制位 0:Timer1禁止计数 1:Timer1开始计数 +sbit TF0 = TCON^5; //T0溢出中断请求标志位 T0产生溢出,发生中断时,硬件将TF0置为“1”,申请中断,CPU响应时,硬件清“0”。 +sbit TR0 = TCON^4; //定时器T0的运行控制位 0:Timer0禁止计数 1:Timer0开始计数 +sbit BITIE1 = TCON^3; //INT1溢出中断请求标志 0:CPU响应后,硬件清零 1:中断产生 +sbit BITIE0 = TCON^1; //INT0溢出中断请求标志 0:CPU响应后,硬件清零 1:中断产生 + +/*SCON*/ +sbit SM0 = SCON^7; +sbit SM1 = SCON^6; +sbit SM2 = SCON^5; +sbit REN = SCON^4; +sbit TB8 = SCON^3; +sbit RB8 = SCON^2; +sbit TI = SCON^1; +sbit RI = SCON^0; + +/******************* P0 ****************** +*SC92F74A3封装未引出的管脚:无 +*SC92F74A2封装未引出的管脚:P06/P07 +*SC92F74A1封装未引出的管脚:P02/P03/P04/P06/P07 +******************************************/ +sbit P07 = P0^7; +sbit P06 = P0^6; +sbit P05 = P0^5; +sbit P04 = P0^4; +sbit P03 = P0^3; +sbit P02 = P0^2; +sbit P01 = P0^1; +sbit P00 = P0^0; + +/******************* P1 ****************** +*SC92F74A3封装未引出的管脚:无 +*SC92F74A2封装未引出的管脚:P16/P17 +*SC92F74A1封装未引出的管脚:P16/P17 +******************************************/ +sbit P17 = P1^7; +sbit P16 = P1^6; +sbit P15 = P1^5; +sbit P14 = P1^4; +sbit P13 = P1^3; +sbit P12 = P1^2; +sbit P11 = P1^1; +sbit P10 = P1^0; + +/******************* P2 ****************** +*SC92F74A3封装未引出的管脚:无 +*SC92F74A2封装未引出的管脚:P22/P23 +*SC92F74A1封装未引出的管脚:P22/P23/P27 +******************************************/ +sbit P27 = P2^7; +sbit P26 = P2^6; +sbit P25 = P2^5; +sbit P24 = P2^4; +sbit P23 = P2^3; +sbit P22 = P2^2; +sbit P21 = P2^1; +sbit P20 = P2^0; + +/******************* P5 ****************** +*SC92F74A3封装未引出的管脚:无 +*SC92F74A2封装未引出的管脚:P50/P51 +*SC92F74A1封装未引出的管脚:P50/P51 +******************************************/ +sbit P51 = P5^1; +sbit P50 = P5^0; + +/**************************************************************************** +*注意:封装未引出的管脚,需设置为强推挽输出模式 +*IC选型:请根据所使用的IC型号,在初始化完IO口后,调用相对应的未引出管脚的IO口配置; +*如若选择SC92F74A3,则不用调用宏定义。 +*****************************************************************************/ +#define SC92F74A2_NIO_Init() {P0CON|=0xC0,P1CON|=0xC0,P2CON|=0x0C,P5CON|=0x03;} //SC92F74A2的未引出来的IO口配置 +#define SC92F74A1_NIO_Init() {P0CON|=0xDC,P1CON|=0xC0,P2CON|=0x8C,P5CON|=0x03;} //SC92F74A1的未引出来的IO口配置 + +#endif \ No newline at end of file diff --git a/Keil_C/FWLib/SC92F_Lib/inc/SC92f83Ax_C.H b/Keil_C/FWLib/SC92F_Lib/inc/SC92f83Ax_C.H new file mode 100644 index 0000000..04c9bc5 --- /dev/null +++ b/Keil_C/FWLib/SC92F_Lib/inc/SC92f83Ax_C.H @@ -0,0 +1,253 @@ + /*-------------------------------------------------------------------------- +SC92F83Ax_C.H + +C Header file for SC92F83Ax microcontroller. +Copyright (c) 2019 Shenzhen SinOne Chip Electronic CO., Ltd. +All rights reserved. +深圳市赛元微电子有限公司 +版本号: V1.0 +日期: 2019.06.17 +--------------------------------------------------------------------------*/ +#ifndef _SC92F83Ax_H_ +#define _SC92F83Ax_H_ + +/* ------------------- 字节寄存器-------------------- */ +///*CPU*/ +sfr ACC = 0xE0; //累加器A +sfr B = 0xF0; //通用寄存器B +sfr PSW = 0xD0; //程序状态字 +sfr DPH = 0x83; //数据指针高8位 +sfr DPL = 0x82; //数据指针低8位 +sfr SP = 0x81; //堆栈指针 + + +/*system*/ +sfr PCON = 0x87; //电源管理控制寄存器 + +/*interrupt*/ +sfr IP1 = 0XB9; //中断优先级控制寄存器1 +sfr IP = 0xB8; //中断优先权控制寄存器 +sfr IE = 0xA8; //中断控制寄存器 +sfr IE1 = 0XA9; //中断控制寄存器1 + +/*PORT*/ +sfr P5PH = 0xDA; //P5口模式控制寄存器 +sfr P5CON = 0xD9; //P5口模式控制寄存器 +sfr P5 = 0xD8; //P5口数据寄存器 +sfr P2PH = 0xA2; //P2口模式控制寄存器 +sfr P2CON = 0xA1; //P2口模式控制寄存器 +sfr P2 = 0xA0; //P2口数据寄存器 +sfr P1PH = 0x92; //P1口模式控制寄存器 +sfr P1CON = 0x91; //P1口模式控制寄存器 +sfr P1 = 0x90; //P1口数据寄存器 +sfr P0PH = 0x9B; //P0口模式控制寄存器 +sfr P0CON = 0x9A; //P0口模式控制寄存器 +sfr P0 = 0x80; //P0口数据寄存器 +sfr IOHCON = 0x97; //IOH设置寄存器 + +/*TIMER*/ +sfr TMCON = 0x8E; //定时器频率控制寄存器 +sfr TH1 = 0x8D; //定时器1高8位 +sfr TH0 = 0x8C; //定时器0高8位 +sfr TL1 = 0x8B; //定时器1低8位 +sfr TL0 = 0x8A; //定时器0低8位 +sfr TMOD = 0x89; //定时器工作模式寄存器 +sfr TCON = 0x88; //定时器控制寄存器 +sfr T2CON = 0xC8; //定时器2控制寄存器 +sfr T2MOD = 0xC9; //定时器2工作模式寄存器 +sfr RCAP2L = 0xCA; //定时器2重载/捕捉低8位 +sfr RCAP2H = 0xCB; //定时器2重载/捕捉高8位 +sfr TL2 = 0xCC; //定时器2低8位 +sfr TH2 = 0xCD; //定时器2高8位 + + +/*ADC*/ +sfr ADCCFG0 = 0xAB; //ADC功能配置寄存器0 +sfr ADCCFG1 = 0xAC; //ADC功能配置寄存器1 +sfr ADCCFG2 = 0XAA; //ADC功能配置寄存器2 +sfr ADCCON = 0XAD; //ADC控制寄存器 +sfr ADCVL = 0xAE; //ADC 结果寄存器 +sfr ADCVH = 0xAF; //ADC 结果寄存器 + +/*PWM*/ +sfr PWMCFG = 0xD1; //PWM设置寄存器 +sfr PWMCON = 0xD2; //PWM控制寄存器 +sfr PWMPRD = 0xD3; //PWM周期设置寄存器 +sfr PWMDTYA = 0xD4; //PWM占空比设置寄存器A +sfr PWMDTY0 = 0xD5; //PWM0设置寄存器 +sfr PWMDTY1 = 0xD6; //PWM1设置寄存器 +sfr PWMDTY2 = 0xD7; //PWM2设置寄存器 +sfr PWMDTYB = 0xDC; //PWM占空比设置寄存器B +sfr PWMDTY3 = 0xDD; //PWM3设置寄存器 +sfr PWMDTY4 = 0xDE; //PWM4设置寄存器 +sfr PWMDTY5 = 0xDF; //PWM5设置寄存器 + +///*WatchDog*/ +sfr BTMCON = 0XCE; //低频定时器控制寄存器 +sfr WDTCON = 0xCF; //WDT控制寄存器 + +/*LCD*/ +sfr OTCON = 0X8F; //输出控制寄存器 +sfr P0VO = 0X9C; //P0 LCD Bais 输出寄存器 + +/*INT*/ +sfr INT0F = 0XBA; //INT0 下降沿中断控制寄存器 +sfr INT0R = 0XBB; //INT0 上降沿中断控制寄存器 +sfr INT1F = 0XBC; //INT1 下降沿中断控制寄存器 +sfr INT1R = 0XBD; //INT1 上降沿中断控制寄存器 +sfr INT2F = 0XC6; //INT2 下降沿中断控制寄存器 +sfr INT2R = 0XC7; //INT2 上降沿中断控制寄存器 + +/*IAP */ +sfr IAPCTL = 0xF6; //IAP控制寄存器 +sfr IAPDAT = 0xF5; //IAP数据寄存器 +sfr IAPADE = 0xF4; //IAP扩展地址寄存器 +sfr IAPADH = 0xF3; //IAP写入地址高位寄存器 +sfr IAPADL = 0xF2; //IAP写入地址低8位寄存器 +sfr IAPKEY = 0xF1; //IAP保护寄存器 + +/*uart*/ +sfr SCON = 0x98; //串口控制寄存器 +sfr SBUF = 0x99; //串口数据缓存寄存器 + +/*三合一*/ +sfr SSCON0 = 0X9D; //SPI控制寄存器0 +sfr SSCON1 = 0X9E; //SPI控制寄存器1 +sfr SSCON2 = 0X95; //SPI控制寄存器2 +sfr SSDAT = 0X9F; //SPI数据寄存器 + +sfr OPINX = 0XFE; //Option 指针 +sfr OPREG = 0XFF; //Option寄存器 +sfr EXADH = 0XF7; //外部SRAM操作地址高位 + +/*Check Sum*/ +sfr CHKSUML = 0XFC; //Check Sum结果寄存器低位 +sfr CHKSUMH = 0XFD; //Check Sum结果寄存器高位 + +/*乘除法*/ +sfr EXA0 = 0xE9; //扩展累加器0 +sfr EXA1 = 0xEA; //扩展累加器1 +sfr EXA2 = 0xEB; //扩展累加器2 +sfr EXA3 = 0xEC; //扩展累加器3 +sfr EXBL = 0xED; //扩展B寄存器0 +sfr EXBH = 0xEE; //扩展B寄存器1 +sfr OPERCON = 0xEF; //运算控制寄存器 + +/* ------------------- 位寄存器-------------------- */ +/*PSW*/ +sbit CY = PSW^7; //标志位 0:加法运算最高位无进位,或者减法运算最高位无借位时 1:加法运算最高位有进位,或者减法运算最高位有借位时 +sbit AC = PSW^6; //进位辅助标志位 0:无借位、进位 1:加法运算时在bit3位有进位,或减法运算在bit3位有借位时 +sbit F0 = PSW^5; //用户标志位 +sbit RS1 = PSW^4; //工作寄存器组选择位 +sbit RS0 = PSW^3; //工作寄存器组选择位 +sbit OV = PSW^2; //溢出标志位 +sbit F1 = PSW^1; //F1标志 +sbit P = PSW^0; //奇偶标志位 0:ACC中1的个数为偶数(包括0个) 1:ACC中1的个数为奇数 + +/*T2CON*/ +sbit TF2 = T2CON^7; +sbit EXF2 = T2CON^6; +sbit RCLK = T2CON^5; +sbit TCLK = T2CON^4; +sbit EXEN2 = T2CON^3; +sbit TR2 = T2CON^2; +sbit T2 = T2CON^1; +sbit CP = T2CON^0; + + +/*IP*/ +sbit IPADC = IP^6; //ADC中断优先控制位 0:设定 ADC的中断优先权是 “低” 1:设定 ADC的中断优先权是 “高” +sbit IPT2 = IP^5; //Timer2中断优先控制位 0:设定 Timer2的中断优先权是 “低” 1:设定Timer2的中断优先权是 “高” +sbit IPUART = IP^4; //UART中断优先控制位 0:设定UART的中断优先权是 “低” 1:设定UART的中断优先权是 “高” +sbit IPT1 = IP^3; //Timer1中断优先控制位 0:设定 Timer 1的中断优先权是 “低” 1:设定 Timer 1的中断优先权是 “高” +sbit IPINT1 = IP^2; //INT1中断优先控制位 0:设定INT1中断优先权是 “低” 1:设定INT1的中断优先权是 “高” +sbit IPT0 = IP^1; //Timer0中断优先控制位 0:设定 Timer 0的中断优先权是 “低” 1:设定 Timer 0的中断优先权是 “高” +sbit IPINT0 = IP^0; //INT0中断优先控制位 0:设定INT0中断优先权是 “低” 1:设定INT0的中断优先权是 “高” + +/*IE*/ +sbit EA = IE^7; //中断使能的总控制 0:关闭所有的中断 1:打开所有的中断 +sbit EADC = IE^6; //ADC中断使能控制 0:关闭ADC中断 1:打开ADC中断 +sbit ET2 = IE^5; //Timer2中断使能控制 0:关闭Timer2中断 1:打开Timer2中断 +sbit EUART = IE^4; //UART中断使能控制 0:关闭UART中断 1:打开UART中断 +sbit ET1 = IE^3; //Timer1中断使能控制 0:关闭TIMER1中断 1:打开TIMER1中断 +sbit EINT1 = IE^2; //INT1中断使能控制 0:关闭INT1中断 1:打开INT1中断 +sbit ET0 = IE^1; //Timer0中断使能控制 0:关闭TIMER0中断 1:打开TIMER0中断 +sbit EINT0 = IE^0; //INT0中断使能控制 0:关闭INT0中断 1:打开INT0中断 + +/*TCON*/ +sbit TF1 = TCON^7; //T1溢出中断请求标志位 T1产生溢出,发生中断时,硬件将TF1置为“1”,申请中断,CPU响应时,硬件清“0”。 +sbit TR1 = TCON^6; //定时器T1的运行控制位 0:Timer1禁止计数 1:Timer1开始计数 +sbit TF0 = TCON^5; //T0溢出中断请求标志位 T0产生溢出,发生中断时,硬件将TF0置为“1”,申请中断,CPU响应时,硬件清“0”。 +sbit TR0 = TCON^4; //定时器T0的运行控制位 0:Timer0禁止计数 1:Timer0开始计数 +sbit BITIE1 = TCON^3; //INT1溢出中断请求标志 0:CPU响应后,硬件清零 1:中断产生 +sbit BITIE0 = TCON^1; //INT0溢出中断请求标志 0:CPU响应后,硬件清零 1:中断产生 + +/*SCON*/ +sbit SM0 = SCON^7; +sbit SM1 = SCON^6; +sbit SM2 = SCON^5; +sbit REN = SCON^4; +sbit TB8 = SCON^3; +sbit RB8 = SCON^2; +sbit TI = SCON^1; +sbit RI = SCON^0; + +/******************* P0 ****************** +*SC92F83A3封装未引出的管脚:无 +*SC92F83A2封装未引出的管脚:P06/P07 +*SC92F83A1封装未引出的管脚:P02/P03/P04/P06/P07 +******************************************/ +sbit P07 = P0^7; +sbit P06 = P0^6; +sbit P05 = P0^5; +sbit P04 = P0^4; +sbit P03 = P0^3; +sbit P02 = P0^2; +sbit P01 = P0^1; +sbit P00 = P0^0; + +/******************* P1 ****************** +*SC92F83A3封装未引出的管脚:无 +*SC92F83A2封装未引出的管脚:P16/P17 +*SC92F83A1封装未引出的管脚:P16/P17 +******************************************/ +sbit P17 = P1^7; +sbit P16 = P1^6; +sbit P15 = P1^5; +sbit P14 = P1^4; +sbit P13 = P1^3; +sbit P12 = P1^2; +sbit P11 = P1^1; +sbit P10 = P1^0; + +/******************* P2 ****************** +*SC92F83A3封装未引出的管脚:无 +*SC92F83A2封装未引出的管脚:P22/P23 +*SC92F83A1封装未引出的管脚:P22/P23/P27 +******************************************/ +sbit P27 = P2^7; +sbit P26 = P2^6; +sbit P25 = P2^5; +sbit P24 = P2^4; +sbit P23 = P2^3; +sbit P22 = P2^2; +sbit P21 = P2^1; +sbit P20 = P2^0; + +/******************* P5 ****************** +*SC92F83A3封装未引出的管脚:无 +*SC92F83A2封装未引出的管脚:P50/P51 +*SC92F83A1封装未引出的管脚:P50/P51 +******************************************/ +sbit P51 = P5^1; +sbit P50 = P5^0; + +/**************************************************************************** +*注意:封装未引出的管脚,需设置为强推挽输出模式 +*IC选型:请根据所使用的IC型号,在初始化完IO口后,调用相对应的未引出管脚的IO口配置; +*如若选择SC92F83A3,则不用调用宏定义。 +*****************************************************************************/ +#define SC92F83A2_NIO_Init() {P0CON|=0xC0,P1CON|=0xC0,P2CON|=0x0C,P5CON|=0x03;} //SC92F83A2的未引出来的IO口配置 +#define SC92F83A1_NIO_Init() {P0CON|=0xDC,P1CON|=0xC0,P2CON|=0x8C,P5CON|=0x03;} //SC92F83A1的未引出来的IO口配置 + +#endif \ No newline at end of file diff --git a/Keil_C/FWLib/SC92F_Lib/inc/SC92f84Ax_C.H b/Keil_C/FWLib/SC92F_Lib/inc/SC92f84Ax_C.H new file mode 100644 index 0000000..06d7a8e --- /dev/null +++ b/Keil_C/FWLib/SC92F_Lib/inc/SC92f84Ax_C.H @@ -0,0 +1,253 @@ + /*-------------------------------------------------------------------------- +SC92F84Ax_C.H + +C Header file for SC92F84Ax microcontroller. +Copyright (c) 2019 Shenzhen SinOne Chip Electronic CO., Ltd. +All rights reserved. +深圳市赛元微电子有限公司 +版本号: V1.0 +日期: 2019.06.17 +--------------------------------------------------------------------------*/ +#ifndef _SC92F84Ax_H_ +#define _SC92F84Ax_H_ + +/* ------------------- 字节寄存器-------------------- */ +///*CPU*/ +sfr ACC = 0xE0; //累加器A +sfr B = 0xF0; //通用寄存器B +sfr PSW = 0xD0; //程序状态字 +sfr DPH = 0x83; //数据指针高8位 +sfr DPL = 0x82; //数据指针低8位 +sfr SP = 0x81; //堆栈指针 + + +/*system*/ +sfr PCON = 0x87; //电源管理控制寄存器 + +/*interrupt*/ +sfr IP1 = 0XB9; //中断优先级控制寄存器1 +sfr IP = 0xB8; //中断优先权控制寄存器 +sfr IE = 0xA8; //中断控制寄存器 +sfr IE1 = 0XA9; //中断控制寄存器1 + +/*PORT*/ +sfr P5PH = 0xDA; //P5口模式控制寄存器 +sfr P5CON = 0xD9; //P5口模式控制寄存器 +sfr P5 = 0xD8; //P5口数据寄存器 +sfr P2PH = 0xA2; //P2口模式控制寄存器 +sfr P2CON = 0xA1; //P2口模式控制寄存器 +sfr P2 = 0xA0; //P2口数据寄存器 +sfr P1PH = 0x92; //P1口模式控制寄存器 +sfr P1CON = 0x91; //P1口模式控制寄存器 +sfr P1 = 0x90; //P1口数据寄存器 +sfr P0PH = 0x9B; //P0口模式控制寄存器 +sfr P0CON = 0x9A; //P0口模式控制寄存器 +sfr P0 = 0x80; //P0口数据寄存器 +sfr IOHCON = 0x97; //IOH设置寄存器 + +/*TIMER*/ +sfr TMCON = 0x8E; //定时器频率控制寄存器 +sfr TH1 = 0x8D; //定时器1高8位 +sfr TH0 = 0x8C; //定时器0高8位 +sfr TL1 = 0x8B; //定时器1低8位 +sfr TL0 = 0x8A; //定时器0低8位 +sfr TMOD = 0x89; //定时器工作模式寄存器 +sfr TCON = 0x88; //定时器控制寄存器 +sfr T2CON = 0xC8; //定时器2控制寄存器 +sfr T2MOD = 0xC9; //定时器2工作模式寄存器 +sfr RCAP2L = 0xCA; //定时器2重载/捕捉低8位 +sfr RCAP2H = 0xCB; //定时器2重载/捕捉高8位 +sfr TL2 = 0xCC; //定时器2低8位 +sfr TH2 = 0xCD; //定时器2高8位 + + +/*ADC*/ +sfr ADCCFG0 = 0xAB; //ADC功能配置寄存器0 +sfr ADCCFG1 = 0xAC; //ADC功能配置寄存器1 +sfr ADCCFG2 = 0XAA; //ADC功能配置寄存器2 +sfr ADCCON = 0XAD; //ADC控制寄存器 +sfr ADCVL = 0xAE; //ADC 结果寄存器 +sfr ADCVH = 0xAF; //ADC 结果寄存器 + +/*PWM*/ +sfr PWMCFG = 0xD1; //PWM设置寄存器 +sfr PWMCON = 0xD2; //PWM控制寄存器 +sfr PWMPRD = 0xD3; //PWM周期设置寄存器 +sfr PWMDTYA = 0xD4; //PWM占空比设置寄存器A +sfr PWMDTY0 = 0xD5; //PWM0设置寄存器 +sfr PWMDTY1 = 0xD6; //PWM1设置寄存器 +sfr PWMDTY2 = 0xD7; //PWM2设置寄存器 +sfr PWMDTYB = 0xDC; //PWM占空比设置寄存器B +sfr PWMDTY3 = 0xDD; //PWM3设置寄存器 +sfr PWMDTY4 = 0xDE; //PWM4设置寄存器 +sfr PWMDTY5 = 0xDF; //PWM5设置寄存器 + +///*WatchDog*/ +sfr BTMCON = 0XCE; //低频定时器控制寄存器 +sfr WDTCON = 0xCF; //WDT控制寄存器 + +/*LCD*/ +sfr OTCON = 0X8F; //输出控制寄存器 +sfr P0VO = 0X9C; //P0 LCD Bais 输出寄存器 + +/*INT*/ +sfr INT0F = 0XBA; //INT0 下降沿中断控制寄存器 +sfr INT0R = 0XBB; //INT0 上降沿中断控制寄存器 +sfr INT1F = 0XBC; //INT1 下降沿中断控制寄存器 +sfr INT1R = 0XBD; //INT1 上降沿中断控制寄存器 +sfr INT2F = 0XC6; //INT2 下降沿中断控制寄存器 +sfr INT2R = 0XC7; //INT2 上降沿中断控制寄存器 + +/*IAP */ +sfr IAPCTL = 0xF6; //IAP控制寄存器 +sfr IAPDAT = 0xF5; //IAP数据寄存器 +sfr IAPADE = 0xF4; //IAP扩展地址寄存器 +sfr IAPADH = 0xF3; //IAP写入地址高位寄存器 +sfr IAPADL = 0xF2; //IAP写入地址低8位寄存器 +sfr IAPKEY = 0xF1; //IAP保护寄存器 + +/*uart*/ +sfr SCON = 0x98; //串口控制寄存器 +sfr SBUF = 0x99; //串口数据缓存寄存器 + +/*三合一*/ +sfr SSCON0 = 0X9D; //SPI控制寄存器0 +sfr SSCON1 = 0X9E; //SPI控制寄存器1 +sfr SSCON2 = 0X95; //SPI控制寄存器2 +sfr SSDAT = 0X9F; //SPI数据寄存器 + +sfr OPINX = 0XFE; //Option 指针 +sfr OPREG = 0XFF; //Option寄存器 +sfr EXADH = 0XF7; //外部SRAM操作地址高位 + +/*Check Sum*/ +sfr CHKSUML = 0XFC; //Check Sum结果寄存器低位 +sfr CHKSUMH = 0XFD; //Check Sum结果寄存器高位 + +/*乘除法*/ +sfr EXA0 = 0xE9; //扩展累加器0 +sfr EXA1 = 0xEA; //扩展累加器1 +sfr EXA2 = 0xEB; //扩展累加器2 +sfr EXA3 = 0xEC; //扩展累加器3 +sfr EXBL = 0xED; //扩展B寄存器0 +sfr EXBH = 0xEE; //扩展B寄存器1 +sfr OPERCON = 0xEF; //运算控制寄存器 + +/* ------------------- 位寄存器-------------------- */ +/*PSW*/ +sbit CY = PSW^7; //标志位 0:加法运算最高位无进位,或者减法运算最高位无借位时 1:加法运算最高位有进位,或者减法运算最高位有借位时 +sbit AC = PSW^6; //进位辅助标志位 0:无借位、进位 1:加法运算时在bit3位有进位,或减法运算在bit3位有借位时 +sbit F0 = PSW^5; //用户标志位 +sbit RS1 = PSW^4; //工作寄存器组选择位 +sbit RS0 = PSW^3; //工作寄存器组选择位 +sbit OV = PSW^2; //溢出标志位 +sbit F1 = PSW^1; //F1标志 +sbit P = PSW^0; //奇偶标志位 0:ACC中1的个数为偶数(包括0个) 1:ACC中1的个数为奇数 + +/*T2CON*/ +sbit TF2 = T2CON^7; +sbit EXF2 = T2CON^6; +sbit RCLK = T2CON^5; +sbit TCLK = T2CON^4; +sbit EXEN2 = T2CON^3; +sbit TR2 = T2CON^2; +sbit T2 = T2CON^1; +sbit CP = T2CON^0; + + +/*IP*/ +sbit IPADC = IP^6; //ADC中断优先控制位 0:设定 ADC的中断优先权是 “低” 1:设定 ADC的中断优先权是 “高” +sbit IPT2 = IP^5; //Timer2中断优先控制位 0:设定 Timer2的中断优先权是 “低” 1:设定Timer2的中断优先权是 “高” +sbit IPUART = IP^4; //UART中断优先控制位 0:设定UART的中断优先权是 “低” 1:设定UART的中断优先权是 “高” +sbit IPT1 = IP^3; //Timer1中断优先控制位 0:设定 Timer 1的中断优先权是 “低” 1:设定 Timer 1的中断优先权是 “高” +sbit IPINT1 = IP^2; //INT1中断优先控制位 0:设定INT1中断优先权是 “低” 1:设定INT1的中断优先权是 “高” +sbit IPT0 = IP^1; //Timer0中断优先控制位 0:设定 Timer 0的中断优先权是 “低” 1:设定 Timer 0的中断优先权是 “高” +sbit IPINT0 = IP^0; //INT0中断优先控制位 0:设定INT0中断优先权是 “低” 1:设定INT0的中断优先权是 “高” + +/*IE*/ +sbit EA = IE^7; //中断使能的总控制 0:关闭所有的中断 1:打开所有的中断 +sbit EADC = IE^6; //ADC中断使能控制 0:关闭ADC中断 1:打开ADC中断 +sbit ET2 = IE^5; //Timer2中断使能控制 0:关闭Timer2中断 1:打开Timer2中断 +sbit EUART = IE^4; //UART中断使能控制 0:关闭UART中断 1:打开UART中断 +sbit ET1 = IE^3; //Timer1中断使能控制 0:关闭TIMER1中断 1:打开TIMER1中断 +sbit EINT1 = IE^2; //INT1中断使能控制 0:关闭INT1中断 1:打开INT1中断 +sbit ET0 = IE^1; //Timer0中断使能控制 0:关闭TIMER0中断 1:打开TIMER0中断 +sbit EINT0 = IE^0; //INT0中断使能控制 0:关闭INT0中断 1:打开INT0中断 + +/*TCON*/ +sbit TF1 = TCON^7; //T1溢出中断请求标志位 T1产生溢出,发生中断时,硬件将TF1置为“1”,申请中断,CPU响应时,硬件清“0”。 +sbit TR1 = TCON^6; //定时器T1的运行控制位 0:Timer1禁止计数 1:Timer1开始计数 +sbit TF0 = TCON^5; //T0溢出中断请求标志位 T0产生溢出,发生中断时,硬件将TF0置为“1”,申请中断,CPU响应时,硬件清“0”。 +sbit TR0 = TCON^4; //定时器T0的运行控制位 0:Timer0禁止计数 1:Timer0开始计数 +sbit BITIE1 = TCON^3; //INT1溢出中断请求标志 0:CPU响应后,硬件清零 1:中断产生 +sbit BITIE0 = TCON^1; //INT0溢出中断请求标志 0:CPU响应后,硬件清零 1:中断产生 + +/*SCON*/ +sbit SM0 = SCON^7; +sbit SM1 = SCON^6; +sbit SM2 = SCON^5; +sbit REN = SCON^4; +sbit TB8 = SCON^3; +sbit RB8 = SCON^2; +sbit TI = SCON^1; +sbit RI = SCON^0; + +/******************* P0 ****************** +*SC92F84A3封装未引出的管脚:无 +*SC92F84A2封装未引出的管脚:P06/P07 +*SC92F84A1封装未引出的管脚:P02/P03/P04/P06/P07 +******************************************/ +sbit P07 = P0^7; +sbit P06 = P0^6; +sbit P05 = P0^5; +sbit P04 = P0^4; +sbit P03 = P0^3; +sbit P02 = P0^2; +sbit P01 = P0^1; +sbit P00 = P0^0; + +/******************* P1 ****************** +*SC92F84A3封装未引出的管脚:无 +*SC92F84A2封装未引出的管脚:P16/P17 +*SC92F84A1封装未引出的管脚:P16/P17 +******************************************/ +sbit P17 = P1^7; +sbit P16 = P1^6; +sbit P15 = P1^5; +sbit P14 = P1^4; +sbit P13 = P1^3; +sbit P12 = P1^2; +sbit P11 = P1^1; +sbit P10 = P1^0; + +/******************* P2 ****************** +*SC92F84A3封装未引出的管脚:无 +*SC92F84A2封装未引出的管脚:P22/P23 +*SC92F84A1封装未引出的管脚:P22/P23/P27 +******************************************/ +sbit P27 = P2^7; +sbit P26 = P2^6; +sbit P25 = P2^5; +sbit P24 = P2^4; +sbit P23 = P2^3; +sbit P22 = P2^2; +sbit P21 = P2^1; +sbit P20 = P2^0; + +/******************* P5 ****************** +*SC92F84A3封装未引出的管脚:无 +*SC92F84A2封装未引出的管脚:P50/P51 +*SC92F84A1封装未引出的管脚:P50/P51 +******************************************/ +sbit P51 = P5^1; +sbit P50 = P5^0; + +/**************************************************************************** +*注意:封装未引出的管脚,需设置为强推挽输出模式 +*IC选型:请根据所使用的IC型号,在初始化完IO口后,调用相对应的未引出管脚的IO口配置; +*如若选择SC92F84A3,则不用调用宏定义。 +*****************************************************************************/ +#define SC92F84A2_NIO_Init() {P0CON|=0xC0,P1CON|=0xC0,P2CON|=0x0C,P5CON|=0x03;} //SC92F84A2的未引出来的IO口配置 +#define SC92F84A1_NIO_Init() {P0CON|=0xDC,P1CON|=0xC0,P2CON|=0x8C,P5CON|=0x03;} //SC92F84A1的未引出来的IO口配置 + +#endif \ No newline at end of file diff --git a/Keil_C/FWLib/SC92F_Lib/inc/SC93F743x_C.H b/Keil_C/FWLib/SC92F_Lib/inc/SC93F743x_C.H new file mode 100644 index 0000000..5726c5b --- /dev/null +++ b/Keil_C/FWLib/SC92F_Lib/inc/SC93F743x_C.H @@ -0,0 +1,242 @@ + /*-------------------------------------------------------------------------- +SC93F743x_C.H + +C Header file for SC93F743x microcontroller. +Copyright (c) 2019 Shenzhen SinOne Chip Electronic CO., Ltd. +All rights reserved. +深圳市赛元微电子有限公司 +版本号: V2.0 +日期: 2019.06.24 +--------------------------------------------------------------------------*/ +#ifndef _SC93F743x_H_ +#define _SC93F743x_H_ + +/* ------------------- 字节寄存器-------------------- */ +///*CPU*/ +sfr ACC = 0xE0; //累加器A +sfr B = 0xF0; //通用寄存器B +sfr PSW = 0xD0; //程序状态字 +sfr DPH = 0x83; //数据指针高8位 +sfr DPL = 0x82; //数据指针低8位 +sfr SP = 0x81; //堆栈指针 +sfr DPL1 = 0x84; //DPTR1数据指针1低位 +sfr DPH1 = 0x85; //DPTR1数据指针1高位 +sfr DPS = 0x86; //DPTR选择寄存器 + +/*system*/ +sfr PCON = 0x87; //电源管理控制寄存器 + +/*interrupt*/ +sfr IP1 = 0XB9; //中断优先级控制寄存器1 +sfr IP = 0xB8; //中断优先权控制寄存器 +sfr IE = 0xA8; //中断控制寄存器 +sfr IE1 = 0XA9; //中断控制寄存器1 + +/*PORT*/ +sfr P5PH = 0xDA; //P5口模式控制寄存器0 +sfr P5CON = 0xD9; //P5口模式控制寄存器1 +sfr P5 = 0xD8; //P5口数据寄存器 +sfr P2PH = 0xA2; //P2口模式控制寄存器0 +sfr P2CON = 0xA1; //P2口模式控制寄存器1 +sfr P2 = 0xA0; //P2口数据寄存器 +sfr P1PH = 0x92; //P1口模式控制寄存器0 +sfr P1CON = 0x91; //P1口模式控制寄存器1 +sfr P1 = 0x90; //P1口数据寄存器 +sfr P0PH = 0x9B; //P0口模式控制寄存器1 +sfr P0CON = 0x9A; //P0口模式控制寄存器1 +sfr P0 = 0x80; //P0口数据寄存器 +sfr IOHCON = 0x97; //IOH设置寄存器 + +/*TIMER*/ +sfr TMCON = 0x8E; //定时器频率控制寄存器 +sfr TH1 = 0x8D; //定时器1高8位 +sfr TH0 = 0x8C; //定时器0高8位 +sfr TL1 = 0x8B; //定时器1低8位 +sfr TL0 = 0x8A; //定时器0低8位 +sfr TMOD = 0x89; //定时器工作模式寄存器 +sfr TCON = 0x88; //定时器控制寄存器 +sfr T2CON = 0XC8; //定时器2控制寄存器 +sfr T2MOD = 0XC9; //定时器2工作模式寄存器 +sfr RCAP2L = 0XCA; //定时器2重载/捕捉低8位 +sfr RCAP2H = 0XCB; //定时器2重载/捕捉高8位 +sfr TL2 = 0XCC; //定时器2低8位 +sfr TH2 = 0XCD; //定时器2高8位 + + +/*ADC*/ +sfr ADCCFG0 = 0xAB; //P1口ADC功能配置寄存器/参考电压 +sfr ADCCFG1 = 0xAC; //P1口ADC功能配置寄存器/参考电压 +sfr ADCCON = 0XAD; //ADC控制寄存器 +sfr ADCVL = 0xAE; //ADC 结果寄存器 +sfr ADCVH = 0xAF; //ADC 结果寄存器 + +/*PWM*/ +sfr PWMCFG = 0xD1; //PWM设置寄存器 +sfr PWMCON = 0xD2; //PWM控制寄存器 +sfr PWMPRD = 0xD3; //PWM周期设置寄存器 +sfr PWMDTYA = 0xD4; //PWM高电平设置寄存器 +sfr PWMDTY0 = 0xD5; //PWM高电平设置寄存器 +sfr PWMDTY1 = 0XD6; //PWM高电平设置寄存器 +sfr PWMDTY2 = 0XD7; //PWM高电平设置寄存器 + +// +///*WatchDog*/ +sfr BTMCON = 0XCE; //低频定时器控制寄存器 +sfr WDTCON = 0xCF; //WDT控制寄存器 + + +/*LCD*/ +sfr OTCON = 0X8F; //LCD电压输出控制寄存器 +sfr P0VO = 0X9C; //P0 LCD Bais 输出寄存器 + +/*INT*/ +sfr INT0F = 0XBA; //INT0 下降沿中断控制寄存器 +sfr INT0R = 0XBB; //INT0 上降沿中断控制寄存器 +sfr INT1F = 0XBC; //INT1 下降沿中断控制寄存器 +sfr INT1R = 0XBD; //INT1 上降沿中断控制寄存器 +sfr INT2F = 0XC6; //INT2 下降沿中断控制寄存器 +sfr INT2R = 0XC7; //INT2 上降沿中断控制寄存器 + +/*PGA*/ +sfr PGACFG = 0XBE; //PGA设置寄存器 +sfr PGACON = 0XBF; //PGA控制寄存器 + +/*IAP */ +sfr IAPCTL = 0xF6; //IAP控制寄存器 +sfr IAPDAT = 0xF5; //IAP数据寄存器 +sfr IAPADE = 0xF4; //IAP扩展地址寄存器 +sfr IAPADH = 0xF3; //IAP写入地址高位寄存器 +sfr IAPADL = 0xF2; //IAP写入地址低8位寄存器 +sfr IAPKEY = 0xF1; //IAP保护寄存器 + +/*UART*/ +sfr SCON = 0X98; //串口控制寄存器 +sfr SBUF = 0X99; //串口数据缓存寄存器 + +/*SPI*/ +sfr SSCON0 = 0X9D; //SPI控制寄存器 +sfr SSCON1 = 0X9E; //SPI状态寄存器 +sfr SSCON2 = 0X95; //SPI状态寄存器 +sfr SSDAT = 0X9F; //SPI数据寄存器 + +sfr MXAX = 0XEA; +sfr TA = 0XEB; +sfr OPINX = 0XFE; +sfr OPREG = 0XFF; +sfr EXADH = 0XF7; + +/*temperature sensor*/ +sfr TSCFG = 0XAA; + +///* ------------------- 位寄存器-------------------- */ + +/*PSW*/ +sbit CY = PSW^7; //标志位 0:加法运算最高位无进位,或者减法运算最高位无借位时 1:加法运算最高位有进位,或者减法运算最高位有借位时 +sbit AC = PSW^6; //进位辅助标志位 0:无借位、进位 1:加法运算时在bit3位有进位,或减法运算在bit3位有借位时 +sbit F0 = PSW^5; //用户标志位 +sbit RS1 = PSW^4; //工作寄存器组选择位 +sbit RS0 = PSW^3; //工作寄存器组选择位 +sbit OV = PSW^2; //溢出标志位 +sbit P = PSW^0; //奇偶标志位 0:ACC中1的个数为偶数(包括0个) 1:ACC中1的个数为奇数 + +/*T2CON*/ +sbit TF2 = T2CON^7; +sbit EXF2 = T2CON^6; +sbit RCLK = T2CON^5; +sbit TCLK = T2CON^4; +sbit EXEN2 = T2CON^3; +sbit TR2 = T2CON^2; +sbit T2 = T2CON^1; +sbit CP = T2CON^0; + + +/*IP*/ +sbit IPADC = IP^6; //ADC中断优先控制位 0:设定 ADC的中断优先权是 “低” 1:设定 ADC的中断优先权是 “高” +sbit IPT2 = IP^5; //Timer2中断优先控制位 0:设定 Timer2的中断优先权是 “低” 1:设定Timer2的中断优先权是 “高” +sbit IPUART = IP^4; //UART中断优先控制位 0:设定UART的中断优先权是 “低” 1:设定UART的中断优先权是 “高” +sbit IPT1 = IP^3; //Timer1中断优先控制位 0:设定 Timer 1的中断优先权是 “低” 1:设定 Timer 1的中断优先权是 “高” +sbit IPINT1 = IP^2; //INT1中断优先控制位 0:设定INT1中断优先权是 “低” 1:设定INT1的中断优先权是 “高” +sbit IPT0 = IP^1; //Timer0中断优先控制位 0:设定 Timer 0的中断优先权是 “低” 1:设定 Timer 0的中断优先权是 “高” +sbit IPINT0 = IP^0; //INT0中断优先控制位 0:设定INT0中断优先权是 “低” 1:设定INT0的中断优先权是 “高” + +/*IE*/ +sbit EA = IE^7; //中断使能的总控制 0:关闭所有的中断 1:打开所有的中断 +sbit EADC = IE^6; //ADC中断使能控制 0:关闭ADC中断 1:打开ADC中断 +sbit ET2 = IE^5; //Timer2中断使能控制 0:关闭Timer2中断 1:打开Timer2中断 +sbit EUART = IE^4; //UART中断使能控制 0:关闭UART中断 1:打开UART中断 +sbit ET1 = IE^3; //Timer1中断使能控制 0:关闭TIMER1中断 1:打开TIMER1中断 +sbit EINT1 = IE^2; //INT1中断使能控制 0:关闭INT1中断 1:打开INT1中断 +sbit ET0 = IE^1; //Timer0中断使能控制 0:关闭TIMER0中断 1:打开TIMER0中断 +sbit EINT0 = IE^0; //INT0中断使能控制 0:关闭INT0中断 1:打开INT0中断 + +/*TCON*/ +sbit TF1 = TCON^7; //T1溢出中断请求标志位 T1产生溢出,发生中断时,硬件将TF1置为“1”,申请中断,CPU响应时,硬件清“0”。 +sbit TR1 = TCON^6; //定时器T1的运行控制位 0:Timer1禁止计数 1:Timer1开始计数 +sbit TF0 = TCON^5; //T0溢出中断请求标志位 T0产生溢出,发生中断时,硬件将TF0置为“1”,申请中断,CPU响应时,硬件清“0”。 +sbit TR0 = TCON^4; //定时器T0的运行控制位 0:Timer0禁止计数 1:Timer0开始计数 + +/*SCON*/ +sbit SM0 = SCON^7; +sbit SM1 = SCON^6; +sbit SM2 = SCON^5; +sbit REN = SCON^4; +sbit TB8 = SCON^3; +sbit RB8 = SCON^2; +sbit TI = SCON^1; +sbit RI = SCON^0; + +/******************* P0 ****************** +*SC93F7433封装未引出的管脚:无 +*SC93F7432封装未引出的管脚:P06/P07 +******************************************/ +sbit P07 = P0^7; +sbit P06 = P0^6; +sbit P05 = P0^5; +sbit P04 = P0^4; +sbit P03 = P0^3; +sbit P02 = P0^2; +sbit P01 = P0^1; +sbit P00 = P0^0; + +/******************* P1 ****************** +*SC93F7433封装未引出的管脚:P10 +*SC93F7432封装未引出的管脚:P10/P16/P17 +******************************************/ +sbit P17 = P1^7; +sbit P16 = P1^6; +sbit P15 = P1^5; +sbit P14 = P1^4; +sbit P13 = P1^3; +sbit P12 = P1^2; +sbit P11 = P1^1; + +/******************* P2 ****************** +*SC93F7433封装未引出的管脚:无 +*SC93F7432封装未引出的管脚:P22/P23 +******************************************/ +sbit P27 = P2^7; +sbit P26 = P2^6; +sbit P25 = P2^5; +sbit P24 = P2^4; +sbit P23 = P2^3; +sbit P22 = P2^2; +sbit P21 = P2^1; +sbit P20 = P2^0; + +/******************* P5 ****************** +*SC93F7433封装未引出的管脚:无 +*SC93F7432封装未引出的管脚:P50/P51 +******************************************/ +sbit P52 = P5^2; +sbit P51 = P5^1; +sbit P50 = P5^0; + +/**************************************************************************** +*注意:封装未引出的管脚,需设置为强推挽输出模式 +*IC选型:请根据所使用的IC型号,在初始化完IO口后,调用相对应的未引出管脚的IO口配置; +* +*****************************************************************************/ +#define SC93F7433_NIO_Init() {P1CON|=0x01;} //SC93F7433的未引出来的IO口配置 +#define SC93F7432_NIO_Init() {P0CON|=0xC0,P1CON|=0xC1,P2CON|=0x0C,P5CON|=0x03;} //SC93F7432的未引出来的IO口配置 + +#endif \ No newline at end of file diff --git a/Keil_C/FWLib/SC92F_Lib/inc/SC93F833x_C.H b/Keil_C/FWLib/SC92F_Lib/inc/SC93F833x_C.H new file mode 100644 index 0000000..02a0741 --- /dev/null +++ b/Keil_C/FWLib/SC92F_Lib/inc/SC93F833x_C.H @@ -0,0 +1,247 @@ + /*-------------------------------------------------------------------------- +SC93F833x_C.H + +C Header file for SC93F833x microcontroller. +Copyright (c) 2019 Shenzhen SinOne Chip Electronic CO., Ltd. +All rights reserved. +深圳市赛元微电子有限公司 +版本号: V2.0 +日期: 2019.06.24 +--------------------------------------------------------------------------*/ +#ifndef _SC93F833x_H_ +#define _SC93F833x_H_ + +/* ------------------- 字节寄存器-------------------- */ +///*CPU*/ +sfr ACC = 0xE0; //累加器A +sfr B = 0xF0; //通用寄存器B +sfr PSW = 0xD0; //程序状态字 +sfr DPH = 0x83; //数据指针高8位 +sfr DPL = 0x82; //数据指针低8位 +sfr SP = 0x81; //堆栈指针 +sfr DPL1 = 0x84; //DPTR1数据指针1低位 +sfr DPH1 = 0x85; //DPTR1数据指针1高位 +sfr DPS = 0x86; //DPTR选择寄存器 + +/*system*/ +sfr PCON = 0x87; //电源管理控制寄存器 + +/*interrupt*/ +sfr IP1 = 0XB9; //中断优先级控制寄存器1 +sfr IP = 0xB8; //中断优先权控制寄存器 +sfr IE = 0xA8; //中断控制寄存器 +sfr IE1 = 0XA9; //中断控制寄存器1 + +/*PORT*/ +sfr P5PH = 0xDA; //P5口模式控制寄存器0 +sfr P5CON = 0xD9; //P5口模式控制寄存器1 +sfr P5 = 0xD8; //P5口数据寄存器 +sfr P2PH = 0xA2; //P2口模式控制寄存器0 +sfr P2CON = 0xA1; //P2口模式控制寄存器1 +sfr P2 = 0xA0; //P2口数据寄存器 +sfr P1PH = 0x92; //P1口模式控制寄存器0 +sfr P1CON = 0x91; //P1口模式控制寄存器1 +sfr P1 = 0x90; //P1口数据寄存器 +sfr P0PH = 0x9B; //P0口模式控制寄存器1 +sfr P0CON = 0x9A; //P0口模式控制寄存器1 +sfr P0 = 0x80; //P0口数据寄存器 +sfr IOHCON = 0x97; //IOH设置寄存器 + +/*TIMER*/ +sfr TMCON = 0x8E; //定时器频率控制寄存器 +sfr TH1 = 0x8D; //定时器1高8位 +sfr TH0 = 0x8C; //定时器0高8位 +sfr TL1 = 0x8B; //定时器1低8位 +sfr TL0 = 0x8A; //定时器0低8位 +sfr TMOD = 0x89; //定时器工作模式寄存器 +sfr TCON = 0x88; //定时器控制寄存器 +sfr T2CON = 0XC8; //定时器2控制寄存器 +sfr T2MOD = 0XC9; //定时器2工作模式寄存器 +sfr RCAP2L = 0XCA; //定时器2重载/捕捉低8位 +sfr RCAP2H = 0XCB; //定时器2重载/捕捉高8位 +sfr TL2 = 0XCC; //定时器2低8位 +sfr TH2 = 0XCD; //定时器2高8位 + + +/*ADC*/ +sfr ADCCFG0 = 0xAB; //P1口ADC功能配置寄存器/参考电压 +sfr ADCCFG1 = 0xAC; //P1口ADC功能配置寄存器/参考电压 +sfr ADCCON = 0XAD; //ADC控制寄存器 +sfr ADCVL = 0xAE; //ADC 结果寄存器 +sfr ADCVH = 0xAF; //ADC 结果寄存器 + +/*PWM*/ +sfr PWMCFG = 0xD1; //PWM设置寄存器 +sfr PWMCON = 0xD2; //PWM控制寄存器 +sfr PWMPRD = 0xD3; //PWM周期设置寄存器 +sfr PWMDTYA = 0xD4; //PWM高电平设置寄存器 +sfr PWMDTY0 = 0xD5; //PWM高电平设置寄存器 +sfr PWMDTY1 = 0XD6; //PWM高电平设置寄存器 +sfr PWMDTY2 = 0XD7; //PWM高电平设置寄存器 + +// +///*WatchDog*/ +sfr BTMCON = 0XCE; //低频定时器控制寄存器 +sfr WDTCON = 0xCF; //WDT控制寄存器 + + +/*LCD*/ +sfr OTCON = 0X8F; //LCD电压输出控制寄存器 +sfr P0VO = 0X9C; //P0 LCD Bais 输出寄存器 + +/*INT*/ +sfr INT0F = 0XBA; //INT0 下降沿中断控制寄存器 +sfr INT0R = 0XBB; //INT0 上降沿中断控制寄存器 +sfr INT1F = 0XBC; //INT1 下降沿中断控制寄存器 +sfr INT1R = 0XBD; //INT1 上降沿中断控制寄存器 +sfr INT2F = 0XC6; //INT2 下降沿中断控制寄存器 +sfr INT2R = 0XC7; //INT2 上降沿中断控制寄存器 + +/*PGA*/ +sfr PGACFG = 0XBE; //PGA设置寄存器 +sfr PGACON = 0XBF; //PGA控制寄存器 + +/*IAP */ +sfr IAPCTL = 0xF6; //IAP控制寄存器 +sfr IAPDAT = 0xF5; //IAP数据寄存器 +sfr IAPADE = 0xF4; //IAP扩展地址寄存器 +sfr IAPADH = 0xF3; //IAP写入地址高位寄存器 +sfr IAPADL = 0xF2; //IAP写入地址低8位寄存器 +sfr IAPKEY = 0xF1; //IAP保护寄存器 + +/*UART*/ +sfr SCON = 0X98; //串口控制寄存器 +sfr SBUF = 0X99; //串口数据缓存寄存器 + +/*SPI*/ +sfr SSCON0 = 0X9D; //SPI控制寄存器 +sfr SSCON1 = 0X9E; //SPI状态寄存器 +sfr SSCON2 = 0X95; //SPI状态寄存器 +sfr SSDAT = 0X9F; //SPI数据寄存器 + +sfr MXAX = 0XEA; +sfr TA = 0XEB; +sfr OPINX = 0XFE; +sfr OPREG = 0XFF; +sfr EXADH = 0XF7; + +/*temperature sensor*/ +sfr TSCFG = 0XAA; + +///* ------------------- 位寄存器-------------------- */ + +/*PSW*/ +sbit CY = PSW^7; //标志位 0:加法运算最高位无进位,或者减法运算最高位无借位时 1:加法运算最高位有进位,或者减法运算最高位有借位时 +sbit AC = PSW^6; //进位辅助标志位 0:无借位、进位 1:加法运算时在bit3位有进位,或减法运算在bit3位有借位时 +sbit F0 = PSW^5; //用户标志位 +sbit RS1 = PSW^4; //工作寄存器组选择位 +sbit RS0 = PSW^3; //工作寄存器组选择位 +sbit OV = PSW^2; //溢出标志位 +sbit P = PSW^0; //奇偶标志位 0:ACC中1的个数为偶数(包括0个) 1:ACC中1的个数为奇数 + +/*T2CON*/ +sbit TF2 = T2CON^7; +sbit EXF2 = T2CON^6; +sbit RCLK = T2CON^5; +sbit TCLK = T2CON^4; +sbit EXEN2 = T2CON^3; +sbit TR2 = T2CON^2; +sbit T2 = T2CON^1; +sbit CP = T2CON^0; + + +/*IP*/ +sbit IPADC = IP^6; //ADC中断优先控制位 0:设定 ADC的中断优先权是 “低” 1:设定 ADC的中断优先权是 “高” +sbit IPT2 = IP^5; //Timer2中断优先控制位 0:设定 Timer2的中断优先权是 “低” 1:设定Timer2的中断优先权是 “高” +sbit IPUART = IP^4; //UART中断优先控制位 0:设定UART的中断优先权是 “低” 1:设定UART的中断优先权是 “高” +sbit IPT1 = IP^3; //Timer1中断优先控制位 0:设定 Timer 1的中断优先权是 “低” 1:设定 Timer 1的中断优先权是 “高” +sbit IPINT1 = IP^2; //INT1中断优先控制位 0:设定INT1中断优先权是 “低” 1:设定INT1的中断优先权是 “高” +sbit IPT0 = IP^1; //Timer0中断优先控制位 0:设定 Timer 0的中断优先权是 “低” 1:设定 Timer 0的中断优先权是 “高” +sbit IPINT0 = IP^0; //INT0中断优先控制位 0:设定INT0中断优先权是 “低” 1:设定INT0的中断优先权是 “高” + +/*IE*/ +sbit EA = IE^7; //中断使能的总控制 0:关闭所有的中断 1:打开所有的中断 +sbit EADC = IE^6; //ADC中断使能控制 0:关闭ADC中断 1:打开ADC中断 +sbit ET2 = IE^5; //Timer2中断使能控制 0:关闭Timer2中断 1:打开Timer2中断 +sbit EUART = IE^4; //UART中断使能控制 0:关闭UART中断 1:打开UART中断 +sbit ET1 = IE^3; //Timer1中断使能控制 0:关闭TIMER1中断 1:打开TIMER1中断 +sbit EINT1 = IE^2; //INT1中断使能控制 0:关闭INT1中断 1:打开INT1中断 +sbit ET0 = IE^1; //Timer0中断使能控制 0:关闭TIMER0中断 1:打开TIMER0中断 +sbit EINT0 = IE^0; //INT0中断使能控制 0:关闭INT0中断 1:打开INT0中断 + +/*TCON*/ +sbit TF1 = TCON^7; //T1溢出中断请求标志位 T1产生溢出,发生中断时,硬件将TF1置为“1”,申请中断,CPU响应时,硬件清“0”。 +sbit TR1 = TCON^6; //定时器T1的运行控制位 0:Timer1禁止计数 1:Timer1开始计数 +sbit TF0 = TCON^5; //T0溢出中断请求标志位 T0产生溢出,发生中断时,硬件将TF0置为“1”,申请中断,CPU响应时,硬件清“0”。 +sbit TR0 = TCON^4; //定时器T0的运行控制位 0:Timer0禁止计数 1:Timer0开始计数 + +/*SCON*/ +sbit SM0 = SCON^7; +sbit SM1 = SCON^6; +sbit SM2 = SCON^5; +sbit REN = SCON^4; +sbit TB8 = SCON^3; +sbit RB8 = SCON^2; +sbit TI = SCON^1; +sbit RI = SCON^0; + +/******************* P0 ****************** +*SC93F8333封装未引出的管脚:无 +*SC93F8332封装未引出的管脚:P06/P07 +*SC93F8331封装未引出的管脚:P02/P03/P05/P06/P07 +******************************************/ +sbit P07 = P0^7; +sbit P06 = P0^6; +sbit P05 = P0^5; +sbit P04 = P0^4; +sbit P03 = P0^3; +sbit P02 = P0^2; +sbit P01 = P0^1; +sbit P00 = P0^0; + +/******************* P1 ****************** +*SC93F8333封装未引出的管脚:P10 +*SC93F8332封装未引出的管脚:P10/P16/P17 +*SC93F8331封装未引出的管脚:P10/P16/P17 +******************************************/ +sbit P17 = P1^7; +sbit P16 = P1^6; +sbit P15 = P1^5; +sbit P14 = P1^4; +sbit P13 = P1^3; +sbit P12 = P1^2; +sbit P11 = P1^1; + +/******************* P2 ****************** +*SC93F8333封装未引出的管脚:无 +*SC93F8332封装未引出的管脚:P22/P23 +*SC93F8331封装未引出的管脚:P22/P23/P27 +******************************************/ +sbit P27 = P2^7; +sbit P26 = P2^6; +sbit P25 = P2^5; +sbit P24 = P2^4; +sbit P23 = P2^3; +sbit P22 = P2^2; +sbit P21 = P2^1; +sbit P20 = P2^0; + +/******************* P5 ****************** +*SC93F8333封装未引出的管脚:无 +*SC93F8332封装未引出的管脚:P50/P51 +*SC93F8331封装未引出的管脚:P50/P51 +******************************************/ +sbit P52 = P5^2; +sbit P51 = P5^1; +sbit P50 = P5^0; + +/**************************************************************************** +*注意:封装未引出的管脚,需设置为强推挽输出模式 +*IC选型:请根据所使用的IC型号,在初始化完IO口后,调用相对应的未引出管脚的IO口配置; +* +*****************************************************************************/ +#define SC93F8333_NIO_Init() {P1CON|=0x01;} //SC93F8333的未引出来的IO口配置 +#define SC93F8332_NIO_Init() {P0CON|=0xC0,P1CON|=0xC1,P2CON|=0x0C,P5CON|=0x03;} //SC93F8332的未引出来的IO口配置 +#define SC93F8331_NIO_Init() {P0CON|=0xEC,P1CON|=0xC1,P2CON|=0x8C,P5CON|=0x03;} //SC93F8331的未引出来的IO口配置 + +#endif \ No newline at end of file diff --git a/Keil_C/FWLib/SC92F_Lib/inc/SC93F843X_C.H b/Keil_C/FWLib/SC92F_Lib/inc/SC93F843X_C.H new file mode 100644 index 0000000..1ac6a17 --- /dev/null +++ b/Keil_C/FWLib/SC92F_Lib/inc/SC93F843X_C.H @@ -0,0 +1,247 @@ + /*-------------------------------------------------------------------------- +SC93F843x_C.H + +C Header file for SC93F843x microcontroller. +Copyright (c) 2019 Shenzhen SinOne Chip Electronic CO., Ltd. +All rights reserved. +深圳市赛元微电子有限公司 +版本号: V2.0 +日期: 2019.06.24 +--------------------------------------------------------------------------*/ +#ifndef _SC93F843x_H_ +#define _SC93F843x_H_ + +/* ------------------- 字节寄存器-------------------- */ +///*CPU*/ +sfr ACC = 0xE0; //累加器A +sfr B = 0xF0; //通用寄存器B +sfr PSW = 0xD0; //程序状态字 +sfr DPH = 0x83; //数据指针高8位 +sfr DPL = 0x82; //数据指针低8位 +sfr SP = 0x81; //堆栈指针 +sfr DPL1 = 0x84; //DPTR1数据指针1低位 +sfr DPH1 = 0x85; //DPTR1数据指针1高位 +sfr DPS = 0x86; //DPTR选择寄存器 + +/*system*/ +sfr PCON = 0x87; //电源管理控制寄存器 + +/*interrupt*/ +sfr IP1 = 0XB9; //中断优先级控制寄存器1 +sfr IP = 0xB8; //中断优先权控制寄存器 +sfr IE = 0xA8; //中断控制寄存器 +sfr IE1 = 0XA9; //中断控制寄存器1 + +/*PORT*/ +sfr P5PH = 0xDA; //P5口模式控制寄存器0 +sfr P5CON = 0xD9; //P5口模式控制寄存器1 +sfr P5 = 0xD8; //P5口数据寄存器 +sfr P2PH = 0xA2; //P2口模式控制寄存器0 +sfr P2CON = 0xA1; //P2口模式控制寄存器1 +sfr P2 = 0xA0; //P2口数据寄存器 +sfr P1PH = 0x92; //P1口模式控制寄存器0 +sfr P1CON = 0x91; //P1口模式控制寄存器1 +sfr P1 = 0x90; //P1口数据寄存器 +sfr P0PH = 0x9B; //P0口模式控制寄存器1 +sfr P0CON = 0x9A; //P0口模式控制寄存器1 +sfr P0 = 0x80; //P0口数据寄存器 +sfr IOHCON = 0x97; //IOH设置寄存器 + +/*TIMER*/ +sfr TMCON = 0x8E; //定时器频率控制寄存器 +sfr TH1 = 0x8D; //定时器1高8位 +sfr TH0 = 0x8C; //定时器0高8位 +sfr TL1 = 0x8B; //定时器1低8位 +sfr TL0 = 0x8A; //定时器0低8位 +sfr TMOD = 0x89; //定时器工作模式寄存器 +sfr TCON = 0x88; //定时器控制寄存器 +sfr T2CON = 0XC8; //定时器2控制寄存器 +sfr T2MOD = 0XC9; //定时器2工作模式寄存器 +sfr RCAP2L = 0XCA; //定时器2重载/捕捉低8位 +sfr RCAP2H = 0XCB; //定时器2重载/捕捉高8位 +sfr TL2 = 0XCC; //定时器2低8位 +sfr TH2 = 0XCD; //定时器2高8位 + + +/*ADC*/ +sfr ADCCFG0 = 0xAB; //P1口ADC功能配置寄存器/参考电压 +sfr ADCCFG1 = 0xAC; //P1口ADC功能配置寄存器/参考电压 +sfr ADCCON = 0XAD; //ADC控制寄存器 +sfr ADCVL = 0xAE; //ADC 结果寄存器 +sfr ADCVH = 0xAF; //ADC 结果寄存器 + +/*PWM*/ +sfr PWMCFG = 0xD1; //PWM设置寄存器 +sfr PWMCON = 0xD2; //PWM控制寄存器 +sfr PWMPRD = 0xD3; //PWM周期设置寄存器 +sfr PWMDTYA = 0xD4; //PWM高电平设置寄存器 +sfr PWMDTY0 = 0xD5; //PWM高电平设置寄存器 +sfr PWMDTY1 = 0XD6; //PWM高电平设置寄存器 +sfr PWMDTY2 = 0XD7; //PWM高电平设置寄存器 + +// +///*WatchDog*/ +sfr BTMCON = 0XCE; //低频定时器控制寄存器 +sfr WDTCON = 0xCF; //WDT控制寄存器 + + +/*LCD*/ +sfr OTCON = 0X8F; //LCD电压输出控制寄存器 +sfr P0VO = 0X9C; //P0 LCD Bais 输出寄存器 + +/*INT*/ +sfr INT0F = 0XBA; //INT0 下降沿中断控制寄存器 +sfr INT0R = 0XBB; //INT0 上降沿中断控制寄存器 +sfr INT1F = 0XBC; //INT1 下降沿中断控制寄存器 +sfr INT1R = 0XBD; //INT1 上降沿中断控制寄存器 +sfr INT2F = 0XC6; //INT2 下降沿中断控制寄存器 +sfr INT2R = 0XC7; //INT2 上降沿中断控制寄存器 + +/*PGA*/ +sfr PGACFG = 0XBE; //PGA设置寄存器 +sfr PGACON = 0XBF; //PGA控制寄存器 + +/*IAP */ +sfr IAPCTL = 0xF6; //IAP控制寄存器 +sfr IAPDAT = 0xF5; //IAP数据寄存器 +sfr IAPADE = 0xF4; //IAP扩展地址寄存器 +sfr IAPADH = 0xF3; //IAP写入地址高位寄存器 +sfr IAPADL = 0xF2; //IAP写入地址低8位寄存器 +sfr IAPKEY = 0xF1; //IAP保护寄存器 + +/*UART*/ +sfr SCON = 0X98; //串口控制寄存器 +sfr SBUF = 0X99; //串口数据缓存寄存器 + +/*SPI*/ +sfr SSCON0 = 0X9D; //SPI控制寄存器 +sfr SSCON1 = 0X9E; //SPI状态寄存器 +sfr SSCON2 = 0X95; //SPI状态寄存器 +sfr SSDAT = 0X9F; //SPI数据寄存器 + +sfr MXAX = 0XEA; +sfr TA = 0XEB; +sfr OPINX = 0XFE; +sfr OPREG = 0XFF; +sfr EXADH = 0XF7; + +/*temperature sensor*/ +sfr TSCFG = 0XAA; + +///* ------------------- 位寄存器-------------------- */ + +/*PSW*/ +sbit CY = PSW^7; //标志位 0:加法运算最高位无进位,或者减法运算最高位无借位时 1:加法运算最高位有进位,或者减法运算最高位有借位时 +sbit AC = PSW^6; //进位辅助标志位 0:无借位、进位 1:加法运算时在bit3位有进位,或减法运算在bit3位有借位时 +sbit F0 = PSW^5; //用户标志位 +sbit RS1 = PSW^4; //工作寄存器组选择位 +sbit RS0 = PSW^3; //工作寄存器组选择位 +sbit OV = PSW^2; //溢出标志位 +sbit P = PSW^0; //奇偶标志位 0:ACC中1的个数为偶数(包括0个) 1:ACC中1的个数为奇数 + +/*T2CON*/ +sbit TF2 = T2CON^7; +sbit EXF2 = T2CON^6; +sbit RCLK = T2CON^5; +sbit TCLK = T2CON^4; +sbit EXEN2 = T2CON^3; +sbit TR2 = T2CON^2; +sbit T2 = T2CON^1; +sbit CP = T2CON^0; + + +/*IP*/ +sbit IPADC = IP^6; //ADC中断优先控制位 0:设定 ADC的中断优先权是 “低” 1:设定 ADC的中断优先权是 “高” +sbit IPT2 = IP^5; //Timer2中断优先控制位 0:设定 Timer2的中断优先权是 “低” 1:设定Timer2的中断优先权是 “高” +sbit IPUART = IP^4; //UART中断优先控制位 0:设定UART的中断优先权是 “低” 1:设定UART的中断优先权是 “高” +sbit IPT1 = IP^3; //Timer1中断优先控制位 0:设定 Timer 1的中断优先权是 “低” 1:设定 Timer 1的中断优先权是 “高” +sbit IPINT1 = IP^2; //INT1中断优先控制位 0:设定INT1中断优先权是 “低” 1:设定INT1的中断优先权是 “高” +sbit IPT0 = IP^1; //Timer0中断优先控制位 0:设定 Timer 0的中断优先权是 “低” 1:设定 Timer 0的中断优先权是 “高” +sbit IPINT0 = IP^0; //INT0中断优先控制位 0:设定INT0中断优先权是 “低” 1:设定INT0的中断优先权是 “高” + +/*IE*/ +sbit EA = IE^7; //中断使能的总控制 0:关闭所有的中断 1:打开所有的中断 +sbit EADC = IE^6; //ADC中断使能控制 0:关闭ADC中断 1:打开ADC中断 +sbit ET2 = IE^5; //Timer2中断使能控制 0:关闭Timer2中断 1:打开Timer2中断 +sbit EUART = IE^4; //UART中断使能控制 0:关闭UART中断 1:打开UART中断 +sbit ET1 = IE^3; //Timer1中断使能控制 0:关闭TIMER1中断 1:打开TIMER1中断 +sbit EINT1 = IE^2; //INT1中断使能控制 0:关闭INT1中断 1:打开INT1中断 +sbit ET0 = IE^1; //Timer0中断使能控制 0:关闭TIMER0中断 1:打开TIMER0中断 +sbit EINT0 = IE^0; //INT0中断使能控制 0:关闭INT0中断 1:打开INT0中断 + +/*TCON*/ +sbit TF1 = TCON^7; //T1溢出中断请求标志位 T1产生溢出,发生中断时,硬件将TF1置为“1”,申请中断,CPU响应时,硬件清“0”。 +sbit TR1 = TCON^6; //定时器T1的运行控制位 0:Timer1禁止计数 1:Timer1开始计数 +sbit TF0 = TCON^5; //T0溢出中断请求标志位 T0产生溢出,发生中断时,硬件将TF0置为“1”,申请中断,CPU响应时,硬件清“0”。 +sbit TR0 = TCON^4; //定时器T0的运行控制位 0:Timer0禁止计数 1:Timer0开始计数 + +/*SCON*/ +sbit SM0 = SCON^7; +sbit SM1 = SCON^6; +sbit SM2 = SCON^5; +sbit REN = SCON^4; +sbit TB8 = SCON^3; +sbit RB8 = SCON^2; +sbit TI = SCON^1; +sbit RI = SCON^0; + +/******************* P0 ****************** +*SC93F8433封装未引出的管脚:无 +*SC93F8432封装未引出的管脚:P06/P07 +*SC93F8431封装未引出的管脚:P02/P03/P05/P06/P07 +******************************************/ +sbit P07 = P0^7; +sbit P06 = P0^6; +sbit P05 = P0^5; +sbit P04 = P0^4; +sbit P03 = P0^3; +sbit P02 = P0^2; +sbit P01 = P0^1; +sbit P00 = P0^0; + +/******************* P1 ****************** +*SC93F8433封装未引出的管脚:P10 +*SC93F8432封装未引出的管脚:P10/P16/P17 +*SC93F8431封装未引出的管脚:P10/P16/P17 +******************************************/ +sbit P17 = P1^7; +sbit P16 = P1^6; +sbit P15 = P1^5; +sbit P14 = P1^4; +sbit P13 = P1^3; +sbit P12 = P1^2; +sbit P11 = P1^1; + +/******************* P2 ****************** +*SC93F8433封装未引出的管脚:无 +*SC93F8432封装未引出的管脚:P22/P23 +*SC93F8431封装未引出的管脚:P22/P23/P27 +******************************************/ +sbit P27 = P2^7; +sbit P26 = P2^6; +sbit P25 = P2^5; +sbit P24 = P2^4; +sbit P23 = P2^3; +sbit P22 = P2^2; +sbit P21 = P2^1; +sbit P20 = P2^0; + +/******************* P5 ****************** +*SC93F8433封装未引出的管脚:无 +*SC93F8432封装未引出的管脚:P50/P51 +*SC93F8431封装未引出的管脚:P50/P51 +******************************************/ +sbit P52 = P5^2; +sbit P51 = P5^1; +sbit P50 = P5^0; + +/**************************************************************************** +*注意:封装未引出的管脚,需设置为强推挽输出模式 +*IC选型:请根据所使用的IC型号,在初始化完IO口后,调用相对应的未引出管脚的IO口配置; +* +*****************************************************************************/ +#define SC93F8433_NIO_Init() {P1CON|=0x01;} //SC93F8433的未引出来的IO口配置 +#define SC93F8432_NIO_Init() {P0CON|=0xC0;P1CON|=0xC1;P2CON|=0x0C;P5CON|=0x03;} //SC93F8432的未引出来的IO口配置 +#define SC93F8431_NIO_Init() {P0CON|=0xEC;P1CON|=0xC1;P2CON|=0x8C;P5CON|=0x03;} //SC93F8431的未引出来的IO口配置 + +#endif \ No newline at end of file diff --git a/Keil_C/FWLib/SC92F_Lib/inc/sc92f.h b/Keil_C/FWLib/SC92F_Lib/inc/sc92f.h new file mode 100644 index 0000000..7b393f5 --- /dev/null +++ b/Keil_C/FWLib/SC92F_Lib/inc/sc92f.h @@ -0,0 +1,201 @@ +//************************************************************ +// Copyright (c) 深圳市赛元微电子有限公司 +// 文件名称 : sc92f.h +// 作者 : +// 模块功能 : 赛元SC92系列系统头文件 +// 局部函数列表: +// 最后更正日期: 2022年7月6日 +// 版本 : V1.10030 +// 说明 :本文件仅适用于赛元92F系列单片机 +//************************************************************* + +#ifndef _sc92f_H +#define _sc92f_H + +#ifdef SC92F854x + #include "SC92F854x_C.H" +#endif + +#ifdef SC92F754x + #include "SC92F754x_C.H" +#endif + +#ifdef SC92F844xB + #include "SC92F844xB_C.H" +#endif + +#ifdef SC92F744xB + #include "SC92F744xB_C.H" +#endif + +#ifdef SC92F846xB + #include "SC92F846xB_C.H" +#endif + +#ifdef SC92F746xB + #include "SC92F746xB_C.H" +#endif + +#ifdef SC92F836xB + #include "SC92F836xB_C.H" +#endif + +#ifdef SC92F736xB + #include "SC92F736xB_C.H" +#endif + +#ifdef SC92F742x + #include "SC92F742x_C.H" +#endif + +#ifdef SC92F7003 + #include "SC92F7003_C.H" +#endif + +#ifdef SC92F8003 + #include "SC92F8003_C.H" +#endif + +#ifdef SC92F740x + #include "SC92F740x_C.H" +#endif + +#ifdef SC92F74Ax + #include "SC92F74Ax_C.H" +#endif + +#ifdef SC92F84Ax + #include "SC92F84Ax_C.H" +#endif + +#ifdef SC92F73Ax + #include "SC92F73Ax_C.H" +#endif + +#ifdef SC92F83Ax + #include "SC92F83Ax_C.H" +#endif + +#ifdef SC92F74Ax_2 + #include "SC92F74Ax_2_C.H" +#endif + +#ifdef SC92F84Ax_2 + #include "SC92F84Ax_2_C.H" +#endif + +#ifdef SC92F730x + #include "SC92F730x_C.h" +#endif + +#ifdef SC92F827X + #include "SC92F827X_C.h" +#endif + +#ifdef SC92F837X + #include "SC92F837X_C.H" +#endif + +#ifdef SC92F7490 + #include "SC92F7490_C.H" +#endif + +#ifdef SC92F725X + #include "SC92F725X_C.h" +#endif + +#ifdef SC92F735X + #include "SC92F735X_C.h" +#endif + +#ifdef SC92F732X + #include "SC92F732X_C.H" +#endif + +#ifdef SC92FWxx + #include "SC92FWxx_C.H" +#endif + +#ifdef SC93F833x + #include "SC93F833x_C.H" +#endif + +#ifdef SC93F843x + #include "SC93F843x_C.H" +#endif + +#ifdef SC93F743x + #include "SC93F743x_C.H" +#endif + +#ifdef SC92F848x + #include "SC92F848x_C.H" +#endif + +#ifdef SC92F748x + #include "SC92F748x_C.H" +#endif + +#ifdef SC92F859x + #include "SC92F859x_C.H" +#endif + +#ifdef SC92F759x + #include "SC92F759x_C.H" +#endif + +#ifdef SC92L853x + #include "SC92L853x_C.H" +#endif + +#ifdef SC92L753x + #include "SC92L753x_C.H" +#endif + +#define enableInterrupts() EA=1 /** 开启总中断 **/ +#define disableInterrupts() EA=0 /** 关闭总中断 **/ + +#define __I volatile const /*!< defines 'read only' permissions */ +#define __O volatile /*!< defines 'write only' permissions */ +#define __IO volatile /*!< defines 'read / write' permissions */ + +/*!< Signed integer types */ +typedef signed char int8_t; +typedef signed short int16_t; +typedef signed long int32_t; + +/*!< Unsigned integer types */ +typedef unsigned char uint8_t; +typedef unsigned short uint16_t; +typedef unsigned long uint32_t; + +typedef int32_t s32; +typedef int16_t s16; +typedef int8_t s8; + +typedef uint32_t u32; +typedef uint16_t u16; +typedef uint8_t u8; + +typedef enum {FALSE = 0, TRUE = !FALSE} bool; + +typedef enum {RESET = 0, SET = !RESET} FlagStatus, +ITStatus, BitStatus; + +typedef enum {DISABLE = 0, ENABLE = !DISABLE} FunctionalState; + +typedef enum {ERROR = 0, SUCCESS = !ERROR} ErrorStatus; + +typedef enum {LOW = 0, HIGH = !LOW} PriorityStatus; + +#define SET_BIT(SFR,BIT) ((SFR) |= (BIT)) + +#define CLEAR_BIT(SFR,BIT) ((SFR) &= ~(BIT)) + +#define READ_BIT(SFR, BIT) ((SFR) & (BIT)) + +#define CLEAR_REG(SFR) ((SFR) = (0x0)) + +#define WRITE_REG(SFR, VAL) ((SFR) = (VAL)) + +#endif \ No newline at end of file diff --git a/Keil_C/FWLib/SC92F_Lib/inc/sc92f_acmp.h b/Keil_C/FWLib/SC92F_Lib/inc/sc92f_acmp.h new file mode 100644 index 0000000..6844837 --- /dev/null +++ b/Keil_C/FWLib/SC92F_Lib/inc/sc92f_acmp.h @@ -0,0 +1,78 @@ +//************************************************************ +// Copyright (c) 深圳市赛元微电子有限公司 +// 文件名称 : sc92f_acmp.h +// 作者 : +// 模块功能 : ACMP固件库函数头文件 +// 最后更正日期: 2020/8/20 +// 版本 : V1.0001 +// 说明 : +//************************************************************* + +#ifndef _sc92f_ACMP_H_ +#define _sc92f_ACMP_H_ + +#include "sc92f.h" +#if defined(SC92F854x) || defined(SC92F754x) || defined(SC92F844xB) || defined(SC92F744xB) || defined(SC92F84Ax_2) || defined(SC92F74Ax_2)\ + || defined(SC92FWxx) || defined(SC92F859x) || defined(SC92F759x) +typedef enum +{ + ACMP_VREF_EXTERNAL = (uint8_t)0X00, //选用CMPR为ACMP的比较电压 + ACMP_VREF_1D16VDD = (uint8_t)0X01, //选用1/16VDD为ACMP的比较电压 + ACMP_VREF_2D16VDD = (uint8_t)0X02, //选用2/16VDD为ACMP的比较电压 + ACMP_VREF_3D16VDD = (uint8_t)0X03, //选用3/16VDD为ACMP的比较电压 + ACMP_VREF_4D16VDD = (uint8_t)0X04, //选用4/16VDD为ACMP的比较电压 + ACMP_VREF_5D16VDD = (uint8_t)0X05, //选用5/16VDD为ACMP的比较电压 + ACMP_VREF_6D16VDD = (uint8_t)0X06, //选用6/16VDD为ACMP的比较电压 + ACMP_VREF_7D16VDD = (uint8_t)0X07, //选用7/16VDD为ACMP的比较电压 + ACMP_VREF_8D16VDD = (uint8_t)0X08, //选用8/16VDD为ACMP的比较电压 + ACMP_VREF_9D16VDD = (uint8_t)0X09, //选用9/16VDD为ACMP的比较电压 + ACMP_VREF_10D16VDD = (uint8_t)0X0A, //选用10/16VDD为ACMP的比较电压 + ACMP_VREF_11D16VDD = (uint8_t)0X0B, //选用11/16VDD为ACMP的比较电压 + ACMP_VREF_12D16VDD = (uint8_t)0X0C, //选用12/16VDD为ACMP的比较电压 + ACMP_VREF_13D16VDD = (uint8_t)0X0D, //选用13/16VDD为ACMP的比较电压 + ACMP_VREF_14D16VDD = (uint8_t)0X0E, //选用14/16VDD为ACMP的比较电压 + ACMP_VREF_15D16VDD = (uint8_t)0X0F //选用15/16VDD为ACMP的比较电压 +} ACMP_Vref_Typedef; + +typedef enum +{ + ACMP_CHANNEL_0 = (uint8_t)0x00, //选择CMP0做ACMP输入口 + ACMP_CHANNEL_1 = (uint8_t)0x01, //选择CMP1做ACMP输入口 + ACMP_CHANNEL_2 = (uint8_t)0x02, //选择CMP2做ACMP输入口 + ACMP_CHANNEL_3 = (uint8_t)0x03, //选择CMP3做ACMP输入口 + #if defined(SC92F859x) || defined (SC92F759x) + ACMP_CHANNEL_P = (uint8_t)0x10, //选择CMPP做ACMP输入口,CMPP为基准电压1.5V + #endif +} ACMP_Channel_TypeDef; + +typedef enum +{ + ACMP_TRIGGER_NO = (uint8_t)0x00, //不产生中断 + ACMP_TRIGGER_RISE_ONLY = (uint8_t)0x04, //模拟比较器触发方式为上升沿 + ACMP_TRIGGER_FALL_ONLY = (uint8_t)0x08, //模拟比较器触发方式为下降沿 + ACMP_TRIGGER_RISE_FALL = (uint8_t)0x0C //模拟比较器触发方式为上升沿与下降沿 +} ACMP_TriggerMode_Typedef; + +typedef enum +{ + ACMP_FLAG_CMPIF = (uint8_t)0x40, //ACMP中断标志位 + ACMP_FLAG_CMPSTA = (uint8_t)0x20 //ACMP输出状态 +} ACMP_Flag_TypeDef; + +void ACMP_DeInit(void); +void ACMP_Init(ACMP_Vref_Typedef ACMP_Vref, + ACMP_Channel_TypeDef ACMP_Channel); +void ACMP_SetTriggerMode(ACMP_TriggerMode_Typedef + ACMP_TriggerMode); +void ACMP_Cmd(FunctionalState NewState); +void ACMP_ITConfig(FunctionalState NewState, + PriorityStatus Priority); +FlagStatus ACMP_GetFlagStatus(ACMP_Flag_TypeDef + ACMP_Flag); +void ACMP_ClearFlag(void); + +#endif + +#endif + +/******************* (C) COPYRIGHT 2020 SinOne Microelectronics *****END OF FILE****/ \ No newline at end of file diff --git a/Keil_C/FWLib/SC92F_Lib/inc/sc92f_adc.h b/Keil_C/FWLib/SC92F_Lib/inc/sc92f_adc.h new file mode 100644 index 0000000..d0a2d7d --- /dev/null +++ b/Keil_C/FWLib/SC92F_Lib/inc/sc92f_adc.h @@ -0,0 +1,326 @@ +//************************************************************ +// Copyright (c) 深圳市赛元微电子有限公司 +// 文件名称: sc92f_adc.h +// 作者: 赛元应用团队 +// 模块功能: ADC固件库函数头文件 +// 最后更正日期: 2022年3月23日 +// 版本: V1.100014 +// 说明: 本文件仅适用于赛元92F/93F/92L系列单片机 +//************************************************************* +#ifndef _sc92f_ADC_H_ +#define _sc92f_ADC_H_ + +/* 头文件引用 */ +#include "sc92f.h" +/* 说明:ADC参考电源枚举定义在sc92f_option.h,使用ADC请注意将该文件导入 */ +#include "sc92f_option.h" + +#if !defined(SC92F827X) && !defined(SC92F837X) +/* ADC采样时钟分频转换 */ +#if defined(SC92F854x) || defined(SC92F754x) || defined(SC92F844xB) || defined(SC92F744xB) || defined(SC92F84Ax_2) || defined(SC92F74Ax_2) || defined(SC92FWxx) +typedef enum +{ + ADC_PRESSEL_FOSC_D6 = (uint8_t)0x02, //预分频 fADC = fHRC/6 + ADC_PRESSEL_FOSC_D12 = (uint8_t)0x01 //预分频 fADC = fHRC/12 +} ADC_PresSel_TypeDef; +#elif defined (SC92F846xB) || defined (SC92F746xB) || defined (SC92F836xB) || defined (SC92F736xB)|| defined (SC92F83Ax) || defined (SC92F73Ax)\ + || defined (SC92F84Ax) || defined (SC92F74Ax) || defined (SC92F7003) || defined (SC92F8003) || defined (SC92F740x) +typedef enum +{ + ADC_PRESSEL_FHRC_D32 = (uint8_t)0x00, //预分频 fADC = fHRC/32 + ADC_PRESSEL_FHRC_D24 = (uint8_t)0x01, //预分频 fADC = fHRC/24 + ADC_PRESSEL_FHRC_D16 = (uint8_t)0x02, //预分频 fADC = fHRC/16 + ADC_PRESSEL_FHRC_D12 = (uint8_t)0x03, //预分频 fADC = fHRC/12 + ADC_PRESSEL_FHRC_D8 = (uint8_t)0x04, //预分频 fADC = fHRC/8 + ADC_PRESSEL_FHRC_D6 = (uint8_t)0x05, //预分频 fADC = fHRC/6 + ADC_PRESSEL_FHRC_D4 = (uint8_t)0x06, //预分频 fADC = fHRC/4 + ADC_PRESSEL_FHRC_D3 = (uint8_t)0x07 //预分频 fADC = fHRC/3 +} ADC_PresSel_TypeDef; +#elif defined (SC92F742x) || defined (SC92F730x) || defined (SC92F725X) || defined (SC92F735X) || defined (SC92F732X) || defined (SC92F7490)\ + || defined (SC93F833x) || defined (SC93F843x) || defined (SC93F743x) +typedef enum +{ + ADC_PRESSEL_2_MHz = (uint8_t)0x00, //预分频 fADC = 2MHz + ADC_PRESSEL_333_kHz = (uint8_t)0x20 //预分频 fADC = 333kHz +} ADC_PresSel_TypeDef; +#elif defined(SC92F848x) || defined(SC92F748x) +typedef enum +{ + ADC_PRESSEL_FSYS_D16 = (uint8_t)0x00, //预分频 fADC = fSYS/16 + ADC_PRESSEL_FSYS_D12 = (uint8_t)0x01, //预分频 fADC = fSYS/12 + ADC_PRESSEL_FSYS_D8 = (uint8_t)0x02, //预分频 fADC = fSYS/8 + ADC_PRESSEL_FSYS_D6 = (uint8_t)0x03, //预分频 fADC = fSYS/6 + ADC_PRESSEL_FSYS_D4 = (uint8_t)0x04, //预分频 fADC = fSYS/4 + ADC_PRESSEL_FSYS_D3 = (uint8_t)0x05, //预分频 fADC = fSYS/3 + ADC_PRESSEL_FSYS_D2 = (uint8_t)0x06, //预分频 fADC = fSYS/2 + ADC_PRESSEL_FSYS_D1 = (uint8_t)0x07 //预分频 fADC = fSYS/1 +} ADC_PresSel_TypeDef; +#elif defined(SC92F859x) || defined(SC92F759x) +typedef enum +{ + ADC_PRESSEL_FSYS_D16 = (uint8_t)0x00, //预分频 fADC = fSYS/16 + ADC_PRESSEL_FSYS_D12 = (uint8_t)0x01, //预分频 fADC = fSYS/12 + ADC_PRESSEL_FSYS_D6 = (uint8_t)0x02, //预分频 fADC = fSYS/6 + ADC_PRESSEL_FSYS_D4 = (uint8_t)0x03, //预分频 fADC = fSYS/4 +} ADC_PresSel_TypeDef; +#elif defined (SC92L853x) || defined (SC92L753x) +typedef enum +{ + ADC_PRESSEL_3CLOCK = (uint8_t)0x10, //采样时间为3个系统时钟 + ADC_PRESSEL_6CLOCK = (uint8_t)0x14, //采样时间为6个系统时钟 + ADC_PRESSEL_16CLOCK = (uint8_t)0x18, //采样时间为16个系统时钟 + ADC_PRESSEL_32CLOCK = (uint8_t)0x1c //采样时间为32个系统时钟 +} ADC_PresSel_TypeDef; +#endif + +#if defined(SC92F854x) || defined(SC92F754x) || defined(SC92F844xB) || defined(SC92F744xB) || defined(SC92F84Ax_2) || defined(SC92F74Ax_2)\ +|| defined(SC92FWxx) || defined(SC92F859x) || defined (SC92F759x) +typedef enum +{ + ADC_Cycle_6Cycle = (uint8_t)0x00, //ADC采样时间为6个ADC采样时钟周期 + ADC_Cycle_36Cycle = (uint8_t)0x04 //ADC采样时间为36个ADC采样时钟周期 +} ADC_Cycle_TypeDef; +#elif defined (SC92F846xB) || defined (SC92F746xB) || defined (SC92F836xB) || defined (SC92F736xB) || defined (SC92F83Ax) || defined (SC92F73Ax)\ + || defined (SC92F84Ax) || defined (SC92F74Ax) || defined (SC92F7003) || defined(SC92F8003) || defined (SC92F740x) || defined (SC92F848x) || defined (SC92F748x) +typedef enum +{ + ADC_Cycle_6Cycle = (uint8_t)0x00, //ADC采样时间为6个ADC采样时钟周期 + ADC_Cycle_36Cycle = (uint8_t)0x08 //ADC采样时间为36个ADC采样时钟周期 +} ADC_Cycle_TypeDef; +#elif defined (SC92F742x) || defined (SC92F730x) || defined (SC92F725X) || defined (SC92F735X) || defined (SC92F732X)\ +|| defined (SC92F7490) || defined (SC93F833x) || defined (SC93F843x) || defined (SC93F743x) || defined (SC92L853x) || defined (SC92L753x) +typedef enum +{ + ADC_Cycle_Null = (uint8_t)0x00, +} ADC_Cycle_TypeDef; +#endif + +#if defined(SC92F854x) || defined(SC92F754x) || defined(SC92F844xB) || defined(SC92F744xB) || defined(SC92F84Ax_2) || defined(SC92F74Ax_2)\ + || defined(SC92FWxx) || defined(SC92F859x) || defined(SC92F759x) +typedef enum +{ + ADC_CHANNEL_0 = (uint8_t)0x00, //选择AIN0做AD输入口 + ADC_CHANNEL_1 = (uint8_t)0x01, //选择AIN1做AD输入口 + ADC_CHANNEL_2 = (uint8_t)0x02, //选择AIN2做AD输入口 + ADC_CHANNEL_3 = (uint8_t)0x03, //选择AIN3做AD输入口 + ADC_CHANNEL_4 = (uint8_t)0x04, //选择AIN4做AD输入口 + ADC_CHANNEL_5 = (uint8_t)0x05, //选择AIN5做AD输入口 + ADC_CHANNEL_6 = (uint8_t)0x06, //选择AIN6做AD输入口 + ADC_CHANNEL_7 = (uint8_t)0x07, //选择AIN7做AD输入口 + ADC_CHANNEL_8 = (uint8_t)0x08, //选择AIN8做AD输入口 + ADC_CHANNEL_9 = (uint8_t)0x09, //选择AIN9做AD输入口 + ADC_CHANNEL_10 = (uint8_t)0x0A, //选择AIN10做AD输入口 + ADC_CHANNEL_11 = (uint8_t)0x0B, //选择AIN11做AD输入口 + ADC_CHANNEL_12 = (uint8_t)0x0C, //选择AIN12做AD输入口 + ADC_CHANNEL_13 = (uint8_t)0x0D, //选择AIN13做AD输入口 + ADC_CHANNEL_14 = (uint8_t)0x0E, //选择AIN14做AD输入口 + ADC_CHANNEL_15 = (uint8_t)0x0F, //选择AIN15做AD输入口 + ADC_CHANNEL_VDD_D4 = (uint8_t)0x1f //选择内部1/4VDD做AD输入口 +} ADC_Channel_TypeDef; +#elif defined(SC92F7003) || defined(SC92F8003) || defined(SC92F740x) +typedef enum +{ + ADC_CHANNEL_0 = (uint8_t)0x00, //选择AIN0做AD输入口 + ADC_CHANNEL_1 = (uint8_t)0x01, //选择AIN1做AD输入口 + ADC_CHANNEL_2 = (uint8_t)0x02, //选择AIN2做AD输入口 + ADC_CHANNEL_3 = (uint8_t)0x03, //选择AIN3做AD输入口 + ADC_CHANNEL_4 = (uint8_t)0x04, //选择AIN4做AD输入口 + ADC_CHANNEL_5 = (uint8_t)0x05, //选择AIN5做AD输入口 + ADC_CHANNEL_6 = (uint8_t)0x06, //选择AIN6做AD输入口 + ADC_CHANNEL_VDD_D4 = (uint8_t)0x1f //选择内部1/4VDD做AD输入口 +} ADC_Channel_TypeDef; +#elif defined(SC92F846xB) || defined(SC92F746xB) || defined(SC92F836xB) || defined(SC92F736xB) || defined(SC92F83Ax)\ +|| defined(SC92F73Ax) || defined(SC92F84Ax) || defined(SC92F74Ax) || defined(SC92F742x) || defined(SC92F725X)\ +|| defined(SC92F735X) || defined(SC92F732X) || defined(SC92F848x) || defined(SC92F748x) || defined (SC92L853x) || defined (SC92L753x) +typedef enum +{ + ADC_CHANNEL_0 = (uint8_t)0x00, //选择AIN0做AD输入口 + ADC_CHANNEL_1 = (uint8_t)0x01, //选择AIN1做AD输入口 + ADC_CHANNEL_2 = (uint8_t)0x02, //选择AIN2做AD输入口 + ADC_CHANNEL_3 = (uint8_t)0x03, //选择AIN3做AD输入口 + ADC_CHANNEL_4 = (uint8_t)0x04, //选择AIN4做AD输入口 + ADC_CHANNEL_5 = (uint8_t)0x05, //选择AIN5做AD输入口 + ADC_CHANNEL_6 = (uint8_t)0x06, //选择AIN6做AD输入口 + ADC_CHANNEL_7 = (uint8_t)0x07, //选择AIN7做AD输入口 + ADC_CHANNEL_8 = (uint8_t)0x08, //选择AIN8做AD输入口 + ADC_CHANNEL_9 = (uint8_t)0x09, //选择AIN9做AD输入口 + ADC_CHANNEL_VDD_D4 = (uint8_t)0x1f //选择内部1/4VDD做AD输入口 +} ADC_Channel_TypeDef; +#elif defined(SC92F730x) +typedef enum +{ + ADC_CHANNEL_0 = (uint8_t)0x00, //选择AIN0做AD输入口 + ADC_CHANNEL_1 = (uint8_t)0x01, //选择AIN1做AD输入口 + ADC_CHANNEL_6 = (uint8_t)0x06, //选择AIN6做AD输入口 + ADC_CHANNEL_7 = (uint8_t)0x07, //选择AIN7做AD输入口 + ADC_CHANNEL_VDD_D4 = (uint8_t)0x1f //选择内部1/4VDD做AD输入口 +} ADC_Channel_TypeDef; +#elif defined(SC92F7490) +typedef enum +{ + ADC_CHANNEL_0 = (uint8_t)0x00, //选择AIN0做AD输入口 + ADC_CHANNEL_1 = (uint8_t)0x01, //选择AIN1做AD输入口 + ADC_CHANNEL_VDD_D4 = (uint8_t)0x1f //选择内部1/4VDD做AD输入口 +} ADC_Channel_TypeDef; +#elif defined(SC93F833x) || defined(SC93F843x) || defined(SC93F743x) +typedef enum +{ + ADC_CHANNEL_0 = (uint8_t)0x00, //选择AIN0做AD输入口 + ADC_CHANNEL_1 = (uint8_t)0x01, //选择AIN1做AD输入口 + ADC_CHANNEL_2 = (uint8_t)0x02, //选择AIN2做AD输入口 + ADC_CHANNEL_3 = (uint8_t)0x03, //选择AIN3做AD输入口 + ADC_CHANNEL_4 = (uint8_t)0x04, //选择AIN4做AD输入口 + ADC_CHANNEL_5 = (uint8_t)0x05, //选择AIN5做AD输入口 + ADC_CHANNEL_6 = (uint8_t)0x06, //选择AIN6做AD输入口 + ADC_CHANNEL_7 = (uint8_t)0x07, //选择AIN7做AD输入口 + ADC_CHANNEL_8 = (uint8_t)0x08, //选择AIN8做AD输入口 + ADC_CHANNEL_9 = (uint8_t)0x09, //选择AIN9做AD输入口 + ADC_CHANNEL_9_PGA = (uint8_t)0x19, //选择AIN9做PGA输入口 + ADC_CHANNEL_Temp = (uint8_t)0x0e, //选择内部温度传感器做为AD输入口 + ADC_CHANNEL_VDD_D4 = (uint8_t)0x0f //选择内部1/4VDD做AD输入口 +} ADC_Channel_TypeDef; +#endif + +#if defined(SC92F854x) || defined(SC92F754x) || defined(SC92F844xB) || defined(SC92F744xB) || defined(SC92F84Ax_2) || defined(SC92F74Ax_2)\ + || defined(SC92FWxx) || defined(SC92F859x) || defined(SC92F759x) +typedef enum +{ + ADC_EAIN_0 = (uint16_t)0x0001, //选择AIN0 + ADC_EAIN_1 = (uint16_t)0x0002, //选择AIN1 + ADC_EAIN_2 = (uint16_t)0x0004, //选择AIN2 + ADC_EAIN_3 = (uint16_t)0x0008, //选择AIN3 + ADC_EAIN_4 = (uint16_t)0x0010, //选择AIN4 + ADC_EAIN_5 = (uint16_t)0x0020, //选择AIN5 + ADC_EAIN_6 = (uint16_t)0x0040, //选择AIN6 + ADC_EAIN_7 = (uint16_t)0x0080, //选择AIN7 + ADC_EAIN_8 = (uint16_t)0x0100, //选择AIN8 + ADC_EAIN_9 = (uint16_t)0x0200, //选择AIN9 + ADC_EAIN_10 = (uint16_t)0x0400, //选择AIN10 + ADC_EAIN_11 = (uint16_t)0x0800, //选择AIN11 + ADC_EAIN_12 = (uint16_t)0x1000, //选择AIN12 + ADC_EAIN_13 = (uint16_t)0x2000, //选择AIN13 + ADC_EAIN_14 = (uint16_t)0x4000, //选择AIN14 + ADC_EAIN_15 = (uint16_t)0x8000 //选择AIN15 +} ADC_EAIN_TypeDef; +#elif defined(SC92F7003) || defined(SC92F8003) || defined(SC92F740x) +typedef enum +{ + ADC_EAIN_0 = (uint16_t)0x0001, //选择AIN0 + ADC_EAIN_1 = (uint16_t)0x0002, //选择AIN1 + ADC_EAIN_2 = (uint16_t)0x0004, //选择AIN2 + ADC_EAIN_3 = (uint16_t)0x0008, //选择AIN3 + ADC_EAIN_4 = (uint16_t)0x0010, //选择AIN4 + ADC_EAIN_5 = (uint16_t)0x0020, //选择AIN5 + ADC_EAIN_6 = (uint16_t)0x0040 //选择AIN6 +} ADC_EAIN_TypeDef; +#elif defined(SC92F846xB) || defined(SC92F746xB) || defined(SC92F836xB) || defined(SC92F736xB) || defined(SC92F83Ax)\ +|| defined(SC92F73Ax) || defined(SC92F84Ax) || defined(SC92F74Ax) || defined(SC92F742x) || defined(SC92F725X)\ +|| defined(SC92F735X) || defined(SC92F732X) || defined(SC93F833x) || defined(SC93F843x) || defined(SC93F743x)\ +|| defined(SC92F848x) || defined(SC92F748x) || defined (SC92L853x) || defined (SC92L753x) +typedef enum +{ + ADC_EAIN_0 = (uint16_t)0x0001, //选择AIN0 + ADC_EAIN_1 = (uint16_t)0x0002, //选择AIN1 + ADC_EAIN_2 = (uint16_t)0x0004, //选择AIN2 + ADC_EAIN_3 = (uint16_t)0x0008, //选择AIN3 + ADC_EAIN_4 = (uint16_t)0x0010, //选择AIN4 + ADC_EAIN_5 = (uint16_t)0x0020, //选择AIN5 + ADC_EAIN_6 = (uint16_t)0x0040, //选择AIN6 + ADC_EAIN_7 = (uint16_t)0x0080, //选择AIN7 + ADC_EAIN_8 = (uint16_t)0x0100, //选择AIN8 + ADC_EAIN_9 = (uint16_t)0x0200, //选择AIN9 +} ADC_EAIN_TypeDef; +#elif defined(SC92F730x) +typedef enum +{ + ADC_EAIN_0 = (uint16_t)0x0001, //选择AIN0 + ADC_EAIN_1 = (uint16_t)0x0002, //选择AIN1 + ADC_EAIN_6 = (uint16_t)0x0040, //选择AIN6 + ADC_EAIN_7 = (uint16_t)0x0080, //选择AIN7 +} ADC_EAIN_TypeDef; +#elif defined(SC92F7490) +typedef enum +{ + ADC_EAIN_0 = (uint16_t)0x0001, //选择AIN0 + ADC_EAIN_1 = (uint16_t)0x0002, //选择AIN1 +} ADC_EAIN_TypeDef; +#endif + +/* 内部温度采集和可调节增益放大器(PGA)枚举*/ +#if defined(SC93F833x) || defined(SC93F843x) || defined(SC93F743x) +/* PGA共模电压枚举 */ +typedef enum +{ + ADC_PGACOM_0V = 0x00, //共模电压为0V + ADC_PGACOM_1_2V = 0x40, //共模电压为1.2V +} ADC_PGACOM_TypeDef; + +/* PGA同相增益枚举 */ +typedef enum +{ + ADC_PGAGAN_NonInvert20 = 0x00, //同相增益为20,反相增益为19 + ADC_PGAGAN_NonInvert100 = 0x20, //同相增益为100,反相增益为99 +} ADC_PGAGAN_TypeDef; + +/* PGA相位枚举 */ +typedef enum +{ + ADC_PGAIPT_NonInvert = 0x00, //同相输入 + ADC_PGAIPT_Invert = 0x10, //反相输入 +} ADC_PGAIPT_TypeDef; +#endif + +/*******************************宏函数*******************************/ +/***************************************************** +*函数名称:void ADC_ITConfig(FunctionalState NewState, PriorityStatus Priority) +*函数功能:ADC中断初始化 +*入口参数: +FunctionalState:NewState:中断使能/关闭选择 +PriorityStatus:Priority:中断优先级选择 +*出口参数:void +*****************************************************/ +#define ADC_ITConfig(NewState,Priority) \ + do{ \ + EADC = (bit)NewState; \ + IPADC = (bit)Priority; \ + }while(0) + +/***************************************************** +*函数名称:void ADC_StartConversion(void) +*函数功能:开始一次AD转换 +*入口参数:void +*出口参数:void +*****************************************************/ +#define ADC_StartConversion() SET_BIT(ADCCON,0X40) + +/* 内部温度采集和可调节增益放大器函数声明 */ +#if defined(SC93F833x) || defined(SC93F843x) || defined(SC93F743x) +/* 内部温度采集相关函数声明 */ +void ADC_TSCmd(FunctionalState NewState); +void ADC_CHOPConfig(PriorityStatus NewState); +uint16_t ADC_Get_TS_StandardData(void); +float ADC_GetTSValue(void); +/* PGA相关函数声明 */ +void ADC_PGAConfig(ADC_PGACOM_TypeDef ADC_PGACOM, ADC_PGAGAN_TypeDef ADC_PGAGAN, ADC_PGAIPT_TypeDef ADC_PGAIPT); +void ADC_PGACmd(PriorityStatus NewState); +#endif + +/* ADC通用函数声明 */ +void ADC_DeInit(void); +void ADC_Init(ADC_PresSel_TypeDef ADC_PrescalerSelection, ADC_Cycle_TypeDef ADC_Cycle); +void ADC_ChannelConfig(ADC_Channel_TypeDef ADC_Channel, + FunctionalState NewState); +void ADC_Cmd(FunctionalState NewState); +unsigned int ADC_GetConversionValue(void); +FlagStatus ADC_GetFlagStatus(void); +void ADC_ClearFlag(void); +void ADC_EAINConfig(uint16_t ADC_EAIN_Select, + FunctionalState NewState); +void ADC_VrefConfig(ADC_Vref_TypeDef ADC_Vref); + + +#endif + +#endif + +/******************* (C) COPYRIGHT 2020 SinOne Microelectronics *****END OF FILE****/ \ No newline at end of file diff --git a/Keil_C/FWLib/SC92F_Lib/inc/sc92f_btm.h b/Keil_C/FWLib/SC92F_Lib/inc/sc92f_btm.h new file mode 100644 index 0000000..5eb4f1b --- /dev/null +++ b/Keil_C/FWLib/SC92F_Lib/inc/sc92f_btm.h @@ -0,0 +1,89 @@ +//************************************************************ +// Copyright (c) 深圳市赛元微电子有限公司 +// 文件名称: sc92f_btm.h +// 作者: 赛元应用团队 +// 模块功能: BTM固件库函数H文件 +// 最后更正日期: 2022年4月2日 +// 版本: V1.10002 +// 说明: +//************************************************************* +#ifndef _sc92f_BTM_H_ +#define _sc92f_BTM_H_ + +#include "sc92f.h" + +#if defined(SC92F748x) || defined(SC92F848x) || defined(SC92F859x) || defined(SC92F759x) || defined (SC92L853x) || defined (SC92L753x) +typedef enum +{ + BTM_TIMEBASE_15_625MS = (uint8_t)0x00, //BTM每15.625MS产生一次中断 + BTM_TIMEBASE_31_25MS = (uint8_t)0x01, //BTM每31.25MS产生一次中断 + BTM_TIMEBASE_62_5MS = (uint8_t)0x02, //BTM每62.5MS产生一次中断 + BTM_TIMEBASE_125MS = (uint8_t)0x03, //BTM每125MS产生一次中断 + BTM_TIMEBASE_250MS = (uint8_t)0x04, //BTM每0.25S产生一次中断 + BTM_TIMEBASE_500MS = (uint8_t)0x05, //BTM每0.5S产生一次中断 + BTM_TIMEBASE_1S = (uint8_t)0x06, //BTM每1S产生一次中断 + BTM_TIMEBASE_2S = (uint8_t)0x07, //BTM每2S产生一次中断 + BTM_TIMEBASE_8S = (uint8_t)0x09, //BTM每8S产生一次中断 + BTM_TIMEBASE_16S = (uint8_t)0x0A, //BTM每16S产生一次中断 + BTM_TIMEBASE_32S = (uint8_t)0x0B, //BTM每32产生一次中断 +} BTM_Timebase_TypeDef; +#elif defined (SC92F732X) +typedef enum +{ + BTM_TIMEBASE_15_625MS = (uint8_t)0x00, //BTM每15.625MS产生一次中断 + BTM_TIMEBASE_31_25MS = (uint8_t)0x01, //BTM每31.25MS产生一次中断 + BTM_TIMEBASE_62_5MS = (uint8_t)0x02, //BTM每62.5MS产生一次中断 + BTM_TIMEBASE_125MS = (uint8_t)0x03, //BTM每125MS产生一次中断 + BTM_TIMEBASE_250MS = (uint8_t)0x04, //BTM每0.25S产生一次中断 + BTM_TIMEBASE_500MS = (uint8_t)0x05, //BTM每0.5S产生一次中断 + BTM_TIMEBASE_1S = (uint8_t)0x06, //BTM每1S产生一次中断 + BTM_TIMEBASE_2S = (uint8_t)0x07, //BTM每2S产生一次中断 +} BTM_Timebase_TypeDef; +#else +typedef enum +{ + BTM_TIMEBASE_15_625MS = (uint8_t)0x00, //BTM每15.625MS产生一次中断 + BTM_TIMEBASE_31_25MS = (uint8_t)0x01, //BTM每31.25MS产生一次中断 + BTM_TIMEBASE_62_5MS = (uint8_t)0x02, //BTM每62.5MS产生一次中断 + BTM_TIMEBASE_125MS = (uint8_t)0x03, //BTM每125MS产生一次中断 + BTM_TIMEBASE_250MS = (uint8_t)0x04, //BTM每0.25S产生一次中断 + BTM_TIMEBASE_500MS = (uint8_t)0x05, //BTM每0.5S产生一次中断 + BTM_TIMEBASE_1S = (uint8_t)0x06, //BTM每1S产生一次中断 + BTM_TIMEBASE_2S = (uint8_t)0x07, //BTM每2S产生一次中断 + BTM_TIMEBASE_4S = (uint8_t)0x08, //BTM每4S产生一次中断 +} BTM_Timebase_TypeDef; +#endif + +/*******************************宏函数*******************************/ +/************************************************** +*函数名称:void BTM_DeInit(void) +*函数功能:BTM相关寄存器复位至缺省值 +*入口参数:void +*出口参数:void +**************************************************/ +#define BTM_DeInit() CLEAR_REG(BTMCON) + +/***************************************************** +*函数名称:void BTM_GetFlagStatus(void) +*函数功能:获取BTM中断标志状态 +*入口参数:void +*出口参数: +FlagStatus:BTM中断标志状态 +*****************************************************/ +#define BTM_GetFlagStatus() ((READ_BIT(BTMCON,0x40)) ? (SET):(RESET)) + +/***************************************************** +*函数名称:void BTM_ClearFlag(void) +*函数功能:清除BTM中断标志状态 +*入口参数:void +*出口参数:void +*****************************************************/ +#define BTM_ClearFlag() CLEAR_BIT(BTMCON,0x40) + +void BTM_Init(BTM_Timebase_TypeDef BTM_Timebase); +void BTM_Cmd(FunctionalState NewState); +void BTM_ITConfig(FunctionalState NewState, + PriorityStatus Priority); +#endif + +/******************* (C) COPYRIGHT 2020 SinOne Microelectronics *****END OF FILE****/ \ No newline at end of file diff --git a/Keil_C/FWLib/SC92F_Lib/inc/sc92f_chksum.h b/Keil_C/FWLib/SC92F_Lib/inc/sc92f_chksum.h new file mode 100644 index 0000000..b75a7b1 --- /dev/null +++ b/Keil_C/FWLib/SC92F_Lib/inc/sc92f_chksum.h @@ -0,0 +1,28 @@ +//************************************************************ +// Copyright (c) 深圳市赛元微电子有限公司 +// 文件名称 : sc92f_chksum.h +// 作者 : +// 模块功能 : CHKSUM固件库函数头文件 +// 最后更正日期: 2021/8/20 +// 版本 : V1.10000 +// 说明 : +//************************************************************* + +#ifndef _sc92f_CHKSUM_H_ +#define _sc92f_CHKSUM_H_ + +#include "sc92f.h" + +#if defined(SC92F7003) || defined(SC92F8003) || defined(SC92F736xB) || defined(SC92F836xB) || defined(SC92F740x) || defined(SC92F742x)\ + || defined(SC92F73Ax) || defined(SC92F83Ax) || defined(SC92F744xB) || defined(SC92F844xB) || defined(SC92F746xB) || defined(SC92F846xB)\ + || defined(SC92F748x) || defined(SC92F848x) || defined(SC92F74Ax) || defined(SC92F84Ax) || defined(SC92F74Ax_2) || defined(SC92F84Ax_2)\ + || defined(SC92F754x) || defined (SC92F854x) || defined (SC92F759x) || defined(SC92F859x) || defined (SC92F7490) || defined(SC92FWxx)\ + || defined(SC92F827X) || defined(SC92F847X) + void CHKSUM_DeInit(void); + void CHKSUM_StartOperation(void); + uint16_t CHKSUM_GetCheckValue(void); +#endif + +#endif + +/******************* (C) COPYRIGHT 2020 SinOne Microelectronics *****END OF FILE****/ \ No newline at end of file diff --git a/Keil_C/FWLib/SC92F_Lib/inc/sc92f_conf.h b/Keil_C/FWLib/SC92F_Lib/inc/sc92f_conf.h new file mode 100644 index 0000000..ad2c889 --- /dev/null +++ b/Keil_C/FWLib/SC92F_Lib/inc/sc92f_conf.h @@ -0,0 +1,40 @@ +//************************************************************ +// Copyright (c) 深圳市赛元微电子有限公司 +// 文件名称 : sc92f_conf.h +// 作者 : +// 模块功能 : sc92f配置头文件 +// 最后更正日期: 2022/01/24 +// 版本 : V1.10002 +// 说明 :本文件仅适用于赛元92F系列单片机 +//************************************************************* + +#ifndef _sc92f_CONF_H_ +#define _sc92f_CONF_H_ + +#include "sc92f_gpio.h" +#include "sc92f_timer0.h" +#include "sc92f_timer1.h" +#include "sc92f_timer2.h" +#include "sc92f_timer3.h" +#include "sc92f_timer4.h" +#include "sc92f_adc.h" +#include "sc92f_btm.h" +#include "sc92f_pwm.h" +#include "sc92f_int.h" +#include "sc92f_uart0.h" +#include "sc92f_ssi.h" +#include "sc92f_chksum.h" +#include "sc92f_iap.h" +#include "sc92f_option.h" +#include "sc92f_wdt.h" +#include "sc92f_pwr.h" +#include "sc92f_ddic.h" +#include "sc92f_acmp.h" +#include "sc92f_mdu.h" +#include "sc92f_CRC.h" +#include "sc92f_usci0.h" +#include "sc92f_usci1.h" +#include "sc92f_usci2.h" +#include "sc92f_lpd.h" + +#endif \ No newline at end of file diff --git a/Keil_C/FWLib/SC92F_Lib/inc/sc92f_crc.h b/Keil_C/FWLib/SC92F_Lib/inc/sc92f_crc.h new file mode 100644 index 0000000..bafba09 --- /dev/null +++ b/Keil_C/FWLib/SC92F_Lib/inc/sc92f_crc.h @@ -0,0 +1,24 @@ +//************************************************************ +// Copyright (c) 深圳市赛元微电子有限公司 +// 文件名称 : sc92F_CRC.h +// 作者 : +// 模块功能 : CRC固件库函数头文件 +// 最后更正日期: 2020/8/14 +// 版本 : V1.0 +// 说明 :该文件仅适用于SC92F系列芯片 +//************************************************************* + +#ifndef _sc92f_CRC_H_ +#define _sc92f_CRC_H_ + +#include "sc92f.h" + +#if defined (SC92L853x) || defined (SC92L753x) +uint32_t CRC_All(void); //根据IAP Range选项,硬件CRC运算CODE内容,返回CRC结果 +uint32_t CRC_Frame(uint8_t *buff, + uint8_t Length); //软件CRC,将buff指向的数组进行CRC运算,返回CRC结果 +#endif + +#endif + +/******************* (C) COPYRIGHT 2020 SinOne Microelectronics *****END OF FILE****/ \ No newline at end of file diff --git a/Keil_C/FWLib/SC92F_Lib/inc/sc92f_ddic.h b/Keil_C/FWLib/SC92F_Lib/inc/sc92f_ddic.h new file mode 100644 index 0000000..3933fe3 --- /dev/null +++ b/Keil_C/FWLib/SC92F_Lib/inc/sc92f_ddic.h @@ -0,0 +1,195 @@ +//************************************************************ +// Copyright (c) 深圳市赛元微电子有限公司 +// 文件名称 : sc92f_ddic.c +// 作者 : +// 模块功能 : DDIC固件库函数C文件 +// 局部函数列表: +// 最后更正日期: 2022/01/20 +// 版本 : V1.10002 +// 说明 : +//************************************************************* +#ifndef _sc92f_DDIC_H_ +#define _sc92f_DDIC_H_ + +#include "sc92f.h" + +#if defined(SC92F854x) || defined(SC92F754x) || defined(SC92F844xB) || defined(SC92F744xB) || defined(SC92F84Ax_2) || defined(SC92F74Ax_2)\ + || defined(SC92F859x) || defined(SC92F759x) || defined (SC92L853x) || defined (SC92L753x) +typedef enum +{ + DDIC_PIN_X0 = ((uint8_t)0x01), //Px0口打开显示驱动功能 + DDIC_PIN_X1 = ((uint8_t)0x02), //Px1口打开显示驱动功能 + DDIC_PIN_X2 = ((uint8_t)0x04), //Px2口打开显示驱动功能 + DDIC_PIN_X3 = ((uint8_t)0x08), //Px3口打开显示驱动功能 + DDIC_PIN_X4 = ((uint8_t)0x10), //Px4口打开显示驱动功能 + DDIC_PIN_X5 = ((uint8_t)0x20), //Px5口打开显示驱动功能 + DDIC_PIN_X6 = ((uint8_t)0x40), //Px6口打开显示驱动功能 + DDIC_PIN_X7 = ((uint8_t)0x80), //Px7口打开显示驱动功能 +} DDIC_Pin_TypeDef; + +typedef enum +{ + DDIC_DUTYCYCLE_D8 = (uint8_t)0x00, //1/8 占空比 + DDIC_DUTYCYCLE_D6 = (uint8_t)0x10, //1/6 占空比 + DDIC_DUTYCYCLE_D5 = (uint8_t)0x20, //1/5 占空比 + DDIC_DUTYCYCLE_D4 = (uint8_t)0x30 //1/4 占空比 +} DDIC_DutyCycle_TypeDef; + +typedef enum +{ + DDIC_ResSel_100K = (uint8_t)0X00, //设定内部分压电阻为100k + DDIC_ResSel_200K = (uint8_t)0X04, //设定内部分压电阻为200k + DDIC_ResSel_400K = (uint8_t)0X08, //设定内部分压电阻为400k + DDIC_ResSel_800K = (uint8_t)0X0C //设定内部分压电阻为800k +} DDIC_ResSel_Typedef; + +typedef enum +{ + DDIC_BIAS_D3 = 0X01, //LCD偏置电压为1/3 + DDIC_BIAS_D4 = 0X00 //LCD偏置电压为1/4 +} DDIC_BiasVoltage_Typedef; + +#if defined (SC92L853x) || defined (SC92L753x) +typedef enum +{ + SEG0_27COM4_7 = (uint8_t)0x01, // 1/4占空比时,S0-S27为segment,C4-C7为common + SEG4_27COM0_3 = (uint8_t)0x00 // 1/4占空比时,S4-S27为segment,C0-C3为common +} DDIC_OutputPin_TypeDef; + +#else + +typedef enum +{ + SEG0_27COM4_7 = (uint8_t)0x00, // 1/4占空比时,S0-S27为segment,C4-C7为common + SEG4_27COM0_3 = (uint8_t)0x01 // 1/4占空比时,S4-S27为segment,C0-C3为common +} DDIC_OutputPin_TypeDef; + +#endif + +typedef enum +{ + DMOD_LCD = (uint8_t)0x00, // LCD模式 + DMOD_LED = (uint8_t)0x01 // LED模式 +} DDIC_DMOD_TypeDef; + +typedef enum +{ + DDIC_SEG0 = (uint8_t)0, //SEG0 + DDIC_SEG1 = (uint8_t)1, //SEG1 + DDIC_SEG2 = (uint8_t)2, //SEG2 + DDIC_SEG3 = (uint8_t)3, //SEG3 + DDIC_SEG4 = (uint8_t)4, //SEG4 + DDIC_SEG5 = (uint8_t)5, //SEG5 + DDIC_SEG6 = (uint8_t)6, //SEG6 + DDIC_SEG7 = (uint8_t)7, //SEG7 + DDIC_SEG8 = (uint8_t)8, //SEG8 + DDIC_SEG9 = (uint8_t)9, //SEG9 + DDIC_SEG10 = (uint8_t)10, //SEG10 + DDIC_SEG11 = (uint8_t)11, //SEG11 + DDIC_SEG12 = (uint8_t)12, //SEG12 + DDIC_SEG13 = (uint8_t)13, //SEG13 + DDIC_SEG14 = (uint8_t)14, //SEG14 + DDIC_SEG15 = (uint8_t)15, //SEG15 + DDIC_SEG16 = (uint8_t)16, //SEG16 + DDIC_SEG17 = (uint8_t)17, //SEG17 + DDIC_SEG18 = (uint8_t)18, //SEG18 + DDIC_SEG19 = (uint8_t)19, //SEG19 + DDIC_SEG20 = (uint8_t)20, //SEG20 + DDIC_SEG21 = (uint8_t)21, //SEG21 + DDIC_SEG22 = (uint8_t)22, //SEG22 + DDIC_SEG23 = (uint8_t)23, //SEG23 + DDIC_SEG24 = (uint8_t)24, //SEG24 + DDIC_SEG25 = (uint8_t)25, //SEG25 + DDIC_SEG26 = (uint8_t)26, //SEG26 + DDIC_SEG27 = (uint8_t)27, //SEG27 +} DDIC_Control_SEG_TypeDef; + +typedef enum +{ + DDIC_COM0 = (uint8_t)0x01, //COM0 + DDIC_COM1 = (uint8_t)0x02, //COM1 + DDIC_COM2 = (uint8_t)0x04, //COM2 + DDIC_COM3 = (uint8_t)0x08, //COM3 + DDIC_COM4 = (uint8_t)0x10, //COM4 + DDIC_COM5 = (uint8_t)0x20, //COM5 + DDIC_COM6 = (uint8_t)0x40, //COM6 + DDIC_COM7 = (uint8_t)0x80 //COM7 +} DDIC_Control_COM_TypeDef; +typedef enum +{ + DDIC_Control_ON = (uint8_t)0x01, //点亮 + DDIC_Control_OFF = (uint8_t)0x00 //熄灭 +} DDIC_Control_Status; + + +extern uint8_t xdata LCDRAM[30]; + +void DDIC_DeInit(void); +void DDIC_Init(DDIC_DutyCycle_TypeDef + DDIC_DutyCylce, uint8_t P0OutputPin, + uint8_t P1OutputPin, uint8_t P2OutputPin, + uint8_t P3OutputPin); +void DDIC_LEDConfig(void); +void DDIC_LCDConfig(uint8_t LCDVoltage, + DDIC_ResSel_Typedef DDIC_ResSel, + DDIC_BiasVoltage_Typedef DDIC_BiasVoltage); +void DDIC_Cmd(FunctionalState NewState); +void DDIC_OutputPinOfDutycycleD4( + DDIC_OutputPin_TypeDef DDIC_OutputPin); +void DDIC_DMOD_Selcet(DDIC_DMOD_TypeDef + DDIC_DMOD); +void DDIC_Control(DDIC_Control_SEG_TypeDef DDIC_Seg, + uint8_t DDIC_Com, + DDIC_Control_Status DDIC_Contr); +#endif + +#if defined (SC92F846xB) || defined (SC92F746xB) || defined (SC92F836xB) || defined (SC92F736xB)|| defined (SC92F83Ax) || defined (SC92F73Ax)|| defined (SC92F84Ax)|| defined (SC92F74Ax)|| defined (SC92F742x) || defined (SC92F730x) || defined (SC92F725X) || defined (SC92F735X) || defined (SC92F732X) || defined (SC93F833x) || defined (SC93F843x) || defined (SC93F743x) || defined (SC92F848x) || defined (SC92F748x) +#if defined (SC92F730x) +typedef enum +{ + DDIC_PIN_00 = ((uint8_t)0x01), //P0x0口输出LCD + DDIC_PIN_01 = ((uint8_t)0x02), //P0x1口输出LCD + DDIC_PIN_02 = ((uint8_t)0x04), //P0x2口输出LCD + DDIC_PIN_03 = ((uint8_t)0x08), //P0x3口输出LCD +} DDIC_Pin_TypeDef; +#else +typedef enum +{ + DDIC_PIN_00 = ((uint8_t)0x01), //P0x0口输出LCD + DDIC_PIN_01 = ((uint8_t)0x02), //P0x1口输出LCD + DDIC_PIN_02 = ((uint8_t)0x04), //P0x2口输出LCD + DDIC_PIN_03 = ((uint8_t)0x08), //P0x3口输出LCD + DDIC_PIN_04 = ((uint8_t)0x10), //P0x4口输出LCD +} DDIC_Pin_TypeDef; +#endif + +#if defined (SC93F833x) || defined (SC93F843x) || defined (SC93F743x) +typedef enum +{ + DDIC_ResSel_0K = (uint8_t)0X00, //关闭内部分压电阻 + DDIC_ResSel_25K = (uint8_t)0X04, //设定内部分压电阻为12.5k + DDIC_ResSel_50K = (uint8_t)0X08, //设定内部分压电阻为37.5k + DDIC_ResSel_100K = (uint8_t)0X0c //设定内部分压电阻为87.5k +} DDIC_ResSel_Typedef; +#else +typedef enum +{ + DDIC_ResSel_0K = (uint8_t)0X00, //关闭内部分压电阻 + DDIC_ResSel_12_5K = (uint8_t)0X04, //设定内部分压电阻为12.5k + DDIC_ResSel_37_5K = (uint8_t)0X08, //设定内部分压电阻为37.5k + DDIC_ResSel_87_5K = (uint8_t)0X0c //设定内部分压电阻为87.5k +} DDIC_ResSel_Typedef; + +#endif + +void DDIC_DeInit(); +void DDIC_Init(uint8_t P0OutputPin); +void DDIC_LCDConfig(DDIC_ResSel_Typedef + DDIC_ResSel); +void DDIC_Config_Init(uint8_t P0OutputPin, + DDIC_ResSel_Typedef DDIC_ResSel); +#endif + +#endif + +/******************* (C) COPYRIGHT 2022 SinOne Microelectronics *****END OF FILE****/ \ No newline at end of file diff --git a/Keil_C/FWLib/SC92F_Lib/inc/sc92f_gpio.h b/Keil_C/FWLib/SC92F_Lib/inc/sc92f_gpio.h new file mode 100644 index 0000000..c5d7396 --- /dev/null +++ b/Keil_C/FWLib/SC92F_Lib/inc/sc92f_gpio.h @@ -0,0 +1,94 @@ +//************************************************************ +// Copyright (c) 深圳市赛元微电子有限公司 +// 文件名称 : sc92f_gpio.h +// 作者 : +// 模块功能 : GPIO固件库函数头文件 +// 局部函数列表: +// 最后更正日期: 2021/08/20 +// 版本 : V1.10001 +// 说明 : +//************************************************************* + +#ifndef _sc92f_GPIO_H_ +#define _sc92f_GPIO_H_ + +#include "sc92f.h" + +#if defined (SC92F854x) || defined (SC92F754x) ||defined (SC92F844xB) || defined (SC92F744xB) || defined (SC92F84Ax_2) || defined (SC92F74Ax_2)\ + || defined(SC92FWxx)|| defined(SC92F859x) || defined(SC92F759x) +typedef enum +{ + + GPIO0 = (uint8_t)0x00, //P0 + GPIO1 = (uint8_t)0x01, //P1 + GPIO2 = (uint8_t)0x02, //P2 + GPIO3 = (uint8_t)0x03, //P3 + GPIO4 = (uint8_t)0x04, //P4 + GPIO5 = (uint8_t)0x05 //P5 +}GPIO_TypeDef; +#elif defined (SC92F730x ) || defined (SC92F725X) || defined (SC92F735X) || defined (SC92F8003) || defined (SC92F740x) || defined (SC92F827X) || defined (SC92F837X) || defined (SC92F7003) +typedef enum +{ + GPIO0 = (uint8_t)0x00, //P0 + GPIO1 = (uint8_t)0x01, //P1 + GPIO2 = (uint8_t)0x02, //P2 +}GPIO_TypeDef; +#else +typedef enum +{ + GPIO0 = (uint8_t)0x00, //P0 + GPIO1 = (uint8_t)0x01, //P1 + GPIO2 = (uint8_t)0x02, //P2 + GPIO5 = (uint8_t)0x05 //P5 +}GPIO_TypeDef; +#endif + + +typedef enum +{ + GPIO_MODE_IN_HI = (uint8_t)0x00, //高阻输入模式 + GPIO_MODE_IN_PU = (uint8_t)0x01, //带上拉的输入模式 + GPIO_MODE_OUT_PP = (uint8_t)0x02 //强推挽输出模式 +} GPIO_Mode_TypeDef; + +typedef enum +{ + GPIO_PIN_0 = ((uint8_t)0x01), //IO管脚Px0 + GPIO_PIN_1 = ((uint8_t)0x02), //IO管脚Px1 + GPIO_PIN_2 = ((uint8_t)0x04), //IO管脚Px2 + GPIO_PIN_3 = ((uint8_t)0x08), //IO管脚Px3 + GPIO_PIN_4 = ((uint8_t)0x10), //IO管脚Px4 + GPIO_PIN_5 = ((uint8_t)0x20), //IO管脚Px5 + GPIO_PIN_6 = ((uint8_t)0x40), //IO管脚Px6 + GPIO_PIN_7 = ((uint8_t)0x80), //IO管脚Px7 + GPIO_PIN_LNIB = ((uint8_t)0x0F), //IO管脚Px0~3 + GPIO_PIN_HNIB = ((uint8_t)0xF0), //IO管脚Px4~7 + GPIO_PIN_ALL = ((uint8_t)0xFF) //IO管脚Px0~7 +} GPIO_Pin_TypeDef; + +typedef enum +{ + IOH_Grade_0 = ((uint8_t)0x00), //IOH等级0 + IOH_Grade_1 = ((uint8_t)0x01), //IOH等级1 + IOH_Grade_2 = ((uint8_t)0x02), //IOH等级2 + IOH_Grade_3 = ((uint8_t)0x03), //IOH等级3 +} GPIO_IOH_Grade_TypeDef; + +void GPIO_IOH_Config(GPIO_TypeDef GPIOx, GPIO_Pin_TypeDef PortPins,GPIO_IOH_Grade_TypeDef GPIO_IOH_Grade); + +void GPIO_DeInit(void); +void GPIO_Init(GPIO_TypeDef GPIOx, + uint8_t PortPins, GPIO_Mode_TypeDef GPIO_Mode); +void GPIO_Write(GPIO_TypeDef GPIOx, + uint8_t PortVal); +void GPIO_WriteHigh(GPIO_TypeDef GPIOx, + uint8_t PortPins); +void GPIO_WriteLow(GPIO_TypeDef GPIOx, + uint8_t PortPins); +uint8_t GPIO_ReadPort(GPIO_TypeDef GPIOx); +BitStatus GPIO_ReadPin(GPIO_TypeDef GPIOx, + uint8_t PortPins); + +#endif + +/******************* (C) COPYRIGHT 2020 SinOne Microelectronics *****END OF FILE****/ diff --git a/Keil_C/FWLib/SC92F_Lib/inc/sc92f_iap.h b/Keil_C/FWLib/SC92F_Lib/inc/sc92f_iap.h new file mode 100644 index 0000000..9f8ccf9 --- /dev/null +++ b/Keil_C/FWLib/SC92F_Lib/inc/sc92f_iap.h @@ -0,0 +1,82 @@ +//************************************************************ +// Copyright (c) 深圳市赛元微电子有限公司 +// 文件名称: sc92f_iap.h +// 作者: 赛元应用团队 +// 模块功能: IAP固件库函数头文件 +// 最后更正日期: 2022年3月23日 +// 版本: V1.100005 +// 说明: 本文件仅适用于赛元92F/93F/92L系列单片机 +//************************************************************* + +#ifndef _sc92f_IAP_H_ +#define _sc92f_IAP_H_ + +#include "sc92f.h" +#include "intrins.h" + +typedef enum +{ + IAP_MEMTYPE_ROM = (uint8_t)0x00, //IAP操作区域为ROM + IAP_MEMTYPE_UID = (uint8_t)0x01, //IAP操作区域为UID,只允许读操作!!! + IAP_MEMTYPE_EEPROM = (uint8_t)0x02 //IAP操作区域为EEPROM +} IAP_MemType_TypeDef; + + +#if defined(SC92F854x) || defined(SC92F754x) || defined(SC92F844xB) || defined(SC92F744xB) || defined(SC92F84Ax_2) || defined(SC92F74Ax_2)\ +|| defined(SC92F7003) || defined(SC92F8003) || defined(SC92F740x) +typedef enum +{ + IAP_HOLDTIME_1500US = (uint8_t)0x08, //设定CPU Hold Time为1.5MS + IAP_HOLDTIME_3000US = (uint8_t)0x04, //设定CPU Hold Time为3MS + IAP_HOLDTIME_6000US = (uint8_t)0x00 //设定CPU Hold Time为6MS +}IAP_HoldTime_TypeDef; +#elif defined (SC92F846xB) || defined (SC92F746xB) || defined (SC92F836xB) || defined (SC92F736xB)|| defined (SC92F83Ax) || defined (SC92F73Ax)\ + || defined (SC92F84Ax) || defined (SC92F74Ax)|| defined (SC92F742x) || defined (SC92F730x) || defined (SC92F827X) || defined (SC92F837X) \ + || defined (SC92F725X) || defined (SC92F735X) || defined (SC92F732X) || defined (SC92F7490) || defined (SC93F833x) || defined (SC93F843x)\ + || defined (SC93F733x) || defined (SC93F743x) +typedef enum +{ + IAP_HOLDTIME_4MS = (uint8_t)0x00, //设定CPU Hold Time为4MS + IAP_HOLDTIME_2MS = (uint8_t)0x04, //设定CPU Hold Time为2MS + IAP_HOLDTIME_1MS = (uint8_t)0x08 //设定CPU Hold Time为1MS +}IAP_HoldTime_TypeDef; +#elif defined (SC92FWxx) +typedef enum +{ + IAP_HOLDTIME_3000US = (uint8_t)0x00, //设定CPU Hold Time为4MS + IAP_HOLDTIME_1500US = (uint8_t)0x04, //设定CPU Hold Time为2MS + IAP_HOLDTIME_1000US = (uint8_t)0x08 //设定CPU Hold Time为1MS +}IAP_HoldTime_TypeDef; +#elif defined(SC92F848x) || defined(SC92F748x) || defined(SC92F859x) || defined(SC92F759x) || defined (SC92L853x) || defined (SC92L753x) +typedef enum +{ + IAP_HOLDTIME_Null = (uint8_t)0x00 //高速Flash,不需要Hold Time +}IAP_HoldTime_TypeDef; + +typedef enum +{ + IAP_BTLDType_APPROM = (uint8_t)0x00, //MCU复位后从APROM复位 + IAP_BTLDType_LDROM = (uint8_t)0x01, //MCU复位后从LDROM复位 +} IAP_BTLDType_TypeDef; + + +#endif + + +void IAP_DeInit(void); +void IAP_SetHoldTime(IAP_HoldTime_TypeDef IAP_HoldTime); +void IAP_ProgramByte(uint16_t Address, + uint8_t Data, IAP_MemType_TypeDef IAP_MemType, + uint8_t WriteTimeLimit); +uint8_t IAP_ReadByte(uint16_t Address, + IAP_MemType_TypeDef IAP_MemType); + +#if defined(SC92F848x) || defined(SC92F748x) || defined(SC92F859x) || defined(SC92F759x) || defined (SC92L853x) || defined (SC92L753x) +void IAP_SectorErase(IAP_MemType_TypeDef IAP_MemType, uint32_t IAP_SectorEraseAddress, + uint8_t WriteTimeLimit); +void IAP_BootLoaderControl(IAP_BTLDType_TypeDef IAP_BTLDType); +#endif + +#endif + +/******************* (C) COPYRIGHT 2020 SinOne Microelectronics *****END OF FILE****/ \ No newline at end of file diff --git a/Keil_C/FWLib/SC92F_Lib/inc/sc92f_int.h b/Keil_C/FWLib/SC92F_Lib/inc/sc92f_int.h new file mode 100644 index 0000000..ccc3d04 --- /dev/null +++ b/Keil_C/FWLib/SC92F_Lib/inc/sc92f_int.h @@ -0,0 +1,220 @@ +//************************************************************ +// Copyright (c) 深圳市赛元微电子有限公司 +// 文件名称 : sc92f_INT.h +// 作者 : +// 模块功能 : INT固件库函数头文件 +// 局部函数列表: +// 最后更正日期: 2022/01/05 +// 版本 : V1.10003 +// 说明 : +//************************************************************* + +#ifndef _sc92f_INT_H_ +#define _sc92f_INT_H_ + +#include "sc92f.h" + +typedef enum +{ + INT_TRIGGER_RISE_ONLY = (uint8_t)0x01, //外部中断触发方式为上升沿 + INT_TRIGGER_FALL_ONLY = (uint8_t)0x02, //外部中断触发方式为下降沿 + INT_TRIGGER_RISE_FALL = (uint8_t)0x03, //外部中断触发方式为上升沿与下降沿 + INT_TRIGGER_DISABLE = (uint8_t)0x04 //关闭外部中断触发 +} INT_TriggerMode_Typedef; + +typedef enum +{ + INT0 = (uint8_t)0x00, //外部中断0 + INT1 = (uint8_t)0x01, //外部中断1 + INT2 = (uint8_t)0x02 //外部中断2 +} INTx_Typedef; + +#if defined (SC92F846xB) || defined (SC92F746xB) || defined (SC92F836xB) || defined (SC92F736xB)|| defined (SC92F83Ax) || defined (SC92F73Ax)\ + || defined (SC92F84Ax) || defined (SC92F74Ax) || defined (SC92F848x) || defined (SC92F748x) +typedef enum +{ + INT01 = (uint8_t)0x02, //将P11设置为INT0脚 + INT02 = (uint8_t)0x04, //将P12设置为INT0脚 + INT03 = (uint8_t)0x08 //将P13设置为INT0脚 + +} INT0x_Typedef; + +#elif defined (SC92F854x) || defined (SC92F754x) ||defined (SC92F844xB) || defined (SC92F744xB)||defined (SC92F84Ax_2) || defined (SC92F74Ax_2)\ +|| defined (SC92FWxx) || defined (SC92F859x) || defined (SC92F759x) +typedef enum +{ + INT04 = (uint8_t)0x10, //将P04设置为外部中断脚 + INT05 = (uint8_t)0x20, //将P05设置为外部中断脚 + INT06 = (uint8_t)0x40, //将P06设置为外部中断脚 + INT07 = (uint8_t)0x80 //将P07设置为外部中断脚 +} INT0x_Typedef; + +#elif defined (SC92F7003) || defined (SC92F8003) || defined (SC92F740x) +typedef enum +{ + INT00 = (uint8_t)0x01, //将P00设置为INT0脚 + INT01 = (uint8_t)0x02 //将P01设置为INT0脚 +} INT0x_Typedef; + +#elif defined (SC92F742x) || defined (SC92F730x) || defined (SC92F725X) || defined (SC92F735X) || defined (SC92F732X) +typedef enum +{ + INT00 = (uint8_t)0x01, //将P10设置为INT0脚 + INT01 = (uint8_t)0x02, //将P11设置为INT0脚 + INT02 = (uint8_t)0x04, //将P12设置为INT0脚 + INT03 = (uint8_t)0x08 //将P13设置为INT0脚 +} INT0x_Typedef; + +#elif defined (SC92F827X) || defined (SC92F837X) || defined (SC92F7490) || defined (SC93F833x) || defined (SC93F843x) || defined (SC93F743x) || defined (SC92L853x) || defined (SC92L753x) +typedef enum +{ + INT01 = (uint8_t)0x02, //将P11设置为INT0脚 + INT02 = (uint8_t)0x04, //将P12设置为INT0脚 + INT03 = (uint8_t)0x08 //将P13设置为INT0脚 +} INT0x_Typedef; + +#endif + +#if defined (SC92F854x) || defined (SC92F754x) ||defined (SC92F844xB) || defined (SC92F744xB)||defined (SC92F84Ax_2) || defined (SC92F74Ax_2)\ +|| defined (SC92FWxx) || defined (SC92F859x) || defined (SC92F759x) +typedef enum +{ + INT10 = (uint8_t)0x01, //将P40设置为外部中断脚 + INT11 = (uint8_t)0x02, //将P41设置为外部中断脚 + INT12 = (uint8_t)0x04, //将P42设置为外部中断脚 + INT13 = (uint8_t)0x08, //将P43设置为外部中断脚 + INT14 = (uint8_t)0x10, //将P14设置为外部中断脚 + INT15 = (uint8_t)0x20, //将P15设置为外部中断脚 + INT16 = (uint8_t)0x40, //将P16设置为外部中断脚 + INT17 = (uint8_t)0x80 //将P17设置为外部中断脚 +} INT1x_Typedef; + +#elif defined (SC92F846xB) || defined (SC92F746xB) || defined (SC92F836xB) || defined (SC92F736xB)|| defined (SC92F83Ax) || defined (SC92F73Ax)\ + || defined (SC92F84Ax) || defined (SC92F74Ax) || defined (SC92F848x) || defined (SC92F748x) || defined (SC92L853x) || defined (SC92L753x) +typedef enum +{ + INT10 = (uint8_t)0x01, //将P14设置为INT1脚 + INT11 = (uint8_t)0x02, //将P15设置为INT1脚 + INT12 = (uint8_t)0x04, //将P16设置为INT1脚 + INT13 = (uint8_t)0x08 //将P17设置为INT1脚 +} INT1x_Typedef; + +#elif defined (SC92F7003) || defined (SC92F8003) || defined (SC92F740x) +typedef enum +{ + INT10 = (uint8_t)0x01, //将P10设置为INT1脚 + INT11 = (uint8_t)0x02, //将P11设置为INT1脚 + INT12 = (uint8_t)0x04, //将P12设置为INT1脚 + INT13 = (uint8_t)0x08, //将P13设置为INT1脚 + INT14 = (uint8_t)0x10, //将P14设置为INT1脚 + INT15 = (uint8_t)0x20, //将P15设置为INT1脚 + INT16 = (uint8_t)0x40 //将P16设置为INT1脚 +} INT1x_Typedef; + +#elif defined (SC92F742x) || defined (SC92F732X) || defined (SC93F833x) || defined (SC93F843x) || defined (SC93F743x) +typedef enum +{ + INT10 = (uint8_t)0x01, //将P14设置为INT1脚 + INT11 = (uint8_t)0x02, //将P15设置为INT1脚 + INT12 = (uint8_t)0x04, //将P16设置为INT1脚 + INT13 = (uint8_t)0x08 //将P17设置为INT1脚 +} INT1x_Typedef; + +#elif defined (SC92F730x) || defined (SC92F827X) || defined (SC92F837X) || defined (SC92F725X) || defined (SC92F735X) || defined (SC92F7490) +typedef enum +{ + INT_Null = (uint8_t)0x00, //没有INT1引脚 +} INT1x_Typedef; + +#endif + +#if defined (SC92F854x) || defined (SC92F754x) ||defined (SC92F844xB) || defined (SC92F744xB)||defined (SC92F84Ax_2) || defined (SC92F74Ax_2)\ +|| defined (SC92FWxx) || defined (SC92F859x) || defined (SC92F759x) +typedef enum +{ + INT20 = (uint8_t)0x01, //将P20设置为外部中断脚 + INT21 = (uint8_t)0x02, //将P21设置为外部中断脚 + INT22 = (uint8_t)0x04, //将P22设置为外部中断脚 + INT23 = (uint8_t)0x08 //将P23设置为外部中断脚 +} INT2x_Typedef; + +#elif defined (SC92F846xB) || defined (SC92F746xB) || defined (SC92F836xB) || defined (SC92F736xB)|| defined (SC92F83Ax) || defined (SC92F73Ax)\ + || defined (SC92F84Ax) || defined (SC92F74Ax) || defined (SC92F848x) || defined (SC92F748x) || defined (SC92L853x) || defined (SC92L753x) +typedef enum +{ + INT20 = (uint8_t)0x01, //将P04设置为INT2脚 + INT21 = (uint8_t)0x02, //将P05设置为INT2脚 + INT22 = (uint8_t)0x04, //将P06设置为INT2脚 + INT23 = (uint8_t)0x08, //将P07设置为INT2脚 + INT24 = (uint8_t)0x10, //将P20设置为INT2脚 + INT25 = (uint8_t)0x20 //将P21设置为INT2脚 +} INT2x_Typedef; + +#elif defined (SC92F7003) || defined (SC92F8003) || defined (SC92F740x) +typedef enum +{ + INT21 = (uint8_t)0x02, //将P21设置为INT2脚 + INT22 = (uint8_t)0x04, //将P22设置为INT2脚 + INT23 = (uint8_t)0x08, //将P23设置为INT2脚 + INT24 = (uint8_t)0x10, //将P24设置为INT2脚 + INT25 = (uint8_t)0x20, //将P25设置为INT2脚 + INT26 = (uint8_t)0x40, //将P26设置为INT2脚 + INT27 = (uint8_t)0x80 //将P27设置为INT2脚 +} INT2x_Typedef; + +#elif defined (SC92F742x) || defined (SC92F732X) || defined (SC93F833x) || defined (SC93F843x) || defined (SC93F743x) +typedef enum +{ + INT20 = (uint8_t)0x01, //将P04设置为INT2脚 + INT21 = (uint8_t)0x02, //将P05设置为INT2脚 + INT22 = (uint8_t)0x04, //将P06设置为INT2脚 + INT23 = (uint8_t)0x08, //将P07设置为INT2脚 + INT24 = (uint8_t)0x10, //将P20设置为INT2脚 + INT25 = (uint8_t)0x20 //将P21设置为INT2脚 +} INT2x_Typedef; + +#elif defined (SC92F730x) || defined (SC92F725X) || defined (SC92F735X) +typedef enum +{ + INT24 = (uint8_t)0x10, //将P20设置为外部中断脚 + INT25 = (uint8_t)0x20 //将P21设置为外部中断脚 +} INT2x_Typedef; + +#elif defined (SC92F837X) +typedef enum +{ + INT20 = (uint8_t)0x01, //将P04设置为INT2脚 + INT21 = (uint8_t)0x02, //将P05设置为INT2脚 + INT24 = (uint8_t)0x10, //将P20设置为INT2脚 + INT25 = (uint8_t)0x20 //将P21设置为INT2脚 +} INT2x_Typedef; + +#elif defined (SC92F7490) || defined (SC92F827X) +typedef enum +{ + INT21 = (uint8_t)0x02, //将P05设置为INT2脚 + INT24 = (uint8_t)0x10, //将P20设置为INT2脚 + INT25 = (uint8_t)0x20 //将P21设置为INT2脚 +} INT2x_Typedef; + +#endif + + +void INT_DeInit(INTx_Typedef INTx); +void INT0_SetTriggerMode(uint8_t INT0x, + INT_TriggerMode_Typedef TriggerMode); +void INT0_ITConfig(FunctionalState NewState, + PriorityStatus Priority); +#if !defined (SC92F730x) && !defined (SC92F827X) && !defined (SC92F837X) && !defined (SC92F725X) || defined (SC92F735X) +void INT1_SetTriggerMode(uint8_t INT1x, + INT_TriggerMode_Typedef TriggerMode); +void INT1_ITConfig(FunctionalState NewState, + PriorityStatus Priority); +#endif +void INT2_SetTriggerMode(uint8_t INT2x, + INT_TriggerMode_Typedef TriggerMode); +void INT2_ITConfig(FunctionalState NewState, + PriorityStatus Priority); +#endif + +/******************* (C) COPYRIGHT 2020 SinOne Microelectronics *****END OF FILE****/ \ No newline at end of file diff --git a/Keil_C/FWLib/SC92F_Lib/inc/sc92f_lpd.h b/Keil_C/FWLib/SC92F_Lib/inc/sc92f_lpd.h new file mode 100644 index 0000000..fdc7da1 --- /dev/null +++ b/Keil_C/FWLib/SC92F_Lib/inc/sc92f_lpd.h @@ -0,0 +1,59 @@ +//************************************************************ +// Copyright (c) 深圳市赛元微电子有限公司 +// 文件名称: sc92F_LPD.h +// 作者: 赛元应用团队 +// 模块功能: LPD固件库函数头文件 +// 最后更正日期: 2022年3月23日 +// 版本: V1.100001 +// 说明: 该文件仅适用于SC92L系列芯片 +//************************************************************* + +#ifndef _sc92f_LPD_H_ +#define _sc92f_LPD_H_ + +#include "sc92f.h" + +typedef enum +{ + LPD_VTRIP_1_85V = (uint8_t)0x00, //LPD门限电压阈值为1.85V + LPD_VTRIP_2_05V = (uint8_t)0x01, //LPD门限电压阈值为2.05V + LPD_VTRIP_2_25V = (uint8_t)0x02, //LPD门限电压阈值为2.25V + LPD_VTRIP_2_45V = (uint8_t)0x03, //LPD门限电压阈值为2.45V + LPD_VTRIP_2_85V = (uint8_t)0x04, //LPD门限电压阈值为2.85V + LPD_VTRIP_3_45V = (uint8_t)0x05, //LPD门限电压阈值为3.45V + LPD_VTRIP_3_85V = (uint8_t)0x06, //LPD门限电压阈值为3.85V + LPD_VTRIP_4_45V = (uint8_t)0x07, //LPD门限电压阈值为4.45V +} LPD_Vtrip_TypeDef; + +typedef enum +{ + LPD_FLAG_LPDIF = (uint8_t)0x40, //LPD中断请求标志 + LPD_FLAG_LPDOF = (uint8_t)0x80, //LPD状态标志位 +} LPD_Flag_TypeDef; + +/*******************************宏函数*******************************/ +/***************************************************** +*函数名称:FlagStatus LPD_GetFlagStatus(LPD_Flag_Typedef LPD_Flag) +*函数功能:获得LPD中断标志状态 +*入口参数: +LPD_GetFlagStatus:LPD_Flag:中断标志位选择 +*出口参数: +FlagStatus:LPD中断标志位置起状态 +*****************************************************/ +#define LPD_GetFlagStatus(LPD_Flag) ((READ_BIT(SCON,LPD_Flag)) ? (SET):(RESET)) + +/***************************************************** +*函数名称:void LPD_ClearFlag(LPD_Flag_Typedef LPD_Flag) +*函数功能:清除LPD中断标志状态 +*入口参数: +LPD_Flag_Typedef;LPD_Flag:中断标志位选择 +*出口参数:void +*****************************************************/ +#define LPD_ClearFlag() CLEAR_BIT(SCON,LPD_Flag) + +void LPD_DeInit(void); +void LPD_VtripConfig(LPD_Vtrip_TypeDef LPD_Vtrip); +void LPD_ITConfig(FunctionalState NewState, PriorityStatus Priority); +void LPD_Cmd(FunctionalState NewState); + +#endif \ No newline at end of file diff --git a/Keil_C/FWLib/SC92F_Lib/inc/sc92f_mdu.h b/Keil_C/FWLib/SC92F_Lib/inc/sc92f_mdu.h new file mode 100644 index 0000000..250de4d --- /dev/null +++ b/Keil_C/FWLib/SC92F_Lib/inc/sc92f_mdu.h @@ -0,0 +1,48 @@ +//************************************************************ +// Copyright (c) 深圳市赛元微电子有限公司 +// 文件名称 : sc92f_mdu.h +// 作者 : +// 模块功能 : MDU固件库函数头文件 +// 局部函数列表: +// 最后更正日期: 2022/01/24 +// 版本 : V1.10001 +// 说明 : +//************************************************************* + +#ifndef _sc92f_MDU_H_ +#define _sc92f_MDU_H_ + +#include "sc92f.h" + +#if defined (SC92F854x) || defined (SC92F754x) || defined (SC92F844xB) || defined (SC92F744xB) || defined (SC92F84Ax_2) || defined (SC92F74Ax_2)\ + || defined (SC92F846xB) || defined (SC92F746xB) || defined (SC92F836xB) || defined (SC92F736xB) || defined (SC92F848x) || defined (SC92F748x)\ + || defined (SC92F859x) || defined (SC92F759x) || defined (SC92L853x) || defined (SC92L753x) +typedef struct +{ + uint8_t MDU_EXA3Reg; //EXA3寄存器 + uint8_t MDU_EXA2Reg; //EXA2寄存器 + uint8_t MDU_EXA1Reg; //EXA1寄存器 + uint8_t MDU_EXA0Reg; //EXA0寄存器 +} MDU_EXAxReg_Typedef; + +typedef union +{ + MDU_EXAxReg_Typedef MDU_EXAxReg; + uint32_t MDU_Temp; +} MDU_Temp_Union; + +void MDU_DeInit(void); +void MDU_MultiplicationConfig(uint16_t + Multiplicand, uint16_t Multiplier); +void MDU_DivisionConfig(uint32_t Dividend, + uint16_t Divisor); +void MDU_StartOperation(void); +uint32_t MDU_GetProduct(void); +uint32_t MDU_GetQuotient(void); +uint16_t MDU_GetRemainder(void); + +#endif + +#endif + +/******************* (C) COPYRIGHT 2020 SinOne Microelectronics *****END OF FILE****/ \ No newline at end of file diff --git a/Keil_C/FWLib/SC92F_Lib/inc/sc92f_option.h b/Keil_C/FWLib/SC92F_Lib/inc/sc92f_option.h new file mode 100644 index 0000000..d7bc40b --- /dev/null +++ b/Keil_C/FWLib/SC92F_Lib/inc/sc92f_option.h @@ -0,0 +1,141 @@ +//************************************************************ +// Copyright (c) 深圳市赛元微电子有限公司 +// 文件名称 : sc92f_option.h +// 作者 : +// 模块功能 : Customer Option寄存器配置头文件 +// 局部函数列表: +// 最后更正日期: 2022/01/24 +// 版本 : V1.0007 +// 说明 : +//************************************************************* + +#ifndef _sc92f_OPTION_H_ +#define _sc92f_OPTION_H_ + +#include "sc92f.h" + +#if defined (SC92L853x) || defined (SC92L753x) +typedef enum +{ + SYSCLK_PRESSEL_FOSC_D1 = (uint8_t)0x00, //预分频 Fsys = Fosc/1 + SYSCLK_PRESSEL_FOSC_D2 = (uint8_t)0x10, //预分频 Fsys = Fosc/2 + SYSCLK_PRESSEL_FOSC_D4 = (uint8_t)0x20, //预分频 Fsys = Fosc/4 + SYSCLK_PRESSEL_FOSC_D8 = (uint8_t)0x30 //预分频 Fsys = Fosc/8 +} SYSCLK_PresSel_TypeDef; +#else +typedef enum +{ + SYSCLK_PRESSEL_FOSC_D1 = (uint8_t)0x00, //预分频 Fsys = Fosc/1 + SYSCLK_PRESSEL_FOSC_D2 = (uint8_t)0x10, //预分频 Fsys = Fosc/2 + SYSCLK_PRESSEL_FOSC_D4 = (uint8_t)0x20, //预分频 Fsys = Fosc/4 + SYSCLK_PRESSEL_FOSC_D12 = (uint8_t)0x30 //预分频 Fsys = Fosc/12 +} SYSCLK_PresSel_TypeDef; +#endif + +#if defined (SC92F859x) || defined (SC92F759x)||defined (SC92F848x) || defined (SC92F748x) +typedef enum +{ + LVR_INVALID = (uint8_t)0x04, //LVR无效 + LVR_1_9V = (uint8_t)0x00, //LVR 1.9V复位 + LVR_2_9V = (uint8_t)0x01, //LVR 2.9V复位 + LVR_3_7V = (uint8_t)0x02, //LVR 3.7V复位 + LVR_4_3V = (uint8_t)0x03 //LVR 4.3V复位 +} LVR_Config_TypeDef; +#elif defined (SC92L853x) || defined (SC92L753x) +typedef enum +{ + LVR_INVALID = (uint8_t)0x04, //LVR无效 + LVR_1_7V = (uint8_t)0x00, //LVR 1.7V复位 + LVR_2_7V = (uint8_t)0x01, //LVR 2.7V复位 + LVR_3_7V = (uint8_t)0x02, //LVR 3.7V复位 + LVR_4_3V = (uint8_t)0x03 //LVR 4.3V复位 +} LVR_Config_TypeDef; +#else +typedef enum +{ + LVR_INVALID = (uint8_t)0x04, //LVR无效 + LVR_2_3V = (uint8_t)0x00, //LVR 2.3V复位 + LVR_2_9V = (uint8_t)0x01, //LVR 2.9V复位 + LVR_3_7V = (uint8_t)0x02, //LVR 3.7V复位 + LVR_4_3V = (uint8_t)0x03 //LVR 4.3V复位 +} LVR_Config_TypeDef; +#endif + +#if defined (SC92F848x) || defined (SC92F748x) || defined (SC92L853x) || defined (SC92L753x) +typedef enum +{ + IAP_OPERATERANGE_ONLY_EEPROM = (uint8_t)0x00, //只允许EEPROM进行IAP操作 + IAP_OPERATERANGE__LAST_1K_CODEREGION = (uint8_t)0x04, //允许ROM最后1k和EEPROM进行IAP操作 + IAP_OPERATERANGE__LAST_2K_CODEREGION = (uint8_t)0x08, //允许ROM最后2k和EEPROM进行IAP操作 + IAP_OPERATERANGE__ALL_CODEREGION = (uint8_t)0x0c //允许ROM和EEPROM所有区域进行IAP操作 +} IAP_OperateRange_TypeDef; +#else +typedef enum +{ + IAP_OPERATERANGE_ONLY_EEPROM = (uint8_t)0x00, //只允许EEPROM进行IAP操作 + IAP_OPERATERANGE__LAST_0_5K_CODEREGION = (uint8_t)0x04, //允许ROM最后0.5k和EEPROM进行IAP操作 + IAP_OPERATERANGE__LAST_1K_CODEREGION = (uint8_t)0x08, //允许ROM最后1k和EEPROM进行IAP操作 + IAP_OPERATERANGE__ALL_CODEREGION = (uint8_t)0x0c //允许ROM和EEPROM所有区域进行IAP操作 +} IAP_OperateRange_TypeDef; +#endif + + +#if defined (SC92F859x) || defined (SC92F759x) || defined (SC92F848x) || defined (SC92F748x) || defined (SC92L853x) || defined (SC92L753x) +typedef enum +{ + ADC_VREF_VDD = 0x00, //选择VDD做ADC参考电压 + ADC_VREF_1_024V = 0x40, //选择内部1.024V做ADC参考电压 + ADC_VREF_2_4V = 0x80, //选择内部2.4V做ADC参考电压 + ADC_VREF_2_048V = 0xC0, //选择内部2.048V做ADC参考电压 +} ADC_Vref_TypeDef; +#else + +typedef enum +{ + ADC_VREF_VDD = 0x00, //选择VDD做ADC参考电压 + ADC_VREF_2_4V = 0x80, //选择内部2.4V做ADC参考电压 +} ADC_Vref_TypeDef; +#endif + +#if defined (SC92F846xB) || defined (SC92F746xB) || defined (SC92F836xB) || defined (SC92F736xB)|| defined (SC92F83Ax)\ + || defined (SC92F73Ax) || defined (SC92F84Ax) || defined (SC92F74Ax) || defined (SC92F740x)\ + || defined (SC92F848x) || defined (SC92F748x) || defined (SC92F8003) || defined (SC92F7003) +typedef enum +{ + XTIPLL_HIGHER_THAN_12M = (uint8_t)0x40, //外接晶振振荡频率大于等于12M + XTIPLL_UNDER_12M = (uint8_t)0x00 //外接晶振振荡频率小于12M +} XTIPLL_Range_TypeDef; +#endif + +void OPTION_WDT_Cmd(FunctionalState NewState); + +void OPTION_SYSCLK_Init(SYSCLK_PresSel_TypeDef + SYSCLK_PresSel); +#if !defined(SC92F848x) && !defined(SC92F748x) && !defined(SC92F859x) && !defined (SC92F759x) && !defined(SC92L853x) && !defined (SC92L753x) +void OPTION_RST_PIN_Cmd(FunctionalState NewState); +#endif +void OPTION_LVR_Init(LVR_Config_TypeDef + LVR_Config); +void OPTION_ADC_VrefConfig(ADC_Vref_TypeDef ADC_Vref); +void OPTION_IAP_SetOperateRange( + IAP_OperateRange_TypeDef IAP_OperateRange); + +#if defined (SC92F846xB) || defined (SC92F746xB) || defined (SC92F836xB) || defined (SC92F736xB)|| defined (SC92F83Ax)\ + || defined (SC92F73Ax) || defined (SC92F84Ax) || defined (SC92F74Ax) || defined (SC92F740x)\ + || defined (SC92F8003) || defined (SC92F7003) +void OPTION_XTIPLL_SetRange(XTIPLL_Range_TypeDef + XTIPLL_Range); +#endif + +#if !defined(SC92F848x) && !defined(SC92F748x) +void OPTION_XTIPLL_Cmd(FunctionalState NewState); +#endif + +#if defined (SC92F742x)||defined (SC92F83Ax) || defined (SC92F73Ax)|| defined (SC92F84Ax) || defined (SC92F74Ax) \ + ||defined (SC92F74Ax_2)||defined (SC92F84Ax_2)||defined (SC92F844xB)||defined (SC92F744xB) \ + ||defined (SC92F859x) || defined (SC92F759x) ||defined (SC92F848x) || defined (SC92F748x) || defined (SC92L853x) || defined (SC92L753x) +void OPTION_JTG_Cmd(FunctionalState NewState); +#endif + + +#endif \ No newline at end of file diff --git a/Keil_C/FWLib/SC92F_Lib/inc/sc92f_pwm.h b/Keil_C/FWLib/SC92F_Lib/inc/sc92f_pwm.h new file mode 100644 index 0000000..2309a85 --- /dev/null +++ b/Keil_C/FWLib/SC92F_Lib/inc/sc92f_pwm.h @@ -0,0 +1,406 @@ +//************************************************************ +// Copyright (c) 深圳市赛元微电子有限公司 +// 文件名称 : sc92f_pwm.h +// 作者 : +// 模块功能 : PWM固件库函数头文件 +// 局部函数列表: +// 最后更正日期: 2022年7月6日 +// 版本 : V1.10005 +// 说明 : +//************************************************************* + +#ifndef _sc92f_PWM_H_ +#define _sc92f_PWM_H_ + +#include "sc92f.h" +#if !defined (SC92F7490) +#if defined(SC92F854x) || defined(SC92F754x) || defined(SC92F844xB) || defined(SC92F744xB) || defined(SC92F84Ax_2) || defined(SC92F74Ax_2)\ + || defined(SC92F859x) || defined(SC92F759x) +typedef enum +{ + PWM_PRESSEL_FHRC_D1 = (uint8_t)0x00, //PWM预分频为Fhrc/1 + PWM_PRESSEL_FHRC_D2 = (uint8_t)0x10, //PWM预分频为Fhrc/2 + PWM_PRESSEL_FHRC_D4 = (uint8_t)0x20, //PWM预分频为Fhrc/4 + PWM_PRESSEL_FHRC_D8 = (uint8_t)0x30 //PWM预分频为Fhrc/8 +} PWM_PresSel_TypeDef; + +typedef enum +{ + PWM40 = (uint8_t)0x01, //PWM输出通道选择:PWM40 + PWM41 = (uint8_t)0x02, //PWM输出通道选择:PWM41 + PWM42 = (uint8_t)0x04, //PWM输出通道选择:PWM42 + PWM43 = (uint8_t)0x08, //PWM输出通道选择:PWM43 + PWM50 = (uint8_t)0x10, //PWM输出通道选择:PWM50 + PWM51 = (uint8_t)0x20, //PWM输出通道选择:PWM51 + PWM52 = (uint8_t)0x40, //PWM输出通道选择:PWM52 + PWM53 = (uint8_t)0x80 //PWM输出通道选择:PWM53 +} PWM_OutputPin_TypeDef; +#elif defined (SC92F742x) || defined (SC92F730x) || defined (SC92F827X) || defined (SC92F837X) || defined (SC92F725X) || defined(SC92F735X) +typedef enum +{ + PWM_PRESSEL_FSYS_D1 = (uint8_t)0x00, //PWM预分频为Fsys/1 + PWM_PRESSEL_FSYS_D2 = (uint8_t)0x01, //PWM预分频为Fsys/2 + PWM_PRESSEL_FSYS_D4 = (uint8_t)0x02, //PWM预分频为Fsys/4 + PWM_PRESSEL_FSYS_D8 = (uint8_t)0x03, //PWM预分频为Fsys/8 + PWM_PRESSEL_FSYS_D32 = (uint8_t)0x04, //PWM预分频为Fsys/32 + PWM_PRESSEL_FSYS_D64 = (uint8_t)0x05, //PWM预分频为Fsys/64 + PWM_PRESSEL_FSYS_D128 = (uint8_t)0x06, //PWM预分频为Fsys/128 + PWM_PRESSEL_FSYS_D256 = (uint8_t)0x07 //PWM预分频为Fsys/256 +} PWM_PresSel_TypeDef; + +#if defined (SC92F827X) +typedef enum +{ + PWM0 = (uint8_t)0x01, //PWM输出通道选择:PWM0 + PWM1 = (uint8_t)0x02, //PWM输出通道选择:PWM1 +} PWM_OutputPin_TypeDef; +#elif defined (SC92F732X) || defined (SC93F833x) || defined (SC93F843x) || defined (SC93F743x) +typedef enum +{ + PWM0 = (uint8_t)0x01, //PWM输出通道选择:PWM0 + PWM1 = (uint8_t)0x02, //PWM输出通道选择:PWM1 + PWM2 = (uint8_t)0x04, //PWM输出通道选择:PWM2 +} PWM_OutputPin_TypeDef; +#elif defined (SC92F837X) +typedef enum +{ + PWM0 = (uint8_t)0x01, //PWM输出通道选择:PWM0 + PWM1 = (uint8_t)0x02, //PWM输出通道选择:PWM1 + PWM2 = (uint8_t)0x04, //PWM输出通道选择:PWM2 + PWM3 = (uint8_t)0x08, //PWM输出通道选择:PWM3 +} PWM_OutputPin_TypeDef; +#elif defined (SC92F730x) +typedef enum +{ + PWM0 = (uint8_t)0x01, //PWM输出通道选择:PWM0 + PWM1 = (uint8_t)0x02, //PWM输出通道选择:PWM1 + PWM2 = (uint8_t)0x04, //PWM输出通道选择:PWM2 + PWM4 = (uint8_t)0x10, //PWM输出通道选择:PWM4 + PWM5 = (uint8_t)0x20 //PWM输出通道选择:PWM5 +} PWM_OutputPin_TypeDef; +#else +typedef enum +{ + PWM0 = (uint8_t)0x01, //PWM输出通道选择:PWM0 + PWM1 = (uint8_t)0x02, //PWM输出通道选择:PWM1 + PWM2 = (uint8_t)0x04, //PWM输出通道选择:PWM2 + PWM3 = (uint8_t)0x08, //PWM输出通道选择:PWM3 + PWM4 = (uint8_t)0x10, //PWM输出通道选择:PWM4 + PWM5 = (uint8_t)0x20 //PWM输出通道选择:PWM5 +} PWM_OutputPin_TypeDef; +#endif + +#elif defined (SC92F846xB) || defined (SC92F746xB) || defined (SC92F836xB) || defined (SC92F736xB)|| defined (SC92F83Ax) || defined (SC92F73Ax)|| defined (SC92F84Ax) || defined (SC92F74Ax) || defined (SC92F848x) || defined (SC92F748x) +typedef enum +{ + PWM_PRESSEL_FOSC_D1 = (uint8_t)0x00, //PWM预分频为Fosc/1 + PWM_PRESSEL_FOSC_D2 = (uint8_t)0x01, //PWM预分频为Fosc/2 + PWM_PRESSEL_FOSC_D8 = (uint8_t)0x02, //PWM预分频为Fosc/8 + PWM_PRESSEL_FOSC_D32 = (uint8_t)0x03 //PWM预分频为Fosc/32 +} PWM_PresSel_TypeDef; +typedef enum +{ + PWM0 = (uint8_t)0x01, //PWM输出通道选择:PWM0 + PWM1 = (uint8_t)0x02, //PWM输出通道选择:PWM1 + PWM2 = (uint8_t)0x04, //PWM输出通道选择:PWM2 + PWM3 = (uint8_t)0x08, //PWM输出通道选择:PWM3 + PWM4 = (uint8_t)0x10, //PWM输出通道选择:PWM4 + PWM5 = (uint8_t)0x20, //PWM输出通道选择:PWM5 +} PWM_OutputPin_TypeDef; + +typedef enum +{ + PWM0PWM3 = (uint8_t)0x00, //PWM互补模式通道选择:PWM0、PWM3 + PWM1PWM4 = (uint8_t)0x01, //PWM互补模式通道选择:PWM1、PWM4 + PWM2PWM5 = (uint8_t)0x02 //PWM互补模式通道选择:PWM2、PWM5 +} PWM_ComplementaryOutputPin_TypeDef; +#elif defined (SC92F7003) || defined (SC92F8003) || defined (SC92F740x) +typedef enum +{ + PWM_PRESSEL_FOSC_D1 = (uint8_t)0x00, //PWM预分频为Fosc/1 + PWM_PRESSEL_FOSC_D2 = (uint8_t)0x01, //PWM预分频为Fosc/2 + PWM_PRESSEL_FOSC_D8 = (uint8_t)0x02, //PWM预分频为Fosc/8 + PWM_PRESSEL_FOSC_D32 = (uint8_t)0x03 //PWM预分频为Fosc/32 +} PWM_PresSel_TypeDef; +typedef enum +{ + PWM2_OutputPin_P26 = ((uint8_t)0x00), //PWM2输出口选择P26 + PWM2_OutputPin_P14 = ((uint8_t)0x04) //PWM2输出口选择P14 +} PWM2_OutputPin_TypeDef; + +typedef enum +{ + PWM5_OutputPin_P12 = ((uint8_t)0x00), //PWM5输出口选择P12 + PWM5_OutputPin_P21 = ((uint8_t)0x08) //PWM5输出口选择P21 +} PWM5_OutputPin_TypeDef; + +typedef enum +{ + PWM0 = (uint8_t)0x01, //PWM输出通道选择:PWM0 + PWM1 = (uint8_t)0x02, //PWM输出通道选择:PWM1 + PWM2 = (uint8_t)0x04, //PWM输出通道选择:PWM2 + PWM3 = (uint8_t)0x08, //PWM输出通道选择:PWM3 + PWM4 = (uint8_t)0x10, //PWM输出通道选择:PWM4 + PWM5 = (uint8_t)0x20, //PWM输出通道选择:PWM5 + PWM6 = (uint8_t)0x40, //PWM输出通道选择:PWM6 +} PWM_OutputPin_TypeDef; + +typedef enum +{ + PWM0PWM3 = (uint8_t)0x00, //PWM互补模式通道选择:PWM0、PWM3 + PWM1PWM4 = (uint8_t)0x01, //PWM互补模式通道选择:PWM1、PWM4 + PWM2PWM5 = (uint8_t)0x02 //PWM互补模式通道选择:PWM2、PWM5 +} PWM_ComplementaryOutputPin_TypeDef; +#elif defined (SC92F732X) || defined (SC93F833x) || defined (SC93F843x) || defined (SC93F743x) +typedef enum +{ + PWM_PRESSEL_FSYS_D1 = (uint8_t)0x00, //PWM预分频为Fsys/1 + PWM_PRESSEL_FSYS_D2 = (uint8_t)0x01, //PWM预分频为Fsys/2 + PWM_PRESSEL_FSYS_D4 = (uint8_t)0x02, //PWM预分频为Fsys/4 + PWM_PRESSEL_FSYS_D8 = (uint8_t)0x03, //PWM预分频为Fsys/8 + PWM_PRESSEL_FSYS_D32 = (uint8_t)0x04, //PWM预分频为Fsys/32 + PWM_PRESSEL_FSYS_D64 = (uint8_t)0x05, //PWM预分频为Fsys/64 + PWM_PRESSEL_FSYS_D128 = (uint8_t)0x06, //PWM预分频为Fsys/128 + PWM_PRESSEL_FSYS_D256 = (uint8_t)0x07 //PWM预分频为Fsys/256 +} PWM_PresSel_TypeDef; + +typedef enum +{ + PWM0 = (uint8_t)0x01, //PWM输出通道选择:PWM0 + PWM1 = (uint8_t)0x02, //PWM输出通道选择:PWM1 + PWM2 = (uint8_t)0x04, //PWM输出通道选择:PWM2 +} PWM_OutputPin_TypeDef; + +typedef enum +{ + PWM0_OutputPin_P00 = ((uint8_t)0x00), //PWM2输出口选择P26 + PWM0_OutputPin_P25 = ((uint8_t)0x01) //PWM2输出口选择P14 +} PWM0_OutputPin_TypeDef; + +typedef enum +{ + PWM1_OutputPin_P01 = ((uint8_t)0x00), //PWM5输出口选择P12 + PWM1_OutputPin_P26 = ((uint8_t)0x02) //PWM5输出口选择P21 +} PWM1_OutputPin_TypeDef; + +typedef enum +{ + PWM2_OutputPin_P02 = ((uint8_t)0x00), //PWM2输出口选择P26 + PWM2_OutputPin_P27 = ((uint8_t)0x04) //PWM2输出口选择P14 +} PWM2_OutputPin_TypeDef; + +//duty微调控制,以四个PWM2周期为一个循环: +typedef enum +{ + PWM_DutyMode0 = ((uint8_t)0x00), //00:四个PWM2输出的duty均为PDT2设定值;(D、D、D、D) + PWM_DutyMode1 = ((uint8_t)0x01), //01:第一个PWM2输出的duty为PDT2设定值加1,其余三个PWM2输出的duty均为PDT2设定值;(D+1、D、D、D) + PWM_DutyMode2 = ((uint8_t)0x02), //10:第一和第二个PWM2输出的duty为PDT2设定值加1,其余二个PWM2输出的duty均为PDT2设定值;(D+1、D+1、D、D) + PWM_DutyMode3 = ((uint8_t)0x03), //11:第一、第二和第三个PWM2输出的duty为PDT2设定值加1,第四个PWM2输出的Duty为PDT2设定值; (D+1、D+1、D+1、D) +} PWM_DutyMode_TypeDef; +#elif defined (SC92FWxx) +typedef enum +{ + PWM0_PRESSEL_FHRC_D1 = (uint8_t)0x00, //PWM0预分频为Fhrc/1 + PWM0_PRESSEL_FHRC_D2 = (uint8_t)0x10, //PWM0预分频为Fhrc/2 + PWM0_PRESSEL_FHRC_D4 = (uint8_t)0x20, //PWM0预分频为Fhrc/4 + PWM0_PRESSEL_FHRC_D8 = (uint8_t)0x30, //PWM0预分频为Fhrc/8 + PWM1_PRESSEL_FHRC_D1 = (uint8_t)0x01, //PWM1预分频为Fhrc/1 + PWM1_PRESSEL_FHRC_D2 = (uint8_t)0x11, //PWM1预分频为Fhrc/2 + PWM1_PRESSEL_FHRC_D4 = (uint8_t)0x21, //PWM1预分频为Fhrc/4 + PWM1_PRESSEL_FHRC_D8 = (uint8_t)0x31, //PWM1预分频为Fhrc/8 +} PWM_PresSel_TypeDef; + +typedef enum +{ + PWM000 = (uint8_t)0x00, //PWM输出通道选择: PWM000 + PWM001 = (uint8_t)0x02, //PWM输出通道选择: PWM001 + PWM002 = (uint8_t)0x04, //PWM输出通道选择: PWM002 + PWM003 = (uint8_t)0x06, //PWM输出通道选择: PWM003 + PWM004 = (uint8_t)0x08, //PWM输出通道选择: PWM004 + PWM005 = (uint8_t)0x0A, //PWM输出通道选择: PWM005 + PWM006 = (uint8_t)0x0C, //PWM输出通道选择: PWM006 + PWM007 = (uint8_t)0x0E, //PWM输出通道选择: PWM007 + PWM010 = (uint8_t)0x10, //PWM输出通道选择: PWM010 + PWM011 = (uint8_t)0x12, //PWM输出通道选择: PWM011 + PWM012 = (uint8_t)0x14, //PWM输出通道选择: PWM012 + PWM013 = (uint8_t)0x16, //PWM输出通道选择: PWM013 + PWM014 = (uint8_t)0x18, //PWM输出通道选择: PWM014 + PWM015 = (uint8_t)0x1A, //PWM输出通道选择: PWM015 + PWM016 = (uint8_t)0x1C, //PWM输出通道选择: PWM016 + PWM017 = (uint8_t)0x1E, //PWM输出通道选择: PWM017 + PWM020 = (uint8_t)0x20, //PWM输出通道选择: PWM020 + PWM021 = (uint8_t)0x22, //PWM输出通道选择: PWM021 + PWM022 = (uint8_t)0x24, //PWM输出通道选择: PWM022 + PWM023 = (uint8_t)0x26, //PWM输出通道选择: PWM023 + PWM024 = (uint8_t)0x28, //PWM输出通道选择: PWM024 + PWM025 = (uint8_t)0x2A, //PWM输出通道选择: PWM025 + PWM026 = (uint8_t)0x2C, //PWM输出通道选择: PWM026 + PWM027 = (uint8_t)0x2E, //PWM输出通道选择: PWM027 + PWM030 = (uint8_t)0x30, //PWM输出通道选择: PWM030 + PWM031 = (uint8_t)0x32, //PWM输出通道选择: PWM031 + PWM032 = (uint8_t)0x34, //PWM输出通道选择: PWM032 + PWM033 = (uint8_t)0x36, //PWM输出通道选择: PWM033 + PWM034 = (uint8_t)0x38, //PWM输出通道选择: PWM034 + PWM035 = (uint8_t)0x3A, //PWM输出通道选择: PWM025 + PWM036 = (uint8_t)0x3C, //PWM输出通道选择: PWM026 + PWM037 = (uint8_t)0x3E, //PWM输出通道选择: PWM027 + PWM140 = (uint8_t)0x40, //PWM输出通道选择: PWM140 + PWM141 = (uint8_t)0x42, //PWM输出通道选择: PWM141 + PWM142 = (uint8_t)0x44, //PWM输出通道选择: PWM142 + PWM143 = (uint8_t)0x46, //PWM输出通道选择: PWM153 + PWM150 = (uint8_t)0x48, //PWM输出通道选择: PWM150 + PWM151 = (uint8_t)0x4A, //PWM输出通道选择: PWM151 + PWM152 = (uint8_t)0x4C, //PWM输出通道选择: PWM152 + PWM153 = (uint8_t)0x4E, //PWM输出通道选择: PWM153 +} PWM_OutputPin_TypeDef; + +typedef enum +{ + PWM0_Type = (uint8_t)0x00, //PWM预分频为Fhrc/1 + PWM1_Type = (uint8_t)0x01, //PWM预分频为Fhrc/2 +} PWM_Type_TypeDef; + +#elif defined (SC92L853x) || defined (SC92L753x) +//PWM预分频选择 +typedef enum +{ + PWM_PRESSEL_FHRC_D1 = (uint8_t)0x00, //PWM0预分频为Fhrc/1 + PWM_PRESSEL_FHRC_D2 = (uint8_t)0x10, //PWM0预分频为Fhrc/2 + PWM_PRESSEL_FHRC_D4 = (uint8_t)0x20, //PWM0预分频为Fhrc/4 + PWM_PRESSEL_FHRC_D8 = (uint8_t)0x30, //PWM0预分频为Fhrc/8 +} PWM_PresSel_TypeDef; + +//PWM输出通道选择 +typedef enum +{ + PWM0 = (uint8_t)0x00, //PWM输出通道选择: PWM00 + PWM1 = (uint8_t)0x02, //PWM输出通道选择: PWM01 + PWM2 = (uint8_t)0x04, //PWM输出通道选择: PWM02 + PWM3 = (uint8_t)0x06, //PWM输出通道选择: PWM03 + PWM4 = (uint8_t)0x08, //PWM输出通道选择: PWM04 + PWM5 = (uint8_t)0x0A, //PWM输出通道选择: PWM05 + PWM6 = (uint8_t)0x0C, //PWM输出通道选择: PWM06 + PWM7 = (uint8_t)0x0E, //PWM输出通道选择: PWM07 +} PWM_OutputPin_TypeDef; + +//PWM对齐模式 +typedef enum +{ + PWM0_Edge_Aligned_Mode = (uint8_t)0x00, //PWM边沿对齐模式 + PWM0_Center_Alignment_Mode = (uint8_t)0x01, //PWM中间对齐模式 +} PWM_Aligned_Mode_TypeDef; + +//PWM故障检测模式 +typedef enum +{ + PWM0_Latch_Mode = ((uint8_t)0x00), //PWM故障检测模式:锁存模式 + PWM0_Immediate_Mode = ((uint8_t)0x20) //PWM故障检测模式:立即模式 +} PWM_FaultDetectionMode_TypeDef; + +//PWM故障检测电平选择 +typedef enum +{ + PWM0_FaultDetectionVoltage_Low = ((uint8_t)0x00), //PWM故障检测低电平选择 + PWM0_FaultDetectionVoltage_high = ((uint8_t)0x10) //PWM故障检测高电平选择 +} PWM_FaultDetectionVoltageSelect_TypeDef; + +//PWM故障检测输入信号滤波时间 +typedef enum +{ + PWM0_WaveFilteringTime_0us = ((uint8_t)0x00), //PWM故障检测输入信号滤波时间0us + PWM0_WaveFilteringTime_1us = ((uint8_t)0x01), //PWM故障检测输入信号滤波时间1us + PWM0_WaveFilteringTime_4us = ((uint8_t)0x02), //PWM故障检测输入信号滤波时间4us + PWM0_WaveFilteringTime_16us = ((uint8_t)0x03) //PWM故障检测输入信号滤波时间16us +} PWM_FaultDetectionWaveFilteringTime_TypeDef; + +//PWM互补模式通道选择 +typedef enum +{ + PWM0PWM1 = (uint8_t)0x00, //PWM互补模式通道选择:PWM00、PWM01 + PWM2PWM3 = (uint8_t)0x04, //PWM互补模式通道选择:PWM02、PWM03 + PWM4PWM5 = (uint8_t)0x08, //PWM互补模式通道选择:PWM04、PWM05 + PWM6PWM7 = (uint8_t)0x0C //PWM互补模式通道选择:PWM06、PWM07 +} PWM_ComplementaryOutputPin_TypeDef; + +//PWM源选择 +typedef enum +{ + PWM0_Type = (uint8_t)0x00, //操作PWM0 +} PWM_Type_TypeDef; +#endif + +typedef enum +{ + PWM_OUTPUTSTATE_DISABLE = ((uint8_t)0x00), //该PIN脚作为GPIO + PWM_OUTPUTSTATE_ENABLE = ((uint8_t)0x01) //该PIN脚作为PWM +} PWM_OutputState_TypeDef; + +typedef enum +{ + PWM_POLARITY_NON_INVERT = ((uint8_t)0x00), //PWM输出不反向` + PWM_POLARITY_INVERT = ((uint8_t)0x01) //PWM输出反向 +} PWM_Polarity_TypeDef; + +void PWM_DeInit(void); +void PWM_Init(PWM_PresSel_TypeDef PWM_PresSel, + uint16_t PWM_Period); +void PWM_OutputStateConfig(uint8_t PWM_OutputPin, + PWM_OutputState_TypeDef PWM_OutputState); +void PWM_PolarityConfig(uint8_t PWM_OutputPin, + PWM_Polarity_TypeDef PWM_Polarity); +void PWM_IndependentModeConfig(PWM_OutputPin_TypeDef PWM_OutputPin, + uint16_t PWM_DutyCycle); +void PWM_ITConfig(FunctionalState NewState, + PriorityStatus Priority); + +#if defined (SC92FWxx) || defined (SC92L853x) || defined (SC92L753x) +#if !defined (SC92FWxx) +void PWM_Aligned_Mode_Select(PWM_Aligned_Mode_TypeDef PWM_Aligned_Mode); +void PWM_FaultDetectionModeConfigEX(PWM_Type_TypeDef PWM_Type, + PWM_FaultDetectionMode_TypeDef FaultDetectionMode, + PWM_FaultDetectionVoltageSelect_TypeDef FaultDetectionVoltageSelect, + PWM_FaultDetectionWaveFilteringTime_TypeDef FaultDetectionWaveFilteringTime); +#endif +void PWM_CmdEX(PWM_Type_TypeDef PWM_Type, + FunctionalState NewState); +FlagStatus PWM_GetFlagStatusEX(PWM_Type_TypeDef PWM_Type); +void PWM_ClearFlagEX(PWM_Type_TypeDef PWM_Type); +void PWM_IndependentModeConfigEX(PWM_OutputPin_TypeDef PWM_OutputPin, uint16_t PWM_DutyCycle, + PWM_OutputState_TypeDef PWM_OutputState); + +void PWM_ITConfigEX(PWM_Type_TypeDef PWM_Type, FunctionalState NewState, PriorityStatus Priority); +FlagStatus PWM_GetFaultDetectionFlagStatusEX(PWM_Type_TypeDef PWM_Type); +void PWM_ClearFaultDetectionFlagEX(PWM_Type_TypeDef PWM_Type); +void PWM_FaultDetectionConfigEX(PWM_Type_TypeDef PWM_Type, FunctionalState NewState); +#else +void PWM_Cmd(FunctionalState NewState); +FlagStatus PWM_GetFlagStatus(void); +void PWM_ClearFlag(void); +#endif + +/* 复用通道以及死区配置函数 */ +#if defined (SC92F846xB) || defined (SC92F746xB) || defined (SC92F836xB) || defined (SC92F736xB)|| defined (SC92F83Ax) || defined (SC92F73Ax)|| defined (SC92F84Ax) || defined (SC92F74Ax)|| defined (SC92F7003) || defined (SC92F8003) || defined (SC92F740x) || defined (SC92F848x) || defined (SC92F748x) || defined (SC92F848x) || defined (SC92F748x) +void PWM_ComplementaryModeConfig( PWM_ComplementaryOutputPin_TypeDef + PWM_ComplementaryOutputPin, + uint16_t PWM_DutyCycle); +void PWM_DeadTimeConfig(uint8_t PWM012_RisingDeadTime, uint8_t PWM345_fallingDeadTime); +#endif +#if defined (SC92L853x) || defined (SC92L753x) +void PWM_DeadTimeConfigEX(PWM_Type_TypeDef PWM_Type, uint8_t PWM_RisingDeadTime, uint8_t PWM_FallingDeadTime); +#endif +/* PWM输出通道选择 */ +#if defined (SC92F8003) || defined (SC92F740x) || defined (SC92F7003) + void PWM_PWM2Selection(PWM2_OutputPin_TypeDef PWM2_OutputPin); + void PWM_PWM5Selection(PWM5_OutputPin_TypeDef PWM5_OutputPin); +#endif +#if defined (SC92F732X) || defined (SC93F833x) || defined (SC93F843x) || defined (SC93F743x) + void PWM_PWM0Selection(PWM0_OutputPin_TypeDef PWM0_OutputPin); + void PWM_PWM1Selection(PWM1_OutputPin_TypeDef PWM1_OutputPin); + void PWM_PWM2Selection(PWM2_OutputPin_TypeDef PWM2_OutputPin); + void PMM_DutyModeSelection(PWM_OutputPin_TypeDef PWM_OutputPin, PWM_DutyMode_TypeDef PWM_DutyMode); +#endif + +#endif + +#endif +/******************* (C) COPYRIGHT 2020 SinOne Microelectronics *****END OF FILE****/ \ No newline at end of file diff --git a/Keil_C/FWLib/SC92F_Lib/inc/sc92f_pwr.h b/Keil_C/FWLib/SC92F_Lib/inc/sc92f_pwr.h new file mode 100644 index 0000000..ddb4f72 --- /dev/null +++ b/Keil_C/FWLib/SC92F_Lib/inc/sc92f_pwr.h @@ -0,0 +1,24 @@ +//************************************************************ +// Copyright (c) 深圳市赛元微电子有限公司 +// 文件名称 : sc92f_pwr.h +// 作者 : +// 模块功能 : PWR固件库函数头文件 +// 局部函数列表: +// 最后更正日期: 2020/8/18 +// 版本 : V1.0 +// 说明 : +//************************************************************* + +#ifndef _sc92f_PWR_H_ +#define _sc92f_PWR_H_ + +#include "sc92f.h" +#include + +void PWR_DeInit(void); +void PWR_EnterSTOPMode(void); +void PWR_EnterIDLEMode(void); + +#endif + +/******************* (C) COPYRIGHT 2020 SinOne Microelectronics *****END OF FILE****/ \ No newline at end of file diff --git a/Keil_C/FWLib/SC92F_Lib/inc/sc92f_ssi.h b/Keil_C/FWLib/SC92F_Lib/inc/sc92f_ssi.h new file mode 100644 index 0000000..3159e3a --- /dev/null +++ b/Keil_C/FWLib/SC92F_Lib/inc/sc92f_ssi.h @@ -0,0 +1,282 @@ +//************************************************************ +// Copyright (c) 深圳市赛元微电子有限公司 +// 文件名称 : sc92f_ssi.h +// 作者 : +// 模块功能 : SSI固件库函数头文件 +// 局部函数列表: +// 最后更正日期: 2020/08/20 +// 版本 : V1.10001 +// 说明 : +//************************************************************* + +#ifndef _sc92f_SSI_H_ +#define _sc92f_SSI_H_ + +#include "sc92f.h" + +#if defined (SC92F854x) || defined (SC92F754x) ||defined (SC92F844xB) || defined (SC92F744xB)||defined (SC92F84Ax_2) || defined (SC92F74Ax_2)\ + || defined (SC92F846xB) || defined (SC92F746xB) || defined (SC92F836xB) || defined (SC92F736xB)||defined (SC92F84Ax) || defined (SC92F74Ax)\ + || defined (SC92F83Ax) || defined (SC92F73Ax) || defined (SC92F7003) || defined(SC92F8003) || defined (SC92F740x) || defined (SC92F827X)\ + || defined (SC92F837X) || defined (SC92FWxx) || defined (SC93F833x) || defined (SC93F843x) || defined (SC93F743x) || defined (SC92F848x) || defined (SC92F748x)\ + || defined (SC92F859x) || defined (SC92F859x) +typedef enum +{ + SPI_FIRSTBIT_MSB = (uint8_t)0x00, //MSB优先发送 + SPI_FIRSTBIT_LSB = (uint8_t)0x04 //LSB优先发送 +} SPI_FirstBit_TypeDef; + +typedef enum +{ + SPI_BAUDRATEPRESCALER_4 = (uint8_t)0x00, //SPI时钟速率为系统时钟除以4 + SPI_BAUDRATEPRESCALER_8 = (uint8_t)0x01, //SPI时钟速率为系统时钟除以8 + SPI_BAUDRATEPRESCALER_16 = (uint8_t)0x02, //SPI时钟速率为系统时钟除以16 + SPI_BAUDRATEPRESCALER_32 = (uint8_t)0x03, //SPI时钟速率为系统时钟除以32 + SPI_BAUDRATEPRESCALER_64 = (uint8_t)0x04, //SPI时钟速率为系统时钟除以64 + SPI_BAUDRATEPRESCALER_128 = (uint8_t)0x05, //SPI时钟速率为系统时钟除以128 + SPI_BAUDRATEPRESCALER_256 = (uint8_t)0x06, //SPI时钟速率为系统时钟除以256 + SPI_BAUDRATEPRESCALER_512 = (uint8_t)0x07 //SPI时钟速率为系统时钟除以512 +} SPI_BaudRatePrescaler_TypeDef; + +typedef enum +{ + SPI_MODE_MASTER = (uint8_t)0x20, //SPI为主设备 + SPI_MODE_SLAVE = (uint8_t)0x00 //SPI为从设备 +} SPI_Mode_TypeDef; + +typedef enum +{ + SPI_CLOCKPOLARITY_LOW = (uint8_t)0x00, //SCK在空闲状态下为低电平 + SPI_CLOCKPOLARITY_HIGH = (uint8_t)0x10 //SCK在空闲状态下为高电平 +} SPI_ClockPolarity_TypeDef; + +typedef enum +{ + SPI_CLOCKPHASE_1EDGE = (uint8_t)0x00, //SCK的第一沿采集数据 + SPI_CLOCKPHASE_2EDGE = (uint8_t)0x08 //SCK的第二沿采集数据 +} SPI_ClockPhase_TypeDef; + +typedef enum +{ + //作为从机 + TWI_SlaveBusy = 0x00, + TWI_SlaveReceivedaAddress = 0x01, + TWI_SlaveReceivedaData = 0x02, + TWI_SlaveSendData = 0x03, + TWI_SlaveReceivedaUACK = 0x04, + TWI_SlaveDisableACK = 0x05, + TWI_SlaveAddressError = 0x06, + +}SSI_TWIState_TypeDef; + +typedef enum +{ + SPI_TXE_DISINT = (uint8_t)0x00, //TXE为1时不允许发送中断 + SPI_TXE_ENINT = (uint8_t)0x01 //TXE为1时允许发送中断 +} SPI_TXE_INT_TypeDef; + +typedef enum +{ + UART1_Mode_10B = 0X00,//UART1设置为10位模式 + UART1_Mode_11B = 0X80 //UART1设置为11位模式 +} UART1_Mode_TypeDef; + +typedef enum +{ + UART1_RX_ENABLE = 0X10,//UART1允许接收 + UART1_RX_DISABLE = 0X00 //UART1禁止接收 +} UART1_RX_TypeDef; + +typedef enum +{ + SPI_FLAG_SPIF = (uint8_t)0x80, //SPI数据传送标志位SPIF + SPI_FLAG_WCOL = (uint8_t)0x50, //SPI写入冲突标志位WCOL + SPI_FLAG_TXE = (uint8_t)0x08, //SPI发送缓存器空标志TXE + TWI_FLAG_TWIF = (uint8_t)0x40, //TWI中断标志位TWIF + TWI_FLAG_GCA = (uint8_t)0x10, //TWI通用地址响应标志位GCA + UART1_FLAG_TI = (uint8_t)0x02, //UART1发送中断标志位TI + UART1_FLAG_RI = (uint8_t)0x01 //UART1接收中断标志位RI +} SSI_Flag_TypeDef; + +#if defined (SC92F7003) || defined (SC92F8003) || defined (SC92F740x) +typedef enum +{ + SSI_PinSelection_P10P27P26 = (uint8_t)0x00, //SSI共用引脚为P10,P27,P26 + SSI_PinSelection_P21P22P23 = (uint8_t)0x20, //SSI共用引脚为P21,P22,P23 + SSI_PinSelection_URATP27 = (uint8_t)0x00, //SSIUART引脚为P27,无RX + SSI_PinSelection_URATP22 = (uint8_t)0x20 //SSIUART引脚为P22,无RX +} SSI_PinSelection_TypeDef; +void SSI_PinSelection(SSI_PinSelection_TypeDef + PinSeletion); +#endif + +void SSI_DeInit(void); +void SSI_SPI_Init(SPI_FirstBit_TypeDef FirstBit, + SPI_BaudRatePrescaler_TypeDef BaudRatePrescaler, + SPI_Mode_TypeDef Mode, + SPI_ClockPolarity_TypeDef ClockPolarity, + SPI_ClockPhase_TypeDef ClockPhase, + SPI_TXE_INT_TypeDef SPI_TXE_INT); +void SSI_SPI_Cmd(FunctionalState NewState); +void SSI_SPI_SendData(uint8_t Data); +uint8_t SSI_SPI_ReceiveData(void); +void SSI_TWI_Init(uint8_t TWI_Address); +void SSI_TWI_AcknowledgeConfig(FunctionalState NewState); +void SSI_TWI_GeneralCallCmd(FunctionalState NewState); +FlagStatus SSI_GetTWIStatus(SSI_TWIState_TypeDef SSI_TWIState); +FlagStatus SSI_GetFlagStatus(SSI_Flag_TypeDef SSI_FLAG); +void SSI_TWI_Cmd(FunctionalState NewState); +void SSI_TWI_SendData(uint8_t Data); +uint8_t SSI_TWI_ReceiveData(void); +void SSI_UART1_Init(uint32_t UART1Fsys, + uint32_t BaudRate, UART1_Mode_TypeDef Mode, + UART1_RX_TypeDef RxMode); +void SSI_UART1_SendData8(uint8_t Data); +uint8_t SSI_UART1_ReceiveData8(void); +void SSI_UART1_SendData9(uint16_t Data); +uint16_t SSI_UART1_ReceiveData9(void); +void SSI_ITConfig(FunctionalState NewState, + PriorityStatus Priority); +void SSI_ClearFlag(SSI_Flag_TypeDef SSI_FLAG); +#endif + +#if defined (SC92F742x) || defined (SC92F7490) +typedef enum +{ + SPI_FIRSTBIT_MSB = (uint8_t)0x00, //MSB优先发送 + SPI_FIRSTBIT_LSB = (uint8_t)0x04 //LSB优先发送 +} SPI_FirstBit_TypeDef; + +typedef enum +{ + SPI_BAUDRATEPRESCALER_1 = (uint8_t)0x00, //SPI时钟速率为Fsys/1 + SPI_BAUDRATEPRESCALER_2 = (uint8_t)0x01, //SPI时钟速率为Fsys/2 + SPI_BAUDRATEPRESCALER_4 = (uint8_t)0x02, //SPI时钟速率为Fsys/4 + SPI_BAUDRATEPRESCALER_8 = (uint8_t)0x03, //SPI时钟速率为Fsys/8 + SPI_BAUDRATEPRESCALER_16 = (uint8_t)0x04, //SPI时钟速率为Fsys/16 + SPI_BAUDRATEPRESCALER_32 = (uint8_t)0x05, //SPI时钟速率为Fsys/32 + SPI_BAUDRATEPRESCALER_64 = (uint8_t)0x06, //SPI时钟速率为Fsys/64 + SPI_BAUDRATEPRESCALER_128 = (uint8_t)0x07 //SPI时钟速率为Fsys/128 +} SPI_BaudRatePrescaler_TypeDef; + +typedef enum +{ + SPI_MODE_MASTER = (uint8_t)0x20, //SPI为主设备 + SPI_MODE_SLAVE = (uint8_t)0x00 //SPI为从设备 +} SPI_Mode_TypeDef; + +typedef enum +{ + SPI_CLOCKPOLARITY_LOW = (uint8_t)0x00, //SCK在空闲状态下为低电平 + SPI_CLOCKPOLARITY_HIGH = (uint8_t)0x10 //SCK在空闲状态下为高电平 +} SPI_ClockPolarity_TypeDef; + +typedef enum +{ + SPI_CLOCKPHASE_1EDGE = (uint8_t)0x00, //SCK的第一沿采集数据 + SPI_CLOCKPHASE_2EDGE = (uint8_t)0x08 //SCK的第二沿采集数据 +} SPI_ClockPhase_TypeDef; + +typedef enum +{ + SPI_TXE_DISINT = (uint8_t)0x00, //TXE为0时不允许发送中断 + SPI_TXE_ENINT = (uint8_t)0x01 //TXE为1时允许发送中断 +} SPI_TXE_INT_TypeDef; + +typedef enum +{ + UART_Mode_10B = 0X00, //UART设置为10位模式 + UART_Mode_11B = 0X80 //UART设置为11位模式 +} UART_Mode_TypeDef; + +typedef enum +{ + UART_RX_ENABLE = 0X10, //UART允许接收 + UART_RX_DISABLE = 0X00 //UART禁止接收 +} UART_RX_TypeDef; + +typedef enum{ + //作为从机 + TWI_SlaveBusy = 0x00, + TWI_SlaveReceivedaAddress = 0x01, + TWI_SlaveReceivedaData = 0x02, + TWI_SlaveSendData = 0x03, + TWI_SlaveReceivedaUACK = 0x04, + TWI_SlaveDisableACK = 0x05, + TWI_SlaveAddressError = 0x06, + +}SSI_TWIState_TypeDef; + +typedef enum +{ + SPI_FLAG_SPIF = (uint8_t)0x80, //SPI数据传送标志位SPIF + SPI_FLAG_WCOL = (uint8_t)0x50, //SPI写入冲突标志位WCOL + SPI_FLAG_TXE = (uint8_t)0x08, //SPI发送缓存器空标志TXE + TWI_FLAG_TWIF = (uint8_t)0x40, //TWI中断标志位TWIF + TWI_FLAG_GCA = (uint8_t)0x10, //TWI通用地址响应标志位GCA + UART_FLAG_TI = (uint8_t)0x02, //UART发送中断标志位TI + UART_FLAG_RI = (uint8_t)0x01 //UART接收中断标志位RI +} SSI_Flag_TypeDef; + +void SSI0_DeInit(void); +void SSI0_SPI_Init(SPI_FirstBit_TypeDef FirstBit, + SPI_BaudRatePrescaler_TypeDef BaudRatePrescaler, + SPI_Mode_TypeDef Mode, + SPI_ClockPolarity_TypeDef ClockPolarity, + SPI_ClockPhase_TypeDef ClockPhase, + SPI_TXE_INT_TypeDef SPI_TXE_INT); +void SSI0_SPI_Cmd(FunctionalState NewState); +void SSI0_SPI_SendData(uint8_t Data); +uint8_t SSI0_SPI_ReceiveData(void); +void SSI0_TWI_Init(uint8_t TWI_Address); +void SSI0_TWI_AcknowledgeConfig(FunctionalState NewState); +void SSI0_TWI_GeneralCallCmd(FunctionalState NewState); +FlagStatus SSI0_GetTWIStatus(SSI_TWIState_TypeDef SSI_TWIState); +void SSI0_TWI_Cmd(FunctionalState NewState); +void SSI0_TWI_SendData(uint8_t Data); +uint8_t SSI0_TWI_ReceiveData(void); +void SSI0_UART_Init(uint32_t UARTFsys, + uint32_t BaudRate, UART_Mode_TypeDef Mode, + UART_RX_TypeDef RxMode); +void SSI0_UART_SendData8(uint8_t Data); +uint8_t SSI0_UART_ReceiveData8(void); +void SSI0_UART_SendData9(uint16_t Data); +uint16_t SSI0_UART_ReceiveData9(void); +void SSI0_ITConfig(FunctionalState NewState, + PriorityStatus Priority); +FlagStatus SSI0_GetFlagStatus(SSI_Flag_TypeDef SSI_FLAG); +void SSI0_ClearFlag(SSI_Flag_TypeDef SSI_FLAG); + +void SSI1_DeInit(void); +void SSI1_SPI_Init(SPI_FirstBit_TypeDef FirstBit, + SPI_BaudRatePrescaler_TypeDef BaudRatePrescaler, + SPI_Mode_TypeDef Mode, + SPI_ClockPolarity_TypeDef ClockPolarity, + SPI_ClockPhase_TypeDef ClockPhase, + SPI_TXE_INT_TypeDef SPI_TXE_INT); +void SSI1_SPI_Cmd(FunctionalState NewState); +void SSI1_SPI_SendData(uint8_t Data); +uint8_t SSI1_SPI_ReceiveData(void); +void SSI1_TWI_Init(uint8_t TWI_Address); +void SSI1_TWI_AcknowledgeConfig(FunctionalState NewState); +void SSI1_TWI_GeneralCallCmd(FunctionalState NewState); +FlagStatus SSI1_GetTWIStatus(SSI_TWIState_TypeDef SSI_TWIState); +void SSI1_TWI_Cmd(FunctionalState NewState); +void SSI1_TWI_SendData(uint8_t Data); +uint8_t SSI1_TWI_ReceiveData(void); +void SSI1_UART_Init(uint32_t UARTFsys, + uint32_t BaudRate, UART_Mode_TypeDef Mode, + UART_RX_TypeDef RxMode); +void SSI1_UART_SendData8(uint8_t Data); +uint8_t SSI1_UART_ReceiveData8(void); +void SSI1_UART_SendData9(uint16_t Data); +uint16_t SSI1_UART_ReceiveData9(void); +void SSI1_ITConfig(FunctionalState NewState, + PriorityStatus Priority); +FlagStatus SSI1_GetFlagStatus(SSI_Flag_TypeDef + SSI_FLAG); +void SSI1_ClearFlag(SSI_Flag_TypeDef SSI_FLAG); +#endif + +#endif + +/******************* (C) COPYRIGHT 2020 SinOne Microelectronics *****END OF FILE****/ \ No newline at end of file diff --git a/Keil_C/FWLib/SC92F_Lib/inc/sc92f_timer0.h b/Keil_C/FWLib/SC92F_Lib/inc/sc92f_timer0.h new file mode 100644 index 0000000..5dcd8bc --- /dev/null +++ b/Keil_C/FWLib/SC92F_Lib/inc/sc92f_timer0.h @@ -0,0 +1,139 @@ +//************************************************************ +// Copyright (c) 深圳市赛元微电子有限公司 +// 文件名称: sc92f_tiemr0.h +// 作者: 赛元应用团队 +// 模块功能: TIMER0固件库函数C文件 +// 最后更正日期: 2022年3月23日 +// 版本: V1.10001 +// 说明: +//************************************************************* + +#ifndef _sc92f_TIMER0_H_ +#define _sc92f_TIMER0_H_ + +#include "sc92f.h" + +typedef enum +{ + TIM0_PRESSEL_FSYS_D12 = ((uint8_t)0x00), //TIMER0计数源来自系统时钟12分频 + TIM0_PRESSEL_FSYS_D1 = ((uint8_t)0x01) //TIMER0计数源来自系统时钟 +} TIM0_PresSel_TypeDef; + +typedef enum +{ + TIM0_MODE_TIMER = ((uint8_t)0x01), //TIMER0做定时器 + TIM0_MODE_COUNTER = ((uint8_t)0x02) //TIMER0做计数器 +} TIM0_CountMode_TypeDef; + +typedef enum +{ + TIM0_WORK_MODE0 = ((uint8_t)0x00), //TIMER0选择工作模式0 + TIM0_WORK_MODE1 = ((uint8_t)0x01), //TIMER0选择工作模式1 + TIM0_WORK_MODE2 = ((uint8_t)0x02), //TIMER0选择工作模式2 + TIM0_WORK_MODE3 = ((uint8_t)0x03) //TIMER0选择工作模式3 +} TIM0_WorkMode_TypeDef; + +/************************宏函数************************/ +/************************************************** +*函数名称:void TIM0_Mode0SetReloadCounter(uint16_t TIM0_SetCounter) +*函数功能:TIMER0工作模式0初值重载函数 +*入口参数: +uint16_t:TIM0_SetCounter:配置TIMER0重载值 +*出口参数:void +**************************************************/ +#define TIM0_Mode0SetReloadCounter(TIM0_SetCounter) \ + do{ \ + TL0 = (uint8_t)TIM0_SetCounter; \ + TH0 = (TIM0_SetCounter >> 5); \ + }while(0) + +/************************************************** +*函数名称:void TIM0_Mode1SetReloadCounter(uint16_t TIM0_SetCounter) +*函数功能:TIMER0工作模式1初值重载函数 +*入口参数: +uint16_t:TIM0_SetCounter:配置TIMER0重载值 +*出口参数:void +**************************************************/ +#define TIM0_Mode1SetReloadCounter(TIM0_SetCounter) \ + do{ \ + TL0 = (uint8_t)TIM0_SetCounter; \ + TH0 = (TIM0_SetCounter >> 8); \ + }while(0) + +/************************************************** +*函数名称:void TIM0_SetTH0Counter(uint8_t TIM0_SetCounter) +*函数功能:TIMER0 TH0赋值函数 +*入口参数: +uint8_t:TIM0_SetCounter:配置TH0 +*出口参数:void +**************************************************/ +#define TIM0_SetTH0Counter(TIM0_SetCounter) (TH0 = TIM0_SetCounter) + +/************************************************** +*函数名称:void TIM0_SetTL0Counter(uint8_t TIM0_SetCounter) +*函数功能:TIMER0 TL0赋值函数 +*入口参数: +uint8_t:TIM0_SetCounter:配置TL0 +*出口参数:void +**************************************************/ +#define TIM0_SetTL0Counter(TIM0_SetCounter) (TL0 = TIM0_SetCounter) + +/***************************************************** +*函数名称:void TIM0_Cmd(FunctionalState NewState) +*函数功能:TIMER0功能开关函数 +*入口参数: +FunctionalState:NewState:功能启动/关闭选择 +*出口参数:void +*****************************************************/ +#define TIM0_Cmd(NewState) (TR0 = (bit)NewState) + +/***************************************************** +*函数名称:FlagStatus TIM0_GetFlagStatus(void) +*函数功能:获得TIMER0中断标志状态 +*入口参数:void +*出口参数: +FlagStatus:TIMER0中断标志状态 +*****************************************************/ +#define TIM0_GetFlagStatus() (TF0) + +/***************************************************** +*函数名称:void TIM0_ITConfig(FunctionalState NewState, PriorityStatus Priority) +*函数功能:TIMER1中断初始化 +*入口参数: +FunctionalState:NewState:中断使能/关闭选择 +PriorityStatus:Priority:中断优先级选择 +*出口参数:void +*****************************************************/ +#define TIM0_ITConfig(NewState,Priority) \ + do{ \ + ET0 = (bit)NewState; \ + IPT0 = (bit)Priority; \ + }while(0) + +/***************************************************** +*函数名称:void TIM0_ClearFlag(void) +*函数功能:清除TIMER0中断标志状态 +*入口参数:void +*出口参数:void +*****************************************************/ +#define TIM0_ClearFlag() (TF0 = 0) + +void TIM0_DeInit(void); +void TIM0_TimeBaseInit(TIM0_PresSel_TypeDef + TIM0_PrescalerSelection, + TIM0_CountMode_TypeDef TIM0_CountMode); +void TIM0_WorkMode0Config(uint16_t + TIM0_SetCounter); +void TIM0_WorkMode1Config(uint16_t + TIM0_SetCounter); +void TIM0_WorkMode2Config(uint8_t + TIM0_SetCounter); +void TIM0_WorkMode3Config(uint8_t TIM0_SetCounter, + uint8_t TIM1_SetCounter); +void TIM0_WorkModeConfig(TIM0_WorkMode_TypeDef + TIM0_WorkMode, uint16_t TIM0_SetCounter1, + uint16_t TIM0_SetCounter2); + +#endif + +/******************* (C) COPYRIGHT 2020 SinOne Microelectronics *****END OF FILE****/ \ No newline at end of file diff --git a/Keil_C/FWLib/SC92F_Lib/inc/sc92f_timer1.h b/Keil_C/FWLib/SC92F_Lib/inc/sc92f_timer1.h new file mode 100644 index 0000000..bdf392f --- /dev/null +++ b/Keil_C/FWLib/SC92F_Lib/inc/sc92f_timer1.h @@ -0,0 +1,116 @@ +//************************************************************ +// Copyright (c) 深圳市赛元微电子有限公司 +// 文件名称 : sc92f_timer1.h +// 作者 : +// 模块功能 : TIMER1固件库函数头文件 +// 局部函数列表: +// 最后更正日期: 2020/8/18 +// 版本 : V1.0 +// 说明 : +//************************************************************* + +#ifndef _sc92f_TIMER1_H_ +#define _sc92f_TIMER1_H_ + +#include "sc92f.h" + +typedef enum +{ + TIM1_PRESSEL_FSYS_D12 = ((uint8_t)0x00), //TIMER1计数源来自系统时钟12分频 + TIM1_PRESSEL_FSYS_D1 = ((uint8_t)0x01) //TIMER1计数源来自系统时钟 +} TIM1_PresSel_TypeDef; + +typedef enum +{ + TIM1_MODE_TIMER = ((uint8_t)0x01), //TIMER1做定时器 + TIM1_MODE_COUNTER = ((uint8_t)0x02) //TIMER1做计数器 +} TIM1_CountMode_TypeDef; + +typedef enum +{ + TIM1_WORK_MODE0 = ((uint8_t)0x00), //TIMER1选择工作模式0 + TIM1_WORK_MODE1 = ((uint8_t)0x01), //TIMER1选择工作模式1 + TIM1_WORK_MODE2 = ((uint8_t)0x02), //TIMER1选择工作模式2 +} TIM1_WorkMode_TypeDef; + +/************************宏函数************************/ +/************************************************** +*函数名称:void TIM1_Mode0SetReloadCounter(uint16_t TIM1_SetCounter) +*函数功能:TIMER1工作模式0初值重载函数 +*入口参数: +uint16_t:TIM1_SetCounter:配置TIMER0重载值 +*出口参数:void +**************************************************/ +#define TIM1_Mode0SetReloadCounter(TIM1_SetCounter) \ + do{ \ + TL1 = (uint8_t)TIM1_SetCounter; \ + TH1 = (TIM1_SetCounter >> 5); \ + }while(0) + +/************************************************** +*函数名称:void TIM1_Mode1SetReloadCounter(uint16_t TIM1_SetCounter) +*函数功能:TIMER0工作模式1初值重载函数 +*入口参数: +uint16_t:TIM1_SetCounter:配置TIMER0重载值 +*出口参数:void +**************************************************/ +#define TIM1_Mode1SetReloadCounter(TIM1_SetCounter) \ + do{ \ + TL1 = (uint8_t)TIM1_SetCounter; \ + TH1 = (TIM1_SetCounter >> 8); \ + }while(0) + +/***************************************************** +*函数名称:void TIM1_Cmd(FunctionalState NewState) +*函数功能:TIMER1功能开关函数 +*入口参数: +FunctionalState:NewState:功能启动/关闭选择 +*出口参数:void +*****************************************************/ +#define TIM1_Cmd(NewState) (TR1 = (bit)NewState) + +/***************************************************** +*函数名称:void TIM1_ITConfig(FunctionalState NewState, PriorityStatus Priority) +*函数功能:TIMER1中断初始化 +*入口参数: +FunctionalState:NewState:中断使能/关闭选择 +PriorityStatus:Priority:中断优先级选择 +*出口参数:void +*****************************************************/ +#define TIM1_ITConfig(NewState,Priority) \ + do{ \ + ET1 = (bit)NewState; \ + IPT1 = (bit)Priority; \ + }while(0) + +/***************************************************** +*函数名称:FlagStatus TIM1_GetFlagStatus(void) +*函数功能:获得TIMER1中断标志状态 +*入口参数:void +*出口参数: +FlagStatus:TIMER1中断标志状态 +*****************************************************/ +#define TIM1_GetFlagStatus() (TF1) + +/***************************************************** +*函数名称:void TIM1_ClearFlag(void) +*函数功能:清除TIMER1中断标志状态 +*入口参数:void +*出口参数:void +*****************************************************/ +#define TIM1_ClearFlag() (TF1 = 0) + +void TIM1_DeInit(void); +void TIM1_TimeBaseInit(TIM1_PresSel_TypeDef + TIM1_PrescalerSelection, + TIM1_CountMode_TypeDef TIM1_CountMode); +void TIM1_WorkMode0Config(uint16_t TIM1_SetCounter); +void TIM1_WorkMode1Config(uint16_t TIM1_SetCounter); +void TIM1_WorkMode2Config(uint8_t TIM1_SetCounter); +void TIM1_WorkModeConfig(TIM1_WorkMode_TypeDef TIM1_WorkMode, + uint16_t TIM1_SetCounter); + + +#endif + +/******************* (C) COPYRIGHT 2020 SinOne Microelectronics *****END OF FILE****/ \ No newline at end of file diff --git a/Keil_C/FWLib/SC92F_Lib/inc/sc92f_timer2.h b/Keil_C/FWLib/SC92F_Lib/inc/sc92f_timer2.h new file mode 100644 index 0000000..883933b --- /dev/null +++ b/Keil_C/FWLib/SC92F_Lib/inc/sc92f_timer2.h @@ -0,0 +1,98 @@ +//************************************************************ +// Copyright (c) 深圳市赛元微电子有限公司 +// 文件名称: sc92f_timer2.h +// 作者: 赛元应用团队 +// 模块功能: TIMER2固件库函数头文件 +// 最后更正日期: 2022年3月23日 +// 版本: V1.10003 +// 说明: 该文件仅适用于SC92F系列芯片 +//************************************************************* + +#ifndef _sc92f_TIMER2_H_ +#define _sc92f_TIMER2_H_ + +#include "sc92f.h" + +typedef enum +{ + TIM2_PRESSEL_FSYS_D12 = ((uint8_t)0x00), //TIMER2计数源来自系统时钟12分频 + TIM2_PRESSEL_FSYS_D1 = ((uint8_t)0x01) //TIMER2计数源来自系统时钟 +} TIM2_PresSel_TypeDef; + +#if defined (SC92F730x) || defined (SC92F827X) || defined (SC92F837X) || defined (SC92F725X) || defined (SC92F735X) + +typedef enum +{ + TIM2_MODE_TIMER = ((uint8_t)0x01), //TIMER2做定时器 +} TIM2_CountMode_TypeDef; + +typedef enum +{ + TIM2_COUNTDIRECTION_UP = ((uint8_t)0x00), //向上计数模式 +} TIM2_CountDirection_TypeDef; + +typedef enum +{ + TIM2_FLAG_TF2 = (uint8_t)0x80, //中断标志位TF2,计数溢出 +} TIM2_Flag_TypeDef; + +typedef enum +{ + TIM2_WORK_MODE1 = ((uint8_t)0x00), //TIMER2选择工作模式1 +} TIM2_WorkMode_TypeDef; + +#else + +typedef enum +{ + TIM2_MODE_TIMER = ((uint8_t)0x01), //TIMER2做定时器 + TIM2_MODE_COUNTER = ((uint8_t)0x02) //TIMER2做计数器 +} TIM2_CountMode_TypeDef; + +typedef enum +{ + TIM2_COUNTDIRECTION_UP = ((uint8_t)0x00), //向上计数模式 + TIM2_COUNTDIRECTION_DOWN_UP = ((uint8_t)0x10) //向上/向下计数模式 +} TIM2_CountDirection_TypeDef; + +typedef enum +{ + TIM2_FLAG_TF2 = (uint8_t)0x80, //中断标志位TF2,计数溢出 + TIM2_FLAG_EXF2 = (uint8_t)0x40 //中断标志位EXF2,外部触发 +} TIM2_Flag_TypeDef; + +typedef enum +{ + TIM2_WORK_MODE0 = ((uint8_t)0x00), //TIMER2选择工作模式0 + TIM2_WORK_MODE1 = ((uint8_t)0x01), //TIMER2选择工作模式1 + TIM2_WORK_MODE3 = ((uint8_t)0x03), //TIMER2选择工作模式3 +} TIM2_WorkMode_TypeDef; + +#endif + +/***************************************************** +*函数名称:void BTM_ClearFlag(void) +*函数功能:清除BTM中断标志状态 +*入口参数:void +*出口参数:void +*****************************************************/ +#define BTM_ClearFlag() CLEAR_BIT(BTMCON,0x40) + +void TIM2_DeInit(); +void TIM2_PrescalerSelection(TIM2_PresSel_TypeDef TIM2_PrescalerSelection); +void TIM2_TimeBaseInit(TIM2_PresSel_TypeDef TIM2_PrescalerSelection, + TIM2_CountMode_TypeDef TIM2_CountMode, + TIM2_CountDirection_TypeDef TIM2_CountDirection); +void TIM2_WorkMode0Config(uint16_t TIM2_SetCounter); +void TIM2_WorkMode1Config(uint16_t TIM2_SetCounter); +void TIM2_WorkMode3Config(uint16_t TIM2_SetCounter); +void TIM2_WorkModeConfig(TIM2_WorkMode_TypeDef TIM2_WorkMode, uint16_t TIM2_SetCounter); +void TIM2_SetEXEN2(FunctionalState NewState); +void TIM2_Cmd(FunctionalState NewState); +void TIM2_ITConfig(FunctionalState NewState, PriorityStatus Priority); +FlagStatus TIM2_GetFlagStatus(TIM2_Flag_TypeDef TIM2_Flag); +void TIM2_ClearFlag(TIM2_Flag_TypeDef TIM2_Flag); + +#endif + +/******************* (C) COPYRIGHT 2020 SinOne Microelectronics *****END OF FILE****/ \ No newline at end of file diff --git a/Keil_C/FWLib/SC92F_Lib/inc/sc92f_timer3.h b/Keil_C/FWLib/SC92F_Lib/inc/sc92f_timer3.h new file mode 100644 index 0000000..9521c8c --- /dev/null +++ b/Keil_C/FWLib/SC92F_Lib/inc/sc92f_timer3.h @@ -0,0 +1,63 @@ +//************************************************************ +// Copyright (c) 深圳市赛元微电子有限公司 +// 文件名称 : sc92f_timer3.h +// 作者 : +// 模块功能 : TIMER3固件库函数头文件 +// 最后更正日期: 2022/01/18 +// 版本 : V1.10000 +// 说明 :该文件仅适用于SC92F系列芯片 +//************************************************************* + +#ifndef _sc92f_TIMER3_H_ +#define _sc92f_TIMER3_H_ + +#include "sc92f.H" + +typedef enum +{ + TIM3_PRESSEL_FSYS_D12 = ((uint8_t)0x00), //TIMER3计数源来自系统时钟12分频 + TIM3_PRESSEL_FSYS_D1 = ((uint8_t)0x01) //TIMER3计数源来自系统时钟 +} TIM3_PresSel_TypeDef; + +typedef enum +{ + TIM3_MODE_TIMER = ((uint8_t)0x01), //TIMER3做定时器 + TIM3_MODE_COUNTER = ((uint8_t)0x02) //TIMER3做计数器 +} TIM3_CountMode_TypeDef; + +typedef enum +{ + TIM3_COUNTDIRECTION_UP = ((uint8_t)0x00), //向上计数模式 + TIM3_COUNTDIRECTION_DOWN_UP = ((uint8_t)0x10) //向上/向下计数模式 +} TIM3_CountDirection_TypeDef; + +typedef enum +{ + TIM3_FLAG_TF3 = (uint8_t)0x80, //中断标志位TF3 + TIM3_FLAG_EXF3 = (uint8_t)0x40 //中断标志位EXF3 +} TIM3_Flag_TypeDef; + +typedef enum +{ + TIM3_WORK_MODE0 = ((uint8_t)0x00), //TIMER3选择工作模式0 + TIM3_WORK_MODE1 = ((uint8_t)0x01), //TIMER3选择工作模式1 + TIM3_WORK_MODE3 = ((uint8_t)0x03), //TIMER3选择工作模式3 +} TIM3_WorkMode_TypeDef; + +void TIM3_DeInit(); +void TIM3_PrescalerSelection(TIM3_PresSel_TypeDef TIM3_PrescalerSelection); +void TIM3_WorkMode1Config(uint16_t TIM3_SetCounter); +void TIM3_Cmd(FunctionalState NewState); +void TIM3_ITConfig(FunctionalState NewState, PriorityStatus Priority); +FlagStatus TIM3_GetFlagStatus(TIM3_Flag_TypeDef TIM3_Flag); +void TIM3_ClearFlag(TIM3_Flag_TypeDef TIM3_Flag); + +void TIM3_TimeBaseInit(TIM3_CountMode_TypeDef TIM3_CountMode, + TIM3_CountDirection_TypeDef TIM3_CountDirection); +void TIM3_WorkMode0Config(uint16_t TIM3_SetCounter); +void TIM3_WorkMode3Config(uint16_t TIM3_SetCounter); +void TIM3_WorkModeConfig(TIM3_WorkMode_TypeDef TIM3_WorkMode, uint16_t TIM3_SetCounter); +void TIM3_SetEXEN3(FunctionalState NewState); + +#endif +/******************* (C) COPYRIGHT 2020 SinOne Microelectronics *****END OF FILE****/ \ No newline at end of file diff --git a/Keil_C/FWLib/SC92F_Lib/inc/sc92f_timer4.h b/Keil_C/FWLib/SC92F_Lib/inc/sc92f_timer4.h new file mode 100644 index 0000000..b454786 --- /dev/null +++ b/Keil_C/FWLib/SC92F_Lib/inc/sc92f_timer4.h @@ -0,0 +1,62 @@ +//************************************************************ +// Copyright (c) 深圳市赛元微电子有限公司 +// 文件名称 : sc92f_timerx.h +// 作者 : +// 模块功能 : TIMER4固件库函数头文件 +// 最后更正日期: 2021/01/18 +// 版本 : V1.10000 +// 说明 :该文件仅适用于SC92F系列芯片 +//************************************************************* + +#ifndef _sc92f_TIMER4_H_ +#define _sc92f_TIMER4_H_ + +#include "sc92f.H" + +typedef enum +{ + TIM4_PRESSEL_FSYS_D12 = ((uint8_t)0x00), //TIMER4计数源来自系统时钟12分频 + TIM4_PRESSEL_FSYS_D1 = ((uint8_t)0x01) //TIMER4计数源来自系统时钟 +} TIM4_PresSel_TypeDef; + +typedef enum +{ + TIM4_MODE_TIMER = ((uint8_t)0x01), //TIMER2做定时器 + TIM4_MODE_COUNTER = ((uint8_t)0x02) //TIMER2做计数器 +} TIM4_CountMode_TypeDef; + +typedef enum +{ + TIM4_COUNTDIRECTION_UP = ((uint8_t)0x00), //向上计数模式 + TIM4_COUNTDIRECTION_DOWN_UP = ((uint8_t)0x10) //向上/向下计数模式 +} TIM4_CountDirection_TypeDef; + +typedef enum +{ + TIM4_FLAG_TF4 = (uint8_t)0x80, //中断标志位TF4 + TIM4_FLAG_EXF4 = (uint8_t)0x40 //中断标志位EXF4 +} TIM4_Flag_TypeDef; + +typedef enum +{ + TIM4_WORK_MODE0 = ((uint8_t)0x00), //TIMER4选择工作模式0 + TIM4_WORK_MODE1 = ((uint8_t)0x01), //TIMER4选择工作模式1 + TIM4_WORK_MODE3 = ((uint8_t)0x03), //TIMER4选择工作模式3 +} TIM4_WorkMode_TypeDef; + +void TIM4_DeInit(); +void TIM4_PrescalerSelection(TIM4_PresSel_TypeDef TIM4_PrescalerSelection); +void TIM4_WorkMode1Config(uint16_t TIM4_SetCounter); +void TIM4_Cmd(FunctionalState NewState); +void TIM4_ITConfig(FunctionalState NewState, PriorityStatus Priority); +FlagStatus TIM4_GetFlagStatus(TIM4_Flag_TypeDef TIM4_Flag); +void TIM4_ClearFlag(TIM4_Flag_TypeDef TIM4_Flag); + +void TIM4_TimeBaseInit(TIM4_CountMode_TypeDef TIM4_CountMode, + TIM4_CountDirection_TypeDef TIM4_CountDirection); +void TIM4_WorkMode0Config(uint16_t TIM4_SetCounter); +void TIM4_WorkMode3Config(uint16_t TIM4_SetCounter); +void TIM4_WorkModeConfig(TIM4_WorkMode_TypeDef TIM4_WorkMode, uint16_t TIM4_SetCounter); +void TIM4_SetEXEN4(FunctionalState NewState); + +#endif \ No newline at end of file diff --git a/Keil_C/FWLib/SC92F_Lib/inc/sc92f_uart0.h b/Keil_C/FWLib/SC92F_Lib/inc/sc92f_uart0.h new file mode 100644 index 0000000..a236e3e --- /dev/null +++ b/Keil_C/FWLib/SC92F_Lib/inc/sc92f_uart0.h @@ -0,0 +1,127 @@ +//************************************************************ +// Copyright (c) 深圳市赛元微电子有限公司 +// 文件名称 : sc92f_uart0.h +// 作者 : +// 模块功能 : UART0固件库函数头文件 +// 局部函数列表: +// 最后更正日期: 2022/01/24 +// 版本 : V1.10002 +// 说明 :本文件仅适用于赛元92F/93F/92L系列单片机 +//************************************************************* +#ifndef _sc92f_UART0_H_ +#define _sc92f_UART0_H_ + +#include "sc92f.h" +#if !defined (SC92F742x) && !defined (SC92F827X) && !defined (SC92F837X) + +#define UART0_BaudRate_FsysDIV12 0X00 //仅模式0可用,串行端口在系统时钟的1/12下运行 +#define UART0_BaudRate_FsysDIV4 0X01 //仅模式0可用,串行端口在系统时钟的1/4下运行 +#define UART0_BaudRate_FsysDIV64 0X00 //仅模式1可用,串行端口在系统时钟的1/64下运行 +#define UART0_BaudRate_FsysDIV32 0X01 //仅模式1可用,串行端口在系统时钟的1/32下运行 +#if defined (SC92F7003) || defined (SC92F8003) || defined (SC92F740x) +typedef enum +{ + UART0_PinSelection_P15P16 = (uint8_t)0x00, //UART0引脚为P15,P16 + UART0_PinSelection_P15 = (uint8_t)0x00, //UART0引脚为P15,P16,无RX + UART0_PinSelection_P11P20 = (uint8_t)0x10, //UART0引脚为P11,P20 + UART0_PinSelection_P20 = (uint8_t)0x10, //UART0引脚为P20,无RX +} UART0_PinSelection_TypeDef; +#endif + +#if defined(SC92F725X) || defined(SC92F735X)|| defined (SC92F730x ) || defined (SC92F732X) || defined (SC93F833x) || defined (SC93F843x) || defined (SC93F743x) +typedef enum +{ + UART0_CLOCK_TIMER1 = (uint8_t)0X02, //TIMER1做波特率发生器 + UART0_CLOCK_TIMER1_FreqMcl2 = (uint8_t)0X82, //TIMER1做波特率发生器,且二倍频 + UART0_CLOCK_TIMER1_DIV6 = (uint8_t)0X80, //TIMER1做波特率发生器,且6分频 + UART0_CLOCK_TIMER1_DIV12 = (uint8_t)0X00, //TIMER1做波特率发生器,且12分频 + UART0_CLOCK_TIMER2 = (uint8_t)0X34, //TIMER2做波特率发生器 + UART0_CLOCK_TIMER2_DIV12 = (uint8_t)0X30, //定时器2 12分频,模式1和3通用 +}UART0_Clock_Typedef; +#elif defined (SC92F848x) || defined (SC92F748x) || defined(SC92F859x) || defined(SC92F759x) || defined(SC92L853x) || defined(SC92L753x) +typedef enum +{ + UART0_CLOCK_TIMER1 = (uint8_t)0X00, //TIMER1做波特率发生器 + UART0_CLOCK_TIMER2 = (uint8_t)0X30, //TIMER2做波特率发生器 + UART0_CLOCK_TIMER1_DIV16 = (uint8_t)0X80, //TIMER1做波特率发生器 + UART0_CLOCK_TIMER2_DIV16 = (uint8_t)0XB0, //TIMER2做波特率发生器 +}UART0_Clock_Typedef; +#else +typedef enum +{ + //模式0和3的定时器选择 + UART0_CLOCK_TIMER1 = (uint8_t)0X00, //TIMER1做波特率发生器 + UART0_CLOCK_TIMER2 = (uint8_t)0X30, //TIMER2做波特率发生器 +}UART0_Clock_Typedef; +#endif + +#if defined (SC92F730x) || defined (SC92F725X) || defined (SC92F735X) || defined (SC92F732X) || defined (SC93F833x) || defined (SC93F843x) || defined (SC93F743x) +typedef enum +{ + UART0_Mode_8B = 0X00, //UART工作模式:8位半双工 + UART0_Mode_10B = 0X40, //UART工作模式:10位全双工 + UART0_Mode_11B = 0XC0, //UART工作模式:11位全双工 + UART0_Mode_11B_BaudRateFix = 80//UART工作模式:11位全双工,波特率固定 +}UART0_Mode_Typedef; +#else +typedef enum +{ + UART0_Mode_8B = 0X00, //UART工作模式:8位半双工 + UART0_Mode_10B = 0X40, //UART工作模式:10位全双工 + UART0_Mode_11B = 0XC0, //UART工作模式:11位全双工 +}UART0_Mode_Typedef; +#endif + +typedef enum +{ + UART0_RX_ENABLE = 0x10, //允许接收数据 + UART0_RX_DISABLE = 0x00 //不允许接收数据 +} UART0_RX_Typedef; + +typedef enum +{ + UART0_FLAG_RI = 0X01, //接收中断标志位RI + UART0_FLAG_TI = 0X02 //发送中断标志位TI +} UART0_Flag_Typedef; + +/*******************************宏函数*******************************/ +/***************************************************** +*函数名称:FlagStatus UART0_GetFlagStatus(UART0_Flag_Typedef UART0_Flag) +*函数功能:获得UART0中断标志状态 +*入口参数: +UART0_GetFlagStatus:UART0_Flag:中断标志位选择 +*出口参数: +FlagStatus:UART0中断标志位置起状态 +*****************************************************/ +#define UART0_GetFlagStatus(UART0_Flag) ((UART0_Flag == UART0_FLAG_TI) ? (TI):(RI)) + +/***************************************************** +*函数名称:void UART0_ClearFlag(UART0_Flag_Typedef UART0_Flag) +*函数功能:清除UART0中断标志状态 +*入口参数: +UART0_Flag_Typedef;UART0_Flag:中断标志位选择 +*出口参数:void +*****************************************************/ +#define UART0_ClearFlag(UART0_Flag) CLEAR_BIT(SCON,UART0_Flag) + +void UART0_DeInit(void); +void UART0_Init(uint32_t Uart0Fsys, + uint32_t BaudRate, UART0_Mode_Typedef Mode, + UART0_Clock_Typedef ClockMode, + UART0_RX_Typedef RxMode); +void UART0_SendData8(uint8_t Data); +uint8_t UART0_ReceiveData8(void); +void UART0_SendData9(uint16_t Data); +uint16_t UART0_ReceiveData9(void); +void UART0_ITConfig(FunctionalState NewState, + PriorityStatus Priority); +#if defined (SC92F8003) || defined (SC92F740x) || defined (SC92F7003) +void UART0_PinSelection(UART0_PinSelection_TypeDef + PinSeletion); +#endif + +#endif + +#endif + +/******************* (C) COPYRIGHT 2020 SinOne Microelectronics *****END OF FILE****/ diff --git a/Keil_C/FWLib/SC92F_Lib/inc/sc92f_usci0.h b/Keil_C/FWLib/SC92F_Lib/inc/sc92f_usci0.h new file mode 100644 index 0000000..32b97b4 --- /dev/null +++ b/Keil_C/FWLib/SC92F_Lib/inc/sc92f_usci0.h @@ -0,0 +1,171 @@ +//************************************************************ +// Copyright (c) 深圳市赛元微电子有限公司 +// 文件名称 : sc92F_usci0.h +// 作者 : +// 模块功能 : USCI0固件库函数头文件 +// 最后更正日期: 2022/01/05 +// 版本 : V1.1000 +// 说明 : 该文件仅适用于SC92F系列芯片 +//************************************************************* + +#ifndef _sc92f_USCI0_H_ +#define _sc92f_USCI0_H_ + +#include "sc92f.h" + +#define USCI0_UART_BaudRate_FsysDIV12 0X00 //仅模式0可用,串行端口在系统时钟的1/12下运行 +#define USCI0_UART_BaudRate_FsysDIV4 0X01 //仅模式0可用,串行端口在系统时钟的1/4下运行 + +#if defined(SC92L853x) || defined(SC92L753x) +typedef enum +{ + USCI0_Mode_SPI = (uint8_t)0x01, //SPI + USCI0_Mode_TWI = (uint8_t)0x02, //TWI + USCI0_Mode_UART = (uint8_t)0x03 //UART +} USCI0_CommunicationMode_TypeDef; +#endif + +typedef enum +{ + USCI0_SPI_FIRSTBIT_MSB = (uint8_t)0x00, //MSB优先发送 + USCI0_SPI_FIRSTBIT_LSB = (uint8_t)0x04 //LSB优先发送 +} USCI0_SPI_FirstBit_TypeDef; + +typedef enum +{ + USCI0_SPI_BAUDRATEPRESCALER_1 = (uint8_t)0x00, //SPI时钟速率为系统时钟除以1 + USCI0_SPI_BAUDRATEPRESCALER_2 = (uint8_t)0x01, //SPI时钟速率为系统时钟除以2 + USCI0_SPI_BAUDRATEPRESCALER_4 = (uint8_t)0x02, //SPI时钟速率为系统时钟除以4 + USCI0_SPI_BAUDRATEPRESCALER_8 = (uint8_t)0x03, //SPI时钟速率为系统时钟除以8 + USCI0_SPI_BAUDRATEPRESCALER_16 = (uint8_t)0x04, //SPI时钟速率为系统时钟除以16 + USCI0_SPI_BAUDRATEPRESCALER_32 = (uint8_t)0x05, //SPI时钟速率为系统时钟除以32 + USCI0_SPI_BAUDRATEPRESCALER_64 = (uint8_t)0x06, //SPI时钟速率为系统时钟除以64 + USCI0_SPI_BAUDRATEPRESCALER_128 = (uint8_t)0x07 //SPI时钟速率为系统时钟除以128 +} USCI0_SPI_BaudRatePrescaler_TypeDef; + +typedef enum +{ + USCI0_SPI_MODE_MASTER = (uint8_t)0x20, //SPI为主设备 + USCI0_SPI_MODE_SLAVE = (uint8_t)0x00 //SPI为从设备 +} USCI0_SPI_Mode_TypeDef; + +typedef enum +{ + USCI0_SPI_CLOCKPOLARITY_LOW = (uint8_t)0x00, //SCK在空闲状态下为低电平 + USCI0_SPI_CLOCKPOLARITY_HIGH = (uint8_t)0x10 //SCK在空闲状态下为高电平 +} USCI0_SPI_ClockPolarity_TypeDef; + +typedef enum +{ + USCI0_SPI_CLOCKPHASE_1EDGE = (uint8_t)0x00, //SCK的第一沿采集数据 + USCI0_SPI_CLOCKPHASE_2EDGE = (uint8_t)0x08 //SCK的第二沿采集数据 +} USCI0_SPI_ClockPhase_TypeDef; + +typedef enum +{ + USCI0_SPI_TXE_DISINT = (uint8_t)0x00, //TBIE为0时不允许发送中断 + USCI0_SPI_TXE_ENINT = (uint8_t)0x01 //TBIE为1时允许发送中断 +} USCI0_SPI_TXE_INT_TypeDef; + +typedef enum +{ + USCI0_SPI_DATA8 = (uint8_t)0x00, //SPI 8位传输模式 + USCI0_SPI_DATA16 = (uint8_t)0x02 //SPI 16位传输模式 +} USCI0_TransmissionMode_TypeDef; + +typedef enum +{ + USCI0_TWI_1024 = (uint8_t)0x00, //TWI通信速率 Fhrc/1024 + USCI0_TWI_512 = (uint8_t)0x01, //TWI通信速率 Fhrc/512 + USCI0_TWI_256 = (uint8_t)0x02, //TWI通信速率 Fhrc/256 + USCI0_TWI_128 = (uint8_t)0x03, //TWI通信速率 Fhrc/128 + USCI0_TWI_64 = (uint8_t)0x04, //TWI通信速率 Fhrc/64 + USCI0_TWI_32 = (uint8_t)0x05, //TWI通信速率 Fhrc/32 + USCI0_TWI_16 = (uint8_t)0x06, //TWI通信速率 Fhrc/16 +} USCI0_TWI_MasterCommunicationRate_TypeDef; + +typedef enum +{ + USCI0_TWI_SlaveBusy = 0x00, //作为从机 + USCI0_TWI_SlaveReceivedaAddress = 0x01, + USCI0_TWI_SlaveReceivedaData = 0x02, + USCI0_TWI_SlaveSendData = 0x03, + USCI0_TWI_SlaveReceivedaUACK = 0x04, + USCI0_TWI_SlaveDisableACK = 0x05, + USCI0_TWI_SlaveAddressError = 0x06, + USCI0_TWI_MasterBusy = 0x00, //作为主机 + USCI0_TWI_MasterSendAddress = 0x01, + USCI0_TWI_MasterSendData = 0x02, + USCI0_TWI_MasterReceivedaData = 0x03, + USCI0_TWI_MasterReceivedaUACK = 0x04, +} USCI0_TWIState_TypeDef; + +typedef enum +{ + USCI0_UART_Mode_8B = 0X00, //UART设置为8位模式 + USCI0_UART_Mode_10B = 0X40, //UART设置为10位模式 + USCI0_UART_Mode_11B = 0X80 //UART设置为11位模式 +} USCI0_UART_Mode_TypeDef; + +typedef enum +{ + USCI0_UART_RX_ENABLE = 0X10, //UART允许接收 + USCI0_UART_RX_DISABLE = 0X00 //UART禁止接收 +} USCI0_UART_RX_TypeDef; + +typedef enum +{ + USCI0_SPI_FLAG_SPIF = (uint8_t)0x80, //SPI数据传送标志位SPIF + USCI0_SPI_FLAG_WCOL = (uint8_t)0x50, //SPI写入冲突标志位WCOL + USCI0_SPI_FLAG_TXE = (uint8_t)0x08, //SPI发送缓存器空标志TXE + USCI0_TWI_FLAG_TWIF = (uint8_t)0x40, //TWI中断标志位TWIF + USCI0_TWI_FLAG_GCA = (uint8_t)0x10, //TWI通用地址响应标志位GCA + USCI0_TWI_FLAG_MSTR = (uint8_t)0x20, //TWI主从标志位MSTR + USCI0_TWI_FLAG_TXRXnE = (uint8_t)0x80, + USCI0_UART_FLAG_RI = (uint8_t)0x01, //UART接收中断标志位RI + USCI0_UART_FLAG_TI = (uint8_t)0x02, //UART发送中断标志位TI +} USCI0_Flag_TypeDef; + +typedef enum +{ + USCI0_TWI_Write = 0x00, //写操作 + USCI0_TWI_Read = 0x01, //读操作 +} USCI0_TWI_RWType; + +void USCI0_DeInit(void); +void USCI0_SPI_Init(USCI0_SPI_FirstBit_TypeDef FirstBit, + USCI0_SPI_BaudRatePrescaler_TypeDef BaudRatePrescaler, USCI0_SPI_Mode_TypeDef Mode, + USCI0_SPI_ClockPolarity_TypeDef ClockPolarity, USCI0_SPI_ClockPhase_TypeDef ClockPhase, + USCI0_SPI_TXE_INT_TypeDef SPI_TXE_INT, USCI0_TransmissionMode_TypeDef TransmissionMode); +void USCI0_TransmissionMode(USCI0_TransmissionMode_TypeDef TransmissionMode); +void USCI0_SPI_Cmd(FunctionalState NewState); +void USCI0_SPI_SendData_8(uint8_t Data); +uint8_t USCI0_SPI_ReceiveData_8(void); +void USCI0_SPI_SendData_16(uint16_t Data); +uint16_t USCI0_SPI_ReceiveData_16(void); +void USCI0_TWI_Slave_Init(uint8_t TWI_Address); +void USCI0_TWI_MasterCommunicationRate(USCI0_TWI_MasterCommunicationRate_TypeDef + TWI_MasterCommunicationRate); +void USCI0_TWI_Start(void); +void USCI0_TWI_MasterModeStop(void); +void USCI0_TWI_SendAddr(uint8_t Addr, USCI0_TWI_RWType RW); +void USCI0_TWI_SlaveClockExtension(FunctionalState NewState); +void USCI0_TWI_AcknowledgeConfig(FunctionalState NewState); +void USCI0_TWI_GeneralCallCmd(FunctionalState NewState); +FlagStatus USCI0_GetTWIStatus(USCI0_TWIState_TypeDef USCI0_TWIState); +void USCI0_TWI_Cmd(FunctionalState NewState); +void USCI0_TWI_SendData(uint8_t Data); +uint8_t USCI0_TWI_ReceiveData(void); +void USCI0_UART_Init(uint32_t UART1Fsys, uint32_t BaudRate, USCI0_UART_Mode_TypeDef Mode, + USCI0_UART_RX_TypeDef RxMode); +void USCI0_UART_SendData8(uint8_t Data); +uint8_t USCI0_UART_ReceiveData8(void); +void USCI0_UART_SendData9(uint16_t Data); +uint16_t USCI0_UART_ReceiveData9(void); +void USCI0_ITConfig(FunctionalState NewState, PriorityStatus Priority); +FlagStatus USCI0_GetFlagStatus(USCI0_Flag_TypeDef USCI0_FLAG); +void USCI0_ClearFlag(USCI0_Flag_TypeDef USCI0_FLAG); + +#endif + +/******************* (C) COPYRIGHT 2019 SinOne Microelectronics *****END OF FILE****/ \ No newline at end of file diff --git a/Keil_C/FWLib/SC92F_Lib/inc/sc92f_usci1.h b/Keil_C/FWLib/SC92F_Lib/inc/sc92f_usci1.h new file mode 100644 index 0000000..df5ff09 --- /dev/null +++ b/Keil_C/FWLib/SC92F_Lib/inc/sc92f_usci1.h @@ -0,0 +1,168 @@ +//************************************************************ +// Copyright (c) 深圳市赛元微电子有限公司 +// 文件名称 : sc92F_usci1.h +// 作者 : +// 模块功能 : USCI1固件库函数头文件 +// 最后更正日期: 2022/01/05 +// 版本 : V1.10000 +// 说明 :该文件仅适用于SC92F系列芯片 +//************************************************************* + +#ifndef _sc92f_USCI1_H_ +#define _sc92f_USCI1_H_ + +#include "sc92f.h" + +#define USCI1_UART_BaudRate_FsysDIV12 0X00 //仅模式0可用,串行端口在系统时钟的1/12下运行 +#define USCI1_UART_BaudRate_FsysDIV4 0X01 //仅模式0可用,串行端口在系统时钟的1/4下运行 + +typedef enum +{ + USCI1_Mode_SPI = (uint8_t)0x01, //SPI + USCI1_Mode_TWI = (uint8_t)0x02, //TWI + USCI1_Mode_UART = (uint8_t)0x03 //UART +} USCI1_CommunicationMode_TypeDef; + +typedef enum +{ + USCI1_SPI_FIRSTBIT_MSB = (uint8_t)0x00, //MSB优先发送 + USCI1_SPI_FIRSTBIT_LSB = (uint8_t)0x04 //LSB优先发送 +} USCI1_SPI_FirstBit_TypeDef; + +typedef enum +{ + USCI1_SPI_BAUDRATEPRESCALER_1 = (uint8_t)0x00, //SPI时钟速率为系统时钟除以1 + USCI1_SPI_BAUDRATEPRESCALER_2 = (uint8_t)0x01, //SPI时钟速率为系统时钟除以2 + USCI1_SPI_BAUDRATEPRESCALER_4 = (uint8_t)0x02, //SPI时钟速率为系统时钟除以4 + USCI1_SPI_BAUDRATEPRESCALER_8 = (uint8_t)0x03, //SPI时钟速率为系统时钟除以8 + USCI1_SPI_BAUDRATEPRESCALER_16 = (uint8_t)0x04, //SPI时钟速率为系统时钟除以16 + USCI1_SPI_BAUDRATEPRESCALER_32 = (uint8_t)0x05, //SPI时钟速率为系统时钟除以32 + USCI1_SPI_BAUDRATEPRESCALER_64 = (uint8_t)0x06, //SPI时钟速率为系统时钟除以64 + USCI1_SPI_BAUDRATEPRESCALER_128 = (uint8_t)0x07 //SPI时钟速率为系统时钟除以128 +} USCI1_SPI_BaudRatePrescaler_TypeDef; + +typedef enum +{ + USCI1_SPI_MODE_MASTER = (uint8_t)0x20, //SPI为主设备 + USCI1_SPI_MODE_SLAVE = (uint8_t)0x00 //SPI为从设备 +} USCI1_SPI_Mode_TypeDef; + +typedef enum +{ + USCI1_SPI_CLOCKPOLARITY_LOW = (uint8_t)0x00, //SCK在空闲状态下为低电平 + USCI1_SPI_CLOCKPOLARITY_HIGH = (uint8_t)0x10 //SCK在空闲状态下为高电平 +} USCI1_SPI_ClockPolarity_TypeDef; + +typedef enum +{ + USCI1_SPI_CLOCKPHASE_1EDGE = (uint8_t)0x00, //SCK的第一沿采集数据 + USCI1_SPI_CLOCKPHASE_2EDGE = (uint8_t)0x08 //SCK的第二沿采集数据 +} USCI1_SPI_ClockPhase_TypeDef; + +typedef enum +{ + USCI1_SPI_TXE_DISINT = (uint8_t)0x00, //TBIE为0时不允许发送中断 + USCI1_SPI_TXE_ENINT = (uint8_t)0x01 //TBIE为1时允许发送中断 +} USCI1_SPI_TXE_INT_TypeDef; + +typedef enum +{ + USCI1_SPI_DATA8 = (uint8_t)0x00, //SPI 8位传输模式 + USCI1_SPI_DATA16 = (uint8_t)0x02 //SPI 16位传输模式 +} USCI1_TransmissionMode_TypeDef; + +typedef enum +{ + USCI1_TWI_1024 = (uint8_t)0x00, //TWI通信速率 Fhrc/1024 + USCI1_TWI_512 = (uint8_t)0x01, //TWI通信速率 Fhrc/512 + USCI1_TWI_256 = (uint8_t)0x02, //TWI通信速率 Fhrc/256 + USCI1_TWI_128 = (uint8_t)0x03, //TWI通信速率 Fhrc/128 + USCI1_TWI_64 = (uint8_t)0x04, //TWI通信速率 Fhrc/64 + USCI1_TWI_32 = (uint8_t)0x05, //TWI通信速率 Fhrc/32 + USCI1_TWI_16 = (uint8_t)0x06, //TWI通信速率 Fhrc/16 +} USCI1_TWI_MasterCommunicationRate_TypeDef; + +typedef enum +{ + USCI1_TWI_SlaveBusy = 0x00, + USCI1_TWI_SlaveReceivedaAddress = 0x01, + USCI1_TWI_SlaveReceivedaData = 0x02, + USCI1_TWI_SlaveSendData = 0x03, + USCI1_TWI_SlaveReceivedaUACK = 0x04, + USCI1_TWI_SlaveDisableACK = 0x05, + USCI1_TWI_SlaveAddressError = 0x06, + USCI1_TWI_MasterBusy = 0x00, + USCI1_TWI_MasterSendAddress = 0x01, + USCI1_TWI_MasterSendData = 0x02, + USCI1_TWI_MasterReceivedaData = 0x03, + USCI1_TWI_MasterReceivedaUACK = 0x04, +} USCI1_TWIState_TypeDef; + +typedef enum +{ + USCI1_UART_Mode_8B = 0X00, //UART设置为8位模式 + USCI1_UART_Mode_10B = 0X40, //UART设置为10位模式 + USCI1_UART_Mode_11B = 0X80 //UART设置为11位模式 +} USCI1_UART_Mode_TypeDef; + +typedef enum +{ + USCI1_UART_RX_ENABLE = 0X10, //UART允许接收 + USCI1_UART_RX_DISABLE = 0X00 //UART禁止接收 +} USCI1_UART_RX_TypeDef; + +typedef enum +{ + USCI1_SPI_FLAG_SPIF = (uint8_t)0x80, //SPI数据传送标志位SPIF + USCI1_SPI_FLAG_WCOL = (uint8_t)0x50, //SPI写入冲突标志位WCOL + USCI1_SPI_FLAG_TXE = (uint8_t)0x08, //SPI发送缓存器空标志TXE + USCI1_TWI_FLAG_TWIF = (uint8_t)0x40, //TWI中断标志位TWIF + USCI1_TWI_FLAG_GCA = (uint8_t)0x10, //TWI通用地址响应标志位GCA + USCI1_TWI_FLAG_MSTR = (uint8_t)0x20, //TWI主从标志位MSTR + USCI1_TWI_FLAG_TXRXnE = (uint8_t)0x80, + USCI1_UART_FLAG_RI = (uint8_t)0x01, //UART接收中断标志位RI + USCI1_UART_FLAG_TI = (uint8_t)0x02, //UART发送中断标志位TI +} USCI1_Flag_TypeDef; + +typedef enum +{ + USCI1_TWI_Write = 0x00, //写操作 + USCI1_TWI_Read = 0x01, //读操作 +} USCI1_TWI_RWType; + +void USCI1_DeInit(void); +void USCI1_SPI_Init(USCI1_SPI_FirstBit_TypeDef FirstBit, + USCI1_SPI_BaudRatePrescaler_TypeDef BaudRatePrescaler, USCI1_SPI_Mode_TypeDef Mode, + USCI1_SPI_ClockPolarity_TypeDef ClockPolarity, USCI1_SPI_ClockPhase_TypeDef ClockPhase, + USCI1_SPI_TXE_INT_TypeDef SPI_TXE_INT, USCI1_TransmissionMode_TypeDef TransmissionMode); +void USCI1_TransmissionMode(USCI1_TransmissionMode_TypeDef TransmissionMode); +void USCI1_SPI_Cmd(FunctionalState NewState); +void USCI1_SPI_SendData_8(uint8_t Data); +uint8_t USCI1_SPI_ReceiveData_8(void); +void USCI1_SPI_SendData_16(uint16_t Data); +uint16_t USCI1_SPI_ReceiveData_16(void); +void USCI1_TWI_Slave_Init(uint8_t TWI_Address); +void USCI1_TWI_MasterCommunicationRate(USCI1_TWI_MasterCommunicationRate_TypeDef + TWI_MasterCommunicationRate); +void USCI1_TWI_Start(void); +void USCI1_TWI_MasterModeStop(void); +void USCI1_TWI_SlaveClockExtension(FunctionalState NewState); +void USCI1_TWI_AcknowledgeConfig(FunctionalState NewState); +void USCI1_TWI_GeneralCallCmd(FunctionalState NewState); +FlagStatus USCI1_GetTWIStatus(USCI1_TWIState_TypeDef USCI1_TWIState); +void USCI1_TWI_Cmd(FunctionalState NewState); +void USCI1_TWI_SendData(uint8_t Data); +uint8_t USCI1_TWI_ReceiveData(void); +void USCI1_UART_Init(uint32_t UART1Fsys, uint32_t BaudRate, USCI1_UART_Mode_TypeDef Mode, + USCI1_UART_RX_TypeDef RxMode); +void USCI1_UART_SendData8(uint8_t Data); +uint8_t USCI1_UART_ReceiveData8(void); +void USCI1_UART_SendData9(uint16_t Data); +uint16_t USCI1_UART_ReceiveData9(void); +void USCI1_ITConfig(FunctionalState NewState, PriorityStatus Priority); +FlagStatus USCI1_GetFlagStatus(USCI1_Flag_TypeDef USCI1_FLAG); +void USCI1_ClearFlag(USCI1_Flag_TypeDef USCI1_FLAG); +void USCI1_TWI_SendAddr(uint8_t Addr, USCI1_TWI_RWType RW); +#endif + +/******************* (C) COPYRIGHT 2019 SinOne Microelectronics *****END OF FILE****/ \ No newline at end of file diff --git a/Keil_C/FWLib/SC92F_Lib/inc/sc92f_usci2.h b/Keil_C/FWLib/SC92F_Lib/inc/sc92f_usci2.h new file mode 100644 index 0000000..9b82bf0 --- /dev/null +++ b/Keil_C/FWLib/SC92F_Lib/inc/sc92f_usci2.h @@ -0,0 +1,168 @@ +//************************************************************ +// Copyright (c) 深圳市赛元微电子有限公司 +// 文件名称 : sc92F_usci2.h +// 作者 : +// 模块功能 : USCI2固件库函数头文件 +// 最后更正日期: 2022/01/05 +// 版本 : V1.10000 +// 说明 :该文件仅适用于SC92F系列芯片 +//************************************************************* + +#ifndef _sc92f_USCI2_H_ +#define _sc92f_USCI2_H_ + +#include "sc92f.h" + +#define USCI2_UART_BaudRate_FsysDIV12 0X00 //仅模式0可用,串行端口在系统时钟的1/12下运行 +#define USCI2_UART_BaudRate_FsysDIV4 0X01 //仅模式0可用,串行端口在系统时钟的1/4下运行 + +typedef enum +{ + USCI2_Mode_SPI = (uint8_t)0x01, //SPI + USCI2_Mode_TWI = (uint8_t)0x02, //TWI + USCI2_Mode_UART = (uint8_t)0x03 //UART +} USCI2_CommunicationMode_TypeDef; + +typedef enum +{ + USCI2_SPI_FIRSTBIT_MSB = (uint8_t)0x00, //MSB优先发送 + USCI2_SPI_FIRSTBIT_LSB = (uint8_t)0x04 //LSB优先发送 +} USCI2_SPI_FirstBit_TypeDef; + +typedef enum +{ + USCI2_SPI_BAUDRATEPRESCALER_1 = (uint8_t)0x00, //SPI时钟速率为系统时钟除以1 + USCI2_SPI_BAUDRATEPRESCALER_2 = (uint8_t)0x01, //SPI时钟速率为系统时钟除以2 + USCI2_SPI_BAUDRATEPRESCALER_4 = (uint8_t)0x02, //SPI时钟速率为系统时钟除以4 + USCI2_SPI_BAUDRATEPRESCALER_8 = (uint8_t)0x03, //SPI时钟速率为系统时钟除以8 + USCI2_SPI_BAUDRATEPRESCALER_16 = (uint8_t)0x04, //SPI时钟速率为系统时钟除以16 + USCI2_SPI_BAUDRATEPRESCALER_32 = (uint8_t)0x05, //SPI时钟速率为系统时钟除以32 + USCI2_SPI_BAUDRATEPRESCALER_64 = (uint8_t)0x06, //SPI时钟速率为系统时钟除以64 + USCI2_SPI_BAUDRATEPRESCALER_128 = (uint8_t)0x07 //SPI时钟速率为系统时钟除以128 +} USCI2_SPI_BaudRatePrescaler_TypeDef; + +typedef enum +{ + USCI2_SPI_MODE_MASTER = (uint8_t)0x20, //SPI为主设备 + USCI2_SPI_MODE_SLAVE = (uint8_t)0x00 //SPI为从设备 +} USCI2_SPI_Mode_TypeDef; + +typedef enum +{ + USCI2_SPI_CLOCKPOLARITY_LOW = (uint8_t)0x00, //SCK在空闲状态下为低电平 + USCI2_SPI_CLOCKPOLARITY_HIGH = (uint8_t)0x10 //SCK在空闲状态下为高电平 +} USCI2_SPI_ClockPolarity_TypeDef; + +typedef enum +{ + USCI2_SPI_CLOCKPHASE_1EDGE = (uint8_t)0x00, //SCK的第一沿采集数据 + USCI2_SPI_CLOCKPHASE_2EDGE = (uint8_t)0x08 //SCK的第二沿采集数据 +} USCI2_SPI_ClockPhase_TypeDef; + +typedef enum +{ + USCI2_SPI_TXE_DISINT = (uint8_t)0x00, //TBIE为0时不允许发送中断 + USCI2_SPI_TXE_ENINT = (uint8_t)0x01 //TBIE为1时允许发送中断 +} USCI2_SPI_TXE_INT_TypeDef; + +typedef enum +{ + USCI2_SPI_DATA8 = (uint8_t)0x00, //SPI 8位传输模式 + USCI2_SPI_DATA16 = (uint8_t)0x01 //SPI 16位传输模式 +} USCI2_TransmissionMode_TypeDef; + +typedef enum +{ + USCI2_TWI_1024 = (uint8_t)0x00, //TWI通信速率 Fhrc/1024 + USCI2_TWI_512 = (uint8_t)0x01, //TWI通信速率 Fhrc/512 + USCI2_TWI_256 = (uint8_t)0x02, //TWI通信速率 Fhrc/256 + USCI2_TWI_128 = (uint8_t)0x03, //TWI通信速率 Fhrc/128 + USCI2_TWI_64 = (uint8_t)0x04, //TWI通信速率 Fhrc/64 + USCI2_TWI_32 = (uint8_t)0x05, //TWI通信速率 Fhrc/32 + USCI2_TWI_16 = (uint8_t)0x06, //TWI通信速率 Fhrc/16 +} USCI2_TWI_MasterCommunicationRate_TypeDef; + +typedef enum +{ + USCI2_TWI_SlaveBusy = 0x00, + USCI2_TWI_SlaveReceivedaAddress = 0x01, + USCI2_TWI_SlaveReceivedaData = 0x02, + USCI2_TWI_SlaveSendData = 0x03, + USCI2_TWI_SlaveReceivedaUACK = 0x04, + USCI2_TWI_SlaveDisableACK = 0x05, + USCI2_TWI_SlaveAddressError = 0x06, + USCI2_TWI_MasterBusy = 0x00, + USCI2_TWI_MasterSendAddress = 0x01, + USCI2_TWI_MasterSendData = 0x02, + USCI2_TWI_MasterReceivedaData = 0x03, + USCI2_TWI_MasterReceivedaUACK = 0x04, +} USCI2_TWIState_TypeDef; + +typedef enum +{ + USCI2_UART_Mode_8B = 0X00, //UART设置为8位模式 + USCI2_UART_Mode_10B = 0X40, //UART设置为10位模式 + USCI2_UART_Mode_11B = 0X80 //UART设置为11位模式 +} USCI2_UART_Mode_TypeDef; + +typedef enum +{ + USCI2_UART_RX_ENABLE = 0X10, //UART允许接收 + USCI2_UART_RX_DISABLE = 0X00 //UART禁止接收 +} USCI2_UART_RX_TypeDef; + +typedef enum +{ + USCI2_SPI_FLAG_SPIF = (uint8_t)0x80, //SPI数据传送标志位SPIF + USCI2_SPI_FLAG_WCOL = (uint8_t)0x50, //SPI写入冲突标志位WCOL + USCI2_SPI_FLAG_TXE = (uint8_t)0x08, //SPI发送缓存器空标志TXE + USCI2_TWI_FLAG_TWIF = (uint8_t)0x40, //TWI中断标志位TWIF + USCI2_TWI_FLAG_GCA = (uint8_t)0x10, //TWI通用地址响应标志位GCA + USCI2_TWI_FLAG_MSTR = (uint8_t)0x20, //TWI主从标志位MSTR + USCI2_TWI_FLAG_TXRXnE = (uint8_t)0x80, + USCI2_UART_FLAG_RI = (uint8_t)0x01, //UART接收中断标志位RI + USCI2_UART_FLAG_TI = (uint8_t)0x02, //UART发送中断标志位TI +} USCI2_Flag_TypeDef; + +typedef enum +{ + USCI2_TWI_Write = 0x00, //写操作 + USCI2_TWI_Read = 0x01, //读操作 +} USCI2_TWI_RWType; + +void USCI2_DeInit(void); +void USCI2_SPI_Init(USCI2_SPI_FirstBit_TypeDef FirstBit, + USCI2_SPI_BaudRatePrescaler_TypeDef BaudRatePrescaler, USCI2_SPI_Mode_TypeDef Mode, + USCI2_SPI_ClockPolarity_TypeDef ClockPolarity, USCI2_SPI_ClockPhase_TypeDef ClockPhase, + USCI2_SPI_TXE_INT_TypeDef SPI_TXE_INT, USCI2_TransmissionMode_TypeDef TransmissionMode); +void USCI2_TransmissionMode(USCI2_TransmissionMode_TypeDef TransmissionMode); +void USCI2_SPI_Cmd(FunctionalState NewState); +void USCI2_SPI_SendData_8(uint8_t Data); +uint8_t USCI2_SPI_ReceiveData_8(void); +void USCI2_SPI_SendData_16(uint16_t Data); +uint16_t USCI2_SPI_ReceiveData_16(void); +void USCI2_TWI_Slave_Init(uint8_t TWI_Address); +void USCI2_TWI_MasterCommunicationRate(USCI2_TWI_MasterCommunicationRate_TypeDef + TWI_MasterCommunicationRate); +void USCI2_TWI_Start(void); +void USCI2_TWI_MasterModeStop(void); +void USCI2_TWI_SlaveClockExtension(FunctionalState NewState); +void USCI2_TWI_AcknowledgeConfig(FunctionalState NewState); +void USCI2_TWI_GeneralCallCmd(FunctionalState NewState); +FlagStatus USCI2_GetTWIStatus(USCI2_TWIState_TypeDef USCI2_TWIState); +void USCI2_TWI_Cmd(FunctionalState NewState); +void USCI2_TWI_SendData(uint8_t Data); +uint8_t USCI2_TWI_ReceiveData(void); +void USCI2_UART_Init(uint32_t UART1Fsys, uint32_t BaudRate, USCI2_UART_Mode_TypeDef Mode, + USCI2_UART_RX_TypeDef RxMode); +void USCI2_UART_SendData8(uint8_t Data); +uint8_t USCI2_UART_ReceiveData8(void); +void USCI2_UART_SendData9(uint16_t Data); +uint16_t USCI2_UART_ReceiveData9(void); +void USCI2_ITConfig(FunctionalState NewState, PriorityStatus Priority); +FlagStatus USCI2_GetFlagStatus(USCI2_Flag_TypeDef USCI2_FLAG); +void USCI2_ClearFlag(USCI2_Flag_TypeDef USCI2_FLAG); +void USCI2_TWI_SendAddr(uint8_t Addr, USCI2_TWI_RWType RW); +#endif + +/******************* (C) COPYRIGHT 2019 SinOne Microelectronics *****END OF FILE****/ \ No newline at end of file diff --git a/Keil_C/FWLib/SC92F_Lib/inc/sc92f_wdt.h b/Keil_C/FWLib/SC92F_Lib/inc/sc92f_wdt.h new file mode 100644 index 0000000..e0bdf38 --- /dev/null +++ b/Keil_C/FWLib/SC92F_Lib/inc/sc92f_wdt.h @@ -0,0 +1,43 @@ +//************************************************************ +// Copyright (c) 深圳市赛元微电子有限公司 +// 文件名称: sc92f_wdt.h +// 作者: +// 模块功能: WDT固件库函数头文件 +// 最后更正日期: 2022年3月23日 +// 版本: V1.10002 +// 说明: +//************************************************************* + +#ifndef _sc92f_WDT_H_ +#define _sc92f_WDT_H_ + +#include "sc92f.h" + +typedef enum +{ + WDT_OverflowTime_500MS = (uint8_t)0x00, //看门狗溢出时间为500MS + WDT_OverflowTime_250MS = (uint8_t)0x01, //看门狗溢出时间为250MS + WDT_OverflowTime_125MS = (uint8_t)0x02, //看门狗溢出时间为125MS + WDT_OverflowTime_62_5MS = (uint8_t)0x03, //看门狗溢出时间为62.5MS + WDT_OverflowTime_31_5MS = (uint8_t)0x04, //看门狗溢出时间为31.5MS + WDT_OverflowTime_15_75MS = (uint8_t)0x05, //看门狗溢出时间为15.75MS + WDT_OverflowTime_7_88MS = (uint8_t)0x06, //看门狗溢出时间为7.88MS + WDT_OverflowTime_3_94MS = (uint8_t)0x07 //看门狗溢出时间为3.94MS +} WDT_OverflowTime_TypeDef; + +/************************宏函数************************/ +/***************************************************** +*函数名称:void WDT_SetReload(void) +*函数功能:WDT喂狗 +*入口参数:void +*出口参数:void +*****************************************************/ +#define WDT_SetReload() SET_BIT(WDTCON,0x10) + +void WDT_DeInit(void); +void WDT_Init(WDT_OverflowTime_TypeDef + OverflowTime); +void WDT_Cmd(FunctionalState NewState); +#endif + +/******************* (C) COPYRIGHT 2020 SinOne Microelectronics *****END OF FILE****/ \ No newline at end of file diff --git a/Keil_C/FWLib/SC92F_Lib/src/sc92f_acmp.c b/Keil_C/FWLib/SC92F_Lib/src/sc92f_acmp.c new file mode 100644 index 0000000..039b3b4 --- /dev/null +++ b/Keil_C/FWLib/SC92F_Lib/src/sc92f_acmp.c @@ -0,0 +1,129 @@ +//************************************************************ +// Copyright (c) 深圳市赛元微电子有限公司 +// 文件名称 : sc92f_acmp.c +// 作者 : +// 模块功能 : ACMP固件库函数C文件 +// 局部函数列表: +// 最后更正日期: 2020/8/18 +// 版本 : V1.00000 +// 说明 : +//************************************************************* + +#include "sc92f_acmp.h" + +#if defined (SC92F854x) || defined (SC92F754x) ||defined (SC92F844xB) || defined (SC92F744xB) || defined (SC92F84Ax_2) || defined (SC92F74Ax_2)\ + || defined (SC92FWxx) || defined(SC92F859x) || defined(SC92F759x) +/************************************************** +*函数名称:void ACMP_DeInit(void) +*函数功能:MDU相关寄存器复位至缺省值 +*入口参数:void +*出口参数:void +**************************************************/ +void ACMP_DeInit(void) +{ + CMPCON = 0X00; + CMPCFG = 0X00; +} + +/************************************************** +*函数名称:void ACMP_Init(ACMP_Vref_Typedef ACMP_Vref, ACMP_Channel_TypeDef ACMP_Channel) +*函数功能:模拟比较器初始化配置函数 +*入口参数: +ACMP_Vref_Typedef:ACMP_Vref:ACMP参考电压选择 +ACMP_Channel_TypeDef:ACMP_Channel:ACMP输入通道选择 +*出口参数:void +**************************************************/ +void ACMP_Init(ACMP_Vref_Typedef ACMP_Vref, + ACMP_Channel_TypeDef ACMP_Channel) +{ + CMPCON = CMPCON & 0XF0 | ACMP_Vref; + CMPCFG = CMPCFG & 0XEC | ACMP_Channel; +} + +/************************************************** +*函数名称:void ACMP_SetTriggerMode(ACMP_TriggerMode_Typedef ACMP_TriggerMode) +*函数功能:ACMP中断触发方式配置函数 +*入口参数: +ACMP_TriggerMode_Typedef:ACMP_TriggerMode:中断触发方式选择 +*出口参数:void +**************************************************/ +void ACMP_SetTriggerMode(ACMP_TriggerMode_Typedef + ACMP_TriggerMode) +{ + CMPCFG = CMPCFG & 0XF3 | ACMP_TriggerMode; +} + +/***************************************************** +*函数名称:void ACMP_Cmd(FunctionalState NewState) +*函数功能:ACMP功能开关函数 +*入口参数: +FunctionalState:NewState:功能启动/关闭选择 +*出口参数:void +*****************************************************/ +void ACMP_Cmd(FunctionalState NewState) +{ + if(NewState == DISABLE) + { + CMPCON &= 0X7F; + } + else + { + CMPCON |= 0x80; + } +} + +/***************************************************** +*函数名称:void ACMP_ITConfig(FunctionalState NewState, PriorityStatus Priority) +*函数功能:ACMP中断初始化 +*入口参数:FunctionalState:NewState:中断使能/关闭选择 + PriorityStatus:Priority:中断优先级选择 +*出口参数:void +*****************************************************/ +void ACMP_ITConfig(FunctionalState NewState, + PriorityStatus Priority) +{ + if(NewState == DISABLE) + { + IE1 &= 0XBF; + } + else + { + IE1 |= 0X20; + } + + /************************************************************/ + if(Priority == LOW) + { + IP1 &= 0XBF; + } + else + { + IP1 |= 0X20; + } +} + +/***************************************************** +*函数名称:FlagStatus ACMP_GetFlagStatus(ACMP_Flag_TypeDef ACMP_Flag) +*函数功能:获得ACMP标志状态 +*入口参数:ACMP_Flag 标志位选择 +*出口参数: +ACMP_Flag_TypeDef:FlagStatus:ACMP标志状态 +*****************************************************/ +FlagStatus ACMP_GetFlagStatus(ACMP_Flag_TypeDef + ACMP_Flag) +{ + return (bool)(CMPCON & ACMP_Flag); +} + +/***************************************************** +*函数名称:void ACMP_ClearFlag(void) +*函数功能:清除标志状态 +*入口参数:void +*出口参数:void +*****************************************************/ +void ACMP_ClearFlag(void) +{ + CMPCON &= (~ACMP_FLAG_CMPIF); +} +#endif +/******************* (C) COPYRIGHT 2020 SinOne Microelectronics *****END OF FILE****/ \ No newline at end of file diff --git a/Keil_C/FWLib/SC92F_Lib/src/sc92f_adc.c b/Keil_C/FWLib/SC92F_Lib/src/sc92f_adc.c new file mode 100644 index 0000000..37c01a6 --- /dev/null +++ b/Keil_C/FWLib/SC92F_Lib/src/sc92f_adc.c @@ -0,0 +1,462 @@ +//************************************************************ +// Copyright (c) 深圳市赛元微电子有限公司 +// 文件名称: sc92f_adc.c +// 作者: 赛元应用团队 +// 模块功能: ADC固件库函数C文件 +// 最后更正日期: 2022年3月23日 +// 版本: V1.10005 +// 说明: +//************************************************************* + +/* 头文件引用 */ +#include "sc92f_adc.h" + +#if !defined(SC92F827X) && !defined(SC92F837X) +/************************************************** +*函数名称:void ADC_DeInit(void) +*函数功能:ADC相关寄存器复位至缺省值 +*入口参数:void +*出口参数:void +**************************************************/ +void ADC_DeInit(void) +{ + ADCCON = 0x00; + ADCCFG0 = 0X00; + ADCCFG1 = 0X00; +#if defined(SC92F854x) || defined(SC92F754x) || defined(SC92F844xB) || defined(SC92F744xB) || defined(SC92F84Ax_2) || defined(SC92F74Ax_2)\ + || defined(SC92F846xB) || defined(SC92F746xB) || defined(SC92F836xB) || defined(SC92F736xB) || defined(SC92F84Ax) || defined(SC92F74Ax)\ + || defined(SC92F83Ax) || defined(SC92F73Ax) || defined(SC92F848x) || defined(SC92F748x) || defined (SC92F859x) || defined (SC92F759x)\ + || defined (SC92L853x) || defined (SC92L753x) + ADCCFG2 = 0X00; +#endif + ADCVL = 0X00; + ADCVH = 0X00; + EADC = 0; + IPADC = 0; +} + +/************************************************** +*函数名称:void ADC_Init(ADC_PresSel_TypeDef ADC_PrescalerSelection, ADC_Cycle_TypeDef ADC_Cycle) +*函数功能:ADC初始化配置函数 +*入口参数: +ADC_PresSel_TypeDef:ADC_PrescalerSelection:预分频选择 +ADC_Cycle_TypeDef:ADC_Cycle:采样时钟周期选择 +*出口参数:void +**************************************************/ +#if defined(SC92F854x) || defined(SC92F754x) || defined(SC92F844xB) || defined(SC92F744xB) || defined(SC92F84Ax_2) || defined(SC92F74Ax_2)\ + || defined(SC92F846xB) || defined(SC92F746xB) || defined(SC92F836xB) || defined(SC92F736xB) || defined(SC92F84Ax) || defined(SC92F74Ax)\ + || defined(SC92F83Ax) || defined(SC92F73Ax) || defined(SC92FWxx) || defined(SC92F848x) || defined(SC92F748x)\ + || defined (SC92F859x) || defined (SC92F759x) +void ADC_Init(ADC_PresSel_TypeDef ADC_PrescalerSelection, + ADC_Cycle_TypeDef ADC_Cycle) +{ + /* 配置ADC时钟分频和采样周期 */ + ADCCFG2 = ADC_PrescalerSelection | ADC_Cycle; +} +#elif defined(SC92F7003) || defined(SC92F8003) || defined(SC92F740x) +void ADC_Init(ADC_PresSel_TypeDef ADC_PrescalerSelection, + ADC_Cycle_TypeDef ADC_Cycle) +{ + /* 配置ADC时钟分频和采样周期 */ + ADCCFG1 = ADC_PrescalerSelection | ADC_Cycle; +} +#elif defined(SC92F742x) || defined(SC92F725X) || defined(SC92F735X) || defined(SC92F730x) || defined(SC92F732X) || defined(SC92F7490)\ + || defined(SC93F833x) || defined(SC93F843x) || defined(SC93F743x) +void ADC_Init(ADC_PresSel_TypeDef ADC_PrescalerSelection, + ADC_Cycle_TypeDef ADC_Cycle) +{ + ADC_Cycle = 0; //SC92F742x无此功能 + /* 配置ADC时钟分频 */ + ADCCON = (ADCCON & 0xDF) | ADC_PrescalerSelection; +} +#elif defined (SC92L853x) || defined (SC92L753x) +void ADC_Init(ADC_PresSel_TypeDef ADC_PrescalerSelection, ADC_Cycle_TypeDef ADC_Cycle) +{ + ADC_Cycle = 0x00; //该入参在92L系列无效 + /* 配置ADC时钟分频 */ + ADCCFG2 = ADC_PrescalerSelection; +} +#endif + +/************************************************** +*函数名称:void ADC_ChannelConfig(ADC_Channel_TypeDef ADC_Channel, FunctionalState NewState) +*函数功能:ADC输入口配置函数,并且使能相关功能 +*入口参数: +ADC_Channel_TypeDef:ADC_Channel:ADC输入口选择 +FunctionalState:NewState:ADCx使能/关闭选择 +*出口参数:void +**************************************************/ +#if defined(SC92F854x) || defined(SC92F754x) || defined(SC92F844xB) || defined(SC92F744xB) || defined(SC92F84Ax_2) || defined(SC92F74Ax_2)\ + || defined(SC92F846xB) || defined(SC92F746xB) || defined(SC92F836xB) || defined(SC92F736xB) || defined(SC92F84Ax) || defined(SC92F74Ax)\ + || defined(SC92F83Ax) || defined(SC92F73Ax) || defined(SC92FWxx) || defined(SC92F848x) || defined(SC92F748x)\ + || defined(SC92F859x) || defined(SC92F759x) || defined (SC92L853x) || defined (SC92L753x) +void ADC_ChannelConfig(ADC_Channel_TypeDef ADC_Channel, FunctionalState NewState) +{ + uint16_t TempReg; + /* 配置ADC转换通道 */ + ADCCON = (ADCCON & 0XE0) | ADC_Channel; + + /* 配置ADC外部采样通道 */ + if (ADC_Channel < ADC_CHANNEL_VDD_D4) //内部采样通道无需配置 + { + TempReg = (0x0001 << ADC_Channel); + if (NewState == DISABLE)// 使能ADC采样通道 + { + ADCCFG0 &= (~(uint8_t)TempReg); + ADCCFG1 &= (~(uint8_t)(TempReg >> 8)); + } + else // 失能ADC采样通道 + { + ADCCFG0 |= ((uint8_t)TempReg); + ADCCFG1 |= ((uint8_t)(TempReg >> 8)); + } + } +} +#elif defined(SC92F7003) || defined(SC92F8003) || defined(SC92F740x) || defined(SC92F7490) +void ADC_ChannelConfig(ADC_Channel_TypeDef ADC_Channel, FunctionalState NewState) +{ + uint8_t TempReg; + /* 配置ADC转换通道 */ + ADCCON = (ADCCON & 0xE0) | ADC_Channel; + + /* 配置ADC采样通道 */ + if (ADC_Channel < ADC_CHANNEL_VDD_D4) //内部采样通道无需配置 + { + TempReg = (0x01 << ADC_Channel); + if (ADC_Channel < ADC_CHANNEL_VDD_D4) + { + if (NewState == DISABLE) //失能ADC采样通道 + { + ADCCFG0 &= (~TempReg); + } + else //使能ADC采样通道 + { + ADCCFG0 |= TempReg; + } + } + } +} +#elif defined(SC92F742x) || defined(SC92F730x) || defined(SC92F725X) || defined(SC92F735X) || defined(SC92F732X) +void ADC_ChannelConfig(ADC_Channel_TypeDef ADC_Channel, FunctionalState NewState) +{ + uint16_t TempReg; + /* 配置ADC转换通道 */ + ADCCON = (ADCCON & 0xF0) | ADC_Channel; + + /* 配置ADC采样通道 */ + if (ADC_Channel < ADC_CHANNEL_VDD_D4) //内部采样通道无需配置 + { + TempReg = (0x0001 << ADC_Channel); + if (NewState == DISABLE) + { + ADCCFG0 &= (~(uint8_t)TempReg); + ADCCFG1 &= (~(uint8_t)(TempReg >> 8)); + } + else + { + ADCCFG0 |= ((uint8_t)TempReg); + ADCCFG1 |= ((uint8_t)(TempReg >> 8)); + } + } +} +#elif defined(SC93F833x) || defined(SC93F843x) || defined(SC93F743x) +void ADC_ChannelConfig(ADC_Channel_TypeDef ADC_Channel, FunctionalState NewState) +{ + uint16_t TempReg; + /* 配置ADC转换通道 */ + ADCCON = (ADCCON & 0xF0) | ADC_Channel; + + /* 配置ADC采样通道 */ + if (ADC_Channel < ADC_CHANNEL_Temp) //配置外部采样通道 + { + TempReg = (0x0001 << ADC_Channel); + if (NewState == DISABLE) + { + ADCCFG0 &= (~(uint8_t)TempReg); + ADCCFG1 &= (~(uint8_t)(TempReg >> 8)); + } + else + { + ADCCFG0 |= ((uint8_t)TempReg); + ADCCFG1 |= ((uint8_t)(TempReg >> 8)); + } + } + else if (ADC_Channel == ADC_CHANNEL_Temp) //内部温度采样通道 + { + if (NewState == DISABLE) + { + TSCFG &= 0X7F; + } + else + { + /* ADC参考电压选择内部2.4V作为参考 */ + OPINX = 0xC2; + OPREG = OPREG & 0X7F | 0x80; + + TSCFG |= 0x80; + } + } + else if (ADC_Channel == ADC_CHANNEL_9_PGA) //可变增益放大器采样通道 + { + unsigned char code *IFBAddr = 0x3D; + if (NewState == DISABLE) + { + ADCCFG1 &= (~(uint8_t)0x02); //关闭通道9 + PGACON &= 0x7F; //使能PGA + } + /* 读取PGA内部出厂校准值 */ + else + { + ADCCFG1 |= ((uint8_t)0x02); //PGA输入通道与通道9复用,使能通道9 + + IAPADE = 0x01; //指针指向 IFB 区 + PGACFG = *(IFBAddr); //读取校准值 + IAPADE = 0x00; //指针指向 ROM 区 + + PGACON |= 0x80; //使能PGA + } + } +} +#endif + +/************************************************** +*函数名称:void ADC_EAINConfig(uint16_t ADC_Channel, FunctionalState NewState) +*函数功能:将对应的ADC输入口设置为模拟输入模式 +*入口参数: +ADC_EAIN_TypeDef:ADC_EAIN_Select:选择需要设置的ADC口 +FunctionalState:NewState:ADC通道使能/关闭选择 +*出口参数:void +**************************************************/ +void ADC_EAINConfig(uint16_t ADC_EAIN_Select, + FunctionalState NewState) +{ + if (NewState == DISABLE) + { + ADCCFG0 &= (~(uint8_t)ADC_EAIN_Select); +#if defined (SC92F854x) || defined (SC92F754x) || defined (SC92F844xB) || defined (SC92F744xB) || defined (SC92F84Ax_2) || defined (SC92F74Ax_2)\ + || defined (SC92F846xB) || defined (SC92F746xB) || defined (SC92F836xB) || defined (SC92F736xB)||defined (SC92F84Ax) || defined (SC92F74Ax)\ + || defined(SC92F83Ax) || defined(SC92F73Ax) || defined(SC92F848x) || defined(SC92F748x) || defined(SC92F859x) || defined (SC92F759x)\ + || defined (SC92L853x) || defined (SC92L753x) + ADCCFG1 &= (~(uint8_t)(ADC_EAIN_Select >> 8)); +#endif + } + else + { + ADCCFG0 |= ((uint8_t)ADC_EAIN_Select); +#if defined (SC92F854x) || defined (SC92F754x) || defined (SC92F844xB) || defined (SC92F744xB)||defined (SC92F84Ax_2) || defined (SC92F74Ax_2)\ + || defined (SC92F846xB) || defined (SC92F746xB) || defined (SC92F836xB) || defined (SC92F736xB) || defined (SC92F84Ax) || defined (SC92F74Ax)\ + || defined(SC92F83Ax) || defined(SC92F73Ax) || defined(SC92F848x) || defined(SC92F748x) || defined(SC92F859x) || defined (SC92F759x)\ + || defined (SC92L853x) || defined (SC92L753x) + ADCCFG1 |= ((uint8_t)(ADC_EAIN_Select >> 8)); +#endif + } +} +/***************************************************** +*函数名称:void ADC_Cmd(FunctionalState NewState) +*函数功能:ADC功能开关函数 +*入口参数: +FunctionalState:NewState:功能启动/关闭选择 +*出口参数:void +*****************************************************/ +void ADC_Cmd(FunctionalState NewState) +{ + if (NewState == DISABLE) + { + ADCCON &= 0X7F; + } + else + { + ADCCON |= 0x80; + } +} + +/***************************************************** +*函数名称:uint16_t ADC_GetConversionValue(void) +*函数功能:获得一次AD转换数据 +*入口参数:void +*出口参数:uint16_t +*****************************************************/ +unsigned int ADC_GetConversionValue(void) +{ + return ((ADCVH << 4) + (ADCVL >> 4)); +} + +/***************************************************** +*函数名称:FlagStatus ADC_GetFlagStatus(void) +*函数功能:获得ADC中断标志状态 +*入口参数:void +*出口参数: +FlagStatus:ADC中断标志状态 +*****************************************************/ +FlagStatus ADC_GetFlagStatus(void) +{ +#if defined (SC92F854x) || defined (SC92F754x) ||defined (SC92F844xB) || defined (SC92F744xB)||defined (SC92F84Ax_2) || defined (SC92F74Ax_2)\ + || defined (SC92F846xB) || defined (SC92F746xB) || defined (SC92F836xB) || defined (SC92F736xB)||defined (SC92F84Ax) || defined (SC92F74Ax)\ + || defined (SC92F83Ax) || defined (SC92F73Ax) || defined (SC92F7003) || defined (SC92F8003) || defined (SC92F740x) || defined (SC92FWxx)\ + || defined(SC92F848x) || defined(SC92F748x) || defined(SC92F859x) || defined (SC92F759x) || defined (SC92L853x) || defined (SC92L753x) + return (bool)(ADCCON & 0x20); +#elif defined(SC92F742x) || defined(SC92F730x) || defined(SC92F725X) || defined(SC92F735X) || defined(SC92F732X) || defined(SC92F7490) || defined(SC93F833x) || defined(SC93F843x) || defined(SC93F743x) + return (bool)(ADCCON & 0x10); +#endif +} + +/***************************************************** +*函数名称:void ADC_ClearFlag(void) +*函数功能:清除ADC中断标志状态 +*入口参数:void +*出口参数:void +*****************************************************/ +void ADC_ClearFlag(void) +{ +#if defined(SC92F854x) || defined(SC92F754x) || defined(SC92F844xB) || defined(SC92F744xB) || defined(SC92F84Ax_2) || defined(SC92F74Ax_2)\ + || defined(SC92F846xB) || defined(SC92F746xB) || defined(SC92F836xB) || defined(SC92F736xB) || defined(SC92F84Ax) || defined(SC92F74Ax)\ + || defined(SC92F83Ax) || defined(SC92F73Ax) || defined(SC92F8003) || defined(SC92F740x) || defined(SC92F848x) || defined(SC92F748x)\ + || defined(SC92F859x) || defined(SC92F759x) || defined (SC92L853x) || defined (SC92L753x) + ADCCON &= 0xdf; +#endif +#if defined(SC92F742x) || defined(SC92F730x) || defined(SC92F725X) || defined(SC92F735X) || defined(SC92F732X) || defined(SC92F7490) || defined(SC93F833x) || defined(SC93F843x) || defined(SC93F743x) + ADCCON &= 0xef; +#endif +} + +#if defined(SC93F833x) || defined(SC93F843x) || defined(SC93F743x) +unsigned int ADC_TS_StandardData = 0x8000; + +/***************************************************** +*函数名称:void ADC_TSCmd(PriorityStatus NewState) +*函数功能:ADC 温度传感器功能开关函数 +*入口参数: +FunctionalState:NewState:功能启动/关闭选择 +*出口参数:void +*****************************************************/ +void ADC_TSCmd(FunctionalState NewState) +{ + if (NewState == DISABLE) + { + TSCFG &= 0X7F; + } + else + { + TSCFG |= 0X80; + } +} + +/***************************************************** +*函数名称:void ADC_CHOPConfig(PriorityStatus NewState) +*函数功能:拉高或者拉低抵消offset的应用控制位 +*入口参数: +PriorityStatus:NewState:温度传感器高/低选择 +*出口参数:void +*****************************************************/ +void ADC_CHOPConfig(PriorityStatus NewState) +{ + if (NewState == LOW) + { + TSCFG &= 0XFE; + } + else + { + TSCFG |= 0x01; + } +} + +/***************************************************** +*函数名称:void ADC_CHOPConfig(PriorityStatus NewState) +*函数功能:获取出厂时ADC 25度时的转换值 +*入口参数:void +*出口参数:void +*****************************************************/ +uint16_t ADC_Get_TS_StandardData(void) +{ + unsigned int code *IFBAddr = 0x3E; + IAPADE = 0x01; //指针指向 IFB 区 + ADC_TS_StandardData = *(IFBAddr); + IAPADE = 0x00; //指针指向 ROM 区 + return ADC_TS_StandardData; +} + +/***************************************************** +*函数名称:void ADC_GetTSValue(void) +*函数功能:直接获取float类型温度值,获取温度时会关闭中断 +*入口参数:void +*出口参数: +float:温度值 +*****************************************************/ +float ADC_GetTSValue(void) +{ + unsigned char EADC_Flag = EADC; //获取EA标志位状态 + unsigned int ADC_Value1 = 0, ADC_Value2 = 0, ADC_Value = 0; + unsigned int code *IFBAddr = 0x3E; + + ADC_Get_TS_StandardData(); + disableInterrupts(); //关闭中断 + ADC_CHOPConfig(LOW); //拉低抵消offset的应用控制位 + ADC_StartConversion(); //开始AD转换 + while(!ADC_GetFlagStatus()); //等待转换完成 + ADC_ClearFlag(); //清除转换标志位 + ADC_Value1 = ADC_GetConversionValue(); //获取第一次AD的转换值 + ADC_CHOPConfig(HIGH); //拉高抵消offset的应用控制位 + ADC_StartConversion(); //开始AD转换 + while(!ADC_GetFlagStatus()); //等待转换完成 + ADC_ClearFlag(); //清除转换标志位 + ADC_Value2 = ADC_GetConversionValue(); //获取第二次AD的转换值 + ADC_Value = (ADC_Value1 + ADC_Value2) / 2; //获取两次AD采样的平均值 + + if (EADC_Flag) //还原加入运算前的EA标志位 + { + enableInterrupts(); + } + return (25 + ((float)ADC_Value - (float)ADC_TS_StandardData) / 8); +} + +/***************************************************** +*函数名称:ADC_PGAConfig(ADC_PGACOM_TypeDef ADC_PGACOM,ADC_PGAGAN_TypeDef ADC_PGAGAN,ADC_PGAIPT_TypeDef ADC_PGAIPT) +*函数功能:PGA相关配置 +*入口参数: +ADC_PGACOM_TypeDef:ADC_PGACOM:PGA共模电压选择 +ADC_PGAGAN_TypeDef:ADC_PGAGAN:PGA增益放大倍数 +ADC_PGAIPT_TypeDef:ADC_PGAIPT:PGA同相/反相选择 +*出口参数:void +*****************************************************/ +void ADC_PGAConfig(ADC_PGACOM_TypeDef ADC_PGACOM, ADC_PGAGAN_TypeDef ADC_PGAGAN, ADC_PGAIPT_TypeDef ADC_PGAIPT) +{ + PGACON &= 0x8F; + PGACON |= (ADC_PGACOM | ADC_PGAGAN | ADC_PGAIPT); +} + +/***************************************************** +*函数名称:void ADC_PGACmd(PriorityStatus NewState) +*函数功能:ADC PGA功能开关函数 +*入口参数: +FunctionalState:NewState:功能启动/关闭选择 +*出口参数:void +*****************************************************/ +void ADC_PGACmd(PriorityStatus NewState) +{ + if (NewState == LOW) + { + PGACON &= 0XFE; + } + else + { + PGACON |= 0x01; + } +} +#endif + + +/***************************************************** +*函数名称:void ADC_VrefConfig(ADC_Vref_TypeDef ADC_Vref) +*函数功能:ADC 参考电压选择 +*入口参数: +ADC_Vref_TypeDef:ADC_Vref:选择ADC参考电压 +*出口参数:void +*****************************************************/ +void ADC_VrefConfig(ADC_Vref_TypeDef ADC_Vref) +{ + OPINX = 0xC2; + OPREG = OPREG & 0X7F | ADC_Vref; +} +#endif + +/******************* (C) COPYRIGHT 2021 SinOne Microelectronics *****END OF FILE****/ \ No newline at end of file diff --git a/Keil_C/FWLib/SC92F_Lib/src/sc92f_btm.c b/Keil_C/FWLib/SC92F_Lib/src/sc92f_btm.c new file mode 100644 index 0000000..e14a5ad --- /dev/null +++ b/Keil_C/FWLib/SC92F_Lib/src/sc92f_btm.c @@ -0,0 +1,78 @@ +//************************************************************ +// Copyright (c) 深圳市赛元微电子有限公司 +// 文件名称: sc92f_btm.c +// 作者: 赛元应用团队 +// 模块功能: BTM固件库函数C文件 +// 局部函数列表: +// 最后更正日期: 2022年4月2日 +// 版本: V1.10002 +// 说明: +//************************************************************* + +#include "sc92f_btm.h" + + +/************************************************** +*函数名称:void BTM_Init(BTM_Timebase_TypeDef BTM_Timebase) +*函数功能:BTM初始化配置函数 +*入口参数: +BTM_Timebase_TypeDef:BTM_Timebase:BTM溢出时间选择 +*出口参数:void +**************************************************/ +void BTM_Init(BTM_Timebase_TypeDef BTM_Timebase) +{ + BTMCON = (BTMCON & 0xF0) | BTM_Timebase; //配置溢出时间 +} + +/***************************************************** +*函数名称:void BTM_Cmd(FunctionalState NewState) +*函数功能:BTM功能开关函数 +*入口参数: +FunctionalState:NewState:功能启动/关闭选择 +*出口参数:void +*****************************************************/ +void BTM_Cmd(FunctionalState NewState) +{ + if(NewState == DISABLE) + { + BTMCON &= 0x7f; //失能BTM + } + else + { + BTMCON |= 0x80; //使能BTM + } +} + +/***************************************************** +*函数名称:void BTM_ITConfig(FunctionalState NewState, PriorityStatus Priority) +*函数功能:BTM中断初始化 +*入口参数: +FunctionalState:NewState:中断使能/关闭选择 +PriorityStatus:Priority:中断优先级选择 +*出口参数:void +*****************************************************/ +void BTM_ITConfig(FunctionalState NewState, + PriorityStatus Priority) +{ + //中断使能设置 + if(NewState == DISABLE) + { + IE1 &= 0xfb; + } + else + { + IE1 |= 0x04; + } + + //中断优先级设置 + if(Priority == LOW) + { + IP1 &= 0xfb; + } + else + { + IP1 |= 0x04; + } +} + +/******************* (C) COPYRIGHT 2020 SinOne Microelectronics *****END OF FILE****/ \ No newline at end of file diff --git a/Keil_C/FWLib/SC92F_Lib/src/sc92f_chksum.c b/Keil_C/FWLib/SC92F_Lib/src/sc92f_chksum.c new file mode 100644 index 0000000..24412e7 --- /dev/null +++ b/Keil_C/FWLib/SC92F_Lib/src/sc92f_chksum.c @@ -0,0 +1,59 @@ +//************************************************************ +// Copyright (c) 深圳市赛元微电子有限公司 +// 文件名称 : sc92f_chksum.c +// 作者 : +// 模块功能 : CHKSUM固件库函数C文件 +// 最后更正日期: 2021/08/20 +// 版本 : V1.10001 +// 说明 : +//************************************************************* + +#include "sc92f_chksum.h" + +#if defined(SC92F7003) || defined(SC92F8003) || defined(SC92F736xB) || defined(SC92F836xB) || defined(SC92F740x) || defined(SC92F742x)\ + || defined(SC92F73Ax) || defined(SC92F83Ax) || defined(SC92F744xB) || defined(SC92F844xB) || defined(SC92F746xB) || defined(SC92F846xB)\ + || defined(SC92F748x) || defined(SC92F848x) || defined(SC92F74Ax) || defined(SC92F84Ax) || defined(SC92F74Ax_2) || defined(SC92F84Ax_2)\ + || defined(SC92F754x) || defined (SC92F854x) || defined (SC92F759x) || defined(SC92F859x) || defined (SC92F7490) || defined(SC92FWxx)\ + || defined(SC92F827X) || defined(SC92F847X) +/************************************************** +*函数名称:void CHKSUM_DeInit(void) +*函数功能:CHKSUM相关寄存器复位至缺省值 +*入口参数:void +*出口参数:void +**************************************************/ +void CHKSUM_DeInit(void) +{ + OPERCON &= 0XFE; + CHKSUML = 0X00; + CHKSUMH = 0X00; +} + +/************************************************** +*函数名称:void CHKSUM_StartOperation(void) +*函数功能:触发一次check sum计算 +*入口参数:void +*出口参数:void +**************************************************/ +void CHKSUM_StartOperation(void) +{ + OPERCON |= 0X01; + + while(OPERCON & 0x01); +} + +/************************************************** +*函数名称:uint16_t CHKSUM_GetCheckValue(void) +*函数功能:获取一次check sum计算值 +*入口参数:void +*出口参数: +uint16_t:check sum计算值 +**************************************************/ +uint16_t CHKSUM_GetCheckValue(void) +{ + uint16_t checktemp; + checktemp = (uint16_t)(CHKSUMH << 8) + + (uint16_t)CHKSUML; + return checktemp; +} +#endif +/******************* (C) COPYRIGHT 2020 SinOne Microelectronics *****END OF FILE****/ \ No newline at end of file diff --git a/Keil_C/FWLib/SC92F_Lib/src/sc92f_crc.c b/Keil_C/FWLib/SC92F_Lib/src/sc92f_crc.c new file mode 100644 index 0000000..73fac1d --- /dev/null +++ b/Keil_C/FWLib/SC92F_Lib/src/sc92f_crc.c @@ -0,0 +1,97 @@ +//************************************************************ +// Copyright (c) 深圳市赛元微电子有限公司 +// 文件名称 : sc92F_CRC.c +// 作者 : +// 模块功能 : CRC固件库函数C文件 +// 最后更正日期: 2020/8/13 +// 版本 : V1.0000 +// 说明 :该文件仅适用于SC92F系列芯片 +//************************************************************* + +#include "sc92f_CRC.h" +#include "intrins.H" + +#if defined (SC92L853x) || defined (SC92L753x) +/************************************************** +*函数名称:unsigned long CRC_All() +*函数功能:求本工程HEX的CRC32校验值,该计算结果会根据OPTION的IAR Range不同而变化 +*入口参数:void +*出口参数: +uint32_t:返回CRC计算结果 +**************************************************/ +uint32_t CRC_All() +{ + uint32_t CRC_Result; + OPERCON |= 0x01; + _nop_(); + _nop_(); + _nop_(); + _nop_(); + _nop_(); + _nop_(); + _nop_(); + _nop_(); + _nop_(); + _nop_(); + CRCINX = 0x00; + CRC_Result = CRCREG; + CRC_Result = CRCREG * 256 + CRC_Result; + CRC_Result = CRCREG * 65536 + CRC_Result; + CRC_Result = CRCREG * 16777216 + CRC_Result; + return CRC_Result; +} + +/************************************************** +*函数名称:uint32_t CRC_Frame(uint8_t* buff,uint8_t Length) +*函数功能:求输入帧的CRC校验值 +*入口参数: +uint8_t*:buff:传入需要进行CRC计算的数组 +uint8_t:Length:传入需要计算的数组长度 +*出口参数: +uint32_t:CRC计算结果 +**************************************************/ +uint32_t CRC_Frame(uint8_t *buff, uint8_t Length) +{ + uint8_t i; + uint32_t CRC_Result = 0; + + EA = 0; + OPERCON |= 0x02; + _nop_(); + _nop_(); + _nop_(); + _nop_(); + _nop_(); + _nop_(); + _nop_(); + _nop_(); + _nop_(); + _nop_(); + + for (i = 0; i < Length; i++) + { + CRC_Result = *(buff + i); + CRCREG = CRC_Result; + _nop_(); + _nop_(); + _nop_(); + _nop_(); + _nop_(); + _nop_(); + _nop_(); + _nop_(); + _nop_(); + _nop_(); + } + + CRCINX = 0x00; + CRC_Result = CRCREG; + CRC_Result = CRCREG * 256 + CRC_Result; + CRC_Result = CRCREG * 65536 + CRC_Result; + CRC_Result = CRCREG * 16777216 + CRC_Result; + EA = 1; + + return CRC_Result; +} +#endif +/******************* (C) COPYRIGHT 2020 SinOne Microelectronics *****END OF FILE****/ \ No newline at end of file diff --git a/Keil_C/FWLib/SC92F_Lib/src/sc92f_ddic.c b/Keil_C/FWLib/SC92F_Lib/src/sc92f_ddic.c new file mode 100644 index 0000000..eaf69f8 --- /dev/null +++ b/Keil_C/FWLib/SC92F_Lib/src/sc92f_ddic.c @@ -0,0 +1,228 @@ +//************************************************************ +// Copyright (c) 深圳市赛元微电子有限公司 +// 文件名称 : sc92f_ddic.c +// 作者 : +// 模块功能 : DDIC固件库函数C文件 +// 局部函数列表: +// 最后更正日期: 2022/01/20 +// 版本 : V1.10002 +// 说明 : +//************************************************************* + +#include "sc92f_ddic.h" + +#if defined (SC92F854x) || defined (SC92F754x) ||defined (SC92F844xB) || defined (SC92F744xB)||defined (SC92F84Ax_2) || defined (SC92F74Ax_2)\ + || defined (SC92F859x) || defined (SC92F759x) || defined (SC92L853x) || defined (SC92L753x) + +#if defined (SC92L853x) || defined (SC92L753x) +uint8_t xdata LCDRAM[30] _at_ 0xF00; +#else +uint8_t xdata LCDRAM[30] _at_ 0x700; +#endif + +/************************************************** +*函数名称:void DDIC_DeInit(void) +*函数功能:DDIC相关寄存器复位至缺省值 +*入口参数:void +*出口参数:void +**************************************************/ +void DDIC_DeInit(void) +{ + DDRCON = 0X00; + P0VO = 0X00; + P1VO = 0X00; + P2VO = 0X00; +#if defined (SC92L853x) || defined (SC92L753x) + P5VO = 0X00; +#else + P3VO = 0X00; +#endif + OTCON &= 0XF0; +} + +/************************************************** +*函数名称:void DDIC_Init(uint8_t P0OutputPin) +*函数功能:DDIC初始化配置函数 +*入口参数: +DDIC_DutyCycle_TypeDef:DDIC_DutyCylce:LCD/LED显示占空比控制 +DDIC_Pin_TypeDef:P0OutputPin:设置P0口引脚为LCD电压输出口,可以使用或语句操作枚举的多个成员 +DDIC_Pin_TypeDef:P1OutputPin:设置P1口引脚为LCD电压输出口,可以使用或语句操作枚举的多个成员 +DDIC_Pin_TypeDef:P2OutputPin:设置P2口引脚为LCD电压输出口,可以使用或语句操作枚举的多个成员 +DDIC_Pin_TypeDef:P3OutputPin:设置P3口引脚为LCD电压输出口,可以使用或语句操作枚举的多个成员 + 注:当型号为SC92L853x或SC92L753x时,实际为设置P5口 +*出口参数:void +**************************************************/ +void DDIC_Init(DDIC_DutyCycle_TypeDef DDIC_DutyCylce, + uint8_t P0OutputPin, uint8_t P1OutputPin, + uint8_t P2OutputPin, uint8_t P3OutputPin) +{ + DDRCON = DDRCON & 0XCF | DDIC_DutyCylce; + P0VO = P0OutputPin; + P1VO = P1OutputPin; + P2VO = P2OutputPin; +#if defined (SC92L853x) || defined (SC92L753x) + P5VO = P3OutputPin; +#else + P3VO = P3OutputPin; +#endif +} + +/************************************************** +*函数名称:void DDIC_LEDConfig(void) +*函数功能:LED配置函数 +*入口参数:void +*出口参数:void +**************************************************/ +void DDIC_LEDConfig(void) +{ + DDRCON |= 0X40; +} + +/************************************************** +*函数名称:void DDIC_LCDConfig(uint8_t LCDVoltage, + DDIC_ResSel_Typedef DDIC_ResSel, + DDIC_BiasVoltage_Typedef DDIC_BiasVoltage) +*函数功能:LCD配置函数 +*入口参数: +uint8_t:LCDVoltage:LCD电压调节 +DDIC_ResSel_Typedef:DDIC_ResSel:LCD电压输出口电阻选择 +DDIC_BiasVoltage_Typedef:DDIC_BiasVoltage:LCD显示驱动偏置电压设置 +*出口参数:void +**************************************************/ +void DDIC_LCDConfig(uint8_t LCDVoltage, + DDIC_ResSel_Typedef DDIC_ResSel, + DDIC_BiasVoltage_Typedef DDIC_BiasVoltage) +{ + DDRCON = DDRCON & 0XB0 | LCDVoltage; + OTCON = OTCON & 0XF2 | DDIC_ResSel | DDIC_BiasVoltage; +} +/************************************************** +*函数名称:void DDIC_DMOD_Selcet(DDIC_DMOD_TypeDef DDIC_DMOD) +*函数功能:显示驱动模式选择 +*入口参数: +DDIC_DMOD_TypeDef:DDIC_DMOD:选择显示模式 +*出口参数:void +**************************************************/ +void DDIC_DMOD_Selcet(DDIC_DMOD_TypeDef DDIC_DMOD) +{ + if(DDIC_DMOD == DMOD_LED) + { + DDRCON |= 0X40; + } + else + { + DDRCON &= 0XBF; + } +} +/***************************************************** +*函数名称:void DDIC_OutputPinOfDutycycleD4(DDIC_OutputPin_TypeDef DDIC_OutputPin) +*函数功能:1/4占空比时segment与common复用管脚选择 +*入口参数: +DDIC_OutputPin_TypeDef:DDIC_OutputPin:输出管脚选择 +*出口参数:void +*****************************************************/ +void DDIC_OutputPinOfDutycycleD4( + DDIC_OutputPin_TypeDef DDIC_OutputPin) +{ + OTCON &= ~0X02; + OTCON = DDIC_OutputPin<<1; +} + +/***************************************************** +*函数名称:void DDIC_Cmd(FunctionalState NewState) +*函数功能:显示驱动功能开关函数 +*入口参数: +FunctionalState:NewState:功能启动/关闭选择 +*出口参数:void +*****************************************************/ +void DDIC_Cmd(FunctionalState NewState) +{ + if(NewState == DISABLE) + { + DDRCON &= 0X7F; + } + else + { + DDRCON |= 0x80; + } +} + +/***************************************************** +*函数名称:void DDIC_Control(DDIC_Control_SEG_TypeDef DDIC_Seg,DDIC_Control_COM_TypeDef DDIC_Com,DDIC_Control_Status DDIC_Contr) +*函数功能:控制输入的SEG和COM脚对应LCD/LED的亮灭 +*入口参数:DDIC_Control_SEG_TypeDef DDIC_Seg 选择控制的SEG口 + DDIC_Control_COM_TypeDef DDIC_Com 选择控制的COM口 + DDIC_Control_Status DDIC_Contr 控制状态 +*出口参数:void +*****************************************************/ +void DDIC_Control(DDIC_Control_SEG_TypeDef DDIC_Seg, + uint8_t DDIC_Com, + DDIC_Control_Status DDIC_Contr) +{ + if(DDIC_Contr) + { + LCDRAM[DDIC_Seg] |= DDIC_Com; + } + else + { + LCDRAM[DDIC_Seg] &= (~DDIC_Com); + } +} +#endif + +#if defined (SC92F846xB) || defined (SC92F746xB) || defined (SC92F836xB) || defined (SC92F736xB) || defined (SC92F83Ax) || defined (SC92F73Ax)\ + || defined (SC92F84Ax) || defined (SC92F74Ax) || defined (SC92F742x) || defined (SC92F730x) || defined (SC92F725X) || defined (SC92F735X)\ + || defined (SC92F732X) || defined (SC93F833x) || defined (SC93F843x) || defined (SC93F743x) || defined (SC92F848x) || defined (SC92F748x) +/************************************************** +*函数名称:void DDIC_DeInit(void) +*函数功能:DDIC相关寄存器复位至缺省值 +*入口参数:void +*出口参数:void +**************************************************/ +void DDIC_DeInit(void) +{ + P0VO = 0X00; + OTCON &= 0XF3; +} + +/************************************************** +*函数名称:void DDIC_Init(uint8_t P0OutputPin) +*函数功能:DDIC初始化配置函数 +*入口参数: +DDIC_Pin_TypeDef:P0OutputPin:设置P0口引脚为LCD电压输出口,可以使用或语句操作枚举的多个成员 +*出口参数:void +**************************************************/ +void DDIC_Init(uint8_t P0OutputPin) +{ + P0VO = P0OutputPin; +} + +/************************************************** +*函数名称:void DDIC_LCDConfig(DDIC_ResSel_Typedef DDIC_ResSel) +*函数功能:LCD配置函数 +*入口参数: +DDIC_ResSel_Typedef:DDIC_ResSel:LCD电压输出口电阻选择 +*出口参数:void +**************************************************/ +void DDIC_LCDConfig(DDIC_ResSel_Typedef DDIC_ResSel) +{ + OTCON = (OTCON & 0XF3) | DDIC_ResSel; +} + +/************************************************** +*函数名称:void DDIC_Config_Init(uint8_t P0OutputPin,DDIC_ResSel_Typedef DDIC_ResSel) +*函数功能:LCD初始化及配置函数 +*入口参数: +DDIC_Pin_TypeDef:P0OutputPin:设置P0口引脚为LCD电压输出口,可以使用或语句操作枚举的多个成员 +DDIC_ResSel_Typedef:DDIC_ResSel:LCD电压输出口电阻选择 +*出口参数:void +**************************************************/ +void DDIC_Config_Init(uint8_t P0OutputPin, + DDIC_ResSel_Typedef DDIC_ResSel) +{ + P0VO = P0OutputPin; + OTCON = (OTCON & 0XF3) | DDIC_ResSel; +} + +#endif +/******************* (C) COPYRIGHT 2019 SinOne Microelectronics *****END OF FILE****/ \ No newline at end of file diff --git a/Keil_C/FWLib/SC92F_Lib/src/sc92f_gpio.c b/Keil_C/FWLib/SC92F_Lib/src/sc92f_gpio.c new file mode 100644 index 0000000..d18e543 --- /dev/null +++ b/Keil_C/FWLib/SC92F_Lib/src/sc92f_gpio.c @@ -0,0 +1,539 @@ +//************************************************************ +// Copyright (c) 深圳市赛元微电子有限公司 +// 文件名称 : sc92f_gpio.c +// 作者 : +// 模块功能 : GPIO固件库函数C文件 +// 局部函数列表 : +// 最后更正日期 : 2022/01/11 +// 版本 : V1.10004 +// 说明 : 本文件仅适用于赛元92F/93F/92L系列单片机 +//************************************************************* + + +#include "sc92f_gpio.h" + +/************************************************** +*函数名称:void GPIO_DeInit(void) +*函数功能:GPIO相关寄存器复位至缺省值 +*入口参数:void +*出口参数:void +**************************************************/ +void GPIO_DeInit(void) +{ + P0CON = 0x00; + P0PH = 0x00; + P0 = 0; + P1CON = 0x00; + P1PH = 0x00; + P1 = 0; + P2CON = 0x00; + P2PH = 0x00; + P2 = 0; +#if defined(SC92F854x) || defined(SC92F754x) || defined(SC92F844xB) || defined(SC92F744xB) || defined(SC92F84Ax_2) || defined(SC92F74Ax_2)\ + || defined(SC92FWxx) || defined(SC92F859x) || defined(SC92F759x) + P3CON = 0x00; + P3PH = 0x00; + P3 = 0; + P4CON = 0x00; + P4PH = 0x00; + P4 = 0; +#endif +#if !defined(SC92F730x) && !defined(SC92F725X) && !defined(SC92F735X) && !defined(SC92F7003) && !defined(SC92F8003) && !defined(SC92F740x) && !defined(SC92F827X) && !defined(SC92F837X) + P5CON = 0x00; + P5PH = 0x00; + P5 = 0; +#endif +} + +/************************************************** +*函数名称:void GPIO_Init(GPIO_TypeDef GPIOx, uint8_t PortPins, GPIO_Mode_TypeDef GPIO_Mode) +*函数功能:GPIO口模式配置初始化 +*入口参数: +GPIO_TypeDef:GPIOx:选择操作的GPIO口 +GPIO_Pin_TypeDef:PortPins:选择GPIO管脚Pxy +GPIO_Mode_TypeDef:GPIO_Mode:选择GPIO口模式(高阻输入、上拉输入、推挽输出) +*出口参数:void +**************************************************/ +void GPIO_Init(GPIO_TypeDef GPIOx, + uint8_t PortPins, GPIO_Mode_TypeDef GPIO_Mode) +{ + if (GPIOx == GPIO0) + { + if (GPIO_Mode == GPIO_MODE_IN_HI) + { + P0CON &= ~PortPins; + P0PH &= ~PortPins; + } + + if (GPIO_Mode == GPIO_MODE_IN_PU) + { + P0CON &= ~PortPins; + P0PH |= PortPins; + } + + if (GPIO_Mode == GPIO_MODE_OUT_PP) + { + P0CON |= PortPins; + } + } + else if (GPIOx == GPIO1) + { + if (GPIO_Mode == GPIO_MODE_IN_HI) + { + P1CON &= ~PortPins; + P1PH &= ~PortPins; + } + + if (GPIO_Mode == GPIO_MODE_IN_PU) + { + P1CON &= ~PortPins; + P1PH |= PortPins; + } + + if (GPIO_Mode == GPIO_MODE_OUT_PP) + { + P1CON |= PortPins; + } + } + else if (GPIOx == GPIO2) + { + if (GPIO_Mode == GPIO_MODE_IN_HI) + { + P2CON &= ~PortPins; + P2PH &= ~PortPins; + } + + if (GPIO_Mode == GPIO_MODE_IN_PU) + { + P2CON &= ~PortPins; + P2PH |= PortPins; + } + + if (GPIO_Mode == GPIO_MODE_OUT_PP) + { + P2CON |= PortPins; + } + } + +#if defined(SC92F854x) || defined(SC92F754x) || defined(SC92F844xB) || defined(SC92F744xB) || defined(SC92F84Ax_2) || defined(SC92F74Ax_2)\ + || defined(SC92FWxx) || defined(SC92F859x) || defined(SC92F759x) + else if (GPIOx == GPIO3) + { + if (GPIO_Mode == GPIO_MODE_IN_HI) + { + P3CON &= ~PortPins; + P3PH &= ~PortPins; + } + + if (GPIO_Mode == GPIO_MODE_IN_PU) + { + P3CON &= ~PortPins; + P3PH |= PortPins; + } + + if (GPIO_Mode == GPIO_MODE_OUT_PP) + { + P3CON |= PortPins; + } + } + else if (GPIOx == GPIO4) + { + if (GPIO_Mode == GPIO_MODE_IN_HI) + { + P4CON &= ~PortPins; + P4PH &= ~PortPins; + } + + if (GPIO_Mode == GPIO_MODE_IN_PU) + { + P4CON &= ~PortPins; + P4PH |= PortPins; + } + + if (GPIO_Mode == GPIO_MODE_OUT_PP) + { + P4CON |= PortPins; + } + } + +#endif +#if !defined(SC92F730x) && !defined(SC92F725X) && !defined(SC92F735X) && !defined(SC92F7003) && !defined(SC92F8003) && !defined(SC92F740x) && !defined(SC92F827X) && !defined(SC92F837X) + else if (GPIOx == GPIO5) + { + if (GPIO_Mode == GPIO_MODE_IN_HI) + { + P5CON &= ~PortPins; + P5PH &= ~PortPins; + } + + if (GPIO_Mode == GPIO_MODE_IN_PU) + { + P5CON &= ~PortPins; + P5PH |= PortPins; + } + + if (GPIO_Mode == GPIO_MODE_OUT_PP) + { + P5CON |= PortPins; + } + } + +#endif +} + +/************************************************** +*函数名称:void GPIO_Write(GPIO_TypeDef GPIOx, uint8_t PortVal) +*函数功能:GPIO口赋值 +*入口参数: +GPIO_TypeDef:GPIOx:选择操作的GPIO口 +uint8_t:PortVal:GPIO口的值 +*出口参数:void +**************************************************/ +void GPIO_Write(GPIO_TypeDef GPIOx, + uint8_t PortVal) +{ + if (GPIOx == GPIO0) + { + P0 = PortVal; + } + + if (GPIOx == GPIO1) + { + P1 = PortVal; + } + + if (GPIOx == GPIO2) + { + P2 = PortVal; + } + +#if defined(SC92F854x) || defined(SC92F754x) || defined(SC92F844xB) || defined(SC92F744xB) || defined(SC92F84Ax_2) || defined(SC92F74Ax_2)\ + || defined(SC92FWxx) || defined(SC92F859x) || defined(SC92F759x) + + if (GPIOx == GPIO3) + { + P3 = PortVal; + } + + if (GPIOx == GPIO4) + { + P4 = PortVal; + } + +#endif +#if !defined(SC92F730x) && !defined(SC92F725X) && !defined(SC92F735X) && !defined(SC92F8003) && !defined(SC92F740x) && !defined(SC92F827X) && !defined(SC92F837X) && !defined(SC92F7003) + + if (GPIOx == GPIO5) + { + P5 = PortVal; + } + +#endif +} + +/************************************************** +*函数名称:void GPIO_WriteHigh(GPIO_TypeDef GPIOx, uint8_t PortPins) +*函数功能:GPIO口管脚Pxy置位 +*入口参数: +GPIO_TypeDef:GPIOx:选择操作的GPIO口 +GPIO_Pin_TypeDef:PortPins:选择GPIO口管脚Pxy +*出口参数:void +**************************************************/ +void GPIO_WriteHigh(GPIO_TypeDef GPIOx, + uint8_t PortPins) +{ + if (GPIOx == GPIO0) + { + P0 |= PortPins; + } + + if (GPIOx == GPIO1) + { + P1 |= PortPins; + } + + if (GPIOx == GPIO2) + { + P2 |= PortPins; + } + +#if defined(SC92F854x) || defined(SC92F754x) || defined(SC92F844xB) || defined(SC92F744xB) || defined(SC92F84Ax_2) || defined(SC92F74Ax_2)\ + || defined(SC92FWxx) || defined(SC92F859x) || defined(SC92F759x) + + if (GPIOx == GPIO3) + { + P3 |= PortPins; + } + + if (GPIOx == GPIO4) + { + P4 |= PortPins; + } + +#endif +#if !defined(SC92F730x) && !defined(SC92F725X) && !defined(SC92F735X) && !defined(SC92F8003) && !defined(SC92F740x) && !defined(SC92F827X) && !defined(SC92F837X) && !defined(SC92F7003) + + if (GPIOx == GPIO5) + { + P5 |= PortPins; + } + +#endif +} + +/************************************************** +*函数名称:void GPIO_WriteLow(GPIO_TypeDef GPIOx, uint8_t PortPins) +*函数功能:GPIO口管脚Pxy复位 +*入口参数: +GPIO_TypeDef:GPIOx:选择操作的GPIO口 +GPIO_Pin_TypeDef:PortPins:选择GPIO口管脚Pxy +*出口参数:void +**************************************************/ +void GPIO_WriteLow(GPIO_TypeDef GPIOx, + uint8_t PortPins) +{ + if (GPIOx == GPIO0) + { + P0 &= ~PortPins; + } + + if (GPIOx == GPIO1) + { + P1 &= ~PortPins; + } + + if (GPIOx == GPIO2) + { + P2 &= ~PortPins; + } + +#if defined(SC92F854x) || defined(SC92F754x) || defined(SC92F844xB) || defined(SC92F744xB) || defined(SC92F84Ax_2) || defined(SC92F74Ax_2)\ + || defined(SC92FWxx) || defined(SC92F859x) || defined(SC92F759x) + + if (GPIOx == GPIO3) + { + P3 &= ~PortPins; + } + + if (GPIOx == GPIO4) + { + P4 &= ~PortPins; + } + +#endif +#if !defined(SC92F730x) && !defined(SC92F725X) && !defined(SC92F735X) && !defined(SC92F8003) && !defined(SC92F740x) && !defined(SC92F827X) && !defined(SC92F837X) && !defined(SC92F7003) + + if (GPIOx == GPIO5) + { + P5 &= ~PortPins; + } + +#endif +} + +/************************************************** +*函数名称:uint8_t GPIO_ReadPort(GPIO_TypeDef GPIOx) +*函数功能:读GPIO口Px的值 +*入口参数: +GPIO_TypeDef:GPIOx:选择操作的GPIO口 +*出口参数:uint8_t 返回Px的值 +**************************************************/ +uint8_t GPIO_ReadPort(GPIO_TypeDef GPIOx) +{ + if (GPIOx == GPIO0) + { + return P0; + } + else if (GPIOx == GPIO1) + { + return P1; + } + else if (GPIOx == GPIO2) + { + return P2; + } + +#if defined(SC92F854x) || defined(SC92F754x) || defined(SC92F844xB) || defined(SC92F744xB) || defined(SC92F84Ax_2) || defined(SC92F74Ax_2)\ + || defined(SC92FWxx) || defined(SC92F859x) || defined(SC92F759x) + else if (GPIOx == GPIO3) + { + return P3; + } + else if (GPIOx == GPIO4) + { + return P4; + } + +#endif +#if !defined(SC92F730x) && !defined(SC92F725X) && !defined(SC92F735X) && !defined(SC92F8003) && !defined(SC92F740x) && !defined(SC92F827X) && !defined(SC92F837X) && !defined(SC92F7003) + else if (GPIOx == GPIO5) + { + return P5; + } + +#endif + else + { + return 0; + } +} + +/************************************************** +*函数名称:BitStatus GPIO_ReadPin(GPIO_TypeDef GPIOx, uint8_t PortPins) +*函数功能:读GPIO口管脚Pxy的值 +*入口参数: +GPIO_TypeDef:GPIOx:选择操作的GPIO口 +GPIO_Pin_TypeDef:PortPins:选择GPIO口管脚Pxy +*出口参数:BitStatus 返回Pxy的值 +**************************************************/ +BitStatus GPIO_ReadPin(GPIO_TypeDef GPIOx, + uint8_t PortPins) +{ + if (GPIOx == GPIO0) + { + return ((bit)(P0 & PortPins)); + } + else if (GPIOx == GPIO1) + { + return ((bit)(P1 & PortPins)); + } + else if (GPIOx == GPIO2) + { + return ((bit)(P2 & PortPins)); + } + +#if defined(SC92F854x) || defined(SC92F754x) || defined(SC92F844xB) || defined(SC92F744xB) || defined(SC92F84Ax_2) || defined(SC92F74Ax_2)\ + || defined(SC92FWxx) || defined(SC92F859x) || defined(SC92F759x) + else if (GPIOx == GPIO3) + { + return ((bit)(P3 & PortPins)); + } + else if (GPIOx == GPIO4) + { + return ((bit)(P4 & PortPins)); + } + +#endif +#if !defined(SC92F730x) && !defined(SC92F725X) && !defined(SC92F735X) && !defined(SC92F8003) && !defined(SC92F740x) && !defined(SC92F827X) && !defined(SC92F837X) && !defined(SC92F7003) + else if (GPIOx == GPIO5) + { + return ((bit)(P5 & PortPins)); + } + +#endif + return 0; +} + + +/************************************************** +*函数名称:void GPIO_IOH_Config(GPIO_TypeDef GPIOx, uint8_t PortPins,GPIO_IOH_Grade_TypeDef GPIO_IOH_Grade) +*函数功能:设置GPIO口管脚IOH输出能力 +*入口参数: +GPIO_TypeDef:GPIOx:选择操作的GPIO口 +GPIO_Pin_TypeDef:PortPins:选择GPIO口管脚Pxy +GPIO_IOH_Grade_TypeDef:GPIO_IOH_Grade:IO输出等级 +*出口参数:BitStatus 返回Pxy的值 +**************************************************/ +#if !defined(SC92F7003) && !defined(SC92F8003) && !defined(SC92F740x) +void GPIO_IOH_Config(GPIO_TypeDef GPIOx, GPIO_Pin_TypeDef PortPins, GPIO_IOH_Grade_TypeDef GPIO_IOH_Grade) +{ +#if defined(SC92F854x) || defined(SC92F754x) || defined(SC92F844xB) || defined(SC92F744xB) || defined(SC92F84Ax_2) || defined(SC92F74Ax_2)\ + || defined(SC92FWxx) || defined(SC92F859x) || defined(SC92F759x) || defined (SC92L853x) || defined (SC92L753x) + switch (GPIOx) + { + case GPIO0: + if (PortPins == GPIO_PIN_LNIB) + { + IOHCON0 &= 0xFC; + IOHCON0 |= GPIO_IOH_Grade; + } + else if (PortPins == GPIO_PIN_HNIB) + { + IOHCON0 &= 0xF3; + IOHCON0 |= GPIO_IOH_Grade << 2; + } + break; + case GPIO1: + if (PortPins == GPIO_PIN_LNIB) + { + IOHCON0 &= 0xCF; + IOHCON0 |= GPIO_IOH_Grade << 4; + } + else if (PortPins == GPIO_PIN_HNIB) + { + IOHCON0 &= 0x3F; + IOHCON0 |= GPIO_IOH_Grade << 6; + } + break; + case GPIO2: + if (PortPins == GPIO_PIN_LNIB) + { + IOHCON1 &= 0xFC; + IOHCON1 |= GPIO_IOH_Grade; + } + else if (PortPins == GPIO_PIN_HNIB) + { + IOHCON1 &= 0xF3; + IOHCON1 |= GPIO_IOH_Grade << 2; + } + break; +#if defined (SC92L853x) || defined (SC92L753x) + case GPIO5: + if (PortPins == GPIO_PIN_LNIB) + { + IOHCON1 &= 0xCF; + IOHCON1 |= GPIO_IOH_Grade << 4; + } + else if (PortPins == GPIO_PIN_HNIB) + { + IOHCON1 &= 0x3f; + IOHCON1 |= GPIO_IOH_Grade << 6; + } + break; +#else + case GPIO3: + if (PortPins == GPIO_PIN_LNIB) + { + IOHCON1 &= 0xCF; + IOHCON1 |= GPIO_IOH_Grade << 4; + } + break; +#endif + default: + break; + } +#else + switch (GPIOx) + { + case GPIO0: + if (PortPins == GPIO_PIN_LNIB) + { + IOHCON &= 0xFC; + IOHCON |= GPIO_IOH_Grade; + } + else if (PortPins == GPIO_PIN_HNIB) + { + IOHCON &= 0xF3; + IOHCON |= GPIO_IOH_Grade << 2; + } + break; + case GPIO2: + if (PortPins == GPIO_PIN_LNIB) + { + IOHCON &= 0xFC; + IOHCON |= GPIO_IOH_Grade; + } + else if (PortPins == GPIO_PIN_HNIB) + { + IOHCON &= 0xF3; + IOHCON |= GPIO_IOH_Grade << 2; + } + break; + default: + break; + } +#endif +} +#endif + +/******************* (C) COPYRIGHT 2021 SinOne Microelectronics *****END OF FILE****/ \ No newline at end of file diff --git a/Keil_C/FWLib/SC92F_Lib/src/sc92f_iap.c b/Keil_C/FWLib/SC92F_Lib/src/sc92f_iap.c new file mode 100644 index 0000000..71d92fa --- /dev/null +++ b/Keil_C/FWLib/SC92F_Lib/src/sc92f_iap.c @@ -0,0 +1,172 @@ +//************************************************************ +// Copyright (c) 深圳市赛元微电子有限公司 +// 文件名称 : sc92f_iap.c +// 作者 : +// 模块功能 : IAP固件库函数C文件 +// 最后更正日期: 2022/01/24 +// 版本 : V1.10002 +// 说明 :本文件仅适用于赛元92F/93F/92L系列单片机 +//************************************************************* + +#include "sc92f_iap.h" + +/************************************************** +*函数名称:void IAP_DeInit(void) +*函数功能:IAP相关寄存器复位至缺省值 +*入口参数:void +*出口参数:void +**************************************************/ +void IAP_DeInit(void) +{ + IAPKEY = 0X00; + IAPADL = 0X00; + IAPADH = 0X00; + IAPADE = 0X00; + IAPDAT = 0X00; + IAPCTL = 0X00; +} + +/************************************************** +*函数名称:void IAP_SetHoldTime(IAP_HoldTime_TypeDef IAP_HoldTime) +*函数功能:IAP操作CPU Hold Time配置函数 +*入口参数: +IAP_HoldTime_TypeDef:IAP_HoldTimed:Hold TimeTime选择 +*出口参数:void +**************************************************/ +void IAP_SetHoldTime(IAP_HoldTime_TypeDef + IAP_HoldTime) +{ + IAPCTL = IAPCTL & 0XF3 | IAP_HoldTime; +} + +/************************************************** +*函数名称:void IAP_ProgramByte(uint16_t Address, uint8_t Data, IAP_MemType_TypeDef IAP_MemType, uint8_t WriteTimeLimit) +*函数功能:IAP写入一个字节 +*入口参数: +uint16_t:Address:IAP操作地址 +uint8_t:Data:写入的数据 +IAP_MemType_TypeDef:IAP_MemType:IAP操作对象(ROM、EEPROM) +备注:IAP_MEMTYPE_UID不允许写操作,对UID进行写操作无效 +uint8_t:WriteTimeLimit:IAP操作时限 (非零值) +*出口参数:void +**************************************************/ +void IAP_ProgramByte(uint16_t Address, + uint8_t Data, IAP_MemType_TypeDef IAP_MemType, + uint8_t WriteTimeLimit) +{ + BitStatus tmpbit; + + /* UID操作区域不允许写操作 */ + if(IAP_MemType == IAP_MEMTYPE_UID) + return; + + tmpbit = (BitStatus)EA; + if(tmpbit != RESET) + { + disableInterrupts(); + } + + IAPADE = IAP_MemType; + IAPDAT = Data; + IAPADH = (uint8_t)(Address >> 8); + IAPADL = (uint8_t)Address; + IAPKEY = WriteTimeLimit; +#if defined (SC92F848x) || defined (SC92F748x) || defined (SC92F859x) || defined (SC92F759x) || defined (SC92L853x) || defined (SC92L753x) + IAPCTL |= 0x10; +#endif + IAPCTL |= 0x02; + _nop_(); + _nop_(); + _nop_(); + _nop_(); + _nop_(); + _nop_(); + _nop_(); + _nop_(); + IAPADE = IAP_MEMTYPE_ROM; + + if(tmpbit != RESET) + { + enableInterrupts(); + } +} + +/************************************************** +*函数名称:uint8_t IAP_ReadByte(uint16_t Address, IAP_MemType_TypeDef IAP_MemType) +*函数功能:IAP读一个字节 +*入口参数: +uint16_t:Address:IAP操作地址 +IAP_MemType_TypeDef:FLASH_MemType:IAP操作对象(ROM、UID、EEPROM) +*出口参数:uint8_t 读到的字节数据 +**************************************************/ +uint8_t IAP_ReadByte(uint16_t Address, + IAP_MemType_TypeDef IAP_MemType) +{ + uint8_t tmpbyte; + BitStatus tmpbit; + tmpbit = (BitStatus)EA; + + if(tmpbit != RESET) + { + disableInterrupts(); + } + + IAPADE = IAP_MemType; + tmpbyte = *((uint8_t code*)Address); + IAPADE = IAP_MEMTYPE_ROM; + + if(tmpbit != RESET) + { + enableInterrupts(); + } + + return tmpbyte; +} + +#if defined (SC92F848x) || defined (SC92F748x) || defined (SC92F859x) || defined (SC92F759x) || defined (SC92L853x) || defined (SC92L753x) +/************************************************** +*函数名称:void IAP_SectorErase(IAP_MemType_TypeDef IAP_MemType, uint16_t IAP_SectorEraseAddress) +*函数功能:IAP扇区擦除 +*入口参数: +IAP_MemType_TypeDef:IAP_MemType:IAP操作对象(ROM) +uint32_t:IAP_SectorEraseAddress:IAP扇区擦除目标地址 +uint8_t:WriteTimeLimit:IAP操作时限(值需大于等于0x40) +*出口参数:void +**************************************************/ +void IAP_SectorErase(IAP_MemType_TypeDef IAP_MemType, uint32_t IAP_SectorEraseAddress, + uint8_t WriteTimeLimit) +{ + /* UID操作区域不允许扇区擦除操作 */ + if((IAP_MemType == IAP_MEMTYPE_UID) || (IAP_MemType == IAP_MEMTYPE_EEPROM)) + return; + + IAPADE = IAP_MemType; + IAPADH = (uint8_t)(IAP_SectorEraseAddress >> 8); //擦除IAP目标地址高位值 + IAPADL = (uint8_t)IAP_SectorEraseAddress; //擦除IAP目标地址低位值 + IAPKEY = WriteTimeLimit; + IAPCTL = 0x20; + IAPCTL |= 0x02; + _nop_(); + _nop_(); + _nop_(); + _nop_(); + _nop_(); + _nop_(); + _nop_(); + _nop_(); + IAPADE = IAP_MEMTYPE_ROM; +} + +/************************************************** +*函数名称:void IAP_BootLoaderControl(IAP_BTLDType_TypeDef IAP_BTLDType) +*函数功能:MCU复位后从那个区域启动 +*入口参数: +IAP_BTLDType_TypeDef:IAP_BTLDType:选择启动区域 +*出口参数:void +**************************************************/ +void IAP_BootLoaderControl(IAP_BTLDType_TypeDef IAP_BTLDType) +{ + IAPCTL = (IAPCTL & ~IAP_BTLDType_LDROM) | IAP_BTLDType; +} +#endif +/******************* (C) COPYRIGHT 2020 SinOne Microelectronics *****END OF FILE****/ \ No newline at end of file diff --git a/Keil_C/FWLib/SC92F_Lib/src/sc92f_int.c b/Keil_C/FWLib/SC92F_Lib/src/sc92f_int.c new file mode 100644 index 0000000..e0e08ae --- /dev/null +++ b/Keil_C/FWLib/SC92F_Lib/src/sc92f_int.c @@ -0,0 +1,284 @@ +//************************************************************ +// Copyright (c) 深圳市赛元微电子有限公司 +// 文件名称 : sc92f_int.c +// 作者 : +// 模块功能 : INT固件库函数C文件 +// 局部函数列表: +// 最后更正日期: 2022/01/05 +// 版本 : V1.10003 +// 说明 : +//************************************************************* + +#include "sc92f_int.h" + +/************************************************** +*函数名称:void INT_DeInit(INTx_Typedef INTx) +*函数功能:INTx相关寄存器复位至缺省值 +*入口参数: +INTx_Typedef:INTx:INTx选择 +*出口参数:void +**************************************************/ +#if !defined (SC92F827X) && !defined (SC92F837X) && !defined (SC92F730x) && !defined (SC92F725X) && !defined (SC92F735X) && !defined (SC92F7490) +void INT_DeInit(INTx_Typedef INTx) +{ + switch(INTx) + { + case INT0: + INT0R = 0x00; + INT0F = 0x00; + IE &= (~0X01); + IP &= ~0X01; + TCON &= (~0X02); + break; + + case INT1: + INT1R = 0x00; + INT1F = 0x00; + IE &= (~0X04); + IP &= ~0X04; + TCON &= (~0X08); + break; + + case INT2: + INT2R = 0x00; + INT2F = 0x00; + IE1 &= (~0X08); + IP1 &= ~0X08; + break; + + default: + break; + } +} +#else +void INT_DeInit(INTx_Typedef INTx) +{ + switch(INTx) + { + case INT0: + INT0R = 0x00; + INT0F = 0x00; + IE &= (~0X01); + IP &= ~0X01; + TCON &= (~0X02); + break; + + case INT2: + INT2R = 0x00; + INT2F = 0x00; + IE1 &= (~0X08); + IP1 &= ~0X08; + break; + + default: + break; + } +} +#endif + +/************************************************** +*函数名称:void INT0_SetTriggerMode(uint8_t INT0x, INT_TriggerMode_Typedef TriggerMode) +*函数功能:INT0x中断触发方式配置函数 +*入口参数: +INT0x_Typedef:INT0x:INT0x选择 +INT_TriggerMode_Typedef:TriggerMode:中断触发方式选择 +*出口参数:void +**************************************************/ +void INT0_SetTriggerMode(uint8_t INT0x, + INT_TriggerMode_Typedef TriggerMode) +{ + switch(TriggerMode) + { + case INT_TRIGGER_RISE_ONLY: + INT0R |= INT0x; + INT0F &= (~INT0x); + break; + + case INT_TRIGGER_FALL_ONLY: + INT0R &= (~INT0x); + INT0F |= INT0x; + break; + + case INT_TRIGGER_RISE_FALL: + INT0R |= INT0x; + INT0F |= INT0x; + break; + + case INT_TRIGGER_DISABLE: + INT0R &= (~INT0x); + INT0F &= (~INT0x); + + default: + break; + } +} + + +/************************************************** +*函数名称:void INT1_SetTriggerMode(uint8_t INT1x, INT_TriggerMode_Typedef TriggerMode) +*函数功能:INT1x中断触发方式配置函数 +*入口参数: +INT1x_Typedef:INT1x:INT1x选择 +INT_TriggerMode_Typedef:TriggerMode:中断触发方式选择 +*出口参数:void +**************************************************/ +#if !defined (SC92F827X) && !defined (SC92F837X) && !defined (SC92F730x) && !defined (SC92F725X) && !defined (SC92F735X) && !defined (SC92F7490) +void INT1_SetTriggerMode(uint8_t INT1x, + INT_TriggerMode_Typedef TriggerMode) +{ + switch(TriggerMode) + { + case INT_TRIGGER_RISE_ONLY: + INT1R |= INT1x; + INT1F &= (~INT1x); + break; + + case INT_TRIGGER_FALL_ONLY: + INT1R &= (~INT1x); + INT1F |= INT1x; + break; + + case INT_TRIGGER_RISE_FALL: + INT1R |= INT1x; + INT1F |= INT1x; + break; + + case INT_TRIGGER_DISABLE: + INT1R &= (~INT1x); + INT1F &= (~INT1x); + + default: + break; + } +} +#endif + +/************************************************** +*函数名称:void INT2_SetTriggerMode(uint8_t INT2x, INT_TriggerMode_Typedef TriggerMode) +*函数功能:INT2x中断触发方式配置函数 +*入口参数: +INT2x_Typedef:INT2x:INT2x选择 +INT_TriggerMode_Typedef:TriggerMode:中断触发方式选择 +*出口参数:void +**************************************************/ +void INT2_SetTriggerMode(uint8_t INT2x, + INT_TriggerMode_Typedef TriggerMode) +{ + switch(TriggerMode) + { + case INT_TRIGGER_RISE_ONLY: + INT2R |= INT2x; + INT2F &= (~INT2x); + break; + + case INT_TRIGGER_FALL_ONLY: + INT2R &= (~INT2x); + INT2F |= INT2x; + break; + + case INT_TRIGGER_RISE_FALL: + INT2R |= INT2x; + INT2F |= INT2x; + break; + + case INT_TRIGGER_DISABLE: + INT2R &= (~INT2x); + INT2F &= (~INT2x); + + default: + break; + } +} + +/***************************************************** +*函数名称:void INT0_ITConfig(FunctionalState NewState, PriorityStatus Priority) +*函数功能:INT0中断初始化 +*入口参数: +FunctionalState:NewState:中断使能/关闭选择 +PriorityStatus:Priority:中断优先级选择 +*出口参数:void +*****************************************************/ +void INT0_ITConfig(FunctionalState NewState, + PriorityStatus Priority) +{ + if(NewState != DISABLE) + { + IE |= 0X01; + } + else + { + IE &= (~0X01); + } + + if(Priority == LOW) + { + IP &= ~0X01; + } + else + { + IP |= 0X01; + } +} + +/***************************************************** +*函数名称:void INT1_ITConfig(FunctionalState NewState, PriorityStatus Priority) +*函数功能:INT1中断初始化 +*入口参数: +FunctionalState:NewState:中断使能/关闭选择 +PriorityStatus:Priority:中断优先级选择 +*出口参数:void +*****************************************************/ +void INT1_ITConfig(FunctionalState NewState, + PriorityStatus Priority) +{ + if(NewState != DISABLE) + { + IE |= 0X04; + } + else + { + IE &= (~0X04); + } + + if(Priority == LOW) + { + IP &= ~0X04; + } + else + { + IP |= 0X04; + } +} + +/***************************************************** +*函数名称:void INT2_ITConfig(FunctionalState NewState, PriorityStatus Priority) +*函数功能:INT0中断初始化 +*入口参数: +FunctionalState:NewState:中断使能/关闭选择 +PriorityStatus:Priority:中断优先级选择 +*出口参数:void +*****************************************************/ +void INT2_ITConfig(FunctionalState NewState, + PriorityStatus Priority) +{ + if(NewState != DISABLE) + { + IE1 |= 0X08; + } + else + { + IE1 &= (~0X08); + } + + if(Priority == LOW) + { + IP1 &= ~0X08; + } + else + { + IP1 |= 0X08; + } +} + +/******************* (C) COPYRIGHT 2021 SinOne Microelectronics *****END OF FILE****/ + diff --git a/Keil_C/FWLib/SC92F_Lib/src/sc92f_lpd.c b/Keil_C/FWLib/SC92F_Lib/src/sc92f_lpd.c new file mode 100644 index 0000000..c562f5c --- /dev/null +++ b/Keil_C/FWLib/SC92F_Lib/src/sc92f_lpd.c @@ -0,0 +1,94 @@ +//************************************************************ +// Copyright (c) 深圳市赛元微电子有限公司 +// 文件名称: sc92F_LPD.c +// 作者: 赛元应用团队 +// 模块功能: LPD固件库函数C文件 +// 最后更正日期: 2022年3月23日 +// 版本: V1.100002 +// 说明: 该文件仅适用于SC92L系列芯片 +//************************************************************* + +#include "sc92f_lpd.h" + +#if defined (SC92L853x) || defined (SC92L753x) + +/************************************************** +*函数名称:void USCI1_DeInit(void) +*函数功能:USCI1相关寄存器复位至缺省值 +*入口参数:void +*出口参数:void +**************************************************/ +void LPD_DeInit(void) +{ + /* 配置相关寄存器复位 */ + LPDCFG = 0x00; + /* 中断相关寄存器复位 */ + IE2 &= 0x7F; + IP2 &= 0x7F; +} + +/************************************************** +*函数名称:void LPD_VtripConfig(LPD_Vtrip_TypeDef LPD_Vtrip) +*函数功能:设置LPD门限电压阈值 +*入口参数: +LPD_Vtrip_TypeDef:LPD_Vtrip:LPD门限电压阈值 +*出口参数:void +**************************************************/ +void LPD_VtripConfig(LPD_Vtrip_TypeDef LPD_Vtrip) +{ + LPDCFG &= 0xF1; //复位门限电压阈值寄存器 + LPDCFG = LPD_Vtrip << 1; //设置门限电压阈值寄存器 +} + +/************************************************** +*函数名称:void LPD_Cmd(FunctionalState NewState) +*函数功能:使能LPD功能 +*入口参数: +FunctionalState:NewState:功能使能/失能 +*出口参数:void +**************************************************/ +void LPD_Cmd(FunctionalState NewState) +{ + if(NewState == ENABLE) + { + LPDCFG &= 0xFE; + } + else + { + LPDCFG |= 0x01; + } +} + +/***************************************************** +*函数名称:void LPD_ITConfig(FunctionalState NewState, PriorityStatus Priority) +*函数功能:LPD中断初始化 +*入口参数: +FunctionalState:NewState:中断使能/关闭选择 +PriorityStatus:Priority:中断优先级选择 +*出口参数:void +*****************************************************/ +void LPD_ITConfig(FunctionalState NewState, PriorityStatus Priority) +{ + /* 中断开关 */ + if (NewState != DISABLE) + { + IE2 |= 0x01; + } + else + { + IE2 &= 0xFE; + } + + /* 中断优先级 */ + if (Priority != LOW) + { + IP2 |= 0x01; + } + else + { + IP2 &= 0xFE; + } +} + + +#endif \ No newline at end of file diff --git a/Keil_C/FWLib/SC92F_Lib/src/sc92f_mdu.c b/Keil_C/FWLib/SC92F_Lib/src/sc92f_mdu.c new file mode 100644 index 0000000..0301ee8 --- /dev/null +++ b/Keil_C/FWLib/SC92F_Lib/src/sc92f_mdu.c @@ -0,0 +1,132 @@ +//************************************************************ +// Copyright (c) 深圳市赛元微电子有限公司 +// 文件名称 : sc92f_mdu.c +// 作者 : +// 模块功能 : MDU固件库函数C文件 +// 局部函数列表: +// 最后更正日期: 2022/01/24 +// 版本 : V1.10001 +// 说明 : +//************************************************************* + +#include "sc92f_mdu.h" + +#if defined (SC92F854x) || defined (SC92F754x) || defined (SC92F844xB) || defined (SC92F744xB) || defined (SC92F84Ax_2) || defined (SC92F74Ax_2)\ + || defined (SC92F846xB) || defined (SC92F746xB) || defined (SC92F836xB) || defined (SC92F736xB) || defined (SC92F848x) || defined (SC92F748x)\ + || defined (SC92F859x) || defined (SC92F759x) || defined (SC92L853x) || defined (SC92L753x) +/************************************************** +*函数名称:void MDU_DeInit(void) +*函数功能:MDU相关寄存器复位至缺省值 +*入口参数:void +*出口参数:void +**************************************************/ +void MDU_DeInit(void) +{ + OPERCON &= 0X3F; + EXA0 = 0X00; + EXA1 = 0X00; + EXA2 = 0X00; + EXA3 = 0X00; + EXBL = 0X00; + EXBH = 0X00; +} + +/************************************************** +*函数名称:void MDU_MultiplicationConfig(uint16_t Multiplicand, uint16_t Multiplier) +*函数功能:MDU乘法运算配置函数 +*入口参数: +uint32_t:Multiplicand:被乘数 +uint32_t:Multiplier:乘数 +*出口参数:void +**************************************************/ +void MDU_MultiplicationConfig(uint16_t + Multiplicand, uint16_t Multiplier) +{ + OPERCON &= 0XBF; + EXBL = Multiplier ; + EXBH = Multiplier >> 8; + EXA0 = Multiplicand ; + EXA1 = Multiplicand >> 8; +} + +/************************************************** +*函数名称:void MDU_DivisionConfig(uint32_t Dividend, uint16_t Divisor) +*函数功能:MDU除法运算配置函数 +*入口参数: +uint32_t:Dividend:被除数 +uint32_t:Divisor:除数 +*出口参数:void +**************************************************/ +void MDU_DivisionConfig(uint32_t Dividend, + uint16_t Divisor) +{ + MDU_Temp_Union MDU_DivisionTemp; + MDU_DivisionTemp.MDU_Temp = Dividend; + OPERCON |= 0X40; + EXA0 = MDU_DivisionTemp.MDU_EXAxReg.MDU_EXA0Reg; + EXA1 = MDU_DivisionTemp.MDU_EXAxReg.MDU_EXA1Reg; + EXA2 = MDU_DivisionTemp.MDU_EXAxReg.MDU_EXA2Reg; + EXA3 = MDU_DivisionTemp.MDU_EXAxReg.MDU_EXA3Reg; + EXBL = Divisor; + EXBH = Divisor >> 8; +} + +/************************************************** +*函数名称:void MDU_StartOperation(void) +*函数功能:MDU启动一次运算 +*入口参数:void +*出口参数:void +**************************************************/ +void MDU_StartOperation(void) +{ + OPERCON |= 0x80; + + while(OPERCON & 0x80); +} + +/************************************************** +*函数名称:uint32_t MDU_GetProduct(void) +*函数功能:获取乘积 +*入口参数:void +*出口参数:uint32_t:乘积 +**************************************************/ +uint32_t MDU_GetProduct(void) +{ + MDU_Temp_Union MDU_ProductTemp; + MDU_ProductTemp.MDU_EXAxReg.MDU_EXA0Reg = EXA0; + MDU_ProductTemp.MDU_EXAxReg.MDU_EXA1Reg = EXA1; + MDU_ProductTemp.MDU_EXAxReg.MDU_EXA2Reg = EXA2; + MDU_ProductTemp.MDU_EXAxReg.MDU_EXA3Reg = EXA3; + return MDU_ProductTemp.MDU_Temp; +} + +/************************************************** +*函数名称:uint32_t MDU_GetQuotient(void) +*函数功能:获取商 +*入口参数:void +*出口参数:uint32_t:商 +**************************************************/ +uint32_t MDU_GetQuotient(void) +{ + MDU_Temp_Union MDU_QuotientTemp; + MDU_QuotientTemp.MDU_EXAxReg.MDU_EXA0Reg = EXA0; + MDU_QuotientTemp.MDU_EXAxReg.MDU_EXA1Reg = EXA1; + MDU_QuotientTemp.MDU_EXAxReg.MDU_EXA2Reg = EXA2; + MDU_QuotientTemp.MDU_EXAxReg.MDU_EXA3Reg = EXA3; + return MDU_QuotientTemp.MDU_Temp; +} + +/************************************************** +*函数名称:uint16_t MDU_GetRemainder(void) +*函数功能:获取余数 +*入口参数:void +*出口参数:uint16_t:余数 +**************************************************/ +uint16_t MDU_GetRemainder(void) +{ + uint16_t MDU_RemainderTemp; + MDU_RemainderTemp = EXBH * 256 + EXBL; + return MDU_RemainderTemp; +} +#endif +/******************* (C) COPYRIGHT 2020 SinOne Microelectronics *****END OF FILE****/ \ No newline at end of file diff --git a/Keil_C/FWLib/SC92F_Lib/src/sc92f_option.c b/Keil_C/FWLib/SC92F_Lib/src/sc92f_option.c new file mode 100644 index 0000000..f93b338 --- /dev/null +++ b/Keil_C/FWLib/SC92F_Lib/src/sc92f_option.c @@ -0,0 +1,178 @@ +//************************************************************ +// Copyright (c) 深圳市赛元微电子有限公司 +// 文件名称 : sc92f_option.c +// 作者 : +// 模块功能 : Customer Option寄存器配置C文件 +// 局部函数列表: +// 最后更正日期: 2022/01/24 +// 版本 : V1.0005 +// 说明 : +//************************************************************* + +#include "sc92f_option.h" + +/***************************************************** +*函数名称:void OPTION_WDT_Cmd(FunctionalState NewState) +*函数功能:WDT功能开关函数 +*入口参数: +FunctionalState:NewState:功能启动/关闭选择 +*出口参数:void +*****************************************************/ +void OPTION_WDT_Cmd(FunctionalState NewState) +{ + OPINX = 0XC1; + + if(NewState == DISABLE) + { + OPREG &= 0X7F; + } + else + { + OPREG |= 0X80; + } +} + +/***************************************************** +*函数名称:void OPTION_XTIPLL_Cmd(FunctionalState NewState) +*函数功能:外接晶振使能 +*入口参数: +FunctionalState:NewState:启动/关闭选择 +*出口参数:void +*****************************************************/ +#if !defined(SC92F848x) && !defined(SC92F748x) +void OPTION_XTIPLL_Cmd(FunctionalState NewState) +{ + OPINX = 0XC1; + + if(NewState == DISABLE) + { + OPREG &= 0XBF; + } + else + { + OPREG |= 0X40; + } +} +#endif +/***************************************************** +*函数名称:void OPTION_SYSCLK_Init(SYSCLK_PresSel_TypeDef SYSCLK_PresSel) +*函数功能:系统时钟分频初始化 +*入口参数: +SYSCLK_PresSel_TypeDef:SYSCLK_PresSel:选择系统时钟分频 +*出口参数:void +*****************************************************/ +void OPTION_SYSCLK_Init(SYSCLK_PresSel_TypeDef + SYSCLK_PresSel) +{ + OPINX = 0XC1; + OPREG = OPREG & 0XCF | SYSCLK_PresSel; +} + +/***************************************************** +*函数名称:void OPTION_RST_PIN_Cmd(FunctionalState NewState) +*函数功能:外部复位管脚(P17)使能 +*入口参数: +FunctionalState:NewState:使能/关闭选择 +*出口参数:void +*****************************************************/ +#if !defined(SC92F848x) && !defined(SC92F748x) && !defined(SC92F859x) && !defined (SC92F759x) && !defined(SC92L853x) && !defined (SC92L753x) +void OPTION_RST_PIN_Cmd(FunctionalState NewState) +{ + OPINX = 0XC1; + + if(NewState == DISABLE) + { + OPREG |= 0X08; + } + else + { + OPREG &= 0XF7; + } +} +#endif + +/***************************************************** +*函数名称:void OPTION_LVR_Init(LVR_Config_TypeDef LVR_Config) +*函数功能:LVR 电压选择 +*入口参数: +LVR_Config_TypeDef:LVR_Config:选择LVR电压 +*出口参数:void +*****************************************************/ +void OPTION_LVR_Init(LVR_Config_TypeDef + LVR_Config) +{ + OPINX = 0XC1; + OPREG = OPREG & 0XF8 | LVR_Config; +} + +/***************************************************** +*函数名称:void OPTION_ADC_VrefConfig(ADC_Vref_TypeDef ADC_Vref) +*函数功能:ADC 参考电压选择 +*入口参数: +ADC_Vref_TypeDef:ADC_Vref:选择ADC参考电压 +*出口参数:void +*****************************************************/ +void OPTION_ADC_VrefConfig(ADC_Vref_TypeDef + ADC_Vref) +{ + OPINX = 0xC2; + OPREG = OPREG & 0X7F | ADC_Vref; +} + +/************************************************** +*函数名称:void OPTION_IAP_SetOperateRange(IAP_OperateRange_TypeDef IAP_OperateRange) +*函数功能:允许IAP操作的范围设置 +*入口参数: +IAP_OperateRange_TypeDef:IAP_OperateRange:IAP操作范围 +*出口参数:void +**************************************************/ +void OPTION_IAP_SetOperateRange( + IAP_OperateRange_TypeDef IAP_OperateRange) +{ + OPINX = 0xC2; + OPREG = (OPREG & 0xF3) | IAP_OperateRange; +} + +#if defined (SC92F846xB) || defined (SC92F746xB) || defined (SC92F836xB) || defined (SC92F736xB)|| defined (SC92F83Ax)\ + || defined (SC92F73Ax) || defined (SC92F84Ax) || defined (SC92F74Ax) || defined (SC92F740x)\ + || defined (SC92F8003) || defined (SC92F7003) +/***************************************************** +*函数名称:void OPTION_XTIPLL_SetRange(XTIPLL_Range_TypeDef XTIPLL_Range) +*函数功能:外部高频晶振频率范围 +*入口参数: +XTIPLL_Range_TypeDef:XTIPLL_Range:外部晶振频率选择 +*出口参数:void +*****************************************************/ +void OPTION_XTIPLL_SetRange(XTIPLL_Range_TypeDef + XTIPLL_Range) +{ + OPINX = 0XC2; + OPREG = OPREG & 0XBF | XTIPLL_Range; +} +#endif + +#if defined (SC92F742x)||defined (SC92F83Ax) || defined (SC92F73Ax)|| defined (SC92F84Ax) || defined (SC92F74Ax) \ + ||defined (SC92F74Ax_2)||defined (SC92F84Ax_2)||defined (SC92F844xB)||defined (SC92F744xB) \ + ||defined (SC92F859x) || defined (SC92F759x) ||defined (SC92F848x) || defined (SC92F748x) || defined (SC92L853x) || defined (SC92L753x) +/************************************************** +*函数名称:void OPTION_JTG_Cmd(FunctionalState NewState) +*函数功能:JTAG模式使能开关 +*入口参数: +FunctionalState:NewState:功能启动/关闭选择 +*出口参数:void +**************************************************/ +void OPTION_JTG_Cmd(FunctionalState NewState) +{ + OPINX = 0xC2; + + if(NewState == DISABLE) + { + OPREG |= 0X10; //1 JTAG无效 + } + else + { + OPREG &= 0XEF; //0 JTAG有效 + } +} +#endif +/******************* (C) COPYRIGHT 2020 SinOne Microelectronics *****END OF FILE****/ \ No newline at end of file diff --git a/Keil_C/FWLib/SC92F_Lib/src/sc92f_pwm.c b/Keil_C/FWLib/SC92F_Lib/src/sc92f_pwm.c new file mode 100644 index 0000000..8d2e174 --- /dev/null +++ b/Keil_C/FWLib/SC92F_Lib/src/sc92f_pwm.c @@ -0,0 +1,2086 @@ +//************************************************************ +// Copyright (c) 深圳市赛元微电子有限公司 +// 文件名称 : sc92f_pwm.c +// 作者 : +// 模块功能 : PWM固件库函数C文件 +// 局部函数列表: +// 最后更正日期: 2022年6月2日 +// 版本 : V1.10004 +// 说明 :本文件仅适用于赛元92F/93F/92L系列单片机 +//************************************************************* + +#include "sc92f_pwm.h" + +#if defined (SC92F854x) || defined (SC92F754x) ||defined (SC92F844xB) || defined (SC92F744xB)||defined (SC92F84Ax_2) || defined (SC92F74Ax_2)\ +||defined (SC92F859x) || defined (SC92F759x) +uint16_t xdata PWMREG[8] _at_ +0x740; //PWM占空比调节寄存器 +uint16_t pwm_tmpreg[8] = {0, 0, 0, 0, 0, 0, 0, 0}; //PWM占空比调节寄存器缓存数组 + +/************************************************** +*函数名称:void PWM_DeInit(void) +*函数功能:PWM相关寄存器复位至缺省值 +*入口参数:void +*出口参数:void +**************************************************/ +void PWM_DeInit(void) +{ + static uint8_t i; + PWMCFG = 0X00; + PWMCON = 0X00; + IE1 &= 0XFD; + IP1 &= 0XFD; + + for(i = 0; i < 8; i++) + { + PWMREG[i] = 0; + } +} + +/************************************************** +*函数名称:void PWM_Init(PWM_PresSel_TypeDef PWM_PresSel, uint16_t PWM_Period) +*函数功能:PWM初始化配置函数 +*入口参数: +PWM_PresSel_TypeDef:PWM_PresSel:预分频选择 +uint16_t:PWM_Period:PWM周期配置 +*出口参数:void +**************************************************/ +void PWM_Init(PWM_PresSel_TypeDef PWM_PresSel, + uint16_t PWM_Period) +{ + PWM_Period -= 1; + PWMCFG = (PWMCFG & 0XCF) | + PWM_PresSel; //预分频 + PWMCFG = (PWMCFG & 0XF0) | (uint8_t)( + PWM_Period / 256); //周期高4位 + PWMCON = (uint8_t)(PWM_Period & + 0X00FF); //周期低8位 +} + +/************************************************** +*函数名称:void PWM_OutputStateConfig(uint8_t PWM_OutputPin, PWM_OutputState_TypeDef PWM_OutputState) +*函数功能:PWMx输出使能/失能配置函数 +*入口参数: +uint8_t:PWM_OutputPin:PWMx选择 +PWM_OutputState_TypeDef:PWM_OutputState:PWM输出状态配置 +*出口参数:void +**************************************************/ +void PWM_OutputStateConfig(uint8_t PWM_OutputPin, + PWM_OutputState_TypeDef PWM_OutputState) +{ + uint8_t i; + + for(i = 0; i < 8; i++) + { + if(PWM_OutputPin & (0x01 << i)) + { + if(PWM_OutputState == PWM_OUTPUTSTATE_DISABLE) + { + pwm_tmpreg[i] &= 0X7FFF; + } + else + { + pwm_tmpreg[i] |= 0X8000; + } + + PWMREG[i] = pwm_tmpreg[i]; + } + } +} + + +/************************************************** +*函数名称:void PWM_PolarityConfig(uint8_t PWM_OutputPin, PWM_Polarity_TypeDef PWM_Polarity) +*函数功能:PWMx正/反向输出配置函数 +*入口参数: +uint8_t:PWM_OutputPin:PWMx选择 +PWM_Polarity_TypeDef:PWM_Polarity:PWM输出正/反向配置 +*出口参数:void +**************************************************/ +void PWM_PolarityConfig(uint8_t PWM_OutputPin, + PWM_Polarity_TypeDef PWM_Polarity) +{ + uint8_t i; + + for(i = 0; i < 8; i++) + { + if(PWM_OutputPin & (0x01 << i)) + { + if(PWM_Polarity == PWM_POLARITY_NON_INVERT) + { + pwm_tmpreg[i] &= 0XBFFF; + } + else + { + pwm_tmpreg[i] |= 0X4000; + } + + PWMREG[i] = pwm_tmpreg[i]; + } + } +} +/************************************************** +*函数名称:void PWM_IndependentModeConfig(PWM_OutputPin_TypeDef PWM_OutputPin, uint16_t PWM_DutyCycle) +*函数功能:PWMx独立工作模式配置函数 +*入口参数: +PWM_OutputPin_TypeDef:PWM_OutputPin:PWMx独立通道选择 +uint16_t:PWM_DutyCycle:PWM占空比配置 +*出口参数:void +**************************************************/ +void PWM_IndependentModeConfig(PWM_OutputPin_TypeDef PWM_OutputPin, + uint16_t PWM_DutyCycle) +{ + uint8_t i; + + for(i = 0; i < 8; i++) + { + if(PWM_OutputPin & (0x01 << i)) + { + pwm_tmpreg[i] = pwm_tmpreg[i] & 0XF000 | + PWM_DutyCycle; + PWMREG[i] = pwm_tmpreg[i]; + } + } +} + +/***************************************************** +*函数名称:void PWM_Cmd(FunctionalState NewState) +*函数功能:PWM功能开关函数 +*入口参数: +FunctionalState:NewState:功能启动/关闭选择 +*出口参数:void +*****************************************************/ +void PWM_Cmd(FunctionalState NewState) +{ + if (NewState != DISABLE) + { + PWMCFG |= 0X80; + } + else + { + PWMCFG &= 0X7F; + } +} + +/***************************************************** +*函数名称:void PWM_ITConfig(FunctionalState NewState, PriorityStatus Priority) +*函数功能:PWM中断初始化 +*入口参数: +FunctionalState:NewState:中断使能/关闭选择 +PriorityStatus:Priority:中断优先级选择 +*出口参数:void +*****************************************************/ +void PWM_ITConfig(FunctionalState NewState, + PriorityStatus Priority) +{ + if (NewState != DISABLE) + { + IE1 |= 0X02; + } + else + { + IE1 &= 0XFD; + } + + if(Priority == LOW) + { + IP1 &= ~0X02; + } + else + { + IP1 |= 0X02; + } +} + +/***************************************************** +*函数名称:FlagStatus PWM_GetFlagStatus(void) +*函数功能:获得PWM中断标志状态 +*入口参数:void +*出口参数: +FlagStatus:PWM中断标志状态 +*****************************************************/ +FlagStatus PWM_GetFlagStatus(void) +{ + return (bool)(PWMCFG & 0X40); +} + +/***************************************************** +*函数名称:void PWM_ClearFlag(void) +*函数功能:清除PWM中断标志状态 +*入口参数:void +*出口参数:void +*****************************************************/ +void PWM_ClearFlag(void) +{ + PWMCFG &= 0XBF; +} +#endif + +#if defined (SC92F846xB) || defined (SC92F746xB) || defined (SC92F836xB) || defined (SC92F736xB)|| defined (SC92F83Ax) || defined (SC92F73Ax)|| defined (SC92F84Ax) || defined (SC92F74Ax) || defined (SC92F848x) || defined (SC92F748x) +/************************************************** +*函数名称:void PWM_DeInit(void) +*函数功能:PWM相关寄存器复位至缺省值 +*入口参数:void +*出口参数:void +**************************************************/ +void PWM_DeInit(void) +{ + PWMCFG = 0X00; + PWMCON = 0X00; + PWMPRD = 0X00; + PWMDTYA = 0X00; + PWMDTY0 = 0X00; + PWMDTY1 = 0X00; + PWMDTY2 = 0X00; + PWMDTYB = 0X00; + PWMDTY3 = 0X00; + PWMDTY4 = 0X00; + PWMDTY5 = 0X00; + IE1 &= ~0X02; + IP1 &= ~0X02; +} + +/************************************************** +*函数名称:void PWM_Init(PWM_PresSel_TypeDef PWM_PresSel, uint16_t PWM_Period) +*函数功能:PWM初始化配置函数 +*入口参数: +PWM_PresSel_TypeDef:PWM_PresSel:预分频选择 +uint16_t:PWM_Period:PWM周期配置 +*出口参数:void +**************************************************/ +void PWM_Init(PWM_PresSel_TypeDef PWM_PresSel, + uint16_t PWM_Period) +{ + PWM_Period -= 1; + PWMCFG = (PWMCFG & 0X3F) | (PWM_PresSel << 6); //预分频 + PWMDTYA = (PWMDTYA & 0X3F) | ((uint8_t)( PWM_Period % 4) << 6); //周期低两位 + PWMPRD = (uint8_t)(PWM_Period >> 2); //周期高八位 +} + +/************************************************** +*函数名称:void PWM_OutputStateConfig(uint8_t PWM_OutputPin, PWM_OutputState_TypeDef PWM_OutputState) +*函数功能:PWMx输出使能/失能配置函数 +*入口参数: +PWM_OutputPin_TypeDef:PWM_OutputPin:PWMx选择 +PWM_OutputState_TypeDef:PWM_OutputState:PWM输出状态配置 +*出口参数:void +**************************************************/ +void PWM_OutputStateConfig(uint8_t PWM_OutputPin, + PWM_OutputState_TypeDef PWM_OutputState) +{ + if(PWM_OutputState == PWM_OUTPUTSTATE_ENABLE) + { + PWMCON |= PWM_OutputPin; + } + else + { + PWMCON &= (~PWM_OutputPin); + } +} + +/************************************************** +*函数名称:void PWM_PolarityConfig(uint8_t PWM_OutputPin, PWM_Polarity_TypeDef PWM_Polarity) +*函数功能:PWMx正/反向输出配置函数 +*入口参数: +PWM_OutputPin_TypeDef:PWM_OutputPin:PWMx选择 +PWM_Polarity_TypeDef:PWM_Polarity:PWM输出正/反向配置 +*出口参数:void +**************************************************/ +void PWM_PolarityConfig(uint8_t PWM_OutputPin, + PWM_Polarity_TypeDef PWM_Polarity) +{ + if(PWM_Polarity == PWM_POLARITY_INVERT) + { + PWMCFG |= PWM_OutputPin; + } + else + { + PWMCFG &= (~PWM_OutputPin); + } +} + +/************************************************** +*函数名称:void PWM_IndependentModeConfig(PWM_OutputPin_TypeDef PWM_OutputPin, uint16_t PWM_DutyCycle) +*函数功能:PWMx独立工作模式配置函数 +*入口参数: +PWM_OutputPin_TypeDef:PWM_OutputPin:PWMx独立通道选择 +uint16_t:PWM_DutyCycle:PWM占空比配置 +*出口参数:void +**************************************************/ +void PWM_IndependentModeConfig(PWM_OutputPin_TypeDef PWM_OutputPin, + uint16_t PWM_DutyCycle) +{ + PWMDTYB &= 0X7F; //设置PWM为独立模式 + + switch(PWM_OutputPin) //设置占空比 + { + case PWM0: + PWMDTYA = PWMDTYA & 0xfc | (PWM_DutyCycle % 4); + PWMDTY0 = (uint8_t)(PWM_DutyCycle >> 2); + break; + + case PWM1: + PWMDTYA = PWMDTYA & 0xf3 | ((PWM_DutyCycle % 4) << + 2); + PWMDTY1 = (uint8_t)(PWM_DutyCycle >> 2); + break; + + case PWM2: + PWMDTYA = PWMDTYA & 0xcf | ((PWM_DutyCycle % 4) << + 4); + PWMDTY2 = (uint8_t)(PWM_DutyCycle >> 2); + break; + + case PWM3: + PWMDTYB = PWMDTYB & 0xfc | (PWM_DutyCycle % 4); + PWMDTY3 = (uint8_t)(PWM_DutyCycle >> 2); + break; + + case PWM4: + PWMDTYB = PWMDTYB & 0xf3 | ((PWM_DutyCycle % 4) << + 2); + PWMDTY4 = (uint8_t)(PWM_DutyCycle >> 2); + break; + + case PWM5: + PWMDTYB = PWMDTYB & 0xcf | ((PWM_DutyCycle % 4) << + 4); + PWMDTY5 = (uint8_t)(PWM_DutyCycle >> 2); + break; + + default: + break; + } +} + +/************************************************** +*函数名称:void PWM_ComplementaryModeConfig(PWM_ComplementaryOutputPin_TypeDef PWM_ComplementaryOutputPin, uint16_t PWM_DutyCycle) +*函数功能:PWMxPWMy互补工作模式配置函数 +*入口参数: +PWM_ComplementaryOutputPin_TypeDef:PWM_ComplementaryOutputPin:PWMxPWMy互补通道选择 +uint16_t:PWM_DutyCycle:PWM占空比配置 +*出口参数:void +**************************************************/ +void PWM_ComplementaryModeConfig(PWM_ComplementaryOutputPin_TypeDef PWM_ComplementaryOutputPin, + uint16_t PWM_DutyCycle) +{ + PWMDTYB |= 0X80; //设置PWM为互补模式 + + switch(PWM_ComplementaryOutputPin) //设置占空比 + { + case PWM0PWM3: + PWMDTYA = PWMDTYA & 0xfc | (PWM_DutyCycle % 4); + PWMDTY0 = (uint8_t)(PWM_DutyCycle >> 2); + break; + + case PWM1PWM4: + PWMDTYA = PWMDTYA & 0xf3 | ((PWM_DutyCycle % 4) << + 2); + PWMDTY1 = (uint8_t)(PWM_DutyCycle >> 2); + break; + + case PWM2PWM5: + PWMDTYA = PWMDTYA & 0xcf | ((PWM_DutyCycle % 4) << + 4); + PWMDTY2 = (uint8_t)(PWM_DutyCycle >> 2); + break; + + default: + break; + } +} + +/************************************************** +*函数名称:void PWM_DeadTimeConfig(uint8_t PWM012_RisingDeadTime, uint8_t PWM345_fallingDeadTime) +*函数功能:PWM互补工作模式下死区时间配置函数 +*入口参数: +uint8_t:PWM012_RisingDeadTime:PWM死区上升时间 +uint8_t:PWM345_fallingDeadTime:PWM死区下降时间 +*出口参数:void +**************************************************/ +void PWM_DeadTimeConfig(uint8_t PWM012_RisingDeadTime, + uint8_t PWM345_fallingDeadTime) +{ + PWMDTY3 = (PWM012_RisingDeadTime | + (PWM345_fallingDeadTime << 4)); +} + +/***************************************************** +*函数名称:void PWM_Cmd(FunctionalState NewState) +*函数功能:PWM功能开关函数 +*入口参数: +FunctionalState:NewState:功能启动/关闭选择 +*出口参数:void +*****************************************************/ +void PWM_Cmd(FunctionalState NewState) +{ + if (NewState != DISABLE) + { + PWMCON |= 0X80; + } + else + { + PWMCON &= ~0X80; + } +} + +/***************************************************** +*函数名称:void PWM_ITConfig(FunctionalState NewState, PriorityStatus Priority) +*函数功能:PWM中断初始化 +*入口参数: +FunctionalState:NewState:中断使能/关闭选择 +PriorityStatus:Priority:中断优先级选择 +*出口参数:void +*****************************************************/ +void PWM_ITConfig(FunctionalState NewState, + PriorityStatus Priority) +{ + if (NewState != DISABLE) + { + IE1 |= 0X02; + } + else + { + IE1 &= 0XFD; + } + + if(Priority == LOW) + { + IP1 &= 0XFD; + } + else + { + IP1 |= 0X02; + } +} + +/***************************************************** +*函数名称:FlagStatus PWM_GetFlagStatus(void) +*函数功能:获得PWM中断标志状态 +*入口参数:void +*出口参数: +FlagStatus:PWM中断标志状态 +*****************************************************/ +FlagStatus PWM_GetFlagStatus(void) +{ + return (bool)(PWMCON & 0X40); +} + +/***************************************************** +*函数名称:void PWM_ClearFlag(void) +*函数功能:清除PWM中断标志状态 +*入口参数:void +*出口参数:void +*****************************************************/ +void PWM_ClearFlag(void) +{ + PWMCON &= 0XBF; +} +#endif + +#if defined (SC92F7003) || defined (SC92F8003) || defined (SC92F740x) +/************************************************** +*函数名称:void PWM_DeInit(void) +*函数功能:PWM相关寄存器复位至缺省值 +*入口参数:void +*出口参数:void +**************************************************/ +void PWM_DeInit(void) +{ + PWMCFG = 0X00; + PWMCON0 = 0X00; + PWMPRD = 0X00; + PWMDTYA = 0X00; + PWMDTY0 = 0X00; + PWMDTY1 = 0X00; + PWMDTY2 = 0X00; + PWMCON1 = 0X00; + PWMDTYB = 0X00; + PWMDTY3 = 0X00; + PWMDTY4 = 0X00; + PWMDTY5 = 0X00; + PWMDTY6 = 0X00; + IE1 &= 0XFD; + IP1 &= 0XFD; +} + +/************************************************** +*函数名称:void PWM_Init(PWM_PresSel_TypeDef PWM_PresSel, uint16_t PWM_Period) +*函数功能:PWM初始化配置函数 +*入口参数: +PWM_PresSel_TypeDef:PWM_PresSel:预分频选择 +uint16_t:PWM_Period:PWM周期配置 +*出口参数:void +**************************************************/ +void PWM_Init(PWM_PresSel_TypeDef PWM_PresSel, + uint16_t PWM_Period) +{ + PWM_Period -= 1; + PWMCON0 = (PWMCON0 & 0XCC) | PWM_PresSel | + (uint8_t)(PWM_Period & + 0X0003); //预分频及周期的低2位 + PWMPRD = (uint8_t)(PWM_Period >> + 2); //周期高八位 +} + +/************************************************** +*函数名称:void PWM_OutputStateConfig(uint8_t PWM_OutputPin, PWM_OutputState_TypeDef PWM_OutputState) +*函数功能:PWMx输出使能/失能配置函数 +*入口参数: +PWM_OutputPin_TypeDef:PWM_OutputPin:PWMx选择 +PWM_OutputState_TypeDef:PWM_OutputState:PWM输出状态配置 +*出口参数:void +**************************************************/ +void PWM_OutputStateConfig(uint8_t PWM_OutputPin, + PWM_OutputState_TypeDef PWM_OutputState) +{ + if(PWM_OutputState == PWM_OUTPUTSTATE_ENABLE) + { + PWMCON1 |= PWM_OutputPin; + } + else + { + PWMCON1 &= (~PWM_OutputPin); + } +} + +/************************************************** +*函数名称:void PWM_PWM2Selection(PWM2_OutputPin_TypeDef PWM2_OutputPin) +*函数功能:PWM2管脚选择函数 +*入口参数: +PWM2_OutputPin_TypeDef:PWM2_OutputPin:PWM2管脚选择 +*出口参数:void +**************************************************/ +void PWM_PWM2Selection(PWM2_OutputPin_TypeDef + PWM2_OutputPin) +{ + PWMCON0 = PWMCON0 & 0XFB | PWM2_OutputPin; +} + +/************************************************** +*函数名称:void PWM_PWM5Selection(PWM5_OutputPin_TypeDef PWM5_OutputPin) +*函数功能:PWM5管脚选择函数 +*入口参数: +PWM5_OutputPin_TypeDef:PWM5_OutputPin:PWM5管脚选择 +*出口参数:void +**************************************************/ +void PWM_PWM5Selection(PWM5_OutputPin_TypeDef + PWM5_OutputPin) +{ + PWMCON0 = PWMCON0 & 0XF7 | PWM5_OutputPin; +} + +/************************************************** +*函数名称:void PWM_PolarityConfig(uint8_t PWM_OutputPin, PWM_Polarity_TypeDef PWM_Polarity) +*函数功能:PWMx正/反向输出配置函数 +*入口参数: +PWM_OutputPin_TypeDef:PWM_OutputPin:PWMx选择 +PWM_Polarity_TypeDef:PWM_Polarity:PWM输出正/反向配置 +*出口参数:void +**************************************************/ +void PWM_PolarityConfig(uint8_t PWM_OutputPin, + PWM_Polarity_TypeDef PWM_Polarity) +{ + if(PWM_Polarity == PWM_POLARITY_INVERT) + { + PWMCFG |= PWM_OutputPin; + } + else + { + PWMCFG &= (~PWM_OutputPin); + } +} + +/************************************************** +*函数名称:void PWM_IndependentModeConfig(PWM_OutputPin_TypeDef PWM_OutputPin, uint16_t PWM_DutyCycle) +*函数功能:PWMx独立工作模式配置函数 +*入口参数: +PWM_OutputPin_TypeDef:PWM_OutputPin:PWMx独立通道选择 +uint16_t:PWM_DutyCycle:PWM占空比配置 +*出口参数:void +**************************************************/ +void PWM_IndependentModeConfig(PWM_OutputPin_TypeDef PWM_OutputPin, + uint16_t PWM_DutyCycle) +{ + if(PWM_OutputPin != PWM6) + { + PWMCON1 &= 0X7F; //设置PWM为独立模式 + } + + switch(PWM_OutputPin) //设置占空比 + { + case PWM0: + PWMDTYA = PWMDTYA & 0XFC | (PWM_DutyCycle % 4); + PWMDTY0 = (uint8_t)(PWM_DutyCycle >> 2); + break; + + case PWM1: + PWMDTYA = PWMDTYA & 0XF3 | ((PWM_DutyCycle % 4) << + 2); + PWMDTY1 = (uint8_t)(PWM_DutyCycle >> 2); + break; + + case PWM2: + PWMDTYA = PWMDTYA & 0XCF | ((PWM_DutyCycle % 4) << + 4); + PWMDTY2 = (uint8_t)(PWM_DutyCycle >> 2); + break; + + case PWM3: + PWMDTYA = PWMDTYA & 0X3F | ((PWM_DutyCycle % 4) << + 6); + PWMDTY3 = (uint8_t)(PWM_DutyCycle >> 2); + break; + + case PWM4: + PWMDTYB = PWMDTYB & 0XFC | (PWM_DutyCycle % 4); + PWMDTY4 = (uint8_t)(PWM_DutyCycle >> 2); + break; + + case PWM5: + PWMDTYB = PWMDTYB & 0XF3 | ((PWM_DutyCycle % 4) << + 2); + PWMDTY5 = (uint8_t)(PWM_DutyCycle >> 2); + break; + + case PWM6: + PWMDTYB = PWMDTYB & 0XCF | ((PWM_DutyCycle % 4) << + 4); + PWMDTY6 = (uint8_t)(PWM_DutyCycle >> 2); + break; + + default: + break; + } +} + +/************************************************** +*函数名称:void PWM_ComplementaryModeConfig(PWM_ComplementaryOutputPin_TypeDef PWM_ComplementaryOutputPin, uint16_t PWM_DutyCycle) +*函数功能:PWMxPWMy互补工作模式配置函数 +*入口参数: +PWM_ComplementaryOutputPin_TypeDef:PWM_ComplementaryOutputPin:PWMxPWMy互补通道选择 +uint16_t:PWM_DutyCycle:PWM占空比配置 +*出口参数:void +**************************************************/ +void PWM_ComplementaryModeConfig(PWM_ComplementaryOutputPin_TypeDef PWM_ComplementaryOutputPin, + uint16_t PWM_DutyCycle) +{ + PWMCON1 |= 0X80; //设置PWM为互补模式 + + switch(PWM_ComplementaryOutputPin) //设置占空比 + { + case PWM0PWM3: + PWMDTYA = PWMDTYA & 0XFC | (PWM_DutyCycle % 4); + PWMDTY0 = (uint8_t)(PWM_DutyCycle >> 2); + break; + + case PWM1PWM4: + PWMDTYA = PWMDTYA & 0XF3 | ((PWM_DutyCycle % 4) << + 2); + PWMDTY1 = (uint8_t)(PWM_DutyCycle >> 2); + break; + + case PWM2PWM5: + PWMDTYA = PWMDTYA & 0XCF | ((PWM_DutyCycle % 4) << + 4); + PWMDTY2 = (uint8_t)(PWM_DutyCycle >> 2); + break; + + default: + break; + } +} + +/************************************************** +*函数名称:void PWM_DeadTimeConfig(uint8_t PWM012_RisingDeadTime, uint8_t PWM345_fallingDeadTime) +*函数功能:PWM互补工作模式下死区时间配置函数 +*入口参数: +uint8_t:PWM012_RisingDeadTime:PWM死区上升时间 +uint8_t:PWM345_fallingDeadTime:PWM死区下降时间 +*出口参数:void +**************************************************/ +void PWM_DeadTimeConfig(uint8_t + PWM012_RisingDeadTime, + uint8_t PWM345_fallingDeadTime) +{ + PWMDTY3 = (PWM012_RisingDeadTime | + (PWM345_fallingDeadTime << 4)); +} + +/***************************************************** +*函数名称:void PWM_Cmd(FunctionalState NewState) +*函数功能:PWM功能开关函数 +*入口参数: +FunctionalState:NewState:功能启动/关闭选择 +*出口参数:void +*****************************************************/ +void PWM_Cmd(FunctionalState NewState) +{ + if (NewState != DISABLE) + { + PWMCON0 |= 0X80; + } + else + { + PWMCON0 &= ~0X80; + } +} + +/***************************************************** +*函数名称:void PWM_ITConfig(FunctionalState NewState, PriorityStatus Priority) +*函数功能:PWM中断初始化 +*入口参数: +FunctionalState:NewState:中断使能/关闭选择 +PriorityStatus:Priority:中断优先级选择 +*出口参数:void +*****************************************************/ +void PWM_ITConfig(FunctionalState NewState, + PriorityStatus Priority) +{ + if (NewState != DISABLE) + { + IE1 |= 0X02; + } + else + { + IE1 &= 0XFD; + } + + if(Priority == LOW) + { + IP1 &= 0XFD; + } + else + { + IP1 |= 0X02; + } +} + +/***************************************************** +*函数名称:FlagStatus PWM_GetFlagStatus(void) +*函数功能:获得PWM中断标志状态 +*入口参数:void +*出口参数: +FlagStatus:PWM中断标志状态 +*****************************************************/ +FlagStatus PWM_GetFlagStatus(void) +{ + return (bool)(PWMCON0 & 0X40); +} + +/***************************************************** +*函数名称:void PWM_ClearFlag(void) +*函数功能:清除PWM中断标志状态 +*入口参数:void +*出口参数:void +*****************************************************/ +void PWM_ClearFlag(void) +{ + PWMCON0 &= 0XBF; +} +#endif + +#if defined (SC92F742x) || defined (SC92F730x) || defined (SC92F725X) || defined(SC92F735X) +/************************************************** +*函数名称:void PWM_DeInit(void) +*函数功能:PWM相关寄存器复位至缺省值 +*入口参数:void +*出口参数:void +**************************************************/ +void PWM_DeInit(void) +{ + PWMCFG0 = 0X00; + PWMCON = 0X00; + PWMPRD = 0X00; + PWMCFG1 = 0X00; + PWMDTY0 = 0X00; + PWMDTY1 = 0X00; + PWMDTY2 = 0X00; +#if !defined (SC92F730x) + PWMDTY3 = 0X00; +#endif + PWMDTY4 = 0X00; + PWMDTY5 = 0X00; + IE1 &= ~0X02; + IP1 &= ~0X02; +} + +/************************************************** +*函数名称:void PWM_Init(PWM_PresSel_TypeDef PWM_PresSel, uint16_t PWM_Period) +*函数功能:PWM初始化配置函数 +*入口参数: +PWM_PresSel_TypeDef:PWM_PresSel:预分频选择 +uint16_t:PWM_Period:PWM周期配置 +*出口参数:void +**************************************************/ +void PWM_Init(PWM_PresSel_TypeDef PWM_PresSel, + uint16_t PWM_Period) +{ + PWM_Period -= 1; + PWMCON = (PWMCON & 0XF8) | PWM_PresSel; //预分频 + PWMPRD = PWM_Period; //周期配置 +} + +/************************************************** +*函数名称:void PWM_OutputStateConfig(PWM_OutputPin_TypeDef PWM_OutputPin, PWM_OutputState_TypeDef PWM_OutputState) +*函数功能:PWMx输出使能/失能配置函数 +*入口参数: +uint8_t:PWM_OutputPin:PWMx选择 +PWM_OutputState_TypeDef:PWM_OutputState:PWM输出状态配置 +*出口参数:void +**************************************************/ +void PWM_OutputStateConfig(uint8_t PWM_OutputPin, + PWM_OutputState_TypeDef PWM_OutputState) +{ + if(PWM_OutputState == PWM_OUTPUTSTATE_DISABLE) + { + PWMCON = PWMCON & (~((PWM_OutputPin & 0x07) << 3)); + PWMCON = PWMCON | (PWM_OutputPin & 0x07) << 3; + } + else + { + PWMCON = PWMCON | (PWM_OutputPin & 0x07) << 3; + PWMCFG0 = PWMCFG0 | (PWM_OutputPin & 0x38) >> 3; + } +} + +/************************************************** +*函数名称:void PWM_PolarityConfig(PWM_OutputPin_TypeDef PWM_OutputPin, PWM_Polarity_TypeDef PWM_Polarity) +*函数功能:PWMx正/反向输出配置函数 +*入口参数: +PWM_PolarityConfig:PWM_OutputPin:PWMx选择 +PWM_Polarity_TypeDef:PWM_Polarity:PWM输出正/反向配置 +*出口参数:void +**************************************************/ +void PWM_PolarityConfig(uint8_t PWM_OutputPin, + PWM_Polarity_TypeDef PWM_Polarity) +{ + if(PWM_Polarity == PWM_POLARITY_NON_INVERT) + { + PWMCFG0 = PWMCFG0 & ~((PWM_OutputPin & 0x07) << 3); + PWMCFG1 = PWMCFG1 & ~((PWM_OutputPin & 0x38)); + } + else + { + PWMCFG0 = PWMCFG0 | (PWM_OutputPin & 0x07) << 3; + PWMCFG1 = PWMCFG1 | (PWM_OutputPin & 0x38); + } + +} + +/************************************************** +*函数名称:void PWM_IndependentModeConfig(PWM_OutputPin_TypeDef PWM_OutputPin, uint16_t PWM_DutyCycle) +*函数功能:PWMx独立工作模式配置函数 +*入口参数: +PWM_OutputPin_TypeDef:PWM_OutputPin:PWMx独立通道选择 +uint16_t:PWM_DutyCycle:PWM占空比配置 +*出口参数:void +**************************************************/ +void PWM_IndependentModeConfig( + PWM_OutputPin_TypeDef PWM_OutputPin, + uint16_t PWM_DutyCycle) +{ + switch(PWM_OutputPin) //设置占空比 + { + case PWM0: + PWMDTY0 = PWM_DutyCycle; + break; + + case PWM1: + PWMDTY1 = PWM_DutyCycle; + break; + + case PWM2: + PWMDTY2 = PWM_DutyCycle; + break; +#if !defined (SC92F730x) + + case PWM3: + PWMDTY3 = PWM_DutyCycle; + break; +#endif + + case PWM4: + PWMDTY4 = PWM_DutyCycle; + break; + + case PWM5: + PWMDTY5 = PWM_DutyCycle; + break; + + default: + break; + } +} + +/***************************************************** +*函数名称:void PWM_Cmd(FunctionalState NewState) +*函数功能:PWM功能开关函数 +*入口参数: +FunctionalState:NewState:功能启动/关闭选择 +*出口参数:void +*****************************************************/ +void PWM_Cmd(FunctionalState NewState) +{ + if (NewState != DISABLE) + { + PWMCON |= 0X80; + } + else + { + PWMCON &= ~0X80; + } +} + +/***************************************************** +*函数名称:void PWM_ITConfig(FunctionalState NewState, PriorityStatus Priority) +*函数功能:PWM中断初始化 +*入口参数: +FunctionalState:NewState:中断使能/关闭选择 +PriorityStatus:Priority:中断优先级选择 +*出口参数:void +*****************************************************/ +void PWM_ITConfig(FunctionalState NewState, + PriorityStatus Priority) +{ + if (NewState != DISABLE) + { + IE1 |= 0X02; + } + else + { + IE1 &= ~0X02; + } + + if(Priority == LOW) + { + IP1 &= ~0X02; + } + else + { + IP1 |= 0X02; + } +} + +/***************************************************** +*函数名称:FlagStatus PWM_GetFlagStatus(void) +*函数功能:获得PWM中断标志状态 +*入口参数:void +*出口参数: +FlagStatus:PWM中断标志状态 +*****************************************************/ +FlagStatus PWM_GetFlagStatus(void) +{ + return (bool)(PWMCON & 0X40); +} + +/***************************************************** +*函数名称:void PWM_ClearFlag(void) +*函数功能:清除PWM中断标志状态 +*入口参数:void +*出口参数:void +*****************************************************/ +void PWM_ClearFlag(void) +{ + PWMCON &= 0XBF; +} +#endif + +#if defined (SC92F827X) || defined (SC92F837X) +/************************************************** +*函数名称:void PWM_DeInit(void) +*函数功能:PWM相关寄存器复位至缺省值 +*入口参数:void +*出口参数:void +**************************************************/ +void PWM_DeInit(void) +{ + PWMCFG = 0X00; + PWMCON = 0X00; + PWMPRD = 0X00; + PWMDTY0 = 0X00; + PWMDTY1 = 0X00; +#if !defined (SC92F827X) + PWMDTY2 = 0X00; + PWMDTY3 = 0X00; +#if !defined (SC92F837X) + PWMDTY4 = 0X00; + PWMDTY5 = 0X00; +#endif +#endif + IE1 &= ~0X02; + IP1 &= ~0X02; +} + +/************************************************** +*函数名称:void PWM_Init(PWM_PresSel_TypeDef PWM_PresSel, uint16_t PWM_Period) +*函数功能:PWM初始化配置函数 +*入口参数: +PWM_PresSel_TypeDef:PWM_PresSel:预分频选择 +uint16_t:PWM_Period:PWM周期配置 +*出口参数:void +**************************************************/ +void PWM_Init(PWM_PresSel_TypeDef PWM_PresSel, + uint16_t PWM_Period) +{ + PWM_Period -= 1; + PWMCON = (PWMCON & 0XF8) | PWM_PresSel; //预分频 + PWMPRD = PWM_Period; //周期配置 +} + +/************************************************** +*函数名称:void PWM_OutputStateConfig(uint8_t PWM_OutputPin, PWM_OutputState_TypeDef PWM_OutputState) +*函数功能:PWMx输出使能/失能配置函数 +*入口参数: +PWM_OutputPin_TypeDef:PWM_OutputPin:PWMx选择 +PWM_OutputState_TypeDef:PWM_OutputState:PWM输出状态配置 +*出口参数:void +**************************************************/ +void PWM_OutputStateConfig(uint8_t PWM_OutputPin, + PWM_OutputState_TypeDef PWM_OutputState) +{ + if(PWM_OutputState == PWM_OUTPUTSTATE_ENABLE) + { + PWMCON |= PWM_OutputPin; + } + else + { + PWMCON &= (~PWM_OutputPin); + } +} + +/************************************************** +*函数名称:void PWM_PolarityConfig(uint8_t PWM_OutputPin, PWM_Polarity_TypeDef PWM_Polarity) +*函数功能:PWMx正/反向输出配置函数 +*入口参数: +PWM_OutputPin_TypeDef:PWM_OutputPin:PWMx选择 +PWM_Polarity_TypeDef:PWM_Polarity:PWM输出正/反向配置 +*出口参数:void +**************************************************/ +void PWM_PolarityConfig(uint8_t PWM_OutputPin, + PWM_Polarity_TypeDef PWM_Polarity) +{ + if(PWM_Polarity == PWM_POLARITY_INVERT) + { + PWMCFG |= PWM_OutputPin; + } + else + { + PWMCFG &= (~PWM_OutputPin); + } +} + +/************************************************** +*函数名称:void PWM_IndependentModeConfig(PWM_OutputPin_TypeDef PWM_OutputPin, uint16_t PWM_DutyCycle) +*函数功能:PWMx独立工作模式配置函数 +*入口参数: +PWM_OutputPin_TypeDef:PWM_OutputPin:PWMx独立通道选择 +uint16_t:PWM_DutyCycle:PWM占空比配置 +*出口参数:void +**************************************************/ +void PWM_IndependentModeConfig( + PWM_OutputPin_TypeDef PWM_OutputPin, + uint16_t PWM_DutyCycle) +{ + switch(PWM_OutputPin) //设置占空比 + { + case PWM0: + PWMDTY0 = PWM_DutyCycle; + break; + + case PWM1: + PWMDTY1 = PWM_DutyCycle; + break; +#if !defined (SC92F827X) + + case PWM2: + PWMDTY2 = PWM_DutyCycle; + break; + + case PWM3: + PWMDTY3 = PWM_DutyCycle; + break; +#if !defined (SC92F837X) + + case PWM4: + PWMDTY4 = PWM_DutyCycle; + break; + + case PWM5: + PWMDTY5 = PWM_DutyCycle; + break; +#endif +#endif + + default: + break; + } +} + +/***************************************************** +*函数名称:void PWM_Cmd(FunctionalState NewState) +*函数功能:PWM功能开关函数 +*入口参数: +FunctionalState:NewState:功能启动/关闭选择 +*出口参数:void +*****************************************************/ +void PWM_Cmd(FunctionalState NewState) +{ + if (NewState != DISABLE) + { + PWMCON |= 0X80; + } + else + { + PWMCON &= ~0X80; + } +} + +/***************************************************** +*函数名称:void PWM_ITConfig(FunctionalState NewState, PriorityStatus Priority) +*函数功能:PWM中断初始化 +*入口参数: +FunctionalState:NewState:中断使能/关闭选择 +PriorityStatus:Priority:中断优先级选择 +*出口参数:void +*****************************************************/ +void PWM_ITConfig(FunctionalState NewState, + PriorityStatus Priority) +{ + if (NewState != DISABLE) + { + IE1 |= 0X02; + } + else + { + IE1 &= 0XFD; + } + + if(Priority == LOW) + { + IP1 &= 0XFD; + } + else + { + IP1 |= 0X02; + } +} + +/***************************************************** +*函数名称:FlagStatus PWM_GetFlagStatus(void) +*函数功能:获得PWM中断标志状态 +*入口参数:void +*出口参数:FlagStatus PWM中断标志状态 +*****************************************************/ +FlagStatus PWM_GetFlagStatus(void) +{ + return (bool)(PWMCON & 0X40); +} + +/***************************************************** +*函数名称:void PWM_ClearFlag(void) +*函数功能:清除PWM中断标志状态 +*入口参数:void +*出口参数:void +*****************************************************/ +void PWM_ClearFlag(void) +{ + PWMCON &= 0XBF; +} +#endif + +#if defined (SC92F732X) || defined (SC93F833x) || defined (SC93F843x) || defined (SC93F743x) +/************************************************** +*函数名称:void PWM_DeInit(void) +*函数功能:PWM相关寄存器复位至缺省值 +*入口参数:void +*出口参数:void +**************************************************/ +void PWM_DeInit(void) +{ + PWMCFG = 0X00; + PWMCON = 0X00; + PWMPRD = 0X00; + PWMDTYA = 0X00; + PWMDTY0 = 0X00; + PWMDTY1 = 0X00; + PWMDTY2 = 0X00; + IE1 &= ~0X02; + IP1 &= ~0X02; +} + +/************************************************** +*函数名称:void PWM_Init(PWM_PresSel_TypeDef PWM_PresSel, uint16_t PWM_Period) +*函数功能:PWM初始化配置函数 +*入口参数: +PWM_PresSel_TypeDef:PWM_PresSel:预分频选择 +uint16_t:PWM_Period:PWM周期配置 +*出口参数:void +**************************************************/ +void PWM_Init(PWM_PresSel_TypeDef PWM_PresSel, + uint16_t PWM_Period) +{ + PWM_Period -= 1; + PWMCON = (PWMCON & 0XF8) | PWM_PresSel; //预分频 + PWMPRD = PWM_Period; //周期配置 +} + +/************************************************** +*函数名称:void PWM_OutputStateConfig(PWM_OutputPin_TypeDef PWM_OutputPin, PWM_OutputState_TypeDef PWM_OutputState) +*函数功能:PWMx输出使能/失能配置函数 +*入口参数: +PWM_OutputPin_TypeDef:PWM_OutputPin:PWMx选择 +PWM_OutputState_TypeDef:PWM_OutputState:PWM输出状态配置 +*出口参数:void +**************************************************/ +void PWM_OutputStateConfig(uint8_t PWM_OutputPin, + PWM_OutputState_TypeDef PWM_OutputState) +{ + if(PWM_OutputState == PWM_OUTPUTSTATE_DISABLE) + { + PWMCON = PWMCON & (~(PWM_OutputPin << 3)); + } + else + { + PWMCON = PWMCON | (PWM_OutputPin << 3); + } +} + +/************************************************** +*函数名称:void PWM_PolarityConfig(PWM_OutputPin_TypeDef PWM_OutputPin, PWM_Polarity_TypeDef PWM_Polarity) +*函数功能:PWMx正/反向输出配置函数 +*入口参数: +PWM_OutputPin_TypeDef:WM_OutputPin:PWMx选择 +PWM_Polarity_TypeDef:PWM_Polarity:PWM输出正/反向配置 +*出口参数:void +**************************************************/ +void PWM_PolarityConfig(uint8_t PWM_OutputPin, + PWM_Polarity_TypeDef PWM_Polarity) +{ + if(PWM_Polarity == PWM_POLARITY_NON_INVERT) + { + PWMCFG = PWMCFG & (~PWM_OutputPin<<3); + } + else + { + PWMCFG = PWMCFG | (PWM_OutputPin<<3); + } +} + +/************************************************** +*函数名称:void PWM_IndependentModeConfig(PWM_OutputPin_TypeDef PWM_OutputPin, uint16_t PWM_DutyCycle) +*函数功能:PWMx独立工作模式配置函数 +*入口参数: +PWM_OutputPin_TypeDef:PWM_OutputPin:PWMx独立通道选择 +uint16_t:PWM_DutyCycle:PWM占空比配置 +*出口参数:void +**************************************************/ +void PWM_IndependentModeConfig( + PWM_OutputPin_TypeDef PWM_OutputPin, + uint16_t PWM_DutyCycle) +{ + switch(PWM_OutputPin) //设置占空比 + { + case PWM0: + PWMDTY0 = PWM_DutyCycle; + break; + + case PWM1: + PWMDTY1 = PWM_DutyCycle; + break; + + case PWM2: + PWMDTY2 = PWM_DutyCycle; + break; + + default: + break; + } +} + +/***************************************************** +*函数名称:void PWM_Cmd(FunctionalState NewState) +*函数功能:PWM功能开关函数 +*入口参数: +FunctionalState:NewState:功能启动/关闭选择 +*出口参数:void +*****************************************************/ +void PWM_Cmd(FunctionalState NewState) +{ + if (NewState != DISABLE) + { + PWMCON |= 0X80; + } + else + { + PWMCON &= ~0X80; + } +} + +/***************************************************** +*函数名称:void PWM_ITConfig(FunctionalState NewState, PriorityStatus Priority) +*函数功能:PWM中断初始化 +*入口参数: +FunctionalState:NewState:中断使能/关闭选择 +PriorityStatus:Priority:中断优先级选择 +*出口参数:void +*****************************************************/ +void PWM_ITConfig(FunctionalState NewState, + PriorityStatus Priority) +{ + if (NewState != DISABLE) + { + IE1 |= 0X02; + } + else + { + IE1 &= ~0X02; + } + + if(Priority == LOW) + { + IP1 &= ~0X02; + } + else + { + IP1 |= 0X02; + } +} + +/***************************************************** +*函数名称:FlagStatus PWM_GetFlagStatus(void) +*函数功能:获得PWM中断标志状态 +*入口参数:void +*出口参数: +FlagStatus:PWM中断标志状态 +*****************************************************/ +FlagStatus PWM_GetFlagStatus(void) +{ + return (bool)(PWMCON & 0X40); +} + +/***************************************************** +*函数名称:void PWM_ClearFlag(void) +*函数功能:清除PWM中断标志状态 +*入口参数:void +*出口参数:void +*****************************************************/ +void PWM_ClearFlag(void) +{ + PWMCON &= 0XBF; +} + +/************************************************** +*函数名称:void PWM_PWM0Selection(PWM0_OutputPin_TypeDef PWM0_OutputPin) +*函数功能:PWM0管脚选择函数 +*入口参数: +PWM0_OutputPin_TypeDef:PWM0_OutputPin:PWM0管脚选择 +*出口参数:void +**************************************************/ +void PWM_PWM0Selection(PWM0_OutputPin_TypeDef + PWM0_OutputPin) +{ + PWMCFG = PWMCFG & 0XFE | PWM0_OutputPin; +} + +/************************************************** +*函数名称:void PWM_PWM1Selection(PWM1_OutputPin_TypeDef PWM1_OutputPin) +*函数功能:PWM1管脚选择函数 +*入口参数: +PWM1_OutputPin_TypeDef:PWM1_OutputPin:PWM1管脚选择 +*出口参数:void +**************************************************/ +void PWM_PWM1Selection(PWM1_OutputPin_TypeDef + PWM1_OutputPin) +{ + PWMCFG = PWMCFG & 0XFD | PWM1_OutputPin; +} + +/************************************************** +*函数名称:void PWM_PWM1Selection(PWM2_OutputPin_TypeDef PWM2_OutputPin) +*函数功能:PWM2管脚选择函数 +*入口参数: +PWM2_OutputPin_TypeDef:PWM2_OutputPin:PWM1管脚选择 +*出口参数:void +**************************************************/ +void PWM_PWM2Selection(PWM2_OutputPin_TypeDef + PWM2_OutputPin) +{ + PWMCFG = PWMCFG & 0XFB | PWM2_OutputPin; +} + +/************************************************** +*函数名称:void PMM_DutyModeSelection(PWM_DutyMode_TypeDef PWM_DutyMode) +*函数功能:PWM占空比微调模式选择 +*入口参数: +PWM_OutputPin_TypeDef:PWM_OutputPin:PWM通道 +PWM_DutyMode_TypeDef:PWM_DutyMode:PWM微调模式 +*出口参数:void +**************************************************/ +void PMM_DutyModeSelection(PWM_OutputPin_TypeDef + PWM_OutputPin, PWM_DutyMode_TypeDef PWM_DutyMode) +{ + PWMDTYA = PWMDTYA & (~(0x03 << (PWM_OutputPin - + 1))) | (PWM_DutyMode << (PWM_OutputPin - 1)); +} +#endif + +#if defined (SC92FWxx) + +uint8_t xdata PWMREG[80] _at_ +0x700; //PWM占空比调节寄存器 +uint8_t PWMREG_Status[10]; +/************************************************** +*函数名称:void PWM_DeInit(void) +*函数功能:PWM相关寄存器复位至缺省值 +*入口参数:void +*出口参数:void +**************************************************/ +void PWM_DeInit(void) +{ + static uint8_t i; + PWMCFG0 = 0X00; + PWMCON0 = 0X00; + PWMCFG1 = 0X00; + PWMCON1 = 0X00; + IE1 &= 0XFD; + IP1 &= 0XFD; + + for(i = 0; i < 80; i++) + { + PWMREG[i] = 0; + } +} + +/************************************************** +*函数名称:PWM_Init(PWM_PresSel_TypeDef PWM_PresSel, uint16_t PWM_Period) +*函数功能:PWM初始化配置函数 +*入口参数: +PWM_PresSel_TypeDef:PWM_PresSel:预分频选择 +uint16_t:PWM_Period:PWM周期配置 +*出口参数:void +**************************************************/ +void PWM_Init(PWM_PresSel_TypeDef PWM_PresSel, + uint16_t PWM_Period) +{ + if((PWM_PresSel & 0X0F) == PWM0_Type) + { + PWM_Period -= 1; + PWMCFG0 = (PWMCFG0 & 0XCF) | (PWM_PresSel & + 0XF0); //预分频 + PWMCFG0 = (PWMCFG0 & 0XF0) | (uint8_t)( + PWM_Period / 256); //周期高4位 + PWMCON0 = (uint8_t)(PWM_Period & + 0X00FF); //周期低8位 + } + else + if ((PWM_PresSel & 0X0F) == PWM1_Type) + { + PWM_Period -= 1; + PWMCFG1 = (PWMCFG1 & 0XCF) | (PWM_PresSel & + 0XF0); //预分频 + PWMCFG1 = (PWMCFG1 & 0XF0) | (uint8_t)( + PWM_Period / 256); //周期高4位 + PWMCON1 = (uint8_t)(PWM_Period & + 0X00FF); //周期低8位 + } +} + +/************************************************** +*函数名称:void PWM_OutputStateConfig(uint8_t PWM_OutputPin, PWM_OutputState_TypeDef PWM_OutputState) +*函数功能:PWMx输出使能/失能配置函数 +*入口参数: +PWM_OutputPin_TypeDef:PWM_OutputPin:PWMx选择(该型号入参不支持围未或操作) +PWM_OutputState_TypeDef:PWM_OutputState:PWM输出状态配置 +*出口参数:void +**************************************************/ +void PWM_OutputStateConfig(uint8_t PWM_OutputPin, + PWM_OutputState_TypeDef PWM_OutputState) +{ + if(PWM_OutputState == ENABLE) + { + PWMREG[PWM_OutputPin] |= 0x80; + } + else + { + PWMREG[PWM_OutputPin] &= 0x7F; + } +} + +/************************************************** +*函数名称:void PWM_PolarityConfig(PWM_OutputPin_TypeDef PWM_OutputPin, PWM_Polarity_TypeDef PWM_Polarity) +*函数功能:PWMx正/反向输出配置函数 +*入口参数: +PWM_OutputPin_TypeDef:PWM_OutputPin:PWMx选择(该型号入参不支持围未或操作) +PWM_Polarity_TypeDef:PWM_Polarity:PWM输出正/反向配置 +*出口参数:void +**************************************************/ +void PWM_PolarityConfig(uint8_t PWM_OutputPin, + PWM_Polarity_TypeDef PWM_Polarity) +{ + if(PWM_Polarity == PWM_POLARITY_INVERT) + { + PWMREG[PWM_OutputPin] |= 0x40; + } + else + { + PWMREG[PWM_OutputPin] &= 0xBF; + } +} + +/************************************************** +*函数名称:void PWM_IndependentModeConfig(PWM_OutputPin_TypeDef PWM_OutputPin, uint16_t PWM_DutyCycle) +*函数功能:PWMx独立工作模式配置函数 +*入口参数: +PWM_OutputPin_TypeDef:PWM_OutputPin:PWMx选择(该型号入参不支持围未或操作) +uint16_t:PWM_DutyCycle:PWM占空比配置 +*出口参数:void +**************************************************/ +void PWM_IndependentModeConfig(PWM_OutputPin_TypeDef PWM_OutputPin, + uint16_t PWM_DutyCycle) +{ + PWMREG[PWM_OutputPin + 1] = PWM_DutyCycle; + PWMREG[PWM_OutputPin] = (PWMREG[PWM_OutputPin] * 0xF0) |(PWM_DutyCycle / 256); +} + +/***************************************************** +*函数名称:void PWM_Cmd(PWM_Type_TypeDef PWM_Type,FunctionalState NewState) +*函数功能:PWM功能开关函数 +*入口参数: +PWM_Type_TypeDef:PWM_Type:PWM类型 +FunctionalState:NewState:功能启动/关闭选择 +*出口参数:void +*****************************************************/ +void PWM_CmdEX(PWM_Type_TypeDef PWM_Type, + FunctionalState NewState) +{ + if(PWM_Type == PWM0_Type) + { + if (NewState != DISABLE) + { + PWMCFG0 |= 0X80; + } + else + { + PWMCFG0 &= 0X7F; + } + } + else + { + if (NewState != DISABLE) + { + PWMCFG1 |= 0X80; + } + else + { + PWMCFG1 &= 0X7F; + } + } +} + +/***************************************************** +*函数名称:void PWM_ITConfig(FunctionalState NewState, PriorityStatus Priority) +*函数功能:PWM中断初始化 +*入口参数: +FunctionalState:NewState:中断使能/关闭选择 +PriorityStatus:Priority:中断优先级选择 +*出口参数:void +*****************************************************/ +void PWM_ITConfig(FunctionalState NewState, + PriorityStatus Priority) +{ + if (NewState != DISABLE) + { + IE1 |= 0X02; + } + else + { + IE1 &= 0XFD; + } + + if(Priority == LOW) + { + IP1 &= ~0X02; + } + else + { + IP1 |= 0X02; + } +} + +/***************************************************** +*函数名称:FlagStatus PWM1_Type_GetFlagStatus(void) +*函数功能:获得PWM中断标志状态 +*入口参数: +PWM_Type_TypeDef:PWM_Type:PWM类型 +*出口参数:FlagStatus PWM中断标志状态 +*****************************************************/ +FlagStatus PWM_GetFlagStatusEX(PWM_Type_TypeDef + PWM_Type) +{ + if(PWM_Type == PWM0_Type) + { + return (bool)(PWMCFG0 & 0X40); + } + else + { + return (bool)(PWMCFG1 & 0X40); + } +} + +/***************************************************** +*函数名称:void PWM1_ClearFlag(void) +*函数功能:清除PWM中断标志状态 +*入口参数: +PWM_Type_TypeDef:PWM_Type:PWM类型 +*出口参数:void +*****************************************************/ +void PWM_ClearFlagEX(PWM_Type_TypeDef PWM_Type) +{ + if(PWM_Type == PWM0_Type) + { + PWMCFG0 &= 0XBF; + } + else + { + PWMCFG1 &= 0XBF; + } +} + +/***************************************************** +*函数名称:void PWM_IndependentModeConfigEX(PWM_OutputPin_TypeDef PWM_OutputPin, uint16_t PWM_DutyCycle, PWM_OutputState_TypeDef PWM_OutputState) +*函数功能:清除PWM中断标志状态 +*入口参数: +PWM_OutputPin_TypeDef:PWM_OutputPin:独立PWM通道选择 +uint16_t:PWM_DutyCycle:PWM占空比配置 +FunctionalState:NewState:功能启动/关闭选择 +*出口参数:void +*****************************************************/ +void PWM_IndependentModeConfigEX(PWM_OutputPin_TypeDef PWM_OutputPin, + uint16_t PWM_DutyCycle, + PWM_OutputState_TypeDef PWM_OutputState) +{ + if(PWM_OutputState == ENABLE) + { + PWMREG[PWM_OutputPin] = (PWMREG[PWM_OutputPin] * 0xF0) | (0x80 | (PWM_DutyCycle / + 256)); + PWMREG[PWM_OutputPin + 1] = PWM_DutyCycle; + } + else + { + PWMREG[PWM_OutputPin] &= 0x7F; + } +} + +#endif + +#if defined (SC92L853x) || defined (SC92L753x) +uint8_t xdata PWMREG[28] _at_ 0x0F40; //PWM占空比调节寄存器 +/************************************************** +*函数名称:void PWM_DeInit(void) +*函数功能:PWM相关寄存器复位至缺省值 +*入口参数:void +*出口参数:void +**************************************************/ +void PWM_DeInit(void) +{ + static uint8_t i; + + //PWM0相关寄存器清零 + PWMCON0 = 0X00; + PWMCFG = 0X00; + PWMCON1 = 0X00; + PWMPDL = 0x00; + PWMPDH = 0x00; + IE1 &= 0XFD; + IP1 &= 0XFD; + + //占空比寄存器 + for (i = 0; i < 14; i++) + { + PWMREG[i] = 0; + } +} + +/************************************************** +*函数名称:PWM_Init(PWM_Type_TypeDef PWM_Type,PWM_PresSel_TypeDef PWM_PresSel, uint16_t PWM_Period) +*函数功能:PWM初始化配置函数 +*入口参数: +PWM_PresSel_TypeDef:PWM_PresSel:预分频选择 +uint16_t:PWM_Period:PWM周期配置 +*出口参数:void +**************************************************/ +void PWM_Init(PWM_PresSel_TypeDef PWM_PresSel, uint16_t PWM_Period) +{ + /* PWM0时基初始化 */ + PWM_Period -= 1; + PWMCON0 = ((PWMCON0 & 0XCF) | PWM_PresSel); //预分频 + PWMPDH = (uint8_t)(PWM_Period >> 8); //周期高8位 + PWMPDL = (uint8_t)(PWM_Period & 0X00FF); //周期低8位 +} + +/***************************************************** +*函数名称:void PWM_Aligned_Mode_Select(void) +*函数功能:选择PWM的对齐模式 +*入口参数: +PWM_Aligned_Mode_TypeDef:PWM_Aligned_Mode:选择对齐模式 +*出口参数:void +*****************************************************/ +void PWM_Aligned_Mode_Select(PWM_Aligned_Mode_TypeDef PWM_Aligned_Mode) +{ + PWMCON0 &= ~0x01; //清除PWM对齐模式配置 + PWMCON0 |= (PWM_Aligned_Mode<<1); //设置PWM对齐模式 +} + +/************************************************** +*函数名称:void PWM_OutputStateConfig(uint8_t PWM_OutputPin, PWM_OutputState_TypeDef PWM_OutputState) +*函数功能:PWMx输出使能/失能配置函数 +*入口参数: +PWM_OutputPin_TypeDef:PWM_OutputPin:PWMx选择(uint8_t作为入参,方便进行位或操作) +PWM_OutputState_TypeDef:PWM_OutputState:PWM输出状态配置 +*出口参数:void +**************************************************/ +void PWM_OutputStateConfig(uint8_t PWM_OutputPin, + PWM_OutputState_TypeDef PWM_OutputState) +{ + /* PWM0输出通道使能配置 */ + if (PWM_OutputState == PWM_OUTPUTSTATE_ENABLE) + { + PWMCON1 |= 1 << ((PWM_OutputPin >> 1) & 0x0F); + } + else + { + PWMCON1 &= ~(1 << ((PWM_OutputPin >> 1) & 0x0F)); + } +} + +/************************************************** +*函数名称:void PWM_PolarityConfig(PWM_OutputPin_TypeDef PWM_OutputPin, PWM_Polarity_TypeDef PWM_Polarity) +*函数功能:PWMx正/反向输出配置函数 +*入口参数: +PWM_OutputPin_TypeDef:PWM_OutputPin:PWMx选择(uint8_t作为入参,方便进行位或操作) +PWM_Polarity_TypeDef:PWM_Polarity:PWM输出正/反向配置 +*出口参数:void +**************************************************/ +void PWM_PolarityConfig(uint8_t PWM_OutputPin, + PWM_Polarity_TypeDef PWM_Polarity) +{ + if (PWM_Polarity == PWM_POLARITY_INVERT) + { + PWMCFG |= 1 << ((PWM_OutputPin >> 1) & 0x0F); + } + else + { + PWMCFG &= ~(1 << ((PWM_OutputPin >> 1) & 0x0F)); + } +} + +/************************************************** +*函数名称:void PWM_IndependentModeConfig(PWM_OutputPin_TypeDef PWM_OutputPin, uint16_t PWM_DutyCycle) +*函数功能:PWMx独立工作模式配置函数 +*入口参数: +PWM_OutputPin_TypeDef:PWM_OutputPin:PWMx独立通道选择 +uint16_t:PWM_DutyCycle:PWM占空比配置 +*出口参数:void +**************************************************/ +void PWM_IndependentModeConfig(PWM_OutputPin_TypeDef PWM_OutputPin, uint16_t PWM_DutyCycle) +{ + PWMCON0 &= ~0x02; //设置PWM为独立模式 + /* 设置PWM周期 */ + PWMREG[ PWM_ComplementaryOutputPin] = PWM_DutyCycle; + PWMREG[ PWM_ComplementaryOutputPin+1] = PWM_DutyCycle >> 8; +} + +/************************************************** +*函数名称:void PWM_ComplementaryModeConfig(PWM_ComplementaryOutputPin_TypeDef PWM_ComplementaryOutputPin, uint16_t PWM_DutyCycle) +*函数功能:PWMxPWMy互补工作模式配置函数 +*入口参数: +PWM_ComplementaryOutputPin_TypeDef:PWM_ComplementaryOutputPin:PWMxPWMy互补通道选择 +uint16_t:PWM_DutyCycle:PWM占空比配置 +*出口参数:void +**************************************************/ +void PWM_ComplementaryModeConfig(PWM_ComplementaryOutputPin_TypeDef PWM_ComplementaryOutputPin, + uint16_t PWM_DutyCycle) +{ + PWMCON0 |= 0x02; + PWMREG[ PWM_ComplementaryOutputPin] = PWM_DutyCycle; + PWMREG[ PWM_ComplementaryOutputPin+1] = PWM_DutyCycle >> 8; +} + +/************************************************** +*函数名称:PWM_DeadTimeConfigEX(PWM_Type_TypeDef PWM_Type,uint8_t PWM_RisingDeadTime, uint8_t PWM_FallingDeadTime) +*函数功能:PWM互补工作模式下死区时间配置函数 +*入口参数: +PWM_Type_TypeDef:PWM_Type:PWM源选择 +uint8_t:PWM_RisingDeadTime:PWM死区上升时间 00-FF +uint8_t:PWM_FallingDeadTime:PWM死区下降时间 00-FF +*出口参数:void +**************************************************/ +void PWM_DeadTimeConfigEX(PWM_Type_TypeDef PWM_Type, uint8_t PWM_RisingDeadTime, uint8_t PWM_FallingDeadTime) +{ + if (PWM_Type == PWM0_Type) + { + PWMDFR = (PWM_RisingDeadTime | (PWM_FallingDeadTime << 4)); + } +} + +/***************************************************** +*函数名称:void PWM_Cmd(PWM_Type_TypeDef PWM_Type,FunctionalState NewState) +*函数功能:PWM功能开关函数 +*入口参数: +PWM_Type_TypeDef:PWM_Type:PWM类型 +FunctionalState:NewState:功能启动/关闭选择 +*出口参数:void +*****************************************************/ +void PWM_CmdEX(PWM_Type_TypeDef PWM_Type, + FunctionalState NewState) +{ + if (PWM_Type == PWM0_Type) + { + if (NewState != DISABLE) + { + PWMCON0 |= 0X80; + } + else + { + PWMCON0 &= 0X7F; + } + } + else + { + TXINX = PWM_Type; + if (NewState != DISABLE) + { + TXCON |= 0X04; + } + else + { + TXCON &= ~0X04; + } + } +} + +/***************************************************** +*函数名称:void PWM_ITConfig(FunctionalState NewState, PriorityStatus Priority) +*函数功能:PWM中断初始化 +*入口参数: +FunctionalState:NewState:中断使能/关闭选择 +PriorityStatus:Priority:中断优先级选择 +*出口参数:void +*****************************************************/ +void PWM_ITConfig(FunctionalState NewState, + PriorityStatus Priority) +{ + if (NewState != DISABLE) + { + IE1 |= 0X02; + } + else + { + IE1 &= 0XFD; + } + + if (Priority == LOW) + { + IP1 &= ~0X02; + } + else + { + IP1 |= 0X02; + } +} + +/***************************************************** +*函数名称:void PWM_IndependentModeConfigEX(PWM_OutputPin_TypeDef PWM_OutputPin, uint16_t PWM_DutyCycle, PWM_OutputState_TypeDef PWM_OutputState) +*函数功能:PWM独立模式配置 +*入口参数: +PWM_OutputPin_TypeDef:PWM_ComplementaryOutputPin:PWM通道 +uint16_t:PWM_DutyCycle:PWM占空比配置 +FunctionalState:NewState:功能启动/关闭选择 +*出口参数:void +*****************************************************/ +void PWM_IndependentModeConfigEX(PWM_OutputPin_TypeDef PWM_ComplementaryOutputPin, + uint16_t PWM_DutyCycle, + PWM_OutputState_TypeDef PWM_OutputState) +{ + PWM_IndependentModeConfig(PWM_ComplementaryOutputPin, PWM_DutyCycle); //配置占空比 + PWM_OutputStateConfig(PWM_ComplementaryOutputPin, PWM_OutputState); //IO复用PWM配置函数 + if (PWM_OutputState == ENABLE) + { + PWM_CmdEX(PWM_ComplementaryOutputPin >> 4, ENABLE); //开启PWM + } +} + +/***************************************************** +*函数名称:void PWM_ComplementaryModeConfigEX(PWM_OutputPin_TypeDef PWM_OutputPin, uint16_t PWM_DutyCycle, PWM_OutputState_TypeDef PWM_OutputState) +*函数功能:PWM互补 +*入口参数: +PWM_ComplementaryOutputPin_TypeDef:PWM_OutputPin:PWM通道 +uint16_t:PWM_DutyCycle:PWM占空比配置 +FunctionalState:NewState:功能启动/关闭选择 +*出口参数:void +*****************************************************/ +void PWM_ComplementaryModeConfigEX(PWM_ComplementaryOutputPin_TypeDef PWM_OutputPin, + uint16_t PWM_DutyCycle, + PWM_OutputState_TypeDef PWM_OutputState) +{ + PWM_ComplementaryModeConfig(PWM_OutputPin, PWM_DutyCycle); //配置占空比 + PWM_OutputStateConfig(PWM_OutputPin, PWM_OutputState); //IO复用PWM配置函数 + PWM_OutputStateConfig(PWM_OutputPin + 2, PWM_OutputState); //IO复用PWM配置函数 + if (PWM_OutputState == ENABLE) + { + PWM_CmdEX(PWM_OutputPin >> 4, ENABLE); //开启PWM + } +} + +/***************************************************** +*函数名称:PWM_GetFlagStatusEX(PWM_Type_TypeDef PWM_Type) +*函数功能:获取PWM中断标志位 +*入口参数: +PWM_Type_TypeDef:PWM_Type:PWM源选择 +*出口参数:void +*****************************************************/ +FlagStatus PWM_GetFlagStatusEX(PWM_Type_TypeDef PWM_Type) +{ + if ((PWM_Type == PWM0_Type)) + { + return (bool)(PWMCON0 & 0X40); + } + + return RESET; +} + +/***************************************************** +*函数名称:void PWM_ClearFlagEX(PWM_Type_TypeDef PWM_Type) +*函数功能:清除PWM中断 +*入口参数: +PWM_Type_TypeDef:PWM_Type:PWM源选择 +*出口参数:void +*****************************************************/ +void PWM_ClearFlagEX(PWM_Type_TypeDef PWM_Type) +{ + if ((PWM_Type == PWM0_Type)) + { + PWMCON0 &= ~0X40; + } +} + +/***************************************************** +*函数名称:FlagStatus PWM_GetFaultDetectionFlagStatus(void) +*函数功能:获得PWM故障检测标志位状态 +*入口参数: +PWM_Type_TypeDef:PWM_Type:PWM类型 +*出口参数: +FlagStatus:PWM故障检测标志位状态 +*****************************************************/ +FlagStatus PWM_GetFaultDetectionFlagStatusEX(PWM_Type_TypeDef PWM_Type) +{ + if (PWM_Type == PWM0_Type) + { + return (bool)(PWMFLT & 0X40); + } + return RESET; +} + +/***************************************************** +*函数名称:void PWM_ClearFaultDetectionFlag(void) +*函数功能:清除PWM故障检测标志位状态 // !注意,处于锁存模式下,此位可软件清除 +*入口参数: +PWM_Type_TypeDef:PWM_Type:PWM类型 +*出口参数:void +*****************************************************/ +void PWM_ClearFaultDetectionFlagEX(PWM_Type_TypeDef PWM_Type) +{ + if (PWM_Type == PWM0_Type) + { + PWMFLT &= 0XBF; + } +} + +/***************************************************** +*函数名称:void PWM_FaultDetectionFunctionConfigEX(PWM_Type_TypeDef PWM_Type, FunctionalState NewState) +*函数功能:PWM故障检测功能开启/关闭-扩展版 +*入口参数: +PWM_Type_TypeDef:PWM_Type:PWM类型选择 +FunctionalState:NewState:故障检测功能开启/关闭 +*出口参数:void +*****************************************************/ +void PWM_FaultDetectionConfigEX(PWM_Type_TypeDef PWM_Type, FunctionalState NewState) +{ + if (PWM_Type == PWM0_Type) + { + if (NewState != DISABLE) + { + PWMFLT |= 0X80; + } + else + { + PWMFLT &= 0X7F; + } + } +} + +/***************************************************** +*函数名称:void PWM_FaultDetectionModeConfigEX(PWM_Type_TypeDef PWM_Type, PWM_FaultDetectionMode_TypeDef FaultDetectionMode, PWM_FaultDetectionVoltageSelect_TypeDef FaultDetectionVoltageSelect, PWM_FaultDetectionWaveFilteringTime_TypeDef FaultDetectionWaveFilteringTime) +*函数功能:PWM故障检测模式设置 +*入口参数: +PWM_Type_TypeDef:PWM_Type:PWM类型选择 +PWM_FaultDetectionMode_TypeDef:FaultDetectionMode:故障检测功能模式设置: 立即模式/锁存模式 +PWM_FaultDetectionVoltageSelect_TypeDef:FaultDetectionVoltageSelect:故障检测电平选择 +PWM_FaultDetectionWaveFilteringTime_TypeDef:FaultDetectionWaveFilteringTime:故障检测输入信号滤波时间选择 +*出口参数:void +*****************************************************/ +void PWM_FaultDetectionModeConfigEX(PWM_Type_TypeDef PWM_Type, + PWM_FaultDetectionMode_TypeDef FaultDetectionMode, + PWM_FaultDetectionVoltageSelect_TypeDef FaultDetectionVoltageSelect, + PWM_FaultDetectionWaveFilteringTime_TypeDef FaultDetectionWaveFilteringTime) +{ + if (PWM_Type == PWM0_Type) + { + PWMFLT = (PWMFLT & 0XC0) | FaultDetectionMode | FaultDetectionVoltageSelect | + FaultDetectionWaveFilteringTime; + } +} + +/***************************************************** +*函数名称:void PWM_ITConfigEX(PWM_Type_TypeDef PWM_Type,FunctionalState NewState, PriorityStatus Priority) +*函数功能:PWM中断配置函数-扩展版 +*入口参数: +PWM_Type_TypeDef:PWM_Type:PWM源选择 +FunctionalState:NewState:中断使能/关闭选择 +PriorityStatus:Priority:中断优先级选择 +*出口参数:void +*****************************************************/ +void PWM_ITConfigEX(PWM_Type_TypeDef PWM_Type, FunctionalState NewState, PriorityStatus Priority) +{ + + if ((PWM_Type == PWM0_Type)) + { + PWM_ITConfig(NewState, Priority); + } + else + { + TXINX = PWM_Type; + + if (NewState == DISABLE) + { + ET2 = 0; + } + else + { + ET2 = 1; + } + + if (Priority == LOW) + { + IPT2 = 0; + } + else + { + IPT2 = 1; + } + } +} + +#endif +/******************* (C) COPYRIGHT 2020 SinOne Microelectronics *****END OF FILE****/ \ No newline at end of file diff --git a/Keil_C/FWLib/SC92F_Lib/src/sc92f_pwr.c b/Keil_C/FWLib/SC92F_Lib/src/sc92f_pwr.c new file mode 100644 index 0000000..285df16 --- /dev/null +++ b/Keil_C/FWLib/SC92F_Lib/src/sc92f_pwr.c @@ -0,0 +1,62 @@ +//************************************************************ +// Copyright (c) 深圳市赛元微电子有限公司 +// 文件名称 : sc92f_pwr.c +// 作者 : +// 模块功能 : PWR固件库函数C文件 +// 局部函数列表: +// 最后更正日期: 2020/8/18 +// 版本 : V1.0 +// 说明 :本文件仅适用于赛元92F系列单片机 +//************************************************************* +#include "sc92f_pwr.h" + +/************************************************** +*函数名称:void PWR_DeInit(void) +*函数功能:PWR相关寄存器复位至缺省值 +*入口参数:void +*出口参数:void +**************************************************/ +void PWR_DeInit(void) +{ + PCON &= 0XFC; +} + +/************************************************** +*函数名称:void PWR_EnterSTOPMode(void) +*函数功能:MCU进入STOP模式 +*入口参数:void +*出口参数:void +**************************************************/ +void PWR_EnterSTOPMode(void) +{ + PCON |= 0X02; + _nop_(); + _nop_(); + _nop_(); + _nop_(); + _nop_(); + _nop_(); + _nop_(); + _nop_(); +} + +/************************************************** +*函数名称:void PWR_EnterIDLEMode(void) +*函数功能:MCU进入IDLE模式 +*入口参数:void +*出口参数:void +**************************************************/ +void PWR_EnterIDLEMode(void) +{ + PCON |= 0X01; + _nop_(); + _nop_(); + _nop_(); + _nop_(); + _nop_(); + _nop_(); + _nop_(); + _nop_(); +} + +/******************* (C) COPYRIGHT 2020 SinOne Microelectronics *****END OF FILE****/ \ No newline at end of file diff --git a/Keil_C/FWLib/SC92F_Lib/src/sc92f_ssi.c b/Keil_C/FWLib/SC92F_Lib/src/sc92f_ssi.c new file mode 100644 index 0000000..87be19b --- /dev/null +++ b/Keil_C/FWLib/SC92F_Lib/src/sc92f_ssi.c @@ -0,0 +1,425 @@ +//************************************************************ +// Copyright (c) 深圳市赛元微电子有限公司 +// 文件名称 : sc92f_ssi.c +// 作者 : +// 模块功能 : SSI固件库函数C文件 +// 局部函数列表: +// 最后更正日期: 2021/08/20 +// 版本 : V1.10001 +// 说明 : +//************************************************************* + +#include "sc92f_ssi.h" + +#if defined (SC92F854x) || defined (SC92F754x) ||defined (SC92F844xB) || defined (SC92F744xB)||defined (SC92F84Ax_2) || defined (SC92F74Ax_2)\ + || defined (SC92F846xB) || defined (SC92F746xB) || defined (SC92F836xB) || defined (SC92F736xB) || defined (SC92F84Ax) || defined (SC92F74Ax)\ + || defined (SC92F83Ax) || defined (SC92F73Ax) || defined (SC92F7003) || defined (SC92F8003) || defined (SC92F740x) || defined (SC92F827X)\ + || defined (SC92F837X) || defined (SC92FWxx) || defined (SC93F833x) || defined (SC93F843x) || defined (SC93F743x) || defined (SC92F848x) || defined (SC92F748x)\ + || defined (SC92F859x) || defined (SC92F759x) +/************************************************** +*函数名称:void SSI_DeInit(void) +*函数功能:SSI相关寄存器复位至缺省值 +*入口参数:void +*出口参数:void +**************************************************/ +void SSI_DeInit(void) +{ + OTCON &= 0X3F; + SSCON0 = 0X00; + SSCON1 = 0X00; + SSCON2 = 0X00; + SSDAT = 0X00; + IE1 &= (~0X01); + IP1 &= (~0X01); +} + +#if defined (SC92F7003) || defined (SC92F8003) || defined (SC92F740x) +/************************************************** +*函数名称:SSI_PinSelection(SSI_PinSelection_TypeDef PinSeletion) +*函数功能:SSI引脚选择 +*入口参数: +SSI_PinSelection_TypeDef:PinSeletion:选择SSI引脚为P10P27P26或P21P22P23 +*出口参数:void +**************************************************/ +void SSI_PinSelection(SSI_PinSelection_TypeDef + PinSeletion) +{ + OTCON = OTCON & 0XDF | PinSeletion; +} +#endif + +/************************************************** +*函数名称:void SSI_SPI_Init(SPI_FirstBit_TypeDef FirstBit, SPI_BaudRatePrescaler_TypeDef BaudRatePrescaler,SPI_Mode_TypeDef Mode, + SPI_ClockPolarity_TypeDef ClockPolarity, SPI_ClockPhase_TypeDef ClockPhase,SPI_TXE_INT_TypeDef SPI_TXE_INT) +*函数功能:SPI初始化配置函数 +*入口参数: +SPI_FirstBit_TypeDef:FirstBit:优先传送位选择(MSB/LSB) +SPI_BaudRatePrescaler_TypeDef:BaudRatePrescaler:SPI时钟频率选择 +SPI_Mode_TypeDef:Mode:SPI工作模式选择 +SPI_ClockPolarity_TypeDef:ClockPolarity:SPI时钟极性选择 +SPI_ClockPhase_TypeDef:ClockPhase:SPI时钟相位选择 +SPI_TXE_INT_TypeDef:SPI_TXE_INT:发送缓存器中断允许选择 +*出口参数:void +**************************************************/ +void SSI_SPI_Init(SPI_FirstBit_TypeDef FirstBit, + SPI_BaudRatePrescaler_TypeDef BaudRatePrescaler, + SPI_Mode_TypeDef Mode, + SPI_ClockPolarity_TypeDef ClockPolarity, + SPI_ClockPhase_TypeDef ClockPhase, + SPI_TXE_INT_TypeDef SPI_TXE_INT) +{ + OTCON = (OTCON & 0X3F) | 0X40; + SSCON1 = SSCON1 & (~0X05) | FirstBit | + SPI_TXE_INT; + SSCON0 = SSCON0 & 0X80 | BaudRatePrescaler | Mode + | ClockPolarity | ClockPhase; +} + +/***************************************************** +*函数名称:void SSI_SPI_Cmd(FunctionalState NewState) +*函数功能:SPI功能开关函数 +*入口参数: +FunctionalState:NewState:功能启动/关闭选择 +*出口参数:void +*****************************************************/ +void SSI_SPI_Cmd(FunctionalState NewState) +{ + if(NewState != DISABLE) + { + SSCON0 |= 0X80; + } + else + { + SSCON0 &= (~0X80); + } +} + +/***************************************************** +*函数名称:void SSI_SPI_SendData(uint8_t Data) +*函数功能:SPI发送数据 +*入口参数: +uint8_t:Data:发送的数据 +*出口参数:void +*****************************************************/ +void SSI_SPI_SendData(uint8_t Data) +{ + SSDAT = Data; +} + +/***************************************************** +*函数名称:uint8_t SSI_SPI_ReceiveData(void) +*函数功能:获得SSDAT中的值 +*入口参数:void +*出口参数: +uint8_t:SPI接收到的8位数据 +*****************************************************/ +uint8_t SSI_SPI_ReceiveData(void) +{ + return SSDAT; +} + +/************************************************** +*函数名称:void SSI_TWI_Init(uint8_t TWI_Address) +*函数功能:TWI初始化配置函数 +*入口参数: +uint8_t:TWI_Address:TWI作为从机时7位从机地址配置 +*出口参数:void +**************************************************/ +void SSI_TWI_Init(uint8_t TWI_Address) +{ + OTCON = OTCON & 0X3F | 0X80; + SSCON1 = TWI_Address << 1; +} + +/************************************************** +*函数名称:void SSI_TWI_AcknowledgeConfig(FunctionalState NewState) +*函数功能:TWI接收应答使能函数 +*入口参数: +FunctionalState:NewState:接收应答使能/失能选择 +*出口参数:void +**************************************************/ +void SSI_TWI_AcknowledgeConfig(FunctionalState + NewState) +{ + if (NewState != DISABLE) + { + SSCON0 |= 0X08; + } + else + { + SSCON0 &= 0XF7; + } +} + +/************************************************** +*函数名称:void SSI_TWI_GeneralCallCmd(FunctionalState NewState) +*函数功能:TWI通用地址响应使能函数 +*入口参数: +FunctionalState:NewState:通用地址响应使能/失能选择 +*出口参数:void +**************************************************/ +void SSI_TWI_GeneralCallCmd(FunctionalState + NewState) +{ + if (NewState != DISABLE) + { + SSCON1 |= 0X01; + } + else + { + SSCON1 &= 0XFE; + } +} + +/************************************************** +*函数名称:FlagStatus SSI_GetTWIStatus(SSI_TWIState_TypeDef SSI_TWIState) +*函数功能:获取TWI状态机 +*入口参数: +SSI_TWIState_TypeDef:SSI_TWIState:TWI状态机状态 +*出口参数:void +**************************************************/ +FlagStatus SSI_GetTWIStatus(SSI_TWIState_TypeDef SSI_TWIState) +{ + if((SSCON0&0x07) == SSI_TWIState) + return SET; + else + return RESET; +} + +/***************************************************** +*函数名称:void SSI_TWI_Cmd(FunctionalState NewState) +*函数功能:TWI功能开关函数 +*入口参数:FunctionalState NewState 功能启动/关闭选择 +*出口参数:void +*****************************************************/ +void SSI_TWI_Cmd(FunctionalState NewState) +{ + if(NewState != DISABLE) + { + SSCON0 |= 0X80; + } + else + { + SSCON0 &= (~0X80); + } +} + +/***************************************************** +*函数名称:void SSI_TWI_SendData(uint8_t Data) +*函数功能:TWI发送数据 +*入口参数: +uint8_t:Data:发送的数据 +*出口参数:void +*****************************************************/ +void SSI_TWI_SendData(uint8_t Data) +{ + SSDAT = Data; +} + +/***************************************************** +*函数名称:uint8_t SSI_TWI_ReceiveData(void) +*函数功能:获得SSDAT中的值 +*入口参数:void +*出口参数: +uint8_t:TWI接收到的8位数据 +*****************************************************/ +uint8_t SSI_TWI_ReceiveData(void) +{ + return SSDAT; +} + +/************************************************** +*函数名称:void SSI_UART1_Init(uint32_t UART1Fsys, uint32_t BaudRate, UART1_Mode_TypeDef Mode, UART1_RX_TypeDef RxMode) +*函数功能:UART1初始化配置函数 +*入口参数: +uint32_t:UART1Fsys:系统时钟频率 +uint32_t:BaudRate:波特率 +UART1_Mode_TypeDef:Mode:UART1工作模式 +UART1_RX_TypeDef:RxMode:接收允许选择 +*出口参数:void +**************************************************/ +void SSI_UART1_Init(uint32_t UART1Fsys, + uint32_t BaudRate, UART1_Mode_TypeDef Mode, + UART1_RX_TypeDef RxMode) +{ + + #if defined (SC93F833x) || defined (SC93F843x) || defined (SC93F743x) + OTCON |= 0xC0; + SSCON0 = SSCON0 & 0X0F | Mode | RxMode; + SSCON2 = UART1Fsys / 16 / BaudRate / 256; + SSCON1 = UART1Fsys / 16 / BaudRate % 256; + + #else + OTCON |= 0xC0; + SSCON0 = SSCON0 & 0X0F | Mode | RxMode; + SSCON2 = UART1Fsys / BaudRate / 256; + SSCON1 = UART1Fsys / BaudRate % 256; + + #endif + + +} + +bit SSI_FLAG = 0; +/***************************************************** +*函数名称:void SSI_UART1_SendData8(uint8_t Data) +*函数功能:UART1发送8位数据 +*入口参数: +uint8_t:Data:发送的数据 +*出口参数:void +*****************************************************/ +void SSI_UART1_SendData8(uint8_t Data) +{ + SSI_FLAG = 1; + SSDAT = Data; + while( SSI_FLAG == 1 ); +} + + + +/***************************************************** +*函数名称:uint8_t SSI_UART1_ReceiveData8(void) +*函数功能:获得SSDAT中的值 +*入口参数:void +*出口参数: +uint8_t:UART接收到的8位数据 +*****************************************************/ +uint8_t SSI_UART1_ReceiveData8(void) +{ + return SSDAT; +} + +/***************************************************** +*函数名称:void SSI_UART1_SendData9(uint16_t Data) +*函数功能:UART1发送9位数据 +*入口参数: +uint16_t:Data:发送的数据 +*出口参数:void +*****************************************************/ +void SSI_UART1_SendData9(uint16_t Data) +{ + uint8_t Data_9Bit; + Data_9Bit = (Data >> 8); + + if(Data_9Bit) + { + SSCON0 |= 0x08; + } + else + { + SSCON0 &= 0xf7; + } + + SSDAT = (uint8_t)Data; +} + +/***************************************************** +*函数名称:uint16_t SSI_UART1_ReceiveData9(void) +*函数功能:获得SSDAT中的值及第九位的值 +*入口参数:void +*出口参数: +uint16_t:接收到的数据 +*****************************************************/ +uint16_t SSI_UART1_ReceiveData9(void) +{ + uint16_t Data9; + Data9 = SSDAT + ((uint16_t)(SSCON0 & 0X04) << 6); + SSCON0 &= 0XFB; + return Data9; +} + +/***************************************************** +*函数名称:void SSI_ITConfig(FunctionalState NewState, PriorityStatus Priority) +*函数功能:SSI中断初始化 +*入口参数: +FunctionalState:NewState:中断使能/关闭选择 +PriorityStatus:Priority:中断优先级选择 +*出口参数:void +*****************************************************/ +void SSI_ITConfig(FunctionalState NewState, + PriorityStatus Priority) +{ + if(NewState != DISABLE) + { + IE1 |= 0x01; + } + else + { + IE1 &= 0xFE; + } + + /************************************************************/ + if(Priority != LOW) + { + IP1 |= 0x01; + } + else + { + IP1 &= 0xFE; + } +} + +/***************************************************** +*函数名称:FlagStatus SSI_GetFlagStatus(SSI_Flag_TypeDef SSI_FLAG) +*函数功能:获得SSI标志状态 +*入口参数: +SSI_Flag_TypeDef:SSI_FLAG:所需获取的标志位 +*出口参数: +FlagStatus:SSI标志位置起状态 +*****************************************************/ +FlagStatus SSI_GetFlagStatus(SSI_Flag_TypeDef + SSI_FLAG) +{ + FlagStatus bitstatus = RESET; + + if((SSI_FLAG == SPI_FLAG_SPIF) || + (SSI_FLAG == SPI_FLAG_WCOL) || + (SSI_FLAG == SPI_FLAG_TXE)) + { + if((SSI_FLAG & SSCON1) != (uint8_t)RESET) + { + bitstatus = SET; + } + else + { + bitstatus = RESET; + } + } + else + { + if((SSI_FLAG & SSCON0) != (uint8_t)RESET) + { + bitstatus = SET; + } + else + { + bitstatus = RESET; + } + } + + return bitstatus; +} + +/***************************************************** +*函数名称:void SSI_ClearFlag(SSI_Flag_TypeDef SSI_FLAG) +*函数功能:清除SSI标志状态 +*入口参数: +SSI_Flag_TypeDef:SSI_FLAG:所需清除的标志位 +*出口参数:void +*****************************************************/ +void SSI_ClearFlag(SSI_Flag_TypeDef SSI_FLAG) +{ + if((SSI_FLAG == SPI_FLAG_SPIF) || + (SSI_FLAG == SPI_FLAG_WCOL) || + (SSI_FLAG == SPI_FLAG_TXE)) + { + SSCON1 &= (~SSI_FLAG); + } + else + { + SSCON0 &= (~SSI_FLAG); + } +} +#endif + +/******************* (C) COPYRIGHT 2020 SinOne Microelectronics *****END OF FILE****/ \ No newline at end of file diff --git a/Keil_C/FWLib/SC92F_Lib/src/sc92f_ssi0.c b/Keil_C/FWLib/SC92F_Lib/src/sc92f_ssi0.c new file mode 100644 index 0000000..e9ec582 --- /dev/null +++ b/Keil_C/FWLib/SC92F_Lib/src/sc92f_ssi0.c @@ -0,0 +1,392 @@ +//************************************************************ +// Copyright (c) 深圳市赛元微电子有限公司 +// 文件名称 : sc92f_ssi0.c +// 作者 : +// 模块功能 : SSI0固件库函数C文件 +// 局部函数列表: +// 最后更正日期: 2021/07/23 +// 版本 : V1.10000 +// 说明 : +//************************************************************* + +#include "sc92f_ssi.h" + +#if defined (SC92F742x) || defined (SC92F7490) +/************************************************** +*函数名称:void SSI0_DeInit(void) +*函数功能:SSI0相关寄存器复位至缺省值 +*入口参数:void +*出口参数:void +**************************************************/ +void SSI0_DeInit(void) +{ + OTCON &= 0XCF; + SS0CON0 = 0X00; + SS0CON1 = 0X00; + SS0CON2 = 0X00; + SS0DAT = 0X00; + IE &= (~0X10); + IP &= (~0X10); +} + +/************************************************** +*函数名称:void SSI0_SPI_Init(SPI_FirstBit_TypeDef FirstBit, SPI_BaudRatePrescaler_TypeDef BaudRatePrescaler,SPI_Mode_TypeDef Mode, + SPI_ClockPolarity_TypeDef ClockPolarity, SPI_ClockPhase_TypeDef ClockPhase,SPI_TXE_INT_TypeDef SPI_TXE_INT) +*函数功能:SPI初始化配置函数 +*入口参数: +SPI_FirstBit_TypeDef:FirstBit:优先传送位选择(MSB/LSB) +SPI_BaudRatePrescaler_TypeDef:BaudRatePrescaler:SPI时钟频率选择 +SPI_Mode_TypeDef:Mode:SPI工作模式选择 +SPI_ClockPolarity_TypeDef:ClockPolarityLSPI时钟极性选择 +SPI_ClockPhase_TypeDef:ClockPhase:SPI时钟相位选择 +SPI_TXE_INT_TypeDef:SPI_TXE_INT:发送缓存器中断允许选择 +*出口参数:void +**************************************************/ +void SSI0_SPI_Init(SPI_FirstBit_TypeDef FirstBit, + SPI_BaudRatePrescaler_TypeDef BaudRatePrescaler, + SPI_Mode_TypeDef Mode, + SPI_ClockPolarity_TypeDef ClockPolarity, + SPI_ClockPhase_TypeDef ClockPhase, + SPI_TXE_INT_TypeDef SPI_TXE_INT) +{ + OTCON = (OTCON & 0XCF) | 0X10; + SS0CON1 = SS0CON1 & (~0X05) | FirstBit | + SPI_TXE_INT; + SS0CON0 = SS0CON0 & 0X80 | BaudRatePrescaler | + Mode | ClockPolarity | ClockPhase; +} + +/***************************************************** +*函数名称:void SSI0_SPI_Cmd(FunctionalState NewState) +*函数功能:SPI功能开关函数 +*入口参数: +FunctionalState:NewState:功能启动/关闭选择 +*出口参数:void +*****************************************************/ +void SSI0_SPI_Cmd(FunctionalState NewState) +{ + if(NewState != DISABLE) + { + SS0CON0 |= 0X80; + } + else + { + SS0CON0 &= (~0X80); + } +} + +/***************************************************** +*函数名称:void SSI0_SPI_SendData(uint8_t Data) +*函数功能:SPI发送数据 +*入口参数: +uint8_t:Data:S{PI发送的8位数据 +*出口参数:void +*****************************************************/ +void SSI0_SPI_SendData(uint8_t Data) +{ + SS0DAT = Data; +} + +/***************************************************** +*函数名称:uint8_t SSI0_SPI_ReceiveData(void) +*函数功能:获得SS0DAT中的值 +*入口参数:void +*出口参数: +uint8_t:SPI接收到的8位数据 +*****************************************************/ +uint8_t SSI0_SPI_ReceiveData(void) +{ + return SS0DAT; +} + +/************************************************** +*函数名称:void SSI0_TWI_Init(uint8_t TWI_Address) +*函数功能:TWI初始化配置函数 +*入口参数: +uint8_t:TWI_Address:TWI作为从机时7位从机地址配置 +*出口参数:void +**************************************************/ +void SSI0_TWI_Init(uint8_t TWI_Address) +{ + OTCON = OTCON & 0XCF | 0X20; + SS0CON1 = TWI_Address << 1; +} + +/************************************************** +*函数名称:void SSI0_TWI_AcknowledgeConfig(FunctionalState NewState) +*函数功能:TWI接收应答使能函数 +*入口参数: +FunctionalState:NewState:接收应答使能/失能选择 +*出口参数:void +**************************************************/ +void SSI0_TWI_AcknowledgeConfig(FunctionalState + NewState) +{ + if (NewState != DISABLE) + { + SS0CON0 |= 0X08; + } + else + { + SS0CON0 &= 0XF7; + } +} + +/************************************************** +*函数名称:void SSI0_TWI_GeneralCallCmd(FunctionalState NewState) +*函数功能:TWI通用地址响应使能函数 +*入口参数: +FunctionalState:NewState:通用地址响应使能/失能选择 +*出口参数:void +**************************************************/ +void SSI0_TWI_GeneralCallCmd(FunctionalState + NewState) +{ + if (NewState != DISABLE) + { + SS0CON1 |= 0X01; + } + else + { + SS0CON1 &= 0XFE; + } +} + +/************************************************** +*函数名称:FlagStatus SSI0_GetTWIStatus(SSI_TWIState_TypeDef SSI_TWIState) +*函数功能:获取TWI状态机 +*入口参数: +SSI_TWIState_TypeDef:SSI_TWIState:TWI状态机状态 +*出口参数:void +**************************************************/ +FlagStatus SSI0_GetTWIStatus(SSI_TWIState_TypeDef SSI_TWIState) +{ + if((SS0CON0&0x07) == SSI_TWIState) + return SET; + else + return RESET; +} + +/***************************************************** +*函数名称:void SSI0_TWI_Cmd(FunctionalState NewState) +*函数功能:TWI功能开关函数 +*入口参数: +FunctionalState:NewState:功能启动/关闭选择 +*出口参数:void +*****************************************************/ +void SSI0_TWI_Cmd(FunctionalState NewState) +{ + if(NewState != DISABLE) + { + SS0CON0 |= 0X80; + } + else + { + SS0CON0 &= (~0X80); + } +} + +/***************************************************** +*函数名称:void SSI0_TWI_SendData(uint8_t Data) +*函数功能:TWI发送数据 +*入口参数: +uint8_t:Data:TWI发送的8位数据 +*出口参数:void +*****************************************************/ +void SSI0_TWI_SendData(uint8_t Data) +{ + SS0DAT = Data; +} + +/***************************************************** +*函数名称:uint8_t SSI0_TWI_ReceiveData(void) +*函数功能:获得SS0DAT中的值 +*入口参数:void +*出口参数: +uint8_t:TWI接收到的8位数据 +*****************************************************/ +uint8_t SSI0_TWI_ReceiveData(void) +{ + return SS0DAT; +} + +/************************************************** +*函数名称:void SSI0_UART_Init(uint32_t UARTFsys, uint32_t BaudRate, UART_Mode_TypeDef Mode, UART_RX_TypeDef RxMode) +*函数功能:UART初始化配置函数 +*入口参数: +uint32_t:UARTFsys:系统时钟频率 +uint32_t:BaudRate:波特率 +UART_Mode_TypeDef:Mode:UART1工作模式 +UART_RX_TypeDef:RxMode:接收允许选择 +*出口参数:void +**************************************************/ +void SSI0_UART_Init(uint32_t UARTFsys, + uint32_t BaudRate, UART_Mode_TypeDef Mode, + UART_RX_TypeDef RxMode) +{ + OTCON |= 0x30; + SS0CON0 = SS0CON0 & 0X0F | Mode | RxMode; + SS0CON2 = UARTFsys / BaudRate / 256; + SS0CON1 = UARTFsys / BaudRate % 256; +} + +/***************************************************** +*函数名称:void SSI0_UART_SendData8(uint8_t Data) +*函数功能:UART发送8位数据 +*入口参数: +uint8_t:Data:UART发送的8位数据 +*出口参数:void +*****************************************************/ +void SSI0_UART_SendData8(uint8_t Data) +{ + SS0DAT = Data; +} + +/***************************************************** +*函数名称:uint8_t SSI0_UART_ReceiveData8(void) +*函数功能:获得SS0DAT中的值 +*入口参数:void +*出口参数: +uint8_t:UART接收到的8位数据 +*****************************************************/ +uint8_t SSI0_UART_ReceiveData8(void) +{ + return SS0DAT; +} + +/***************************************************** +*函数名称:void SSI0_UART_SendData9(uint16_t Data) +*函数功能:UART发送9位数据 +*入口参数: +Data:发送的数据 +*出口参数:void +*****************************************************/ +void SSI0_UART_SendData9(uint16_t Data) +{ + uint8_t Data_9Bit; + Data_9Bit = (Data >> 8); + + if(Data_9Bit) + { + SS0CON0 |= 0x08; + } + else + { + SS0CON0 &= 0xf7; + } + + SS0DAT = (uint8_t)Data; +} + +/***************************************************** +*函数名称:uint16_t SSI0_UART_ReceiveData9(void) +*函数功能:获得SS0DAT中的值及第九位的值 +*入口参数:void +*出口参数: +uint16_t:接收到的数据 +*****************************************************/ +uint16_t SSI0_UART_ReceiveData9(void) +{ + uint16_t Data9; + Data9 = SS0DAT + ((uint16_t)(SS0CON0 & 0X04) << + 6); + SS0CON0 &= 0XFB; + return Data9; +} + +/***************************************************** +*函数名称:void SSI0_ITConfig(FunctionalState NewState, PriorityStatus Priority) +*函数功能:SSI0中断初始化 +*入口参数: +FunctionalState:NewState:中断使能/关闭选择 +PriorityStatus:Priority:中断优先级选择 +*出口参数:void +*****************************************************/ +void SSI0_ITConfig(FunctionalState NewState, + PriorityStatus Priority) +{ + //中断使能/关闭设置 + if(NewState != DISABLE) + { + IE |= 0x10; + } + else + { + IE &= ~0x10; + } + + //中断优先级设置 + if(Priority != LOW) + { + IP |= 0x10; + } + else + { + IP &= ~0x10; + } +} + +/***************************************************** +*函数名称:FlagStatus SSI0_GetFlagStatus(SSI_Flag_TypeDef SSI_FLAG) +*函数功能:获得SSI0标志状态 +*入口参数: +SSI_Flag_TypeDef:SSI_FLAG:所需获取的标志位 +*出口参数: +FlagStatus:SSI标志位置起状态 +*****************************************************/ +FlagStatus SSI0_GetFlagStatus(SSI_Flag_TypeDef + SSI_FLAG) +{ + FlagStatus bitstatus = RESET; + + if((SSI_FLAG == SPI_FLAG_SPIF) || + (SSI_FLAG == SPI_FLAG_WCOL) || + (SSI_FLAG == SPI_FLAG_TXE)) + { + if((SSI_FLAG & SS0CON1) != (uint8_t)RESET) + { + bitstatus = SET; + } + else + { + bitstatus = RESET; + } + } + else + { + if((SSI_FLAG & SS0CON0) != (uint8_t)RESET) + { + bitstatus = SET; + } + else + { + bitstatus = RESET; + } + } + + return bitstatus; +} + +/***************************************************** +*函数名称:void SSI0_ClearFlag(SSI_Flag_TypeDef SSI_FLAG) +*函数功能:清除SSI0标志状态 +*入口参数: +SSI_Flag_TypeDef:SSI_FLAG:所需清除的标志位 +*出口参数:void +*****************************************************/ +void SSI0_ClearFlag(SSI_Flag_TypeDef SSI_FLAG) +{ + if((SSI_FLAG == SPI_FLAG_SPIF) || + (SSI_FLAG == SPI_FLAG_WCOL) || + (SSI_FLAG == SPI_FLAG_TXE)) + { + SS0CON1 &= (~SSI_FLAG); + } + else + { + SS0CON0 &= (~SSI_FLAG); + } +} +#endif + +/******************* (C) COPYRIGHT 2021 SinOne Microelectronics *****END OF FILE****/ \ No newline at end of file diff --git a/Keil_C/FWLib/SC92F_Lib/src/sc92f_ssi1.c b/Keil_C/FWLib/SC92F_Lib/src/sc92f_ssi1.c new file mode 100644 index 0000000..afb2d84 --- /dev/null +++ b/Keil_C/FWLib/SC92F_Lib/src/sc92f_ssi1.c @@ -0,0 +1,392 @@ +//************************************************************ +// Copyright (c) 深圳市赛元微电子有限公司 +// 文件名称 : sc92f_ssi1.c +// 作者 : +// 模块功能 : SSI1固件库函数C文件 +// 局部函数列表: +// 最后更正日期: 2021/09/06 +// 版本 : V1.0001 +// 说明 : +//************************************************************* + +#include "sc92f_ssi.h" + +#if defined (SC92F742x) || defined (SC92F7490) +/************************************************** +*函数名称:void SSI1_DeInit(void) +*函数功能:SSI1相关寄存器复位至缺省值 +*入口参数:void +*出口参数:void +**************************************************/ +void SSI1_DeInit(void) +{ + OTCON &= 0X3F; + SS1CON0 = 0X00; + SS1CON1 = 0X00; + SS1CON2 = 0X00; + SS1DAT = 0X00; + IE1 &= (~0X01); + IP1 &= (~0X01); +} + +/************************************************** +*函数名称:void SSI1_SPI_Init(SPI_FirstBit_TypeDef FirstBit, SPI_BaudRatePrescaler_TypeDef BaudRatePrescaler,SPI_Mode_TypeDef Mode, + SPI_ClockPolarity_TypeDef ClockPolarity, SPI_ClockPhase_TypeDef ClockPhase,SPI_TXE_INT_TypeDef SPI_TXE_INT) +*函数功能:SPI初始化配置函数 +*入口参数: +SPI_FirstBit_TypeDef:FirstBit:优先传送位选择(MSB/LSB) +SPI_BaudRatePrescaler_TypeDef:BaudRatePrescaler:SPI时钟频率选择 +SPI_Mode_TypeDef:Mode:SPI工作模式选择 +SPI_ClockPolarity_TypeDef:ClockPolarityLSPI时钟极性选择 +SPI_ClockPhase_TypeDef:ClockPhase:SPI时钟相位选择 +SPI_TXE_INT_TypeDef:SPI_TXE_INT:发送缓存器中断允许选择 +*出口参数:void +**************************************************/ +void SSI1_SPI_Init(SPI_FirstBit_TypeDef FirstBit, + SPI_BaudRatePrescaler_TypeDef BaudRatePrescaler, + SPI_Mode_TypeDef Mode, + SPI_ClockPolarity_TypeDef ClockPolarity, + SPI_ClockPhase_TypeDef ClockPhase, + SPI_TXE_INT_TypeDef SPI_TXE_INT) +{ + OTCON = (OTCON & 0X3F) | 0X40; + SS1CON1 = SS1CON1 & (~0X05) | FirstBit | + SPI_TXE_INT; + SS1CON0 = SS1CON0 & 0X80 | BaudRatePrescaler | + Mode | ClockPolarity | ClockPhase; +} + +/***************************************************** +*函数名称:void SSI1_SPI_Cmd(FunctionalState NewState) +*函数功能:SPI功能开关函数 +*入口参数: +FunctionalState:NewState:功能启动/关闭选择 +*出口参数:void +*****************************************************/ +void SSI1_SPI_Cmd(FunctionalState NewState) +{ + if(NewState != DISABLE) + { + SS1CON0 |= 0X80; + } + else + { + SS1CON0 &= (~0X80); + } +} + +/***************************************************** +*函数名称:void SSI1_SPI_SendData(uint8_t Data) +*函数功能:SPI发送数据 +*入口参数: +uint8_t:Data:S{PI发送的8位数据 +*出口参数:void +*****************************************************/ +void SSI1_SPI_SendData(uint8_t Data) +{ + SS1DAT = Data; +} + +/***************************************************** +*函数名称:uint8_t SSI1_SPI_ReceiveData(void) +*函数功能:获得SS1DAT中的值 +*入口参数:void +*出口参数: +uint8_t:SPI接收到的8位数据 +*****************************************************/ +uint8_t SSI1_SPI_ReceiveData(void) +{ + return SS1DAT; +} + +/************************************************** +*函数名称:void SSI1_TWI_Init(uint8_t TWI_Address) +*函数功能:TWI初始化配置函数 +*入口参数: +uint8_t:TWI_Address:TWI作为从机时7位从机地址配置 +*出口参数:void +**************************************************/ +void SSI1_TWI_Init(uint8_t TWI_Address) +{ + OTCON = OTCON & 0X3F | 0X80; + SS1CON1 = TWI_Address << 1; +} + +/************************************************** +*函数名称:void SSI1_TWI_AcknowledgeConfig(FunctionalState NewState) +*函数功能:TWI接收应答使能函数 +*入口参数: +FunctionalState:NewState:接收应答使能/失能选择 +*出口参数:void +**************************************************/ +void SSI1_TWI_AcknowledgeConfig(FunctionalState + NewState) +{ + if (NewState != DISABLE) + { + SS1CON0 |= 0X08; + } + else + { + SS1CON0 &= 0XF7; + } +} + +/************************************************** +*函数名称:void SSI1_TWI_GeneralCallCmd(FunctionalState NewState) +*函数功能:TWI通用地址响应使能函数 +*入口参数: +FunctionalState:NewState:通用地址响应使能/失能选择 +*出口参数:void +**************************************************/ +void SSI1_TWI_GeneralCallCmd(FunctionalState + NewState) +{ + if (NewState != DISABLE) + { + SS1CON1 |= 0X01; + } + else + { + SS1CON1 &= 0XFE; + } +} + +/***************************************************** +*函数名称:void SSI1_TWI_Cmd(FunctionalState NewState) +*函数功能:TWI功能开关函数 +*入口参数: +FunctionalState:NewState:功能启动/关闭选择 +*出口参数:void +*****************************************************/ +void SSI1_TWI_Cmd(FunctionalState NewState) +{ + if(NewState != DISABLE) + { + SS1CON0 |= 0X80; + } + else + { + SS1CON0 &= (~0X80); + } +} + +/************************************************** +*函数名称:FlagStatus SSI0_GetTWIStatus(SSI_TWIState_TypeDef SSI_TWIState) +*函数功能:获取TWI状态机 +*入口参数: +SSI_TWIState_TypeDef:SSI_TWIState:TWI状态机状态 +*出口参数:void +**************************************************/ +FlagStatus SSI1_GetTWIStatus(SSI_TWIState_TypeDef SSI_TWIState) +{ + if((SS1CON0&0x07) == SSI_TWIState) + return SET; + else + return RESET; +} + +/***************************************************** +*函数名称:void SSI1_TWI_SendData(uint8_t Data) +*函数功能:TWI发送数据 +*入口参数: +uint8_t:Data:TWI发送的8位数据 +*出口参数:void +*****************************************************/ +void SSI1_TWI_SendData(uint8_t Data) +{ + SS1DAT = Data; +} + +/***************************************************** +*函数名称:uint8_t SSI1_TWI_ReceiveData(void) +*函数功能:获得SS1DAT中的值 +*入口参数:void +*出口参数: +uint8_t:TWI接收到的8位数据 +*****************************************************/ +uint8_t SSI1_TWI_ReceiveData(void) +{ + return SS1DAT; +} + +/************************************************** +*函数名称:void SSI1_UART_Init(uint32_t UARTFsys, uint32_t BaudRate, UART_Mode_TypeDef Mode, UART_RX_TypeDef RxMode) +*函数功能:UART初始化配置函数 +*入口参数: +uint32_t:UARTFsys:系统时钟频率 +uint32_t:BaudRate:波特率 +UART_Mode_TypeDef:Mode:UART1工作模式 +UART_RX_TypeDef:RxMode:接收允许选择 +*出口参数:void +**************************************************/ +void SSI1_UART_Init(uint32_t UARTFsys, + uint32_t BaudRate, UART_Mode_TypeDef Mode, + UART_RX_TypeDef RxMode) +{ + OTCON |= 0xC0; + SS1CON0 = SS1CON0 & 0X0F | Mode | RxMode; + SS1CON2 = UARTFsys / BaudRate / 256; + SS1CON1 = UARTFsys / BaudRate % 256; +} + +/***************************************************** +*函数名称:void SSI1_UART_SendData8(uint8_t Data) +*函数功能:UART发送8位数据 +*入口参数: +uint8_t:Data:UART发送的8位数据 +*出口参数:void +*****************************************************/ +void SSI1_UART_SendData8(uint8_t Data) +{ + SS1DAT = Data; +} + +/***************************************************** +*函数名称:uint8_t SSI1_UART_ReceiveData8(void) +*函数功能:获得SS0DAT中的值 +*入口参数:void +*出口参数: +uint8_t:UART接收到的8位数据 +*****************************************************/ +uint8_t SSI1_UART_ReceiveData8(void) +{ + return SS1DAT; +} + +/***************************************************** +*函数名称:void SSI1_UART_SendData9(uint16_t Data) +*函数功能:UART发送9位数据 +*入口参数: +Data:发送的数据 +*出口参数:void +*****************************************************/ +void SSI1_UART_SendData9(uint16_t Data) +{ + uint8_t Data_9Bit; + Data_9Bit = (Data >> 8); + + if(Data_9Bit) + { + SS1CON0 |= 0x08; + } + else + { + SS1CON0 &= 0xf7; + } + + SS1DAT = (uint8_t)Data; +} + +/***************************************************** +*函数名称:uint16_t SSI1_UART_ReceiveData9(void) +*函数功能:获得SS1DAT中的值及第九位的值 +*入口参数:void +*出口参数: +uint16_t:接收到的数据 +*****************************************************/ +uint16_t SSI1_UART_ReceiveData9(void) +{ + uint16_t Data9; + Data9 = SS1DAT + ((uint16_t)(SS1CON0 & 0X04) << + 6); + SS1CON0 &= 0XFB; + return Data9; +} + +/***************************************************** +*函数名称:void SSI1_ITConfig(FunctionalState NewState, PriorityStatus Priority) +*函数功能:SSI1中断初始化 +*入口参数: +FunctionalState:NewState:中断使能/关闭选择 +PriorityStatus:Priority:中断优先级选择 +*出口参数:void +*****************************************************/ +void SSI1_ITConfig(FunctionalState NewState, + PriorityStatus Priority) +{ + //中断使能/关闭设置 + if(NewState != DISABLE) + { + IE1 |= 0x01; + } + else + { + IE1 &= 0xFE; + } + + //中断优先级设置 + if(Priority != LOW) + { + IP1 |= 0x01; + } + else + { + IP1 &= 0xFE; + } +} + +/***************************************************** +*函数名称:FlagStatus SSI1_GetFlagStatus(SSI_Flag_TypeDef SSI_FLAG) +*函数功能:获得SSI1标志状态 +*入口参数: +SSI_Flag_TypeDef:SSI_FLAG:所需获取的标志位 +*出口参数: +FlagStatus:SSI标志位置起状态 +*****************************************************/ +FlagStatus SSI1_GetFlagStatus(SSI_Flag_TypeDef + SSI_FLAG) +{ + FlagStatus bitstatus = RESET; + + if((SSI_FLAG == SPI_FLAG_SPIF) || + (SSI_FLAG == SPI_FLAG_WCOL) || + (SSI_FLAG == SPI_FLAG_TXE)) + { + if((SSI_FLAG & SS1CON1) != (uint8_t)RESET) + { + bitstatus = SET; + } + else + { + bitstatus = RESET; + } + } + else + { + if((SSI_FLAG & SS1CON0) != (uint8_t)RESET) + { + bitstatus = SET; + } + else + { + bitstatus = RESET; + } + } + + return bitstatus; +} + +/***************************************************** +*函数名称:void SSI1_ClearFlag(SSI_Flag_TypeDef SSI_FLAG) +*函数功能:清除SSI1标志状态 +*入口参数: +SSI_Flag_TypeDef:SSI_FLAG:所需清除的标志位 +*出口参数:void +*****************************************************/ +void SSI1_ClearFlag(SSI_Flag_TypeDef SSI_FLAG) +{ + if((SSI_FLAG == SPI_FLAG_SPIF) || + (SSI_FLAG == SPI_FLAG_WCOL) || + (SSI_FLAG == SPI_FLAG_TXE)) + { + SS1CON1 &= (~SSI_FLAG); + } + else + { + SS1CON0 &= (~SSI_FLAG); + } +} +#endif + +/******************* (C) COPYRIGHT 2018 SinOne Microelectronics *****END OF FILE****/ \ No newline at end of file diff --git a/Keil_C/FWLib/SC92F_Lib/src/sc92f_timer0.c b/Keil_C/FWLib/SC92F_Lib/src/sc92f_timer0.c new file mode 100644 index 0000000..a178d70 --- /dev/null +++ b/Keil_C/FWLib/SC92F_Lib/src/sc92f_timer0.c @@ -0,0 +1,165 @@ +//************************************************************ +// Copyright (c) 深圳市赛元微电子有限公司 +// 文件名称: sc92f_tiemr0.c +// 作者: 赛元应用团队 +// 模块功能: TIMER0固件库函数C文件 +// 最后更正日期: 2022年3月23日 +// 版本: V1.10002 +// 说明: +//************************************************************* + +#include "sc92f_timer0.h" + +/************************************************** +*函数名称:void TIM0_DeInit(void) +*函数功能:TIMER0相关寄存器复位至缺省值 +*入口参数:void +*出口参数:void +**************************************************/ +void TIM0_DeInit(void) +{ + TMOD &= 0XF0; + TCON &= 0XCD; + TMCON &= 0XFE; + TH0 = 0X00; + TL0 = 0X00; + ET0 = 0; + IPT0 = 0; +} + +/************************************************** +*函数名称:void TIM0_TimeBaseInit(TIM0_PresSel_TypeDef TIM0_PrescalerSelection, TIM0_CountMode_TypeDef TIM0_CountMode) +*函数功能:TIMER0基本设置配置函数 +*入口参数: +TIM0_PresSel_TypeDef:TIM0_PrescalerSelection:预分频选择 +TIM0_CountMode_TypeDef:TIM0_CountMode:计数/定时模式选择 +*出口参数:void +**************************************************/ +void TIM0_TimeBaseInit(TIM0_PresSel_TypeDef + TIM0_PrescalerSelection, + TIM0_CountMode_TypeDef TIM0_CountMode) +{ + if(TIM0_PrescalerSelection == + TIM0_PRESSEL_FSYS_D12) + { + TMCON &= 0XFE; + } + else + if(TIM0_PrescalerSelection == + TIM0_PRESSEL_FSYS_D1) + { + TMCON |= 0X01; + } + + if(TIM0_CountMode == TIM0_MODE_TIMER) + { + TMOD &= 0xFB; + } + else + if(TIM0_CountMode == TIM0_MODE_COUNTER) + { + TMOD |= 0x04; + } +} + +/************************************************** +*函数名称:void TIM0_WorkMode0Config(uint16_t TIM0_SetCounter) +*函数功能:TIMER0工作模式0配置函数 +*入口参数: +uint16_t:TIM0_SetCounter:配置计数初值 +*出口参数:void +**************************************************/ +void TIM0_WorkMode0Config(uint16_t + TIM0_SetCounter) +{ + TMOD &= 0XFC; + TL0 = (uint8_t)TIM0_SetCounter; + TH0 = (TIM0_SetCounter >> 5); +} + +/************************************************** +*函数名称:void TIM0_WorkMode1Config(uint16_t TIM0_SetCounter) +*函数功能:TIMER0工作模式1配置函数 +*入口参数: +uint16_t:TIM0_SetCounter:配置计数初值 +*出口参数:void +**************************************************/ +void TIM0_WorkMode1Config(uint16_t + TIM0_SetCounter) +{ + TMOD &= 0XFC; + TMOD |= 0X01; + TL0 = TIM0_SetCounter % 256; + TH0 = TIM0_SetCounter / 256; +} + +/************************************************** +*函数名称:void TIM0_WorkMode2Config(uint8_t TIM0_SetCounter) +*函数功能:TIMER0工作模式2配置函数 +*入口参数: +uint8_t:TIM0_SetCounter:配置计数初值 +*出口参数:void +**************************************************/ +void TIM0_WorkMode2Config(uint8_t TIM0_SetCounter) +{ + TMOD &= 0XFC; + TMOD |= 0X02; + TL0 = TIM0_SetCounter; + TH0 = TIM0_SetCounter; +} + +/************************************************** +*函数名称:void TIM0_WorkModeConfig(TIM0_WorkMode_TypeDef TIM0_WorkMode, uint16_t TIM0_SetCounter1, uint16_t TIM0_SetCounter2) +*函数功能:TIMER0工作模式配置函数 +*入口参数: +TIM0_WorkMode_TypeDef:TIM0_WorkMode:TIMER0工作模式选择 +uint16_t:TIM0_SetCounter1:TIMER0计数初值配置1 +uint16_t:TIM0_SetCounter2:TIMER0计数初值配置2 +*出口参数:void +**************************************************/ +void TIM0_WorkModeConfig(TIM0_WorkMode_TypeDef + TIM0_WorkMode, uint16_t TIM0_SetCounter1, + uint16_t TIM0_SetCounter2) +{ + switch (TIM0_WorkMode) + { + case TIM0_WORK_MODE0: + TIM0_WorkMode0Config(TIM0_SetCounter1); + break; + + case TIM0_WORK_MODE1: + TIM0_WorkMode1Config(TIM0_SetCounter1); + break; + + case TIM0_WORK_MODE2: + TIM0_WorkMode2Config(TIM0_SetCounter1); + break; + + case TIM0_WORK_MODE3: + TIM0_WorkMode3Config(TIM0_SetCounter1, + TIM0_SetCounter2); + break; + default: + break; + } +} + +/************************************************** +*函数名称:void TIM0_WorkMode3Config(uint8_t TIM0_SetCounter, uint8_t TIM1_SetCounter) +*函数功能:TIMER0工作模式3配置函数 +*入口参数: +uint8_t:TIM0_SetCounter:配置TIMER0_TL0计数初值 +uint8_t:TIM1_SetCounter +配置TIMER0_TH0计数初值 +*出口参数:void +**************************************************/ +void TIM0_WorkMode3Config(uint8_t TIM0_SetCounter, + uint8_t TIM1_SetCounter) +{ + TMOD |= 0X03; + TL0 = TIM0_SetCounter; + TH0 = TIM1_SetCounter; +} + + +/******************* (C) COPYRIGHT 2020 SinOne Microelectronics *****END OF FILE****/ \ No newline at end of file diff --git a/Keil_C/FWLib/SC92F_Lib/src/sc92f_timer1.c b/Keil_C/FWLib/SC92F_Lib/src/sc92f_timer1.c new file mode 100644 index 0000000..cc1974b --- /dev/null +++ b/Keil_C/FWLib/SC92F_Lib/src/sc92f_timer1.c @@ -0,0 +1,140 @@ +//************************************************************ +// Copyright (c) 深圳市赛元微电子有限公司 +// 文件名称: sc92f_timer1.c +// 作者: 赛元应用团队 +// 模块功能: TIMER1固件库函数C文件 +// 局部函数列表: +// 最后更正日期: 2022年3月23日 +// 版本: V1.10001 +// 说明:该文件仅适用于SC92F系列芯片 +//************************************************************* +#include "sc92f_timer1.h" + +/************************************************** +*函数名称:void TIM1_DeInit(void) +*函数功能:TIMER1相关寄存器复位至缺省值 +*入口参数:void +*出口参数:void +**************************************************/ +void TIM1_DeInit(void) +{ + TMOD &= 0X0F; + TCON &= 0X37; + TMCON &= 0XFD; + TH1 = 0X00; + TL1 = 0X00; + ET1 = 0; + IPT1 = 0; +} + +/************************************************** +*函数名称:void TIM1_TimeBaseInit(TIM1_PresSel_TypeDef TIM1_PrescalerSelection, TIM1_CountMode_TypeDef TIM1_CountMode) +*函数功能:TIMER1基本设置配置函数 +*入口参数: +TIM1_PresSel_TypeDef:TIM1_PrescalerSelection:预分频选择 +TIM1_CountMode_TypeDef:TIM1_CountMode:计数/定时模式选择 +*出口参数:void +**************************************************/ +void TIM1_TimeBaseInit(TIM1_PresSel_TypeDef TIM1_PrescalerSelection, + TIM1_CountMode_TypeDef TIM1_CountMode) +{ + //判断是否需要进行分频 + if(TIM1_PrescalerSelection == TIM1_PRESSEL_FSYS_D12) + { + TMCON &= 0xFD; + } + else if(TIM1_PrescalerSelection == TIM1_PRESSEL_FSYS_D1) + { + TMCON |= 0x02; + } + + //TIM1工作模式 + if(TIM1_CountMode == TIM1_MODE_TIMER) + { + TMOD &= 0xBF; + } + else if(TIM1_CountMode == TIM1_MODE_COUNTER) + { + TMOD |= 0x40; + } +} + +/************************************************** +*函数名称:void TIM1_WorkMode0Config(uint16_t TIM1_SetCounter) +*函数功能:TIMER1工作模式0配置函数 +*入口参数: +uint16_t:TIM1_SetCounter:配置计数初值 +*出口参数:void +**************************************************/ +void TIM1_WorkMode0Config(uint16_t + TIM1_SetCounter) +{ + TMOD &= 0XCF; + TL1 = (uint8_t)TIM1_SetCounter; + TH1 = (TIM1_SetCounter >> 5); +} + +/************************************************** +*函数名称:void TIM1_WorkMode1Config(uint16_t TIM1_SetCounter) +*函数功能:TIMER1工作模式1配置函数 +*入口参数: +uint16_t:TIM1_SetCounter:配置计数初值 +*出口参数:void +**************************************************/ +void TIM1_WorkMode1Config(uint16_t + TIM1_SetCounter) +{ + TMOD &= 0XCF; + TMOD |= 0X10; + TL1 = TIM1_SetCounter % 256; + TH1 = TIM1_SetCounter / 256; +} + +/************************************************** +*函数名称:void TIM1_WorkMode2Config(uint8_t TIM1_SetCounter) +*函数功能:TIMER1工作模式2配置函数 +*入口参数: +uint8_t:TIM1_SetCounter:配置计数初值 +*出口参数:void +**************************************************/ +void TIM1_WorkMode2Config(uint8_t TIM1_SetCounter) +{ + TMOD &= 0XCF; + TMOD |= 0X20; + TL1 = TIM1_SetCounter; + TH1 = TIM1_SetCounter; +} + +/************************************************** +*函数名称:void TIM1_WorkModeConfig(TIM1_WorkMode_TypeDef TIM1_WorkMode, uint16_t TIM1_SetCounter) +*函数功能:TIMER1工作模式配置函数 +*入口参数: +TIM1_WorkMode_TypeDef:TIM1_WorkMode:TIMER1工作模式选择 +uint16_t:TIM1_SetCounter:TIMER1计数初值配置 +*出口参数:void +**************************************************/ +void TIM1_WorkModeConfig(TIM1_WorkMode_TypeDef + TIM1_WorkMode, uint16_t TIM1_SetCounter) +{ + switch(TIM1_WorkMode) + { + case TIM1_WORK_MODE0: + TIM1_WorkMode0Config(TIM1_SetCounter); + break; + + case TIM1_WORK_MODE1: + TIM1_WorkMode1Config(TIM1_SetCounter); + break; + + case TIM1_WORK_MODE2: + TIM1_WorkMode2Config(TIM1_SetCounter); + break; + + default: + break; + } +} + + + +/******************* (C) COPYRIGHT 2020 SinOne Microelectronics *****END OF FILE****/ \ No newline at end of file diff --git a/Keil_C/FWLib/SC92F_Lib/src/sc92f_timer2.c b/Keil_C/FWLib/SC92F_Lib/src/sc92f_timer2.c new file mode 100644 index 0000000..a9ea6a1 --- /dev/null +++ b/Keil_C/FWLib/SC92F_Lib/src/sc92f_timer2.c @@ -0,0 +1,541 @@ +//************************************************************ +// Copyright (c) 娣卞湷甯傝禌鍏冨井鐢靛瓙鏈夐檺鍏徃 +// 鏂囦欢鍚嶇О: sc92f_timer2.c +// 浣滆: 璧涘厓搴旂敤鍥㈤槦 +// 妯″潡鍔熻兘: TIMER2鍥轰欢搴撳嚱鏁癈鏂囦欢 +// 鏈鍚庢洿姝f棩鏈: 2022骞3鏈23鏃 +// 鐗堟湰: V1.10004 +// 璇存槑: 璇ユ枃浠朵粎閫傜敤浜嶴C92F绯诲垪鑺墖 +//************************************************************* + +#include "sc92f_timer2.h" + +#if !defined (SC92L853x) && !defined(SC92L753x) + +/************************************************** +*鍑芥暟鍚嶇О:void TIM2_DeInit(void) +*鍑芥暟鍔熻兘:TIMER2鐩稿叧瀵勫瓨鍣ㄥ浣嶈嚦缂虹渷鍊 +*鍏ュ彛鍙傛暟:void +*鍑哄彛鍙傛暟:void +**************************************************/ +void TIM2_DeInit(void) +{ + T2CON = 0X00; +#if !defined (SC92F730x) && !defined (SC92F827X) && !defined (SC92F837X) && !defined (SC92F725X) && !defined (SC92F735X) + T2MOD = 0X00; +#endif + TMCON &= 0XFB; + TH2 = 0X00; + TL2 = 0X00; + RCAP2H = 0X00; + RCAP2L = 0X00; + ET2 = 0; + IPT2 = 0; +} + +/************************************************** +*鍑芥暟鍚嶇О:void TIM2_TimeBaseInit(TIM2_PresSel_TypeDef TIM2_PrescalerSelection,TIM2_CountMode_TypeDef TIM2_CountMode, TIM2_CountDirection_TypeDef TIM2_CountDirection) +*鍑芥暟鍔熻兘:TIMER2鍩烘湰璁剧疆閰嶇疆鍑芥暟 +*鍏ュ彛鍙傛暟: +TIM2_PresSel_TypeDef:TIM2_PrescalerSelection:棰勫垎棰戦夋嫨 +TIM2_CountMode_TypeDef:TIM2_CountMode:璁℃暟/瀹氭椂妯″紡閫夋嫨 +TIM2_CountDirection_TypeDef:TIM2_CountDirection:璁℃暟鏂瑰悜閫夋嫨 +*鍑哄彛鍙傛暟:void +**************************************************/ +void TIM2_TimeBaseInit(TIM2_PresSel_TypeDef + TIM2_PrescalerSelection, + TIM2_CountMode_TypeDef TIM2_CountMode, + TIM2_CountDirection_TypeDef TIM2_CountDirection) +{ + if(TIM2_PrescalerSelection == TIM2_PRESSEL_FSYS_D12) + { + TMCON &= 0XFB; + } + else if(TIM2_PrescalerSelection == TIM2_PRESSEL_FSYS_D1) + { + TMCON |= 0X04; + } + + + +#if !defined (SC92F730x) && !defined (SC92F827X) && !defined (SC92F837X) && !defined (SC92F725X) && !defined (SC92F735X)\ + && !defined (SC92F825X) && !defined (SC92F835X) + + if(TIM2_CountDirection == TIM2_COUNTDIRECTION_UP) + { + T2MOD &= 0XFE; + } + else if(TIM2_CountDirection == + TIM2_COUNTDIRECTION_DOWN_UP) + { + T2MOD |= 0X01; + } + + if(TIM2_CountMode == TIM2_MODE_TIMER) + { + T2CON &= 0XFD; + } + else if(TIM2_CountMode == TIM2_MODE_COUNTER) + { + T2CON |= 0X02; + } + + +#else + TIM2_CountMode = 1; + TIM2_CountDirection = 0; +#endif + +} + + +/************************************************** +*鍑芥暟鍚嶇О:void TIM2_WorkMode1Config(uint16_t TIM2_SetCounter) +*鍑芥暟鍔熻兘:TIMER2宸ヤ綔妯″紡1閰嶇疆鍑芥暟 +*鍏ュ彛鍙傛暟: +uint16_t:TIM2_SetCounter:閰嶇疆璁℃暟鍒濆 +*鍑哄彛鍙傛暟:void +**************************************************/ +void TIM2_WorkMode1Config(uint16_t + TIM2_SetCounter) +{ + RCAP2L = TIM2_SetCounter % 256; + RCAP2H = TIM2_SetCounter / 256; + TL2 = RCAP2L; + TH2 = RCAP2H; +} + +/************************************************** +*鍑芥暟鍚嶇О:void TIM2_WorkModeConfig(TIM2_WorkMode_TypeDef TIM2_WorkMode, uint16_t TIM2_SetCounter) +*鍑芥暟鍔熻兘:TIMER2宸ヤ綔妯″紡閰嶇疆鍑芥暟 +*鍏ュ彛鍙傛暟: +TIM2_WorkMode_TypeDef:TIM2_WorkMode:TIMER2宸ヤ綔妯″紡閫夋嫨 +uint16_t:TIM2_SetCounter:TIMER2璁℃暟鍒濆奸厤缃 +*鍑哄彛鍙傛暟:void +**************************************************/ +void TIM2_WorkModeConfig(TIM2_WorkMode_TypeDef + TIM2_WorkMode, uint16_t TIM2_SetCounter) +{ + switch(TIM2_WorkMode) + { + case TIM2_WORK_MODE1: + TIM2_WorkMode1Config(TIM2_SetCounter); + break; +#if !defined (SC92F730x) && !defined (SC92F827X) && !defined (SC92F837X) && !defined (SC92F725X) && !defined (SC92F735X) && !defined (SC92F725X) + case TIM2_WORK_MODE0: + TIM2_WorkMode0Config(TIM2_SetCounter); + break; + + case TIM2_WORK_MODE3: + TIM2_WorkMode3Config(TIM2_SetCounter); + break; +#endif + default: + break; + } +} + +#if !defined (SC92F730x) && !defined (SC92F827X) && !defined (SC92F837X) && !defined (SC92F725X) && !defined (SC92F735X) +/************************************************** +*鍑芥暟鍚嶇О:void TIM2_WorkMode0Config(uint16_t TIM2_SetCounter) +*鍑芥暟鍔熻兘:TIMER2宸ヤ綔妯″紡0閰嶇疆鍑芥暟 +*鍏ュ彛鍙傛暟: +uint16_t:TIM2_SetCounter:閰嶇疆璁℃暟鍒濆 +*鍑哄彛鍙傛暟:void +**************************************************/ +void TIM2_WorkMode0Config(uint16_t + TIM2_SetCounter) +{ + T2CON |= 0x09; + TL2 = TIM2_SetCounter % 256; + TH2 = TIM2_SetCounter / 256; +} + +/************************************************** +*鍑芥暟鍚嶇О:void TIM2_WorkMode3Config(uint16_t TIM2_SetCounter) +*鍑芥暟鍔熻兘:TIMER2宸ヤ綔妯″紡3閰嶇疆鍑芥暟 +*鍏ュ彛鍙傛暟: +uint16_t:TIM2_SetCounter:閰嶇疆璁℃暟鍒濆 +*鍑哄彛鍙傛暟:void +**************************************************/ +void TIM2_WorkMode3Config(uint16_t + TIM2_SetCounter) +{ + RCAP2L = TIM2_SetCounter % 256; + RCAP2H = TIM2_SetCounter / 256; + T2MOD |= 0X02; +} + +/***************************************************** +*鍑芥暟鍚嶇О:void TIM2_SetEXEN2(FunctionalState NewState) +*鍑芥暟鍔熻兘:TIMER2_EXEN2閰嶇疆鍑芥暟 +*鍏ュ彛鍙傛暟: +FunctionalState:NewState:EXEN2浣胯兘閫夋嫨 +*鍑哄彛鍙傛暟:void +*****************************************************/ +void TIM2_SetEXEN2(FunctionalState NewState) +{ + if(NewState == DISABLE) + { + EXEN2 = 0; + } + else + { + EXEN2 = 1; + } +} +#endif + +/***************************************************** +*鍑芥暟鍚嶇О:void TIM2_Cmd(FunctionalState NewState) +*鍑芥暟鍔熻兘:TIMER2鍔熻兘寮鍏冲嚱鏁 +*鍏ュ彛鍙傛暟: +FunctionalState:NewState:鍔熻兘鍚姩/鍏抽棴閫夋嫨 +*鍑哄彛鍙傛暟:void +*****************************************************/ +void TIM2_Cmd(FunctionalState NewState) +{ + if(NewState == DISABLE) + { + TR2 = 0; + } + else + { + TR2 = 1; + } +} + +/***************************************************** +*鍑芥暟鍚嶇О:void TIM2_ITConfig(FunctionalState NewState, PriorityStatus Priority) +*鍑芥暟鍔熻兘:TIMER2涓柇鍒濆鍖 +*鍏ュ彛鍙傛暟: +FunctionalState:NewState:涓柇浣胯兘/鍏抽棴閫夋嫨 +PriorityStatus:Priority:涓柇浼樺厛绾ч夋嫨 +*鍑哄彛鍙傛暟:void +*****************************************************/ +void TIM2_ITConfig(FunctionalState NewState, + PriorityStatus Priority) +{ + if(NewState == DISABLE) + { + ET2 = 0; + } + else + { + ET2 = 1; + } + + /************************************************************/ + if(Priority == LOW) + { + IPT2 = 0; + } + else + { + IPT2 = 1; + } +} + +/***************************************************** +*鍑芥暟鍚嶇О:FlagStatus TIM2_GetFlagStatus(void) +*鍑芥暟鍔熻兘:鑾峰緱TIMER2涓柇鏍囧織鐘舵 +*鍏ュ彛鍙傛暟:void +*鍑哄彛鍙傛暟: +FlagStatus:TIMER2涓柇鏍囧織鐘舵 +*****************************************************/ +FlagStatus TIM2_GetFlagStatus(TIM2_Flag_TypeDef + TIM2_Flag) +{ + FlagStatus status = RESET; + + if((TIM2_Flag & T2CON) != (uint8_t)RESET) + { + status = SET; + } + else + { + status = RESET; + } + + return status; +} + +/***************************************************** +*鍑芥暟鍚嶇О:void TIM2_ClearFlag(void) +*鍑芥暟鍔熻兘:娓呴櫎TIMER2涓柇鏍囧織鐘舵 +*鍏ュ彛鍙傛暟:void +*鍑哄彛鍙傛暟:void +*****************************************************/ +void TIM2_ClearFlag(TIM2_Flag_TypeDef TIM2_Flag) +{ + T2CON &= (~TIM2_Flag); +} + +#else + +/************************************************** +*鍑芥暟鍚嶇О:void TIM2_DeInit(void) +*鍑芥暟鍔熻兘:TIMER2鐩稿叧瀵勫瓨鍣ㄥ浣嶈嚦鍒濆鍊 +*鍏ュ彛鍙傛暟:void +*鍑哄彛鍙傛暟:void +**************************************************/ +void TIM2_DeInit() +{ + TXINX = 0x02; //TIMER2閫夋嫨 + TXCON = 0X00; + TXMOD = 0X00; + RCAPXH = 0X00; + RCAPXL = 0X00; + THX = 0X00; + TLX = 0X00; + IE1 &= 0X3F; + IP1 &= 0X3F; + ET2 = 0; + IPT2 = 0; +} + +/************************************************** +*鍑芥暟鍚嶇О:void TIM2_PrescalerSelection(TIM2_PresSel_TypeDef TIM2_PrescalerSelection) +*鍑芥暟鍔熻兘:TIMER2 棰勫垎棰戦夋嫨 +*鍏ュ彛鍙傛暟: +TIM2_PresSel_TypeDef:TIM2_PrescalerSelection:棰勫垎棰戦夋嫨 +*鍑哄彛鍙傛暟:void +**************************************************/ +void TIM2_PrescalerSelection(TIM2_PresSel_TypeDef TIM2_PrescalerSelection) +{ + TXINX = 0x02; + + if (TIM2_PrescalerSelection == TIM2_PRESSEL_FSYS_D12) + { + TXMOD &= 0X7F; + } + else if (TIM2_PrescalerSelection == TIM2_PRESSEL_FSYS_D1) + { + TXMOD |= 0X80; + } +} + +/************************************************** +*鍑芥暟鍚嶇О:void TIM2_TimeBaseInit(TIM2_CountMode_TypeDef TIM2_CountMode, TIM2_CountDirection_TypeDef TIM2_CountDirection) +*鍑芥暟鍔熻兘:TIM2鍩烘湰璁剧疆閰嶇疆鍑芥暟 +*鍏ュ彛鍙傛暟: +TIM2_CountMode_TypeDef:TIM2_CountMode:璁℃暟/瀹氭椂妯″紡閫夋嫨 +TIM2_CountDirection_TypeDef:TIM2_CountDirection:璁℃暟鏂瑰悜閫夋嫨 +*鍑哄彛鍙傛暟:void +**************************************************/ +void TIM2_TimeBaseInit(TIM2_PresSel_TypeDef TIM2_PrescalerSelection, + TIM2_CountMode_TypeDef TIM2_CountMode, + TIM2_CountDirection_TypeDef TIM2_CountDirection) +{ + TXINX = 0x02; + + TXMOD &= 0X7F; + TXMOD = TIM2_PrescalerSelection<<7; + + if (TIM2_CountMode == TIM2_MODE_TIMER) + { + TXCON &= 0XFD; + } + else if (TIM2_CountMode == TIM2_MODE_COUNTER) + { + TXCON |= 0X02; + } + + if (TIM2_CountDirection == TIM2_COUNTDIRECTION_UP) + { + TXMOD &= 0XFE; + } + else if (TIM2_CountDirection == TIM2_COUNTDIRECTION_DOWN_UP) + { + TXMOD |= 0X01; + } +} + +/************************************************** +*鍑芥暟鍚嶇О:void TIM2_WorkMode0Config(uint16_t TIM2_SetCounter) +*鍑芥暟鍔熻兘:TIMER2宸ヤ綔妯″紡0閰嶇疆鍑芥暟 +*鍏ュ彛鍙傛暟: +uint16_t:TIM2_SetCounter:閰嶇疆璁℃暟鍒濆 +*鍑哄彛鍙傛暟:void +**************************************************/ +void TIM2_WorkMode0Config(uint16_t TIM2_SetCounter) +{ + TXINX = 0x02; + CP = 1; + TLX = TIM2_SetCounter % 256; + THX = TIM2_SetCounter / 256; +} + +/************************************************** +*鍑芥暟鍚嶇О:void TIM2_WorkMode1Config(uint16_t TIM2_SetCounter) +*鍑芥暟鍔熻兘:TIMER2宸ヤ綔妯″紡1閰嶇疆鍑芥暟 +*鍏ュ彛鍙傛暟: +uint16_t:TIM2_SetCounter:閰嶇疆璁℃暟鍒濆 +*鍑哄彛鍙傛暟:void +**************************************************/ +void TIM2_WorkMode1Config(uint16_t TIM2_SetCounter) +{ + TXINX = 0x02; + RCAPXL = TIM2_SetCounter % 256; + RCAPXH = TIM2_SetCounter / 256; + + TLX = RCAPXL; + THX = RCAPXH; +} + +/************************************************** +*鍑芥暟鍚嶇О:void TIM2_WorkMode3Config(uint16_t TIM2_SetCounter) +*鍑芥暟鍔熻兘:TIMER2宸ヤ綔妯″紡3閰嶇疆鍑芥暟 +*鍏ュ彛鍙傛暟: +uint16_t:TIM2_SetCounter:閰嶇疆璁℃暟鍒濆 +*鍑哄彛鍙傛暟:void +**************************************************/ +void TIM2_WorkMode3Config(uint16_t TIM2_SetCounter) +{ + TXINX = 0x02; + RCAPXL = TIM2_SetCounter % 256; + RCAPXH = TIM2_SetCounter / 256; + TXMOD |= 0X02; +} +/************************************************** +*鍑芥暟鍚嶇О:void TIM2_WorkModeConfig(TIM2_WorkMode_TypeDef TIM2_WorkMode, uint16_t TIM2_SetCounter) +*鍑芥暟鍔熻兘:TIMER2宸ヤ綔妯″紡閰嶇疆鍑芥暟 +*鍏ュ彛鍙傛暟: +TIM2_WorkMode_TypeDef:TIM2_WorkMode:TIMER2宸ヤ綔妯″紡閫夋嫨 +uint16_t:TIM2_SetCounter:TIMER2璁℃暟鍒濆奸厤缃 +*鍑哄彛鍙傛暟:void +**************************************************/ +void TIM2_WorkModeConfig(TIM2_WorkMode_TypeDef TIM2_WorkMode, uint16_t TIM2_SetCounter) +{ + switch (TIM2_WorkMode) + { + case TIM2_WORK_MODE0: + TIM2_WorkMode0Config(TIM2_SetCounter); + break; + + case TIM2_WORK_MODE1: + TIM2_WorkMode1Config(TIM2_SetCounter); + break; + + case TIM2_WORK_MODE3: + TIM2_WorkMode3Config(TIM2_SetCounter); + break; + + default: + break; + } +} +/***************************************************** +*鍑芥暟鍚嶇О:void TIM2_SetEXEN2(FunctionalState NewState) +*鍑芥暟鍔熻兘:TIMER2_EXEN2閰嶇疆鍑芥暟 +*鍏ュ彛鍙傛暟: +FunctionalState:NewState:EXEN2浣胯兘閫夋嫨 +*鍑哄彛鍙傛暟:void +*****************************************************/ +void TIM2_SetEXEN2(FunctionalState NewState) +{ + TXINX = 0x02; + + if (NewState == DISABLE) + { + EXENX = 0; + } + else + { + EXENX = 1; + } +} + +/***************************************************** +*鍑芥暟鍚嶇О:void TIM2_Cmd(FunctionalState NewState) +*鍑芥暟鍔熻兘:TIMER2鍔熻兘寮鍏冲嚱鏁 +*鍏ュ彛鍙傛暟: +FunctionalState:NewState:鍔熻兘鍚姩/鍏抽棴閫夋嫨 +*鍑哄彛鍙傛暟:void +*****************************************************/ +void TIM2_Cmd(FunctionalState NewState) +{ + TXINX = 0x02; + + if (NewState == DISABLE) + { + TRX = 0; + } + else + { + TRX = 1; + } +} + +/***************************************************** +*鍑芥暟鍚嶇О:void TIM2_ITConfig(FunctionalState NewState, PriorityStatus Priority) +*鍑芥暟鍔熻兘:TIMER2 +*鍏ュ彛鍙傛暟: +FunctionalState:NewState:涓柇浣胯兘/鍏抽棴閫夋嫨 +PriorityStatus:Priority:涓柇浼樺厛绾ч夋嫨 +*鍑哄彛鍙傛暟:void +*****************************************************/ +void TIM2_ITConfig(FunctionalState NewState, PriorityStatus Priority) +{ + TXINX = 0x02; + + if (NewState == DISABLE) + { + ET2 = 0; + } + else + { + ET2 = 1; + } + + if (Priority == LOW) + { + IPT2 = 0; + } + else + { + IPT2 = 1; + } +} + +/***************************************************** +*鍑芥暟鍚嶇О:FlagStatus TIM2_GetFlagStatus(void) +*鍑芥暟鍔熻兘:鑾峰緱TIMER2涓柇鏍囧織鐘舵 +*鍏ュ彛鍙傛暟: +TIM2_Flag_TypeDef:TIM2_Flag:TIMER2鏍囧織閫夋嫨 +*鍑哄彛鍙傛暟: +FlagStatus:TIMER2涓柇鏍囧織鐘舵 +*****************************************************/ +FlagStatus TIM2_GetFlagStatus(TIM2_Flag_TypeDef TIM2_Flag) +{ + FlagStatus status = RESET; + TXINX = 0x02; + + if ((TIM2_Flag & TXCON) != (uint8_t)RESET) + { + status = SET; + } + else + { + status = RESET; + } + + return status; +} + +/***************************************************** +*鍑芥暟鍚嶇О:void TIMX_ClearFlag(void) +*鍑芥暟鍔熻兘:娓呴櫎TIMER2涓柇鏍囧織鐘舵 +*鍏ュ彛鍙傛暟: +TIM2_Flag_TypeDef:TIM2_Flag:TIMER2鏍囧織閫夋嫨 +*鍑哄彛鍙傛暟:void +*****************************************************/ +void TIM2_ClearFlag(TIM2_Flag_TypeDef TIM2_Flag) +{ + TXINX = 0x02; + TXCON &= (~TIM2_Flag); +} + +#endif + +/******************* (C) COPYRIGHT 2020 SinOne Microelectronics *****END OF FILE****/ \ No newline at end of file diff --git a/Keil_C/FWLib/SC92F_Lib/src/sc92f_timer3.c b/Keil_C/FWLib/SC92F_Lib/src/sc92f_timer3.c new file mode 100644 index 0000000..4adab11 --- /dev/null +++ b/Keil_C/FWLib/SC92F_Lib/src/sc92f_timer3.c @@ -0,0 +1,280 @@ +//************************************************************ +// Copyright (c) 深圳市赛元微电子有限公司 +// 文件名称 : sc92f_timerx.c +// 作者 : +// 模块功能 : TIMER3固件库函数C文件 +// 最后更正日期: 2022/01/14 +// 版本 : V1.1000 +// 说明 :该文件仅适用于SC92F系列芯片 +//************************************************************* + +#include "sc92f_timer3.h" + +#if defined (SC92L853x) || defined (SC92L753x) +/************************************************** +*函数名称:void TIMX_DeInit(void) +*函数功能:TIMER3相关寄存器复位至初始值 +*入口参数:void +*出口参数:void +**************************************************/ +void TIM3_DeInit() +{ + TXINX = 0x03; //TIMER3 选择 + TXCON = 0X00; + TXMOD = 0X00; + RCAPXH = 0X00; + RCAPXL = 0X00; + THX = 0X00; + TLX = 0X00; + IE1 &= 0X3F; + IP1 &= 0X3F; + ET2 = 0; + IPT2 = 0; +} + +/************************************************** +*函数名称:void TIM3_PrescalerSelection(TIMX_TimerSelect_TypeDef TIMX_TimerSelect, TIMX_PresSel_TypeDef TIMX_PrescalerSelection) +*函数功能:TIMER3 预分频选择 +*入口参数: +TIM3_PresSel_TypeDef:TIM3_PrescalerSelection:预分频选择 +*出口参数:void +**************************************************/ +void TIM3_PrescalerSelection(TIM3_PresSel_TypeDef TIM3_PrescalerSelection) +{ + TXINX = 0x03; + + if(TIM3_PrescalerSelection == TIM3_PRESSEL_FSYS_D12) + { + TXMOD &= 0X7F; + } + else + if(TIM3_PrescalerSelection == TIM3_PRESSEL_FSYS_D1) + { + TXMOD |= 0X80; + } +} + +/************************************************** +*函数名称:void TIM3_WorkMode1Config(uint16_t TIM3_SetCounter) +*函数功能:TIMER3工作模式1配置函数 +*入口参数: +uint16_t TIM3_SetCounter 配置计数初值 +*出口参数:void +**************************************************/ +void TIM3_WorkMode1Config(uint16_t TIM3_SetCounter) +{ + TXINX = 0x03; + RCAPXL = TIM3_SetCounter % 256; + RCAPXH = TIM3_SetCounter / 256; + + TLX = RCAPXL; + THX = RCAPXH; +} + +/***************************************************** +*函数名称:void TIM3_Cmd(FunctionalState NewState) +*函数功能:TIMER3功能开关函数 +*入口参数: +FunctionalState:NewState:功能启动/关闭选择 +*出口参数:void +*****************************************************/ +void TIM3_Cmd(FunctionalState NewState) +{ + TXINX = 0x03; + + if (NewState == DISABLE) + { + TRX = 0; + } + else + { + TRX = 1; + } +} + +/***************************************************** +*函数名称:void TIM3_ITConfig(TIM3_TimerSelect_TypeDef TIM3_TimerSelect, FunctionalState NewState, PriorityStatus Priority) +*函数功能:TIMER3中断初始化 +*入口参数: +FunctionalState:NewState:中断使能/关闭选择 +PriorityStatus:Priority:中断优先级选择 +*出口参数:void +*****************************************************/ +void TIM3_ITConfig(FunctionalState NewState, PriorityStatus Priority) +{ + TXINX = 0x03; + + if(NewState == DISABLE) + { + IE1 &= 0XBF; + } + else + { + IE1 |= 0X40; + } + + if(Priority == LOW) + { + IP1 &= 0XBF; + } + else + { + IP1 |= 0X40; + } +} + +/***************************************************** +*函数名称:FlagStatus TIM3_GetFlagStatus(void) +*函数功能:获得TIMER3中断标志状态 +*入口参数: +TIM3_Flag_TypeDef:TIM3_Flag:TIMER3标志选择 +*出口参数: +FlagStatus:TIMER3中断标志状态 +*****************************************************/ +FlagStatus TIM3_GetFlagStatus(TIM3_Flag_TypeDef TIM3_Flag) +{ + FlagStatus status = RESET; + TXINX = 0x03; + + if((TIM3_Flag & TXCON) != (uint8_t)RESET) + { + status = SET; + } + else + { + status = RESET; + } + + return status; +} + +/***************************************************** +*函数名称:void TIM3_ClearFlag(TIM3_Flag_TypeDef TIM3_Flag) +*函数功能:清除TIMER3中断标志状态 +*入口参数: +TIM3_Flag_TypeDef:TIM3_Flag:TIMER3标志选择 +*出口参数:void +*****************************************************/ +void TIM3_ClearFlag(TIM3_Flag_TypeDef TIM3_Flag) +{ + TXINX = 0x03; + TXCON &= (~TIM3_Flag); +} + + +/************************************************** +*函数名称:void TIM3_TimeBaseInit(TIM3_CountMode_TypeDef TIM3_CountMode, TIM3_CountDirection_TypeDef TIM3_CountDirection) +*函数功能:TIM3基本设置配置函数 +*入口参数: +TIM3_CountMode_TypeDef:TIM3_CountMode:计数/定时模式选择 +TIM3_CountDirection_TypeDef:TIM3_CountDirection:计数方向选择 +*出口参数:void +**************************************************/ +void TIM3_TimeBaseInit(TIM3_CountMode_TypeDef TIM3_CountMode, + TIM3_CountDirection_TypeDef TIM3_CountDirection) +{ + TXINX = 0x03; + + if(TIM3_CountMode == TIM3_MODE_TIMER) + { + TXCON &= 0XFD; + } + else + if(TIM3_CountMode == TIM3_MODE_COUNTER) + { + TXCON |= 0X02; + } + + /************************************************************/ + if(TIM3_CountDirection == TIM3_COUNTDIRECTION_UP) + { + TXMOD &= 0XFE; + } + else + if(TIM3_CountDirection == TIM3_COUNTDIRECTION_DOWN_UP) + { + TXMOD |= 0X01; + } +} + +/************************************************** +*函数名称:void TIM3_WorkMode0Config(uint16_t TIM3_SetCounter) +*函数功能:TIMER3工作模式0配置函数 +*入口参数: +uint16_t:TIM3_SetCounter:配置计数初值 +*出口参数:void +**************************************************/ +void TIM3_WorkMode0Config(uint16_t TIM3_SetCounter) +{ + TXINX = 0x03; + CP = 1; + TLX = TIM3_SetCounter % 256; + THX = TIM3_SetCounter / 256; +} +/************************************************** +*函数名称:void TIM3_WorkMode3Config(uint16_t TIM3_SetCounter) +*函数功能:TIMER3工作模式3配置函数 +*入口参数: +uint16_t:TIM3_SetCounter:配置计数初值 +*出口参数:void +**************************************************/ +void TIM3_WorkMode3Config(uint16_t TIM3_SetCounter) +{ + TXINX = 0x03; + RCAPXL = TIM3_SetCounter % 256; + RCAPXH = TIM3_SetCounter / 256; + TXMOD |= 0X02; +} +/************************************************** +*函数名称:void TIM3_WorkModeConfig(TIM3_WorkMode_TypeDef TIM3_WorkMode, uint16_t TIM3_SetCounter) +*函数功能:TIMER3工作模式配置函数 +*入口参数: +TIM3_WorkMode_TypeDef:TIM3_WorkMode:TIMER3工作模式选择 +uint16_t:TIM3_SetCounter:TIMER3计数初值配置 +*出口参数:void +**************************************************/ +void TIM3_WorkModeConfig(TIM3_WorkMode_TypeDef TIM3_WorkMode, uint16_t TIM3_SetCounter) +{ + switch (TIM3_WorkMode) + { + case TIM3_WORK_MODE0: + TIM3_WorkMode0Config(TIM3_SetCounter); + break; + + case TIM3_WORK_MODE1: + TIM3_WorkMode1Config(TIM3_SetCounter); + break; + + case TIM3_WORK_MODE3: + TIM3_WorkMode3Config(TIM3_SetCounter); + break; + + default: + break; + } +} +/***************************************************** +*函数名称:void TIM3_SetEXEN3(FunctionalState NewState) +*函数功能:TIMER3_EXEN3配置函数 +*入口参数: +FunctionalState:NewState:EXEN3使能选择 +*出口参数:void +*****************************************************/ +void TIM3_SetEXEN3(FunctionalState NewState) +{ + TXINX = 0x03; + + if (NewState == DISABLE) + { + EXENX = 0; + } + else + { + EXENX = 1; + } +} + +#endif + +/******************* (C) COPYRIGHT 2020 SinOne Microelectronics *****END OF FILE****/ + diff --git a/Keil_C/FWLib/SC92F_Lib/src/sc92f_timer4.c b/Keil_C/FWLib/SC92F_Lib/src/sc92f_timer4.c new file mode 100644 index 0000000..6c649b7 --- /dev/null +++ b/Keil_C/FWLib/SC92F_Lib/src/sc92f_timer4.c @@ -0,0 +1,278 @@ +//************************************************************ +// Copyright (c) 深圳市赛元微电子有限公司 +// 文件名称 : sc92f_timer4.c +// 作者 : +// 模块功能 : TIMER4固件库函数C文件 +// 最后更正日期: 2022/01/18 +// 版本 : V1.10000 +// 说明 :该文件仅适用于SC92F系列芯片 +//************************************************************* + +#include "sc92f_timer4.h" + + +#if defined (SC92L853x) || defined (SC92L753x) +/************************************************** +*函数名称:void TIM4_DeInit(void) +*函数功能:TIMER4相关寄存器复位至缺省值 +*入口参数:void +*出口参数:void +**************************************************/ +void TIM4_DeInit() +{ + TXINX = 0x04; //TIMER4 选择 + TXCON = 0X00; + TXMOD = 0X00; + RCAPXH = 0X00; + RCAPXL = 0X00; + THX = 0X00; + TLX = 0X00; + IE1 &= 0X3F; + IP1 &= 0X3F; + ET2 = 0; + IPT2 = 0; +} + +/************************************************** +*函数名称:void TIM4_PrescalerSelection(TIM4_PresSel_TypeDef TIM4_PrescalerSelection) +*函数功能:TIMER4 预分频选择 +*入口参数: +TIM4_PresSel_TypeDef:TIM4_PrescalerSelection:预分频选择 +*出口参数:void +**************************************************/ +void TIM4_PrescalerSelection(TIM4_PresSel_TypeDef TIM4_PrescalerSelection) +{ + TXINX = 0x04; + + if (TIM4_PrescalerSelection == TIM4_PRESSEL_FSYS_D12) + { + TXMOD &= 0X7F; + } + else if (TIM4_PrescalerSelection == TIM4_PRESSEL_FSYS_D1) + { + TXMOD |= 0X80; + } +} + +/************************************************** +*函数名称:void TIM4_WorkMode1Config(uint16_t TIM4_SetCounter) +*函数功能:TIMER4工作模式1配置函数 +*入口参数: +uint16_t:TIM4_SetCounter:配置计数初值 +*出口参数:void +**************************************************/ +void TIM4_WorkMode1Config(uint16_t TIM4_SetCounter) +{ + TXINX = 0x04; + RCAPXL = TIM4_SetCounter % 256; + RCAPXH = TIM4_SetCounter / 256; + + TLX = RCAPXL; + THX = RCAPXH; +} + +/***************************************************** +*函数名称:void TIM4_Cmd(FunctionalState NewState) +*函数功能:TIMER4功能开关函数 +*入口参数: +FunctionalState:NewState:功能启动/关闭选择 +*出口参数:void +*****************************************************/ +void TIM4_Cmd(FunctionalState NewState) +{ + TXINX = 0x04; + + if (NewState == DISABLE) + { + TRX = 0; + } + else + { + TRX = 1; + } +} + +/***************************************************** +*函数名称:void TIMX_ITConfig(FunctionalState NewState, PriorityStatus Priority) +*函数功能:TIMER4中断初始化 +*入口参数: +FunctionalState:NewState:中断使能/关闭选择 +PriorityStatus:Priority:中断优先级选择 +*出口参数:void +*****************************************************/ +void TIM4_ITConfig(FunctionalState NewState, PriorityStatus Priority) +{ + TXINX = 0x04; + + if (NewState == DISABLE) + { + IE1 &= 0X7F; + } + else + { + IE1 |= 0X80; + } + + if (Priority == LOW) + { + IP1 &= 0X7F; + } + else + { + IP1 |= 0X80; + } +} + +/***************************************************** +*函数名称:FlagStatus TIM4_GetFlagStatus(TIM4_Flag_TypeDef TIM4_Flag) +*函数功能:获得TIMER4中断标志状态 +*入口参数: +TIM4_Flag_TypeDef:TIM4_Flag:TIMER4标志选择 +*出口参数: +FlagStatus:TIMER4中断标志状态 +*****************************************************/ +FlagStatus TIM4_GetFlagStatus(TIM4_Flag_TypeDef TIM4_Flag) +{ + FlagStatus status = RESET; + TXINX = 0x04; + + if ((TIM4_Flag & TXCON) != (uint8_t)RESET) + { + status = SET; + } + else + { + status = RESET; + } + + return status; +} + +/***************************************************** +*函数名称:void TIM4_ClearFlag(TIM4_Flag_TypeDef TIM4_Flag) +*函数功能:清除TIMER4中断标志状态 +*入口参数: +TIM4_Flag_TypeDef:TIM4_Flag:TIMER4标志选择 +*出口参数:void +*****************************************************/ +void TIM4_ClearFlag(TIM4_Flag_TypeDef TIM4_Flag) +{ + TXINX = 0x04; + TXCON &= (~TIM4_Flag); +} + +/************************************************** +*函数名称:void TIM4_TimeBaseInit(TIM4_CountMode_TypeDef TIM4_CountMode, TIM4_CountDirection_TypeDef TIM4_CountDirection) +*函数功能:TIM4基本设置配置函数 +*入口参数: +TIM4_CountMode_TypeDef:TIM4_CountMode:计数/定时模式选择 +TIM4_CountDirection_TypeDef:TIM4_CountDirection:计数方向选择 +*出口参数:void +**************************************************/ +void TIM4_TimeBaseInit(TIM4_CountMode_TypeDef TIM4_CountMode, + TIM4_CountDirection_TypeDef TIM4_CountDirection) +{ + TXINX = 0x04; + + if (TIM4_CountMode == TIM4_MODE_TIMER) + { + TXCON &= 0XFD; + } + else if (TIM4_CountMode == TIM4_MODE_COUNTER) + { + TXCON |= 0X02; + } + + /************************************************************/ + if (TIM4_CountDirection == TIM4_COUNTDIRECTION_UP) + { + TXMOD &= 0XFE; + } + else if (TIM4_CountDirection == TIM4_COUNTDIRECTION_DOWN_UP) + { + TXMOD |= 0X01; + } +} + +/************************************************** +*函数名称:void TIM4_WorkMode0Config(uint16_t TIM4_SetCounter) +*函数功能:TIMER4工作模式0配置函数 +*入口参数: +uint16_t:TIM4_SetCounter:配置计数初值 +*出口参数:void +**************************************************/ +void TIM4_WorkMode0Config(uint16_t TIM4_SetCounter) +{ + TXINX = 0x04; + CP = 1; + TLX = TIM4_SetCounter % 256; + THX = TIM4_SetCounter / 256; +} + +/************************************************** +*函数名称:void TIM4_WorkMode3Config(uint16_t TIM4_SetCounter) +*函数功能:TIMER2工作模式3配置函数 +*入口参数: +uint16_t:TIM2_SetCounter:配置计数初值 +*出口参数:void +**************************************************/ +void TIM4_WorkMode3Config(uint16_t TIM4_SetCounter) +{ + TXINX = 0x04; + RCAPXL = TIM4_SetCounter % 256; + RCAPXH = TIM4_SetCounter / 256; + TXMOD |= 0X02; +} + +/************************************************** +*函数名称:void TIM4_WorkModeConfig(TIM4_WorkMode_TypeDef TIM4_WorkMode, uint16_t TIM4_SetCounter) +*函数功能:TIMER4工作模式配置函数 +*入口参数: +TIM4_WorkMode_TypeDef:TIM4_WorkMode:TIMER2工作模式选择 +uint16_t:TIM4_SetCounter:TIMER2计数初值配置 +*出口参数:void +**************************************************/ +void TIM4_WorkModeConfig(TIM4_WorkMode_TypeDef TIM4_WorkMode, uint16_t TIM4_SetCounter) +{ + switch (TIM4_WorkMode) + { + case TIM4_WORK_MODE0: + TIM4_WorkMode0Config(TIM4_SetCounter); + break; + + case TIM4_WORK_MODE1: + TIM4_WorkMode1Config(TIM4_SetCounter); + break; + + case TIM4_WORK_MODE3: + TIM4_WorkMode3Config(TIM4_SetCounter); + break; + + default: + break; + } +} + +/***************************************************** +*函数名称:void TIM4_SetEXEN4(FunctionalState NewState) +*函数功能:TIMER4_EXEN4配置函数 +*入口参数: +FunctionalState:NewState:EXEN4使能选择 +*出口参数:void +*****************************************************/ +void TIM4_SetEXEN4(FunctionalState NewState) +{ + TXINX = 0x04; + + if (NewState == DISABLE) + { + EXENX = 0; + } + else + { + EXENX = 1; + } +} + +#endif +/******************* (C) COPYRIGHT 2020 SinOne Microelectronics *****END OF FILE****/ \ No newline at end of file diff --git a/Keil_C/FWLib/SC92F_Lib/src/sc92f_uart0.c b/Keil_C/FWLib/SC92F_Lib/src/sc92f_uart0.c new file mode 100644 index 0000000..b26511f --- /dev/null +++ b/Keil_C/FWLib/SC92F_Lib/src/sc92f_uart0.c @@ -0,0 +1,388 @@ +//************************************************************ +// Copyright (c) 深圳市赛元微电子有限公司 +// 文件名称 : sc92f_uart0.c +// 作者 : +// 模块功能 : UART0固件库函数C文件 +// 局部函数列表: +// 最后更正日期: 2022/01/01 +// 版本 : V1.10005 +// 说明 :本文件仅适用于赛元92F/93F/92L系列单片机 +//************************************************************* + +#include "sc92f_uart0.h" + +#if !defined (SC92F742x) && !defined (SC92F827X) && !defined (SC92F837X) && !defined (SC92F7490) + +/************************************************** +*函数名称:void UART0_DeInit(void) +*函数功能:UART0相关寄存器复位至缺省值 +*入口参数:void +*出口参数:void +**************************************************/ +void UART0_DeInit(void) +{ +#if defined (SC92F7003) || defined (SC92F8003) || defined (SC92F740x) + OTCON &= 0XEF; +#endif + SCON = 0X00; + PCON &= 0X7F; + IE &= 0XEF; + IP &= 0XEF; +} + +#if defined (SC92F7003) || defined (SC92F8003) || defined (SC92F740x) +/************************************************** +*函数名称:UART0_PinSelection(UART0_PinSelection_TypeDef PinSeletion) +*函数功能:UART0引脚选择 +*入口参数: +UART0_PinSelection_TypeDef:PinSeletion:选择UART0引脚为P15P16或P11P20 +*出口参数:void +**************************************************/ +void UART0_PinSelection(UART0_PinSelection_TypeDef + PinSeletion) +{ + OTCON = OTCON & 0XDF | PinSeletion; +} +#endif + +/************************************************** +*函数名称:void UART0_Init(uint32_t Uart0Fsys, uint32_t BaudRate, UART0_Mode_Typedef Mode,UART0_Clock_Typedef ClockMode, UART0_RX_Typedef RxMode) +*函数功能:UART0初始化配置函数 +*入口参数: +uint32_t:Uart0Fsys:系统时钟频率 +uint32_t:BaudRate:波特率 +UART0_Mode_Typedef:Mode:UART0工作模式 +UART0_Clock_Typedef:ClockMode:波特率时钟源(TIMER1/TIMER2) +UART0_RX_Typedef:RxMode:接收允许选择 +*出口参数:void +**************************************************/ +void UART0_Init(uint32_t Uart0Fsys, uint32_t BaudRate, + UART0_Mode_Typedef Mode, UART0_Clock_Typedef ClockMode, + UART0_RX_Typedef RxMode) +{ +#if defined (SC92F725X) || defined (SC92F735X) || defined (SC92F730x ) || defined (SC92F732X) || defined (SC93F833x) || defined (SC93F843x) || defined (SC93F743x) + { + SCON = SCON & 0X2F | Mode | RxMode; //设置UART工作模式,设置接收允许位 + + if(Mode == UART0_Mode_8B || + Mode == UART0_Mode_11B_BaudRateFix) + { + if(BaudRate == UART0_BaudRate_FsysDIV12 || + BaudRate == UART0_BaudRate_FsysDIV64) + { + PCON &= 0X7F; + } + else if(BaudRate == UART0_BaudRate_FsysDIV4 || + BaudRate == UART0_BaudRate_FsysDIV32) + { + PCON |= 0X80; + } + } + else + { + T2CON = (T2CON & 0xCF) | (ClockMode & + 0X30); //设置波特率时钟源 + + if((ClockMode & 0X70) == 0X00) + { + TMOD |= 0X20; + if(ClockMode & 0x80) + { + PCON |= 0X80; + Uart0Fsys = Uart0Fsys * 2; + } + else + { + PCON &= 0X7F; + } + + if(ClockMode & 0x0F) + { + TMCON |= 0x02; + } + else + { + TMCON &= 0xFD; + Uart0Fsys = Uart0Fsys / 12; + } + + TH1 = 256 - (Uart0Fsys / 32 / BaudRate); + TL1 = TH1; + TR1 = 1; + } + else if((ClockMode & 0X70) == 0X30) + { + if(ClockMode & 0x0F) + { + TMCON |= 0x04; + } + else + { + TMCON &= 0xFB; + Uart0Fsys = Uart0Fsys / 12; + } + + RCAP2H = (65536 - Uart0Fsys / 32 / BaudRate) / + 256; + RCAP2L = (65536 - Uart0Fsys / 32 / BaudRate) % + 256; + TR2 = 1; + } + } + } +#elif defined (SC92F848x) || defined (SC92F748x) || defined (SC92F859x) || defined (SC92F759x) + { + SCON = (SCON & 0X2F) | Mode | RxMode; //设置UART工作模式,设置接收允许位 + + if(Mode == UART0_Mode_8B) + { + if(BaudRate == UART0_BaudRate_FsysDIV12) + { + PCON &= 0X7F; + } + else if(BaudRate == UART0_BaudRate_FsysDIV4) + { + PCON |= 0X80; + } + } + else + { + T2CON = (T2CON & 0xCF) | + (ClockMode & 0x30); //设置波特率时钟源 + + if(ClockMode & 0x80) + { + PCON |= 0x80; + Uart0Fsys = Uart0Fsys / 16; + } + else + { + PCON &= 0x7F; + } + + if((ClockMode & 0x7F) == UART0_CLOCK_TIMER1) + { + TH1 = (Uart0Fsys / BaudRate) / 256; + TL1 = (Uart0Fsys / BaudRate) % 256; + TR1 = 0; + } + else if((ClockMode & 0x7F) == UART0_CLOCK_TIMER2) + { + RCAP2H = (Uart0Fsys / BaudRate) / 256; + RCAP2L = (Uart0Fsys / BaudRate) % 256; + TR2 = 1; + } + } + } +#elif defined (SC92L853x) || defined (SC92L753x) + { + SCON = (SCON & 0X2F) | Mode | RxMode; //设置UART工作模式,设置接收允许位 + + /* 如果UART0选择为8位半双工同步通信模式,串行端口在系统时钟的12分频或4分频下运行*/ + if(Mode == UART0_Mode_8B) + { + if(BaudRate == UART0_BaudRate_FsysDIV12) + { + PCON &= 0X7F; + } + else if(BaudRate == UART0_BaudRate_FsysDIV4) + { + PCON |= 0X80; + } + } + /* UART0选择模式1/3,波特率为可变 */ + else + { + TXCON = (TXCON & 0xCF) | ClockMode; //设置波特率时钟源 + + /* 模式1/3可以在系统时钟的1分频或16分频下运行 */ + if(ClockMode & 0x80) + { + PCON |= 0x80; + Uart0Fsys = Uart0Fsys / 16; + } + else + { + PCON &= 0x7F; + } + + /* 配置UART0时钟源 */ + if((ClockMode & 0x7F) == UART0_CLOCK_TIMER1)//UART0时钟源为TIMER1 + { + TH1 = (Uart0Fsys / BaudRate) / 256; + TL1 = (Uart0Fsys / BaudRate) % 256; + TR1 = 0; + } + else if((ClockMode & 0x7F) == UART0_CLOCK_TIMER2)//UART0时钟源为TIMER2 + { + RCAPXH = (Uart0Fsys / BaudRate) / 256; + RCAPXL = (Uart0Fsys / BaudRate) % 256; + TRX = 1; + } + } + } + +#else + { + SCON = (SCON & 0X2F) | Mode | + RxMode; //设置UART工作模式,设置接收允许位 + + if(Mode == UART0_Mode_8B) + { + if(BaudRate == UART0_BaudRate_FsysDIV12) + { + PCON &= 0X7F; + } + else if(BaudRate == UART0_BaudRate_FsysDIV4) + { + PCON |= 0X80; + } + } + else + { + T2CON = (T2CON & 0xCF) | + (ClockMode & 0x30); //设置波特率时钟源 + + if(ClockMode == UART0_CLOCK_TIMER1) + { + TH1 = (Uart0Fsys / BaudRate) / 256; + TL1 = (Uart0Fsys / BaudRate) % 256; + TR1 = 0; + } + else if(ClockMode == UART0_CLOCK_TIMER2) + { + RCAP2H = (Uart0Fsys / BaudRate) / 256; + RCAP2L = (Uart0Fsys / BaudRate) % 256; +#if defined (SC92F846xB) || defined (SC92F746xB) || defined (SC92F836xB) || defined (SC92F736xB)|| defined (SC92F83Ax) || defined (SC92F73Ax)|| defined (SC92F84Ax) || defined (SC92F74Ax) || defined (SC92F7003) || defined (SC92F8003) || defined (SC92F740x) + TR2 = 1; +#endif + } + } + } +#endif +} + +/***************************************************** +*函数名称:void UART0_SendData8(uint8_t Data) +*函数功能:UART0发送8位数据 +*入口参数: +uint8_t:Data:发送的数据 +*出口参数:void +*****************************************************/ +void UART0_SendData8(uint8_t Data) +{ + SBUF = Data; +} + +/************************************************** +*函数名称:uint8_t UART0_ReceiveData8(void) +*函数功能:获得SBUF中的值 +*入口参数:void +*出口参数: +uint8_t:UART接收到的8位数据 +**************************************************/ +uint8_t UART0_ReceiveData8(void) +{ + return SBUF; +} + +/***************************************************** +*函数名称:void UART0_SendData9(uint16_t Data) +*函数功能:UART0发送9位数据 +*入口参数: +uint16_t:Data:发送的数据 +*出口参数:void +*****************************************************/ +void UART0_SendData9(uint16_t Data) +{ + uint8_t Data_9Bit; + Data_9Bit = (Data >> 8); + + if(Data_9Bit) + { + SCON |= 0X08; + } + else + { + SCON &= 0XF7; + } + + SBUF = (uint8_t)Data; +} + +/************************************************** +*函数名称:uint16_t UART0_ReceiveData9(void) +*函数功能:获得SBUF中的值及第九位的值 +*入口参数:void +*出口参数: +uint16_t:UART接收到的数据 +**************************************************/ +uint16_t UART0_ReceiveData9(void) +{ + uint16_t Data9; + Data9 = SBUF + ((uint16_t)(SCON & 0X04) << 6); + SCON &= 0XFB; + return Data9; +} + +/***************************************************** +*函数名称:void UART0_ITConfig(FunctionalState NewState, PriorityStatus Priority) +*函数功能:UART0中断初始化 +*入口参数: +FunctionalState:NewState:中断使能/关闭选择 +PriorityStatus:Priority:中断优先级选择 +*出口参数:void +*****************************************************/ +void UART0_ITConfig(FunctionalState NewState, + PriorityStatus Priority) +{ + if(NewState == DISABLE) + { + EUART = 0; + } + else + { + EUART = 1; + } + + //设置中断优先级 + if(Priority == LOW) + { + IPUART = 0; + } + else + { + IPUART = 1; + } +} + +/***************************************************** +*函数名称:FlagStatus UART0_GetFlagStatus(UART0_Flag_Typedef UART0_Flag) +*函数功能:获得UART0中断标志状态 +*入口参数: +UART0_GetFlagStatus:UART0_Flag:中断标志位选择 +*出口参数: +FlagStatus:UART0中断标志位置起状态 +*****************************************************/ +//FlagStatus UART0_GetFlagStatus(UART0_Flag_Typedef +// UART0_Flag) +//{ +// return (bool)(SCON & UART0_Flag); +//} + +/***************************************************** +*函数名称:void UART0_ClearFlag(UART0_Flag_Typedef UART0_Flag) +*函数功能:清除UART0中断标志状态 +*入口参数: +UART0_Flag_Typedef;UART0_Flag:中断标志位选择 +*出口参数:void +*****************************************************/ +//void UART0_ClearFlag(UART0_Flag_Typedef +// UART0_Flag) +//{ +// SCON &= (~UART0_Flag); +//} + +#endif + +/******************* (C) COPYRIGHT 2020 SinOne Microelectronics *****END OF FILE****/ \ No newline at end of file diff --git a/Keil_C/FWLib/SC92F_Lib/src/sc92f_usci0.c b/Keil_C/FWLib/SC92F_Lib/src/sc92f_usci0.c new file mode 100644 index 0000000..16a302a --- /dev/null +++ b/Keil_C/FWLib/SC92F_Lib/src/sc92f_usci0.c @@ -0,0 +1,529 @@ +//************************************************************ +// Copyright (c) 深圳市赛元微电子有限公司 +// 文件名称 : sc92F_usci0.c +// 作者 : +// 模块功能 : USCI0固件库函数C文件 +// 最后更正日期: 2022/01/05 +// 版本 : V1.10000 +// 说明 :该文件仅适用于SC92F系列芯片 +//************************************************************* + +#include "sc92f_usci0.h" + +#if defined (SC92L853x) || defined (SC92L753x) +/************************************************** +*函数名称:void USCI0_DeInit(void) +*函数功能:USCI0相关寄存器复位至缺省值 +*入口参数:void +*出口参数:void +**************************************************/ +void USCI0_DeInit(void) +{ + OTCON &= 0XCF; + US0CON0 = 0X00; + US0CON1 = 0X00; + US0CON2 = 0X00; + US0CON3 = 0X00; + IE1 &= (~0X01); + IP1 &= (~0X01); +} + +/************************************************** +*函数名称:void USCI0_SPI_Init(USCI0_SPI_FirstBit_TypeDef FirstBit, USCI0_SPI_BaudRatePrescaler_TypeDef BaudRatePrescaler,USCI0_SPI_Mode_TypeDef Mode, + USCI0_SPI_ClockPolarity_TypeDef ClockPolarity, USCI0_SPI_ClockPhase_TypeDef ClockPhase,USCI0_SPI_TXE_INT_TypeDef SPI_TXE_INT,USCI0_TransmissionMode_TypeDef TransmissionMode) +*函数功能:SPI初始化配置函数 +*入口参数: +USCI0_SPI_FirstBit_TypeDef:FirstBit:优先传送位选择(MSB/LSB) +USCI0_SPI_BaudRatePrescaler_TypeDef:BaudRatePrescaler:SPI时钟频率选择 +USCI0_SPI_Mode_TypeDef:Mode:SPI工作模式选择 +USCI0_SPI_ClockPolarity_TypeDef:ClockPolarity:SPI时钟极性选择 +USCI0_SPI_ClockPhase_TypeDef:ClockPhase:SPI时钟相位选择 +USCI0_SPI_TXE_INT_TypeDef:SPI_TXE_INT:发送缓存器中断允许选择,该功能在SC92FXX1X芯片上无效 +USCI0_TransmissionMode_TypeDef:TransmissionMode:SPI传输模式选择 8/16位 +*出口参数:void +**************************************************/ +void USCI0_SPI_Init(USCI0_SPI_FirstBit_TypeDef FirstBit, + USCI0_SPI_BaudRatePrescaler_TypeDef BaudRatePrescaler, USCI0_SPI_Mode_TypeDef Mode, + USCI0_SPI_ClockPolarity_TypeDef ClockPolarity, USCI0_SPI_ClockPhase_TypeDef ClockPhase, + USCI0_SPI_TXE_INT_TypeDef SPI_TXE_INT, USCI0_TransmissionMode_TypeDef TransmissionMode) +{ + + OTCON = (OTCON & 0XCF) | 0X10; +#if defined(SC92L853x) || defined(SC92L753x) + SPI_TXE_INT = USCI0_SPI_TXE_DISINT; //SPI_TXE_INT该功能在该类芯片上无效 + US0CON1 = US0CON1 & (~0X05) | FirstBit | TransmissionMode; +#endif + US0CON0 = US0CON0 & 0X80 | BaudRatePrescaler | Mode | ClockPolarity | ClockPhase; +} + +/************************************************** +*函数名称:void USCI0_TransmissionMode(USCI0_TransmissionMode_TypeDef TransmissionMode) +*函数功能:SPI 传输模式配置函数 +*入口参数: +USCI0_TransmissionMode_TypeDef:TransmissionMode:SPI传输模式选择 8/16e位 +*出口参数:void +**************************************************/ +void USCI0_TransmissionMode(USCI0_TransmissionMode_TypeDef TransmissionMode) +{ + if (TransmissionMode == USCI0_SPI_DATA8) + { + US0CON1 &= 0xFD; + } + else + { + US0CON1 |= 0x02; + } +} + +/***************************************************** +*函数名称:void USCI0_SPI_Cmd(FunctionalState NewState) +*函数功能:SPI功能开关函数 +*入口参数: +FunctionalState:NewState:功能启动/关闭选择 +*出口参数:void +*****************************************************/ +void USCI0_SPI_Cmd(FunctionalState NewState) +{ + OTCON = (OTCON & 0XCF) | 0X10; + + if (NewState != DISABLE) + { + US0CON0 |= 0X80; + } + else + { + US0CON0 &= (~0X80); + } +} +/***************************************************** +*函数名称:void USCI0_SPI_SendData_8(uint8_t Data) +*函数功能:USCI0 SPI发送数据 +*入口参数: +uint8_t:Data:发送的数据 +*出口参数:void +*****************************************************/ +void USCI0_SPI_SendData_8(uint8_t Data) +{ + US0CON2 = Data; +} + +/***************************************************** +*函数名称:uint8_t USCI0_SPI_ReceiveData_8(void) +*函数功能:获得US0CON2中的值 +*入口参数:void +*出口参数: +uint8_t:接收到的数据 +*****************************************************/ +uint8_t USCI0_SPI_ReceiveData_8(void) +{ + return US0CON2; +} + +/***************************************************** +*函数名称:void USCI0_SPI_SendData_16(uint16_t Data) +*函数功能:US0CON2 SPI发送数据 +*入口参数: +uint16_t:Data:发送的数据 +*出口参数:void +*****************************************************/ +void USCI0_SPI_SendData_16(uint16_t Data) +{ + US0CON3 = (uint8_t)(Data >> 8); + US0CON2 = (uint8_t)Data; +} + +/***************************************************** +*函数名称:uint16_t USCI0_SPI_ReceiveData_16(void) +*函数功能:获得US0CON2中的值 +*入口参数:void +*出口参数: +uint16_t:接收的数据 +*****************************************************/ +uint16_t USCI0_SPI_ReceiveData_16(void) +{ + uint16_t SPI_data; + SPI_data = (uint16_t)((US0CON3 << 8) | US0CON2); + return SPI_data; +} + +/************************************************** +*函数名称:void USCI0_TWI_Slave_Init(uint8_t TWI_Address) +*函数功能:USCI0 TWI从机初始化配置函数 +*入口参数: +uint8_t:TWI_Address:TWI作为从机时的7位从机地址 +*出口参数:void +**************************************************/ +void USCI0_TWI_Slave_Init(uint8_t TWI_Address) +{ + OTCON = OTCON & 0XCF | 0X20; + US0CON2 = TWI_Address << 1; +} + +/************************************************** +*函数名称:void USCI0_TWI_MasterCommunicationRate(USCI0_TWI_MasterCommunicationRate_TypeDef TWI_MasterCommunicationRate) +*函数功能:USCI0 TWI主机模式下通讯速率设定 +*入口参数: +USCI0_TWI_MasterCommunicationRate_TypeDef:TWI_MasterCommunicationRate:TWI主机模式下通讯速率 +*出口参数:void +**************************************************/ +void USCI0_TWI_MasterCommunicationRate(USCI0_TWI_MasterCommunicationRate_TypeDef + TWI_MasterCommunicationRate) +{ + OTCON = OTCON & 0XCF | 0X20; + US0CON1 |= TWI_MasterCommunicationRate; +} + +/************************************************** +*函数名称:void USCI0_TWI_Start(void) +*函数功能:USCI0 TWI 起始位 +*入口参数:void +*出口参数:void +**************************************************/ +void USCI0_TWI_Start(void) +{ + US0CON1 |= 0x20; +} + +/************************************************** +*函数名称:void USCI0_TWI_MasterModeStop(void) +*函数功能:USCI0 TWI主机模式停止位 +*入口参数:void +*出口参数:void +**************************************************/ +void USCI0_TWI_MasterModeStop(void) +{ + US0CON1 |= 0x10; +} + +/************************************************** +*函数名称:void USCI0_TWI_SlaveClockExtension(void) +*函数功能:USCI0 TWI从机模式时钟延长功能位 +*入口参数: +FunctionalState:NewState:功能启动/关闭选择 +*出口参数:void +**************************************************/ +void USCI0_TWI_SlaveClockExtension(FunctionalState NewState) +{ + OTCON = OTCON & 0XCF | 0X20; + + if (NewState != DISABLE) + { + US0CON1 |= 0x40; + } + else + { + US0CON1 &= 0XBF; + } +} + +/************************************************** +*函数名称:void USCI0_TWI_AcknowledgeConfig(FunctionalState NewState) +*函数功能:TWI接收应答使能函数 +*入口参数: +FunctionalState:NewState:接收应答使能/失能选择 +*出口参数:void +**************************************************/ +void USCI0_TWI_AcknowledgeConfig(FunctionalState NewState) +{ + OTCON = OTCON & 0XCF | 0X20; + + if (NewState != DISABLE) + { + US0CON0 |= 0X08; + } + else + { + US0CON0 &= 0XF7; + } +} + +/************************************************** +*函数名称:void USCI0_TWI_GeneralCallCmd(FunctionalState NewState) +*函数功能:TWI通用地址响应使能函数 +*入口参数: +FunctionalState:NewState:通用地址响应使能/失能选择 +*出口参数:void +**************************************************/ +void USCI0_TWI_GeneralCallCmd(FunctionalState NewState) +{ + OTCON = OTCON & 0XCF | 0X20; + + if (NewState != DISABLE) + { + US0CON2 |= 0X01; + } + else + { + US0CON2 &= 0XFE; + } +} + +/***************************************************** +*函数名称:FlagStatus USCI0_GetTWIStatus(USCI0_TWIState_TypeDef USCI0_TWIState) +*函数功能:读取TWI状态 +*入口参数: +USCI0_TWIState_TypeDef:USCI0_TWIState:TWI状态类型 +*出口参数: +FlagStatus:USCI0_SC标志状态 +*****************************************************/ +FlagStatus USCI0_GetTWIStatus(USCI0_TWIState_TypeDef USCI0_TWIState) +{ + if ((US0CON0 & 0x07) == USCI0_TWIState) + return SET; + else + return RESET; +} + +/***************************************************** +*函数名称:void USCI0_TWI_Cmd(FunctionalState NewState) +*函数功能:TWI功能开关函数 +*入口参数: +FunctionalState:NewState:功能启动/关闭选择 +*出口参数:void +*****************************************************/ +void USCI0_TWI_Cmd(FunctionalState NewState) +{ + OTCON = OTCON & 0XCF | 0X20; + + if (NewState != DISABLE) + { + US0CON0 |= 0X80; + } + else + { + US0CON0 &= (~0X80); + } +} + +/***************************************************** +*函数名称:void USCI0_TWI_SendData(uint8_t Data) +*函数功能:TWI发送数据 +*入口参数: +uint8_t:Data:发送的数据 +*出口参数:void +*****************************************************/ +void USCI0_TWI_SendData(uint8_t Data) +{ + US0CON3 = Data; +} + +/***************************************************** +*函数名称:uint8_t USCI0_TWI_SendData(void) +*函数功能:获得US0CON3中的值 +*入口参数:void +*出口参数: +uint8_t:接收的数据 +*****************************************************/ +uint8_t USCI0_TWI_ReceiveData(void) +{ + return US0CON3; +} + +/************************************************** +*函数名称:void USCI0_UART_Init(uint32_t UARTFsys, uint32_t BaudRate, USCI0_UART_Mode_TypeDef Mode, USCI0_UART_RX_TypeDef RxMode) +*函数功能:UART初始化配置函数 +*入口参数: +uint32_t:UARTFsys:系统时钟频率 +uint32_t:BaudRate:波特率 +USCI0_UART_Mode_TypeDef:Mode:UART1工作模式 +USCI0_UART_RX_TypeDef:RxMode:接收允许选择 +*出口参数:void +**************************************************/ +void USCI0_UART_Init(uint32_t UARTFsys, uint32_t BaudRate, USCI0_UART_Mode_TypeDef Mode, + USCI0_UART_RX_TypeDef RxMode) +{ + OTCON |= 0x30; + US0CON0 = US0CON0 & 0X0F | Mode | RxMode; + + if (Mode == USCI0_UART_Mode_8B) + { + if (BaudRate == USCI0_UART_BaudRate_FsysDIV12) + { + US0CON0 &= 0XDF; + } + else if (BaudRate == USCI0_UART_BaudRate_FsysDIV4) + { + US0CON0 |= 0X20; + } + } + else + { + US0CON2 = UARTFsys / BaudRate / 256; + US0CON1 = UARTFsys / BaudRate % 256; + } +} + +/***************************************************** +*函数名称:void USCI0_UART_SendData8(uint8_t Data) +*函数功能:USCI0 UART1发送8位数据 +*入口参数: +uint8_t:Data:发送的数据 +*出口参数:void +*****************************************************/ +void USCI0_UART_SendData8(uint8_t Data) +{ + US0CON3 = Data; +} + +/***************************************************** +*函数名称:uint8_t USCI0_UART_ReceiveData8(void) +*函数功能:获得US0CON3中的值 +*入口参数:void +*出口参数: +uint8_t:接收的数据 +*****************************************************/ +uint8_t USCI0_UART_ReceiveData8(void) +{ + return US0CON3; +} + +/***************************************************** +*函数名称:void USCI0_UART_SendData9(uint16_t Data) +*函数功能:UART1发送9位数据 +*入口参数: +uint16_t:Data:发送的数据 +*出口参数:void +*****************************************************/ +void USCI0_UART_SendData9(uint16_t Data) +{ + uint8_t Data_9Bit; + Data_9Bit = (Data >> 8); + + if (Data_9Bit) + { + US0CON0 |= 0x08; + } + else + { + US0CON0 &= 0xf7; + } + + US0CON3 = (uint8_t)Data; +} + +/***************************************************** +*函数名称:uint16_t USCI0_UART_ReceiveData9(void) +*函数功能:获得US0CON3中的值及第九位的值 +*入口参数:void +*出口参数: +uint16_t:接收的数据 +*****************************************************/ +uint16_t USCI0_UART_ReceiveData9(void) +{ + uint16_t Data9; + Data9 = US0CON3 + ((uint16_t)(US0CON0 & 0X04) << 6); + return Data9; +} + +/***************************************************** +*函数名称:void USCI0_ITConfig(FunctionalState NewState, PriorityStatus Priority) +*函数功能:USCI0中断初始化 +*入口参数: +FunctionalState:NewState:中断使能/关闭选择 +PriorityStatus:Priority:中断优先级选择 +*出口参数:void +*****************************************************/ +void USCI0_ITConfig(FunctionalState NewState, PriorityStatus Priority) +{ + if (NewState != DISABLE) + { + IE1 |= 0x01; + } + else + { + IE1 &= 0xFE; + } + + /************************************************************/ + if (Priority != LOW) + { + IP1 |= 0x01; + } + else + { + IP1 &= 0xFE; + } +} + +/***************************************************** +*函数名称:FlagStatus USCI0_GetFlagStatus(USCI0_Flag_TypeDef USCI0_FLAG) +*函数功能:获得USCI0标志状态 +*入口参数: +USCI0_Flag_TypeDef:USCI0_FLAG:所需获取的标志位 +*出口参数: +FlagStatus:USCI0标志状态 +*****************************************************/ +FlagStatus USCI0_GetFlagStatus(USCI0_Flag_TypeDef USCI0_FLAG) +{ + FlagStatus bitstatus = RESET; +#if defined(SC92L853x) || defined(SC92L753x) + if ((USCI0_FLAG == USCI0_SPI_FLAG_SPIF) || (USCI0_FLAG == USCI0_SPI_FLAG_WCOL) || (USCI0_FLAG == USCI0_TWI_FLAG_TXRXnE)) +#endif + { + if ((USCI0_FLAG & US0CON1) != (uint8_t)RESET) + { + bitstatus = SET; + } + else + { + bitstatus = RESET; + } + } + else + { + if ((USCI0_FLAG & US0CON0) != (uint8_t)RESET) + { + bitstatus = SET; + } + else + { + bitstatus = RESET; + } + } + + return bitstatus; +} + +/***************************************************** +*函数名称:void USCI0_ClearFlag(USCI0_Flag_TypeDef USCI0_FLAG) +*函数功能:清除USCI0标志状态 +*入口参数: +USCI0_Flag_TypeDef:USCI0_FLAG:所需清除的标志位 +*出口参数:void +*****************************************************/ +void USCI0_ClearFlag(USCI0_Flag_TypeDef USCI0_FLAG) +{ +#if defined(SC92L853x) || defined(SC92L753x) + if ((USCI0_FLAG == USCI0_SPI_FLAG_SPIF) || (USCI0_FLAG == USCI0_SPI_FLAG_WCOL) || (USCI0_FLAG == USCI0_TWI_FLAG_TXRXnE)) +#endif + { + US0CON1 &= (~USCI0_FLAG); //操作寄存器US0CON1 + } + else if ((USCI0_FLAG == USCI0_UART_FLAG_TI) || (USCI0_FLAG == USCI0_UART_FLAG_RI)) + { +#if defined(SC92L853x) || defined(SC92L753x) + US0CON0 = US0CON0 & 0xFC | USCI0_FLAG;//写1清零 +#endif + } + else + { + US0CON0 &= (~USCI0_FLAG); //操作寄存器US0CON0 + } +} + +/***************************************************** +*函数名称:void USCI0_TWI_SendAddr(uint8_t Addr,USCI0_TWI_RWType RW) +*函数功能:TWI发送地址,读写类型 +*入口参数: +uint8_t:Addr:发送的地址 0~127 +USCI0_TWI_RWType:RW:读写类型 +*出口参数:void +*****************************************************/ +void USCI0_TWI_SendAddr(uint8_t Addr, USCI0_TWI_RWType RW) +{ + US0CON3 = (Addr << 1) | RW; +} + +#endif + +/******************* (C) COPYRIGHT 2020 SinOne Microelectronics *****END OF FILE****/ diff --git a/Keil_C/FWLib/SC92F_Lib/src/sc92f_usci1.c b/Keil_C/FWLib/SC92F_Lib/src/sc92f_usci1.c new file mode 100644 index 0000000..95e0773 --- /dev/null +++ b/Keil_C/FWLib/SC92F_Lib/src/sc92f_usci1.c @@ -0,0 +1,528 @@ +//************************************************************ +// Copyright (c) 深圳市赛元微电子有限公司 +// 文件名称 : sc92F_USCI1.c +// 作者 : +// 模块功能 : USCI1固件库函数C文件 +// 最后更正日期: 2022/01/05 +// 版本 : V1.10000 +// 说明 :该文件仅适用于SC92F系列芯片 +//************************************************************* + +#include "sc92f_usci1.h" + +#if defined (SC92L853x) || defined (SC92L753x) +/************************************************** +*函数名称:void USCI1_DeInit(void) +*函数功能:USCI1相关寄存器复位至缺省值 +*入口参数:void +*出口参数:void +**************************************************/ +void USCI1_DeInit(void) +{ + OTCON &= 0X3F; + US1CON0 = 0X00; + US1CON1 = 0X00; + US1CON2 = 0X00; + US1CON3 = 0X00; + IE2 &= (~0X01); + IP2 &= (~0X01); +} + +/************************************************** +*函数名称:void USCI1_SPI_Init(USCI1_SPI_FirstBit_TypeDef FirstBit, USCI1_SPI_BaudRatePrescaler_TypeDef BaudRatePrescaler,USCI1_SPI_Mode_TypeDef Mode, + USCI1_SPI_ClockPolarity_TypeDef ClockPolarity, USCI1_SPI_ClockPhase_TypeDef ClockPhase,USCI1_SPI_TXE_INT_TypeDef SPI_TXE_INT,USCI1_TransmissionMode_TypeDef TransmissionMode) +*函数功能:SPI初始化配置函数 +*入口参数: +USCI1_SPI_FirstBit_TypeDef:FirstBit:优先传送位选择(MSB/LSB) +USCI1_SPI_BaudRatePrescaler_TypeDef:BaudRatePrescaler:SPI时钟频率选择 +USCI1_SPI_Mode_TypeDef:Mode:SPI工作模式选择 +USCI1_SPI_ClockPolarity_TypeDef:ClockPolarity:SPI时钟极性选择 +USCI1_SPI_ClockPhase_TypeDef:ClockPhase:SPI时钟相位选择 +USCI1_SPI_TXE_INT_TypeDef:SPI_TXE_INT:发送缓存器中断允许选择,该功能在SC92FXX1X芯片上无效 +USCI1_TransmissionMode_TypeDef:TransmissionMode:SPI传输模式选择 8/16位 +*出口参数:void +**************************************************/ +void USCI1_SPI_Init(USCI1_SPI_FirstBit_TypeDef FirstBit, + USCI1_SPI_BaudRatePrescaler_TypeDef BaudRatePrescaler, USCI1_SPI_Mode_TypeDef Mode, + USCI1_SPI_ClockPolarity_TypeDef ClockPolarity, USCI1_SPI_ClockPhase_TypeDef ClockPhase, + USCI1_SPI_TXE_INT_TypeDef SPI_TXE_INT, USCI1_TransmissionMode_TypeDef TransmissionMode) +{ + + OTCON = (OTCON & 0X3F) | 0X40; +#if defined(SC92L853x) || defined(SC92L753x) + SPI_TXE_INT = USCI1_SPI_TXE_DISINT; //SPI_TXE_INT该功能无效 + US1CON1 = US1CON1 & (~0X05) | FirstBit | TransmissionMode; +#endif + US1CON0 = US1CON0 & 0X80 | BaudRatePrescaler | Mode | ClockPolarity | ClockPhase; +} + +/************************************************** +*函数名称:void USCI1_TransmissionMode(USCI1_TransmissionMode_TypeDef TransmissionMode) +*函数功能:SPI 传输模式配置函数 +*入口参数: +USCI1_TransmissionMode_TypeDef:TransmissionMode:SPI传输模式选择 8/16e位 +*出口参数:void +**************************************************/ +void USCI1_TransmissionMode(USCI1_TransmissionMode_TypeDef TransmissionMode) +{ + if (TransmissionMode == USCI1_SPI_DATA8) + { + US1CON1 &= 0xFD; + } + else + { + US1CON1 |= 0x02; + } +} + +/***************************************************** +*函数名称:void USCI1_SPI_Cmd(FunctionalState NewState) +*函数功能:SPI功能开关函数 +*入口参数: +FunctionalState:NewState:功能启动/关闭选择 +*出口参数:void +*****************************************************/ +void USCI1_SPI_Cmd(FunctionalState NewState) +{ + OTCON = (OTCON & 0X3F) | 0X40; + + if (NewState != DISABLE) + { + US1CON0 |= 0X80; + } + else + { + US1CON0 &= (~0X80); + } +} +/***************************************************** +*函数名称:void USCI1_SPI_SendData_8(uint8_t Data) +*函数功能:USCI1 SPI发送数据 +*入口参数: +uint8_t:Data:发送的数据 +*出口参数:void +*****************************************************/ +void USCI1_SPI_SendData_8(uint8_t Data) +{ + US1CON2 = Data; +} + +/***************************************************** +*函数名称:uint8_t USCI1_SPI_ReceiveData_8(void) +*函数功能:获得US1CON2中的值 +*入口参数:void +*出口参数: +uint8_t:接收的数据 +*****************************************************/ +uint8_t USCI1_SPI_ReceiveData_8(void) +{ + return US1CON2; +} + +/***************************************************** +*函数名称:void USCI1_SPI_SendData_16(uint16_t Data) +*函数功能:US1CON2 SPI发送数据 +*入口参数: +uint16_t:Data:发送的数据 +*出口参数:void +*****************************************************/ +void USCI1_SPI_SendData_16(uint16_t Data) +{ + US1CON3 = (uint8_t)(Data >> 8); + US1CON2 = (uint8_t)Data; +} + +/***************************************************** +*函数名称:uint16_t USCI1_SPI_ReceiveData_16(void) +*函数功能:获得US1CON2中的值 +*入口参数:void +*出口参数: +uint16_t:接收的数据 +*****************************************************/ +uint16_t USCI1_SPI_ReceiveData_16(void) +{ + uint16_t SPI_data; + SPI_data = (uint16_t)((US1CON3 << 8) | US1CON2); + return SPI_data; +} + +/************************************************** +*函数名称:void USCI1_TWI_Slave_Init(uint8_t TWI_Address) +*函数功能:USCI1 TWI从机初始化配置函数 +*入口参数: +uint8_t:TWI_Address:TWI作为从机时的7位从机地址 +*出口参数:void +**************************************************/ +void USCI1_TWI_Slave_Init(uint8_t TWI_Address) +{ + OTCON = OTCON & 0X3F | 0X80; + US1CON2 = TWI_Address << 1; +} + +/************************************************** +*函数名称:void USCI1_TWI_MasterCommunicationRate(USCI1_TWI_MasterCommunicationRate_TypeDef TWI_MasterCommunicationRate) +*函数功能:USCI1 TWI主机模式下通讯速率设定 +*入口参数: +USCI1_TWI_MasterCommunicationRate_TypeDef:TWI_MasterCommunicationRate:TWI主机模式下通讯速率 +*出口参数:void +**************************************************/ +void USCI1_TWI_MasterCommunicationRate(USCI1_TWI_MasterCommunicationRate_TypeDef + TWI_MasterCommunicationRate) +{ + OTCON = OTCON & 0X3F | 0X80; + US1CON1 |= TWI_MasterCommunicationRate; +} + +/************************************************** +*函数名称:void USCI1_TWI_Start(void) +*函数功能:USCI1 TWI 起始位 +*入口参数:void +*出口参数:void +**************************************************/ +void USCI1_TWI_Start(void) +{ + US1CON1 |= 0x20; +} + +/************************************************** +*函数名称:void USCI1_TWI_MasterModeStop(void) +*函数功能:USCI1 TWI主机模式停止位 +*入口参数:void +*出口参数:void +**************************************************/ +void USCI1_TWI_MasterModeStop(void) +{ + US1CON1 |= 0x10; +} + +/************************************************** +*函数名称:void USCI1_TWI_SlaveClockExtension(FunctionalState NewState) +*函数功能:USCI1 TWI从机模式时钟延长功能位 +*入口参数: +FunctionalState:NewState:使能/失能选择 +*出口参数:void +**************************************************/ +void USCI1_TWI_SlaveClockExtension(FunctionalState NewState) +{ + OTCON = OTCON & 0X3F | 0X80; + + if (NewState != DISABLE) + { + US1CON1 |= 0x40; + } + else + { + US1CON1 &= 0XBF; + } +} + +/************************************************** +*函数名称:void USCI1_TWI_AcknowledgeConfig(FunctionalState NewState) +*函数功能:TWI接收应答使能函数 +*入口参数: +FunctionalState:NewState:接收应答使能/失能选择 +*出口参数:void +**************************************************/ +void USCI1_TWI_AcknowledgeConfig(FunctionalState NewState) +{ + OTCON = OTCON & 0X3F | 0X80; + + if (NewState != DISABLE) + { + US1CON0 |= 0X08; + } + else + { + US1CON0 &= 0XF7; + } +} + +/************************************************** +*函数名称:void USCI1_TWI_GeneralCallCmd(FunctionalState NewState) +*函数功能:TWI通用地址响应使能函数 +*入口参数: +FunctionalState:NewState:接收应答使能/失能选择 +*出口参数:void +**************************************************/ +void USCI1_TWI_GeneralCallCmd(FunctionalState NewState) +{ + OTCON = OTCON & 0X3F | 0X80; + + if (NewState != DISABLE) + { + US1CON2 |= 0X01; + } + else + { + US1CON2 &= 0XFE; + } +} + +/***************************************************** +*函数名称:FlagStatus USCI1_GetTWIStatus(USCI1_TWIState_TypeDef USCI1_TWIState) +*函数功能:读取TWI状态 +*入口参数: +USCI1_TWIState_TypeDef:USCI1_TWIState:TWI状态类型 +*出口参数: +FlagStatus:USCI1_TWI标志状态 +*****************************************************/ +FlagStatus USCI1_GetTWIStatus(USCI1_TWIState_TypeDef USCI1_TWIState) +{ + if ((US1CON0 & 0x07) == USCI1_TWIState) + return SET; + else + return RESET; +} + +/***************************************************** +*函数名称:void USCI1_TWI_Cmd(FunctionalState NewState) +*函数功能:TWI功能开关函数 +*入口参数: +FunctionalState:NewState:功能启动/关闭选择 +*出口参数:void +*****************************************************/ +void USCI1_TWI_Cmd(FunctionalState NewState) +{ + OTCON = OTCON & 0X3F | 0X80; + + if (NewState != DISABLE) + { + US1CON0 |= 0X80; + } + else + { + US1CON0 &= (~0X80); + } +} + +/***************************************************** +*函数名称:void USCI1_TWI_SendData(uint8_t Data) +*函数功能:TWI发送数据 +*入口参数: +uint8_t:Data:发送的数据 +*出口参数:void +*****************************************************/ +void USCI1_TWI_SendData(uint8_t Data) +{ + US1CON3 = Data; +} + +/***************************************************** +*函数名称:uint8_t USCI1_TWI_SendData(void) +*函数功能:获得US1CON3中的值 +*入口参数:void +*出口参数: +uint8_t:接收的数据 +*****************************************************/ +uint8_t USCI1_TWI_ReceiveData(void) +{ + return US1CON3; +} + +/************************************************** +*函数名称:void USCI1_UART_Init(uint32_t UARTFsys, uint32_t BaudRate, USCI1_UART_Mode_TypeDef Mode, USCI1_UART_RX_TypeDef RxMode) +*函数功能:UART初始化配置函数 +*入口参数: +uint32_t:UARTFsys:系统时钟频率 +uint32_t:BaudRate:波特率 +USCI1_UART_Mode_TypeDef:Mode:UART1工作模式 +USCI1_UART_RX_TypeDef:RxMode:接收允许选择 +*出口参数:void +**************************************************/ +void USCI1_UART_Init(uint32_t UARTFsys, uint32_t BaudRate, USCI1_UART_Mode_TypeDef Mode, + USCI1_UART_RX_TypeDef RxMode) +{ + OTCON |= 0xC0; + US1CON0 = US1CON0 & 0X0F | Mode | RxMode; + + if (Mode == USCI1_UART_Mode_8B) + { + if (BaudRate == USCI1_UART_BaudRate_FsysDIV12) + { + US1CON0 &= 0XDF; + } + else if (BaudRate == USCI1_UART_BaudRate_FsysDIV4) + { + US1CON0 |= 0X20; + } + } + else + { + US1CON2 = UARTFsys / BaudRate / 256; + US1CON1 = UARTFsys / BaudRate % 256; + } +} + +/***************************************************** +*函数名称:void USCI1_UART_SendData8(uint8_t Data) +*函数功能:USCI1 UART1发送8位数据 +*入口参数: +uint8_t:Data:发送的数据 +*出口参数:void +*****************************************************/ +void USCI1_UART_SendData8(uint8_t Data) +{ + US1CON3 = Data; +} + +/***************************************************** +*函数名称:uint8_t USCI1_UART_ReceiveData8(void) +*函数功能:获得US1CON3中的值 +*入口参数:void +*出口参数: +uint8_t:接收的数据 +*****************************************************/ +uint8_t USCI1_UART_ReceiveData8(void) +{ + return US1CON3; +} + +/***************************************************** +*函数名称:void USCI1_UART_SendData9(uint16_t Data) +*函数功能:UART1发送9位数据 +*入口参数: +uint16_t:Data:发送的数据 +*出口参数:void +*****************************************************/ +void USCI1_UART_SendData9(uint16_t Data) +{ + uint8_t Data_9Bit; + Data_9Bit = (Data >> 8); + + if (Data_9Bit) + { + US1CON0 |= 0x08; + } + else + { + US1CON0 &= 0xf7; + } + + US1CON3 = (uint8_t)Data; +} + +/***************************************************** +*函数名称:uint16_t USCI1_UART_ReceiveData9(void) +*函数功能:获得US1CON3中的值及第九位的值 +*入口参数:void +*出口参数: +uint16_t:接收的数据 +*****************************************************/ +uint16_t USCI1_UART_ReceiveData9(void) +{ + uint16_t Data9; + Data9 = US1CON3 + ((uint16_t)(US1CON0 & 0X04) << 6); + return Data9; +} + +/***************************************************** +*函数名称:void USCI1_ITConfig(FunctionalState NewState, PriorityStatus Priority) +*函数功能:USCI1中断初始化 +*入口参数: +FunctionalState:NewState:中断使能/关闭选择 +PriorityStatus:Priority:中断优先级选择 +*出口参数:void +*****************************************************/ +void USCI1_ITConfig(FunctionalState NewState, PriorityStatus Priority) +{ + if (NewState != DISABLE) + { + IE2 |= 0x01; + } + else + { + IE2 &= 0xFE; + } + + /************************************************************/ + if (Priority != LOW) + { + IP2 |= 0x01; + } + else + { + IP2 &= 0xFE; + } +} + +/***************************************************** +*函数名称:FlagStatus USCI1_GetFlagStatus(USCI1_Flag_TypeDef USCI1_FLAG) +*函数功能:获得USCI1标志状态 +*入口参数: +USCI1_Flag_Typedef:USCI1_Flag:中断标志位选择 +*出口参数: +FlagStatus:USCI1标志状态 +*****************************************************/ +FlagStatus USCI1_GetFlagStatus(USCI1_Flag_TypeDef USCI1_FLAG) +{ + FlagStatus bitstatus = RESET; +#if defined(SC92L853x) || defined(SC92L753x) + if ((USCI1_FLAG == USCI1_SPI_FLAG_SPIF) || (USCI1_FLAG == USCI1_SPI_FLAG_WCOL) || (USCI1_FLAG == USCI1_TWI_FLAG_TXRXnE)) +#endif + { + if ((USCI1_FLAG & US1CON1) != (uint8_t)RESET) + { + bitstatus = SET; + } + else + { + bitstatus = RESET; + } + } + else + { + if ((USCI1_FLAG & US1CON0) != (uint8_t)RESET) + { + bitstatus = SET; + } + else + { + bitstatus = RESET; + } + } + + return bitstatus; +} + +/***************************************************** +*函数名称:void USCI1_ClearFlag(USCI1_Flag_TypeDef USCI1_FLAG) +*函数功能:清除USCI1标志状态 +*入口参数: +USCI1_Flag_TypeDef:USCI1_FLAG:所需清除的标志位 +*出口参数:void +*****************************************************/ +void USCI1_ClearFlag(USCI1_Flag_TypeDef USCI1_FLAG) +{ +#if defined(SC92L853x) || defined(SC92L753x) + if ((USCI1_FLAG == USCI1_SPI_FLAG_SPIF) || (USCI1_FLAG == USCI1_SPI_FLAG_WCOL) || (USCI1_FLAG == USCI1_TWI_FLAG_TXRXnE)) +#endif + { + US1CON1 &= (~USCI1_FLAG); //操作寄存器US1CON1 + } + else if ((USCI1_FLAG == USCI1_UART_FLAG_TI) || (USCI1_FLAG == USCI1_UART_FLAG_RI)) + { +#if defined(SC92L853x) || defined(SC92L753x) + US1CON0 = US1CON0 & 0xFC | USCI1_FLAG; //写1清零 +#endif + } + else + { + US1CON0 &= (~USCI1_FLAG); //操作寄存器US1CON0 + } +} + +/***************************************************** +*函数名称:void USCI1_TWI_SendAddr(uint8_t Addr,USCI1_TWI_RWType RW) +*函数功能:TWI发送地址,读写类型 +*入口参数: +uint8_t:Addr:发送的地址 0~127 +USCI1_TWI_RWType:RW:读写类型 +*出口参数:void +*****************************************************/ +void USCI1_TWI_SendAddr(uint8_t Addr, USCI1_TWI_RWType RW) +{ + US1CON3 = (Addr << 1) | RW; +} + +#endif +/******************* (C) COPYRIGHT 2020 SinOne Microelectronics *****END OF FILE****/ diff --git a/Keil_C/FWLib/SC92F_Lib/src/sc92f_usci2.c b/Keil_C/FWLib/SC92F_Lib/src/sc92f_usci2.c new file mode 100644 index 0000000..4059545 --- /dev/null +++ b/Keil_C/FWLib/SC92F_Lib/src/sc92f_usci2.c @@ -0,0 +1,535 @@ +//************************************************************ +// Copyright (c) 深圳市赛元微电子有限公司 +// 文件名称: sc92F_usci2.c +// 作者: 赛元应用团队 +// 模块功能: USCI2固件库函数C文件 +// 最后更正日期: 2022/01/05 +// 版本: V1.10001 +// 说明: 该文件仅适用于SC92系列芯片 +//************************************************************* + +/* 头文件引用 */ +#include "sc92f_usci2.h" + +#if defined (SC92L853x) || defined (SC92L753x) +/************************************************** +*函数名称:void USCI2_DeInit(void) +*函数功能:USCI2相关寄存器复位至缺省值 +*入口参数:void +*出口参数:void +**************************************************/ +void USCI2_DeInit(void) +{ + TMCON &= 0X3F; + US2CON0 = 0X00; + US2CON1 = 0X00; + US2CON2 = 0X00; + US2CON3 = 0X00; + IE2 &= (~0X02); + IP2 &= (~0X02); +} + +/************************************************** +*函数名称:void USCI2_SPI_Init(USCI2_SPI_FirstBit_TypeDef FirstBit, USCI2_SPI_BaudRatePrescaler_TypeDef BaudRatePrescaler,USCI2_SPI_Mode_TypeDef Mode, + USCI2_SPI_ClockPolarity_TypeDef ClockPolarity, USCI2_SPI_ClockPhase_TypeDef ClockPhase,USCI2_SPI_TXE_INT_TypeDef SPI_TXE_INT,USCI2_TransmissionMode_TypeDef TransmissionMode) +*函数功能:SPI初始化配置函数 +*入口参数: +USCI2_SPI_FirstBit_TypeDef:FirstBit:优先传送位选择(MSB/LSB) +USCI2_SPI_BaudRatePrescaler_TypeDef:BaudRatePrescaler:SPI时钟频率选择 +USCI2_SPI_Mode_TypeDef:Mode:SPI工作模式选择 +USCI2_SPI_ClockPolarity_TypeDef:ClockPolarity:SPI时钟极性选择 +USCI2_SPI_ClockPhase_TypeDef:ClockPhase:SPI时钟相位选择 +USCI2_SPI_TXE_INT_TypeDef:SPI_TXE_INT:发送缓存器中断允许选择,该功能在SC92FXX1X芯片上无效 +USCI2_TransmissionMode_TypeDef:TransmissionMode:SPI传输模式选择 8/16位 +*出口参数:void +**************************************************/ +void USCI2_SPI_Init(USCI2_SPI_FirstBit_TypeDef FirstBit, + USCI2_SPI_BaudRatePrescaler_TypeDef BaudRatePrescaler, USCI2_SPI_Mode_TypeDef Mode, + USCI2_SPI_ClockPolarity_TypeDef ClockPolarity, USCI2_SPI_ClockPhase_TypeDef ClockPhase, + USCI2_SPI_TXE_INT_TypeDef SPI_TXE_INT, USCI2_TransmissionMode_TypeDef TransmissionMode) +{ + TMCON = (TMCON & 0X3F) | 0X40; +#if defined(SC92L853x) || defined(SC92L753x) + SPI_TXE_INT = USCI2_SPI_TXE_DISINT; //SPI_TXE_INT该功能在SC92FXX1X芯片上无效 + US2CON1 = US2CON1 & (~0X05) | FirstBit | TransmissionMode; + +#endif +#if defined(SC92L853x) || defined(SC92L753x) + US2CON1 = US2CON1 & (~0X05) | FirstBit | SPI_TXE_INT | TransmissionMode; +#endif + US2CON0 = US2CON0 & 0X80 | BaudRatePrescaler | Mode | ClockPolarity | ClockPhase; +} + +/************************************************** +*函数名称:void USCI2_TransmissionMode(USCI2_TransmissionMode_TypeDef TransmissionMode) +*函数功能:SPI 传输模式配置函数 +*入口参数: +USCI2_TransmissionMode_TypeDef:TransmissionMode:SPI传输模式选择 8/16e位 +*出口参数:void +**************************************************/ +void USCI2_TransmissionMode(USCI2_TransmissionMode_TypeDef TransmissionMode) +{ + + TMCON = (TMCON & 0X3F) | 0X40; + if (TransmissionMode == USCI2_SPI_DATA8) + { + US2CON1 &= 0xFD; + } + else + { + US2CON1 |= 0x02; + } +} + +/***************************************************** +*函数名称:void USCI2_SPI_Cmd(FunctionalState NewState) +*函数功能:SPI功能开关函数 +*入口参数: +FunctionalState:NewState:功能启动/关闭选择 +*出口参数:void +*****************************************************/ +void USCI2_SPI_Cmd(FunctionalState NewState) +{ + TMCON = (TMCON & 0X3F) | 0X40; + + if (NewState != DISABLE) + { + US2CON0 |= 0X80; + } + else + { + US2CON0 &= (~0X80); + } +} + +/***************************************************** +*函数名称:void USCI2_SPI_SendData_8(uint8_t Data) +*函数功能:USCI2 SPI发送数据 +*入口参数: +uint8_t:Data:发送的数据 +*出口参数:void +*****************************************************/ +void USCI2_SPI_SendData_8(uint8_t Data) +{ + US2CON2 = Data; +} + +/***************************************************** +*函数名称:uint8_t USCI2_SPI_ReceiveData_8(void) +*函数功能:获得US2CON2中的值 +*入口参数:void +*出口参数: +uint8_t:接收的数据 +*****************************************************/ +uint8_t USCI2_SPI_ReceiveData_8(void) +{ + return US2CON2; +} + +/***************************************************** +*函数名称:void USCI2_SPI_SendData_16(uint16_t Data) +*函数功能:US2CON2 SPI发送数据 +*入口参数: +uint16_t:Data:发送的数据 +*出口参数:void +*****************************************************/ +void USCI2_SPI_SendData_16(uint16_t Data) +{ + US2CON3 = (uint8_t)(Data >> 8); + US2CON2 = (uint8_t)Data; +} + +/***************************************************** +*函数名称:uint16_t USCI2_SPI_ReceiveData_16(void) +*函数功能:获得US2CON2中的值 +*入口参数:void +*出口参数: +uint16_t:接收的数据 +*****************************************************/ +uint16_t USCI2_SPI_ReceiveData_16(void) +{ + uint16_t SPI_data; + SPI_data = (uint16_t)((US2CON3 << 8) | US2CON2); + return SPI_data; +} + +/************************************************** +*函数名称:void USCI2_TWI_Slave_Init(uint8_t TWI_Address) +*函数功能:USCI2 TWI 从机初始化配置函数 +*入口参数: +uint8_t:TWI_Address:TWI作为从机时的7位从机地址 +*出口参数:void +**************************************************/ +void USCI2_TWI_Slave_Init(uint8_t TWI_Address) +{ + TMCON = TMCON & 0X3F | 0X80; + US2CON2 = TWI_Address << 1; +} + +/************************************************** +*函数名称:void USCI2_TWI_MasterCommunicationRate(USCI2_TWI_MasterCommunicationRate_TypeDef TWI_MasterCommunicationRate) +*函数功能:USCI2 TWI主机模式下通讯速率设定 +*入口参数: +USCI2_TWI_MasterCommunicationRate_TypeDef:TWI_MasterCommunicationRate:TWI主机模式下通讯速率 +*出口参数:void +**************************************************/ +void USCI2_TWI_MasterCommunicationRate(USCI2_TWI_MasterCommunicationRate_TypeDef + TWI_MasterCommunicationRate) +{ + TMCON = TMCON & 0X3F | 0X80; //选择usci2为TWI + + US2CON1 = TWI_MasterCommunicationRate; +} + +/************************************************** +*函数名称:void USCI2_TWI_Start(void) +*函数功能:USCI2 TWI 起始位 +*入口参数:void +*出口参数:void +**************************************************/ +void USCI2_TWI_Start(void) +{ + US2CON1 |= 0x20; +} + +/************************************************** +*函数名称:void USCI2_TWI_MasterModeStop(void) +*函数功能:USCI2 TWI主机模式停止位 +*入口参数:void +*出口参数:void +**************************************************/ +void USCI2_TWI_MasterModeStop(void) +{ + US2CON1 |= 0x10; +} + +/************************************************** +*函数名称:void USCI2_TWI_SlaveClockExtension(void) +*函数功能:USCI2 TWI从机模式时钟延长功能位 +*入口参数:void +*出口参数:void +**************************************************/ +void USCI2_TWI_SlaveClockExtension(FunctionalState NewState) +{ + TMCON = TMCON & 0X3F | 0X80; + + if (NewState != DISABLE) + { + US2CON1 |= 0x40; + } + else + { + US2CON1 &= 0XBF; + } +} + +/************************************************** +*函数名称:void USCI2_TWI_AcknowledgeConfig(FunctionalState NewState) +*函数功能:TWI接收应答使能函数 +*入口参数: +FunctionalState:NewState:接收应答使能/失能选择 +*出口参数:void +**************************************************/ +void USCI2_TWI_AcknowledgeConfig(FunctionalState NewState) +{ + TMCON = TMCON & 0X3F | 0X80; + + if (NewState != DISABLE) + { + US2CON0 |= 0X08; + } + else + { + US2CON0 &= 0XF7; + } +} + +/************************************************** +*函数名称:void USCI2_TWI_GeneralCallCmd(FunctionalState NewState) +*函数功能:TWI通用地址响应使能函数 +*入口参数: +FunctionalState:NewState:接收应答使能/失能选择 +*出口参数:void +**************************************************/ +void USCI2_TWI_GeneralCallCmd(FunctionalState NewState) +{ + TMCON = TMCON & 0X3F | 0X80; + + if (NewState != DISABLE) + { + US2CON2 |= 0X01; + } + else + { + US2CON2 &= 0XFE; + } +} + +/***************************************************** +*函数名称:FlagStatus USCI2_GetTWIStatus(USCI2_TWIState_TypeDef USCI2_TWIState) +*函数功能:读取TWI状态 +*入口参数: +USCI2_TWIState_TypeDef:USCI2_TWIState:TWI状态类型 +*出口参数: +FlagStatus:USCI2_TWI标志状态 +*****************************************************/ +FlagStatus USCI2_GetTWIStatus(USCI2_TWIState_TypeDef USCI2_TWIState) +{ + if ((US2CON0 & 0x07) == USCI2_TWIState) + return SET; + else + return RESET; +} + +/***************************************************** +*函数名称:void USCI2_TWI_Cmd(FunctionalState NewState) +*函数功能:TWI功能开关函数 +*入口参数: +FunctionalState:NewState:功能启动/关闭选择 +*出口参数:void +*****************************************************/ +void USCI2_TWI_Cmd(FunctionalState NewState) +{ + TMCON = TMCON & 0X3F | 0X80; + + if (NewState != DISABLE) + { + US2CON0 |= 0X80; + } + else + { + US2CON0 &= (~0X80); + } +} + +/***************************************************** +*函数名称:void USCI2_TWI_SendData(uint8_t Data) +*函数功能:TWI发送数据 +*入口参数: +uint8_t:Data:发送的数据 +*出口参数:void +*****************************************************/ +void USCI2_TWI_SendData(uint8_t Data) +{ + US2CON3 = Data; +} +/***************************************************** +*函数名称:void USCI2_TWI_SendAddr(uint8_t Addr,USCI2_TWI_RWType RW) +*函数功能:TWI发送地址,读写类型 +*入口参数: +uint8_t:Addr:发送的地址 +USCI2_TWI_RWType:RW:读写类型 +*出口参数:void +*****************************************************/ +void USCI2_TWI_SendAddr(uint8_t Addr, USCI2_TWI_RWType RW) +{ + US2CON3 = (Addr << 1) | RW; +} +/***************************************************** +*函数名称:uint8_t USCI2_TWI_ReceiveData(void) +*函数功能:获得US2CON3中的值 +*入口参数:void +*出口参数: +uint8_t:接收的数据 +*****************************************************/ +uint8_t USCI2_TWI_ReceiveData(void) +{ + return US2CON3; +} + +/************************************************** +*函数名称:void USCI2_UART_Init(uint32_t UARTFsys, uint32_t BaudRate, USCI2_UART_Mode_TypeDef Mode, USCI2_UART_RX_TypeDef RxMode) +*函数功能:UART初始化配置函数 +*入口参数: +uint32_t:UARTFsys:系统时钟频率 +uint32_t:BaudRate:波特率 +USCI2_UART_Mode_TypeDef:Mode:UART1工作模式 +USCI2_UART_RX_TypeDef:RxMode:接收允许选择 +*出口参数:void +**************************************************/ +void USCI2_UART_Init(uint32_t UARTFsys, uint32_t BaudRate, USCI2_UART_Mode_TypeDef Mode, + USCI2_UART_RX_TypeDef RxMode) +{ + TMCON |= 0xC0; + US2CON0 = US2CON0 & 0X0F | Mode | RxMode; + + if (Mode == USCI2_UART_Mode_8B) + { + if (BaudRate == USCI2_UART_BaudRate_FsysDIV12) + { + US2CON0 &= 0XDF; + } + else if (BaudRate == USCI2_UART_BaudRate_FsysDIV4) + { + US2CON0 |= 0X20; + } + } + else + { + US2CON2 = UARTFsys / BaudRate / 256; + US2CON1 = UARTFsys / BaudRate % 256; + } +} + +/***************************************************** +*函数名称:void USCI2_UART_SendData8(uint8_t Data) +*函数功能:USCI2 UART1发送8位数据 +*入口参数: +uint8_t:Data:发送的数据 +*出口参数:void +*****************************************************/ +void USCI2_UART_SendData8(uint8_t Data) +{ + US2CON3 = Data; +} + +/***************************************************** +*函数名称:uint8_t USCI2_UART_ReceiveData8(void) +*函数功能:获得US2CON3中的值 +*入口参数:void +*出口参数: +uint8_t:接收的数据 +*****************************************************/ +uint8_t USCI2_UART_ReceiveData8(void) +{ + return US2CON3; +} + +/***************************************************** +*函数名称:void USCI2_UART_SendData9(uint16_t Data) +*函数功能:UART发送9位数据 +*入口参数: +uint16_t:Data:发送的数据 +*出口参数:void +*****************************************************/ +void USCI2_UART_SendData9(uint16_t Data) +{ + uint8_t Data_9Bit; + Data_9Bit = (Data >> 8); + + if (Data_9Bit) + { + US2CON0 |= 0x08; + } + else + { + US2CON0 &= 0xf7; + } + + US2CON3 = (uint8_t)Data; +} + +/***************************************************** +*函数名称:uint16_t USCI2_UART_ReceiveData9(void) +*函数功能:获得US2CON3中的值及第九位的值 +*入口参数:void +*出口参数: +uint16_t:接收的数据 +*****************************************************/ +uint16_t USCI2_UART_ReceiveData9(void) +{ + uint16_t Data9; + Data9 = US2CON3 + ((uint16_t)(US2CON0 & 0X04) << 6); + return Data9; +} + +/***************************************************** +*函数名称:void USCI2_ITConfig(FunctionalState NewState, PriorityStatus Priority) +*函数功能:USCI2中断初始化 +*入口参数: +FunctionalState:NewState:中断使能/关闭选择 +PriorityStatus:Priority:中断优先级选择 +*出口参数:void +*****************************************************/ +void USCI2_ITConfig(FunctionalState NewState, PriorityStatus Priority) +{ + if (NewState != DISABLE) + { + IE2 |= 0x02; + } + else + { + IE2 &= 0xFD; + } + + /************************************************************/ + if (Priority != LOW) + { + IP2 |= 0x02; + } + else + { + IP2 &= 0xFD; + } +} + +/***************************************************** +*函数名称:FlagStatus USCI2_GetFlagStatus(USCI2_Flag_TypeDef USCI2_FLAG) +*函数功能:获得USCI2标志状态 +*入口参数: +USCI2_Flag_Typedef:USCI2_Flag:所需获取的标志位 +*出口参数: +FlagStatus:USCI2标志状态 +*****************************************************/ +FlagStatus USCI2_GetFlagStatus(USCI2_Flag_TypeDef USCI2_FLAG) +{ + FlagStatus bitstatus = RESET; + +#if defined(SC92L853x) || defined(SC92L753x) + + if ((USCI2_FLAG == USCI2_SPI_FLAG_SPIF) || (USCI2_FLAG == USCI2_SPI_FLAG_WCOL)) +#endif + { + if ((USCI2_FLAG & US2CON1) != (uint8_t)RESET) + { + bitstatus = SET; + } + else + { + bitstatus = RESET; + } + } + else + { + if ((USCI2_FLAG & US2CON0) != (uint8_t)RESET) + { + bitstatus = SET; + } + else + { + bitstatus = RESET; + } + } + + return bitstatus; +} + +/***************************************************** +*函数名称:void USCI2_ClearFlag(USCI2_Flag_TypeDef USCI2_FLAG) +*函数功能:清除USCI2标志状态 +*入口参数: +USCI2_Flag_TypeDef:USCI2_FLAG:所需清除的标志位 +*出口参数:void +*****************************************************/ +void USCI2_ClearFlag(USCI2_Flag_TypeDef USCI2_FLAG) +{ +#if defined(SC92L853x) || defined(SC92L753x) + if ((USCI2_FLAG == USCI2_SPI_FLAG_SPIF) || (USCI2_FLAG == USCI2_SPI_FLAG_WCOL) || (USCI2_FLAG == USCI2_TWI_FLAG_TXRXnE)) +#endif + { + US2CON1 &= (~USCI2_FLAG); //操作寄存器US2CON1 + } + else if ((USCI2_FLAG == USCI2_UART_FLAG_TI) || (USCI2_FLAG == USCI2_UART_FLAG_RI)) + { +#if defined(SC92L853x) || defined(SC92L753x) + US2CON0 = US2CON0 & 0xFC | USCI2_FLAG; //写1清零 +#endif + } + else + { + US2CON0 &= (~USCI2_FLAG); //操作寄存器US2CON0 + } +} + +#endif +/******************* (C) COPYRIGHT 2020 SinOne Microelectronics *****END OF FILE****/ diff --git a/Keil_C/FWLib/SC92F_Lib/src/sc92f_wdt.c b/Keil_C/FWLib/SC92F_Lib/src/sc92f_wdt.c new file mode 100644 index 0000000..c5737c2 --- /dev/null +++ b/Keil_C/FWLib/SC92F_Lib/src/sc92f_wdt.c @@ -0,0 +1,58 @@ +//************************************************************ +// Copyright (c) 深圳市赛元微电子有限公司 +// 文件名称: sc92f_wdt.c +// 作者: +// 模块功能: WDT固件库函数C文件 +// 最后更正日期: 2022年3月23日 +// 版本: V1.10002 +// 说明: +//************************************************************* + +#include "sc92f_wdt.h" + +/************************************************** +*函数名称:void WDT_DeInit(void) +*函数功能:WDT相关寄存器复位至缺省值 +*入口参数:void +*出口参数:void +**************************************************/ +void WDT_DeInit(void) +{ + WDTCON = 0X00; +} + +/************************************************** +*函数名称:void WDT_Init(WDT_OverflowTime_TypeDef OverflowTime) +*函数功能:WDT初始化配置函数 +*入口参数: +WDT_OverflowTime_TypeDef:OverflowTime:WDT溢出时间选择 +*出口参数:void +**************************************************/ +void WDT_Init(WDT_OverflowTime_TypeDef + OverflowTime) +{ + WDTCON = (WDTCON & 0XF8) | OverflowTime; +} + +/***************************************************** +*函数名称:void WDT_Cmd(FunctionalState NewState) +*函数功能:WDT功能开关函数 +*入口参数: +FunctionalState:NewState:功能启动/关闭选择 +*出口参数:void +*****************************************************/ +void WDT_Cmd(FunctionalState NewState) +{ + OPINX = 0XC1; + + if(NewState == DISABLE) + { + OPREG &= 0X7F; + } + else + { + OPREG |= 0X80; + } +} + +/******************* (C) COPYRIGHT 2021 SinOne Microelectronics *****END OF FILE****/ \ No newline at end of file diff --git a/Keil_C/List/CallBackFunction.lst b/Keil_C/List/CallBackFunction.lst new file mode 100644 index 0000000..0b7e6c5 --- /dev/null +++ b/Keil_C/List/CallBackFunction.lst @@ -0,0 +1,43 @@ +C51 COMPILER V9.59.0.0 CALLBACKFUNCTION 01/18/2024 10:03:10 PAGE 1 + + +C51 COMPILER V9.59.0.0, COMPILATION OF MODULE CALLBACKFUNCTION +OBJECT MODULE PLACED IN ..\Output\CallBackFunction.obj +COMPILER INVOKED BY: D:\Keil_v5\C51\BIN\C51.EXE ..\User\CallBackFunction.c LARGE OBJECTADVANCED OPTIMIZE(8,SIZE) BROWSE + -INCDIR(..\FWLib\SC92F_Lib\inc;..\User;..\Apps;..\Apps;..\User) DEFINE(SC92F836xB) DEBUG PRINT(..\List\CallBackFunction.l + -st) OBJECT(..\Output\CallBackFunction.obj) + +line level source + + 1 //*************************************************************************************************** + 2 // CopyRight (c) + 3 // File Name : CallBackFunction.c + 4 // Function : Write the logic you want to implement in the function body + 5 // Version : V3.0 + 6 // Date : 2022.07.14 + 7 //*************************************************************************************************** + 8 #include "SC_Init.h" + 9 #include "SC_it.h" + 10 #include "..\Drivers\SCDriver_list.h" + 11 #include "HeadFiles\SysFunVarDefine.h" + 12 /**************************************Generated by EasyCodeCube*************************************/ + 13 + 14 /*************************************.Generated by EasyCodeCube.************************************/ + + +MODULE INFORMATION: STATIC OVERLAYABLE + CODE SIZE = ---- ---- + CONSTANT SIZE = ---- ---- + XDATA SIZE = ---- ---- + PDATA SIZE = ---- ---- + DATA SIZE = ---- ---- + IDATA SIZE = ---- ---- + BIT SIZE = ---- ---- + EDATA SIZE = ---- ---- + HDATA SIZE = ---- ---- + XDATA CONST SIZE = ---- ---- + FAR CONST SIZE = ---- ---- +END OF MODULE INFORMATION. + + +C51 COMPILATION COMPLETE. 0 WARNING(S), 0 ERROR(S) diff --git a/Keil_C/List/CompCtrlDefine.lst b/Keil_C/List/CompCtrlDefine.lst new file mode 100644 index 0000000..1e843c0 --- /dev/null +++ b/Keil_C/List/CompCtrlDefine.lst @@ -0,0 +1,43 @@ +C51 COMPILER V9.59.0.0 COMPCTRLDEFINE 01/18/2024 10:03:10 PAGE 1 + + +C51 COMPILER V9.59.0.0, COMPILATION OF MODULE COMPCTRLDEFINE +OBJECT MODULE PLACED IN ..\Output\CompCtrlDefine.obj +COMPILER INVOKED BY: D:\Keil_v5\C51\BIN\C51.EXE ..\User\CompCtrlDefine.c LARGE OBJECTADVANCED OPTIMIZE(8,SIZE) BROWSE IN + -CDIR(..\FWLib\SC92F_Lib\inc;..\User;..\Apps;..\Apps;..\User) DEFINE(SC92F836xB) DEBUG PRINT(..\List\CompCtrlDefine.lst) + -OBJECT(..\Output\CompCtrlDefine.obj) + +line level source + + 1 //********************************************************************** + 2 // CopyRight (c) + 3 // File Name : CompCtrlDefine.C + 4 // Function : Store composite control define + 5 // Version : V3.2.0 + 6 // Date : 2022.02.16 + 7 ///********************************************************************* + 8 #include "SC_Init.h" + 9 #include "SC_it.h" + 10 #include "..\Drivers\SCDriver_list.h" + 11 #include "HeadFiles\SysFunVarDefine.h" + 12 /**************************************Generated by EasyCodeCube*************************************/ + 13 + 14 /*************************************.Generated by EasyCodeCube.************************************/ + + +MODULE INFORMATION: STATIC OVERLAYABLE + CODE SIZE = ---- ---- + CONSTANT SIZE = ---- ---- + XDATA SIZE = ---- ---- + PDATA SIZE = ---- ---- + DATA SIZE = ---- ---- + IDATA SIZE = ---- ---- + BIT SIZE = ---- ---- + EDATA SIZE = ---- ---- + HDATA SIZE = ---- ---- + XDATA CONST SIZE = ---- ---- + FAR CONST SIZE = ---- ---- +END OF MODULE INFORMATION. + + +C51 COMPILATION COMPLETE. 0 WARNING(S), 0 ERROR(S) diff --git a/Keil_C/List/SC_Init.lst b/Keil_C/List/SC_Init.lst new file mode 100644 index 0000000..889e0f2 --- /dev/null +++ b/Keil_C/List/SC_Init.lst @@ -0,0 +1,212 @@ +C51 COMPILER V9.59.0.0 SC_INIT 01/18/2024 10:03:08 PAGE 1 + + +C51 COMPILER V9.59.0.0, COMPILATION OF MODULE SC_INIT +OBJECT MODULE PLACED IN ..\Output\SC_Init.obj +COMPILER INVOKED BY: D:\Keil_v5\C51\BIN\C51.EXE ..\User\SC_Init.c LARGE OBJECTADVANCED OPTIMIZE(8,SIZE) BROWSE INCDIR(.. + -\FWLib\SC92F_Lib\inc;..\User;..\Apps;..\Apps;..\User) DEFINE(SC92F836xB) DEBUG PRINT(..\List\SC_Init.lst) OBJECT(..\Outp + -ut\SC_Init.obj) + +line level source + + 1 //************************************************************ + 2 // Copyright (c) + 3 // FileName : SC_Init.c + 4 // Function : Contains the MCU initialization function and its C file + 5 // Instructions : + 6 //************************************************************* + 7 + 8 #include "SC_Init.h" // MCU initialization header file, including all firmware library header files + 9 #include "..\Drivers\SCDriver_list.h" + 10 #include "HeadFiles\SC_itExtern.h" + 11 + 12 #include "motor.h" + 13 + 14 //************************************************************* + 15 + 16 + 17 /***********************user_code_area*********************/ + 18 /**/ + 19 /**/ + 20 /**********************.user_code_area.********************/ + 21 + 22 /***************************************************** + 23 *函数名称: SC_Init + 24 *函数功能: MCU初始化函数 + 25 *入口参数:void + 26 *出口参数:void + 27 *****************************************************/ + 28 void SC_Init(void) + 29 { + 30 1 SC_GPIO_Init(); + 31 1 SC_OPTION_Init(); + 32 1 SC_SSI_Init(); + 33 1 SC_TIM0_Init(); + 34 1 SC_TIM1_Init(); + 35 1 //SC_ADC_Init(); + 36 1 /*write initial function here*/ + 37 1 //参考电压 + 38 1 ADC_VrefConfig(ADC_VREF_VDD); //ADC_VREF_VDD ADC_VREF_2_4V + 39 1 EA = 1; + 40 1 //电机数据初始化 + 41 1 motor_data[0] = 0x00;//00 直行程 01 角行程 + 42 1 motor_data[1] = 0x00;//00 停止 01 启动 02 运行到起始位 03 运行到结束位 + 43 1 motor_data[2] = 0x00;//00 点动 01 连续 + 44 1 motor_data[3] = 0x00;//00 无状态 01 起始点 02 结束点 + 45 1 motor_data[4] = 0x00;//采样电压高8位 + 46 1 motor_data[5] = 0x00;//采样电压低8位 + 47 1 motor_data[6] = 0x00;//激光电压高8位 + 48 1 motor_data[7] = 0x00;//激光电压低8位 + 49 1 motor_data[8] = 0x00;//磁条长度高8位 + 50 1 motor_data[9] = 0x00;//磁条长度低8位 + 51 1 } + 52 + 53 /***************************************************** + C51 COMPILER V9.59.0.0 SC_INIT 01/18/2024 10:03:08 PAGE 2 + + 54 *函数名称: SC_OPTION_Init + 55 *函数功能: OPTION配置初始化函数 + 56 *入口参数:void + 57 *出口参数:void + 58 *****************************************************/ + 59 void SC_OPTION_Init(void) + 60 { + 61 1 /*OPTION_Init write here*/ + 62 1 } + 63 + 64 /***************************************************** + 65 *函数名称: SC_GPIO_Init + 66 *函数功能: GPIO初始化函数 + 67 *入口参数:void + 68 *出口参数:void + 69 *****************************************************/ + 70 void SC_GPIO_Init(void) + 71 { + 72 1 GPIO_Init(GPIO1, GPIO_PIN_4,GPIO_MODE_IN_HI); + 73 1 GPIO_Init(GPIO1, GPIO_PIN_5,GPIO_MODE_IN_HI); + 74 1 GPIO_Init(GPIO1, GPIO_PIN_6,GPIO_MODE_OUT_PP); + 75 1 GPIO_Init(GPIO1, GPIO_PIN_7,GPIO_MODE_IN_HI); + 76 1 GPIO_Init(GPIO2, GPIO_PIN_7,GPIO_MODE_OUT_PP); + 77 1 GPIO_Init(GPIO2, GPIO_PIN_6,GPIO_MODE_OUT_PP); + 78 1 GPIO_Init(GPIO2, GPIO_PIN_5,GPIO_MODE_OUT_PP); + 79 1 GPIO_Init(GPIO0, GPIO_PIN_7,GPIO_MODE_OUT_PP); + 80 1 GPIO_Init(GPIO0, GPIO_PIN_6,GPIO_MODE_OUT_PP); + 81 1 GPIO_Init(GPIO0, GPIO_PIN_5,GPIO_MODE_IN_HI); + 82 1 GPIO_Init(GPIO0, GPIO_PIN_4,GPIO_MODE_IN_PU); + 83 1 GPIO_Init(GPIO0, GPIO_PIN_3,GPIO_MODE_OUT_PP); + 84 1 GPIO_Init(GPIO0, GPIO_PIN_2,GPIO_MODE_OUT_PP); + 85 1 GPIO_Init(GPIO0, GPIO_PIN_1,GPIO_MODE_OUT_PP); + 86 1 GPIO_Init(GPIO0, GPIO_PIN_0,GPIO_MODE_OUT_PP); + 87 1 /*GPIO_Init write here*/ + 88 1 } + 89 + 90 /***************************************************** + 91 *函数名称: SC_UART0_Init + 92 *函数功能: UART0初始化函数 + 93 *入口参数:void + 94 *出口参数:void + 95 *****************************************************/ + 96 void SC_UART0_Init(void) + 97 { + 98 1 /*UART0_Init write here*/ + 99 1 } + 100 + 101 /***************************************************** + 102 *函数名称: SC_TIM0_Init + 103 *函数功能: TIMER0初始化函数 + 104 *入口参数:void + 105 *出口参数:void + 106 *****************************************************/ + 107 void SC_TIM0_Init(void) + 108 { + 109 1 TIM0_TimeBaseInit(TIM0_PRESSEL_FSYS_D12,TIM0_MODE_TIMER); + 110 1 TIM0_WorkModeConfig(TIM0_WORK_MODE1,55536, 0); + 111 1 TIM0_ITConfig(ENABLE,LOW); + 112 1 TIM0_Cmd(ENABLE); + 113 1 /*TIM0_Init write here*/ + 114 1 } + 115 + C51 COMPILER V9.59.0.0 SC_INIT 01/18/2024 10:03:08 PAGE 3 + + 116 /***************************************************** + 117 *函数名称: SC_TIM1_Init + 118 *函数功能: TIMER1初始化函数 + 119 *入口参数:void + 120 *出口参数:void + 121 *****************************************************/ + 122 void SC_TIM1_Init(void) + 123 { + 124 1 TIM1_TimeBaseInit(TIM1_PRESSEL_FSYS_D1,TIM1_MODE_TIMER); + 125 1 TIM1_WorkModeConfig(TIM1_WORK_MODE1,53536); + 126 1 TIM1_ITConfig(ENABLE,LOW); + 127 1 TIM1_Cmd(ENABLE); + 128 1 /*TIM1_Init write here*/ + 129 1 } + 130 + 131 /***************************************************** + 132 *函数名称: SC_ADC_Init + 133 *函数功能: ADC初始化函数 + 134 *入口参数:void + 135 *出口参数:void + 136 *****************************************************/ + 137 void SC_ADC_Init(void) + 138 { + 139 1 //AD转化频率 + 140 1 ADC_Init(ADC_PRESSEL_FHRC_D32,ADC_Cycle_6Cycle); + 141 1 //参考电压 + 142 1 ADC_VrefConfig(ADC_VREF_VDD); + 143 1 /*AIN0口模式设置*/ + 144 1 //ADC_EAINConfig(ADC_EAIN_0,ENABLE); + 145 1 + 146 1 /*AIN2口模式设置*/ + 147 1 //ADC_EAINConfig(ADC_EAIN_2,ENABLE); + 148 1 + 149 1 /*AIN1口模式设置*/ + 150 1 ADC_EAINConfig(ADC_EAIN_1,ENABLE); + 151 1 //AD1 使能 + 152 1 ADC_ChannelConfig(ADC_CHANNEL_1,ENABLE); + 153 1 //打开AD中断 + 154 1 ADC_ITConfig(ENABLE,LOW); + 155 1 //AD开始转化 + 156 1 ADC_Cmd(ENABLE); + 157 1 /*ADC_Init write here*/ + 158 1 + 159 1 + 160 1 } + 161 + 162 + 163 /***************************************************** + 164 *函数名称: SC_SSI_Init + 165 *函数功能: SSI初始化函数 + 166 *入口参数:void + 167 *出口参数:void + 168 *****************************************************/ + 169 void SC_SSI_Init(void) + 170 { + 171 1 GPIO_Init(GPIO2, GPIO_PIN_1,GPIO_MODE_IN_PU); + 172 1 GPIO_Init(GPIO2, GPIO_PIN_0,GPIO_MODE_IN_PU); + 173 1 SSI_UART1_Init(12000000,9600,UART1_Mode_10B,UART1_RX_ENABLE); + 174 1 SSI_ITConfig(ENABLE,LOW); + 175 1 /*SSI_Init write here*/ + 176 1 } + 177 + C51 COMPILER V9.59.0.0 SC_INIT 01/18/2024 10:03:08 PAGE 4 + + + +MODULE INFORMATION: STATIC OVERLAYABLE + CODE SIZE = 322 ---- + CONSTANT SIZE = ---- ---- + XDATA SIZE = ---- ---- + PDATA SIZE = ---- ---- + DATA SIZE = ---- ---- + IDATA SIZE = ---- ---- + BIT SIZE = ---- ---- + EDATA SIZE = ---- ---- + HDATA SIZE = ---- ---- + XDATA CONST SIZE = ---- ---- + FAR CONST SIZE = ---- ---- +END OF MODULE INFORMATION. + + +C51 COMPILATION COMPLETE. 0 WARNING(S), 0 ERROR(S) diff --git a/Keil_C/List/SC_it.lst b/Keil_C/List/SC_it.lst new file mode 100644 index 0000000..4e85671 --- /dev/null +++ b/Keil_C/List/SC_it.lst @@ -0,0 +1,256 @@ +C51 COMPILER V9.59.0.0 SC_IT 01/18/2024 10:03:08 PAGE 1 + + +C51 COMPILER V9.59.0.0, COMPILATION OF MODULE SC_IT +OBJECT MODULE PLACED IN ..\Output\SC_it.obj +COMPILER INVOKED BY: D:\Keil_v5\C51\BIN\C51.EXE ..\User\SC_it.c LARGE OBJECTADVANCED OPTIMIZE(8,SIZE) BROWSE INCDIR(..\F + -WLib\SC92F_Lib\inc;..\User;..\Apps;..\Apps;..\User) DEFINE(SC92F836xB) DEBUG PRINT(..\List\SC_it.lst) OBJECT(..\Output\S + -C_it.obj) + +line level source + + 1 //************************************************************ + 2 // Copyright (c) + 3 // FileName : SC_it.c + 4 // Function : Interrupt Service Routine + 5 // Instructions : + 6 // Date : 2022/03/03 + 7 // Version : V1.0002 + 8 //************************************************************* + 9 /********************Includes************************************************************************/ + 10 #include "SC_it.h" + 11 #include "..\Drivers\SCDriver_list.h" + 12 #include "HeadFiles\SC_itExtern.h" + 13 #include "uart1.h" + 14 #include "motor.h" + 15 #include "adc.h" + 16 + 17 #define IT_5S_CNT 5000 //计数5000 + 18 #define IT_2S_CNT 2000 //计数2000 + 19 #define IT_1S_CNT 1000 //计数1000 + 20 #define IT_100MS_CNT 100 //计数100 + 21 #define IT_10MS_CNT 10 //计数10 + 22 #define IT_1MS_CNT 1 //计数1 + 23 #define IT_2MS_CNT 2 //计数2 + 24 #define IT_3MS_CNT 3 //计数3 + 25 #define IT_4MS_CNT 4 //计数4 + 26 #define IT_5MS_CNT 5 //计数5 + 27 + 28 bit it_5s_flag = 0; //5s定时标志 + 29 unsigned int xdata it_5s_cnt = 0; + 30 + 31 bit it_2s_flag = 0; //2s定时标志 + 32 unsigned int xdata it_2s_cnt = 0; + 33 + 34 bit it_1s_flag = 0; //1s定时标志 + 35 unsigned int xdata it_1s_cnt = 0; + 36 + 37 bit it_100ms_flag = 0; //100ms定时标志 + 38 unsigned int xdata it_100ms_cnt = 0; + 39 + 40 bit it_10ms_flag = 0; //10ms定时标志 + 41 unsigned int xdata it_10ms_cnt = 0; + 42 + 43 bit it_1ms_flag = 0; //1ms定时标志 + 44 unsigned int xdata it_1ms_cnt = 0; + 45 + 46 bit it_2ms_flag = 0; //2ms定时标志 + 47 unsigned int xdata it_2ms_cnt = 0; + 48 + 49 bit it_3ms_flag = 0; //3ms定时标志 + 50 unsigned int xdata it_3ms_cnt = 0; + 51 + 52 bit it_4ms_flag = 0; //4ms定时标志 + 53 unsigned int xdata it_4ms_cnt = 0; + C51 COMPILER V9.59.0.0 SC_IT 01/18/2024 10:03:08 PAGE 2 + + 54 + 55 bit it_5ms_flag = 0; //5ms定时标志 + 56 unsigned int xdata it_5ms_cnt = 0; + 57 /**************************************Generated by EasyCodeCube*************************************/ + 58 + 59 /*************************************.Generated by EasyCodeCube.************************************/ + 60 + 61 void Timer0Interrupt() interrupt 1 + 62 { + 63 1 /*TIM0_it write here begin*/ + 64 1 + 65 1 TH0 = 0xFC;//高8位初值 + 66 1 TL0 = 0x17;//低8位初值 + 67 1 + 68 1 /*TIM0_it write here*/ + 69 1 /**/ + 70 1 /**//*<6>*/ + 71 1 //Timer0Interrupt + 72 1 { + 73 2 /**//*<7>*/ + 74 2 //5秒 + 75 2 it_5s_cnt++; + 76 2 if(it_5s_cnt >= IT_5S_CNT) + 77 2 { + 78 3 it_5s_flag = 1; + 79 3 it_5s_cnt = 0; + 80 3 } + 81 2 + 82 2 //2秒 + 83 2 it_2s_cnt++; + 84 2 if(it_2s_cnt >= IT_2S_CNT) + 85 2 { + 86 3 it_2s_flag = 1; + 87 3 it_2s_cnt = 0; + 88 3 } + 89 2 + 90 2 //秒 + 91 2 it_1s_cnt++; + 92 2 if(it_1s_cnt >= IT_1S_CNT) + 93 2 { + 94 3 it_1s_flag = 1; + 95 3 it_1s_cnt = 0; + 96 3 } + 97 2 + 98 2 //100毫秒 + 99 2 it_100ms_cnt++; + 100 2 if(it_100ms_cnt >= IT_100MS_CNT) + 101 2 { + 102 3 it_100ms_flag = 1; + 103 3 it_100ms_cnt = 0; + 104 3 } + 105 2 + 106 2 //10毫秒 + 107 2 it_10ms_cnt++; + 108 2 if(it_10ms_cnt >= IT_10MS_CNT) + 109 2 { + 110 3 it_10ms_flag = 1; + 111 3 it_10ms_cnt = 0; + 112 3 } + 113 2 + 114 2 + 115 2 /**//*<7>*/ + C51 COMPILER V9.59.0.0 SC_IT 01/18/2024 10:03:08 PAGE 3 + + 116 2 /**/ + 117 2 } + 118 1 /**//*<6>*/ + 119 1 /**/ + 120 1 /*Timer0Interrupt Flag Clear begin*/ + 121 1 /*Timer0Interrupt Flag Clear end*/ + 122 1 } + 123 + 124 + 125 void Timer1Interrupt() interrupt 3 + 126 { + 127 1 /*TIM1_it write here begin*/ + 128 1 + 129 1 TIM1_Mode1SetReloadCounter(53536); + 130 1 + 131 1 /*TIM1_it write here*/ + 132 1 /**/ + 133 1 /**/ + 134 1 { + 135 2 /**//*<7>*/ + 136 2 //1毫秒 + 137 2 it_1ms_cnt++; + 138 2 if(it_1ms_cnt >= IT_1MS_CNT) + 139 2 { + 140 3 it_1ms_flag = 1; + 141 3 it_1ms_cnt = 0; + 142 3 } + 143 2 + 144 2 //2毫秒 + 145 2 it_2ms_cnt++; + 146 2 if(it_2ms_cnt >= IT_2MS_CNT) + 147 2 { + 148 3 it_2ms_flag = 1; + 149 3 it_2ms_cnt = 0; + 150 3 } + 151 2 + 152 2 //3毫秒 + 153 2 it_3ms_cnt++; + 154 2 if(it_3ms_cnt >= IT_3MS_CNT) + 155 2 { + 156 3 it_3ms_flag = 1; + 157 3 it_3ms_cnt = 0; + 158 3 } + 159 2 + 160 2 //4毫秒 + 161 2 it_4ms_cnt++; + 162 2 if(it_4ms_cnt >= IT_4MS_CNT) + 163 2 { + 164 3 it_4ms_flag = 1; + 165 3 it_4ms_cnt = 0; + 166 3 } + 167 2 + 168 2 //5毫秒 + 169 2 it_5ms_cnt++; + 170 2 if(it_5ms_cnt >= IT_5MS_CNT) + 171 2 { + 172 3 it_5ms_flag = 1; + 173 3 it_5ms_cnt = 0; + 174 3 } + 175 2 /**//*<7>*/ + 176 2 /**/ + 177 2 } + C51 COMPILER V9.59.0.0 SC_IT 01/18/2024 10:03:08 PAGE 4 + + 178 1 /*Timer1Interrupt Flag Clear begin*/ + 179 1 /*Timer1Interrupt Flag Clear end*/ + 180 1 } + 181 + 182 void ADCInterrupt() interrupt 6 + 183 { + 184 1 // /*ADC_it write here begin*/ + 185 1 + 186 1 // /**/ + 187 1 // /**/ + 188 1 + 189 1 + 190 1 /*ADCInterrupt Flag Clear end*/ + 191 1 ADC_ClearFlag(); + 192 1 } + 193 #if defined (SC92F854x) || defined (SC92F754x) ||defined (SC92F844xB) || defined (SC92F744xB)||defined ( + -SC92F84Ax_2) || defined (SC92F74Ax_2)|| defined (SC92F846xB) \ + 194 || defined (SC92F746xB) || defined (SC92F836xB) || defined (SC92F736xB) || defined (SC92F8003)||defined ( + -SC92F84Ax) || defined (SC92F74Ax) || defined (SC92F83Ax) \ + 195 || defined (SC92F73Ax) || defined (SC92F7003) || defined (SC92F740x) || defined (SC92FWxx) || defined (SC9 + -3F743x) || defined (SC93F833x) || defined (SC93F843x)\ + 196 || defined (SC92F848x) || defined (SC92F748x)|| defined (SC92F859x) || defined (SC92F759x) + 197 extern bit SSI_FLAG; + 198 void SSIInterrupt() interrupt 7 + 199 { + 200 1 /*SSI_it write here begin*/ + 201 1 if(SSI_GetFlagStatus(UART1_FLAG_TI) == SET) //UART1发送中断标志位TI + 202 1 { + 203 2 SSI_FLAG = 0; + 204 2 SSI_ClearFlag(UART1_FLAG_TI); + 205 2 } + 206 1 + 207 1 if(SSI_GetFlagStatus(UART1_FLAG_RI) == SET)//UART1接收中断标志位RI + 208 1 { + 209 2 unsigned char ch = 0; + 210 2 ch = SSI_UART1_ReceiveData8(); + 211 2 receive_ttl_data(ch);//放串口中断内,接收数据 + 212 2 SSI_ClearFlag(UART1_FLAG_RI); + 213 2 } + 214 1 /*SSIInterrupt Flag Clear end*/ + 215 1 } + 216 + 217 #endif + 218 + + +MODULE INFORMATION: STATIC OVERLAYABLE + CODE SIZE = 588 ---- + CONSTANT SIZE = ---- ---- + XDATA SIZE = 20 1 + PDATA SIZE = ---- ---- + DATA SIZE = ---- ---- + IDATA SIZE = ---- ---- + BIT SIZE = 10 ---- + EDATA SIZE = ---- ---- + HDATA SIZE = ---- ---- + XDATA CONST SIZE = ---- ---- + FAR CONST SIZE = ---- ---- +END OF MODULE INFORMATION. + + +C51 COMPILATION COMPLETE. 0 WARNING(S), 0 ERROR(S) diff --git a/Keil_C/List/STARTUP.lst b/Keil_C/List/STARTUP.lst new file mode 100644 index 0000000..c5121ab --- /dev/null +++ b/Keil_C/List/STARTUP.lst @@ -0,0 +1,254 @@ +A51 MACRO ASSEMBLER STARTUP 01/18/2024 10:03:14 PAGE 1 + + +MACRO ASSEMBLER A51 V8.2.7.0 +OBJECT MODULE PLACED IN ..\Output\STARTUP.obj +ASSEMBLER INVOKED BY: D:\Keil_v5\C51\BIN\A51.EXE STARTUP.A51 SET(LARGE) DEBUG PRINT(..\List\STARTUP.lst) OBJECT(..\Outpu + t\STARTUP.obj) EP + +LOC OBJ LINE SOURCE + + 1 $nomod51 + 2 ;------------------------------------------------------------------------------ + 3 ; This file is part of the C51 Compiler package + 4 ; Copyright (c) 1988-2005 Keil Elektronik GmbH and Keil Software, Inc. + 5 ; Version 8.01 + 6 ; + 7 ; *** <<< Use Configuration Wizard in Context Menu >>> *** + 8 ;------------------------------------------------------------------------------ + 9 ; STARTUP.A51: This code is executed after processor reset. + 10 ; + 11 ; To translate this file use A51 with the following invocation: + 12 ; + 13 ; A51 STARTUP.A51 + 14 ; + 15 ; To link the modified STARTUP.OBJ file to your application use the following + 16 ; Lx51 invocation: + 17 ; + 18 ; Lx51 your object file list, STARTUP.OBJ controls + 19 ; + 20 ;------------------------------------------------------------------------------ + 21 ; + 22 ; User-defined Power-On Initialization of Memory + 23 ; + 24 ; With the following EQU statements the initialization of memory + 25 ; at processor reset can be defined: + 26 ; + 27 ; IDATALEN: IDATA memory size <0x0-0x100> + 28 ; Note: The absolute start-address of IDATA memory is always 0 + 29 ; The IDATA space overlaps physically the DATA and BIT areas. + 0100 30 IDATALEN EQU 100H + 31 ; + 32 ; XDATASTART: XDATA memory start address <0x0-0xFFFF> + 33 ; The absolute start address of XDATA memory + 0000 34 XDATASTART EQU 0 + 35 ; + 36 ; XDATALEN: XDATA memory size <0x0-0xFFFF> + 37 ; The length of XDATA memory in bytes. + 0100 38 XDATALEN EQU 100H + 39 ; + 40 ; PDATASTART: PDATA memory start address <0x0-0xFFFF> + 41 ; The absolute start address of PDATA memory + 0000 42 PDATASTART EQU 0H + 43 ; + 44 ; PDATALEN: PDATA memory size <0x0-0xFF> + 45 ; The length of PDATA memory in bytes. + 0000 46 PDATALEN EQU 0H + 47 ; + 48 ; + 49 ;------------------------------------------------------------------------------ + 50 ; + 51 ; Reentrant Stack Initialization + 52 ; + 53 ; The following EQU statements define the stack pointer for reentrant + 54 ; functions and initialized it: + 55 ; + 56 ; Stack Space for reentrant functions in the SMALL model. + 57 ; IBPSTACK: Enable SMALL model reentrant stack + A51 MACRO ASSEMBLER STARTUP 01/18/2024 10:03:14 PAGE 2 + + 58 ; Stack space for reentrant functions in the SMALL model. + 0000 59 IBPSTACK EQU 0 ; set to 1 if small reentrant is used. + 60 ; IBPSTACKTOP: End address of SMALL model stack <0x0-0xFF> + 61 ; Set the top of the stack to the highest location. + 0100 62 IBPSTACKTOP EQU 0xFF +1 ; default 0FFH+1 + 63 ; + 64 ; + 65 ; Stack Space for reentrant functions in the LARGE model. + 66 ; XBPSTACK: Enable LARGE model reentrant stack + 67 ; Stack space for reentrant functions in the LARGE model. + 0000 68 XBPSTACK EQU 0 ; set to 1 if large reentrant is used. + 69 ; XBPSTACKTOP: End address of LARGE model stack <0x0-0xFFFF> + 70 ; Set the top of the stack to the highest location. + 0000 71 XBPSTACKTOP EQU 0xFFFF +1 ; default 0FFFFH+1 + 72 ; + 73 ; + 74 ; Stack Space for reentrant functions in the COMPACT model. + 75 ; PBPSTACK: Enable COMPACT model reentrant stack + 76 ; Stack space for reentrant functions in the COMPACT model. + 0000 77 PBPSTACK EQU 0 ; set to 1 if compact reentrant is used. + 78 ; + 79 ; PBPSTACKTOP: End address of COMPACT model stack <0x0-0xFFFF> + 80 ; Set the top of the stack to the highest location. + 0100 81 PBPSTACKTOP EQU 0xFF +1 ; default 0FFH+1 + 82 ; + 83 ; + 84 ;------------------------------------------------------------------------------ + 85 ; + 86 ; Memory Page for Using the Compact Model with 64 KByte xdata RAM + 87 ; Compact Model Page Definition + 88 ; + 89 ; Define the XDATA page used for PDATA variables. + 90 ; PPAGE must conform with the PPAGE set in the linker invocation. + 91 ; + 92 ; Enable pdata memory page initalization + 0000 93 PPAGEENABLE EQU 0 ; set to 1 if pdata object are used. + 94 ; + 95 ; PPAGE number <0x0-0xFF> + 96 ; uppermost 256-byte address of the page used for PDATA variables. + 0000 97 PPAGE EQU 0 + 98 ; + 99 ; SFR address which supplies uppermost address byte <0x0-0xFF> + 100 ; most 8051 variants use P2 as uppermost address byte + 00A0 101 PPAGE_SFR DATA 0A0H + 102 ; + 103 ; + 104 ;------------------------------------------------------------------------------ + 105 + 106 ; Standard SFR Symbols + 00E0 107 ACC DATA 0E0H + 00F0 108 B DATA 0F0H + 0081 109 SP DATA 81H + 0082 110 DPL DATA 82H + 0083 111 DPH DATA 83H + 112 + 113 NAME ?C_STARTUP + 114 + 115 + 116 ?C_C51STARTUP SEGMENT CODE + 117 ?STACK SEGMENT IDATA + 118 +---- 119 RSEG ?STACK +0000 120 DS 1 + 121 + 122 EXTRN CODE (?C_START) + 123 PUBLIC ?C_STARTUP + A51 MACRO ASSEMBLER STARTUP 01/18/2024 10:03:14 PAGE 3 + + 124 +---- 125 CSEG AT 0 +0000 020000 F 126 ?C_STARTUP: LJMP STARTUP1 + 127 +---- 128 RSEG ?C_C51STARTUP + 129 +0000 130 STARTUP1: + 131 + 132 IF IDATALEN <> 0 +0000 78FF 133 MOV R0,#IDATALEN - 1 +0002 E4 134 CLR A +0003 F6 135 IDATALOOP: MOV @R0,A +0004 D8FD 136 DJNZ R0,IDATALOOP + 137 ENDIF + 138 + 139 IF XDATALEN <> 0 +0006 900000 140 MOV DPTR,#XDATASTART +0009 7F00 141 MOV R7,#LOW (XDATALEN) + 142 IF (LOW (XDATALEN)) <> 0 + MOV R6,#(HIGH (XDATALEN)) +1 + ELSE +000B 7E01 145 MOV R6,#HIGH (XDATALEN) + 146 ENDIF +000D E4 147 CLR A +000E F0 148 XDATALOOP: MOVX @DPTR,A +000F A3 149 INC DPTR +0010 DFFC 150 DJNZ R7,XDATALOOP +0012 DEFA 151 DJNZ R6,XDATALOOP + 152 ENDIF + 153 + 154 IF PPAGEENABLE <> 0 + MOV PPAGE_SFR,#PPAGE + ENDIF + 157 + 158 IF PDATALEN <> 0 + MOV R0,#LOW (PDATASTART) + MOV R7,#LOW (PDATALEN) + CLR A + PDATALOOP: MOVX @R0,A + INC R0 + DJNZ R7,PDATALOOP + ENDIF + 166 + 167 IF IBPSTACK <> 0 + EXTRN DATA (?C_IBP) + + MOV ?C_IBP,#LOW IBPSTACKTOP + ENDIF + 172 + 173 IF XBPSTACK <> 0 + EXTRN DATA (?C_XBP) + + MOV ?C_XBP,#HIGH XBPSTACKTOP + MOV ?C_XBP+1,#LOW XBPSTACKTOP + ENDIF + 179 + 180 IF PBPSTACK <> 0 + EXTRN DATA (?C_PBP) + MOV ?C_PBP,#LOW PBPSTACKTOP + ENDIF + 184 +0014 758100 F 185 MOV SP,#?STACK-1 + 186 + 187 ; This code is required if you use L51_BANK.A51 with Banking Mode 4 + 188 ; Code Banking + 189 ; Select Bank 0 for L51_BANK.A51 Mode 4 + A51 MACRO ASSEMBLER STARTUP 01/18/2024 10:03:14 PAGE 4 + + 190 + + + + + 195 ; +0017 020000 F 196 LJMP ?C_START + 197 + 198 END + A51 MACRO ASSEMBLER STARTUP 01/18/2024 10:03:14 PAGE 5 + +SYMBOL TABLE LISTING +------ ----- ------- + + +N A M E T Y P E V A L U E ATTRIBUTES + +?C_C51STARTUP. . . C SEG 001AH REL=UNIT +?C_START . . . . . C ADDR ----- EXT +?C_STARTUP . . . . C ADDR 0000H A +?STACK . . . . . . I SEG 0001H REL=UNIT +ACC. . . . . . . . D ADDR 00E0H A +B. . . . . . . . . D ADDR 00F0H A +DPH. . . . . . . . D ADDR 0083H A +DPL. . . . . . . . D ADDR 0082H A +IBPSTACK . . . . . N NUMB 0000H A +IBPSTACKTOP. . . . N NUMB 0100H A +IDATALEN . . . . . N NUMB 0100H A +IDATALOOP. . . . . C ADDR 0003H R SEG=?C_C51STARTUP +PBPSTACK . . . . . N NUMB 0000H A +PBPSTACKTOP. . . . N NUMB 0100H A +PDATALEN . . . . . N NUMB 0000H A +PDATASTART . . . . N NUMB 0000H A +PPAGE. . . . . . . N NUMB 0000H A +PPAGEENABLE. . . . N NUMB 0000H A +PPAGE_SFR. . . . . D ADDR 00A0H A +SP . . . . . . . . D ADDR 0081H A +STARTUP1 . . . . . C ADDR 0000H R SEG=?C_C51STARTUP +XBPSTACK . . . . . N NUMB 0000H A +XBPSTACKTOP. . . . N NUMB 0000H A +XDATALEN . . . . . N NUMB 0100H A +XDATALOOP. . . . . C ADDR 000EH R SEG=?C_C51STARTUP +XDATASTART . . . . N NUMB 0000H A + + +REGISTER BANK(S) USED: 0 + + +ASSEMBLY COMPLETE. 0 WARNING(S), 0 ERROR(S) diff --git a/Keil_C/List/SysFunVarDefine.lst b/Keil_C/List/SysFunVarDefine.lst new file mode 100644 index 0000000..b83be66 --- /dev/null +++ b/Keil_C/List/SysFunVarDefine.lst @@ -0,0 +1,43 @@ +C51 COMPILER V9.59.0.0 SYSFUNVARDEFINE 01/18/2024 10:03:09 PAGE 1 + + +C51 COMPILER V9.59.0.0, COMPILATION OF MODULE SYSFUNVARDEFINE +OBJECT MODULE PLACED IN ..\Output\SysFunVarDefine.obj +COMPILER INVOKED BY: D:\Keil_v5\C51\BIN\C51.EXE ..\User\SysFunVarDefine.c LARGE OBJECTADVANCED OPTIMIZE(8,SIZE) BROWSE I + -NCDIR(..\FWLib\SC92F_Lib\inc;..\User;..\Apps;..\Apps;..\User) DEFINE(SC92F836xB) DEBUG PRINT(..\List\SysFunVarDefine.lst + -) OBJECT(..\Output\SysFunVarDefine.obj) + +line level source + + 1 //********************************************************************** + 2 // CopyRight (c) + 3 // File Name : SysFunVarDefine.c + 4 // Function : Store var control and function control define + 5 // Version : V2.0 + 6 // Date : 2021.08.04 + 7 //********************************************************************** + 8 #include "SC_Init.h" + 9 #include "SC_it.h" + 10 #include "..\Drivers\SCDriver_list.h" + 11 #include "HeadFiles\SysFunVarDefine.h" + 12 /**************************************Generated by EasyCodeCube*************************************/ + 13 + 14 /*************************************.Generated by EasyCodeCube.************************************/ + + +MODULE INFORMATION: STATIC OVERLAYABLE + CODE SIZE = ---- ---- + CONSTANT SIZE = ---- ---- + XDATA SIZE = ---- ---- + PDATA SIZE = ---- ---- + DATA SIZE = ---- ---- + IDATA SIZE = ---- ---- + BIT SIZE = ---- ---- + EDATA SIZE = ---- ---- + HDATA SIZE = ---- ---- + XDATA CONST SIZE = ---- ---- + FAR CONST SIZE = ---- ---- +END OF MODULE INFORMATION. + + +C51 COMPILATION COMPLETE. 0 WARNING(S), 0 ERROR(S) diff --git a/Keil_C/List/Uart1.lst b/Keil_C/List/Uart1.lst new file mode 100644 index 0000000..a002b77 --- /dev/null +++ b/Keil_C/List/Uart1.lst @@ -0,0 +1,838 @@ +C51 COMPILER V9.59.0.0 UART1 01/18/2024 10:03:11 PAGE 1 + + +C51 COMPILER V9.59.0.0, COMPILATION OF MODULE UART1 +OBJECT MODULE PLACED IN ..\Output\Uart1.obj +COMPILER INVOKED BY: D:\Keil_v5\C51\BIN\C51.EXE ..\Apps\Uart1.c LARGE OBJECTADVANCED OPTIMIZE(8,SIZE) BROWSE INCDIR(..\F + -WLib\SC92F_Lib\inc;..\User;..\Apps;..\Apps;..\User) DEFINE(SC92F836xB) DEBUG PRINT(..\List\Uart1.lst) OBJECT(..\Output\U + -art1.obj) + +line level source + + 1 /********************************Copyright (c)**********************************\ + 2 ** + 3 ** (c) Copyright 2019, China, JS. + 4 ** All Rights Reserved + 5 ** + 6 ** + 7 **----------------------------------文件信息------------------------------------ + 8 ** 文件名称: ttl_usart.c + 9 ** 创建日期: 2022-05-11 + 10 ** 文档描述: ttl_usart + 11 ** + 12 **----------------------------------版本信息------------------------------------ + 13 ** 版本代号: V0.1 + 14 ** 版本说明: 初始版本 + 15 ** + 16 ********************************End of Head************************************/ + 17 + 18 /* Includes ------------------------------------------------------------------*/ + 19 + 20 /** + 21 * @file uart.c + 22 * @author Nations + 23 * @version v1.0.0 + 24 * + 25 * @copyright Copyright (c) 2022, Nations Technologies Inc. All rights reserved. + 26 */ + 27 + 28 #include + 29 + 30 + 31 #include "SC_Init.h" //MCU Init header,Include all IC resource headers + 32 #include "SC_it.h" + 33 #include "..\Drivers\SCDriver_list.h" + 34 #include "HeadFiles\SysFunVarDefine.h" + 35 + 36 #include "Uart1.h" + 37 #include "Motor.h" + 38 + 39 //微秒延时 + 40 void DelayUs(unsigned int delay) + 41 { + 42 1 unsigned int i = 0, j = 0; + 43 1 for(i = 0; i < delay; i++) + 44 1 { + 45 2 for(j = 0; j < 125; j++); + 46 2 } + 47 1 } + 48 + 49 //毫秒延时 + 50 void DelayMs(unsigned int delay) + 51 { + 52 1 unsigned int i = 0; + 53 1 for(i = 0; i < delay; i++) + C51 COMPILER V9.59.0.0 UART1 01/18/2024 10:03:11 PAGE 2 + + 54 1 { + 55 2 DelayUs(1000); + 56 2 } + 57 1 } + 58 + 59 #define HD_VER 0001 //硬件版本 + 60 #define SW_VER 0001 //软件版本 + 61 + 62 #define TTL_SEND_BUFF_LEN 60 //发送数据长度 + 63 #define TTL_RECEIVE_BUFF_LEN 60 //接收数据长度 + 64 + 65 //---------------------------------------------------------------- + 66 //uart1用于接收usb转ttl的串口 + 67 //---------------------------------------------------------------- + 68 + 69 //存放发送的数据内容 + 70 uint8_t xdata motor_data[10]; + 71 + 72 //发送buff + 73 uint8_t xdata ttl_send_len = 0; + 74 uint8_t xdata ttl_send_buff[TTL_SEND_BUFF_LEN] = {0}; + 75 + 76 //接收buff + 77 uint8_t xdata ttl_receive_len = 0; + 78 uint8_t xdata ttl_receive_buff[TTL_RECEIVE_BUFF_LEN] = {0}; + 79 + 80 //接收超时 + 81 uint8_t xdata ttl_receive_flag = 0; + 82 uint8_t xdata ttl_receive_cnt = 0; + 83 uint8_t xdata ttl_receive_interval = 0; + 84 + 85 #define DATA_LEN TTL_RECEIVE_BUFF_LEN //一般数据长度 + 86 #define UART_ORDER_SOF 0x05 //起始字 + 87 #define UART_ORDER_END 0x1B //结束字 + 88 #define FIXED_LEN 0x0B //固定长度 //取消RW + 89 + 90 uint16_t xdata SUR_DEVICE_ADDR = 0x00A1; //PC //0x00A1; //设备 + 91 uint16_t xdata OBJ_DEVICE_ADDR = 0x00B1; //主板 //0x00B1; //PC群发 FFFF 0000 + 92 + 93 uint8_t xdata order_flag = 0; + 94 unsigned int xdata checksum = 0, re_status = 0, rec_len = 0, data_len = 0, shouldaccept = 0; + 95 + 96 //单独发送 + 97 void UART1_SendData(uint8_t dat) + 98 { + 99 1 SSI_UART1_SendData8(dat); + 100 1 } + 101 + 102 //发送数据 + 103 void UART1_Send_Char(uint8_t dat) + 104 { + 105 1 SSI_UART1_SendData8(dat); + 106 1 } + 107 + 108 //初始化 + 109 void InitUart_Data(void) + 110 { + 111 1 order_flag = 0; + 112 1 rec_len = 0; + 113 1 re_status = 0; + 114 1 shouldaccept = 0; + 115 1 + C51 COMPILER V9.59.0.0 UART1 01/18/2024 10:03:11 PAGE 3 + + 116 1 ttl_receive_flag = 0; + 117 1 ttl_receive_cnt = 0; + 118 1 + 119 1 checksum = 0; + 120 1 + 121 1 for(data_len = 0; data_len < DATA_LEN; data_len++) + 122 1 { + 123 2 ttl_receive_buff[data_len] = 0; + 124 2 } + 125 1 + 126 1 data_len = 0; + 127 1 + 128 1 // UART_Send_Char(0xdd); + 129 1 } + 130 + 131 + 132 + 133 /* Private function prototypes -----------------------------------------------*/ + 134 /* Private functions ---------------------------------------------------------*/ + 135 //---------------------------------------------------------------- + 136 //接收串口1 + 137 //---------------------------------------------------------------- + 138 /**************************************************************************************************** + 139 * @brief Download a file via serial port + 140 * @param None + 141 * @retval None + 142 **************************************************************************************************/ + 143 void start_ttl_receive_timer(uint32_t ms) + 144 { + 145 1 if(ms == 0) + 146 1 { + 147 2 return; + 148 2 } + 149 1 + 150 1 ttl_receive_flag = 1; + 151 1 ttl_receive_cnt = 0; + 152 1 ttl_receive_interval = ms; + 153 1 } + 154 + 155 /**************************************************************************************************** + 156 * @brief Upload a file via serial port. + 157 * @param None + 158 * @retval None + 159 **************************************************************************************************/ + 160 void over_ttl_receive_timer(void) + 161 { + 162 1 ttl_receive_flag = 0; + 163 1 ttl_receive_cnt = 0; + 164 1 ttl_receive_interval = 0; + 165 1 + 166 1 InitUart_Data(); + 167 1 + 168 1 // UART2_Send_Char(0xed); + 169 1 } + 170 + 171 /**************************************************************************************************** + 172 * @brief Display the Main Menu on HyperTerminal + 173 * @param None + 174 * @retval None + 175 **************************************************************************************************/ + 176 void clear_ttl_receive_timer(void) + 177 { + C51 COMPILER V9.59.0.0 UART1 01/18/2024 10:03:11 PAGE 4 + + 178 1 uint16_t i = 0; + 179 1 ttl_receive_len = 0; + 180 1 ttl_receive_flag = 0; + 181 1 ttl_receive_cnt = 0; + 182 1 ttl_receive_interval = 0; + 183 1 + 184 1 for(i = 0; i < TTL_RECEIVE_BUFF_LEN; i++) + 185 1 { + 186 2 ttl_receive_buff[i] = 0; + 187 2 } + 188 1 } + 189 + 190 //返回串口屏应答是否接收完成的结果 + 191 //0:没超时 1:超时 + 192 uint8_t judge_ttl_receive_timer(void) + 193 { + 194 1 if(ttl_receive_flag == 2) + 195 1 { + 196 2 return 1; + 197 2 } + 198 1 else + 199 1 { + 200 2 return 0; + 201 2 } + 202 1 } + 203 + 204 /**************************************************************************************************** + 205 * @brief Display the Main Menu on HyperTerminal + 206 * @param None + 207 * @retval None + 208 **************************************************************************************************/ + 209 //放在大循环中的计时器里 + 210 void process_ttl_receive_timer(void) + 211 { + 212 1 if(ttl_receive_flag == 1) + 213 1 { + 214 2 ttl_receive_cnt++; + 215 2 } + 216 1 + 217 1 if((ttl_receive_interval > 0) && (ttl_receive_cnt >= ttl_receive_interval)) + 218 1 { + 219 2 over_ttl_receive_timer(); + 220 2 } + 221 1 } + 222 + 223 #define TTL_OVER_TIME 10 + 224 /**************************************************************************************************** + 225 * @brief Display the Main Menu on HyperTerminal + 226 * @param None + 227 * @retval None + 228 **************************************************************************************************/ + 229 //放串口中断内,接收数据 + 230 void receive_ttl_data(uint8_t rx_data) + 231 { + 232 1 //不能超过数组的最大长度 + 233 1 if(ttl_receive_len < TTL_RECEIVE_BUFF_LEN) + 234 1 { + 235 2 //开始计时 + 236 2 start_ttl_receive_timer(TTL_OVER_TIME); + 237 2 + 238 2 //串口接收数据分析 + 239 2 Do_Receive_Uart_For_Module(rx_data); + C51 COMPILER V9.59.0.0 UART1 01/18/2024 10:03:11 PAGE 5 + + 240 2 } + 241 1 else //超过上限则抛弃后面的数据 + 242 1 { + 243 2 //超时处理 + 244 2 over_ttl_receive_timer(); + 245 2 + 246 2 InitUart_Data(); + 247 2 + 248 2 //UART_Send_Char(0xcc); + 249 2 } + 250 1 } + 251 + 252 #define CRC_PRESET 0xFFFF + 253 #define CRC_POLYNOM 0x4204 + 254 /*--------------------------------------------------------------------------- + 255 调用方式:unsigned int ModbusCRC16(unsigned char *data_value, unsigned char length) + 256 函数说明:CRC校验 + 257 ---------------------------------------------------------------------------*/ + 258 unsigned int ModbusCRC16(unsigned char *data_value, unsigned char length) + 259 { + 260 1 unsigned int crc_value = CRC_PRESET; + 261 1 unsigned char i; + 262 1 data_value++; + 263 1 while(length-- != 0) + 264 1 {//ModbusCRC16(PData, Num + FIXED_LEN - 3); + 265 2 for(i = 0x01; i != 0; i <<= 1) + 266 2 { + 267 3 if((crc_value & 0x0001) != 0) + 268 3 { + 269 4 crc_value >>= 1; + 270 4 crc_value ^= CRC_POLYNOM; + 271 4 } + 272 3 else + 273 3 { + 274 4 crc_value >>= 1; + 275 4 } + 276 3 + 277 3 if((*data_value & i) != 0) + 278 3 { + 279 4 crc_value ^= CRC_POLYNOM; + 280 4 } + 281 3 } + 282 2 data_value++; + 283 2 } + 284 1 return(crc_value); + 285 1 } + 286 + 287 /*--------------------------------------------------------------------------- + 288 调用方式:unsigned int VerfiyRC(unsigned char *data_value, unsigned char length) + 289 函数说明:异或校验 + 290 除了头尾固定,不校验外,其他的校验 + 291 -----------------------------------------------------------------------------*/ + 292 unsigned char VerfiyRC(unsigned char data_value[], unsigned char length) //不用异或校验,用crc校验 + 293 { + 294 1 unsigned char i; + 295 1 unsigned char V_b = data_value[1]; + 296 1 + 297 1 for(i = 0x00; i < length; i++) + 298 1 { + 299 2 //异或校验 + 300 2 V_b ^= data_value[i]; + 301 2 } + C51 COMPILER V9.59.0.0 UART1 01/18/2024 10:03:11 PAGE 6 + + 302 1 + 303 1 return(V_b); + 304 1 } + 305 + 306 //发送延时 + 307 void Uart_Send_Delay(unsigned int delay) + 308 { + 309 1 unsigned int i = 0, j = 0; + 310 1 + 311 1 for(i = 0; i < delay; i++) + 312 1 { + 313 2 for(j = 0; j < 125; j++); + 314 2 } + 315 1 } + 316 + 317 //校验 + 0X1B + 318 #define VERFIY_TYPE 0 + 319 + 320 /* + 321 SOF: 1个字节 0x05 起始字节 + 322 Len: 2个字节 长度 + 323 Fou_adr: 2个字节 源地址 + 324 Com_adr: 2个字节 目标地址,0ff为广播地址 + 325 Cmd16: 2个字节 命令字 + 326 Request-data: N字节 数据 + 327 XOR: 2个字节 校验 + 328 END: 0x1B 结束字节 + 329 */ + 330 + 331 //发送数据 + 332 void send_set_resp(unsigned int OrderNum, unsigned int addr, unsigned char Num, unsigned char sData[]) + 333 { + 334 1 unsigned int xdata xor_data = 0; + 335 1 unsigned char xdata PData[TTL_SEND_BUFF_LEN]; + 336 1 unsigned char xdata i = 0; + 337 1 + 338 1 PData[0] = UART_ORDER_SOF; //第一个字节 + 339 1 PData[1] = (Num + FIXED_LEN) / 0x100; //长度 高8位 + 340 1 PData[2] = (Num + FIXED_LEN) % 0x100; //长度 低8位 + 341 1 PData[3] = (addr >> 8) & 0xff; //源地址 + 342 1 PData[4] = addr & 0xff; //源地址 + 343 1 PData[5] = (SUR_DEVICE_ADDR >> 8) & 0xff; //目标地址 + 344 1 PData[6] = SUR_DEVICE_ADDR & 0xff; //目标地址 + 345 1 PData[7] = (OrderNum >> 8) & 0xff; //命令字 -1 + 346 1 PData[8] = OrderNum & 0xff; //命令字 -2 + 347 1 + 348 1 // PData[6] = RW_Flag; //读写标志 + 349 1 + 350 1 for(i = 0; i < Num; i++) //发送数据 + 351 1 { + 352 2 PData[FIXED_LEN - 2 + i] = sData[i]; //数据 + 353 2 } + 354 1 + 355 1 //校验 + 356 1 if(VERFIY_TYPE) //异或校验 + 末尾字节 2字节 + 357 1 { + 358 2 xor_data = VerfiyRC(PData, Num + FIXED_LEN - 2); + 359 2 PData[FIXED_LEN + Num - 2] = xor_data; + 360 2 PData[FIXED_LEN + Num - 1] = 00; + 361 2 } + 362 1 else //CRC校验 2字节 + 363 1 { + C51 COMPILER V9.59.0.0 UART1 01/18/2024 10:03:11 PAGE 7 + + 364 2 xor_data = ModbusCRC16(PData, Num + FIXED_LEN - 3); + 365 2 PData[FIXED_LEN + Num - 2] = (xor_data) & 0xff; + 366 2 PData[FIXED_LEN + Num - 1] = (xor_data >> 8) & 0xff; + 367 2 } + 368 1 + 369 1 PData[FIXED_LEN + Num] = UART_ORDER_END; // 末尾字节 + 370 1 + 371 1 //全部发送 + 372 1 for(i = 0; i < (Num + FIXED_LEN + 1); i++) //一次性发送所有数据 + 373 1 { + 374 2 UART1_Send_Char(PData[i]); + 375 2 //增加延时 + 376 2 Uart_Send_Delay(50); + 377 2 } + 378 1 } + 379 + 380 + 381 + 382 //分析地址是否为本地址 + 383 uint8_t Check_Resive_Addr(uint16_t addr) + 384 { + 385 1 //确定是否为接收地址 + 386 1 if((OBJ_DEVICE_ADDR == addr) || (0xFFFF == addr) || (0x0000 == addr) || (0x00B1 == addr)) + 387 1 { + 388 2 return 1; + 389 2 } + 390 1 else + 391 1 { + 392 2 InitUart_Data(); //2清数据 + 393 2 return 0; + 394 2 } + 395 1 } + 396 + 397 + 398 //接收数据判断(放置串口接收数据内) + 399 void Do_Receive_Uart_For_Module(unsigned char ch) + 400 { + 401 1 switch(re_status) + 402 1 { + 403 2 case 0 : //0x05 1字节 起始字 + 404 2 { + 405 3 if(ch == UART_ORDER_SOF) + 406 3 { + 407 4 rec_len = 0; + 408 4 ttl_receive_buff[rec_len] = ch; + 409 4 re_status = 1; + 410 4 shouldaccept = 0; + 411 4 // UART2_Send_Char(0xaa); + 412 4 } + 413 3 } + 414 2 break; + 415 2 case 1: //长度 2字节 + 416 2 { + 417 3 rec_len++; + 418 3 ttl_receive_buff[rec_len] = ch; + 419 3 + 420 3 if(rec_len >= 2) + 421 3 { + 422 4 re_status = 2; + 423 4 shouldaccept = ttl_receive_buff[1] * 0x100 + ttl_receive_buff[2]; + 424 4 + 425 4 if(shouldaccept >= TTL_RECEIVE_BUFF_LEN - 1) + C51 COMPILER V9.59.0.0 UART1 01/18/2024 10:03:11 PAGE 8 + + 426 4 { + 427 5 InitUart_Data(); + 428 5 return; + 429 5 } + 430 4 } + 431 3 } + 432 2 break; + 433 2 case 2: //命令字 2个字节 05 00 0B 00 C1 00 A1 F0 01 87 1B + 434 2 { + 435 3 rec_len++; + 436 3 + 437 3 if(rec_len >= TTL_RECEIVE_BUFF_LEN - 1) + 438 3 { + 439 4 InitUart_Data(); + 440 4 return; + 441 4 } + 442 3 + 443 3 ttl_receive_buff[rec_len] = ch; //接收 + 444 3 + 445 3 if(rec_len >= shouldaccept) //判断是否接收完成 + 446 3 { + 447 4 // uint8_t i = 0; + 448 4 // UART2_Send_Char(0x30); + 449 4 // UART2_Send_Char(rec_len); + 450 4 // UART2_Send_Char(shouldaccept); + 451 4 // UART2_Send_Char(FIXED_LEN - 1); + 452 4 + 453 4 // UART2_Send_Char(rec_len); + 454 4 // for( i = 0;i < shouldaccept;i++) UART2_Send_Char(ttl_receive_buff[i]); + 455 4 + 456 4 //等待处理分析,至少要大于固定长度 + 457 4 // if(rec_len >= FIXED_LEN - 1) + 458 4 // { + 459 4 //判断接收目标地址是否是自己 + 460 4 // int adr = ttl_receive_buff[3]; + 461 4 // adr = adr << 8; + 462 4 // adr |= ttl_receive_buff[4]; + 463 4 int adr = ttl_receive_buff[5]; + 464 4 adr = adr << 8; + 465 4 adr |= ttl_receive_buff[6]; + 466 4 + 467 4 //UART2_TxByte(0xAA); + 468 4 //UART2_TxByte(ttl_receive_buff[3]); + 469 4 //UART2_TxByte(ttl_receive_buff[4]); + 470 4 // + 471 4 if(Check_Resive_Addr(adr)) + 472 4 { + 473 5 //命令字 + 474 5 unsigned int order = 0; + 475 5 order = ttl_receive_buff[7]; + 476 5 order = order << 8; + 477 5 order += ttl_receive_buff[8]; + 478 5 + 479 5 // //目标地址 + 480 5 // OBJ_DEVICE_ADDR = ttl_receive_buff[3]; + 481 5 // OBJ_DEVICE_ADDR <<= 8; + 482 5 // OBJ_DEVICE_ADDR += ttl_receive_buff[4]; + 483 5 + 484 5 //UART2_Send_Char(order / 0x100); + 485 5 //UART2_Send_Char(order % 0x100); + 486 5 //UART2_TxByte(0xBB); + 487 5 //UART2_TxByte(ttl_receive_buff[7]); + C51 COMPILER V9.59.0.0 UART1 01/18/2024 10:03:11 PAGE 9 + + 488 5 //UART2_TxByte(ttl_receive_buff[8]); + 489 5 + 490 5 switch(order) + 491 5 { + 492 6 //=================== =================================================== + 493 6 //设备接收数据 + 494 6 //====================================================================== + 495 6 case 0xF001 : //解析数据 + 496 6 { + 497 7 order_flag = 1; + 498 7 } + 499 6 break; + 500 6 + 501 6 case 0xF0C1 : //设置设备加密信息 + 502 6 { + 503 7 order_flag = 2; + 504 7 } + 505 6 break; + 506 6 + 507 6 //====================================================================== + 508 6 //设备信息 + 509 6 //====================================================================== + 510 6 case 0xF111 : //控制参数 + 511 6 { + 512 7 order_flag = 3; + 513 7 // UART2_Send_Char(0x33); + 514 7 } + 515 6 break; + 516 6 + 517 6 //====================================================================== + 518 6 //设备信息 + 519 6 //====================================================================== + 520 6 case 0xF112 : //读 状态与温度 + 521 6 { + 522 7 order_flag = 4; + 523 7 } + 524 6 break; + 525 6 case 0xF102 : //读 状态与温度 + 526 6 { + 527 7 order_flag = 4; + 528 7 } + 529 6 break; + 530 6 + 531 6 //====================================================================== + 532 6 // + 533 6 //====================================================================== + 534 6 default : + 535 6 { + 536 7 InitUart_Data(); + 537 7 } + 538 6 break; + 539 6 } + 540 5 } + 541 4 else + 542 4 { + 543 5 InitUart_Data(); + 544 5 return; + 545 5 } + 546 4 } + 547 3 // } + 548 3 } + 549 2 break; + C51 COMPILER V9.59.0.0 UART1 01/18/2024 10:03:11 PAGE 10 + + 550 2 + 551 2 default : + 552 2 InitUart_Data(); + 553 2 break; + 554 2 } + 555 1 } + 556 + 557 //数据长度 + 558 uint8_t Get_Data_Len(void) + 559 { + 560 1 uint16_t Re_Len = 0; + 561 1 Re_Len = (ttl_receive_buff[1] * 0x100 + ttl_receive_buff[2]) - FIXED_LEN; + 562 1 return Re_Len; + 563 1 } + 564 + 565 //检查校验 + 566 unsigned char Check_VerfiyData(void) + 567 { + 568 1 return 1; //调试期间,不用验证 + 569 1 + 570 1 if(VERFIY_TYPE) //异或校验 + 末尾字节 + 571 1 { + 572 2 unsigned char v_A = 0; + 573 2 unsigned char v_B = 0; + 574 2 v_A = ttl_receive_buff[shouldaccept]; + 575 2 v_B = VerfiyRC(ttl_receive_buff, shouldaccept - 2); + 576 2 + 577 2 if(v_A == v_B) //数据的完整性 + 578 2 { + 579 3 //结尾数据相同 + 580 3 if(ttl_receive_buff[shouldaccept + 1] == UART_ORDER_END) + 581 3 { + 582 4 + 583 4 } + 584 3 else + 585 3 { + 586 4 return 0; + 587 4 } + 588 3 } + 589 2 else + 590 2 { + 591 3 return 0; + 592 3 } + 593 2 } + 594 1 else //判断CRC校验 + 595 1 { + 596 2 unsigned int CRC16 = 0; + 597 2 unsigned int Get_CRC16 = 0; + 598 2 CRC16 = ttl_receive_buff[shouldaccept]; + 599 2 CRC16 = CRC16 << 8; + 600 2 CRC16 += ttl_receive_buff[shouldaccept - 1]; + 601 2 + 602 2 Get_CRC16 = ModbusCRC16(ttl_receive_buff, shouldaccept - 2); + 603 2 + 604 2 if(CRC16 == Get_CRC16) //数据的完整性 + 605 2 { + 606 3 + 607 3 } + 608 2 else + 609 2 { + 610 3 InitUart_Data(); + 611 3 return 0; + C51 COMPILER V9.59.0.0 UART1 01/18/2024 10:03:11 PAGE 11 + + 612 3 } + 613 2 } + 614 1 + 615 1 return 1; + 616 1 } + 617 + 618 + 619 //数据接收分析(放置大循环内) + 620 void Deal_Uart_Data_For_Module(void) + 621 { + 622 1 if(order_flag) //有接收的指令 + 623 1 { + 624 2 //校验 + 625 2 if(Check_VerfiyData() == 1) //测试 + 626 2 { + 627 3 switch(order_flag) + 628 3 { + 629 4 //-------------------------------------------------------------------- + 630 4 // + 631 4 //-------------------------------------------------------------------- + 632 4 case 1 : //数据解析 + 633 4 { + 634 5 uint8_t xdata i = 0; //临时变量 + 635 5 uint8_t xdata len = 0; //长度 + 636 5 uint8_t xdata temp[DATA_LEN]; + 637 5 + 638 5 //发送标志 + 639 5 send_flag = 0; + 640 5 + 641 5 //数据长度 + 642 5 len = Get_Data_Len(); + 643 5 + 644 5 //解析数据 + 645 5 for(i = 0; i < len; i++) + 646 5 { + 647 6 temp[i] = ttl_receive_buff[i + FIXED_LEN - 2]; + 648 6 } + 649 5 + 650 5 //角行程 、直行程 + 651 5 Travle_Flag = temp[0]; //0 直 1 角 + 652 5 Motor_Run = temp[1]; //0 停止 1 运行 2 运行到起始点 3 运行到结束点 + 653 5 Run_Mode = temp[2]; //0 点动 1 方案一 2 方案二 + 654 5 + 655 5 Run_Step = temp[3]; //电机运行多少圈为一个步长 + 656 5 Run_Step <<= 8; + 657 5 Run_Step += temp[4]; + 658 5 + 659 5 Run_Inter = temp[5]; //电机运行间隔时长 + 660 5 Run_Inter <<= 8; + 661 5 Run_Inter += temp[6]; + 662 5 + 663 5 Run_Stop = temp[7]; //到“结束点”后,停止时间 + 664 5 Run_Stop <<= 8; + 665 5 Run_Stop += temp[8]; + 666 5 + 667 5 ClrRunmotorStep();//清除电机标记 + 668 5 + 669 5 } + 670 4 break; + 671 4 + 672 4 case 2 : // + 673 4 { + C51 COMPILER V9.59.0.0 UART1 01/18/2024 10:03:11 PAGE 12 + + 674 5 uint8_t i = 0; + 675 5 uint8_t len = 0; + 676 5 uint8_t temp[DATA_LEN]; + 677 5 + 678 5 send_set_resp(0xF0C1, OBJ_DEVICE_ADDR, len, temp); + 679 5 + 680 5 } + 681 4 break; + 682 4 + 683 4 //-------------------------------------------------------------------- + 684 4 //LED 控制 + 685 4 //-------------------------------------------------------------------- + 686 4 case 3 : //F111 05 00 0C 00 A1 00 C1 F1 01 05 03 50 87 1B + 687 4 { + 688 5 u8 addr = 0; + 689 5 addr = ttl_receive_buff[FIXED_LEN - 2]; + 690 5 if(addr == ((SUR_DEVICE_ADDR & 0xf0) == 0xC0)) + 691 5 { + 692 6 + 693 6 } + 694 5 } + 695 4 break; + 696 4 + 697 4 //====================================================================== + 698 4 // + 699 4 //====================================================================== + 700 4 case 4 : // + 701 4 { + 702 5 + 703 5 + 704 5 } + 705 4 break; + 706 4 + 707 4 //-------------------------------------------------------------------- + 708 4 //实时信息 + 709 4 //-------------------------------------------------------------------- + 710 4 case 5 : // + 711 4 { + 712 5 uint8_t len = 0; + 713 5 uint8_t temp[DATA_LEN]; + 714 5 + 715 5 + 716 5 + 717 5 temp[0] = (SUR_DEVICE_ADDR >> 8) & 0xff; + 718 5 temp[1] = (SUR_DEVICE_ADDR >> 0) & 0xff; + 719 5 + 720 5 // //版本号 4 + 721 5 temp[2] = HD_VER >> 8; //HD_VER 0101 //硬件版本号 + 722 5 temp[3] = HD_VER & 0xff; + 723 5 + 724 5 temp[4] = SW_VER >> 8; //SW_VER 0101 //软件版本号 + 725 5 temp[5] = SW_VER & 0xff; + 726 5 + 727 5 len = 6; + 728 5 send_set_resp(0xF113, OBJ_DEVICE_ADDR, len, temp); + 729 5 } + 730 4 break; + 731 4 case 6 : // 设置 地址 + 版本号 F1D3 05 00 0D 00 A1 00 00 F1 D3 00 C1 07 A9 1B + 732 4 { + 733 5 + 734 5 uint8_t i = 0; + 735 5 uint8_t len = 0; + C51 COMPILER V9.59.0.0 UART1 01/18/2024 10:03:11 PAGE 13 + + 736 5 uint8_t temp[DATA_LEN]; + 737 5 + 738 5 //数据长度 + 739 5 len = Get_Data_Len(); + 740 5 + 741 5 for(i = 0; i < len; i++) + 742 5 { + 743 6 temp[i] = ttl_receive_buff[i + FIXED_LEN - 2]; + 744 6 } + 745 5 + 746 5 + 747 5 send_set_resp(0xF1C3, OBJ_DEVICE_ADDR, len, temp); + 748 5 } + 749 4 break; + 750 4 case 7 : //更新程序 + 751 4 { + 752 5 + 753 5 } + 754 4 break; + 755 4 + 756 4 //-------------------------------------------------------------------- + 757 4 //设备信息 + 758 4 //-------------------------------------------------------------------- + 759 4 case 10 : //F115 05 00 0A 00 C1 00 A1 F1 05 50 87 1B + 760 4 { + 761 5 + 762 5 + 763 5 } + 764 4 break; + 765 4 + 766 4 + 767 4 default : + 768 4 { + 769 5 + 770 5 } + 771 4 break; + 772 4 } + 773 3 } + 774 2 + 775 2 //清空数据 + 776 2 InitUart_Data(); + 777 2 } + 778 1 } + 779 + 780 +*** WARNING C294 IN LINE 358 OF ..\Apps\Uart1.c: unreachable code +*** WARNING C294 IN LINE 572 OF ..\Apps\Uart1.c: unreachable code +*** WARNING C294 IN LINE 596 OF ..\Apps\Uart1.c: unreachable code + + +MODULE INFORMATION: STATIC OVERLAYABLE + CODE SIZE = 1870 ---- + CONSTANT SIZE = ---- ---- + XDATA SIZE = 150 154 + PDATA SIZE = ---- ---- + DATA SIZE = ---- ---- + IDATA SIZE = ---- ---- + BIT SIZE = ---- ---- + EDATA SIZE = ---- ---- + HDATA SIZE = ---- ---- + XDATA CONST SIZE = ---- ---- + FAR CONST SIZE = ---- ---- + C51 COMPILER V9.59.0.0 UART1 01/18/2024 10:03:11 PAGE 14 + +END OF MODULE INFORMATION. + + +C51 COMPILATION COMPLETE. 3 WARNING(S), 0 ERROR(S) diff --git a/Keil_C/List/adc.lst b/Keil_C/List/adc.lst new file mode 100644 index 0000000..4e7c7a7 --- /dev/null +++ b/Keil_C/List/adc.lst @@ -0,0 +1,116 @@ +C51 COMPILER V9.59.0.0 ADC 01/18/2024 10:03:11 PAGE 1 + + +C51 COMPILER V9.59.0.0, COMPILATION OF MODULE ADC +OBJECT MODULE PLACED IN ..\Output\adc.obj +COMPILER INVOKED BY: D:\Keil_v5\C51\BIN\C51.EXE ..\Apps\adc.c LARGE OBJECTADVANCED OPTIMIZE(8,SIZE) BROWSE INCDIR(..\FWL + -ib\SC92F_Lib\inc;..\User;..\Apps;..\Apps;..\User) DEFINE(SC92F836xB) DEBUG PRINT(..\List\adc.lst) OBJECT(..\Output\adc.o + -bj) + +line level source + + 1 #include "SC_Init.h" //MCU Init header,Include all IC resource headers + 2 #include "SC_it.h" + 3 #include "..\Drivers\SCDriver_list.h" + 4 #include "HeadFiles\SysFunVarDefine.h" + 5 + 6 #include "adc.h" + 7 #include "Uart1.h" + 8 + 9 unsigned int xdata ADC_Value0 = 0,ADC_Value1 = 0,ADC_Value2 = 0; + 10 + 11 unsigned int xdata ADC_NUM1=0; + 12 //获取adc转换数值 + 13 unsigned int ADC_Convert(void) + 14 { + 15 1 unsigned int xdata Tad = 0,MinAd1 = 0x0fff,MaxAd1 = 0x0000,MinAd2 = 0x0fff,MaxAd2 = 0x0000,TempAdd = + -0; + 16 1 unsigned char xdata t = 0; + 17 1 for(t = 0;t < 10;t++) + 18 1 { + 19 2 ADCCON |= 0X40; //开始 ADC 转换 + 20 2 while(!(ADCCON & 0x20));//等待 ADC 转换完成,不同型号的转换完成标志位位置不同,部分型号在 Bit5,部分型号 + -贐it4,具体请参照规格。 + 21 2 //清中断标志位 + 22 2 ADCCON &= ~(0X20); + 23 2 Tad = ((unsigned int)ADCVH << 4) + (ADCVL >> 4); //取得一次转换值 + 24 2 ADC_NUM1=Tad; + 25 2 if(Tad > MaxAd1) + 26 2 { + 27 3 MaxAd1 = Tad;//获得当前的最大值 + 28 3 } + 29 2 // else + 30 2 // { + 31 2 // if(Tad > MaxAd2) + 32 2 // MaxAd2 = Tad; + 33 2 // } + 34 2 if (Tad < MinAd1) + 35 2 { + 36 3 MinAd1 = Tad;//获得当前的最小值 + 37 3 } + 38 2 // else + 39 2 // { + 40 2 // if(Tad > MinAd2) + 41 2 // MinAd2 = Tad; + 42 2 // } + 43 2 TempAdd += Tad; + 44 2 } + 45 1 + 46 1 //转换值累加 + 47 1 TempAdd -= MinAd1;//去掉最小值 + 48 1 TempAdd -= MaxAd1;//去掉最大值 + 49 1 // TempAdd -= MinAd2;//去掉第二最小值 + 50 1 // TempAdd -= MaxAd2;//去掉第二最大值 + 51 1 //TempAdd = TempAdd / 16; + C51 COMPILER V9.59.0.0 ADC 01/18/2024 10:03:11 PAGE 2 + + 52 1 TempAdd >>= 3; //求平均值 + 53 1 return TempAdd; + 54 1 } + 55 + 56 //切换ADC入口 + 57 void ADC_channel(unsigned char ADC_Channel) + 58 { + 59 1 ADCCFG0 = 0x07; + 60 1 ADCCON = 0xE0 | ADC_Channel; + 61 1 } + 62 + 63 extern uint8_t xdata motor_data[]; + 64 void ADC_Multichannel(void) + 65 { + 66 1 uint8_t xdata temp_h,temp_l; //定义高八位和低八位 + 67 1 + 68 1 ADC_channel(1); //ADC 入口切换至 AIN1 口,采集电压信号 + 69 1 ADC_Value1 = ADC_Convert(); //启动 ADC 转换,获得转换值 + 70 1 temp_h = (ADC_Value1 & 0xff00) >> 8;//高8位的值 + 71 1 temp_l = ADC_Value1 & 0x00ff; //低8位的值 + 72 1 motor_data[4] = temp_h; + 73 1 motor_data[5] = temp_l; + 74 1 + 75 1 ADC_channel(2); //ADC 入口切换至 AIN2 口,采集激光测距信号 + 76 1 ADC_Value2 = ADC_Convert(); //启动 ADC 转换,获得转换值 + 77 1 temp_h = (ADC_Value2 & 0xff00) >> 8;//高8位的值 + 78 1 temp_l = ADC_Value2 & 0x00ff; //低8位的值 + 79 1 motor_data[6] = temp_h; + 80 1 motor_data[7] = temp_l; + 81 1 } + 82 + 83 + + +MODULE INFORMATION: STATIC OVERLAYABLE + CODE SIZE = 295 ---- + CONSTANT SIZE = ---- ---- + XDATA SIZE = 8 10 + PDATA SIZE = ---- ---- + DATA SIZE = ---- ---- + IDATA SIZE = ---- ---- + BIT SIZE = ---- ---- + EDATA SIZE = ---- ---- + HDATA SIZE = ---- ---- + XDATA CONST SIZE = ---- ---- + FAR CONST SIZE = ---- ---- +END OF MODULE INFORMATION. + + +C51 COMPILATION COMPLETE. 0 WARNING(S), 0 ERROR(S) diff --git a/Keil_C/List/main.lst b/Keil_C/List/main.lst new file mode 100644 index 0000000..54d3f83 --- /dev/null +++ b/Keil_C/List/main.lst @@ -0,0 +1,89 @@ +C51 COMPILER V9.59.0.0 MAIN 01/18/2024 10:03:08 PAGE 1 + + +C51 COMPILER V9.59.0.0, COMPILATION OF MODULE MAIN +OBJECT MODULE PLACED IN ..\Output\main.obj +COMPILER INVOKED BY: D:\Keil_v5\C51\BIN\C51.EXE ..\User\main.c LARGE OBJECTADVANCED OPTIMIZE(8,SIZE) BROWSE INCDIR(..\FW + -Lib\SC92F_Lib\inc;..\User;..\Apps;..\Apps;..\User) DEFINE(SC92F836xB) DEBUG PRINT(..\List\main.lst) OBJECT(..\Output\mai + -n.obj) + +line level source + + 1 //************************************************************ + 2 // Copyright (c) + 3 // FileName : main.c + 4 // Module Function : + 5 // Instructions : Contains the MCU initialization function and its H file + 6 //************************************************************ + 7 /********************Includes************************************************************************/ + 8 #include "SC_Init.h" //MCU Init header,Include all IC resource headers + 9 #include "SC_it.h" + 10 #include "..\Drivers\SCDriver_list.h" + 11 #include "HeadFiles\SysFunVarDefine.h" + 12 + 13 #include + 14 #include "test.h" + 15 #include "uart1.h" + 16 #include "motor.h" + 17 #include "adc.h" + 18 + 19 /**************************************Generated by EasyCodeCube*************************************/ + 20 + 21 + 22 /*************************************.Generated by EasyCodeCube.************************************/ + 23 /***************************************************************************************************** + 24 * Function Name: main + 25 * Description : This function implements main function. + 26 * Arguments : None + 27 * Return Value : None + 28 ******************************************************************************************************/ + 29 void main(void) + 30 { + 31 1 SC_Init(); /*** MCU init***/ + 32 1 InitUart_Data();//串口数据初始化 + 33 1 + 34 1 /*****MainLoop*****/ + 35 1 while(1) + 36 1 { + 37 2 /**//*<5>*/ + 38 2 //数据接收分析(放置大循环内) + 39 2 Deal_Uart_Data_For_Module(); + 40 2 + 41 2 //处理电机运行各种模式 + 42 2 Deal_Motor();//一般采用1-5毫秒 + 43 2 + 44 2 //采集ADC数据 + 45 2 if(it_10ms_flag == 1)//10毫秒 + 46 2 { + 47 3 it_10ms_flag = 0; + 48 3 ADC_Multichannel();//ADC数据采集 + 49 3 } + 50 2 + 51 2 //运行指示灯 + 52 2 led_test(); + 53 2 + C51 COMPILER V9.59.0.0 MAIN 01/18/2024 10:03:08 PAGE 2 + + 54 2 } + 55 1 } + 56 + 57 + 58 + + +MODULE INFORMATION: STATIC OVERLAYABLE + CODE SIZE = 29 ---- + CONSTANT SIZE = ---- ---- + XDATA SIZE = ---- ---- + PDATA SIZE = ---- ---- + DATA SIZE = ---- ---- + IDATA SIZE = ---- ---- + BIT SIZE = ---- ---- + EDATA SIZE = ---- ---- + HDATA SIZE = ---- ---- + XDATA CONST SIZE = ---- ---- + FAR CONST SIZE = ---- ---- +END OF MODULE INFORMATION. + + +C51 COMPILATION COMPLETE. 0 WARNING(S), 0 ERROR(S) diff --git a/Keil_C/List/motor.lst b/Keil_C/List/motor.lst new file mode 100644 index 0000000..eec6c67 --- /dev/null +++ b/Keil_C/List/motor.lst @@ -0,0 +1,1065 @@ +C51 COMPILER V9.59.0.0 MOTOR 01/18/2024 10:03:10 PAGE 1 + + +C51 COMPILER V9.59.0.0, COMPILATION OF MODULE MOTOR +OBJECT MODULE PLACED IN ..\Output\motor.obj +COMPILER INVOKED BY: D:\Keil_v5\C51\BIN\C51.EXE ..\Apps\motor.c LARGE OBJECTADVANCED OPTIMIZE(8,SIZE) BROWSE INCDIR(..\F + -WLib\SC92F_Lib\inc;..\User;..\Apps;..\Apps;..\User) DEFINE(SC92F836xB) DEBUG PRINT(..\List\motor.lst) OBJECT(..\Output\m + -otor.obj) + +line level source + + 1 #include "motor.h" + 2 + 3 #define STEP_LIN 16 //直行程步长单位数值(脉冲数) + 4 #define STEP_ROT 20 //角行程步长单位数值(脉冲数) + 5 #define DATA_LEN 10 //角行程步长单位数值(脉冲数) + 6 + 7 bit Travle_Flag = 0; //0 直 1 角 + 8 char xdata Motor_Run = 0; //0 停止 1 运行 2 运行到起始点 3 运行到结束点 + 9 char xdata Run_Mode = 0; //0 点动 1 方案一 2 方案二 + 10 unsigned int xdata Run_Step = 0; //电机运行步长 + 11 unsigned int xdata Run_Inter = 0; //电机运行间隔时长 + 12 unsigned int xdata Run_Stop = 0; //到“结束点”后,停止时间 + 13 unsigned int xdata Run_mm = 0; //行进长度(mm)/转动角度(°) + 14 unsigned int xdata Run_num = 0; //角行程电机转动圈数 + 15 unsigned int xdata ct_num = 0; //磁条长度 + 16 + 17 bit mov_flag = 0; //脉冲标志 + 18 bit send_flag = 0; //发送标志 + 19 bit seat_flag = 0; //位置标志 + 20 bit motor_dire = 1; //电机转动方向 + 21 bit flag = 0; + 22 + 23 + 24 //步骤 + 25 unsigned char xdata Runmotor_step = 0; + 26 + 27 //次数 + 28 unsigned int xdata Runmotor_Nums = 0; + 29 + 30 //电机启动 + 31 void motor_start(void) + 32 { + 33 1 GPIO_Init(GPIO1, GPIO_PIN_7,GPIO_MODE_OUT_PP);//脉冲引脚设置为输出模式,电机可收到脉冲信号 + 34 1 GPIO_WriteHigh(GPIO1,GPIO_PIN_7); + 35 1 motor_data[1] = 0x01;//电机启动,对应数据01 + 36 1 } + 37 + 38 //电机停止 + 39 void motor_stop(void) + 40 { + 41 1 GPIO_WriteHigh(GPIO1,GPIO_PIN_7); + 42 1 GPIO_Init(GPIO1, GPIO_PIN_7,GPIO_MODE_IN_HI);//脉冲引脚设置为输入模式,电机无法收到脉冲信号 + 43 1 motor_data[1] = 0x00;//电机停止,对应数据00 + 44 1 } + 45 + 46 //正转 + 47 void FWD(void) + 48 { + 49 1 GPIO_WriteLow(GPIO1,GPIO_PIN_6);//引脚电平置低,电机正转 + 50 1 } + 51 + 52 //反转 + 53 void REV(void) + C51 COMPILER V9.59.0.0 MOTOR 01/18/2024 10:03:10 PAGE 2 + + 54 { + 55 1 GPIO_WriteHigh(GPIO1,GPIO_PIN_6);//引脚电平置高,电机反转 + 56 1 } + 57 + 58 + 59 + 60 //清除电机标记 + 61 void ClrRunmotorStep(void) + 62 { + 63 1 //步骤 + 64 1 Runmotor_step = 0; + 65 1 //次数 + 66 1 Runmotor_Nums = 0; + 67 1 //脉冲标记清0 + 68 1 mov_flag = 0; + 69 1 //发送标记清0 + 70 1 send_flag = 0; + 71 1 //位置标记清0 + 72 1 seat_flag = 0; + 73 1 } + 74 + 75 //处理马达运行 + 76 void Deal_Motor(void) + 77 { + 78 1 //判断直行程还是角行程 + 79 1 if(Travle_Flag == 0)//直行程——电机旋转一圈,磁条水平位移5mm + 80 1 { + 81 2 motor_data[0] = 0x00;//00 直行程 01 角行程 + 82 2 //判断电机停止还是运行,运行到起始位还是结束位 + 83 2 if( Motor_Run == 0)//停止 + 84 2 { + 85 3 motor_stop(); + 86 3 } + 87 2 else if(Motor_Run == 1)//运行 + 88 2 { + 89 3 if(Motor_Run >= 1 && Runmotor_step == 0) + 90 3 { + 91 4 Runmotor_step = 1; + 92 4 } + 93 3 + 94 3 //判断电机运行方式是点动还是连续,点动为方案三,方案一和方案二为连续 + 95 3 if(Run_Mode == 0)//点动(方案三) + 96 3 { + 97 4 motor_data[2] = 0x00;//发送时反馈的数据 + 98 4 mov_step();//点动 + 99 4 } + 100 3 else if(Run_Mode == 1)//连续(方案一)“步长过大可能会越过限位开关” + 101 3 { + 102 4 motor_data[2] = 0x01;//发送时反馈的数据 + 103 4 mov_loop1();//方案一 + 104 4 } + 105 3 else if(Run_Mode == 2)//连续(方案二)“步长过大可能会越过限位开关” + 106 3 { + 107 4 motor_data[2] = 0x02;//发送时反馈的数据 + 108 4 //磁条循环“起始点-结束点-起始点”,一定次数后停在起始点 + 109 4 mov_loop2();//方案二 + 110 4 } + 111 3 else//初始化 + 112 3 { + 113 4 motor_stop(); + 114 4 } + 115 3 } + C51 COMPILER V9.59.0.0 MOTOR 01/18/2024 10:03:10 PAGE 3 + + 116 2 else if(Motor_Run == 2)//运行到起始位 + 117 2 { + 118 3 mov_begin();//回到起始位 + 119 3 } + 120 2 else if(Motor_Run == 3)//运行到结束位 + 121 2 { + 122 3 mov_end();//移动至结束位 + 123 3 } + 124 2 else//数据错误 + 125 2 SC_Init(); + 126 2 } + 127 1 else //角行程——电机旋转一圈,磁条旋转4° + 128 1 { + 129 2 motor_data[0] = 0x01;//00 直行程 01 角行程 + 130 2 //判断电机停止还是运行,运行到起始位还是结束位 + 131 2 if( Motor_Run == 0)//停止 + 132 2 { + 133 3 motor_stop(); + 134 3 } + 135 2 else if(Motor_Run == 1)//运行 + 136 2 { + 137 3 if(Motor_Run >= 1 && Runmotor_step == 0) + 138 3 { + 139 4 Runmotor_step = 1; + 140 4 } + 141 3 + 142 3 //判断电机运行方式是点动还是连续,点动为方案三,方案一和方案二为连续 + 143 3 if(Run_Mode == 0)//点动(方案三) + 144 3 { + 145 4 motor_data[2] = 0x00;//发送时反馈的数据 + 146 4 mov_step_ang();//电机点动运行 + 147 4 } + 148 3 else if(Run_Mode == 1)//连续(方案一) + 149 3 { + 150 4 motor_data[2] = 0x01;//发送时反馈的数据 + 151 4 mov_loop1_ang();//磁条旋转一圈 + 152 4 } + 153 3 else if(Run_Mode == 2)//连续(方案二) + 154 3 { + 155 4 motor_data[2] = 0x02;//发送时反馈的数据 + 156 4 if(seat_flag == 0) + 157 4 { + 158 5 if(GPIO_ReadPin(GPIO1,GPIO_PIN_4) == 0) //判断是否到达限位处 + 159 5 { + 160 6 motor_stop(); //电机停止 + 161 6 Run_mm = 0; + 162 6 seat_flag = 1;//位置标记 + 163 6 } + 164 5 else + 165 5 { + 166 6 REV(); //反转 + 167 6 motor_start(); //运行 + 168 6 motor_mov(1); //提供脉冲信号 + 169 6 } + 170 5 } + 171 4 else + 172 4 { + 173 5 mov_loop2_ang();//磁条旋转一圈 + 174 5 } + 175 4 } + 176 3 else//初始化 + 177 3 { + C51 COMPILER V9.59.0.0 MOTOR 01/18/2024 10:03:10 PAGE 4 + + 178 4 motor_stop(); + 179 4 } + 180 3 } + 181 2 else if(Motor_Run == 2 || Motor_Run == 3)//运行到起始位 + 182 2 { + 183 3 mov_begin();//回到起始位 + 184 3 } + 185 2 else//数据错误 + 186 2 SC_Init(); + 187 2 } + 188 1 } + 189 + 190 + 191 /***************************************************** + 192 *函数名称: motor_mov + 193 *函数功能: 电机速度控制 + 194 *参数说明:speed 电机速度设定值,1为最快,5为最慢 + 195 *****************************************************/ + 196 void motor_mov(unsigned int speed) + 197 { + 198 1 switch(speed)//控制电机速度,设定有五档速度 + 199 1 { + 200 2 //脉冲周期2ms + 201 2 case 1: + 202 2 { + 203 3 if(it_1ms_flag) //检查1ms定时标志 + 204 3 { + 205 4 it_1ms_flag = 0;//定时标志清零 + 206 4 if(mov_flag) + 207 4 { + 208 5 mov_flag = 0; + 209 5 GPIO_WriteHigh(GPIO1,GPIO_PIN_7);//P1.7引脚拉高 + 210 5 } + 211 4 else + 212 4 { + 213 5 mov_flag = 1; + 214 5 GPIO_WriteLow(GPIO1,GPIO_PIN_7);//P1.7引脚拉低 + 215 5 } + 216 4 Runmotor_Nums++; //运行次数 + 217 4 } + 218 3 } + 219 2 break; + 220 2 //脉冲周期4ms + 221 2 case 2: + 222 2 { + 223 3 if(it_2ms_flag)//检查2ms定时标志 + 224 3 { + 225 4 it_2ms_flag = 0;//定时标志清零 + 226 4 if(mov_flag) + 227 4 { + 228 5 mov_flag = 0; + 229 5 GPIO_WriteHigh(GPIO1,GPIO_PIN_7);//P1.7引脚拉高 + 230 5 } + 231 4 else + 232 4 { + 233 5 mov_flag = 1; + 234 5 GPIO_WriteLow(GPIO1,GPIO_PIN_7);//P1.7引脚拉低 + 235 5 } + 236 4 Runmotor_Nums++; //运行次数 + 237 4 } + 238 3 } + 239 2 break; + C51 COMPILER V9.59.0.0 MOTOR 01/18/2024 10:03:10 PAGE 5 + + 240 2 //脉冲周期6ms + 241 2 case 3: + 242 2 { + 243 3 if(it_3ms_flag)//检查3ms定时标志 + 244 3 { + 245 4 it_3ms_flag = 0;//定时标志清零 + 246 4 if(mov_flag) + 247 4 { + 248 5 mov_flag = 0; + 249 5 GPIO_WriteHigh(GPIO1,GPIO_PIN_7);//P1.7引脚拉高 + 250 5 } + 251 4 else + 252 4 { + 253 5 mov_flag = 1; + 254 5 GPIO_WriteLow(GPIO1,GPIO_PIN_7);//P1.7引脚拉低 + 255 5 } + 256 4 Runmotor_Nums++; //运行次数 + 257 4 } + 258 3 } + 259 2 break; + 260 2 //脉冲周期8ms + 261 2 case 4: + 262 2 { + 263 3 if(it_4ms_flag)//检查4ms定时标志 + 264 3 { + 265 4 it_4ms_flag = 0;//定时标志清零 + 266 4 if(mov_flag) + 267 4 { + 268 5 mov_flag = 0; + 269 5 GPIO_WriteHigh(GPIO1,GPIO_PIN_7);//P1.7引脚拉高 + 270 5 } + 271 4 else + 272 4 { + 273 5 mov_flag = 1; + 274 5 GPIO_WriteLow(GPIO1,GPIO_PIN_7);//P1.7引脚拉低 + 275 5 } + 276 4 Runmotor_Nums++; //运行次数 + 277 4 } + 278 3 } + 279 2 break; + 280 2 //脉冲周期10ms + 281 2 case 5: + 282 2 { + 283 3 if(it_5ms_flag)//检查5ms定时标志 + 284 3 { + 285 4 it_5ms_flag = 0;//定时标志清零 + 286 4 if(mov_flag) + 287 4 { + 288 5 mov_flag = 0; + 289 5 GPIO_WriteHigh(GPIO1,GPIO_PIN_7);//P1.7引脚拉高 + 290 5 } + 291 4 else + 292 4 { + 293 5 mov_flag = 1; + 294 5 GPIO_WriteLow(GPIO1,GPIO_PIN_7);//P1.7引脚拉低 + 295 5 } + 296 4 Runmotor_Nums++; //运行次数 + 297 4 } + 298 3 } + 299 2 break; + 300 2 default : + 301 2 break; + C51 COMPILER V9.59.0.0 MOTOR 01/18/2024 10:03:10 PAGE 6 + + 302 2 } + 303 1 } + 304 + 305 + 306 + 307 //电机连续运行,方案一(直行程) + 308 void mov_loop1(void) + 309 { + 310 1 if(Run_Step == 0) return;//步长不能为0 + 311 1 + 312 1 switch(Runmotor_step) + 313 1 { + 314 2 case 1 : //电机运行准备 + 315 2 { + 316 3 + 317 3 FWD(); //正转 + 318 3 motor_dire = 1; + 319 3 Run_mm = 0; + 320 3 Run_num = 0; + 321 3 motor_data[2] = 0x00; //发送时反馈的数据 + 322 3 Runmotor_Nums = 0; //运行次数 + 323 3 mov_flag = 0; + 324 3 Runmotor_step++; + 325 3 } + 326 2 break; + 327 2 case 2 : //电机运行过程 + 328 2 { + 329 3 if(GPIO_ReadPin(GPIO0,GPIO_PIN_5) == 0) //光栅信号判断 + 330 3 { + 331 4 if(it_1s_flag) //检查1ms定时标志 + 332 4 { + 333 5 it_1s_flag = 0;//定时标志清零 + 334 5 Runmotor_Nums++; + 335 5 } + 336 4 if(Runmotor_Nums >= Run_Stop)//时间 + 337 4 { + 338 5 Runmotor_step++; + 339 5 motor_data[8] = ((Run_mm * Run_Step) & 0xff00) >> 8;//磁条长度高8位 + 340 5 motor_data[9] = (Run_mm * Run_Step) & 0x00ff; //磁条长度低8位 + 341 5 motor_seat(); //读取电机当前位置 + 342 5 send_set_resp(0xF001, OBJ_DEVICE_ADDR, DATA_LEN, motor_data);//数据发送 + 343 5 } + 344 4 } + 345 3 else + 346 3 { + 347 4 if(send_flag == 0) + 348 4 { + 349 5 send_flag = 1; + 350 5 motor_seat();//读取电机当前位置 + 351 5 send_set_resp(0xF001, OBJ_DEVICE_ADDR, DATA_LEN, motor_data);//数据发送 + 352 5 } + 353 4 motor_start(); //运行 + 354 4 motor_mov(1); //运行1个脉冲 + 355 4 Run_mm = 1; //磁条移动距离清0 + 356 4 Runmotor_Nums = 0; //计数清零 + 357 4 Runmotor_step = 6; + 358 4 } + 359 3 } + 360 2 break; + 361 2 case 3 : //延时 + 362 2 { + 363 3 if(motor_dire == 1) + C51 COMPILER V9.59.0.0 MOTOR 01/18/2024 10:03:10 PAGE 7 + + 364 3 { + 365 4 motor_start(); //运行 + 366 4 motor_mov(1); //运行1个脉冲 + 367 4 if(Runmotor_Nums >= (Run_Step * STEP_LIN))//运行一个步长,脉冲数由驱动器的细分数决定 + 368 4 { + 369 5 Runmotor_Nums = 0; //计数清零 + 370 5 motor_stop(); //马达停止 + 371 5 motor_data[1] = 0x01; //电机启动,对应数据01 + 372 5 motor_data[3] = 0x03; //电机方向——始终 + 373 5 Run_mm++; //磁条移动距离加1 + 374 5 ct_num = Run_mm; //磁条长度 + 375 5 motor_data[8] = ((Run_mm * Run_Step) & 0xff00) >> 8;//磁条长度高8位 + 376 5 motor_data[9] = (Run_mm * Run_Step) & 0x00ff; //磁条长度低8位 + 377 5 Runmotor_step++; + 378 5 } + 379 4 } + 380 3 else + 381 3 { + 382 4 motor_start(); //运行 + 383 4 motor_mov(1); //运行1个脉冲 + 384 4 if(Runmotor_Nums >= (Run_Step * STEP_LIN))//运行一个步长,脉冲数由驱动器的细分数决定 + 385 4 { + 386 5 Runmotor_Nums = 0; //计数清零 + 387 5 motor_stop(); //马达停止 + 388 5 motor_data[1] = 0x01; //电机启动,对应数据01 + 389 5 motor_data[3] = 0x04; //电机方向——终始 + 390 5 ct_num = ct_num - 1; //磁条长度 + 391 5 Run_mm = ct_num; //磁条移动距离减1 + 392 5 motor_data[8] = ((Run_mm * Run_Step) & 0xff00) >> 8;//磁条长度高8位 + 393 5 motor_data[9] = (Run_mm * Run_Step) & 0x00ff; //磁条长度低8位 + 394 5 Runmotor_step++; + 395 5 } + 396 4 } + 397 3 } + 398 2 break; + 399 2 case 4 : //延时 + 400 2 { + 401 3 if(it_1ms_flag) //检查1ms定时标志 + 402 3 { + 403 4 it_1ms_flag = 0;//定时标志清零 + 404 4 Runmotor_Nums++; + 405 4 } + 406 3 if(Runmotor_Nums >= Run_Inter)//时间 + 407 3 { + 408 4 + 409 4 Runmotor_Nums = 0; + 410 4 Runmotor_step++; + 411 4 send_flag = 0; + 412 4 //motor_seat(); //读取电机当前位置 + 413 4 send_set_resp(0xF001, OBJ_DEVICE_ADDR, DATA_LEN, motor_data);//数据发送 + 414 4 } + 415 3 + 416 3 } + 417 2 break; + 418 2 case 5 : + 419 2 { + 420 3 if(GPIO_ReadPin(GPIO0,GPIO_PIN_5) == 1 )//光栅信号判断 + 421 3 { + 422 4 if(flag == 0) + 423 4 { + 424 5 Runmotor_Nums = 0; + 425 5 Runmotor_step = 3; + C51 COMPILER V9.59.0.0 MOTOR 01/18/2024 10:03:10 PAGE 8 + + 426 5 if(motor_dire == 1) + 427 5 { + 428 6 REV(); + 429 6 flag = 1; + 430 6 motor_dire = 0; + 431 6 } + 432 5 else + 433 5 { + 434 6 Motor_Run = 2; //运行标记改变,电机回到初始位 + 435 6 } + 436 5 } + 437 4 else + 438 4 { + 439 5 Runmotor_step = 3; + 440 5 } + 441 4 } + 442 3 else + 443 3 { + 444 4 Runmotor_step = 3; + 445 4 flag = 0 ; + 446 4 } + 447 3 } + 448 2 break; + 449 2 case 6 : + 450 2 { + 451 3 if(GPIO_ReadPin(GPIO1,GPIO_PIN_4) == 0)//起始点限位 + 452 3 { + 453 4 FWD();//正转 + 454 4 motor_dire = 1;//电机转动方向 + 455 4 } + 456 3 if(GPIO_ReadPin(GPIO1,GPIO_PIN_5) == 0)//结束点限位 + 457 3 { + 458 4 REV();//反转 + 459 4 motor_dire = 0;//电机转动方向 + 460 4 } + 461 3 Runmotor_step = 2; + 462 3 } + 463 2 break; + 464 2 default : + 465 2 { + 466 3 + 467 3 } + 468 2 break; + 469 2 } + 470 1 } + 471 + 472 //电机连续运行,方案一(角行程) + 473 void mov_loop1_ang(void) + 474 { + 475 1 if(Run_Step == 0) return;//步长不能为0 + 476 1 + 477 1 switch(Runmotor_step) + 478 1 { + 479 2 case 1 : //电机运行准备 + 480 2 { + 481 3 FWD();//正转 + 482 3 motor_dire = 1; + 483 3 motor_data[2] = 0x00;//发送时反馈的数据 + 484 3 Runmotor_Nums = 0; //运行次数 + 485 3 mov_flag = 0; + 486 3 Run_mm = 0; + 487 3 Run_num = 0; + C51 COMPILER V9.59.0.0 MOTOR 01/18/2024 10:03:10 PAGE 9 + + 488 3 Runmotor_step++; + 489 3 } + 490 2 break; + 491 2 case 2 : //电机运行过程 + 492 2 { + 493 3 if(motor_dire == 1) + 494 3 { + 495 4 FWD();//正转 + 496 4 motor_start(); //运行 + 497 4 motor_mov(1); //运行1个脉冲 + 498 4 if(Runmotor_Nums >= (Run_Step * STEP_ROT))//运行一个步长,脉冲数由驱动器的细分数决定 + 499 4 { + 500 5 Runmotor_Nums = 0; //计数清零 + 501 5 motor_stop(); //马达停止 + 502 5 motor_data[1] = 0x01; //电机启动,对应数据01 + 503 5 motor_data[3] = 0x03; //电机方向——始终 + 504 5 Run_mm++; //磁条移动距离加1 + 505 5 Run_num = Run_mm * Run_Step; + 506 5 motor_data[8] = (Run_num & 0xff00) >> 8;//磁条长度高8位 + 507 5 motor_data[9] = Run_num & 0x00ff; //磁条长度低8位 + 508 5 Runmotor_step++; + 509 5 } + 510 4 } + 511 3 else + 512 3 { + 513 4 REV();//反转 + 514 4 motor_start(); //运行 + 515 4 motor_mov(1); //运行1个脉冲 + 516 4 if(Runmotor_Nums >= (Run_Step * STEP_ROT))//运行一个步长,脉冲数由驱动器的细分数决定 + 517 4 { + 518 5 Runmotor_Nums = 0; //计数清零 + 519 5 motor_stop(); //马达停止 + 520 5 motor_data[1] = 0x01; //电机启动,对应数据01 + 521 5 motor_data[3] = 0x04; //电机方向——终始 + 522 5 Run_mm--; //磁条移动距离减1 + 523 5 Run_num = Run_mm * Run_Step; + 524 5 motor_data[8] = (Run_num & 0xff00) >> 8;//磁条长度高8位 + 525 5 motor_data[9] = Run_num & 0x00ff; //磁条长度低8位 + 526 5 Runmotor_step++; + 527 5 } + 528 4 } + 529 3 } + 530 2 break; + 531 2 case 3 : //延时 + 532 2 { + 533 3 if(it_1ms_flag) //检查1ms定时标志 + 534 3 { + 535 4 it_1ms_flag = 0;//定时标志清零 + 536 4 Runmotor_Nums++; + 537 4 } + 538 3 if(Runmotor_Nums >= Run_Inter)//时间 + 539 3 { + 540 4 Runmotor_Nums = 0; + 541 4 Runmotor_step++; + 542 4 //motor_seat(); //读取电机当前位置 + 543 4 send_set_resp(0xF001, OBJ_DEVICE_ADDR, DATA_LEN, motor_data);//数据发送 + 544 4 } + 545 3 } + 546 2 break; + 547 2 case 4 : + 548 2 { + 549 3 if(Run_num >= Run_Stop * 10&& motor_dire == 1)//判断磁条是否转动设定的角度 + C51 COMPILER V9.59.0.0 MOTOR 01/18/2024 10:03:10 PAGE 10 + + 550 3 { + 551 4 motor_dire = 0; + 552 4 Runmotor_step = 2; + 553 4 } + 554 3 else if(Run_num <= 0 && motor_dire == 0) + 555 3 { + 556 4 //motor_dire = 1; + 557 4 Motor_Run = 1; + 558 4 } + 559 3 else + 560 3 { + 561 4 Runmotor_step = 2; + 562 4 } + 563 3 } + 564 2 break; + 565 2 default : + 566 2 { + 567 3 + 568 3 } + 569 2 break; + 570 2 } + 571 1 } + 572 + 573 + 574 //电机连续运行,方案二(直行程) + 575 void mov_loop2(void) + 576 { + 577 1 if(Run_Step == 0) return;//步长不能为0 + 578 1 + 579 1 switch(Runmotor_step) + 580 1 { + 581 2 case 1 : //电机运行准备 + 582 2 { + 583 3 + 584 3 FWD();//正转 + 585 3 motor_dire = 1; + 586 3 motor_data[2] = 0x00;//发送时反馈的数据 + 587 3 Runmotor_Nums = 0; //运行次数 + 588 3 mov_flag = 0; // + 589 3 Runmotor_step++; + 590 3 } + 591 2 break; + 592 2 case 2 : //电机运行过程 + 593 2 { + 594 3 if(GPIO_ReadPin(GPIO0,GPIO_PIN_5) == 0)//光栅信号判断 + 595 3 { + 596 4 + 597 4 if(it_1s_flag) //检查1ms定时标志 + 598 4 { + 599 5 it_1s_flag = 0;//定时标志清零 + 600 5 Runmotor_Nums++; + 601 5 } + 602 4 if(Runmotor_Nums >= Run_Stop)//时间 + 603 4 { + 604 5 Runmotor_step++; + 605 5 motor_data[8] = ((Run_mm * Run_Step) & 0xff00) >> 8;//磁条长度高8位 + 606 5 motor_data[9] = (Run_mm * Run_Step) & 0x00ff; //磁条长度低8位 + 607 5 motor_seat(); //读取电机当前位置 + 608 5 send_set_resp(0xF001, OBJ_DEVICE_ADDR, DATA_LEN, motor_data);//数据发送 + 609 5 }//Run_mm = 1; //磁条移动距离置1 + 610 4 + 611 4 } + C51 COMPILER V9.59.0.0 MOTOR 01/18/2024 10:03:10 PAGE 11 + + 612 3 else + 613 3 { + 614 4 if(send_flag == 0) + 615 4 { + 616 5 send_flag = 1; + 617 5 motor_seat();//读取电机当前位置 + 618 5 send_set_resp(0xF001, OBJ_DEVICE_ADDR, DATA_LEN, motor_data);//数据发送 + 619 5 } + 620 4 motor_start(); //运行 + 621 4 motor_mov(1); //运行1个脉冲 + 622 4 Run_mm = 1; //磁条移动距离清0 + 623 4 Runmotor_Nums = 0; //计数清零 + 624 4 Runmotor_step = 6; + 625 4 } + 626 3 } + 627 2 break; + 628 2 case 3 : //延时 + 629 2 { + 630 3 if(motor_dire == 1) + 631 3 { + 632 4 motor_start(); //运行 + 633 4 motor_mov(1); //运行1个脉冲 + 634 4 if(Runmotor_Nums >= (Run_Step * STEP_LIN))//运行一个步长,脉冲数由驱动器的细分数决定 + 635 4 { + 636 5 Runmotor_Nums = 0; //计数清零 + 637 5 motor_stop(); //马达停止 + 638 5 motor_data[1] = 0x01; //电机启动,对应数据01 + 639 5 motor_data[3] = 0x03; //电机方向——始终 + 640 5 Run_mm++; //磁条移动距离加1 + 641 5 ct_num = Run_mm; //磁条长度 + 642 5 motor_data[8] = ((Run_mm * Run_Step) & 0xff00) >> 8;//磁条长度高8位 + 643 5 motor_data[9] = (Run_mm * Run_Step) & 0x00ff; //磁条长度低8位 + 644 5 Runmotor_step++; + 645 5 } + 646 4 } + 647 3 else + 648 3 { + 649 4 motor_start(); //运行 + 650 4 motor_mov(1); //运行1个脉冲 + 651 4 if(Runmotor_Nums >= (Run_Step * STEP_LIN))//运行一个步长,脉冲数由驱动器的细分数决定 + 652 4 { + 653 5 Runmotor_Nums = 0; //计数清零 + 654 5 motor_stop(); //马达停止 + 655 5 motor_data[1] = 0x01; //电机启动,对应数据01 + 656 5 motor_data[3] = 0x04; //电机方向——终始 + 657 5 ct_num = ct_num - 1; //磁条长度 + 658 5 Run_mm = ct_num; //磁条移动距离减1 + 659 5 motor_data[8] = ((Run_mm * Run_Step) & 0xff00) >> 8;//磁条长度高8位 + 660 5 motor_data[9] = (Run_mm * Run_Step) & 0x00ff; //磁条长度低8位 + 661 5 Runmotor_step++; + 662 5 } + 663 4 } + 664 3 } + 665 2 break; + 666 2 case 4 : //延时 + 667 2 { + 668 3 if(it_1ms_flag) //检查1ms定时标志 + 669 3 { + 670 4 it_1ms_flag = 0;//定时标志清零 + 671 4 Runmotor_Nums++; + 672 4 } + 673 3 if(Runmotor_Nums >= Run_Inter)//时间 + C51 COMPILER V9.59.0.0 MOTOR 01/18/2024 10:03:10 PAGE 12 + + 674 3 { + 675 4 + 676 4 Runmotor_Nums = 0; + 677 4 Runmotor_step++; + 678 4 send_flag = 0; + 679 4 //motor_seat(); //读取电机当前位置 + 680 4 send_set_resp(0xF001, OBJ_DEVICE_ADDR, DATA_LEN, motor_data);//数据发送 + 681 4 } + 682 3 + 683 3 } + 684 2 break; + 685 2 case 5 : + 686 2 { + 687 3 if(GPIO_ReadPin(GPIO0,GPIO_PIN_5) == 1 )//光栅信号判断 + 688 3 { + 689 4 if(flag == 0) + 690 4 { + 691 5 Runmotor_Nums = 0; + 692 5 Runmotor_step = 3; + 693 5 if(motor_dire == 1) + 694 5 { + 695 6 REV(); + 696 6 flag = 1; + 697 6 motor_dire = 0; + 698 6 } + 699 5 else + 700 5 { + 701 6 FWD(); + 702 6 flag = 1; + 703 6 motor_dire = 1; + 704 6 } + 705 5 } + 706 4 else + 707 4 { + 708 5 Runmotor_step = 3; + 709 5 } + 710 4 } + 711 3 else + 712 3 { + 713 4 Runmotor_step = 3; + 714 4 flag = 0 ; + 715 4 } + 716 3 } + 717 2 break; + 718 2 case 6 : + 719 2 { + 720 3 if(GPIO_ReadPin(GPIO1,GPIO_PIN_4) == 0)//起始点限位 + 721 3 { + 722 4 FWD();//正转 + 723 4 motor_dire = 1;//电机转动方向 + 724 4 } + 725 3 if(GPIO_ReadPin(GPIO1,GPIO_PIN_5) == 0)//结束点限位 + 726 3 { + 727 4 REV();//反转 + 728 4 motor_dire = 0;//电机转动方向 + 729 4 } + 730 3 Runmotor_step = 2; + 731 3 } + 732 2 break; + 733 2 + 734 2 default : + 735 2 { + C51 COMPILER V9.59.0.0 MOTOR 01/18/2024 10:03:10 PAGE 13 + + 736 3 + 737 3 } + 738 2 break; + 739 2 } + 740 1 } + 741 + 742 //电机连续运行,方案二(角行程) + 743 void mov_loop2_ang(void) + 744 { + 745 1 if(Run_Step == 0) return;//步长不能为0 + 746 1 + 747 1 switch(Runmotor_step) + 748 1 { + 749 2 case 1 : //电机运行准备 + 750 2 { + 751 3 FWD();//正转 + 752 3 motor_dire = 1; + 753 3 motor_data[2] = 0x00;//发送时反馈的数据 + 754 3 Runmotor_Nums = 0; //运行次数 + 755 3 mov_flag = 0; + 756 3 Runmotor_step++; + 757 3 } + 758 2 break; + 759 2 case 2 : //电机运行过程 + 760 2 { + 761 3 if(motor_dire == 1) + 762 3 { + 763 4 FWD();//正转 + 764 4 motor_start(); //运行 + 765 4 motor_mov(1); //运行1个脉冲 + 766 4 if(Runmotor_Nums >= (Run_Step * STEP_ROT))//运行一个步长,脉冲数由驱动器的细分数决定 + 767 4 { + 768 5 Runmotor_Nums = 0; //计数清零 + 769 5 motor_stop(); //马达停止 + 770 5 motor_data[1] = 0x01; //电机启动,对应数据01 + 771 5 motor_data[3] = 0x03; //电机方向——始终 + 772 5 Run_mm++; //磁条移动距离加1 + 773 5 Run_num = Run_mm * Run_Step; + 774 5 motor_data[8] = (Run_num & 0xff00) >> 8;//磁条长度高8位 + 775 5 motor_data[9] = Run_num & 0x00ff; //磁条长度低8位 + 776 5 Runmotor_step++; + 777 5 } + 778 4 } + 779 3 else + 780 3 { + 781 4 REV();//反转 + 782 4 motor_start(); //运行 + 783 4 motor_mov(1); //运行1个脉冲 + 784 4 if(Runmotor_Nums >= (Run_Step * STEP_ROT))//运行一个步长,脉冲数由驱动器的细分数决定 + 785 4 { + 786 5 Runmotor_Nums = 0; //计数清零 + 787 5 motor_stop(); //马达停止 + 788 5 motor_data[1] = 0x01; //电机启动,对应数据01 + 789 5 motor_data[3] = 0x04; //电机方向——终始 + 790 5 Run_mm--; //磁条移动距离减1 + 791 5 Run_num = Run_mm * Run_Step; + 792 5 motor_data[8] = (Run_num & 0xff00) >> 8;//磁条长度高8位 + 793 5 motor_data[9] = Run_num & 0x00ff; //磁条长度低8位 + 794 5 Runmotor_step++; + 795 5 } + 796 4 } + 797 3 } + C51 COMPILER V9.59.0.0 MOTOR 01/18/2024 10:03:10 PAGE 14 + + 798 2 break; + 799 2 case 3 : //延时 + 800 2 { + 801 3 if(it_1ms_flag) //检查1ms定时标志 + 802 3 { + 803 4 it_1ms_flag = 0;//定时标志清零 + 804 4 Runmotor_Nums++; + 805 4 } + 806 3 if(Runmotor_Nums >= Run_Inter)//时间 + 807 3 { + 808 4 Runmotor_Nums = 0; + 809 4 Runmotor_step++; + 810 4 //motor_seat(); //读取电机当前位置 + 811 4 send_set_resp(0xF001, OBJ_DEVICE_ADDR, DATA_LEN, motor_data);//数据发送 + 812 4 } + 813 3 } + 814 2 break; + 815 2 case 4 : + 816 2 { + 817 3 if(Run_num >= Run_Stop * 10)//判断磁条是否转动设定的角度 + 818 3 { + 819 4 motor_dire = 0; + 820 4 Runmotor_step = 2; + 821 4 } + 822 3 else if(Run_num <= 0) + 823 3 { + 824 4 motor_dire = 1; + 825 4 Runmotor_step = 2; + 826 4 } + 827 3 else + 828 3 { + 829 4 Runmotor_step = 2; + 830 4 } + 831 3 } + 832 2 break; + 833 2 default : + 834 2 { + 835 3 + 836 3 } + 837 2 break; + 838 2 } + 839 1 } + 840 + 841 //电机点动运行,方案三(直行程) + 842 void mov_step(void) + 843 { + 844 1 if(Run_Step == 0) return;//步长不能为0 + 845 1 + 846 1 switch(Runmotor_step) + 847 1 { + 848 2 case 1 : //电机运行准备 + 849 2 { + 850 3 motor_start(); //运行 + 851 3 if(GPIO_ReadPin(GPIO1,GPIO_PIN_4) == 0)//判断是否到达始限位 + 852 3 FWD(); //正转 + 853 3 if(GPIO_ReadPin(GPIO1,GPIO_PIN_5) == 0)//判断是否到达终限位 + 854 3 REV(); //反转 + 855 3 Runmotor_Nums = 0; //运行次数 + 856 3 mov_flag = 0; + 857 3 Runmotor_step++; + 858 3 } + 859 2 break; + C51 COMPILER V9.59.0.0 MOTOR 01/18/2024 10:03:10 PAGE 15 + + 860 2 case 2 : //电机运行过程 + 861 2 { + 862 3 motor_mov(1);//运行1个脉冲 + 863 3 if(Runmotor_Nums >= (Run_Step * STEP_LIN))//运行一个步长,脉冲数由驱动器的细分数决定 + 864 3 { + 865 4 Runmotor_Nums = 0; + 866 4 motor_stop(); //马达停止 + 867 4 Runmotor_step++; + 868 4 Run_mm++; //磁条移动距离加1 + 869 4 Run_num = Run_mm * Run_Step; + 870 4 motor_data[8] = (Run_num & 0xff00) >> 8;//磁条长度高8位 + 871 4 motor_data[9] = Run_num & 0x00ff; //磁条长度低8位 + 872 4 // motor_seat(); //读取电机当前位置 + 873 4 // send_set_resp(0xF001, OBJ_DEVICE_ADDR, DATA_LEN, motor_data);//数据发送 + 874 4 } + 875 3 } + 876 2 break; + 877 2 case 3 : + 878 2 { + 879 3 if(it_1ms_flag) //检查1ms定时标志 + 880 3 { + 881 4 it_1ms_flag = 0;//定时标志清零 + 882 4 Runmotor_Nums++; + 883 4 } + 884 3 if(Runmotor_Nums >= 50)//时间 + 885 3 { + 886 4 Runmotor_Nums = 0; + 887 4 Runmotor_step++; + 888 4 motor_seat(); //读取电机当前位置 + 889 4 send_set_resp(0xF001, OBJ_DEVICE_ADDR, DATA_LEN, motor_data);//数据发送 + 890 4 } + 891 3 } + 892 2 break; + 893 2 case 4 : + 894 2 { + 895 3 Runmotor_step = 0; + 896 3 Motor_Run = 0; //运行标记清除 + 897 3 } + 898 2 break; + 899 2 default : + 900 2 { + 901 3 + 902 3 } + 903 2 break; + 904 2 } + 905 1 } + 906 + 907 //电机点动运行,方案三(角行程) + 908 void mov_step_ang(void) + 909 { + 910 1 if(Run_Step == 0) return;//步长不能为0 + 911 1 + 912 1 switch(Runmotor_step) + 913 1 { + 914 2 case 1 : //电机运行准备 + 915 2 { + 916 3 motor_start(); //运行 + 917 3 FWD(); //正转 + 918 3 Runmotor_Nums = 0; //运行次数 + 919 3 mov_flag = 0; + 920 3 Runmotor_step++; + 921 3 } + C51 COMPILER V9.59.0.0 MOTOR 01/18/2024 10:03:10 PAGE 16 + + 922 2 break; + 923 2 case 2 : //电机运行过程 + 924 2 { + 925 3 motor_mov(1);//运行1个脉冲 + 926 3 if(Runmotor_Nums >= (Run_Step * STEP_ROT))//运行一个步长,脉冲数由驱动器的细分数决定 + 927 3 { + 928 4 Runmotor_Nums = 0; + 929 4 motor_stop(); //马达停止 + 930 4 Run_mm++; //磁条移动距离加1 + 931 4 Run_num = Run_mm * Run_Step; + 932 4 motor_data[8] = (Run_num & 0xff00) >> 8;//磁条长度高8位 + 933 4 motor_data[9] = Run_num & 0x00ff; //磁条长度低8位 + 934 4 motor_seat(); //读取电机当前位置 + 935 4 send_set_resp(0xF001, OBJ_DEVICE_ADDR, DATA_LEN, motor_data);//数据发送 + 936 4 Runmotor_step++; + 937 4 } + 938 3 } + 939 2 break; + 940 2 case 3 : + 941 2 { + 942 3 Runmotor_step = 0; + 943 3 Motor_Run = 0; //运行标记清除 + 944 3 if(Run_num >= 3600) //判断磁条是否转动一圈 + 945 3 Run_mm = 0; + 946 3 } + 947 2 break; + 948 2 default : + 949 2 { + 950 3 + 951 3 } + 952 2 break; + 953 2 } + 954 1 } + 955 + 956 //电机回到起始位 + 957 void mov_begin(void) + 958 { + 959 1 motor_data[1] = 0x02; //电机运行到起始位,对应数据02 + 960 1 motor_data[8] = 0x00; //磁条长度高8位 + 961 1 motor_data[9] = 0x00; //磁条长度低8位 + 962 1 REV(); //电机反转 + 963 1 motor_start(); //电机启动 + 964 1 if(GPIO_ReadPin(GPIO1,GPIO_PIN_4) == 0) //判断是否到达限位处 + 965 1 { + 966 2 motor_stop(); //电机停止 + 967 2 Run_mm = 0; + 968 2 Run_num = 0; + 969 2 if(send_flag == 1) + 970 2 { + 971 3 send_flag = 0; + 972 3 motor_seat(); //读取电机当前位置 + 973 3 send_set_resp(0xF001, OBJ_DEVICE_ADDR, DATA_LEN, motor_data);//数据发送 + 974 3 } + 975 2 } + 976 1 else + 977 1 motor_mov(1); //提供脉冲 + 978 1 } + 979 + 980 //电机回到结束位 + 981 void mov_end(void) + 982 { + 983 1 motor_data[1] = 0x03; //电机运行到结束位,对应数据03 + C51 COMPILER V9.59.0.0 MOTOR 01/18/2024 10:03:10 PAGE 17 + + 984 1 FWD(); //电机反转 + 985 1 motor_start(); //电机启动 + 986 1 //Run_mm = 0; + 987 1 if(GPIO_ReadPin(GPIO1,GPIO_PIN_5) == 0)//判断是否到达限位处 + 988 1 motor_stop(); //电机停止 + 989 1 else + 990 1 motor_mov(1); //提供脉冲 + 991 1 } + 992 + 993 //电机位置判断 + 994 void motor_seat(void) + 995 { + 996 1 if(GPIO_ReadPin(GPIO1,GPIO_PIN_4) == 0) //磁条处于起始点限位开关处 + 997 1 motor_data[3] = 0x01; //发送时反馈的数据 + 998 1 else if(GPIO_ReadPin(GPIO1,GPIO_PIN_5) == 0)//磁条处于结束点限位开关处 + 999 1 motor_data[3] = 0x02; //发送时反馈的数据 +1000 1 else if(GPIO_ReadPin(GPIO0,GPIO_PIN_5) == 0)//磁条正通过光栅 +1001 1 motor_data[3] = 0x03; //发送时反馈的数据 +1002 1 else //无状态 +1003 1 motor_data[3] = 0x00; //发送时反馈的数据 +1004 1 } + + +MODULE INFORMATION: STATIC OVERLAYABLE + CODE SIZE = 3818 ---- + CONSTANT SIZE = ---- ---- + XDATA SIZE = 17 ---- + PDATA SIZE = ---- ---- + DATA SIZE = ---- ---- + IDATA SIZE = ---- ---- + BIT SIZE = 6 ---- + EDATA SIZE = ---- ---- + HDATA SIZE = ---- ---- + XDATA CONST SIZE = ---- ---- + FAR CONST SIZE = ---- ---- +END OF MODULE INFORMATION. + + +C51 COMPILATION COMPLETE. 0 WARNING(S), 0 ERROR(S) diff --git a/Keil_C/List/sc92f_adc.lst b/Keil_C/List/sc92f_adc.lst new file mode 100644 index 0000000..506218d --- /dev/null +++ b/Keil_C/List/sc92f_adc.lst @@ -0,0 +1,535 @@ +C51 COMPILER V9.59.0.0 SC92F_ADC 01/18/2024 10:03:13 PAGE 1 + + +C51 COMPILER V9.59.0.0, COMPILATION OF MODULE SC92F_ADC +OBJECT MODULE PLACED IN ..\Output\sc92f_adc.obj +COMPILER INVOKED BY: D:\Keil_v5\C51\BIN\C51.EXE ..\FWLib\SC92F_Lib\src\sc92f_adc.c LARGE OBJECTADVANCED OPTIMIZE(8,SIZE) + - BROWSE INCDIR(..\FWLib\SC92F_Lib\inc;..\User;..\Apps;..\Apps;..\User) DEFINE(SC92F836xB) DEBUG PRINT(..\List\sc92f_adc. + -lst) OBJECT(..\Output\sc92f_adc.obj) + +line level source + + 1 //************************************************************ + 2 // Copyright (c) 深圳市赛元微电子有限公司 + 3 // 文件名称: sc92f_adc.c + 4 // 作者: 赛元应用团队 + 5 // 模块功能: ADC固件库函数C文件 + 6 // 最后更正日期: 2022年3月23日 + 7 // 版本: V1.10005 + 8 // 说明: + 9 //************************************************************* + 10 + 11 /* 头文件引用 */ + 12 #include "sc92f_adc.h" + 13 + 14 #if !defined(SC92F827X) && !defined(SC92F837X) + 15 /************************************************** + 16 *函数名称:void ADC_DeInit(void) + 17 *函数功能:ADC相关寄存器复位至缺省值 + 18 *入口参数:void + 19 *出口参数:void + 20 **************************************************/ + 21 void ADC_DeInit(void) + 22 { + 23 1 ADCCON = 0x00; + 24 1 ADCCFG0 = 0X00; + 25 1 ADCCFG1 = 0X00; + 26 1 #if defined(SC92F854x) || defined(SC92F754x) || defined(SC92F844xB) || defined(SC92F744xB) || defined(SC92 + -F84Ax_2) || defined(SC92F74Ax_2)\ + 27 1 || defined(SC92F846xB) || defined(SC92F746xB) || defined(SC92F836xB) || defined(SC92F736xB) || defined(SC + -92F84Ax) || defined(SC92F74Ax)\ + 28 1 || defined(SC92F83Ax) || defined(SC92F73Ax) || defined(SC92F848x) || defined(SC92F748x) || defined (SC92F + -859x) || defined (SC92F759x)\ + 29 1 || defined (SC92L853x) || defined (SC92L753x) + 30 1 ADCCFG2 = 0X00; + 31 1 #endif + 32 1 ADCVL = 0X00; + 33 1 ADCVH = 0X00; + 34 1 EADC = 0; + 35 1 IPADC = 0; + 36 1 } + 37 + 38 /************************************************** + 39 *函数名称:void ADC_Init(ADC_PresSel_TypeDef ADC_PrescalerSelection, ADC_Cycle_TypeDef ADC_Cycle) + 40 *函数功能:ADC初始化配置函数 + 41 *入口参数: + 42 ADC_PresSel_TypeDef:ADC_PrescalerSelection:预分频选择 + 43 ADC_Cycle_TypeDef:ADC_Cycle:采样时钟周期选择 + 44 *出口参数:void + 45 **************************************************/ + 46 #if defined(SC92F854x) || defined(SC92F754x) || defined(SC92F844xB) || defined(SC92F744xB) || defined(SC92 + -F84Ax_2) || defined(SC92F74Ax_2)\ + 47 || defined(SC92F846xB) || defined(SC92F746xB) || defined(SC92F836xB) || defined(SC92F736xB) || defined(SC + -92F84Ax) || defined(SC92F74Ax)\ + 48 || defined(SC92F83Ax) || defined(SC92F73Ax) || defined(SC92FWxx) || defined(SC92F848x) || defined(SC92F74 + C51 COMPILER V9.59.0.0 SC92F_ADC 01/18/2024 10:03:13 PAGE 2 + + -8x)\ + 49 || defined (SC92F859x) || defined (SC92F759x) + 50 void ADC_Init(ADC_PresSel_TypeDef ADC_PrescalerSelection, + 51 ADC_Cycle_TypeDef ADC_Cycle) + 52 { + 53 1 /* 配置ADC时钟分频和采样周期 */ + 54 1 ADCCFG2 = ADC_PrescalerSelection | ADC_Cycle; + 55 1 } + 56 #elif defined(SC92F7003) || defined(SC92F8003) || defined(SC92F740x) + void ADC_Init(ADC_PresSel_TypeDef ADC_PrescalerSelection, + ADC_Cycle_TypeDef ADC_Cycle) + { + /* 配置ADC时钟分频和采样周期 */ + ADCCFG1 = ADC_PrescalerSelection | ADC_Cycle; + } + #elif defined(SC92F742x) || defined(SC92F725X) || defined(SC92F735X) || defined(SC92F730x) || defined(SC92 + -F732X) || defined(SC92F7490)\ + || defined(SC93F833x) || defined(SC93F843x) || defined(SC93F743x) + void ADC_Init(ADC_PresSel_TypeDef ADC_PrescalerSelection, + ADC_Cycle_TypeDef ADC_Cycle) + { + ADC_Cycle = 0; //SC92F742x无此功能 + /* 配置ADC时钟分频 */ + ADCCON = (ADCCON & 0xDF) | ADC_PrescalerSelection; + } + #elif defined (SC92L853x) || defined (SC92L753x) + void ADC_Init(ADC_PresSel_TypeDef ADC_PrescalerSelection, ADC_Cycle_TypeDef ADC_Cycle) + { + ADC_Cycle = 0x00; //该入参在92L系列无效 + /* 配置ADC时钟分频 */ + ADCCFG2 = ADC_PrescalerSelection; + } + #endif + 80 + 81 /************************************************** + 82 *函数名称:void ADC_ChannelConfig(ADC_Channel_TypeDef ADC_Channel, FunctionalState NewState) + 83 *函数功能:ADC输入口配置函数,并且使能相关功能 + 84 *入口参数: + 85 ADC_Channel_TypeDef:ADC_Channel:ADC输入口选择 + 86 FunctionalState:NewState:ADCx使能/关闭选择 + 87 *出口参数:void + 88 **************************************************/ + 89 #if defined(SC92F854x) || defined(SC92F754x) || defined(SC92F844xB) || defined(SC92F744xB) || defined(SC92 + -F84Ax_2) || defined(SC92F74Ax_2)\ + 90 || defined(SC92F846xB) || defined(SC92F746xB) || defined(SC92F836xB) || defined(SC92F736xB) || defined(S + -C92F84Ax) || defined(SC92F74Ax)\ + 91 || defined(SC92F83Ax) || defined(SC92F73Ax) || defined(SC92FWxx) || defined(SC92F848x) || defined(SC92F7 + -48x)\ + 92 || defined(SC92F859x) || defined(SC92F759x) || defined (SC92L853x) || defined (SC92L753x) + 93 void ADC_ChannelConfig(ADC_Channel_TypeDef ADC_Channel, FunctionalState NewState) + 94 { + 95 1 uint16_t TempReg; + 96 1 /* 配置ADC转换通道 */ + 97 1 ADCCON = (ADCCON & 0XE0) | ADC_Channel; + 98 1 + 99 1 /* 配置ADC外部采样通道 */ + 100 1 if (ADC_Channel < ADC_CHANNEL_VDD_D4) //内部采样通道无需配置 + 101 1 { + 102 2 TempReg = (0x0001 << ADC_Channel); + 103 2 if (NewState == DISABLE)// 使能ADC采样通道 + 104 2 { + 105 3 ADCCFG0 &= (~(uint8_t)TempReg); + C51 COMPILER V9.59.0.0 SC92F_ADC 01/18/2024 10:03:13 PAGE 3 + + 106 3 ADCCFG1 &= (~(uint8_t)(TempReg >> 8)); + 107 3 } + 108 2 else // 失能ADC采样通道 + 109 2 { + 110 3 ADCCFG0 |= ((uint8_t)TempReg); + 111 3 ADCCFG1 |= ((uint8_t)(TempReg >> 8)); + 112 3 } + 113 2 } + 114 1 } + 115 #elif defined(SC92F7003) || defined(SC92F8003) || defined(SC92F740x) || defined(SC92F7490) + void ADC_ChannelConfig(ADC_Channel_TypeDef ADC_Channel, FunctionalState NewState) + { + uint8_t TempReg; + /* 配置ADC转换通道 */ + ADCCON = (ADCCON & 0xE0) | ADC_Channel; + + /* 配置ADC采样通道 */ + if (ADC_Channel < ADC_CHANNEL_VDD_D4) //内部采样通道无需配置 + { + TempReg = (0x01 << ADC_Channel); + if (ADC_Channel < ADC_CHANNEL_VDD_D4) + { + if (NewState == DISABLE) //失能ADC采样通道 + { + ADCCFG0 &= (~TempReg); + } + else //使能ADC采样通道 + { + ADCCFG0 |= TempReg; + } + } + } + } + #elif defined(SC92F742x) || defined(SC92F730x) || defined(SC92F725X) || defined(SC92F735X) || defined(SC92 + -F732X) + void ADC_ChannelConfig(ADC_Channel_TypeDef ADC_Channel, FunctionalState NewState) + { + uint16_t TempReg; + /* 配置ADC转换通道 */ + ADCCON = (ADCCON & 0xF0) | ADC_Channel; + + /* 配置ADC采样通道 */ + if (ADC_Channel < ADC_CHANNEL_VDD_D4) //内部采样通道无需配置 + { + TempReg = (0x0001 << ADC_Channel); + if (NewState == DISABLE) + { + ADCCFG0 &= (~(uint8_t)TempReg); + ADCCFG1 &= (~(uint8_t)(TempReg >> 8)); + } + else + { + ADCCFG0 |= ((uint8_t)TempReg); + ADCCFG1 |= ((uint8_t)(TempReg >> 8)); + } + } + } + #elif defined(SC93F833x) || defined(SC93F843x) || defined(SC93F743x) + void ADC_ChannelConfig(ADC_Channel_TypeDef ADC_Channel, FunctionalState NewState) + { + uint16_t TempReg; + /* 配置ADC转换通道 */ + C51 COMPILER V9.59.0.0 SC92F_ADC 01/18/2024 10:03:13 PAGE 4 + + ADCCON = (ADCCON & 0xF0) | ADC_Channel; + + /* 配置ADC采样通道 */ + if (ADC_Channel < ADC_CHANNEL_Temp) //配置外部采样通道 + { + TempReg = (0x0001 << ADC_Channel); + if (NewState == DISABLE) + { + ADCCFG0 &= (~(uint8_t)TempReg); + ADCCFG1 &= (~(uint8_t)(TempReg >> 8)); + } + else + { + ADCCFG0 |= ((uint8_t)TempReg); + ADCCFG1 |= ((uint8_t)(TempReg >> 8)); + } + } + else if (ADC_Channel == ADC_CHANNEL_Temp) //内部温度采样通道 + { + if (NewState == DISABLE) + { + TSCFG &= 0X7F; + } + else + { + /* ADC参考电压选择内部2.4V作为参考 */ + OPINX = 0xC2; + OPREG = OPREG & 0X7F | 0x80; + + TSCFG |= 0x80; + } + } + else if (ADC_Channel == ADC_CHANNEL_9_PGA) //可变增益放大器采样通道 + { + unsigned char code *IFBAddr = 0x3D; + if (NewState == DISABLE) + { + ADCCFG1 &= (~(uint8_t)0x02); //关闭通道9 + PGACON &= 0x7F; //使能PGA + } + /* 读取PGA内部出厂校准值 */ + else + { + ADCCFG1 |= ((uint8_t)0x02); //PGA输入通道与通道9复用,使能通道9 + + IAPADE = 0x01; //指针指向 IFB 区 + PGACFG = *(IFBAddr); //读取校准值 + IAPADE = 0x00; //指针指向 ROM 区 + + PGACON |= 0x80; //使能PGA + } + } + } + #endif + 221 + 222 /************************************************** + 223 *函数名称:void ADC_EAINConfig(uint16_t ADC_Channel, FunctionalState NewState) + 224 *函数功能:将对应的ADC输入口设置为模拟输入模式 + 225 *入口参数: + 226 ADC_EAIN_TypeDef:ADC_EAIN_Select:选择需要设置的ADC口 + 227 FunctionalState:NewState:ADC通道使能/关闭选择 + 228 *出口参数:void + C51 COMPILER V9.59.0.0 SC92F_ADC 01/18/2024 10:03:13 PAGE 5 + + 229 **************************************************/ + 230 void ADC_EAINConfig(uint16_t ADC_EAIN_Select, + 231 FunctionalState NewState) + 232 { + 233 1 if (NewState == DISABLE) + 234 1 { + 235 2 ADCCFG0 &= (~(uint8_t)ADC_EAIN_Select); + 236 2 #if defined (SC92F854x) || defined (SC92F754x) || defined (SC92F844xB) || defined (SC92F744xB) || defined + - (SC92F84Ax_2) || defined (SC92F74Ax_2)\ + 237 2 || defined (SC92F846xB) || defined (SC92F746xB) || defined (SC92F836xB) || defined (SC92F736xB)||defined + - (SC92F84Ax) || defined (SC92F74Ax)\ + 238 2 || defined(SC92F83Ax) || defined(SC92F73Ax) || defined(SC92F848x) || defined(SC92F748x) || defined(SC92F + -859x) || defined (SC92F759x)\ + 239 2 || defined (SC92L853x) || defined (SC92L753x) + 240 2 ADCCFG1 &= (~(uint8_t)(ADC_EAIN_Select >> 8)); + 241 2 #endif + 242 2 } + 243 1 else + 244 1 { + 245 2 ADCCFG0 |= ((uint8_t)ADC_EAIN_Select); + 246 2 #if defined (SC92F854x) || defined (SC92F754x) || defined (SC92F844xB) || defined (SC92F744xB)||defined ( + -SC92F84Ax_2) || defined (SC92F74Ax_2)\ + 247 2 || defined (SC92F846xB) || defined (SC92F746xB) || defined (SC92F836xB) || defined (SC92F736xB) || defin + -ed (SC92F84Ax) || defined (SC92F74Ax)\ + 248 2 || defined(SC92F83Ax) || defined(SC92F73Ax) || defined(SC92F848x) || defined(SC92F748x) || defined(SC92F + -859x) || defined (SC92F759x)\ + 249 2 || defined (SC92L853x) || defined (SC92L753x) + 250 2 ADCCFG1 |= ((uint8_t)(ADC_EAIN_Select >> 8)); + 251 2 #endif + 252 2 } + 253 1 } + 254 /***************************************************** + 255 *函数名称:void ADC_Cmd(FunctionalState NewState) + 256 *函数功能:ADC功能开关函数 + 257 *入口参数: + 258 FunctionalState:NewState:功能启动/关闭选择 + 259 *出口参数:void + 260 *****************************************************/ + 261 void ADC_Cmd(FunctionalState NewState) + 262 { + 263 1 if (NewState == DISABLE) + 264 1 { + 265 2 ADCCON &= 0X7F; + 266 2 } + 267 1 else + 268 1 { + 269 2 ADCCON |= 0x80; + 270 2 } + 271 1 } + 272 + 273 /***************************************************** + 274 *函数名称:uint16_t ADC_GetConversionValue(void) + 275 *函数功能:获得一次AD转换数据 + 276 *入口参数:void + 277 *出口参数:uint16_t + 278 *****************************************************/ + 279 unsigned int ADC_GetConversionValue(void) + 280 { + 281 1 return ((ADCVH << 4) + (ADCVL >> 4)); + 282 1 } + 283 + 284 /***************************************************** + C51 COMPILER V9.59.0.0 SC92F_ADC 01/18/2024 10:03:13 PAGE 6 + + 285 *函数名称:FlagStatus ADC_GetFlagStatus(void) + 286 *函数功能:获得ADC中断标志状态 + 287 *入口参数:void + 288 *出口参数: + 289 FlagStatus:ADC中断标志状态 + 290 *****************************************************/ + 291 FlagStatus ADC_GetFlagStatus(void) + 292 { + 293 1 #if defined (SC92F854x) || defined (SC92F754x) ||defined (SC92F844xB) || defined (SC92F744xB)||defined ( + -SC92F84Ax_2) || defined (SC92F74Ax_2)\ + 294 1 || defined (SC92F846xB) || defined (SC92F746xB) || defined (SC92F836xB) || defined (SC92F736xB)||defined + - (SC92F84Ax) || defined (SC92F74Ax)\ + 295 1 || defined (SC92F83Ax) || defined (SC92F73Ax) || defined (SC92F7003) || defined (SC92F8003) || defined + -(SC92F740x) || defined (SC92FWxx)\ + 296 1 || defined(SC92F848x) || defined(SC92F748x) || defined(SC92F859x) || defined (SC92F759x) || defined (SC92 + -L853x) || defined (SC92L753x) + 297 1 return (bool)(ADCCON & 0x20); + 298 1 #elif defined(SC92F742x) || defined(SC92F730x) || defined(SC92F725X) || defined(SC92F735X) || defined(SC92 + -F732X) || defined(SC92F7490) || defined(SC93F833x) || defined(SC93F843x) || defined(SC93F743x) + return (bool)(ADCCON & 0x10); + #endif + 301 1 } + 302 + 303 /***************************************************** + 304 *函数名称:void ADC_ClearFlag(void) + 305 *函数功能:清除ADC中断标志状态 + 306 *入口参数:void + 307 *出口参数:void + 308 *****************************************************/ + 309 void ADC_ClearFlag(void) + 310 { + 311 1 #if defined(SC92F854x) || defined(SC92F754x) || defined(SC92F844xB) || defined(SC92F744xB) || defined(SC92 + -F84Ax_2) || defined(SC92F74Ax_2)\ + 312 1 || defined(SC92F846xB) || defined(SC92F746xB) || defined(SC92F836xB) || defined(SC92F736xB) || defined(S + -C92F84Ax) || defined(SC92F74Ax)\ + 313 1 || defined(SC92F83Ax) || defined(SC92F73Ax) || defined(SC92F8003) || defined(SC92F740x) || defined(SC92F + -848x) || defined(SC92F748x)\ + 314 1 || defined(SC92F859x) || defined(SC92F759x) || defined (SC92L853x) || defined (SC92L753x) + 315 1 ADCCON &= 0xdf; + 316 1 #endif + 317 1 #if defined(SC92F742x) || defined(SC92F730x) || defined(SC92F725X) || defined(SC92F735X) || defined(SC92F7 + -32X) || defined(SC92F7490) || defined(SC93F833x) || defined(SC93F843x) || defined(SC93F743x) + ADCCON &= 0xef; + #endif + 320 1 } + 321 + 322 #if defined(SC93F833x) || defined(SC93F843x) || defined(SC93F743x) + unsigned int ADC_TS_StandardData = 0x8000; + + /***************************************************** + *函数名称:void ADC_TSCmd(PriorityStatus NewState) + *函数功能:ADC 温度传感器功能开关函数 + *入口参数: + FunctionalState:NewState:功能启动/关闭选择 + *出口参数:void + *****************************************************/ + void ADC_TSCmd(FunctionalState NewState) + { + if (NewState == DISABLE) + { + TSCFG &= 0X7F; + } + C51 COMPILER V9.59.0.0 SC92F_ADC 01/18/2024 10:03:13 PAGE 7 + + else + { + TSCFG |= 0X80; + } + } + + /***************************************************** + *函数名称:void ADC_CHOPConfig(PriorityStatus NewState) + *函数功能:拉高或者拉低抵消offset的应用控制位 + *入口参数: + PriorityStatus:NewState:温度传感器高/低选择 + *出口参数:void + *****************************************************/ + void ADC_CHOPConfig(PriorityStatus NewState) + { + if (NewState == LOW) + { + TSCFG &= 0XFE; + } + else + { + TSCFG |= 0x01; + } + } + + /***************************************************** + *函数名称:void ADC_CHOPConfig(PriorityStatus NewState) + *函数功能:获取出厂时ADC 25度时的转换值 + *入口参数:void + *出口参数:void + *****************************************************/ + uint16_t ADC_Get_TS_StandardData(void) + { + unsigned int code *IFBAddr = 0x3E; + IAPADE = 0x01; //指针指向 IFB 区 + ADC_TS_StandardData = *(IFBAddr); + IAPADE = 0x00; //指针指向 ROM 区 + return ADC_TS_StandardData; + } + + /***************************************************** + *函数名称:void ADC_GetTSValue(void) + *函数功能:直接获取float类型温度值,获取温度时会关闭中断 + *入口参数:void + *出口参数: + float:温度值 + *****************************************************/ + float ADC_GetTSValue(void) + { + unsigned char EADC_Flag = EADC; //获取EA标志位状态 + unsigned int ADC_Value1 = 0, ADC_Value2 = 0, ADC_Value = 0; + unsigned int code *IFBAddr = 0x3E; + + ADC_Get_TS_StandardData(); + disableInterrupts(); //关闭中断 + ADC_CHOPConfig(LOW); //拉低抵消offset的应用控制位 + ADC_StartConversion(); //开始AD转换 + while(!ADC_GetFlagStatus()); //等待转换完成 + ADC_ClearFlag(); //清除转换标志位 + ADC_Value1 = ADC_GetConversionValue(); //获取第一次AD的转换值 + ADC_CHOPConfig(HIGH); //拉高抵消offset的应用控制位 + ADC_StartConversion(); //开始AD转换 + C51 COMPILER V9.59.0.0 SC92F_ADC 01/18/2024 10:03:13 PAGE 8 + + while(!ADC_GetFlagStatus()); //等待转换完成 + ADC_ClearFlag(); //清除转换标志位 + ADC_Value2 = ADC_GetConversionValue(); //获取第二次AD的转换值 + ADC_Value = (ADC_Value1 + ADC_Value2) / 2; //获取两次AD采样的平均值 + + if (EADC_Flag) //还原加入运算前的EA标志位 + { + enableInterrupts(); + } + return (25 + ((float)ADC_Value - (float)ADC_TS_StandardData) / 8); + } + + /***************************************************** + *函数名称:ADC_PGAConfig(ADC_PGACOM_TypeDef ADC_PGACOM,ADC_PGAGAN_TypeDef ADC_PGAGAN,ADC_PGAIPT_TypeDef ADC + -_PGAIPT) + *函数功能:PGA相关配置 + *入口参数: + ADC_PGACOM_TypeDef:ADC_PGACOM:PGA共模电压选择 + ADC_PGAGAN_TypeDef:ADC_PGAGAN:PGA增益放大倍数 + ADC_PGAIPT_TypeDef:ADC_PGAIPT:PGA同相/反相选择 + *出口参数:void + *****************************************************/ + void ADC_PGAConfig(ADC_PGACOM_TypeDef ADC_PGACOM, ADC_PGAGAN_TypeDef ADC_PGAGAN, ADC_PGAIPT_TypeDef ADC_PG + -AIPT) + { + PGACON &= 0x8F; + PGACON |= (ADC_PGACOM | ADC_PGAGAN | ADC_PGAIPT); + } + + /***************************************************** + *函数名称:void ADC_PGACmd(PriorityStatus NewState) + *函数功能:ADC PGA功能开关函数 + *入口参数: + FunctionalState:NewState:功能启动/关闭选择 + *出口参数:void + *****************************************************/ + void ADC_PGACmd(PriorityStatus NewState) + { + if (NewState == LOW) + { + PGACON &= 0XFE; + } + else + { + PGACON |= 0x01; + } + } + #endif + 446 + 447 + 448 /***************************************************** + 449 *函数名称:void ADC_VrefConfig(ADC_Vref_TypeDef ADC_Vref) + 450 *函数功能:ADC 参考电压选择 + 451 *入口参数: + 452 ADC_Vref_TypeDef:ADC_Vref:选择ADC参考电压 + 453 *出口参数:void + 454 *****************************************************/ + 455 void ADC_VrefConfig(ADC_Vref_TypeDef ADC_Vref) + 456 { + 457 1 OPINX = 0xC2; + 458 1 OPREG = OPREG & 0X7F | ADC_Vref; + 459 1 } + C51 COMPILER V9.59.0.0 SC92F_ADC 01/18/2024 10:03:13 PAGE 9 + + 460 #endif + 461 + 462 /******************* (C) COPYRIGHT 2021 SinOne Microelectronics *****END OF FILE****/ + + +MODULE INFORMATION: STATIC OVERLAYABLE + CODE SIZE = 162 ---- + CONSTANT SIZE = ---- ---- + XDATA SIZE = ---- ---- + PDATA SIZE = ---- ---- + DATA SIZE = ---- ---- + IDATA SIZE = ---- ---- + BIT SIZE = ---- ---- + EDATA SIZE = ---- ---- + HDATA SIZE = ---- ---- + XDATA CONST SIZE = ---- ---- + FAR CONST SIZE = ---- ---- +END OF MODULE INFORMATION. + + +C51 COMPILATION COMPLETE. 0 WARNING(S), 0 ERROR(S) diff --git a/Keil_C/List/sc92f_chksum.lst b/Keil_C/List/sc92f_chksum.lst new file mode 100644 index 0000000..755f619 --- /dev/null +++ b/Keil_C/List/sc92f_chksum.lst @@ -0,0 +1,61 @@ +锘緾51 COMPILER V9.01 SC92F_CHKSUM 09/11/2020 09:49:58 PAGE 1 +C51 COMPILER V9.01, COMPILATION OF MODULE SC92F_CHKSUM +OBJECT MODULE PLACED IN ..\Output\sc92f_chksum.obj +COMPILER INVOKED BY: E:\Keil\C51\BIN\C51.EXE ..\FWLib\SC92F_Lib\src\sc92f_chksum.c OMF2 BROWSE INCDIR(..\FWLib\SC92F_Lib + -\inc;..\User) DEBUG PRINT(..\List\sc92f_chksum.lst) OBJECT(..\Output\sc92f_chksum.obj) +line level source + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 + 11 + 12 #include "sc92f_chksum.h" + 13 + 14 #if defined (SC92F854x) || defined (SC92F754x) ||defined (SC92F844xB) || defined (SC92F744xB)||defined ( + -SC92F84Ax_2) || defined (SC92F74Ax_2)|| defined (SC92F846xB) || defined (SC92F746xB) || defined (SC92F836xB) || defined + -(SC92F736xB) || defined (SC92F8003)|| defined (SC92F742x) + 15 + 21 void CHKSUM_DeInit(void) + 22 { + 23 1 OPERCON &= 0XFE; + 24 1 CHKSUML = 0X00; + 25 1 CHKSUMH = 0X00; + 26 1 } + 27 + 28 + 34 void CHKSUM_StartOperation(void) + 35 { + 36 1 OPERCON |= 0X01; + 37 1 while(OPERCON & 0x01); + 38 1 } + 39 + 40 + 46 uint16_t CHKSUM_GetCheckValue(void) + 47 { + 48 1 uint16_t checktemp; + 49 1 + 50 1 checktemp = (uint16_t)(CHKSUMH << 8)+ (uint16_t)CHKSUML; + 51 1 return checktemp; + 52 1 } + 53 #endif + 54 +MODULE INFORMATION: STATIC OVERLAYABLE + CODE SIZE = 33 ---- + CONSTANT SIZE = ---- ---- + XDATA SIZE = ---- ---- + PDATA SIZE = ---- ---- + DATA SIZE = ---- ---- + IDATA SIZE = ---- ---- + BIT SIZE = ---- ---- + EDATA SIZE = ---- ---- + HDATA SIZE = ---- ---- + XDATA CONST SIZE = ---- ---- + FAR CONST SIZE = ---- ---- +END OF MODULE INFORMATION. +C51 COMPILATION COMPLETE. 0 WARNING(S), 0 ERROR(S) diff --git a/Keil_C/List/sc92f_gpio.lst b/Keil_C/List/sc92f_gpio.lst new file mode 100644 index 0000000..0ee441b --- /dev/null +++ b/Keil_C/List/sc92f_gpio.lst @@ -0,0 +1,603 @@ +C51 COMPILER V9.59.0.0 SC92F_GPIO 01/18/2024 10:03:13 PAGE 1 + + +C51 COMPILER V9.59.0.0, COMPILATION OF MODULE SC92F_GPIO +OBJECT MODULE PLACED IN ..\Output\sc92f_gpio.obj +COMPILER INVOKED BY: D:\Keil_v5\C51\BIN\C51.EXE ..\FWLib\SC92F_Lib\src\sc92f_gpio.c LARGE OBJECTADVANCED OPTIMIZE(8,SIZE + -) BROWSE INCDIR(..\FWLib\SC92F_Lib\inc;..\User;..\Apps;..\Apps;..\User) DEFINE(SC92F836xB) DEBUG PRINT(..\List\sc92f_gpi + -o.lst) OBJECT(..\Output\sc92f_gpio.obj) + +line level source + + 1 //************************************************************ + 2 // Copyright (c) 深圳市赛元微电子有限公司 + 3 // 文件名称 : sc92f_gpio.c + 4 // 作者 : + 5 // 模块功能 : GPIO固件库函数C文件 + 6 // 局部函数列表 : + 7 // 最后更正日期 : 2022/01/11 + 8 // 版本 : V1.10004 + 9 // 说明 : 本文件仅适用于赛元92F/93F/92L系列单片机 + 10 //************************************************************* + 11 + 12 + 13 #include "sc92f_gpio.h" + 14 + 15 /************************************************** + 16 *函数名称:void GPIO_DeInit(void) + 17 *函数功能:GPIO相关寄存器复位至缺省值 + 18 *入口参数:void + 19 *出口参数:void + 20 **************************************************/ + 21 void GPIO_DeInit(void) + 22 { + 23 1 P0CON = 0x00; + 24 1 P0PH = 0x00; + 25 1 P0 = 0; + 26 1 P1CON = 0x00; + 27 1 P1PH = 0x00; + 28 1 P1 = 0; + 29 1 P2CON = 0x00; + 30 1 P2PH = 0x00; + 31 1 P2 = 0; + 32 1 #if defined(SC92F854x) || defined(SC92F754x) || defined(SC92F844xB) || defined(SC92F744xB) || defined(SC92 + -F84Ax_2) || defined(SC92F74Ax_2)\ + 33 1 || defined(SC92FWxx) || defined(SC92F859x) || defined(SC92F759x) + P3CON = 0x00; + P3PH = 0x00; + P3 = 0; + P4CON = 0x00; + P4PH = 0x00; + P4 = 0; + #endif + 41 1 #if !defined(SC92F730x) && !defined(SC92F725X) && !defined(SC92F735X) && !defined(SC92F7003) && !defined(S + -C92F8003) && !defined(SC92F740x) && !defined(SC92F827X) && !defined(SC92F837X) + 42 1 P5CON = 0x00; + 43 1 P5PH = 0x00; + 44 1 P5 = 0; + 45 1 #endif + 46 1 } + 47 + 48 /************************************************** + 49 *函数名称:void GPIO_Init(GPIO_TypeDef GPIOx, uint8_t PortPins, GPIO_Mode_TypeDef GPIO_Mode) + 50 *函数功能:GPIO口模式配置初始化 + 51 *入口参数: + C51 COMPILER V9.59.0.0 SC92F_GPIO 01/18/2024 10:03:13 PAGE 2 + + 52 GPIO_TypeDef:GPIOx:选择操作的GPIO口 + 53 GPIO_Pin_TypeDef:PortPins:选择GPIO管脚Pxy + 54 GPIO_Mode_TypeDef:GPIO_Mode:选择GPIO口模式(高阻输入、上拉输入、推挽输出) + 55 *出口参数:void + 56 **************************************************/ + 57 void GPIO_Init(GPIO_TypeDef GPIOx, + 58 uint8_t PortPins, GPIO_Mode_TypeDef GPIO_Mode) + 59 { + 60 1 if (GPIOx == GPIO0) + 61 1 { + 62 2 if (GPIO_Mode == GPIO_MODE_IN_HI) + 63 2 { + 64 3 P0CON &= ~PortPins; + 65 3 P0PH &= ~PortPins; + 66 3 } + 67 2 + 68 2 if (GPIO_Mode == GPIO_MODE_IN_PU) + 69 2 { + 70 3 P0CON &= ~PortPins; + 71 3 P0PH |= PortPins; + 72 3 } + 73 2 + 74 2 if (GPIO_Mode == GPIO_MODE_OUT_PP) + 75 2 { + 76 3 P0CON |= PortPins; + 77 3 } + 78 2 } + 79 1 else if (GPIOx == GPIO1) + 80 1 { + 81 2 if (GPIO_Mode == GPIO_MODE_IN_HI) + 82 2 { + 83 3 P1CON &= ~PortPins; + 84 3 P1PH &= ~PortPins; + 85 3 } + 86 2 + 87 2 if (GPIO_Mode == GPIO_MODE_IN_PU) + 88 2 { + 89 3 P1CON &= ~PortPins; + 90 3 P1PH |= PortPins; + 91 3 } + 92 2 + 93 2 if (GPIO_Mode == GPIO_MODE_OUT_PP) + 94 2 { + 95 3 P1CON |= PortPins; + 96 3 } + 97 2 } + 98 1 else if (GPIOx == GPIO2) + 99 1 { + 100 2 if (GPIO_Mode == GPIO_MODE_IN_HI) + 101 2 { + 102 3 P2CON &= ~PortPins; + 103 3 P2PH &= ~PortPins; + 104 3 } + 105 2 + 106 2 if (GPIO_Mode == GPIO_MODE_IN_PU) + 107 2 { + 108 3 P2CON &= ~PortPins; + 109 3 P2PH |= PortPins; + 110 3 } + 111 2 + 112 2 if (GPIO_Mode == GPIO_MODE_OUT_PP) + 113 2 { + C51 COMPILER V9.59.0.0 SC92F_GPIO 01/18/2024 10:03:13 PAGE 3 + + 114 3 P2CON |= PortPins; + 115 3 } + 116 2 } + 117 1 + 118 1 #if defined(SC92F854x) || defined(SC92F754x) || defined(SC92F844xB) || defined(SC92F744xB) || defined(SC92 + -F84Ax_2) || defined(SC92F74Ax_2)\ + 119 1 || defined(SC92FWxx) || defined(SC92F859x) || defined(SC92F759x) + else if (GPIOx == GPIO3) + { + if (GPIO_Mode == GPIO_MODE_IN_HI) + { + P3CON &= ~PortPins; + P3PH &= ~PortPins; + } + + if (GPIO_Mode == GPIO_MODE_IN_PU) + { + P3CON &= ~PortPins; + P3PH |= PortPins; + } + + if (GPIO_Mode == GPIO_MODE_OUT_PP) + { + P3CON |= PortPins; + } + } + else if (GPIOx == GPIO4) + { + if (GPIO_Mode == GPIO_MODE_IN_HI) + { + P4CON &= ~PortPins; + P4PH &= ~PortPins; + } + + if (GPIO_Mode == GPIO_MODE_IN_PU) + { + P4CON &= ~PortPins; + P4PH |= PortPins; + } + + if (GPIO_Mode == GPIO_MODE_OUT_PP) + { + P4CON |= PortPins; + } + } + + #endif + 160 1 #if !defined(SC92F730x) && !defined(SC92F725X) && !defined(SC92F735X) && !defined(SC92F7003) && !defined(S + -C92F8003) && !defined(SC92F740x) && !defined(SC92F827X) && !defined(SC92F837X) + 161 1 else if (GPIOx == GPIO5) + 162 1 { + 163 2 if (GPIO_Mode == GPIO_MODE_IN_HI) + 164 2 { + 165 3 P5CON &= ~PortPins; + 166 3 P5PH &= ~PortPins; + 167 3 } + 168 2 + 169 2 if (GPIO_Mode == GPIO_MODE_IN_PU) + 170 2 { + 171 3 P5CON &= ~PortPins; + 172 3 P5PH |= PortPins; + 173 3 } + C51 COMPILER V9.59.0.0 SC92F_GPIO 01/18/2024 10:03:13 PAGE 4 + + 174 2 + 175 2 if (GPIO_Mode == GPIO_MODE_OUT_PP) + 176 2 { + 177 3 P5CON |= PortPins; + 178 3 } + 179 2 } + 180 1 + 181 1 #endif + 182 1 } + 183 + 184 /************************************************** + 185 *函数名称:void GPIO_Write(GPIO_TypeDef GPIOx, uint8_t PortVal) + 186 *函数功能:GPIO口赋值 + 187 *入口参数: + 188 GPIO_TypeDef:GPIOx:选择操作的GPIO口 + 189 uint8_t:PortVal:GPIO口的值 + 190 *出口参数:void + 191 **************************************************/ + 192 void GPIO_Write(GPIO_TypeDef GPIOx, + 193 uint8_t PortVal) + 194 { + 195 1 if (GPIOx == GPIO0) + 196 1 { + 197 2 P0 = PortVal; + 198 2 } + 199 1 + 200 1 if (GPIOx == GPIO1) + 201 1 { + 202 2 P1 = PortVal; + 203 2 } + 204 1 + 205 1 if (GPIOx == GPIO2) + 206 1 { + 207 2 P2 = PortVal; + 208 2 } + 209 1 + 210 1 #if defined(SC92F854x) || defined(SC92F754x) || defined(SC92F844xB) || defined(SC92F744xB) || defined(SC92 + -F84Ax_2) || defined(SC92F74Ax_2)\ + 211 1 || defined(SC92FWxx) || defined(SC92F859x) || defined(SC92F759x) + + if (GPIOx == GPIO3) + { + P3 = PortVal; + } + + if (GPIOx == GPIO4) + { + P4 = PortVal; + } + + #endif + 224 1 #if !defined(SC92F730x) && !defined(SC92F725X) && !defined(SC92F735X) && !defined(SC92F8003) && !defined(S + -C92F740x) && !defined(SC92F827X) && !defined(SC92F837X) && !defined(SC92F7003) + 225 1 + 226 1 if (GPIOx == GPIO5) + 227 1 { + 228 2 P5 = PortVal; + 229 2 } + 230 1 + 231 1 #endif + 232 1 } + 233 + C51 COMPILER V9.59.0.0 SC92F_GPIO 01/18/2024 10:03:13 PAGE 5 + + 234 /************************************************** + 235 *函数名称:void GPIO_WriteHigh(GPIO_TypeDef GPIOx, uint8_t PortPins) + 236 *函数功能:GPIO口管脚Pxy置位 + 237 *入口参数: + 238 GPIO_TypeDef:GPIOx:选择操作的GPIO口 + 239 GPIO_Pin_TypeDef:PortPins:选择GPIO口管脚Pxy + 240 *出口参数:void + 241 **************************************************/ + 242 void GPIO_WriteHigh(GPIO_TypeDef GPIOx, + 243 uint8_t PortPins) + 244 { + 245 1 if (GPIOx == GPIO0) + 246 1 { + 247 2 P0 |= PortPins; + 248 2 } + 249 1 + 250 1 if (GPIOx == GPIO1) + 251 1 { + 252 2 P1 |= PortPins; + 253 2 } + 254 1 + 255 1 if (GPIOx == GPIO2) + 256 1 { + 257 2 P2 |= PortPins; + 258 2 } + 259 1 + 260 1 #if defined(SC92F854x) || defined(SC92F754x) || defined(SC92F844xB) || defined(SC92F744xB) || defined(SC92 + -F84Ax_2) || defined(SC92F74Ax_2)\ + 261 1 || defined(SC92FWxx) || defined(SC92F859x) || defined(SC92F759x) + - + + if (GPIOx == GPIO3) + { + P3 |= PortPins; + } + + if (GPIOx == GPIO4) + { + P4 |= PortPins; + } + + #endif + 274 1 #if !defined(SC92F730x) && !defined(SC92F725X) && !defined(SC92F735X) && !defined(SC92F8003) && !defined(S + -C92F740x) && !defined(SC92F827X) && !defined(SC92F837X) && !defined(SC92F7003) + 275 1 + 276 1 if (GPIOx == GPIO5) + 277 1 { + 278 2 P5 |= PortPins; + 279 2 } + 280 1 + 281 1 #endif + 282 1 } + 283 + 284 /************************************************** + 285 *函数名称:void GPIO_WriteLow(GPIO_TypeDef GPIOx, uint8_t PortPins) + 286 *函数功能:GPIO口管脚Pxy复位 + 287 *入口参数: + 288 GPIO_TypeDef:GPIOx:选择操作的GPIO口 + 289 GPIO_Pin_TypeDef:PortPins:选择GPIO口管脚Pxy + 290 *出口参数:void + 291 **************************************************/ + 292 void GPIO_WriteLow(GPIO_TypeDef GPIOx, + C51 COMPILER V9.59.0.0 SC92F_GPIO 01/18/2024 10:03:13 PAGE 6 + + 293 uint8_t PortPins) + 294 { + 295 1 if (GPIOx == GPIO0) + 296 1 { + 297 2 P0 &= ~PortPins; + 298 2 } + 299 1 + 300 1 if (GPIOx == GPIO1) + 301 1 { + 302 2 P1 &= ~PortPins; + 303 2 } + 304 1 + 305 1 if (GPIOx == GPIO2) + 306 1 { + 307 2 P2 &= ~PortPins; + 308 2 } + 309 1 + 310 1 #if defined(SC92F854x) || defined(SC92F754x) || defined(SC92F844xB) || defined(SC92F744xB) || defined(SC92 + -F84Ax_2) || defined(SC92F74Ax_2)\ + 311 1 || defined(SC92FWxx) || defined(SC92F859x) || defined(SC92F759x) + + if (GPIOx == GPIO3) + { + P3 &= ~PortPins; + } + + if (GPIOx == GPIO4) + { + P4 &= ~PortPins; + } + + #endif + 324 1 #if !defined(SC92F730x) && !defined(SC92F725X) && !defined(SC92F735X) && !defined(SC92F8003) && !defined(S + -C92F740x) && !defined(SC92F827X) && !defined(SC92F837X) && !defined(SC92F7003) + 325 1 + 326 1 if (GPIOx == GPIO5) + 327 1 { + 328 2 P5 &= ~PortPins; + 329 2 } + 330 1 + 331 1 #endif + 332 1 } + 333 + 334 /************************************************** + 335 *函数名称:uint8_t GPIO_ReadPort(GPIO_TypeDef GPIOx) + 336 *函数功能:读GPIO口Px的值 + 337 *入口参数: + 338 GPIO_TypeDef:GPIOx:选择操作的GPIO口 + 339 *出口参数:uint8_t 返回Px的值 + 340 **************************************************/ + 341 uint8_t GPIO_ReadPort(GPIO_TypeDef GPIOx) + 342 { + 343 1 if (GPIOx == GPIO0) + 344 1 { + 345 2 return P0; + 346 2 } + 347 1 else if (GPIOx == GPIO1) + 348 1 { + 349 2 return P1; + 350 2 } + 351 1 else if (GPIOx == GPIO2) + 352 1 { + C51 COMPILER V9.59.0.0 SC92F_GPIO 01/18/2024 10:03:13 PAGE 7 + + 353 2 return P2; + 354 2 } + 355 1 + 356 1 #if defined(SC92F854x) || defined(SC92F754x) || defined(SC92F844xB) || defined(SC92F744xB) || defined(SC92 + -F84Ax_2) || defined(SC92F74Ax_2)\ + 357 1 || defined(SC92FWxx) || defined(SC92F859x) || defined(SC92F759x) + else if (GPIOx == GPIO3) + { + return P3; + } + else if (GPIOx == GPIO4) + { + return P4; + } + + #endif + 368 1 #if !defined(SC92F730x) && !defined(SC92F725X) && !defined(SC92F735X) && !defined(SC92F8003) && !defined(S + -C92F740x) && !defined(SC92F827X) && !defined(SC92F837X) && !defined(SC92F7003) + 369 1 else if (GPIOx == GPIO5) + 370 1 { + 371 2 return P5; + 372 2 } + 373 1 + 374 1 #endif + 375 1 else + 376 1 { + 377 2 return 0; + 378 2 } + 379 1 } + 380 + 381 /************************************************** + 382 *函数名称:BitStatus GPIO_ReadPin(GPIO_TypeDef GPIOx, uint8_t PortPins) + 383 *函数功能:读GPIO口管脚Pxy的值 + 384 *入口参数: + 385 GPIO_TypeDef:GPIOx:选择操作的GPIO口 + 386 GPIO_Pin_TypeDef:PortPins:选择GPIO口管脚Pxy + 387 *出口参数:BitStatus 返回Pxy的值 + 388 **************************************************/ + 389 BitStatus GPIO_ReadPin(GPIO_TypeDef GPIOx, + 390 uint8_t PortPins) + 391 { + 392 1 if (GPIOx == GPIO0) + 393 1 { + 394 2 return ((bit)(P0 & PortPins)); + 395 2 } + 396 1 else if (GPIOx == GPIO1) + 397 1 { + 398 2 return ((bit)(P1 & PortPins)); + 399 2 } + 400 1 else if (GPIOx == GPIO2) + 401 1 { + 402 2 return ((bit)(P2 & PortPins)); + 403 2 } + 404 1 + 405 1 #if defined(SC92F854x) || defined(SC92F754x) || defined(SC92F844xB) || defined(SC92F744xB) || defined(SC92 + -F84Ax_2) || defined(SC92F74Ax_2)\ + 406 1 || defined(SC92FWxx) || defined(SC92F859x) || defined(SC92F759x) + else if (GPIOx == GPIO3) + { + return ((bit)(P3 & PortPins)); + } + else if (GPIOx == GPIO4) + C51 COMPILER V9.59.0.0 SC92F_GPIO 01/18/2024 10:03:13 PAGE 8 + + { + return ((bit)(P4 & PortPins)); + } + + #endif + 417 1 #if !defined(SC92F730x) && !defined(SC92F725X) && !defined(SC92F735X) && !defined(SC92F8003) && !defined(S + -C92F740x) && !defined(SC92F827X) && !defined(SC92F837X) && !defined(SC92F7003) + 418 1 else if (GPIOx == GPIO5) + 419 1 { + 420 2 return ((bit)(P5 & PortPins)); + 421 2 } + 422 1 + 423 1 #endif + 424 1 return 0; + 425 1 } + 426 + 427 + 428 /************************************************** + 429 *函数名称:void GPIO_IOH_Config(GPIO_TypeDef GPIOx, uint8_t PortPins,GPIO_IOH_Grade_TypeDef GPIO_IOH_Grade) + 430 *函数功能:设置GPIO口管脚IOH输出能力 + 431 *入口参数: + 432 GPIO_TypeDef:GPIOx:选择操作的GPIO口 + 433 GPIO_Pin_TypeDef:PortPins:选择GPIO口管脚Pxy + 434 GPIO_IOH_Grade_TypeDef:GPIO_IOH_Grade:IO输出等级 + 435 *出口参数:BitStatus 返回Pxy的值 + 436 **************************************************/ + 437 #if !defined(SC92F7003) && !defined(SC92F8003) && !defined(SC92F740x) + 438 void GPIO_IOH_Config(GPIO_TypeDef GPIOx, GPIO_Pin_TypeDef PortPins, GPIO_IOH_Grade_TypeDef GPIO_IOH_Grade) + 439 { + 440 1 #if defined(SC92F854x) || defined(SC92F754x) || defined(SC92F844xB) || defined(SC92F744xB) || defined(SC92 + -F84Ax_2) || defined(SC92F74Ax_2)\ + 441 1 || defined(SC92FWxx) || defined(SC92F859x) || defined(SC92F759x) || defined (SC92L853x) || defined (SC92 + -L753x) + switch (GPIOx) + { + case GPIO0: + if (PortPins == GPIO_PIN_LNIB) + { + IOHCON0 &= 0xFC; + IOHCON0 |= GPIO_IOH_Grade; + } + else if (PortPins == GPIO_PIN_HNIB) + { + IOHCON0 &= 0xF3; + IOHCON0 |= GPIO_IOH_Grade << 2; + } + break; + case GPIO1: + if (PortPins == GPIO_PIN_LNIB) + { + IOHCON0 &= 0xCF; + IOHCON0 |= GPIO_IOH_Grade << 4; + } + else if (PortPins == GPIO_PIN_HNIB) + { + IOHCON0 &= 0x3F; + IOHCON0 |= GPIO_IOH_Grade << 6; + } + break; + case GPIO2: + if (PortPins == GPIO_PIN_LNIB) + { + C51 COMPILER V9.59.0.0 SC92F_GPIO 01/18/2024 10:03:13 PAGE 9 + + IOHCON1 &= 0xFC; + IOHCON1 |= GPIO_IOH_Grade; + } + else if (PortPins == GPIO_PIN_HNIB) + { + IOHCON1 &= 0xF3; + IOHCON1 |= GPIO_IOH_Grade << 2; + } + break; + #if defined (SC92L853x) || defined (SC92L753x) + case GPIO5: + if (PortPins == GPIO_PIN_LNIB) + { + IOHCON1 &= 0xCF; + IOHCON1 |= GPIO_IOH_Grade << 4; + } + else if (PortPins == GPIO_PIN_HNIB) + { + IOHCON1 &= 0x3f; + IOHCON1 |= GPIO_IOH_Grade << 6; + } + break; + #else + case GPIO3: + if (PortPins == GPIO_PIN_LNIB) + { + IOHCON1 &= 0xCF; + IOHCON1 |= GPIO_IOH_Grade << 4; + } + break; + #endif + default: + break; + } + #else + 506 1 switch (GPIOx) + 507 1 { + 508 2 case GPIO0: + 509 2 if (PortPins == GPIO_PIN_LNIB) + 510 2 { + 511 3 IOHCON &= 0xFC; + 512 3 IOHCON |= GPIO_IOH_Grade; + 513 3 } + 514 2 else if (PortPins == GPIO_PIN_HNIB) + 515 2 { + 516 3 IOHCON &= 0xF3; + 517 3 IOHCON |= GPIO_IOH_Grade << 2; + 518 3 } + 519 2 break; + 520 2 case GPIO2: + 521 2 if (PortPins == GPIO_PIN_LNIB) + 522 2 { + 523 3 IOHCON &= 0xFC; + 524 3 IOHCON |= GPIO_IOH_Grade; + 525 3 } + 526 2 else if (PortPins == GPIO_PIN_HNIB) + 527 2 { + 528 3 IOHCON &= 0xF3; + 529 3 IOHCON |= GPIO_IOH_Grade << 2; + 530 3 } + 531 2 break; + 532 2 default: + C51 COMPILER V9.59.0.0 SC92F_GPIO 01/18/2024 10:03:13 PAGE 10 + + 533 2 break; + 534 2 } + 535 1 #endif + 536 1 } + 537 #endif + 538 + 539 /******************* (C) COPYRIGHT 2021 SinOne Microelectronics *****END OF FILE****/ + + +MODULE INFORMATION: STATIC OVERLAYABLE + CODE SIZE = 541 ---- + CONSTANT SIZE = ---- ---- + XDATA SIZE = ---- ---- + PDATA SIZE = ---- ---- + DATA SIZE = ---- ---- + IDATA SIZE = ---- ---- + BIT SIZE = ---- ---- + EDATA SIZE = ---- ---- + HDATA SIZE = ---- ---- + XDATA CONST SIZE = ---- ---- + FAR CONST SIZE = ---- ---- +END OF MODULE INFORMATION. + + +C51 COMPILATION COMPLETE. 0 WARNING(S), 0 ERROR(S) diff --git a/Keil_C/List/sc92f_option.lst b/Keil_C/List/sc92f_option.lst new file mode 100644 index 0000000..4086911 --- /dev/null +++ b/Keil_C/List/sc92f_option.lst @@ -0,0 +1,217 @@ +C51 COMPILER V9.59.0.0 SC92F_OPTION 01/18/2024 10:03:13 PAGE 1 + + +C51 COMPILER V9.59.0.0, COMPILATION OF MODULE SC92F_OPTION +OBJECT MODULE PLACED IN ..\Output\sc92f_option.obj +COMPILER INVOKED BY: D:\Keil_v5\C51\BIN\C51.EXE ..\FWLib\SC92F_Lib\src\sc92f_option.c LARGE OBJECTADVANCED OPTIMIZE(8,SI + -ZE) BROWSE INCDIR(..\FWLib\SC92F_Lib\inc;..\User;..\Apps;..\Apps;..\User) DEFINE(SC92F836xB) DEBUG PRINT(..\List\sc92f_o + -ption.lst) OBJECT(..\Output\sc92f_option.obj) + +line level source + + 1 //************************************************************ + 2 // Copyright (c) 深圳市赛元微电子有限公司 + 3 // 文件名称 : sc92f_option.c + 4 // 作者 : + 5 // 模块功能 : Customer Option寄存器配置C文件 + 6 // 局部函数列表: + 7 // 最后更正日期: 2022/01/24 + 8 // 版本 : V1.0005 + 9 // 说明 : + 10 //************************************************************* + 11 + 12 #include "sc92f_option.h" + 13 + 14 /***************************************************** + 15 *函数名称:void OPTION_WDT_Cmd(FunctionalState NewState) + 16 *函数功能:WDT功能开关函数 + 17 *入口参数: + 18 FunctionalState:NewState:功能启动/关闭选择 + 19 *出口参数:void + 20 *****************************************************/ + 21 void OPTION_WDT_Cmd(FunctionalState NewState) + 22 { + 23 1 OPINX = 0XC1; + 24 1 + 25 1 if(NewState == DISABLE) + 26 1 { + 27 2 OPREG &= 0X7F; + 28 2 } + 29 1 else + 30 1 { + 31 2 OPREG |= 0X80; + 32 2 } + 33 1 } + 34 + 35 /***************************************************** + 36 *函数名称:void OPTION_XTIPLL_Cmd(FunctionalState NewState) + 37 *函数功能:外接晶振使能 + 38 *入口参数: + 39 FunctionalState:NewState:启动/关闭选择 + 40 *出口参数:void + 41 *****************************************************/ + 42 #if !defined(SC92F848x) && !defined(SC92F748x) + 43 void OPTION_XTIPLL_Cmd(FunctionalState NewState) + 44 { + 45 1 OPINX = 0XC1; + 46 1 + 47 1 if(NewState == DISABLE) + 48 1 { + 49 2 OPREG &= 0XBF; + 50 2 } + 51 1 else + 52 1 { + 53 2 OPREG |= 0X40; + C51 COMPILER V9.59.0.0 SC92F_OPTION 01/18/2024 10:03:13 PAGE 2 + + 54 2 } + 55 1 } + 56 #endif + 57 /***************************************************** + 58 *函数名称:void OPTION_SYSCLK_Init(SYSCLK_PresSel_TypeDef SYSCLK_PresSel) + 59 *函数功能:系统时钟分频初始化 + 60 *入口参数: + 61 SYSCLK_PresSel_TypeDef:SYSCLK_PresSel:选择系统时钟分频 + 62 *出口参数:void + 63 *****************************************************/ + 64 void OPTION_SYSCLK_Init(SYSCLK_PresSel_TypeDef + 65 SYSCLK_PresSel) + 66 { + 67 1 OPINX = 0XC1; + 68 1 OPREG = OPREG & 0XCF | SYSCLK_PresSel; + 69 1 } + 70 + 71 /***************************************************** + 72 *函数名称:void OPTION_RST_PIN_Cmd(FunctionalState NewState) + 73 *函数功能:外部复位管脚(P17)使能 + 74 *入口参数: + 75 FunctionalState:NewState:使能/关闭选择 + 76 *出口参数:void + 77 *****************************************************/ + 78 #if !defined(SC92F848x) && !defined(SC92F748x) && !defined(SC92F859x) && !defined (SC92F759x) && !define + -d(SC92L853x) && !defined (SC92L753x) + 79 void OPTION_RST_PIN_Cmd(FunctionalState NewState) + 80 { + 81 1 OPINX = 0XC1; + 82 1 + 83 1 if(NewState == DISABLE) + 84 1 { + 85 2 OPREG |= 0X08; + 86 2 } + 87 1 else + 88 1 { + 89 2 OPREG &= 0XF7; + 90 2 } + 91 1 } + 92 #endif + 93 + 94 /***************************************************** + 95 *函数名称:void OPTION_LVR_Init(LVR_Config_TypeDef LVR_Config) + 96 *函数功能:LVR 电压选择 + 97 *入口参数: + 98 LVR_Config_TypeDef:LVR_Config:选择LVR电压 + 99 *出口参数:void + 100 *****************************************************/ + 101 void OPTION_LVR_Init(LVR_Config_TypeDef + 102 LVR_Config) + 103 { + 104 1 OPINX = 0XC1; + 105 1 OPREG = OPREG & 0XF8 | LVR_Config; + 106 1 } + 107 + 108 /***************************************************** + 109 *函数名称:void OPTION_ADC_VrefConfig(ADC_Vref_TypeDef ADC_Vref) + 110 *函数功能:ADC 参考电压选择 + 111 *入口参数: + 112 ADC_Vref_TypeDef:ADC_Vref:选择ADC参考电压 + 113 *出口参数:void + 114 *****************************************************/ + C51 COMPILER V9.59.0.0 SC92F_OPTION 01/18/2024 10:03:13 PAGE 3 + + 115 void OPTION_ADC_VrefConfig(ADC_Vref_TypeDef + 116 ADC_Vref) + 117 { + 118 1 OPINX = 0xC2; + 119 1 OPREG = OPREG & 0X7F | ADC_Vref; + 120 1 } + 121 + 122 /************************************************** + 123 *函数名称:void OPTION_IAP_SetOperateRange(IAP_OperateRange_TypeDef IAP_OperateRange) + 124 *函数功能:允许IAP操作的范围设置 + 125 *入口参数: + 126 IAP_OperateRange_TypeDef:IAP_OperateRange:IAP操作范围 + 127 *出口参数:void + 128 **************************************************/ + 129 void OPTION_IAP_SetOperateRange( + 130 IAP_OperateRange_TypeDef IAP_OperateRange) + 131 { + 132 1 OPINX = 0xC2; + 133 1 OPREG = (OPREG & 0xF3) | IAP_OperateRange; + 134 1 } + 135 + 136 #if defined (SC92F846xB) || defined (SC92F746xB) || defined (SC92F836xB) || defined (SC92F736xB)|| defined + - (SC92F83Ax)\ + 137 || defined (SC92F73Ax) || defined (SC92F84Ax) || defined (SC92F74Ax) || defined (SC92F740x)\ + 138 || defined (SC92F8003) || defined (SC92F7003) + 139 /***************************************************** + 140 *函数名称:void OPTION_XTIPLL_SetRange(XTIPLL_Range_TypeDef XTIPLL_Range) + 141 *函数功能:外部高频晶振频率范围 + 142 *入口参数: + 143 XTIPLL_Range_TypeDef:XTIPLL_Range:外部晶振频率选择 + 144 *出口参数:void + 145 *****************************************************/ + 146 void OPTION_XTIPLL_SetRange(XTIPLL_Range_TypeDef + 147 XTIPLL_Range) + 148 { + 149 1 OPINX = 0XC2; + 150 1 OPREG = OPREG & 0XBF | XTIPLL_Range; + 151 1 } + 152 #endif + 153 + 154 #if defined (SC92F742x)||defined (SC92F83Ax) || defined (SC92F73Ax)|| defined (SC92F84Ax) || defined (SC92 + -F74Ax) \ + 155 ||defined (SC92F74Ax_2)||defined (SC92F84Ax_2)||defined (SC92F844xB)||defined (SC92F744xB) \ + 156 ||defined (SC92F859x) || defined (SC92F759x) ||defined (SC92F848x) || defined (SC92F748x) || defined (SC + -92L853x) || defined (SC92L753x) + /************************************************** + *函数名称:void OPTION_JTG_Cmd(FunctionalState NewState) + *函数功能:JTAG模式使能开关 + *入口参数: + FunctionalState:NewState:功能启动/关闭选择 + *出口参数:void + **************************************************/ + void OPTION_JTG_Cmd(FunctionalState NewState) + { + OPINX = 0xC2; + + if(NewState == DISABLE) + { + OPREG |= 0X10; //1 JTAG无效 + } + else + { + C51 COMPILER V9.59.0.0 SC92F_OPTION 01/18/2024 10:03:13 PAGE 4 + + OPREG &= 0XEF; //0 JTAG有效 + } + } + #endif + 178 /******************* (C) COPYRIGHT 2020 SinOne Microelectronics *****END OF FILE****/ + + +MODULE INFORMATION: STATIC OVERLAYABLE + CODE SIZE = 106 ---- + CONSTANT SIZE = ---- ---- + XDATA SIZE = ---- ---- + PDATA SIZE = ---- ---- + DATA SIZE = ---- ---- + IDATA SIZE = ---- ---- + BIT SIZE = ---- ---- + EDATA SIZE = ---- ---- + HDATA SIZE = ---- ---- + XDATA CONST SIZE = ---- ---- + FAR CONST SIZE = ---- ---- +END OF MODULE INFORMATION. + + +C51 COMPILATION COMPLETE. 0 WARNING(S), 0 ERROR(S) diff --git a/Keil_C/List/sc92f_pwm.lst b/Keil_C/List/sc92f_pwm.lst new file mode 100644 index 0000000..218dac2 --- /dev/null +++ b/Keil_C/List/sc92f_pwm.lst @@ -0,0 +1,613 @@ +锘緾51 COMPILER V9.01 SC92F_PWM 09/11/2020 09:48:38 PAGE 1 +C51 COMPILER V9.01, COMPILATION OF MODULE SC92F_PWM +OBJECT MODULE PLACED IN ..\Output\sc92f_pwm.obj +COMPILER INVOKED BY: E:\Keil\C51\BIN\C51.EXE ..\FWLib\SC92F_Lib\src\sc92f_pwm.c OMF2 BROWSE INCDIR(..\FWLib\SC92F_Lib\in + -c;..\User) DEBUG PRINT(..\List\sc92f_pwm.lst) OBJECT(..\Output\sc92f_pwm.obj) +line level source + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 + 11 + 12 #include "sc92f_pwm.h" + 13 + 14 #if defined (SC92F854x) || defined (SC92F754x) ||defined (SC92F844xB) || defined (SC92F744xB)||defined ( + -SC92F84Ax_2) || defined (SC92F74Ax_2) + uint16_t xdata PWMREG[8] _at_ 0x740; + uint16_t pwm_tmpreg[8] = {0,0,0,0,0,0,0,0}; + void PWM_DeInit(void) + { + static uint8_t i; + PWMCFG = 0X00; + PWMCON = 0X00; + IE1 &= 0XFD; + IP1 &= 0XFD; + for(i=0;i<8;i++) + { + PWMREG[i] = 0; + } + } + void PWM_Init(PWM_PresSel_TypeDef PWM_PresSel, uint16_t PWM_Period) + { + PWM_Period -= 1; + PWMCFG = (PWMCFG & 0XCF) | PWM_PresSel; + PWMCFG = (PWMCFG & 0XF0) | (uint8_t)(PWM_Period / 256); + PWMCON = (uint8_t)(PWM_Period & 0X00FF); + } + void PWM_OutputStateConfig(uint8_t PWM_OutputPin, PWM_OutputState_TypeDef PWM_OutputState) + { + uint8_t i; + for(i=0;i<8;i++) + { + if(PWM_OutputPin&(0x01<> 2); + } + void PWM_OutputStateConfig(uint8_t PWM_OutputPin, PWM_OutputState_TypeDef PWM_OutputState) + { + if(PWM_OutputState == PWM_OUTPUTSTATE_ENABLE) + { + PWMCON |= PWM_OutputPin; + } + else + { + PWMCON &= (~PWM_OutputPin); + } + } + void PWM_PolarityConfig(uint8_t PWM_OutputPin, PWM_Polarity_TypeDef PWM_Polarity) + { + if(PWM_Polarity == PWM_POLARITY_INVERT) + { + PWMCFG |= PWM_OutputPin; + } + else + { + PWMCFG &= (~PWM_OutputPin); + } + } + void PWM_IndependentModeConfig(PWM_OutputPin_TypeDef PWM_OutputPin, uint16_t PWM_DutyCycle) + { + PWMDTYB &= 0X7F; + switch(PWM_OutputPin) + { + case PWM0: + PWMDTYA = PWMDTYA & 0xfc | (PWM_DutyCycle % 4); + PWMDTY0 = (uint8_t)(PWM_DutyCycle >> 2); + break; + case PWM1: + PWMDTYA = PWMDTYA & 0xf3 | ((PWM_DutyCycle % 4) << 2); + PWMDTY1 = (uint8_t)(PWM_DutyCycle >> 2); + break; + case PWM2: + PWMDTYA = PWMDTYA & 0xcf | ((PWM_DutyCycle % 4) << 4); + PWMDTY2 = (uint8_t)(PWM_DutyCycle >> 2); + break; + case PWM3: + PWMDTYB = PWMDTYB & 0xfc | (PWM_DutyCycle % 4); + PWMDTY3 = (uint8_t)(PWM_DutyCycle >> 2); + break; + case PWM4: + PWMDTYB = PWMDTYB & 0xf3 | ((PWM_DutyCycle % 4) << 2); + PWMDTY4 = (uint8_t)(PWM_DutyCycle >> 2); + break; + case PWM5: + PWMDTYB = PWMDTYB & 0xcf | ((PWM_DutyCycle % 4) << 4); + PWMDTY5 = (uint8_t)(PWM_DutyCycle >> 2); + break; + default: + break; + } + } + void PWM_ComplementaryModeConfig(PWM_ComplementaryOutputPin_TypeDef PWM_ComplementaryOutputPin, uint16_t P + -WM_DutyCycle) + { + PWMDTYB |= 0X80; + switch(PWM_ComplementaryOutputPin) + { + case PWM0PWM3: + PWMDTYA = PWMDTYA & 0xfc | (PWM_DutyCycle % 4); + PWMDTY0 = (uint8_t)(PWM_DutyCycle >> 2); + break; + case PWM1PWM4: + PWMDTYA = PWMDTYA & 0xf3 | ((PWM_DutyCycle % 4) << 2); + PWMDTY1 = (uint8_t)(PWM_DutyCycle >> 2); + break; + case PWM2PWM5: + PWMDTYA = PWMDTYA & 0xcf | ((PWM_DutyCycle % 4) << 4); + PWMDTY2 = (uint8_t)(PWM_DutyCycle >> 2); + break; + default: + break; + } + } + void PWM_DeadTimeConfig(uint8_t PWM012_RisingDeadTime, uint8_t PWM345_fallingDeadTime) + { + PWMDTY3 = (PWM012_RisingDeadTime | (PWM345_fallingDeadTime << 4)); + } + void PWM_Cmd(FunctionalState NewState) + { + if (NewState != DISABLE) + { + PWMCON |= 0X80; + } + else + { + PWMCON &= ~0X80; + } + } + void PWM_ITConfig(FunctionalState NewState, PriorityStatus Priority) + { + if (NewState != DISABLE) + { + IE1 |= 0X02; + } + else + { + IE1 &= 0XFD; + } + if(Priority == LOW) + { + IP1 &= 0XFD; + } + else + { + IP1 |= 0X02; + } + } + FlagStatus PWM_GetFlagStatus(void) + { + return (FlagStatus)(PWMCON & 0X40); + } + void PWM_ClearFlag(void) + { + PWMCON &= 0XBF; + } + #endif + 422 + 423 + 424 + 425 + 426 + 427 + 428 + 429 + 430 + 431 #if defined (SC92F8003) + 432 + 438 void PWM_DeInit(void) + 439 { + 440 1 PWMCFG = 0X00; + 441 1 PWMCON0 = 0X00; + 442 1 PWMPRD = 0X00; + 443 1 PWMDTYA = 0X00; + 444 1 PWMDTY0 = 0X00; + 445 1 PWMDTY1 = 0X00; + 446 1 PWMDTY2 = 0X00; + 447 1 PWMCON1 = 0X00; + 448 1 PWMDTYB = 0X00; + 449 1 PWMDTY3 = 0X00; + 450 1 PWMDTY4 = 0X00; + 451 1 PWMDTY5 = 0X00; + 452 1 PWMDTY6 = 0X00; + 453 1 IE1 &= 0XFD; + 454 1 IP1 &= 0XFD; + 455 1 } + 456 + 457 + 464 void PWM_Init(PWM_PresSel_TypeDef PWM_PresSel, uint16_t PWM_Period) + 465 { + 466 1 PWM_Period -= 1; + 467 1 PWMCON0 = (PWMCON0 & 0XCC) | PWM_PresSel | (uint8_t)(PWM_Period & 0X0003); + 468 1 PWMPRD = (uint8_t)(PWM_Period >> 2); + 469 1 } + 470 + 471 + 478 void PWM_OutputStateConfig(uint8_t PWM_OutputPin, PWM_OutputState_TypeDef PWM_OutputState) + 479 { + 480 1 if(PWM_OutputState == PWM_OUTPUTSTATE_ENABLE) + 481 1 { + 482 2 PWMCON1 |= PWM_OutputPin; + 483 2 } + 484 1 else + 485 1 { + 486 2 PWMCON1 &= (~PWM_OutputPin); + 487 2 } + 488 1 } + 489 + 490 + 496 void PWM_PWM2Selection(PWM2_OutputPin_TypeDef PWM2_OutputPin) + 497 { + 498 1 PWMCON0 = PWMCON0 & 0XFB | PWM2_OutputPin; + 499 1 } + 500 + 501 + 507 void PWM_PWM5Selection(PWM5_OutputPin_TypeDef PWM5_OutputPin) + 508 { + 509 1 PWMCON0 = PWMCON0 & 0XF7 | PWM5_OutputPin; + 510 1 } + 511 + 512 + 519 void PWM_PolarityConfig(uint8_t PWM_OutputPin, PWM_Polarity_TypeDef PWM_Polarity) + 520 { + 521 1 if(PWM_Polarity == PWM_POLARITY_INVERT) + 522 1 { + 523 2 PWMCFG |= PWM_OutputPin; + 524 2 } + 525 1 else + 526 1 { + 527 2 PWMCFG &= (~PWM_OutputPin); + 528 2 } + 529 1 } + 530 + 531 + 538 void PWM_IndependentModeConfig(PWM_OutputPin_TypeDef PWM_OutputPin, uint16_t PWM_DutyCycle) + 539 { + 540 1 if(PWM_OutputPin!=PWM6) + 541 1 { + 542 2 PWMCON1 &= 0X7F; + 543 2 } + 544 1 switch(PWM_OutputPin) + 545 1 { + 546 2 case PWM0: + 547 2 PWMDTYA = PWMDTYA & 0XFC | (PWM_DutyCycle % 4); + 548 2 PWMDTY0 = (uint8_t)(PWM_DutyCycle >> 2); + 549 2 break; + 550 2 case PWM1: + 551 2 PWMDTYA = PWMDTYA & 0XF3 | ((PWM_DutyCycle % 4) << 2); + 552 2 PWMDTY1 = (uint8_t)(PWM_DutyCycle >> 2); + 553 2 break; + 554 2 case PWM2: + 555 2 PWMDTYA = PWMDTYA & 0XCF | ((PWM_DutyCycle % 4) << 4); + 556 2 PWMDTY2 = (uint8_t)(PWM_DutyCycle >> 2); + 557 2 break; + 558 2 case PWM3: + 559 2 PWMDTYA = PWMDTYA & 0X3F | ((PWM_DutyCycle % 4) << 6); + 560 2 PWMDTY3 = (uint8_t)(PWM_DutyCycle >> 2); + 561 2 break; + 562 2 case PWM4: + 563 2 PWMDTYB = PWMDTYB & 0XFC | (PWM_DutyCycle % 4); + 564 2 PWMDTY4 = (uint8_t)(PWM_DutyCycle >> 2); + 565 2 break; + 566 2 case PWM5: + 567 2 PWMDTYB = PWMDTYB & 0XF3 | ((PWM_DutyCycle % 4) << 2); + 568 2 PWMDTY5 = (uint8_t)(PWM_DutyCycle >> 2); + 569 2 break; + 570 2 case PWM6: + 571 2 PWMDTYB = PWMDTYB & 0XCF | ((PWM_DutyCycle % 4) << 4); + 572 2 PWMDTY6 = (uint8_t)(PWM_DutyCycle >> 2); + 573 2 break; + 574 2 default: + 575 2 break; + 576 2 } + 577 1 } + 578 + 579 + 586 void PWM_ComplementaryModeConfig(PWM_ComplementaryOutputPin_TypeDef PWM_ComplementaryOutputPin, uint16_t P + -WM_DutyCycle) + 587 { + 588 1 PWMCON1 |= 0X80; + 589 1 switch(PWM_ComplementaryOutputPin) + 590 1 { + 591 2 case PWM0PWM3: + 592 2 PWMDTYA = PWMDTYA & 0XFC | (PWM_DutyCycle % 4); + 593 2 PWMDTY0 = (uint8_t)(PWM_DutyCycle >> 2); + 594 2 break; + 595 2 case PWM1PWM4: + 596 2 PWMDTYA = PWMDTYA & 0XF3 | ((PWM_DutyCycle % 4) << 2); + 597 2 PWMDTY1 = (uint8_t)(PWM_DutyCycle >> 2); + 598 2 break; + 599 2 case PWM2PWM5: + 600 2 PWMDTYA = PWMDTYA & 0XCF | ((PWM_DutyCycle % 4) << 4); + 601 2 PWMDTY2 = (uint8_t)(PWM_DutyCycle >> 2); + 602 2 break; + 603 2 default: + 604 2 break; + 605 2 } + 606 1 } + 607 + 608 + 615 void PWM_DeadTimeConfig(uint8_t PWM012_RisingDeadTime, uint8_t PWM345_fallingDeadTime) + 616 { + 617 1 PWMDTY3 = (PWM012_RisingDeadTime | (PWM345_fallingDeadTime << 4)); + 618 1 } + 619 + 620 + 626 void PWM_Cmd(FunctionalState NewState) + 627 { + 628 1 if (NewState != DISABLE) + 629 1 { + 630 2 PWMCON0 |= 0X80; + 631 2 } + 632 1 else + 633 1 { + 634 2 PWMCON0 &= ~0X80; + 635 2 } + 636 1 } + 637 + 638 + 645 void PWM_ITConfig(FunctionalState NewState, PriorityStatus Priority) + 646 { + 647 1 if (NewState != DISABLE) + 648 1 { + 649 2 IE1 |= 0X02; + 650 2 } + 651 1 else + 652 1 { + 653 2 IE1 &= 0XFD; + 654 2 } + 655 1 + 656 1 if(Priority == LOW) + 657 1 { + 658 2 IP1 &= 0XFD; + 659 2 } + 660 1 else + 661 1 { + 662 2 IP1 |= 0X02; + 663 2 } + 664 1 } + 665 + 666 + 672 FlagStatus PWM_GetFlagStatus(void) + 673 { + 674 1 return (FlagStatus)(PWMCON0 & 0X40); + 675 1 } + 676 + 677 + 683 void PWM_ClearFlag(void) + 684 { + 685 1 PWMCON0 &= 0XBF; + 686 1 } + 687 #endif + 688 + 689 + 690 + 691 + 692 + 693 + 694 + 695 + 696 + 697 + 698 + 699 + 700 #if defined (SC92F742x) + void PWM_DeInit(void) + { + PWMCFG0 = 0X00; + PWMCON = 0X00; + PWMPRD = 0X00; + PWMCFG1 = 0X00; + PWMDTY0 = 0X00; + PWMDTY1 = 0X00; + PWMDTY2 = 0X00; + PWMDTY3 = 0X00; + PWMDTY4 = 0X00; + PWMDTY5 = 0X00; + IE1 &= ~0X02; + IP1 &= ~0X02; + } + void PWM_Init(PWM_PresSel_TypeDef PWM_PresSel, uint16_t PWM_Period) + { + PWM_Period -= 1; + PWMCON = (PWMCON & 0XF8) | PWM_PresSel; + PWMPRD = PWM_Period; + } + void PWM_OutputStateConfig(uint8_t PWM_OutputPin, PWM_OutputState_TypeDef PWM_OutputState) + { + if(PWM_OutputState==PWM_OUTPUTSTATE_DISABLE) + { + PWMCON = PWMCON & (~(PWM_OutputPin&0x38)); + PWMCFG0 = PWMCFG0 & (~(PWM_OutputPin&0x07)); + } + else + { + PWMCON = PWMCON | (PWM_OutputPin&0x38); + PWMCFG0 = PWMCFG0 |(PWM_OutputPin&0x07); + } + } + void PWM_PolarityConfig(uint8_t PWM_OutputPin, PWM_Polarity_TypeDef PWM_Polarity) + { + if(PWM_Polarity==PWM_POLARITY_NON_INVERT) + { + PWMCFG0 = PWMCFG0 & (~(PWM_OutputPin&0x38)); + PWMCFG1 = PWMCFG1 & (~((PWM_OutputPin<<3)&0x38)); + } + else + { + PWMCFG0 = PWMCFG0 | (PWM_OutputPin&0x38); + PWMCFG1 = PWMCFG1 |((PWM_OutputPin<<3)&0x38); + } + } + void PWM_IndependentModeConfig(PWM_OutputPin_TypeDef PWM_OutputPin, uint16_t PWM_DutyCycle) + { + switch(PWM_OutputPin) + { + case PWM0: + PWMDTY0 = PWM_DutyCycle; + break; + case PWM1: + PWMDTY1 = PWM_DutyCycle; + break; + case PWM2: + PWMDTY2 = PWM_DutyCycle; + break; + case PWM3: + PWMDTY3 = PWM_DutyCycle; + break; + case PWM4: + PWMDTY4 = PWM_DutyCycle; + break; + case PWM5: + PWMDTY5 = PWM_DutyCycle; + break; + default: + break; + } + } + void PWM_Cmd(FunctionalState NewState) + { + if (NewState != DISABLE) + { + PWMCON |= 0X80; + } + else + { + PWMCON &= ~0X80; + } + } + void PWM_ITConfig(FunctionalState NewState, PriorityStatus Priority) + { + if (NewState != DISABLE) + { + IE1 |= 0X02; + } + else + { + IE1 &= ~0X02; + } + if(Priority == LOW) + { + IP1 &= ~0X02; + } + else + { + IP1 |= 0X02; + } + } + FlagStatus PWM_GetFlagStatus(void) + { + return (FlagStatus)(PWMCON & 0X40); + } + void PWM_ClearFlag(void) + { + PWMCON &= 0XBF; + } + #endif + 881 + 882 +MODULE INFORMATION: STATIC OVERLAYABLE + CODE SIZE = 504 ---- + CONSTANT SIZE = ---- ---- + XDATA SIZE = ---- ---- + PDATA SIZE = ---- ---- + DATA SIZE = ---- ---- + IDATA SIZE = ---- ---- + BIT SIZE = ---- ---- + EDATA SIZE = ---- ---- + HDATA SIZE = ---- ---- + XDATA CONST SIZE = ---- ---- + FAR CONST SIZE = ---- ---- +END OF MODULE INFORMATION. +C51 COMPILATION COMPLETE. 0 WARNING(S), 0 ERROR(S) diff --git a/Keil_C/List/sc92f_pwr.lst b/Keil_C/List/sc92f_pwr.lst new file mode 100644 index 0000000..005b1b8 --- /dev/null +++ b/Keil_C/List/sc92f_pwr.lst @@ -0,0 +1,67 @@ +锘緾51 COMPILER V9.01 SC92F_PWR 09/11/2020 09:48:39 PAGE 1 +C51 COMPILER V9.01, COMPILATION OF MODULE SC92F_PWR +OBJECT MODULE PLACED IN ..\Output\sc92f_pwr.obj +COMPILER INVOKED BY: E:\Keil\C51\BIN\C51.EXE ..\FWLib\SC92F_Lib\src\sc92f_pwr.c OMF2 BROWSE INCDIR(..\FWLib\SC92F_Lib\in + -c;..\User) DEBUG PRINT(..\List\sc92f_pwr.lst) OBJECT(..\Output\sc92f_pwr.obj) +line level source + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 + 11 #include "sc92f_pwr.h" + 12 + 13 + 19 void PWR_DeInit(void) + 20 { + 21 1 PCON &= 0XFC; + 22 1 } + 23 + 24 + 30 void PWR_EnterSTOPMode(void) + 31 { + 32 1 PCON |= 0X02; + 33 1 _nop_(); + 34 1 _nop_(); + 35 1 _nop_(); + 36 1 _nop_(); + 37 1 _nop_(); + 38 1 _nop_(); + 39 1 _nop_(); + 40 1 _nop_(); + 41 1 } + 42 + 43 + 49 void PWR_EnterIDLEMode(void) + 50 { + 51 1 PCON |= 0X01; + 52 1 _nop_(); + 53 1 _nop_(); + 54 1 _nop_(); + 55 1 _nop_(); + 56 1 _nop_(); + 57 1 _nop_(); + 58 1 _nop_(); + 59 1 _nop_(); + 60 1 } + 61 + 62 +MODULE INFORMATION: STATIC OVERLAYABLE + CODE SIZE = 28 ---- + CONSTANT SIZE = ---- ---- + XDATA SIZE = ---- ---- + PDATA SIZE = ---- ---- + DATA SIZE = ---- ---- + IDATA SIZE = ---- ---- + BIT SIZE = ---- ---- + EDATA SIZE = ---- ---- + HDATA SIZE = ---- ---- + XDATA CONST SIZE = ---- ---- + FAR CONST SIZE = ---- ---- +END OF MODULE INFORMATION. +C51 COMPILATION COMPLETE. 0 WARNING(S), 0 ERROR(S) diff --git a/Keil_C/List/sc92f_ssi.lst b/Keil_C/List/sc92f_ssi.lst new file mode 100644 index 0000000..4ae92d4 --- /dev/null +++ b/Keil_C/List/sc92f_ssi.lst @@ -0,0 +1,475 @@ +C51 COMPILER V9.59.0.0 SC92F_SSI 01/18/2024 10:03:12 PAGE 1 + + +C51 COMPILER V9.59.0.0, COMPILATION OF MODULE SC92F_SSI +OBJECT MODULE PLACED IN ..\Output\sc92f_ssi.obj +COMPILER INVOKED BY: D:\Keil_v5\C51\BIN\C51.EXE ..\FWLib\SC92F_Lib\src\sc92f_ssi.c LARGE OBJECTADVANCED OPTIMIZE(8,SIZE) + - BROWSE INCDIR(..\FWLib\SC92F_Lib\inc;..\User;..\Apps;..\Apps;..\User) DEFINE(SC92F836xB) DEBUG PRINT(..\List\sc92f_ssi. + -lst) OBJECT(..\Output\sc92f_ssi.obj) + +line level source + + 1 //************************************************************ + 2 // Copyright (c) 深圳市赛元微电子有限公司 + 3 // 文件名称 : sc92f_ssi.c + 4 // 作者 : + 5 // 模块功能 : SSI固件库函数C文件 + 6 // 局部函数列表: + 7 // 最后更正日期: 2021/08/20 + 8 // 版本 : V1.10001 + 9 // 说明 : + 10 //************************************************************* + 11 + 12 #include "sc92f_ssi.h" + 13 + 14 #if defined (SC92F854x) || defined (SC92F754x) ||defined (SC92F844xB) || defined (SC92F744xB)||defined ( + -SC92F84Ax_2) || defined (SC92F74Ax_2)\ + 15 || defined (SC92F846xB) || defined (SC92F746xB) || defined (SC92F836xB) || defined (SC92F736xB) || defin + -ed (SC92F84Ax) || defined (SC92F74Ax)\ + 16 || defined (SC92F83Ax) || defined (SC92F73Ax) || defined (SC92F7003) || defined (SC92F8003) || defined ( + -SC92F740x) || defined (SC92F827X)\ + 17 || defined (SC92F837X) || defined (SC92FWxx) || defined (SC93F833x) || defined (SC93F843x) || defined (S + -C93F743x) || defined (SC92F848x) || defined (SC92F748x)\ + 18 || defined (SC92F859x) || defined (SC92F759x) + 19 /************************************************** + 20 *函数名称:void SSI_DeInit(void) + 21 *函数功能:SSI相关寄存器复位至缺省值 + 22 *入口参数:void + 23 *出口参数:void + 24 **************************************************/ + 25 void SSI_DeInit(void) + 26 { + 27 1 OTCON &= 0X3F; + 28 1 SSCON0 = 0X00; + 29 1 SSCON1 = 0X00; + 30 1 SSCON2 = 0X00; + 31 1 SSDAT = 0X00; + 32 1 IE1 &= (~0X01); + 33 1 IP1 &= (~0X01); + 34 1 } + 35 + 36 #if defined (SC92F7003) || defined (SC92F8003) || defined (SC92F740x) + /************************************************** + *函数名称:SSI_PinSelection(SSI_PinSelection_TypeDef PinSeletion) + *函数功能:SSI引脚选择 + *入口参数: + SSI_PinSelection_TypeDef:PinSeletion:选择SSI引脚为P10P27P26或P21P22P23 + *出口参数:void + **************************************************/ + void SSI_PinSelection(SSI_PinSelection_TypeDef + PinSeletion) + { + OTCON = OTCON & 0XDF | PinSeletion; + } + #endif + C51 COMPILER V9.59.0.0 SC92F_SSI 01/18/2024 10:03:12 PAGE 2 + + 50 + 51 /************************************************** + 52 *函数名称:void SSI_SPI_Init(SPI_FirstBit_TypeDef FirstBit, SPI_BaudRatePrescaler_TypeDef BaudRatePrescaler + -,SPI_Mode_TypeDef Mode, + 53 SPI_ClockPolarity_TypeDef ClockPolarity, SPI_ClockPhase_TypeDef ClockPhase,SPI_TXE_INT_TypeDef SPI + -_TXE_INT) + 54 *函数功能:SPI初始化配置函数 + 55 *入口参数: + 56 SPI_FirstBit_TypeDef:FirstBit:优先传送位选择(MSB/LSB) + 57 SPI_BaudRatePrescaler_TypeDef:BaudRatePrescaler:SPI时钟频率选择 + 58 SPI_Mode_TypeDef:Mode:SPI工作模式选择 + 59 SPI_ClockPolarity_TypeDef:ClockPolarity:SPI时钟极性选择 + 60 SPI_ClockPhase_TypeDef:ClockPhase:SPI时钟相位选择 + 61 SPI_TXE_INT_TypeDef:SPI_TXE_INT:发送缓存器中断允许选择 + 62 *出口参数:void + 63 **************************************************/ + 64 void SSI_SPI_Init(SPI_FirstBit_TypeDef FirstBit, + 65 SPI_BaudRatePrescaler_TypeDef BaudRatePrescaler, + 66 SPI_Mode_TypeDef Mode, + 67 SPI_ClockPolarity_TypeDef ClockPolarity, + 68 SPI_ClockPhase_TypeDef ClockPhase, + 69 SPI_TXE_INT_TypeDef SPI_TXE_INT) + 70 { + 71 1 OTCON = (OTCON & 0X3F) | 0X40; + 72 1 SSCON1 = SSCON1 & (~0X05) | FirstBit | + 73 1 SPI_TXE_INT; + 74 1 SSCON0 = SSCON0 & 0X80 | BaudRatePrescaler | Mode + 75 1 | ClockPolarity | ClockPhase; + 76 1 } + 77 + 78 /***************************************************** + 79 *函数名称:void SSI_SPI_Cmd(FunctionalState NewState) + 80 *函数功能:SPI功能开关函数 + 81 *入口参数: + 82 FunctionalState:NewState:功能启动/关闭选择 + 83 *出口参数:void + 84 *****************************************************/ + 85 void SSI_SPI_Cmd(FunctionalState NewState) + 86 { + 87 1 if(NewState != DISABLE) + 88 1 { + 89 2 SSCON0 |= 0X80; + 90 2 } + 91 1 else + 92 1 { + 93 2 SSCON0 &= (~0X80); + 94 2 } + 95 1 } + 96 + 97 /***************************************************** + 98 *函数名称:void SSI_SPI_SendData(uint8_t Data) + 99 *函数功能:SPI发送数据 + 100 *入口参数: + 101 uint8_t:Data:发送的数据 + 102 *出口参数:void + 103 *****************************************************/ + 104 void SSI_SPI_SendData(uint8_t Data) + 105 { + 106 1 SSDAT = Data; + 107 1 } + 108 + 109 /***************************************************** + C51 COMPILER V9.59.0.0 SC92F_SSI 01/18/2024 10:03:12 PAGE 3 + + 110 *函数名称:uint8_t SSI_SPI_ReceiveData(void) + 111 *函数功能:获得SSDAT中的值 + 112 *入口参数:void + 113 *出口参数: + 114 uint8_t:SPI接收到的8位数据 + 115 *****************************************************/ + 116 uint8_t SSI_SPI_ReceiveData(void) + 117 { + 118 1 return SSDAT; + 119 1 } + 120 + 121 /************************************************** + 122 *函数名称:void SSI_TWI_Init(uint8_t TWI_Address) + 123 *函数功能:TWI初始化配置函数 + 124 *入口参数: + 125 uint8_t:TWI_Address:TWI作为从机时7位从机地址配置 + 126 *出口参数:void + 127 **************************************************/ + 128 void SSI_TWI_Init(uint8_t TWI_Address) + 129 { + 130 1 OTCON = OTCON & 0X3F | 0X80; + 131 1 SSCON1 = TWI_Address << 1; + 132 1 } + 133 + 134 /************************************************** + 135 *函数名称:void SSI_TWI_AcknowledgeConfig(FunctionalState NewState) + 136 *函数功能:TWI接收应答使能函数 + 137 *入口参数: + 138 FunctionalState:NewState:接收应答使能/失能选择 + 139 *出口参数:void + 140 **************************************************/ + 141 void SSI_TWI_AcknowledgeConfig(FunctionalState + 142 NewState) + 143 { + 144 1 if (NewState != DISABLE) + 145 1 { + 146 2 SSCON0 |= 0X08; + 147 2 } + 148 1 else + 149 1 { + 150 2 SSCON0 &= 0XF7; + 151 2 } + 152 1 } + 153 + 154 /************************************************** + 155 *函数名称:void SSI_TWI_GeneralCallCmd(FunctionalState NewState) + 156 *函数功能:TWI通用地址响应使能函数 + 157 *入口参数: + 158 FunctionalState:NewState:通用地址响应使能/失能选择 + 159 *出口参数:void + 160 **************************************************/ + 161 void SSI_TWI_GeneralCallCmd(FunctionalState + 162 NewState) + 163 { + 164 1 if (NewState != DISABLE) + 165 1 { + 166 2 SSCON1 |= 0X01; + 167 2 } + 168 1 else + 169 1 { + 170 2 SSCON1 &= 0XFE; + 171 2 } + C51 COMPILER V9.59.0.0 SC92F_SSI 01/18/2024 10:03:12 PAGE 4 + + 172 1 } + 173 + 174 /************************************************** + 175 *函数名称:FlagStatus SSI_GetTWIStatus(SSI_TWIState_TypeDef SSI_TWIState) + 176 *函数功能:获取TWI状态机 + 177 *入口参数: + 178 SSI_TWIState_TypeDef:SSI_TWIState:TWI状态机状态 + 179 *出口参数:void + 180 **************************************************/ + 181 FlagStatus SSI_GetTWIStatus(SSI_TWIState_TypeDef SSI_TWIState) + 182 { + 183 1 if((SSCON0&0x07) == SSI_TWIState) + 184 1 return SET; + 185 1 else + 186 1 return RESET; + 187 1 } + 188 + 189 /***************************************************** + 190 *函数名称:void SSI_TWI_Cmd(FunctionalState NewState) + 191 *函数功能:TWI功能开关函数 + 192 *入口参数:FunctionalState NewState 功能启动/关闭选择 + 193 *出口参数:void + 194 *****************************************************/ + 195 void SSI_TWI_Cmd(FunctionalState NewState) + 196 { + 197 1 if(NewState != DISABLE) + 198 1 { + 199 2 SSCON0 |= 0X80; + 200 2 } + 201 1 else + 202 1 { + 203 2 SSCON0 &= (~0X80); + 204 2 } + 205 1 } + 206 + 207 /***************************************************** + 208 *函数名称:void SSI_TWI_SendData(uint8_t Data) + 209 *函数功能:TWI发送数据 + 210 *入口参数: + 211 uint8_t:Data:发送的数据 + 212 *出口参数:void + 213 *****************************************************/ + 214 void SSI_TWI_SendData(uint8_t Data) + 215 { + 216 1 SSDAT = Data; + 217 1 } + 218 + 219 /***************************************************** + 220 *函数名称:uint8_t SSI_TWI_ReceiveData(void) + 221 *函数功能:获得SSDAT中的值 + 222 *入口参数:void + 223 *出口参数: + 224 uint8_t:TWI接收到的8位数据 + 225 *****************************************************/ + 226 uint8_t SSI_TWI_ReceiveData(void) + 227 { + 228 1 return SSDAT; + 229 1 } + 230 + 231 /************************************************** + 232 *函数名称:void SSI_UART1_Init(uint32_t UART1Fsys, uint32_t BaudRate, UART1_Mode_TypeDef Mode, UART1_RX_Typ + -eDef RxMode) + C51 COMPILER V9.59.0.0 SC92F_SSI 01/18/2024 10:03:12 PAGE 5 + + 233 *函数功能:UART1初始化配置函数 + 234 *入口参数: + 235 uint32_t:UART1Fsys:系统时钟频率 + 236 uint32_t:BaudRate:波特率 + 237 UART1_Mode_TypeDef:Mode:UART1工作模式 + 238 UART1_RX_TypeDef:RxMode:接收允许选择 + 239 *出口参数:void + 240 **************************************************/ + 241 void SSI_UART1_Init(uint32_t UART1Fsys, + 242 uint32_t BaudRate, UART1_Mode_TypeDef Mode, + 243 UART1_RX_TypeDef RxMode) + 244 { + 245 1 + 246 1 #if defined (SC93F833x) || defined (SC93F843x) || defined (SC93F743x) + OTCON |= 0xC0; + SSCON0 = SSCON0 & 0X0F | Mode | RxMode; + SSCON2 = UART1Fsys / 16 / BaudRate / 256; + SSCON1 = UART1Fsys / 16 / BaudRate % 256; + + #else + 253 1 OTCON |= 0xC0; + 254 1 SSCON0 = SSCON0 & 0X0F | Mode | RxMode; + 255 1 SSCON2 = UART1Fsys / BaudRate / 256; + 256 1 SSCON1 = UART1Fsys / BaudRate % 256; + 257 1 + 258 1 #endif + 259 1 + 260 1 + 261 1 } + 262 + 263 bit SSI_FLAG = 0; + 264 /***************************************************** + 265 *函数名称:void SSI_UART1_SendData8(uint8_t Data) + 266 *函数功能:UART1发送8位数据 + 267 *入口参数: + 268 uint8_t:Data:发送的数据 + 269 *出口参数:void + 270 *****************************************************/ + 271 void SSI_UART1_SendData8(uint8_t Data) + 272 { + 273 1 SSI_FLAG = 1; + 274 1 SSDAT = Data; + 275 1 while( SSI_FLAG == 1 ); + 276 1 } + 277 + 278 + 279 + 280 /***************************************************** + 281 *函数名称:uint8_t SSI_UART1_ReceiveData8(void) + 282 *函数功能:获得SSDAT中的值 + 283 *入口参数:void + 284 *出口参数: + 285 uint8_t:UART接收到的8位数据 + 286 *****************************************************/ + 287 uint8_t SSI_UART1_ReceiveData8(void) + 288 { + 289 1 return SSDAT; + 290 1 } + 291 + 292 /***************************************************** + 293 *函数名称:void SSI_UART1_SendData9(uint16_t Data) + 294 *函数功能:UART1发送9位数据 + C51 COMPILER V9.59.0.0 SC92F_SSI 01/18/2024 10:03:12 PAGE 6 + + 295 *入口参数: + 296 uint16_t:Data:发送的数据 + 297 *出口参数:void + 298 *****************************************************/ + 299 void SSI_UART1_SendData9(uint16_t Data) + 300 { + 301 1 uint8_t Data_9Bit; + 302 1 Data_9Bit = (Data >> 8); + 303 1 + 304 1 if(Data_9Bit) + 305 1 { + 306 2 SSCON0 |= 0x08; + 307 2 } + 308 1 else + 309 1 { + 310 2 SSCON0 &= 0xf7; + 311 2 } + 312 1 + 313 1 SSDAT = (uint8_t)Data; + 314 1 } + 315 + 316 /***************************************************** + 317 *函数名称:uint16_t SSI_UART1_ReceiveData9(void) + 318 *函数功能:获得SSDAT中的值及第九位的值 + 319 *入口参数:void + 320 *出口参数: + 321 uint16_t:接收到的数据 + 322 *****************************************************/ + 323 uint16_t SSI_UART1_ReceiveData9(void) + 324 { + 325 1 uint16_t Data9; + 326 1 Data9 = SSDAT + ((uint16_t)(SSCON0 & 0X04) << 6); + 327 1 SSCON0 &= 0XFB; + 328 1 return Data9; + 329 1 } + 330 + 331 /***************************************************** + 332 *函数名称:void SSI_ITConfig(FunctionalState NewState, PriorityStatus Priority) + 333 *函数功能:SSI中断初始化 + 334 *入口参数: + 335 FunctionalState:NewState:中断使能/关闭选择 + 336 PriorityStatus:Priority:中断优先级选择 + 337 *出口参数:void + 338 *****************************************************/ + 339 void SSI_ITConfig(FunctionalState NewState, + 340 PriorityStatus Priority) + 341 { + 342 1 if(NewState != DISABLE) + 343 1 { + 344 2 IE1 |= 0x01; + 345 2 } + 346 1 else + 347 1 { + 348 2 IE1 &= 0xFE; + 349 2 } + 350 1 + 351 1 /************************************************************/ + 352 1 if(Priority != LOW) + 353 1 { + 354 2 IP1 |= 0x01; + 355 2 } + 356 1 else + C51 COMPILER V9.59.0.0 SC92F_SSI 01/18/2024 10:03:12 PAGE 7 + + 357 1 { + 358 2 IP1 &= 0xFE; + 359 2 } + 360 1 } + 361 + 362 /***************************************************** + 363 *函数名称:FlagStatus SSI_GetFlagStatus(SSI_Flag_TypeDef SSI_FLAG) + 364 *函数功能:获得SSI标志状态 + 365 *入口参数: + 366 SSI_Flag_TypeDef:SSI_FLAG:所需获取的标志位 + 367 *出口参数: + 368 FlagStatus:SSI标志位置起状态 + 369 *****************************************************/ + 370 FlagStatus SSI_GetFlagStatus(SSI_Flag_TypeDef + 371 SSI_FLAG) + 372 { + 373 1 FlagStatus bitstatus = RESET; + 374 1 + 375 1 if((SSI_FLAG == SPI_FLAG_SPIF) || + 376 1 (SSI_FLAG == SPI_FLAG_WCOL) || + 377 1 (SSI_FLAG == SPI_FLAG_TXE)) + 378 1 { + 379 2 if((SSI_FLAG & SSCON1) != (uint8_t)RESET) + 380 2 { + 381 3 bitstatus = SET; + 382 3 } + 383 2 else + 384 2 { + 385 3 bitstatus = RESET; + 386 3 } + 387 2 } + 388 1 else + 389 1 { + 390 2 if((SSI_FLAG & SSCON0) != (uint8_t)RESET) + 391 2 { + 392 3 bitstatus = SET; + 393 3 } + 394 2 else + 395 2 { + 396 3 bitstatus = RESET; + 397 3 } + 398 2 } + 399 1 + 400 1 return bitstatus; + 401 1 } + 402 + 403 /***************************************************** + 404 *函数名称:void SSI_ClearFlag(SSI_Flag_TypeDef SSI_FLAG) + 405 *函数功能:清除SSI标志状态 + 406 *入口参数: + 407 SSI_Flag_TypeDef:SSI_FLAG:所需清除的标志位 + 408 *出口参数:void + 409 *****************************************************/ + 410 void SSI_ClearFlag(SSI_Flag_TypeDef SSI_FLAG) + 411 { + 412 1 if((SSI_FLAG == SPI_FLAG_SPIF) || + 413 1 (SSI_FLAG == SPI_FLAG_WCOL) || + 414 1 (SSI_FLAG == SPI_FLAG_TXE)) + 415 1 { + 416 2 SSCON1 &= (~SSI_FLAG); + 417 2 } + 418 1 else + C51 COMPILER V9.59.0.0 SC92F_SSI 01/18/2024 10:03:12 PAGE 8 + + 419 1 { + 420 2 SSCON0 &= (~SSI_FLAG); + 421 2 } + 422 1 } + 423 #endif + 424 + 425 /******************* (C) COPYRIGHT 2020 SinOne Microelectronics *****END OF FILE****/ + + +MODULE INFORMATION: STATIC OVERLAYABLE + CODE SIZE = 413 ---- + CONSTANT SIZE = ---- ---- + XDATA SIZE = ---- 16 + PDATA SIZE = ---- ---- + DATA SIZE = ---- ---- + IDATA SIZE = ---- ---- + BIT SIZE = 1 ---- + EDATA SIZE = ---- ---- + HDATA SIZE = ---- ---- + XDATA CONST SIZE = ---- ---- + FAR CONST SIZE = ---- ---- +END OF MODULE INFORMATION. + + +C51 COMPILATION COMPLETE. 0 WARNING(S), 0 ERROR(S) diff --git a/Keil_C/List/sc92f_timer0.lst b/Keil_C/List/sc92f_timer0.lst new file mode 100644 index 0000000..e9f8230 --- /dev/null +++ b/Keil_C/List/sc92f_timer0.lst @@ -0,0 +1,202 @@ +C51 COMPILER V9.59.0.0 SC92F_TIMER0 01/18/2024 10:03:12 PAGE 1 + + +C51 COMPILER V9.59.0.0, COMPILATION OF MODULE SC92F_TIMER0 +OBJECT MODULE PLACED IN ..\Output\sc92f_timer0.obj +COMPILER INVOKED BY: D:\Keil_v5\C51\BIN\C51.EXE ..\FWLib\SC92F_Lib\src\sc92f_timer0.c LARGE OBJECTADVANCED OPTIMIZE(8,SI + -ZE) BROWSE INCDIR(..\FWLib\SC92F_Lib\inc;..\User;..\Apps;..\Apps;..\User) DEFINE(SC92F836xB) DEBUG PRINT(..\List\sc92f_t + -imer0.lst) OBJECT(..\Output\sc92f_timer0.obj) + +line level source + + 1 //************************************************************ + 2 // Copyright (c) 深圳市赛元微电子有限公司 + 3 // 文件名称: sc92f_tiemr0.c + 4 // 作者: 赛元应用团队 + 5 // 模块功能: TIMER0固件库函数C文件 + 6 // 最后更正日期: 2022年3月23日 + 7 // 版本: V1.10002 + 8 // 说明: + 9 //************************************************************* + 10 + 11 #include "sc92f_timer0.h" + 12 + 13 /************************************************** + 14 *函数名称:void TIM0_DeInit(void) + 15 *函数功能:TIMER0相关寄存器复位至缺省值 + 16 *入口参数:void + 17 *出口参数:void + 18 **************************************************/ + 19 void TIM0_DeInit(void) + 20 { + 21 1 TMOD &= 0XF0; + 22 1 TCON &= 0XCD; + 23 1 TMCON &= 0XFE; + 24 1 TH0 = 0X00; + 25 1 TL0 = 0X00; + 26 1 ET0 = 0; + 27 1 IPT0 = 0; + 28 1 } + 29 + 30 /************************************************** + 31 *函数名称:void TIM0_TimeBaseInit(TIM0_PresSel_TypeDef TIM0_PrescalerSelection, TIM0_CountMode_TypeDef TIM0 + -_CountMode) + 32 *函数功能:TIMER0基本设置配置函数 + 33 *入口参数: + 34 TIM0_PresSel_TypeDef:TIM0_PrescalerSelection:预分频选择 + 35 TIM0_CountMode_TypeDef:TIM0_CountMode:计数/定时模式选择 + 36 *出口参数:void + 37 **************************************************/ + 38 void TIM0_TimeBaseInit(TIM0_PresSel_TypeDef + 39 TIM0_PrescalerSelection, + 40 TIM0_CountMode_TypeDef TIM0_CountMode) + 41 { + 42 1 if(TIM0_PrescalerSelection == + 43 1 TIM0_PRESSEL_FSYS_D12) + 44 1 { + 45 2 TMCON &= 0XFE; + 46 2 } + 47 1 else + 48 1 if(TIM0_PrescalerSelection == + 49 1 TIM0_PRESSEL_FSYS_D1) + 50 1 { + 51 2 TMCON |= 0X01; + 52 2 } + C51 COMPILER V9.59.0.0 SC92F_TIMER0 01/18/2024 10:03:12 PAGE 2 + + 53 1 + 54 1 if(TIM0_CountMode == TIM0_MODE_TIMER) + 55 1 { + 56 2 TMOD &= 0xFB; + 57 2 } + 58 1 else + 59 1 if(TIM0_CountMode == TIM0_MODE_COUNTER) + 60 1 { + 61 2 TMOD |= 0x04; + 62 2 } + 63 1 } + 64 + 65 /************************************************** + 66 *函数名称:void TIM0_WorkMode0Config(uint16_t TIM0_SetCounter) + 67 *函数功能:TIMER0工作模式0配置函数 + 68 *入口参数: + 69 uint16_t:TIM0_SetCounter:配置计数初值 + 70 *出口参数:void + 71 **************************************************/ + 72 void TIM0_WorkMode0Config(uint16_t + 73 TIM0_SetCounter) + 74 { + 75 1 TMOD &= 0XFC; + 76 1 TL0 = (uint8_t)TIM0_SetCounter; + 77 1 TH0 = (TIM0_SetCounter >> 5); + 78 1 } + 79 + 80 /************************************************** + 81 *函数名称:void TIM0_WorkMode1Config(uint16_t TIM0_SetCounter) + 82 *函数功能:TIMER0工作模式1配置函数 + 83 *入口参数: + 84 uint16_t:TIM0_SetCounter:配置计数初值 + 85 *出口参数:void + 86 **************************************************/ + 87 void TIM0_WorkMode1Config(uint16_t + 88 TIM0_SetCounter) + 89 { + 90 1 TMOD &= 0XFC; + 91 1 TMOD |= 0X01; + 92 1 TL0 = TIM0_SetCounter % 256; + 93 1 TH0 = TIM0_SetCounter / 256; + 94 1 } + 95 + 96 /************************************************** + 97 *函数名称:void TIM0_WorkMode2Config(uint8_t TIM0_SetCounter) + 98 *函数功能:TIMER0工作模式2配置函数 + 99 *入口参数: + 100 uint8_t:TIM0_SetCounter:配置计数初值 + 101 *出口参数:void + 102 **************************************************/ + 103 void TIM0_WorkMode2Config(uint8_t TIM0_SetCounter) + 104 { + 105 1 TMOD &= 0XFC; + 106 1 TMOD |= 0X02; + 107 1 TL0 = TIM0_SetCounter; + 108 1 TH0 = TIM0_SetCounter; + 109 1 } + 110 + 111 /************************************************** + 112 *函数名称:void TIM0_WorkModeConfig(TIM0_WorkMode_TypeDef TIM0_WorkMode, uint16_t TIM0_SetCounter1, uint16_ + -t TIM0_SetCounter2) + 113 *函数功能:TIMER0工作模式配置函数 + C51 COMPILER V9.59.0.0 SC92F_TIMER0 01/18/2024 10:03:12 PAGE 3 + + 114 *入口参数: + 115 TIM0_WorkMode_TypeDef:TIM0_WorkMode:TIMER0工作模式选择 + 116 uint16_t:TIM0_SetCounter1:TIMER0计数初值配置1 + 117 uint16_t:TIM0_SetCounter2:TIMER0计数初值配置2 + 118 *出口参数:void + 119 **************************************************/ + 120 void TIM0_WorkModeConfig(TIM0_WorkMode_TypeDef + 121 TIM0_WorkMode, uint16_t TIM0_SetCounter1, + 122 uint16_t TIM0_SetCounter2) + 123 { + 124 1 switch (TIM0_WorkMode) + 125 1 { + 126 2 case TIM0_WORK_MODE0: + 127 2 TIM0_WorkMode0Config(TIM0_SetCounter1); + 128 2 break; + 129 2 + 130 2 case TIM0_WORK_MODE1: + 131 2 TIM0_WorkMode1Config(TIM0_SetCounter1); + 132 2 break; + 133 2 + 134 2 case TIM0_WORK_MODE2: + 135 2 TIM0_WorkMode2Config(TIM0_SetCounter1); + 136 2 break; + 137 2 + 138 2 case TIM0_WORK_MODE3: + 139 2 TIM0_WorkMode3Config(TIM0_SetCounter1, + 140 2 TIM0_SetCounter2); + 141 2 break; + 142 2 default: + 143 2 break; + 144 2 } + 145 1 } + 146 + 147 /************************************************** + 148 *函数名称:void TIM0_WorkMode3Config(uint8_t TIM0_SetCounter, uint8_t TIM1_SetCounter) + 149 *函数功能:TIMER0工作模式3配置函数 + 150 *入口参数: + 151 uint8_t:TIM0_SetCounter:配置TIMER0_TL0计数初值 + 152 uint8_t:TIM1_SetCounter + 153 配置TIMER0_TH0计数初值 + 154 *出口参数:void + 155 **************************************************/ + 156 void TIM0_WorkMode3Config(uint8_t TIM0_SetCounter, + 157 uint8_t TIM1_SetCounter) + 158 { + 159 1 TMOD |= 0X03; + 160 1 TL0 = TIM0_SetCounter; + 161 1 TH0 = TIM1_SetCounter; + 162 1 } + 163 + 164 + 165 /******************* (C) COPYRIGHT 2020 SinOne Microelectronics *****END OF FILE****/ + + +MODULE INFORMATION: STATIC OVERLAYABLE + CODE SIZE = 204 ---- + CONSTANT SIZE = ---- ---- + XDATA SIZE = ---- 2 + PDATA SIZE = ---- ---- + DATA SIZE = ---- ---- + IDATA SIZE = ---- ---- + BIT SIZE = ---- ---- + C51 COMPILER V9.59.0.0 SC92F_TIMER0 01/18/2024 10:03:12 PAGE 4 + + EDATA SIZE = ---- ---- + HDATA SIZE = ---- ---- + XDATA CONST SIZE = ---- ---- + FAR CONST SIZE = ---- ---- +END OF MODULE INFORMATION. + + +C51 COMPILATION COMPLETE. 0 WARNING(S), 0 ERROR(S) diff --git a/Keil_C/List/sc92f_timer1.lst b/Keil_C/List/sc92f_timer1.lst new file mode 100644 index 0000000..6c624a3 --- /dev/null +++ b/Keil_C/List/sc92f_timer1.lst @@ -0,0 +1,174 @@ +C51 COMPILER V9.59.0.0 SC92F_TIMER1 01/18/2024 10:03:13 PAGE 1 + + +C51 COMPILER V9.59.0.0, COMPILATION OF MODULE SC92F_TIMER1 +OBJECT MODULE PLACED IN ..\Output\sc92f_timer1.obj +COMPILER INVOKED BY: D:\Keil_v5\C51\BIN\C51.EXE ..\FWLib\SC92F_Lib\src\sc92f_timer1.c LARGE OBJECTADVANCED OPTIMIZE(8,SI + -ZE) BROWSE INCDIR(..\FWLib\SC92F_Lib\inc;..\User;..\Apps;..\Apps;..\User) DEFINE(SC92F836xB) DEBUG PRINT(..\List\sc92f_t + -imer1.lst) OBJECT(..\Output\sc92f_timer1.obj) + +line level source + + 1 //************************************************************ + 2 // Copyright (c) 深圳市赛元微电子有限公司 + 3 // 文件名称: sc92f_timer1.c + 4 // 作者: 赛元应用团队 + 5 // 模块功能: TIMER1固件库函数C文件 + 6 // 局部函数列表: + 7 // 最后更正日期: 2022年3月23日 + 8 // 版本: V1.10001 + 9 // 说明:该文件仅适用于SC92F系列芯片 + 10 //************************************************************* + 11 #include "sc92f_timer1.h" + 12 + 13 /************************************************** + 14 *函数名称:void TIM1_DeInit(void) + 15 *函数功能:TIMER1相关寄存器复位至缺省值 + 16 *入口参数:void + 17 *出口参数:void + 18 **************************************************/ + 19 void TIM1_DeInit(void) + 20 { + 21 1 TMOD &= 0X0F; + 22 1 TCON &= 0X37; + 23 1 TMCON &= 0XFD; + 24 1 TH1 = 0X00; + 25 1 TL1 = 0X00; + 26 1 ET1 = 0; + 27 1 IPT1 = 0; + 28 1 } + 29 + 30 /************************************************** + 31 *函数名称:void TIM1_TimeBaseInit(TIM1_PresSel_TypeDef TIM1_PrescalerSelection, TIM1_CountMode_TypeDef TIM1 + -_CountMode) + 32 *函数功能:TIMER1基本设置配置函数 + 33 *入口参数: + 34 TIM1_PresSel_TypeDef:TIM1_PrescalerSelection:预分频选择 + 35 TIM1_CountMode_TypeDef:TIM1_CountMode:计数/定时模式选择 + 36 *出口参数:void + 37 **************************************************/ + 38 void TIM1_TimeBaseInit(TIM1_PresSel_TypeDef TIM1_PrescalerSelection, + 39 TIM1_CountMode_TypeDef TIM1_CountMode) + 40 { + 41 1 //判断是否需要进行分频 + 42 1 if(TIM1_PrescalerSelection == TIM1_PRESSEL_FSYS_D12) + 43 1 { + 44 2 TMCON &= 0xFD; + 45 2 } + 46 1 else if(TIM1_PrescalerSelection == TIM1_PRESSEL_FSYS_D1) + 47 1 { + 48 2 TMCON |= 0x02; + 49 2 } + 50 1 + 51 1 //TIM1工作模式 + 52 1 if(TIM1_CountMode == TIM1_MODE_TIMER) + C51 COMPILER V9.59.0.0 SC92F_TIMER1 01/18/2024 10:03:13 PAGE 2 + + 53 1 { + 54 2 TMOD &= 0xBF; + 55 2 } + 56 1 else if(TIM1_CountMode == TIM1_MODE_COUNTER) + 57 1 { + 58 2 TMOD |= 0x40; + 59 2 } + 60 1 } + 61 + 62 /************************************************** + 63 *函数名称:void TIM1_WorkMode0Config(uint16_t TIM1_SetCounter) + 64 *函数功能:TIMER1工作模式0配置函数 + 65 *入口参数: + 66 uint16_t:TIM1_SetCounter:配置计数初值 + 67 *出口参数:void + 68 **************************************************/ + 69 void TIM1_WorkMode0Config(uint16_t + 70 TIM1_SetCounter) + 71 { + 72 1 TMOD &= 0XCF; + 73 1 TL1 = (uint8_t)TIM1_SetCounter; + 74 1 TH1 = (TIM1_SetCounter >> 5); + 75 1 } + 76 + 77 /************************************************** + 78 *函数名称:void TIM1_WorkMode1Config(uint16_t TIM1_SetCounter) + 79 *函数功能:TIMER1工作模式1配置函数 + 80 *入口参数: + 81 uint16_t:TIM1_SetCounter:配置计数初值 + 82 *出口参数:void + 83 **************************************************/ + 84 void TIM1_WorkMode1Config(uint16_t + 85 TIM1_SetCounter) + 86 { + 87 1 TMOD &= 0XCF; + 88 1 TMOD |= 0X10; + 89 1 TL1 = TIM1_SetCounter % 256; + 90 1 TH1 = TIM1_SetCounter / 256; + 91 1 } + 92 + 93 /************************************************** + 94 *函数名称:void TIM1_WorkMode2Config(uint8_t TIM1_SetCounter) + 95 *函数功能:TIMER1工作模式2配置函数 + 96 *入口参数: + 97 uint8_t:TIM1_SetCounter:配置计数初值 + 98 *出口参数:void + 99 **************************************************/ + 100 void TIM1_WorkMode2Config(uint8_t TIM1_SetCounter) + 101 { + 102 1 TMOD &= 0XCF; + 103 1 TMOD |= 0X20; + 104 1 TL1 = TIM1_SetCounter; + 105 1 TH1 = TIM1_SetCounter; + 106 1 } + 107 + 108 /************************************************** + 109 *函数名称:void TIM1_WorkModeConfig(TIM1_WorkMode_TypeDef TIM1_WorkMode, uint16_t TIM1_SetCounter) + 110 *函数功能:TIMER1工作模式配置函数 + 111 *入口参数: + 112 TIM1_WorkMode_TypeDef:TIM1_WorkMode:TIMER1工作模式选择 + 113 uint16_t:TIM1_SetCounter:TIMER1计数初值配置 + 114 *出口参数:void + C51 COMPILER V9.59.0.0 SC92F_TIMER1 01/18/2024 10:03:13 PAGE 3 + + 115 **************************************************/ + 116 void TIM1_WorkModeConfig(TIM1_WorkMode_TypeDef + 117 TIM1_WorkMode, uint16_t TIM1_SetCounter) + 118 { + 119 1 switch(TIM1_WorkMode) + 120 1 { + 121 2 case TIM1_WORK_MODE0: + 122 2 TIM1_WorkMode0Config(TIM1_SetCounter); + 123 2 break; + 124 2 + 125 2 case TIM1_WORK_MODE1: + 126 2 TIM1_WorkMode1Config(TIM1_SetCounter); + 127 2 break; + 128 2 + 129 2 case TIM1_WORK_MODE2: + 130 2 TIM1_WorkMode2Config(TIM1_SetCounter); + 131 2 break; + 132 2 + 133 2 default: + 134 2 break; + 135 2 } + 136 1 } + 137 + 138 + 139 + 140 /******************* (C) COPYRIGHT 2020 SinOne Microelectronics *****END OF FILE****/ + + +MODULE INFORMATION: STATIC OVERLAYABLE + CODE SIZE = 157 ---- + CONSTANT SIZE = ---- ---- + XDATA SIZE = ---- ---- + PDATA SIZE = ---- ---- + DATA SIZE = ---- ---- + IDATA SIZE = ---- ---- + BIT SIZE = ---- ---- + EDATA SIZE = ---- ---- + HDATA SIZE = ---- ---- + XDATA CONST SIZE = ---- ---- + FAR CONST SIZE = ---- ---- +END OF MODULE INFORMATION. + + +C51 COMPILATION COMPLETE. 0 WARNING(S), 0 ERROR(S) diff --git a/Keil_C/List/test.lst b/Keil_C/List/test.lst new file mode 100644 index 0000000..2b821f9 --- /dev/null +++ b/Keil_C/List/test.lst @@ -0,0 +1,111 @@ +C51 COMPILER V9.59.0.0 TEST 01/18/2024 10:03:10 PAGE 1 + + +C51 COMPILER V9.59.0.0, COMPILATION OF MODULE TEST +OBJECT MODULE PLACED IN ..\Output\test.obj +COMPILER INVOKED BY: D:\Keil_v5\C51\BIN\C51.EXE ..\Apps\test.c LARGE OBJECTADVANCED OPTIMIZE(8,SIZE) BROWSE INCDIR(..\FW + -Lib\SC92F_Lib\inc;..\User;..\Apps;..\Apps;..\User) DEFINE(SC92F836xB) DEBUG PRINT(..\List\test.lst) OBJECT(..\Output\tes + -t.obj) + +line level source + + 1 #include "test.h" + 2 + 3 extern bit it_5s_flag; + 4 extern bit it_2s_flag; + 5 extern bit it_1s_flag; + 6 + 7 extern bit it_10ms_flag; + 8 bit led_flag = 0;//led灯开关标志 + 9 bit motor_flag = 0;//电机方向标志 + 10 + 11 /***************************************************** + 12 *函数名称: led_test + 13 *函数功能: IO口、定时器及串口测试用函数 + 14 *入口参数:void + 15 *出口参数:void + 16 *****************************************************/ + 17 void led_test() + 18 { + 19 1 //运行指示灯 + 20 1 if(it_1s_flag == 1)//1秒 + 21 1 { + 22 2 it_1s_flag = 0; + 23 2 if(led_flag) + 24 2 { + 25 3 led_flag = 0; + 26 3 GPIO_WriteHigh(GPIO0,GPIO_PIN_0);//P0.0输出1,led灯关闭 + 27 3 GPIO_WriteHigh(GPIO2,GPIO_PIN_6);//P2.6输出1,led灯关闭 + 28 3 GPIO_WriteHigh(GPIO2,GPIO_PIN_7);//P2.7输出1,led灯关闭 + 29 3 } + 30 2 else + 31 2 { + 32 3 led_flag = 1; + 33 3 GPIO_WriteLow(GPIO0,GPIO_PIN_0);//P0.0输出0,led灯亮起 + 34 3 GPIO_WriteLow(GPIO2,GPIO_PIN_6);//P2.6输出0,led灯亮起 + 35 3 GPIO_WriteLow(GPIO2,GPIO_PIN_7);//P2.7输出0,led灯亮起 + 36 3 } + 37 2 } + 38 1 } + 39 + 40 /***************************************************** + 41 *函数名称: motor_test + 42 *函数功能: 电机控制测试用函数 + 43 *入口参数:void + 44 *出口参数:void + 45 *****************************************************/ + 46 void motor_test() + 47 { + 48 1 bit t1,t2; + 49 1 t1 = GPIO_ReadPin(GPIO1,GPIO_PIN_4); + 50 1 t2 = GPIO_ReadPin(GPIO1,GPIO_PIN_5); + 51 1 motor_start(); + 52 1 motor_mov(2); + 53 1 if(~t1) + C51 COMPILER V9.59.0.0 TEST 01/18/2024 10:03:10 PAGE 2 + + 54 1 { + 55 2 FWD(); + 56 2 } + 57 1 if(~t2) + 58 1 { + 59 2 REV(); + 60 2 } + 61 1 if(it_5s_flag)//检查2秒定时中断标志 + 62 1 { + 63 2 it_5s_flag = 0;//标志位清零 + 64 2 if(motor_flag) + 65 2 { + 66 3 motor_flag = 0; + 67 3 FWD();//电机正转 + 68 3 GPIO_WriteLow(GPIO0,GPIO_PIN_0);//P0.0输出0,led灯亮起 + 69 3 } + 70 2 else + 71 2 { + 72 3 motor_flag = 1; + 73 3 REV();//电机反转 + 74 3 GPIO_WriteHigh(GPIO0,GPIO_PIN_0);//P0.0输出1,led灯关闭 + 75 3 } + 76 2 + 77 2 } + 78 1 } + 79 + 80 + + +MODULE INFORMATION: STATIC OVERLAYABLE + CODE SIZE = 156 ---- + CONSTANT SIZE = ---- ---- + XDATA SIZE = ---- ---- + PDATA SIZE = ---- ---- + DATA SIZE = ---- ---- + IDATA SIZE = ---- ---- + BIT SIZE = 2 2 + EDATA SIZE = ---- ---- + HDATA SIZE = ---- ---- + XDATA CONST SIZE = ---- ---- + FAR CONST SIZE = ---- ---- +END OF MODULE INFORMATION. + + +C51 COMPILATION COMPLETE. 0 WARNING(S), 0 ERROR(S) diff --git a/Keil_C/Project/STARTUP.A51 b/Keil_C/Project/STARTUP.A51 new file mode 100644 index 0000000..7cf4ad8 --- /dev/null +++ b/Keil_C/Project/STARTUP.A51 @@ -0,0 +1,198 @@ +$NOMOD51 +;------------------------------------------------------------------------------ +; This file is part of the C51 Compiler package +; Copyright (c) 1988-2005 Keil Elektronik GmbH and Keil Software, Inc. +; Version 8.01 +; +; *** <<< Use Configuration Wizard in Context Menu >>> *** +;------------------------------------------------------------------------------ +; STARTUP.A51: This code is executed after processor reset. +; +; To translate this file use A51 with the following invocation: +; +; A51 STARTUP.A51 +; +; To link the modified STARTUP.OBJ file to your application use the following +; Lx51 invocation: +; +; Lx51 your object file list, STARTUP.OBJ controls +; +;------------------------------------------------------------------------------ +; +; User-defined Power-On Initialization of Memory +; +; With the following EQU statements the initialization of memory +; at processor reset can be defined: +; +; IDATALEN: IDATA memory size <0x0-0x100> +; Note: The absolute start-address of IDATA memory is always 0 +; The IDATA space overlaps physically the DATA and BIT areas. +IDATALEN EQU 100H +; +; XDATASTART: XDATA memory start address <0x0-0xFFFF> +; The absolute start address of XDATA memory +XDATASTART EQU 0 +; +; XDATALEN: XDATA memory size <0x0-0xFFFF> +; The length of XDATA memory in bytes. +XDATALEN EQU 100H +; +; PDATASTART: PDATA memory start address <0x0-0xFFFF> +; The absolute start address of PDATA memory +PDATASTART EQU 0H +; +; PDATALEN: PDATA memory size <0x0-0xFF> +; The length of PDATA memory in bytes. +PDATALEN EQU 0H +; +; +;------------------------------------------------------------------------------ +; +; Reentrant Stack Initialization +; +; The following EQU statements define the stack pointer for reentrant +; functions and initialized it: +; +; Stack Space for reentrant functions in the SMALL model. +; IBPSTACK: Enable SMALL model reentrant stack +; Stack space for reentrant functions in the SMALL model. +IBPSTACK EQU 0 ; set to 1 if small reentrant is used. +; IBPSTACKTOP: End address of SMALL model stack <0x0-0xFF> +; Set the top of the stack to the highest location. +IBPSTACKTOP EQU 0xFF +1 ; default 0FFH+1 +; +; +; Stack Space for reentrant functions in the LARGE model. +; XBPSTACK: Enable LARGE model reentrant stack +; Stack space for reentrant functions in the LARGE model. +XBPSTACK EQU 0 ; set to 1 if large reentrant is used. +; XBPSTACKTOP: End address of LARGE model stack <0x0-0xFFFF> +; Set the top of the stack to the highest location. +XBPSTACKTOP EQU 0xFFFF +1 ; default 0FFFFH+1 +; +; +; Stack Space for reentrant functions in the COMPACT model. +; PBPSTACK: Enable COMPACT model reentrant stack +; Stack space for reentrant functions in the COMPACT model. +PBPSTACK EQU 0 ; set to 1 if compact reentrant is used. +; +; PBPSTACKTOP: End address of COMPACT model stack <0x0-0xFFFF> +; Set the top of the stack to the highest location. +PBPSTACKTOP EQU 0xFF +1 ; default 0FFH+1 +; +; +;------------------------------------------------------------------------------ +; +; Memory Page for Using the Compact Model with 64 KByte xdata RAM +; Compact Model Page Definition +; +; Define the XDATA page used for PDATA variables. +; PPAGE must conform with the PPAGE set in the linker invocation. +; +; Enable pdata memory page initalization +PPAGEENABLE EQU 0 ; set to 1 if pdata object are used. +; +; PPAGE number <0x0-0xFF> +; uppermost 256-byte address of the page used for PDATA variables. +PPAGE EQU 0 +; +; SFR address which supplies uppermost address byte <0x0-0xFF> +; most 8051 variants use P2 as uppermost address byte +PPAGE_SFR DATA 0A0H +; +; +;------------------------------------------------------------------------------ + +; Standard SFR Symbols +ACC DATA 0E0H +B DATA 0F0H +SP DATA 81H +DPL DATA 82H +DPH DATA 83H + + NAME ?C_STARTUP + + +?C_C51STARTUP SEGMENT CODE +?STACK SEGMENT IDATA + + RSEG ?STACK + DS 1 + + EXTRN CODE (?C_START) + PUBLIC ?C_STARTUP + + CSEG AT 0 +?C_STARTUP: LJMP STARTUP1 + + RSEG ?C_C51STARTUP + +STARTUP1: + +IF IDATALEN <> 0 + MOV R0,#IDATALEN - 1 + CLR A +IDATALOOP: MOV @R0,A + DJNZ R0,IDATALOOP +ENDIF + +IF XDATALEN <> 0 + MOV DPTR,#XDATASTART + MOV R7,#LOW (XDATALEN) + IF (LOW (XDATALEN)) <> 0 + MOV R6,#(HIGH (XDATALEN)) +1 + ELSE + MOV R6,#HIGH (XDATALEN) + ENDIF + CLR A +XDATALOOP: MOVX @DPTR,A + INC DPTR + DJNZ R7,XDATALOOP + DJNZ R6,XDATALOOP +ENDIF + +IF PPAGEENABLE <> 0 + MOV PPAGE_SFR,#PPAGE +ENDIF + +IF PDATALEN <> 0 + MOV R0,#LOW (PDATASTART) + MOV R7,#LOW (PDATALEN) + CLR A +PDATALOOP: MOVX @R0,A + INC R0 + DJNZ R7,PDATALOOP +ENDIF + +IF IBPSTACK <> 0 +EXTRN DATA (?C_IBP) + + MOV ?C_IBP,#LOW IBPSTACKTOP +ENDIF + +IF XBPSTACK <> 0 +EXTRN DATA (?C_XBP) + + MOV ?C_XBP,#HIGH XBPSTACKTOP + MOV ?C_XBP+1,#LOW XBPSTACKTOP +ENDIF + +IF PBPSTACK <> 0 +EXTRN DATA (?C_PBP) + MOV ?C_PBP,#LOW PBPSTACKTOP +ENDIF + + MOV SP,#?STACK-1 + +; This code is required if you use L51_BANK.A51 with Banking Mode 4 +; Code Banking +; Select Bank 0 for L51_BANK.A51 Mode 4 +#if 0 +; Initialize bank mechanism to code bank 0 when using L51_BANK.A51 with Banking Mode 4. +EXTRN CODE (?B_SWITCH0) + CALL ?B_SWITCH0 ; init bank mechanism to code bank 0 +#endif +; + LJMP ?C_START + + END diff --git a/Keil_C/Project/SinOne.soc b/Keil_C/Project/SinOne.soc new file mode 100644 index 0000000..b1ac533 Binary files /dev/null and b/Keil_C/Project/SinOne.soc differ diff --git a/Keil_C/Project/Templst.soclst b/Keil_C/Project/Templst.soclst new file mode 100644 index 0000000..2e598c5 Binary files /dev/null and b/Keil_C/Project/Templst.soclst differ diff --git a/Keil_C/Project/magent_test.uvgui.admin b/Keil_C/Project/magent_test.uvgui.admin new file mode 100644 index 0000000..5483c71 --- /dev/null +++ b/Keil_C/Project/magent_test.uvgui.admin @@ -0,0 +1,1860 @@ + + + + -6.1 + +
### uVision Project, (C) Keil Software
+ + + + + + + + + + 38003 + Registers + 115 55 + + + 346 + Code Coverage + 710 160 + + + 204 + Performance Analyzer + 870 + + + + + + 35141 + Event Statistics + + 200 50 700 + + + 1506 + Symbols + + 60 60 60 + + + 1936 + Watch 1 + + 200 133 133 + + + 1937 + Watch 2 + + 200 133 133 + + + 1935 + Call Stack + Locals + + 200 133 133 + + + 2506 + Trace Data + + 75 135 130 95 70 230 200 150 + + + 466 + Source Browser + 500 + 300 + + + + + + + + 0 + 0 + 0 + 50 + 16 + + + + + + + 44 + 2 + 3 + + -1 + -1 + + + -1 + -1 + + + 86 + 8 + 1017 + 905 + + + + 0 + + 60 + 010000000400000001000000010000000100000001000000000000000200000000000000010000000100000000000000280000002800000000000000 + + + + 0 + Build + + -1 + -1 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + B80000004F00000028040000CB000000 + + + 16 + A4000000BB000000B802000037010000 + + + + 1005 + 1005 + 1 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + 0300000066000000B1000000D5020000 + + + 16 + A4000000BB000000580100006E010000 + + + + 109 + 109 + 1 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + 0300000066000000B1000000D5020000 + + + 16 + A4000000BB00000078010000AD020000 + + + + 1465 + 1465 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + 00000000DF010000280400005B020000 + + + 16 + A4000000BB000000B802000037010000 + + + + 1466 + 1466 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + 03000000E2010000250400002E020000 + + + 16 + A4000000BB000000B802000037010000 + + + + 1467 + 1467 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + 03000000E2010000250400002E020000 + + + 16 + A4000000BB000000B802000037010000 + + + + 1468 + 1468 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + 03000000E2010000250400002E020000 + + + 16 + A4000000BB000000B802000037010000 + + + + 1506 + 1506 + 0 + 0 + 0 + 0 + 32767 + 0 + 16384 + 0 + + 16 + 770300006600000025040000E9000000 + + + 16 + A4000000BB000000580100006E010000 + + + + 1913 + 1913 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + BB0000006600000025040000B2000000 + + + 16 + A4000000BB000000B802000037010000 + + + + 1935 + 1935 + 0 + 0 + 0 + 0 + 32767 + 0 + 32768 + 0 + + 16 + 03000000E20100002504000042020000 + + + 16 + A4000000BB000000580100006E010000 + + + + 1936 + 1936 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + 03000000E2010000250400002E020000 + + + 16 + A4000000BB000000580100006E010000 + + + + 1937 + 1937 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + 03000000E2010000250400002E020000 + + + 16 + A4000000BB000000580100006E010000 + + + + 1939 + 1939 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + 03000000E2010000250400002E020000 + + + 16 + A4000000BB000000B802000037010000 + + + + 1940 + 1940 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + 03000000E2010000250400002E020000 + + + 16 + A4000000BB000000B802000037010000 + + + + 1941 + 1941 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + 03000000E2010000250400002E020000 + + + 16 + A4000000BB000000B802000037010000 + + + + 1942 + 1942 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + 03000000E2010000250400002E020000 + + + 16 + A4000000BB000000B802000037010000 + + + + 195 + 195 + 1 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + 0300000066000000B1000000D5020000 + + + 16 + A4000000BB00000078010000AD020000 + + + + 196 + 196 + 1 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + 0300000066000000B1000000D5020000 + + + 16 + A4000000BB00000078010000AD020000 + + + + 197 + 197 + 1 + 0 + 0 + 0 + 32767 + 0 + 32768 + 0 + + 16 + 0000000006030000A00500006E030000 + + + 16 + A4000000BB000000B802000037010000 + + + + 198 + 198 + 0 + 0 + 0 + 0 + 32767 + 0 + 32768 + 0 + + 16 + 00000000CB010000280400005B020000 + + + 16 + A4000000BB000000B802000037010000 + + + + 199 + 199 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + 03000000090300002504000055030000 + + + 16 + A4000000BB000000B802000037010000 + + + + 203 + 203 + 0 + 0 + 0 + 0 + 32767 + 0 + 8192 + 0 + + 16 + B80000006300000028040000CB000000 + + + 16 + A4000000BB000000B802000037010000 + + + + 204 + 204 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + BB0000006600000025040000B2000000 + + + 16 + A4000000BB000000B802000037010000 + + + + 221 + 221 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + 00000000000000000000000000000000 + + + 16 + 0A0000000A0000006E0000006E000000 + + + + 2506 + 2506 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + 740300006300000028040000DB010000 + + + 16 + A4000000BB000000580100006E010000 + + + + 2507 + 2507 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + 00000000DF0100002804000047020000 + + + 16 + A4000000BB000000B802000037010000 + + + + 343 + 343 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + BB0000006600000025040000B2000000 + + + 16 + A4000000BB000000B802000037010000 + + + + 346 + 346 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + BB0000006600000025040000B2000000 + + + 16 + A4000000BB000000B802000037010000 + + + + 35141 + 35141 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + B80000006300000028040000CB000000 + + + 16 + A4000000BB000000580100006E010000 + + + + 35824 + 35824 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + BB0000006600000025040000B2000000 + + + 16 + A4000000BB000000B802000037010000 + + + + 35885 + 35885 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + 77030000660000002504000042010000 + + + 16 + A4000000BB000000580100006E010000 + + + + 35886 + 35886 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + 77030000660000002504000042010000 + + + 16 + A4000000BB000000580100006E010000 + + + + 35887 + 35887 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + 77030000660000002504000042010000 + + + 16 + A4000000BB000000580100006E010000 + + + + 35888 + 35888 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + 77030000660000002504000042010000 + + + 16 + A4000000BB000000580100006E010000 + + + + 35889 + 35889 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + 77030000660000002504000042010000 + + + 16 + A4000000BB000000580100006E010000 + + + + 35890 + 35890 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + 77030000660000002504000042010000 + + + 16 + A4000000BB000000580100006E010000 + + + + 35891 + 35891 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + 77030000660000002504000042010000 + + + 16 + A4000000BB000000580100006E010000 + + + + 35892 + 35892 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + 77030000660000002504000042010000 + + + 16 + A4000000BB000000580100006E010000 + + + + 35893 + 35893 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + 77030000660000002504000042010000 + + + 16 + A4000000BB000000580100006E010000 + + + + 35894 + 35894 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + 77030000660000002504000042010000 + + + 16 + A4000000BB000000580100006E010000 + + + + 35895 + 35895 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + 77030000660000002504000042010000 + + + 16 + A4000000BB000000580100006E010000 + + + + 35896 + 35896 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + 77030000660000002504000042010000 + + + 16 + A4000000BB000000580100006E010000 + + + + 35897 + 35897 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + 77030000660000002504000042010000 + + + 16 + A4000000BB000000580100006E010000 + + + + 35898 + 35898 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + 77030000660000002504000042010000 + + + 16 + A4000000BB000000580100006E010000 + + + + 35899 + 35899 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + 77030000660000002504000042010000 + + + 16 + A4000000BB000000580100006E010000 + + + + 35900 + 35900 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + 77030000660000002504000042010000 + + + 16 + A4000000BB000000580100006E010000 + + + + 35901 + 35901 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + 77030000660000002504000042010000 + + + 16 + A4000000BB000000580100006E010000 + + + + 35902 + 35902 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + 77030000660000002504000042010000 + + + 16 + A4000000BB000000580100006E010000 + + + + 35903 + 35903 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + 77030000660000002504000042010000 + + + 16 + A4000000BB000000580100006E010000 + + + + 35904 + 35904 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + 77030000660000002504000042010000 + + + 16 + A4000000BB000000580100006E010000 + + + + 35905 + 35905 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + 77030000660000002504000042010000 + + + 16 + A4000000BB000000580100006E010000 + + + + 38003 + 38003 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + 0300000066000000B100000042020000 + + + 16 + A4000000BB00000078010000AD020000 + + + + 38007 + 38007 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + 0000000006030000280400006E030000 + + + 16 + A4000000BB000000B802000037010000 + + + + 436 + 436 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + 03000000090300002504000055030000 + + + 16 + A4000000BB00000078010000AD020000 + + + + 437 + 437 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + 03000000E2010000250400002E020000 + + + 16 + A4000000BB000000580100006E010000 + + + + 440 + 440 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + 03000000E2010000250400002E020000 + + + 16 + A4000000BB000000580100006E010000 + + + + 463 + 463 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + 03000000090300002504000055030000 + + + 16 + A4000000BB00000078010000AD020000 + + + + 466 + 466 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + 03000000090300002504000055030000 + + + 16 + A4000000BB00000078010000AD020000 + + + + 470 + 470 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + BB0000006600000025040000B2000000 + + + 16 + A4000000BB000000B802000037010000 + + + + 50000 + 50000 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + 77030000660000002504000042010000 + + + 16 + A4000000BB000000580100006E010000 + + + + 50001 + 50001 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + 77030000660000002504000042010000 + + + 16 + A4000000BB000000580100006E010000 + + + + 50002 + 50002 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + 77030000660000002504000042010000 + + + 16 + A4000000BB000000580100006E010000 + + + + 50003 + 50003 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + 77030000660000002504000042010000 + + + 16 + A4000000BB000000580100006E010000 + + + + 50004 + 50004 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + 77030000660000002504000042010000 + + + 16 + A4000000BB000000580100006E010000 + + + + 50005 + 50005 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + 77030000660000002504000042010000 + + + 16 + A4000000BB000000580100006E010000 + + + + 50006 + 50006 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + 77030000660000002504000042010000 + + + 16 + A4000000BB000000580100006E010000 + + + + 50007 + 50007 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + 77030000660000002504000042010000 + + + 16 + A4000000BB000000580100006E010000 + + + + 50008 + 50008 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + 77030000660000002504000042010000 + + + 16 + A4000000BB000000580100006E010000 + + + + 50009 + 50009 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + 77030000660000002504000042010000 + + + 16 + A4000000BB000000580100006E010000 + + + + 50010 + 50010 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + 77030000660000002504000042010000 + + + 16 + A4000000BB000000580100006E010000 + + + + 50011 + 50011 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + 77030000660000002504000042010000 + + + 16 + A4000000BB000000580100006E010000 + + + + 50012 + 50012 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + 77030000660000002504000042010000 + + + 16 + A4000000BB000000580100006E010000 + + + + 50013 + 50013 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + 77030000660000002504000042010000 + + + 16 + A4000000BB000000580100006E010000 + + + + 50014 + 50014 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + 77030000660000002504000042010000 + + + 16 + A4000000BB000000580100006E010000 + + + + 50015 + 50015 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + 77030000660000002504000042010000 + + + 16 + A4000000BB000000580100006E010000 + + + + 50016 + 50016 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + 77030000660000002504000042010000 + + + 16 + A4000000BB000000580100006E010000 + + + + 50017 + 50017 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + 77030000660000002504000042010000 + + + 16 + A4000000BB000000580100006E010000 + + + + 50018 + 50018 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + 77030000660000002504000042010000 + + + 16 + A4000000BB000000580100006E010000 + + + + 50019 + 50019 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + 77030000660000002504000042010000 + + + 16 + A4000000BB000000580100006E010000 + + + + 59392 + 59392 + 1 + 0 + 0 + 0 + 32767 + 0 + 8192 + 0 + + 16 + 0000000000000000D10300001C000000 + + + 16 + 0A0000000A0000006E0000006E000000 + + + + 59393 + 0 + 1 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + 000000006E030000A005000081030000 + + + 16 + 0A0000000A0000006E0000006E000000 + + + + 59399 + 59399 + 1 + 0 + 0 + 0 + 32767 + 0 + 8192 + 1 + + 16 + 000000001C000000E701000038000000 + + + 16 + 0A0000000A0000006E0000006E000000 + + + + 59400 + 59400 + 0 + 0 + 0 + 0 + 32767 + 0 + 8192 + 2 + + 16 + 00000000380000006F02000054000000 + + + 16 + 0A0000000A0000006E0000006E000000 + + + + 824 + 824 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + 03000000E2010000250400002E020000 + + + 16 + A4000000BB000000580100006E010000 + + + + 3312 + 000000000B000000000000000020000000000000FFFFFFFFFFFFFFFFB8000000CB00000028040000CF000000000000000100001004000000010000000000000000000000FFFFFFFF08000000CB00000057010000CC000000F08B00005A01000079070000D601000045890000FFFF02000B004354616262656450616E650020000000000000A4000000BB000000B802000037010000B80000004F00000028040000CB0000000000000040280046080000000B446973617373656D626C7900000000CB00000001000000FFFFFFFFFFFFFFFF14506572666F726D616E636520416E616C797A6572000000005701000001000000FFFFFFFFFFFFFFFF14506572666F726D616E636520416E616C797A657200000000CC00000001000000FFFFFFFFFFFFFFFF0E4C6F67696320416E616C797A657200000000F08B000001000000FFFFFFFFFFFFFFFF0D436F646520436F766572616765000000005A01000001000000FFFFFFFFFFFFFFFF11496E737472756374696F6E205472616365000000007907000001000000FFFFFFFFFFFFFFFF0F53797374656D20416E616C797A657200000000D601000001000000FFFFFFFFFFFFFFFF104576656E742053746174697374696373000000004589000001000000FFFFFFFFFFFFFFFFFFFFFFFF000000000000000000000000000000000000000001000000FFFFFFFFCB00000001000000FFFFFFFFCB000000000000000040000000000000FFFFFFFFFFFFFFFF700300004F00000074030000DB010000000000000200001004000000010000000000000000000000FFFFFFFF2B000000E2050000CA0900002D8C00002E8C00002F8C0000308C0000318C0000328C0000338C0000348C0000358C0000368C0000378C0000388C0000398C00003A8C00003B8C00003C8C00003D8C00003E8C00003F8C0000408C0000418C000050C3000051C3000052C3000053C3000054C3000055C3000056C3000057C3000058C3000059C300005AC300005BC300005CC300005DC300005EC300005FC3000060C3000061C3000062C3000063C3000001800040000000000000A4000000BB000000580100006E010000740300004F00000028040000DB01000000000000404100462B0000000753796D626F6C7300000000E205000001000000FFFFFFFFFFFFFFFF0A5472616365204461746100000000CA09000001000000FFFFFFFFFFFFFFFF00000000002D8C000001000000FFFFFFFFFFFFFFFF00000000002E8C000001000000FFFFFFFFFFFFFFFF00000000002F8C000001000000FFFFFFFFFFFFFFFF0000000000308C000001000000FFFFFFFFFFFFFFFF0000000000318C000001000000FFFFFFFFFFFFFFFF0000000000328C000001000000FFFFFFFFFFFFFFFF0000000000338C000001000000FFFFFFFFFFFFFFFF0000000000348C000001000000FFFFFFFFFFFFFFFF0000000000358C000001000000FFFFFFFFFFFFFFFF0000000000368C000001000000FFFFFFFFFFFFFFFF0000000000378C000001000000FFFFFFFFFFFFFFFF0000000000388C000001000000FFFFFFFFFFFFFFFF0000000000398C000001000000FFFFFFFFFFFFFFFF00000000003A8C000001000000FFFFFFFFFFFFFFFF00000000003B8C000001000000FFFFFFFFFFFFFFFF00000000003C8C000001000000FFFFFFFFFFFFFFFF00000000003D8C000001000000FFFFFFFFFFFFFFFF00000000003E8C000001000000FFFFFFFFFFFFFFFF00000000003F8C000001000000FFFFFFFFFFFFFFFF0000000000408C000001000000FFFFFFFFFFFFFFFF0000000000418C000001000000FFFFFFFFFFFFFFFF000000000050C3000001000000FFFFFFFFFFFFFFFF000000000051C3000001000000FFFFFFFFFFFFFFFF000000000052C3000001000000FFFFFFFFFFFFFFFF000000000053C3000001000000FFFFFFFFFFFFFFFF000000000054C3000001000000FFFFFFFFFFFFFFFF000000000055C3000001000000FFFFFFFFFFFFFFFF000000000056C3000001000000FFFFFFFFFFFFFFFF000000000057C3000001000000FFFFFFFFFFFFFFFF000000000058C3000001000000FFFFFFFFFFFFFFFF000000000059C3000001000000FFFFFFFFFFFFFFFF00000000005AC3000001000000FFFFFFFFFFFFFFFF00000000005BC3000001000000FFFFFFFFFFFFFFFF00000000005CC3000001000000FFFFFFFFFFFFFFFF00000000005DC3000001000000FFFFFFFFFFFFFFFF00000000005EC3000001000000FFFFFFFFFFFFFFFF00000000005FC3000001000000FFFFFFFFFFFFFFFF000000000060C3000001000000FFFFFFFFFFFFFFFF000000000061C3000001000000FFFFFFFFFFFFFFFF000000000062C3000001000000FFFFFFFFFFFFFFFF000000000063C3000001000000FFFFFFFFFFFFFFFFFFFFFFFF000000000000000000000000000000000000000001000000FFFFFFFFE205000001000000FFFFFFFFE2050000000000000010000001000000FFFFFFFFFFFFFFFFB40000004F000000B8000000EE020000010000000200001004000000010000000000000000000000FFFFFFFF05000000ED0300006D000000C3000000C40000007394000001800010000001000000A4000000BB000000580100006E010000000000004F000000B4000000EE0200000000000040410056050000000750726F6A65637401000000ED03000001000000FFFFFFFFFFFFFFFF05426F6F6B73010000006D00000001000000FFFFFFFFFFFFFFFF0946756E6374696F6E7301000000C300000001000000FFFFFFFFFFFFFFFF0954656D706C6174657301000000C400000001000000FFFFFFFFFFFFFFFF09526567697374657273000000007394000001000000FFFFFFFFFFFFFFFF00000000000000000000000000000000000000000000000001000000FFFFFFFFED03000001000000FFFFFFFFED030000000000000080000000000000FFFFFFFFFFFFFFFF00000000C701000028040000CB01000000000000010000100400000001000000000000000000000000000000000000000000000001000000C6000000FFFFFFFF0F0000008F070000930700009407000095070000960700009007000091070000B5010000B801000038030000B9050000BA050000BB050000BC050000CB09000001800080000000000000A4000000BB000000580100006E01000000000000CB010000280400005B02000000000000404100460F0000001343616C6C20537461636B202B204C6F63616C73000000008F07000001000000FFFFFFFFFFFFFFFF0755415254202331000000009307000001000000FFFFFFFFFFFFFFFF0755415254202332000000009407000001000000FFFFFFFFFFFFFFFF0755415254202333000000009507000001000000FFFFFFFFFFFFFFFF15446562756720287072696E74662920566965776572000000009607000001000000FFFFFFFFFFFFFFFF0757617463682031000000009007000001000000FFFFFFFFFFFFFFFF0757617463682032000000009107000001000000FFFFFFFFFFFFFFFF10547261636520457863657074696F6E7300000000B501000001000000FFFFFFFFFFFFFFFF0E4576656E7420436F756E7465727300000000B801000001000000FFFFFFFFFFFFFFFF09554C494E4B706C7573000000003803000001000000FFFFFFFFFFFFFFFF084D656D6F7279203100000000B905000001000000FFFFFFFFFFFFFFFF084D656D6F7279203200000000BA05000001000000FFFFFFFFFFFFFFFF084D656D6F7279203300000000BB05000001000000FFFFFFFFFFFFFFFF084D656D6F7279203400000000BC05000001000000FFFFFFFFFFFFFFFF105472616365204E617669676174696F6E00000000CB09000001000000FFFFFFFFFFFFFFFFFFFFFFFF0000000001000000000000000000000001000000FFFFFFFF14020000CB010000180200005B02000000000000020000000400000000000000000000000000000000000000000000000000000002000000C6000000FFFFFFFF8F07000001000000FFFFFFFF8F07000001000000C6000000000000000080000001000000FFFFFFFFFFFFFFFF00000000EE020000A0050000F2020000010000000100001004000000010000000000000000000000FFFFFFFF06000000C5000000C7000000B4010000D2010000CF0100007794000001800080000001000000A4000000BB000000B80200003701000000000000F2020000A00500006E0300000000000040820056060000000C4275696C64204F757470757401000000C500000001000000FFFFFFFFFFFFFFFF0D46696E6420496E2046696C657300000000C700000001000000FFFFFFFFFFFFFFFF0A4572726F72204C69737400000000B401000001000000FFFFFFFFFFFFFFFF0E536F757263652042726F7773657200000000D201000001000000FFFFFFFFFFFFFFFF0E416C6C205265666572656E63657300000000CF01000001000000FFFFFFFFFFFFFFFF0742726F77736572000000007794000001000000FFFFFFFFFFFFFFFF00000000000000000000000000000000000000000000000001000000FFFFFFFFC500000001000000FFFFFFFFC5000000000000000000000000000000 + + + 59392 + File + + 2902 + 00200000010000002800FFFF01001100434D4643546F6F6C426172427574746F6E00E100000000000000000000000000000000000000000000000100000001000000018001E100000000000001000000000000000000000000000000000100000001000000018003E1000000000400020000000000000000000000000000000001000000010000000180CD7F0000000000000300000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF000000000000000000000000000100000001000000018023E100000000040004000000000000000000000000000000000100000001000000018022E100000000040005000000000000000000000000000000000100000001000000018025E10000000004000600000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF00000000000000000000000000010000000100000001802BE10000000004000700000000000000000000000000000000010000000100000001802CE10000000004000800000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF00000000000000000000000000010000000100000001807A8A0000000004000900000000000000000000000000000000010000000100000001807B8A0000000004000A00000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF0000000000000000000000000001000000010000000180D3B00000000004000B000000000000000000000000000000000100000001000000018015B10000000004000C0000000000000000000000000000000001000000010000000180F4B00000000004000D000000000000000000000000000000000100000001000000018036B10000000004000E00000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF0000000000000000000000000001000000010000000180FF88000000000400460000000000000000000000000000000001000000010000000180FE880000000004004500000000000000000000000000000000010000000100000001800B810000000004001300000000000000000000000000000000010000000100000001800C810000000004001400000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF0000000000000000000000000001000000010000000180F0880000020000000F000000000000000000000000000000000100000001000000FFFF0100120043555646696E64436F6D626F427574746F6EE8030000000004000000000000000000000000000000000000010000000100000096000000020020500000000007676F5F737461729600000000000000140007676F5F737461721F4750494F5F53657442697473284750494F472C4750494F5F50696E5F30293B0C69745F35306D735F666C6167184144435F53616D706C6554696D655F3134344379636C6573184144435F53616D706C6554696D655F3438304379636C65730E4144435F444D415F436F6E6669670E75446576696365547970656465660E54726176656C526174654F70656E0F446576696365506172616D657465720852616D7053746570025350074144434346473006414443434F4E0B4144435F436F6E766572740B4144435F6368616E6E656C094144435F56616C75650E4144435F56726566436F6E6669670541444349531773746172745F74746C5F726563656976655F74696D65720772785F646174610000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000018024E10000000000001100000000000000000000000000000000010000000100000001800A810000000004001200000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF000000000000000000000000000100000001000000FFFF01001500434D4643546F6F6C4261724D656E75427574746F6E2280000002000400150000002153746172742F53746F70202644656275672053657373696F6E094374726C2B46350000000000000000000000000100000001000000000000000000000001000000020021802280000000000000150000002153746172742F53746F70202644656275672053657373696F6E094374726C2B4635000000000000000000000000010000000100000000000000000000000100000000002180E0010000000000007500000021456E65726779204D6561737572656D656E742026776974686F75742044656275670000000000000000000000000100000001000000000000000000000001000000000001800000000001000000FFFFFFFF0000000000000000000000000001000000010000000180C488000000000400160000000000000000000000000000000001000000010000000180C988000000000400180000000000000000000000000000000001000000010000000180C788000000000000190000000000000000000000000000000001000000010000002180C8880000000000001700000027264B696C6C20416C6C20427265616B706F696E747320696E2043757272656E7420546172676574000000000000000000000000010000000100000000000000000000000100000003002180C8880000000000001700000027264B696C6C20416C6C20427265616B706F696E747320696E2043757272656E7420546172676574000000000000000000000000010000000100000000000000000000000100000000002180E50100000000000078000000264B696C6C20416C6C20427265616B706F696E747320696E204163746976652050726F6A656374000000000000000000000000010000000100000000000000000000000100000000002180E601000000000000790000002F4B696C6C20416C6C20427265616B706F696E747320696E204D756C74692D50726F6A65637420576F726B73706163650000000000000000000000000100000001000000000000000000000001000000000001800000000001000000FFFFFFFF00000000000000000000000000010000000100000021804C010000020001001A0000000F2650726F6A6563742057696E646F77000000000000000000000000010000000100000000000000000000000100000008002180DD880000000000001A0000000750726F6A656374000000000000000000000000010000000100000000000000000000000100000000002180DC8B0000000000003A00000005426F6F6B73000000000000000000000000010000000100000000000000000000000100000000002180E18B0000000000003B0000000946756E6374696F6E73000000000000000000000000010000000100000000000000000000000100000000002180E28B000000000000400000000954656D706C6174657300000000000000000000000001000000010000000000000000000000010000000000218018890000000000003D0000000E536F757263652042726F777365720000000000000000000000000100000001000000000000000000000001000000000021800000000000000400FFFFFFFF00000000000000000000000000010000000100000000000000000000000100000000002180D988000000000000390000000C4275696C64204F7574707574000000000000000000000000010000000100000000000000000000000100000000002180E38B000000000000410000000B46696E64204F75747075740000000000000000000000000100000001000000000000000000000001000000000001800000000001000000FFFFFFFF0000000000000000000000000001000000010000000180FB7F0000000000001B000000000000000000000000000000000100000001000000000000000446696C65FF7F0000 + + + 1423 + 2800FFFF01001100434D4643546F6F6C426172427574746F6E00E1000000000000FFFFFFFF000100000000000000010000000000000001000000018001E1000000000000FFFFFFFF000100000000000000010000000000000001000000018003E1000000000000FFFFFFFF0001000000000000000100000000000000010000000180CD7F000000000000FFFFFFFF00010000000000000001000000000000000100000001800000000000000000FFFFFFFF000000000000000000010000000000000001000000018023E1000000000000FFFFFFFF000100000000000000010000000000000001000000018022E1000000000000FFFFFFFF000100000000000000010000000000000001000000018025E1000000000000FFFFFFFF00010000000000000001000000000000000100000001800000000000000000FFFFFFFF00000000000000000001000000000000000100000001802BE1000000000000FFFFFFFF00010000000000000001000000000000000100000001802CE1000000000000FFFFFFFF00010000000000000001000000000000000100000001800000000000000000FFFFFFFF00000000000000000001000000000000000100000001807A8A000000000000FFFFFFFF00010000000000000001000000000000000100000001807B8A000000000000FFFFFFFF00010000000000000001000000000000000100000001800000000000000000FFFFFFFF0000000000000000000100000000000000010000000180D3B0000000000000FFFFFFFF000100000000000000010000000000000001000000018015B1000000000000FFFFFFFF0001000000000000000100000000000000010000000180F4B0000000000000FFFFFFFF000100000000000000010000000000000001000000018036B1000000000000FFFFFFFF00010000000000000001000000000000000100000001800000000000000000FFFFFFFF0000000000000000000100000000000000010000000180FF88000000000000FFFFFFFF0001000000000000000100000000000000010000000180FE88000000000000FFFFFFFF00010000000000000001000000000000000100000001800B81000000000000FFFFFFFF00010000000000000001000000000000000100000001800C81000000000000FFFFFFFF00010000000000000001000000000000000100000001800000000000000000FFFFFFFF0000000000000000000100000000000000010000000180F088000000000000FFFFFFFF0001000000000000000100000000000000010000000180EE7F000000000000FFFFFFFF000100000000000000010000000000000001000000018024E1000000000000FFFFFFFF00010000000000000001000000000000000100000001800A81000000000000FFFFFFFF00010000000000000001000000000000000100000001800000000000000000FFFFFFFF00000000000000000001000000000000000100000001802280000000000000FFFFFFFF00010000000000000001000000000000000100000001800000000000000000FFFFFFFF0000000000000000000100000000000000010000000180C488000000000000FFFFFFFF0001000000000000000100000000000000010000000180C988000000000000FFFFFFFF0001000000000000000100000000000000010000000180C788000000000000FFFFFFFF0001000000000000000100000000000000010000000180C888000000000000FFFFFFFF00010000000000000001000000000000000100000001800000000000000000FFFFFFFF0000000000000000000100000000000000010000000180DD88000000000000FFFFFFFF00010000000000000001000000000000000100000001800000000000000000FFFFFFFF0000000000000000000100000000000000010000000180FB7F000000000000FFFFFFFF000100000000000000010000000000000001000000 + + + 1423 + 2800FFFF01001100434D4643546F6F6C426172427574746F6E00E100000000000000000000000000000000000000000000000100000001000000018001E100000000000001000000000000000000000000000000000100000001000000018003E1000000000000020000000000000000000000000000000001000000010000000180CD7F0000000000000300000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF000000000000000000000000000100000001000000018023E100000000000004000000000000000000000000000000000100000001000000018022E100000000000005000000000000000000000000000000000100000001000000018025E10000000000000600000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF00000000000000000000000000010000000100000001802BE10000000000000700000000000000000000000000000000010000000100000001802CE10000000000000800000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF00000000000000000000000000010000000100000001807A8A0000000000000900000000000000000000000000000000010000000100000001807B8A0000000000000A00000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF0000000000000000000000000001000000010000000180D3B00000000000000B000000000000000000000000000000000100000001000000018015B10000000000000C0000000000000000000000000000000001000000010000000180F4B00000000000000D000000000000000000000000000000000100000001000000018036B10000000000000E00000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF0000000000000000000000000001000000010000000180FF880000000000000F0000000000000000000000000000000001000000010000000180FE880000000000001000000000000000000000000000000000010000000100000001800B810000000000001100000000000000000000000000000000010000000100000001800C810000000000001200000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF0000000000000000000000000001000000010000000180F088000000000000130000000000000000000000000000000001000000010000000180EE7F00000000000014000000000000000000000000000000000100000001000000018024E10000000000001500000000000000000000000000000000010000000100000001800A810000000000001600000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF000000000000000000000000000100000001000000018022800000000000001700000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF0000000000000000000000000001000000010000000180C488000000000000180000000000000000000000000000000001000000010000000180C988000000000000190000000000000000000000000000000001000000010000000180C7880000000000001A0000000000000000000000000000000001000000010000000180C8880000000000001B00000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF0000000000000000000000000001000000010000000180DD880000000000001C00000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF0000000000000000000000000001000000010000000180FB7F0000000000001D000000000000000000000000000000000100000001000000 + + + + 59399 + Build + + 986 + 00200000010000001000FFFF01001100434D4643546F6F6C426172427574746F6ECF7F0000000004001C0000000000000000000000000000000001000000010000000180D07F0000000004001D000000000000000000000000000000000100000001000000018030800000000004001E000000000000000000000000000000000100000001000000FFFF01001500434D4643546F6F6C4261724D656E75427574746F6EC7040000000004006A0000000C4261746368204275696C2664000000000000000000000000010000000100000000000000000000000100000004000580C7040000000000006A0000000C4261746368204275696C266400000000000000000000000001000000010000000000000000000000010000000000058046070000000000006B0000000D42617463682052656275696C640000000000000000000000000100000001000000000000000000000001000000000005804707000000000000FFFFFFFF0B426174636820436C65616E0100000000000000000000000100000001000000000000000000000001000000000005809E8A0000000000001F0000000F4261746326682053657475702E2E2E000000000000000000000000010000000100000000000000000000000100000000000180D17F0000000004002000000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF00000000000000000000000000010000000100000001804C8A0000000004002100000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF000000000000000000000000000100000001000000FFFF01001900434D4643546F6F6C426172436F6D626F426F78427574746F6EBA00000000000000000000000000000000000000000000000001000000010000009600000003002050000000000D3C6D6167656E745F746573743E960000000000000001000D3C6D6167656E745F746573743E000000000180EB880000000004002200000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF0000000000000000000000000001000000010000000180C07F000000000400230000000000000000000000000000000001000000010000000180B08A000000000400240000000000000000000000000000000001000000010000000180A8010000000004004E00000000000000000000000000000000010000000100000001807202000000000400530000000000000000000000000000000001000000010000000180BE010000000000005000000000000000000000000000000000010000000100000000000000054275696C64FF7F0000 + + + 583 + 1000FFFF01001100434D4643546F6F6C426172427574746F6ECF7F000000000000FFFFFFFF0001000000000000000100000000000000010000000180D07F000000000000FFFFFFFF00010000000000000001000000000000000100000001803080000000000000FFFFFFFF00010000000000000001000000000000000100000001809E8A000000000000FFFFFFFF0001000000000000000100000000000000010000000180D17F000000000000FFFFFFFF00010000000000000001000000000000000100000001800000000000000000FFFFFFFF00000000000000000001000000000000000100000001804C8A000000000000FFFFFFFF00010000000000000001000000000000000100000001800000000000000000FFFFFFFF00000000000000000001000000000000000100000001806680000000000000FFFFFFFF0001000000000000000100000000000000010000000180EB88000000000000FFFFFFFF00010000000000000001000000000000000100000001800000000000000000FFFFFFFF0000000000000000000100000000000000010000000180C07F000000000000FFFFFFFF0001000000000000000100000000000000010000000180B08A000000000000FFFFFFFF0001000000000000000100000000000000010000000180A801000000000000FFFFFFFF00010000000000000001000000000000000100000001807202000000000000FFFFFFFF0001000000000000000100000000000000010000000180BE01000000000000FFFFFFFF000100000000000000010000000000000001000000 + + + 583 + 1000FFFF01001100434D4643546F6F6C426172427574746F6ECF7F000000000000000000000000000000000000000000000001000000010000000180D07F00000000000001000000000000000000000000000000000100000001000000018030800000000000000200000000000000000000000000000000010000000100000001809E8A000000000000030000000000000000000000000000000001000000010000000180D17F0000000000000400000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF00000000000000000000000000010000000100000001804C8A0000000000000500000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF00000000000000000000000000010000000100000001806680000000000000060000000000000000000000000000000001000000010000000180EB880000000000000700000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF0000000000000000000000000001000000010000000180C07F000000000000080000000000000000000000000000000001000000010000000180B08A000000000000090000000000000000000000000000000001000000010000000180A8010000000000000A000000000000000000000000000000000100000001000000018072020000000000000B0000000000000000000000000000000001000000010000000180BE010000000000000C000000000000000000000000000000000100000001000000 + + + + 59400 + Debug + + 2373 + 00200000000000001900FFFF01001100434D4643546F6F6C426172427574746F6ECC880000000000002500000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF000000000000000000000000000100000001000000018017800000000000002600000000000000000000000000000000010000000100000001801D800000000000002700000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF00000000000000000000000000010000000100000001801A800000000000002800000000000000000000000000000000010000000100000001801B80000000000000290000000000000000000000000000000001000000010000000180E57F0000000000002A00000000000000000000000000000000010000000100000001801C800000000000002B00000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF000000000000000000000000000100000001000000018000890000000000002C00000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF0000000000000000000000000001000000010000000180E48B0000000000002D0000000000000000000000000000000001000000010000000180F07F0000000000002E0000000000000000000000000000000001000000010000000180E8880000000000003700000000000000000000000000000000010000000100000001803B010000000000002F0000000000000000000000000000000001000000010000000180BB8A00000000000030000000000000000000000000000000000100000001000000FFFF01001500434D4643546F6F6C4261724D656E75427574746F6E0E01000000000000310000000D57617463682057696E646F7773000000000000000000000000010000000100000000000000000000000100000003001380D88B00000000000031000000085761746368202631000000000000000000000000010000000100000000000000000000000100000000001380D98B00000000000031000000085761746368202632000000000000000000000000010000000100000000000000000000000100000000001380CE01000000000000FFFFFFFF0C576174636820416E63686F720100000000000000000000000100000001000000000000000000000001000000000013800F01000000000000320000000E4D656D6F72792057696E646F7773000000000000000000000000010000000100000000000000000000000100000004001380D28B00000000000032000000094D656D6F7279202631000000000000000000000000010000000100000000000000000000000100000000001380D38B00000000000032000000094D656D6F7279202632000000000000000000000000010000000100000000000000000000000100000000001380D48B00000000000032000000094D656D6F7279202633000000000000000000000000010000000100000000000000000000000100000000001380D58B00000000000032000000094D656D6F72792026340000000000000000000000000100000001000000000000000000000001000000000013801001000000000000330000000E53657269616C2057696E646F77730000000000000000000000000100000001000000000000000000000001000000040013809307000000000000330000000855415254202326310000000000000000000000000100000001000000000000000000000001000000000013809407000000000000330000000855415254202326320000000000000000000000000100000001000000000000000000000001000000000013809507000000000000330000000855415254202326330000000000000000000000000100000001000000000000000000000001000000000013809607000000000000330000001626446562756720287072696E746629205669657765720000000000000000000000000100000001000000000000000000000001000000000013803C010000000000003400000010416E616C797369732057696E646F7773000000000000000000000000010000000100000000000000000000000100000004001380658A000000000000340000000F264C6F67696320416E616C797A6572000000000000000000000000010000000100000000000000000000000100000000001380DC7F0000000000003E0000001526506572666F726D616E636520416E616C797A6572000000000000000000000000010000000100000000000000000000000100000000001380E788000000000000380000000E26436F646520436F766572616765000000000000000000000000010000000100000000000000000000000100000000001380CD01000000000000FFFFFFFF0F416E616C7973697320416E63686F7201000000000000000000000001000000010000000000000000000000010000000000138053010000000000003F0000000D54726163652057696E646F77730000000000000000000000000100000001000000000000000000000001000000010013805401000000000000FFFFFFFF115472616365204D656E7520416E63686F720100000000000000000000000100000001000000000000000000000001000000000013802901000000000000350000001553797374656D205669657765722057696E646F77730000000000000000000000000100000001000000000000000000000001000000010013804B01000000000000FFFFFFFF1453797374656D2056696577657220416E63686F720100000000000000000000000100000001000000000000000000000001000000000001800000000001000000FFFFFFFF00000000000000000000000000010000000100000013800189000000000000360000000F26546F6F6C626F782057696E646F7700000000000000000000000001000000010000000000000000000000010000000300138044C5000000000000FFFFFFFF0E5570646174652057696E646F77730100000000000000000000000100000001000000000000000000000001000000000013800000000000000400FFFFFFFF000000000000000000000000000100000001000000000000000000000001000000000013805B01000000000000FFFFFFFF12546F6F6C626F78204D656E75416E63686F720100000000000000000000000100000001000000000000000000000001000000000000000000054465627567FF7F0000 + + + 898 + 1900FFFF01001100434D4643546F6F6C426172427574746F6ECC88000000000000FFFFFFFF00010000000000000001000000000000000100000001800000000000000000FFFFFFFF00000000000000000001000000000000000100000001801780000000000000FFFFFFFF00010000000000000001000000000000000100000001801D80000000000000FFFFFFFF00010000000000000001000000000000000100000001800000000000000000FFFFFFFF00000000000000000001000000000000000100000001801A80000000000000FFFFFFFF00010000000000000001000000000000000100000001801B80000000000000FFFFFFFF0001000000000000000100000000000000010000000180E57F000000000000FFFFFFFF00010000000000000001000000000000000100000001801C80000000000000FFFFFFFF00010000000000000001000000000000000100000001800000000000000000FFFFFFFF00000000000000000001000000000000000100000001800089000000000000FFFFFFFF00010000000000000001000000000000000100000001800000000000000000FFFFFFFF0000000000000000000100000000000000010000000180E48B000000000000FFFFFFFF0001000000000000000100000000000000010000000180F07F000000000000FFFFFFFF0001000000000000000100000000000000010000000180E888000000000000FFFFFFFF00010000000000000001000000000000000100000001803B01000000000000FFFFFFFF0001000000000000000100000000000000010000000180BB8A000000000000FFFFFFFF0001000000000000000100000000000000010000000180D88B000000000000FFFFFFFF0001000000000000000100000000000000010000000180D28B000000000000FFFFFFFF00010000000000000001000000000000000100000001809307000000000000FFFFFFFF0001000000000000000100000000000000010000000180658A000000000000FFFFFFFF0001000000000000000100000000000000010000000180C18A000000000000FFFFFFFF0001000000000000000100000000000000010000000180EE8B000000000000FFFFFFFF00010000000000000001000000000000000100000001800000000000000000FFFFFFFF00000000000000000001000000000000000100000001800189000000000000FFFFFFFF000100000000000000010000000000000001000000 + + + 898 + 1900FFFF01001100434D4643546F6F6C426172427574746F6ECC880000000000000000000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF000000000000000000000000000100000001000000018017800000000000000100000000000000000000000000000000010000000100000001801D800000000000000200000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF00000000000000000000000000010000000100000001801A800000000000000300000000000000000000000000000000010000000100000001801B80000000000000040000000000000000000000000000000001000000010000000180E57F0000000000000500000000000000000000000000000000010000000100000001801C800000000000000600000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF000000000000000000000000000100000001000000018000890000000000000700000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF0000000000000000000000000001000000010000000180E48B000000000000080000000000000000000000000000000001000000010000000180F07F000000000000090000000000000000000000000000000001000000010000000180E8880000000000000A00000000000000000000000000000000010000000100000001803B010000000000000B0000000000000000000000000000000001000000010000000180BB8A0000000000000C0000000000000000000000000000000001000000010000000180D88B0000000000000D0000000000000000000000000000000001000000010000000180D28B0000000000000E000000000000000000000000000000000100000001000000018093070000000000000F0000000000000000000000000000000001000000010000000180658A000000000000100000000000000000000000000000000001000000010000000180C18A000000000000110000000000000000000000000000000001000000010000000180EE8B0000000000001200000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF0000000000000000000000000001000000010000000180018900000000000013000000000000000000000000000000000100000001000000 + + + + 0 + 1440 + 960 + + + + +
diff --git a/Keil_C/Project/magent_test.uvopt b/Keil_C/Project/magent_test.uvopt new file mode 100644 index 0000000..6983694 --- /dev/null +++ b/Keil_C/Project/magent_test.uvopt @@ -0,0 +1,478 @@ + + + + 1.0 + +
### uVision Project, (C) Keil Software
+ + + *.c + *.s*; *.src; *.a* + *.obj; *.o + *.lib + *.txt; *.h; *.inc + *.plm + *.cpp + 0 + + + + 0 + 0 + + + + <magent_test> + 0x0 + MCS-51 + + 16000000 + + 1 + 1 + 1 + 0 + 0 + + + 0 + 65535 + 0 + 0 + 0 + + + 120 + 65 + 8 + ..\List\ + + + 1 + 1 + 1 + 0 + 1 + 1 + 0 + 1 + 0 + 0 + 0 + 0 + + + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 0 + + + 1 + 0 + 1 + + 0 + + 0 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 1 + 0 + 1 + 1 + 0 + 0 + 1 + 0 + 0 + -1 + + + + + + + + + + + SOC_KEIL_Setup\SOC_8051_Driver\SOC_8051_Driver.dll + + + + 0 + DLGTP51 + (98=-1,-1,-1,-1,0)(82=-1,-1,-1,-1,0)(83=-1,-1,-1,-1,0)(84=-1,-1,-1,-1,0)(85=-1,-1,-1,-1,0)(80=-1,-1,-1,-1,0)(91=-1,-1,-1,-1,0)(92=-1,-1,-1,-1,0) + + + 0 + SOC_8051_Driver + -S1 -B115200 -O52 + + + 0 + PWSTATINFO + 200,50,700 + + + + + + 0 + 1 + ADC_Value + + + 1 + 1 + ADC_No + + + 2 + 1 + ttl_receive_buff + + + 3 + 1 + PData + + + 4 + 1 + Tad + + + 5 + 1 + ADC_NUM1,0x0A + + + + 0 + + + 0 + 0 + 1 + 0 + 0 + 0 + 0 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + + + + 0 + 0 + 0 + + + + + + + + + + + + + User + 1 + 0 + 0 + 0 + + 1 + 1 + 1 + 0 + 0 + 0 + ..\User\main.c + main.c + 0 + 0 + + + 1 + 2 + 1 + 0 + 0 + 0 + ..\User\SC_Init.c + SC_Init.c + 0 + 0 + + + 1 + 3 + 1 + 0 + 0 + 0 + ..\User\SC_it.c + SC_it.c + 0 + 0 + + + 1 + 4 + 1 + 0 + 0 + 0 + ..\User\SysFunVarDefine.c + SysFunVarDefine.c + 0 + 0 + + + 1 + 5 + 1 + 0 + 0 + 0 + ..\User\CompCtrlDefine.c + CompCtrlDefine.c + 0 + 0 + + + 1 + 6 + 1 + 0 + 0 + 0 + ..\User\CallBackFunction.c + CallBackFunction.c + 0 + 0 + + + + + Apps + 1 + 0 + 0 + 0 + + 2 + 7 + 1 + 0 + 0 + 0 + ..\Apps\motor.c + motor.c + 0 + 0 + + + 2 + 8 + 1 + 0 + 0 + 0 + ..\Apps\test.c + test.c + 0 + 0 + + + 2 + 9 + 1 + 0 + 0 + 0 + ..\Apps\Uart1.c + Uart1.c + 0 + 0 + + + 2 + 10 + 1 + 0 + 0 + 0 + ..\Apps\adc.c + adc.c + 0 + 0 + + + + + Drivers + 0 + 0 + 0 + 0 + + + + FWLib + 1 + 0 + 0 + 0 + + 4 + 11 + 1 + 0 + 0 + 0 + ..\FWLib\SC92F_Lib\src\sc92f_ssi.c + sc92f_ssi.c + 0 + 0 + + + 4 + 12 + 1 + 0 + 0 + 0 + ..\FWLib\SC92F_Lib\src\sc92f_timer0.c + sc92f_timer0.c + 0 + 0 + + + 4 + 13 + 1 + 0 + 0 + 0 + ..\FWLib\SC92F_Lib\src\sc92f_gpio.c + sc92f_gpio.c + 0 + 0 + + + 4 + 14 + 1 + 0 + 0 + 0 + ..\FWLib\SC92F_Lib\src\sc92f_option.c + sc92f_option.c + 0 + 0 + + + 4 + 15 + 1 + 0 + 0 + 0 + ..\FWLib\SC92F_Lib\src\sc92f_timer1.c + sc92f_timer1.c + 0 + 0 + + + 4 + 16 + 1 + 0 + 0 + 0 + ..\FWLib\SC92F_Lib\src\sc92f_adc.c + sc92f_adc.c + 0 + 0 + + + + + Startup + 0 + 0 + 0 + 0 + + 5 + 17 + 2 + 0 + 0 + 0 + .\STARTUP.A51 + STARTUP.A51 + 0 + 0 + + + + + Doc + 1 + 0 + 0 + 0 + + 6 + 18 + 5 + 0 + 0 + 0 + ..\User\readme.txt + readme.txt + 0 + 0 + + + +
diff --git a/Keil_C/Project/magent_test.uvproj b/Keil_C/Project/magent_test.uvproj new file mode 100644 index 0000000..6216be0 --- /dev/null +++ b/Keil_C/Project/magent_test.uvproj @@ -0,0 +1,499 @@ + + + + 1.1 + +
### uVision Project, (C) Keil Software
+ + + + <magent_test> + 0x0 + MCS-51 + 0 + + + SC92F8363B + SC92Fxx Series + IRAM(0-0xFF) IROM(0-0x3FFF) XRAM(0-0xFF) CLOCK(16000000) + + "LIB\STARTUP.A51" ("Standard 8051 Startup Code") + + 0 + SC92F836xB_C.H + + + + + + + + + + + 0 + 0 + + + + SOC\ + SOC\ + + 0 + 0 + 0 + 0 + 1 + + ..\Output\ + magent_test + 1 + 0 + 1 + 1 + 1 + ..\List\ + 0 + 0 + 0 + + 0 + 0 + + + 0 + 0 + 0 + 0 + + + 0 + 0 + + + 0 + 0 + 0 + 0 + + + 0 + 0 + + + 0 + 0 + 0 + 0 + + 0 + + + + 0 + 0 + 0 + 0 + 0 + 1 + 0 + 0 + 0 + 0 + 3 + + + 1 + 65535 + + + S8051.DLL + + DP51.DLL + -p51 + S8051.DLL + + TP51.DLL + -p51 + + + + 0 + 0 + 0 + 0 + 16 + + + 0 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 1 + + + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 1 + 0 + 1 + + 0 + -1 + + + + + + + + + + + + + + SOC_KEIL_Setup\SOC_8051_Driver\SOC_8051_Driver.dll + + + + + 1 + 0 + 0 + 1 + 1 + 4102 + + 1 + SOC_KEIL_Setup\SOC_8051_Driver\SOC_8051_Driver.dll + "" () + + + + + 0 + + + + 2 + 0 + 2 + 0 + 0 + 0 + 0 + 0 + 0 + 1 + 1 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + + + 0 + 0x0 + 0xffff + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 1 + 0x0 + 0x4000 + + + 0 + 0x0 + 0x100 + + + 0 + 0x0 + 0x100 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + + + 0 + 0 + 1 + 0 + 1 + 3 + 8 + 2 + 0 + 1 + 1 + 0 + + + SC92F836xB + + ..\FWLib\SC92F_Lib\inc;..\User;..\Apps;..\Apps;..\User + + + + 0 + 1 + 0 + 0 + + + + + + + + + 0 + 0 + 0 + 0 + 2 + 1 + + REMOVEUNUSED + + + + + + CODE(C:0X100), +CONST(C:0X100) + + + + + + + + + + + + + + + + + + + + + User + + + main.c + 1 + ..\User\main.c + + + SC_Init.c + 1 + ..\User\SC_Init.c + + + SC_it.c + 1 + ..\User\SC_it.c + + + SysFunVarDefine.c + 1 + ..\User\SysFunVarDefine.c + + + CompCtrlDefine.c + 1 + ..\User\CompCtrlDefine.c + + + CallBackFunction.c + 1 + ..\User\CallBackFunction.c + + + + + Apps + + + motor.c + 1 + ..\Apps\motor.c + + + test.c + 1 + ..\Apps\test.c + + + Uart1.c + 1 + ..\Apps\Uart1.c + + + adc.c + 1 + ..\Apps\adc.c + + + + + Drivers + + + FWLib + + + sc92f_ssi.c + 1 + ..\FWLib\SC92F_Lib\src\sc92f_ssi.c + + + sc92f_timer0.c + 1 + ..\FWLib\SC92F_Lib\src\sc92f_timer0.c + + + sc92f_gpio.c + 1 + ..\FWLib\SC92F_Lib\src\sc92f_gpio.c + + + sc92f_option.c + 1 + ..\FWLib\SC92F_Lib\src\sc92f_option.c + + + sc92f_timer1.c + 1 + ..\FWLib\SC92F_Lib\src\sc92f_timer1.c + + + sc92f_adc.c + 1 + ..\FWLib\SC92F_Lib\src\sc92f_adc.c + + + + + Startup + + + STARTUP.A51 + 2 + .\STARTUP.A51 + + + + + Doc + + + readme.txt + 5 + ..\User\readme.txt + + + + + + + +
diff --git a/Keil_C/Project/project name.uvgui.Andy b/Keil_C/Project/project name.uvgui.Andy new file mode 100644 index 0000000..10f9901 --- /dev/null +++ b/Keil_C/Project/project name.uvgui.Andy @@ -0,0 +1,2737 @@ + + + + -4.1 + +
### uVision Project, (C) Keil Software
+ + + + + + 38003 + Registers + 115 192 + + + 346 + Code Coverage + 735 160 + + + 204 + Performance Analyzer + 895 + + + + + + 1506 + Symbols + + 133 133 133 + + + 1936 + Watch 1 + + 133 133 133 + + + 1937 + Watch 2 + + 133 133 133 + + + 1935 + Call Stack + Locals + + 133 133 133 + + + 2506 + Trace Data + + 75 135 130 95 70 230 200 + + + + + + 0 + 0 + 0 + + + + + + + 44 + 2 + 3 + + -1 + -1 + + + -1 + -1 + + + 64 + 94 + 1246 + 657 + + + + 0 + + 1370 + 0100000004000000010000000100000001000000010000000000000002000000000000000100000001000000000000002800000028000000010000000A00000000000000010000005D453A5CB9A4D7F75CB9A4D7F7CFEEC4BF5C425350B0FC5C5343393246CFB5C1D0CDA8D3C3425350B0FC56302E302E315C4B65696C5F4D6F756C645C46574C69625C53433932465F4C69625C7372635C73633932665F63686B73756D2E63000000000E73633932665F63686B73756D2E6300000000FFDC7800FFFFFFFF5A453A5CB9A4D7F75CB9A4D7F7CFEEC4BF5C425350B0FC5C5343393246CFB5C1D0CDA8D3C3425350B0FC56302E302E315C4B65696C5F4D6F756C645C46574C69625C53433932465F4C69625C7372635C73633932665F70776D2E63000000000B73633932665F70776D2E6300000000BECEA100FFFFFFFF5A453A5CB9A4D7F75CB9A4D7F7CFEEC4BF5C425350B0FC5C5343393246CFB5C1D0CDA8D3C3425350B0FC56302E302E315C4B65696C5F4D6F756C645C46574C69625C53433932465F4C69625C7372635C73633932665F7077722E63000000000B73633932665F7077722E6300000000BECEA100FFFFFFFF5B453A5CB9A4D7F75CB9A4D7F7CFEEC4BF5C425350B0FC5C5343393246CFB5C1D0CDA8D3C3425350B0FC56302E302E315C4B65696C5F4D6F756C645C46574C69625C53433932465F4C69625C7372635C73633932665F6770696F2E63000000000C73633932665F6770696F2E6300000000F0A0A100FFFFFFFF5A453A5CB9A4D7F75CB9A4D7F7CFEEC4BF5C425350B0FC5C5343393246CFB5C1D0CDA8D3C3425350B0FC56302E302E315C4B65696C5F4D6F756C645C46574C69625C53433932465F4C69625C7372635C73633932665F6961702E63000000000B73633932665F6961702E6300000000BCA8E100FFFFFFFF56453A5CB9A4D7F75CB9A4D7F7CFEEC4BF5C425350B0FC5C5343393246CFB5C1D0CDA8D3C3425350B0FC56302E302E315C4B45494C5F4D4F554C445C46574C49425C53433932465F4C49425C494E435C53433932462E48000000000753433932462E48000000009CC1B600FFFFFFFF5C453A5CB9A4D7F75CB9A4D7F7CFEEC4BF5C425350B0FC5C5343393246CFB5C1D0CDA8D3C3425350B0FC56302E302E315C4B65696C5F4D6F756C645C46574C49425C53433932465F4C49425C5352435C53433932465F55415254302E43000000000D53433932465F55415254302E4300000000F7B88600FFFFFFFF5C453A5CB9A4D7F75CB9A4D7F7CFEEC4BF5C425350B0FC5C5343393246CFB5C1D0CDA8D3C3425350B0FC56302E302E315C4B45494C5F4D4F554C445C46574C49425C53433932465F4C49425C494E435C53433932465F55415254302E48000000000D53433932465F55415254302E4800000000D9ADC200FFFFFFFF5A453A5CB9A4D7F75CB9A4D7F7CFEEC4BF5C425350B0FC5C5343393246CFB5C1D0CDA8D3C3425350B0FC56302E302E315C4B45494C5F4D4F554C445C46574C49425C53433932465F4C49425C494E435C53433932465F4941502E48000000000B53433932465F4941502E4800000000A5C2D700FFFFFFFF5A453A5CB9A4D7F75CB9A4D7F7CFEEC4BF5C425350B0FC5C5343393246CFB5C1D0CDA8D3C3425350B0FC56302E302E315C4B45494C5F4D4F554C445C46574C49425C53433932465F4C49425C494E435C53433932465F50574D2E48000000000B53433932465F50574D2E4800000000B3A6BE00FFFFFFFF0100000010000000C5D4F200FFDC7800BECEA100F0A0A100BCA8E1009CC1B600F7B88600D9ADC200A5C2D700B3A6BE00EAD6A300F6FA7D00B5E99D005FC3CF00C1838300CACAD50001000000000000000200000041010000660000000006000046020000 + + + + 0 + Build + + -1 + -1 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + E70000004F00000070040000BD000000 + + + 16 + 71010000F0000000FA0400005E010000 + + + + 1005 + 1005 + 1 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + 03000000660000003A01000016020000 + + + 16 + 8A000000A10000006D0100005D020000 + + + + 109 + 109 + 1 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + 03000000660000003A01000016020000 + + + 16 + 8A000000A10000006D0100005D020000 + + + + 1465 + 1465 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + 03000000AC0100006D040000FE010000 + + + 16 + 8A000000A1000000C20200000F010000 + + + + 1466 + 1466 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + 03000000AC0100006D040000FE010000 + + + 16 + 8A000000A1000000C20200000F010000 + + + + 1467 + 1467 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + 03000000AC0100006D040000FE010000 + + + 16 + 8A000000A1000000C20200000F010000 + + + + 1468 + 1468 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + 03000000AC0100006D040000FE010000 + + + 16 + 8A000000A1000000C20200000F010000 + + + + 1506 + 1506 + 0 + 0 + 0 + 0 + 32767 + 0 + 16384 + 0 + + 16 + E3020000660000006D0400008C010000 + + + 16 + 8A000000A10000001A02000031020000 + + + + 1913 + 1913 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + EA000000660000006D040000A4000000 + + + 16 + 8A000000A1000000C20200000F010000 + + + + 1935 + 1935 + 0 + 0 + 0 + 0 + 32767 + 0 + 32768 + 0 + + 16 + 03000000AC0100006D040000FE010000 + + + 16 + 8A000000A10000001A02000031020000 + + + + 1936 + 1936 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + 03000000AC0100006D040000FE010000 + + + 16 + 8A000000A10000001A02000031020000 + + + + 1937 + 1937 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + 03000000AC0100006D040000FE010000 + + + 16 + 8A000000A10000001A02000031020000 + + + + 1939 + 1939 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + 03000000AC0100006D040000FE010000 + + + 16 + 8A000000A1000000C20200000F010000 + + + + 1940 + 1940 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + 03000000AC0100006D040000FE010000 + + + 16 + 8A000000A1000000C20200000F010000 + + + + 1941 + 1941 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + 03000000AC0100006D040000FE010000 + + + 16 + 8A000000A1000000C20200000F010000 + + + + 1942 + 1942 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + 03000000AC0100006D040000FE010000 + + + 16 + 8A000000A1000000C20200000F010000 + + + + 195 + 195 + 1 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + 03000000660000003A01000016020000 + + + 16 + 8A000000A10000006D0100005D020000 + + + + 196 + 196 + 1 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + 03000000660000003A01000016020000 + + + 16 + 8A000000A10000006D0100005D020000 + + + + 197 + 197 + 1 + 0 + 0 + 0 + 32767 + 0 + 32768 + 0 + + 16 + 030000004A020000FD050000F5020000 + + + 16 + 8A000000A1000000C20200000F010000 + + + + 198 + 198 + 0 + 0 + 0 + 0 + 32767 + 0 + 32768 + 0 + + 16 + 00000000950100007004000017020000 + + + 16 + 8A000000A1000000C20200000F010000 + + + + 199 + 199 + 1 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + 030000004A020000FD050000F5020000 + + + 16 + 8A000000A1000000C20200000F010000 + + + + 203 + 203 + 0 + 0 + 0 + 0 + 32767 + 0 + 8192 + 0 + + 16 + EA000000660000006D040000A4000000 + + + 16 + 8A000000A1000000C20200000F010000 + + + + 204 + 204 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + EA000000660000006D040000A4000000 + + + 16 + 8A000000A1000000C20200000F010000 + + + + 221 + 221 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + 00000000000000000000000000000000 + + + 16 + 0A0000000A0000006E0000006E000000 + + + + 2506 + 2506 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + E3020000660000006D0400008C010000 + + + 16 + 8A000000A10000001A02000031020000 + + + + 2507 + 2507 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + 03000000AC0100006D040000FE010000 + + + 16 + 8A000000A1000000C20200000F010000 + + + + 343 + 343 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + EA000000660000006D040000A4000000 + + + 16 + 8A000000A1000000C20200000F010000 + + + + 346 + 346 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + EA000000660000006D040000A4000000 + + + 16 + 8A000000A1000000C20200000F010000 + + + + 35824 + 35824 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + EA000000660000006D040000A4000000 + + + 16 + 8A000000A1000000C20200000F010000 + + + + 35885 + 35885 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + E3020000660000006D0400008C010000 + + + 16 + 8A000000A10000001A02000031020000 + + + + 35886 + 35886 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + E3020000660000006D0400008C010000 + + + 16 + 8A000000A10000001A02000031020000 + + + + 35887 + 35887 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + E3020000660000006D0400008C010000 + + + 16 + 8A000000A10000001A02000031020000 + + + + 35888 + 35888 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + E3020000660000006D0400008C010000 + + + 16 + 8A000000A10000001A02000031020000 + + + + 35889 + 35889 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + E3020000660000006D0400008C010000 + + + 16 + 8A000000A10000001A02000031020000 + + + + 35890 + 35890 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + E3020000660000006D0400008C010000 + + + 16 + 8A000000A10000001A02000031020000 + + + + 35891 + 35891 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + E3020000660000006D0400008C010000 + + + 16 + 8A000000A10000001A02000031020000 + + + + 35892 + 35892 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + E3020000660000006D0400008C010000 + + + 16 + 8A000000A10000001A02000031020000 + + + + 35893 + 35893 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + E3020000660000006D0400008C010000 + + + 16 + 8A000000A10000001A02000031020000 + + + + 35894 + 35894 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + E3020000660000006D0400008C010000 + + + 16 + 8A000000A10000001A02000031020000 + + + + 35895 + 35895 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + E3020000660000006D0400008C010000 + + + 16 + 8A000000A10000001A02000031020000 + + + + 35896 + 35896 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + E3020000660000006D0400008C010000 + + + 16 + 8A000000A10000001A02000031020000 + + + + 35897 + 35897 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + E3020000660000006D0400008C010000 + + + 16 + 8A000000A10000001A02000031020000 + + + + 35898 + 35898 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + E3020000660000006D0400008C010000 + + + 16 + 8A000000A10000001A02000031020000 + + + + 35899 + 35899 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + E3020000660000006D0400008C010000 + + + 16 + 8A000000A10000001A02000031020000 + + + + 35900 + 35900 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + E3020000660000006D0400008C010000 + + + 16 + 8A000000A10000001A02000031020000 + + + + 35901 + 35901 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + E3020000660000006D0400008C010000 + + + 16 + 8A000000A10000001A02000031020000 + + + + 35902 + 35902 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + E3020000660000006D0400008C010000 + + + 16 + 8A000000A10000001A02000031020000 + + + + 35903 + 35903 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + E3020000660000006D0400008C010000 + + + 16 + 8A000000A10000001A02000031020000 + + + + 35904 + 35904 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + E3020000660000006D0400008C010000 + + + 16 + 8A000000A10000001A02000031020000 + + + + 35905 + 35905 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + E3020000660000006D0400008C010000 + + + 16 + 8A000000A10000001A02000031020000 + + + + 38003 + 38003 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + 03000000660000003A01000016020000 + + + 16 + 8A000000A10000006D0100005D020000 + + + + 38007 + 38007 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + 030000004A020000FD050000F5020000 + + + 16 + 8A000000A1000000C20200000F010000 + + + + 436 + 436 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + 030000004A020000FD050000F5020000 + + + 16 + 8A000000A10000006D0100005D020000 + + + + 437 + 437 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + 03000000AC0100006D040000FE010000 + + + 16 + 8A000000A10000001A02000031020000 + + + + 440 + 440 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + 03000000AC0100006D040000FE010000 + + + 16 + 8A000000A10000001A02000031020000 + + + + 59392 + 59392 + 1 + 0 + 0 + 0 + 940 + 0 + 8192 + 0 + + 16 + 0000000000000000B70300001C000000 + + + 16 + 0A0000000A0000006E0000006E000000 + + + + 59393 + 0 + 1 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + 000000000E0300000006000021030000 + + + 16 + 0A0000000A0000006E0000006E000000 + + + + 59399 + 59399 + 1 + 0 + 0 + 0 + 439 + 0 + 8192 + 1 + + 16 + 000000001C000000C201000038000000 + + + 16 + 0A0000000A0000006E0000006E000000 + + + + 59400 + 59400 + 0 + 0 + 0 + 0 + 612 + 0 + 8192 + 2 + + 16 + 00000000380000006F02000054000000 + + + 16 + 0A0000000A0000006E0000006E000000 + + + + 2619 + 000000000B000000000000000020000000000000FFFFFFFFFFFFFFFFE7000000BD00000070040000C1000000000000000100000004000000010000000000000000000000FFFFFFFF06000000CB00000057010000CC000000F08B00005A01000079070000FFFF02000B004354616262656450616E65002000000000000071010000F0000000FA0400005E010000E70000004F00000070040000BD0000000000000040280046060000000B446973617373656D626C7900000000CB00000001000000FFFFFFFFFFFFFFFF14506572666F726D616E636520416E616C797A6572000000005701000001000000FFFFFFFFFFFFFFFF14506572666F726D616E636520416E616C797A657200000000CC00000001000000FFFFFFFFFFFFFFFF0E4C6F67696320416E616C797A657200000000F08B000001000000FFFFFFFFFFFFFFFF0D436F646520436F766572616765000000005A01000001000000FFFFFFFFFFFFFFFF11496E737472756374696F6E205472616365000000007907000001000000FFFFFFFFFFFFFFFFFFFFFFFF000000000000000000000000000000000000000001000000FFFFFFFFCB00000001000000FFFFFFFFCB000000000000000040000000000000FFFFFFFFFFFFFFFFDC0200004F000000E0020000A5010000000000000200000004000000010000000000000000000000FFFFFFFF17000000E2050000CA0900002D8C00002E8C00002F8C0000308C0000318C0000328C0000338C0000348C0000358C0000368C0000378C0000388C0000398C00003A8C00003B8C00003C8C00003D8C00003E8C00003F8C0000408C0000418C0000018000400000000000006A030000F0000000FA04000046020000E00200004F00000070040000A50100000000000040410046170000000753796D626F6C7300000000E205000001000000FFFFFFFFFFFFFFFF0A5472616365204461746100000000CA09000001000000FFFFFFFFFFFFFFFF00000000002D8C000001000000FFFFFFFFFFFFFFFF00000000002E8C000001000000FFFFFFFFFFFFFFFF00000000002F8C000001000000FFFFFFFFFFFFFFFF0000000000308C000001000000FFFFFFFFFFFFFFFF0000000000318C000001000000FFFFFFFFFFFFFFFF0000000000328C000001000000FFFFFFFFFFFFFFFF0000000000338C000001000000FFFFFFFFFFFFFFFF0000000000348C000001000000FFFFFFFFFFFFFFFF0000000000358C000001000000FFFFFFFFFFFFFFFF0000000000368C000001000000FFFFFFFFFFFFFFFF0000000000378C000001000000FFFFFFFFFFFFFFFF0000000000388C000001000000FFFFFFFFFFFFFFFF0000000000398C000001000000FFFFFFFFFFFFFFFF00000000003A8C000001000000FFFFFFFFFFFFFFFF00000000003B8C000001000000FFFFFFFFFFFFFFFF00000000003C8C000001000000FFFFFFFFFFFFFFFF00000000003D8C000001000000FFFFFFFFFFFFFFFF00000000003E8C000001000000FFFFFFFFFFFFFFFF00000000003F8C000001000000FFFFFFFFFFFFFFFF0000000000408C000001000000FFFFFFFFFFFFFFFF0000000000418C000001000000FFFFFFFFFFFFFFFFFFFFFFFF000000000000000000000000000000000000000001000000FFFFFFFFE205000001000000FFFFFFFFE2050000000000000010000001000000FFFFFFFFFFFFFFFF3D0100004F000000410100002F02000001000000020000100400000001000000F6FEFFFFEB040000FFFFFFFF05000000ED0300006D000000C3000000C400000073940000018000100000010000008A000000F0000000C7010000D0020000000000004F0000003D0100002F0200000000000040140056050000000750726F6A65637401000000ED03000001000000FFFFFFFFFFFFFFFF05426F6F6B73010000006D00000001000000FFFFFFFFFFFFFFFF0946756E6374696F6E7301000000C300000001000000FFFFFFFFFFFFFFFF0954656D706C6174657301000000C400000001000000FFFFFFFFFFFFFFFF09526567697374657273000000007394000001000000FFFFFFFFFFFFFFFF00000000000000000000000000000000000000000000000001000000FFFFFFFFED03000001000000FFFFFFFFED030000000000000080000000000000FFFFFFFFFFFFFFFF0000000091010000700400009501000000000000010000000400000001000000000000000000000000000000000000000000000001000000C6000000FFFFFFFF0E0000008F070000930700009407000095070000960700009007000091070000B5010000B8010000B9050000BA050000BB050000BC050000CB090000018000800000000000008A00000036020000FA040000B80200000000000095010000700400001702000000000000404100460E0000001343616C6C20537461636B202B204C6F63616C73000000008F07000001000000FFFFFFFFFFFFFFFF0755415254202331000000009307000001000000FFFFFFFFFFFFFFFF0755415254202332000000009407000001000000FFFFFFFFFFFFFFFF0755415254202333000000009507000001000000FFFFFFFFFFFFFFFF15446562756720287072696E74662920566965776572000000009607000001000000FFFFFFFFFFFFFFFF0757617463682031000000009007000001000000FFFFFFFFFFFFFFFF0757617463682032000000009107000001000000FFFFFFFFFFFFFFFF10547261636520457863657074696F6E7300000000B501000001000000FFFFFFFFFFFFFFFF0E4576656E7420436F756E7465727300000000B801000001000000FFFFFFFFFFFFFFFF084D656D6F7279203100000000B905000001000000FFFFFFFFFFFFFFFF084D656D6F7279203200000000BA05000001000000FFFFFFFFFFFFFFFF084D656D6F7279203300000000BB05000001000000FFFFFFFFFFFFFFFF084D656D6F7279203400000000BC05000001000000FFFFFFFFFFFFFFFF105472616365204E617669676174696F6E00000000CB09000001000000FFFFFFFFFFFFFFFFFFFFFFFF0000000001000000000000000000000001000000FFFFFFFF38020000950100003C0200001702000000000000020000000400000000000000000000000000000000000000000000000000000002000000C6000000FFFFFFFF8F07000001000000FFFFFFFF8F07000001000000C6000000000000000080000001000000FFFFFFFFFFFFFFFF000000002F02000000060000330200000100000001000010040000000100000021FEFFFFD5000000FFFFFFFF04000000C5000000C7000000B401000077940000018000800000010000008A000000D40200008A060000AF0300000000000033020000000600000E0300000000000040820056040000000C4275696C64204F757470757401000000C500000001000000FFFFFFFFFFFFFFFF0D46696E6420496E2046696C657301000000C700000001000000FFFFFFFFFFFFFFFF0A4572726F72204C69737400000000B401000001000000FFFFFFFFFFFFFFFF0742726F77736572000000007794000001000000FFFFFFFFFFFFFFFF00000000000000000000000000000000000000000000000001000000FFFFFFFFC500000001000000FFFFFFFFC5000000000000000000000000000000 + + + 59392 + File + + 2362 + 00200000010000002800FFFF01001100434D4643546F6F6C426172427574746F6E00E100000000000000000000000000000000000000000000000100000001000000018001E100000000000001000000000000000000000000000000000100000001000000018003E1000000000000020000000000000000000000000000000001000000010000000180CD7F0000000000000300000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF000000000000000000000000000100000001000000018023E100000000040004000000000000000000000000000000000100000001000000018022E100000000040005000000000000000000000000000000000100000001000000018025E10000000000000600000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF00000000000000000000000000010000000100000001802BE10000000004000700000000000000000000000000000000010000000100000001802CE10000000004000800000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF00000000000000000000000000010000000100000001807A8A0000000004000900000000000000000000000000000000010000000100000001807B8A0000000004000A00000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF0000000000000000000000000001000000010000000180D3B00000000000000B000000000000000000000000000000000100000001000000018015B10000000004000C0000000000000000000000000000000001000000010000000180F4B00000000004000D000000000000000000000000000000000100000001000000018036B10000000004000E00000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF0000000000000000000000000001000000010000000180FF88000000000400460000000000000000000000000000000001000000010000000180FE880000000004004500000000000000000000000000000000010000000100000001800B810000000004001300000000000000000000000000000000010000000100000001800C810000000004001400000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF0000000000000000000000000001000000010000000180F0880000020000000F000000000000000000000000000000000100000001000000FFFF0100120043555646696E64436F6D626F427574746F6EE80300000000000000000000000000000000000000000000000100000001000000960000000200205000000000025030960000000000000011000250300F5343445F434F4D5F4269744C6973740C5343445F434F4D5F4C6973740F5343445F5345475F4269744C6973740E5343445F4E545F547970654465660C5343447269766572496E69740F5343445F4E545F536567436F756E740C5343445F4E545F436F756E740A5343445F436F6D4E756D1250574D5F506F6C6172697479436F6E666967095343393546387832782E23696620646566696E6564202873633935663878327829207C7C20646566696E6564202873633935663778327829095343393566387831782E23696620646566696E6564202853433935663878317829207C7C20646566696E656420285343393566377831782902B7E407476F546F4150501D49454336303733305F4350555F5265675F546573745F52756E54696D650000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000018024E10000000000001100000000000000000000000000000000010000000100000001800A810000000000001200000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF000000000000000000000000000100000001000000018022800000020000001500000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF0000000000000000000000000001000000010000000180C488000000000400160000000000000000000000000000000001000000010000000180C988000000000400180000000000000000000000000000000001000000010000000180C788000000000000190000000000000000000000000000000001000000010000000180C8880000000000001700000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF000000000000000000000000000100000001000000FFFF01001500434D4643546F6F6C4261724D656E75427574746F6E4C010000020001001A0000000F50726F6A6563742057696E646F7773000000000000000000000000010000000100000000000000000000000100000008002880DD880000000000001A0000000750726F6A656374000000000000000000000000010000000100000000000000000000000100000000002880DC8B0000000000003A00000005426F6F6B73000000000000000000000000010000000100000000000000000000000100000000002880E18B0000000000003B0000000946756E6374696F6E73000000000000000000000000010000000100000000000000000000000100000000002880E28B000000000000400000000954656D706C6174657300000000000000000000000001000000010000000000000000000000010000000000288018890000000000003D0000000E536F757263652042726F777365720000000000000000000000000100000001000000000000000000000001000000000028800000000000000400FFFFFFFF00000000000000000001000000000000000100000000000000000000000100000000002880D988000000000000390000000C4275696C64204F7574707574000000000000000000000000010000000100000000000000000000000100000000002880E38B000000000000410000000B46696E64204F75747075740000000000000000000000000100000001000000000000000000000001000000000001800000000001000000FFFFFFFF0000000000000000000000000001000000010000000180FB7F0000000000001B000000000000000000000000000000000100000001000000000000000446696C65AC030000 + + + 1423 + 2800FFFF01001100434D4643546F6F6C426172427574746F6E00E1000000000000FFFFFFFF000100000000000000010000000000000001000000018001E1000000000000FFFFFFFF000100000000000000010000000000000001000000018003E1000000000000FFFFFFFF0001000000000000000100000000000000010000000180CD7F000000000000FFFFFFFF00010000000000000001000000000000000100000001800000000000000000FFFFFFFF000000000000000000010000000000000001000000018023E1000000000000FFFFFFFF000100000000000000010000000000000001000000018022E1000000000000FFFFFFFF000100000000000000010000000000000001000000018025E1000000000000FFFFFFFF00010000000000000001000000000000000100000001800000000000000000FFFFFFFF00000000000000000001000000000000000100000001802BE1000000000000FFFFFFFF00010000000000000001000000000000000100000001802CE1000000000000FFFFFFFF00010000000000000001000000000000000100000001800000000000000000FFFFFFFF00000000000000000001000000000000000100000001807A8A000000000000FFFFFFFF00010000000000000001000000000000000100000001807B8A000000000000FFFFFFFF00010000000000000001000000000000000100000001800000000000000000FFFFFFFF0000000000000000000100000000000000010000000180D3B0000000000000FFFFFFFF000100000000000000010000000000000001000000018015B1000000000000FFFFFFFF0001000000000000000100000000000000010000000180F4B0000000000000FFFFFFFF000100000000000000010000000000000001000000018036B1000000000000FFFFFFFF00010000000000000001000000000000000100000001800000000000000000FFFFFFFF0000000000000000000100000000000000010000000180FF88000000000000FFFFFFFF0001000000000000000100000000000000010000000180FE88000000000000FFFFFFFF00010000000000000001000000000000000100000001800B81000000000000FFFFFFFF00010000000000000001000000000000000100000001800C81000000000000FFFFFFFF00010000000000000001000000000000000100000001800000000000000000FFFFFFFF0000000000000000000100000000000000010000000180F088000000000000FFFFFFFF0001000000000000000100000000000000010000000180EE7F000000000000FFFFFFFF000100000000000000010000000000000001000000018024E1000000000000FFFFFFFF00010000000000000001000000000000000100000001800A81000000000000FFFFFFFF00010000000000000001000000000000000100000001800000000000000000FFFFFFFF00000000000000000001000000000000000100000001802280000000000000FFFFFFFF00010000000000000001000000000000000100000001800000000000000000FFFFFFFF0000000000000000000100000000000000010000000180C488000000000000FFFFFFFF0001000000000000000100000000000000010000000180C988000000000000FFFFFFFF0001000000000000000100000000000000010000000180C788000000000000FFFFFFFF0001000000000000000100000000000000010000000180C888000000000000FFFFFFFF00010000000000000001000000000000000100000001800000000000000000FFFFFFFF0000000000000000000100000000000000010000000180DD88000000000000FFFFFFFF00010000000000000001000000000000000100000001800000000000000000FFFFFFFF0000000000000000000100000000000000010000000180FB7F000000000000FFFFFFFF000100000000000000010000000000000001000000 + + + 1423 + 2800FFFF01001100434D4643546F6F6C426172427574746F6E00E100000000000000000000000000000000000000000000000100000001000000018001E100000000000001000000000000000000000000000000000100000001000000018003E1000000000000020000000000000000000000000000000001000000010000000180CD7F0000000000000300000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF000000000000000000000000000100000001000000018023E100000000000004000000000000000000000000000000000100000001000000018022E100000000000005000000000000000000000000000000000100000001000000018025E10000000000000600000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF00000000000000000000000000010000000100000001802BE10000000000000700000000000000000000000000000000010000000100000001802CE10000000000000800000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF00000000000000000000000000010000000100000001807A8A0000000000000900000000000000000000000000000000010000000100000001807B8A0000000000000A00000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF0000000000000000000000000001000000010000000180D3B00000000000000B000000000000000000000000000000000100000001000000018015B10000000000000C0000000000000000000000000000000001000000010000000180F4B00000000000000D000000000000000000000000000000000100000001000000018036B10000000000000E00000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF0000000000000000000000000001000000010000000180FF880000000000000F0000000000000000000000000000000001000000010000000180FE880000000000001000000000000000000000000000000000010000000100000001800B810000000000001100000000000000000000000000000000010000000100000001800C810000000000001200000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF0000000000000000000000000001000000010000000180F088000000000000130000000000000000000000000000000001000000010000000180EE7F00000000000014000000000000000000000000000000000100000001000000018024E10000000000001500000000000000000000000000000000010000000100000001800A810000000000001600000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF000000000000000000000000000100000001000000018022800000000000001700000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF0000000000000000000000000001000000010000000180C488000000000000180000000000000000000000000000000001000000010000000180C988000000000000190000000000000000000000000000000001000000010000000180C7880000000000001A0000000000000000000000000000000001000000010000000180C8880000000000001B00000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF0000000000000000000000000001000000010000000180DD880000000000001C00000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF0000000000000000000000000001000000010000000180FB7F0000000000001D000000000000000000000000000000000100000001000000 + + + + 59399 + Build + + 655 + 00200000010000000F00FFFF01001100434D4643546F6F6C426172427574746F6ECF7F0000000004001C0000000000000000000000000000000001000000010000000180D07F0000000000001D000000000000000000000000000000000100000001000000018030800000000000001E00000000000000000000000000000000010000000100000001809E8A0000000004001F0000000000000000000000000000000001000000010000000180D17F0000000004002000000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF00000000000000000000000000010000000100000001804C8A0000000000002100000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF000000000000000000000000000100000001000000FFFF01001900434D4643546F6F6C426172436F6D626F426F78427574746F6EBA00000000000000000000000000000000000000000000000001000000010000009600000003002050000000000E3C70726F6A656374206E616D653E960000000000000001000E3C70726F6A656374206E616D653E000000000180EB880000000000002200000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF0000000000000000000000000001000000010000000180C07F000000000000230000000000000000000000000000000001000000010000000180B08A000000000400240000000000000000000000000000000001000000010000000180A8010000000004004E0000000000000000000000000000000001000000010000000180BE010000000004005000000000000000000000000000000000010000000100000000000000054275696C64B7010000 + + + 548 + 0F00FFFF01001100434D4643546F6F6C426172427574746F6ECF7F000000000000FFFFFFFF0001000000000000000100000000000000010000000180D07F000000000000FFFFFFFF00010000000000000001000000000000000100000001803080000000000000FFFFFFFF00010000000000000001000000000000000100000001809E8A000000000000FFFFFFFF0001000000000000000100000000000000010000000180D17F000000000000FFFFFFFF00010000000000000001000000000000000100000001800000000000000000FFFFFFFF00000000000000000001000000000000000100000001804C8A000000000000FFFFFFFF00010000000000000001000000000000000100000001800000000000000000FFFFFFFF00000000000000000001000000000000000100000001806680000000000000FFFFFFFF0001000000000000000100000000000000010000000180EB88000000000000FFFFFFFF00010000000000000001000000000000000100000001800000000000000000FFFFFFFF0000000000000000000100000000000000010000000180C07F000000000000FFFFFFFF0001000000000000000100000000000000010000000180B08A000000000000FFFFFFFF0001000000000000000100000000000000010000000180A801000000000000FFFFFFFF0001000000000000000100000000000000010000000180BE01000000000000FFFFFFFF000100000000000000010000000000000001000000 + + + 548 + 0F00FFFF01001100434D4643546F6F6C426172427574746F6ECF7F000000000000000000000000000000000000000000000001000000010000000180D07F00000000000001000000000000000000000000000000000100000001000000018030800000000000000200000000000000000000000000000000010000000100000001809E8A000000000000030000000000000000000000000000000001000000010000000180D17F0000000000000400000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF00000000000000000000000000010000000100000001804C8A0000000000000500000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF00000000000000000000000000010000000100000001806680000000000000060000000000000000000000000000000001000000010000000180EB880000000000000700000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF0000000000000000000000000001000000010000000180C07F000000000000080000000000000000000000000000000001000000010000000180B08A000000000000090000000000000000000000000000000001000000010000000180A8010000000000000A0000000000000000000000000000000001000000010000000180BE010000000000000B000000000000000000000000000000000100000001000000 + + + + 59400 + Debug + + 2220 + 00200000000000001900FFFF01001100434D4643546F6F6C426172427574746F6ECC880000000000002500000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF000000000000000000000000000100000001000000018017800000000000002600000000000000000000000000000000010000000100000001801D800000000000002700000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF00000000000000000000000000010000000100000001801A800000000000002800000000000000000000000000000000010000000100000001801B80000000000000290000000000000000000000000000000001000000010000000180E57F0000000000002A00000000000000000000000000000000010000000100000001801C800000000000002B00000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF000000000000000000000000000100000001000000018000890000000000002C00000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF0000000000000000000000000001000000010000000180E48B0000000000002D0000000000000000000000000000000001000000010000000180F07F0000000000002E0000000000000000000000000000000001000000010000000180E8880000000000003700000000000000000000000000000000010000000100000001803B010000000000002F0000000000000000000000000000000001000000010000000180BB8A00000000000030000000000000000000000000000000000100000001000000FFFF01001500434D4643546F6F6C4261724D656E75427574746F6E0E01000000000000310000000D57617463682057696E646F7773000000000000000000000000010000000100000000000000000000000100000002001380D88B000000000000310000000757617463682031000000000000000000000000010000000100000000000000000000000100000000001380D98B0000000000003100000007576174636820320000000000000000000000000100000001000000000000000000000001000000000013800F01000000000000320000000E4D656D6F72792057696E646F7773000000000000000000000000010000000100000000000000000000000100000004001380D28B00000000000032000000084D656D6F72792031000000000000000000000000010000000100000000000000000000000100000000001380D38B00000000000032000000084D656D6F72792032000000000000000000000000010000000100000000000000000000000100000000001380D48B00000000000032000000084D656D6F72792033000000000000000000000000010000000100000000000000000000000100000000001380D58B00000000000032000000084D656D6F727920340000000000000000000000000100000001000000000000000000000001000000000013801001000000000000330000000E53657269616C2057696E646F77730000000000000000000000000100000001000000000000000000000001000000040013809307000000000000330000000755415254202331000000000000000000000000010000000100000000000000000000000100000000001380940700000000000033000000075541525420233200000000000000000000000001000000010000000000000000000000010000000000138095070000000000003300000007554152542023330000000000000000000000000100000001000000000000000000000001000000000013809607000000000000330000000E49544D2F525441205669657765720000000000000000000000000100000001000000000000000000000001000000000013803C010000000000003400000010416E616C797369732057696E646F7773000000000000000000000000010000000100000000000000000000000100000003001380658A000000000000340000000E4C6F67696320416E616C797A6572000000000000000000000000010000000100000000000000000000000100000000001380DC7F0000000000003E00000014506572666F726D616E636520416E616C797A6572000000000000000000000000010000000100000000000000000000000100000000001380E788000000000000380000000D436F646520436F76657261676500000000000000000000000001000000010000000000000000000000010000000000138053010000000000003F0000000D54726163652057696E646F77730000000000000000000000000100000001000000000000000000000001000000010013805401000000000000FFFFFFFF115472616365204D656E7520416E63686F720100000000000000010000000000000001000000000000000000000001000000000013802901000000000000350000001553797374656D205669657765722057696E646F77730000000000000000000000000100000001000000000000000000000001000000010013804B01000000000000FFFFFFFF1453797374656D2056696577657220416E63686F720100000000000000010000000000000001000000000000000000000001000000000001800000000001000000FFFFFFFF000000000000000000000000000100000001000000138001890000000000003600000007546F6F6C626F7800000000000000000000000001000000010000000000000000000000010000000300138044C5000000000000FFFFFFFF0E5570646174652057696E646F77730100000000000000010000000000000001000000000000000000000001000000000013800000000000000400FFFFFFFF000000000000000000010000000000000001000000000000000000000001000000000013805B01000000000000FFFFFFFF12546F6F6C626F78204D656E75416E63686F72010000000000000001000000000000000100000000000000000000000100000000000000000005446562756764020000 + + + 898 + 1900FFFF01001100434D4643546F6F6C426172427574746F6ECC88000000000000FFFFFFFF00010000000000000001000000000000000100000001800000000000000000FFFFFFFF00000000000000000001000000000000000100000001801780000000000000FFFFFFFF00010000000000000001000000000000000100000001801D80000000000000FFFFFFFF00010000000000000001000000000000000100000001800000000000000000FFFFFFFF00000000000000000001000000000000000100000001801A80000000000000FFFFFFFF00010000000000000001000000000000000100000001801B80000000000000FFFFFFFF0001000000000000000100000000000000010000000180E57F000000000000FFFFFFFF00010000000000000001000000000000000100000001801C80000000000000FFFFFFFF00010000000000000001000000000000000100000001800000000000000000FFFFFFFF00000000000000000001000000000000000100000001800089000000000000FFFFFFFF00010000000000000001000000000000000100000001800000000000000000FFFFFFFF0000000000000000000100000000000000010000000180E48B000000000000FFFFFFFF0001000000000000000100000000000000010000000180F07F000000000000FFFFFFFF0001000000000000000100000000000000010000000180E888000000000000FFFFFFFF00010000000000000001000000000000000100000001803B01000000000000FFFFFFFF0001000000000000000100000000000000010000000180BB8A000000000000FFFFFFFF0001000000000000000100000000000000010000000180D88B000000000000FFFFFFFF0001000000000000000100000000000000010000000180D28B000000000000FFFFFFFF00010000000000000001000000000000000100000001809307000000000000FFFFFFFF0001000000000000000100000000000000010000000180658A000000000000FFFFFFFF0001000000000000000100000000000000010000000180C18A000000000000FFFFFFFF0001000000000000000100000000000000010000000180EE8B000000000000FFFFFFFF00010000000000000001000000000000000100000001800000000000000000FFFFFFFF00000000000000000001000000000000000100000001800189000000000000FFFFFFFF000100000000000000010000000000000001000000 + + + 898 + 1900FFFF01001100434D4643546F6F6C426172427574746F6ECC880000000000000000000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF000000000000000000000000000100000001000000018017800000000000000100000000000000000000000000000000010000000100000001801D800000000000000200000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF00000000000000000000000000010000000100000001801A800000000000000300000000000000000000000000000000010000000100000001801B80000000000000040000000000000000000000000000000001000000010000000180E57F0000000000000500000000000000000000000000000000010000000100000001801C800000000000000600000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF000000000000000000000000000100000001000000018000890000000000000700000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF0000000000000000000000000001000000010000000180E48B000000000000080000000000000000000000000000000001000000010000000180F07F000000000000090000000000000000000000000000000001000000010000000180E8880000000000000A00000000000000000000000000000000010000000100000001803B010000000000000B0000000000000000000000000000000001000000010000000180BB8A0000000000000C0000000000000000000000000000000001000000010000000180D88B0000000000000D0000000000000000000000000000000001000000010000000180D28B0000000000000E000000000000000000000000000000000100000001000000018093070000000000000F0000000000000000000000000000000001000000010000000180658A000000000000100000000000000000000000000000000001000000010000000180C18A000000000000110000000000000000000000000000000001000000010000000180EE8B0000000000001200000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF0000000000000000000000000001000000010000000180018900000000000013000000000000000000000000000000000100000001000000 + + + + 0 + 1536 + 864 + + + + 1 + Debug + + -1 + -1 + 1 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + E70000004F00000000060000BD000000 + + + 16 + E70000006600000000060000D4000000 + + + + 1005 + 1005 + 1 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + 0300000066000000E000000022020000 + + + 16 + 8A000000A10000006D0100005D020000 + + + + 109 + 109 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + 0300000066000000E000000022020000 + + + 16 + 8A000000A10000006D0100005D020000 + + + + 1465 + 1465 + 1 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + 0703000056020000FD050000F5020000 + + + 16 + 8A000000A1000000C20200000F010000 + + + + 1466 + 1466 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + 0703000056020000FD050000F5020000 + + + 16 + 8A000000A1000000C20200000F010000 + + + + 1467 + 1467 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + 0703000056020000FD050000F5020000 + + + 16 + 8A000000A1000000C20200000F010000 + + + + 1468 + 1468 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + 0703000056020000FD050000F5020000 + + + 16 + 8A000000A1000000C20200000F010000 + + + + 1506 + 1506 + 0 + 0 + 0 + 0 + 32767 + 0 + 16384 + 0 + + 16 + E3020000660000006D0400008C010000 + + + 16 + 8A000000A10000001A02000031020000 + + + + 1913 + 1913 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + EA00000066000000FD050000A4000000 + + + 16 + 8A000000A1000000C20200000F010000 + + + + 1935 + 1935 + 1 + 0 + 0 + 0 + 32767 + 0 + 32768 + 0 + + 16 + 0703000056020000FD050000F5020000 + + + 16 + 8A000000A10000001A02000031020000 + + + + 1936 + 1936 + 1 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + 0703000056020000FD050000F5020000 + + + 16 + 8A000000A10000001A02000031020000 + + + + 1937 + 1937 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + 0703000056020000FD050000F5020000 + + + 16 + 8A000000A10000001A02000031020000 + + + + 1939 + 1939 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + 0703000056020000FD050000F5020000 + + + 16 + 8A000000A1000000C20200000F010000 + + + + 1940 + 1940 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + 0703000056020000FD050000F5020000 + + + 16 + 8A000000A1000000C20200000F010000 + + + + 1941 + 1941 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + 0703000056020000FD050000F5020000 + + + 16 + 8A000000A1000000C20200000F010000 + + + + 1942 + 1942 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + 0703000056020000FD050000F5020000 + + + 16 + 8A000000A1000000C20200000F010000 + + + + 195 + 195 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + 0300000066000000E000000022020000 + + + 16 + 8A000000A10000006D0100005D020000 + + + + 196 + 196 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + 0300000066000000E000000022020000 + + + 16 + 8A000000A10000006D0100005D020000 + + + + 197 + 197 + 0 + 0 + 0 + 0 + 32767 + 0 + 32768 + 0 + + 16 + 03000000C00100006D040000FE010000 + + + 16 + 8A000000A1000000C20200000F010000 + + + + 198 + 198 + 1 + 0 + 0 + 0 + 32767 + 0 + 32768 + 0 + + 16 + 000000003F020000000300000E030000 + + + 16 + 8A000000A1000000C20200000F010000 + + + + 199 + 199 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + 03000000C00100006D040000FE010000 + + + 16 + 8A000000A1000000C20200000F010000 + + + + 203 + 203 + 1 + 0 + 0 + 0 + 32767 + 0 + 8192 + 0 + + 16 + E70000006300000000060000BD000000 + + + 16 + 8A000000A1000000C20200000F010000 + + + + 204 + 204 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + EA00000066000000FD050000A4000000 + + + 16 + 8A000000A1000000C20200000F010000 + + + + 221 + 221 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + 00000000000000000000000000000000 + + + 16 + 0A0000000A0000006E0000006E000000 + + + + 2506 + 2506 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + E3020000660000006D0400008C010000 + + + 16 + 8A000000A10000001A02000031020000 + + + + 2507 + 2507 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + 0703000056020000FD050000F5020000 + + + 16 + 8A000000A1000000C20200000F010000 + + + + 343 + 343 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + EA00000066000000FD050000A4000000 + + + 16 + 8A000000A1000000C20200000F010000 + + + + 346 + 346 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + EA00000066000000FD050000A4000000 + + + 16 + 8A000000A1000000C20200000F010000 + + + + 35824 + 35824 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + EA00000066000000FD050000A4000000 + + + 16 + 8A000000A1000000C20200000F010000 + + + + 35885 + 35885 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + E3020000660000006D0400008C010000 + + + 16 + 8A000000A10000001A02000031020000 + + + + 35886 + 35886 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + E3020000660000006D0400008C010000 + + + 16 + 8A000000A10000001A02000031020000 + + + + 35887 + 35887 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + E3020000660000006D0400008C010000 + + + 16 + 8A000000A10000001A02000031020000 + + + + 35888 + 35888 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + E3020000660000006D0400008C010000 + + + 16 + 8A000000A10000001A02000031020000 + + + + 35889 + 35889 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + E3020000660000006D0400008C010000 + + + 16 + 8A000000A10000001A02000031020000 + + + + 35890 + 35890 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + E3020000660000006D0400008C010000 + + + 16 + 8A000000A10000001A02000031020000 + + + + 35891 + 35891 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + E3020000660000006D0400008C010000 + + + 16 + 8A000000A10000001A02000031020000 + + + + 35892 + 35892 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + E3020000660000006D0400008C010000 + + + 16 + 8A000000A10000001A02000031020000 + + + + 35893 + 35893 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + E3020000660000006D0400008C010000 + + + 16 + 8A000000A10000001A02000031020000 + + + + 35894 + 35894 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + E3020000660000006D0400008C010000 + + + 16 + 8A000000A10000001A02000031020000 + + + + 35895 + 35895 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + E3020000660000006D0400008C010000 + + + 16 + 8A000000A10000001A02000031020000 + + + + 35896 + 35896 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + E3020000660000006D0400008C010000 + + + 16 + 8A000000A10000001A02000031020000 + + + + 35897 + 35897 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + E3020000660000006D0400008C010000 + + + 16 + 8A000000A10000001A02000031020000 + + + + 35898 + 35898 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + E3020000660000006D0400008C010000 + + + 16 + 8A000000A10000001A02000031020000 + + + + 35899 + 35899 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + E3020000660000006D0400008C010000 + + + 16 + 8A000000A10000001A02000031020000 + + + + 35900 + 35900 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + E3020000660000006D0400008C010000 + + + 16 + 8A000000A10000001A02000031020000 + + + + 35901 + 35901 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + E3020000660000006D0400008C010000 + + + 16 + 8A000000A10000001A02000031020000 + + + + 35902 + 35902 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + E3020000660000006D0400008C010000 + + + 16 + 8A000000A10000001A02000031020000 + + + + 35903 + 35903 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + E3020000660000006D0400008C010000 + + + 16 + 8A000000A10000001A02000031020000 + + + + 35904 + 35904 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + E3020000660000006D0400008C010000 + + + 16 + 8A000000A10000001A02000031020000 + + + + 35905 + 35905 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + E3020000660000006D0400008C010000 + + + 16 + 8A000000A10000001A02000031020000 + + + + 38003 + 38003 + 1 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + 0300000066000000E000000022020000 + + + 16 + 8A000000A10000006D0100005D020000 + + + + 38007 + 38007 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + 03000000C00100006D040000FE010000 + + + 16 + 8A000000A1000000C20200000F010000 + + + + 436 + 436 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + 03000000C00100006D040000FE010000 + + + 16 + 8A000000A10000006D0100005D020000 + + + + 437 + 437 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + 0703000056020000FD050000F5020000 + + + 16 + 8A000000A10000001A02000031020000 + + + + 440 + 440 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + 0703000056020000FD050000F5020000 + + + 16 + 8A000000A10000001A02000031020000 + + + + 59392 + 59392 + 1 + 0 + 0 + 0 + 940 + 0 + 8192 + 0 + + 16 + 0000000000000000B70300001C000000 + + + 16 + 0A0000000A0000006E0000006E000000 + + + + 59393 + 0 + 1 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + 000000000E0300000006000021030000 + + + 16 + 0A0000000A0000006E0000006E000000 + + + + 59399 + 59399 + 0 + 0 + 0 + 0 + 439 + 0 + 8192 + 1 + + 16 + 000000001C000000C201000038000000 + + + 16 + 0A0000000A0000006E0000006E000000 + + + + 59400 + 59400 + 1 + 0 + 0 + 0 + 612 + 0 + 8192 + 2 + + 16 + 000000001C0000006F02000038000000 + + + 16 + 0A0000000A0000006E0000006E000000 + + + + 2618 + 000000000B000000000000000020000001000000FFFFFFFFFFFFFFFFE7000000BD00000000060000C1000000010000000100001004000000010000000000000000000000FFFFFFFF06000000CB00000057010000CC000000F08B00005A01000079070000FFFF02000B004354616262656450616E650020000001000000E70000006600000000060000D4000000E70000004F00000000060000BD0000000000000040280056060000000B446973617373656D626C7901000000CB00000001000000FFFFFFFFFFFFFFFF14506572666F726D616E636520416E616C797A6572000000005701000001000000FFFFFFFFFFFFFFFF14506572666F726D616E636520416E616C797A657200000000CC00000001000000FFFFFFFFFFFFFFFF0E4C6F67696320416E616C797A657200000000F08B000001000000FFFFFFFFFFFFFFFF0D436F646520436F766572616765000000005A01000001000000FFFFFFFFFFFFFFFF11496E737472756374696F6E205472616365000000007907000001000000FFFFFFFFFFFFFFFF00000000000000000000000000000000000000000000000001000000FFFFFFFFCB00000001000000FFFFFFFFCB000000000000000040000000000000FFFFFFFFFFFFFFFFDC0200004F000000E0020000A5010000000000000200000004000000010000000000000000000000FFFFFFFF17000000E2050000CA0900002D8C00002E8C00002F8C0000308C0000318C0000328C0000338C0000348C0000358C0000368C0000378C0000388C0000398C00003A8C00003B8C00003C8C00003D8C00003E8C00003F8C0000408C0000418C000001800040000000000000E00200006600000070040000BC010000E00200004F00000070040000A50100000000000040410046170000000753796D626F6C7300000000E205000001000000FFFFFFFFFFFFFFFF0A5472616365204461746100000000CA09000001000000FFFFFFFFFFFFFFFF00000000002D8C000001000000FFFFFFFFFFFFFFFF00000000002E8C000001000000FFFFFFFFFFFFFFFF00000000002F8C000001000000FFFFFFFFFFFFFFFF0000000000308C000001000000FFFFFFFFFFFFFFFF0000000000318C000001000000FFFFFFFFFFFFFFFF0000000000328C000001000000FFFFFFFFFFFFFFFF0000000000338C000001000000FFFFFFFFFFFFFFFF0000000000348C000001000000FFFFFFFFFFFFFFFF0000000000358C000001000000FFFFFFFFFFFFFFFF0000000000368C000001000000FFFFFFFFFFFFFFFF0000000000378C000001000000FFFFFFFFFFFFFFFF0000000000388C000001000000FFFFFFFFFFFFFFFF0000000000398C000001000000FFFFFFFFFFFFFFFF00000000003A8C000001000000FFFFFFFFFFFFFFFF00000000003B8C000001000000FFFFFFFFFFFFFFFF00000000003C8C000001000000FFFFFFFFFFFFFFFF00000000003D8C000001000000FFFFFFFFFFFFFFFF00000000003E8C000001000000FFFFFFFFFFFFFFFF00000000003F8C000001000000FFFFFFFFFFFFFFFF0000000000408C000001000000FFFFFFFFFFFFFFFF0000000000418C000001000000FFFFFFFFFFFFFFFFFFFFFFFF000000000000000000000000000000000000000001000000FFFFFFFFE205000001000000FFFFFFFFE2050000000000000010000001000000FFFFFFFFFFFFFFFFE30000004F000000E70000003B020000010000000200001004000000010000000000000000000000FFFFFFFF05000000ED0300006D000000C3000000C400000073940000018000100000010000000000000066000000E300000052020000000000004F000000E30000003B0200000000000040140056050000000750726F6A65637401000000ED03000001000000FFFFFFFFFFFFFFFF05426F6F6B73000000006D00000001000000FFFFFFFFFFFFFFFF0946756E6374696F6E7300000000C300000001000000FFFFFFFFFFFFFFFF0954656D706C6174657300000000C400000001000000FFFFFFFFFFFFFFFF09526567697374657273010000007394000001000000FFFFFFFFFFFFFFFF04000000000000000000000000000000000000000000000001000000FFFFFFFFED03000001000000FFFFFFFFED030000000000000080000001000000FFFFFFFFFFFFFFFF000000003B020000000600003F020000010000000100001004000000010000003EFEFFFF1D00000000000000000000000000000001000000C6000000FFFFFFFF0E0000008F070000930700009407000095070000960700009007000091070000B5010000B8010000B9050000BA050000BB050000BC050000CB0900000180008000000100000004030000560200000006000025030000040300003F020000000600000E03000000000000404100560E0000001343616C6C20537461636B202B204C6F63616C73010000008F07000001000000FFFFFFFFFFFFFFFF0755415254202331000000009307000001000000FFFFFFFFFFFFFFFF0755415254202332000000009407000001000000FFFFFFFFFFFFFFFF0755415254202333000000009507000001000000FFFFFFFFFFFFFFFF15446562756720287072696E74662920566965776572000000009607000001000000FFFFFFFFFFFFFFFF0757617463682031010000009007000001000000FFFFFFFFFFFFFFFF0757617463682032000000009107000001000000FFFFFFFFFFFFFFFF10547261636520457863657074696F6E7300000000B501000001000000FFFFFFFFFFFFFFFF0E4576656E7420436F756E7465727300000000B801000001000000FFFFFFFFFFFFFFFF084D656D6F7279203101000000B905000001000000FFFFFFFFFFFFFFFF084D656D6F7279203200000000BA05000001000000FFFFFFFFFFFFFFFF084D656D6F7279203300000000BB05000001000000FFFFFFFFFFFFFFFF084D656D6F7279203400000000BC05000001000000FFFFFFFFFFFFFFFF105472616365204E617669676174696F6E00000000CB09000001000000FFFFFFFFFFFFFFFF090000000000000001000000000000000100000001000000FFFFFFFF000300003F020000040300000E03000001000000020000100400000000000000000000000000000000000000000000000000000002000000C6000000FFFFFFFF8F07000001000000FFFFFFFF8F07000001000000C6000000000000000080000000000000FFFFFFFFFFFFFFFF00000000A501000070040000A9010000000000000100000004000000010000000000000000000000FFFFFFFF04000000C5000000C7000000B4010000779400000180008000000000000000000000C0010000700400002E02000000000000A901000070040000170200000000000040820046040000000C4275696C64204F757470757400000000C500000001000000FFFFFFFFFFFFFFFF0D46696E6420496E2046696C657300000000C700000001000000FFFFFFFFFFFFFFFF0A4572726F72204C69737400000000B401000001000000FFFFFFFFFFFFFFFF0642726F777365000000007794000001000000FFFFFFFFFFFFFFFFFFFFFFFF000000000000000000000000000000000000000001000000FFFFFFFFC500000001000000FFFFFFFFC5000000000000000000000000000000 + + + 59392 + File + + 2775 + 00200000010000002800FFFF01001100434D4643546F6F6C426172427574746F6E00E100000000000000000000000000000000000000000000000100000001000000018001E100000000000001000000000000000000000000000000000100000001000000018003E1000000000000020000000000000000000000000000000001000000010000000180CD7F0000000000000300000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF000000000000000000000000000100000001000000018023E100000000040004000000000000000000000000000000000100000001000000018022E100000000040005000000000000000000000000000000000100000001000000018025E10000000000000600000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF00000000000000000000000000010000000100000001802BE10000000000000700000000000000000000000000000000010000000100000001802CE10000000004000800000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF00000000000000000000000000010000000100000001807A8A0000000000000900000000000000000000000000000000010000000100000001807B8A0000000004000A00000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF0000000000000000000000000001000000010000000180D3B00000000000000B000000000000000000000000000000000100000001000000018015B10000000004000C0000000000000000000000000000000001000000010000000180F4B00000000004000D000000000000000000000000000000000100000001000000018036B10000000004000E00000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF0000000000000000000000000001000000010000000180FF88000000000400460000000000000000000000000000000001000000010000000180FE880000000004004500000000000000000000000000000000010000000100000001800B810000000004001300000000000000000000000000000000010000000100000001800C810000000004001400000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF0000000000000000000000000001000000010000000180F0880000020000000F000000000000000000000000000000000100000001000000FFFF0100120043555646696E64436F6D626F427574746F6EE803000000000000000000000000000000000000000000000001000000010000009600000002002050000000006023696620646566696E656420285343393246383436784229207C7C20646566696E656420285343393246373436784229207C7C20646566696E656420285343393246383336784229207C7C20646566696E656420285343393246373336784229960000000000000004006023696620646566696E656420285343393246383436784229207C7C20646566696E656420285343393246373436784229207C7C20646566696E656420285343393246383336784229207C7C20646566696E656420285343393246373336784229C023696620646566696E6564202853433932463835347829207C7C20646566696E6564202853433932463735347829207C7C646566696E65642020285343393246383434784229207C7C20646566696E6564202853433932463734347842297C7C646566696E65642020285343393246383441785F3229207C7C20646566696E656420285343393246373441785F32297C7C20646566696E656420285343393246383341785F3229207C7C20646566696E656420285343393246373341785F3229B823696620646566696E6564202853433932463835347829207C7C20646566696E6564202853433932463735347829207C7C646566696E65642020285343393246383434784229207C7C20646566696E6564202853433932463734347842297C7C646566696E656420202853433932463834417829207C7C20646566696E65642028534339324637344178297C7C20646566696E6564202853433932463833417829207C7C20646566696E6564202853433932463733417829B923696620646566696E6564202853433932463835347829207C7C20646566696E6564202853433932463735347829207C7C20646566696E656420285343393246383434784229207C7C20646566696E6564202853433932463734347842297C7C20646566696E6564202853433932463834417829207C7C20646566696E65642028534339324637344178297C7C20646566696E6564202853433932463833417829207C7C20646566696E65642028534339324637334178292000000000000000000000000000000000018024E10000000000001100000000000000000000000000000000010000000100000001800A810000000000001200000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF000000000000000000000000000100000001000000018022800000020003001500000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF0000000000000000000000000001000000010000000180C488000000000000160000000000000000000000000000000001000000010000000180C988000000000400180000000000000000000000000000000001000000010000000180C788000000000000190000000000000000000000000000000001000000010000000180C8880000000000001700000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF000000000000000000000000000100000001000000FFFF01001500434D4643546F6F6C4261724D656E75427574746F6E4C010000020001001A0000000F50726F6A6563742057696E646F7773000000000000000000000000010000000100000000000000000000000100000008002880DD880000000000001A0000000750726F6A656374000000000000000000000000010000000100000000000000000000000100000000002880DC8B0000000000003A00000005426F6F6B73000000000000000000000000010000000100000000000000000000000100000000002880E18B0000000000003B0000000946756E6374696F6E73000000000000000000000000010000000100000000000000000000000100000000002880E28B000000000000400000000954656D706C6174657300000000000000000000000001000000010000000000000000000000010000000000288018890000000000003D0000000E536F757263652042726F777365720000000000000000000000000100000001000000000000000000000001000000000028800000000000000400FFFFFFFF00000000000000000001000000000000000100000000000000000000000100000000002880D988000000000000390000000C4275696C64204F7574707574000000000000000000000000010000000100000000000000000000000100000000002880E38B000000000000410000000B46696E64204F75747075740000000000000000000000000100000001000000000000000000000001000000000001800000000001000000FFFFFFFF0000000000000000000000000001000000010000000180FB7F0000000000001B000000000000000000000000000000000100000001000000000000000446696C65AC030000 + + + 1423 + 2800FFFF01001100434D4643546F6F6C426172427574746F6E00E1000000000000FFFFFFFF000100000000000000010000000000000001000000018001E1000000000000FFFFFFFF000100000000000000010000000000000001000000018003E1000000000000FFFFFFFF0001000000000000000100000000000000010000000180CD7F000000000000FFFFFFFF00010000000000000001000000000000000100000001800000000000000000FFFFFFFF000000000000000000010000000000000001000000018023E1000000000000FFFFFFFF000100000000000000010000000000000001000000018022E1000000000000FFFFFFFF000100000000000000010000000000000001000000018025E1000000000000FFFFFFFF00010000000000000001000000000000000100000001800000000000000000FFFFFFFF00000000000000000001000000000000000100000001802BE1000000000000FFFFFFFF00010000000000000001000000000000000100000001802CE1000000000000FFFFFFFF00010000000000000001000000000000000100000001800000000000000000FFFFFFFF00000000000000000001000000000000000100000001807A8A000000000000FFFFFFFF00010000000000000001000000000000000100000001807B8A000000000000FFFFFFFF00010000000000000001000000000000000100000001800000000000000000FFFFFFFF0000000000000000000100000000000000010000000180D3B0000000000000FFFFFFFF000100000000000000010000000000000001000000018015B1000000000000FFFFFFFF0001000000000000000100000000000000010000000180F4B0000000000000FFFFFFFF000100000000000000010000000000000001000000018036B1000000000000FFFFFFFF00010000000000000001000000000000000100000001800000000000000000FFFFFFFF0000000000000000000100000000000000010000000180FF88000000000000FFFFFFFF0001000000000000000100000000000000010000000180FE88000000000000FFFFFFFF00010000000000000001000000000000000100000001800B81000000000000FFFFFFFF00010000000000000001000000000000000100000001800C81000000000000FFFFFFFF00010000000000000001000000000000000100000001800000000000000000FFFFFFFF0000000000000000000100000000000000010000000180F088000000000000FFFFFFFF0001000000000000000100000000000000010000000180EE7F000000000000FFFFFFFF000100000000000000010000000000000001000000018024E1000000000000FFFFFFFF00010000000000000001000000000000000100000001800A81000000000000FFFFFFFF00010000000000000001000000000000000100000001800000000000000000FFFFFFFF00000000000000000001000000000000000100000001802280000000000000FFFFFFFF00010000000000000001000000000000000100000001800000000000000000FFFFFFFF0000000000000000000100000000000000010000000180C488000000000000FFFFFFFF0001000000000000000100000000000000010000000180C988000000000000FFFFFFFF0001000000000000000100000000000000010000000180C788000000000000FFFFFFFF0001000000000000000100000000000000010000000180C888000000000000FFFFFFFF00010000000000000001000000000000000100000001800000000000000000FFFFFFFF0000000000000000000100000000000000010000000180DD88000000000000FFFFFFFF00010000000000000001000000000000000100000001800000000000000000FFFFFFFF0000000000000000000100000000000000010000000180FB7F000000000000FFFFFFFF000100000000000000010000000000000001000000 + + + 1423 + 2800FFFF01001100434D4643546F6F6C426172427574746F6E00E100000000000000000000000000000000000000000000000100000001000000018001E100000000000001000000000000000000000000000000000100000001000000018003E1000000000000020000000000000000000000000000000001000000010000000180CD7F0000000000000300000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF000000000000000000000000000100000001000000018023E100000000000004000000000000000000000000000000000100000001000000018022E100000000000005000000000000000000000000000000000100000001000000018025E10000000000000600000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF00000000000000000000000000010000000100000001802BE10000000000000700000000000000000000000000000000010000000100000001802CE10000000000000800000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF00000000000000000000000000010000000100000001807A8A0000000000000900000000000000000000000000000000010000000100000001807B8A0000000000000A00000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF0000000000000000000000000001000000010000000180D3B00000000000000B000000000000000000000000000000000100000001000000018015B10000000000000C0000000000000000000000000000000001000000010000000180F4B00000000000000D000000000000000000000000000000000100000001000000018036B10000000000000E00000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF0000000000000000000000000001000000010000000180FF880000000000000F0000000000000000000000000000000001000000010000000180FE880000000000001000000000000000000000000000000000010000000100000001800B810000000000001100000000000000000000000000000000010000000100000001800C810000000000001200000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF0000000000000000000000000001000000010000000180F088000000000000130000000000000000000000000000000001000000010000000180EE7F00000000000014000000000000000000000000000000000100000001000000018024E10000000000001500000000000000000000000000000000010000000100000001800A810000000000001600000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF000000000000000000000000000100000001000000018022800000000000001700000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF0000000000000000000000000001000000010000000180C488000000000000180000000000000000000000000000000001000000010000000180C988000000000000190000000000000000000000000000000001000000010000000180C7880000000000001A0000000000000000000000000000000001000000010000000180C8880000000000001B00000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF0000000000000000000000000001000000010000000180DD880000000000001C00000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF0000000000000000000000000001000000010000000180FB7F0000000000001D000000000000000000000000000000000100000001000000 + + + + 59399 + Build + + 622 + 00200000000000000F00FFFF01001100434D4643546F6F6C426172427574746F6ECF7F0000000000001C0000000000000000000000000000000001000000010000000180D07F0000000000001D000000000000000000000000000000000100000001000000018030800000000000001E00000000000000000000000000000000010000000100000001809E8A0000000000001F0000000000000000000000000000000001000000010000000180D17F0000000000002000000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF00000000000000000000000000010000000100000001804C8A0000000000002100000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF000000000000000000000000000100000001000000FFFF01001900434D4643546F6F6C426172436F6D626F426F78427574746F6EBA00000000000000000000000000000000000000000000000001000000010000009600000003002050FFFFFFFF00960000000000000000000180EB880000000000002200000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF0000000000000000000000000001000000010000000180C07F000000000000230000000000000000000000000000000001000000010000000180B08A000000000000240000000000000000000000000000000001000000010000000180A8010000000000004E0000000000000000000000000000000001000000010000000180BE010000000000005000000000000000000000000000000000010000000100000000000000054275696C64B7010000 + + + 548 + 0F00FFFF01001100434D4643546F6F6C426172427574746F6ECF7F000000000000FFFFFFFF0001000000000000000100000000000000010000000180D07F000000000000FFFFFFFF00010000000000000001000000000000000100000001803080000000000000FFFFFFFF00010000000000000001000000000000000100000001809E8A000000000000FFFFFFFF0001000000000000000100000000000000010000000180D17F000000000000FFFFFFFF00010000000000000001000000000000000100000001800000000000000000FFFFFFFF00000000000000000001000000000000000100000001804C8A000000000000FFFFFFFF00010000000000000001000000000000000100000001800000000000000000FFFFFFFF00000000000000000001000000000000000100000001806680000000000000FFFFFFFF0001000000000000000100000000000000010000000180EB88000000000000FFFFFFFF00010000000000000001000000000000000100000001800000000000000000FFFFFFFF0000000000000000000100000000000000010000000180C07F000000000000FFFFFFFF0001000000000000000100000000000000010000000180B08A000000000000FFFFFFFF0001000000000000000100000000000000010000000180A801000000000000FFFFFFFF0001000000000000000100000000000000010000000180BE01000000000000FFFFFFFF000100000000000000010000000000000001000000 + + + 548 + 0F00FFFF01001100434D4643546F6F6C426172427574746F6ECF7F000000000000000000000000000000000000000000000001000000010000000180D07F00000000000001000000000000000000000000000000000100000001000000018030800000000000000200000000000000000000000000000000010000000100000001809E8A000000000000030000000000000000000000000000000001000000010000000180D17F0000000000000400000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF00000000000000000000000000010000000100000001804C8A0000000000000500000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF00000000000000000000000000010000000100000001806680000000000000060000000000000000000000000000000001000000010000000180EB880000000000000700000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF0000000000000000000000000001000000010000000180C07F000000000000080000000000000000000000000000000001000000010000000180B08A000000000000090000000000000000000000000000000001000000010000000180A8010000000000000A0000000000000000000000000000000001000000010000000180BE010000000000000B000000000000000000000000000000000100000001000000 + + + + 59400 + Debug + + 2220 + 00200000010000001900FFFF01001100434D4643546F6F6C426172427574746F6ECC880000000000002500000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF000000000000000000000000000100000001000000018017800000000000002600000000000000000000000000000000010000000100000001801D800000000004002700000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF00000000000000000000000000010000000100000001801A800000000000002800000000000000000000000000000000010000000100000001801B80000000000000290000000000000000000000000000000001000000010000000180E57F0000000004002A00000000000000000000000000000000010000000100000001801C800000000000002B00000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF000000000000000000000000000100000001000000018000890000000000002C00000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF0000000000000000000000000001000000010000000180E48B0000020001002D0000000000000000000000000000000001000000010000000180F07F0000020001002E0000000000000000000000000000000001000000010000000180E8880000020000003700000000000000000000000000000000010000000100000001803B010000020001002F0000000000000000000000000000000001000000010000000180BB8A00000200010030000000000000000000000000000000000100000001000000FFFF01001500434D4643546F6F6C4261724D656E75427574746F6E0E01000002000100310000000D57617463682057696E646F7773000000000000000000000000010000000100000000000000000000000100000002001380D88B000000000000310000000757617463682031000000000000000000000000010000000100000000000000000000000100000000001380D98B0000000000003100000007576174636820320000000000000000000000000100000001000000000000000000000001000000000013800F01000002000100320000000E4D656D6F72792057696E646F7773000000000000000000000000010000000100000000000000000000000100000004001380D28B00000000000032000000084D656D6F72792031000000000000000000000000010000000100000000000000000000000100000000001380D38B00000000000032000000084D656D6F72792032000000000000000000000000010000000100000000000000000000000100000000001380D48B00000000000032000000084D656D6F72792033000000000000000000000000010000000100000000000000000000000100000000001380D58B00000000000032000000084D656D6F727920340000000000000000000000000100000001000000000000000000000001000000000013801001000002000000330000000E53657269616C2057696E646F77730000000000000000000000000100000001000000000000000000000001000000040013809307000000000000330000000755415254202331000000000000000000000000010000000100000000000000000000000100000000001380940700000000000033000000075541525420233200000000000000000000000001000000010000000000000000000000010000000000138095070000000000003300000007554152542023330000000000000000000000000100000001000000000000000000000001000000000013809607000000000000330000000E49544D2F525441205669657765720000000000000000000000000100000001000000000000000000000001000000000013803C010000020000003400000010416E616C797369732057696E646F7773000000000000000000000000010000000100000000000000000000000100000003001380658A000000000000340000000E4C6F67696320416E616C797A6572000000000000000000000000010000000100000000000000000000000100000000001380DC7F0000000000003E00000014506572666F726D616E636520416E616C797A6572000000000000000000000000010000000100000000000000000000000100000000001380E788000000000000380000000D436F646520436F76657261676500000000000000000000000001000000010000000000000000000000010000000000138053010000000000003F0000000D54726163652057696E646F77730000000000000000000000000100000001000000000000000000000001000000010013805401000000000000FFFFFFFF115472616365204D656E7520416E63686F720100000000000000010000000000000001000000000000000000000001000000000013802901000000000000350000001553797374656D205669657765722057696E646F77730000000000000000000000000100000001000000000000000000000001000000010013804B01000000000000FFFFFFFF1453797374656D2056696577657220416E63686F720100000000000000010000000000000001000000000000000000000001000000000001800000000001000000FFFFFFFF000000000000000000000000000100000001000000138001890000020000003600000007546F6F6C626F7800000000000000000000000001000000010000000000000000000000010000000300138044C5000000000000FFFFFFFF0E5570646174652057696E646F77730100000000000000010000000000000001000000000000000000000001000000000013800000000000000400FFFFFFFF000000000000000000010000000000000001000000000000000000000001000000000013805B01000000000000FFFFFFFF12546F6F6C626F78204D656E75416E63686F72010000000000000001000000000000000100000000000000000000000100000000000000000005446562756764020000 + + + 898 + 1900FFFF01001100434D4643546F6F6C426172427574746F6ECC88000000000000FFFFFFFF00010000000000000001000000000000000100000001800000000000000000FFFFFFFF00000000000000000001000000000000000100000001801780000000000000FFFFFFFF00010000000000000001000000000000000100000001801D80000000000000FFFFFFFF00010000000000000001000000000000000100000001800000000000000000FFFFFFFF00000000000000000001000000000000000100000001801A80000000000000FFFFFFFF00010000000000000001000000000000000100000001801B80000000000000FFFFFFFF0001000000000000000100000000000000010000000180E57F000000000000FFFFFFFF00010000000000000001000000000000000100000001801C80000000000000FFFFFFFF00010000000000000001000000000000000100000001800000000000000000FFFFFFFF00000000000000000001000000000000000100000001800089000000000000FFFFFFFF00010000000000000001000000000000000100000001800000000000000000FFFFFFFF0000000000000000000100000000000000010000000180E48B000000000000FFFFFFFF0001000000000000000100000000000000010000000180F07F000000000000FFFFFFFF0001000000000000000100000000000000010000000180E888000000000000FFFFFFFF00010000000000000001000000000000000100000001803B01000000000000FFFFFFFF0001000000000000000100000000000000010000000180BB8A000000000000FFFFFFFF0001000000000000000100000000000000010000000180D88B000000000000FFFFFFFF0001000000000000000100000000000000010000000180D28B000000000000FFFFFFFF00010000000000000001000000000000000100000001809307000000000000FFFFFFFF0001000000000000000100000000000000010000000180658A000000000000FFFFFFFF0001000000000000000100000000000000010000000180C18A000000000000FFFFFFFF0001000000000000000100000000000000010000000180EE8B000000000000FFFFFFFF00010000000000000001000000000000000100000001800000000000000000FFFFFFFF00000000000000000001000000000000000100000001800189000000000000FFFFFFFF000100000000000000010000000000000001000000 + + + 898 + 1900FFFF01001100434D4643546F6F6C426172427574746F6ECC880000000000000000000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF000000000000000000000000000100000001000000018017800000000000000100000000000000000000000000000000010000000100000001801D800000000000000200000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF00000000000000000000000000010000000100000001801A800000000000000300000000000000000000000000000000010000000100000001801B80000000000000040000000000000000000000000000000001000000010000000180E57F0000000000000500000000000000000000000000000000010000000100000001801C800000000000000600000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF000000000000000000000000000100000001000000018000890000000000000700000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF0000000000000000000000000001000000010000000180E48B000000000000080000000000000000000000000000000001000000010000000180F07F000000000000090000000000000000000000000000000001000000010000000180E8880000000000000A00000000000000000000000000000000010000000100000001803B010000000000000B0000000000000000000000000000000001000000010000000180BB8A0000000000000C0000000000000000000000000000000001000000010000000180D88B0000000000000D0000000000000000000000000000000001000000010000000180D28B0000000000000E000000000000000000000000000000000100000001000000018093070000000000000F0000000000000000000000000000000001000000010000000180658A000000000000100000000000000000000000000000000001000000010000000180C18A000000000000110000000000000000000000000000000001000000010000000180EE8B0000000000001200000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF0000000000000000000000000001000000010000000180018900000000000013000000000000000000000000000000000100000001000000 + + + + 0 + 1536 + 864 + + + + + + + E:\宸ヤ綔\宸ヤ綔椤圭洰\BSP鍖匼SC92F绯诲垪閫氱敤BSP鍖匳0.0.1\KEIL_MOULD\FWLIB\SC92F_LIB\INC\SC92F_PWM.H + 0 + 121 + 132 + + + E:\宸ヤ綔\宸ヤ綔椤圭洰\BSP鍖匼SC92F绯诲垪閫氱敤BSP鍖匳0.0.1\KEIL_MOULD\FWLIB\SC92F_LIB\INC\SC92F_IAP.H + 0 + 2 + 9 + + + E:\宸ヤ綔\宸ヤ綔椤圭洰\BSP鍖匼SC92F绯诲垪閫氱敤BSP鍖匳0.0.1\KEIL_MOULD\FWLIB\SC92F_LIB\INC\SC92F_UART0.H + 0 + 4 + 9 + + + E:\宸ヤ綔\宸ヤ綔椤圭洰\BSP鍖匼SC92F绯诲垪閫氱敤BSP鍖匳0.0.1\Keil_Mould\FWLIB\SC92F_LIB\SRC\SC92F_UART0.C + 0 + 2 + 9 + + + E:\宸ヤ綔\宸ヤ綔椤圭洰\BSP鍖匼SC92F绯诲垪閫氱敤BSP鍖匳0.0.1\KEIL_MOULD\FWLIB\SC92F_LIB\INC\SC92F.H + 0 + 2 + 9 + + + E:\宸ヤ綔\宸ヤ綔椤圭洰\BSP鍖匼SC92F绯诲垪閫氱敤BSP鍖匳0.0.1\Keil_Mould\FWLib\SC92F_Lib\src\sc92f_iap.c + 0 + 2 + 9 + + + E:\宸ヤ綔\宸ヤ綔椤圭洰\BSP鍖匼SC92F绯诲垪閫氱敤BSP鍖匳0.0.1\Keil_Mould\FWLib\SC92F_Lib\src\sc92f_pwr.c + 0 + 2 + 9 + + + E:\宸ヤ綔\宸ヤ綔椤圭洰\BSP鍖匼SC92F绯诲垪閫氱敤BSP鍖匳0.0.1\Keil_Mould\FWLib\SC92F_Lib\src\sc92f_pwm.c + 0 + 2 + 12 + + + E:\宸ヤ綔\宸ヤ綔椤圭洰\BSP鍖匼SC92F绯诲垪閫氱敤BSP鍖匳0.0.1\Keil_Mould\FWLib\SC92F_Lib\src\sc92f_chksum.c + 0 + 22 + 31 + + + + + 1 + 0 + + 100 + 0 + + E:\宸ヤ綔\宸ヤ綔椤圭洰\BSP鍖匼SC92F绯诲垪閫氱敤BSP鍖匳0.0.1\Keil_Mould\FWLib\SC92F_Lib\src\sc92f_chksum.c + 6 + 22 + 31 + 1 + + 0 + + + E:\宸ヤ綔\宸ヤ綔椤圭洰\BSP鍖匼SC92F绯诲垪閫氱敤BSP鍖匳0.0.1\Keil_Mould\FWLib\SC92F_Lib\src\sc92f_pwm.c + 17 + 2 + 12 + 1 + + 0 + + + E:\宸ヤ綔\宸ヤ綔椤圭洰\BSP鍖匼SC92F绯诲垪閫氱敤BSP鍖匳0.0.1\Keil_Mould\FWLib\SC92F_Lib\src\sc92f_pwr.c + 23 + 2 + 9 + 1 + + 0 + + + ..\FWLib\SC92F_Lib\src\sc92f_gpio.c + 24 + 8 + 9 + 1 + + 0 + + + E:\宸ヤ綔\宸ヤ綔椤圭洰\BSP鍖匼SC92F绯诲垪閫氱敤BSP鍖匳0.0.1\Keil_Mould\FWLib\SC92F_Lib\src\sc92f_iap.c + 23 + 2 + 9 + 1 + + 0 + + + \宸ヤ綔\宸ヤ綔椤圭洰\BSP鍖匼SC92F绯诲垪閫氱敤BSP鍖匳0.0.1\KEIL_MOULD\FWLIB\SC92F_LIB\INC\SC92F.H + 23 + 2 + 9 + 1 + + 0 + + + E:\宸ヤ綔\宸ヤ綔椤圭洰\BSP鍖匼SC92F绯诲垪閫氱敤BSP鍖匳0.0.1\Keil_Mould\FWLIB\SC92F_LIB\SRC\SC92F_UART0.C + 23 + 2 + 9 + 1 + + 0 + + + \宸ヤ綔\宸ヤ綔椤圭洰\BSP鍖匼SC92F绯诲垪閫氱敤BSP鍖匳0.0.1\KEIL_MOULD\FWLIB\SC92F_LIB\INC\SC92F_UART0.H + 23 + 4 + 9 + 1 + + 0 + + + \宸ヤ綔\宸ヤ綔椤圭洰\BSP鍖匼SC92F绯诲垪閫氱敤BSP鍖匳0.0.1\KEIL_MOULD\FWLIB\SC92F_LIB\INC\SC92F_IAP.H + 23 + 2 + 9 + 1 + + 0 + + + \宸ヤ綔\宸ヤ綔椤圭洰\BSP鍖匼SC92F绯诲垪閫氱敤BSP鍖匳0.0.1\KEIL_MOULD\FWLIB\SC92F_LIB\INC\SC92F_PWM.H + 370 + 121 + 132 + 1 + + 0 + + + + +
diff --git a/Keil_C/Project/project name.uvgui_Andy.bak b/Keil_C/Project/project name.uvgui_Andy.bak new file mode 100644 index 0000000..b0b87ba --- /dev/null +++ b/Keil_C/Project/project name.uvgui_Andy.bak @@ -0,0 +1,2737 @@ + + + + -4.1 + +
### uVision Project, (C) Keil Software
+ + + + + + 38003 + Registers + 115 192 + + + 346 + Code Coverage + 735 160 + + + 204 + Performance Analyzer + 895 + + + + + + 1506 + Symbols + + 133 133 133 + + + 1936 + Watch 1 + + 133 133 133 + + + 1937 + Watch 2 + + 133 133 133 + + + 1935 + Call Stack + Locals + + 133 133 133 + + + 2506 + Trace Data + + 75 135 130 95 70 230 200 + + + + + + 0 + 0 + 0 + + + + + + + 44 + 2 + 3 + + -32000 + -32000 + + + -1 + -1 + + + 64 + 94 + 1246 + 657 + + + + 0 + + 1370 + 0100000004000000010000000100000001000000010000000000000002000000000000000100000001000000000000002800000028000000010000000A00000000000000010000005D453A5CB9A4D7F75CB9A4D7F7CFEEC4BF5C425350B0FC5C5343393246CFB5C1D0CDA8D3C3425350B0FC56302E302E315C4B65696C5F4D6F756C645C46574C69625C53433932465F4C69625C7372635C73633932665F63686B73756D2E63000000000E73633932665F63686B73756D2E6300000000B3A6BE00FFFFFFFF5A453A5CB9A4D7F75CB9A4D7F7CFEEC4BF5C425350B0FC5C5343393246CFB5C1D0CDA8D3C3425350B0FC56302E302E315C4B65696C5F4D6F756C645C46574C69625C53433932465F4C69625C7372635C73633932665F70776D2E63000000000B73633932665F70776D2E6300000000D9ADC200FFFFFFFF5A453A5CB9A4D7F75CB9A4D7F7CFEEC4BF5C425350B0FC5C5343393246CFB5C1D0CDA8D3C3425350B0FC56302E302E315C4B65696C5F4D6F756C645C46574C69625C53433932465F4C69625C7372635C73633932665F7077722E63000000000B73633932665F7077722E6300000000F7B88600FFFFFFFF5B453A5CB9A4D7F75CB9A4D7F7CFEEC4BF5C425350B0FC5C5343393246CFB5C1D0CDA8D3C3425350B0FC56302E302E315C4B65696C5F4D6F756C645C46574C69625C53433932465F4C69625C7372635C73633932665F6770696F2E63000000000C73633932665F6770696F2E6300000000F0A0A100FFFFFFFF5A453A5CB9A4D7F75CB9A4D7F7CFEEC4BF5C425350B0FC5C5343393246CFB5C1D0CDA8D3C3425350B0FC56302E302E315C4B65696C5F4D6F756C645C46574C69625C53433932465F4C69625C7372635C73633932665F6961702E63000000000B73633932665F6961702E6300000000BCA8E100FFFFFFFF56453A5CB9A4D7F75CB9A4D7F7CFEEC4BF5C425350B0FC5C5343393246CFB5C1D0CDA8D3C3425350B0FC56302E302E315C4B45494C5F4D4F554C445C46574C49425C53433932465F4C49425C494E435C53433932462E48000000000753433932462E4800000000C5D4F200FFFFFFFF5C453A5CB9A4D7F75CB9A4D7F7CFEEC4BF5C425350B0FC5C5343393246CFB5C1D0CDA8D3C3425350B0FC56302E302E315C4B65696C5F4D6F756C645C46574C49425C53433932465F4C49425C5352435C53433932465F55415254302E43000000000D53433932465F55415254302E4300000000FFDC7800FFFFFFFF5C453A5CB9A4D7F75CB9A4D7F7CFEEC4BF5C425350B0FC5C5343393246CFB5C1D0CDA8D3C3425350B0FC56302E302E315C4B45494C5F4D4F554C445C46574C49425C53433932465F4C49425C494E435C53433932465F55415254302E48000000000D53433932465F55415254302E4800000000BECEA100FFFFFFFF5A453A5CB9A4D7F75CB9A4D7F7CFEEC4BF5C425350B0FC5C5343393246CFB5C1D0CDA8D3C3425350B0FC56302E302E315C4B65696C5F4D6F756C645C46574C69625C53433932465F4C69625C696E635C73633932665F6961702E68000000000B73633932665F6961702E68000000009CC1B600FFFFFFFF5A453A5CB9A4D7F75CB9A4D7F7CFEEC4BF5C425350B0FC5C5343393246CFB5C1D0CDA8D3C3425350B0FC56302E302E315C4B65696C5F4D6F756C645C46574C69625C53433932465F4C69625C696E635C73633932665F70776D2E68000000000B73633932665F70776D2E6800000000A5C2D700FFFFFFFF0100000010000000C5D4F200FFDC7800BECEA100F0A0A100BCA8E1009CC1B600F7B88600D9ADC200A5C2D700B3A6BE00EAD6A300F6FA7D00B5E99D005FC3CF00C1838300CACAD50001000000000000000200000041010000660000000006000046020000 + + + + 0 + Build + + -1 + -1 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + E70000004F00000070040000BD000000 + + + 16 + 3D010000BC000000C60400002A010000 + + + + 1005 + 1005 + 1 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + 03000000660000003A01000016020000 + + + 16 + 8A000000A10000006D0100005D020000 + + + + 109 + 109 + 1 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + 03000000660000003A01000016020000 + + + 16 + 8A000000A10000006D0100005D020000 + + + + 1465 + 1465 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + 03000000AC0100006D040000FE010000 + + + 16 + 8A000000A1000000C20200000F010000 + + + + 1466 + 1466 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + 03000000AC0100006D040000FE010000 + + + 16 + 8A000000A1000000C20200000F010000 + + + + 1467 + 1467 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + 03000000AC0100006D040000FE010000 + + + 16 + 8A000000A1000000C20200000F010000 + + + + 1468 + 1468 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + 03000000AC0100006D040000FE010000 + + + 16 + 8A000000A1000000C20200000F010000 + + + + 1506 + 1506 + 0 + 0 + 0 + 0 + 32767 + 0 + 16384 + 0 + + 16 + E3020000660000006D0400008C010000 + + + 16 + 8A000000A10000001A02000031020000 + + + + 1913 + 1913 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + EA000000660000006D040000A4000000 + + + 16 + 8A000000A1000000C20200000F010000 + + + + 1935 + 1935 + 0 + 0 + 0 + 0 + 32767 + 0 + 32768 + 0 + + 16 + 03000000AC0100006D040000FE010000 + + + 16 + 8A000000A10000001A02000031020000 + + + + 1936 + 1936 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + 03000000AC0100006D040000FE010000 + + + 16 + 8A000000A10000001A02000031020000 + + + + 1937 + 1937 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + 03000000AC0100006D040000FE010000 + + + 16 + 8A000000A10000001A02000031020000 + + + + 1939 + 1939 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + 03000000AC0100006D040000FE010000 + + + 16 + 8A000000A1000000C20200000F010000 + + + + 1940 + 1940 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + 03000000AC0100006D040000FE010000 + + + 16 + 8A000000A1000000C20200000F010000 + + + + 1941 + 1941 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + 03000000AC0100006D040000FE010000 + + + 16 + 8A000000A1000000C20200000F010000 + + + + 1942 + 1942 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + 03000000AC0100006D040000FE010000 + + + 16 + 8A000000A1000000C20200000F010000 + + + + 195 + 195 + 1 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + 03000000660000003A01000016020000 + + + 16 + 8A000000A10000006D0100005D020000 + + + + 196 + 196 + 1 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + 03000000660000003A01000016020000 + + + 16 + 8A000000A10000006D0100005D020000 + + + + 197 + 197 + 1 + 0 + 0 + 0 + 32767 + 0 + 32768 + 0 + + 16 + 030000004A020000FD050000F5020000 + + + 16 + 8A000000A1000000C20200000F010000 + + + + 198 + 198 + 0 + 0 + 0 + 0 + 32767 + 0 + 32768 + 0 + + 16 + 00000000950100007004000017020000 + + + 16 + 8A000000A1000000C20200000F010000 + + + + 199 + 199 + 1 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + 030000004A020000FD050000F5020000 + + + 16 + 8A000000A1000000C20200000F010000 + + + + 203 + 203 + 0 + 0 + 0 + 0 + 32767 + 0 + 8192 + 0 + + 16 + EA000000660000006D040000A4000000 + + + 16 + 8A000000A1000000C20200000F010000 + + + + 204 + 204 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + EA000000660000006D040000A4000000 + + + 16 + 8A000000A1000000C20200000F010000 + + + + 221 + 221 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + 00000000000000000000000000000000 + + + 16 + 0A0000000A0000006E0000006E000000 + + + + 2506 + 2506 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + E3020000660000006D0400008C010000 + + + 16 + 8A000000A10000001A02000031020000 + + + + 2507 + 2507 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + 03000000AC0100006D040000FE010000 + + + 16 + 8A000000A1000000C20200000F010000 + + + + 343 + 343 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + EA000000660000006D040000A4000000 + + + 16 + 8A000000A1000000C20200000F010000 + + + + 346 + 346 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + EA000000660000006D040000A4000000 + + + 16 + 8A000000A1000000C20200000F010000 + + + + 35824 + 35824 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + EA000000660000006D040000A4000000 + + + 16 + 8A000000A1000000C20200000F010000 + + + + 35885 + 35885 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + E3020000660000006D0400008C010000 + + + 16 + 8A000000A10000001A02000031020000 + + + + 35886 + 35886 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + E3020000660000006D0400008C010000 + + + 16 + 8A000000A10000001A02000031020000 + + + + 35887 + 35887 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + E3020000660000006D0400008C010000 + + + 16 + 8A000000A10000001A02000031020000 + + + + 35888 + 35888 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + E3020000660000006D0400008C010000 + + + 16 + 8A000000A10000001A02000031020000 + + + + 35889 + 35889 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + E3020000660000006D0400008C010000 + + + 16 + 8A000000A10000001A02000031020000 + + + + 35890 + 35890 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + E3020000660000006D0400008C010000 + + + 16 + 8A000000A10000001A02000031020000 + + + + 35891 + 35891 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + E3020000660000006D0400008C010000 + + + 16 + 8A000000A10000001A02000031020000 + + + + 35892 + 35892 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + E3020000660000006D0400008C010000 + + + 16 + 8A000000A10000001A02000031020000 + + + + 35893 + 35893 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + E3020000660000006D0400008C010000 + + + 16 + 8A000000A10000001A02000031020000 + + + + 35894 + 35894 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + E3020000660000006D0400008C010000 + + + 16 + 8A000000A10000001A02000031020000 + + + + 35895 + 35895 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + E3020000660000006D0400008C010000 + + + 16 + 8A000000A10000001A02000031020000 + + + + 35896 + 35896 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + E3020000660000006D0400008C010000 + + + 16 + 8A000000A10000001A02000031020000 + + + + 35897 + 35897 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + E3020000660000006D0400008C010000 + + + 16 + 8A000000A10000001A02000031020000 + + + + 35898 + 35898 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + E3020000660000006D0400008C010000 + + + 16 + 8A000000A10000001A02000031020000 + + + + 35899 + 35899 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + E3020000660000006D0400008C010000 + + + 16 + 8A000000A10000001A02000031020000 + + + + 35900 + 35900 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + E3020000660000006D0400008C010000 + + + 16 + 8A000000A10000001A02000031020000 + + + + 35901 + 35901 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + E3020000660000006D0400008C010000 + + + 16 + 8A000000A10000001A02000031020000 + + + + 35902 + 35902 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + E3020000660000006D0400008C010000 + + + 16 + 8A000000A10000001A02000031020000 + + + + 35903 + 35903 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + E3020000660000006D0400008C010000 + + + 16 + 8A000000A10000001A02000031020000 + + + + 35904 + 35904 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + E3020000660000006D0400008C010000 + + + 16 + 8A000000A10000001A02000031020000 + + + + 35905 + 35905 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + E3020000660000006D0400008C010000 + + + 16 + 8A000000A10000001A02000031020000 + + + + 38003 + 38003 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + 03000000660000003A01000016020000 + + + 16 + 8A000000A10000006D0100005D020000 + + + + 38007 + 38007 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + 030000004A020000FD050000F5020000 + + + 16 + 8A000000A1000000C20200000F010000 + + + + 436 + 436 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + 030000004A020000FD050000F5020000 + + + 16 + 8A000000A10000006D0100005D020000 + + + + 437 + 437 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + 03000000AC0100006D040000FE010000 + + + 16 + 8A000000A10000001A02000031020000 + + + + 440 + 440 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + 03000000AC0100006D040000FE010000 + + + 16 + 8A000000A10000001A02000031020000 + + + + 59392 + 59392 + 1 + 0 + 0 + 0 + 940 + 0 + 8192 + 0 + + 16 + 0000000000000000B70300001C000000 + + + 16 + 0A0000000A0000006E0000006E000000 + + + + 59393 + 0 + 1 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + 000000000E0300000006000021030000 + + + 16 + 0A0000000A0000006E0000006E000000 + + + + 59399 + 59399 + 1 + 0 + 0 + 0 + 439 + 0 + 8192 + 1 + + 16 + 000000001C000000C201000038000000 + + + 16 + 0A0000000A0000006E0000006E000000 + + + + 59400 + 59400 + 0 + 0 + 0 + 0 + 612 + 0 + 8192 + 2 + + 16 + 00000000380000006F02000054000000 + + + 16 + 0A0000000A0000006E0000006E000000 + + + + 2619 + 000000000B000000000000000020000000000000FFFFFFFFFFFFFFFFE7000000BD00000070040000C1000000000000000100000004000000010000000000000000000000FFFFFFFF06000000CB00000057010000CC000000F08B00005A01000079070000FFFF02000B004354616262656450616E6500200000000000003D010000BC000000C60400002A010000E70000004F00000070040000BD0000000000000040280046060000000B446973617373656D626C7900000000CB00000001000000FFFFFFFFFFFFFFFF14506572666F726D616E636520416E616C797A6572000000005701000001000000FFFFFFFFFFFFFFFF14506572666F726D616E636520416E616C797A657200000000CC00000001000000FFFFFFFFFFFFFFFF0E4C6F67696320416E616C797A657200000000F08B000001000000FFFFFFFFFFFFFFFF0D436F646520436F766572616765000000005A01000001000000FFFFFFFFFFFFFFFF11496E737472756374696F6E205472616365000000007907000001000000FFFFFFFFFFFFFFFFFFFFFFFF000000000000000000000000000000000000000001000000FFFFFFFFCB00000001000000FFFFFFFFCB000000000000000040000000000000FFFFFFFFFFFFFFFFDC0200004F000000E0020000A5010000000000000200000004000000010000000000000000000000FFFFFFFF17000000E2050000CA0900002D8C00002E8C00002F8C0000308C0000318C0000328C0000338C0000348C0000358C0000368C0000378C0000388C0000398C00003A8C00003B8C00003C8C00003D8C00003E8C00003F8C0000408C0000418C00000180004000000000000036030000BC000000C604000012020000E00200004F00000070040000A50100000000000040410046170000000753796D626F6C7300000000E205000001000000FFFFFFFFFFFFFFFF0A5472616365204461746100000000CA09000001000000FFFFFFFFFFFFFFFF00000000002D8C000001000000FFFFFFFFFFFFFFFF00000000002E8C000001000000FFFFFFFFFFFFFFFF00000000002F8C000001000000FFFFFFFFFFFFFFFF0000000000308C000001000000FFFFFFFFFFFFFFFF0000000000318C000001000000FFFFFFFFFFFFFFFF0000000000328C000001000000FFFFFFFFFFFFFFFF0000000000338C000001000000FFFFFFFFFFFFFFFF0000000000348C000001000000FFFFFFFFFFFFFFFF0000000000358C000001000000FFFFFFFFFFFFFFFF0000000000368C000001000000FFFFFFFFFFFFFFFF0000000000378C000001000000FFFFFFFFFFFFFFFF0000000000388C000001000000FFFFFFFFFFFFFFFF0000000000398C000001000000FFFFFFFFFFFFFFFF00000000003A8C000001000000FFFFFFFFFFFFFFFF00000000003B8C000001000000FFFFFFFFFFFFFFFF00000000003C8C000001000000FFFFFFFFFFFFFFFF00000000003D8C000001000000FFFFFFFFFFFFFFFF00000000003E8C000001000000FFFFFFFFFFFFFFFF00000000003F8C000001000000FFFFFFFFFFFFFFFF0000000000408C000001000000FFFFFFFFFFFFFFFF0000000000418C000001000000FFFFFFFFFFFFFFFFFFFFFFFF000000000000000000000000000000000000000001000000FFFFFFFFE205000001000000FFFFFFFFE2050000000000000010000001000000FFFFFFFFFFFFFFFF3D0100004F000000410100002F02000001000000020000100400000001000000F6FEFFFFEB040000FFFFFFFF05000000ED0300006D000000C3000000C4000000739400000180001000000100000056000000BC000000930100009C020000000000004F0000003D0100002F0200000000000040140056050000000750726F6A65637401000000ED03000001000000FFFFFFFFFFFFFFFF05426F6F6B73010000006D00000001000000FFFFFFFFFFFFFFFF0946756E6374696F6E7301000000C300000001000000FFFFFFFFFFFFFFFF0954656D706C6174657301000000C400000001000000FFFFFFFFFFFFFFFF09526567697374657273000000007394000001000000FFFFFFFFFFFFFFFF00000000000000000000000000000000000000000000000001000000FFFFFFFFED03000001000000FFFFFFFFED030000000000000080000000000000FFFFFFFFFFFFFFFF0000000091010000700400009501000000000000010000000400000001000000000000000000000000000000000000000000000001000000C6000000FFFFFFFF0E0000008F070000930700009407000095070000960700009007000091070000B5010000B8010000B9050000BA050000BB050000BC050000CB090000018000800000000000005600000002020000C6040000840200000000000095010000700400001702000000000000404100460E0000001343616C6C20537461636B202B204C6F63616C73000000008F07000001000000FFFFFFFFFFFFFFFF0755415254202331000000009307000001000000FFFFFFFFFFFFFFFF0755415254202332000000009407000001000000FFFFFFFFFFFFFFFF0755415254202333000000009507000001000000FFFFFFFFFFFFFFFF15446562756720287072696E74662920566965776572000000009607000001000000FFFFFFFFFFFFFFFF0757617463682031000000009007000001000000FFFFFFFFFFFFFFFF0757617463682032000000009107000001000000FFFFFFFFFFFFFFFF10547261636520457863657074696F6E7300000000B501000001000000FFFFFFFFFFFFFFFF0E4576656E7420436F756E7465727300000000B801000001000000FFFFFFFFFFFFFFFF084D656D6F7279203100000000B905000001000000FFFFFFFFFFFFFFFF084D656D6F7279203200000000BA05000001000000FFFFFFFFFFFFFFFF084D656D6F7279203300000000BB05000001000000FFFFFFFFFFFFFFFF084D656D6F7279203400000000BC05000001000000FFFFFFFFFFFFFFFF105472616365204E617669676174696F6E00000000CB09000001000000FFFFFFFFFFFFFFFFFFFFFFFF0000000001000000000000000000000001000000FFFFFFFF38020000950100003C0200001702000000000000020000000400000000000000000000000000000000000000000000000000000002000000C6000000FFFFFFFF8F07000001000000FFFFFFFF8F07000001000000C6000000000000000080000001000000FFFFFFFFFFFFFFFF000000002F02000000060000330200000100000001000010040000000100000021FEFFFFD5000000FFFFFFFF04000000C5000000C7000000B4010000779400000180008000000100000056000000A0020000560600007B0300000000000033020000000600000E0300000000000040820056040000000C4275696C64204F757470757401000000C500000001000000FFFFFFFFFFFFFFFF0D46696E6420496E2046696C657301000000C700000001000000FFFFFFFFFFFFFFFF0A4572726F72204C69737400000000B401000001000000FFFFFFFFFFFFFFFF0742726F77736572000000007794000001000000FFFFFFFFFFFFFFFF00000000000000000000000000000000000000000000000001000000FFFFFFFFC500000001000000FFFFFFFFC5000000000000000000000000000000 + + + 59392 + File + + 2362 + 00200000010000002800FFFF01001100434D4643546F6F6C426172427574746F6E00E100000000000000000000000000000000000000000000000100000001000000018001E100000000000001000000000000000000000000000000000100000001000000018003E1000000000000020000000000000000000000000000000001000000010000000180CD7F0000000000000300000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF000000000000000000000000000100000001000000018023E100000000040004000000000000000000000000000000000100000001000000018022E100000000040005000000000000000000000000000000000100000001000000018025E10000000000000600000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF00000000000000000000000000010000000100000001802BE10000000000000700000000000000000000000000000000010000000100000001802CE10000000004000800000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF00000000000000000000000000010000000100000001807A8A0000000004000900000000000000000000000000000000010000000100000001807B8A0000000004000A00000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF0000000000000000000000000001000000010000000180D3B00000000000000B000000000000000000000000000000000100000001000000018015B10000000004000C0000000000000000000000000000000001000000010000000180F4B00000000004000D000000000000000000000000000000000100000001000000018036B10000000004000E00000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF0000000000000000000000000001000000010000000180FF88000000000400460000000000000000000000000000000001000000010000000180FE880000000004004500000000000000000000000000000000010000000100000001800B810000000004001300000000000000000000000000000000010000000100000001800C810000000004001400000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF0000000000000000000000000001000000010000000180F0880000020000000F000000000000000000000000000000000100000001000000FFFF0100120043555646696E64436F6D626F427574746F6EE80300000000000000000000000000000000000000000000000100000001000000960000000200205000000000025030960000000000000011000250300F5343445F434F4D5F4269744C6973740C5343445F434F4D5F4C6973740F5343445F5345475F4269744C6973740E5343445F4E545F547970654465660C5343447269766572496E69740F5343445F4E545F536567436F756E740C5343445F4E545F436F756E740A5343445F436F6D4E756D1250574D5F506F6C6172697479436F6E666967095343393546387832782E23696620646566696E6564202873633935663878327829207C7C20646566696E6564202873633935663778327829095343393566387831782E23696620646566696E6564202853433935663878317829207C7C20646566696E656420285343393566377831782902B7E407476F546F4150501D49454336303733305F4350555F5265675F546573745F52756E54696D650000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000018024E10000000000001100000000000000000000000000000000010000000100000001800A810000000000001200000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF000000000000000000000000000100000001000000018022800000020000001500000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF0000000000000000000000000001000000010000000180C488000000000400160000000000000000000000000000000001000000010000000180C988000000000400180000000000000000000000000000000001000000010000000180C788000000000000190000000000000000000000000000000001000000010000000180C8880000000000001700000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF000000000000000000000000000100000001000000FFFF01001500434D4643546F6F6C4261724D656E75427574746F6E4C010000020001001A0000000F50726F6A6563742057696E646F7773000000000000000000000000010000000100000000000000000000000100000008002880DD880000000000001A0000000750726F6A656374000000000000000000000000010000000100000000000000000000000100000000002880DC8B0000000000003A00000005426F6F6B73000000000000000000000000010000000100000000000000000000000100000000002880E18B0000000000003B0000000946756E6374696F6E73000000000000000000000000010000000100000000000000000000000100000000002880E28B000000000000400000000954656D706C6174657300000000000000000000000001000000010000000000000000000000010000000000288018890000000000003D0000000E536F757263652042726F777365720000000000000000000000000100000001000000000000000000000001000000000028800000000000000400FFFFFFFF00000000000000000001000000000000000100000000000000000000000100000000002880D988000000000000390000000C4275696C64204F7574707574000000000000000000000000010000000100000000000000000000000100000000002880E38B000000000000410000000B46696E64204F75747075740000000000000000000000000100000001000000000000000000000001000000000001800000000001000000FFFFFFFF0000000000000000000000000001000000010000000180FB7F0000000000001B000000000000000000000000000000000100000001000000000000000446696C65AC030000 + + + 1423 + 2800FFFF01001100434D4643546F6F6C426172427574746F6E00E1000000000000FFFFFFFF000100000000000000010000000000000001000000018001E1000000000000FFFFFFFF000100000000000000010000000000000001000000018003E1000000000000FFFFFFFF0001000000000000000100000000000000010000000180CD7F000000000000FFFFFFFF00010000000000000001000000000000000100000001800000000000000000FFFFFFFF000000000000000000010000000000000001000000018023E1000000000000FFFFFFFF000100000000000000010000000000000001000000018022E1000000000000FFFFFFFF000100000000000000010000000000000001000000018025E1000000000000FFFFFFFF00010000000000000001000000000000000100000001800000000000000000FFFFFFFF00000000000000000001000000000000000100000001802BE1000000000000FFFFFFFF00010000000000000001000000000000000100000001802CE1000000000000FFFFFFFF00010000000000000001000000000000000100000001800000000000000000FFFFFFFF00000000000000000001000000000000000100000001807A8A000000000000FFFFFFFF00010000000000000001000000000000000100000001807B8A000000000000FFFFFFFF00010000000000000001000000000000000100000001800000000000000000FFFFFFFF0000000000000000000100000000000000010000000180D3B0000000000000FFFFFFFF000100000000000000010000000000000001000000018015B1000000000000FFFFFFFF0001000000000000000100000000000000010000000180F4B0000000000000FFFFFFFF000100000000000000010000000000000001000000018036B1000000000000FFFFFFFF00010000000000000001000000000000000100000001800000000000000000FFFFFFFF0000000000000000000100000000000000010000000180FF88000000000000FFFFFFFF0001000000000000000100000000000000010000000180FE88000000000000FFFFFFFF00010000000000000001000000000000000100000001800B81000000000000FFFFFFFF00010000000000000001000000000000000100000001800C81000000000000FFFFFFFF00010000000000000001000000000000000100000001800000000000000000FFFFFFFF0000000000000000000100000000000000010000000180F088000000000000FFFFFFFF0001000000000000000100000000000000010000000180EE7F000000000000FFFFFFFF000100000000000000010000000000000001000000018024E1000000000000FFFFFFFF00010000000000000001000000000000000100000001800A81000000000000FFFFFFFF00010000000000000001000000000000000100000001800000000000000000FFFFFFFF00000000000000000001000000000000000100000001802280000000000000FFFFFFFF00010000000000000001000000000000000100000001800000000000000000FFFFFFFF0000000000000000000100000000000000010000000180C488000000000000FFFFFFFF0001000000000000000100000000000000010000000180C988000000000000FFFFFFFF0001000000000000000100000000000000010000000180C788000000000000FFFFFFFF0001000000000000000100000000000000010000000180C888000000000000FFFFFFFF00010000000000000001000000000000000100000001800000000000000000FFFFFFFF0000000000000000000100000000000000010000000180DD88000000000000FFFFFFFF00010000000000000001000000000000000100000001800000000000000000FFFFFFFF0000000000000000000100000000000000010000000180FB7F000000000000FFFFFFFF000100000000000000010000000000000001000000 + + + 1423 + 2800FFFF01001100434D4643546F6F6C426172427574746F6E00E100000000000000000000000000000000000000000000000100000001000000018001E100000000000001000000000000000000000000000000000100000001000000018003E1000000000000020000000000000000000000000000000001000000010000000180CD7F0000000000000300000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF000000000000000000000000000100000001000000018023E100000000000004000000000000000000000000000000000100000001000000018022E100000000000005000000000000000000000000000000000100000001000000018025E10000000000000600000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF00000000000000000000000000010000000100000001802BE10000000000000700000000000000000000000000000000010000000100000001802CE10000000000000800000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF00000000000000000000000000010000000100000001807A8A0000000000000900000000000000000000000000000000010000000100000001807B8A0000000000000A00000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF0000000000000000000000000001000000010000000180D3B00000000000000B000000000000000000000000000000000100000001000000018015B10000000000000C0000000000000000000000000000000001000000010000000180F4B00000000000000D000000000000000000000000000000000100000001000000018036B10000000000000E00000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF0000000000000000000000000001000000010000000180FF880000000000000F0000000000000000000000000000000001000000010000000180FE880000000000001000000000000000000000000000000000010000000100000001800B810000000000001100000000000000000000000000000000010000000100000001800C810000000000001200000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF0000000000000000000000000001000000010000000180F088000000000000130000000000000000000000000000000001000000010000000180EE7F00000000000014000000000000000000000000000000000100000001000000018024E10000000000001500000000000000000000000000000000010000000100000001800A810000000000001600000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF000000000000000000000000000100000001000000018022800000000000001700000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF0000000000000000000000000001000000010000000180C488000000000000180000000000000000000000000000000001000000010000000180C988000000000000190000000000000000000000000000000001000000010000000180C7880000000000001A0000000000000000000000000000000001000000010000000180C8880000000000001B00000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF0000000000000000000000000001000000010000000180DD880000000000001C00000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF0000000000000000000000000001000000010000000180FB7F0000000000001D000000000000000000000000000000000100000001000000 + + + + 59399 + Build + + 655 + 00200000010000000F00FFFF01001100434D4643546F6F6C426172427574746F6ECF7F0000000000001C0000000000000000000000000000000001000000010000000180D07F0000000000001D000000000000000000000000000000000100000001000000018030800000000000001E00000000000000000000000000000000010000000100000001809E8A0000000004001F0000000000000000000000000000000001000000010000000180D17F0000000004002000000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF00000000000000000000000000010000000100000001804C8A0000000000002100000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF000000000000000000000000000100000001000000FFFF01001900434D4643546F6F6C426172436F6D626F426F78427574746F6EBA00000000000000000000000000000000000000000000000001000000010000009600000003002050000000000E3C70726F6A656374206E616D653E960000000000000001000E3C70726F6A656374206E616D653E000000000180EB880000000000002200000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF0000000000000000000000000001000000010000000180C07F000000000000230000000000000000000000000000000001000000010000000180B08A000000000400240000000000000000000000000000000001000000010000000180A8010000000004004E0000000000000000000000000000000001000000010000000180BE010000000004005000000000000000000000000000000000010000000100000000000000054275696C64B7010000 + + + 548 + 0F00FFFF01001100434D4643546F6F6C426172427574746F6ECF7F000000000000FFFFFFFF0001000000000000000100000000000000010000000180D07F000000000000FFFFFFFF00010000000000000001000000000000000100000001803080000000000000FFFFFFFF00010000000000000001000000000000000100000001809E8A000000000000FFFFFFFF0001000000000000000100000000000000010000000180D17F000000000000FFFFFFFF00010000000000000001000000000000000100000001800000000000000000FFFFFFFF00000000000000000001000000000000000100000001804C8A000000000000FFFFFFFF00010000000000000001000000000000000100000001800000000000000000FFFFFFFF00000000000000000001000000000000000100000001806680000000000000FFFFFFFF0001000000000000000100000000000000010000000180EB88000000000000FFFFFFFF00010000000000000001000000000000000100000001800000000000000000FFFFFFFF0000000000000000000100000000000000010000000180C07F000000000000FFFFFFFF0001000000000000000100000000000000010000000180B08A000000000000FFFFFFFF0001000000000000000100000000000000010000000180A801000000000000FFFFFFFF0001000000000000000100000000000000010000000180BE01000000000000FFFFFFFF000100000000000000010000000000000001000000 + + + 548 + 0F00FFFF01001100434D4643546F6F6C426172427574746F6ECF7F000000000000000000000000000000000000000000000001000000010000000180D07F00000000000001000000000000000000000000000000000100000001000000018030800000000000000200000000000000000000000000000000010000000100000001809E8A000000000000030000000000000000000000000000000001000000010000000180D17F0000000000000400000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF00000000000000000000000000010000000100000001804C8A0000000000000500000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF00000000000000000000000000010000000100000001806680000000000000060000000000000000000000000000000001000000010000000180EB880000000000000700000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF0000000000000000000000000001000000010000000180C07F000000000000080000000000000000000000000000000001000000010000000180B08A000000000000090000000000000000000000000000000001000000010000000180A8010000000000000A0000000000000000000000000000000001000000010000000180BE010000000000000B000000000000000000000000000000000100000001000000 + + + + 59400 + Debug + + 2220 + 00200000000000001900FFFF01001100434D4643546F6F6C426172427574746F6ECC880000000000002500000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF000000000000000000000000000100000001000000018017800000000000002600000000000000000000000000000000010000000100000001801D800000000000002700000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF00000000000000000000000000010000000100000001801A800000000000002800000000000000000000000000000000010000000100000001801B80000000000000290000000000000000000000000000000001000000010000000180E57F0000000000002A00000000000000000000000000000000010000000100000001801C800000000000002B00000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF000000000000000000000000000100000001000000018000890000000000002C00000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF0000000000000000000000000001000000010000000180E48B0000000000002D0000000000000000000000000000000001000000010000000180F07F0000000000002E0000000000000000000000000000000001000000010000000180E8880000000000003700000000000000000000000000000000010000000100000001803B010000000000002F0000000000000000000000000000000001000000010000000180BB8A00000000000030000000000000000000000000000000000100000001000000FFFF01001500434D4643546F6F6C4261724D656E75427574746F6E0E01000000000000310000000D57617463682057696E646F7773000000000000000000000000010000000100000000000000000000000100000002001380D88B000000000000310000000757617463682031000000000000000000000000010000000100000000000000000000000100000000001380D98B0000000000003100000007576174636820320000000000000000000000000100000001000000000000000000000001000000000013800F01000000000000320000000E4D656D6F72792057696E646F7773000000000000000000000000010000000100000000000000000000000100000004001380D28B00000000000032000000084D656D6F72792031000000000000000000000000010000000100000000000000000000000100000000001380D38B00000000000032000000084D656D6F72792032000000000000000000000000010000000100000000000000000000000100000000001380D48B00000000000032000000084D656D6F72792033000000000000000000000000010000000100000000000000000000000100000000001380D58B00000000000032000000084D656D6F727920340000000000000000000000000100000001000000000000000000000001000000000013801001000000000000330000000E53657269616C2057696E646F77730000000000000000000000000100000001000000000000000000000001000000040013809307000000000000330000000755415254202331000000000000000000000000010000000100000000000000000000000100000000001380940700000000000033000000075541525420233200000000000000000000000001000000010000000000000000000000010000000000138095070000000000003300000007554152542023330000000000000000000000000100000001000000000000000000000001000000000013809607000000000000330000000E49544D2F525441205669657765720000000000000000000000000100000001000000000000000000000001000000000013803C010000000000003400000010416E616C797369732057696E646F7773000000000000000000000000010000000100000000000000000000000100000003001380658A000000000000340000000E4C6F67696320416E616C797A6572000000000000000000000000010000000100000000000000000000000100000000001380DC7F0000000000003E00000014506572666F726D616E636520416E616C797A6572000000000000000000000000010000000100000000000000000000000100000000001380E788000000000000380000000D436F646520436F76657261676500000000000000000000000001000000010000000000000000000000010000000000138053010000000000003F0000000D54726163652057696E646F77730000000000000000000000000100000001000000000000000000000001000000010013805401000000000000FFFFFFFF115472616365204D656E7520416E63686F720000000000000000010000000000000001000000000000000000000001000000000013802901000000000000350000001553797374656D205669657765722057696E646F77730000000000000000000000000100000001000000000000000000000001000000010013804B01000000000000FFFFFFFF1453797374656D2056696577657220416E63686F720000000000000000010000000000000001000000000000000000000001000000000001800000000001000000FFFFFFFF000000000000000000000000000100000001000000138001890000000000003600000007546F6F6C626F7800000000000000000000000001000000010000000000000000000000010000000300138044C5000000000000FFFFFFFF0E5570646174652057696E646F77730000000000000000010000000000000001000000000000000000000001000000000013800000000000000400FFFFFFFF000000000000000000010000000000000001000000000000000000000001000000000013805B01000000000000FFFFFFFF12546F6F6C626F78204D656E75416E63686F72000000000000000001000000000000000100000000000000000000000100000000000000000005446562756764020000 + + + 898 + 1900FFFF01001100434D4643546F6F6C426172427574746F6ECC88000000000000FFFFFFFF00010000000000000001000000000000000100000001800000000000000000FFFFFFFF00000000000000000001000000000000000100000001801780000000000000FFFFFFFF00010000000000000001000000000000000100000001801D80000000000000FFFFFFFF00010000000000000001000000000000000100000001800000000000000000FFFFFFFF00000000000000000001000000000000000100000001801A80000000000000FFFFFFFF00010000000000000001000000000000000100000001801B80000000000000FFFFFFFF0001000000000000000100000000000000010000000180E57F000000000000FFFFFFFF00010000000000000001000000000000000100000001801C80000000000000FFFFFFFF00010000000000000001000000000000000100000001800000000000000000FFFFFFFF00000000000000000001000000000000000100000001800089000000000000FFFFFFFF00010000000000000001000000000000000100000001800000000000000000FFFFFFFF0000000000000000000100000000000000010000000180E48B000000000000FFFFFFFF0001000000000000000100000000000000010000000180F07F000000000000FFFFFFFF0001000000000000000100000000000000010000000180E888000000000000FFFFFFFF00010000000000000001000000000000000100000001803B01000000000000FFFFFFFF0001000000000000000100000000000000010000000180BB8A000000000000FFFFFFFF0001000000000000000100000000000000010000000180D88B000000000000FFFFFFFF0001000000000000000100000000000000010000000180D28B000000000000FFFFFFFF00010000000000000001000000000000000100000001809307000000000000FFFFFFFF0001000000000000000100000000000000010000000180658A000000000000FFFFFFFF0001000000000000000100000000000000010000000180C18A000000000000FFFFFFFF0001000000000000000100000000000000010000000180EE8B000000000000FFFFFFFF00010000000000000001000000000000000100000001800000000000000000FFFFFFFF00000000000000000001000000000000000100000001800189000000000000FFFFFFFF000100000000000000010000000000000001000000 + + + 898 + 1900FFFF01001100434D4643546F6F6C426172427574746F6ECC880000000000000000000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF000000000000000000000000000100000001000000018017800000000000000100000000000000000000000000000000010000000100000001801D800000000000000200000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF00000000000000000000000000010000000100000001801A800000000000000300000000000000000000000000000000010000000100000001801B80000000000000040000000000000000000000000000000001000000010000000180E57F0000000000000500000000000000000000000000000000010000000100000001801C800000000000000600000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF000000000000000000000000000100000001000000018000890000000000000700000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF0000000000000000000000000001000000010000000180E48B000000000000080000000000000000000000000000000001000000010000000180F07F000000000000090000000000000000000000000000000001000000010000000180E8880000000000000A00000000000000000000000000000000010000000100000001803B010000000000000B0000000000000000000000000000000001000000010000000180BB8A0000000000000C0000000000000000000000000000000001000000010000000180D88B0000000000000D0000000000000000000000000000000001000000010000000180D28B0000000000000E000000000000000000000000000000000100000001000000018093070000000000000F0000000000000000000000000000000001000000010000000180658A000000000000100000000000000000000000000000000001000000010000000180C18A000000000000110000000000000000000000000000000001000000010000000180EE8B0000000000001200000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF0000000000000000000000000001000000010000000180018900000000000013000000000000000000000000000000000100000001000000 + + + + 0 + 1536 + 864 + + + + 1 + Debug + + -1 + -1 + 1 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + E70000004F00000000060000BD000000 + + + 16 + E70000006600000000060000D4000000 + + + + 1005 + 1005 + 1 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + 0300000066000000E000000022020000 + + + 16 + 8A000000A10000006D0100005D020000 + + + + 109 + 109 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + 0300000066000000E000000022020000 + + + 16 + 8A000000A10000006D0100005D020000 + + + + 1465 + 1465 + 1 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + 0703000056020000FD050000F5020000 + + + 16 + 8A000000A1000000C20200000F010000 + + + + 1466 + 1466 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + 0703000056020000FD050000F5020000 + + + 16 + 8A000000A1000000C20200000F010000 + + + + 1467 + 1467 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + 0703000056020000FD050000F5020000 + + + 16 + 8A000000A1000000C20200000F010000 + + + + 1468 + 1468 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + 0703000056020000FD050000F5020000 + + + 16 + 8A000000A1000000C20200000F010000 + + + + 1506 + 1506 + 0 + 0 + 0 + 0 + 32767 + 0 + 16384 + 0 + + 16 + E3020000660000006D0400008C010000 + + + 16 + 8A000000A10000001A02000031020000 + + + + 1913 + 1913 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + EA00000066000000FD050000A4000000 + + + 16 + 8A000000A1000000C20200000F010000 + + + + 1935 + 1935 + 1 + 0 + 0 + 0 + 32767 + 0 + 32768 + 0 + + 16 + 0703000056020000FD050000F5020000 + + + 16 + 8A000000A10000001A02000031020000 + + + + 1936 + 1936 + 1 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + 0703000056020000FD050000F5020000 + + + 16 + 8A000000A10000001A02000031020000 + + + + 1937 + 1937 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + 0703000056020000FD050000F5020000 + + + 16 + 8A000000A10000001A02000031020000 + + + + 1939 + 1939 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + 0703000056020000FD050000F5020000 + + + 16 + 8A000000A1000000C20200000F010000 + + + + 1940 + 1940 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + 0703000056020000FD050000F5020000 + + + 16 + 8A000000A1000000C20200000F010000 + + + + 1941 + 1941 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + 0703000056020000FD050000F5020000 + + + 16 + 8A000000A1000000C20200000F010000 + + + + 1942 + 1942 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + 0703000056020000FD050000F5020000 + + + 16 + 8A000000A1000000C20200000F010000 + + + + 195 + 195 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + 0300000066000000E000000022020000 + + + 16 + 8A000000A10000006D0100005D020000 + + + + 196 + 196 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + 0300000066000000E000000022020000 + + + 16 + 8A000000A10000006D0100005D020000 + + + + 197 + 197 + 0 + 0 + 0 + 0 + 32767 + 0 + 32768 + 0 + + 16 + 03000000C00100006D040000FE010000 + + + 16 + 8A000000A1000000C20200000F010000 + + + + 198 + 198 + 1 + 0 + 0 + 0 + 32767 + 0 + 32768 + 0 + + 16 + 000000003F020000000300000E030000 + + + 16 + 8A000000A1000000C20200000F010000 + + + + 199 + 199 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + 03000000C00100006D040000FE010000 + + + 16 + 8A000000A1000000C20200000F010000 + + + + 203 + 203 + 1 + 0 + 0 + 0 + 32767 + 0 + 8192 + 0 + + 16 + E70000006300000000060000BD000000 + + + 16 + 8A000000A1000000C20200000F010000 + + + + 204 + 204 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + EA00000066000000FD050000A4000000 + + + 16 + 8A000000A1000000C20200000F010000 + + + + 221 + 221 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + 00000000000000000000000000000000 + + + 16 + 0A0000000A0000006E0000006E000000 + + + + 2506 + 2506 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + E3020000660000006D0400008C010000 + + + 16 + 8A000000A10000001A02000031020000 + + + + 2507 + 2507 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + 0703000056020000FD050000F5020000 + + + 16 + 8A000000A1000000C20200000F010000 + + + + 343 + 343 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + EA00000066000000FD050000A4000000 + + + 16 + 8A000000A1000000C20200000F010000 + + + + 346 + 346 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + EA00000066000000FD050000A4000000 + + + 16 + 8A000000A1000000C20200000F010000 + + + + 35824 + 35824 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + EA00000066000000FD050000A4000000 + + + 16 + 8A000000A1000000C20200000F010000 + + + + 35885 + 35885 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + E3020000660000006D0400008C010000 + + + 16 + 8A000000A10000001A02000031020000 + + + + 35886 + 35886 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + E3020000660000006D0400008C010000 + + + 16 + 8A000000A10000001A02000031020000 + + + + 35887 + 35887 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + E3020000660000006D0400008C010000 + + + 16 + 8A000000A10000001A02000031020000 + + + + 35888 + 35888 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + E3020000660000006D0400008C010000 + + + 16 + 8A000000A10000001A02000031020000 + + + + 35889 + 35889 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + E3020000660000006D0400008C010000 + + + 16 + 8A000000A10000001A02000031020000 + + + + 35890 + 35890 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + E3020000660000006D0400008C010000 + + + 16 + 8A000000A10000001A02000031020000 + + + + 35891 + 35891 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + E3020000660000006D0400008C010000 + + + 16 + 8A000000A10000001A02000031020000 + + + + 35892 + 35892 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + E3020000660000006D0400008C010000 + + + 16 + 8A000000A10000001A02000031020000 + + + + 35893 + 35893 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + E3020000660000006D0400008C010000 + + + 16 + 8A000000A10000001A02000031020000 + + + + 35894 + 35894 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + E3020000660000006D0400008C010000 + + + 16 + 8A000000A10000001A02000031020000 + + + + 35895 + 35895 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + E3020000660000006D0400008C010000 + + + 16 + 8A000000A10000001A02000031020000 + + + + 35896 + 35896 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + E3020000660000006D0400008C010000 + + + 16 + 8A000000A10000001A02000031020000 + + + + 35897 + 35897 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + E3020000660000006D0400008C010000 + + + 16 + 8A000000A10000001A02000031020000 + + + + 35898 + 35898 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + E3020000660000006D0400008C010000 + + + 16 + 8A000000A10000001A02000031020000 + + + + 35899 + 35899 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + E3020000660000006D0400008C010000 + + + 16 + 8A000000A10000001A02000031020000 + + + + 35900 + 35900 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + E3020000660000006D0400008C010000 + + + 16 + 8A000000A10000001A02000031020000 + + + + 35901 + 35901 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + E3020000660000006D0400008C010000 + + + 16 + 8A000000A10000001A02000031020000 + + + + 35902 + 35902 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + E3020000660000006D0400008C010000 + + + 16 + 8A000000A10000001A02000031020000 + + + + 35903 + 35903 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + E3020000660000006D0400008C010000 + + + 16 + 8A000000A10000001A02000031020000 + + + + 35904 + 35904 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + E3020000660000006D0400008C010000 + + + 16 + 8A000000A10000001A02000031020000 + + + + 35905 + 35905 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + E3020000660000006D0400008C010000 + + + 16 + 8A000000A10000001A02000031020000 + + + + 38003 + 38003 + 1 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + 0300000066000000E000000022020000 + + + 16 + 8A000000A10000006D0100005D020000 + + + + 38007 + 38007 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + 03000000C00100006D040000FE010000 + + + 16 + 8A000000A1000000C20200000F010000 + + + + 436 + 436 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + 03000000C00100006D040000FE010000 + + + 16 + 8A000000A10000006D0100005D020000 + + + + 437 + 437 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + 0703000056020000FD050000F5020000 + + + 16 + 8A000000A10000001A02000031020000 + + + + 440 + 440 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + 0703000056020000FD050000F5020000 + + + 16 + 8A000000A10000001A02000031020000 + + + + 59392 + 59392 + 1 + 0 + 0 + 0 + 940 + 0 + 8192 + 0 + + 16 + 0000000000000000B70300001C000000 + + + 16 + 0A0000000A0000006E0000006E000000 + + + + 59393 + 0 + 1 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + 000000000E0300000006000021030000 + + + 16 + 0A0000000A0000006E0000006E000000 + + + + 59399 + 59399 + 0 + 0 + 0 + 0 + 439 + 0 + 8192 + 1 + + 16 + 000000001C000000C201000038000000 + + + 16 + 0A0000000A0000006E0000006E000000 + + + + 59400 + 59400 + 1 + 0 + 0 + 0 + 612 + 0 + 8192 + 2 + + 16 + 000000001C0000006F02000038000000 + + + 16 + 0A0000000A0000006E0000006E000000 + + + + 2618 + 000000000B000000000000000020000001000000FFFFFFFFFFFFFFFFE7000000BD00000000060000C1000000010000000100001004000000010000000000000000000000FFFFFFFF06000000CB00000057010000CC000000F08B00005A01000079070000FFFF02000B004354616262656450616E650020000001000000E70000006600000000060000D4000000E70000004F00000000060000BD0000000000000040280056060000000B446973617373656D626C7901000000CB00000001000000FFFFFFFFFFFFFFFF14506572666F726D616E636520416E616C797A6572000000005701000001000000FFFFFFFFFFFFFFFF14506572666F726D616E636520416E616C797A657200000000CC00000001000000FFFFFFFFFFFFFFFF0E4C6F67696320416E616C797A657200000000F08B000001000000FFFFFFFFFFFFFFFF0D436F646520436F766572616765000000005A01000001000000FFFFFFFFFFFFFFFF11496E737472756374696F6E205472616365000000007907000001000000FFFFFFFFFFFFFFFF00000000000000000000000000000000000000000000000001000000FFFFFFFFCB00000001000000FFFFFFFFCB000000000000000040000000000000FFFFFFFFFFFFFFFFDC0200004F000000E0020000A5010000000000000200000004000000010000000000000000000000FFFFFFFF17000000E2050000CA0900002D8C00002E8C00002F8C0000308C0000318C0000328C0000338C0000348C0000358C0000368C0000378C0000388C0000398C00003A8C00003B8C00003C8C00003D8C00003E8C00003F8C0000408C0000418C000001800040000000000000E00200006600000070040000BC010000E00200004F00000070040000A50100000000000040410046170000000753796D626F6C7300000000E205000001000000FFFFFFFFFFFFFFFF0A5472616365204461746100000000CA09000001000000FFFFFFFFFFFFFFFF00000000002D8C000001000000FFFFFFFFFFFFFFFF00000000002E8C000001000000FFFFFFFFFFFFFFFF00000000002F8C000001000000FFFFFFFFFFFFFFFF0000000000308C000001000000FFFFFFFFFFFFFFFF0000000000318C000001000000FFFFFFFFFFFFFFFF0000000000328C000001000000FFFFFFFFFFFFFFFF0000000000338C000001000000FFFFFFFFFFFFFFFF0000000000348C000001000000FFFFFFFFFFFFFFFF0000000000358C000001000000FFFFFFFFFFFFFFFF0000000000368C000001000000FFFFFFFFFFFFFFFF0000000000378C000001000000FFFFFFFFFFFFFFFF0000000000388C000001000000FFFFFFFFFFFFFFFF0000000000398C000001000000FFFFFFFFFFFFFFFF00000000003A8C000001000000FFFFFFFFFFFFFFFF00000000003B8C000001000000FFFFFFFFFFFFFFFF00000000003C8C000001000000FFFFFFFFFFFFFFFF00000000003D8C000001000000FFFFFFFFFFFFFFFF00000000003E8C000001000000FFFFFFFFFFFFFFFF00000000003F8C000001000000FFFFFFFFFFFFFFFF0000000000408C000001000000FFFFFFFFFFFFFFFF0000000000418C000001000000FFFFFFFFFFFFFFFFFFFFFFFF000000000000000000000000000000000000000001000000FFFFFFFFE205000001000000FFFFFFFFE2050000000000000010000001000000FFFFFFFFFFFFFFFFE30000004F000000E70000003B020000010000000200001004000000010000000000000000000000FFFFFFFF05000000ED0300006D000000C3000000C400000073940000018000100000010000000000000066000000E300000052020000000000004F000000E30000003B0200000000000040140056050000000750726F6A65637401000000ED03000001000000FFFFFFFFFFFFFFFF05426F6F6B73000000006D00000001000000FFFFFFFFFFFFFFFF0946756E6374696F6E7300000000C300000001000000FFFFFFFFFFFFFFFF0954656D706C6174657300000000C400000001000000FFFFFFFFFFFFFFFF09526567697374657273010000007394000001000000FFFFFFFFFFFFFFFF04000000000000000000000000000000000000000000000001000000FFFFFFFFED03000001000000FFFFFFFFED030000000000000080000001000000FFFFFFFFFFFFFFFF000000003B020000000600003F020000010000000100001004000000010000003EFEFFFF1D00000000000000000000000000000001000000C6000000FFFFFFFF0E0000008F070000930700009407000095070000960700009007000091070000B5010000B8010000B9050000BA050000BB050000BC050000CB0900000180008000000100000004030000560200000006000025030000040300003F020000000600000E03000000000000404100560E0000001343616C6C20537461636B202B204C6F63616C73010000008F07000001000000FFFFFFFFFFFFFFFF0755415254202331000000009307000001000000FFFFFFFFFFFFFFFF0755415254202332000000009407000001000000FFFFFFFFFFFFFFFF0755415254202333000000009507000001000000FFFFFFFFFFFFFFFF15446562756720287072696E74662920566965776572000000009607000001000000FFFFFFFFFFFFFFFF0757617463682031010000009007000001000000FFFFFFFFFFFFFFFF0757617463682032000000009107000001000000FFFFFFFFFFFFFFFF10547261636520457863657074696F6E7300000000B501000001000000FFFFFFFFFFFFFFFF0E4576656E7420436F756E7465727300000000B801000001000000FFFFFFFFFFFFFFFF084D656D6F7279203101000000B905000001000000FFFFFFFFFFFFFFFF084D656D6F7279203200000000BA05000001000000FFFFFFFFFFFFFFFF084D656D6F7279203300000000BB05000001000000FFFFFFFFFFFFFFFF084D656D6F7279203400000000BC05000001000000FFFFFFFFFFFFFFFF105472616365204E617669676174696F6E00000000CB09000001000000FFFFFFFFFFFFFFFF090000000000000001000000000000000100000001000000FFFFFFFF000300003F020000040300000E03000001000000020000100400000000000000000000000000000000000000000000000000000002000000C6000000FFFFFFFF8F07000001000000FFFFFFFF8F07000001000000C6000000000000000080000000000000FFFFFFFFFFFFFFFF00000000A501000070040000A9010000000000000100000004000000010000000000000000000000FFFFFFFF04000000C5000000C7000000B4010000779400000180008000000000000000000000C0010000700400002E02000000000000A901000070040000170200000000000040820046040000000C4275696C64204F757470757400000000C500000001000000FFFFFFFFFFFFFFFF0D46696E6420496E2046696C657300000000C700000001000000FFFFFFFFFFFFFFFF0A4572726F72204C69737400000000B401000001000000FFFFFFFFFFFFFFFF0642726F777365000000007794000001000000FFFFFFFFFFFFFFFFFFFFFFFF000000000000000000000000000000000000000001000000FFFFFFFFC500000001000000FFFFFFFFC5000000000000000000000000000000 + + + 59392 + File + + 2775 + 00200000010000002800FFFF01001100434D4643546F6F6C426172427574746F6E00E100000000000000000000000000000000000000000000000100000001000000018001E100000000000001000000000000000000000000000000000100000001000000018003E1000000000000020000000000000000000000000000000001000000010000000180CD7F0000000000000300000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF000000000000000000000000000100000001000000018023E100000000040004000000000000000000000000000000000100000001000000018022E100000000040005000000000000000000000000000000000100000001000000018025E10000000000000600000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF00000000000000000000000000010000000100000001802BE10000000000000700000000000000000000000000000000010000000100000001802CE10000000004000800000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF00000000000000000000000000010000000100000001807A8A0000000000000900000000000000000000000000000000010000000100000001807B8A0000000004000A00000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF0000000000000000000000000001000000010000000180D3B00000000000000B000000000000000000000000000000000100000001000000018015B10000000004000C0000000000000000000000000000000001000000010000000180F4B00000000004000D000000000000000000000000000000000100000001000000018036B10000000004000E00000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF0000000000000000000000000001000000010000000180FF88000000000400460000000000000000000000000000000001000000010000000180FE880000000004004500000000000000000000000000000000010000000100000001800B810000000004001300000000000000000000000000000000010000000100000001800C810000000004001400000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF0000000000000000000000000001000000010000000180F0880000020000000F000000000000000000000000000000000100000001000000FFFF0100120043555646696E64436F6D626F427574746F6EE803000000000000000000000000000000000000000000000001000000010000009600000002002050000000006023696620646566696E656420285343393246383436784229207C7C20646566696E656420285343393246373436784229207C7C20646566696E656420285343393246383336784229207C7C20646566696E656420285343393246373336784229960000000000000004006023696620646566696E656420285343393246383436784229207C7C20646566696E656420285343393246373436784229207C7C20646566696E656420285343393246383336784229207C7C20646566696E656420285343393246373336784229C023696620646566696E6564202853433932463835347829207C7C20646566696E6564202853433932463735347829207C7C646566696E65642020285343393246383434784229207C7C20646566696E6564202853433932463734347842297C7C646566696E65642020285343393246383441785F3229207C7C20646566696E656420285343393246373441785F32297C7C20646566696E656420285343393246383341785F3229207C7C20646566696E656420285343393246373341785F3229B823696620646566696E6564202853433932463835347829207C7C20646566696E6564202853433932463735347829207C7C646566696E65642020285343393246383434784229207C7C20646566696E6564202853433932463734347842297C7C646566696E656420202853433932463834417829207C7C20646566696E65642028534339324637344178297C7C20646566696E6564202853433932463833417829207C7C20646566696E6564202853433932463733417829B923696620646566696E6564202853433932463835347829207C7C20646566696E6564202853433932463735347829207C7C20646566696E656420285343393246383434784229207C7C20646566696E6564202853433932463734347842297C7C20646566696E6564202853433932463834417829207C7C20646566696E65642028534339324637344178297C7C20646566696E6564202853433932463833417829207C7C20646566696E65642028534339324637334178292000000000000000000000000000000000018024E10000000000001100000000000000000000000000000000010000000100000001800A810000000000001200000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF000000000000000000000000000100000001000000018022800000020003001500000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF0000000000000000000000000001000000010000000180C488000000000000160000000000000000000000000000000001000000010000000180C988000000000400180000000000000000000000000000000001000000010000000180C788000000000000190000000000000000000000000000000001000000010000000180C8880000000000001700000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF000000000000000000000000000100000001000000FFFF01001500434D4643546F6F6C4261724D656E75427574746F6E4C010000020001001A0000000F50726F6A6563742057696E646F7773000000000000000000000000010000000100000000000000000000000100000008002880DD880000000000001A0000000750726F6A656374000000000000000000000000010000000100000000000000000000000100000000002880DC8B0000000000003A00000005426F6F6B73000000000000000000000000010000000100000000000000000000000100000000002880E18B0000000000003B0000000946756E6374696F6E73000000000000000000000000010000000100000000000000000000000100000000002880E28B000000000000400000000954656D706C6174657300000000000000000000000001000000010000000000000000000000010000000000288018890000000000003D0000000E536F757263652042726F777365720000000000000000000000000100000001000000000000000000000001000000000028800000000000000400FFFFFFFF00000000000000000001000000000000000100000000000000000000000100000000002880D988000000000000390000000C4275696C64204F7574707574000000000000000000000000010000000100000000000000000000000100000000002880E38B000000000000410000000B46696E64204F75747075740000000000000000000000000100000001000000000000000000000001000000000001800000000001000000FFFFFFFF0000000000000000000000000001000000010000000180FB7F0000000000001B000000000000000000000000000000000100000001000000000000000446696C65AC030000 + + + 1423 + 2800FFFF01001100434D4643546F6F6C426172427574746F6E00E1000000000000FFFFFFFF000100000000000000010000000000000001000000018001E1000000000000FFFFFFFF000100000000000000010000000000000001000000018003E1000000000000FFFFFFFF0001000000000000000100000000000000010000000180CD7F000000000000FFFFFFFF00010000000000000001000000000000000100000001800000000000000000FFFFFFFF000000000000000000010000000000000001000000018023E1000000000000FFFFFFFF000100000000000000010000000000000001000000018022E1000000000000FFFFFFFF000100000000000000010000000000000001000000018025E1000000000000FFFFFFFF00010000000000000001000000000000000100000001800000000000000000FFFFFFFF00000000000000000001000000000000000100000001802BE1000000000000FFFFFFFF00010000000000000001000000000000000100000001802CE1000000000000FFFFFFFF00010000000000000001000000000000000100000001800000000000000000FFFFFFFF00000000000000000001000000000000000100000001807A8A000000000000FFFFFFFF00010000000000000001000000000000000100000001807B8A000000000000FFFFFFFF00010000000000000001000000000000000100000001800000000000000000FFFFFFFF0000000000000000000100000000000000010000000180D3B0000000000000FFFFFFFF000100000000000000010000000000000001000000018015B1000000000000FFFFFFFF0001000000000000000100000000000000010000000180F4B0000000000000FFFFFFFF000100000000000000010000000000000001000000018036B1000000000000FFFFFFFF00010000000000000001000000000000000100000001800000000000000000FFFFFFFF0000000000000000000100000000000000010000000180FF88000000000000FFFFFFFF0001000000000000000100000000000000010000000180FE88000000000000FFFFFFFF00010000000000000001000000000000000100000001800B81000000000000FFFFFFFF00010000000000000001000000000000000100000001800C81000000000000FFFFFFFF00010000000000000001000000000000000100000001800000000000000000FFFFFFFF0000000000000000000100000000000000010000000180F088000000000000FFFFFFFF0001000000000000000100000000000000010000000180EE7F000000000000FFFFFFFF000100000000000000010000000000000001000000018024E1000000000000FFFFFFFF00010000000000000001000000000000000100000001800A81000000000000FFFFFFFF00010000000000000001000000000000000100000001800000000000000000FFFFFFFF00000000000000000001000000000000000100000001802280000000000000FFFFFFFF00010000000000000001000000000000000100000001800000000000000000FFFFFFFF0000000000000000000100000000000000010000000180C488000000000000FFFFFFFF0001000000000000000100000000000000010000000180C988000000000000FFFFFFFF0001000000000000000100000000000000010000000180C788000000000000FFFFFFFF0001000000000000000100000000000000010000000180C888000000000000FFFFFFFF00010000000000000001000000000000000100000001800000000000000000FFFFFFFF0000000000000000000100000000000000010000000180DD88000000000000FFFFFFFF00010000000000000001000000000000000100000001800000000000000000FFFFFFFF0000000000000000000100000000000000010000000180FB7F000000000000FFFFFFFF000100000000000000010000000000000001000000 + + + 1423 + 2800FFFF01001100434D4643546F6F6C426172427574746F6E00E100000000000000000000000000000000000000000000000100000001000000018001E100000000000001000000000000000000000000000000000100000001000000018003E1000000000000020000000000000000000000000000000001000000010000000180CD7F0000000000000300000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF000000000000000000000000000100000001000000018023E100000000000004000000000000000000000000000000000100000001000000018022E100000000000005000000000000000000000000000000000100000001000000018025E10000000000000600000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF00000000000000000000000000010000000100000001802BE10000000000000700000000000000000000000000000000010000000100000001802CE10000000000000800000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF00000000000000000000000000010000000100000001807A8A0000000000000900000000000000000000000000000000010000000100000001807B8A0000000000000A00000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF0000000000000000000000000001000000010000000180D3B00000000000000B000000000000000000000000000000000100000001000000018015B10000000000000C0000000000000000000000000000000001000000010000000180F4B00000000000000D000000000000000000000000000000000100000001000000018036B10000000000000E00000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF0000000000000000000000000001000000010000000180FF880000000000000F0000000000000000000000000000000001000000010000000180FE880000000000001000000000000000000000000000000000010000000100000001800B810000000000001100000000000000000000000000000000010000000100000001800C810000000000001200000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF0000000000000000000000000001000000010000000180F088000000000000130000000000000000000000000000000001000000010000000180EE7F00000000000014000000000000000000000000000000000100000001000000018024E10000000000001500000000000000000000000000000000010000000100000001800A810000000000001600000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF000000000000000000000000000100000001000000018022800000000000001700000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF0000000000000000000000000001000000010000000180C488000000000000180000000000000000000000000000000001000000010000000180C988000000000000190000000000000000000000000000000001000000010000000180C7880000000000001A0000000000000000000000000000000001000000010000000180C8880000000000001B00000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF0000000000000000000000000001000000010000000180DD880000000000001C00000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF0000000000000000000000000001000000010000000180FB7F0000000000001D000000000000000000000000000000000100000001000000 + + + + 59399 + Build + + 622 + 00200000000000000F00FFFF01001100434D4643546F6F6C426172427574746F6ECF7F0000000000001C0000000000000000000000000000000001000000010000000180D07F0000000000001D000000000000000000000000000000000100000001000000018030800000000000001E00000000000000000000000000000000010000000100000001809E8A0000000000001F0000000000000000000000000000000001000000010000000180D17F0000000000002000000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF00000000000000000000000000010000000100000001804C8A0000000000002100000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF000000000000000000000000000100000001000000FFFF01001900434D4643546F6F6C426172436F6D626F426F78427574746F6EBA00000000000000000000000000000000000000000000000001000000010000009600000003002050FFFFFFFF00960000000000000000000180EB880000000000002200000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF0000000000000000000000000001000000010000000180C07F000000000000230000000000000000000000000000000001000000010000000180B08A000000000000240000000000000000000000000000000001000000010000000180A8010000000000004E0000000000000000000000000000000001000000010000000180BE010000000000005000000000000000000000000000000000010000000100000000000000054275696C64B7010000 + + + 548 + 0F00FFFF01001100434D4643546F6F6C426172427574746F6ECF7F000000000000FFFFFFFF0001000000000000000100000000000000010000000180D07F000000000000FFFFFFFF00010000000000000001000000000000000100000001803080000000000000FFFFFFFF00010000000000000001000000000000000100000001809E8A000000000000FFFFFFFF0001000000000000000100000000000000010000000180D17F000000000000FFFFFFFF00010000000000000001000000000000000100000001800000000000000000FFFFFFFF00000000000000000001000000000000000100000001804C8A000000000000FFFFFFFF00010000000000000001000000000000000100000001800000000000000000FFFFFFFF00000000000000000001000000000000000100000001806680000000000000FFFFFFFF0001000000000000000100000000000000010000000180EB88000000000000FFFFFFFF00010000000000000001000000000000000100000001800000000000000000FFFFFFFF0000000000000000000100000000000000010000000180C07F000000000000FFFFFFFF0001000000000000000100000000000000010000000180B08A000000000000FFFFFFFF0001000000000000000100000000000000010000000180A801000000000000FFFFFFFF0001000000000000000100000000000000010000000180BE01000000000000FFFFFFFF000100000000000000010000000000000001000000 + + + 548 + 0F00FFFF01001100434D4643546F6F6C426172427574746F6ECF7F000000000000000000000000000000000000000000000001000000010000000180D07F00000000000001000000000000000000000000000000000100000001000000018030800000000000000200000000000000000000000000000000010000000100000001809E8A000000000000030000000000000000000000000000000001000000010000000180D17F0000000000000400000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF00000000000000000000000000010000000100000001804C8A0000000000000500000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF00000000000000000000000000010000000100000001806680000000000000060000000000000000000000000000000001000000010000000180EB880000000000000700000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF0000000000000000000000000001000000010000000180C07F000000000000080000000000000000000000000000000001000000010000000180B08A000000000000090000000000000000000000000000000001000000010000000180A8010000000000000A0000000000000000000000000000000001000000010000000180BE010000000000000B000000000000000000000000000000000100000001000000 + + + + 59400 + Debug + + 2220 + 00200000010000001900FFFF01001100434D4643546F6F6C426172427574746F6ECC880000000000002500000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF000000000000000000000000000100000001000000018017800000000000002600000000000000000000000000000000010000000100000001801D800000000004002700000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF00000000000000000000000000010000000100000001801A800000000000002800000000000000000000000000000000010000000100000001801B80000000000000290000000000000000000000000000000001000000010000000180E57F0000000004002A00000000000000000000000000000000010000000100000001801C800000000000002B00000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF000000000000000000000000000100000001000000018000890000000000002C00000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF0000000000000000000000000001000000010000000180E48B0000020001002D0000000000000000000000000000000001000000010000000180F07F0000020001002E0000000000000000000000000000000001000000010000000180E8880000020000003700000000000000000000000000000000010000000100000001803B010000020001002F0000000000000000000000000000000001000000010000000180BB8A00000200010030000000000000000000000000000000000100000001000000FFFF01001500434D4643546F6F6C4261724D656E75427574746F6E0E01000002000100310000000D57617463682057696E646F7773000000000000000000000000010000000100000000000000000000000100000002001380D88B000000000000310000000757617463682031000000000000000000000000010000000100000000000000000000000100000000001380D98B0000000000003100000007576174636820320000000000000000000000000100000001000000000000000000000001000000000013800F01000002000100320000000E4D656D6F72792057696E646F7773000000000000000000000000010000000100000000000000000000000100000004001380D28B00000000000032000000084D656D6F72792031000000000000000000000000010000000100000000000000000000000100000000001380D38B00000000000032000000084D656D6F72792032000000000000000000000000010000000100000000000000000000000100000000001380D48B00000000000032000000084D656D6F72792033000000000000000000000000010000000100000000000000000000000100000000001380D58B00000000000032000000084D656D6F727920340000000000000000000000000100000001000000000000000000000001000000000013801001000002000000330000000E53657269616C2057696E646F77730000000000000000000000000100000001000000000000000000000001000000040013809307000000000000330000000755415254202331000000000000000000000000010000000100000000000000000000000100000000001380940700000000000033000000075541525420233200000000000000000000000001000000010000000000000000000000010000000000138095070000000000003300000007554152542023330000000000000000000000000100000001000000000000000000000001000000000013809607000000000000330000000E49544D2F525441205669657765720000000000000000000000000100000001000000000000000000000001000000000013803C010000020000003400000010416E616C797369732057696E646F7773000000000000000000000000010000000100000000000000000000000100000003001380658A000000000000340000000E4C6F67696320416E616C797A6572000000000000000000000000010000000100000000000000000000000100000000001380DC7F0000000000003E00000014506572666F726D616E636520416E616C797A6572000000000000000000000000010000000100000000000000000000000100000000001380E788000000000000380000000D436F646520436F76657261676500000000000000000000000001000000010000000000000000000000010000000000138053010000000000003F0000000D54726163652057696E646F77730000000000000000000000000100000001000000000000000000000001000000010013805401000000000000FFFFFFFF115472616365204D656E7520416E63686F720100000000000000010000000000000001000000000000000000000001000000000013802901000000000000350000001553797374656D205669657765722057696E646F77730000000000000000000000000100000001000000000000000000000001000000010013804B01000000000000FFFFFFFF1453797374656D2056696577657220416E63686F720100000000000000010000000000000001000000000000000000000001000000000001800000000001000000FFFFFFFF000000000000000000000000000100000001000000138001890000020000003600000007546F6F6C626F7800000000000000000000000001000000010000000000000000000000010000000300138044C5000000000000FFFFFFFF0E5570646174652057696E646F77730100000000000000010000000000000001000000000000000000000001000000000013800000000000000400FFFFFFFF000000000000000000010000000000000001000000000000000000000001000000000013805B01000000000000FFFFFFFF12546F6F6C626F78204D656E75416E63686F72010000000000000001000000000000000100000000000000000000000100000000000000000005446562756764020000 + + + 898 + 1900FFFF01001100434D4643546F6F6C426172427574746F6ECC88000000000000FFFFFFFF00010000000000000001000000000000000100000001800000000000000000FFFFFFFF00000000000000000001000000000000000100000001801780000000000000FFFFFFFF00010000000000000001000000000000000100000001801D80000000000000FFFFFFFF00010000000000000001000000000000000100000001800000000000000000FFFFFFFF00000000000000000001000000000000000100000001801A80000000000000FFFFFFFF00010000000000000001000000000000000100000001801B80000000000000FFFFFFFF0001000000000000000100000000000000010000000180E57F000000000000FFFFFFFF00010000000000000001000000000000000100000001801C80000000000000FFFFFFFF00010000000000000001000000000000000100000001800000000000000000FFFFFFFF00000000000000000001000000000000000100000001800089000000000000FFFFFFFF00010000000000000001000000000000000100000001800000000000000000FFFFFFFF0000000000000000000100000000000000010000000180E48B000000000000FFFFFFFF0001000000000000000100000000000000010000000180F07F000000000000FFFFFFFF0001000000000000000100000000000000010000000180E888000000000000FFFFFFFF00010000000000000001000000000000000100000001803B01000000000000FFFFFFFF0001000000000000000100000000000000010000000180BB8A000000000000FFFFFFFF0001000000000000000100000000000000010000000180D88B000000000000FFFFFFFF0001000000000000000100000000000000010000000180D28B000000000000FFFFFFFF00010000000000000001000000000000000100000001809307000000000000FFFFFFFF0001000000000000000100000000000000010000000180658A000000000000FFFFFFFF0001000000000000000100000000000000010000000180C18A000000000000FFFFFFFF0001000000000000000100000000000000010000000180EE8B000000000000FFFFFFFF00010000000000000001000000000000000100000001800000000000000000FFFFFFFF00000000000000000001000000000000000100000001800189000000000000FFFFFFFF000100000000000000010000000000000001000000 + + + 898 + 1900FFFF01001100434D4643546F6F6C426172427574746F6ECC880000000000000000000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF000000000000000000000000000100000001000000018017800000000000000100000000000000000000000000000000010000000100000001801D800000000000000200000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF00000000000000000000000000010000000100000001801A800000000000000300000000000000000000000000000000010000000100000001801B80000000000000040000000000000000000000000000000001000000010000000180E57F0000000000000500000000000000000000000000000000010000000100000001801C800000000000000600000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF000000000000000000000000000100000001000000018000890000000000000700000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF0000000000000000000000000001000000010000000180E48B000000000000080000000000000000000000000000000001000000010000000180F07F000000000000090000000000000000000000000000000001000000010000000180E8880000000000000A00000000000000000000000000000000010000000100000001803B010000000000000B0000000000000000000000000000000001000000010000000180BB8A0000000000000C0000000000000000000000000000000001000000010000000180D88B0000000000000D0000000000000000000000000000000001000000010000000180D28B0000000000000E000000000000000000000000000000000100000001000000018093070000000000000F0000000000000000000000000000000001000000010000000180658A000000000000100000000000000000000000000000000001000000010000000180C18A000000000000110000000000000000000000000000000001000000010000000180EE8B0000000000001200000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF0000000000000000000000000001000000010000000180018900000000000013000000000000000000000000000000000100000001000000 + + + + 0 + 1536 + 864 + + + + + + + E:\宸ヤ綔\宸ヤ綔椤圭洰\BSP鍖匼SC92F绯诲垪閫氱敤BSP鍖匳0.0.1\KEIL_MOULD\FWLIB\SC92F_LIB\INC\SC92F_UART0.H + 0 + 3 + 9 + + + E:\宸ヤ綔\宸ヤ綔椤圭洰\BSP鍖匼SC92F绯诲垪閫氱敤BSP鍖匳0.0.1\Keil_Mould\FWLIB\SC92F_LIB\SRC\SC92F_UART0.C + 0 + 1 + 9 + + + E:\宸ヤ綔\宸ヤ綔椤圭洰\BSP鍖匼SC92F绯诲垪閫氱敤BSP鍖匳0.0.1\KEIL_MOULD\FWLIB\SC92F_LIB\INC\SC92F.H + 0 + 1 + 9 + + + E:\宸ヤ綔\宸ヤ綔椤圭洰\BSP鍖匼SC92F绯诲垪閫氱敤BSP鍖匳0.0.1\Keil_Mould\FWLib\SC92F_Lib\src\sc92f_iap.c + 0 + 1 + 9 + + + E:\宸ヤ綔\宸ヤ綔椤圭洰\BSP鍖匼SC92F绯诲垪閫氱敤BSP鍖匳0.0.1\Keil_Mould\FWLib\SC92F_Lib\inc\sc92f_iap.h + 0 + 1 + 9 + + + E:\宸ヤ綔\宸ヤ綔椤圭洰\BSP鍖匼SC92F绯诲垪閫氱敤BSP鍖匳0.0.1\Keil_Mould\FWLib\SC92F_Lib\src\sc92f_pwr.c + 0 + 1 + 9 + + + E:\宸ヤ綔\宸ヤ綔椤圭洰\BSP鍖匼SC92F绯诲垪閫氱敤BSP鍖匳0.0.1\Keil_Mould\FWLib\SC92F_Lib\src\sc92f_pwm.c + 0 + 1 + 12 + + + E:\宸ヤ綔\宸ヤ綔椤圭洰\BSP鍖匼SC92F绯诲垪閫氱敤BSP鍖匳0.0.1\Keil_Mould\FWLib\SC92F_Lib\inc\sc92f_pwm.h + 0 + 121 + 132 + + + E:\宸ヤ綔\宸ヤ綔椤圭洰\BSP鍖匼SC92F绯诲垪閫氱敤BSP鍖匳0.0.1\Keil_Mould\FWLib\SC92F_Lib\src\sc92f_chksum.c + 0 + 22 + 31 + + + + + 1 + 0 + + 100 + 0 + + E:\宸ヤ綔\宸ヤ綔椤圭洰\BSP鍖匼SC92F绯诲垪閫氱敤BSP鍖匳0.0.1\Keil_Mould\FWLib\SC92F_Lib\src\sc92f_chksum.c + 10 + 22 + 31 + 1 + + 0 + + + E:\宸ヤ綔\宸ヤ綔椤圭洰\BSP鍖匼SC92F绯诲垪閫氱敤BSP鍖匳0.0.1\Keil_Mould\FWLib\SC92F_Lib\src\sc92f_pwm.c + 17 + 1 + 12 + 1 + + 0 + + + E:\宸ヤ綔\宸ヤ綔椤圭洰\BSP鍖匼SC92F绯诲垪閫氱敤BSP鍖匳0.0.1\Keil_Mould\FWLib\SC92F_Lib\src\sc92f_pwr.c + 33 + 1 + 9 + 1 + + 0 + + + ..\FWLib\SC92F_Lib\src\sc92f_gpio.c + 34 + 19 + 9 + 1 + + 0 + + + E:\宸ヤ綔\宸ヤ綔椤圭洰\BSP鍖匼SC92F绯诲垪閫氱敤BSP鍖匳0.0.1\Keil_Mould\FWLib\SC92F_Lib\src\sc92f_iap.c + 33 + 1 + 9 + 1 + + 0 + + + \宸ヤ綔\宸ヤ綔椤圭洰\BSP鍖匼SC92F绯诲垪閫氱敤BSP鍖匳0.0.1\KEIL_MOULD\FWLIB\SC92F_LIB\INC\SC92F.H + 33 + 1 + 9 + 1 + + 0 + + + E:\宸ヤ綔\宸ヤ綔椤圭洰\BSP鍖匼SC92F绯诲垪閫氱敤BSP鍖匳0.0.1\Keil_Mould\FWLIB\SC92F_LIB\SRC\SC92F_UART0.C + 33 + 1 + 9 + 1 + + 0 + + + \宸ヤ綔\宸ヤ綔椤圭洰\BSP鍖匼SC92F绯诲垪閫氱敤BSP鍖匳0.0.1\KEIL_MOULD\FWLIB\SC92F_LIB\INC\SC92F_UART0.H + 33 + 3 + 9 + 1 + + 0 + + + \宸ヤ綔\宸ヤ綔椤圭洰\BSP鍖匼SC92F绯诲垪閫氱敤BSP鍖匳0.0.1\KEIL_MOULD\FWLIB\SC92F_LIB\INC\SC92F_IAP.H + 33 + 1 + 9 + 1 + + 0 + + + \宸ヤ綔\宸ヤ綔椤圭洰\BSP鍖匼SC92F绯诲垪閫氱敤BSP鍖匳0.0.1\KEIL_MOULD\FWLIB\SC92F_LIB\INC\SC92F_PWM.H + 370 + 121 + 132 + 1 + + 0 + + + + +
diff --git a/Keil_C/Project/project name.uvopt b/Keil_C/Project/project name.uvopt new file mode 100644 index 0000000..a9c14e2 --- /dev/null +++ b/Keil_C/Project/project name.uvopt @@ -0,0 +1,1683 @@ + + + + 1.0 + +
### uVision Project, (C) Keil Software
+ + + *.c + *.s*; *.src; *.a* + *.obj + *.lib + *.txt; *.h; *.inc; *.md + *.plm + *.cpp + + + + 0 + 0 + + + + <project name> + 0x0 + MCS-51 + + 16000000 + + 1 + 1 + 1 + 0 + + + 0 + 65535 + 0 + 0 + 0 + + + 120 + 65 + 8 + ..\List\ + + + 1 + 1 + 1 + 0 + 1 + 1 + 0 + 1 + 0 + 0 + 0 + 0 + + + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 0 + + + 1 + 0 + 1 + + 0 + + S8051.DLL + + DP51.DLL + -p51 + S8051.DLL + + TP51.DLL + -p51 + + + 1 + 0 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 1 + 1 + 1 + 0 + 1 + 0 + 0 + 9 + + + + + + + + + + + SinOne_Chip\SOC_Debug_Driver\SinOne_Chip_Debug_Driver.dll + + + + 0 + DLGDP51 + (98=-1,-1,-1,-1,0)(82=-1,-1,-1,-1,0)(83=-1,-1,-1,-1,0)(84=-1,-1,-1,-1,0)(85=-1,-1,-1,-1,0)(80=-1,-1,-1,-1,0)(91=-1,-1,-1,-1,0)(92=-1,-1,-1,-1,0) + + + 0 + DLGTP51 + (98=-1,-1,-1,-1,0)(82=-1,-1,-1,-1,0)(83=-1,-1,-1,-1,0)(84=-1,-1,-1,-1,0)(85=-1,-1,-1,-1,0)(80=-1,-1,-1,-1,0)(91=-1,-1,-1,-1,0)(92=-1,-1,-1,-1,0) + + + 0 + SinOne_Chip_Debug_Driver + + + + + + 0 + 0 + 20 + 1 +
-16776800
+ 0 + 0 + 0 + 0 + 1 + D:\project\test\tag\1216-20220525\SOCCodeGenerator\bin\Debug\CFG\SDK\92F\Keil_Mould\Project\User\main.c + + +
+
+ + + 0 + 1 + test + + + + + 1 + 0 + D:0 + + + + 0 + 0 + 1 + 0 + 0 + 0 + 0 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + + + +
+
+ + + User + 1 + 0 + 0 + + 1 + 1 + 1 + 0 + 0 + 16793171 + 0 + 0 + 0 + 0 + ..\User\main.c + main.c + + + 1 + 2 + 1 + 0 + 0 + 16793171 + 0 + 0 + 0 + 0 + ..\User\SC_Init.c + SC_Init.c + + + 1 + 3 + 1 + 0 + 0 + 16793171 + 0 + 0 + 0 + 0 + ..\User\SC_it.c + SC_it.c + + + 1 + 4 + 1 + 0 + 0 + 16793171 + 0 + 0 + 0 + 0 + ..\User\SysFunVarDefine.c + SysFunVarDefine.c + + + 1 + 5 + 1 + 0 + 0 + 16793171 + 0 + 0 + 0 + 0 + ..\User\CompCtrlDefine.c + CompCtrlDefine.c + + + + + Apps + 0 + 0 + 0 + + + + Drivers + 1 + 0 + 0 + + + + FWLib + 1 + 0 + 0 + + 4 + 6 + 1 + 0 + 0 + 16793171 + 0 + 0 + 0 + 0 + ..\FWLib\SC92F_Lib\src\sc92f_gpio.c + sc92f_gpio.c + + + 4 + 7 + 1 + 0 + 0 + 16793171 + 0 + 0 + 0 + 0 + ..\FWLib\SC92F_Lib\src\sc92f_option.c + sc92f_option.c + + + + + Startup + 1 + 0 + 0 + + 5 + 8 + 2 + 0 + 0 + 16793171 + 0 + 0 + 0 + 0 + .\STARTUP.A51 + STARTUP.A51 + + + + + Default + 1 + Build + 0 + + Default + 1 + + 59392 + 1 + File + 0 + + 0 + + 1 + 2 + 3 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 100 + 0 + 1 + 0 + + + 59398 + 2 + Build + 0 + + 0 + + 1 + 2 + 3 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 100 + 0 + 0 + 0 + + + 59399 + 3 + Debug + 0 + + 0 + + 1 + 2 + 3 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 100 + 0 + 1 + 0 + + + 197 + 4 + Build Output + 0 + + 0 + + 1 + 2 + 4 + 0 + 0 + 0 + 210 + 600 + 0 + 0 + 250 + 600 + 100 + 1 + 0 + 0 + + + 198 + 5 + Command + 197 + + 197 + + 1 + 4 + 2 + 0 + 0 + 0 + 210 + 600 + 0 + 0 + 250 + 600 + 100 + 1 + 1 + 0 + + + 199 + 6 + Find in Files + 197 + + 197 + + 1 + 4 + 2 + 0 + 0 + 0 + 210 + 600 + 0 + 0 + 250 + 600 + 100 + 0 + 0 + 0 + + + 38007 + 7 + Browse + 197 + + 197 + + 1 + 4 + 2 + 0 + 0 + 0 + 210 + 600 + 0 + 0 + 250 + 600 + 100 + 0 + 0 + 0 + + + 1939 + 8 + UART #1 + 197 + + 197 + + 1 + 4 + 2 + 0 + 0 + 0 + 210 + 600 + 0 + 0 + 250 + 600 + 100 + 0 + 0 + 0 + + + 1940 + 9 + UART #2 + 197 + + 197 + + 1 + 4 + 2 + 0 + 0 + 0 + 210 + 600 + 0 + 0 + 250 + 600 + 100 + 0 + 0 + 0 + + + 1941 + 10 + UART #3 + 197 + + 197 + + 1 + 4 + 2 + 0 + 0 + 0 + 210 + 600 + 0 + 0 + 250 + 600 + 100 + 0 + 0 + 0 + + + 1942 + 11 + UART #4 + 197 + + 197 + + 1 + 4 + 2 + 0 + 0 + 0 + 210 + 600 + 0 + 0 + 250 + 600 + 100 + 0 + 0 + 0 + + + 1944 + 12 + Call Stack + 197 + + 197 + + 1 + 2 + 2 + 0 + 0 + 0 + 600 + 210 + 0 + 0 + 600 + 250 + 50 + 0 + 1 + 0 + + + 1507 + 13 + Call Stack + 1944 + + 197 + + 1 + 4 + 2 + 0 + 0 + 0 + 600 + 210 + 0 + 0 + 600 + 250 + 50 + 0 + 1 + 0 + + + 1935 + 14 + Locals + 1944 + + 197 + + 1 + 4 + 2 + 0 + 0 + 0 + 210 + 600 + 0 + 0 + 250 + 600 + 100 + 0 + 1 + 0 + + + 1936 + 15 + Watch 1 + 1944 + + 197 + + 1 + 4 + 2 + 0 + 0 + 0 + 210 + 600 + 0 + 0 + 250 + 600 + 100 + 0 + 1 + 0 + + + 1937 + 16 + Watch 2 + 1944 + + 197 + + 1 + 4 + 2 + 0 + 0 + 0 + 210 + 600 + 0 + 0 + 250 + 600 + 100 + 0 + 0 + 0 + + + 1465 + 17 + Memory 1 + 1944 + + 197 + + 1 + 4 + 2 + 0 + 0 + 0 + 210 + 600 + 0 + 0 + 250 + 600 + 100 + 0 + 1 + 0 + + + 1466 + 18 + Memory 2 + 1944 + + 197 + + 1 + 4 + 2 + 0 + 0 + 0 + 210 + 600 + 0 + 0 + 250 + 600 + 100 + 0 + 0 + 0 + + + 1467 + 19 + Memory 3 + 1944 + + 197 + + 1 + 4 + 2 + 0 + 0 + 0 + 210 + 600 + 0 + 0 + 250 + 600 + 100 + 0 + 0 + 0 + + + 1468 + 20 + Memory 4 + 1944 + + 197 + + 1 + 4 + 2 + 0 + 0 + 0 + 210 + 600 + 0 + 0 + 250 + 600 + 100 + 0 + 0 + 0 + + + 1506 + 21 + Symbols + 1944 + + 197 + + 1 + 4 + 2 + 0 + 0 + 0 + 210 + 600 + 0 + 0 + 250 + 600 + 100 + 0 + 1 + 0 + + + 1005 + 22 + Project + 0 + + 0 + + 1 + 2 + 1 + 0 + 0 + 0 + 600 + 210 + 0 + 0 + 600 + 250 + 100 + 0 + 1 + 0 + + + 109 + 23 + Books + 1005 + + 1005 + + 1 + 4 + 2 + 0 + 0 + 0 + 600 + 210 + 0 + 0 + 600 + 250 + 100 + 0 + 0 + 0 + + + 195 + 24 + Functions + 1005 + + 1005 + + 1 + 4 + 2 + 0 + 0 + 0 + 600 + 210 + 0 + 0 + 600 + 250 + 100 + 0 + 0 + 0 + + + 196 + 25 + Templates + 1005 + + 1005 + + 1 + 4 + 2 + 0 + 0 + 0 + 600 + 210 + 0 + 0 + 600 + 250 + 100 + 0 + 0 + 0 + + + 38003 + 26 + Registers + 1005 + + 1005 + + 1 + 4 + 2 + 0 + 0 + 0 + 600 + 210 + 0 + 0 + 600 + 250 + 100 + 1 + 1 + 0 + + + 35885 + 27 + not set + 0 + + 0 + + 1 + 2 + 2 + 0 + 0 + 0 + 600 + 210 + 0 + 0 + 600 + 250 + 100 + 0 + 0 + 0 + + + 35886 + 28 + not set + 35885 + + 35885 + + 1 + 4 + 2 + 0 + 0 + 0 + 600 + 210 + 0 + 0 + 600 + 250 + 100 + 0 + 0 + 0 + + + 35887 + 29 + not set + 35885 + + 35885 + + 1 + 4 + 2 + 0 + 0 + 0 + 600 + 210 + 0 + 0 + 600 + 250 + 100 + 0 + 0 + 0 + + + 35888 + 30 + not set + 35885 + + 35885 + + 1 + 4 + 2 + 0 + 0 + 0 + 600 + 210 + 0 + 0 + 600 + 250 + 100 + 0 + 0 + 0 + + + 35889 + 31 + not set + 35885 + + 35885 + + 1 + 4 + 2 + 0 + 0 + 0 + 600 + 210 + 0 + 0 + 600 + 250 + 100 + 0 + 0 + 0 + + + 35890 + 32 + not set + 35885 + + 35885 + + 1 + 4 + 2 + 0 + 0 + 0 + 600 + 210 + 0 + 0 + 600 + 250 + 100 + 0 + 0 + 0 + + + 35891 + 33 + not set + 35885 + + 35885 + + 1 + 4 + 2 + 0 + 0 + 0 + 600 + 210 + 0 + 0 + 600 + 250 + 100 + 0 + 0 + 0 + + + 35892 + 34 + not set + 35885 + + 35885 + + 1 + 4 + 2 + 0 + 0 + 0 + 600 + 210 + 0 + 0 + 600 + 250 + 100 + 0 + 0 + 0 + + + 35893 + 35 + not set + 35885 + + 35885 + + 1 + 4 + 2 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 100 + 0 + 0 + 0 + + + 35894 + 36 + not set + 35885 + + 35885 + + 1 + 4 + 2 + 0 + 0 + 0 + 600 + 210 + 0 + 0 + 600 + 250 + 100 + 0 + 0 + 0 + + + 35895 + 37 + not set + 35885 + + 35885 + + 1 + 4 + 2 + 0 + 0 + 0 + 600 + 210 + 0 + 0 + 600 + 250 + 100 + 0 + 0 + 0 + + + 35896 + 38 + not set + 35885 + + 35885 + + 1 + 4 + 2 + 0 + 0 + 0 + 600 + 210 + 0 + 0 + 600 + 250 + 100 + 0 + 0 + 0 + + + 35897 + 39 + not set + 35885 + + 35885 + + 1 + 4 + 2 + 0 + 0 + 0 + 600 + 210 + 0 + 0 + 600 + 250 + 100 + 0 + 0 + 0 + + + 35898 + 40 + not set + 35885 + + 35885 + + 1 + 4 + 2 + 0 + 0 + 0 + 600 + 210 + 0 + 0 + 600 + 250 + 100 + 0 + 0 + 0 + + + 35899 + 41 + not set + 35885 + + 35885 + + 1 + 4 + 5 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 100 + 0 + 0 + 0 + + + 35900 + 42 + not set + 35885 + + 35885 + + 1 + 4 + 2 + 0 + 0 + 0 + 600 + 210 + 0 + 0 + 600 + 250 + 100 + 0 + 0 + 0 + + + 35901 + 43 + not set + 35885 + + 35885 + + 1 + 4 + 2 + 0 + 0 + 0 + 600 + 210 + 0 + 0 + 600 + 250 + 100 + 0 + 0 + 0 + + + 35902 + 44 + not set + 35885 + + 35885 + + 1 + 4 + 2 + 0 + 0 + 0 + 600 + 210 + 0 + 0 + 600 + 250 + 100 + 0 + 0 + 0 + + + 35903 + 45 + not set + 35885 + + 35885 + + 1 + 4 + 2 + 0 + 0 + 0 + 600 + 210 + 0 + 0 + 600 + 250 + 100 + 0 + 0 + 0 + + + 35904 + 46 + not set + 35885 + + 35885 + + 1 + 4 + 2 + 0 + 0 + 0 + 600 + 210 + 0 + 0 + 600 + 250 + 100 + 0 + 0 + 0 + + + 35905 + 47 + not set + 35885 + + 35885 + + 1 + 4 + 2 + 0 + 0 + 0 + 600 + 210 + 0 + 0 + 600 + 250 + 100 + 0 + 0 + 0 + + + 203 + 48 + Disassembly + 0 + + 0 + + 1 + 2 + 3 + 0 + 0 + 0 + 210 + 600 + 0 + 0 + 250 + 600 + 100 + 0 + 1 + 0 + + + 1913 + 49 + Instruction Trace + 203 + + 203 + + 1 + 4 + 2 + 0 + 0 + 0 + 600 + 210 + 0 + 0 + 600 + 250 + 100 + 0 + 0 + 0 + + + 35824 + 50 + Logic Analyzer + 0 + + 0 + + 1 + 6 + 0 + 0 + 0 + 0 + 210 + 600 + 0 + 0 + 250 + 600 + 1 + 0 + 0 + 0 + + + 343 + 51 + Performance Analyzer + 203 + + 203 + + 1 + 4 + 2 + 0 + 0 + 0 + 210 + 600 + 0 + 0 + 250 + 600 + 100 + 0 + 0 + 0 + + + 204 + 52 + Performance Analyzer + 203 + + 203 + + 1 + 4 + 2 + 0 + 0 + 0 + 210 + 600 + 0 + 0 + 250 + 600 + 100 + 0 + 0 + 0 + + + 346 + 53 + Code Coverage + 203 + + 203 + + 1 + 4 + 2 + 0 + 0 + 0 + 210 + 600 + 0 + 0 + 250 + 600 + 100 + 0 + 0 + 0 + + + + +
diff --git a/Keil_C/Project/project name_uvopt.bak b/Keil_C/Project/project name_uvopt.bak new file mode 100644 index 0000000..17da3b7 --- /dev/null +++ b/Keil_C/Project/project name_uvopt.bak @@ -0,0 +1,1683 @@ + + + + 1.0 + +
### uVision Project, (C) Keil Software
+ + + *.c + *.s*; *.src; *.a* + *.obj + *.lib + *.txt; *.h; *.inc; *.md + *.plm + *.cpp + + + + 0 + 0 + + + + <project name> + 0x0 + MCS-51 + + 16000000 + + 1 + 1 + 1 + 0 + + + 0 + 65535 + 0 + 0 + 0 + + + 120 + 65 + 8 + ..\List\ + + + 1 + 1 + 1 + 0 + 1 + 1 + 0 + 1 + 0 + 0 + 0 + 0 + + + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 0 + + + 1 + 0 + 1 + + 0 + + S8051.DLL + + DP51.DLL + -p51 + S8051.DLL + + TP51.DLL + -p51 + + + 1 + 0 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 1 + 1 + 1 + 0 + 1 + 0 + 0 + 9 + + + + + + + + + + + SinOne_Chip\SOC_Debug_Driver\SinOne_Chip_Debug_Driver.dll + + + + 0 + DLGDP51 + (98=-1,-1,-1,-1,0)(82=-1,-1,-1,-1,0)(83=-1,-1,-1,-1,0)(84=-1,-1,-1,-1,0)(85=-1,-1,-1,-1,0)(80=-1,-1,-1,-1,0)(91=-1,-1,-1,-1,0)(92=-1,-1,-1,-1,0) + + + 0 + DLGTP51 + (98=-1,-1,-1,-1,0)(82=-1,-1,-1,-1,0)(83=-1,-1,-1,-1,0)(84=-1,-1,-1,-1,0)(85=-1,-1,-1,-1,0)(80=-1,-1,-1,-1,0)(91=-1,-1,-1,-1,0)(92=-1,-1,-1,-1,0) + + + 0 + SinOne_Chip_Debug_Driver + + + + + + 0 + 0 + 20 + 1 +
-16776800
+ 0 + 0 + 0 + 0 + 1 + D:\project\test\tag\1216-20220525\SOCCodeGenerator\bin\Debug\CFG\SDK\92F\Keil_Mould\Project\User\main.c + + +
+
+ + + 0 + 1 + test + + + + + 1 + 0 + D:0 + + + + 0 + 0 + 1 + 0 + 0 + 0 + 0 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + + + +
+
+ + + User + 1 + 0 + 0 + + 1 + 1 + 1 + 0 + 0 + 16793171 + 0 + 63189560 + 7280300 + 0 + ..\User\main.c + main.c + + + 1 + 2 + 1 + 0 + 0 + 16793171 + 0 + 63189560 + 7280300 + 0 + ..\User\SC_Init.c + SC_Init.c + + + 1 + 3 + 1 + 0 + 0 + 16793171 + 0 + 63189560 + 7280300 + 0 + ..\User\SC_it.c + SC_it.c + + + 1 + 4 + 1 + 0 + 0 + 16793171 + 0 + 63189560 + 7280300 + 0 + ..\User\SysFunVarDefine.c + SysFunVarDefine.c + + + 1 + 5 + 1 + 0 + 0 + 16793171 + 0 + 63189560 + 7280300 + 0 + ..\User\CompCtrlDefine.c + CompCtrlDefine.c + + + + + Apps + 0 + 0 + 0 + + + + Drivers + 1 + 0 + 0 + + + + FWLib + 1 + 0 + 0 + + 4 + 6 + 1 + 0 + 0 + 16793171 + 0 + 63189640 + 7280300 + 0 + ..\FWLib\SC92F_Lib\src\sc92f_gpio.c + sc92f_gpio.c + + + 4 + 7 + 1 + 0 + 0 + 16793171 + 0 + 63189640 + 7280300 + 0 + ..\FWLib\SC92F_Lib\src\sc92f_option.c + sc92f_option.c + + + + + Startup + 1 + 0 + 0 + + 5 + 8 + 2 + 0 + 0 + 16793171 + 0 + 63189560 + 7280300 + 0 + .\STARTUP.A51 + STARTUP.A51 + + + + + + 0 + + 0 + + Default + 1 + + 59392 + 1 + File + 0 + + 0 + + 1 + 2 + 3 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 100 + 0 + 1 + 0 + + + 59398 + 2 + Build + 0 + + 0 + + 1 + 2 + 3 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 100 + 0 + 0 + 0 + + + 59399 + 3 + Debug + 0 + + 0 + + 1 + 2 + 3 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 100 + 0 + 1 + 0 + + + 197 + 4 + Build Output + 0 + + 0 + + 1 + 2 + 4 + 0 + 0 + 0 + 210 + 600 + 0 + 0 + 250 + 600 + 100 + 1 + 0 + 0 + + + 198 + 5 + Command + 197 + + 197 + + 1 + 4 + 2 + 0 + 0 + 0 + 210 + 600 + 0 + 0 + 250 + 600 + 100 + 1 + 1 + 0 + + + 199 + 6 + Find in Files + 197 + + 197 + + 1 + 4 + 2 + 0 + 0 + 0 + 210 + 600 + 0 + 0 + 250 + 600 + 100 + 0 + 0 + 0 + + + 38007 + 7 + Browse + 197 + + 197 + + 1 + 4 + 2 + 0 + 0 + 0 + 210 + 600 + 0 + 0 + 250 + 600 + 100 + 0 + 0 + 0 + + + 1939 + 8 + UART #1 + 197 + + 197 + + 1 + 4 + 2 + 0 + 0 + 0 + 210 + 600 + 0 + 0 + 250 + 600 + 100 + 0 + 0 + 0 + + + 1940 + 9 + UART #2 + 197 + + 197 + + 1 + 4 + 2 + 0 + 0 + 0 + 210 + 600 + 0 + 0 + 250 + 600 + 100 + 0 + 0 + 0 + + + 1941 + 10 + UART #3 + 197 + + 197 + + 1 + 4 + 2 + 0 + 0 + 0 + 210 + 600 + 0 + 0 + 250 + 600 + 100 + 0 + 0 + 0 + + + 1942 + 11 + UART #4 + 197 + + 197 + + 1 + 4 + 2 + 0 + 0 + 0 + 210 + 600 + 0 + 0 + 250 + 600 + 100 + 0 + 0 + 0 + + + 1944 + 12 + Call Stack + 197 + + 197 + + 1 + 2 + 2 + 0 + 0 + 0 + 600 + 210 + 0 + 0 + 600 + 250 + 50 + 0 + 1 + 0 + + + 1507 + 13 + Call Stack + 1944 + + 197 + + 1 + 4 + 2 + 0 + 0 + 0 + 600 + 210 + 0 + 0 + 600 + 250 + 50 + 0 + 1 + 0 + + + 1935 + 14 + Locals + 1944 + + 197 + + 1 + 4 + 2 + 0 + 0 + 0 + 210 + 600 + 0 + 0 + 250 + 600 + 100 + 0 + 1 + 0 + + + 1936 + 15 + Watch 1 + 1944 + + 197 + + 1 + 4 + 2 + 0 + 0 + 0 + 210 + 600 + 0 + 0 + 250 + 600 + 100 + 0 + 1 + 0 + + + 1937 + 16 + Watch 2 + 1944 + + 197 + + 1 + 4 + 2 + 0 + 0 + 0 + 210 + 600 + 0 + 0 + 250 + 600 + 100 + 0 + 0 + 0 + + + 1465 + 17 + Memory 1 + 1944 + + 197 + + 1 + 4 + 2 + 0 + 0 + 0 + 210 + 600 + 0 + 0 + 250 + 600 + 100 + 0 + 1 + 0 + + + 1466 + 18 + Memory 2 + 1944 + + 197 + + 1 + 4 + 2 + 0 + 0 + 0 + 210 + 600 + 0 + 0 + 250 + 600 + 100 + 0 + 0 + 0 + + + 1467 + 19 + Memory 3 + 1944 + + 197 + + 1 + 4 + 2 + 0 + 0 + 0 + 210 + 600 + 0 + 0 + 250 + 600 + 100 + 0 + 0 + 0 + + + 1468 + 20 + Memory 4 + 1944 + + 197 + + 1 + 4 + 2 + 0 + 0 + 0 + 210 + 600 + 0 + 0 + 250 + 600 + 100 + 0 + 0 + 0 + + + 1506 + 21 + Symbols + 1944 + + 197 + + 1 + 4 + 2 + 0 + 0 + 0 + 210 + 600 + 0 + 0 + 250 + 600 + 100 + 0 + 1 + 0 + + + 1005 + 22 + Project + 0 + + 0 + + 1 + 2 + 1 + 0 + 0 + 0 + 600 + 210 + 0 + 0 + 600 + 250 + 100 + 0 + 1 + 0 + + + 109 + 23 + Books + 1005 + + 1005 + + 1 + 4 + 2 + 0 + 0 + 0 + 600 + 210 + 0 + 0 + 600 + 250 + 100 + 0 + 0 + 0 + + + 195 + 24 + Functions + 1005 + + 1005 + + 1 + 4 + 2 + 0 + 0 + 0 + 600 + 210 + 0 + 0 + 600 + 250 + 100 + 0 + 0 + 0 + + + 196 + 25 + Templates + 1005 + + 1005 + + 1 + 4 + 2 + 0 + 0 + 0 + 600 + 210 + 0 + 0 + 600 + 250 + 100 + 0 + 0 + 0 + + + 38003 + 26 + Registers + 1005 + + 1005 + + 1 + 4 + 2 + 0 + 0 + 0 + 600 + 210 + 0 + 0 + 600 + 250 + 100 + 1 + 1 + 0 + + + 35885 + 27 + not set + 0 + + 0 + + 1 + 2 + 2 + 0 + 0 + 0 + 600 + 210 + 0 + 0 + 600 + 250 + 100 + 0 + 0 + 0 + + + 35886 + 28 + not set + 35885 + + 35885 + + 1 + 4 + 2 + 0 + 0 + 0 + 600 + 210 + 0 + 0 + 600 + 250 + 100 + 0 + 0 + 0 + + + 35887 + 29 + not set + 35885 + + 35885 + + 1 + 4 + 2 + 0 + 0 + 0 + 600 + 210 + 0 + 0 + 600 + 250 + 100 + 0 + 0 + 0 + + + 35888 + 30 + not set + 35885 + + 35885 + + 1 + 4 + 2 + 0 + 0 + 0 + 600 + 210 + 0 + 0 + 600 + 250 + 100 + 0 + 0 + 0 + + + 35889 + 31 + not set + 35885 + + 35885 + + 1 + 4 + 2 + 0 + 0 + 0 + 600 + 210 + 0 + 0 + 600 + 250 + 100 + 0 + 0 + 0 + + + 35890 + 32 + not set + 35885 + + 35885 + + 1 + 4 + 2 + 0 + 0 + 0 + 600 + 210 + 0 + 0 + 600 + 250 + 100 + 0 + 0 + 0 + + + 35891 + 33 + not set + 35885 + + 35885 + + 1 + 4 + 2 + 0 + 0 + 0 + 600 + 210 + 0 + 0 + 600 + 250 + 100 + 0 + 0 + 0 + + + 35892 + 34 + not set + 35885 + + 35885 + + 1 + 4 + 2 + 0 + 0 + 0 + 600 + 210 + 0 + 0 + 600 + 250 + 100 + 0 + 0 + 0 + + + 35893 + 35 + not set + 35885 + + 35885 + + 1 + 4 + 2 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 100 + 0 + 0 + 0 + + + 35894 + 36 + not set + 35885 + + 35885 + + 1 + 4 + 2 + 0 + 0 + 0 + 600 + 210 + 0 + 0 + 600 + 250 + 100 + 0 + 0 + 0 + + + 35895 + 37 + not set + 35885 + + 35885 + + 1 + 4 + 2 + 0 + 0 + 0 + 600 + 210 + 0 + 0 + 600 + 250 + 100 + 0 + 0 + 0 + + + 35896 + 38 + not set + 35885 + + 35885 + + 1 + 4 + 2 + 0 + 0 + 0 + 600 + 210 + 0 + 0 + 600 + 250 + 100 + 0 + 0 + 0 + + + 35897 + 39 + not set + 35885 + + 35885 + + 1 + 4 + 2 + 0 + 0 + 0 + 600 + 210 + 0 + 0 + 600 + 250 + 100 + 0 + 0 + 0 + + + 35898 + 40 + not set + 35885 + + 35885 + + 1 + 4 + 2 + 0 + 0 + 0 + 600 + 210 + 0 + 0 + 600 + 250 + 100 + 0 + 0 + 0 + + + 35899 + 41 + not set + 35885 + + 35885 + + 1 + 4 + 5 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 100 + 0 + 0 + 0 + + + 35900 + 42 + not set + 35885 + + 35885 + + 1 + 4 + 2 + 0 + 0 + 0 + 600 + 210 + 0 + 0 + 600 + 250 + 100 + 0 + 0 + 0 + + + 35901 + 43 + not set + 35885 + + 35885 + + 1 + 4 + 2 + 0 + 0 + 0 + 600 + 210 + 0 + 0 + 600 + 250 + 100 + 0 + 0 + 0 + + + 35902 + 44 + not set + 35885 + + 35885 + + 1 + 4 + 2 + 0 + 0 + 0 + 600 + 210 + 0 + 0 + 600 + 250 + 100 + 0 + 0 + 0 + + + 35903 + 45 + not set + 35885 + + 35885 + + 1 + 4 + 2 + 0 + 0 + 0 + 600 + 210 + 0 + 0 + 600 + 250 + 100 + 0 + 0 + 0 + + + 35904 + 46 + not set + 35885 + + 35885 + + 1 + 4 + 2 + 0 + 0 + 0 + 600 + 210 + 0 + 0 + 600 + 250 + 100 + 0 + 0 + 0 + + + 35905 + 47 + not set + 35885 + + 35885 + + 1 + 4 + 2 + 0 + 0 + 0 + 600 + 210 + 0 + 0 + 600 + 250 + 100 + 0 + 0 + 0 + + + 203 + 48 + Disassembly + 0 + + 0 + + 1 + 2 + 3 + 0 + 0 + 0 + 210 + 600 + 0 + 0 + 250 + 600 + 100 + 0 + 1 + 0 + + + 1913 + 49 + Instruction Trace + 203 + + 203 + + 1 + 4 + 2 + 0 + 0 + 0 + 600 + 210 + 0 + 0 + 600 + 250 + 100 + 0 + 0 + 0 + + + 35824 + 50 + Logic Analyzer + 0 + + 0 + + 1 + 6 + 0 + 0 + 0 + 0 + 210 + 600 + 0 + 0 + 250 + 600 + 1 + 0 + 0 + 0 + + + 343 + 51 + Performance Analyzer + 203 + + 203 + + 1 + 4 + 2 + 0 + 0 + 0 + 210 + 600 + 0 + 0 + 250 + 600 + 100 + 0 + 0 + 0 + + + 204 + 52 + Performance Analyzer + 203 + + 203 + + 1 + 4 + 2 + 0 + 0 + 0 + 210 + 600 + 0 + 0 + 250 + 600 + 100 + 0 + 0 + 0 + + + 346 + 53 + Code Coverage + 203 + + 203 + + 1 + 4 + 2 + 0 + 0 + 0 + 210 + 600 + 0 + 0 + 250 + 600 + 100 + 0 + 0 + 0 + + + + +
diff --git a/Keil_C/Project/project name_uvproj.bak b/Keil_C/Project/project name_uvproj.bak new file mode 100644 index 0000000..bbd5b71 --- /dev/null +++ b/Keil_C/Project/project name_uvproj.bak @@ -0,0 +1,442 @@ + + + + 1.1 + +
### uVision Project, (C) Keil Software
+ + + + <project name> + 0x0 + MCS-51 + 8 + + + SC92F8003 + SC92Fxx Series + IRAM(0-0xFF) IROM(0-0x3FFF) XRAM(0-0xFF) CLOCK(16000000) + + "LIB\STARTUP.A51" ("Standard 8051 Startup Code") + + 0 + SC92F8003.H + + + + + + + + + + + 0 + 0 + + + + SOC\ + SOC\ + + 0 + 0 + 0 + 0 + 1 + + ..\Output\ + project name + 1 + 0 + 1 + 1 + 1 + ..\List\ + 0 + 0 + 0 + + 0 + 0 + + + 0 + 0 + 0 + 0 + + + 0 + 0 + + + 0 + 0 + 0 + 0 + + + 0 + 0 + + + 0 + 0 + 0 + 0 + + 0 + + + + 0 + 0 + 0 + 0 + 0 + 1 + 0 + 0 + 0 + 0 + 3 + + + 1 + 65535 + + + S8051.DLL + + DP51.DLL + -p51 + S8051.DLL + + TP51.DLL + -p51 + + + + 0 + 0 + 0 + 0 + 16 + + + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 1 + + + 0 + 1 + 0 + 1 + 1 + 1 + 0 + 1 + 0 + 1 + + 0 + 9 + + + + + + + + + + + + + + SinOne_Chip\SOC_Debug_Driver\SinOne_Chip_Debug_Driver.dll + + + + + 1 + 0 + 0 + 0 + 1 + 4101 + + 0 + SinOne_Chip\SOC_Debug_Driver\SinOne_Chip_Debug_Driver.dll + "" () + + + + + 0 + + + + 2 + 0 + 2 + 0 + 0 + 0 + 0 + 0 + 0 + 1 + 1 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + + + 0 + 0x0 + 0xffff + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 1 + 0x0 + 0x4000 + + + 0 + 0x0 + 0x100 + + + 0 + 0x0 + 0x100 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + + + 0 + 0 + 1 + 0 + 1 + 3 + 9 + 2 + 0 + 1 + 1 + 0 + + + + + ..\FWLib\SC92F_Lib\inc;..\User + + + + 0 + 1 + 0 + 0 + + + + + + + + + 0 + 0 + 0 + 0 + 2 + 1 + + REMOVEUNUSED + + + + + + CODE(C:0X100), +CONST(C:0X100) + + + + + + + + + + + + + + + + + + + + + User + + + main.c + 1 + ..\User\main.c + + + SC_Init.c + 1 + ..\User\SC_Init.c + + + SC_it.c + 1 + ..\User\SC_it.c + + + SysFunVarDefine.c + 1 + ..\User\SysFunVarDefine.c + + + CompCtrlDefine.c + 1 + ..\User\CompCtrlDefine.c + + + + + Apps + + + Drivers + + + FWLib + + + sc92f_gpio.c + 1 + ..\FWLib\SC92F_Lib\src\sc92f_gpio.c + + + sc92f_option.c + 1 + ..\FWLib\SC92F_Lib\src\sc92f_option.c + + + + + Startup + + + STARTUP.A51 + 2 + .\STARTUP.A51 + + + + + + + +
diff --git a/Keil_C/User/CallBackFunction.c b/Keil_C/User/CallBackFunction.c new file mode 100644 index 0000000..0502a44 --- /dev/null +++ b/Keil_C/User/CallBackFunction.c @@ -0,0 +1,14 @@ +//*************************************************************************************************** +// CopyRight (c) +// File Name : CallBackFunction.c +// Function : Write the logic you want to implement in the function body +// Version : V3.0 +// Date : 2022.07.14 +//*************************************************************************************************** +#include "SC_Init.h" +#include "SC_it.h" +#include "..\Drivers\SCDriver_list.h" +#include "HeadFiles\SysFunVarDefine.h" +/**************************************Generated by EasyCodeCube*************************************/ + +/*************************************.Generated by EasyCodeCube.************************************/ diff --git a/Keil_C/User/CompCtrlDefine.c b/Keil_C/User/CompCtrlDefine.c new file mode 100644 index 0000000..b57b2a5 --- /dev/null +++ b/Keil_C/User/CompCtrlDefine.c @@ -0,0 +1,14 @@ +//********************************************************************** +// CopyRight (c) +// File Name : CompCtrlDefine.C +// Function : Store composite control define +// Version : V3.2.0 +// Date : 2022.02.16 +///********************************************************************* +#include "SC_Init.h" +#include "SC_it.h" +#include "..\Drivers\SCDriver_list.h" +#include "HeadFiles\SysFunVarDefine.h" +/**************************************Generated by EasyCodeCube*************************************/ + +/*************************************.Generated by EasyCodeCube.************************************/ diff --git a/Keil_C/User/HeadFiles/CompCtrlDefine.h b/Keil_C/User/HeadFiles/CompCtrlDefine.h new file mode 100644 index 0000000..023e171 --- /dev/null +++ b/Keil_C/User/HeadFiles/CompCtrlDefine.h @@ -0,0 +1,13 @@ +//********************************************************************** +// CopyRight (c) +// File Name : CompCtrlDefine.h +// Function : Store composite control define +// Version : V3.2.0 +// Date : 2022.02.16 +///********************************************************************* +#ifndef COMP_CTRL_DEFINE_H + #define COMP_CTRL_DEFINE_H +#endif +/**************************************Generated by EasyCodeCube*************************************/ + +/*************************************.Generated by EasyCodeCube.************************************/ diff --git a/Keil_C/User/HeadFiles/CustomType.h b/Keil_C/User/HeadFiles/CustomType.h new file mode 100644 index 0000000..98be2a6 --- /dev/null +++ b/Keil_C/User/HeadFiles/CustomType.h @@ -0,0 +1,19 @@ +//********************************************************************** +// CopyRight (c) +// File Name : CustomType.h +// Function : +// Version : V3.2.0 +// Date : 2022.02.16 +//********************************************************************** + +/***********************user_code_area*********************/ +/**/ +/**/ +/**********************.user_code_area.********************/ + +#ifndef CUSTOM_TYPE_H + #define CUSTOM_TYPE_H +#endif +/**************************************Generated by EasyCodeCube*************************************/ + +/*************************************.Generated by EasyCodeCube.************************************/ diff --git a/Keil_C/User/HeadFiles/FunctionType.h b/Keil_C/User/HeadFiles/FunctionType.h new file mode 100644 index 0000000..d78c6e5 --- /dev/null +++ b/Keil_C/User/HeadFiles/FunctionType.h @@ -0,0 +1,19 @@ +//********************************************************************** +// CopyRight (c) +// File Name : Function.h +// Function : Store quote of the function +// Version : V3.2.0 +// Date : 2022.02.16 +//********************************************************************** + +/***********************user_code_area*********************/ +/**/ +/**/ +/**********************.user_code_area.********************/ + +#ifndef FUNCTION_H + #define FUNCTION_H +#endif +/**************************************Generated by EasyCodeCube*************************************/ + +/*************************************.Generated by EasyCodeCube.************************************/ diff --git a/Keil_C/User/HeadFiles/SC_itExtern.h b/Keil_C/User/HeadFiles/SC_itExtern.h new file mode 100644 index 0000000..08023e7 --- /dev/null +++ b/Keil_C/User/HeadFiles/SC_itExtern.h @@ -0,0 +1,14 @@ +///**********************************************************************/ +// CopyRight (c) +// File Name : SC_itExtern.h +// Function : store extern var code +// Version : V3.2.0 +// Date : 2022.02.16 +///**********************************************************************/ +#ifndef SC_IT_EXTERN_H + #define SC_IT_EXTERN_H +#include "HeadFiles\SysFunVarDefine.h" +#endif +/**************************************Generated by EasyCodeCube*************************************/ + +/*************************************.Generated by EasyCodeCube.************************************/ diff --git a/Keil_C/User/HeadFiles/SysFunVarDefine.h b/Keil_C/User/HeadFiles/SysFunVarDefine.h new file mode 100644 index 0000000..9c5cb23 --- /dev/null +++ b/Keil_C/User/HeadFiles/SysFunVarDefine.h @@ -0,0 +1,17 @@ +//********************************************************************** +// CopyRight (c) +// File Name : SysFunVarDefine.h +// Function : Store var control and function control extern +// Version : V3.2.0 +// Date : 2022.02.16 +//********************************************************************** +#ifndef SYS_FUN_VAR_DEFINE + #define SYS_FUN_VAR_DEFINE +#include "HeadFiles\CustomType.h" +#include "HeadFiles\UserExport.h" +#include "HeadFiles\FunctionType.h" +#include "HeadFiles\CompCtrlDefine.h" +#endif +/**************************************Generated by EasyCodeCube*************************************/ + +/*************************************.Generated by EasyCodeCube.************************************/ diff --git a/Keil_C/User/HeadFiles/UserExport.h b/Keil_C/User/HeadFiles/UserExport.h new file mode 100644 index 0000000..9ed38cc --- /dev/null +++ b/Keil_C/User/HeadFiles/UserExport.h @@ -0,0 +1,21 @@ +//********************************************************************** +// CopyRight (c) +// File Name : UserExport.h +// Function : Store head files +// Version : V3.2.0 +// Date : 2022.02.16 +//********************************************************************** + +/***********************user_code_area*********************/ +/**/ +/**/ +/**********************.user_code_area.********************/ + +#ifndef USER_EXPORT_H + #define USER_EXPORT_H +#endif + +/**************************************Generated by EasyCodeCube*************************************/ + +/*************************************.Generated by EasyCodeCube.************************************/ + diff --git a/Keil_C/User/SC_Init.c b/Keil_C/User/SC_Init.c new file mode 100644 index 0000000..19ba6d0 --- /dev/null +++ b/Keil_C/User/SC_Init.c @@ -0,0 +1,177 @@ +//************************************************************ +// Copyright (c) +// FileName : SC_Init.c +// Function : Contains the MCU initialization function and its C file +// Instructions : +//************************************************************* + +#include "SC_Init.h" // MCU initialization header file, including all firmware library header files +#include "..\Drivers\SCDriver_list.h" +#include "HeadFiles\SC_itExtern.h" + +#include "motor.h" + +//************************************************************* + + +/***********************user_code_area*********************/ +/**/ +/**/ +/**********************.user_code_area.********************/ + +/***************************************************** +*函数名称: SC_Init +*函数功能: MCU初始化函数 +*入口参数:void +*出口参数:void +*****************************************************/ +void SC_Init(void) +{ + SC_GPIO_Init(); + SC_OPTION_Init(); + SC_SSI_Init(); + SC_TIM0_Init(); + SC_TIM1_Init(); + //SC_ADC_Init(); + /*write initial function here*/ + //参考电压 + ADC_VrefConfig(ADC_VREF_VDD); //ADC_VREF_VDD ADC_VREF_2_4V + EA = 1; + //电机数据初始化 + motor_data[0] = 0x00;//00 直行程 01 角行程 + motor_data[1] = 0x00;//00 停止 01 启动 02 运行到起始位 03 运行到结束位 + motor_data[2] = 0x00;//00 点动 01 连续 + motor_data[3] = 0x00;//00 无状态 01 起始点 02 结束点 + motor_data[4] = 0x00;//采样电压高8位 + motor_data[5] = 0x00;//采样电压低8位 + motor_data[6] = 0x00;//激光电压高8位 + motor_data[7] = 0x00;//激光电压低8位 + motor_data[8] = 0x00;//磁条长度高8位 + motor_data[9] = 0x00;//磁条长度低8位 +} + +/***************************************************** +*函数名称: SC_OPTION_Init +*函数功能: OPTION配置初始化函数 +*入口参数:void +*出口参数:void +*****************************************************/ +void SC_OPTION_Init(void) +{ + /*OPTION_Init write here*/ +} + +/***************************************************** +*函数名称: SC_GPIO_Init +*函数功能: GPIO初始化函数 +*入口参数:void +*出口参数:void +*****************************************************/ +void SC_GPIO_Init(void) +{ + GPIO_Init(GPIO1, GPIO_PIN_4,GPIO_MODE_IN_HI); + GPIO_Init(GPIO1, GPIO_PIN_5,GPIO_MODE_IN_HI); + GPIO_Init(GPIO1, GPIO_PIN_6,GPIO_MODE_OUT_PP); + GPIO_Init(GPIO1, GPIO_PIN_7,GPIO_MODE_IN_HI); + GPIO_Init(GPIO2, GPIO_PIN_7,GPIO_MODE_OUT_PP); + GPIO_Init(GPIO2, GPIO_PIN_6,GPIO_MODE_OUT_PP); + GPIO_Init(GPIO2, GPIO_PIN_5,GPIO_MODE_OUT_PP); + GPIO_Init(GPIO0, GPIO_PIN_7,GPIO_MODE_OUT_PP); + GPIO_Init(GPIO0, GPIO_PIN_6,GPIO_MODE_OUT_PP); + GPIO_Init(GPIO0, GPIO_PIN_5,GPIO_MODE_IN_HI); + GPIO_Init(GPIO0, GPIO_PIN_4,GPIO_MODE_IN_PU); + GPIO_Init(GPIO0, GPIO_PIN_3,GPIO_MODE_OUT_PP); + GPIO_Init(GPIO0, GPIO_PIN_2,GPIO_MODE_OUT_PP); + GPIO_Init(GPIO0, GPIO_PIN_1,GPIO_MODE_OUT_PP); + GPIO_Init(GPIO0, GPIO_PIN_0,GPIO_MODE_OUT_PP); + /*GPIO_Init write here*/ +} + +/***************************************************** +*函数名称: SC_UART0_Init +*函数功能: UART0初始化函数 +*入口参数:void +*出口参数:void +*****************************************************/ +void SC_UART0_Init(void) +{ + /*UART0_Init write here*/ +} + +/***************************************************** +*函数名称: SC_TIM0_Init +*函数功能: TIMER0初始化函数 +*入口参数:void +*出口参数:void +*****************************************************/ +void SC_TIM0_Init(void) +{ + TIM0_TimeBaseInit(TIM0_PRESSEL_FSYS_D12,TIM0_MODE_TIMER); + TIM0_WorkModeConfig(TIM0_WORK_MODE1,55536, 0); + TIM0_ITConfig(ENABLE,LOW); + TIM0_Cmd(ENABLE); + /*TIM0_Init write here*/ +} + +/***************************************************** +*函数名称: SC_TIM1_Init +*函数功能: TIMER1初始化函数 +*入口参数:void +*出口参数:void +*****************************************************/ +void SC_TIM1_Init(void) +{ + TIM1_TimeBaseInit(TIM1_PRESSEL_FSYS_D1,TIM1_MODE_TIMER); + TIM1_WorkModeConfig(TIM1_WORK_MODE1,53536); + TIM1_ITConfig(ENABLE,LOW); + TIM1_Cmd(ENABLE); + /*TIM1_Init write here*/ +} + +/***************************************************** +*函数名称: SC_ADC_Init +*函数功能: ADC初始化函数 +*入口参数:void +*出口参数:void +*****************************************************/ +void SC_ADC_Init(void) +{ + //AD转化频率 + ADC_Init(ADC_PRESSEL_FHRC_D32,ADC_Cycle_6Cycle); + //参考电压 + ADC_VrefConfig(ADC_VREF_VDD); + /*AIN0口模式设置*/ + //ADC_EAINConfig(ADC_EAIN_0,ENABLE); + + /*AIN2口模式设置*/ + //ADC_EAINConfig(ADC_EAIN_2,ENABLE); + + /*AIN1口模式设置*/ + ADC_EAINConfig(ADC_EAIN_1,ENABLE); + //AD1 使能 + ADC_ChannelConfig(ADC_CHANNEL_1,ENABLE); + //打开AD中断 + ADC_ITConfig(ENABLE,LOW); + //AD开始转化 + ADC_Cmd(ENABLE); + /*ADC_Init write here*/ + + +} + + +/***************************************************** +*函数名称: SC_SSI_Init +*函数功能: SSI初始化函数 +*入口参数:void +*出口参数:void +*****************************************************/ +void SC_SSI_Init(void) +{ + GPIO_Init(GPIO2, GPIO_PIN_1,GPIO_MODE_IN_PU); + GPIO_Init(GPIO2, GPIO_PIN_0,GPIO_MODE_IN_PU); + SSI_UART1_Init(12000000,9600,UART1_Mode_10B,UART1_RX_ENABLE); + SSI_ITConfig(ENABLE,LOW); + /*SSI_Init write here*/ +} + diff --git a/Keil_C/User/SC_Init.h b/Keil_C/User/SC_Init.h new file mode 100644 index 0000000..fa36a91 --- /dev/null +++ b/Keil_C/User/SC_Init.h @@ -0,0 +1,64 @@ +//************************************************************ +// Copyright (c) +// FileName : SC_Init.h +// Function : Contains the MCU initialization function and its H file +// Instructions : +//************************************************************* + +/***********************user_code_area*********************/ +/**/ +/**/ +/**********************.user_code_area.********************/ + + +#ifndef _SC_INIT_H_ +#define _SC_INIT_H_ + +#if defined (SC95F8x1x) || defined (SC95F7x1x) || defined (SC95F8x2x) || defined (SC95F7x2x) || defined (SC95F8x3x) || defined (SC95F7x3x) \ + || defined (SC95F8x6x) || defined (SC95F7x6x) || defined (SC95F8x1xB) || defined (SC95F7x1xB) +#include "sc95f_conf.h" +#else +#include "sc92f_conf.h" +#endif + +void SC_Init(void); + +void SC_OPTION_Init(void); +void SC_GPIO_Init(void); +void SC_UART0_Init(void); +void SC_TIM0_Init(void); +void SC_TIM1_Init(void); +void SC_TIM2_Init(void); +void SC_TIM3_Init(void); +void SC_TIM4_Init(void); +void SC_PWM_Init(void); +void SC_PWM0_Init(void); +void SC_PWM1_Init(void); +void SC_INT_Init(void); +void SC_ADC_Init(void); +void SC_IAP_Init(void); +void SC_USCI0_Init(void); +void SC_USCI1_Init(void); +void SC_USCI2_Init(void); +void SC_BTM_Init(void); +void SC_CRC_Init(void); +void SC_WDT_Init(void); +void SC_PWR_Init(void); +void SC_DDIC_Init(void); +void SC_MDU_Init(void); +void SC_ACMP_Init(void); +void SC_USCI3_Init(void); +void SC_USCI4_Init(void); +void SC_USCI5_Init(void); +void SC_PWM2_Init(void); +void SC_PWM3_Init(void); +void SC_PWM4_Init(void); + +void SC_PGA_Init(void); +void SC_SSI_Init(void); +void SC_SSI0_Init(void); +void SC_SSI1_Init(void); +void SC_CHKSUM_Init(void); +void SC_LPD_Init(void); +#endif + diff --git a/Keil_C/User/SC_it.c b/Keil_C/User/SC_it.c new file mode 100644 index 0000000..b508afb --- /dev/null +++ b/Keil_C/User/SC_it.c @@ -0,0 +1,218 @@ +//************************************************************ +// Copyright (c) +// FileName : SC_it.c +// Function : Interrupt Service Routine +// Instructions : +// Date : 2022/03/03 +// Version : V1.0002 +//************************************************************* +/********************Includes************************************************************************/ +#include "SC_it.h" +#include "..\Drivers\SCDriver_list.h" +#include "HeadFiles\SC_itExtern.h" +#include "uart1.h" +#include "motor.h" +#include "adc.h" + +#define IT_5S_CNT 5000 //计数5000 +#define IT_2S_CNT 2000 //计数2000 +#define IT_1S_CNT 1000 //计数1000 +#define IT_100MS_CNT 100 //计数100 +#define IT_10MS_CNT 10 //计数10 +#define IT_1MS_CNT 1 //计数1 +#define IT_2MS_CNT 2 //计数2 +#define IT_3MS_CNT 3 //计数3 +#define IT_4MS_CNT 4 //计数4 +#define IT_5MS_CNT 5 //计数5 + +bit it_5s_flag = 0; //5s定时标志 +unsigned int xdata it_5s_cnt = 0; + +bit it_2s_flag = 0; //2s定时标志 +unsigned int xdata it_2s_cnt = 0; + +bit it_1s_flag = 0; //1s定时标志 +unsigned int xdata it_1s_cnt = 0; + +bit it_100ms_flag = 0; //100ms定时标志 +unsigned int xdata it_100ms_cnt = 0; + +bit it_10ms_flag = 0; //10ms定时标志 +unsigned int xdata it_10ms_cnt = 0; + +bit it_1ms_flag = 0; //1ms定时标志 +unsigned int xdata it_1ms_cnt = 0; + +bit it_2ms_flag = 0; //2ms定时标志 +unsigned int xdata it_2ms_cnt = 0; + +bit it_3ms_flag = 0; //3ms定时标志 +unsigned int xdata it_3ms_cnt = 0; + +bit it_4ms_flag = 0; //4ms定时标志 +unsigned int xdata it_4ms_cnt = 0; + +bit it_5ms_flag = 0; //5ms定时标志 +unsigned int xdata it_5ms_cnt = 0; +/**************************************Generated by EasyCodeCube*************************************/ + +/*************************************.Generated by EasyCodeCube.************************************/ + +void Timer0Interrupt() interrupt 1 +{ + /*TIM0_it write here begin*/ + + TH0 = 0xFC;//高8位初值 + TL0 = 0x17;//低8位初值 + + /*TIM0_it write here*/ + /**/ + /**//*<6>*/ + //Timer0Interrupt + { + /**//*<7>*/ + //5秒 + it_5s_cnt++; + if(it_5s_cnt >= IT_5S_CNT) + { + it_5s_flag = 1; + it_5s_cnt = 0; + } + + //2秒 + it_2s_cnt++; + if(it_2s_cnt >= IT_2S_CNT) + { + it_2s_flag = 1; + it_2s_cnt = 0; + } + + //秒 + it_1s_cnt++; + if(it_1s_cnt >= IT_1S_CNT) + { + it_1s_flag = 1; + it_1s_cnt = 0; + } + + //100毫秒 + it_100ms_cnt++; + if(it_100ms_cnt >= IT_100MS_CNT) + { + it_100ms_flag = 1; + it_100ms_cnt = 0; + } + + //10毫秒 + it_10ms_cnt++; + if(it_10ms_cnt >= IT_10MS_CNT) + { + it_10ms_flag = 1; + it_10ms_cnt = 0; + } + + + /**//*<7>*/ + /**/ + } + /**//*<6>*/ + /**/ + /*Timer0Interrupt Flag Clear begin*/ + /*Timer0Interrupt Flag Clear end*/ +} + + +void Timer1Interrupt() interrupt 3 +{ + /*TIM1_it write here begin*/ + + TIM1_Mode1SetReloadCounter(53536); + + /*TIM1_it write here*/ + /**/ + /**/ + { + /**//*<7>*/ + //1毫秒 + it_1ms_cnt++; + if(it_1ms_cnt >= IT_1MS_CNT) + { + it_1ms_flag = 1; + it_1ms_cnt = 0; + } + + //2毫秒 + it_2ms_cnt++; + if(it_2ms_cnt >= IT_2MS_CNT) + { + it_2ms_flag = 1; + it_2ms_cnt = 0; + } + + //3毫秒 + it_3ms_cnt++; + if(it_3ms_cnt >= IT_3MS_CNT) + { + it_3ms_flag = 1; + it_3ms_cnt = 0; + } + + //4毫秒 + it_4ms_cnt++; + if(it_4ms_cnt >= IT_4MS_CNT) + { + it_4ms_flag = 1; + it_4ms_cnt = 0; + } + + //5毫秒 + it_5ms_cnt++; + if(it_5ms_cnt >= IT_5MS_CNT) + { + it_5ms_flag = 1; + it_5ms_cnt = 0; + } + /**//*<7>*/ + /**/ + } + /*Timer1Interrupt Flag Clear begin*/ + /*Timer1Interrupt Flag Clear end*/ +} + +void ADCInterrupt() interrupt 6 +{ +// /*ADC_it write here begin*/ + +// /**/ +// /**/ + + + /*ADCInterrupt Flag Clear end*/ + ADC_ClearFlag(); +} +#if defined (SC92F854x) || defined (SC92F754x) ||defined (SC92F844xB) || defined (SC92F744xB)||defined (SC92F84Ax_2) || defined (SC92F74Ax_2)|| defined (SC92F846xB) \ +|| defined (SC92F746xB) || defined (SC92F836xB) || defined (SC92F736xB) || defined (SC92F8003)||defined (SC92F84Ax) || defined (SC92F74Ax) || defined (SC92F83Ax) \ +|| defined (SC92F73Ax) || defined (SC92F7003) || defined (SC92F740x) || defined (SC92FWxx) || defined (SC93F743x) || defined (SC93F833x) || defined (SC93F843x)\ +|| defined (SC92F848x) || defined (SC92F748x)|| defined (SC92F859x) || defined (SC92F759x) +extern bit SSI_FLAG; +void SSIInterrupt() interrupt 7 +{ + /*SSI_it write here begin*/ + if(SSI_GetFlagStatus(UART1_FLAG_TI) == SET) //UART1发送中断标志位TI + { + SSI_FLAG = 0; + SSI_ClearFlag(UART1_FLAG_TI); + } + + if(SSI_GetFlagStatus(UART1_FLAG_RI) == SET)//UART1接收中断标志位RI + { + unsigned char ch = 0; + ch = SSI_UART1_ReceiveData8(); + receive_ttl_data(ch);//放串口中断内,接收数据 + SSI_ClearFlag(UART1_FLAG_RI); + } + /*SSIInterrupt Flag Clear end*/ +} + +#endif + diff --git a/Keil_C/User/SC_it.h b/Keil_C/User/SC_it.h new file mode 100644 index 0000000..c1e3d23 --- /dev/null +++ b/Keil_C/User/SC_it.h @@ -0,0 +1,26 @@ +//************************************************************ +// Copyright (c) +// FileName : SC_it.h +// Author : +// Function : Interrupt service program header file +// Local Functions: +// Date : 2022/04/07 +// Version : V1.3 +//************************************************************* + +/***********************user_code_area*********************/ +/**/ +/**/ +/**********************.user_code_area.********************/ + +#ifndef _SC_IT_H_ +#define _SC_IT_H_ + +#if defined (SC95F8x1x) || defined (SC95F7x1x) || defined (SC95F8x2x) || defined (SC95F7x2x) || defined (SC95F8x3x) || defined (SC95F7x3x) \ + || defined (SC95F8x6x) || defined (SC95F7x6x) || defined (SC95F8x1xB) || defined (SC95F7x1xB) +#include "sc95f_conf.h" +#else +#include "sc92f_conf.h" +#endif + +#endif diff --git a/Keil_C/User/SysFunVarDefine.c b/Keil_C/User/SysFunVarDefine.c new file mode 100644 index 0000000..e02a334 --- /dev/null +++ b/Keil_C/User/SysFunVarDefine.c @@ -0,0 +1,14 @@ +//********************************************************************** +// CopyRight (c) +// File Name : SysFunVarDefine.c +// Function : Store var control and function control define +// Version : V2.0 +// Date : 2021.08.04 +//********************************************************************** +#include "SC_Init.h" +#include "SC_it.h" +#include "..\Drivers\SCDriver_list.h" +#include "HeadFiles\SysFunVarDefine.h" +/**************************************Generated by EasyCodeCube*************************************/ + +/*************************************.Generated by EasyCodeCube.************************************/ diff --git a/Keil_C/User/Tmp/SC_it.bak b/Keil_C/User/Tmp/SC_it.bak new file mode 100644 index 0000000..19689e9 --- /dev/null +++ b/Keil_C/User/Tmp/SC_it.bak @@ -0,0 +1,272 @@ +//************************************************************ +// Copyright (c) +// FileName : SC_it.c +// Function : Interrupt Service Routine +// Instructions : +// Date : 2022/03/03 +// Version : V1.0002 +//************************************************************* +/********************Includes************************************************************************/ +#include "SC_it.h" +#include "..\Drivers\SCDriver_list.h" +#include "HeadFiles\SC_itExtern.h" +/**************************************Generated by EasyCodeCube*************************************/ + +/*************************************.Generated by EasyCodeCube.************************************/ +void INT0Interrupt() interrupt 0 +{ + TCON &= 0XFD;//Clear interrupt flag bit + /*INT0_it write here begin*/ + /*INT0_it write here*/ +/**/ + +/**/ + /*INT0Interrupt Flag Clear begin*/ + /*INT0Interrupt Flag Clear end*/ +} +void Timer0Interrupt() interrupt 1 +{ + /*TIM0_it write here begin*/ + TIM0_Mode1SetReloadCounter(53536); + /*TIM0_it write here*/ +/**/ + +/**//*<6>*/ + //Timer0Interrupt + { + /**//*<7>*/ + /*****User program*****/ + //<7>/**//*<7>*/ +/**/ + } + //<6>/**//*<6>*/ +/**/ + /*Timer0Interrupt Flag Clear begin*/ + /*Timer0Interrupt Flag Clear end*/ +} +void INT1Interrupt() interrupt 2 +{ + TCON &= 0XF7;//Clear interrupt flag bit + /*INT1_it write here begin*/ + /*INT1_it write here*/ +/**/ + +/**/ + /*INT1Interrupt Flag Clear begin*/ + /*INT1Interrupt Flag Clear end*/ +} +void Timer1Interrupt() interrupt 3 +{ + /*TIM1_it write here begin*/ + /*TIM1_it write here*/ +/**/ + +/**/ + /*Timer1Interrupt Flag Clear begin*/ + /*Timer1Interrupt Flag Clear end*/ +} +#if defined (SC92F742x) || defined (SC92F7490) +void SSI0Interrupt() interrupt 4 +{ + /*SSI0_it write here begin*/ + /*SSI0_it write here*/ +/**/ + +/**/ + /*SSI0Interrupt Flag Clear begin*/ + /*SSI0Interrupt Flag Clear end*/ +} +#else +void UART0Interrupt() interrupt 4 +{ + /*UART0_it write here begin*/ + /*UART0_it write here*/ +/**/ + +/**/ + /*UART0Interrupt Flag Clear begin*/ + /*UART0Interrupt Flag Clear end*/ +} +#endif +void Timer2Interrupt() interrupt 5 +{ + /*TIM2_it write here begin*/ + /*TIM2_it write here*/ +/**/ + +/**/ + /*Timer2Interrupt Flag Clear begin*/ + /*Timer2Interrupt Flag Clear end*/ +} +void ADCInterrupt() interrupt 6 +{ + /*ADC_it write here begin*/ + /*ADC_it write here*/ +/**/ + +/**/ + /*ADCInterrupt Flag Clear begin*/ + ADC_ClearFlag(); + /*ADCInterrupt Flag Clear end*/ +} +#if defined (SC92F854x) || defined (SC92F754x) ||defined (SC92F844xB) || defined (SC92F744xB)||defined (SC92F84Ax_2) || defined (SC92F74Ax_2)|| defined (SC92F846xB) \ +|| defined (SC92F746xB) || defined (SC92F836xB) || defined (SC92F736xB) || defined (SC92F8003)||defined (SC92F84Ax) || defined (SC92F74Ax) || defined (SC92F83Ax) \ +|| defined (SC92F73Ax) || defined (SC92F7003) || defined (SC92F740x) || defined (SC92FWxx) || defined (SC93F743x) || defined (SC93F833x) || defined (SC93F843x)\ +|| defined (SC92F848x) || defined (SC92F748x)|| defined (SC92F859x) || defined (SC92F759x) +void SSIInterrupt() interrupt 7 +{ + /*SSI_it write here begin*/ + /*SSI_it write here*/ +/**/ + +/**/ + /*SSIInterrupt Flag Clear begin*/ + SSI_ClearFlag(UART1_FLAG_RI); +SSI_ClearFlag(UART1_FLAG_TI); + /*SSIInterrupt Flag Clear end*/ +} +#elif defined (SC92F742x) || defined (SC92F7490) +void SSI1Interrupt() interrupt 7 +{ + /*SSI1_it write here begin*/ + /*SSI1_it write here*/ +/**/ + +/**/ + /*SSI1Interrupt Flag Clear begin*/ + /*SSI1Interrupt Flag Clear end*/ +} +#else +void USCI0Interrupt() interrupt 7 +{ + /*USCI0_it write here begin*/ + /*USCI0_it write here*/ +/**/ + +/**/ + /*USCI0Interrupt Flag Clear begin*/ + /*USCI0Interrupt Flag Clear end*/ +} +#endif +void PWMInterrupt() interrupt 8 +{ + /*PWM_it write here begin*/ + /*PWM_it write here*/ +/**/ + +/**/ + /*PWMInterrupt Flag Clear begin*/ + /*PWMInterrupt Flag Clear end*/ +} +#if !defined (TK_USE_BTM) +void BTMInterrupt() interrupt 9 +{ + /*BTM_it write here begin*/ + /*BTM_it write here*/ +/**/ + +/**/ + /*BTMInterrupt Flag Clear begin*/ + /*BTMInterrupt Flag Clear end*/ +} +#endif +void INT2Interrupt() interrupt 10 +{ + /*INT2_it write here begin*/ + /*INT2_it write here*/ +/**/ + +/**/ + /*INT2Interrupt Flag Clear begin*/ + /*INT2Interrupt Flag Clear end*/ +} +void ACMPInterrupt() interrupt 12 +{ + /*ACMP_it write here begin*/ + /*ACMP_it write here*/ +/**/ + +/**/ + /*ACMPInterrupt Flag Clear begin*/ + /*ACMPInterrupt Flag Clear end*/ +} +void Timer3Interrupt() interrupt 13 +{ + /*Timer3_it write here begin*/ + /*Timer3_it write here*/ +/**/ + +/**/ + /*Timer3Interrupt Flag Clear begin*/ + /*Timer3Interrupt Flag Clear end*/ +} +void Timer4Interrupt() interrupt 14 +{ + /*Timer4_it write here begin*/ + /*Timer4_it write here*/ +/**/ + +/**/ + /*Timer4Interrupt Flag Clear begin*/ + /*Timer4Interrupt Flag Clear end*/ +} +void USCI1Interrupt() interrupt 15 +{ + /*USCI1_it write here begin*/ + /*USCI1_it write here*/ +/**/ + +/**/ + /*USCI1Interrupt Flag Clear begin*/ + /*USCI1Interrupt Flag Clear end*/ +} +void USCI2Interrupt() interrupt 16 +{ + /*USCI2_it write here begin*/ + /*USCI2_it write here*/ +/**/ + +/**/ + /*USCI2Interrupt Flag Clear begin*/ + /*USCI2Interrupt Flag Clear end*/ +} +void USCI3Interrupt() interrupt 17 +{ + /*USCI3_it write here begin*/ + /*USCI3_it write here*/ +/**/ + +/**/ + /*USCI3Interrupt Flag Clear begin*/ + /*USCI3Interrupt Flag Clear end*/ +} +void USCI4Interrupt() interrupt 18 +{ + /*USCI4_it write here begin*/ + /*USCI4_it write here*/ +/**/ + +/**/ + /*USCI4Interrupt Flag Clear begin*/ + /*USCI4Interrupt Flag Clear end*/ +} +void USCI5Interrupt() interrupt 19 +{ + /*USCI5_it write here begin*/ + /*USCI5_it write here*/ +/**/ + +/**/ + /*USCI5Interrupt Flag Clear begin*/ + /*USCI5Interrupt Flag Clear end*/ +} +void LPDInterrupt() interrupt 22 +{ + /*LPD_it write here begin*/ + /*LPD_it write here*/ +/**/ + +/**/ + /*LPDInterrupt Flag Clear begin*/ + /*LPDInterrupt Flag Clear end*/ +} diff --git a/Keil_C/User/Tmp/SC_it.tmp b/Keil_C/User/Tmp/SC_it.tmp new file mode 100644 index 0000000..eef6936 --- /dev/null +++ b/Keil_C/User/Tmp/SC_it.tmp @@ -0,0 +1,272 @@ +锘//************************************************************ +// Copyright (c) +// FileName : SC_it.c +// Function : Interrupt Service Routine +// Instructions : +// Date : 2022/03/03 +// Version : V1.0002 +//************************************************************* +/********************Includes************************************************************************/ +#include "SC_it.h" +#include "..\Drivers\SCDriver_list.h" +#include "HeadFiles\SC_itExtern.h" +/**************************************Generated by EasyCodeCube*************************************/ + +/*************************************.Generated by EasyCodeCube.************************************/ +void INT0Interrupt() interrupt 0 +{ + TCON &= 0XFD;//Clear interrupt flag bit + /*INT0_it write here begin*/ + /*INT0_it write here*/ +/**/ + +/**/ + /*INT0Interrupt Flag Clear begin*/ + /*INT0Interrupt Flag Clear end*/ +} +void Timer0Interrupt() interrupt 1 +{ + /*TIM0_it write here begin*/ + TIM0_Mode1SetReloadCounter(53536); + /*TIM0_it write here*/ +/**/ + +/**//*<6>*/ + //Timer0Interrupt + { + /**//*<7>*/ + /*****User program*****/ + /**//*<7>*/ +/**/ + } + /**//*<6>*/ +/**/ + /*Timer0Interrupt Flag Clear begin*/ + /*Timer0Interrupt Flag Clear end*/ +} +void INT1Interrupt() interrupt 2 +{ + TCON &= 0XF7;//Clear interrupt flag bit + /*INT1_it write here begin*/ + /*INT1_it write here*/ +/**/ + +/**/ + /*INT1Interrupt Flag Clear begin*/ + /*INT1Interrupt Flag Clear end*/ +} +void Timer1Interrupt() interrupt 3 +{ + /*TIM1_it write here begin*/ + /*TIM1_it write here*/ +/**/ + +/**/ + /*Timer1Interrupt Flag Clear begin*/ + /*Timer1Interrupt Flag Clear end*/ +} +#if defined (SC92F742x) || defined (SC92F7490) +void SSI0Interrupt() interrupt 4 +{ + /*SSI0_it write here begin*/ + /*SSI0_it write here*/ +/**/ + +/**/ + /*SSI0Interrupt Flag Clear begin*/ + /*SSI0Interrupt Flag Clear end*/ +} +#else +void UART0Interrupt() interrupt 4 +{ + /*UART0_it write here begin*/ + /*UART0_it write here*/ +/**/ + +/**/ + /*UART0Interrupt Flag Clear begin*/ + /*UART0Interrupt Flag Clear end*/ +} +#endif +void Timer2Interrupt() interrupt 5 +{ + /*TIM2_it write here begin*/ + /*TIM2_it write here*/ +/**/ + +/**/ + /*Timer2Interrupt Flag Clear begin*/ + /*Timer2Interrupt Flag Clear end*/ +} +void ADCInterrupt() interrupt 6 +{ + /*ADC_it write here begin*/ + /*ADC_it write here*/ +/**/ + +/**/ + /*ADCInterrupt Flag Clear begin*/ + ADC_ClearFlag(); + /*ADCInterrupt Flag Clear end*/ +} +#if defined (SC92F854x) || defined (SC92F754x) ||defined (SC92F844xB) || defined (SC92F744xB)||defined (SC92F84Ax_2) || defined (SC92F74Ax_2)|| defined (SC92F846xB) \ +|| defined (SC92F746xB) || defined (SC92F836xB) || defined (SC92F736xB) || defined (SC92F8003)||defined (SC92F84Ax) || defined (SC92F74Ax) || defined (SC92F83Ax) \ +|| defined (SC92F73Ax) || defined (SC92F7003) || defined (SC92F740x) || defined (SC92FWxx) || defined (SC93F743x) || defined (SC93F833x) || defined (SC93F843x)\ +|| defined (SC92F848x) || defined (SC92F748x)|| defined (SC92F859x) || defined (SC92F759x) +void SSIInterrupt() interrupt 7 +{ + /*SSI_it write here begin*/ + /*SSI_it write here*/ +/**/ + +/**/ + /*SSIInterrupt Flag Clear begin*/ + SSI_ClearFlag(UART1_FLAG_RI); +SSI_ClearFlag(UART1_FLAG_TI); + /*SSIInterrupt Flag Clear end*/ +} +#elif defined (SC92F742x) || defined (SC92F7490) +void SSI1Interrupt() interrupt 7 +{ + /*SSI1_it write here begin*/ + /*SSI1_it write here*/ +/**/ + +/**/ + /*SSI1Interrupt Flag Clear begin*/ + /*SSI1Interrupt Flag Clear end*/ +} +#else +void USCI0Interrupt() interrupt 7 +{ + /*USCI0_it write here begin*/ + /*USCI0_it write here*/ +/**/ + +/**/ + /*USCI0Interrupt Flag Clear begin*/ + /*USCI0Interrupt Flag Clear end*/ +} +#endif +void PWMInterrupt() interrupt 8 +{ + /*PWM_it write here begin*/ + /*PWM_it write here*/ +/**/ + +/**/ + /*PWMInterrupt Flag Clear begin*/ + /*PWMInterrupt Flag Clear end*/ +} +#if !defined (TK_USE_BTM) +void BTMInterrupt() interrupt 9 +{ + /*BTM_it write here begin*/ + /*BTM_it write here*/ +/**/ + +/**/ + /*BTMInterrupt Flag Clear begin*/ + /*BTMInterrupt Flag Clear end*/ +} +#endif +void INT2Interrupt() interrupt 10 +{ + /*INT2_it write here begin*/ + /*INT2_it write here*/ +/**/ + +/**/ + /*INT2Interrupt Flag Clear begin*/ + /*INT2Interrupt Flag Clear end*/ +} +void ACMPInterrupt() interrupt 12 +{ + /*ACMP_it write here begin*/ + /*ACMP_it write here*/ +/**/ + +/**/ + /*ACMPInterrupt Flag Clear begin*/ + /*ACMPInterrupt Flag Clear end*/ +} +void Timer3Interrupt() interrupt 13 +{ + /*Timer3_it write here begin*/ + /*Timer3_it write here*/ +/**/ + +/**/ + /*Timer3Interrupt Flag Clear begin*/ + /*Timer3Interrupt Flag Clear end*/ +} +void Timer4Interrupt() interrupt 14 +{ + /*Timer4_it write here begin*/ + /*Timer4_it write here*/ +/**/ + +/**/ + /*Timer4Interrupt Flag Clear begin*/ + /*Timer4Interrupt Flag Clear end*/ +} +void USCI1Interrupt() interrupt 15 +{ + /*USCI1_it write here begin*/ + /*USCI1_it write here*/ +/**/ + +/**/ + /*USCI1Interrupt Flag Clear begin*/ + /*USCI1Interrupt Flag Clear end*/ +} +void USCI2Interrupt() interrupt 16 +{ + /*USCI2_it write here begin*/ + /*USCI2_it write here*/ +/**/ + +/**/ + /*USCI2Interrupt Flag Clear begin*/ + /*USCI2Interrupt Flag Clear end*/ +} +void USCI3Interrupt() interrupt 17 +{ + /*USCI3_it write here begin*/ + /*USCI3_it write here*/ +/**/ + +/**/ + /*USCI3Interrupt Flag Clear begin*/ + /*USCI3Interrupt Flag Clear end*/ +} +void USCI4Interrupt() interrupt 18 +{ + /*USCI4_it write here begin*/ + /*USCI4_it write here*/ +/**/ + +/**/ + /*USCI4Interrupt Flag Clear begin*/ + /*USCI4Interrupt Flag Clear end*/ +} +void USCI5Interrupt() interrupt 19 +{ + /*USCI5_it write here begin*/ + /*USCI5_it write here*/ +/**/ + +/**/ + /*USCI5Interrupt Flag Clear begin*/ + /*USCI5Interrupt Flag Clear end*/ +} +void LPDInterrupt() interrupt 22 +{ + /*LPD_it write here begin*/ + /*LPD_it write here*/ +/**/ + +/**/ + /*LPDInterrupt Flag Clear begin*/ + /*LPDInterrupt Flag Clear end*/ +} diff --git a/Keil_C/User/Tmp/main.bak b/Keil_C/User/Tmp/main.bak new file mode 100644 index 0000000..fd49fd2 --- /dev/null +++ b/Keil_C/User/Tmp/main.bak @@ -0,0 +1,39 @@ +//************************************************************ +// Copyright (c) +// FileName : main.c +// Module Function : +// Instructions : Contains the MCU initialization function and its H file +//************************************************************ +/********************Includes************************************************************************/ +#include "SC_Init.h" //MCU Init header,Include all IC resource headers +#include "SC_it.h" +#include "..\Drivers\SCDriver_list.h" +#include "HeadFiles\SysFunVarDefine.h" +/**************************************Generated by EasyCodeCube*************************************/ + +/*************************************.Generated by EasyCodeCube.************************************/ +/***************************************************************************************************** +* Function Name: main +* Description : This function implements main function. +* Arguments : None +* Return Value : None +******************************************************************************************************/ +void main(void) +{ + /**/ + +/**//*<3>*/ + SC_Init(); /*** MCU init***/ + //<3>/**//*<3>*/ +/**//*<4>*/ + /*****MainLoop*****/ + while(1) + { + /**//*<5>*/ + /*****User program*****/ + //<5>/**//*<5>*/ +/**/ + } + //<4>/**//*<4>*/ +/**/ +} diff --git a/Keil_C/User/Tmp/main.tmp b/Keil_C/User/Tmp/main.tmp new file mode 100644 index 0000000..ebf2efb --- /dev/null +++ b/Keil_C/User/Tmp/main.tmp @@ -0,0 +1,39 @@ +//************************************************************ +// Copyright (c) +// FileName : main.c +// Module Function : +// Instructions : Contains the MCU initialization function and its H file +//************************************************************ +/********************Includes************************************************************************/ +#include "SC_Init.h" //MCU Init header,Include all IC resource headers +#include "SC_it.h" +#include "..\Drivers\SCDriver_list.h" +#include "HeadFiles\SysFunVarDefine.h" +/**************************************Generated by EasyCodeCube*************************************/ + +/*************************************.Generated by EasyCodeCube.************************************/ +/***************************************************************************************************** +* Function Name: main +* Description : This function implements main function. +* Arguments : None +* Return Value : None +******************************************************************************************************/ +void main(void) +{ + /**/ + +/**//*<3>*/ + SC_Init(); /*** MCU init***/ + /**//*<3>*/ +/**//*<4>*/ + /*****MainLoop*****/ + while(1) + { + /**//*<5>*/ + /*****User program*****/ + /**//*<5>*/ +/**/ + } + /**//*<4>*/ +/**/ +} diff --git a/Keil_C/User/main.c b/Keil_C/User/main.c new file mode 100644 index 0000000..71a4a65 --- /dev/null +++ b/Keil_C/User/main.c @@ -0,0 +1,58 @@ +//************************************************************ +// Copyright (c) +// FileName : main.c +// Module Function : +// Instructions : Contains the MCU initialization function and its H file +//************************************************************ +/********************Includes************************************************************************/ +#include "SC_Init.h" //MCU Init header,Include all IC resource headers +#include "SC_it.h" +#include "..\Drivers\SCDriver_list.h" +#include "HeadFiles\SysFunVarDefine.h" + +#include +#include "test.h" +#include "uart1.h" +#include "motor.h" +#include "adc.h" + +/**************************************Generated by EasyCodeCube*************************************/ + + +/*************************************.Generated by EasyCodeCube.************************************/ +/***************************************************************************************************** +* Function Name: main +* Description : This function implements main function. +* Arguments : None +* Return Value : None +******************************************************************************************************/ +void main(void) +{ + SC_Init(); /*** MCU init***/ + InitUart_Data();//串口数据初始化 + + /*****MainLoop*****/ + while(1) + { + /**//*<5>*/ + //数据接收分析(放置大循环内) + Deal_Uart_Data_For_Module(); + + //处理电机运行各种模式 + Deal_Motor();//一般采用1-5毫秒 + + //采集ADC数据 + if(it_10ms_flag == 1)//10毫秒 + { + it_10ms_flag = 0; + ADC_Multichannel();//ADC数据采集 + } + + //运行指示灯 + led_test(); + + } +} + + + diff --git a/Keil_C/User/readme.txt b/Keil_C/User/readme.txt new file mode 100644 index 0000000..bbc71df --- /dev/null +++ b/Keil_C/User/readme.txt @@ -0,0 +1,58 @@ +//已完成 +1、IO口调试,定时器定时,串口收发数据; +2、电机的启动与停止,自动找寻始终点; +3、电机点动运行,每次点动结束发送数据至串口,点动距离可自由调节(单位:毫米); +4、电机由起始点移动至结束点,移动过程可自由调节步长(单位:毫米)与每一步的停滞时间(单位:毫秒),数据在停滞时间内发送至串口,到达结束点停留一段时间后自动回到起始点。停留时间可设定(单位:秒); +5、电机在起始点与结束点之间循环移动,移动过程可自由调节步长(单位:毫米)与每一步的停滞时间(单位:毫秒),数据在停滞时间内发送至串口; +6、以光栅信号确定测量始终点,只有当磁条通过光栅时装置才会反馈测量值。 +7、添加了角行程磁条测试逻辑,旋转台减速比为1:90,测试方案与直行程基本相同 +8、添加了起始位、结束位、测量中和无状态四种位置状态显示 + +//使用说明 + 在主函数中,我们使用函数Deal_Uart_Data_For_Module(void)来分析处理接收到的数据,使用函数Deal_Motor(void)来控制电机,使用函数ADC_Multichannel()来采集ADC数据。 + 电机启动需要使用motor_start(void)和motor_mov(unsigned int speed)两个函数,前者配置引脚,后者启动脉冲,参数speed可控制脉冲频率;电机关闭可使用motor_stop(void)函数。 + 函数FWD(void)和REV(void)用于改变电机转动方向,若要判断磁条当前位置,需要使用函数motor_seat(void),初始化磁条位置可使用mov_begin(viod)或mov_end(void)让磁条移动到起始位或结束位。 + void mov_loop1(void)、void mov_loop1_ang(void)、void mov_loop2(void)、void mov_loop2_ang(void)、void mov_step(void)、void mov_step_ang(void)控制电机运行模式。 + 串口接收数据需要使用receive_ttl_data(uint8_t rx_data)函数,发送数据需要使用send_set_resp(unsigned int OrderNum, unsigned int addr, unsigned char Num, unsigned char sData[])函数。 + +//协议 +PC->主板 + SOF: 1个字节 0x05 起始字节 + Len: 2个字节 长度 + Fou_adr: 2个字节 源地址 + Com_adr: 2个字节 目标地址,0ff为广播地址 + Cmd16: 2个字节 命令字 + Request-data: N个字节 数据 + XOR: 2个字节 校验 + END: 1个字节 0x1B 结束字节 +数据部分 + 测量功能: 00 直行程 01 角行程 + 控制电机运行: 00 停止 01 运行 02 运行到起始位 03 运行到结束位 + 运行模式: 00 点动(方案三) 01 连续(方案一) 02 连续(方案二) + 电机运行多少圈为一个步长; 00 00 (65535)半毫米 + 电机运行间隔时长: 00 00 (65535)毫秒(数据反馈时间) + 到“结束点”后,停止时间 00 00 (65535)秒 +例:05 00 14 00 A1 00 B1 F0 01 00 01 01 00 01 03 E8 00 10 CD 40 1B//方案一 + +主板->PC + SOF: 1个字节 0x05 起始字节 + Len: 2个字节 长度 + Fou_adr: 2个字节 源地址 + Com_adr: 2个字节 目标地址,0ff为广播地址 + Cmd16: 2个字节 命令字 + Request-data: N个字节 数据 + XOR: 2个字节 校验 + END: 1个字节 0x1B 结束字节 +数据部分 + 测量功能: 00 直行程 01 角行程 + 控制电机运行: 00 停止 01 运行 02 运行到起始位 03 运行到结束位 + 运行模式: 00 点动(方案三) 01 连续(方案一) 02 连续(方案二) + 到位开关状态: 00 无状态 01 起始位 02 结束位 03 正在通过光栅 + 采样点压; 00 00 (65535)毫伏 + 激光电压: 00 00 (65535)毫伏 + 磁条长度: 00 00 (65535)毫米 +例:05 00 14 00 A1 00 B1 F0 01 00 01 01 03 07 03 00 00 00 10 CD 40 1B + +//直行程电机转动一圈,磁条水平位移为5mm; +//角行程电机转动一圈,磁条旋转4°; + diff --git a/magent_test.cgen b/magent_test.cgen new file mode 100644 index 0000000..f5d7aff --- /dev/null +++ b/magent_test.cgen @@ -0,0 +1,89 @@ +[Project] +Project.Name=magent_test +Project.Path=D:\SinOne\file\magent_test +Project.KeilPath=D:\SinOne\file\magent_test\Keil_C\ +Project.CurrentPath=D:\SinOne\file\magent_test\magent_test.cgen +Project.CreationTime=20230203093907 +Project.ModificationTime=20230203093907 +Project.Version=EasyCodeCube 3.2.1 +Project.IsBootloaderProject=false +Project.IsUnifiedVersionProject=True +[/Project] +[WindowStyleSet] +[WindowStyle] +Name=CodeBrowser +Style=DockRightAutoHide +[/WindowStyle] +[WindowStyle] +Name=MainInterface +Style=Document +[/WindowStyle] +[WindowStyle] +Name=Designer +Style=Document +[/WindowStyle] +[/WindowStyleSet] +[Peripheral]GPIO_panel:{X=0,Y=0} +[/Peripheral] +[Peripheral]GPIO[Index]0[/Index] +[Configure][PinNumber]19[/PinNumber][UpperIndex]3[/UpperIndex][Iindex]0[/Iindex][PinName]RX1[/PinName] +[PinNumber]20[/PinNumber][UpperIndex]3[/UpperIndex][Iindex]0[/Iindex][PinName]TX1[/PinName] +[/Configure][/Peripheral] +[Peripheral]OPTION[Index]1[/Index] +[Configure]系统时钟Fsys=0 +频率(Hz)=[24000000] +Option配置使能=0 +内外振选择=0 +外振频率范围=0 +参考电压选择=0 +复位管脚=0 +LVR 电压选择=0 +IAP操作范围=0 +[/Configure][/Peripheral] +[Peripheral]UART1[Index]4[/Index] +[Configure]主频=[12000000] +UART1接收=1 +BaudRate=[9600] +工作模式=0 +中断设置=0 +中断清理标志位=True +$19$RX1模式:带上拉的输入 +$20$TX1模式:带上拉的输入 +[/Configure][/Peripheral] +[Peripheral]TIM0[Index]10[/Index] +[Configure]定时/计数模式=0 +时间设置模式=True +定时设置(us)=[1000] +预分频选择=1 +工作模式=1 +计数初值0=[53536] +计数初值1=[10] +Mode0重载值=[8000] +Mode1重载值=[53536] +Mode3重载值L=[100] +Mode3重载值H=[100] +中断设置=0 +TIM0使能=True +[/Configure][/Peripheral] +[Peripheral]ADC[Index]16[/Index] +[Configure]时钟源预分频=0 +采样时间=0 +AIN0=True +AIN1=True +AIN2=True +AIN3=False +AIN4=False +AIN5=False +AIN6=False +AIN7=False +AIN8=False +AIN9=False +采样口选择=1 +中断设置=0 +ADC功能开关选择=True +中断清理标志位=True +$16$AIN2 +$17$AIN1 +$18$AIN0 +[/Configure][/Peripheral] +[PinMode]0[/PinMode] diff --git a/magent_test.fig b/magent_test.fig new file mode 100644 index 0000000..0a2f78d --- /dev/null +++ b/magent_test.fig @@ -0,0 +1 @@ +PMTnXKYzsaGAgOiUN5jCpIOvA3eXqU1velrZs+8nqmhp65mmMNzBHYpnK7Q6kCWWd7NUCuA2BE7rCK7EPl6IEMpaaI6/88MX5fvCHAwKgbd/rYO34aU4VqWXk4k0zyU+zzaqabKExk8utJET3pPvIJbq5IM26yDz6/snXA8ks3D77cFfm+bXFBxP61yj935bxT7SPQI/xKiwFHVG1OaD7R5CAjWug5+pQajnGOdS10GqXua1S7WIzDw40T1zVRfJ5Nk4ssyR1f5Gjx0DvD+v3bJ+mGy3dx42oe2TKo0TV1xMe4dF0RWKix/CVbXeKMD6oVZuc6+dPFPh+VhDLKT8kgJ/SvxwsmznX7wQynKehhKB7M5PGdrfHSJ+GpSAhmXGupSZNqjYy570J3/34jw62YWxo4SerHpXkEuqQltQGImpPTrNF9AjPiZxmt32xKCA7PC80NE0PbfHplsyt6L+bS4DBf0cakeOWtNftUb8ZtAUbUx8jGeJSvmDzXWRRg2+q33NY3eq0dqlA9CCsdtlMfAiKSxzVT3n0SNuTbrVE1ztO7UbowtfjNOQL9Imp67Yd1AGfHLp1jj03ehsuWLLmGZBgHQQ8bL0xGabAncEqbqt9lXxond9R2bwevKBrAFxVaWWtP7wnxZ4OT71pS+lueEQvmG1Mym4sm7p5tRA1KJ0+Fuck7L411t4pouD5o2auuZb6h1RYDXY6Hh1welNsBktmzw6UZw5sK8rxRuxUuswXwuLOKZ5rcgeJeujSsJISQQjo2IJqRvW2q8wqKPVditbp2fdjPbPmvkE7PEWETBJonJjkW5kHUb+ABhz7pMm+j5aqmVJZE6F1T+ycg/weNpgSlAbbZX/npKHrmmZRR8SYflxeJz05Vy6JNshxDCqIcfbI6gAEA6HchFSx77LGmgDoe4IUPWUBRcR0A/bO3bMw4bAaM7cTugpniEBiN3ZjkoNNPsHq6tCnNsSYwJRUpO+xYGRuZUgZrdVALy/Ys8J0l8KOa6ySPQQRzeUDW0R/RKVytvB0rZeGitQBBIjJgNdiSqnI8hvIgSe03DgqQsq/63nGQDan08ATwBRGDkcsQk70/TFbVN/ETzEKJEGmGZIqSFzlYk8vQVreLaTnkWDqgVvCqSc6IyQ/icRzQqPRu51MvnNo/8GOGo1pII5pjXYxkkDX1gHnrOt8crkbYv2LHzVOSOublvFxmPCFfJlGsmDRzXbrk9lgCvknox1CtlNSOphCePMsdmikg2XlvEtPGR9WwlHM8N2X6awMXN1JjmlR8g1mNXZpax6VgkCL23ZYBua1qYQPKmakkd6OBFc8ArshczenuPQd9nGgfbHKHufdwvgC3Mt3Kr4Yag7LNpISV/of6WPAdcuSLLx2iD/H2IV6XScSeplXXzBUgZl9H5eVcFwiLDk6fIMV6GZx/0qya6JZXMLUoyf00kMqfOGoUJGdsTApibYm4DdlNDlfbJsW+/UD4sD1iZaW97VgUV+2q/jEiUZCQ9W/2Cfno46+RsaRR6sbpmGdITBbDVB/XIFTrS8YmwJv5miehbeNzbfjMUjutdD6u/PcS3wBIrejLT0HOLEsWZL1DY3hnwSkhc4eUx4KyMgRkOZG8+b0bWNhqX6wKk/eRRF45rXUBqaufouZaZRC79KZRGVkq/9X0EBStPZMbC4r9W+fQg8YxjjJS/BkdMurjX707wVKMFFnttFAXRzmbhvgGOUGILNkSaKdPeTtfuluU6jizzF3uKHq2hFH+p+1P1YMTDCNhdHoVIo9tBKJKEctI47uSx+PD1Dp23hnfPvVqWUt+pnf1gDoK2XMvOd96KzyY3OmDCgjzz15Y66X+DM3rwGCp66ce3q2SL3oaZi9qkbq6vLE5UlHPFZ62IiF04sZBHcZXVpGXak02qy+cfnR2Fz9SCKm06/nZOnMoGJ1aoPHhbkvHQklQZ2X0IX8NjGC13KfBAAGbC+qriUx4X+DYbOrF+zzn84+mFVv6nq49XRT9yuhRs2ny7s5LBUGSFxj3poAfuth26nD336E14MQ+U/E7lpygtpT9dA++gZuPPWGkg/oO+NC87YIlQdObmQ/9rrIhvEcdRTugEXsfiCp20NwLSBgeVyU4aCyiXFgakZ2+2Cd5piHrgLruhHaBW7u++Em5ORgSvXMYRt/1OWZ7T84t8jPnkmM2bdOUaG2VqjiwoCyPRSc2InkELsz9PXzJIgidWJ1j+d6LUaQcfqeCuIs6wkpkRMaXOvckk5FFQi0/Sy3CkWqQn6JVpd5GyRgtu+FdXFIfQgv/NebZ6Wd7nRTfzshykmsVIVm7qnXJYuQJL9QMNTu3CJUUQ8EPXkEOKFUlzYvGChsNzqBF8Qw0wF0tcQR93zz1IgoLN8tZ59N4scS+Ye8mUGSntXY8QxVVqBcWw16xWyzqjATfgD15kC0YZ9SdvvIdnZL3a9tI9r6680B0umxVLEqJKi7cx8wyWqM7kzKJ+iKOQj9Wb/ccn5okDSS+MFxidUbnHgOMWxRCenm7RTQyTsKHbwMWnvypSfthYIDnN5EbcZJzpM7K2xl/C8Jf9IkaH1F+bt83TTap6CflCjVT2YO3ZuOuH4K4IFjbL/ptz9wXs3pAL4k0moj2rouzvfv5O8txrgP6WxmOalgBu8apv/vhNlTKquMDxZFZT/OKGEbYN56kGjqQJJ4ft6zAUKjnWrYWJq4aTo7Rl0Y1iippA2JsYhSsZMp2FVD8jH7o651TTczUqw9R1KsJvWFavDsPbucRQrTvbl5D2ULMWl0nAlyNerKZnJ/lxwOPGif3gRZmeZqb07HFHtIb9TPZaQiRAzujkF2WEwUy3YuI/6IgEF47nfKdDznHxtIhwVVnU9HllTLDbcAV8gAXeg5MMReKX2G2Q9VodJursBk940oQhUjMOOyilDA9gsdk5G8r5rj3oybJ+UPwaTJrm6u0zxoAEk3pGB4wAR+oaBziW8Q1RoyyySbMpIEUJK8lK34hoTu7Li+owm5ioNc240MWA8otykiM2wif5BCls3KKfmv8RXKGIqqRZSUuImurALjaU9o47eish3O6LBli1LMuxSp+3eXqK6kIe4TT8eJQ/lO8I0OTRnrLhvSrkJ7tmjuR9k1sDu0CXXp8sjwCdfgJkq0pLxAAo+1N94nqiV9RFTz3Pf4/Pz4nxiLZKCy0bJNUW88JPtWtLZTeyBT7p4Fq1qILuvNEm9ClpbhP5JnjepZt6dLX9BAWmido9Nczc8xzHz9E7US69OteggPcDZ4M7Pi6dUEqbh7mhSeVACYWqcHBpvVOQMNC0gYCmYAZboLonE9yV9x43g+JhdcqX1Jx5EcFDRaBxkbBlmae9b01pv+f9lev4yXeQ8wO4sdN64ljf3aqGxUR1ctyD3y7h2b3fNSFoFK5XtKayueOV1rbGQ5BS1NIbYkssmCu5NJnwxM60mUS7KGD1s1cmoC+Aew7dzbs7b2Zdr2tP90hkWnkybJ+TXKL5x98oWr7FigzN9+FPJjBdL3Mu6m104+nOj8prDahFTe1v2foDAhJu/fl9JQnMrKeWb9DLbo+fpmiqkJ8wfXbt81L0Bp2JfYqRLvwnke4mK8O9R1wtofy+vdcn0O9UT676F0QssXL7nC5nSyusz8WBwGqivtMivaWjB3HvI87R46c4ugjIB2TWFcWgMWSY+W2u2YtO6hxXvT2Y+ZVDYRS9Jm75tebmn78J0du0oXL4nK0SXc49S4CE1MkucsFV8VkQ+m9rD3jxMsHZEAE7FihW1Tq+wQ0MlPL1kozJsrT9KirzqnP9k95C9VHtCJNmTGrKpZcENONet7QLTX7AT7H6eWq+lGV6B2javczmQx/xoPFIv5zIVM/jrUnAOEhaq88S8Rsj2/gq3i7Lvcr0E46jxMqS1H+cG5iWjVqnYzIe32V9lTmB3mllMr+fmOk0tu+nb7XxeyXr2vEqUqtLN9JIVDx5zV+6zRlksJ5DH/ZT6QxPd86KMgQLmqHpJDFPmzKuxTNwq+iHG01u32IwyRvX/OjFO51Bc1tbP7w+tkKDOp+YL+AiD0T2+AyKK5hQCgK4WLseHDUhOQRhFNy8v6K1wD6fMM8+K5NUeZCYjXdye5L6k9ng1hwmMM4YgrkU2XiPHbz396bzc3XJz6GAhOxioI9T/Eba2nz7hVsexyXK7/fuOB8E0Y/e98Wvngu9AKoagh73UvA/2JojUm1P+ZDjxog2B4clKYAqGdlb2KidpcDe5TCnTc4P6KL/1++IQfgaBd6AcMcW5Kr/MTiINZHb42fwLlQs3Ddd3NzST9sKL0wc8WQckty/A8Xyr1e8Daz95qNsJqklUGV+6bYTltW0wZHUAqQIlszbdFOwcsBiJiBAfzQpNA5hl4RPKIWCPOPsd6j0AzHfnU2+eXvr73EUYoX0eJwfa/3YyAmjnGmVclEiVwQyq5O9jAjb5A0MhKMtSEUGw41Zt+KPIIw1SV37yznUXmfYefcEc5k23jvyqLKJ2bN2ynKiR51TSxk4b1i2WM4MpulMwATJs0w1AB9kSxhBMosmaR8ghFwEMMlEL7YWoGqh2fIogo6cUw2Yx6BG9XLWdikUwSUtyUZnNcQFLZZD/RsTcRcWKapbFtZFAp3fZiFQZ7Up91YwUvrc8xPfecLSNnpOMK+FnYcxlX38nvJKS8LAIqsLBTO2lhofH9cIx89zWCzvlGu1H11G3ioOojmMY6OF9wjoz0hXOKntj5ia2PX+AMl/Ezb0ELUPMllNJ6KJdHJu8V7zSDaPlXVxEbGC3UwaSpqi45ZJoE/mkIwy+MJFL0mK6vpwGix6I7+IQkME/KCsvA1C5a/lpIExYWmmhvu8mXR9Vc9OCJgkFFyE1rU1q8N/hB9OMqMQnSTbx/QFaQS5tZiAdaNZOAd6XtkOYwqwXzCusD1Mk7U1v+v4f/Acz1wo6/HicEeergaE+lHUVhxWFK2mn6WsBsP65wPEbh0ib0Y/B4tfx9UbXiD2KrFl9QD3XoySs75bkwPUC4PGSNTQ8/zvVcMmgXacSEllgv5g1hRx1oELcanLqfd6We1a6FYzWOgPzVHULC+FNytmyMC2YZf+snuH07+7TkZNkQh2Zgi1PNNdS/rLzBnnSoSUOma3z85/UbcO51RRi8097IV31127Kn15zlcWSQmUuxApPGTOGCmm8yqSMqFlQlibKOx8uPOy3OJjQ5QUDbyGsTeZimbH2NZcKNnqDMrReA0NMs58Canu6TUm58qvcBbP7tzvMQUI5J+wf6Jro0Ob7P2R37ponXhMRAH5MeFlofJl28XLtXt3V3DoFfDaJXZ1c5Pzdx4rkO7DA3hst18JW6xEzh1rMR/gcCGQ25+XPfSMplZAJW2lvopokqVKbKbdpJC0WVWUNajhliFYIABXrVMVN3wWvnROvToVGse0HvexjcUCsSfRMlOHCJzTCYTaJ5wYAI739kwaGHpQWGID5wQm7PMKCeHajEkyUIU6DVjdR4pYnSJQS3zdPRAJhfOeLP5faleXWyoeygitWlFpAEJrCs8A7lS79o4428gz7kDD0AjJOjHG+n0gCdPTgZVaQaC9bdaNOpnPkdnlG+h55x3vhzvpPDsPuM25dt/Cjb0Fk1L7ORfj2nTxLkWai3jTXDpyqLtFGLZhQpumPwkBZf2gZeJ8suZhyLtNrm5nqLDSm07jDudO2vxWc2Ib2cdb7MhyhqTr9cyt7lW7eAGwJq/9aPbCLhw6nNYG+5mkNmJ2wg43gGzlSubyhWB0rohuW3VLMqRcdUz3NKjk+f55+R0hPj/Y+TSZrb9ZcjMcV5wHzfnW2I6CMZWNvQN3QkbKCL2CIyj01ZzKV2juTeSkM6ShMNDaG6I0gMrm/zL2+Pa2899Lt5PBd1L4nou/LYpJsES9SkyMAz5wnBqvJ2GP2Mo6B0Su/XZpoqCiKOlfrJorIkEUZ3UKYV6eMu2EFhgmM7CM+VhoF4DbSWTaeW0YAWDrqAd0tj3a4AFZ0T+nd2P3OZ5qznKzW3XFZKgjDxcYpcBWPvKlTU1AY9EUmwkPqwWhKT6x7hCqy9DjWtIz24hP1X7sBtnv6chAZp7iMSuE/pxLI1nhrqQ6hxzcLt6ZcS7mlw3sIvQH0ksUh0cazW2lqP9cBGpuj0774L4yzlQgn0ujQVYQitiz7H2zQfsAP6TVPGB4Qd3gZr2ZcIYzJZJNpzYJNPnnwoSXmW2uNzFcSoi7l5KxsRre5NquTardirfgJIjqWOzIBYOWgJcTZinKWjxbcOM3QfOGSimMM6eurIvD61xiHIMqwkWwEuYu5GNf14VimztEsarGmzGGBnuI4jxVc4UmTRqtgpuJraBnMQT4EE1YjsiSjZGeAbiU6+DQoY+N4erPYy8OoDnfBEzeoumz1IoIlNkRPx81Q00eP7TtXE7bPUGv53Salon/guyMEV0u18qb91YUgo8cv53+OkF19CvVtu6MQ0b0uIBldxF4gRUBs5n3LN6sEvCFQZlDnDVR3+mmNh/lLu+4zpgVlSgd0P4YPSQjbggEM9zUXGG1mIUWDKPyTiTtLHFtClF8V/qlSseOZnHfsHRZloG0+/frgPkYwMuNv2PemFzg3x+eSd3KjDrTcMbqj4Tu49TkipSGvW24216pBtPvUQvvpX/3x78xyg5qMXYHEAcCZ1EfQi8PKBRDkzp4DuzFuXFlIT5PXz86k0tKamq/9rTG8NuZBdykAnzplOrn+gQ+JmE+5ew825DrgZn5UOsaNroV9td1KJgeppYl2IHjWRm5EOOKewzezdB1bQeWHg/pCGiKVd7Ots6+FVHLsnb61esLuvIwHrAvlD6HRxv7ajqfh8z/+KIwwkgi16xcY/djY9wDaMqFR0iK1Lcu2l9d650BGH55wdznVsFgHncKC/QFwojf1TKLdM9r9RIm+7zvjB2YMZwjkKZY8g9p86/wQhoWuQ0zbJDQjQqLpKHJ4y9KknC2RvYLaO2ivS+Ser6fouq7M0KBGY+dUY9Mj+XlNwD0ie+YJtwsfGyeMuPehNOxTFs5ejoJ3tEF8dguG+PemBGwTTfQ+sBwHa/pHHONxFvLK4UMiVYTYs48ColJz6V7Uvh7QHqnTDrn8nHsu5PvF2VQQOwN77yEtwRsAUnz0B1CPErxJSmacLvgePNYnt+VhNW5fhKsZTTM6v6iPbv/sHB/BUderjoiCQmGorBH01vdTKrOe1x1l2Qw0qkmkaWjSaM65zvnbUACNJjY7ew5TbUVB3ywAW5JPYyHpcQ2jOD5H/K0raHdaSI03FUS6hk/nuWK0ebQHyjM1e+sCV6YDEM3JcR/zYavjtT0hSvClPU8OeLVouFNuzr4XpJaSyuhJVPMbeBGHOy+KEiGKtYsjztoWneRzp3OkZ2YTSdtERDQJtnhAsyg/S9RcfkjkEylcupbbo7K0fcNVOw/fIv/EiPWYmDc5e5r+mT7xjYSs9L+l7eDD4EuVeGO9Ma2qHVXQxTJdq817Qean69y+FOg8qmviIwjfV4YPf6U/fOk17R8HV/dc5X/9QZgEGldCORrIFciNpJgPO+hnk/MjBpzI9vfpDuw7ApJUl+x7ZT0igMXDAVbnX91tQTDXYTCucNQgc/KvOpnbnj0mFYEckBmAqA7/eMVzmyZ6CaxHv/7kaPXtc7yHzgxA/d99jU7PFJtNlWIO9cLH9j4mYEEtc2hvEbhqqBrfGdivuvr3t1HSYOEZwa+tptn0fQmqahLEVrx1Ag3liylAyOB0IuXlUqUKbcnmQLIV8XN6kB7qpxvKq9qbj5pLW9OeRFJ8l0lJ7uatNwC8dF31oMzD9obhThlyjsraVw0dCPiIdYxvPk0/XFBogcbX1W93XG85CcxdT51NLmaw2jiH2wAqMF9b3i3CVykwdcZmqLk1MVUiYLUjpF92Ivi5guey3LPJEMbZG75tabRJ9pI7LLxuzBVpmhAE3Rq1ZIL2bpTMDL3YuTCzTo8f9+H7odK6MGrQGbinlHASfQ7Pzy6MQZ2DbaMH/hmjXaSVhSVebEWxQWGQzN4AL/K4zb0B1v8pCsTKsYmsg/Q+4HSuG4p/I1cKS1tJ7Yp744xP3z5fuxk6KCtrwaRAH5vRLlmzUu0tnyDLQV+pfh/GDPAoD85iK9znklpZZhceXQfHos5I68vcThCUTpzM9YUNKwGCV9JA7jGjB0qiQpI+Vmf7NiWBDJkl/4iwSISjiXzgYDm1dvVBQydnNWTvl3mfIage7yDav81I8aGIF5wU6zwrVFIkdWR78OVYprpMXU047MRCDKZnVVcuBg2N3JB+IEt4mAp6obs7CX+xCBqY8aNSn6HdYNZO7MFyFmfy/Wc5Z/GtTGEjqxBlduW+oINjfSCH4c7Jau8pXVUGKmVqGSmIC0moOw9S9JTL+hgBKl4pICFyugBVhhz2CvOqDePFQErBGVbA8UaCjtYufPk3D80z+MIn0oEmi0G1tfKuzuCsIQ05LskmBU2Bh2YYENGXTXiO4fyDVAiasjNXHAMySx1xsxjfVj8NrIO8kSJO6Eg/T3etDDDYx1g9uKZ62oBwHFkJYd9TanfWfb9HZcmE+qU0nZZXcHRQ8HDNWpW+v+elbqUURinq0ek01UHeAPWUDORI79n6U2cFUVAf8N/i8gNE4sU7zCNsVtZIXGIXwMZyrCoCagLzMgs3vxI5sGEdkEiHttazMBsUntqWyYvZdLbv4GagK8JuPHfpeTbkxMdh2lVI7wP1Ipv3WFXPxUCHV8OCko8tiFSmKRnK/2M37cC+1BeTieYd9/UlP6ulaUE1ERySl6j34uf33NOn+na1ieEWuKWC3sJwFwVifp+yNjw6Kh90keAaQhnQSuhSuNPWFxUKJa8c4jSh/wTRXqgIZft09BmHOuvJDBonkcibbK2uDCe/W2Rm7Ndt1FoWlkc34d2ZkXIH8RR91IHGCHcKlrA0DxlD6x6pfLLsuuT2M4gxx2rSNsCzR4O/zmOiKcJzxzWqNF8wLLwUL4t+wB7BYod+7Z3QPp47+uP5UnU5V0L6nKa2xIQs5moUFlie+ocAXETQypjZoP3zoLHdaLFlsBMLn40lWrYVPBmDar04kV8kcCzP8BgwnRU32qksK8DE//PU0w7M1TMTI5CC+tVqSQ27Bv9W0+EWY4mXfM7r74cHaA7tZ6s2JOqx1JxsUU9xCXPwoMIWxqvT6ipyqvYsk1naZn84dxFyPhawFeBRiLPlm7UCQIJN/t8d1Xcdz9DpBwSk24Q9ZNOOeHkgE+khxgU72zKM8UYL9gcHNbWPGzozXMV7NnGK4LtKszDlWJdBP2PqICbGWMjU+/MhIUNGjLyFammwQaJjIQ+OtzOCGfo4PlKbIN5DaVPnRixSErLtthFhphkbkuDQDhqg4UyCeoe9YkzhJrF/xO992SWmfcw0HUtuhM16emy45P9STkABZCiJ018fmfAiB/7X607ynzPb+moOAFG/nMvVfWxpIAqZAaqZIcJ2JcWP+jsOjuBiXEFwciy09PI7Feu7CJFiE4tNU8Ik+nZmi7v43BD6TMhhYQM8nZ9ouL/bVaPgu4vXdsrRCemo8MkjbcOzA3XaDnzgN+EAIw0i9MYHWXFAYAVDsJXlGW7qzEeroKb2X05AiJdA6bmWCiNZOxIOcULJCb7oQJ15tuPrn/s9IA6VGJz79EGLMjb9VuF135vpMcanwRSeSjoFa2xcEvOX9pIT8ltDTGAOXE9yJx+z0NQE9J+HXvnj8cxc0gsDp0md2q2ayJsplRar5cKizY4E0mhhXXLj3su+5R2fpb1P2sL2n65XZpNqaTcZO7DQNQS0YNgW4/SiOw0R3lVG0/KgUIUznV3e5lp8hhFx+vzeB2EJ3beh1OlDPTkv1YcoF8gS/B4m73TW0sv/im8Asa6Fa02FkBsEJG0MKL2qOpHhJASOfkguI/aEOzJiJWFX/7KzOECF5D7yjitFfV+Y/P7fIvyNcLiAzEBR5V+QHDTKefgVm3vgj/uRONdxzeTpyOZNHb7d2J2knzt3zfGiJBwNxPzbbHgvMXsfRF9WDPU/GmImzatXQWnLqN/RCABRG2HxXM7Chi4pSgTh5jhXzKYFP40oiQn27G55D29Pe08MJvntTUFFroGRVazfRB9ea3RoCtY7+8/LovpthhYTTyHSu6y9EEQnCNiFXifSeAubH7qkWY6K5TRtcK9bGRpbejGxcqU9+LpPnbnDnFtcpRjdjleVbyrEzKQ6lLVOgIZeuElJhhvpXwAcpMCnU20BKo8YBLm7PrLnPfVBXNz82OKOR7vynV8NzCrdu6osoxsT32JhD04u3j3o+raz5fC2Hwm4tLn8S2BIxwm4h5HIzUQZINR1hTWQrPmHI/L0DyaPdvOAHdmllCfwJ8FhczVsT/ETObK1UVtxn21RGasqUMfLwYSzwBY95kScVIjwOcSNtA89lWA+oz1cmm+DrASojENtBktnPFpTbOHt3cXl58H3Vi5ioOZIG5yTPW7sOvjc9BahhZF9dj9WhdvwdNiwk8Q/niZjzrmaYI8f3Av06QjuAEsI9fT/72RT5bxF20lSkgEhWwHpxA6nG9sFiQpoQaHnO9REmXN0tHn9QK3qkvNmnqymJL4j976a9xlJtvjgf2J/f69CZpC1ZxbQkear6IrcwlIl5AiZRUQs/5/cvcwgaAqW70FLn+Uel4oMVklNqzeICuT8iOPSPQkKdP0mfsiV/iGlk5IuBML67V7IPpnvZgUgaj5FetkM8wGYKS0VF5Crk8qpU/W3HqS8vtklFR4OEQa1QPYMDrDdJOSaN9VjPpnhXaVvNHymp7hnXNEzlQxBmuiZQELQVzeyqtrfj0al81CLhwG1l0Rxl9blzhGqrz8aEjrXwj0L5Yk2ByfKk9/N1poxPNZ66fqugRI2lHd+yqDEgVbBJgH2Vq+rnfhatjNYAZZM8Lx8H5TkCSx4RtCw3EjHZcrIhm/xFeVWATLTztp2wZNeW2NL66Lk4TxipEcXyNn7V4fhId/CwAUsGix22SAkeCOTUXc3XNSOS0UPLCUtuouRYjLQm1y2QRID3K6ovNajwh7GYjyr0PW/X76D8OqXIOeaRudM900AAd/AGHt1Quef7HF6h7f9w9EtloUseFlpgoq0DhiP6RaGtLDwQoNb44QeXNy12vhfPRHLF5C+Gohx3dWOdo8p6Qgyj7SwUQGRn4hjtlOgazWQ4RQqYOqLduxGvme042i6fUjlTvTPJRnuVqbaK0CtkfODX3B9RVKJlJWRDCC4Eo+v441dP9Ivf+hjtY3YzOpJEUbXod8C7mvDfdrFhpm5G2tiR2ul6utXfNj4cTYgC46KUwIHmSnf/UrGSC4s3dflDMfAN6JxImNfKCte6JpxCE6pCYu3YwS6JmQkBfH0ch5C6JgGa/MthBHjFv/+/43QJRVCUQrQ0u0TvbyO5FSgYKeyKU0dmre0IkHtc32DoFUknRtxR96OXr06cUZJrwjjKoDHrmEfvg5a5KLRGp3ST7s1k4L96KUhhtmpQETP5XwSx3SkfYyBIUme9PSPPOzFtX9AKv4eNXktxu5M63ZCAfjtPleQQK+922bDG7I1DxGcfZzoD7PIsQW1fCJp+hKxviTr8AhD8e1WQIZKVFyJUQEywEcp4uzEQJ4bhepcrfcnpZMzz6j+22Tt/rhW9w0ZfOl2veaxDs1ptkUnNEJlJWaxqtVdzyfqy3FeB0LgpE94TVLiIZEEmPFMZAv44qFXHMCd9dPHIqMQEnY2PrOHZIdWaC/R9rVmW3jEvLAB0unq81ZWAjlcfqYz+HizelrloyQnAc1qcqJdjgBgQ+n8VZ9J5xE+us0aBYHdqJ8QOwcjK2fnUIu3Vhf1DK0sB2lmYs2ald6OHgfrYJFPtOQx2uCbqk0xyXAolDZhE4073MfqqNf4RxoHWmdF1OV/jSNay/Y7OceqLuIT+6aPiBBaCXxTv642NfRg5jA1X/LF2+wFheY0ZBqO+iNGb5OHYnKfgTS5UCJgEL4Sg+GcSXMErntvcBqTYJSOEDIRwDamhSTW8QnUM77VDmneAVFZvOe9MeJkdhsgz+9IR/uQjlg3psZsg0RGNDM8uxJwMQ9XiFcuWUuDrG5uUzZVOJQjymhVU/+W+iS8EV3vGOBqXfjriXrNNXuUe8O3ZVLk8IYvmyDW1KXKWrryZoahZCmvZqNCs6lTvYEKYFq4UJM3d/I6WyzmjMB+Wr0gGbuYionRohPzkHIEIm/tQMLW4kdJ5rXEfqkKdRXxsZnljZqIwhL3naH36CQjYspFUufwNadcb6b/s3bruPUe6g4K/wt/Kz6ZkrcWrhE9j9YDT8iUIFeYUNSyUjxqQGm8bS03XgSA48Z+wL7fR5TavbZpnAmDK2UbPzoKDYFyI6NQC24TSKxrCuh9vs762zB2mBQecAxMzE7RaGX19/cIDxNu8uhtpOBsl1EECwOHXi6hHB6C/vR3VeKuZxax9XyzScNrO9qoi4H0DtQp1AJ9+xn4itQlx/mJppolwDpiAZbIwqeeHcmLnyfqT1VPltcvVGTA499eMBKFtISudL5n/uvOQ1bnIPGNhsqAyKTWiHhGIoz919PtyGWoH9+ZfIDxR+rh7o+7ImNyjestfV46eA6VBcrhSab19JTb8H4dEjFGwWWGAWRy2yWA5RI06E1ww5yfBCcPM6zopB0Ii+y+2eTyI6sB32/MijA3vlpyd9RGswKuQ2+Yc2uV+V6tO/vCRFTjawrh/Og8wYha1i6SxXGpHqCQs97P98jmFkT81YlKsVK0uaktqPtrjXPoKs7U9iNDpx6I3exV53Wh8W27/EmivBR0cxzdeTVjdfS0Ta6BCYIyebtLYo91KsuRFiO+JeO7Wp4rKT4ZYSpg0jNa3oH5AuYHyC1Ks8Y7lnBm3Yxk3TBUrwLdeBj3P5sLcmVUnvo08dwO0Y+f2qwJH54Q3fhFt4Ll879Wrip8pKPXSVm6tQ5XLJosk8a/8wNAAuz5fMrHo4thW3I+7lq5WHewNjFbt9RAR8RqU8STA3ADOzXmncCa2koMxB08RRXF/5CXODNHQltb1mFY/ztQoqfWlffSQ+ebF3AAbvCg4LYUpd/vWJRbzL2MqNgoamUDmffI/7afzYhGHhFaK5QbS/mF16qxXHQ6wtZZ/06Cqnvxgk9zSiXM8HDcCunmmhyfXNJpwCRLSmpHjw9ShbFF5BNFgzustTPTsJo+0f6VH19t6bYauouap2EFy9J5H4bckvS5Z0W18NZkeuwyaZHULXt57PqXKbT9NIdEYo/3tLajwmWB8h6wS261aLsWc8WKhfFh9En/4NIN+BRovbwmMYPuu7oj1z+ihT6+P54AfQywttWzrzUlrNZbHNI9FJpQvE9Djadn3XV7/JxKwhzpuYy/p8jnf1uP3sedQAGvNQIHN6HRsApWphJ4dNbBG9NClw7YudOP4M1l+aFESPTUT6Z0W9+DtyB0ycvTRBGIOTcdvViZR2BA1aRwBVzaTYvFX/e6mjhyhBlBQ0+DfcHrrIJQjYTYjfdJzL4RR78porasPKZDnPG/ip0mHoxkY52c31yK3QK7z65GUDswx0zei54m4hLxrw+wz1ODdm92gcdcEm1nSG4mR0i4fLc/XGdJG/4Wp7Yc8Np5LHtn6hFq6m5DLey0uXProlueX70b0/QYYAmf3YH86Nmtp+hXF1x9gNKcn7UldnE02js05YSkiLYaeTwpAAw96O+7+gZ8mq+L1O+H5SI6wdmhsQHzg/RVgzj+axirKidFozXvmsCYxKsuqRqzDgO1EkKo6a0QeMqOkpQEDzlkCk5AjZ98UfjWU/ySoq4eFu94tC2VahMF2SJ+pe+GC+3VMIxZrqindpHhO15ejJpb7FYj8G9qS5FCvLy3snWfgeDcBApkIo45I2o3kweM6+weH77+yuOwl+BmN+SUHlFVFenJF8mMx1NeVLcsBd31i49dNPCm9cstp+6oOFCX32Hfm0DDyB3+hsZS5hmudlhR2WUA7Oe+bMWiMGY3rHU1+LitkOdIFV44FHDT4lodOz1apVeTTX6E0jgR8W3bV36oz1EPazLvfJBqAkH5IiemY4MVGAWMPakJp4cbzdbuB66v1xeJ7MKGtcZWJ8/c4/fULYLEP9MGjrFZD8GSdfzWRildlIQWY+QVcaFEKyC0ec71auzalVkvNxqdWfsrvRNH9BjEeqM2ryt2Lo1ee3g9jjNJD7b+J9P+qORSkLxQWjvmueqsc7N4ZcJ7gYtps6hHAUx0CMw9gBMTZCC75PZmXv5e+MhoNapX/TgkwbhgQoE9UzbVIzUrv6ovvLNOcfie3GtCHMAr42Ohh5wdZ7Jwfwdm3ZGfdCMPdt71cRDATiwIDa6GzaJiuhmXh9mvH1+Z4HvEYp4R2GpsyauEwAwp4kEpdygaYh3n5vVxsGegO2HxN1EuP9ZqYoJY52DVIBGNBLGKoJ/f2bFvhYlHb4Ywrr4oZN/Rrgt9PPC4PQZTja6C0H1vw652lG8qHrZT+iFxHqJTYOeYbVgs69jzKq4ba0hJFA8CqoIztIYxkE43j5u2iHukiSj05gzahz6Lzd60PPNybmyPtkjDL+uRsZM3aFpms2ZuJjtp9ymwWzYHuv+i7P5cozZz6emkupDqHUzWbTOsLlRyfl8mblSf98O79XtfFMHjOkFDlhUJYP07P+jCXQIzqqTrd/drP37PofzWw0Xfw7yLjVML46/HXXOLHFjy74mSyE3Nglu8lrtzJOACiIqN0kSmYrzrKbevSePSriqQdCJ483TzO14nVpJDW8GSd0zPcFei6IetsUfoF8qf2Ku3qkdvKZ3QabY4BE4mEI2QEdQSNmAOKf/5rNGVRI8ZE6U2sJbAo49Q/thnp0eyAbIf+f5dFFpf6qHzaA9hJN0qlZwUZouSbWzD8TG74LImhLKXeXdVlNI/eCHkTY53JVbHsUkprYuw5XYYanB+NIYUnVBBpwqV+gc1VTnrMDRcJcL/DRzZqstzcKgV9e/teU5g8TT1SS298F9jtbyGrG9HSXvHVnBab3cakESIKf6XqmOu6Mj2Vsm6vF+2NwiHIdjnhzWv6VSBIY2iMNAJh1HsCOv4jJlGjo+2AyWpwBDHHbA4mNoveneros1xQeU6ARP5KB7HQpR+1CaAEQQZW0dvKK9zUdT0rLbgeiTLYThXwo5onFLpizcseSrefcD5NwFgyrX2JWaHRHWB7CkQH0kovDQKV7cybJQnpWU2d//ntBx4AmbK+Sr7p+7PqjpGgVJ/WMAj5a9ORJOGjbBMPBodH9FSF8dzE9qAARuIFkoxxuMwRELf/i2xVoxC43tLfgaYexFu/HJlxY6xU4sRFGLQM1eL71qr4FLHPucEGH7M6wXlNLHotGBGXU08gIoJ56mcBFjjYQM+CR9/M67nGRM2JCvhjitYZcXAOQA1/aVV3YZjXgXDMMGccpvlWoSow/LF/v39cSePcRte5KfzJPn2u0TOwyt8oNSIIYR11hQs4QVW9l3GHS72uTbIPiFeS5sPga5pwE53I+x7TtGWTk82d1FMWEG5+TCGteV7z02maS/QR6Hl1fTb1VyrDkr5paq1ztM1/aQ2qaSMJSME4OFlR5EiOvldsgCX8hFigQli2u4jraCNdiSMr89vIcGilFFZk8VmDUDJCNm1BVkFNAsk5ltE0dfEF4g4P4GZ3Rd2V1iXxQ3ObMtJJQrzfplBYg28kH9Hbw3V6PCfjfesgu7RMonCL30XNxKfsG1qVd+rBoFuKvJp/9m2OWeJsKg0j6zqk+eo2cQRGUCGgaoOKlMhB/MV5Aoc7lO/IJQB594vH0bxQoKo64SFLZd/PT2kg/tZVNrdYr5Z3/cHmEedNujYcO4HsJDj4Fi+SMkSnIsAZFFnjFdSiFtQ5VJxwRFP0aVT1PeNDWXNZi0Gn9LYvrMtRY4IaQUJg7DtMOCjP5Og+dAdDWoIVA5MVE9YhuLUeRt8oo6Q3Cgi6D8JRLoJkwbvh6meQ5grGP2T3GIpG/X6vtF8tAWOj6stUppC0t916n0dvnLoeBi2JQIzkBjYFjHwt3g9cVQhXgC2MM7tkhWMwm6c5LVDH8JksxA5GjYhgFMbjzroBhSvPvz71BhoRhHsRHNnRHi1PWj67SPnjvxuQbk6qWXadsga2ToXjE0TyQPC0cObFArHMNPsx/aVw+l6kAacrwqq/j+FVbrNl/S1hO8oumyUWrwRrNqsrH/webPNI+Y8XpRo0MWJUuPH1/8IN3w8ZLnUpfsje8boVIlGGuw6MbTcvTCxXQEwzg54KHDBh5x2x/kWIO2vkZfaa81mbYaqDrw9w56sHF9dGewueYwd0sJlhOFVg6CyznOtdwGnVyx1HBOAXsux4lw8AMS/e95o53Cyosc4wNxSyg2fxlq4GBKot++6OJLcxpwm9MdTuxc5dT4ej3t1o3lz4JjkDJEAKQChEtNQhkm42VNgLGlJVaSKrxci4UzNNte2FBt4MztNThPIoZs7GzsqhsOnnTWAeyF+hp8oGS/Ri9DJ8V3QuZRNOlT1YpsAgIoVBB5php9SD3mEPmPSqgXIvnLGs6F4LKBdd92XaFg/fDspn2xyhyw8iOkWaXOgjEELa+OTEd2M6HtKmtE7+5ISOwRtCMRIl3Ef6eNIixCSdVT5iZ3Dlx/KiIcPqaP27ps61AU/U1ZOaegT9h0F2XXSp6CVZML4Fm0HcajlL1TdhjslWrJMsv22aq4u8bXhUPtyZJ2VW32HIxA6LtVoBRLPxyn78FNUu2ECgP1QushR1OnTFtPoagPXLhrG0y4DxsP3DoVcGy38wsjtuq03MR0AIjDoXTIfrCvsJKcQ59Ge1ROoXd6NbLuqq9OOO3YO4c0xwEsdE9Y+YTDmeC+tLhnvjR2uY1fXC8uG20Wh/2anNvBI5VktOUpfJtg0zjGfUrxulanOvX/jIAwHWWM99Utgyu7lOq8ojUmFF2yvXM+1hhf6wlTTIsg8QIRsYsvchoX+rXWbvs2e2PLWBUOP31II79y0/nfzMxbKpfmnOIeI4W6sDl/JnCgFRnLSeRxy2q/+zmVogPS2SxobQDa/YZdluMr2R5grBeI/FTzq9fouyg+az7U5D1xxw3uNsTrNRLaZ7z+Q+EwTcvb8EGOy0sPLDuOyJlU7WQsI5RnsjIKckfuHY2CY6Ho5++P+4fwXZJZtsZYFGSmqQp7F3A8Y+4+gd8qKAPYJSVcbskNx0mVISpF+rlKriJD6tpm9lPFNoBGqMrp4AC+/LEYUSgx15exHSXex5GO2qjJINDnrCQHtjqQ/jNZTxoLhdNulHFKLFC8v4GCYv8YDY5XsiCg96FLu3xpAk/F2CyU3yoO0gNRgmYafGvTsz0OdVD8nBTa7UPivTiMttYzZLM1p39w3QPD/e4tHPJQAZkbB2f3ujBDJTWOIUYK1qZfhLXEA4k8X3cMOeL/v/RT5qoQ9k1yXLc9RuQ4PFr8By7ntD0vfB5TZuzY8LOV2YcakF5qImWYD5do+KEspmtPMjEdoUaDMTcpJq95shWqbeNyQmXHVeVcWaaHqDc8iQ6EpLPH77uhrSSETCZwUvbmDMwBSe3hgu3EMPsjUZIiuseZi43wTP1fETafFLYQO97qX0ECEDZ+XQjAKiz+sJ4WEtt2DGLA1Mx9SRgL4NeQ/K97DLYGzhEl1GAT+VJKdNHu6Eh0ZH6M+U9cuYEjSNl5EpK9yIPotPCmFa7AcL5gJKO+wDqMGCx0y/rQtoajhVDG8ZEEMogI2rqjwA5wDCo+DnKpFLsO/3bInJ1tpE//qT9gJH2yok0nxMxtlBcM0aKYAHMsSImxaTWrOGnIFE9XrKvMzhbecn8U28LJHJRKXRjaSvhIGyH9EQwJI7uz36kE5Jok05oZA5/bL+APuaygFfa5gu8OLHjyJh3z3oYBFf+ES3seAnQEz3HlI2zCZu/2frkODS7LISaWMPgOnpFhMDaoIHI1otVUhiyRN4UEahXtCTeqU5nWMNNODT6o4kzYS2fD1Wdnzau/0ixGmDRUu98yIaKUppYwSRzmxrysdjBM9abgA/PwaXmDIQz4/pRnD/kEHGHZBejbNFl2zuE7OwYcQ6Qk740N45bnvZeBDcu2y3t+86KkaSk2su52RdetIjmfHnLcSjpGx8RYZI6kNmzA/snUFV94/iS7EnoplzoArpusKZxMxX2FiOvcnWNpFg/DYg6xm0hVjNHUVx00FQ8S+rLW4Qia5baiMUTSwU4DuDZzzOyjQRYEsnhk3xoFKrCINEFV2du9ahTXPsUwVdsCNiabB5bhq6kcR5+4Coh5KFfTPQVTYIotssUHEczUwGG63gJaDE7B2rhTg4XGqCLRXOfloOzawjITtNI/HbOVIwn8G6+pr3ayz6BgFL3R0nsFnns+80SENKKUrsTR9/voMSbE42q4Sh/Jq8iYedMBQuFetrFum/r5VqMmNnYMfqYzZF9/20IXoMF0vEl5a5dh05mONM5VD7vyJ2pbuE4dwXjz58vWA77Kl48SyPlohxHk1/Bpj5NeU0yhKg/Zgy0l1ztWXiTc5sSBSRp4CYc3oFHUML/wIP7+GPTOka1PcK8f+n37+GWNp5h3eDjv8R2Sy7BAJUgOHO4EwRdRUWCLuXqvvyAPdjskfFwHldR1Ke2AgoJHipSIRGTpQQ0GMX5f/nwoXSA6OBDIRtYKzP69afJQ1usz+wurxGMiS5Je3PqNnVkwIS8pDq5+vuNrpkawftpIcePFjdirTGlKCd47+QWUei3kXh+hi8vN4PfyAYOgJRJjtFocpFwUFbTv4Nf8rlke3Hpdu74wn5lglM/bSgTZID1Uj0GmEGbW09lvHbmiedUmwf04J2gYedu1rYw0Xr9eP7As0PeNW4W/emgzolcGO1pDCZnuoacOYmc2akb9g7av0k5pf1xtRWtukLQPV01Ed6awihx9X+7iNoE8fHlXd7Cy7wKMw6zmghJzVPHOLIrN9tSPWtx3Cdz7Rbcc8W7w1i/d9hUdkCNDAoo6rpvOdmwy2X3OgkKVlR7K+JLZ3vieaYALkGDrAcQbYD7qCKKaI4nbViLn5UpbLYhxoZq/1LT/SSt3pwdESp5l2fjgTkF9eTJVUOvqF9SQWAUvIgSjS6vMFuPEP63XH3XReeCZGSubqMl+X3EZjgyVhgYvT9uqrTWKlN3wj9qnApb00luCwgSrTDYZNDli97HhJFKg4POjaDFZdo5dAvQcknbCLFBmIJxEab/7Zp5rv9DLB6ys7p3hHmBLKGcySnDZNk0xm082Ly6cUVT/VLCj2I0iWfIuoJ2fFgwL+QBCm45mq/64TsIRHGwjEnQsY1xiFLLLRRVTynMeF9/LlCuJFr/w4Vy+P3Qj3wkXJ0FbjyvFdL/rfewd9VuvtxxE2tn5bWUztfONZlMu2GuaA3Y1rJrcXuPJve3skPv7JypiDu2s4Agce5+5WeqDE0aTIditcX7APgJCZTQ/vxf0k9dXmnqPDl/N8pjR01XvTmWBQeCDiCM5x4OZjYcXTCGEyYlk3wnv8NBMf5pdJmCjeKyW2w14dJetQypPA39Tru9jgm1KXaHTIgsCSgklJ9Vk/wgriwgsAojax8YbN1TZidAjoUh8Ac4tT2m6nmShwz6ysqi8azfP+5NDUXEckBgQSDX1yEehq8RxCKQao3CTTRUfSsY+wD8NzI2G5s+nRm9H3EhD/WAkw9iQ8T3jwyI1kBdNq5i/1c6ugezwsGufNhj7UBOSr1CUe8/2suWSO9tqpt0Z4vmQDXRVoQUNB0k9NOCSBy+dkJqh9dwY7ZAcXNojbj6YKApgLG7BKVQDcfSZ6v9A8ro9TwXnDxvmfI6bO+aP9FZLkQoTnj1aPPzWlsvoGFcljsscSrAlY9pAKDgWebLQPVkt70MmxTvuSmcCyDsNP1QDwWd8dlRo9CQRoS2niNGbc0UCFNTlDna/1OMJE09CUkhPKkh5STNWl7E4eCj46GrscG/SmLXtU5c/b+W40eWoxaIs+/VUyl1bCg3Z2LVJfQZw6d/DvId4zZAvrGOU5gb8x9uEeS0Oq1onqf1cDMohNyT7uqAGUVSoFHwWbnTEZL2LZNTG6aJLSxO4ZKC1PU7+bSutyrNsSPpHjnFwFL16FmsRthlTV1TVXEXlvIQoIRi8qtdK3WDR3f7SrhqPORkPHRZU71I/+HXOZu0XGyxmHW3vMvvgXkY1ny1XHZtLxW1dAm+SAYX4A39ElHBYiOYjnwGmtmoyWGPPXqCbmGg4xFN9hTMMp6Kbjf9pXdAewCLX5O96F/WLJPAlmWrGSMCCkX9uujw9YRJfTNJCEuW+XUhINwFfk7jyU6IU9OsorbGrzOsM6Y/pg2NPSjrkp5sWq4rBhA2GYbzlF+thyhGdjEbbcwAQvBOW4Gy6geMLyeAtusxphWmsAxSskdcTOiz/riP1Z913c/nrRGDvIaQUMdJKyRrWIBRnphXINILZq5fujs9zSVvVZ6Ehrc7fvuX3tS6UfJBet5rn1HTEKeymBtHtWJoI1NfsKNuezz32dvgbPgFaDW7rxYgBDpSXUHf+M7bvTYp23H6M+rWGAdaJOACTndp9DeI23UeDd1XVvYY3Y8tRrN0Qx5aBZ2OHbUKuc6nEfmo8Kb+sApFi8dH54xlAgXSu1hQC3oLXFdGio+oq8m8GYqDJK+/m1JW6SrhRq7jUt49FJ1HIqznskRoFwU5dMJFCE1MSTyRXJyaWRrgy02eScWkM3kfpge5IhEG7p75iWzBTnDPZ/OuJKNAn14U3Zh4dDm657nl2zScr/yivTEoYZeCwa+sjWNVsoGnexGjQYxFN8OZgxPl/+3M3bYt6ak6TW+VsQaz3OJyhyRrMcyN1Jyi0kZwQwZQtXrQfdIIX1oFmU1WH76Nu09zoqqufUgt4f7rRcr8ubokUZHVENLhGk3ewJAe9CQrC67mOLL4fKsSF652vRXXrF0q3sKiDu6J5DEwZmDqXFZvLS3gZ+TtqnjYmSY8vywgcifDJSVv/o8wb8+7/z48+YdIs3u58ycVv7/FoIMiHQ1cvrww3WiniO9FbZQYAcl/Pxg+xtqBmHrnwgpL71TPdE1ljPiSMzFAN/VcO01SfNavkOKu2jqb+5qqgxd30317x4cRn9auErtsjCYeiocrketwaDUly/Eyz4nlQ552dre+5ndMZuO+4PTLRKCYnLvRZM0z7K1v6HTXZLz+nO8kTz3rTM8a51PVobVfgltELsPzAOEoUr1+dGtzGoOzuv7tnwsUxxyg/0K1+W0uU7aBGzXxcn9Cqb2buxduKOPbuJu0KjMXLh5mZgfLNyGOb6L1Us//yCvlbG9d69UfcTThJh0ydwXtdDAwkJtGS30Sdyhb+2dStqVoYHReSVzh5o1Bm/HWaO8gag0y7a/eWagBUQNHKbhHN6bK7ki7xx/zofuNTmVQpKbl1bKUPaKO9p1p3c/FZzAHxa49WqqDtKgA8V6YaGR89PkWA1rPGFkrZsdRVcMc5zSZbBp8mdKPLtaJCgg50Rmehiy9CLjqmacRTYFqkB7BMldLJ6FQ/S1uVyAIb1EVBd3Fh+Ldfe9vGc12osKm+abRxw7niDD70o4jLlTuaPA31CoJSCgRBRMxoa9SBGgF+VMxppvv2nLmbkhYrk5rftlLBeJazAlCWvtCj6xa9IEkF7OrmDYdGUs9ldlH2MoGRKAwLp0u9ST5rOj4e2GjXdTNo0voRh3Aco3loXg7bWZte4z84wV+x5lekrIaCE1AolWFpLYDbYSvYMv6LllzzV5kQYoXYDI9ZjfohWQcpwXI8GPlGc0swaFXY/aEWYqyjhijCBOXceiRZhC1JvvCJKLNyyELcp1HE6qAEC1wzS7lemcYmdLPoBpxHIZTwo9nw7/8ROuNNEeEc8n6TqSXa+AxSmCd13hqVY4LtqK4pHROmKFTMAKZjOzXijA4RuzgNNX76oQKPLtmdWrQTORSb5vTHrQ1A5/hdspNOUvJroXOQTEjVhfutzV4W9eh07QCMeZRVIXZnm27OuOY558vpzzqIMW3j69rQuhJrqnFQk6aCI5WLO+sQ4orBV59KDr41bmOirDqYTqNlCKSKadz2/6J3nc5LmGAWGXVGO7RjZm37A7fRNX8l4Aeo9Ei7hD2NS44jmxmaRbpCN+Vs6Y+aS5bH38/9QVwMAVqQD7WiMJyG3SrAjAQAdvhceen8MBVU9yvu5BAi+U9zvB7kY4W38W0XBMojYh8MGmZvRYPzONX5MyUfW50T2od1+WfSJyT0GVPmRFLxSdQxh3coquDw2uRVGgidRynN1lT8gsikkDixsUsjQBHqZemqnBbALSAr/Id9KxFasF7h+4/ltOWYlcrT9mjrBC46tLkssEfKQt8yaRGMWERkcSWG8NvBX61sCB8b6SG78lzn7G6sIghg/DyAIo1enowSJkpV/mmhCFlHTlHxrRw424+9+w04rBiWi20I2/x9oJWT3NBlUPm9bgmXkU0HhQoamVkJGQX7NIw6nw42z81NvPFG9vjFxQSXaFmDJlY6O9uqv0dRU/fM5geLCZvvsj5QY5hQYPM4mrgB8o7CZwtL8HXSzwxY1zPXzvBYciznETxCyF7rX7Hvgla1XCTXJtwU1Q69ZW6rnzuz4DMQ+t774DoTQ8CbRLAs0yc40hmwGVho0FMgyzVHY1O7zC3mwjTYhSVtgVVh7RsBXcwWrZm5kFXIs/htV8SQzISdkELyY+EelU9hbcazNTipeqNniFJeJAVRa9Cfh+yl3GRDG0Mjg21EAiDDPvnSBUKNVXGxP/yWIdsPyLX9I21GIK0x0GL6299Pcl1Pxn5tHdktpHKoaCq7Ls20D/laTAu21i0mloHjCM4DB12WmUxRPbroff9yYEsBOPNo8qeOy5OlSlYVMCpukG25ewdNpoc+ZYBcesFqsavNYsDwHCS394gyXZ5+UyQ7eXL12XrVcV0NiqkeHdbZkvhQUuHsh5PuzLKR3jKEc3uOUjtS1K+AiAk7ZnH8rUslfgRjn+Jum2UowGGLyWF/oeMDkukSvyoZab2iM1wnloHXZaJ9ZsShogJ0v89kszMqu8CPPVllwcwhrkeRMzhXyiQnKV7xcsqyLjUoRCCSJNjHDxb/IhsOhhT9ylq8w2B3J+mPWw2XsCzzGzxmaTSdQRtBsqzQ7YyS6238dZrkh2FpMx2aO0uRW/KKVyjdTJACK6jswHuhKeb1+ws42fE3uL8qYwQj6nZwxaFQmTrYLMk04PcIyFd1a3Um5oCG4Fvq5vZfqJ853AXBnSOnmAm1zBvNtthH6z7I7q/GU/Fzzv7ybx4TXSLMobNu07wkF8B7GuunMdpJc03N+4EfZ/IAE+LUjw57k05I91fdyc/2dfiIMaIy7SW8R0rAqZkAebDdM8HZvjBCjlwBEVTXgdPkMRVVnQG0oOZgxnzaXlrIzh/sPKKe1zpmf4tT5UxMkxI+qnrnppWkR5knVmzZ6KGomTA4XNMnzjaO8VLuvSjsiCcMs2KkIA7haDL7alpY/5uI4uocYmUBbbsl5sg69mKg6MhUVPiWGWcdkZBW6mn8nL9Ix9nJrMEQbhEVpSYSwcE68UiBN4lA8jc5W9STm/PQ2hm2V+PpO5J+oNA4bIrRWx2mGqJdNcvw20XqH88Xz3AmbA1zrRSbj/XnxUMczMzmTEYuhTLXD4W1oMBB6oqgLYmBHbq+M5xYAUAGWaRLedN7KhjYQ6jfG0DxeWjic6ERLLx1KXGYxE5tHW3D1boO/SgMcw6s61BLK2xVZM5jj16qIU8tgzUGvn0MDiTjeBxmPyDb5s2/QzoKcGHQ4zctJ7a57WV0LOQXcS9NQ/ze/Wc8HS2WdsmlAdED8lp88E74pU+IfD0m6NrMKS42mZ5kXCb5Fa52Jt6x5AsNQLMtjRyu/anHiLkcZJuCrH+HKno7h6BrJiacFHMnUpPdyaBnjrLMFYCplYMGBfYPh34m1BFq96lyyVQhIkcP2b898d0blas0VZnltiAtcGKlEWKHBMn5U0zG88fqYHkT+N3swJEIB3J+KDgyqJX8N2Bk3xi7EOle/rApuPmsaukHZ/huxZ+K8ZHZNQSZU6lC6BARlgzRhacXkiBcFuytmmYQzrT6Hai/8a0Vqn21dSd+pkNVU/N6nkjusBqscYIrt8ZberY/vDd2QYryEpgekRS047GfZzZD/w17FNJjcXXlYeBumSQCXrKdX6sRUy3MkJv57wUFoExxxz9U+4ajQkf7f2+LpTgFs+/jaiTcr+3PthQaTcDk3TTA0C9rhy5Fe+VzgntiGuckCtXbGKlohezP2/wjqv+Lu2j4tkaID2iPbk37/5ZLobZVlS3tcD6s2TnUkCiwLq0XC9OgT6zFnb9tXo8PFVqIUcTbFZduKh37ckLZols8hIMcmevQGXWcCgiJVVj1DSyQn5XNQeOmfLpt13t3qMX2fRZeabShdqt2N0JtztJQkW+OFWBgbzHH4Y+ckzMlzPihew2lmBHOB34gDptUcKB0qK1YDNZSHI2GF+Soz+A/qYADeiBrAurD0mRRCegZumxMepMYHNMgjerPvBcmFH1zqJVcCiXZkYArtr3qBtObD7DZ1Tr67gFsuRWs7sx0/hfYQsWTJ/CyQhlHhGQ02NYFCHYuC/fdOyoI0pzUoqss4LMIQYpbeHCvX2pBp0YeTS/hZrRd2PFCFv/aqCXxjOSnLo/iMBCuK/Zkuk+Geb/v8Yl3sFTyLdvFfWfGH6hxc8IODp4ZC1qjOyd3SQLyGztmT9yy9LXJm2aLwXnoAkNSphwrcrDjnZWRETelV5XOrUHiRxxUtivr+HvDj6jWYIyPP2ifh/sY09xxgoqeMILimDHvFP5kMFeEf4b88qOYLuLKi0FRHLCjjDyF2wNS0iL5VrsweyZqw4LE54PslePwvZetAeuuanZmj1cLIYVmIlc0PUof6o06wvzJD6yAS0nSmvyetX0Yjs5pMnBokCZt8czUhJaN2ZGYbuwGZNz0G77AzW1Jyqcni2aWNcfyS6fdPweSV1u7k6n/W6IYCZcBeNs6yOLo7QZK5Sw8jxlcVa/jdI1yDmKje6CNCzonxv/85O12PCtJlzLY4GIYdiMcp3es1ruBjjhMQ5zJw3WKep4ZK3j5zrnXo+8Z+hWekHkT6mU1R1yg5BXEDx+ib/f4I0Ti6CSGP6remx5pbnPbgf5odyYUx/7DW2rVL8EW5s4tDjTPWCkCJedoL3slm7luZXL0obWFOGWIC9xPciy5161detxmLeThv4fF45s3avgo2ynNDq6JUEAJX7nJ/smvnMRmqv4b6KcmS9ym7ucy8bXdwScEqgGNfMkR9/Dgkc/+fC6Vbp4c0i3hbjqTY3AoDui+sHvJd0oh2c6eIwC4kgvLJcxbxCU5uFfgBsn/wXVLiMaSoM51ZBuwYUqx25GZ/2O1TSwscMC+MO0yiSisJc0iwDuS4iQqMhada1Vf8HVyHvUH1HJgs4YoY7VTaX+KRdPKh+mrJJgNMDVw4o8psAjLGKQkgpw+9BXx9ofz1iWcT+2eyyHkMCgzxtPL08/Z5PmoxtdB9OuaoSwx4ui3EhL64uzc5haBVLMRJJXERLB48kMc3PWmBru2jiBnjU8t6mpTY+WAZikmTATxxsBhf29xmfsvb0oC+FZdeleMSlmnWacexAip73QDUG8tn3aRRhhMczLXSKFntUWSXI3+l1hydQNT7YTQYthSwzfW7LL/7qHYw3PzUMtzRXLf+4Wx5jQGCChdscowj9axIbHwN+re5NA+bhKWqH+SAgWWtQ2pkBqTJTZ0V6KTwuLOjNyVP2ZrEG/O69dqOpKEeqD9StXynrTYjCaHx9QnuCr+skPQjFsGoWRUaUHGoFBQptVlyTyW3Af+A9fDaRtxw5ap2tlvVnJWxZAb/dU0eIxr8NSf4dG6CSqN6I8YfbmxPZjGQb1pdurgXTx1XwQGiu6iHxNPeRzWwa6VTZn9h1HeAPzlcNbwfJ80/gLU+oXieJxspgepeQdff5kKvlQHr/xS9tj6I/drtNjrkZ9X1WHiFuCI8+fbD6LLstGpvV0sXiaG2bA02i3zxD/+1FHCiTSL5BLqJI4UD4mF9ShokHyDFGOubiD8KbUvty2TkS7lTzX/QwabdSVEkKcpu2z88KAYVUtJPKB686udzmlqjbepY8APksH+cg9HiPPM+2MTKzPt2OZDmA3WkR6UvCyCT96TU2cv9TfTVt1UoFYZyPFnNX5JQfd4fxcDXFBOXQAmKZMcfJHlEHisI8njZ63jlTC4LVv9tJBfYOO0L8g/Zb6BBGL+Bj6ML8wCDVp2MxMGMNmehMQVP6sY5LBhr0R2qeDB08hNrtrPfdsJSWXXnjnCIujC0hcEkdWJsEm61dvO5zYemB56kUvOX6FIxJtxXPdxt7kHVrtL/kmdtgRhgKFX0UZ4or+agCpC+Ql5L0pkyBk2AeRGbtjsuE2FwA9krbcCojqKmW07NEGau76uKfQsMFoBi1ewuSqi/PtK9E/Ii3+IrlCUh+pXGEXSXk302Im545nl1/C643jGlfz66wh/00UJIkGQWkL8eYlmUNtEuHf63NFLhE1MH5wk2BNwo1bULUYQ8iu+NQTTUszByPDJD3GocaTBNHYx3eBfIQWCtmiRfd5jBPK1Al537sVspaaEQ/U5MEcBDwBG0UNivUYG4zGnUQ8TR1hFQzDHjhXZLL2I2zgqOkaNDj1HseIp/+Spa/xyQiStmZznuitvVyUSJBwfIpknf4UHVLl3549txRcK6dGF4VI8qE4YZBlEzcHVgtqnUTcIDWbmAaG49L/EPs60LaRGTf15869S89lzTo556OtSm27z4fDm3vCOkhp7gMtbMpAH8LPJtwa1PA5e45ahzEPznvBbDfDtcmW0S27YjZ3e6i1wmbJAhRTU5MHRv02qa29ZhHEJdTraJXFNa496vGHs8EaMmKxLcWxshrEB1nsqDaO9Ud97/7rpxb7hU3OLEjkUSlEtaOLatLLS6Loy0+5ZEbUGCEWwK5W/1KzkChoz4lEowOlycSs+s48bQxhiHfLH5+479SlTfIJaoBEJMbydefpexGEvTULzadR7k71+d4lUQzleHqVIThVhWXPzxUL1oOZb9nHimJjIaxa9OTvUO8QUSpayhRA74LxzMJYoJgu3BD95Su2yuVUfudaDktTb28MMngFJOoJZGKTbTl/g4lNXIICLvaunmnh48R8OOnD8HxWFsVKsVX/6ZC6Q1N6psw+JEvLiu+0PKJ5Thi0o9Y6PwW3MV0K+slOu8xklu6Na+UclZwJAZSFgZiqH1W7Yy0YMvotpRXyc5ks+kvWHsxJDqFs/uYYUHQFdm8cdYjTUYAc2CJdSAdapq+YNzzz7sqiykI/psTdIHWKrToG6ymi1thq9Pw/Ee41lOtWTtA8p4xXM4j1zu5b/vUHArfKVfYKc/ebrWzMnT+UXiiNhbr75G0aoMZn4ur5RM/dmO/3V4WV2HpOE6XVr3jnQtNVpGY7k1fL3chblR4Q5Gh5ki25o89rZNRSWjwE4JG1LNM9p7aFUQebecqyLKbIydUncw1SV8wwODC8vCC+7nEy+Z93BQRZXyWLC1WmjIuDF8YQhwOBi9GAmAjAoOPVsLkwGwXdHW9YN0zUOtzDo0upOEu3UPlinjvb8n5UKbHKnBPGA+HBB3fh/mrOkM5KihQ/5eEGO4G2cU6SzLddhxYDducB+ttMvNLqMQAEtmDXNGwdFiBPEDvDYPDfchzC6OJTneiskUZpFafodTKVY08KSayDYnh2SpZujSuOozyoaKzuMAzMxnJADt8jOV1dnVLFNEbdQS+4W4zCUTbGZC7eOaYaQlQ3qSM70za0XxRG4Ze8tN4MQAiy4oKEC+c7Em2YeqF2vkJGUnuWwTxPj+DnXkbvS2sS3rKPLoQ1q5TismW3PL8sttEau1Sc2XVAhnJZuZo459ZPsLziCxwZ6NYeDulVPB78d/QU4o/PXG+dXS0w2PJUcYg9PNPVi6JL0fNQoNmKpnJyrV/rkQs/REdeipGLIwLrDqK/qIr3FQTdrrBBiMT1f1wvN/O/nz55uyEYh/6RUpiomhztkRfZyPxB7W/szgorKOagcIpdKO/U99B/gxXb/zRk9q8wtCdJr+xJD3vkHczkjmLGJISWbOra7Oqm2slBjg8ckVoUTOkK2ij10gGUkFydyuZkzS/7Yn5CuDduQgTLKGkzB5oRUEanyFEkuDJqoPkYtIJNVOr5JYHRWUDjCn4iPuvVl37fK5Pwq7PKNiXn8HfKFnjnboYZzyFcCiDFONOdKYd4XCEjqHiN8BUg04mbJKxUwM5NnNnl9tSlMlqAD36UjIvKDo2XW9IrCmRbRytbShwJPRM2QiLEPNdeX67tfFrLYxat9gI/NsVbM2yI93v85EFxF6aWl5S4NPtxjhvvfAnPPVLfffgYVJRcXXjuliI7AzA3A0P0YXwduy2nTOu+JHEA/uvKhNKhjVKwzWDgmrhTI9PuHMMQwTHSoFjdakM6Wh76CX70rkwynG3+wREhfWkcjHpWd9weiNOX3BR/gShrjITC8rHPnNk0Y/PFi2v7p63n9XgT0wJY+7G125YA64FV08YXpQiWMCC+/Puv3gNy368Z7GOdG4LICy0LHy3FThu2Q= \ No newline at end of file diff --git a/magent_test_01.fig b/magent_test_01.fig new file mode 100644 index 0000000..2d3322c Binary files /dev/null and b/magent_test_01.fig differ diff --git a/readme.txt b/readme.txt new file mode 100644 index 0000000..bbc71df --- /dev/null +++ b/readme.txt @@ -0,0 +1,58 @@ +//已完成 +1、IO口调试,定时器定时,串口收发数据; +2、电机的启动与停止,自动找寻始终点; +3、电机点动运行,每次点动结束发送数据至串口,点动距离可自由调节(单位:毫米); +4、电机由起始点移动至结束点,移动过程可自由调节步长(单位:毫米)与每一步的停滞时间(单位:毫秒),数据在停滞时间内发送至串口,到达结束点停留一段时间后自动回到起始点。停留时间可设定(单位:秒); +5、电机在起始点与结束点之间循环移动,移动过程可自由调节步长(单位:毫米)与每一步的停滞时间(单位:毫秒),数据在停滞时间内发送至串口; +6、以光栅信号确定测量始终点,只有当磁条通过光栅时装置才会反馈测量值。 +7、添加了角行程磁条测试逻辑,旋转台减速比为1:90,测试方案与直行程基本相同 +8、添加了起始位、结束位、测量中和无状态四种位置状态显示 + +//使用说明 + 在主函数中,我们使用函数Deal_Uart_Data_For_Module(void)来分析处理接收到的数据,使用函数Deal_Motor(void)来控制电机,使用函数ADC_Multichannel()来采集ADC数据。 + 电机启动需要使用motor_start(void)和motor_mov(unsigned int speed)两个函数,前者配置引脚,后者启动脉冲,参数speed可控制脉冲频率;电机关闭可使用motor_stop(void)函数。 + 函数FWD(void)和REV(void)用于改变电机转动方向,若要判断磁条当前位置,需要使用函数motor_seat(void),初始化磁条位置可使用mov_begin(viod)或mov_end(void)让磁条移动到起始位或结束位。 + void mov_loop1(void)、void mov_loop1_ang(void)、void mov_loop2(void)、void mov_loop2_ang(void)、void mov_step(void)、void mov_step_ang(void)控制电机运行模式。 + 串口接收数据需要使用receive_ttl_data(uint8_t rx_data)函数,发送数据需要使用send_set_resp(unsigned int OrderNum, unsigned int addr, unsigned char Num, unsigned char sData[])函数。 + +//协议 +PC->主板 + SOF: 1个字节 0x05 起始字节 + Len: 2个字节 长度 + Fou_adr: 2个字节 源地址 + Com_adr: 2个字节 目标地址,0ff为广播地址 + Cmd16: 2个字节 命令字 + Request-data: N个字节 数据 + XOR: 2个字节 校验 + END: 1个字节 0x1B 结束字节 +数据部分 + 测量功能: 00 直行程 01 角行程 + 控制电机运行: 00 停止 01 运行 02 运行到起始位 03 运行到结束位 + 运行模式: 00 点动(方案三) 01 连续(方案一) 02 连续(方案二) + 电机运行多少圈为一个步长; 00 00 (65535)半毫米 + 电机运行间隔时长: 00 00 (65535)毫秒(数据反馈时间) + 到“结束点”后,停止时间 00 00 (65535)秒 +例:05 00 14 00 A1 00 B1 F0 01 00 01 01 00 01 03 E8 00 10 CD 40 1B//方案一 + +主板->PC + SOF: 1个字节 0x05 起始字节 + Len: 2个字节 长度 + Fou_adr: 2个字节 源地址 + Com_adr: 2个字节 目标地址,0ff为广播地址 + Cmd16: 2个字节 命令字 + Request-data: N个字节 数据 + XOR: 2个字节 校验 + END: 1个字节 0x1B 结束字节 +数据部分 + 测量功能: 00 直行程 01 角行程 + 控制电机运行: 00 停止 01 运行 02 运行到起始位 03 运行到结束位 + 运行模式: 00 点动(方案三) 01 连续(方案一) 02 连续(方案二) + 到位开关状态: 00 无状态 01 起始位 02 结束位 03 正在通过光栅 + 采样点压; 00 00 (65535)毫伏 + 激光电压: 00 00 (65535)毫伏 + 磁条长度: 00 00 (65535)毫米 +例:05 00 14 00 A1 00 B1 F0 01 00 01 01 03 07 03 00 00 00 10 CD 40 1B + +//直行程电机转动一圈,磁条水平位移为5mm; +//角行程电机转动一圈,磁条旋转4°; +