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
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;
|
|
}
|
|
|
|
|