平车主控板(运维板)
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 

287 lines
6.8 KiB

#include "bsp_config.h"
#include "../clib/bit.h"
#include "../cpu/c51_macro.h"
////////////////////////////////////////////////////////////////////////////
///@copyright Copyright (c) 2018, 传控科技 All rights reserved.
///-------------------------------------------------------------------------
/// @file bsp_func.c
/// @brief bsp @ fuctiong ; io复用选择等,和cpu型号息息相关
///-------------------------------------------------------------------------
/// @version 1.0
/// @author CC
/// @date 20180308
/// @note cc_AS_stc02
//////////////////////////////////////////////////////////////////////////////
struct _s_sysclk s_sysclk;
//// mclk out init 系统时钟输出配置,可以提供给其他外设作为时钟
void L0_MCLKO_init(void)
{
#if 10
BITN_1(P_SW2,EAXFR);// P_SW2 = 0x80;
///-----------------------------------------------------
// p107@stc8.pdf
BITS_CLR(CKSEL,0x03,BIT0);/// 00: 内部24M 以烧写器的配置为主 01 extern osc 10 extern input 11 intern 32kIRC
s_sysclk.m = 11059260;
#if 0 //fixme: 加入这一部分会影响波特率
CLKDIV = 0;///BITS_CLR(CLKDIV,0xff,BIT0);
BITS_SET(CLKDIV,(1-0),BIT0); /// SYSClk = MCLK/1
s_sysclk.clk = s_sysclk.m/1;
#endif
BITS_CLR(CKSEL,0xf,BIT4);
BITS_SET(CKSEL,5,BIT4);/// sytem out clock sysclk/2 =3
/// 0--disable 0001 sysclk/1 2=/2 4=/4 6=/8 8=/16 10=/32 12=/64 14=/128
///?? 4 5,2M 2 11m=2 波形添加了2v的直流分量
s_sysclk.out = s_sysclk.clk/2;
BITN_0(CKSEL,MCLKO_S);/// P5.4 SELECTED
CKSEL = 0x10;
BITN_0(P5M1,BITN4);BITN_0(P5M0,BITN4);
BITN_0(P5M1,BITN4);BITN_1(P5M0,BITN4);/// 01 推挽
/// BITN_1(CKSEL,MCLKO_S);/// P1.6 SELECTED
/// BITN_0(P1M1,BITN6);BITN_0(P1M0,BITN6);
///-----------------------------------------------------
//00 01 81 80
//10 01 81 80
//L0_uart0_uc(CKSEL);
//L0_uart0_uc(CLKDIV);
//L0_uart0_uc(IRC24MCR);
//L0_uart0_uc(EAXFR);
BITN_0(P_SW2,EAXFR);// P_SW2 = 0x80;
#else
BITN_1(P5M1,BITN4);BITN_0(P5M0,BITN4);
#endif
//while(1);
}
void L0_cLK_init(void)
{
BITN_1(P_SW2,EAXFR);// P_SW2 = 0x80;
///-----------------------------------------------------
// p107@stc8.pdf
BITS_CLR(CKSEL,0x03,BIT0);/// 00: 内部24M 以烧写器的配置为主 01 extern osc 10 extern input 11 intern 32kIRC
s_sysclk.m = 11059260;
#if 0 //fixme: 加入这一部分会影响波特率
CLKDIV = 0;///BITS_CLR(CLKDIV,0xff,BIT0);
BITS_SET(CLKDIV,(1-0),BIT0); /// SYSClk = MCLK/1
s_sysclk.clk = s_sysclk.m/1;
#endif
BITS_CLR(CKSEL,0xf,BIT4);
BITS_SET(CKSEL,4,BIT4);/// sytem out clock sysclk/2 =3
/// 0--disable 0001 sysclk/1 2=/2 4=/4 6=/8 8=/16 10=/32 12=/64 14=/128
///?? 4 5,2M 2 11m=2 波形添加了2v的直流分量
s_sysclk.out = s_sysclk.clk/2;
BITN_0(CKSEL,MCLKO_S);/// P5.4 SELECTED
BITN_0(P5M1,BITN4);BITN_0(P5M0,BITN4);
/// BITN_1(CKSEL,MCLKO_S);/// P1.6 SELECTED
/// BITN_0(P1M1,BITN6);BITN_0(P1M0,BITN6);
///-----------------------------------------------------
///-----------------------------------------------------
/// BITN_1(P_SW2,CMPO_S);//比较器选择输出使能 cmpo p69@stc8.pdf
BITN_0(P_SW2,EAXFR);// P_SW2 = 0x80;
//while(1);
}
void L0_led2_set(unsigned char onf)
{
if(onf)
{
BITN_0(P3M1,BITN4);BITN_0(P3M0,BITN4); ///P34 LED
D_P34_OFF();
}else
{
D_P34_ON();
BITN_1(P3M1,BITN4);BITN_0(P3M0,BITN4); ///高阻 P34 LED
}
}
void L0_pin_config(void)
{
//uart0
BITN_0(P_SW1 ,BITN7);//
BITN_0(P_SW1 ,BITN6);// rxd p3.0 txd p3.1
//BITN_0(P_SW1 ,BITN7);//
//BITN_1(P_SW1 ,BITN6);// rxd p3.6 txd p3.7
//uart2
BITN_0(P_SW2 ,BITN0);// rxd2 p1.0 txd2 p1.1
//BITN_1(P_SW2 ,BITN0);// rxd2 p4.0 txd2 p4.2
//uart3
P_SW2 = 0x02; // RXD3_2/P5.0, TXD3_2/P5.1
//uart4
BITN_1(P_SW2 ,BITN2);// rxd4 p5.2 txd4 p5.3
//BITN_0(P_SW2 ,BITN2);// rxd4 p0.2 txd4 p0.3
}
void L0_cpu_init(void)
{
L0_cLK_init();
/******************************
// fixme: accord to the pcb
P3.7 TXD1
P3.6 RXD1 vsys 使用时注意切换
P1 数据口
P36 VSYC 也可作为hsync int2
P35 RCLK
P5.4 MCLK0
P55 PWDN
P34 LED
*************************/
P1M0 = 0x00;
P1M1 = 0xff;
BITN_0(P3M1,BITN5);BITN_0(P3M0,BITN5); ///P35 RCLK
BITN_0(P5M1,BITN5);BITN_0(P5M0,BITN5); ///P55 PWDN
BITN_0(P3M1,BITN4);BITN_0(P3M0,BITN4); ///P34 LED
///普通应用
BITN_0(P3M1,BITN6);BITN_0(P3M0,BITN6); ///P36 hsync rxd
BITN_0(P1M1,BITN1);BITN_0(P1M0,BITN1);///P37 txd 需要和系统的txd切换 发送完了立即切回原来的txd
///P36 VSYC 也可作为hsync int2
}
//------------------------------串口协议配置 ------------------------------------
TS_Handle_PH3 s_uart0_rec;
TS_Handle_PH4 s_uart2_rec;
TS_Handle_PH3 s_uart3_rec;
TS_Handle_0d0a s_uart4_at_rec;
TS_Handle_PH3 s_uart4_tcp_rec;
void (*Lp0_uart0_fun)(unsigned char sbufreg);
void (*Lp0_uart2_fun)(unsigned char sbufreg);
void (*Lp0_uart3_fun)(unsigned char sbufreg);
void (*Lp0_uart4_fun)(unsigned char sbufreg);
//uart2
void L1_s2b_PH4_2(unsigned char sbufreg)
{
s_uart2_rec.reg = sbufreg;
L1_s2b_PH4(&s_uart2_rec);
}
//uart0
void L1_s2b_PH3_0(unsigned char sbufreg)
{
s_uart0_rec.reg = sbufreg;
L1_s2b_PH3(&s_uart0_rec);
}
//uart3
void L1_s2b_PH3_3(unsigned char sbufreg)
{
s_uart3_rec.reg = sbufreg;
L1_s2b_PH3(&s_uart3_rec);
}
//GM35协议
void L1_s2b_gm35(unsigned char sbufreg)
{
s_uart4_tcp_rec.reg = sbufreg;
L1_s2b_PH3(&s_uart4_tcp_rec);
#if 0
if(0 == s_uart4_tcp_rec.head)
{
s_uart4_at_rec.reg = sbufreg;
L1_s2b_0d0a(&s_uart4_at_rec);
}
else
{
s_uart4_at_rec.head = 0;
}
#endif
}
void L1_uart_tpc_config(void)
{
#if 1
//uart0 protocol setting...
s_uart0_rec.head = 0;
s_uart0_rec.ok = 0;
s_uart0_rec.head_0 = D_CMD_Filter1_ff;
s_uart0_rec.head_1 = D_CMD_Filter2_fe;
s_uart0_rec.sp = (U8*)&(s_uart0_rec.ts_ccmodbus);
#endif
//uart2 protocol setting...
s_uart2_rec.head = 0;
s_uart2_rec.ok = 0;
s_uart2_rec.num = 0;
//uart3 ...
s_uart3_rec.head = 0;
s_uart3_rec.ok = 0;
s_uart3_rec.head_0 = D_CMD_Filter1_ff;
s_uart3_rec.head_1 = D_CMD_Filter2_fe;
s_uart3_rec.sp = (U8*)&(s_uart3_rec.ts_ccmodbus);
//uart4
s_uart4_at_rec.head = 0;
s_uart4_at_rec.ok = 0;
s_uart4_at_rec.num = 0;
s_uart4_at_rec.setflag = FLAG_NONE;
//a9 +CIPRCV
s_uart4_tcp_rec.head = 0;
s_uart4_tcp_rec.ok = 0;
s_uart4_tcp_rec.head_0 = D_CMD_Filter1_ff;
s_uart4_tcp_rec.head_1 = D_CMD_Filter2_fe;
s_uart4_tcp_rec.sp = (U8*)&(s_uart4_tcp_rec.ts_ccmodbus);
Lp0_uart0_fun = L1_s2b_PH3_0;
Lp0_uart2_fun = L1_s2b_PH4_2;
Lp0_uart3_fun = L1_s2b_PH3_3;
Lp0_uart4_fun = L1_s2b_gm35;
}