📄 mcu.h
字号:
#define LED PTC_PTC4 //定义工作指示灯
#define BAT_EN PTC_PTC5 //LM2576-5V使能(0有效)
#define RST_6606 PTC_PTC6 //6606复位引脚
#define buzz_en PTB_PTB0 //蜂鸣器
#define BACK_LIGHT PTD_PTD5 //背光
#define back_light_on PTD_PTD5=1 //开背光
#define back_light_off PTD_PTD5=0 //关背光
unsigned char LED_count=0; //系统工作指示灯计数器
unsigned long last_sub; //里程最近,上一次的数据
typedef union {
byte Byte;
struct {
byte BIT0 :1;
byte BIT1 :1;
byte BIT2 :1;
byte BIT3 :1;
byte BIT4 :1;
byte BIT5 :1;
byte BIT6 :1;
byte BIT7 :1;
}Bit;
}sys_data_type;
sys_data_type gz60_flags;
#define gz60_sleep_flag gz60_flags.Bit.BIT0
#define first_sleep_flag gz60_flags.Bit.BIT1
#define first_wakeup_flag gz60_flags.Bit.BIT2
//#define can_wakeup_flag gz60_flags.Bit.BIT3
#define init_at24_flag gz60_flags.Bit.BIT4
#define comp_motor_flag gz60_flags.Bit.BIT5
////////////////////////////////////////////////
//***************配置函数初始化***************//
static void init_gz60(void)
{
// CONFIG2设置
CONFIG2=0x0d;
//CONFIG2_SCIBDSRC=1; //SCI时钟源为内部总线时钟
//CONFIG2_OSCENINSTOP=0; //STOP模式下OSC不继续工作
//CONFIG2_TBMCLKSEL=1; //定时器时钟源为内部总线时钟
//CONFIG2_MSCANEN=1; //使能MSCAN
//CONFIG2_MCLK0=0; //PTD0作为MCLK输出
//CONFIG2_MCLK1=0; //MCLK1 MCLK0
//0 0 未使用
//0 1 输出频率为时钟频率
//1 0 输出频率为时钟频率2分频
//1 1 输出频率为时钟频率4分频
//CONFIG2_MCLKSEL=0; //MCLK时钟源为总线时钟(1、晶振,0、总线)
//CONFIG1 配置
//CONFIG1 =0x4B; //禁止看门狗
CONFIG1=0x4A; //允许看门狗
//CONFIG1_COPD=1; //禁止看门狗
//CONFIG1_COPD=0; //允许看门狗
//CONFIG1_STOP=1; //允许执行STOP指令
//CONFIG1_SSREC=0; //退出STOP的周期为32*CGMXCLK
//CONFIG1_LVI5OR3=1; //低电压复位模块电源为5V
//CONFIG1_LVIPWRD=0; //允许低电压监视
//CONFIG1_LVIRSTD=0; //允许低电压复位
//CONFIG1_LVISTOP=1; //STOP模式下使能低电压复位
//CONFIG1_COPRS=0; //看门狗溢出周期为2^18-2^4
}
//***************SPI初始化***************//
static void init_spi(void){
/* SPCR=0x2a;
SPTIE=0;//禁止SPI发送中断
SPE=1; //使能SPI
SPWOM=0;//普通模式输出/非线或
CPHA=1;//数据前对齐
CPOL=0;//时钟极性为上升沿有效
SPMSTR=1;//使能为主机方式
DMAS=0;//禁止DMA方式
SPRIE=0;//禁止SPI接收中断
0010 1010 2A
SPSCR=0x04;
//SPR0=0;
//SPR1=0;1228.8KHz
//MODFEN=0;模式错误禁止
//SPTE=1;发送器空标志 /r
//MODF=0;模式错误标志 /r
//OVRF=0;溢出标志 /r
//ERRIE=0;错误中断使能位禁止
//SPRF=0;接收数据满标志初始化为0/r
//0000 1000
*/
SPCR_SPMSTR=1; //使能为主机方式
//SPCR_SPE=0; //禁止SPI
SPCR_CPHA=1; //数据前对齐
SPCR_CPOL=0; //时钟极性为上升沿有效
SPCR_SPTIE=0; //禁止SPI发送中断
SPCR_SPRIE=0; //禁止SPI接收中断
//SPCR_SPWOM=0; //非线或 1=设置SPSCK、MOSI和MISO脚为开漏输出 0为普通输出
SPCR_SPE=1; //使能SPI
//
SPSCR_MODFEN=0; //模式错误禁止
SPSCR_ERRIE=0; //错误中断禁止
SPSCR_SPR0=0;
SPSCR_SPR1=0; //busclk÷2=1000KHz
}
//***************CGM初始化***************//
void init_cgm(void){
//
PCTL_BCS=0; //por->pllon=1,选择CGMXCLK,便于关PLL设置PLL
asm(nop);asm(nop);asm(nop);
PCTL_PLLON=0; //关PLL,设置PLL
PCTL=0x2;
//PLLIE PLLF PLLON BCS PRE1 PRE0 VPR1 VPR0
//PRE:预定标系数 VPR:二次幂范围<->E 参见资料
PMS=0x08; //反馈分频比 12bits N
PMRS=0x70; //线性乘数<->L
PBWC=0x80; //带宽操作模式
//AUTO LOCK ACQ R R R R R
PCTL_PLLON=1; //开PLL
while(!PBWC_LOCK){} //等待频率锁定
PCTL_BCS=1; //选择PLL
asm(nop);asm(nop);asm(nop);asm(nop);asm(nop);
//__RESET_WATCHDOG();
}
//***************延时函数***************//
void delay(unsigned int i){
unsigned int j=0;
while(j<i){j++;}__RESET_WATCHDOG();
}
//
void delay_st(void){
__RESET_WATCHDOG();
}
//
void delay5ms(unsigned int i){
unsigned int j=0;
while(j<i){
j++;
delay(250);
}
}
//***************端口初始化***************//
static void init_port(void){
//方向寄存器
DDRA_DDRA0=1; //CCWCS
DDRA_DDRA1=1; //FCS
DDRA_DDRA2=1; //FQY2
DDRA_DDRA3=1; //CCWQY2
DDRA_DDRA4=1; //FQY1
DDRA_DDRA5=1; //CCWQY1
DDRA_DDRA6=1; //FZS
DDRA_DDRA7=1; //CCWZS
DDRB_DDRB0=1; //蜂鸣器输出/下载复用
// DDRB_DDRB1=1; //下载用
// DDRB_DDRB2=1; //电源AD转换输入口/AD2
// DDRB_DDRB3=1; //雨刮时间AD转换输入口/AD3
// DDRB_DDRB4=1; //下载用
DDRB_DDRB5=1; //74HC595
DDRB_DDRB6=1; //74HC595
DDRB_DDRB7=1; //74HC595
// DDRC_DDRC0=1; //CANTX
// DDRC_DDRC1=0; //CANRX
DDRC_DDRC2=1; //小液晶SCL
DDRC_DDRC3=1; //小液晶SDA
DDRC_DDRC4=1; //工作指示灯
DDRC_DDRC5=1; //LM2576-5V控制
DDRC_DDRC6=1; //RST_6606
DDRD_DDRD0=1; //MC33389片选
// DDRD_DDRD1=0; //MISO
// DDRD_DDRD2=1; //MOSI
// DDRD_DDRD3=1; //SPSCK
DDRD_DDRD4=1; //MC33993片选
DDRD_DDRD5=1; //背光
DDRD_DDRD6=1; //24C256 SCL
DDRD_DDRD7=1; //24C256 SDA
DDRE_DDRE0=1; //RS
DDRE_DDRE1=1; //RW
DDRE_DDRE2=1; //E
DDRE_DDRE3=1; //CSA
DDRE_DDRE4=1; //CSB
DDRE_DDRE5=1; //RST
DDRF_DDRF0=1; //FDY
DDRF_DDRF1=1; //CCWDY
DDRF_DDRF2=1; //FRY
DDRF_DDRF3=1; //CCWRY
DDRF_DDRF4=1; //FJY
DDRF_DDRF5=1; //CCWJY
DDRF_DDRF6=1; //FSW
DDRF_DDRF7=1; //CCWSW
// DDRG_DDRG0=1; //D0
// DDRG_DDRG1=1; //D1
// DDRG_DDRG2=1; //D2
// DDRG_DDRG3=1; //D3
// DDRG_DDRG4=1; //D4
// DDRG_DDRG5=1; //D5
// DDRG_DDRG6=1; //D6
// DDRG_DDRG7=1; //D7
//大LCD用
//内部上拉
//PTA作为键盘输入口内部自动上拉
/* PTAPUE_PTAPUE0=1; //
PTAPUE_PTAPUE1=1; //
PTAPUE_PTAPUE2=1; //
PTAPUE_PTAPUE3=1; //
PTAPUE_PTAPUE4=1; //
PTAPUE_PTAPUE5=1; //
PTAPUE_PTAPUE6=1; //
PTAPUE_PTAPUE7=1; //
//PTB无内部上拉
//PTC
PTCPUE_PTCPUE0=1; //
PTCPUE_PTCPUE1=1; //
PTCPUE_PTCPUE2=1; //
PTCPUE_PTCPUE3=1; //
PTCPUE_PTCPUE4=1; //
PTCPUE_PTCPUE5=1; //
PTCPUE_PTCPUE6=1; //
PTDPUE_PTDPUE0=1; //
PTDPUE_PTDPUE1=1; //
PTDPUE_PTDPUE2=1; //
PTDPUE_PTDPUE3=1; //
PTDPUE_PTDPUE4=1; //
PTDPUE_PTDPUE5=1; //
PTDPUE_PTDPUE6=1; //
PTDPUE_PTDPUE7=1; //
*/
}
//////////////////////////////
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -