Browse Source

修改eeprom读写函数

master
zhangsan 4 years ago
parent
commit
f812023d9c
  1. 5
      source/.vscode/settings.json
  2. 59
      source/app/common.c
  3. 14
      source/app/common.h
  4. 2
      source/app/main.c
  5. 428
      source/bsp/bsp_config.h
  6. 384
      source/bsp/bsp_config.h.1
  7. 0
      source/bsp/bsp_config0.h.1
  8. 156
      source/bsp/bsp_config_const.h
  9. 21
      source/clib/clib.c
  10. 4
      source/clib/clib.h
  11. 126
      source/msp/msp_eeprom.c
  12. 30
      source/msp/msp_eeprom.h

5
source/.vscode/settings.json

@ -0,0 +1,5 @@
{
"files.associations": {
"UART0.C": "cpp"
}
}

59
source/app/common.c

@ -14,6 +14,7 @@ struct ts_eeprom_enc eep_enc;
void L3_eeprom_read_param()
{
#if 0
U8 dlen = 0;
L0_Iap_Read_array(EEP_PARAM_ADDR, (U8*)&eep_param, 2 + EEPROM_PARAM_DATA_MAX + 2);
if(eep_param.filter == EEPROM_PARAM_FILTER)
@ -27,10 +28,18 @@ void L3_eeprom_read_param()
Lc_buf_copy_uc((U8*)&G.p,(U8*)eep_param.buf,sizeof(G.p));//防止dlen>sizeof(G.P)引起的内存错误
}
}
#endif
if(L1_eep_read_block(D_EEP_PARAM_IN_SECTOR, D_EEP_PARAM_IN_BLOCK, D_EEP_PARAM_BLOCK_SIZE, (U8*)&G.p, NULL) == 0)
{
//L0_uart0_sendstr("e2p read success");
return;
}
//L0_uart0_sendstr("e2p read failed");
}
void L3_eeprom_persist_param()
{
#if 0
U8 dlen = sizeof(G.p);
eep_param.filter = EEPROM_PARAM_FILTER;
eep_param.len = dlen + 2;
@ -41,8 +50,16 @@ void L3_eeprom_persist_param()
L0_Iap_Erase(EEP_PARAM_ADDR);
L0_Iap_Program_array(EEP_PARAM_ADDR, (U8*)&eep_param, 2 + dlen + 2);
#endif
if(L1_eep_write_block(D_EEP_PARAM_IN_SECTOR, D_EEP_PARAM_IN_BLOCK, D_EEP_PARAM_BLOCK_SIZE, (U8*)&G.p,sizeof(G.p),TRUE) == 0)
{
//L0_uart0_sendstr("e2p write success");
return;
}
//L0_uart0_sendstr("e2p write failed");
}
#if 0
int L3_mcu_id_ok(void)
{
U8 i = 0,crc[2];
@ -78,6 +95,48 @@ int L3_mcu_id_ok(void)
return 1;
}
#else
/**
*
* @brief: eeprom的D_EEP_ENC_IN_SECTORD_EEP_ENC_IN_BLOCK中提前存放了加密信息: enc_key, enc_val(enc_key+chipid计算所得)
* @param: void
* @return: 1 is ok , 0 is failed
*
*/
int L3_mcu_id_ok(void)
{
U8 i = 0;
//1. 获取eeprom中存储的enc信息
if(L1_eep_read_block(D_EEP_ENC_IN_SECTOR, D_EEP_ENC_IN_BLOCK, D_EEP_ENC_BLOCK_SIZE, (U8*)&eep_enc,NULL) == 1)
{
//L0_uart0_sendstr("e2p read enc failed");
return 0;
}
//L0_uart0_sendstr("e2p read enc success");
//2.获取MCU_ID
L0_id_get_rom(G.e.mcu_id);
//L0_uart0_sendArray(enc_info.mcu_id,MCU_ID_LEN);
//3.根据mcu_id和enc_key计算enc_val
//enc_key = ((U32)eep_enc.enc_key[0] << 24) | (eep_enc.enc_key[1] << 16) | (eep_enc.enc_key[2] << 8) |(eep_enc.enc_key[3] << 0);
Lc_encrypt_id1((U8*)G.e.mcu_enc_id, (U8*)G.e.mcu_id, eep_enc.enc_key, MCU_ID_LEN);
//4.判断enc_val是否一致
for(i=0;i<MCU_ID_KEY_LEN;i++)
{
if(G.e.mcu_enc_id[i] != eep_enc.enc_val[i])
{
return 0;
}
}
return 1;
}
#endif
void L3_reg_reset()
{
U8 i = 0;

14
source/app/common.h

@ -39,9 +39,15 @@ typedef struct ts_eeprom_enc
{
U8 enc_key[MCU_ID_KEY_LEN];
U8 enc_val[MCU_ID_LEN];
U8 crc[2];
//U8 crc[2];
}EEPROM_ENC;
typedef struct mcu_encrypt_info
{
U8 enc_key[MCU_ID_KEY_LEN];
U8 mcu_id[MCU_ID_LEN];
U8 mcu_enc_id[MCU_ID_LEN];
}McuEncryptInfo;
/**
*
@ -181,12 +187,6 @@ typedef struct global_param_changable
WeightStdization weight_std[D_weight_std_num];
}GlobalNeedPersistParam;
typedef struct mcu_encrypt_info
{
U8 enc_key[MCU_ID_KEY_LEN];
U8 mcu_id[MCU_ID_LEN];
U8 mcu_enc_id[MCU_ID_LEN];
}McuEncryptInfo;
typedef struct global_param
{

2
source/app/main.c

@ -99,7 +99,7 @@ void L0_main_init(void)
L1_tick_init();
L0_timer0_Init();
L0_timer1_Init();
L0_board_config()
L0_board_config();
//L0_I2C_INIT(1);
//L2_task_ALGO_init();
}

428
source/bsp/bsp_config.h

@ -1,7 +1,7 @@
////////////////////////////////////////////////////////////////////////////
///@copyright Copyright (c) 2017, 传控科技 All rights reserved.
///-------------------------------------------------------------------------
/// @file hard_config.h
/// @file bsp_config.h
/// @brief hard config include
/// @info FILE FOR HARDWARE SETUP AND SOFTWARE SETUP///FOR EXAMPLE: BAORD ,MCU,IDE
/// @info YOU CAN CHANGE OR ADD THE DEFINE IF YOU NEED
@ -9,48 +9,133 @@
/// @info bsp_CONFIG 为其他头文件的始祖 TYPE_BOARD_xx
///-------------------------------------------------------------------------
/// @version 1.1
/// @author CC
/// @author CC
/// @date 20180308
/// @note
//////////////////////////////////////////////////////////////////////////////
/// @version 5.1
/// @author CC
/// @author CC
/// @date 20200301
/// @note
//////////////////////////////////////////////////////////////////////////////
//////////////////////////////////////////////////////////////////////////
///存储器中的特殊参数
///全球唯一ID号 7FF9H~7FFFH BFF9H~BFFFH EFF9H~EFFFH FDF9H~FDFFH 7字节
///内部1.19V参考信号源 7FF7H~7FF8H BFF7H~BFF8H EFF7H~EFF8H FDF7H~FDF8H 毫伏(高字节在前)
///32K掉电唤醒定时器的频率 7FF5H~7FF6H BFF5H~BFF6H EFF5H~EFF6H FDF5H~FDF6H Hz (高字节在前)
///22.1184MHz的IRC参数(20M频段) 7FF4H BFF4H EFF4H FDF4H -
///24MHz的IRC参数(20M频段) 7FF3H BFF3H EFF3H FDF3H -
///20MHz的IRC参数(20M频段) 7FF2H BFF2H EFF2H FDF2H
///固件版本为7.3.12U
///以及后续版本有效
///27MHz的IRC参数(35M频段) 7FF1H BFF1H EFF1H FDF1H
///30MHz的IRC参数(35M频段) 7FF0H BFF0H EFF0H FDF0H
///33.1776MHz的IRC参数(35M频段) 7FEFH BFEFH EFEFH FDEFH
///35MHz的IRC参数(35M频段) 7FEEH BFEEH EFEEH FDEEH
///36.864MHz的IRC参数(35M频段) 7FEDH BFEDH EFEDH FDEDH
///保留 7FECH BFECH EFECH FDECH
///保留 7FEBH BFEBH EFEBH FDEBH
///20M频段的VRTRIM参数 7FEAH BFEAH EFEAH FDEAH
///35M频段的VRTRIM参数 7FE9H BFE9H EFE9H FDE9H
//////////////////////////////////////////////////////////////////////////
#ifndef _BSP_CONFIG_H
#define _BSP_CONFIG_H
#include <INTRINS.H>
#include "../bsp/bsp_config_const.h"
#include "../clib/type.h"
#include "../clib/bit.h"
#include "bsp_config0.h"
//STEP 1 >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>TYPE_UASER_BOARD SELECT
#define TYPE_UASER_BOARD TYPE_BOARD_WEIGH_0B
//STEP 1 <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<YPE_UASER_BOARD SELECT End
#define D_version_v 'L'
#if 0
#define D_leda_OFF(); D_P35_OFF();
#define D_leda_ON(); D_P35_ON();
#define D_leda_REV(); D_P35_REV();
#define D_ledb_OFF(); D_P34_OFF();
#define D_ledb_ON(); D_P34_ON();
#define D_ledb_REV(); D_P34_REV();
#else
#define D_leda_OFF(); ///D_P35_OFF();
#define D_leda_ON(); ///D_P35_ON();
#define D_leda_REV(); ///D_P35_REV();
#define D_ledb_OFF(); ///D_P34_OFF();
#define D_ledb_ON(); ///D_P34_ON();
#define D_ledb_REV(); ///D_P34_REV();
//STEP 2 >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>TYPE_UASER_BOARD CONFIG
#if(TYPE_UASER_BOARD == TYPE_BOARD_WEIGH_0B)
#include <intrins.h>
#include "../cpu/stc_stc8hxx.h"
#include "../cpu/stc_macro.h"
//基本配置(工作频率、时钟、看门狗、字节序)
#define TYPE_MCU TYPE_MCU_STC_8H
#define TYPE_IDE TYPE_IDE_KEIL
#define D_CPUfamily_type D_CPUfamily_8bits
#define D_sys_MainFre MainFre_11M
#define D_sys_Jiffies TYPE_JIFFIES_10MS
#define D_WDT_STATUS TYPE_WDT_DISABLE //如果配置为enable,请在bsp_config.c中设置wdt溢出时间
#define D_MCU_ENDIAN TYPE_MCU_BIGENDIAN
#define D_CODE_ENCRYPTION_TYPE TYPE_ENCRYPTION_ENABLE //是否代码加密
#define D_MCU_NAME "STC8H3K48S4"
//存储器特殊参数地址配置
#define D_MCU_SPEC_PARAM_CHIPID 0xBFF9
//...其他参数
//串口配置
#define D_uart0_BRT BRT_115200
#define D_uart0_SBIT SBIT_1
#define D_PIN_UART0 PIN_UART0_Rxd_30_Txd_31
#define D_uart2_BRT BRT_115200
#define D_uart3_BRT BRT_115200
#define D_uart4_BRT BRT_115200
//485配置
#define D_UART0_485_TYPE TYPE_485_SLAVER //UART0启用485
#define D_UART0_485_SLAVER_ID_BROADCAST 0xFF //485从机总是响应0xFF消息
#define D_UART0_485_SLAVER_ID 0x01 //板卡作为485从机 slaverId
#define D_UART0_485_TX() P55 = 1;
#define D_UART0_485_RX() P55 = 0;
#define D_UART2_485_TYPE TYPE_485_NONE //UART2不启用485
#define D_UART3_485_TYPE TYPE_485_NONE //UART2不启用485
#define D_UART4_485_TYPE TYPE_485_NONE //UART2不启用485
//MODBUS协议配置
#define D_MODBUS_ENABLE //MODBS启用开关,如果不使用modbus,可以注释掉本行
#define D_MODBUS_SPLIT_ENTRY L1_modbus_split //modbus切割函数,在tpc_modbus.c中实现,依据实际情况修改
#define D_MODBUS_REG_MAX_NUM 32 //每次最多读取/写入的寄存器数量,此处的数量要注意和 D_tp_handle_x_len 对应
//外设定义
#define LED0 P17 //D4
#define LED1 P54 //D4
//EEP存储地址定义
#define D_EEP_SECTOR_SIZE 0x200 //每个扇区0x200==512bytes
#define D_EEP_SECTOR_BLOCK_SIZE 0x80 //扇区中每个数据块0x40==64bytes,可选值[32,64,128]等
#define D_EEP_SECTOR_BLOCK_NUM (D_EEP_SECTOR_SIZE / D_EEP_PARAM_BLOCK_SIZE) //每个扇区数据块的数量
#define D_EEP_BLOCK_FILTER0 0xAA //扇区中每个数据块的Filter字段值
#define D_EEP_BLOCK_FILTER1 0x55
//EEP User Defined 参数区存储配置
#define D_EEP_PARAM_IN_SECTOR 1 //eeprom参数区扇区地址,从0开始
#define D_EEP_PARAM_IN_BLOCK 0 //eeprom参数区数据块地址,从0开始
#define D_EEP_PARAM_BLOCK_SIZE (D_EEP_SECTOR_BLOCK_SIZE) //参数区每个块大小,必须:D_EEP_PARAM_BLOCK_SIZE<=D_EEP_SECTOR_BLOCK_SIZE!!!,因为eeprom.h中是按照D_EEP_SECTOR_BLOCK_SIZE分配的buf
#define D_EEP_PARAM_BLOCK_NUM (D_EEP_SECTOR_SIZE / D_EEP_PARAM_BLOCK_SIZE) //每个扇区数据块的数量
//EEP 加密区存储配置
#if(D_CODE_ENCRYPTION_TYPE == TYPE_ENCRYPTION_ENABLE)
#define D_EEP_ENC_IN_SECTOR 0 //eeprom加密区扇区地址,从0开始
#define D_EEP_ENC_IN_BLOCK 0 //eeprom加密区数据块地址,从0开始
#define D_EEP_ENC_BLOCK_SIZE 0x20 //ENC_BLOCK_SIZE必须与加密程序中的ENC_BLOCK_SIZE匹配,此处不建议修改,如需修改,请同时修改加密程序
#endif
#elif
xxx
#endif
//STEP 2 <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<TYPE_UASER_BOARD CONFIG End
//Step3: >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>IRQ Config
#if ((TYPE_MCU & TYPE_MCU_VENDOR_MSK) == TYPE_MCU_VENDOR_STC)
#define D_SERVE_INT0 interrupt 0
#define D_SERVE_TIMER0 interrupt 1
#define D_SERVE_INT1 interrupt 2
@ -74,226 +159,69 @@
#define D_SERVE_PWM interrupt 22
#define D_SERVE_PWMFD interrupt 23
#define D_SERVE_I2C interrupt 24
#if 0
#define D_debug_sim
#endif
//#define D_iic_inspect
#define D_open_save_f
#define TYPE_UASER_BOARD ccSensor_WS_ps5ws //CC_SE_paper_main_m10_smt01.sch
//STEP 2 TYPE_UASER_BOARD CONFIG >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
//STEP 3 <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<IRQ Config End
#if(TYPE_UASER_BOARD == ccSensor_WS_ps5ws)///-------TYPE_UASER_BOARD----------------TYPE_UASER_BOARD----------
//2.0-5.5 8K 2kram 4k eeprom spi iic 2uart tssop20 stc8f2k08s2 1.2yuan
//2.0-5.5 16K 2kram 4k eeprom spi iic 2uart tssop20 stc8f2k16s2 1.4yuan
//1.7-5.5 8K 1kram 3k eeprom spi iic 2uart tssop20 stc8f2k16s2 1.1yuan
#define D_version_h 0x37
#define D_version_L 0x38
#define TYPE_MCU TYPE_MCU_STC
#define TYPE_IDE TYPE_IDE_KEIL
#include <stdio.h>
#include <string.h>
#include <intrins.h>
//#include "../cpu/STC_stc8a8k.h"
#include "../cpu/stc_stc8hxx.h"
#include "../cpu/stc_macro.h"
#define D_MCU_SPEC_PARAM_CHIPID 0xBFF9
#if 0//// 烧写配置
. IRC振荡器的频率: 22.128MHz
. : 35.575KHz
. 使
. P3.2P3.3
.
. I/O口
. ,
. : 2.20 V
. ,
. : 256
.
. ,,
. ,EEPROM区一并擦除
. ,485
.
. TXD脚直通输出RXD脚的电平
. ,TXD脚为强推挽输出
. ,P2.0
. : 1341 mV (: 1270~1410mV)
. : 2018113
. : F64181C6219784
: STC8F2K08S2
: 7.3.10U
. : 22.118MHz
. : 22.128MHz
. : 0.043%
!(2019-02-24 18:16:24)
: 2.0-5v 8kflash 2kram DPTR EEPROM 4K
SPI IIC T0-T4 5 tssop20 1.2
#endif
#define D_MCLKO_DIV2 2
#define D_MCLKO_DIV4 4
#define D_MCLKO_DIV8 6
#define D_MCLKO_DIV16 8
#define D_MCLKO_DIV32 10
#define D_MCLKO_DIV64 12
#define D_CPUfamily_type D_CPUfamily_8bits
#define D_uart0_BRT BRT_115200
#define D_uart0_SBIT SBIT_1
#ifdef D_debug115200
#if 0
#define L2_task_L0_uart0_uc(X) L0_uart0_uc(X)///
#define GC032a_L0_uart0_uc(x) L0_uart0_uc(x)//
#else
#define L2_task_L0_uart0_uc(X) L0_uart0_uc(X)//
#define GC032a_L0_uart0_uc(x) L0_uart0_uc(x)//
#endif
#else
#define L2_task_L0_uart0_uc(x) //L0_uart0_uc_debug(x)///////
#define L2_task_L0_uart0_uchex(x) // L0_uart0_uchex(x)/////
#define GC032a_L0_uart0_uc(x) //L0_uart0_uc_debug(x)/////
#define GC032a_L0_uart0_uchex(x) //L0_uart0_uchex(x)////
#define GC032a_L0_uart0_sendArray(x,Y) //L0_uart0_uchex(Y)//
#define GC032a_L0_uart0_us(x) //L0_uart0_us(x)*/
#endif
///#define D_sys_MainFre MainFre_16M2
#define D_sys_MainFre MainFre_11M
///#define D_sys_MainFre MainFre_22M
//STEP 4 >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> Cdelay CONFIG
#if(MainFre_5M == D_sys_MainFre)
#define D_Cdelay_200us 20
#define D_Cdelay_1us 1 ////while p21翻转时测定 500k 2us 一个指令
#elif(MainFre_22M == D_sys_MainFre)
#elif(MainFre_22M == D_sys_MainFre)
#define D_Cdelay_200us 20
#define D_Cdelay_1us 1 ////while p21翻转时测定 500k 2us 一个指令
#define D_Cdelay_1us 1 ////while p21翻转时测定 500k 2us 一个指令
#define L0_delay_1us() Lc_delay_nop(0) // 5个nop() 100ns 50个nop() 1us (20)=10us (2)1.5us
#define L0_delay_10us() Lc_delay_nop(4) // 5个nop() 100ns 50个nop() 1us (20)=10us (2)1.5us
#define L0_delay_40us() Lc_delay_nop(18) // 5个nop() 100ns 50个nop() 1us (20)=10us (2)1.5us
#elif(MainFre_27M == D_sys_MainFre)
#define D_Cdelay_200us 20
#define D_Cdelay_1us 1 ////while p21翻转时测定 500k 2us 一个指令
#else ///MainFre_11M
#define D_Cdelay_200us 20
#define D_Cdelay_1us 1 ////while p21翻转时测定 500k 2us 一个指令
#define L0_delay_1us() Lc_delay_nop(0) // 5个nop() 100ns 50个nop() 1us (20)=10us (2)1.5us
#define L0_delay_10us() Lc_delay_nop(4) // 5个nop() 100ns 50个nop() 1us (20)=10us (2)1.5us
#define L0_delay_40us() Lc_delay_nop(18) // 5个nop() 100ns 50个nop() 1us (20)=10us (2)1.5us
//xx
#endif//D_sys_MainFre)
//STEP 4 <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<Cdelay CONFIG End
#define D_Cdelay_200us 10
#define D_Cdelay_1us 10 ////while p21翻转时测定 500k 2us 一个指令
#define D_Cdelay_1ms 36// 500 14ms 360--10ms
#define D_Cdelay_5ms 180// 500 14ms 360--10ms
#define D_Cdelay_15ms 900
#define D_Cdelay_30ms 2400
#define L0_delay_1us() Lc_delay_nop(2) // 5个nop() 100ns 50个nop() 1us (20)=10us (2)1.5us
#define L0_delay_10us() Lc_delay_nop(20) // 5个nop() 100ns 50个nop() 1us (20)=10us (2)1.5us
// 0x01/#define D_MCLKO_set D_MCLKO_DIV16 //1.389MHz/800ns@MCU.22MHz-
#define D_MCLKO_set D_MCLKO_DIV8 ////2.778MHz/400ns@MCU.22MHz-
///#define D_MCLKO_set D_MCLKO_DIV4 ////5.556MHz/ @MCU.22MHz-
///#define D_MCLKO_set D_MCLKO_DIV2 ////5.556MHz/ @MCU.22MHz-
#define D_0xfa 0x33
//#define D_0xfa 0x11
/*******************
#define D_0xf7 0x01
#define D_0xf8 0x02
#define D_P00x46 0x26////pclk /////cccc201805 hs low polarity
#define D_P00x4c 0x00
#define D_P00x4d 0x04
#define D_P00x43 0x10 ///EABLE CrCb fixed en 02
#define D_P00x4a 0x83 ///div_gate+clk_en 82
//STEP 5 <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<Uart CONFIG
#define SERIAL_MAX_NUM 1
////fixme:和cpu的程序容量息息相关
#define D_UART_send_buf_max 16 /// 9600bps = 10000bps = 1000 Bps = 1Byte/ms
/// 19200bps = 20000bps = 2000Bps = 2Byte/ms = 1Byte/0.5ms
/// 128Bytes = 128*0.5ms = 64ms
#define D_UART_send_buf2_max 8 //此处改动会影响L0_uartN_ulhex函数
//STEP 5 <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<Uart CONFIG End
#define D_P00xda 0xff /// Cr fixed
#define D_P00xdb 0xff /// Cb fixed
#define D_0xfa 0x22 //00000000000000
P0:0x4d Debug_mode3 8 0x04 RW
[7:4] test_image_fix_value
[3] fix_value_mode
[2] remove_ff_mode
[1] subsample extend opclk disable when SPI
[0] clk2x_bypass
*******************/
#elif(MainFre_27M == D_sys_MainFre)
//STEP 6 <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<Transmission Protocol Config
#define D_TPC_CCMODBUS_Filter0 0xFF
#define D_TPC_CCMODBUS_Filter1 0xFE
#define D_TPC_DEBUG_FX_fi 0xF0
#define D_TPC_DEBUG_FX_MASK 0x0F
#define D_TPC_HANDLER_X_LEN 32
#define D_Cdelay_200us 20
#define D_Cdelay_1us 1 ////while p21翻转时测定 500k 2us 一个指令
//STEP 6 <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<Transmission Protocol Config End
#else ///MainFre_11M
#define D_Cdelay_200us 20
#define D_Cdelay_1us 1
#define D_Cdelay_1ms 36//
#define D_Cdelay_5ms 180//
#define D_Cdelay_15ms 900
#define D_Cdelay_30ms 2400
#if 0
#define L0_delay_1us() Lc_delay_nop(5) // 5个nop() 100ns 50个nop() 1us (20)=10us (2)1.5us
#define L0_delay_10us() Lc_delay_nop(40) // 5个nop() 100ns 50个nop() 1us (20)=10us (2)1.5us
#define L0_delay_40us() Lc_delay_nop(150) // 5个nop() 100ns 50个nop() 1us (20)=10us (2)1.5us
#else
#define L0_delay_1us() Lc_delay_nop(0) // 5个nop() 100ns 50个nop() 1us (20)=10us (2)1.5us
#define L0_delay_10us() Lc_delay_nop(4) // 5个nop() 100ns 50个nop() 1us (20)=10us (2)1.5us //绀烘尝鍣ㄦ祴璇曠粨鏋?
#define L0_delay_40us() Lc_delay_nop(18) // 5个nop() 100ns 50个nop() 1us (20)=10us (2)1.5us
#endif
#endif//D_sys_MainFre)
/*******>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
1
12
AUXR &= 0xFB; //定时器2时钟为Fosc/12,即12T,
2 timer0 task使用
L1_tick_tick
3
///<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<****/
#define D_IO_LED1_OFF() D_P17_OFF()
#define D_IO_LED2_OFF() D_P54_OFF()
#define D_IO_485_RE_OFF() D_P55_OFF()
#define D_IO_485_DE_OFF() //D_P55_OFF()
#define D_IO_LED1_INIT() ///D_P35_INIT()
#define D_IO_LED2_INIT() ///D_P34_INIT()
#define D_IO_485_RE_INIT() ///D_P33_INIT()
#define D_IO_485_DE_INIT() ///D_P32_INIT()
#define D_IO_LED1_ON() D_P17_ON()
#define D_IO_LED2_ON() D_P54_ON()
#define D_IO_485_RE_ON() D_P55_ON()
#define D_IO_485_DE_ON() //D_P32_ON()
////////////////////////////////sim iic config
//根据sch的定义
#define L0_IIC_SIM_INIT() BITN_0(P3M1,5);BITN_0(P3M0,5);\
BITN_0(P3M1,4);BITN_0(P3M0,4);
///stc独有10 高阻
#define L0_IIC_SIM_close() BITN_1(P3M1,5);BITN_0(P3M0,5);\
BITN_1(P3M1,4);BITN_0(P3M0,4);
#define L0_board_config() D_stdIO_P1(BITN7);D_stdIO_P5(BITN4);\
D_stdIO_P1(BITN0);D_stdIO_P1(BITN1);\
@ -301,84 +229,8 @@ L1_tick_tick
D_stdIO_P3(BITN2);D_stdIO_P3(BITN3);\
D_stdIO_P3(BITN4);D_stdIO_P3(BITN5);\
D_stdIO_P3(BITN6);D_stdIO_P3(BITN7);
#if 10
#define L0_SDA_ON() D_P34_ON()
#define L0_SDA_OFF() D_P34_OFF()
#define L0_SDA_AT() D_P34_AT()
#define L0_SCL_ON() D_P35_ON()
#define L0_SCL_OFF() D_P35_OFF()
#else
#define L0_SDA_ON() //D_P34_ON()
#define L0_SDA_OFF() //D_P34_OFF()
#define L0_SDA_AT() //D_P34_AT()
#define L0_SCL_ON() //D_P35_ON()
#define L0_SCL_OFF() //D_P35_OFF()
#endif
#if(BRT_4800 == D_uart0_BRT)
#define D_txd4_wakeup() P31 = 1 // >750us
#define D_txd4_low() P31 = 0
////为适应433 模块的功耗问题
////debug的时候切记 此处会对串口造成影响 low有效的情况下其他的发送不会好使,除非事先wakeup
#else
#define D_txd4_wakeup() //P31 = 1 // >750us
#define D_txd4_low() //P31 = 0
#endif
#define DR_who_wakeup22 i2ctxd
///// DR: Define Register DRB:bit of Define Register
#define DR_isr_times SADDR
#define DR_who_wakeup SADEN
#define DRB_who_wakeup_timer0 BITN0
#define DRB_who_wakeup_action BITN1
#define DRB_who_wakeup_voice BITN2
#ifdef doc342343
BITN_1(DR_who_wakeup, DRB_who_wakeup_timer0);
BITN_0(DR_who_wakeup, DRB_who_wakeup_timer0);
if(BITN_G(DR_who_wakeup, DRB_who_wakeup_timer0))
{
}
#endif
#elif(TYPE_UASER_BOARD == TYPE_BOARD_TI26_MT01_M178)///-------TYPE_UASER_BOARD----------------TYPE_UASER_BOARD----------
#define TYPE_MCU TYPE_MCU_STC
#define TYPE_IDE TYPE_IDE_KEIL
#include <stdio.h>
#include <string.h>
#include <intrins.h>
//#include "../cpu/STC_stc8a8k.h"
#include "../cpu/stc_stc8hxx.h"
#define D_CPUfamily_type D_CPUfamily_8bits
#elif(TYPE_UASER_BOARD == TYPE_BOARD_SMMM_MB_VH032_0E)
#endif
#endif//_BSP_CONFIG_H
/*********************************end file*********************************************/

384
source/bsp/bsp_config.h.1

@ -0,0 +1,384 @@
////////////////////////////////////////////////////////////////////////////
///@copyright Copyright (c) 2017, 传控科技 All rights reserved.
///-------------------------------------------------------------------------
/// @file hard_config.h
/// @brief hard config include
/// @info FILE FOR HARDWARE SETUP AND SOFTWARE SETUP///FOR EXAMPLE: BAORD ,MCU,IDE
/// @info YOU CAN CHANGE OR ADD THE DEFINE IF YOU NEED
/// @info 整个嵌入式项目的入口 首先是确认电路板 然后确认cpu 芯片型号 然后确认编译器 之后是软件框架 最后是应用程序
/// @info bsp_CONFIG 为其他头文件的始祖 TYPE_BOARD_xx
///-------------------------------------------------------------------------
/// @version 1.1
/// @author CC
/// @date 20180308
/// @note
//////////////////////////////////////////////////////////////////////////////
/// @version 5.1
/// @author CC
/// @date 20200301
/// @note
//////////////////////////////////////////////////////////////////////////////
//////////////////////////////////////////////////////////////////////////
#ifndef _BSP_CONFIG_H
#define _BSP_CONFIG_H
#include <INTRINS.H>
#include "bsp_config0.h"
#define D_version_v 'L'
#if 0
#define D_leda_OFF(); D_P35_OFF();
#define D_leda_ON(); D_P35_ON();
#define D_leda_REV(); D_P35_REV();
#define D_ledb_OFF(); D_P34_OFF();
#define D_ledb_ON(); D_P34_ON();
#define D_ledb_REV(); D_P34_REV();
#else
#define D_leda_OFF(); ///D_P35_OFF();
#define D_leda_ON(); ///D_P35_ON();
#define D_leda_REV(); ///D_P35_REV();
#define D_ledb_OFF(); ///D_P34_OFF();
#define D_ledb_ON(); ///D_P34_ON();
#define D_ledb_REV(); ///D_P34_REV();
#endif
#define D_SERVE_INT0 interrupt 0
#define D_SERVE_TIMER0 interrupt 1
#define D_SERVE_INT1 interrupt 2
#define D_SERVE_TIMER1 interrupt 3
#define D_SERVE_UART interrupt 4
#define D_SERVE_ADC interrupt 5
#define D_SERVE_LVD interrupt 6
#define D_SERVE_PCA interrupt 7
#define D_SERVE_UART2 interrupt 8
#define D_SERVE_SPI interrupt 9
#define D_SERVE_INT2 interrupt 10
#define D_SERVE_INT3 interrupt 11
#define D_SERVE_TIMER2 interrupt 12
#define D_SERVE_INT4 interrupt 16
#define D_SERVE_UART3 interrupt 17
#define D_SERVE_UART4 interrupt 18
#define D_SERVE_TIMER3 interrupt 19
#define D_SERVE_TIMER4 interrupt 20
#define D_SERVE_CMP interrupt 21
#define D_SERVE_PWM interrupt 22
#define D_SERVE_PWMFD interrupt 23
#define D_SERVE_I2C interrupt 24
#if 0
#define D_debug_sim
#endif
//#define D_iic_inspect
#define D_open_save_f
#define TYPE_UASER_BOARD ccSensor_WS_ps5ws //CC_SE_paper_main_m10_smt01.sch
//STEP 2 TYPE_UASER_BOARD CONFIG >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
#if(TYPE_UASER_BOARD == ccSensor_WS_ps5ws)///-------TYPE_UASER_BOARD----------------TYPE_UASER_BOARD----------
//2.0-5.5 8K 2kram 4k eeprom spi iic 2uart tssop20 stc8f2k08s2 1.2yuan
//2.0-5.5 16K 2kram 4k eeprom spi iic 2uart tssop20 stc8f2k16s2 1.4yuan
//1.7-5.5 8K 1kram 3k eeprom spi iic 2uart tssop20 stc8f2k16s2 1.1yuan
#define D_version_h 0x37
#define D_version_L 0x38
#define TYPE_MCU TYPE_MCU_STC
#define TYPE_IDE TYPE_IDE_KEIL
#include <stdio.h>
#include <string.h>
#include <intrins.h>
//#include "../cpu/STC_stc8a8k.h"
#include "../cpu/stc_stc8hxx.h"
#include "../cpu/stc_macro.h"
#define D_MCU_SPEC_PARAM_CHIPID 0xBFF9
#if 0//// 烧写配置
. 内部IRC振荡器的频率: 22.128MHz
. 掉电唤醒定时器的频率: 35.575KHz
. 振荡器放大增益使能
. P3.2和P3.3与下次下载无关
. 上电复位时增加额外的复位延时
. 复位引脚用作普通I/O口
. 检测到低压时不复位,而产生低压中断
. 低压检测门槛电压 : 2.20 V
. 上电复位时,硬件不启动内部看门狗
. 上电自动启动内部看门狗时的预分频数为 : 256
. 空闲状态时看门狗定时器停止计数
. 启动看门狗后,软件可以修改分频数,但不能关闭看门狗
. 下次下载用户程序时,将用户EEPROM区一并擦除
. 下次下载用户程序时,没有相关的端口控制485
. 下次下载时不需要校验下载口令
. TXD脚直通输出RXD脚的电平
. 芯片复位后,TXD脚为强推挽输出
. 芯片复位后,P2.0输出高电平
. 内部参考电压: 1341 mV (参考范围: 1270~1410mV)
. 内部安排测试时间: 2018年1月13日
. 芯片出厂序列号 : F64181C6219784
单片机型号: STC8F2K08S2
固件版本号: 7.3.10U
. 用户设定频率: 22.118MHz
. 调节后的频率: 22.128MHz
. 频率调节误差: 0.043%
操作成功 !(2019-02-24 18:16:24)
该单片机的功能: 2.0-5v 8kflash 2kram DPTR EEPROM 4K
SPI IIC T0-T4 5个定时器 掉电唤醒专用定时器 比较器 内部电压检测中断 看门狗 tssop20 1.2元人民币
#endif
#define D_MCLKO_DIV2 2
#define D_MCLKO_DIV4 4
#define D_MCLKO_DIV8 6
#define D_MCLKO_DIV16 8
#define D_MCLKO_DIV32 10
#define D_MCLKO_DIV64 12
#define D_CPUfamily_type D_CPUfamily_8bits
#define D_uart0_BRT BRT_115200
#define D_uart0_SBIT SBIT_1
#ifdef D_debug115200
#if 0
#define L2_task_L0_uart0_uc(X) L0_uart0_uc(X)///
#define GC032a_L0_uart0_uc(x) L0_uart0_uc(x)//
#else
#define L2_task_L0_uart0_uc(X) L0_uart0_uc(X)//
#define GC032a_L0_uart0_uc(x) L0_uart0_uc(x)//
#endif
#else
#define L2_task_L0_uart0_uc(x) //L0_uart0_uc_debug(x)///////
#define L2_task_L0_uart0_uchex(x) // L0_uart0_uchex(x)/////
#define GC032a_L0_uart0_uc(x) //L0_uart0_uc_debug(x)/////
#define GC032a_L0_uart0_uchex(x) //L0_uart0_uchex(x)////
#define GC032a_L0_uart0_sendArray(x,Y) //L0_uart0_uchex(Y)//
#define GC032a_L0_uart0_us(x) //L0_uart0_us(x)*/
#endif
///#define D_sys_MainFre MainFre_16M2
#define D_sys_MainFre MainFre_11M
///#define D_sys_MainFre MainFre_22M
#if(MainFre_5M == D_sys_MainFre)
#define D_Cdelay_200us 20
#define D_Cdelay_1us 1 ////while p21翻转时测定 500k 2us 一个指令
#elif(MainFre_22M == D_sys_MainFre)
#define D_Cdelay_200us 10
#define D_Cdelay_1us 10 ////while p21翻转时测定 500k 2us 一个指令
#define D_Cdelay_1ms 36// 500 14ms 360--10ms
#define D_Cdelay_5ms 180// 500 14ms 360--10ms
#define D_Cdelay_15ms 900
#define D_Cdelay_30ms 2400
#define L0_delay_1us() Lc_delay_nop(2) // 5个nop() 100ns 50个nop() 1us (20)=10us (2)1.5us
#define L0_delay_10us() Lc_delay_nop(20) // 5个nop() 100ns 50个nop() 1us (20)=10us (2)1.5us
// 0x01/#define D_MCLKO_set D_MCLKO_DIV16 //1.389MHz/800ns@MCU.22MHz-
#define D_MCLKO_set D_MCLKO_DIV8 ////2.778MHz/400ns@MCU.22MHz-
///#define D_MCLKO_set D_MCLKO_DIV4 ////5.556MHz/ @MCU.22MHz-
///#define D_MCLKO_set D_MCLKO_DIV2 ////5.556MHz/ @MCU.22MHz-
#define D_0xfa 0x33
//#define D_0xfa 0x11
/*******************
#define D_0xf7 0x01
#define D_0xf8 0x02
#define D_P00x46 0x26////pclk /////cccc201805 hs low polarity
#define D_P00x4c 0x00
#define D_P00x4d 0x04
#define D_P00x43 0x10 ///EABLE CrCb fixed en 02
#define D_P00x4a 0x83 ///div_gate+clk_en 82
#define D_P00xda 0xff /// Cr fixed
#define D_P00xdb 0xff /// Cb fixed
#define D_0xfa 0x22 //00000000000000
P0:0x4d Debug_mode3 8 0x04 RW
[7:4] test_image_fix_value
[3] fix_value_mode
[2] remove_ff_mode
[1] subsample extend opclk disable when SPI
[0] clk2x_bypass
*******************/
#elif(MainFre_27M == D_sys_MainFre)
#define D_Cdelay_200us 20
#define D_Cdelay_1us 1 ////while p21翻转时测定 500k 2us 一个指令
#else ///MainFre_11M
#define D_Cdelay_200us 20
#define D_Cdelay_1us 1
#define D_Cdelay_1ms 36//
#define D_Cdelay_5ms 180//
#define D_Cdelay_15ms 900
#define D_Cdelay_30ms 2400
#if 0
#define L0_delay_1us() Lc_delay_nop(5) // 5个nop() 100ns 50个nop() 1us (20)=10us (2)1.5us
#define L0_delay_10us() Lc_delay_nop(40) // 5个nop() 100ns 50个nop() 1us (20)=10us (2)1.5us
#define L0_delay_40us() Lc_delay_nop(150) // 5个nop() 100ns 50个nop() 1us (20)=10us (2)1.5us
#else
#define L0_delay_1us() Lc_delay_nop(0) // 5个nop() 100ns 50个nop() 1us (20)=10us (2)1.5us
#define L0_delay_10us() Lc_delay_nop(4) // 5个nop() 100ns 50个nop() 1us (20)=10us (2)1.5us //绀烘尝鍣ㄦ祴璇曠粨鏋?
#define L0_delay_40us() Lc_delay_nop(18) // 5个nop() 100ns 50个nop() 1us (20)=10us (2)1.5us
#endif
#endif//D_sys_MainFre)
/*******>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
1,
串口1选择定时器2为波特率发生器
AUXR &= 0xFB; //定时器2时钟为Fosc/12,即12T,
2, timer0 为task使用
L1_tick_tick
3,
///<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<****/
#define D_IO_LED1_OFF() D_P17_OFF()
#define D_IO_LED2_OFF() D_P54_OFF()
#define D_IO_485_RE_OFF() D_P55_OFF()
#define D_IO_485_DE_OFF() //D_P55_OFF()
#define D_IO_LED1_INIT() ///D_P35_INIT()
#define D_IO_LED2_INIT() ///D_P34_INIT()
#define D_IO_485_RE_INIT() ///D_P33_INIT()
#define D_IO_485_DE_INIT() ///D_P32_INIT()
#define D_IO_LED1_ON() D_P17_ON()
#define D_IO_LED2_ON() D_P54_ON()
#define D_IO_485_RE_ON() D_P55_ON()
#define D_IO_485_DE_ON() //D_P32_ON()
////////////////////////////////sim iic config
//根据sch的定义
#define L0_IIC_SIM_INIT() BITN_0(P3M1,5);BITN_0(P3M0,5);\
BITN_0(P3M1,4);BITN_0(P3M0,4);
///stc独有10 高阻
#define L0_IIC_SIM_close() BITN_1(P3M1,5);BITN_0(P3M0,5);\
BITN_1(P3M1,4);BITN_0(P3M0,4);
#define L0_board_config() D_stdIO_P1(BITN7);D_stdIO_P5(BITN4);\
D_stdIO_P1(BITN0);D_stdIO_P1(BITN1);\
D_stdIO_P1(BITN2);D_stdIO_P1(BITN6);\
D_stdIO_P3(BITN2);D_stdIO_P3(BITN3);\
D_stdIO_P3(BITN4);D_stdIO_P3(BITN5);\
D_stdIO_P3(BITN6);D_stdIO_P3(BITN7);
#if 10
#define L0_SDA_ON() D_P34_ON()
#define L0_SDA_OFF() D_P34_OFF()
#define L0_SDA_AT() D_P34_AT()
#define L0_SCL_ON() D_P35_ON()
#define L0_SCL_OFF() D_P35_OFF()
#else
#define L0_SDA_ON() //D_P34_ON()
#define L0_SDA_OFF() //D_P34_OFF()
#define L0_SDA_AT() //D_P34_AT()
#define L0_SCL_ON() //D_P35_ON()
#define L0_SCL_OFF() //D_P35_OFF()
#endif
#if(BRT_4800 == D_uart0_BRT)
#define D_txd4_wakeup() P31 = 1 // >750us
#define D_txd4_low() P31 = 0
////为适应433 模块的功耗问题
////debug的时候切记 此处会对串口造成影响 low有效的情况下其他的发送不会好使,除非事先wakeup
#else
#define D_txd4_wakeup() //P31 = 1 // >750us
#define D_txd4_low() //P31 = 0
#endif
#define DR_who_wakeup22 i2ctxd
///// DR: Define Register DRB:bit of Define Register
#define DR_isr_times SADDR
#define DR_who_wakeup SADEN
#define DRB_who_wakeup_timer0 BITN0
#define DRB_who_wakeup_action BITN1
#define DRB_who_wakeup_voice BITN2
#ifdef doc342343
BITN_1(DR_who_wakeup, DRB_who_wakeup_timer0);
BITN_0(DR_who_wakeup, DRB_who_wakeup_timer0);
if(BITN_G(DR_who_wakeup, DRB_who_wakeup_timer0))
{
}
#endif
#elif(TYPE_UASER_BOARD == TYPE_BOARD_TI26_MT01_M178)///-------TYPE_UASER_BOARD----------------TYPE_UASER_BOARD----------
#define TYPE_MCU TYPE_MCU_STC
#define TYPE_IDE TYPE_IDE_KEIL
#include <stdio.h>
#include <string.h>
#include <intrins.h>
//#include "../cpu/STC_stc8a8k.h"
#include "../cpu/stc_stc8hxx.h"
#define D_CPUfamily_type D_CPUfamily_8bits
#elif(TYPE_UASER_BOARD == TYPE_BOARD_SMMM_MB_VH032_0E)
#endif
#endif//_BSP_CONFIG_H
/*********************************end file*********************************************/

0
source/bsp/bsp_config0.h → source/bsp/bsp_config0.h.1

156
source/bsp/bsp_config_const.h

@ -0,0 +1,156 @@
////////////////////////////////////////////////////////////////////////////
///@copyright Copyright (c) 2017, 传控科技 All rights reserved.
///-------------------------------------------------------------------------
/// @file bsp_config.h
/// @brief hard config include
/// @info FILE FOR HARDWARE SETUP AND SOFTWARE SETUP///FOR EXAMPLE: BAORD ,MCU,IDE
/// @info YOU CAN CHANGE OR ADD THE DEFINE IF YOU NEED
/// @info 整个嵌入式项目的入口 首先是确认电路板 然后确认cpu 芯片型号 然后确认编译器 之后是软件框架 最后是应用程序
/// @info bsp_CONFIG 为其他头文件的始祖 TYPE_BOARD_xx
///-------------------------------------------------------------------------
/// @version 1.1
/// @author CC
/// @date 20180308
/// @note
//////////////////////////////////////////////////////////////////////////////
/// @version 5.1
/// @author CC
/// @date 20200301
/// @note
//////////////////////////////////////////////////////////////////////////////
//////////////////////////////////////////////////////////////////////////
///存储器中的特殊参数
///全球唯一ID号 7FF9H~7FFFH BFF9H~BFFFH EFF9H~EFFFH FDF9H~FDFFH 7字节
///内部1.19V参考信号源 7FF7H~7FF8H BFF7H~BFF8H EFF7H~EFF8H FDF7H~FDF8H 毫伏(高字节在前)
///32K掉电唤醒定时器的频率 7FF5H~7FF6H BFF5H~BFF6H EFF5H~EFF6H FDF5H~FDF6H Hz (高字节在前)
///22.1184MHz的IRC参数(20M频段) 7FF4H BFF4H EFF4H FDF4H -
///24MHz的IRC参数(20M频段) 7FF3H BFF3H EFF3H FDF3H -
///20MHz的IRC参数(20M频段) 7FF2H BFF2H EFF2H FDF2H
///固件版本为7.3.12U
///以及后续版本有效
///27MHz的IRC参数(35M频段) 7FF1H BFF1H EFF1H FDF1H
///30MHz的IRC参数(35M频段) 7FF0H BFF0H EFF0H FDF0H
///33.1776MHz的IRC参数(35M频段) 7FEFH BFEFH EFEFH FDEFH
///35MHz的IRC参数(35M频段) 7FEEH BFEEH EFEEH FDEEH
///36.864MHz的IRC参数(35M频段) 7FEDH BFEDH EFEDH FDEDH
///保留 7FECH BFECH EFECH FDECH
///保留 7FEBH BFEBH EFEBH FDEBH
///20M频段的VRTRIM参数 7FEAH BFEAH EFEAH FDEAH
///35M频段的VRTRIM参数 7FE9H BFE9H EFE9H FDE9H
//////////////////////////////////////////////////////////////////////////
#ifndef _BSP_CONFIG_CONST_H
#define _BSP_CONFIG_CONST_H
#include <INTRINS.H>
#include "../clib/type.h"
#include "../clib/bit.h"
//>>>>>>>>>>>>>>>>>>>>>>.BORAD TYPE
#define TYPE_BOARD_hhnew 1
#define TYPE_BOARD_st_sleep04_01 4
#define TYPE_BOARD_st_sleep03 5
#define TYPE_BOARD_SMMM_MB_VH032_0E 6
#define TYPE_BOARD_LPC17xx_ 8
#define TYPE_BOARD_STM32F_103ZET6_READBULL 1036
#define TYPE_BOARD_hh_CC_MD_VH05_anyriny_simple_m51 0x0551
#define TYPE_BOARD_hh_CC_MD_VH06_asMain_m6a7 0x6a7
#define TYPE_BOARD_TI26_MT01_M178 0x178 //会议计时器版v TI26_MT01-M178
#define TYPE_BOARD_stc5as32_WIFIBV01 532
#define TYPE_BOARD_SHC16LAXXQN32 1632 //SHC16LAXXQN32
#define TYPE_BOARD_PAPER6133_M0A6 0xa6 //打印机纸张传感
#define TYPE_BOARD_GSM_MAIN_V07 0xa7 //打印机运维板
#define TYPE_BOARD_ADDA_MAIN_V02 0xa8 //ADDA
#define TYPE_BOARD_433_0A 0xa9 //433
#define TYPE_BOARD_WEIGH_0B 0xaa //称重
//<<<<<<<<<<<<<<<<<<<<<<<<<<<.BORAD TYPE end
//>>>>>>>>>>>>>>>>>>>>>>MCU TYPE
#define TYPE_MCU_VENDOR_MSK 0xF0
#define TYPE_MCU_VENDOR_STC 0x10
#define TYPE_MCU_STC_8A 0x11
#define TYPE_MCU_STC_8F 0x12
#define TYPE_MCU_STC_8G 0x13
#define TYPE_MCU_STC_8H 0x14
#define TYPE_MCU_VENDOR_TI 0x60
#define TYPE_MCU_SHC6601 0x66
#define TYPE_MCU_LPC17xx 0x67
#define TYPE_MCU_STM32 0x68
#define D_CPUfamily_8bits 8
#define D_CPUfamily_16bits 16
#define D_CPUfamily_32bits 32
//<<<<<<<<<<<<<<<<<<<<<<MCU TYPE end
//>>>>>>>>>>>>>>>>>>>>>>IDE TYPE
#define TYPE_IDE_KEIL 1
#define TYPE_IDE_MDK 2
#define TYPE_IDE_IAR 3
//<<<<<<<<<<<<<<<<<<<<<<IDE TYPE end
//>>>>>>>>>>>>>>>>>>>>>>SysTimer TYPE
#define TYPE_JIFFIES_5MS 5
#define TYPE_JIFFIES_10MS 10
#define TYPE_JIFFIES_25MS 25
//<<<<<<<<<<<<<<<<<<<<<<<<<<<SysTimer TYPE end
//>>>>>>>>>>>>>>>>>>>>>>.WDT TYPE
#define TYPE_WDT_DISABLE 1
#define TYPE_WDT_ENABLE 2
//#define WDT_FEED() WDT_CONTR |= 0x10
//<<<<<<<<<<<<<<<<<<<<<<<<<<<.SysTimer TYPE end
//>>>>>>>>>>>>>>>>>>>>>>.ByteOrder TYPE
#define TYPE_MCU_BIGENDIAN 1 //大端字节序
#define TYPE_MCU_LITENDIAN 2 //小端字节序
//<<<<<<<<<<<<<<<<<<<<<<<<<<<.ByteOrder TYPE end
//>>>>>>>>>>>>>>>>>>>>>>.代码加密 TYPE
#define TYPE_ENCRYPTION_ENABLE 1 //代码加密
#define TYPE_ENCRYPTION_DISABLE 2 //代码不加密
//<<<<<<<<<<<<<<<<<<<<<<<<<<<.ByteOrder TYPE end
//>>>>>>>>>>>>>>>>>>>>>>BUADRATE & StopBit
#define SBIT_1 1 //1 stop bit
#define SBIT_2 2 //2 stop bit
#define BRT_115200 115200
#define BRT_19200 19200
#define BRT_9600 9600
#define BRT_4800 4800
//<<<<<<<<<<<<<<<<<<<<<<BUADRATE & StopBit end
//>>>>>>>>>>>>>>>>>>>>>>MainFre
#define MainFre_5M 5529600L
#define MainFre_11M 11059200L
#define MainFre_22M 22118400L
#define MainFre_24M 24000000L
#define MainFre_27M 27000000L
//<<<<<<<<<<<<<<<<<<<<<<MainFre end
//>>>>>>>>>>>>>>>>>>>>>>UART0 PIN
#define PIN_UART0_Rxd_30_Txd_31 1
#define PIN_UART0_Rxd_36_Txd_37 2
#define PIN_UART0_Rxd_16_Txd_17 3
#define PIN_UART0_Rxd_43_Txd_44 4
//<<<<<<<<<<<<<<<<<<<<<<<<<<<.UART0 PIN
//>>>>>>>>>>>>>>>>>>>>>>485 Type
#define TYPE_485_NONE 0
#define TYPE_485_MASTER 1
#define TYPE_485_SLAVER 2
//<<<<<<<<<<<<<<<<<<<<<<485 Type end
//>>>>>>>>>>>>>>>>>>>>>>G-SENSOR TYPE
#define TYPE_ASENSOR_ADXL362 362
#define TYPE_ASENSOR_MSA300 300
#define TYPE_ASENSOR TYPE_ASENSOR_MSA300
//<<<<<<<<<<<<<<<<<<<<<<G-SENSOR TYPE end
#endif//_BSP_CONFIG_CONST_H
/*********************************end file*********************************************/

21
source/clib/clib.c

@ -414,6 +414,15 @@ void Lc_encrypt_id(U8 *enc_dst, U8 *enc_src, U32 enc_key, U8 src_len)
}
}
void Lc_encrypt_id1(U8 *enc_dst, U8 *enc_src, U8 enc_key[], U8 src_len)
{
U8 i;
for(i=0;i<src_len;i++)
{
enc_dst[i] = (((enc_src[i] << enc_key[0]) + enc_key[1]) ^ enc_key[2]) + enc_key[3];
}
}
#if 0
@ -1671,6 +1680,18 @@ U32 Lc_abs(vU32 a,vU32 b,vU32 *diff)
#endif //#if 0 //5436345673456
int Lc_memset(U8 *buf,U8 c,U16 len)
{
U16 i;
for(i=0;i<len;i++)
{
buf[i] = c;
}
return 0;
}
/******************************************************************************
** End Of File
******************************************************************************/

