From 91399c2e8f362250fefa352023b4e9a215c7986e Mon Sep 17 00:00:00 2001
From: forbelief <1023299899@qq.com>
Date: Fri, 15 Apr 2016 17:08:43 +0800
Subject: [PATCH] init commit
---
.gitignore | 12 +
plan_manage.eww | 10 +
.../config_files/128KB_Pflash.icf | 47 +
plan_manage_main/config_files/16KB_RAM.icf | 41 +
plan_manage_main/config_files/32KB_Pflash.icf | 48 +
plan_manage_main/config_files/4KB_RAM.icf | 41 +
plan_manage_main/config_files/64KB_Pflash.icf | 47 +
plan_manage_main/config_files/8KB_RAM.icf | 41 +
plan_manage_main/ewp/plan_manage_main.dep | 1262 +++
plan_manage_main/ewp/plan_manage_main.ewd | 2697 +++++++
plan_manage_main/ewp/plan_manage_main.ewp | 2236 ++++++
plan_manage_main/ewp/plan_manage_main.ewt | 514 ++
.../settings/plan_manage_main.Debug.cspy.bat | 24 +
.../ewp/settings/plan_manage_main.crun | 16 +
.../ewp/settings/plan_manage_main.dbgdt | 97 +
.../ewp/settings/plan_manage_main.dni | 72 +
.../ewp/settings/plan_manage_main_Debug.jlink | 35 +
plan_manage_main/src/app/debug.c | 201 +
plan_manage_main/src/app/display.c | 0
plan_manage_main/src/app/flash.c | 0
plan_manage_main/src/app/include/config.h | 52 +
plan_manage_main/src/app/include/debug.h | 53 +
plan_manage_main/src/app/include/display.h | 0
plan_manage_main/src/app/include/flash.h | 0
plan_manage_main/src/app/include/input.h | 37 +
plan_manage_main/src/app/include/isr.h | 48 +
plan_manage_main/src/app/include/key.h | 57 +
plan_manage_main/src/app/include/knob.h | 56 +
plan_manage_main/src/app/include/output.h | 0
.../src/app/include/plan_handle.h | 0
plan_manage_main/src/app/include/pm_init.h | 9 +
.../src/app/include/simulat_timer.h | 107 +
plan_manage_main/src/app/include/tft.h | 25 +
plan_manage_main/src/app/include/time.h | 0
plan_manage_main/src/app/input.c | 0
plan_manage_main/src/app/isr.c | 57 +
plan_manage_main/src/app/key.c | 338 +
plan_manage_main/src/app/knob.c | 95 +
plan_manage_main/src/app/main.c | 56 +
plan_manage_main/src/app/output.c | 0
plan_manage_main/src/app/plan_handle.c | 0
plan_manage_main/src/app/pm_init.c | 20 +
plan_manage_main/src/app/simulat_timer.c | 153 +
plan_manage_main/src/app/tft.c | 417 +
plan_manage_main/src/app/time.c | 0
plan_manage_main/src/common/alloc.c | 126 +
plan_manage_main/src/common/assert.c | 28 +
plan_manage_main/src/common/common.c | 57 +
plan_manage_main/src/common/io.c | 39 +
plan_manage_main/src/common/memtest.c | 221 +
plan_manage_main/src/common/printf.c | 609 ++
plan_manage_main/src/common/queue.c | 124 +
plan_manage_main/src/common/startup.c | 108 +
plan_manage_main/src/common/stdlib.c | 396 +
plan_manage_main/src/common/uif.c | 329 +
plan_manage_main/src/cpu/arm_cm0.c | 181 +
plan_manage_main/src/cpu/crt0.s | 30 +
plan_manage_main/src/cpu/start.c | 30 +
plan_manage_main/src/cpu/sysinit.c | 45 +
plan_manage_main/src/cpu/vectors.c | 189 +
plan_manage_main/src/drivers/SPI.c | 147 +
plan_manage_main/src/drivers/adc.c | 294 +
plan_manage_main/src/drivers/cmp.c | 133 +
plan_manage_main/src/drivers/dac.c | 105 +
plan_manage_main/src/drivers/dma.c | 130 +
plan_manage_main/src/drivers/gpio.c | 138 +
plan_manage_main/src/drivers/i2c.c | 443 +
plan_manage_main/src/drivers/lptmr.c | 168 +
plan_manage_main/src/drivers/mcg.c | 367 +
plan_manage_main/src/drivers/pit.c | 186 +
plan_manage_main/src/drivers/port.c | 63 +
plan_manage_main/src/drivers/rtc.c | 59 +
plan_manage_main/src/drivers/systick.c | 118 +
plan_manage_main/src/drivers/tick_timer.c | 64 +
plan_manage_main/src/drivers/tpm.c | 506 ++
plan_manage_main/src/drivers/tsi.c | 129 +
plan_manage_main/src/drivers/uart.c | 429 +
plan_manage_main/src/include/common/assert.h | 25 +
plan_manage_main/src/include/common/common.h | 152 +
plan_manage_main/src/include/common/io.h | 29 +
plan_manage_main/src/include/common/memtest.h | 42 +
plan_manage_main/src/include/common/queue.h | 53 +
plan_manage_main/src/include/common/startup.h | 25 +
plan_manage_main/src/include/common/typedef.h | 43 +
plan_manage_main/src/include/common/uif.h | 137 +
plan_manage_main/src/include/cpu/MKL25Z4.h | 7129 +++++++++++++++++
plan_manage_main/src/include/cpu/arm_cm0.h | 85 +
.../src/include/cpu/dma_channels.h | 138 +
plan_manage_main/src/include/cpu/sysinit.h | 21 +
plan_manage_main/src/include/cpu/vectors.h | 144 +
.../include/drivers/Fire_kinetis_MCG_CFG.h | 524 ++
plan_manage_main/src/include/drivers/SPI.h | 84 +
plan_manage_main/src/include/drivers/adc.h | 131 +
plan_manage_main/src/include/drivers/cmp.h | 57 +
plan_manage_main/src/include/drivers/dac.h | 84 +
plan_manage_main/src/include/drivers/dma.h | 146 +
.../src/include/drivers/fire_drivers_cfg.h | 90 +
plan_manage_main/src/include/drivers/gpio.h | 106 +
.../src/include/drivers/gpio_cfg.h | 875 ++
plan_manage_main/src/include/drivers/i2c.h | 49 +
.../src/include/drivers/i2c_cfg.h | 52 +
.../src/include/drivers/include.h | 28 +
plan_manage_main/src/include/drivers/lptmr.h | 98 +
plan_manage_main/src/include/drivers/mcg.h | 98 +
.../src/include/drivers/mcg_cfg.h | 121 +
plan_manage_main/src/include/drivers/pit.h | 81 +
plan_manage_main/src/include/drivers/port.h | 80 +
plan_manage_main/src/include/drivers/rtc.h | 23 +
.../src/include/drivers/systick.h | 50 +
.../src/include/drivers/tick_timer.h | 52 +
plan_manage_main/src/include/drivers/tpm.h | 116 +
plan_manage_main/src/include/drivers/tsi.h | 95 +
plan_manage_main/src/include/drivers/uart.h | 38 +
.../src/include/platforms/freedom.h | 56 +
.../src/include/platforms/tower.h | 69 +
plan_manage_main/src/other/LandzoOLED.c | 1040 +++
plan_manage_main/src/other/LandzoOLED.h | 37 +
settings/plan_manage.wsdt | 79 +
settings/plan_manage.wspos | 2 +
119 files changed, 27396 insertions(+)
create mode 100644 .gitignore
create mode 100644 plan_manage.eww
create mode 100644 plan_manage_main/config_files/128KB_Pflash.icf
create mode 100644 plan_manage_main/config_files/16KB_RAM.icf
create mode 100644 plan_manage_main/config_files/32KB_Pflash.icf
create mode 100644 plan_manage_main/config_files/4KB_RAM.icf
create mode 100644 plan_manage_main/config_files/64KB_Pflash.icf
create mode 100644 plan_manage_main/config_files/8KB_RAM.icf
create mode 100644 plan_manage_main/ewp/plan_manage_main.dep
create mode 100644 plan_manage_main/ewp/plan_manage_main.ewd
create mode 100644 plan_manage_main/ewp/plan_manage_main.ewp
create mode 100644 plan_manage_main/ewp/plan_manage_main.ewt
create mode 100644 plan_manage_main/ewp/settings/plan_manage_main.Debug.cspy.bat
create mode 100644 plan_manage_main/ewp/settings/plan_manage_main.crun
create mode 100644 plan_manage_main/ewp/settings/plan_manage_main.dbgdt
create mode 100644 plan_manage_main/ewp/settings/plan_manage_main.dni
create mode 100644 plan_manage_main/ewp/settings/plan_manage_main_Debug.jlink
create mode 100644 plan_manage_main/src/app/debug.c
create mode 100644 plan_manage_main/src/app/display.c
create mode 100644 plan_manage_main/src/app/flash.c
create mode 100644 plan_manage_main/src/app/include/config.h
create mode 100644 plan_manage_main/src/app/include/debug.h
create mode 100644 plan_manage_main/src/app/include/display.h
create mode 100644 plan_manage_main/src/app/include/flash.h
create mode 100644 plan_manage_main/src/app/include/input.h
create mode 100644 plan_manage_main/src/app/include/isr.h
create mode 100644 plan_manage_main/src/app/include/key.h
create mode 100644 plan_manage_main/src/app/include/knob.h
create mode 100644 plan_manage_main/src/app/include/output.h
create mode 100644 plan_manage_main/src/app/include/plan_handle.h
create mode 100644 plan_manage_main/src/app/include/pm_init.h
create mode 100644 plan_manage_main/src/app/include/simulat_timer.h
create mode 100644 plan_manage_main/src/app/include/tft.h
create mode 100644 plan_manage_main/src/app/include/time.h
create mode 100644 plan_manage_main/src/app/input.c
create mode 100644 plan_manage_main/src/app/isr.c
create mode 100644 plan_manage_main/src/app/key.c
create mode 100644 plan_manage_main/src/app/knob.c
create mode 100644 plan_manage_main/src/app/main.c
create mode 100644 plan_manage_main/src/app/output.c
create mode 100644 plan_manage_main/src/app/plan_handle.c
create mode 100644 plan_manage_main/src/app/pm_init.c
create mode 100644 plan_manage_main/src/app/simulat_timer.c
create mode 100644 plan_manage_main/src/app/tft.c
create mode 100644 plan_manage_main/src/app/time.c
create mode 100644 plan_manage_main/src/common/alloc.c
create mode 100644 plan_manage_main/src/common/assert.c
create mode 100644 plan_manage_main/src/common/common.c
create mode 100644 plan_manage_main/src/common/io.c
create mode 100644 plan_manage_main/src/common/memtest.c
create mode 100644 plan_manage_main/src/common/printf.c
create mode 100644 plan_manage_main/src/common/queue.c
create mode 100644 plan_manage_main/src/common/startup.c
create mode 100644 plan_manage_main/src/common/stdlib.c
create mode 100644 plan_manage_main/src/common/uif.c
create mode 100644 plan_manage_main/src/cpu/arm_cm0.c
create mode 100644 plan_manage_main/src/cpu/crt0.s
create mode 100644 plan_manage_main/src/cpu/start.c
create mode 100644 plan_manage_main/src/cpu/sysinit.c
create mode 100644 plan_manage_main/src/cpu/vectors.c
create mode 100644 plan_manage_main/src/drivers/SPI.c
create mode 100644 plan_manage_main/src/drivers/adc.c
create mode 100644 plan_manage_main/src/drivers/cmp.c
create mode 100644 plan_manage_main/src/drivers/dac.c
create mode 100644 plan_manage_main/src/drivers/dma.c
create mode 100644 plan_manage_main/src/drivers/gpio.c
create mode 100644 plan_manage_main/src/drivers/i2c.c
create mode 100644 plan_manage_main/src/drivers/lptmr.c
create mode 100644 plan_manage_main/src/drivers/mcg.c
create mode 100644 plan_manage_main/src/drivers/pit.c
create mode 100644 plan_manage_main/src/drivers/port.c
create mode 100644 plan_manage_main/src/drivers/rtc.c
create mode 100644 plan_manage_main/src/drivers/systick.c
create mode 100644 plan_manage_main/src/drivers/tick_timer.c
create mode 100644 plan_manage_main/src/drivers/tpm.c
create mode 100644 plan_manage_main/src/drivers/tsi.c
create mode 100644 plan_manage_main/src/drivers/uart.c
create mode 100644 plan_manage_main/src/include/common/assert.h
create mode 100644 plan_manage_main/src/include/common/common.h
create mode 100644 plan_manage_main/src/include/common/io.h
create mode 100644 plan_manage_main/src/include/common/memtest.h
create mode 100644 plan_manage_main/src/include/common/queue.h
create mode 100644 plan_manage_main/src/include/common/startup.h
create mode 100644 plan_manage_main/src/include/common/typedef.h
create mode 100644 plan_manage_main/src/include/common/uif.h
create mode 100644 plan_manage_main/src/include/cpu/MKL25Z4.h
create mode 100644 plan_manage_main/src/include/cpu/arm_cm0.h
create mode 100644 plan_manage_main/src/include/cpu/dma_channels.h
create mode 100644 plan_manage_main/src/include/cpu/sysinit.h
create mode 100644 plan_manage_main/src/include/cpu/vectors.h
create mode 100644 plan_manage_main/src/include/drivers/Fire_kinetis_MCG_CFG.h
create mode 100644 plan_manage_main/src/include/drivers/SPI.h
create mode 100644 plan_manage_main/src/include/drivers/adc.h
create mode 100644 plan_manage_main/src/include/drivers/cmp.h
create mode 100644 plan_manage_main/src/include/drivers/dac.h
create mode 100644 plan_manage_main/src/include/drivers/dma.h
create mode 100644 plan_manage_main/src/include/drivers/fire_drivers_cfg.h
create mode 100644 plan_manage_main/src/include/drivers/gpio.h
create mode 100644 plan_manage_main/src/include/drivers/gpio_cfg.h
create mode 100644 plan_manage_main/src/include/drivers/i2c.h
create mode 100644 plan_manage_main/src/include/drivers/i2c_cfg.h
create mode 100644 plan_manage_main/src/include/drivers/include.h
create mode 100644 plan_manage_main/src/include/drivers/lptmr.h
create mode 100644 plan_manage_main/src/include/drivers/mcg.h
create mode 100644 plan_manage_main/src/include/drivers/mcg_cfg.h
create mode 100644 plan_manage_main/src/include/drivers/pit.h
create mode 100644 plan_manage_main/src/include/drivers/port.h
create mode 100644 plan_manage_main/src/include/drivers/rtc.h
create mode 100644 plan_manage_main/src/include/drivers/systick.h
create mode 100644 plan_manage_main/src/include/drivers/tick_timer.h
create mode 100644 plan_manage_main/src/include/drivers/tpm.h
create mode 100644 plan_manage_main/src/include/drivers/tsi.h
create mode 100644 plan_manage_main/src/include/drivers/uart.h
create mode 100644 plan_manage_main/src/include/platforms/freedom.h
create mode 100644 plan_manage_main/src/include/platforms/tower.h
create mode 100644 plan_manage_main/src/other/LandzoOLED.c
create mode 100644 plan_manage_main/src/other/LandzoOLED.h
create mode 100644 settings/plan_manage.wsdt
create mode 100644 settings/plan_manage.wspos
diff --git a/.gitignore b/.gitignore
new file mode 100644
index 0000000..bbc4d5f
--- /dev/null
+++ b/.gitignore
@@ -0,0 +1,12 @@
+/plan_manage_main/out
+/plan_manage_main/Debug
+
+
+*.swp
+.*
+
+
+
+!.gitignore
+
+
diff --git a/plan_manage.eww b/plan_manage.eww
new file mode 100644
index 0000000..c34460a
--- /dev/null
+++ b/plan_manage.eww
@@ -0,0 +1,10 @@
+
+
+
+
+ $WS_DIR$\plan_manage_main\ewp\plan_manage_main.ewp
+
+
+
+
+
diff --git a/plan_manage_main/config_files/128KB_Pflash.icf b/plan_manage_main/config_files/128KB_Pflash.icf
new file mode 100644
index 0000000..0e7d704
--- /dev/null
+++ b/plan_manage_main/config_files/128KB_Pflash.icf
@@ -0,0 +1,47 @@
+/*###ICF### Section handled by ICF editor, don't touch! ****/
+/*-Editor annotation file-*/
+/* IcfEditorFile="$TOOLKIT_DIR$\config\ide\IcfEditor\cortex_v1_0.xml" */
+/*-Specials-*/
+define symbol __ICFEDIT_intvec_start__ = 0x00000000;
+/*-Memory Regions-*/
+define symbol __ICFEDIT_region_ROM_start__ = 0x000000C0;
+define symbol __ICFEDIT_region_ROM_end__ = 0x0001FFFF;
+define symbol __ICFEDIT_region_RAM_start__ = 0x1FFFF0C0;
+define symbol __ICFEDIT_region_RAM_end__ = 0x1FFFFFFF;
+/*-Sizes-*/
+define symbol __ICFEDIT_size_cstack__ = 0x400;
+define symbol __ICFEDIT_size_heap__ = 0x400;
+/**** End of ICF editor section. ###ICF###*/
+
+define symbol __region_RAM2_start__ = 0x20000000;
+define symbol __region_RAM2_end__ = 0x20002FFF;
+
+define symbol __FlashConfig_start__ = 0x00000400;
+define symbol __FlashConfig_end__ = 0x0000040f;
+
+define exported symbol __VECTOR_TABLE = 0x00000000;
+define exported symbol __VECTOR_RAM = 0x1FFFF000;
+
+define memory mem with size = 4G;
+define region ROM_region = mem:[from __ICFEDIT_region_ROM_start__ to __FlashConfig_start__-1] | [from __FlashConfig_end__+1 to __ICFEDIT_region_ROM_end__];
+define region RAM_region = mem:[from __ICFEDIT_region_RAM_start__ to __ICFEDIT_region_RAM_end__] | [from __region_RAM2_start__ to __region_RAM2_end__];
+define region FlashConfig_region = mem:[from __FlashConfig_start__ to __FlashConfig_end__];
+
+define block CSTACK with alignment = 8, size = __ICFEDIT_size_cstack__ { };
+define block HEAP with alignment = 8, size = __ICFEDIT_size_heap__ { };
+
+initialize manually { readwrite };
+initialize manually { section .data};
+initialize manually { section .textrw };
+do not initialize { section .noinit };
+
+define block CodeRelocate { section .textrw_init };
+define block CodeRelocateRam { section .textrw };
+
+place at address mem:__ICFEDIT_intvec_start__ { readonly section .intvec };
+
+place in ROM_region { readonly, block CodeRelocate};
+
+place in RAM_region { readwrite, block CodeRelocateRam,
+ block CSTACK, block HEAP };
+place in FlashConfig_region {section FlashConfig};
diff --git a/plan_manage_main/config_files/16KB_RAM.icf b/plan_manage_main/config_files/16KB_RAM.icf
new file mode 100644
index 0000000..a48a30a
--- /dev/null
+++ b/plan_manage_main/config_files/16KB_RAM.icf
@@ -0,0 +1,41 @@
+/*###ICF### Section handled by ICF editor, don't touch! ****/
+/*-Editor annotation file-*/
+/* IcfEditorFile="$TOOLKIT_DIR$\config\ide\IcfEditor\cortex_v1_0.xml" */
+/*-Specials-*/
+define symbol __ICFEDIT_intvec_start__ = 0x1FFFF000;
+/*-Memory Regions-*/
+define symbol __ICFEDIT_region_ROM_start__ = 0x00000000;
+define symbol __ICFEDIT_region_ROM_end__ = 0x00000000;
+define symbol __ICFEDIT_region_RAM_start__ = 0x1FFFF0C0;
+define symbol __ICFEDIT_region_RAM_end__ = 0x1FFFFFFF;
+/*-Sizes-*/
+define symbol __ICFEDIT_size_cstack__ = 0x400;
+define symbol __ICFEDIT_size_heap__ = 0x400;
+/**** End of ICF editor section. ###ICF###*/
+
+define symbol __region_RAM2_start__ = 0x20000000;
+define symbol __region_RAM2_end__ = 0x20002FFF;
+
+define exported symbol __VECTOR_TABLE = __ICFEDIT_intvec_start__;
+define exported symbol __VECTOR_RAM = __ICFEDIT_intvec_start__;
+
+define memory mem with size = 4G;
+define region RAM_region = mem:[from __ICFEDIT_region_RAM_start__ to __ICFEDIT_region_RAM_end__] | [from __region_RAM2_start__ to __region_RAM2_end__];
+
+define block CSTACK with alignment = 8, size = __ICFEDIT_size_cstack__ { };
+define block HEAP with alignment = 8, size = __ICFEDIT_size_heap__ { };
+
+initialize manually { readwrite };
+initialize manually { section .data};
+initialize manually { section .textrw };
+do not initialize { section .noinit };
+
+define block CodeRelocate { section .textrw_init };
+define block CodeRelocateRam { section .textrw };
+
+place at address mem:__ICFEDIT_intvec_start__ { readonly section .intvec };
+
+place in RAM_region { readonly, block CodeRelocate};
+
+place in RAM_region { readwrite, block CodeRelocateRam,
+ block CSTACK, block HEAP };
diff --git a/plan_manage_main/config_files/32KB_Pflash.icf b/plan_manage_main/config_files/32KB_Pflash.icf
new file mode 100644
index 0000000..fec1293
--- /dev/null
+++ b/plan_manage_main/config_files/32KB_Pflash.icf
@@ -0,0 +1,48 @@
+/*###ICF### Section handled by ICF editor, don't touch! ****/
+/*-Editor annotation file-*/
+/* IcfEditorFile="$TOOLKIT_DIR$\config\ide\IcfEditor\cortex_v1_0.xml" */
+/*-Specials-*/
+define symbol __ICFEDIT_intvec_start__ = 0x00000000;
+/*-Memory Regions-*/
+define symbol __ICFEDIT_region_ROM_start__ = 0x000000C0;
+define symbol __ICFEDIT_region_ROM_end__ = 0x00007FFF;
+define symbol __ICFEDIT_region_RAM_start__ = 0x1FFFFCC0;
+define symbol __ICFEDIT_region_RAM_end__ = 0x1FFFFFFF;
+/*-Sizes-*/
+define symbol __ICFEDIT_size_cstack__ = 0x400;
+define symbol __ICFEDIT_size_heap__ = 0x400;
+/**** End of ICF editor section. ###ICF###*/
+
+define symbol __region_RAM2_start__ = 0x20000000;
+define symbol __region_RAM2_end__ = 0x20000BFF;
+
+define symbol __FlashConfig_start__ = 0x00000400;
+define symbol __FlashConfig_end__ = 0x0000040f;
+
+define exported symbol __VECTOR_TABLE = 0x00000000;
+define exported symbol __VECTOR_RAM = 0x1FFFFC00;
+
+define memory mem with size = 4G;
+define region ROM_region = mem:[from __ICFEDIT_region_ROM_start__ to __FlashConfig_start__-1] | [from __FlashConfig_end__+1 to __ICFEDIT_region_ROM_end__];
+define region RAM_region = mem:[from __ICFEDIT_region_RAM_start__ to __ICFEDIT_region_RAM_end__] | [from __region_RAM2_start__ to __region_RAM2_end__];
+define region FlashConfig_region = mem:[from __FlashConfig_start__ to __FlashConfig_end__];
+
+define block CSTACK with alignment = 8, size = __ICFEDIT_size_cstack__ { };
+define block HEAP with alignment = 8, size = __ICFEDIT_size_heap__ { };
+
+initialize manually { readwrite };
+initialize manually { section .data};
+initialize manually { section .textrw };
+do not initialize { section .noinit };
+
+define block CodeRelocate { section .textrw_init };
+define block CodeRelocateRam { section .textrw };
+
+place at address mem:__ICFEDIT_intvec_start__ { readonly section .intvec };
+
+place in ROM_region { readonly, block CodeRelocate};
+
+place in RAM_region { readwrite, block CodeRelocateRam,
+ block CSTACK, block HEAP };
+
+place in FlashConfig_region {section FlashConfig};
\ No newline at end of file
diff --git a/plan_manage_main/config_files/4KB_RAM.icf b/plan_manage_main/config_files/4KB_RAM.icf
new file mode 100644
index 0000000..19747e8
--- /dev/null
+++ b/plan_manage_main/config_files/4KB_RAM.icf
@@ -0,0 +1,41 @@
+/*###ICF### Section handled by ICF editor, don't touch! ****/
+/*-Editor annotation file-*/
+/* IcfEditorFile="$TOOLKIT_DIR$\config\ide\IcfEditor\cortex_v1_0.xml" */
+/*-Specials-*/
+define symbol __ICFEDIT_intvec_start__ = 0x1FFFFC00;
+/*-Memory Regions-*/
+define symbol __ICFEDIT_region_ROM_start__ = 0x00000000;
+define symbol __ICFEDIT_region_ROM_end__ = 0x00000000;
+define symbol __ICFEDIT_region_RAM_start__ = 0x1FFFFCC0;
+define symbol __ICFEDIT_region_RAM_end__ = 0x1FFFFFFF;
+/*-Sizes-*/
+define symbol __ICFEDIT_size_cstack__ = 0x400;
+define symbol __ICFEDIT_size_heap__ = 0x400;
+/**** End of ICF editor section. ###ICF###*/
+
+define symbol __region_RAM2_start__ = 0x20000000;
+define symbol __region_RAM2_end__ = 0x20000BFF;
+
+define exported symbol __VECTOR_TABLE = __ICFEDIT_intvec_start__;
+define exported symbol __VECTOR_RAM = __ICFEDIT_intvec_start__;
+
+define memory mem with size = 4G;
+define region RAM_region = mem:[from __ICFEDIT_region_RAM_start__ to __ICFEDIT_region_RAM_end__] | [from __region_RAM2_start__ to __region_RAM2_end__];
+
+define block CSTACK with alignment = 8, size = __ICFEDIT_size_cstack__ { };
+define block HEAP with alignment = 8, size = __ICFEDIT_size_heap__ { };
+
+initialize manually { readwrite };
+initialize manually { section .data};
+initialize manually { section .textrw };
+do not initialize { section .noinit };
+
+define block CodeRelocate { section .textrw_init };
+define block CodeRelocateRam { section .textrw };
+
+place at address mem:__ICFEDIT_intvec_start__ { readonly section .intvec };
+
+place in RAM_region { readonly, block CodeRelocate};
+
+place in RAM_region { readwrite, block CodeRelocateRam,
+ block CSTACK, block HEAP };
diff --git a/plan_manage_main/config_files/64KB_Pflash.icf b/plan_manage_main/config_files/64KB_Pflash.icf
new file mode 100644
index 0000000..bc6b4ba
--- /dev/null
+++ b/plan_manage_main/config_files/64KB_Pflash.icf
@@ -0,0 +1,47 @@
+/*###ICF### Section handled by ICF editor, don't touch! ****/
+/*-Editor annotation file-*/
+/* IcfEditorFile="$TOOLKIT_DIR$\config\ide\IcfEditor\cortex_v1_0.xml" */
+/*-Specials-*/
+define symbol __ICFEDIT_intvec_start__ = 0x00000000;
+/*-Memory Regions-*/
+define symbol __ICFEDIT_region_ROM_start__ = 0x000000C0;
+define symbol __ICFEDIT_region_ROM_end__ = 0x0000FFFF;
+define symbol __ICFEDIT_region_RAM_start__ = 0x1FFFF8C0;
+define symbol __ICFEDIT_region_RAM_end__ = 0x1FFFFFFF;
+/*-Sizes-*/
+define symbol __ICFEDIT_size_cstack__ = 0x400;
+define symbol __ICFEDIT_size_heap__ = 0x400;
+/**** End of ICF editor section. ###ICF###*/
+
+define symbol __region_RAM2_start__ = 0x20000000;
+define symbol __region_RAM2_end__ = 0x200017FF;
+
+define symbol __FlashConfig_start__ = 0x00000400;
+define symbol __FlashConfig_end__ = 0x0000040f;
+
+define exported symbol __VECTOR_TABLE = 0x00000000;
+define exported symbol __VECTOR_RAM = 0x1FFFF800;
+
+define memory mem with size = 4G;
+define region ROM_region = mem:[from __ICFEDIT_region_ROM_start__ to __FlashConfig_start__-1] | [from __FlashConfig_end__+1 to __ICFEDIT_region_ROM_end__];
+define region RAM_region = mem:[from __ICFEDIT_region_RAM_start__ to __ICFEDIT_region_RAM_end__] | [from __region_RAM2_start__ to __region_RAM2_end__];
+define region FlashConfig_region = mem:[from __FlashConfig_start__ to __FlashConfig_end__];
+
+define block CSTACK with alignment = 8, size = __ICFEDIT_size_cstack__ { };
+define block HEAP with alignment = 8, size = __ICFEDIT_size_heap__ { };
+
+initialize manually { readwrite };
+initialize manually { section .data};
+initialize manually { section .textrw };
+do not initialize { section .noinit };
+
+define block CodeRelocate { section .textrw_init };
+define block CodeRelocateRam { section .textrw };
+
+place at address mem:__ICFEDIT_intvec_start__ { readonly section .intvec };
+
+place in ROM_region { readonly, block CodeRelocate};
+
+place in RAM_region { readwrite, block CodeRelocateRam,
+ block CSTACK, block HEAP };
+place in FlashConfig_region {section FlashConfig};
diff --git a/plan_manage_main/config_files/8KB_RAM.icf b/plan_manage_main/config_files/8KB_RAM.icf
new file mode 100644
index 0000000..dc5e493
--- /dev/null
+++ b/plan_manage_main/config_files/8KB_RAM.icf
@@ -0,0 +1,41 @@
+/*###ICF### Section handled by ICF editor, don't touch! ****/
+/*-Editor annotation file-*/
+/* IcfEditorFile="$TOOLKIT_DIR$\config\ide\IcfEditor\cortex_v1_0.xml" */
+/*-Specials-*/
+define symbol __ICFEDIT_intvec_start__ = 0x1FFFF800;
+/*-Memory Regions-*/
+define symbol __ICFEDIT_region_ROM_start__ = 0x00000000;
+define symbol __ICFEDIT_region_ROM_end__ = 0x00000000;
+define symbol __ICFEDIT_region_RAM_start__ = 0x1FFFF8C0;
+define symbol __ICFEDIT_region_RAM_end__ = 0x1FFFFFFF;
+/*-Sizes-*/
+define symbol __ICFEDIT_size_cstack__ = 0x400;
+define symbol __ICFEDIT_size_heap__ = 0x400;
+/**** End of ICF editor section. ###ICF###*/
+
+define symbol __region_RAM2_start__ = 0x20000000;
+define symbol __region_RAM2_end__ = 0x200017FF;
+
+define exported symbol __VECTOR_TABLE = __ICFEDIT_intvec_start__;
+define exported symbol __VECTOR_RAM = __ICFEDIT_intvec_start__;
+
+define memory mem with size = 4G;
+define region RAM_region = mem:[from __ICFEDIT_region_RAM_start__ to __ICFEDIT_region_RAM_end__] | [from __region_RAM2_start__ to __region_RAM2_end__];
+
+define block CSTACK with alignment = 8, size = __ICFEDIT_size_cstack__ { };
+define block HEAP with alignment = 8, size = __ICFEDIT_size_heap__ { };
+
+initialize manually { readwrite };
+initialize manually { section .data};
+initialize manually { section .textrw };
+do not initialize { section .noinit };
+
+define block CodeRelocate { section .textrw_init };
+define block CodeRelocateRam { section .textrw };
+
+place at address mem:__ICFEDIT_intvec_start__ { readonly section .intvec };
+
+place in RAM_region { readonly, block CodeRelocate};
+
+place in RAM_region { readwrite, block CodeRelocateRam,
+ block CSTACK, block HEAP };
diff --git a/plan_manage_main/ewp/plan_manage_main.dep b/plan_manage_main/ewp/plan_manage_main.dep
new file mode 100644
index 0000000..0f9305c
--- /dev/null
+++ b/plan_manage_main/ewp/plan_manage_main.dep
@@ -0,0 +1,1262 @@
+
+
+
+ 2
+ 1290675525
+
+ Debug
+
+ $PROJ_DIR$\..\src\app\include\config.h
+ $PROJ_DIR$\..\src\app\include\debug.h
+ $PROJ_DIR$\..\src\app\include\display.h
+ $PROJ_DIR$\..\src\app\include\flash.h
+ $PROJ_DIR$\..\src\app\include\input.h
+ $PROJ_DIR$\..\src\app\include\isr.h
+ $PROJ_DIR$\..\src\app\include\key.h
+ $PROJ_DIR$\..\src\app\include\knob.h
+ $PROJ_DIR$\..\src\app\include\output.h
+ $PROJ_DIR$\..\src\app\include\plan_handle.h
+ $PROJ_DIR$\..\src\app\include\setup.h
+ $PROJ_DIR$\..\src\app\include\simulat_timer.h
+ $PROJ_DIR$\..\src\app\include\tft.h
+ $PROJ_DIR$\..\src\app\include\time.h
+ $PROJ_DIR$\..\src\app\debug.c
+ $PROJ_DIR$\..\src\app\display.c
+ $PROJ_DIR$\..\src\app\flash.c
+ $PROJ_DIR$\..\src\app\input.c
+ $PROJ_DIR$\..\src\app\isr.c
+ $PROJ_DIR$\..\src\app\key.c
+ $PROJ_DIR$\..\src\app\knob.c
+ $PROJ_DIR$\..\src\app\main.c
+ $PROJ_DIR$\..\src\app\output.c
+ $PROJ_DIR$\..\src\app\plan_handle.c
+ $PROJ_DIR$\..\src\include\drivers\include.h
+ $PROJ_DIR$\..\src\include\drivers\lptmr.h
+ $PROJ_DIR$\..\src\include\drivers\mcg.h
+ $PROJ_DIR$\..\src\include\drivers\mcg_cfg.h
+ $PROJ_DIR$\..\src\include\drivers\pit.h
+ $PROJ_DIR$\..\src\include\drivers\port.h
+ $PROJ_DIR$\..\src\include\drivers\rtc.h
+ $PROJ_DIR$\..\src\include\drivers\SPI.h
+ $PROJ_DIR$\..\src\include\drivers\systick.h
+ $PROJ_DIR$\..\src\include\drivers\tick_timer.h
+ $PROJ_DIR$\..\src\include\drivers\tpm.h
+ $PROJ_DIR$\..\src\include\drivers\tsi.h
+ $PROJ_DIR$\..\src\include\drivers\uart.h
+ $PROJ_DIR$\..\src\include\platforms\freedom.h
+ $PROJ_DIR$\..\src\include\platforms\tower.h
+ $PROJ_DIR$\..\src\other\LandzoOLED.c
+ $PROJ_DIR$\..\src\other\LandzoOLED.h
+ $PROJ_DIR$\..\Debug\Obj\startup.pbi
+ $PROJ_DIR$\..\Debug\Obj\stdlib.pbi
+ $PROJ_DIR$\..\Debug\Obj\queue.pbi
+ $PROJ_DIR$\..\Debug\Obj\gpio.pbi
+ $PROJ_DIR$\..\Debug\Obj\mcg.pbi
+ $PROJ_DIR$\..\Debug\Obj\i2c.pbi
+ $PROJ_DIR$\..\Debug\Obj\lptmr.pbi
+ $PROJ_DIR$\..\Debug\Obj\pit.pbi
+ $TOOLKIT_DIR$\inc\c\stdarg.h
+ $PROJ_DIR$\..\Debug\Obj\uif.pbi
+ $PROJ_DIR$\..\Debug\Obj\port.pbi
+ $PROJ_DIR$\..\Debug\Obj\rtc.pbi
+ $PROJ_DIR$\..\Debug\Obj\SPI.pbi
+ $PROJ_DIR$\..\Debug\Obj\systick.pbi
+ $PROJ_DIR$\..\Debug\Obj\tick_timer.pbi
+ $PROJ_DIR$\..\Debug\Obj\tpm.pbi
+ $PROJ_DIR$\..\Debug\Obj\tsi.pbi
+ $PROJ_DIR$\..\Debug\Obj\knob.o
+ $PROJ_DIR$\..\Debug\Obj\key.o
+ $PROJ_DIR$\..\Debug\Obj\isr.o
+ $PROJ_DIR$\..\Debug\Obj\input.o
+ $PROJ_DIR$\..\Debug\Obj\tft.o
+ $PROJ_DIR$\..\Debug\Obj\time.o
+ $PROJ_DIR$\..\Debug\Obj\plan_handle.o
+ $PROJ_DIR$\..\Debug\Obj\display.o
+ $PROJ_DIR$\..\Debug\Obj\simulat_timer.o
+ $PROJ_DIR$\..\Debug\Obj\output.o
+ $PROJ_DIR$\..\Debug\Obj\debug.o
+ $PROJ_DIR$\..\Debug\Obj\flash.o
+ $PROJ_DIR$\..\Debug\Obj\uart.pbi
+ $PROJ_DIR$\..\Debug\Obj\LandzoOLED.o
+ $PROJ_DIR$\..\Debug\Obj\LandzoOLED.pbi
+ $PROJ_DIR$\..\Debug\Obj\adc.o
+ $PROJ_DIR$\..\Debug\Obj\dma.o
+ $PROJ_DIR$\..\Debug\Obj\cmp.o
+ $PROJ_DIR$\..\Debug\Obj\dac.o
+ $PROJ_DIR$\..\Debug\Obj\gpio.o
+ $PROJ_DIR$\..\Debug\Obj\i2c.o
+ $PROJ_DIR$\..\Debug\Obj\lptmr.o
+ $PROJ_DIR$\..\Debug\Obj\mcg.o
+ $PROJ_DIR$\..\Debug\Obj\pit.o
+ $PROJ_DIR$\..\Debug\Obj\port.o
+ $PROJ_DIR$\..\Debug\Obj\rtc.o
+ $PROJ_DIR$\..\src\app\pm_init.c
+ $PROJ_DIR$\..\src\app\simulat_timer.c
+ $PROJ_DIR$\..\src\app\tft.c
+ $PROJ_DIR$\..\src\app\time.c
+ $PROJ_DIR$\..\src\common\alloc.c
+ $PROJ_DIR$\..\src\common\assert.c
+ $PROJ_DIR$\..\src\common\common.c
+ $PROJ_DIR$\..\src\common\io.c
+ $PROJ_DIR$\..\src\common\memtest.c
+ $PROJ_DIR$\..\src\common\printf.c
+ $PROJ_DIR$\..\src\common\queue.c
+ $PROJ_DIR$\..\src\common\startup.c
+ $PROJ_DIR$\..\src\common\stdlib.c
+ $PROJ_DIR$\..\src\common\uif.c
+ $PROJ_DIR$\..\src\cpu\arm_cm0.c
+ $PROJ_DIR$\..\src\cpu\crt0.s
+ $PROJ_DIR$\..\src\cpu\start.c
+ $PROJ_DIR$\..\src\cpu\sysinit.c
+ $PROJ_DIR$\..\src\cpu\vectors.c
+ $PROJ_DIR$\..\src\drivers\adc.c
+ $PROJ_DIR$\..\src\drivers\cmp.c
+ $PROJ_DIR$\..\src\drivers\dac.c
+ $PROJ_DIR$\..\src\drivers\dma.c
+ $PROJ_DIR$\..\src\drivers\gpio.c
+ $PROJ_DIR$\..\src\drivers\i2c.c
+ $PROJ_DIR$\..\src\drivers\lptmr.c
+ $PROJ_DIR$\..\src\drivers\mcg.c
+ $PROJ_DIR$\..\src\drivers\pit.c
+ $PROJ_DIR$\..\src\drivers\port.c
+ $PROJ_DIR$\..\src\drivers\rtc.c
+ $PROJ_DIR$\..\src\drivers\SPI.c
+ $PROJ_DIR$\..\src\drivers\systick.c
+ $PROJ_DIR$\..\src\drivers\tick_timer.c
+ $PROJ_DIR$\..\src\drivers\tpm.c
+ $PROJ_DIR$\..\src\drivers\tsi.c
+ $PROJ_DIR$\..\src\drivers\uart.c
+ $PROJ_DIR$\..\src\include\common\assert.h
+ $PROJ_DIR$\..\src\include\common\common.h
+ $PROJ_DIR$\..\src\include\common\io.h
+ $PROJ_DIR$\..\src\include\common\memtest.h
+ $PROJ_DIR$\..\src\include\common\queue.h
+ $PROJ_DIR$\..\src\include\common\startup.h
+ $PROJ_DIR$\..\src\include\common\stdlib.h
+ $PROJ_DIR$\..\src\include\common\typedef.h
+ $PROJ_DIR$\..\src\include\common\uif.h
+ $PROJ_DIR$\..\src\include\cpu\arm_cm0.h
+ $PROJ_DIR$\..\src\include\cpu\MKL25Z4.h
+ $PROJ_DIR$\..\src\include\cpu\sysinit.h
+ $PROJ_DIR$\..\src\include\cpu\vectors.h
+ $PROJ_DIR$\..\src\include\drivers\adc.h
+ $PROJ_DIR$\..\src\include\drivers\cmp.h
+ $PROJ_DIR$\..\src\include\drivers\dac.h
+ $PROJ_DIR$\..\src\include\drivers\dma.h
+ $PROJ_DIR$\..\src\include\drivers\fire_drivers_cfg.h
+ $PROJ_DIR$\..\src\include\drivers\Fire_kinetis_MCG_CFG.h
+ $PROJ_DIR$\..\src\include\drivers\gpio_cfg.h
+ $PROJ_DIR$\..\src\include\drivers\gpio.h
+ $PROJ_DIR$\..\src\include\drivers\i2c.h
+ $PROJ_DIR$\..\src\include\drivers\i2c_cfg.h
+ $PROJ_DIR$\..\Debug\Obj\queue.o
+ $PROJ_DIR$\..\Debug\Obj\startup.o
+ $PROJ_DIR$\..\Debug\Obj\stdlib.o
+ $PROJ_DIR$\..\Debug\Obj\uif.o
+ $PROJ_DIR$\..\Debug\Obj\alloc.pbi
+ $PROJ_DIR$\..\Debug\Obj\assert.pbi
+ $PROJ_DIR$\..\Debug\Obj\common.pbi
+ $PROJ_DIR$\..\Debug\Obj\io.pbi
+ $PROJ_DIR$\..\Debug\Obj\memtest.pbi
+ $PROJ_DIR$\..\Debug\Obj\printf.pbi
+ $TOOLKIT_DIR$\inc\c\string.h
+ $TOOLKIT_DIR$\inc\c\DLib_Product_string.h
+ $PROJ_DIR$\..\Debug\Obj\SPI.o
+ $PROJ_DIR$\..\Debug\Obj\systick.o
+ $PROJ_DIR$\..\Debug\Obj\tick_timer.o
+ $PROJ_DIR$\..\Debug\Obj\tpm.o
+ $PROJ_DIR$\..\Debug\Obj\tsi.o
+ $PROJ_DIR$\..\Debug\Obj\uart.o
+ $PROJ_DIR$\..\Debug\Obj\adc.pbi
+ $PROJ_DIR$\..\Debug\Obj\cmp.pbi
+ $PROJ_DIR$\..\Debug\Obj\dma.pbi
+ $PROJ_DIR$\..\Debug\Obj\dac.pbi
+ $PROJ_DIR$\..\Debug\Obj\start.o
+ $PROJ_DIR$\..\Debug\Obj\arm_cm0.o
+ $PROJ_DIR$\..\Debug\Obj\vectors.o
+ $PROJ_DIR$\..\Debug\Obj\sysinit.o
+ $PROJ_DIR$\..\Debug\Obj\crt0.o
+ $PROJ_DIR$\..\Debug\Obj\arm_cm0.pbi
+ $PROJ_DIR$\..\Debug\Obj\start.pbi
+ $PROJ_DIR$\..\Debug\Obj\sysinit.pbi
+ $PROJ_DIR$\..\Debug\Obj\vectors.pbi
+ $TOOLKIT_DIR$\lib\m6M_tl.a
+ $PROJ_DIR$\..\config_files\128KB_Pflash.icf
+ $TOOLKIT_DIR$\lib\dl6M_tln.a
+ $TOOLKIT_DIR$\lib\shb_l.a
+ $TOOLKIT_DIR$\lib\rt6M_tl.a
+ $PROJ_DIR$\..\Debug\Obj\pm_init.o
+ $PROJ_DIR$\..\Debug\Obj\pm_init.pbi
+ $PROJ_DIR$\..\src\app\include\pm_init.h
+ $PROJ_DIR$\..\Debug\Obj\knob.pbi
+ $TOOLKIT_DIR$\inc\c\DLib_Config_Normal.h
+ $PROJ_DIR$\..\Debug\Obj\output.pbi
+ $PROJ_DIR$\..\Debug\Obj\time.pbi
+ $PROJ_DIR$\..\Debug\Obj\plan_manage_main.pbd
+ $PROJ_DIR$\..\Debug\Exe\plan_manage_main.out
+ $PROJ_DIR$\..\Debug\Obj\tft.pbi
+ $TOOLKIT_DIR$\inc\c\stdint.h
+ $PROJ_DIR$\..\Debug\Obj\simulat_timer.pbi
+ $PROJ_DIR$\..\Debug\Obj\plan_handle.pbi
+ $TOOLKIT_DIR$\inc\c\yvals.h
+ $TOOLKIT_DIR$\inc\c\ycheck.h
+ $TOOLKIT_DIR$\inc\c\stdio.h
+ $TOOLKIT_DIR$\inc\c\DLib_Defaults.h
+ $TOOLKIT_DIR$\inc\c\DLib_Product.h
+ $TOOLKIT_DIR$\inc\c\xencoding_limits.h
+ $TOOLKIT_DIR$\inc\c\DLib_Threads.h
+ $TOOLKIT_DIR$\inc\c\ysizet.h
+ $TOOLKIT_DIR$\inc\c\ystdio.h
+ $PROJ_DIR$\..\Debug\Obj\debug.pbi
+ $PROJ_DIR$\..\Debug\Obj\display.pbi
+ $PROJ_DIR$\..\Debug\Obj\key.pbi
+ $PROJ_DIR$\..\Debug\Obj\isr.pbi
+ $PROJ_DIR$\..\Debug\Obj\input.pbi
+ $PROJ_DIR$\..\Debug\Obj\flash.pbi
+ $PROJ_DIR$\..\Debug\Obj\main.pbi
+ $PROJ_DIR$\..\Debug\Obj\main.o
+ $PROJ_DIR$\..\Debug\Obj\alloc.o
+ $PROJ_DIR$\..\Debug\Obj\assert.o
+ $PROJ_DIR$\..\Debug\Obj\io.o
+ $PROJ_DIR$\..\Debug\Obj\common.o
+ $PROJ_DIR$\..\Debug\Obj\memtest.o
+ $PROJ_DIR$\..\Debug\Obj\printf.o
+ $TOOLKIT_DIR$\inc\c\stdlib.h
+
+
+ [ROOT_NODE]
+
+
+ ILINK
+ 187
+
+
+
+
+ $PROJ_DIR$\..\src\app\debug.c
+
+
+ BICOMP
+ 201
+
+
+ ICCARM
+ 68
+
+
+
+
+ BICOMP
+ 189 193 192 195 183 196 197 198 24 121 130 120 122 123 124 126 128 127 37 26 138 129 132 125 131 139 29 137 140 36 141 142 133 25 28 34 136 1 0
+
+
+ ICCARM
+ 189 193 192 195 183 196 197 198 24 121 130 120 122 123 124 215 199 128 127 37 26 138 129 132 125 131 139 29 137 140 36 141 142 133 25 28 34 136 1 0
+
+
+
+
+ $PROJ_DIR$\..\src\app\display.c
+
+
+ BICOMP
+ 202
+
+
+ ICCARM
+ 65
+
+
+
+
+ $PROJ_DIR$\..\src\app\flash.c
+
+
+ BICOMP
+ 206
+
+
+ ICCARM
+ 69
+
+
+
+
+ $PROJ_DIR$\..\src\app\input.c
+
+
+ BICOMP
+ 205
+
+
+ ICCARM
+ 61
+
+
+
+
+ $PROJ_DIR$\..\src\app\isr.c
+
+
+ BICOMP
+ 204
+
+
+ ICCARM
+ 60
+
+
+
+
+ BICOMP
+ 194 193 192 195 183 196 197 198 199 200 24 121 130 189 120 122 123 124 126 128 127 37 26 138 129 132 125 131 139 29 137 140 36 141 142 133 25 28 34 136 5 11 1 0 7
+
+
+ ICCARM
+ 194 193 192 195 183 196 197 198 199 200 24 121 130 189 120 122 123 124 215 128 127 37 26 138 129 132 125 131 139 29 137 140 36 141 142 133 25 28 34 136 5 11 1 0 7
+
+
+
+
+ $PROJ_DIR$\..\src\app\key.c
+
+
+ BICOMP
+ 203
+
+
+ ICCARM
+ 59
+
+
+
+
+ BICOMP
+ 189 193 192 195 183 196 197 198 24 121 130 120 122 123 124 126 128 127 37 26 138 129 132 125 131 139 29 137 140 36 141 142 133 25 28 34 136 6 0
+
+
+ ICCARM
+ 189 193 192 195 183 196 197 198 24 121 130 120 122 123 124 215 199 128 127 37 26 138 129 132 125 131 139 29 137 140 36 141 142 133 25 28 34 136 6 0
+
+
+
+
+ $PROJ_DIR$\..\src\app\knob.c
+
+
+ BICOMP
+ 182
+
+
+ ICCARM
+ 58
+
+
+
+
+ BICOMP
+ 189 193 192 195 183 196 197 198 24 121 130 120 122 123 124 126 128 127 37 26 138 129 132 125 131 139 29 137 140 36 141 142 133 25 28 34 136 7 0
+
+
+ ICCARM
+ 189 193 192 195 183 196 197 198 24 121 130 120 122 123 124 215 199 128 127 37 26 138 129 132 125 131 139 29 137 140 36 141 142 133 25 28 34 136 7 0
+
+
+
+
+ $PROJ_DIR$\..\src\app\main.c
+
+
+ BICOMP
+ 207
+
+
+ ICCARM
+ 208
+
+
+
+
+ BICOMP
+ 194 193 192 195 183 196 197 198 199 200 126 181 11 189 6 7 129 132
+
+
+ ICCARM
+ 194 193 192 195 183 196 197 198 199 200 215 181 11 189 6 7 129 132
+
+
+
+
+ $PROJ_DIR$\..\src\app\output.c
+
+
+ BICOMP
+ 184
+
+
+ ICCARM
+ 67
+
+
+
+
+ $PROJ_DIR$\..\src\app\plan_handle.c
+
+
+ BICOMP
+ 191
+
+
+ ICCARM
+ 64
+
+
+
+
+ $PROJ_DIR$\..\src\other\LandzoOLED.c
+
+
+ BICOMP
+ 72
+
+
+ ICCARM
+ 71
+
+
+
+
+ BICOMP
+ 40 24 121 130 189 193 192 195 183 196 197 198 120 122 123 124 126 128 127 37 26 138 129 132 125 131 139 29 137 140 36 141 142 133 25 28 34 136
+
+
+ ICCARM
+ 40 24 121 130 189 193 192 195 183 196 197 198 120 122 123 124 215 199 128 127 37 26 138 129 132 125 131 139 29 137 140 36 141 142 133 25 28 34 136
+
+
+
+
+ $PROJ_DIR$\..\src\app\pm_init.c
+
+
+ BICOMP
+ 180
+
+
+ ICCARM
+ 179
+
+
+
+
+ BICOMP
+ 11 189 193 192 195 183 196 197 198 6 7 129 132 1
+
+
+ ICCARM
+ 11 189 193 192 195 183 196 197 198 6 7 129 132 1
+
+
+
+
+ $PROJ_DIR$\..\src\app\simulat_timer.c
+
+
+ BICOMP
+ 190
+
+
+ ICCARM
+ 66
+
+
+
+
+ BICOMP
+ 24 121 130 189 193 192 195 183 196 197 198 120 122 123 124 126 128 127 37 26 138 129 132 125 131 139 29 137 140 36 141 142 133 25 28 34 136 11 0
+
+
+ ICCARM
+ 24 121 130 189 193 192 195 183 196 197 198 120 122 123 124 215 199 128 127 37 26 138 129 132 125 131 139 29 137 140 36 141 142 133 25 28 34 136 11 0
+
+
+
+
+ $PROJ_DIR$\..\src\app\tft.c
+
+
+ BICOMP
+ 188
+
+
+ ICCARM
+ 62
+
+
+
+
+ BICOMP
+ 189 193 192 195 183 196 197 198 153 199 154 194 200 36 121 130 120 122 123 124 215 128 127 37 26 138 129 132 125 131 139 29 24 140 141 142 133 25 28 34 136 137 12 7 6 0
+
+
+ ICCARM
+ 189 193 192 195 183 196 197 198 153 199 154 194 200 36 121 130 120 122 123 124 215 128 127 37 26 138 129 132 125 131 139 29 24 140 141 142 133 25 28 34 136 137 12 7 6 0
+
+
+
+
+ $PROJ_DIR$\..\src\app\time.c
+
+
+ BICOMP
+ 185
+
+
+ ICCARM
+ 63
+
+
+
+
+ $PROJ_DIR$\..\src\common\alloc.c
+
+
+ BICOMP
+ 147
+
+
+ ICCARM
+ 209
+
+
+
+
+ BICOMP
+ 121 130 189 193 192 195 183 196 197 198 120 122 123 124 126 128 127 37 26 138 129 132 125 131 139 29 24 140 36 141 142 133 25 28 34 136 137
+
+
+ ICCARM
+ 121 130 189 193 192 195 183 196 197 198 120 122 123 124 215 199 128 127 37 26 138 129 132 125 131 139 29 24 140 36 141 142 133 25 28 34 136 137
+
+
+
+
+ $PROJ_DIR$\..\src\common\assert.c
+
+
+ BICOMP
+ 148
+
+
+ ICCARM
+ 210
+
+
+
+
+ BICOMP
+ 121 130 189 193 192 195 183 196 197 198 120 122 123 124 126 128 127 37 26 138 129 132 125 131 139 29 24 140 36 141 142 133 25 28 34 136 137
+
+
+ ICCARM
+ 121 130 189 193 192 195 183 196 197 198 120 122 123 124 215 199 128 127 37 26 138 129 132 125 131 139 29 24 140 36 141 142 133 25 28 34 136 137
+
+
+
+
+ $PROJ_DIR$\..\src\common\common.c
+
+
+ BICOMP
+ 149
+
+
+ ICCARM
+ 212
+
+
+
+
+ BICOMP
+ 121 130 189 193 192 195 183 196 197 198 120 122 123 124 126 128 127 37 26 138 129 132 125 131 139 29 24 140 36 141 142 133 25 28 34 136 137
+
+
+ ICCARM
+ 121 130 189 193 192 195 183 196 197 198 120 122 123 124 215 199 128 127 37 26 138 129 132 125 131 139 29 24 140 36 141 142 133 25 28 34 136 137
+
+
+
+
+ $PROJ_DIR$\..\src\common\io.c
+
+
+ BICOMP
+ 150
+
+
+ ICCARM
+ 211
+
+
+
+
+ BICOMP
+ 121 130 189 193 192 195 183 196 197 198 120 122 123 124 126 128 127 37 26 138 129 132 125 131 139 29 24 140 36 141 142 133 25 28 34 136 137
+
+
+ ICCARM
+ 121 130 189 193 192 195 183 196 197 198 120 122 123 124 215 199 128 127 37 26 138 129 132 125 131 139 29 24 140 36 141 142 133 25 28 34 136 137
+
+
+
+
+ $PROJ_DIR$\..\src\common\memtest.c
+
+
+ BICOMP
+ 151
+
+
+ ICCARM
+ 213
+
+
+
+
+ BICOMP
+ 123
+
+
+ ICCARM
+ 123
+
+
+
+
+ $PROJ_DIR$\..\src\common\printf.c
+
+
+ BICOMP
+ 152
+
+
+ ICCARM
+ 214
+
+
+
+
+ BICOMP
+ 121 130 189 193 192 195 183 196 197 198 120 122 123 124 126 128 127 37 26 138 129 132 125 131 139 29 24 140 36 141 142 133 25 28 34 136 137 49
+
+
+ ICCARM
+ 121 130 189 193 192 195 183 196 197 198 120 122 123 124 215 199 128 127 37 26 138 129 132 125 131 139 29 24 140 36 141 142 133 25 28 34 136 137
+
+
+
+
+ $PROJ_DIR$\..\src\common\queue.c
+
+
+ BICOMP
+ 43
+
+
+ ICCARM
+ 143
+
+
+
+
+ BICOMP
+ 121 130 189 193 192 195 183 196 197 198 120 122 123 124 126 128 127 37 26 138 129 132 125 131 139 29 24 140 36 141 142 133 25 28 34 136 137
+
+
+ ICCARM
+ 121 130 189 193 192 195 183 196 197 198 120 122 123 124 215 199 128 127 37 26 138 129 132 125 131 139 29 24 140 36 141 142 133 25 28 34 136 137
+
+
+
+
+ $PROJ_DIR$\..\src\common\startup.c
+
+
+ BICOMP
+ 41
+
+
+ ICCARM
+ 144
+
+
+
+
+ BICOMP
+ 121 130 189 193 192 195 183 196 197 198 120 122 123 124 126 128 127 37 26 138 129 132 125 131 139 29 24 140 36 141 142 133 25 28 34 136 137
+
+
+ ICCARM
+ 121 130 189 193 192 195 183 196 197 198 120 122 123 124 215 199 128 127 37 26 138 129 132 125 131 139 29 24 140 36 141 142 133 25 28 34 136 137
+
+
+
+
+ $PROJ_DIR$\..\src\common\stdlib.c
+
+
+ BICOMP
+ 42
+
+
+ ICCARM
+ 145
+
+
+
+
+ BICOMP
+ 121 130 189 193 192 195 183 196 197 198 120 122 123 124 126 128 127 37 26 138 129 132 125 131 139 29 24 140 36 141 142 133 25 28 34 136 137
+
+
+ ICCARM
+ 121 130 189 193 192 195 183 196 197 198 120 122 123 124 126 128 127 37 26 138 129 132 125 131 139 29 24 140 36 141 142 133 25 28 34 136 137
+
+
+
+
+ $PROJ_DIR$\..\src\common\uif.c
+
+
+ BICOMP
+ 50
+
+
+ ICCARM
+ 146
+
+
+
+
+ BICOMP
+ 121 130 189 193 192 195 183 196 197 198 120 122 123 124 126 128 127 37 26 138 129 132 125 131 139 29 24 140 36 141 142 133 25 28 34 136 137
+
+
+ ICCARM
+ 121 130 189 193 192 195 183 196 197 198 120 122 123 124 215 199 128 127 37 26 138 129 132 125 131 139 29 24 140 36 141 142 133 25 28 34 136 137
+
+
+
+
+ $PROJ_DIR$\..\src\cpu\arm_cm0.c
+
+
+ BICOMP
+ 170
+
+
+ ICCARM
+ 166
+
+
+
+
+ BICOMP
+ 121 130 189 193 192 195 183 196 197 198 120 122 123 124 126 128 127 37 26 138 129 132 125 131 139 29 24 140 36 141 142 133 25 28 34 136 137
+
+
+ ICCARM
+ 121 130 189 193 192 195 183 196 197 198 120 122 123 124 215 199 128 127 37 26 138 129 132 125 131 139 29 24 140 36 141 142 133 25 28 34 136 137
+
+
+
+
+ $PROJ_DIR$\..\src\cpu\crt0.s
+
+
+ AARM
+ 169
+
+
+
+
+ $PROJ_DIR$\..\src\cpu\start.c
+
+
+ BICOMP
+ 171
+
+
+ ICCARM
+ 165
+
+
+
+
+ BICOMP
+ 121 130 189 193 192 195 183 196 197 198 120 122 123 124 126 128 127 37 26 138 129 132 125 131 139 29 24 140 36 141 142 133 25 28 34 136 137
+
+
+ ICCARM
+ 121 130 189 193 192 195 183 196 197 198 120 122 123 124 215 199 128 127 37 26 138 129 132 125 131 139 29 24 140 36 141 142 133 25 28 34 136 137
+
+
+
+
+ $PROJ_DIR$\..\src\cpu\sysinit.c
+
+
+ BICOMP
+ 172
+
+
+ ICCARM
+ 168
+
+
+
+
+ BICOMP
+ 131 121 130 189 193 192 195 183 196 197 198 120 122 123 124 126 128 127 37 26 138 129 132 125 139 29 24 140 36 141 142 133 25 28 34 136 137
+
+
+ ICCARM
+ 131 121 130 189 193 192 195 183 196 197 198 120 122 123 124 215 199 128 127 37 26 138 129 132 125 139 29 24 140 36 141 142 133 25 28 34 136 137
+
+
+
+
+ $PROJ_DIR$\..\src\cpu\vectors.c
+
+
+ BICOMP
+ 173
+
+
+ ICCARM
+ 167
+
+
+
+
+ BICOMP
+ 132 5 121 130 189 193 192 195 183 196 197 198 120 122 123 124 126 128 127 37 26 138 129 125 131 139 29 24 140 36 141 142 133 25 28 34 136 137
+
+
+ ICCARM
+ 132 5 121 130 189 193 192 195 183 196 197 198 120 122 123 124 215 199 128 127 37 26 138 129 125 131 139 29 24 140 36 141 142 133 25 28 34 136 137
+
+
+
+
+ $PROJ_DIR$\..\src\drivers\adc.c
+
+
+ BICOMP
+ 161
+
+
+ ICCARM
+ 73
+
+
+
+
+ BICOMP
+ 133 24 121 130 189 193 192 195 183 196 197 198 120 122 123 124 126 128 127 37 26 138 129 132 125 131 139 29 137 140 36 141 142 25 28 34 136
+
+
+ ICCARM
+ 133 24 121 130 189 193 192 195 183 196 197 198 120 122 123 124 215 199 128 127 37 26 138 129 132 125 131 139 29 137 140 36 141 142 25 28 34 136
+
+
+
+
+ $PROJ_DIR$\..\src\drivers\cmp.c
+
+
+ BICOMP
+ 162
+
+
+ ICCARM
+ 75
+
+
+
+
+ BICOMP
+ 134 121 130 189 193 192 195 183 196 197 198 120 122 123 124 126 128 127 37 26 138 129 132 125 131 139 29 24 140 36 141 142 133 25 28 34 136 137
+
+
+ ICCARM
+ 134 121 130 189 193 192 195 183 196 197 198 120 122 123 124 215 199 128 127 37 26 138 129 132 125 131 139 29 24 140 36 141 142 133 25 28 34 136 137
+
+
+
+
+ $PROJ_DIR$\..\src\drivers\dac.c
+
+
+ BICOMP
+ 164
+
+
+ ICCARM
+ 76
+
+
+
+
+ BICOMP
+ 135 121 130 189 193 192 195 183 196 197 198 120 122 123 124 126 128 127 37 26 138 129 132 125 131 139 29 24 140 36 141 142 133 25 28 34 136 137
+
+
+ ICCARM
+ 135 121 130 189 193 192 195 183 196 197 198 120 122 123 124 215 199 128 127 37 26 138 129 132 125 131 139 29 24 140 36 141 142 133 25 28 34 136 137
+
+
+
+
+ $PROJ_DIR$\..\src\drivers\dma.c
+
+
+ BICOMP
+ 163
+
+
+ ICCARM
+ 74
+
+
+
+
+ BICOMP
+ 121 130 189 193 192 195 183 196 197 198 120 122 123 124 126 128 127 37 26 138 129 132 125 131 139 29 24 140 36 141 142 133 25 28 34 136 137
+
+
+ ICCARM
+ 121 130 189 193 192 195 183 196 197 198 120 122 123 124 215 199 128 127 37 26 138 129 132 125 131 139 29 24 140 36 141 142 133 25 28 34 136 137
+
+
+
+
+ $PROJ_DIR$\..\src\drivers\gpio.c
+
+
+ BICOMP
+ 44
+
+
+ ICCARM
+ 77
+
+
+
+
+ BICOMP
+ 140 24 121 130 189 193 192 195 183 196 197 198 120 122 123 124 126 128 127 37 26 138 129 132 125 131 139 29 137 36 141 142 133 25 28 34 136
+
+
+ ICCARM
+ 140 24 121 130 189 193 192 195 183 196 197 198 120 122 123 124 215 199 128 127 37 26 138 129 132 125 131 139 29 137 36 141 142 133 25 28 34 136
+
+
+
+
+ $PROJ_DIR$\..\src\drivers\i2c.c
+
+
+ BICOMP
+ 46
+
+
+ ICCARM
+ 78
+
+
+
+
+ BICOMP
+ 141 142 24 121 130 189 193 192 195 183 196 197 198 120 122 123 124 126 128 127 37 26 138 129 132 125 131 139 29 137 140 36 133 25 28 34 136
+
+
+ ICCARM
+ 141 142 24 121 130 189 193 192 195 183 196 197 198 120 122 123 124 215 199 128 127 37 26 138 129 132 125 131 139 29 137 140 36 133 25 28 34 136
+
+
+
+
+ $PROJ_DIR$\..\src\drivers\lptmr.c
+
+
+ BICOMP
+ 47
+
+
+ ICCARM
+ 79
+
+
+
+
+ BICOMP
+ 25 24 121 130 189 193 192 195 183 196 197 198 120 122 123 124 126 128 127 37 26 138 129 132 125 131 139 29 137 140 36 141 142 133 28 34 136
+
+
+ ICCARM
+ 25 24 121 130 189 193 192 195 183 196 197 198 120 122 123 124 215 199 128 127 37 26 138 129 132 125 131 139 29 137 140 36 141 142 133 28 34 136
+
+
+
+
+ $PROJ_DIR$\..\src\drivers\mcg.c
+
+
+ BICOMP
+ 45
+
+
+ ICCARM
+ 80
+
+
+
+
+ BICOMP
+ 121 130 189 193 192 195 183 196 197 198 120 122 123 124 126 128 127 37 26 138 129 132 125 131 139 29 24 140 36 141 142 133 25 28 34 136 137 27
+
+
+ ICCARM
+ 121 130 189 193 192 195 183 196 197 198 120 122 123 124 215 199 128 127 37 26 138 129 132 125 131 139 29 24 140 36 141 142 133 25 28 34 136 137 27
+
+
+
+
+ $PROJ_DIR$\..\src\drivers\pit.c
+
+
+ BICOMP
+ 48
+
+
+ ICCARM
+ 81
+
+
+
+
+ BICOMP
+ 28 121 130 189 193 192 195 183 196 197 198 120 122 123 124 126 128 127 37 26 138 129 132 125 131 139 29 24 140 36 141 142 133 25 34 136 137
+
+
+ ICCARM
+ 28 121 130 189 193 192 195 183 196 197 198 120 122 123 124 215 199 128 127 37 26 138 129 132 125 131 139 29 24 140 36 141 142 133 25 34 136 137
+
+
+
+
+ $PROJ_DIR$\..\src\drivers\port.c
+
+
+ BICOMP
+ 51
+
+
+ ICCARM
+ 82
+
+
+
+
+ BICOMP
+ 29 24 121 130 189 193 192 195 183 196 197 198 120 122 123 124 126 128 127 37 26 138 129 132 125 131 139 137 140 36 141 142 133 25 28 34 136
+
+
+ ICCARM
+ 29 24 121 130 189 193 192 195 183 196 197 198 120 122 123 124 215 199 128 127 37 26 138 129 132 125 131 139 137 140 36 141 142 133 25 28 34 136
+
+
+
+
+ $PROJ_DIR$\..\src\drivers\rtc.c
+
+
+ BICOMP
+ 52
+
+
+ ICCARM
+ 83
+
+
+
+
+ BICOMP
+ 24 121 130 189 193 192 195 183 196 197 198 120 122 123 124 126 128 127 37 26 138 129 132 125 131 139 29 137 140 36 141 142 133 25 28 34 136 30
+
+
+ ICCARM
+ 24 121 130 189 193 192 195 183 196 197 198 120 122 123 124 215 199 128 127 37 26 138 129 132 125 131 139 29 137 140 36 141 142 133 25 28 34 136 30
+
+
+
+
+ $PROJ_DIR$\..\src\drivers\SPI.c
+
+
+ BICOMP
+ 53
+
+
+ ICCARM
+ 155
+
+
+
+
+ BICOMP
+ 31 121 130 189 193 192 195 183 196 197 198 120 122 123 124 126 128 127 37 26 138 129 132 125 131 139 29 24 140 36 141 142 133 25 28 34 136 137
+
+
+ ICCARM
+ 31 121 130 189 193 192 195 183 196 197 198 120 122 123 124 215 199 128 127 37 26 138 129 132 125 131 139 29 24 140 36 141 142 133 25 28 34 136 137
+
+
+
+
+ $PROJ_DIR$\..\src\drivers\systick.c
+
+
+ BICOMP
+ 54
+
+
+ ICCARM
+ 156
+
+
+
+
+ BICOMP
+ 32 121 130 189 193 192 195 183 196 197 198 120 122 123 124 126 128 127 37 26 138 129 132 125 131 139 29 24 140 36 141 142 133 25 28 34 136 137
+
+
+ ICCARM
+ 32 121 130 189 193 192 195 183 196 197 198 120 122 123 124 215 199 128 127 37 26 138 129 132 125 131 139 29 24 140 36 141 142 133 25 28 34 136 137
+
+
+
+
+ $PROJ_DIR$\..\src\drivers\tick_timer.c
+
+
+ BICOMP
+ 55
+
+
+ ICCARM
+ 157
+
+
+
+
+ BICOMP
+ 33 121 130 189 193 192 195 183 196 197 198 120 122 123 124 126 128 127 37 26 138 129 132 125 131 139 29 24 140 36 141 142 133 25 28 34 136 137 32
+
+
+ ICCARM
+ 33 121 130 189 193 192 195 183 196 197 198 120 122 123 124 215 199 128 127 37 26 138 129 132 125 131 139 29 24 140 36 141 142 133 25 28 34 136 137 32
+
+
+
+
+ $PROJ_DIR$\..\src\drivers\tpm.c
+
+
+ BICOMP
+ 56
+
+
+ ICCARM
+ 158
+
+
+
+
+ BICOMP
+ 34 24 121 130 189 193 192 195 183 196 197 198 120 122 123 124 126 128 127 37 26 138 129 132 125 131 139 29 137 140 36 141 142 133 25 28 136
+
+
+ ICCARM
+ 34 24 121 130 189 193 192 195 183 196 197 198 120 122 123 124 215 199 128 127 37 26 138 129 132 125 131 139 29 137 140 36 141 142 133 25 28 136
+
+
+
+
+ $PROJ_DIR$\..\src\drivers\tsi.c
+
+
+ BICOMP
+ 57
+
+
+ ICCARM
+ 159
+
+
+
+
+ BICOMP
+ 35 121 130 189 193 192 195 183 196 197 198 120 122 123 124 126 128 127 37 26 138 129 132 125 131 139 29 24 140 36 141 142 133 25 28 34 136 137
+
+
+ ICCARM
+ 35 121 130 189 193 192 195 183 196 197 198 120 122 123 124 215 199 128 127 37 26 138 129 132 125 131 139 29 24 140 36 141 142 133 25 28 34 136 137
+
+
+
+
+ $PROJ_DIR$\..\src\drivers\uart.c
+
+
+ BICOMP
+ 70
+
+
+ ICCARM
+ 160
+
+
+
+
+ BICOMP
+ 121 130 189 193 192 195 183 196 197 198 120 122 123 124 126 128 127 37 26 138 129 132 125 131 139 29 24 140 36 141 142 133 25 28 34 136 137
+
+
+ ICCARM
+ 121 130 189 193 192 195 183 196 197 198 120 122 123 124 215 199 128 127 37 26 138 129 132 125 131 139 29 24 140 36 141 142 133 25 28 34 136 137
+
+
+
+
+ $PROJ_DIR$\..\Debug\Exe\plan_manage_main.out
+
+
+ ILINK
+ 175 73 209 166 210 75 212 169 76 68 65 74 69 77 78 61 211 60 59 58 71 79 208 80 213 67 81 64 179 82 214 143 83 66 155 165 144 168 156 62 157 63 158 159 160 146 167 177 178 174 176
+
+
+
+
+
+ Release
+
+
+ [MULTI_TOOL]
+ ILINK
+
+
+
+
+
diff --git a/plan_manage_main/ewp/plan_manage_main.ewd b/plan_manage_main/ewp/plan_manage_main.ewd
new file mode 100644
index 0000000..feea8ad
--- /dev/null
+++ b/plan_manage_main/ewp/plan_manage_main.ewd
@@ -0,0 +1,2697 @@
+
+
+
+ 2
+
+ Debug
+
+ ARM
+
+ 1
+
+ C-SPY
+ 2
+
+ 26
+ 1
+ 1
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ ARMSIM_ID
+ 2
+
+ 1
+ 1
+ 1
+
+
+
+
+
+
+
+ ANGEL_ID
+ 2
+
+ 0
+ 1
+ 1
+
+
+
+
+
+
+
+
+
+
+
+ CMSISDAP_ID
+ 2
+
+ 2
+ 1
+ 1
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ GDBSERVER_ID
+ 2
+
+ 0
+ 1
+ 1
+
+
+
+
+
+
+
+
+
+
+ IARROM_ID
+ 2
+
+ 1
+ 1
+ 1
+
+
+
+
+
+
+
+
+ IJET_ID
+ 2
+
+ 3
+ 1
+ 1
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ JLINK_ID
+ 2
+
+ 15
+ 1
+ 1
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ LMIFTDI_ID
+ 2
+
+ 2
+ 1
+ 1
+
+
+
+
+
+
+
+
+
+ MACRAIGOR_ID
+ 2
+
+ 3
+ 1
+ 1
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ PEMICRO_ID
+ 2
+
+ 1
+ 1
+ 1
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ RDI_ID
+ 2
+
+ 2
+ 1
+ 1
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ STLINK_ID
+ 2
+
+ 2
+ 1
+ 1
+
+
+
+
+
+
+
+
+
+
+ THIRDPARTY_ID
+ 2
+
+ 0
+ 1
+ 1
+
+
+
+
+
+
+
+ XDS100_ID
+ 2
+
+ 2
+ 1
+ 1
+
+
+
+
+
+
+
+
+
+
+
+
+ $TOOLKIT_DIR$\plugins\middleware\HCCWare\HCCWare.ewplugin
+ 0
+
+
+ $TOOLKIT_DIR$\plugins\rtos\AVIX\AVIX.ENU.ewplugin
+ 0
+
+
+ $TOOLKIT_DIR$\plugins\rtos\CMX\CmxArmPlugin.ENU.ewplugin
+ 0
+
+
+ $TOOLKIT_DIR$\plugins\rtos\CMX\CmxTinyArmPlugin.ENU.ewplugin
+ 0
+
+
+ $TOOLKIT_DIR$\plugins\rtos\embOS\embOSPlugin.ewplugin
+ 0
+
+
+ $TOOLKIT_DIR$\plugins\rtos\MQX\MQXRtosPlugin.ewplugin
+ 0
+
+
+ $TOOLKIT_DIR$\plugins\rtos\OpenRTOS\OpenRTOSPlugin.ewplugin
+ 0
+
+
+ $TOOLKIT_DIR$\plugins\rtos\SafeRTOS\SafeRTOSPlugin.ewplugin
+ 0
+
+
+ $TOOLKIT_DIR$\plugins\rtos\ThreadX\ThreadXArmPlugin.ENU.ewplugin
+ 0
+
+
+ $TOOLKIT_DIR$\plugins\rtos\TI-RTOS\tirtosplugin.ewplugin
+ 0
+
+
+ $TOOLKIT_DIR$\plugins\rtos\uCOS-II\uCOS-II-286-KA-CSpy.ewplugin
+ 0
+
+
+ $TOOLKIT_DIR$\plugins\rtos\uCOS-II\uCOS-II-KA-CSpy.ewplugin
+ 0
+
+
+ $TOOLKIT_DIR$\plugins\rtos\uCOS-III\uCOS-III-KA-CSpy.ewplugin
+ 0
+
+
+ $EW_DIR$\common\plugins\CodeCoverage\CodeCoverage.ENU.ewplugin
+ 1
+
+
+ $EW_DIR$\common\plugins\Orti\Orti.ENU.ewplugin
+ 0
+
+
+ $EW_DIR$\common\plugins\SymList\SymList.ENU.ewplugin
+ 1
+
+
+ $EW_DIR$\common\plugins\uCProbe\uCProbePlugin.ENU.ewplugin
+ 0
+
+
+
+
+ Release
+
+ ARM
+
+ 0
+
+ C-SPY
+ 2
+
+ 26
+ 1
+ 0
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ ARMSIM_ID
+ 2
+
+ 1
+ 1
+ 0
+
+
+
+
+
+
+
+ ANGEL_ID
+ 2
+
+ 0
+ 1
+ 0
+
+
+
+
+
+
+
+
+
+
+
+ CMSISDAP_ID
+ 2
+
+ 2
+ 1
+ 0
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ GDBSERVER_ID
+ 2
+
+ 0
+ 1
+ 0
+
+
+
+
+
+
+
+
+
+
+ IARROM_ID
+ 2
+
+ 1
+ 1
+ 0
+
+
+
+
+
+
+
+
+ IJET_ID
+ 2
+
+ 3
+ 1
+ 0
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ JLINK_ID
+ 2
+
+ 15
+ 1
+ 0
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ LMIFTDI_ID
+ 2
+
+ 2
+ 1
+ 0
+
+
+
+
+
+
+
+
+
+ MACRAIGOR_ID
+ 2
+
+ 3
+ 1
+ 0
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ PEMICRO_ID
+ 2
+
+ 1
+ 1
+ 0
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ RDI_ID
+ 2
+
+ 2
+ 1
+ 0
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ STLINK_ID
+ 2
+
+ 2
+ 1
+ 0
+
+
+
+
+
+
+
+
+
+
+ THIRDPARTY_ID
+ 2
+
+ 0
+ 1
+ 0
+
+
+
+
+
+
+
+ XDS100_ID
+ 2
+
+ 2
+ 1
+ 0
+
+
+
+
+
+
+
+
+
+
+
+
+ $TOOLKIT_DIR$\plugins\middleware\HCCWare\HCCWare.ewplugin
+ 0
+
+
+ $TOOLKIT_DIR$\plugins\rtos\AVIX\AVIX.ENU.ewplugin
+ 0
+
+
+ $TOOLKIT_DIR$\plugins\rtos\CMX\CmxArmPlugin.ENU.ewplugin
+ 0
+
+
+ $TOOLKIT_DIR$\plugins\rtos\CMX\CmxTinyArmPlugin.ENU.ewplugin
+ 0
+
+
+ $TOOLKIT_DIR$\plugins\rtos\embOS\embOSPlugin.ewplugin
+ 0
+
+
+ $TOOLKIT_DIR$\plugins\rtos\MQX\MQXRtosPlugin.ewplugin
+ 0
+
+
+ $TOOLKIT_DIR$\plugins\rtos\OpenRTOS\OpenRTOSPlugin.ewplugin
+ 0
+
+
+ $TOOLKIT_DIR$\plugins\rtos\SafeRTOS\SafeRTOSPlugin.ewplugin
+ 0
+
+
+ $TOOLKIT_DIR$\plugins\rtos\ThreadX\ThreadXArmPlugin.ENU.ewplugin
+ 0
+
+
+ $TOOLKIT_DIR$\plugins\rtos\TI-RTOS\tirtosplugin.ewplugin
+ 0
+
+
+ $TOOLKIT_DIR$\plugins\rtos\uCOS-II\uCOS-II-286-KA-CSpy.ewplugin
+ 0
+
+
+ $TOOLKIT_DIR$\plugins\rtos\uCOS-II\uCOS-II-KA-CSpy.ewplugin
+ 0
+
+
+ $TOOLKIT_DIR$\plugins\rtos\uCOS-III\uCOS-III-KA-CSpy.ewplugin
+ 0
+
+
+ $EW_DIR$\common\plugins\CodeCoverage\CodeCoverage.ENU.ewplugin
+ 1
+
+
+ $EW_DIR$\common\plugins\Orti\Orti.ENU.ewplugin
+ 0
+
+
+ $EW_DIR$\common\plugins\SymList\SymList.ENU.ewplugin
+ 1
+
+
+ $EW_DIR$\common\plugins\uCProbe\uCProbePlugin.ENU.ewplugin
+ 0
+
+
+
+
+
+
diff --git a/plan_manage_main/ewp/plan_manage_main.ewp b/plan_manage_main/ewp/plan_manage_main.ewp
new file mode 100644
index 0000000..d23cd8c
--- /dev/null
+++ b/plan_manage_main/ewp/plan_manage_main.ewp
@@ -0,0 +1,2236 @@
+
+
+
+ 2
+
+ Debug
+
+ ARM
+
+ 1
+
+ General
+ 3
+
+ 22
+ 1
+ 1
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ ICCARM
+ 2
+
+ 31
+ 1
+ 1
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ AARM
+ 2
+
+ 9
+ 1
+ 1
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ OBJCOPY
+ 0
+
+ 1
+ 1
+ 1
+
+
+
+
+
+
+
+
+ CUSTOM
+ 3
+
+
+
+
+
+
+ BICOMP
+ 0
+
+
+
+ BUILDACTION
+ 1
+
+
+
+
+
+
+ ILINK
+ 0
+
+ 16
+ 1
+ 1
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ IARCHIVE
+ 0
+
+ 0
+ 1
+ 1
+
+
+
+
+
+
+ BILINK
+ 0
+
+
+
+
+ Release
+
+ ARM
+
+ 0
+
+ General
+ 3
+
+ 22
+ 1
+ 0
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ ICCARM
+ 2
+
+ 31
+ 1
+ 0
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ AARM
+ 2
+
+ 9
+ 1
+ 0
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ OBJCOPY
+ 0
+
+ 1
+ 1
+ 0
+
+
+
+
+
+
+
+
+ CUSTOM
+ 3
+
+
+
+
+
+
+ BICOMP
+ 0
+
+
+
+ BUILDACTION
+ 1
+
+
+
+
+
+
+ ILINK
+ 0
+
+ 16
+ 1
+ 0
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ IARCHIVE
+ 0
+
+ 0
+ 1
+ 0
+
+
+
+
+
+
+ BILINK
+ 0
+
+
+
+
+ src
+
+ app
+
+ include
+
+ $PROJ_DIR$\..\src\app\include\config.h
+
+
+ $PROJ_DIR$\..\src\app\include\debug.h
+
+
+ $PROJ_DIR$\..\src\app\include\display.h
+
+
+ $PROJ_DIR$\..\src\app\include\flash.h
+
+
+ $PROJ_DIR$\..\src\app\include\input.h
+
+
+ $PROJ_DIR$\..\src\app\include\isr.h
+
+
+ $PROJ_DIR$\..\src\app\include\key.h
+
+
+ $PROJ_DIR$\..\src\app\include\knob.h
+
+
+ $PROJ_DIR$\..\src\app\include\output.h
+
+
+ $PROJ_DIR$\..\src\app\include\plan_handle.h
+
+
+ $PROJ_DIR$\..\src\app\include\setup.h
+
+
+ $PROJ_DIR$\..\src\app\include\simulat_timer.h
+
+
+ $PROJ_DIR$\..\src\app\include\tft.h
+
+
+ $PROJ_DIR$\..\src\app\include\time.h
+
+
+
+ $PROJ_DIR$\..\src\app\debug.c
+
+
+ $PROJ_DIR$\..\src\app\display.c
+
+
+ $PROJ_DIR$\..\src\app\flash.c
+
+
+ $PROJ_DIR$\..\src\app\input.c
+
+
+ $PROJ_DIR$\..\src\app\isr.c
+
+
+ $PROJ_DIR$\..\src\app\key.c
+
+
+ $PROJ_DIR$\..\src\app\knob.c
+
+
+ $PROJ_DIR$\..\src\app\main.c
+
+
+ $PROJ_DIR$\..\src\app\output.c
+
+
+ $PROJ_DIR$\..\src\app\plan_handle.c
+
+
+ $PROJ_DIR$\..\src\app\pm_init.c
+
+
+ $PROJ_DIR$\..\src\app\simulat_timer.c
+
+
+ $PROJ_DIR$\..\src\app\tft.c
+
+
+ $PROJ_DIR$\..\src\app\time.c
+
+
+
+ common
+
+ $PROJ_DIR$\..\src\common\alloc.c
+
+
+ $PROJ_DIR$\..\src\common\assert.c
+
+
+ $PROJ_DIR$\..\src\common\common.c
+
+
+ $PROJ_DIR$\..\src\common\io.c
+
+
+ $PROJ_DIR$\..\src\common\memtest.c
+
+
+ $PROJ_DIR$\..\src\common\printf.c
+
+
+ $PROJ_DIR$\..\src\common\queue.c
+
+
+ $PROJ_DIR$\..\src\common\startup.c
+
+
+ $PROJ_DIR$\..\src\common\uif.c
+
+
+
+ cpu
+
+ $PROJ_DIR$\..\src\cpu\arm_cm0.c
+
+
+ $PROJ_DIR$\..\src\cpu\crt0.s
+
+
+ $PROJ_DIR$\..\src\cpu\start.c
+
+
+ $PROJ_DIR$\..\src\cpu\sysinit.c
+
+
+ $PROJ_DIR$\..\src\cpu\vectors.c
+
+
+
+ drivers
+
+ $PROJ_DIR$\..\src\drivers\adc.c
+
+
+ $PROJ_DIR$\..\src\drivers\cmp.c
+
+
+ $PROJ_DIR$\..\src\drivers\dac.c
+
+
+ $PROJ_DIR$\..\src\drivers\dma.c
+
+
+ $PROJ_DIR$\..\src\drivers\gpio.c
+
+
+ $PROJ_DIR$\..\src\drivers\i2c.c
+
+
+ $PROJ_DIR$\..\src\drivers\lptmr.c
+
+
+ $PROJ_DIR$\..\src\drivers\mcg.c
+
+
+ $PROJ_DIR$\..\src\drivers\pit.c
+
+
+ $PROJ_DIR$\..\src\drivers\port.c
+
+
+ $PROJ_DIR$\..\src\drivers\rtc.c
+
+
+ $PROJ_DIR$\..\src\drivers\SPI.c
+
+
+ $PROJ_DIR$\..\src\drivers\systick.c
+
+
+ $PROJ_DIR$\..\src\drivers\tick_timer.c
+
+
+ $PROJ_DIR$\..\src\drivers\tpm.c
+
+
+ $PROJ_DIR$\..\src\drivers\tsi.c
+
+
+ $PROJ_DIR$\..\src\drivers\uart.c
+
+
+
+ include
+
+ common
+
+ $PROJ_DIR$\..\src\include\common\assert.h
+
+
+ $PROJ_DIR$\..\src\include\common\common.h
+
+
+ $PROJ_DIR$\..\src\include\common\io.h
+
+
+ $PROJ_DIR$\..\src\include\common\memtest.h
+
+
+ $PROJ_DIR$\..\src\include\common\queue.h
+
+
+ $PROJ_DIR$\..\src\include\common\startup.h
+
+
+ $PROJ_DIR$\..\src\include\common\stdlib.h
+
+
+ $PROJ_DIR$\..\src\include\common\typedef.h
+
+
+ $PROJ_DIR$\..\src\include\common\uif.h
+
+
+
+ cpu
+
+ $PROJ_DIR$\..\src\include\cpu\arm_cm0.h
+
+
+ $PROJ_DIR$\..\src\include\cpu\dma_channels.h
+
+
+ $PROJ_DIR$\..\src\include\cpu\MKL25Z4.h
+
+
+ $PROJ_DIR$\..\src\include\cpu\sysinit.h
+
+
+ $PROJ_DIR$\..\src\include\cpu\vectors.h
+
+
+
+ drivers
+
+ $PROJ_DIR$\..\src\include\drivers\adc.h
+
+
+ $PROJ_DIR$\..\src\include\drivers\cmp.h
+
+
+ $PROJ_DIR$\..\src\include\drivers\dac.h
+
+
+ $PROJ_DIR$\..\src\include\drivers\dma.h
+
+
+ $PROJ_DIR$\..\src\include\drivers\fire_drivers_cfg.h
+
+
+ $PROJ_DIR$\..\src\include\drivers\Fire_kinetis_MCG_CFG.h
+
+
+ $PROJ_DIR$\..\src\include\drivers\gpio.h
+
+
+ $PROJ_DIR$\..\src\include\drivers\gpio_cfg.h
+
+
+ $PROJ_DIR$\..\src\include\drivers\i2c.h
+
+
+ $PROJ_DIR$\..\src\include\drivers\i2c_cfg.h
+
+
+ $PROJ_DIR$\..\src\include\drivers\include.h
+
+
+ $PROJ_DIR$\..\src\include\drivers\lptmr.h
+
+
+ $PROJ_DIR$\..\src\include\drivers\mcg.h
+
+
+ $PROJ_DIR$\..\src\include\drivers\mcg_cfg.h
+
+
+ $PROJ_DIR$\..\src\include\drivers\pit.h
+
+
+ $PROJ_DIR$\..\src\include\drivers\port.h
+
+
+ $PROJ_DIR$\..\src\include\drivers\rtc.h
+
+
+ $PROJ_DIR$\..\src\include\drivers\SPI.h
+
+
+ $PROJ_DIR$\..\src\include\drivers\systick.h
+
+
+ $PROJ_DIR$\..\src\include\drivers\tick_timer.h
+
+
+ $PROJ_DIR$\..\src\include\drivers\tpm.h
+
+
+ $PROJ_DIR$\..\src\include\drivers\tsi.h
+
+
+ $PROJ_DIR$\..\src\include\drivers\uart.h
+
+
+
+ platforms
+
+ $PROJ_DIR$\..\src\include\platforms\freedom.h
+
+
+ $PROJ_DIR$\..\src\include\platforms\tower.h
+
+
+
+
+ other
+
+ $PROJ_DIR$\..\src\other\LandzoOLED.c
+
+
+ $PROJ_DIR$\..\src\other\LandzoOLED.h
+
+
+
+ platforms
+
+
+
+
+
diff --git a/plan_manage_main/ewp/plan_manage_main.ewt b/plan_manage_main/ewp/plan_manage_main.ewt
new file mode 100644
index 0000000..b960c0c
--- /dev/null
+++ b/plan_manage_main/ewp/plan_manage_main.ewt
@@ -0,0 +1,514 @@
+
+
+
+ 2
+
+ Debug
+
+ ARM
+
+ 1
+
+ RuntimeChecking
+ 0
+
+ 2
+ 1
+ 1
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Release
+
+ ARM
+
+ 0
+
+ RuntimeChecking
+ 0
+
+ 2
+ 1
+ 0
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ src
+
+ app
+
+ include
+
+ $PROJ_DIR$\..\src\app\include\config.h
+
+
+ $PROJ_DIR$\..\src\app\include\debug.h
+
+
+ $PROJ_DIR$\..\src\app\include\display.h
+
+
+ $PROJ_DIR$\..\src\app\include\flash.h
+
+
+ $PROJ_DIR$\..\src\app\include\input.h
+
+
+ $PROJ_DIR$\..\src\app\include\isr.h
+
+
+ $PROJ_DIR$\..\src\app\include\key.h
+
+
+ $PROJ_DIR$\..\src\app\include\knob.h
+
+
+ $PROJ_DIR$\..\src\app\include\output.h
+
+
+ $PROJ_DIR$\..\src\app\include\plan_handle.h
+
+
+ $PROJ_DIR$\..\src\app\include\setup.h
+
+
+ $PROJ_DIR$\..\src\app\include\simulat_timer.h
+
+
+ $PROJ_DIR$\..\src\app\include\tft.h
+
+
+ $PROJ_DIR$\..\src\app\include\time.h
+
+
+
+ $PROJ_DIR$\..\src\app\debug.c
+
+
+ $PROJ_DIR$\..\src\app\display.c
+
+
+ $PROJ_DIR$\..\src\app\flash.c
+
+
+ $PROJ_DIR$\..\src\app\input.c
+
+
+ $PROJ_DIR$\..\src\app\isr.c
+
+
+ $PROJ_DIR$\..\src\app\key.c
+
+
+ $PROJ_DIR$\..\src\app\knob.c
+
+
+ $PROJ_DIR$\..\src\app\main.c
+
+
+ $PROJ_DIR$\..\src\app\output.c
+
+
+ $PROJ_DIR$\..\src\app\plan_handle.c
+
+
+ $PROJ_DIR$\..\src\app\pm_init.c
+
+
+ $PROJ_DIR$\..\src\app\simulat_timer.c
+
+
+ $PROJ_DIR$\..\src\app\tft.c
+
+
+ $PROJ_DIR$\..\src\app\time.c
+
+
+
+ common
+
+ $PROJ_DIR$\..\src\common\alloc.c
+
+
+ $PROJ_DIR$\..\src\common\assert.c
+
+
+ $PROJ_DIR$\..\src\common\common.c
+
+
+ $PROJ_DIR$\..\src\common\io.c
+
+
+ $PROJ_DIR$\..\src\common\memtest.c
+
+
+ $PROJ_DIR$\..\src\common\printf.c
+
+
+ $PROJ_DIR$\..\src\common\queue.c
+
+
+ $PROJ_DIR$\..\src\common\startup.c
+
+
+ $PROJ_DIR$\..\src\common\uif.c
+
+
+
+ cpu
+
+ $PROJ_DIR$\..\src\cpu\arm_cm0.c
+
+
+ $PROJ_DIR$\..\src\cpu\crt0.s
+
+
+ $PROJ_DIR$\..\src\cpu\start.c
+
+
+ $PROJ_DIR$\..\src\cpu\sysinit.c
+
+
+ $PROJ_DIR$\..\src\cpu\vectors.c
+
+
+
+ drivers
+
+ $PROJ_DIR$\..\src\drivers\adc.c
+
+
+ $PROJ_DIR$\..\src\drivers\cmp.c
+
+
+ $PROJ_DIR$\..\src\drivers\dac.c
+
+
+ $PROJ_DIR$\..\src\drivers\dma.c
+
+
+ $PROJ_DIR$\..\src\drivers\gpio.c
+
+
+ $PROJ_DIR$\..\src\drivers\i2c.c
+
+
+ $PROJ_DIR$\..\src\drivers\lptmr.c
+
+
+ $PROJ_DIR$\..\src\drivers\mcg.c
+
+
+ $PROJ_DIR$\..\src\drivers\pit.c
+
+
+ $PROJ_DIR$\..\src\drivers\port.c
+
+
+ $PROJ_DIR$\..\src\drivers\rtc.c
+
+
+ $PROJ_DIR$\..\src\drivers\SPI.c
+
+
+ $PROJ_DIR$\..\src\drivers\systick.c
+
+
+ $PROJ_DIR$\..\src\drivers\tick_timer.c
+
+
+ $PROJ_DIR$\..\src\drivers\tpm.c
+
+
+ $PROJ_DIR$\..\src\drivers\tsi.c
+
+
+ $PROJ_DIR$\..\src\drivers\uart.c
+
+
+
+ include
+
+ common
+
+ $PROJ_DIR$\..\src\include\common\assert.h
+
+
+ $PROJ_DIR$\..\src\include\common\common.h
+
+
+ $PROJ_DIR$\..\src\include\common\io.h
+
+
+ $PROJ_DIR$\..\src\include\common\memtest.h
+
+
+ $PROJ_DIR$\..\src\include\common\queue.h
+
+
+ $PROJ_DIR$\..\src\include\common\startup.h
+
+
+ $PROJ_DIR$\..\src\include\common\stdlib.h
+
+
+ $PROJ_DIR$\..\src\include\common\typedef.h
+
+
+ $PROJ_DIR$\..\src\include\common\uif.h
+
+
+
+ cpu
+
+ $PROJ_DIR$\..\src\include\cpu\arm_cm0.h
+
+
+ $PROJ_DIR$\..\src\include\cpu\dma_channels.h
+
+
+ $PROJ_DIR$\..\src\include\cpu\MKL25Z4.h
+
+
+ $PROJ_DIR$\..\src\include\cpu\sysinit.h
+
+
+ $PROJ_DIR$\..\src\include\cpu\vectors.h
+
+
+
+ drivers
+
+ $PROJ_DIR$\..\src\include\drivers\adc.h
+
+
+ $PROJ_DIR$\..\src\include\drivers\cmp.h
+
+
+ $PROJ_DIR$\..\src\include\drivers\dac.h
+
+
+ $PROJ_DIR$\..\src\include\drivers\dma.h
+
+
+ $PROJ_DIR$\..\src\include\drivers\fire_drivers_cfg.h
+
+
+ $PROJ_DIR$\..\src\include\drivers\Fire_kinetis_MCG_CFG.h
+
+
+ $PROJ_DIR$\..\src\include\drivers\gpio.h
+
+
+ $PROJ_DIR$\..\src\include\drivers\gpio_cfg.h
+
+
+ $PROJ_DIR$\..\src\include\drivers\i2c.h
+
+
+ $PROJ_DIR$\..\src\include\drivers\i2c_cfg.h
+
+
+ $PROJ_DIR$\..\src\include\drivers\include.h
+
+
+ $PROJ_DIR$\..\src\include\drivers\lptmr.h
+
+
+ $PROJ_DIR$\..\src\include\drivers\mcg.h
+
+
+ $PROJ_DIR$\..\src\include\drivers\mcg_cfg.h
+
+
+ $PROJ_DIR$\..\src\include\drivers\pit.h
+
+
+ $PROJ_DIR$\..\src\include\drivers\port.h
+
+
+ $PROJ_DIR$\..\src\include\drivers\rtc.h
+
+
+ $PROJ_DIR$\..\src\include\drivers\SPI.h
+
+
+ $PROJ_DIR$\..\src\include\drivers\systick.h
+
+
+ $PROJ_DIR$\..\src\include\drivers\tick_timer.h
+
+
+ $PROJ_DIR$\..\src\include\drivers\tpm.h
+
+
+ $PROJ_DIR$\..\src\include\drivers\tsi.h
+
+
+ $PROJ_DIR$\..\src\include\drivers\uart.h
+
+
+
+ platforms
+
+ $PROJ_DIR$\..\src\include\platforms\freedom.h
+
+
+ $PROJ_DIR$\..\src\include\platforms\tower.h
+
+
+
+
+ other
+
+ $PROJ_DIR$\..\src\other\LandzoOLED.c
+
+
+ $PROJ_DIR$\..\src\other\LandzoOLED.h
+
+
+
+ platforms
+
+
+
+
+
diff --git a/plan_manage_main/ewp/settings/plan_manage_main.Debug.cspy.bat b/plan_manage_main/ewp/settings/plan_manage_main.Debug.cspy.bat
new file mode 100644
index 0000000..05e784b
--- /dev/null
+++ b/plan_manage_main/ewp/settings/plan_manage_main.Debug.cspy.bat
@@ -0,0 +1,24 @@
+@REM This batch file has been generated by the IAR Embedded Workbench
+@REM C-SPY Debugger, as an aid to preparing a command line for running
+@REM the cspybat command line utility using the appropriate settings.
+@REM
+@REM Note that this file is generated every time a new debug session
+@REM is initialized, so you may want to move or rename the file before
+@REM making changes.
+@REM
+@REM You can launch cspybat by typing the name of this batch file followed
+@REM by the name of the debug file (usually an ELF/DWARF or UBROF file).
+@REM
+@REM Read about available command line parameters in the C-SPY Debugging
+@REM Guide. Hints about additional command line parameters that may be
+@REM useful in specific cases:
+@REM --download_only Downloads a code image without starting a debug
+@REM session afterwards.
+@REM --silent Omits the sign-on message.
+@REM --timeout Limits the maximum allowed execution time.
+@REM
+
+
+"D:\work_soft\iar\arm\common\bin\cspybat" "D:\work_soft\iar\arm\arm\bin\armproc.dll" "D:\work_soft\iar\arm\arm\bin\armjlink.dll" %1 --plugin "D:\work_soft\iar\arm\arm\bin\armbat.dll" --device_macro "D:\work_soft\iar\arm\arm\config\debugger\Freescale\Kinetis.dmac" --backend -B "--endian=little" "--cpu=Cortex-M0+" "--fpu=None" "-p" "D:\work_soft\iar\arm\arm\CONFIG\debugger\Freescale\MKL25Z128xxx4.ddf" "--semihosting" "--device=MKL25Z128xxx4" "--drv_mtb_regbase=0xF0000000" "--drv_mtb_dwtregbase=0xF0001000" "--drv_mtb_minramaddr=0x20000000" "--drv_mtb_maxramaddr=0x20002FFF" "--drv_communication=USB0" "--jlink_speed=auto" "--jlink_initial_speed=1000" "--jlink_reset_strategy=0,0" "--jlink_interface=SWD" "--drv_catch_exceptions=0x000" "--drv_swo_clock_setup=72000000,0,2000000"
+
+
diff --git a/plan_manage_main/ewp/settings/plan_manage_main.crun b/plan_manage_main/ewp/settings/plan_manage_main.crun
new file mode 100644
index 0000000..ef39dce
--- /dev/null
+++ b/plan_manage_main/ewp/settings/plan_manage_main.crun
@@ -0,0 +1,16 @@
+
+
+
+ 1
+
+
+ *
+ *
+ *
+ 0
+ 1
+
+
+
+
+
diff --git a/plan_manage_main/ewp/settings/plan_manage_main.dbgdt b/plan_manage_main/ewp/settings/plan_manage_main.dbgdt
new file mode 100644
index 0000000..ba71258
--- /dev/null
+++ b/plan_manage_main/ewp/settings/plan_manage_main.dbgdt
@@ -0,0 +1,97 @@
+
+
+
+
+
+
+
+
+ 201221
+
+ 20
+ 915
+ 244
+ 61
+
+
+
+
+
+
+
+ 298272727
+
+
+
+
+
+ - Disassembly
- _I0
+
+
+
+ - 500
- 20
+
+
+
+ 11
+
+
+
+
+
+
+
+
+ TabID-12985-17520
+ Debug Log
+ Debug-Log
+
+
+
+ TabID-12462-17530
+ Build
+ Build
+
+
+
+
+ 0
+
+
+ TabID-23733-17524
+ Workspace
+ Workspace
+
+
+ plan_manage_mainplan_manage_main/srcplan_manage_main/src/appplan_manage_main/src/app/include
+
+
+
+ 0
+
+
+ TabID-1714-17527
+ Disassembly
+ Disassembly
+
+
+
+
+ 0
+
+
+
+
+
+ TextEditorD:\work_soft\iar\arm\arm\doc\infocenter\index.ENU.htmlTextEditor$WS_DIR$\plan_manage_main\src\app\debug.c00000016841684TextEditor$WS_DIR$\plan_manage_main\src\drivers\adc.c000000394394TextEditor$WS_DIR$\plan_manage_main\src\include\drivers\adc.h000000429429TextEditor$WS_DIR$\plan_manage_main\src\include\drivers\include.h000000159159TextEditor$WS_DIR$\plan_manage_main\src\include\common\common.h000000578578TextEditor$WS_DIR$\plan_manage_main\src\include\drivers\port.h000000787787TextEditor$WS_DIR$\plan_manage_main\src\include\cpu\MKL25Z4.h000001612411241TextEditor$WS_DIR$\plan_manage_main\src\include\drivers\uart.h000000383383TextEditor$WS_DIR$\plan_manage_main\src\app\include\debug.h000000356356TextEditor$WS_DIR$\plan_manage_main\src\drivers\SPI.c000000479479TextEditor$WS_DIR$\plan_manage_main\src\app\include\key.h000006543543TextEditor$WS_DIR$\plan_manage_main\src\app\pm_init.c000000238238TextEditor$WS_DIR$\plan_manage_main\src\app\include\knob.h000009496496TextEditor$WS_DIR$\plan_manage_main\src\other\LandzoOLED.h000000528528TextEditor$WS_DIR$\plan_manage_main\src\include\platforms\freedom.h000000542542TextEditor$WS_DIR$\plan_manage_main\src\include\drivers\fire_drivers_cfg.h000003496496TextEditor$WS_DIR$\plan_manage_main\src\app\knob.c000004416331633TextEditor$WS_DIR$\plan_manage_main\src\drivers\mcg.c000003556505650TextEditor$WS_DIR$\plan_manage_main\src\include\drivers\mcg.h000000456456TextEditor$WS_DIR$\plan_manage_main\src\drivers\uart.c0000024391519151TextEditor$WS_DIR$\plan_manage_main\src\common\io.c0000013715715TextEditor$WS_DIR$\plan_manage_main\src\common\printf.c000006119291929TextEditor$WS_DIR$\plan_manage_main\src\app\main.c000008183183TextEditor$WS_DIR$\plan_manage_main\src\app\isr.c0000022576576TextEditor$WS_DIR$\plan_manage_main\src\app\include\isr.h000003435435TextEditor$WS_DIR$\plan_manage_main\src\app\simulat_timer.c000006717151715TextEditor$WS_DIR$\plan_manage_main\src\include\drivers\gpio.h00000015811590TextEditor$WS_DIR$\plan_manage_main\src\app\key.c00000562537253728TextEditor$WS_DIR$\plan_manage_main\src\app\include\config.h0000083563560100000010000001
+
+
+
+
+
+
+ iaridepm.enu1debuggergui.enu1armjlink.enu1-2-2676389-2-2259311202344316701305469690428-2-2676257-2-2259311202344316701202344690428-2-22131282-2-212842151003125218941202344316701
+
+
+
+
diff --git a/plan_manage_main/ewp/settings/plan_manage_main.dni b/plan_manage_main/ewp/settings/plan_manage_main.dni
new file mode 100644
index 0000000..d44e65c
--- /dev/null
+++ b/plan_manage_main/ewp/settings/plan_manage_main.dni
@@ -0,0 +1,72 @@
+[Stack]
+FillEnabled=0
+OverflowWarningsEnabled=1
+WarningThreshold=90
+SpWarningsEnabled=1
+WarnLogOnly=1
+UseTrigger=1
+TriggerName=main
+LimitSize=0
+ByteLimit=50
+[DebugChecksum]
+Checksum=-1423666763
+[CodeCoverage]
+Enabled=_ 0
+[Exceptions]
+StopOnUncaught=_ 0
+StopOnThrow=_ 0
+[CallStack]
+ShowArgs=0
+[Disassembly]
+MixedMode=1
+[InterruptLog]
+LogEnabled=0
+SumEnabled=0
+GraphEnabled=0
+ShowTimeLog=1
+ShowTimeSum=1
+SumSortOrder=0
+[DataLog]
+LogEnabled=0
+SumEnabled=0
+GraphEnabled=0
+ShowTimeLog=1
+ShowTimeSum=1
+[Interrupts]
+Enabled=1
+[MemConfig]
+Base=1
+Manual=0
+Ddf=1
+TypeViol=0
+Stop=1
+[Simulator]
+Freq=10000000
+MultiCoreRunAll=1
+[JLinkDriver]
+CStepIntDis=_ 0
+TraceBufferSize=0x00010000
+TraceStallIfFIFOFull=0x00000000
+TracePortSize=0x00000000
+[Log file]
+LoggingEnabled=_ 0
+LogFile=_ ""
+Category=_ 0
+[TermIOLog]
+LoggingEnabled=_ 0
+LogFile=_ ""
+[CallStackLog]
+Enabled=0
+[DriverProfiling]
+Enabled=0
+Mode=1
+Graph=0
+Symbiont=0
+Exclusions=
+[Disassemble mode]
+mode=0
+[Breakpoints2]
+Count=0
+[Aliases]
+Count=0
+SuppressDialog=0
diff --git a/plan_manage_main/ewp/settings/plan_manage_main_Debug.jlink b/plan_manage_main/ewp/settings/plan_manage_main_Debug.jlink
new file mode 100644
index 0000000..2d53bb4
--- /dev/null
+++ b/plan_manage_main/ewp/settings/plan_manage_main_Debug.jlink
@@ -0,0 +1,35 @@
+[BREAKPOINTS]
+ForceImpTypeAny = 0
+ShowInfoWin = 1
+EnableFlashBP = 2
+BPDuringExecution = 0
+[CFI]
+CFISize = 0x00
+CFIAddr = 0x00
+[CPU]
+OverrideMemMap = 0
+AllowSimulation = 1
+ScriptFile=""
+[FLASH]
+CacheExcludeSize = 0x00
+CacheExcludeAddr = 0x00
+MinNumBytesFlashDL = 0
+SkipProgOnCRCMatch = 1
+VerifyDownload = 1
+AllowCaching = 1
+EnableFlashDL = 2
+Override = 0
+Device="UNSPECIFIED"
+[GENERAL]
+WorkRAMSize = 0x00
+WorkRAMAddr = 0x00
+RAMUsageLimit = 0x00
+[SWO]
+SWOLogFile=""
+[MEM]
+RdOverrideOrMask = 0x00
+RdOverrideAndMask = 0xFFFFFFFF
+RdOverrideAddr = 0xFFFFFFFF
+WrOverrideOrMask = 0x00
+WrOverrideAndMask = 0xFFFFFFFF
+WrOverrideAddr = 0xFFFFFFFF
diff --git a/plan_manage_main/src/app/debug.c b/plan_manage_main/src/app/debug.c
new file mode 100644
index 0000000..e9f8ad7
--- /dev/null
+++ b/plan_manage_main/src/app/debug.c
@@ -0,0 +1,201 @@
+/*
+ * debug.c - 璋冭瘯鍔熻兘鐨勫疄鐜
+ */
+
+#include
+
+#include "include.h"
+
+#include "include/debug.h"
+#include "include/config.h"
+
+
+
+volatile float recval_debug_uart[26];
+
+
+/*
+ * debug_init() - 鍒濆鍖栬皟璇曞姛鑳
+ */
+void debug_init(void)
+{
+ uart_init(DEBUG_UARTX, 115200);
+ uart_irq_EN(DEBUG_UARTX);
+}
+
+/*
+ * str_to_fp() - 灏嗗瓧绗︿覆杞崲涓烘诞鐐规暟
+ * @str: 瀛楃涓插湴鍧
+ * @len: 瀛楃涓查暱搴
+ *
+ * 杩欎釜鍑芥暟浼犲叆鐨勫瓧绗︿覆鏍煎紡搴旂鍚坈璇█鏍囧噯娴偣鏍煎紡锛屽苟涓旀病鏈'\0'
+ */
+float str_to_fp(char str[], uint8_t len)
+{
+ uint8_t is_nega = 0;
+ uint8_t place_fp = len;
+ uint32_t divrsor = 1;
+ uint32_t part_int = 0;
+
+ for (uint8_t i = 0; i < len; i++)
+ {
+ if (str[i] == '-')
+ is_nega = 1;
+ else if (str[i] == '+')
+ is_nega = 0;
+ else if (str[i] == '.')
+ place_fp = i;
+ else
+ part_int = part_int * 10 + str[i] - '0';
+ }
+ for (uint8_t i = place_fp + 1; i < len; i++)
+ {
+ divrsor *= 10;
+ }
+
+ return is_nega ? -(float)part_int / divrsor : (float)part_int / divrsor;
+}
+
+/*
+ * rec_debug_uart() - 鎺ユ敹uart浼犲叆鐨勮皟璇曚俊鎭紝骞惰浆鎹负娴偣鏁
+ *
+ */
+void rec_debug_uart(void)
+{
+ static char str_log[REC_DEBUG_UART_LEN + 1], index;
+ char ch;
+ float rec_fp;
+
+ ch = uart_getchar(DEBUG_UARTX);
+ if (((ch >= '0' && ch <= '9') || ch == '+' || ch == '-' || ch == '.' )
+ && index < REC_DEBUG_UART_LEN)
+ {
+ str_log[index++] = ch;
+ }
+ else if ((ch >= 'a' && ch <= 'z') || (ch >= 'A' && ch <= 'Z') || ch == '#')
+ {
+ rec_fp = str_to_fp(str_log, index);
+ switch (ch)
+ {
+ case 'a':
+ case 'A':
+ recval_debug_uart[A] = rec_fp;
+ break;
+ case 'b':
+ case 'B':
+ recval_debug_uart[B] = rec_fp;
+ break;
+ case 'c':
+ case 'C':
+ recval_debug_uart[C] = rec_fp;
+ break;
+ case 'd':
+ case 'D':
+ recval_debug_uart[D] = rec_fp;
+ break;
+ case 'e':
+ case 'E':
+ recval_debug_uart[E] = rec_fp;
+ break;
+ case 'f':
+ case 'F':
+ recval_debug_uart[F] = rec_fp;
+ break;
+ case 'g':
+ case 'G':
+ recval_debug_uart[G] = rec_fp;
+ break;
+ case 'h':
+ case 'H':
+ recval_debug_uart[H] = rec_fp;
+ break;
+ case 'i':
+ case 'I':
+ recval_debug_uart[I] = rec_fp;
+ break;
+ case 'j':
+ case 'J':
+ recval_debug_uart[J] = rec_fp;
+ break;
+ case 'k':
+ case 'K':
+ recval_debug_uart[K] = rec_fp;
+ break;
+ case 'l':
+ case 'L':
+ recval_debug_uart[L] = rec_fp;
+ break;
+ case 'm':
+ case 'M':
+ recval_debug_uart[M] = rec_fp;
+ break;
+ case 'n':
+ case 'N':
+ recval_debug_uart[N] = rec_fp;
+ break;
+ case 'o':
+ case 'O':
+ recval_debug_uart[O] = rec_fp;
+ break;
+ case 'p':
+ case 'P':
+ recval_debug_uart[P] = rec_fp;
+ break;
+ case 'q':
+ case 'Q':
+ recval_debug_uart[Q] = rec_fp;
+ break;
+ case 'r':
+ case 'R':
+ recval_debug_uart[R] = rec_fp;
+ break;
+ case 's':
+ case 'S':
+ recval_debug_uart[S] = rec_fp;
+ break;
+ case 't':
+ case 'T':
+ recval_debug_uart[T] = rec_fp;
+ break;
+ case 'u':
+ case 'U':
+ recval_debug_uart[U] = rec_fp;
+ break;
+ case 'v':
+ case 'V':
+ recval_debug_uart[V] = rec_fp;
+ break;
+ case 'w':
+ case 'W':
+ recval_debug_uart[W] = rec_fp;
+ break;
+ case 'x':
+ case 'X':
+ recval_debug_uart[X] = rec_fp;
+ break;
+ case 'y':
+ case 'Y':
+ recval_debug_uart[Y] = rec_fp;
+ break;
+ case 'z':
+ case 'Z':
+ recval_debug_uart[Z] = rec_fp;
+ break;
+ case '#':
+ break;
+ default:
+ break;
+ }
+ str_log[index] = '\0';
+ index = 0;
+ if (ch == '#')
+ {
+ printf("娓呴櫎缂撳瓨鎴愬姛\n");
+ }
+ else
+ {
+ printf("璁剧疆%c涓%s\n", ch, str_log);
+ }
+ }
+ return;
+}
diff --git a/plan_manage_main/src/app/display.c b/plan_manage_main/src/app/display.c
new file mode 100644
index 0000000..e69de29
diff --git a/plan_manage_main/src/app/flash.c b/plan_manage_main/src/app/flash.c
new file mode 100644
index 0000000..e69de29
diff --git a/plan_manage_main/src/app/include/config.h b/plan_manage_main/src/app/include/config.h
new file mode 100644
index 0000000..67de150
--- /dev/null
+++ b/plan_manage_main/src/app/include/config.h
@@ -0,0 +1,52 @@
+/*
+ * config.h - 閰嶇疆鏁翠釜宸ョ▼
+ *
+ */
+
+#ifndef CONFIG_H
+#define CONFIG_H
+
+
+
+
+/*
+ * 妯℃嫙瀹氭椂鍣ㄤ娇鐢ㄧ殑瀹氭椂鍣
+ */
+#define SIMULAT_TIMER_PITX PIT1
+
+
+/*
+ * 璋冭瘯妯″潡
+ */
+#define DEBUG_UARTX UART1
+
+
+
+/*
+ * 杈撳叆妯″潡
+ */
+#define UP_KEY_PINX PTE20
+#define DOWN_KEY_PINX PTA17
+#define OK_KEY_PINX PTE23
+#define RET_KEY_PINX PTA4
+#define AMS_KEY_PINX PTA5
+#define WIFI_KEY_PINX PTD7
+#define MR_KEY_PINX PTE30
+#define MB_KEY_PINX PTA16
+#define MUVB_KEY_PINX PTD6
+
+#define KNOB_A_PINX PTD3
+#define KNOB_B_PINX PTD4
+#define KNOB_KEY_PINX PTD5
+
+
+
+/*
+ * 鏄剧ず妯″潡
+ */
+#define TFT_UARTX UART2
+
+
+
+
+#endif // CONFIG_H
diff --git a/plan_manage_main/src/app/include/debug.h b/plan_manage_main/src/app/include/debug.h
new file mode 100644
index 0000000..081f4ca
--- /dev/null
+++ b/plan_manage_main/src/app/include/debug.h
@@ -0,0 +1,53 @@
+/*
+ * debug.h - 璋冭瘯
+ */
+
+#ifndef DEBUG_H
+#define DEBUG_H
+
+
+#define REC_DEBUG_UART_LEN 20
+
+
+enum rec_uart_flag_
+{
+ A = 0, C, B, D, E, F, G, H, I, J, K, L, M, N, O, P, Q, R, S, T, U, V, W, X, Y, Z
+};
+
+
+
+
+extern volatile float recval_debug_uart[26];
+
+
+
+
+/*
+ * debug_init() - 鍒濆鍖栬皟璇曞姛鑳
+ */
+void debug_init(void);
+
+/*
+ * str_to_fp() - 灏嗗瓧绗︿覆杞崲涓烘诞鐐规暟
+ * @str: 瀛楃涓插湴鍧
+ * @len: 瀛楃涓查暱搴
+ *
+ * 杩欎釜鍑芥暟浼犲叆鐨勫瓧绗︿覆鏍煎紡搴旂鍚坈璇█鏍囧噯娴偣鏍煎紡锛屽苟涓旀病鏈'\0'
+ */
+float str_to_fp(char str[], uint8_t len);
+
+/*
+ * rec_debug_uart() - 鎺ユ敹uart浼犲叆鐨勮皟璇曚俊鎭紝骞惰浆鎹负娴偣鏁
+ *
+ */
+void rec_debug_uart(void);
+
+
+
+
+
+
+
+
+
+#endif /* DEBUG_H */
diff --git a/plan_manage_main/src/app/include/display.h b/plan_manage_main/src/app/include/display.h
new file mode 100644
index 0000000..e69de29
diff --git a/plan_manage_main/src/app/include/flash.h b/plan_manage_main/src/app/include/flash.h
new file mode 100644
index 0000000..e69de29
diff --git a/plan_manage_main/src/app/include/input.h b/plan_manage_main/src/app/include/input.h
new file mode 100644
index 0000000..6dcae03
--- /dev/null
+++ b/plan_manage_main/src/app/include/input.h
@@ -0,0 +1,37 @@
+/*
+ * 鏂囦欢锛歩nput.h
+ * 鍔熻兘锛氬皢澶栬杈撳叆鐨勬暟鎹浆鎹负鍗曠墖鏈哄唴瀛樹腑鐨勬暟鎹
+ */
+
+#ifndef INPUT_H
+#define INPUT_H
+
+
+typedef struct InData_
+{
+ uint8_t isWifiOn : 1;
+ uint8_t isPlanMode : 1;
+
+ uint8_t isRedL : 1;
+ uint8_t isBlueL : 1;
+ uint8_t isUvbL : 1;
+
+ uint8_t knobV;
+} InData;
+
+
+void InitInput(void);
+
+void
+
+
+
+
+
+
+
+
+
+
+
+#endif // INPUT_H
diff --git a/plan_manage_main/src/app/include/isr.h b/plan_manage_main/src/app/include/isr.h
new file mode 100644
index 0000000..fa3d122
--- /dev/null
+++ b/plan_manage_main/src/app/include/isr.h
@@ -0,0 +1,48 @@
+/*
+ * isr.h - 重新宏定义中断号,重映射中断向量表里的中断函数地址,
+ * 使其指向所定义的中断服务函数。
+ *
+ * 只能在"vectors.c"包含,而且必须在"vectors.h"包含的后面!!!
+ */
+
+#ifndef ISR_H
+#define ISR_H
+
+
+
+#ifdef VECTOR_028
+#undef VECTOR_028
+#define VECTOR_028 UART0_isr
+#endif
+
+#ifdef VECTOR_038
+#undef VECTOR_038
+#define VECTOR_038 PIT_isr
+#endif
+
+#ifdef VECTOR_046
+#undef VECTOR_046
+#define VECTOR_046 PTA_isr
+#endif
+
+
+#ifdef VECTOR_047
+#undef VECTOR_047
+#define VECTOR_047 PTD_isr
+#endif
+
+
+
+void PIT_isr(void);
+
+
+void PTA_isr(void);
+
+
+void PTD_isr(void);
+
+
+void UART0_isr(void);
+
+
+#endif /* ISR_H */
diff --git a/plan_manage_main/src/app/include/key.h b/plan_manage_main/src/app/include/key.h
new file mode 100644
index 0000000..737761a
--- /dev/null
+++ b/plan_manage_main/src/app/include/key.h
@@ -0,0 +1,57 @@
+/* key.h - 鐩戞祴骞堕噰闆嗘寜閿殑杈撳叆
+ * 鍏辨湁鍥涚杈撳叆锛屾棤閿紝鍗曞嚮锛屽弻鍑伙紝闀垮嚮銆
+ * 浣跨敤涓涓畾鏃跺櫒姣10ms閲囬泦涓娆o鐘舵佹潵瀹炵幇鐨勩
+ */
+
+#ifndef KEY_H
+#define KEY_H
+
+
+typedef enum key_mean_
+{
+ N_KEY = 0, S_KEY, D_KEY, L_KEY
+} key_mean;
+
+
+
+/*
+ * key_type - 鎸夐敭鐨勭绫
+ */
+typedef enum key_type_
+{
+ UP_KEY = 0, DOWN_KEY, OK_KEY, RET_KEY, AMS_KEY, WIFI_KEY, MR_KEY, MB_KEY, MUVB_KEY
+} key_type;
+
+
+
+/*
+ * key_init() - 鎸夐敭妯″潡鍒濆鍖
+ *
+ */
+void key_init(void);
+
+
+/*
+ * key_detect() - 妫娴嬫寜閿
+ *
+ * 瑕佹眰姣忛殧10ms璋冪敤涓娆
+ */
+void key_detect(void);
+
+
+
+/*
+ * get_key_mean() - 寰楀埌鎸囧畾鐨勬寜閿俊鎭
+ *
+ * 杩欎釜鍑芥暟涓湪鍙栧緱淇℃伅鍚庝細灏嗗搴旀寜閿噸鏂版爣璁颁负N_KEY
+ */
+key_mean get_key_mean(key_type key_t);
+
+
+
+
+
+
+
+
+#endif // KEY_H
diff --git a/plan_manage_main/src/app/include/knob.h b/plan_manage_main/src/app/include/knob.h
new file mode 100644
index 0000000..731214b
--- /dev/null
+++ b/plan_manage_main/src/app/include/knob.h
@@ -0,0 +1,56 @@
+/*
+ * knob.h - 鎻愪緵鏃嬮挳杈撳叆鐨勬帴鍙e嚱鏁
+ *
+ * 浣跨敤鐨勬槸涓涓暟瀛楁棆閽紝鍒╃敤璁℃暟鏉ラ噰闆嗚緭鍏
+ */
+
+#ifndef KNOB_H
+#define KNOB_H
+
+#include "arm_cm0.h"
+#include "vectors.h"
+
+
+
+
+/*
+ * knob_init() - 涓烘棆閽緭鍏ヨ屾墽琛岀殑鍒濆鍖
+ *
+ * 鏃嬮挳鐨勬娴嬪垵濮嬪寲鍚庨粯璁ゆ槸绂佹鐨
+ */
+void knob_init(void);
+
+
+
+/*
+ * knob_enable() - 浣胯兘鏃嬮挳鑴夊啿妫娴
+ */
+void knob_enable(void);
+
+
+/*
+ * knob_disable() - 绂佹鏃嬮挳鑴夊啿妫娴
+ */
+void knob_disable(void);
+
+
+/*
+ * knob_clear() - 娓呴櫎鏃嬮挳鍊
+ */
+void knob_clear(void);
+
+/*
+ * get_knob_val() - 杩斿洖鏃嬮挳鍊
+ */
+int32_t get_knob_val(void);
+
+
+/*
+ * knob_detect() - 鏃嬮挳妫娴
+ *
+ * 杩欎釜鍑芥暟闇瑕佸湪鏃嬮挳缂栫爜鍣ㄧ殑A鐩歌緭鍑哄彂鐢熸部璺冲彉鏃惰皟鐢紝鍗充笂涓嬫部涓柇鏃
+ */
+void knob_detect(void);
+
+
+#endif /* KNOB_H */
diff --git a/plan_manage_main/src/app/include/output.h b/plan_manage_main/src/app/include/output.h
new file mode 100644
index 0000000..e69de29
diff --git a/plan_manage_main/src/app/include/plan_handle.h b/plan_manage_main/src/app/include/plan_handle.h
new file mode 100644
index 0000000..e69de29
diff --git a/plan_manage_main/src/app/include/pm_init.h b/plan_manage_main/src/app/include/pm_init.h
new file mode 100644
index 0000000..8eb8b8c
--- /dev/null
+++ b/plan_manage_main/src/app/include/pm_init.h
@@ -0,0 +1,9 @@
+/*
+ * pm_init.h - 瀵规暣涓簲鐢ㄧ▼搴忕殑鍒濆鍖
+ */
+
+
+/*
+ * pm_init() - 鍒濆鍖
+ */
+void pm_init(void);
diff --git a/plan_manage_main/src/app/include/simulat_timer.h b/plan_manage_main/src/app/include/simulat_timer.h
new file mode 100644
index 0000000..3df2df1
--- /dev/null
+++ b/plan_manage_main/src/app/include/simulat_timer.h
@@ -0,0 +1,107 @@
+/*
+ * simulat_timer.h - 瀹炵幇涓涓ā鎷熷畾鏃跺櫒
+ */
+
+#ifndef SIMULAT_TIMER_H
+#define SIMULAT_TIMER_H
+
+#include
+
+/*
+ * 妯℃嫙瀹氭椂鍣ㄧ殑鏁伴噺
+ */
+#define SIMULAT_TIMER_NUM 3
+
+
+
+typedef struct st_register_
+{
+ uint8_t count; // 瀹氭椂鍣ㄨ鏁
+ uint32_t cmr; // 姣旇緝瀵勫瓨鍣
+ struct
+ {
+ uint8_t ten : 1; // 浣胯兘鏍囧織
+ uint8_t tov : 1; // 婧㈠嚭鏍囧織
+ uint8_t tfc : 1; // 鑷敱杩愯鏍囧織
+ uint8_t tcf : 1; // 姣旇緝鏍囧織
+ } flag;
+} st_register;
+
+
+typedef enum st_mode_
+{
+ COMPARE = 0,
+ NO_COMPARE
+} st_mode;
+
+/*
+ * st_init() - 鍒濆鍖栧疄鐜版ā鎷熷畾鏃跺櫒鎵闇鐨刾it瀹氭椂鍣
+ *
+ * 鍩虹瀹氭椂涓1ms
+ */
+void st_base_init(void);
+
+
+/*
+ * st_init() - 鍒濆鍖栦竴涓粰瀹氱紪鍙风殑妯℃嫙瀹氭椂鍣
+ * @n: 瀹氭椂鍣ㄧ紪鍙
+ * @st_m: 瀹氭椂妯″紡
+ * @cmr_v: 瀹氭椂鍣ㄦ瘮杈冨硷紝鍦ㄩ潪姣旇緝妯″紡鍙互涓轰换鎰忓
+ *
+ * 杩欎釜鍑芥暟杩斿洖0琛ㄧず姝e父瀹屾垚浜嗗垵濮嬪寲浠诲姟锛岃繑鍥瀪0琛ㄧず瀹氭椂鍣ㄥ凡鎵撳紑鎴栦笉瀛樺湪
+ */
+uint8_t st_init(uint8_t n, st_mode st_m, uint32_t cmr_v);
+
+
+/*
+ * st_close() - 鍏抽棴涓涓粰瀹氱紪鍙风殑妯℃嫙瀹氭椂鍣
+ * @n: 瀹氭椂鍣ㄧ紪鍙
+ */
+void st_close(uint8_t n);
+
+/*
+ * st_tcf() - 鏌ヨtcf浣嶈繑鍥
+ * @n: 瀹氭椂鍣ㄧ紪鍙
+ *
+ * 杩欎釜鍑芥暟鍦ㄦ病鏈夎繃姣旇緝鍊肩殑鏃跺欒繑鍥0锛屽凡杩囨瘮杈冨煎緱鏃跺欒繑鍥1锛屽浜庝笉瀛樺湪鎴栨湭鎵撳紑
+ */
+uint8_t st_tcf(uint8_t n);
+
+
+
+/*
+ * st_tov() - 鏌ヨtov浣嶈繑鍥
+ * @n: 瀹氭椂鍣ㄧ紪鍙
+ *
+ * 杩欎釜鍑芥暟鍦ㄦ病鏈夋孩鍑烘椂杩斿洖0锛屾病鏈夋孩鍑烘椂杩斿洖1锛屽浜庝笉瀛樺湪鎴栨湭鎵撳紑
+ */
+uint8_t st_tov(uint8_t n);
+
+
+
+/*
+ * st_count() - 鏌ヨ褰撳墠妯℃嫙瀹氭椂鍊
+ * @n: 瀹氭椂鍣ㄧ紪鍙
+ *
+ * 瀵逛簬涓嶅瓨鍦ㄦ垨鏈墦寮
+ */
+uint32_t st_count(uint8_t n);
+
+
+
+/********************ISR******************/
+
+/*
+ * st_base() -瀹氭椂璋冪敤浠ユā鎷烴璺畾鏃跺櫒
+ *
+ * 瀹氭椂鐨勬渶灏忛棿闅旂瓑浜庤繖涓嚱鏁拌璋冪敤鐨勫懆鏈
+ */
+void st_base(void);
+
+
+
+
+
+
+
+#endif /* SIMULAT_TIMER_H */
diff --git a/plan_manage_main/src/app/include/tft.h b/plan_manage_main/src/app/include/tft.h
new file mode 100644
index 0000000..de9048b
--- /dev/null
+++ b/plan_manage_main/src/app/include/tft.h
@@ -0,0 +1,25 @@
+/*
+ * tft.h - tft鎺ュ彛
+ */
+
+
+#ifndef TFT_H
+#define TFT_H
+
+
+void tft_init(void);
+
+void tft_up(void);
+
+void tft_down(void);
+
+void tft_ok(void);
+
+void tft_ret(void);
+
+
+
+
+
+
+#endif /* TFT_H */
diff --git a/plan_manage_main/src/app/include/time.h b/plan_manage_main/src/app/include/time.h
new file mode 100644
index 0000000..e69de29
diff --git a/plan_manage_main/src/app/input.c b/plan_manage_main/src/app/input.c
new file mode 100644
index 0000000..e69de29
diff --git a/plan_manage_main/src/app/isr.c b/plan_manage_main/src/app/isr.c
new file mode 100644
index 0000000..68c0d1d
--- /dev/null
+++ b/plan_manage_main/src/app/isr.c
@@ -0,0 +1,57 @@
+/*
+ * isr.c - 中断服务函数
+ */
+
+#include
+
+#include "include.h"
+
+#include "include/isr.h"
+#include "include/simulat_timer.h"
+#include "include/debug.h"
+#include "include/config.h"
+#include "include/knob.h"
+
+
+
+/*
+ * PIT_isr() - pit模块的中断服务函数
+ */
+void PIT_isr(void)
+{
+ if ((PIT_TFLG(SIMULAT_TIMER_PITX) & PIT_TFLG_TIF_MASK) != 0)
+ {
+ PIT_Flag_Clear(SIMULAT_TIMER_PITX);
+ st_base();
+ }
+ return;
+}
+
+
+/*
+ * PTA_isr() - PTA中断服务函数
+ */
+void PTA_isr(void)
+{
+ PORT_FUNC(A, KNOB_A_PINX, knob_detect);
+
+ return;
+}
+
+/*
+ * PTD_isr()
+ */
+void PTD_isr()
+{
+ PORT_FUNC(D, KNOB_A_PINX, knob_detect);
+ return;
+}
+
+/*
+ * UART0_isr() - uart0中断服务函数
+ */
+void UART0_isr(void)
+{
+ rec_debug_uart();
+ return;
+}
diff --git a/plan_manage_main/src/app/key.c b/plan_manage_main/src/app/key.c
new file mode 100644
index 0000000..5993891
--- /dev/null
+++ b/plan_manage_main/src/app/key.c
@@ -0,0 +1,338 @@
+/*
+ * key.c - 鐩戞祴骞堕噰闆嗘寜閿殑杈撳叆
+ *
+ * 鍏辨湁鍥涚杈撳叆锛屾棤閿紝鍗曞嚮锛屽弻鍑伙紝闀垮嚮銆
+ * 姣10ms闇瑕侀噰闆嗕竴娆o鐘舵併
+ * 姣忓鍑忎竴涓寜閿紝闇瑕佽缃殑鏈:
+ *
+ * key_type鏋氫妇绫诲瀷涓搴旂殑鏋氫妇鍏冪礌
+ *
+ * 瀵瑰簲鐨刱ey_infomation鍙橀噺
+ *
+ * key_init()鍑芥暟涓搴旂殑鍒濆鍖栨潯鐩
+ * key_detect()鍑芥暟涓搴旀娴嬫潯鐩
+ * get_key_mean()鍑芥暟涓搴旇幏鍙栨潯鐩
+ */
+
+
+#include
+
+#include "include.h"
+
+#include "include/key.h"
+#include "include/config.h"
+
+
+/*
+ * key_state - 琛ㄧず鎸夐敭鐨勭姸鎬
+ * key_state_0 鍒濆鐘舵侊紝鎴栬呰〃绀虹涓娆″崟鍑荤姸鎬
+ * key_state_1 娑堟姈鍜岀‘璁ょ姸鎬侊紝鎴栬〃绀虹浜屾鍗曞嚮鐘舵
+ * key_state_2 鎸夐敭璁℃椂鐘舵
+ * key_state_3 鎸夐敭绛夊緟閲婃斁鐘舵
+ */
+typedef enum key_state_
+{
+ key_state_0 = 0, key_state_1, key_state_2, key_state_3
+} key_state;
+
+/*
+ * IO鐘舵佺鍙峰畾涔
+ */
+typedef enum state_sign_
+{
+ INVALID = 0, VALID = 1
+} state_sign;
+
+
+typedef struct key_infomation_
+{
+ key_state state_base;
+ uint8_t time_base;
+
+ key_state state;
+ uint8_t time;
+
+ key_mean key_m;
+
+ state_sign (*get_state_io)(void);
+} key_infomation;
+
+
+
+state_sign get_state_up_key_io(void)
+{ return !gpio_get(UP_KEY_PINX) ? VALID : INVALID; }
+
+state_sign get_state_down_key_io(void)
+{ return !gpio_get(DOWN_KEY_PINX) ? VALID : INVALID; }
+
+state_sign get_state_ok_key_io(void)
+{ return !gpio_get(OK_KEY_PINX) ? VALID : INVALID; }
+
+state_sign get_state_ret_key_io(void)
+{ return !gpio_get(RET_KEY_PINX) ? VALID : INVALID; }
+
+state_sign get_state_ams_key_io(void)
+{ return !gpio_get(AMS_KEY_PINX) ? VALID : INVALID; }
+
+state_sign get_state_wifi_key_io(void)
+{ return !gpio_get(WIFI_KEY_PINX) ? VALID : INVALID; }
+
+state_sign get_state_mr_key_io(void)
+{ return !gpio_get(MR_KEY_PINX) ? VALID : INVALID; }
+
+state_sign get_state_mb_key_io(void)
+{ return !gpio_get(MB_KEY_PINX) ? VALID : INVALID; }
+
+state_sign get_state_muvb_key_io(void)
+{ return !gpio_get(MUVB_KEY_PINX) ? VALID : INVALID; }
+
+
+static volatile key_infomation
+ up_key_info = { key_state_0, 0, key_state_0, 0, N_KEY, get_state_up_key_io },
+ down_key_info = { key_state_0, 0, key_state_0, 0, N_KEY, get_state_down_key_io },
+ ok_key_info = { key_state_0, 0, key_state_0, 0, N_KEY, get_state_ok_key_io },
+ ret_key_info = { key_state_0, 0, key_state_0, 0, N_KEY, get_state_ret_key_io },
+ ams_key_info = { key_state_0, 0, key_state_0, 0, N_KEY, get_state_ams_key_io },
+ wifi_key_info = { key_state_0, 0, key_state_0, 0, N_KEY, get_state_wifi_key_io },
+ mr_key_info = { key_state_0, 0, key_state_0, 0, N_KEY, get_state_mr_key_io },
+ mb_key_info = { key_state_0, 0, key_state_0, 0, N_KEY, get_state_mb_key_io },
+ muvb_key_info = { key_state_0, 0, key_state_0, 0, N_KEY, get_state_muvb_key_io };
+
+
+
+/*
+ * key_init() - 鎸夐敭妯″潡鍒濆鍖
+ *
+ */
+void key_init(void)
+{
+ gpio_Interrupt_init(UP_KEY_PINX, GPI_UP_PF, GPI_DISAB);
+ gpio_Interrupt_init(DOWN_KEY_PINX, GPI_UP_PF, GPI_DISAB);
+ gpio_Interrupt_init(OK_KEY_PINX, GPI_UP_PF, GPI_DISAB);
+ gpio_Interrupt_init(RET_KEY_PINX, GPI_UP_PF, GPI_DISAB);
+ gpio_Interrupt_init(AMS_KEY_PINX, GPI_UP_PF, GPI_DISAB);
+ gpio_Interrupt_init(WIFI_KEY_PINX, GPI_UP_PF, GPI_DISAB);
+ gpio_Interrupt_init(MR_KEY_PINX, GPI_UP_PF, GPI_DISAB);
+ gpio_Interrupt_init(MB_KEY_PINX, GPI_UP_PF, GPI_DISAB);
+ gpio_Interrupt_init(MUVB_KEY_PINX, GPI_UP_PF, GPI_DISAB);
+
+
+ /*
+ * 鍒濆鍖栧畾鏃跺櫒涓10ms瀹氭椂涓柇锛岀敤浜庢寜閿娴嬬殑瀹氭椂鎵ц
+ */
+
+
+ return;
+}
+
+
+/*
+ * key_read_base - 鎸夐敭鍩虹璇诲彇鍑芥暟锛
+ * @key_info: 瑕佹娴嬫寜閿殑鎵闇淇℃伅,蹇呴』鍦ㄦ槸鍏ㄥ眬鍙橀噺鍖轰腑瀛樺偍鐨
+ *
+ * 杩欎釜鍑芥暟杩斿洖 N_KEY,S_KEY,L_KEY涓夌鎯呭喌
+ */
+key_mean key_read_base(volatile key_infomation *key_info)
+{
+ state_sign key_state_io;
+ key_mean key_m = N_KEY;
+
+ key_state_io = (*((*key_info).get_state_io))(); // 鑾峰彇io鐘舵
+ switch((*key_info).state_base)
+ {
+ case key_state_0:
+ if (key_state_io == VALID)
+ {
+ (*key_info).state_base = key_state_1; // 鎸夐敭鎸変笅鍚庨鍏堣繘鍏ユ秷鎶栧拰鎸夐敭纭
+ // 璁ょ姸鎬
+ }
+ break;
+ case key_state_1:
+ if (key_state_io == VALID)
+ {
+ (*key_info).time_base = 0;
+ (*key_info).state_base = key_state_2; // 鎸夐敭濡傛灉浠嶇劧鎸変笅锛屽垯娑堟姈瀹屾垚锛
+ // 鐘舵佽浆鎹,姝ゆ椂杩斿洖鏃犳寜閿簨浠
+ }
+ else
+ {
+ (*key_info).state_base = key_state_0;
+ }
+ break;
+ case key_state_2:
+ if (key_state_io == INVALID)
+ {
+ key_m = S_KEY; // 姝ゆ椂鎸夐敭閲婃斁璇存槑涓轰竴娆$煭鎿嶄綔
+ (*key_info).state_base = key_state_0;
+ }
+ else if (++(*key_info).time_base > 100) // 缁х画鎸変笅锛岃鏃跺姞10ms锛屽嵆鏈嚱
+ // 鏁拌皟鐢ㄥ懆鏈
+ {
+ key_m = L_KEY; // 鎸変笅鏃堕棿澶т簬1s锛岃繑鍥 闀挎寜閿
+ (*key_info).state_base = key_state_3; // 杞崲涓虹瓑寰呮寜閿噴鏀剧姸鎬
+ }
+ break;
+ case key_state_3:
+ if (key_state_io == INVALID)
+ {
+ (*key_info).state_base = key_state_0; // 鎸夐敭姝ゆ椂宸查噴鏀撅紝杞崲涓哄垵濮嬬姸鎬
+ }
+ break;
+ default:
+ break;
+ }
+ return key_m;
+}
+
+/*
+ * key_read - 鎸夐敭璇诲彇鍑芥暟
+ * @key_info: 瑕佹娴嬬殑鎸夐敭鎵闇鐨勪俊鎭紝蹇呴』鏄湪鍏ㄥ眬鍙橀噺鍖轰腑瀛樺偍鐨
+ *
+ * 杩欎釜鍑芥暟浼氳繑鍥濶_KEY,S_KEY,D_KEY锛孡_KEY鍥涙儏鍐
+ */
+key_mean key_read(volatile key_infomation *key_info)
+{
+ key_mean key_m = N_KEY,
+ key_m_temp;
+
+ key_m_temp = key_read_base(key_info);
+ switch((*key_info).state)
+ {
+ case key_state_0:
+ if (key_m_temp == S_KEY)
+ {
+ (*key_info).time = 0; // 绗竴娆″崟鍑荤姸鎬侊紝浠嶇劧杩斿洖鏃犻敭锛屽埌涓嬩釜鍛ㄦ湡
+ // 鍒ゆ柇鏄惁鍑虹幇鍙屽嚮
+ (*key_info).state = key_state_1;
+ }
+ else
+ {
+ key_m = key_m_temp; // 瀵逛簬闈炲崟鍑伙紝杩斿洖鍘熶簨浠
+ }
+ break;
+ case key_state_1:
+ if (key_m_temp == S_KEY) // 鍙堜竴娆″崟鍑伙紝闂撮殧 < 300ms
+ {
+ key_m = D_KEY;
+ (*key_info).state = key_state_0;
+ }
+ else
+ {
+ if (++(*key_info).time > 30)
+ {
+ key_m = S_KEY; // 300ms鍐呮病鏈夊啀鍑虹幇鍗曞嚮浜嬩欢锛屽垯杩斿洖涓婁竴娆″崟
+ // 鍑讳簨浠
+ (*key_info).state = key_state_0;
+ }
+ }
+ break;
+ default:
+ break;
+ }
+ return key_m;
+}
+
+
+/*
+ * key_detect() - 妫娴嬫寜閿
+ *
+ * 杩欎釜鍑芥暟浠呭湪N_KEY鐘舵佹椂璁板綍鎸夐敭淇℃伅锛孨_KEY鏄湪搴旂敤绋嬪簭鑾峰彇鎸夐敭淇℃伅鐨勬椂鍊欏悓鏃惰璁
+ * 缃殑锛岃繖鏍峰仛鐨勭洰鐨勬槸淇濊瘉閲囬泦鍒扮殑鎸夐敭涓瀹氫細琚墽琛
+ * 瑕佹眰姣忛殧10ms璋冪敤涓娆
+ */
+void key_detect(void)
+{
+ key_mean key_m;
+
+ if ((key_m = key_read(&up_key_info)) != N_KEY)
+ {
+ up_key_info.key_m = key_m;
+ }
+ if ((key_m = key_read(&down_key_info)) != N_KEY)
+ {
+ down_key_info.key_m = key_m;
+ }
+ if ((key_m = key_read(&ok_key_info)) != N_KEY)
+ {
+ ok_key_info.key_m = key_m;
+ }
+ if ((key_m = key_read(&ret_key_info)) != N_KEY)
+ {
+ ret_key_info.key_m = key_m;
+ }
+ if ((key_m = key_read(&ams_key_info)) != N_KEY)
+ {
+ ams_key_info.key_m = key_m;
+ }
+ if ((key_m = key_read(&wifi_key_info)) != N_KEY)
+ {
+ wifi_key_info.key_m = key_m;
+ }
+ if ((key_m = key_read(&mr_key_info)) != N_KEY)
+ {
+ mr_key_info.key_m = key_m;
+ }
+ if ((key_m = key_read(&mb_key_info)) != N_KEY)
+ {
+ mb_key_info.key_m = key_m;
+ }
+ if ((key_m = key_read(&muvb_key_info)) != N_KEY)
+ {
+ muvb_key_info.key_m = key_m;
+ }
+ return;
+}
+
+
+/*
+ * get_key_mean() - 寰楀埌鎸囧畾鐨勬寜閿俊鎭
+ *
+ * 杩欎釜鍑芥暟涓湪鍙栧緱淇℃伅鍚庝細灏嗗搴旀寜閿噸鏂版爣璁颁负N_KEY
+ */
+key_mean get_key_mean(key_type key_t)
+{
+ key_mean key_m;
+
+ switch (key_t)
+ {
+ case UP_KEY:
+ key_m = up_key_info.key_m;
+ up_key_info.key_m = N_KEY;
+ break;
+ case DOWN_KEY:
+ key_m = down_key_info.key_m;
+ down_key_info.key_m = N_KEY;
+ break;
+ case OK_KEY:
+ key_m = ok_key_info.key_m;
+ ok_key_info.key_m = N_KEY;
+ break;
+ case RET_KEY:
+ key_m = ret_key_info.key_m;
+ ret_key_info.key_m = N_KEY;
+ break;
+ case AMS_KEY:
+ key_m = ams_key_info.key_m;
+ ams_key_info.key_m = N_KEY;
+ break;
+ case WIFI_KEY:
+ key_m = wifi_key_info.key_m;
+ wifi_key_info.key_m = N_KEY;
+ break;
+ case MR_KEY:
+ key_m = mr_key_info.key_m;
+ mr_key_info.key_m = N_KEY;
+ break;
+ case MB_KEY:
+ key_m = mb_key_info.key_m;
+ mb_key_info.key_m = N_KEY;
+ break;
+ case MUVB_KEY:
+ key_m = muvb_key_info.key_m;
+ muvb_key_info.key_m = N_KEY;
+ break;
+ default:
+ break;
+ }
+ return key_m;
+}
diff --git a/plan_manage_main/src/app/knob.c b/plan_manage_main/src/app/knob.c
new file mode 100644
index 0000000..799418e
--- /dev/null
+++ b/plan_manage_main/src/app/knob.c
@@ -0,0 +1,95 @@
+/*
+ * knob.c - 鎻愪緵鏃嬮挳杈撳叆鐨勬帴鍙e嚱鏁
+ *
+ * 浣跨敤鐨勬槸涓涓暟瀛楁棆閽紝鍒╃敤璁℃暟鏉ラ噰闆嗚緭鍏
+ */
+
+#include
+
+#include "include.h"
+
+
+#include "include/knob.h"
+#include "include/config.h"
+
+
+
+static volatile int32_t knob_val;
+
+
+
+
+/*
+ * knob_init() - 涓烘棆閽緭鍏ヨ屾墽琛岀殑鍒濆鍖
+ *
+ * 鏃嬮挳鐨勬娴嬪垵濮嬪寲鍚庨粯璁ゆ槸绂佹鐨
+ */
+void knob_init(void)
+{
+ gpio_Interrupt_init(KNOB_A_PINX, GPI_UP_PF, GPI_INP_EITH);
+ gpio_Interrupt_init(KNOB_B_PINX, GPI_UP_PF, GPI_DISAB);
+ // gpio_Interrupt_init(KNOB_KEY_PINX, GPI_UP_PF, GPI_INP_EITH);
+ disable_irq(PortD_irq_no);
+
+}
+
+
+/*
+ * knob_enable() - 浣胯兘鏃嬮挳鑴夊啿妫娴
+ */
+void knob_enable(void)
+{
+ enable_irq(PortD_irq_no);
+ return;
+}
+
+/*
+ * knob_disable() - 绂佹鏃嬮挳鑴夊啿妫娴
+ */
+void knob_disable(void)
+{
+ disable_irq(PortA_irq_no);
+ return;
+}
+
+
+
+/*
+ * knob_clear() - 娓呴櫎鏃嬮挳鍊
+ */
+void knob_clear(void)
+{
+ knob_val = 0;
+ return;
+}
+
+/*
+ * get_knob_val() - 杩斿洖鏃嬮挳鍊
+ */
+int32_t get_knob_val(void)
+{
+ return knob_val;
+}
+
+
+/*
+ * knob_detect() - 鏃嬮挳妫娴
+ *
+ * 杩欎釜鍑芥暟闇瑕佸湪鏃嬮挳缂栫爜鍣ㄧ殑A鐩歌緭鍑哄彂鐢熸部璺冲彉鏃惰皟鐢紝鍗充笂涓嬫部涓柇鏃
+ */
+void knob_detect(void)
+{
+ uint8_t knob_A, knob_B;
+
+ knob_A = gpio_get(KNOB_A_PINX);
+ knob_B = gpio_get(KNOB_B_PINX);
+ if ((knob_A == 0 && knob_B == 1) || (knob_A == 1 && knob_B == 0))
+ {
+ knob_val++;
+ }
+ else // 鍗砳f ((knob_A == 0 && knob_B == 0) || (knob_A == 1 && knob_B == 1))
+ {
+ knob_val--;
+ }
+ return;
+}
diff --git a/plan_manage_main/src/app/main.c b/plan_manage_main/src/app/main.c
new file mode 100644
index 0000000..a3f6ddd
--- /dev/null
+++ b/plan_manage_main/src/app/main.c
@@ -0,0 +1,56 @@
+
+#include
+#include
+
+#include "include/pm_init.h"
+#include "include/simulat_timer.h"
+#include "include/key.h"
+#include "include/knob.h"
+
+
+void main(void)
+{
+ int32_t log = 0, knob_v;
+
+ pm_init();
+
+ st_init(0, COMPARE, 10);
+ st_init(1, COMPARE, 1);
+
+ knob_enable();
+
+ while (1)
+ {
+ if (st_tcf(0) == 1)
+ {
+ key_detect();
+ }
+ if (st_tcf(1) == 1)
+ {
+ if (log != (knob_v = get_knob_val()))
+ {
+ printf("knob = %d\n", knob_v);
+ log = knob_v;
+ }
+ }
+
+ switch (get_key_mean(OK_KEY))
+ {
+ case N_KEY:
+ //printf("无键\n");
+ break;
+ case S_KEY:
+ printf("单击\n");
+ break;
+ case D_KEY:
+ printf("双击\n");
+ break;
+ case L_KEY:
+ printf("长按\n");
+ break;
+ default:
+ break;
+ }
+ }
+ return;
+}
diff --git a/plan_manage_main/src/app/output.c b/plan_manage_main/src/app/output.c
new file mode 100644
index 0000000..e69de29
diff --git a/plan_manage_main/src/app/plan_handle.c b/plan_manage_main/src/app/plan_handle.c
new file mode 100644
index 0000000..e69de29
diff --git a/plan_manage_main/src/app/pm_init.c b/plan_manage_main/src/app/pm_init.c
new file mode 100644
index 0000000..840ed81
--- /dev/null
+++ b/plan_manage_main/src/app/pm_init.c
@@ -0,0 +1,20 @@
+/*
+ * pm_init.c - 瀵规暣涓簲鐢ㄧ▼搴忕殑鍒濆鍖
+ */
+
+#include "include/simulat_timer.h"
+#include "include/key.h"
+#include "include/knob.h"
+#include "include/debug.h"
+
+
+/*
+ * pm_init() - 鍒濆鍖
+ */
+void pm_init(void)
+{
+ debug_init();
+ key_init();
+ knob_init();
+ st_base_init();
+}
diff --git a/plan_manage_main/src/app/simulat_timer.c b/plan_manage_main/src/app/simulat_timer.c
new file mode 100644
index 0000000..02952d9
--- /dev/null
+++ b/plan_manage_main/src/app/simulat_timer.c
@@ -0,0 +1,153 @@
+/*
+ * simulat_timer.h - 瀹炵幇涓涓ā鎷熷畾鏃跺櫒
+ */
+
+#include "include.h"
+
+#include "include/simulat_timer.h"
+#include "include/config.h"
+
+static volatile st_register st_r[SIMULAT_TIMER_NUM];
+
+
+
+/*
+ * st_init() - 鍒濆鍖栧疄鐜版ā鎷熷畾鏃跺櫒鎵闇鐨刾it瀹氭椂鍣
+ *
+ * 鍩虹瀹氭椂涓1ms
+ */
+void st_base_init(void)
+{
+ uint32_t cnt;
+
+ cnt = bus_clk_khz * 1;
+ pit_init(SIMULAT_TIMER_PITX, cnt); // 1ms纭欢瀹氭椂涓柇鍛ㄦ湡
+ return;
+}
+
+
+/*
+ * st_init() - 鍒濆鍖栦竴涓粰瀹氱紪鍙风殑妯℃嫙瀹氭椂鍣
+ * @n: 瀹氭椂鍣ㄧ紪鍙
+ * @st_m: 瀹氭椂妯″紡
+ * @cmr_v: 瀹氭椂鍣ㄦ瘮杈冨硷紝鍦ㄩ潪姣旇緝妯″紡鍙互涓轰换鎰忓
+ *
+ * 杩欎釜鍑芥暟杩斿洖0琛ㄧず姝e父瀹屾垚浜嗗垵濮嬪寲浠诲姟锛岃繑鍥瀪0琛ㄧず瀹氭椂鍣ㄥ凡鎵撳紑鎴栦笉瀛樺湪
+ */
+uint8_t st_init(uint8_t n, st_mode st_m, uint32_t cmr_v)
+{
+ if (st_r[n].flag.ten == 1 || n >= SIMULAT_TIMER_NUM)
+ {
+ return ~0;
+ }
+ st_r[n].flag.ten = 1;
+ switch(st_m)
+ {
+ case COMPARE:
+ st_r[n].flag.tfc = 1;
+ st_r[n].cmr = cmr_v;
+ break;
+ case NO_COMPARE:
+ st_r[n].flag.tfc = 0;
+ break;
+ default:
+ break;
+ }
+ return 0;
+}
+
+
+/*
+ * st_close() - 鍏抽棴涓涓粰瀹氱紪鍙风殑妯℃嫙瀹氭椂鍣
+ * @n: 瀹氭椂鍣ㄧ紪鍙
+ */
+void st_close(uint8_t n)
+{
+ st_r[n].flag.ten = 0;
+ return;
+}
+
+/*
+ * st_tcf() - 鏌ヨtcf浣嶈繑鍥
+ * @n: 瀹氭椂鍣ㄧ紪鍙
+ *
+ * 杩欎釜鍑芥暟鍦ㄦ病鏈夎繃姣旇緝鍊肩殑鏃跺欒繑鍥0锛屽凡杩囨瘮杈冨煎緱鏃跺欒繑鍥1锛屽浜庝笉瀛樺湪鎴栨湭鎵撳紑
+ */
+uint8_t st_tcf(uint8_t n)
+{
+ uint8_t temp;
+
+ if (st_r[n].flag.tcf == 1)
+ {
+ st_r[n].flag.tcf = 0;
+ temp = 1;
+ }
+ else
+ {
+ temp = 0;
+ }
+ return temp;
+}
+
+/*
+ * st_tov() - 鏌ヨtov浣嶈繑鍥
+ * @n: 瀹氭椂鍣ㄧ紪鍙
+ *
+ * 杩欎釜鍑芥暟鍦ㄦ病鏈夋孩鍑烘椂杩斿洖0锛屾病鏈夋孩鍑烘椂杩斿洖1锛屽浜庝笉瀛樺湪鎴栨湭鎵撳紑
+ */
+uint8_t st_tov(uint8_t n)
+{
+ uint8_t temp;
+ if (st_r[n].flag.tov == 1)
+ {
+ st_r[n].flag.tov = 0;
+ temp = 1;
+ }
+ else
+ {
+ temp = 0;
+ }
+ return temp;
+}
+
+/*
+ * st_count() - 鏌ヨ褰撳墠妯℃嫙瀹氭椂鍊
+ * @n: 瀹氭椂鍣ㄧ紪鍙
+ *
+ * 瀵逛簬涓嶅瓨鍦ㄦ垨鏈墦寮
+ */
+uint32_t st_count(uint8_t n)
+{
+ return st_r[n].count;
+}
+
+
+/*
+ * st_base() -瀹氭椂璋冪敤浠ユā鎷烴璺畾鏃跺櫒
+ *
+ * 瀹氭椂鐨勬渶灏忛棿闅旂瓑浜庤繖涓嚱鏁拌璋冪敤鐨勫懆鏈
+ */
+void st_base(void)
+{
+ uint8_t i;
+
+ for (i = 0; i < SIMULAT_TIMER_NUM; i++)
+ {
+ if (st_r[i].flag.ten == 1) // 浣胯兘
+ {
+ if (++st_r[i].count == 0) // 婧㈠嚭
+ {
+ st_r[i].flag.tov = 1;
+ } // 婧㈠嚭
+ if (st_r[i].flag.tfc == 1) // 姣旇緝
+ {
+ if (st_r[i].count == st_r[i].cmr)
+ {
+ st_r[i].count = 0;
+ st_r[i].flag.tcf = 1;
+ }
+ } // 姣旇緝
+ } // 浣胯兘
+ }
+ return;
+}
diff --git a/plan_manage_main/src/app/tft.c b/plan_manage_main/src/app/tft.c
new file mode 100644
index 0000000..5801813
--- /dev/null
+++ b/plan_manage_main/src/app/tft.c
@@ -0,0 +1,417 @@
+/*
+ * tft.c - tft 鏄剧ず灞忕殑鎺ュ彛
+ *
+ * uart hmi鏂瑰紡
+ */
+
+#include
+#include
+#include
+
+#include "uart.h"
+
+#include "include/tft.h"
+#include "include/knob.h"
+#include "include/key.h"
+#include "include/config.h"
+
+
+typedef struct kv_pair_
+{
+ char *key;
+ int16_t value;
+ int8_t attr;
+} kv_pair;
+
+typedef struct tft_state_
+{
+ uint8_t pgn;
+ uint8_t etn;
+ uint8_t ln;
+ uint8_t objn;
+} tft_state;
+
+typedef enum page_name_
+{
+ ORIGINAL_PG = 0, MENU_PG, OBJ_SET_PG
+} page_name;
+
+typedef enum entry_attr_
+{
+ R_NUM = 0, RW_NUM, RW_PIC, SW_PAGE
+} entry_attr;
+
+
+static tft_state tft_stt = { 0, 0, 0, 0 };
+
+static uint8_t original_lyt[] = { 0, 1 };
+static uint8_t menu_lyt[] = { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 11 };
+static uint8_t obj_set_lyt[] = { 0, 4, 8, 12, 13, 16, 18, 19 };
+
+kv_pair kvp_menu[] = {
+ { "st_y", 2016, RW_NUM }, { "st_mo", 4, RW_NUM }, { "st_d", 14, RW_NUM }, { "st_mi", 0, RW_NUM },
+ { "p1", 0, RW_PIC },
+ { "p2", 0, RW_PIC },
+ { "p3", 0, RW_PIC },
+ { "p4", 0, RW_PIC },
+ { "p5", 0, RW_PIC },
+ { "note", 0, RW_NUM }
+};
+
+kv_pair kvp_obj_set[][19] =
+{
+ {
+ { "st_y", 2016, RW_NUM }, { "st_mo", 4, RW_NUM }, { "st_d", 14, RW_NUM }, { "st_mi", 0, RW_NUM },
+ { "bg_y", 2016, RW_NUM }, { "bg_mo", 4, RW_NUM }, { "bg_d", 14, RW_NUM }, { "bg_mi", 0, RW_NUM },
+ { "ed_y", 2016, RW_NUM }, { "ed_mo", 4, RW_NUM }, { "ed_d", 14, RW_NUM }, { "ed_mi", 0, RW_NUM },
+ { "pd", 3, RW_NUM },
+ { "lg_r", 0, RW_PIC}, { "lg_b", 0, RW_PIC }, { "lg_uvb", 0, RW_PIC },
+ { "lg_cnt", 0, RW_NUM }, { "wt_cnt", 0, RW_NUM },
+ { "note", 0, RW_NUM }
+ },
+
+ {
+ { "st_y", 2016, RW_NUM }, { "st_mo", 4, RW_NUM }, { "st_d", 14, RW_NUM }, { "st_mi", 0, RW_NUM },
+ { "bg_y", 2016, RW_NUM }, { "bg_mo", 4, RW_NUM }, { "bg_d", 14, RW_NUM }, { "bg_mi", 0, RW_NUM },
+ { "ed_y", 2016, RW_NUM }, { "ed_mo", 4, RW_NUM }, { "ed_d", 14, RW_NUM }, { "ed_mi", 0, RW_NUM },
+ { "pd", 3, RW_NUM },
+ { "lg_r", 0, RW_PIC}, { "lg_b", 0, RW_PIC }, { "lg_uvb", 0, RW_PIC },
+ { "lg_cnt", 0, RW_NUM }, { "wt_cnt", 0, RW_NUM },
+ { "note", 0, RW_NUM }
+ }
+};
+
+static char tft_cmd_str[10];
+
+/*
+ *
+ */
+void tft_init(void)
+{
+ uart_init(TFT_UARTX, 9600);
+ return;
+}
+
+/*
+ *
+ */
+void tft_send_cmd(const char *cmd)
+{
+ uart_sendStr(TFT_UARTX, (const uint8_t *)cmd);
+
+ uart_putchar(TFT_UARTX, 0xff);
+ uart_putchar(TFT_UARTX, 0xff);
+ uart_putchar(TFT_UARTX, 0xff);
+}
+
+/*
+ *
+ */
+void tft_up(void)
+{
+ switch (tft_stt.pgn)
+ {
+ case ORIGINAL_PG:
+ if (tft_stt.ln > 0)
+ {
+ tft_stt.ln--;
+ }
+ tft_stt.etn = original_lyt[tft_stt.ln];
+ break;
+ case MENU_PG:
+ if (tft_stt.ln > 0)
+ {
+ tft_stt.ln--;
+ }
+ tft_stt.etn = menu_lyt[tft_stt.ln];
+ break;
+ case OBJ_SET_PG:
+ if (tft_stt.ln > 0)
+ {
+ tft_stt.ln--;
+ }
+ tft_stt.etn = obj_set_lyt[tft_stt.ln];
+ break;
+ default:
+ break;
+ }
+ return;
+}
+
+void tft_down(void)
+{
+ switch (tft_stt.pgn)
+ {
+ case ORIGINAL_PG:
+ if (tft_stt.ln < sizeof(original_lyt) / sizeof(uint8_t) - 1)
+ {
+ tft_stt.ln++;
+ }
+ tft_stt.etn = original_lyt[tft_stt.ln];
+ break;
+ case MENU_PG:
+ if (tft_stt.ln < sizeof(menu_lyt) / sizeof(uint8_t) - 1)
+ {
+ tft_stt.ln++;
+ }
+ tft_stt.etn = menu_lyt[tft_stt.ln];
+ break;
+ case OBJ_SET_PG:
+ if (tft_stt.ln < sizeof(obj_set_lyt) / sizeof(uint8_t) - 1)
+ {
+ tft_stt.ln++;
+ }
+ tft_stt.etn = obj_set_lyt[tft_stt.ln];
+ break;
+
+ }
+ return;
+}
+
+void tft_left(void)
+{
+ switch (tft_stt.pgn)
+ {
+ case ORIGINAL_PG:
+ if (tft_stt.etn > 0)
+ {
+ if (--tft_stt.etn < original_lyt[tft_stt.ln])
+ {
+ tft_stt.ln--;
+ }
+ }
+ break;
+ case MENU_PG:
+ if (tft_stt.etn > 0)
+ {
+ if (--tft_stt.etn < menu_lyt[tft_stt.ln])
+ {
+ tft_stt.ln--;
+ }
+ }
+ break;
+ case OBJ_SET_PG:
+ if (tft_stt.etn > 0)
+ {
+ if (--tft_stt.etn < obj_set_lyt[tft_stt.ln])
+ {
+ tft_stt.ln--;
+ }
+ }
+ break;
+ default:
+ break;
+ }
+ return;
+}
+
+void tft_right(void)
+{
+ switch (tft_stt.pgn)
+ {
+ case ORIGINAL_PG:
+ if (tft_stt.etn < original_lyt[sizeof(original_lyt) / sizeof(uint8_t) - 1] - 1)
+ {
+ if (++tft_stt.etn >= original_lyt[tft_stt.ln + 1])
+ {
+ tft_stt.ln++;
+ }
+ }
+ break;
+ case MENU_PG:
+ if (tft_stt.etn < menu_lyt[sizeof(menu_lyt) / sizeof(uint8_t) - 1] - 1)
+ {
+ if (++tft_stt.etn >= menu_lyt[tft_stt.ln + 1])
+ {
+ tft_stt.ln++;
+ }
+ }
+ break;
+ case OBJ_SET_PG:
+ if (tft_stt.etn < obj_set_lyt[sizeof(obj_set_lyt) / sizeof(uint8_t) - 1] - 1)
+ {
+ if (++tft_stt.etn >= obj_set_lyt[tft_stt.ln + 1])
+ {
+ tft_stt.ln++;
+ }
+ }
+ break;
+ default:
+ break;
+ }
+ return;
+}
+
+void refrush_obj(void)
+{
+ for (int i = 0; i < sizeof(kvp_obj_set[tft_stt.objn]) / sizeof(kv_pair); i++)
+ {
+ switch (kvp_obj_set[tft_stt.objn][tft_stt.etn].attr)
+ {
+ case R_NUM:
+ sprintf(tft_cmd_str,"%s.txt=\"%d\"",
+ kvp_obj_set[tft_stt.objn][tft_stt.etn].key,
+ kvp_obj_set[tft_stt.objn][tft_stt.etn].value);
+ tft_send_cmd(tft_cmd_str);
+ break;
+ case RW_NUM:
+ sprintf(tft_cmd_str,"%s.txt=\"%d\"",
+ kvp_obj_set[tft_stt.objn][tft_stt.etn].key,
+ kvp_obj_set[tft_stt.objn][tft_stt.etn].value);
+ tft_send_cmd(tft_cmd_str);
+ break;
+ case RW_PIC:
+ sprintf(tft_cmd_str, "vis %s,%d",
+ kvp_obj_set[tft_stt.objn][tft_stt.etn].key,
+ kvp_obj_set[tft_stt.objn][tft_stt.etn].value);
+ tft_send_cmd(tft_cmd_str);
+ break;
+ case SW_PAGE:
+ break;
+ default:
+ break;
+ }
+ }
+ return;
+}
+
+void refrush_menu(void)
+{
+ for (int i = 0; i < sizeof(kvp_obj_set[tft_stt.objn]) / sizeof(kv_pair); i++)
+ {
+
+ }
+ return;
+}
+
+void tft_ret(void)
+{
+ switch (tft_stt.pgn)
+ {
+ case ORIGINAL_PG:
+ break;
+ case MENU_PG:
+ tft_stt.pgn = ORIGINAL_PG;
+ tft_stt.ln = 0;
+ tft_stt.etn = 0;
+ tft_send_cmd("page original");
+ break;
+ case OBJ_SET_PG:
+ tft_stt.pgn = MENU_PG;
+ tft_stt.ln = 0;
+ tft_stt.etn = 0;
+ tft_send_cmd("page menu");
+ refrush_menu();
+ break;
+ default:
+ break;
+ }
+ return;
+}
+
+
+void tft_ok(void)
+{
+ switch (tft_stt.pgn)
+ {
+ case ORIGINAL_PG:
+ switch (kvp_obj_set[tft_stt.objn][tft_stt.etn].attr)
+ {
+ case R_NUM:
+ break;
+ case RW_NUM:
+ break;
+ case RW_PIC:
+ break;
+ case SW_PAGE:
+ tft_stt.pgn = MENU_PG;
+ tft_stt.ln = 0;
+ tft_stt.etn = 0;
+ tft_send_cmd("page menu");
+ break;
+ default:
+ break;
+ }
+ break;
+ case MENU_PG:
+ switch (kvp_menu[tft_stt.etn].attr)
+ {
+ case R_NUM:
+ break;
+ case RW_NUM:
+ knob_enable();
+ while (get_key_mean(RET_KEY) == N_KEY)
+ {
+ kvp_menu[tft_stt.etn].value += get_knob_val();
+ sprintf(tft_cmd_str, "%s.txt=\"%d\"", kvp_menu[tft_stt.etn].key,
+ kvp_menu[tft_stt.etn].value);
+ tft_send_cmd(tft_cmd_str);
+ }
+ knob_disable();
+ break;
+ case RW_PIC:
+ while (get_key_mean(RET_KEY) == N_KEY)
+ {
+ if (get_key_mean(UP_KEY) == S_KEY || get_key_mean(DOWN_KEY) == S_KEY)
+ {
+ kvp_menu[tft_stt.etn].value = !kvp_menu[tft_stt.etn].value;
+ sprintf(tft_cmd_str, "vis %s,%d", kvp_menu[tft_stt.etn].key,
+ kvp_menu[tft_stt.etn].value);
+ tft_send_cmd(tft_cmd_str);
+ }
+ }
+ break;
+ case SW_PAGE:
+ tft_stt.pgn = OBJ_SET_PG;
+ tft_stt.objn = kvp_menu[tft_stt.etn].value;
+ tft_stt.ln = 0;
+ tft_stt.etn = 0;
+ tft_send_cmd("page obj_set");
+ refrush_obj();
+ break;
+ default:
+ break;
+ }
+ case OBJ_SET_PG:
+ switch (kvp_obj_set[tft_stt.objn][tft_stt.etn].attr)
+ {
+ case R_NUM:
+ break;
+ case RW_NUM:
+ knob_enable();
+ while (get_key_mean(RET_KEY) == N_KEY)
+ {
+ kvp_obj_set[tft_stt.objn][tft_stt.etn].value += get_knob_val();
+ sprintf(tft_cmd_str,"%s.txt=\"%d\"",
+ kvp_obj_set[tft_stt.objn][tft_stt.etn].key,
+ kvp_obj_set[tft_stt.objn][tft_stt.etn].value);
+ tft_send_cmd(tft_cmd_str);
+ }
+ knob_disable();
+ break;
+ case RW_PIC:
+ while (get_key_mean(RET_KEY) == N_KEY)
+ {
+ if (get_key_mean(UP_KEY) == S_KEY || get_key_mean(DOWN_KEY))
+ {
+ kvp_obj_set[tft_stt.objn][tft_stt.etn].value =
+ !kvp_obj_set[tft_stt.objn][tft_stt.etn].value;
+ sprintf(tft_cmd_str, "vis %s,%d",
+ kvp_obj_set[tft_stt.objn][tft_stt.etn].key,
+ kvp_obj_set[tft_stt.objn][tft_stt.etn].value);
+ tft_send_cmd(tft_cmd_str);
+ }
+ }
+ break;
+ case SW_PAGE:
+ break;
+ default:
+ break;
+ }
+ break;
+ default:
+ break;
+ }
+ return;
+}
+
diff --git a/plan_manage_main/src/app/time.c b/plan_manage_main/src/app/time.c
new file mode 100644
index 0000000..e69de29
diff --git a/plan_manage_main/src/common/alloc.c b/plan_manage_main/src/common/alloc.c
new file mode 100644
index 0000000..c69419d
--- /dev/null
+++ b/plan_manage_main/src/common/alloc.c
@@ -0,0 +1,126 @@
+/*
+ * File: alloc.c
+ * Purpose: generic malloc() and free() engine
+ *
+ *
+ */
+
+#include "common.h"
+#include "stdlib.h"
+
+#pragma section = "HEAP"
+
+/********************************************************************/
+
+/*
+ * This struct forms the minimum block size which is allocated, and
+ * also forms the linked list for the memory space used with alloc()
+ * and free(). It is padded so that on a 32-bit machine, all malloc'ed
+ * pointers are 16-byte aligned.
+ */
+typedef struct ALLOC_HDR
+{
+ struct
+ {
+ struct ALLOC_HDR *ptr;
+ unsigned int size;
+ } s;
+ unsigned int align;
+ unsigned int pad;
+} ALLOC_HDR;
+
+static ALLOC_HDR base;
+static ALLOC_HDR *freep = NULL;
+
+/********************************************************************/
+void
+free (void *ap)
+{
+ ALLOC_HDR *bp, *p;
+
+ bp = (ALLOC_HDR *)ap - 1; /* point to block header */
+ for (p = freep; !((bp > p) && (bp < p->s.ptr)) ; p = p->s.ptr)
+ {
+ if ((p >= p->s.ptr) && ((bp > p) || (bp < p->s.ptr)))
+ {
+ break; /* freed block at start or end of arena */
+ }
+ }
+
+ if ((bp + bp->s.size) == p->s.ptr)
+ {
+ bp->s.size += p->s.ptr->s.size;
+ bp->s.ptr = p->s.ptr->s.ptr;
+ }
+ else
+ {
+ bp->s.ptr = p->s.ptr;
+ }
+
+ if ((p + p->s.size) == bp)
+ {
+ p->s.size += bp->s.size;
+ p->s.ptr = bp->s.ptr;
+ }
+ else
+ {
+ p->s.ptr = bp;
+ }
+
+ freep = p;
+}
+
+/********************************************************************/
+void *
+malloc (unsigned nbytes)
+{
+ /* Get addresses for the HEAP start and end */
+ #if defined(CW)
+ extern char __HEAP_START[];
+ extern char __HEAP_END[];
+ #elif defined(IAR)
+ char* __HEAP_START = __section_begin("HEAP");
+ char* __HEAP_END = __section_end("HEAP");
+ #elif defined(KEIL)
+ #endif
+
+ ALLOC_HDR *p, *prevp;
+ unsigned nunits;
+
+ nunits = ((nbytes+sizeof(ALLOC_HDR)-1) / sizeof(ALLOC_HDR)) + 1;
+
+ if ((prevp = freep) == NULL)
+ {
+ p = (ALLOC_HDR *)__HEAP_START;
+ p->s.size = ( ((uint_32)__HEAP_END - (uint_32)__HEAP_START)
+ / sizeof(ALLOC_HDR) );
+ p->s.ptr = &base;
+ base.s.ptr = p;
+ base.s.size = 0;
+ prevp = freep = &base;
+ }
+
+ for (p = prevp->s.ptr; ; prevp = p, p = p->s.ptr)
+ {
+ if (p->s.size >= nunits)
+ {
+ if (p->s.size == nunits)
+ {
+ prevp->s.ptr = p->s.ptr;
+ }
+ else
+ {
+ p->s.size -= nunits;
+ p += p->s.size;
+ p->s.size = nunits;
+ }
+ freep = prevp;
+ return (void *)(p + 1);
+ }
+
+ if (p == freep)
+ return NULL;
+ }
+}
+
+/********************************************************************/
diff --git a/plan_manage_main/src/common/assert.c b/plan_manage_main/src/common/assert.c
new file mode 100644
index 0000000..f19549f
--- /dev/null
+++ b/plan_manage_main/src/common/assert.c
@@ -0,0 +1,28 @@
+/*
+ * File: assert.c
+ * Purpose: Provide macro for software assertions
+ *
+ * Notes: ASSERT macro defined in assert.h calls assert_failed()
+ */
+
+#include "common.h"
+
+const char ASSERT_FAILED_STR[] = "Assertion failed in %s at line %d\n";
+
+/********************************************************************/
+void
+assert_failed(char *file, int line)
+{
+ int i;
+
+ printf(ASSERT_FAILED_STR, file, line);
+
+ while (1)
+ {
+// platform_led_display(0xFF);
+ for (i = 100000; i; i--) ;
+// platform_led_display(0x00);
+ for (i = 100000; i; i--) ;
+ }
+}
+/********************************************************************/
diff --git a/plan_manage_main/src/common/common.c b/plan_manage_main/src/common/common.c
new file mode 100644
index 0000000..4655ba3
--- /dev/null
+++ b/plan_manage_main/src/common/common.c
@@ -0,0 +1,57 @@
+//===========================================================================
+//文件名称:common.h
+//功能概要:公共要素源文件
+//版权所有:苏州大学飞思卡尔嵌入式中心(sumcu.suda.edu.cn)
+//更新记录:2012-10-12 V1.0
+// 2013-02-02 V2.0(WYH)
+//===========================================================================
+
+#include "common.h" //包含公共要素头文件
+
+static uint_32 int_disable_level; // 静态变量,当前中断嵌套层数
+
+//=========================================================================
+//函数名称:init_critical
+//参数说明:无
+//函数返回:无
+//功能概要:初始化临界区访问控制
+//=========================================================================
+void init_critical(void)
+{
+ EnableInterrupts;
+ int_disable_level = 0;
+}
+
+//=========================================================================
+//函数名称:enter_critical
+//参数说明:无
+//函数返回:无
+//功能概要:进入临界区
+//=========================================================================
+void enter_critical(void)
+{
+ if (0 == int_disable_level)
+ {
+ DisableInterrupts;
+ }
+ int_disable_level++;
+}
+
+//=========================================================================
+//函数名称:exit_critical
+//参数说明:无
+//函数返回:无
+//功能概要:离开临界区
+//=========================================================================
+void exit_critical(void)
+{
+ if (int_disable_level)
+{
+ int_disable_level--;
+ if (0 == int_disable_level)
+ {
+ EnableInterrupts;
+ }
+ }
+}
+
diff --git a/plan_manage_main/src/common/io.c b/plan_manage_main/src/common/io.c
new file mode 100644
index 0000000..856dda6
--- /dev/null
+++ b/plan_manage_main/src/common/io.c
@@ -0,0 +1,39 @@
+/*
+ * File: io.c
+ * Purpose: Serial Input/Output routines
+ *
+ * Notes: TERMINAL_PORT defined in .h
+ */
+
+#include "common.h"
+#include "uart.h"
+
+/********************************************************************/
+
+uint_8 *fp;
+char
+in_char (void)
+{
+ if (LANDZO_PORT == 0)
+ return uart_pendchar (UART0,fp);
+ else if (LANDZO_PORT == 1)
+ return uart_pendchar (UART1,fp);
+ else
+ return uart_pendchar (UART2,fp);
+
+}
+/********************************************************************/
+void
+out_char (char ch)
+{
+ if (LANDZO_PORT == 0)
+ uart_putchar(UART0,ch);
+ else if (LANDZO_PORT == 1)
+ uart_putchar(UART1,ch);
+ else
+ uart_putchar(UART2,ch);
+
+}
+
+/********************************************************************/
+/********************************************************************/
diff --git a/plan_manage_main/src/common/memtest.c b/plan_manage_main/src/common/memtest.c
new file mode 100644
index 0000000..a9807df
--- /dev/null
+++ b/plan_manage_main/src/common/memtest.c
@@ -0,0 +1,221 @@
+/**********************************************************************
+ *
+ * Filename: memtest.c
+ *
+ * Description: General-purpose memory testing functions.
+ *
+ * Notes: This software can be easily ported to systems with
+ * different data bus widths by redefining 'datum'.
+ *
+ *
+ * Copyright (c) 1998 by Michael Barr. This software is placed into
+ * the public domain and may be used for any purpose. However, this
+ * notice must not be changed or removed and no warranty is either
+ * expressed or implied by its publication or distribution.
+ **********************************************************************/
+
+
+#include "memtest.h"
+
+
+/**********************************************************************
+ *
+ * Function: memTestDataBus()
+ *
+ * Description: Test the data bus wiring in a memory region by
+ * performing a walking 1's test at a fixed address
+ * within that region. The address (and hence the
+ * memory region) is selected by the caller.
+ *
+ * Notes:
+ *
+ * Returns: 0 if the test succeeds.
+ * A non-zero result is the first pattern that failed.
+ *
+ **********************************************************************/
+datum
+memTestDataBus(volatile datum * address)
+{
+ datum pattern;
+
+
+ /*
+ * Perform a walking 1's test at the given address.
+ */
+ for (pattern = 1; pattern != 0; pattern <<= 1)
+ {
+ /*
+ * Write the test pattern.
+ */
+ *address = pattern;
+
+ /*
+ * Read it back (immediately is okay for this test).
+ */
+ if (*address != pattern)
+ {
+ return (pattern);
+ }
+ }
+
+ return (0);
+
+} /* memTestDataBus() */
+
+
+/**********************************************************************
+ *
+ * Function: memTestAddressBus()
+ *
+ * Description: Test the address bus wiring in a memory region by
+ * performing a walking 1's test on the relevant bits
+ * of the address and checking for aliasing. This test
+ * will find single-bit address failures such as stuck
+ * -high, stuck-low, and shorted pins. The base address
+ * and size of the region are selected by the caller.
+ *
+ * Notes: For best results, the selected base address should
+ * have enough LSB 0's to guarantee single address bit
+ * changes. For example, to test a 64-Kbyte region,
+ * select a base address on a 64-Kbyte boundary. Also,
+ * select the region size as a power-of-two--if at all
+ * possible.
+ *
+ * Returns: NULL if the test succeeds.
+ * A non-zero result is the first address at which an
+ * aliasing problem was uncovered. By examining the
+ * contents of memory, it may be possible to gather
+ * additional information about the problem.
+ *
+ **********************************************************************/
+datum *
+memTestAddressBus(volatile datum * baseAddress, unsigned long nBytes)
+{
+ unsigned long addressMask = (nBytes/sizeof(datum) - 1);
+ unsigned long offset;
+ unsigned long testOffset;
+
+ datum pattern = (datum) 0xAAAAAAAA;
+ datum antipattern = (datum) 0x55555555;
+
+
+ /*
+ * Write the default pattern at each of the power-of-two offsets.
+ */
+ for (offset = 1; (offset & addressMask) != 0; offset <<= 1)
+ {
+ baseAddress[offset] = pattern;
+ }
+
+ /*
+ * Check for address bits stuck high.
+ */
+ testOffset = 0;
+ baseAddress[testOffset] = antipattern;
+
+ for (offset = 1; (offset & addressMask) != 0; offset <<= 1)
+ {
+ if (baseAddress[offset] != pattern)
+ {
+ return ((datum *) &baseAddress[offset]);
+ }
+ }
+
+ baseAddress[testOffset] = pattern;
+
+ /*
+ * Check for address bits stuck low or shorted.
+ */
+ for (testOffset = 1; (testOffset & addressMask) != 0; testOffset <<= 1)
+ {
+ baseAddress[testOffset] = antipattern;
+
+ if (baseAddress[0] != pattern)
+ {
+ return ((datum *) &baseAddress[testOffset]);
+ }
+
+ for (offset = 1; (offset & addressMask) != 0; offset <<= 1)
+ {
+ if ((baseAddress[offset] != pattern) && (offset != testOffset))
+ {
+ return ((datum *) &baseAddress[testOffset]);
+ }
+ }
+
+ baseAddress[testOffset] = pattern;
+ }
+
+ return (NULL);
+
+} /* memTestAddressBus() */
+
+
+/**********************************************************************
+ *
+ * Function: memTestDevice()
+ *
+ * Description: Test the integrity of a physical memory device by
+ * performing an increment/decrement test over the
+ * entire region. In the process every storage bit
+ * in the device is tested as a zero and a one. The
+ * base address and the size of the region are
+ * selected by the caller.
+ *
+ * Notes:
+ *
+ * Returns: NULL if the test succeeds.
+ *
+ * A non-zero result is the first address at which an
+ * incorrect value was read back. By examining the
+ * contents of memory, it may be possible to gather
+ * additional information about the problem.
+ *
+ **********************************************************************/
+datum *
+memTestDevice(volatile datum * baseAddress, unsigned long nBytes)
+{
+ unsigned long offset;
+ unsigned long nWords = nBytes / sizeof(datum);
+
+ datum pattern;
+ datum antipattern;
+
+
+ /*
+ * Fill memory with a known pattern.
+ */
+ for (pattern = 1, offset = 0; offset < nWords; pattern++, offset++)
+ {
+ baseAddress[offset] = pattern;
+ }
+
+ /*
+ * Check each location and invert it for the second pass.
+ */
+ for (pattern = 1, offset = 0; offset < nWords; pattern++, offset++)
+ {
+ if (baseAddress[offset] != pattern)
+ {
+ return ((datum *) &baseAddress[offset]);
+ }
+
+ antipattern = ~pattern;
+ baseAddress[offset] = antipattern;
+ }
+
+ /*
+ * Check each location for the inverted pattern and zero it.
+ */
+ for (pattern = 1, offset = 0; offset < nWords; pattern++, offset++)
+ {
+ antipattern = ~pattern;
+ if (baseAddress[offset] != antipattern)
+ {
+ return ((datum *) &baseAddress[offset]);
+ }
+ }
+
+ return (NULL);
+
+} /* memTestDevice() */
diff --git a/plan_manage_main/src/common/printf.c b/plan_manage_main/src/common/printf.c
new file mode 100644
index 0000000..e569fd9
--- /dev/null
+++ b/plan_manage_main/src/common/printf.c
@@ -0,0 +1,609 @@
+/*
+ * File: printk.c
+ * Purpose: The standard C library routine printf()
+ */
+
+#include "common.h"
+#include
+
+/********************************************************************/
+
+typedef struct
+{
+ int dest;
+ void (*func)(char);
+ char *loc;
+} PRINTK_INFO;
+
+int
+printk (PRINTK_INFO *, const char *, va_list);
+
+/********************************************************************/
+
+#define DEST_CONSOLE (1)
+#define DEST_STRING (2)
+
+#define FLAGS_MINUS (0x01)
+#define FLAGS_PLUS (0x02)
+#define FLAGS_SPACE (0x04)
+#define FLAGS_ZERO (0x08)
+#define FLAGS_POUND (0x10)
+
+#define IS_FLAG_MINUS(a) (a & FLAGS_MINUS)
+#define IS_FLAG_PLUS(a) (a & FLAGS_PLUS)
+#define IS_FLAG_SPACE(a) (a & FLAGS_SPACE)
+#define IS_FLAG_ZERO(a) (a & FLAGS_ZERO)
+#define IS_FLAG_POUND(a) (a & FLAGS_POUND)
+
+#define LENMOD_h (0x01)
+#define LENMOD_l (0x02)
+#define LENMOD_L (0x04)
+
+#define IS_LENMOD_h(a) (a & LENMOD_h)
+#define IS_LENMOD_l(a) (a & LENMOD_l)
+#define IS_LENMOD_L(a) (a & LENMOD_L)
+
+#define FMT_d (0x0001)
+#define FMT_o (0x0002)
+#define FMT_x (0x0004)
+#define FMT_X (0x0008)
+#define FMT_u (0x0010)
+#define FMT_c (0x0020)
+#define FMT_s (0x0040)
+#define FMT_p (0x0080)
+#define FMT_n (0x0100)
+
+#define IS_FMT_d(a) (a & FMT_d)
+#define IS_FMT_o(a) (a & FMT_o)
+#define IS_FMT_x(a) (a & FMT_x)
+#define IS_FMT_X(a) (a & FMT_X)
+#define IS_FMT_u(a) (a & FMT_u)
+#define IS_FMT_c(a) (a & FMT_c)
+#define IS_FMT_s(a) (a & FMT_s)
+#define IS_FMT_p(a) (a & FMT_p)
+#define IS_FMT_n(a) (a & FMT_n)
+
+/********************************************************************/
+static void
+printk_putc (int c, int *count, PRINTK_INFO *info)
+{
+ switch (info->dest)
+ {
+ case DEST_CONSOLE:
+ info->func((char)c);
+ break;
+ case DEST_STRING:
+ *(info->loc) = (unsigned char)c;
+ ++(info->loc);
+ break;
+ default:
+ break;
+ }
+ *count += 1;
+}
+
+/********************************************************************/
+static int
+printk_mknumstr (char *numstr, void *nump, int neg, int radix)
+{
+ int a,b,c;
+ unsigned int ua,ub,uc;
+
+ int nlen;
+ char *nstrp;
+
+ nlen = 0;
+ nstrp = numstr;
+ *nstrp++ = '\0';
+
+ if (neg)
+ {
+ a = *(int *)nump;
+ if (a == 0)
+ {
+ *nstrp = '0';
+ ++nlen;
+ goto done;
+ }
+ while (a != 0)
+ {
+ b = (int)a / (int)radix;
+ c = (int)a - ((int)b * (int)radix);
+ if (c < 0)
+ {
+ c = ~c + 1 + '0';
+ }
+ else
+ {
+ c = c + '0';
+ }
+ a = b;
+ *nstrp++ = (char)c;
+ ++nlen;
+ }
+ }
+ else
+ {
+ ua = *(unsigned int *)nump;
+ if (ua == 0)
+ {
+ *nstrp = '0';
+ ++nlen;
+ goto done;
+ }
+ while (ua != 0)
+ {
+ ub = (unsigned int)ua / (unsigned int)radix;
+ uc = (unsigned int)ua - ((unsigned int)ub * (unsigned int)radix);
+ if (uc < 10)
+ {
+ uc = uc + '0';
+ }
+ else
+ {
+ uc = uc - 10 + 'A';
+ }
+ ua = ub;
+ *nstrp++ = (char)uc;
+ ++nlen;
+ }
+ }
+ done:
+ return nlen;
+}
+
+/********************************************************************/
+static void
+printk_pad_zero (int curlen, int field_width, int *count, PRINTK_INFO *info)
+{
+ int i;
+
+ for (i = curlen; i < field_width; i++)
+ {
+ printk_putc('0',count, info);
+ }
+}
+
+/********************************************************************/
+static void
+printk_pad_space (int curlen, int field_width, int *count, PRINTK_INFO *info)
+{
+ int i;
+
+ for (i = curlen; i < field_width; i++)
+ {
+ printk_putc(' ',count, info);
+ }
+}
+
+/********************************************************************/
+int
+printk (PRINTK_INFO *info, const char *fmt, va_list ap)
+{
+ /* va_list ap; */
+ char *p;
+ int c;
+
+ char vstr[33];
+ char *vstrp;
+ int vlen;
+
+ int done;
+ int count = 0;
+
+ int flags_used;
+ int field_width;
+#if 0
+ int precision_used;
+ int precision_width;
+ int length_modifier;
+#endif
+
+ int ival;
+ int schar, dschar;
+ int *ivalp;
+ char *sval;
+ int cval;
+ unsigned int uval;
+
+ /*
+ * Start parsing apart the format string and display appropriate
+ * formats and data.
+ */
+ for (p = (char *)fmt; (c = *p) != 0; p++)
+ {
+ /*
+ * All formats begin with a '%' marker. Special chars like
+ * '\n' or '\t' are normally converted to the appropriate
+ * character by the __compiler__. Thus, no need for this
+ * routine to account for the '\' character.
+ */
+ if (c != '%')
+ {
+ /*
+ * This needs to be replaced with something like
+ * 'out_char()' or call an OS routine.
+ */
+#ifndef UNIX_DEBUG
+ if (c != '\n')
+ {
+ printk_putc(c, &count, info);
+ }
+ else
+ {
+ printk_putc(0x0D /* CR */, &count, info);
+ printk_putc(0x0A /* LF */, &count, info);
+ }
+#else
+ printk_putc(c, &count, info);
+#endif
+
+ /*
+ * By using 'continue', the next iteration of the loop
+ * is used, skipping the code that follows.
+ */
+ continue;
+ }
+
+ /*
+ * First check for specification modifier flags.
+ */
+ flags_used = 0;
+ done = FALSE;
+ while (!done)
+ {
+ switch (/* c = */ *++p)
+ {
+ case '-':
+ flags_used |= FLAGS_MINUS;
+ break;
+ case '+':
+ flags_used |= FLAGS_PLUS;
+ break;
+ case ' ':
+ flags_used |= FLAGS_SPACE;
+ break;
+ case '0':
+ flags_used |= FLAGS_ZERO;
+ break;
+ case '#':
+ flags_used |= FLAGS_POUND;
+ break;
+ default:
+ /* we've gone one char too far */
+ --p;
+ done = TRUE;
+ break;
+ }
+ }
+
+ /*
+ * Next check for minimum field width.
+ */
+ field_width = 0;
+ done = FALSE;
+ while (!done)
+ {
+ switch (c = *++p)
+ {
+ case '0':
+ case '1':
+ case '2':
+ case '3':
+ case '4':
+ case '5':
+ case '6':
+ case '7':
+ case '8':
+ case '9':
+ field_width = (field_width * 10) + (c - '0');
+ break;
+ default:
+ /* we've gone one char too far */
+ --p;
+ done = TRUE;
+ break;
+ }
+ }
+
+ /*
+ * Next check for the width and precision field separator.
+ */
+ if (*++p == '.')
+ {
+
+ /*
+ * Must get precision field width, if present.
+ */
+ done = FALSE;
+ while (!done)
+ {
+ switch (/* c = uncomment if used below */ *++p)
+ {
+ case '0':
+ case '1':
+ case '2':
+ case '3':
+ case '4':
+ case '5':
+ case '6':
+ case '7':
+ case '8':
+ case '9':
+#if 0
+ precision_width = (precision_width * 10) +
+ (c - '0');
+#endif
+ break;
+ default:
+ /* we've gone one char too far */
+ --p;
+ done = TRUE;
+ break;
+ }
+ }
+ }
+ else
+ {
+ /* we've gone one char too far */
+ --p;
+#if 0
+ precision_used = FALSE;
+ precision_width = 0;
+#endif
+ }
+
+ /*
+ * Check for the length modifier.
+ */
+ switch (*++p)
+ {
+ case 'h':
+ break;
+ case 'l':
+ break;
+ case 'L':
+ break;
+ default:
+ /* we've gone one char too far */
+ --p;
+ break;
+ }
+
+ /*
+ * Now we're ready to examine the format.
+ */
+ switch (c = *++p)
+ {
+ case 'd':
+ case 'i':
+ ival = (int)va_arg(ap, int);
+ vlen = printk_mknumstr(vstr,&ival,TRUE,10);
+ vstrp = &vstr[vlen];
+
+ if (ival < 0)
+ {
+ schar = '-';
+ ++vlen;
+ }
+ else
+ {
+ if (IS_FLAG_PLUS(flags_used))
+ {
+ schar = '+';
+ ++vlen;
+ }
+ else
+ {
+ if (IS_FLAG_SPACE(flags_used))
+ {
+ schar = ' ';
+ ++vlen;
+ }
+ else
+ {
+ schar = 0;
+ }
+ }
+ }
+ dschar = FALSE;
+
+ /*
+ * do the ZERO pad.
+ */
+ if (IS_FLAG_ZERO(flags_used))
+ {
+ if (schar)
+ printk_putc(schar, &count, info);
+ dschar = TRUE;
+
+ printk_pad_zero (vlen, field_width, &count, info);
+ vlen = field_width;
+ }
+ else
+ {
+ if (!IS_FLAG_MINUS(flags_used))
+ {
+ printk_pad_space (vlen, field_width, &count, info);
+
+ if (schar)
+ printk_putc(schar, &count, info);
+ dschar = TRUE;
+ }
+ }
+
+ /* the string was built in reverse order, now display in */
+ /* correct order */
+ if (!dschar && schar)
+ {
+ printk_putc(schar, &count, info);
+ }
+ goto cont_xd;
+
+ case 'x':
+ case 'X':
+ uval = (unsigned int)va_arg(ap, unsigned int);
+ vlen = printk_mknumstr(vstr,&uval,FALSE,16);
+ vstrp = &vstr[vlen];
+
+ dschar = FALSE;
+ if (IS_FLAG_ZERO(flags_used))
+ {
+ if (IS_FLAG_POUND(flags_used))
+ {
+ printk_putc('0', &count, info);
+ printk_putc('x', &count, info);
+ /*vlen += 2;*/
+ dschar = TRUE;
+ }
+ printk_pad_zero (vlen, field_width, &count, info);
+ vlen = field_width;
+ }
+ else
+ {
+ if (!IS_FLAG_MINUS(flags_used))
+ {
+ if (IS_FLAG_POUND(flags_used))
+ {
+ vlen += 2;
+ }
+ printk_pad_space (vlen, field_width, &count, info);
+ if (IS_FLAG_POUND(flags_used))
+ {
+ printk_putc('0', &count, info);
+ printk_putc('x', &count, info);
+ dschar = TRUE;
+ }
+ }
+ }
+
+ if ((IS_FLAG_POUND(flags_used)) && !dschar)
+ {
+ printk_putc('0', &count, info);
+ printk_putc('x', &count, info);
+ vlen += 2;
+ }
+ goto cont_xd;
+
+ case 'o':
+ uval = (unsigned int)va_arg(ap, unsigned int);
+ vlen = printk_mknumstr(vstr,&uval,FALSE,8);
+ goto cont_u;
+ case 'b':
+ uval = (unsigned int)va_arg(ap, unsigned int);
+ vlen = printk_mknumstr(vstr,&uval,FALSE,2);
+ goto cont_u;
+ case 'p':
+ uval = (unsigned int)va_arg(ap, void *);
+ vlen = printk_mknumstr(vstr,&uval,FALSE,16);
+ goto cont_u;
+ case 'u':
+ uval = (unsigned int)va_arg(ap, unsigned int);
+ vlen = printk_mknumstr(vstr,&uval,FALSE,10);
+
+ cont_u:
+ vstrp = &vstr[vlen];
+
+ if (IS_FLAG_ZERO(flags_used))
+ {
+ printk_pad_zero (vlen, field_width, &count, info);
+ vlen = field_width;
+ }
+ else
+ {
+ if (!IS_FLAG_MINUS(flags_used))
+ {
+ printk_pad_space (vlen, field_width, &count, info);
+ }
+ }
+
+ cont_xd:
+ while (*vstrp)
+ printk_putc(*vstrp--, &count, info);
+
+ if (IS_FLAG_MINUS(flags_used))
+ {
+ printk_pad_space (vlen, field_width, &count, info);
+ }
+ break;
+
+ case 'c':
+ cval = (char)va_arg(ap, unsigned int);
+ printk_putc(cval,&count, info);
+ break;
+ case 's':
+ sval = (char *)va_arg(ap, char *);
+ if (sval)
+ {
+ vlen = strlen(sval);
+ if (!IS_FLAG_MINUS(flags_used))
+ {
+ printk_pad_space (vlen, field_width, &count, info);
+ }
+ while (*sval)
+ printk_putc(*sval++,&count, info);
+ if (IS_FLAG_MINUS(flags_used))
+ {
+ printk_pad_space (vlen, field_width, &count, info);
+ }
+ }
+ break;
+ case 'n':
+ ivalp = (int *)va_arg(ap, int *);
+ *ivalp = count;
+ break;
+ default:
+ printk_putc(c,&count, info);
+ break;
+ }
+ }
+ return count;
+}
+
+/********************************************************************/
+int
+printf (const char *fmt, ...)
+{
+ va_list ap;
+ int rvalue;
+ PRINTK_INFO info;
+
+
+ info.dest = DEST_CONSOLE;
+ info.func = &out_char;
+ /*
+ * Initialize the pointer to the variable length argument list.
+ */
+ va_start(ap, fmt);
+ rvalue = printk(&info, fmt, ap);
+ /*
+ * Cleanup the variable length argument list.
+ */
+ va_end(ap);
+ return rvalue;
+}
+
+/********************************************************************/
+int
+sprintf (char *s, const char *fmt, ...)
+{
+ va_list ap;
+ int rvalue = 0;
+ PRINTK_INFO info;
+
+ /*
+ * Initialize the pointer to the variable length argument list.
+ */
+ if (s != 0)
+ {
+ info.dest = DEST_STRING;
+ info.loc = s;
+ va_start(ap, fmt);
+ rvalue = printk(&info, fmt, ap);
+ *info.loc = '\0';
+ va_end(ap);
+ }
+ return rvalue;
+}
+
+/********************************************************************/
diff --git a/plan_manage_main/src/common/queue.c b/plan_manage_main/src/common/queue.c
new file mode 100644
index 0000000..c1c659d
--- /dev/null
+++ b/plan_manage_main/src/common/queue.c
@@ -0,0 +1,124 @@
+/*
+ * File: queue.c
+ * Purpose: Implement a first in, first out linked list
+ *
+ * Notes:
+ */
+
+#include "common.h"
+#include "queue.h"
+
+/********************************************************************/
+/*
+ * Initialize the specified queue to an empty state
+ *
+ * Parameters:
+ * q Pointer to queue structure
+ */
+void
+queue_init(QUEUE *q)
+{
+ q->head = NULL;
+}
+/********************************************************************/
+/*
+ * Check for an empty queue
+ *
+ * Parameters:
+ * q Pointer to queue structure
+ *
+ * Return Value:
+ * 1 if Queue is empty
+ * 0 otherwise
+ */
+int
+queue_isempty(QUEUE *q)
+{
+ return (q->head == NULL);
+}
+/********************************************************************/
+/*
+ * Add an item to the end of the queue
+ *
+ * Parameters:
+ * q Pointer to queue structure
+ * node New node to add to the queue
+ */
+void
+queue_add(QUEUE *q, QNODE *node)
+{
+ if (queue_isempty(q))
+ {
+ q->head = q->tail = node;
+ }
+ else
+ {
+ q->tail->next = node;
+ q->tail = node;
+ }
+
+ node->next = NULL;
+}
+
+/********************************************************************/
+/*
+ * Remove and return first (oldest) entry from the specified queue
+ *
+ * Parameters:
+ * q Pointer to queue structure
+ *
+ * Return Value:
+ * Node at head of queue - NULL if queue is empty
+ */
+QNODE*
+queue_remove(QUEUE *q)
+{
+ QNODE *oldest;
+
+ if (queue_isempty(q))
+ return NULL;
+
+ oldest = q->head;
+ q->head = oldest->next;
+ return oldest;
+}
+/********************************************************************/
+/*
+ * Peek into the queue and return pointer to first (oldest) entry.
+ * The queue is not modified
+ *
+ * Parameters:
+ * q Pointer to queue structure
+ *
+ * Return Value:
+ * Node at head of queue - NULL if queue is empty
+ */
+QNODE*
+queue_peek(QUEUE *q)
+{
+ return q->head;
+}
+/********************************************************************/
+/*
+ * Move entire contents of one queue to the other
+ *
+ * Parameters:
+ * src Pointer to source queue
+ * dst Pointer to destination queue
+ */
+void
+queue_move(QUEUE *dst, QUEUE *src)
+{
+ if (queue_isempty(src))
+ return;
+
+ if (queue_isempty(dst))
+ dst->head = src->head;
+ else
+ dst->tail->next = src->head;
+
+ dst->tail = src->tail;
+ src->head = NULL;
+ return;
+}
+/********************************************************************/
diff --git a/plan_manage_main/src/common/startup.c b/plan_manage_main/src/common/startup.c
new file mode 100644
index 0000000..513a8a1
--- /dev/null
+++ b/plan_manage_main/src/common/startup.c
@@ -0,0 +1,108 @@
+/******************** (C) COPYRIGHT 2011 蓝宙电子工作室 ********************
+ * 文件名 :startup.c
+ * 描述 :kinetis的启动代码,把中断向量表、初始化数据、以__ramfunc声明的子函数复制到RAM区
+ *
+ * 实验平台 :
+ * 库版本 :
+ *
+ * 作者 :飞思卡尔公司
+ * 淘宝店 :http://landzo.taobao.com/
+
+**********************************************************************************/
+
+#include "common.h"
+
+#if (defined(IAR))
+#pragma section = ".data"
+#pragma section = ".data_init"
+#pragma section = ".bss"
+#pragma section = "CodeRelocate"
+#pragma section = "CodeRelocateRam"
+#endif
+
+/********************************************************************/
+//复制中断向量表、初始化数据、以__ramfunc声明的子函数复制到RAM区(对flash操作的函数必须这样)
+void
+common_startup(void)
+{
+
+#if (defined(CW))
+ extern char __START_BSS[];
+ extern char __END_BSS[];
+ extern uint32 __DATA_ROM[];
+ extern uint32 __DATA_RAM[];
+ extern char __DATA_END[];
+#endif
+
+ /* Declare a counter we'll use in all of the copy loops */
+ uint32 n;
+
+ /* Declare pointers for various data sections. These pointers
+ * are initialized using values pulled in from the linker file
+ */
+ uint8 *data_ram, * data_rom, * data_rom_end;
+ uint8 *bss_start, * bss_end;
+
+
+ /* 这两个数组的地址 在 链接器Linker文件,即ICF文件 定义 */
+ extern uint32 __VECTOR_TABLE[];
+ extern uint32 __VECTOR_RAM[];
+
+ /* 检测是否需要 复制中断向量表 */
+ if (__VECTOR_RAM != __VECTOR_TABLE)
+ {
+ for (n = 0; n < 0xC0; n++)
+ __VECTOR_RAM[n] = __VECTOR_TABLE[n];
+ }
+
+ /* 把 中断向量表地址 重新指向 RAM 里的 中断向量表 */
+ write_vtor((uint32)__VECTOR_RAM);
+
+
+
+ /*获取初始化数据地址*/
+#if (defined(CW))
+ data_ram = (uint8 *)__DATA_RAM;
+ data_rom = (uint8 *)__DATA_ROM;
+ data_rom_end = (uint8 *)__DATA_END; /* This is actually a RAM address in CodeWarrior */
+ n = data_rom_end - data_ram;
+#elif (defined(IAR))
+ data_ram = __section_begin(".data");
+ data_rom = __section_begin(".data_init");
+ data_rom_end = __section_end(".data_init");
+ n = data_rom_end - data_rom;
+#endif
+
+ /* 复制初始化数据 */
+ while (n--)
+ *data_ram++ = *data_rom++;
+
+
+ /* 获取 .bss 段的地址 (初始化数据为0) */
+#if (defined(CW))
+ bss_start = (uint8 *)__START_BSS;
+ bss_end = (uint8 *)__END_BSS;
+#elif (defined(IAR))
+ bss_start = __section_begin(".bss");
+ bss_end = __section_end(".bss");
+#endif
+
+
+ /* 清除初始化为0的数据段 */
+ n = bss_end - bss_start;
+ while(n--)
+ *bss_start++ = 0;
+
+ /* 把以__ramfunc声明的子函数复制到RAM区 */
+#if (defined(IAR))
+ uint8 *code_relocate_ram = __section_begin("CodeRelocateRam");
+ uint8 *code_relocate = __section_begin("CodeRelocate");
+ uint8 *code_relocate_end = __section_end("CodeRelocate");
+
+ /* Copy functions from ROM to RAM */
+ n = code_relocate_end - code_relocate;
+ while (n--)
+ *code_relocate_ram++ = *code_relocate++;
+#endif
+}
+/********************************************************************/
diff --git a/plan_manage_main/src/common/stdlib.c b/plan_manage_main/src/common/stdlib.c
new file mode 100644
index 0000000..9f64d2f
--- /dev/null
+++ b/plan_manage_main/src/common/stdlib.c
@@ -0,0 +1,396 @@
+/*
+ * File: stdlib.c
+ * Purpose: Functions normally found in a standard C lib.
+ *
+ * Notes: This supports ASCII only!!!
+ *
+ */
+
+#include "common.h"
+#include "stdlib.h"
+
+/****************************************************************/
+int
+isspace (int ch)
+{
+ if ((ch == ' ') || (ch == '\t')) /* \n ??? */
+ return TRUE;
+ else
+ return FALSE;
+}
+
+/****************************************************************/
+int
+isalnum (int ch)
+{
+ /* ASCII only */
+ if (((ch >= '0') && (ch <= '9')) ||
+ ((ch >= 'A') && (ch <= 'Z')) ||
+ ((ch >= 'a') && (ch <= 'z')))
+ return TRUE;
+ else
+ return FALSE;
+}
+
+/****************************************************************/
+int
+isdigit (int ch)
+{
+ /* ASCII only */
+ if ((ch >= '0') && (ch <= '9'))
+ return TRUE;
+ else
+ return FALSE;
+}
+
+/****************************************************************/
+int
+isupper (int ch)
+{
+ /* ASCII only */
+ if ((ch >= 'A') && (ch <= 'Z'))
+ return TRUE;
+ else
+ return FALSE;
+}
+
+/****************************************************************/
+int
+strcasecmp (const char *s1, const char *s2)
+{
+ char c1, c2;
+ int result = 0;
+
+ while (result == 0)
+ {
+ c1 = *s1++;
+ c2 = *s2++;
+ if ((c1 >= 'a') && (c1 <= 'z'))
+ c1 = (char)(c1 - ' ');
+ if ((c2 >= 'a') && (c2 <= 'z'))
+ c2 = (char)(c2 - ' ');
+ if ((result = (c1 - c2)) != 0)
+ break;
+ if ((c1 == 0) || (c2 == 0))
+ break;
+ }
+ return result;
+}
+
+
+/****************************************************************/
+int
+strncasecmp (const char *s1, const char *s2, int n)
+{
+ char c1, c2;
+ int k = 0;
+ int result = 0;
+
+ while ( k++ < n )
+ {
+ c1 = *s1++;
+ c2 = *s2++;
+ if ((c1 >= 'a') && (c1 <= 'z'))
+ c1 = (char)(c1 - ' ');
+ if ((c2 >= 'a') && (c2 <= 'z'))
+ c2 = (char)(c2 - ' ');
+ if ((result = (c1 - c2)) != 0)
+ break;
+ if ((c1 == 0) || (c2 == 0))
+ break;
+ }
+ return result;
+}
+
+/****************************************************************/
+uint_32
+strtoul (char *str, char **ptr, int base)
+{
+ unsigned long rvalue;
+ int c, err, neg;
+ char *endp;
+ char *startp;
+
+ rvalue = 0; err = 0; neg = 0;
+
+ /* Check for invalid arguments */
+ if ((str == NULL) || (base < 0) || (base == 1) || (base > 36))
+ {
+ if (ptr != NULL)
+ {
+ *ptr = str;
+ }
+ return 0;
+ }
+
+ /* Skip leading white spaces */
+ for (startp = str; isspace(*startp); ++startp)
+ ;
+
+ /* Check for notations */
+ switch (startp[0])
+ {
+ case '0':
+ if ((startp[1] == 'x') || (startp[1] == 'X'))
+ {
+ if ((base == 0) || (base == 16))
+ {
+ base = 16;
+ startp = &startp[2];
+ }
+ }
+ break;
+ case '-':
+ neg = 1;
+ startp = &startp[1];
+ break;
+ default:
+ break;
+ }
+
+ if (base == 0)
+ base = 10;
+
+ /* Check for invalid chars in str */
+ for ( endp = startp; (c = *endp) != '\0'; ++endp)
+ {
+ /* Check for 0..9,Aa-Zz */
+ if (!isalnum(c))
+ {
+ err = 1;
+ break;
+ }
+
+ /* Convert char to num in 0..36 */
+ if (isdigit(c))
+ {
+ c = c - '0';
+ }
+ else
+ {
+ if (isupper(c))
+ {
+ c = c - 'A' + 10;
+ }
+ else
+ {
+ c = c - 'a' + 10;
+ }
+ }
+
+ /* check c against base */
+ if (c >= base)
+ {
+ err = 1;
+ break;
+ }
+
+ if (neg)
+ {
+ rvalue = (rvalue * base) - c;
+ }
+ else
+ {
+ rvalue = (rvalue * base) + c;
+ }
+ }
+
+ /* Upon exit, endp points to the character at which valid info */
+ /* STOPS. No chars including and beyond endp are used. */
+
+ if (ptr != NULL)
+ *ptr = endp;
+
+ if (err)
+ {
+ if (ptr != NULL)
+ *ptr = str;
+
+ return 0;
+ }
+ else
+ {
+ return rvalue;
+ }
+}
+
+/****************************************************************/
+int
+strlen (const char *str)
+{
+ char *s = (char *)str;
+ int len = 0;
+
+ if (s == NULL)
+ return 0;
+
+ while (*s++ != '\0')
+ ++len;
+
+ return len;
+}
+
+/****************************************************************/
+char *
+strcat (char *dest, const char *src)
+{
+ char *dp;
+ char *sp = (char *)src;
+
+ if ((dest != NULL) && (src != NULL))
+ {
+ dp = &dest[strlen(dest)];
+
+ while (*sp != '\0')
+ {
+ *dp++ = *sp++;
+ }
+ *dp = '\0';
+ }
+ return dest;
+}
+
+/****************************************************************/
+char *
+strncat (char *dest, const char *src, int n)
+{
+ char *dp;
+ char *sp = (char *)src;
+
+ if ((dest != NULL) && (src != NULL) && (n > 0))
+ {
+ dp = &dest[strlen(dest)];
+
+ while ((*sp != '\0') && (n-- > 0))
+ {
+ *dp++ = *sp++;
+ }
+ *dp = '\0';
+ }
+ return dest;
+}
+
+/****************************************************************/
+char *
+strcpy (char *dest, const char *src)
+{
+ char *dp = (char *)dest;
+ char *sp = (char *)src;
+
+ if ((dest != NULL) && (src != NULL))
+ {
+ while (*sp != '\0')
+ {
+ *dp++ = *sp++;
+ }
+ *dp = '\0';
+ }
+ return dest;
+}
+
+/****************************************************************/
+char *
+strncpy (char *dest, const char *src, int n)
+{
+ char *dp = (char *)dest;
+ char *sp = (char *)src;
+
+ if ((dest != NULL) && (src != NULL) && (n > 0))
+ {
+ while ((*sp != '\0') && (n-- > 0))
+ {
+ *dp++ = *sp++;
+ }
+ *dp = '\0';
+ }
+ return dest;
+}
+
+/****************************************************************/
+int
+strcmp (const char *s1, const char *s2)
+{
+ /* No checks for NULL */
+ char *s1p = (char *)s1;
+ char *s2p = (char *)s2;
+
+ while (*s2p != '\0')
+ {
+ if (*s1p != *s2p)
+ break;
+
+ ++s1p;
+ ++s2p;
+ }
+ return (*s1p - *s2p);
+}
+
+/****************************************************************/
+int
+strncmp (const char *s1, const char *s2, int n)
+{
+ /* No checks for NULL */
+ char *s1p = (char *)s1;
+ char *s2p = (char *)s2;
+
+ if (n <= 0)
+ return 0;
+
+ while (*s2p != '\0')
+ {
+ if (*s1p != *s2p)
+ break;
+
+ if (--n == 0)
+ break;
+
+ ++s1p;
+ ++s2p;
+ }
+ return (*s1p - *s2p);
+}
+
+/****************************************************************/
+void *
+memcpy (void *dest, const void *src, unsigned n)
+{
+ int longs, bytes;
+ uint_32 *dpl = (uint_32 *)dest;
+ uint_32 *spl = (uint_32 *)src;
+ uint_8 *dpb, *spb;
+
+ if ((dest != NULL) && (src != NULL) && (n > 0))
+ {
+ bytes = (n & 0x3);
+ longs = (n - bytes) >> 2;
+
+ while (longs--)
+ *dpl++ = *spl++;
+
+ dpb = (uint_8 *)dpl;
+ spb = (uint_8 *)spl;
+
+ while (bytes--)
+ *dpb++ = *spb++;
+ }
+ return dest;
+}
+
+/****************************************************************/
+void *
+memset (void *s, int c, unsigned n)
+{
+ /* Not optimized, but very portable */
+ unsigned char *sp = (unsigned char *)s;
+
+ if ((s != NULL) && (n > 0))
+ {
+ while (n--)
+ {
+ *sp++ = (unsigned char)c;
+ }
+ }
+ return s;
+}
+
+/****************************************************************/
diff --git a/plan_manage_main/src/common/uif.c b/plan_manage_main/src/common/uif.c
new file mode 100644
index 0000000..e765aef
--- /dev/null
+++ b/plan_manage_main/src/common/uif.c
@@ -0,0 +1,329 @@
+/*
+ * File: uif.c
+ * Purpose: Provide an interactive user interface
+ *
+ * Notes: The commands, set/show parameters, and prompt are configured
+ * at the project level
+ */
+
+#include "common.h"
+#include "uif.h"
+
+/********************************************************************/
+/*
+ * Global messages -- constant strings
+ */
+const char HELPMSG[] =
+ "Enter 'help' for help.\n";
+
+const char INVARG[] =
+ "Error: Invalid argument: %s\n";
+
+const char INVALUE[] =
+ "Error: Invalid value: %s\n";
+
+/*
+ * Strings used by this file only
+ */
+static const char INVCMD[] =
+ "Error: No such command: %s\n";
+
+static const char HELPFORMAT[] =
+ "%8s %-25s %s %s\n";
+
+static const char SYNTAX[] =
+ "Error: Invalid syntax for: %s\n";
+
+static const char INVOPT[] =
+ "Error: Invalid set/show option: %s\n";
+
+static const char OPTFMT[] =
+ "%12s: ";
+
+static char cmdline1 [UIF_MAX_LINE];
+static char cmdline2 [UIF_MAX_LINE];
+
+/********************************************************************/
+char *
+get_line (char *line)
+{
+ int pos;
+ int ch;
+
+ pos = 0;
+ ch = (int)in_char();
+ while ( (ch != 0x0D /* CR */) &&
+ (ch != 0x0A /* LF/NL */) &&
+ (pos < UIF_MAX_LINE))
+ {
+ switch (ch)
+ {
+ case 0x08: /* Backspace */
+ case 0x7F: /* Delete */
+ if (pos > 0)
+ {
+ pos -= 1;
+ out_char(0x08); /* backspace */
+ out_char(' ');
+ out_char(0x08); /* backspace */
+ }
+ break;
+ default:
+ if ((pos+1) < UIF_MAX_LINE)
+ {
+ if ((ch > 0x1f) && (ch < 0x80))
+ {
+ line[pos++] = (char)ch;
+ out_char((char)ch);
+ }
+ }
+ break;
+ }
+ ch = (int)in_char();
+ }
+ line[pos] = '\0';
+ out_char(0x0D); /* CR */
+ out_char(0x0A); /* LF */
+
+ return line;
+}
+
+/********************************************************************/
+int
+make_argv (char *cmdline, char *argv[])
+{
+ int argc, i, in_text;
+
+ /*
+ * Break cmdline into strings and argv
+ * It is permissible for argv to be NULL, in which case
+ * the purpose of this routine becomes to count args
+ */
+ argc = 0;
+ i = 0;
+ in_text = FALSE;
+ while (cmdline[i] != '\0') /* getline() must place 0x00 on end */
+ {
+ if (((cmdline[i] == ' ') ||
+ (cmdline[i] == '\t')) )
+ {
+ if (in_text)
+ {
+ /* end of command line argument */
+ cmdline[i] = '\0';
+ in_text = FALSE;
+ }
+ else
+ {
+ /* still looking for next argument */
+
+ }
+ }
+ else
+ {
+ /* got non-whitespace character */
+ if (in_text)
+ {
+ }
+ else
+ {
+ /* start of an argument */
+ in_text = TRUE;
+ if (argc < UIF_MAX_ARGS)
+ {
+ if (argv != NULL)
+ argv[argc] = &cmdline[i];
+ argc++;
+ }
+ else
+ /*return argc;*/
+ break;
+ }
+
+ }
+ i++; /* proceed to next character */
+ }
+ if (argv != NULL)
+ argv[argc] = NULL;
+ return argc;
+}
+
+/********************************************************************/
+void
+run_cmd (void)
+{
+ /*
+ * Global array of pointers to emulate C argc,argv interface
+ */
+ int argc;
+ char *argv[UIF_MAX_ARGS + 1]; /* one extra for null terminator */
+
+ get_line(cmdline1);
+
+ if (!(argc = make_argv(cmdline1,argv)))
+ {
+ /* no command entered, just a blank line */
+ strcpy(cmdline1,cmdline2);
+ argc = make_argv(cmdline1,argv);
+ }
+ cmdline2[0] = '\0';
+
+ if (argc)
+ {
+ int i;
+ for (i = 0; i < UIF_NUM_CMD; i++)
+ {
+ if (strcasecmp(UIF_CMDTAB[i].cmd,argv[0]) == 0)
+ {
+ if (((argc-1) >= UIF_CMDTAB[i].min_args) &&
+ ((argc-1) <= UIF_CMDTAB[i].max_args))
+ {
+ if (UIF_CMDTAB[i].flags & UIF_CMD_FLAG_REPEAT)
+ {
+ strcpy(cmdline2,argv[0]);
+ }
+ UIF_CMDTAB[i].func(argc,argv);
+ return;
+ }
+ else
+ {
+ printf(SYNTAX,argv[0]);
+ return;
+ }
+ }
+ }
+ printf(INVCMD,argv[0]);
+ printf(HELPMSG);
+ }
+}
+/********************************************************************/
+uint_32
+get_value (char *s, int *success, int base)
+{
+ uint_32 value;
+ char *p;
+
+ value = strtoul(s,&p,base);
+ if ((value == 0) && (p == s))
+ {
+ *success = FALSE;
+ return 0;
+ }
+ else
+ {
+ *success = TRUE;
+ return value;
+ }
+}
+/********************************************************************/
+void
+uif_cmd_help (int argc, char **argv)
+{
+ int index;
+
+ (void)argc;
+ (void)argv;
+
+ printf("\n");
+ for (index = 0; index < UIF_NUM_CMD; index++)
+ {
+ printf(HELPFORMAT,
+ UIF_CMDTAB[index].cmd,
+ UIF_CMDTAB[index].description,
+ UIF_CMDTAB[index].cmd,
+ UIF_CMDTAB[index].syntax);
+ }
+ printf("\n");
+}
+/********************************************************************/
+void
+uif_cmd_set (int argc, char **argv)
+{
+ int index;
+
+ printf("\n");
+ if (argc == 1)
+ {
+ printf("Valid 'set' options:\n");
+ for (index = 0; index < UIF_NUM_SETCMD; ++index)
+ {
+ printf(OPTFMT,UIF_SETCMDTAB[index].option);
+ printf("%s\n",UIF_SETCMDTAB[index].syntax);
+ }
+ printf("\n");
+ return;
+ }
+
+ if (argc != 3)
+ {
+ printf("Error: Invalid argument list\n");
+ return;
+ }
+
+ for (index = 0; index < UIF_NUM_SETCMD; index++)
+ {
+ if (strcasecmp(UIF_SETCMDTAB[index].option,argv[1]) == 0)
+ {
+ if (((argc-1-1) >= UIF_SETCMDTAB[index].min_args) &&
+ ((argc-1-1) <= UIF_SETCMDTAB[index].max_args))
+ {
+ UIF_SETCMDTAB[index].func(argc,argv);
+ return;
+ }
+ else
+ {
+ printf(INVARG,argv[1]);
+ return;
+ }
+ }
+ }
+ printf(INVOPT,argv[1]);
+}
+
+/********************************************************************/
+void
+uif_cmd_show (int argc, char **argv)
+{
+ int index;
+
+ printf("\n");
+ if (argc == 1)
+ {
+ /*
+ * Show all Option settings
+ */
+ argc = 2;
+ argv[2] = NULL;
+ for (index = 0; index < UIF_NUM_SETCMD; index++)
+ {
+ printf(OPTFMT,UIF_SETCMDTAB[index].option);
+ UIF_SETCMDTAB[index].func(argc,argv);
+ printf("\n");
+ }
+ printf("\n");
+ return;
+ }
+
+ for (index = 0; index < UIF_NUM_SETCMD; index++)
+ {
+ if (strcasecmp(UIF_SETCMDTAB[index].option,argv[1]) == 0)
+ {
+ if (((argc-1-1) >= UIF_SETCMDTAB[index].min_args) &&
+ ((argc-1-1) <= UIF_SETCMDTAB[index].max_args))
+ {
+ printf(OPTFMT,UIF_SETCMDTAB[index].option);
+ UIF_SETCMDTAB[index].func(argc,argv);
+ printf("\n\n");
+ return;
+ }
+ else
+ {
+ printf(INVARG,argv[1]);
+ return;
+ }
+ }
+ }
+ printf(INVOPT,argv[1]);
+}
+
+/********************************************************************/
diff --git a/plan_manage_main/src/cpu/arm_cm0.c b/plan_manage_main/src/cpu/arm_cm0.c
new file mode 100644
index 0000000..f07ab0d
--- /dev/null
+++ b/plan_manage_main/src/cpu/arm_cm0.c
@@ -0,0 +1,181 @@
+/*
+ * File: arm_cm0.c
+ * Purpose: Generic high-level routines for ARM Cortex M4 processors
+ *
+ * Notes:
+ */
+
+#include "common.h"
+
+/***********************************************************************/
+/*
+ * Configures the ARM system control register for STOP (deep sleep) mode
+ * and then executes the WFI instruction to enter the mode.
+ *
+ * Parameters:
+ * none
+ *
+ * Note: Might want to change this later to allow for passing in a parameter
+ * to optionally set the sleep on exit bit.
+ */
+
+void stop (void)
+{
+ /* Set the SLEEPDEEP bit to enable deep sleep mode (STOP) */
+ SCB_SCR |= SCB_SCR_SLEEPDEEP_MASK;
+
+ /* WFI instruction will start entry into STOP mode */
+#ifndef KEIL
+ // If not using KEIL's uVision use the standard assembly command
+ asm("WFI");
+#else
+ // If using KEIL's uVision, use the CMSIS intrinsic
+ __wfi();
+#endif
+}
+/***********************************************************************/
+/*
+ * Configures the ARM system control register for WAIT (sleep) mode
+ * and then executes the WFI instruction to enter the mode.
+ *
+ * Parameters:
+ * none
+ *
+ * Note: Might want to change this later to allow for passing in a parameter
+ * to optionally set the sleep on exit bit.
+ */
+
+void wait (void)
+{
+ /* Clear the SLEEPDEEP bit to make sure we go into WAIT (sleep) mode instead
+ * of deep sleep.
+ */
+ SCB_SCR &= ~SCB_SCR_SLEEPDEEP_MASK;
+
+ /* WFI instruction will start entry into WAIT mode */
+#ifndef KEIL
+ // If not using KEIL's uVision use the standard assembly command
+ asm("WFI");
+#else
+ // If using KEIL's uVision, use the CMSIS intrinsic
+ __wfi();
+#endif
+}
+/***********************************************************************/
+/*
+ * Change the value of the vector table offset register to the specified value.
+ *
+ * Parameters:
+ * vtor new value to write to the VTOR
+ */
+
+void write_vtor (int vtor)
+{
+ /* Write the VTOR with the new value */
+ SCB_VTOR = vtor;
+}
+/***********************************************************************/
+/*
+ * Initialize the NVIC to enable the specified IRQ.
+ *
+ * NOTE: The function only initializes the NVIC to enable a single IRQ.
+ * Interrupts will also need to be enabled in the ARM core. This can be
+ * done using the EnableInterrupts macro.
+ *
+ * Parameters:
+ * irq irq number to be enabled (the irq number NOT the vector number)
+ */
+
+void enable_irq (int irq)
+{
+ /* Make sure that the IRQ is an allowable number. Up to 32 is
+ * used.
+ *
+ * NOTE: If you are using the interrupt definitions from the header
+ * file, you MUST SUBTRACT 16!!!
+ */
+ if (irq > 32)
+ printf("\nERR! Invalid IRQ value passed to enable irq function!\n");
+ else
+ {
+ /* Set the ICPR and ISER registers accordingly */
+ NVIC_ICPR |= 1 << (irq%32);
+ NVIC_ISER |= 1 << (irq%32);
+ }
+}
+/***********************************************************************/
+/*
+ * Initialize the NVIC to disable the specified IRQ.
+ *
+ * NOTE: The function only initializes the NVIC to disable a single IRQ.
+ * If you want to disable all interrupts, then use the DisableInterrupts
+ * macro instead.
+ *
+ * Parameters:
+ * irq irq number to be disabled (the irq number NOT the vector number)
+ */
+
+void disable_irq (int irq)
+{
+
+ /* Make sure that the IRQ is an allowable number. Right now up to 32 is
+ * used.
+ *
+ * NOTE: If you are using the interrupt definitions from the header
+ * file, you MUST SUBTRACT 16!!!
+ */
+ if (irq > 32)
+ printf("\nERR! Invalid IRQ value passed to disable irq function!\n");
+ else
+ /* Set the ICER register accordingly */
+ NVIC_ICER = 1 << (irq%32);
+}
+/***********************************************************************/
+/*
+ * Initialize the NVIC to set specified IRQ priority.
+ *
+ * NOTE: The function only initializes the NVIC to set a single IRQ priority.
+ * Interrupts will also need to be enabled in the ARM core. This can be
+ * done using the EnableInterrupts macro.
+ *
+ * Parameters:
+ * irq irq number to be enabled (the irq number NOT the vector number)
+ * prio irq priority. 0-3 levels. 0 max priority
+ */
+
+void set_irq_priority (int irq, int prio)
+{
+ /*irq priority pointer*/
+ uint_8 *prio_reg;
+ uint_8 err = 0;
+ uint_8 div = 0;
+
+ /* Make sure that the IRQ is an allowable number. Right now up to 32 is
+ * used.
+ *
+ * NOTE: If you are using the interrupt definitions from the header
+ * file, you MUST SUBTRACT 16!!!
+ */
+ if (irq > 32)
+ {
+ printf("\nERR! Invalid IRQ value passed to priority irq function!\n");
+ err = 1;
+ }
+
+ if (prio > 3)
+ {
+ printf("\nERR! Invalid priority value passed to priority irq function!\n");
+ err = 1;
+ }
+
+ if (err != 1)
+ {
+ /* Determine which of the NVICIPx corresponds to the irq */
+ div = irq / 4;
+ prio_reg = (uint_8 *)((uint_32)&NVIC_IP(div));
+ /* Assign priority to IRQ */
+ *prio_reg = ( (prio&0x3) << (8 - ARM_INTERRUPT_LEVEL_BITS) );
+ }
+}
+/***********************************************************************/
+
diff --git a/plan_manage_main/src/cpu/crt0.s b/plan_manage_main/src/cpu/crt0.s
new file mode 100644
index 0000000..13e49b9
--- /dev/null
+++ b/plan_manage_main/src/cpu/crt0.s
@@ -0,0 +1,30 @@
+/*
+ * File: crt0.s
+ * Purpose: Lowest level routines for Kinetis L Family.
+ *
+ * Notes:
+ *
+ */
+
+
+; AREA Crt0, CODE, READONLY ; name this block of code
+ SECTION .noinit : CODE
+
+ EXPORT __startup
+__startup
+ LDR r0,=0 ; Initialize the GPRs
+ LDR r1,=0
+ LDR r2,=0
+ LDR r3,=0
+ LDR r4,=0
+ LDR r5,=0
+ LDR r6,=0
+ LDR r7,=0
+
+ CPSIE i ; Unmask interrupts
+ import start
+ BL start ; call the C code
+__done
+ B __done
+
+ END
diff --git a/plan_manage_main/src/cpu/start.c b/plan_manage_main/src/cpu/start.c
new file mode 100644
index 0000000..6af2fdc
--- /dev/null
+++ b/plan_manage_main/src/cpu/start.c
@@ -0,0 +1,30 @@
+
+#include "common.h"
+#include "sysinit.h"
+
+extern void main(void);
+
+
+
+
+//看门狗WDOG(COP)宏定义
+#define WDOG_DISABLE() {SIM_COPC = 0x00u;} //禁用看门狗
+//COP使用LPO时钟,COP在2^10个LPO时钟周期后延时
+#define WDOG_ENABLE() {SIM_COPC |= SIM_COPC_COPT_MASK;} //使能看门狗
+
+
+// 系统上电启动程序
+ void start(void)
+{
+ WDOG_DISABLE(); //禁用看门狗
+ //WDOG_ENABLE(); 使能看门狗
+ common_startup();
+ sys_init() ; //cpu主频设置
+ main(); //进入主函数
+ while(1); //永久循环(主函数内永久循环,含有执行不到该语句)
+}
+
+//-------------------------------------------------------------------------------
+
+
+
diff --git a/plan_manage_main/src/cpu/sysinit.c b/plan_manage_main/src/cpu/sysinit.c
new file mode 100644
index 0000000..3d43005
--- /dev/null
+++ b/plan_manage_main/src/cpu/sysinit.c
@@ -0,0 +1,45 @@
+#include "sysinit.h"
+#include "uart.h"
+
+//===========================================================================
+//函数名称:sys_init
+//函数返回:无
+//参数说明:无
+//功能概要:(1)KL25的EXTAL(40)、XTAL(41)接50Mhz外部晶振,产生PLL/FLL输出时钟频
+// 率48MHz,内核时钟48MHz,总线时钟24MHz,内部参考时钟4MHz。
+// (2)对于这些频率,sys_init.h有相应的宏常量定义可以供编程时使用
+//===========================================================================
+
+u32 core_clk_khz; //内核时钟(KHz)
+u32 core_clk_mhz; //内核时钟(MHz)
+u32 bus_clk_khz; //外围总线时钟
+
+void sys_init(void)
+{
+ SIM_SCGC5 |= SIM_SCGC5_PORTA_MASK
+ | SIM_SCGC5_PORTB_MASK
+ | SIM_SCGC5_PORTC_MASK
+ | SIM_SCGC5_PORTD_MASK
+ | SIM_SCGC5_PORTE_MASK;
+
+ #if defined(NO_PLL_INIT)
+ core_clk_mhz = 20; //如果定义不初始化锁相环,则进入 FEI mode
+#else
+ /* 增强系统频率 可以在这里设置超频 */
+ core_clk_mhz = pll_init(MCG_CLK_MHZ);
+#endif
+
+ //通过pll_init函数的返回值来计算内核时钟和外设时钟,便于其他函数可查询时钟频率
+ core_clk_khz = core_clk_mhz * 1000;
+ bus_clk_khz = core_clk_khz / (((SIM_CLKDIV1 & SIM_CLKDIV1_OUTDIV4_MASK) >> 16) +1);
+
+
+ uart_init(LANDZO_PORT, LANDZO_BAUD); //初始化 printf 函数所用到的串口
+
+
+}
+
+
+
+
+
diff --git a/plan_manage_main/src/cpu/vectors.c b/plan_manage_main/src/cpu/vectors.c
new file mode 100644
index 0000000..5d8071e
--- /dev/null
+++ b/plan_manage_main/src/cpu/vectors.c
@@ -0,0 +1,189 @@
+/******************************************************************************
+* File: vectors.c
+*
+* Purpose: Configure interrupt vector table for Kinetis.
+******************************************************************************/
+
+#include "vectors.h"
+#include "isr.h"
+#include "common.h"
+
+/******************************************************************************
+* Vector Table
+******************************************************************************/
+#pragma language=extended
+#pragma segment="CSTACK"
+
+typedef void (*vector_entry)(void);
+typedef union { vector_entry __fun; void * __ptr; } intvec_elem;
+
+const intvec_elem __vector_table[] @ ".intvec" =
+{
+ { .__ptr = __sfe( "CSTACK" ) }, /* Initial SP */
+ VECTOR_001, /* Initial PC */
+ VECTOR_002,
+ VECTOR_003,
+ VECTOR_004,
+ VECTOR_005,
+ VECTOR_006,
+ VECTOR_007,
+ VECTOR_008,
+ VECTOR_009,
+ VECTOR_010,
+ VECTOR_011,
+ VECTOR_012,
+ VECTOR_013,
+ VECTOR_014,
+ VECTOR_015,
+ VECTOR_016,
+ VECTOR_017,
+ VECTOR_018,
+ VECTOR_019,
+ VECTOR_020,
+ VECTOR_021,
+ VECTOR_022,
+ VECTOR_023,
+ VECTOR_024,
+ VECTOR_025,
+ VECTOR_026,
+ VECTOR_027,
+ VECTOR_028,
+ VECTOR_029,
+ VECTOR_030,
+ VECTOR_031,
+ VECTOR_032,
+ VECTOR_033,
+ VECTOR_034,
+ VECTOR_035,
+ VECTOR_036,
+ VECTOR_037,
+ VECTOR_038,
+ VECTOR_039,
+ VECTOR_040,
+ VECTOR_041,
+ VECTOR_042,
+ VECTOR_043,
+ VECTOR_044,
+ VECTOR_045,
+ VECTOR_046,
+ VECTOR_047,
+};
+
+#ifdef FLASH
+__root const unsigned int Config[] @ "FlashConfig"=
+{
+ CONFIG_1, CONFIG_2, CONFIG_3, CONFIG_4,
+};
+#endif
+
+/******************************************************************************
+* default_isr(void)
+*
+* Default ISR definition.
+*
+* In: n/a
+* Out: n/a
+******************************************************************************/
+void default_isr(void)
+{
+ #define VECTORNUM (*(volatile uint32_t*)(0xE000ED04))
+
+ printf("\n****default_isr entered on vector %d*****\r\n\n",VECTORNUM);
+ return;
+}
+/******************************************************************************/
+/* Generic interrupt handler for the PTA4 GPIO interrupt connected to an
+ * abort switch.
+ * NOTE: For true abort operation this handler should be modified
+ * to jump to the main process instead of executing a return.
+ */
+void abort_isr(void)
+{
+ /* Write 1 to the PTA4 interrupt flag bit to clear the interrupt */
+ PORTA_PCR4 |= PORT_PCR_ISF_MASK;
+
+ printf("\n****Abort button interrupt****\n\n");
+ return;
+}
+/******************************************************************************/
+/* Exception frame without floating-point storage
+ * hard fault handler in C,
+ * with stack frame location as input parameter
+ */
+void
+hard_fault_handler_c(unsigned int * hardfault_args)
+{
+ unsigned int stacked_r0;
+ unsigned int stacked_r1;
+ unsigned int stacked_r2;
+ unsigned int stacked_r3;
+ unsigned int stacked_r12;
+ unsigned int stacked_lr;
+ unsigned int stacked_pc;
+ unsigned int stacked_psr;
+
+ //Exception stack frame
+ stacked_r0 = ((unsigned long) hardfault_args[0]);
+ stacked_r1 = ((unsigned long) hardfault_args[1]);
+ stacked_r2 = ((unsigned long) hardfault_args[2]);
+ stacked_r3 = ((unsigned long) hardfault_args[3]);
+
+ stacked_r12 = ((unsigned long) hardfault_args[4]);
+ stacked_lr = ((unsigned long) hardfault_args[5]);
+ stacked_pc = ((unsigned long) hardfault_args[6]);
+ stacked_psr = ((unsigned long) hardfault_args[7]);
+
+ printf ("[Hard fault handler]\n");
+ printf ("R0 = %x\n", stacked_r0);
+ printf ("R1 = %x\n", stacked_r1);
+ printf ("R2 = %x\n", stacked_r2);
+ printf ("R3 = %x\n", stacked_r3);
+ printf ("R12 = %x\n", stacked_r12);
+ printf ("LR = %x\n", stacked_lr);
+ printf ("PC = %x\n", stacked_pc);
+ printf ("PSR = %x\n", stacked_psr);
+ printf ("BFAR = %x\n", (*((volatile unsigned long *)(0xE000ED38))));
+ printf ("CFSR = %x\n", (*((volatile unsigned long *)(0xE000ED28))));
+ printf ("HFSR = %x\n", (*((volatile unsigned long *)(0xE000ED2C))));
+ printf ("DFSR = %x\n", (*((volatile unsigned long *)(0xE000ED30))));
+ printf ("AFSR = %x\n", (*((volatile unsigned long *)(0xE000ED3C))));
+
+ for(;;)
+ {}
+}
+void SRTC_ISR(void)
+{
+
+ volatile uint32 temp;
+
+ printf("SRTC_ISR entered\r\n");
+
+ temp = RTC_SR;
+
+ if((RTC_SR & 0x01)== 0x01)
+ {
+ printf("SRTC time invalid interrupt entered...\r\n");
+ RTC_SR &= 0x07; //clear TCE, or SRTC_TSR can not be written
+ RTC_TSR = 0x00000005; //clear TIF by writing to the seconds register
+ }
+ else if((RTC_SR & 0x02) == 0x02)
+ {
+ printf("SRTC time overflow interrupt entered...\r\n");
+ RTC_SR &= 0x07; //clear TCE, or SRTC_STSR can not be written
+ RTC_TSR = 0x00000005; //clear TOF
+ RTC_SR = 0x10; //start time again to exit wait loop in application code.
+ }
+ else if((RTC_SR & 0x04) == 0x04)
+ {
+ printf("SRTC alarm interrupt entered...\r\n");
+ RTC_TAR = 0x0;// Write 0 to disable
+ //SPIOC_PTC_PDOR = 0x0001 ^ GPIOC_PTC_PDOR;
+ }
+ else
+ {
+ printf("No valid Flag was set!\n");
+ }
+ return;
+}
+
+/* End of "vectors.c" */
diff --git a/plan_manage_main/src/drivers/SPI.c b/plan_manage_main/src/drivers/SPI.c
new file mode 100644
index 0000000..8d956e5
--- /dev/null
+++ b/plan_manage_main/src/drivers/SPI.c
@@ -0,0 +1,147 @@
+#include "SPI.h"
+
+
+//==============================================================================
+//函数名称:SPI_init。
+//功能说明:SPI初始化。通信波特率BaudRate = BusClock /16.其中BusClock是系统时钟。
+//函数参数:SPI_mode:SPI模式。
+// :SPI_No:要初始化的SPI口号。
+//函数返回:0:初始化失败;1:初始化成功。
+//==============================================================================
+
+uint_8 SPI_init(uint_8 SPI_No,uint_8 SPI_mode)
+{
+ SPI_MemMapPtr baseadd=SPI_baseadd(SPI_No);
+ if(SPI_No==0) //对把portA的14~17引脚选择为SPI0功能。
+ {
+ SIM_SCGC4|=SIM_SCGC4_SPI0_MASK; //打开SPI0模块时钟。
+ PORTA_PCR14=(0|PORT_PCR_MUX(0x02)); //选择PTA14的SS功能
+ PORTA_PCR15=(0|PORT_PCR_MUX(0x02)); //选择PTA15的SCK功能
+ PORTA_PCR16=(0|PORT_PCR_MUX(0x02)); //选择PTA16的MOSI功能
+ PORTA_PCR17=(0|PORT_PCR_MUX(0x02)); //选择PTA17的MIOS功能
+
+ SPI0_C1 = 0|SPI_C1_SPE_MASK
+ |SPI_C1_MSTR_MASK
+ |SPI_C1_SSOE_MASK; //对SPI0的C1寄存器配置为主机模式、从机选择自动模式并
+ //使能SPI0模块。
+ SPI0_C2 = 0|SPI_C2_MODFEN_MASK; //与SPI0中C1的SSOE配合,把从机选择配置为自动模式。
+ SPI0_BR = 0x00U; //设置波特率。
+ }
+ else if(SPI_No==1) //对把portE的1~4引脚选择为SPI1功能。
+ {
+ SIM_SCGC4|=SIM_SCGC4_SPI1_MASK; //打开SPI1模块时钟。
+ PORTE_PCR1=(0|PORT_PCR_MUX(0x02)); //选择PTE1的MOSI功能
+ PORTE_PCR2=(0|PORT_PCR_MUX(0x02)); //选择PTE2的SCK功能
+ PORTE_PCR3=(0|PORT_PCR_MUX(0x02)); //选择PTE3的MISO功能
+ PORTE_PCR4=(0|PORT_PCR_MUX(0x02)); //选择PTE4的MOSI功能
+
+ SPI1_C1 = 0|SPI_C1_SPE_MASK
+ |SPI_C1_SPIE_MASK; //对SPI1的C1寄存器进行配置
+ enable_irq (11); //开启SPI1中断。
+ SPI1_C2 = 0x00U;
+ SPI1_BR = 0x00U; //设置与SPI0相同的波特率。
+
+ }
+ else return(0);
+ return(1);
+
+}
+
+//==============================================================================
+//函数名称:SPI_sendonebyte.
+//功能说明:SPI发送一字节数据。
+//函数参数:SPI_No:串口号。
+// :ch:需要发送的一字节数据。
+//函数返回:0:发送失败;1:发送成功。
+//==============================================================================
+uint_8 SPI_sendonebyte(uint_8 SPI_No,uint_8 ch)
+{
+ uint_32 i;
+ SPI_MemMapPtr baseadd=SPI_baseadd(SPI_No);
+ while(!SPI_S_REG(baseadd)&SPI_S_SPTEF_MASK);
+ SPI_D_REG(baseadd)=ch;
+ for(i=0;i<0xFFF0;i++) //在一定时间内发送不能完成,则认为发送失败。
+ {
+ if(SPI_S_REG(baseadd)&SPI_S_SPTEF_MASK)
+ {
+ return(1);
+ }
+ }
+ return(0);
+}
+
+//==============================================================================
+//函数名称:SPI_sendstring.
+//功能说明:SPI发送数据。
+//函数参数:SPI_No:串口号。
+// :*p:所发数据的首地址。
+//函数返回:无。
+//==============================================================================
+void SPI_sendstring(uint_8 SPI_No,uint_8 *p)
+{
+ SPI_MemMapPtr baseadd=SPI_baseadd(SPI_No);
+ uint_32 k;
+ for(k=0;p[k]!='\0';k++)
+ {
+ while(!SPI_S_REG(baseadd)&SPI_S_SPTEF_MASK);
+ SPI_D_REG(baseadd)=p[k];
+ }
+}
+
+//==============================================================================
+//函数名称:SPI_reonebyte.
+//功能说明:SPI接收一个字节的数据
+//函数参数:SPI_No:SPI口号。
+//函数返回:接收到的数据。
+//==============================================================================
+uint_8 SPI_reonebyte(uint_8 SPI_No)
+{
+ SPI_MemMapPtr baseadd=SPI_baseadd(SPI_No);
+ while(!(SPI_S_REG(baseadd)& SPI_S_SPRF_MASK)); //检测SPI1是否收到了数据。
+ return SPI_D_REG(baseadd);
+}
+
+//==============================================================================
+//函数名称:SPI_receiveN.
+//功能说明:SPI接收数据。当n=1时,就是接受一个字节的数据……
+//函数参数:SPI_No:SPI口号。
+// : n:要接收的字节个数。
+// :data[]:接收到的数据。
+// 函数返回:1:接收成功,其他情况:失败。
+//==============================================================================
+uint_8 SPI_receiveN(uint_8 SPI_No,uint_32 n,uint_8 data[])
+{
+ SPI_MemMapPtr baseadd=SPI_baseadd(SPI_No);
+ uint_32 m=0;
+ while(m> 5 ;
+
+ switch(adcn)
+ {
+ case ADC0: /* ADC0 */
+ SIM_SCGC6 |= (SIM_SCGC6_ADC0_MASK ); //开启ADC0时钟
+ SIM_SOPT7 &= ~(SIM_SOPT7_ADC0ALTTRGEN_MASK | SIM_SOPT7_ADC0PRETRGSEL_MASK);
+ SIM_SOPT7 |= SIM_SOPT7_ADC0TRGSEL(0);
+ break;
+
+ default:
+ ASSERT(0);
+ }
+
+ switch(adcn_ch)
+ {
+
+ case ADC0_SE0:
+ port_init(PTE20, ALT0);
+ break;
+ case ADC0_SE1:
+ port_init(PTE16, ALT0);
+ break;
+ case ADC0_SE2:
+ port_init(PTE18, ALT0);
+ break;
+ case ADC0_SE3:
+ port_init(PTE22, ALT0);
+ break;
+ case ADC0_SE4a:
+ port_init(PTE21, ALT0);
+ break;
+ case ADC0_SE5a:
+ port_init(PTE17, ALT0);
+ break;
+ case ADC0_SE6a:
+ port_init(PTE19, ALT0);
+ break;
+ case ADC0_SE7a:
+ port_init(PTE23, ALT0);
+ break;
+ case ADC0_SE8:
+ port_init(PTB0, ALT0);
+ break;
+ case ADC0_SE9:
+ port_init(PTB1, ALT0);
+ break;
+ case ADC0_SE11:
+ port_init(PTC2, ALT0);
+ break;
+ case ADC0_SE12:
+ port_init(PTB2, ALT0);
+ break;
+ case ADC0_SE13:
+ port_init(PTB3, ALT0);
+ break;
+ case ADC0_SE14:
+ port_init(PTC0, ALT0);
+ break;
+ case ADC0_SE15:
+ port_init(PTC1, ALT0);
+ break;
+ case ADC0_SE23:
+ port_init(PTE30, ALT0);
+ break;
+
+
+ case Temp0_Sensor: // Temperature Sensor,内部温度测量,可用ADC函数
+ break;
+ case VREFH0: // 参考高电压,可用ADC函数 ,结果恒为 2^n-1
+ break;
+ case VREFL0: // 参考低电压,可用ADC函数 ,结果恒为 0
+ break;
+
+ default:
+ ASSERT(0); //断言,传递的管脚不支持 ADC 单端软件触发,请换 其他管脚
+ break;
+ }
+
+
+
+}
+
+/*************************************************************************
+* 蓝宙电子工作室
+*
+* 函数名称:adc_init
+* 功能说明:获取ADC采样值(不支持B通道)
+* 参数说明:ADCn_Ch_e ADC通道
+* ADC_nbit ADC精度( ADC_8bit,ADC_12bit, ADC_10bit, ADC_16bit )
+* 函数返回:
+* 修改时间:2014-9-18
+* 备 注:
+*************************************************************************/
+uint16_t adc_once(ADCn_Ch_e adcn_ch, ADC_nbit bit) //采集某路模拟量的AD值
+{
+ ADCn_e adcn = (ADCn_e)(adcn_ch >> 5) ;
+
+ uint16_t result = 0;
+
+ adc_start(adcn_ch, bit); //启动ADC转换
+
+ while (( ADC_SC1_REG(ADCN[adcn], 0 ) & ADC_SC1_COCO_MASK ) != ADC_SC1_COCO_MASK); //只支持 A通道
+ result = ADC_R_REG(ADCN[adcn], 0);
+ ADC_SC1_REG(ADCN[adcn], 0) &= ~ADC_SC1_COCO_MASK;
+ return result;
+}
+/*************************************************************************
+* 蓝宙电子工作室
+*
+* 函数名称:ad_ave
+* 功能说明:多次采样,取平均值
+* 参数说明:ADCx 模块号( ADC0、 ADC1)
+* ADC_Channel 通道号
+* ADC_nbit 精度( ADC_8bit,ADC_12bit, ADC_10bit, ADC_16bit )
+* N 均值滤波次数(范围:0~255)
+* 函数返回:16位无符号结果值
+* 修改时间:2012-2-10
+* 备 注:修改苏州大学的例程
+*************************************************************************/
+uint16_t adc_ave(ADCn_Ch_e adcn_ch, ADC_nbit bit, uint8_t N) //均值滤波
+{
+ uint32_t tmp = 0;
+ uint8_t i;
+
+ for(i = 0; i < N; i++)
+ tmp += adc_once(adcn_ch, bit);
+ tmp = tmp / N;
+ return (uint16_t)tmp;
+}
+
+/*************************************************************************
+* 蓝宙电子工作室
+*
+* 函数名称:ad_SUM
+* 功能说明:多次采样,取平均值
+* 参数说明:ADCx 模块号( ADC0、 ADC1)
+* ADC_Channel 通道号
+* ADC_nbit 精度( ADC_8bit,ADC_12bit, ADC_10bit, ADC_16bit )
+* N 均值滤波次数(范围:0~255)
+* 函数返回:16位无符号结果值
+* 修改时间:2014-9-18
+* 备 注:
+*************************************************************************/
+uint16_t adc_sum(ADCn_Ch_e adcn_ch, ADC_nbit bit, u8 N) //采样集合
+{
+ uint32_t tmp = 0;
+ uint8_t i;
+ ADCn_e adcn = (ADCn_e)(adcn_ch >> 5) ;
+ ASSERT( ((adcn == ADC0) && (ch >= AD8 && ch <= AD18)) || ((adcn == ADC1) && (ch >= AD4a && ch <= AD17)) ) ; //使用断言检测ADCn_CHn是否正常
+ adc_start(adcn_ch, bit); //启动ADC转换
+
+ for(i = 0; i < N; i++)
+ {
+ while (( ADC_SC1_REG(ADCN[adcn], 0 ) & ADC_SC1_COCO_MASK ) != ADC_SC1_COCO_MASK);
+ tmp += ADC_R_REG(ADCN[adcn], 0);
+ ADC_SC1_REG(ADCN[adcn], 0) &= ~ADC_SC1_COCO_MASK;
+ }
+ return (u16)tmp;
+}
+/*************************************************************************
+* 野火嵌入式开发工作室\蓝宙电子工作室
+*
+* 函数名称:adc_start
+* 功能说明:启动ADC软件采样(不支持B通道)
+* 参数说明:ADCn_Ch_e ADC通道
+* ADC_nbit 精度( ADC_8bit,ADC_12bit, ADC_10bit, ADC_16bit )
+* 函数返回:无
+* 修改时间:2014-9-18
+*************************************************************************/
+void adc_start(ADCn_Ch_e adcn_ch, ADC_nbit bit)
+{
+ ADCn_e adcn = (ADCn_e)(adcn_ch >> 5) ;
+ uint8_t ch = (uint8)(adcn_ch & 0x1F);
+
+ //初始化ADC默认配置
+ ADC_CFG1_REG(ADCN[adcn]) = (0
+ //| ADC_CFG1_ADLPC_MASK //ADC功耗配置,0为正常功耗,1为低功耗
+ | ADC_CFG1_ADIV(2) //时钟分频选择,分频系数为 2^n,2bit
+ | ADC_CFG1_ADLSMP_MASK //采样时间配置,0为短采样时间,1 为长采样时间
+ | ADC_CFG1_MODE(bit)
+ | ADC_CFG1_ADICLK(0) //0为总线时钟,1为总线时钟/2,2为交替时钟(ALTCLK),3为 异步时钟(ADACK)。
+ );
+
+
+ ADC_CFG2_REG(ADCN[adcn]) = (0
+ //| ADC_CFG2_MUXSEL_MASK //ADC复用选择,0为a通道,1为b通道。
+ //| ADC_CFG2_ADACKEN_MASK //异步时钟输出使能,0为禁止,1为使能。
+ | ADC_CFG2_ADHSC_MASK //高速配置,0为正常转换序列,1为高速转换序列
+ | ADC_CFG2_ADLSTS(0) //长采样时间选择,ADCK为4+n个额外循环,额外循环,0为20,1为12,2为6,3为2
+ );
+
+ //写入 SC1A 启动转换
+ ADC_SC1_REG(ADCN[adcn], 0 ) = (0
+ | ADC_SC1_AIEN_MASK // 转换完成中断,0为禁止,1为使能
+ //| ADC_SC1_DIFF_MASK // 差分模式使能,0为单端,1为差分
+ | ADC_SC1_ADCH( ch )
+ );
+
+ //ADC_SC1_REG(ADCN[adcn], 1 ) = 0;
+}
+
+/*************************************************************************
+* 野火嵌入式开发工作室\蓝宙电子工作室
+*
+* 函数名称:adc_stop
+* 功能说明:停止ADC软件采样
+* 参数说明: ADCn_e ADC模块号( ADC0、 ADC1)
+* 函数返回:无
+* 修改时间:2012-2-10
+* 备 注:修改苏州大学的例程
+*************************************************************************/
+void adc_stop(ADCn_e adcn)
+{
+ ADC_SC1_REG(ADCN[adcn], 0) = (0
+ | ADC_SC1_AIEN_MASK // 转换完成中断,0为禁止,1为使能
+ //| ADC_SC1_DIFF_MASK // 差分模式使能,0为单端,1为差分
+ | ADC_SC1_ADCH(Module0_Dis) //输入通道选择,此处选择禁止通道
+ );
+}
+
+
+
+uint_16 adc_deal(int channel, uint8_t accurary, enum HardwareAverage N)
+{
+ uint8_t ADCCfg = 0;
+ uint_16 ADCResult = 0;
+
+ switch(accurary)
+ {
+ case 8:
+ ADCCfg = ADC_CFG1_MODE(0);
+ break;
+ case 12:
+ ADCCfg = ADC_CFG1_MODE(1);
+ break;
+ case 10:
+ ADCCfg = ADC_CFG1_MODE(2);
+ break;
+ case 16:
+ ADCCfg = ADC_CFG1_MODE(3);
+ break;
+ default:
+ ADCCfg = ADC_CFG1_MODE(0);
+ }
+ ADC0_SC3 = 0 | ADC_SC3_AVGE_MASK | ADC_SC3_AVGS((uint8_t)N); //SC3寄存器硬件触发
+
+ ADCCfg |= (ADC_CFG1_ADIV(2) | ADC_CFG1_ADICLK(1));
+
+ ADC0_CFG1 = ADCCfg;
+
+ ADC0_CFG2 = 0 | ADC_CFG2_ADHSC_MASK;
+
+ ADC0_SC1A = ADC_SC1_ADCH(channel);
+
+ while((ADC0_SC1A & ADC_SC1_COCO_MASK) != ADC_SC1_COCO_MASK)
+ {
+ }
+
+ ADCResult = (uint_16)ADC0_RA;
+
+ ADC0_SC1A &= ~ADC_SC1_COCO_MASK;
+
+ return ADCResult;
+}
diff --git a/plan_manage_main/src/drivers/cmp.c b/plan_manage_main/src/drivers/cmp.c
new file mode 100644
index 0000000..841f659
--- /dev/null
+++ b/plan_manage_main/src/drivers/cmp.c
@@ -0,0 +1,133 @@
+/******************** (C) COPYRIGHT 2011 蓝宙电子工作室 ********************
+* 文件名 : adc.c
+* 描述 :工程模版实验
+*
+* 实验平台 :landzo电子开发版
+* 库版本 :
+* 嵌入系统 :
+*
+* 作者 :landzo 蓝电子
+* 淘宝店 :http://landzo.taobao.com/
+
+**********************************************************************************/
+#include "cmp.h"
+
+//============================================================================
+//函数名称:hw_cmp_init
+//函数返回 无
+//参数说明 reference:参考电压选择 0=VDDA 3.3V 1=VREF 1.2V
+// plusChannel: 正比较通道号
+// minusChannel:负比较通道号
+// 通道0,1,2,3 对应 PTC6, PTC7, PTC8, PTC9
+//功能概要:CMP模块初始化
+//============================================================================
+void cmp_init(uint8_t reference,uint8_t plusChannel,uint8_t minusChannel)
+{
+ //通过获取模块号选择比较器基址
+ CMP_MemMapPtr cmpch = CMP0_BASE_PTR;
+
+ if(plusChannel>7)
+ plusChannel = 7;
+ if(plusChannel<=0)
+ plusChannel = 0;
+
+ if(minusChannel>7)
+ minusChannel = 7;
+ if(minusChannel<=0)
+ minusChannel = 0;
+
+ //使能比较模块时钟
+ SIM_SCGC4 |=SIM_SCGC4_CMP_MASK;
+
+ //初始化寄存器
+ CMP_CR0_REG(cmpch) = 0;
+ CMP_CR1_REG(cmpch) = 0;
+ CMP_FPR_REG(cmpch) = 0;
+ //如果设置了标志清除中断标志
+ CMP_SCR_REG(cmpch) = 0x06;
+ CMP_DACCR_REG(cmpch) = 0;
+ CMP_MUXCR_REG(cmpch) = 0;
+
+ //配置寄存器
+ //过滤,数字延时禁止
+ CMP_CR0_REG(cmpch) = 0x00;
+ //连续模式,高速比较,无过滤输出,输出引脚禁止
+ CMP_CR1_REG(cmpch) = 0x16;
+ //过滤禁止
+ CMP_FPR_REG(cmpch) = 0x00;
+ //使能上升沿和下降沿中断,清标志位
+ CMP_SCR_REG(cmpch) = 0x1E;
+
+
+ if(reference==0)//参考电压选择VDD3.3V
+ {
+ //6位参考DAC使能,选择VDD作为DAC参考电压
+ CMP_DACCR_REG(cmpch) |= 0xC0;
+ }
+ else//参考电压选择VREF OUT 1.2V
+ {
+ //6位参考DAC使能,选择VREF作为DAC参考电
+ CMP_DACCR_REG(cmpch) |= 0x80;
+ }
+
+
+ CMP_MUXCR_REG(cmpch) = CMP_MUXCR_PSEL(plusChannel)//正通道选择
+ | CMP_MUXCR_MSEL(minusChannel);//负通道选择
+
+
+ //选择输出引脚
+ PORTC_PCR5=PORT_PCR_MUX(6);
+ //CMP使能
+ CMP_CR1_REG(cmpch) |= CMP_CR1_EN_MASK;
+
+}
+
+
+//============================================================================
+//函数名称:hw_dac_set_value
+//函数返回:无
+//参数说明:value: dac输出的转换值
+//功能概要:开比较中。
+//============================================================================
+void cmp_dac_set_value(uint8_t value)
+{
+ //通过获取模块号选择比较器基址
+ CMP_MemMapPtr cmpch = CMP0_BASE_PTR;
+ CMP_DACCR_REG(cmpch) |= CMP_DACCR_VOSEL(value);
+}
+
+
+
+//============================================================================
+//函数名称:hw_enable_cmp_int
+//函数返回:无
+//参数说明:无
+//功能概要:开比较中。
+//============================================================================
+void enable_cmp_int()
+{
+ //通过获取模块号选择比较器基址
+ CMP_MemMapPtr cmpch = CMP0_BASE_PTR;
+ //开放cmp接收中断,上升沿下降沿均触发
+ CMP_SCR_REG(cmpch)|= CMP_SCR_IEF_MASK | CMP_SCR_IER_MASK;
+ enable_irq(16);
+}
+
+//============================================================================
+//函数名称:hw_disable_cmp_int
+//函数返回:无
+//参数说明:无
+//功能概要:关比较中断
+//============================================================================
+void disable_cmp_int()
+{
+ //通过获取模块号选择比较器基址
+ CMP_MemMapPtr cmpch = CMP0_BASE_PTR;
+ //关闭cmp接收中断,上升沿下降沿均关闭
+ CMP_SCR_REG(cmpch)&=(~CMP_SCR_IEF_MASK) | (~CMP_SCR_IER_MASK );
+ //关接收引脚的IRQ中断
+ disable_irq(16);
+
+}
+
+
diff --git a/plan_manage_main/src/drivers/dac.c b/plan_manage_main/src/drivers/dac.c
new file mode 100644
index 0000000..61c3dbe
--- /dev/null
+++ b/plan_manage_main/src/drivers/dac.c
@@ -0,0 +1,105 @@
+/******************** (C) COPYRIGHT 2011 蓝宙电子工作室 ********************
+* 文件名 : adc.c
+* 描述 :工程模版实验
+*
+* 实验平台 :landzo电子开发版
+* 库版本 :
+* 嵌入系统 :
+*
+* 作者 :landzo 蓝电子
+* 淘宝店 :http://landzo.taobao.com/
+
+**********************************************************************************/
+
+#include "dac.h" //包含DAC驱动程序头文件
+
+//============================================================================
+//函数名称:dac_init
+//函数返回:无
+//参数说明:ModelNumber:通道号0、1。
+// RefVoltage:参考电压选择。0=1.2V,1=3.3V。
+//功能概要:初始化DAC模块设定。
+//============================================================================
+void dac_init(uint8_t RefVoltage)
+{
+ uint8_t VreRF = DAC_SEL_VREFO;
+ if(RefVoltage == 1)
+ {
+ VreRF = DAC_SEL_VDDA; //3.3V
+ }
+
+ //SIM_SCGC2 |= SIM_SCGC2_DAC0_MASK ; //使能DAC 0
+ SIM_SCGC6 |=SIM_SCGC6_DAC0_MASK; //使能DAC0时钟
+ dac_set(DAC0_BASE_PTR,VreRF);
+}
+
+//============================================================================
+//函数名称:dac_convert
+//函数返回:DAC完成标志。0=完成失败,1=完成成功
+//参数说明:ModelNumber: 通道号0、1
+// VReference: 参考电压转换值 范围(0~4095)
+//功能概要:执行DAC转换。
+//============================================================================
+//uint8_t dac_convert(uint_16 VReference)
+//{
+//
+// if(VReference != dac_set_buffer(DAC0_BASE_PTR, 0, VReference))
+// {
+// return 0;
+// }
+// else
+// return 1;
+//}
+//内部函数
+
+//============================================================================
+//函数名称:dac_set_buffer
+//函数返回:设置的缓冲区大小值
+//参数说明:dacx_base_ptr:DACx基指针
+// dacindex :缓冲区号
+// buffval :缓冲区值
+//功能概要:设置DACx缓冲区
+//============================================================================
+//int32_t dac_set_buffer( DAC_MemMapPtr dacx_base_ptr, uint8_t dacindex, int32_t buffval)
+//{
+// int32_t temp = 0;
+// //设置缓冲区低字节
+// DAC_DATL_REG(dacx_base_ptr, dacindex) = (buffval&0x0ff);
+// //设置缓冲区高字节
+// DAC_DATH_REG(dacx_base_ptr, dacindex) = (buffval&0xf00) >>8;
+// temp =( DAC_DATL_REG(dacx_base_ptr, dacindex)|( DAC_DATH_REG(dacx_base_ptr, dacindex)<<8));
+// return temp ;
+//}
+
+
+
+//============================================================================
+//函数名称:dac_set
+//函数返回:无
+//参数说明:dacx_base_ptr:DACx基指针
+// VrefSel: 参考电压
+//功能概要:配置DAC模块
+//============================================================================
+void dac_set(DAC_MemMapPtr dacx_base_ptr, uint8_t VrefSel)
+{
+ //配置DAC_C0寄存器
+ DAC_C0_REG(dacx_base_ptr) = (
+ DAC_BFB_PTR_INT_DISABLE|//缓冲区置底中断禁止
+ DAC_BFT_PTR_INT_DISABLE|//缓冲区置顶中断禁止
+ //DAC_BFWM_INT_DISABLE |//水印中断禁止
+ DAC_HP_MODE |//高功耗模式
+ DAC_SW_TRIG_STOP |//软触发无效
+ DAC_SEL_SW_TRIG |//选择软件触发
+ VrefSel |//选择参考电压
+ DAC_ENABLE //使能DAC0模块
+ );
+
+ //配置DAC_C1寄存器
+ DAC_C1_REG(dacx_base_ptr)= (
+ DAC_BF_DISABLE |//DAC缓冲区禁止
+ DAC_BF_NORMAL_MODE |//DAC选择区选择正常工作模式
+ DAC_DMA_DISABLE //DMA禁止
+ ) ;
+}
+
+
diff --git a/plan_manage_main/src/drivers/dma.c b/plan_manage_main/src/drivers/dma.c
new file mode 100644
index 0000000..96100b8
--- /dev/null
+++ b/plan_manage_main/src/drivers/dma.c
@@ -0,0 +1,130 @@
+/******************** (C) COPYRIGHT 2011 蓝宙电子工作室 ********************
+* 文件名 : adc.c
+* 描述 :工程模版实验
+*
+* 实验平台 :landzo电子开发版
+* 库版本 :
+* 嵌入系统 :
+*
+* 作者 :landzo 蓝电子
+* 淘宝店 :http://landzo.taobao.com/
+
+**********************************************************************************/
+#include "common.h"
+#include "port.h"
+#include "gpio.h"
+#include "dma.h"
+
+
+
+/*************************************************************************
+* 蓝宙电子工作室
+*
+* 函数名称:DMA_PORTx2BUFF_Init
+* 功能说明:DMA初始化,读取端口数据到内存
+* 参数说明: DMA_CHn 通道号(DMA_CH0 ~ DMA_CH15)
+ SADDR 源地址( (void * )&PTx_Bn_IN 或 (void * )&PTx_Wn_IN )
+ * DADDR 目的地址
+ * PTxn 触发端口
+ * DMA_BYTEn 每次DMA传输字节数
+ * count 一个主循环传输字节数
+* 函数返回:无
+* 修改时间:2012-2-20
+* * 作者 :野火工作室/landzo 蓝电子
+* 备 注:
+*************************************************************************/
+void DMA_PORTx2BUFF_Init(DMA_CHn CHn, void *SADDR, void *DADDR, PTxn ptxn, DMA_BYTEn byten, uint32_t count)
+{
+ uint8_t n, tmp;
+ uint8_t BYTEs = (byten == DMA_BYTE1 ? 1 : (byten == DMA_BYTE2 ? 2 : (byten == DMA_BYTE4 ? 4 : 0 ) ) ); //计算传输字节数
+ uint8_t ptx0;
+ uint32_t temp32 ;
+
+
+ //断言,检测传递进来参数是否正确
+ ASSERT( //用断言检测 源地址和每次传输字节数是否正确
+ ( (byten == DMA_BYTE1) //传输一个字节
+ && ( (SADDR >= &PTA_B0_IN) && (SADDR <= ( &PTE_B3_IN )))
+ )
+
+ || ( (byten == DMA_BYTE2) //传输两个字节(注意,不能跨端口)
+ && ( (SADDR >= &PTA_B0_IN)
+ && (SADDR <= ( &PTE_W1_IN ))
+ && (((uint32)SADDR & 0x03) != 0x03) ) //保证不跨端口
+ )
+
+ || ( (byten == DMA_BYTE4) //传输四个字节
+ && ((SADDR >= &PTA_B0_IN) && (SADDR <= ( &PTE_B0_IN )))
+ && (((uint32)SADDR & 0x03) == 0x00) //保证不跨端口
+ )
+ );
+
+ ASSERT(count < 0x8000); //断言,最大只支持0x7FFF
+
+ //DMA 寄存器 配置
+
+ /* 开启时钟 */
+ SIM_SCGC6 |= SIM_SCGC6_DMAMUX_MASK; //打开DMA多路复用器时钟
+ SIM_SCGC7 |= SIM_SCGC7_DMA_MASK; //打开DMA模块时钟
+
+
+
+
+ DMAMUX0_CHCFG(CHn)=0x00;
+ DMA_DSR_BCR(CHn)|=DMA_DSR_BCR_DONE_MASK;
+
+ /* 配置 DMA 通道 的 传输控制块 TCD ( Transfer Control Descriptor ) */
+ DMA_SAR(CHn) = (uint32)SADDR; // 设置 源地址
+ DMA_DSR_BCR(CHn) =(0
+ | DMA_DSR_BCR_BCR(count) //传输数目
+ );
+ DMA_DAR(CHn) = (uint32)DADDR; // 设置目的地址
+ DMA_DCR(CHn) = (0
+ | DMA_DCR_SSIZE(byten)
+ | DMA_DCR_DSIZE(byten)
+ //| DMA_DCR_SINC_MASK //传输后源地址增加(根据位宽)
+ | DMA_DCR_DINC_MASK //传输后目的地址增加(根据位宽)
+ | DMA_DCR_CS_MASK // 0为不停得传输,直到BCR为0;1为一次请求传输一次
+ //| DMA_DCR_START_MASK //软件触发传输
+ | DMA_DCR_ERQ_MASK //硬件触发传输(与上面START二选一)
+ | DMA_DCR_D_REQ_MASK //传输完成后硬件自动清ERQ
+ | DMA_DCR_EADREQ_MASK
+ );
+
+
+
+ /* 配置 DMA 触发源 */
+
+ DMAMUX_CHCFG_REG(DMAMUX0_BASE_PTR, CHn) = (0
+ // | DMAMUX_CHCFG_ENBL_MASK /* Enable routing of DMA request */
+ //| DMAMUX_CHCFG_TRIG_MASK /* Trigger Mode: Periodic PIT周期触发传输模式 通道1对应PIT1,必须使能PIT1,且配置相应的PIT定时触发 */
+ |DMAMUX_CHCFG_SOURCE(DMA_PORTA)
+ //| DMAMUX_CHCFG_SOURCE( PTX(ptxn) + DMA_PORTA) /* 通道触发传输源: */
+ );
+
+ //配置触发源(默认是 上升沿触发)
+ temp32 = ALT1 | DMA_FALLING;
+ gpio_init(ptxn, GPI, 0); //设置为输入
+ port_init(ptxn, temp32);
+
+
+ /* 配置输入源 */
+ ptx0 = ((((uint32)SADDR) & 0x1C0) / 0x40 ) * 32;
+ n = (uint8)(((uint32)SADDR - ((uint32)(&PTA_BYTE0_IN))) & 0x3f) * 8; //最小的引脚号
+ ptx0 += n;
+ tmp = ptx0 + (BYTEs * 8 ) - 1; //最大的引脚号
+ while(ptx0 <= tmp)
+ {
+ //这里加入 GPIO 初始化为输入
+ gpio_init((PTxn )ptx0, GPI, 0); //设置为输入
+ port_init((PTxn )ptx0 , ALT1 | PULLDOWN ); //输入源应该下拉,默认读取到的是0
+
+ ptx0 ++;
+ }
+
+ DMA_DIS(CHn); //禁止通道CHn 硬件请求
+ //DMA_IRQ_CLEAN(CHn);
+ /* 开启中断 */
+ //DMA_EN(CHn); //使能通道CHn 硬件请求
+ //DMA_IRQ_EN(CHn); //允许DMA通道传输
+}
diff --git a/plan_manage_main/src/drivers/gpio.c b/plan_manage_main/src/drivers/gpio.c
new file mode 100644
index 0000000..5d96744
--- /dev/null
+++ b/plan_manage_main/src/drivers/gpio.c
@@ -0,0 +1,138 @@
+/******************** (C) COPYRIGHT 2011 蓝宙电子工作室 ********************
+* 文件名 : gpio.c
+* 描述 :工程模版实验
+*
+* 实验平台 :landzo电子开发版
+* 库版本 :
+* 嵌入系统 :
+*
+* 作者 :landzo 蓝电子
+* 淘宝店 :http://landzo.taobao.com/
+
+**********************************************************************************/
+#include "gpio.h" //包含本构件头文件
+
+//各端口基地址放入常数数据组PORTX[0]~PORTX[4]中
+volatile struct PORT_MemMap *PORTX[5]={PORTA_BASE_PTR,PORTB_BASE_PTR,
+PORTC_BASE_PTR,PORTD_BASE_PTR,PORTE_BASE_PTR};
+//GPIO口基地址放入常数数据组GPIOx[0]~GPIOx[4]中
+volatile struct GPIO_MemMap *GPIOx[5]={PTA_BASE_PTR,PTB_BASE_PTR,
+PTC_BASE_PTR,PTD_BASE_PTR,PTE_BASE_PTR};
+
+/*************************************************************************
+* 蓝宙电子科技有限公司
+*
+* 函数名称:gpio_Interrupt_init
+* 功能说明:初始化gpio
+* 参数说明:PTxn 端口号(PORTA,PORTD)
+* IO 引脚方向,0=输入,1=输出,输入输出状态定义____________(修改:这个函数中只有定义为输入模式有效,否则不改变相关状态)
+* mode 中断模式
+* 函数返回:无
+* 修改时间:2012-9-15 已测试
+* 备 注:
+*************************************************************************/
+void gpio_Interrupt_init(PTxn ptxn, GPIO_CFG cfg, GPIO_INP mode)
+{
+ ASSERT( (PTn(ptxn) < 32u) ); //使用断言检查输入、电平 是否为1bit
+
+ //选择功能脚 PORTx_PCRx ,每个端口都有个寄存器 PORTx_PCRx
+
+ PORT_PCR_REG(PORTX_BASE(ptxn), PTn(ptxn)) = (0 | PORT_PCR_MUX(1) | cfg | PORT_PCR_IRQC(mode) );
+ //选择功能脚 PORTx_PCRx ,每个端口都有中断模型
+
+// PORT_DFER_REG(PORTX_BASE(ptxn)) = PORT_DFER_DFE( 1<= ErrTime)
+// return 1; //超时,没有收到应答信号或发送完一个字节
+// return 0;
+//}
+////============================================================================
+////函数名称:iic_read1
+////功能概要:从从机读1个字节数据
+////参数说明: i2cn:模块号
+//// DeviceAddr:设备地址
+//// AccessAddr:访问地址
+//// Data:带回收到的一个字节数据
+////函数返回:为0,成功读一个字节;为1,读一个字节失败
+////函数说明: 内部调用 send_signal,wait
+////============================================================================
+//uint8_t iic_read1(I2Cn i2cn,uint8_t DeviceAddr, uint8_t AccessAddr, uint8_t *Data)
+//{
+//
+// I2C_C1_REG(I2Cx[i2cn]) |= 0x10; //TX = 1,MCU设置为发送模式
+// send_signal(i2cn, 'S'); //发送开始信号
+// I2C_D_REG(I2Cx[i2cn]) = DeviceAddr & 0xfe; //发送设备地址,并通知从机接收数据
+//
+// if (waitflag(i2cn, 'T')) //等待一个字节数据传送完成
+// {
+//
+// return 1; //没有传送成功,读一个字节失败
+// }
+// if (waitflag(i2cn, 'A')) //等待从机应答信号
+// {
+//
+// return 1; //没有等到应答信号,读一个字节失败
+// }
+// I2C_D_REG(I2Cx[i2cn]) = AccessAddr; //发送访问地址
+// if (waitflag(i2cn, 'T')) //等待一个字节数据传送完成
+// {
+//
+// return 1; //没有传送成功,读一个字节失败
+// }
+// if (waitflag(i2cn, 'A')) //等待从机应答信号
+// {
+//
+// return 1; //没有等到应答信号,读一个字节失败
+// }
+// I2C_C1_REG(I2Cx[i2cn]) |= 0x04;//当MCU在主机模 式下,向该位写1将产生一个重新开始信号
+// I2C_D_REG(I2Cx[i2cn]) = DeviceAddr | 0x01; //通知从机改为发送数据
+// if (waitflag(i2cn, 'T')) //等待一个字节数据传送完成
+// {
+//
+// return 1; //没有传送成功,读一个字节失败
+// }
+// if (waitflag(i2cn, 'A')) //等待从机应答信号
+// {
+//
+// return 1; //没有等到应答信号,读一个字节失败
+// }
+// I2C_C1_REG(I2Cx[i2cn]) &= 0xef; //TX = 0,MCU设置为接收模式
+// *Data = I2C_D_REG(I2Cx[i2cn]); //读出IIC1D,准备接收数据
+// if (waitflag(i2cn, 'T')) //等待一个字节数据传送完成
+// {
+//
+// return 1; //没有传送成功,读一个字节失败
+// }
+// send_signal(i2cn, 'O'); //发送停止信号
+// *Data = I2C_D_REG(I2Cx[i2cn]); //读出接收到的一个数据
+//
+// return 0; //正确接收到一个字节数据
+//
+//
+//}
+//
+////============================================================================
+////函数名称:iic_write1
+////功能概要:向从机写1个字节数据
+////参数说明: i2cn:模块号
+//// DeviceAddr:设备地址
+//// AccessAddr:访问地址
+//// Data:要发给从机的1个字节数据
+////函数返回:为0,成功写一个字节;为1,写一个字节失败
+////函数说明: 内部调用 send_signal,wait
+////============================================================================
+//
+//uint8_t iic_write1(I2Cn i2cn,uint8_t DeviceAddr, uint8_t AccessAddr, uint8_t Data)
+//{
+//
+// I2C_C1_REG(I2Cx[i2cn]) |= 0x10; //TX = 1,MCU设置为发送模式
+// send_signal(i2cn, 'S'); //发送开始信号
+// I2C_D_REG(I2Cx[i2cn]) = DeviceAddr & 0xfe; //发送设备地址,并通知从机接收数据
+// if (waitflag('T',i2cn)) //等待一个字节数据传送完成
+// return 1; //没有传送成功,写一个字节失败
+// if (waitflag('A',i2cn)) //等待从机应答信号
+// return 1; //没有等到应答信号,写一个字节失败
+// I2C_D_REG(I2Cx[i2cn]) = AccessAddr; //发送访问地址
+// if (waitflag('T',i2cn)) //等待一个字节数据传送完成
+// return 1; //没有传送成功,写一个字节失败
+// if (waitflag('A',i2cn)) //等待从机应答信号
+// return 1; //没有等到应答信号,写一个字节失败
+// I2C_D_REG(I2Cx[i2cn]) = Data; //写数据
+// if (waitflag('T',i2cn)) //等待一个字节数据传送完成
+// return 1; //没有传送成功,写一个字节失败
+// if (waitflag('A',i2cn)) //等待从机应答信号
+// return 1; //没有等到应答信号,写一个字节失败
+// send_signal('O',i2cn); //发送停止信号
+// return 0;
+//}
+////============================================================================
+////函数名称: iic_readn
+////功能概要: 从从机读N个字节数据
+////参数说明: i2cn:模块号
+//// DeviceAddr:设备地址
+//// AccessAddr:访问地址
+//// Data:读出数据的缓冲区
+//// N:从从机读的字节个数
+////函数返回: 为0,成功读N个字节;为1,读N个字节失败
+////函数说明: 内部调用iic_read1
+////============================================================================
+//uint8_t iic_readn(I2Cn i2cn,uint8_t DeviceAddr, uint8_t AccessAddr, uint8_t Data[], uint8_t N)
+//{
+// uint16_t i, j;
+// for (i = 0;i < N;i++)
+// {
+// for(j = 0;j <15*40 ;j++); //最小延时(发送的每个字节之间要有时间间隔)
+// if (iic_read1(i2cn,DeviceAddr, AccessAddr + i, &Data[i]))
+// return 1; //其中一个字节没有接收到,返回失败标志:1
+// }
+// if (i >= N)
+// return 0; //成功接收N个数据,返回成功标志:0
+//}
+//
+//
+////============================================================================
+////函数名称: iic_writen
+////功能概要: 向从机写N个字节数据
+////参数说明: i2cn:模块号
+//// DeviceAddr:设备地址
+//// AccessAddr:访问地址
+//// Data:要写入的数据
+//// N:从从机读的字节个数
+////函数返回: 为0,成功写N个字节;为1,写N个字节失败
+////函数说明: 内部调用iic_write1
+////============================================================================
+//uint8_t iic_writen(I2Cn i2cn,uint8_t DeviceAddr, uint8_t AccessAddr,uint8_t Data[], uint8_t N)
+//{
+// uint16_t i, j;
+// for (i = 0;i < N;i++)
+// {
+// for(j = 0;j < 15*40;j++); //最小延时(发送的每个字节之间要有时间间隔)
+// if (iic_write1(i2cn,DeviceAddr, AccessAddr + i, Data[i]))
+// return 1; //其中一个字节没有发送出去,返回失败标志:1
+// }
+// if (i >= N)
+// return 0; //成功发送N个数据,返回成功标志:0
+//}
+//
diff --git a/plan_manage_main/src/drivers/lptmr.c b/plan_manage_main/src/drivers/lptmr.c
new file mode 100644
index 0000000..e89a213
--- /dev/null
+++ b/plan_manage_main/src/drivers/lptmr.c
@@ -0,0 +1,168 @@
+/******************** (C) COPYRIGHT 2011 蓝宙电子工作室 ********************
+* 文件名 : lptmr.c
+* 描述 :工程模版实验
+*
+* 实验平台 :landzo电子开发版
+* 库版本 :
+* 嵌入系统 :
+*
+* 作者 :landzo 蓝电子
+* 淘宝店 :http://landzo.taobao.com/
+
+**********************************************************************************/
+#include "lptmr.h"
+
+
+/*************************************************************************
+* 蓝宙电子工作室
+*
+* 函数名称:lptmr_internal_ref_init
+* 功能说明:内部参考时钟初始化 采用快速内部参考时钟,1s中断一次
+* 参数说明:无
+* 函数返回:无
+* 修改时间:2014-9-18
+* 备 注:
+*************************************************************************/
+void lptmr_internal_ref_init()
+{
+ uint32_t compare_value=1953;
+ MCG_C1|=MCG_C1_IRCLKEN_MASK; //使能内部参考时钟
+ MCG_C2|=MCG_C2_IRCS_MASK; //MCG_C[IRCS]=1,使能快速内部参考时钟(4MHz)
+ MCG_SC |= MCG_SC_FCRDIV(0x00) ;
+ MCG_C1|=MCG_C1_IREFSTEN_MASK; //停止模式的时候内部时钟保持使能
+ SIM_SCGC5|=SIM_SCGC5_LPTMR_MASK; //使能LPT模块时钟
+
+ LPTMR0_PSR=LPTMR_PSR_PCS(0x00)|LPTMR_PSR_PRESCALE(0x09);//使用内部时钟,1024预分频
+ LPTMR0_CMR=LPTMR_CMR_COMPARE(compare_value); //设置比较寄存器值
+ LPTMR0_CSR&=(~LPTMR_CSR_TEN_MASK);
+ LPTMR0_CSR&=(~LPTMR_CSR_TFC_MASK);
+ LPTMR0_CSR&=(~LPTMR_CSR_TMS_MASK);
+ LPTMR0_CSR|=LPTMR_CSR_TEN_MASK; //开启LPT模块设置
+ LPTMR0_CSR|=LPTMR_CSR_TIE_MASK; //开启LPT定时器中断
+}
+
+/*************************************************************************
+* 蓝宙电子工作室
+*
+* 函数名称:lptmr_count_init
+* 功能说明:LPTMR脉冲计数初始化
+* 参数说明:LPT0_ALTn LPTMR脉冲计数管脚
+* count LPTMR脉冲比较值
+* LPT_CFG LPTMR脉冲计数方式:上升沿计数或下降沿计数
+* 函数返回:无
+* 修改时间:2014-9-18
+* 备 注:
+* Sample usage: lptmr_pulse_init(LPT0_ALT1,0xFFFF,LPT_Rising);
+* // LPTMR 脉冲捕捉,捕捉0xFFFF后触发中断请求(需要开中断才执行中断复位函数),上升沿捕捉
+*************************************************************************/
+void lptmr_counter_init(LPT0_ALTn altn, uint16_t count, LPT_CFG cfg)
+{
+
+ SIM_SCGC5 |= SIM_SCGC5_LPTMR_MASK; //使能LPT模块时钟
+
+ //设置输入管脚
+ if(altn == LPT0_ALT1)
+ {
+ port_init(PTA19, ALT6 ); //在PTA19上使用 ALT6
+ }
+ else if(altn == LPT0_ALT2)
+ {
+ port_init(PTC5, ALT3 ); //在PTC5上使用 ALT3
+ }
+ else //不可能发生事件
+ {
+ ASSERT((altn == LPT0_ALT1 ) || (altn == LPT0_ALT2 )); //设置管脚有误?
+ }
+
+ // 清状态寄存器
+ LPTMR0_CSR = 0x00 ; //先关了LPT,这样才能设置时钟分频,清空计数值等
+ LPTMR0_PSR = 0x00 ;
+ LPTMR0_CSR = 0x00 ;
+ LPTMR0_CMR = 0X00 ;
+
+ // 设置累加计数值
+ LPTMR0_CMR = LPTMR_CMR_COMPARE(count); //设置比较值
+
+ LPTMR0_PSR = (0
+ |LPTMR_PSR_PCS(0x00)
+ |LPTMR_PSR_PBYP_MASK
+ |LPTMR_PSR_PRESCALE(0x01));
+ // 管脚设置、使能中断
+
+ LPTMR0_CSR = (0
+ | LPTMR_CSR_TPS(altn) // 选择输入管脚 选择
+ | LPTMR_CSR_TMS_MASK // 选择脉冲计数 (注释了表示时间计数模式)
+ | ( cfg == LPT_Falling ? LPTMR_CSR_TPP_MASK : 0 ) //脉冲计数器触发方式选择:0为高电平有效,上升沿加1
+ //| LPTMR_CSR_TEN_MASK //使能LPT(注释了表示禁用)
+ //| LPTMR_CSR_TIE_MASK //中断使能
+ | LPTMR_CSR_TFC_MASK //0:计数值等于比较值就复位;1:溢出复位(注释表示0)
+ );
+
+ LPTMR0_CSR |= LPTMR_CSR_TEN_MASK ;
+ // LPTMR0_CNR = 0X03 ;
+}
+
+/*************************************************************************
+* 蓝宙电子工作室
+*
+* 函数名称:lptmr_pulse_get
+* 功能说明:获取LPTMR脉冲计数值
+* 参数说明:无
+* 函数返回:无
+* 修改时间:2014-9-18
+* 备 注: 读取LPTMR0_CNR数据,必须先写入,才可读读取
+* Sample usage: uint16_t data = lptmr_pulse_get(); //获取脉冲计数值
+*************************************************************************/
+uint16_t lptmr_pulse_get(void)
+{
+ uint16_t LPTCOUNT = 0 ;
+ LPTMR0_CNR = 12 ;
+ LPTCOUNT = LPTMR0_CNR ;
+ lptmr_pulse_clean();
+ return (uint16)LPTCOUNT;
+}
+
+
+/*************************************************************************
+* 蓝宙电子工作室
+*
+* 函数名称:lptmr_pulse_clean
+* 功能说明:清空LPTMR脉冲计数
+* 参数说明:无
+* 函数返回:无
+* 修改时间:2014-9-18
+* 作者 :野火工作室/landzo 蓝电子
+* 备 注:
+*************************************************************************/
+void lptmr_pulse_clean(void)
+{
+ LPTMR0_CSR &= ~LPTMR_CSR_TEN_MASK; //禁用LPT的时候就会自动清计数器的值
+ LPTMR0_CSR |= LPTMR_CSR_TEN_MASK;
+}
+
+
+//============================================================================
+//函数名称:enable_lptmr_int
+//函数返回:无
+//参数说明:无
+//功能概要:开启LPT定时器中断
+//============================================================================
+void enable_lptmr_int()
+{
+ //LPTMR0_CSR|=LPTMR_CSR_TIE_MASK; //开启LPT定时器中断
+ enable_irq(LPTMRLPTMR_irq); //开引脚的IRQ中断
+}
+
+//============================================================================
+//函数名称:disable_lptmr_int
+//函数返回:无
+//参数说明:无
+//功能概要:关闭LPT定时器中断
+//============================================================================
+void disable_lptmr_int()
+{
+ //LPTMR0_CSR &=~LPTMR_CSR_TIE_MASK; //禁止LPT定时器中断
+ disable_irq(LPTMRLPTMR_irq); //关引脚的IRQ中断
+}
+
+
diff --git a/plan_manage_main/src/drivers/mcg.c b/plan_manage_main/src/drivers/mcg.c
new file mode 100644
index 0000000..2f67bf3
--- /dev/null
+++ b/plan_manage_main/src/drivers/mcg.c
@@ -0,0 +1,367 @@
+/******************** (C) COPYRIGHT 2011蓝宙电子工作室 ********************
+ * 文件名 :mcg.c
+ * 描述 :工作时钟模式设置,锁相环。
+ * 备注 :官方例程上修改
+ *
+ * 实验平台 :
+ * 库版本 :
+ * 嵌入系统 :
+ *
+ * 作者 :
+ * 淘宝店 :http://landzo.taobao.com/
+**********************************************************************************/
+
+#include "common.h"
+#include "mcg.h"
+#include "mcg_cfg.h"
+
+//时钟参数,便于外部调用
+extern u32 core_clk_khz;
+extern u32 core_clk_mhz;
+extern u32 bus_clk_khz;
+
+//时钟分频因子
+struct mcg_div mcg_div = { PRDIV , VDIV , CORE_DIV , BUS_DIV , FLEX_DIV , FLASH_DIV }; //定义的同时,初始化
+
+
+/*************************************************************************
+* 蓝宙电子工作室
+*
+* 函数名称:pll_init
+* 功能说明:锁相环函数,用于设定频率。
+* 参数说明:crystal_val 晶体选项,这里没用到
+* 函数返回:无
+* 修改时间:2012-1-20
+* 备 注:根据 全局变量 mcg_div 保存的分频因子来分频
+*************************************************************************/
+#ifdef OSCILLATO_8
+unsigned char pll_init(clk_option opt)
+{
+ unsigned char pll_freq;
+
+ if(opt != PLLUSR ) //自定义模式,直接加载全局变量mcg_div的值
+ {
+ //设置MCG时钟
+ switch(opt)
+ {
+ case PLL48:
+ //mcg_div.prdiv = 24;
+ //mcg_div.vdiv = 0;
+ mcg_div.prdiv = 3;
+ mcg_div.vdiv = 0;
+ break;
+ case PLL50:
+ mcg_div.prdiv = 24;
+ mcg_div.vdiv = 1;
+ break;
+ case PLL80:
+ mcg_div.prdiv = 24;
+ mcg_div.vdiv = 16;
+ break;
+ case PLL96:
+ mcg_div.prdiv = 24;
+ mcg_div.vdiv = 24;
+ break;
+ case PLL100:
+ mcg_div.prdiv = 24;
+ mcg_div.vdiv = 26;
+ break;
+ case PLL110:
+ mcg_div.prdiv = 24;
+ mcg_div.vdiv = 31;
+ break;
+ case PLL120:
+ mcg_div.prdiv = 19;
+ mcg_div.vdiv = 24;
+ break;
+ case PLL125:
+ mcg_div.prdiv = 19;
+ mcg_div.vdiv = 26;
+ break;
+ case PLL130:
+ mcg_div.prdiv = 19;
+ mcg_div.vdiv = 28;
+ break;
+ case PLL140:
+ mcg_div.prdiv = 14;
+ mcg_div.vdiv = 18;
+ break;
+ case PLL150:
+ mcg_div.prdiv = 14;
+ mcg_div.vdiv = 21;
+ break;
+ case PLL160:
+ mcg_div.prdiv = 14;
+ mcg_div.vdiv = 24;
+ break;
+ case PLL170:
+ mcg_div.prdiv = 14;
+ mcg_div.vdiv = 27;
+ break;
+ case PLL180:
+ mcg_div.prdiv = 14;
+ mcg_div.vdiv = 30;
+ break;
+ case PLL200:
+ mcg_div.prdiv = 12;
+ mcg_div.vdiv = 28;
+ break;
+ case PLL225:
+ mcg_div.prdiv = 11;
+ mcg_div.vdiv = 30;
+ break;
+ case PLL250:
+ mcg_div.prdiv = 10;
+ mcg_div.vdiv = 31;
+ break;
+ default:
+ return pll_init(PLL100); //这情况不会发生。
+ }
+
+ //设置分频
+ mcg_div.core_div = 0; // core = MCG
+
+ /* 这里提示警告,但是安全的,是为了安全才故意添加进去 */
+ if (opt <= 1 * MAX_FLASH_CLK) mcg_div.flash_div = 0; // flash = MCG
+ else if(opt <= 2 * MAX_FLASH_CLK) mcg_div.flash_div = 1; // flash = MCG/2
+ else if(opt <= 3 * MAX_FLASH_CLK) mcg_div.flash_div = 2; // flash = MCG/3
+ else if(opt <= 4 * MAX_FLASH_CLK) mcg_div.flash_div = 3; // flash = MCG/4
+ else if(opt <= 5 * MAX_FLASH_CLK) mcg_div.flash_div = 4; // flash = MCG/5
+ else if(opt <= 6 * MAX_FLASH_CLK) mcg_div.flash_div = 5; // flash = MCG/6
+ else if(opt <= 7 * MAX_FLASH_CLK) mcg_div.flash_div = 6; // flash = MCG/7
+ else mcg_div.flash_div = 7; // flash = MCG/8
+
+ }
+ //pll_freq = (u8)(( (u16)50 * (u16)( mcg_div.vdiv + 24 )) / (u16)( mcg_div.prdiv + 1 ) ); (原) // 50/ ( prdiv +1 ) * ( mcg_div.vdiv + 24 )
+ pll_freq = (u8)(( (u16)8 * (u16)( mcg_div.vdiv + 24 )) / (u16)( mcg_div.prdiv + 1 ) );//(改)
+
+ //上电复位后,单片机会自动进入 FEI 模式,使用 内部参考时钟
+ //为了使用外部时钟参考源,我们要先进入 FBE 模式:
+#if (defined(K60_CLK) || defined(ASB817))
+ MCG_C2 = 0;
+#else
+ // Enable external oscillator, RANGE=2, HGO=1, EREFS=1, LP=0, IRCS=0
+ //MCG_C2 = MCG_C2_RANGE0(2) | MCG_C2_HGO0_MASK | MCG_C2_EREFS0_MASK;(原)
+ MCG_C2 = MCG_C2_RANGE0(1) &(~ MCG_C2_HGO0_MASK) | MCG_C2_EREFS0_MASK;//(改)
+#endif
+
+ //初始化晶振后释放锁定状态的振荡器和GPIO
+ // SIM_SCGC4 |= SIM_SCGC4_LLWU_MASK;
+ // LLWU_CS |= LLWU_CS_ACKISO_MASK;
+
+ // Select external oscilator and Reference Divider and clear IREFS to start ext osc
+ // CLKS=2, FRDIV=7, IREFS=0, IRCLKEN=0, IREFSTEN=0
+ //MCG_C1 = MCG_C1_CLKS(2) | MCG_C1_FRDIV(7);(原)
+ MCG_C1 = MCG_C1_CLKS(2) | MCG_C1_FRDIV(3);//(改)
+
+ /* if we aren't using an osc input we don't need to wait for the osc to init */
+//#if (!defined(Kl25_CLK) && !defined(ASB817))
+ while (!(MCG_S & MCG_S_OSCINIT0_MASK)) {}; //等待晶振稳定
+//#endif
+
+ while (MCG_S & MCG_S_IREFST_MASK) {}; // wait for Reference clock Status bit to clear
+
+ while (((MCG_S & MCG_S_CLKST_MASK) >> MCG_S_CLKST_SHIFT) != 0x2) {}; // Wait for clock status bits to show clock source is ext ref clk
+
+ //进入FBE模式 分频后结果必须在 :2 MHz ~ 4 MHz.
+ // n (n+1)分频 50M/(n+1) n为12~24之间
+ MCG_C5 = MCG_C5_PRDIV0(mcg_div.prdiv); // prdiv +1 分频 :2M
+
+ MCG_C6 = 0x0; // Ensure MCG_C6 is at the reset default of 0. LOLIE disabled, PLL disabled, clk monitor disabled, PLL VCO divider is clear
+
+ // 设置系统分频因子选项
+ //MCG=PLL, core = MCG/(mcg_div.core_div + 1), bus = MCG/(mcg_div.bus_div + 1),
+ //FlexBus = MCG/(mcg_div.flex_div + 1), Flash clock= MCG/(mcg_div.flash_div + 1)
+ // set clock dividers to desired value
+ SIM_CLKDIV1 = SIM_CLKDIV1_OUTDIV1(mcg_div.core_div) | SIM_CLKDIV1_OUTDIV4(mcg_div.flash_div);
+
+ // Set the VCO divider and enable the PLL for 48MHz, LOLIE=0, PLLS=1, CME=0, VDIV=0
+ // n (n+24)倍频 n为0~31之间
+ MCG_C6 = MCG_C6_PLLS_MASK | MCG_C6_VDIV0(mcg_div.vdiv) ; // mcg_div.vdiv + 1 倍频
+
+ while (!(MCG_S & MCG_S_PLLST_MASK)) {}; // wait for PLL status bit to set
+
+ while (!(MCG_S & MCG_S_LOCK0_MASK)) {}; // Wait for LOCK bit to set
+
+ // 现在已经进入了 PBE 模式
+
+ // Transition into PEE by setting CLKS to 0
+ // CLKS=0, FRDIV=3, IREFS=0, IRCLKEN=0, IREFSTEN=0
+ MCG_C1 &= ~MCG_C1_CLKS_MASK;
+
+ // Wait for clock status bits to update
+ while (((MCG_S & MCG_S_CLKST_MASK) >> MCG_S_CLKST_SHIFT) != 0x3) {};
+
+ // 现在已经进入了 PEE 模式
+
+ return pll_freq;
+} //pll_init
+
+
+#else
+unsigned char pll_init(clk_option opt)
+{
+ unsigned char pll_freq;
+
+ if(opt != PLLUSR ) //自定义模式,直接加载全局变量mcg_div的值
+ {
+ //设置MCG时钟
+ switch(opt)
+ {
+ case PLL48:
+ mcg_div.prdiv = 24;
+ mcg_div.vdiv = 0;
+ break;
+ case PLL50:
+ mcg_div.prdiv = 24;
+ mcg_div.vdiv = 1;
+ break;
+ case PLL80:
+ mcg_div.prdiv = 24;
+ mcg_div.vdiv = 16;
+ break;
+ case PLL96:
+ mcg_div.prdiv = 24;
+ mcg_div.vdiv = 24;
+ break;
+ case PLL100:
+ mcg_div.prdiv = 24;
+ mcg_div.vdiv = 26;
+ break;
+ case PLL110:
+ mcg_div.prdiv = 24;
+ mcg_div.vdiv = 31;
+ break;
+ case PLL120:
+ mcg_div.prdiv = 19;
+ mcg_div.vdiv = 24;
+ break;
+ case PLL125:
+ mcg_div.prdiv = 19;
+ mcg_div.vdiv = 26;
+ break;
+ case PLL130:
+ mcg_div.prdiv = 19;
+ mcg_div.vdiv = 28;
+ break;
+ case PLL140:
+ mcg_div.prdiv = 14;
+ mcg_div.vdiv = 18;
+ break;
+ case PLL150:
+ mcg_div.prdiv = 14;
+ mcg_div.vdiv = 21;
+ break;
+ case PLL160:
+ mcg_div.prdiv = 14;
+ mcg_div.vdiv = 24;
+ break;
+ case PLL170:
+ mcg_div.prdiv = 14;
+ mcg_div.vdiv = 27;
+ break;
+ case PLL180:
+ mcg_div.prdiv = 14;
+ mcg_div.vdiv = 30;
+ break;
+ case PLL200:
+ mcg_div.prdiv = 12;
+ mcg_div.vdiv = 28;
+ break;
+ case PLL225:
+ mcg_div.prdiv = 11;
+ mcg_div.vdiv = 30;
+ break;
+ case PLL250:
+ mcg_div.prdiv = 10;
+ mcg_div.vdiv = 31;
+ break;
+ default:
+ return pll_init(PLL100); //这情况不会发生。
+ }
+
+ //设置分频
+ mcg_div.core_div = 0; // core = MCG
+
+ /* 这里提示警告,但是安全的,是为了安全才故意添加进去 */
+ if (opt <= 1 * MAX_FLASH_CLK) mcg_div.flash_div = 0; // flash = MCG
+ else if(opt <= 2 * MAX_FLASH_CLK) mcg_div.flash_div = 1; // flash = MCG/2
+ else if(opt <= 3 * MAX_FLASH_CLK) mcg_div.flash_div = 2; // flash = MCG/3
+ else if(opt <= 4 * MAX_FLASH_CLK) mcg_div.flash_div = 3; // flash = MCG/4
+ else if(opt <= 5 * MAX_FLASH_CLK) mcg_div.flash_div = 4; // flash = MCG/5
+ else if(opt <= 6 * MAX_FLASH_CLK) mcg_div.flash_div = 5; // flash = MCG/6
+ else if(opt <= 7 * MAX_FLASH_CLK) mcg_div.flash_div = 6; // flash = MCG/7
+ else mcg_div.flash_div = 7; // flash = MCG/8
+
+ }
+ pll_freq = (u8)(( (u16)50 * (u16)( mcg_div.vdiv + 24 )) / (u16)( mcg_div.prdiv + 1 ) ); // 50/ ( prdiv +1 ) * ( mcg_div.vdiv + 24 )
+
+ //上电复位后,单片机会自动进入 FEI 模式,使用 内部参考时钟
+ //为了使用外部时钟参考源,我们要先进入 FBE 模式:
+#if (defined(K60_CLK) || defined(ASB817))
+ MCG_C2 = 0;
+#else
+ // Enable external oscillator, RANGE=2, HGO=1, EREFS=1, LP=0, IRCS=0
+ MCG_C2 = MCG_C2_RANGE0(2) | MCG_C2_HGO0_MASK | MCG_C2_EREFS0_MASK;
+#endif
+
+ //初始化晶振后释放锁定状态的振荡器和GPIO
+ // SIM_SCGC4 |= SIM_SCGC4_LLWU_MASK;
+ // LLWU_CS |= LLWU_CS_ACKISO_MASK;
+
+ // Select external oscilator and Reference Divider and clear IREFS to start ext osc
+ // CLKS=2, FRDIV=7, IREFS=0, IRCLKEN=0, IREFSTEN=0
+ MCG_C1 = MCG_C1_CLKS(2) | MCG_C1_FRDIV(7);
+
+ /* if we aren't using an osc input we don't need to wait for the osc to init */
+//#if (!defined(Kl25_CLK) && !defined(ASB817))
+ while (!(MCG_S & MCG_S_OSCINIT0_MASK)) {}; //等待晶振稳定
+//#endif
+
+ while (MCG_S & MCG_S_IREFST_MASK) {}; // wait for Reference clock Status bit to clear
+
+ while (((MCG_S & MCG_S_CLKST_MASK) >> MCG_S_CLKST_SHIFT) != 0x2) {}; // Wait for clock status bits to show clock source is ext ref clk
+
+ //进入FBE模式 分频后结果必须在 :2 MHz ~ 4 MHz.
+ // n (n+1)分频 50M/(n+1) n为12~24之间
+ MCG_C5 = MCG_C5_PRDIV0(mcg_div.prdiv); // prdiv +1 分频 :2M
+
+ MCG_C6 = 0x0; // Ensure MCG_C6 is at the reset default of 0. LOLIE disabled, PLL disabled, clk monitor disabled, PLL VCO divider is clear
+
+ // 设置系统分频因子选项
+ //MCG=PLL, core = MCG/(mcg_div.core_div + 1), bus = MCG/(mcg_div.bus_div + 1),
+ //FlexBus = MCG/(mcg_div.flex_div + 1), Flash clock= MCG/(mcg_div.flash_div + 1)
+ // set clock dividers to desired value
+ SIM_CLKDIV1 = SIM_CLKDIV1_OUTDIV1(mcg_div.core_div) | SIM_CLKDIV1_OUTDIV4(mcg_div.flash_div);
+
+ // Set the VCO divider and enable the PLL for 48MHz, LOLIE=0, PLLS=1, CME=0, VDIV=0
+ // n (n+24)倍频 n为0~31之间
+ MCG_C6 = MCG_C6_PLLS_MASK | MCG_C6_VDIV0(mcg_div.vdiv) ; // mcg_div.vdiv + 1 倍频
+
+ while (!(MCG_S & MCG_S_PLLST_MASK)) {}; // wait for PLL status bit to set
+
+ while (!(MCG_S & MCG_S_LOCK0_MASK)) {}; // Wait for LOCK bit to set
+
+ // 现在已经进入了 PBE 模式
+
+ // Transition into PEE by setting CLKS to 0
+ // CLKS=0, FRDIV=3, IREFS=0, IRCLKEN=0, IREFSTEN=0
+ MCG_C1 &= ~MCG_C1_CLKS_MASK;
+
+ // Wait for clock status bits to update
+ while (((MCG_S & MCG_S_CLKST_MASK) >> MCG_S_CLKST_SHIFT) != 0x3) {};
+
+ // 现在已经进入了 PEE 模式
+
+ return pll_freq;
+} //pll_init
+
+#endif
+
+
+
+
+
+
+
+
diff --git a/plan_manage_main/src/drivers/pit.c b/plan_manage_main/src/drivers/pit.c
new file mode 100644
index 0000000..91274e9
--- /dev/null
+++ b/plan_manage_main/src/drivers/pit.c
@@ -0,0 +1,186 @@
+/******************** (C) COPYRIGHT 2011 蓝宙电子工作室 ********************
+* 文件名 : adc.c
+* 描述 :工程模版实验
+*
+* 实验平台 :landzo电子开发版
+* 库版本 :
+* 嵌入系统 :
+*
+* 作者 :landzo 蓝电子
+* 淘宝店 :http://landzo.taobao.com/
+
+**********************************************************************************/
+#include "pit.h"
+
+
+//==========================================================================
+//函数名称: pit_init
+//函数返回: 无
+//参数说明: pitno:表示pit通道号,0,1。
+//功能概要: 设置相关寄存器的值
+//==========================================================================
+/*!
+ * @brief PITn定时中断
+ * @param PITn 模块号(PIT0~PIT3)
+ * @param cnt 定时中断时间(单位为bus时钟周期)
+ * @since v5.0
+ * Sample usage:
+ pit_init(PIT0, 1000); //定时 1000 个bus时钟 后中断
+ set_vector_handler(PIT0_VECTORn,pit_hander); // 设置中断复位函数到中断向量表里
+ enable_irq(PIT0_IRQn); // 使能LPTMR中断
+ */
+void pit_init(PITn pitn, uint32_t cnt)
+{
+ //PIT 用的是 Bus Clock 总线频率
+ //溢出计数 = 总线频率 * 时间
+
+ ASSERT( cnt > 0 ); //用断言检测 时间必须不能为 0
+
+ SIM_SCGC6 |= SIM_SCGC6_PIT_MASK; //使能PIT时钟
+
+ PIT_MCR = (0
+ //| PIT_MCR_MDIS_MASK //禁用PIT定时器时钟选择(0表示使能PIT,1表示禁止PIT)
+ //| PIT_MCR_FRZ_MASK //调试模式下停止运行(0表示继续运行,1表示停止运行)
+ );
+
+ PIT_LDVAL(pitn) = cnt - 1 ; //设置溢出中断时间
+
+ PIT_Flag_Clear(pitn); //清中断标志位
+
+ PIT_TCTRL(pitn) &= ~ PIT_TCTRL_TEN_MASK; //禁止PITn定时器(用于清空计数值)
+ PIT_TCTRL(pitn) = ( 0
+ | PIT_TCTRL_TEN_MASK //使能 PITn定时器
+ | PIT_TCTRL_TIE_MASK //开PITn中断
+ );
+
+ enable_irq(PIT_IRQn); //开中断
+}
+//==========================================================================
+//函数名称: enable_pit_int32_t
+//函数返回: 无
+//参数说明: 无
+//功能概要: 开PIT中断
+//==========================================================================
+void enable_pit_int()
+{
+ enable_irq(PIT_irq_no); //开接收引脚的IRQ中断
+}
+
+//==========================================================================
+//函数名称: disable_pit_int
+//函数返回: 无
+//参数说明: 无
+//功能概要: 关闭PIT中断
+//==========================================================================
+void disable_pit_int()
+{
+ disable_irq(PIT_irq_no); //关接收引脚的IRQ中断
+}
+
+/*!
+ * @brief PITn延时
+ * @param PITn 模块号(PIT0~PIT3)
+ * @param cnt 延时时间(单位为bus时钟周期)
+ * @since v5.0
+ * Sample usage:
+ pit_delay(PIT0, 1000); //延时 1000 个bus时钟
+ */
+void pit_delay(PITn pitn, uint32_t cnt)
+{
+ //PIT 用的是 Bus Clock 总线频率
+ //溢出计数 = 总线频率 * 时间
+
+ ASSERT( cnt > 0 ); //用断言检测 时间必须不能为 0
+
+ SIM_SCGC6 |= SIM_SCGC6_PIT_MASK; //使能PIT时钟
+
+ PIT_MCR &= ~(PIT_MCR_MDIS_MASK ); //使能PIT定时器时钟 ,调试模式下继续运行
+
+ PIT_TCTRL(pitn) &= ~( PIT_TCTRL_TEN_MASK ); //禁用PIT ,以便设置加载值生效
+
+ PIT_LDVAL(pitn) = cnt - 1; //设置溢出中断时间
+
+ PIT_Flag_Clear(pitn); //清中断标志位
+
+ PIT_TCTRL(pitn) &= ~ PIT_TCTRL_TEN_MASK; //禁止PITn定时器(用于清空计数值)
+ PIT_TCTRL(pitn) = ( 0
+ | PIT_TCTRL_TEN_MASK //使能 PITn定时器
+ //| PIT_TCTRL_TIE_MASK //开PITn中断
+ );
+
+ while( !(PIT_TFLG(pitn)& PIT_TFLG_TIF_MASK));
+
+ PIT_Flag_Clear(pitn); //清中断标志位
+
+ PIT_TCTRL(pitn) &= ~ PIT_TCTRL_TEN_MASK; //禁止(加)
+}
+
+/*!
+ * @brief PITn计时开始
+ * @param PITn 模块号(PIT0~PIT3)
+ * @since v5.0
+ * Sample usage:
+ pit_time_start(PIT0); //PIT0计时开始
+ */
+void pit_time_start(PITn pitn)
+{
+ //PIT 用的是 Bus Clock 总线频率
+ //溢出计数 = 总线频率 * 时间
+
+ SIM_SCGC6 |= SIM_SCGC6_PIT_MASK; //使能PIT时钟
+
+ PIT_MCR &= ~(PIT_MCR_MDIS_MASK | PIT_MCR_FRZ_MASK ); //使能PIT定时器时钟 ,调试模式下继续运行
+
+ PIT_TCTRL(pitn) &= ~( PIT_TCTRL_TEN_MASK ); //禁用PIT ,以便设置加载值生效
+
+ PIT_LDVAL(pitn) = ~0; //设置溢出中断时间
+
+ PIT_Flag_Clear(pitn); //清中断标志位
+
+ PIT_TCTRL(pitn) &= ~ PIT_TCTRL_TEN_MASK; //禁止PITn定时器(用于清空计数值)
+ PIT_TCTRL(pitn) = ( 0
+ | PIT_TCTRL_TEN_MASK //使能 PITn定时器
+ //| PIT_TCTRL_TIE_MASK //开PITn中断
+ );
+}
+
+/*!
+ * @brief 获取 PITn计时时间(超时时会关闭 定时器)
+ * @param PITn 模块号(PIT0~PIT3)
+ * @since v5.0
+ * Sample usage:
+ pit_time_get(PIT0); //获取 PITn计时时间
+ */
+uint32_t pit_time_get(PITn pitn)
+{
+ uint32_t val;
+
+ val = (~0) - PIT_CVAL(pitn);
+
+ if(PIT_TFLG(pitn)& PIT_TFLG_TIF_MASK) //判断是否时间超时
+ {
+ PIT_Flag_Clear(pitn); //清中断标志位
+ PIT_TCTRL(pitn) &= ~ PIT_TCTRL_TEN_MASK; //禁止PITn定时器(用于清空计数值)
+ return ~0;
+ }
+
+ if(val == (~0))
+ {
+ val--; //确保 不等于 ~0
+ }
+ return val;
+}
+
+/*!
+ * @brief 关闭 pit 计时
+ * @param PITn 模块号(PIT0~PIT3)
+ * @since v5.0
+ * Sample usage:
+ pit_time_get(PIT0); //获取 PITn计时时间
+ */
+void pit_time_close(PITn pitn)
+{
+ PIT_Flag_Clear(pitn); //清中断标志位
+ PIT_TCTRL(pitn) &= ~ PIT_TCTRL_TEN_MASK; //禁止PITn定时器(用于清空计数值)
+}
+
diff --git a/plan_manage_main/src/drivers/port.c b/plan_manage_main/src/drivers/port.c
new file mode 100644
index 0000000..c98f891
--- /dev/null
+++ b/plan_manage_main/src/drivers/port.c
@@ -0,0 +1,63 @@
+/******************** (C) COPYRIGHT 2011 蓝宙电子工作室 ********************
+* 文件名 : port.c
+* 描述 :工程模版实验
+*
+* 实验平台 :landzo电子开发版
+* 库版本 :
+* 嵌入系统 :
+*
+* 作者 :landzo 蓝电子
+* 淘宝店 :http://landzo.taobao.com/
+
+**********************************************************************************/
+#include "port.h"
+
+
+/*************************************************************************
+* 蓝宙电子工作室
+*
+* 函数名称:port_init
+* 功能说明:PORT初始化
+* 参数说明:ptxn 端口
+* cfg 端口属性配置,如触发选项和上拉下拉选项
+* 函数返回:无
+* 作者 :野火工作室\landzo 蓝电子
+* 修改时间:2014-9-18 已测试
+* 备 注:与port_init_NoALT不同的是,此函数需要配置 MUX 复用功能,
+* 否则 MUX = ALT0
+* Sample usage: port_init (PTA8, IRQ_RISING | PF | ALT1 | PULLUP );
+* //初始化 PTA8 管脚,上升沿触发中断,带无源滤波器,复用功能为GPIO ,上拉电阻
+*************************************************************************/
+void port_init(PTxn ptxn, uint32_t cfg )
+{
+ SIM_SCGC5 |= (SIM_SCGC5_PORTA_MASK << PTX(ptxn)); //开启PORTx端口
+
+ PORT_PCR_REG(PORTX_BASE(ptxn), PTn(ptxn)) = cfg; // 复用功能 , 确定触发模式 ,开启上拉或下拉电阻
+}
+
+/*************************************************************************
+* 蓝宙电子工作室
+*
+* 函数名称:port_init_NoALT
+* 功能说明:PORT初始化
+* 参数说明:ptxn 端口
+* cfg 端口属性配置,如触发选项和上拉下拉选项
+* 函数返回:无
+* 作者 :野火工作室\landzo 蓝电子
+* 修改时间:2014-9-18
+* 备 注:与port_init不同的是,此函数不需要配置 MUX 复用功能(即使配置了也不生效),
+* MUX 保留 为原先寄存器配置的值
+* Sample usage: port_init_NoALT (PTA8, IRQ_RISING | PF | PULLUP );
+* //初始化 PTA8 管脚,上升沿触发中断,带无源滤波器,保留原先复用功能,上拉电阻
+*************************************************************************/
+void port_init_NoALT(PTxn ptxn, uint32_t cfg)
+{
+ SIM_SCGC5 |= (SIM_SCGC5_PORTA_MASK << PTX(ptxn)); //开启PORTx端口
+
+ //清空cfg里的MUX,加载寄存器里的MUX
+ cfg &= ~PORT_PCR_MUX_MASK; //清了MUX 字段(即不需要配置ALT,保持原来的ALT)
+ cfg |= (PORT_PCR_REG(PORTX_BASE(ptxn), PTn(ptxn)) & PORT_PCR_MUX_MASK); //读取寄存器里配置的 MUX
+
+ PORT_PCR_REG(PORTX_BASE(ptxn), PTn(ptxn)) = cfg; // 复用功能 , 确定触发模式 ,开启上拉或下拉电阻
+}
+
diff --git a/plan_manage_main/src/drivers/rtc.c b/plan_manage_main/src/drivers/rtc.c
new file mode 100644
index 0000000..42d0f9a
--- /dev/null
+++ b/plan_manage_main/src/drivers/rtc.c
@@ -0,0 +1,59 @@
+//==========================================================================
+//文件名称:RTC.c
+//功能概要:KL25 RTC底层驱动程序源文件
+//版权所有:苏州大学飞思卡尔嵌入式中心(sumcu.suda.edu.cn)
+//版本更新:2013-3-23 V2.0 柏祥
+//==========================================================================
+#include "include.h"
+#include "rtc.h"
+
+//===============================================================
+//函数名称:hw_rtc_init
+//函数参数:SecendTimes:定时器秒寄存器的初始值
+//函数返回:无
+//功能概要:RTC驱动初始化
+//===============================================================
+void rtc_init(uint_32 seconds, uint_32 alarm)
+{
+ //时能RTC模块时钟
+ SIM_SCGC6 |= SIM_SCGC6_RTC_MASK;
+ //软件复位
+ disable_irq(RTC_alarm_irq_no);
+ disable_irq(RTC_second_irq_no);
+
+ RTC_CR = RTC_CR_SWR_MASK;
+ RTC_CR &= ~RTC_CR_SWR_MASK;
+
+ if (RTC_SR & RTC_SR_TIF_MASK)
+ {
+ RTC_TSR = 0x00000000;
+ }
+ RTC_TCR = RTC_TCR_CIR(0) | RTC_TCR_TCR(0);
+ //使能计数器
+ if (seconds >0)
+ {
+ enable_irq(RTC_second_irq_no);
+ //选择呢LPO作为RTC时钟源
+ SIM_SOPT1 |= SIM_SOPT1_OSC32KSEL(3);
+ RTC_IER |= RTC_IER_TSIE_MASK;
+ RTC_SR |= RTC_SR_TCE_MASK;
+ RTC_TSR = seconds;
+ }
+ else
+ {
+ RTC_IER &= ~RTC_IER_TSIE_MASK;
+ }
+ if (alarm >0)
+ {
+ RTC_IER |= RTC_IER_TAIE_MASK;
+ RTC_SR |= RTC_SR_TCE_MASK;
+ RTC_TAR = alarm;
+ enable_irq(RTC_alarm_irq_no);
+ //选择呢LPO作为RTC时钟源
+ SIM_SOPT1 |= SIM_SOPT1_OSC32KSEL(3); //选择LPO 1khz作为时钟输入
+ }
+ else
+ {
+ RTC_IER &= ~RTC_IER_TAIE_MASK;
+ }
+}
diff --git a/plan_manage_main/src/drivers/systick.c b/plan_manage_main/src/drivers/systick.c
new file mode 100644
index 0000000..e9e1b37
--- /dev/null
+++ b/plan_manage_main/src/drivers/systick.c
@@ -0,0 +1,118 @@
+/******************** (C) COPYRIGHT 2011 蓝宙电子工作室 ********************
+* 文件名 : adc.c
+* 描述 :工程模版实验
+*
+* 实验平台 :landzo电子开发版
+* 库版本 :
+* 嵌入系统 :
+*
+* 作者 :landzo 蓝电子
+* 淘宝店 :http://landzo.taobao.com/
+
+**********************************************************************************/
+#include "systick.h"
+
+// 创建系统滴答计数变量
+uint32_t systicks;
+uint32_t timecount = 0;
+extern uint8_t time[3]; //记录时间的数组
+//===========================================================================
+//函数名称:systick_init
+//函数返回:无
+//参数说明:core_clk_hz:内核时钟频率
+// ticks_per_sec:滴答频率,以Hz为单位。
+//功能概要:初始化ARM Cortex-M处理器内核的SysTick模块作为系统滴答时钟。
+//===========================================================================
+void systick_init(uint32_t core_clk_hz, uint32_t ticks_per_sec)
+{
+ // 初始化系统滴答计数值
+ systicks = 0;
+ // 关闭SYSTICK
+ SYST_CSR = 0;
+ // 清除当前值计数器
+ SYST_CVR = 0;
+ // 设定倒计时计数值
+ SYST_RVR = core_clk_hz / ticks_per_sec - 1;
+ // 设定 SysTick优先级
+ SCB_SHPR3 |= SCB_SHPR3_PRI_15(1);
+ // 使用内核时钟,倒计时到0时产生SYSTICK中断,使能SYSTICK
+ SYST_CSR = 7;
+}
+
+
+//===========================================================================
+//函数名称:SecAdd1
+//函数返回:无
+//参数说明:*p:计数变量的首地址
+//功能概要:以秒为最小单位递增时,分,秒缓冲区的值(00:00:00-23:59:59)
+//===========================================================================
+void SecAdd1(uint8_t *p)
+{
+ *(p+2) += 1; //秒加1
+ if (*(p+2) >= 60) //秒溢出
+ {
+ *(p+2) = 0; //清秒
+ *(p+1) += 1; //分加1
+ if (*(p+1) >= 60) //分溢出
+ {
+ *(p+1) = 0; //清时
+ *p += 1; //时加1
+ if (*p >= 24) //时溢出
+ *p = 0; //清时
+ }
+ }
+}
+//===========================================================================
+//函数名称:systick_trim
+//函数返回:无
+//参数说明:flag: 0表示慢,1表示快
+// trim_sec:每一分钟的秒数之差
+//功能概要:校准systick,如果每分钟慢一秒,SYST_RVR就减少48M/6000=8000
+// 如果每分钟快一秒,SYST_RVR就增加48M/6000=8000
+//===========================================================================
+void systick_trim(uint32_t core_clk_hz,uint32_t ticks_per_sec, uint32_t flag, uint32_t trim_sec)
+{
+ // 初始化系统滴答计数值
+ systicks = 0;
+ // 关闭SYSTICK
+ SYST_CSR = 0;
+ // 清除当前值计数器
+ SYST_CVR = 0;
+ // 设定倒计时计数值
+ if(0 == flag)
+ {
+ SYST_RVR = core_clk_hz / ticks_per_sec - 1 - 8000*trim_sec;
+ }
+ else
+ {
+ SYST_RVR = core_clk_hz / ticks_per_sec - 1 + 8000*trim_sec;
+ }
+ // 设定 SysTick优先级
+ SCB_SHPR3 |= SCB_SHPR3_PRI_15(1);
+ // 使用内核时钟,倒计时到0时产生SYSTICK中断,使能SYSTICK
+ SYST_CSR = 7;
+}
+
+//===========================================================================
+//函数名称:systick_isr
+//函数返回:无
+//参数说明:无
+//功能概要:SysTick定时器中断服务例程,更新系统滴答计数变量值。
+//===========================================================================
+void systick_isr(void)
+{
+ if (systicks >= 0xFFFFFFFF)
+ {
+ systicks = 0;
+ }
+ else
+ {
+ systicks++;
+ }
+ timecount++;
+ if(timecount > 99)
+ {
+ timecount = 0;
+ SecAdd1(time); //1s到,递增时,分,秒缓冲区的值
+ }
+}
diff --git a/plan_manage_main/src/drivers/tick_timer.c b/plan_manage_main/src/drivers/tick_timer.c
new file mode 100644
index 0000000..15e8f64
--- /dev/null
+++ b/plan_manage_main/src/drivers/tick_timer.c
@@ -0,0 +1,64 @@
+//===========================================================================
+//文件名称:tick_timer.c
+//功能概要:滴答定时器构件源文件
+//版权所有:苏州大学飞思卡尔嵌入式中心(sumcu.suda.edu.cn)
+//更新记录:2013-01-29 V1.0
+//===========================================================================
+
+#include "tick_timer.h"
+
+//===========================================================================
+//函数名称:tick_timer_start
+//函数返回:无
+//参数说明:timer_ptr:软件定时器指针
+// time_off:设定延时时间长度,以滴答为单位
+//功能概要:启动软件定时器并指定延时时间长度
+//===========================================================================
+void tick_timer_start(TICKS_TIMER_PTR timer_ptr, uint_32 time_off)
+{
+ timer_ptr->FLAG = 1;
+ timer_ptr->LAST_TICK = systicks;
+ timer_ptr->TIME_OFF = time_off;
+}
+
+//===========================================================================
+//函数名称:tick_timer_is_out
+//函数返回:定时器超时标识
+// TRUE(1) - 定时时间到; FALSE(0) - 定时时间未到
+//参数说明:timer_ptr:软件定时器指针
+//功能概要:查看延时时刻是否到来
+//===========================================================================
+uint_8 tick_timer_is_out(TICKS_TIMER_PTR timer_ptr)
+{
+ uint_8 bRet = 0;
+ uint_32 tmp = timer_ptr->LAST_TICK + timer_ptr->TIME_OFF;
+
+ if (timer_ptr->FLAG)
+ {
+ if(timer_ptr->LAST_TICK > systicks) //TICKS已回头
+ {
+ tmp = 0xFFFFFFFF - timer_ptr->LAST_TICK + systicks;
+ if(tmp >= timer_ptr->TIME_OFF)
+ {
+ bRet = 1;
+ }
+ }
+ else if(tmp <= systicks)
+ {
+ bRet = 1;
+ }
+ } // end_if
+
+ return bRet;
+}
+
+//===========================================================================
+//函数名称:tick_timer_stop
+//函数返回:无
+//参数说明:timer_ptr:软件定时器指针
+//功能概要:停用软件定时器
+//===========================================================================
+void tick_timer_stop(TICKS_TIMER_PTR timer_ptr)
+{
+ timer_ptr->FLAG = 0;
+}
diff --git a/plan_manage_main/src/drivers/tpm.c b/plan_manage_main/src/drivers/tpm.c
new file mode 100644
index 0000000..986a9a9
--- /dev/null
+++ b/plan_manage_main/src/drivers/tpm.c
@@ -0,0 +1,506 @@
+/******************** (C) COPYRIGHT 2011 蓝宙电子工作室 ********************
+* 文件名 : adc.c
+* 描述 :工程模版实验
+*
+* 实验平台 :landzo电子开发版
+* 库版本 :
+* 嵌入系统 :
+*
+* 作者 :landzo 蓝电子
+* 淘宝店 :http://landzo.taobao.com/
+
+**********************************************************************************/
+#include "tpm.h"
+
+/*
+ * 定义数组
+ */
+
+TPM_MemMapPtr TPMN[3] = {TPM0_BASE_PTR, TPM1_BASE_PTR, TPM2_BASE_PTR}; //定义三个指针数组保存 TPMn_e 的地址
+
+//=========================================================================
+//函数名称:tpm_enable_int
+//功能概要:使能tpm模块中断。
+//参数说明:tpmModule:模块号:0、1、2
+//函数返回:无
+//=========================================================================
+void TPM_Enable_int(uint8_t tpmModule)
+{
+ enable_irq(tpm0_irq_no + tpmModule);
+}
+//=========================================================================
+//函数名称:tpm_disable_int
+//功能概要:禁止tpm模块初始化。
+//参数说明:tpmModule:模块号:0、1、2
+//函数返回:无
+//=========================================================================
+void TPM_Disable_int(uint8_t tpmModule)
+{
+ disable_irq(tpm0_irq_no + tpmModule);
+}
+//=========================================================================
+//函数名称:tpm_init
+//功能概要:初始化tpm模块。
+//参数说明:
+//函数返回:函数执行状态:0=正常;非0=异常
+//=========================================================================
+void tpm_port_mux(TPMn_e tpmn, TPM_CHn_e ch)
+{
+ switch(tpmn)
+ {
+ case TPM0:
+ SIM_SCGC6 |= SIM_SCGC6_TPM0_MASK; //使能TPM0时钟
+ switch(ch)
+ {
+ case TPM_CH0:
+ if((TPM0_CH0_PIN == PTC1) || (TPM0_CH0_PIN == PTD0) )
+ {
+ port_init(TPM0_CH0_PIN, ALT4);
+ }
+ else if((TPM0_CH0_PIN == PTE24) || (TPM0_CH0_PIN == PTA3) )
+ {
+ port_init(TPM0_CH0_PIN, ALT3);
+ }
+ else
+ {
+ ASSERT(0); //设置管脚有误?
+ }
+ break;
+
+ case TPM_CH1:
+ if((TPM0_CH1_PIN == PTC2) || (TPM0_CH1_PIN == PTD1))
+ {
+ port_init(TPM0_CH1_PIN, ALT4);
+ }
+ else if((TPM0_CH1_PIN == PTA4) || (TPM0_CH1_PIN == PTE25) )
+ {
+ port_init(TPM0_CH1_PIN, ALT3);
+ }
+ else
+ {
+ ASSERT(0); //设置管脚有误?
+ }
+ break;
+
+ case TPM_CH2:
+ if((TPM0_CH2_PIN == PTC3) || (TPM0_CH2_PIN == PTD2) )
+ {
+ port_init(TPM0_CH2_PIN, ALT4);
+ }
+ else if((TPM0_CH2_PIN == PTA5) || (TPM0_CH2_PIN == PTE29) )
+ {
+ port_init(TPM0_CH2_PIN, ALT3);
+ }
+ else
+ {
+ ASSERT(0); //设置管脚有误?
+ }
+ break;
+
+ case TPM_CH3:
+ if((TPM0_CH3_PIN == PTC4) || (TPM0_CH3_PIN == PTD3) )
+ {
+ port_init(TPM0_CH3_PIN, ALT4);
+ }
+ else if((TPM0_CH3_PIN == PTA6) || (TPM0_CH3_PIN == PTE30))
+ {
+ port_init(TPM0_CH3_PIN, ALT3);
+ }
+ else
+ {
+ ASSERT(0); //设置管脚有误?
+ }
+ break;
+
+ case TPM_CH4:
+ if(TPM0_CH4_PIN == PTD4)
+ {
+ port_init(TPM0_CH4_PIN, ALT4);
+ }
+ else if((TPM0_CH4_PIN == PTC8) || (TPM0_CH4_PIN == PTA7) || (TPM0_CH4_PIN == PTE31) )
+ {
+ port_init(TPM0_CH4_PIN, ALT3);
+ }
+ else
+ {
+ ASSERT(0); //设置管脚有误?
+ }
+ break;
+
+ case TPM_CH5:
+ if(TPM0_CH5_PIN == PTD5)
+ {
+ port_init(TPM0_CH5_PIN, ALT4);
+ }
+ else if((TPM0_CH5_PIN == PTA0) || (TPM0_CH5_PIN == PTC9) || (TPM0_CH5_PIN == PTE26) )
+ {
+ port_init(TPM0_CH5_PIN, ALT3);
+ }
+ else
+ {
+ ASSERT(0); //设置管脚有误?
+ }
+ break;
+
+ default:
+ return;
+ }
+ break;
+
+ case TPM1:
+ SIM_SCGC6 |= SIM_SCGC6_TPM1_MASK; //使能TPM1时钟
+ switch(ch)
+ {
+ case TPM_CH0:
+ if((TPM1_CH0_PIN == PTE20) || (TPM1_CH0_PIN == PTA12) || (TPM1_CH0_PIN == PTB0) )
+ {
+ port_init(TPM1_CH0_PIN, ALT3);
+ }
+ else
+ {
+ ASSERT(0); //设置管脚有误?
+ }
+ break;
+
+
+ case TPM_CH1:
+ if((TPM1_CH1_PIN == PTE21) || (TPM1_CH1_PIN == PTA13) || (TPM1_CH1_PIN == PTB1) )
+ {
+ port_init(TPM1_CH1_PIN, ALT3);
+ }
+ else
+ {
+ ASSERT(0); //设置管脚有误?
+ }
+ break;
+
+ default:
+ return;
+ }
+ break;
+
+ case TPM2:
+ SIM_SCGC6 |= SIM_SCGC6_TPM2_MASK; //使能TPM2时钟
+ switch(ch)
+ {
+ case TPM_CH0:
+ if((TPM2_CH0_PIN == PTA1) || (TPM2_CH0_PIN == PTB2) || (TPM2_CH0_PIN == PTB18) || (TPM2_CH0_PIN == PTE22) )
+ {
+ port_init(TPM2_CH0_PIN, ALT3);
+ }
+ else
+ {
+ ASSERT(0); //设置管脚有误?
+ }
+ break;
+
+ case TPM_CH1:
+ if((TPM2_CH1_PIN == PTA2) || (TPM2_CH1_PIN == PTB3)|| (TPM2_CH1_PIN == PTB19)|| (TPM2_CH1_PIN == PTE23))
+ {
+ port_init(TPM2_CH1_PIN, ALT3);
+ }
+ else
+ {
+ ASSERT(0); //设置管脚有误?
+ }
+ break;
+
+ default:
+ return;
+ }
+ break;
+ default:
+ break;
+ }
+}
+
+
+
+
+/*!
+ * @brief 初始化TPM 的PWM 功能
+ * @param TPMn_e 模块号(TPM0、 TPM1、 TPM2)
+ * @param TPM_CHn_e 通道号(CH0~CH7)
+ * @param freq 频率(单位为Hz)
+ * @param duty 占空比分子,占空比 = duty / TPMn_PRECISON
+ * @since v5.0
+ * 作者 :野火工作室
+ * @note 同一个TPM,PWM频率是必须一样的,但占空比可不一样。共3个TPM,即可以输出3个不同频率PWM
+ * Sample usage: TPM_PWM_init(TPM0, TPM_CH6,200, 10); //初始化 TPM0_CH6 为 频率 200Hz 的PWM,占空比为 10/TPM0_PRECISON
+ */
+void TPM_PWM_init(TPMn_e tpmn, TPM_CHn_e ch, uint32_t freq, uint32_t duty)
+{
+ uint32 clk_hz ;
+ uint16 mod;
+ uint8 ps;
+ uint16 cv;
+
+ ASSERT( ((tpmn == TPM0)&& (ch <= TPM_CH5)) || ( (tpmn == TPM1 || tpmn == TPM2 ) && (ch <= TPM_CH1)) ); //检查传递进来的通道是否正确
+
+ /******************* 开启时钟 和 复用IO口*******************/
+ tpm_port_mux(tpmn,ch);
+
+ /* 计算频率设置 */
+ // 若 CPWMS = 1 ,即双边捕捉脉冲,则 PMW频率 = pll频率/2 /2 /(2^预分频因子)/模数
+ // 若 CPWMS = 0 ,即单边捕捉脉冲,则 PMW频率 = pll频率/2 /(2^预分频因子)/模数
+ // EPWM的周期 :MOD - CNTIN + 0x0001 (CNTIN 设为0)
+ // 脉冲宽度:CnV - CNTIN
+
+ // 模数 MOD < 0x10000
+ // 预分频因子 PS < 0x07
+ // 预分频因子 PS 越小时,模数 mod 就越大,计数就越精准,PWM输出更为准确
+ // MOD = clk_hz/(freq*(1 << PS)) < 0x10000 ==> clk_hz/(freq*0x10000) < (1<< PS) ==> (clk_hz/(freq*0x10000) >> PS) < 1
+ // 即 (((clk_hz/0x10000 )/ freq ) >> PS ) < 1
+
+ // 以 CPWMS = 1 ,即双边捕捉脉冲为例
+ clk_hz = (core_clk_mhz * 1000 * 1000) >> 1 ; // pll频率 / 2
+
+ mod = (clk_hz >> 16 ) / freq ; // 临时用 mod 缓存一下
+ ps = 0;
+ while((mod >> ps) >= 1) // 等 (mod >> ps) < 1 才退出 while 循环 ,即求 PS 的最小值
+ {
+ ps++;
+ }
+
+ ASSERT(ps <= 0x07); // 断言, PS 最大为 0x07 ,超过此值,则 PWM频率设置过低,或 Bus 频率过高
+
+ mod = (clk_hz >> ps) / freq;// 求 MOD 的值
+
+ switch(tpmn) // 初值 CNTIN 设为0 ,脉冲宽度:CnV - CNTIN ,即 CnV 就是 脉冲宽度了。
+ {
+ // EPWM的周期 : MOD - CNTIN + 0x0001 == MOD - 0 + 1
+ // 则 CnV = (MOD - 0 + 1) * 占空比 = (MOD - 0 + 1) * duty/ TPM_PRECISON
+ case TPM0:
+ cv = (duty * (mod - 0 + 1)) / TPM0_PRECISON;
+ break;
+
+ case TPM1:
+ cv = (duty * (mod - 0 + 1)) / TPM1_PRECISON;
+ break;
+
+ case TPM2:
+ cv = (duty * (mod - 0 + 1)) / TPM2_PRECISON;
+ break;
+
+ default:
+ break;
+ }
+
+ /******************** 选择输出模式为 边沿对齐PWM *******************/
+ //通道状态控制,根据模式来选择 边沿或电平
+ TPM_CnSC_REG(TPMN[tpmn], ch) &= ~TPM_CnSC_ELSA_MASK;
+ TPM_CnSC_REG(TPMN[tpmn], ch) = TPM_CnSC_MSB_MASK | TPM_CnSC_ELSB_MASK;
+ // MSnB:MSnA = 1x 边沿对齐PWM
+ // ELSnB:ELSnA = 10 先高后低
+ // ELSnB:ELSnA = 11 先低后高
+
+ /******************** 配置时钟和分频 ********************/
+ // SIM_SOPT2 &= ~ SIM_SOPT2_TPMSRC_MASK;
+ SIM_SOPT2 |= SIM_SOPT2_TPMSRC(1); // 00 Clock disabled 01 MCGFLLCLK clock, or MCGPLLCLK/2 10 OSCERCLK clock 11 MCGIRCLK clock
+ SIM_SOPT2 |= SIM_SOPT2_PLLFLLSEL_MASK;
+
+ TPM_SC_REG(TPMN[tpmn]) = ( 0
+ //| TPM_SC_CPWMS_MASK //0:上升沿计数模式 ,1: 跳变沿计数模式选择 (注释了表示 0)
+ | TPM_SC_PS(ps) //分频因子,分频系数 = 2^PS
+ | TPM_SC_CMOD(1) //使能计数器
+ );
+ TPM_MOD_REG(TPMN[tpmn]) = mod; //模数, EPWM的周期为 :MOD - CNTIN + 0x0001
+ TPM_CnV_REG(TPMN[tpmn], ch) = cv;
+ TPM_CNT_REG(TPMN[tpmn]) = 0; //计数器。只有低16位可用(写任何值到此寄存器,都会清0)
+}
+
+//=========================================================================
+//函数名称:tpm_stop
+//功能概要:禁止tpm模块。
+//参数说明:uartNo:串口号:0、1、2
+//函数返回:无
+//=========================================================================
+void TPM_Stop(uint8_t tpmModule)
+{
+ switch(tpmModule)
+ {
+ case 0:
+ TPM_SC_REG(TPM0_BASE_PTR) &= ~TPM_SC_CMOD_MASK;
+ break;
+ case 1:
+ TPM_SC_REG(TPM1_BASE_PTR) &= ~TPM_SC_CMOD_MASK;
+ break;
+ case 2:
+ TPM_SC_REG(TPM2_BASE_PTR) &= ~TPM_SC_CMOD_MASK;
+ break;
+ }
+}
+
+
+/*!
+ * @brief 设置TPM 的PWM 通道占空比
+ * @param TPMn_e 模块号(TPM0、 TPM1、 TPM2)
+ * @param TPM_CHn_e 通道号(CH0~CH7)
+ * @param duty 占空比分子,占空比 = duty / TPMn_PRECISON
+ * @since v5.0
+* 作者 :野火工作室
+ * @note 同一个TPM,PWM频率是必须一样的,但占空比可不一样。共3个TPM,即可以输出3个不同频率PWM
+ * Sample usage: TPM_PWM_Duty(TPM0, TPM_CH6, 10); //设置 TPM0_CH6占空比为 10/TPM0_PRECISON
+ */
+void TPM_PWM_Duty(TPMn_e tpmn, TPM_CHn_e ch, uint32_t duty)
+{
+ uint32_t cv;
+ uint32_t mod = 0;
+
+ ASSERT( ((tpmn == TPM0)&& (ch <= TPM_CH5)) || ( (tpmn == TPM1 || tpmn == TPM2 ) && (ch <= TPM_CH1)) ); //检查传递进来的通道是否正确
+
+ switch(tpmn)
+ {
+ case TPM0:
+ ASSERT(duty <= TPM0_PRECISON); //用断言检测 占空比是否合理
+ break;
+
+ case TPM1:
+ ASSERT(duty <= TPM1_PRECISON); //用断言检测 占空比是否合理
+ break;
+
+ case TPM2:
+ ASSERT(duty <= TPM2_PRECISON); //用断言检测 占空比是否合理
+ break;
+
+ default:
+ break;
+ }
+
+
+ //占空比 = (CnV-CNTIN)/(MOD-CNTIN+1)
+
+ do
+ {
+ mod = TPM_MOD_REG(TPMN[tpmn]); //读取 MOD 的值
+ }
+ while(mod == 0); //读一次,可能是0 ,需要多读取几次。
+
+ switch(tpmn)
+ {
+ case TPM0:
+ cv = (duty * (mod - 0 + 1)) / TPM0_PRECISON;
+ break;
+
+ case TPM1:
+ cv = (duty * (mod - 0 + 1)) / TPM1_PRECISON;
+ break;
+
+ case TPM2:
+ cv = (duty * (mod - 0 + 1)) / TPM2_PRECISON;
+ break;
+ default:
+ break;
+ }
+
+ // 配置TPM通道值
+ TPM_CnV_REG(TPMN[tpmn], ch) = cv;
+
+}
+
+/*!
+ * @brief 设置TPM的频率
+ * @param freq 频率(单位为Hz)
+ * @since v5.0
+* 作者 :野火工作室
+ * @note 修改PWM频率后,必须调用 TPM_PWM_Duty 重新配置占空比。同一个模块,PWM频率必须相同。
+ * Sample usage: TPM_PWM_freq(TPM0,200); //设置 TPM0 的 频率 为 200Hz
+ */
+void TPM_PWM_freq(TPMn_e tpmn, uint32_t freq) //设置TPM的频率
+{
+ uint32_t clk_hz ;
+ uint32_t mod;
+ uint8_t ps;
+
+
+ /* 计算频率设置 */
+ // 以 CPWMS = 1 ,即双边捕捉脉冲为例
+ clk_hz = (core_clk_mhz * 1000 * 1000) >> 1 ; // pll频率 / 2
+
+ mod = (clk_hz >> 16 ) / freq ; // 临时用 mod 缓存一下
+ ps = 0;
+ while((mod >> ps) >= 1) // 等 (mod >> ps) < 1 才退出 while 循环 ,即求 PS 的最小值
+ {
+ ps++;
+ }
+
+ ASSERT(ps <= 0x07); // 断言, PS 最大为 0x07 ,超过此值,则 PWM频率设置过低,或 Bus 频率过高
+
+ mod = (clk_hz >> ps) / freq;// 求 MOD 的值
+
+
+ TPM_SC_REG(TPMN[tpmn]) = ( 0
+ //| TPM_SC_CPWMS_MASK //0:上升沿计数模式 ,1: 跳变沿计数模式选择 (注释了表示 0)
+ | TPM_SC_PS(ps) //分频因子,分频系数 = 2^PS
+ | TPM_SC_CMOD(1)
+ //| TPM_SC_CLKS(1) //时钟选择, 0:没选择时钟,禁用; 1:bus 时钟; 2:MCGFFCLK; 3:EXTCLK( 由SIM_SOPT4 选择输入管脚 TPM_CLKINx)
+ //| TPM_SC_TOIE_MASK //溢出中断使能(注释了表示 禁止溢出中断)
+ );
+ TPM_MOD_REG(TPMN[tpmn]) = mod; //模数, EPWM的周期为 :MOD - CNTIN + 0x0001
+ TPM_CNT_REG(TPMN[tpmn]) = 0; //计数器。只有低16位可用(写任何值到此寄存器,都会加载 CNTIN 的值)
+}
+
+//////////////////////////////// 以上为输出PWM //////////////////////////////////////////
+
+
+//////////////////////////////// 以下为脉冲计数 //////////////////////////////////////////
+void TPM_pulse_init(TPMn_e tpmn,TPM_CLKIN_e clkin,TPM_PS_e ps)
+{
+ ASSERT(ps < TPM_PS_MAX);
+
+ //配置 复用
+ switch(tpmn)
+ {
+ case TPM0:
+ SIM_SCGC6 |= SIM_SCGC6_TPM0_MASK; //使能TPM0时钟
+
+
+ break;
+ case TPM1:
+ SIM_SCGC6 |= SIM_SCGC6_TPM1_MASK; //使能TPM1时钟
+ break;
+
+ case TPM2:
+ SIM_SCGC6 |= SIM_SCGC6_TPM2_MASK; //使能TPM2时钟
+ break;
+ default:
+ ASSERT(0);
+ }
+
+ if(clkin == TPM_CLKIN0)
+ {
+ SIM_SOPT4 &= ~( SIM_SOPT4_TPM0CLKSEL_MASK << tpmn );
+ port_init(TPM_CLKIN0_PIN,ALT4);
+ }
+ else if(clkin == TPM_CLKIN1)
+ {
+ SIM_SOPT4 |= ( SIM_SOPT4_TPM0CLKSEL_MASK << tpmn );
+ port_init(TPM_CLKIN1_PIN,ALT4);
+ }
+ else
+ {
+ ASSERT(0); //断言,clkin 只能 0 和 1
+ }
+
+ TPM_SC_REG(TPMN[tpmn]) = ( 0
+ //| TPM_SC_CPWMS_MASK //0:上升沿计数模式 ,1: 跳变沿计数模式选择 (注释了表示 0)
+ | TPM_SC_PS(ps) //分频因子,分频系数 = 2^PS
+ | TPM_SC_CMOD(2)
+ );
+ TPM_MOD_REG(TPMN[tpmn]) = 0xFFFF;
+ TPM_CNT_REG(TPMN[tpmn]) = 0; //计数器。只有低16位可用(写任何值到此寄存器,都会清0)
+}
+
+
+
+//清空计数值
+void TPM_pulse_clean (TPMn_e tpmn)
+{
+ TPM_CNT_REG(TPMN[tpmn]) = 0; //计数器。只有低16位可用(写任何值到此寄存器,都会清0)
+}
+
+//获取计数值
+uint16_t TPM_pulse_get (TPMn_e tpmn)
+{
+ return (uint16)TPM_CNT_REG(TPMN[tpmn]); //计数器。只有低16位可用(写任何值到此寄存器,都会清0)
+}
\ No newline at end of file
diff --git a/plan_manage_main/src/drivers/tsi.c b/plan_manage_main/src/drivers/tsi.c
new file mode 100644
index 0000000..b631f9d
--- /dev/null
+++ b/plan_manage_main/src/drivers/tsi.c
@@ -0,0 +1,129 @@
+//============================================================================
+//文件名称:hw_tsi.c
+//功能概要:K60 tsi底层驱动程序文件
+//版权所有:苏州大学飞思卡尔嵌入式中心(sumcu.suda.edu.cn)
+//版本更新:2012-11-25 V1.0 初始版本
+//============================================================================
+
+#include "tsi.h"
+#include "common.h"
+//============================================================================
+//函数名称:hw_tsi_init
+//功能概要:初始化TSI模块
+//参数说明:chnlIDs:8位无符号数,表示哪个通道可以使能
+//函数返回: 无
+//============================================================================
+
+void hw_tsi_init(uint_8 chnlID)
+{
+ //开启TSI时钟
+ SIM_SCGC5 |= (SIM_SCGC5_TSI_MASK) | (SIM_SCGC5_PORTA_MASK);
+ //通道5使能
+ PORTA_PCR4 = PORT_PCR_MUX(0);
+ //配置TSI通用寄存器
+ TSI0_GENCS |= (TSI_GENCS_REFCHRG(4)
+ | TSI_GENCS_DVOLT(0)
+ | TSI_GENCS_EXTCHRG(6)
+ | TSI_GENCS_PS(2)
+ | TSI_GENCS_NSCN(11)
+ | TSI_GENCS_TSIIEN_MASK
+ | TSI_GENCS_STPE_MASK
+ );
+
+ TSI0_GENCS &= ~TSI_GENCS_ESOR_MASK;
+ TSI0_GENCS &= ~TSI_GENCS_STM_MASK;
+ //清越值标志位和扫描完成位
+ TSI0_GENCS |= (TSI_GENCS_OUTRGF_MASK) | (TSI_GENCS_EOSF_MASK);
+ //选择通道
+ TSI0_DATA |= (TSI_DATA_TSICH(chnlID));
+ //TSI使能
+ TSI0_GENCS |= (TSI_GENCS_TSIEN_MASK);
+}
+
+
+//============================================================================
+//函数名称:hw_tsi_get_value16
+//功能概要:获取TSI通道的计数值
+//参数说明:values:16位无符号数,保存通道计数值,
+//函数返回: 获取TSI通道的计数值
+//============================================================================
+uint_16 hw_tsi_get_value16()
+{
+
+ uint_16 value;
+ TSI0_GENCS &= ~TSI_GENCS_TSIIEN_MASK;
+ //开启软件中断
+ TSI0_DATA |= TSI_DATA_SWTS_MASK;
+ //等待扫描完成
+ while(!(TSI0_GENCS & TSI_GENCS_EOSF_MASK));
+ TSI0_GENCS |= TSI_GENCS_EOSF_MASK;
+ //读取计数寄存器中的值
+ value = (TSI0_DATA & TSI_DATA_TSICNT_MASK);
+ //清超出范围标志位
+ TSI0_GENCS |= TSI_GENCS_OUTRGF_MASK;
+ //清扫描结束标志位
+ TSI0_GENCS |= TSI_GENCS_EOSF_MASK;
+ //TSI中断使能
+ TSI0_GENCS |= TSI_GENCS_TSIIEN_MASK;
+ return value;
+}
+
+
+//============================================================================
+//函数名称:hw_tsi_set_threshold1
+//功能概要:设定指定通道的阈值
+//参数说明: low: 设定阈值下限
+// high: 设定阈值上限
+//函数返回: 无
+//============================================================================
+void hw_tsi_set_threshold(uint_16 low, uint_16 high)
+{
+ uint_32 thresholdValue;
+ //高16位为上限,低16位为下限
+ thresholdValue = high;
+ thresholdValue = (thresholdValue<<16)|low;
+ TSI0_TSHD = thresholdValue;
+}
+
+
+//=========================================================================
+//函数名称:tsi_enable
+//参数说明:无
+//函数返回:无
+//功能概要:开串口接收中断
+//=========================================================================
+void tsi_enable()
+{
+ TSI0_GENCS |= (TSI_GENCS_TSIIEN_MASK|TSI_GENCS_STM_MASK);
+ //开中断控制器IRQ中断
+ enable_irq(26);
+}
+
+//=========================================================================
+//函数名称:tsi_disable
+//参数说明:无
+//函数返回:无
+//功能概要:关串口接收中断
+//=========================================================================
+void tsi_disable()
+{
+ TSI0_GENCS &= ~(TSI_GENCS_TSIIEN_MASK|TSI_GENCS_STM_MASK);
+ //禁止中断控制器IRQ中断
+ disable_irq(26);
+}
+
+
+//=========================================================================
+//函数名称:tsi_softsearch
+//参数说明:无
+//函数返回:无
+//功能概要:启动软件查询中断测试
+//=========================================================================
+void tsi_softsearch()
+{
+ //开启软件触发
+ TSI0_GENCS &= ~TSI_GENCS_STM_MASK;
+ //开始一次软件扫描
+ TSI0_DATA |= TSI_DATA_SWTS_MASK;
+}
+
diff --git a/plan_manage_main/src/drivers/uart.c b/plan_manage_main/src/drivers/uart.c
new file mode 100644
index 0000000..086a0a9
--- /dev/null
+++ b/plan_manage_main/src/drivers/uart.c
@@ -0,0 +1,429 @@
+/******************** (C) COPYRIGHT 2011 蓝宙电子工作室 ********************
+* 文件名 : adc.c
+* 描述 :工程模版实验
+*
+* 实验平台 :landzo电子开发版
+* 库版本 :
+* 嵌入系统 :
+*
+* 作者 :landzo 蓝电子
+* 淘宝店 :http://landzo.taobao.com/
+
+**********************************************************************************/
+#include "common.h" //包含公共要素头文件
+#include "uart.h"
+#include "freedom.h"
+
+//串口1、2号地址映射
+const UART_MemMapPtr UART_ARR[] = {UART1_BASE_PTR, UART2_BASE_PTR};
+
+/*************************************************************************
+* 蓝宙电子工作室
+*
+* 函数名称:uart_init
+* 功能说明:初始化uart模块
+* 参数说明:UARTn 模块号(UART0~UART2)
+* 函数返回:无
+* 修改时间:2012-1-20
+* 备 注:官方例程,printf会调用这函数
+*************************************************************************/
+void uart_init (UARTn uratn,uint32_t baud_rate)
+{
+ //局部变量声明
+ register uint_16 sbr;
+ uint8_t temp;
+ uint16_t clk_kh ;
+ UARTLP_MemMapPtr uartch1=UART0_BASE_PTR;//声明uartch1为UARTLP_MemMapPtr结构体类型指针
+ UART_MemMapPtr uartch2; //声明uartch2为UART_MemMapPtr结构体类型指针
+ uartch2 = UART_ARR[uratn-1]; //获得UART1、2模块相应口基地址
+
+ //根据带入参数uartNo,给局部变量uartch1赋值
+
+ if(uratn==0)
+ {
+
+
+ SIM_SCGC4 |= SIM_SCGC4_UART0_MASK; //使能 UART0 时钟
+
+ if(UART0_RX == PTA1)
+ {
+ port_init( UART0_RX, ALT2);
+ }
+ else if((UART0_RX == PTA15) || (UART0_RX == PTB16) || (UART0_RX == PTD6) )
+ {
+ port_init( UART0_RX, ALT3);
+ }
+ else
+ {
+ ASSERT(0); //上诉条件都不满足,直接断言失败了,设置管脚有误?
+ }
+
+ if(UART0_TX == PTA2)
+ {
+ port_init( UART0_TX, ALT2);
+ }
+ else if((UART0_TX == PTA14) || (UART0_TX == PTB17) || (UART0_TX == PTD7) )
+ {
+ port_init( UART0_TX, ALT3);
+ }
+ else
+ {
+ ASSERT(0); //上诉条件都不满足,直接断言失败了,设置管脚有误?
+ }
+
+ SIM_SOPT2 |= SIM_SOPT2_UART0SRC(1); //UART0选择MCGFLLCLK_khz=48000Khz时钟源
+ SIM_SOPT2 |= SIM_SOPT2_PLLFLLSEL_MASK;
+
+ //暂时关闭串口0发送与接收功能
+ uartch1->C2 &= ~(UART_C2_TE_MASK | UART_C2_RE_MASK);
+
+ //配置串口工作模式:8位无校验模式
+ clk_kh = core_clk_khz/2 ;
+ sbr = (uint_16)((clk_kh*1000)/(baud_rate * 16));
+ temp = UART_BDH_REG(uartch1) & ~(UART_BDH_SBR(0x1F));
+ UART_BDH_REG(uartch1) = temp | UART_BDH_SBR(((sbr & 0x1F00) >> 8));
+ UART_BDL_REG(uartch1) = (uint8_t)(sbr & UART_BDL_SBR_MASK);
+
+ //初始化控制寄存器、清标志位
+ UART0_C4 = 0x0F;
+ UART0_C1 = 0x00;
+ UART0_C3 = 0x00;
+ UART0_MA1 = 0x00;
+ UART0_MA2 = 0x00;
+ UART0_S1 |= 0x1F;
+ UART0_S2 |= 0xC0;
+
+ //启动发送接收
+ uartch1->C2 |= (UART_C2_TE_MASK | UART_C2_RE_MASK);
+ }
+ else
+ {
+ switch (uratn)
+ {
+ case UART1:
+ SIM_SCGC4 |= SIM_SCGC4_UART1_MASK;
+
+ if((UART1_RX == PTA18) || (UART1_RX == PTC3) || (UART1_RX == PTE1) )
+ {
+ port_init( UART1_RX, ALT3);
+ }
+ else
+ {
+ ASSERT(0); //上诉条件都不满足,直接断言失败了,设置管脚有误?
+ }
+ if((UART1_TX == PTA19) || (UART1_TX == PTC4) || (UART1_TX == PTE0) )
+ {
+ port_init( UART1_TX, ALT3);
+ }
+ else
+ {
+ ASSERT(0); //上诉条件都不满足,直接断言失败了,设置管脚有误?
+ }
+
+ break ;
+
+ case UART2:
+
+ SIM_SCGC4 |= SIM_SCGC4_UART2_MASK;
+
+ if((UART2_RX == PTD2) || (UART2_RX == PTD4) || (UART2_RX == PTE17))
+ {
+ port_init( UART2_RX, ALT3);
+ }
+ else if(UART2_RX == PTE23)
+ {
+ port_init( UART2_RX, ALT4);
+ }
+ else
+ {
+ ASSERT(0); //上诉条件都不满足,直接断言失败了,设置管脚有误?
+ }
+
+ if((UART2_TX == PTD3) || (UART2_TX == PTD5) || (UART2_TX == PTE16))
+ {
+ port_init( UART2_TX, ALT3);
+ }
+ else if(UART2_TX == PTE22)
+ {
+ port_init( UART2_TX, ALT4);
+ }
+ break;
+ default: break;
+ }
+
+ //暂时关闭串口1、2发送与接收功能
+ uartch2->C2 &= ~(UART_C2_TE_MASK | UART_C2_RE_MASK);
+
+ //配置波特率,KL25串口1、2时钟频率只能使用 Bus clock = 24M 总线时钟
+ //配置串口工作模式,8位无校验模式
+ uartch2->C1 = 0;
+ sbr = (uint_16)((bus_clk_khz*1000)/(baud_rate * 16));
+ temp = UART_BDH_REG(uartch2) & ~(UART_BDH_SBR(0x1F));
+ UART_BDH_REG(uartch2) = temp | UART_BDH_SBR(((sbr & 0x1F00) >> 8));
+ UART_BDL_REG(uartch2) = (uint8_t)(sbr & UART_BDL_SBR_MASK);
+
+ //初始化控制寄存器、清标志位
+ uartch2->C1 = 0x00;
+ uartch2->C3 = 0x00;
+ uartch2->S1 = 0x1F;
+ uartch2->S2 = 0x00;
+ //启动发送接收
+ uartch2->C2 |= (UART_C2_TE_MASK | UART_C2_RE_MASK);
+ }
+}
+
+/*************************************************************************
+* 蓝宙电子工作室
+*
+* 函数名称:uart_getchar
+* 功能说明:无限时间等待串口接受一个字节
+* 参数说明:UARTn 模块号(UART0~UART5)
+* 函数返回:接收到的字节
+* 修改时间:2012-1-20
+* 备 注:官方例程
+*************************************************************************/
+char uart_getchar (UARTn uratn)
+{
+ UARTLP_MemMapPtr uartch1=UART0_BASE_PTR;
+ UART_MemMapPtr uartch2 = UART_ARR[uratn-1];
+ if(0==uratn)
+ {
+ /* Wait until character has been received */
+ while (!((uartch1->S1) & UARTLP_S1_RDRF_MASK ));
+
+ /* Return the 8-bit data from the receiver */
+ return uartch1->D;
+ }
+ else
+ {
+ /* Wait until character has been received */
+ while (!((uartch2->S1) & UART_S1_RDRF_MASK));
+
+ /* Return the 8-bit data from the receiver */
+ return uartch2->D;
+
+ }
+
+}
+/*************************************************************************
+* 蓝宙电子工作室
+*
+* 函数名称:uart_pendchar
+* 功能说明:有限时间等待串口接受一个字节
+* 参数说明:UARTn 模块号(UART0~UART5)
+* 函数返回:接收到的字节
+* 修改时间:2012-1-20
+* 备 注:
+*************************************************************************/
+uint8_t uart_pendchar (UARTn uratn, uint8_t *fp)
+{
+ uint32_t t;
+ uint8_t dat;
+ UARTLP_MemMapPtr uartch1=UART0_BASE_PTR;
+ UART_MemMapPtr uartch2 = UART_ARR[uratn-1];
+
+ for (t = 0; t < 0xFBBB; t++)//查询指定次数
+ {
+ if(0==uratn)
+ {
+ //判断接收缓冲区是否满
+ if ((uartch1->S1) & UART_S1_RDRF_MASK )
+ {
+ dat = uartch1->D;
+ *fp= 0; //收到数据
+ break;
+ }
+ }
+ else
+ {
+ //判断接收缓冲区是否满
+ if ((uartch2->S1) & UART_S1_RDRF_MASK )
+ {
+ dat = uartch2->D;
+ *fp= 0; //收到数据
+ break;
+ }
+ }
+
+ }//end for
+ if(t >= 0xFBBB)
+ {
+ dat = 0xFF;
+ *fp = 1; //未收到数据
+ }
+ return dat; //返回接收到的数据
+
+}
+
+/*************************************************************************
+* 蓝宙电子工作室
+*
+* 函数名称:uart_pendstr
+* 功能说明:有限时间等待串口接受字符串
+* 参数说明:UARTn 模块号(UART0~UART5)
+* 函数返回:接收到的字节
+* 修改时间:2012-1-20
+* 备 注:
+*************************************************************************/
+uint8_t uart_pendstr (UARTn uratn, uint8_t *str)
+{
+ uint32_t i = 0;
+ while(uart_pendchar(uratn, str + i++));
+
+ return (i <= 1 ? 0 : 1);
+}
+
+/*************************************************************************
+* 蓝宙电子工作室
+*
+* 函数名称:uart_query
+* 功能说明:查询是否接受到一个字节
+* 参数说明:UARTn 模块号(UART0~UART5)
+* 函数返回:1 接收到一个字节了
+* 0 没有接收到
+* 修改时间:2012-1-20
+* 备 注:官方例程
+*************************************************************************/
+int uart_query (UARTn uratn)
+{
+ UARTLP_MemMapPtr uartch1=UART0_BASE_PTR;
+ UART_MemMapPtr uartch2 = UART_ARR[uratn-1];
+
+ if(0==uratn)
+ {
+ return ((uartch1->S1) & UARTLP_S1_RDRF_MASK );
+ }
+ else
+ {
+ return ((uartch2->S1) & UARTLP_S1_RDRF_MASK);
+ }
+
+}
+
+/*************************************************************************
+* 蓝宙电子工作室
+*
+* 函数名称:uart_putchar
+* 功能说明:串口发送一个字节
+* 参数说明:UARTn 模块号(UART0~UART5)
+* 函数返回:无
+* 修改时间:2012-1-20
+* 备 注:官方例程,printf会调用这函数
+*************************************************************************/
+void uart_putchar (UARTn uratn, char ch)
+{
+ UARTLP_MemMapPtr uartch1=UART0_BASE_PTR;
+ UART_MemMapPtr uartch2 = UART_ARR[uratn-1];
+
+ if(0==uratn)
+ {
+ //等待发送缓冲区空
+ while(!((uartch1->S1) & UARTLP_S1_TDRE_MASK));
+ //发送数据
+ uartch1->D = ch;
+ }
+ else
+ {
+ //等待发送缓冲区空
+ while(!((uartch2->S1) & UART_S1_TDRE_MASK));
+ //发送数据
+ uartch2->D = ch;
+
+ }
+
+}
+
+
+/*************************************************************************
+* 蓝宙电子工作室
+*
+* 函数名称:uart_sendN
+* 功能说明:串行 发送指定len个字节长度字符串 (包括 NULL 也会发送)
+* 参数说明:UARTn 模块号(UART0~UART5)
+* buff 发送缓冲区
+* len 发送长度
+* 函数返回:无
+* 修改时间:2012-1-20
+* 备 注:
+*************************************************************************/
+void uart_sendN (UARTn uratn, uint8_t *buff, uint16_t len)
+{
+ int i;
+ for(i = 0; i < len; i++)
+ {
+ uart_putchar(uratn, buff[i]);
+ }
+}
+
+/*************************************************************************
+* 蓝宙电子工作室
+*
+* 函数名称:uart_sendStr
+* 功能说明:串行发送字符串
+* 参数说明:UARTn 模块号(UART0~UART5)
+* str 字符串
+* 函数返回:无
+* 修改时间:2012-1-20
+* 备 注:
+*************************************************************************/
+void uart_sendStr (UARTn uratn, const uint8_t *str)
+{
+ while(*str)
+ {
+ uart_putchar(uratn, *str++);
+ }
+}
+
+/*************************************************************************
+* 蓝宙电子工作室
+*
+* 函数名称:uart_irq_EN
+* 功能说明:开串口接收中断
+* 参数说明:UARTn 模块号(UART0~UART2)
+* 函数返回:无
+* 修改时间:2014-9-17
+* 备 注:
+*************************************************************************/
+void uart_irq_EN(UARTn uratn)
+{
+ UARTLP_MemMapPtr uartch1 = UART0_BASE_PTR;
+ UART_MemMapPtr uartch2 = UART_ARR[uratn-1];
+ if(0==uratn)
+ {
+ uartch1->C2 |= UART_C2_RIE_MASK; //开放UART接收中断
+ }
+ else
+ uartch2->C2 |= UART_C2_RIE_MASK; //开放UART接收中断
+ enable_irq( uratn+12 ); //开中断控制器IRQ中断
+}
+
+/*************************************************************************
+* 蓝宙电子工作室
+*
+* 函数名称:uart_irq_DIS
+* 功能说明:关串口接收中断
+* 参数说明:UARTn 模块号(UART0~UART2)
+* 函数返回:无
+* 修改时间:2014-9-17
+* 备 注:
+*************************************************************************/
+void uart_irq_DIS(UARTn uratn)
+{
+ UARTLP_MemMapPtr uartch1=UART0_BASE_PTR;
+ UART_MemMapPtr uartch2 = UART_ARR[uratn-1];
+ if(0==uratn)
+ uartch1->C2 &= ~UART_C2_RIE_MASK; //禁止UART接收中断
+ else
+ uartch2->C2 &= ~UART_C2_RIE_MASK; //禁止UART接收中断
+ disable_irq( uratn+12 ); //禁止中断控制器IRQ中断
+}
+
+
+
+
+
+
+
+
+
+
diff --git a/plan_manage_main/src/include/common/assert.h b/plan_manage_main/src/include/common/assert.h
new file mode 100644
index 0000000..73c26fb
--- /dev/null
+++ b/plan_manage_main/src/include/common/assert.h
@@ -0,0 +1,25 @@
+/*
+ * File: assert.h
+ * Purpose: Provide macro for software assertions
+ *
+ * Notes: assert_failed() defined in assert.c
+ */
+
+#ifndef _ASSERT_H_
+#define _ASSERT_H_
+
+/********************************************************************/
+
+void assert_failed(char *, int);
+
+#ifdef DEBUG_PRINT
+#define ASSERT(expr) \
+ if (!(expr)) \
+ assert_failed(__FILE__, __LINE__)
+#else
+#define ASSERT(expr)
+#endif
+
+/********************************************************************/
+#endif /* _ASSERT_H_ */
+
diff --git a/plan_manage_main/src/include/common/common.h b/plan_manage_main/src/include/common/common.h
new file mode 100644
index 0000000..4544a36
--- /dev/null
+++ b/plan_manage_main/src/include/common/common.h
@@ -0,0 +1,152 @@
+/******************** (C) COPYRIGHT 2011 蓝宙电子工作室 ********************
+ * 文件名 :arm_cm4.h
+ * 描述 :工程模版实验
+ *
+ * 实验平台 :landzo电子开发版
+ * 库版本 :
+ * 嵌入系统 :
+ *
+ * 作者 :landzo 蓝电子
+ * 淘宝店 :http://landzo.taobao.com/
+
+**********************************************************************************/
+
+#ifndef _COMMON_H_ //防止重复定义(Common_H 开头)
+#define _COMMON_H_
+
+//1.芯片寄存器映射文件及处理器内核属性文件
+#include "MKL25Z4.h" // 包含芯片头文件
+
+//2.定义开关总中断
+
+
+
+#define ARM_INTERRUPT_LEVEL_BITS 2 //MQX操作系统使用
+
+//3.位操作宏函数(置位、清位、获得寄存器一位的状态)
+#define BSET(bit,Register) ((Register)|= (1<<(bit))) //置寄存器的一位
+#define BCLR(bit,Register) ((Register) &= ~(1<<(bit))) //清寄存器的一位
+#define BGET(bit,Register) (((Register) >> (bit)) & 1) //获得寄存器一位的状态
+
+//4.重定义基本数据类型(类型别名宏定义)
+typedef unsigned char uint_8; // 无符号8位数,字节
+typedef unsigned short int uint_16; // 无符号16位数,字
+typedef unsigned long int uint_32; // 无符号32位数,长字
+typedef char int_8; // 有符号8位数
+typedef short int int_16; // 有符号16位数
+typedef int int_32; // 有符号32位数
+//不优化类型
+typedef volatile uint_8 vuint_8; // 不优化无符号8位数,字节
+typedef volatile uint_16 vuint_16; // 不优化无符号16位数,字
+typedef volatile uint_32 vuint_32; // 不优化无符号32位数,长字
+typedef volatile int_8 vint_8; // 不优化有符号8位数
+typedef volatile int_16 vint_16; // 不优化有符号16位数
+typedef volatile int_32 vint_32; // 不优化有符号32位数
+
+typedef union
+{
+ uint_32 DW;
+ uint_16 W[2];
+ uint_8 B[4];
+ struct
+ {
+ uint_32 b0:1; uint_32 b1:1; uint_32 b2:1; uint_32 b3:1; uint_32 b4:1; uint_32 b5:1; uint_32 b6:1; uint_32 b7:1;
+ uint_32 b8:1; uint_32 b9:1; uint_32 b10:1;uint_32 b11:1;uint_32 b12:1;uint_32 b13:1;uint_32 b14:1;uint_32 b15:1;
+ uint_32 b16:1;uint_32 b17:1;uint_32 b18:1;uint_32 b19:1;uint_32 b20:1;uint_32 b21:1;uint_32 b22:1;uint_32 b23:1;
+ uint_32 b24:1;uint_32 b25:1;uint_32 b26:1;uint_32 b27:1;uint_32 b28:1;uint_32 b29:1;uint_32 b30:1;uint_32 b31:1;
+ };
+}Dtype; //sizeof(Dtype) 为 4
+/*
+ * 中断号类型声明
+ */
+typedef enum
+{
+ NMI_IRQn = -14, /**< Non-maskable interrupt */
+ Hard_Fault_IRQn = -13, /**< Hard fault exception */
+ Reserved4_IRQn = -12, /**< Reserved interrupt 4 */
+ Reserved5_IRQn = -11, /**< Reserved interrupt 5 */
+ Reserved6_IRQn = -10, /**< Reserved interrupt 6 */
+ Reserved7_IRQn = -9, /**< Reserved interrupt 7 */
+ Reserved8_IRQn = -8, /**< Reserved interrupt 8 */
+ Reserved9_IRQn = -7, /**< Reserved interrupt 9 */
+ Reserved10_IRQn = -6, /**< Reserved interrupt 10 */
+ SVCall_IRQn = -5, /**< A supervisor call exception */
+ Reserved12_IRQn = -4, /**< Reserved interrupt 12 */
+ Reserved13_IRQn = -3, /**< Reserved interrupt 13 */
+ PendableSrvReq_IRQn = -2, /**< PendSV exception - request for system level service */
+ SysTick_IRQn = -1, /**< SysTick interrupt */
+
+ DMA0_IRQn = 0, /**< DMA channel 0 transfer complete/error interrupt */
+ DMA1_IRQn = 1, /**< DMA channel 1 transfer complete/error interrupt */
+ DMA2_IRQn = 2, /**< DMA channel 2 transfer complete/error interrupt */
+ DMA3_IRQn = 3, /**< DMA channel 3 transfer complete/error interrupt */
+ Reserved20_IRQn = 4, /**< Reserved interrupt 20 */
+ FTFA_IRQn = 5, /**< FTFA command complete/read collision interrupt */
+ LVD_LVW_IRQn = 6, /**< Low Voltage Detect, Low Voltage Warning */
+ LLW_IRQn = 7, /**< Low Leakage Wakeup */
+ I2C0_IRQn = 8, /**< I2C0 interrupt */
+ I2C1_IRQn = 9, /**< I2C0 interrupt 25 */
+ SPI0_IRQn = 10, /**< SPI0 interrupt */
+ SPI1_IRQn = 11, /**< SPI1 interrupt */
+ UART0_IRQn = 12, /**< UART0 status/error interrupt */
+ UART1_IRQn = 13, /**< UART1 status/error interrupt */
+ UART2_IRQn = 14, /**< UART2 status/error interrupt */
+ ADC0_IRQn = 15, /**< ADC0 interrupt */
+ CMP0_IRQn = 16, /**< CMP0 interrupt */
+ TPM0_IRQn = 17, /**< TPM0 fault, overflow and channels interrupt */
+ TPM1_IRQn = 18, /**< TPM1 fault, overflow and channels interrupt */
+ TPM2_IRQn = 19, /**< TPM2 fault, overflow and channels interrupt */
+ RTC_IRQn = 20, /**< RTC interrupt */
+ RTC_Seconds_IRQn = 21, /**< RTC seconds interrupt */
+ PIT_IRQn = 22, /**< PIT timer interrupt */
+ I2S0_IRQn = 23, /**< I2S0 transmit interrupt */
+ USB0_IRQn = 24, /**< USB0 interrupt */
+ DAC0_IRQn = 25, /**< DAC0 interrupt */
+ TSI0_IRQn = 26, /**< TSI0 interrupt */
+ MCG_IRQn = 27, /**< MCG interrupt */
+ LPTMR_IRQn = 28, /**< LPTimer interrupt */
+ Reserved45_IRQn = 29, /**< Reserved interrupt 45 */
+ PORTA_IRQn = 30, /**< Port A interrupt */
+ PORTC_PORTD_IRQn = 31 /**< Port C and port D interrupt */
+} IRQn_t, IRQn_Type;
+/*
+ * 定义运行到RAM的函数
+ */
+#if defined(__ICCARM__)
+ #define __RAMFUN __ramfunc //IAR 用 __ramfunc 来声明
+#else
+ #define __RAMFUN
+#endif
+
+
+//喂狗
+#define WDI_FEED() {SIM_SRVCOP = 0x55; SIM_SRVCOP = 0xAA;}
+
+
+
+// 7、包含相关头文件
+#include "assert.h"
+#include "io.h"
+#include "memtest.h"
+#include "queue.h"
+#include "stdlib.h"
+#include "uif.h"
+#include "typedef.h"
+//#include "tower.h"
+#include "freedom.h"
+#include "arm_cm0.h"
+//#include "sysinit.h"
+#include "vectors.h"
+#include "startup.h"
+
+#include "sysinit.h" //系统配置
+#include "mcg.h"
+#include "gpio_cfg.h"
+#include "port.h"
+#include "fire_drivers_cfg.h" //管脚复用配置
+#endif //防止重复定义(Common_H 结尾)
+
+
+void init_critical(void);
+void enter_critical(void);
+void exit_critical(void);
diff --git a/plan_manage_main/src/include/common/io.h b/plan_manage_main/src/include/common/io.h
new file mode 100644
index 0000000..bbf28d8
--- /dev/null
+++ b/plan_manage_main/src/include/common/io.h
@@ -0,0 +1,29 @@
+/*
+ * File: io.h
+ * Purpose: Serial Input/Output routines
+ *
+ */
+
+#ifndef _IO_H
+#define _IO_H
+
+/********************************************************************/
+
+char
+in_char(void);
+
+void
+out_char(char);
+
+int
+char_present(void);
+
+int
+printf(const char *, ... );
+
+int
+sprintf(char *, const char *, ... );
+
+/********************************************************************/
+
+#endif
diff --git a/plan_manage_main/src/include/common/memtest.h b/plan_manage_main/src/include/common/memtest.h
new file mode 100644
index 0000000..098eeeb
--- /dev/null
+++ b/plan_manage_main/src/include/common/memtest.h
@@ -0,0 +1,42 @@
+/**********************************************************************
+ *
+ * Filename: memtest.h
+ *
+ * Description: Memory-testing module API.
+ *
+ * Notes: The memory tests can be easily ported to systems with
+ * different data bus widths by redefining 'datum' type.
+ *
+ *
+ * Copyright (c) 2000 by Michael Barr. This software is placed into
+ * the public domain and may be used for any purpose. However, this
+ * notice must not be changed or removed and no warranty is either
+ * expressed or implied by its publication or distribution.
+ **********************************************************************/
+
+#ifndef _memtest_h
+#define _memtest_h
+
+
+/*
+ * Define NULL pointer value.
+ */
+#ifndef NULL
+#define NULL (void *) 0
+#endif
+
+/*
+ * Set the data bus width.
+ */
+typedef unsigned long datum;
+
+/*
+ * Function prototypes.
+ */
+datum memTestDataBus(volatile datum * address);
+datum * memTestAddressBus(volatile datum * baseAddress, unsigned long nBytes);
+datum * memTestDevice(volatile datum * baseAddress, unsigned long nBytes);
+
+
+#endif /* _memtest_h */
+
diff --git a/plan_manage_main/src/include/common/queue.h b/plan_manage_main/src/include/common/queue.h
new file mode 100644
index 0000000..93a9b45
--- /dev/null
+++ b/plan_manage_main/src/include/common/queue.h
@@ -0,0 +1,53 @@
+/*
+ * File: queue.h
+ * Purpose: Implement a first in, first out linked list
+ *
+ * Notes:
+ */
+
+#ifndef _QUEUE_H_
+#define _QUEUE_H_
+
+/********************************************************************/
+
+/*
+ * Individual queue node
+ */
+typedef struct NODE
+{
+ struct NODE *next;
+} QNODE;
+
+/*
+ * Queue Struture - linked list of qentry items
+ */
+typedef struct
+{
+ QNODE *head;
+ QNODE *tail;
+} QUEUE;
+
+/*
+ * Functions provided by queue.c
+ */
+void
+queue_init(QUEUE *);
+
+int
+queue_isempty(QUEUE *);
+
+void
+queue_add(QUEUE *, QNODE *);
+
+QNODE*
+queue_remove(QUEUE *);
+
+QNODE*
+queue_peek(QUEUE *);
+
+void
+queue_move(QUEUE *, QUEUE *);
+
+/********************************************************************/
+
+#endif /* _QUEUE_H_ */
diff --git a/plan_manage_main/src/include/common/startup.h b/plan_manage_main/src/include/common/startup.h
new file mode 100644
index 0000000..3c6a051
--- /dev/null
+++ b/plan_manage_main/src/include/common/startup.h
@@ -0,0 +1,25 @@
+/******************** (C) COPYRIGHT 2011 蓝宙电子工作室 ********************
+ * 文件名 :startup.h
+ * 描述 :CPU启动相关函数的头文件
+ * 备注 :
+ *
+ * 实验平台 :
+ * 库版本 :
+ * 嵌入系统 :
+ *
+ * 作者 :
+ * 淘宝店 :http://firestm32.taobao.com
+ * 技术支持论坛 :http://www.ourdev.cn/bbs/bbs_list.jsp?bbs_id=1008
+**********************************************************************************/
+
+
+#ifndef _STARTUP_H_
+#define _STARTUP_H_
+
+/********************************************************************/
+
+void common_startup(void);
+
+/********************************************************************/
+
+#endif /* _STARTUP_H_ */
diff --git a/plan_manage_main/src/include/common/typedef.h b/plan_manage_main/src/include/common/typedef.h
new file mode 100644
index 0000000..70bd0d9
--- /dev/null
+++ b/plan_manage_main/src/include/common/typedef.h
@@ -0,0 +1,43 @@
+#ifndef __TYPEDEF_H__
+#define __TYPEDEF_H__
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+#ifndef s8
+#define s8 char
+#endif
+#ifndef u8
+#define u8 unsigned char
+#endif
+#ifndef s16
+#define s16 short
+#endif
+#ifndef u16
+#define u16 unsigned short
+#endif
+#ifndef s32
+#define s32 long
+#endif
+#ifndef u32
+#define u32 unsigned long
+#endif
+#ifndef sint
+#define sint int
+#endif
+#ifndef uint
+#define uint unsigned int
+#endif
+#ifndef s64
+#define s64 long long
+#endif
+#ifndef u64
+#define u64 unsigned long long
+#endif
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* __TYPEDEF_H__ */
diff --git a/plan_manage_main/src/include/common/uif.h b/plan_manage_main/src/include/common/uif.h
new file mode 100644
index 0000000..ad2b813
--- /dev/null
+++ b/plan_manage_main/src/include/common/uif.h
@@ -0,0 +1,137 @@
+/*
+ * File: uif.h
+ * Purpose: Provide an interactive user interface
+ *
+ * Notes: The commands, set/show parameters, and prompt are configured
+ * at the project level
+ */
+
+#ifndef _UIF_H_
+#define _UIF_H_
+
+/********************************************************************/
+
+/*
+ * Function prototypes
+ */
+char *
+get_line (char *);
+
+uint_32
+get_value (char *, int *, int);
+
+void
+run_cmd (void);
+
+int
+make_argv (char *, char **);
+
+void
+uif_cmd_help (int, char **);
+
+void
+uif_cmd_set (int, char **);
+
+void
+uif_cmd_show (int, char **);
+
+/*
+ * Maximum command line arguments
+ */
+#define UIF_MAX_ARGS 10
+
+/*
+ * Maximum length of the command line
+ */
+#define UIF_MAX_LINE 80
+
+/*
+ * The command table entry data structure
+ */
+typedef const struct
+{
+ char * cmd; /* command name user types, ie. GO */
+ int min_args; /* min num of args command accepts */
+ int max_args; /* max num of args command accepts */
+ int flags; /* command flags (e.g. repeat) */
+ void (*func)(int, char **); /* actual function to call */
+ char * description; /* brief description of command */
+ char * syntax; /* syntax of command */
+} UIF_CMD;
+
+/*
+ * Prototype and macro for size of the command table
+ */
+#ifdef KEIL
+UIF_CMD UIF_CMDTAB[];
+const int UIF_NUM_CMD;
+#else
+extern UIF_CMD UIF_CMDTAB[];
+extern const int UIF_NUM_CMD;
+#endif
+
+#define UIF_CMDTAB_SIZE (sizeof(UIF_CMDTAB)/sizeof(UIF_CMD))
+
+#define UIF_CMD_FLAG_REPEAT 0x1
+
+/*
+ * Macros for User InterFace command table entries
+ */
+#ifndef UIF_CMD_HELP
+#define UIF_CMD_HELP \
+ {"help",0,1,0,uif_cmd_help,"Help",""},
+#endif
+
+#ifndef UIF_CMD_SET
+#define UIF_CMD_SET \
+ {"set",0,2,0,uif_cmd_set,"Set Config","