Browse Source

stc8h3ks48 修改ttss框架

ttss_new
zhangsan 4 years ago
parent
commit
287acc8b71
  1. 117
      keilp/cc_as_stc02_ps5ws.uvprojx
  2. BIN
      si4/ps5ws.si4project/soft_ps5ws.sip_sym
  3. BIN
      si4/ps5ws.si4project/soft_ps5ws.sip_xab
  4. BIN
      si4/ps5ws.si4project/soft_ps5ws.sip_xad
  5. BIN
      si4/ps5ws.si4project/soft_ps5ws.sip_xc
  6. BIN
      si4/ps5ws.si4project/soft_ps5ws.sip_xf
  7. BIN
      si4/ps5ws.si4project/soft_ps5ws.sip_xm
  8. BIN
      si4/ps5ws.si4project/soft_ps5ws.sip_xr
  9. BIN
      si4/ps5ws.si4project/soft_ps5ws.sip_xsb
  10. BIN
      si4/ps5ws.si4project/soft_ps5ws.sip_xsd
  11. BIN
      si4/ps5ws.si4project/soft_ps5ws.siproj
  12. 141
      source/33.txt
  13. 1005
      source/app/app_algorithm.c
  14. 168
      source/app/app_algorithm.h
  15. 149
      source/app/app_calibration.c
  16. 71
      source/app/app_calibration.h
  17. 107
      source/app/app_config.c
  18. 85
      source/app/app_config.h
  19. 95
      source/app/app_flow.c
  20. 84
      source/app/app_flow.h
  21. 124
      source/app/app_paraid.c
  22. 15
      source/app/app_paraid.h
  23. 352
      source/app/app_task_adc.c
  24. 144
      source/app/app_task_adc.h
  25. 24
      source/app/app_task_uart0.c
  26. 12
      source/app/app_task_uart0.h
  27. 131
      source/app/app_ws.c
  28. 72
      source/app/app_ws.h
  29. 287
      source/app/common.c
  30. 238
      source/app/common.h
  31. 112
      source/app/main.c
  32. 58
      source/app/main.h
  33. 418
      source/app/task_adc.c
  34. 119
      source/app/task_adc.h
  35. 51
      source/app/task_debug.c
  36. 30
      source/app/task_debug.h
  37. 78
      source/app/task_encrypt.c
  38. 52
      source/app/task_encrypt.h
  39. 196
      source/app/task_modbus.c
  40. 9
      source/app/task_modbus.h
  41. 63
      source/app/task_register.c
  42. 32
      source/app/task_register.h
  43. BIN
      source/bsp/backu/bsp2019低功耗采样line版本 20200301073727.rar
  44. 34
      source/bsp/backu/bsp_433.c
  45. 19
      source/bsp/backu/bsp_433.h
  46. 574
      source/bsp/backu/bsp_cam - 副本 (2).c
  47. 574
      source/bsp/backu/bsp_cam - 副本.c
  48. 706
      source/bsp/backu/bsp_cam.c
  49. 189
      source/bsp/backu/bsp_cam.h
  50. 218
      source/bsp/backu/bsp_cam_isr.c
  51. 62
      source/bsp/backu/bsp_cam_isr.h
  52. 53
      source/bsp/backu/bsp_func.c
  53. 52
      source/bsp/backu/bsp_func.h
  54. 773
      source/bsp/backu/bsp_gc032a.c
  55. 19
      source/bsp/backu/bsp_gc032a.h
  56. 261
      source/bsp/backu/bsp_msa300.c
  57. 473
      source/bsp/backu/bsp_msa300.h
  58. 191
      source/bsp/backu/cw63xx.c
  59. 123
      source/bsp/backu/cw63xx.h
  60. 75
      source/bsp/board support/msa300.c
  61. 63
      source/bsp/board support/msa300.h
  62. 17
      source/bsp/bsp_485.h
  63. 84
      source/bsp/bsp_config.c
  64. 431
      source/bsp/bsp_config.h
  65. 203
      source/bsp/bsp_config0.h
  66. 156
      source/bsp/bsp_config_const.h
  67. 14
      source/bsp/bsp_debug.c
  68. 128
      source/bsp/bsp_power.c
  69. 132
      source/bsp/bsp_power.h
  70. 5
      source/bsp/chipid.c
  71. 6
      source/bsp/chipid.h
  72. 55
      source/bsp/cs1232.c
  73. 113
      source/bsp/cs1232.h
  74. 4
      source/bsp/rs485.c
  75. 13
      source/bsp/rs485.h
  76. 105
      source/clib/clib.c
  77. 10
      source/clib/clib.h
  78. 5
      source/clib/type.h
  79. 2
      source/cpu/STARTUP.A51
  80. 210
      source/cpu/STC_stc8a8k.H
  81. 89
      source/cpu/stc_macro.h
  82. 466
      source/cpu/stc_stc15w.h
  83. 593
      source/cpu/stc_stc8f.h
  84. 746
      source/cpu/stc_stc8g1k.h
  85. 640
      source/cpu/stc_stc8hxx.h
  86. 86
      source/ctask/task.c
  87. 302
      source/ctask/task.h
  88. 127
      source/ctask/tick.c
  89. 218
      source/ctask/tick.h
  90. 7
      source/debug/cc_as_stc01_main.ini
  91. 6
      source/debug/cc_ls_03_debug.ini
  92. 123
      source/debug/debug.ini
  93. 45
      source/debug/debug2.ini
  94. 83
      source/debug/debug_M3sfy.ini
  95. 54
      source/debug/debug_M3sfy2.ini
  96. 130
      source/debug/debug_app.c
  97. 44
      source/debug/debug_app.h
  98. 48
      source/debug/debug_drv.c
  99. 85
      source/debug/debug_drv.h
  100. 37
      source/debug/debug_led.c

117
keilp/cc_as_stc02_ps5ws.uvprojx

@ -13,14 +13,14 @@
<uAC6>0</uAC6>
<TargetOption>
<TargetCommonOption>
<Device>STC8F2K64S4</Device>
<Vendor>STC</Vendor>
<Cpu>IRAM(0-0xFF) XRAM(0-0x07FF) IROM(0-0xFFF8) CLOCK(35000000) MODP2</Cpu>
<Device>stc8a8k64s4a12</Device>
<Vendor>stc</Vendor>
<Cpu></Cpu>
<FlashUtilSpec></FlashUtilSpec>
<StartupFile>"LIB\STARTUP.A51" ("Standard 8051 Startup Code")</StartupFile>
<StartupFile></StartupFile>
<FlashDriverDll></FlashDriverDll>
<DeviceId>63032</DeviceId>
<RegisterFile>STC8.H</RegisterFile>
<DeviceId>0</DeviceId>
<RegisterFile></RegisterFile>
<MemoryEnv></MemoryEnv>
<Cmp></Cmp>
<Asm></Asm>
@ -36,8 +36,8 @@
<BinPath>d:\Keil\C51\BIN\</BinPath>
<IncludePath></IncludePath>
<LibPath></LibPath>
<RegisterFilePath>STC\</RegisterFilePath>
<DBRegisterFilePath>STC\</DBRegisterFilePath>
<RegisterFilePath></RegisterFilePath>
<DBRegisterFilePath></DBRegisterFilePath>
<TargetStatus>
<Error>0</Error>
<ExitCodeStop>0</ExitCodeStop>
@ -107,14 +107,14 @@
<BankNo>65535</BankNo>
</CommonProperty>
<DllOption>
<SimDllName>S8051.DLL</SimDllName>
<SimDllName></SimDllName>
<SimDllArguments></SimDllArguments>
<SimDlgDll>DP51.DLL</SimDlgDll>
<SimDlgDllArguments>-pDP8051</SimDlgDllArguments>
<TargetDllName>S8051.DLL</TargetDllName>
<SimDlgDll></SimDlgDll>
<SimDlgDllArguments></SimDlgDllArguments>
<TargetDllName></TargetDllName>
<TargetDllArguments></TargetDllArguments>
<TargetDlgDll>TP51.DLL</TargetDlgDll>
<TargetDlgDllArguments>-p51</TargetDlgDllArguments>
<TargetDlgDll></TargetDlgDll>
<TargetDlgDllArguments></TargetDlgDllArguments>
</DllOption>
<DebugOption>
<OPTHX>
@ -136,7 +136,7 @@
</Flash1>
<bUseTDR>0</bUseTDR>
<Flash2></Flash2>
<Flash3>"" ()</Flash3>
<Flash3></Flash3>
<Flash4></Flash4>
<pFcarmOut></pFcarmOut>
<pFcarmGrp></pFcarmGrp>
@ -154,12 +154,12 @@
<UseOnchipArithmetic>0</UseOnchipArithmetic>
<UseMultipleDPTR>0</UseMultipleDPTR>
<UseOnchipXram>0</UseOnchipXram>
<HadIRAM>1</HadIRAM>
<HadXRAM>1</HadXRAM>
<HadIROM>1</HadIROM>
<HadIRAM>0</HadIRAM>
<HadXRAM>0</HadXRAM>
<HadIROM>0</HadIROM>
<Moda2>0</Moda2>
<Moddp2>0</Moddp2>
<Modp2>1</Modp2>
<Modp2>0</Modp2>
<Mod517dp>0</Mod517dp>
<Mod517au>0</Mod517au>
<Mode2>0</Mode2>
@ -232,17 +232,17 @@
<IRO>
<Type>1</Type>
<StartAddress>0x0</StartAddress>
<Size>0xfff9</Size>
<Size>0x0</Size>
</IRO>
<IRA>
<Type>0</Type>
<StartAddress>0x0</StartAddress>
<Size>0x100</Size>
<Size>0x0</Size>
</IRA>
<XRA>
<Type>0</Type>
<StartAddress>0x0</StartAddress>
<Size>0x800</Size>
<Size>0x0</Size>
</XRA>
<XRA512>
<Type>0</Type>
@ -277,7 +277,7 @@
<WarningLevel>2</WarningLevel>
<SizeSpeed>0</SizeSpeed>
<ObjectExtend>1</ObjectExtend>
<ACallAJmp>0</ACallAJmp>
<ACallAJmp>1</ACallAJmp>
<InterruptVectorAddress>0</InterruptVectorAddress>
<VariousControls>
<MiscControls></MiscControls>
@ -341,19 +341,34 @@
<FilePath>..\source\app\main.c</FilePath>
</File>
<File>
<FileName>common.c</FileName>
<FileName>task_adc.c</FileName>
<FileType>1</FileType>
<FilePath>..\source\app\task_adc.c</FilePath>
</File>
<File>
<FileName>task_debug.c</FileName>
<FileType>1</FileType>
<FilePath>..\source\app\task_debug.c</FilePath>
</File>
<File>
<FileName>task_register.c</FileName>
<FileType>1</FileType>
<FilePath>..\source\app\task_register.c</FilePath>
</File>
<File>
<FileName>task_modbus.c</FileName>
<FileType>1</FileType>
<FilePath>..\source\app\common.c</FilePath>
<FilePath>..\source\app\task_modbus.c</FilePath>
</File>
<File>
<FileName>app_task_uart0.c</FileName>
<FileName>app_config.c</FileName>
<FileType>1</FileType>
<FilePath>..\source\app\app_task_uart0.c</FilePath>
<FilePath>..\source\app\app_config.c</FilePath>
</File>
<File>
<FileName>app_task_adc.c</FileName>
<FileName>task_encrypt.c</FileName>
<FileType>1</FileType>
<FilePath>..\source\app\app_task_adc.c</FilePath>
<FilePath>..\source\app\task_encrypt.c</FilePath>
</File>
</Files>
</Group>
@ -381,19 +396,14 @@
<FilePath>..\source\msp\UART0.C</FilePath>
</File>
<File>
<FileName>iic_sim.c</FileName>
<FileName>eeprom.c</FileName>
<FileType>1</FileType>
<FilePath>..\source\msp\iic_sim.c</FilePath>
<FilePath>..\source\msp\eeprom.c</FilePath>
</File>
<File>
<FileName>msp_eeprom.c</FileName>
<FileName>uart_x.c</FileName>
<FileType>1</FileType>
<FilePath>..\source\msp\msp_eeprom.c</FilePath>
</File>
<File>
<FileName>msp_id.c</FileName>
<FileType>1</FileType>
<FilePath>..\source\msp\msp_id.c</FilePath>
<FilePath>..\source\msp\uart_x.c</FilePath>
</File>
</Files>
</Group>
@ -401,19 +411,24 @@
<GroupName>bsp</GroupName>
<Files>
<File>
<FileName>bsp_power.c</FileName>
<FileName>bsp_config.c</FileName>
<FileType>1</FileType>
<FilePath>..\source\bsp\bsp_config.c</FilePath>
</File>
<File>
<FileName>chipid.c</FileName>
<FileType>1</FileType>
<FilePath>..\source\bsp\bsp_power.c</FilePath>
<FilePath>..\source\bsp\chipid.c</FilePath>
</File>
<File>
<FileName>bsp_cs1232.c</FileName>
<FileName>cs1232.c</FileName>
<FileType>1</FileType>
<FilePath>..\source\bsp\bsp_cs1232.c</FilePath>
<FilePath>..\source\bsp\cs1232.c</FilePath>
</File>
<File>
<FileName>bsp_485.c</FileName>
<FileName>rs485.c</FileName>
<FileType>1</FileType>
<FilePath>..\source\bsp\bsp_485.c</FilePath>
<FilePath>..\source\bsp\rs485.c</FilePath>
</File>
</Files>
</Group>
@ -436,9 +451,9 @@
<GroupName>tpc</GroupName>
<Files>
<File>
<FileName>tpc_modbus.c</FileName>
<FileName>modbus.c</FileName>
<FileType>1</FileType>
<FilePath>..\source\tpc\tpc_modbus.c</FilePath>
<FilePath>..\source\tpc\modbus.c</FilePath>
</File>
</Files>
</Group>
@ -452,16 +467,6 @@
</File>
</Files>
</Group>
<Group>
<GroupName>debug</GroupName>
<Files>
<File>
<FileName>cc_as_stc01_main.ini</FileName>
<FileType>5</FileType>
<FilePath>..\source\debug\cc_as_stc01_main.ini</FilePath>
</File>
</Files>
</Group>
</Groups>
</Target>
</Targets>

BIN
si4/ps5ws.si4project/soft_ps5ws.sip_sym

Binary file not shown.

BIN
si4/ps5ws.si4project/soft_ps5ws.sip_xab

Binary file not shown.

BIN
si4/ps5ws.si4project/soft_ps5ws.sip_xad

Binary file not shown.

BIN
si4/ps5ws.si4project/soft_ps5ws.sip_xc

Binary file not shown.

BIN
si4/ps5ws.si4project/soft_ps5ws.sip_xf

Binary file not shown.

BIN
si4/ps5ws.si4project/soft_ps5ws.sip_xm

Binary file not shown.

BIN
si4/ps5ws.si4project/soft_ps5ws.sip_xr

Binary file not shown.

BIN
si4/ps5ws.si4project/soft_ps5ws.sip_xsb

Binary file not shown.

BIN
si4/ps5ws.si4project/soft_ps5ws.sip_xsd

Binary file not shown.

BIN
si4/ps5ws.si4project/soft_ps5ws.siproj

Binary file not shown.

141
source/33.txt

@ -1,141 +0,0 @@
#define, Keyword
#elif, Directive
#else, Directive
#endif, Directive
#if, Directive
#ifdef, Directive
#ifndef, Directive
#include, Keyword
#pragma, Keyword
#undef, Keyword
(, Delimiter
), Delimiter
",", Delimiter
;, Delimiter
abstract, Keyword
__abstract, Keyword
alignas, Keyword
alignof, Keyword
asm, Keyword
__asm, Keyword
assert, Debug
Assert, Debug
async, Keyword
auto, Keyword
bool, Keyword
break, Control
case, Control
catch, Control
cdecl, Keyword
__cdecl, Keyword
char, Keyword
class, Control
coclass, Control
const, Keyword
constexpr, Keyword
const_cast, Keyword
continue, Control
cout, Keyword
decltype, Keyword
default, Control
__delegate, Keyword
delete, Control
do, Control
double, Keyword
DWORD, Keyword
dynamic_cast, Keyword
each, Control
else, Control
enum, Control
__event, Keyword
except, Control
__except, Control
exception, Keyword
explicit, Keyword
export, Keyword
extern, Keyword
FALSE, Boolean
false, Boolean
FAR, Keyword
far, Keyword
final, Keyword
__finally, Control
float, Keyword
for, Control
fortran, Keyword
for_each, Control
friend, Keyword
__gc, Keyword
goto, Control
huge, Keyword
HUGE, Keyword
if, Control
inline, Keyword
INT, Keyword
int, Keyword
int16_t, Keyword
int32_t, Keyword
int64_t, Keyword
int8_t, Keyword
interface, Control
long, Keyword
LONG, Keyword
mutable, Keyword
namespace, Control
near, Keyword
NEAR, Keyword
new, Control
NULL, Null Value
nullptr, Null Value
__nullptr, Null Value
operator, Keyword
override, Keyword
PASCAL, Keyword
pascal, Keyword
private, Keyword
__property, Keyword
protected, Keyword
public, Keyword
ref, Keyword
register, Keyword
REGISTER, Keyword
reinterpret_cast, Keyword
return, Control
sealed, Keyword
short, Keyword
SHORT, Keyword
signed, Keyword
sizeof, Keyword
static, Keyword
static_cast, Keyword
struct, Control
__super, Keyword
switch, Control
template, Control
this, Keyword
thread_local, Keyword
throw, Control
TRUE, Boolean
true, Boolean
try, Control
__try, Control
ttss_task_init, Highlight
typedef, Control
typeid, Keyword
typename, Keyword
UINT, Keyword
union, Control
unsigned, Keyword
using, Keyword
value, Keyword
virtual, Keyword
VOID, Keyword
void, Keyword
volatile, Keyword
wchar_t, Keyword
while, Control
WORD, Keyword
[, Delimiter
{, Delimiter
], Delimiter
}, Delimiter

1005
source/app/app_algorithm.c

File diff suppressed because it is too large

168
source/app/app_algorithm.h

@ -1,168 +0,0 @@
////////////////////////////////////////////////////////////////////////////
///@copyright Copyright (c) 2018, 传控科技 All rights reserved.
///-------------------------------------------------------------------------
/// @file algorithm.h
/// @brief bsp @ driver config
///-------------------------------------------------------------------------
/// @version 1.0
/// @author CC
/// @date 20180331
/// @note cc_AS_stc02
///
///
///algorithm///英 [??lg?r?e?m] 美 [??l???r?e?m] ///n.演算法;运算法则;计算程序
///
///
///
//////////////////////////////////////////////////////////////////////////////
#ifndef _APP_algorithm_H
#define _APP_algorithm_H
#include "../clib/Type.h"
#include "../ctask/task.h"
#include "../msp/uart0.h"
#include "../clib/clib.h"
//#include "../debug/debug_drv.h"//
//#include "../msp/msp_plcd.h"
//#include "../msp/SHC6601_rtc.h"
///#include "app_rf.h"
//#include "app_as.h"
#include "../tpc/tpc_uart.h"
//>>>>>>>>>>>>>>>>>>>>>0开机task
#define D_task_ALGO_median 0x51
#define D_task_ALGO_wait 0x52
#define D_task_ALGO_cal 0x53
#define D_task_ALGO_updown 0x54
#define D_task_ALGO_section 0x57
#define D_task_ALGO_cali_mode 0x63
#define D_task_ALGO_para 0x64
#define D_task_ALGO_200in 0x66
#define D_task_ALGO_cali_end 0x69
#define D_task_ALGO_cali_wait 0x70
#define D_task_ALGO_cali_save 0x73
#define D_task_ALGO_sa 0x6b
#define D_line_sum 1000 ///判定白屏的阀值
typedef struct
{
TS_task task;
vU16 usSum;
vU16 ustMP;
vU16 usPaper150;
vU16 usPaperNum;
// vU32 ul2;
// vU32 ul3;
// vU16 t;
/// vU16 usSum_temp;
// vU16 usSum100;
// vU16 usLong; /// 白区长度
/// vU8 *p_buf2;//
vU8 usPaperSection; ///纸张的段数
vU8 cali_delay;
vU8 cali_timer;
vU8 cali_over;
vU8 cali_hit;
vU8 hit_ok:1;
vU8 ok:1;
vU8 cali_mode:1; //D_OK
vU8 ok2:1;
vU8 paperMode:3;//
// vU8 buf3[520];//
}TS_task_ALGO_;
extern TS_task_ALGO_ ts_task_ALGO;
extern void L2_task_ALGO_handle(TS_task_ALGO_ *s);
extern void L2_task_ALGO_init(void);
extern void L2_task_ALGO_handle22(TS_task_ALGO_ *s);
/***********************
10 0.93
20 1.88mm --->0.094mm/paper
100 9.4 2.97mm-> 31.59574468
150 14.1 15.9---> 169.1489362 2330 0x0924
200 18.8 0
****************/
#define D_paper_EE 0x0B10 ///0b1f
#define D_paper_MAX 0x09AA ///2555 //170张
#define D_paper_150LR 250 ///上下浮动值 大概150/15 =10页
#define D_paper_150at 0x087f ///150张校准 2330/150 = 15point/张纸
#define D_paper_00 0x0015
#define D_paper_150at_top (D_paper_150at + D_paper_150LR)
#define D_paper_150at_bottom (D_paper_150at - D_paper_150LR)
#define D_cam_EE 0
#define D_cam_top 1
#define D_cam_150at 2
#define D_cam_00 3
#define D_cam_erro 4
#define D_cam_noee 5
//<<<<<<<<<<<<<<<<<<<0开机task
#if 0
#define PrintAlgo_L0_uart0_uchex(x) L0_uart0_uchex((x))
#define PrintAlgo_L0_uart0_uc(x) L0_uart0_uc((x))
#define PrintAlgo_D_send_us(x) D_send_ushex((x))
#define PrintAlgo_str(x,len) L0_uart0_sendArray((x),len)
#else
#define PrintAlgo_L0_uart0_uchex(x)
#define PrintAlgo_L0_uart0_uc(x)
#define PrintAlgo_D_send_us(x)
#define PrintAlgo_str(x,len)
#endif
/************************************************************
/// 去尖峰 削波
/// ______/\___________
/// / \
/// / ...............................\--high
/// / \
/// / \
/// / low \---low
///-16 17-- \
///
*******************************************/
#define D_F_low 23
#define D_F_high 30
#define D_F_diff 5 //D_F_high - D_F_low
///#define D_F_diff (D_F_high - D_F_low)
#endif //_APP_algorithm_H ALGO

149
source/app/app_calibration.c

@ -1,149 +0,0 @@
//////////////////////////////////////////////////////////////////////////
/// COPYRIGHT NOTICE
/// Copyright (c) 2015, 传控科技
/// All rights reserved.
///
/// @file app_calibration.c
/// @brief app_calibration app
///
///(本文件实现的功能的详述)
///
/// @version 1.1 CCsens technology
/// @author CC
/// @date 20170101
///
///
/// 修订说明:最初版本
/// Modified by:
/// Modified date:
/// Version:
/// Descriptions:
/// 应用流程 一般包括上电时序等
//////////////////////////////////////////////////////////////////////////
#include "app_calibration.h"
#include "../clib/Clib.h"
#include "../clib/bit.h"
#include "../bsp/bsp_cam.h"
///
#include "../bsp/bsp_power.h"
TS_task_CALIB_ ts_task_CALIB;
void L2_task_CALIB_init(void)
{
ts_task_CALIB.status = 0;
L1_task_init(&ts_task_CALIB.task);
L3_task_s_go(ts_task_CALIB,D_task_init);
}
//>>>>>>>>>>>>>>>>>>>>>0开机task
///L2_task_CALIB_init();
///L2_task_CALIB_handle(&ts_task_CALIB);
void L2_task_CALIB_handle(TS_task_CALIB_ *s)
{
TTSS_Task_init();
if(D_ready == ts_task_power.power2)
{
ts_task_power.power2 = D_clear;
L1_as_readXYZ(0);
L1_as_readXYZ(0);
L1_as_readXYZ(0);
L1_as_readXYZ(0);
L1_as_readXYZ(0);
L1_as_readXYZ(0);
L1_as_readXYZ(0);
L1_as_readXYZ(0);
L1_as_readXYZ(0);
L1_as_readXYZ(0);
L1_as_readXYZ(0);
L1_as_readXYZ(0);
L1_as_readXYZ(0);
L1_as_readXYZ(0);
L1_as_readXYZ(0);
L1_as_readXYZ(0);
L1_as_readXYZ(0);
L1_as_readXYZ(0);
}
#if 0
L0_uart0_uc('a');
ts_task_power.power2 = D_clear;
ts_task_CALIB.calib_time = D_clear;
L1_task_Tdelay(D_Tdelay_1s);
L2_task_go(D_task_CALIB_wait);
#endif
TTSS_Task_step(D_task_CALIB_rr);
TTSS_Task_step(D_task_CALIB_wait);
if(D_ready == ts_task_power.power2)
{
ts_task_power.power2 = D_clear;
L0_uart0_uc('#');
ts_task_CALIB.status ++;
if(ts_task_CALIB.status <= 8)
{
}else
{
L0_uart0_uc('!');
ts_task_CALIB.status = 0;
ts_task_CALIB.calib_time = D_ready;
}
}else
{
ts_task_CALIB.status = 0;
ts_task_CALIB.calib_time = D_clear;
L0_uart0_uc('0');
}
L2_task_go(D_task_CALIB_wait);
//L1_task_Tdelay(D_Tdelay_1s);
L1_task_Tdelay(D_Tdelay_500ms);////固定的间隔内是否连续收到校准敲击
TTSS_Task_step(D_task_CALIB_sleep);
L2_task_go(D_task_CALIB_init_sensor);
L1_task_Tdelay(D_Tdelay_10ms);
TTSS_Task_end();
}
/*********
if(D_ready == ts_task_power.power2)
{
ts_task_power.power2 = D_clear;
L0_uart0_uc('#');
ts_task_CALIB.status ++;
if(ts_task_CALIB.status <= 4)
{
}else
{
L0_uart0_uc('!');
// L1_task_Tdelay(D_Tdelay_1s);
// L2_task_go(D_task_CALIB_wait);
}
/// L1_task_Tdelay(D_Tdelay_1s);
L2_task_go(D_task_CALIB_wait);
}else
{
ts_task_CALIB.status = 0;
L0_uart0_uc('0');
L1_task_Tdelay(D_Tdelay_2s);
}
*********/

71
source/app/app_calibration.h

@ -1,71 +0,0 @@
#ifndef _APP_calibration_H
#define _APP_calibration_H
#include "../clib/Type.h"
#include "../ctask/task.h"
#include "../msp/uart0.h"
#include "../clib/clib.h"
//#include "../debug/debug_drv.h"//
//#include "../msp/msp_plcd.h"
//#include "../msp/SHC6601_rtc.h"
///#include "app_rf.h"
//#include "app_as.h"
#include "../bsp/cw63xx.h"
#include "../bsp/bsp_msa300.h"
#include "../tpc/tpc_uart.h"
#include "../bsp/bsp_cam_isr.h"
//>>>>>>>>>>>>>>>>>>>>>0¿ª»útask
///#define D_task_CALIB_ask 0x56
///#define D_task_CALIB_enter 0x57
///#define D_task_CALIB_init 0x10
///#define D_task_OSD_init_key 0x11
///#define D_task_CALIB_STEP 0x30
///#define D_task_CALIB_heratbeat 0x70
#define D_task_CALIB_send 0x40
#define D_task_CALIB_send2 0x41
#define D_task_CALIB_send3 0x42
#define D_task_CALIB_PreSend 0x43
#define D_task_CALIB_PreSend2 0x44
#define D_task_CALIB_wait 0x51
#define D_task_CALIB_rr 0x52
#define D_task_CALIB_sleep 0x53
#define D_task_CALIB_init_sensor 0x54
#define D_task_CALIB_wait_sensor 0x55
#define D_task_CALIB_wakeup 0x56
#define D_task_CALIB_wakeup2 0x57
#define D_task_CALIB_overtime 0x58
#define D_task_CALIB_wakeup3 0x59
typedef struct
{
TS_task task;
// vU8 t_stamp;//
// vU8 first_run;//
unsigned char calib_time;//
unsigned char status;//
// unsigned char key;//
}TS_task_CALIB_;
extern TS_task_CALIB_ ts_task_CALIB;
extern void L2_task_CALIB_handle(TS_task_CALIB_ *s);
extern void L2_task_CALIB_init(void);
extern void L2_task_CALIB_handle22(TS_task_CALIB_ *s);
//<<<<<<<<<<<<<<<<<<<0¿ª»útask
#endif //_APP_calibration_H calib

107
source/app/app_config.c

@ -0,0 +1,107 @@
#include "app_config.h"
#include "../bsp/cs1232.h"
#include "../bsp/chipid.h"
#include "../msp/eeprom.h"
GlobalParam G;
GlobalRegister R;
void L3_param_init(void)
{
#if 0
int i;
for(i=0;i<D_ch_max_num;i++)
{
G.weight[i] = 0;
}
G.allweight = 0;
G._total_weight = 0;
G._total_zweight = 0;
//L3_eeprom_read_param();
#endif
}
//读取reg内容,写入iap
void L3_reg_2_iap(void)
{
#if 0
iapData.slaver_id = R.p.slaver_id;
iapData.adc_ch_status = R.p.adc_ch_status;
iapData.weight_max = R.p.weight_max;
iapData.lmd = R.p.lmd;
iapData.adc_blur_mid = R.p.adc_blur_mid;
iapData.adc_blur_avg = R.p.adc_blur_avg;
iapData.adc_blur_shift[0] = R.p.adc_blur_shift[0];
iapData.adc_blur_shift[1] = R.p.adc_blur_shift[1];
iapData.adc_blur_shift[2] = R.p.adc_blur_shift[2];
iapData.adc_blur_threshold[0] = R.p.adc_blur_threshold[0];
iapData.adc_blur_threshold[1] = R.p.adc_blur_threshold[1];
//写入eeprom
if(L1_eep_write_block(D_EEP_PARAM_IN_SECTOR, D_EEP_PARAM_IN_BLOCK, (U8*)&iapData,sizeof(IapData),TRUE) == 0)
{
L0_uart0_sendstr("e2p write success");
}
#endif
if(L1_eep_write_block(D_EEP_PARAM_IN_SECTOR, D_EEP_PARAM_IN_BLOCK, D_EEP_PARAM_BLOCK_SIZE, (U8*)&R.p,sizeof(R.p),TRUE) == 0)
{
L0_uart0_sendstr("e2p write success");
return;
}
L0_uart0_sendstr("e2p write failed");
}
//读取iap内容,写入reg
void L3_iap_2_reg(void)
{
#if 0
if(L1_eep_read_block(D_EEP_PARAM_IN_SECTOR, D_EEP_PARAM_IN_BLOCK, (U8*)&iapData, NULL) == 1)
{
L0_uart0_sendstr("e2p read failed");
}
L0_uart0_sendstr("e2p read success");
R.p.slaver_id = iapData.slaver_id;
R.p.adc_ch_status = iapData.adc_ch_status;
R.p.weight_max = iapData.weight_max ;
R.p.lmd = iapData.lmd;
R.p.adc_blur_mid = iapData.adc_blur_mid;
R.p.adc_blur_avg = iapData.adc_blur_avg;
R.p.adc_blur_shift[0] = iapData.adc_blur_shift[0];
R.p.adc_blur_shift[1] = iapData.adc_blur_shift[1];
R.p.adc_blur_shift[2] = iapData.adc_blur_shift[2];
R.p.adc_blur_threshold[0] = iapData.adc_blur_threshold[0];
R.p.adc_blur_threshold[1] = iapData.adc_blur_threshold[1];
#endif
if(L1_eep_read_block(D_EEP_PARAM_IN_SECTOR, D_EEP_PARAM_IN_BLOCK, D_EEP_PARAM_BLOCK_SIZE, (U8*)&R.p, NULL) == 0)
{
L0_uart0_sendstr("e2p read success");
return;
}
L0_uart0_sendstr("e2p read failed");
}
void L3_reg_reset(void)
{
R.p.adc_ch_status = ADC_status_ch2_Ready | ADC_status_ch3_Ready | ADC_status_ch4_Ready; //修改采集通道
R.p.slaver_id = D_UART0_485_SLAVER_ID;
R.p.weight_max = 500; //500kg
R.p.lmd = 2; //2mv/v
R.p.adc_blur_mid = 1;
R.p.adc_blur_avg = 6;
R.p.adc_blur_shift[0] = 0;
R.p.adc_blur_shift[1] = 2;
R.p.adc_blur_shift[2] = 4;
R.p.adc_blur_threshold[0] = 1600; //g
R.p.adc_blur_threshold[1] = 700; //g
}
void L3_reg_init(void)
{
//R.reserved1 = R.reserved2 = R.reserved3 = 0x55;
//R.zero = 0;
//R.status_eep_save = 0;
L3_reg_reset();
L3_iap_2_reg();
}

85
source/app/app_config.h

@ -0,0 +1,85 @@
#ifndef APP_COMMON_H
#define APP_COMMON_H
#include "../clib/type.h"
#include "../bsp/bsp_config.h"
#define APP_VERSION 0x10
#define D_COUNT_WEIGHT(adc) (U32)((adc) / D_ADS1213_GAIN_VAL / R.p.lmd * R.p.weight_max * 1000 / (2 * 0x7FFFFF / 1000 ))
#define D_COUNT_ADC(wInG) (U32)((wInG) * D_ADS1213_GAIN_VAL * R.p.lmd * (2 * 0x7FFFFF / 1000) / R.p.weight_max / 1000)
//STEP 1 >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>Register CONFIG
//寄存器编号从1开始
//#define D_COUNT_WEIGHT(adc) (U32)(1000.0 * R.p.weight_max * (adc) / (2 * 0x7FFFFF / 1000 * D_ADS1213_GAIN_VAL * R.p.lmd))
//#define D_blur_threshold_2_1(threshold) (U32) ( 1.0 * threshold *(2 * 0x7FFFFF / 1000 * D_ADS1213_GAIN_VAL * R.p.lmd) / (1000.0 * R.p.weight_max ))
#define D_COUNT_WEIGHT(adc) (U32)((adc) / D_ADS1213_GAIN_VAL / R.p.lmd * R.p.weight_max * 1000 / (2 * 0x7FFFFF / 1000 ))
#define D_COUNT_ADC(wInG) (U32)((wInG) * D_ADS1213_GAIN_VAL * R.p.lmd * (2 * 0x7FFFFF / 1000) / R.p.weight_max / 1000)
#define ADC_status_chx_Ready_BASE 0x01
#define ADC_status_ch1_Ready 0x01
#define ADC_status_ch2_Ready 0x02
#define ADC_status_ch3_Ready 0x04
#define ADC_status_ch4_Ready 0x08
#define D_ADC_CHANNEL_NUM 4
typedef struct global_register
{
//RO Register
U16 reserved1;
U32 total_weight; //净重(显示重量)*100
U32 total_zweight; //皮重*100
//RW Register
U16 reserved2;
U16 zero; //清0标志,写入任何值清0(去皮)
U16 status_eep_save; //eep写入寄存器,1则写入eep并清0
//U16 reset; //reset标志,写入任何值,所有参数恢复初始值
struct
{ //需要持久化的参数,不能超过72字节,否则会导致eeprom溢出
U16 slaver_id;
U16 adc_ch_status;
U16 weight_max; //量程
U16 lmd; //2mv/v
U16 adc_blur_mid; //中值滤波
U16 adc_blur_avg; //均值滤波
U16 adc_blur_shift[3]; //移位滤波点数
U16 adc_blur_threshold[2]; //移位滤波阀值
}p;
U16 reserved3;
U32 adval[D_ADC_CHANNEL_NUM]; //4路重量
U32 ch_weight[D_ADC_CHANNEL_NUM]; //4路重量
U32 rough_weight; // 毛重
}GlobalRegister;
extern GlobalRegister R;
//寄存器内存基地址
#define REG_MEM_BASE ((U16*)(&R)) //寄存器基础地址(本文件外部不应该使用该宏定义)
//变量地址转寄存器
#define MEM_2_REG(mem) (((U16*)(mem) - REG_MEM_BASE) + 1)
//寄存器转变量地址
#define REG_2_MEM(reg) (REG_MEM_BASE + (U16)((reg) - 1))
//STEP 1 <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<Register CONFIG End
//STEP 2 >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>Global Variables CONFIG
typedef struct global_param
{
U8 xx;
}GlobalParam;
extern struct global_param G;
//STEP 2 <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<Global Variables CONFIG End
extern void L3_param_init(void);
extern void L3_reg_2_iap(void);
extern void L3_iap_2_reg(void);
extern void L3_reg_reset(void);
extern void L3_reg_init(void);
#endif

95
source/app/app_flow.c

@ -1,95 +0,0 @@
//////////////////////////////////////////////////////////////////////////
/// COPYRIGHT NOTICE
/// Copyright (c) 2015, 传控科技
/// All rights reserved.
///
/// @file app_flow.c
/// @brief app_flow app
///
///(本文件实现的功能的详述)
///
/// @version 1.1 CCsens technology
/// @author CC
/// @date 20170101
///
///
/// 修订说明:最初版本
/// Modified by:
/// Modified date:
/// Version:
/// Descriptions:
/// 应用流程 一般包括上电时序等
//////////////////////////////////////////////////////////////////////////
#include "app_flow.h"
#include "../clib/Clib.h"
#include "../clib/bit.h"
#include "app_algorithm.h"
TS_P_rf433 TS_paer_value=
{
0xaa,///vU8 ha;
// 0xaa,///vU8 hb;
0xad,
0x0123,
// 0x00,///U16 paperNum:12; //12bit纸张数据
///U8 cameraIndex:2; //摄像头编号
///U8 cameraWorking:1; //是否正常工作
///U8 reserved: 1; //保留
0x56,///U8 cameraBoardPower; //电量
0xcc//, 0xaa///vU8 hc;
};
TS_task_FLOW_ ts_task_FLOW;
void L0_p_send(void)
{
unsigned char *p;
TS_paer_value.ha = 0xaa;
// TS_paer_value.hb = 0xaa;
/// TS_paer_value.hc = 0xaa;
/// TS_paer_value.r123.cameraBoardPower ++;
TS_paer_value.filter1 = 0x0a;
///TS_paer_value.r123.cameraBoardPower = s_task_GC032A.buf[2];;
TS_paer_value.r123.cameraIndex = D_cameralIndex;
TS_paer_value.r123.cameraWorking = 0;
TS_paer_value.r123.paperNum = ts_task_ALGO.usPaperNum;
//// L1_cw63xx_sta();///只有等充满电后 才会被清零
/// TS_paer_value.r123.LowPower = I2CTXD;
// TS_paer_value.r123.paperNum = 0x1234;
p = (unsigned char *)&TS_paer_value.r123;
TS_paer_value.ocr = *p;
p ++;
TS_paer_value.ocr += *p;
p ++;
TS_paer_value.ocr += *p;
// TS_paer_value.ocr = s_task_GC032A.buf[2];
}
void L2_task_FLOW_init(void)
{
L1_task_init(&ts_task_FLOW.task);
L3_task_s_go(ts_task_FLOW,D_task_init);
}
//>>>>>>>>>>>>>>>>>>>>>0开机task
#define D_FLOW_t_stamp 10
void L2_task_FLOW_handle33(TS_task_FLOW_ *s)
{
TTSS_Task_init():
/// PrintFlow_L0_uart0_uc('F');
ts_task_ALGO.paperMode = D_max;
L2_task_go(D_task_FLOW_wakeup);
TTSS_Task_end();
}

84
source/app/app_flow.h

@ -1,84 +0,0 @@
#ifndef _APP_FLOW_H
#define _APP_FLOW_H
#include "../clib/Type.h"
#include "../ctask/task.h"
#include "../msp/uart0.h"
#include "../clib/clib.h"
//#include "../debug/debug_drv.h"//
//#include "../msp/msp_plcd.h"
//#include "../msp/SHC6601_rtc.h"
///#include "app_rf.h"
//#include "app_as.h"
#include "../tpc/tpc_uart.h"
//>>>>>>>>>>>>>>>>>>>>>0¿ª»útask
///#define D_task_FLOW_ask 0x56
///#define D_task_FLOW_enter 0x57
///#define D_task_FLOW_init 0x10
///#define D_task_OSD_init_key 0x11
///#define D_task_FLOW_STEP 0x30
///#define D_task_FLOW_heratbeat 0x70
#define D_task_FLOW_wait_cam1 0x51
#define D_task_FLOW_wait_cam 0x52
#define D_task_FLOW_lowPower 0x53
#define D_task_FLOW_work 0x5b
#define D_task_FLOW_cali 0x5c
#define D_task_FLOW_init_sensor 0x54
#define D_task_FLOW_wait_sensor 0x55
#define D_task_FLOW_wakeup 0x56
#define D_task_FLOW_wakeup2 0x57
#define D_task_FLOW_overtime 0x58
#define D_task_FLOW_wakeup3 0x59
typedef struct
{
TS_task task;
vU8 t_stamp;
vU16 t_stamp2;
vU16 wakeup_timer;
vU8 long_hit;
// vU8 first_run;//
// unsigned char area;//
// unsigned char status;//
// unsigned char key;//
}TS_task_FLOW_;
extern TS_task_FLOW_ ts_task_FLOW;
extern void L2_task_FLOW_handle(TS_task_FLOW_ *s);
extern void L2_task_FLOW_init(void);
extern void L2_task_FLOW_handle33(TS_task_FLOW_ *s);
extern TS_P_rf433 TS_paer_value;
#if 0
#define PrintFlow_L0_uart0_uchex(x) L0_uart0_uchex((x))
#define PrintFlow_L0_uart0_uc(x) L0_uart0_uc((x))
#define PrintFlow_D_send_us(x) D_send_ushex((x))
#define PrintFlow_str(x,len) L0_uart0_sendArray((x),len)
#else
#define PrintFlow_L0_uart0_uchex(x)
#define PrintFlow_L0_uart0_uc(x)
#define PrintFlow_D_send_us(x)
#define PrintFlow_str(x,len)
#endif
//<<<<<<<<<<<<<<<<<<<0¿ª»útask
#endif

124
source/app/app_paraid.c

@ -1,124 +0,0 @@
//////////////////////////////////////////////////////////////////////////
/// COPYRIGHT NOTICE
/// Copyright (c) 2015, 传控科技
/// All rights reserved.
///
/// @file app_paraid.c
/// @brief parameter & id app
///
///(本文件实现的功能的详述)
///
/// @version 1.1 CCsens technology
/// @author CC
/// @date 20190107
///
///
/// 修订说明:最初版本
/// Modified by:
/// Modified date:
/// Version:
/// Descriptions:
///
//////////////////////////////////////////////////////////////////////////
#include "app_algorithm.h"
#include "app_paraid.h"
#include "../clib/Clib.h"
#include "../clib/bit.h"
#include "../msp/msp_eeprom.h"
//
///
#define D_paraid_debug_print
/// 本机id
/// 纸张的配置参数
void L1_paraid_init(void)
{
vU16 pa[2];
/// char *ID;
/// ID = (char idata *)0xf1;/// for (i=0; i<7; i++) { UartSend(ID[i]); }
///UartSend(ID[i]);
// L1_Iap_Read_us(D_paraAdd_paper150,&ts_task_ALGO.usPaper150);
// L1_Iap_Read_us(D_paraAdd_paper150,&ts_task_ALGO.usPaper150);
// L1_Iap_main();
L1_Iap_Read_us(D_paraAdd0_paper150,&pa[0]);
L1_Iap_Read_us(D_paraAdd1_paper150,&pa[1]);
#ifdef D_paraid_debug_print
L0_uart0_us(pa[0]);L0_uart0_us(pa[1]); L0_uart0_uc(0xAA);
#endif
if(pa[1] == pa[0])
{
if(0xffff != pa[1])
{
if(pa[0] < D_paper_150at_top)
{
if(pa[0] > D_paper_150at_bottom)
{
goto GOTO_PARA_OK;
}
}
}
}
/// GOTO_PARA_ERRO:
L1_Iap_Write_us(D_paraAdd0_paper150,D_paper_150at);
L1_Iap_Write_us(D_paraAdd1_paper150,D_paper_150at);
pa[0] = D_paper_150at;
GOTO_PARA_OK:
ts_task_ALGO.usPaper150 = pa[0];
#ifdef D_paraid_debug_print
L0_uart0_us(ts_task_ALGO.usPaper150);L0_uart0_uc(0xBB);
#endif
///nothing
}
void L1_Iap_Write_us(vU16 addr,vU16 val)
{
EA = 0;
/*********
IAP_CONTR = WT_12M; //使能IAP
IAP_CMD = 3; //设置IAP擦除命令
IAP_ADDRL = addr; //设置IAP低地址
IAP_ADDRH = addr >> 8; //设置IAP高地址
IAP_TRIG = 0x5a; //写触发命令(0x5a)
IAP_TRIG = 0xa5; //写触发命令(0xa5)
_nop_(); //
_nop_();
IAP_CMD = 2; //设置IAP写命令
IAP_DATA = dat; //写IAP数据
IAP_TRIG = 0x5a; //写触发命令(0x5a)
IAP_TRIG = 0xa5; //写触发命令(0xa5)
_nop_();
L0_Iap_Idle(); //关闭IAP功能
***************/
L0_Iap_Erase(addr);
L0_Iap_Program(addr,val>>8);
L0_Iap_Program(addr+1,val&0x00ff);
EA = 1;
}
void L1_Iap_Read_us(vU16 addr,vU16 *val)
{
EA = 0;
*val = L0_Iap_Read(addr);
*val <<= 8;
*val |= L0_Iap_Read(addr+1);
EA = 1;
}

15
source/app/app_paraid.h

@ -1,15 +0,0 @@
#ifndef _app_paraid_H
#define _app_paraid_H
#include "../clib/clib.h"
extern void L1_Iap_Read_us(vU16 addr,vU16 *val);
extern void L1_Iap_Write_us(vU16 addr,vU16 val);
#define D_paraAdd0_paper150 0x0000
#define D_paraAdd1_paper150 0x0200
extern void L1_paraid_init(void);
#endif //_app_paraid_H calib

352
source/app/app_task_adc.c

@ -1,352 +0,0 @@
#include "app_task_adc.h"
#include "../msp/UART0.h"
//TS_ADC_CH_SWITCH ts_adc_ch_switch;
TS_ADC_CH_SAMPLE ts_adc_ch_sample[D_ch_max_num];
TS_ADC_CH_BLUR ts_adc_ch_blur[D_ch_max_num];
TS_ADC_ALL_BLUR ts_adc_all_blur;
TS_ADC_ALL_OUT ts_adc_all_out;
TS_ADC_SHOW ts_adc_show;
void L3_task_adc_init(void)
{
U8 i = 0;
for(i=0;i<D_ch_max_num;i++)
{
L1_task_init(&ts_adc_ch_sample[i].task);
L3_task_s_go(ts_adc_ch_sample[i],D_task_init);
ts_adc_ch_sample[i].error = 0;
ts_adc_ch_sample[i].n = 0;
ts_adc_ch_sample[i].ch = D_ADCCH_1 + i;
ts_adc_ch_sample[i].ch_n = TS_ADC_CH_01 + i;
ts_adc_ch_sample[i].pool = 0;
ts_adc_ch_sample[i].sum = 0;
L1_task_init(&ts_adc_ch_blur[i].task);
L3_task_s_go(ts_adc_ch_blur[i],D_task_init);
ts_adc_ch_blur[i].SA_sum = 0;
ts_adc_ch_blur[i].SA_avg = 0;
ts_adc_ch_blur[i].SA_n = 0;
ts_adc_ch_blur[i].SHA_sum = 0;
ts_adc_ch_blur[i].SHA_avg = 0;
ts_adc_ch_blur[i].n = 0;
ts_adc_ch_blur[i].ch = D_ADCCH_1 + i;
ts_adc_ch_blur[i].ch_n = TS_ADC_CH_01 + i;
}
L1_task_init(&ts_adc_all_blur.task);
L3_task_s_go(ts_adc_all_blur,D_task_init);
ts_adc_all_blur.n = 0;
ts_adc_all_blur.sum = 0;
ts_adc_all_blur.SHA_sum_0 = 0;
ts_adc_all_blur.SHA_avg_0 = 0;
ts_adc_all_blur.SHA_pool_0[0] = ts_adc_all_blur.SHA_pool_0[1] = ts_adc_all_blur.SHA_pool_0[2] = 0;
ts_adc_all_blur.SHA_sum_1 = 0;
ts_adc_all_blur.SHA_avg_1 = 0;
//ts_adc_all_blur.SHA_pool_1[0] = ts_adc_all_blur.SHA_pool_1[1] = ts_adc_all_blur.SHA_pool_1[2] = 0;
L1_task_init(&ts_adc_all_out.task);
L3_task_s_go(ts_adc_all_out,D_task_init);
ts_adc_all_out.n = 0;
for(i=0;i<D_ADC_CH_BLUE_POOL_NUM;i++)
{
ts_adc_all_out.SHA_pool[i] = 0;
}
L1_task_init(&ts_adc_show.task);
L3_task_s_go(ts_adc_show,D_task_init);
ts_adc_show.pool_val = 0;
ts_adc_show.pool_gt = 1;
ts_adc_show.val = 0;
for(i=0;i<D_weight_show_limit_num;i++)
{
ts_adc_show.times[i] = 0;
}
}
//#define D_SA_mid(X); ts_sample[X].midv = Lc_S32_media3(ts_sample[X].mid[0],ts_sample[X].mid[1],ts_sample[X].mid[2]);
#define D_ADC_CHANNEL_READY(X) (G.p.adc_ch_status & (ADC_status_chx_Ready_BASE << X))
#define D_task_ADC_CHx_SAMPLE 0x51
#define D_task_ADC_CHx_WAIT_HIGH_LEVEL 0x52
#define D_task_ADC_CHx_WAIT_LOW_LEVEL 0x53
#define D_task_ADC_CHx_READ 0x54
#define D_task_ADC_CHx_OUT 0x55
void L3_task_adc_ch_sample(TS_ADC_CH_SAMPLE *s)
{
TTSS_Task_init():
L2_task_go(D_task_ADC_CHx_SAMPLE);
TTSS_Task_step(D_task_ADC_CHx_SAMPLE):
if(D_ADC_CHANNEL_READY(s->ch_n))
{
L2_task_go(D_task_ADC_CHx_WAIT_LOW_LEVEL);
}
else
{
s->adcval = s->pool;
L2_task_go(D_task_ADC_CHx_OUT);
}
TTSS_Task_step(D_task_ADC_CHx_WAIT_LOW_LEVEL):
if(0 == L0_2dc_DOUT_AT(s->ch))
{
L2_task_go(D_task_ADC_CHx_READ);
}
TTSS_Task_step(D_task_ADC_CHx_READ):
s->adcval = L0_ADS1231_readCH(s->ch);
L2_task_go(D_task_ADC_CHx_OUT);
TTSS_Task_step(D_task_ADC_CHx_OUT):
s->pool = s->adcval;
s->sum += s->adcval;
++s->n;
if(s->n >= D_ADC_CH_SAMPLE_BUF_MAX)
{
s->n = 0;
s->sum = 0;
}
L2_task_go(D_task_ADC_CHx_SAMPLE);
TTSS_Task_end();
}
//单路滤波任务
#define D_task_ADC_CHx_BLUR_GET 0x51
#define D_task_ADC_CHx_BLUR_AVG 0x52
#define D_task_ADC_CHx_BLUR_SHIFT 0x53
#define D_task_ADC_CHx_BLUR_COUNT 0x54
void L3_task_adc_ch_blur(TS_ADC_CH_BLUR *s)
{
TTSS_Task_init():
L2_task_go(D_task_ADC_CHx_BLUR_GET);
TTSS_Task_step(D_task_ADC_CHx_BLUR_GET):
if(ts_adc_ch_sample[s->ch_n].n >= G.p.cc_blur_ch_avg)
{
s->SA_sum = ts_adc_ch_sample[s->ch_n].sum;
s->SA_n = ts_adc_ch_sample[s->ch_n].n;
ts_adc_ch_sample[s->ch_n].sum = 0;
ts_adc_ch_sample[s->ch_n].n = 0;
L2_task_go(D_task_ADC_CHx_BLUR_AVG);
}
TTSS_Task_step(D_task_ADC_CHx_BLUR_AVG):
s->SA_avg = s->SA_sum / s->SA_n;
L2_task_go(D_task_ADC_CHx_BLUR_SHIFT);
TTSS_Task_step(D_task_ADC_CHx_BLUR_SHIFT):
s->SHA_sum -= s->SHA_avg;
s->SHA_sum += s->SA_avg;
s->SHA_avg = (S32)(s->SHA_sum >> G.p.cc_blur_ch_shift);
s->n++;
L2_task_go(D_task_ADC_CHx_BLUR_COUNT);
TTSS_Task_step(D_task_ADC_CHx_BLUR_COUNT):
G.weight[s->ch_n] = D_COUNT_WEIGHT(s->SHA_avg);
L2_task_go(D_task_ADC_CHx_BLUR_GET);
TTSS_Task_end();
}
//单路滤波任务
#define D_task_ADC_ALL_BLUR_GET 0x51
#define D_task_ADC_ALL_BLUR_SHIFT0 0x52
#define D_task_ADC_ALL_BLUR_SHIFT1 0x53
void L3_task_adc_all_blur(TS_ADC_ALL_BLUR *s)
{
TTSS_Task_init():
L2_task_go(D_task_ADC_CHx_BLUR_GET);
TTSS_Task_step(D_task_ADC_CHx_BLUR_GET):
//if(ts_adc_ch_blur[D_ch_max_num-1].n >= 1)
if(ts_adc_ch_blur[0].n >= 1)
{
ts_adc_ch_blur[0].n = 0;
ts_adc_ch_blur[1].n = 0;
ts_adc_ch_blur[2].n = 0;
ts_adc_ch_blur[3].n = 0;
s->sum = G.weight[0] + G.weight[1] + G.weight[2] + G.weight[3];
L2_task_go(D_task_ADC_ALL_BLUR_SHIFT0);
}
TTSS_Task_step(D_task_ADC_ALL_BLUR_SHIFT0):
s->SHA_sum_0 -= s->SHA_avg_0;
s->SHA_sum_0 += s->sum;
s->SHA_avg_0 = (S32)(s->SHA_sum_0 >> G.p.cc_blur_all_shift0);
s->SHA_pool_0[0] = s->SHA_pool_0[1];
s->SHA_pool_0[1] = s->SHA_pool_0[2];
s->SHA_pool_0[2] = s->SHA_avg_0;
L2_task_go(D_task_ADC_ALL_BLUR_SHIFT1);
TTSS_Task_step(D_task_ADC_ALL_BLUR_SHIFT1):
s->SHA_sum_1 -= s->SHA_avg_1;
s->SHA_sum_1 += s->sum;
s->SHA_avg_1 = (S32)(s->SHA_sum_1 >> G.p.cc_blur_all_shift1);
//s->SHA_pool_1[0] = s->SHA_pool_1[1];
//s->SHA_pool_1[1] = s->SHA_pool_1[2];
//s->SHA_pool_1[2] = s->SHA_avg_1;
s->n++;
L2_task_go(D_task_ADC_CHx_BLUR_GET);
TTSS_Task_end();
}
#define D_task_ADC_ALL_OUT_GET 0x51
#define D_task_ADC_ALL_OUT_DECIDE 0x52
#define D_task_ADC_ALL_OUT_SHOW 0x53
#define D_task_ADC_ALL_OUT_SHOW_1 0x54
#define D_task_ADC_ALL_OUT_DEBUG 0x55
void L3_task_adc_all_out(TS_ADC_ALL_OUT *s)
{
TTSS_Task_init():
//s->diff_threshold = (G.p.cc_blur_all_out_threshold);
//s->diff_threshold1 = (G.p.cc_blur_all_out_threshold1);
//s->diff_threshold2 = (G.p.cc_blur_all_out_threshold2);
//s->should_show_times_threshold = (G.p.cc_blur_all_out_should_show_times_threshold);
L2_task_go(D_task_ADC_ALL_OUT_GET);
TTSS_Task_step(D_task_ADC_ALL_OUT_GET):
if(ts_adc_all_blur.n >= 1)
{
ts_adc_all_blur.n = 0;
Lc_buf_copy_uc((U8*)s->SHA_pool, (U8*)ts_adc_all_blur.SHA_pool_0, D_ADC_CH_BLUE_POOL_NUM * sizeof(S32));
s->SHA_diff[0] = Lc_abs(s->SHA_pool[1] , s->SHA_pool[0]);
s->SHA_diff[1] = Lc_abs(s->SHA_pool[2] , s->SHA_pool[1]);
s->SHA_ddiff[0] = Lc_abs(s->SHA_diff[1] , s->SHA_diff[0]);
L2_task_go(D_task_ADC_ALL_OUT_DECIDE);
}
TTSS_Task_step(D_task_ADC_ALL_OUT_DECIDE):
if((s->SHA_diff[1] >= G.p.cc_blur_all_out_d_threshold) || (s->SHA_diff[0] >= G.p.cc_blur_all_out_d_threshold) || (s->SHA_ddiff[0] >= G.p.cc_blur_all_out_dd_threshold))
{
#if 1
s->sum = s->SHA_pool[2] + s->SHA_pool[1] + s->SHA_pool[0];
ts_adc_all_blur.SHA_sum_1 = s->sum;
ts_adc_all_blur.SHA_sum_1 <<= G.p.cc_blur_all_shift1;
ts_adc_all_blur.SHA_sum_1 /= 3;
ts_adc_all_blur.SHA_avg_1 = (S32)(ts_adc_all_blur.SHA_sum_1 >> G.p.cc_blur_all_shift1);
//s->val = ts_adc_all_blur.SHA_avg_0;
s->val = s->sum / 3;
//s->t = 0;
#else
ts_adc_all_blur.SHA_sum_1 = ts_adc_all_blur.SHA_avg_0 << G.p.cc_blur_all_shift1;
ts_adc_all_blur.SHA_avg_1 = ts_adc_all_blur.SHA_avg_0;
s->val = ts_adc_all_blur.SHA_avg_0;
//s->t = 0;
#endif
}
else
{
s->val = ts_adc_all_blur.SHA_avg_1;
//s->t = 1;
}
s->n++;
L2_task_go(D_task_ADC_ALL_OUT_GET);
TTSS_Task_end();
}
#define D_task_ADC_SHOW_GET 0x53
#define D_task_ADC_SHOW_1 0x54
#define D_task_ADC_SHOW_DEBUG 0x55
void L3_task_adc_show(TS_ADC_SHOW *s)
{
U8 i = 0,find = 0,j = 0;
TTSS_Task_init():
L2_task_go(D_task_ADC_SHOW_GET);
TTSS_Task_step(D_task_ADC_SHOW_GET):
if(ts_adc_all_out.n >= 1)
{
ts_adc_all_out.n = 0;
s->val = ts_adc_all_out.val;
L2_task_go(D_task_ADC_SHOW_1);
}
TTSS_Task_step(D_task_ADC_SHOW_1):
if((s->val - s->pool_val) * s->pool_gt < 0)
{
//符号改变,计数清0
//L0_uart0_uc('-');
L3_task_show_times_reset();
}
s->pool_gt = (s->val >= s->pool_val) ? 1 : -1;
s->diff_val = Lc_abs(s->val,s->pool_val);
for(i=0;i<D_weight_show_limit_num;i++)
{
if(G.p.weight_show_limit[i].times == 0)
{
break;
}
if(s->diff_val >= G.p.weight_show_limit[i].weight)
{
find = 1;
break;
}
}
if(find)
{
s->times[i]++;
for(j=0;j<D_weight_show_limit_num;j++)
{
if(j != i)
{
s->times[j] = 0;
}
}
}
else //小于显示分辨率(<0.02kg)
{
L3_task_show_times_reset();
}
for(i=0;i<D_weight_show_limit_num;i++)
{
if(s->times[i] >= G.p.weight_show_limit[i].times)
{
L3_task_show_times_reset();
s->pool_val = s->val;
G._total_weight = s->pool_val;
G.total_weight = L3_count_std_weight(G._total_weight);
break;
}
}
L2_task_go(D_task_ADC_SHOW_GET);
//L2_task_go(D_task_ADC_SHOW_DEBUG);
TTSS_Task_step(D_task_ADC_SHOW_DEBUG):
//L0_uart0_uc(s->t == 0 ? '0' : '1');
s->u16_v = (vU16)(s->pool_val >> 16);
L0_uart0_ushex(s->u16_v,16);
s->u16_v = (vU16)(s->pool_val & 0x0000ffff);
L0_uart0_ushex(s->u16_v,16);//Lc_delay_us(500);
//L0_uart0_uc(0x0d); L0_uart0_uc(0x0a);
//L0_uart0_uc(' ');
//L0_uart0_uc(' ');
L2_task_go(D_task_ADC_SHOW_GET);
TTSS_Task_end();
}
void L3_task_show_times_reset()
{
U8 i = 0;
for(i=0;i<D_weight_show_limit_num;i++)
{
ts_adc_show.times[i] = 0;
}
}

144
source/app/app_task_adc.h

@ -1,144 +0,0 @@
#ifndef APP_TASK_ADC_H
#define APP_TASK_ADC_H
#include "common.h"
#include "../ctask/task.h"
#include "../bsp/bsp_cs1232.h"
#define D_ADC_BLUR_MID_MAX 5
enum D_TASK_ADC_CHANNEL
{
TS_ADC_CH_01 = 0x00,
TS_ADC_CH_02 = 0x01,
TS_ADC_CH_03 = 0x02,
TS_ADC_CH_04 = 0x03,
};
//对每一路进行采样
#define D_ADC_CH_SAMPLE_BUF_MAX 50
#define D_ADC_CH_BLUE_POOL_NUM 3
typedef struct
{
TS_task task;
vU8 pending_ch;
}TS_ADC_CH_SWITCH;
typedef struct
{
TS_task task;
vS32 adcval;
vS32 pool;
vS32 sum;
vU8 error;
vU8 ch;
vU8 ch_n;
vU8 n;
}TS_ADC_CH_SAMPLE;
//对每一路进行滤波
typedef struct
{
TS_task task;
vU8 ch;
vU8 ch_n;
//平均滤波
vS32 SA_sum;
vS32 SA_avg;
vS32 SA_n;
//移位滤波
vS32 SHA_sum;
vS32 SHA_avg;
vU8 n;
}TS_ADC_CH_BLUR;
//和值滤波
typedef struct
{
TS_task task;
vU8 n;
vS32 sum;
vS32 SHA_sum_0;
vS32 SHA_avg_0;
vS32 SHA_pool_0[D_ADC_CH_BLUE_POOL_NUM];
vS32 SHA_sum_1;
vS32 SHA_avg_1;
//vS32 SHA_pool_1[D_ADC_CH_BLUE_POOL_NUM];
}TS_ADC_ALL_BLUR;
//和值阈值判定(滤波方式切换)决定输出
#define D_ADC_ALL_OUT_POOL_NUM 5
typedef struct
{
TS_task task;
vS32 val;
vS32 SHA_pool[D_ADC_CH_BLUE_POOL_NUM];
vU32 SHA_diff[D_ADC_CH_BLUE_POOL_NUM-1];
vU32 SHA_ddiff[D_ADC_CH_BLUE_POOL_NUM-2];
vU8 n;
vS32 sum;
}TS_ADC_ALL_OUT;
typedef struct
{
TS_task task;
vS8 pool_gt;
vS32 pool_val;
vS32 val;
vU16 u16_v;
U32 diff_val;
vU8 times[D_weight_show_limit_num];
}TS_ADC_SHOW;
#if 0
typedef struct _TS_ADC_SampleM_
{
//中值滤波
vS32 mid[D_ADC_BLUR_MID_MAX];
vS32 midv;
//均值滤波
vS32 SA_sum;
vS32 SA_avg;
//移位滤波
vS32 SHA_sum;
vS32 SHA_avg;
}TS_ADC_SampleM;
typedef struct
{
TS_task task;
vU8 error;
vU8 m_n;
vU8 a_n;
vU8 ch;
vU8 ch_n;
vU16 u16_v;
TS_ADC_SampleM ts_sample;
}TS_task_ADC_;
#endif
extern TS_ADC_CH_SWITCH ts_adc_ch_switch;
extern TS_ADC_CH_SAMPLE ts_adc_ch_sample[D_ch_max_num];
extern TS_ADC_CH_BLUR ts_adc_ch_blur[D_ch_max_num];
extern TS_ADC_ALL_BLUR ts_adc_all_blur;
extern TS_ADC_ALL_OUT ts_adc_all_out;
extern TS_ADC_SHOW ts_adc_show;
extern void L3_task_adc_init(void);
extern void L3_task_adc_ch_sample(TS_ADC_CH_SAMPLE *s);
extern void L3_task_adc_ch_blur(TS_ADC_CH_BLUR *s);
extern void L3_task_adc_all_blur(TS_ADC_ALL_BLUR *s);
extern void L3_task_adc_all_out(TS_ADC_ALL_OUT *s);
extern void L3_task_adc_show(TS_ADC_SHOW *s);
extern void L3_task_show_times_reset();
#endif

24
source/app/app_task_uart0.c

@ -1,24 +0,0 @@
#include "app_task_uart0.h"
#include "../ctask/tick.h"
#include "../msp/uart0.h"
#include "../msp/time.h"
void L3_task_uart0_modbus_handler(TS_Handle_PH4 *ph4)
{
//timer1 -> 5ms
if(ph4->ok)
{
ph4->ok = 0;
crc16(ph4->crc,ph4->buf,ph4->num - 2);
if(ph4->crc[0] == ph4->buf[ph4->num-2] && ph4->crc[1] == ph4->buf[ph4->num-1])
{
L3_ph4_common_handler((TS_PH4_modbus*)(ph4->buf));
}
else
{
L3_ph4_send_error_pkg(MODBUS_ERR_CRC);
}
}
}

12
source/app/app_task_uart0.h

@ -1,12 +0,0 @@
#ifndef APP_TASK_UART0_H
#define APP_TASK_UART0_H
#include "common.h"
#include "../ctask/task.h"
#include "../tpc/tpc_modbus.h"
//extern void L3_task_uart0_handler(TS_Handle_PH3 *ph3);
extern void L3_task_uart0_modbus_handler(TS_Handle_PH4 *ph4);
#endif

131
source/app/app_ws.c

@ -1,131 +0,0 @@
//////////////////////////////////////////////////////////////////////////
/// COPYRIGHT NOTICE
/// Copyright (c) 2020, 传控科技
/// All rights reserved.
///
/// @file app_flow.c
/// @brief app_flow app
///
///(本文件实现的功能的详述)
///
/// @version 1.1 CCsens technology
/// @author CC
/// @date 20170101
///
///
/// 修订说明:最初版本
/// Modified by:
/// Modified date:
/// Version:
/// Descriptions:
/// 应用流程 一般包括上电时序等
//////////////////////////////////////////////////////////////////////////
#include "app_ws.h"
TS_P_rf433 TS_paer_value=
{
0xaa,///vU8 ha;
// 0xaa,///vU8 hb;
0xad,
0x0123,
// 0x00,///U16 paperNum:12; //12bit纸张数据
///U8 cameraIndex:2; //摄像头编号
///U8 cameraWorking:1; //是否正常工作
///U8 reserved: 1; //保留
0x56,///U8 cameraBoardPower; //电量
0xcc//, 0xaa///vU8 hc;
};
TS_task_FLOW_ ts_task_FLOW;
void L0_p_send(void)
{
unsigned char *p;
TS_paer_value.ha = 0xaa;
// TS_paer_value.hb = 0xaa;
/// TS_paer_value.hc = 0xaa;
/// TS_paer_value.r123.cameraBoardPower ++;
TS_paer_value.filter1 = 0x0a;
///TS_paer_value.r123.cameraBoardPower = s_task_GC032A.buf[2];;
TS_paer_value.r123.cameraIndex = D_cameralIndex;
TS_paer_value.r123.cameraWorking = 0;
TS_paer_value.r123.paperNum = ts_task_ALGO.usPaperNum;
//// L1_cw63xx_sta();///只有等充满电后 才会被清零
TS_paer_value.r123.LowPower = I2CTXD;
// TS_paer_value.r123.paperNum = 0x1234;
p = (unsigned char *)&TS_paer_value.r123;
TS_paer_value.ocr = *p;
p ++;
TS_paer_value.ocr += *p;
p ++;
TS_paer_value.ocr += *p;
// TS_paer_value.ocr = s_task_GC032A.buf[2];
}
void L2_task_FLOW_init(void)
{
L1_task_init(&ts_task_FLOW.task);
L3_task_s_go(ts_task_FLOW,D_task_init);
}
//>>>>>>>>>>>>>>>>>>>>>0开机task
#define D_FLOW_t_stamp 10
void L2_task_FLOW_handle33(TS_task_FLOW_ *s)
{
TTSS_Task_init():
PrintFlow_L0_uart0_uc('F');
ts_task_ALGO.paperMode = D_max;
L0_nos_tick1s_start(s_nos_tick.n_stamp3);
L0_nos_tick1s_interval(s_nos_tick.n_stamp3)
L2_task_go(D_task_FLOW_wakeup);
TTSS_Task_step(D_task_WS_ch):
TTSS_Task_step(D_task_WS_T):////到一定的时间 开始采集温度 进行补偿
if(s_nos_tick.flag_1s2)
{
s_nos_tick.flag_1s2 = 0;
if(L0_nos_tick1s_interval(s_nos_tick.n_stamp3) > 60)
{
L0_nos_tick1s_start(s_nos_tick.n_stamp3);
L0_ADS1213_CH(D_ADCCH_Toff);
L0_ADS1213_CH(D_ADCCH_1);
L2_task_go(D_task_WS_T2);
}else
{
L2_task_go(D_task_WS_ch);
}
}else
{
L2_task_go(D_task_WS_ch);
}
TTSS_Task_step(D_task_WS_T2):
// L0_ADS1213_read();
TTSS_Task_end();
}

72
source/app/app_ws.h

@ -1,72 +0,0 @@
#ifndef _APP_WS_H
#define _APP_WS_H
#include "../clib/Type.h"
#include "../ctask/task.h"
#include "../msp/uart0.h"
#include "../clib/clib.h"
//#include "../debug/debug_drv.h"//
//#include "../msp/msp_plcd.h"
//#include "../msp/SHC6601_rtc.h"
///#include "app_rf.h"
//
#include "../tpc/tpc_uart.h"
#include "../clib/bit.h"
#include "app_algorithm.h"
//>>>>>>>>>>>>>>>>>>>>>0¿ª»útask
///#define D_task_WS_ask 0x56
///#define D_task_WS_enter 0x57
///#define D_task_WS_init 0x10
///#define D_task_OSD_init_key 0x11
///#define D_task_WS_STEP 0x30
///#define D_task_WS_heratbeat 0x70
#define D_task_WS_wait_cam1 0x51
#define D_task_WS_T 0x52
#define D_task_WS_T2 0x62
#define D_task_WS_lowPower 0x53
#define D_task_WS_work 0x5b
#define D_task_WS_cali 0x5c
#define D_task_WS_ch 0x54
#define D_task_WS_cal 0x55
typedef struct
{
TS_task task;
vU8 t_stamp;
vU16 t_stamp2;
vU16 wakeup_timer;
vU8 long_hit;
// vU8 first_run;//
// unsigned char area;//
// unsigned char status;//
// unsigned char key;//
}TS_task_WS_;
extern TS_task_WS_ ts_task_WS;
extern void L2_task_WS_handle(TS_task_WS_ *s);
extern void L2_task_WS_init(void);
extern void L2_task_WS_handle33(TS_task_WS_ *s);
extern TS_P_rf433 TS_paer_value;
//<<<<<<<<<<<<<<<<<<<0¿ª»útask
#endif

287
source/app/common.c

@ -1,287 +0,0 @@
#include "common.h"
//#include "../tpc/tpc_uart.h"
#include "../bsp/bsp_cs1232.h"
#include "../msp/msp_eeprom.h"
#include "../msp/msp_id.h"
struct global_param G;
struct ts_eeprom_param eep_param;
struct ts_eeprom_enc eep_enc;
#define EEP_SECTOR_SIZE 0x200
#define EEP_PARAM_ADDR (EEP_SECTOR_SIZE * 1)
#define EEP_ENC_ADDR (EEP_SECTOR_SIZE * 0)
void L3_eeprom_read_param()
{
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)
{
dlen = eep_param.len - 2;
crc16(eep_param.crc,(U8*)&eep_param,2+dlen);
if(eep_param.crc[0] == eep_param.buf[dlen] && eep_param.crc[1] == eep_param.buf[dlen+1])
{
L0_uart0_uc('#');
//Lc_buf_copy_uc((U8*)&G.p,(U8*)eep_param.buf,dlen);
Lc_buf_copy_uc((U8*)&G.p,(U8*)eep_param.buf,sizeof(G.p));//防止dlen>sizeof(G.P)引起的内存错误
}
}
}
void L3_eeprom_persist_param()
{
U8 dlen = sizeof(G.p);
eep_param.filter = EEPROM_PARAM_FILTER;
eep_param.len = dlen + 2;
Lc_buf_copy_uc((U8*)eep_param.buf,(U8*)&G.p,dlen);
crc16(eep_param.crc, &eep_param, 2+dlen);
eep_param.buf[dlen] = eep_param.crc[0];
eep_param.buf[dlen+1] = eep_param.crc[1];
L0_Iap_Erase(EEP_PARAM_ADDR);
L0_Iap_Program_array(EEP_PARAM_ADDR, (U8*)&eep_param, 2 + dlen + 2);
}
int L3_mcu_id_ok(void)
{
U8 i = 0,crc[2];
U32 enc_key;
//1.获取MCU_ID
L0_id_get_rom(G.e.mcu_id);
for(i=0;i<MCU_ID_LEN;i++)
{
L0_uart0_uchex(G.e.mcu_id[i]);
}
//2.读取eeprom中的加密信息
L0_Iap_Read_array(EEP_ENC_ADDR, (U8*)&eep_enc, MCU_ID_KEY_LEN + MCU_ID_LEN + 2);
crc16(crc,(U8*)&eep_enc,MCU_ID_KEY_LEN + MCU_ID_LEN);
if(eep_enc.crc[0] != crc[0] || eep_enc.crc[1] != crc[1])
{
L0_uart0_uc('-');
return 0;
}
//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_id((U8*)G.e.mcu_enc_id, (U8*)G.e.mcu_id, 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;
}
void L3_reg_reset()
{
U8 i = 0;
//G.p.reset = 0;
G.p.adc_ch_status = ADC_status_ch2_Ready | ADC_status_ch3_Ready | ADC_status_ch4_Ready; //修改采集通道
G.p.slaver_id = P485_SLAVER_ID;
//G.p.zero = 0;
G.p.weight_max = 500; //500kg
G.p.lmd = 2; //2mv/v
G.p.cc_blur_ch_avg = 6;
G.p.cc_blur_ch_shift = 2;
G.p.cc_blur_all_shift0 = 2;
G.p.cc_blur_all_shift1 = 4;
G.p.cc_blur_all_out_d_threshold = 200; //0.2kg
G.p.cc_blur_all_out_dd_threshold = 200; //0.2kg
for(i=0;i<D_weight_show_limit_num;i++)
{
G.p.weight_show_limit[i].weight = 0;
G.p.weight_show_limit[i].times = 0;
}
G.p.weight_show_limit[0].weight = 300; //0.3kg
G.p.weight_show_limit[0].times = 1;
G.p.weight_show_limit[1].weight = 200; //0.2kg
G.p.weight_show_limit[1].times = 9;
G.p.weight_show_limit[2].weight = 100; //0.1kg
G.p.weight_show_limit[2].times = 18;
G.p.weight_show_limit[3].weight = 50; //0.05kg
G.p.weight_show_limit[3].times = 18;
G.p.weight_show_limit[4].weight = 20; //0.02kg
G.p.weight_show_limit[4].times = 30;
for(i=0;i<D_weight_std_num;i++)
{
G.p.weight_std[i].weight_range = 0;
G.p.weight_std[i].ratio = 0;
}
}
void L3_reg_init(void)
{
U8 i = 0;
G.reserved1 = G.reserved2 = G.reserved3 = 0x55;
G.total_weight = G.total_zweight = 0;
L3_reg_reset();
for(i=0;i<D_ch_max_num;i++)
{
G.weight[i] = 0;
}
G._total_weight = 0;
G._total_zweight = 0;
L3_eeprom_read_param();
}
S32 L3_count_std_weight(S32 weight)
{
U8 i = 0;
U16 ratio = 100;
weight = (weight - G._total_zweight)/10;
for(i=0;i<D_weight_std_num;i++)
{
if(G.p.weight_std[i].weight_range == 0 || (G.p.weight_std[i].weight_range * 100) >= weight)
{
break;
}
}
if(i<D_weight_std_num && G.p.weight_std[i].ratio != 0)
{
ratio = G.p.weight_std[i].ratio;
}
return (S32)(weight * 1.0 * ratio / 100) ;
}
U8 L3_pack_PH4(TS_PH4_modbus *pmodbus ,U8 oper, void *buf,U8 bufsize)
{
pmodbus->salver = G.p.slaver_id;
pmodbus->oper = oper;
Lc_buf_copy_uc(pmodbus->buf,buf,bufsize);
crc16(pmodbus->crc,&pmodbus->salver,2 + bufsize);
pmodbus->buf[bufsize] = pmodbus->crc[0];
pmodbus->buf[bufsize + 1] = pmodbus->crc[1];
return bufsize + 2 + 2;
}
int L3_ph4_send_error_pkg(U8 errcode)
{
TS_PH4_modbus modbusack;
U8 modbuslen = 0;
ModbusErrAck modbusErrAck;
modbusErrAck.errcode = errcode;
modbuslen = L3_pack_PH4(&modbusack, MODBUS_OPER_ERR, &modbusErrAck, sizeof(modbusErrAck));
L0_uart0_sendArray((U8*)&modbusack, modbuslen);
return 0;
}
TS_PH4_modbus modbusack;
Modbus03 modbus03;
Modbus03Ack modbus03Ack;
Modbus06 modbus06;
Modbus06Ack modbus06Ack;
Modbus10 modbus10;
Modbus10Ack modbus10Ack;
int L3_ph4_common_handler(TS_PH4_modbus *pmodbus)
{
U8 handlerStatus = TP_HANDLED, modbuslen = 0;
switch(pmodbus->oper)
{
case 0x03:
{
U16 i = 0,j = 0,regval = 0;
modbus03.reg = ((U16)pmodbus->buf[0]) << 8 | ((U16)pmodbus->buf[1]);
modbus03.num = ((U16)pmodbus->buf[2]) << 8 | ((U16)pmodbus->buf[3]);
if((modbus03.num < 5) && (modbus03.reg < sizeof(G)/2)) //每次最多读取4个寄存器 8个字节,以防止越界
{
for(i=0; i<modbus03.num; i++)
{
regval = *(REG_2_MEM(modbus03.reg + i));
modbus03Ack.buf[j++] = regval >> 8 & 0xFF;
modbus03Ack.buf[j++] = regval & 0xFF;
}
modbus03Ack.bytes = modbus03.num * 2;
modbuslen = L3_pack_PH4(&modbusack, 0x03, &modbus03Ack, modbus03Ack.bytes + 1);
L0_uart0_sendArray((U8*)&modbusack, modbuslen);
}
break;
}
case 0x06:
{
modbus06.reg = ((U16)pmodbus->buf[0]) << 8 | ((U16)pmodbus->buf[1]);
modbus06.val = ((U16)pmodbus->buf[2]) << 8 | ((U16)pmodbus->buf[3]);
if(modbus06.reg < sizeof(G)/2)
{
if(modbus06.reg == MEM_2_REG(&G.p.zero))
{
G._total_zweight = G._total_weight;
G.total_zweight = G._total_zweight/10;
G.total_weight = 0;
}
else if(modbus06.reg == MEM_2_REG(&G.p.reset))
{
L3_reg_reset();
}
else
{
*(REG_2_MEM(modbus06.reg)) = modbus06.val;
}
modbus06Ack.reg = modbus06.reg;
modbus06Ack.val = *(REG_2_MEM(modbus06.reg));
modbuslen = L3_pack_PH4(&modbusack, 0x06, &modbus06Ack, 4);
L0_uart0_sendArray((U8*)&modbusack, modbuslen);
}
//重新计算重量
G.total_weight = L3_count_std_weight(G._total_weight);
//持久化
if(modbus06.reg > MEM_2_REG(&G.reserved2) && modbus06.reg < MEM_2_REG(&G.reserved3))
{
L3_eeprom_persist_param();
}
break;
}
case 0x10:
{
U16 i = 0,j = 0,regval = 0;
modbus10.reg = ((U16)pmodbus->buf[0]) << 8 | ((U16)pmodbus->buf[1]);
modbus10.num = ((U16)pmodbus->buf[2]) << 8 | ((U16)pmodbus->buf[3]);
modbus10.count = pmodbus->buf[4];
if((modbus10.num < 21) && (modbus10.reg < sizeof(G)/2)) //每次最多写入20个寄存器 40个字节,以防止越界
{
for(i=0; i<modbus10.num; i++)
{
regval = ((U16)pmodbus->buf[5+i*2]) << 8 | ((U16)pmodbus->buf[5+i*2+1]);
*(REG_2_MEM(modbus10.reg + i)) = regval;
}
modbus10Ack.reg = modbus10.reg;
modbus10Ack.num = modbus10.num;
modbuslen = L3_pack_PH4(&modbusack, 0x10, &modbus10Ack, 4);
L0_uart0_sendArray((U8*)&modbusack, modbuslen);
}
//重新计算重量
G.total_weight = L3_count_std_weight(G._total_weight);
//持久化
if(modbus10.reg > MEM_2_REG(&G.reserved2) && modbus10.reg < MEM_2_REG(&G.reserved3))
{
L3_eeprom_persist_param();
}
break;
}
default:
L3_ph4_send_error_pkg(MODBUS_ERR_OPCODE);
break;
}
return handlerStatus;
}

238
source/app/common.h

@ -1,238 +0,0 @@
#ifndef APP_COMMON_H
#define APP_COMMON_H
#include "../clib/type.h"
#define APP_VERSION 0x10
#define P485_SLAVER_ID 0x01
#define D_MCU_BIGENDIAN 1
// #define D_MCU_LITTLEENDIAN 1
#define D_COUNT_WEIGHT(adc) ((S32)((1000.0 * G.p.weight_max * (adc)) / (2 * 0x7FFFFF / 1000 * D_ADS1213_GAIN_VAL * G.p.lmd)))
enum tp_handle
{
TP_HANDLED,
TP_UNHANDLE
};
/**
* EEPROM
*/
#define EEPROM_PARAM_DATA_MAX 86
#define EEPROM_PARAM_FILTER 0xAA
typedef struct ts_eeprom_param
{
U8 filter;
U8 len;
U8 buf[EEPROM_PARAM_DATA_MAX];
U8 crc[2];
}EEPROM_PARAM;
#define MCU_ID_LEN 7
#define MCU_ID_KEY_LEN 4
#define EEPROM_ENC_DATA_MAX 64
#define EEPROM_ENC_FILTER 0xAA
typedef struct ts_eeprom_enc
{
U8 enc_key[MCU_ID_KEY_LEN];
U8 enc_val[MCU_ID_LEN];
U8 crc[2];
}EEPROM_ENC;
/**
*
*/
enum PROTOCOL_OPER
{
OPER_RESERVED = 0x00,
OPER_READ = 0x01,
OPER_WRITE = 0x02,
OPER_ACK = 0x03,
OPER_REPORT = 0x04,
};
enum MODBUS_OPER
{
MODBUS_OPER_READ = 0x03,
MODBUS_OPER_WRITE = 0x06,
MODBUS_OPER_ERR = 0x8F,
};
enum MODBUS_ERR_CODE
{
MODBUS_ERR_LEN = 0x01,
MODBUS_ERR_CRC = 0x02,
MODBUS_ERR_OPCODE = 0x03,
};
//协议类型: MODBUS RTU模式
//#define D_s_PH4_modbus_max (16)
#define D_s_PH4_modbus_max (64)
typedef struct ts_ph4_modbus
{
U8 salver; //从机地址
U8 oper; //功能码
U8 buf[D_s_PH4_modbus_max];
U8 crc[2];
U8 num;
}TS_PH4_modbus;
typedef struct s_modbus_03
{
U16 reg;
U16 num;
}Modbus03;
typedef struct s_modbus_03_ack
{
U8 bytes;
U8 buf[D_s_PH4_modbus_max-1];
}Modbus03Ack;
typedef struct s_modbus_06
{
U16 reg;
U16 val;
}Modbus06;
typedef struct s_modbus_06_ack
{
U16 reg;
U16 val;
}Modbus06Ack;
typedef struct s_modbus_10
{
U16 reg;
U16 num;
U8 count;
}Modbus10;
typedef struct s_modbus_10_ack
{
U16 reg;
U16 num;
}Modbus10Ack;
typedef struct s_modbus_err_ack
{
U8 errcode;
}ModbusErrAck;
/**
* Register Map
*/
#define D_ch_max_num 4
#define D_weight_std_num 10
#if 0
1 100kg 100%
2 200kg 100%
3 300kg 100%
4 400kg 100%
5 500kg 100%
6 600kg 100%
7 700kg 100%
8 800kg 100%
9 900kg 100%
10 1000kg 100%
#endif
typedef struct weight_stdization
{
S16 weight_range; //量程 x 100
S16 ratio; //重量计算系数,默认100,保留两位小数,相当于x1
}WeightStdization;
#define D_weight_show_limit_num 5
typedef struct weight_show_limit
{
S16 weight;
S16 times;
}WeightShowLimit;
//需要持久化的参数,不能超过72字节,否则会导致eeprom溢出
typedef struct global_param_changable
{
U16 reset; //reset标志,写入任何值,所有参数恢复初始值
U16 adc_ch_status;
S16 slaver_id;
S16 zero; //清0标志,写入任何值清0(去皮)
S16 weight_max; //量程
S16 lmd; //2mv/v
S16 cc_blur_ch_avg; //均值滤波点数
S16 cc_blur_ch_shift; //移位滤波点数
S16 cc_blur_all_shift0; //和值移位滤波点数1
S16 cc_blur_all_shift1; //和值移位滤波点数2
S16 cc_blur_all_out_d_threshold; //移位阈值1
S16 cc_blur_all_out_dd_threshold;//移位阈值2
WeightShowLimit weight_show_limit[D_weight_show_limit_num];
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
{
//RO Register
S16 reserved1;
S32 total_weight; //净重(显示重量)*100
S32 total_zweight; //皮重*100
//RW Register
S16 reserved2;
GlobalNeedPersistParam p;
S16 reserved3;
//EncryptInfo
McuEncryptInfo e;
//Global Variables
S32 weight[D_ch_max_num]; //4路重量
S32 _total_weight; //实际重量*1000
S32 _total_zweight; //实际皮重*1000
}GlobalParam;
#define ADC_status_chx_Ready_BASE 0x01
#define ADC_status_ch1_Ready 0x01
#define ADC_status_ch2_Ready 0x02
#define ADC_status_ch3_Ready 0x04
#define ADC_status_ch4_Ready 0x08
//寄存器内存基地址
#define REG_MEM_BASE ((U16*)(&G)) //寄存器基础地址(本文件外部不应该使用该宏定义)
//变量地址转寄存器
#define MEM_2_REG(mem) (((U16*)(mem) - REG_MEM_BASE) + 1)
//寄存器转变量地址
#define REG_2_MEM(reg) (REG_MEM_BASE + (U16)((reg) - 1))
extern struct global_param G;
extern struct ts_eeprom_param eep_param;
extern struct ts_eeprom_enc eep_enc;
extern void L3_reg_init(void);
extern int L3_ph4_common_handler(TS_PH4_modbus *pmodbus);
extern int L3_ph4_send_error_pkg(U8 errcode);
extern int L3_mcu_id_ok();
extern S32 L3_count_std_weight(S32 weight);
#endif

112
source/app/main.c

@ -79,28 +79,29 @@ stc5ac32s
#include "main.h"
/// main init
/// @param a 被测试的变量(param描述参数)
/// @param s 指向描述测试信息的字符串
/// @return 测试结果(return描述返回值)
/// @see Test() (本函数参考其它的相关的函数,这里作一个链接)
/// @note (note描述需要注意的问题)
void L0_main_init(void)
{
Lc_delay_ms(200);
L0_I2C_INIT(1);
L1_app_POWER_init();
L1_uart0_buf_init();//串口初始化
//Lc_delay_ms(200);
L0_board_config();
L0_uart0_buf_init();//串口初始化
EA = 1;
Lc_delay_ms(100);
//Lc_delay_ms(100);
L1_tick_init();
L0_timer0_Init();
L0_timer1_Init();
L0_I2C_INIT(1);
//L2_task_ALGO_init();
L3_reg_init();
L3_param_init();
L2_485_init();
L0_ADS1213_INIT();
L3_task_adc_init(0);
L3_task_adc_init(1);
L3_task_adc_init(2);
L3_task_adc_init(3);
//L3_task_debug_init();
L3_task_show_init();
L3_task_reglisten_init();
L0_uart0_sendArray("v2.7",4);
}
//===============================================
@ -108,72 +109,39 @@ void L0_main_init(void)
//===============================================
void main(void)
{
//-----------------------------------------------
//系统初始化
//----------------------------------------------
//初始化
L0_main_init();
L3_reg_init();
L2_485_init();
L0_ADS1213_INIT();
L1_s2b_PH4_init(&s_uart0_rec,G.p.slaver_id);
L3_task_adc_init();
L0_uart0_sendArray("v2.6",4);
P35 = 0;//led on
//-----------------------------------------------
//系统主循环
//-----------------------------------------------
#if 1 //看门狗
if(!L3_mcu_id_ok())
{
P35 = 0;
P10 = 0;
while(1)
{
if(1 == s_nos_tick.t1s_heatbeart)
{
s_nos_tick.t1s_heatbeart = 0;
L0_uart0_uc('X');
}
}
}
#endif
//L1_ADS1213_main();
//验证加密信息
//L3_encrypt_handler();
//主循环
while(1)
{
if(1 == s_nos_tick.t1s_heatbeart)
{
s_nos_tick.t1s_heatbeart = 0;
P35 ^= 1;
LED1 ^= 1;
}
//单路采集
L3_task_adc_ch_sample(&ts_adc_ch_sample[0]);
L3_task_adc_ch_sample(&ts_adc_ch_sample[1]);
L3_task_adc_ch_sample(&ts_adc_ch_sample[2]);
L3_task_adc_ch_sample(&ts_adc_ch_sample[3]);
//L1_ADS1213_main();
//单路滤波
L3_task_adc_ch_blur(&ts_adc_ch_blur[0]);
L3_task_adc_ch_blur(&ts_adc_ch_blur[1]);
L3_task_adc_ch_blur(&ts_adc_ch_blur[2]);
L3_task_adc_ch_blur(&ts_adc_ch_blur[3]);
//和值滤波
L3_task_adc_all_blur(&ts_adc_all_blur);
//移位切换输出最终数据
L3_task_adc_all_out(&ts_adc_all_out);
//更新显示数据
L3_task_adc_show(&ts_adc_show);
//单路采集滤波
L3_task_adc_handler(0);
L3_task_adc_handler(1);
L3_task_adc_handler(2);
L3_task_adc_handler(3);
//显示
L3_task_adc_filter_show(&ts_adc_blur_show);
//寄存器值监控
L3_task_reglisten_handle(&s_task_reglisten);
//输出,响应485协议
L3_task_uart0_modbus_handler(&s_uart0_rec);
}
L3_task_modbus_handler(&s_uart0_rec);
//调试输出
//L3_task_debug(&_s_task_debug);
}
}
//end main

58
source/app/main.h

@ -36,61 +36,25 @@
#ifndef _MAIN_H
#define _MAIN_H
#include "../bsp/bsp_config.h"
//#include "../bsp/adxl362.h"
//#include "../msp/stc_adc.h"
#include "../msp/uart0.h"
//#include "../msp/uart2.h"
//#include "../msp/uart4.h"
//#include "../msp/uart3.h"
//#include "../msp/time.h"
//#include "../msp/msp_buzz.h"
//#include "../msp/msp_rtc.h"
//#include "../msp/msp_plcd.h"
#include "../msp/iic_sim.h"
#include "../msp/msp_eeprom.h"
#include "../msp/msp_id.h"
#include "../clib/Clib.h"
#include "../clib/bit.h"
//#include "../debug/debug_drv.h"
//#include "../uartcom/uprotocol.h"
//#include "../uartcom/Uartcom0.h"
#include "../ctask/task.h"
#include "../ctask/tick.h"
//#include "../bsp/bsp_led.h"
#include "../bsp/bsp_power.h"
//#include "../bsp/Bsp_debug.h"
//#include "app_yeelink.h"
#include "app_flow.h"
//#include "app_Gsensor.h"
//#include "app_io.h"
#include "../tpc/tpc_uart.h"
#include "stdio.h"
#include "app_paraid.h"
#include "app_algorithm.h"///
#include "../msp/eeprom.h"
#include "../bsp/bsp_config.h"
#include "../bsp/chipid.h"
#include "../bsp/cs1232.h"
#include "../bsp/rs485.h"
#include "../bsp/bsp_cs1232.h"
#include "../bsp/bsp_485.h"
#include "../app/app_task_uart0.h"
#include "../app/app_task_adc.h"
#include "../app/app_config.h"
#include "../app/task_modbus.h"
#include "../app/task_adc.h"
#include "../app/task_debug.h"
#include "../app/task_register.h"
#include "../app/task_encrypt.h"
//////////////////////////////////////////////////////////////////
#endif //#ifndef _MAIN_H

418
source/app/task_adc.c

@ -0,0 +1,418 @@
////////////////////////////////////////////////////////////////////////////
///@copyright Copyright (c) 2018, 传控科技 All rights reserved.
///-------------------------------------------------------------------------
/// @file bsp_drv.c
/// @brief bsp @ driver config
///-------------------------------------------------------------------------
/// @version 1.0
/// @author CC
/// @date 20180331
/// @note cc_AS_stc02
//////////////////////////////////////////////////////////////////////////////
#include "task_adc.h"
#include "../bsp/bsp_config.h"
#include "../bsp/cs1232.h"
#include "../msp/uart0.h"
//=============================================
//S_TASK_ADC_CHANNEL_BLUR ts_adc_channel_blurs[D_ADC_CHANNEL_NUM];
//S_TASK_ADC_CHANNEL_SHOW ts_adc_channel_show;
S_TASK_ADC_CHANNEL_SAMPLE ts_adc_channel_samples[D_ADC_CHANNEL_NUM];
//S_TASK_ADC_BLUR_MID ts_adc_blur_mid[D_ADC_CHANNEL_NUM];
S_TASK_ADC_BLUR_AVG ts_adc_blur_avg[D_ADC_CHANNEL_NUM];
S_TASK_ADC_BLUR_SHIFT ts_adc_blur_shift[D_ADC_CHANNEL_NUM];
S_TASK_ADC_BLUR_OUT ts_adc_blur_out[D_ADC_CHANNEL_NUM];
S_TASK_ADC_BLUR_SHOW ts_adc_blur_show;
static U8 count_n(u8 n,u8 d)
{
if(n < d)
{
return MAX_OUT_NUM + n - d ;
}
else
{
return n-d;
}
}
U32 Abs(S32 a)
{
if(a < 0)
{
a = -a;
}
return a;
}
//ch是0123,代表4通道
void L3_task_adc_init(U8 ch)
{
//通道采集任务初始化
L1_task_init(&ts_adc_channel_samples[ch].task);
L3_task_s_go(ts_adc_channel_samples[ch],D_task_init);
ts_adc_channel_samples[ch].status = (R.p.adc_ch_status >> ch) & 0x1;
ts_adc_channel_samples[ch].pool = 0;
ts_adc_channel_samples[ch].adcval = 0;
ts_adc_channel_samples[ch].n = 0;
ts_adc_channel_samples[ch].ch = D_ADCCH_1 + ch;
#if 0
//通道中值滤波任务初始化
L1_task_init(&ts_adc_blur_mid[ch].task);
L3_task_s_go(ts_adc_blur_mid[ch],D_task_init);
ts_adc_blur_mid[ch].n = 0;
ts_adc_blur_mid[ch].max = R.p.adc_blur_mid;
ts_adc_blur_mid[ch].ch = D_ADCCH_1 + ch;
#endif
//通道均值滤波任务初始化
L1_task_init(&ts_adc_blur_avg[ch].task);
L3_task_s_go(ts_adc_blur_avg[ch],D_task_init);
ts_adc_blur_avg[ch].max = R.p.adc_blur_avg;
ts_adc_blur_avg[ch].avgval = 0;
ts_adc_blur_avg[ch].n = 0;
ts_adc_blur_avg[ch].ch = D_ADCCH_1 + ch;
//通道移位滤波任务初始化
L1_task_init(&ts_adc_blur_shift[ch].task);
L3_task_s_go(ts_adc_blur_shift[ch],D_task_init);
ts_adc_blur_shift[ch].n = 0;
ts_adc_blur_shift[ch].h = 0;
ts_adc_blur_shift[ch].shiftreg[0] = R.p.adc_blur_shift[0];
ts_adc_blur_shift[ch].shiftreg[1] = R.p.adc_blur_shift[1];
ts_adc_blur_shift[ch].shiftreg[2] = R.p.adc_blur_shift[2];
ts_adc_blur_shift[ch].sum[0] = 0;
ts_adc_blur_shift[ch].sum[1] = 0;
ts_adc_blur_shift[ch].sum[2] = 0;
ts_adc_blur_shift[ch].shiftval[0] = 0;
ts_adc_blur_shift[ch].shiftval[1] = 0;
ts_adc_blur_shift[ch].shiftval[2] = 0;
ts_adc_blur_shift[ch].ch = D_ADCCH_1 + ch;
//输出判定任务初始化
L1_task_init(&ts_adc_blur_out[ch].task);
L3_task_s_go(ts_adc_blur_out[ch],D_task_init);
ts_adc_blur_out[ch].h= 0;
ts_adc_blur_out[ch].threshold[0] = D_COUNT_ADC(R.p.adc_blur_threshold[0]); //2KG
ts_adc_blur_out[ch].threshold[1] = D_COUNT_ADC(R.p.adc_blur_threshold[1]); //0.5KG
ts_adc_blur_out[ch].newnum = 0;
ts_adc_blur_out[ch].oldnum = 0;
ts_adc_blur_out[ch].newout = 0;
ts_adc_blur_out[ch].n = 0;
ts_adc_blur_out[ch].ch = D_ADCCH_1 + ch;
#if 0
//通道切换任务初始化
//L1_task_init(&ts_adc_channel_switch.task);
L3_task_s_go(ts_adc_channel_switch,D_task_init);
#endif
}
void L3_task_show_init(void)
{
//显示任务初始化
L1_task_init(&ts_adc_blur_show.task);
L3_task_s_go(ts_adc_blur_show,D_task_init);
ts_adc_blur_show.rough_weight = 0;
}
//ADC Channel 采样任务
#define D_task_ADC_CHx_SAMPLE_WAIT_LOW 0x53
#define D_task_ADC_CHx_SAMPLE_READ 0x54
#define D_task_ADC_CHx_SAMPLE_OUT 0x55
void L3_task_adc_channel_sample(S_TASK_ADC_CHANNEL_SAMPLE *s)
{
TTSS_Task_init()
L2_task_go(D_task_ADC_CHx_SAMPLE_WAIT_LOW);
TTSS_Task_step(D_task_ADC_CHx_SAMPLE_WAIT_LOW)
if(s->status == ADC_CHANNEL_STATUS_READY) //需要判断status是否ready,ready则读取,否则使用pool值
{
if(0 == L0_2dc_DOUT_AT(s->ch))
{
L2_task_go(D_task_ADC_CHx_SAMPLE_READ);
}
}
else
{
s->adcval = s->pool;
L2_task_go_Tdelay(D_task_ADC_CHx_SAMPLE_OUT,D_Tdelay_Msec(15)); //延时15ms,模拟一次采样过程
}
TTSS_Task_step(D_task_ADC_CHx_SAMPLE_READ)
if(s->status == ADC_CHANNEL_STATUS_READY) //需要重新判断status是否ready,因为channel_switch任务随时可能修改status状态
{
s->adcval = Abs(L0_ADS1231_readCH(s->ch));
L2_task_go(D_task_ADC_CHx_SAMPLE_OUT);
}
else
{
L2_task_go(D_task_ADC_CHx_SAMPLE_WAIT_LOW);
}
TTSS_Task_step(D_task_ADC_CHx_SAMPLE_OUT)
//不判断ready,不管是采集到的真实数据还是pool数据,都继续执行
s->pool = s->adcval;
s->out[s->n] = s->adcval;
//R.adval[s->ch] = s->out[s->n];
//L0_uart0_ulhex(R.adval[s->ch]);L0_uart0_0d0a();
s->n++;
#if 0
L0_uart0_ulhex(s->out[count_n(s->n,1)]);
L0_uart0_uc(' ');
//L0_uart0_ulhex(ts_adc_blur_mid[s->ch].out[count_n(ts_adc_blur_mid[s->ch].n,1)]);
//L0_uart0_uc(' ');
L0_uart0_ulhex(ts_adc_blur_avg[s->ch].out[count_n(ts_adc_blur_avg[s->ch].n,1)]);
L0_uart0_uc(' ');
L0_uart0_ulhex(ts_adc_blur_shift[s->ch].shiftval[0]);
L0_uart0_uc(' ');
L0_uart0_ulhex(ts_adc_blur_shift[s->ch].shiftval[1]);
L0_uart0_uc(' ');
L0_uart0_ulhex(ts_adc_blur_shift[s->ch].shiftval[2]);
L0_uart0_uc(' ');
L0_uart0_ulhex(R.adval[s->ch]);
L0_uart0_uc(' ');
L0_uart0_ulhex(ts_adc_blur_out[s->ch].oldnum);
L0_uart0_0d0a();
#endif
if(s->n >= MAX_OUT_NUM)
{
s->n = 0;
}
L2_task_go(D_task_ADC_CHx_SAMPLE_WAIT_LOW);
TTSS_Task_end();
}
#if 0
//中值滤波任务
#define D_task_ADC_CHx_FILTER_MID_GET 0x50
#define D_task_ADC_CHx_FILTER_MID_COUNT 0x51
#define D_task_ADC_CHx_FILTER_MID_OUT 0x52
void L3_task_adc_filter_mid(S_TASK_ADC_BLUR_MID *s)
{
TTSS_Task_init()
L2_task_go(D_task_ADC_CHx_FILTER_MID_GET);
TTSS_Task_step(D_task_ADC_CHx_FILTER_MID_GET)
if(ts_adc_channel_samples[s->ch].n >= s->max)
{
U8 i = 0;
for(i=0;i<s->max;i++)
{
s->in[i] = ts_adc_channel_samples[s->ch].out[i];
}
ts_adc_channel_samples[s->ch].n = 0;
L2_task_go(D_task_ADC_CHx_FILTER_MID_COUNT);
}
TTSS_Task_step(D_task_ADC_CHx_FILTER_MID_COUNT)
s->midval = Lc_vS32_media(s->in, s->max);
L2_task_go(D_task_ADC_CHx_FILTER_MID_OUT);
TTSS_Task_step(D_task_ADC_CHx_FILTER_MID_OUT)
s->out[s->n] = s->midval;
//R.adval[s->ch] = s->out[s->n];
s->n++;
if(s->n >= MAX_OUT_NUM)
{
s->n = 0;
}
L2_task_go(D_task_ADC_CHx_FILTER_MID_GET);
TTSS_Task_end();
}
#endif
//均值滤波任务
#define D_task_ADC_CHx_FILTER_AVG_GET 0x50
#define D_task_ADC_CHx_FILTER_AVG_COUNT 0x51
#define D_task_ADC_CHx_FILTER_AVG_OUT 0x52
void L3_task_adc_filter_avg(S_TASK_ADC_BLUR_AVG *s)
{
TTSS_Task_init()
L2_task_go(D_task_ADC_CHx_FILTER_AVG_GET);
TTSS_Task_step(D_task_ADC_CHx_FILTER_AVG_GET)
if(ts_adc_channel_samples[s->ch].n >= s->max)
{
U8 i = 0;
ts_adc_channel_samples[s->ch].n = 0;
for(i=0;i<s->max;i++)
{
s->in[i] = ts_adc_channel_samples[s->ch].out[i];
}
L2_task_go(D_task_ADC_CHx_FILTER_AVG_COUNT);
}
TTSS_Task_step(D_task_ADC_CHx_FILTER_AVG_COUNT)
s->avgval = Lc_vU32_avg(s->in,s->max);
L2_task_go(D_task_ADC_CHx_FILTER_AVG_OUT);
TTSS_Task_step(D_task_ADC_CHx_FILTER_AVG_OUT)
s->out[s->n] = s->avgval;
//R.adval[s->ch] = s->out[s->n];
s->n++;
if(s->n >= MAX_OUT_NUM)
{
s->n = 0;
}
L2_task_go(D_task_ADC_CHx_FILTER_AVG_GET);
TTSS_Task_end();
}
//移位滤波任务
#define D_task_ADC_CHx_FILTER_SHIFT_GET 0x50
#define D_task_ADC_CHx_FILTER_SHIFT_COUNT 0x51
#define D_task_ADC_CHx_FILTER_SHIFT_OUT 0x52
void L3_task_adc_filter_shift(S_TASK_ADC_BLUR_SHIFT *s)
{
TTSS_Task_init()
L2_task_go(D_task_ADC_CHx_FILTER_SHIFT_GET);
TTSS_Task_step(D_task_ADC_CHx_FILTER_SHIFT_GET)
if(s->h != ts_adc_blur_avg[s->ch].n)
{
s->in = ts_adc_blur_avg[s->ch].out[count_n(ts_adc_blur_avg[s->ch].n,1)];
s->h = ts_adc_blur_avg[s->ch].n;
L2_task_go(D_task_ADC_CHx_FILTER_SHIFT_COUNT);
}
TTSS_Task_step(D_task_ADC_CHx_FILTER_SHIFT_COUNT)
s->sum[0] -= s->shiftval[0];
s->sum[0] += s->in;
s->shiftval[0] = s->sum[0] >> s->shiftreg[0];
s->sum[1] -= s->shiftval[1];
s->sum[1] += s->in;
s->shiftval[1] = s->sum[1] >> s->shiftreg[1];
s->sum[2] -= s->shiftval[2];
s->sum[2] += s->in;
s->shiftval[2] = s->sum[2] >> s->shiftreg[2];
L2_task_go(D_task_ADC_CHx_FILTER_SHIFT_OUT);
TTSS_Task_step(D_task_ADC_CHx_FILTER_SHIFT_OUT)
s->out[0][s->n] = s->shiftval[0];
s->out[1][s->n] = s->shiftval[1];
s->out[2][s->n] = s->shiftval[2];
//R.adval[s->ch] = s->out[0][s->n] = s->shiftval[0];
s->n++;
if(s->n >= MAX_OUT_NUM)
{
s->n = 0;
}
L2_task_go(D_task_ADC_CHx_FILTER_SHIFT_GET);
TTSS_Task_end();
}
//输出判定任务
#define D_task_ADC_CHx_FILTER_OUT_GET 0x50
#define D_task_ADC_CHx_FILTER_OUT_COUNT 0x51
#define D_task_ADC_CHx_FILTER_OUT_CHANGE 0x52
#define D_task_ADC_CHx_FILTER_OUT_OUT 0x53
void L3_task_adc_filter_out(S_TASK_ADC_BLUR_OUT *s)
{
TTSS_Task_init()
L2_task_go(D_task_ADC_CHx_FILTER_OUT_GET);
TTSS_Task_step(D_task_ADC_CHx_FILTER_OUT_GET)
if(s->h != ts_adc_blur_shift[s->ch].n)
{
s->h = ts_adc_blur_shift[s->ch].n;
s->in[0] = ts_adc_blur_avg[s->ch].out[count_n(ts_adc_blur_avg[s->ch].n, 1)];
s->in[1] = ts_adc_blur_avg[s->ch].out[count_n(ts_adc_blur_avg[s->ch].n, 2)];
//获取输出曲线val
s->newout = ts_adc_blur_shift[s->ch].out[s->oldnum][count_n(ts_adc_blur_shift[s->ch].n, 1)];
L2_task_go(D_task_ADC_CHx_FILTER_OUT_COUNT);
}
TTSS_Task_step(D_task_ADC_CHx_FILTER_OUT_COUNT) //根据阀值选择输出的曲线
//判断选择新曲线
if(Lc_abs(s->in[0] , s->in[1]) >= s->threshold[0])//2KG
{
s->newnum = 0;
}
else if(Lc_abs(s->in[0] , s->in[1]) >= s->threshold[1]) //0.5KG
{
s->newnum = 1;
}
else
{
s->newnum = 2;
}
//L2_task_go(D_task_ADC_CHx_FILTER_OUT_OUT);
L2_task_go(D_task_ADC_CHx_FILTER_OUT_CHANGE);
TTSS_Task_step(D_task_ADC_CHx_FILTER_OUT_CHANGE)
if(s->newnum != s->oldnum)//切换移位滤波时调整其他滤波的SUM
{
s->oldnum = s->newnum; //不能只调整新值,所有曲线都要一起调整
//ts_adc_blur_shift[s->ch].sum[1] = (ts_adc_blur_avg[s->ch].out[ts_adc_blur_avg[s->ch].n] * R.adc_blur_avg);
ts_adc_blur_shift[s->ch].sum[0] = s->newout << ts_adc_blur_shift[s->ch].shiftreg[0];
ts_adc_blur_shift[s->ch].shiftval[0] = s->newout;
ts_adc_blur_shift[s->ch].sum[1] = s->newout << ts_adc_blur_shift[s->ch].shiftreg[1];
ts_adc_blur_shift[s->ch].shiftval[1] = s->newout;
ts_adc_blur_shift[s->ch].sum[2] = s->newout << ts_adc_blur_shift[s->ch].shiftreg[2];
ts_adc_blur_shift[s->ch].shiftval[2] = s->newout;
}
L2_task_go(D_task_ADC_CHx_FILTER_OUT_OUT);
TTSS_Task_step(D_task_ADC_CHx_FILTER_OUT_OUT)
R.adval[s->ch] = s->newout;
//R.adval[s->ch] = ts_adc_channel_samples[s->ch].adcval;
L2_task_go(D_task_ADC_CHx_FILTER_OUT_GET);
TTSS_Task_end();
}
//显示任务
#define D_task_ADC_CHx_SHOW 0x50
void L3_task_adc_filter_show(S_TASK_ADC_BLUR_SHOW *s)
{
TTSS_Task_init()
L2_task_go(D_task_ADC_CHx_SHOW);
TTSS_Task_step(D_task_ADC_CHx_SHOW)
R.ch_weight[0] = D_COUNT_WEIGHT(R.adval[0]);
R.ch_weight[1] = D_COUNT_WEIGHT(R.adval[1]);
R.ch_weight[2] = D_COUNT_WEIGHT(R.adval[2]);
R.ch_weight[3] = D_COUNT_WEIGHT(R.adval[3]);
s->rough_weight = R.ch_weight[0] + R.ch_weight[1] + R.ch_weight[2] + R.ch_weight[3]; //毛重
if( ABS(R.rough_weight,s->rough_weight) >= 50) //变化超过0.05KG
{
R.rough_weight = s->rough_weight;
R.total_weight = (R.rough_weight > R.total_zweight) ? (R.rough_weight - R.total_zweight) : (0);//净重
}
L2_task_go_Tdelay(D_task_ADC_CHx_SHOW,D_Tdelay_Msec(15)); //延时15ms
TTSS_Task_end();
}
void L3_task_adc_handler(u8 ch)
{
L3_task_adc_channel_sample(&ts_adc_channel_samples[ch]);
//L3_task_adc_filter_mid(&ts_adc_blur_mid[ch]);
L3_task_adc_filter_avg(&ts_adc_blur_avg[ch]);
L3_task_adc_filter_shift(&ts_adc_blur_shift[ch]);
L3_task_adc_filter_out(&ts_adc_blur_out[ch]);
}

119
source/app/task_adc.h

@ -0,0 +1,119 @@
////////////////////////////////////////////////////////////////////////////
///@copyright Copyright (c) 2018, 传控科技 All rights reserved.
///-------------------------------------------------------------------------
/// @file bsp_drv.h
/// @brief bsp @ driver config
///-------------------------------------------------------------------------
/// @version 1.0
/// @author CC
/// @date 20180331
/// @note cc_AS_stc02
//////////////////////////////////////////////////////////////////////////////
#ifndef _APP_TASK_ADC_H
#define _APP_TASK_ADC_H
#include "../app/app_config.h"
#include "../ctask/task.h"
#include "../clib/clib.h"
#define ADC_CHANNEL_STATUS_UNREADY 0 //UnReady状态,不能读取
#define ADC_CHANNEL_STATUS_READY 1 //ready状态,可以读取
//AD_CHANNEL_SAMPLE 采样
#define MAX_OUT_NUM 6
typedef struct _s_task_adc_channel_sample
{
TS_task task;
vU8 status;
vU8 ch;
vU32 adcval;
vU32 pool;
vU8 n;
vU32 out[MAX_OUT_NUM];
}S_TASK_ADC_CHANNEL_SAMPLE;
//AD_BLUR_MID 中值滤波
typedef struct _s_task_adc_blur_mid
{
TS_task task;
vU8 ch;
vU8 max;
vU32 in[MAX_OUT_NUM];
vU32 midval;
vU8 n;
vU32 out[MAX_OUT_NUM];
}S_TASK_ADC_BLUR_MID;
//AD_BLUR_AVG 均值滤波
typedef struct _s_task_adc_blur_avg
{
TS_task task;
vU8 ch;
vU8 max;
vU32 in[MAX_OUT_NUM];
vU32 avgval;
vU8 n;
vU32 out[MAX_OUT_NUM];
}S_TASK_ADC_BLUR_AVG;
//AD_BLUR_SHIFT 移位滤波
typedef struct _s_task_adc_blur_shift
{
TS_task task;
vU8 ch;
vU8 n;
vU8 h;
vU8 shiftreg[3];
//vU8 max;
vU32 in;
vU32 sum[3];
vU32 shiftval[3];
vU32 out[3][MAX_OUT_NUM];
}S_TASK_ADC_BLUR_SHIFT;
//AD_BLUR_DECIDE 输出判定
typedef struct _s_task_adc_blur_out
{
TS_task task;
vU8 ch;
vU32 in[2];
U32 threshold[2];
vU8 h;
vU8 oldnum;
vU8 newnum;
vU32 newout;
vU8 n;
}S_TASK_ADC_BLUR_OUT;
//AD_BLUR_SHOW 显示
typedef struct _s_task_adc_blur_show
{
TS_task task;
vU32 rough_weight;
}S_TASK_ADC_BLUR_SHOW;
extern S_TASK_ADC_CHANNEL_SAMPLE ts_adc_channel_samples[D_ADC_CHANNEL_NUM];
//extern S_TASK_ADC_BLUR_MID ts_adc_blur_mid[D_ADC_CHANNEL_NUM];
extern S_TASK_ADC_BLUR_AVG ts_adc_blur_avg[D_ADC_CHANNEL_NUM];
extern S_TASK_ADC_BLUR_SHIFT ts_adc_blur_shift[D_ADC_CHANNEL_NUM];
extern S_TASK_ADC_BLUR_OUT ts_adc_blur_out[D_ADC_CHANNEL_NUM];
extern S_TASK_ADC_BLUR_SHOW ts_adc_blur_show;
extern void L3_task_adc_init(U8 ch);
extern void L3_task_show_init(void);
extern void L3_task_adc_handler(U8 ch);
extern void L3_task_adc_init_handler(void);
extern void L3_task_adc_channel_switch_handler(void);
extern void L3_task_adc_filter_show(S_TASK_ADC_BLUR_SHOW *s);
#endif // #ifndef _APP_TASK_ADC_H

51
source/app/task_debug.c

@ -0,0 +1,51 @@
////////////////////////////////////////////////////////////////////////////
///@copyright Copyright (c) 2018, 传控科技 All rights reserved.
///-------------------------------------------------------------------------
/// @file bsp_drv.c
/// @brief bsp @ driver config
///-------------------------------------------------------------------------
/// @version 1.0
/// @author CC
/// @date 20180331
/// @note cc_AS_stc02
//////////////////////////////////////////////////////////////////////////////
#include "task_debug.h"
#include "../app/app_config.h"
#include "../bsp/bsp_config.h"
#include "../msp/uart0.h"
S_TASK_DEBUG _s_task_debug;
//=============================================
void L3_task_debug_init(void)
{
L1_task_init(&_s_task_debug.task);
L3_task_s_go(_s_task_debug,D_task_init);
}
#define D_task_ADC_CHx_DEBUG 0x53
void L3_task_debug(S_TASK_DEBUG *s)
{
TTSS_Task_init()
L2_task_go(D_task_ADC_CHx_DEBUG);
TTSS_Task_step(D_task_ADC_CHx_DEBUG)
/* L0_uart0_ulhex(R.adval[0]);
L0_uart0_uc(' ');
L0_uart0_ulhex(R.adval[1]);
L0_uart0_uc(' ');
L0_uart0_ulhex(R.adval[2]);
L0_uart0_uc(' ');
L0_uart0_ulhex(R.adval[3]);
L0_uart0_uc(' ');*/
L0_uart0_ulhex(R.total_weight);
L0_uart0_0d0a();
L2_task_go_Tdelay(D_task_ADC_CHx_DEBUG,D_Tdelay_Msec(15)); //延时15ms
TTSS_Task_end();
}

30
source/bsp/bsp_debug.h → source/app/task_debug.h

@ -1,5 +1,5 @@
////////////////////////////////////////////////////////////////////////////
///@copyright Copyright (c) 2018, ´«¿Ø¿Æ¼¼ All rights reserved.
///@copyright Copyright (c) 2018, 传控科技 All rights reserved.
///-------------------------------------------------------------------------
/// @file bsp_drv.h
/// @brief bsp @ driver config
@ -11,26 +11,22 @@
//////////////////////////////////////////////////////////////////////////////
#ifndef _bsp_debug_H
#define _bsp_debug_H
#ifndef _APP_TASK_DEBUG_H
#define _APP_TASK_DEBUG_H
#include "../bsp/bsp_config.h"
#include "../ctask/task.h"
#include "../clib/clib.h"
#include "../tpc/tpc_uart.h"
#include "../msp/uart0.h"
#define TS_debug_MAX 6
typedef struct
typedef struct _s_task_debug
{
vU8 add;
void (*p2fun)(U8 *pPara);
}TS_debug_;
TS_task task;
}S_TASK_DEBUG;
extern S_TASK_DEBUG _s_task_debug;
extern void L3_debug_exp_protocol(TS_Handle_PH1 *p);
//extern void L3_UARTcom0_exp_protocol(void);
extern TS_debug_ volatile ts_debug[TS_debug_MAX];
extern void L3_task_debug_init(void);
extern void L3_task_debug(S_TASK_DEBUG *s);
#endif // #ifndef _bsp_drv_H
#endif // #ifndef _APP_TASK_ADC_H

78
source/app/task_encrypt.c

@ -0,0 +1,78 @@
////////////////////////////////////////////////////////////////////////////
///@copyright Copyright (c) 2018, 传控科技 All rights reserved.
///-------------------------------------------------------------------------
/// @file bsp_drv.c
/// @brief bsp @ driver config
///-------------------------------------------------------------------------
/// @version 1.0
/// @author CC
/// @date 20180331
/// @note cc_AS_stc02
//////////////////////////////////////////////////////////////////////////////
#include "task_encrypt.h"
#include "../bsp/bsp_config.h"
#include "../msp/uart0.h"
#include "../msp/eeprom.h"
#include "../bsp/chipid.h"
struct ts_eeprom_enc eep_enc;
struct mcu_encrypt_info enc_info;
/**
*
* @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(enc_info.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*)enc_info.mcu_enc_id, (U8*)enc_info.mcu_id, eep_enc.enc_key, MCU_ID_LEN);
#if 1
//4.判断enc_val是否一致
for(i=0;i<MCU_ID_KEY_LEN;i++)
{
if(enc_info.mcu_enc_id[i] != eep_enc.enc_val[i])
{
return 0;
}
}
#endif
return 1;
}
void L3_encrypt_handler(void)
{
#if(D_CODE_ENCRYPTION_TYPE == TYPE_ENCRYPTION_ENABLE)
if(L3_mcu_id_ok())
{
return;
}
while(1)
{
L0_uart0_sendstr("X");
D_sys_delay_msec(1000);
}
#endif
}

52
source/app/task_encrypt.h

@ -0,0 +1,52 @@
////////////////////////////////////////////////////////////////////////////
///@copyright Copyright (c) 2018, 传控科技 All rights reserved.
///-------------------------------------------------------------------------
/// @file bsp_drv.h
/// @brief bsp @ driver config
///-------------------------------------------------------------------------
/// @version 1.0
/// @author CC
/// @date 20180331
/// @note cc_AS_stc02
//////////////////////////////////////////////////////////////////////////////
#ifndef _APP_TASK_ENCRYPT_H
#define _APP_TASK_ENCRYPT_H
#include "../app/app_config.h"
#include "../ctask/task.h"
#include "../clib/clib.h"
//STEP 2 >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>Encryption CONFIG
#define MCU_ID_LEN 7
#define MCU_ID_KEY_LEN 4
#define EEPROM_ENC_DATA_MAX 64
#define EEPROM_ENC_FILTER 0xAA
typedef struct ts_eeprom_enc
{
U8 enc_key[MCU_ID_KEY_LEN];
U8 enc_val[MCU_ID_LEN];
//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;
extern struct ts_eeprom_enc eep_enc;
extern struct mcu_encrypt_info enc_info;
//STEP 2 <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<Encryption CONFIG End
extern int L3_mcu_id_ok(void);
extern void L3_encrypt_handler(void);
#endif // #ifndef _APP_TASK_ADC_H

196
source/app/task_modbus.c

@ -0,0 +1,196 @@
#include "task_modbus.h"
#include "../msp/uart0.h"
#include "../tpc/modbus.h"
#include "../app/app_config.h"
U8 L3_pack_modbus_03(TS_PH4_modbus *pmodbus ,U8 slaverId, U16 reg, U16 num)
{
U8 bufsize = 4;
pmodbus->slaver = slaverId;
pmodbus->oper = MODBUS_OPER_READ;
pmodbus->buf[0] = reg >> 8 & 0xFF;
pmodbus->buf[1] = reg >> 0 & 0xFF;
pmodbus->buf[2] = num >> 8 * 0xFF;
pmodbus->buf[3] = num >> 0 & 0xFF;
crc16(pmodbus->crc,&pmodbus->slaver,2 + bufsize);
pmodbus->buf[bufsize] = pmodbus->crc[0];
pmodbus->buf[bufsize + 1] = pmodbus->crc[1];
return bufsize + 2 + 2;
}
U8 L3_pack_modbus_06(TS_PH4_modbus *pmodbus ,U8 slaverId, U16 reg, U8 *buf)
{
U8 bufsize = 4;
pmodbus->slaver = slaverId;
pmodbus->oper = MODBUS_OPER_WRITE;
pmodbus->buf[0] = reg >> 8 & 0xFF;
pmodbus->buf[1] = reg >> 0 & 0xFF;
pmodbus->buf[2] = buf[0];
pmodbus->buf[3] = buf[1];
crc16(pmodbus->crc,&pmodbus->slaver,2 + bufsize);
pmodbus->buf[bufsize] = pmodbus->crc[0];
pmodbus->buf[bufsize + 1] = pmodbus->crc[1];
return bufsize + 2 + 2;
}
U8 L3_pack_modbus_10(TS_PH4_modbus *pmodbus ,U8 slaverId, U16 reg, U16 num, U8 bytes, U8 *buf)
{
U8 bufsize = 5,i = 0;
pmodbus->slaver = slaverId;
pmodbus->oper = MODBUS_OPER_WRITE_M;
pmodbus->buf[0] = reg >> 8 & 0xFF;
pmodbus->buf[1] = reg >> 0 & 0xFF;
pmodbus->buf[2] = num >> 8 * 0xFF;
pmodbus->buf[3] = num >> 0 & 0xFF;
pmodbus->buf[4] = bytes;
for(i=0;i<bytes;i++)
{
pmodbus->buf[5+i] = buf[i];
}
crc16(pmodbus->crc,&pmodbus->slaver,2 + bufsize + bytes);
pmodbus->buf[bufsize + bytes] = pmodbus->crc[0];
pmodbus->buf[bufsize + bytes + 1] = pmodbus->crc[1];
return bufsize + bytes + 2 + 2;
}
U8 L3_pack_modbus(TS_PH4_modbus *pmodbus, MD_SLAVER_INFO *slaver_info)
{
switch(slaver_info->oper)
{
case MODBUS_OPER_READ:
return L3_pack_modbus_03(pmodbus,slaver_info->slaver,slaver_info->reg,slaver_info->regnum);
case MODBUS_OPER_WRITE:
return L3_pack_modbus_06(pmodbus,slaver_info->slaver,slaver_info->reg,slaver_info->buf);
case MODBUS_OPER_WRITE_M:
return L3_pack_modbus_10(pmodbus,slaver_info->slaver,slaver_info->reg,slaver_info->regnum,slaver_info->bytes,slaver_info->buf);
default:
return 0;
}
}
U8 L3_pack_modbusack(TS_PH4_modbus *pmodbus ,U8 slaver, U8 oper, U8 bufsize)
{
pmodbus->slaver = slaver;
pmodbus->oper = oper;
crc16(pmodbus->crc,&pmodbus->slaver,2 + bufsize);
pmodbus->buf[bufsize] = pmodbus->crc[0];
pmodbus->buf[bufsize + 1] = pmodbus->crc[1];
return bufsize + 2 + 2;
}
//MODBUS从设备数据处理函数
static Modbus03Ack *pModbus03Ack;
static Modbus06Ack *pModbus06Ack;
static Modbus10Ack *pModbus10Ack;
static U16 modbuslen = 0,reg,num,val,count;
U16 L3_modbus_slaver_ack(TS_PH4_modbus *pmodbus,TS_PH4_modbus *pModbusAck)
{
switch(pmodbus->oper)
{
case MODBUS_OPER_READ:
case MODBUS_OPER_READCONFIG:
{
U16 i = 0,j = 0,regval = 0;
pModbus03Ack = (Modbus03Ack *)pModbusAck->buf;
reg = ((U16)pmodbus->buf[0]) << 8 | ((U16)pmodbus->buf[1]);
num = ((U16)pmodbus->buf[2]) << 8 | ((U16)pmodbus->buf[3]);
if((num <= D_MODBUS_REG_MAX_NUM) && (reg <= sizeof(R)/2)) //每次最多读取D_MODBUS_REG_MAX_NUM个寄存器.防止越界
{
for(i=0; i<num; i++)
{
regval = *(REG_2_MEM(reg + i));
pModbus03Ack->buf[j++] = regval >> 8 & 0xFF;
pModbus03Ack->buf[j++] = regval & 0xFF;
}
pModbus03Ack->bytes = num * 2;
modbuslen = L3_pack_modbusack(pModbusAck, pmodbus->slaver, pmodbus->oper, pModbus03Ack->bytes + 1);
}
break;
}
#if 0
case MODBUS_OPER_WRITE:
{
pModbus06Ack = (Modbus06Ack *)pModbusAck->buf;
reg = ((U16)pmodbus->buf[0]) << 8 | ((U16)pmodbus->buf[1]);
val = ((U16)pmodbus->buf[2]) << 8 | ((U16)pmodbus->buf[3]);
if(reg <= sizeof(R)/2)
{
*(REG_2_MEM(reg)) = val;
pModbus06Ack->reg = reg;
pModbus06Ack->val = *(REG_2_MEM(reg));
modbuslen = L3_pack_modbusack(pModbusAck, pmodbus->slaver, pmodbus->oper, 4);
}
break;
}
#endif
case MODBUS_OPER_WRITE_M:
{
U16 i = 0;
pModbus10Ack = (Modbus10Ack *)pModbusAck->buf;
reg = ((U16)pmodbus->buf[0]) << 8 | ((U16)pmodbus->buf[1]);
num = ((U16)pmodbus->buf[2]) << 8 | ((U16)pmodbus->buf[3]);
count = pmodbus->buf[4];
if((num <= D_MODBUS_REG_MAX_NUM) && (reg < sizeof(R)/2)) //每次最多写入20个寄存器 40个字节,以防止越界
{
for(i=0; i<num; i++)
{
*(REG_2_MEM(reg + i)) = ((U16)pmodbus->buf[5+i*2]) << 8 | ((U16)pmodbus->buf[5+i*2+1]);
}
pModbus10Ack->reg = reg;
pModbus10Ack->num = num;
modbuslen = L3_pack_modbusack(pModbusAck, pmodbus->slaver, pmodbus->oper, 4);
}
break;
}
default:break;
}
return modbuslen;
}
//MODBUS主设备轮询时,从设备返回数据处理函数
//MD_SLAVER_INFO需要被正确定义
void L3_modbus_master_handler(TS_PH4_modbus *pmodbus,MD_SLAVER_INFO *p_slaver_info)
{
switch(pmodbus->oper)
{
case MODBUS_OPER_READ:
case MODBUS_OPER_READCONFIG:
{
U8 i = 0;
for(i=0;i<pmodbus->buf[0];i++)
{
//此处假设字节序一致
p_slaver_info->buf[i] = pmodbus->buf[i + 1];
//TODO 字节序不一致时的处理
}
break;
}
case MODBUS_OPER_WRITE:
case MODBUS_OPER_WRITE_M:
default: break;
}
}
void L3_task_modbus_handler(TP_Handler_X *ph4)
{
if(ph4->ok)
{
TS_PH4_modbus *ts_modbus = (TS_PH4_modbus *)ph4->buf;
//L0_uart0_sendArray(ph4->buf, 8);
//L0_uart0_sendArray("abcdefgh", 8);
ph4->ok = 0;
if(ts_modbus->slaver == R.p.slaver_id || ts_modbus->slaver == D_UART0_485_SLAVER_ID_BROADCAST) //从机
{
U16 acklen = L3_modbus_slaver_ack(ts_modbus,&s_uart0_ack);
L0_uart0_sendArray((U8*)&s_uart0_ack, acklen);
}
}
}

9
source/app/task_modbus.h

@ -0,0 +1,9 @@
#ifndef APP_TASK_UART0_H
#define APP_TASK_UART0_H
#include "../ctask/task.h"
#include "../tpc/modbus.h"
extern void L3_task_modbus_handler(TP_Handler_X *ph4);
#endif

63
source/app/task_register.c

@ -0,0 +1,63 @@
////////////////////////////////////////////////////////////////////////////
///@copyright Copyright (c) 2018, 传控科技 All rights reserved.
///-------------------------------------------------------------------------
/// @file bsp_drv.c
/// @brief bsp @ driver config
///-------------------------------------------------------------------------
/// @version 1.0
/// @author CC
/// @date 20180331
/// @note cc_AS_stc02
//////////////////////////////////////////////////////////////////////////////
#include "task_register.h"
#include "../app/app_config.h"
#include "../bsp/bsp_config.h"
#include "../msp/uart0.h"
//=============================================
S_TASK_REGVAL_LISTEN s_task_reglisten;
void L3_task_reglisten_init(void)
{
L1_task_init(&s_task_reglisten.task);
L3_task_s_go(s_task_reglisten,D_task_init);
}
//清零任务
#define D_task_WEIGHT_COUNT 0x50
#define D_task_IAP 0x51
void L3_task_reglisten_handle(S_TASK_REGVAL_LISTEN *s)
{
TTSS_Task_init()
L2_task_go(D_task_WEIGHT_COUNT);
TTSS_Task_step(D_task_WEIGHT_COUNT)
if(R.zero != 0)
{
R.total_zweight = R.rough_weight; //皮重 = 毛重
R.total_weight = (R.rough_weight > R.total_zweight) ? (R.rough_weight - R.total_zweight) : (0);//净重
R.zero = 0;
}
L2_task_go(D_task_IAP); //延时100ms
TTSS_Task_step(D_task_IAP)
if(R.status_eep_save != 0)
{
R.status_eep_save = 0;
L3_reg_2_iap();//写入IAP
}
L2_task_go_Tdelay(D_task_WEIGHT_COUNT,D_Tdelay_Msec(100)); //延时100ms
TTSS_Task_end();
}

32
source/app/task_register.h

@ -0,0 +1,32 @@
////////////////////////////////////////////////////////////////////////////
///@copyright Copyright (c) 2018, 传控科技 All rights reserved.
///-------------------------------------------------------------------------
/// @file bsp_drv.h
/// @brief bsp @ driver config
///-------------------------------------------------------------------------
/// @version 1.0
/// @author CC
/// @date 20180331
/// @note cc_AS_stc02
//////////////////////////////////////////////////////////////////////////////
#ifndef _APP_TASK_REG_H
#define _APP_TASK_REG_H
#include "../ctask/task.h"
#include "../clib/clib.h"
typedef struct _s_task_reglisten
{
TS_task task;
}S_TASK_REGVAL_LISTEN;
extern S_TASK_REGVAL_LISTEN s_task_reglisten;
extern void L3_task_reglisten_init(void);
extern void L3_task_reglisten_handle(S_TASK_REGVAL_LISTEN *s);
#endif // #ifndef _APP_TASK_ADC_H

BIN
source/bsp/backu/bsp2019低功耗采样line版本 20200301073727.rar

Binary file not shown.

34
source/bsp/backu/bsp_433.c

@ -1,34 +0,0 @@
////////////////////////////////////////////////////////////////////////////
///@copyright Copyright (c) 2018, ´«¿Ø¿Æ¼¼ All rights reserved.
///-------------------------------------------------------------------------
/// @file APP_433.c
/// @brief APP_POWER driver app µçÔ´¹ÜÀí
///-------------------------------------------------------------------------
/// @version 1.0
/// @author CC
/// @date 20181010
/// @note cc_AS_stc01
//////////////////////////////////////////////////////////////////////////////
/******************************************************************************/
/***************************** Include Files **********************************/
/******************************************************************************/
//#include "app_Gsensor.h"
#include "bsp_433.h"
////L0_uart0_sendArray( (unsigned char *)&TS_paer_value,5);

19
source/bsp/backu/bsp_433.h

@ -1,19 +0,0 @@
////////////////////////////////////////////////////////////////////////////
///@copyright Copyright (c) 2018, ´«¿Ø¿Æ¼¼ All rights reserved.
///-------------------------------------------------------------------------
/// @file APP_433.c
/// @brief APP_POWER driver app µçÔ´¹ÜÀí
///-------------------------------------------------------------------------
/// @version 1.0
/// @author CC
/// @date 20181010
/// @note cc_AS_stc01
//////////////////////////////////////////////////////////////////////////////
#ifndef _BSP_433_H
#define _BSP_433_H
#include "../msp/uart0.h"
#endif // #ifndef _BSP_433_H

574
source/bsp/backu/bsp_cam - 副本 (2).c

@ -1,574 +0,0 @@
////////////////////////////////////////////////////////////////////////////
///@copyright Copyright (c) 2018, 传控科技 All rights reserved.
///-------------------------------------------------------------------------
/// @file bsp_gc6133.c.c
/// @brief bsp @ driver config
///-------------------------------------------------------------------------
/// @version 1.0
/// @author CC
/// @date 20180331
/// @note cc_AS_stc02
//////////////////////////////////////////////////////////////////////////////
#include "Bsp_debug.h"
#include "bsp_func.h"
#include "bsp_power.h"
#include "bsp_cam_isr.h"
#include "bsp_cam.h"
#include "../msp/uart0.h"
#include "cw63xx.h"
#include "../clib/Clib.h"
#include "../clib/bit.h"
#include "../msp/time.h"
TS_P_rf433 TS_paer_value=
{
0xaa,///vU8 ha;
// 0xaa,///vU8 hb;
0xad,
0x0123,
// 0x00,///U16 paperNum:12; //12bit纸张数据
///U8 cameraIndex:2; //摄像头编号
///U8 cameraWorking:1; //是否正常工作
///U8 reserved: 1; //保留
0x56,///U8 cameraBoardPower; //电量
0xcc//, 0xaa///vU8 hc;
};
void GC032A_port_init(void)
{
///00 准双向口 灌电流20mA 拉电流270-150uS
///01 推挽输出 20mA 加限流
///10 高阻
///11 开漏 open-Drain 内部上拉电阻断开 开漏模式既可以度外部状态也可以对外输出高低电平
//p3.6 --HSYNC
// BITN_0(P3M1,BITN6);BITN_0(P3M0,BITN6);
///P3.7 -- VSYNC
// BITN_0(P3M1,BITN7);BITN_0(P3M0,BITN7);
L0_GC032A_standby();
D_cam_AVDD_on();
}
////>>>>>>>>>>>>>>>>>>>>>_s_task_GC032A_>>>>>>>>>>>>>>>>>>>>>>
struct _s_task_GC032A_ s_task_GC032A;
void L2_task_GC032A_init(void)
{
L0_cam_isr_init();
L1_task_init(&s_task_GC032A.task);
///L3_task_s_go(s_task_GC032A,D_task_init);
s_task_GC032A.next_line = D_clear;
s_task_GC032A.run = D_run;
s_task_GC032A.line_get = D_clear;
s_task_GC032A.cal_ok = D_clear;
s_task_GC032A.frames = 0;
s_task_GC032A.vs_ok = D_clear;
s_task_GC032A.line_en = D_ON;
s_task_GC032A.cal_en = D_OFF;
/// D_HSYNCS_open();//BITN_1(INT_CLKO, INT_EX2);//使能INT2中断
}
#if 10
///// get
void L2_task_GC032A_handle(struct _s_task_GC032A_ *s)
{
TTSS_Task_init();
//PWDN引脚拉低(0 -- 正常工作,1 -- 休眠)
L0_GC032A_standby();
L0_uart0_uc('2');
L2_task_go(D_task_GC032A_init_DVDD);
TTSS_Task_step(D_task_GC032A_init_DVDD);
L0_GC032A_work();
//IOVDD上电,并延时50us以上;
D_cam_DVDD_on();
// L0_uart0_uc('3');
L2_task_go(D_task_GC032A_init_AVDD);
//L1_task_Tdelay(D_Tdelay_10ms);
TTSS_Task_step(D_task_GC032A_init_AVDD);
//AVDD28上电,并延时0us以上
D_cam_AVDD_on();
L0_uart0_uc('4');
L2_task_go(D_task_GC032A_init_pwdn);
TTSS_Task_step(D_task_GC032A_init_pwdn);
//提供032A系统频率
/// L0_MCLKO_init(D_ON);
//L0_uart0_uc('n');
//PWDN引脚拉高,延时,拉低
L0_GC032A_standby();DL0_WDT();//
L2_task_go(D_task_GC032A_init_pwdn_wait);
L1_task_Tdelay(D_Tdelay_10ms);
TTSS_Task_step(D_task_GC032A_init_pwdn_wait);
L0_GC032A_work();
GC032a_L0_uart0_uc('5');/// Lc_delay_ms(20);
gRccUs03 = 0;
// L0_GC032A_write(GC6133_init_reg_tbl[gRccUs03][0],GC6133_init_reg_tbl[gRccUs03][1]);///
L2_task_go(D_task_GC032A_write_reg);
//L2_task_go(0);
L1_task_Tdelay(D_Tdelay_10ms);
TTSS_Task_step(D_task_GC032A_write_reg);
//设置摄像头参数 大约2s时间
if(0 != GC6133_init_reg_tbl[gRccUs03][0])
{
//GC032a_L0_uart0_uc('k');
L0_GC032A_write(GC6133_init_reg_tbl[gRccUs03][0],GC6133_init_reg_tbl[gRccUs03][1]);///
gRccUs03 ++;
}else
{
L2_task_go(D_task_GC032A_div);
///L1_task_Tdelay(D_Tdelay_500ms);
L1_task_Tdelay(D_Tdelay_1s);///重要 这个时间很关键aaaaaa
}
TTSS_Task_step(D_task_GC032A_div);
//L0_GC032A_write(0xfc,0x02); //复位??
L0_GC032A_write(0xf8,0x03);/// 恢复分频
L0_GC032A_write(0xfa,D_0xfa);DL0_WDT();//
GC032a_L0_uart0_uc('6');
L2_task_go(D_task_GC032A_start_time);
///------------------------------------------------------cam init over
///------------------------------------------------------cam init over
///------------------------------------------------------cam init over
////等待 其他任务的启动后才工作
TTSS_Task_step(D_task_GC032A_start_time);
D_cam_led_on();D_VSYNCS_open();
L1_GC032A_sleep(D_wakeup);
GC032a_L0_uart0_uc('7');
/// s->one_line_ok = D_clear;D_ledb_OFF();
L2_task_go(D_task_GC032A_led);
TTSS_Task_step(D_task_GC032A_led);
///vs /```24.8ms````\__________________________..1.16s...____________________________/````````\___________
///cam_led ```````````\_________________________________________________________/`````````````````\____
if(D_ready == s->vs_ok)///为了关灯
{
s_task_GC032A.vs_ok = D_clear;
D_cam_led_off(); GC032a_L0_uart0_uc('D');
L2_task_go(D_task_GC032A_wait);
}
TTSS_Task_step(D_task_GC032A_wait);////>>>>>>>>>>>>>>>>>>>>>>>---
///捕获到需要的行
if(D_ready == s->line_get)
{DL0_WDT();//
s->line_get = D_clear;
/// 1.standby
/// D_cam_led_off();
if(D_ON == s->line_en)
{
GC032a_L0_uart0_uc(0xfe);
GC032a_L0_uart0_uc(0xfd);
D_send_us(DR_pclk_n);
//D_send_us(s->lines);
L2_task_go(D_task_GC032A_send_line);
}else
{
L2_task_go(D_task_GC032A_cal);
}
L1_task_Tdelay(D_Tdelay_10ms);
}
TTSS_Task_step(D_task_GC032A_send_line);
if(D_uart0_free())
{
L0_uart0_sendArraylong(s->buf,0,199);
L2_task_go(D_task_GC032A_send2);
}
TTSS_Task_step(D_task_GC032A_send2);
if(D_uart0_free())
{
L0_uart0_sendArraylong(s->buf,200,399);
L2_task_go(D_task_GC032A_send3);
}
TTSS_Task_step(D_task_GC032A_send3);
if(D_uart0_free())
{
L0_uart0_sendArraylong(s->buf,400,599);
L2_task_go(D_task_GC032A_send4);
}
TTSS_Task_step(D_task_GC032A_send4);
if(D_uart0_free())
{
L0_uart0_sendArraylong(s->buf,600,639);
L2_task_go(D_task_GC032A_send5);
}
TTSS_Task_step(D_task_GC032A_send5);
if(D_uart0_free())
{
// 'fe','fd','fd','fc'
// GC032a_L0_uart0_uc(0xfd);
// GC032a_L0_uart0_uc(0xfc);
L2_task_go(D_task_GC032A_line1);
//L2_task_go(D_task_GC032A_sleep);
}
TTSS_Task_step(D_task_GC032A_line1)
for(gRccUs03 = 1;gRccUs03 < 568;gRccUs03 ++)
{
if((s->buf[gRccUs03 - 1] == 0)&&
(s->buf[gRccUs03] == 1))//// _/``上升沿
{
if(s->buf[gRccUs03 + 1] == 0)
{//_/`\_ 尖峰需要过滤
}else
{// ___/````上升沿开始高电平
s->up_point = gRccUs03;
}
}else if((s->buf[gRccUs03 - 1] == 1)&&
(s->buf[gRccUs03] == 0))//// ``\_ 下降沿
{
s->down_point = gRccUs03;
}else
{
}
}
L2_task_go(D_task_GC032A_line2);
TTSS_Task_step(D_task_GC032A_line2)
D_send_us(s->up_point);
D_send_us(s->down_point);
D_send_us(s->down_point - s->up_point);
// DR_pdata_n =0;
// 'fe','fd','fd','fc'
GC032a_L0_uart0_uc(0xfd);
GC032a_L0_uart0_uc(0xfc);
if(D_ON == s->cal_en)
{
L2_task_go(D_task_GC032A_cal);
}else
{
L2_task_go(D_task_GC032A_sleep);
}
TTSS_Task_step(D_task_GC032A_cal)
GC032a_L0_uart0_uc('8');//2.1ms
L2_task_go(D_task_GC032A_sleep);
TTSS_Task_step(D_task_GC032A_sample);
///20181007本想调试成 分段的led 不通过vs 关断 但是发现不好调整
///采样的时候led打开照亮
D_cam_led_on();GC032a_L0_uart0_uc('`');
L2_task_go(D_task_GC032A_sleep);
// L1_task_Tdelay(D_Tdelay_500ms+6);
TTSS_Task_step(D_task_GC032A_sleep);
/// 收到外部命令run后 决定进入睡眠状态 ,低功耗处理
////CAL 10MS 433 10MS 总共20ms / 1160ms/vs 取行数消耗10ms
/////1160-10 - 20 = 1130ms
/// GC032a_L0_uart0_uc(0x88);
if(D_run == s->run)
{
GC032a_L0_uart0_uc('9');//2.1ms
L2_task_go(D_task_GC032A_led);
L1_task_Tdelay(D_Tdelay_10ms);
}else
{
D_cam_led_off();
L1_GC032A_sleep(D_sleep);
L2_task_go(0);
}
///<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
TTSS_Task_end();
}
#else
///// get
void L2_task_GC032A_handle(struct _s_task_GC032A_ *s)
{
TTSS_Task_init();
//PWDN引脚拉低(0 -- 正常工作,1 -- 休眠)
L0_GC032A_standby();
L0_uart0_uc('2');
L2_task_go(D_task_GC032A_init_DVDD);
TTSS_Task_step(D_task_GC032A_init_DVDD);
L0_GC032A_work();
//IOVDD上电,并延时50us以上;
D_cam_DVDD_on();
// L0_uart0_uc('3');
L2_task_go(D_task_GC032A_init_AVDD);
//L1_task_Tdelay(D_Tdelay_10ms);
TTSS_Task_step(D_task_GC032A_init_AVDD);
//AVDD28上电,并延时0us以上
D_cam_AVDD_on();
L0_uart0_uc('4');
L2_task_go(D_task_GC032A_init_pwdn);
TTSS_Task_step(D_task_GC032A_init_pwdn);
//提供032A系统频率
/// L0_MCLKO_init(D_ON);
//L0_uart0_uc('n');
//PWDN引脚拉高,延时,拉低
L0_GC032A_standby();DL0_WDT();//
L2_task_go(D_task_GC032A_init_pwdn_wait);
L1_task_Tdelay(D_Tdelay_10ms);
TTSS_Task_step(D_task_GC032A_init_pwdn_wait);
L0_GC032A_work();
GC032a_L0_uart0_uc('5');/// Lc_delay_ms(20);
gRccUs03 = 0;
// L0_GC032A_write(GC6133_init_reg_tbl[gRccUs03][0],GC6133_init_reg_tbl[gRccUs03][1]);///
L2_task_go(D_task_GC032A_write_reg);
//L2_task_go(0);
L1_task_Tdelay(D_Tdelay_10ms);
TTSS_Task_step(D_task_GC032A_write_reg);
//设置摄像头参数 大约2s时间
if(0 != GC6133_init_reg_tbl[gRccUs03][0])
{
//GC032a_L0_uart0_uc('k');
L0_GC032A_write(GC6133_init_reg_tbl[gRccUs03][0],GC6133_init_reg_tbl[gRccUs03][1]);///
gRccUs03 ++;
}else
{
L2_task_go(D_task_GC032A_div);
///L1_task_Tdelay(D_Tdelay_500ms);
L1_task_Tdelay(D_Tdelay_1s);///重要 这个时间很关键aaaaaa
}
TTSS_Task_step(D_task_GC032A_div);
//L0_GC032A_write(0xfc,0x02); //复位??
L0_GC032A_write(0xf8,0x03);/// 恢复分频
L0_GC032A_write(0xfa,D_0xfa);DL0_WDT();//
GC032a_L0_uart0_uc('6');
L2_task_go(D_task_GC032A_start_time);
///------------------------------------------------------cam init over
///------------------------------------------------------cam init over
///------------------------------------------------------cam init over
////等待 其他任务的启动后才工作
TTSS_Task_step(D_task_GC032A_start_time);
D_cam_led_on();D_VSYNCS_open();
L1_GC032A_sleep(D_wakeup);
GC032a_L0_uart0_uc('7');
/// s->one_line_ok = D_clear;D_ledb_OFF();
L2_task_go(D_task_GC032A_led);
TTSS_Task_step(D_task_GC032A_led);
///vs /```24.8ms````\__________________________..1.16s...____________________________/````````\___________
///cam_led ```````````\_________________________________________________________/`````````````````\____
if(D_ready == s->vs_ok)///为了关灯
{
s_task_GC032A.vs_ok = D_clear;
D_cam_led_off(); GC032a_L0_uart0_uc('_');
L2_task_go(D_task_GC032A_wait);
}
TTSS_Task_step(D_task_GC032A_wait);////>>>>>>>>>>>>>>>>>>>>>>>---
///捕获到需要的行
if(1 == s->line_get)
{DL0_WDT();//
s->line_get = 0;
L2_task_go(D_task_GC032A_cal);//// 单行计算
}
TTSS_Task_step(D_task_GC032A_cal);
///计算一个 line的数据
///D_txd4_wakeup();
///GC032a_L0_uart0_uc(0xd); GC032a_L0_uart0_uc(0xa);//
s->buf[D_pclk_per_hs + 1] =s->buf[30];
///GC032a_L0_uart0_uchex(s->buf[D_pclk_per_hs + 1]);
gRccUs04 = 0;
for(gRccUs03 = 0;gRccUs03 < D_pclk_per_hs_2;gRccUs03 ++)
{ //s->buf[gRccUs03] = 0x10;
//debug 开关 显示当前收到的数据
//L0_uart0_uc(s->buf[gRccUs03]);
if(s->buf[gRccUs03] >= 0x10)
{
s->buf[gRccUs03] -= 0x10;
}
s->buf[gRccUs03] >>= 1;
gRccUs04 += s->buf[gRccUs03];
}
gRccUs04 >>= 2;//gRccUs04 >>= 4;
TS_paer_value.r123.paperNum = gRccUs04;
///GC032a_L0_uart0_uchex((unsigned char)(gRccUs04>>8));
s_task_GC032A.cal_ok = D_ready;
L2_task_go(D_task_GC032A_sample);/// 发送完成延时后开始采样,
L1_task_Tdelay(D_Tdelay_300ms); //700=1a 600=1e 500 21 400 25 300 26
TTSS_Task_step(D_task_GC032A_sample);
///20181007本想调试成 分段的led 不通过vs 关断 但是发现不好调整
///采样的时候led打开照亮
D_cam_led_on();GC032a_L0_uart0_uc('`');
L2_task_go(D_task_GC032A_sleep);
// L1_task_Tdelay(D_Tdelay_500ms+6);
TTSS_Task_step(D_task_GC032A_sleep);
/// 收到外部命令run后 决定进入睡眠状态 ,低功耗处理
////CAL 10MS 433 10MS 总共20ms / 1160ms/vs 取行数消耗10ms
/////1160-10 - 20 = 1130ms
/// GC032a_L0_uart0_uc(0x88);
if(D_run == s->run)
{
GC032a_L0_uart0_uc('r');//2.1ms
L2_task_go(D_task_GC032A_led);
}else
{
D_cam_led_off();
L1_GC032A_sleep(D_sleep);
L2_task_go(0);
}
///<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
TTSS_Task_end();
}
#endif
void L1_GC032A_sleep(unsigned char onf)
{///FE 15 Fd 33 44//standby
///FE 05 Fd 33 44//wakeup
if(D_sleep == onf)
{
GC032a_L0_uart0_uc('L');
/// 进入standby:
L0_GC032A_write(0xfc,0x03); L0_GC032A_write(0xf7,0x00); L0_GC032A_write(0xf9,0xcf); L0_GC032A_write(0xf3,0x00);
Lc_delay_nop(30);
Lc_delay_nop(30);
/// D_cam_AVDD_off();
// D_cam_led_off();
}else
{
GC032a_L0_uart0_uc('X');
/// 退出standby:
L0_GC032A_write(0xfc,0x02); L0_GC032A_write(0xf7,0x01); L0_GC032A_write(0xf9,0xce); L0_GC032A_write(0xf3,0xff);
/// D_cam_led_on();
}
}
#if 10
void L3_GC032A_fun(U8 *pPara)
{
}
#else
//// fe 01 reg data 0cx
/// Ac 01 02 03 ocr ---bsp_debug.c
/// p.cmd p.R2 p.R3 p.ocr
///Ac 00 03 01 00/// ACC_X[13:6]
void L3_GC032A_fun(U8 *pPara)
{
U8 i,val[2];
// unsigned short j;
TS_P_debug *p = pPara;
switch(p->cmd)
{
case 0x01:
///AE 01 FE 33 44 // L0_GC032A_read(0xFE,&i,1); 读取当前页面
///AE 01 F0 33 44 // L0_GC032A_read(0xF0,&i,1); 读取id i= 0x23
L0_GC032A_read(p->R2,&i,1);
L0_uart0_uc(i);
break;
//修改摄像头配置参数
case 0x02:
/// fe 02 r2 r3 xx 设置寄存器(r2) = r3
/// sysreg FE 02 FE 01 44 //设置当前页面01
L0_GC032A_write(p->R2,p->R3);
L0_uart0_uc(p->R2);
L0_uart0_uc(p->R3);
break;
//启动摄像头进行拍照;
case 0x03:/// sysreg FE 03 03 04 05 //设置是否发送一line数据(数据分为一帧=640Line = 640line*480pclk )
///AE 03 01 33 44 //s_task_GC032A.line_onf = 01
///AE 03 00 33 44 //s_task_GC032A.line_onf = 00
s_task_GC032A.line_onf = p->R2;
L0_uart0_uc(0x30|s_task_GC032A.line_onf);
break;
case 0x05:
///AE 05 01 33 44 //进入 standby
///AE 05 00 33 44 //退出 standby
L1_GC032A_sleep(p->R2);
L0_uart0_uc(0x30|s_task_GC032A.line_onf);
break;
case 6:///AE 06 22 33 44
D_cam_led_off();
break;
case 7:///AE 07 22 33 44
D_cam_led_on();
break;
/*******************
case 0x00:
L0_GC032A_read(p->R2,val,p->R3);
L0_uart0_uc(p->cmd);
L0_uart0_uc(p->R2);
L0_uart0_uc(p->R3);
L0_uart0_uc('G');
for(i = 0;i < p->R3;i++)
{
L0_uart0_uc(val[i]);
}
break;
//读取摄像头配置参数
case 0x35:
L0_GC032A_standby();// led 17.1-16.9ma standby 6.2ma
L0_uart0_uc(0x31);
break;
case 0x36:
/// 退出standby:
L0_GC032A_work();
L0_uart0_uc(0x30);
break;
****************************/
default:
break;
};
}
#endif
#if 0
FE 02 88 15 10 13 11 15 11 16 12 14 11 15 12 16 12 16 14 17 13 17 13 16 13 16 12 16 13 16 12 18
14 15 12 15 13 15 12 16 14 15 13 15 12 15 13 16 14 18 14 17 13 16 10 16 15 1A 15 22 2D 3A 3F 47
41 53 5E 63 65 69 6C 6F 71 7A 72 73 75 7A 7B 7E 7D 82 85 8B 8F 90 8F 93 96 9A 9D 9A 97 98 96 99
9A 9B 9A 9C 9E 9F 9F 9D 9A 9A 99 9C 9B 9B 9A 9A 9B 9C 9D 9F 9F A0 A1 A2 A3 A2 A2 A3 A1 A3 A4 A4
A4 A4 A3 A3 A2 A2 A3 A5 A6 A7 A8 A7 A6 A6 A5 A6 A6 A8 AA AA AA AA AA AB AB AB AC AC AB AC AC AD
AF AE AD AD AC AC AB AC AC AD AD AE AE AE AF AD AE AE AD AE AE AE AE AE AF AF AF AF AF AF B0 B1
B1 B1 B2 B1 B1 B1 B1 B1 B1 B2 B2 B2 B3 B2 B2 B2 B3 B3 B3 B4 B4 B4 B4 B4 B4 B4 B4 B4 B4 B4 B4 B5
B4 B5 B6 B5 B5 B4 B4 B4 B3 B4 B5 B5 B5 B5 B5 B5 B5 B5 B5 B5 B5 B5 B6 B6 B5 B6 B6 B6 B6 B6 B6 B6
B6 B6 B6 B6 B6 B6 B6 B6 B7 B6 B6 B7 B6 B7 B7 B7 B7 B7 B7 B7 B7 B7 B7 B7 B7 B7 B7 B7 B7 B7 B7 B7
B8 B7 B7 B8 B8 B7 B8 B8 B7 B8 B9 B8 B8 B8 B7 B7 B7 B7 B7 B7 B7 B7 B7 B7 B7 B7 B7 B8 B7 B7 B8 B8
B8 B8 B8 B8 B8 B8 B7 B7 B7 B7 B8 B8 B9 B8 B9 B8 B8 B8 B8 B7 B7 B7 B7 B7 B8 B8 B8 B8 B8 B8 B8 B8
B9 B8 B8 B8 B8 B9 BA B8 B8 B8 B7 B8 B8 B8 B8 B8 B8 B8 B9 B8 B7 B7 B7 B7 B7 B7 B6 B6 B7 B7 B7 B7
B7 B7 B7 B8 B8 B8 B8 B8 B8 B8 B8 B8 B9 B9 B9 B8 B9 B8 B8 B9 BA B9 B8 B8 B8 B8 B9 B8 B9 B8 B8 B8
B8 B8 B9 B9 B8 B9 B9 B9 B9 B8 B8 B8 B8 B8 B8 B8 B8 B8 B8 B8 B8 B9 B9 B8 B9 B9 B9 B9 B9 B9 BA B9
B9 B9 B9 B9 B8 B9 B9 B9 B9 B9 B9 B9 B8 B9 B9 B9 B9 B9 B9 B9 B9 B9 BB B9 B9 B9 B9 B9 B9 B9 BA BA
BB B9 B8 B8 B8 B8 B8 B9 B9 BA BA B9 BA B9 B9 B9 B9 B9 B8 B8 B8 B8 B9 B9 B9 B9 BA BA BB B9 B9 B9
B9 B9 B9 B9 B9 B9 B9 B9 B9 B9 B9 B9 BA B9 B9 B9 B9 BA BA BB BB BA BB BA B9 B9 B9 B9 B9 B9 B9 BA
BB BA BA BA BA B9 B8 B8 B8 B8 B8 B9 B9 BA BB BB BB BA BA B9 B9 B9 B9 B9 BA fd fc
#endif

574
source/bsp/backu/bsp_cam - 副本.c

@ -1,574 +0,0 @@
////////////////////////////////////////////////////////////////////////////
///@copyright Copyright (c) 2018, 传控科技 All rights reserved.
///-------------------------------------------------------------------------
/// @file bsp_gc6133.c.c
/// @brief bsp @ driver config
///-------------------------------------------------------------------------
/// @version 1.0
/// @author CC
/// @date 20180331
/// @note cc_AS_stc02
//////////////////////////////////////////////////////////////////////////////
#include "Bsp_debug.h"
#include "bsp_func.h"
#include "bsp_power.h"
#include "bsp_cam_isr.h"
#include "bsp_cam.h"
#include "../msp/uart0.h"
#include "cw63xx.h"
#include "../clib/Clib.h"
#include "../clib/bit.h"
#include "../msp/time.h"
TS_P_rf433 TS_paer_value=
{
0xaa,///vU8 ha;
// 0xaa,///vU8 hb;
0xad,
0x0123,
// 0x00,///U16 paperNum:12; //12bit纸张数据
///U8 cameraIndex:2; //摄像头编号
///U8 cameraWorking:1; //是否正常工作
///U8 reserved: 1; //保留
0x56,///U8 cameraBoardPower; //电量
0xcc//, 0xaa///vU8 hc;
};
void GC032A_port_init(void)
{
///00 准双向口 灌电流20mA 拉电流270-150uS
///01 推挽输出 20mA 加限流
///10 高阻
///11 开漏 open-Drain 内部上拉电阻断开 开漏模式既可以度外部状态也可以对外输出高低电平
//p3.6 --HSYNC
// BITN_0(P3M1,BITN6);BITN_0(P3M0,BITN6);
///P3.7 -- VSYNC
// BITN_0(P3M1,BITN7);BITN_0(P3M0,BITN7);
L0_GC032A_standby();
D_cam_AVDD_on();
}
////>>>>>>>>>>>>>>>>>>>>>_s_task_GC032A_>>>>>>>>>>>>>>>>>>>>>>
struct _s_task_GC032A_ s_task_GC032A;
void L2_task_GC032A_init(void)
{
L0_cam_isr_init();
L1_task_init(&s_task_GC032A.task);
///L3_task_s_go(s_task_GC032A,D_task_init);
s_task_GC032A.next_line = D_clear;
s_task_GC032A.run = D_run;
s_task_GC032A.line_get = D_clear;
s_task_GC032A.cal_ok = D_clear;
s_task_GC032A.frames = 0;
s_task_GC032A.vs_ok = D_clear;
s_task_GC032A.line_en = D_ON;
s_task_GC032A.cal_en = D_OFF;
/// D_HSYNCS_open();//BITN_1(INT_CLKO, INT_EX2);//使能INT2中断
}
#if 10
///// get
void L2_task_GC032A_handle(struct _s_task_GC032A_ *s)
{
TTSS_Task_init();
//PWDN引脚拉低(0 -- 正常工作,1 -- 休眠)
L0_GC032A_standby();
L0_uart0_uc('2');
L2_task_go(D_task_GC032A_init_DVDD);
TTSS_Task_step(D_task_GC032A_init_DVDD);
L0_GC032A_work();
//IOVDD上电,并延时50us以上;
D_cam_DVDD_on();
// L0_uart0_uc('3');
L2_task_go(D_task_GC032A_init_AVDD);
//L1_task_Tdelay(D_Tdelay_10ms);
TTSS_Task_step(D_task_GC032A_init_AVDD);
//AVDD28上电,并延时0us以上
D_cam_AVDD_on();
L0_uart0_uc('4');
L2_task_go(D_task_GC032A_init_pwdn);
TTSS_Task_step(D_task_GC032A_init_pwdn);
//提供032A系统频率
/// L0_MCLKO_init(D_ON);
//L0_uart0_uc('n');
//PWDN引脚拉高,延时,拉低
L0_GC032A_standby();DL0_WDT();//
L2_task_go(D_task_GC032A_init_pwdn_wait);
L1_task_Tdelay(D_Tdelay_10ms);
TTSS_Task_step(D_task_GC032A_init_pwdn_wait);
L0_GC032A_work();
GC032a_L0_uart0_uc('5');/// Lc_delay_ms(20);
gRccUs03 = 0;
// L0_GC032A_write(GC6133_init_reg_tbl[gRccUs03][0],GC6133_init_reg_tbl[gRccUs03][1]);///
L2_task_go(D_task_GC032A_write_reg);
//L2_task_go(0);
L1_task_Tdelay(D_Tdelay_10ms);
TTSS_Task_step(D_task_GC032A_write_reg);
//设置摄像头参数 大约2s时间
if(0 != GC6133_init_reg_tbl[gRccUs03][0])
{
//GC032a_L0_uart0_uc('k');
L0_GC032A_write(GC6133_init_reg_tbl[gRccUs03][0],GC6133_init_reg_tbl[gRccUs03][1]);///
gRccUs03 ++;
}else
{
L2_task_go(D_task_GC032A_div);
///L1_task_Tdelay(D_Tdelay_500ms);
L1_task_Tdelay(D_Tdelay_1s);///重要 这个时间很关键aaaaaa
}
TTSS_Task_step(D_task_GC032A_div);
//L0_GC032A_write(0xfc,0x02); //复位??
L0_GC032A_write(0xf8,0x03);/// 恢复分频
L0_GC032A_write(0xfa,D_0xfa);DL0_WDT();//
GC032a_L0_uart0_uc('6');
L2_task_go(D_task_GC032A_start_time);
///------------------------------------------------------cam init over
///------------------------------------------------------cam init over
///------------------------------------------------------cam init over
////等待 其他任务的启动后才工作
TTSS_Task_step(D_task_GC032A_start_time);
D_cam_led_on();D_VSYNCS_open();
L1_GC032A_sleep(D_wakeup);
GC032a_L0_uart0_uc('7');
/// s->one_line_ok = D_clear;D_ledb_OFF();
L2_task_go(D_task_GC032A_led);
TTSS_Task_step(D_task_GC032A_led);
///vs /```24.8ms````\__________________________..1.16s...____________________________/````````\___________
///cam_led ```````````\_________________________________________________________/`````````````````\____
if(D_ready == s->vs_ok)///为了关灯
{
s_task_GC032A.vs_ok = D_clear;
D_cam_led_off(); GC032a_L0_uart0_uc('D');
L2_task_go(D_task_GC032A_wait);
}
TTSS_Task_step(D_task_GC032A_wait);////>>>>>>>>>>>>>>>>>>>>>>>---
///捕获到需要的行
if(D_ready == s->line_get)
{DL0_WDT();//
s->line_get = D_clear;
/// 1.standby
/// D_cam_led_off();
if(D_ON == s->line_en)
{
GC032a_L0_uart0_uc(0xfe);
GC032a_L0_uart0_uc(0xfd);
D_send_us(DR_pclk_n);
//D_send_us(s->lines);
L2_task_go(D_task_GC032A_send_line);
}else
{
L2_task_go(D_task_GC032A_cal);
}
L1_task_Tdelay(D_Tdelay_10ms);
}
TTSS_Task_step(D_task_GC032A_send_line);
if(D_uart0_free())
{
L0_uart0_sendArraylong(s->buf,0,199);
L2_task_go(D_task_GC032A_send2);
}
TTSS_Task_step(D_task_GC032A_send2);
if(D_uart0_free())
{
L0_uart0_sendArraylong(s->buf,200,399);
L2_task_go(D_task_GC032A_send3);
}
TTSS_Task_step(D_task_GC032A_send3);
if(D_uart0_free())
{
L0_uart0_sendArraylong(s->buf,400,509);
L2_task_go(D_task_GC032A_send5);
}
TTSS_Task_step(D_task_GC032A_send4);
if(D_uart0_free())
{
L0_uart0_sendArraylong(s->buf,600,639);
L2_task_go(D_task_GC032A_send5);
}
TTSS_Task_step(D_task_GC032A_send5);
if(D_uart0_free())
{
// 'fe','fd','fd','fc'
// GC032a_L0_uart0_uc(0xfd);
// GC032a_L0_uart0_uc(0xfc);
L2_task_go(D_task_GC032A_line1);
//L2_task_go(D_task_GC032A_sleep);
}
TTSS_Task_step(D_task_GC032A_line1)
for(gRccUs03 = 1;gRccUs03 < 568;gRccUs03 ++)
{
if((s->buf[gRccUs03 - 1] == 0)&&
(s->buf[gRccUs03] == 1))//// _/``上升沿
{
if(s->buf[gRccUs03 + 1] == 0)
{//_/`\_ 尖峰需要过滤
}else
{// ___/````上升沿开始高电平
s->up_point = gRccUs03;
}
}else if((s->buf[gRccUs03 - 1] == 1)&&
(s->buf[gRccUs03] == 0))//// ``\_ 下降沿
{
s->down_point = gRccUs03;
}else
{
}
}
L2_task_go(D_task_GC032A_line2);
TTSS_Task_step(D_task_GC032A_line2)
D_send_us(s->up_point);
D_send_us(s->down_point);
D_send_us(s->down_point - s->up_point);
// DR_pdata_n =0;
// 'fe','fd','fd','fc'
GC032a_L0_uart0_uc(0xfd);
GC032a_L0_uart0_uc(0xfc);
if(D_ON == s->cal_en)
{
L2_task_go(D_task_GC032A_cal);
}else
{
L2_task_go(D_task_GC032A_sleep);
}
TTSS_Task_step(D_task_GC032A_cal)
GC032a_L0_uart0_uc('8');//2.1ms
L2_task_go(D_task_GC032A_sleep);
TTSS_Task_step(D_task_GC032A_sample);
///20181007本想调试成 分段的led 不通过vs 关断 但是发现不好调整
///采样的时候led打开照亮
D_cam_led_on();GC032a_L0_uart0_uc('`');
L2_task_go(D_task_GC032A_sleep);
// L1_task_Tdelay(D_Tdelay_500ms+6);
TTSS_Task_step(D_task_GC032A_sleep);
/// 收到外部命令run后 决定进入睡眠状态 ,低功耗处理
////CAL 10MS 433 10MS 总共20ms / 1160ms/vs 取行数消耗10ms
/////1160-10 - 20 = 1130ms
/// GC032a_L0_uart0_uc(0x88);
if(D_run == s->run)
{
GC032a_L0_uart0_uc('9');//2.1ms
L2_task_go(D_task_GC032A_led);
L1_task_Tdelay(D_Tdelay_10ms);
}else
{
D_cam_led_off();
L1_GC032A_sleep(D_sleep);
L2_task_go(0);
}
///<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
TTSS_Task_end();
}
#else
///// get
void L2_task_GC032A_handle(struct _s_task_GC032A_ *s)
{
TTSS_Task_init();
//PWDN引脚拉低(0 -- 正常工作,1 -- 休眠)
L0_GC032A_standby();
L0_uart0_uc('2');
L2_task_go(D_task_GC032A_init_DVDD);
TTSS_Task_step(D_task_GC032A_init_DVDD);
L0_GC032A_work();
//IOVDD上电,并延时50us以上;
D_cam_DVDD_on();
// L0_uart0_uc('3');
L2_task_go(D_task_GC032A_init_AVDD);
//L1_task_Tdelay(D_Tdelay_10ms);
TTSS_Task_step(D_task_GC032A_init_AVDD);
//AVDD28上电,并延时0us以上
D_cam_AVDD_on();
L0_uart0_uc('4');
L2_task_go(D_task_GC032A_init_pwdn);
TTSS_Task_step(D_task_GC032A_init_pwdn);
//提供032A系统频率
/// L0_MCLKO_init(D_ON);
//L0_uart0_uc('n');
//PWDN引脚拉高,延时,拉低
L0_GC032A_standby();DL0_WDT();//
L2_task_go(D_task_GC032A_init_pwdn_wait);
L1_task_Tdelay(D_Tdelay_10ms);
TTSS_Task_step(D_task_GC032A_init_pwdn_wait);
L0_GC032A_work();
GC032a_L0_uart0_uc('5');/// Lc_delay_ms(20);
gRccUs03 = 0;
// L0_GC032A_write(GC6133_init_reg_tbl[gRccUs03][0],GC6133_init_reg_tbl[gRccUs03][1]);///
L2_task_go(D_task_GC032A_write_reg);
//L2_task_go(0);
L1_task_Tdelay(D_Tdelay_10ms);
TTSS_Task_step(D_task_GC032A_write_reg);
//设置摄像头参数 大约2s时间
if(0 != GC6133_init_reg_tbl[gRccUs03][0])
{
//GC032a_L0_uart0_uc('k');
L0_GC032A_write(GC6133_init_reg_tbl[gRccUs03][0],GC6133_init_reg_tbl[gRccUs03][1]);///
gRccUs03 ++;
}else
{
L2_task_go(D_task_GC032A_div);
///L1_task_Tdelay(D_Tdelay_500ms);
L1_task_Tdelay(D_Tdelay_1s);///重要 这个时间很关键aaaaaa
}
TTSS_Task_step(D_task_GC032A_div);
//L0_GC032A_write(0xfc,0x02); //复位??
L0_GC032A_write(0xf8,0x03);/// 恢复分频
L0_GC032A_write(0xfa,D_0xfa);DL0_WDT();//
GC032a_L0_uart0_uc('6');
L2_task_go(D_task_GC032A_start_time);
///------------------------------------------------------cam init over
///------------------------------------------------------cam init over
///------------------------------------------------------cam init over
////等待 其他任务的启动后才工作
TTSS_Task_step(D_task_GC032A_start_time);
D_cam_led_on();D_VSYNCS_open();
L1_GC032A_sleep(D_wakeup);
GC032a_L0_uart0_uc('7');
/// s->one_line_ok = D_clear;D_ledb_OFF();
L2_task_go(D_task_GC032A_led);
TTSS_Task_step(D_task_GC032A_led);
///vs /```24.8ms````\__________________________..1.16s...____________________________/````````\___________
///cam_led ```````````\_________________________________________________________/`````````````````\____
if(D_ready == s->vs_ok)///为了关灯
{
s_task_GC032A.vs_ok = D_clear;
D_cam_led_off(); GC032a_L0_uart0_uc('_');
L2_task_go(D_task_GC032A_wait);
}
TTSS_Task_step(D_task_GC032A_wait);////>>>>>>>>>>>>>>>>>>>>>>>---
///捕获到需要的行
if(1 == s->line_get)
{DL0_WDT();//
s->line_get = 0;
L2_task_go(D_task_GC032A_cal);//// 单行计算
}
TTSS_Task_step(D_task_GC032A_cal);
///计算一个 line的数据
///D_txd4_wakeup();
///GC032a_L0_uart0_uc(0xd); GC032a_L0_uart0_uc(0xa);//
s->buf[D_pclk_per_hs + 1] =s->buf[30];
///GC032a_L0_uart0_uchex(s->buf[D_pclk_per_hs + 1]);
gRccUs04 = 0;
for(gRccUs03 = 0;gRccUs03 < D_pclk_per_hs_2;gRccUs03 ++)
{ //s->buf[gRccUs03] = 0x10;
//debug 开关 显示当前收到的数据
//L0_uart0_uc(s->buf[gRccUs03]);
if(s->buf[gRccUs03] >= 0x10)
{
s->buf[gRccUs03] -= 0x10;
}
s->buf[gRccUs03] >>= 1;
gRccUs04 += s->buf[gRccUs03];
}
gRccUs04 >>= 2;//gRccUs04 >>= 4;
TS_paer_value.r123.paperNum = gRccUs04;
///GC032a_L0_uart0_uchex((unsigned char)(gRccUs04>>8));
s_task_GC032A.cal_ok = D_ready;
L2_task_go(D_task_GC032A_sample);/// 发送完成延时后开始采样,
L1_task_Tdelay(D_Tdelay_300ms); //700=1a 600=1e 500 21 400 25 300 26
TTSS_Task_step(D_task_GC032A_sample);
///20181007本想调试成 分段的led 不通过vs 关断 但是发现不好调整
///采样的时候led打开照亮
D_cam_led_on();GC032a_L0_uart0_uc('`');
L2_task_go(D_task_GC032A_sleep);
// L1_task_Tdelay(D_Tdelay_500ms+6);
TTSS_Task_step(D_task_GC032A_sleep);
/// 收到外部命令run后 决定进入睡眠状态 ,低功耗处理
////CAL 10MS 433 10MS 总共20ms / 1160ms/vs 取行数消耗10ms
/////1160-10 - 20 = 1130ms
/// GC032a_L0_uart0_uc(0x88);
if(D_run == s->run)
{
GC032a_L0_uart0_uc('r');//2.1ms
L2_task_go(D_task_GC032A_led);
}else
{
D_cam_led_off();
L1_GC032A_sleep(D_sleep);
L2_task_go(0);
}
///<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
TTSS_Task_end();
}
#endif
void L1_GC032A_sleep(unsigned char onf)
{///FE 15 Fd 33 44//standby
///FE 05 Fd 33 44//wakeup
if(D_sleep == onf)
{
GC032a_L0_uart0_uc('L');
/// 进入standby:
L0_GC032A_write(0xfc,0x03); L0_GC032A_write(0xf7,0x00); L0_GC032A_write(0xf9,0xcf); L0_GC032A_write(0xf3,0x00);
Lc_delay_nop(30);
Lc_delay_nop(30);
/// D_cam_AVDD_off();
// D_cam_led_off();
}else
{
GC032a_L0_uart0_uc('X');
/// 退出standby:
L0_GC032A_write(0xfc,0x02); L0_GC032A_write(0xf7,0x01); L0_GC032A_write(0xf9,0xce); L0_GC032A_write(0xf3,0xff);
/// D_cam_led_on();
}
}
#if 10
void L3_GC032A_fun(U8 *pPara)
{
}
#else
//// fe 01 reg data 0cx
/// Ac 01 02 03 ocr ---bsp_debug.c
/// p.cmd p.R2 p.R3 p.ocr
///Ac 00 03 01 00/// ACC_X[13:6]
void L3_GC032A_fun(U8 *pPara)
{
U8 i,val[2];
// unsigned short j;
TS_P_debug *p = pPara;
switch(p->cmd)
{
case 0x01:
///AE 01 FE 33 44 // L0_GC032A_read(0xFE,&i,1); 读取当前页面
///AE 01 F0 33 44 // L0_GC032A_read(0xF0,&i,1); 读取id i= 0x23
L0_GC032A_read(p->R2,&i,1);
L0_uart0_uc(i);
break;
//修改摄像头配置参数
case 0x02:
/// fe 02 r2 r3 xx 设置寄存器(r2) = r3
/// sysreg FE 02 FE 01 44 //设置当前页面01
L0_GC032A_write(p->R2,p->R3);
L0_uart0_uc(p->R2);
L0_uart0_uc(p->R3);
break;
//启动摄像头进行拍照;
case 0x03:/// sysreg FE 03 03 04 05 //设置是否发送一line数据(数据分为一帧=640Line = 640line*480pclk )
///AE 03 01 33 44 //s_task_GC032A.line_onf = 01
///AE 03 00 33 44 //s_task_GC032A.line_onf = 00
s_task_GC032A.line_onf = p->R2;
L0_uart0_uc(0x30|s_task_GC032A.line_onf);
break;
case 0x05:
///AE 05 01 33 44 //进入 standby
///AE 05 00 33 44 //退出 standby
L1_GC032A_sleep(p->R2);
L0_uart0_uc(0x30|s_task_GC032A.line_onf);
break;
case 6:///AE 06 22 33 44
D_cam_led_off();
break;
case 7:///AE 07 22 33 44
D_cam_led_on();
break;
/*******************
case 0x00:
L0_GC032A_read(p->R2,val,p->R3);
L0_uart0_uc(p->cmd);
L0_uart0_uc(p->R2);
L0_uart0_uc(p->R3);
L0_uart0_uc('G');
for(i = 0;i < p->R3;i++)
{
L0_uart0_uc(val[i]);
}
break;
//读取摄像头配置参数
case 0x35:
L0_GC032A_standby();// led 17.1-16.9ma standby 6.2ma
L0_uart0_uc(0x31);
break;
case 0x36:
/// 退出standby:
L0_GC032A_work();
L0_uart0_uc(0x30);
break;
****************************/
default:
break;
};
}
#endif
#if 0
FE 02 88 15 10 13 11 15 11 16 12 14 11 15 12 16 12 16 14 17 13 17 13 16 13 16 12 16 13 16 12 18
14 15 12 15 13 15 12 16 14 15 13 15 12 15 13 16 14 18 14 17 13 16 10 16 15 1A 15 22 2D 3A 3F 47
41 53 5E 63 65 69 6C 6F 71 7A 72 73 75 7A 7B 7E 7D 82 85 8B 8F 90 8F 93 96 9A 9D 9A 97 98 96 99
9A 9B 9A 9C 9E 9F 9F 9D 9A 9A 99 9C 9B 9B 9A 9A 9B 9C 9D 9F 9F A0 A1 A2 A3 A2 A2 A3 A1 A3 A4 A4
A4 A4 A3 A3 A2 A2 A3 A5 A6 A7 A8 A7 A6 A6 A5 A6 A6 A8 AA AA AA AA AA AB AB AB AC AC AB AC AC AD
AF AE AD AD AC AC AB AC AC AD AD AE AE AE AF AD AE AE AD AE AE AE AE AE AF AF AF AF AF AF B0 B1
B1 B1 B2 B1 B1 B1 B1 B1 B1 B2 B2 B2 B3 B2 B2 B2 B3 B3 B3 B4 B4 B4 B4 B4 B4 B4 B4 B4 B4 B4 B4 B5
B4 B5 B6 B5 B5 B4 B4 B4 B3 B4 B5 B5 B5 B5 B5 B5 B5 B5 B5 B5 B5 B5 B6 B6 B5 B6 B6 B6 B6 B6 B6 B6
B6 B6 B6 B6 B6 B6 B6 B6 B7 B6 B6 B7 B6 B7 B7 B7 B7 B7 B7 B7 B7 B7 B7 B7 B7 B7 B7 B7 B7 B7 B7 B7
B8 B7 B7 B8 B8 B7 B8 B8 B7 B8 B9 B8 B8 B8 B7 B7 B7 B7 B7 B7 B7 B7 B7 B7 B7 B7 B7 B8 B7 B7 B8 B8
B8 B8 B8 B8 B8 B8 B7 B7 B7 B7 B8 B8 B9 B8 B9 B8 B8 B8 B8 B7 B7 B7 B7 B7 B8 B8 B8 B8 B8 B8 B8 B8
B9 B8 B8 B8 B8 B9 BA B8 B8 B8 B7 B8 B8 B8 B8 B8 B8 B8 B9 B8 B7 B7 B7 B7 B7 B7 B6 B6 B7 B7 B7 B7
B7 B7 B7 B8 B8 B8 B8 B8 B8 B8 B8 B8 B9 B9 B9 B8 B9 B8 B8 B9 BA B9 B8 B8 B8 B8 B9 B8 B9 B8 B8 B8
B8 B8 B9 B9 B8 B9 B9 B9 B9 B8 B8 B8 B8 B8 B8 B8 B8 B8 B8 B8 B8 B9 B9 B8 B9 B9 B9 B9 B9 B9 BA B9
B9 B9 B9 B9 B8 B9 B9 B9 B9 B9 B9 B9 B8 B9 B9 B9 B9 B9 B9 B9 B9 B9 BB B9 B9 B9 B9 B9 B9 B9 BA BA
BB B9 B8 B8 B8 B8 B8 B9 B9 BA BA B9 BA B9 B9 B9 B9 B9 B8 B8 B8 B8 B9 B9 B9 B9 BA BA BB B9 B9 B9
B9 B9 B9 B9 B9 B9 B9 B9 B9 B9 B9 B9 BA B9 B9 B9 B9 BA BA BB BB BA BB BA B9 B9 B9 B9 B9 B9 B9 BA
BB BA BA BA BA B9 B8 B8 B8 B8 B8 B9 B9 BA BB BB BB BA BA B9 B9 B9 B9 B9 BA fd fc
#endif

706
source/bsp/backu/bsp_cam.c

@ -1,706 +0,0 @@
////////////////////////////////////////////////////////////////////////////
///@copyright Copyright (c) 2018, 传控科技 All rights reserved.
///-------------------------------------------------------------------------
/// @file bsp_gc6133.c.c
/// @brief bsp @ driver config
///-------------------------------------------------------------------------
/// @version 1.0
/// @author CC
/// @date 20180331
/// @note cc_AS_stc02
//////////////////////////////////////////////////////////////////////////////
#include "Bsp_debug.h"
#include "bsp_func.h"
#include "bsp_power.h"
#include "bsp_cam_isr.h"
#include "bsp_cam.h"
#include "../msp/uart0.h"
#include "cw63xx.h"
#include "../clib/Clib.h"
#include "../clib/bit.h"
#include "../msp/time.h"
/// 第一个比第二个延迟20ms 发送 这样同样触发后,第一个10.5ms发送完成 第二个还没有发送,不构成干扰
#define D_p_send_delay(); L1_task_Cdelay(D_Cdelay_15ms*(1+D_cameralIndex));
////>>>>>>>>>>>>>>>>>>>>>_s_task_GC032A_>>>>>>>>>>>>>>>>>>>>>>
void L0_p_send(void);
extern TS_P_rf433 TS_paer_value;
struct _s_task_GC032A_ s_task_GC032A;
void L2_task_GC032A_init(void)
{
L0_cam_isr_init();
L1_task_init(&s_task_GC032A.task);
s_task_GC032A.next_line = D_clear;
s_task_GC032A.line_ok = D_run;
s_task_GC032A.line_get = D_clear;
s_task_GC032A.cal_ok = D_clear;
s_task_GC032A.vs_ok = D_clear;
}
//// 采集单行的程序 20190217
//// step01 上电时序初始化
///step02 输入配置寄存器
///step03 打开中断进入采集模式
///step04 捕捉第一帧数据 开始采样每一行 同时可以关闭led节约电
/// step05 捕获到需要的行数 采集到需要的一行数据
/// step06------>进入休眠状态
/// |----->持续采集下一行
#if(MODE_CAM_LINE == MODE_CAM)
#if 0
/// 采集完后延时一定时间 打开led灯 为下次的cam工作提供光源
/// 等待run信号 如果关闭工作,休眠 fixme:冷启动还是热启动
void L2_task_GC032A_handle(struct _s_task_GC032A_ *s)
{
TTSS_Task_init()
//#define D_pclk_per_hs 6
// PrintCam_L0_uart0_uc('$');
L2_task_go(D_task_GC032A_init_standby);
TTSS_Task_step(D_task_GC032A_init_standby)
L0_GC032A_standby();
D_cam_led_on();
//PWDN引脚拉低(0 -- 正常工作,1 -- 休眠)
// PrintCam_L0_uart0_uc('2');
L2_task_go(D_task_GC032A_init_DVDD);
TTSS_step01(D_task_GC032A_init_DVDD);
L0_GC032A_work();
//IOVDD上电,并延时50us以上;
L2_task_go(D_task_GC032A_init_AVDD);
TTSS_Task_step(D_task_GC032A_init_AVDD);
//AVDD28上电,并延时0us以上
D_cam_AVDD_on();
L2_task_go(D_task_GC032A_init_pwdn);
TTSS_Task_step(D_task_GC032A_init_pwdn);
//提供032A系统频率
L0_MCLKO_init(D_ON);
L2_task_GC032A_init();
//PWDN引脚拉高,延时,拉低
L0_GC032A_standby();
DL0_WDT();//
L2_task_go(D_task_GC032A_init_pwdn_wait);
L1_task_Cdelay(D_Cdelay_15ms);
TTSS_Task_step(D_task_GC032A_init_pwdn_wait);
L0_GC032A_work();
gRccUs03 = 0;
L2_task_go(D_task_GC032A_write_reg);
L1_task_Cdelay(D_Cdelay_15ms);
TTSS_Task_step(D_task_GC032A_write_reg);
//设置摄像头参数 大约2s时间
if(0 != GC6133_init_reg_tbl[gRccUs03][0])
{
//GC032a_L0_uart0_uc('k');
L0_GC032A_write(GC6133_init_reg_tbl[gRccUs03][0],GC6133_init_reg_tbl[gRccUs03][1]);///
gRccUs03 ++;
}else
{
L2_task_go(D_task_GC032A_div);
L1_task_Tdelay(D_Tdelay_1s);///重要 这个时间很关键aaaaaa
}
TTSS_Task_step(D_task_GC032A_div);
//L0_GC032A_write(0xfc,0x02); //复位??
L0_GC032A_write(0xf8,0x03);/// 恢复分频
L0_GC032A_write(0xfa,D_0xfa);DL0_WDT();
L2_task_go(D_task_GC032A_wakup_sample);
///------------------------------------------------------cam init over
///------------------------------------------------------cam init over
///------------------------------------------------------cam init over
////等待 其他任务的启动后才工作
TTSS_step03(D_task_GC032A_wakup_sample)
L1_GC032A_sleep(D_wakeup);
GC032a_L0_uart0_uc('w');
///D_ledb_OFF();
L2_task_go((D_task_GC032A_wakup_sample2));
L1_task_Tdelay(D_Tdelay_1s5);
TTSS_step04(D_task_GC032A_wakup_sample2);
D_VSYNCS_open();////后台的中断开始工作
L2_task_go(D_task_GC032A_one_frame);
//////////////////////////////////////////////////////////////////////////////
TTSS_step04(D_task_GC032A_one_frame);
////捕获到一帧数据的开始((来自于后台的中断))
///vs /```24.8ms````\__________________________..1.16s...____________________________/````````\___________
///cam_led ```````````\_________________________________________________________/`````````````````\____
if(D_ready == s->vs_ok)///为了关灯
{
/// PrintCam_L0_uart0_uc('V');
s_task_GC032A.vs_ok = D_clear;
D_cam_led_off();
L2_task_go(D_task_GC032A_wait);
//L1_task_Tdelay(D_Tdelay_50ms); ////取决于getline的行数 和cam需要亮灯的时间
}
TTSS_step05(D_task_GC032A_wait);////>>>>>>>>>>>>>>>>>>>>>>>---
///捕获到需要的Line(来自于后台的中断)
if(D_clear != s->line_get)
{DL0_WDT(); ////memo20190217 : 间隔1.15s
//PrintCam_L0_uart0_uc(s->line_get);// L2_line_send();
s->buf2_ok = D_ready;///buf2_ok数据准备好可供算法查询
L2_task_go(D_task_GC032A_sleep);
/// L1_task_Tdelay(D_Tdelay_10ms);
}
TTSS_Task_step(D_task_GC032A_sleep)
///采样结束
L1_GC032A_sleep(D_sleep);
L0_GC032A_standby();
L0_MCLKO_init(D_OFF);
D_cam_led_off();
L2_task_go(D_task_FLOW_PreSend);
////>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
TTSS_Task_step(D_task_FLOW_PreSend);
D_txd4_wakeup();///上升沿 1ms后433 从sleep到可以发送
/// TS_paer_value.r123.cameraBoardPower = s->t_stamp+0x30;
L0_p_send();
//D_txd4_low();
L2_task_go(D_task_FLOW_send);
// L1_task_Tdelay(D_Tdelay_10ms);
///L1_task_Cdelay(60);//2ms---mcu+433无法接收
TTSS_Task_step(D_task_FLOW_send);
//D_txd4_wakeup();
L0_uart0_sendArray((unsigned char *)&TS_paer_value,6);
L2_task_go(D_task_FLOW_send2);
TTSS_Task_step(D_task_FLOW_send2);
if(D_uart0_free())
{
L2_task_go(D_task_FLOW_send3);///
D_p_send_delay();
}
TTSS_Task_step(D_task_FLOW_send3);
L0_uart0_sendArray((unsigned char *)&TS_paer_value,6);
L2_task_go(D_task_FLOW_send4);
TTSS_Task_step(D_task_FLOW_send4);
if(D_uart0_free())
{
L2_task_go(D_task_FLOW_send5);
}
TTSS_Task_step(D_task_FLOW_send5);
D_txd4_low();///共计耗时15ms
D_cam_AVDD_off();///注意影响发送
L2_task_go(0);
///<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
TTSS_Task_end();
}
#endif
#elif(MODE_CAM_FRAME == MODE_CAM)
#elif(MODE_CAM_TEST == MODE_CAM)
#define PrintCam_L0_uart0_uc(x) L0_uart0_uc(x)
#define PrintCam_D_send_us(x) L0_uart0_us(x)
///#define L0_uart0_sendArraylong(a,start,end) L0_uart0_sendArray(a(start))
/// 采集完后延时一定时间 打开led灯 为下次的cam工作提供光源
/// 等待run信号 如果关闭工作,休眠 fixme:冷启动还是热启动
void L2_task_GC032A_handleTest(struct _s_task_GC032A_ *s)
{
TTSS_Task_init()
//#define D_pclk_per_hs 6
// PrintCam_L0_uart0_uc('$');
L2_task_go(D_task_GC032A_init_standby);
TTSS_Task_step(D_task_GC032A_init_standby)
L0_GC032A_standby();
D_cam_led_on();
//PWDN引脚拉低(0 -- 正常工作,1 -- 休眠)
// PrintCam_L0_uart0_uc('2');
L2_task_go(D_task_GC032A_init_DVDD);
TTSS_step01(D_task_GC032A_init_DVDD);
L0_GC032A_work();
//IOVDD上电,并延时50us以上;
L2_task_go(D_task_GC032A_init_AVDD);
TTSS_Task_step(D_task_GC032A_init_AVDD);
//AVDD28上电,并延时0us以上
D_cam_AVDD_on();
L2_task_go(D_task_GC032A_init_pwdn);
TTSS_Task_step(D_task_GC032A_init_pwdn);
//提供032A系统频率
L0_MCLKO_init(D_ON);
L2_task_GC032A_init();
//PWDN引脚拉高,延时,拉低
L0_GC032A_standby();
DL0_WDT();//
L2_task_go(D_task_GC032A_init_pwdn_wait);
L1_task_Cdelay(D_Cdelay_15ms);
TTSS_Task_step(D_task_GC032A_init_pwdn_wait);
L0_GC032A_work();
gRccUs03 = 0;
L2_task_go(D_task_GC032A_write_reg);
L1_task_Cdelay(D_Cdelay_15ms);
TTSS_Task_step(D_task_GC032A_write_reg);
//设置摄像头参数 大约2s时间
if(0 != GC6133_init_reg_tbl[gRccUs03][0])
{
L0_GC032A_write(GC6133_init_reg_tbl[gRccUs03][0],GC6133_init_reg_tbl[gRccUs03][1]);///
gRccUs03 ++;
}else
{
L2_task_go(D_task_GC032A_div);
L1_task_Tdelay(D_Tdelay_1s);///重要 这个时间很关键aaaaaa
}
TTSS_Task_step(D_task_GC032A_div);
//L0_GC032A_write(0xfc,0x02); //复位??
L0_GC032A_write(0xf8,0x03);/// 恢复分频
L0_GC032A_write(0xfa,D_0xfa);DL0_WDT();
L2_task_go(D_task_GC032A_wakup_sample);
///------------------------------------------------------cam init over
///------------------------------------------------------cam init over
///------------------------------------------------------cam init over
////等待 其他任务的启动后才工作
TTSS_step03(D_task_GC032A_wakup_sample)
L1_GC032A_sleep(D_wakeup);
///D_ledb_OFF();
L2_task_go((D_task_GC032A_wakup_sample2));
L1_task_Tdelay(D_Tdelay_1s5);
TTSS_step04(D_task_GC032A_wakup_sample2);
D_VSYNCS_open();////后台的中断开始工作
PrintCam_L0_uart0_uc('w');
L2_task_go(D_task_GC032A_one_frame);
//////////////////////////////////////////////////////////////////////////////
TTSS_step04(D_task_GC032A_one_frame);
PrintCam_L0_uart0_uc('.');
////捕获到一帧数据的开始((来自于后台的中断))
///vs /```24.8ms````\__________________________..1.16s...____________________________/````````\___________
///cam_led ```````````\_________________________________________________________/`````````````````\____
if(D_ready == s->vs_ok)///为了关灯
{
s->vs_ok = D_clear;
PrintCam_L0_uart0_uc('V');
/// D_cam_led_off();
D_HSYNCS_open();
L2_task_go(D_task_GC032A_send2);
//L1_task_Tdelay(D_Tdelay_50ms); ////取决于getline的行数 和cam需要亮灯的时间
}
TTSS_Task_step(D_task_GC032A_send2)///----------------------开始一行一行的发送
if(1 == s_task_GC032A.line_ok)
{
s_task_GC032A.line_ok = 0;
///采样结束
PrintCam_L0_uart0_uc(0xfe);
PrintCam_L0_uart0_uc(0xfd);
///PrintCam_D_send_us(DR_pclk_n);
PrintCam_D_send_us(DR_line_n);
L0_uart0_sendArray(&s_task_GC032A.buf[0],200);
L2_task_go(D_task_GC032A_06);
/// L1_task_Tdelay(D_Tdelay_50ms);
}else { }
TTSS_step06(D_task_GC032A_06);
/*********************************************************
TTS_for_add(s_task_GC032A.lines,0,627)///[0]--[199]199
/// s_task_GC032A.buf[s_task_GC032A.lines] = s_task_GC032A.lines;
s_task_GC032A.buf[s_task_GC032A.lines] = 0;
TTS_for_add_end()
**************************************************/
if(D_uart0_send_over())
{
L0_uart0_sendArray(&s_task_GC032A.buf[200],200);
L2_task_go(D_task_GC032A_07);
}
TTSS_step06(D_task_GC032A_07);
if(D_uart0_send_over())
{
L0_uart0_sendArray(&s_task_GC032A.buf[400],200);
L2_task_go(D_task_GC032A_08);
}
TTSS_step06(D_task_GC032A_08);
if(D_uart0_send_over())
{
L0_uart0_sendArray(&s_task_GC032A.buf[600],D_pclk_per_hs-600);/// 628point
// 'fe','fd','fd','fc' 46 44 20 46 43 0d 0a
PrintCam_L0_uart0_uc(0xfd);
PrintCam_L0_uart0_uc(0xfc);
s_task_GC032A.next_line = 1;
L2_task_go(D_task_GC032A_send2);
L1_task_Tdelay(D_Tdelay_10ms);
}
///<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
TTSS_Task_end();
}
#endif
void L1_GC032A_sleep(unsigned char onf)
{///FE 15 Fd 33 44//standby
///FE 05 Fd 33 44//wakeup
if(D_sleep == onf)
{
// GC032a_L0_uart0_uc('L');
/// 进入standby:
L0_GC032A_write(0xfc,0x03); L0_GC032A_write(0xf7,0x00); L0_GC032A_write(0xf9,0xcf); L0_GC032A_write(0xf3,0x00);
Lc_delay_nop(30);
Lc_delay_nop(30);
}else
{
// GC032a_L0_uart0_uc('X');
/// 退出standby:
L0_GC032A_write(0xfc,0x02); L0_GC032A_write(0xf7,0x01); L0_GC032A_write(0xf9,0xce); L0_GC032A_write(0xf3,0xff);
}
}
void L2_line_send(void)
{
#if 0
PrintCam_L0_uart0_uc(0x0d);
PrintCam_L0_uart0_uc(0x0a);
// PrintCam_L0_uart0_uc(0xfe);
// PrintCam_L0_uart0_uc(0xfd);
PrintCam_D_send_us(DR_pclk_n);
/// PrintCam_D_send_us(s_task_GC032A.usSum);
PrintCam_L0_uart0_uc(0x09);
// PrintCam_D_send_us(0x1234); PrintCam_D_send_us(0x5678); PrintCam_D_send_us(0xabcd);
// PrintCam_L0_uart0_uc(0x0d);
// PrintCam_L0_uart0_uc(0x0a);
PrintCam_L0_uart0_sendArray(&(s_task_GC032A.buf[50]),40);
PrintCam_L0_uart0_uc(0x09);
PrintCam_L0_uart0_sendArray(&(s_task_GC032A.buf[50]),40);
PrintCam_L0_uart0_uc(0x09);
PrintCam_L0_uart0_sendArray(&s_task_GC032A.buf[D_pclk_per_hs_570-21],20);
///Lc_hex2ascii(&(s_task_GC032A.buf[0]),10,ts_uart_send_shop.buf);
// Lc_hex2ascii(&s_task_GC032A.buf[D_pclk_per_hs_570-10],2,ts_uart_send_shop.buf2);
// L0_uart0_sendArray(ts_uart_send_shop.buf2,2*3);
///#ifdef D_debug_add_send
// PrintCam_L0_uart0_uc('P');
///L0_uart0_sendArraylong(s_task_GC032A.buf,D_pclk_per_hs_570-10,D_pclk_per_hs_570);
// 'fe','fd','fd','fc'
// PrintCam_L0_uart0_uc(0xfd);
// PrintCam_L0_uart0_uc(0xfc);
PrintCam_L0_uart0_uc(0x0d);
PrintCam_L0_uart0_uc(0x0a);
///#else
/*****
??
10 10 10 10 10 10 10 10 10 10
10 10 10 10 11 11 11 11 11 11
11 11 11 11 11 11 11 11 11 11
11 11
10 10 10 10 10 10 10 10 10 10
10 10 10 10 10 10 10 10 10 10
CRpaper =04F8-g-offdiff :.
******/
///vU16 i; for(i = 0;i <= D_pclk_per_hs_570; i ++) {s_task_GC032A.buf[i]=i; }
PrintCam_L0_uart0_uc(0xfe);
PrintCam_L0_uart0_uc(0xfd);
PrintCam_D_send_us(DR_pclk_n);
L0_uart0_sendArray(s_task_GC032A.buf,200);
L0_uart0_sendArray(&s_task_GC032A.buf[200],200);
L0_uart0_sendArray(&s_task_GC032A.buf[400],(D_pclk_per_hs_570-400));
// PrintCam_D_send_us(ts_task_ALGO.usSum_temp);
//// PrintCam_D_send_us(s_task_GC032A.down_point);
// PrintCam_D_send_us(s_task_GC032A.down_point - s_task_GC032A.up_point);
// DR_pdata_n =0;
// PrintCam_D_send_us(0x1234);
// 'fe','fd','fd','fc'
// PrintCam_L0_uart0_uc(0xfd);
// PrintCam_L0_uart0_uc(0xfc);
#endif
/* */
}
#if 0
void GC032A_port_init(void)
{
///00 准双向口 灌电流20mA 拉电流270-150uS
///01 推挽输出 20mA 加限流
///10 高阻
///11 开漏 open-Drain 内部上拉电阻断开 开漏模式既可以度外部状态也可以对外输出高低电平
//p3.6 --HSYNC
// BITN_0(P3M1,BITN6);BITN_0(P3M0,BITN6);
///P3.7 -- VSYNC
// BITN_0(P3M1,BITN7);BITN_0(P3M0,BITN7);
L0_GC032A_standby();
D_cam_AVDD_on();
}
//// AX CMD R2 R3 R4
/// Ae 01 01 03 04
void L3_GC032A_fun(U8 *pPara)
{
*pPara = 0;
}
/********
void L3_GC032A_fun(U8 *pPara)
{
U8 i,val[2];
// unsigned short j;
TS_P_debug *p = pPara;
switch(p->cmd)
{
case 3: //Ae 03 03 04 00
//xx 03 R2 R3 xx
PrintCam_L0_uart0_uc(0x0d);
PrintCam_L0_uart0_uc(0x0a);
PrintCam_L0_uart0_uc('l');
Lc_delay_ms(12);
s_task_GC032A.vline_get = p->R2 << 8;
s_task_GC032A.vline_get |= p->R3;
L0_uart0_uchex(p->R2);
Lc_delay_ms(12);
L0_uart0_uchex(p->R3);
Lc_delay_ms(1200);
PrintCam_L0_uart0_uc(0x0d);
PrintCam_L0_uart0_uc(0x0a);
PrintCam_L0_uart0_uc(0x0d);
PrintCam_L0_uart0_uc(0x0a);
PrintCam_L0_uart0_uc(0x0d);
PrintCam_L0_uart0_uc(0x0a);
break;
default:
break;
};
}
********/
///#else
//// fe 01 reg data 0cx
/// Ac 01 02 03 ocr ---bsp_debug.c
/// U8 i,val[2];
// unsigned short j;
TS_P_debug *p = pPara;
switch(p->cmd)
{
case 0x01: p.cmd p.R2 p.R3 p.ocr
///Ac 00 03 01 00/// ACC_X[13:6]
void L3_GC032A_fun(U8 *pPara)
{
U8 i,val[2];
// unsigned short j;
TS_P_debug *p = pPara;
switch(p->cmd)
{
case 0x01:
///AE 01 FE 33 44 // L0_GC032A_read(0xFE,&i,1); 读取当前页面
///AE 01 F0 33 44 // L0_GC032A_read(0xF0,&i,1); 读取id i= 0x23
L0_GC032A_read(p->R2,&i,1);
PrintCam_L0_uart0_uc(i);
break;
//修改摄像头配置参数
case 0x02:
/// fe 02 r2 r3 xx 设置寄存器(r2) = r3
/// sysreg FE 02 FE 01 44 //设置当前页面01
L0_GC032A_write(p->R2,p->R3);
PrintCam_L0_uart0_uc(p->R2);
PrintCam_L0_uart0_uc(p->R3);
break;
//启动摄像头进行拍照;
case 0x03:/// sysreg FE 03 03 04 05 //设置是否发送一line数据(数据分为一帧=640Line = 640line*480pclk )
///AE 03 01 33 44 //s_task_GC032A.line_onf = 01
///AE 03 00 33 44 //s_task_GC032A.line_onf = 00
s_task_GC032A.line_onf = p->R2;
PrintCam_L0_uart0_uc(0x30|s_task_GC032A.line_onf);
break;
case 0x05:
///AE 05 01 33 44 //进入 standby
///AE 05 00 33 44 //退出 standby
L1_GC032A_sleep(p->R2);
PrintCam_L0_uart0_uc(0x30|s_task_GC032A.line_onf);
break;
case 6:///AE 06 22 33 44
D_cam_led_off();
break;
case 7:///AE 07 22 33 44
D_cam_led_on();
break;
/*******************
case 0x00:
L0_GC032A_read(p->R2,val,p->R3);
PrintCam_L0_uart0_uc(p->cmd);
PrintCam_L0_uart0_uc(p->R2);
PrintCam_L0_uart0_uc(p->R3);
PrintCam_L0_uart0_uc('G');
for(i = 0;i < p->R3;i++)
{
PrintCam_L0_uart0_uc(val[i]);
}
break;
//读取摄像头配置参数
case 0x35:
L0_GC032A_standby();// led 17.1-16.9ma standby 6.2ma
PrintCam_L0_uart0_uc(0x31);
break;
case 0x36:
/// 退出standby:
L0_GC032A_work();
PrintCam_L0_uart0_uc(0x30);
break;
****************************/
default:
break;
};
}
#endif
#if 0
254 253
FE FD 02 7F ///639
1A 1B 1B 1B 1B 1B 1A 1C 1B 1B 1B 1A 1A 19 19 1A 19 1A 19 1A 19 1A 19 19 18 19 19 18 18 18 18 18 18 18 18 18 18 18 18 18 18 18 18 17 16 17 16 18 18 18 18 18 18 18 18 18 18 18 18 17 17 17 17 18 18 17 17 17 17 17 16 17 17 17 17 18 18 18 18 18 18 18 18 18 18 18 18 18 18 18 18 18 17 17 17 17 17 17 17 17 17 17 18 18 18 18 18 19 19 19 19 19 19 18 18 19 19 19 18 18 18 1A 19 19 19 19 19 1A 1A 1A 1A 1A 1A 19 19 18 19 19 19 1A 1A 1A 1B 1B 1B 1C 1C 1C 1C 1C 1C 1C 1D 1D 1D 1C 1C 1C 1C 1D 1E 1C 1C 1C 1D 1C 1C 1C 1C 1C 1C 1C 1D 1D 1D 1D 1C 1B 1A 1B 1A 1B 1D 1D 1D 1D 1D 1C 1C 1C 1C 1C 1C 1C 1C 1C 1C 1C 1B 1B 1B 1B 1B 1B 1C 1C 1C 1C 1B 1B 1C 1C 1C 1E 1C 1C 1C 1C 1C 1C 1C 1C 1C 1C 1C 1C 1B 1C 1B 1C 1C 1D 1D 1C 1C 1C 1C 1C 1C 1C 1C 1C 1C 1C 1C 1D 1D 1D 1C 1C 1C 1C 1C 1D 1D 1E 1D 1E 1F 1F 1E 1E 1E 1E 1E 1E 1E 1E 1D 1D 1C 1C 1C 1C 1C 1C 1C 1C 1C 1D 1D 1D 1D 1C 1D 1D 1D 1D 1D 1E 1E 1E 1E 1E 1E 1E 1E 1E 1E 1E 1E 1D 1C 1C 1C 1C 1C 1C 1C 1B 1C 1C 1C 1C 1C 1C 1C 1C 1C 1C 1B 1C 1C 1C 1C 1C 1C 1D 1C 1C 1C 1C 1D 1F 1F 1D 1C 1C 1B 1C 1C 1C 1C 1C 1C 1B 1B 1B 1B 1B 1B 1B 1C 1C 1C 1C 1C 1D 1C 1C 1C 1D 1D 1D 1D 1E 1D 1C 1C 1C 1C 1C 1C 1C 1C 1D 1D 1E 1E 1E 1D 1D 1D 1D 1C 1D 1C 1C 1C 1C 1D 1D 1D 1D 1C 1C 1C 1C 1C 1C 1B 1B 1C 1C 1C 1C 1B 1B 1B 1B 1D 1B 1C 1B 1B 1B 1C 1D 1C 1B 19 1A 19 1B 1C 1A 1A 1A 1A 1A 1A 1B 1B 1B 1A 1B 19 1B 1A 1A 1A 1A 1A 19 18 19 19 1A 1A 1A 1A 1A 19 19 18 18 18 18 18 1A 18 18 18 18 18 18 18 18 19 1A 19 19 19 19 19 19 19 1A 1A 1A 1A 19 19 18 18 18 18 18 18 19 18 18 18 19 18 18 18 18 18 1A 18 18 18 18 18 18 18 18 17 17 17 18 18 18 18 17 17 17 17 17 16 17 17 18 18 19 19 19 19 19 19 18 18 18 18 18 18 17 17 18 18 17 17 17 17 17 17 19 17 17 17 17 17 17 17 17 17 17 17 17 18 17 17 17 17 17 17 17 17 16 16 17 17 17 17 17 16 16 17 17 17 17 16 16 16 16 16 16 16 17 16 16 16 16 16 16 16 16 16 16 18 19 16 16 16 16 15 16 17 17 16 15 15 16 16 16 15 14 14 15 17 15 15 15 15 16 16 16 16 16 15 16 16 16 15 15 15 15 15
FD FC
253 252
254 253 /639./ 253 252
#endif
#if 0/// memo
//memo20190217 : 间隔1.15s
/*********
[15:37:04.337]v 4.337
[15:37:05.487]v 5.487 1.15
[15:37:06.637]v 6.637 1.15
[15:37:07.787]k 7.787 1.15
[15:37:08.947]v 8.947 1.16
[15:37:10.097]v 10.097 1.15
[15:37:11.247]v 11.247 1.15
[15:37:12.397]v 12.397 1.15
[15:37:13.547]k 13.547 1.15
48 31 61 77 77 77 77 2E 56 77 77 77 33 76 01 D3 56 2E 77 77 77 00
***/
void GC032A_port_init(void)
{
///00 准双向口 灌电流20mA 拉电流270-150uS
///01 推挽输出 20mA 加限流
///10 高阻
///11 开漏 open-Drain 内部上拉电阻断开 开漏模式既可以度外部状态也可以对外输出高低电平
//p3.6 --HSYNC
// BITN_0(P3M1,BITN6);BITN_0(P3M0,BITN6);
///P3.7 -- VSYNC
// BITN_0(P3M1,BITN7);BITN_0(P3M0,BITN7);
// L0_GC032A_standby();
// D_cam_AVDD_on();
}
void L2_line_send(void)
{
// /// vU16 usi;
PrintCam_D_send_us(0x1234);
PrintCam_D_send_us(0x5678);
PrintCam_D_send_us(0xabcd);
#if 0
PrintCam_L0_uart0_uc(0x0d);
PrintCam_L0_uart0_uc(0x0a);
// PrintCam_L0_uart0_uc(0xfe);
// PrintCam_L0_uart0_uc(0xfd);
PrintCam_D_send_us(DR_pclk_n);
PrintCam_D_send_us(0x1234);
PrintCam_D_send_us(0x5678);
PrintCam_D_send_us(0xabcd);
PrintCam_L0_uart0_uc(0x0d);
PrintCam_L0_uart0_uc(0x0a);
PrintCam_L0_uart0_sendArray(&(s_task_GC032A.buf[0]),2);
PrintCam_L0_uart0_uc(0x09);
/// PrintCam_L0_uart0_sendArray(&s_task_GC032A.buf[D_pclk_per_hs_570-10],9);
///Lc_hex2ascii(&(s_task_GC032A.buf[0]),10,ts_uart_send_shop.buf);
Lc_hex2ascii(&s_task_GC032A.buf[D_pclk_per_hs_570-10],2,ts_uart_send_shop.buf2);
L0_uart0_sendArray(ts_uart_send_shop.buf2,2*3);
///#ifdef D_debug_add_send
PrintCam_L0_uart0_uc('P');
///L0_uart0_sendArraylong(s_task_GC032A.buf,D_pclk_per_hs_570-10,D_pclk_per_hs_570);
// 'fe','fd','fd','fc'
// PrintCam_L0_uart0_uc(0xfd);
// PrintCam_L0_uart0_uc(0xfc);
// PrintCam_L0_uart0_uc(0x0d);
// PrintCam_L0_uart0_uc(0x0a);
///#else
[18:41:16.591]ê?????02 FE FD 02 42 12 12 12 12 12 12 12 12 12 12 12 11 11 11 11 11 11 11 11 11 11 11 11 11 12 12 12 12 12 12 12 12 12 12 12 11 11 11 11 11 11 11 12 12 12 13 13 14 15 16 16 17 18 18 17 17 16 16 17 19 1C 1F 25 28 2A 2C 2D 2E 2F 30 31 31 32 32 32 32 31 31 32 32 32 32 33 33 33 33 33 33 33 33 33 33 33 33 33 32 32 33 33 33 33 33 33 33 33 33 33 33 33 33 33 33 33 33 33 33 33 33 33 33 33 33 33 33 33 33 33 33 33 33 33 33 33 33 33 33 33 33 33 33 33 33 33 33 34 33 34 34 34 34 34 34 34 34 34 34 34 35 35 34 35 35 35 35 35 35 36 35 35 36 36 11 11 11 FD FC
PrintCam_L0_uart0_uc(0xfe);
PrintCam_L0_uart0_uc(0xfd);
PrintCam_D_send_us(DR_pclk_n);
L0_uart0_sendArraylong(s_task_GC032A.buf,0,199);
L0_uart0_sendArraylong(s_task_GC032A.buf,200,399);
if(D_pclk_per_hs < 600)
{
L0_uart0_sendArraylong(s_task_GC032A.buf,400,599);
}else
{
L0_uart0_sendArraylong(s_task_GC032A.buf,400,599);
L0_uart0_sendArraylong(s_task_GC032A.buf,600,(D_pclk_per_hs-1));
}
// PrintCam_D_send_us(ts_task_ALGO.usSum_temp);
//// PrintCam_D_send_us(s_task_GC032A.down_point);
// PrintCam_D_send_us(s_task_GC032A.down_point - s_task_GC032A.up_point);
// DR_pdata_n =0;
// PrintCam_D_send_us(0x1234);
// 'fe','fd','fd','fc'
PrintCam_L0_uart0_uc(0xfd);
PrintCam_L0_uart0_uc(0xfc);
#endif
/* */
}
#endif

189
source/bsp/backu/bsp_cam.h

@ -1,189 +0,0 @@
////////////////////////////////////////////////////////////////////////////
///@copyright Copyright (c) 2018, 传控科技 All rights reserved.
///-------------------------------------------------------------------------
/// @file bsp_gc6133.c.h
/// @brief bsp @ driver config
///-------------------------------------------------------------------------
/// @version 1.0
/// @author CC
/// @date 20180331
/// @note cc_AS_stc02
//////////////////////////////////////////////////////////////////////////////
#ifndef _bsp_cam_H
#define _bsp_cam_H
#include "../bsp/bsp_config.h"
#include "../tpc/tpc_uart.h"
#include "../msp/uart0.h"
#include "bsp_gc032a.h"
//>>>>>>>>>>>>>>>>>>>>>0gc63xxtask
//#define D_i2c_addr_gc61xx 0x80 //page8/30 @pdf
#define D_i2c_addr_gc032A 0x42 //page15/31 @pdf
///// 400KHz Tlow > 1.3us
#define L0_GC032A_write(R,D) L2_I2C_WriteCmd(D_i2c_addr_gc032A,(R),(D))
#define L0_GC032A_read(R,D,N) L2_I2C_ReadReg(D_i2c_addr_gc032A,(R),(D),(N))
#define L0_GC032A_reg(R,D) L2_tws_ReadReg(D_i2c_addr_gc032A,(R),(D))
/// p55 pwdn
/// p54 inclk
/// p3.7 vsync
/// p3.6 hsync
#if 0
#define L0_GC032A_work() D_P55_OFF();
#define L0_GC032A_standby()
#else
#define L0_GC032A_work() D_P55_OFF();D_stdIO_P1_ALL();\
D_stdIO_P5(BITN4);\
D_stdIO_P5(BITN5);\
D_stdIO_P3(BITN7);\
D_stdIO_P3(BITN6);
#define L0_GC032A_standby() D_HighR_P1_ALL();\
D_HighI_P5(BITN4);\
D_HighI_P5(BITN5);\
D_HighI_P3(BITN7);\
D_HighI_P3(BITN6);D_P55_ON();
///pwdn 100uAD_P55_OFF();//
#endif
#define GC6123_SERIAL_write_cmos_sensor L0_GC032A_write
///#define D_pclk_per_hs 628
///#define D_pclk_per_hs 688
#define D_pclk_per_hs 639 ///027F
#define D_pclk_per_hs_570 570
//#define D_pclk_per_hs 580
#define D_pclk_per_hs_2 D_pclk_per_hs
///#define D_pclk_per_hs_2 (110)
//#define D_pclk_per_hs 6
struct _s_task_GC032A_
{
TS_task task;
/// vU32 t_stamp;
unsigned short lines; ///当前行采样结束
unsigned short frames; ///当前行采样结束
unsigned char next_line:1; ///下一行采样开始
unsigned char cal_ok:1; ///当前行采样结束//
unsigned char lamp:1; ///当前灯的标志
unsigned char line_get:1; ///当前需要的行采样结束 可以计算了
unsigned char line_ok:1; /// 采样的开关
unsigned char vs_ok:1; /// 开始一帧的采样 代表收到了vs信号
unsigned char line_onf:2; /// D_line_onf_get=0发送需要发送的一个line\\ D_line_onf_all=1 发送连续line
// volatile unsigned short usHs_count;
// volatile unsigned short usPclk;
unsigned char buf2_ok;
/// volatile unsigned short usN;
////// unsigned short usMax;
unsigned char buf[D_pclk_per_hs +2];
};
#define D_line_onf_all 1
#define D_line_onf_get 0
extern struct _s_task_GC032A_ s_task_GC032A;
void L2_task_GC032A_init(void);
#define D_task_GC032A_init_standby 0x36
#define D_task_GC032A_init_DVDD 0x30
#define D_task_GC032A_init_AVDD 0x31
#define D_task_GC032A_init_pwdn 0x32
#define D_task_GC032A_init_pwdn_wait 0x33
#define D_task_FLOW_PreSend 0xa3
#define D_task_FLOW_PreSend2 0xa4
#define D_task_FLOW_send 0x90
#define D_task_FLOW_send2 0x91
#define D_task_FLOW_send3 0x92
#define D_task_FLOW_send4 0x93
#define D_task_FLOW_send5 0x94
#define D_task_GC032A_write_reg 0x40
#define D_task_GC032A_wakup_sample 0x41
#define D_task_GC032A_start_time2 0x43
#define D_task_GC032A_wakup_sample2 0x44
#define D_task_GC032A_wait 0x51
#define D_task_GC032A_one_frame 0x52
#define D_task_GC032A_write_reg2 0x53
#define D_task_GC032A_div 0x54
#define D_task_GC032A_dat 0x55
#define D_task_GC032A_led 0x56
#define D_task_GC032A_send_line 0x61
#define D_task_GC032A_send2 0x62
#define D_task_GC032A_send3 0x63
#define D_task_GC032A_send4 0x64
////#define D_task_GC032A_over 0x63
#define D_task_GC032A_cal 0x65
///#define D_task_GC032A_send_over 0x64
#define D_task_GC032A_sleep 0x67
#define D_task_GC032A_06 0x68
#define D_task_GC032A_07 0x69
#define D_task_GC032A_08 0x6a
#define D_task_GC032A_09 0x6b
#define D_task_GC032A_sample 0x68
#define D_task_GC032A_end 0x69
#define D_task_GC032A_next_line 0x70
extern void L2_task_GC032A_handle(struct _s_task_GC032A_ *s);
extern void L2_task_GC032A_handleTest(struct _s_task_GC032A_ *s);
////////////////////////////////////////////////////////////////////
extern void GC032A_port_init(void);
extern void L3_GC032A_fun(U8 *pPara);
extern void L1_GC032A_sleep(unsigned char onf);
#define D_cam_led_on(); L1_cw63_reg_set(D_power_VCC2,D_CW63XX_ON|D_CW63XX_3V2);//P34 = 1;/////s_task_GC032A.lamp = D_ON;
#define D_cam_led_off(); L1_cw63_reg_set(D_power_VCC2,D_CW63XX_OFF|D_CW63XX_3V2);///P34 = 0;/////s_task_GC032A.lamp = D_OFF;
#endif // #ifndef _bsp_gc6133_H

218
source/bsp/backu/bsp_cam_isr.c

@ -1,218 +0,0 @@
////////////////////////////////////////////////////////////////////////////
///@copyright Copyright (c) 2018, 传控科技 All rights reserved.
///-------------------------------------------------------------------------
/// @file bsp_gc6133.c.c
/// @brief bsp @ driver config
///-------------------------------------------------------------------------
/// @version 1.0
/// @author CC
/// @date 20180331
/// @note cc_AS_stc02
///-------------------------------------------------------------------------
/// @version 1.2
/// @author CC
/// @date 20180703
/// @note cc_AS_stc02
//////////////////////////////////////////////////////////////////////////////
//#include "Bsp_debug.h"
#include "bsp_func.h"
#include "bsp_cam_isr.h"
#include "bsp_cam.h"
#include "../msp/uart0.h"
#include "cw63xx.h"
#include "../clib/Clib.h"
#include "../clib/bit.h"
#include "../msp/time.h"
#define D_pclk_div_hs 1 ///D_pclk_per_hs*D_pclk_div_hs < 680
///vs p3.7 int3
///hs p3.6 int2
///pclk p3.2 int0
/// row line确可以表示一条线 一行的意思.而column则形象的表示一个纵向的“列
#define D_line_get 10
#define D_row_get2 4
#ifdef doc_98989
vs /```24.8ms````\_______________________________..1.16s..._____________________________________________/```````````\__________
hs /\/\_2.14MS_/\____/\____/\____ ...... __/\____/\____/\__480个__/\____/\____/\____/\/\
hs /``\________________________hs______________________/``\
pclk |||||||||||||||||||||||||||||||||||||||||||||||640
Line0 L1 L2 L1 L1 L1 L1 L1 L1 L480
----------------------------------------------------------------------
1 1 1 1 1 1 1 1 1 --- --- 1
2 2 2 2 2 2 2 2 2 --- --- 2
3 3 3 3 3 3 3 3 3 --- --- 3
4 4 4 4 4 4 4 4 4 --- --- 4
5 5 5 5 5 5 5 5 5 --- --- 5
6 6 6 6 6 6 6 6 6 --- --- 6
7 7 7 7 7 7 7 7 7 --- --- 7
8 8 8 8 8 8 8 8 8 --- --- 8
9 9 9 9 9 9 9 9 9 --- --- 9
10 10 10 10 10 10 10 10 10 --- --- 10
11 11 11 11 11 11 11 11 11 --- --- 11
12 12 12 12 12 12 12 12 12 --- --- 12
13 13 13 13 13 13 13 13 13 --- --- 13
14 14 14 14 14 14 14 14 14 --- --- 14
. . . . . . . . . --- --- .
. . . . . . . . . --- --- .
. . . . . . . . . --- --- .
. . . . . . . . . --- --- .
640 640 640 640 640 640 640 640 640 --- --- 640
#endif ///doc_98989
void L0_cam_isr_init(void)
{
IT0 = 1;///int0 下降沿触发 = 0 上下沿均可触发
/// IT0 = 0;////int0 下降沿触发 = 0 上下沿均可触发
/// L0_INT0_OPEN();
D_HSYNCS_close();
D_VSYNCS_open();
D_PCLK_close();
}
#if(MODE_CAM_LINE == MODE_CAM)
#if 0
//////////
/////一帧数据的开始
void L0_VSYNCS_Isr (void) interrupt D_ISR_int3////下降沿
{////找到一帧数据的开头:第一行
L0_INT3_CLEAR();
///s_task_GC032A.usHs_count = 0;
DR_line_n = 0;
/// s_task_GC032A.next_line = D_ready;///启动第一行 这样确保帧头是第一行,对齐的///
/// s_task_GC032A.one_line_ok = D_clear;
s_task_GC032A.line_get = D_clear;
s_task_GC032A.vs_ok = D_ready;
//s_task_GC032A.frames ++;
//if(s_task_GC032A.frames > 10)
{/// 时间溢出
///s_task_GC032A.frames = 0;
}
D_ledb_OFF();
/// D_leda_ON();
D_HSYNCS_open();
}
/////一行line row数据的开始
void L0_HSYNCS_Isr(void) interrupt D_ISR_int2/// using 1 /下降沿
{///hs 下沿有效
L0_INT2_CLEAR();
//// hs信号的计数在vs有效的时候清零,这样usHs_count=D_row_get就代表
//// 当前一帧画面里面的第D_row_get个hs,也就是一个画面中的第几行数据
///if(D_ready == s_task_GC032A.next_line)
{///D_P33_REV();
//D_leda_OFF();
/// s_task_GC032A.next_line = D_clear;///因为接收一行数据的时间远远小于发送的时间
///因此添加这个为了提高可靠性
///发送完了后由“gc032a任务”启动
s_task_GC032A.lines = DR_line_n;////保存当前的行号到缓存中,因为行号变化的速度超过
////发送的速度,当在"gc032A任务"中使用的时候DR_line_n 已经变化了
///0 24 58 94 129 165 200 236 271 307 342 378
D_PCLK_open();
//D_P35_REV() ;
DR_pclk_n = 0;
if(DR_line_n >= D_line_get)
{
s_task_GC032A.line_get = D_ready;
D_HSYNCS_close();D_PCLK_close();
}
}
DR_line_n ++;///当前行数增加
}
////s_task_GC032A.buf 存放的是一行的数据
//// pclk int0 每个点的采样
void L0_PCLK_Isr(void) interrupt D_ISR_int0 /// using 10///
{///PCLK
// D_P34_REV();
DR_Dat = P1;
s_task_GC032A.buf[DR_pclk_n] = DR_Dat; // s_task_GC032A.buf[DR_pclk_n] = 0xaa;//P1&0xf0; //s_task_GC032A.buf[s_task_GC032A.usN] = s_task_GC032A.usN;
DR_pclk_n++;// D_P34_REV();
if(DR_pclk_n > D_pclk_per_hs)////一行的有效数据接收完成 采样了 D_pclk_per_hs个固定数据
{
D_PCLK_close();
//D_ledb_REV() ;
DR_pclk_n = D_pclk_per_hs; ///fixme
DR_pclk_n = 0;
/// s_task_GC032A.one_line_ok = D_ready;////给“gc032a任务”传递消息 可以开始计算或者发送了
D_ledb_ON();
}
}
#endif
#elif(MODE_CAM_FRAME == MODE_CAM)
#elif(MODE_CAM_TEST == MODE_CAM)
/////连续发送
void L0_VSYNCS_Isr (void) interrupt D_ISR_int3////下降沿
{////找到一帧数据的开头:第一行
///s_task_GC032A.usHs_count = 0;
DR_line_n = 0;
s_task_GC032A.next_line = 1;///启动第一行 这样确保帧头是第一行,对齐的///
s_task_GC032A.vs_ok = D_ready;
}
/////一行line row数据的开始
void L0_HSYNCS_Isr(void) interrupt D_ISR_int2/// using 1 /下降沿
{///hs 下沿有效
//// hs信号的计数在vs有效的时候清零,这样usHs_count=D_row_get就代表
//// 当前一帧画面里面的第D_row_get个hs,也就是一个画面中的第几行数据
if(s_task_GC032A.next_line)
{///D_P33_REV();
s_task_GC032A.next_line = 0;///因为接收一行数据的时间远远小于发送的时间
///因此添加这个为了提高可靠性
///发送完了后由“gc032a任务”启动
s_task_GC032A.lines = DR_line_n;////保存当前的行号到缓存中,因为行号变化的速度超过
////发送的速度,当在"gc032A任务"中使用的时候DR_line_n 已经变化了
///0 24 58 94 129 165 200 236 271 307 342 378
/*****
if(D_line_get == DR_line_n)
{
s_task_GC032A.line_get = 1;
}
******/
D_PCLK_open();///启动记录下一行数据
DR_pclk_n = 0;
}
DR_line_n ++;///当前行数增加
}
////s_task_GC032A.buf 存放的是一行的数据
//// pclk int0 每个点的采样
void L0_PCLK_Isr(void) interrupt D_ISR_int0 //// using 10///
{///PCLK
// D_P34_REV();
//// DR_Dat = P1; s_task_GC032A.buf[DR_pclk_n] = DR_Dat;
s_task_GC032A.buf[DR_pclk_n] = P1;
////s_task_GC032A.buf[DR_pclk_n] = 0xcc;
///s_task_GC032A.buf[DR_pclk_n] = DR_pclk_n;
DR_pclk_n++;// D_P34_REV();
if(DR_pclk_n > D_pclk_per_hs) ////一行的有效数据接收完成 采样了 D_pclk_per_hs个固定数据
{
D_PCLK_close();
DR_pclk_n = D_pclk_per_hs; ///fixme
s_task_GC032A.line_ok = 1; ////给“gc032a任务”传递消息 可以开始计算或者发送了
}
}
////收到 next_line 记录当前第几行lines,启动 pclk,采集数据到buf中,然后line_ok
///// send buf, set next_line after send buf over
#endif

62
source/bsp/backu/bsp_cam_isr.h

@ -1,62 +0,0 @@
////////////////////////////////////////////////////////////////////////////
///@copyright Copyright (c) 2018, ´«¿Ø¿Æ¼¼ All rights reserved.
///-------------------------------------------------------------------------
/// @file bsp_gc6133.c.h
/// @brief bsp @ driver config
///-------------------------------------------------------------------------
/// @version 1.0
/// @author CC
/// @date 20180331
/// @note cc_AS_stc02
//////////////////////////////////////////////////////////////////////////////
#ifndef _bsp_cam_isr_H
#define _bsp_cam_isr_H
#include "../bsp/bsp_config.h"
#include "../tpc/tpc_uart.h"
#include "../msp/uart0.h"
#include "bsp_gc032a.h"
#define D_VSYNCS_open(); L0_INT3_OPEN();
#define D_VSYNCS_close(); L0_INT3_CLOSE();
#define D_HSYNCS_open(); L0_INT2_OPEN();
#define D_HSYNCS_close(); L0_INT2_CLOSE();
#define D_PCLK_open(); L0_INT0_OPEN();
#define D_PCLK_close(); L0_INT0_CLOSE();
#define DR_pclk_n gRccUs05
#define DR_line_n gRccUs01
#define DR_line_n_H gRccUs01_H
#define DR_line_n_L gRccUs01_L
///// #define DR_Hs_count gRccUs02//s_task_GC032A.usPclk
///#define DR_Dat CCAP1L
#define DR_Dat SPDAT
//>>>>>>>>>>>>>>>>>>>>>0gc63xxtask
//#define D_row_max 640
////////////////////////////////////////////////////////////////////
extern void L0_cam_isr_init(void) ;
#endif // #ifndef _bsp_cam_isr_H

53
source/bsp/backu/bsp_func.c

@ -1,53 +0,0 @@
////////////////////////////////////////////////////////////////////////////
///@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 "bsp_func.h"
#include "../msp/uart0.h"
//#include "../tpc/tpc_modbus.h"
///struct _s_sysclk s_sysclk;
////MCLK0 配置 不需要的时候关闭以节约电
void L0_MCLKO_init(U8 onf)
{
BITN_1(P_SW2,EAXFR);
CKSEL &= B0000_0011;
if (D_ON == onf)
{
///-----------------------------------------------------
// p107@stc8.pdf
///step 1 :设置system out clock
//BITS_CLR(CKSEL,BITC_4,BIT4); /// 对REG的 从BITx开始 清除 N位
///多位配置,一定要配对使用,先清除再设置。
BITS_SET(CKSEL,D_CLKODIV_DIV8);/// sytem out clock 300k
///step 2 :设置IO
BITN_0(CKSEL,MCLKO_S);/// P5.4 SELECTED
BITN_0(P5M1,BITN4);BITN_1(P5M0,BITN4);/// 01 推挽
}
else
{
BITS_CLR(CKSEL,BITC_4,BIT4);
BITN_1(P5M1,BITN4);BITN_0(P5M0,BITN4);/// 00 准双向口01 推挽输出10 高阻11 开漏
//// 32k 下L1_task_Tdelay(D_Tdelay_ms); 变成了大约8s
///fixme
/// BITN_1(P5M1,BITN4);BITN_0(P5M0,BITN4);/// 00 准双向口01 推挽输出10 高阻11 开漏
///? 使用10 功耗增加11.130 使用01 功耗为10.65
//P54 = 1; 推挽 居然比高阻省电 另外推挽下面 =1比=0省电 10uA
}
BITN_0(P_SW2,EAXFR);
}

52
source/bsp/backu/bsp_func.h

@ -1,52 +0,0 @@
////////////////////////////////////////////////////////////////////////////
///@copyright Copyright (c) 2018, ´«¿Ø¿Æ¼¼ All rights reserved.
///-------------------------------------------------------------------------
/// @file bsp_func.c
/// @brief bsp_func
///-------------------------------------------------------------------------
/// @version 1.0
/// @author CC
/// @date 20170122
/// @note cc_AS_stc01
//////////////////////////////////////////////////////////////////////////////
#ifndef _bsp_func_H
#define _bsp_func_H
#include "../bsp/bsp_config.h"
#include "../clib/bit.h"
struct _s_sysclk
{
U32 m;
U32 clk;
U32 out;
};
extern struct _s_sysclk s_sysclk;
#define P3130 0
//#define P1617 0
#define P3736 1
extern void L0_MCLKO_init(U8 onf);
#define D_CLKODIV_NONE 0
#define D_CLKODIV_DIV1 B0001_0000
#define D_CLKODIV_DIV2 B0010_0000
#define D_CLKODIV_DIV4 B0100_0000
#define D_CLKODIV_DIV8 B0110_0000
#define D_CLKODIV_DIV16 B1000_0000
#define D_CLKODIV_DIV32 B1010_0000
#define D_CLKODIV_DIV64 B1100_0000
#define D_CLKODIV_DIV128 B1110_0000
#define D_CLKODIV_MCLKO_S BITN3
#define D_CLKODIV_MCKSEL_IN24M B0000_0000
#define D_CLKODIV_MCKSEL_EXTERN B0000_0001
#define D_CLKODIV_MCKSEL_IN32K B0000_0011
#endif // #ifndef _bsp_func_H

773
source/bsp/backu/bsp_gc032a.c

@ -1,773 +0,0 @@
#include "bsp_gc032a.h"
#if 0
const U8 GC6133_init_reg_sys[][2]= {
/*System*/
{0xf3,0xff},
{0xf5,0x06},
{0xf7,0x01},
{0xf9,0xce},
{0xfa,0x00},
//1002 {0xf8,0x03},//////分频 {0xf8,0x03},
{0xf8,0x0f},//////分频 {0xf8,0x03},
// {0xfa,D_0xfa}, // cc add
/// {0xfd,D_0xfa}, // cc add
/// {0xfa,D_0xfa}, // cc add
/// {0xfd,D_0xfa}, // cc add
///20181002启动时使用较高频率 当启动后恢复低频率
{0xfc,0x02},
{0x00,0x00}
/// ///20181003
//
};
const U8 GC6133_init_reg_tbl[][2]= {
{0xfe,0x02},//page 2
{0x81,0x03},
{0xfe,0x00},
{0x77,0x64},
{0x78,0x40},
{0x79,0x60},
/*ANALOG & CISCTL*/
{0xfe,0x00},//page 0
{0x03,0x01},
{0x04,0xce},
{0x05,0x01},
{0x06,0xad},
{0x07,0x00},
{0x08,0x10},
{0x0a,0x00},
{0x0c,0x00},
{0x0d,0x01},
{0x0e,0xe8},
{0x0f,0x02},
{0x10,0x88},
{0x17,0x54},
{0x19,0x08},
{0x1a,0x0a},
{0x1f,0x40},
{0x20,0x30},
{0x2e,0x80},
{0x2f,0x2b},
{0x30,0x1a},
{0xfe,0x02},
{0x03,0x02},
{0x05,0xd7},
{0x06,0x60},
{0x08,0x80},
{0x12,0x89},
/* BLK*/
{0xfe,0x00},//page 1
{0x18,0x02},
{0xfe,0x02},//page 2
{0x40,0x22},
{0x45,0x00},
{0x46,0x00},
{0x49,0x20},
{0x4b,0x3c},
{0x50,0x20},
{0x42,0x10},
/*ISP*/
{0xfe,0x01},//page 1
{0x0a,0xc5},
{0x45,0x00},
{0xfe,0x00},//page 0
{0x40,0xff},
{0x41,0x25},
{0x42,0xcd},///cc201805 close AWB{0x42,0xcf},
/// {0x44,0x83},///P0:0x44 Output_format [7] YUV420_row_switch 5’h03: Y Cr Y Cb
{0x44,B1001_0000},///P0:0x44 Output_format [7] YUV420_row_switch 5’h10: only Y
{0x43,0x12},////{0x43,D_P00x43},// ///EABLE CrCb fixed en 02
/** P0:0x43 special_effect 7 0x00 RW [7] NA
[6] subsample2
[5] subsample4
[4] GAMMA_en
[3:2] only_edge_map
[1] CrCb_ fixed_en
[0] inverse color*/
{0xda,0x00},
{0xdb,0x00},
/////{0x46,0x22},
////-------------------------------------
{0x46,B0010_1000},// hs high pclk polarity {0x46,0x22},
/* P0:0x46 sync_mode 8 0x0f RW
[7] data delay half
[6] hsync delay half
[5] odd_even_col_switch
[4] odd_even_row_switch
[3] opclk gated in HB
[2] opclk polarity
[1] hsync polarity
[0] vsync polarity*/
// {0x4c,D_P00x4c},//lsc test image
// {0x4D,0xfc},//lsc test image
// {0x4a,0x86},//////div_gate+clk_en 82
/**P0:0x4a Clock_gating_e
n
8 0x82 RW [7] ISP quiet mode
[6] close AAA pclk
[5]vb change
[4]vb chang flop
---------------------
[3]hb change
[2] DIV_gatedclk_en
[1] exception
[0] AEC_delay_mode*/
////-------------------------------------
{0x49,0x03},
{0x52,0x02},
{0x54,0x00},
{0xfe,0x02},
{0x22,0xf6},
/*Shading*/
{0xfe,0x01},//page 1
{0xc1,0x38},
{0xc2,0x4c},
{0xc3,0x00},
{0xc4,0x32},
{0xc5,0x24},
{0xc6,0x16},
{0xc7,0x08},
{0xc8,0x08},
{0xc9,0x00},
{0xca,0x20},
{0xdc,0x8a},
{0xdd,0xa0},
{0xde,0xa6},
{0xdf,0x75},
/*AWB*//*20170110*/
{0xfe, 0x01},//page 1
{0x7c, 0x09},
{0x65, 0x06},
{0x7c, 0x08},
{0x56, 0xf4},
{0x66, 0x0f},
{0x67, 0x84},
{0x6b, 0x80},
{0x6d, 0x12},
{0x6e, 0xb0},
{0xfe, 0x01},
{0x90, 0x00},
{0x91, 0x00},
{0x92, 0xf4},
{0x93, 0xd5},
{0x95, 0x0f},
{0x96, 0xf4},
{0x97, 0x2d},
{0x98, 0x0f},
{0x9a, 0x2d},
{0x9b, 0x0f},
{0x9c, 0x59},
{0x9d, 0x2d},
{0x9f, 0x67},
{0xa0, 0x59},
{0xa1, 0x00},
{0xa2, 0x00},
{0x86, 0x00},
{0x87, 0x00},
{0x88, 0x00},
{0x89, 0x00},
{0xa4, 0x00},
{0xa5, 0x00},
{0xa6, 0xd4},
{0xa7, 0x9f},
{0xa9, 0xd4},
{0xaa, 0x9f},
{0xab, 0xac},
{0xac, 0x9f},
{0xae, 0xd4},
{0xaf, 0xac},
{0xb0, 0xd4},
{0xb1, 0xa3},
{0xb3, 0xd4},
{0xb4, 0xac},
{0xb5, 0x00},
{0xb6, 0x00},
{0x8b, 0x00},
{0x8c, 0x00},
{0x8d, 0x00},
{0x8e, 0x00},
{0x94, 0x50},
{0x99, 0xa6},
{0x9e, 0xaa},
{0xa3, 0x0a},
{0x8a, 0x00},
{0xa8, 0x50},
{0xad, 0x55},
{0xb2, 0x55},
{0xb7, 0x05},
{0x8f, 0x00},
{0xb8, 0xb3},
{0xb9, 0xb6},
/*CC*/
{0xfe,0x01},//page 0
{0xd0,0x40},
{0xd1,0xf8},
{0xd2,0x00},
{0xd3,0xfa},
{0xd4,0x45},
{0xd5,0x02},
{0xd6,0x30},
{0xd7,0xfa},
{0xd8,0x08},
{0xd9,0x08},
{0xda,0x58},
{0xdb,0x02},
{0xfe,0x00},
/*Gamma*/
{0xfe,0x00},//page 0
{0xba,0x00},
{0xbb,0x04},
{0xbc,0x0a},
{0xbd,0x0e},
{0xbe,0x22},
{0xbf,0x30},
{0xc0,0x3d},
{0xc1,0x4a},
{0xc2,0x5d},
{0xc3,0x6b},
{0xc4,0x7a},
{0xc5,0x85},
{0xc6,0x90},
{0xc7,0xa5},
{0xc8,0xb5},
{0xc9,0xc2},
{0xca,0xcc},
{0xcb,0xd5},
{0xcc,0xde},
{0xcd,0xea},
{0xce,0xf5},
{0xcf,0xff},
/*Auto Gamma*/
{0xfe,0x00},
{0x5a,0x08},
{0x5b,0x0f},
{0x5c,0x15},
{0x5d,0x1c},
{0x5e,0x28},
{0x5f,0x36},
{0x60,0x45},
{0x61,0x51},
{0x62,0x6a},
{0x63,0x7d},
{0x64,0x8d},
{0x65,0x98},
{0x66,0xa2},
{0x67,0xb5},
{0x68,0xc3},
{0x69,0xcd},
{0x6a,0xd4},
{0x6b,0xdc},
{0x6c,0xe3},
{0x6d,0xf0},
{0x6e,0xf9},
{0x6f,0xff},
/*Gain*/
{0xfe,0x00},
{0x70,0x50},
/*AEC*/
{0xfe,0x00},//page 0
{0x4f,0x00},///cc201805 close ACE /// {0x4f,0x01},
{0xfe,0x01},//page 1
{0x0d,0x00},//08 add 20170110
{0x12,0xa0},
{0x13,0x3a},
{0x44,0x04},
{0x1f,0x30},
{0x20,0x40},
{0x26,0x9a},
{0x3e,0x20},
{0x3f,0x2d},
{0x40,0x40},
{0x41,0x5b},
{0x42,0x82},
{0x43,0xb7},
{0x04,0x0a},
{0x02,0x79},
{0x03,0xc0},
/*measure window*/
{0xfe,0x01},//page 1
{0xcc,0x08},
{0xcd,0x08},
{0xce,0xa4},
{0xcf,0xec},
/*DNDD*/
{0xfe,0x00},
{0x81,0xb8},
{0x82,0x12},
{0x83,0x0a},
{0x84,0x01},
{0x86,0x50},
{0x87,0x18},
{0x88,0x10},
{0x89,0x70},
{0x8a,0x20},
{0x8b,0x10},
{0x8c,0x08},
{0x8d,0x0a},
/*Intpee*/
{0xfe,0x00},
{0x8f,0xaa},
{0x90,0x9c},
{0x91,0x52},
{0x92,0x03},
{0x93,0x03},
{0x94,0x08},
{0x95,0x44},
{0x97,0x00},
{0x98,0x00},
/*ASDE*/
{0xfe,0x00},
{0xa1,0x30},
{0xa2,0x41},
{0xa4,0x30},
{0xa5,0x20},
{0xaa,0x30},
{0xac,0x32},
/*YCP*/
{0xfe,0x00},
{0xd1,0x3c},
{0xd2,0x3c},
{0xd3,0x38},
{0xd6,0xf4},
{0xd7,0x1d},
{0xdd,0x73},
{0xde,0x84},
/*Banding*/
{0xfe,0x00},
{0x05,0x01},
{0x06,0xad},
{0x07,0x00},
{0x08,0x10},
{0xfe,0x01},
{0x25,0x00},
{0x26,0x9a},
{0x27,0x01},
{0x28,0xce},
{0x29,0x03},
{0x2a,0x02},
{0x2b,0x04},
{0x2c,0x36},
{0x2d,0x07},
{0x2e,0xd2},
{0x2f,0x0b},
{0x30,0x6e},
{0x31,0x0e},
{0x32,0x70},
{0x33,0x12},
{0x34,0x0c},
{0x3c,0x30},
{0xfe,0x00},
{0x00,0x00}
};
#else
const U8 code GC6133_init_reg_tbl[][2]= {
/*System*/
{0xf3,0xff},
{0xf5,0x06},
{0xf7,0x01},
{0xf9,0xce},
{0xfa,0x00},
//1002 {0xf8,0x03},//////分频 {0xf8,0x03},
{0xf8,0x0f},//////分频 {0xf8,0x03},
// {0xfa,D_0xfa}, // cc add
/// {0xfd,D_0xfa}, // cc add
/// {0xfa,D_0xfa}, // cc add
/// {0xfd,D_0xfa}, // cc add
///20181002启动时使用较高频率 当启动后恢复低频率
{0xfc,0x02},
{0xfe,0x02},//page 2
{0x81,0x03},
{0xfe,0x00},
{0x77,0x64},
{0x78,0x40},
{0x79,0x60},
/*ANALOG & CISCTL*/
{0xfe,0x00},//page 0
{0x03,0x01},
{0x04,0xce},
{0x05,0x01},
{0x06,0xad},
{0x07,0x00},
{0x08,0x10},
{0x0a,0x00},
{0x0c,0x00},
{0x0d,0x01},
{0x0e,0xe8},
{0x0f,0x02},
{0x10,0x88},
{0x17,0x54},
{0x19,0x08},
{0x1a,0x0a},
{0x1f,0x40},
{0x20,0x30},
{0x2e,0x80},
{0x2f,0x2b},
{0x30,0x1a},
{0xfe,0x02},
{0x03,0x02},
{0x05,0xd7},
{0x06,0x60},
{0x08,0x80},
{0x12,0x89},
/* BLK*/
{0xfe,0x00},//page 1
{0x18,0x02},
{0xfe,0x02},//page 2
{0x40,0x22},
{0x45,0x00},
{0x46,0x00},
{0x49,0x20},
{0x4b,0x3c},
{0x50,0x20},
{0x42,0x10},
/*ISP*/
{0xfe,0x01},//page 1
{0x0a,0xc5},
{0x45,0x00},
{0xfe,0x00},//page 0
{0x40,0xff},
{0x41,0x25},
{0x42,0xcd},///cc201805 close AWB{0x42,0xcf},
/// {0x44,0x83},///P0:0x44 Output_format [7] YUV420_row_switch 5’h03: Y Cr Y Cb
{0x44,B1001_0000},///P0:0x44 Output_format [7] YUV420_row_switch 5’h10: only Y
{0x43,0x12},////{0x43,D_P00x43},// ///EABLE CrCb fixed en 02
/** P0:0x43 special_effect 7 0x00 RW [7] NA
[6] subsample2
[5] subsample4
[4] GAMMA_en
[3:2] only_edge_map
[1] CrCb_ fixed_en
[0] inverse color*/
{0xda,0x00},
{0xdb,0x00},
/////{0x46,0x22},
////-------------------------------------
{0x46,B0010_1000},// hs high pclk polarity {0x46,0x22},
/* P0:0x46 sync_mode 8 0x0f RW
[7] data delay half
[6] hsync delay half
[5] odd_even_col_switch
[4] odd_even_row_switch
[3] opclk gated in HB
[2] opclk polarity
[1] hsync polarity
[0] vsync polarity*/
// {0x4c,D_P00x4c},//lsc test image
// {0x4D,0xfc},//lsc test image
// {0x4a,0x86},//////div_gate+clk_en 82
/**P0:0x4a Clock_gating_e
n
8 0x82 RW [7] ISP quiet mode
[6] close AAA pclk
[5]vb change
[4]vb chang flop
---------------------
[3]hb change
[2] DIV_gatedclk_en
[1] exception
[0] AEC_delay_mode*/
////-------------------------------------
{0x49,0x03},
{0x52,0x02},
{0x54,0x00},
{0xfe,0x02},
{0x22,0xf6},
/*Shading*/
{0xfe,0x01},//page 1
{0xc1,0x38},
{0xc2,0x4c},
{0xc3,0x00},
{0xc4,0x32},
{0xc5,0x24},
{0xc6,0x16},
{0xc7,0x08},
{0xc8,0x08},
{0xc9,0x00},
{0xca,0x20},
{0xdc,0x8a},
{0xdd,0xa0},
{0xde,0xa6},
{0xdf,0x75},
/*AWB*//*20170110*/
{0xfe, 0x01},//page 1
{0x7c, 0x09},
{0x65, 0x06},
{0x7c, 0x08},
{0x56, 0xf4},
{0x66, 0x0f},
{0x67, 0x84},
{0x6b, 0x80},
{0x6d, 0x12},
{0x6e, 0xb0},
{0xfe, 0x01},
{0x90, 0x00},
{0x91, 0x00},
{0x92, 0xf4},
{0x93, 0xd5},
{0x95, 0x0f},
{0x96, 0xf4},
{0x97, 0x2d},
{0x98, 0x0f},
{0x9a, 0x2d},
{0x9b, 0x0f},
{0x9c, 0x59},
{0x9d, 0x2d},
{0x9f, 0x67},
{0xa0, 0x59},
{0xa1, 0x00},
{0xa2, 0x00},
{0x86, 0x00},
{0x87, 0x00},
{0x88, 0x00},
{0x89, 0x00},
{0xa4, 0x00},
{0xa5, 0x00},
{0xa6, 0xd4},
{0xa7, 0x9f},
{0xa9, 0xd4},
{0xaa, 0x9f},
{0xab, 0xac},
{0xac, 0x9f},
{0xae, 0xd4},
{0xaf, 0xac},
{0xb0, 0xd4},
{0xb1, 0xa3},
{0xb3, 0xd4},
{0xb4, 0xac},
{0xb5, 0x00},
{0xb6, 0x00},
{0x8b, 0x00},
{0x8c, 0x00},
{0x8d, 0x00},
{0x8e, 0x00},
{0x94, 0x50},
{0x99, 0xa6},
{0x9e, 0xaa},
{0xa3, 0x0a},
{0x8a, 0x00},
{0xa8, 0x50},
{0xad, 0x55},
{0xb2, 0x55},
{0xb7, 0x05},
{0x8f, 0x00},
{0xb8, 0xb3},
{0xb9, 0xb6},
/*CC*/
{0xfe,0x01},//page 0
{0xd0,0x40},
{0xd1,0xf8},
{0xd2,0x00},
{0xd3,0xfa},
{0xd4,0x45},
{0xd5,0x02},
{0xd6,0x30},
{0xd7,0xfa},
{0xd8,0x08},
{0xd9,0x08},
{0xda,0x58},
{0xdb,0x02},
{0xfe,0x00},
/*Gamma*/
{0xfe,0x00},//page 0
{0xba,0x00},
{0xbb,0x04},
{0xbc,0x0a},
{0xbd,0x0e},
{0xbe,0x22},
{0xbf,0x30},
{0xc0,0x3d},
{0xc1,0x4a},
{0xc2,0x5d},
{0xc3,0x6b},
{0xc4,0x7a},
{0xc5,0x85},
{0xc6,0x90},
{0xc7,0xa5},
{0xc8,0xb5},
{0xc9,0xc2},
{0xca,0xcc},
{0xcb,0xd5},
{0xcc,0xde},
{0xcd,0xea},
{0xce,0xf5},
{0xcf,0xff},
/*Auto Gamma*/
{0xfe,0x00},
{0x5a,0x08},
{0x5b,0x0f},
{0x5c,0x15},
{0x5d,0x1c},
{0x5e,0x28},
{0x5f,0x36},
{0x60,0x45},
{0x61,0x51},
{0x62,0x6a},
{0x63,0x7d},
{0x64,0x8d},
{0x65,0x98},
{0x66,0xa2},
{0x67,0xb5},
{0x68,0xc3},
{0x69,0xcd},
{0x6a,0xd4},
{0x6b,0xdc},
{0x6c,0xe3},
{0x6d,0xf0},
{0x6e,0xf9},
{0x6f,0xff},
/*Gain*/
{0xfe,0x00},
{0x70,0x50},
/*AEC*/
{0xfe,0x00},//page 0
{0x4f,0x00},///cc201805 close ACE /// {0x4f,0x01},
{0xfe,0x01},//page 1
{0x0d,0x00},//08 add 20170110
{0x12,0xa0},
{0x13,0x3a},
{0x44,0x04},
{0x1f,0x30},
{0x20,0x40},
{0x26,0x9a},
{0x3e,0x20},
{0x3f,0x2d},
{0x40,0x40},
{0x41,0x5b},
{0x42,0x82},
{0x43,0xb7},
{0x04,0x0a},
{0x02,0x79},
{0x03,0xc0},
/*measure window*/
{0xfe,0x01},//page 1
{0xcc,0x08},
{0xcd,0x08},
{0xce,0xa4},
{0xcf,0xec},
/*DNDD*/
{0xfe,0x00},
{0x81,0xb8},
{0x82,0x12},
{0x83,0x0a},
{0x84,0x01},
{0x86,0x50},
{0x87,0x18},
{0x88,0x10},
{0x89,0x70},
{0x8a,0x20},
{0x8b,0x10},
{0x8c,0x08},
{0x8d,0x0a},
/*Intpee*/
{0xfe,0x00},
{0x8f,0xaa},
{0x90,0x9c},
{0x91,0x52},
{0x92,0x03},
{0x93,0x03},
{0x94,0x08},
{0x95,0x44},
{0x97,0x00},
{0x98,0x00},
/*ASDE*/
{0xfe,0x00},
{0xa1,0x30},
{0xa2,0x41},
{0xa4,0x30},
{0xa5,0x20},
{0xaa,0x30},
{0xac,0x32},
/*YCP*/
{0xfe,0x00},
{0xd1,0x3c},
{0xd2,0x3c},
{0xd3,0x38},
{0xd6,0xf4},
{0xd7,0x1d},
{0xdd,0x73},
{0xde,0x84},
/*Banding*/
{0xfe,0x00},
{0x05,0x01},
{0x06,0xad},
{0x07,0x00},
{0x08,0x10},
{0xfe,0x01},
{0x25,0x00},
{0x26,0x9a},
{0x27,0x01},
{0x28,0xce},
{0x29,0x03},
{0x2a,0x02},
{0x2b,0x04},
{0x2c,0x36},
{0x2d,0x07},
{0x2e,0xd2},
{0x2f,0x0b},
{0x30,0x6e},
{0x31,0x0e},
{0x32,0x70},
{0x33,0x12},
{0x34,0x0c},
{0x3c,0x30},
{0xfe,0x00},
{0x00,0x00}
};
#endif

19
source/bsp/backu/bsp_gc032a.h

@ -1,19 +0,0 @@
#ifndef _gc_032a_H_
#define _gc_032a_H_
#include "../bsp/bsp_config.h"
#include "../clib/type.h"
#include "../clib/clib.h"
#include "../ctask/tick.h"
//#define GC6133_reg_tbl_len 291 GC6133_reg_tbl_len+1
#define GC6133_reg_tbl_len (292)
extern U8 code GC6133_init_reg_tbl[][2];
#endif///_gc_032a_H_

261
source/bsp/backu/bsp_msa300.c

@ -1,261 +0,0 @@
////////////////////////////////////////////////////////////////////////////
///@copyright Copyright (c) 2017, 传控科技 All rights reserved.
///-------------------------------------------------------------------------
/// @file msa300.c
/// @brief msa300 driver app
///-------------------------------------------------------------------------
/// @version 1.0
/// @author CC
/// @date 20170122
/// @note cc_AS_stc01
//////////////////////////////////////////////////////////////////////////////
/******************************************************************************/
/***************************** Include Files **********************************/
/******************************************************************************/
#include "bsp_msa300.h"
#include "../msp/uart0.h"
struct _s_gsens_ s_as;//[D_as_ch_mun];
// data*3.91mg/LSB 1g = 90 1/2g = 45 1/3g = 30 333mg/3.91mg = 85d=0x55
/// 倾斜30度就启动
//#define D_actionTH_init 0x02
#define D_actionTH_init 0x0f
//#define D_actionTH_init 0x25 /// z轴调到25算是临界值
////#define D_actionTH_init 0x0c
////#define D_actionTH_init 0x04
/// 中断持续的时间为4s 4s后中断结束 产生下降沿
// #define D_latch_time_init D_latch_4s
#define D_latch_time_init D_latch_50ms
#if 0
void L1_as_power_mode(unsigned char dev,unsigned char ps)
{
// s_as[0].reg_power
s_as[0].reg_power &= 0x3f;
s_as[0].reg_power |= ps;
L2_I2C_WriteCmd(dev,MSA_REG_POWERMODE_BW,s_as[0].reg_power); // 进入normal 模式
}
/// D_sensor_active_close();DL_ms300_int_close();
/// L1_as_WorkStatus(D_wakeup);
///extern void L1_as_WorkStatus(unsigned char d);
void L1_as_WorkStatus(unsigned char d)
{
if(D_wakeup == d)
{
/// L1_ms300_reg_set(MSA_REG_INTERRUPT_MAPPING3,D_INT2_S_TAP|D_INT2_ACTIVE);
D_sensor_active_open();BITN_0(DR_who_wakeup, DRB_who_wakeup_action);
}else
{
/// L1_ms300_reg_set(MSA_REG_INTERRUPT_MAPPING3,0);
D_sensor_active_close();
}
}
void L1_as_action(void)
{
L2_I2C_ReadReg(D_i2c_addr_Gsensor,MSA_REG_Tape_Active_Status,&s_as[0].reg_temp,1); /// read only
///L0_uart0_uc('.');
s_as[0].reg_temp &= B0111_0111;/// 去掉符号位
if(s_as[0].reg_action == s_as[0].reg_temp)
{
}else
{
s_as[0].action_ok = 1;
s_as[0].reg_action = s_as[0].reg_temp;
}
/// L0_uart0_uchex(s_as[0].reg_temp)
}
#endif
/// msa300 初始化 调用前必须使用iic的初始化
/// 如需使用中断 还必须EA 启动
void L1_msa300_init(void)
{
///
///step 1: 读取power reg
LD_gsensor_power(D_PowerMode_normal );
/// 上电后是standby 模式 需要设置 00:normal mode, 01:low power mode, 10/11 suspend mode
///step 2: 设置分辨率和加速度范围
/// L1_ms300_reg_set(MSA_REG_G_RANGE,((D_MSA_14BIT)|(D_MSA_2G))); // 8b8t 2g
L1_ms300_reg_set(MSA_REG_G_RANGE,((D_MSA_8BIT)|(D_MSA_2G))); // 8b8t 2g
// L1_ms300_reg_set(NSA_REG_ODR_AXIS_DISABLE,
// D_ODR_31Hz25);
///step 3: 设置 输出频率和带宽bandwidth 带宽总是输出频率的一半
/// ODR BW
/// 15.63Hz (0100) 7.81Hz
/// CLOSE Y关闭 y轴 因为模块是竖着的
L1_ms300_reg_set(MSA_REG_ODR_AXIS_DISABLE,D_AXIS_DIS_Y|D_ODR_15P63Hz);
// L1_ms300_reg_set(MSA_REG_ODR_AXIS_DISABLE,D_ODR_31Hz25);
////--------------------------------------------------------------------------
//CC-MD-VH06
/// for pcb (INT1 PIN5 ) --- SENSINT2---(P3.0 INT1)
/// (INT2 PIN6 ) --- SENSINT3---(P3.1/INT0)
///step 4: active 中断 使能XZ轴
L1_ms300_reg_set(MSA_REG_INTERRUPT_SETTINGS1,
ACTIVE_INT_EN_Y|ACTIVE_INT_EN_X); /// fixme:需要调试ACTIVE_INT_EN_Y
L1_ms300_reg_set(D_Active_TH,D_actionTH_init);
///step 5:
/// ACTIVE 中断和 single tap中断映射到 int2上,也就是int2电平变化,通知mcu处理
/// ps3.sch msa300.int1==sensint2 msa300.int2==sensint3 ---rxd
/// L1_ms300_reg_set(MSA_REG_INTERRUPT_MAPPING1,INT1_ACTIVE|INT1_S_TAP_INT);
// L1_ms300_reg_set(MSA_REG_INTERRUPT_MAPPING3,D_INT2_ACTIVE);
L1_ms300_reg_set(MSA_REG_INTERRUPT_MAPPING3,D_INT2_S_TAP|D_INT2_ACTIVE);
/// INT2_OD 0: push-pull
/// INT2_LVL 0: low, 1:high
/// L1_ms300_reg_set(MSA_REG_INT_PIN_CONFIG,D_INT2_OD|D_INT2_LVL_low);
L1_ms300_reg_set(MSA_REG_INT_PIN_CONFIG,D_INT2_pull|D_INT2_LVL_low);
///L1_ms300_reg_set(MSA_REG_INT_PIN_CONFIG,0|D_INT2_LVL_high);
////--------------------------------------------------------------------------
///step 6 : 锁定1s的时间 ···\_____1s______/````
L1_ms300_reg_set(MSA_REG_INT_LATCH,D_latch_time_init);
///L1_i2c_Configure(0);DL_ms300_int_open
///();D_sensor_active_open();
/// L1_as_WorkStatus(D_wakeup);
// LD_gsensor_power(D_PowerMode_normal );
LD_gsensor_power(D_PowerMode_low );
}
#if 0///nouse
///0x02 ACC_X[5:0] 0x00
//0x03 ACC_X[13:6] 0x00
//0x04 ACC_Y[5:0] 0x00
//0x05 ACC_Y[13:6] 0x00
//0x06 ACC_Z[5:0] 0x00
//0x07 ACC_Z[13:6] 0x00
/// 0 1 2 3 4 5
// x5:0 x13:6 y5:0 y13:6 z5:0 z13:6
void L1_as_readXYZ(unsigned char CH)
{
/**********************************************
///read data
//S ADD W A REG A
//S ADD R A D1 A D2 A.....DX N P
L2_I2C_ReadReg(D_i2c_addr_AS1,0x02,(unsigned char *)s_as[CH].d,6);
////d 0 1 2 3 4 5
//// 02 03 04 05 06 07
//// XL XH YL YH ZL ZH
///
L0_uart0_uc(0x09);
// L0_uart0_uchex(s_as[0].d[0]); L0_uart0_uc(0x09);
L0_uart0_uchex(s_as[0].d[1]); L0_uart0_uc(0x09);
// L0_uart0_uchex(s_as[0].d[2]); L0_uart0_uc(0x09);
L0_uart0_uchex(s_as[0].d[3]); L0_uart0_uc(0x09);
// L0_uart0_uchex(s_as[0].d[4]); L0_uart0_uc(0x09);
L0_uart0_uchex(s_as[0].d[5]);
/// L0_uart0_sendArray((unsigned char *)&s_as[CH],6);
L0_uart0_uc(0x0d);
L0_uart0_uc(0x0a);
Lc_delay_ms(10);
*****************************************/
}
#endif //////nouse
/*****************
L2_I2C_ReadReg(D_i2c_addr_HP303B,0x0d,d,1);
L0_MUART_uc(d[0]);
L2_I2C_ReadReg(D_i2c_addr_AS1,0x05,d,1);// 11 =0f
L0_MUART_uc(d[0]);
L2_I2C_ReadReg(D_i2c_addr_AS2,0x05,d,1);//10 =0f
L0_MUART_uc(d[0]);
L1_as1_readXYZ();
s_p_rf.ucR1 = (U8)(s_as1.x>>8);
s_p_rf.ucR2 = (U8)(s_as1.y>>8);
s_p_rf.ucR3 = (U8)(s_as1.z>>8);
p = (U8*)&s_p_rf;
L0_MUART_uc(s_p_rf.ucR1);
L0_MUART_uc(s_p_rf.ucR2);
L0_MUART_uc(s_p_rf.ucR3);
L0_MUART_uc(0xc7);
*********************/
#if 0
void L3_msa300_fun(U8 *pPara)
{
U8 val = 0;
TS_P_debug *p = pPara;
/// Ac 01 02 03 ocr ---bsp_debug.c
/// p.cmd p.R2 p.R3 p.ocr
///Ac 00 03 01 00/// ACC_X[13:6]
switch(p->cmd)
{
case 0:
/// fc 00 02 01 xx 读取reg02 中的一个数据
///0x02 ACC_X[5:0] 0x00
//0x03 ACC_X[13:6] 0x00
//0x04 ACC_Y[5:0] 0x00
//0x05 ACC_Y[13:6] 0x00
//0x06 ACC_Z[5:0] 0x00
//0x07 ACC_Z[13:6] 0x00
//// Ac 00 03 01 00/// ACC_X[13:6]
//// Ac 00 05 01 00/// ACC_Y[13:6]
//// Ac 00 07 01 00/// ACC_Z[13:6]
L2_I2C_ReadReg(D_i2c_addr_AS1,p->R2 ,&val,p->R3);
///L0_uart0_uc(p->R2);
///L0_uart0_uc(p->R3);
L0_uart0_uc(val);
break;
case 2:
///Ac 02 22 01 00/// (05)=01
L0_uart0_uc('W');
///L2_I2C_WriteCmd(D_i2c_addr_AS1,p->R2,p->R3);
//L0_uart0_uc(pPara[2]);
// L0_uart0_uc(p->R2);
// L0_uart0_uc(p->R3);
break;
case 3:
///Ac 03 22 01 00/// (05)=01
L1_as_action();
if(1 == s_as[0].action_ok)
{
s_as[0].action_ok = 0;
L0_uart0_uc(s_as[0].reg_action);
}
/*********************
L2_I2C_ReadReg(D_i2c_addr_Gsensor,MSA_REG_Tape_Active_Status,&s_as[0].reg_temp,1); /// read only
///L0_uart0_uc('.');
s_as[0].reg_temp &= B0111_0111;
if(s_as[0].reg_power == s_as[0].reg_temp)
{
}else
{
L0_uart0_uc(s_as[0].reg_temp);
s_as[0].reg_power = s_as[0].reg_temp;
}*************************/
break;
default:
break;
};
}
///#else
void L3_msa300_fun(U8 *pPara)
{
}
#endif

473
source/bsp/backu/bsp_msa300.h

@ -1,473 +0,0 @@
////////////////////////////////////////////////////////////////////////////
///@copyright Copyright (c) 2017, 传控科技 All rights reserved.
///-------------------------------------------------------------------------
/// @file msa300.c
/// @brief msa300 driver app
///-------------------------------------------------------------------------
/// @version 1.0
/// @author CC
/// @date 20170122
/// @note cc_AS_stc01
//////////////////////////////////////////////////////////////////////////////
#ifndef _MSA300_H
#define _MSA300_H
#include "../clib/bit.h"
#include "../msp/iic_sim.h"
/***********************************************************************
U51(SDO=1) int2 P33 ----------------U10(SDO=0) int2 P32----------------MCU----USB
0x4c 0x4e
AS1 AS2
**************************************************************************/
#define D_i2c_addr_AS1 0x4c // u51
//#define D_i2c_addr_AS2 0x4e
/* Register define for NSA asic */
#define MSA_REG_SPI_I2C 0x00
#define MSA_REG_WHO_AM_I 0x01
#define MSA_REG_ACC_X_LSB 0x02
#define MSA_REG_ACC_X_MSB 0x03
#define MSA_REG_ACC_Y_LSB 0x04
#define MSA_REG_ACC_Y_MSB 0x05
#define MSA_REG_ACC_Z_LSB 0x06
#define MSA_REG_ACC_Z_MSB 0x07
#define MSA_REG_Tape_Active_Status 0x0B
#define MSA_REG_G_RANGE 0x0f
#define MSA_REG_ODR_AXIS_DISABLE 0x10
#define MSA_REG_POWERMODE_BW 0x11
#define MSA_REG_SWAP_POLARITY 0x12
#define MSA_REG_FIFO_CTRL 0x14
#define MSA_REG_INTERRUPT_SETTINGS1 0x16
#define MSA_REG_INTERRUPT_SETTINGS2 0x17
#define MSA_REG_INTERRUPT_MAPPING1 0x19
#define MSA_REG_INTERRUPT_MAPPING2 0x1a
#define MSA_REG_INTERRUPT_MAPPING3 0x1b
#define MSA_REG_INT_PIN_CONFIG 0x20
#define MSA_REG_INT_LATCH 0x21
#define MSA_REG_ACTIVE_DURATION 0x27
#define MSA_REG_ACTIVE_THRESHOLD 0x28
#define MSA_REG_TAP_DURATION 0x2A
#define MSA_REG_TAP_THRESHOLD 0x2B
#define MSA_REG_CUSTOM_OFFSET_X 0x38
#define MSA_REG_CUSTOM_OFFSET_Y 0x39
#define MSA_REG_CUSTOM_OFFSET_Z 0x3a
#define MSA_REG_ENGINEERING_MODE 0x7f
#define MSA_REG_SENSITIVITY_TRIM_X 0x80
#define MSA_REG_SENSITIVITY_TRIM_Y 0x81
#define MSA_REG_SENSITIVITY_TRIM_Z 0x82
#define MSA_REG_COARSE_OFFSET_TRIM_X 0x83
#define MSA_REG_COARSE_OFFSET_TRIM_Y 0x84
#define MSA_REG_COARSE_OFFSET_TRIM_Z 0x85
#define MSA_REG_FINE_OFFSET_TRIM_X 0x86
#define MSA_REG_FINE_OFFSET_TRIM_Y 0x87
#define MSA_REG_FINE_OFFSET_TRIM_Z 0x88
#define MSA_REG_SENS_COMP 0x8c
#define MSA_REG_MEMS_OPTION 0x8f
#define MSA_REG_CHIP_INFO 0xc0
#define MSA_REG_CHIP_INFO_SECOND 0xc1
#define MSA_REG_SENS_COARSE_TRIM 0xd1
/*************
-------------------------------------------------------------------
Reg 0x0F(Resolution/Range)Read/Write
Bit7 Bit6 Bit5 Bit4 |Bit3 Bit2 |Bit1 Bit0 | Default
|RESOLUTION[1:0] | FS[1:0] | 0X00
RESOLUTION[1:0]: resolution of x/y/z axes,
00:14bit, 01:12bit, 10:10bit, 11:8bit
FS[1:0]: acceleration range of x/y/z axes,
00:+/-2g, 01:+/-4g, 10:+/-8g, 11:+/-16g
*********/
#define D_MSA_8BIT B0000_1100
#define D_MSA_12BIT B0000_0100
#define D_MSA_10BIT B0000_1000
#define D_MSA_14BIT B0000_0000
#define D_MSA_16G B0000_0011
#define D_MSA_8G B0000_0001
#define D_MSA_4G B0000_0010
#define D_MSA_2G B0000_0000
/**********
ODR Output data rate 1 1000 Hz
Reg0x10(ODR) Read/Write Default 0X0F
Bit7 Bit6 Bit5
X_AXIS_DIS Y_AXIS_DIS Z_AXIS_DIS
Bit4
Bit3 Bit2 Bit1 Bit0
ODR[3:0]
X_AXIS_DIS: 0:enable, 1:disable Y_AXIS_DIS: 0:enable, 1:disable Z_AXIS_DIS: 0:enable, 1:disable
ODR[3:0]:
0000:1Hz (not available in normal mode)
0001:1.95Hz (not available in normal mode)
0010:3.9Hz 0011:7.81Hz
0100:15.63Hz 0101: 31.25Hz 0110: 62.5Hz 0111: 125Hz 1000: 250Hz
1001: 500Hz (not available in low power mode)
1010-1111: (not available in low power mode)
Table 5: bandwidth under different ODR and BW settings in normal mode
ODR BW
1000Hz (1010-1111) 500Hz
500Hz (1001) 250Hz
250Hz (1000) 125Hz
125Hz (0111) 62.5Hz
62.5Hz (0110) 31.25Hz
31.25Hz (0101) 15.63Hz
15.63Hz (0100) 7.81Hz
7.81Hz (0011) 3.9Hz
3.9Hz (0010) 1.95Hz
MSA300 supports four different acceleration measurement ranges, it is selected
ODR BW
15.63Hz (0100) 7.81Hz
*********/
/// fixme: 实测和规格书不一致
#define D_AXIS_DIS_Y B1000_0000
#define D_AXIS_DIS_X B0100_0000
#define D_AXIS_DIS_Z B0010_0000
#define D_ODR_31Hz25 0x05
#define D_ODR_250Hz 0x08
#define D_ODR_125Hz 0x0f
#define D_ODR_15P63Hz B0000_0100
/**********
Reg0x11(Power Mode/Bandwidth) Read/Write
------------------------------------------------------------------
Bit7 Bit6 |Bit5 Bit4 Bit3 Bit2 Bit1 |Bit0 Default 0X9E
----------------------------------------------------------------------
PWR_MODE | LOW_POWER_BW[3:0] |
--------------------------------------------------------------------
PWR_MODE: 00:normal mode, 01:low power mode, 10/11 suspend mode
LOW_POWER_BW[3:0]:
0000-0010:1.95Hz
0011:3.9Hz,
0100:7.81Hz
0101:15.63Hz,
0110: 31.25Hz,
0111: 62.5Hz,
1000: 125Hz,
1001: 250Hz,
1010-1111:500Hz
***********/
//#define D_PowerMode_normal 0x00
//#define D_PowerMode_low 0x40
//#define D_PowerMode_suspend 0x80
#define D_lowPower_BW (0x0F<<1)
#define D_PowerMode_normal 0x1e
#define D_PowerMode_suspend 0x9e
#define D_gs_LPBW1H9 (0<<1)
#define D_gs_LPBW3H9 (3<<1)
#define D_gs_LPBW7H8 (4<<1)
#define D_gs_LPBW15H (5<<1)
#define D_gs_LPBW31H (6<<1)
#define D_gs_LPBW62H (7<<1)
#define D_gs_LPBW125H (8<<1)
#define D_gs_LPBW250H (9<<1)
#define D_gs_LPBW500H (10<<1)
///#define D_PowerMode_low 0x5e
#define D_PowerMode_low (0x50|D_gs_LPBW1H9)
//#define D_PowerMode_low 0x5e///(0x40|D_gs_LPBW62H)
#define LD_gsensor_power(Pmode) L2_I2C_WriteCmd(D_i2c_addr_Gsensor,MSA_REG_POWERMODE_BW,Pmode);s_as.power=Pmode
/**********
/**************************************
Reg 0x1B (Int_Map_2) Read/Write
Bit7 Bit6 Bit5 Bit4 Bit3 Bit2 Bit1 Bit0 Default
Bit6 INT2_ORIENT
Bit5 INT2_S_TAP
Bit4 INT2_D_TAP
Bit2 INT2_ACTIVE
Bit1 RESERVED
Bit0 INT2_FREEFALL
0X00
INT2_ORIENT: map orientation interrupt to INT2, 0:disable, 1:enable INT2_S_TAP: map single tap interrupt to INT2, 0:disable, 1:enable INT2_D_TAP: map double tap interrupt to INT2, 0:disable, 1:enable INT2_ACTIVE: map active interrupt to INT2, 0:disable, 1:enable INT2_FREEFALL: map freefall interrupt to INT2, 0:disable, 1:enable
***************************************/
#define D_INT2_ORIENT BITN6
#define D_INT2_S_TAP BITN5
#define D_INT2_D_TAP BITN4
#define D_INT2_ACTIVE BITN2
#define D_INT2_FREEFALL BITN1
/**********************************************
Reg 0x20 (Int_Map_2) Read/Write
Bit7 Bit6 Bit5 Bit4 Bit3 Bit2 Bit1 Bit0 Default 0X00
Bit3 INT2_OD
Bit2 NT2_LVL
Bit1 IINT1_OD
Bit0 INT1_LVL
INT2_OD: select output for INT2, 0: push-pull, 1:OD
INT2_LVL: select active level for INT2, 0: low, 1:high
INT1_OD: select output for INT1, 0: push-pull, 1:OD
INT1_LVL: select active level for INT1, 0: low, 1:high
***************************************/
#define D_INT2_pull 0
#define D_INT2_OD BITN3
#define D_INT2_LVL_high BITN2
#define D_INT2_LVL_low 0
#define D_INT1_pull 0
#define D_INT1_OD BITN1
#define D_INT1_LVL_high BITN0
#define D_INT1_LVL_low 0
/*************************************************************
U51(SDO=1) int2 P33 ----------------U10(SDO=0) int2 P32----------------MCU----USB
0x4c 0x4e
AS1 AS2
--------------------------------------------------------------------
Reg 0x16(Int_Set_0) Read/Write
Bit7 Bit6 Bit5 Bit4 Bit3 Bit2 Bit1 Bit0 Default 0X00
-------------------------------------------------------------------
Tap
使 s_tap_en 使d_tap_en
: s_tap_int , d_tap_int
Bit6 ORIENT_INT_EN
Bit5 S_TAP_INT_EN
Bit4 D_TAP_INT_EN
Bit2 ACTIVE_INT_EN_Z
Bit1 ACTIVE_INT_EN_Y
Bit0 ACTIVE_INT_EN_X
-------------------------------------------------------------------
ORIENT_INT_EN: orient interrupt, 0:disable, 1:enable
S_TAP_INT_EN: single tap interrupt, 0:disable, 1:enable
D_TAP_INT_EN: double tap interrupt, 0:disable, 1:enable
ACTIVE_INT_EN_Z: active interrupt for the z axis, 0:disable, 1:enable
ACTIVE_INT_EN_Y: active interrupt for the y axis, 0:disable, 1:enable
ACTIVE_INT_EN_X: active interrupt for the x axis, 0:disable, 1:enable
reg 0x16Reg 0x19
-------------------------------------------------------------------
Reg 0x19(Int_Map_0) Read/Write
Bit7 Bit6 Bit5 Bit4 Bit3 Bit2 Bit1 Bit0 Default
-------------------------------------------------------------------
INT1_ORIENT
INT1_S_TAP
INT1_D_TAP
INT1_ACTIVE
INT1_FREEFALL
0X00
-------------------------------------------------------------------
INT1_ORIENT: map orientation interrupt to INT1, 0:disable, 1:enable
INT1_S_TAP: map single tap interrupt to INT1, 0:disable, 1:enable
INT1_D_TAP: map double tap interrupt to INT1, 0:disable, 1:enable
INT1_ACTIVE: map active interrupt to INT1, 0:disable, 1:enable
INT1_FREEFALL: map freefall interrupt to INT1, 0:disable, 1:enable
-------------------------------------------------------------------
Reg 0x27 (Active_Dur) Read/Write
Bit7 Bit6 Bit5 Bit4 Bit3 Bit2 Bit1 Bit0 Default
ACTIVE_DUR[1:0] 0X00
ACTIVE_DUR[1:0]: active duration time is (ACTIVE_DUR[1:0]+1)ms
-------------------------------------------------------------------
Reg 0x28(Active_Th) Read/Write
Bit7 Bit6 Bit5 Bit4 Bit3 Bit2 Bit1 Bit0 Default
ACTIVE_TH[7:0] 0X14
ACTIVE_TH[7:0]: threshold of active interrupt
3.91mg/LSB(2g range)
7.81mg/LSB(4g range)
15.625mg/LSB(8g range)
31.25mg/LSB(16g range)
**************************************************************************/
#define ACTIVE_INT_EN_Z BITN2
#define ACTIVE_INT_EN_Y BITN1
#define ACTIVE_INT_EN_X BITN0
/***************************************
0x21 RESET_INT LATCH_INT[3:0] 0x00
latch_int Interrupt mode
0000 non-latched
0001 temporary latched 250ms
0010 temporary latched 500ms
0011 temporary latched 1s
0100 temporary latched 2s
0101 temporary latched 4s
0110 temporary latched 8s
0111 Latched
1000 non-latched
1001 temporary latched 1ms
1010 temporary latched 1ms
1011 temporary latched 2ms
1100 temporary latched 25ms
1101 temporary latched 50ms
1110 temporary latched 100ms
1111 Latched
_______/``latch period````\_______
****************************************/
#define D_no_latched 0x01
#define D_latch_250ms 0x01
#define D_latch_500ms 0x02
#define D_latch_1s 0x03
#define D_latch_2s 0x04
#define D_latch_4s 0x05
#define D_latch_8s 0x06
#define D_latched 0x07
#define D_no_latched2 0x08
#define D_latch_1ms 0x09
#define D_latch_1ms2 0x0a
#define D_latch_2ms 0x0B
#define D_latch_25ms 0x0C
#define D_latch_50ms 0x0D
#define D_latch_100ms 0x0E
#define D_latched2 0x0f
/****************************************************
Reg 0x09(Motion_Interrupt) :Read only
Bit7 Bit6 Bit5 Bit4 Bit3 Bit2 Bit1 Bit0 Default 0X00
Bit6 ORIENT_INT
Bit5 S_TAP_INT
Bit4 D_TAP_INT
Bit2 ACTIVE_INT
Bit0 FREEFALL_INT
5s以上之后再工作 5
ORIENT_INT: orientation interrupt status,0:inactive,1:active
S_TAP_INT: single tap interrupt status,0:inactive,1:active
D_TAP_INT: double tap interrupt status,0:inactive,1:active
ACTIVE_INT: active interrupt status,0:inactive,1:active
FREEFALL_INT: freefall interrupt status,0:inactive,1:active
-------------------------------------------------------------------
Reg 0x0B(Tape_Active_Status) :Read only
Bit7 Bit6 Bit5 Bit4 Bit3 Bit2 Bit1 Bit0 Default
TAP_SIGN
TAP_FIRST_X
TAP_FIRST_Y
TAP_FIRST_Z
ACTIVE_SIGN
ACTIVE_FIRST_X
ACTIVE_FIRST_Y
ACTIVE_FIRST_Z
0X00
-------------------------------------------------------------------
TAP_SIGN: sign of tap triggering signal, 0:positive,1:negative
TAP_FIRST_X: tap interrupt triggered by x axis, 1:positive,0:negative
TAP_FIRST_Y: tap interrupt triggered by y axis, 1:positive,0:negative
TAP_FIRST_Z: tap interrupt triggered by z axis, 1:positive,0:negative
ACTIVE_SIGN: sign of active interrupt, 0:positive,1:negative
ACTIVE_FIRST_X: active interrupt triggered by x axis, 1:positive,0:negative
ACTIVE_FIRST_Y: active interrupt triggered by y axis, 1:positive,0:negative
ACTIVE_FIRST_Z: active interrupt triggered by z axis, 1:positive,0:negative
***************************************************/
#define INT1_S_TAP_INT BITN5 ///单击中断
#define INT1_D_TAP_INT BITN4 ///双击中断
#define INT1_ACTIVE BITN2 /// 振动中断
#define D_Active_TH 0x28
#define D_Active_Dur 0x27
#define D_i2c_addr_AS1 0x4c // u51
#define D_i2c_addr_AS2 0x4e
#define D_i2c_addr_Gsensor 0x4c // u51
#define D_i2c_addr_AS1 0x4c // u51
#define D_i2c_addr_AS2 0x4e
/******************************************************************************/
/***************************** Include Files **********************************/
/******************************************************************************/
// 最高400Khz 1/400 ms 2.5us
//Symbol Parameter Condition Min Max Unit
//fscl Clock frequency 400 kHz
#define D_as_ch_mun 1
struct _s_gsens_
{//8byte
U8 d[6];
// U8 reg_action;
U8 power;
// U8 reg_temp;
// U8 action_ok;
// U16 x;
// U16 y;
// U16 z;
};
extern struct _s_gsens_ s_as;
extern void L1_as_readXYZ(unsigned char CH);
extern void L1_msa300_init(void);
extern void L3_msa300_fun(U8 *pPara);
extern void L1_as_action(void);
extern void L1_as_WorkStatus(unsigned char d);
///L1_msa300_power(D_sleep);
extern void L1_msa300_power(U8 mode);
#define L1_ms300_reg_set(x,y) L2_I2C_WriteCmd(D_i2c_addr_Gsensor, (x),(y) )
#define L1_ms300_reg_get(x,y) L2_I2C_ReadReg(D_i2c_addr_Gsensor,(x),1)
#define DL_ms300_int_open(); L1_ms300_reg_set(MSA_REG_INTERRUPT_MAPPING3,D_INT2_S_TAP|D_INT2_ACTIVE);
#define DL_ms300_int_close(); L1_ms300_reg_set(MSA_REG_INTERRUPT_MAPPING3,0);
#endif // #ifndef _MSA300_H

191
source/bsp/backu/cw63xx.c

@ -1,191 +0,0 @@
////////////////////////////////////////////////////////////////////////////
///@copyright Copyright (c) 2017, 传控科技 All rights reserved.
///-------------------------------------------------------------------------
/// @file cw63xx.c
/// @brief cw630x driver app
///-------------------------------------------------------------------------
/// @version 1.0
/// @author CC
/// @date 20170122
/// @note cc_AS_stc01
/// @version 1.1
/// @author CC
/// @date 20170619
/// @note for
//////////////////////////////////////////////////////////////////////////////
#include "cw63xx.h"
//#include "../debug/debug_drv.h"
#include "../msp/iic_sim.h"
#include "../msp/uart0.h"
//#include "msa300.h"
///-------------------------------------------------------------------------
/// @breif L1_cw63xx_init
/// @param a s_task_PWON
/// @param s "L1_cw63xx_init"
/// @return none
/// @see Test() (本函数参考其它的相关的函数,这里作一个链接)
/// @note (note描述需要注意的问题)
///-------------------------------------------------------------------------
#define D_lowPower_warnning 0x02
#define D_lowPower_BAT_FULL 0x08
/*****************************
if(BITN_G(I2CTXD,BITN1))
CHG_IN DCIN 5V 0x03[5] 0 1
BAT_FULL 0 0x03[4] 0 1
BAT_OT 60 0x03[3] 0 1
BAT_UT 0 0x03[2] 0 1
LOW_BAT 3.4V 0x03[1] 0 1
BUTTON 0x03[0] 0 1
BAT_FULL中断
***************************/
void L1_cw63xx_sta(void)
{
U8 d;
L2_I2C_ReadReg(D_i2c_addr_cw63xx,D_CW63X_REG_Interrupt,&d,1);
if(BITN_G(d, BITN1))///收到低电压警告
{
I2CTXD = 1;
}
if(BITN_G(d, BITN4))///只有充满电后才低压标志被清零
{
I2CTXD = 0;
}
L2_I2C_WriteCmd(D_i2c_addr_cw63xx,D_CW63X_REG_Interrupt,0);
}
#if 0
void L1_cw63xx_init(void)
{
U8 val = 0;
// LDO1 LDO2 LDO3 LDO4
#if 0
L2_I2C_WriteCmd(D_i2c_addr_cw63xx,D_CW63X_REG_LDO1,D_CW63XX_ON|D_CW63XX_3V2); // 进入normal 模式
Lc_delay_ms(100);// 2000--7s
L2_I2C_WriteCmd(D_i2c_addr_cw63xx,D_CW63X_REG_LDO2,D_CW63XX_ON|D_CW63XX_3V2); // 打开 LDO1 并设置为1.8v
Lc_delay_ms(100);
L2_I2C_WriteCmd(D_i2c_addr_cw63xx,D_CW63X_REG_LDO3,D_CW63XX_ON|D_CW63XX_3V2); // 进入normal 模式
Lc_delay_ms(100);// 2000--7s
L2_I2C_WriteCmd(D_i2c_addr_cw63xx,D_CW63X_REG_LDO4,D_CW63XX_ON|D_CW63XX_3V2); // 打开 LDO1 并设置为1.8v
//#else
L2_I2C_WriteCmd(D_i2c_addr_cw63xx,D_power_VCC,D_CW63XX_ON|D_CW63XX_2V5); // mcu gsensor
Lc_delay_ms(10);// 2000--7s
L2_I2C_WriteCmd(D_i2c_addr_cw63xx,D_power_VCC1,D_CW63XX_ON|D_CW63XX_3V); // uart4 sed ch430 mcu_program
Lc_delay_ms(10);
L2_I2C_WriteCmd(D_i2c_addr_cw63xx,D_power_VCC2,D_CW63XX_ON|D_CW63XX_2V5); //uart 4 receive
Lc_delay_ms(10);// 2000--7s
L2_I2C_WriteCmd(D_i2c_addr_cw63xx,D_power_VCC3,D_CW63XX_ON|D_CW63XX_2V5); // 设置 AS cpu 供电2.5v
//L2_I2C_WriteCmd(D_i2c_addr_cw63xx,D_power_VCC2,D_CW63XX_ON|D_CW63XX_1V8); // 设置 AS cpu 供电2.5v
//Lc_delay_ms(600);
L2_I2C_WriteCmd(D_i2c_addr_cw63xx,D_power_VCC3,D_CW63XX_ON|D_CW63XX_2V8); // 设置 AS cpu 供电2.5v
Lc_delay_ms(10);
#endif
L2_I2C_WriteCmd(D_i2c_addr_cw63xx,D_CW63X_REG_Charge,0x3F);///150mA CHARGE
///L2_I2C_ReadReg(D_i2c_addr_cw63xx,D_CW63X_REG_Charge,&val,1);
// L0_uart0_uchex(val);
// Lc_delay_ms(10);
//// Lc_delay_ms(10);
//// L2_I2C_ReadReg(D_i2c_addr_cw63xx,D_CW63X_REG_Charge,&val,1);
//// L0_uart0_uc(val);
//// Lc_delay_ms(10);
/******************
while(9)
{
L2_I2C_WriteCmd(D_i2c_addr_cw63xx,D_power_VCC2,D_CW63XX_ON|D_CW63XX_2V8); L0_uart0_uc('e');
Lc_delay_ms(30);
L2_I2C_WriteCmd(D_i2c_addr_cw63xx,D_power_VCC2,D_CW63XX_OFF|D_CW63XX_2V8);
Lc_delay_ms(30);
}
*****************/
///--------------------------------------------------------------------
// L2_I2C_ReadReg(D_i2c_addr_cw63xx,D_CW63X_REG_LDO1,s_as1.d,4);// press
// L0_uart0_uchex(s_as1.d[0]); L0_uart0_uchex(s_as1.d[1]); L0_uart0_uchex(s_as1.d[2]); L0_uart0_uchex(s_as1.d[3]);
}
void L3_cw63xx_fun(U8 *pPara)
{
*pPara=0;
}
///#else
//// FX CMD R2 R3 4
void L3_cw63xx_fun(U8 *pPara)
{
U8 val = 0;
TS_P_debug *p = pPara;
switch(p->cmd)
{
/**********
case 0:
L1_cw63xx_init();
L0_uart0_uc('C');
L0_uart0_uc(p->R1);
L0_uart0_uc(p->R2);
L0_uart0_uc(p->R3);
break;
***********/
case 1: ////
//// AX CMDR2 R3 R4
/// AD 01 01 03 04 读取reg 01的数值
//void L2_I2C_ReadReg(unsigned char sla,unsigned char reg,
// unsigned char *r,unsigned char n)
L2_I2C_ReadReg(D_i2c_addr_cw63xx,p->R2,&val,1);
L0_uart0_uc(val);
break;
case 2: //FD 02 03 04 00
///aD 02 0A 38 00 //vcc1 off
///aD 02 0A B8 00 //vcc1 ON
///FD 02 0B 04 00 B0011_1000
///FD 02 0C 04 00
///FD 02 01 3a 00 100mA充电
L0_uart0_uc('W');
L2_I2C_WriteCmd(D_i2c_addr_cw63xx,p->R2,p->R3);
//L0_uart0_uc(pPara[2]);
L0_uart0_uc(p->R2);
L0_uart0_uc(p->R3);
break;
default:
break;
};
}
L2_I2C_ReadReg(D_i2c_addr_cw63xx,0,s_as.d,4);
L0_uart0_sendArray(s_as.d,4);
L2_I2C_WriteCmd(D_i2c_addr_cw63xx,0x03,0);////读完中断后需要写零才能清空中断
CHG_IN DCIN 5V 0x03[5] 0 1
BAT_FULL 0 0x03[4] 0 1
BAT_OT 60 0x03[3] 0 1
BAT_UT 0 0x03[2] 0 1
LOW_BAT 3.4V 0x03[1] 0 1
BUTTON 0x03[0] 0 1
BAT_FULL中断
#endif

123
source/bsp/backu/cw63xx.h

@ -1,123 +0,0 @@
////////////////////////////////////////////////////////////////////////////
///@copyright Copyright (c) 2017, 传控科技 All rights reserved.
///-------------------------------------------------------------------------
/// @file msa300.c
/// @brief msa300 driver app
///-------------------------------------------------------------------------
/// @version 1.0
/// @author CC
/// @date 20170122
/// @note cc_AS_stc01
//////////////////////////////////////////////////////////////////////////////
#ifndef _cw63xx_H
#define _cw63xx_H
#define D_i2c_addr_cw63xx 0x12
#include "../msp/iic_sim.h"
//#include "../bsp/type_hs.h"
///--------------------------------------------------------------------
#define D_CW63X_REG_system 0X00
#define D_CW63X_REG_Charge 0X01
#define D_CW63X_EN_NTC BITN7 ///Enable NTC check
#define D_CW63X_EN_CHG BITN6 /// Enable charging
#define D_CW63X_EN_TIMER BITN5 // Enalble charging timer
// in power-off state,the IC will turn off LDO1,2,3,B ut hte LDORTC/LDO4 will remain on
#define D_CW63X_power_off 0x0a
//L1_cw63xx_set(D_CW63X_REG_Safety,D_CW63X_EN_NTC|D_CW63X_EN_CHG|D_CW63X_EN_TIMER|D_CW63X_power_off);
//L1_cw63xx_set(D_CW63X_REG_Safety,D_CW63X_EN_NTC|D_CW63X_EN_CHG|D_CW63X_EN_TIMER);
///--------------------------------------------------------------------
#define D_CW63X_REG_Safety 0X02
#define D_CW63X_LowBateryThreshold 0
#define L0_set_LBT(x) ((x) - 28)
// L0_set_LBT(28)
/// L1_cw63xx_set(D_CW63X_REG_Safety,L0_set_LBT(28));/// 2.8v报警
/// fixme 依靠这个实现电源的测量
///--------------------------------------------------------------------
#define D_CW63X_REG_Interrupt 0X03
#define D_CW63X_REG_Interrupt_type 0X04
#define D_CW63X_INT_CHG_OUT BITN7 ///Charging unplugged
#define D_CW63X_INT_TIMER_EXPIRE BITN6 ///Charging timer expire
#define D_CW63X_INT_CHG_INT BITN5 ///Charger detected
#define D_CW63X_INT_BAT_FULL BITN4 ///Battery full
#define D_CW63X_INT_BAT_OT BITN3 ///Battery over temperature
#define D_CW63X_INT_BAT_UT BITN2 ///Battery under temperature
#define D_CW63X_INT_LOW_BAT BITN1 ///Battery low voltage
#define D_CW63X_INT_BUTTON BITN0 ///button detected
///--------------------------------------------------------------------
#define D_CW63X_REG_LDO1 0X0A
#define D_CW63X_REG_LDO2 0X0B
#define D_CW63X_REG_LDO3 0X0C
#define D_CW63X_REG_LDO4 0X0D
//// reg[]543] reg[210]
//// 54 3
//// || |210
#define D_CW63XX_V800 B0000_0000
#define D_CW63XX_V975 B0000_0111
#define D_CW63XX_1V4 B0001_0100
#define D_CW63XX_1V8 B0001_1100
#define D_CW63XX_2V1 B0011_0001
#define D_CW63XX_2V5 B0011_0101
#define D_CW63XX_2V8 B0011_1000
#define D_CW63XX_3V B0011_1010
#define D_CW63XX_3V2 B0011_1100
#define D_CW63XX_ON B1000_0000
#define D_CW63XX_OFF B0000_0000
////extern void L1_cw63xx_init(void);
extern void L3_cw63xx_fun(U8 *pPara);
extern void L1_cw63xx_sta(void);
///debug 使用U8
////ine L3_cw63xx_fun(x);
///---------------------------------
#define D_power_VCC1 D_CW63X_REG_LDO1
#define D_power_VCC2 D_CW63X_REG_LDO2
#define D_power_VCC3 D_CW63X_REG_LDO3
#define D_power_VCC D_CW63X_REG_LDO4
/*
#define D_power_rf_Rxd D_power_VCC2 /// rf接收模块
#define D_power_rf_Txd D_power_VCC1 /// rf 发送模块
#define D_power_AS D_power_VCC3 /// AS模块
#define L2_power_AS_OFF(); L2_I2C_WriteCmd(D_i2c_addr_cw63xx,D_power_AS,D_CW63XX_OFF|D_CW63XX_3V);
#define L2_power_AS_ON(); L2_I2C_WriteCmd(D_i2c_addr_cw63xx,D_power_AS,D_CW63XX_ON|D_CW63XX_3V);
#define L2_power_rf_Rxd_OFF(); L2_I2C_WriteCmd(D_i2c_addr_cw63xx,D_power_rf_Rxd,D_CW63XX_OFF|D_CW63XX_3V);
#define L2_power_rf_Rxd_ON(); L2_I2C_WriteCmd(D_i2c_addr_cw63xx,D_power_rf_Rxd,D_CW63XX_ON|D_CW63XX_3V);
//#define L2_power_rf_Txd_OFF(); //L2_I2C_WriteCmd(D_i2c_addr_cw63xx,D_power_rf_Txd,D_CW63XX_OFF|D_CW63XX_3V);
//#define L2_power_rf_Txd_ON(); //L2_I2C_WriteCmd(D_i2c_addr_cw63xx,D_power_rf_Txd,D_CW63XX_ON|D_CW63XX_3V);
/// fixme for the
#define L2_power_rf_Txd_OFF(); //L2_I2C_WriteCmd(D_i2c_addr_cw63xx,D_power_rf_Rxd,D_CW63XX_OFF|D_CW63XX_3V);
#define L2_power_rf_Txd_ON(); //L2_I2C_WriteCmd(D_i2c_addr_cw63xx,D_power_rf_Rxd,D_CW63XX_ON|D_CW63XX_3V);
*/
#define L1_cw63xx_init() L2_I2C_WriteCmd(D_i2c_addr_cw63xx,D_CW63X_REG_Charge,0x3F);\
L2_I2C_WriteCmd(D_i2c_addr_cw63xx,D_CW63X_REG_Safety,0x05);///n3.3v baongjin
#endif // #ifndef _cw63xx_H

75
source/bsp/board support/msa300.c

@ -1,75 +0,0 @@
////////////////////////////////////////////////////////////////////////////
///@copyright Copyright (c) 2017, 传控科技 All rights reserved.
///-------------------------------------------------------------------------
/// @file msa300.c
/// @brief msa300 driver app
///-------------------------------------------------------------------------
/// @version 1.0
/// @author CC
/// @date 20170122
/// @note cc_AS_stc01
//////////////////////////////////////////////////////////////////////////////
/******************************************************************************/
/***************************** Include Files **********************************/
/******************************************************************************/
#include "msa300.h"
struct _s_gsens_ s_as1,s_as2;
void L1_msa300_init(void)
{
/// 上电后是standby 模式 需要设置
L2_I2C_WriteCmd(D_i2c_addr_AS1,0x11,0x1e); // 进入normal 模式
L2_I2C_WriteCmd(D_i2c_addr_AS2,0x11,0x1e); // 进入normal 模式
}
void L1_as1_readXYZ(void)
{
///read data
//S ADD W A REG A
//S ADD R A D1 A D2 A.....DX N P
L2_I2C_ReadReg(D_i2c_addr_AS1,0x02,(unsigned char *)&s_as1,6);
// L2_I2C_ReadReg(D_i2c_addr_AS2,0,(unsigned char *)&s_as2,3);
}
void L1_as2_readXYZ(void)
{
///read data
//S ADD W A REG A
//S ADD R A D1 A D2 A.....DX N P
L2_I2C_ReadReg(D_i2c_addr_AS2,0x02,(unsigned char *)&s_as2,6);
}
#if 0
L2_I2C_ReadReg(D_i2c_addr_HP303B,0x0d,d,1);
L0_MUART_uc(d[0]);
L2_I2C_ReadReg(D_i2c_addr_AS1,0x05,d,1);// 11 =0f
L0_MUART_uc(d[0]);
L2_I2C_ReadReg(D_i2c_addr_AS2,0x05,d,1);//10 =0f
L0_MUART_uc(d[0]);
L1_as1_readXYZ();
s_p_rf.ucR1 = (U8)(s_as1.x>>8);
s_p_rf.ucR2 = (U8)(s_as1.y>>8);
s_p_rf.ucR3 = (U8)(s_as1.z>>8);
p = (U8*)&s_p_rf;
L0_MUART_uc(s_p_rf.ucR1);
L0_MUART_uc(s_p_rf.ucR2);
L0_MUART_uc(s_p_rf.ucR3);
L0_MUART_uc(0xc7);
#endif

63
source/bsp/board support/msa300.h

@ -1,63 +0,0 @@
////////////////////////////////////////////////////////////////////////////
///@copyright Copyright (c) 2017, ´«¿Ø¿Æ¼¼ All rights reserved.
///-------------------------------------------------------------------------
/// @file msa300.c
/// @brief msa300 driver app
///-------------------------------------------------------------------------
/// @version 1.0
/// @author CC
/// @date 20170122
/// @note cc_AS_stc01
//////////////////////////////////////////////////////////////////////////////
#ifndef _MSA300_H
#define _MSA300_H
#include "../msp/iic_sim.h"
/***********************************************************************
U51(SDO=1) int2 P33 ----------------U10(SDO=0) int2 P32----------------MCU----USB
0x4c 0x4e
AS1 AS2
**************************************************************************/
#define D_i2c_addr_AS1 0x4c // u51
#define D_i2c_addr_AS2 0x4e
/******************************************************************************/
/***************************** Include Files **********************************/
/******************************************************************************/
// ×î¸ß400Khz 1/400 ms 2.5us
//Symbol Parameter Condition Min Max Unit
//fscl Clock frequency 400 kHz
struct _s_gsens_
{//8byte
U8 d[6];
// U16 x;
// U16 y;
// U16 z;
};
extern struct _s_gsens_ s_as1,s_as2;
extern void L1_as1_readXYZ(void);
extern void L1_as2_readXYZ(void);
extern void L1_msa300_init(void);
#endif // #ifndef _MSA300_H

17
source/bsp/bsp_485.h

@ -1,17 +0,0 @@
#ifndef BSP_485_H
#define BSP_485_H
// #include "../cpu/STC_stc8a8k.h"
// #include "../cpu/c51_macro.h"
// #include "../clib/bit.h"
#include "../bsp/bsp_config.h"
#include "../msp/uart0.h"
//485_RE P33
//485_DE P32
#define D_485_TX() P32 = 1;// >750us
#define D_485_RX() P32 = 0;
extern void L2_485_init(void);
#endif

84
source/bsp/bsp_config.c

@ -0,0 +1,84 @@
#include "bsp_config.h"
#include "../msp/UART0.h"
#include "../msp/eeprom.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;
//==========================================================
//系统定时器回调
//初始化为NULL,timer0_isr中判断为NULL则不调用
//==========================================================
void L0_board_config(void)
{
#if (PIN_UART0_Rxd_30_Txd_31 == D_PIN_UART0)
BITN_0(P_SW1 ,BITN7);//
BITN_0(P_SW1 ,BITN6);// rxd p3.0 txd p3.1
#elif (PIN_UART0_Rxd_36_Txd_37 == D_PIN_UART0)
BITN_0(P_SW1 ,BITN7);//
BITN_1(P_SW1 ,BITN6);// rxd p3.6 txd p3.7
#elif (PIN_UART0_Rxd_16_Txd_17 == D_PIN_UART0)
BITN_1(P_SW1 ,BITN7);//
BITN_0(P_SW1 ,BITN6);// rxd p1.6 txd p1.7
#elif (PIN_UART0_Rxd_43_Txd_44 == D_PIN_UART0)
BITN_1(P_SW1 ,BITN7);//
BITN_1(P_SW1 ,BITN6);// rxd p4.3 txd p4.4
#else
BITN_0(P_SW1 ,BITN7);//
BITN_0(P_SW1 ,BITN6);// rxd p3.0 txd p3.1
#endif
//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
//485 RE/DE 配置推完输出 P55
BITN_0(P5M1,BITN5);BITN_1(P5M0,BITN5);
//LED
D_stdIO_P1(BITN7);
D_stdIO_P5(BITN4);
//IO
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 (TYPE_WDT_ENABLE == D_WDT_STATUS)
WDT_CONTR = 0x27; //使能看门狗,22M时钟下溢出时间约为5s,请注意添加喂狗程序
#else
WDT_CONTR = 0x00;
#endif
//Lp0_Sys_timer_extern_handler被timer0中断调用
//Lp0_Sys_timer_extern_handler = L1_Sys_timer_extern_handler;
}

431
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,337 +9,222 @@
/// @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_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
#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
#include <INTRINS.H>
#include "../bsp/bsp_config_const.h"
#include "../clib/type.h"
#include "../clib/bit.h"
//1.7-5.5 8K 1kram 3k eeprom spi iic 2uart tssop20 stc8f2k16s2 1.1yuan
//STEP 1 >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>TYPE_UASER_BOARD SELECT
#define TYPE_UASER_BOARD TYPE_BOARD_WEIGH_0B
//STEP 1 <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<YPE_UASER_BOARD SELECT End
#define D_version_h 0x37
#define D_version_L 0x38
#define TYPE_MCU TYPE_MCU_STC
//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_22M
#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 //是否代码加密
#include <stdio.h>
#include <string.h>
#include <intrins.h>
#include "../cpu/STC_stc8a8k.h"
#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
#define D_MCU_NAME "STC8H3K48S4"
//存储器特殊参数地址配置
#define D_MCU_SPEC_PARAM_CHIPID 0xBFF9
//...其他参数
. : F64181C6219784
: STC8F2K08S2
: 7.3.10U
//串口配置
#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
. : 22.118MHz
. : 22.128MHz
. : 0.043%
//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 对应
!(2019-02-24 18:16:24)
: 2.0-5v 8kflash 2kram DPTR EEPROM 4K
SPI IIC T0-T4 5 tssop20 1.2
#endif
//外设定义
#define LED0 P17 //D4
#define LED1 P54 //D4
#include "../cpu/c51_macro.h"
#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)*/
//EEP存储地址定义
#define D_EEP_SECTOR_SIZE 0x200 //每个扇区0x200==512bytes
#define D_EEP_SECTOR_BLOCK_SIZE 0x40 //扇区中每个数据块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
///#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
//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
#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
#endif
//STEP 3 <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<IRQ 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
*******************/
//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)
#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
#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
#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)
/*******>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
1
12
AUXR &= 0xFB; //定时器2时钟为Fosc/12,即12T,
2 timer0 task使用
L1_tick_tick
3
///<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<****/
#define D_IO_LED1_OFF() D_P35_OFF()
#define D_IO_LED2_OFF() D_P34_OFF()
#define D_IO_485_RE_OFF() D_P33_OFF()
#define D_IO_485_DE_OFF() D_P32_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_P35_ON()
#define D_IO_LED2_ON() D_P34_ON()
#define D_IO_485_RE_ON() D_P33_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);
#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
//STEP 4 <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<Cdelay CONFIG End
#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);
//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
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
//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
#include <stdio.h>
#include <string.h>
#include <intrins.h>
//STEP 6 <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<Transmission Protocol Config End
#include "../cpu/STC_stc8a8k.h"
#define D_CPUfamily_type D_CPUfamily_8bits
#elif(TYPE_UASER_BOARD == TYPE_BOARD_SMMM_MB_VH032_0E)
extern void L0_board_config(void);
#endif
#endif//_BSP_CONFIG_H
/*********************************end file*********************************************/

203
source/bsp/bsp_config0.h

@ -1,203 +0,0 @@
////////////////////////////////////////////////////////////////////////////
///@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 1.6
/// @author CC
/// @date 20190714
/// @note add TTSS_tick TYPE
/// @version 1.7
/// @author CC
/// @date 20191226
/// @note gsensor + 485
//////////////////////////////////////////////////////////////////////////////
//////////////////////////////////////////////////////////////////////////
#ifndef _BSP_CONFIG0_H
#define _BSP_CONFIG0_H
#include <INTRINS.H>
#include "../clib/Type.h"
#include "../clib/bit.h"
#include "../ctask/task.h"
#include "../clib/clib.h"
////#define D_debug115200///
//#define D_cameralIndex 0
//#define D_cameralIndex 1
//#define D_cameralIndex 2
#define D_cameralIndex 3
//#define D_cameralIndex 4
//#define D_cameralIndex 5
#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
#define BRT_SIM 900
#define MainFre_5M 0
#define MainFre_11M 1
#define MainFre_22M 2
#define MainFre_27M 3
#define MainFre_24M 4
#define MainFre_33M 5
#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
#if 0
#define D_debug_sim
#endif
//#define D_iic_inspect
#define D_open_save_f
//>>>>>>>>>>>>>>>>>>>>>>.BORAD TYPE
#define TYPE_BOARD_hhnew 16
#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_paper_main_m10 0x10 //纸张传感器2 CC_SE_paper_main_m10_smt01.sch
#define ccSensor_CG_V02_m08_debug 0x0208 //CG传感器2
#define TYPE_BOARD_cc_Light_Speed0B 0x11b //LR光电感器2
#define TYPE_BOARD_cc_G0A03 0x123 //倾角感器2
#define ccSensor_WS_ps5ws 0x0258 ///称重传感器
/*************************************
: IRC15W207S
HSY037.XA
:
02 (:1)
(ADC使用)
************************/
///cc_gsm_paper6133_m0a6_debug01
//STEP 1 <<<<<<<<<<<<<<<<<<<<<<<<<<<.BORAD TYPE
// BORAD,
// MCU:SHC6601
// IDE :KEIL
//>>>>>>>>>>>>>>>>>>>>>>mcu TYPE
#define TYPE_MCU_SHC6601 66
#define TYPE_MCU_STC 51
#define TYPE_MCU_LPC17xx 3217
#define TYPE_MCU_STM32 3232
#define D_CPUfamily_8bits 8
#define D_CPUfamily_16bits 16
#define D_CPUfamily_32bits 32
//<<<<<<<<<<<<<<<<<<<<<<mcu TYPE
#define TYPE_MCU_STC_stc15x201 201
#define TYPE_MCU_STC_stc8f1k 1
#define TYPE_MCU_stc_io TYPE_MCU_STC_stc15x201
//>>>>>>>>>>>>>>>>>>>>>>IDE TYPE
#define TYPE_IDE_KEIL 1
#define TYPE_IDE_MDK 2
#define TYPE_IDE_IAR 3
//<<<<<<<<<<<<<<<<<<<<<<IDE TYPE
//>>>>>>>>>>>>>>>>>>>>>>G-SENSOR TYPE
#define TYPE_ASENSOR_ADXL362 362
#define TYPE_ASENSOR_MSA300 362
#define TYPE_ASENSOR TYPE_ASENSOR_MSA300
//<<<<<<<<<<<<<<<<<<<<<<G-SENSOR TYPE
//>>>>>>>>>>>>>>>>>>>>>>TTSS_tick TYPE
#define D_TTSS_tick_5ms 5
#define D_TTSS_tick_10ms 10
#define D_TTSS_tick_25ms 25
//<<<<<<<<<<<<<<<<<<<<<<TTSS_tick TYPE
//STEP 1 TYPE_UASER_BOARD SELECT >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
//#define TYPE_UASER_BOARD TYPE_BOARD_SMMM_MB_VH032_0E
//#define TYPE_UASER_BOARD TYPE_BOARD_stc90c516rd
//#define TYPE_UASER_BOARD TYPE_BOARD_hh_CC_MD_VH06_asMain_m6a7
//#define TYPE_UASER_BOARD TYPE_BOARD_stc5as32_WIFIBV01
//#define TYPE_UASER_BOARD TYPE_BOARD_hhnew
//STEP 1 <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
//>>>>>>>>>>>>>>>>>>>>>>TTSS_tick TYPE
#define D_TTSS_tick_5ms 5
#define D_TTSS_tick_10ms 10
#define D_TTSS_tick_25ms 25
//<<<<<<<<<<<<<<<<<<<<<<TTSS_tick TYPE
//// 485 等多机通讯使用
#define ADD_Master 0
#define ADD_slave1 1
#define ADD_slave2 2
#define ADD_slave3 3
#define ADD_slave4 4
#define ADD_slave5 5
#define ADD_slave6 6
#define ADD_slaveN 0xee ///结束
#endif//_BSP_CONFIG0_H
/*********************************end file*********************************************/

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*********************************************/

14
source/bsp/bsp_debug.c

@ -1,14 +0,0 @@
////////////////////////////////////////////////////////////////////////////
///@copyright Copyright (c) 2018, ´«¿Ø¿Æ¼¼ All rights reserved.
///-------------------------------------------------------------------------
/// @file bsp_debug.c
/// @brief bsp @ driver config
///-------------------------------------------------------------------------
/// @version 1.0
/// @author CC
/// @date 20180331
/// @note cc_AS_stc02
//////////////////////////////////////////////////////////////////////////////
//#include "bsp_debug.h"

128
source/bsp/bsp_power.c

@ -1,128 +0,0 @@
////////////////////////////////////////////////////////////////////////////
///@copyright Copyright (c) 2017, 传控科技 All rights reserved.
///-------------------------------------------------------------------------
/// @file APP_POWER.c
/// @brief APP_POWER driver app 电源管理
///-------------------------------------------------------------------------
/// @version 1.0
/// @author CC
/// @date 20170122
/// @note cc_AS_stc01
//////////////////////////////////////////////////////////////////////////////
/******************************************************************************/
/***************************** Include Files **********************************/
/******************************************************************************/
//#include "app_Gsensor.h"
#include "bsp_power.h"
ts_task_power_ ts_task_power;
void L1_app_POWER_init(void)
{
DL0_WDT_init();
L0_INT4_OPEN();
}
/// INT1 和INT0可以可以终止掉电状态 这样唤醒后执行进入掉电模式语句的吓一条
/// p32
//// SENSINT2 ccSensor_CG_V02_m08_debug p3.3 int 1 pin14
//// gsensor 的中断给出来 cpu被唤醒 开始工作
//// int4 只有下降沿中断
void L0_sensor_active(void) interrupt D_sensor_active_isrNo
{
NOP(); NOP(); NOP();
L0_INT4_CLEAR();
BITN_1(DR_who_wakeup, DRB_who_wakeup_action);
NOP(); NOP(); NOP();
}
#if 0
while (1)
{
/// P31 = 0;
/// NOP(); NOP(); NOP(); NOP(); NOP();///22m 5个 100ns 一个20ns
D_cam_led_on();///400us
// L0_delay_1us();
Lc_delay_ms(gRccUs01);///300--200ms
D_cam_led_off();
P31 = 1;
/// NOP(); NOP(); NOP(); NOP(); NOP();
//L0_delay_1us();
Lc_delay_ms(900);//100--70ms
}
void L1_app_POWER_handle(void)
{
//// fixme: 需要调试
/**********************
if(1 == s_mu_b.power)
{
s_mu_b.power = 0;
if(INT1)///___/```
{// 催眠cpu
L0_uart0_uc('`');
//给主循环传递标志
s_mu_b.work = 0;
}else
{// 唤醒cpu/// ```\____
L0_uart0_uc('L');
s_mu_b.work = 1;
}
}
if(P30)///___/```
{//
// L0_uart0_uc('`');
}else
{// 唤醒cpu/// ```\____
L0_uart0_uc('L');
s_mu_b.work = 1;
}
************************/
if(1 == ts_task_power.power)
{
ts_task_power.power = 0;
///L0_uart0_uc('L');
}
}
if(0 == s_mu_b.work)
{/// step 1: 关闭一些耗电的东西
/// fixme: vcc1 因为下载的原因需要 改进
/// vcc1 ch340e Uart4.txd
// L2_power_AS_OFF();
/// L0_mcu_mode_powerdown();
/// L2_power_AS_ON();
//// step : 打开电源
}
void Int0_Routine(void) interrupt D_ISR_int1
{
s_mu_b.power = 1;
}
#endif

132
source/bsp/bsp_power.h

@ -1,132 +0,0 @@
////////////////////////////////////////////////////////////////////////////
///@copyright Copyright (c) 2017, 传控科技 All rights reserved.
///-------------------------------------------------------------------------
/// @file BSP_POWER.c
/// @brief BSP_POWER driver app 电源管理
///-------------------------------------------------------------------------
/// @version 1.0
/// @author CC
/// @date 20170122
/// @note cc_AS_stc01
///////////////////////////////////////////////////////////////////////////////// @version 1.0
/// @author CC
/// @date 20180921
/// @note
//////////////////////////////////////////////////////////////////////////////
#ifndef _BSP_POWER_H
#define _BSP_POWER_H
#include "../bsp/bsp_config.h"
#define L1_cw63_reg_set(x,y) L2_I2C_WriteCmd(D_i2c_addr_cw63xx, (x),(y) )
#define L1_cw63_reg_get(x,y) L2_I2C_ReadReg(D_i2c_addr_cw63xx,(x),1)
///#define D_cam_led_on(); L1_cw63_reg_set(D_power_VCC2,D_CW63XX_ON|D_CW63XX_2V8);
///#define D_cam_led_off(); L1_cw63_reg_set(D_power_VCC2,D_CW63XX_OFF|D_CW63XX_2V8);
///#define D_cam_led_off(); D_cam_led_on();///
#define D_cam_DVDD_on(); L1_cw63_reg_set(D_power_VCC,D_CW63XX_ON|D_CW63XX_2V5);
#define D_cam_DVDD_off(); L1_cw63_reg_set(D_power_VCC,D_CW63XX_OFF|D_CW63XX_2V5);
#define D_cam_AVDD_on(); L1_cw63_reg_set(D_power_VCC1,D_CW63XX_ON|D_CW63XX_2V8);////D_cam_AVDD_off();
#define D_cam_AVDD_off(); L1_cw63_reg_set(D_power_VCC1,D_CW63XX_OFF|D_CW63XX_2V8);///
///
/******************************************************************************/
/***************************** Include Files **********************************/
/******************************************************************************/
////#include "../bsp/msa300.h"
#include "../msp/uart0.h"
#define L0_mcu_mode_powerdown() PCON |= 0x02;_nop_();_nop_();_nop_();_nop_();
/// PCON |= 0x02; //将STOP(PCON.1)置1,MCU将进入掉电模式
// //此时CPU无时钟,不执行指令,且所欲外设停止工作
// //外部中断信号和外部复位信号可以终止掉电模式
//
#define L0_mcu_mode_powerIDL() PCON = 0x01;_nop_();_nop_();_nop_();_nop_();
/// PCON |= 0x02; //将STOP(PCON.0)置1,MCU将进入 模式
// //此时CPU 停止工作
// //外部中断信号和外部复位信号可以终止
//
///1000,000/32,000 x 16x(1+n) =
#define D_WKTC_16S 0X7FFF
#define D_WKTC_15S 29999
#define D_WKTC_10S 19999
#define D_WKTC_5S 9999
#define D_WKTC_3S 5999
#define D_WKTC_2S 3999
#define D_WKTC_1S 1999
#define D_WKTC_500MS 999
#define D_WKTC_50mS 99
#define L0_mcu_WKTC(X) WKTC = 0x8000|(X)
///#define L0_mcu_WKTC(X) WKTCH = B1111_1111;WKTCL = 0XFF
#define D_sensor_active_isrNo D_ISR_int4
typedef struct
{
U8 TI:1;
U8 RI:1;
U8 Tx_en:1;
U8 Rx_en:1; //波特率的位数 eive bit number (8 data bits + 1 stop bit)
U8 work:1;
U8 show_mod:1; // =0 普通模式 //s_mu_b.show_mod
U8 power:1; // =0 普通模式 //s_mu_b.power
U8 power2:1; // =0 普通模式 //s_mu_b.show_mod
// U8 power; // =0 普通模式 //s_mu_b.show_mod
}ts_task_power_;
extern ts_task_power_ ts_task_power;
extern void L1_app_POWER_init(void);
extern void L1_app_POWER_handle(void);
// WDT_CONTR = 0x23; //11m使能看门狗,溢出时间约为0.5s
/// WDT_CONTR = 0x24; //11m使能看门狗,溢出时间约为1s
// WDT_CONTR = 0x27; //11m使能看门狗,溢出时间约为8s
// P32 = 0; //测试端口
/// ///22m 2.5s
#ifdef D_use_WDT
#define DL0_WDT_init() WDT_CONTR =BITN5|D_WDT_2520ms
#define DL0_WDT() WDT_CONTR |= 0x10 //清看门狗,否则系统复位
#else
#define DL0_WDT_init()
#define DL0_WDT()
#endif
///注意和烧写界面的硬件看门狗启动
#define D_WDT_315ms B0010_0011
#define D_WDT_629ms B0010_0100
#define D_WDT_1260ms B0010_0101
#define D_WDT_2520ms B0010_0110
#define D_WDT_5030ms B0010_0111
///11m
#define D_WDT_524ms B0010_0011
#define D_WDT_1050ms B0010_0100
#define D_WDT_2100ms B0010_0101
#define D_WDT_4200ms B0010_0110
#define D_WDT_8390ms B0010_0111
#endif // #ifndef _BSP_POWER_H

5
source/msp/msp_id.c → source/bsp/chipid.c

@ -9,7 +9,8 @@
/// @date 20190106
/// @note cc_AS_stc02 由stc-isp v6.0860
//////////////////////////////////////////////////////////////////////////////
#include "msp_id.h"
#include "chipid.h"
#include "../bsp/bsp_config.h"
#define MSP_ID_LEN 7
@ -26,7 +27,7 @@ void L0_id_get(U8 *id)
void L0_id_get_rom(U8 *id)
{
U8 i = 0;
char *ID = (char code *)0x3ff9;
char *ID = (char code *)(D_MCU_SPEC_PARAM_CHIPID);
for(i=0;i<MSP_ID_LEN;i++)
{
id[i] = ID[i];

6
source/msp/msp_id.h → source/bsp/chipid.h

@ -25,12 +25,8 @@
///>>>端口位定义,可修改!!!!!!>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
#include "../cpu/stc_stc8a8k.h"
#include "../cpu/c51_macro.h"
#include "../bsp/bsp_config.h"
#include "uart0.h"
#include "../msp/uart0.h"
extern void L0_id_get(U8 *id);
extern void L0_id_get_rom(U8 *id);

55
source/bsp/bsp_cs1232.c → source/bsp/cs1232.c

@ -14,11 +14,11 @@
/// @note
//////////////////////////////////////////////////////////////////////////////
#include "bsp_cs1232.h"
#include "cs1232.h"
TSS_FLOW_ tss_ads;
//#define D_ADC_GATHER_Way1 1
#if 0
u8 Read_byte_adcIC(void)
{
u8 i;
@ -40,17 +40,6 @@ u8 Read_byte_adcIC(void)
return(rdata);
}
void L0_ADS1213_INIT(void)
{
D_ADS1213_INIT();
L0_ADS1213_CH(D_ADCCH_1);
Lc_delay_ms(100);///57ms 建立时间
//L0_ADS1213_CH(D_ADCCH_3);
//Lc_delay_ms(100);///57ms 建立时间
}
void L0_ADS1213_CH(u8 ch)
{
/// /// SPEED = 1 57--57 ms 硬件配置成高电平
@ -99,6 +88,21 @@ void L0_ADS1213_T(u8 onff)
}
}
#endif
void L0_ADS1213_INIT(void)
{
D_ADS1213_INIT();
D_stdIO_P3(BITN2);
D_stdIO_P3(BITN3);
//L0_ADS1213_CH(D_ADCCH_1); //4个独立芯片,不需要切换
Lc_delay_ms(100);///57ms 建立时间
//L0_ADS1213_CH(D_ADCCH_3);
//Lc_delay_ms(100);///57ms 建立时间
}
void L0_2dc_SCLK(vtype ch,vtype onf)
{
switch (ch)
@ -144,12 +148,10 @@ vtype L0_2dc_DOUT_AT(vtype ch)
return r;
}
vtype i; vU32 rdata = 0;
//任务读
vS32 L0_ADS1231_readCH(vtype ch)
{
rdata = 0;
vtype i; vU32 rdata = 0;
for(i = 0; i < 24; i++)
{
L0_2dc_SCLK(ch,1);/// D_ADC_SCLK1_ON();
@ -171,23 +173,15 @@ vS32 L0_ADS1231_readCH(vtype ch)
return rdata;
}
//调试阻塞读
vS32 L0_ADS1231_read(U8 ch)
{
vU32 e = 0;u8 i;vS32 rdata = 0;
while(0 == L0_2dc_DOUT_AT(ch))
{
if(e ++ > 100000)
{
return 0;
}
}
e = 0;
while(1 == L0_2dc_DOUT_AT(ch))
{
if(e ++ > 100000)
{
return 0;
//return 0;
}
}
for(i = 0; i < 24; i++)
@ -200,6 +194,7 @@ vS32 L0_ADS1231_read(U8 ch)
rdata += 1;
}
}
L0_2dc_SCLK(ch,1);
if(rdata & 0x800000) //???λ?1??<0??
{
rdata |= 0xFF000000;
@ -210,16 +205,16 @@ vS32 L0_ADS1231_read(U8 ch)
void L1_ADS1213_main(void)
{
U8 ch = D_ADCCH_4;
U8 ch = D_ADCCH_2;
while(1)
{
while(1 == L0_2dc_DOUT_AT(ch))
;
tss_ads.u32_i = L0_ADS1231_readCH(ch);
tss_ads.u16_v = (vU16)( tss_ads.u32_i >> 16);
L0_uart0_ushex(tss_ads.u16_v,16);
L0_uart0_ushex(tss_ads.u16_v);
tss_ads.u16_v = (vU16)(tss_ads.u32_i & 0x0000ffff);
L0_uart0_ushex(tss_ads.u16_v,16);//Lc_delay_us(500);
L0_uart0_ushex(tss_ads.u16_v);//Lc_delay_us(500);
L0_uart0_uc(0x0d); L0_uart0_uc(0x0a);
}
}

113
source/bsp/bsp_cs1232.h → source/bsp/cs1232.h

@ -21,16 +21,17 @@
#include "../bsp/bsp_config.h"
#include "../msp/uart0.h"
#include "../ctask/task.h"
#define D_ADCCH_T 0
#define D_ADCCH_1 1
#define D_ADCCH_2 2
#define D_ADCCH_3 3
#define D_ADCCH_4 4
#define D_ADCCH_Toff 5
#define D_ADCCH_1 0
#define D_ADCCH_2 1
#define D_ADCCH_3 2
#define D_ADCCH_4 3
#define D_ADCCH_T 8
#define D_ADCCH_Toff 9
///数字部分需要有四个数据转换周期满足模拟输入信号的建立和滤波器的建立时间要求。芯
///片从外部差分输入信号切换到温度传感器、从温度传感器切换到外部差分输入信号,或通
@ -70,65 +71,62 @@
/**************
IO DEFINE PIN
P1.2 TEMP 1
P1.3 SCLK3 2
P1.4 DOUT1 3
P1.5 SCLK1 4
P1.6 DOUT2 5
P1.7 SCLK2 6
P5.4 PDWN 7
P5.5 CS_A0 9
P1.1 DOUT3 20
P1.0 LED1 19
P3.7 GAIN1 18
P3.6 GAIN0 17
P3.5 LED2 16
P3.4 DOUT4 15
P3.3 SCLK4 14
P3.2 485_RE 13
P1.0 DOUT2 1
P1.6 SCLK2 2
P1.7 LED1 3
P5.4 LED2 7
P5.5 485_RE 9
P1.1 PDWN 20
P1.2 GAIN0 19
P3.7 DOUT3 18
P3.6 DOUT1 17
P3.5 SCLK1 16
P3.4 SCLK3 15
P3.3 DOUT4 14
P3.2 SCLK4 13
P3.1 TXD0 12
P3.0 RXD0 11
*****************/
#define D_ADC_DOUT1_INIT() ///D_P16_INIT()
#define D_ADC_SCLK1_INIT() ///D_P17_INIT()
#define D_ADC_DOUT1_INIT() ///D_P17_INIT()
#define D_ADC_SCLK1_INIT() ///D_P16_INIT()
#define D_ADC_CS_A0_INIT() ///D_P55_INIT()
#define D_ADC_DOUT1_AT() D_P14_AT()
#define D_ADC_DOUT1_ON() D_P14_ON()
#define D_ADC_SCLK1_ON() D_P15_ON();D_adc_delay2();
#define D_ADC_CS_A0_ON() D_P55_ON()
#define D_ADC_DOUT1_OFF() D_P14_OFF()
#define D_ADC_SCLK1_OFF() D_P15_OFF();D_adc_delay();
#define D_ADC_CS_A0_OFF() D_P55_OFF()
#define D_ADC_DOUT1_AT() D_P36_AT()
#define D_ADC_DOUT1_ON() D_P36_ON()
#define D_ADC_SCLK1_ON() D_P35_ON();D_adc_delay2();
#define D_ADC_CS_A0_ON() //D_P55_ON()
#define D_ADC_DOUT1_OFF() D_P36_OFF()
#define D_ADC_SCLK1_OFF() D_P35_OFF();D_adc_delay();
#define D_ADC_CS_A0_OFF() //D_P55_OFF()
//#define D_ADC_CS2_A0_ON() D_P13_ON()
#define D_ADC_DOUT2_ON() D_P16_ON()
#define D_ADC_DOUT2_AT() D_P16_AT()
#define D_ADC_SCLK2_ON() D_P17_ON();D_adc_delay2();
#define D_ADC_DOUT2_ON() D_P10_ON()
#define D_ADC_DOUT2_AT() D_P10_AT()
#define D_ADC_SCLK2_ON() D_P16_ON();D_adc_delay2();
//#define D_ADC_CS2_A0_INIT() ///D_P13_INIT()
#define D_ADC_DOUT2_INIT() ///D_P14_IN() ///D_P14_INIT()
#define D_ADC_SCLK2_INIT() ///D_P15_INIT()
//#define D_ADC_CS2_A0_OFF() D_P13_OFF()
#define D_ADC_DOUT2_OFF() D_P16_OFF()
#define D_ADC_SCLK2_OFF() D_P17_OFF();D_adc_delay();
#define D_ADC_DOUT2_OFF() D_P10_OFF()
#define D_ADC_SCLK2_OFF() D_P16_OFF();D_adc_delay();
#define D_ADC_DOUT3_INIT() ///D_P11_INIT()
#define D_ADC_SCLK3_INIT() ///D_P13_INIT()
#define D_ADC_DOUT3_AT() D_P11_AT()
#define D_ADC_DOUT3_ON() D_P11_ON()
#define D_ADC_SCLK3_ON() D_P13_ON();D_adc_delay2();
#define D_ADC_DOUT3_OFF() D_P11_OFF()
#define D_ADC_SCLK3_OFF() D_P13_OFF();D_adc_delay();
#define D_ADC_DOUT3_AT() D_P37_AT()
#define D_ADC_DOUT3_ON() D_P37_ON()
#define D_ADC_SCLK3_ON() D_P34_ON();D_adc_delay2();
#define D_ADC_DOUT3_OFF() D_P37_OFF()
#define D_ADC_SCLK3_OFF() D_P34_OFF();D_adc_delay();
#define D_ADC_DOUT4_INIT() ///D_P34_INIT()
#define D_ADC_SCLK4_INIT() ///D_P33_INIT()
#define D_ADC_DOUT4_AT() D_P34_AT()
#define D_ADC_DOUT4_ON() D_P34_ON()
#define D_ADC_SCLK4_ON() D_P33_ON();D_adc_delay2();
#define D_ADC_DOUT4_OFF() D_P34_OFF()
#define D_ADC_SCLK4_OFF() D_P33_OFF();D_adc_delay();
#define D_ADC_DOUT4_AT() D_P33_AT()
#define D_ADC_DOUT4_ON() D_P33_ON()
#define D_ADC_SCLK4_ON() D_P32_ON();D_adc_delay2();
#define D_ADC_DOUT4_OFF() D_P33_OFF()
#define D_ADC_SCLK4_OFF() D_P32_OFF();D_adc_delay();
@ -137,14 +135,14 @@ P3.0 RXD0 11
#define D_ADC_TEMP_INIT() ///D_P12_INIT()
#define D_ADC_TEMP_ON() D_P12_ON()
#define D_ADC_TEMP_OFF() D_P12_OFF()
#define D_ADC_TEMP_ON() //D_P12_ON()
#define D_ADC_TEMP_OFF() //D_P12_OFF()
#define D_ADC_PDWN_INIT() ///D_P54_INIT()
#define D_ADC_PDWN_OFF() D_P54_OFF()
#define D_ADC_PDWN_ON() D_P54_ON()
#define D_ADC_PDWN_OFF() D_P11_OFF()
#define D_ADC_PDWN_ON() D_P11_ON()
@ -152,15 +150,15 @@ P3.0 RXD0 11
#define D_ADC_GAIN1_INIT() ///D_P37_INIT()
#define D_ADC_GAIN0_INIT() ///D_P36_INIT()
#define D_ADC_GAIN1_OFF() D_P37_OFF()
#define D_ADC_GAIN0_OFF() D_P36_OFF()
#define D_ADC_GAIN1_ON() D_P37_ON()
#define D_ADC_GAIN0_ON() D_P36_ON()
#define D_ADC_GAIN1_OFF() //D_P37_OFF()
#define D_ADC_GAIN0_OFF() D_P12_OFF()
#define D_ADC_GAIN1_ON() //D_P37_ON()
#define D_ADC_GAIN0_ON() D_P12_ON()
// #define D_ADS1213_GAIN_VAL 1
// #define D_ADS1213_GAIN_VAL 2
//#define D_ADS1213_GAIN_VAL 64
#define D_ADS1213_GAIN_VAL 128
#define D_ADS1213_GAIN_VAL 64
//#define D_ADS1213_GAIN_VAL 128
#if (D_ADS1213_GAIN_VAL == 128)
#define D_ADS1213_INIT() D_ADC_GAIN1_ON();D_ADC_GAIN0_ON();\
@ -168,6 +166,7 @@ P3.0 RXD0 11
D_ADC_CS_A0_ON();\
D_ADC_SCLK1_OFF();D_ADC_SCLK2_OFF();\
D_ADC_SCLK3_OFF();D_ADC_SCLK4_OFF();
#elif (D_ADS1213_GAIN_VAL == 64)
#define D_ADS1213_INIT() D_ADC_GAIN1_ON();D_ADC_GAIN0_OFF();\
D_ADC_TEMP_OFF();\

4
source/bsp/bsp_485.c → source/bsp/rs485.c

@ -1,8 +1,8 @@
#include "bsp_485.h"
#include "rs485.h"
void L2_485_init(void)
{
//485配置强推挽输出 P33 P32
//BITN_0(P3M1,BITN3);BITN_1(P3M0,BITN3);
BITN_0(P3M1,BITN2);BITN_1(P3M0,BITN2);
BITN_0(P5M1,BITN5);BITN_1(P5M0,BITN5);
}

13
source/bsp/rs485.h

@ -0,0 +1,13 @@
#ifndef BSP_485_H
#define BSP_485_H
#include "../bsp/bsp_config.h"
#include "../msp/uart0.h"
//485_RE P33
//485_DE P32
#define D_485_TX() P55 = 1;// >750us
#define D_485_RX() P55 = 0;
extern void L2_485_init(void);
#endif

105
source/clib/clib.c

@ -307,6 +307,51 @@ vS32 Lc_S32_media(vS32 val[],S16 num)
return val[num/2];
}
}
U32 Lc_vS32_media(U32 *d, U8 n)
{
U8 i = 0,j = 0;
U32 h = 0;
if(n == 1)
{
return d[0];
}
for(i=0;i<n-1;i++)
{
for(j=i+1;j<n;j++)
{
if(d[i] > d[j])
{
h = d[i];
d[i] = d[j];
d[j] = h;
}
}
}
if(n%2 != 0) //奇数
{
return d[n/2];
}
else//偶数
{
return ((d[n/2] + d[n/2-1])/2);
}
}
U32 Lc_vU32_avg(U32 *d, U8 n)
{
U8 i = 0;
U32 sum = 0;
if(n == 1)
{
return d[0];
}
for(i=0;i<n;i++)
{
sum += d[i];
}
return sum / n;
}
///// 0 1 (1-0)+1
@ -361,7 +406,37 @@ unsigned char code cguHex2Char[16][2]
};
void crc16(unsigned char *CRC,void *dat,unsigned int len)
void crc16(unsigned char *CRC,void *dat,unsigned int len) /*reentrant*/
{
unsigned char *ptr = (unsigned char *)dat;
unsigned long wcrc=0XFFFF;//预置16位crc寄存器,初值全部为1
unsigned char temp;//定义中间变量
int i=0,j=0;//定义计数
for(i=0;i<len;i++)//循环计算每个数据
{
temp=*ptr&0X00FF;//将八位数据与crc寄存器亦或
ptr++;//指针地址增加,指向下个数据
wcrc^=temp;//将数据存入crc寄存器
for(j=0;j<8;j++)//循环计算数据的
{
if(wcrc&0X0001)//判断右移出的是不是1,如果是1则与多项式进行异或。
{
wcrc>>=1;//先将数据右移一位
wcrc^=0XA001;//与上面的多项式进行异或
}
else//如果不是1,则直接移出
{
wcrc>>=1;//直接移出
}
}
}
temp=wcrc;//crc的值
CRC[0]=wcrc;//crc的低八位
CRC[1]=wcrc>>8;//crc的高八位
}
#if 0
void crc16_irq(unsigned char *CRC,void *dat,unsigned int len)
{
unsigned char *ptr = (unsigned char *)dat;
unsigned long wcrc=0XFFFF;//预置16位crc寄存器,初值全部为1
@ -389,6 +464,7 @@ void crc16(unsigned char *CRC,void *dat,unsigned int len)
CRC[0]=wcrc;//crc的低八位
CRC[1]=wcrc>>8;//crc的高八位
}
#endif
U32 Lc_abs(vS32 a,vS32 b)
@ -414,6 +490,33 @@ 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];
}
}
int Lc_strlen(char *str)
{
char *tmp = str;
while(*tmp++)
;
return tmp - str - 1;
}
int Lc_memset(U8 *buf,U8 c,U16 len)
{
U16 i;
for(i=0;i<len;i++)
{
buf[i] = c;
}
return 0;
}
#if 0

10
source/clib/clib.h

@ -97,7 +97,8 @@ extern void Lc_array_sort(S32 arr[],int n);
/// 0x11 0x22 ---> 0x31 0x31 0x32 0x32 '1' '1' '2' '2'
extern void Lc_hex2ascii(U8 *buf,U16 len,U8 *ascii);
extern void crc16(unsigned char *CRC,void *dat,unsigned int len);
extern void crc16(unsigned char *CRC,void *dat,unsigned int len) /*reentrant*/;
//extern void crc16_irq(unsigned char *CRC,void *dat,unsigned int len);
extern int isBigEndianOrder(void);
extern U32 ntohl(U32 dat);
extern U32 htonl(U32 dat);
@ -105,6 +106,13 @@ 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_strlen(char *str);
extern U32 Lc_vU32_avg(U32 *d, U8 n);
extern U32 Lc_vS32_media(U32 *d, U8 n);
extern int Lc_memset(U8 *buf,U8 c,U16 len);
#endif /* end __UART_H */
/*****************************************************************************

5
source/clib/type.h

@ -80,6 +80,7 @@
#ifndef TRUE
#define TRUE (1)
#endif
/*********************************************************************************************************
*********************************************************************************************************/
@ -267,7 +268,7 @@ typedef struct
#define HIGHT 1
#define LOW 0
#if 0
#ifndef MIN
#define MIN(a,b) (((a) < (b)) ? (a) : (b))
#endif
@ -275,7 +276,7 @@ typedef struct
#ifndef MAX
#define MAX(a, b) (((a) > (b)) ? (a) : (b))
#endif
#endif
#ifndef ABS
#define ABS(a, b) (((a) > (b)) ? ((a) - (b)) : ((b) - (a)))
#endif

2
source/cpu/STARTUP.A51

@ -35,7 +35,7 @@ XDATASTART EQU 0
;
; <o> XDATALEN: XDATA memory size <0x0-0xFFFF>
; <i> The length of XDATA memory in bytes.
XDATALEN EQU 0
XDATALEN EQU 3072
;
; <o> PDATASTART: PDATA memory start address <0x0-0xFFFF>
; <i> The absolute start address of PDATA memory

210
source/cpu/STC_stc8a8k.H

@ -2,6 +2,7 @@
#define __STC_stc8a8k_H_
// STC_stc8a8k.h
#include<intrins.h>
/////////////////////////////////////////////////
//注意: STC15W4K32S4系列的芯片,上电后所有与PWM相关的IO口均为
// 高阻态,需将这些口设置为准双向口或强推挽模式方可正常使用
@ -140,11 +141,7 @@ sfr AUXR = 0x8E; //0000,0000 辅助寄存器
#define S1ST2 BITN0 //串口1选择定时器1 =0 选择定时器2 =1
sfr VOCTR = 0xBB; //电压控制寄存器
///BITN_1(VOCTR, BITN7) VOCTR
#define D_VOCTR_SCCIN 0x00
#define D_VOCTR_SCC 0x80
#define D_VOCTR_SET(X) VOCTR = (X)
sfr AUXR1 = 0xA2; //0000,0000 辅助寄存器1
sfr P_SW1 = 0xA2; //0000,0000 外设端口切换寄存器1
@ -173,7 +170,6 @@ sbit ET1 = IE^3;
sbit EX1 = IE^2;
sbit ET0 = IE^1;
sbit EX0 = IE^0;
sfr IE2 = 0xAF; //0000,0000 中断控制寄存器2
sfr IP = 0xB8; //0000,0000 中断优先级寄存器
sbit PPCA = IP^7;
sbit PLVD = IP^6;
@ -183,6 +179,7 @@ sbit PT1 = IP^3;
sbit PX1 = IP^2;
sbit PT0 = IP^1;
sbit PX0 = IP^0;
sfr IE2 = 0xAF; //0000,0000 中断控制寄存器2
/// 不可位寻址
#define ET4 BITN6
#define ET3 BITN5
@ -192,46 +189,9 @@ sbit PX0 = IP^0;
#define ESPI BITN1
#define ES2 BITN0
sfr IPH = 0xB7; //xxxx,xx00 中断优先级寄存器2
#define PPCAH BITN7
#define PLVDH BITN6
#define PADCH BITN5
#define PSH BITN4
#define PT1H BITN3
#define PX1H BITN2
#define PT0H BITN1
#define PX0H BITN0
sfr IP2 = 0xB5; //xxxx,xx00 中断优先级寄存器2
#define IP2_7 BITN7
#define PI2C BITN6
#define PCMP BITN5
#define PX4 BITN4
#define PPWMFD BITN3
#define PPWM BITN2
#define PSPI BITN1
#define PS2 BITN0
sfr IP2H = 0xB6; //xxxx,xx00 中断优先级寄存器2
#define IP2_7 BITN7
#define PI2CH BITN6
#define PCMPH BITN5
#define PX4H BITN4
#define PPWMFDH BITN3
#define PPWMH BITN2
#define PSPIH BITN1
#define PS2H BITN0
sfr INT_CLKO = 0x8F; //0000,0000 外部中断与时钟输出控制寄存器
#define INT_EX4 BITN6
#define INT_EX3 BITN5
#define INT_EX2 BITN4
//定时器特殊功能寄存器
sfr TCON = 0x88; //0000,0000 T0/T1控制寄存器
sbit TF1 = TCON^7;
@ -257,7 +217,6 @@ sfr T2H = 0xD6; //0000,0000 T2高字节
sfr T2L = 0xD7; //0000,0000 T2低字节
sfr WKTCL = 0xAA; //0000,0000 掉电唤醒定时器低字节
sfr WKTCH = 0xAB; //0000,0000 掉电唤醒定时器高字节
sfr16 WKTC = 0xAA;
sfr WDT_CONTR = 0xC1; //0000,0000 看门狗控制寄存器
//串行口特殊功能寄存器
@ -421,60 +380,74 @@ sfr PWMCR = 0xfe;
#define I2CTXD (*(unsigned char volatile xdata *)0xfE86)//423@ST8.PDF
#define I2CRXD (*(unsigned char volatile xdata *)0xfE87)//423@ST8.PDF
/////////////////////////////////////////////////
///-------------------------------------
/* P3 */
sbit RD = 0xB7;
sbit WR = 0xB6;
sbit T1 = 0xB5;
sbit T0 = 0xB4;
sbit INT1 = 0xB3;
sbit INT0 = 0xB2;
sbit TXD = 0xB1;
sbit RXD = 0xB0;
#define gRccUs01_H (*(unsigned char volatile data *)0xd2)
#define gRccUs01_L (*(unsigned char volatile data *)0xd3)
#define gRccUs01 (*(unsigned short volatile data *)0xd2)//226@ST8.PDF T4H定时器4的高字节 D2H T4H定时器4的低字节 D3H
#define gRccUs02 (*(unsigned short volatile data *)0xEA)//351@ST8.PDF CCAP0l CCAP1L EAH EBH
#define gRccUs03 (*(unsigned short volatile data *)0xEC)//351@ST8.PDF CCAP0l CCAP1L EAH EBH
//#define gRccUs03 s_task_GC032A.n
#if 0
/// >>>>> add by cc
//sbit P34=P3^4; //定义SDA数据线
//sbit P35=P3^5; //定义SCL时钟线
#define mBIT_1(X,N) X|= (1<<N)
#define mBIT_0(X,N) X&=~(1<<N)
#define mBIT_G(X,N) (X&(1<<N))
/// add by cc 20181118
#define D_IO_normal_P0(n); mBIT_0(P0M1,n);mBIT_0(P0M0,n);
#define D_IO_normal_P1(n); mBIT_0(P1M1,n);mBIT_0(P1M0,n);
#define D_IO_normal_P2(n); mBIT_0(P2M1,n);mBIT_0(P2M0,n);
#define D_IO_normal_P3(n); mBIT_0(P3M1,n);mBIT_0(P3M0,n);
#define gRccUs04 (*(unsigned short volatile data *)0xFA)///351@ST8.PDF
#define gRccUs05 (*(unsigned short volatile data *)0xFC)///351@ST8.PD CCAP2H
#define D_IO_HighOut_P0(n); mBIT_0(P0M1,n);mBIT_1(P0M0,n);
#define D_IO_HighOut_P1(n); mBIT_0(P1M1,n);mBIT_1(P1M0,n);
#define D_IO_HighOut_P2(n); mBIT_0(P2M1,n);mBIT_1(P2M0,n);
#define D_IO_HighOut_P3(n); mBIT_0(P3M1,n);mBIT_1(P3M0,n);
//高阻状态
/////////////////////////////////////////////////
#define D_IO_HighR_P0(n); mBIT_1(P0M1,n);mBIT_0(P0M0,n);
#define D_IO_HighR_P1(n); mBIT_1(P1M1,n);mBIT_0(P1M0,n);
#define D_IO_HighR_P2(n); mBIT_1(P2M1,n);mBIT_0(P2M0,n);
#define D_IO_HighR_P3(n); mBIT_1(P3M1,n);mBIT_0(P3M0,n);
#define D_IO_OpenDrain_P0(n); mBIT_1(P0M1,n);mBIT_1(P0M0,n);
#define D_IO_OpenDrain_P1(n); mBIT_1(P1M1,n);mBIT_1(P1M0,n);
#define D_IO_OpenDrain_P2(n); mBIT_1(P2M1,n);mBIT_1(P2M0,n);
#define D_IO_OpenDrain_P3(n); mBIT_1(P3M1,n);mBIT_1(P3M0,n);
/* P3 */
sbit RD = 0xB7;
sbit WR = 0xB6;
sbit T1 = 0xB5;
sbit T0 = 0xB4;
sbit INT1 = 0xB3;
sbit INT0 = 0xB2;
sbit TXD = 0xB1;
sbit RXD = 0xB0;
//高阻状态
#define P0_conf_in(n) mBIT_1(P0M1,n);mBIT_0(P0M0,n);
#define P1_conf_in(n) mBIT_1(P1M1,n);mBIT_0(P1M0,n);
#define P2_conf_in(n) mBIT_1(P2M1,n);mBIT_0(P2M0,n);
#define P2_conf_port(n) mBIT_0(P2M1,n);mBIT_0(P2M0,n);
sfr AUXINTIF = 0xef;
#define P3_conf_in(n) mBIT_1(P3M1,n);mBIT_0(P3M0,n);
#define T2IF 0x01
#define INT4IF BITN6
#define INT3IF BITN5
#define INT2IF BITN4
#define P3_conf_port(n) mBIT_0(P3M1,n);mBIT_0(P3M0,n);
//#define T4IF BITN2
//#define T3IF BITN1
//#define T2IF BITN0
#define P4_conf_in(n) mBIT_1(P4M1,n);mBIT_0(P4M0,n);
#define P5_conf_in(n) mBIT_1(P5M1,n);mBIT_0(P5M0,n);
#define NOP() _nop_()
/// >>>>> add by cc
#include "../clib/bit.h"
//added by cc
#define D_stdIO_P0_ALL() P0M1=0;P0M0=0;
#define D_HighI_P0_ALL() P0M1=0;P0M0=0XFF;
#define D_HighR_P0_ALL() P0M1=0XFF;P0M0=0;
@ -485,46 +458,48 @@ sfr AUXINTIF = 0xef;
#define D_HighR_P1_ALL() P1M1=0XFF;P1M0=0;
#define D_OpenD_P1_ALL() P1M1=0XFF;P1M0=0XFF;
//// n: BITN0---BITN7
#define D_stdIO_P0(BITN) BITN_0(P0M1,BITN);BITN_0(P0M0,BITN); //////00 准双向口 灌电流20mA 拉电流270-150uS
#define D_HighI_P0(BITN) BITN_0(P0M1,BITN);BITN_1(P0M0,BITN); //////01 推挽输出 20mA 加限流
#define D_HighR_P0(BITN) BITN_1(P0M1,BITN);BITN_0(P0M0,BITN); /////////10 高阻
#define D_OpenD_P0(BITN) BITN_1(P0M1,BITN);BITN_1(P0M0,BITN); /////11 开漏 open-Drain 内部上拉电阻断开 开漏模式既可以度外部状态也可以对外输出高低电平
#define D_stdIO_P1(BITN) BITN_0(P1M1,BITN);BITN_0(P1M0,BITN); //////00 准双向口 灌电流20mA 拉电流270-150uS
#define D_HighI_P1(BITN) BITN_0(P1M1,BITN);BITN_1(P1M0,BITN); //////01 推挽输出 20mA 加限流
#define D_HighR_P1(BITN) BITN_1(P1M1,BITN);BITN_0(P1M0,BITN); /////////10 高阻
#define D_OpenD_P1(BITN) BITN_1(P1M1,BITN);BITN_1(P1M0,BITN); /////11 开漏 open-Drain 内部上拉电阻断开 开漏模式既可以度外部状态也可以对外输出高低电平
#define D_stdIO_P2(BITN) BITN_0(P2M1,BITN);BITN_0(P2M0,BITN); //////00 准双向口 灌电流20mA 拉电流270-150uS
#define D_HighI_P2(BITN) BITN_0(P2M1,BITN);BITN_1(P2M0,BITN); //////01 推挽输出 20mA 加限流
#define D_HighR_P2(BITN) BITN_1(P2M1,BITN);BITN_0(P2M0,BITN); /////////10 高阻
#define D_OpenD_P2(BITN) BITN_1(P2M1,BITN);BITN_1(P2M0,BITN); /////11 开漏 open-Drain 内部上拉电阻断开 开漏模式既可以度外部状态也可以对外输出高低电平
#define D_stdIO_P3(BITN) BITN_0(P3M1,BITN);BITN_0(P3M0,BITN); //////00 准双向口 灌电流20mA 拉电流270-150uS
#define D_HighI_P3(BITN) BITN_0(P3M1,BITN);BITN_1(P3M0,BITN); //////01 推挽输出 20mA 加限流
#define D_HighR_P3(BITN) BITN_1(P3M1,BITN);BITN_0(P3M0,BITN); /////////10 高阻
#define D_OpenD_P3(BITN) BITN_1(P3M1,BITN);BITN_1(P3M0,BITN); /////11 开漏 open-Drain 内部上拉电阻断开 开漏模式既可以度外部状态也可以对外输出高低电平
#define D_stdIO_P4(BITN) BITN_0(P4M1,BITN);BITN_0(P4M0,BITN); //////00 准双向口 灌电流20mA 拉电流270-150uS
#define D_HighI_P4(BITN) BITN_0(P4M1,BITN);BITN_1(P4M0,BITN); //////01 推挽输出 20mA 加限流
#define D_HighR_P4(BITN) BITN_1(P4M1,BITN);BITN_0(P4M0,BITN); /////////10 高阻
#define D_OpenD_P4(BITN) BITN_1(P4M1,BITN);BITN_1(P4M0,BITN); /////11 开漏 open-Drain 内部上拉电阻断开 开漏模式既可以度外部状态也可以对外输出高低电平
#define D_stdIO_P5(BITN) BITN_0(P5M1,BITN);BITN_0(P5M0,BITN); //////00 准双向口 灌电流20mA 拉电流270-150uS
#define D_HighI_P5(BITN) BITN_0(P5M1,BITN);BITN_1(P5M0,BITN); //////01 推挽输出 20mA 加限流
#define D_HighR_P5(BITN) BITN_1(P5M1,BITN);BITN_0(P5M0,BITN); /////////10 高阻
#define D_OpenD_P5(BITN) BITN_1(P5M1,BITN);BITN_1(P5M0,BITN); /////11 开漏 open-Drain 内部上拉电阻断开 开漏模式既可以度外部状态也可以对外输出高低电平
#define D_stdIO_P6(BITN) BITN_0(P6M1,BITN);BITN_0(P6M0,BITN); //////00 准双向口 灌电流20mA 拉电流270-150uS
#define D_HighI_P6(BITN) BITN_0(P6M1,BITN);BITN_1(P6M0,BITN); //////01 推挽输出 20mA 加限流
#define D_HighR_P6(BITN) BITN_1(P6M1,BITN);BITN_0(P6M0,BITN); /////////10 高阻
#define D_OpenD_P6(BITN) BITN_1(P6M1,BITN);BITN_1(P6M0,BITN); /////11 开漏 open-Drain 内部上拉电阻断开 开漏模式既可以度外部状态也可以对外输出高低电平
#define D_stdIO_P7(BITN) BITN_0(P7M1,BITN);BITN_0(P7M0,BITN); //////00 准双向口 灌电流20mA 拉电流270-150uS
#define D_HighI_P7(BITN) BITN_0(P7M1,BITN);BITN_1(P7M0,BITN); //////01 推挽输出 20mA 加限流
#define D_HighR_P7(BITN) BITN_1(P7M1,BITN);BITN_0(P7M0,BITN); /////////10 高阻
#define D_OpenD_P7(BITN) BITN_1(P7M1,BITN);BITN_1(P7M0,BITN); /////11 开漏 open-Drain 内部上拉电阻断开 开漏模式既可以度外部状态也可以对外输出高低电平
#define D_stdIO_P0(n) BITN_0(P0M1,n);BITN_0(P0M0,n); //////00 准双向口 灌电流20mA 拉电流270-150uS
#define D_HighI_P0(n) BITN_0(P0M1,n);BITN_1(P0M0,n); //////01 推挽输出 20mA 加限流
#define D_HighR_P0(n) BITN_1(P0M1,n);BITN_0(P0M0,n); /////////10 高阻
#define D_OpenD_P0(n) BITN_1(P0M1,n);BITN_1(P0M0,n); /////11 开漏 open-Drain 内部上拉电阻断开 开漏模式既可以度外部状态也可以对外输出高低电平
#define D_stdIO_P1(n) BITN_0(P1M1,n);BITN_0(P1M0,n); //////00 准双向口 灌电流20mA 拉电流270-150uS
#define D_HighI_P1(n) BITN_0(P1M1,n);BITN_1(P1M0,n); //////01 推挽输出 20mA 加限流
#define D_HighR_P1(n) BITN_1(P1M1,n);BITN_0(P1M0,n); /////////10 高阻
#define D_OpenD_P1(n) BITN_1(P1M1,n);BITN_1(P1M0,n); /////11 开漏 open-Drain 内部上拉电阻断开 开漏模式既可以度外部状态也可以对外输出高低电平
#define D_stdIO_P2(n) BITN_0(P2M1,n);BITN_0(P2M0,n); //////00 准双向口 灌电流20mA 拉电流270-150uS
#define D_HighI_P2(n) BITN_0(P2M1,n);BITN_1(P2M0,n); //////01 推挽输出 20mA 加限流
#define D_HighR_P2(n) BITN_1(P2M1,n);BITN_0(P2M0,n); /////////10 高阻
#define D_OpenD_P2(n) BITN_1(P2M1,n);BITN_1(P2M0,n); /////11 开漏 open-Drain 内部上拉电阻断开 开漏模式既可以度外部状态也可以对外输出高低电平
#define D_stdIO_P3(n) BITN_0(P3M1,n);BITN_0(P3M0,n); //////00 准双向口 灌电流20mA 拉电流270-150uS
#define D_HighI_P3(n) BITN_0(P3M1,n);BITN_1(P3M0,n); //////01 推挽输出 20mA 加限流
#define D_HighR_P3(n) BITN_1(P3M1,n);BITN_0(P3M0,n); /////////10 高阻
#define D_OpenD_P3(n) BITN_1(P3M1,n);BITN_1(P3M0,n); /////11 开漏 open-Drain 内部上拉电阻断开 开漏模式既可以度外部状态也可以对外输出高低电平
#define D_stdIO_P4(n) BITN_0(P4M1,n);BITN_0(P4M0,n); //////00 准双向口 灌电流20mA 拉电流270-150uS
#define D_HighI_P4(n) BITN_0(P4M1,n);BITN_1(P4M0,n); //////01 推挽输出 20mA 加限流
#define D_HighR_P4(n) BITN_1(P4M1,n);BITN_0(P4M0,n); /////////10 高阻
#define D_OpenD_P4(n) BITN_1(P4M1,n);BITN_1(P4M0,n); /////11 开漏 open-Drain 内部上拉电阻断开 开漏模式既可以度外部状态也可以对外输出高低电平
#define D_stdIO_P5(n) BITN_0(P5M1,n);BITN_0(P5M0,n); //////00 准双向口 灌电流20mA 拉电流270-150uS
#define D_HighI_P5(n) BITN_0(P5M1,n);BITN_1(P5M0,n); //////01 推挽输出 20mA 加限流
#define D_HighR_P5(n) BITN_1(P5M1,n);BITN_0(P5M0,n); /////////10 高阻
#define D_OpenD_P5(n) BITN_1(P5M1,n);BITN_1(P5M0,n); /////11 开漏 open-Drain 内部上拉电阻断开 开漏模式既可以度外部状态也可以对外输出高低电平
#define D_stdIO_P6(n) BITN_0(P6M1,n);BITN_0(P6M0,n); //////00 准双向口 灌电流20mA 拉电流270-150uS
#define D_HighI_P6(n) BITN_0(P6M1,n);BITN_1(P6M0,n); //////01 推挽输出 20mA 加限流
#define D_HighR_P6(n) BITN_1(P6M1,n);BITN_0(P6M0,n); /////////10 高阻
#define D_OpenD_P6(n) BITN_1(P6M1,n);BITN_1(P6M0,n); /////11 开漏 open-Drain 内部上拉电阻断开 开漏模式既可以度外部状态也可以对外输出高低电平
#define D_stdIO_P7(n) BITN_0(P7M1,n);BITN_0(P7M0,n); //////00 准双向口 灌电流20mA 拉电流270-150uS
#define D_HighI_P7(n) BITN_0(P7M1,n);BITN_1(P7M0,n); //////01 推挽输出 20mA 加限流
#define D_HighR_P7(n) BITN_1(P7M1,n);BITN_0(P7M0,n); /////////10 高阻
#define D_OpenD_P7(n) BITN_1(P7M1,n);BITN_1(P7M0,n); /////11 开漏 open-Drain 内部上拉电阻断开 开漏模式既可以度外部状态也可以对外输出高低电平
#endif
/***
@ -533,7 +508,6 @@ sfr AUXINTIF = 0xef;
#define P2_conf_in(n) BITN_1(P2M1,n);BITN_0(P2M0,n);
#define P2_conf_port(n) BITN_0(P2M1,n);BITN_0(P2M0,n);
#define P3_conf_in(n) BITN_1(P3M1,n);BITN_0(P3M0,n);
#define P3_conf_port(n) BITN_0(P3M1,n);BITN_0(P3M0,n);
@ -544,7 +518,6 @@ sfr AUXINTIF = 0xef;
#define NOP() _nop_()
#define L0_INT4_OPEN() BITN_1(INT_CLKO, INT_EX4)
#define L0_INT4_CLOSE() BITN_0(INT_CLKO, INT_EX4)
@ -614,4 +587,3 @@ sfr AUXINTIF = 0xef;

89
source/cpu/c51_macro.H → source/cpu/stc_macro.h

@ -17,10 +17,13 @@
#ifndef __C51_MACRO_H_
#define __C51_MACRO_H_
#ifndef __STC_MACRO_H_
#define __STC_MACRO_H_
#include<intrins.h>
#include "../clib/bit.h"
#define NOP() _nop_()
#define D_P07_ON() P07 = 1
#define D_P06_ON() P06 = 1
@ -290,8 +293,88 @@
#define D_P70_REV() P70 = ~P70
#define D_stdIO_P0_ALL() P0M1=0;P0M0=0;
#define D_HighI_P0_ALL() P0M1=0;P0M0=0XFF;
#define D_HighR_P0_ALL() P0M1=0XFF;P0M0=0;
#define D_OpenD_P0_ALL() P0M1=0XFF;P0M0=0XFF;
#define D_stdIO_P1_ALL() P1M1=0;P1M0=0;
#define D_HighI_P1_ALL() P1M1=0;P1M0=0XFF;
#define D_HighR_P1_ALL() P1M1=0XFF;P1M0=0;
#define D_OpenD_P1_ALL() P1M1=0XFF;P1M0=0XFF;
#define D_stdIO_P2_ALL() P2M1=0;P2M0=0;
#define D_HighI_P2_ALL() P2M1=0;P2M0=0XFF;
#define D_HighR_P2_ALL() P2M1=0XFF;P2M0=0;
#define D_OpenD_P2_ALL() P2M1=0XFF;P2M0=0XFF;
#define D_stdIO_P3_ALL() P3M1=0;P3M0=0;
#define D_HighI_P3_ALL() P3M1=0;P3M0=0XFF;
#define D_HighR_P3_ALL() P3M1=0XFF;P3M0=0;
#define D_OpenD_P3_ALL() P3M1=0XFF;P3M0=0XFF;
#define D_stdIO_P4_ALL() P4M1=0;P4M0=0;
#define D_HighI_P4_ALL() P4M1=0;P4M0=0XFF;
#define D_HighR_P4_ALL() P4M1=0XFF;P4M0=0;
#define D_OpenD_P4_ALL() P4M1=0XFF;P4M0=0XFF;
#define D_stdIO_P5_ALL() P5M1=0;P5M0=0;
#define D_HighI_P5_ALL() P5M1=0;P5M0=0XFF;
#define D_HighR_P5_ALL() P5M1=0XFF;P5M0=0;
#define D_OpenD_P5_ALL() P5M1=0XFF;P5M0=0XFF;
#define D_stdIO_P6_ALL() P6M1=0;P6M0=0;
#define D_HighI_P6_ALL() P6M1=0;P6M0=0XFF;
#define D_HighR_P6_ALL() P6M1=0XFF;P6M0=0;
#define D_OpenD_P6_ALL() P6M1=0XFF;P6M0=0XFF;
#define D_stdIO_P7_ALL() P7M1=0;P7M0=0;
#define D_HighI_P7_ALL() P7M1=0;P7M0=0XFF;
#define D_HighR_P7_ALL() P7M1=0XFF;P7M0=0;
#define D_OpenD_P7_ALL() P7M1=0XFF;P7M0=0XFF;
////Notice: n: BITN0---BITN7 不是0-7 eg:D_stdIO_P0(BITN0)
#define D_stdIO_P0(n) BITN_0(P0M1,n);BITN_0(P0M0,n); //////00 准双向口 灌电流20mA 拉电流270-150uS
#define D_HighI_P0(n) BITN_0(P0M1,n);BITN_1(P0M0,n); //////01 推挽输出 20mA 加限流
#define D_HighR_P0(n) BITN_1(P0M1,n);BITN_0(P0M0,n); /////////10 高阻
#define D_OpenD_P0(n) BITN_1(P0M1,n);BITN_1(P0M0,n); /////11 开漏 open-Drain 内部上拉电阻断开 开漏模式既可以度外部状态也可以对外输出高低电平
#define D_stdIO_P1(n) BITN_0(P1M1,n);BITN_0(P1M0,n); //////00 准双向口 灌电流20mA 拉电流270-150uS
#define D_HighI_P1(n) BITN_0(P1M1,n);BITN_1(P1M0,n); //////01 推挽输出 20mA 加限流
#define D_HighR_P1(n) BITN_1(P1M1,n);BITN_0(P1M0,n); /////////10 高阻
#define D_OpenD_P1(n) BITN_1(P1M1,n);BITN_1(P1M0,n); /////11 开漏 open-Drain 内部上拉电阻断开 开漏模式既可以度外部状态也可以对外输出高低电平
#define D_stdIO_P2(n) BITN_0(P2M1,n);BITN_0(P2M0,n); //////00 准双向口 灌电流20mA 拉电流270-150uS
#define D_HighI_P2(n) BITN_0(P2M1,n);BITN_1(P2M0,n); //////01 推挽输出 20mA 加限流
#define D_HighR_P2(n) BITN_1(P2M1,n);BITN_0(P2M0,n); /////////10 高阻
#define D_OpenD_P2(n) BITN_1(P2M1,n);BITN_1(P2M0,n); /////11 开漏 open-Drain 内部上拉电阻断开 开漏模式既可以度外部状态也可以对外输出高低电平
#define D_stdIO_P3(n) BITN_0(P3M1,n);BITN_0(P3M0,n); //////00 准双向口 灌电流20mA 拉电流270-150uS
#define D_HighI_P3(n) BITN_0(P3M1,n);BITN_1(P3M0,n); //////01 推挽输出 20mA 加限流
#define D_HighR_P3(n) BITN_1(P3M1,n);BITN_0(P3M0,n); /////////10 高阻
#define D_OpenD_P3(n) BITN_1(P3M1,n);BITN_1(P3M0,n); /////11 开漏 open-Drain 内部上拉电阻断开 开漏模式既可以度外部状态也可以对外输出高低电平
#define D_stdIO_P4(n) BITN_0(P4M1,n);BITN_0(P4M0,n); //////00 准双向口 灌电流20mA 拉电流270-150uS
#define D_HighI_P4(n) BITN_0(P4M1,n);BITN_1(P4M0,n); //////01 推挽输出 20mA 加限流
#define D_HighR_P4(n) BITN_1(P4M1,n);BITN_0(P4M0,n); /////////10 高阻
#define D_OpenD_P4(n) BITN_1(P4M1,n);BITN_1(P4M0,n); /////11 开漏 open-Drain 内部上拉电阻断开 开漏模式既可以度外部状态也可以对外输出高低电平
#define D_stdIO_P5(n) BITN_0(P5M1,n);BITN_0(P5M0,n); //////00 准双向口 灌电流20mA 拉电流270-150uS
#define D_HighI_P5(n) BITN_0(P5M1,n);BITN_1(P5M0,n); //////01 推挽输出 20mA 加限流
#define D_HighR_P5(n) BITN_1(P5M1,n);BITN_0(P5M0,n); /////////10 高阻
#define D_OpenD_P5(n) BITN_1(P5M1,n);BITN_1(P5M0,n); /////11 开漏 open-Drain 内部上拉电阻断开 开漏模式既可以度外部状态也可以对外输出高低电平
#define D_stdIO_P6(n) BITN_0(P6M1,n);BITN_0(P6M0,n); //////00 准双向口 灌电流20mA 拉电流270-150uS
#define D_HighI_P6(n) BITN_0(P6M1,n);BITN_1(P6M0,n); //////01 推挽输出 20mA 加限流
#define D_HighR_P6(n) BITN_1(P6M1,n);BITN_0(P6M0,n); /////////10 高阻
#define D_OpenD_P6(n) BITN_1(P6M1,n);BITN_1(P6M0,n); /////11 开漏 open-Drain 内部上拉电阻断开 开漏模式既可以度外部状态也可以对外输出高低电平
#define D_stdIO_P7(n) BITN_0(P7M1,n);BITN_0(P7M0,n); //////00 准双向口 灌电流20mA 拉电流270-150uS
#define D_HighI_P7(n) BITN_0(P7M1,n);BITN_1(P7M0,n); //////01 推挽输出 20mA 加限流
#define D_HighR_P7(n) BITN_1(P7M1,n);BITN_0(P7M0,n); /////////10 高阻
#define D_OpenD_P7(n) BITN_1(P7M1,n);BITN_1(P7M0,n); /////11 开漏 open-Drain 内部上拉电阻断开 开漏模式既可以度外部状态也可以对外输出高低电平
#endif //__C51_MACRO_H_
#endif //__STC_MACRO_H_

466
source/cpu/stc_stc15w.h

@ -0,0 +1,466 @@
#ifndef __STC15F2K60S2_H_
#define __STC15F2K60S2_H_
// stc_stc15w.h
#include<intrins.h>
/////////////////////////////////////////////////
//注意: STC15W4K32S4系列的芯片,上电后所有与PWM相关的IO口均为
// 高阻态,需将这些口设置为准双向口或强推挽模式方可正常使用
//相关IO: P0.6/P0.7/P1.6/P1.7/P2.1/P2.2
// P2.3/P2.7/P3.7/P4.2/P4.4/P4.5
/////////////////////////////////////////////////
/////////////////////////////////////////////////
//包含本头文件后,不用另外再包含"REG51.H"
//内核特殊功能寄存器 // 复位值 描述
sfr ACC = 0xE0; //0000,0000 累加器Accumulator
sfr B = 0xF0; //0000,0000 B寄存器
sfr PSW = 0xD0; //0000,0000 程序状态字
sbit CY = PSW^7;
sbit AC = PSW^6;
sbit F0 = PSW^5;
sbit RS1 = PSW^4;
sbit RS0 = PSW^3;
sbit OV = PSW^2;
sbit P = PSW^0;
sfr SP = 0x81; //0000,0111 堆栈指针
sfr DPL = 0x82; //0000,0000 数据指针低字节
sfr DPH = 0x83; //0000,0000 数据指针高字节
//I/O 口特殊功能寄存器
sfr P0 = 0x80; //1111,1111 端口0
sbit P00 = P0^0;
sbit P01 = P0^1;
sbit P02 = P0^2;
sbit P03 = P0^3;
sbit P04 = P0^4;
sbit P05 = P0^5;
sbit P06 = P0^6;
sbit P07 = P0^7;
sfr P1 = 0x90; //1111,1111 端口1
sbit P10 = P1^0;
sbit P11 = P1^1;
sbit P12 = P1^2;
sbit P13 = P1^3;
sbit P14 = P1^4;
sbit P15 = P1^5;
sbit P16 = P1^6;
sbit P17 = P1^7;
sfr P2 = 0xA0; //1111,1111 端口2
sbit P20 = P2^0;
sbit P21 = P2^1;
sbit P22 = P2^2;
sbit P23 = P2^3;
sbit P24 = P2^4;
sbit P25 = P2^5;
sbit P26 = P2^6;
sbit P27 = P2^7;
sfr P3 = 0xB0; //1111,1111 端口3
sbit P30 = P3^0;
sbit P31 = P3^1;
sbit P32 = P3^2;
sbit P33 = P3^3;
sbit P34 = P3^4;
sbit P35 = P3^5;
sbit P36 = P3^6;
sbit P37 = P3^7;
sfr P4 = 0xC0; //1111,1111 端口4
sbit P40 = P4^0;
sbit P41 = P4^1;
sbit P42 = P4^2;
sbit P43 = P4^3;
sbit P44 = P4^4;
sbit P45 = P4^5;
sbit P46 = P4^6;
sbit P47 = P4^7;
sfr P5 = 0xC8; //xxxx,1111 端口5
sbit P50 = P5^0;
sbit P51 = P5^1;
sbit P52 = P5^2;
sbit P53 = P5^3;
sbit P54 = P5^4;
sbit P55 = P5^5;
sbit P56 = P5^6;
sbit P57 = P5^7;
sfr P6 = 0xE8; //0000,0000 端口6
sbit P60 = P6^0;
sbit P61 = P6^1;
sbit P62 = P6^2;
sbit P63 = P6^3;
sbit P64 = P6^4;
sbit P65 = P6^5;
sbit P66 = P6^6;
sbit P67 = P6^7;
sfr P7 = 0xF8; //0000,0000 端口7
sbit P70 = P7^0;
sbit P71 = P7^1;
sbit P72 = P7^2;
sbit P73 = P7^3;
sbit P74 = P7^4;
sbit P75 = P7^5;
sbit P76 = P7^6;
sbit P77 = P7^7;
sfr P0M0 = 0x94; //0000,0000 端口0模式寄存器0
sfr P0M1 = 0x93; //0000,0000 端口0模式寄存器1
sfr P1M0 = 0x92; //0000,0000 端口1模式寄存器0
sfr P1M1 = 0x91; //0000,0000 端口1模式寄存器1
sfr P2M0 = 0x96; //0000,0000 端口2模式寄存器0
sfr P2M1 = 0x95; //0000,0000 端口2模式寄存器1
sfr P3M0 = 0xB2; //0000,0000 端口3模式寄存器0
sfr P3M1 = 0xB1; //0000,0000 端口3模式寄存器1
sfr P4M0 = 0xB4; //0000,0000 端口4模式寄存器0
sfr P4M1 = 0xB3; //0000,0000 端口4模式寄存器1
sfr P5M0 = 0xCA; //0000,0000 端口5模式寄存器0
sfr P5M1 = 0xC9; //0000,0000 端口5模式寄存器1
sfr P6M0 = 0xCC; //0000,0000 端口6模式寄存器0
sfr P6M1 = 0xCB; //0000,0000 端口6模式寄存器1
sfr P7M0 = 0xE2; //0000,0000 端口7模式寄存器0
sfr P7M1 = 0xE1; //0000,0000 端口7模式寄存器1
//系统管理特殊功能寄存器
sfr PCON = 0x87; //0001,0000 电源控制寄存器
sfr AUXR = 0x8E; //0000,0000 辅助寄存器
#define TOx12 BITN7
#define T1x12 BITN6
#define UART_M0x6 BITN5 //串口1模式0速度 =0 12倍 = 1 两倍
#define T2R BITN4 //定时器2 运行 =1
#define T2_C BITN3 //定时器/计数器选择
#define T2x12 BITN2
#define EXTRAM BITN1
#define S1ST2 BITN0 //串口1选择定时器1 =0 选择定时器2 =1
sfr AUXR1 = 0xA2; //0000,0000 辅助寄存器1
sfr P_SW1 = 0xA2; //0000,0000 外设端口切换寄存器1
sfr CLK_DIV = 0x97; //0000,0000 时钟分频控制寄存器
sfr BUS_SPEED = 0xA1; //xx10,x011 总线速度控制寄存器
sfr P1ASF = 0x9D; //0000,0000 端口1模拟功能配置寄存器
sfr P_SW2 = 0xBA; //0xxx,x000 外设端口切换寄存器
//中断特殊功能寄存器
sfr IE = 0xA8; //0000,0000 中断控制寄存器
sbit EA = IE^7;
sbit ELVD = IE^6;
sbit EADC = IE^5;
sbit ES = IE^4;
sbit ET1 = IE^3;
sbit EX1 = IE^2;
sbit ET0 = IE^1;
sbit EX0 = IE^0;
sfr IP = 0xB8; //0000,0000 中断优先级寄存器
sbit PPCA = IP^7;
sbit PLVD = IP^6;
sbit PADC = IP^5;
sbit PS = IP^4;
sbit PT1 = IP^3;
sbit PX1 = IP^2;
sbit PT0 = IP^1;
sbit PX0 = IP^0;
sfr IE2 = 0xAF; //0000,0000 中断控制寄存器2
/// 不可位寻址
#define ET4 BITN6
#define ET3 BITN5
#define ES4 BITN4
#define ES3 BITN3
#define ET2 BITN2
#define ESPI BITN1
#define ES2 BITN0
sfr IP2 = 0xB5; //xxxx,xx00 中断优先级寄存器2
sfr INT_CLKO = 0x8F; //0000,0000 外部中断与时钟输出控制寄存器
//定时器特殊功能寄存器
sfr TCON = 0x88; //0000,0000 T0/T1控制寄存器
sbit TF1 = TCON^7;
sbit TR1 = TCON^6;
sbit TF0 = TCON^5;
sbit TR0 = TCON^4;
sbit IE1 = TCON^3;
sbit IT1 = TCON^2;
sbit IE0 = TCON^1;
sbit IT0 = TCON^0;
sfr TMOD = 0x89; //0000,0000 T0/T1模式寄存器
sfr TL0 = 0x8A; //0000,0000 T0低字节
sfr TL1 = 0x8B; //0000,0000 T1低字节
sfr TH0 = 0x8C; //0000,0000 T0高字节
sfr TH1 = 0x8D; //0000,0000 T1高字节
sfr T4T3M = 0xD1; //0000,0000 T3/T4模式寄存器
sfr T3T4M = 0xD1; //0000,0000 T3/T4模式寄存器
sfr T4H = 0xD2; //0000,0000 T4高字节
sfr T4L = 0xD3; //0000,0000 T4低字节
sfr T3H = 0xD4; //0000,0000 T3高字节
sfr T3L = 0xD5; //0000,0000 T3低字节
sfr T2H = 0xD6; //0000,0000 T2高字节
sfr T2L = 0xD7; //0000,0000 T2低字节
sfr WKTCL = 0xAA; //0000,0000 掉电唤醒定时器低字节
sfr WKTCH = 0xAB; //0000,0000 掉电唤醒定时器高字节
sfr WDT_CONTR = 0xC1; //0000,0000 看门狗控制寄存器
//串行口特殊功能寄存器
sfr SCON = 0x98; //0000,0000 串口1控制寄存器
sbit SM0 = SCON^7;
sbit SM1 = SCON^6;
sbit SM2 = SCON^5;
sbit REN = SCON^4;
sbit TB8 = SCON^3;
sbit RB8 = SCON^2;
sbit TI = SCON^1;
sbit RI = SCON^0;
//sfr SBUF = 0x99; //xxxx,xxxx 串口1数据寄存器
//sfr S2CON = 0x9A; //0000,0000 串口2控制寄存器
//sfr S2BUF = 0x9B; //xxxx,xxxx 串口2数据寄存器
//sfr SADDR = 0xA9; //0000,0000 从机地址寄存器
//sfr SADEN = 0xB9; //0000,0000 从机地址屏蔽寄存器
sfr SBUF = 0x99; //Serial Data Buffer
sfr SBUF0 = 0x99; //Serial Data Buffer xxxx,xxxx
sfr SADEN = 0xB9; //Slave Address Mask 0000,0000
sfr SADDR = 0xA9; //Slave Address 0000,0000
//-----------------------------------
// 7 6 5 4 3 2 1 0 Reset Value
sfr S2CON = 0x9A; //S2 Control S2SM0 S2SM1 S2SM2 S2REN S2TB8 S2RB8 S2TI S2RI 00000000B
#define S2SM0 BITN7
#define S2ST4 BITN6
#define S2SM2 BITN5
#define S2REN BITN4
#define S2TB8 BITN3
#define S2RB8 BITN2
#define S2TI BITN1
#define S2RI BITN0
sfr S2BUF = 0x9B; //S2 Serial Buffer xxxx,xxxx
//sfr BRT = 0x9C; //S2 Baud-Rate Timer 0000,0000
//---------------------------------------------------------------
sfr S3CON = 0xAC; //0000,0000 串口3控制寄存器
#define S3SM0 BITN7
#define S3ST4 BITN6
#define S3SM2 BITN5
#define S3REN BITN4
#define S3TB8 BITN3
#define S3RB8 BITN2
#define S3TI BITN1
#define S3RI BITN0
sfr S3BUF = 0xAD; //xxxx,xxxx 串口3数据寄存器
//---------------------------------------------------------------
sfr S4CON = 0x84; //0000,0000 串口4控制寄存器
#define S4SM0 BITN7
#define S4ST4 BITN6
#define S4SM2 BITN5
#define S4REN BITN4
#define S4TB8 BITN3
#define S4RB8 BITN2
#define S4TI BITN1
#define S4RI BITN0
sfr S4BUF = 0x85; //xxxx,xxxx 串口4数据寄存器
//ADC 特殊功能寄存器
sfr ADC_CONTR = 0xBC; //0000,0000 A/D转换控制寄存器
sfr ADC_RES = 0xBD; //0000,0000 A/D转换结果高8位
sfr ADC_RESL = 0xBE; //0000,0000 A/D转换结果低2位
//SPI 特殊功能寄存器
sfr SPSTAT = 0xCD; //00xx,xxxx SPI状态寄存器
sfr SPCTL = 0xCE; //0000,0100 SPI控制寄存器
sfr SPDAT = 0xCF; //0000,0000 SPI数据寄存器
//IAP/ISP 特殊功能寄存器
sfr IAP_DATA = 0xC2; //0000,0000 EEPROM数据寄存器
sfr IAP_ADDRH = 0xC3; //0000,0000 EEPROM地址高字节
sfr IAP_ADDRL = 0xC4; //0000,0000 EEPROM地址第字节
sfr IAP_CMD = 0xC5; //xxxx,xx00 EEPROM命令寄存器
sfr IAP_TRIG = 0xC6; //0000,0000 EEPRPM命令触发寄存器
sfr IAP_CONTR = 0xC7; //0000,x000 EEPROM控制寄存器
//PCA/PWM 特殊功能寄存器
sfr CCON = 0xD8; //00xx,xx00 PCA控制寄存器
sbit CF = CCON^7;
sbit CR = CCON^6;
sbit CCF2 = CCON^2;
sbit CCF1 = CCON^1;
sbit CCF0 = CCON^0;
sfr CMOD = 0xD9; //0xxx,x000 PCA 工作模式寄存器
sfr CL = 0xE9; //0000,0000 PCA计数器低字节
sfr CH = 0xF9; //0000,0000 PCA计数器高字节
sfr CCAPM0 = 0xDA; //0000,0000 PCA模块0的PWM寄存器
sfr CCAPM1 = 0xDB; //0000,0000 PCA模块1的PWM寄存器
sfr CCAPM2 = 0xDC; //0000,0000 PCA模块2的PWM 寄存器
sfr CCAP0L = 0xEA; //0000,0000 PCA模块0的捕捉/比较寄存器低字节
sfr CCAP1L = 0xEB; //0000,0000 PCA模块1的捕捉/比较寄存器低字节
sfr CCAP2L = 0xEC; //0000,0000 PCA模块2的捕捉/比较寄存器低字节
sfr PCA_PWM0 = 0xF2; //xxxx,xx00 PCA模块0的PWM寄存器
sfr PCA_PWM1 = 0xF3; //xxxx,xx00 PCA模块1的PWM寄存器
sfr PCA_PWM2 = 0xF4; //xxxx,xx00 PCA模块1的PWM寄存器
sfr CCAP0H = 0xFA; //0000,0000 PCA模块0的捕捉/比较寄存器高字节
sfr CCAP1H = 0xFB; //0000,0000 PCA模块1的捕捉/比较寄存器高字节
sfr CCAP2H = 0xFC; //0000,0000 PCA模块2的捕捉/比较寄存器高字节
//比较器特殊功能寄存器
sfr CMPCR1 = 0xE6; //0000,0000 比较器控制寄存器1
sfr CMPCR2 = 0xE7; //0000,0000 比较器控制寄存器2
//增强型PWM波形发生器特殊功能寄存器
sfr PWMCFG = 0xf1; //x000,0000 PWM配置寄存器
sfr PWMCR = 0xf5; //0000,0000 PWM控制寄存器
sfr PWMIF = 0xf6; //x000,0000 PWM中断标志寄存器
sfr PWMFDCR = 0xf7; //xx00,0000 PWM外部异常检测控制寄存器
//如下特殊功能寄存器位于扩展RAM区域
//访问这些寄存器,需先将P_SW2的BIT7设置为1,才可正常读写
#define PWMC (*(unsigned int volatile xdata *)0xfff0)
#define PWMCH (*(unsigned char volatile xdata *)0xfff0)
#define PWMCL (*(unsigned char volatile xdata *)0xfff1)
#define PWMCKS (*(unsigned char volatile xdata *)0xfff2)
#define PWM2T1 (*(unsigned int volatile xdata *)0xff00)
#define PWM2T1H (*(unsigned char volatile xdata *)0xff00)
#define PWM2T1L (*(unsigned char volatile xdata *)0xff01)
#define PWM2T2 (*(unsigned int volatile xdata *)0xff02)
#define PWM2T2H (*(unsigned char volatile xdata *)0xff02)
#define PWM2T2L (*(unsigned char volatile xdata *)0xff03)
#define PWM2CR (*(unsigned char volatile xdata *)0xff04)
#define PWM3T1 (*(unsigned int volatile xdata *)0xff10)
#define PWM3T1H (*(unsigned char volatile xdata *)0xff10)
#define PWM3T1L (*(unsigned char volatile xdata *)0xff11)
#define PWM3T2 (*(unsigned int volatile xdata *)0xff12)
#define PWM3T2H (*(unsigned char volatile xdata *)0xff12)
#define PWM3T2L (*(unsigned char volatile xdata *)0xff13)
#define PWM3CR (*(unsigned char volatile xdata *)0xff14)
#define PWM4T1 (*(unsigned int volatile xdata *)0xff20)
#define PWM4T1H (*(unsigned char volatile xdata *)0xff20)
#define PWM4T1L (*(unsigned char volatile xdata *)0xff21)
#define PWM4T2 (*(unsigned int volatile xdata *)0xff22)
#define PWM4T2H (*(unsigned char volatile xdata *)0xff22)
#define PWM4T2L (*(unsigned char volatile xdata *)0xff23)
#define PWM4CR (*(unsigned char volatile xdata *)0xff24)
#define PWM5T1 (*(unsigned int volatile xdata *)0xff30)
#define PWM5T1H (*(unsigned char volatile xdata *)0xff30)
#define PWM5T1L (*(unsigned char volatile xdata *)0xff31)
#define PWM5T2 (*(unsigned int volatile xdata *)0xff32)
#define PWM5T2H (*(unsigned char volatile xdata *)0xff32)
#define PWM5T2L (*(unsigned char volatile xdata *)0xff33)
#define PWM5CR (*(unsigned char volatile xdata *)0xff34)
#define PWM6T1 (*(unsigned int volatile xdata *)0xff40)
#define PWM6T1H (*(unsigned char volatile xdata *)0xff40)
#define PWM6T1L (*(unsigned char volatile xdata *)0xff41)
#define PWM6T2 (*(unsigned int volatile xdata *)0xff42)
#define PWM6T2H (*(unsigned char volatile xdata *)0xff42)
#define PWM6T2L (*(unsigned char volatile xdata *)0xff43)
#define PWM6CR (*(unsigned char volatile xdata *)0xff44)
#define PWM7T1 (*(unsigned int volatile xdata *)0xff50)
#define PWM7T1H (*(unsigned char volatile xdata *)0xff50)
#define PWM7T1L (*(unsigned char volatile xdata *)0xff51)
#define PWM7T2 (*(unsigned int volatile xdata *)0xff52)
#define PWM7T2H (*(unsigned char volatile xdata *)0xff52)
#define PWM7T2L (*(unsigned char volatile xdata *)0xff53)
#define PWM7CR (*(unsigned char volatile xdata *)0xff54)
/////////////////////////////////////////////////
/* P3 */
sbit RD = 0xB7;
sbit WR = 0xB6;
sbit T1 = 0xB5;
sbit T0 = 0xB4;
sbit INT1 = 0xB3;
sbit INT0 = 0xB2;
sbit TXD = 0xB1;
sbit RXD = 0xB0;
/// >>>>> add by cc
//sbit P34=P3^4; //定义SDA数据线
//sbit P35=P3^5; //定义SCL时钟线
#define mBIT_1(X,N) X|= (1<<N)
#define mBIT_0(X,N) X&=~(1<<N)
#define mBIT_G(X,N) (X&(1<<N))
//高阻状态
#define P0_conf_in(n) mBIT_1(P0M1,n);mBIT_0(P0M0,n);
#define P1_conf_in(n) mBIT_1(P1M1,n);mBIT_0(P1M0,n);
#define P2_conf_in(n) mBIT_1(P2M1,n);mBIT_0(P2M0,n);
#define P2_conf_port(n) mBIT_0(P2M1,n);mBIT_0(P2M0,n);
#define P3_conf_in(n) mBIT_1(P3M1,n);mBIT_0(P3M0,n);
#define P3_conf_port(n) mBIT_0(P3M1,n);mBIT_0(P3M0,n);
#define P4_conf_in(n) mBIT_1(P4M1,n);mBIT_0(P4M0,n);
#define P5_conf_in(n) mBIT_1(P5M1,n);mBIT_0(P5M0,n);
#define NOP() _nop_()
#define D_stdIO_P0_ALL() P0M1=0;P0M0=0;
#define D_HighI_P0_ALL() P0M1=0;P0M0=0XFF;
#define D_HighR_P0_ALL() P0M1=0XFF;P0M0=0;
#define D_OpenD_P0_ALL() P0M1=0XFF;P0M0=0XFF;
#define D_stdIO_P1_ALL() P1M1=0;P1M0=0;
#define D_HighI_P1_ALL() P1M1=0;P1M0=0XFF;
#define D_HighR_P1_ALL() P1M1=0XFF;P1M0=0;
#define D_OpenD_P1_ALL() P1M1=0XFF;P1M0=0XFF;
//// n: BITN0---BITN7
#define D_stdIO_P0(BITN) BITN_0(P0M1,BITN);BITN_0(P0M0,BITN); //////00 准双向口 灌电流20mA 拉电流270-150uS
#define D_HighI_P0(BITN) BITN_0(P0M1,BITN);BITN_1(P0M0,BITN); //////01 推挽输出 20mA 加限流
#define D_HighR_P0(BITN) BITN_1(P0M1,BITN);BITN_0(P0M0,BITN); /////////10 高阻
#define D_OpenD_P0(BITN) BITN_1(P0M1,BITN);BITN_1(P0M0,BITN); /////11 开漏 open-Drain 内部上拉电阻断开 开漏模式既可以度外部状态也可以对外输出高低电平
#define D_stdIO_P1(BITN) BITN_0(P1M1,BITN);BITN_0(P1M0,BITN); //////00 准双向口 灌电流20mA 拉电流270-150uS
#define D_HighI_P1(BITN) BITN_0(P1M1,BITN);BITN_1(P1M0,BITN); //////01 推挽输出 20mA 加限流
#define D_HighR_P1(BITN) BITN_1(P1M1,BITN);BITN_0(P1M0,BITN); /////////10 高阻
#define D_OpenD_P1(BITN) BITN_1(P1M1,BITN);BITN_1(P1M0,BITN); /////11 开漏 open-Drain 内部上拉电阻断开 开漏模式既可以度外部状态也可以对外输出高低电平
#define D_stdIO_P2(BITN) BITN_0(P2M1,BITN);BITN_0(P2M0,BITN); //////00 准双向口 灌电流20mA 拉电流270-150uS
#define D_HighI_P2(BITN) BITN_0(P2M1,BITN);BITN_1(P2M0,BITN); //////01 推挽输出 20mA 加限流
#define D_HighR_P2(BITN) BITN_1(P2M1,BITN);BITN_0(P2M0,BITN); /////////10 高阻
#define D_OpenD_P2(BITN) BITN_1(P2M1,BITN);BITN_1(P2M0,BITN); /////11 开漏 open-Drain 内部上拉电阻断开 开漏模式既可以度外部状态也可以对外输出高低电平
#define D_stdIO_P3(BITN) BITN_0(P3M1,BITN);BITN_0(P3M0,BITN); //////00 准双向口 灌电流20mA 拉电流270-150uS
#define D_HighI_P3(BITN) BITN_0(P3M1,BITN);BITN_1(P3M0,BITN); //////01 推挽输出 20mA 加限流
#define D_HighR_P3(BITN) BITN_1(P3M1,BITN);BITN_0(P3M0,BITN); /////////10 高阻
#define D_OpenD_P3(BITN) BITN_1(P3M1,BITN);BITN_1(P3M0,BITN); /////11 开漏 open-Drain 内部上拉电阻断开 开漏模式既可以度外部状态也可以对外输出高低电平
#define D_stdIO_P4(BITN) BITN_0(P4M1,BITN);BITN_0(P4M0,BITN); //////00 准双向口 灌电流20mA 拉电流270-150uS
#define D_HighI_P4(BITN) BITN_0(P4M1,BITN);BITN_1(P4M0,BITN); //////01 推挽输出 20mA 加限流
#define D_HighR_P4(BITN) BITN_1(P4M1,BITN);BITN_0(P4M0,BITN); /////////10 高阻
#define D_OpenD_P4(BITN) BITN_1(P4M1,BITN);BITN_1(P4M0,BITN); /////11 开漏 open-Drain 内部上拉电阻断开 开漏模式既可以度外部状态也可以对外输出高低电平
#define D_stdIO_P5(BITN) BITN_0(P5M1,BITN);BITN_0(P5M0,BITN); //////00 准双向口 灌电流20mA 拉电流270-150uS
#define D_HighI_P5(BITN) BITN_0(P5M1,BITN);BITN_1(P5M0,BITN); //////01 推挽输出 20mA 加限流
#define D_HighR_P5(BITN) BITN_1(P5M1,BITN);BITN_0(P5M0,BITN); /////////10 高阻
#define D_OpenD_P5(BITN) BITN_1(P5M1,BITN);BITN_1(P5M0,BITN); /////11 开漏 open-Drain 内部上拉电阻断开 开漏模式既可以度外部状态也可以对外输出高低电平
#define D_stdIO_P6(BITN) BITN_0(P6M1,BITN);BITN_0(P6M0,BITN); //////00 准双向口 灌电流20mA 拉电流270-150uS
#define D_HighI_P6(BITN) BITN_0(P6M1,BITN);BITN_1(P6M0,BITN); //////01 推挽输出 20mA 加限流
#define D_HighR_P6(BITN) BITN_1(P6M1,BITN);BITN_0(P6M0,BITN); /////////10 高阻
#define D_OpenD_P6(BITN) BITN_1(P6M1,BITN);BITN_1(P6M0,BITN); /////11 开漏 open-Drain 内部上拉电阻断开 开漏模式既可以度外部状态也可以对外输出高低电平
#define D_stdIO_P7(BITN) BITN_0(P7M1,BITN);BITN_0(P7M0,BITN); //////00 准双向口 灌电流20mA 拉电流270-150uS
#define D_HighI_P7(BITN) BITN_0(P7M1,BITN);BITN_1(P7M0,BITN); //////01 推挽输出 20mA 加限流
#define D_HighR_P7(BITN) BITN_1(P7M1,BITN);BITN_0(P7M0,BITN); /////////10 高阻
#define D_OpenD_P7(BITN) BITN_1(P7M1,BITN);BITN_1(P7M0,BITN); /////11 开漏 open-Drain 内部上拉电阻断开 开漏模式既可以度外部状态也可以对外输出高低电平
#endif

593
source/cpu/stc_stc8f.h

@ -0,0 +1,593 @@
#ifndef __STC8F_H_
#define __STC8F_H_
/////////////////////////////////////////////////
//包含本头文件后,不用另外再包含"REG51.H"
//内核特殊功能寄存器
sfr ACC = 0xe0;
sfr B = 0xf0;
sfr PSW = 0xd0;
sbit CY = PSW^7;
sbit AC = PSW^6;
sbit F0 = PSW^5;
sbit RS1 = PSW^4;
sbit RS0 = PSW^3;
sbit OV = PSW^2;
sbit F1 = PSW^1;
sbit P = PSW^0;
sfr SP = 0x81;
sfr DPL = 0x82;
sfr DPH = 0x83;
sfr TA = 0xae;
sfr DPS = 0xe3;
sfr DPL1 = 0xe4;
sfr DPH1 = 0xe5;
//I/O 口特殊功能寄存器
sfr P0 = 0x80;
sfr P1 = 0x90;
sfr P2 = 0xa0;
sfr P3 = 0xb0;
sfr P4 = 0xc0;
sfr P5 = 0xc8;
sfr P6 = 0xe8;
sfr P7 = 0xf8;
sfr P0M0 = 0x94;
sfr P0M1 = 0x93;
sfr P1M0 = 0x92;
sfr P1M1 = 0x91;
sfr P2M0 = 0x96;
sfr P2M1 = 0x95;
sfr P3M0 = 0xb2;
sfr P3M1 = 0xb1;
sfr P4M0 = 0xb4;
sfr P4M1 = 0xb3;
sfr P5M0 = 0xca;
sfr P5M1 = 0xc9;
sfr P6M0 = 0xcc;
sfr P6M1 = 0xcb;
sfr P7M0 = 0xe2;
sfr P7M1 = 0xe1;
sbit P00 = P0^0;
sbit P01 = P0^1;
sbit P02 = P0^2;
sbit P03 = P0^3;
sbit P04 = P0^4;
sbit P05 = P0^5;
sbit P06 = P0^6;
sbit P07 = P0^7;
sbit P10 = P1^0;
sbit P11 = P1^1;
sbit P12 = P1^2;
sbit P13 = P1^3;
sbit P14 = P1^4;
sbit P15 = P1^5;
sbit P16 = P1^6;
sbit P17 = P1^7;
sbit P20 = P2^0;
sbit P21 = P2^1;
sbit P22 = P2^2;
sbit P23 = P2^3;
sbit P24 = P2^4;
sbit P25 = P2^5;
sbit P26 = P2^6;
sbit P27 = P2^7;
sbit P30 = P3^0;
sbit P31 = P3^1;
sbit P32 = P3^2;
sbit P33 = P3^3;
sbit P34 = P3^4;
sbit P35 = P3^5;
sbit P36 = P3^6;
sbit P37 = P3^7;
sbit P40 = P4^0;
sbit P41 = P4^1;
sbit P42 = P4^2;
sbit P43 = P4^3;
sbit P44 = P4^4;
sbit P45 = P4^5;
sbit P46 = P4^6;
sbit P47 = P4^7;
sbit P50 = P5^0;
sbit P51 = P5^1;
sbit P52 = P5^2;
sbit P53 = P5^3;
sbit P54 = P5^4;
sbit P55 = P5^5;
sbit P56 = P5^6;
sbit P57 = P5^7;
sbit P60 = P6^0;
sbit P61 = P6^1;
sbit P62 = P6^2;
sbit P63 = P6^3;
sbit P64 = P6^4;
sbit P65 = P6^5;
sbit P66 = P6^6;
sbit P67 = P6^7;
sbit P70 = P7^0;
sbit P71 = P7^1;
sbit P72 = P7^2;
sbit P73 = P7^3;
sbit P74 = P7^4;
sbit P75 = P7^5;
sbit P76 = P7^6;
sbit P77 = P7^7;
//如下特殊功能寄存器位于扩展RAM区域
//访问这些寄存器,需先将P_SW2的BIT7设置为1,才可正常读写
#define P0PU (*(unsigned char volatile xdata *)0xfe10)
#define P1PU (*(unsigned char volatile xdata *)0xfe11)
#define P2PU (*(unsigned char volatile xdata *)0xfe12)
#define P3PU (*(unsigned char volatile xdata *)0xfe13)
#define P4PU (*(unsigned char volatile xdata *)0xfe14)
#define P5PU (*(unsigned char volatile xdata *)0xfe15)
#define P6PU (*(unsigned char volatile xdata *)0xfe16)
#define P7PU (*(unsigned char volatile xdata *)0xfe17)
#define P0NCS (*(unsigned char volatile xdata *)0xfe18)
#define P1NCS (*(unsigned char volatile xdata *)0xfe19)
#define P2NCS (*(unsigned char volatile xdata *)0xfe1a)
#define P3NCS (*(unsigned char volatile xdata *)0xfe1b)
#define P4NCS (*(unsigned char volatile xdata *)0xfe1c)
#define P5NCS (*(unsigned char volatile xdata *)0xfe1d)
#define P6NCS (*(unsigned char volatile xdata *)0xfe1e)
#define P7NCS (*(unsigned char volatile xdata *)0xfe1f)
//系统管理特殊功能寄存器
sfr PCON = 0x87;
#define SMOD 0x80
#define SMOD0 0x40
#define LVDF 0x20
#define POF 0x10
#define GF1 0x08
#define GF0 0x04
#define PD 0x02
#define IDL 0x01
sfr AUXR = 0x8e;
#define T0x12 0x80
#define T1x12 0x40
#define UART_M0x6 0x20
#define T2R 0x10
#define T2_CT 0x08
#define T2x12 0x04
#define EXTRAM 0x02
#define S1ST2 0x01
sfr AUXR2 = 0x97;
#define TXLNRX 0x10
sfr BUS_SPEED = 0xa1;
sfr P_SW1 = 0xa2;
sfr P_SW2 = 0xba;
#define EAXFR 0x80
sfr VOCTRL = 0xbb;
sfr RSTCFG = 0xff;
//如下特殊功能寄存器位于扩展RAM区域
//访问这些寄存器,需先将P_SW2的BIT7设置为1,才可正常读写
#define CKSEL (*(unsigned char volatile xdata *)0xfe00)
#define CLKDIV (*(unsigned char volatile xdata *)0xfe01)
#define IRC24MCR (*(unsigned char volatile xdata *)0xfe02)
#define XOSCCR (*(unsigned char volatile xdata *)0xfe03)
#define IRC32KCR (*(unsigned char volatile xdata *)0xfe04)
//中断特殊功能寄存器
sfr IE = 0xa8;
sbit EA = IE^7;
sbit ELVD = IE^6;
sbit EADC = IE^5;
sbit ES = IE^4;
sbit ET1 = IE^3;
sbit EX1 = IE^2;
sbit ET0 = IE^1;
sbit EX0 = IE^0;
sfr IE2 = 0xaf;
#define ET4 0x40
#define ET3 0x20
#define ES4 0x10
#define ES3 0x08
#define ET2 0x04
#define ESPI 0x02
#define ES2 0x01
sfr IP = 0xb8;
sbit PPCA = IP^7;
sbit PLVD = IP^6;
sbit PADC = IP^5;
sbit PS = IP^4;
sbit PT1 = IP^3;
sbit PX1 = IP^2;
sbit PT0 = IP^1;
sbit PX0 = IP^0;
sfr IP2 = 0xb5;
#define PI2C 0x40
#define PCMP 0x20
#define PX4 0x10
#define PPWMFD 0x08
#define PPWM 0x04
#define PSPI 0x02
#define PS2 0x01
sfr IPH = 0xb7;
#define PPCAH 0x80
#define PLVDH 0x40
#define PADCH 0x20
#define PSH 0x10
#define PT1H 0x08
#define PX1H 0x04
#define PT0H 0x02
#define PX0H 0x01
sfr IP2H = 0xb6;
#define PI2CH 0x40
#define PCMPH 0x20
#define PX4H 0x10
#define PPWMFDH 0x08
#define PPWMH 0x04
#define PSPIH 0x02
#define PS2H 0x01
sfr INTCLKO = 0x8f;
#define EX4 0x40
#define EX3 0x20
#define EX2 0x10
#define T2CLKO 0x04
#define T1CLKO 0x02
#define T0CLKO 0x01
sfr AUXINTIF = 0xef;
#define INT4IF 0x40
#define INT3IF 0x20
#define INT2IF 0x10
#define T4IF 0x04
#define T3IF 0x02
#define T2IF 0x01
//定时器特殊功能寄存器
sfr TCON = 0x88;
sbit TF1 = TCON^7;
sbit TR1 = TCON^6;
sbit TF0 = TCON^5;
sbit TR0 = TCON^4;
sbit IE1 = TCON^3;
sbit IT1 = TCON^2;
sbit IE0 = TCON^1;
sbit IT0 = TCON^0;
sfr TMOD = 0x89;
#define T1_GATE 0x80
#define T1_CT 0x40
#define T1_M1 0x20
#define T1_M0 0x10
#define T0_GATE 0x08
#define T0_CT 0x04
#define T0_M1 0x02
#define T0_M0 0x01
sfr TL0 = 0x8a;
sfr TL1 = 0x8b;
sfr TH0 = 0x8c;
sfr TH1 = 0x8d;
sfr T4T3M = 0xd1;
#define T4R 0x80
#define T4_CT 0x40
#define T4x12 0x20
#define T4CLKO 0x10
#define T3R 0x08
#define T3_CT 0x04
#define T3x12 0x02
#define T3CLKO 0x01
sfr T4H = 0xd2;
sfr T4L = 0xd3;
sfr T3H = 0xd4;
sfr T3L = 0xd5;
sfr T2H = 0xd6;
sfr T2L = 0xd7;
sfr TH4 = 0xd2;
sfr TL4 = 0xd3;
sfr TH3 = 0xd4;
sfr TL3 = 0xd5;
sfr TH2 = 0xd6;
sfr TL2 = 0xd7;
sfr WKTCL = 0xaa;
sfr WKTCH = 0xab;
#define WKTEN 0x80
sfr WDT_CONTR = 0xc1;
#define WDT_FLAG 0x80
#define EN_WDT 0x20
#define CLR_WDT 0x10
#define IDL_WDT 0x08
//串行口特殊功能寄存器
sfr SCON = 0x98;
sbit SM0 = SCON^7;
sbit SM1 = SCON^6;
sbit SM2 = SCON^5;
sbit REN = SCON^4;
sbit TB8 = SCON^3;
sbit RB8 = SCON^2;
sbit TI = SCON^1;
sbit RI = SCON^0;
sfr SBUF = 0x99;
sfr S2CON = 0x9a;
#define S2SM0 0x80
#define S2ST4 0x40
#define S2SM2 0x20
#define S2REN 0x10
#define S2TB8 0x08
#define S2RB8 0x04
#define S2TI 0x02
#define S2RI 0x01
sfr S2BUF = 0x9b;
sfr S3CON = 0xac;
#define S3SM0 0x80
#define S3ST4 0x40
#define S3SM2 0x20
#define S3REN 0x10
#define S3TB8 0x08
#define S3RB8 0x04
#define S3TI 0x02
#define S3RI 0x01
sfr S3BUF = 0xad;
sfr S4CON = 0x84;
#define S4SM0 0x80
#define S4ST4 0x40
#define S4SM2 0x20
#define S4REN 0x10
#define S4TB8 0x08
#define S4RB8 0x04
#define S4TI 0x02
#define S4RI 0x01
sfr S4BUF = 0x85;
sfr SADDR = 0xa9;
sfr SADEN = 0xb9;
//ADC 特殊功能寄存器
sfr ADC_CONTR = 0xbc;
#define ADC_POWER 0x80
#define ADC_START 0x40
#define ADC_FLAG 0x20
sfr ADC_RES = 0xbd;
sfr ADC_RESL = 0xbe;
sfr ADCCFG = 0xde;
#define ADC_RESFMT 0x20
//SPI 特殊功能寄存器
sfr SPSTAT = 0xcd;
#define SPIF 0x80
#define WCOL 0x40
sfr SPCTL = 0xce;
#define SSIG 0x80
#define SPEN 0x40
#define DORD 0x20
#define MSTR 0x10
#define CPOL 0x08
#define CPHA 0x04
sfr SPDAT = 0xcf;
//IAP/ISP 特殊功能寄存器
sfr IAP_DATA = 0xc2;
sfr IAP_ADDRH = 0xc3;
sfr IAP_ADDRL = 0xc4;
sfr IAP_CMD = 0xc5;
#define IAP_IDL 0x00
#define IAP_READ 0x01
#define IAP_WRITE 0x02
#define IAP_ERASE 0x03
sfr IAP_TRIG = 0xc6;
sfr IAP_CONTR = 0xc7;
#define IAPEN 0x80
#define SWBS 0x40
#define SWRST 0x20
#define CMD_FAIL 0x10
sfr ISP_DATA = 0xc2;
sfr ISP_ADDRH = 0xc3;
sfr ISP_ADDRL = 0xc4;
sfr ISP_CMD = 0xc5;
sfr ISP_TRIG = 0xc6;
sfr ISP_CONTR = 0xc7;
//比较器特殊功能寄存器
sfr CMPCR1 = 0xe6;
#define CMPEN 0x80
#define CMPIF 0x40
#define PIE 0x20
#define NIE 0x10
#define PIS 0x08
#define NIS 0x04
#define CMPOE 0x02
#define CMPRES 0x01
sfr CMPCR2 = 0xe7;
#define INVCMPO 0x80
#define DISFLT 0x40
//PCA/PWM 特殊功能寄存器
sfr CCON = 0xd8;
sbit CF = CCON^7;
sbit CR = CCON^6;
sbit CCF3 = CCON^3;
sbit CCF2 = CCON^2;
sbit CCF1 = CCON^1;
sbit CCF0 = CCON^0;
sfr CMOD = 0xd9;
#define CIDL 0x80
#define ECF 0x01
sfr CL = 0xe9;
sfr CH = 0xf9;
sfr CCAPM0 = 0xda;
#define ECOM0 0x40
#define CCAPP0 0x20
#define CCAPN0 0x10
#define MAT0 0x08
#define TOG0 0x04
#define PWM0 0x02
#define ECCF0 0x01
sfr CCAPM1 = 0xdb;
#define ECOM1 0x40
#define CCAPP1 0x20
#define CCAPN1 0x10
#define MAT1 0x08
#define TOG1 0x04
#define PWM1 0x02
#define ECCF1 0x01
sfr CCAPM2 = 0xdc;
#define ECOM2 0x40
#define CCAPP2 0x20
#define CCAPN2 0x10
#define MAT2 0x08
#define TOG2 0x04
#define PWM2 0x02
#define ECCF2 0x01
sfr CCAPM3 = 0xdd;
#define ECOM3 0x40
#define CCAPP3 0x20
#define CCAPN3 0x10
#define MAT3 0x08
#define TOG3 0x04
#define PWM3 0x02
#define ECCF3 0x01
sfr CCAP0L = 0xea;
sfr CCAP1L = 0xeb;
sfr CCAP2L = 0xec;
sfr CCAP3L = 0xed;
sfr CCAP0H = 0xfa;
sfr CCAP1H = 0xfb;
sfr CCAP2H = 0xfc;
sfr CCAP3H = 0xfd;
sfr PCA_PWM0 = 0xf2;
sfr PCA_PWM1 = 0xf3;
sfr PCA_PWM2 = 0xf4;
sfr PCA_PWM3 = 0xf5;
//增强型PWM波形发生器特殊功能寄存器
sfr PWMCFG = 0xf1;
#define CBIF 0x80
#define ETADC 0x40
sfr PWMIF = 0xf6;
#define C7IF 0x80
#define C6IF 0x40
#define C5IF 0x20
#define C4IF 0x10
#define C3IF 0x08
#define C2IF 0x04
#define C1IF 0x02
#define C0IF 0x01
sfr PWMFDCR = 0xf7;
#define INVCMP 0x80
#define INVIO 0x40
#define ENFD 0x20
#define FLTFLIO 0x10
#define EFDI 0x08
#define FDCMP 0x04
#define FDIO 0x02
#define FDIF 0x01
sfr PWMCR = 0xfe;
#define ENPWM 0x80
#define ECBI 0x40
//如下特殊功能寄存器位于扩展RAM区域
//访问这些寄存器,需先将P_SW2的BIT7设置为1,才可正常读写
#define PWMC (*(unsigned int volatile xdata *)0xfff0)
#define PWMCH (*(unsigned char volatile xdata *)0xfff0)
#define PWMCL (*(unsigned char volatile xdata *)0xfff1)
#define PWMCKS (*(unsigned char volatile xdata *)0xfff2)
#define TADCP (*(unsigned char volatile xdata *)0xfff3)
#define TADCPH (*(unsigned char volatile xdata *)0xfff3)
#define TADCPL (*(unsigned char volatile xdata *)0xfff4)
#define PWM0T1 (*(unsigned int volatile xdata *)0xff00)
#define PWM0T1H (*(unsigned char volatile xdata *)0xff00)
#define PWM0T1L (*(unsigned char volatile xdata *)0xff01)
#define PWM0T2 (*(unsigned int volatile xdata *)0xff02)
#define PWM0T2H (*(unsigned char volatile xdata *)0xff02)
#define PWM0T2L (*(unsigned char volatile xdata *)0xff03)
#define PWM0CR (*(unsigned char volatile xdata *)0xff04)
#define PWM0HLD (*(unsigned char volatile xdata *)0xff05)
#define PWM1T1 (*(unsigned int volatile xdata *)0xff10)
#define PWM1T1H (*(unsigned char volatile xdata *)0xff10)
#define PWM1T1L (*(unsigned char volatile xdata *)0xff11)
#define PWM1T2 (*(unsigned int volatile xdata *)0xff12)
#define PWM1T2H (*(unsigned char volatile xdata *)0xff12)
#define PWM1T2L (*(unsigned char volatile xdata *)0xff13)
#define PWM1CR (*(unsigned char volatile xdata *)0xff14)
#define PWM1HLD (*(unsigned char volatile xdata *)0xff15)
#define PWM2T1 (*(unsigned int volatile xdata *)0xff20)
#define PWM2T1H (*(unsigned char volatile xdata *)0xff20)
#define PWM2T1L (*(unsigned char volatile xdata *)0xff21)
#define PWM2T2 (*(unsigned int volatile xdata *)0xff22)
#define PWM2T2H (*(unsigned char volatile xdata *)0xff22)
#define PWM2T2L (*(unsigned char volatile xdata *)0xff23)
#define PWM2CR (*(unsigned char volatile xdata *)0xff24)
#define PWM2HLD (*(unsigned char volatile xdata *)0xff25)
#define PWM3T1 (*(unsigned int volatile xdata *)0xff30)
#define PWM3T1H (*(unsigned char volatile xdata *)0xff30)
#define PWM3T1L (*(unsigned char volatile xdata *)0xff31)
#define PWM3T2 (*(unsigned int volatile xdata *)0xff32)
#define PWM3T2H (*(unsigned char volatile xdata *)0xff32)
#define PWM3T2L (*(unsigned char volatile xdata *)0xff33)
#define PWM3CR (*(unsigned char volatile xdata *)0xff34)
#define PWM3HLD (*(unsigned char volatile xdata *)0xff35)
#define PWM4T1 (*(unsigned int volatile xdata *)0xff40)
#define PWM4T1H (*(unsigned char volatile xdata *)0xff40)
#define PWM4T1L (*(unsigned char volatile xdata *)0xff41)
#define PWM4T2 (*(unsigned int volatile xdata *)0xff42)
#define PWM4T2H (*(unsigned char volatile xdata *)0xff42)
#define PWM4T2L (*(unsigned char volatile xdata *)0xff43)
#define PWM4CR (*(unsigned char volatile xdata *)0xff44)
#define PWM4HLD (*(unsigned char volatile xdata *)0xff45)
#define PWM5T1 (*(unsigned int volatile xdata *)0xff50)
#define PWM5T1H (*(unsigned char volatile xdata *)0xff50)
#define PWM5T1L (*(unsigned char volatile xdata *)0xff51)
#define PWM5T2 (*(unsigned int volatile xdata *)0xff52)
#define PWM5T2H (*(unsigned char volatile xdata *)0xff52)
#define PWM5T2L (*(unsigned char volatile xdata *)0xff53)
#define PWM5CR (*(unsigned char volatile xdata *)0xff54)
#define PWM5HLD (*(unsigned char volatile xdata *)0xff55)
#define PWM6T1 (*(unsigned int volatile xdata *)0xff60)
#define PWM6T1H (*(unsigned char volatile xdata *)0xff60)
#define PWM6T1L (*(unsigned char volatile xdata *)0xff61)
#define PWM6T2 (*(unsigned int volatile xdata *)0xff62)
#define PWM6T2H (*(unsigned char volatile xdata *)0xff62)
#define PWM6T2L (*(unsigned char volatile xdata *)0xff63)
#define PWM6CR (*(unsigned char volatile xdata *)0xff64)
#define PWM6HLD (*(unsigned char volatile xdata *)0xff65)
#define PWM7T1 (*(unsigned int volatile xdata *)0xff70)
#define PWM7T1H (*(unsigned char volatile xdata *)0xff70)
#define PWM7T1L (*(unsigned char volatile xdata *)0xff71)
#define PWM7T2 (*(unsigned int volatile xdata *)0xff72)
#define PWM7T2H (*(unsigned char volatile xdata *)0xff72)
#define PWM7T2L (*(unsigned char volatile xdata *)0xff73)
#define PWM7CR (*(unsigned char volatile xdata *)0xff74)
#define PWM7HLD (*(unsigned char volatile xdata *)0xff75)
//I2C特殊功能寄存器
//如下特殊功能寄存器位于扩展RAM区域
//访问这些寄存器,需先将P_SW2的BIT7设置为1,才可正常读写
#define I2CCFG (*(unsigned char volatile xdata *)0xfe80)
#define ENI2C 0x80
#define MSSL 0x40
#define I2CMSCR (*(unsigned char volatile xdata *)0xfe81)
#define EMSI 0x80
#define I2CMSST (*(unsigned char volatile xdata *)0xfe82)
#define MSBUSY 0x80
#define MSIF 0x40
#define MSACKI 0x02
#define MSACKO 0x01
#define I2CSLCR (*(unsigned char volatile xdata *)0xfe83)
#define ESTAI 0x40
#define ERXI 0x20
#define ETXI 0x10
#define ESTOI 0x08
#define SLRST 0x01
#define I2CSLST (*(unsigned char volatile xdata *)0xfe84)
#define SLBUSY 0x80
#define STAIF 0x40
#define RXIF 0x20
#define TXIF 0x10
#define STOIF 0x08
#define TXING 0x04
#define SLACKI 0x02
#define SLACKO 0x01
#define I2CSLADR (*(unsigned char volatile xdata *)0xfe85)
#define I2CTXD (*(unsigned char volatile xdata *)0xfe86)
#define I2CRXD (*(unsigned char volatile xdata *)0xfe87)
/////////////////////////////////////////////////
#endif

746
source/cpu/stc_stc8g1k.h

@ -0,0 +1,746 @@
#ifndef __STC8G_H_
#define __STC8G_H_
// STC_stc8a8k.h
#include<intrins.h>
/////////////////////////////////////////////////
//注意: STC15W4K32S4系列的芯片,上电后所有与PWM相关的IO口均为
// 高阻态,需将这些口设置为准双向口或强推挽模式方可正常使用
//相关IO: P0.6/P0.7/P1.6/P1.7/P2.1/P2.2
// P2.3/P2.7/P3.7/P4.2/P4.4/P4.5
/////////////////////////////////////////////////
/////////////////////////////////////////////////
//包含本头文件后,不用另外再包含"REG51.H"
/////////////////////////////////////////////////
//包含本头文件后,不用另外再包含"REG51.H"
sfr P0 = 0x80;
sbit P00 = P0^0;
sbit P01 = P0^1;
sbit P02 = P0^2;
sbit P03 = P0^3;
sbit P04 = P0^4;
sbit P05 = P0^5;
sbit P06 = P0^6;
sbit P07 = P0^7;
sfr SP = 0x81;
sfr DPL = 0x82;
sfr DPH = 0x83;
sfr S4CON = 0x84;
sfr S4BUF = 0x85;
sfr PCON = 0x87;
sfr TCON = 0x88;
sbit TF1 = TCON^7;
sbit TR1 = TCON^6;
sbit TF0 = TCON^5;
sbit TR0 = TCON^4;
sbit IE1 = TCON^3;
sbit IT1 = TCON^2;
sbit IE0 = TCON^1;
sbit IT0 = TCON^0;
sfr TMOD = 0x89;
sfr TL0 = 0x8A;
sfr TL1 = 0x8B;
sfr TH0 = 0x8C;
sfr TH1 = 0x8D;
sfr AUXR = 0x8E;
sfr INTCLKO = 0x8F;
sfr P1 = 0x90;
sbit P10 = P1^0;
sbit P11 = P1^1;
sbit P12 = P1^2;
sbit P13 = P1^3;
sbit P14 = P1^4;
sbit P15 = P1^5;
sbit P16 = P1^6;
sbit P17 = P1^7;
sfr P1M1 = 0x91;
sfr P1M0 = 0x92;
sfr P0M1 = 0x93;
sfr P0M0 = 0x94;
sfr P2M1 = 0x95;
sfr P2M0 = 0x96;
sfr SCON = 0x98;
sbit SM0 = SCON^7;
sbit SM1 = SCON^6;
sbit SM2 = SCON^5;
sbit REN = SCON^4;
sbit TB8 = SCON^3;
sbit RB8 = SCON^2;
sbit TI = SCON^1;
sbit RI = SCON^0;
sfr SBUF = 0x99;
sfr S2CON = 0x9A;
sfr S2BUF = 0x9B;
sfr IRCBAND = 0x9D;
sfr LIRTRIM = 0x9E;
sfr IRTRIM = 0x9F;
sfr P2 = 0xA0;
sbit P20 = P2^0;
sbit P21 = P2^1;
sbit P22 = P2^2;
sbit P23 = P2^3;
sbit P24 = P2^4;
sbit P25 = P2^5;
sbit P26 = P2^6;
sbit P27 = P2^7;
sfr P_SW1 = 0xA2;
sfr IE = 0xA8;
sbit EA = IE^7;
sbit ELVD = IE^6;
sbit EADC = IE^5;
sbit ES = IE^4;
sbit ET1 = IE^3;
sbit EX1 = IE^2;
sbit ET0 = IE^1;
sbit EX0 = IE^0;
sfr SADDR = 0xA9;
sfr WKTCL = 0xAA;
sfr WKTCH = 0xAB;
sfr S3CON = 0xAC;
sfr S3BUF = 0xAD;
sfr TA = 0xAE;
sfr IE2 = 0xAF;
sfr P3 = 0xB0;
sbit P30 = P3^0;
sbit P31 = P3^1;
sbit P32 = P3^2;
sbit P33 = P3^3;
sbit P34 = P3^4;
sbit P35 = P3^5;
sbit P36 = P3^6;
sbit P37 = P3^7;
sfr P3M1 = 0xB1;
sfr P3M0 = 0xB2;
sfr P4M1 = 0xB3;
sfr P4M0 = 0xB4;
sfr IP2 = 0xB5;
sfr IP2H = 0xB6;
sfr IPH = 0xB7;
sfr IP = 0xB8;
sbit PPCA = IP^7;
sbit PLVD = IP^6;
sbit PADC = IP^5;
sbit PS = IP^4;
sbit PT1 = IP^3;
sbit PX1 = IP^2;
sbit PT0 = IP^1;
sbit PX0 = IP^0;
sfr SADEN = 0xB9;
sfr P_SW2 = 0xBA;
sfr ADC_CONTR = 0xBC;
sfr ADC_RES = 0xBD;
sfr ADC_RESL = 0xBE;
sfr P4 = 0xC0;
sbit P40 = P4^0;
sbit P41 = P4^1;
sbit P42 = P4^2;
sbit P43 = P4^3;
sbit P44 = P4^4;
sbit P45 = P4^5;
sbit P46 = P4^6;
sbit P47 = P4^7;
sfr WDT_CONTR = 0xC1;
sfr IAP_DATA = 0xC2;
sfr IAP_ADDRH = 0xC3;
sfr IAP_ADDRL = 0xC4;
sfr IAP_CMD = 0xC5;
sfr IAP_TRIG = 0xC6;
sfr IAP_CONTR = 0xC7;
sfr P5 = 0xC8;
sbit P50 = P5^0;
sbit P51 = P5^1;
sbit P52 = P5^2;
sbit P53 = P5^3;
sbit P54 = P5^4;
sbit P55 = P5^5;
sbit P56 = P5^6;
sbit P57 = P5^7;
sfr P5M1 = 0xC9;
sfr P5M0 = 0xCA;
sfr SPSTAT = 0xCD;
sfr SPCTL = 0xCE;
sfr SPDAT = 0xCF;
sfr PSW = 0xD0;
sbit CY = PSW^7;
sbit AC = PSW^6;
sbit F0 = PSW^5;
sbit RS1 = PSW^4;
sbit RS0 = PSW^3;
sbit OV = PSW^2;
sbit P = PSW^0;
sfr T4T3M = 0xD1;
sfr T4H = 0xD2;
sfr T4L = 0xD3;
sfr T3H = 0xD4;
sfr T3L = 0xD5;
sfr T2H = 0xD6;
sfr T2L = 0xD7;
sfr CCON = 0xD8;
sbit CF = CCON^7;
sbit CR = CCON^6;
sbit CCF2 = CCON^2;
sbit CCF1 = CCON^1;
sbit CCF0 = CCON^0;
sfr CMOD = 0xD9;
sfr CCAPM0 = 0xDA;
sfr CCAPM1 = 0xDB;
sfr CCAPM2 = 0xDC;
sfr ADCCFG = 0xDE;
sfr IP3 = 0xDF;
sfr ACC = 0xE0;
sfr DPS = 0xE3;
sfr DPL1 = 0xE4;
sfr DPH1 = 0xE5;
sfr CMPCR1 = 0xE6;
sfr CMPCR2 = 0xE7;
sfr CL = 0xE9;
sfr CCAP0L = 0xEA;
sfr CCAP1L = 0xEB;
sfr CCAP2L = 0xEC;
sfr IP3H = 0xEE;
sfr AUXINTIF = 0xEF;
sfr B = 0xF0;
sfr PWMSET = 0xF1;
sfr PCA_PWM0 = 0xF2;
sfr PCA_PWM1 = 0xF3;
sfr PCA_PWM2 = 0xF4;
sfr IAP_TPS = 0xF5;
sfr PWMCFG01 = 0xF6;
sfr PWMCFG23 = 0xF7;
sfr CH = 0xF9;
sfr CCAP0H = 0xFA;
sfr CCAP1H = 0xFB;
sfr CCAP2H = 0xFC;
sfr PWMCFG45 = 0xFE;
sfr RSTCFG = 0xFF;
//如下特殊功能寄存器位于扩展RAM区域
//访问这些寄存器,需先将P_SW2的BIT7设置为1,才可正常读写
#define CKSEL (*(unsigned char volatile xdata *)0xFE00)
#define CLKDIV (*(unsigned char volatile xdata *)0xFE01)
#define HIRCCR (*(unsigned char volatile xdata *)0xFE02)
#define XOSCCR (*(unsigned char volatile xdata *)0xFE03)
#define IRC32KCR (*(unsigned char volatile xdata *)0xFE04)
#define MCLKOCR (*(unsigned char volatile xdata *)0xFE05)
#define IRCDB (*(unsigned char volatile xdata *)0xFE06)
#define P0PU (*(unsigned char volatile xdata *)0xFE10)
#define P1PU (*(unsigned char volatile xdata *)0xFE11)
#define P2PU (*(unsigned char volatile xdata *)0xFE12)
#define P3PU (*(unsigned char volatile xdata *)0xFE13)
#define P4PU (*(unsigned char volatile xdata *)0xFE14)
#define P5PU (*(unsigned char volatile xdata *)0xFE15)
#define P0NCS (*(unsigned char volatile xdata *)0xFE18)
#define P1NCS (*(unsigned char volatile xdata *)0xFE19)
#define P2NCS (*(unsigned char volatile xdata *)0xFE1A)
#define P3NCS (*(unsigned char volatile xdata *)0xFE1B)
#define P4NCS (*(unsigned char volatile xdata *)0xFE1C)
#define P5NCS (*(unsigned char volatile xdata *)0xFE1D)
#define P0SR (*(unsigned char volatile xdata *)0xFE20)
#define P1SR (*(unsigned char volatile xdata *)0xFE21)
#define P2SR (*(unsigned char volatile xdata *)0xFE22)
#define P3SR (*(unsigned char volatile xdata *)0xFE23)
#define P4SR (*(unsigned char volatile xdata *)0xFE24)
#define P5SR (*(unsigned char volatile xdata *)0xFE25)
#define P0DR (*(unsigned char volatile xdata *)0xFE28)
#define P1DR (*(unsigned char volatile xdata *)0xFE29)
#define P2DR (*(unsigned char volatile xdata *)0xFE2A)
#define P3DR (*(unsigned char volatile xdata *)0xFE2B)
#define P4DR (*(unsigned char volatile xdata *)0xFE2C)
#define P5DR (*(unsigned char volatile xdata *)0xFE2D)
#define P0IE (*(unsigned char volatile xdata *)0xFE30)
#define P1IE (*(unsigned char volatile xdata *)0xFE31)
#define P3IE (*(unsigned char volatile xdata *)0xFE33)
#define I2CCFG (*(unsigned char volatile xdata *)0xFE80)
#define I2CMSCR (*(unsigned char volatile xdata *)0xFE81)
#define I2CMSST (*(unsigned char volatile xdata *)0xFE82)
#define I2CSLCR (*(unsigned char volatile xdata *)0xFE83)
#define I2CSLST (*(unsigned char volatile xdata *)0xFE84)
#define I2CSLADR (*(unsigned char volatile xdata *)0xFE85)
#define I2CTXD (*(unsigned char volatile xdata *)0xFE86)
#define I2CRXD (*(unsigned char volatile xdata *)0xFE87)
#define I2CMSAUX (*(unsigned char volatile xdata *)0xFE88)
#define TM2PS (*(unsigned char volatile xdata *)0xFEA2)
#define TM3PS (*(unsigned char volatile xdata *)0xFEA3)
#define TM4PS (*(unsigned char volatile xdata *)0xFEA4)
#define ADCTIM (*(unsigned char volatile xdata *)0xFEA8)
#define PWM0CH (*(unsigned char volatile xdata *)0xFF00)
#define PWM0CL (*(unsigned char volatile xdata *)0xFF01)
#define PWM0CKS (*(unsigned char volatile xdata *)0xFF02)
#define PWM0TADCH (*(unsigned char volatile xdata *)0xFF03)
#define PWM0TADCL (*(unsigned char volatile xdata *)0xFF04)
#define PWM0IF (*(unsigned char volatile xdata *)0xFF05)
#define PWM0FDCR (*(unsigned char volatile xdata *)0xFF06)
#define PWM00T1H (*(unsigned char volatile xdata *)0xFF10)
#define PWM00T1L (*(unsigned char volatile xdata *)0xFF11)
#define PWM00T2H (*(unsigned char volatile xdata *)0xFF12)
#define PWM00T2L (*(unsigned char volatile xdata *)0xFF13)
#define PWM00CR (*(unsigned char volatile xdata *)0xFF14)
#define PWM00HLD (*(unsigned char volatile xdata *)0xFF15)
#define PWM01T1H (*(unsigned char volatile xdata *)0xFF18)
#define PWM01T1L (*(unsigned char volatile xdata *)0xFF19)
#define PWM01T2H (*(unsigned char volatile xdata *)0xFF1A)
#define PWM01T2L (*(unsigned char volatile xdata *)0xFF1B)
#define PWM01CR (*(unsigned char volatile xdata *)0xFF1C)
#define PWM01HLD (*(unsigned char volatile xdata *)0xFF1D)
#define PWM02T1H (*(unsigned char volatile xdata *)0xFF20)
#define PWM02T1L (*(unsigned char volatile xdata *)0xFF21)
#define PWM02T2H (*(unsigned char volatile xdata *)0xFF22)
#define PWM02T2L (*(unsigned char volatile xdata *)0xFF23)
#define PWM02CR (*(unsigned char volatile xdata *)0xFF24)
#define PWM02HLD (*(unsigned char volatile xdata *)0xFF25)
#define PWM03T1H (*(unsigned char volatile xdata *)0xFF28)
#define PWM03T1L (*(unsigned char volatile xdata *)0xFF29)
#define PWM03T2H (*(unsigned char volatile xdata *)0xFF2A)
#define PWM03T2L (*(unsigned char volatile xdata *)0xFF2B)
#define PWM03CR (*(unsigned char volatile xdata *)0xFF2C)
#define PWM03HLD (*(unsigned char volatile xdata *)0xFF2D)
#define PWM04T1H (*(unsigned char volatile xdata *)0xFF30)
#define PWM04T1L (*(unsigned char volatile xdata *)0xFF31)
#define PWM04T2H (*(unsigned char volatile xdata *)0xFF32)
#define PWM04T2L (*(unsigned char volatile xdata *)0xFF33)
#define PWM04CR (*(unsigned char volatile xdata *)0xFF34)
#define PWM04HLD (*(unsigned char volatile xdata *)0xFF35)
#define PWM05T1H (*(unsigned char volatile xdata *)0xFF38)
#define PWM05T1L (*(unsigned char volatile xdata *)0xFF39)
#define PWM05T2H (*(unsigned char volatile xdata *)0xFF3A)
#define PWM05T2L (*(unsigned char volatile xdata *)0xFF3B)
#define PWM05CR (*(unsigned char volatile xdata *)0xFF3C)
#define PWM05HLD (*(unsigned char volatile xdata *)0xFF3D)
#define PWM06T1H (*(unsigned char volatile xdata *)0xFF40)
#define PWM06T1L (*(unsigned char volatile xdata *)0xFF41)
#define PWM06T2H (*(unsigned char volatile xdata *)0xFF42)
#define PWM06T2L (*(unsigned char volatile xdata *)0xFF43)
#define PWM06CR (*(unsigned char volatile xdata *)0xFF44)
#define PWM06HLD (*(unsigned char volatile xdata *)0xFF45)
#define PWM07T1H (*(unsigned char volatile xdata *)0xFF48)
#define PWM07T1L (*(unsigned char volatile xdata *)0xFF49)
#define PWM07T2H (*(unsigned char volatile xdata *)0xFF4A)
#define PWM07T2L (*(unsigned char volatile xdata *)0xFF4B)
#define PWM07CR (*(unsigned char volatile xdata *)0xFF4C)
#define PWM07HLD (*(unsigned char volatile xdata *)0xFF4D)
#define PWM1CH (*(unsigned char volatile xdata *)0xFF50)
#define PWM1CL (*(unsigned char volatile xdata *)0xFF51)
#define PWM1CKS (*(unsigned char volatile xdata *)0xFF52)
#define PWM1IF (*(unsigned char volatile xdata *)0xFF55)
#define PWM1FDCR (*(unsigned char volatile xdata *)0xFF56)
#define PWM10T1H (*(unsigned char volatile xdata *)0xFF60)
#define PWM10T1L (*(unsigned char volatile xdata *)0xFF61)
#define PWM10T2H (*(unsigned char volatile xdata *)0xFF62)
#define PWM10T2L (*(unsigned char volatile xdata *)0xFF63)
#define PWM10CR (*(unsigned char volatile xdata *)0xFF64)
#define PWM10HLD (*(unsigned char volatile xdata *)0xFF65)
#define PWM11T1H (*(unsigned char volatile xdata *)0xFF68)
#define PWM11T1L (*(unsigned char volatile xdata *)0xFF69)
#define PWM11T2H (*(unsigned char volatile xdata *)0xFF6A)
#define PWM11T2L (*(unsigned char volatile xdata *)0xFF6B)
#define PWM11CR (*(unsigned char volatile xdata *)0xFF6C)
#define PWM11HLD (*(unsigned char volatile xdata *)0xFF6D)
#define PWM12T1H (*(unsigned char volatile xdata *)0xFF70)
#define PWM12T1L (*(unsigned char volatile xdata *)0xFF71)
#define PWM12T2H (*(unsigned char volatile xdata *)0xFF72)
#define PWM12T2L (*(unsigned char volatile xdata *)0xFF73)
#define PWM12CR (*(unsigned char volatile xdata *)0xFF74)
#define PWM12HLD (*(unsigned char volatile xdata *)0xFF75)
#define PWM13T1H (*(unsigned char volatile xdata *)0xFF78)
#define PWM13T1L (*(unsigned char volatile xdata *)0xFF79)
#define PWM13T2H (*(unsigned char volatile xdata *)0xFF7A)
#define PWM13T2L (*(unsigned char volatile xdata *)0xFF7B)
#define PWM13CR (*(unsigned char volatile xdata *)0xFF7C)
#define PWM13HLD (*(unsigned char volatile xdata *)0xFF7D)
#define PWM14T1H (*(unsigned char volatile xdata *)0xFF80)
#define PWM14T1L (*(unsigned char volatile xdata *)0xFF81)
#define PWM14T2H (*(unsigned char volatile xdata *)0xFF82)
#define PWM14T2L (*(unsigned char volatile xdata *)0xFF83)
#define PWM14CR (*(unsigned char volatile xdata *)0xFF84)
#define PWM14HLD (*(unsigned char volatile xdata *)0xFF85)
#define PWM15T1H (*(unsigned char volatile xdata *)0xFF88)
#define PWM15T1L (*(unsigned char volatile xdata *)0xFF89)
#define PWM15T2H (*(unsigned char volatile xdata *)0xFF8A)
#define PWM15T2L (*(unsigned char volatile xdata *)0xFF8B)
#define PWM15CR (*(unsigned char volatile xdata *)0xFF8C)
#define PWM15HLD (*(unsigned char volatile xdata *)0xFF8D)
#define PWM16T1H (*(unsigned char volatile xdata *)0xFF90)
#define PWM16T1L (*(unsigned char volatile xdata *)0xFF91)
#define PWM16T2H (*(unsigned char volatile xdata *)0xFF92)
#define PWM16T2L (*(unsigned char volatile xdata *)0xFF93)
#define PWM16CR (*(unsigned char volatile xdata *)0xFF94)
#define PWM16HLD (*(unsigned char volatile xdata *)0xFF95)
#define PWM17T1H (*(unsigned char volatile xdata *)0xFF98)
#define PWM17T1L (*(unsigned char volatile xdata *)0xFF99)
#define PWM17T2H (*(unsigned char volatile xdata *)0xFF9A)
#define PWM17T2L (*(unsigned char volatile xdata *)0xFF9B)
#define PWM17CR (*(unsigned char volatile xdata *)0xFF9C)
#define PWM17HLD (*(unsigned char volatile xdata *)0xFF9D)
#define PWM2CH (*(unsigned char volatile xdata *)0xFFA0)
#define PWM2CL (*(unsigned char volatile xdata *)0xFFA1)
#define PWM2CKS (*(unsigned char volatile xdata *)0xFFA2)
#define PWM2TADCH (*(unsigned char volatile xdata *)0xFFA3)
#define PWM2TADCL (*(unsigned char volatile xdata *)0xFFA4)
#define PWM2IF (*(unsigned char volatile xdata *)0xFFA5)
#define PWM2FDCR (*(unsigned char volatile xdata *)0xFFA6)
#define PWM20T1H (*(unsigned char volatile xdata *)0xFFB0)
#define PWM20T1L (*(unsigned char volatile xdata *)0xFFB1)
#define PWM20T2H (*(unsigned char volatile xdata *)0xFFB2)
#define PWM20T2L (*(unsigned char volatile xdata *)0xFFB3)
#define PWM20CR (*(unsigned char volatile xdata *)0xFFB4)
#define PWM20HLD (*(unsigned char volatile xdata *)0xFFB5)
#define PWM21T1H (*(unsigned char volatile xdata *)0xFFB8)
#define PWM21T1L (*(unsigned char volatile xdata *)0xFFB9)
#define PWM21T2H (*(unsigned char volatile xdata *)0xFFBA)
#define PWM21T2L (*(unsigned char volatile xdata *)0xFFBB)
#define PWM21CR (*(unsigned char volatile xdata *)0xFFBC)
#define PWM21HLD (*(unsigned char volatile xdata *)0xFFBD)
#define PWM22T1H (*(unsigned char volatile xdata *)0xFFC0)
#define PWM22T1L (*(unsigned char volatile xdata *)0xFFC1)
#define PWM22T2H (*(unsigned char volatile xdata *)0xFFC2)
#define PWM22T2L (*(unsigned char volatile xdata *)0xFFC3)
#define PWM22CR (*(unsigned char volatile xdata *)0xFFC4)
#define PWM22HLD (*(unsigned char volatile xdata *)0xFFC5)
#define PWM23T1H (*(unsigned char volatile xdata *)0xFFC8)
#define PWM23T1L (*(unsigned char volatile xdata *)0xFFC9)
#define PWM23T2H (*(unsigned char volatile xdata *)0xFFCA)
#define PWM23T2L (*(unsigned char volatile xdata *)0xFFCB)
#define PWM23CR (*(unsigned char volatile xdata *)0xFFCC)
#define PWM23HLD (*(unsigned char volatile xdata *)0xFFCD)
#define PWM24T1H (*(unsigned char volatile xdata *)0xFFD0)
#define PWM24T1L (*(unsigned char volatile xdata *)0xFFD1)
#define PWM24T2H (*(unsigned char volatile xdata *)0xFFD2)
#define PWM24T2L (*(unsigned char volatile xdata *)0xFFD3)
#define PWM24CR (*(unsigned char volatile xdata *)0xFFD4)
#define PWM24HLD (*(unsigned char volatile xdata *)0xFFD5)
#define PWM25T1H (*(unsigned char volatile xdata *)0xFFD8)
#define PWM25T1L (*(unsigned char volatile xdata *)0xFFD9)
#define PWM25T2H (*(unsigned char volatile xdata *)0xFFDA)
#define PWM25T2L (*(unsigned char volatile xdata *)0xFFDB)
#define PWM25CR (*(unsigned char volatile xdata *)0xFFDC)
#define PWM25HLD (*(unsigned char volatile xdata *)0xFFDD)
#define PWM26T1H (*(unsigned char volatile xdata *)0xFFE0)
#define PWM26T1L (*(unsigned char volatile xdata *)0xFFE1)
#define PWM26T2H (*(unsigned char volatile xdata *)0xFFE2)
#define PWM26T2L (*(unsigned char volatile xdata *)0xFFE3)
#define PWM26CR (*(unsigned char volatile xdata *)0xFFE4)
#define PWM26HLD (*(unsigned char volatile xdata *)0xFFE5)
#define PWM27T1H (*(unsigned char volatile xdata *)0xFFE8)
#define PWM27T1L (*(unsigned char volatile xdata *)0xFFE9)
#define PWM27T2H (*(unsigned char volatile xdata *)0xFFEA)
#define PWM27T2L (*(unsigned char volatile xdata *)0xFFEB)
#define PWM27CR (*(unsigned char volatile xdata *)0xFFEC)
#define PWM27HLD (*(unsigned char volatile xdata *)0xFFED)
#define PWM3CH (*(unsigned char volatile xdata *)0xFC00)
#define PWM3CL (*(unsigned char volatile xdata *)0xFC01)
#define PWM3CKS (*(unsigned char volatile xdata *)0xFC02)
#define PWM3IF (*(unsigned char volatile xdata *)0xFC05)
#define PWM3FDCR (*(unsigned char volatile xdata *)0xFC06)
#define PWM30T1H (*(unsigned char volatile xdata *)0xFC10)
#define PWM30T1L (*(unsigned char volatile xdata *)0xFC11)
#define PWM30T2H (*(unsigned char volatile xdata *)0xFC12)
#define PWM30T2L (*(unsigned char volatile xdata *)0xFC13)
#define PWM30CR (*(unsigned char volatile xdata *)0xFC14)
#define PWM30HLD (*(unsigned char volatile xdata *)0xFC15)
#define PWM31T1H (*(unsigned char volatile xdata *)0xFC18)
#define PWM31T1L (*(unsigned char volatile xdata *)0xFC19)
#define PWM31T2H (*(unsigned char volatile xdata *)0xFC1A)
#define PWM31T2L (*(unsigned char volatile xdata *)0xFC1B)
#define PWM31CR (*(unsigned char volatile xdata *)0xFC1C)
#define PWM31HLD (*(unsigned char volatile xdata *)0xFC1D)
#define PWM32T1H (*(unsigned char volatile xdata *)0xFC20)
#define PWM32T1L (*(unsigned char volatile xdata *)0xFC21)
#define PWM32T2H (*(unsigned char volatile xdata *)0xFC22)
#define PWM32T2L (*(unsigned char volatile xdata *)0xFC23)
#define PWM32CR (*(unsigned char volatile xdata *)0xFC24)
#define PWM32HLD (*(unsigned char volatile xdata *)0xFC25)
#define PWM33T1H (*(unsigned char volatile xdata *)0xFC28)
#define PWM33T1L (*(unsigned char volatile xdata *)0xFC29)
#define PWM33T2H (*(unsigned char volatile xdata *)0xFC2A)
#define PWM33T2L (*(unsigned char volatile xdata *)0xFC2B)
#define PWM33CR (*(unsigned char volatile xdata *)0xFC2C)
#define PWM33HLD (*(unsigned char volatile xdata *)0xFC2D)
#define PWM34T1H (*(unsigned char volatile xdata *)0xFC30)
#define PWM34T1L (*(unsigned char volatile xdata *)0xFC31)
#define PWM34T2H (*(unsigned char volatile xdata *)0xFC32)
#define PWM34T2L (*(unsigned char volatile xdata *)0xFC33)
#define PWM34CR (*(unsigned char volatile xdata *)0xFC34)
#define PWM34HLD (*(unsigned char volatile xdata *)0xFC35)
#define PWM35T1H (*(unsigned char volatile xdata *)0xFC38)
#define PWM35T1L (*(unsigned char volatile xdata *)0xFC39)
#define PWM35T2H (*(unsigned char volatile xdata *)0xFC3A)
#define PWM35T2L (*(unsigned char volatile xdata *)0xFC3B)
#define PWM35CR (*(unsigned char volatile xdata *)0xFC3C)
#define PWM35HLD (*(unsigned char volatile xdata *)0xFC3D)
#define PWM36T1H (*(unsigned char volatile xdata *)0xFC40)
#define PWM36T1L (*(unsigned char volatile xdata *)0xFC41)
#define PWM36T2H (*(unsigned char volatile xdata *)0xFC42)
#define PWM36T2L (*(unsigned char volatile xdata *)0xFC43)
#define PWM36CR (*(unsigned char volatile xdata *)0xFC44)
#define PWM36HLD (*(unsigned char volatile xdata *)0xFC45)
#define PWM37T1H (*(unsigned char volatile xdata *)0xFC48)
#define PWM37T1L (*(unsigned char volatile xdata *)0xFC49)
#define PWM37T2H (*(unsigned char volatile xdata *)0xFC4A)
#define PWM37T2L (*(unsigned char volatile xdata *)0xFC4B)
#define PWM37CR (*(unsigned char volatile xdata *)0xFC4C)
#define PWM37HLD (*(unsigned char volatile xdata *)0xFC4D)
#define PWM4CH (*(unsigned char volatile xdata *)0xFC50)
#define PWM4CL (*(unsigned char volatile xdata *)0xFC51)
#define PWM4CKS (*(unsigned char volatile xdata *)0xFC52)
#define PWM4TADCH (*(unsigned char volatile xdata *)0xFC53)
#define PWM4TADCL (*(unsigned char volatile xdata *)0xFC54)
#define PWM4IF (*(unsigned char volatile xdata *)0xFC55)
#define PWM4FDCR (*(unsigned char volatile xdata *)0xFC56)
#define PWM40T1H (*(unsigned char volatile xdata *)0xFC60)
#define PWM40T1L (*(unsigned char volatile xdata *)0xFC61)
#define PWM40T2H (*(unsigned char volatile xdata *)0xFC62)
#define PWM40T2L (*(unsigned char volatile xdata *)0xFC63)
#define PWM40CR (*(unsigned char volatile xdata *)0xFC64)
#define PWM40HLD (*(unsigned char volatile xdata *)0xFC65)
#define PWM41T1H (*(unsigned char volatile xdata *)0xFC68)
#define PWM41T1L (*(unsigned char volatile xdata *)0xFC69)
#define PWM41T2H (*(unsigned char volatile xdata *)0xFC6A)
#define PWM41T2L (*(unsigned char volatile xdata *)0xFC6B)
#define PWM41CR (*(unsigned char volatile xdata *)0xFC6C)
#define PWM41HLD (*(unsigned char volatile xdata *)0xFC6D)
#define PWM42T1H (*(unsigned char volatile xdata *)0xFC70)
#define PWM42T1L (*(unsigned char volatile xdata *)0xFC71)
#define PWM42T2H (*(unsigned char volatile xdata *)0xFC72)
#define PWM42T2L (*(unsigned char volatile xdata *)0xFC73)
#define PWM42CR (*(unsigned char volatile xdata *)0xFC74)
#define PWM42HLD (*(unsigned char volatile xdata *)0xFC75)
#define PWM43T1H (*(unsigned char volatile xdata *)0xFC78)
#define PWM43T1L (*(unsigned char volatile xdata *)0xFC79)
#define PWM43T2H (*(unsigned char volatile xdata *)0xFC7A)
#define PWM43T2L (*(unsigned char volatile xdata *)0xFC7B)
#define PWM43CR (*(unsigned char volatile xdata *)0xFC7C)
#define PWM43HLD (*(unsigned char volatile xdata *)0xFC7D)
#define PWM44T1H (*(unsigned char volatile xdata *)0xFC80)
#define PWM44T1L (*(unsigned char volatile xdata *)0xFC81)
#define PWM44T2H (*(unsigned char volatile xdata *)0xFC82)
#define PWM44T2L (*(unsigned char volatile xdata *)0xFC83)
#define PWM44CR (*(unsigned char volatile xdata *)0xFC84)
#define PWM44HLD (*(unsigned char volatile xdata *)0xFC85)
#define PWM45T1H (*(unsigned char volatile xdata *)0xFC88)
#define PWM45T1L (*(unsigned char volatile xdata *)0xFC89)
#define PWM45T2H (*(unsigned char volatile xdata *)0xFC8A)
#define PWM45T2L (*(unsigned char volatile xdata *)0xFC8B)
#define PWM45CR (*(unsigned char volatile xdata *)0xFC8C)
#define PWM45HLD (*(unsigned char volatile xdata *)0xFC8D)
#define PWM46T1H (*(unsigned char volatile xdata *)0xFC90)
#define PWM46T1L (*(unsigned char volatile xdata *)0xFC91)
#define PWM46T2H (*(unsigned char volatile xdata *)0xFC92)
#define PWM46T2L (*(unsigned char volatile xdata *)0xFC93)
#define PWM46CR (*(unsigned char volatile xdata *)0xFC94)
#define PWM46HLD (*(unsigned char volatile xdata *)0xFC95)
#define PWM47T1H (*(unsigned char volatile xdata *)0xFC98)
#define PWM47T1L (*(unsigned char volatile xdata *)0xFC99)
#define PWM47T2H (*(unsigned char volatile xdata *)0xFC9A)
#define PWM47T2L (*(unsigned char volatile xdata *)0xFC9B)
#define PWM47CR (*(unsigned char volatile xdata *)0xFC9C)
#define PWM47HLD (*(unsigned char volatile xdata *)0xFC9D)
#define PWM5CH (*(unsigned char volatile xdata *)0xFCA0)
#define PWM5CL (*(unsigned char volatile xdata *)0xFCA1)
#define PWM5CKS (*(unsigned char volatile xdata *)0xFCA2)
#define PWM5IF (*(unsigned char volatile xdata *)0xFCA5)
#define PWM5FDCR (*(unsigned char volatile xdata *)0xFCA6)
#define PWM50T1H (*(unsigned char volatile xdata *)0xFCB0)
#define PWM50T1L (*(unsigned char volatile xdata *)0xFCB1)
#define PWM50T2H (*(unsigned char volatile xdata *)0xFCB2)
#define PWM50T2L (*(unsigned char volatile xdata *)0xFCB3)
#define PWM50CR (*(unsigned char volatile xdata *)0xFCB4)
#define PWM50HLD (*(unsigned char volatile xdata *)0xFCB5)
#define PWM51T1H (*(unsigned char volatile xdata *)0xFCB8)
#define PWM51T1L (*(unsigned char volatile xdata *)0xFCB9)
#define PWM51T2H (*(unsigned char volatile xdata *)0xFCBA)
#define PWM51T2L (*(unsigned char volatile xdata *)0xFCBB)
#define PWM51CR (*(unsigned char volatile xdata *)0xFCBC)
#define PWM51HLD (*(unsigned char volatile xdata *)0xFCBD)
#define PWM52T1H (*(unsigned char volatile xdata *)0xFCC0)
#define PWM52T1L (*(unsigned char volatile xdata *)0xFCC1)
#define PWM52T2H (*(unsigned char volatile xdata *)0xFCC2)
#define PWM52T2L (*(unsigned char volatile xdata *)0xFCC3)
#define PWM52CR (*(unsigned char volatile xdata *)0xFCC4)
#define PWM52HLD (*(unsigned char volatile xdata *)0xFCC5)
#define PWM53T1H (*(unsigned char volatile xdata *)0xFCC8)
#define PWM53T1L (*(unsigned char volatile xdata *)0xFCC9)
#define PWM53T2H (*(unsigned char volatile xdata *)0xFCCA)
#define PWM53T2L (*(unsigned char volatile xdata *)0xFCCB)
#define PWM53CR (*(unsigned char volatile xdata *)0xFCCC)
#define PWM53HLD (*(unsigned char volatile xdata *)0xFCCD)
#define PWM54T1H (*(unsigned char volatile xdata *)0xFCD0)
#define PWM54T1L (*(unsigned char volatile xdata *)0xFCD1)
#define PWM54T2H (*(unsigned char volatile xdata *)0xFCD2)
#define PWM54T2L (*(unsigned char volatile xdata *)0xFCD3)
#define PWM54CR (*(unsigned char volatile xdata *)0xFCD4)
#define PWM54HLD (*(unsigned char volatile xdata *)0xFCD5)
#define PWM55T1H (*(unsigned char volatile xdata *)0xFCD8)
#define PWM55T1L (*(unsigned char volatile xdata *)0xFCD9)
#define PWM55T2H (*(unsigned char volatile xdata *)0xFCDA)
#define PWM55T2L (*(unsigned char volatile xdata *)0xFCDB)
#define PWM55CR (*(unsigned char volatile xdata *)0xFCDC)
#define PWM55HLD (*(unsigned char volatile xdata *)0xFCDD)
#define PWM56T1H (*(unsigned char volatile xdata *)0xFCE0)
#define PWM56T1L (*(unsigned char volatile xdata *)0xFCE1)
#define PWM56T2H (*(unsigned char volatile xdata *)0xFCE2)
#define PWM56T2L (*(unsigned char volatile xdata *)0xFCE3)
#define PWM56CR (*(unsigned char volatile xdata *)0xFCE4)
#define PWM56HLD (*(unsigned char volatile xdata *)0xFCE5)
#define PWM57T1H (*(unsigned char volatile xdata *)0xFCE8)
#define PWM57T1L (*(unsigned char volatile xdata *)0xFCE9)
#define PWM57T2H (*(unsigned char volatile xdata *)0xFCEA)
#define PWM57T2L (*(unsigned char volatile xdata *)0xFCEB)
#define PWM57CR (*(unsigned char volatile xdata *)0xFCEC)
#define PWM57HLD (*(unsigned char volatile xdata *)0xFCED)
/////////////////////////////////////////////////
/// >>>>> add by cc
#include "../clib/bit.h"
#define D_stdIO_P0_ALL() P0M1=0;P0M0=0;
#define D_HighI_P0_ALL() P0M1=0;P0M0=0XFF;
#define D_HighR_P0_ALL() P0M1=0XFF;P0M0=0;
#define D_OpenD_P0_ALL() P0M1=0XFF;P0M0=0XFF;
#define D_stdIO_P1_ALL() P1M1=0;P1M0=0;
#define D_HighI_P1_ALL() P1M1=0;P1M0=0XFF;
#define D_HighR_P1_ALL() P1M1=0XFF;P1M0=0;
#define D_OpenD_P1_ALL() P1M1=0XFF;P1M0=0XFF;
#define D_stdIO_P0(n) BITN_0(P0M1,n);BITN_0(P0M0,n); //////00 准双向口 灌电流20mA 拉电流270-150uS
#define D_HighI_P0(n) BITN_0(P0M1,n);BITN_1(P0M0,n); //////01 推挽输出 20mA 加限流
#define D_HighR_P0(n) BITN_1(P0M1,n);BITN_0(P0M0,n); /////////10 高阻
#define D_OpenD_P0(n) BITN_1(P0M1,n);BITN_1(P0M0,n); /////11 开漏 open-Drain 内部上拉电阻断开 开漏模式既可以度外部状态也可以对外输出高低电平
#define D_stdIO_P1(n) BITN_0(P1M1,n);BITN_0(P1M0,n); //////00 准双向口 灌电流20mA 拉电流270-150uS
#define D_HighI_P1(n) BITN_0(P1M1,n);BITN_1(P1M0,n); //////01 推挽输出 20mA 加限流
#define D_HighR_P1(n) BITN_1(P1M1,n);BITN_0(P1M0,n); /////////10 高阻
#define D_OpenD_P1(n) BITN_1(P1M1,n);BITN_1(P1M0,n); /////11 开漏 open-Drain 内部上拉电阻断开 开漏模式既可以度外部状态也可以对外输出高低电平
#define D_stdIO_P2(n) BITN_0(P2M1,n);BITN_0(P2M0,n); //////00 准双向口 灌电流20mA 拉电流270-150uS
#define D_HighI_P2(n) BITN_0(P2M1,n);BITN_1(P2M0,n); //////01 推挽输出 20mA 加限流
#define D_HighR_P2(n) BITN_1(P2M1,n);BITN_0(P2M0,n); /////////10 高阻
#define D_OpenD_P2(n) BITN_1(P2M1,n);BITN_1(P2M0,n); /////11 开漏 open-Drain 内部上拉电阻断开 开漏模式既可以度外部状态也可以对外输出高低电平
#define D_stdIO_P3(n) BITN_0(P3M1,n);BITN_0(P3M0,n); //////00 准双向口 灌电流20mA 拉电流270-150uS
#define D_HighI_P3(n) BITN_0(P3M1,n);BITN_1(P3M0,n); //////01 推挽输出 20mA 加限流
#define D_HighR_P3(n) BITN_1(P3M1,n);BITN_0(P3M0,n); /////////10 高阻
#define D_OpenD_P3(n) BITN_1(P3M1,n);BITN_1(P3M0,n); /////11 开漏 open-Drain 内部上拉电阻断开 开漏模式既可以度外部状态也可以对外输出高低电平
#define D_stdIO_P4(n) BITN_0(P4M1,n);BITN_0(P4M0,n); //////00 准双向口 灌电流20mA 拉电流270-150uS
#define D_HighI_P4(n) BITN_0(P4M1,n);BITN_1(P4M0,n); //////01 推挽输出 20mA 加限流
#define D_HighR_P4(n) BITN_1(P4M1,n);BITN_0(P4M0,n); /////////10 高阻
#define D_OpenD_P4(n) BITN_1(P4M1,n);BITN_1(P4M0,n); /////11 开漏 open-Drain 内部上拉电阻断开 开漏模式既可以度外部状态也可以对外输出高低电平
#define D_stdIO_P5(n) BITN_0(P5M1,n);BITN_0(P5M0,n); //////00 准双向口 灌电流20mA 拉电流270-150uS
#define D_HighI_P5(n) BITN_0(P5M1,n);BITN_1(P5M0,n); //////01 推挽输出 20mA 加限流
#define D_HighR_P5(n) BITN_1(P5M1,n);BITN_0(P5M0,n); /////////10 高阻
#define D_OpenD_P5(n) BITN_1(P5M1,n);BITN_1(P5M0,n); /////11 开漏 open-Drain 内部上拉电阻断开 开漏模式既可以度外部状态也可以对外输出高低电平
#define D_stdIO_P6(n) BITN_0(P6M1,n);BITN_0(P6M0,n); //////00 准双向口 灌电流20mA 拉电流270-150uS
#define D_HighI_P6(n) BITN_0(P6M1,n);BITN_1(P6M0,n); //////01 推挽输出 20mA 加限流
#define D_HighR_P6(n) BITN_1(P6M1,n);BITN_0(P6M0,n); /////////10 高阻
#define D_OpenD_P6(n) BITN_1(P6M1,n);BITN_1(P6M0,n); /////11 开漏 open-Drain 内部上拉电阻断开 开漏模式既可以度外部状态也可以对外输出高低电平
#define D_stdIO_P7(n) BITN_0(P7M1,n);BITN_0(P7M0,n); //////00 准双向口 灌电流20mA 拉电流270-150uS
#define D_HighI_P7(n) BITN_0(P7M1,n);BITN_1(P7M0,n); //////01 推挽输出 20mA 加限流
#define D_HighR_P7(n) BITN_1(P7M1,n);BITN_0(P7M0,n); /////////10 高阻
#define D_OpenD_P7(n) BITN_1(P7M1,n);BITN_1(P7M0,n); /////11 开漏 open-Drain 内部上拉电阻断开 开漏模式既可以度外部状态也可以对外输出高低电平
/***
#define P0_conf_in(n) BITN_1(P0M1,n);BITN_0(P0M0,n);
#define P1_conf_in(n) BITN_1(P1M1,n);BITN_0(P1M0,n);
#define P2_conf_in(n) BITN_1(P2M1,n);BITN_0(P2M0,n);
#define P2_conf_port(n) BITN_0(P2M1,n);BITN_0(P2M0,n);
#define P3_conf_in(n) BITN_1(P3M1,n);BITN_0(P3M0,n);
#define P3_conf_port(n) BITN_0(P3M1,n);BITN_0(P3M0,n);
#define P4_conf_in(n) BITN_1(P4M1,n);BITN_0(P4M0,n);
#define P5_conf_in(n) BITN_1(P5M1,n);BITN_0(P5M0,n);
***/
#define NOP() _nop_()
#define L0_INT4_OPEN() BITN_1(INT_CLKO, INT_EX4)
#define L0_INT4_CLOSE() BITN_0(INT_CLKO, INT_EX4)
#define L0_INT4_AT() BITN_G(INT_CLKO, INT_EX4)
#define L0_INT4_CLEAR() BITN_0(AUXINTIF, INT4IF)
#define L0_INT3_CLEAR() BITN_0(AUXINTIF, INT3IF)
#define L0_INT2_CLEAR() BITN_0(AUXINTIF, INT2IF)
//////
#define L0_INT3_OPEN() BITN_1(INT_CLKO, INT_EX3);
#define L0_INT3_CLOSE() BITN_0(INT_CLKO, INT_EX3);
#define L0_INT2_OPEN() BITN_1(INT_CLKO, INT_EX2);
#define L0_INT2_CLOSE() BITN_0(INT_CLKO, INT_EX2);
#define L0_INT1_OPEN() EX1 = 1;
#define L0_INT1_CLOSE() EX1 = 0;
#define L0_INT0_OPEN() EX0 = 1;
#define L0_INT0_CLOSE() EX0 = 0;
#define D_ISR_int0 0 ///int0 下降沿触发 = 0 上下沿均可触发
#define D_ISR_timer0 1
#define D_ISR_int1 2 ///int1 下降沿触发 = 0 上下沿均可触发
#define D_ISR_timer1 3
#define D_ISR_int2 10 /////只有下降沿
#define D_ISR_int3 11 /////只有下降沿
#define D_SERVE_UART 4
#define D_ISR_int4 16 /////只有下降沿
#if 0
#define L0_TIMER1_start() TR1 = 1;
#define L0_TIMER1_end() TR1 = 0;
#define L0_TIMER1_isr_OPEN() ET1 = 1;
#define L0_TIMER1_isr_CLOSE() ET1 = 0;
#else
#define L0_TIMER1_start() ET1 = 1;
#define L0_TIMER1_end() ET1 = 0;
#define L0_TIMER1_isr_OPEN() TR1 = 1;
#define L0_TIMER1_isr_CLOSE() TR1 = 0;
#endif
/// fixme 颠倒定义会让c51锁死#define _nop_() NOP()
///#define L0_INT3_OPEN() BITN_1(INT_CLKO,INT_EX3); //使能INT3中断
///#define L0_INT3_CLOSE() BITN_0(INT_CLKO,INT_EX3);
#endif //STC_stc8a8k

640
source/cpu/stc_stc8hxx.h

@ -0,0 +1,640 @@
#ifndef __STC8H_H__
#define __STC8H_H__
/////////////////////////////////////////////////
//包含本头文件后,不用另外再包含"REG51.H"
sfr P0 = 0x80;
sbit P00 = P0^0;
sbit P01 = P0^1;
sbit P02 = P0^2;
sbit P03 = P0^3;
sbit P04 = P0^4;
sbit P05 = P0^5;
sbit P06 = P0^6;
sbit P07 = P0^7;
sfr SP = 0x81;
sfr DPL = 0x82;
sfr DPH = 0x83;
sfr S4CON = 0x84;
sfr S4BUF = 0x85;
sfr PCON = 0x87;
sfr TCON = 0x88;
sbit TF1 = TCON^7;
sbit TR1 = TCON^6;
sbit TF0 = TCON^5;
sbit TR0 = TCON^4;
sbit IE1 = TCON^3;
sbit IT1 = TCON^2;
sbit IE0 = TCON^1;
sbit IT0 = TCON^0;
sfr TMOD = 0x89;
sfr TL0 = 0x8a;
sfr TL1 = 0x8b;
sfr TH0 = 0x8c;
sfr TH1 = 0x8d;
sfr AUXR = 0x8e;
sfr INTCLKO = 0x8f;
sfr P1 = 0x90;
sbit P10 = P1^0;
sbit P11 = P1^1;
sbit P12 = P1^2;
sbit P13 = P1^3;
sbit P14 = P1^4;
sbit P15 = P1^5;
sbit P16 = P1^6;
sbit P17 = P1^7;
sfr P1M1 = 0x91;
sfr P1M0 = 0x92;
sfr P0M1 = 0x93;
sfr P0M0 = 0x94;
sfr P2M1 = 0x95;
sfr P2M0 = 0x96;
sfr SCON = 0x98;
sbit SM0 = SCON^7;
sbit SM1 = SCON^6;
sbit SM2 = SCON^5;
sbit REN = SCON^4;
sbit TB8 = SCON^3;
sbit RB8 = SCON^2;
sbit TI = SCON^1;
sbit RI = SCON^0;
sfr SBUF = 0x99;
sfr S2CON = 0x9a;
sfr S2BUF = 0x9b;
sfr IRCBAND = 0x9d;
sfr LIRTRIM = 0x9e;
sfr IRTRIM = 0x9f;
sfr P2 = 0xa0;
sbit P20 = P2^0;
sbit P21 = P2^1;
sbit P22 = P2^2;
sbit P23 = P2^3;
sbit P24 = P2^4;
sbit P25 = P2^5;
sbit P26 = P2^6;
sbit P27 = P2^7;
sfr P_SW1 = 0xa2;
sfr IE = 0xa8;
sbit EA = IE^7;
sbit ELVD = IE^6;
sbit EADC = IE^5;
sbit ES = IE^4;
sbit ET1 = IE^3;
sbit EX1 = IE^2;
sbit ET0 = IE^1;
sbit EX0 = IE^0;
sfr SADDR = 0xa9;
sfr WKTCL = 0xaa;
sfr WKTCH = 0xab;
sfr S3CON = 0xac;
sfr S3BUF = 0xad;
sfr TA = 0xae;
sfr IE2 = 0xaf;
sfr P3 = 0xb0;
sbit P30 = P3^0;
sbit P31 = P3^1;
sbit P32 = P3^2;
sbit P33 = P3^3;
sbit P34 = P3^4;
sbit P35 = P3^5;
sbit P36 = P3^6;
sbit P37 = P3^7;
sfr P3M1 = 0xb1;
sfr P3M0 = 0xb2;
sfr P4M1 = 0xb3;
sfr P4M0 = 0xb4;
sfr IP2 = 0xb5;
sfr IP2H = 0xb6;
sfr IPH = 0xb7;
sfr IP = 0xb8;
sbit PPCA = IP^7;
sbit PLVD = IP^6;
sbit PADC = IP^5;
sbit PS = IP^4;
sbit PT1 = IP^3;
sbit PX1 = IP^2;
sbit PT0 = IP^1;
sbit PX0 = IP^0;
sfr SADEN = 0xb9;
sfr P_SW2 = 0xba;
sfr ADC_CONTR = 0xbc;
sfr ADC_RES = 0xbd;
sfr ADC_RESL = 0xbe;
sfr P4 = 0xc0;
sbit P40 = P4^0;
sbit P41 = P4^1;
sbit P42 = P4^2;
sbit P43 = P4^3;
sbit P44 = P4^4;
sbit P45 = P4^5;
sbit P46 = P4^6;
sbit P47 = P4^7;
sfr WDT_CONTR = 0xc1;
sfr IAP_DATA = 0xc2;
sfr IAP_ADDRH = 0xc3;
sfr IAP_ADDRL = 0xc4;
sfr IAP_CMD = 0xc5;
sfr IAP_TRIG = 0xc6;
sfr IAP_CONTR = 0xc7;
sfr P5 = 0xc8;
sbit P50 = P5^0;
sbit P51 = P5^1;
sbit P52 = P5^2;
sbit P53 = P5^3;
sbit P54 = P5^4;
sbit P55 = P5^5;
sbit P56 = P5^6;
sbit P57 = P5^7;
sfr P5M1 = 0xc9;
sfr P5M0 = 0xca;
sfr P6M1 = 0xcb;
sfr P6M0 = 0xcc;
sfr SPSTAT = 0xcd;
sfr SPCTL = 0xce;
sfr SPDAT = 0xcf;
sfr PSW = 0xd0;
sbit CY = PSW^7;
sbit AC = PSW^6;
sbit F0 = PSW^5;
sbit RS1 = PSW^4;
sbit RS0 = PSW^3;
sbit OV = PSW^2;
sbit F1 = PSW^1;
sbit P = PSW^0;
sfr T4T3M = 0xd1;
sfr T4H = 0xd2;
sfr T4L = 0xd3;
sfr T3H = 0xd4;
sfr T3L = 0xd5;
sfr T2H = 0xd6;
sfr T2L = 0xd7;
sfr USBCLK = 0xdc;
sfr ADCCFG = 0xde;
sfr IP3 = 0xdf;
sfr ACC = 0xe0;
sfr P7M1 = 0xe1;
sfr P7M0 = 0xe2;
sfr DPS = 0xe3;
sfr DPL1 = 0xe4;
sfr DPH1 = 0xe5;
sfr CMPCR1 = 0xe6;
sfr CMPCR2 = 0xe7;
sfr P6 = 0xe8;
sfr USBDAT = 0xec;
sfr IP3H = 0xee;
sfr AUXINTIF = 0xef;
sfr B = 0xf0;
sfr USBCON = 0xf4;
sfr IAP_TPS = 0xf5;
sfr P7 = 0xf8;
sfr USBADR = 0xfc;
sfr RSTCFG = 0xff;
//如下特殊功能寄存器位于扩展RAM区域
//访问这些寄存器,需先将P_SW2的BIT7设置为1,才可正常读写
/////////////////////////////////////////////////
//FF00H-FFFFH
/////////////////////////////////////////////////
/////////////////////////////////////////////////
//FE00H-FEFFH
/////////////////////////////////////////////////
#define CKSEL (*(unsigned char volatile xdata *)0xfe00)
#define CLKDIV (*(unsigned char volatile xdata *)0xfe01)
#define HIRCCR (*(unsigned char volatile xdata *)0xfe02)
#define XOSCCR (*(unsigned char volatile xdata *)0xfe03)
#define IRC32KCR (*(unsigned char volatile xdata *)0xfe04)
#define MCLKOCR (*(unsigned char volatile xdata *)0xfe05)
#define IRCDB (*(unsigned char volatile xdata *)0xfe06)
#define X32KCR (*(unsigned char volatile xdata *)0xfe08)
#define P0PU (*(unsigned char volatile xdata *)0xfe10)
#define P1PU (*(unsigned char volatile xdata *)0xfe11)
#define P2PU (*(unsigned char volatile xdata *)0xfe12)
#define P3PU (*(unsigned char volatile xdata *)0xfe13)
#define P4PU (*(unsigned char volatile xdata *)0xfe14)
#define P5PU (*(unsigned char volatile xdata *)0xfe15)
#define P6PU (*(unsigned char volatile xdata *)0xfe16)
#define P7PU (*(unsigned char volatile xdata *)0xfe17)
#define P0NCS (*(unsigned char volatile xdata *)0xfe18)
#define P1NCS (*(unsigned char volatile xdata *)0xfe19)
#define P2NCS (*(unsigned char volatile xdata *)0xfe1a)
#define P3NCS (*(unsigned char volatile xdata *)0xfe1b)
#define P4NCS (*(unsigned char volatile xdata *)0xfe1c)
#define P5NCS (*(unsigned char volatile xdata *)0xfe1d)
#define P6NCS (*(unsigned char volatile xdata *)0xfe1e)
#define P7NCS (*(unsigned char volatile xdata *)0xfe1f)
#define P0SR (*(unsigned char volatile xdata *)0xfe20)
#define P1SR (*(unsigned char volatile xdata *)0xfe21)
#define P2SR (*(unsigned char volatile xdata *)0xfe22)
#define P3SR (*(unsigned char volatile xdata *)0xfe23)
#define P4SR (*(unsigned char volatile xdata *)0xfe24)
#define P5SR (*(unsigned char volatile xdata *)0xfe25)
#define P6SR (*(unsigned char volatile xdata *)0xfe26)
#define P7SR (*(unsigned char volatile xdata *)0xfe27)
#define P0DR (*(unsigned char volatile xdata *)0xfe28)
#define P1DR (*(unsigned char volatile xdata *)0xfe29)
#define P2DR (*(unsigned char volatile xdata *)0xfe2a)
#define P3DR (*(unsigned char volatile xdata *)0xfe2b)
#define P4DR (*(unsigned char volatile xdata *)0xfe2c)
#define P5DR (*(unsigned char volatile xdata *)0xfe2d)
#define P6DR (*(unsigned char volatile xdata *)0xfe2e)
#define P7DR (*(unsigned char volatile xdata *)0xfe2f)
#define P0IE (*(unsigned char volatile xdata *)0xfe30)
#define P1IE (*(unsigned char volatile xdata *)0xfe31)
#define P2IE (*(unsigned char volatile xdata *)0xfe32)
#define P3IE (*(unsigned char volatile xdata *)0xfe33)
#define P4IE (*(unsigned char volatile xdata *)0xfe34)
#define P5IE (*(unsigned char volatile xdata *)0xfe35)
#define P6IE (*(unsigned char volatile xdata *)0xfe36)
#define P7IE (*(unsigned char volatile xdata *)0xfe37)
#define RTCCR (*(unsigned char volatile xdata *)0xfe60)
#define RTCCFG (*(unsigned char volatile xdata *)0xfe61)
#define RTCIEN (*(unsigned char volatile xdata *)0xfe62)
#define RTCIF (*(unsigned char volatile xdata *)0xfe63)
#define ALAHOUR (*(unsigned char volatile xdata *)0xfe64)
#define ALAMIN (*(unsigned char volatile xdata *)0xfe65)
#define ALASEC (*(unsigned char volatile xdata *)0xfe66)
#define ALASSEC (*(unsigned char volatile xdata *)0xfe67)
#define INIYEAR (*(unsigned char volatile xdata *)0xfe68)
#define INIMONTH (*(unsigned char volatile xdata *)0xfe69)
#define INIDAY (*(unsigned char volatile xdata *)0xfe6a)
#define INIHOUR (*(unsigned char volatile xdata *)0xfe6b)
#define INIMIN (*(unsigned char volatile xdata *)0xfe6c)
#define INISEC (*(unsigned char volatile xdata *)0xfe6d)
#define INISSEC (*(unsigned char volatile xdata *)0xfe6e)
#define YEAR (*(unsigned char volatile xdata *)0xfe70)
#define MONTH (*(unsigned char volatile xdata *)0xfe71)
#define DAY (*(unsigned char volatile xdata *)0xfe72)
#define HOUR (*(unsigned char volatile xdata *)0xfe73)
#define MIN (*(unsigned char volatile xdata *)0xfe74)
#define SEC (*(unsigned char volatile xdata *)0xfe75)
#define SSEC (*(unsigned char volatile xdata *)0xfe76)
#define I2CCFG (*(unsigned char volatile xdata *)0xfe80)
#define I2CMSCR (*(unsigned char volatile xdata *)0xfe81)
#define I2CMSST (*(unsigned char volatile xdata *)0xfe82)
#define I2CSLCR (*(unsigned char volatile xdata *)0xfe83)
#define I2CSLST (*(unsigned char volatile xdata *)0xfe84)
#define I2CSLADR (*(unsigned char volatile xdata *)0xfe85)
#define I2CTXD (*(unsigned char volatile xdata *)0xfe86)
#define I2CRXD (*(unsigned char volatile xdata *)0xfe87)
#define I2CMSAUX (*(unsigned char volatile xdata *)0xfe88)
#define TM2PS (*(unsigned char volatile xdata *)0xfea2)
#define TM3PS (*(unsigned char volatile xdata *)0xfea3)
#define TM4PS (*(unsigned char volatile xdata *)0xfea4)
#define ADCTIM (*(unsigned char volatile xdata *)0xfea8)
#define PWM1_ETRPS (*(unsigned char volatile xdata *)0xfeb0)
#define PWM1_ENO (*(unsigned char volatile xdata *)0xfeb1)
#define PWM1_PS (*(unsigned char volatile xdata *)0xfeb2)
#define PWM1_IOAUX (*(unsigned char volatile xdata *)0xfeb3)
#define PWM2_ETRPS (*(unsigned char volatile xdata *)0xfeb4)
#define PWM2_ENO (*(unsigned char volatile xdata *)0xfeb5)
#define PWM2_PS (*(unsigned char volatile xdata *)0xfeb6)
#define PWM2_IOAUX (*(unsigned char volatile xdata *)0xfeb7)
#define PWM1_CR1 (*(unsigned char volatile xdata *)0xfec0)
#define PWM1_CR2 (*(unsigned char volatile xdata *)0xfec1)
#define PWM1_SMCR (*(unsigned char volatile xdata *)0xfec2)
#define PWM1_ETR (*(unsigned char volatile xdata *)0xfec3)
#define PWM1_IER (*(unsigned char volatile xdata *)0xfec4)
#define PWM1_SR1 (*(unsigned char volatile xdata *)0xfec5)
#define PWM1_SR2 (*(unsigned char volatile xdata *)0xfec6)
#define PWM1_EGR (*(unsigned char volatile xdata *)0xfec7)
#define PWM1_CCMR1 (*(unsigned char volatile xdata *)0xfec8)
#define PWM1_CCMR2 (*(unsigned char volatile xdata *)0xfec9)
#define PWM1_CCMR3 (*(unsigned char volatile xdata *)0xfeca)
#define PWM1_CCMR4 (*(unsigned char volatile xdata *)0xfecb)
#define PWM1_CCER1 (*(unsigned char volatile xdata *)0xfecc)
#define PWM1_CCER2 (*(unsigned char volatile xdata *)0xfecd)
#define PWM1_CNTR (*(unsigned int volatile xdata *)0xfece)
#define PWM1_CNTRH (*(unsigned char volatile xdata *)0xfece)
#define PWM1_CNTRL (*(unsigned char volatile xdata *)0xfecf)
#define PWM1_PSCR (*(unsigned int volatile xdata *)0xfed0)
#define PWM1_PSCRH (*(unsigned char volatile xdata *)0xfed0)
#define PWM1_PSCRL (*(unsigned char volatile xdata *)0xfed1)
#define PWM1_ARR (*(unsigned int volatile xdata *)0xfed2)
#define PWM1_ARRH (*(unsigned char volatile xdata *)0xfed2)
#define PWM1_ARRL (*(unsigned char volatile xdata *)0xfed3)
#define PWM1_RCR (*(unsigned char volatile xdata *)0xfed4)
#define PWM1_CCR1 (*(unsigned int volatile xdata *)0xfed5)
#define PWM1_CCR1H (*(unsigned char volatile xdata *)0xfed5)
#define PWM1_CCR1L (*(unsigned char volatile xdata *)0xfed6)
#define PWM1_CCR2 (*(unsigned int volatile xdata *)0xfed7)
#define PWM1_CCR2H (*(unsigned char volatile xdata *)0xfed7)
#define PWM1_CCR2L (*(unsigned char volatile xdata *)0xfed8)
#define PWM1_CCR3 (*(unsigned int volatile xdata *)0xfed9)
#define PWM1_CCR3H (*(unsigned char volatile xdata *)0xfed9)
#define PWM1_CCR3L (*(unsigned char volatile xdata *)0xfeda)
#define PWM1_CCR4 (*(unsigned int volatile xdata *)0xfedb)
#define PWM1_CCR4H (*(unsigned char volatile xdata *)0xfedb)
#define PWM1_CCR4L (*(unsigned char volatile xdata *)0xfedc)
#define PWM1_BKR (*(unsigned char volatile xdata *)0xfedd)
#define PWM1_DTR (*(unsigned char volatile xdata *)0xfede)
#define PWM1_OISR (*(unsigned char volatile xdata *)0xfedf)
#define PWM2_CR1 (*(unsigned char volatile xdata *)0xfee0)
#define PWM2_CR2 (*(unsigned char volatile xdata *)0xfee1)
#define PWM2_SMCR (*(unsigned char volatile xdata *)0xfee2)
#define PWM2_ETR (*(unsigned char volatile xdata *)0xfee3)
#define PWM2_IER (*(unsigned char volatile xdata *)0xfee4)
#define PWM2_SR1 (*(unsigned char volatile xdata *)0xfee5)
#define PWM2_SR2 (*(unsigned char volatile xdata *)0xfee6)
#define PWM2_EGR (*(unsigned char volatile xdata *)0xfee7)
#define PWM2_CCMR1 (*(unsigned char volatile xdata *)0xfee8)
#define PWM2_CCMR2 (*(unsigned char volatile xdata *)0xfee9)
#define PWM2_CCMR3 (*(unsigned char volatile xdata *)0xfeea)
#define PWM2_CCMR4 (*(unsigned char volatile xdata *)0xfeeb)
#define PWM2_CCER1 (*(unsigned char volatile xdata *)0xfeec)
#define PWM2_CCER2 (*(unsigned char volatile xdata *)0xfeed)
#define PWM2_CNTR (*(unsigned int volatile xdata *)0xfeee)
#define PWM2_CNTRH (*(unsigned char volatile xdata *)0xfeee)
#define PWM2_CNTRL (*(unsigned char volatile xdata *)0xfeef)
#define PWM2_PSCR (*(unsigned int volatile xdata *)0xfef0)
#define PWM2_PSCRH (*(unsigned char volatile xdata *)0xfef0)
#define PWM2_PSCRL (*(unsigned char volatile xdata *)0xfef1)
#define PWM2_ARR (*(unsigned int volatile xdata *)0xfef2)
#define PWM2_ARRH (*(unsigned char volatile xdata *)0xfef2)
#define PWM2_ARRL (*(unsigned char volatile xdata *)0xfef3)
#define PWM2_RCR (*(unsigned char volatile xdata *)0xfef4)
#define PWM2_CCR1 (*(unsigned int volatile xdata *)0xfef5)
#define PWM2_CCR1H (*(unsigned char volatile xdata *)0xfef5)
#define PWM2_CCR1L (*(unsigned char volatile xdata *)0xfef6)
#define PWM2_CCR2 (*(unsigned int volatile xdata *)0xfef7)
#define PWM2_CCR2H (*(unsigned char volatile xdata *)0xfef7)
#define PWM2_CCR2L (*(unsigned char volatile xdata *)0xfef8)
#define PWM2_CCR3 (*(unsigned int volatile xdata *)0xfef9)
#define PWM2_CCR3H (*(unsigned char volatile xdata *)0xfef9)
#define PWM2_CCR3L (*(unsigned char volatile xdata *)0xfefa)
#define PWM2_CCR4 (*(unsigned int volatile xdata *)0xfefb)
#define PWM2_CCR4H (*(unsigned char volatile xdata *)0xfefb)
#define PWM2_CCR4L (*(unsigned char volatile xdata *)0xfefc)
#define PWM2_BKR (*(unsigned char volatile xdata *)0xfefd)
#define PWM2_DTR (*(unsigned char volatile xdata *)0xfefe)
#define PWM2_OISR (*(unsigned char volatile xdata *)0xfeff)
#define PWMA_ETRPS (*(unsigned char volatile xdata *)0xfeb0)
#define PWMA_ENO (*(unsigned char volatile xdata *)0xfeb1)
#define PWMA_PS (*(unsigned char volatile xdata *)0xfeb2)
#define PWMA_IOAUX (*(unsigned char volatile xdata *)0xfeb3)
#define PWMB_ETRPS (*(unsigned char volatile xdata *)0xfeb4)
#define PWMB_ENO (*(unsigned char volatile xdata *)0xfeb5)
#define PWMB_PS (*(unsigned char volatile xdata *)0xfeb6)
#define PWMB_IOAUX (*(unsigned char volatile xdata *)0xfeb7)
#define PWMA_CR1 (*(unsigned char volatile xdata *)0xfec0)
#define PWMA_CR2 (*(unsigned char volatile xdata *)0xfec1)
#define PWMA_SMCR (*(unsigned char volatile xdata *)0xfec2)
#define PWMA_ETR (*(unsigned char volatile xdata *)0xfec3)
#define PWMA_IER (*(unsigned char volatile xdata *)0xfec4)
#define PWMA_SR1 (*(unsigned char volatile xdata *)0xfec5)
#define PWMA_SR2 (*(unsigned char volatile xdata *)0xfec6)
#define PWMA_EGR (*(unsigned char volatile xdata *)0xfec7)
#define PWMA_CCMR1 (*(unsigned char volatile xdata *)0xfec8)
#define PWMA_CCMR2 (*(unsigned char volatile xdata *)0xfec9)
#define PWMA_CCMR3 (*(unsigned char volatile xdata *)0xfeca)
#define PWMA_CCMR4 (*(unsigned char volatile xdata *)0xfecb)
#define PWMA_CCER1 (*(unsigned char volatile xdata *)0xfecc)
#define PWMA_CCER2 (*(unsigned char volatile xdata *)0xfecd)
#define PWMA_CNTR (*(unsigned int volatile xdata *)0xfece)
#define PWMA_CNTRH (*(unsigned char volatile xdata *)0xfece)
#define PWMA_CNTRL (*(unsigned char volatile xdata *)0xfecf)
#define PWMA_PSCR (*(unsigned int volatile xdata *)0xfed0)
#define PWMA_PSCRH (*(unsigned char volatile xdata *)0xfed0)
#define PWMA_PSCRL (*(unsigned char volatile xdata *)0xfed1)
#define PWMA_ARR (*(unsigned int volatile xdata *)0xfed2)
#define PWMA_ARRH (*(unsigned char volatile xdata *)0xfed2)
#define PWMA_ARRL (*(unsigned char volatile xdata *)0xfed3)
#define PWMA_RCR (*(unsigned char volatile xdata *)0xfed4)
#define PWMA_CCR1 (*(unsigned int volatile xdata *)0xfed5)
#define PWMA_CCR1H (*(unsigned char volatile xdata *)0xfed5)
#define PWMA_CCR1L (*(unsigned char volatile xdata *)0xfed6)
#define PWMA_CCR2 (*(unsigned int volatile xdata *)0xfed7)
#define PWMA_CCR2H (*(unsigned char volatile xdata *)0xfed7)
#define PWMA_CCR2L (*(unsigned char volatile xdata *)0xfed8)
#define PWMA_CCR3 (*(unsigned int volatile xdata *)0xfed9)
#define PWMA_CCR3H (*(unsigned char volatile xdata *)0xfed9)
#define PWMA_CCR3L (*(unsigned char volatile xdata *)0xfeda)
#define PWMA_CCR4 (*(unsigned int volatile xdata *)0xfedb)
#define PWMA_CCR4H (*(unsigned char volatile xdata *)0xfedb)
#define PWMA_CCR4L (*(unsigned char volatile xdata *)0xfedc)
#define PWMA_BKR (*(unsigned char volatile xdata *)0xfedd)
#define PWMA_DTR (*(unsigned char volatile xdata *)0xfede)
#define PWMA_OISR (*(unsigned char volatile xdata *)0xfedf)
#define PWMB_CR1 (*(unsigned char volatile xdata *)0xfee0)
#define PWMB_CR2 (*(unsigned char volatile xdata *)0xfee1)
#define PWMB_SMCR (*(unsigned char volatile xdata *)0xfee2)
#define PWMB_ETR (*(unsigned char volatile xdata *)0xfee3)
#define PWMB_IER (*(unsigned char volatile xdata *)0xfee4)
#define PWMB_SR1 (*(unsigned char volatile xdata *)0xfee5)
#define PWMB_SR2 (*(unsigned char volatile xdata *)0xfee6)
#define PWMB_EGR (*(unsigned char volatile xdata *)0xfee7)
#define PWMB_CCMR1 (*(unsigned char volatile xdata *)0xfee8)
#define PWMB_CCMR2 (*(unsigned char volatile xdata *)0xfee9)
#define PWMB_CCMR3 (*(unsigned char volatile xdata *)0xfeea)
#define PWMB_CCMR4 (*(unsigned char volatile xdata *)0xfeeb)
#define PWMB_CCER1 (*(unsigned char volatile xdata *)0xfeec)
#define PWMB_CCER2 (*(unsigned char volatile xdata *)0xfeed)
#define PWMB_CNTR (*(unsigned int volatile xdata *)0xfeee)
#define PWMB_CNTRH (*(unsigned char volatile xdata *)0xfeee)
#define PWMB_CNTRL (*(unsigned char volatile xdata *)0xfeef)
#define PWMB_PSCR (*(unsigned int volatile xdata *)0xfef0)
#define PWMB_PSCRH (*(unsigned char volatile xdata *)0xfef0)
#define PWMB_PSCRL (*(unsigned char volatile xdata *)0xfef1)
#define PWMB_ARR (*(unsigned int volatile xdata *)0xfef2)
#define PWMB_ARRH (*(unsigned char volatile xdata *)0xfef2)
#define PWMB_ARRL (*(unsigned char volatile xdata *)0xfef3)
#define PWMB_RCR (*(unsigned char volatile xdata *)0xfef4)
#define PWMB_CCR5 (*(unsigned int volatile xdata *)0xfef5)
#define PWMB_CCR5H (*(unsigned char volatile xdata *)0xfef5)
#define PWMB_CCR5L (*(unsigned char volatile xdata *)0xfef6)
#define PWMB_CCR6 (*(unsigned int volatile xdata *)0xfef7)
#define PWMB_CCR6H (*(unsigned char volatile xdata *)0xfef7)
#define PWMB_CCR6L (*(unsigned char volatile xdata *)0xfef8)
#define PWMB_CCR7 (*(unsigned int volatile xdata *)0xfef9)
#define PWMB_CCR7H (*(unsigned char volatile xdata *)0xfef9)
#define PWMB_CCR7L (*(unsigned char volatile xdata *)0xfefa)
#define PWMB_CCR8 (*(unsigned int volatile xdata *)0xfefb)
#define PWMB_CCR8H (*(unsigned char volatile xdata *)0xfefb)
#define PWMB_CCR8L (*(unsigned char volatile xdata *)0xfefc)
#define PWMB_BKR (*(unsigned char volatile xdata *)0xfefd)
#define PWMB_DTR (*(unsigned char volatile xdata *)0xfefe)
#define PWMB_OISR (*(unsigned char volatile xdata *)0xfeff)
/////////////////////////////////////////////////
//FD00H-FDFFH
/////////////////////////////////////////////////
#define P0INTE (*(unsigned char volatile xdata *)0xfd00)
#define P1INTE (*(unsigned char volatile xdata *)0xfd01)
#define P2INTE (*(unsigned char volatile xdata *)0xfd02)
#define P3INTE (*(unsigned char volatile xdata *)0xfd03)
#define P4INTE (*(unsigned char volatile xdata *)0xfd04)
#define P5INTE (*(unsigned char volatile xdata *)0xfd05)
#define P6INTE (*(unsigned char volatile xdata *)0xfd06)
#define P7INTE (*(unsigned char volatile xdata *)0xfd07)
#define P0INTF (*(unsigned char volatile xdata *)0xfd10)
#define P1INTF (*(unsigned char volatile xdata *)0xfd11)
#define P2INTF (*(unsigned char volatile xdata *)0xfd12)
#define P3INTF (*(unsigned char volatile xdata *)0xfd13)
#define P4INTF (*(unsigned char volatile xdata *)0xfd14)
#define P5INTF (*(unsigned char volatile xdata *)0xfd15)
#define P6INTF (*(unsigned char volatile xdata *)0xfd16)
#define P7INTF (*(unsigned char volatile xdata *)0xfd17)
#define P0IM0 (*(unsigned char volatile xdata *)0xfd20)
#define P1IM0 (*(unsigned char volatile xdata *)0xfd21)
#define P2IM0 (*(unsigned char volatile xdata *)0xfd22)
#define P3IM0 (*(unsigned char volatile xdata *)0xfd23)
#define P4IM0 (*(unsigned char volatile xdata *)0xfd24)
#define P5IM0 (*(unsigned char volatile xdata *)0xfd25)
#define P6IM0 (*(unsigned char volatile xdata *)0xfd26)
#define P7IM0 (*(unsigned char volatile xdata *)0xfd27)
#define P0IM1 (*(unsigned char volatile xdata *)0xfd30)
#define P1IM1 (*(unsigned char volatile xdata *)0xfd31)
#define P2IM1 (*(unsigned char volatile xdata *)0xfd32)
#define P3IM1 (*(unsigned char volatile xdata *)0xfd33)
#define P4IM1 (*(unsigned char volatile xdata *)0xfd34)
#define P5IM1 (*(unsigned char volatile xdata *)0xfd35)
#define P6IM1 (*(unsigned char volatile xdata *)0xfd36)
#define P7IM1 (*(unsigned char volatile xdata *)0xfd37)
#define P0WKUE (*(unsigned char volatile xdata *)0xfd40)
#define P1WKUE (*(unsigned char volatile xdata *)0xfd41)
#define P2WKUE (*(unsigned char volatile xdata *)0xfd42)
#define P3WKUE (*(unsigned char volatile xdata *)0xfd43)
#define P4WKUE (*(unsigned char volatile xdata *)0xfd44)
#define P5WKUE (*(unsigned char volatile xdata *)0xfd45)
#define P6WKUE (*(unsigned char volatile xdata *)0xfd46)
#define P7WKUE (*(unsigned char volatile xdata *)0xfd47)
#define PIN_IP (*(unsigned char volatile xdata *)0xfd60)
#define PIN_IPH (*(unsigned char volatile xdata *)0xfd61)
/////////////////////////////////////////////////
//FC00H-FCFFH
/////////////////////////////////////////////////
#define MD3 (*(unsigned char volatile xdata *)0xfcf0)
#define MD2 (*(unsigned char volatile xdata *)0xfcf1)
#define MD1 (*(unsigned char volatile xdata *)0xfcf2)
#define MD0 (*(unsigned char volatile xdata *)0xfcf3)
#define MD5 (*(unsigned char volatile xdata *)0xfcf4)
#define MD4 (*(unsigned char volatile xdata *)0xfcf5)
#define ARCON (*(unsigned char volatile xdata *)0xfcf6)
#define OPCON (*(unsigned char volatile xdata *)0xfcf7)
/////////////////////////////////////////////////
//FB00H-FBFFH
/////////////////////////////////////////////////
#define COMEN (*(unsigned char volatile xdata *)0xfb00)
#define SEGENL (*(unsigned char volatile xdata *)0xfb01)
#define SEGENH (*(unsigned char volatile xdata *)0xfb02)
#define LEDCTRL (*(unsigned char volatile xdata *)0xfb03)
#define LEDCKS (*(unsigned char volatile xdata *)0xfb04)
#define COM0_DA_L (*(unsigned char volatile xdata *)0xfb10)
#define COM1_DA_L (*(unsigned char volatile xdata *)0xfb11)
#define COM2_DA_L (*(unsigned char volatile xdata *)0xfb12)
#define COM3_DA_L (*(unsigned char volatile xdata *)0xfb13)
#define COM4_DA_L (*(unsigned char volatile xdata *)0xfb14)
#define COM5_DA_L (*(unsigned char volatile xdata *)0xfb15)
#define COM6_DA_L (*(unsigned char volatile xdata *)0xfb16)
#define COM7_DA_L (*(unsigned char volatile xdata *)0xfb17)
#define COM0_DA_H (*(unsigned char volatile xdata *)0xfb18)
#define COM1_DA_H (*(unsigned char volatile xdata *)0xfb19)
#define COM2_DA_H (*(unsigned char volatile xdata *)0xfb1a)
#define COM3_DA_H (*(unsigned char volatile xdata *)0xfb1b)
#define COM4_DA_H (*(unsigned char volatile xdata *)0xfb1c)
#define COM5_DA_H (*(unsigned char volatile xdata *)0xfb1d)
#define COM6_DA_H (*(unsigned char volatile xdata *)0xfb1e)
#define COM7_DA_H (*(unsigned char volatile xdata *)0xfb1f)
#define COM0_DC_L (*(unsigned char volatile xdata *)0xfb20)
#define COM1_DC_L (*(unsigned char volatile xdata *)0xfb21)
#define COM2_DC_L (*(unsigned char volatile xdata *)0xfb22)
#define COM3_DC_L (*(unsigned char volatile xdata *)0xfb23)
#define COM4_DC_L (*(unsigned char volatile xdata *)0xfb24)
#define COM5_DC_L (*(unsigned char volatile xdata *)0xfb25)
#define COM6_DC_L (*(unsigned char volatile xdata *)0xfb26)
#define COM7_DC_L (*(unsigned char volatile xdata *)0xfb27)
#define COM0_DC_H (*(unsigned char volatile xdata *)0xfb28)
#define COM1_DC_H (*(unsigned char volatile xdata *)0xfb29)
#define COM2_DC_H (*(unsigned char volatile xdata *)0xfb2a)
#define COM3_DC_H (*(unsigned char volatile xdata *)0xfb2b)
#define COM4_DC_H (*(unsigned char volatile xdata *)0xfb2c)
#define COM5_DC_H (*(unsigned char volatile xdata *)0xfb2d)
#define COM6_DC_H (*(unsigned char volatile xdata *)0xfb2e)
#define COM7_DC_H (*(unsigned char volatile xdata *)0xfb2f)
#define TSCHEN1 (*(unsigned char volatile xdata *)0xfb40)
#define TSCHEN2 (*(unsigned char volatile xdata *)0xfb41)
#define TSCFG1 (*(unsigned char volatile xdata *)0xfb42)
#define TSCFG2 (*(unsigned char volatile xdata *)0xfb43)
#define TSWUTC (*(unsigned char volatile xdata *)0xfb44)
#define TSCTRL (*(unsigned char volatile xdata *)0xfb45)
#define TSSTA1 (*(unsigned char volatile xdata *)0xfb46)
#define TSSTA2 (*(unsigned char volatile xdata *)0xfb47)
#define TSRT (*(unsigned char volatile xdata *)0xfb48)
#define TSDAT (*(unsigned int volatile xdata *)0xfb49)
#define TSDATH (*(unsigned char volatile xdata *)0xfb49)
#define TSDATL (*(unsigned char volatile xdata *)0xfb4A)
#define TSTH00 (*(unsigned int volatile xdata *)0xfb50)
#define TSTH00H (*(unsigned char volatile xdata *)0xfb50)
#define TSTH00L (*(unsigned char volatile xdata *)0xfb51)
#define TSTH01 (*(unsigned int volatile xdata *)0xfb52)
#define TSTH01H (*(unsigned char volatile xdata *)0xfb52)
#define TSTH01L (*(unsigned char volatile xdata *)0xfb53)
#define TSTH02 (*(unsigned int volatile xdata *)0xfb54)
#define TSTH02H (*(unsigned char volatile xdata *)0xfb54)
#define TSTH02L (*(unsigned char volatile xdata *)0xfb55)
#define TSTH03 (*(unsigned int volatile xdata *)0xfb56)
#define TSTH03H (*(unsigned char volatile xdata *)0xfb56)
#define TSTH03L (*(unsigned char volatile xdata *)0xfb57)
#define TSTH04 (*(unsigned int volatile xdata *)0xfb58)
#define TSTH04H (*(unsigned char volatile xdata *)0xfb58)
#define TSTH04L (*(unsigned char volatile xdata *)0xfb59)
#define TSTH05 (*(unsigned int volatile xdata *)0xfb5a)
#define TSTH05H (*(unsigned char volatile xdata *)0xfb5a)
#define TSTH05L (*(unsigned char volatile xdata *)0xfb5b)
#define TSTH06 (*(unsigned int volatile xdata *)0xfb5c)
#define TSTH06H (*(unsigned char volatile xdata *)0xfb5c)
#define TSTH06L (*(unsigned char volatile xdata *)0xfb5d)
#define TSTH07 (*(unsigned int volatile xdata *)0xfb5e)
#define TSTH07H (*(unsigned char volatile xdata *)0xfb5e)
#define TSTH07L (*(unsigned char volatile xdata *)0xfb5f)
#define TSTH08 (*(unsigned int volatile xdata *)0xfb60)
#define TSTH08H (*(unsigned char volatile xdata *)0xfb60)
#define TSTH08L (*(unsigned char volatile xdata *)0xfb61)
#define TSTH09 (*(unsigned int volatile xdata *)0xfb62)
#define TSTH09H (*(unsigned char volatile xdata *)0xfb62)
#define TSTH09L (*(unsigned char volatile xdata *)0xfb63)
#define TSTH10 (*(unsigned int volatile xdata *)0xfb64)
#define TSTH10H (*(unsigned char volatile xdata *)0xfb64)
#define TSTH10L (*(unsigned char volatile xdata *)0xfb65)
#define TSTH11 (*(unsigned int volatile xdata *)0xfb66)
#define TSTH11H (*(unsigned char volatile xdata *)0xfb66)
#define TSTH11L (*(unsigned char volatile xdata *)0xfb67)
#define TSTH12 (*(unsigned int volatile xdata *)0xfb68)
#define TSTH12H (*(unsigned char volatile xdata *)0xfb68)
#define TSTH12L (*(unsigned char volatile xdata *)0xfb69)
#define TSTH13 (*(unsigned int volatile xdata *)0xfb6a)
#define TSTH13H (*(unsigned char volatile xdata *)0xfb6a)
#define TSTH13L (*(unsigned char volatile xdata *)0xfb6b)
#define TSTH14 (*(unsigned int volatile xdata *)0xfb6c)
#define TSTH14H (*(unsigned char volatile xdata *)0xfb6c)
#define TSTH14L (*(unsigned char volatile xdata *)0xfb6d)
#define TSTH15 (*(unsigned int volatile xdata *)0xfb6e)
#define TSTH15H (*(unsigned char volatile xdata *)0xfb6e)
#define TSTH15L (*(unsigned char volatile xdata *)0xfb6f)
/////////////////////////////////////////////////
//FA00H-FAFFH
/////////////////////////////////////////////////
/////////////////////////////////////////////////
#endif

86
source/ctask/task.c

@ -2,83 +2,29 @@
*============================================================================
* HISTORY
* Below this line, this part is controlled by TSTS. DO NOT MODIFY!!
(Task Step by Step Turn by Turn StructureTSTS
(Task Step by Step Turn by Turn StructureTSTS
*============================================================================
****************************************************************************/
#include "task.h"
//任务命名规则:
// 1:第一层
/// 0驱动芯片级 flash
/// 1芯片应用级 save
/// 2任务应用级 jilu_save
//任务命名规则:
// 1:第一层
/// 0驱动芯片级 flash
/// 1芯片应用级 save
/// 2任务应用级 jilu_save
//
// 2:第二层/flash/i2c/7290/等各类芯片
// 3:任务序号/不同的芯片/
// 2:第二层/flash/i2c/7290/等各类芯片
// 3:任务序号/不同的芯片/
//
void L1_task_init(TS_task *s)
void L1_task_init(TS_task *s)
{
// s->en = 1;
// s->pfun = 0;
s->en = 1;
s->sh = 0;
s->sh_next= 0;
/// s->sh_pre= 0;
s->n= 0;
}
/////》》》》》》》》》》》》》》》》供演示task 结构的使用 不可删除
#define D_task_test_01 0x20
#define D_task_test_02 0x22
#define D_task_test_03 0x23
#ifdef D_debug_task_test
////>>>>>>>>>>>>>>>>>>>>>_s_task_test_>>>>>>>>>>>>>>>>>>>>>>
struct _s_task_test_ s_task_test;
void L2_task_test_init(void)
{
ddd
L1_task_init(&s_task_test.task);
L3_task_s_go(s_task_test,D_task_init);
}
///L2_task_test_handle(&s_task_test);
void L2_task_test_handle(struct _s_task_test_ *s)
{
unsigned char d = 0;
TTSS_Task_init();
L2_task_go(D_task_test_01);
TTSS_Task_step(D_task_test_01):
if(d > 8)
{
d = 0;
L2_task_go(D_task_test_02);
L1_task_Cdelay(D_Cdelay_200us);
}else
{
d ++;
}
TTSS_Task_step(D_task_test_02):
if(d > 4)
{
d = 0;
L2_task_go(D_task_test_01);
L1_task_Tdelay(D_Tdelay_100ms);
}else
{
d ++;
}
TTSS_Task_end();
}
#endif//#ifdef D_debug_task_test
////<<<<<<<<<<<<<<<<<<<<<_s_task_test_<<<<<<<<<<<<<<<<<<<<<<
/////<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<供演示task 结构的使用 不可删除
//example :
#if 0
@ -149,7 +95,7 @@ void L2_task_voice_handle(struct _s_task_music_ *s)
}else
{
L2_task_go_father();//回到
L2_task_go_father();//回到
}
break;
//<<<<<<<<<<<<<<<<<<<<<< son function
@ -205,11 +151,11 @@ void L2_task_voice_handle(struct _s_task_music_ *s)
}
//>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
//>>>>>>>>>>>>>>>>>>>>>记录task
//>>>>>>>>>>>>>>>>>>>>>记录task
struct _s_task_4ChuShengRiQi_
{
TS_task task;
unsigned char pic_id;//画面ID
unsigned char pic_id;//画面ID
};
@ -256,7 +202,7 @@ void L2_task_4ChuShengRiQi_handle(struct _s_task_4ChuShengRiQi_ *s)
//<<<<<<<<<<<<<<<<<<<记录task
//<<<<<<<<<<<<<<<<<<<记录task
@ -272,9 +218,9 @@ void L2_task_4ChuShengRiQi_handle(struct _s_task_4ChuShengRiQi_ *s)
/*****************************************************
*==============================================================
* HISTORY
* HISTORYmm
* Below this line, this part is controlled by TSTS. DO NOT MODIFY!!
(Task Step by Step Turn by Turn StructureTSTS
(Task Step by Step Turn by Turn StructureTSTS
*==============================================================
****************************************************************************/

302
source/ctask/task.h

@ -1,25 +1,20 @@
/********************************
2013.7.23 add dictionary and task step by cc
:task
:task step
:sh ( struct handle)
:task
:task step
:sh ( struct handle)
sh_next
,sh_next执行完后执行sh_pre
sh_next
,sh_next执行完后执行sh_pre
***************************/
/*****************************************************
*==============================================================
* HISTORY
* Below this line, this part is controlled by TSTS. DO NOT MODIFY!!
(Task Step by Step Turn by Turn StructureTSTS
(Task Step by Step Turn by Turn StructureTSTS
*==============================================================
20190217 and step01 delay_n添加括号保护
****************************************************************************/
#ifndef _TASK_H_
@ -29,258 +24,135 @@
#include "task.h"
#include "tick.h"
typedef struct
typedef struct _ts_task
{
volatile UN_TYPE en; //关闭任务,也可以理解为暂停,但是使用idelay的地方时间在后台计数任务在延时到了后才暂停,而的delay相当于暂停
volatile UN_TYPE sh; //当前任务段
volatile UN_TYPE sh_next; //下一个任务段,并不代表一定下一任务段一定是他,有可能中间插入延时等任务段
volatile UN_TYPE sh_pre; //前一个任务段,一般为调出缓存任务段使用
vU32 n;
/// volatile UN_TYPE en; //关闭任务,也可以理解为暂停,但是使用idelay的地方时间在后台计数任务在延时到了后才暂停,而的delay相当于暂停
volatile UN_TYPE sh; //当前任务段
volatile UN_TYPE sh_next; //下一个任务段,并不代表一定下一任务段一定是他,有可能中间插入延时等任务段
/// volatile UN_TYPE sh_pre; //前一个任务段,一般为调出缓存任务段使用
}TS_task;
//extern TS_task ts_task_stcadc;
#define D_task_close 0
#define D_task_close 0
#if 0
#define D_task_Tdelay 0x01
#define D_task_stop 0x04
#define D_task_Cdelay 0x09
#define D_task_init 0x10
#define D_task_quit 0xf0
#else
#define TTS_for_add(i,start,len) for((i) = (start); (i) < (len); (i) ++){
#define TTS_for_add_end() }
#define D_task_init 0xf0
#define D_task_Tdelay 0xf1
#define D_task_Cdelay 0xf2
#define D_task_stop 0xf3
#define D_task_quit 0xf4
#endif
//>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>内部调用 s->task
//>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>内部调用 s->task
#define L2_task_delay_over() s->task.sh = s->task.sh_next
#define L2_task_go(next) s->task.sh = next
#define L2_task_en(onf) s->task.en = onf
#define L2_task_go(next) s->task.sh = next;
//#define L2_task_gogogo(next) s->task.sh = next;
#define L2_task_en(onf) s->task.en = onf;
#define L2_task_busy(s) (D_task_close != s.task.sh)
#define L2_task_free(s) (D_task_close == s.task.sh)
#define L2_task_busy(s) (D_task_close != s.task.sh)
#define L2_task_free(s) (D_task_close == s.task.sh)
#define L2_task_go_father() s->task.sh = s->task.sh_pre
#define L2_task_go_son(fun,pre) s->task.sh = fun;s->task.sh_pre = pre
#define L2_task_go_father() s->task.sh = s->task.sh_pre;
#define L2_task_go_son(fun,pre) s->task.sh = fun;s->task.sh_pre = pre;
//>task 定时>>>>>>>>>>>>>>TTSS
/// D_task_Tdelay == task timer delay 需要额外有个定时单元 和time0定时器设置相关
/// Delay_cycle适用于 时间短的,其一次循环取决于主循环的时间,和Tdelay比,Cdelay长时间计时误差大
/// task 定时>>>>>>>>>>>>>>TTSS
/// D_task_Tdelay == task timer delay 需要额外有个定时单元 和time0定时器设置相关
/// Delay_cycle适用于 时间短的,其一次循环取决于主循环的时间,和Tdelay比,Cdelay长时间计时误差大
#define L2_task_switch_default_idelay(); \
case D_task_Tdelay:\
if (s_nos_tick.t_10ms >= s->task.n)\
if (s_nos_tick.jiffies >= s->task.n)\
{\
L2_task_delay_over();\
}\
break; \
case D_task_Cdelay:\
s->task.n--; \
if (s->task.n == 0) \
{ \
s->task.n = 0; \
L2_task_delay_over();\
} \
break;\
default : \
break;
#if 0
#define L2_task_switch_default_idelay2(); \
case D_task_Tdelay:\
if (s_nos_tick.t_10ms >= s->task.n)\
{\
case D_task_Cdelay:\
s->task.n--; \
if (s->task.n == 0) \
{ \
s->task.n = 0; \
L2_task_delay_over();\
}else\
{\
L2_time_beat_heart(D_TBH_ch0,3,'i');\
}\
break; \
case D_task_Cdelay:\
s->task.n--; \
if (s->task.n == 0) \
{ \
s->task.n = 0; \
L2_task_delay_over();\
} \
break;\
} \
break;\
default : \
break;
//在等待的过程中设置间隔时间,定时调用funxx
//这样在等待的空闲时间可以定时显示一些心跳信息和
//执行心跳功能
#define L2_task_switch_fun_idelay(invent,ch) L2_task_switch_default_idelay()
#define L2_task_switch_fun_idelay0000(chhh,invent,funxx); \
case D_task_Tdelay:\
if (s_nos_tick.t_10ms >= s->task.n)\
{\
L2_task_delay_over();\
}else\
{\
L2_time_beat_heart_fun(chhh,invent,funxx);\
}\
break; \
case D_task_Cdelay:\
s->task.n--; \
if (s->task.n == 0) \
{ \
s->task.n = 0; \
L2_task_delay_over();\
} \
break;\
default : \
break;
//在等待的过程中设置间隔时间,定时显示字符ch
//这样在等待的空闲时间可以定时显示一些待机信息ch
// 通过ch表明目前运行的阶段和心跳信息
#define L2_task_switch_flag_idelay(invent,ch) L2_task_switch_default_idelay()
#define L2_task_switch_flag_idelay000(invent,ch); \
case D_task_Tdelay:\
if (s_nos_tick.t_10ms >= s->task.n)\
{\
L2_task_delay_over();\
}else\
{\
L2_time_beat_heart(D_TBH_ch0,invent,ch);\
}\
break; \
case D_task_Cdelay:\
s->task.n--; \
if (s->task.n == 0) \
{ \
s->task.n = 0; \
L2_task_delay_over();\
} \
break;\
default : \
break;
TTSS_Task_init, Highlight
TTSS_Task_step, Highlight
TTSS_Task_end, Highlight
L2_task_go, Highlight
L1_task_Tdelay, Highlight
L1_task_Cdelay, Highlight
L2_task_go, Highlight
#endif
//if(delay_n+s_time0.t_10ms > 655340)
//{s_time0.t_10ms = 0;}
//fix 201312 防止s_time0.t_10ms 溢出
// 但是有风险
//>>L2_task_delay一定要放在L2_task_go之后
//fix 201312 防止s_time0.t_10ms 溢出
// 但是有风险
//>>L2_task_delay一定要放在L2_task_go之后
#define L1_task_Tdelay(delay_n) s->task.sh_next = s->task.sh;\
s->task.sh = D_task_Tdelay;\
s->task.n = (delay_n) + s_nos_tick.t_10ms;
s->task.n = delay_n + s_nos_tick.jiffies;
//>>L2_task_delay一定要放在L2_task_go之后
//>>L2_task_delay一定要放在L2_task_go之后
#define L1_task_Cdelay(delay_n) s->task.sh_next = s->task.sh;\
s->task.sh = D_task_Cdelay;\
s->task.n = (delay_n)
//<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<内部调用 s->task
//>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> 外部调用
s->task.sh = D_task_Cdelay;\
s->task.n = delay_n
#define L2_task_go_Tdelay(next,delay_n) do{ \
if(delay_n) \
{ \
s->task.sh_next = next;\
s->task.sh = D_task_Tdelay;\
s->task.n = (delay_n) + s_nos_tick.jiffies; \
} \
else \
{ \
s->task.sh = next; \
} \
}while(0)
#define L2_task_go_Cdelay(next,delay_n) do{ \
if(delay_n) \
{ \
s->task.sh_next = next;\
s->task.sh = D_task_Cdelay;\
s->task.n = (delay_n); \
} \
else \
{ \
s->task.sh = next; \
} \
}while(0)
//>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> 外部调用
#define L3_task_s_go(s,next) (s).task.sh = next;
#define L2_task_s_go_son(s,fun,pre) (s).task.sh = fun;(s).task.sh_pre = pre;
#define L3_task_s_time_start(s,delay) (s).task.n = delay+s_nos_tick.t_1s;
#define L3_task_s_go(s,next) (s).task.sh = next;
#define L3_task_s_en(s,onf) (s).task.en = onf;
//L1_task_goout(s_task_music.task,D_task_close);
#define L3_task_s_busy(s) (D_task_close != (s).task.sh)
#define L3_task_s_free(s) (D_task_close == (s).task.sh)
#define L3_task_s_step(s) ((s).task.sh)
#define D_task_uc unsigned char
#define D_task_ui unsigned int
///>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
#define TTSS_Task_init() switch(s->task.sh){\
case D_task_init
#define TTSS_Task_step(step) break;\
case (step)
#define TTSS_step01(step) break;case (step)
#define TTSS_step02(step) break;case (step)
#define TTSS_step03(step) break;case (step)
#define TTSS_step04(step) break;case (step)
#define TTSS_step05(step) break;case (step)
#define TTSS_step06(step) break;case (step)
#define TTSS_step07(step) break;case (step)
#define TTSS_step08(step) break;case (step)
#define TTSS_step09(step) break;case (step)
#define TTSS_step10(step) break;case (step)
#define TTSS_step11(step) break;case (step)
#define TTSS_step12(step) break;case (step)
#define TTSS_Task_end(); break;\
L2_task_switch_default_idelay();}
#define TTSS_Task_init(); switch(s->task.sh)\
{\
case D_task_init:{\
#define TTSS_Task_step(step); break;}\
case (step):{
#define TTSS_Task_end(); break;}\
L2_task_switch_default_idelay();}
#define TTSS_Task_fun(step); break;}\
case (step):{
//<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
extern void L1_task_init(TS_task *s);
////>>>>>>>>>>>>>>>>>>>_s_task_test_>>>>>>>>>>>>>>>>>>>>>>>>
#ifdef D_debug_task_test
struct _s_task_test_
{
TS_task task;
};
extern struct _s_task_test_ s_task_test;
extern void L2_task_test_handle(struct _s_task_test_ *s);
extern void L2_task_test_init(void);
#else
#define L2_task_test_handle(x);
#define L2_task_test_init();
#endif//#ifdef D_debug_task_test
////<<<<<<<<<<<<<<<<<<<_s_task_test_<<<<<<<<<<<<<<<<<<<<<<<<
#endif//_TASK_H_
/*****************************************************
*==============================================================
* HISTORY
* HISTORY
* Below this line, this part is controlled by TSTS. DO NOT MODIFY!!
(Task Step by Step Turn by Turn StructureTSTS
(Task Step by Step Turn by Turn StructureTSTS
*==============================================================
****************************************************************************/

127
source/ctask/tick.c

@ -7,127 +7,42 @@
* History
* 2009.05.27 ver 1.00 Prelimnary version, first Release
*2017.01.10 ver 1.10 rename tick.h tick.c
2019.03.11 ver 1.30 25ms
****************************************************************************************/
/*****************************************************
*============================================================================
* HISTORY
* Below this line, this part is controlled by TSTS. DO NOT MODIFY!!
(Task Step by Step Turn by Turn StructureTSTS
*============================================================================
****************************************************************************/
#include "tick.h"
struct _s_nos_tick_ s_nos_tick;
#ifdef D_use_tick_fum
/*********************************************************************************************************
* Function Name: timer0Isr
* Description: TIMER0 中æ­å¤ç彿°
* Input: æ?
* Output: æ?
* Return: æ?
*********************************************************************************************************/
void L1_tick_init(void)
{
s_nos_tick.tp_count = 0;
s_nos_tick.n_stamp = 0;
s_nos_tick.t1s_heatbeart= 0;
/*****
s_nos_tick.t1s_flag[0] = 0;
s_nos_tick.t1s_flag[1] = 0;
s_nos_tick.t1s_flag[2] = 0;
s_nos_tick.t1s_flag[3] = 0;
s_nos_tick.t1s_flag[4] = 0;
s_nos_tick.t1s_flag[5] = 0;
if(L2_tick_time_interval(n_stamp,7*D_Tdelay_1s))
{// 时间溢出
L2_tick_time_stamp(s->t_stamp);
********/
s_nos_tick.t_10ms = 0;
s_nos_tick.jiffies = 0;
s_nos_tick.t_1s = 0;
/// s_nos_tick.flag_1s = 0;
/// s_nos_tick.t_n = 0;
//s_nos_tick.tmp = 0;
//L0_timer0_ONF(1);
}
/// 定时器调用 10ms 一个中断
/// 定时器调用 25ms 一个中断
void L1_tick_tick (void)
{ /// 65535*65535 /3600/24/365=139nian/s=1.39nian/10ms
///相当于1.39年后t_10ms 溢出,对于电池供电的系统而言 完全可以满足
// 4,294,836,225 = 65535*65535 ;3600*24*60*60 = 31,536,000秒/年
s_nos_tick.tp_count++;
s_nos_tick.t_10ms ++;//D_led_D1_REV(); 20160522 验证
if(s_nos_tick.t_10ms%D_TIMER0_1S_COUNT == 0)
{// 65535*65535/24/60/60/356/10 =12.7年
s_nos_tick.t_1s ++;//// 65535*65535/24/60/60/356/10 =12.7年
s_nos_tick.flag_1s2 = 1;
s_nos_tick.t1s_heatbeart = 1;
}
//<<<<<<<<<<<<<<<<<<<<<<
s_nos_tick.t1s_heatbeart= 0;
}
#else
#endif
#if 0
//JIFFIES回绕问题没有解决 �� linux time_after�定义
void L1_tick_tick (void)
{
s_nos_tick.t_n++;
if (s_nos_tick.t_n >= D_TIMER0_10MS_COUNT)// 5500--- 100 10s--556
/// s 5ms 65535*65535 /3600/24/365=139nian/s
// 4,294,836,225 = 65535*65535 ;3600*24*60*60 = 31,536,000秒/年
// fixme:此处 保留了一个百年bug:)
{
///65535*65535/3600/24/365=139nian/s=1.39nian/10ms
///相当于1.39年�t_10ms 溢出,对于电池供电的系统而言 完全�以满足
// 4,294,836,225 = 65535*65535 ;3600*24*60*60 = 31,536,000ç§’/å¹´
//s_nos_tick.t_50ms ++;//D_led_D1_REV(); 20160522验�
s_nos_tick.jiffies++;
if(s_nos_tick.jiffies % HZ == 0)
{
s_nos_tick.t_10ms ++;//D_led_D1_REV(); 20160522 验证
if(s_nos_tick.t_10ms%D_TIMER0_1S_COUNT == 0)
{// 65535*65535/24/60/60/356/10 =12.7年
s_nos_tick.t_1s ++;//
// led_red =~led_red;
//s_nos_tick.t1s_flag[0] = 1;
//s_nos_tick.t1s_flag[1] = 1;
//s_nos_tick.t1s_flag[2] = 1;
//s_nos_tick.t1s_flag[3] = 1;
//s_nos_tick.t1s_flag[4] = 1;
//s_nos_tick.t1s_flag[5] = 1;
s_nos_tick.flag_1s = 1;
s_nos_tick.t1s_heatbeart = 1;
}
s_nos_tick.t_n = 0;
// 65535*65535/24/60/60/356/10 =12.7å¹´
s_nos_tick.t_1s ++;
s_nos_tick.t1s_heatbeart = 1;
}
/*******************
// 0.2mm 4/0.2 = 20 20/60s = 333ms/maicong
// 0.2mm 60s 60 100 ms
// 0.2 6000ms
// 平时为1 水满一次为0
// rain = 1;必须要做的初始化
if(0 == rain)
{
if(1 == s_rain.temp)
{// ````\___
s_rain.pool = s_rain.t;
s_rain.all ++;
s_rain.t = 0;
}
s_rain.temp = 0;
}else
{
s_rain.temp = 1;
}
s_rain.t ++;
******/
//<<<<<<<<<<<<<<<<<<<<<<
}
#endif

218
source/ctask/tick.h

@ -8,202 +8,80 @@
* 2009.05.27 ver 1.00 Prelimnary version, first Release
*2017.01.10 ver 1.10 rename tick.h tick.c
******************************************************************************/
/*****************************************************
*============================================================================
* HISTORY
* Below this line, this part is controlled by TSTS. DO NOT MODIFY!!
(Task Step by Step Turn by Turn StructureTSTS
*============================================================================
****************************************************************************/
#ifndef __tick_H
#define __tick_H
#include "../clib/Type.h"
//#include "../bsp/type_hs.h"
#include "../msp/time.h"
#define D_use_tick_fum
struct _s_nos_tick_
{
vU32 tp_count; //最后一次接收数据时间到目前的tick数量
/// vU32 sys_clock;
// vU32 t_n; // noos系统定时器最小技术单元
vU32 t_10ms; // noos 系统定时器10m技术
#ifdef D_use_tick_fum
//volatile INT32U t_100ms;
vU32 jiffies; // noos系统定时器最小计时单元
vU32 t_1s;
/// vU32 t_10s;
// vU32 t_60s;
vU8 flag_1s;
vU8 flag_1s2;
/// volatile INT32U tmp;
/// volatile INT32U time_left;
/// volatile INT32U h;
/// volatile INT32U m;
vU32 n_stamp;
// vU32 t1s_flag[6]; //fixme: INT32U 根据不同的系统来决定
//volatile unsigned char t1s_flag;
/// vU8 ts_flag;
vU32 n_stamp3;
#endif
vU8 t1s_heatbeart; //noos 系统定时器整秒时刻标志,需要软件清除
vU8 t1s_heatbeart; //noos 系统定时器整秒时刻标志,需要软件清除
};
extern struct _s_nos_tick_ s_nos_tick;
#ifdef D_timer0_10ms
//10ms 不能使用,10ms是最小颗粒时长,存在误差,无法使用
#define D_Tdelay_ms D_TIMER0_10MS_COUNT//D_TIMER0_10MS_COUNT
#define D_Tdelay_10ms 2
#define D_Tdelay_20ms (2+D_Tdelay_ms)
#define D_Tdelay_30ms (3+D_Tdelay_ms)
#define D_Tdelay_40ms (4+D_Tdelay_ms)
#define D_Tdelay_50ms (5+D_Tdelay_ms)
#define D_Tdelay_60ms (6+D_Tdelay_ms)
#define D_Tdelay_80ms (8+D_Tdelay_ms)
#define D_Tdelay_100ms (10+D_Tdelay_ms)
#else
//10ms 不能使用,10ms是最小颗粒时长,存在误差,无法使用
#define D_Tdelay_ms D_TIMER0_10MS_COUNT//D_TIMER0_10MS_COUNT
#define D_Tdelay_10ms 1
#define D_Tdelay_20ms (0+D_Tdelay_ms)
#define D_Tdelay_30ms (0+D_Tdelay_ms)
#define D_Tdelay_40ms (2+D_Tdelay_ms)
#define D_Tdelay_50ms (2+D_Tdelay_ms)
#define D_Tdelay_60ms (2+D_Tdelay_ms)
#define D_Tdelay_80ms (3+D_Tdelay_ms)
#define D_Tdelay_100ms (4+D_Tdelay_ms)
#if(TYPE_JIFFIES_5MS == D_sys_Jiffies)
#define HZ 200
#elif(TYPE_JIFFIES_10MS == D_sys_Jiffies)
#define HZ 100
#elif(TYPE_JIFFIES_25MS == D_sys_Jiffies)
#define HZ 40
#endif
#define D_Tdelay_200ms (D_Tdelay_100ms*2)
#define D_Tdelay_300ms (D_Tdelay_100ms*3)
#define D_Tdelay_400ms (D_Tdelay_100ms*4)
#define D_Tdelay_500ms (D_Tdelay_100ms*5)
#define D_Tdelay_600ms (D_Tdelay_100ms*6)
#define D_Tdelay_700ms (D_Tdelay_100ms*7)
#define D_Tdelay_800ms (D_Tdelay_100ms*8)
#define D_Tdelay_900ms (D_Tdelay_100ms*9)
#define D_Tdelay_1s (D_Tdelay_100ms*10)
#define D_Tdelay_1s2 (D_Tdelay_100ms*12)
#define D_Tdelay_1s5 (D_Tdelay_100ms*15)
#define D_Tdelay_2s (D_Tdelay_100ms*20)
#define D_Tdelay_2s5 (D_Tdelay_100ms*25)
#define D_Tdelay_3s (D_Tdelay_100ms*30)
#define D_Tdelay_5s (D_Tdelay_100ms*50)
#define D_Tdelay_8s (D_Tdelay_100ms*80)
#define D_Tdelay_9s (D_Tdelay_100ms*90)
#define D_Tdelay_10s (D_Tdelay_100ms*100)
#define D_Tdelay_1min (D_Tdelay_1s*60)
#define D_Tdelay_1h (D_Tdelay_1min*60)
#define D_Tdelay_1day (D_Tdelay_1h*24)
#define D_TIMER0_1S_COUNT 100
//#define D_10mS 1//D_TIMER0_10MS_COUNT
//#define D_100mS (D_10mS*10)
//#define D_1S (D_10mS*100)
//>> 定时器: 初始化 间隔时间到
// L0_nos_tick10ms_start(s->times); 开始初始化s->times 以10ms为一个单位
// if( L0_nos_tick10ms_interval(s->times) < 20)// s->times 执行了20次后,也就是 定时20*10m到达
//必须配对
#define L0_nos_tick10ms_start(start_n) start_n = s_nos_tick.t_10ms
#define L0_nos_tick10ms_interval(start_n) (s_nos_tick.t_10ms - start_n)
#define JIFFIES (1000/HZ)
#define D_sys_now (s_nos_tick.jiffies)
//D_sys_delay_msec以jiffies为最小计时单位,jiffies是10ms为例,参数n=12ms时,最终延时了20ms
#define D_sys_delay_msec(n) do{ \
if(n>0) \
{ \
U32 mstmp = D_sys_now; \
while(D_sys_now - mstmp < (((n)-1)/JIFFIES) + 1); \
} \
}while(0)
#define D_Tdelay_Msec(n) (((n)-1) / JIFFIES + 1)
#define D_Tdelay_Sec(n) (((n)*1000-1) /JIFFIES + 1)
#define D_Tdelay_5ms ((5-1) / JIFFIES + 1)
#define D_Tdelay_10ms ((10-1) / JIFFIES + 1)
#define D_Tdelay_100ms ((100-1) / JIFFIES + 1)
#define D_Tdelay_200ms ((200-1) / JIFFIES+ 1)
#define D_Tdelay_300ms ((300-1) / JIFFIES + 1)
#define D_Tdelay_400ms ((400-1) / JIFFIES + 1)
#define D_Tdelay_1s (1 * HZ)
#define D_Tdelay_2s (2 * HZ)
#define D_Tdelay_3s (3 * HZ)
#define D_Tdelay_4s (4 * HZ)
#define D_Tdelay_5s (5 * HZ)
#define D_Tdelay_10s (10 * HZ)
#define D_Tdelay_15s (15 * HZ)
#define D_Tdelay_1min (1 * 60 * HZ)
#define D_Tdelay_10min (10 * 60 * HZ)
#define D_Tdelay_1h (60 * 60 * HZ)
#define D_Tdelay_1day (24 * 60 * 60 * HZ)
//必须配对
#define L0_nos_tick10ms_start(start_n) start_n = s_nos_tick.t_50ms
#define L0_nos_tick10ms_interval(start_n) (s_nos_tick.t_50ms - start_n)
#define L0_nos_tick1s_start(start_n) start_n = s_nos_tick.t_1s
#define L0_nos_tick1s_interval(start_n) (s_nos_tick.t_1s - start_n)
//>>>//必须配对
#define L2_tick_time_stamp(time_stamp) time_stamp = s_nos_tick.t_10ms;
#define L2_tick_time_interval(time_stamp,time_overflow) (( s_nos_tick.t_10ms - time_stamp) > time_overflow)
//>>>//必须配对
#define L2_tick_time_stamp(time_stamp) time_stamp = s_nos_tick.t_50ms;
#define L2_tick_time_interval(time_stamp,time_overflow) (( s_nos_tick.t_50ms - time_stamp) > time_overflow)
#define L3_tick_interval(x) L2_tick_time_interval(s_nos_tick.n_stamp,x)
#define L2_tick_stamp() L2_tick_time_stamp(s_nos_tick.n_stamp);
//>>>示例如下:
#if 0
{
case D_task_init://
Lc_print_buf(" \r\n YL_ init");
s->step = D_AT;
L0_esp_open();
L2_task_go(D_task_YL_ready);
s_uart0_rec.ok = 0;
L2_tick_time_stamp(s->t_stamp);
// L1_task_Tdelay(1*D_Tdelay_1s); //大约6s
break;
case D_task_YL_ready:
if(1 == s_uart0_rec.ok)
{
if(strstr(s_uart0_rec.array,"ready") != NULL)
{
Ldi_print("ready..\r\n");
s->step = D_AT;
L2_task_go(D_task_YL_ask);
}
s_uart0_rec.ok = 0;
}
if(L2_tick_time_stamp(s->t_stamp,1*D_Tdelay_1s))
{// 时间溢出
L0_esp_close();
Ldi_print("fail esp restart.\r\n");
L2_task_go(D_task_init);
L1_task_Tdelay(2*D_Tdelay_1s);
}
break;
}
#endif
// 他和t_10ms 关联,如果t_10ms递增为1时间隔为(D_TIMER0_10MS_COUNT*定时器间隔)
/// #define D_TIMER0_10MS_COUNT 1 //定时器为 10ms一中断
#ifdef D_use_tick_fum
extern void L1_tick_init(void);
extern void L1_tick_tick (void);
#else
#define L1_tick_init()
#define L1_tick_tick() s_nos_tick.t_10ms ++;
#endif
//L2_time_beat_heart(D_TBH_ch1,2,'t')
#define D_TBH_ch0 0
#define D_TBH_ch1 1
#define D_TBH_ch2 2
#define D_TBH_ch3 3
#define D_TBH_ch4 4
#define D_TBH_ch5 5
extern void L2_time_beat_heart(vU32 ch,U8 invent,U8 s);
//void L2_time_beat_heart_fun(INT32U ch,unsigned char invent,void *fun(void));
extern void L2_time_beat_heart_fun(vU32 ch,U8 invent,void (*fun)(void));
#endif /* end __tick_H */
/*****************************************************************************
** End Of File

7
source/debug/cc_as_stc01_main.ini

@ -1,7 +0,0 @@
//MODE COM4 9600,0,8,1
//ASSIGN COM4 < SIN > SOUT
// please "dir vtreg" and show the
MODE COM2 115200,0,8,1
ASSIGN COM2 < S0IN > S0OUT
//MODE COM1 9600,0,8,1
//ASSIGN COM1 < S0IN > S0OUT

6
source/debug/cc_ls_03_debug.ini

@ -1,6 +0,0 @@
//MODE COM4 9600,0,8,1
//ASSIGN COM4 < SIN > SOUT
MODE COM6 9600,0,8,1
ASSIGN COM6 < S0IN > S0OUT
//MODE COM1 9600,0,8,1
//ASSIGN COM1 < S0IN > S0OUT

123
source/debug/debug.ini

@ -1,123 +0,0 @@
MODE COM1 9600,0,8,1
//assign com1 SOUT
ASSIGN COM1 < SIN > SOUT
//ASSIGN WIN <SIN >SOUT
KILL FUNC *
KILL BUTTON *
//swatch(0.5)
DEFINE BUTTON "adc", "adc()"
signal void adc (void) {
// while (1) { /* repeat forever */
P14= 0; /* set PORTA bit 0 */
printf("adc is on\n");
twatch(500);
//} /* repeat */
}
DEFINE BUTTON "k1 ", "k1()"
signal void k1 (void) {
P2.0= 0;
//P20= 0;
printf("K1 down\n");
swatch(0.17);
P2.0= 1;
//P20= 1;
swatch(0.17);
printf("K1 up\n");
}
DEFINE BUTTON "k2 ", "k2()"
signal void k2 (void) {
P2.1= 0;
//P21= 0;
printf("K2 down\n");
swatch(0.17);
P2.1= 1;
//P21= 1;
swatch(0.17);
printf("K2 up\n");
}
DEFINE BUTTON "k3 ", "k3()"
signal void k3 (void) {
P2.2= 0;
//P22= 0;
printf("K3 down\n");
swatch(0.07);
P2.2= 1;
//P22= 1;
swatch(0.07);
printf("K3 up\n");
}
DEFINE BUTTON "kx4 enter/", "kx4()"
signal void kx4 (void) {
P13= 0; /* set PORTA bit 0 */
printf("Kx4 down\n");
swatch(0.07);
P13= 1;
swatch(0.07);
printf("Kx4 up\n");
}
DEFINE BUTTON "<-- kx1_left ", "kx1_left()"
signal void kx1_left (void) {
P12= 0; /* set PORTA bit 0 */
printf("kx1_left down\n");
swatch(0.07);
P11= 0;
swatch(0.07);
P12= 1;
swatch(0.07);
P11= 1;
swatch(0.07);
printf("kx1_left up\n");
}
DEFINE BUTTON "kx1_right--> ", "kx1_right()"
signal void kx1_right (void) {
P11= 0; /* set PORTA bit 0 */
printf("kx1_right down\n");
swatch(0.07);
P12= 0;
swatch(0.07);
P11= 1;
swatch(0.07);
P12= 1;
swatch(0.07);
printf("kx1_right up\n");
}
DEFINE BUTTON "My Registers", "MyRegs()"
FUNC void MyRegs (void) {
printf ("---------- MyRegs() ----------\n");
printf (" R4 R8 R9 R10 R11 R12\n");
printf (" %04X %04X %04X %04X %04X %04X\n",
R0, R1, R2, R3, R4, R5);
printf ("------------------------------\n");
}
//bs write P3,1,"check_moto()"//如果有写p2的动作则会执行这个 signal函数。
//signal void check_moto (void)

45
source/debug/debug2.ini

@ -1,45 +0,0 @@
MODE COM1 9600,0,8,1
//assign com1 SOUT
ASSIGN COM1 < S0IN > S0OUT
//ASSIGN WIN <S0IN >S0OUT
//S0TIME = 0
KILL FUNC *
KILL BUTTON *
//
//AA 70 70 71 72 72 75 74 76 77 78 79 24 55
DEFINE BUTTON "master_send01","master_send01()"
signal void master_send01(void) {
printf("DD\n");
// #define rU0IIR rU0FCR /* share the same address */
//U0IIR =0x02;
// U0THR = 0x33; U0IIR =0x04; twatch(1000);
U0RBR = 0x34; U0IIR =0x04; twatch(1000);
//U0RBR=0xaa;twatch(1000);
//U0RBR=0x70;twatch(1000);
//U0RBR=0x70;twatch(1000);
//U0RBR=0x71;twatch(1000);
}
DEFINE BUTTON "master_send021","master_send021()"
signal void master_send021(void) {
// printf("DD\n");
// #define rU0IIR rU0FCR /* share the same address */
//U0IIR =0x02;
// U0THR = 0x33; U0IIR =0x04; twatch(1000);
U0RBR = 0xAA; twatch(1000);
U0RBR=0x66;twatch(1000);
//U0RBR=0x70;twatch(1000);
//U0RBR=0x70;twatch(1000);
//U0RBR=0x71;twatch(1000);
}

83
source/debug/debug_M3sfy.ini

@ -1,83 +0,0 @@
MODE COM4 115200,0,8,1
//assign com1 SOUT
ASSIGN COM4 < S1IN > S1OUT
//ASSIGN WIN <S0IN >S0OUT
//S0TIME = 0
KILL FUNC *
KILL BUTTON *
DEFINE BUTTON "A","key_up2()"
signal void key_up2(void)
{
//s_task_key_up.sim = 1;
s_task_key_up.down = 1;
twatch(1000);
s_task_key_up.up = 1;
//swatch(0.1);
//swatch (0.05); /* wait 50 milliseconds */
// swatch(0.1);//twatch(1000);
}
DEFINE BUTTON "V","key_down2()"
signal void key_down2(void)
{
//s_task_key_up.sim = 1;
s_task_key_down.down = 1;
twatch(1000);
s_task_key_down.up = 1;
//swatch(0.1);
// swatch(0.1);//twatch(1000);
}
DEFINE BUTTON "key_upanddown","key_upanddown()"
signal void key_upanddown(void)
{
//s_task_key_up.sim = 1;
s_task_key_down.down = 1;
// twatch(10);
s_task_key_up.down = 1;
twatch(1000);
s_task_key_down.up = 1;
// twatch(10);
s_task_key_up.up = 1;
//swatch(0.1);//
twatch(100);
}
DEFINE BUTTON "key_ent2","key_ent2()"
signal void key_ent2(void)
{
//s_task_key_up.sim = 1;
s_task_key_ent.down = 1;
twatch(1000);
s_task_key_ent.up = 1;
}
DEFINE BUTTON "key_clear","key_clear()"
signal void key_clear(void)
{
//s_task_key_up.sim = 1;
s_task_key_up.down = 0;
s_task_key_down.down = 0;
s_task_key_ent.down = 0;
s_task_key_up.up = 0;
s_task_key_down.up = 0;
s_task_key_ent.up = 0;
twatch(1000);
}

54
source/debug/debug_M3sfy2.ini

@ -1,54 +0,0 @@
MODE COM4 115200,0,8,1
//assign com1 SOUT
ASSIGN COM4 < S1IN > S1OUT
//ASSIGN WIN <S0IN >S0OUT
//S0TIME = 0
KILL FUNC *
KILL BUTTON *
//#include "key_ext.h"
DEFINE BUTTON "A","key_up2()"
signal void key_up2(void)
{
s_task_key_ext.value = 1;
twatch(100);
}
DEFINE BUTTON "V","key_down2()"
signal void key_down2(void)
{
s_task_key_ext.value = 2;
twatch(10);
}
DEFINE BUTTON "key_ent2","key_ent2()"
signal void key_ent2(void)
{
s_task_key_ext.value = 0x3;
twatch(10);
}
DEFINE BUTTON "Setup","key_setup()"
signal void key_setup(void)
{
s_task_key_ext.value = 0x12;
twatch(10);
}
DEFINE BUTTON "Adc100","Adc100()"
signal void Adc100(void)
{
s_adc_read.uiV = 100;
twatch(10);
}
DEFINE BUTTON "Adc5000","Adc5000()"
signal void Adc5000(void)
{
s_adc_read.uiV = 5000;
twatch(10);
}

130
source/debug/debug_app.c

@ -1,130 +0,0 @@
/*****************************************************************************
* uart.c: UART API file for NXP LPC17xx Family Microprocessors
*
* Copyright(C) 2013, cc
* All rights reserved.
*
* History
* 2013.05.24 ver 1.00 Prelimnary version, first Release
*
******************************************************************************/
#include "target_cfg.h"
#include "type.h"
#include "time.h"
#include "uart.h"
//#include "..\Sensor.h"
#include "debug_app.h"
struct _s_task_debug_led_ s_task_debug_led;
void L2_task_debug_led_init(void)
{
D_P1_OUT(15);
D_P1_OFF(15); //ָʾµÆ
D_P1_OUT(16);
D_P1_OFF(16); //ָʾµÆ
while(0)
{
D_P1_OFF(15) ;
L0_delay_ms(600);
D_P1_ON(15) ;
L0_delay_ms(600);
L0_debugS_uc('a'); L0_USART_print(UART_debug,"\r\n");
// L2_oled_main();
}
L3_task_s_go(s_task_debug_led,D_task_debug_led_init);
}
void L2_task_debug_led_handdle(struct _s_task_debug_led_ *s)
{
switch(s->task.sh)
{
case D_task_debug_led_init://
L0_USART_print(UART_debug,"\r\n s_task_debug_led ");
L2_task_go(D_task_debug_led_key);
break;
case D_task_debug_led_key :
D_P1_ON(15);
L0_debugS_uc('^');
L2_task_go(D_task_debug_led_key2);
L1_task_idelay(D_idelay_1s);
// L0_oled_point(60,50,0x00);
//L2_debug_Au4B48347975);
break;
case D_task_debug_led_key2 :
D_P1_OFF(15);
//L0_debugS_uc('~');
#if 0
if((s->x ++)> 64)s->x =0;
if((s->y ++)> 48)s->y =0;
L0_oled_point(s->x,s->y,0xff);
#else
// L0_oled_point(60,50,0xff);
#endif
L2_task_go(D_task_debug_led_key);
L1_task_idelay(D_idelay_1s);
//L2_debug_Au4B1234567);
break;
L2_task_switch_default_idelay();
}
}
void L1_debug_rx_handle(struct _s_protocol_ *p)
{
// unsigned int i;
p->cashe[0] = p->rbr;//
if(p->num > D_s_protocol_len)
{
p->num = 0;
p->buf[p->num] = p->cashe[0];
}else
{
p->buf[p->num] = p->cashe[0];
p->num ++;
}
}
struct _s_uart_config_ s_debug_config;
#define D_debug_buf s_debug_config.puart_config->st->buf
#define D_debug_buf_d(x) s_debug_config.puart_config->st->buf[(x)]
#define D_debug_num (s_debug_config.puart_config->st->num)
void L1_debug_init(void)
{
ts_uart1.L1_uart_rx_handle = L1_debug_rx_handle;
ts_uart1.st = (struct _s_protocol_ *)&s_at1;
s_debug_config.usart = 1;
s_debug_config.puart_config = &ts_uart1;
s_debug_config.type = 0;
#if 0
while(9)
{
if(D_debug_num >= 1)
{
L0_Usend_uc(s_debug_config.usart,D_debug_buf_d(0));
D_debug_num = 0;
}
}
#endif
}
//>>>>>>>>>>>>>>>>>>>>> debug led task

44
source/debug/debug_app.h

@ -1,44 +0,0 @@
/*****************************************************************************
* uart.h: Header file for NXP LPC17xx Family Microprocessors
*
* Copyright(C) 2013, cc
* All rights reserved.
*
* History
* 2013.05.24 ver 1.00 Prelimnary version, first Release
*
******************************************************************************/
#ifndef __DEBUG_APP_H
#define __DEBUG_APP_H
#include "LPC17xxcc.h"
#include "LPC17xxzlg.h"
#include "LPC17xx_macro.h"
#include "Task.h"
#include "time.h"
#include "debug_drv.h"
struct _s_task_debug_led_
{
_ts_task task;
unsigned char x;
unsigned char y;
};
extern struct _s_task_debug_led_ s_task_debug_led;
#define D_task_debug_led_init 0x10
#define D_task_debug_led_key 0x11
#define D_task_debug_led_key2 0x12
void L2_task_debug_led_init(void);
extern void L2_task_debug_led_handdle(struct _s_task_debug_led_ *s);
extern void L1_debug_init(void);
#endif /* end __DEBUG_APP_H */
/*****************************************************************************
** End Of File
******************************************************************************/

48
source/debug/debug_drv.c

@ -1,48 +0,0 @@
/*****************************************************************************
* debug_drv.c: debug app
*
* Copyright(C) 2013, cc
* All rights reserved.
*
* History
* 2013.05.24 ver 1.00 Prelimnary version, first Release
*
******************************************************************************/
#include "debug_drv.h"
void L3_debug_drv_init(void)
{
L0pf_send_uc = L0_uart0_uc;
Lc_print("\r\n debug shell init:\t");
/// io ÉèÖõıê׼д·¨
Lc_print("Mode:");
#ifdef D_debug_time
Lc_print(" debug");
#else
//D_debug_time_using
Lc_print(" normal");
#endif
}
#ifdef D_debug_sim
fff
void L3_debug_cycle(void)
{
INTERRUPT_UART();
TIMER0_IRQHandler();
}
#else
#endif
/******************************************************************************
** End Of File
******************************************************************************/

85
source/debug/debug_drv.h

@ -1,85 +0,0 @@
/*****************************************************************************
* DEBUG_DRV.h: Header file for DEBUY DRIVER FILES
*
*
* Copyright(C) 2013, cc
* All rights reserved.
*
* History
* 2013.05.24 ver 1.00 Prelimnary version, first Release
******************************************************************************/
#ifndef __DEBUG_DRV_H
#define __DEBUG_DRV_H
#include "../clib/type.h"
#include "../clib/clib.h"
#include "../clib/uartlib.h"
#include "../msp/uart0.h"
#include "debug_led.h"
void L3_debug_drv_init(void);
#define L3_debug_time() L0pf_send_uc = L0_uart0_uc; ///Lc_print("\r\n%s,-%sL:%d,",__DATE__,__TIME__,__LINE__);
extern void L3_debug_cycle(void);
#if 0
#define UART_debug_reg ((LPC_UART1_TypeDef *) LPC_UART1_BASE )
//#define UART_debug ((LPC_UART1_TypeDef *) LPC_UART1_BASE )
//#define UART_debug ((LPC_UART_TypeDef *) LPC_UART_BASE )
//#define UART_debug ((LPC_UART_TypeDef *) LPC_UART_BASE )
#define UART_debug 1
#define L0_debugS_uc(x) //L0_Usend_uc(UART_debug,x)
#define L0_debugS_uc_hex(x) //L0_Usend_uc_hex(UART_debug,x)
#define L0_debug_uc_show(x,y); //L0_USART_print(UART_debug,x,y);
#define L0_debug_us_show(x,y); //L0_USART_print(UART_debug,x,y);
#define L0_debug_ul_show(x,y); //L0_USART_print(UART_debug,x,y);
//#define L2_debug_info(x) //L0_USART_print(UART_debug,x);
#define L2_debug_Au4B(x) // L0_Usend_Au4B(UART_debug,x)
#define L0_debug_Au4B_show(x,y); //L0_USART_print(UART_debug,x,y);
#define L0_debug_Aus_show(x,y); //L0_USART_print(UART_debug,x,y);
#define L0_debug_A4B_show(x,y); //L0_USART_print(UART_debug,x,y);
//#define debug22(format...) Lc_print("%s (%d): ",__FILE__,__LINE__);
//#define LOG(format, args...) Lc_print(format, ##args)
//#define RTA_printf(...) Lc_print(__VA_ARGS__)
//#define L2_debug_info Lc_print
//#define L3_debug_time() Lc_print(L0_uart0_uc,"\r\n%s,-%sL:%d,",__DATE__,__TIME__,__LINE__);
#define L2_debug_info(...) \
Lc_print(L0_uart_uc,__VA_ARGS__);
//do {
//Lc_print("%s (%d): ", __FILE__, __LINE__);
//Lc_print(format, __VA_ARGS__);
//} while (0)
#define CHECK1(x, ...) if (!(x)) { printf(__VA_ARGS__); }
#define LOG(...) {\
Lc_print(L0_uart_uc,"%s: Line %d:\t", __FILE__, __LINE__);\
Lc_print(L0_uart_uc, __VA_ARGS__);\
Lc_print(L0_uart_uc,"\n");\
}
int main() {
int x = 3;
// һЩ´úÂë...
LOG("x = %d", x); // 2-1-5.cpp: Line 12: x = 3
}
#endif
#endif /* end __DEBUG_DRV_H */
/*****************************************************************************
** End Of File
******************************************************************************/

37
source/debug/debug_led.c

@ -1,37 +0,0 @@
/*****************************************************************************
* debug_drv.c: debug app
*
* Copyright(C) 2013, cc
* All rights reserved.
*
* History
* 2013.05.24 ver 1.00 Prelimnary version, first Release
*
È¡¾öÓÚÓ²¼þ°æ±¾ CC-ACC-VH02
******************************************************************************/
#include "debug_led.h"
void L3_debug_led_init(void)
{
D_led_THB_init();
D_led_debug_init();
//D_led_D0_init();
D_led_D1_init();
D_led_D2_init();
//while(0)
{
D_led_THB_REV();
D_led_debug_REV();
D_led_D1_REV();
D_led_D2_REV();
}
}
/******************************************************************************
** End Of File
******************************************************************************/

Some files were not shown because too many files changed in this diff

Loading…
Cancel
Save