Compare commits
8 commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
90351402d8 | ||
|
|
bd1902939a | ||
|
|
fe11958be3 | ||
|
|
3b6408a650 | ||
|
|
ec2ed2d196 | ||
|
|
7d46287def | ||
|
|
73d440be4d | ||
|
|
69b9efac27 |
40 changed files with 14052 additions and 11548 deletions
1
.gitignore
vendored
1
.gitignore
vendored
|
|
@ -1,5 +1,4 @@
|
||||||
/plan_manage_main/out
|
/plan_manage_main/out
|
||||||
/plan_manage_main/Debug
|
|
||||||
|
|
||||||
|
|
||||||
*.swp
|
*.swp
|
||||||
|
|
|
||||||
File diff suppressed because it is too large
Load diff
|
|
@ -93,7 +93,7 @@
|
||||||
</option>
|
</option>
|
||||||
<option>
|
<option>
|
||||||
<name>OCDownloadAttachToProgram</name>
|
<name>OCDownloadAttachToProgram</name>
|
||||||
<state>0</state>
|
<state>1</state>
|
||||||
</option>
|
</option>
|
||||||
<option>
|
<option>
|
||||||
<name>UseFlashLoader</name>
|
<name>UseFlashLoader</name>
|
||||||
|
|
|
||||||
|
|
@ -17,15 +17,15 @@
|
||||||
<debug>1</debug>
|
<debug>1</debug>
|
||||||
<option>
|
<option>
|
||||||
<name>ExePath</name>
|
<name>ExePath</name>
|
||||||
<state>..\Debug\Exe</state>
|
<state>..\out\Debug\Exe</state>
|
||||||
</option>
|
</option>
|
||||||
<option>
|
<option>
|
||||||
<name>ObjPath</name>
|
<name>ObjPath</name>
|
||||||
<state>..\Debug\Obj</state>
|
<state>..\out\Debug\Obj</state>
|
||||||
</option>
|
</option>
|
||||||
<option>
|
<option>
|
||||||
<name>ListPath</name>
|
<name>ListPath</name>
|
||||||
<state>..\Debug\List</state>
|
<state>..\out\Debug\List</state>
|
||||||
</option>
|
</option>
|
||||||
<option>
|
<option>
|
||||||
<name>Variant</name>
|
<name>Variant</name>
|
||||||
|
|
@ -968,20 +968,20 @@
|
||||||
<debug>0</debug>
|
<debug>0</debug>
|
||||||
<option>
|
<option>
|
||||||
<name>ExePath</name>
|
<name>ExePath</name>
|
||||||
<state>Release\Exe</state>
|
<state>..\out\Release\Exe</state>
|
||||||
</option>
|
</option>
|
||||||
<option>
|
<option>
|
||||||
<name>ObjPath</name>
|
<name>ObjPath</name>
|
||||||
<state>Release\Obj</state>
|
<state>..\out\Release\Obj</state>
|
||||||
</option>
|
</option>
|
||||||
<option>
|
<option>
|
||||||
<name>ListPath</name>
|
<name>ListPath</name>
|
||||||
<state>Release\List</state>
|
<state>..\out\Release\List</state>
|
||||||
</option>
|
</option>
|
||||||
<option>
|
<option>
|
||||||
<name>Variant</name>
|
<name>Variant</name>
|
||||||
<version>20</version>
|
<version>20</version>
|
||||||
<state>0</state>
|
<state>35</state>
|
||||||
</option>
|
</option>
|
||||||
<option>
|
<option>
|
||||||
<name>GEndianMode</name>
|
<name>GEndianMode</name>
|
||||||
|
|
@ -994,7 +994,7 @@
|
||||||
</option>
|
</option>
|
||||||
<option>
|
<option>
|
||||||
<name>Input description</name>
|
<name>Input description</name>
|
||||||
<state></state>
|
<state>Automatic choice of formatter.</state>
|
||||||
</option>
|
</option>
|
||||||
<option>
|
<option>
|
||||||
<name>Output variant</name>
|
<name>Output variant</name>
|
||||||
|
|
@ -1003,7 +1003,7 @@
|
||||||
</option>
|
</option>
|
||||||
<option>
|
<option>
|
||||||
<name>Output description</name>
|
<name>Output description</name>
|
||||||
<state></state>
|
<state>Automatic choice of formatter.</state>
|
||||||
</option>
|
</option>
|
||||||
<option>
|
<option>
|
||||||
<name>GOutputBinary</name>
|
<name>GOutputBinary</name>
|
||||||
|
|
@ -1016,7 +1016,7 @@
|
||||||
</option>
|
</option>
|
||||||
<option>
|
<option>
|
||||||
<name>OGCoreOrChip</name>
|
<name>OGCoreOrChip</name>
|
||||||
<state>0</state>
|
<state>1</state>
|
||||||
</option>
|
</option>
|
||||||
<option>
|
<option>
|
||||||
<name>GRuntimeLibSelect</name>
|
<name>GRuntimeLibSelect</name>
|
||||||
|
|
@ -1030,7 +1030,7 @@
|
||||||
</option>
|
</option>
|
||||||
<option>
|
<option>
|
||||||
<name>RTDescription</name>
|
<name>RTDescription</name>
|
||||||
<state></state>
|
<state>Use the normal configuration of the C/C++ runtime library. No locale interface, C locale, no file descriptor support, no multibytes in printf and scanf, and no hex floats in strtod.</state>
|
||||||
</option>
|
</option>
|
||||||
<option>
|
<option>
|
||||||
<name>OGProductVersion</name>
|
<name>OGProductVersion</name>
|
||||||
|
|
@ -1038,7 +1038,7 @@
|
||||||
</option>
|
</option>
|
||||||
<option>
|
<option>
|
||||||
<name>OGLastSavedByProductVersion</name>
|
<name>OGLastSavedByProductVersion</name>
|
||||||
<state></state>
|
<state>7.20.2.7418</state>
|
||||||
</option>
|
</option>
|
||||||
<option>
|
<option>
|
||||||
<name>GeneralEnableMisra</name>
|
<name>GeneralEnableMisra</name>
|
||||||
|
|
@ -1050,7 +1050,7 @@
|
||||||
</option>
|
</option>
|
||||||
<option>
|
<option>
|
||||||
<name>OGChipSelectEditMenu</name>
|
<name>OGChipSelectEditMenu</name>
|
||||||
<state></state>
|
<state>MKL25Z128xxx4 Freescale MKL25Z128xxx4</state>
|
||||||
</option>
|
</option>
|
||||||
<option>
|
<option>
|
||||||
<name>GenLowLevelInterface</name>
|
<name>GenLowLevelInterface</name>
|
||||||
|
|
@ -1058,7 +1058,7 @@
|
||||||
</option>
|
</option>
|
||||||
<option>
|
<option>
|
||||||
<name>GEndianModeBE</name>
|
<name>GEndianModeBE</name>
|
||||||
<state>0</state>
|
<state>1</state>
|
||||||
</option>
|
</option>
|
||||||
<option>
|
<option>
|
||||||
<name>OGBufferedTerminalOutput</name>
|
<name>OGBufferedTerminalOutput</name>
|
||||||
|
|
@ -1084,17 +1084,17 @@
|
||||||
</option>
|
</option>
|
||||||
<option>
|
<option>
|
||||||
<name>RTConfigPath2</name>
|
<name>RTConfigPath2</name>
|
||||||
<state></state>
|
<state>$TOOLKIT_DIR$\INC\c\DLib_Config_Normal.h</state>
|
||||||
</option>
|
</option>
|
||||||
<option>
|
<option>
|
||||||
<name>GFPUCoreSlave</name>
|
<name>GFPUCoreSlave</name>
|
||||||
<version>20</version>
|
<version>20</version>
|
||||||
<state>1</state>
|
<state>35</state>
|
||||||
</option>
|
</option>
|
||||||
<option>
|
<option>
|
||||||
<name>GBECoreSlave</name>
|
<name>GBECoreSlave</name>
|
||||||
<version>20</version>
|
<version>20</version>
|
||||||
<state>1</state>
|
<state>35</state>
|
||||||
</option>
|
</option>
|
||||||
<option>
|
<option>
|
||||||
<name>OGUseCmsis</name>
|
<name>OGUseCmsis</name>
|
||||||
|
|
@ -1119,7 +1119,10 @@
|
||||||
<debug>0</debug>
|
<debug>0</debug>
|
||||||
<option>
|
<option>
|
||||||
<name>CCDefines</name>
|
<name>CCDefines</name>
|
||||||
<state>NDEBUG</state>
|
<state>NODEBUG</state>
|
||||||
|
<state>IAR</state>
|
||||||
|
<state>MKL25Z4</state>
|
||||||
|
<state>TWR_KL25Z48M</state>
|
||||||
</option>
|
</option>
|
||||||
<option>
|
<option>
|
||||||
<name>CCPreprocFile</name>
|
<name>CCPreprocFile</name>
|
||||||
|
|
@ -1232,7 +1235,7 @@
|
||||||
</option>
|
</option>
|
||||||
<option>
|
<option>
|
||||||
<name>OutputFile</name>
|
<name>OutputFile</name>
|
||||||
<state></state>
|
<state>$FILE_BNAME$.o</state>
|
||||||
</option>
|
</option>
|
||||||
<option>
|
<option>
|
||||||
<name>CCLibConfigHeader</name>
|
<name>CCLibConfigHeader</name>
|
||||||
|
|
@ -1248,7 +1251,13 @@
|
||||||
</option>
|
</option>
|
||||||
<option>
|
<option>
|
||||||
<name>CCIncludePath2</name>
|
<name>CCIncludePath2</name>
|
||||||
<state></state>
|
<state>$PROJ_DIR$\..\src\app\include</state>
|
||||||
|
<state>$PROJ_DIR$\..\src\include\common</state>
|
||||||
|
<state>$PROJ_DIR$\..\src\include\cpu</state>
|
||||||
|
<state>$PROJ_DIR$\..\src\include\drivers</state>
|
||||||
|
<state>$PROJ_DIR$\..\src\include\drivers\FTFx</state>
|
||||||
|
<state>$PROJ_DIR$\..\src\include\platforms</state>
|
||||||
|
<state>$TOOLKIT_DIR$\inc</state>
|
||||||
</option>
|
</option>
|
||||||
<option>
|
<option>
|
||||||
<name>CCStdIncCheck</name>
|
<name>CCStdIncCheck</name>
|
||||||
|
|
@ -1277,7 +1286,7 @@
|
||||||
</option>
|
</option>
|
||||||
<option>
|
<option>
|
||||||
<name>CCOptLevelSlave</name>
|
<name>CCOptLevelSlave</name>
|
||||||
<state>1</state>
|
<state>3</state>
|
||||||
</option>
|
</option>
|
||||||
<option>
|
<option>
|
||||||
<name>CompilerMisraRules98</name>
|
<name>CompilerMisraRules98</name>
|
||||||
|
|
@ -1490,7 +1499,7 @@
|
||||||
</option>
|
</option>
|
||||||
<option>
|
<option>
|
||||||
<name>AOutputFile</name>
|
<name>AOutputFile</name>
|
||||||
<state></state>
|
<state>$FILE_BNAME$.o</state>
|
||||||
</option>
|
</option>
|
||||||
<option>
|
<option>
|
||||||
<name>AMultibyteSupport</name>
|
<name>AMultibyteSupport</name>
|
||||||
|
|
@ -1598,7 +1607,7 @@
|
||||||
</option>
|
</option>
|
||||||
<option>
|
<option>
|
||||||
<name>IlinkOutputFile</name>
|
<name>IlinkOutputFile</name>
|
||||||
<state>###Unitialized###</state>
|
<state>plan_manage_main.out</state>
|
||||||
</option>
|
</option>
|
||||||
<option>
|
<option>
|
||||||
<name>IlinkDebugInfoEnable</name>
|
<name>IlinkDebugInfoEnable</name>
|
||||||
|
|
@ -1658,11 +1667,11 @@
|
||||||
</option>
|
</option>
|
||||||
<option>
|
<option>
|
||||||
<name>IlinkIcfOverride</name>
|
<name>IlinkIcfOverride</name>
|
||||||
<state>0</state>
|
<state>1</state>
|
||||||
</option>
|
</option>
|
||||||
<option>
|
<option>
|
||||||
<name>IlinkIcfFile</name>
|
<name>IlinkIcfFile</name>
|
||||||
<state>lnk0t.icf</state>
|
<state>F:\work_space\graduation_pro\plan_manage\plan_manage_main\config_files\128KB_Pflash.icf</state>
|
||||||
</option>
|
</option>
|
||||||
<option>
|
<option>
|
||||||
<name>IlinkIcfFileSlave</name>
|
<name>IlinkIcfFileSlave</name>
|
||||||
|
|
@ -1722,7 +1731,7 @@
|
||||||
</option>
|
</option>
|
||||||
<option>
|
<option>
|
||||||
<name>IlinkProgramEntryLabel</name>
|
<name>IlinkProgramEntryLabel</name>
|
||||||
<state></state>
|
<state>__iar_program_start</state>
|
||||||
</option>
|
</option>
|
||||||
<option>
|
<option>
|
||||||
<name>DoFill</name>
|
<name>DoFill</name>
|
||||||
|
|
@ -1906,15 +1915,6 @@
|
||||||
<file>
|
<file>
|
||||||
<name>$PROJ_DIR$\..\src\app\include\debug.h</name>
|
<name>$PROJ_DIR$\..\src\app\include\debug.h</name>
|
||||||
</file>
|
</file>
|
||||||
<file>
|
|
||||||
<name>$PROJ_DIR$\..\src\app\include\display.h</name>
|
|
||||||
</file>
|
|
||||||
<file>
|
|
||||||
<name>$PROJ_DIR$\..\src\app\include\flash.h</name>
|
|
||||||
</file>
|
|
||||||
<file>
|
|
||||||
<name>$PROJ_DIR$\..\src\app\include\input.h</name>
|
|
||||||
</file>
|
|
||||||
<file>
|
<file>
|
||||||
<name>$PROJ_DIR$\..\src\app\include\isr.h</name>
|
<name>$PROJ_DIR$\..\src\app\include\isr.h</name>
|
||||||
</file>
|
</file>
|
||||||
|
|
@ -1931,10 +1931,16 @@
|
||||||
<name>$PROJ_DIR$\..\src\app\include\plan_handle.h</name>
|
<name>$PROJ_DIR$\..\src\app\include\plan_handle.h</name>
|
||||||
</file>
|
</file>
|
||||||
<file>
|
<file>
|
||||||
<name>$PROJ_DIR$\..\src\app\include\pm_time.h</name>
|
<name>$PROJ_DIR$\..\src\app\include\pm_flash.h</name>
|
||||||
</file>
|
</file>
|
||||||
<file>
|
<file>
|
||||||
<name>$PROJ_DIR$\..\src\app\include\setup.h</name>
|
<name>$PROJ_DIR$\..\src\app\include\pm_flash_cfg.h</name>
|
||||||
|
</file>
|
||||||
|
<file>
|
||||||
|
<name>$PROJ_DIR$\..\src\app\include\pm_init.h</name>
|
||||||
|
</file>
|
||||||
|
<file>
|
||||||
|
<name>$PROJ_DIR$\..\src\app\include\pm_time.h</name>
|
||||||
</file>
|
</file>
|
||||||
<file>
|
<file>
|
||||||
<name>$PROJ_DIR$\..\src\app\include\simulat_timer.h</name>
|
<name>$PROJ_DIR$\..\src\app\include\simulat_timer.h</name>
|
||||||
|
|
@ -1942,19 +1948,16 @@
|
||||||
<file>
|
<file>
|
||||||
<name>$PROJ_DIR$\..\src\app\include\tft.h</name>
|
<name>$PROJ_DIR$\..\src\app\include\tft.h</name>
|
||||||
</file>
|
</file>
|
||||||
|
<file>
|
||||||
|
<name>$PROJ_DIR$\..\src\app\include\tft_plan_internal.h</name>
|
||||||
|
</file>
|
||||||
|
<file>
|
||||||
|
<name>$PROJ_DIR$\..\src\app\include\water.h</name>
|
||||||
|
</file>
|
||||||
</group>
|
</group>
|
||||||
<file>
|
<file>
|
||||||
<name>$PROJ_DIR$\..\src\app\debug.c</name>
|
<name>$PROJ_DIR$\..\src\app\debug.c</name>
|
||||||
</file>
|
</file>
|
||||||
<file>
|
|
||||||
<name>$PROJ_DIR$\..\src\app\display.c</name>
|
|
||||||
</file>
|
|
||||||
<file>
|
|
||||||
<name>$PROJ_DIR$\..\src\app\flash.c</name>
|
|
||||||
</file>
|
|
||||||
<file>
|
|
||||||
<name>$PROJ_DIR$\..\src\app\input.c</name>
|
|
||||||
</file>
|
|
||||||
<file>
|
<file>
|
||||||
<name>$PROJ_DIR$\..\src\app\isr.c</name>
|
<name>$PROJ_DIR$\..\src\app\isr.c</name>
|
||||||
</file>
|
</file>
|
||||||
|
|
@ -1968,10 +1971,7 @@
|
||||||
<name>$PROJ_DIR$\..\src\app\main.c</name>
|
<name>$PROJ_DIR$\..\src\app\main.c</name>
|
||||||
</file>
|
</file>
|
||||||
<file>
|
<file>
|
||||||
<name>$PROJ_DIR$\..\src\app\NormalDemo_Flash.c</name>
|
<name>$PROJ_DIR$\..\src\app\orient.c</name>
|
||||||
<excluded>
|
|
||||||
<configuration>Debug</configuration>
|
|
||||||
</excluded>
|
|
||||||
</file>
|
</file>
|
||||||
<file>
|
<file>
|
||||||
<name>$PROJ_DIR$\..\src\app\output.c</name>
|
<name>$PROJ_DIR$\..\src\app\output.c</name>
|
||||||
|
|
@ -1979,6 +1979,9 @@
|
||||||
<file>
|
<file>
|
||||||
<name>$PROJ_DIR$\..\src\app\plan_handle.c</name>
|
<name>$PROJ_DIR$\..\src\app\plan_handle.c</name>
|
||||||
</file>
|
</file>
|
||||||
|
<file>
|
||||||
|
<name>$PROJ_DIR$\..\src\app\pm_flash.c</name>
|
||||||
|
</file>
|
||||||
<file>
|
<file>
|
||||||
<name>$PROJ_DIR$\..\src\app\pm_init.c</name>
|
<name>$PROJ_DIR$\..\src\app\pm_init.c</name>
|
||||||
</file>
|
</file>
|
||||||
|
|
@ -1991,6 +1994,9 @@
|
||||||
<file>
|
<file>
|
||||||
<name>$PROJ_DIR$\..\src\app\tft.c</name>
|
<name>$PROJ_DIR$\..\src\app\tft.c</name>
|
||||||
</file>
|
</file>
|
||||||
|
<file>
|
||||||
|
<name>$PROJ_DIR$\..\src\app\water.c</name>
|
||||||
|
</file>
|
||||||
</group>
|
</group>
|
||||||
<group>
|
<group>
|
||||||
<name>common</name>
|
<name>common</name>
|
||||||
|
|
|
||||||
|
|
@ -182,15 +182,6 @@
|
||||||
<file>
|
<file>
|
||||||
<name>$PROJ_DIR$\..\src\app\include\debug.h</name>
|
<name>$PROJ_DIR$\..\src\app\include\debug.h</name>
|
||||||
</file>
|
</file>
|
||||||
<file>
|
|
||||||
<name>$PROJ_DIR$\..\src\app\include\display.h</name>
|
|
||||||
</file>
|
|
||||||
<file>
|
|
||||||
<name>$PROJ_DIR$\..\src\app\include\flash.h</name>
|
|
||||||
</file>
|
|
||||||
<file>
|
|
||||||
<name>$PROJ_DIR$\..\src\app\include\input.h</name>
|
|
||||||
</file>
|
|
||||||
<file>
|
<file>
|
||||||
<name>$PROJ_DIR$\..\src\app\include\isr.h</name>
|
<name>$PROJ_DIR$\..\src\app\include\isr.h</name>
|
||||||
</file>
|
</file>
|
||||||
|
|
@ -207,10 +198,16 @@
|
||||||
<name>$PROJ_DIR$\..\src\app\include\plan_handle.h</name>
|
<name>$PROJ_DIR$\..\src\app\include\plan_handle.h</name>
|
||||||
</file>
|
</file>
|
||||||
<file>
|
<file>
|
||||||
<name>$PROJ_DIR$\..\src\app\include\pm_time.h</name>
|
<name>$PROJ_DIR$\..\src\app\include\pm_flash.h</name>
|
||||||
</file>
|
</file>
|
||||||
<file>
|
<file>
|
||||||
<name>$PROJ_DIR$\..\src\app\include\setup.h</name>
|
<name>$PROJ_DIR$\..\src\app\include\pm_flash_cfg.h</name>
|
||||||
|
</file>
|
||||||
|
<file>
|
||||||
|
<name>$PROJ_DIR$\..\src\app\include\pm_init.h</name>
|
||||||
|
</file>
|
||||||
|
<file>
|
||||||
|
<name>$PROJ_DIR$\..\src\app\include\pm_time.h</name>
|
||||||
</file>
|
</file>
|
||||||
<file>
|
<file>
|
||||||
<name>$PROJ_DIR$\..\src\app\include\simulat_timer.h</name>
|
<name>$PROJ_DIR$\..\src\app\include\simulat_timer.h</name>
|
||||||
|
|
@ -218,19 +215,16 @@
|
||||||
<file>
|
<file>
|
||||||
<name>$PROJ_DIR$\..\src\app\include\tft.h</name>
|
<name>$PROJ_DIR$\..\src\app\include\tft.h</name>
|
||||||
</file>
|
</file>
|
||||||
|
<file>
|
||||||
|
<name>$PROJ_DIR$\..\src\app\include\tft_plan_internal.h</name>
|
||||||
|
</file>
|
||||||
|
<file>
|
||||||
|
<name>$PROJ_DIR$\..\src\app\include\water.h</name>
|
||||||
|
</file>
|
||||||
</group>
|
</group>
|
||||||
<file>
|
<file>
|
||||||
<name>$PROJ_DIR$\..\src\app\debug.c</name>
|
<name>$PROJ_DIR$\..\src\app\debug.c</name>
|
||||||
</file>
|
</file>
|
||||||
<file>
|
|
||||||
<name>$PROJ_DIR$\..\src\app\display.c</name>
|
|
||||||
</file>
|
|
||||||
<file>
|
|
||||||
<name>$PROJ_DIR$\..\src\app\flash.c</name>
|
|
||||||
</file>
|
|
||||||
<file>
|
|
||||||
<name>$PROJ_DIR$\..\src\app\input.c</name>
|
|
||||||
</file>
|
|
||||||
<file>
|
<file>
|
||||||
<name>$PROJ_DIR$\..\src\app\isr.c</name>
|
<name>$PROJ_DIR$\..\src\app\isr.c</name>
|
||||||
</file>
|
</file>
|
||||||
|
|
@ -244,7 +238,7 @@
|
||||||
<name>$PROJ_DIR$\..\src\app\main.c</name>
|
<name>$PROJ_DIR$\..\src\app\main.c</name>
|
||||||
</file>
|
</file>
|
||||||
<file>
|
<file>
|
||||||
<name>$PROJ_DIR$\..\src\app\NormalDemo_Flash.c</name>
|
<name>$PROJ_DIR$\..\src\app\orient.c</name>
|
||||||
</file>
|
</file>
|
||||||
<file>
|
<file>
|
||||||
<name>$PROJ_DIR$\..\src\app\output.c</name>
|
<name>$PROJ_DIR$\..\src\app\output.c</name>
|
||||||
|
|
@ -252,6 +246,9 @@
|
||||||
<file>
|
<file>
|
||||||
<name>$PROJ_DIR$\..\src\app\plan_handle.c</name>
|
<name>$PROJ_DIR$\..\src\app\plan_handle.c</name>
|
||||||
</file>
|
</file>
|
||||||
|
<file>
|
||||||
|
<name>$PROJ_DIR$\..\src\app\pm_flash.c</name>
|
||||||
|
</file>
|
||||||
<file>
|
<file>
|
||||||
<name>$PROJ_DIR$\..\src\app\pm_init.c</name>
|
<name>$PROJ_DIR$\..\src\app\pm_init.c</name>
|
||||||
</file>
|
</file>
|
||||||
|
|
@ -264,6 +261,9 @@
|
||||||
<file>
|
<file>
|
||||||
<name>$PROJ_DIR$\..\src\app\tft.c</name>
|
<name>$PROJ_DIR$\..\src\app\tft.c</name>
|
||||||
</file>
|
</file>
|
||||||
|
<file>
|
||||||
|
<name>$PROJ_DIR$\..\src\app\water.c</name>
|
||||||
|
</file>
|
||||||
</group>
|
</group>
|
||||||
<group>
|
<group>
|
||||||
<name>common</name>
|
<name>common</name>
|
||||||
|
|
|
||||||
|
|
@ -19,6 +19,6 @@
|
||||||
@REM
|
@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"
|
"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" "--drv_attach_to_program" "--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"
|
||||||
|
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -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\armsim2.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=none" "--device=MKL25Z128xxx4" "--drv_mtb_regbase=0xF0000000" "--drv_mtb_dwtregbase=0xF0001000" "--drv_mtb_minramaddr=0x20000000" "--drv_mtb_maxramaddr=0x20002FFF" "--multicore_nr_of_cores=1"
|
||||||
|
|
||||||
|
|
||||||
File diff suppressed because one or more lines are too long
|
|
@ -9,7 +9,7 @@ TriggerName=main
|
||||||
LimitSize=0
|
LimitSize=0
|
||||||
ByteLimit=50
|
ByteLimit=50
|
||||||
[DebugChecksum]
|
[DebugChecksum]
|
||||||
Checksum=130347300
|
Checksum=2097835749
|
||||||
[CodeCoverage]
|
[CodeCoverage]
|
||||||
Enabled=_ 0
|
Enabled=_ 0
|
||||||
[Exceptions]
|
[Exceptions]
|
||||||
|
|
@ -19,6 +19,72 @@ StopOnThrow=_ 0
|
||||||
ShowArgs=0
|
ShowArgs=0
|
||||||
[Disassembly]
|
[Disassembly]
|
||||||
MixedMode=1
|
MixedMode=1
|
||||||
|
[JLinkDriver]
|
||||||
|
CStepIntDis=_ 0
|
||||||
|
TraceBufferSize=0x00010000
|
||||||
|
TraceStallIfFIFOFull=0x00000000
|
||||||
|
TracePortSize=0x00000004
|
||||||
|
[SWOTraceHWSettings]
|
||||||
|
OverrideDefaultClocks=0
|
||||||
|
CpuClock=72000000
|
||||||
|
ClockAutoDetect=0
|
||||||
|
ClockWanted=2000000
|
||||||
|
JtagSpeed=2000000
|
||||||
|
Prescaler=36
|
||||||
|
TimeStampPrescIndex=0
|
||||||
|
TimeStampPrescData=0
|
||||||
|
PcSampCYCTAP=1
|
||||||
|
PcSampPOSTCNT=15
|
||||||
|
PcSampIndex=0
|
||||||
|
DataLogMode=0
|
||||||
|
ITMportsEnable=0
|
||||||
|
ITMportsTermIO=0
|
||||||
|
ITMportsLogFile=0
|
||||||
|
ITMlogFile=$PROJ_DIR$\ITM.log
|
||||||
|
[SWOTraceWindow]
|
||||||
|
PcSampling=0
|
||||||
|
InterruptLogs=0
|
||||||
|
ForcedTimeStamps=0
|
||||||
|
EventCPI=0
|
||||||
|
EventEXC=0
|
||||||
|
EventFOLD=0
|
||||||
|
EventLSU=0
|
||||||
|
EventSLEEP=0
|
||||||
|
[PowerLog]
|
||||||
|
LogEnabled=0
|
||||||
|
GraphEnabled=0
|
||||||
|
ShowTimeLog=1
|
||||||
|
ShowTimeSum=0
|
||||||
|
Title_0=I0
|
||||||
|
Symbol_0=0 4 1
|
||||||
|
LiveEnabled=0
|
||||||
|
LiveFile=PowerLogLive.log
|
||||||
|
[EventLog]
|
||||||
|
LogEnabled=0
|
||||||
|
SumEnabled=0
|
||||||
|
GraphEnabled=0
|
||||||
|
ShowTimeLog=1
|
||||||
|
ShowTimeSum=1
|
||||||
|
SumSortOrder=0
|
||||||
|
[Log file]
|
||||||
|
LoggingEnabled=_ 0
|
||||||
|
LogFile=_ ""
|
||||||
|
Category=_ 0
|
||||||
|
[TermIOLog]
|
||||||
|
LoggingEnabled=_ 0
|
||||||
|
LogFile=_ ""
|
||||||
|
[CallStackLog]
|
||||||
|
Enabled=0
|
||||||
|
[PowerProbe]
|
||||||
|
Frequency=10000
|
||||||
|
Probe0=I0
|
||||||
|
ProbeSetup0=2 1 1 2 0 0
|
||||||
|
[DriverProfiling]
|
||||||
|
Enabled=0
|
||||||
|
Mode=1
|
||||||
|
Graph=0
|
||||||
|
Symbiont=0
|
||||||
|
Exclusions=
|
||||||
[InterruptLog]
|
[InterruptLog]
|
||||||
LogEnabled=0
|
LogEnabled=0
|
||||||
SumEnabled=0
|
SumEnabled=0
|
||||||
|
|
@ -43,34 +109,10 @@ Stop=1
|
||||||
[Simulator]
|
[Simulator]
|
||||||
Freq=10000000
|
Freq=10000000
|
||||||
MultiCoreRunAll=1
|
MultiCoreRunAll=1
|
||||||
[JLinkDriver]
|
|
||||||
CStepIntDis=_ 0
|
|
||||||
TraceBufferSize=0x00010000
|
|
||||||
TraceStallIfFIFOFull=0x00000000
|
|
||||||
TracePortSize=0x00000004
|
|
||||||
[Trace1]
|
|
||||||
Enabled=0
|
|
||||||
ShowSource=1
|
|
||||||
[Disassemble mode]
|
[Disassemble mode]
|
||||||
mode=0
|
mode=0
|
||||||
[Breakpoints2]
|
[Breakpoints2]
|
||||||
Bp0=_ 0 "EMUL_CODE" "{$PROJ_DIR$\..\src\app\flash.c}.156.9" 0 0 1 "" 0 "" 0
|
Count=0
|
||||||
Count=1
|
|
||||||
[Log file]
|
|
||||||
LoggingEnabled=_ 0
|
|
||||||
LogFile=_ ""
|
|
||||||
Category=_ 0
|
|
||||||
[TermIOLog]
|
|
||||||
LoggingEnabled=_ 0
|
|
||||||
LogFile=_ ""
|
|
||||||
[Aliases]
|
[Aliases]
|
||||||
Count=0
|
Count=0
|
||||||
SuppressDialog=0
|
SuppressDialog=0
|
||||||
[CallStackLog]
|
|
||||||
Enabled=0
|
|
||||||
[DriverProfiling]
|
|
||||||
Enabled=0
|
|
||||||
Mode=1
|
|
||||||
Graph=0
|
|
||||||
Symbiont=0
|
|
||||||
Exclusions=
|
|
||||||
|
|
|
||||||
BIN
plan_manage_main/res/pm_tft_001.HMI
Normal file
BIN
plan_manage_main/res/pm_tft_001.HMI
Normal file
Binary file not shown.
|
|
@ -1,533 +0,0 @@
|
||||||
/****************************************************************************
|
|
||||||
(c) Copyright 2013-2014 Freescale Semiconductor, Inc.
|
|
||||||
ALL RIGHTS RESERVED.
|
|
||||||
|
|
||||||
Redistribution and use in source and binary forms, with or without
|
|
||||||
modification, are permitted provided that the following conditions are met:
|
|
||||||
* Redistributions of source code must retain the above copyright
|
|
||||||
notice, this list of conditions and the following disclaimer.
|
|
||||||
* Redistributions in binary form must reproduce the above copyright
|
|
||||||
notice, this list of conditions and the following disclaimer in the
|
|
||||||
documentation and/or other materials provided with the distribution.
|
|
||||||
* Neither the name of the <organization> nor the
|
|
||||||
names of its contributors may be used to endorse or promote products
|
|
||||||
derived from this software without specific prior written permission.
|
|
||||||
|
|
||||||
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
|
|
||||||
ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
|
|
||||||
WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
|
|
||||||
DISCLAIMED. IN NO EVENT SHALL <COPYRIGHT HOLDER> BE LIABLE FOR ANY DIRECT,
|
|
||||||
INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
|
|
||||||
(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
|
|
||||||
LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
|
|
||||||
ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
|
|
||||||
(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
|
|
||||||
SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
|
||||||
*****************************************************************************
|
|
||||||
|
|
||||||
*************************************************************************
|
|
||||||
* *
|
|
||||||
* Standard Software Flash Driver For FTFx *
|
|
||||||
* *
|
|
||||||
* FILE NAME : NormalDemo_Flash.c *
|
|
||||||
* DATE : April 08, 2014 *
|
|
||||||
* *
|
|
||||||
* AUTHOR : FPT Team *
|
|
||||||
* E-mail : r56611@freescale.com *
|
|
||||||
* *
|
|
||||||
*************************************************************************/
|
|
||||||
|
|
||||||
/************************** CHANGES *************************************
|
|
||||||
0.1.0 04.23.2013 FPT Team Initial Version
|
|
||||||
1.0.0 11.25.2013 FPT Team Optimize Version
|
|
||||||
1.0.2 08.04.2014 FPT Team Update to follow SDK convention(MISRA-C)
|
|
||||||
*************************************************************************/
|
|
||||||
/* include the header files */
|
|
||||||
#include "SSD_FTFx.h"
|
|
||||||
#include "demo_cfg.h"
|
|
||||||
|
|
||||||
|
|
||||||
FLASH_SSD_CONFIG flashSSDConfig =
|
|
||||||
{
|
|
||||||
FTFx_REG_BASE, /* FTFx control register base */
|
|
||||||
PFLASH_BLOCK_BASE, /* base address of PFlash block */
|
|
||||||
PBLOCK_SIZE, /* size of PFlash block */
|
|
||||||
DEFLASH_BLOCK_BASE, /* base address of DFlash block */
|
|
||||||
0x0U, /* size of DFlash block */
|
|
||||||
EERAM_BLOCK_BASE, /* base address of EERAM block */
|
|
||||||
0x0U, /* size of EEE block */
|
|
||||||
DEBUGENABLE, /* background debug mode enable bit */
|
|
||||||
NULL_CALLBACK /* pointer to callback function */
|
|
||||||
};
|
|
||||||
|
|
||||||
#define CALLBACK_SIZE 0x30U
|
|
||||||
#define LAUNCH_CMD_SIZE 0x80U
|
|
||||||
|
|
||||||
uint8_t DataArray[PGM_SIZE_BYTE];
|
|
||||||
uint8_t buffer[BUFFER_SIZE_BYTE];
|
|
||||||
uint32_t gCallBackCnt; /* global counter in callback(). */
|
|
||||||
pFLASHCOMMANDSEQUENCE g_FlashLaunchCommand = (pFLASHCOMMANDSEQUENCE)0xFFFFFFFF;
|
|
||||||
|
|
||||||
uint16_t __ram_func[LAUNCH_CMD_SIZE/2]; /* array to copy __Launch_Command func to RAM */
|
|
||||||
uint16_t __ram_for_callback[CALLBACK_SIZE/2]; /* length of this array depends on total size of the functions need to be copied to RAM*/
|
|
||||||
void callback(void);
|
|
||||||
|
|
||||||
/*********************************************************************
|
|
||||||
*
|
|
||||||
* Function Name : main
|
|
||||||
* Description : Main function
|
|
||||||
*
|
|
||||||
* Arguments : void
|
|
||||||
* Return Value : UNIT32
|
|
||||||
*
|
|
||||||
**********************************************************************/
|
|
||||||
void main(void)
|
|
||||||
{
|
|
||||||
uint32_t ret; /* Return code from each SSD function */
|
|
||||||
uint32_t dest; /* Address of the target location */
|
|
||||||
uint32_t size;
|
|
||||||
uint8_t securityStatus; /* Return protection status */
|
|
||||||
uint32_t protectStatus; /* Store Protection Status Value of PFLSH or DFLASH or EEPROM */
|
|
||||||
uint32_t FailAddr;
|
|
||||||
uint16_t number; /* Number of longword or phrase to be program or verify*/
|
|
||||||
uint32_t sum;
|
|
||||||
uint32_t temp;
|
|
||||||
uint32_t i;
|
|
||||||
uint32_t j;
|
|
||||||
|
|
||||||
gCallBackCnt = 0x0U;
|
|
||||||
|
|
||||||
#if ((defined(X_TWR_KV10Z32)) || defined(KM34Z50M_BACES) || (defined(TWR_KL46Z48M)))
|
|
||||||
CACHE_DISABLE
|
|
||||||
#else
|
|
||||||
//CACHE_DISABLE
|
|
||||||
#endif
|
|
||||||
|
|
||||||
/* Set CallBack to callback function */
|
|
||||||
flashSSDConfig.CallBack = (PCALLBACK)RelocateFunction((uint32_t)__ram_for_callback , CALLBACK_SIZE , (uint32_t)callback);
|
|
||||||
g_FlashLaunchCommand = (pFLASHCOMMANDSEQUENCE)RelocateFunction((uint32_t)__ram_func , LAUNCH_CMD_SIZE ,(uint32_t)FlashCommandSequence);
|
|
||||||
|
|
||||||
/**************************************************************************
|
|
||||||
* FlashInit() *
|
|
||||||
***************************************************************************/
|
|
||||||
ret = FlashInit(&flashSSDConfig);
|
|
||||||
if (FTFx_OK != ret)
|
|
||||||
{
|
|
||||||
ErrorTrap(ret);
|
|
||||||
}
|
|
||||||
|
|
||||||
#ifdef twr_mc56f82748
|
|
||||||
PE_low_level_init();
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#if ((!(defined(FTFA_M))) || (defined(BLOCK_COMMANDS)))
|
|
||||||
/**************************************************************************
|
|
||||||
* FlashEraseBlock() and FlashVerifyBlock() *
|
|
||||||
***************************************************************************/
|
|
||||||
/* Erase for each individual Pflash block */
|
|
||||||
for (i = 0x1U; i < PBLOCK_NUM; i++)
|
|
||||||
{
|
|
||||||
dest = flashSSDConfig.PFlashBlockBase + BYTE2WORD(i*flashSSDConfig.PFlashBlockSize/PBLOCK_NUM);
|
|
||||||
ret = FlashEraseBlock(&flashSSDConfig, dest, g_FlashLaunchCommand);
|
|
||||||
if (FTFx_OK != ret)
|
|
||||||
{
|
|
||||||
ErrorTrap(ret);
|
|
||||||
}
|
|
||||||
/* verification for normal and user margin levels */
|
|
||||||
for (j = 0x0U; j < 0x2U; j++)
|
|
||||||
{
|
|
||||||
ret = FlashVerifyBlock(&flashSSDConfig, dest, j, g_FlashLaunchCommand);
|
|
||||||
if (FTFx_OK != ret)
|
|
||||||
{
|
|
||||||
ErrorTrap(ret);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
#endif
|
|
||||||
|
|
||||||
/**************************************************************************
|
|
||||||
* FlashEraseSector() and FlashVerifySection() *
|
|
||||||
***************************************************************************/
|
|
||||||
/* Erase several sectors on Pflash*/
|
|
||||||
dest = flashSSDConfig.PFlashBlockBase + BYTE2WORD(flashSSDConfig.PFlashBlockSize - 0x4U * FTFx_PSECTOR_SIZE);
|
|
||||||
while ((dest + BYTE2WORD(FTFx_PSECTOR_SIZE)) < (flashSSDConfig.PFlashBlockBase + BYTE2WORD(flashSSDConfig.PFlashBlockSize)))
|
|
||||||
{
|
|
||||||
size = FTFx_PSECTOR_SIZE;
|
|
||||||
ret = FlashEraseSector(&flashSSDConfig, dest, size, g_FlashLaunchCommand);
|
|
||||||
if (FTFx_OK != ret)
|
|
||||||
{
|
|
||||||
ErrorTrap(ret);
|
|
||||||
}
|
|
||||||
|
|
||||||
/* Verify section for several sector of PFLASH */
|
|
||||||
number = FTFx_PSECTOR_SIZE / PRD1SEC_ALIGN_SIZE;
|
|
||||||
for(i = 0x0U; i < 0x2U; i++)
|
|
||||||
{
|
|
||||||
ret = FlashVerifySection(&flashSSDConfig, dest, number, i, g_FlashLaunchCommand);
|
|
||||||
if (FTFx_OK != ret)
|
|
||||||
{
|
|
||||||
ErrorTrap(ret);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
dest += BYTE2WORD(size);
|
|
||||||
}
|
|
||||||
|
|
||||||
#if (0x0U != DEBLOCK_SIZE)
|
|
||||||
/* Erase several sectors on Dflash*/
|
|
||||||
dest = flashSSDConfig.DFlashBlockBase;
|
|
||||||
while ((dest + BYTE2WORD(FTFx_DSECTOR_SIZE)) < (flashSSDConfig.DFlashBlockBase + BYTE2WORD(4*FTFx_DSECTOR_SIZE)))
|
|
||||||
{
|
|
||||||
size = FTFx_DSECTOR_SIZE;
|
|
||||||
ret = FlashEraseSector(&flashSSDConfig, dest, size, g_FlashLaunchCommand);
|
|
||||||
if (FTFx_OK != ret)
|
|
||||||
{
|
|
||||||
ErrorTrap(ret);
|
|
||||||
}
|
|
||||||
|
|
||||||
/* Verify section for several sector of DFLASH */
|
|
||||||
number = FTFx_DSECTOR_SIZE/DRD1SEC_ALIGN_SIZE;
|
|
||||||
for(i = 0x0U; i < 0x2U; i ++)
|
|
||||||
{
|
|
||||||
ret = FlashVerifySection(&flashSSDConfig, dest, number, i, g_FlashLaunchCommand);
|
|
||||||
if (FTFx_OK != ret)
|
|
||||||
{
|
|
||||||
ErrorTrap(ret);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
dest += BYTE2WORD(FTFx_DSECTOR_SIZE);
|
|
||||||
|
|
||||||
}
|
|
||||||
#endif /* DEBLOCK_SIZE */
|
|
||||||
|
|
||||||
/**************************************************************************
|
|
||||||
* FlashProgram() FlashCheckSum and FlashProgramCheck() *
|
|
||||||
***************************************************************************/
|
|
||||||
/* Initialize source buffer */
|
|
||||||
for (i = 0x0U; i < BUFFER_SIZE_BYTE; i++)
|
|
||||||
{
|
|
||||||
/* Set source buffer */
|
|
||||||
buffer[i] = i;
|
|
||||||
}
|
|
||||||
|
|
||||||
/* Program to the end location of PFLASH */
|
|
||||||
size = BUFFER_SIZE_BYTE;
|
|
||||||
dest = flashSSDConfig.PFlashBlockBase + BYTE2WORD(flashSSDConfig.PFlashBlockSize - (uint32_t)(0x3U * FTFx_PSECTOR_SIZE));
|
|
||||||
|
|
||||||
while ((dest + BYTE2WORD(size)) < (flashSSDConfig.PFlashBlockBase + BYTE2WORD(flashSSDConfig.PFlashBlockSize)))
|
|
||||||
{
|
|
||||||
ret = FlashProgram(&flashSSDConfig, dest, size, \
|
|
||||||
buffer, g_FlashLaunchCommand);
|
|
||||||
if (FTFx_OK != ret)
|
|
||||||
{
|
|
||||||
ErrorTrap(ret);
|
|
||||||
}
|
|
||||||
|
|
||||||
/* Flash CheckSum */
|
|
||||||
sum = temp = 0x0U;
|
|
||||||
for (i = 0x0U; i < size; i++)
|
|
||||||
{
|
|
||||||
temp += buffer[i];
|
|
||||||
}
|
|
||||||
ret = FlashCheckSum(&flashSSDConfig, dest, size, &sum);
|
|
||||||
if ((FTFx_OK != ret) || (temp != sum))
|
|
||||||
{
|
|
||||||
ErrorTrap(ret);
|
|
||||||
}
|
|
||||||
|
|
||||||
/* Program Check for normal and user margin levels*/
|
|
||||||
for (i = 0x1U; i < 0x3U; i ++)
|
|
||||||
{
|
|
||||||
ret = FlashProgramCheck(&flashSSDConfig, dest, size, buffer, \
|
|
||||||
&FailAddr, i, g_FlashLaunchCommand);
|
|
||||||
if (FTFx_OK != ret)
|
|
||||||
{
|
|
||||||
ErrorTrap(ret);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
dest += BYTE2WORD(BUFFER_SIZE_BYTE);
|
|
||||||
}
|
|
||||||
|
|
||||||
#if (0x0 != DEBLOCK_SIZE)
|
|
||||||
/* Program to the DFLASH block*/
|
|
||||||
size = BUFFER_SIZE_BYTE;
|
|
||||||
dest = flashSSDConfig.DFlashBlockBase;
|
|
||||||
while ((dest + BYTE2WORD(size)) < (flashSSDConfig.DFlashBlockBase + BYTE2WORD(0x4U * FTFx_DSECTOR_SIZE)))
|
|
||||||
{
|
|
||||||
ret = FlashProgram(&flashSSDConfig, dest, size, \
|
|
||||||
buffer, g_FlashLaunchCommand);
|
|
||||||
if (FTFx_OK != ret)
|
|
||||||
{
|
|
||||||
ErrorTrap(ret);
|
|
||||||
}
|
|
||||||
|
|
||||||
/* Flash CheckSum */
|
|
||||||
sum = 0x0U;
|
|
||||||
ret = FlashCheckSum(&flashSSDConfig, dest, size, &sum);
|
|
||||||
if ((FTFx_OK != ret) || (temp != sum))
|
|
||||||
{
|
|
||||||
ErrorTrap(ret);
|
|
||||||
}
|
|
||||||
|
|
||||||
/* Program Check for normal and user margin levels*/
|
|
||||||
for (i = 0x1U; i < 0x3U; i++)
|
|
||||||
{
|
|
||||||
ret = FlashProgramCheck(&flashSSDConfig, dest, size, buffer, \
|
|
||||||
&FailAddr, i, g_FlashLaunchCommand);
|
|
||||||
if (FTFx_OK != ret)
|
|
||||||
{
|
|
||||||
ErrorTrap(ret);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
dest += BYTE2WORD(BUFFER_SIZE_BYTE);
|
|
||||||
}
|
|
||||||
|
|
||||||
/**************************************************************************
|
|
||||||
* SetEEEEnable() *
|
|
||||||
***************************************************************************/
|
|
||||||
|
|
||||||
ret = SetEEEEnable(&flashSSDConfig, RAM_ENABLE ,g_FlashLaunchCommand);
|
|
||||||
if (FTFx_OK != ret)
|
|
||||||
{
|
|
||||||
ErrorTrap(ret);
|
|
||||||
}
|
|
||||||
|
|
||||||
#endif /* DEBLOCK_SIZE */
|
|
||||||
|
|
||||||
#ifndef FTFA_M
|
|
||||||
/**************************************************************************
|
|
||||||
* FlashProgramSection() *
|
|
||||||
***************************************************************************/
|
|
||||||
/* Write some values to EERAM */
|
|
||||||
for (i = 0x0U; i < 0x100U; i += 0x4U)
|
|
||||||
{
|
|
||||||
WRITE32(flashSSDConfig.EERAMBlockBase + i,0x11223344U);
|
|
||||||
}
|
|
||||||
/* Erase sector for program section */
|
|
||||||
dest = flashSSDConfig.PFlashBlockBase + BYTE2WORD(flashSSDConfig.PFlashBlockSize/PBLOCK_NUM - 0x4U * FTFx_PSECTOR_SIZE);
|
|
||||||
ret = FlashEraseSector(&flashSSDConfig, dest, FTFx_PSECTOR_SIZE, \
|
|
||||||
g_FlashLaunchCommand);
|
|
||||||
if (FTFx_OK != ret)
|
|
||||||
{
|
|
||||||
ErrorTrap(ret);
|
|
||||||
}
|
|
||||||
|
|
||||||
/* Program section to the flash block*/
|
|
||||||
number = 0x2U;
|
|
||||||
ret = FlashProgramSection(&flashSSDConfig, dest, number, g_FlashLaunchCommand);
|
|
||||||
if (FTFx_OK != ret)
|
|
||||||
{
|
|
||||||
ErrorTrap(ret);
|
|
||||||
}
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#if (0x0U != DEBLOCK_SIZE)
|
|
||||||
/* Erase the first sector of DFlash */
|
|
||||||
dest = flashSSDConfig.DFlashBlockBase;
|
|
||||||
ret = FlashEraseSector(&flashSSDConfig, dest, FTFx_PSECTOR_SIZE, \
|
|
||||||
g_FlashLaunchCommand);
|
|
||||||
if (FTFx_OK != ret)
|
|
||||||
{
|
|
||||||
ErrorTrap(ret);
|
|
||||||
}
|
|
||||||
/* Program the 1st sector of DFLASH */
|
|
||||||
number = FTFx_DSECTOR_SIZE / (DPGMSEC_ALIGN_SIZE * 0x4U);
|
|
||||||
dest = flashSSDConfig.DFlashBlockBase;
|
|
||||||
ret = FlashProgramSection(&flashSSDConfig, dest, number, g_FlashLaunchCommand);
|
|
||||||
if (FTFx_OK != ret)
|
|
||||||
{
|
|
||||||
ErrorTrap(ret);
|
|
||||||
}
|
|
||||||
#endif /* DEBLOCK_SIZE */
|
|
||||||
|
|
||||||
/**************************************************************************
|
|
||||||
* FlashGetSecurityState() *
|
|
||||||
***************************************************************************/
|
|
||||||
securityStatus = 0x0U;
|
|
||||||
ret = FlashGetSecurityState(&flashSSDConfig, &securityStatus);
|
|
||||||
|
|
||||||
if (FTFx_OK != ret)
|
|
||||||
{
|
|
||||||
ErrorTrap(ret);
|
|
||||||
}
|
|
||||||
/**************************************************************************
|
|
||||||
* FlashReadResource() *
|
|
||||||
***************************************************************************/
|
|
||||||
/* Read on P-Flash */
|
|
||||||
dest = flashSSDConfig.PFlashBlockBase + PFLASH_IFR; /* Start address of Program Once Field */
|
|
||||||
ret = FlashReadResource(&flashSSDConfig, dest, DataArray, 0x0U, g_FlashLaunchCommand);
|
|
||||||
|
|
||||||
if (FTFx_OK != ret)
|
|
||||||
{
|
|
||||||
ErrorTrap(ret);
|
|
||||||
}
|
|
||||||
|
|
||||||
#if (DEBLOCK_SIZE != 0)
|
|
||||||
/* Read on D-Flash */
|
|
||||||
dest = flashSSDConfig.DFlashBlockBase + DFLASH_IFR;
|
|
||||||
ret = FlashReadResource(&flashSSDConfig, dest, DataArray, 0x0U, g_FlashLaunchCommand);
|
|
||||||
|
|
||||||
if (FTFx_OK != ret)
|
|
||||||
{
|
|
||||||
ErrorTrap(ret);
|
|
||||||
}
|
|
||||||
|
|
||||||
/**************************************************************************
|
|
||||||
* DEFlashPartition() *
|
|
||||||
***************************************************************************/
|
|
||||||
if (0x0U == flashSSDConfig.EEEBlockSize)
|
|
||||||
{
|
|
||||||
ret = DEFlashPartition(&flashSSDConfig, \
|
|
||||||
EEE_DATA_SIZE_CODE, \
|
|
||||||
DE_PARTITION_CODE, \
|
|
||||||
g_FlashLaunchCommand);
|
|
||||||
if (FTFx_OK != ret)
|
|
||||||
{
|
|
||||||
ErrorTrap(ret);
|
|
||||||
}
|
|
||||||
|
|
||||||
/* Call FlashInit again to get the new Flash configuration */
|
|
||||||
ret = FlashInit(&flashSSDConfig);
|
|
||||||
if (FTFx_OK != ret)
|
|
||||||
{
|
|
||||||
ErrorTrap(ret);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
/**************************************************************************
|
|
||||||
* EEEWrite() *
|
|
||||||
***************************************************************************/
|
|
||||||
dest = flashSSDConfig.EERAMBlockBase;
|
|
||||||
size = FTFx_WORD_SIZE;
|
|
||||||
ret = EEEWrite(&flashSSDConfig, dest, size, buffer);
|
|
||||||
if (FTFx_OK != ret)
|
|
||||||
{
|
|
||||||
ErrorTrap(ret);
|
|
||||||
}
|
|
||||||
|
|
||||||
/**************************************************************************
|
|
||||||
* EEEWrite() *
|
|
||||||
***************************************************************************/
|
|
||||||
ret = SetEEEEnable(&flashSSDConfig, EE_ENABLE ,g_FlashLaunchCommand);
|
|
||||||
if (FTFx_OK != ret)
|
|
||||||
{
|
|
||||||
ErrorTrap(ret);
|
|
||||||
}
|
|
||||||
|
|
||||||
dest = flashSSDConfig.EERAMBlockBase;
|
|
||||||
size = FTFx_WORD_SIZE;
|
|
||||||
ret = EEEWrite(&flashSSDConfig, dest, size, buffer);
|
|
||||||
if (FTFx_OK != ret)
|
|
||||||
{
|
|
||||||
ErrorTrap(ret);
|
|
||||||
}
|
|
||||||
|
|
||||||
/**************************************************************************
|
|
||||||
* EERAMGetProtection() *
|
|
||||||
***************************************************************************/
|
|
||||||
ret = EERAMGetProtection(&flashSSDConfig, (uint8_t *)&protectStatus);
|
|
||||||
if (FTFx_OK != ret)
|
|
||||||
{
|
|
||||||
ErrorTrap(ret);
|
|
||||||
}
|
|
||||||
|
|
||||||
/**************************************************************************
|
|
||||||
* EERAMSetProtection() *
|
|
||||||
***************************************************************************/
|
|
||||||
protectStatus = 0xABU;
|
|
||||||
ret = EERAMSetProtection(&flashSSDConfig, (uint8_t)protectStatus);
|
|
||||||
if (FTFx_OK != ret)
|
|
||||||
{
|
|
||||||
ErrorTrap(ret);
|
|
||||||
}
|
|
||||||
|
|
||||||
/* Call EERAMGetProtection to verify the set step */
|
|
||||||
ret = EERAMGetProtection(&flashSSDConfig, (uint8_t *)&protectStatus);
|
|
||||||
if ((FTFx_OK != ret) || (0xABU != (uint8_t)protectStatus))
|
|
||||||
{
|
|
||||||
ErrorTrap(ret);
|
|
||||||
}
|
|
||||||
|
|
||||||
/**************************************************************************
|
|
||||||
* DFlashGetProtection() *
|
|
||||||
***************************************************************************/
|
|
||||||
ret = DFlashGetProtection(&flashSSDConfig, (uint8_t *)&protectStatus);
|
|
||||||
if (FTFx_OK != ret)
|
|
||||||
{
|
|
||||||
ErrorTrap(ret);
|
|
||||||
}
|
|
||||||
|
|
||||||
/**************************************************************************
|
|
||||||
* DFlashSetProtection() *
|
|
||||||
***************************************************************************/
|
|
||||||
protectStatus = 0xAAU;
|
|
||||||
ret = DFlashSetProtection(&flashSSDConfig, (uint8_t)protectStatus);
|
|
||||||
if (FTFx_OK != ret)
|
|
||||||
{
|
|
||||||
ErrorTrap(ret);
|
|
||||||
}
|
|
||||||
|
|
||||||
/* Call DFlashGetProtection to verify the set step */
|
|
||||||
ret = DFlashGetProtection(&flashSSDConfig, (uint8_t *)&protectStatus);
|
|
||||||
if ((FTFx_OK != ret) || (0xAAU != (uint8_t)protectStatus))
|
|
||||||
{
|
|
||||||
ErrorTrap(ret);
|
|
||||||
}
|
|
||||||
|
|
||||||
#endif /* DEBLOCK_SIZE */
|
|
||||||
|
|
||||||
/**************************************************************************
|
|
||||||
* PFlashGetProtection() *
|
|
||||||
***************************************************************************/
|
|
||||||
ret = PFlashGetProtection(&flashSSDConfig, &protectStatus);
|
|
||||||
if (FTFx_OK != ret)
|
|
||||||
{
|
|
||||||
ErrorTrap(ret);
|
|
||||||
}
|
|
||||||
|
|
||||||
/**************************************************************************
|
|
||||||
* PFlashSetProtection() *
|
|
||||||
***************************************************************************/
|
|
||||||
protectStatus = 0x12ABCDEFU;
|
|
||||||
ret = PFlashSetProtection(&flashSSDConfig, protectStatus);
|
|
||||||
if (FTFx_OK != ret)
|
|
||||||
{
|
|
||||||
ErrorTrap(ret);
|
|
||||||
}
|
|
||||||
|
|
||||||
/* Call PFlashGetProtection to verify the set step */
|
|
||||||
ret = PFlashGetProtection(&flashSSDConfig, &protectStatus);
|
|
||||||
if ((FTFx_OK != ret) || (0x12ABCDEFU != protectStatus))
|
|
||||||
{
|
|
||||||
ErrorTrap(ret);
|
|
||||||
}
|
|
||||||
|
|
||||||
/**************************************************************************/
|
|
||||||
|
|
||||||
while(1);
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
/*********************************************************************
|
|
||||||
*
|
|
||||||
* Function Name : ErrorTrap
|
|
||||||
* Description : Gets called when an error occurs.
|
|
||||||
* Arguments : uint32_t
|
|
||||||
* Return Value :
|
|
||||||
*
|
|
||||||
*********************************************************************/
|
|
||||||
void ErrorTrap(uint32_t ret)
|
|
||||||
{
|
|
||||||
while (1)
|
|
||||||
{
|
|
||||||
;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
void callback(void)
|
|
||||||
{
|
|
||||||
/* just increase this variable to observer that this callback() func has been involked */
|
|
||||||
gCallBackCnt++;
|
|
||||||
}
|
|
||||||
/* end of file */
|
|
||||||
|
|
@ -8,40 +8,47 @@
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
#define PM_DEBUG
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* 模拟定时器使用的定时器
|
* 模拟定时器使用的定时器
|
||||||
*/
|
*/
|
||||||
#define SIMULAT_TIMER_PITX PIT1
|
#define SIMULAT_TIMER_PITX PIT1
|
||||||
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* 8266
|
* µ÷ÊÔÄ£¿é,»ò8266
|
||||||
*/
|
*/
|
||||||
#define WIFI_UARTX UART0 // PTA1,PTA2
|
#define WIFI_UARTX UART0 // PTA1,PTA2
|
||||||
|
#define DEBUG_UARTX UART0 // PTA1,PTA2
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* µ÷ÊÔÄ£¿é,»òÔÆÌ¨
|
* ÔÆÌ¨
|
||||||
*/
|
*/
|
||||||
#define DEBUG_UARTX UART1 // PTC3,PTC4
|
#define ORIENT_UARTX UART1 // PTC3,PTC4
|
||||||
|
#define RE_DE_PINX PTC1
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* 输入模块
|
* 输入模块
|
||||||
*/
|
*/
|
||||||
#define UP_KEY_PINX PTE20
|
#define UP_KEY_PINX PTA4
|
||||||
#define DOWN_KEY_PINX PTA17
|
#define DOWN_KEY_PINX PTA5
|
||||||
#define OK_KEY_PINX PTE23
|
#define OK_KEY_PINX PTE20
|
||||||
#define RET_KEY_PINX PTA4
|
#define RET_KEY_PINX PTE30
|
||||||
#define AMS_KEY_PINX PTA5
|
#define AMS_KEY_PINX PTD5
|
||||||
#define WIFI_KEY_PINX PTD7
|
#define WIFI_KEY_PINX PTD7
|
||||||
#define MR_KEY_PINX PTE30
|
#define MR_KEY_PINX PTE23
|
||||||
#define MB_KEY_PINX PTA16
|
#define MB_KEY_PINX PTD4
|
||||||
#define MUVB_KEY_PINX PTD6
|
#define MUVB_KEY_PINX PTA16
|
||||||
// knob用必须是PTA或PTD端口的
|
// knob用必须是PTA或PTD端口的
|
||||||
#define KNOB_A_PINX PTD6
|
#define KNOB_A_PINX PTD7
|
||||||
#define KNOB_B_PINX PTD7
|
#define KNOB_B_PINX PTD6
|
||||||
#define KNOB_KEY_PINX PTD4
|
#define KNOB_KEY_PINX PTE20
|
||||||
|
|
||||||
|
#define MOISTURE_ADC0_CHN ADC0_DP1 // PTE16
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
@ -56,19 +63,21 @@
|
||||||
*/
|
*/
|
||||||
#define DS1302_CE_PINX PTB2
|
#define DS1302_CE_PINX PTB2
|
||||||
#define DS1302_CLK_PINX PTB1
|
#define DS1302_CLK_PINX PTB1
|
||||||
#define DS1302_IO_PINX PTB0
|
#define DS1302_IO_PINX PTB3
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* 控制执行模块
|
* 控制执行模块
|
||||||
*
|
*
|
||||||
*/
|
*/
|
||||||
#define LGRED_PINX PTC12
|
#define LGRED_PINX PTC17
|
||||||
#define LGBLUE_PINX PTC13
|
#define LGBLUE_PINX PTC13
|
||||||
#define LGUVB_PINX PTC15
|
#define LGUVB_PINX PTC16
|
||||||
#define WATER_PINX PTC16
|
#define WATER_PINX PTD1
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* led控制,多选几个任意端口
|
* led控制,多选几个任意端口
|
||||||
*/
|
*/
|
||||||
|
#define LG1_PINX PTC9
|
||||||
|
#define LG2_PINX PTC8
|
||||||
|
#define LG3_PINX PTC7
|
||||||
#endif // CONFIG_H
|
#endif // CONFIG_H
|
||||||
|
|
|
||||||
|
|
@ -1,37 +0,0 @@
|
||||||
/*
|
|
||||||
* 文件:input.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
|
|
||||||
|
|
@ -7,6 +7,10 @@
|
||||||
#define KEY_H
|
#define KEY_H
|
||||||
|
|
||||||
|
|
||||||
|
/*
|
||||||
|
* key_mean - 按键的状态标志符号
|
||||||
|
* N_KEY表示无键按下状态,S_KEY表示单击,D_KEY表示双击,L_KEY表示长按
|
||||||
|
*/
|
||||||
typedef enum key_mean_
|
typedef enum key_mean_
|
||||||
{
|
{
|
||||||
N_KEY = 0, S_KEY, D_KEY, L_KEY
|
N_KEY = 0, S_KEY, D_KEY, L_KEY
|
||||||
|
|
@ -24,32 +28,10 @@ typedef enum key_type_
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
/*
|
|
||||||
* key_init() - 按键模块初始化
|
|
||||||
*
|
|
||||||
*/
|
|
||||||
void key_init(void);
|
void key_init(void);
|
||||||
|
|
||||||
|
|
||||||
/*
|
|
||||||
* key_detect() - 检测按键
|
|
||||||
*
|
|
||||||
* 要求每隔10ms调用一次
|
|
||||||
*/
|
|
||||||
void key_detect(void);
|
void key_detect(void);
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
/*
|
|
||||||
* get_key_mean() - 得到指定的按键信息
|
|
||||||
*
|
|
||||||
* 这个函数中在取得信息后会将对应按键重新标记为N_KEY
|
|
||||||
*/
|
|
||||||
key_mean get_key_mean(key_type key_t);
|
key_mean get_key_mean(key_type key_t);
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
void clear_key_m(void);
|
void clear_key_m(void);
|
||||||
|
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -7,49 +7,22 @@
|
||||||
#ifndef KNOB_H
|
#ifndef KNOB_H
|
||||||
#define KNOB_H
|
#define KNOB_H
|
||||||
|
|
||||||
#include "arm_cm0.h"
|
|
||||||
#include "vectors.h"
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
/*
|
|
||||||
* knob_init() - 为旋钮输入而执行的初始化
|
|
||||||
*
|
|
||||||
* 旋钮的检测初始化后默认是禁止的
|
|
||||||
*/
|
|
||||||
void knob_init(void);
|
void knob_init(void);
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
/*
|
|
||||||
* knob_enable() - 使能旋钮脉冲检测
|
|
||||||
*/
|
|
||||||
void knob_enable(void);
|
void knob_enable(void);
|
||||||
|
|
||||||
|
|
||||||
/*
|
|
||||||
* knob_disable() - 禁止旋钮脉冲检测
|
|
||||||
*/
|
|
||||||
void knob_disable(void);
|
void knob_disable(void);
|
||||||
|
|
||||||
|
|
||||||
/*
|
|
||||||
* knob_clear() - 清除旋钮值
|
|
||||||
*/
|
|
||||||
void knob_clear(void);
|
void knob_clear(void);
|
||||||
|
|
||||||
/*
|
|
||||||
* get_knob_val() - 返回旋钮值
|
|
||||||
*/
|
|
||||||
int32_t get_knob_val(void);
|
int32_t get_knob_val(void);
|
||||||
|
|
||||||
|
|
||||||
/*
|
|
||||||
* knob_detect() - 旋钮检测
|
|
||||||
*
|
|
||||||
* 这个函数需要在旋钮编码器的A相输出发生沿跳变时调用,即上下沿中断时
|
|
||||||
*/
|
|
||||||
void knob_detect(void);
|
void knob_detect(void);
|
||||||
|
|
||||||
|
|
||||||
|
|
|
||||||
51
plan_manage_main/src/app/include/orient.h
Normal file
51
plan_manage_main/src/app/include/orient.h
Normal file
|
|
@ -0,0 +1,51 @@
|
||||||
|
/*
|
||||||
|
* orient.h - 方向控制
|
||||||
|
*
|
||||||
|
* 所有如上,所有如下
|
||||||
|
*/
|
||||||
|
|
||||||
|
|
||||||
|
#ifndef ORIENT_H
|
||||||
|
#define ORIENT_H
|
||||||
|
|
||||||
|
|
||||||
|
#include <stdint.h>
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
typedef enum orient_
|
||||||
|
{
|
||||||
|
ORIENT_UP = 0, ORIENT_DOWN, ORIENT_RIGHT, ORIENT_LEFT
|
||||||
|
} orient;
|
||||||
|
|
||||||
|
typedef enum preset_op_
|
||||||
|
{
|
||||||
|
PRESET_SET = 0, PRESET_CLEAR, PRESET_CALL
|
||||||
|
} preset_op;
|
||||||
|
|
||||||
|
typedef enum orient_mode_
|
||||||
|
{
|
||||||
|
MODE_AUTO = 0, MODE_MANUL
|
||||||
|
} orient_mode;
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
void orient_init(void);
|
||||||
|
|
||||||
|
void orient_setspeed(uint8_t addr, orient ori, uint8_t spd);
|
||||||
|
|
||||||
|
void orient_presetop(uint8_t addr, preset_op op, uint8_t npre);
|
||||||
|
|
||||||
|
void orient_setmode(uint8_t addr, orient_mode mod);
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
#endif /* ORIENT_H */
|
||||||
|
|
||||||
|
|
@ -2,7 +2,8 @@
|
||||||
* plan_handle.h - 计划处理
|
* plan_handle.h - 计划处理
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
#ifndef PLAN_HANDLE_H
|
||||||
|
#define PLAN_HANDLE_H
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
@ -11,3 +12,8 @@ void plan_handle_init(void);
|
||||||
|
|
||||||
void plan_handle(void);
|
void plan_handle(void);
|
||||||
|
|
||||||
|
void key_func(void);
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
#endif /* PLAN_HANDLE_H */
|
||||||
|
|
@ -14,7 +14,7 @@ void pm_flash_init(void);
|
||||||
void flash_write(uint8_t *saddr, uint16_t nbyte);
|
void flash_write(uint8_t *saddr, uint16_t nbyte);
|
||||||
|
|
||||||
|
|
||||||
void flash_read(uint8_t *daddr, uint8_t nbyte);
|
void flash_read(uint8_t *daddr, uint16_t nbyte);
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -3,7 +3,17 @@
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
|
||||||
|
#ifndef PM_INIT_H
|
||||||
|
#define PM_INIT_H
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* pm_init() - ³õʼ»¯
|
* pm_init() - ³õʼ»¯
|
||||||
*/
|
*/
|
||||||
void pm_init(void);
|
void pm_init(void);
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
#endif /* PM_INIT_H */
|
||||||
|
|
@ -2,9 +2,16 @@
|
||||||
* time.h - 时间处理
|
* time.h - 时间处理
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
#ifndef TIME_H
|
||||||
|
#define TIME_H
|
||||||
|
|
||||||
|
|
||||||
#include <stdint.h>
|
#include <stdint.h>
|
||||||
|
|
||||||
|
|
||||||
|
/*
|
||||||
|
* calendar_info - 分解时间
|
||||||
|
*/
|
||||||
typedef struct calendar_info_
|
typedef struct calendar_info_
|
||||||
{
|
{
|
||||||
uint8_t sec;
|
uint8_t sec;
|
||||||
|
|
@ -17,21 +24,18 @@ typedef struct calendar_info_
|
||||||
uint16_t yday;
|
uint16_t yday;
|
||||||
} calendar_info;
|
} calendar_info;
|
||||||
|
|
||||||
|
// START_YEAR为计算日历时间时的起始时间
|
||||||
|
enum { START_YEAR = 2000, SEC_IN_DAY = 24 * 60 * 60};
|
||||||
|
|
||||||
uint8_t is_leapyear(uint16_t year);
|
uint8_t is_leapyear(uint16_t year);
|
||||||
|
|
||||||
uint8_t get_month_days(uint16_t year, uint8_t month);
|
uint8_t get_month_days(uint16_t year, uint8_t month);
|
||||||
|
|
||||||
void ds1302_init(void);
|
void ds1302_init(void);
|
||||||
|
|
||||||
void ds1302_set_time(calendar_info *cal);
|
void ds1302_set_time(calendar_info *cal);
|
||||||
|
|
||||||
void ds1302_read_time(calendar_info *cal);
|
void ds1302_read_time(calendar_info *cal);
|
||||||
|
|
||||||
void maintain_system_time(void);
|
void maintain_system_time(void);
|
||||||
|
|
||||||
calendar_info get_system_time(void);
|
calendar_info get_system_time(void);
|
||||||
|
|
||||||
uint32_t calendar_to_sec(calendar_info *cal);
|
uint32_t calendar_to_sec(calendar_info *cal);
|
||||||
|
|
||||||
calendar_info sec_to_calendar(uint32_t sec);
|
calendar_info sec_to_calendar(uint32_t sec);
|
||||||
|
|
||||||
|
|
||||||
|
#endif /* TIME_H */
|
||||||
|
|
|
||||||
|
|
@ -34,68 +34,13 @@ typedef enum st_mode_
|
||||||
NO_COMPARE
|
NO_COMPARE
|
||||||
} st_mode;
|
} st_mode;
|
||||||
|
|
||||||
/*
|
|
||||||
* st_init() - 初始化实现模拟定时器所需的pit定时器
|
|
||||||
*
|
|
||||||
* 基础定时为1ms
|
|
||||||
*/
|
|
||||||
void st_base_init(void);
|
void st_base_init(void);
|
||||||
|
|
||||||
|
|
||||||
/*
|
|
||||||
* st_init() - 初始化一个给定编号的模拟定时器
|
|
||||||
* @n: 定时器编号
|
|
||||||
* @st_m: 定时模式
|
|
||||||
* @cmr_v: 定时器比较值,在非比较模式可以为任意值
|
|
||||||
*
|
|
||||||
* 这个函数返回0表示正常完成了初始化任务,返回~0表示定时器已打开或不存在
|
|
||||||
*/
|
|
||||||
uint8_t st_init(uint8_t n, st_mode st_m, uint32_t cmr_v);
|
uint8_t st_init(uint8_t n, st_mode st_m, uint32_t cmr_v);
|
||||||
|
|
||||||
|
|
||||||
/*
|
|
||||||
* st_close() - 关闭一个给定编号的模拟定时器
|
|
||||||
* @n: 定时器编号
|
|
||||||
*/
|
|
||||||
void st_close(uint8_t n);
|
void st_close(uint8_t n);
|
||||||
|
|
||||||
/*
|
|
||||||
* st_tcf() - 查询tcf位返回
|
|
||||||
* @n: 定时器编号
|
|
||||||
*
|
|
||||||
* 这个函数在没有过比较值的时候返回0,已过比较值得时候返回1,对于不存在或未打开
|
|
||||||
*/
|
|
||||||
uint8_t st_tcf(uint8_t n);
|
uint8_t st_tcf(uint8_t n);
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
/*
|
|
||||||
* st_tov() - 查询tov位返回
|
|
||||||
* @n: 定时器编号
|
|
||||||
*
|
|
||||||
* 这个函数在没有溢出时返回0,没有溢出时返回1,对于不存在或未打开
|
|
||||||
*/
|
|
||||||
uint8_t st_tov(uint8_t n);
|
uint8_t st_tov(uint8_t n);
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
/*
|
|
||||||
* st_count() - 查询当前模拟定时值
|
|
||||||
* @n: 定时器编号
|
|
||||||
*
|
|
||||||
* 对于不存在或未打开
|
|
||||||
*/
|
|
||||||
uint32_t st_count(uint8_t n);
|
uint32_t st_count(uint8_t n);
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
/********************ISR******************/
|
|
||||||
|
|
||||||
/*
|
|
||||||
* st_base() -定时调用以模拟N路定时器
|
|
||||||
*
|
|
||||||
* 定时的最小间隔等于这个函数被调用的周期
|
|
||||||
*/
|
|
||||||
void st_base(void);
|
void st_base(void);
|
||||||
|
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -6,7 +6,6 @@
|
||||||
#ifndef TFT_H
|
#ifndef TFT_H
|
||||||
#define TFT_H
|
#define TFT_H
|
||||||
|
|
||||||
enum { PLAN_DATA_NUM = 19 };
|
|
||||||
|
|
||||||
typedef struct input_limit_
|
typedef struct input_limit_
|
||||||
{
|
{
|
||||||
|
|
@ -36,9 +35,7 @@ int16_t *get_value_of_kvp(char *name, uint8_t objn);
|
||||||
|
|
||||||
input_limit tft_input_limit(char *name);
|
input_limit tft_input_limit(char *name);
|
||||||
|
|
||||||
//const kv_pair *get_plan_data(uint8_t objn)[][PLAN_DATA_NUM];
|
|
||||||
|
|
||||||
void tft_to_plan_input(uint8_t objn);
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
|
||||||
55
plan_manage_main/src/app/include/tft_plan_internal.h
Normal file
55
plan_manage_main/src/app/include/tft_plan_internal.h
Normal file
|
|
@ -0,0 +1,55 @@
|
||||||
|
/*
|
||||||
|
* tft_handle_internal.h - tft和plan_handle模块共同使用部分的内部声明
|
||||||
|
*
|
||||||
|
* 这个文件只应包含在tft和plan_handle模块
|
||||||
|
*/
|
||||||
|
|
||||||
|
#ifndef TFT_PLAN_INTERNAL_H
|
||||||
|
#define TFT_PLAN_INTERNAL_H
|
||||||
|
|
||||||
|
|
||||||
|
#include "include/pm_time.h"
|
||||||
|
|
||||||
|
/*
|
||||||
|
* plan_input - 表示计划输入的类型
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
typedef struct plan_input_
|
||||||
|
{
|
||||||
|
calendar_info bg_t; // 开始时间
|
||||||
|
calendar_info ed_t; // 结束时间
|
||||||
|
calendar_info pd_t; // 周期时长
|
||||||
|
|
||||||
|
uint8_t x_orient; // x方向值,未使用
|
||||||
|
uint8_t y_orient; // y方向值,未使用
|
||||||
|
uint8_t lg_r : 1; // 红灯
|
||||||
|
uint8_t lg_b : 1; // 蓝灯
|
||||||
|
uint8_t lg_uvb : 1; // uvb
|
||||||
|
uint8_t water : 1; // 浇水,未使用
|
||||||
|
uint8_t sw : 1; // 是否加入计划
|
||||||
|
uint8_t cnt; // 完成次数
|
||||||
|
} plan_input;
|
||||||
|
|
||||||
|
/*
|
||||||
|
* kv_pair - 表示页面中的元素
|
||||||
|
* key为存储元素ID的字符串,value为一个整形值,attr为元素属性
|
||||||
|
*/
|
||||||
|
typedef struct kv_pair_
|
||||||
|
{
|
||||||
|
char *key;
|
||||||
|
int16_t value;
|
||||||
|
int8_t attr;
|
||||||
|
} kv_pair;
|
||||||
|
|
||||||
|
enum { PLAN_DATA_NUM = 19, OBJ_NUM = 8 };
|
||||||
|
|
||||||
|
extern plan_input plan_in[OBJ_NUM];
|
||||||
|
|
||||||
|
extern kv_pair kvp_obj_set[][PLAN_DATA_NUM];
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
void tft_to_plan_input(uint8_t objn);
|
||||||
|
|
||||||
|
|
||||||
|
#endif /* TFT_PLAN_INTERNAL_H */
|
||||||
28
plan_manage_main/src/app/include/water.h
Normal file
28
plan_manage_main/src/app/include/water.h
Normal file
|
|
@ -0,0 +1,28 @@
|
||||||
|
/*
|
||||||
|
* water.h - ½½Ë®
|
||||||
|
*/
|
||||||
|
|
||||||
|
|
||||||
|
#ifndef WARER_H
|
||||||
|
#define WARER_H
|
||||||
|
|
||||||
|
|
||||||
|
#define MOISTURE_RATIO 0.1
|
||||||
|
#define MOISTURE_MIN 1
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
void water_init(void);
|
||||||
|
uint16_t get_moisture(void);
|
||||||
|
void water_ctr(uint16_t sv_moist);
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
#endif /* WARER_H */
|
||||||
|
|
@ -44,6 +44,13 @@ typedef enum state_sign_
|
||||||
} state_sign;
|
} state_sign;
|
||||||
|
|
||||||
|
|
||||||
|
/*
|
||||||
|
* key_infomation - 表示一个按键的信息
|
||||||
|
* state_base和time_base在key_read_base函数中使用的状态变量
|
||||||
|
* state和time在key_read函数中使用的状态变量
|
||||||
|
* key_m保存当前按键读取的结果
|
||||||
|
* get_state_io变量指向获取按键对应输入io状态的函数
|
||||||
|
*/
|
||||||
typedef struct key_infomation_
|
typedef struct key_infomation_
|
||||||
{
|
{
|
||||||
key_state state_base;
|
key_state state_base;
|
||||||
|
|
@ -59,6 +66,9 @@ typedef struct key_infomation_
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
/*
|
||||||
|
* 下边这几个函数定义的是获取按键io状态的函数
|
||||||
|
*/
|
||||||
state_sign get_state_up_key_io(void)
|
state_sign get_state_up_key_io(void)
|
||||||
{ return !gpio_get(UP_KEY_PINX) ? VALID : INVALID; }
|
{ return !gpio_get(UP_KEY_PINX) ? VALID : INVALID; }
|
||||||
|
|
||||||
|
|
@ -87,20 +97,21 @@ state_sign get_state_muvb_key_io(void)
|
||||||
{ return !gpio_get(MUVB_KEY_PINX) ? VALID : INVALID; }
|
{ return !gpio_get(MUVB_KEY_PINX) ? VALID : INVALID; }
|
||||||
|
|
||||||
|
|
||||||
|
// 定义按键变量并初始化
|
||||||
static volatile key_infomation
|
static volatile key_infomation
|
||||||
up_key_info = { key_state_0, 0, key_state_0, 0, N_KEY, get_state_up_key_io },
|
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 },
|
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 },
|
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 },
|
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 },
|
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 },
|
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 },
|
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 },
|
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 };
|
muvb_key_info = { key_state_0, 0, key_state_0, 0, N_KEY, get_state_muvb_key_io };
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
/*
|
/**
|
||||||
* key_init() - 按键模块初始化
|
* key_init() - 按键模块初始化
|
||||||
*
|
*
|
||||||
*/
|
*/
|
||||||
|
|
@ -116,17 +127,11 @@ void key_init(void)
|
||||||
gpio_Interrupt_init(MB_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);
|
gpio_Interrupt_init(MUVB_KEY_PINX, GPI_UP_PF, GPI_DISAB);
|
||||||
|
|
||||||
|
|
||||||
/*
|
|
||||||
* 初始化定时器为10ms定时中断,用于按键检测的定时执行
|
|
||||||
*/
|
|
||||||
|
|
||||||
|
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
/*
|
/**
|
||||||
* key_read_base - 按键基础读取函数,
|
* key_read_base - 按键基础读取函数,
|
||||||
* @key_info: 要检测按键的所需信息,必须在是全局变量区中存储的
|
* @key_info: 要检测按键的所需信息,必须在是全局变量区中存储的
|
||||||
*
|
*
|
||||||
|
|
@ -137,45 +142,50 @@ key_mean key_read_base(volatile key_infomation *key_info)
|
||||||
state_sign key_state_io;
|
state_sign key_state_io;
|
||||||
key_mean key_m = N_KEY;
|
key_mean key_m = N_KEY;
|
||||||
|
|
||||||
key_state_io = (*((*key_info).get_state_io))(); // 获取io状态
|
// 获取io状态
|
||||||
switch((*key_info).state_base)
|
key_state_io = (*(key_info->get_state_io))();
|
||||||
|
switch(key_info->state_base)
|
||||||
{
|
{
|
||||||
case key_state_0:
|
case key_state_0:
|
||||||
if (key_state_io == VALID)
|
if (key_state_io == VALID)
|
||||||
{
|
{
|
||||||
(*key_info).state_base = key_state_1; // 按键按下后首先进入消抖和按键确
|
// 按键按下后首先进入消抖和按键确认状态
|
||||||
// 认状态
|
key_info->state_base = key_state_1;
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
case key_state_1:
|
case key_state_1:
|
||||||
if (key_state_io == VALID)
|
if (key_state_io == VALID)
|
||||||
{
|
{
|
||||||
(*key_info).time_base = 0;
|
// 按键如果仍然按下,则消抖完成
|
||||||
(*key_info).state_base = key_state_2; // 按键如果仍然按下,则消抖完成,
|
// 进行状态转换,并且返回无按键事件
|
||||||
// 状态转换,此时返回无按键事件
|
key_info->time_base = 0;
|
||||||
|
key_info->state_base = key_state_2;
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
(*key_info).state_base = key_state_0;
|
key_info->state_base = key_state_0;
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
case key_state_2:
|
case key_state_2:
|
||||||
if (key_state_io == INVALID)
|
if (key_state_io == INVALID)
|
||||||
{
|
{
|
||||||
key_m = S_KEY; // 此时按键释放说明为一次短操作
|
// 此时按键释放说明为一次短操作
|
||||||
(*key_info).state_base = key_state_0;
|
key_m = S_KEY;
|
||||||
|
key_info->state_base = key_state_0;
|
||||||
}
|
}
|
||||||
else if (++(*key_info).time_base > 100) // 继续按下,计时加10ms,即本函
|
// 继续按下,计时加10ms,即本函数调用周期
|
||||||
// 数调用周期
|
else if (++key_info->time_base > 100)
|
||||||
{
|
{
|
||||||
key_m = L_KEY; // 按下时间大于1s,返回 长按键
|
// 按下时间大于1s,返回长按键,并且转换为等待按键释放状态
|
||||||
(*key_info).state_base = key_state_3; // 转换为等待按键释放状态
|
key_m = L_KEY;
|
||||||
|
key_info->state_base = key_state_3;
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
case key_state_3:
|
case key_state_3:
|
||||||
if (key_state_io == INVALID)
|
if (key_state_io == INVALID)
|
||||||
{
|
{
|
||||||
(*key_info).state_base = key_state_0; // 按键此时已释放,转换为初始状态
|
// 按键此时已释放,转换为初始状态
|
||||||
|
key_info->state_base = key_state_0;
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
|
|
@ -184,7 +194,7 @@ key_mean key_read_base(volatile key_infomation *key_info)
|
||||||
return key_m;
|
return key_m;
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
/**
|
||||||
* key_read - 按键读取函数
|
* key_read - 按键读取函数
|
||||||
* @key_info: 要检测的按键所需的信息,必须是在全局变量区中存储的
|
* @key_info: 要检测的按键所需的信息,必须是在全局变量区中存储的
|
||||||
*
|
*
|
||||||
|
|
@ -196,33 +206,35 @@ key_mean key_read(volatile key_infomation *key_info)
|
||||||
key_m_temp;
|
key_m_temp;
|
||||||
|
|
||||||
key_m_temp = key_read_base(key_info);
|
key_m_temp = key_read_base(key_info);
|
||||||
switch((*key_info).state)
|
switch(key_info->state)
|
||||||
{
|
{
|
||||||
case key_state_0:
|
case key_state_0:
|
||||||
if (key_m_temp == S_KEY)
|
if (key_m_temp == S_KEY)
|
||||||
{
|
{
|
||||||
(*key_info).time = 0; // 第一次单击状态,仍然返回无键,到下个周期
|
// 第一次单击状态,仍然返回无键,到下个周期判断是否出现双击
|
||||||
// 判断是否出现双击
|
key_info->time = 0;
|
||||||
(*key_info).state = key_state_1;
|
key_info->state = key_state_1;
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
key_m = key_m_temp; // 对于非单击,返回原事件
|
// 对于非单击,返回原事件
|
||||||
|
key_m = key_m_temp;
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
case key_state_1:
|
case key_state_1:
|
||||||
if (key_m_temp == S_KEY) // 又一次单击,间隔 < 300ms
|
// 又一次单击,间隔 < 300ms
|
||||||
|
if (key_m_temp == S_KEY)
|
||||||
{
|
{
|
||||||
key_m = D_KEY;
|
key_m = D_KEY;
|
||||||
(*key_info).state = key_state_0;
|
key_info->state = key_state_0;
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
if (++(*key_info).time > 30)
|
if (++key_info->time > 30)
|
||||||
{
|
{
|
||||||
key_m = S_KEY; // 300ms内没有再出现单击事件,则返回上一次单
|
// 300ms内没有再出现单击事件,则返回上一次单击事件
|
||||||
// 击事件
|
key_m = S_KEY;
|
||||||
(*key_info).state = key_state_0;
|
key_info->state = key_state_0;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
|
|
@ -233,11 +245,11 @@ key_mean key_read(volatile key_infomation *key_info)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
/*
|
/**
|
||||||
* key_detect() - 检测按键
|
* key_detect() - 检测按键
|
||||||
*
|
*
|
||||||
* 这个函数仅在N_KEY状态时记录按键信息,N_KEY是在应用程序获取按键信息的时候同时被设
|
* 这个函数仅在N_KEY状态时记录按键信息,N_KEY是在应用程序获取按键信息的时候同时
|
||||||
* 置的,这样做的目的是保证采集到的按键一定会被执行
|
* 被设置的,这样做的目的是保证采集到的按键一定会被执行
|
||||||
* 要求每隔10ms调用一次
|
* 要求每隔10ms调用一次
|
||||||
*/
|
*/
|
||||||
void key_detect(void)
|
void key_detect(void)
|
||||||
|
|
@ -284,7 +296,7 @@ void key_detect(void)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
/*
|
/**
|
||||||
* get_key_mean() - 得到指定的按键信息
|
* get_key_mean() - 得到指定的按键信息
|
||||||
*
|
*
|
||||||
* 这个函数中在取得信息后会将对应按键重新标记为N_KEY
|
* 这个函数中在取得信息后会将对应按键重新标记为N_KEY
|
||||||
|
|
|
||||||
|
|
@ -7,10 +7,11 @@
|
||||||
#include <stdint.h>
|
#include <stdint.h>
|
||||||
|
|
||||||
#include "include.h"
|
#include "include.h"
|
||||||
|
#include "arm_cm0.h"
|
||||||
|
#include "vectors.h"
|
||||||
|
|
||||||
|
|
||||||
#include "include/knob.h"
|
|
||||||
#include "include/config.h"
|
#include "include/config.h"
|
||||||
|
#include "include/knob.h"
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
@ -48,7 +49,7 @@ void knob_enable(void)
|
||||||
*/
|
*/
|
||||||
void knob_disable(void)
|
void knob_disable(void)
|
||||||
{
|
{
|
||||||
disable_irq(PortA_irq_no);
|
disable_irq(PortD_irq_no);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -87,7 +88,8 @@ void knob_detect(void)
|
||||||
{
|
{
|
||||||
knob_val++;
|
knob_val++;
|
||||||
}
|
}
|
||||||
else // ¼´if ((knob_A == 0 && knob_B == 0) || (knob_A == 1 && knob_B == 1))
|
// ¼´if ((knob_A == 0 && knob_B == 0) || (knob_A == 1 && knob_B == 1))
|
||||||
|
else
|
||||||
{
|
{
|
||||||
knob_val--;
|
knob_val--;
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -13,27 +13,31 @@
|
||||||
#include "include/pm_time.h"
|
#include "include/pm_time.h"
|
||||||
#include "include/plan_handle.h"
|
#include "include/plan_handle.h"
|
||||||
#include "include/pm_flash.h"
|
#include "include/pm_flash.h"
|
||||||
|
#include "include/orient.h"
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
void main(void)
|
void main(void)
|
||||||
{
|
{
|
||||||
|
|
||||||
|
printf("\n\n\n程序开始执行!!!\n\n\n");
|
||||||
|
enter_critical();
|
||||||
pm_init();
|
pm_init();
|
||||||
|
exit_critical();
|
||||||
|
/*
|
||||||
|
* 作为按键扫描函数的定时使用,在simulat_timer.c的底层中使用
|
||||||
|
*/
|
||||||
|
st_init(0, COMPARE, 10);
|
||||||
|
st_init(1, COMPARE, 100);
|
||||||
|
|
||||||
st_init(0, COMPARE, 10); // 作为按键扫描函数的定时使用,在simulat_timer.c的底层中使用
|
#ifdef PM_DEBUG
|
||||||
st_init(1, COMPARE, 500);
|
|
||||||
|
|
||||||
st_init(2, COMPARE, 1);
|
st_init(2, COMPARE, 1);
|
||||||
st_init(3, COMPARE, 500);
|
st_init(3, COMPARE, 500);
|
||||||
|
#endif /* PM_DEBUG */
|
||||||
calendar_info sys_cal = {
|
|
||||||
0, 1, 2, 3, 4, 2012, 0, 1
|
|
||||||
};
|
|
||||||
ds1302_set_time(&sys_cal);
|
|
||||||
|
|
||||||
knob_enable();
|
knob_enable();
|
||||||
|
|
||||||
|
|
||||||
while (1)
|
while (1)
|
||||||
{
|
{
|
||||||
/*
|
/*
|
||||||
|
|
@ -55,6 +59,7 @@ void main(void)
|
||||||
plan_handle();
|
plan_handle();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#ifdef PM_DEBUG
|
||||||
/*
|
/*
|
||||||
* 调试相关,较短时间响应
|
* 调试相关,较短时间响应
|
||||||
*/
|
*/
|
||||||
|
|
@ -79,85 +84,25 @@ void main(void)
|
||||||
st.year, st.month, st.wday, st.mday,
|
st.year, st.month, st.wday, st.mday,
|
||||||
st.hour, st.min, st.sec);
|
st.hour, st.min, st.sec);
|
||||||
printf("sec = %d\n", calendar_to_sec(&st));
|
printf("sec = %d\n", calendar_to_sec(&st));
|
||||||
}
|
|
||||||
|
|
||||||
/*
|
static uint8_t lg_test;
|
||||||
* 按键功能注册部分
|
lg_test = !lg_test;
|
||||||
*/
|
gpio_set(LG1_PINX, 0);
|
||||||
switch (get_key_mean(UP_KEY))
|
gpio_set(LG2_PINX, 0);
|
||||||
{
|
gpio_set(LG3_PINX, 0);
|
||||||
case N_KEY:
|
|
||||||
//printf("无键\n");
|
if (gpio_get(AMS_KEY_PINX))
|
||||||
break;
|
{
|
||||||
case S_KEY:
|
printf("计划!!!!!!\n");
|
||||||
printf("单击\n");
|
}
|
||||||
tft_left();
|
else
|
||||||
break;
|
{
|
||||||
case D_KEY:
|
printf("手动!!!!!!\n");
|
||||||
printf("双击\n");
|
}
|
||||||
tft_up();
|
|
||||||
break;
|
|
||||||
case L_KEY:
|
|
||||||
printf("长按\n");
|
|
||||||
break;
|
|
||||||
default:
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
switch (get_key_mean(DOWN_KEY))
|
|
||||||
{
|
|
||||||
case N_KEY:
|
|
||||||
//printf("无键\n");
|
|
||||||
break;
|
|
||||||
case S_KEY:
|
|
||||||
printf("单击\n");
|
|
||||||
tft_right();
|
|
||||||
break;
|
|
||||||
case D_KEY:
|
|
||||||
printf("双击\n");
|
|
||||||
tft_down();
|
|
||||||
break;
|
|
||||||
case L_KEY:
|
|
||||||
printf("长按\n");
|
|
||||||
break;
|
|
||||||
default:
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
switch (get_key_mean(OK_KEY))
|
|
||||||
{
|
|
||||||
case N_KEY:
|
|
||||||
//printf("无键\n");
|
|
||||||
break;
|
|
||||||
case S_KEY:
|
|
||||||
printf("单击\n");
|
|
||||||
tft_ok();
|
|
||||||
break;
|
|
||||||
case D_KEY:
|
|
||||||
printf("双击\n");
|
|
||||||
break;
|
|
||||||
case L_KEY:
|
|
||||||
printf("长按\n");
|
|
||||||
break;
|
|
||||||
default:
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
switch (get_key_mean(RET_KEY))
|
|
||||||
{
|
|
||||||
case N_KEY:
|
|
||||||
//printf("无键\n");
|
|
||||||
break;
|
|
||||||
case S_KEY:
|
|
||||||
printf("单击\n");
|
|
||||||
tft_ret();
|
|
||||||
break;
|
|
||||||
case D_KEY:
|
|
||||||
printf("双击\n");
|
|
||||||
break;
|
|
||||||
case L_KEY:
|
|
||||||
printf("长按\n");
|
|
||||||
break;
|
|
||||||
default:
|
|
||||||
break;
|
|
||||||
}
|
}
|
||||||
|
#endif /* PM_DEBUG */
|
||||||
|
|
||||||
|
key_func();
|
||||||
}
|
}
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
|
||||||
120
plan_manage_main/src/app/orient.c
Normal file
120
plan_manage_main/src/app/orient.c
Normal file
|
|
@ -0,0 +1,120 @@
|
||||||
|
/*
|
||||||
|
* orient.c - 关于光照方向控制的模块
|
||||||
|
*
|
||||||
|
* 所有如上,所有如下
|
||||||
|
*/
|
||||||
|
|
||||||
|
|
||||||
|
#include "uart.h"
|
||||||
|
|
||||||
|
#include "include/orient.h"
|
||||||
|
#include "include/config.h"
|
||||||
|
|
||||||
|
|
||||||
|
void orient_init(void)
|
||||||
|
{
|
||||||
|
uart_init(ORIENT_UARTX, 2400);
|
||||||
|
gpio_init(RE_DE_PINX, 1, 1);
|
||||||
|
|
||||||
|
orient_setmode(0, MODE_MANUL);
|
||||||
|
orient_setmode(1, MODE_MANUL);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
* orient_setspeed() - 设置方向控制的速度以及角度
|
||||||
|
*
|
||||||
|
* @addr: 地址码
|
||||||
|
* @ori: 方向
|
||||||
|
* @spd: 表示速度,范围在0~100
|
||||||
|
*/
|
||||||
|
void orient_setspeed(uint8_t addr, orient ori, uint8_t spd)
|
||||||
|
{
|
||||||
|
uint8_t cmd[7] = { 0xff, addr, 0x00, 0x00, 0x00, 0x00, 0x00 };
|
||||||
|
|
||||||
|
switch (ori)
|
||||||
|
{
|
||||||
|
case ORIENT_UP:
|
||||||
|
cmd[3] = 0x08;
|
||||||
|
break;
|
||||||
|
case ORIENT_DOWN:
|
||||||
|
cmd[3] = 0x10;
|
||||||
|
break;
|
||||||
|
case ORIENT_LEFT:
|
||||||
|
cmd[3] = 0x04;
|
||||||
|
break;
|
||||||
|
case ORIENT_RIGHT:
|
||||||
|
cmd[3] = 0x02;
|
||||||
|
default:
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (spd > 100)
|
||||||
|
{
|
||||||
|
spd = 100;
|
||||||
|
}
|
||||||
|
cmd[4] = (uint16_t)0x3f * spd / 100;
|
||||||
|
cmd[6] = cmd[1] + cmd[2] + cmd[3] + cmd[4] + cmd[5];
|
||||||
|
|
||||||
|
uart_sendN(ORIENT_UARTX, cmd, 7);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/*
|
||||||
|
* orient_presetop() - 设置预置点
|
||||||
|
*
|
||||||
|
* @addr: 地址码
|
||||||
|
* @op: 对预置点的操作
|
||||||
|
* @npre: 预置点编号
|
||||||
|
*/
|
||||||
|
void orient_presetop(uint8_t addr, preset_op op, uint8_t npre)
|
||||||
|
{
|
||||||
|
uint8_t cmd[7] = { 0xff, addr, 0x00, 0x00, 0x00, npre, 0x00 };
|
||||||
|
|
||||||
|
switch (op)
|
||||||
|
{
|
||||||
|
case PRESET_SET:
|
||||||
|
cmd[3] = 0x03;
|
||||||
|
break;
|
||||||
|
case PRESET_CALL:
|
||||||
|
cmd[3] = 0x07;
|
||||||
|
break;
|
||||||
|
case PRESET_CLEAR:
|
||||||
|
cmd[3] = 0x05;
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
cmd[6] = cmd[1] + cmd[2] + cmd[3] + cmd[4] + cmd[5];
|
||||||
|
uart_sendN(ORIENT_UARTX, cmd, 7);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
* orient_setmode() - 设置云台模式
|
||||||
|
*
|
||||||
|
* @addr: 地址码
|
||||||
|
* @mod: 模式标志
|
||||||
|
*/
|
||||||
|
void orient_setmode(uint8_t addr, orient_mode mod)
|
||||||
|
{
|
||||||
|
uint8_t cmd[7] = { 0xff, addr, 0x00, 0x00, 0x00, 0x00, 0x00 };
|
||||||
|
|
||||||
|
switch (mod)
|
||||||
|
{
|
||||||
|
case MODE_AUTO:
|
||||||
|
cmd[2] = 0x90;
|
||||||
|
break;
|
||||||
|
case MODE_MANUL:
|
||||||
|
cmd[2] = 0x00;
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
cmd[6] = cmd[1] + cmd[2] + cmd[3] + cmd[4] + cmd[5];
|
||||||
|
|
||||||
|
uart_sendN(ORIENT_UARTX, cmd, 7);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
@ -1,154 +1,714 @@
|
||||||
/*
|
/*
|
||||||
* plan_handle.c - 计划处理模块
|
* plan_handle.c - 计划处理模块
|
||||||
*
|
*
|
||||||
* 计划处理,指的是根据内存中的计划数据和时间数据得出输出数据,输出数据包括继电器信
|
* 计划处理,指的是根据内存中的计划数据和时间数据得出输出数据,输出数据包括继电
|
||||||
* 号、植物属性值。
|
* 器信号、植物属性值。
|
||||||
* 关于植物属性值,包括已完成计划周期次数,等。
|
* 关于植物属性值,包括已完成计划周期次数,等。
|
||||||
* 基本原则是,起始周期时间区间加上重复周期数可以得到一个区间集合,判断当前时间是否
|
* 基本原则是,起始周期时间区间加上重复周期数可以得到一个区间集合,判断当前时间
|
||||||
* 属于这个时间区间集合中的一个区间中的一个时间点。由此得到继电器信号,并在继电器信
|
* 是否属于这个时间区间集合中的一个区间中的一个时间点。由此得到继电器信号,并在
|
||||||
* 号被置为无效的时候将计划周期次数加一。
|
* 继电器信号被置为无效的时候将计划周期次数加一。
|
||||||
* 需要解决的问题有,如何访问计划数据与时间数据,以及如何写入输出数据。
|
* 需要解决的问题有,如何访问计划数据与时间数据,以及如何写入输出数据。
|
||||||
* 计划数据在tft.c模块,属于静态数据,如果要访问的话,有两种方式,一是声明计划数据
|
* 计划数据在tft.c模块,属于静态数据,如果要访问的话,有两种方式,一是声明计划
|
||||||
* 的类型并返回其整体地址,一个整体地址可以访问到所有的对象属性,不过需要知道这个地
|
* 数据的类型并返回其整体地址,一个整体地址可以访问到所有的对象属性,不过需要知
|
||||||
* 址上数据的分布情况,需要额外的数据。二是根据每个元素的名字通过查询得到其单独的值。
|
* 道这个地址上数据的分布情况,需要额外的数据。二是根据每个元素的名字通过查询得
|
||||||
|
* 到其单独的值。
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#include <stdint.h>
|
#include <stdint.h>
|
||||||
|
|
||||||
#include "gpio.h"
|
#include "gpio.h"
|
||||||
|
|
||||||
#include "include/plan_handle.h"
|
#include "include/tft_plan_internal.h"
|
||||||
#include "include/pm_time.h"
|
|
||||||
#include "include/tft.h"
|
|
||||||
#include "config.h"
|
|
||||||
|
|
||||||
|
#include "include/plan_handle.h"
|
||||||
|
#include "include/tft.h"
|
||||||
|
#include "include/config.h"
|
||||||
|
#include "include/pm_flash.h"
|
||||||
|
#include "include/orient.h"
|
||||||
|
#include "include/key.h"
|
||||||
|
|
||||||
|
/*
|
||||||
|
* 计划输出数据类型定义
|
||||||
|
* is_reach表示是否到达计划执行时间,
|
||||||
|
* note是一个字符串,可以用来存储一些提示性字符
|
||||||
|
*/
|
||||||
typedef struct plan_output_
|
typedef struct plan_output_
|
||||||
{
|
{
|
||||||
uint8_t is_lgreach;
|
uint8_t is_reach;
|
||||||
uint8_t is_wtreach;
|
uint8_t note[10];
|
||||||
uint8_t lg_cnt;
|
|
||||||
uint8_t wt_cnt;
|
|
||||||
} plan_output;
|
} plan_output;
|
||||||
|
|
||||||
typedef struct plan_input_
|
typedef enum lg_state_
|
||||||
{
|
{
|
||||||
calendar_info lgbg_t;
|
LIGHT = 1, NO_LIGHT = 0
|
||||||
calendar_info lged_t;
|
} lg_state;
|
||||||
calendar_info lgpd_t;
|
|
||||||
|
|
||||||
calendar_info wtbg_t;
|
|
||||||
calendar_info wted_t;
|
|
||||||
calendar_info wtpd_t;
|
|
||||||
|
|
||||||
uint8_t x_orient;
|
|
||||||
uint8_t y_orient;
|
|
||||||
uint8_t lg_r : 1;
|
|
||||||
uint8_t lg_b : 1;
|
|
||||||
uint8_t lg_uvb : 1;
|
|
||||||
uint8_t water : 1;
|
|
||||||
uint8_t sw : 1;
|
|
||||||
} plan_input;
|
|
||||||
|
|
||||||
|
/*
|
||||||
|
* 静态函数声明
|
||||||
|
*/
|
||||||
static void indata_to_outdata(plan_input *ind, plan_output *outd);
|
static void indata_to_outdata(plan_input *ind, plan_output *outd);
|
||||||
static void ctr_exe(uint8_t activity);
|
static void plan_ctr_exe(uint8_t activity);
|
||||||
|
static void plan_inpu_to_tft(void);
|
||||||
|
static void plan_key_func(void);
|
||||||
|
static void manul_key_func(void);
|
||||||
|
static void manul_ctr(void);
|
||||||
|
static void plan_ctr(void);
|
||||||
|
|
||||||
|
/*
|
||||||
static plan_output plan_out[PLAN_DATA_NUM] = { 0 };
|
* 输出和输入变量定义,初始化全部为0
|
||||||
plan_input plan_in[PLAN_DATA_NUM] = { 0 };
|
*/
|
||||||
|
static plan_output plan_out[OBJ_NUM] = { 0 };
|
||||||
|
plan_input plan_in[OBJ_NUM] = { 0 };
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* plan_handle_init() - 对计划处理模块进行初始化
|
||||||
|
*
|
||||||
|
* 主要包括IO初始化和计划数据的上电恢复工作
|
||||||
|
*/
|
||||||
void plan_handle_init(void)
|
void plan_handle_init(void)
|
||||||
{
|
{
|
||||||
gpio_Interrupt_init(LGRED_PINX, GPO, GPI_DISAB);
|
gpio_init(LGRED_PINX, 1, NO_LIGHT);
|
||||||
gpio_Interrupt_init(LGBLUE_PINX, GPO, GPI_DISAB);
|
gpio_init(LGBLUE_PINX, 1, NO_LIGHT);
|
||||||
gpio_Interrupt_init(LGUVB_PINX, GPO, GPI_DISAB);
|
gpio_init(LGUVB_PINX, 1, NO_LIGHT);
|
||||||
gpio_Interrupt_init(WATER_PINX, GPO, GPI_DISAB);
|
gpio_init(WATER_PINX, 1, 0);
|
||||||
// 还有设置方向的初始化
|
|
||||||
|
gpio_init(LG1_PINX, 1, 1);
|
||||||
|
gpio_init(LG2_PINX, 1, 1);
|
||||||
|
gpio_init(LG3_PINX, 1, 1);
|
||||||
|
|
||||||
|
/*
|
||||||
|
* 数据恢复,数据从从flash到plan_handle模块,再从plan_handle模块到tft模块
|
||||||
|
*/
|
||||||
|
flash_read((uint8_t *)&plan_in, sizeof(plan_in));
|
||||||
|
plan_inpu_to_tft();
|
||||||
|
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* indata_to_outdata() - 将一个植物输入的计划数据转换为对应的输出数据
|
||||||
|
* @ind: 计划输入数据的地址
|
||||||
|
* @outd: 转换后的值得地址
|
||||||
|
*
|
||||||
|
* 主要的功能是根据输入的数据得到是否到达计划执行时间,以及完成计划的次数
|
||||||
|
*/
|
||||||
static void indata_to_outdata(plan_input *ind, plan_output *outd)
|
static void indata_to_outdata(plan_input *ind, plan_output *outd)
|
||||||
{
|
{
|
||||||
|
// 首先得到系统时间并转换为日历时间格式
|
||||||
calendar_info st = get_system_time();
|
calendar_info st = get_system_time();
|
||||||
uint32_t sys_sec = calendar_to_sec(&st);
|
uint32_t sys_sec = calendar_to_sec(&st);
|
||||||
|
|
||||||
uint32_t lgpd_sec = calendar_to_sec(&ind->lgpd_t);
|
/*
|
||||||
uint32_t crt_lgbg_sec = calendar_to_sec(&ind->lgbg_t) + lgpd_sec * outd->lg_cnt;
|
* 因为在周期时间输入的时候没有输入年、月、秒的地方,所以将其初始化为起始值
|
||||||
uint32_t crt_lged_sec = calendar_to_sec(&ind->lged_t) + lgpd_sec * outd->lg_cnt;
|
* 以方便计算周期时间
|
||||||
|
*/
|
||||||
|
ind->pd_t.year = START_YEAR;
|
||||||
|
ind->pd_t.month = 1;
|
||||||
|
ind->pd_t.sec = 0;
|
||||||
|
uint32_t pd_sec = calendar_to_sec(&ind->pd_t);
|
||||||
|
|
||||||
uint32_t wtpd_sec = calendar_to_sec(&ind->wtpd_t);
|
/*
|
||||||
uint32_t crt_wtbg_sec = calendar_to_sec(&ind->wtbg_t) + wtpd_sec * outd->wt_cnt;
|
* 将第一次开始的时间加上周期时长乘以已完成次数,得到当前的开始时间;
|
||||||
uint32_t crt_wted_sec = calendar_to_sec(&ind->wted_t) + wtpd_sec * outd->wt_cnt;
|
* 结束时间的计算同开始时间。
|
||||||
|
* 由这两个时间可以得到当前执行计划的区间。
|
||||||
|
*/
|
||||||
|
uint32_t ctr_bg_sec = calendar_to_sec(&ind->bg_t) + pd_sec * ind->cnt;
|
||||||
|
uint32_t ctr_ed_sec = calendar_to_sec(&ind->ed_t) + pd_sec * ind->cnt;
|
||||||
|
|
||||||
if (crt_lgbg_sec < sys_sec && crt_lged_sec > sys_sec)
|
// 比较系统时间是否在执行计划的区间
|
||||||
|
if (ctr_bg_sec < sys_sec && ctr_ed_sec > sys_sec)
|
||||||
{
|
{
|
||||||
outd->is_lgreach = 1;
|
outd->is_reach = 1;
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
if (outd->is_lgreach == 1)
|
if (outd->is_reach == 1)
|
||||||
{
|
{
|
||||||
outd->lg_cnt++;
|
/*
|
||||||
|
* 如果没有在执行区间,并且上一次在执行区间的话,表明一次计划执行完
|
||||||
|
* 成,给计划完成次数加一。
|
||||||
|
*/
|
||||||
|
ind->cnt++;
|
||||||
}
|
}
|
||||||
outd->is_lgreach = 0;
|
outd->is_reach = 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (crt_wtbg_sec < sys_sec && crt_wted_sec > sys_sec)
|
|
||||||
{
|
|
||||||
outd->is_wtreach = 1;
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
if (outd->is_wtreach== 1)
|
|
||||||
{
|
|
||||||
outd->wt_cnt++;
|
|
||||||
}
|
|
||||||
outd->is_wtreach = 0;
|
|
||||||
}
|
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
static void ctr_exe(uint8_t activity)
|
|
||||||
|
/**
|
||||||
|
* plan_ctr_exe() - 计划控制的输出执行
|
||||||
|
* @activity: 表示执行哪一个计划活动,一个活动编号对应一个植物,当activity大于
|
||||||
|
* 植物的编号时,表示没有计划任务需要执行。
|
||||||
|
*
|
||||||
|
* 主要包括IO输出控制以及云台预置位控制
|
||||||
|
*/
|
||||||
|
static void plan_ctr_exe(uint8_t activity)
|
||||||
{
|
{
|
||||||
if (activity >= PLAN_DATA_NUM)
|
/*
|
||||||
|
* isnt_first数组是为了标记每一个活动在一次计划区间内是不是第一次执行,主要
|
||||||
|
* 是因为不能频繁的多次调用云台的预置位
|
||||||
|
*/
|
||||||
|
static uint8_t isnt_first[OBJ_NUM] = { 0 };
|
||||||
|
if (activity >= OBJ_NUM)
|
||||||
{
|
{
|
||||||
gpio_set(LGRED_PINX, 0);
|
// activity大于植物的编号的话,代表没有计划任务需要执行
|
||||||
gpio_set(LGBLUE_PINX, 0);
|
for (uint8_t i = 0; i < OBJ_NUM; i++)
|
||||||
gpio_set(LGUVB_PINX, 0);
|
{
|
||||||
gpio_set(WATER_PINX, 0);
|
isnt_first[i] = 0;
|
||||||
|
}
|
||||||
|
gpio_set(LGRED_PINX, NO_LIGHT);
|
||||||
|
gpio_set(LGBLUE_PINX, NO_LIGHT);
|
||||||
|
gpio_set(LGUVB_PINX, NO_LIGHT);
|
||||||
|
gpio_set(WATER_PINX, NO_LIGHT);
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
//set_orient(plan_in[activity].x_orient, plan_in[activity].y_orient);
|
// 当activity对应于一个植物编号并且是第一次执行的时候,就执行计划
|
||||||
gpio_set(LGRED_PINX, plan_in[activity].lg_r);
|
if (isnt_first[activity] == 0)
|
||||||
gpio_set(LGBLUE_PINX, plan_in[activity].lg_b);
|
{
|
||||||
gpio_set(LGUVB_PINX, plan_in[activity].lg_uvb);
|
orient_presetop(0, PRESET_CALL, activity + 1);
|
||||||
gpio_set(WATER_PINX, plan_in[activity].water);
|
orient_presetop(1, PRESET_CALL, activity + 1);
|
||||||
|
gpio_set(LGRED_PINX, plan_in[activity].lg_r == 1 ? LIGHT : NO_LIGHT);
|
||||||
|
gpio_set(LGBLUE_PINX, plan_in[activity].lg_b == 1 ? LIGHT : NO_LIGHT);
|
||||||
|
gpio_set(LGUVB_PINX, plan_in[activity].lg_uvb == 1 ? LIGHT : NO_LIGHT);
|
||||||
|
gpio_set(WATER_PINX, plan_in[activity].water == 1 ? LIGHT : NO_LIGHT);
|
||||||
|
isnt_first[activity] = 1;
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
void plan_handle(void)
|
/**
|
||||||
|
* plan_ctr() - 计划控制
|
||||||
|
*
|
||||||
|
* 完成从计划数据到输出执行的功能。
|
||||||
|
*/
|
||||||
|
void plan_ctr(void)
|
||||||
{
|
{
|
||||||
uint8_t activity = PLAN_DATA_NUM;
|
// 首先初始化活动不为任意一个植物编号
|
||||||
|
uint8_t activity = OBJ_NUM;
|
||||||
|
|
||||||
for (uint8_t i = 0; i < PLAN_DATA_NUM; i++)
|
// 依次遍历每一个植物,得到需要执行的活动号,即对应的植物编号
|
||||||
|
for (uint8_t i = 0; i < OBJ_NUM; i++)
|
||||||
{
|
{
|
||||||
indata_to_outdata(&plan_in[i], &plan_out[i]);
|
indata_to_outdata(&plan_in[i], &plan_out[i]);
|
||||||
if (plan_in[i].sw == 1)
|
if (plan_in[i].sw == 1)
|
||||||
{
|
{
|
||||||
if (plan_out[i].is_lgreach == 1 || plan_out[i].is_wtreach == 1)
|
if (plan_out[i].is_reach == 1)
|
||||||
{
|
{
|
||||||
activity = i;
|
activity = i;
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
ctr_exe(activity);
|
plan_ctr_exe(activity);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* plan_handle() - 计划处理
|
||||||
|
*
|
||||||
|
* 完成计划模式的数据处理及输出功能,手动模式下因为简单不需要复杂的数据运算,
|
||||||
|
* 此处处理为空,直接在其输入部分执行
|
||||||
|
*/
|
||||||
|
void plan_handle(void)
|
||||||
|
{
|
||||||
|
if (gpio_get(AMS_KEY_PINX))
|
||||||
|
{
|
||||||
|
plan_ctr();
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
manul_ctr();
|
||||||
|
}
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* key_func() - 完成手动和自动模式下的按键输入功能
|
||||||
|
*
|
||||||
|
* 在自动模式下只是数据的输入,在手动模式在包括数据的输入和对应的输出执行部分。
|
||||||
|
*/
|
||||||
|
void key_func(void)
|
||||||
|
{
|
||||||
|
if (gpio_get(AMS_KEY_PINX))
|
||||||
|
{
|
||||||
|
plan_key_func();
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
manul_key_func();
|
||||||
|
}
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* manul_ctr() - 手动控制部分
|
||||||
|
*
|
||||||
|
* 为空函数
|
||||||
|
*/
|
||||||
|
void manul_ctr(void)
|
||||||
|
{
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* tft_to_plan_input() - 将tft显示的数据提取到计划处理的输入数据结构中
|
||||||
|
* @objn: 提取的对象号,0~7
|
||||||
|
*
|
||||||
|
* 这个函数应该在tft输入有改变是被调用。
|
||||||
|
*/
|
||||||
|
void tft_to_plan_input(uint8_t objn)
|
||||||
|
{
|
||||||
|
plan_in[objn].bg_t.year = *get_value_of_kvp("bg_y", objn);
|
||||||
|
plan_in[objn].bg_t.month = *get_value_of_kvp("bg_mo", objn);
|
||||||
|
plan_in[objn].bg_t.mday = *get_value_of_kvp("bg_d", objn);
|
||||||
|
plan_in[objn].bg_t.hour = *get_value_of_kvp("bg_h", objn);
|
||||||
|
plan_in[objn].bg_t.min = *get_value_of_kvp("bg_mi", objn);
|
||||||
|
plan_in[objn].bg_t.sec = 0;
|
||||||
|
|
||||||
|
/*
|
||||||
|
* 结束时间在tft条目没有年、月、日,赋值为和开始时间相同
|
||||||
|
*/
|
||||||
|
plan_in[objn].ed_t.year = plan_in[objn].bg_t.year;
|
||||||
|
plan_in[objn].ed_t.month = plan_in[objn].bg_t.month;
|
||||||
|
plan_in[objn].ed_t.mday = plan_in[objn].bg_t.mday;
|
||||||
|
plan_in[objn].ed_t.hour = *get_value_of_kvp("ed_h", objn);
|
||||||
|
plan_in[objn].ed_t.min = *get_value_of_kvp("ed_mi", objn);
|
||||||
|
plan_in[objn].ed_t.sec = 0;
|
||||||
|
|
||||||
|
plan_in[objn].pd_t.mday = *get_value_of_kvp("pd_d", objn);
|
||||||
|
plan_in[objn].pd_t.hour = *get_value_of_kvp("pd_h", objn);
|
||||||
|
plan_in[objn].pd_t.min = *get_value_of_kvp("pd_mi", objn);
|
||||||
|
|
||||||
|
plan_in[objn].lg_r = *get_value_of_kvp("lg_r", objn);
|
||||||
|
plan_in[objn].lg_b = *get_value_of_kvp("lg_b", objn);
|
||||||
|
plan_in[objn].lg_uvb = *get_value_of_kvp("lg_uvb", objn);
|
||||||
|
plan_in[objn].water = *get_value_of_kvp("water", objn);
|
||||||
|
|
||||||
|
plan_in[objn].sw = *get_value_of_kvp("sw", objn);
|
||||||
|
plan_in[objn].cnt = *get_value_of_kvp("cnt", objn);
|
||||||
|
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/*
|
||||||
|
* plan_inpu_to_tft() - 计划数据到tft
|
||||||
|
*
|
||||||
|
* 这个函数是为了在初始化时将从flash中恢复的计划数据重新装入tft
|
||||||
|
*/
|
||||||
|
static void plan_inpu_to_tft(void)
|
||||||
|
{
|
||||||
|
for(uint8_t objn = 0; objn < 8; objn++)
|
||||||
|
{
|
||||||
|
*get_value_of_kvp("bg_y", objn) = plan_in[objn].bg_t.year;
|
||||||
|
*get_value_of_kvp("bg_mo", objn) = plan_in[objn].bg_t.month;
|
||||||
|
*get_value_of_kvp("bg_d", objn) = plan_in[objn].bg_t.mday;
|
||||||
|
*get_value_of_kvp("bg_h", objn) = plan_in[objn].bg_t.hour;
|
||||||
|
*get_value_of_kvp("bg_mi", objn) = plan_in[objn].bg_t.min;
|
||||||
|
|
||||||
|
/*
|
||||||
|
* 结束时间在tft条目没有年、月、日
|
||||||
|
* *get_value_of_kvp("ed_y", objn) = plan_in[objn].ed_t.year;
|
||||||
|
* *get_value_of_kvp("ed_mo", objn) = plan_in[objn].ed_t.month;
|
||||||
|
* *get_value_of_kvp("ed_d", objn) = plan_in[objn].ed_t.mday;
|
||||||
|
*/
|
||||||
|
*get_value_of_kvp("ed_h", objn) = plan_in[objn].ed_t.hour;
|
||||||
|
*get_value_of_kvp("ed_mi", objn) = plan_in[objn].ed_t.min;
|
||||||
|
|
||||||
|
*get_value_of_kvp("pd_d", objn) = plan_in[objn].pd_t.mday;
|
||||||
|
*get_value_of_kvp("pd_h", objn) = plan_in[objn].pd_t.hour;
|
||||||
|
*get_value_of_kvp("pd_mi", objn) = plan_in[objn].pd_t.min;
|
||||||
|
|
||||||
|
*get_value_of_kvp("lg_r", objn) = plan_in[objn].lg_r;
|
||||||
|
*get_value_of_kvp("lg_b", objn) = plan_in[objn].lg_b;
|
||||||
|
*get_value_of_kvp("lg_uvb", objn) = plan_in[objn].lg_uvb;
|
||||||
|
*get_value_of_kvp("water", objn) = plan_in[objn].water;
|
||||||
|
|
||||||
|
*get_value_of_kvp("sw", objn) = plan_in[objn].sw;
|
||||||
|
*get_value_of_kvp("cnt", objn) = plan_in[objn].cnt;
|
||||||
|
}
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* plan_key_func() - 计划模式下按键的处理
|
||||||
|
*
|
||||||
|
* 主要和tft显示屏关
|
||||||
|
*/
|
||||||
|
static void plan_key_func(void)
|
||||||
|
{
|
||||||
|
/*
|
||||||
|
* 按键功能注册部分
|
||||||
|
*/
|
||||||
|
switch (get_key_mean(UP_KEY))
|
||||||
|
{
|
||||||
|
case N_KEY:
|
||||||
|
//printf("无键\n");
|
||||||
|
break;
|
||||||
|
case S_KEY:
|
||||||
|
#ifdef PM_DEBUG
|
||||||
|
printf("UP_KEY 单击\n");
|
||||||
|
#endif /* PM_DEBUG */
|
||||||
|
tft_left();
|
||||||
|
break;
|
||||||
|
case D_KEY:
|
||||||
|
#ifdef PM_DEBUG
|
||||||
|
printf("UP_KEY 双击\n");
|
||||||
|
#endif /* PM_DEBUG */
|
||||||
|
tft_up();
|
||||||
|
break;
|
||||||
|
case L_KEY:
|
||||||
|
#ifdef PM_DEBUG
|
||||||
|
printf("UP_KEY 长按\n");
|
||||||
|
#endif /* PM_DEBUG */
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
switch (get_key_mean(DOWN_KEY))
|
||||||
|
{
|
||||||
|
case N_KEY:
|
||||||
|
//printf("无键\n");
|
||||||
|
break;
|
||||||
|
case S_KEY:
|
||||||
|
#ifdef PM_DEBUG
|
||||||
|
printf("DOWN_KEY 单击\n");
|
||||||
|
#endif /* PM_DEBUG */
|
||||||
|
tft_right();
|
||||||
|
break;
|
||||||
|
case D_KEY:
|
||||||
|
#ifdef PM_DEBUG
|
||||||
|
printf("DOWN_KEY 双击\n");
|
||||||
|
#endif /* PM_DEBUG */
|
||||||
|
tft_down();
|
||||||
|
break;
|
||||||
|
case L_KEY:
|
||||||
|
#ifdef PM_DEBUG
|
||||||
|
printf("DOWN_KEY 长按\n");
|
||||||
|
#endif /* PM_DEBUG */
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
switch (get_key_mean(OK_KEY))
|
||||||
|
{
|
||||||
|
case N_KEY:
|
||||||
|
//printf("无键\n");
|
||||||
|
break;
|
||||||
|
case S_KEY:
|
||||||
|
#ifdef PM_DEBUG
|
||||||
|
printf("OK_KEY 单击\n");
|
||||||
|
tft_ok();
|
||||||
|
#endif /* PM_DEBUG */
|
||||||
|
break;
|
||||||
|
case D_KEY:
|
||||||
|
#ifdef PM_DEBUG
|
||||||
|
printf("OK_KEY 双击\n");
|
||||||
|
#endif /* PM_DEBUG */
|
||||||
|
break;
|
||||||
|
case L_KEY:
|
||||||
|
#ifdef PM_DEBUG
|
||||||
|
printf("OK_KEY 长按\n");
|
||||||
|
#endif /* PM_DEBUG */
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
switch (get_key_mean(RET_KEY))
|
||||||
|
{
|
||||||
|
case N_KEY:
|
||||||
|
//printf("无键\n");
|
||||||
|
break;
|
||||||
|
case S_KEY:
|
||||||
|
#ifdef PM_DEBUG
|
||||||
|
printf("RET_KEY 单击\n");
|
||||||
|
#endif /* PM_DEBUG */
|
||||||
|
tft_ret();
|
||||||
|
break;
|
||||||
|
case D_KEY:
|
||||||
|
#ifdef PM_DEBUG
|
||||||
|
printf("RET_KEY 双击\n");
|
||||||
|
#endif /* PM_DEBUG */
|
||||||
|
break;
|
||||||
|
case L_KEY:
|
||||||
|
#ifdef PM_DEBUG
|
||||||
|
printf("RET_KEY 长按\n");
|
||||||
|
#endif /* PM_DEBUG */
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
switch (get_key_mean(MR_KEY))
|
||||||
|
{
|
||||||
|
case N_KEY:
|
||||||
|
//printf("无键\n");
|
||||||
|
break;
|
||||||
|
case S_KEY:
|
||||||
|
#ifdef PM_DEBUG
|
||||||
|
printf("MR_KEY 单击\n");
|
||||||
|
#endif /* PM_DEBUG */
|
||||||
|
break;
|
||||||
|
case D_KEY:
|
||||||
|
#ifdef PM_DEBUG
|
||||||
|
printf("MR_KEY 双击\n");
|
||||||
|
#endif /* PM_DEBUG */
|
||||||
|
break;
|
||||||
|
case L_KEY:
|
||||||
|
#ifdef PM_DEBUG
|
||||||
|
printf("MR_KEY 长按\n");
|
||||||
|
#endif /* PM_DEBUG */
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
switch (get_key_mean(MB_KEY))
|
||||||
|
{
|
||||||
|
case N_KEY:
|
||||||
|
//printf("无键\n");
|
||||||
|
break;
|
||||||
|
case S_KEY:
|
||||||
|
#ifdef PM_DEBUG
|
||||||
|
printf("MB_KEY 单击\n");
|
||||||
|
#endif /* PM_DEBUG */
|
||||||
|
break;
|
||||||
|
case D_KEY:
|
||||||
|
#ifdef PM_DEBUG
|
||||||
|
printf("MB_KEY 双击\n");
|
||||||
|
#endif /* PM_DEBUG */
|
||||||
|
break;
|
||||||
|
case L_KEY:
|
||||||
|
#ifdef PM_DEBUG
|
||||||
|
printf("MB_KEY 长按\n");
|
||||||
|
#endif /* PM_DEBUG */
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
switch (get_key_mean(MUVB_KEY))
|
||||||
|
{
|
||||||
|
case N_KEY:
|
||||||
|
//printf("无键\n");
|
||||||
|
break;
|
||||||
|
case S_KEY:
|
||||||
|
#ifdef PM_DEBUG
|
||||||
|
printf("MUVB_KEY 单击\n");
|
||||||
|
#endif /* PM_DEBUG */
|
||||||
|
break;
|
||||||
|
case D_KEY:
|
||||||
|
#ifdef PM_DEBUG
|
||||||
|
printf("MUVB_KEY 双击\n");
|
||||||
|
#endif /* PM_DEBUG */
|
||||||
|
break;
|
||||||
|
case L_KEY:
|
||||||
|
#ifdef PM_DEBUG
|
||||||
|
printf("MUVB_KEY 长按\n");
|
||||||
|
#endif /* PM_DEBUG */
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* manul_key_func() - 手动模式下的按键功能
|
||||||
|
*
|
||||||
|
* 包括了按键的输入和对应的输出执行部分
|
||||||
|
*/
|
||||||
|
static void manul_key_func(void)
|
||||||
|
{
|
||||||
|
/*
|
||||||
|
* 按键功能注册部分
|
||||||
|
*/
|
||||||
|
static uint8_t mlgr, mlgb, mlguvb;
|
||||||
|
|
||||||
|
switch (get_key_mean(UP_KEY))
|
||||||
|
{
|
||||||
|
case N_KEY:
|
||||||
|
//printf("无键\n");
|
||||||
|
break;
|
||||||
|
case S_KEY:
|
||||||
|
#ifdef PM_DEBUG
|
||||||
|
printf("UP_KEY 单击\n");
|
||||||
|
#endif /* PM_DEBUG */
|
||||||
|
orient_setspeed(0, ORIENT_LEFT, 100);
|
||||||
|
break;
|
||||||
|
case D_KEY:
|
||||||
|
#ifdef PM_DEBUG
|
||||||
|
printf("UP_KEY 双击\n");
|
||||||
|
#endif /* PM_DEBUG */
|
||||||
|
orient_setspeed(0, ORIENT_RIGHT, 100);
|
||||||
|
break;
|
||||||
|
case L_KEY:
|
||||||
|
#ifdef PM_DEBUG
|
||||||
|
printf("UP_KEY 长按\n");
|
||||||
|
#endif /* PM_DEBUG */
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
switch (get_key_mean(DOWN_KEY))
|
||||||
|
{
|
||||||
|
case N_KEY:
|
||||||
|
//printf("无键\n");
|
||||||
|
break;
|
||||||
|
case S_KEY:
|
||||||
|
#ifdef PM_DEBUG
|
||||||
|
printf("DOWN_KEY 单击\n");
|
||||||
|
#endif /* PM_DEBUG */
|
||||||
|
orient_setspeed(1, ORIENT_LEFT, 100);
|
||||||
|
break;
|
||||||
|
case D_KEY:
|
||||||
|
#ifdef PM_DEBUG
|
||||||
|
printf("DOWN_KEY 双击\n");
|
||||||
|
#endif /* PM_DEBUG */
|
||||||
|
orient_setspeed(1, ORIENT_RIGHT, 100);
|
||||||
|
break;
|
||||||
|
case L_KEY:
|
||||||
|
#ifdef PM_DEBUG
|
||||||
|
printf("DOWN_KEY 长按\n");
|
||||||
|
#endif /* PM_DEBUG */
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
switch (get_key_mean(OK_KEY))
|
||||||
|
{
|
||||||
|
case N_KEY:
|
||||||
|
//printf("无键\n");
|
||||||
|
break;
|
||||||
|
case S_KEY:
|
||||||
|
#ifdef PM_DEBUG
|
||||||
|
printf("OK_KEY 单击\n");
|
||||||
|
#endif /* PM_DEBUG */
|
||||||
|
break;
|
||||||
|
case D_KEY:
|
||||||
|
#ifdef PM_DEBUG
|
||||||
|
printf("OK_KEY 双击\n");
|
||||||
|
#endif /* PM_DEBUG */
|
||||||
|
break;
|
||||||
|
case L_KEY:
|
||||||
|
#ifdef PM_DEBUG
|
||||||
|
printf("OK_KEY 长按\n");
|
||||||
|
#endif /* PM_DEBUG */
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
switch (get_key_mean(RET_KEY))
|
||||||
|
{
|
||||||
|
case N_KEY:
|
||||||
|
//printf("无键\n");
|
||||||
|
break;
|
||||||
|
case S_KEY:
|
||||||
|
#ifdef PM_DEBUG
|
||||||
|
printf("RET_KEY 单击\n");
|
||||||
|
#endif /* PM_DEBUG */
|
||||||
|
orient_setmode(0, MODE_MANUL);
|
||||||
|
orient_setmode(1, MODE_MANUL);
|
||||||
|
break;
|
||||||
|
case D_KEY:
|
||||||
|
#ifdef PM_DEBUG
|
||||||
|
printf("RET_KEY 双击\n");
|
||||||
|
#endif /* PM_DEBUG */
|
||||||
|
break;
|
||||||
|
case L_KEY:
|
||||||
|
#ifdef PM_DEBUG
|
||||||
|
printf("RET_KEY 长按\n");
|
||||||
|
#endif /* PM_DEBUG */
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
switch (get_key_mean(MR_KEY))
|
||||||
|
{
|
||||||
|
case N_KEY:
|
||||||
|
//printf("无键\n");
|
||||||
|
break;
|
||||||
|
case S_KEY:
|
||||||
|
#ifdef PM_DEBUG
|
||||||
|
printf("MR_KEY 单击\n");
|
||||||
|
#endif /* PM_DEBUG */
|
||||||
|
mlgr = !mlgr;
|
||||||
|
gpio_set(LGRED_PINX, mlgr == 1 ? LIGHT : NO_LIGHT);
|
||||||
|
break;
|
||||||
|
case D_KEY:
|
||||||
|
#ifdef PM_DEBUG
|
||||||
|
printf("MR_KEY 双击\n");
|
||||||
|
#endif /* PM_DEBUG */
|
||||||
|
break;
|
||||||
|
case L_KEY:
|
||||||
|
#ifdef PM_DEBUG
|
||||||
|
printf("MR_KEY 长按\n");
|
||||||
|
#endif /* PM_DEBUG */
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
switch (get_key_mean(MB_KEY))
|
||||||
|
{
|
||||||
|
case N_KEY:
|
||||||
|
//printf("无键\n");
|
||||||
|
break;
|
||||||
|
case S_KEY:
|
||||||
|
#ifdef PM_DEBUG
|
||||||
|
printf("MB_KEY 单击\n");
|
||||||
|
#endif /* PM_DEBUG */
|
||||||
|
mlgb = !mlgb;
|
||||||
|
gpio_set(LGBLUE_PINX, mlgb == 1 ? LIGHT : NO_LIGHT);
|
||||||
|
break;
|
||||||
|
case D_KEY:
|
||||||
|
#ifdef PM_DEBUG
|
||||||
|
printf("MB_KEY 双击\n");
|
||||||
|
#endif /* PM_DEBUG */
|
||||||
|
break;
|
||||||
|
case L_KEY:
|
||||||
|
#ifdef PM_DEBUG
|
||||||
|
printf("MB_KEY 长按\n");
|
||||||
|
#endif /* PM_DEBUG */
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
switch (get_key_mean(MUVB_KEY))
|
||||||
|
{
|
||||||
|
case N_KEY:
|
||||||
|
//printf("无键\n");
|
||||||
|
break;
|
||||||
|
case S_KEY:
|
||||||
|
#ifdef PM_DEBUG
|
||||||
|
printf("MUVB_KEY 单击\n");
|
||||||
|
#endif /* PM_DEBUG */
|
||||||
|
mlguvb = !mlguvb;
|
||||||
|
gpio_set(LGUVB_PINX, mlguvb == 1 ? LIGHT : NO_LIGHT);
|
||||||
|
break;
|
||||||
|
case D_KEY:
|
||||||
|
#ifdef PM_DEBUG
|
||||||
|
printf("MUVB_KEY 双击\n");
|
||||||
|
#endif /* PM_DEBUG */
|
||||||
|
break;
|
||||||
|
case L_KEY:
|
||||||
|
#ifdef PM_DEBUG
|
||||||
|
printf("MUVB_KEY 长按\n");
|
||||||
|
#endif /* PM_DEBUG */
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
|
||||||
|
|
@ -1,4 +1,6 @@
|
||||||
|
/*
|
||||||
|
* pm_flash.c - flash读写模块
|
||||||
|
*/
|
||||||
|
|
||||||
#include "SSD_FTFx.h"
|
#include "SSD_FTFx.h"
|
||||||
|
|
||||||
|
|
@ -24,7 +26,8 @@ FLASH_SSD_CONFIG flashSSDConfig =
|
||||||
|
|
||||||
pFLASHCOMMANDSEQUENCE g_FlashLaunchCommand = (pFLASHCOMMANDSEQUENCE)0xFFFFFFFF;
|
pFLASHCOMMANDSEQUENCE g_FlashLaunchCommand = (pFLASHCOMMANDSEQUENCE)0xFFFFFFFF;
|
||||||
|
|
||||||
uint16_t __ram_func[LAUNCH_CMD_SIZE/2]; /* array to copy __Launch_Command func to RAM */
|
/* array to copy __Launch_Command func to RAM */
|
||||||
|
uint16_t __ram_func[LAUNCH_CMD_SIZE/2];
|
||||||
|
|
||||||
void pm_flash_init(void)
|
void pm_flash_init(void)
|
||||||
{
|
{
|
||||||
|
|
@ -44,11 +47,12 @@ void pm_flash_init(void)
|
||||||
/*
|
/*
|
||||||
* flash_write() - 将数据写入flash
|
* flash_write() - 将数据写入flash
|
||||||
* @saddr: 要写入的数据的起始地址
|
* @saddr: 要写入的数据的起始地址
|
||||||
* @size: дÈëÊý¾ÝµÄ×Ö½ÚÊý
|
* @size: 写入数据的字节数,字节数必须要以4对齐!!!
|
||||||
*
|
*
|
||||||
* 这个函数的执行过程包括擦除和写入,默认的写入范围为flash的最后一个扇区,大小为
|
* 这个函数的执行过程包括擦除和写入,默认的写入范围为flash的最后一个扇区,大小为
|
||||||
* 1KB,如果要改变大小,改参数就可以了,注意不要覆盖了code,具体可看map文件。
|
* 1KB,如果要改变大小,改参数就可以了,注意不要覆盖了code,具体可看map文件。
|
||||||
* 擦除是一次性擦除全部选择的扇区范围,所以在写入的时候要注意保存先前写入的数据
|
* 擦除是一次性擦除全部选择的扇区范围,所以在写入的时候要注意保存先前写入的数据
|
||||||
|
* flash读取函数的起始地址等于flash写入函数的写入起始地址
|
||||||
*/
|
*/
|
||||||
void flash_write(uint8_t *saddr, uint16_t nbyte)
|
void flash_write(uint8_t *saddr, uint16_t nbyte)
|
||||||
{
|
{
|
||||||
|
|
@ -61,13 +65,16 @@ void flash_write(uint8_t *saddr, uint16_t nbyte)
|
||||||
/*
|
/*
|
||||||
* 擦除扇区
|
* 擦除扇区
|
||||||
*/
|
*/
|
||||||
dest = flashSSDConfig.PFlashBlockBase + BYTE2WORD(flashSSDConfig.PFlashBlockSize
|
dest = flashSSDConfig.PFlashBlockBase + BYTE2WORD(
|
||||||
|
flashSSDConfig.PFlashBlockSize
|
||||||
- USED_SECTOR_NUM * FTFx_PSECTOR_SIZE);
|
- USED_SECTOR_NUM * FTFx_PSECTOR_SIZE);
|
||||||
while ((dest + BYTE2WORD(FTFx_PSECTOR_SIZE)) <= (flashSSDConfig.PFlashBlockBase
|
while ((dest + BYTE2WORD(FTFx_PSECTOR_SIZE)) <=
|
||||||
+ BYTE2WORD(flashSSDConfig.PFlashBlockSize)))
|
(flashSSDConfig.PFlashBlockBase
|
||||||
|
+ BYTE2WORD(flashSSDConfig.PFlashBlockSize)))
|
||||||
{
|
{
|
||||||
size = FTFx_PSECTOR_SIZE;
|
size = FTFx_PSECTOR_SIZE;
|
||||||
ret = FlashEraseSector(&flashSSDConfig, dest, size, g_FlashLaunchCommand);
|
ret = FlashEraseSector(&flashSSDConfig, dest, size,
|
||||||
|
g_FlashLaunchCommand);
|
||||||
if (FTFx_OK != ret)
|
if (FTFx_OK != ret)
|
||||||
{
|
{
|
||||||
ErrorTrap(ret);
|
ErrorTrap(ret);
|
||||||
|
|
@ -77,7 +84,8 @@ void flash_write(uint8_t *saddr, uint16_t nbyte)
|
||||||
number = FTFx_PSECTOR_SIZE / PRD1SEC_ALIGN_SIZE;
|
number = FTFx_PSECTOR_SIZE / PRD1SEC_ALIGN_SIZE;
|
||||||
for(uint8_t i = 0x0U; i < 0x2U; i++)
|
for(uint8_t i = 0x0U; i < 0x2U; i++)
|
||||||
{
|
{
|
||||||
ret = FlashVerifySection(&flashSSDConfig, dest, number, i, g_FlashLaunchCommand);
|
ret = FlashVerifySection(&flashSSDConfig, dest, number, i,
|
||||||
|
g_FlashLaunchCommand);
|
||||||
if (FTFx_OK != ret)
|
if (FTFx_OK != ret)
|
||||||
{
|
{
|
||||||
ErrorTrap(ret);
|
ErrorTrap(ret);
|
||||||
|
|
@ -89,7 +97,8 @@ void flash_write(uint8_t *saddr, uint16_t nbyte)
|
||||||
/*
|
/*
|
||||||
* 写入数据
|
* 写入数据
|
||||||
*/
|
*/
|
||||||
dest = flashSSDConfig.PFlashBlockBase + BYTE2WORD(flashSSDConfig.PFlashBlockSize
|
dest = flashSSDConfig.PFlashBlockBase + BYTE2WORD(
|
||||||
|
flashSSDConfig.PFlashBlockSize
|
||||||
- (uint32_t)(USED_SECTOR_NUM * FTFx_PSECTOR_SIZE));
|
- (uint32_t)(USED_SECTOR_NUM * FTFx_PSECTOR_SIZE));
|
||||||
|
|
||||||
if ((dest + BYTE2WORD(size)) <= (flashSSDConfig.PFlashBlockBase
|
if ((dest + BYTE2WORD(size)) <= (flashSSDConfig.PFlashBlockBase
|
||||||
|
|
@ -104,7 +113,7 @@ void flash_write(uint8_t *saddr, uint16_t nbyte)
|
||||||
|
|
||||||
/* 校验和检验 */
|
/* 校验和检验 */
|
||||||
uint32_t sum = temp = 0x0U;
|
uint32_t sum = temp = 0x0U;
|
||||||
for (uint8_t i = 0x0U; i < nbyte; i++)
|
for (uint16_t i = 0x0U; i < nbyte; i++)
|
||||||
{
|
{
|
||||||
temp += saddr[i];
|
temp += saddr[i];
|
||||||
}
|
}
|
||||||
|
|
@ -129,9 +138,17 @@ void flash_write(uint8_t *saddr, uint16_t nbyte)
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
void flash_read(uint8_t *daddr, uint8_t nbyte)
|
/*
|
||||||
|
* flash_read() - 读取flash中写入的数据
|
||||||
|
* @daddr: 读取数据要保存的地址
|
||||||
|
* @nbyte: 要读取的字节数
|
||||||
|
*
|
||||||
|
* flash读取函数的起始地址等于flash写入函数的写入起始地址
|
||||||
|
*/
|
||||||
|
void flash_read(uint8_t *daddr, uint16_t nbyte)
|
||||||
{
|
{
|
||||||
uint8_t *saddr = (uint8_t *)(flashSSDConfig.PFlashBlockBase + BYTE2WORD(flashSSDConfig.PFlashBlockSize
|
uint8_t *saddr = (uint8_t *)(flashSSDConfig.PFlashBlockBase
|
||||||
|
+ BYTE2WORD(flashSSDConfig.PFlashBlockSize
|
||||||
- (uint32_t)(USED_SECTOR_NUM * FTFx_PSECTOR_SIZE)));
|
- (uint32_t)(USED_SECTOR_NUM * FTFx_PSECTOR_SIZE)));
|
||||||
|
|
||||||
for (uint16_t i = 0; i < nbyte; i++)
|
for (uint16_t i = 0; i < nbyte; i++)
|
||||||
|
|
@ -141,14 +158,9 @@ void flash_read(uint8_t *daddr, uint8_t nbyte)
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
/*********************************************************************
|
/*
|
||||||
*
|
* ErrorTrap() - flash操作错误处理
|
||||||
* Function Name : ErrorTrap
|
*/
|
||||||
* Description : Gets called when an error occurs.
|
|
||||||
* Arguments : uint32_t
|
|
||||||
* Return Value :
|
|
||||||
*
|
|
||||||
*********************************************************************/
|
|
||||||
void ErrorTrap(uint32_t ret)
|
void ErrorTrap(uint32_t ret)
|
||||||
{
|
{
|
||||||
while (1)
|
while (1)
|
||||||
|
|
@ -11,6 +11,7 @@
|
||||||
#include "include/pm_time.h"
|
#include "include/pm_time.h"
|
||||||
#include "include/plan_handle.h"
|
#include "include/plan_handle.h"
|
||||||
#include "include/pm_flash.h"
|
#include "include/pm_flash.h"
|
||||||
|
#include "include/orient.h"
|
||||||
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
|
|
@ -18,13 +19,14 @@
|
||||||
*/
|
*/
|
||||||
void pm_init(void)
|
void pm_init(void)
|
||||||
{
|
{
|
||||||
|
pm_flash_init();
|
||||||
debug_init();
|
debug_init();
|
||||||
key_init();
|
key_init();
|
||||||
knob_init();
|
knob_init();
|
||||||
st_base_init();
|
st_base_init();
|
||||||
tft_init();
|
tft_init();
|
||||||
ds1302_init();
|
ds1302_init();
|
||||||
plan_handle_init();
|
plan_handle_init(); // 计划处理初始化必须在flash初始化之后
|
||||||
pm_flash_init();
|
orient_init();
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -8,10 +8,9 @@
|
||||||
#include "include/config.h"
|
#include "include/config.h"
|
||||||
|
|
||||||
|
|
||||||
|
// 被维护的系统时间
|
||||||
static calendar_info system_time;
|
static calendar_info system_time;
|
||||||
|
|
||||||
enum { START_YEAR = 2000, SEC_IN_DAY = 24 * 60 * 60};
|
|
||||||
#define DAY_IN_YEAR(nyear) (is_leapyear(nyear) ? 366 : 365)
|
#define DAY_IN_YEAR(nyear) (is_leapyear(nyear) ? 366 : 365)
|
||||||
|
|
||||||
static const uint8_t day_leap[] = {
|
static const uint8_t day_leap[] = {
|
||||||
|
|
@ -24,22 +23,59 @@ static const uint8_t day_noleap[] = {
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
/*
|
||||||
|
* 静态函数声明
|
||||||
|
*/
|
||||||
static void ds1302_byte_write(uint8_t data);
|
static void ds1302_byte_write(uint8_t data);
|
||||||
static uint8_t ds1302_byte_read(void);
|
static uint8_t ds1302_byte_read(void);
|
||||||
static uint8_t ds1302_single_read(uint8_t addr);
|
static uint8_t ds1302_single_read(uint8_t addr);
|
||||||
static uint8_t ds1302_single_read(uint8_t addr);
|
void ds1302_single_write(uint8_t addr, uint8_t data);
|
||||||
static int16_t ymd_to_wday(int16_t year, int16_t month, int16_t mday);
|
static int16_t ymd_to_wday(int16_t year, int16_t month, int16_t mday);
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* ds1302_init() - ds1302的初始化
|
||||||
|
*
|
||||||
|
* 包括io的初始化以及当ds1302掉电时对其时间值设置初始值
|
||||||
|
*/
|
||||||
|
void ds1302_init(void)
|
||||||
|
{
|
||||||
|
//gpio_Interrupt_init(DS1302_CE_PINX, GPO, GPI_DISAB);
|
||||||
|
//gpio_Interrupt_init(DS1302_CLK_PINX, GPO, GPI_DISAB);
|
||||||
|
gpio_init(DS1302_CE_PINX, 1, 0);
|
||||||
|
gpio_init(DS1302_CLK_PINX, 1, 0);
|
||||||
|
gpio_Interrupt_init(DS1302_IO_PINX, GPI_UP_PF, GPI_DISAB);
|
||||||
|
|
||||||
|
// 使能写
|
||||||
|
ds1302_single_write(7, 0x00);
|
||||||
|
// 当ds1302掉电时设置时间初始值
|
||||||
|
if ((ds1302_single_read(0) & 0x80) == 1)
|
||||||
|
{
|
||||||
|
calendar_info sys_cal = { 0, 1, 2, 3, 4, 2012, 0, 1 };
|
||||||
|
ds1302_set_time(&sys_cal);
|
||||||
|
}
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* is_leapyear() - 判断是否为闰年
|
||||||
|
* @year: 要判断的年份
|
||||||
|
*
|
||||||
|
* 是闰年返回1,不是闰年返回0
|
||||||
|
*/
|
||||||
uint8_t is_leapyear(uint16_t year)
|
uint8_t is_leapyear(uint16_t year)
|
||||||
{
|
{
|
||||||
return (year % 4 == 0 && year % 100 != 0) || year % 400 == 0;
|
return (year % 4 == 0 && year % 100 != 0) || year % 400 == 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* get_month_days() - 得到给定年份和月份时对应月份的天数
|
||||||
|
* @year: 给定年份
|
||||||
|
* @month: 给定月份
|
||||||
|
*
|
||||||
|
* 返回值为对应的月份的天数
|
||||||
|
*/
|
||||||
uint8_t get_month_days(uint16_t year, uint8_t month)
|
uint8_t get_month_days(uint16_t year, uint8_t month)
|
||||||
{
|
{
|
||||||
switch (month)
|
switch (month)
|
||||||
|
|
@ -59,6 +95,10 @@ uint8_t get_month_days(uint16_t year, uint8_t month)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* ds1302_byte_write() - 向ds1302写入一个字节
|
||||||
|
* @data: 要写入的字节
|
||||||
|
*/
|
||||||
static void ds1302_byte_write(uint8_t data)
|
static void ds1302_byte_write(uint8_t data)
|
||||||
{
|
{
|
||||||
gpio_init(DS1302_IO_PINX, 1, 0);
|
gpio_init(DS1302_IO_PINX, 1, 0);
|
||||||
|
|
@ -82,6 +122,11 @@ static void ds1302_byte_write(uint8_t data)
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* ds1302_byte_read() - 从ds1302读取一个字节
|
||||||
|
*
|
||||||
|
* 返回读取到的字节
|
||||||
|
*/
|
||||||
static uint8_t ds1302_byte_read(void)
|
static uint8_t ds1302_byte_read(void)
|
||||||
{
|
{
|
||||||
uint8_t data = 0;
|
uint8_t data = 0;
|
||||||
|
|
@ -110,7 +155,12 @@ static uint8_t ds1302_byte_read(void)
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* ds1302_single_read() - ds1302在单字节模式下读取一个地址上的数据
|
||||||
|
* @addr: 要读取的地址
|
||||||
|
*
|
||||||
|
* 返回读取的到的字节值
|
||||||
|
*/
|
||||||
static uint8_t ds1302_single_read(uint8_t addr)
|
static uint8_t ds1302_single_read(uint8_t addr)
|
||||||
{
|
{
|
||||||
uint8_t cmd = 0,
|
uint8_t cmd = 0,
|
||||||
|
|
@ -136,6 +186,11 @@ static uint8_t ds1302_single_read(uint8_t addr)
|
||||||
return data;
|
return data;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* ds1302_single_write() - 在单字节模式下向ds1302的一个地址上写入一个字节的数据
|
||||||
|
* @addr: 要写入数据的地址
|
||||||
|
* @data: 要写入的数据
|
||||||
|
*/
|
||||||
void ds1302_single_write(uint8_t addr, uint8_t data)
|
void ds1302_single_write(uint8_t addr, uint8_t data)
|
||||||
{
|
{
|
||||||
uint8_t cmd = 0;
|
uint8_t cmd = 0;
|
||||||
|
|
@ -158,6 +213,10 @@ void ds1302_single_write(uint8_t addr, uint8_t data)
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* ds1302_set_time() - 向ds1302中写入时间
|
||||||
|
* @cal: 要写入的时间值地址
|
||||||
|
*/
|
||||||
void ds1302_set_time(calendar_info *cal)
|
void ds1302_set_time(calendar_info *cal)
|
||||||
{
|
{
|
||||||
ds1302_single_write(7, 0x00);
|
ds1302_single_write(7, 0x00);
|
||||||
|
|
@ -171,6 +230,10 @@ void ds1302_set_time(calendar_info *cal)
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* ds1302_read_time() - 从ds1302中读取时间
|
||||||
|
* @cal: 读取的时间值被存放的地址
|
||||||
|
*/
|
||||||
void ds1302_read_time(calendar_info *cal)
|
void ds1302_read_time(calendar_info *cal)
|
||||||
{
|
{
|
||||||
uint8_t rval;
|
uint8_t rval;
|
||||||
|
|
@ -182,7 +245,7 @@ void ds1302_read_time(calendar_info *cal)
|
||||||
rval = ds1302_single_read(2);
|
rval = ds1302_single_read(2);
|
||||||
cal->hour = (rval & 0x0f) + ((rval & 0x30) >> 4) * 10;
|
cal->hour = (rval & 0x0f) + ((rval & 0x30) >> 4) * 10;
|
||||||
rval = ds1302_single_read(3);
|
rval = ds1302_single_read(3);
|
||||||
cal->mday = (rval & 0x0f) + ((rval & 0x10) >> 4) * 10;
|
cal->mday = (rval & 0x0f) + ((rval & 0x30) >> 4) * 10;
|
||||||
rval = ds1302_single_read(4);
|
rval = ds1302_single_read(4);
|
||||||
cal->month = (rval & 0x0f) + ((rval & 0x10) >> 4) * 10;
|
cal->month = (rval & 0x0f) + ((rval & 0x10) >> 4) * 10;
|
||||||
rval = ds1302_single_read(5);
|
rval = ds1302_single_read(5);
|
||||||
|
|
@ -193,20 +256,9 @@ void ds1302_read_time(calendar_info *cal)
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
void ds1302_init(void)
|
/**
|
||||||
{
|
* maintain_system_time() - 设置系统时间变量
|
||||||
//gpio_Interrupt_init(DS1302_CE_PINX, GPO, GPI_DISAB);
|
*
|
||||||
//gpio_Interrupt_init(DS1302_CLK_PINX, GPO, GPI_DISAB);
|
|
||||||
gpio_init(DS1302_CE_PINX, 1, 0);
|
|
||||||
gpio_init(DS1302_CLK_PINX, 1, 0);
|
|
||||||
gpio_Interrupt_init(DS1302_IO_PINX, GPI_UP_PF, GPI_DISAB);
|
|
||||||
ds1302_single_write(7, 0x00);
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
/*
|
|
||||||
* 这个函数需要按所需的时间精度来定时调用
|
* 这个函数需要按所需的时间精度来定时调用
|
||||||
*/
|
*/
|
||||||
void maintain_system_time(void)
|
void maintain_system_time(void)
|
||||||
|
|
@ -217,6 +269,9 @@ void maintain_system_time(void)
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* get_system_time() - 返回系统时间
|
||||||
|
*/
|
||||||
calendar_info get_system_time(void)
|
calendar_info get_system_time(void)
|
||||||
{
|
{
|
||||||
return system_time;
|
return system_time;
|
||||||
|
|
@ -224,9 +279,13 @@ calendar_info get_system_time(void)
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
/*************************************************************/
|
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* calendar_to_sec() - 分解时间到日历时间的转换
|
||||||
|
* @cal: 被转换的分解时间
|
||||||
|
*
|
||||||
|
* 返回的是日历时间,即从某一个时间点到当前转换时间所经过的秒数
|
||||||
|
*/
|
||||||
uint32_t calendar_to_sec(calendar_info *cal)
|
uint32_t calendar_to_sec(calendar_info *cal)
|
||||||
{
|
{
|
||||||
uint32_t sec = cal->sec;
|
uint32_t sec = cal->sec;
|
||||||
|
|
@ -260,6 +319,12 @@ uint32_t calendar_to_sec(calendar_info *cal)
|
||||||
return sec;
|
return sec;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* sec_to_calendar() - 日历时间到分解时间的转换
|
||||||
|
* @cal: 被转换的日历时间
|
||||||
|
*
|
||||||
|
* 返回的是分解时间,即以年月日时分秒形式表示的时间
|
||||||
|
*/
|
||||||
calendar_info sec_to_calendar(uint32_t sec)
|
calendar_info sec_to_calendar(uint32_t sec)
|
||||||
{
|
{
|
||||||
calendar_info cal;
|
calendar_info cal;
|
||||||
|
|
@ -305,7 +370,14 @@ calendar_info sec_to_calendar(uint32_t sec)
|
||||||
return cal;
|
return cal;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* ymd_to_wday() - 从年份、月份、天数这三个数据得到对应在一个星期中的天数
|
||||||
|
* @year: 年份
|
||||||
|
* @month: 月份
|
||||||
|
* @mday: 当前月中已经过的天数
|
||||||
|
*
|
||||||
|
* 返回对应的一个星期中的天数
|
||||||
|
*/
|
||||||
static int16_t ymd_to_wday(int16_t year, int16_t month, int16_t mday)
|
static int16_t ymd_to_wday(int16_t year, int16_t month, int16_t mday)
|
||||||
{
|
{
|
||||||
if (is_leapyear(year))
|
if (is_leapyear(year))
|
||||||
|
|
|
||||||
|
|
@ -4,15 +4,16 @@
|
||||||
|
|
||||||
#include "include.h"
|
#include "include.h"
|
||||||
|
|
||||||
#include "include/simulat_timer.h"
|
|
||||||
#include "include/config.h"
|
#include "include/config.h"
|
||||||
#include "include/key.h"
|
#include "include/key.h"
|
||||||
|
|
||||||
|
#include "include/simulat_timer.h"
|
||||||
|
|
||||||
static volatile st_register st_r[SIMULAT_TIMER_NUM];
|
static volatile st_register st_r[SIMULAT_TIMER_NUM];
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
/*
|
/**
|
||||||
* st_init() - 初始化实现模拟定时器所需的pit定时器
|
* st_init() - 初始化实现模拟定时器所需的pit定时器
|
||||||
*
|
*
|
||||||
* 基础定时为1ms
|
* 基础定时为1ms
|
||||||
|
|
@ -27,7 +28,7 @@ void st_base_init(void)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
/*
|
/**
|
||||||
* st_init() - 初始化一个给定编号的模拟定时器
|
* st_init() - 初始化一个给定编号的模拟定时器
|
||||||
* @n: 定时器编号
|
* @n: 定时器编号
|
||||||
* @st_m: 定时模式
|
* @st_m: 定时模式
|
||||||
|
|
@ -58,7 +59,7 @@ uint8_t st_init(uint8_t n, st_mode st_m, uint32_t cmr_v)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
/*
|
/**
|
||||||
* st_close() - 关闭一个给定编号的模拟定时器
|
* st_close() - 关闭一个给定编号的模拟定时器
|
||||||
* @n: 定时器编号
|
* @n: 定时器编号
|
||||||
*/
|
*/
|
||||||
|
|
@ -68,7 +69,7 @@ void st_close(uint8_t n)
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
/**
|
||||||
* st_tcf() - 查询tcf位返回
|
* st_tcf() - 查询tcf位返回
|
||||||
* @n: 定时器编号
|
* @n: 定时器编号
|
||||||
*
|
*
|
||||||
|
|
@ -90,7 +91,7 @@ uint8_t st_tcf(uint8_t n)
|
||||||
return temp;
|
return temp;
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
/**
|
||||||
* st_tov() - 查询tov位返回
|
* st_tov() - 查询tov位返回
|
||||||
* @n: 定时器编号
|
* @n: 定时器编号
|
||||||
*
|
*
|
||||||
|
|
@ -111,7 +112,7 @@ uint8_t st_tov(uint8_t n)
|
||||||
return temp;
|
return temp;
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
/**
|
||||||
* st_count() - 查询当前模拟定时值
|
* st_count() - 查询当前模拟定时值
|
||||||
* @n: 定时器编号
|
* @n: 定时器编号
|
||||||
*
|
*
|
||||||
|
|
@ -123,7 +124,7 @@ uint32_t st_count(uint8_t n)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
/*
|
/**
|
||||||
* st_base() -定时调用以模拟N路定时器
|
* st_base() -定时调用以模拟N路定时器
|
||||||
*
|
*
|
||||||
* 定时的最小间隔等于这个函数被调用的周期
|
* 定时的最小间隔等于这个函数被调用的周期
|
||||||
|
|
|
||||||
File diff suppressed because it is too large
Load diff
41
plan_manage_main/src/app/water.c
Normal file
41
plan_manage_main/src/app/water.c
Normal file
|
|
@ -0,0 +1,41 @@
|
||||||
|
#include <stdint.h>
|
||||||
|
|
||||||
|
#include "adc.h"
|
||||||
|
|
||||||
|
#include "config.h"
|
||||||
|
#include "water.h"
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
void water_init(void)
|
||||||
|
{
|
||||||
|
gpio_init(WATER_PINX, 1, 1);
|
||||||
|
adc_init(MOISTURE_ADC0_CHN);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
uint16_t get_moisture(void)
|
||||||
|
{
|
||||||
|
uint16_t res;
|
||||||
|
|
||||||
|
res = adc_ave(MOISTURE_ADC0_CHN, ADC_16bit, 3);
|
||||||
|
return (uint16_t)((float)res / 0xffff * MOISTURE_RATIO + MOISTURE_MIN);
|
||||||
|
}
|
||||||
|
|
||||||
|
void water_ctr(uint16_t sv_moist)
|
||||||
|
{
|
||||||
|
uint16_t crt_moist = get_moisture();
|
||||||
|
|
||||||
|
if (sv_moist > crt_moist)
|
||||||
|
{
|
||||||
|
gpio_set(WATER_PINX, 0);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
gpio_set(WATER_PINX, 1);
|
||||||
|
}
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
@ -18,7 +18,7 @@
|
||||||
* OSCILLATO_50 50MH¾§Õñ
|
* OSCILLATO_50 50MH¾§Õñ
|
||||||
* OSCILLATO_8 8MH¾§Õñ
|
* OSCILLATO_8 8MH¾§Õñ
|
||||||
*/
|
*/
|
||||||
#define OSCILLATO_8
|
#define OSCILLATO_50
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
|
||||||
File diff suppressed because one or more lines are too long
|
|
@ -1,2 +1,2 @@
|
||||||
[MainWindow]
|
[MainWindow]
|
||||||
WindowPlacement=_ 129 165 1154 691 3
|
WindowPlacement=_ 139 121 1164 647 3
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue