#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 ////////////////////////////////////////////////////////////////////////////// #include "../msp/uart0.h" //#include "../tpc/tpc_modbus.h" 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 } } ///L0_led2_setBITN4 void L0_uart0_change(unsigned char ch) { if(P3130 == ch) { BITN_0(P_SW1 ,BITN7);// BITN_0(P_SW1 ,BITN6);// rxd p3.0 txd p3.1 }else { BITN_0(P_SW1 ,BITN7);// BITN_1(P_SW1 ,BITN6);// rxd p3.6 txd p3.7 } ///if(P3736 == ch) } void L0_uart2_change(unsigned char ch) { if(P1110 == ch) { BITN_0(P_SW2 ,BITN0);// rxd2 p1.0 txd2 p1.1 }else { BITN_1(P_SW2 ,BITN0);// rxd2 p4.0 txd2 p4.2 } ///if(P3736 == ch) } void L0_uart4_change(unsigned char ch) { if(P5352 == ch) { BITN_1(P_SW2 ,BITN2);// rxd4 p5.2 txd4 p5.3 }else { 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_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_2(unsigned char sbufreg) { s_uart0_rec.reg = sbufreg; L1_s2b_PH3(&s_uart0_rec); } //GM35协议 void L1_s2b_gm35(unsigned char sbufreg) { s_uart4_tcp_rec.reg = sbufreg; L1_a9_PH3(&s_uart4_tcp_rec); 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; } } void L1_bsp_uart_config(void) { //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); //uart2 protocol setting... s_uart2_rec.head = 0; s_uart2_rec.ok = 0; s_uart2_rec.num = 0; //uart3 ... Lp0_uart3_fun = NULL; //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_2; Lp0_uart2_fun = L1_s2b_PH4_2; Lp0_uart4_fun = L1_s2b_gm35; }