first commit

This commit is contained in:
ZhangJinLong 2025-09-30 14:07:39 +08:00
parent 0f75f951b7
commit 9ca4aad163
65 changed files with 4749 additions and 5205 deletions

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

View File

@ -27,6 +27,7 @@
<ToolsetName>ARM-ADS</ToolsetName> <ToolsetName>ARM-ADS</ToolsetName>
<TargetOption> <TargetOption>
<CLKADS>12000000</CLKADS> <CLKADS>12000000</CLKADS>
<pArmCC>5060960::V5.06 update 7 (build 960)::.\ARMCC</pArmCC>
<OPTTT> <OPTTT>
<gFlags>1</gFlags> <gFlags>1</gFlags>
<BeepAtEnd>1</BeepAtEnd> <BeepAtEnd>1</BeepAtEnd>
@ -100,9 +101,6 @@
<tRSysVw>1</tRSysVw> <tRSysVw>1</tRSysVw>
<sRunDeb>0</sRunDeb> <sRunDeb>0</sRunDeb>
<sLrtime>0</sLrtime> <sLrtime>0</sLrtime>
<bEvRecOn>1</bEvRecOn>
<bSchkAxf>0</bSchkAxf>
<bTchkAxf>0</bTchkAxf>
<nTsel>4</nTsel> <nTsel>4</nTsel>
<sDll></sDll> <sDll></sDll>
<sDllPa></sDllPa> <sDllPa></sDllPa>
@ -140,7 +138,7 @@
<SetRegEntry> <SetRegEntry>
<Number>0</Number> <Number>0</Number>
<Key>JL2CM3</Key> <Key>JL2CM3</Key>
<Name>-U941000024 -O78 -S2 -ZTIFSpeedSel5000 -A0 -C0 -JU1 -JI127.0.0.1 -JP0 -RST0 -TO18 -TC10000000 -TP21 -TDS8001 -TDT0 -TDC1F -TIEFFFFFFFF -TIP8 -TB1 -TFE0 -FO15 -FD20000000 -FC2000 -FN1 -FF0NNC_ENS1_0x000_0x5F00 -FS010000000 -FL05F00</Name> <Name>-U941000024 -O78 -S6 -ZTIFSpeedSel500 -A0 -C0 -JU1 -JI127.0.0.1 -JP0 -RST0 -TO18 -TC10000000 -TP21 -TDS8013 -TDT0 -TDC1F -TIEFFFFFFFF -TIP8 -TB1 -TFE0 -FO15 -FD20000000 -FC2000 -FN1 -FF0NNC_ENS1_0x000_0x5F00 -FS010000000 -FL05F00</Name>
</SetRegEntry> </SetRegEntry>
<SetRegEntry> <SetRegEntry>
<Number>0</Number> <Number>0</Number>
@ -200,22 +198,6 @@
<Bp> <Bp>
<Number>3</Number> <Number>3</Number>
<Type>0</Type> <Type>0</Type>
<LineNumber>430</LineNumber>
<EnabledFlag>1</EnabledFlag>
<Address>0</Address>
<ByteObject>0</ByteObject>
<HtxType>0</HtxType>
<ManyObjects>0</ManyObjects>
<SizeOfObject>0</SizeOfObject>
<BreakByAccess>0</BreakByAccess>
<BreakIfRCount>0</BreakIfRCount>
<Filename>.\FWLIB\source\ENS1_TIMER.c</Filename>
<ExecCommand></ExecCommand>
<Expression></Expression>
</Bp>
<Bp>
<Number>4</Number>
<Type>0</Type>
<LineNumber>431</LineNumber> <LineNumber>431</LineNumber>
<EnabledFlag>1</EnabledFlag> <EnabledFlag>1</EnabledFlag>
<Address>0</Address> <Address>0</Address>
@ -229,22 +211,6 @@
<ExecCommand></ExecCommand> <ExecCommand></ExecCommand>
<Expression></Expression> <Expression></Expression>
</Bp> </Bp>
<Bp>
<Number>5</Number>
<Type>0</Type>
<LineNumber>410</LineNumber>
<EnabledFlag>1</EnabledFlag>
<Address>0</Address>
<ByteObject>0</ByteObject>
<HtxType>0</HtxType>
<ManyObjects>0</ManyObjects>
<SizeOfObject>0</SizeOfObject>
<BreakByAccess>0</BreakByAccess>
<BreakIfRCount>0</BreakIfRCount>
<Filename>.\FWLIB\source\ENS1_TIMER.c</Filename>
<ExecCommand></ExecCommand>
<Expression></Expression>
</Bp>
</Breakpoint> </Breakpoint>
<WatchWindow1> <WatchWindow1>
<Ww> <Ww>
@ -310,16 +276,6 @@
<LintExecutable></LintExecutable> <LintExecutable></LintExecutable>
<LintConfigFile></LintConfigFile> <LintConfigFile></LintConfigFile>
<bLintAuto>0</bLintAuto> <bLintAuto>0</bLintAuto>
<bAutoGenD>0</bAutoGenD>
<LntExFlags>0</LntExFlags>
<pMisraName></pMisraName>
<pszMrule></pszMrule>
<pSingCmds></pSingCmds>
<pMultCmds></pMultCmds>
<pMisraNamep></pMisraNamep>
<pszMrulep></pszMrulep>
<pSingCmdsp></pSingCmdsp>
<pMultCmdsp></pMultCmdsp>
</TargetOption> </TargetOption>
</Target> </Target>
@ -334,6 +290,7 @@
<FileNumber>1</FileNumber> <FileNumber>1</FileNumber>
<FileType>1</FileType> <FileType>1</FileType>
<tvExp>0</tvExp> <tvExp>0</tvExp>
<Focus>1</Focus>
<tvExpOptDlg>0</tvExpOptDlg> <tvExpOptDlg>0</tvExpOptDlg>
<bDave2>0</bDave2> <bDave2>0</bDave2>
<PathWithFileName>.\USER\mian.c</PathWithFileName> <PathWithFileName>.\USER\mian.c</PathWithFileName>
@ -354,66 +311,7 @@
<FileNumber>2</FileNumber> <FileNumber>2</FileNumber>
<FileType>1</FileType> <FileType>1</FileType>
<tvExp>0</tvExp> <tvExp>0</tvExp>
<tvExpOptDlg>0</tvExpOptDlg> <Focus>1</Focus>
<bDave2>0</bDave2>
<PathWithFileName>.\FWLIB\source\ENS1_UART.c</PathWithFileName>
<FilenameWithoutPath>ENS1_UART.c</FilenameWithoutPath>
<RteFlg>0</RteFlg>
<bShared>0</bShared>
</File>
<File>
<GroupNumber>2</GroupNumber>
<FileNumber>3</FileNumber>
<FileType>1</FileType>
<tvExp>0</tvExp>
<tvExpOptDlg>0</tvExpOptDlg>
<bDave2>0</bDave2>
<PathWithFileName>.\FWLIB\source\ENS1_GPIO.c</PathWithFileName>
<FilenameWithoutPath>ENS1_GPIO.c</FilenameWithoutPath>
<RteFlg>0</RteFlg>
<bShared>0</bShared>
</File>
<File>
<GroupNumber>2</GroupNumber>
<FileNumber>4</FileNumber>
<FileType>1</FileType>
<tvExp>0</tvExp>
<tvExpOptDlg>0</tvExpOptDlg>
<bDave2>0</bDave2>
<PathWithFileName>.\FWLIB\source\ENS1_MTP.c</PathWithFileName>
<FilenameWithoutPath>ENS1_MTP.c</FilenameWithoutPath>
<RteFlg>0</RteFlg>
<bShared>0</bShared>
</File>
<File>
<GroupNumber>2</GroupNumber>
<FileNumber>5</FileNumber>
<FileType>1</FileType>
<tvExp>0</tvExp>
<tvExpOptDlg>0</tvExpOptDlg>
<bDave2>0</bDave2>
<PathWithFileName>.\FWLIB\source\ENS1_CLOCK.c</PathWithFileName>
<FilenameWithoutPath>ENS1_CLOCK.c</FilenameWithoutPath>
<RteFlg>0</RteFlg>
<bShared>0</bShared>
</File>
<File>
<GroupNumber>2</GroupNumber>
<FileNumber>6</FileNumber>
<FileType>1</FileType>
<tvExp>0</tvExp>
<tvExpOptDlg>0</tvExpOptDlg>
<bDave2>0</bDave2>
<PathWithFileName>.\FWLIB\source\retarget.c</PathWithFileName>
<FilenameWithoutPath>retarget.c</FilenameWithoutPath>
<RteFlg>0</RteFlg>
<bShared>0</bShared>
</File>
<File>
<GroupNumber>2</GroupNumber>
<FileNumber>7</FileNumber>
<FileType>1</FileType>
<tvExp>0</tvExp>
<tvExpOptDlg>0</tvExpOptDlg> <tvExpOptDlg>0</tvExpOptDlg>
<bDave2>0</bDave2> <bDave2>0</bDave2>
<PathWithFileName>.\FWLIB\source\ENS1_TIMER.c</PathWithFileName> <PathWithFileName>.\FWLIB\source\ENS1_TIMER.c</PathWithFileName>
@ -421,11 +319,77 @@
<RteFlg>0</RteFlg> <RteFlg>0</RteFlg>
<bShared>0</bShared> <bShared>0</bShared>
</File> </File>
<File>
<GroupNumber>2</GroupNumber>
<FileNumber>3</FileNumber>
<FileType>1</FileType>
<tvExp>0</tvExp>
<Focus>1</Focus>
<tvExpOptDlg>0</tvExpOptDlg>
<bDave2>0</bDave2>
<PathWithFileName>.\FWLIB\source\ENS1_UART.c</PathWithFileName>
<FilenameWithoutPath>ENS1_UART.c</FilenameWithoutPath>
<RteFlg>0</RteFlg>
<bShared>0</bShared>
</File>
<File>
<GroupNumber>2</GroupNumber>
<FileNumber>4</FileNumber>
<FileType>1</FileType>
<tvExp>0</tvExp>
<Focus>1</Focus>
<tvExpOptDlg>0</tvExpOptDlg>
<bDave2>0</bDave2>
<PathWithFileName>.\FWLIB\source\ENS1_GPIO.c</PathWithFileName>
<FilenameWithoutPath>ENS1_GPIO.c</FilenameWithoutPath>
<RteFlg>0</RteFlg>
<bShared>0</bShared>
</File>
<File>
<GroupNumber>2</GroupNumber>
<FileNumber>5</FileNumber>
<FileType>1</FileType>
<tvExp>0</tvExp>
<Focus>1</Focus>
<tvExpOptDlg>0</tvExpOptDlg>
<bDave2>0</bDave2>
<PathWithFileName>.\FWLIB\source\ENS1_MTP.c</PathWithFileName>
<FilenameWithoutPath>ENS1_MTP.c</FilenameWithoutPath>
<RteFlg>0</RteFlg>
<bShared>0</bShared>
</File>
<File>
<GroupNumber>2</GroupNumber>
<FileNumber>6</FileNumber>
<FileType>1</FileType>
<tvExp>0</tvExp>
<Focus>1</Focus>
<tvExpOptDlg>0</tvExpOptDlg>
<bDave2>0</bDave2>
<PathWithFileName>.\FWLIB\source\ENS1_CLOCK.c</PathWithFileName>
<FilenameWithoutPath>ENS1_CLOCK.c</FilenameWithoutPath>
<RteFlg>0</RteFlg>
<bShared>0</bShared>
</File>
<File>
<GroupNumber>2</GroupNumber>
<FileNumber>7</FileNumber>
<FileType>1</FileType>
<tvExp>0</tvExp>
<Focus>1</Focus>
<tvExpOptDlg>0</tvExpOptDlg>
<bDave2>0</bDave2>
<PathWithFileName>.\FWLIB\source\retarget.c</PathWithFileName>
<FilenameWithoutPath>retarget.c</FilenameWithoutPath>
<RteFlg>0</RteFlg>
<bShared>0</bShared>
</File>
<File> <File>
<GroupNumber>2</GroupNumber> <GroupNumber>2</GroupNumber>
<FileNumber>8</FileNumber> <FileNumber>8</FileNumber>
<FileType>1</FileType> <FileType>1</FileType>
<tvExp>0</tvExp> <tvExp>0</tvExp>
<Focus>1</Focus>
<tvExpOptDlg>0</tvExpOptDlg> <tvExpOptDlg>0</tvExpOptDlg>
<bDave2>0</bDave2> <bDave2>0</bDave2>
<PathWithFileName>.\FWLIB\source\ENS1_BOOST.c</PathWithFileName> <PathWithFileName>.\FWLIB\source\ENS1_BOOST.c</PathWithFileName>
@ -438,6 +402,7 @@
<FileNumber>9</FileNumber> <FileNumber>9</FileNumber>
<FileType>1</FileType> <FileType>1</FileType>
<tvExp>0</tvExp> <tvExp>0</tvExp>
<Focus>1</Focus>
<tvExpOptDlg>0</tvExpOptDlg> <tvExpOptDlg>0</tvExpOptDlg>
<bDave2>0</bDave2> <bDave2>0</bDave2>
<PathWithFileName>.\FWLIB\source\ENS1_WAVEGEN.c</PathWithFileName> <PathWithFileName>.\FWLIB\source\ENS1_WAVEGEN.c</PathWithFileName>
@ -474,6 +439,7 @@
<FileNumber>10</FileNumber> <FileNumber>10</FileNumber>
<FileType>1</FileType> <FileType>1</FileType>
<tvExp>0</tvExp> <tvExp>0</tvExp>
<Focus>1</Focus>
<tvExpOptDlg>0</tvExpOptDlg> <tvExpOptDlg>0</tvExpOptDlg>
<bDave2>0</bDave2> <bDave2>0</bDave2>
<PathWithFileName>.\CORE\system_CMSDK_CM0.c</PathWithFileName> <PathWithFileName>.\CORE\system_CMSDK_CM0.c</PathWithFileName>
@ -486,6 +452,7 @@
<FileNumber>11</FileNumber> <FileNumber>11</FileNumber>
<FileType>2</FileType> <FileType>2</FileType>
<tvExp>0</tvExp> <tvExp>0</tvExp>
<Focus>1</Focus>
<tvExpOptDlg>0</tvExpOptDlg> <tvExpOptDlg>0</tvExpOptDlg>
<bDave2>0</bDave2> <bDave2>0</bDave2>
<PathWithFileName>.\CORE\ARM\startup_CMSDK_CM0.s</PathWithFileName> <PathWithFileName>.\CORE\ARM\startup_CMSDK_CM0.s</PathWithFileName>

View File

@ -10,15 +10,13 @@
<TargetName>ENS001_BASIC_PRJ</TargetName> <TargetName>ENS001_BASIC_PRJ</TargetName>
<ToolsetNumber>0x4</ToolsetNumber> <ToolsetNumber>0x4</ToolsetNumber>
<ToolsetName>ARM-ADS</ToolsetName> <ToolsetName>ARM-ADS</ToolsetName>
<pArmCC>5060750::V5.06 update 6 (build 750)::.\ARM_Compiler_5.06u7</pArmCC> <pArmCC>5060960::V5.06 update 7 (build 960)::.\ARMCC</pArmCC>
<pCCUsed>5060750::V5.06 update 6 (build 750)::.\ARM_Compiler_5.06u7</pCCUsed>
<uAC6>8</uAC6>
<TargetOption> <TargetOption>
<TargetCommonOption> <TargetCommonOption>
<Device>ARMCM0</Device> <Device>ARMCM0</Device>
<Vendor>ARM</Vendor> <Vendor>ARM</Vendor>
<PackID>ARM.Cortex_DFP.1.1.0</PackID> <PackID>ARM.CMSIS.5.8.0</PackID>
<PackURL>https://www.keil.com/pack/</PackURL> <PackURL>http://www.keil.com/pack/</PackURL>
<Cpu>IRAM(0x20000000,0x00020000) IROM(0x00000000,0x00040000) CPUTYPE("Cortex-M0") CLOCK(12000000) ESEL ELITTLE</Cpu> <Cpu>IRAM(0x20000000,0x00020000) IROM(0x00000000,0x00040000) CPUTYPE("Cortex-M0") CLOCK(12000000) ESEL ELITTLE</Cpu>
<FlashUtilSpec></FlashUtilSpec> <FlashUtilSpec></FlashUtilSpec>
<StartupFile></StartupFile> <StartupFile></StartupFile>
@ -127,6 +125,47 @@
<HexOffset>0</HexOffset> <HexOffset>0</HexOffset>
<Oh166RecLen>16</Oh166RecLen> <Oh166RecLen>16</Oh166RecLen>
</OPTHX> </OPTHX>
<Simulator>
<UseSimulator>0</UseSimulator>
<LoadApplicationAtStartup>1</LoadApplicationAtStartup>
<RunToMain>1</RunToMain>
<RestoreBreakpoints>1</RestoreBreakpoints>
<RestoreWatchpoints>1</RestoreWatchpoints>
<RestoreMemoryDisplay>1</RestoreMemoryDisplay>
<RestoreFunctions>1</RestoreFunctions>
<RestoreToolbox>1</RestoreToolbox>
<LimitSpeedToRealTime>0</LimitSpeedToRealTime>
<RestoreSysVw>1</RestoreSysVw>
</Simulator>
<Target>
<UseTarget>1</UseTarget>
<LoadApplicationAtStartup>1</LoadApplicationAtStartup>
<RunToMain>1</RunToMain>
<RestoreBreakpoints>1</RestoreBreakpoints>
<RestoreWatchpoints>1</RestoreWatchpoints>
<RestoreMemoryDisplay>1</RestoreMemoryDisplay>
<RestoreFunctions>0</RestoreFunctions>
<RestoreToolbox>1</RestoreToolbox>
<RestoreTracepoints>1</RestoreTracepoints>
<RestoreSysVw>1</RestoreSysVw>
</Target>
<RunDebugAfterBuild>0</RunDebugAfterBuild>
<TargetSelection>4</TargetSelection>
<SimDlls>
<CpuDll></CpuDll>
<CpuDllArguments></CpuDllArguments>
<PeripheralDll></PeripheralDll>
<PeripheralDllArguments></PeripheralDllArguments>
<InitializationFile></InitializationFile>
</SimDlls>
<TargetDlls>
<CpuDll></CpuDll>
<CpuDllArguments></CpuDllArguments>
<PeripheralDll></PeripheralDll>
<PeripheralDllArguments></PeripheralDllArguments>
<InitializationFile></InitializationFile>
<Driver>Segger\JL2CM3.dll</Driver>
</TargetDlls>
</DebugOption> </DebugOption>
<Utilities> <Utilities>
<Flash1> <Flash1>
@ -185,16 +224,12 @@
<hadXRAM>0</hadXRAM> <hadXRAM>0</hadXRAM>
<uocXRam>0</uocXRam> <uocXRam>0</uocXRam>
<RvdsVP>0</RvdsVP> <RvdsVP>0</RvdsVP>
<RvdsMve>0</RvdsMve>
<RvdsCdeCp>0</RvdsCdeCp>
<nBranchProt>0</nBranchProt>
<hadIRAM2>0</hadIRAM2> <hadIRAM2>0</hadIRAM2>
<hadIROM2>0</hadIROM2> <hadIROM2>0</hadIROM2>
<StupSel>8</StupSel> <StupSel>8</StupSel>
<useUlib>1</useUlib> <useUlib>1</useUlib>
<EndSel>1</EndSel> <EndSel>1</EndSel>
<uLtcg>0</uLtcg> <uLtcg>0</uLtcg>
<nSecure>0</nSecure>
<RoSelD>3</RoSelD> <RoSelD>3</RoSelD>
<RwSelD>3</RwSelD> <RwSelD>3</RwSelD>
<CodeSel>0</CodeSel> <CodeSel>0</CodeSel>
@ -328,15 +363,9 @@
<uThumb>0</uThumb> <uThumb>0</uThumb>
<uSurpInc>0</uSurpInc> <uSurpInc>0</uSurpInc>
<uC99>1</uC99> <uC99>1</uC99>
<uGnu>0</uGnu>
<useXO>0</useXO> <useXO>0</useXO>
<v6Lang>1</v6Lang> <v6Lang>1</v6Lang>
<v6LangP>1</v6LangP> <v6LangP>1</v6LangP>
<vShortEn>1</vShortEn>
<vShortWch>1</vShortWch>
<v6Lto>0</v6Lto>
<v6WtE>0</v6WtE>
<v6Rtti>0</v6Rtti>
<VariousControls> <VariousControls>
<MiscControls></MiscControls> <MiscControls></MiscControls>
<Define></Define> <Define></Define>
@ -354,7 +383,6 @@
<NoWarn>0</NoWarn> <NoWarn>0</NoWarn>
<uSurpInc>0</uSurpInc> <uSurpInc>0</uSurpInc>
<useXO>0</useXO> <useXO>0</useXO>
<ClangAsOpt>1</ClangAsOpt>
<VariousControls> <VariousControls>
<MiscControls></MiscControls> <MiscControls></MiscControls>
<Define></Define> <Define></Define>
@ -395,6 +423,11 @@
<Group> <Group>
<GroupName>FWLIB</GroupName> <GroupName>FWLIB</GroupName>
<Files> <Files>
<File>
<FileName>ENS1_TIMER.c</FileName>
<FileType>1</FileType>
<FilePath>.\FWLIB\source\ENS1_TIMER.c</FilePath>
</File>
<File> <File>
<FileName>ENS1_UART.c</FileName> <FileName>ENS1_UART.c</FileName>
<FileType>1</FileType> <FileType>1</FileType>
@ -420,11 +453,6 @@
<FileType>1</FileType> <FileType>1</FileType>
<FilePath>.\FWLIB\source\retarget.c</FilePath> <FilePath>.\FWLIB\source\retarget.c</FilePath>
</File> </File>
<File>
<FileName>ENS1_TIMER.c</FileName>
<FileType>1</FileType>
<FilePath>.\FWLIB\source\ENS1_TIMER.c</FilePath>
</File>
<File> <File>
<FileName>ENS1_BOOST.c</FileName> <FileName>ENS1_BOOST.c</FileName>
<FileType>1</FileType> <FileType>1</FileType>
@ -462,19 +490,4 @@
</Target> </Target>
</Targets> </Targets>
<RTE>
<apis/>
<components/>
<files/>
</RTE>
<LayerInfo>
<Layers>
<Layer>
<LayName>ENS001_BASIC_PRJ</LayName>
<LayPrjMark>1</LayPrjMark>
</Layer>
</Layers>
</LayerInfo>
</Project> </Project>

View File

@ -96,9 +96,9 @@ struct SPI_FIFO_Struct //
{ {
uint8_t TX_FIFO_TH; // 0 - 16 char uint8_t TX_FIFO_TH; // 0 - 16 char
uint8_t RX_FIFO_TH; // 0 - 16 char uint8_t RX_FIFO_TH; // 0 - 16 char
bool FIFO_ENABLE_SET; int FIFO_ENABLE_SET;
bool TXDMA_SET; //选择是否启动DMA(fifo开启的前提下) int TXDMA_SET; //选择是否启动DMA(fifo开启的前提下)
bool RXDMA_SET; int RXDMA_SET;
}; };
/* 中断类型使能结构体 /* 中断类型使能结构体
@ -193,7 +193,7 @@ extern uint8_t TX_FIFO_EMPTY(CMSDK_SPI_TypeDef* SPIx) ; //
extern uint8_t SPI_FIFO_STATE(CMSDK_SPI_TypeDef* SPIx); extern uint8_t SPI_FIFO_STATE(CMSDK_SPI_TypeDef* SPIx);
extern uint8_t SPI_FIFO_ENABLE(CMSDK_SPI_TypeDef* SPIx ); //FIFO功能使能 extern uint8_t SPI_FIFO_ENABLE(CMSDK_SPI_TypeDef* SPIx ); //FIFO功能使能
extern uint8_t SPI_FIFO_DISABLE(CMSDK_SPI_TypeDef* SPIx ); //FIFO功能失能 extern uint8_t SPI_FIFO_DISABLE(CMSDK_SPI_TypeDef* SPIx ); //FIFO功能失能
extern uint8_t SPI_FIFODMA_SET(CMSDK_SPI_TypeDef* SPIx ,bool TXDMA_SET ,bool RXDMA_SET); //DMA设置 extern uint8_t SPI_FIFODMA_SET(CMSDK_SPI_TypeDef* SPIx ,int TXDMA_SET ,int RXDMA_SET); //DMA设置
extern uint8_t SPI_NSS_CHANNEL(CMSDK_SPI_TypeDef* SPIx ,NSS_CHANNEL_SEL NSSx ,FunctionalState ENorDIS); //nss通道选择 extern uint8_t SPI_NSS_CHANNEL(CMSDK_SPI_TypeDef* SPIx ,NSS_CHANNEL_SEL NSSx ,FunctionalState ENorDIS); //nss通道选择
extern uint8_t SPI_Config_init(CMSDK_SPI_TypeDef* SPIx , struct SPI_ModeConfig_Struct SPI_Config ,struct SPI_FIFO_Struct FIFO_Struct); //spi的初始配置 extern uint8_t SPI_Config_init(CMSDK_SPI_TypeDef* SPIx , struct SPI_ModeConfig_Struct SPI_Config ,struct SPI_FIFO_Struct FIFO_Struct); //spi的初始配置
extern uint8_t SPI_START(CMSDK_SPI_TypeDef* SPIx); extern uint8_t SPI_START(CMSDK_SPI_TypeDef* SPIx);
@ -202,6 +202,6 @@ extern uint8_t SPI_STOP(CMSDK_SPI_TypeDef* SPIx);
extern uint16_t READ_SPI_RCVBuff(CMSDK_SPI_TypeDef* SPIx ); extern uint16_t READ_SPI_RCVBuff(CMSDK_SPI_TypeDef* SPIx );
//写数据 //写数据
extern void WRITE_SPI_THRBuff(CMSDK_SPI_TypeDef* SPIx,uint8_t data); extern void WRITE_SPI_THRBuff(CMSDK_SPI_TypeDef* SPIx,uint8_t data);
extern uint8_t SPI_INT_SET(IRQn_Type IRQn, bool SPI_INT_ENABLE, uint8_t SPI_INT_BIT_SET); extern uint8_t SPI_INT_SET(IRQn_Type IRQn, int SPI_INT_ENABLE, uint8_t SPI_INT_BIT_SET);
#endif #endif

View File

@ -4,6 +4,7 @@
#include "my_header.h" #include "my_header.h"
extern uint8_t ems_control_count; // 电刺激控制计数器 extern uint8_t ems_control_count; // 电刺激控制计数器
extern uint8_t ems_state ; // 电刺激状态0=关闭1=开启 extern uint8_t ems_state ; // 电刺激状态0=关闭1=开启
extern uint8_t led_state;
// 时间管理标志位结构体 // 时间管理标志位结构体
typedef struct { typedef struct {
uint8_t T_1ms; // 1ms周期标志 uint8_t T_1ms; // 1ms周期标志

View File

@ -12,7 +12,7 @@
History: History:
1.V1.0 1.V1.0
Date: Date: -z
Author: Author:
Modification: <EFBFBD><EFBFBD><EFBFBD><EFBFBD> Modification: <EFBFBD><EFBFBD><EFBFBD><EFBFBD>
*/ */
@ -37,6 +37,10 @@ Modification: <20><><EFBFBD><EFBFBD>
#define InterruptEnable __enable_irq #define InterruptEnable __enable_irq
typedef enum uartRcvfifoTrigger{byte_1=0 , bytes_4=1,bytes_8=2,bytes_14=3}uartRcvTrigger; typedef enum uartRcvfifoTrigger{byte_1=0 , bytes_4=1,bytes_8=2,bytes_14=3}uartRcvTrigger;
typedef enum {OverSamp_16 = 0,OverSamp_13}UART_OverSamp; typedef enum {OverSamp_16 = 0,OverSamp_13}UART_OverSamp;
// 外部变量声明在main.c中定义
extern uint8_t uart_rx_buffer[64];
extern uint8_t uart_rx_count;
extern volatile uint8_t uart_data_ready;
@ -176,7 +180,20 @@ void UART_Init(CMSDK_UART_TypeDef *CMSDK_UART, UART_InitStructure* uart_paraX);
void UART_ITConfig(CMSDK_UART_TypeDef *CMSDK_UART, UART_ITStructure* uart_paraX); void UART_ITConfig(CMSDK_UART_TypeDef *CMSDK_UART, UART_ITStructure* uart_paraX);
unsigned char UartPutc(CMSDK_UART_TypeDef *CMSDK_UART ,unsigned char my_ch); unsigned char UartPutc(CMSDK_UART_TypeDef *CMSDK_UART ,unsigned char my_ch);
void Uart_Send(CMSDK_UART_TypeDef *CMSDK_UART ,uint8_t *data, uint8_t len); void Uart_Send(CMSDK_UART_TypeDef *CMSDK_UART ,uint8_t *data, uint8_t len);
typedef struct {
uint16_t function_code; // 功能码 (0x0003)
uint16_t data_length; // 数据长度 (0x0001)
uint8_t switch_type; // 开关状态以及电刺激类型
uint8_t intensity; // 强度值
uint16_t frequency; // 频率值
uint16_t duration; // 总持续时间 (ms)
uint16_t rest_time; // 休息时间 (ms)
uint16_t silent_time; // 静默时间 (ms)
uint8_t ramp_up_time; // 缓进时间
uint8_t hold_time; // 保持时间
uint8_t ramp_down_time; // 缓出时间
uint16_t crc16; // CRC16校验
} UART_EMS_Packet_t;

View File

@ -83,16 +83,16 @@ uint8_t SPI_FIFO_DISABLE(CMSDK_SPI_TypeDef* SPIx )
return (uint8_t)(SPIx->FCR & 0x1) ; return (uint8_t)(SPIx->FCR & 0x1) ;
} }
uint8_t SPI_FIFODMA_SET(CMSDK_SPI_TypeDef* SPIx ,bool TXDMA_SET ,bool RXDMA_SET) uint8_t SPI_FIFODMA_SET(CMSDK_SPI_TypeDef* SPIx ,int TXDMA_SET ,int RXDMA_SET)
{ {
if(TXDMA_SET == true) if(TXDMA_SET == 1)
SPIx->CTRL2 |= (1<<5); SPIx->CTRL2 |= (1<<5);
else if(TXDMA_SET == false) else if(TXDMA_SET == 0)
SPIx->CTRL2 &=~ (1<<5); SPIx->CTRL2 &=~ (1<<5);
if(TXDMA_SET == true) if(TXDMA_SET == 1)
SPIx->CTRL2 |= (1<<4); SPIx->CTRL2 |= (1<<4);
else if(TXDMA_SET == false) else if(TXDMA_SET == 0)
SPIx->CTRL2 &=~ (1<<4); SPIx->CTRL2 &=~ (1<<4);
return (uint8_t)((SPIx->CTRL2>>4)&0x3); return (uint8_t)((SPIx->CTRL2>>4)&0x3);
} }
@ -211,7 +211,7 @@ uint8_t SPI_Config_init(CMSDK_SPI_TypeDef* SPIx ,
SPIx->FCR |= (FIFO_Struct.RX_FIFO_TH << 2 ); SPIx->FCR |= (FIFO_Struct.RX_FIFO_TH << 2 );
CLR_TX_FIFO(SPIx) ; CLR_TX_FIFO(SPIx) ;
CLR_RX_FIFO(SPIx) ; CLR_RX_FIFO(SPIx) ;
if(FIFO_Struct.FIFO_ENABLE_SET == true) if(FIFO_Struct.FIFO_ENABLE_SET == 1)
SPI_FIFO_ENABLE(SPIx); SPI_FIFO_ENABLE(SPIx);
//SPI_FIFODMA_SET(SPIx ,FIFO_Struct.TXDMA_SET ,FIFO_Struct.RXDMA_SET); //SPI_FIFODMA_SET(SPIx ,FIFO_Struct.TXDMA_SET ,FIFO_Struct.RXDMA_SET);
return 0; return 0;
@ -279,7 +279,7 @@ void WRITE_SPI_THRBuff(CMSDK_SPI_TypeDef* SPIx,uint8_t data)
} }
/*------------------------------------------------------SPI?<3F><>?------------------------------------------------------*/ /*------------------------------------------------------SPI?<3F><>?------------------------------------------------------*/
uint8_t SPI_INT_SET(IRQn_Type IRQn, bool SPI_INT_ENABLE, uint8_t SPI_INT_BIT_SET) uint8_t SPI_INT_SET(IRQn_Type IRQn, int SPI_INT_ENABLE, uint8_t SPI_INT_BIT_SET)
{ {
NVIC_DisableIRQ(IRQn); NVIC_DisableIRQ(IRQn);
NVIC_ClearPendingIRQ(IRQn); NVIC_ClearPendingIRQ(IRQn);
@ -289,10 +289,10 @@ uint8_t SPI_INT_SET(IRQn_Type IRQn, bool SPI_INT_ENABLE, uint8_t SPI_INT_BIT_SET
} }
else if(IRQn == SPI1_IRQn) else if(IRQn == SPI1_IRQn)
{ {
CMSDK_SPI1->IER = ((CMSDK_SPI0->IER &~ (0xff)) | SPI_INT_BIT_SET); CMSDK_SPI1->IER = ((CMSDK_SPI1->IER &~ (0xff)) | SPI_INT_BIT_SET);
} }
if(SPI_INT_ENABLE == true) if(SPI_INT_ENABLE == 1)
{ {
NVIC_EnableIRQ(IRQn); NVIC_EnableIRQ(IRQn);
} }

View File

@ -5,6 +5,7 @@
uint8_t ems_control_count = 0; // 电刺激控制计数器 uint8_t ems_control_count = 0; // 电刺激控制计数器
uint8_t ems_state = 0; // 电刺激状态0=关闭1=开启 uint8_t ems_state = 0; // 电刺激状态0=关闭1=开启
uint16_t time_count = 0; uint16_t time_count = 0;
uint8_t led_state = 0;
void TIMER0_Init(uint32_t Int_Period) //形参,输入中断触发周期 单位ms void TIMER0_Init(uint32_t Int_Period) //形参,输入中断触发周期 单位ms
{ {
PCLK_Enable(TIMER0_PCLK_EN); PCLK_Enable(TIMER0_PCLK_EN);
@ -406,12 +407,12 @@ void Fuse_result(void)
time_flags->T_100ms = 0; // 清除标志位 time_flags->T_100ms = 0; // 清除标志位
} }
if (time_flags->T_1s) { if (time_flags->T_1s) {
GPIO_Overturn(GPIO_19);
// 1s周期任务 - 超低频任务 // 1s周期任务 - 超低频任务
ems_control_count++; // 每秒递增计数器 ems_control_count++; // 每秒递增计数器,
// 间断性放电控制逻辑 // 间断性放电控制逻辑
if (ems_control_count <= 10) { if (ems_control_count <= 10) {
// 前10秒开启电刺激 // 前10秒开启电刺激
@ -421,7 +422,7 @@ void Fuse_result(void)
EMS_Start(); // 启动电刺激 EMS_Start(); // 启动电刺激
} }
// 处理电刺激 // 处理电刺激
} else if (ems_control_count <= 20) { } else if (ems_control_count <= 20) {
// 后10秒关闭电刺激 // 后10秒关闭电刺激
if (ems_state == 1) { if (ems_state == 1) {

View File

@ -174,12 +174,33 @@ void UART_Init(CMSDK_UART_TypeDef *CMSDK_UART, UART_InitStructure* uart_paraX){
PCLK_Enable(UART0_PCLK_EN); PCLK_Enable(UART0_PCLK_EN);
GPIO_AltFunction(UART0_RX , ALT_FUNC1); //rx GPIO_AltFunction(UART0_RX , ALT_FUNC1); //rx
GPIO_AltFunction(UART0_TX , ALT_FUNC1); //tx GPIO_AltFunction(UART0_TX , ALT_FUNC1); //tx
// 修复正确配置GPIO方向
// GPIO2 (RX) 应该是输入
CMSDK_GPIO->OE &= ~(1 << UART0_RX); // 禁用输出
CMSDK_GPIO->IE |= (1 << UART0_RX); // 使能输入
// GPIO3 (TX) 应该是输出
CMSDK_GPIO->IE &= ~(1 << UART0_TX); // 禁用输入
CMSDK_GPIO->OE |= (1 << UART0_TX); // 使能输出
} }
else if(CMSDK_UART == CMSDK_UART1) else if(CMSDK_UART == CMSDK_UART1)
{ {
PCLK_Enable(UART1_PCLK_EN); PCLK_Enable(UART1_PCLK_EN);
GPIO_AltFunction(UART1_RX , ALT_FUNC1); //RX GPIO_AltFunction(UART1_RX , ALT_FUNC1); //RX
GPIO_AltFunction(UART1_TX , ALT_FUNC1); //TX GPIO_AltFunction(UART1_TX , ALT_FUNC1); //TX
// 修复正确配置GPIO方向
// GPIO12 (RX) 应该是输入
CMSDK_GPIO->OE &= ~(1 << UART1_RX); // 禁用输出
CMSDK_GPIO->IE |= (1 << UART1_RX); // 使能输入
// GPIO13 (TX) 应该是输出
CMSDK_GPIO->IE &= ~(1 << UART1_TX); // 禁用输入
CMSDK_GPIO->OE |= (1 << UART1_TX); // 使能输出
// 确保TX引脚初始化为高电平
CMSDK_GPIO->DATAOUT |= (1 << UART1_TX);
} }
/* 2 波特率设置*/ /* 2 波特率设置*/
if(((CMSDK_UART->MDR)&0x00000001) == 0) if(((CMSDK_UART->MDR)&0x00000001) == 0)
@ -312,23 +333,69 @@ void UART0_Handler(void) {
return; return;
} }
// 外部变量声明在main.c中定义
uint8_t uart_rx_buffer[64];
uint8_t uart_rx_count;
volatile uint8_t uart_data_ready;
// 外部函数声明
extern uint8_t ParseUART_EMS_Packet(uint8_t *data, uint16_t length, void *packet);
extern void UpdateEMS_ConfigFromUART(void *packet);
// 数据包结构体定义
void UART1_Handler(void) { void UART1_Handler(void) {
uint8_t rev_data = 0; uint8_t rev_data = 0;
uint32_t ParamNumber = 0;
// 清除NVIC中断挂起位
NVIC_ClearPendingIRQ(UART1_IRQn); NVIC_ClearPendingIRQ(UART1_IRQn);
//接收线中断 有错误或者break
if(UART_INT_TYPE(CMSDK_UART1) == INT_RCV_LINE_STATUS) { // 检查中断类型
CMSDK_UART1->IER &= ~CMSDK_UART_IER_RLSI_EN_Msk; uint8_t int_type = UART_INT_TYPE(CMSDK_UART1);
// 接收线中断 - 有错误或者break
if(int_type == INT_RCV_LINE_STATUS) {
// 读取LSR寄存器清除错误状态
uint32_t lsr = CMSDK_UART1->LSR;
(void)lsr; // 避免未使用变量警告
} }
//数据就绪中断 // 数据就绪中断或接收超时中断
//接收超时中断 if((int_type == INT_RCV_DATA_AVAILABLE) || (int_type == INT_CHAR_TIMEOUT_INDICATION)) {
if((UART_INT_TYPE(CMSDK_UART1) == INT_RCV_DATA_AVAILABLE) || (UART_INT_TYPE(CMSDK_UART1) == INT_CHAR_TIMEOUT_INDICATION)) { ParamNumber = (CMSDK_UART1->FSR >> 16) & 0x1f;
CMSDK_UART1->IER &= ~CMSDK_UART_IER_RDAI_EN_Msk; for(uint32_t i = 0; i < ParamNumber; i++) {
rev_data = CMSDK_UART1->RBR; rev_data = CMSDK_UART1->RBR; // 把接收到的数据取出来
UartPutc(CMSDK_UART1,rev_data);
CMSDK_UART1->IER |= CMSDK_UART_IER_RDAI_EN_Msk; // 将数据存储到缓冲区
} if(uart_rx_count < sizeof(uart_rx_buffer)) {
uart_rx_buffer[uart_rx_count] = rev_data;
uart_rx_count++;
} else {
// 缓冲区溢出,重置
uart_rx_count = 0;
}
UartPutc(CMSDK_UART1, rev_data); // 把接收到的数据再发回去
}
// 检查是否收到完整数据包19字节
if(uart_rx_count >= 19) {
//printf("1");
// 解析数据包
UART_EMS_Packet_t ems_packet;
if(ParseUART_EMS_Packet(uart_rx_buffer, uart_rx_count, &ems_packet)) {
// 更新电刺激配置
UpdateEMS_ConfigFromUART(&ems_packet);
} else {
}
// 清除缓冲区
uart_rx_count = 0;
}
}
return; return;
} }

View File

@ -221,21 +221,21 @@ void EMS_Process_Ramp(void)
} }
// 计算每个强度步进需要的毫秒数 // 计算每个强度步进需要的毫秒数
uint32_t ramp_up_ms = ems_config.ramp_up_time * 1000; uint32_t ramp_up_ms = g_ems_config.ramp_up_time * 1000;
uint32_t hold_ms = ems_config.hold_time * 1000; uint32_t hold_ms = g_ems_config.hold_time * 1000;
uint32_t ramp_down_ms = ems_config.ramp_down_time * 1000; uint32_t ramp_down_ms = g_ems_config.ramp_down_time * 1000;
switch (g_ramp_phase) switch (g_ramp_phase)
{ {
case 0: // 缓进阶段 case 0: // 缓进阶段
{ {
if ( time_count <= ems_config.ramp_up_time*1000 ) if ( time_count <= g_ems_config.ramp_up_time*1000 )
{ {
// 计算当前应该达到的强度 // 计算当前应该达到的强度
uint16_t target_intensity = (time_count * ems_config.intensity) / ramp_up_ms; uint16_t target_intensity = (time_count * g_ems_config.intensity) / ramp_up_ms;
if (target_intensity > ems_config.intensity) { if (target_intensity > g_ems_config.intensity) {
target_intensity = ems_config.intensity; target_intensity = g_ems_config.intensity;
} }
g_current_intensity = target_intensity; g_current_intensity = target_intensity;
} }
@ -243,7 +243,7 @@ void EMS_Process_Ramp(void)
{ {
// 缓进完成,进入保持阶段 // 缓进完成,进入保持阶段
g_ramp_phase = 1; g_ramp_phase = 1;
g_current_intensity = ems_config.intensity; // 确保达到最大强度 g_current_intensity = g_ems_config.intensity; // 确保达到最大强度
} }
break; break;
} }
@ -252,7 +252,7 @@ void EMS_Process_Ramp(void)
{ {
if(time_count <= (ramp_up_ms + hold_ms)) if(time_count <= (ramp_up_ms + hold_ms))
{ {
g_current_intensity = ems_config.intensity; g_current_intensity = g_ems_config.intensity;
} }
else else
{ {
@ -270,10 +270,10 @@ void EMS_Process_Ramp(void)
uint32_t ramp_down_elapsed = time_count - ramp_down_start; uint32_t ramp_down_elapsed = time_count - ramp_down_start;
// 计算当前应该达到的强度从最大值递减到0 // 计算当前应该达到的强度从最大值递减到0
uint16_t target_intensity = ems_config.intensity - uint16_t target_intensity = g_ems_config.intensity -
(ramp_down_elapsed * ems_config.intensity) / ramp_down_ms; (ramp_down_elapsed * g_ems_config.intensity) / ramp_down_ms;
if (target_intensity > ems_config.intensity) { if (target_intensity > g_ems_config.intensity) {
target_intensity = 0; target_intensity = 0;
} }
g_current_intensity = target_intensity; g_current_intensity = target_intensity;
@ -288,7 +288,6 @@ void EMS_Process_Ramp(void)
} }
} }
} }
// 注意不要在这里重置time_count让它继续计数
} }
// 更新波形强度(不重新配置硬件) // 更新波形强度(不重新配置硬件)

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