4
source/clib/clib.h

@ -31,7 +31,7 @@ extern U8 Lc_Hex2Char(U8 CharStr);
//extern void Lc_int2str(U32 ui_in,UN_TYPE len,UN_TYPE point,char *d);
// input: 123456d
// output: '1' '2' '3'....
//对应的点阵 为 0123456789. ,最后为空格,专为显示点阵类的数值使用
//��Ӧ�ĵ��� Ϊ 0123456789. �����Ϊ�ո�רΪ��ʾ���������ֵʹ��
//extern void Lc_int2number(U32 ui_in,UN_TYPE len,UN_TYPE point,char *d);
//extern U32 L2_fun_number_show(int i,char str[4]);
#if 0
@ -105,6 +105,8 @@ extern U16 ntohs(U16 dat);
extern U16 htons(U16 dat);
extern U32 Lc_abs(vS32 a,vS32 b);
extern void Lc_encrypt_id(U8 *enc_dst, U8 *enc_src, U32 enc_key, U8 src_len);
extern void Lc_encrypt_id1(U8 *enc_dst, U8 *enc_src, U8 enc_key[], U8 src_len);
extern int Lc_memset(U8 *buf,U8 c,U16 len);
#endif /* end __UART_H */
/*****************************************************************************

126
source/msp/msp_eeprom.c

@ -10,10 +10,11 @@
/// @note cc_AS_stc02 由stc-isp v6.0860
//////////////////////////////////////////////////////////////////////////////
#include "msp_eeprom.h"
#include "../bsp/bsp_config.h"
#include "../tpc/tpc_uart.h"
struct eeprom_block_t eep_block;
#if(TYPE_MCU == TYPE_MCU_STC_8A || TYPE_MCU == TYPE_MCU_STC_8F)
#define WT_30M 0x80
#define WT_24M 0x81
#define WT_20M 0x82
@ -24,9 +25,7 @@
#define WT_1M 0x87
U_F16 uf_ee_add;
//8G8H
void L0_Iap_Idle()
void L0_Iap_Idle()
{
IAP_CONTR = 0; //关闭IAP功能
IAP_CMD = 0; //清除命令寄存器
@ -39,8 +38,7 @@ char L0_Iap_Read(vU16 addr)
{
char dat;
IAP_CONTR = 0x80; //使能IAP
IAP_TPS = 12;
IAP_CONTR = WT_12M; //使能IAP
IAP_CMD = 1; //设置IAP读命令
IAP_ADDRL = addr; //设置IAP低地址
IAP_ADDRH = addr >> 8; //设置IAP高地址
@ -55,8 +53,7 @@ char L0_Iap_Read(vU16 addr)
void L0_Iap_Program(vU16 addr, char dat)
{
IAP_CONTR = 0x80; //使能IAP
IAP_TPS = 12; //设置擦除等待参数 12MHz
IAP_CONTR = WT_12M; //使能IAP
IAP_CMD = 2; //设置IAP写命令
IAP_ADDRL = addr; //设置IAP低地址
IAP_ADDRH = addr >> 8; //设置IAP高地址
@ -66,12 +63,12 @@ void L0_Iap_Program(vU16 addr, char dat)
_nop_();
L0_Iap_Idle(); //关闭IAP功能
}
///每个扇区512字节
///指定地址可以为当前扇区内的任意地址,都会完整擦除当前扇区
void L0_Iap_Erase(vU16 addr)
{
IAP_CONTR = 0x80; //使能IAP
IAP_TPS = 12; //设置擦除等待参数 12MHz
IAP_CONTR = WT_12M; //使能IAP
IAP_CMD = 3; //设置IAP擦除命令
IAP_ADDRL = addr; //设置IAP低地址
IAP_ADDRH = addr >> 8; //设置IAP高地址
@ -81,8 +78,7 @@ void L0_Iap_Erase(vU16 addr)
L0_Iap_Idle(); //关闭IAP功能
}
#if 0 //8F
#elif (TYPE_MCU == TYPE_MCU_STC_8G || TYPE_MCU == TYPE_MCU_STC_8H)
void L0_Iap_Idle()
{
IAP_CONTR = 0; //关闭IAP功能
@ -96,7 +92,8 @@ char L0_Iap_Read(vU16 addr)
{
char dat;
IAP_CONTR = WT_12M; //使能IAP
IAP_CONTR = 0x80; //使能IAP
IAP_TPS = 12;
IAP_CMD = 1; //设置IAP读命令
IAP_ADDRL = addr; //设置IAP低地址
IAP_ADDRH = addr >> 8; //设置IAP高地址
@ -111,7 +108,8 @@ char L0_Iap_Read(vU16 addr)
void L0_Iap_Program(vU16 addr, char dat)
{
IAP_CONTR = WT_12M; //使能IAP
IAP_CONTR = 0x80; //使能IAP
IAP_TPS = 12; //设置擦除等待参数 12MHz
IAP_CMD = 2; //设置IAP写命令
IAP_ADDRL = addr; //设置IAP低地址
IAP_ADDRH = addr >> 8; //设置IAP高地址
@ -126,7 +124,8 @@ void L0_Iap_Program(vU16 addr, char dat)
///指定地址可以为当前扇区内的任意地址,都会完整擦除当前扇区
void L0_Iap_Erase(vU16 addr)
{
IAP_CONTR = WT_12M; //使能IAP
IAP_CONTR = 0x80; //使能IAP
IAP_TPS = 12; //设置擦除等待参数 12MHz
IAP_CMD = 3; //设置IAP擦除命令
IAP_ADDRL = addr; //设置IAP低地址
IAP_ADDRH = addr >> 8; //设置IAP高地址
@ -136,6 +135,8 @@ void L0_Iap_Erase(vU16 addr)
L0_Iap_Idle(); //关闭IAP功能
}
#endif
void L0_Iap_Program_array(vU16 addr,U8 *buf,U8 len)
{
U8 i = 0;
@ -154,56 +155,69 @@ void L0_Iap_Read_array(vU16 addr,U8 *buf,U8 len)
}
}
#if 0
void L1_Iap_main(void)
{
int i;
U16 addr = 0x00;
U8 buf[10];
L0_Iap_Erase(addr);
L0_Iap_Program_array(addr,"abcdefg",7);
L0_Iap_Read_array(addr,buf,10);
for(i=0;i<10;i++)
//处于节省空间考虑,eeprom读取的数据直接存放到了用户提供的buf中,
//如果buf长度过小,可能引起内存错误
U8 L1_eep_read_block(U8 sector, U8 block, U16 blocksize, U8 *buf, U16 *plen)
{
U16 i,addr = D_EEP_SECTOR_SIZE * sector + blocksize * block;
//读取整块
L0_Iap_Read_array(addr, (U8*)&eep_block, sizeof(eep_block));
if(eep_block.filter[0] == D_EEP_BLOCK_FILTER0 && eep_block.filter[1] == D_EEP_BLOCK_FILTER1)
{
Lc_delay_ms(2);
L0_uart0_uc(buf[i]);
U8 crc[2] = {0,0};
crc16(crc, eep_block.filter, 2 + 2 + D_EEP_SECTOR_BLOCK_BUF_SIZE);
if(eep_block.crc[0] == crc[0] && eep_block.crc[1] == crc[1])
{
U16 len = (U16)eep_block.len[0] << 8 | eep_block.len[1];
for(i=0;i<len;i++)
{
buf[i] = eep_block.buf[i];
}
if(plen != NULL)
{
*plen = len;
}
L0_uart0_uc('#');
return 0; //ok
}
}
return 1; //error
}
L0_Iap_Erase(addr + 0x200);
L0_Iap_Program_array(addr + 0x200,"ABCDEFG",7);
L0_Iap_Read_array(addr + 0x200,buf,10);
for(i=0;i<10;i++)
U8 L1_eep_write_block(U8 sector, U8 block, U16 blocksize, const U8 *buf, U16 len, U8 sectorEraseFlag)
{
U16 i, addr = D_EEP_SECTOR_SIZE * sector + blocksize * block;
if(len > D_EEP_SECTOR_BLOCK_BUF_SIZE)
{
Lc_delay_ms(2);
L0_uart0_uc(buf[i]);
//L0_uart0_sendstr("eep write error.");
return 1;
}
#if 0
for(i=0; i<0x1000; i++)
Lc_memset((U8*)&eep_block,0,sizeof(eep_block));
eep_block.filter[0] = D_EEP_BLOCK_FILTER0;
eep_block.filter[1] = D_EEP_BLOCK_FILTER1;
eep_block.len[0] = len >> 8 & 0xFF;
eep_block.len[1] = len >> 0 & 0xFF;
for(i=0;i<len;i++)
{
L0_Iap_Program(i,0);
eep_block.buf[i] = buf[i];
}
for(i = 0;i < 0x1010; i++)
crc16(eep_block.crc, eep_block.filter, 2 + 2 + D_EEP_SECTOR_BLOCK_BUF_SIZE);
if(sectorEraseFlag == 1)
{
//L0_uart0_uchex(i%256);
L0_uart0_uchex(L0_Iap_Read(addr + i));
if(i==0x1000-1)
{
Lc_delay_ms(100);
L0_uart0_uchex(i>>8 & 0xFF);
L0_uart0_uchex(i>>0 & 0xFF);
}
L0_Iap_Erase(addr);
}
#endif
Lc_delay_ms(100);
L0_uart0_uc('%');
//写入整块
L0_Iap_Program_array(addr, (U8*)&eep_block, sizeof(eep_block));
return 0;
}
while(1);
U8 L1_eep_erase_sector(U8 sector)
{
U16 addr = D_EEP_SECTOR_SIZE * sector;
L0_Iap_Erase(addr);
return 0;
}
#endif

30
source/msp/msp_eeprom.h

@ -21,19 +21,26 @@
#include "../clib/type.h"
#include "../clib/clib.h"
#include "../ctask/tick.h"
///>>>端口位定义,可修改!!!!!!>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
//#include "../cpu/stc_stc8a8k.h"
#include "../cpu/stc_macro.h"
#include "../bsp/bsp_config.h"
#include "../cpu/stc_stc8hxx.h"
#include "uart0.h"
extern void L3_eeprom_fun(U8 *pPara);
/**
* EEPROM
* filter0 + filter1 + len0 + len1 + {data} + crc0 + crc1
*/
#define D_EEP_SECTOR_BLOCK_BUF_SIZE (D_EEP_SECTOR_BLOCK_SIZE - 6)
typedef struct eeprom_block_t
{
U8 filter[2]; //filter
U8 len[2]; //有效数据的个数
U8 buf[D_EEP_SECTOR_BLOCK_BUF_SIZE];
U8 crc[2]; //从filter开始进行整体校验
}EEPROM_BLOCK;
extern struct eeprom_block_t eep_block;
extern U8 L1_eep_read_block(U8 sector, U8 block, U16 blocksize, U8 *buf, U16 *plen);
extern U8 L1_eep_write_block(U8 sector, U8 block, U16 blocksize, const U8 *buf, U16 len, U8 sectorEraseFlag);
extern U8 L1_eep_erase_sector(U8 sector);
///每个扇区512字节
extern void L0_Iap_Erase(vU16 addr);
@ -42,6 +49,7 @@ extern char L0_Iap_Read(vU16 addr);
extern void L0_Iap_Program_array(vU16 addr,U8 *buf,U8 len);
extern void L0_Iap_Read_array(vU16 addr,U8 *buf,U8 len);
extern void L1_Iap_main(void);
extern void L3_eeprom_fun(U8 *pPara);
#endif// #ifndef _msp_eeprom_H_

Loading…
Cancel
Save