View File

@ -297,11 +297,12 @@ ARM Macro Assembler Page 5
00000000 00000000
00000000 00000000
Command Line: --debug --xref --diag_suppress=9931 --cpu=Cortex-M0 --apcs=interw Command Line: --debug --xref --diag_suppress=9931 --cpu=Cortex-M0 --apcs=interw
ork --depend=.\objects\startup_cmsdk_cm0.d -o.\objects\startup_cmsdk_cm0.o -ID: ork --depend=.\objects\startup_cmsdk_cm0.d -o.\objects\startup_cmsdk_cm0.o -IC:
\Keil_v5\ARM\Packs\ARM\Cortex_DFP\1.1.0\Device\ARMCM0\Include -ID:\Keil_v5\ARM\ \Users\29096\Desktop\work\ůоåÈ\TIMER_DEMO\RTE -IC:\Users\29096\AppData\Local\
Packs\ARM\Cortex_DFP\1.1.0\Device\ARM\ARMCM0\Include --predefine="__MICROLIB SE Arm\Packs\ARM\CMSIS\5.8.0\Device\ARM\ARMCM0\Include -IC:\Keil_v5\ARM\CMSIS\Incl
TA 1" --predefine="__UVISION_VERSION SETA 538" --predefine="ARMCM0 SETA 1" --li ude --predefine="__MICROLIB SETA 1" --predefine="__UVISION_VERSION SETA 514" --
st=.\listings\startup_cmsdk_cm0.lst CORE\ARM\startup_CMSDK_CM0.s predefine="ARMCM0 SETA 1" --list=.\listings\startup_cmsdk_cm0.lst CORE\ARM\star
tup_CMSDK_CM0.s

Binary file not shown.

View File

@ -3,62 +3,42 @@
<pre> <pre>
<h1>µVision Build Log</h1> <h1>µVision Build Log</h1>
<h2>Tool Versions:</h2> <h2>Tool Versions:</h2>
IDE-Version: ¦ÌVision V5.38.0.0 IDE-Version: ¦ÌVision V5.14.2
Copyright (C) 2022 ARM Ltd and ARM Germany GmbH. All rights reserved. Copyright (C) 2015 ARM Ltd and ARM Germany GmbH. All rights reserved.
License Information: rick chen, hangzhouQX, LIC=RC93N-YY58Z-RAADM-X0YVM-V5YIY-0QTVL License Information: s 2909605431@qq.com, s, LIC=CZLZX-HAP5E-WFDI7-E212L-HDEAA-ZXKD1
Tool Versions: Tool Versions:
Toolchain: MDK-ARM Plus Version: 5.38.0.0 Toolchain: MDK-ARM Standard Version: 5.36.0.0
Toolchain Path: D:\Keil_v5\ARM\ARM_Compiler_5.06u7\Bin Toolchain Path: C:\Keil_v5\ARM\ARMCC\Bin
C Compiler: Armcc.exe V5.06 update 6 (build 750) C Compiler: Armcc.exe V5.06 update 7 (build 960)
Assembler: Armasm.exe V5.06 update 6 (build 750) Assembler: Armasm.exe V5.06 update 7 (build 960)
Linker/Locator: ArmLink.exe V5.06 update 6 (build 750) Linker/Locator: ArmLink.exe V5.06 update 7 (build 960)
Library Manager: ArmAr.exe V5.06 update 6 (build 750) Library Manager: ArmAr.exe V5.06 update 7 (build 960)
Hex Converter: FromElf.exe V5.06 update 6 (build 750) Hex Converter: FromElf.exe V5.06 update 7 (build 960)
CPU DLL: SARMCM3.DLL V5.38.0.0 CPU DLL: SARMCM3.DLL V5.36.0.0
Dialog DLL: DARMCM1.DLL V1.19.6.0 Dialog DLL: DARMCM1.DLL V1.19.4.0
Target DLL: Segger\JL2CM3.dll V2.99.42.0 Target DLL: Segger\JL2CM3.dll V2.99.15.0
Dialog DLL: TARMCM1.DLL V1.14.6.0 Dialog DLL: TARMCM1.DLL V1.14.4.0
<h2>Project:</h2> <h2>Project:</h2>
E:\WeChat Files\wxid_2yspimlbsy4d22\xwechat_files\wxid_2yspimlbsy4d22_74fb\msg\file\2025-09\TIMER_DEMO\TIMER_DEMO\ENS001_BASIC_PRJ.uvprojx C:\Users\29096\Desktop\work\ůоåÈ\TIMER_DEMO\ENS001_BASIC_PRJ.uvprojx
Project File Date: 08/15/2025 Project File Date: 08/15/2025
<h2>Output:</h2> <h2>Output:</h2>
*** Using Compiler 'V5.06 update 6 (build 750)', folder: 'D:\Keil_v5\ARM\ARM_Compiler_5.06u7\Bin' *** Using Compiler 'V5.06 update 7 (build 960)', folder: 'C:\Keil_v5\ARM\ARMCC\Bin'
Build target 'ENS001_BASIC_PRJ' Build target 'ENS001_BASIC_PRJ'
compiling mian.c... compiling mian.c...
compiling ENS1_WAVEGEN.c... compiling ENS1_UART.c...
FWLIB\source\ENS1_WAVEGEN.c(54): warning: #177-D: variable "err_code" was declared but never referenced
int err_code = 0;
FWLIB\source\ENS1_WAVEGEN.c: 1 warning, 0 errors
compiling ENS1_TIMER.c...
FWLIB\source\ENS1_TIMER.c(389): warning: #223-D: function "EMS_Process" declared implicitly
EMS_Process();
FWLIB\source\ENS1_TIMER.c(410): warning: #223-D: function "GPIO_Overturn" declared implicitly
GPIO_Overturn(GPIO_19);
FWLIB\source\ENS1_TIMER.c(421): warning: #223-D: function "EMS_Start" declared implicitly
EMS_Start(); // å<>¯åŠ¨ç”µåˆºæ¿€
FWLIB\source\ENS1_TIMER.c(430): warning: #223-D: function "EMS_Stop" declared implicitly
EMS_Stop(); // å<>œæ­¢ç”µåˆºæ¿€
FWLIB\source\ENS1_TIMER.c: 4 warnings, 0 errors
linking... linking...
Program Size: Code=8000 RO-data=368 RW-data=132 ZI-data=532 Program Size: Code=9720 RO-data=384 RW-data=140 ZI-data=596
FromELF: creating hex file... FromELF: creating hex file...
".\Objects\ENS001_BASIC_PRJ.axf" - 0 Error(s), 5 Warning(s). ".\Objects\ENS001_BASIC_PRJ.axf" - 0 Error(s), 0 Warning(s).
<h2>Software Packages used:</h2>
Package Vendor: ARM
https://www.keil.com/pack/ARM.Cortex_DFP.1.1.0.pack
ARM.Cortex_DFP.1.1.0
ARM Cortex Reference Subsystems Device Family Pack
<h2>Collection of Component include folders:</h2> <h2>Collection of Component include folders:</h2>
D:/Keil_v5/ARM/Packs/ARM/Cortex_DFP/1.1.0/Device/ARMCM0/Include C:\Users\29096\Desktop\work\ůоåÈ\TIMER_DEMO\RTE
C:\Users\29096\AppData\Local\Arm\Packs\ARM\CMSIS\5.8.0\Device\ARM\ARMCM0\Include
<h2>Collection of Component Files used:</h2> <h2>Collection of Component Files used:</h2>
Build Time Elapsed: 00:00:01
</pre> </pre>
</body> </body>
</html> </html>

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

View File

@ -11,6 +11,6 @@
".\objects\system_cmsdk_cm0.o" ".\objects\system_cmsdk_cm0.o"
".\objects\startup_cmsdk_cm0.o" ".\objects\startup_cmsdk_cm0.o"
--library_type=microlib --strict --scatter ".\Objects\ENS001_BASIC_PRJ.sct" --library_type=microlib --strict --scatter ".\Objects\ENS001_BASIC_PRJ.sct"
--summary_stderr --info summarysizes --map --load_addr_map_info --xref --callgraph --symbols --summary_stderr --info summarysizes --map --xref --callgraph --symbols
--info sizes --info totals --info unused --info veneers --info sizes --info totals --info unused --info veneers
--list ".\Listings\ENS001_BASIC_PRJ.map" -o .\Objects\ENS001_BASIC_PRJ.axf --list ".\Listings\ENS001_BASIC_PRJ.map" -o .\Objects\ENS001_BASIC_PRJ.axf

View File

@ -7,7 +7,6 @@ LR_IROM1 0x10000000 0x00008000 { ; load region size_region
*.o (RESET, +First) *.o (RESET, +First)
*(InRoot$$Sections) *(InRoot$$Sections)
.ANY (+RO) .ANY (+RO)
.ANY (+XO)
} }
RW_IRAM1 0x20000000 0x00020000 { ; RW data RW_IRAM1 0x20000000 0x00020000 { ; RW data
.ANY (+RW +ZI) .ANY (+RW +ZI)

View File

@ -1,133 +1,132 @@
Dependencies for Project 'ENS001_BASIC_PRJ', Target 'ENS001_BASIC_PRJ': (DO NOT MODIFY !) Dependencies for Project 'ENS001_BASIC_PRJ', Target 'ENS001_BASIC_PRJ': (DO NOT MODIFY !)
CompilerVersion: 5060750::V5.06 update 6 (build 750)::.\ARM_Compiler_5.06u7 F (.\USER\mian.c)(0x68DB6E27)(--c99 -c --cpu Cortex-M0 -D__MICROLIB --li -g -O0 --apcs=interwork --split_sections -I.\CORE\INCLUDE -I.\USER -I.\FWLIB\include -I C:\Users\29096\Desktop\work\ůоåÈ\TIMER_DEMO\RTE -I C:\Users\29096\AppData\Local\Arm\Packs\ARM\CMSIS\5.8.0\Device\ARM\ARMCM0\Include -I C:\Keil_v5\ARM\CMSIS\Include -D__UVISION_VERSION="514" -DARMCM0 -o .\objects\mian.o --omf_browse .\objects\mian.crf --depend .\objects\mian.d)
F (.\USER\mian.c)(0x68C23502)(--c99 -c --cpu Cortex-M0 -D__MICROLIB --li -g -O0 --apcs=interwork --split_sections -I .\CORE\INCLUDE -I .\USER -I .\FWLIB\include -ID:\Keil_v5\ARM\Packs\ARM\Cortex_DFP\1.1.0\Device\ARMCM0\Include -ID:\Keil_v5\ARM\Packs\ARM\Cortex_DFP\1.1.0\Device\ARM\ARMCM0\Include -D__UVISION_VERSION="538" -DARMCM0 -o .\objects\mian.o --omf_browse .\objects\mian.crf --depend .\objects\mian.d) I (USER\my_header.h)(0x68C138EE)
I (USER\my_header.h)(0x68C138EC) I (C:\Keil_v5\ARM\ARMCC\include\stdio.h)(0x60252374)
I (D:\Keil_v5\ARM\ARM_Compiler_5.06u7\include\stdio.h)(0x599ECD2C) I (C:\Keil_v5\ARM\ARMCC\include\string.h)(0x6025237E)
I (D:\Keil_v5\ARM\ARM_Compiler_5.06u7\include\string.h)(0x599ECD2C) I (C:\Keil_v5\ARM\ARMCC\include\math.h)(0x60252378)
I (D:\Keil_v5\ARM\ARM_Compiler_5.06u7\include\math.h)(0x599ECD2E)
I (.\CORE\INCLUDE\CMSDK_CM0.h)(0x64D5ADE8) I (.\CORE\INCLUDE\CMSDK_CM0.h)(0x64D5ADE8)
I (.\CORE\INCLUDE\core_cm0.h)(0x63648DE6) I (.\CORE\INCLUDE\core_cm0.h)(0x63648DE6)
I (D:\Keil_v5\ARM\ARM_Compiler_5.06u7\include\stdint.h)(0x599ECD2E) I (C:\Keil_v5\ARM\ARMCC\include\stdint.h)(0x6025237E)
I (.\CORE\INCLUDE\core_cmInstr.h)(0x63648DE6) I (.\CORE\INCLUDE\core_cmInstr.h)(0x63648DE6)
I (.\CORE\INCLUDE\core_cmFunc.h)(0x63648DE6) I (.\CORE\INCLUDE\core_cmFunc.h)(0x63648DE6)
I (.\CORE\INCLUDE\system_CMSDK_CM0.h)(0x63648DE6) I (.\CORE\INCLUDE\system_CMSDK_CM0.h)(0x63648DE6)
I (.\FWLIB\include\ENS1_TIMER.h)(0x68C13790) I (.\FWLIB\include\ENS1_TIMER.h)(0x68DA5180)
I (.\USER\my_header.h)(0x68C138EC) I (.\USER\my_header.h)(0x68C138EE)
I (.\FWLIB\include\ENS1_MTP.h)(0x65605CD6) I (.\FWLIB\include\ENS1_MTP.h)(0x65605CD6)
I (D:\Keil_v5\ARM\ARM_Compiler_5.06u7\include\stdlib.h)(0x599ECD2C) I (C:\Keil_v5\ARM\ARMCC\include\stdlib.h)(0x60252374)
I (.\FWLIB\include\ENS1_CLOCK.h)(0x68358097) I (.\FWLIB\include\ENS1_CLOCK.h)(0x68358098)
I (.\FWLIB\include\ENS1_UART.h)(0x68B10579) I (.\FWLIB\include\ENS1_UART.h)(0x68DB4C98)
I (.\FWLIB\include\ENS1_GPIO.h)(0x68B11DDD) I (.\FWLIB\include\ENS1_GPIO.h)(0x68B11DDE)
I (.\FWLIB\include\ENS1_WAVEGEN.h)(0x68C14AAF) I (.\FWLIB\include\ENS1_WAVEGEN.h)(0x68C2375A)
F (.\FWLIB\source\ENS1_UART.c)(0x68B117BC)(--c99 -c --cpu Cortex-M0 -D__MICROLIB --li -g -O0 --apcs=interwork --split_sections -I .\CORE\INCLUDE -I .\USER -I .\FWLIB\include -ID:\Keil_v5\ARM\Packs\ARM\Cortex_DFP\1.1.0\Device\ARMCM0\Include -ID:\Keil_v5\ARM\Packs\ARM\Cortex_DFP\1.1.0\Device\ARM\ARMCM0\Include -D__UVISION_VERSION="538" -DARMCM0 -o .\objects\ens1_uart.o --omf_browse .\objects\ens1_uart.crf --depend .\objects\ens1_uart.d) F (.\FWLIB\source\ENS1_TIMER.c)(0x68DB5580)(--c99 -c --cpu Cortex-M0 -D__MICROLIB --li -g -O0 --apcs=interwork --split_sections -I.\CORE\INCLUDE -I.\USER -I.\FWLIB\include -I C:\Users\29096\Desktop\work\ůоåÈ\TIMER_DEMO\RTE -I C:\Users\29096\AppData\Local\Arm\Packs\ARM\CMSIS\5.8.0\Device\ARM\ARMCM0\Include -I C:\Keil_v5\ARM\CMSIS\Include -D__UVISION_VERSION="514" -DARMCM0 -o .\objects\ens1_timer.o --omf_browse .\objects\ens1_timer.crf --depend .\objects\ens1_timer.d)
I (.\USER\my_header.h)(0x68C138EC) I (.\FWLIB\include\ENS1_TIMER.h)(0x68DA5180)
I (D:\Keil_v5\ARM\ARM_Compiler_5.06u7\include\stdio.h)(0x599ECD2C)
I (D:\Keil_v5\ARM\ARM_Compiler_5.06u7\include\string.h)(0x599ECD2C)
I (D:\Keil_v5\ARM\ARM_Compiler_5.06u7\include\math.h)(0x599ECD2E)
I (.\CORE\INCLUDE\CMSDK_CM0.h)(0x64D5ADE8) I (.\CORE\INCLUDE\CMSDK_CM0.h)(0x64D5ADE8)
I (.\CORE\INCLUDE\core_cm0.h)(0x63648DE6) I (.\CORE\INCLUDE\core_cm0.h)(0x63648DE6)
I (D:\Keil_v5\ARM\ARM_Compiler_5.06u7\include\stdint.h)(0x599ECD2E) I (C:\Keil_v5\ARM\ARMCC\include\stdint.h)(0x6025237E)
I (.\CORE\INCLUDE\core_cmInstr.h)(0x63648DE6) I (.\CORE\INCLUDE\core_cmInstr.h)(0x63648DE6)
I (.\CORE\INCLUDE\core_cmFunc.h)(0x63648DE6) I (.\CORE\INCLUDE\core_cmFunc.h)(0x63648DE6)
I (.\CORE\INCLUDE\system_CMSDK_CM0.h)(0x63648DE6) I (.\CORE\INCLUDE\system_CMSDK_CM0.h)(0x63648DE6)
I (.\FWLIB\include\ENS1_TIMER.h)(0x68C13790) I (.\USER\my_header.h)(0x68C138EE)
I (.\FWLIB\include\ENS1_UART.h)(0x68B10579) I (C:\Keil_v5\ARM\ARMCC\include\stdio.h)(0x60252374)
I (.\FWLIB\include\ENS1_CLOCK.h)(0x68358097) I (C:\Keil_v5\ARM\ARMCC\include\string.h)(0x6025237E)
I (.\FWLIB\include\ENS1_GPIO.h)(0x68B11DDD) I (C:\Keil_v5\ARM\ARMCC\include\math.h)(0x60252378)
F (.\FWLIB\source\ENS1_GPIO.c)(0x689C4B85)(--c99 -c --cpu Cortex-M0 -D__MICROLIB --li -g -O0 --apcs=interwork --split_sections -I .\CORE\INCLUDE -I .\USER -I .\FWLIB\include -ID:\Keil_v5\ARM\Packs\ARM\Cortex_DFP\1.1.0\Device\ARMCM0\Include -ID:\Keil_v5\ARM\Packs\ARM\Cortex_DFP\1.1.0\Device\ARM\ARMCM0\Include -D__UVISION_VERSION="538" -DARMCM0 -o .\objects\ens1_gpio.o --omf_browse .\objects\ens1_gpio.crf --depend .\objects\ens1_gpio.d)
I (.\USER\my_header.h)(0x68C138EC)
I (D:\Keil_v5\ARM\ARM_Compiler_5.06u7\include\stdio.h)(0x599ECD2C)
I (D:\Keil_v5\ARM\ARM_Compiler_5.06u7\include\string.h)(0x599ECD2C)
I (D:\Keil_v5\ARM\ARM_Compiler_5.06u7\include\math.h)(0x599ECD2E)
I (.\CORE\INCLUDE\CMSDK_CM0.h)(0x64D5ADE8)
I (.\CORE\INCLUDE\core_cm0.h)(0x63648DE6)
I (D:\Keil_v5\ARM\ARM_Compiler_5.06u7\include\stdint.h)(0x599ECD2E)
I (.\CORE\INCLUDE\core_cmInstr.h)(0x63648DE6)
I (.\CORE\INCLUDE\core_cmFunc.h)(0x63648DE6)
I (.\CORE\INCLUDE\system_CMSDK_CM0.h)(0x63648DE6)
I (.\FWLIB\include\ENS1_TIMER.h)(0x68C13790)
I (.\FWLIB\include\ENS1_GPIO.h)(0x68B11DDD)
F (.\FWLIB\source\ENS1_MTP.c)(0x68B10C84)(--c99 -c --cpu Cortex-M0 -D__MICROLIB --li -g -O0 --apcs=interwork --split_sections -I .\CORE\INCLUDE -I .\USER -I .\FWLIB\include -ID:\Keil_v5\ARM\Packs\ARM\Cortex_DFP\1.1.0\Device\ARMCM0\Include -ID:\Keil_v5\ARM\Packs\ARM\Cortex_DFP\1.1.0\Device\ARM\ARMCM0\Include -D__UVISION_VERSION="538" -DARMCM0 -o .\objects\ens1_mtp.o --omf_browse .\objects\ens1_mtp.crf --depend .\objects\ens1_mtp.d)
I (.\FWLIB\include\ENS1_MTP.h)(0x65605CD6)
I (.\CORE\INCLUDE\CMSDK_CM0.h)(0x64D5ADE8)
I (.\CORE\INCLUDE\core_cm0.h)(0x63648DE6)
I (D:\Keil_v5\ARM\ARM_Compiler_5.06u7\include\stdint.h)(0x599ECD2E)
I (.\CORE\INCLUDE\core_cmInstr.h)(0x63648DE6)
I (.\CORE\INCLUDE\core_cmFunc.h)(0x63648DE6)
I (.\CORE\INCLUDE\system_CMSDK_CM0.h)(0x63648DE6)
I (D:\Keil_v5\ARM\ARM_Compiler_5.06u7\include\stdlib.h)(0x599ECD2C)
I (D:\Keil_v5\ARM\ARM_Compiler_5.06u7\include\string.h)(0x599ECD2C)
I (.\USER\my_header.h)(0x68C138EC)
I (D:\Keil_v5\ARM\ARM_Compiler_5.06u7\include\stdio.h)(0x599ECD2C)
I (D:\Keil_v5\ARM\ARM_Compiler_5.06u7\include\math.h)(0x599ECD2E)
I (.\FWLIB\include\ENS1_TIMER.h)(0x68C13790)
F (.\FWLIB\source\ENS1_CLOCK.c)(0x68A5300C)(--c99 -c --cpu Cortex-M0 -D__MICROLIB --li -g -O0 --apcs=interwork --split_sections -I .\CORE\INCLUDE -I .\USER -I .\FWLIB\include -ID:\Keil_v5\ARM\Packs\ARM\Cortex_DFP\1.1.0\Device\ARMCM0\Include -ID:\Keil_v5\ARM\Packs\ARM\Cortex_DFP\1.1.0\Device\ARM\ARMCM0\Include -D__UVISION_VERSION="538" -DARMCM0 -o .\objects\ens1_clock.o --omf_browse .\objects\ens1_clock.crf --depend .\objects\ens1_clock.d)
I (.\FWLIB\include\ENS1_CLOCK.h)(0x68358097)
I (.\USER\my_header.h)(0x68C138EC)
I (D:\Keil_v5\ARM\ARM_Compiler_5.06u7\include\stdio.h)(0x599ECD2C)
I (D:\Keil_v5\ARM\ARM_Compiler_5.06u7\include\string.h)(0x599ECD2C)
I (D:\Keil_v5\ARM\ARM_Compiler_5.06u7\include\math.h)(0x599ECD2E)
I (.\CORE\INCLUDE\CMSDK_CM0.h)(0x64D5ADE8)
I (.\CORE\INCLUDE\core_cm0.h)(0x63648DE6)
I (D:\Keil_v5\ARM\ARM_Compiler_5.06u7\include\stdint.h)(0x599ECD2E)
I (.\CORE\INCLUDE\core_cmInstr.h)(0x63648DE6)
I (.\CORE\INCLUDE\core_cmFunc.h)(0x63648DE6)
I (.\CORE\INCLUDE\system_CMSDK_CM0.h)(0x63648DE6)
I (.\FWLIB\include\ENS1_TIMER.h)(0x68C13790)
F (.\FWLIB\source\retarget.c)(0x6565495A)(--c99 -c --cpu Cortex-M0 -D__MICROLIB --li -g -O0 --apcs=interwork --split_sections -I .\CORE\INCLUDE -I .\USER -I .\FWLIB\include -ID:\Keil_v5\ARM\Packs\ARM\Cortex_DFP\1.1.0\Device\ARMCM0\Include -ID:\Keil_v5\ARM\Packs\ARM\Cortex_DFP\1.1.0\Device\ARM\ARMCM0\Include -D__UVISION_VERSION="538" -DARMCM0 -o .\objects\retarget.o --omf_browse .\objects\retarget.crf --depend .\objects\retarget.d)
I (D:\Keil_v5\ARM\ARM_Compiler_5.06u7\include\stdio.h)(0x599ECD2C)
I (D:\Keil_v5\ARM\ARM_Compiler_5.06u7\include\time.h)(0x599ECD2E)
I (D:\Keil_v5\ARM\ARM_Compiler_5.06u7\include\rt_misc.h)(0x599ECD2E)
I (D:\Keil_v5\ARM\ARM_Compiler_5.06u7\include\stddef.h)(0x599ECD2C)
I (D:\Keil_v5\ARM\ARM_Compiler_5.06u7\include\stdint.h)(0x599ECD2E)
I (.\CORE\INCLUDE\CMSDK_CM0.h)(0x64D5ADE8)
I (.\CORE\INCLUDE\core_cm0.h)(0x63648DE6)
I (.\CORE\INCLUDE\core_cmInstr.h)(0x63648DE6)
I (.\CORE\INCLUDE\core_cmFunc.h)(0x63648DE6)
I (.\CORE\INCLUDE\system_CMSDK_CM0.h)(0x63648DE6)
F (.\FWLIB\source\ENS1_TIMER.c)(0x68C23503)(--c99 -c --cpu Cortex-M0 -D__MICROLIB --li -g -O0 --apcs=interwork --split_sections -I .\CORE\INCLUDE -I .\USER -I .\FWLIB\include -ID:\Keil_v5\ARM\Packs\ARM\Cortex_DFP\1.1.0\Device\ARMCM0\Include -ID:\Keil_v5\ARM\Packs\ARM\Cortex_DFP\1.1.0\Device\ARM\ARMCM0\Include -D__UVISION_VERSION="538" -DARMCM0 -o .\objects\ens1_timer.o --omf_browse .\objects\ens1_timer.crf --depend .\objects\ens1_timer.d)
I (.\FWLIB\include\ENS1_TIMER.h)(0x68C13790)
I (.\CORE\INCLUDE\CMSDK_CM0.h)(0x64D5ADE8)
I (.\CORE\INCLUDE\core_cm0.h)(0x63648DE6)
I (D:\Keil_v5\ARM\ARM_Compiler_5.06u7\include\stdint.h)(0x599ECD2E)
I (.\CORE\INCLUDE\core_cmInstr.h)(0x63648DE6)
I (.\CORE\INCLUDE\core_cmFunc.h)(0x63648DE6)
I (.\CORE\INCLUDE\system_CMSDK_CM0.h)(0x63648DE6)
I (.\USER\my_header.h)(0x68C138EC)
I (D:\Keil_v5\ARM\ARM_Compiler_5.06u7\include\stdio.h)(0x599ECD2C)
I (D:\Keil_v5\ARM\ARM_Compiler_5.06u7\include\string.h)(0x599ECD2C)
I (D:\Keil_v5\ARM\ARM_Compiler_5.06u7\include\math.h)(0x599ECD2E)
I (.\FWLIB\include\ENS_CURRENT_CALIBRATION.h)(0x6566A27C) I (.\FWLIB\include\ENS_CURRENT_CALIBRATION.h)(0x6566A27C)
I (.\FWLIB\include\ENS1_CLOCK.h)(0x68358097) I (.\FWLIB\include\ENS1_CLOCK.h)(0x68358098)
F (.\FWLIB\source\ENS1_BOOST.c)(0x689E9D44)(--c99 -c --cpu Cortex-M0 -D__MICROLIB --li -g -O0 --apcs=interwork --split_sections -I .\CORE\INCLUDE -I .\USER -I .\FWLIB\include -ID:\Keil_v5\ARM\Packs\ARM\Cortex_DFP\1.1.0\Device\ARMCM0\Include -ID:\Keil_v5\ARM\Packs\ARM\Cortex_DFP\1.1.0\Device\ARM\ARMCM0\Include -D__UVISION_VERSION="538" -DARMCM0 -o .\objects\ens1_boost.o --omf_browse .\objects\ens1_boost.crf --depend .\objects\ens1_boost.d) F (.\FWLIB\source\ENS1_UART.c)(0x68DB6E23)(--c99 -c --cpu Cortex-M0 -D__MICROLIB --li -g -O0 --apcs=interwork --split_sections -I.\CORE\INCLUDE -I.\USER -I.\FWLIB\include -I C:\Users\29096\Desktop\work\ůоåÈ\TIMER_DEMO\RTE -I C:\Users\29096\AppData\Local\Arm\Packs\ARM\CMSIS\5.8.0\Device\ARM\ARMCM0\Include -I C:\Keil_v5\ARM\CMSIS\Include -D__UVISION_VERSION="514" -DARMCM0 -o .\objects\ens1_uart.o --omf_browse .\objects\ens1_uart.crf --depend .\objects\ens1_uart.d)
I (D:\Keil_v5\ARM\ARM_Compiler_5.06u7\include\stdio.h)(0x599ECD2C) I (.\USER\my_header.h)(0x68C138EE)
I (.\FWLIB\include\ENS1_BOOST.h)(0x68B11D22) I (C:\Keil_v5\ARM\ARMCC\include\stdio.h)(0x60252374)
I (C:\Keil_v5\ARM\ARMCC\include\string.h)(0x6025237E)
I (C:\Keil_v5\ARM\ARMCC\include\math.h)(0x60252378)
I (.\CORE\INCLUDE\CMSDK_CM0.h)(0x64D5ADE8) I (.\CORE\INCLUDE\CMSDK_CM0.h)(0x64D5ADE8)
I (.\CORE\INCLUDE\core_cm0.h)(0x63648DE6) I (.\CORE\INCLUDE\core_cm0.h)(0x63648DE6)
I (D:\Keil_v5\ARM\ARM_Compiler_5.06u7\include\stdint.h)(0x599ECD2E) I (C:\Keil_v5\ARM\ARMCC\include\stdint.h)(0x6025237E)
I (.\CORE\INCLUDE\core_cmInstr.h)(0x63648DE6) I (.\CORE\INCLUDE\core_cmInstr.h)(0x63648DE6)
I (.\CORE\INCLUDE\core_cmFunc.h)(0x63648DE6) I (.\CORE\INCLUDE\core_cmFunc.h)(0x63648DE6)
I (.\CORE\INCLUDE\system_CMSDK_CM0.h)(0x63648DE6) I (.\CORE\INCLUDE\system_CMSDK_CM0.h)(0x63648DE6)
F (.\FWLIB\source\ENS1_WAVEGEN.c)(0x68C23500)(--c99 -c --cpu Cortex-M0 -D__MICROLIB --li -g -O0 --apcs=interwork --split_sections -I .\CORE\INCLUDE -I .\USER -I .\FWLIB\include -ID:\Keil_v5\ARM\Packs\ARM\Cortex_DFP\1.1.0\Device\ARMCM0\Include -ID:\Keil_v5\ARM\Packs\ARM\Cortex_DFP\1.1.0\Device\ARM\ARMCM0\Include -D__UVISION_VERSION="538" -DARMCM0 -o .\objects\ens1_wavegen.o --omf_browse .\objects\ens1_wavegen.crf --depend .\objects\ens1_wavegen.d) I (.\FWLIB\include\ENS1_TIMER.h)(0x68DA5180)
I (D:\Keil_v5\ARM\ARM_Compiler_5.06u7\include\stdio.h)(0x599ECD2C) I (.\FWLIB\include\ENS1_UART.h)(0x68DB4C98)
I (.\FWLIB\include\ENS1_WAVEGEN.h)(0x68C14AAF) I (.\FWLIB\include\ENS1_CLOCK.h)(0x68358098)
I (.\FWLIB\include\ENS1_GPIO.h)(0x68B11DDE)
F (.\FWLIB\source\ENS1_GPIO.c)(0x689C4B86)(--c99 -c --cpu Cortex-M0 -D__MICROLIB --li -g -O0 --apcs=interwork --split_sections -I.\CORE\INCLUDE -I.\USER -I.\FWLIB\include -I C:\Users\29096\Desktop\work\ůоåÈ\TIMER_DEMO\RTE -I C:\Users\29096\AppData\Local\Arm\Packs\ARM\CMSIS\5.8.0\Device\ARM\ARMCM0\Include -I C:\Keil_v5\ARM\CMSIS\Include -D__UVISION_VERSION="514" -DARMCM0 -o .\objects\ens1_gpio.o --omf_browse .\objects\ens1_gpio.crf --depend .\objects\ens1_gpio.d)
I (.\USER\my_header.h)(0x68C138EE)
I (C:\Keil_v5\ARM\ARMCC\include\stdio.h)(0x60252374)
I (C:\Keil_v5\ARM\ARMCC\include\string.h)(0x6025237E)
I (C:\Keil_v5\ARM\ARMCC\include\math.h)(0x60252378)
I (.\CORE\INCLUDE\CMSDK_CM0.h)(0x64D5ADE8) I (.\CORE\INCLUDE\CMSDK_CM0.h)(0x64D5ADE8)
I (.\CORE\INCLUDE\core_cm0.h)(0x63648DE6) I (.\CORE\INCLUDE\core_cm0.h)(0x63648DE6)
I (D:\Keil_v5\ARM\ARM_Compiler_5.06u7\include\stdint.h)(0x599ECD2E) I (C:\Keil_v5\ARM\ARMCC\include\stdint.h)(0x6025237E)
I (.\CORE\INCLUDE\core_cmInstr.h)(0x63648DE6) I (.\CORE\INCLUDE\core_cmInstr.h)(0x63648DE6)
I (.\CORE\INCLUDE\core_cmFunc.h)(0x63648DE6) I (.\CORE\INCLUDE\core_cmFunc.h)(0x63648DE6)
I (.\CORE\INCLUDE\system_CMSDK_CM0.h)(0x63648DE6) I (.\CORE\INCLUDE\system_CMSDK_CM0.h)(0x63648DE6)
I (.\USER\my_header.h)(0x68C138EC) I (.\FWLIB\include\ENS1_TIMER.h)(0x68DA5180)
I (D:\Keil_v5\ARM\ARM_Compiler_5.06u7\include\string.h)(0x599ECD2C) I (.\FWLIB\include\ENS1_GPIO.h)(0x68B11DDE)
I (D:\Keil_v5\ARM\ARM_Compiler_5.06u7\include\math.h)(0x599ECD2E) F (.\FWLIB\source\ENS1_MTP.c)(0x68B10C86)(--c99 -c --cpu Cortex-M0 -D__MICROLIB --li -g -O0 --apcs=interwork --split_sections -I.\CORE\INCLUDE -I.\USER -I.\FWLIB\include -I C:\Users\29096\Desktop\work\ůоåÈ\TIMER_DEMO\RTE -I C:\Users\29096\AppData\Local\Arm\Packs\ARM\CMSIS\5.8.0\Device\ARM\ARMCM0\Include -I C:\Keil_v5\ARM\CMSIS\Include -D__UVISION_VERSION="514" -DARMCM0 -o .\objects\ens1_mtp.o --omf_browse .\objects\ens1_mtp.crf --depend .\objects\ens1_mtp.d)
I (.\FWLIB\include\ENS1_TIMER.h)(0x68C13790) I (.\FWLIB\include\ENS1_MTP.h)(0x65605CD6)
I (.\FWLIB\include\ENS1_CLOCK.h)(0x68358097) I (.\CORE\INCLUDE\CMSDK_CM0.h)(0x64D5ADE8)
I (.\FWLIB\include\ENS1_BOOST.h)(0x68B11D22) I (.\CORE\INCLUDE\core_cm0.h)(0x63648DE6)
F (.\CORE\system_CMSDK_CM0.c)(0x63648DE6)(--c99 -c --cpu Cortex-M0 -D__MICROLIB --li -g -O0 --apcs=interwork --split_sections -I .\CORE\INCLUDE -I .\USER -I .\FWLIB\include -ID:\Keil_v5\ARM\Packs\ARM\Cortex_DFP\1.1.0\Device\ARMCM0\Include -ID:\Keil_v5\ARM\Packs\ARM\Cortex_DFP\1.1.0\Device\ARM\ARMCM0\Include -D__UVISION_VERSION="538" -DARMCM0 -o .\objects\system_cmsdk_cm0.o --omf_browse .\objects\system_cmsdk_cm0.crf --depend .\objects\system_cmsdk_cm0.d) I (C:\Keil_v5\ARM\ARMCC\include\stdint.h)(0x6025237E)
I (D:\Keil_v5\ARM\ARM_Compiler_5.06u7\include\stdint.h)(0x599ECD2E) I (.\CORE\INCLUDE\core_cmInstr.h)(0x63648DE6)
I (.\CORE\INCLUDE\core_cmFunc.h)(0x63648DE6)
I (.\CORE\INCLUDE\system_CMSDK_CM0.h)(0x63648DE6)
I (C:\Keil_v5\ARM\ARMCC\include\stdlib.h)(0x60252374)
I (C:\Keil_v5\ARM\ARMCC\include\string.h)(0x6025237E)
I (.\USER\my_header.h)(0x68C138EE)
I (C:\Keil_v5\ARM\ARMCC\include\stdio.h)(0x60252374)
I (C:\Keil_v5\ARM\ARMCC\include\math.h)(0x60252378)
I (.\FWLIB\include\ENS1_TIMER.h)(0x68DA5180)
F (.\FWLIB\source\ENS1_CLOCK.c)(0x68A5300E)(--c99 -c --cpu Cortex-M0 -D__MICROLIB --li -g -O0 --apcs=interwork --split_sections -I.\CORE\INCLUDE -I.\USER -I.\FWLIB\include -I C:\Users\29096\Desktop\work\ůоåÈ\TIMER_DEMO\RTE -I C:\Users\29096\AppData\Local\Arm\Packs\ARM\CMSIS\5.8.0\Device\ARM\ARMCM0\Include -I C:\Keil_v5\ARM\CMSIS\Include -D__UVISION_VERSION="514" -DARMCM0 -o .\objects\ens1_clock.o --omf_browse .\objects\ens1_clock.crf --depend .\objects\ens1_clock.d)
I (.\FWLIB\include\ENS1_CLOCK.h)(0x68358098)
I (.\USER\my_header.h)(0x68C138EE)
I (C:\Keil_v5\ARM\ARMCC\include\stdio.h)(0x60252374)
I (C:\Keil_v5\ARM\ARMCC\include\string.h)(0x6025237E)
I (C:\Keil_v5\ARM\ARMCC\include\math.h)(0x60252378)
I (.\CORE\INCLUDE\CMSDK_CM0.h)(0x64D5ADE8)
I (.\CORE\INCLUDE\core_cm0.h)(0x63648DE6)
I (C:\Keil_v5\ARM\ARMCC\include\stdint.h)(0x6025237E)
I (.\CORE\INCLUDE\core_cmInstr.h)(0x63648DE6)
I (.\CORE\INCLUDE\core_cmFunc.h)(0x63648DE6)
I (.\CORE\INCLUDE\system_CMSDK_CM0.h)(0x63648DE6)
I (.\FWLIB\include\ENS1_TIMER.h)(0x68DA5180)
F (.\FWLIB\source\retarget.c)(0x6565495A)(--c99 -c --cpu Cortex-M0 -D__MICROLIB --li -g -O0 --apcs=interwork --split_sections -I.\CORE\INCLUDE -I.\USER -I.\FWLIB\include -I C:\Users\29096\Desktop\work\ůоåÈ\TIMER_DEMO\RTE -I C:\Users\29096\AppData\Local\Arm\Packs\ARM\CMSIS\5.8.0\Device\ARM\ARMCM0\Include -I C:\Keil_v5\ARM\CMSIS\Include -D__UVISION_VERSION="514" -DARMCM0 -o .\objects\retarget.o --omf_browse .\objects\retarget.crf --depend .\objects\retarget.d)
I (C:\Keil_v5\ARM\ARMCC\include\stdio.h)(0x60252374)
I (C:\Keil_v5\ARM\ARMCC\include\time.h)(0x60252378)
I (C:\Keil_v5\ARM\ARMCC\include\rt_misc.h)(0x60252376)
I (C:\Keil_v5\ARM\ARMCC\include\stddef.h)(0x6025237E)
I (C:\Keil_v5\ARM\ARMCC\include\stdint.h)(0x6025237E)
I (.\CORE\INCLUDE\CMSDK_CM0.h)(0x64D5ADE8) I (.\CORE\INCLUDE\CMSDK_CM0.h)(0x64D5ADE8)
I (.\CORE\INCLUDE\core_cm0.h)(0x63648DE6) I (.\CORE\INCLUDE\core_cm0.h)(0x63648DE6)
I (.\CORE\INCLUDE\core_cmInstr.h)(0x63648DE6) I (.\CORE\INCLUDE\core_cmInstr.h)(0x63648DE6)
I (.\CORE\INCLUDE\core_cmFunc.h)(0x63648DE6) I (.\CORE\INCLUDE\core_cmFunc.h)(0x63648DE6)
I (.\CORE\INCLUDE\system_CMSDK_CM0.h)(0x63648DE6) I (.\CORE\INCLUDE\system_CMSDK_CM0.h)(0x63648DE6)
F (.\CORE\ARM\startup_CMSDK_CM0.s)(0x6365EF56)(--cpu Cortex-M0 --li -g --apcs=interwork --pd "__MICROLIB SETA 1" -ID:\Keil_v5\ARM\Packs\ARM\Cortex_DFP\1.1.0\Device\ARMCM0\Include -ID:\Keil_v5\ARM\Packs\ARM\Cortex_DFP\1.1.0\Device\ARM\ARMCM0\Include --pd "__UVISION_VERSION SETA 538" --pd "ARMCM0 SETA 1" --list .\listings\startup_cmsdk_cm0.lst --xref -o .\objects\startup_cmsdk_cm0.o --depend .\objects\startup_cmsdk_cm0.d) F (.\FWLIB\source\ENS1_BOOST.c)(0x689E9D46)(--c99 -c --cpu Cortex-M0 -D__MICROLIB --li -g -O0 --apcs=interwork --split_sections -I.\CORE\INCLUDE -I.\USER -I.\FWLIB\include -I C:\Users\29096\Desktop\work\ůоåÈ\TIMER_DEMO\RTE -I C:\Users\29096\AppData\Local\Arm\Packs\ARM\CMSIS\5.8.0\Device\ARM\ARMCM0\Include -I C:\Keil_v5\ARM\CMSIS\Include -D__UVISION_VERSION="514" -DARMCM0 -o .\objects\ens1_boost.o --omf_browse .\objects\ens1_boost.crf --depend .\objects\ens1_boost.d)
I (C:\Keil_v5\ARM\ARMCC\include\stdio.h)(0x60252374)
I (.\FWLIB\include\ENS1_BOOST.h)(0x68B11D24)
I (.\CORE\INCLUDE\CMSDK_CM0.h)(0x64D5ADE8)
I (.\CORE\INCLUDE\core_cm0.h)(0x63648DE6)
I (C:\Keil_v5\ARM\ARMCC\include\stdint.h)(0x6025237E)
I (.\CORE\INCLUDE\core_cmInstr.h)(0x63648DE6)
I (.\CORE\INCLUDE\core_cmFunc.h)(0x63648DE6)
I (.\CORE\INCLUDE\system_CMSDK_CM0.h)(0x63648DE6)
F (.\FWLIB\source\ENS1_WAVEGEN.c)(0x68DB5638)(--c99 -c --cpu Cortex-M0 -D__MICROLIB --li -g -O0 --apcs=interwork --split_sections -I.\CORE\INCLUDE -I.\USER -I.\FWLIB\include -I C:\Users\29096\Desktop\work\ůоåÈ\TIMER_DEMO\RTE -I C:\Users\29096\AppData\Local\Arm\Packs\ARM\CMSIS\5.8.0\Device\ARM\ARMCM0\Include -I C:\Keil_v5\ARM\CMSIS\Include -D__UVISION_VERSION="514" -DARMCM0 -o .\objects\ens1_wavegen.o --omf_browse .\objects\ens1_wavegen.crf --depend .\objects\ens1_wavegen.d)
I (C:\Keil_v5\ARM\ARMCC\include\stdio.h)(0x60252374)
I (.\FWLIB\include\ENS1_WAVEGEN.h)(0x68C2375A)
I (.\CORE\INCLUDE\CMSDK_CM0.h)(0x64D5ADE8)
I (.\CORE\INCLUDE\core_cm0.h)(0x63648DE6)
I (C:\Keil_v5\ARM\ARMCC\include\stdint.h)(0x6025237E)
I (.\CORE\INCLUDE\core_cmInstr.h)(0x63648DE6)
I (.\CORE\INCLUDE\core_cmFunc.h)(0x63648DE6)
I (.\CORE\INCLUDE\system_CMSDK_CM0.h)(0x63648DE6)
I (.\USER\my_header.h)(0x68C138EE)
I (C:\Keil_v5\ARM\ARMCC\include\string.h)(0x6025237E)
I (C:\Keil_v5\ARM\ARMCC\include\math.h)(0x60252378)
I (.\FWLIB\include\ENS1_TIMER.h)(0x68DA5180)
I (.\FWLIB\include\ENS1_CLOCK.h)(0x68358098)
I (.\FWLIB\include\ENS1_BOOST.h)(0x68B11D24)
F (.\CORE\system_CMSDK_CM0.c)(0x63648DE6)(--c99 -c --cpu Cortex-M0 -D__MICROLIB --li -g -O0 --apcs=interwork --split_sections -I.\CORE\INCLUDE -I.\USER -I.\FWLIB\include -I C:\Users\29096\Desktop\work\ůоåÈ\TIMER_DEMO\RTE -I C:\Users\29096\AppData\Local\Arm\Packs\ARM\CMSIS\5.8.0\Device\ARM\ARMCM0\Include -I C:\Keil_v5\ARM\CMSIS\Include -D__UVISION_VERSION="514" -DARMCM0 -o .\objects\system_cmsdk_cm0.o --omf_browse .\objects\system_cmsdk_cm0.crf --depend .\objects\system_cmsdk_cm0.d)
I (C:\Keil_v5\ARM\ARMCC\include\stdint.h)(0x6025237E)
I (.\CORE\INCLUDE\CMSDK_CM0.h)(0x64D5ADE8)
I (.\CORE\INCLUDE\core_cm0.h)(0x63648DE6)
I (.\CORE\INCLUDE\core_cmInstr.h)(0x63648DE6)
I (.\CORE\INCLUDE\core_cmFunc.h)(0x63648DE6)
I (.\CORE\INCLUDE\system_CMSDK_CM0.h)(0x63648DE6)
F (.\CORE\ARM\startup_CMSDK_CM0.s)(0x6365EF56)(--cpu Cortex-M0 --li -g --apcs=interwork --pd "__MICROLIB SETA 1" -I C:\Users\29096\Desktop\work\ůоåÈ\TIMER_DEMO\RTE -I C:\Users\29096\AppData\Local\Arm\Packs\ARM\CMSIS\5.8.0\Device\ARM\ARMCM0\Include -I C:\Keil_v5\ARM\CMSIS\Include --pd "__UVISION_VERSION SETA 514" --pd "ARMCM0 SETA 1" --list .\listings\startup_cmsdk_cm0.lst --xref -o .\objects\startup_cmsdk_cm0.o --depend .\objects\startup_cmsdk_cm0.d)

View File

@ -7,6 +7,7 @@ LR_IROM1 0x10000000 0x00008000 { ; load region size_region
*.o (RESET, +First) *.o (RESET, +First)
*(InRoot$$Sections) *(InRoot$$Sections)
.ANY (+RO) .ANY (+RO)
.ANY (+XO)
} }
RW_IRAM1 0x20000000 0x00020000 { ; RW data RW_IRAM1 0x20000000 0x00020000 { ; RW data
.ANY (+RW +ZI) .ANY (+RW +ZI)

Binary file not shown.

View File

@ -1,9 +1,9 @@
.\objects\ens1_boost.o: FWLIB\source\ENS1_BOOST.c .\objects\ens1_boost.o: FWLIB\source\ENS1_BOOST.c
.\objects\ens1_boost.o: D:\Keil_v5\ARM\ARM_Compiler_5.06u7\Bin\..\include\stdio.h .\objects\ens1_boost.o: C:\Keil_v5\ARM\ARMCC\Bin\..\include\stdio.h
.\objects\ens1_boost.o: .\FWLIB\include\ENS1_BOOST.h .\objects\ens1_boost.o: .\FWLIB\include\ENS1_BOOST.h
.\objects\ens1_boost.o: .\CORE\INCLUDE\CMSDK_CM0.h .\objects\ens1_boost.o: .\CORE\INCLUDE\CMSDK_CM0.h
.\objects\ens1_boost.o: .\CORE\INCLUDE\core_cm0.h .\objects\ens1_boost.o: .\CORE\INCLUDE\core_cm0.h
.\objects\ens1_boost.o: D:\Keil_v5\ARM\ARM_Compiler_5.06u7\Bin\..\include\stdint.h .\objects\ens1_boost.o: C:\Keil_v5\ARM\ARMCC\Bin\..\include\stdint.h
.\objects\ens1_boost.o: .\CORE\INCLUDE\core_cmInstr.h .\objects\ens1_boost.o: .\CORE\INCLUDE\core_cmInstr.h
.\objects\ens1_boost.o: .\CORE\INCLUDE\core_cmFunc.h .\objects\ens1_boost.o: .\CORE\INCLUDE\core_cmFunc.h
.\objects\ens1_boost.o: .\CORE\INCLUDE\system_CMSDK_CM0.h .\objects\ens1_boost.o: .\CORE\INCLUDE\system_CMSDK_CM0.h

Binary file not shown.

Binary file not shown.

View File

@ -1,12 +1,12 @@
.\objects\ens1_clock.o: FWLIB\source\ENS1_CLOCK.c .\objects\ens1_clock.o: FWLIB\source\ENS1_CLOCK.c
.\objects\ens1_clock.o: .\FWLIB\include\ENS1_CLOCK.h .\objects\ens1_clock.o: .\FWLIB\include\ENS1_CLOCK.h
.\objects\ens1_clock.o: .\USER\my_header.h .\objects\ens1_clock.o: .\USER\my_header.h
.\objects\ens1_clock.o: D:\Keil_v5\ARM\ARM_Compiler_5.06u7\Bin\..\include\stdio.h .\objects\ens1_clock.o: C:\Keil_v5\ARM\ARMCC\Bin\..\include\stdio.h
.\objects\ens1_clock.o: D:\Keil_v5\ARM\ARM_Compiler_5.06u7\Bin\..\include\string.h .\objects\ens1_clock.o: C:\Keil_v5\ARM\ARMCC\Bin\..\include\string.h
.\objects\ens1_clock.o: D:\Keil_v5\ARM\ARM_Compiler_5.06u7\Bin\..\include\math.h .\objects\ens1_clock.o: C:\Keil_v5\ARM\ARMCC\Bin\..\include\math.h
.\objects\ens1_clock.o: .\CORE\INCLUDE\CMSDK_CM0.h .\objects\ens1_clock.o: .\CORE\INCLUDE\CMSDK_CM0.h
.\objects\ens1_clock.o: .\CORE\INCLUDE\core_cm0.h .\objects\ens1_clock.o: .\CORE\INCLUDE\core_cm0.h
.\objects\ens1_clock.o: D:\Keil_v5\ARM\ARM_Compiler_5.06u7\Bin\..\include\stdint.h .\objects\ens1_clock.o: C:\Keil_v5\ARM\ARMCC\Bin\..\include\stdint.h
.\objects\ens1_clock.o: .\CORE\INCLUDE\core_cmInstr.h .\objects\ens1_clock.o: .\CORE\INCLUDE\core_cmInstr.h
.\objects\ens1_clock.o: .\CORE\INCLUDE\core_cmFunc.h .\objects\ens1_clock.o: .\CORE\INCLUDE\core_cmFunc.h
.\objects\ens1_clock.o: .\CORE\INCLUDE\system_CMSDK_CM0.h .\objects\ens1_clock.o: .\CORE\INCLUDE\system_CMSDK_CM0.h

Binary file not shown.

Binary file not shown.

View File

@ -1,11 +1,11 @@
.\objects\ens1_gpio.o: FWLIB\source\ENS1_GPIO.c .\objects\ens1_gpio.o: FWLIB\source\ENS1_GPIO.c
.\objects\ens1_gpio.o: .\USER\my_header.h .\objects\ens1_gpio.o: .\USER\my_header.h
.\objects\ens1_gpio.o: D:\Keil_v5\ARM\ARM_Compiler_5.06u7\Bin\..\include\stdio.h .\objects\ens1_gpio.o: C:\Keil_v5\ARM\ARMCC\Bin\..\include\stdio.h
.\objects\ens1_gpio.o: D:\Keil_v5\ARM\ARM_Compiler_5.06u7\Bin\..\include\string.h .\objects\ens1_gpio.o: C:\Keil_v5\ARM\ARMCC\Bin\..\include\string.h
.\objects\ens1_gpio.o: D:\Keil_v5\ARM\ARM_Compiler_5.06u7\Bin\..\include\math.h .\objects\ens1_gpio.o: C:\Keil_v5\ARM\ARMCC\Bin\..\include\math.h
.\objects\ens1_gpio.o: .\CORE\INCLUDE\CMSDK_CM0.h .\objects\ens1_gpio.o: .\CORE\INCLUDE\CMSDK_CM0.h
.\objects\ens1_gpio.o: .\CORE\INCLUDE\core_cm0.h .\objects\ens1_gpio.o: .\CORE\INCLUDE\core_cm0.h
.\objects\ens1_gpio.o: D:\Keil_v5\ARM\ARM_Compiler_5.06u7\Bin\..\include\stdint.h .\objects\ens1_gpio.o: C:\Keil_v5\ARM\ARMCC\Bin\..\include\stdint.h
.\objects\ens1_gpio.o: .\CORE\INCLUDE\core_cmInstr.h .\objects\ens1_gpio.o: .\CORE\INCLUDE\core_cmInstr.h
.\objects\ens1_gpio.o: .\CORE\INCLUDE\core_cmFunc.h .\objects\ens1_gpio.o: .\CORE\INCLUDE\core_cmFunc.h
.\objects\ens1_gpio.o: .\CORE\INCLUDE\system_CMSDK_CM0.h .\objects\ens1_gpio.o: .\CORE\INCLUDE\system_CMSDK_CM0.h

Binary file not shown.

Binary file not shown.

View File

@ -2,14 +2,14 @@
.\objects\ens1_mtp.o: .\FWLIB\include\ENS1_MTP.h .\objects\ens1_mtp.o: .\FWLIB\include\ENS1_MTP.h
.\objects\ens1_mtp.o: .\CORE\INCLUDE\CMSDK_CM0.h .\objects\ens1_mtp.o: .\CORE\INCLUDE\CMSDK_CM0.h
.\objects\ens1_mtp.o: .\CORE\INCLUDE\core_cm0.h .\objects\ens1_mtp.o: .\CORE\INCLUDE\core_cm0.h
.\objects\ens1_mtp.o: D:\Keil_v5\ARM\ARM_Compiler_5.06u7\Bin\..\include\stdint.h .\objects\ens1_mtp.o: C:\Keil_v5\ARM\ARMCC\Bin\..\include\stdint.h
.\objects\ens1_mtp.o: .\CORE\INCLUDE\core_cmInstr.h .\objects\ens1_mtp.o: .\CORE\INCLUDE\core_cmInstr.h
.\objects\ens1_mtp.o: .\CORE\INCLUDE\core_cmFunc.h .\objects\ens1_mtp.o: .\CORE\INCLUDE\core_cmFunc.h
.\objects\ens1_mtp.o: .\CORE\INCLUDE\system_CMSDK_CM0.h .\objects\ens1_mtp.o: .\CORE\INCLUDE\system_CMSDK_CM0.h
.\objects\ens1_mtp.o: D:\Keil_v5\ARM\ARM_Compiler_5.06u7\Bin\..\include\stdlib.h .\objects\ens1_mtp.o: C:\Keil_v5\ARM\ARMCC\Bin\..\include\stdlib.h
.\objects\ens1_mtp.o: D:\Keil_v5\ARM\ARM_Compiler_5.06u7\Bin\..\include\string.h .\objects\ens1_mtp.o: C:\Keil_v5\ARM\ARMCC\Bin\..\include\string.h
.\objects\ens1_mtp.o: .\USER\my_header.h .\objects\ens1_mtp.o: .\USER\my_header.h
.\objects\ens1_mtp.o: D:\Keil_v5\ARM\ARM_Compiler_5.06u7\Bin\..\include\stdio.h .\objects\ens1_mtp.o: C:\Keil_v5\ARM\ARMCC\Bin\..\include\stdio.h
.\objects\ens1_mtp.o: D:\Keil_v5\ARM\ARM_Compiler_5.06u7\Bin\..\include\math.h .\objects\ens1_mtp.o: C:\Keil_v5\ARM\ARMCC\Bin\..\include\math.h
.\objects\ens1_mtp.o: .\FWLIB\include\ENS1_TIMER.h .\objects\ens1_mtp.o: .\FWLIB\include\ENS1_TIMER.h
.\objects\ens1_mtp.o: .\USER\my_header.h .\objects\ens1_mtp.o: .\USER\my_header.h

Binary file not shown.

Binary file not shown.

View File

@ -2,6 +2,7 @@
.\objects\ens1_spi.o: .\FWLIB\include\ENS1_SPI.h .\objects\ens1_spi.o: .\FWLIB\include\ENS1_SPI.h
.\objects\ens1_spi.o: .\USER\my_header.h .\objects\ens1_spi.o: .\USER\my_header.h
.\objects\ens1_spi.o: C:\Keil_v5\ARM\ARMCC\Bin\..\include\stdio.h .\objects\ens1_spi.o: C:\Keil_v5\ARM\ARMCC\Bin\..\include\stdio.h
.\objects\ens1_spi.o: C:\Keil_v5\ARM\ARMCC\Bin\..\include\string.h
.\objects\ens1_spi.o: C:\Keil_v5\ARM\ARMCC\Bin\..\include\math.h .\objects\ens1_spi.o: C:\Keil_v5\ARM\ARMCC\Bin\..\include\math.h
.\objects\ens1_spi.o: .\CORE\INCLUDE\CMSDK_CM0.h .\objects\ens1_spi.o: .\CORE\INCLUDE\CMSDK_CM0.h
.\objects\ens1_spi.o: .\CORE\INCLUDE\core_cm0.h .\objects\ens1_spi.o: .\CORE\INCLUDE\core_cm0.h
@ -9,4 +10,6 @@
.\objects\ens1_spi.o: .\CORE\INCLUDE\core_cmInstr.h .\objects\ens1_spi.o: .\CORE\INCLUDE\core_cmInstr.h
.\objects\ens1_spi.o: .\CORE\INCLUDE\core_cmFunc.h .\objects\ens1_spi.o: .\CORE\INCLUDE\core_cmFunc.h
.\objects\ens1_spi.o: .\CORE\INCLUDE\system_CMSDK_CM0.h .\objects\ens1_spi.o: .\CORE\INCLUDE\system_CMSDK_CM0.h
.\objects\ens1_spi.o: .\FWLIB\include\ENS1_TIMER.h
.\objects\ens1_spi.o: .\USER\my_header.h
.\objects\ens1_spi.o: .\FWLIB\include\ENS1_GPIO.h .\objects\ens1_spi.o: .\FWLIB\include\ENS1_GPIO.h

Binary file not shown.

Binary file not shown.

View File

@ -2,14 +2,14 @@
.\objects\ens1_timer.o: .\FWLIB\include\ENS1_TIMER.h .\objects\ens1_timer.o: .\FWLIB\include\ENS1_TIMER.h
.\objects\ens1_timer.o: .\CORE\INCLUDE\CMSDK_CM0.h .\objects\ens1_timer.o: .\CORE\INCLUDE\CMSDK_CM0.h
.\objects\ens1_timer.o: .\CORE\INCLUDE\core_cm0.h .\objects\ens1_timer.o: .\CORE\INCLUDE\core_cm0.h
.\objects\ens1_timer.o: D:\Keil_v5\ARM\ARM_Compiler_5.06u7\Bin\..\include\stdint.h .\objects\ens1_timer.o: C:\Keil_v5\ARM\ARMCC\Bin\..\include\stdint.h
.\objects\ens1_timer.o: .\CORE\INCLUDE\core_cmInstr.h .\objects\ens1_timer.o: .\CORE\INCLUDE\core_cmInstr.h
.\objects\ens1_timer.o: .\CORE\INCLUDE\core_cmFunc.h .\objects\ens1_timer.o: .\CORE\INCLUDE\core_cmFunc.h
.\objects\ens1_timer.o: .\CORE\INCLUDE\system_CMSDK_CM0.h .\objects\ens1_timer.o: .\CORE\INCLUDE\system_CMSDK_CM0.h
.\objects\ens1_timer.o: .\USER\my_header.h .\objects\ens1_timer.o: .\USER\my_header.h
.\objects\ens1_timer.o: D:\Keil_v5\ARM\ARM_Compiler_5.06u7\Bin\..\include\stdio.h .\objects\ens1_timer.o: C:\Keil_v5\ARM\ARMCC\Bin\..\include\stdio.h
.\objects\ens1_timer.o: D:\Keil_v5\ARM\ARM_Compiler_5.06u7\Bin\..\include\string.h .\objects\ens1_timer.o: C:\Keil_v5\ARM\ARMCC\Bin\..\include\string.h
.\objects\ens1_timer.o: D:\Keil_v5\ARM\ARM_Compiler_5.06u7\Bin\..\include\math.h .\objects\ens1_timer.o: C:\Keil_v5\ARM\ARMCC\Bin\..\include\math.h
.\objects\ens1_timer.o: .\FWLIB\include\ENS1_TIMER.h .\objects\ens1_timer.o: .\FWLIB\include\ENS1_TIMER.h
.\objects\ens1_timer.o: .\FWLIB\include\ENS_CURRENT_CALIBRATION.h .\objects\ens1_timer.o: .\FWLIB\include\ENS_CURRENT_CALIBRATION.h
.\objects\ens1_timer.o: .\FWLIB\include\ENS1_CLOCK.h .\objects\ens1_timer.o: .\FWLIB\include\ENS1_CLOCK.h

Binary file not shown.

Binary file not shown.

View File

@ -1,11 +1,11 @@
.\objects\ens1_uart.o: FWLIB\source\ENS1_UART.c .\objects\ens1_uart.o: FWLIB\source\ENS1_UART.c
.\objects\ens1_uart.o: .\USER\my_header.h .\objects\ens1_uart.o: .\USER\my_header.h
.\objects\ens1_uart.o: D:\Keil_v5\ARM\ARM_Compiler_5.06u7\Bin\..\include\stdio.h .\objects\ens1_uart.o: C:\Keil_v5\ARM\ARMCC\Bin\..\include\stdio.h
.\objects\ens1_uart.o: D:\Keil_v5\ARM\ARM_Compiler_5.06u7\Bin\..\include\string.h .\objects\ens1_uart.o: C:\Keil_v5\ARM\ARMCC\Bin\..\include\string.h
.\objects\ens1_uart.o: D:\Keil_v5\ARM\ARM_Compiler_5.06u7\Bin\..\include\math.h .\objects\ens1_uart.o: C:\Keil_v5\ARM\ARMCC\Bin\..\include\math.h
.\objects\ens1_uart.o: .\CORE\INCLUDE\CMSDK_CM0.h .\objects\ens1_uart.o: .\CORE\INCLUDE\CMSDK_CM0.h
.\objects\ens1_uart.o: .\CORE\INCLUDE\core_cm0.h .\objects\ens1_uart.o: .\CORE\INCLUDE\core_cm0.h
.\objects\ens1_uart.o: D:\Keil_v5\ARM\ARM_Compiler_5.06u7\Bin\..\include\stdint.h .\objects\ens1_uart.o: C:\Keil_v5\ARM\ARMCC\Bin\..\include\stdint.h
.\objects\ens1_uart.o: .\CORE\INCLUDE\core_cmInstr.h .\objects\ens1_uart.o: .\CORE\INCLUDE\core_cmInstr.h
.\objects\ens1_uart.o: .\CORE\INCLUDE\core_cmFunc.h .\objects\ens1_uart.o: .\CORE\INCLUDE\core_cmFunc.h
.\objects\ens1_uart.o: .\CORE\INCLUDE\system_CMSDK_CM0.h .\objects\ens1_uart.o: .\CORE\INCLUDE\system_CMSDK_CM0.h

Binary file not shown.

Binary file not shown.

View File

@ -1,15 +1,15 @@
.\objects\ens1_wavegen.o: FWLIB\source\ENS1_WAVEGEN.c .\objects\ens1_wavegen.o: FWLIB\source\ENS1_WAVEGEN.c
.\objects\ens1_wavegen.o: D:\Keil_v5\ARM\ARM_Compiler_5.06u7\Bin\..\include\stdio.h .\objects\ens1_wavegen.o: C:\Keil_v5\ARM\ARMCC\Bin\..\include\stdio.h
.\objects\ens1_wavegen.o: .\FWLIB\include\ENS1_WAVEGEN.h .\objects\ens1_wavegen.o: .\FWLIB\include\ENS1_WAVEGEN.h
.\objects\ens1_wavegen.o: .\CORE\INCLUDE\CMSDK_CM0.h .\objects\ens1_wavegen.o: .\CORE\INCLUDE\CMSDK_CM0.h
.\objects\ens1_wavegen.o: .\CORE\INCLUDE\core_cm0.h .\objects\ens1_wavegen.o: .\CORE\INCLUDE\core_cm0.h
.\objects\ens1_wavegen.o: D:\Keil_v5\ARM\ARM_Compiler_5.06u7\Bin\..\include\stdint.h .\objects\ens1_wavegen.o: C:\Keil_v5\ARM\ARMCC\Bin\..\include\stdint.h
.\objects\ens1_wavegen.o: .\CORE\INCLUDE\core_cmInstr.h .\objects\ens1_wavegen.o: .\CORE\INCLUDE\core_cmInstr.h
.\objects\ens1_wavegen.o: .\CORE\INCLUDE\core_cmFunc.h .\objects\ens1_wavegen.o: .\CORE\INCLUDE\core_cmFunc.h
.\objects\ens1_wavegen.o: .\CORE\INCLUDE\system_CMSDK_CM0.h .\objects\ens1_wavegen.o: .\CORE\INCLUDE\system_CMSDK_CM0.h
.\objects\ens1_wavegen.o: .\USER\my_header.h .\objects\ens1_wavegen.o: .\USER\my_header.h
.\objects\ens1_wavegen.o: D:\Keil_v5\ARM\ARM_Compiler_5.06u7\Bin\..\include\string.h .\objects\ens1_wavegen.o: C:\Keil_v5\ARM\ARMCC\Bin\..\include\string.h
.\objects\ens1_wavegen.o: D:\Keil_v5\ARM\ARM_Compiler_5.06u7\Bin\..\include\math.h .\objects\ens1_wavegen.o: C:\Keil_v5\ARM\ARMCC\Bin\..\include\math.h
.\objects\ens1_wavegen.o: .\FWLIB\include\ENS1_TIMER.h .\objects\ens1_wavegen.o: .\FWLIB\include\ENS1_TIMER.h
.\objects\ens1_wavegen.o: .\USER\my_header.h .\objects\ens1_wavegen.o: .\USER\my_header.h
.\objects\ens1_wavegen.o: .\FWLIB\include\ENS1_CLOCK.h .\objects\ens1_wavegen.o: .\FWLIB\include\ENS1_CLOCK.h

Binary file not shown.

Binary file not shown.

View File

@ -1,18 +1,18 @@
.\objects\mian.o: USER\mian.c .\objects\mian.o: USER\mian.c
.\objects\mian.o: USER\my_header.h .\objects\mian.o: USER\my_header.h
.\objects\mian.o: D:\Keil_v5\ARM\ARM_Compiler_5.06u7\Bin\..\include\stdio.h .\objects\mian.o: C:\Keil_v5\ARM\ARMCC\Bin\..\include\stdio.h
.\objects\mian.o: D:\Keil_v5\ARM\ARM_Compiler_5.06u7\Bin\..\include\string.h .\objects\mian.o: C:\Keil_v5\ARM\ARMCC\Bin\..\include\string.h
.\objects\mian.o: D:\Keil_v5\ARM\ARM_Compiler_5.06u7\Bin\..\include\math.h .\objects\mian.o: C:\Keil_v5\ARM\ARMCC\Bin\..\include\math.h
.\objects\mian.o: .\CORE\INCLUDE\CMSDK_CM0.h .\objects\mian.o: .\CORE\INCLUDE\CMSDK_CM0.h
.\objects\mian.o: .\CORE\INCLUDE\core_cm0.h .\objects\mian.o: .\CORE\INCLUDE\core_cm0.h
.\objects\mian.o: D:\Keil_v5\ARM\ARM_Compiler_5.06u7\Bin\..\include\stdint.h .\objects\mian.o: C:\Keil_v5\ARM\ARMCC\Bin\..\include\stdint.h
.\objects\mian.o: .\CORE\INCLUDE\core_cmInstr.h .\objects\mian.o: .\CORE\INCLUDE\core_cmInstr.h
.\objects\mian.o: .\CORE\INCLUDE\core_cmFunc.h .\objects\mian.o: .\CORE\INCLUDE\core_cmFunc.h
.\objects\mian.o: .\CORE\INCLUDE\system_CMSDK_CM0.h .\objects\mian.o: .\CORE\INCLUDE\system_CMSDK_CM0.h
.\objects\mian.o: .\FWLIB\include\ENS1_TIMER.h .\objects\mian.o: .\FWLIB\include\ENS1_TIMER.h
.\objects\mian.o: .\USER\my_header.h .\objects\mian.o: .\USER\my_header.h
.\objects\mian.o: .\FWLIB\include\ENS1_MTP.h .\objects\mian.o: .\FWLIB\include\ENS1_MTP.h
.\objects\mian.o: D:\Keil_v5\ARM\ARM_Compiler_5.06u7\Bin\..\include\stdlib.h .\objects\mian.o: C:\Keil_v5\ARM\ARMCC\Bin\..\include\stdlib.h
.\objects\mian.o: .\FWLIB\include\ENS1_CLOCK.h .\objects\mian.o: .\FWLIB\include\ENS1_CLOCK.h
.\objects\mian.o: .\FWLIB\include\ENS1_UART.h .\objects\mian.o: .\FWLIB\include\ENS1_UART.h
.\objects\mian.o: .\FWLIB\include\ENS1_GPIO.h .\objects\mian.o: .\FWLIB\include\ENS1_GPIO.h

Binary file not shown.

Binary file not shown.

View File

@ -1,9 +1,9 @@
.\objects\retarget.o: FWLIB\source\retarget.c .\objects\retarget.o: FWLIB\source\retarget.c
.\objects\retarget.o: D:\Keil_v5\ARM\ARM_Compiler_5.06u7\Bin\..\include\stdio.h .\objects\retarget.o: C:\Keil_v5\ARM\ARMCC\Bin\..\include\stdio.h
.\objects\retarget.o: D:\Keil_v5\ARM\ARM_Compiler_5.06u7\Bin\..\include\time.h .\objects\retarget.o: C:\Keil_v5\ARM\ARMCC\Bin\..\include\time.h
.\objects\retarget.o: D:\Keil_v5\ARM\ARM_Compiler_5.06u7\Bin\..\include\rt_misc.h .\objects\retarget.o: C:\Keil_v5\ARM\ARMCC\Bin\..\include\rt_misc.h
.\objects\retarget.o: D:\Keil_v5\ARM\ARM_Compiler_5.06u7\Bin\..\include\stddef.h .\objects\retarget.o: C:\Keil_v5\ARM\ARMCC\Bin\..\include\stddef.h
.\objects\retarget.o: D:\Keil_v5\ARM\ARM_Compiler_5.06u7\Bin\..\include\stdint.h .\objects\retarget.o: C:\Keil_v5\ARM\ARMCC\Bin\..\include\stdint.h
.\objects\retarget.o: .\CORE\INCLUDE\CMSDK_CM0.h .\objects\retarget.o: .\CORE\INCLUDE\CMSDK_CM0.h
.\objects\retarget.o: .\CORE\INCLUDE\core_cm0.h .\objects\retarget.o: .\CORE\INCLUDE\core_cm0.h
.\objects\retarget.o: .\CORE\INCLUDE\core_cmInstr.h .\objects\retarget.o: .\CORE\INCLUDE\core_cmInstr.h

Binary file not shown.

Binary file not shown.

Binary file not shown.

View File

@ -1,5 +1,5 @@
.\objects\system_cmsdk_cm0.o: CORE\system_CMSDK_CM0.c .\objects\system_cmsdk_cm0.o: CORE\system_CMSDK_CM0.c
.\objects\system_cmsdk_cm0.o: D:\Keil_v5\ARM\ARM_Compiler_5.06u7\Bin\..\include\stdint.h .\objects\system_cmsdk_cm0.o: C:\Keil_v5\ARM\ARMCC\Bin\..\include\stdint.h
.\objects\system_cmsdk_cm0.o: .\CORE\INCLUDE\CMSDK_CM0.h .\objects\system_cmsdk_cm0.o: .\CORE\INCLUDE\CMSDK_CM0.h
.\objects\system_cmsdk_cm0.o: .\CORE\INCLUDE\core_cm0.h .\objects\system_cmsdk_cm0.o: .\CORE\INCLUDE\core_cm0.h
.\objects\system_cmsdk_cm0.o: .\CORE\INCLUDE\core_cmInstr.h .\objects\system_cmsdk_cm0.o: .\CORE\INCLUDE\core_cmInstr.h

Binary file not shown.

View File

@ -22,6 +22,152 @@ Modification: 初版
#include "ENS1_GPIO.h" #include "ENS1_GPIO.h"
#include "ENS1_WAVEGEN.h" #include "ENS1_WAVEGEN.h"
// CRC-16-CCITT-FALSE计算函数
uint16_t CalculateCRC16_CCITT_FALSE(uint8_t *data, uint16_t length)
{
uint16_t crc = 0xFFFF; // 初始值为0xFFFF
for(uint16_t i = 0; i < length; i++)
{
crc ^= (uint16_t)(data[i] << 8); // 高字节先处理
for(uint8_t j = 0; j < 8; j++)
{
if(crc & 0x8000)
{
crc = (crc << 1) ^ 0x1021; // 多项式0x1021
}
else
{
crc = crc << 1;
}
}
}
return crc;
}
// UART数据接收函数 - 轮询方式
void UART_ReceiveData(void)
{
// 检查接收FIFO并读取所有可用的数据
while(!UART_RX_FIFO_EMPTY(CMSDK_UART1))
{
uint8_t received_data = READ_UART_RCVBuff(CMSDK_UART1); // 读取接收数据
if(uart_rx_count < sizeof(uart_rx_buffer)) // 防止缓冲区溢出
{
uart_rx_buffer[uart_rx_count] = received_data;
uart_rx_count++;
uart_data_ready = 1; // 设置数据就绪标志
}
else
{
// 缓冲区溢出处理
uart_rx_count = 0; // 重置计数器
break;
}
}
}
// 增强的中断接收函数
void UART_ReceiveDataFromISR(void)
{
if(!UART_RX_FIFO_EMPTY(CMSDK_UART1))
{
uint8_t received_data = READ_UART_RCVBuff(CMSDK_UART1);
if(uart_rx_count < sizeof(uart_rx_buffer))
{
uart_rx_buffer[uart_rx_count] = received_data;
uart_rx_count++;
// 注意在中断中不建议使用printf只设置标志
uart_data_ready = 1;
}
}
}
// UART数据发送函数可选的
void UART_SendData(uint8_t data)
{
if(!UART_TX_FIFO_FULL(CMSDK_UART1)) // 如果发送FIFO未满
{
WRITE_UART_THRBuff(CMSDK_UART1, data);
}
}
// UART数据包解析函数
uint8_t ParseUART_EMS_Packet(uint8_t *data, uint16_t length, UART_EMS_Packet_t *packet)
{
// 解析数据包(注意字节序)
packet->function_code = (data[1] << 8) | data[0]; // 小端序
packet->data_length = (data[3] << 8) | data[2];
packet->switch_type = data[4];
packet->intensity = data[5];
packet->frequency = (data[7] << 8) | data[6];
packet->duration = (data[9] << 8) | data[8];
packet->rest_time = (data[11] << 8) | data[10];
packet->silent_time = (data[13] << 8) | data[12];
packet->ramp_up_time = data[14];
packet->hold_time = data[15];
packet->ramp_down_time = data[16];
packet->crc16 = (data[18] << 8) | data[17];
// CRC-16-CCITT-FALSE校验对前17字节进行校验不包括CRC本身
uint16_t calculated_crc = CalculateCRC16_CCITT_FALSE(data, 17);
/*if(calculated_crc != packet->crc16)
{
return 0;
}*/
// 功能码检查
return 1; // 解析成功
}
// 根据UART数据包更新电刺激配置
void UpdateEMS_ConfigFromUART(UART_EMS_Packet_t *packet)
{
// 检查开关状态
if(packet->switch_type == 0x00)
{
EMS_Stop();
return;
}
// 检查电刺激类型 (0x10~0x1F)
if(packet->switch_type < 0x10 || packet->switch_type > 0x1F)
{
return;
}
// 创建新的电刺激配置
EMS_Config_TypeDef new_config = {
.frequency = packet->frequency,
.duration = packet->duration,
.intensity = packet->intensity,
.rest_time = packet->rest_time,
.silent_time = packet->silent_time,
.ramp_up_time = packet->ramp_up_time,
.hold_time = packet->hold_time,
.ramp_down_time = packet->ramp_down_time,
.enable_ramp = 1 // 启用渐进控制
};
// 打印接收到的参数数据
printf("0x%02X\n", packet->switch_type);
printf("%d\n", packet->intensity);
printf("%d\n", packet->frequency);
printf("%d\n", packet->duration);
printf("%d\n", packet->rest_time);
printf("%d\n", packet->silent_time);
printf("%d\n", packet->ramp_up_time);
printf("%d\n", packet->hold_time);
printf("%d\n", packet->ramp_down_time);
// 应用新配置
EMS_Configure(&new_config);
// 启动电刺激
EMS_Start();
}
int main(){ int main(){
// 初始化系统 // 初始化系统
@ -35,6 +181,7 @@ int main(){
// 初始化UART // 初始化UART
UART_Init(CMSDK_UART1, &UART1_Init); UART_Init(CMSDK_UART1, &UART1_Init);
UART_ITConfig(CMSDK_UART1, &UART1_ITSet); UART_ITConfig(CMSDK_UART1, &UART1_ITSet);
// 配置电刺激参数 // 配置电刺激参数
EMS_Configure(&ems_config); EMS_Configure(&ems_config);
// 初始化时间管理器 // 初始化时间管理器
@ -44,18 +191,11 @@ int main(){
// 初始化波形生成器(电刺激)- 必须先初始化 // 初始化波形生成器(电刺激)- 必须先初始化
wavegen_Init(); wavegen_Init();
// 启动电刺激 // 启动电刺激
EMS_Start(); EMS_Start();
while(1) while(1)
{ {
} }
}
}

View File

@ -1,115 +0,0 @@
# 中断调试测试指南
## 问题分析
GPIO19一直保持低电平说明定时器中断没有正常运行。可能的原因包括
### 1. 时钟配置问题
- APB_Clock_Freq计算错误
- TIMER0时钟未使能
- 时钟频率配置不正确
### 2. 中断配置问题
- NVIC中断未正确使能
- 中断向量表配置错误
- 中断优先级设置问题
### 3. 定时器配置问题
- 定时器重装载值计算错误
- 定时器控制寄存器配置错误
- 定时器时钟源配置错误
## 修复措施
### 1. 时钟配置修复
- 修复了`ClockInit()`中清零APB时钟使能的问题
- 修复了`wavegen_Init()`中覆盖时钟使能的问题
- 使用`|=`操作符避免覆盖TIMER0时钟使能
### 2. 添加调试信息
- 在`TIMER0_Init()`中添加重装载值输出
- 在`main()`中添加APB时钟频率输出
- 在中断处理函数中添加调试输出
### 3. 中断处理优化
- 每100次中断输出一次调试信息
- 每1000次中断翻转一次GPIO19
- 添加GPIO状态监控
## 测试步骤
### 1. 编译和烧录
1. 重新编译项目
2. 烧录到目标芯片
3. 连接UART串口
### 2. 观察输出
通过UART观察以下信息
```
APB_Clock_Freq: 32000000 Hz
TIMER0重装载值: 32000
TIMER0_Init完成中断周期: 1 ms
========================================
定时器电刺激综合测试启动
========================================
Timer IRQ: 100, GPIO19 State: 0
Timer IRQ: 200, GPIO19 State: 0
...
Timer IRQ: 1000, GPIO19 State: 1
1 s - 定时器运行正常,电刺激同步输出中
```
### 3. 硬件测试
- 用示波器或万用表监测GPIO19
- 观察GPIO19是否每1秒翻转一次
- 检查GPIO19的电平变化
## 预期结果
### 正常情况
- UART输出显示定时器中断正常运行
- GPIO19每1秒翻转一次高电平↔低电平
- 中断计数器正常递增
### 异常情况
- 如果APB_Clock_Freq为0说明时钟配置有问题
- 如果TIMER0重装载值为0说明定时器配置有问题
- 如果没有中断输出,说明中断未正确使能
## 进一步调试
如果问题仍然存在,请检查:
### 1. 芯片型号
- 确认芯片支持TIMER0外设
- 检查芯片的时钟配置
### 2. 硬件连接
- 确认GPIO19引脚连接正确
- 检查电源和地连接
### 3. 编译器设置
- 确认中断向量表正确配置
- 检查编译器优化设置
## 常见问题解决
### 1. APB_Clock_Freq为0
- 检查时钟配置结构体
- 确认HSI频率设置正确
### 2. 中断不触发
- 检查NVIC中断使能
- 确认中断向量表配置
- 检查定时器控制寄存器
### 3. GPIO不翻转
- 检查GPIO初始化
- 确认GPIO方向设置
- 验证GPIO翻转函数
## 联系支持
如果问题仍然存在,请提供:
1. 芯片型号和版本
2. 完整的UART输出日志
3. 硬件连接图
4. 编译器版本和设置

View File

@ -1,261 +0,0 @@
# 时间管理系统使用指南
## 概述
本时间管理系统基于1ms定时器中断实现了多周期任务调度功能。通过标志位机制可以在主循环中方便地执行不同频率的任务避免在中断中执行复杂操作。
## 系统特性
### 支持的时间周期
- **2ms**: 高频控制任务(如陀螺仪姿态解算)
- **6ms**: 中高频任务
- **10ms**: 中频控制任务(如传感器数据采集)
- **20ms**: 中低频任务
- **100ms**: 低频控制任务(如状态监控、通信处理)
- **1s**: 超低频任务如系统状态报告、GPIO翻转
### 核心函数
#### 1. 初始化函数
```c
void Time_Manager_Init(void);
```
- 清零所有标志位和计数器
- 在系统启动时调用一次
#### 2. 处理函数
```c
void Time_Manager_Process(void);
```
- 在定时器中断中自动调用
- 更新所有计数器并设置相应标志位
#### 3. 标志位管理
```c
Time_Flag_TypeDef* Time_Manager_GetFlags(void);
void Time_Manager_ClearFlags(void);
void Time_Manager_Reset(void);
```
## 使用方法
### 1. 系统初始化
```c
int main() {
// 系统初始化
MTP_init();
ClockInit();
// 初始化定时器1ms中断
TIMER0_Init(1);
// 初始化时间管理器
Time_Manager_Init();
// 其他初始化...
while(1) {
// 主循环处理
}
}
```
### 2. 主循环中的任务调度
```c
while(1) {
// 获取时间标志位
Time_Flag_TypeDef* time_flags = Time_Manager_GetFlags();
// 2ms周期任务 - 高频控制
if (time_flags->T_2ms) {
// 执行2ms周期任务
// 例如:陀螺仪姿态解算
Process_Gyroscope_Data();
time_flags->T_2ms = 0; // 清除标志位
}
// 10ms周期任务 - 传感器采集
if (time_flags->T_10ms) {
// 执行10ms周期任务
// 例如:传感器数据采集
Collect_Sensor_Data();
time_flags->T_10ms = 0; // 清除标志位
}
// 100ms周期任务 - 状态监控
if (time_flags->T_100ms) {
// 执行100ms周期任务
// 例如:系统状态监控
Monitor_System_Status();
time_flags->T_100ms = 0; // 清除标志位
}
// 1s周期任务 - 系统报告
if (time_flags->T_1s) {
// 执行1s周期任务
// 例如GPIO翻转、状态报告
GPIO_Overturn(GPIO_19);
printf("系统运行正常 - 1s定时任务\n");
time_flags->T_1s = 0; // 清除标志位
}
// 其他任务处理...
}
```
### 3. 自定义任务函数示例
```c
// 陀螺仪数据处理函数
void Process_Gyroscope_Data(void) {
// 读取陀螺仪数据
// 进行姿态解算
// 更新控制参数
}
// 传感器数据采集函数
void Collect_Sensor_Data(void) {
// 读取温度传感器
// 读取压力传感器
// 数据预处理
}
// 系统状态监控函数
void Monitor_System_Status(void) {
// 检查系统温度
// 检查电源状态
// 检查通信状态
}
```
## 优势特点
### 1. 模块化设计
- 时间管理功能独立封装
- 易于维护和扩展
- 代码结构清晰
### 2. 高效调度
- 基于标志位的轻量级调度
- 避免在中断中执行复杂操作
- 减少中断响应时间
### 3. 灵活配置
- 支持多种时间周期
- 可根据需要启用/禁用特定周期
- 易于添加新的时间周期
### 4. 实时性好
- 基于硬件定时器中断
- 时间精度高
- 响应及时
## 注意事项
### 1. 中断处理
- `Time_Manager_Process()` 在中断中调用,应保持简洁
- 不要在中断中执行复杂操作
- 复杂任务应放在主循环中处理
### 2. 标志位管理
- 及时清除已处理的标志位
- 避免标志位累积导致任务丢失
- 注意标志位的原子性操作
### 3. 任务设计
- 合理分配任务到不同时间周期
- 避免在短周期任务中执行耗时操作
- 考虑任务的优先级和依赖关系
### 4. 系统资源
- 监控CPU使用率
- 避免任务过载
- 合理设置任务执行时间
## 扩展功能
### 1. 添加新的时间周期
```c
// 在Time_Flag_TypeDef中添加新标志位
typedef struct {
uint8_t T_2ms;
uint8_t T_6ms;
uint8_t T_10ms;
uint8_t T_20ms;
uint8_t T_100ms;
uint8_t T_1s;
uint8_t T_500ms; // 新增500ms周期
} Time_Flag_TypeDef;
// 在Time_Counter_TypeDef中添加新计数器
typedef struct {
uint8_t t_2ms;
uint8_t t_6ms;
uint8_t t_10ms;
uint8_t t_20ms;
uint8_t t_100ms;
uint16_t t_1s;
uint16_t t_500ms; // 新增500ms计数器
} Time_Counter_TypeDef;
// 在Time_Manager_Process()中添加处理逻辑
void Time_Manager_Process(void) {
// 现有代码...
// 500ms控制周期
if (g_time_counters.t_500ms >= 500) {
g_time_counters.t_500ms = 0;
g_time_flags.T_500ms = 1;
}
}
```
### 2. 任务优先级管理
```c
// 可以添加任务优先级结构
typedef struct {
uint8_t priority;
void (*task_function)(void);
} Task_Item_TypeDef;
// 任务队列管理
Task_Item_TypeDef task_queue[MAX_TASKS];
```
## 调试技巧
### 1. 添加调试输出
```c
if (time_flags->T_1s) {
printf("1s任务执行时间: %d ms\n", get_system_time());
time_flags->T_1s = 0;
}
```
### 2. 监控任务执行
```c
// 添加任务执行计数器
static uint32_t task_2ms_count = 0;
static uint32_t task_10ms_count = 0;
if (time_flags->T_2ms) {
task_2ms_count++;
printf("2ms任务执行次数: %d\n", task_2ms_count);
time_flags->T_2ms = 0;
}
```
### 3. 性能分析
```c
// 测量任务执行时间
uint32_t start_time = get_system_time();
Process_Gyroscope_Data();
uint32_t end_time = get_system_time();
printf("陀螺仪处理耗时: %d us\n", end_time - start_time);
```
## 总结
这个时间管理系统提供了一个简单而强大的多周期任务调度解决方案。通过合理使用,可以实现高效、实时的嵌入式系统控制。关键是要根据实际应用需求,合理分配任务到不同的时间周期,并注意系统的实时性和稳定性。

View File

@ -1,136 +0,0 @@
# 移植验证测试
## 测试目标
验证将ENS_EMSsine_TEST中的电刺激功能成功移植到TIMER_DEMO中实现定时器和电刺激功能的同步运行。
## 测试环境
- 硬件支持波形生成器的ARM Cortex-M0芯片
- 软件Keil MDK 5.06
- 连接UART串口、GPIO19、电刺激输出通道
## 测试步骤
### 1. 编译测试
1. 打开Keil MDK
2. 加载`ENS001_BASIC_PRJ.uvprojx`项目文件
3. 检查编译是否成功,无错误和警告
4. 确认新添加的源文件已包含在项目中:
- `ENS1_BOOST.c`
- `ENS1_WAVEGEN.c`
### 2. 功能测试
#### 2.1 定时器功能测试
- **测试目标**验证GPIO19定时翻转功能
- **测试方法**
1. 用示波器或万用表监测GPIO19引脚
2. 观察GPIO19是否每1秒翻转一次电平
3. 通过UART观察定时器状态输出
- **预期结果**
- GPIO19每1秒翻转一次高电平↔低电平
- UART输出类似`1 s - 定时器运行正常,电刺激同步输出中`
#### 2.2 电刺激功能测试
- **测试目标**:验证方波电刺激输出
- **测试方法**
1. 连接电刺激输出通道到示波器
2. 观察电刺激通道的方波输出
3. 验证方波频率和强度是否符合配置
- **预期结果**
- 电刺激通道输出方波信号
- 方波强度为128中等强度
- 方波频率约为100Hz
#### 2.3 系统初始化测试
- **测试目标**:验证系统初始化信息
- **测试方法**
1. 通过UART观察系统启动信息
2. 检查初始化参数是否正确
- **预期结果**
```
========================================
定时器电刺激综合测试启动
========================================
GPIO19: 定时器指示1秒翻转
电刺激: 方波输出强度128
系统时钟: 32MHz HSI
升压电压: 26V
UART波特率: 115200
========================================
ENS1 - WAVE_GENERATOR_DRIVER_A_Test - $Revision: R001
```
### 3. 性能测试
#### 3.1 定时精度测试
- **测试目标**:验证定时器精度
- **测试方法**
1. 用高精度示波器测量GPIO19翻转间隔
2. 连续测量10次计算平均值和标准差
- **预期结果**
- 翻转间隔1.000 ± 0.001秒
- 定时精度误差 < 0.1%
#### 3.2 电刺激稳定性测试
- **测试目标**:验证电刺激输出稳定性
- **测试方法**
1. 连续运行30分钟
2. 观察电刺激输出是否稳定
3. 检查是否有异常中断或停止
- **预期结果**
- 电刺激输出稳定,无异常
- 定时器功能正常,无中断
### 4. 互不干扰测试
#### 4.1 功能独立性测试
- **测试目标**:验证定时器和电刺激功能互不干扰
- **测试方法**
1. 同时运行定时器和电刺激功能
2. 观察两个功能是否独立运行
3. 测试电刺激参数变化是否影响定时器
- **预期结果**
- 定时器功能不受电刺激影响
- 电刺激功能不受定时器影响
- 两个功能完全独立运行
## 测试结果记录
### 测试日期_________
### 测试人员_________
| 测试项目 | 测试结果 | 备注 |
|---------|---------|------|
| 编译测试 | □通过 □失败 | |
| 定时器功能 | □通过 □失败 | |
| 电刺激功能 | □通过 □失败 | |
| 系统初始化 | □通过 □失败 | |
| 定时精度 | □通过 □失败 | |
| 稳定性测试 | □通过 □失败 | |
| 互不干扰 | □通过 □失败 | |
### 问题记录
1. _________________________
2. _________________________
3. _________________________
### 改进建议
1. _________________________
2. _________________________
3. _________________________
## 测试结论
□ 移植成功,功能正常
□ 移植部分成功,需要进一步优化
□ 移植失败,需要重新设计
## 签名
测试人员_________ 日期_________
审核人员_________ 日期_________

View File

@ -1,155 +0,0 @@
# 定时器电刺激综合测试工程移植完成总结
## 移植概述
本次移植成功将ENS_EMSsine_TEST中的电刺激功能移植到TIMER_DEMO中实现了GPIO定时翻转电平的同时电刺激通道输出方波且二者互不干扰的目标。
## 移植完成情况
### ✅ 已完成的工作
#### 1. 新增文件
- **ENS1_BOOST.h** - 升压电压选择头文件
- **ENS1_BOOST.c** - 升压电压选择实现
- **ENS1_WAVEGEN.h** - 波形生成器头文件
- **ENS1_WAVEGEN.c** - 波形生成器实现
#### 2. 修改文件
- **USER/mian.c** - 主程序,集成电刺激功能
- **FWLIB/source/ENS1_TIMER.c** - 定时器中断处理函数
- **ENS001_BASIC_PRJ.uvprojx** - 项目文件,添加新源文件
#### 3. 新增文档
- **移植说明.md** - 详细的移植说明文档
- **测试验证.md** - 完整的测试验证方案
- **移植完成总结.md** - 本总结文档
### ✅ 功能实现
#### 1. 定时器功能
- GPIO19每1秒翻转一次电平
- 通过UART输出定时器状态信息
- 运行在定时器中断中,精度高
#### 2. 电刺激功能
- 方波电刺激输出
- 可配置频率、强度、持续时间等参数
- 运行在主循环中,与定时器互不干扰
#### 3. 系统配置
- 系统时钟32MHz HSI
- 升压电压26V默认
- UART波特率115200
- 定时器中断周期1ms
### ✅ 技术特点
#### 1. 模块化设计
- 升压模块独立封装,便于维护
- 波形生成器模块独立封装,易于扩展
- 清晰的函数接口,便于调用
#### 2. 互不干扰
- 定时器运行在中断中,优先级高
- 电刺激运行在主循环中,不影响定时器
- 两个功能完全独立,互不依赖
#### 3. 参数可配置
- 电刺激参数可通过结构体配置
- 升压电压可选择不同档位11V-55V
- 便于适应不同应用需求
## 移植质量评估
### 代码质量
- ✅ 代码结构清晰,模块化程度高
- ✅ 函数命名规范,易于理解
- ✅ 注释完整,便于维护
- ✅ 错误处理完善
### 功能完整性
- ✅ 完整移植了电刺激相关功能
- ✅ 保持了原有定时器功能
- ✅ 实现了功能互不干扰
- ✅ 提供了完整的配置接口
### 可维护性
- ✅ 代码结构合理,便于后续维护
- ✅ 提供了详细的文档说明
- ✅ 包含了完整的测试验证方案
- ✅ 便于功能扩展和优化
## 使用说明
### 1. 编译和烧录
1. 使用Keil MDK打开`ENS001_BASIC_PRJ.uvprojx`
2. 编译项目(应无错误和警告)
3. 烧录到目标芯片
### 2. 运行效果
- GPIO19每1秒翻转一次指示定时器运行状态
- 电刺激通道输出方波信号
- 通过UART输出详细的运行状态信息
### 3. 参数配置
可以通过修改`main()`函数中的`ems_config`结构体来调整电刺激参数:
```c
EMS_Config_TypeDef ems_config = {
.frequency = 100, // 频率 (Hz)
.duration = 1000, // 持续时间 (ms)
.intensity = 128, // 强度 (0-255)
.rest_time = 100, // 休息时间 (ms)
.silent_time = 50 // 静默时间 (ms)
};
```
## 注意事项
### 1. 硬件要求
- 确保目标芯片支持波形生成器外设
- 电刺激输出需要连接相应的电极
- 升压电压选择需要根据实际应用需求调整
### 2. 安全考虑
- 电刺激强度不宜过高,避免对人体造成伤害
- 使用前请仔细检查硬件连接
- 建议在专业指导下使用
### 3. 调试建议
- 首次使用时建议降低电刺激强度
- 可以通过UART观察系统运行状态
- 使用示波器监测电刺激输出波形
## 后续优化建议
### 1. 功能扩展
- 添加电刺激模式选择(连续、脉冲、调制等)
- 实现电刺激参数的实时调节
- 添加安全保护功能
### 2. 性能优化
- 优化电刺激波形的生成算法
- 提高定时器精度
- 减少系统功耗
### 3. 用户体验
- 添加用户界面
- 实现参数保存和加载
- 提供更详细的状态反馈
## 结论
本次移植工作圆满完成,成功实现了以下目标:
1. ✅ **功能移植**完整移植了电刺激功能到TIMER_DEMO中
2. ✅ **互不干扰**:定时器和电刺激功能完全独立运行
3. ✅ **模块化设计**:代码结构清晰,便于维护和扩展
4. ✅ **文档完整**:提供了详细的使用说明和测试方案
移植后的工程可以直接用于生物电刺激产品的开发,为后续的产品化提供了良好的基础。
---
**移植完成时间**2023-11
**移植人员**NANOCHAP
**审核状态**:待审核

View File

@ -1,117 +0,0 @@
# 定时器电刺激综合测试工程移植说明
## 项目概述
本项目将ENS_EMSsine_TEST中的电刺激功能移植到TIMER_DEMO中实现GPIO定时翻转电平的同时电刺激通道输出方波且二者互不干扰。
## 移植内容
### 1. 新增文件
#### 升压电压选择模块
- `FWLIB/include/ENS1_BOOST.h` - 升压电压选择头文件
- `FWLIB/source/ENS1_BOOST.c` - 升压电压选择实现
**功能:**
- `boost_voltage_select_11V()` - 设置11V升压
- `boost_voltage_select_15V()` - 设置15V升压
- `boost_voltage_select_26V()` - 设置26V升压
- `boost_voltage_select_45V()` - 设置45V升压
- `boost_voltage_select_55V()` - 设置55V升压
#### 波形生成器模块
- `FWLIB/include/ENS1_WAVEGEN.h` - 波形生成器头文件
- `FWLIB/source/ENS1_WAVEGEN.c` - 波形生成器实现
**功能:**
- `wavegen_Init()` - 初始化波形生成器
- `wavegen_Start()` - 启动波形生成器
- `wavegen_Stop()` - 停止波形生成器
- `wavegen_driverA_sine_test()` - 驱动器A正弦波测试
- `EMS_Configure()` - 配置电刺激参数
- `EMS_Start()` - 启动电刺激
- `EMS_Stop()` - 停止电刺激
- `EMS_UpdateIntensity()` - 更新电刺激强度
- `EMS_Process()` - 电刺激主循环处理
### 2. 修改文件
#### 主程序 (USER/mian.c)
- 添加电刺激功能初始化
- 配置电刺激参数
- 在主循环中调用`EMS_Process()`处理电刺激
#### 定时器中断 (FWLIB/source/ENS1_TIMER.c)
- 修改定时器中断处理函数,添加电刺激状态提示
## 功能特性
### 1. 定时器功能
- GPIO19每1秒翻转一次电平
- 通过UART输出定时器状态信息
- 运行在定时器中断中
### 2. 电刺激功能
- 方波电刺激输出
- 可配置频率、强度、持续时间等参数
- 运行在主循环中,与定时器互不干扰
### 3. 系统配置
- 系统时钟32MHz HSI
- 升压电压26V默认
- UART波特率115200
- 定时器中断周期1ms
## 使用方法
### 1. 编译和烧录
1. 使用Keil MDK打开`ENS001_BASIC_PRJ.uvprojx`
2. 编译项目
3. 烧录到目标芯片
### 2. 运行效果
- GPIO19每1秒翻转一次用于指示定时器运行状态
- 电刺激通道输出方波信号
- 通过UART输出运行状态信息
### 3. 参数配置
可以通过修改`main()`函数中的`ems_config`结构体来调整电刺激参数:
```c
EMS_Config_TypeDef ems_config = {
.frequency = 100, // 频率 (Hz)
.duration = 1000, // 持续时间 (ms)
.intensity = 128, // 强度 (0-255)
.rest_time = 100, // 休息时间 (ms)
.silent_time = 50 // 静默时间 (ms)
};
```
## 技术特点
### 1. 模块化设计
- 升压模块独立封装
- 波形生成器模块独立封装
- 便于维护和扩展
### 2. 互不干扰
- 定时器运行在中断中
- 电刺激运行在主循环中
- 两个功能完全独立
### 3. 参数可配置
- 电刺激参数可通过结构体配置
- 升压电压可选择不同档位
- 便于适应不同应用需求
## 注意事项
1. 确保目标芯片支持波形生成器外设
2. 电刺激输出需要连接相应的电极
3. 升压电压选择需要根据实际应用需求调整
4. 电刺激强度不宜过高,避免对人体造成伤害
## 版本信息
- 版本V1.0
- 日期2023-11
- 作者NANOCHAP
- 移植自ENS_EMSsine_TEST

View File

@ -1,254 +0,0 @@
# 缓进缓出功能说明
## 功能概述
缓进缓出功能实现了电刺激强度的渐进式控制避免突然的强度变化给用户带来的不适感。整个10秒的电刺激周期被分为三个阶段
- **缓进阶段2秒**强度从0逐渐增加到设定最大值
- **保持阶段6秒**:保持最大强度
- **缓出阶段2秒**强度从最大值逐渐降低到0
## 实现原理
### 1. 时间控制
基于2ms定时器中断实现精确的强度控制
```c
// 计算每个强度步进的时间间隔(微秒)
uint32_t step_interval = (g_ems_config.ramp_up_time * 2000000) / g_ems_config.intensity;
// 例如2秒 = 2000000微秒强度128则每15625微秒增加1个强度单位
```
### 2. 强度计算
根据您的计算:
- 总时间2秒 = 2,000,000微秒
- 目标强度128
- 步进间隔2,000,000 / 128 = 15,625微秒
- 每15,625微秒增加/减少1个强度单位
### 3. 阶段控制
```c
switch (g_ramp_phase) {
case 0: // 缓进阶段
// 强度从0增加到设定值
break;
case 1: // 保持阶段
// 保持最大强度
break;
case 2: // 缓出阶段
// 强度从设定值降低到0
break;
}
```
## 配置参数
### 1. 结构体定义
```c
typedef struct {
uint16_t frequency; // 频率 (Hz)
uint16_t duration; // 持续时间 (ms)
uint16_t intensity; // 强度 (0-255)
uint16_t rest_time; // 休息时间 (ms)
uint16_t silent_time; // 静默时间 (ms)
// 缓进缓出控制参数
uint8_t ramp_up_time; // 缓进时间2秒
uint8_t hold_time; // 保持时间6秒
uint8_t ramp_down_time; // 缓出时间2秒
uint8_t enable_ramp; // 启用渐进控制
} EMS_Config_TypeDef;
```
### 2. 当前配置
```c
EMS_Config_TypeDef ems_config = {
.frequency = 100, // 100Hz
.duration = 1000, // 1000ms
.intensity = 128, // 中等强度
.rest_time = 100, // 100ms休息时间
.silent_time = 50, // 50ms静默时间
// 缓进缓出控制参数
.ramp_up_time = 2, // 缓进时间2秒
.hold_time = 6, // 保持时间6秒
.ramp_down_time = 2, // 缓出时间2秒
.enable_ramp = 1 // 启用渐进控制
};
```
## 工作流程
### 1. 系统启动
- 初始化缓进缓出变量
- 设置初始强度为0
- 进入缓进阶段
### 2. 缓进阶段0-2秒
- 每15,625微秒增加1个强度单位
- 从0逐渐增加到128
- 2秒后进入保持阶段
### 3. 保持阶段2-8秒
- 保持强度为128
- 持续6秒
- 8秒后进入缓出阶段
### 4. 缓出阶段8-10秒
- 每15,625微秒减少1个强度单位
- 从128逐渐降低到0
- 10秒后停止电刺激
### 5. 休息阶段10-20秒
- 电刺激完全停止
- 持续10秒
- 20秒后重新开始新周期
## 关键函数
### 1. 缓进缓出处理函数
```c
void EMS_Process_Ramp(void)
{
// 计算步进间隔
uint32_t step_interval = (g_ems_config.ramp_up_time * 2000000) / g_ems_config.intensity;
// 根据当前阶段调整强度
switch (g_ramp_phase) {
case 0: // 缓进
if (g_ramp_timer >= step_interval) {
g_current_intensity++;
}
break;
case 1: // 保持
g_current_intensity = g_ems_config.intensity;
break;
case 2: // 缓出
if (g_ramp_timer >= step_interval) {
g_current_intensity--;
}
break;
}
}
```
### 2. 电刺激处理函数
```c
void EMS_Process(void)
{
if(g_ems_running) {
// 使用当前缓进缓出的强度
uint16_t current_intensity = g_current_intensity;
// 生成方波信号
wavegen_driverA_sine_test(WAVE_GEN_DRVA_BLK0, current_intensity);
}
}
```
## 波形特征
### 1. 梯形波形
在示波器上观察到的波形将呈现梯形特征:
- **上升沿**2秒内从0V逐渐上升到最大电压
- **平顶**6秒内保持最大电压
- **下降沿**2秒内从最大电压逐渐下降到0V
- **平底**10秒内保持0V
### 2. 时间精度
- 基于2ms定时器中断
- 强度变化精度15,625微秒
- 总时间精度±2ms
## 调试输出
系统会输出以下调试信息:
```
缓进缓出控制已启动 - 缓进阶段开始
缓进完成 - 进入保持阶段, 强度: 128
保持完成 - 进入缓出阶段
缓出完成 - 强度降至0
电刺激已停止
```
## 参数调整
### 1. 修改时间分配
```c
// 修改为3秒缓进4秒保持3秒缓出
.ramp_up_time = 3, // 缓进时间3秒
.hold_time = 4, // 保持时间4秒
.ramp_down_time = 3, // 缓出时间3秒
```
### 2. 修改目标强度
```c
.intensity = 200, // 修改目标强度为200
```
### 3. 禁用缓进缓出
```c
.enable_ramp = 0 // 禁用渐进控制,直接使用设定强度
```
## 优势特点
### 1. 用户体验
- 避免突然的强度变化
- 减少刺痛感
- 提供舒适的刺激体验
### 2. 安全性
- 渐进式强度控制
- 避免过度刺激
- 可控的强度范围
### 3. 灵活性
- 可调节的时间分配
- 可配置的目标强度
- 可启用的功能开关
## 注意事项
### 1. 时间精度
- 确保2ms定时器正常工作
- 注意微秒计时器的溢出处理
- 验证步进间隔的计算准确性
### 2. 强度范围
- 强度值范围0-255
- 避免超出硬件限制
- 考虑用户承受能力
### 3. 系统资源
- 缓进缓出处理在2ms中断中执行
- 保持中断处理简洁
- 避免影响其他功能
## 测试验证
### 1. 硬件测试
- 用示波器观察梯形波形
- 验证时间精度
- 检查强度变化平滑性
### 2. 软件测试
- 通过UART观察调试输出
- 确认阶段切换正确
- 验证强度计算准确
### 3. 功能验证
- 测试不同强度值
- 验证时间分配
- 确认循环工作正常

View File

@ -1,229 +0,0 @@
# 缓进缓出功能说明(修正版)
## 问题分析
原始实现存在定时器冲突问题:
- 2ms定时器与1s定时器产生冲突
- 缓进缓出处理在2ms中断中执行干扰了主循环的电刺激处理
- 导致在示波器上观察不到有效波形
## 解决方案
采用方波周期计数的方式实现缓进缓出,避免定时器冲突:
### 1. 计算原理
根据您的分析:
- 每个方波周期100微秒
- 2秒内方波周期数2,000,000 ÷ 100 = 20,000个
- 强度从0增加到128需要128个步进
- 每个步进的方波周期数20,000 ÷ 128 ≈ 156.25个
### 2. 实现方式
```c
// 计算每个强度步进需要的方波周期数
uint32_t waves_per_step = (g_ems_config.ramp_up_time * 20000) / g_ems_config.intensity;
// 例如2秒 × 20000 ÷ 128 = 156.25个方波周期
```
## 核心变量
```c
// 缓进缓出控制变量
static volatile uint16_t g_current_intensity = 0; // 当前强度
static volatile uint8_t g_ramp_phase = 0; // 渐进阶段0=缓进, 1=保持, 2=缓出
static volatile uint32_t g_wave_counter = 0; // 方波周期计数器
static volatile uint32_t g_ramp_step_counter = 0; // 缓进步进计数器
```
## 工作流程
### 1. 缓进阶段0-2秒
```c
case 0: // 缓进阶段
if (g_ramp_step_counter < g_ems_config.ramp_up_time) {
// 每156个方波周期增加1个强度单位
if (g_wave_counter >= waves_per_step) {
g_wave_counter = 0; // 重置方波计数器
if (g_current_intensity < g_ems_config.intensity) {
g_current_intensity++;
}
}
g_ramp_step_counter++;
} else {
// 缓进完成,进入保持阶段
g_ramp_phase = 1;
g_ramp_step_counter = 0;
g_current_intensity = g_ems_config.intensity;
}
break;
```
### 2. 保持阶段2-8秒
```c
case 1: // 保持阶段
if (g_ramp_step_counter < g_ems_config.hold_time) {
// 保持最大强度
g_current_intensity = g_ems_config.intensity;
g_ramp_step_counter++;
} else {
// 保持完成,进入缓出阶段
g_ramp_phase = 2;
g_ramp_step_counter = 0;
g_wave_counter = 0;
}
break;
```
### 3. 缓出阶段8-10秒
```c
case 2: // 缓出阶段
if (g_ramp_step_counter < g_ems_config.ramp_down_time) {
// 每156个方波周期减少1个强度单位
if (g_wave_counter >= waves_per_step) {
g_wave_counter = 0; // 重置方波计数器
if (g_current_intensity > 0) {
g_current_intensity--;
}
}
g_ramp_step_counter++;
} else {
// 缓出完成,停止电刺激
g_current_intensity = 0;
}
break;
```
## 调用方式
缓进缓出处理函数在电刺激处理函数中调用:
```c
void EMS_Process(void)
{
if(g_ems_running) {
g_ems_count++;
// 处理缓进缓出控制
EMS_Process_Ramp();
// 使用当前缓进缓出的强度
uint16_t current_intensity = g_current_intensity;
// 生成方波信号
wavegen_driverA_sine_test(WAVE_GEN_DRVA_BLK0, current_intensity);
}
}
```
## 优势特点
### 1. 避免定时器冲突
- 不再使用2ms定时器进行缓进缓出控制
- 缓进缓出处理在电刺激处理函数中执行
- 确保时序一致性
### 2. 精确控制
- 基于方波周期计数,精度高
- 每156个方波周期调整一次强度
- 平滑的强度变化
### 3. 简单可靠
- 逻辑清晰,易于理解
- 不依赖复杂的定时器机制
- 调试方便
## 时间分配
### 完整周期20秒
1. **缓进阶段**0-2秒强度0→128
2. **保持阶段**2-8秒强度保持128
3. **缓出阶段**8-10秒强度128→0
4. **休息阶段**10-20秒强度保持0
### 强度变化
- **缓进**每156个方波周期增加1个强度单位
- **保持**稳定在最大强度128
- **缓出**每156个方波周期减少1个强度单位
## 调试输出
系统会输出以下调试信息:
```
缓进缓出控制已启动 - 缓进阶段开始
缓进 - 强度增加到: 1
缓进 - 强度增加到: 2
...
缓进完成 - 进入保持阶段, 强度: 128
保持完成 - 进入缓出阶段
缓出 - 强度降低到: 127
缓出 - 强度降低到: 126
...
缓出完成 - 强度降至0
电刺激已停止
```
## 参数配置
```c
EMS_Config_TypeDef ems_config = {
.frequency = 100, // 100Hz
.duration = 1000, // 1000ms
.intensity = 128, // 中等强度
.rest_time = 100, // 100ms休息时间
.silent_time = 50, // 50ms静默时间
// 缓进缓出控制参数
.ramp_up_time = 2, // 缓进时间2秒
.hold_time = 6, // 保持时间6秒
.ramp_down_time = 2, // 缓出时间2秒
.enable_ramp = 1 // 启用渐进控制
};
```
## 测试验证
### 1. 硬件测试
- 用示波器观察梯形波形
- 验证缓进缓出的平滑性
- 检查时间精度
### 2. 软件测试
- 通过UART观察调试输出
- 确认强度变化正确
- 验证阶段切换正常
### 3. 功能验证
- 测试不同强度值
- 验证时间分配
- 确认循环工作正常
## 注意事项
### 1. 方波周期
- 确保方波周期计算正确100微秒
- 验证方波计数器正常工作
- 注意计数器的溢出处理
### 2. 强度范围
- 强度值范围0-255
- 避免超出硬件限制
- 考虑用户承受能力
### 3. 系统资源
- 缓进缓出处理在电刺激处理中执行
- 保持处理简洁高效
- 避免影响其他功能
## 总结
修正后的缓进缓出功能:
- 解决了定时器冲突问题
- 采用方波周期计数方式
- 实现了平滑的强度变化
- 提供了舒适的刺激体验
现在您应该能在示波器上观察到清晰的梯形波形了!

View File

@ -1,198 +0,0 @@
# 间断性放电功能说明
## 功能概述
本系统实现了间断性电刺激放电功能,具体表现为:
- **前10秒**:开启电刺激,输出方波信号
- **后10秒**:关闭电刺激,停止输出
- **循环往复**每20秒为一个完整周期
## 实现原理
### 1. 控制变量
```c
static uint8_t ems_control_count = 0; // 电刺激控制计数器
static uint8_t ems_state = 0; // 电刺激状态0=关闭1=开启
```
### 2. 时间控制逻辑
基于1秒定时器中断在1秒任务中实现控制
```c
if (time_flags->T_1s) {
ems_control_count++; // 每秒递增计数器
if (ems_control_count <= 10) {
// 前10秒开启电刺激
if (ems_state == 0) {
ems_state = 1;
EMS_Start(); // 启动电刺激
}
EMS_Process(); // 处理电刺激
} else if (ems_control_count <= 20) {
// 后10秒关闭电刺激
if (ems_state == 1) {
ems_state = 0;
EMS_Stop(); // 停止电刺激
}
} else {
// 重置计数器,开始新的周期
ems_control_count = 0;
}
}
```
### 3. 电刺激控制函数
#### 启动电刺激
```c
void EMS_Start(void)
{
wavegen_Start();
printf("电刺激已启动\n");
}
```
#### 停止电刺激
```c
void EMS_Stop(void)
{
g_ems_running = 0;
g_ems_count = 0; // 重置计数器
wavegen_Stop(WAVE_GEN_DRVA_BLK0);
printf("电刺激已停止\n");
}
```
#### 处理电刺激
```c
void EMS_Process(void)
{
if(g_ems_running) {
// 只有在运行状态时才处理电刺激
g_ems_count++;
// ... 电刺激处理逻辑
}
}
```
## 工作流程
### 1. 系统启动
- 初始化电刺激参数
- 设置初始状态为关闭
- 计数器清零
### 2. 第一个10秒周期开启阶段
- 第1秒检测到状态变化调用 `EMS_Start()`
- 第1-10秒每1秒调用 `EMS_Process()` 处理电刺激
- 输出方波信号
### 3. 第二个10秒周期关闭阶段
- 第11秒检测到状态变化调用 `EMS_Stop()`
- 第11-20秒停止电刺激处理
- 无信号输出
### 4. 周期重置
- 第21秒计数器重置为0
- 开始新的20秒周期
## 调试输出
系统会输出以下调试信息:
```
电刺激开启 - 第1秒
电刺激已启动
1s定时任务执行 - 系统运行正常,电刺激状态: 开启
...
电刺激关闭 - 第11秒
电刺激已停止
1s定时任务执行 - 系统运行正常,电刺激状态: 关闭
...
电刺激周期重置
```
## 关键改进点
### 1. 变量作用域
- 使用 `static` 关键字确保变量在函数调用间保持状态
- 避免每次循环重新初始化计数器
### 2. 状态管理
- 使用 `ems_state` 标志位跟踪当前状态
- 只在状态变化时执行启动/停止操作
### 3. 函数调用
- 明确调用 `EMS_Start()``EMS_Stop()` 函数
- 确保电刺激模块正确响应控制命令
### 4. 计数器重置
- 在停止时重置内部计数器
- 确保下次启动时从正确状态开始
## 测试验证
### 1. 硬件测试
- 用示波器监测电刺激输出
- 观察10秒开启/10秒关闭的周期
- 验证GPIO19的1秒翻转
### 2. 软件测试
- 通过UART观察调试输出
- 确认状态切换正确
- 验证计数器正常工作
### 3. 功能验证
- 电刺激强度128中等强度
- 频率100Hz
- 升压电压26V
- 工作周期20秒10秒开启 + 10秒关闭
## 注意事项
### 1. 安全性
- 确保电刺激停止时完全关闭输出
- 避免意外的高强度输出
### 2. 实时性
- 基于1秒定时器时间精度较高
- 状态切换响应及时
### 3. 可扩展性
- 可以轻松修改开启/关闭时间
- 支持不同的电刺激参数
## 参数配置
可以通过修改以下参数来调整功能:
```c
// 修改开启时间(秒)
if (ems_control_count <= 10) { // 改为其他值
// 修改关闭时间(秒)
} else if (ems_control_count <= 20) { // 改为其他值
// 修改电刺激强度
EMS_Config_TypeDef ems_config = {
.intensity = 128, // 改为其他值
// ...
};
```
## 故障排除
### 1. 电刺激不停止
- 检查 `EMS_Stop()` 函数是否正确调用
- 确认 `g_ems_running` 标志位被正确清零
### 2. 时间控制不准确
- 检查定时器中断是否正常工作
- 确认计数器逻辑正确
### 3. 状态切换异常
- 检查 `ems_state` 变量状态
- 确认条件判断逻辑正确