第二次上传

变更:定时器使用正常、定时方波输出正常,指示灯定时闪烁正常
This commit is contained in:
Shocky 2025-08-20 11:03:53 +08:00
parent e2e6670399
commit 8a454bcd9e
46 changed files with 5278 additions and 3431 deletions

File diff suppressed because one or more lines are too long

View File

@ -152,22 +152,6 @@
<Bp> <Bp>
<Number>0</Number> <Number>0</Number>
<Type>0</Type> <Type>0</Type>
<LineNumber>39</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>.\USER\mian.c</Filename>
<ExecCommand></ExecCommand>
<Expression></Expression>
</Bp>
<Bp>
<Number>1</Number>
<Type>0</Type>
<LineNumber>283</LineNumber> <LineNumber>283</LineNumber>
<EnabledFlag>1</EnabledFlag> <EnabledFlag>1</EnabledFlag>
<Address>268441304</Address> <Address>268441304</Address>
@ -182,7 +166,7 @@
<Expression>\\ENS001_BASIC_PRJ\FWLIB/source/ENS1_UART.c\283</Expression> <Expression>\\ENS001_BASIC_PRJ\FWLIB/source/ENS1_UART.c\283</Expression>
</Bp> </Bp>
<Bp> <Bp>
<Number>2</Number> <Number>1</Number>
<Type>0</Type> <Type>0</Type>
<LineNumber>36</LineNumber> <LineNumber>36</LineNumber>
<EnabledFlag>1</EnabledFlag> <EnabledFlag>1</EnabledFlag>
@ -373,6 +357,30 @@
<RteFlg>0</RteFlg> <RteFlg>0</RteFlg>
<bShared>0</bShared> <bShared>0</bShared>
</File> </File>
<File>
<GroupNumber>2</GroupNumber>
<FileNumber>8</FileNumber>
<FileType>1</FileType>
<tvExp>0</tvExp>
<tvExpOptDlg>0</tvExpOptDlg>
<bDave2>0</bDave2>
<PathWithFileName>.\FWLIB\source\ENS1_BOOST.c</PathWithFileName>
<FilenameWithoutPath>ENS1_BOOST.c</FilenameWithoutPath>
<RteFlg>0</RteFlg>
<bShared>0</bShared>
</File>
<File>
<GroupNumber>2</GroupNumber>
<FileNumber>9</FileNumber>
<FileType>1</FileType>
<tvExp>0</tvExp>
<tvExpOptDlg>0</tvExpOptDlg>
<bDave2>0</bDave2>
<PathWithFileName>.\FWLIB\source\ENS1_WAVEGEN.c</PathWithFileName>
<FilenameWithoutPath>ENS1_WAVEGEN.c</FilenameWithoutPath>
<RteFlg>0</RteFlg>
<bShared>0</bShared>
</File>
</Group> </Group>
<Group> <Group>
@ -399,7 +407,7 @@
<RteFlg>0</RteFlg> <RteFlg>0</RteFlg>
<File> <File>
<GroupNumber>5</GroupNumber> <GroupNumber>5</GroupNumber>
<FileNumber>8</FileNumber> <FileNumber>10</FileNumber>
<FileType>1</FileType> <FileType>1</FileType>
<tvExp>0</tvExp> <tvExp>0</tvExp>
<tvExpOptDlg>0</tvExpOptDlg> <tvExpOptDlg>0</tvExpOptDlg>
@ -411,7 +419,7 @@
</File> </File>
<File> <File>
<GroupNumber>5</GroupNumber> <GroupNumber>5</GroupNumber>
<FileNumber>9</FileNumber> <FileNumber>11</FileNumber>
<FileType>2</FileType> <FileType>2</FileType>
<tvExp>0</tvExp> <tvExp>0</tvExp>
<tvExpOptDlg>0</tvExpOptDlg> <tvExpOptDlg>0</tvExpOptDlg>

View File

@ -425,6 +425,16 @@
<FileType>1</FileType> <FileType>1</FileType>
<FilePath>.\FWLIB\source\ENS1_TIMER.c</FilePath> <FilePath>.\FWLIB\source\ENS1_TIMER.c</FilePath>
</File> </File>
<File>
<FileName>ENS1_BOOST.c</FileName>
<FileType>1</FileType>
<FilePath>.\FWLIB\source\ENS1_BOOST.c</FilePath>
</File>
<File>
<FileName>ENS1_WAVEGEN.c</FileName>
<FileType>1</FileType>
<FilePath>.\FWLIB\source\ENS1_WAVEGEN.c</FilePath>
</File>
</Files> </Files>
</Group> </Group>
<Group> <Group>

View File

@ -1,21 +1,37 @@
/*
*Copyright (C),2023 , NANOCHAP
*File name: ENS1_BOOST.H
*Author:
*Version: V1.0
*Date: 2023-11-
*Description:
*Function List:
1 void boost_voltage_select_11V(void);
2 void boost_voltage_select_15V(void);
3 void boost_voltage_select_26V(void);
4 void boost_voltage_select_45V(void);
5 void boost_voltage_select_55V(void);
History:
1.V1.0
Date:
Author:
Modification:
*/
#ifndef ENS1_BOOST_H #ifndef ENS1_BOOST_H
#define ENS1_BOOST_H #define ENS1_BOOST_H
#include "CMSDK_CM0.h"
#include "my_header.h" //32MHz频率下设置升压电压为11V
void boost_voltage_select_11V(void);
extern uint8_t Boost_Voltage_Sel(uint8_t VOLTAGE_XV); //32MHz频率下设置升压电压为15V
void boost_voltage_select_15V(void);
#define VOLTAGE_11V 0x0 //32MHz频率下设置升压电压为26V
#define VOLTAGE_15V 0x1 void boost_voltage_select_26V(void);
#define VOLTAGE_26V 0x2 //32MHz频率下设置升压电压为45V
#define VOLTAGE_45V 0x3 void boost_voltage_select_45V(void);
#define VOLTAGE_55V 0x4 //32MHz频率下设置升压电压为55V
void boost_voltage_select_55V(void);
#endif #endif

View File

@ -2,7 +2,27 @@
#define ENS1_TIMER_H #define ENS1_TIMER_H
#include "CMSDK_CM0.h" #include "CMSDK_CM0.h"
#include "my_header.h" #include "my_header.h"
typedef enum {TOTAL_TIME_MODE = 0 , TRIGGER_TIME_MODE=1}TIME_COUNT_MODE; //选择为总时间或有效运行时间
// 时间管理标志位结构体
typedef struct {
uint8_t T_2ms; // 2ms周期标志
uint8_t T_6ms; // 6ms周期标志
uint8_t T_10ms; // 10ms周期标志
uint8_t T_20ms; // 20ms周期标志
uint8_t T_100ms; // 100ms周期标志
uint8_t T_1s; // 1s周期标志
} Time_Flag_TypeDef;
// 时间管理计数器结构体
typedef struct {
uint8_t t_2ms; // 2ms计数器
uint8_t t_6ms; // 6ms计数器
uint8_t t_10ms; // 10ms计数器
uint8_t t_20ms; // 20ms计数器
uint8_t t_100ms; // 100ms计数器
uint16_t t_1s; // 1s计数器
} Time_Counter_TypeDef;
typedef enum {TOTAL_TIME_MODE = 0 , TRIGGER_TIME_MODE=1}TIME_COUNT_MODE; //ѡ<><D1A1>Ϊ<EFBFBD><CEAA>ʱ<EFBFBD><CAB1><EFBFBD><EFBFBD><EFBFBD>Ч<EFBFBD><D0A7><EFBFBD><EFBFBD>ʱ<EFBFBD><CAB1>
extern void TIMER0_Init(uint32_t Int_Period); extern void TIMER0_Init(uint32_t Int_Period);
extern void TIMER1_Init(uint32_t Int_Period); extern void TIMER1_Init(uint32_t Int_Period);
extern volatile uint32_t CHANNEL_TIME_COUNT[4]; extern volatile uint32_t CHANNEL_TIME_COUNT[4];
@ -39,5 +59,12 @@ extern void CMSDK_RTC_Init_Calender(uint16_t prescaler, uint8_t data_mode, uint8
extern void CMSDK_RTC_Config_Alarm(uint16_t prescaler, uint8_t data_mode, uint8_t hour_mode, uint32_t init_time, uint32_t init_date, uint32_t alarm_time, uint32_t alarm_date) ; extern void CMSDK_RTC_Config_Alarm(uint16_t prescaler, uint8_t data_mode, uint8_t hour_mode, uint32_t init_time, uint32_t init_date, uint32_t alarm_time, uint32_t alarm_date) ;
extern void CMSDK_RTC_Config_PeriodWake(uint8_t clock_sel, uint16_t prescaler, uint16_t period_time); extern void CMSDK_RTC_Config_PeriodWake(uint8_t clock_sel, uint16_t prescaler, uint16_t period_time);
// 时间管理函数声明
extern void Time_Manager_Init(void);
extern void Time_Manager_Process(void);
extern Time_Flag_TypeDef* Time_Manager_GetFlags(void);
extern void Time_Manager_ClearFlags(void);
extern void Time_Manager_Reset(void);
#endif #endif

View File

@ -0,0 +1,54 @@
/*
*Copyright (C),2023 , NANOCHAP
*File name: ENS1_WAVEGEN.H
*Author:
*Version: V1.0
*Date: 2023-11-
*Description:
*Function List:
1 int wavegen_driverA_sine_test(CMSDK_WAVE_GEN_TypeDef *CMSDK_WAVEGEN_DRVA, uint16_t incount);
2 void wavegen_Stop(CMSDK_WAVE_GEN_TypeDef *CMSDK_WAVEGEN_DRVA);
3 void wavegen_Init(void);
4 void wavegen_Start(void);
History:
1.V1.0
Date:
Author:
Modification:
*/
#ifndef ENS1_WAVEGEN_H
#define ENS1_WAVEGEN_H
#include "CMSDK_CM0.h"
#include "my_header.h"
// 波形生成器驱动器A正弦波测试
int wavegen_driverA_sine_test(CMSDK_WAVE_GEN_TypeDef *CMSDK_WAVEGEN_DRVA, uint16_t incount);
// 停止波形生成器
void wavegen_Stop(CMSDK_WAVE_GEN_TypeDef *CMSDK_WAVEGEN_DRVA);
// 初始化波形生成器
void wavegen_Init(void);
// 启动波形生成器
void wavegen_Start(void);
// 电刺激参数配置
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)
} EMS_Config_TypeDef;
// 电刺激控制函数
void EMS_Configure(EMS_Config_TypeDef *config);
void EMS_Start(void);
void EMS_Stop(void);
void EMS_UpdateIntensity(uint16_t intensity);
void EMS_Process(void);
#endif

View File

@ -1,38 +1,58 @@
/*
*Copyright (C),2023 , NANOCHAP
*File name: ENS1_BOOST.C
*Author:
*Version: V1.0
*Date: 2023-11-
*Description:
*Function List:
1 void boost_voltage_select_11V(void);
2 void boost_voltage_select_15V(void);
3 void boost_voltage_select_26V(void);
4 void boost_voltage_select_45V(void);
5 void boost_voltage_select_55V(void);
History:
1.V1.0
Date:
Author:
Modification:
*/
#include <stdio.h>
#include "ENS1_BOOST.h" #include "ENS1_BOOST.h"
#include "ENS1_CLOCK.h"
//占空比1-20%=80% ,256分频 ,10.5A ,11V , 关闭功率,电压,内部升压使用
void boost_voltage_select_11V(void)
/*--------------------ÄÚ˛żBOOST_SET-----------------------*/
uint8_t Boost_Voltage_Sel(uint8_t VOLTAGE_XV)
{ {
PCLK_Enable(ANALOG_PCLK_EN); CMSDK_ANAC->BOOST_CTRL =0x77013;//内部升压
switch (VOLTAGE_XV){ CMSDK_ANAC->PMU_CTRL = 0x10;
case VOLTAGE_11V : }
CMSDK_ANAC->BOOST_CTRL =0x71013;//ÄÚ˛żboost
//占空比1-20%=80% ,256分频 ,10.5A,15V 关闭功率,电压,内部升压使用
void boost_voltage_select_15V(void)
{
CMSDK_ANAC->BOOST_CTRL =0x77113;
CMSDK_ANAC->PMU_CTRL = 0x10;
}
//占空比1-20%=80% ,256分频 ,10.5A ,26V,关闭功率,电压,内部升压使用
void boost_voltage_select_26V(void)
{
//占空比64分频 10.5A 26V 关闭功率 内部升压
CMSDK_ANAC->BOOST_CTRL =0x77213;//内部升压
CMSDK_ANAC->PMU_CTRL = 0x10;
}
//占空比1-10%=90% ,16分频 ,10.5A ,45V,关闭功率,电压,内部升压使用
void boost_voltage_select_45V(void)
{
CMSDK_ANAC->BOOST_CTRL =0x97413;//内部升压
CMSDK_ANAC->PMU_CTRL = 0x10;
}
//占空比1-10%=90% ,16分频 ,10.5A ,55V,关闭功率,电压,内部升压使用
void boost_voltage_select_55V(void)
{
CMSDK_ANAC->BOOST_CTRL =0x97713;//内部升压
CMSDK_ANAC->PMU_CTRL = 0x10; CMSDK_ANAC->PMU_CTRL = 0x10;
break;
case VOLTAGE_15V :
CMSDK_ANAC->BOOST_CTRL =0x71113;//ÄÚ˛żboost
CMSDK_ANAC->PMU_CTRL = 0x10;
break;
case VOLTAGE_26V :
CMSDK_ANAC->BOOST_CTRL =0x71213;//ÄÚ˛żboost
CMSDK_ANAC->PMU_CTRL = 0x10;
break;
case VOLTAGE_45V :
CMSDK_ANAC->BOOST_CTRL =0xc1413;//
CMSDK_ANAC->PMU_CTRL = 0x10;
break;
case VOLTAGE_55V :
CMSDK_ANAC->BOOST_CTRL =0xc1713;//ÄÚ˛żboost
CMSDK_ANAC->PMU_CTRL = 0x10;
break;
default:
CMSDK_ANAC->BOOST_CTRL =0x71013;//ÄÚ˛żboost
CMSDK_ANAC->PMU_CTRL = 0x10;
break;
}
return 0;
} }

View File

@ -11,14 +11,14 @@ History:
1.V1.0 1.V1.0
Date: Date:
Author: Author:
Modification: Modification: <EFBFBD><EFBFBD><EFBFBD><EFBFBD>
*/ */
#include "ENS1_CLOCK.h" #include "ENS1_CLOCK.h"
uint32_t APB_Clock_Freq =0; uint32_t APB_Clock_Freq =0;
//设置后的时钟频率请查看时钟树计算 //<EFBFBD><EFBFBD><EFBFBD>ú<EFBFBD><EFBFBD>ʱ<EFBFBD><EFBFBD>Ƶ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>鿴ʱ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
Clock_ConfigStructure CLOCKCFG= Clock_ConfigStructure CLOCKCFG=
{ {
.MCO_SEL = MCO_HSI , .MCO_SEL = MCO_HSI ,
@ -34,8 +34,8 @@ Clock_ConfigStructure CLOCKCFG=
uint32_t ClockInitSet(Clock_ConfigStructure* CLOCKCONFIG) uint32_t ClockInitSet(Clock_ConfigStructure* CLOCKCONFIG)
{ {
uint32_t clockfreq = 0; uint32_t clockfreq = 0;
//配置系统各时钟初始化 //<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ϵͳ<EFBFBD><EFBFBD>ʱ<EFBFBD>ӳ<EFBFBD>ʼ<EFBFBD><EFBFBD>
//1 确定输入频率 //1 ȷ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ƶ<EFBFBD><EFBFBD>
CMSDK_SYSCON->CLK_CFG |= (CLOCKCONFIG->MCO_SEL<<16); CMSDK_SYSCON->CLK_CFG |= (CLOCKCONFIG->MCO_SEL<<16);
if(CLOCKCONFIG->MCO_SEL == MCO_HSI) if(CLOCKCONFIG->MCO_SEL == MCO_HSI)
{ {
@ -59,39 +59,40 @@ uint32_t ClockInitSet(Clock_ConfigStructure* CLOCKCONFIG)
CMSDK_SYSCON->HSI_CTRL |= (CLOCKCONFIG->HSI_FREQ << 4); CMSDK_SYSCON->HSI_CTRL |= (CLOCKCONFIG->HSI_FREQ << 4);
clockfreq = (uint8_t)pow(2,CLOCKCONFIG->HSI_FREQ+2); clockfreq = (uint8_t)pow(2,CLOCKCONFIG->HSI_FREQ+2);
} }
//2 选择系统的时钟源 //2 ѡ<EFBFBD><EFBFBD>ϵͳ<EFBFBD><EFBFBD>ʱ<EFBFBD><EFBFBD>Դ
CMSDK_SYSCON->CLK_CFG |= (CLOCKCONFIG->SYSCLK_SEL); CMSDK_SYSCON->CLK_CFG |= (CLOCKCONFIG->SYSCLK_SEL);
while((CMSDK_SYSCON->CLK_CFG >> 2 ) & 0x1); while((CMSDK_SYSCON->CLK_CFG >> 2 ) & 0x1);
//3 基于系统时钟源的频率设置分频系数 //3 <EFBFBD><EFBFBD><EFBFBD><EFBFBD>ϵͳʱ<EFBFBD><EFBFBD>Դ<EFBFBD><EFBFBD>Ƶ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>÷<EFBFBD>Ƶϵ<EFBFBD><EFBFBD>
CMSDK_SYSCON->CLK_CFG |= (CLOCKCONFIG->ENS1_AHB_PCLK_DIV_x << 8); CMSDK_SYSCON->CLK_CFG |= (CLOCKCONFIG->ENS1_AHB_PCLK_DIV_x << 8);
CMSDK_SYSCON->CLK_CFG |= (CLOCKCONFIG->ENS1_APB_PCLK_DIV_x << 12); CMSDK_SYSCON->CLK_CFG |= (CLOCKCONFIG->ENS1_APB_PCLK_DIV_x << 12);
if(CLOCKCONFIG->ENS1_AHB_PCLK_DIV_x > 0) if(CLOCKCONFIG->ENS1_AHB_PCLK_DIV_x > 0)
clockfreq = (uint32_t)(clockfreq / pow(2,CLOCKCONFIG->ENS1_AHB_PCLK_DIV_x-3)); clockfreq = (uint32_t)(clockfreq / pow(2,CLOCKCONFIG->ENS1_AHB_PCLK_DIV_x-3));
if(CLOCKCONFIG->ENS1_APB_PCLK_DIV_x > 0) if(CLOCKCONFIG->ENS1_APB_PCLK_DIV_x > 0)
clockfreq = (uint32_t)(clockfreq / pow(2,CLOCKCONFIG->ENS1_APB_PCLK_DIV_x-3)); clockfreq = (uint32_t)(clockfreq / pow(2,CLOCKCONFIG->ENS1_APB_PCLK_DIV_x-3));
return clockfreq; //返回时钟频率分频后的APB上的时钟频率 return clockfreq; //<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʱ<EFBFBD><EFBFBD>Ƶ<EFBFBD>ʣ<EFBFBD><EFBFBD><EFBFBD>Ƶ<EFBFBD><EFBFBD><EFBFBD>APB<EFBFBD>ϵ<EFBFBD>ʱ<EFBFBD><EFBFBD>Ƶ<EFBFBD>ʣ<EFBFBD>
} }
void ClockInit(void) void ClockInit(void)
{ {
APB_Clock_Freq = ClockInitSet(&CLOCKCFG); APB_Clock_Freq = ClockInitSet(&CLOCKCFG);
CMSDK_SYSCON->APB_CLKEN = 0; // 不清零APB时钟使能避免影响其他外设
// CMSDK_SYSCON->APB_CLKEN = 0;
} }
//PCLK时钟使能 //PCLKʱ<EFBFBD><EFBFBD>ʹ<EFBFBD><EFBFBD>
uint8_t PCLK_Enable(uint8_t APB_CLKEN_POS) uint8_t PCLK_Enable(uint8_t APB_CLKEN_POS)
{ {
CMSDK_SYSCON->APB_CLKEN |= (0x1 << APB_CLKEN_POS); CMSDK_SYSCON->APB_CLKEN |= (0x1 << APB_CLKEN_POS);
return 0; return 0;
} }
//PCLK时钟关闭 //PCLKʱ<EFBFBD>ӹر<EFBFBD>
uint8_t PCLK_Disable(uint8_t APB_CLKEN_POS) uint8_t PCLK_Disable(uint8_t APB_CLKEN_POS)
{ {
CMSDK_SYSCON->APB_CLKEN &=~ (0x1 << APB_CLKEN_POS); CMSDK_SYSCON->APB_CLKEN &=~ (0x1 << APB_CLKEN_POS);
return 0; return 0;
} }
//配置外部晶振,配置前请保留足够延时,否则无法二次烧录程序 //<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ⲿ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ǰ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʱ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>޷<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>¼<EFBFBD><EFBFBD><EFBFBD><EFBFBD>
void HSE_ClockInit(uint32_t Clock_Freq) void HSE_ClockInit(uint32_t Clock_Freq)
{ {
CMSDK_GPIO->IE = (CMSDK_GPIO->IE & ~(0x01ul << 0)) | (0x01 << 0); CMSDK_GPIO->IE = (CMSDK_GPIO->IE & ~(0x01ul << 0)) | (0x01 << 0);
@ -99,5 +100,5 @@ void HSE_ClockInit(uint32_t Clock_Freq)
CMSDK_SYSCON->CLK_CFG = (CMSDK_SYSCON->CLK_CFG & ~CMSDK_SYSCON_SYSCLK_SEL_Msk) | (0x1 << CMSDK_SYSCON_SYSCLK_SEL_Pos); CMSDK_SYSCON->CLK_CFG = (CMSDK_SYSCON->CLK_CFG & ~CMSDK_SYSCON_SYSCLK_SEL_Msk) | (0x1 << CMSDK_SYSCON_SYSCLK_SEL_Pos);
while (((CMSDK_SYSCON->CLK_CFG & CMSDK_SYSCON_SYSCLK_SWSTS_Msk) >> CMSDK_SYSCON_SYSCLK_SWSTS_Pos) != 0x01) { } while (((CMSDK_SYSCON->CLK_CFG & CMSDK_SYSCON_SYSCLK_SWSTS_Msk) >> CMSDK_SYSCON_SYSCLK_SWSTS_Pos) != 0x01) { }
CMSDK_SYSCON->HSI_CTRL = (CMSDK_SYSCON->HSI_CTRL & ~CMSDK_SYSCON_HSI_EN_Msk); CMSDK_SYSCON->HSI_CTRL = (CMSDK_SYSCON->HSI_CTRL & ~CMSDK_SYSCON_HSI_EN_Msk);
APB_Clock_Freq = Clock_Freq;//外部时钟频率 APB_Clock_Freq = Clock_Freq;//<EFBFBD>ⲿʱ<EFBFBD><EFBFBD>Ƶ<EFBFBD><EFBFBD>
} }

View File

@ -2,13 +2,19 @@
#include "ENS_CURRENT_CALIBRATION.h" #include "ENS_CURRENT_CALIBRATION.h"
#include "ENS1_CLOCK.h" #include "ENS1_CLOCK.h"
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);
NVIC_DisableIRQ(TIMER0_IRQn); NVIC_DisableIRQ(TIMER0_IRQn);
NVIC_ClearPendingIRQ(TIMER0_IRQn); NVIC_ClearPendingIRQ(TIMER0_IRQn);
CMSDK_timer_Init(CMSDK_TIMER0,(uint32_t)(APB_Clock_Freq / 1000 *Int_Period) , 1); //
uint32_t reload_value = (uint32_t)(APB_Clock_Freq / 1000 * Int_Period);
printf("TIMER0重装载值: %d\n", reload_value);
CMSDK_timer_Init(CMSDK_TIMER0, reload_value, 1); //
NVIC_EnableIRQ(TIMER0_IRQn); NVIC_EnableIRQ(TIMER0_IRQn);
printf("TIMER0_Init完成中断周期: %d ms\n", Int_Period);
} }
void TIMER1_Init(uint32_t Int_Period) void TIMER1_Init(uint32_t Int_Period)
@ -22,49 +28,49 @@ void TIMER1_Init(uint32_t Int_Period)
/*使能定时器中断*/ /*使能定时器中断*/
void CMSDK_timer_EnableIRQ(CMSDK_TIMER_TypeDef *CMSDK_TIMER) void CMSDK_timer_EnableIRQ(CMSDK_TIMER_TypeDef *CMSDK_TIMER)
{ {
CMSDK_TIMER->CTRL |= CMSDK_TIMER_CTRL_IRQEN_Msk; CMSDK_TIMER->CTRL |= CMSDK_TIMER_CTRL_IRQEN_Msk;
} }
/*关闭定时器中断*/ /*禁止定时器中断*/
void CMSDK_timer_DisableIRQ(CMSDK_TIMER_TypeDef *CMSDK_TIMER) void CMSDK_timer_DisableIRQ(CMSDK_TIMER_TypeDef *CMSDK_TIMER)
{ {
CMSDK_TIMER->CTRL &= ~CMSDK_TIMER_CTRL_IRQEN_Msk; CMSDK_TIMER->CTRL &= ~CMSDK_TIMER_CTRL_IRQEN_Msk;
} }
/*定时器启动*/ /*启动定时器*/
void CMSDK_timer_StartTimer(CMSDK_TIMER_TypeDef *CMSDK_TIMER) void CMSDK_timer_StartTimer(CMSDK_TIMER_TypeDef *CMSDK_TIMER)
{ {
CMSDK_TIMER->CTRL |= CMSDK_TIMER_CTRL_EN_Msk; CMSDK_TIMER->CTRL |= CMSDK_TIMER_CTRL_EN_Msk;
} }
/*定时器关闭*/ /*停止定时器*/
void CMSDK_timer_StopTimer(CMSDK_TIMER_TypeDef *CMSDK_TIMER) void CMSDK_timer_StopTimer(CMSDK_TIMER_TypeDef *CMSDK_TIMER)
{ {
CMSDK_TIMER->CTRL &= ~CMSDK_TIMER_CTRL_EN_Msk; CMSDK_TIMER->CTRL &= ~CMSDK_TIMER_CTRL_EN_Msk;
} }
/*获取定时器Value*/ /*获取定时器当前值*/
uint32_t CMSDK_timer_GetValue(CMSDK_TIMER_TypeDef *CMSDK_TIMER) uint32_t CMSDK_timer_GetValue(CMSDK_TIMER_TypeDef *CMSDK_TIMER)
{ {
return CMSDK_TIMER->VALUE; return CMSDK_TIMER->VALUE;
} }
/*设置定时器值*/ /*设置定时器当前值*/
void CMSDK_timer_SetValue(CMSDK_TIMER_TypeDef *CMSDK_TIMER, uint32_t value) void CMSDK_timer_SetValue(CMSDK_TIMER_TypeDef *CMSDK_TIMER, uint32_t value)
{ {
CMSDK_TIMER->VALUE = value; CMSDK_TIMER->VALUE = value;
} }
/*获取重载值*/ /*获取定时器载值*/
uint32_t CMSDK_timer_GetReload(CMSDK_TIMER_TypeDef *CMSDK_TIMER) uint32_t CMSDK_timer_GetReload(CMSDK_TIMER_TypeDef *CMSDK_TIMER)
{ {
return CMSDK_TIMER->RELOAD; return CMSDK_TIMER->RELOAD;
} }
/*设置重载值*/ /*设置定时器载值*/
void CMSDK_timer_SetReload(CMSDK_TIMER_TypeDef *CMSDK_TIMER, uint32_t value) void CMSDK_timer_SetReload(CMSDK_TIMER_TypeDef *CMSDK_TIMER, uint32_t value)
{ {
CMSDK_TIMER->RELOAD = value; CMSDK_TIMER->RELOAD = value;
@ -76,13 +82,13 @@ void TIMER1_Init(uint32_t Int_Period)
CMSDK_TIMER->INTCLEAR = CMSDK_TIMER_INTCLEAR_Msk; CMSDK_TIMER->INTCLEAR = CMSDK_TIMER_INTCLEAR_Msk;
} }
/*返回定时器状态*/ /*获取定时器中断状态*/
uint32_t CMSDK_timer_StatusIRQ(CMSDK_TIMER_TypeDef *CMSDK_TIMER) uint32_t CMSDK_timer_StatusIRQ(CMSDK_TIMER_TypeDef *CMSDK_TIMER)
{ {
return CMSDK_TIMER->INTSTATUS; return CMSDK_TIMER->INTSTATUS;
} }
/*初始化定时器*/ /*初始化定时器*/
void CMSDK_timer_Init(CMSDK_TIMER_TypeDef *CMSDK_TIMER, uint32_t reload, uint8_t irq_en) void CMSDK_timer_Init(CMSDK_TIMER_TypeDef *CMSDK_TIMER, uint32_t reload, uint8_t irq_en)
{ {
uint32_t new_ctrl = 0; uint32_t new_ctrl = 0;
@ -375,6 +381,102 @@ void CMSDK_timer_Init_ExtEnable(CMSDK_TIMER_TypeDef *CMSDK_TIMER, uint32_t reloa
// --------------------------------------------------------------- //
// 时间管理全局变量
// --------------------------------------------------------------- //
static Time_Flag_TypeDef g_time_flags = {0};
static Time_Counter_TypeDef g_time_counters = {0};
// --------------------------------------------------------------- //
// 时间管理函数实现
// --------------------------------------------------------------- //
/**
* @brief
*/
void Time_Manager_Init(void)
{
// 清零所有标志位和计数器
memset(&g_time_flags, 0, sizeof(Time_Flag_TypeDef));
memset(&g_time_counters, 0, sizeof(Time_Counter_TypeDef));
}
/**
* @brief
* 1ms定时器中断
*/
void Time_Manager_Process(void)
{
// 所有计数器递增
g_time_counters.t_2ms++;
g_time_counters.t_6ms++;
g_time_counters.t_10ms++;
g_time_counters.t_20ms++;
g_time_counters.t_100ms++;
g_time_counters.t_1s++;
// 2ms控制周期
if (g_time_counters.t_2ms >= 2) {
g_time_counters.t_2ms = 0;
g_time_flags.T_2ms = 1;
}
// 6ms控制周期
if (g_time_counters.t_6ms >= 6) {
g_time_counters.t_6ms = 0;
g_time_flags.T_6ms = 1;
}
// 10ms控制周期
if (g_time_counters.t_10ms >= 10) {
g_time_counters.t_10ms = 0;
g_time_flags.T_10ms = 1;
}
// 20ms控制周期
if (g_time_counters.t_20ms >= 20) {
g_time_counters.t_20ms = 0;
g_time_flags.T_20ms = 1;
}
// 100ms控制周期
if (g_time_counters.t_100ms >= 100) {
g_time_counters.t_100ms = 0;
g_time_flags.T_100ms = 1;
}
// 1s控制周期
if (g_time_counters.t_1s >= 1000) {
g_time_counters.t_1s = 0;
g_time_flags.T_1s = 1;
}
}
/**
* @brief
* @return
*/
Time_Flag_TypeDef* Time_Manager_GetFlags(void)
{
return &g_time_flags;
}
/**
* @brief
*/
void Time_Manager_ClearFlags(void)
{
memset(&g_time_flags, 0, sizeof(Time_Flag_TypeDef));
}
/**
* @brief
*/
void Time_Manager_Reset(void)
{
Time_Manager_Init();
}
// --------------------------------------------------------------- // // --------------------------------------------------------------- //
// TIMER0_IRQ // TIMER0_IRQ
// --------------------------------------------------------------- // // --------------------------------------------------------------- //
@ -383,13 +485,12 @@ uint32_t time_flag =0;
void TIMER0_Handler(void){ void TIMER0_Handler(void){
CMSDK_TIMER0->INTCLEAR = 1; CMSDK_TIMER0->INTCLEAR = 1;
timer0_irq_occurred++; timer0_irq_occurred++;
if(timer0_irq_occurred % 1000 == 0)
{
GPIO_Overturn(GPIO_19);
time_flag++;
printf("%d s\n",time_flag);
}
// 调用时间管理处理函数
Time_Manager_Process();
// 注意GPIO翻转现在通过时间管理系统在主循环中处理
// 这里不再直接翻转GPIO避免重复操作
} }
// --------------------------------------------------------------- // // --------------------------------------------------------------- //

191
FWLIB/source/ENS1_WAVEGEN.c Normal file
View File

@ -0,0 +1,191 @@
/*
*Copyright (C),2023 , NANOCHAP
*File name: ENS1_WAVEGEN.C
*Author:
*Version: V1.0
*Date: 2023-11-
*Description:
*Function List:
1 int wavegen_driverA_sine_test(CMSDK_WAVE_GEN_TypeDef *CMSDK_WAVEGEN_DRVA, uint16_t incount);
2 void wavegen_Stop(CMSDK_WAVE_GEN_TypeDef *CMSDK_WAVEGEN_DRVA);
3 void wavegen_Init(void);
4 void wavegen_Start(void);
History:
1.V1.0
Date:
Author:
Modification:
*/
#include <stdio.h>
#include "ENS1_WAVEGEN.h"
#include "ENS1_CLOCK.h"
#include "ENS1_BOOST.h"
// 全局变量
static EMS_Config_TypeDef g_ems_config = {0};
static volatile uint8_t g_ems_running = 0;
static volatile uint32_t g_ems_count = 0;
/* --------------------------------------------------------------- */
/* 波形生成器驱动器A正弦波测试 */
/* --------------------------------------------------------------- */
int wavegen_driverA_sine_test(CMSDK_WAVE_GEN_TypeDef *CMSDK_WAVEGEN_DRVA, uint16_t incount)
{
int return_val = 0;
int err_code = 0;
puts("\n驱动器A正弦波测试\n");
CMSDK_WAVEGEN_DRVA->WAVE_GEN_DRV_REST_T_REG = 100; //死区时间10ms //交替模式下死区时间失效即使CONFIG_REG使能了死区时间也无效
//CMSDK_WAVEGEN_DRVA->WAVE_GEN_DRV_SILENT_T_REG = 200; //静默时间20ms
CMSDK_WAVEGEN_DRVA->WAVE_GEN_DRV_CLK_FREQ_REG = 0x00000020; //32MHz ==PCLK
CMSDK_WAVEGEN_DRVA->WAVE_GEN_DRV_CLK_FREQ_REG = 32; //32MHz ==PCLK //MHz为单位
CMSDK_WAVEGEN_DRVA->WAVE_GEN_DRV_HLF_WAVE_PRD_REG = 100; //正半周期脉宽10ms有交替方波
CMSDK_WAVEGEN_DRVA->WAVE_GEN_DRV_NEG_HLF_WAVE_PRD_REG = 100; //负半周期脉宽10ms无交替方波
#if 1//无需静默时间
CMSDK_WAVEGEN_DRVA->WAVE_GEN_DRV_CONFIG_REG = 0x00000050; //bit 0:rest enable 正半周期和负半周期中间的休息时间
//1:negative enable 负半周期发生使能,如果不使能,则没有负半周期的波形(注意交替模式只会对正半周期起作用)
//2: silent enable 负半周期结束后的静默时间
//3: source B enable 负脉宽方向使能位1负脉宽在负半周期0负脉宽在正半周期
//4: alternating the positive side ,正极交替产生包络
//5: continue mode ,连续模式
//6: multi-electrode ,多电极模式
#else //需要静默时间
/*交替模式下config寄存器说明
0x50 0x51 0x58 0x59
0x54 0x55 0x5C 0x5D
0x5A 0x5B
B失能了 0x52 0x53
B失能了 0x56 0x57
0x5E 0x5F
*/
// CMSDK_WAVEGEN_DRVA->WAVE_GEN_DRV_CONFIG_REG = 0x5F; //bit 0:rest enable 正半周期和负半周期中间的死区时间
//1:negative enable 负半周期发生使能,如果不使能,则没有负半周期的波形
//2: silent enable 负半周期结束后的静默时间
//3: source B enable
//4: alternating the positive side ,正极交替产生包络
//5: continue mode ,连续模式
CMSDK_WAVEGEN_DRVA->WAVE_GEN_DRV_CONFIG_REG = 0x34; //静默时间、交替模式和多电极使能 //6: multi-electrode ,多电极模式
#endif
CMSDK_WAVEGEN_DRVA ->WAVE_GEN_DRV_ISEL_REG = 0x04; // 总电流 = 单元电流ISEL * WAVE_GEN_DRV_IN_WAVE_REG
for(int i=0; i<64; i++){
CMSDK_WAVEGEN_DRVA->WAVE_GEN_DRV_IN_WAVE_ADDR_REG = i;
//CMSDK_WAVEGEN_DRVA->WAVE_GEN_DRV_IN_WAVE_REG = sine_data[i]; //正弦波数据数组,根据数组中的点描绘正半周期的波形
// CMSDK_WAVEGEN_DRVA->WAVE_GEN_DRV_IN_WAVE_REG = saw_data[i]; //三角波数据
CMSDK_WAVEGEN_DRVA->WAVE_GEN_DRV_IN_WAVE_REG = incount; //方波数据固定值0x80
}
CMSDK_WAVEGEN_DRVA->WAVE_GEN_DRV_ALT_LIM_REG = 3200;// 3200 需要设置一个正半周期下需要再生成多少个周期波形。设置10kHz=0.1ms=100us100us=A*(1/32us),所以A=3200。
CMSDK_WAVEGEN_DRVA->WAVE_GEN_DRV_ALT_SILENT_LIM_REG = 0; // 交替后静默的时钟数无死区时间设置。在这种情况下驱动器B连续交替。//包络下波形的静默时间
CMSDK_WAVEGEN_DRVA->WAVE_GEN_DRV_DELAY_LIM_REG = 0x00000000; // 延迟时钟数
CMSDK_WAVEGEN_DRVA->WAVE_GEN_DRV_NEG_SCALE_REG = 0x00000001; //负半周期幅值倍乘系数如超过255则从0开始增长
CMSDK_WAVEGEN_DRVA->WAVE_GEN_DRV_NEG_OFFSET_REG = 0x00000000; //负半周期幅值偏移量如超过255则从0开始增长
//如正半周期幅值为250此处设置为10则负半周期幅值为5
CMSDK_WAVEGEN_DRVA->WAVE_GEN_DRV_INT_REG = 0x0;// 中断寄存器设置为0
CMSDK_WAVEGEN_DRVA->WAVE_GEN_DRV_CTRL_REG = 0x00000001; //使能驱动器
/* 生成返回值 */
if (err_code != 0) {
puts("\n错误 : 驱动器A测试失败\n");
return_val = 1;
err_code = 0;
}
return(return_val);
}
void wavegen_Stop(CMSDK_WAVE_GEN_TypeDef *CMSDK_WAVEGEN_DRVA)
{
CMSDK_WAVEGEN_DRVA ->WAVE_GEN_DRV_ISEL_REG = 0; //范围 0x00 - 0x07
for(int i=0; i<64; i++){
CMSDK_WAVEGEN_DRVA->WAVE_GEN_DRV_IN_WAVE_ADDR_REG = i;
CMSDK_WAVEGEN_DRVA->WAVE_GEN_DRV_IN_WAVE_REG = 0; //最大值0xff
}
}
// 初始化波形生成器
void wavegen_Init(void)
{
// 设置MTP等待周期
CMSDK_MTPREG->MTP_CR = 0x00000002;
// 注意时钟配置已在ClockInit()中完成,这里不再重复配置
// 使用HSI作为主频 32MHz
// CMSDK_SYSCON->HSI_CTRL = (CMSDK_SYSCON->HSI_CTRL & ~CMSDK_SYSCON_HSI_FREQ_Msk) | (0x3 << CMSDK_SYSCON_HSI_FREQ_Pos); //HSI=32MHz
// 使能UART和WAVE_GEN外设时钟不覆盖TIMER0时钟
CMSDK_SYSCON->APB_CLKEN |= 0x1003|0x4000; // 使用|=而不是=,避免覆盖其他时钟使能
// 升压电压选择
boost_voltage_select_26V();
puts("ENS1 - WAVE_GENERATOR_DRIVER_A_Test - $Revision: R001\n");
}
// 启动波形生成器
void wavegen_Start(void)
{
g_ems_running = 1;
g_ems_count = 0;
}
// 电刺激参数配置
void EMS_Configure(EMS_Config_TypeDef *config)
{
if(config != NULL) {
g_ems_config = *config;
}
}
// 启动电刺激
void EMS_Start(void)
{
wavegen_Start();
printf("电刺激已启动\n");
}
// 停止电刺激
void EMS_Stop(void)
{
g_ems_running = 0;
g_ems_count = 0; // 重置计数器
wavegen_Stop(WAVE_GEN_DRVA_BLK0);
printf("电刺激已停止\n");
}
// 更新电刺激强度
void EMS_UpdateIntensity(uint16_t intensity)
{
g_ems_config.intensity = intensity;
}
// 电刺激主循环处理函数(在主循环中调用)
void EMS_Process(void)
{
if(g_ems_running) {
g_ems_count++;
// 根据配置生成不同强度的方波
if(g_ems_count < 1280) {
wavegen_driverA_sine_test(WAVE_GEN_DRVA_BLK0, g_ems_config.intensity);
} else if(g_ems_count < 1280*256) {
// 休息时间
} else if(g_ems_count < 1280*2) {
wavegen_driverA_sine_test(WAVE_GEN_DRVA_BLK0, g_ems_config.intensity);
} else {
// 重置计数器,开始新的周期
g_ems_count = 0;
}
}
}

File diff suppressed because it is too large Load Diff

View File

@ -11,7 +11,17 @@ Section Cross References
mian.o(i.main) refers to ens1_uart.o(i.UART_Init) for UART_Init mian.o(i.main) refers to ens1_uart.o(i.UART_Init) for UART_Init
mian.o(i.main) refers to ens1_uart.o(i.UART_ITConfig) for UART_ITConfig mian.o(i.main) refers to ens1_uart.o(i.UART_ITConfig) for UART_ITConfig
mian.o(i.main) refers to ens1_timer.o(i.TIMER0_Init) for TIMER0_Init mian.o(i.main) refers to ens1_timer.o(i.TIMER0_Init) for TIMER0_Init
mian.o(i.main) refers to ens1_timer.o(i.Time_Manager_Init) for Time_Manager_Init
mian.o(i.main) refers to ens1_wavegen.o(i.wavegen_Init) for wavegen_Init
mian.o(i.main) refers to ens1_wavegen.o(i.EMS_Configure) for EMS_Configure
mian.o(i.main) refers to ens1_wavegen.o(i.EMS_Start) for EMS_Start
mian.o(i.main) refers to ens1_timer.o(i.Time_Manager_GetFlags) for Time_Manager_GetFlags
mian.o(i.main) refers to ens1_wavegen.o(i.EMS_Process) for EMS_Process
mian.o(i.main) refers to ens1_wavegen.o(i.EMS_Stop) for EMS_Stop
mian.o(i.main) refers to ens1_gpio.o(i.GPIO_Overturn) for GPIO_Overturn
mian.o(i.main) refers to ens1_uart.o(.data) for UART1_Init mian.o(i.main) refers to ens1_uart.o(.data) for UART1_Init
mian.o(i.main) refers to mian.o(.constdata) for .constdata
mian.o(i.main) refers to mian.o(.data) for ems_control_count
ens1_uart.o(i.UART0_Handler) refers to ens1_uart.o(i.NVIC_ClearPendingIRQ) for NVIC_ClearPendingIRQ ens1_uart.o(i.UART0_Handler) refers to ens1_uart.o(i.NVIC_ClearPendingIRQ) for NVIC_ClearPendingIRQ
ens1_uart.o(i.UART0_Handler) refers to ens1_uart.o(i.UART_INT_TYPE) for UART_INT_TYPE ens1_uart.o(i.UART0_Handler) refers to ens1_uart.o(i.UART_INT_TYPE) for UART_INT_TYPE
ens1_uart.o(i.UART0_Handler) refers to ens1_uart.o(i.UartPutc) for UartPutc ens1_uart.o(i.UART0_Handler) refers to ens1_uart.o(i.UartPutc) for UartPutc
@ -50,14 +60,13 @@ Section Cross References
ens1_timer.o(i.CMSDK_dualtimer_setup_freerunning) refers to ens1_timer.o(i.CMSDK_dualtimer_irq_clear) for CMSDK_dualtimer_irq_clear ens1_timer.o(i.CMSDK_dualtimer_setup_freerunning) refers to ens1_timer.o(i.CMSDK_dualtimer_irq_clear) for CMSDK_dualtimer_irq_clear
ens1_timer.o(i.CMSDK_dualtimer_setup_oneshot) refers to ens1_timer.o(i.CMSDK_dualtimer_irq_clear) for CMSDK_dualtimer_irq_clear ens1_timer.o(i.CMSDK_dualtimer_setup_oneshot) refers to ens1_timer.o(i.CMSDK_dualtimer_irq_clear) for CMSDK_dualtimer_irq_clear
ens1_timer.o(i.CMSDK_dualtimer_setup_periodic) refers to ens1_timer.o(i.CMSDK_dualtimer_irq_clear) for CMSDK_dualtimer_irq_clear ens1_timer.o(i.CMSDK_dualtimer_setup_periodic) refers to ens1_timer.o(i.CMSDK_dualtimer_irq_clear) for CMSDK_dualtimer_irq_clear
ens1_timer.o(i.TIMER0_Handler) refers to uidiv.o(.text) for __aeabi_uidivmod ens1_timer.o(i.TIMER0_Handler) refers to ens1_timer.o(i.Time_Manager_Process) for Time_Manager_Process
ens1_timer.o(i.TIMER0_Handler) refers to ens1_gpio.o(i.GPIO_Overturn) for GPIO_Overturn
ens1_timer.o(i.TIMER0_Handler) refers to printf1.o(i.__0printf$1) for __2printf
ens1_timer.o(i.TIMER0_Handler) refers to ens1_timer.o(.data) for timer0_irq_occurred ens1_timer.o(i.TIMER0_Handler) refers to ens1_timer.o(.data) for timer0_irq_occurred
ens1_timer.o(i.TIMER0_Init) refers to ens1_clock.o(i.PCLK_Enable) for PCLK_Enable ens1_timer.o(i.TIMER0_Init) refers to ens1_clock.o(i.PCLK_Enable) for PCLK_Enable
ens1_timer.o(i.TIMER0_Init) refers to ens1_timer.o(i.NVIC_DisableIRQ) for NVIC_DisableIRQ ens1_timer.o(i.TIMER0_Init) refers to ens1_timer.o(i.NVIC_DisableIRQ) for NVIC_DisableIRQ
ens1_timer.o(i.TIMER0_Init) refers to ens1_timer.o(i.NVIC_ClearPendingIRQ) for NVIC_ClearPendingIRQ ens1_timer.o(i.TIMER0_Init) refers to ens1_timer.o(i.NVIC_ClearPendingIRQ) for NVIC_ClearPendingIRQ
ens1_timer.o(i.TIMER0_Init) refers to uidiv.o(.text) for __aeabi_uidivmod ens1_timer.o(i.TIMER0_Init) refers to uidiv.o(.text) for __aeabi_uidivmod
ens1_timer.o(i.TIMER0_Init) refers to printf1.o(i.__0printf$1) for __2printf
ens1_timer.o(i.TIMER0_Init) refers to ens1_timer.o(i.CMSDK_timer_Init) for CMSDK_timer_Init ens1_timer.o(i.TIMER0_Init) refers to ens1_timer.o(i.CMSDK_timer_Init) for CMSDK_timer_Init
ens1_timer.o(i.TIMER0_Init) refers to ens1_timer.o(i.NVIC_EnableIRQ) for NVIC_EnableIRQ ens1_timer.o(i.TIMER0_Init) refers to ens1_timer.o(i.NVIC_EnableIRQ) for NVIC_EnableIRQ
ens1_timer.o(i.TIMER0_Init) refers to ens1_clock.o(.data) for APB_Clock_Freq ens1_timer.o(i.TIMER0_Init) refers to ens1_clock.o(.data) for APB_Clock_Freq
@ -69,6 +78,28 @@ Section Cross References
ens1_timer.o(i.TIMER1_Init) refers to ens1_timer.o(i.CMSDK_timer_Init) for CMSDK_timer_Init ens1_timer.o(i.TIMER1_Init) refers to ens1_timer.o(i.CMSDK_timer_Init) for CMSDK_timer_Init
ens1_timer.o(i.TIMER1_Init) refers to ens1_timer.o(i.NVIC_EnableIRQ) for NVIC_EnableIRQ ens1_timer.o(i.TIMER1_Init) refers to ens1_timer.o(i.NVIC_EnableIRQ) for NVIC_EnableIRQ
ens1_timer.o(i.TIMER1_Init) refers to ens1_clock.o(.data) for APB_Clock_Freq ens1_timer.o(i.TIMER1_Init) refers to ens1_clock.o(.data) for APB_Clock_Freq
ens1_timer.o(i.Time_Manager_ClearFlags) refers to memseta.o(.text) for __aeabi_memclr4
ens1_timer.o(i.Time_Manager_ClearFlags) refers to ens1_timer.o(.data) for g_time_flags
ens1_timer.o(i.Time_Manager_GetFlags) refers to ens1_timer.o(.data) for g_time_flags
ens1_timer.o(i.Time_Manager_Init) refers to memseta.o(.text) for __aeabi_memclr4
ens1_timer.o(i.Time_Manager_Init) refers to ens1_timer.o(.data) for g_time_flags
ens1_timer.o(i.Time_Manager_Process) refers to ens1_timer.o(.data) for g_time_counters
ens1_timer.o(i.Time_Manager_Reset) refers to ens1_timer.o(i.Time_Manager_Init) for Time_Manager_Init
ens1_wavegen.o(i.EMS_Configure) refers to memcpya.o(.text) for __aeabi_memcpy
ens1_wavegen.o(i.EMS_Configure) refers to ens1_wavegen.o(.bss) for g_ems_config
ens1_wavegen.o(i.EMS_Process) refers to ens1_wavegen.o(i.wavegen_driverA_sine_test) for wavegen_driverA_sine_test
ens1_wavegen.o(i.EMS_Process) refers to ens1_wavegen.o(.data) for g_ems_running
ens1_wavegen.o(i.EMS_Process) refers to ens1_wavegen.o(.bss) for g_ems_config
ens1_wavegen.o(i.EMS_Start) refers to ens1_wavegen.o(i.wavegen_Start) for wavegen_Start
ens1_wavegen.o(i.EMS_Start) refers to printf1.o(i.__0printf$1) for __2printf
ens1_wavegen.o(i.EMS_Stop) refers to ens1_wavegen.o(i.wavegen_Stop) for wavegen_Stop
ens1_wavegen.o(i.EMS_Stop) refers to printf1.o(i.__0printf$1) for __2printf
ens1_wavegen.o(i.EMS_Stop) refers to ens1_wavegen.o(.data) for g_ems_running
ens1_wavegen.o(i.EMS_UpdateIntensity) refers to ens1_wavegen.o(.bss) for g_ems_config
ens1_wavegen.o(i.wavegen_Init) refers to ens1_boost.o(i.boost_voltage_select_26V) for boost_voltage_select_26V
ens1_wavegen.o(i.wavegen_Init) refers to puts.o(i.puts) for puts
ens1_wavegen.o(i.wavegen_Start) refers to ens1_wavegen.o(.data) for g_ems_running
ens1_wavegen.o(i.wavegen_driverA_sine_test) refers to puts.o(i.puts) for puts
system_cmsdk_cm0.o(i.SystemCoreClockUpdate) refers to system_cmsdk_cm0.o(.data) for SystemCoreClock system_cmsdk_cm0.o(i.SystemCoreClockUpdate) refers to system_cmsdk_cm0.o(.data) for SystemCoreClock
system_cmsdk_cm0.o(i.SystemInit) refers to system_cmsdk_cm0.o(.data) for SystemCoreClock system_cmsdk_cm0.o(i.SystemInit) refers to system_cmsdk_cm0.o(.data) for SystemCoreClock
startup_cmsdk_cm0.o(RESET) refers to startup_cmsdk_cm0.o(STACK) for __initial_sp startup_cmsdk_cm0.o(RESET) refers to startup_cmsdk_cm0.o(STACK) for __initial_sp
@ -123,6 +154,10 @@ Section Cross References
entry.o(.ARM.Collect$$$$00000000) refers (Special) to entry9a.o(.ARM.Collect$$$$0000000B) for _main_init entry.o(.ARM.Collect$$$$00000000) refers (Special) to entry9a.o(.ARM.Collect$$$$0000000B) for _main_init
entry.o(.ARM.Collect$$$$00000000) refers (Special) to entry5.o(.ARM.Collect$$$$00000004) for _main_scatterload entry.o(.ARM.Collect$$$$00000000) refers (Special) to entry5.o(.ARM.Collect$$$$00000004) for _main_scatterload
entry.o(.ARM.Collect$$$$00000000) refers (Special) to entry2.o(.ARM.Collect$$$$00000001) for _main_stk entry.o(.ARM.Collect$$$$00000000) refers (Special) to entry2.o(.ARM.Collect$$$$00000001) for _main_stk
puts.o(i.puts) refers to retarget.o(i.fputc) for fputc
puts.o(i.puts) refers to retarget.o(.data) for __stdout
puts_e.o(.text) refers to retarget.o(i.fputc) for fputc
puts_e.o(.text) refers to retarget.o(.data) for __stdout
printfb.o(i.__0fprintf$bare) refers to printfb.o(i._printf_core) for _printf_core printfb.o(i.__0fprintf$bare) refers to printfb.o(i._printf_core) for _printf_core
printfb.o(i.__0fprintf$bare) refers to retarget.o(i.fputc) for fputc printfb.o(i.__0fprintf$bare) refers to retarget.o(i.fputc) for fputc
printfb.o(i.__0printf$bare) refers to printfb.o(i._printf_core) for _printf_core printfb.o(i.__0printf$bare) refers to printfb.o(i._printf_core) for _printf_core
@ -519,6 +554,17 @@ Removing Unused input sections from the image.
Removing ens1_timer.o(i.CMSDK_timer_StatusIRQ), (6 bytes). Removing ens1_timer.o(i.CMSDK_timer_StatusIRQ), (6 bytes).
Removing ens1_timer.o(i.CMSDK_timer_StopTimer), (10 bytes). Removing ens1_timer.o(i.CMSDK_timer_StopTimer), (10 bytes).
Removing ens1_timer.o(i.TIMER1_Init), (64 bytes). Removing ens1_timer.o(i.TIMER1_Init), (64 bytes).
Removing ens1_timer.o(i.Time_Manager_ClearFlags), (16 bytes).
Removing ens1_timer.o(i.Time_Manager_Reset), (8 bytes).
Removing ens1_boost.o(.rev16_text), (4 bytes).
Removing ens1_boost.o(.revsh_text), (4 bytes).
Removing ens1_boost.o(i.boost_voltage_select_11V), (20 bytes).
Removing ens1_boost.o(i.boost_voltage_select_15V), (20 bytes).
Removing ens1_boost.o(i.boost_voltage_select_45V), (20 bytes).
Removing ens1_boost.o(i.boost_voltage_select_55V), (20 bytes).
Removing ens1_wavegen.o(.rev16_text), (4 bytes).
Removing ens1_wavegen.o(.revsh_text), (4 bytes).
Removing ens1_wavegen.o(i.EMS_UpdateIntensity), (12 bytes).
Removing system_cmsdk_cm0.o(.rev16_text), (4 bytes). Removing system_cmsdk_cm0.o(.rev16_text), (4 bytes).
Removing system_cmsdk_cm0.o(.revsh_text), (4 bytes). Removing system_cmsdk_cm0.o(.revsh_text), (4 bytes).
Removing system_cmsdk_cm0.o(i.SystemCoreClockUpdate), (16 bytes). Removing system_cmsdk_cm0.o(i.SystemCoreClockUpdate), (16 bytes).
@ -526,7 +572,7 @@ Removing Unused input sections from the image.
Removing dfixul.o(.text), (64 bytes). Removing dfixul.o(.text), (64 bytes).
Removing cdcmple.o(.text), (40 bytes). Removing cdcmple.o(.text), (40 bytes).
70 unused section(s) (total 1896 bytes) removed from the image. 81 unused section(s) (total 2028 bytes) removed from the image.
============================================================================== ==============================================================================
@ -536,78 +582,85 @@ Image Symbol Table
Symbol Name Value Ov Type Size Object(Section) Symbol Name Value Ov Type Size Object(Section)
../clib/microlib/division.c 0x00000000 Number 0 uidiv.o ABSOLUTE
../clib/microlib/division.c 0x00000000 Number 0 uldiv.o ABSOLUTE ../clib/microlib/division.c 0x00000000 Number 0 uldiv.o ABSOLUTE
../clib/microlib/division.c 0x00000000 Number 0 uidiv.o ABSOLUTE
../clib/microlib/errno.c 0x00000000 Number 0 errno.o ABSOLUTE ../clib/microlib/errno.c 0x00000000 Number 0 errno.o ABSOLUTE
../clib/microlib/init/entry.s 0x00000000 Number 0 entry11a.o ABSOLUTE
../clib/microlib/init/entry.s 0x00000000 Number 0 entry.o ABSOLUTE
../clib/microlib/init/entry.s 0x00000000 Number 0 entry2.o ABSOLUTE
../clib/microlib/init/entry.s 0x00000000 Number 0 entry9a.o ABSOLUTE
../clib/microlib/init/entry.s 0x00000000 Number 0 entry11b.o ABSOLUTE
../clib/microlib/init/entry.s 0x00000000 Number 0 entry10b.o ABSOLUTE
../clib/microlib/init/entry.s 0x00000000 Number 0 entry10a.o ABSOLUTE
../clib/microlib/init/entry.s 0x00000000 Number 0 entry9b.o ABSOLUTE
../clib/microlib/init/entry.s 0x00000000 Number 0 entry8b.o ABSOLUTE
../clib/microlib/init/entry.s 0x00000000 Number 0 entry8a.o ABSOLUTE ../clib/microlib/init/entry.s 0x00000000 Number 0 entry8a.o ABSOLUTE
../clib/microlib/init/entry.s 0x00000000 Number 0 entry7b.o ABSOLUTE ../clib/microlib/init/entry.s 0x00000000 Number 0 entry11b.o ABSOLUTE
../clib/microlib/init/entry.s 0x00000000 Number 0 entry7a.o ABSOLUTE ../clib/microlib/init/entry.s 0x00000000 Number 0 entry.o ABSOLUTE
../clib/microlib/init/entry.s 0x00000000 Number 0 entry11a.o ABSOLUTE
../clib/microlib/init/entry.s 0x00000000 Number 0 entry2.o ABSOLUTE
../clib/microlib/init/entry.s 0x00000000 Number 0 entry10a.o ABSOLUTE
../clib/microlib/init/entry.s 0x00000000 Number 0 entry10b.o ABSOLUTE
../clib/microlib/init/entry.s 0x00000000 Number 0 entry9b.o ABSOLUTE
../clib/microlib/init/entry.s 0x00000000 Number 0 entry5.o ABSOLUTE ../clib/microlib/init/entry.s 0x00000000 Number 0 entry5.o ABSOLUTE
../clib/microlib/init/entry.s 0x00000000 Number 0 entry7a.o ABSOLUTE
../clib/microlib/init/entry.s 0x00000000 Number 0 entry7b.o ABSOLUTE
../clib/microlib/init/entry.s 0x00000000 Number 0 entry8b.o ABSOLUTE
../clib/microlib/init/entry.s 0x00000000 Number 0 entry9a.o ABSOLUTE
../clib/microlib/longlong.c 0x00000000 Number 0 llsshr.o ABSOLUTE ../clib/microlib/longlong.c 0x00000000 Number 0 llsshr.o ABSOLUTE
../clib/microlib/longlong.c 0x00000000 Number 0 llshl.o ABSOLUTE ../clib/microlib/longlong.c 0x00000000 Number 0 llshl.o ABSOLUTE
../clib/microlib/longlong.c 0x00000000 Number 0 llushr.o ABSOLUTE ../clib/microlib/longlong.c 0x00000000 Number 0 llushr.o ABSOLUTE
../clib/microlib/malloc/malloc.c 0x00000000 Number 0 malloca.o ABSOLUTE
../clib/microlib/malloc/malloc.c 0x00000000 Number 0 mallocr.o ABSOLUTE
../clib/microlib/malloc/malloc.c 0x00000000 Number 0 malloc.o ABSOLUTE ../clib/microlib/malloc/malloc.c 0x00000000 Number 0 malloc.o ABSOLUTE
../clib/microlib/malloc/malloc.c 0x00000000 Number 0 mallocra.o ABSOLUTE ../clib/microlib/malloc/malloc.c 0x00000000 Number 0 mallocra.o ABSOLUTE
../clib/microlib/malloc/malloc.c 0x00000000 Number 0 malloca.o ABSOLUTE
../clib/microlib/malloc/malloc.c 0x00000000 Number 0 mallocr.o ABSOLUTE
../clib/microlib/malloc/mvars.c 0x00000000 Number 0 mvars.o ABSOLUTE ../clib/microlib/malloc/mvars.c 0x00000000 Number 0 mvars.o ABSOLUTE
../clib/microlib/printf/printf.c 0x00000000 Number 0 printfa.o ABSOLUTE
../clib/microlib/printf/printf.c 0x00000000 Number 0 printf7.o ABSOLUTE
../clib/microlib/printf/printf.c 0x00000000 Number 0 printf5.o ABSOLUTE ../clib/microlib/printf/printf.c 0x00000000 Number 0 printf5.o ABSOLUTE
../clib/microlib/printf/printf.c 0x00000000 Number 0 printfa.o ABSOLUTE
../clib/microlib/printf/printf.c 0x00000000 Number 0 printf8.o ABSOLUTE
../clib/microlib/printf/printf.c 0x00000000 Number 0 printf6.o ABSOLUTE
../clib/microlib/printf/printf.c 0x00000000 Number 0 printf4.o ABSOLUTE ../clib/microlib/printf/printf.c 0x00000000 Number 0 printf4.o ABSOLUTE
../clib/microlib/printf/printf.c 0x00000000 Number 0 printf3.o ABSOLUTE ../clib/microlib/printf/printf.c 0x00000000 Number 0 printf3.o ABSOLUTE
../clib/microlib/printf/printf.c 0x00000000 Number 0 printf6.o ABSOLUTE ../clib/microlib/printf/printf.c 0x00000000 Number 0 printf7.o ABSOLUTE
../clib/microlib/printf/printf.c 0x00000000 Number 0 printf2.o ABSOLUTE ../clib/microlib/printf/printf.c 0x00000000 Number 0 printf2.o ABSOLUTE
../clib/microlib/printf/printf.c 0x00000000 Number 0 printf8.o ABSOLUTE
../clib/microlib/printf/printf.c 0x00000000 Number 0 printf1.o ABSOLUTE ../clib/microlib/printf/printf.c 0x00000000 Number 0 printf1.o ABSOLUTE
../clib/microlib/printf/printf.c 0x00000000 Number 0 printf0.o ABSOLUTE ../clib/microlib/printf/printf.c 0x00000000 Number 0 printf0.o ABSOLUTE
../clib/microlib/printf/printf.c 0x00000000 Number 0 printfb.o ABSOLUTE ../clib/microlib/printf/printf.c 0x00000000 Number 0 printfb.o ABSOLUTE
../clib/microlib/printf/stubs.s 0x00000000 Number 0 stubs.o ABSOLUTE ../clib/microlib/printf/stubs.s 0x00000000 Number 0 stubs.o ABSOLUTE
../clib/microlib/stdio/puts.c 0x00000000 Number 0 puts_e.o ABSOLUTE
../clib/microlib/stdio/puts.c 0x00000000 Number 0 puts.o ABSOLUTE
../clib/microlib/string/memcpy.c 0x00000000 Number 0 memcpyb.o ABSOLUTE ../clib/microlib/string/memcpy.c 0x00000000 Number 0 memcpyb.o ABSOLUTE
../clib/microlib/string/memcpy.c 0x00000000 Number 0 memcpya.o ABSOLUTE ../clib/microlib/string/memcpy.c 0x00000000 Number 0 memcpya.o ABSOLUTE
../clib/microlib/stubs.s 0x00000000 Number 0 useno.o ABSOLUTE ../clib/microlib/string/memset.c 0x00000000 Number 0 memseta.o ABSOLUTE
../clib/microlib/stubs.s 0x00000000 Number 0 iusefp.o ABSOLUTE ../clib/microlib/stubs.s 0x00000000 Number 0 iusefp.o ABSOLUTE
../clib/microlib/stubs.s 0x00000000 Number 0 useno.o ABSOLUTE
../fplib/microlib/fpadd.c 0x00000000 Number 0 dadd.o ABSOLUTE ../fplib/microlib/fpadd.c 0x00000000 Number 0 dadd.o ABSOLUTE
../fplib/microlib/fpdiv.c 0x00000000 Number 0 ddiv.o ABSOLUTE ../fplib/microlib/fpdiv.c 0x00000000 Number 0 ddiv.o ABSOLUTE
../fplib/microlib/fpepilogue.c 0x00000000 Number 0 depilogue.o ABSOLUTE ../fplib/microlib/fpepilogue.c 0x00000000 Number 0 depilogue.o ABSOLUTE
../fplib/microlib/fpfix.c 0x00000000 Number 0 dfixui.o ABSOLUTE
../fplib/microlib/fpfix.c 0x00000000 Number 0 dfixul.o ABSOLUTE ../fplib/microlib/fpfix.c 0x00000000 Number 0 dfixul.o ABSOLUTE
../fplib/microlib/fpflt.c 0x00000000 Number 0 dflti.o ABSOLUTE ../fplib/microlib/fpfix.c 0x00000000 Number 0 dfixui.o ABSOLUTE
../fplib/microlib/fpflt.c 0x00000000 Number 0 dfltui.o ABSOLUTE ../fplib/microlib/fpflt.c 0x00000000 Number 0 dfltui.o ABSOLUTE
../fplib/microlib/fpflt.c 0x00000000 Number 0 dflti.o ABSOLUTE
../fplib/microlib/fpmul.c 0x00000000 Number 0 dmul.o ABSOLUTE ../fplib/microlib/fpmul.c 0x00000000 Number 0 dmul.o ABSOLUTE
../fplib/microlib/fpscalb.c 0x00000000 Number 0 dscalb.o ABSOLUTE ../fplib/microlib/fpscalb.c 0x00000000 Number 0 dscalb.o ABSOLUTE
../fplib/microlib/fpsqrt.c 0x00000000 Number 0 dsqrt.o ABSOLUTE ../fplib/microlib/fpsqrt.c 0x00000000 Number 0 dsqrt.o ABSOLUTE
../mathlib/dunder.c 0x00000000 Number 0 dunder.o ABSOLUTE ../mathlib/dunder.c 0x00000000 Number 0 dunder.o ABSOLUTE
../mathlib/fpclassify.c 0x00000000 Number 0 fpclassify.o ABSOLUTE ../mathlib/fpclassify.c 0x00000000 Number 0 fpclassify.o ABSOLUTE
../mathlib/poly.c 0x00000000 Number 0 poly.o ABSOLUTE ../mathlib/poly.c 0x00000000 Number 0 poly.o ABSOLUTE
../mathlib/pow.c 0x00000000 Number 0 pow_x.o ABSOLUTE
../mathlib/pow.c 0x00000000 Number 0 pow.o ABSOLUTE ../mathlib/pow.c 0x00000000 Number 0 pow.o ABSOLUTE
../mathlib/pow.c 0x00000000 Number 0 pow_x.o ABSOLUTE
../mathlib/qnan.c 0x00000000 Number 0 qnan.o ABSOLUTE ../mathlib/qnan.c 0x00000000 Number 0 qnan.o ABSOLUTE
../mathlib/sqrt.c 0x00000000 Number 0 sqrt.o ABSOLUTE
../mathlib/sqrt.c 0x00000000 Number 0 sqrt_x.o ABSOLUTE ../mathlib/sqrt.c 0x00000000 Number 0 sqrt_x.o ABSOLUTE
../mathlib/sqrt.c 0x00000000 Number 0 sqrt.o ABSOLUTE
CORE\ARM\startup_CMSDK_CM0.s 0x00000000 Number 0 startup_cmsdk_cm0.o ABSOLUTE CORE\ARM\startup_CMSDK_CM0.s 0x00000000 Number 0 startup_cmsdk_cm0.o ABSOLUTE
CORE\\system_CMSDK_CM0.c 0x00000000 Number 0 system_cmsdk_cm0.o ABSOLUTE CORE\\system_CMSDK_CM0.c 0x00000000 Number 0 system_cmsdk_cm0.o ABSOLUTE
CORE\system_CMSDK_CM0.c 0x00000000 Number 0 system_cmsdk_cm0.o ABSOLUTE CORE\system_CMSDK_CM0.c 0x00000000 Number 0 system_cmsdk_cm0.o ABSOLUTE
FWLIB\\source\\ENS1_BOOST.c 0x00000000 Number 0 ens1_boost.o ABSOLUTE
FWLIB\\source\\ENS1_CLOCK.c 0x00000000 Number 0 ens1_clock.o ABSOLUTE FWLIB\\source\\ENS1_CLOCK.c 0x00000000 Number 0 ens1_clock.o ABSOLUTE
FWLIB\\source\\ENS1_GPIO.c 0x00000000 Number 0 ens1_gpio.o ABSOLUTE FWLIB\\source\\ENS1_GPIO.c 0x00000000 Number 0 ens1_gpio.o ABSOLUTE
FWLIB\\source\\ENS1_MTP.c 0x00000000 Number 0 ens1_mtp.o ABSOLUTE FWLIB\\source\\ENS1_MTP.c 0x00000000 Number 0 ens1_mtp.o ABSOLUTE
FWLIB\\source\\ENS1_TIMER.c 0x00000000 Number 0 ens1_timer.o ABSOLUTE FWLIB\\source\\ENS1_TIMER.c 0x00000000 Number 0 ens1_timer.o ABSOLUTE
FWLIB\\source\\ENS1_UART.c 0x00000000 Number 0 ens1_uart.o ABSOLUTE FWLIB\\source\\ENS1_UART.c 0x00000000 Number 0 ens1_uart.o ABSOLUTE
FWLIB\\source\\ENS1_WAVEGEN.c 0x00000000 Number 0 ens1_wavegen.o ABSOLUTE
FWLIB\\source\\retarget.c 0x00000000 Number 0 retarget.o ABSOLUTE FWLIB\\source\\retarget.c 0x00000000 Number 0 retarget.o ABSOLUTE
FWLIB\source\ENS1_BOOST.c 0x00000000 Number 0 ens1_boost.o ABSOLUTE
FWLIB\source\ENS1_CLOCK.c 0x00000000 Number 0 ens1_clock.o ABSOLUTE FWLIB\source\ENS1_CLOCK.c 0x00000000 Number 0 ens1_clock.o ABSOLUTE
FWLIB\source\ENS1_GPIO.c 0x00000000 Number 0 ens1_gpio.o ABSOLUTE FWLIB\source\ENS1_GPIO.c 0x00000000 Number 0 ens1_gpio.o ABSOLUTE
FWLIB\source\ENS1_MTP.c 0x00000000 Number 0 ens1_mtp.o ABSOLUTE FWLIB\source\ENS1_MTP.c 0x00000000 Number 0 ens1_mtp.o ABSOLUTE
FWLIB\source\ENS1_TIMER.c 0x00000000 Number 0 ens1_timer.o ABSOLUTE FWLIB\source\ENS1_TIMER.c 0x00000000 Number 0 ens1_timer.o ABSOLUTE
FWLIB\source\ENS1_UART.c 0x00000000 Number 0 ens1_uart.o ABSOLUTE FWLIB\source\ENS1_UART.c 0x00000000 Number 0 ens1_uart.o ABSOLUTE
FWLIB\source\ENS1_WAVEGEN.c 0x00000000 Number 0 ens1_wavegen.o ABSOLUTE
FWLIB\source\retarget.c 0x00000000 Number 0 retarget.o ABSOLUTE FWLIB\source\retarget.c 0x00000000 Number 0 retarget.o ABSOLUTE
USER\\mian.c 0x00000000 Number 0 mian.o ABSOLUTE USER\\mian.c 0x00000000 Number 0 mian.o ABSOLUTE
USER\mian.c 0x00000000 Number 0 mian.o ABSOLUTE USER\mian.c 0x00000000 Number 0 mian.o ABSOLUTE
@ -629,91 +682,117 @@ Image Symbol Table
__lit__00000000 0x100000d0 Data 4 entry2.o(.ARM.Collect$$$$00002712) __lit__00000000 0x100000d0 Data 4 entry2.o(.ARM.Collect$$$$00002712)
.text 0x100000d4 Section 28 startup_cmsdk_cm0.o(.text) .text 0x100000d4 Section 28 startup_cmsdk_cm0.o(.text)
.text 0x100000f0 Section 0 uidiv.o(.text) .text 0x100000f0 Section 0 uidiv.o(.text)
.text 0x1000011c Section 0 ddiv.o(.text) .text 0x1000011c Section 0 memcpya.o(.text)
.text 0x1000020c Section 0 dflti.o(.text) .text 0x10000140 Section 0 memseta.o(.text)
.text 0x10000234 Section 0 dfltui.o(.text) .text 0x10000164 Section 0 ddiv.o(.text)
.text 0x10000250 Section 0 dfixui.o(.text) .text 0x10000254 Section 0 dflti.o(.text)
.text 0x1000028c Section 0 llushr.o(.text) .text 0x1000027c Section 0 dfltui.o(.text)
.text 0x100002ae Section 0 iusefp.o(.text) .text 0x10000298 Section 0 dfixui.o(.text)
.text 0x100002ae Section 0 depilogue.o(.text) .text 0x100002d4 Section 0 llushr.o(.text)
.text 0x1000036c Section 0 dadd.o(.text) .text 0x100002f6 Section 0 depilogue.o(.text)
.text 0x100004d0 Section 0 dmul.o(.text) .text 0x100002f6 Section 0 iusefp.o(.text)
.text 0x100005a0 Section 0 dscalb.o(.text) .text 0x100003b4 Section 0 dadd.o(.text)
.text 0x100005cc Section 40 cdrcmple.o(.text) .text 0x10000518 Section 0 dmul.o(.text)
.text 0x100005f4 Section 36 init.o(.text) .text 0x100005e8 Section 0 dscalb.o(.text)
.text 0x10000618 Section 0 llshl.o(.text) .text 0x10000614 Section 40 cdrcmple.o(.text)
.text 0x10000638 Section 0 llsshr.o(.text) .text 0x1000063c Section 36 init.o(.text)
.text 0x1000065e Section 0 dsqrt.o(.text) .text 0x10000660 Section 0 llshl.o(.text)
i.CMSDK_timer_Init 0x10000700 Section 0 ens1_timer.o(i.CMSDK_timer_Init) .text 0x10000680 Section 0 llsshr.o(.text)
i.ClockInit 0x1000071c Section 0 ens1_clock.o(i.ClockInit) .text 0x100006a6 Section 0 dsqrt.o(.text)
i.ClockInitSet 0x1000073c Section 0 ens1_clock.o(i.ClockInitSet) i.CMSDK_timer_Init 0x10000748 Section 0 ens1_timer.o(i.CMSDK_timer_Init)
i.GPIO_AltFunction 0x100008a0 Section 0 ens1_gpio.o(i.GPIO_AltFunction) i.ClockInit 0x10000764 Section 0 ens1_clock.o(i.ClockInit)
i.GPIO_GetOutputValue 0x100008fc Section 0 ens1_gpio.o(i.GPIO_GetOutputValue) i.ClockInitSet 0x1000077c Section 0 ens1_clock.o(i.ClockInitSet)
i.GPIO_IO_Init 0x10000914 Section 0 ens1_gpio.o(i.GPIO_IO_Init) i.EMS_Configure 0x100008e0 Section 0 ens1_wavegen.o(i.EMS_Configure)
i.GPIO_Output 0x10000a70 Section 0 ens1_gpio.o(i.GPIO_Output) i.EMS_Process 0x100008f8 Section 0 ens1_wavegen.o(i.EMS_Process)
i.GPIO_Overturn 0x10000a98 Section 0 ens1_gpio.o(i.GPIO_Overturn) i.EMS_Start 0x10000960 Section 0 ens1_wavegen.o(i.EMS_Start)
i.GPIO_ResetOutput 0x10000ac0 Section 0 ens1_gpio.o(i.GPIO_ResetOutput) i.EMS_Stop 0x10000988 Section 0 ens1_wavegen.o(i.EMS_Stop)
i.GPIO_SetOutput 0x10000ad4 Section 0 ens1_gpio.o(i.GPIO_SetOutput) i.GPIO_AltFunction 0x100009c8 Section 0 ens1_gpio.o(i.GPIO_AltFunction)
i.MTP_init 0x10000ae8 Section 0 ens1_mtp.o(i.MTP_init) i.GPIO_GetOutputValue 0x10000a24 Section 0 ens1_gpio.o(i.GPIO_GetOutputValue)
i.NVIC_ClearPendingIRQ 0x10000aec Section 0 ens1_uart.o(i.NVIC_ClearPendingIRQ) i.GPIO_IO_Init 0x10000a3c Section 0 ens1_gpio.o(i.GPIO_IO_Init)
NVIC_ClearPendingIRQ 0x10000aed Thumb Code 14 ens1_uart.o(i.NVIC_ClearPendingIRQ) i.GPIO_Output 0x10000b98 Section 0 ens1_gpio.o(i.GPIO_Output)
i.NVIC_ClearPendingIRQ 0x10000b00 Section 0 ens1_timer.o(i.NVIC_ClearPendingIRQ) i.GPIO_Overturn 0x10000bc0 Section 0 ens1_gpio.o(i.GPIO_Overturn)
NVIC_ClearPendingIRQ 0x10000b01 Thumb Code 14 ens1_timer.o(i.NVIC_ClearPendingIRQ) i.GPIO_ResetOutput 0x10000be8 Section 0 ens1_gpio.o(i.GPIO_ResetOutput)
i.NVIC_DisableIRQ 0x10000b14 Section 0 ens1_uart.o(i.NVIC_DisableIRQ) i.GPIO_SetOutput 0x10000bfc Section 0 ens1_gpio.o(i.GPIO_SetOutput)
NVIC_DisableIRQ 0x10000b15 Thumb Code 14 ens1_uart.o(i.NVIC_DisableIRQ) i.MTP_init 0x10000c10 Section 0 ens1_mtp.o(i.MTP_init)
i.NVIC_DisableIRQ 0x10000b28 Section 0 ens1_timer.o(i.NVIC_DisableIRQ) i.NVIC_ClearPendingIRQ 0x10000c14 Section 0 ens1_uart.o(i.NVIC_ClearPendingIRQ)
NVIC_DisableIRQ 0x10000b29 Thumb Code 14 ens1_timer.o(i.NVIC_DisableIRQ) NVIC_ClearPendingIRQ 0x10000c15 Thumb Code 14 ens1_uart.o(i.NVIC_ClearPendingIRQ)
i.NVIC_EnableIRQ 0x10000b3c Section 0 ens1_uart.o(i.NVIC_EnableIRQ) i.NVIC_ClearPendingIRQ 0x10000c28 Section 0 ens1_timer.o(i.NVIC_ClearPendingIRQ)
NVIC_EnableIRQ 0x10000b3d Thumb Code 14 ens1_uart.o(i.NVIC_EnableIRQ) NVIC_ClearPendingIRQ 0x10000c29 Thumb Code 14 ens1_timer.o(i.NVIC_ClearPendingIRQ)
i.NVIC_EnableIRQ 0x10000b50 Section 0 ens1_timer.o(i.NVIC_EnableIRQ) i.NVIC_DisableIRQ 0x10000c3c Section 0 ens1_uart.o(i.NVIC_DisableIRQ)
NVIC_EnableIRQ 0x10000b51 Thumb Code 14 ens1_timer.o(i.NVIC_EnableIRQ) NVIC_DisableIRQ 0x10000c3d Thumb Code 14 ens1_uart.o(i.NVIC_DisableIRQ)
i.PCLK_Enable 0x10000b64 Section 0 ens1_clock.o(i.PCLK_Enable) i.NVIC_DisableIRQ 0x10000c50 Section 0 ens1_timer.o(i.NVIC_DisableIRQ)
i.SystemInit 0x10000b7c Section 0 system_cmsdk_cm0.o(i.SystemInit) NVIC_DisableIRQ 0x10000c51 Thumb Code 14 ens1_timer.o(i.NVIC_DisableIRQ)
i.TIMER0_Handler 0x10000b8c Section 0 ens1_timer.o(i.TIMER0_Handler) i.NVIC_EnableIRQ 0x10000c64 Section 0 ens1_uart.o(i.NVIC_EnableIRQ)
i.TIMER0_Init 0x10000be0 Section 0 ens1_timer.o(i.TIMER0_Init) NVIC_EnableIRQ 0x10000c65 Thumb Code 14 ens1_uart.o(i.NVIC_EnableIRQ)
i.TIMER1_Handler 0x10000c20 Section 0 ens1_timer.o(i.TIMER1_Handler) i.NVIC_EnableIRQ 0x10000c78 Section 0 ens1_timer.o(i.NVIC_EnableIRQ)
i.UART0_Handler 0x10000c3c Section 0 ens1_uart.o(i.UART0_Handler) NVIC_EnableIRQ 0x10000c79 Thumb Code 14 ens1_timer.o(i.NVIC_EnableIRQ)
i.UART1_Handler 0x10000ca8 Section 0 ens1_uart.o(i.UART1_Handler) i.PCLK_Enable 0x10000c8c Section 0 ens1_clock.o(i.PCLK_Enable)
i.UARTLine_THREmpty 0x10000d08 Section 0 ens1_uart.o(i.UARTLine_THREmpty) i.SystemInit 0x10000ca4 Section 0 system_cmsdk_cm0.o(i.SystemInit)
i.UART_INT_TYPE 0x10000d12 Section 0 ens1_uart.o(i.UART_INT_TYPE) i.TIMER0_Handler 0x10000cb4 Section 0 ens1_timer.o(i.TIMER0_Handler)
i.UART_ITConfig 0x10000d1c Section 0 ens1_uart.o(i.UART_ITConfig) i.TIMER0_Init 0x10000cd4 Section 0 ens1_timer.o(i.TIMER0_Init)
i.UART_Init 0x10000d74 Section 0 ens1_uart.o(i.UART_Init) i.TIMER1_Handler 0x10000d68 Section 0 ens1_timer.o(i.TIMER1_Handler)
i.UartPutc 0x10000e20 Section 0 ens1_uart.o(i.UartPutc) i.Time_Manager_GetFlags 0x10000d84 Section 0 ens1_timer.o(i.Time_Manager_GetFlags)
i.WRITE_UART_THRBuff 0x10000e3e Section 0 ens1_uart.o(i.WRITE_UART_THRBuff) i.Time_Manager_Init 0x10000d8c Section 0 ens1_timer.o(i.Time_Manager_Init)
i.__0printf$1 0x10000e44 Section 0 printf1.o(i.__0printf$1) i.Time_Manager_Process 0x10000da8 Section 0 ens1_timer.o(i.Time_Manager_Process)
i.__ARM_clz 0x10000e64 Section 0 depilogue.o(i.__ARM_clz) i.UART0_Handler 0x10000e60 Section 0 ens1_uart.o(i.UART0_Handler)
i.__ARM_fpclassify 0x10000e94 Section 0 fpclassify.o(i.__ARM_fpclassify) i.UART1_Handler 0x10000ecc Section 0 ens1_uart.o(i.UART1_Handler)
i.__kernel_poly 0x10000ec0 Section 0 poly.o(i.__kernel_poly) i.UARTLine_THREmpty 0x10000f2c Section 0 ens1_uart.o(i.UARTLine_THREmpty)
i.__mathlib_dbl_divzero 0x10000f6c Section 0 dunder.o(i.__mathlib_dbl_divzero) i.UART_INT_TYPE 0x10000f36 Section 0 ens1_uart.o(i.UART_INT_TYPE)
i.__mathlib_dbl_infnan2 0x10000f80 Section 0 dunder.o(i.__mathlib_dbl_infnan2) i.UART_ITConfig 0x10000f40 Section 0 ens1_uart.o(i.UART_ITConfig)
i.__mathlib_dbl_invalid 0x10000f88 Section 0 dunder.o(i.__mathlib_dbl_invalid) i.UART_Init 0x10000f98 Section 0 ens1_uart.o(i.UART_Init)
i.__mathlib_dbl_overflow 0x10000f98 Section 0 dunder.o(i.__mathlib_dbl_overflow) i.UartPutc 0x10001044 Section 0 ens1_uart.o(i.UartPutc)
i.__mathlib_dbl_underflow 0x10000fac Section 0 dunder.o(i.__mathlib_dbl_underflow) i.WRITE_UART_THRBuff 0x10001062 Section 0 ens1_uart.o(i.WRITE_UART_THRBuff)
i.__scatterload_copy 0x10000fc0 Section 14 handlers.o(i.__scatterload_copy) i.__0printf$1 0x10001068 Section 0 printf1.o(i.__0printf$1)
i.__scatterload_null 0x10000fce Section 2 handlers.o(i.__scatterload_null) i.__ARM_clz 0x10001088 Section 0 depilogue.o(i.__ARM_clz)
i.__scatterload_zeroinit 0x10000fd0 Section 14 handlers.o(i.__scatterload_zeroinit) i.__ARM_fpclassify 0x100010b8 Section 0 fpclassify.o(i.__ARM_fpclassify)
i.__set_errno 0x10000fe0 Section 0 errno.o(i.__set_errno) i.__kernel_poly 0x100010e4 Section 0 poly.o(i.__kernel_poly)
i._printf_core 0x10000fec Section 0 printf1.o(i._printf_core) i.__mathlib_dbl_divzero 0x10001190 Section 0 dunder.o(i.__mathlib_dbl_divzero)
_printf_core 0x10000fed Thumb Code 332 printf1.o(i._printf_core) i.__mathlib_dbl_infnan2 0x100011a4 Section 0 dunder.o(i.__mathlib_dbl_infnan2)
i.fputc 0x1000113c Section 0 retarget.o(i.fputc) i.__mathlib_dbl_invalid 0x100011ac Section 0 dunder.o(i.__mathlib_dbl_invalid)
i.main 0x10001150 Section 0 mian.o(i.main) i.__mathlib_dbl_overflow 0x100011bc Section 0 dunder.o(i.__mathlib_dbl_overflow)
i.pow 0x1000119c Section 0 pow.o(i.pow) i.__mathlib_dbl_underflow 0x100011d0 Section 0 dunder.o(i.__mathlib_dbl_underflow)
i.sqrt 0x10001b98 Section 0 sqrt.o(i.sqrt) i.__scatterload_copy 0x100011e4 Section 14 handlers.o(i.__scatterload_copy)
.constdata 0x10001be0 Section 136 pow.o(.constdata) i.__scatterload_null 0x100011f2 Section 2 handlers.o(i.__scatterload_null)
bp 0x10001be0 Data 16 pow.o(.constdata) i.__scatterload_zeroinit 0x100011f4 Section 14 handlers.o(i.__scatterload_zeroinit)
dp_h 0x10001bf0 Data 16 pow.o(.constdata) i.__set_errno 0x10001204 Section 0 errno.o(i.__set_errno)
dp_l 0x10001c00 Data 16 pow.o(.constdata) i._printf_core 0x10001210 Section 0 printf1.o(i._printf_core)
L 0x10001c10 Data 48 pow.o(.constdata) _printf_core 0x10001211 Thumb Code 332 printf1.o(i._printf_core)
P 0x10001c40 Data 40 pow.o(.constdata) i.boost_voltage_select_26V 0x10001360 Section 0 ens1_boost.o(i.boost_voltage_select_26V)
.constdata 0x10001c68 Section 8 qnan.o(.constdata) i.fputc 0x10001374 Section 0 retarget.o(i.fputc)
.data 0x20000000 Section 22 ens1_uart.o(.data) i.main 0x10001388 Section 0 mian.o(i.main)
.data 0x20000018 Section 14 ens1_clock.o(.data) i.pow 0x1000147c Section 0 pow.o(i.pow)
.data 0x20000028 Section 8 retarget.o(.data) i.puts 0x10001e78 Section 0 puts.o(i.puts)
.data 0x20000030 Section 12 ens1_timer.o(.data) i.sqrt 0x10001e98 Section 0 sqrt.o(i.sqrt)
.data 0x2000003c Section 8 system_cmsdk_cm0.o(.data) i.wavegen_Init 0x10001ee0 Section 0 ens1_wavegen.o(i.wavegen_Init)
.data 0x20000044 Section 4 errno.o(.data) i.wavegen_Start 0x10001f44 Section 0 ens1_wavegen.o(i.wavegen_Start)
_errno 0x20000044 Data 4 errno.o(.data) i.wavegen_Stop 0x10001f5c Section 0 ens1_wavegen.o(i.wavegen_Stop)
STACK 0x20000048 Section 512 startup_cmsdk_cm0.o(STACK) i.wavegen_driverA_sine_test 0x10001f74 Section 0 ens1_wavegen.o(i.wavegen_driverA_sine_test)
.constdata 0x1000201c Section 10 mian.o(.constdata)
.constdata 0x10002028 Section 136 pow.o(.constdata)
bp 0x10002028 Data 16 pow.o(.constdata)
dp_h 0x10002038 Data 16 pow.o(.constdata)
dp_l 0x10002048 Data 16 pow.o(.constdata)
L 0x10002058 Data 48 pow.o(.constdata)
P 0x10002088 Data 40 pow.o(.constdata)
.constdata 0x100020b0 Section 8 qnan.o(.constdata)
.data 0x20000000 Section 2 mian.o(.data)
ems_control_count 0x20000000 Data 1 mian.o(.data)
ems_state 0x20000001 Data 1 mian.o(.data)
.data 0x20000004 Section 22 ens1_uart.o(.data)
.data 0x2000001c Section 14 ens1_clock.o(.data)
.data 0x2000002c Section 8 retarget.o(.data)
.data 0x20000034 Section 28 ens1_timer.o(.data)
g_time_flags 0x20000034 Data 6 ens1_timer.o(.data)
g_time_counters 0x2000003a Data 8 ens1_timer.o(.data)
.data 0x20000050 Section 8 ens1_wavegen.o(.data)
g_ems_running 0x20000050 Data 1 ens1_wavegen.o(.data)
g_ems_count 0x20000054 Data 4 ens1_wavegen.o(.data)
.data 0x20000058 Section 8 system_cmsdk_cm0.o(.data)
.data 0x20000060 Section 4 errno.o(.data)
_errno 0x20000060 Data 4 errno.o(.data)
.bss 0x20000064 Section 10 ens1_wavegen.o(.bss)
g_ems_config 0x20000064 Data 10 ens1_wavegen.o(.bss)
STACK 0x20000070 Section 512 startup_cmsdk_cm0.o(STACK)
Global Symbols Global Symbols
@ -817,88 +896,111 @@ Image Symbol Table
WG_DRV_Handler 0x100000e7 Thumb Code 0 startup_cmsdk_cm0.o(.text) WG_DRV_Handler 0x100000e7 Thumb Code 0 startup_cmsdk_cm0.o(.text)
__aeabi_uidiv 0x100000f1 Thumb Code 0 uidiv.o(.text) __aeabi_uidiv 0x100000f1 Thumb Code 0 uidiv.o(.text)
__aeabi_uidivmod 0x100000f1 Thumb Code 44 uidiv.o(.text) __aeabi_uidivmod 0x100000f1 Thumb Code 44 uidiv.o(.text)
__aeabi_ddiv 0x1000011d Thumb Code 234 ddiv.o(.text) __aeabi_memcpy 0x1000011d Thumb Code 36 memcpya.o(.text)
__aeabi_i2d 0x1000020d Thumb Code 34 dflti.o(.text) __aeabi_memcpy4 0x1000011d Thumb Code 0 memcpya.o(.text)
__aeabi_ui2d 0x10000235 Thumb Code 24 dfltui.o(.text) __aeabi_memcpy8 0x1000011d Thumb Code 0 memcpya.o(.text)
__aeabi_d2uiz 0x10000251 Thumb Code 50 dfixui.o(.text) __aeabi_memset 0x10000141 Thumb Code 14 memseta.o(.text)
__aeabi_llsr 0x1000028d Thumb Code 34 llushr.o(.text) __aeabi_memset4 0x10000141 Thumb Code 0 memseta.o(.text)
_ll_ushift_r 0x1000028d Thumb Code 0 llushr.o(.text) __aeabi_memset8 0x10000141 Thumb Code 0 memseta.o(.text)
__I$use$fp 0x100002af Thumb Code 0 iusefp.o(.text) __aeabi_memclr 0x1000014f Thumb Code 4 memseta.o(.text)
_double_round 0x100002af Thumb Code 26 depilogue.o(.text) __aeabi_memclr4 0x1000014f Thumb Code 0 memseta.o(.text)
_double_epilogue 0x100002c9 Thumb Code 164 depilogue.o(.text) __aeabi_memclr8 0x1000014f Thumb Code 0 memseta.o(.text)
__aeabi_dadd 0x1000036d Thumb Code 328 dadd.o(.text) _memset$wrapper 0x10000153 Thumb Code 18 memseta.o(.text)
__aeabi_dsub 0x100004b5 Thumb Code 12 dadd.o(.text) __aeabi_ddiv 0x10000165 Thumb Code 234 ddiv.o(.text)
__aeabi_drsub 0x100004c1 Thumb Code 12 dadd.o(.text) __aeabi_i2d 0x10000255 Thumb Code 34 dflti.o(.text)
__aeabi_dmul 0x100004d1 Thumb Code 202 dmul.o(.text) __aeabi_ui2d 0x1000027d Thumb Code 24 dfltui.o(.text)
__ARM_scalbn 0x100005a1 Thumb Code 44 dscalb.o(.text) __aeabi_d2uiz 0x10000299 Thumb Code 50 dfixui.o(.text)
scalbn 0x100005a1 Thumb Code 0 dscalb.o(.text) __aeabi_llsr 0x100002d5 Thumb Code 34 llushr.o(.text)
__aeabi_cdrcmple 0x100005cd Thumb Code 38 cdrcmple.o(.text) _ll_ushift_r 0x100002d5 Thumb Code 0 llushr.o(.text)
__scatterload 0x100005f5 Thumb Code 28 init.o(.text) __I$use$fp 0x100002f7 Thumb Code 0 iusefp.o(.text)
__scatterload_rt2 0x100005f5 Thumb Code 0 init.o(.text) _double_round 0x100002f7 Thumb Code 26 depilogue.o(.text)
__aeabi_llsl 0x10000619 Thumb Code 32 llshl.o(.text) _double_epilogue 0x10000311 Thumb Code 164 depilogue.o(.text)
_ll_shift_l 0x10000619 Thumb Code 0 llshl.o(.text) __aeabi_dadd 0x100003b5 Thumb Code 328 dadd.o(.text)
__aeabi_lasr 0x10000639 Thumb Code 38 llsshr.o(.text) __aeabi_dsub 0x100004fd Thumb Code 12 dadd.o(.text)
_ll_sshift_r 0x10000639 Thumb Code 0 llsshr.o(.text) __aeabi_drsub 0x10000509 Thumb Code 12 dadd.o(.text)
_dsqrt 0x1000065f Thumb Code 162 dsqrt.o(.text) __aeabi_dmul 0x10000519 Thumb Code 202 dmul.o(.text)
CMSDK_timer_Init 0x10000701 Thumb Code 26 ens1_timer.o(i.CMSDK_timer_Init) __ARM_scalbn 0x100005e9 Thumb Code 44 dscalb.o(.text)
ClockInit 0x1000071d Thumb Code 20 ens1_clock.o(i.ClockInit) scalbn 0x100005e9 Thumb Code 0 dscalb.o(.text)
ClockInitSet 0x1000073d Thumb Code 348 ens1_clock.o(i.ClockInitSet) __aeabi_cdrcmple 0x10000615 Thumb Code 38 cdrcmple.o(.text)
GPIO_AltFunction 0x100008a1 Thumb Code 86 ens1_gpio.o(i.GPIO_AltFunction) __scatterload 0x1000063d Thumb Code 28 init.o(.text)
GPIO_GetOutputValue 0x100008fd Thumb Code 18 ens1_gpio.o(i.GPIO_GetOutputValue) __scatterload_rt2 0x1000063d Thumb Code 0 init.o(.text)
GPIO_IO_Init 0x10000915 Thumb Code 342 ens1_gpio.o(i.GPIO_IO_Init) __aeabi_llsl 0x10000661 Thumb Code 32 llshl.o(.text)
GPIO_Output 0x10000a71 Thumb Code 36 ens1_gpio.o(i.GPIO_Output) _ll_shift_l 0x10000661 Thumb Code 0 llshl.o(.text)
GPIO_Overturn 0x10000a99 Thumb Code 40 ens1_gpio.o(i.GPIO_Overturn) __aeabi_lasr 0x10000681 Thumb Code 38 llsshr.o(.text)
GPIO_ResetOutput 0x10000ac1 Thumb Code 16 ens1_gpio.o(i.GPIO_ResetOutput) _ll_sshift_r 0x10000681 Thumb Code 0 llsshr.o(.text)
GPIO_SetOutput 0x10000ad5 Thumb Code 16 ens1_gpio.o(i.GPIO_SetOutput) _dsqrt 0x100006a7 Thumb Code 162 dsqrt.o(.text)
MTP_init 0x10000ae9 Thumb Code 4 ens1_mtp.o(i.MTP_init) CMSDK_timer_Init 0x10000749 Thumb Code 26 ens1_timer.o(i.CMSDK_timer_Init)
PCLK_Enable 0x10000b65 Thumb Code 20 ens1_clock.o(i.PCLK_Enable) ClockInit 0x10000765 Thumb Code 14 ens1_clock.o(i.ClockInit)
SystemInit 0x10000b7d Thumb Code 8 system_cmsdk_cm0.o(i.SystemInit) ClockInitSet 0x1000077d Thumb Code 348 ens1_clock.o(i.ClockInitSet)
TIMER0_Handler 0x10000b8d Thumb Code 62 ens1_timer.o(i.TIMER0_Handler) EMS_Configure 0x100008e1 Thumb Code 20 ens1_wavegen.o(i.EMS_Configure)
TIMER0_Init 0x10000be1 Thumb Code 56 ens1_timer.o(i.TIMER0_Init) EMS_Process 0x100008f9 Thumb Code 86 ens1_wavegen.o(i.EMS_Process)
TIMER1_Handler 0x10000c21 Thumb Code 18 ens1_timer.o(i.TIMER1_Handler) EMS_Start 0x10000961 Thumb Code 14 ens1_wavegen.o(i.EMS_Start)
UART0_Handler 0x10000c3d Thumb Code 108 ens1_uart.o(i.UART0_Handler) EMS_Stop 0x10000989 Thumb Code 26 ens1_wavegen.o(i.EMS_Stop)
UART1_Handler 0x10000ca9 Thumb Code 92 ens1_uart.o(i.UART1_Handler) GPIO_AltFunction 0x100009c9 Thumb Code 86 ens1_gpio.o(i.GPIO_AltFunction)
UARTLine_THREmpty 0x10000d09 Thumb Code 10 ens1_uart.o(i.UARTLine_THREmpty) GPIO_GetOutputValue 0x10000a25 Thumb Code 18 ens1_gpio.o(i.GPIO_GetOutputValue)
UART_INT_TYPE 0x10000d13 Thumb Code 10 ens1_uart.o(i.UART_INT_TYPE) GPIO_IO_Init 0x10000a3d Thumb Code 342 ens1_gpio.o(i.GPIO_IO_Init)
UART_ITConfig 0x10000d1d Thumb Code 84 ens1_uart.o(i.UART_ITConfig) GPIO_Output 0x10000b99 Thumb Code 36 ens1_gpio.o(i.GPIO_Output)
UART_Init 0x10000d75 Thumb Code 164 ens1_uart.o(i.UART_Init) GPIO_Overturn 0x10000bc1 Thumb Code 40 ens1_gpio.o(i.GPIO_Overturn)
UartPutc 0x10000e21 Thumb Code 30 ens1_uart.o(i.UartPutc) GPIO_ResetOutput 0x10000be9 Thumb Code 16 ens1_gpio.o(i.GPIO_ResetOutput)
WRITE_UART_THRBuff 0x10000e3f Thumb Code 4 ens1_uart.o(i.WRITE_UART_THRBuff) GPIO_SetOutput 0x10000bfd Thumb Code 16 ens1_gpio.o(i.GPIO_SetOutput)
__0printf$1 0x10000e45 Thumb Code 24 printf1.o(i.__0printf$1) MTP_init 0x10000c11 Thumb Code 4 ens1_mtp.o(i.MTP_init)
__1printf$1 0x10000e45 Thumb Code 0 printf1.o(i.__0printf$1) PCLK_Enable 0x10000c8d Thumb Code 20 ens1_clock.o(i.PCLK_Enable)
__2printf 0x10000e45 Thumb Code 0 printf1.o(i.__0printf$1) SystemInit 0x10000ca5 Thumb Code 8 system_cmsdk_cm0.o(i.SystemInit)
__ARM_clz 0x10000e65 Thumb Code 46 depilogue.o(i.__ARM_clz) TIMER0_Handler 0x10000cb5 Thumb Code 24 ens1_timer.o(i.TIMER0_Handler)
__ARM_fpclassify 0x10000e95 Thumb Code 40 fpclassify.o(i.__ARM_fpclassify) TIMER0_Init 0x10000cd5 Thumb Code 72 ens1_timer.o(i.TIMER0_Init)
__kernel_poly 0x10000ec1 Thumb Code 172 poly.o(i.__kernel_poly) TIMER1_Handler 0x10000d69 Thumb Code 18 ens1_timer.o(i.TIMER1_Handler)
__mathlib_dbl_divzero 0x10000f6d Thumb Code 16 dunder.o(i.__mathlib_dbl_divzero) Time_Manager_GetFlags 0x10000d85 Thumb Code 4 ens1_timer.o(i.Time_Manager_GetFlags)
__mathlib_dbl_infnan2 0x10000f81 Thumb Code 8 dunder.o(i.__mathlib_dbl_infnan2) Time_Manager_Init 0x10000d8d Thumb Code 20 ens1_timer.o(i.Time_Manager_Init)
__mathlib_dbl_invalid 0x10000f89 Thumb Code 16 dunder.o(i.__mathlib_dbl_invalid) Time_Manager_Process 0x10000da9 Thumb Code 174 ens1_timer.o(i.Time_Manager_Process)
__mathlib_dbl_overflow 0x10000f99 Thumb Code 16 dunder.o(i.__mathlib_dbl_overflow) UART0_Handler 0x10000e61 Thumb Code 108 ens1_uart.o(i.UART0_Handler)
__mathlib_dbl_underflow 0x10000fad Thumb Code 14 dunder.o(i.__mathlib_dbl_underflow) UART1_Handler 0x10000ecd Thumb Code 92 ens1_uart.o(i.UART1_Handler)
__scatterload_copy 0x10000fc1 Thumb Code 14 handlers.o(i.__scatterload_copy) UARTLine_THREmpty 0x10000f2d Thumb Code 10 ens1_uart.o(i.UARTLine_THREmpty)
__scatterload_null 0x10000fcf Thumb Code 2 handlers.o(i.__scatterload_null) UART_INT_TYPE 0x10000f37 Thumb Code 10 ens1_uart.o(i.UART_INT_TYPE)
__scatterload_zeroinit 0x10000fd1 Thumb Code 14 handlers.o(i.__scatterload_zeroinit) UART_ITConfig 0x10000f41 Thumb Code 84 ens1_uart.o(i.UART_ITConfig)
__set_errno 0x10000fe1 Thumb Code 6 errno.o(i.__set_errno) UART_Init 0x10000f99 Thumb Code 164 ens1_uart.o(i.UART_Init)
fputc 0x1000113d Thumb Code 16 retarget.o(i.fputc) UartPutc 0x10001045 Thumb Code 30 ens1_uart.o(i.UartPutc)
main 0x10001151 Thumb Code 64 mian.o(i.main) WRITE_UART_THRBuff 0x10001063 Thumb Code 4 ens1_uart.o(i.WRITE_UART_THRBuff)
pow 0x1000119d Thumb Code 2548 pow.o(i.pow) __0printf$1 0x10001069 Thumb Code 24 printf1.o(i.__0printf$1)
sqrt 0x10001b99 Thumb Code 66 sqrt.o(i.sqrt) __1printf$1 0x10001069 Thumb Code 0 printf1.o(i.__0printf$1)
__mathlib_zero 0x10001c68 Data 8 qnan.o(.constdata) __2printf 0x10001069 Thumb Code 0 printf1.o(i.__0printf$1)
Region$$Table$$Base 0x10001c70 Number 0 anon$$obj.o(Region$$Table) __ARM_clz 0x10001089 Thumb Code 46 depilogue.o(i.__ARM_clz)
Region$$Table$$Limit 0x10001c90 Number 0 anon$$obj.o(Region$$Table) __ARM_fpclassify 0x100010b9 Thumb Code 40 fpclassify.o(i.__ARM_fpclassify)
UART1_Fifo 0x20000000 Data 3 ens1_uart.o(.data) __kernel_poly 0x100010e5 Thumb Code 172 poly.o(i.__kernel_poly)
UART1_Init 0x20000004 Data 16 ens1_uart.o(.data) __mathlib_dbl_divzero 0x10001191 Thumb Code 16 dunder.o(i.__mathlib_dbl_divzero)
UART1_ITSet 0x20000014 Data 2 ens1_uart.o(.data) __mathlib_dbl_infnan2 0x100011a5 Thumb Code 8 dunder.o(i.__mathlib_dbl_infnan2)
APB_Clock_Freq 0x20000018 Data 4 ens1_clock.o(.data) __mathlib_dbl_invalid 0x100011ad Thumb Code 16 dunder.o(i.__mathlib_dbl_invalid)
CLOCKCFG 0x2000001c Data 10 ens1_clock.o(.data) __mathlib_dbl_overflow 0x100011bd Thumb Code 16 dunder.o(i.__mathlib_dbl_overflow)
__stdout 0x20000028 Data 4 retarget.o(.data) __mathlib_dbl_underflow 0x100011d1 Thumb Code 14 dunder.o(i.__mathlib_dbl_underflow)
__stdin 0x2000002c Data 4 retarget.o(.data) __scatterload_copy 0x100011e5 Thumb Code 14 handlers.o(i.__scatterload_copy)
timer0_irq_occurred 0x20000030 Data 4 ens1_timer.o(.data) __scatterload_null 0x100011f3 Thumb Code 2 handlers.o(i.__scatterload_null)
time_flag 0x20000034 Data 4 ens1_timer.o(.data) __scatterload_zeroinit 0x100011f5 Thumb Code 14 handlers.o(i.__scatterload_zeroinit)
timer1_irq_occurred 0x20000038 Data 4 ens1_timer.o(.data) __set_errno 0x10001205 Thumb Code 6 errno.o(i.__set_errno)
SystemFrequency 0x2000003c Data 4 system_cmsdk_cm0.o(.data) boost_voltage_select_26V 0x10001361 Thumb Code 12 ens1_boost.o(i.boost_voltage_select_26V)
SystemCoreClock 0x20000040 Data 4 system_cmsdk_cm0.o(.data) fputc 0x10001375 Thumb Code 16 retarget.o(i.fputc)
__initial_sp 0x20000248 Data 0 startup_cmsdk_cm0.o(STACK) main 0x10001389 Thumb Code 220 mian.o(i.main)
pow 0x1000147d Thumb Code 2548 pow.o(i.pow)
puts 0x10001e79 Thumb Code 28 puts.o(i.puts)
sqrt 0x10001e99 Thumb Code 66 sqrt.o(i.sqrt)
wavegen_Init 0x10001ee1 Thumb Code 32 ens1_wavegen.o(i.wavegen_Init)
wavegen_Start 0x10001f45 Thumb Code 14 ens1_wavegen.o(i.wavegen_Start)
wavegen_Stop 0x10001f5d Thumb Code 22 ens1_wavegen.o(i.wavegen_Stop)
wavegen_driverA_sine_test 0x10001f75 Thumb Code 98 ens1_wavegen.o(i.wavegen_driverA_sine_test)
__mathlib_zero 0x100020b0 Data 8 qnan.o(.constdata)
Region$$Table$$Base 0x100020b8 Number 0 anon$$obj.o(Region$$Table)
Region$$Table$$Limit 0x100020d8 Number 0 anon$$obj.o(Region$$Table)
UART1_Fifo 0x20000004 Data 3 ens1_uart.o(.data)
UART1_Init 0x20000008 Data 16 ens1_uart.o(.data)
UART1_ITSet 0x20000018 Data 2 ens1_uart.o(.data)
APB_Clock_Freq 0x2000001c Data 4 ens1_clock.o(.data)
CLOCKCFG 0x20000020 Data 10 ens1_clock.o(.data)
__stdout 0x2000002c Data 4 retarget.o(.data)
__stdin 0x20000030 Data 4 retarget.o(.data)
timer0_irq_occurred 0x20000044 Data 4 ens1_timer.o(.data)
time_flag 0x20000048 Data 4 ens1_timer.o(.data)
timer1_irq_occurred 0x2000004c Data 4 ens1_timer.o(.data)
SystemFrequency 0x20000058 Data 4 system_cmsdk_cm0.o(.data)
SystemCoreClock 0x2000005c Data 4 system_cmsdk_cm0.o(.data)
__initial_sp 0x20000270 Data 0 startup_cmsdk_cm0.o(STACK)
@ -908,109 +1010,132 @@ Memory Map of the image
Image Entry point : 0x100000c1 Image Entry point : 0x100000c1
Load Region LR_IROM1 (Base: 0x10000000, Size: 0x00001cd8, Max: 0x00008000, ABSOLUTE) Load Region LR_IROM1 (Base: 0x10000000, Size: 0x0000213c, Max: 0x00008000, ABSOLUTE)
Execution Region ER_IROM1 (Exec base: 0x10000000, Load base: 0x10000000, Size: 0x00001c90, Max: 0x00008000, ABSOLUTE) Execution Region ER_IROM1 (Exec base: 0x10000000, Load base: 0x10000000, Size: 0x000020d8, Max: 0x00008000, ABSOLUTE)
Exec Addr Load Addr Size Type Attr Idx E Section Name Object Exec Addr Load Addr Size Type Attr Idx E Section Name Object
0x10000000 0x10000000 0x000000c0 Data RO 719 RESET startup_cmsdk_cm0.o 0x10000000 0x10000000 0x000000c0 Data RO 872 RESET startup_cmsdk_cm0.o
0x100000c0 0x100000c0 0x00000000 Code RO 734 * .ARM.Collect$$$$00000000 mc_p.l(entry.o) 0x100000c0 0x100000c0 0x00000000 Code RO 887 * .ARM.Collect$$$$00000000 mc_p.l(entry.o)
0x100000c0 0x100000c0 0x00000004 Code RO 1067 .ARM.Collect$$$$00000001 mc_p.l(entry2.o) 0x100000c0 0x100000c0 0x00000004 Code RO 1226 .ARM.Collect$$$$00000001 mc_p.l(entry2.o)
0x100000c4 0x100000c4 0x00000004 Code RO 1070 .ARM.Collect$$$$00000004 mc_p.l(entry5.o) 0x100000c4 0x100000c4 0x00000004 Code RO 1229 .ARM.Collect$$$$00000004 mc_p.l(entry5.o)
0x100000c8 0x100000c8 0x00000000 Code RO 1072 .ARM.Collect$$$$00000008 mc_p.l(entry7b.o) 0x100000c8 0x100000c8 0x00000000 Code RO 1231 .ARM.Collect$$$$00000008 mc_p.l(entry7b.o)
0x100000c8 0x100000c8 0x00000000 Code RO 1074 .ARM.Collect$$$$0000000A mc_p.l(entry8b.o) 0x100000c8 0x100000c8 0x00000000 Code RO 1233 .ARM.Collect$$$$0000000A mc_p.l(entry8b.o)
0x100000c8 0x100000c8 0x00000008 Code RO 1075 .ARM.Collect$$$$0000000B mc_p.l(entry9a.o) 0x100000c8 0x100000c8 0x00000008 Code RO 1234 .ARM.Collect$$$$0000000B mc_p.l(entry9a.o)
0x100000d0 0x100000d0 0x00000000 Code RO 1077 .ARM.Collect$$$$0000000D mc_p.l(entry10a.o) 0x100000d0 0x100000d0 0x00000000 Code RO 1236 .ARM.Collect$$$$0000000D mc_p.l(entry10a.o)
0x100000d0 0x100000d0 0x00000000 Code RO 1079 .ARM.Collect$$$$0000000F mc_p.l(entry11a.o) 0x100000d0 0x100000d0 0x00000000 Code RO 1238 .ARM.Collect$$$$0000000F mc_p.l(entry11a.o)
0x100000d0 0x100000d0 0x00000004 Code RO 1068 .ARM.Collect$$$$00002712 mc_p.l(entry2.o) 0x100000d0 0x100000d0 0x00000004 Code RO 1227 .ARM.Collect$$$$00002712 mc_p.l(entry2.o)
0x100000d4 0x100000d4 0x0000001c Code RO 720 .text startup_cmsdk_cm0.o 0x100000d4 0x100000d4 0x0000001c Code RO 873 .text startup_cmsdk_cm0.o
0x100000f0 0x100000f0 0x0000002c Code RO 737 .text mc_p.l(uidiv.o) 0x100000f0 0x100000f0 0x0000002c Code RO 894 .text mc_p.l(uidiv.o)
0x1000011c 0x1000011c 0x000000f0 Code RO 1032 .text mf_p.l(ddiv.o) 0x1000011c 0x1000011c 0x00000024 Code RO 896 .text mc_p.l(memcpya.o)
0x1000020c 0x1000020c 0x00000028 Code RO 1034 .text mf_p.l(dflti.o) 0x10000140 0x10000140 0x00000024 Code RO 898 .text mc_p.l(memseta.o)
0x10000234 0x10000234 0x0000001c Code RO 1036 .text mf_p.l(dfltui.o) 0x10000164 0x10000164 0x000000f0 Code RO 1191 .text mf_p.l(ddiv.o)
0x10000250 0x10000250 0x0000003c Code RO 1038 .text mf_p.l(dfixui.o) 0x10000254 0x10000254 0x00000028 Code RO 1193 .text mf_p.l(dflti.o)
0x1000028c 0x1000028c 0x00000022 Code RO 1083 .text mc_p.l(llushr.o) 0x1000027c 0x1000027c 0x0000001c Code RO 1195 .text mf_p.l(dfltui.o)
0x100002ae 0x100002ae 0x00000000 Code RO 1094 .text mc_p.l(iusefp.o) 0x10000298 0x10000298 0x0000003c Code RO 1197 .text mf_p.l(dfixui.o)
0x100002ae 0x100002ae 0x000000be Code RO 1095 .text mf_p.l(depilogue.o) 0x100002d4 0x100002d4 0x00000022 Code RO 1242 .text mc_p.l(llushr.o)
0x1000036c 0x1000036c 0x00000164 Code RO 1099 .text mf_p.l(dadd.o) 0x100002f6 0x100002f6 0x00000000 Code RO 1253 .text mc_p.l(iusefp.o)
0x100004d0 0x100004d0 0x000000d0 Code RO 1101 .text mf_p.l(dmul.o) 0x100002f6 0x100002f6 0x000000be Code RO 1254 .text mf_p.l(depilogue.o)
0x100005a0 0x100005a0 0x0000002c Code RO 1103 .text mf_p.l(dscalb.o) 0x100003b4 0x100003b4 0x00000164 Code RO 1258 .text mf_p.l(dadd.o)
0x100005cc 0x100005cc 0x00000028 Code RO 1107 .text mf_p.l(cdrcmple.o) 0x10000518 0x10000518 0x000000d0 Code RO 1260 .text mf_p.l(dmul.o)
0x100005f4 0x100005f4 0x00000024 Code RO 1109 .text mc_p.l(init.o) 0x100005e8 0x100005e8 0x0000002c Code RO 1262 .text mf_p.l(dscalb.o)
0x10000618 0x10000618 0x00000020 Code RO 1111 .text mc_p.l(llshl.o) 0x10000614 0x10000614 0x00000028 Code RO 1266 .text mf_p.l(cdrcmple.o)
0x10000638 0x10000638 0x00000026 Code RO 1113 .text mc_p.l(llsshr.o) 0x1000063c 0x1000063c 0x00000024 Code RO 1268 .text mc_p.l(init.o)
0x1000065e 0x1000065e 0x000000a2 Code RO 1115 .text mf_p.l(dsqrt.o) 0x10000660 0x10000660 0x00000020 Code RO 1270 .text mc_p.l(llshl.o)
0x10000700 0x10000700 0x0000001a Code RO 509 i.CMSDK_timer_Init ens1_timer.o 0x10000680 0x10000680 0x00000026 Code RO 1272 .text mc_p.l(llsshr.o)
0x1000071a 0x1000071a 0x00000002 PAD 0x100006a6 0x100006a6 0x000000a2 Code RO 1274 .text mf_p.l(dsqrt.o)
0x1000071c 0x1000071c 0x00000020 Code RO 391 i.ClockInit ens1_clock.o 0x10000748 0x10000748 0x0000001a Code RO 514 i.CMSDK_timer_Init ens1_timer.o
0x1000073c 0x1000073c 0x00000164 Code RO 392 i.ClockInitSet ens1_clock.o 0x10000762 0x10000762 0x00000002 PAD
0x100008a0 0x100008a0 0x0000005c Code RO 260 i.GPIO_AltFunction ens1_gpio.o 0x10000764 0x10000764 0x00000018 Code RO 396 i.ClockInit ens1_clock.o
0x100008fc 0x100008fc 0x00000018 Code RO 263 i.GPIO_GetOutputValue ens1_gpio.o 0x1000077c 0x1000077c 0x00000164 Code RO 397 i.ClockInitSet ens1_clock.o
0x10000914 0x10000914 0x0000015c Code RO 264 i.GPIO_IO_Init ens1_gpio.o 0x100008e0 0x100008e0 0x00000018 Code RO 769 i.EMS_Configure ens1_wavegen.o
0x10000a70 0x10000a70 0x00000028 Code RO 266 i.GPIO_Output ens1_gpio.o 0x100008f8 0x100008f8 0x00000068 Code RO 770 i.EMS_Process ens1_wavegen.o
0x10000a98 0x10000a98 0x00000028 Code RO 267 i.GPIO_Overturn ens1_gpio.o 0x10000960 0x10000960 0x00000028 Code RO 771 i.EMS_Start ens1_wavegen.o
0x10000ac0 0x10000ac0 0x00000014 Code RO 268 i.GPIO_ResetOutput ens1_gpio.o 0x10000988 0x10000988 0x00000040 Code RO 772 i.EMS_Stop ens1_wavegen.o
0x10000ad4 0x10000ad4 0x00000014 Code RO 269 i.GPIO_SetOutput ens1_gpio.o 0x100009c8 0x100009c8 0x0000005c Code RO 265 i.GPIO_AltFunction ens1_gpio.o
0x10000ae8 0x10000ae8 0x00000004 Code RO 334 i.MTP_init ens1_mtp.o 0x10000a24 0x10000a24 0x00000018 Code RO 268 i.GPIO_GetOutputValue ens1_gpio.o
0x10000aec 0x10000aec 0x00000014 Code RO 80 i.NVIC_ClearPendingIRQ ens1_uart.o 0x10000a3c 0x10000a3c 0x0000015c Code RO 269 i.GPIO_IO_Init ens1_gpio.o
0x10000b00 0x10000b00 0x00000014 Code RO 517 i.NVIC_ClearPendingIRQ ens1_timer.o 0x10000b98 0x10000b98 0x00000028 Code RO 271 i.GPIO_Output ens1_gpio.o
0x10000b14 0x10000b14 0x00000014 Code RO 81 i.NVIC_DisableIRQ ens1_uart.o 0x10000bc0 0x10000bc0 0x00000028 Code RO 272 i.GPIO_Overturn ens1_gpio.o
0x10000b28 0x10000b28 0x00000014 Code RO 518 i.NVIC_DisableIRQ ens1_timer.o 0x10000be8 0x10000be8 0x00000014 Code RO 273 i.GPIO_ResetOutput ens1_gpio.o
0x10000b3c 0x10000b3c 0x00000014 Code RO 82 i.NVIC_EnableIRQ ens1_uart.o 0x10000bfc 0x10000bfc 0x00000014 Code RO 274 i.GPIO_SetOutput ens1_gpio.o
0x10000b50 0x10000b50 0x00000014 Code RO 519 i.NVIC_EnableIRQ ens1_timer.o 0x10000c10 0x10000c10 0x00000004 Code RO 339 i.MTP_init ens1_mtp.o
0x10000b64 0x10000b64 0x00000018 Code RO 395 i.PCLK_Enable ens1_clock.o 0x10000c14 0x10000c14 0x00000014 Code RO 85 i.NVIC_ClearPendingIRQ ens1_uart.o
0x10000b7c 0x10000b7c 0x00000010 Code RO 688 i.SystemInit system_cmsdk_cm0.o 0x10000c28 0x10000c28 0x00000014 Code RO 522 i.NVIC_ClearPendingIRQ ens1_timer.o
0x10000b8c 0x10000b8c 0x00000054 Code RO 520 i.TIMER0_Handler ens1_timer.o 0x10000c3c 0x10000c3c 0x00000014 Code RO 86 i.NVIC_DisableIRQ ens1_uart.o
0x10000be0 0x10000be0 0x00000040 Code RO 521 i.TIMER0_Init ens1_timer.o 0x10000c50 0x10000c50 0x00000014 Code RO 523 i.NVIC_DisableIRQ ens1_timer.o
0x10000c20 0x10000c20 0x0000001c Code RO 522 i.TIMER1_Handler ens1_timer.o 0x10000c64 0x10000c64 0x00000014 Code RO 87 i.NVIC_EnableIRQ ens1_uart.o
0x10000c3c 0x10000c3c 0x0000006c Code RO 84 i.UART0_Handler ens1_uart.o 0x10000c78 0x10000c78 0x00000014 Code RO 524 i.NVIC_EnableIRQ ens1_timer.o
0x10000ca8 0x10000ca8 0x00000060 Code RO 85 i.UART1_Handler ens1_uart.o 0x10000c8c 0x10000c8c 0x00000018 Code RO 400 i.PCLK_Enable ens1_clock.o
0x10000d08 0x10000d08 0x0000000a Code RO 87 i.UARTLine_THREmpty ens1_uart.o 0x10000ca4 0x10000ca4 0x00000010 Code RO 841 i.SystemInit system_cmsdk_cm0.o
0x10000d12 0x10000d12 0x0000000a Code RO 93 i.UART_INT_TYPE ens1_uart.o 0x10000cb4 0x10000cb4 0x00000020 Code RO 525 i.TIMER0_Handler ens1_timer.o
0x10000d1c 0x10000d1c 0x00000058 Code RO 94 i.UART_ITConfig ens1_uart.o 0x10000cd4 0x10000cd4 0x00000094 Code RO 526 i.TIMER0_Init ens1_timer.o
0x10000d74 0x10000d74 0x000000ac Code RO 95 i.UART_Init ens1_uart.o 0x10000d68 0x10000d68 0x0000001c Code RO 527 i.TIMER1_Handler ens1_timer.o
0x10000e20 0x10000e20 0x0000001e Code RO 104 i.UartPutc ens1_uart.o 0x10000d84 0x10000d84 0x00000008 Code RO 530 i.Time_Manager_GetFlags ens1_timer.o
0x10000e3e 0x10000e3e 0x00000004 Code RO 105 i.WRITE_UART_THRBuff ens1_uart.o 0x10000d8c 0x10000d8c 0x0000001c Code RO 531 i.Time_Manager_Init ens1_timer.o
0x10000e42 0x10000e42 0x00000002 PAD 0x10000da8 0x10000da8 0x000000b8 Code RO 532 i.Time_Manager_Process ens1_timer.o
0x10000e44 0x10000e44 0x00000020 Code RO 788 i.__0printf$1 mc_p.l(printf1.o) 0x10000e60 0x10000e60 0x0000006c Code RO 89 i.UART0_Handler ens1_uart.o
0x10000e64 0x10000e64 0x0000002e Code RO 1097 i.__ARM_clz mf_p.l(depilogue.o) 0x10000ecc 0x10000ecc 0x00000060 Code RO 90 i.UART1_Handler ens1_uart.o
0x10000e92 0x10000e92 0x00000002 PAD 0x10000f2c 0x10000f2c 0x0000000a Code RO 92 i.UARTLine_THREmpty ens1_uart.o
0x10000e94 0x10000e94 0x0000002c Code RO 1054 i.__ARM_fpclassify m_ps.l(fpclassify.o) 0x10000f36 0x10000f36 0x0000000a Code RO 98 i.UART_INT_TYPE ens1_uart.o
0x10000ec0 0x10000ec0 0x000000ac Code RO 1056 i.__kernel_poly m_ps.l(poly.o) 0x10000f40 0x10000f40 0x00000058 Code RO 99 i.UART_ITConfig ens1_uart.o
0x10000f6c 0x10000f6c 0x00000014 Code RO 1040 i.__mathlib_dbl_divzero m_ps.l(dunder.o) 0x10000f98 0x10000f98 0x000000ac Code RO 100 i.UART_Init ens1_uart.o
0x10000f80 0x10000f80 0x00000008 Code RO 1042 i.__mathlib_dbl_infnan2 m_ps.l(dunder.o) 0x10001044 0x10001044 0x0000001e Code RO 109 i.UartPutc ens1_uart.o
0x10000f88 0x10000f88 0x00000010 Code RO 1043 i.__mathlib_dbl_invalid m_ps.l(dunder.o) 0x10001062 0x10001062 0x00000004 Code RO 110 i.WRITE_UART_THRBuff ens1_uart.o
0x10000f98 0x10000f98 0x00000014 Code RO 1044 i.__mathlib_dbl_overflow m_ps.l(dunder.o) 0x10001066 0x10001066 0x00000002 PAD
0x10000fac 0x10000fac 0x00000014 Code RO 1046 i.__mathlib_dbl_underflow m_ps.l(dunder.o) 0x10001068 0x10001068 0x00000020 Code RO 947 i.__0printf$1 mc_p.l(printf1.o)
0x10000fc0 0x10000fc0 0x0000000e Code RO 1121 i.__scatterload_copy mc_p.l(handlers.o) 0x10001088 0x10001088 0x0000002e Code RO 1256 i.__ARM_clz mf_p.l(depilogue.o)
0x10000fce 0x10000fce 0x00000002 Code RO 1122 i.__scatterload_null mc_p.l(handlers.o) 0x100010b6 0x100010b6 0x00000002 PAD
0x10000fd0 0x10000fd0 0x0000000e Code RO 1123 i.__scatterload_zeroinit mc_p.l(handlers.o) 0x100010b8 0x100010b8 0x0000002c Code RO 1213 i.__ARM_fpclassify m_ps.l(fpclassify.o)
0x10000fde 0x10000fde 0x00000002 PAD 0x100010e4 0x100010e4 0x000000ac Code RO 1215 i.__kernel_poly m_ps.l(poly.o)
0x10000fe0 0x10000fe0 0x0000000c Code RO 1089 i.__set_errno mc_p.l(errno.o) 0x10001190 0x10001190 0x00000014 Code RO 1199 i.__mathlib_dbl_divzero m_ps.l(dunder.o)
0x10000fec 0x10000fec 0x00000150 Code RO 795 i._printf_core mc_p.l(printf1.o) 0x100011a4 0x100011a4 0x00000008 Code RO 1201 i.__mathlib_dbl_infnan2 m_ps.l(dunder.o)
0x1000113c 0x1000113c 0x00000014 Code RO 444 i.fputc retarget.o 0x100011ac 0x100011ac 0x00000010 Code RO 1202 i.__mathlib_dbl_invalid m_ps.l(dunder.o)
0x10001150 0x10001150 0x0000004c Code RO 3 i.main mian.o 0x100011bc 0x100011bc 0x00000014 Code RO 1203 i.__mathlib_dbl_overflow m_ps.l(dunder.o)
0x1000119c 0x1000119c 0x000009fc Code RO 725 i.pow m_ps.l(pow.o) 0x100011d0 0x100011d0 0x00000014 Code RO 1205 i.__mathlib_dbl_underflow m_ps.l(dunder.o)
0x10001b98 0x10001b98 0x00000048 Code RO 1060 i.sqrt m_ps.l(sqrt.o) 0x100011e4 0x100011e4 0x0000000e Code RO 1280 i.__scatterload_copy mc_p.l(handlers.o)
0x10001be0 0x10001be0 0x00000088 Data RO 726 .constdata m_ps.l(pow.o) 0x100011f2 0x100011f2 0x00000002 Code RO 1281 i.__scatterload_null mc_p.l(handlers.o)
0x10001c68 0x10001c68 0x00000008 Data RO 1058 .constdata m_ps.l(qnan.o) 0x100011f4 0x100011f4 0x0000000e Code RO 1282 i.__scatterload_zeroinit mc_p.l(handlers.o)
0x10001c70 0x10001c70 0x00000020 Data RO 1119 Region$$Table anon$$obj.o 0x10001202 0x10001202 0x00000002 PAD
0x10001204 0x10001204 0x0000000c Code RO 1248 i.__set_errno mc_p.l(errno.o)
0x10001210 0x10001210 0x00000150 Code RO 954 i._printf_core mc_p.l(printf1.o)
0x10001360 0x10001360 0x00000014 Code RO 724 i.boost_voltage_select_26V ens1_boost.o
0x10001374 0x10001374 0x00000014 Code RO 449 i.fputc retarget.o
0x10001388 0x10001388 0x000000f4 Code RO 3 i.main mian.o
0x1000147c 0x1000147c 0x000009fc Code RO 878 i.pow m_ps.l(pow.o)
0x10001e78 0x10001e78 0x00000020 Code RO 890 i.puts mc_p.l(puts.o)
0x10001e98 0x10001e98 0x00000048 Code RO 1219 i.sqrt m_ps.l(sqrt.o)
0x10001ee0 0x10001ee0 0x00000064 Code RO 774 i.wavegen_Init ens1_wavegen.o
0x10001f44 0x10001f44 0x00000018 Code RO 775 i.wavegen_Start ens1_wavegen.o
0x10001f5c 0x10001f5c 0x00000016 Code RO 776 i.wavegen_Stop ens1_wavegen.o
0x10001f72 0x10001f72 0x00000002 PAD
0x10001f74 0x10001f74 0x000000a8 Code RO 777 i.wavegen_driverA_sine_test ens1_wavegen.o
0x1000201c 0x1000201c 0x0000000a Data RO 4 .constdata mian.o
0x10002026 0x10002026 0x00000002 PAD
0x10002028 0x10002028 0x00000088 Data RO 879 .constdata m_ps.l(pow.o)
0x100020b0 0x100020b0 0x00000008 Data RO 1217 .constdata m_ps.l(qnan.o)
0x100020b8 0x100020b8 0x00000020 Data RO 1278 Region$$Table anon$$obj.o
Execution Region RW_IRAM1 (Exec base: 0x20000000, Load base: 0x10001c90, Size: 0x00000248, Max: 0x00020000, ABSOLUTE) Execution Region RW_IRAM1 (Exec base: 0x20000000, Load base: 0x100020d8, Size: 0x00000270, Max: 0x00020000, ABSOLUTE)
Exec Addr Load Addr Size Type Attr Idx E Section Name Object Exec Addr Load Addr Size Type Attr Idx E Section Name Object
0x20000000 0x10001c90 0x00000016 Data RW 106 .data ens1_uart.o 0x20000000 0x100020d8 0x00000002 Data RW 5 .data mian.o
0x20000016 0x10001ca6 0x00000002 PAD 0x20000002 0x100020da 0x00000002 PAD
0x20000018 0x10001ca8 0x0000000e Data RW 396 .data ens1_clock.o 0x20000004 0x100020dc 0x00000016 Data RW 111 .data ens1_uart.o
0x20000026 0x10001cb6 0x00000002 PAD 0x2000001a 0x100020f2 0x00000002 PAD
0x20000028 0x10001cb8 0x00000008 Data RW 445 .data retarget.o 0x2000001c 0x100020f4 0x0000000e Data RW 401 .data ens1_clock.o
0x20000030 0x10001cc0 0x0000000c Data RW 524 .data ens1_timer.o 0x2000002a 0x10002102 0x00000002 PAD
0x2000003c 0x10001ccc 0x00000008 Data RW 689 .data system_cmsdk_cm0.o 0x2000002c 0x10002104 0x00000008 Data RW 450 .data retarget.o
0x20000044 0x10001cd4 0x00000004 Data RW 1090 .data mc_p.l(errno.o) 0x20000034 0x1000210c 0x0000001c Data RW 534 .data ens1_timer.o
0x20000048 - 0x00000200 Zero RW 717 STACK startup_cmsdk_cm0.o 0x20000050 0x10002128 0x00000008 Data RW 779 .data ens1_wavegen.o
0x20000058 0x10002130 0x00000008 Data RW 842 .data system_cmsdk_cm0.o
0x20000060 0x10002138 0x00000004 Data RW 1249 .data mc_p.l(errno.o)
0x20000064 - 0x0000000a Zero RW 778 .bss ens1_wavegen.o
0x2000006e 0x1000213c 0x00000002 PAD
0x20000070 - 0x00000200 Zero RW 870 STACK startup_cmsdk_cm0.o
============================================================================== ==============================================================================
@ -1020,20 +1145,22 @@ Image component sizes
Code (inc. data) RO Data RW Data ZI Data Debug Object Name Code (inc. data) RO Data RW Data ZI Data Debug Object Name
412 24 0 14 0 3375 ens1_clock.o 20 8 0 0 0 411 ens1_boost.o
404 22 0 14 0 3371 ens1_clock.o
584 30 0 0 0 3766 ens1_gpio.o 584 30 0 0 0 3766 ens1_gpio.o
4 0 0 0 0 391 ens1_mtp.o 4 0 0 0 0 391 ens1_mtp.o
262 58 0 12 0 3619 ens1_timer.o 514 134 0 28 0 5058 ens1_timer.o
578 34 0 22 0 14760 ens1_uart.o 578 34 0 22 0 14760 ens1_uart.o
76 12 0 0 0 42047 mian.o 546 234 0 8 10 4439 ens1_wavegen.o
244 24 10 2 0 44091 mian.o
20 4 0 8 0 2302 retarget.o 20 4 0 8 0 2302 retarget.o
28 8 192 0 512 576 startup_cmsdk_cm0.o 28 8 192 0 512 576 startup_cmsdk_cm0.o
16 8 0 8 0 631 system_cmsdk_cm0.o 16 8 0 8 0 631 system_cmsdk_cm0.o
---------------------------------------------------------------------- ----------------------------------------------------------------------
1984 178 224 68 512 71467 Object Totals 2964 506 236 96 524 79796 Object Totals
0 0 32 0 0 0 (incl. Generated) 0 0 32 0 0 0 (incl. Generated)
4 0 0 4 0 0 (incl. Padding) 6 0 2 6 2 0 (incl. Padding)
---------------------------------------------------------------------- ----------------------------------------------------------------------
@ -1060,7 +1187,10 @@ Image component sizes
32 0 0 0 0 68 llshl.o 32 0 0 0 0 68 llshl.o
38 0 0 0 0 68 llsshr.o 38 0 0 0 0 68 llsshr.o
34 0 0 0 0 68 llushr.o 34 0 0 0 0 68 llushr.o
36 0 0 0 0 60 memcpya.o
36 0 0 0 0 100 memseta.o
368 12 0 0 0 168 printf1.o 368 12 0 0 0 168 printf1.o
32 4 0 0 0 68 puts.o
44 0 0 0 0 72 uidiv.o 44 0 0 0 0 72 uidiv.o
40 2 0 0 0 68 cdrcmple.o 40 2 0 0 0 68 cdrcmple.o
356 4 0 0 0 140 dadd.o 356 4 0 0 0 140 dadd.o
@ -1074,7 +1204,7 @@ Image component sizes
162 0 0 0 0 80 dsqrt.o 162 0 0 0 0 80 dsqrt.o
---------------------------------------------------------------------- ----------------------------------------------------------------------
4960 292 144 4 0 2316 Library Totals 5064 296 144 4 0 2544 Library Totals
4 0 0 0 0 0 (incl. Padding) 4 0 0 0 0 0 (incl. Padding)
---------------------------------------------------------------------- ----------------------------------------------------------------------
@ -1082,11 +1212,11 @@ Image component sizes
Code (inc. data) RO Data RW Data ZI Data Debug Library Name Code (inc. data) RO Data RW Data ZI Data Debug Library Name
2928 220 144 0 0 792 m_ps.l 2928 220 144 0 0 792 m_ps.l
614 34 0 4 0 572 mc_p.l 718 38 0 4 0 800 mc_p.l
1414 38 0 0 0 952 mf_p.l 1414 38 0 0 0 952 mf_p.l
---------------------------------------------------------------------- ----------------------------------------------------------------------
4960 292 144 4 0 2316 Library Totals 5064 296 144 4 0 2544 Library Totals
---------------------------------------------------------------------- ----------------------------------------------------------------------
@ -1095,15 +1225,15 @@ Image component sizes
Code (inc. data) RO Data RW Data ZI Data Debug Code (inc. data) RO Data RW Data ZI Data Debug
6944 470 368 72 512 71551 Grand Totals 8028 802 380 100 524 79448 Grand Totals
6944 470 368 72 512 71551 ELF Image Totals 8028 802 380 100 524 79448 ELF Image Totals
6944 470 368 72 0 0 ROM Totals 8028 802 380 100 0 0 ROM Totals
============================================================================== ==============================================================================
Total RO Size (Code + RO Data) 7312 ( 7.14kB) Total RO Size (Code + RO Data) 8408 ( 8.21kB)
Total RW Size (RW Data + ZI Data) 584 ( 0.57kB) Total RW Size (RW Data + ZI Data) 624 ( 0.61kB)
Total ROM Size (Code + RO Data + RW Data) 7384 ( 7.21kB) Total ROM Size (Code + RO Data + RW Data) 8508 ( 8.31kB)
============================================================================== ==============================================================================

Binary file not shown.

View File

@ -22,12 +22,23 @@ Dialog DLL: TARMCM1.DLL V1.14.6.0
<h2>Project:</h2> <h2>Project:</h2>
E:\Workspace\TIMER_DEMO\ENS001_BASIC_PRJ.uvprojx E:\Workspace\TIMER_DEMO\ENS001_BASIC_PRJ.uvprojx
Project File Date: 08/13/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 6 (build 750)', folder: 'D:\Keil_v5\ARM\ARM_Compiler_5.06u7\Bin'
Build target 'ENS001_BASIC_PRJ' Build target 'ENS001_BASIC_PRJ'
".\Objects\ENS001_BASIC_PRJ.axf" - 0 Error(s), 0 Warning(s). compiling mian.c...
USER\mian.c(31): warning: #223-D: function "GPIO_IO_Init" declared implicitly
GPIO_IO_Init(GPIO_19, OUTPUT, 0x00, 0x02, 0x00, 0x00, ENABLE);
USER\mian.c: 1 warning, 0 errors
compiling ENS1_WAVEGEN.c...
.\FWLIB\include\ENS1_BOOST.h(37): warning: #1-D: last line of file ends without a newline
#endif
FWLIB\source\ENS1_WAVEGEN.c: 1 warning, 0 errors
linking...
Program Size: Code=8028 RO-data=380 RW-data=100 ZI-data=524
FromELF: creating hex file...
".\Objects\ENS001_BASIC_PRJ.axf" - 0 Error(s), 2 Warning(s).
<h2>Software Packages used:</h2> <h2>Software Packages used:</h2>
@ -40,7 +51,7 @@ Package Vendor: ARM
D:/Keil_v5/ARM/Packs/ARM/Cortex_DFP/1.1.0/Device/ARMCM0/Include D:/Keil_v5/ARM/Packs/ARM/Cortex_DFP/1.1.0/Device/ARMCM0/Include
<h2>Collection of Component Files used:</h2> <h2>Collection of Component Files used:</h2>
Build Time Elapsed: 00:00:00 Build Time Elapsed: 00:00:01
</pre> </pre>
</body> </body>
</html> </html>

View File

@ -1,465 +1,535 @@
:020000041000EA :020000041000EA
:1000000048020020D5000010DD000010DF000010C5 :1000000070020020D5000010DD000010DF0000109D
:1000100000000000000000000000000000000000E0 :1000100000000000000000000000000000000000E0
:10002000000000000000000000000000E1000010DF :10002000000000000000000000000000E1000010DF
:100030000000000000000000E3000010E5000010D8 :100030000000000000000000E3000010E5000010D8
:10004000E7000010E7000010E7000010E7000010D4 :10004000E7000010E7000010E7000010E7000010D4
:10005000E7000010E7000010E7000010E7000010C4 :10005000E7000010E7000010E7000010E7000010C4
:10006000E7000010E7000010E7000010E7000010B4 :10006000E7000010E7000010E7000010E7000010B4
:100070003D0C0010A90C0010E7000010E700001074 :10007000610E0010CD0E0010E7000010E700001028
:10008000E7000010E7000010E7000010E700001094 :10008000E7000010E7000010E7000010E700001094
:10009000E70000108D0B0010210C0010E70000108D :10009000E7000010B50C0010690D0010E70000101B
:1000A000E7000010E7000010000000000000000062 :1000A000E7000010E7000010000000000000000062
:1000B0000000000000000000000000000000000040 :1000B0000000000000000000000000000000000040
:1000C0000348854600F096FA004800475111001099 :1000C0000348854600F0BAFA00480047891300103B
:1000D000480200200448804704480047FEE7FEE746 :1000D000700200200448804704480047FEE7FEE71E
:1000E000FEE7FEE7FEE7FEE77D0B0010C100001013 :1000E000FEE7FEE7FEE7FEE7A50C0010C1000010EA
:1000F00030B50B46014600202022012409E00D46C0 :1000F00030B50B46014600202022012409E00D46C0
:10010000D5409D4205D31D469540491B2546954047 :10010000D5409D4205D31D469540491B2546954047
:1001100040191546521E002DF1DC30BDF0B50C46DD :1001100040191546521E002DF1DC30BD03460B433D
:100120005C4085B0E40FE40703944C0000266408AB :100120009B0703D009E008C9121F08C0042AFAD2AD
:1001300059009446490802460296224321D062465D :1001300003E00B780370401C491C521EF9D2704733
:100140000A431ED06200570D4A000E032303550DCB :10014000D2B201E00270401C491EFBD2704700226F
:10015000012402462C492405781B1B0B360B401842 :10015000F6E710B513460A4604461946FFF7F0FFC6
:1001600023432643614600901C46501AB44103D3F2 :10016000204610BDF0B50C465C4085B0E40FE407B6
:100170000098401C009002E0921800985B41002813 :1001700003944C000026640859009446490802463E
:1001800003DA0020014605B0F0BD00200121090579 :100180000296224321D062460A431ED06200570DD8
:100190000746864611E064461D46141BB54106D34A :100190004A000E032303550D012402462C49240571
:1001A0006546521BB341744607430C43A646CD0730 :1001A000781B1B0B360B40182343264361460090F7
:1001B00040084908284392185B4105460D43EAD19F :1001B0001C46501AB44103D30098401C009002E042
:1001C0001046184313D0604619465040714008430A :1001C000921800985B41002803DA0020014605B030
:1001D00006D06046101AB34106D20122002306E081 :1001D000F0BD0020012109050746864611E064466E
:1001E00000220123DB0702E00122D24353100098D2 :1001E0001D46141BB54106D36546521BB3417446E8
:1001F00074460105381C6141029C039D0019694148 :1001F00007430C43A646CD074008490828439218F8
:1002000000F055F8BFE70000FD0300000EB5C2176F :100200005B4105460D43EAD11046184313D06046C2
:10021000C10F5040CA0740180021054B02930192BC :10021000194650407140084306D06046101AB34159
:1002200000910A460B4600F04FF803B000BD0000F5 :1002200006D20122002306E000220123DB0702E0C0
:10023000330400000EB505490291002100910A46E1 :100230000122D2435310009874460105381C6141D5
:100240000B46019100F040F803B000BD33040000FC :10024000029C039D0019694100F055F8BFE70000CA
:100250004A0009030123090B1B051943094B10B57B :10025000FD0300000EB5C217C10F5040CA07401879
:10026000520D9A4201DA002010BD064B34339A42F7 :100260000021054B0293019200910A460B4600F0D3
:1002700003DC9A1A00F00AF810BD034951188840AF :100270004FF803B000BD0000330400000EB505497F
:1002800010BD0000FF030000CDFBFFFF10B5202ACA :100280000291002100910A460B46019100F040F8CE
:1002900004DB0846203AD040002110BD0B46D34075 :1002900003B000BD330400004A0009030123090B29
:1002A000D0402024A21A91400843194610BD10B531 :1002A0001B051943094B10B5520D9A4201DA002083
:1002B000002B08DA0024401C614192185B411A436C :1002B00010BD064B34339A4203DC9A1A00F00AF858
:1002C00001D14008400010BDF0B51FB482B0054612 :1002C00010BD03495118884010BD0000FF03000015
:1002D0000C0003D0084600F0C5FD02E000F0C2FDAE :1002D000CDFBFFFF10B5202A04DB0846203AD040B2
:1002E0002030024600902146284600F095F9049BF4 :1002E000002110BD0B46D340D0402024A21A9140DB
:1002F000059A04460F4618431143084314D0184684 :1002F0000843194610BD10B5002B08DA0024401C35
:1003000010431BD0009840210A1A18460599FFF7A0 :10030000614192185B411A4301D14008400010BD81
:10031000BDFF05460E46009A0599049800F07CF949 :10031000F0B51FB482B005460C0003D0084600F0CB
:10032000084305D0012004E02046394607B0F0BD5F :10032000B3FE02E000F0B0FE20300246009021460D
:100330000020C11705430E432C43374300990E9804 :10033000284600F095F9049B059A04460F46184399
:100340006305401A7905E40A00220C43FD0A0A30CD :100340001143084314D0184610431BD00098402195
:1003500002D500200146E9E70105101969410C9C0E :100350000A1A18460599FFF7BDFF05460E46009A92
:100360000D9D00196941FFF7A2FFDFE7F0B50746D1 :100360000599049800F07CF9084305D0012004E0C9
:100370000846584087B0C00F049048000E46590008 :100370002046394607B0F0BD0020C11705430E43A3
:1003800040084908BC1A884105D2384631461E4605 :100380002C43374300990E986305401A7905E40A17
:1003900017460B4602465800400810434CD0300D1B :1003900000220C43FD0A0A3002D500200146E9E79D
:1003A000039040055900400D490D0590401A0290F8 :1003A0000105101969410C9C0D9D00196941FFF769
:1003B000402872DA18030121000B09050843019057 :1003B000A2FFDFE7F0B507460846584087B0C00FF8
:1003C00004980092002805D00199524200208841EB :1003C000049048000E46590040084908BC1A88416C
:1003D00000920190029840210A1A0199009800F0B9 :1003D00005D2384631461E4617460B46024658009F
:1003E0001BF905460C466B4607CB00F025F9C019F2 :1003E000400810434CD0300D039040055900400D9B
:1003F0007141039A0E0D0023D71756401A467A40D2 :1003F000490D0590401A0290402872DA1803012135
:10040000164344D0049A002A2DD0029A012A039A56 :10040000000B09050843019004980092002805D0CC
:1004100015DC1205C01A914101263605001C7141F8 :1004100001995242002088410092019002984021A7
:10042000D20F059ED2070093019202962A462346D8 :100420000A1A0199009800F01BF905460C466B4624
:10043000FFF74AFF07B0F0BD38463146FAE7160528 :1004300007CB00F025F9C0197141039A0E0D002376
:10044000224A0F46B218C01AB74101210905001C03 :10044000D71756401A467A40164344D0049A002AD9
:100450004F4100187F41114618187941E20F1043AF :100450002DD0029A012A039A15DC1205C01A914187
:100460006D19644113E0E2076D0815436408C20783 :1004600001263605001C7141D20F059ED20700936C
:100470001443039A01261205C01A91413605001C47 :10047000019202962A462346FFF74AFF07B0F0BDD5
:100480007141CE07400830434908C01851412A46FF :1004800038463146FAE71605224A0F46B218C01A16
:100490002346FFF70CFFCDE7FFE704980122400059 :10049000B74101210905001C4F4100187F41114659
:1004A000C117121A00238B4104983146C417381A19 :1004A00018187941E20F10436D19644113E0E20717
:1004B000A141EEE730B40124E407634030BC55E7C6 :1004B0006D0815436408C2071443039A0126120508
:1004C00030B40124E407614030BC4FE70000E0FF96 :1004C000C01A91413605001C7141CE0740083043E7
:1004D000F0B51FB488B00B990998002448400999D9 :1004D0004908C01851412A462346FFF70CFFCDE7D3
:1004E000C00F490049080991C0070B9900904900C5 :1004E000FFE7049801224000C117121A00238B4134
:1004F00049080B9109990898A64608431CD00B9906 :1004F00004983146C417381AA141EEE730B40124FC
:100500000A98084318D0099801244000420D480079 :10050000E407634030BC55E730B40124E4076140A0
:10051000410D099824050003000B204309900B9816 :1005100030BC4FE70000E0FFF0B51FB488B00B9986
:100520000003000B20430B9050181C494018002278 :100520000998002448400999C00F490049080991D9
:1005300001901446104605E0002001460DB0F0BDC4 :10053000C0070B990090490049080B910999089848
:10054000032801DA034600E003239C46C11A0AAEE1 :10054000A64608431CD00B990A98084318D009986E
:100550000AE05F0008ADED5B4F00F75B7D430027CD :1005500001244000420D4800410D09982405000384
:10056000AA187C41491C5B1E6145F2DD410004ABC9 :10056000000B204309900B980003000B20430B90D5
:100570005A522104120C0A43240C401C0828DFDBC9 :1005700050181C494018002201901446104605E00E
:10058000019802900099704601910090059B049A91 :10058000002001460DB0F0BD032801DA034600E06B
:1005900007990698FFF798FED0E700000DFCFFFFD3 :1005900003239C46C11A0AAE0AE05F0008ADED5B7A
:1005A00070B54B005B0803430BD04B005C0D00267D :1005A0004F00F75B7D430027AA187C41491C5B1E66
:1005B00033466542B341D417AD1AA34102DB002094 :1005B0006145F2DD410004AB5A522104120C0A439A
:1005C000014670BD12053018514170BD10B50029AB :1005C000240C401C0828DFDB01980290009970463B
:1005D00004DB0124E40740428C412146002B04DB6C :1005D00001910090059B049A07990698FFF798FEF1
:1005E0001C460123DB075242A341994200D19042AD :1005E000D0E700000DFCFFFF70B54B005B08034334
:1005F00010BD0000064C0125064E05E0E36807CC5F :1005F0000BD04B005C0D002633466542B341D41747
:100600002B430C3C98471034B442F7D3FFF75CFD02 :10060000AD1AA34102DB0020014670BD120530186F
:10061000701C0010901C001010B5202A04DB01464D :10061000514170BD10B5002904DB0124E4074042BC
:10062000203A9140002010BD914020239C1A03469F :100620008C412146002B04DB1C460123DB07524290
:10063000E3401943904010BD10B5202A06DBCB17CC :10063000A341994200D1904210BD0000064C012513
:100640000846203A1041C1170B4306E00B46134100 :10064000064E05E0E36807CC2B430C3C984710347A
:10065000D0402024A21A91400843194610BDFEB58F :10065000B442F7D3FFF738FDB8200010D8200010BF
:1006600000231A461B1A8A4103DB0020014603B00F :1006600010B5202A04DB0146203A9140002010BD3D
:10067000F0BD4A000D0301212D0B0905520D0D435C :10067000914020239C1A0346E3401943904010BD4B
:10068000D10702D100186D41521E5110FF31FF31C8 :1006800010B5202A06DBCB170846203A1041C117C7
:100690000131002704463E46384600970191024644 :100690000B4306E00B461341D0402024A21A9140A0
:1006A000012100200905FFF7F1FDC3197141F81878 :1006A0000843194610BDFEB500231A461B1A8A419D
:1006B000324684468E464A4161462846611A904138 :1006B00003DB0020014603B0F0BD4A000D03012119
:1006C00004D36046241A954176461F4624190098A3 :1006C0002D0B0905520D0D43D10702D100186D41C4
:1006D0006D41401C00903428E1DDF919304670412D :1006D000521E5110FF31FF310131002704463E46C2
:1006E000091BA84103D20022D243134601E0002295 :1006E0003846009701910246012100200905FFF7D5
:1006F000134601980105381C7141FFF7D8FDB6E794 :1006F000F1FDC3197141F818324684468E464A41CD
:1007000010B51346002241608160002B01D00824FF :1007000061462846611A904104D36046241A9541F7
:10071000224301242243026010BD000010B50448AA :1007100076461F46241900986D41401C00903428ED
:1007200000F00CF80349086000200349486110BD3F :10072000E1DDF91930467041091BA84103D20022CE
:100730001C0000201800002000000240F0B587B027 :10073000D243134601E00022134601980105381CFC
:1007400004460027544800682178090408435249A8 :100740007141FFF7D8FDB6E710B5134600224160AE
:100750000860207800281AD10846406861780901AD :100750008160002B01D0082422430124224302603F
:1007600008434D4948606178881CFFF74FFD0246F9 :1007600010BD000010B5034800F008F80249086009
:100770000B460591049000200121890700F00EFD31 :1007700010BD0000200000201C000020F0B587B054
:100780000546FFF765FDC7B244494F4328E020788E :100780000446002754480068217809040843524968
:10079000012803D1A77841494F4321E0207802285E :100790000860207800281AD108464068617809016D
:1007A00001D187031CE02078032801D1A78817E036 :1007A00008434D4948606178881CFFF753FD0246B5
:1007B00039484068617809010843374948606178E1 :1007B0000B460591049000200121890700F05EFEA0
:1007C000881CFFF723FD02460B460591049000208C :1007C0000546FFF769FDC7B244494F4328E020784A
:1007D0000121890700F0E2FC0546FFF739FDC7B2A9 :1007D000012803D1A77841494F4321E0207802281E
:1007E0002D480068A17908432B49086000BF2A48BA :1007E00001D187031CE02078032801D1A78817E0F6
:1007F00000684007C00F0028F9D127480068217A17 :1007F00039484068617809010843374948606178A1
:10080000090208432449086008460068E1790903A1 :10080000881CFFF727FD02460B4605910490002047
:10081000084321490860207A00281BDD217AC81E80 :100810000121890700F032FE0546FFF73DFDC7B212
:10082000FFF7F4FC05462A460B4600200121890704 :100820002D480068A17908432B49086000BF2A4879
:1008300000F0B4FC039102903846FFF7FBFC0191F5 :1008300000684007C00F0028F9D127480068217AD6
:100840000090039B029AFFF769FC05910490FFF763 :10084000090208432449086008460068E179090361
:10085000FFFC0746E07900281BDDE179C81EFFF7A1 :10085000084321490860207A00281BDD217AC81E40
:10086000D5FC05462A460B4600200121890700F0E9 :10086000FFF7F8FC05462A460B46002001218907C0
:1008700095FC039102903846FFF7DCFC0191009053 :1008700000F004FE039102903846FFF7FFFC01915F
:10088000039B029AFFF74AFC05910490FFF7E0FCF6 :100880000090039B029AFFF76DFC05910490FFF71F
:100890000746384607B0F0BD0000024040420F0056 :1008900003FD0746E07900281BDDE179C81EFFF75C
:1008A00010B502460F2A14DD1348806B1346103B27 :1008A000D9FC05462A460B4600200121890700F0A5
:1008B0005C000323A34098430F4B98631846806B5A :1008B000E5FD039102903846FFF7E0FC01910090BE
:1008C0001346103B5C000B46A34018430A4B986349 :1008C000039B029AFFF74EFC05910490FFF7E4FCAE
:1008D0000FE00948406B54000323A3409843064BA4 :1008D0000746384607B0F0BD0000024040420F0016
:1008E00058631846406B54000B46A3401843024B14 :1008E00010B50446002C04D00A2221460148FFF727
:1008F0005863002010BD000000100240014604486B :1008F00015FC10BD6400002010B5154800780028D4
:10090000406801228A401040C840C0B270470000D1 :1009000024D014480068401C12490860084600685A
:1009100000100240FFB504460D461E460B9F002105 :1009100005210902884205D20F4881880F4801F05D
:100920002046FFF7BDFF012D10D1012F0ED14F48FA :1009200029FB13E00B4800680521090488420DD318
:1009300000690121A14088434C490861084640698B :1009300008480068C911884205D2074881880748DD
:100940000121A1400843494948613BE0012D10D1F4 :1009400001F018FB02E000200249086010BD000021
:10095000002F0ED1454800690121A1408843434939 :1009500050000020540000206400002000C000402F
:100960000861084640690121A14088433F49486128 :1009600010B501F0EFFA02A000F07EFB10BD000010
:1009700028E0002D14D1012F12D13C4840690121FB :10097000E794B5E588BAE6BF80E5B7B2E590AFE5A4
:10098000A140884339494861084600690121A140D6 :100980008AA85C6E0000000010B5002005490870C0
:10099000084336490861099848620298086311E0E3 :1009900005490860054801F0E1FA05A000F064FB94
:1009A000002D0FD1002F0DD1304800690121A14049 :1009A00010BD0000500000205400002000C0004096
:1009B00088432E490861084640690121A1408843C7 :1009B000E794B5E588BAE6BF80E5B7B2E5819CE685
:1009C0002A494861022E0ED1284880690121A140A0 :1009C000ADA25C6E0000000010B502460F2A14DDD7
:1009D0008843264988610846C1690120A0408143B7 :1009D0001348806B1346103B5C000323A3409843ED
:1009E0002248C1611FE0002E0ED1204880690121FC :1009E0000F4B98631846806B1346103B5C000B4618
:1009F000A14008431D4988610846C0690121A14002 :1009F000A34018430A4B98630FE00948406B54002A
:100A000088431A49C8610EE0012E0CD1174881694C :100A00000323A3409843064B58631846406B540099
:100A10000120A040814315488161C0690121A140A6 :100A10000B46A3401843024B5863002010BD000052
:100A200008431249C8611148816A0120A0408143EE :100A20000010024001460448406801228A401040FC
:100A30000E488162806A0A99C907C90FA14008431C :100A3000C840C0B27047000000100240FFB5044635
:100A40000A4988620846C06A0121A14088430749D3 :100A40000D461E460B9F00212046FFF7BDFF012DDE
:100A5000C8620846C06A0A998907C90FA1400843BD :100A500010D1012F0ED14F4800690121A1408843D8
:100A60000249C862002004B0F0BD0000001002403E :100A60004C490861084640690121A14008434949B1
:100A7000012907D1074A5268012383401A43054BD5 :100A700048613BE0012D10D1002F0ED1454800699F
:100A80005A6006E0034A5268012383409A43014BAF :100A80000121A1408843434908610846406901218A
:100A90005A6070470010024000B503461846FFF741 :100A9000A14088433F49486128E0002D14D1012F2F
:100AA0002DFF012803D1184600F00AF807E0184688 :100AA00012D13C4840690121A1408843394948613D
:100AB000FFF724FF002802D1184600F00BF800BD14 :100AB000084600690121A1400843364908610998A8
:100AC00003494968012282409143014A51607047BD :100AC00048620298086311E0002D0FD1002F0DD16C
:100AD0000010024003494968012282401143014A43 :100AD000304800690121A14088432E490861084639
:100AE000516070470010024000207047C206D20ECD :100AE00040690121A14088432A494861022E0ED164
:100AF00001219140014A11607047000080E200E04E :100AF000284880690121A140884326498861084629
:100B0000C206D20E01219140014A116070470000D7 :100B0000C1690120A04081432248C1611FE0002E3D
:100B100080E200E0C206D20E01219140014A11603C :100B10000ED1204880690121A14008431D49886108
:100B20007047000080E100E0C206D20E0121914032 :100B20000846C0690121A14088431A49C8610EE006
:100B3000014A11607047000080E100E0C206D20E59 :100B3000012E0CD1174881690120A040814315483E
:100B400001219140014A11607047000000E100E07E :100B40008161C0690121A14008431249C86111486F
:100B5000C206D20E01219140014A11607047000087 :100B5000816A0120A04081430E488162806A0A991F
:100B600000E100E001460448406901228A40104348 :100B6000C907C90FA14008430A4988620846C06AFC
:100B7000014A5061002070470000024001480249CC :100B70000121A14088430749C8620846C06A0A9912
:100B80000860704700E1F5054000002010B5012025 :100B80008907C90FA14008430249C862002004B088
:100B90000E49C8600E480068401C0D4908607D2160 :100B9000F0BD000000100240012907D1074A526849
:100BA000C9000B480068FFF7A3FA00290CD11320F5 :100BA000012383401A43054B5A6006E0034A52680A
:100BB000FFF772FF07480068401C064908600846B6 :100BB000012383409A43014B5A6070470010024062
:100BC000016805A000F03EF910BD00000080004063 :100BC00000B503461846FFF72DFF012803D118464C
:100BD0003000002034000020256420730A0000004B :100BD00000F00AF807E01846FFF724FF002802D1CA
:100BE00070B504460820FFF7BDFF1520FFF79CFFF6 :100BE000184600F00BF800BD034949680122824015
:100BF0001520FFF785FF7D21C90007480068FFF732 :100BF0009143014A5160704700100240034949681F
:100C000077FA60430546012229460448FFF778FD3C :100C0000012282401143014A5160704700100240A6
:100C10001520FFF79DFF70BD1800002000800040E8 :100C100000207047C206D20E01219140014A1160A6
:100C200001200449C86004480068401C024908606B :100C20007047000080E200E0C206D20E0121914030
:100C300070470000009000403800002010B50024EC :100C3000014A11607047000080E200E0C206D20E57
:100C40000C20FFF753FF0120800700F062F8032813 :100C400001219140014A11607047000080E100E0FD
:100C500006D10120800740680421884309074860C5 :100C5000C206D20E01219140014A11607047000086
:100C60000120800700F055F8022805D001208007F8 :100C600080E100E0C206D20E01219140014A1160EC
:100C700000F04FF8062816D1012080074068400890 :100C70007047000000E100E0C206D20E0121914061
:100C8000400001218907486008460068C4B2214637 :100C8000014A11607047000000E100E0014604489D
:100C90000120800700F0C4F801208007406801218E :100C9000406901228A401043014A50610020704798
:100CA00008438907486010BD10B500240D20FFF7E8 :100CA00000000240014802490860704700E1F50574
:100CB0001DFF144800F02DF8032805D111484068A5 :100CB0005C00002000B501200449C86004480068B9
:100CC000042188430F4948600E4800F022F80228AA :100CC000401C0349086000F06FF800BD0080004040
:100CD00004D00C4800F01DF8062812D109484068DD :100CD0004400002070B504460820FFF7D7FF152018
:100CE000400840000749486008460068C4B22146F1 :100CE000FFF7B6FF1520FFF79FFF7D21C9000B48D6
:100CF000044800F095F80348406801210843014981 :100CF0000068FFF7FDF960430546294608A000F0AB
:100D0000486010BD00100040014648698006C00FD1 :100D0000B3F9012229460C48FFF71EFD1520FFF715
:100D10007047014688680007400F704770B5044669 :100D1000B3FF214609A000F0A7F970BD1C00002018
:100D20000D461348844206D10D20FFF7F3FE0D2037 :100D200054494D455230E9878DE8A385E8BDBDE5BE
:100D3000FFF7DCFE09E001208007844205D10C208A :100D300080BC3A2025640A000080004054494D459B
:100D4000FFF7E8FE0C20FFF7D1FE60682978084322 :100D400052305F496E6974E5AE8CE68890EFBC8CDA
:100D500060600748844203D10D20FFF7EFFE06E0F4 :100D5000E4B8ADE696ADE591A8E69C9F3A202564FF
:100D600001208007844202D10C20FFF7E7FE70BD0E :100D6000206D730A0000000001200449C860044897
:100D700000100040F8B504460D460120800784426B :100D70000068401C02490860704700000090004075
:100D80000BD10020FFF7EEFE01210220FFF788FDC6 :100D80004C000020004870473400002010B50621B8
:100D900001210320FFF784FD0DE01F4884420AD1A2 :100D90000348FFF7DCF908210248FFF7D8F910BD36
:100DA0000120FFF7DFFE01210C20FFF779FD012173 :100DA000340000203A0000202B480078401C2A49DB
:100DB0000D20FFF775FD606BC007C00F002801D143 :100DB000087008464078401C487008468078401CFF
:100DC000102700E00D27154869680068FFF790F9C3 :100DC00088700846C078401CC87008460079401CEE
:100DD00039460090FFF78CF9401E86B21120304052 :100DD00008710846C088401CC88008460078022870
:100DE000206211200002304000126062A068E968B1 :100DE00004DB0020087001201C4908701A48407874
:100DF000097889010843A060E8688078012803D158 :100DF000062805DB00201849487001201749487073
:100E0000A06801210843A060287A012803D1206945 :100E0000154880780A2805DB0020134988700120E6
:100E1000202108432061F8BD001000401800002088 :100E1000124988701048C078142805DB00200E495C
:100E200000B503460A4600BF1846FFF76DFF0028CD :100E2000C87001200D49C8700B480079642805DBA3
:100E3000FAD01146184600F002F8104600BD0160D5 :100E30000020094908710120084908710648C08846
:100E4000704700000FB410B503A9044B044A029880 :100E40007D21C900884205DB00200349C8800120BC
:100E500000F0CCF810BC08BC04B018473D110010DD :100E500002494871704700003A0000203400002029
:100E6000280000202021020C01D010211046020A87 :100E600010B500240C20FFF7D5FE0120800700F00C
:100E700001D010460839020901D01046091F820826 :100E700062F8032806D101208007406804218843D6
:100E800001D01046891E420801D0881E7047081AFA :100E8000090748600120800700F055F8022805D0C6
:100E9000704700004900CA020243100000D004203D :100E90000120800700F04FF8062816D101208007B6
:100EA0004A0D01D001221043044A490D914201D15B :100EA0004068400840000121890748600846006802
:100EB00002210843012800D105207047FF070000E8 :100EB000C4B221460120800700F0C4F80120800759
:100EC000F8B504464F1EC8000838211815461E46BE :100EC0004068012108438907486010BD10B500241F
:100ED000086849683A4606239A4310D02A463346A2 :100ED0000D20FFF79FFE144800F02DF8032805D1E0
:100EE000FFF7F6FA3A46D200083AA3181A687F1EAE :100EE00011484068042188430F4948600E4800F0CB
:100EF0005B68FFF73BFA06223B469343EED1022F95 :100EF00022F8022804D00C4800F01DF8062812D170
:100F000023D0042F11D0062F2FD12A463346FFF7C6 :100F000009484068400840000749486008460068B2
:100F1000DFFAE36AA26AFFF729FA2A463346FFF7A7 :100F1000C4B22146044800F095F803484068012116
:100F2000D7FA636A226AFFF721FA2A463346FFF7A7 :100F200008430149486010BD00100040014648696F
:100F3000CFFAE369A269FFF719FA2A463346FFF7A9 :100F30008006C00F7047014688680007400F704761
:100F4000C7FA63692269FFF711FA2A463346FFF7A9 :100F400070B504460D461348844206D10D20FFF7C4
:100F5000BFFAE368A268FFF709FA2A463346FFF7AB :100F500075FE0D20FFF75EFE09E001208007844248
:100F6000B7FA63682268FFF701FAF8BD002210B5EE :100F600005D10C20FFF76AFE0C20FFF753FE6068E6
:100F7000134610460149FFF7D1F810BD0000F03FBD :100F70002978084360600748844203D10D20FFF7B9
:100F800010B5FFF7F3F910BD002210B51346104657 :100F800071FE06E001208007844202D10C20FFF7A9
:100F90001146FFF7C3F810BD10B50721024A002023 :100F900069FE70BD00100040F8B504460D46012002
:100FA0000907FFF7FDFA10BD01030000034A10B561 :100FA000800784420BD10020FFF770FE0121022050
:100FB00000201107FFF7F4FA10BD000001FDFFFF4C :100FB000FFF70AFD01210320FFF706FD0DE01F48A2
:100FC00002E008C8121F08C1002AFAD17047704712 :100FC00084420AD10120FFF761FE01210C20FFF7C6
:100FD000002001E001C1121F002AFBD17047000070 :100FD000FBFC01210D20FFF7F7FC606BC007C00F81
:100FE000014908607047000044000020FFB58DB043 :100FE000002801D1102700E00D2715486968006826
:100FF0000446002506E025280AD0109A0F9990474C :100FF000FFF77EF839460090FFF77AF8401E86B278
:10100000641C6D1C20780028F5D1284611B0F0BD75 :101000001120304020621120000230400012606246
:1010100000270121484A009700E00743641C237819 :10101000A068E968097889010843A060E8688078D9
:101020000846203B98401042F7D120782E2817D14F :10102000012803D1A06801210843A060287A012883
:10103000042007436078641C2A280CD10E98641C95 :1010300003D12069202108432061F8BD0010004041
:1010400002C800910E900BE000990A2251433039FA :101040001C00002000B503460A4600BF1846FFF703
:101050004018641C00902078014630390929F3D9E2 :101050006DFF0028FAD01146184600F002F810463D
:1010600020780028D1D0642808D0692806D07528B7 :1010600000BD0160704700000FB410B503A9044B28
:101070001ED0109A0F9990476D1C5BE00A200E99C4 :10107000044A029800F0CCF810BC08BC04B0184731
:10108000019001C90E91002802DA40422D2102E0B0 :10108000751300102C0000202021020C01D010212B
:10109000390504D52B216A461172012103E0F907B5 :101090001046020A01D010460839020901D0104654
:1010A00004D02021F7E70BAE0B910DE00021FAE709 :1010A000091F820801D01046891E420801D0881EFF
:1010B0000A200E99019001C90E91F7E70199FFF7F7 :1010B0007047081A704700004900CA020243100036
:1010C00017F83031761E31700028F7D103A8801B45 :1010C00000D004204A0D01D001221043044A490DEA
:1010D00020300190780701D5009801E001200090B0 :1010D000914201D102210843012800D10520704727
:1010E0000199884201DD401A00E0002000270090AD :1010E000FF070000F8B504464F1EC8000838211855
:1010F00006E002A8109AC05D0F9990476D1C7F1CF6 :1010F00015461E46086849683A4606239A4310D0AA
:101100000B988742F5DB04E0109A30200F99904746 :101100002A463346FFF708FA3A46D200083AA318AF
:101110006D1C0099481E00900029F5DC05E0307830 :101110001A687F1E5B68FFF74DF906223B46934332
:10112000109A761C0F9990476D1C0199481E0190EA :10112000EED1022F23D0042F11D0062F2FD12A4623
:101130000029F4DC641C65E70928010070B5044649 :101130003346FFF7F1F9E36AA26AFFF73BF92A4663
:101140000D46E1B20148FFF76BFE70BD0010004094 :101140003346FFF7E9F9636A226AFFF733F92A4663
:101150000EB5FFF7C9FCFFF7E1FA0120002100916D :101150003346FFF7E1F9E369A269FFF72BF92A4665
:1011600002230A46019102901320FFF7D3FB0021CE :101160003346FFF7D9F963692269FFF723F92A4665
:101170001320FFF77DFC06490648FFF7FBFD0649F3 :101170003346FFF7D1F9E368A268FFF71BF92A4667
:101180000448FFF7CBFD0120FFF72AFD00BFFEE773 :101180003346FFF7C9F963682268FFF713F9F8BD22
:10119000040000200010004014000020F0B51FB42F :10119000002210B5134610460149FEF7E3FF10BDCB
:1011A00096B084460C460246199D18980390490053 :1011A0000000F03F10B5FFF705F910BD002210B5A3
:1011B00068006300490840080193002A01D0012615 :1011B000134610461146FEF7D5FF10BD10B50721A6
:1011C00000E000269E19FE4BF6185B109E422BD3C2 :1011C000024A00200907FFF70FFA10BD01030000D3
:1011D0006E00039F0296002F00D00127F719F84EEA :1011D000034A10B500201107FFF706FA10BD000002
:1011E000F84BBE199E421FD3039E0346F64F33436E :1011E00001FDFFFF02E008C8121F08C1002AFAD162
:1011F00009D03B469C4201D1002A04D0019B002A21 :1011F00070477047002001E001C1121F002AFBD197
:1012000005D0012604E0002039461BB0F0BD0026C1 :10120000704700000149086070470000600000203E
:101210009E19EE4B9E4207D8039F029E002F00D0DE :10121000FFB58DB00446002506E025280AD0109AB7
:101220000127F6199E4207D92B4660462146189A97 :101220000F999047641C6D1C20780028F5D1284642
:10123000FFF7A6FE1BB0F0BD0023002C29DAE44E18 :1012300011B0F0BD00270121484A009700E00743A4
:10124000B04226DAE34EB04201DB022321E0DE4E5B :10124000641C23780846203B98401042F7D1207850
:10125000B0421EDBE04E070DBE19142E09DD342707 :101250002E2817D1042007436078641C2A280CD15B
:10126000BF1B039EFE400196BE40039FBE420BD0B3 :101260000E98641C02C800910E900BE000990A22AF
:101270000FE0039F002F0CD11427BF1B0646FE4032 :10127000514330394018641C0090207801463039C1
:101280000196BE40864204D1019BDE07F60F022381 :101280000929F3D920780028D1D0642808D069280A
:101290009B1B0E46164318D1002D16DA002C03D0E6 :1012900006D075281ED0109A0F9990476D1C5BE000
:1012A000022B01D0012B06D00220FFF799FEFFF799 :1012A0000A200E99019001C90E91002802DA4042ED
:1012B0005DFE1BB0F0BD0220FFF792FEFFF756FE69 :1012B0002D2102E0390504D52B216A461172012146
:1012C0000122D20751401BB0F0BD039E002E61D118 :1012C00003E0F90704D02021F7E70BAE0B910DE006
:1012D000BF4EB04220D1C148844201D1002A08D07B :1012D0000021FAE70A200E99019001C90E91F7E763
:1012E000B948814209DB002D10DB189829461BB054 :1012E0000199FEF705FF3031761E31700028F7D1E5
:1012F000F0BD0020B4491BB0F0BD002D06DA01227C :1012F00003A8801B20300190780701D5009801E0F9
:101300002946D207189851401BB0F0BDB449794422 :10130000012000900199884201DD401A00E0002090
:10131000086849681BB0F0BDAB4FB84225D1002D1D :101310000027009006E002A8109AC05D0F99904740
:101320001FDA002904D0B14212D1002A09D018E0F6 :101320006D1C7F1C0B988742F5DB04E0109A30207F
:10133000002A72D1A649E20F0020D20711431BB048 :101330000F9990476D1C0099481E00900029F5DC1C
:10134000F0BD0020E20F0146D20711431BB0F0BDF3 :1013400005E03078109A761C0F9990476D1C019932
:10135000B14206DA234600203946FEF7DFFE1BB015 :10135000481E01900029F4DC641C65E7092801009F
:10136000F0BD104621461BB0F0BDB14212DA012695 :101360000248034948611020086170471372070062
:10137000B607B54203D1234610461946FEE3994EFF :1013700000E0004070B504460D46E1B20148FFF7B9
:10138000B54207D1261E05DB1046314600F004FCAD :1013800061FE70BD0010004086B0FFF741FCFFF722
:101390001BB0F0BD67007F081646002A40D1002927 :10139000E9F901200021009102230A4601910290FF
:1013A0000AD08B4A914229D1002C0EDD002D1CDB86 :1013A0001320FFF74BFB00211320FFF7F5FB2D491E
:1013B000002011461BB0F0BD022B16D0002C14D01B :1013B0002D48FFF7F1FD2D492B48FFF7C1FD012016
:1013C000012B12D1002C14DB0FE0002C28DA002DA9 :1013C000FFF788FCFFF7E2FC00F08AFD284A07CA15
:1013D00009DB012B03D000207D491BB0F0BD0020AC :1013D00003AB07C303A8FFF783FAFFF7C1FA40E0A6
:1013E00081491BB0F0BD012B03D0002001461BB08A :1013E000FFF7D0FC04462078002801D000202070B0
:1013F000F0BD00200121C9071BB0F0BD724A914227 :1013F000A078002801D00020A0702079002801D01A
:101400000ED1002C01DA002B17D0022B06D00020C1 :1014000000202071607900282AD01A480078401CFA
:10141000C043FEF7FBFE1BB0F0BD90E20120F8E7F1 :1014100018490870084600780A280BDC164800783E
:10142000E217521C94461A4307D000220892664CD9 :10142000002804D1012014490870FFF799FAFFF74A
:1014300062465B1E1A4307D009E00120FFF7D0FD8A :1014300063FA10E00F480078142809DC0E480078A1
:10144000FFF7A2FD1BB0F0BD0022644C0892674A72 :10144000012808D100200C490870FFF79DFA02E03E
:1014500090427DDD664B674A98421FDD914202DC77 :101450000020084908701320FFF7B2FB00206071DC
:10146000002D05DB4DE05848814217DB002D48DD9B :1014600000BFBDE708000020001000401800002069
:101470000220FFF7B5FDFFF78FFD05460E4600225F :101470001C2000100000002001000020F0B51FB467
:10148000534B21460898FFF723F808467100490896 :1014800096B084460C460246199D18980390490070
:10149000C00FC007014328461BB0F0BD914215DACA :1014900068006300490840080193002A01D0012632
:1014A000002D2EDA0220FFF79BFDFFF775FD0546A4 :1014A00000E000269E19FE4BF6185B109E422BD3DF
:1014B0000E460022464B21460898FFF709F87200B5 :1014B0006E00039F0296002F00D00127F719F84E07
:1014C0005208C80FC0070243114617E03E4B99422D :1014C000F84BBE199E421FD3039E0346F64F33438B
:1014D00023DD002D15DD0220FFF782FDFFF75CFD07 :1014D00009D03B469C4201D1002A04D0019B002A3E
:1014E00005460E4600223A4B21460898FEF7F0FFCB :1014E00005D0012604E0002039461BB0F0BD0026DF
:1014F000084671004908C00FC007014328461BB0C9 :1014F0009E19EE4B9E4207D8039F029E002F00D0FC
:10150000F0BD0220FFF76CFDFFF750FD49004908D0 :101500000127F6199E4207D92B4660462146189AB4
:10151000E20FD20711431BB0F0BD0022304639461E :10151000FFF748FE1BB0F0BD0023002C29DAE44E93
:10152000FEF7C8FF012205460E46D243FFF738F802 :10152000B04226DAE34EB04201DB022321E0DE4E78
:10153000314A324BFEF7C4FF2A463346FEF7C8FF56 :10153000B0421EDBE04E070DBE19142E09DD342724
:101540000022284BFEF7BCFF07462A46334600E040 :10154000BF1B039EFE400196BE40039FBE420BD0D0
:1015500064E0039110461946FEF7BAFF3A46039B32 :101550000FE0039F002F0CD11427BF1B0646FE404F
:10156000FEF7B6FF0746032209915207244B28468F :101560000196BE40864204D1019BDE07F60F02239E
:101570003146FEF7ADFF07910C90224A204B3846CA :101570009B1B0E46164318D1002D16DA002C03D003
:101580000999FEF7A5FF074601911F4A1F4B284600 :10158000022B01D0012B06D00220FFF73BFEFFF714
:101590003146FEF79DFF3A46019BFEF78BFF07465B :10159000FFFD1BB0F0BD0220FFF734FEFFF7F8FDA2
:1015A0000B460246099107990C98FEF7DFFE0025CD :1015A0000122D20751401BB0F0BD039E002E61D135
:1015B0000E462846079B0C9AFEF77CFF3A4627E02A :1015B000BF4EB04220D1C148844201D1002A08D098
:1015C000FFFF1F00FFFF0F000000F03F0000E0FFE3 :1015C000B948814209DB002D10DB189829461BB071
:1015D0000000F07F0000404301FCFFFF0000F0BF6F :1015D000F0BD0020B4491BB0F0BD002D06DA012299
:1015E000560900000000E03F0000F0FF0000E0416D :1015E0002946D207189851401BB0F0BDB449794440
:1015F0000000F043FFFFEF3F555555555555D53F7A :1015F000086849681BB0F0BDAB4FB84225D1002D3B
:101600004715F73FFE822B6544DF5DF80BAE543E75 :101600001FDA002904D0B14212D1002A09D018E013
:10161000099BFEF755FF02460B4652E101250020CB :10161000002A72D1A649E20F0020D20711431BB065
:101620002D05A94207DA352230463946FEF7B8FFC4 :10162000F0BD0020E20F0146D20711431BB0F0BD10
:1016300006463420C0430A151218FE4810180390BD :10163000B14206DA234600203946FEF793FD1BB07F
:101640000803FD49000B01430F46FC49884201DCB9 :10164000F0BD104621461BB0F0BDB14212DA0126B2
:10165000002003E0FA49884202DA0120119005E0F7 :10165000B607B54203D1234610461946FEE3994E1C
:10166000002011900398401C7F1B03901198059750 :10166000B54207D1261E05DB1046314600F014FCBA
:10167000C200F4480F9278448018436802683946E3 :101670001BB0F0BD67007F081646002A40D1002944
:1016800030460D930292FEF715FF07910C903046FD :101680000AD08B4A914229D1002C0EDD002D1CDBA3
:101690000D9B029A0599FEF769FE02460B46002053 :10169000002011461BB0F0BD022B16D0002C14D038
:1016A000E549FEF73BFD09910490079B0C9AFEF774 :1016A000012B12D1002C14DB0FE0002C28DA002DC6
:1016B0000FFF129000201090E3480D467844006818 :1016B00009DB012B03D000207D491BB0F0BD0020C9
:1016C0000E90012178104907084311990D9B890458 :1016C00081491BB0F0BD012B03D0002001461BB0A7
:1016D00040180121C90447183946029A0E98FEF7AE :1016D000F0BD00200121C9071BB0F0BD724A914244
:1016E000E9FE3246059BFEF7EBFE02460B46294615 :1016E0000ED1002C01DA002B17D0022B06D00020DF
:1016F0001098FEF7EDFE064602913B4629460E9AEB :1016F000C043FEF7AFFD1BB0F0BD90E20120F8E75C
:101700001098FEF7E5FE079B0C9AFEF7D9FE3246CD :10170000E217521C94461A4307D000220892664CF6
:10171000029BFEF7CFFE099B049AFEF7D9FE0591C6 :1017100062465B1E1A4307D009E00120FFF772FD05
:10172000129A0A902B4610461946FEF7D1FE06463D :10172000FFF744FD1BB0F0BD0022644C0892674AED
:101730000246C6480F460B4606217844FFF7C0FB19 :1017300090427DDD664B674A98421FDD914202DC94
:1017400032463B460091049010461946FEF7C0FE13 :10174000002D05DB4DE05848814217DB002D48DDB8
:10175000009B049AFEF7BCFE06460F462B46194630 :101750000220FFF757FDFFF731FD05460E46002238
:10176000129A1098FEF702FE059B0A9AFEF7B0FE49 :10176000534B21460898FEF7D7FE084671004908FA
:1017700032463B46FEF7FAFD109A079104902B463D :10177000C00FC007014328461BB0F0BD914215DAE7
:1017800010461946FEF7A4FEB14E002233460991D9 :10178000002D2EDA0220FFF73DFDFFF717FD05467D
:101790000290FEF7EBFD079B049AFEF7E7FD0020A1 :101790000E460022464B21460898FEF7BDFE720019
:1017A0000746024633460091FEF784FE099B029AE3 :1017A0005208C80FC0070243114617E03E4B99424A
:1017B000FEF780FE079B049AFEF782FE06460D9117 :1017B00023DD002D15DD0220FFF724FDFFF7FEFCE1
:1017C0003A462946009B1098FEF782FE07910C903E :1017C00005460E4600223A4B21460898FEF7A4FE35
:1017D0002B463046129A0D99FEF77AFE05460E46C4 :1017D000084671004908C00FC007014328461BB0E6
:1017E0003A46009B05990A98FEF772FE33462A4650 :1017E000F0BD0220FFF70EFDFFF7F2FC49004908AB
:1017F000FEF7BCFD02460B460746099107990C9877 :1017F000E20FD20711431BB0F0BD0022304639463C
:10180000FEF7B4FD00250E462846079B0C9AFEF70E :10180000FEF77CFE012205460E46D243FEF7ECFEB3
:1018100051FE3A46099BFEF753FE074607220991FF :10181000314A324BFEF778FE2A463346FEF77CFE0D
:1018200052078C4B31462846FEF752FE0791009036 :101820000022284BFEF770FE07462A46334600E0AA
:10183000894A884B38460999FEF74AFE07460191C6 :1018300064E0039110461946FEF76EFE3A46039B9C
:10184000864A874B31462846FEF742FE3A46019BC0 :10184000FEF76AFE0746032209915207244B2846F9
:10185000FEF78CFD834B7B440F9A9B181A685B68DC :101850003146FEF761FE07910C90224A204B384634
:10186000FEF784FD029009910398FEF7CFFC0591E5 :101860000999FEF759FE074601911F4A1F4B28466A
:101870000490099B029A07990098FEF777FD7A4B2E :101870003146FEF751FE3A46019BFEF73FFE074612
:101880007B440F9A9B181A685B6817460393FEF710 :101880000B460246099107990C98FEF793FD002537
:101890006DFD059B049AFEF769FD0E462846059BE3 :101890000E462846079B0C9AFEF730FE3A4627E094
:1018A000049AFEF707FE3A46039BFEF703FE079BEA :1018A000FFFF1F00FFFF0F000000F03F0000E0FF00
:1018B000009AFEF7FFFD099B029AFEF701FE024621 :1018B0000000F07F0000404301FCFFFF0000F0BF8C
:1018C0000B46199900200C900F461898FEF700FE61 :1018C000BE0A00000000E03F0000F0FF0000E04121
:1018D000029104903B460C9A19991898FEF7EAFD7C :1018D0000000F043FFFFEF3F555555555555D53F97
:1018E0002A463346FEF7F4FD029B049AFEF73EFDBE :1018E0004715F73FFE822B6544DF5DF80BAE543E93
:1018F00009910E902A46334639460C98FEF7E8FDCA :1018F000099BFEF709FE02460B4652E10125002036
:1019000006460F46099B0E9AFEF730FD574A0D46D4 :101900002D05A94207DA352230463946FEF76CFE2E
:10191000914220DB5242AA18024310D132463B4684 :1019100006463420C0430A151218FE4810180390DA
:10192000FEF7C8FD04900391514A524B09990E9855 :101920000803FD49000B01430F46FC49884201DCD6
:10193000FEF71CFD039B049AFEF748FE1ED2022010 :10193000002003E0FA49884202DA0120119005E014
:10194000FFF74EFBFFF728FB49004908E20FD207DB :10194000002011900398401C7F1B0390119805976D
:1019500011431BB0F0BD6A00474B52089A420DD3A9 :10195000C200F4480F927844801843680268394600
:10196000464AAA18024300D0CBE532463B46FEF772 :1019600030460D930292FEF7C9FD07910C90304668
:10197000A1FD099B0E9AFEF729FEF5D96800002308 :101970000D9B029A0599FEF71DFD02460B460020BD
:1019800040082C490393020D3D4B5218984223DD29 :10198000E549FEF7EFFB09910490079B0C9AFEF7DF
:1019900001200005521CD04042195000400D401853 :10199000C3FD129000201090E3480D467844006883
:1019A00038497944096813468C463749C1408B430E :1019A0000E90012178104907084311990D9B890475
:1019B00012030121120B090551181422101AC140FB :1019B00040180121C90447183946029A0E98FEF7CB
:1019C0000391002D01DA48420390624630463946C1 :1019C0009DFD3246059BFEF79FFD02460B462946CC
:1019D000FEF770FD06460F4632463B4609990E98C3 :1019D0001098FEF7A1FD064602913B4629460E9A55
:1019E000FEF7C4FC00252A46284B28460591FEF741 :1019E0001098FEF799FD079B0C9AFEF78DFD324685
:1019F0006FFD07910C90264A264B28460599FEF765 :1019F000029BFEF783FD099B049AFEF78DFD05917E
:101A000067FD0091029032463B4628460599FEF755 :101A0000129A0A902B4610461946FEF785FD0646A7
:101A100051FD099B0E9AFEF753FD1F4A1F4BFEF71F :101A10000246C6480F460B4606217844FFF762FB94
:101A200057FD009B029AFEF7A1FC07460B460246B3 :101A200032463B460091049010461946FEF774FD7D
:101A3000099135E001FCFFFF0000F03F8E980300A4 :101A3000009B049AFEF770FD06460F462B4619469A
:101A40007AB60B0066050000A8050000D20400006D :101A4000129A1098FEF7B6FC059B0A9AFEF764FD01
:101A50000000084009C7EE3FFD033ADCF5015B14C6 :101A500032463B46FEF7AEFC109A079104902B46A7
:101A6000E02F3EBEA60300006C0300000000904083 :101A600010461946FEF758FDB14E00223346099143
:101A7000FE822B654715973C00CC904000346F3FA9 :101A70000290FEF79FFC079B049AFEF79BFC002058
:101A80000000E03FC2020000FFFF0F00432EE63FD0 :101A80000746024633460091FEF738FD099B029A4D
:101A9000396CA80C615C20BEEF39FAFE422EE63F9D :101A9000FEF734FD079B049AFEF736FD06460D91CE
:101AA00007990C98FEF762FC05460E46079B0C9AB8 :101AA0003A462946009B1098FEF736FD07910C90A8
:101AB000FEF700FD3A46099BFEF702FD09912A4612 :101AB0002B463046129A0D99FEF72EFD05460E462E
:101AC00033460E9010461946FEF702FD07460246C1 :101AC0003A46009B05990A98FEF726FD33462A46BA
:101AD0002F480B46059105217844FFF7F1F93A4666 :101AD000FEF770FC02460B460746099107990C98E1
:101AE000059BFEF7F5FC2A463346FEF7E9FC074660 :101AE000FEF768FC00250E462846079B0C9AFEF779
:101AF000019128463146099B0E9AFEF7E9FC099BA5 :101AF00005FD3A46099BFEF707FD074607220991B7
:101B00000E9AFEF733FC012304910C9000229B07F0 :101B000052078C4B31462846FEF706FD07910090A0
:101B100038460199FEF7CEFC05910E903A462846CC :101B1000894A884B38460999FEF7FEFC0746019131
:101B20003146019BFEF7D4FC059B0E9AFEF7F6FAB0 :101B2000864A874B31462846FEF7F6FC3A46019B2B
:101B3000049B0C9AFEF7BEFC2A463346FEF7BAFC1D :101B3000FEF740FC834B7B440F9A9B181A685B6846
:101B40000022144BFEF7BCFC064603980D46000528 :101B4000FEF738FC029009910398FEF783FB05919C
:101B500041190915002912DC30462946039AFEF77F :101B50000490099B029A07990098FEF72BFC7A4B98
:101B60001FFDFFF797F9042801D1FFF71FFA304650 :101B60007B440F9A9B181A685B6817460393FEF72D
:101B70002946039AFEF714FD064601E004E0291801 :101B700021FC059B049AFEF71DFC0E462846059B9A
:101B80000B46324621460898FEF7A2FC1BB0F0BD7A :101B8000049AFEF7BBFC3A46039BFEF7B7FC079BA3
:101B9000640100000000F03FF8B506460C46FEF771 :101B9000009AFEF7B3FC099B029AFEF7B5FC0246D9
:101BA0005EFD051E0F4600D00120014349000B4891 :101BA0000B46199900200C900F461898FEF7B4FCCC
:101BB0004908411AC90F0DD0002E01D0012100E0C3 :101BB000029104903B460C9A19991898FEF79EFCE6
:101BC00000210C4361004908401AC00F02D10120D6 :101BC0002A463346FEF7A8FC029B049AFEF7F2FB76
:101BD000FFF706FA28463946F8BD00000000F07FFE :101BD00009910E902A46334639460C98FEF79CFC34
:101BE000000000000000F03F000000000000F83F8F :101BE00006460F46099B0E9AFEF7E4FB574A0D4640
:101BF00000000000000000000000004003B8E23FC9 :101BF000914220DB5242AA18024310D132463B46A2
:101C0000000000000000000006D0CF43EBFD4C3E7A :101C0000FEF77CFC04900391514A524B09990E98BF
:101C1000033333333333E33FFFAB6FDBB66DDB3F6F :101C1000FEF7D0FB039B049AFEF7FCFC1ED20220C9
:101C20004D268F515555D53F01411DA96074D13FB7 :101C2000FFF7F0FAFFF7CAFA49004908E20FD207B6
:101C300065DBC9934A86CD3FEF4E454A287ECA3FB1 :101C300011431BB0F0BD6A00474B52089A420DD3C6
:101C40003E5555555555C53F93BDBE166CC166BF33 :101C4000464AAA18024300D0CBE532463B46FEF78F
:101C50002CDE25AF6A56113FF16BD2C541BDBBBE2C :101C500055FC099B0E9AFEF7DDFCF5D968000023C0
:101C6000D0A4BE726937663E00000000000000008C :101C600040082C490393020D3D4B5218984223DD46
:101C7000901C00100000002048000000C00F001061 :101C700001200005521CD04042195000400D401870
:101C8000D81C00104800002000020000D00F0010F7 :101C800038497944096813468C463749C1408B432B
:101C9000020001000000000000C20100000000007E :101C900012030121120B090551181422101AC14018
:101CA000000000200500000000000000000300000C :101CA0000391002D01DA48420390624630463946DE
:101CB0000000000000000000000000000000000024 :101CB000FEF724FC06460F4632463B4609990E982D
:101CC00000000000000000000000000000E1F50539 :101CC000FEF778FB00252A46284B28460591FEF7AB
:081CD00000E1F5050000000031 :101CD00023FC07910C90264A264B28460599FEF7CF
:101CE0001BFC0091029032463B4628460599FEF7C0
:101CF00005FC099B0E9AFEF707FC1F4A1F4BFEF7D7
:101D00000BFC009B029AFEF755FB07460B4602466A
:101D1000099135E001FCFFFF0000F03F8E980300C1
:101D20007AB60B00CE060000100700003A0600004D
:101D30000000084009C7EE3FFD033ADCF5015B14E3
:101D4000E02F3EBE0E050000D404000000009040CD
:101D5000FE822B654715973C00CC904000346F3FC6
:101D60000000E03F2A040000FFFF0F00432EE63F83
:101D7000396CA80C615C20BEEF39FAFE422EE63FBA
:101D800007990C98FEF716FB05460E46079B0C9A22
:101D9000FEF7B4FB3A46099BFEF7B6FB09912A46CB
:101DA00033460E9010461946FEF7B6FB074602462C
:101DB0002F480B46059105217844FFF793F93A46E1
:101DC000059BFEF7A9FB2A463346FEF79DFB074617
:101DD000019128463146099B0E9AFEF79DFB099B0F
:101DE0000E9AFEF7E7FA012304910C9000229B075C
:101DF00038460199FEF782FB05910E903A46284637
:101E00003146019BFEF788FB059B0E9AFEF7AAF967
:101E1000049B0C9AFEF772FB2A463346FEF76EFBD4
:101E20000022144BFEF770FB064603980D46000592
:101E300041190915002912DC30462946039AFEF79C
:101E4000D3FBFFF739F9042801D1FFF7C1F9304678
:101E50002946039AFEF7C8FB064601E004E029186C
:101E60000B46324621460898FEF756FB1BB0F0BDE4
:101E7000CC0200000000F03F10B5044601E0FFF77F
:101E800079FA2078641C03490028F8D10A20FFF76A
:101E900071FA10BD2C000020F8B506460C46FEF77E
:101EA00002FC051E0F4600D00120014349000B48EB
:101EB0004908411AC90F0DD0002E01D0012100E0C0
:101EC00000210C4361004908401AC00F02D10120D3
:101ED000FFF798F928463946F8BD00000000F07F6A
:101EE00010B50220064908600648406906490843C3
:101EF00004494861FFF734FA04A0FFF7BDFF10BDA5
:101F0000003002400000024003500000454E5331B3
:101F1000202D20574156455F47454E455241544F6D
:101F2000525F4452495645525F415F546573742075
:101F30002D20245265766973696F6E3A20523030D5
:101F4000310A00000120034908700020024908609E
:101F50007047000050000020540000200021C163A1
:101F600000BF03E0C16100220262491C4029F9DB85
:101F700070470000F8B504460D460026002716A05D
:101F8000FFF77AFF6420A0602020A061A061642098
:101F900020616061502020600420E063002002E0A6
:101FA000E0612562401C4028FADB1920C001606214
:101FB0000020A062E0620120206300206063A06333
:101FC00001206060002F04D00BA0FFF755FF012611
:101FD00000273046F8BD00000AE9A9B1E58AA8E566
:101FE00099A841E6ADA3E5BCA6E6B3A2E6B58BE8A9
:101FF000AF955C6E000000000AE99499E8AFAF204D
:102000003A20E9A9B1E58AA8E599A841E6B58BE8A7
:10201000AF95E5A4B1E8B4A50A0000006400E803A8
:102020008000640032000000000000000000F03F6B
:10203000000000000000F83F000000000000000069
:102040000000004003B8E23F000000000000000074
:1020500006D0CF43EBFD4C3E033333333333E33F02
:10206000FFAB6FDBB66DDB3F4D268F515555D53F2E
:1020700001411DA96074D13F65DBC9934A86CD3FFC
:10208000EF4E454A287ECA3F3E5555555555C53FEA
:1020900093BDBE166CC166BF2CDE25AF6A56113FDC
:1020A000F16BD2C541BDBBBED0A4BE726937663EDE
:1020B0000000000000000000D820001000000020F8
:1020C00064000000E41100103C21001064000020B6
:1020D0000C020000F41100100000000002000100DA
:1020E0000000000000C20100000000000400002009
:1020F00005000000000000000003000000000000D8
:1021000000000000000000000000000000000000CF
:1021100000000000000000000000000000000000BF
:1021200000000000000000000000000000000000AF
:0C21300000E1F50500E1F50500000000ED
:04000005100000C126 :04000005100000C126
:00000001FF :00000001FF

View File

@ -3,11 +3,11 @@
<title>Static Call Graph - [.\Objects\ENS001_BASIC_PRJ.axf]</title></head> <title>Static Call Graph - [.\Objects\ENS001_BASIC_PRJ.axf]</title></head>
<body><HR> <body><HR>
<H1>Static Call Graph for image .\Objects\ENS001_BASIC_PRJ.axf</H1><HR> <H1>Static Call Graph for image .\Objects\ENS001_BASIC_PRJ.axf</H1><HR>
<BR><P>#&#060CALLGRAPH&#062# ARM Linker, 5060750: Last Updated: Wed Aug 13 16:25:22 2025 <BR><P>#&#060CALLGRAPH&#062# ARM Linker, 5060750: Last Updated: Wed Aug 20 11:01:24 2025
<BR><P> <BR><P>
<H3>Maximum Stack Usage = 352 bytes + Unknown(Cycles, Untraceable Function Pointers)</H3><H3> <H3>Maximum Stack Usage = 360 bytes + Unknown(Cycles, Untraceable Function Pointers)</H3><H3>
Call chain for Maximum Stack Depth:</H3> Call chain for Maximum Stack Depth:</H3>
main &rArr; ClockInit &rArr; ClockInitSet &rArr; pow &rArr; __kernel_poly &rArr; __aeabi_dmul &rArr; _double_epilogue &rArr; __aeabi_llsl main &rArr; ClockInit &rArr; ClockInitSet &rArr; pow &rArr; __kernel_poly &rArr; __aeabi_dmul &rArr; _double_epilogue &rArr; _double_round
<P> <P>
<H3> <H3>
Mutually Recursive functions Mutually Recursive functions
@ -66,25 +66,25 @@ Global Symbols
<P><STRONG><a name="[22]"></a>__main</STRONG> (Thumb, 0 bytes, Stack size unknown bytes, entry.o(.ARM.Collect$$$$00000000)) <P><STRONG><a name="[22]"></a>__main</STRONG> (Thumb, 0 bytes, Stack size unknown bytes, entry.o(.ARM.Collect$$$$00000000))
<BR>[Address Reference Count : 1]<UL><LI> startup_cmsdk_cm0.o(.text) <BR>[Address Reference Count : 1]<UL><LI> startup_cmsdk_cm0.o(.text)
</UL> </UL>
<P><STRONG><a name="[5f]"></a>_main_stk</STRONG> (Thumb, 0 bytes, Stack size unknown bytes, entry2.o(.ARM.Collect$$$$00000001)) <P><STRONG><a name="[71]"></a>_main_stk</STRONG> (Thumb, 0 bytes, Stack size unknown bytes, entry2.o(.ARM.Collect$$$$00000001))
<P><STRONG><a name="[24]"></a>_main_scatterload</STRONG> (Thumb, 0 bytes, Stack size unknown bytes, entry5.o(.ARM.Collect$$$$00000004)) <P><STRONG><a name="[24]"></a>_main_scatterload</STRONG> (Thumb, 0 bytes, Stack size unknown bytes, entry5.o(.ARM.Collect$$$$00000004))
<BR><BR>[Calls]<UL><LI><a href="#[25]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;__scatterload <BR><BR>[Calls]<UL><LI><a href="#[25]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;__scatterload
</UL> </UL>
<P><STRONG><a name="[34]"></a>__main_after_scatterload</STRONG> (Thumb, 0 bytes, Stack size unknown bytes, entry5.o(.ARM.Collect$$$$00000004)) <P><STRONG><a name="[37]"></a>__main_after_scatterload</STRONG> (Thumb, 0 bytes, Stack size unknown bytes, entry5.o(.ARM.Collect$$$$00000004))
<BR><BR>[Called By]<UL><LI><a href="#[25]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;__scatterload <BR><BR>[Called By]<UL><LI><a href="#[25]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;__scatterload
</UL> </UL>
<P><STRONG><a name="[60]"></a>_main_clock</STRONG> (Thumb, 0 bytes, Stack size unknown bytes, entry7b.o(.ARM.Collect$$$$00000008)) <P><STRONG><a name="[72]"></a>_main_clock</STRONG> (Thumb, 0 bytes, Stack size unknown bytes, entry7b.o(.ARM.Collect$$$$00000008))
<P><STRONG><a name="[61]"></a>_main_cpp_init</STRONG> (Thumb, 0 bytes, Stack size unknown bytes, entry8b.o(.ARM.Collect$$$$0000000A)) <P><STRONG><a name="[73]"></a>_main_cpp_init</STRONG> (Thumb, 0 bytes, Stack size unknown bytes, entry8b.o(.ARM.Collect$$$$0000000A))
<P><STRONG><a name="[62]"></a>_main_init</STRONG> (Thumb, 0 bytes, Stack size unknown bytes, entry9a.o(.ARM.Collect$$$$0000000B)) <P><STRONG><a name="[74]"></a>_main_init</STRONG> (Thumb, 0 bytes, Stack size unknown bytes, entry9a.o(.ARM.Collect$$$$0000000B))
<P><STRONG><a name="[63]"></a>__rt_final_cpp</STRONG> (Thumb, 0 bytes, Stack size unknown bytes, entry10a.o(.ARM.Collect$$$$0000000D)) <P><STRONG><a name="[75]"></a>__rt_final_cpp</STRONG> (Thumb, 0 bytes, Stack size unknown bytes, entry10a.o(.ARM.Collect$$$$0000000D))
<P><STRONG><a name="[64]"></a>__rt_final_exit</STRONG> (Thumb, 0 bytes, Stack size unknown bytes, entry11a.o(.ARM.Collect$$$$0000000F)) <P><STRONG><a name="[76]"></a>__rt_final_exit</STRONG> (Thumb, 0 bytes, Stack size unknown bytes, entry11a.o(.ARM.Collect$$$$0000000F))
<P><STRONG><a name="[0]"></a>Reset_Handler</STRONG> (Thumb, 8 bytes, Stack size 0 bytes, startup_cmsdk_cm0.o(.text)) <P><STRONG><a name="[0]"></a>Reset_Handler</STRONG> (Thumb, 8 bytes, Stack size 0 bytes, startup_cmsdk_cm0.o(.text))
<BR>[Address Reference Count : 1]<UL><LI> startup_cmsdk_cm0.o(RESET) <BR>[Address Reference Count : 1]<UL><LI> startup_cmsdk_cm0.o(RESET)
@ -194,273 +194,338 @@ Global Symbols
<P><STRONG><a name="[1f]"></a>WG_DRV_Handler</STRONG> (Thumb, 0 bytes, Stack size 0 bytes, startup_cmsdk_cm0.o(.text)) <P><STRONG><a name="[1f]"></a>WG_DRV_Handler</STRONG> (Thumb, 0 bytes, Stack size 0 bytes, startup_cmsdk_cm0.o(.text))
<BR>[Address Reference Count : 1]<UL><LI> startup_cmsdk_cm0.o(RESET) <BR>[Address Reference Count : 1]<UL><LI> startup_cmsdk_cm0.o(RESET)
</UL> </UL>
<P><STRONG><a name="[65]"></a>__aeabi_uidiv</STRONG> (Thumb, 0 bytes, Stack size 12 bytes, uidiv.o(.text), UNUSED) <P><STRONG><a name="[77]"></a>__aeabi_uidiv</STRONG> (Thumb, 0 bytes, Stack size 12 bytes, uidiv.o(.text), UNUSED)
<P><STRONG><a name="[3f]"></a>__aeabi_uidivmod</STRONG> (Thumb, 44 bytes, Stack size 12 bytes, uidiv.o(.text)) <P><STRONG><a name="[50]"></a>__aeabi_uidivmod</STRONG> (Thumb, 44 bytes, Stack size 12 bytes, uidiv.o(.text))
<BR><BR>[Stack]<UL><LI>Max Depth = 12<LI>Call Chain = __aeabi_uidivmod <BR><BR>[Stack]<UL><LI>Max Depth = 12<LI>Call Chain = __aeabi_uidivmod
</UL> </UL>
<BR>[Called By]<UL><LI><a href="#[1b]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;TIMER0_Handler <BR>[Called By]<UL><LI><a href="#[5b]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;UART_Init
<LI><a href="#[4d]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;UART_Init <LI><a href="#[4c]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;TIMER0_Init
<LI><a href="#[41]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;TIMER0_Init <LI><a href="#[5f]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;_printf_core
<LI><a href="#[51]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;_printf_core
</UL> </UL>
<P><STRONG><a name="[26]"></a>__aeabi_ddiv</STRONG> (Thumb, 234 bytes, Stack size 40 bytes, ddiv.o(.text)) <P><STRONG><a name="[3d]"></a>__aeabi_memcpy</STRONG> (Thumb, 36 bytes, Stack size 0 bytes, memcpya.o(.text))
<BR><BR>[Called By]<UL><LI><a href="#[3c]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;EMS_Configure
</UL>
<P><STRONG><a name="[78]"></a>__aeabi_memcpy4</STRONG> (Thumb, 0 bytes, Stack size 0 bytes, memcpya.o(.text), UNUSED)
<P><STRONG><a name="[79]"></a>__aeabi_memcpy8</STRONG> (Thumb, 0 bytes, Stack size 0 bytes, memcpya.o(.text), UNUSED)
<P><STRONG><a name="[27]"></a>__aeabi_memset</STRONG> (Thumb, 14 bytes, Stack size 0 bytes, memseta.o(.text))
<BR><BR>[Called By]<UL><LI><a href="#[28]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;_memset$wrapper
<LI><a href="#[26]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;__aeabi_memclr
</UL>
<P><STRONG><a name="[7a]"></a>__aeabi_memset4</STRONG> (Thumb, 0 bytes, Stack size 0 bytes, memseta.o(.text), UNUSED)
<P><STRONG><a name="[7b]"></a>__aeabi_memset8</STRONG> (Thumb, 0 bytes, Stack size 0 bytes, memseta.o(.text), UNUSED)
<P><STRONG><a name="[26]"></a>__aeabi_memclr</STRONG> (Thumb, 4 bytes, Stack size 0 bytes, memseta.o(.text))
<BR><BR>[Calls]<UL><LI><a href="#[27]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;__aeabi_memset
</UL>
<BR>[Called By]<UL><LI><a href="#[53]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;Time_Manager_Init
</UL>
<P><STRONG><a name="[54]"></a>__aeabi_memclr4</STRONG> (Thumb, 0 bytes, Stack size 0 bytes, memseta.o(.text))
<BR><BR>[Called By]<UL><LI><a href="#[53]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;Time_Manager_Init
</UL>
<P><STRONG><a name="[7c]"></a>__aeabi_memclr8</STRONG> (Thumb, 0 bytes, Stack size 0 bytes, memseta.o(.text), UNUSED)
<P><STRONG><a name="[28]"></a>_memset$wrapper</STRONG> (Thumb, 18 bytes, Stack size 8 bytes, memseta.o(.text), UNUSED)
<BR><BR>[Calls]<UL><LI><a href="#[27]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;__aeabi_memset
</UL>
<P><STRONG><a name="[29]"></a>__aeabi_ddiv</STRONG> (Thumb, 234 bytes, Stack size 40 bytes, ddiv.o(.text))
<BR><BR>[Stack]<UL><LI>Max Depth = 48<LI>Call Chain = __aeabi_ddiv &rArr; _double_round <BR><BR>[Stack]<UL><LI>Max Depth = 48<LI>Call Chain = __aeabi_ddiv &rArr; _double_round
</UL> </UL>
<BR>[Calls]<UL><LI><a href="#[27]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;_double_round <BR>[Calls]<UL><LI><a href="#[2a]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;_double_round
</UL> </UL>
<BR>[Called By]<UL><LI><a href="#[38]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;pow <BR>[Called By]<UL><LI><a href="#[3a]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;ClockInitSet
<LI><a href="#[37]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;ClockInitSet <LI><a href="#[63]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;__mathlib_dbl_invalid
<LI><a href="#[55]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;__mathlib_dbl_invalid <LI><a href="#[61]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;__mathlib_dbl_divzero
<LI><a href="#[53]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;__mathlib_dbl_divzero <LI><a href="#[3b]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;pow
</UL> </UL>
<P><STRONG><a name="[28]"></a>__aeabi_i2d</STRONG> (Thumb, 34 bytes, Stack size 16 bytes, dflti.o(.text)) <P><STRONG><a name="[2b]"></a>__aeabi_i2d</STRONG> (Thumb, 34 bytes, Stack size 16 bytes, dflti.o(.text))
<BR><BR>[Stack]<UL><LI>Max Depth = 72<LI>Call Chain = __aeabi_i2d &rArr; _double_epilogue &rArr; __aeabi_llsl <BR><BR>[Stack]<UL><LI>Max Depth = 72<LI>Call Chain = __aeabi_i2d &rArr; _double_epilogue &rArr; _double_round
</UL> </UL>
<BR>[Calls]<UL><LI><a href="#[29]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;_double_epilogue <BR>[Calls]<UL><LI><a href="#[2c]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;_double_epilogue
</UL> </UL>
<BR>[Called By]<UL><LI><a href="#[38]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;pow <BR>[Called By]<UL><LI><a href="#[3a]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;ClockInitSet
<LI><a href="#[37]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;ClockInitSet <LI><a href="#[3b]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;pow
</UL> </UL>
<P><STRONG><a name="[2a]"></a>__aeabi_ui2d</STRONG> (Thumb, 24 bytes, Stack size 16 bytes, dfltui.o(.text)) <P><STRONG><a name="[2d]"></a>__aeabi_ui2d</STRONG> (Thumb, 24 bytes, Stack size 16 bytes, dfltui.o(.text))
<BR><BR>[Stack]<UL><LI>Max Depth = 72<LI>Call Chain = __aeabi_ui2d &rArr; _double_epilogue &rArr; __aeabi_llsl <BR><BR>[Stack]<UL><LI>Max Depth = 72<LI>Call Chain = __aeabi_ui2d &rArr; _double_epilogue &rArr; _double_round
</UL> </UL>
<BR>[Calls]<UL><LI><a href="#[29]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;_double_epilogue <BR>[Calls]<UL><LI><a href="#[2c]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;_double_epilogue
</UL> </UL>
<BR>[Called By]<UL><LI><a href="#[37]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;ClockInitSet <BR>[Called By]<UL><LI><a href="#[3a]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;ClockInitSet
</UL> </UL>
<P><STRONG><a name="[2b]"></a>__aeabi_d2uiz</STRONG> (Thumb, 50 bytes, Stack size 8 bytes, dfixui.o(.text)) <P><STRONG><a name="[2e]"></a>__aeabi_d2uiz</STRONG> (Thumb, 50 bytes, Stack size 8 bytes, dfixui.o(.text))
<BR><BR>[Stack]<UL><LI>Max Depth = 16<LI>Call Chain = __aeabi_d2uiz &rArr; __aeabi_llsr <BR><BR>[Stack]<UL><LI>Max Depth = 16<LI>Call Chain = __aeabi_d2uiz &rArr; __aeabi_llsr
</UL> </UL>
<BR>[Calls]<UL><LI><a href="#[2c]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;__aeabi_llsr <BR>[Calls]<UL><LI><a href="#[2f]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;__aeabi_llsr
</UL> </UL>
<BR>[Called By]<UL><LI><a href="#[37]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;ClockInitSet <BR>[Called By]<UL><LI><a href="#[3a]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;ClockInitSet
</UL> </UL>
<P><STRONG><a name="[2c]"></a>__aeabi_llsr</STRONG> (Thumb, 34 bytes, Stack size 8 bytes, llushr.o(.text)) <P><STRONG><a name="[2f]"></a>__aeabi_llsr</STRONG> (Thumb, 34 bytes, Stack size 8 bytes, llushr.o(.text))
<BR><BR>[Stack]<UL><LI>Max Depth = 8<LI>Call Chain = __aeabi_llsr <BR><BR>[Stack]<UL><LI>Max Depth = 8<LI>Call Chain = __aeabi_llsr
</UL> </UL>
<BR>[Called By]<UL><LI><a href="#[2b]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;__aeabi_d2uiz <BR>[Called By]<UL><LI><a href="#[2e]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;__aeabi_d2uiz
<LI><a href="#[35]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;_dsqrt <LI><a href="#[38]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;_dsqrt
<LI><a href="#[29]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;_double_epilogue <LI><a href="#[2c]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;_double_epilogue
</UL> </UL>
<P><STRONG><a name="[66]"></a>_ll_ushift_r</STRONG> (Thumb, 0 bytes, Stack size 8 bytes, llushr.o(.text), UNUSED) <P><STRONG><a name="[7d]"></a>_ll_ushift_r</STRONG> (Thumb, 0 bytes, Stack size 8 bytes, llushr.o(.text), UNUSED)
<P><STRONG><a name="[67]"></a>__I$use$fp</STRONG> (Thumb, 0 bytes, Stack size 8 bytes, iusefp.o(.text), UNUSED) <P><STRONG><a name="[7e]"></a>__I$use$fp</STRONG> (Thumb, 0 bytes, Stack size 8 bytes, iusefp.o(.text), UNUSED)
<P><STRONG><a name="[27]"></a>_double_round</STRONG> (Thumb, 26 bytes, Stack size 8 bytes, depilogue.o(.text)) <P><STRONG><a name="[2a]"></a>_double_round</STRONG> (Thumb, 26 bytes, Stack size 8 bytes, depilogue.o(.text))
<BR><BR>[Stack]<UL><LI>Max Depth = 8<LI>Call Chain = _double_round <BR><BR>[Stack]<UL><LI>Max Depth = 8<LI>Call Chain = _double_round
</UL> </UL>
<BR>[Called By]<UL><LI><a href="#[2f]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;__aeabi_dadd <BR>[Called By]<UL><LI><a href="#[29]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;__aeabi_ddiv
<LI><a href="#[26]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;__aeabi_ddiv <LI><a href="#[38]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;_dsqrt
<LI><a href="#[35]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;_dsqrt <LI><a href="#[2c]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;_double_epilogue
<LI><a href="#[29]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;_double_epilogue <LI><a href="#[32]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;__aeabi_dadd
</UL> </UL>
<P><STRONG><a name="[29]"></a>_double_epilogue</STRONG> (Thumb, 164 bytes, Stack size 48 bytes, depilogue.o(.text)) <P><STRONG><a name="[2c]"></a>_double_epilogue</STRONG> (Thumb, 164 bytes, Stack size 48 bytes, depilogue.o(.text))
<BR><BR>[Stack]<UL><LI>Max Depth = 56<LI>Call Chain = _double_epilogue &rArr; __aeabi_llsl <BR><BR>[Stack]<UL><LI>Max Depth = 56<LI>Call Chain = _double_epilogue &rArr; _double_round
</UL> </UL>
<BR>[Calls]<UL><LI><a href="#[2e]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;__aeabi_llsl <BR>[Calls]<UL><LI><a href="#[2a]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;_double_round
<LI><a href="#[2d]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;__ARM_clz <LI><a href="#[31]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;__aeabi_llsl
<LI><a href="#[2c]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;__aeabi_llsr <LI><a href="#[30]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;__ARM_clz
<LI><a href="#[27]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;_double_round <LI><a href="#[2f]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;__aeabi_llsr
</UL> </UL>
<BR>[Called By]<UL><LI><a href="#[33]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;__aeabi_dmul <BR>[Called By]<UL><LI><a href="#[2d]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;__aeabi_ui2d
<LI><a href="#[2f]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;__aeabi_dadd <LI><a href="#[2b]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;__aeabi_i2d
<LI><a href="#[2a]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;__aeabi_ui2d <LI><a href="#[36]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;__aeabi_dmul
<LI><a href="#[28]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;__aeabi_i2d <LI><a href="#[32]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;__aeabi_dadd
</UL> </UL>
<P><STRONG><a name="[2f]"></a>__aeabi_dadd</STRONG> (Thumb, 328 bytes, Stack size 48 bytes, dadd.o(.text)) <P><STRONG><a name="[32]"></a>__aeabi_dadd</STRONG> (Thumb, 328 bytes, Stack size 48 bytes, dadd.o(.text))
<BR><BR>[Stack]<UL><LI>Max Depth = 104<LI>Call Chain = __aeabi_dadd &rArr; _double_epilogue &rArr; __aeabi_llsl <BR><BR>[Stack]<UL><LI>Max Depth = 104<LI>Call Chain = __aeabi_dadd &rArr; _double_epilogue &rArr; _double_round
</UL> </UL>
<BR>[Calls]<UL><LI><a href="#[30]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;__aeabi_lasr <BR>[Calls]<UL><LI><a href="#[2c]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;_double_epilogue
<LI><a href="#[2e]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;__aeabi_llsl <LI><a href="#[2a]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;_double_round
<LI><a href="#[29]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;_double_epilogue <LI><a href="#[33]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;__aeabi_lasr
<LI><a href="#[27]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;_double_round <LI><a href="#[31]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;__aeabi_llsl
</UL> </UL>
<BR>[Called By]<UL><LI><a href="#[31]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;__aeabi_dsub <BR>[Called By]<UL><LI><a href="#[60]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;__kernel_poly
<LI><a href="#[32]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;__aeabi_drsub <LI><a href="#[62]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;__mathlib_dbl_infnan2
<LI><a href="#[38]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;pow <LI><a href="#[34]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;__aeabi_dsub
<LI><a href="#[52]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;__kernel_poly <LI><a href="#[35]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;__aeabi_drsub
<LI><a href="#[54]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;__mathlib_dbl_infnan2 <LI><a href="#[3b]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;pow
</UL> </UL>
<P><STRONG><a name="[31]"></a>__aeabi_dsub</STRONG> (Thumb, 12 bytes, Stack size 8 bytes, dadd.o(.text)) <P><STRONG><a name="[34]"></a>__aeabi_dsub</STRONG> (Thumb, 12 bytes, Stack size 8 bytes, dadd.o(.text))
<BR><BR>[Stack]<UL><LI>Max Depth = 112<LI>Call Chain = __aeabi_dsub &rArr; __aeabi_dadd &rArr; _double_epilogue &rArr; __aeabi_llsl <BR><BR>[Stack]<UL><LI>Max Depth = 112<LI>Call Chain = __aeabi_dsub &rArr; __aeabi_dadd &rArr; _double_epilogue &rArr; _double_round
</UL> </UL>
<BR>[Calls]<UL><LI><a href="#[2f]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;__aeabi_dadd <BR>[Calls]<UL><LI><a href="#[32]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;__aeabi_dadd
</UL> </UL>
<BR>[Called By]<UL><LI><a href="#[38]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;pow <BR>[Called By]<UL><LI><a href="#[3b]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;pow
</UL> </UL>
<P><STRONG><a name="[32]"></a>__aeabi_drsub</STRONG> (Thumb, 12 bytes, Stack size 8 bytes, dadd.o(.text)) <P><STRONG><a name="[35]"></a>__aeabi_drsub</STRONG> (Thumb, 12 bytes, Stack size 8 bytes, dadd.o(.text))
<BR><BR>[Stack]<UL><LI>Max Depth = 112<LI>Call Chain = __aeabi_drsub &rArr; __aeabi_dadd &rArr; _double_epilogue &rArr; __aeabi_llsl <BR><BR>[Stack]<UL><LI>Max Depth = 112<LI>Call Chain = __aeabi_drsub &rArr; __aeabi_dadd &rArr; _double_epilogue &rArr; _double_round
</UL> </UL>
<BR>[Calls]<UL><LI><a href="#[2f]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;__aeabi_dadd <BR>[Calls]<UL><LI><a href="#[32]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;__aeabi_dadd
</UL> </UL>
<BR>[Called By]<UL><LI><a href="#[38]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;pow <BR>[Called By]<UL><LI><a href="#[3b]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;pow
</UL> </UL>
<P><STRONG><a name="[33]"></a>__aeabi_dmul</STRONG> (Thumb, 202 bytes, Stack size 72 bytes, dmul.o(.text)) <P><STRONG><a name="[36]"></a>__aeabi_dmul</STRONG> (Thumb, 202 bytes, Stack size 72 bytes, dmul.o(.text))
<BR><BR>[Stack]<UL><LI>Max Depth = 128<LI>Call Chain = __aeabi_dmul &rArr; _double_epilogue &rArr; __aeabi_llsl <BR><BR>[Stack]<UL><LI>Max Depth = 128<LI>Call Chain = __aeabi_dmul &rArr; _double_epilogue &rArr; _double_round
</UL> </UL>
<BR>[Calls]<UL><LI><a href="#[29]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;_double_epilogue <BR>[Calls]<UL><LI><a href="#[2c]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;_double_epilogue
</UL> </UL>
<BR>[Called By]<UL><LI><a href="#[38]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;pow <BR>[Called By]<UL><LI><a href="#[60]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;__kernel_poly
<LI><a href="#[52]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;__kernel_poly <LI><a href="#[3b]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;pow
</UL> </UL>
<P><STRONG><a name="[57]"></a>__ARM_scalbn</STRONG> (Thumb, 44 bytes, Stack size 16 bytes, dscalb.o(.text)) <P><STRONG><a name="[65]"></a>__ARM_scalbn</STRONG> (Thumb, 44 bytes, Stack size 16 bytes, dscalb.o(.text))
<BR><BR>[Stack]<UL><LI>Max Depth = 16<LI>Call Chain = __ARM_scalbn <BR><BR>[Stack]<UL><LI>Max Depth = 16<LI>Call Chain = __ARM_scalbn
</UL> </UL>
<BR>[Called By]<UL><LI><a href="#[38]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;pow <BR>[Called By]<UL><LI><a href="#[66]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;__mathlib_dbl_underflow
<LI><a href="#[58]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;__mathlib_dbl_underflow <LI><a href="#[64]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;__mathlib_dbl_overflow
<LI><a href="#[56]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;__mathlib_dbl_overflow <LI><a href="#[3b]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;pow
</UL> </UL>
<P><STRONG><a name="[68]"></a>scalbn</STRONG> (Thumb, 0 bytes, Stack size 16 bytes, dscalb.o(.text), UNUSED) <P><STRONG><a name="[7f]"></a>scalbn</STRONG> (Thumb, 0 bytes, Stack size 16 bytes, dscalb.o(.text), UNUSED)
<P><STRONG><a name="[5d]"></a>__aeabi_cdrcmple</STRONG> (Thumb, 38 bytes, Stack size 0 bytes, cdrcmple.o(.text)) <P><STRONG><a name="[6d]"></a>__aeabi_cdrcmple</STRONG> (Thumb, 38 bytes, Stack size 0 bytes, cdrcmple.o(.text))
<BR><BR>[Called By]<UL><LI><a href="#[38]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;pow <BR><BR>[Called By]<UL><LI><a href="#[3b]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;pow
</UL> </UL>
<P><STRONG><a name="[25]"></a>__scatterload</STRONG> (Thumb, 28 bytes, Stack size 0 bytes, init.o(.text)) <P><STRONG><a name="[25]"></a>__scatterload</STRONG> (Thumb, 28 bytes, Stack size 0 bytes, init.o(.text))
<BR><BR>[Calls]<UL><LI><a href="#[34]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;__main_after_scatterload <BR><BR>[Calls]<UL><LI><a href="#[37]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;__main_after_scatterload
</UL> </UL>
<BR>[Called By]<UL><LI><a href="#[24]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;_main_scatterload <BR>[Called By]<UL><LI><a href="#[24]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;_main_scatterload
</UL> </UL>
<P><STRONG><a name="[69]"></a>__scatterload_rt2</STRONG> (Thumb, 0 bytes, Stack size 0 bytes, init.o(.text), UNUSED) <P><STRONG><a name="[80]"></a>__scatterload_rt2</STRONG> (Thumb, 0 bytes, Stack size 0 bytes, init.o(.text), UNUSED)
<P><STRONG><a name="[2e]"></a>__aeabi_llsl</STRONG> (Thumb, 32 bytes, Stack size 8 bytes, llshl.o(.text)) <P><STRONG><a name="[31]"></a>__aeabi_llsl</STRONG> (Thumb, 32 bytes, Stack size 8 bytes, llshl.o(.text))
<BR><BR>[Stack]<UL><LI>Max Depth = 8<LI>Call Chain = __aeabi_llsl <BR><BR>[Stack]<UL><LI>Max Depth = 8<LI>Call Chain = __aeabi_llsl
</UL> </UL>
<BR>[Called By]<UL><LI><a href="#[2f]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;__aeabi_dadd <BR>[Called By]<UL><LI><a href="#[2c]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;_double_epilogue
<LI><a href="#[29]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;_double_epilogue <LI><a href="#[32]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;__aeabi_dadd
</UL> </UL>
<P><STRONG><a name="[6a]"></a>_ll_shift_l</STRONG> (Thumb, 0 bytes, Stack size 8 bytes, llshl.o(.text), UNUSED) <P><STRONG><a name="[81]"></a>_ll_shift_l</STRONG> (Thumb, 0 bytes, Stack size 8 bytes, llshl.o(.text), UNUSED)
<P><STRONG><a name="[30]"></a>__aeabi_lasr</STRONG> (Thumb, 38 bytes, Stack size 8 bytes, llsshr.o(.text)) <P><STRONG><a name="[33]"></a>__aeabi_lasr</STRONG> (Thumb, 38 bytes, Stack size 8 bytes, llsshr.o(.text))
<BR><BR>[Stack]<UL><LI>Max Depth = 8<LI>Call Chain = __aeabi_lasr <BR><BR>[Stack]<UL><LI>Max Depth = 8<LI>Call Chain = __aeabi_lasr
</UL> </UL>
<BR>[Called By]<UL><LI><a href="#[2f]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;__aeabi_dadd <BR>[Called By]<UL><LI><a href="#[32]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;__aeabi_dadd
</UL> </UL>
<P><STRONG><a name="[6b]"></a>_ll_sshift_r</STRONG> (Thumb, 0 bytes, Stack size 8 bytes, llsshr.o(.text), UNUSED) <P><STRONG><a name="[82]"></a>_ll_sshift_r</STRONG> (Thumb, 0 bytes, Stack size 8 bytes, llsshr.o(.text), UNUSED)
<P><STRONG><a name="[35]"></a>_dsqrt</STRONG> (Thumb, 162 bytes, Stack size 32 bytes, dsqrt.o(.text)) <P><STRONG><a name="[38]"></a>_dsqrt</STRONG> (Thumb, 162 bytes, Stack size 32 bytes, dsqrt.o(.text))
<BR><BR>[Stack]<UL><LI>Max Depth = 40<LI>Call Chain = _dsqrt &rArr; __aeabi_llsr <BR><BR>[Stack]<UL><LI>Max Depth = 40<LI>Call Chain = _dsqrt &rArr; _double_round
</UL> </UL>
<BR>[Calls]<UL><LI><a href="#[2c]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;__aeabi_llsr <BR>[Calls]<UL><LI><a href="#[2a]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;_double_round
<LI><a href="#[27]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;_double_round <LI><a href="#[2f]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;__aeabi_llsr
</UL> </UL>
<BR>[Called By]<UL><LI><a href="#[5c]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;sqrt <BR>[Called By]<UL><LI><a href="#[6c]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;sqrt
</UL> </UL>
<P><STRONG><a name="[45]"></a>CMSDK_timer_Init</STRONG> (Thumb, 26 bytes, Stack size 8 bytes, ens1_timer.o(i.CMSDK_timer_Init)) <P><STRONG><a name="[51]"></a>CMSDK_timer_Init</STRONG> (Thumb, 26 bytes, Stack size 8 bytes, ens1_timer.o(i.CMSDK_timer_Init))
<BR><BR>[Stack]<UL><LI>Max Depth = 8<LI>Call Chain = CMSDK_timer_Init <BR><BR>[Stack]<UL><LI>Max Depth = 8<LI>Call Chain = CMSDK_timer_Init
</UL> </UL>
<BR>[Called By]<UL><LI><a href="#[41]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;TIMER0_Init <BR>[Called By]<UL><LI><a href="#[4c]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;TIMER0_Init
</UL> </UL>
<P><STRONG><a name="[36]"></a>ClockInit</STRONG> (Thumb, 20 bytes, Stack size 8 bytes, ens1_clock.o(i.ClockInit)) <P><STRONG><a name="[39]"></a>ClockInit</STRONG> (Thumb, 14 bytes, Stack size 8 bytes, ens1_clock.o(i.ClockInit))
<BR><BR>[Stack]<UL><LI>Max Depth = 336<LI>Call Chain = ClockInit &rArr; ClockInitSet &rArr; pow &rArr; __kernel_poly &rArr; __aeabi_dmul &rArr; _double_epilogue &rArr; __aeabi_llsl <BR><BR>[Stack]<UL><LI>Max Depth = 336<LI>Call Chain = ClockInit &rArr; ClockInitSet &rArr; pow &rArr; __kernel_poly &rArr; __aeabi_dmul &rArr; _double_epilogue &rArr; _double_round
</UL> </UL>
<BR>[Calls]<UL><LI><a href="#[37]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;ClockInitSet <BR>[Calls]<UL><LI><a href="#[3a]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;ClockInitSet
</UL> </UL>
<BR>[Called By]<UL><LI><a href="#[20]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;main <BR>[Called By]<UL><LI><a href="#[20]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;main
</UL> </UL>
<P><STRONG><a name="[37]"></a>ClockInitSet</STRONG> (Thumb, 348 bytes, Stack size 48 bytes, ens1_clock.o(i.ClockInitSet)) <P><STRONG><a name="[3a]"></a>ClockInitSet</STRONG> (Thumb, 348 bytes, Stack size 48 bytes, ens1_clock.o(i.ClockInitSet))
<BR><BR>[Stack]<UL><LI>Max Depth = 328<LI>Call Chain = ClockInitSet &rArr; pow &rArr; __kernel_poly &rArr; __aeabi_dmul &rArr; _double_epilogue &rArr; __aeabi_llsl <BR><BR>[Stack]<UL><LI>Max Depth = 328<LI>Call Chain = ClockInitSet &rArr; pow &rArr; __kernel_poly &rArr; __aeabi_dmul &rArr; _double_epilogue &rArr; _double_round
</UL> </UL>
<BR>[Calls]<UL><LI><a href="#[38]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;pow <BR>[Calls]<UL><LI><a href="#[2d]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;__aeabi_ui2d
<LI><a href="#[2a]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;__aeabi_ui2d <LI><a href="#[2b]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;__aeabi_i2d
<LI><a href="#[28]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;__aeabi_i2d <LI><a href="#[29]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;__aeabi_ddiv
<LI><a href="#[26]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;__aeabi_ddiv <LI><a href="#[2e]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;__aeabi_d2uiz
<LI><a href="#[2b]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;__aeabi_d2uiz <LI><a href="#[3b]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;pow
</UL> </UL>
<BR>[Called By]<UL><LI><a href="#[36]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;ClockInit <BR>[Called By]<UL><LI><a href="#[39]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;ClockInit
</UL> </UL>
<P><STRONG><a name="[3a]"></a>GPIO_AltFunction</STRONG> (Thumb, 86 bytes, Stack size 8 bytes, ens1_gpio.o(i.GPIO_AltFunction)) <P><STRONG><a name="[3c]"></a>EMS_Configure</STRONG> (Thumb, 20 bytes, Stack size 8 bytes, ens1_wavegen.o(i.EMS_Configure))
<BR><BR>[Stack]<UL><LI>Max Depth = 8<LI>Call Chain = EMS_Configure
</UL>
<BR>[Calls]<UL><LI><a href="#[3d]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;__aeabi_memcpy
</UL>
<BR>[Called By]<UL><LI><a href="#[20]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;main
</UL>
<P><STRONG><a name="[3e]"></a>EMS_Process</STRONG> (Thumb, 86 bytes, Stack size 8 bytes, ens1_wavegen.o(i.EMS_Process))
<BR><BR>[Stack]<UL><LI>Max Depth = 60<LI>Call Chain = EMS_Process &rArr; wavegen_driverA_sine_test &rArr; puts &rArr; fputc &rArr; UartPutc
</UL>
<BR>[Calls]<UL><LI><a href="#[3f]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;wavegen_driverA_sine_test
</UL>
<BR>[Called By]<UL><LI><a href="#[20]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;main
</UL>
<P><STRONG><a name="[40]"></a>EMS_Start</STRONG> (Thumb, 14 bytes, Stack size 8 bytes, ens1_wavegen.o(i.EMS_Start))
<BR><BR>[Stack]<UL><LI>Max Depth = 32<LI>Call Chain = EMS_Start &rArr; __2printf
</UL>
<BR>[Calls]<UL><LI><a href="#[42]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;__2printf
<LI><a href="#[41]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;wavegen_Start
</UL>
<BR>[Called By]<UL><LI><a href="#[20]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;main
</UL>
<P><STRONG><a name="[43]"></a>EMS_Stop</STRONG> (Thumb, 26 bytes, Stack size 8 bytes, ens1_wavegen.o(i.EMS_Stop))
<BR><BR>[Stack]<UL><LI>Max Depth = 32<LI>Call Chain = EMS_Stop &rArr; __2printf
</UL>
<BR>[Calls]<UL><LI><a href="#[42]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;__2printf
<LI><a href="#[44]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;wavegen_Stop
</UL>
<BR>[Called By]<UL><LI><a href="#[20]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;main
</UL>
<P><STRONG><a name="[46]"></a>GPIO_AltFunction</STRONG> (Thumb, 86 bytes, Stack size 8 bytes, ens1_gpio.o(i.GPIO_AltFunction))
<BR><BR>[Stack]<UL><LI>Max Depth = 8<LI>Call Chain = GPIO_AltFunction <BR><BR>[Stack]<UL><LI>Max Depth = 8<LI>Call Chain = GPIO_AltFunction
</UL> </UL>
<BR>[Called By]<UL><LI><a href="#[4d]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;UART_Init <BR>[Called By]<UL><LI><a href="#[5b]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;UART_Init
<LI><a href="#[39]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;GPIO_IO_Init <LI><a href="#[45]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;GPIO_IO_Init
</UL> </UL>
<P><STRONG><a name="[3c]"></a>GPIO_GetOutputValue</STRONG> (Thumb, 18 bytes, Stack size 0 bytes, ens1_gpio.o(i.GPIO_GetOutputValue)) <P><STRONG><a name="[48]"></a>GPIO_GetOutputValue</STRONG> (Thumb, 18 bytes, Stack size 0 bytes, ens1_gpio.o(i.GPIO_GetOutputValue))
<BR><BR>[Called By]<UL><LI><a href="#[3b]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;GPIO_Overturn <BR><BR>[Called By]<UL><LI><a href="#[47]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;GPIO_Overturn
</UL> </UL>
<P><STRONG><a name="[39]"></a>GPIO_IO_Init</STRONG> (Thumb, 342 bytes, Stack size 36 bytes, ens1_gpio.o(i.GPIO_IO_Init)) <P><STRONG><a name="[45]"></a>GPIO_IO_Init</STRONG> (Thumb, 342 bytes, Stack size 36 bytes, ens1_gpio.o(i.GPIO_IO_Init))
<BR><BR>[Stack]<UL><LI>Max Depth = 44<LI>Call Chain = GPIO_IO_Init &rArr; GPIO_AltFunction <BR><BR>[Stack]<UL><LI>Max Depth = 44<LI>Call Chain = GPIO_IO_Init &rArr; GPIO_AltFunction
</UL> </UL>
<BR>[Calls]<UL><LI><a href="#[3a]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;GPIO_AltFunction <BR>[Calls]<UL><LI><a href="#[46]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;GPIO_AltFunction
</UL> </UL>
<BR>[Called By]<UL><LI><a href="#[20]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;main <BR>[Called By]<UL><LI><a href="#[20]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;main
</UL> </UL>
<P><STRONG><a name="[5a]"></a>GPIO_Output</STRONG> (Thumb, 36 bytes, Stack size 0 bytes, ens1_gpio.o(i.GPIO_Output)) <P><STRONG><a name="[68]"></a>GPIO_Output</STRONG> (Thumb, 36 bytes, Stack size 0 bytes, ens1_gpio.o(i.GPIO_Output))
<BR><BR>[Called By]<UL><LI><a href="#[20]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;main <BR><BR>[Called By]<UL><LI><a href="#[20]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;main
</UL> </UL>
<P><STRONG><a name="[3b]"></a>GPIO_Overturn</STRONG> (Thumb, 40 bytes, Stack size 4 bytes, ens1_gpio.o(i.GPIO_Overturn)) <P><STRONG><a name="[47]"></a>GPIO_Overturn</STRONG> (Thumb, 40 bytes, Stack size 4 bytes, ens1_gpio.o(i.GPIO_Overturn))
<BR><BR>[Stack]<UL><LI>Max Depth = 4<LI>Call Chain = GPIO_Overturn <BR><BR>[Stack]<UL><LI>Max Depth = 4<LI>Call Chain = GPIO_Overturn
</UL> </UL>
<BR>[Calls]<UL><LI><a href="#[3e]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;GPIO_SetOutput <BR>[Calls]<UL><LI><a href="#[4a]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;GPIO_SetOutput
<LI><a href="#[3d]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;GPIO_ResetOutput <LI><a href="#[49]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;GPIO_ResetOutput
<LI><a href="#[3c]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;GPIO_GetOutputValue <LI><a href="#[48]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;GPIO_GetOutputValue
</UL> </UL>
<BR>[Called By]<UL><LI><a href="#[1b]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;TIMER0_Handler <BR>[Called By]<UL><LI><a href="#[20]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;main
</UL> </UL>
<P><STRONG><a name="[3d]"></a>GPIO_ResetOutput</STRONG> (Thumb, 16 bytes, Stack size 0 bytes, ens1_gpio.o(i.GPIO_ResetOutput)) <P><STRONG><a name="[49]"></a>GPIO_ResetOutput</STRONG> (Thumb, 16 bytes, Stack size 0 bytes, ens1_gpio.o(i.GPIO_ResetOutput))
<BR><BR>[Called By]<UL><LI><a href="#[3b]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;GPIO_Overturn <BR><BR>[Called By]<UL><LI><a href="#[47]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;GPIO_Overturn
</UL> </UL>
<P><STRONG><a name="[3e]"></a>GPIO_SetOutput</STRONG> (Thumb, 16 bytes, Stack size 0 bytes, ens1_gpio.o(i.GPIO_SetOutput)) <P><STRONG><a name="[4a]"></a>GPIO_SetOutput</STRONG> (Thumb, 16 bytes, Stack size 0 bytes, ens1_gpio.o(i.GPIO_SetOutput))
<BR><BR>[Called By]<UL><LI><a href="#[3b]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;GPIO_Overturn <BR><BR>[Called By]<UL><LI><a href="#[47]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;GPIO_Overturn
</UL> </UL>
<P><STRONG><a name="[59]"></a>MTP_init</STRONG> (Thumb, 4 bytes, Stack size 0 bytes, ens1_mtp.o(i.MTP_init)) <P><STRONG><a name="[67]"></a>MTP_init</STRONG> (Thumb, 4 bytes, Stack size 0 bytes, ens1_mtp.o(i.MTP_init))
<BR><BR>[Called By]<UL><LI><a href="#[20]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;main <BR><BR>[Called By]<UL><LI><a href="#[20]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;main
</UL> </UL>
<P><STRONG><a name="[42]"></a>PCLK_Enable</STRONG> (Thumb, 20 bytes, Stack size 0 bytes, ens1_clock.o(i.PCLK_Enable)) <P><STRONG><a name="[4d]"></a>PCLK_Enable</STRONG> (Thumb, 20 bytes, Stack size 0 bytes, ens1_clock.o(i.PCLK_Enable))
<BR><BR>[Called By]<UL><LI><a href="#[4d]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;UART_Init <BR><BR>[Called By]<UL><LI><a href="#[5b]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;UART_Init
<LI><a href="#[41]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;TIMER0_Init <LI><a href="#[4c]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;TIMER0_Init
</UL> </UL>
<P><STRONG><a name="[21]"></a>SystemInit</STRONG> (Thumb, 8 bytes, Stack size 0 bytes, system_cmsdk_cm0.o(i.SystemInit)) <P><STRONG><a name="[21]"></a>SystemInit</STRONG> (Thumb, 8 bytes, Stack size 0 bytes, system_cmsdk_cm0.o(i.SystemInit))
<BR>[Address Reference Count : 1]<UL><LI> startup_cmsdk_cm0.o(.text) <BR>[Address Reference Count : 1]<UL><LI> startup_cmsdk_cm0.o(.text)
</UL> </UL>
<P><STRONG><a name="[1b]"></a>TIMER0_Handler</STRONG> (Thumb, 62 bytes, Stack size 8 bytes, ens1_timer.o(i.TIMER0_Handler)) <P><STRONG><a name="[1b]"></a>TIMER0_Handler</STRONG> (Thumb, 24 bytes, Stack size 4 bytes, ens1_timer.o(i.TIMER0_Handler))
<BR><BR>[Stack]<UL><LI>Max Depth = 32<LI>Call Chain = TIMER0_Handler &rArr; __2printf <BR><BR>[Stack]<UL><LI>Max Depth = 4<LI>Call Chain = TIMER0_Handler
</UL> </UL>
<BR>[Calls]<UL><LI><a href="#[3b]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;GPIO_Overturn <BR>[Calls]<UL><LI><a href="#[4b]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;Time_Manager_Process
<LI><a href="#[40]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;__2printf
<LI><a href="#[3f]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;__aeabi_uidivmod
</UL> </UL>
<BR>[Address Reference Count : 1]<UL><LI> startup_cmsdk_cm0.o(RESET) <BR>[Address Reference Count : 1]<UL><LI> startup_cmsdk_cm0.o(RESET)
</UL> </UL>
<P><STRONG><a name="[41]"></a>TIMER0_Init</STRONG> (Thumb, 56 bytes, Stack size 16 bytes, ens1_timer.o(i.TIMER0_Init)) <P><STRONG><a name="[4c]"></a>TIMER0_Init</STRONG> (Thumb, 72 bytes, Stack size 16 bytes, ens1_timer.o(i.TIMER0_Init))
<BR><BR>[Stack]<UL><LI>Max Depth = 28<LI>Call Chain = TIMER0_Init &rArr; __aeabi_uidivmod <BR><BR>[Stack]<UL><LI>Max Depth = 40<LI>Call Chain = TIMER0_Init &rArr; __2printf
</UL> </UL>
<BR>[Calls]<UL><LI><a href="#[45]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;CMSDK_timer_Init <BR>[Calls]<UL><LI><a href="#[51]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;CMSDK_timer_Init
<LI><a href="#[46]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;NVIC_EnableIRQ <LI><a href="#[52]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;NVIC_EnableIRQ
<LI><a href="#[43]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;NVIC_DisableIRQ <LI><a href="#[4e]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;NVIC_DisableIRQ
<LI><a href="#[44]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;NVIC_ClearPendingIRQ <LI><a href="#[4f]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;NVIC_ClearPendingIRQ
<LI><a href="#[42]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;PCLK_Enable <LI><a href="#[4d]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;PCLK_Enable
<LI><a href="#[3f]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;__aeabi_uidivmod <LI><a href="#[42]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;__2printf
<LI><a href="#[50]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;__aeabi_uidivmod
</UL> </UL>
<BR>[Called By]<UL><LI><a href="#[20]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;main <BR>[Called By]<UL><LI><a href="#[20]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;main
</UL> </UL>
@ -468,234 +533,301 @@ Global Symbols
<P><STRONG><a name="[1c]"></a>TIMER1_Handler</STRONG> (Thumb, 18 bytes, Stack size 0 bytes, ens1_timer.o(i.TIMER1_Handler)) <P><STRONG><a name="[1c]"></a>TIMER1_Handler</STRONG> (Thumb, 18 bytes, Stack size 0 bytes, ens1_timer.o(i.TIMER1_Handler))
<BR>[Address Reference Count : 1]<UL><LI> startup_cmsdk_cm0.o(RESET) <BR>[Address Reference Count : 1]<UL><LI> startup_cmsdk_cm0.o(RESET)
</UL> </UL>
<P><STRONG><a name="[6a]"></a>Time_Manager_GetFlags</STRONG> (Thumb, 4 bytes, Stack size 0 bytes, ens1_timer.o(i.Time_Manager_GetFlags))
<BR><BR>[Called By]<UL><LI><a href="#[20]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;main
</UL>
<P><STRONG><a name="[53]"></a>Time_Manager_Init</STRONG> (Thumb, 20 bytes, Stack size 8 bytes, ens1_timer.o(i.Time_Manager_Init))
<BR><BR>[Stack]<UL><LI>Max Depth = 8<LI>Call Chain = Time_Manager_Init
</UL>
<BR>[Calls]<UL><LI><a href="#[54]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;__aeabi_memclr4
<LI><a href="#[26]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;__aeabi_memclr
</UL>
<BR>[Called By]<UL><LI><a href="#[20]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;main
</UL>
<P><STRONG><a name="[4b]"></a>Time_Manager_Process</STRONG> (Thumb, 174 bytes, Stack size 0 bytes, ens1_timer.o(i.Time_Manager_Process))
<BR><BR>[Called By]<UL><LI><a href="#[1b]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;TIMER0_Handler
</UL>
<P><STRONG><a name="[12]"></a>UART0_Handler</STRONG> (Thumb, 108 bytes, Stack size 8 bytes, ens1_uart.o(i.UART0_Handler)) <P><STRONG><a name="[12]"></a>UART0_Handler</STRONG> (Thumb, 108 bytes, Stack size 8 bytes, ens1_uart.o(i.UART0_Handler))
<BR><BR>[Stack]<UL><LI>Max Depth = 12<LI>Call Chain = UART0_Handler &rArr; UartPutc <BR><BR>[Stack]<UL><LI>Max Depth = 12<LI>Call Chain = UART0_Handler &rArr; UartPutc
</UL> </UL>
<BR>[Calls]<UL><LI><a href="#[49]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;UartPutc <BR>[Calls]<UL><LI><a href="#[57]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;UartPutc
<LI><a href="#[48]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;UART_INT_TYPE <LI><a href="#[56]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;UART_INT_TYPE
<LI><a href="#[47]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;NVIC_ClearPendingIRQ <LI><a href="#[55]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;NVIC_ClearPendingIRQ
</UL> </UL>
<BR>[Address Reference Count : 1]<UL><LI> startup_cmsdk_cm0.o(RESET) <BR>[Address Reference Count : 1]<UL><LI> startup_cmsdk_cm0.o(RESET)
</UL> </UL>
<P><STRONG><a name="[13]"></a>UART1_Handler</STRONG> (Thumb, 92 bytes, Stack size 8 bytes, ens1_uart.o(i.UART1_Handler)) <P><STRONG><a name="[13]"></a>UART1_Handler</STRONG> (Thumb, 92 bytes, Stack size 8 bytes, ens1_uart.o(i.UART1_Handler))
<BR><BR>[Stack]<UL><LI>Max Depth = 12<LI>Call Chain = UART1_Handler &rArr; UartPutc <BR><BR>[Stack]<UL><LI>Max Depth = 12<LI>Call Chain = UART1_Handler &rArr; UartPutc
</UL> </UL>
<BR>[Calls]<UL><LI><a href="#[49]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;UartPutc <BR>[Calls]<UL><LI><a href="#[57]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;UartPutc
<LI><a href="#[48]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;UART_INT_TYPE <LI><a href="#[56]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;UART_INT_TYPE
<LI><a href="#[47]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;NVIC_ClearPendingIRQ <LI><a href="#[55]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;NVIC_ClearPendingIRQ
</UL> </UL>
<BR>[Address Reference Count : 1]<UL><LI> startup_cmsdk_cm0.o(RESET) <BR>[Address Reference Count : 1]<UL><LI> startup_cmsdk_cm0.o(RESET)
</UL> </UL>
<P><STRONG><a name="[4e]"></a>UARTLine_THREmpty</STRONG> (Thumb, 10 bytes, Stack size 0 bytes, ens1_uart.o(i.UARTLine_THREmpty)) <P><STRONG><a name="[5c]"></a>UARTLine_THREmpty</STRONG> (Thumb, 10 bytes, Stack size 0 bytes, ens1_uart.o(i.UARTLine_THREmpty))
<BR><BR>[Called By]<UL><LI><a href="#[49]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;UartPutc <BR><BR>[Called By]<UL><LI><a href="#[57]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;UartPutc
</UL> </UL>
<P><STRONG><a name="[48]"></a>UART_INT_TYPE</STRONG> (Thumb, 10 bytes, Stack size 0 bytes, ens1_uart.o(i.UART_INT_TYPE)) <P><STRONG><a name="[56]"></a>UART_INT_TYPE</STRONG> (Thumb, 10 bytes, Stack size 0 bytes, ens1_uart.o(i.UART_INT_TYPE))
<BR><BR>[Called By]<UL><LI><a href="#[13]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;UART1_Handler <BR><BR>[Called By]<UL><LI><a href="#[13]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;UART1_Handler
<LI><a href="#[12]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;UART0_Handler <LI><a href="#[12]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;UART0_Handler
</UL> </UL>
<P><STRONG><a name="[4a]"></a>UART_ITConfig</STRONG> (Thumb, 84 bytes, Stack size 16 bytes, ens1_uart.o(i.UART_ITConfig)) <P><STRONG><a name="[58]"></a>UART_ITConfig</STRONG> (Thumb, 84 bytes, Stack size 16 bytes, ens1_uart.o(i.UART_ITConfig))
<BR><BR>[Stack]<UL><LI>Max Depth = 16<LI>Call Chain = UART_ITConfig <BR><BR>[Stack]<UL><LI>Max Depth = 16<LI>Call Chain = UART_ITConfig
</UL> </UL>
<BR>[Calls]<UL><LI><a href="#[4c]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;NVIC_EnableIRQ <BR>[Calls]<UL><LI><a href="#[5a]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;NVIC_EnableIRQ
<LI><a href="#[4b]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;NVIC_DisableIRQ <LI><a href="#[59]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;NVIC_DisableIRQ
<LI><a href="#[47]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;NVIC_ClearPendingIRQ <LI><a href="#[55]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;NVIC_ClearPendingIRQ
</UL> </UL>
<BR>[Called By]<UL><LI><a href="#[20]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;main <BR>[Called By]<UL><LI><a href="#[20]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;main
</UL> </UL>
<P><STRONG><a name="[4d]"></a>UART_Init</STRONG> (Thumb, 164 bytes, Stack size 24 bytes, ens1_uart.o(i.UART_Init)) <P><STRONG><a name="[5b]"></a>UART_Init</STRONG> (Thumb, 164 bytes, Stack size 24 bytes, ens1_uart.o(i.UART_Init))
<BR><BR>[Stack]<UL><LI>Max Depth = 36<LI>Call Chain = UART_Init &rArr; __aeabi_uidivmod <BR><BR>[Stack]<UL><LI>Max Depth = 36<LI>Call Chain = UART_Init &rArr; __aeabi_uidivmod
</UL> </UL>
<BR>[Calls]<UL><LI><a href="#[42]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;PCLK_Enable <BR>[Calls]<UL><LI><a href="#[4d]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;PCLK_Enable
<LI><a href="#[3a]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;GPIO_AltFunction <LI><a href="#[46]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;GPIO_AltFunction
<LI><a href="#[3f]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;__aeabi_uidivmod <LI><a href="#[50]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;__aeabi_uidivmod
</UL> </UL>
<BR>[Called By]<UL><LI><a href="#[20]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;main <BR>[Called By]<UL><LI><a href="#[20]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;main
</UL> </UL>
<P><STRONG><a name="[49]"></a>UartPutc</STRONG> (Thumb, 30 bytes, Stack size 4 bytes, ens1_uart.o(i.UartPutc)) <P><STRONG><a name="[57]"></a>UartPutc</STRONG> (Thumb, 30 bytes, Stack size 4 bytes, ens1_uart.o(i.UartPutc))
<BR><BR>[Stack]<UL><LI>Max Depth = 4<LI>Call Chain = UartPutc <BR><BR>[Stack]<UL><LI>Max Depth = 4<LI>Call Chain = UartPutc
</UL> </UL>
<BR>[Calls]<UL><LI><a href="#[4f]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;WRITE_UART_THRBuff <BR>[Calls]<UL><LI><a href="#[5d]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;WRITE_UART_THRBuff
<LI><a href="#[4e]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;UARTLine_THREmpty <LI><a href="#[5c]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;UARTLine_THREmpty
</UL> </UL>
<BR>[Called By]<UL><LI><a href="#[23]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;fputc <BR>[Called By]<UL><LI><a href="#[23]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;fputc
<LI><a href="#[13]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;UART1_Handler <LI><a href="#[13]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;UART1_Handler
<LI><a href="#[12]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;UART0_Handler <LI><a href="#[12]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;UART0_Handler
</UL> </UL>
<P><STRONG><a name="[4f]"></a>WRITE_UART_THRBuff</STRONG> (Thumb, 4 bytes, Stack size 0 bytes, ens1_uart.o(i.WRITE_UART_THRBuff)) <P><STRONG><a name="[5d]"></a>WRITE_UART_THRBuff</STRONG> (Thumb, 4 bytes, Stack size 0 bytes, ens1_uart.o(i.WRITE_UART_THRBuff))
<BR><BR>[Called By]<UL><LI><a href="#[49]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;UartPutc <BR><BR>[Called By]<UL><LI><a href="#[57]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;UartPutc
</UL> </UL>
<P><STRONG><a name="[50]"></a>__0printf$1</STRONG> (Thumb, 24 bytes, Stack size 24 bytes, printf1.o(i.__0printf$1), UNUSED) <P><STRONG><a name="[5e]"></a>__0printf$1</STRONG> (Thumb, 24 bytes, Stack size 24 bytes, printf1.o(i.__0printf$1), UNUSED)
<BR><BR>[Calls]<UL><LI><a href="#[51]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;_printf_core <BR><BR>[Calls]<UL><LI><a href="#[5f]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;_printf_core
</UL> </UL>
<P><STRONG><a name="[6c]"></a>__1printf$1</STRONG> (Thumb, 0 bytes, Stack size 24 bytes, printf1.o(i.__0printf$1), UNUSED) <P><STRONG><a name="[83]"></a>__1printf$1</STRONG> (Thumb, 0 bytes, Stack size 24 bytes, printf1.o(i.__0printf$1), UNUSED)
<P><STRONG><a name="[40]"></a>__2printf</STRONG> (Thumb, 0 bytes, Stack size 24 bytes, printf1.o(i.__0printf$1)) <P><STRONG><a name="[42]"></a>__2printf</STRONG> (Thumb, 0 bytes, Stack size 24 bytes, printf1.o(i.__0printf$1))
<BR><BR>[Stack]<UL><LI>Max Depth = 24<LI>Call Chain = __2printf <BR><BR>[Stack]<UL><LI>Max Depth = 24<LI>Call Chain = __2printf
</UL> </UL>
<BR>[Called By]<UL><LI><a href="#[1b]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;TIMER0_Handler <BR>[Called By]<UL><LI><a href="#[4c]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;TIMER0_Init
<LI><a href="#[43]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;EMS_Stop
<LI><a href="#[40]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;EMS_Start
</UL> </UL>
<P><STRONG><a name="[2d]"></a>__ARM_clz</STRONG> (Thumb, 46 bytes, Stack size 0 bytes, depilogue.o(i.__ARM_clz)) <P><STRONG><a name="[30]"></a>__ARM_clz</STRONG> (Thumb, 46 bytes, Stack size 0 bytes, depilogue.o(i.__ARM_clz))
<BR><BR>[Called By]<UL><LI><a href="#[29]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;_double_epilogue <BR><BR>[Called By]<UL><LI><a href="#[2c]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;_double_epilogue
</UL> </UL>
<P><STRONG><a name="[5e]"></a>__ARM_fpclassify</STRONG> (Thumb, 40 bytes, Stack size 0 bytes, fpclassify.o(i.__ARM_fpclassify)) <P><STRONG><a name="[6e]"></a>__ARM_fpclassify</STRONG> (Thumb, 40 bytes, Stack size 0 bytes, fpclassify.o(i.__ARM_fpclassify))
<BR><BR>[Called By]<UL><LI><a href="#[38]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;pow <BR><BR>[Called By]<UL><LI><a href="#[3b]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;pow
</UL> </UL>
<P><STRONG><a name="[52]"></a>__kernel_poly</STRONG> (Thumb, 172 bytes, Stack size 24 bytes, poly.o(i.__kernel_poly)) <P><STRONG><a name="[60]"></a>__kernel_poly</STRONG> (Thumb, 172 bytes, Stack size 24 bytes, poly.o(i.__kernel_poly))
<BR><BR>[Stack]<UL><LI>Max Depth = 152<LI>Call Chain = __kernel_poly &rArr; __aeabi_dmul &rArr; _double_epilogue &rArr; __aeabi_llsl <BR><BR>[Stack]<UL><LI>Max Depth = 152<LI>Call Chain = __kernel_poly &rArr; __aeabi_dmul &rArr; _double_epilogue &rArr; _double_round
</UL> </UL>
<BR>[Calls]<UL><LI><a href="#[33]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;__aeabi_dmul <BR>[Calls]<UL><LI><a href="#[36]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;__aeabi_dmul
<LI><a href="#[2f]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;__aeabi_dadd <LI><a href="#[32]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;__aeabi_dadd
</UL> </UL>
<BR>[Called By]<UL><LI><a href="#[38]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;pow <BR>[Called By]<UL><LI><a href="#[3b]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;pow
</UL> </UL>
<P><STRONG><a name="[53]"></a>__mathlib_dbl_divzero</STRONG> (Thumb, 16 bytes, Stack size 8 bytes, dunder.o(i.__mathlib_dbl_divzero)) <P><STRONG><a name="[61]"></a>__mathlib_dbl_divzero</STRONG> (Thumb, 16 bytes, Stack size 8 bytes, dunder.o(i.__mathlib_dbl_divzero))
<BR><BR>[Stack]<UL><LI>Max Depth = 56<LI>Call Chain = __mathlib_dbl_divzero &rArr; __aeabi_ddiv &rArr; _double_round <BR><BR>[Stack]<UL><LI>Max Depth = 56<LI>Call Chain = __mathlib_dbl_divzero &rArr; __aeabi_ddiv &rArr; _double_round
</UL> </UL>
<BR>[Calls]<UL><LI><a href="#[26]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;__aeabi_ddiv <BR>[Calls]<UL><LI><a href="#[29]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;__aeabi_ddiv
</UL> </UL>
<BR>[Called By]<UL><LI><a href="#[38]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;pow <BR>[Called By]<UL><LI><a href="#[3b]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;pow
</UL> </UL>
<P><STRONG><a name="[54]"></a>__mathlib_dbl_infnan2</STRONG> (Thumb, 8 bytes, Stack size 8 bytes, dunder.o(i.__mathlib_dbl_infnan2)) <P><STRONG><a name="[62]"></a>__mathlib_dbl_infnan2</STRONG> (Thumb, 8 bytes, Stack size 8 bytes, dunder.o(i.__mathlib_dbl_infnan2))
<BR><BR>[Stack]<UL><LI>Max Depth = 112<LI>Call Chain = __mathlib_dbl_infnan2 &rArr; __aeabi_dadd &rArr; _double_epilogue &rArr; __aeabi_llsl <BR><BR>[Stack]<UL><LI>Max Depth = 112<LI>Call Chain = __mathlib_dbl_infnan2 &rArr; __aeabi_dadd &rArr; _double_epilogue &rArr; _double_round
</UL> </UL>
<BR>[Calls]<UL><LI><a href="#[2f]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;__aeabi_dadd <BR>[Calls]<UL><LI><a href="#[32]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;__aeabi_dadd
</UL> </UL>
<BR>[Called By]<UL><LI><a href="#[38]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;pow <BR>[Called By]<UL><LI><a href="#[3b]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;pow
</UL> </UL>
<P><STRONG><a name="[55]"></a>__mathlib_dbl_invalid</STRONG> (Thumb, 16 bytes, Stack size 8 bytes, dunder.o(i.__mathlib_dbl_invalid)) <P><STRONG><a name="[63]"></a>__mathlib_dbl_invalid</STRONG> (Thumb, 16 bytes, Stack size 8 bytes, dunder.o(i.__mathlib_dbl_invalid))
<BR><BR>[Stack]<UL><LI>Max Depth = 56<LI>Call Chain = __mathlib_dbl_invalid &rArr; __aeabi_ddiv &rArr; _double_round <BR><BR>[Stack]<UL><LI>Max Depth = 56<LI>Call Chain = __mathlib_dbl_invalid &rArr; __aeabi_ddiv &rArr; _double_round
</UL> </UL>
<BR>[Calls]<UL><LI><a href="#[26]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;__aeabi_ddiv <BR>[Calls]<UL><LI><a href="#[29]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;__aeabi_ddiv
</UL> </UL>
<BR>[Called By]<UL><LI><a href="#[38]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;pow <BR>[Called By]<UL><LI><a href="#[3b]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;pow
</UL> </UL>
<P><STRONG><a name="[56]"></a>__mathlib_dbl_overflow</STRONG> (Thumb, 16 bytes, Stack size 8 bytes, dunder.o(i.__mathlib_dbl_overflow)) <P><STRONG><a name="[64]"></a>__mathlib_dbl_overflow</STRONG> (Thumb, 16 bytes, Stack size 8 bytes, dunder.o(i.__mathlib_dbl_overflow))
<BR><BR>[Stack]<UL><LI>Max Depth = 24<LI>Call Chain = __mathlib_dbl_overflow &rArr; __ARM_scalbn <BR><BR>[Stack]<UL><LI>Max Depth = 24<LI>Call Chain = __mathlib_dbl_overflow &rArr; __ARM_scalbn
</UL> </UL>
<BR>[Calls]<UL><LI><a href="#[57]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;__ARM_scalbn <BR>[Calls]<UL><LI><a href="#[65]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;__ARM_scalbn
</UL> </UL>
<BR>[Called By]<UL><LI><a href="#[38]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;pow <BR>[Called By]<UL><LI><a href="#[3b]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;pow
</UL> </UL>
<P><STRONG><a name="[58]"></a>__mathlib_dbl_underflow</STRONG> (Thumb, 14 bytes, Stack size 8 bytes, dunder.o(i.__mathlib_dbl_underflow)) <P><STRONG><a name="[66]"></a>__mathlib_dbl_underflow</STRONG> (Thumb, 14 bytes, Stack size 8 bytes, dunder.o(i.__mathlib_dbl_underflow))
<BR><BR>[Stack]<UL><LI>Max Depth = 24<LI>Call Chain = __mathlib_dbl_underflow &rArr; __ARM_scalbn <BR><BR>[Stack]<UL><LI>Max Depth = 24<LI>Call Chain = __mathlib_dbl_underflow &rArr; __ARM_scalbn
</UL> </UL>
<BR>[Calls]<UL><LI><a href="#[57]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;__ARM_scalbn <BR>[Calls]<UL><LI><a href="#[65]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;__ARM_scalbn
</UL> </UL>
<BR>[Called By]<UL><LI><a href="#[38]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;pow <BR>[Called By]<UL><LI><a href="#[3b]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;pow
</UL> </UL>
<P><STRONG><a name="[6d]"></a>__scatterload_copy</STRONG> (Thumb, 14 bytes, Stack size unknown bytes, handlers.o(i.__scatterload_copy), UNUSED) <P><STRONG><a name="[84]"></a>__scatterload_copy</STRONG> (Thumb, 14 bytes, Stack size unknown bytes, handlers.o(i.__scatterload_copy), UNUSED)
<P><STRONG><a name="[6e]"></a>__scatterload_null</STRONG> (Thumb, 2 bytes, Stack size unknown bytes, handlers.o(i.__scatterload_null), UNUSED) <P><STRONG><a name="[85]"></a>__scatterload_null</STRONG> (Thumb, 2 bytes, Stack size unknown bytes, handlers.o(i.__scatterload_null), UNUSED)
<P><STRONG><a name="[6f]"></a>__scatterload_zeroinit</STRONG> (Thumb, 14 bytes, Stack size unknown bytes, handlers.o(i.__scatterload_zeroinit), UNUSED) <P><STRONG><a name="[86]"></a>__scatterload_zeroinit</STRONG> (Thumb, 14 bytes, Stack size unknown bytes, handlers.o(i.__scatterload_zeroinit), UNUSED)
<P><STRONG><a name="[5b]"></a>__set_errno</STRONG> (Thumb, 6 bytes, Stack size 0 bytes, errno.o(i.__set_errno)) <P><STRONG><a name="[6b]"></a>__set_errno</STRONG> (Thumb, 6 bytes, Stack size 0 bytes, errno.o(i.__set_errno))
<BR><BR>[Called By]<UL><LI><a href="#[38]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;pow <BR><BR>[Called By]<UL><LI><a href="#[6c]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;sqrt
<LI><a href="#[5c]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;sqrt <LI><a href="#[3b]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;pow
</UL>
<P><STRONG><a name="[70]"></a>boost_voltage_select_26V</STRONG> (Thumb, 12 bytes, Stack size 0 bytes, ens1_boost.o(i.boost_voltage_select_26V))
<BR><BR>[Called By]<UL><LI><a href="#[69]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;wavegen_Init
</UL> </UL>
<P><STRONG><a name="[23]"></a>fputc</STRONG> (Thumb, 16 bytes, Stack size 16 bytes, retarget.o(i.fputc)) <P><STRONG><a name="[23]"></a>fputc</STRONG> (Thumb, 16 bytes, Stack size 16 bytes, retarget.o(i.fputc))
<BR><BR>[Stack]<UL><LI>Max Depth = 20<LI>Call Chain = fputc &rArr; UartPutc <BR><BR>[Stack]<UL><LI>Max Depth = 20<LI>Call Chain = fputc &rArr; UartPutc
</UL> </UL>
<BR>[Calls]<UL><LI><a href="#[49]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;UartPutc <BR>[Calls]<UL><LI><a href="#[57]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;UartPutc
</UL>
<BR>[Called By]<UL><LI><a href="#[6f]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;puts
</UL> </UL>
<BR>[Address Reference Count : 1]<UL><LI> printf1.o(i.__0printf$1) <BR>[Address Reference Count : 1]<UL><LI> printf1.o(i.__0printf$1)
</UL> </UL>
<P><STRONG><a name="[20]"></a>main</STRONG> (Thumb, 64 bytes, Stack size 16 bytes, mian.o(i.main)) <P><STRONG><a name="[20]"></a>main</STRONG> (Thumb, 220 bytes, Stack size 24 bytes, mian.o(i.main))
<BR><BR>[Stack]<UL><LI>Max Depth = 352<LI>Call Chain = main &rArr; ClockInit &rArr; ClockInitSet &rArr; pow &rArr; __kernel_poly &rArr; __aeabi_dmul &rArr; _double_epilogue &rArr; __aeabi_llsl <BR><BR>[Stack]<UL><LI>Max Depth = 360<LI>Call Chain = main &rArr; ClockInit &rArr; ClockInitSet &rArr; pow &rArr; __kernel_poly &rArr; __aeabi_dmul &rArr; _double_epilogue &rArr; _double_round
</UL> </UL>
<BR>[Calls]<UL><LI><a href="#[4d]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;UART_Init <BR>[Calls]<UL><LI><a href="#[69]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;wavegen_Init
<LI><a href="#[4a]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;UART_ITConfig <LI><a href="#[5b]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;UART_Init
<LI><a href="#[41]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;TIMER0_Init <LI><a href="#[58]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;UART_ITConfig
<LI><a href="#[59]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;MTP_init <LI><a href="#[53]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;Time_Manager_Init
<LI><a href="#[5a]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;GPIO_Output <LI><a href="#[6a]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;Time_Manager_GetFlags
<LI><a href="#[39]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;GPIO_IO_Init <LI><a href="#[4c]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;TIMER0_Init
<LI><a href="#[36]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;ClockInit <LI><a href="#[67]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;MTP_init
<LI><a href="#[47]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;GPIO_Overturn
<LI><a href="#[68]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;GPIO_Output
<LI><a href="#[45]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;GPIO_IO_Init
<LI><a href="#[43]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;EMS_Stop
<LI><a href="#[40]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;EMS_Start
<LI><a href="#[3e]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;EMS_Process
<LI><a href="#[3c]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;EMS_Configure
<LI><a href="#[39]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;ClockInit
</UL> </UL>
<BR>[Address Reference Count : 1]<UL><LI> entry9a.o(.ARM.Collect$$$$0000000B) <BR>[Address Reference Count : 1]<UL><LI> entry9a.o(.ARM.Collect$$$$0000000B)
</UL> </UL>
<P><STRONG><a name="[38]"></a>pow</STRONG> (Thumb, 2548 bytes, Stack size 128 bytes, pow.o(i.pow)) <P><STRONG><a name="[3b]"></a>pow</STRONG> (Thumb, 2548 bytes, Stack size 128 bytes, pow.o(i.pow))
<BR><BR>[Stack]<UL><LI>Max Depth = 280<LI>Call Chain = pow &rArr; __kernel_poly &rArr; __aeabi_dmul &rArr; _double_epilogue &rArr; __aeabi_llsl <BR><BR>[Stack]<UL><LI>Max Depth = 280<LI>Call Chain = pow &rArr; __kernel_poly &rArr; __aeabi_dmul &rArr; _double_epilogue &rArr; _double_round
</UL> </UL>
<BR>[Calls]<UL><LI><a href="#[31]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;__aeabi_dsub <BR>[Calls]<UL><LI><a href="#[2b]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;__aeabi_i2d
<LI><a href="#[32]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;__aeabi_drsub <LI><a href="#[29]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;__aeabi_ddiv
<LI><a href="#[33]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;__aeabi_dmul <LI><a href="#[6c]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;sqrt
<LI><a href="#[2f]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;__aeabi_dadd <LI><a href="#[60]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;__kernel_poly
<LI><a href="#[5d]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;__aeabi_cdrcmple <LI><a href="#[6e]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;__ARM_fpclassify
<LI><a href="#[57]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;__ARM_scalbn <LI><a href="#[66]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;__mathlib_dbl_underflow
<LI><a href="#[28]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;__aeabi_i2d <LI><a href="#[64]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;__mathlib_dbl_overflow
<LI><a href="#[26]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;__aeabi_ddiv <LI><a href="#[63]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;__mathlib_dbl_invalid
<LI><a href="#[5b]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;__set_errno <LI><a href="#[62]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;__mathlib_dbl_infnan2
<LI><a href="#[5c]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;sqrt <LI><a href="#[61]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;__mathlib_dbl_divzero
<LI><a href="#[52]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;__kernel_poly <LI><a href="#[34]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;__aeabi_dsub
<LI><a href="#[5e]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;__ARM_fpclassify <LI><a href="#[35]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;__aeabi_drsub
<LI><a href="#[58]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;__mathlib_dbl_underflow <LI><a href="#[36]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;__aeabi_dmul
<LI><a href="#[56]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;__mathlib_dbl_overflow <LI><a href="#[32]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;__aeabi_dadd
<LI><a href="#[55]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;__mathlib_dbl_invalid <LI><a href="#[6d]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;__aeabi_cdrcmple
<LI><a href="#[54]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;__mathlib_dbl_infnan2 <LI><a href="#[65]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;__ARM_scalbn
<LI><a href="#[53]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;__mathlib_dbl_divzero <LI><a href="#[6b]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;__set_errno
</UL> </UL>
<BR>[Called By]<UL><LI><a href="#[37]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;ClockInitSet <BR>[Called By]<UL><LI><a href="#[3a]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;ClockInitSet
</UL> </UL>
<P><STRONG><a name="[5c]"></a>sqrt</STRONG> (Thumb, 66 bytes, Stack size 24 bytes, sqrt.o(i.sqrt)) <P><STRONG><a name="[6f]"></a>puts</STRONG> (Thumb, 28 bytes, Stack size 8 bytes, puts.o(i.puts))
<BR><BR>[Stack]<UL><LI>Max Depth = 64<LI>Call Chain = sqrt &rArr; _dsqrt &rArr; __aeabi_llsr <BR><BR>[Stack]<UL><LI>Max Depth = 28<LI>Call Chain = puts &rArr; fputc &rArr; UartPutc
</UL> </UL>
<BR>[Calls]<UL><LI><a href="#[5b]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;__set_errno <BR>[Calls]<UL><LI><a href="#[23]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;fputc
<LI><a href="#[35]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;_dsqrt
</UL> </UL>
<BR>[Called By]<UL><LI><a href="#[38]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;pow <BR>[Called By]<UL><LI><a href="#[69]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;wavegen_Init
<LI><a href="#[3f]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;wavegen_driverA_sine_test
</UL>
<P><STRONG><a name="[6c]"></a>sqrt</STRONG> (Thumb, 66 bytes, Stack size 24 bytes, sqrt.o(i.sqrt))
<BR><BR>[Stack]<UL><LI>Max Depth = 64<LI>Call Chain = sqrt &rArr; _dsqrt &rArr; _double_round
</UL>
<BR>[Calls]<UL><LI><a href="#[38]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;_dsqrt
<LI><a href="#[6b]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;__set_errno
</UL>
<BR>[Called By]<UL><LI><a href="#[3b]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;pow
</UL>
<P><STRONG><a name="[69]"></a>wavegen_Init</STRONG> (Thumb, 32 bytes, Stack size 8 bytes, ens1_wavegen.o(i.wavegen_Init))
<BR><BR>[Stack]<UL><LI>Max Depth = 36<LI>Call Chain = wavegen_Init &rArr; puts &rArr; fputc &rArr; UartPutc
</UL>
<BR>[Calls]<UL><LI><a href="#[70]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;boost_voltage_select_26V
<LI><a href="#[6f]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;puts
</UL>
<BR>[Called By]<UL><LI><a href="#[20]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;main
</UL>
<P><STRONG><a name="[41]"></a>wavegen_Start</STRONG> (Thumb, 14 bytes, Stack size 0 bytes, ens1_wavegen.o(i.wavegen_Start))
<BR><BR>[Called By]<UL><LI><a href="#[40]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;EMS_Start
</UL>
<P><STRONG><a name="[44]"></a>wavegen_Stop</STRONG> (Thumb, 22 bytes, Stack size 0 bytes, ens1_wavegen.o(i.wavegen_Stop))
<BR><BR>[Called By]<UL><LI><a href="#[43]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;EMS_Stop
</UL>
<P><STRONG><a name="[3f]"></a>wavegen_driverA_sine_test</STRONG> (Thumb, 98 bytes, Stack size 24 bytes, ens1_wavegen.o(i.wavegen_driverA_sine_test))
<BR><BR>[Stack]<UL><LI>Max Depth = 52<LI>Call Chain = wavegen_driverA_sine_test &rArr; puts &rArr; fputc &rArr; UartPutc
</UL>
<BR>[Calls]<UL><LI><a href="#[6f]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;puts
</UL>
<BR>[Called By]<UL><LI><a href="#[3e]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;EMS_Process
</UL> </UL>
<P> <P>
<H3> <H3>
Local Symbols Local Symbols
</H3> </H3>
<P><STRONG><a name="[47]"></a>NVIC_ClearPendingIRQ</STRONG> (Thumb, 14 bytes, Stack size 0 bytes, ens1_uart.o(i.NVIC_ClearPendingIRQ)) <P><STRONG><a name="[55]"></a>NVIC_ClearPendingIRQ</STRONG> (Thumb, 14 bytes, Stack size 0 bytes, ens1_uart.o(i.NVIC_ClearPendingIRQ))
<BR><BR>[Called By]<UL><LI><a href="#[13]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;UART1_Handler <BR><BR>[Called By]<UL><LI><a href="#[13]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;UART1_Handler
<LI><a href="#[12]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;UART0_Handler <LI><a href="#[12]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;UART0_Handler
<LI><a href="#[4a]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;UART_ITConfig <LI><a href="#[58]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;UART_ITConfig
</UL> </UL>
<P><STRONG><a name="[4b]"></a>NVIC_DisableIRQ</STRONG> (Thumb, 14 bytes, Stack size 0 bytes, ens1_uart.o(i.NVIC_DisableIRQ)) <P><STRONG><a name="[59]"></a>NVIC_DisableIRQ</STRONG> (Thumb, 14 bytes, Stack size 0 bytes, ens1_uart.o(i.NVIC_DisableIRQ))
<BR><BR>[Called By]<UL><LI><a href="#[4a]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;UART_ITConfig <BR><BR>[Called By]<UL><LI><a href="#[58]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;UART_ITConfig
</UL> </UL>
<P><STRONG><a name="[4c]"></a>NVIC_EnableIRQ</STRONG> (Thumb, 14 bytes, Stack size 0 bytes, ens1_uart.o(i.NVIC_EnableIRQ)) <P><STRONG><a name="[5a]"></a>NVIC_EnableIRQ</STRONG> (Thumb, 14 bytes, Stack size 0 bytes, ens1_uart.o(i.NVIC_EnableIRQ))
<BR><BR>[Called By]<UL><LI><a href="#[4a]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;UART_ITConfig <BR><BR>[Called By]<UL><LI><a href="#[58]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;UART_ITConfig
</UL> </UL>
<P><STRONG><a name="[44]"></a>NVIC_ClearPendingIRQ</STRONG> (Thumb, 14 bytes, Stack size 0 bytes, ens1_timer.o(i.NVIC_ClearPendingIRQ)) <P><STRONG><a name="[4f]"></a>NVIC_ClearPendingIRQ</STRONG> (Thumb, 14 bytes, Stack size 0 bytes, ens1_timer.o(i.NVIC_ClearPendingIRQ))
<BR><BR>[Called By]<UL><LI><a href="#[41]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;TIMER0_Init <BR><BR>[Called By]<UL><LI><a href="#[4c]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;TIMER0_Init
</UL> </UL>
<P><STRONG><a name="[43]"></a>NVIC_DisableIRQ</STRONG> (Thumb, 14 bytes, Stack size 0 bytes, ens1_timer.o(i.NVIC_DisableIRQ)) <P><STRONG><a name="[4e]"></a>NVIC_DisableIRQ</STRONG> (Thumb, 14 bytes, Stack size 0 bytes, ens1_timer.o(i.NVIC_DisableIRQ))
<BR><BR>[Called By]<UL><LI><a href="#[41]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;TIMER0_Init <BR><BR>[Called By]<UL><LI><a href="#[4c]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;TIMER0_Init
</UL> </UL>
<P><STRONG><a name="[46]"></a>NVIC_EnableIRQ</STRONG> (Thumb, 14 bytes, Stack size 0 bytes, ens1_timer.o(i.NVIC_EnableIRQ)) <P><STRONG><a name="[52]"></a>NVIC_EnableIRQ</STRONG> (Thumb, 14 bytes, Stack size 0 bytes, ens1_timer.o(i.NVIC_EnableIRQ))
<BR><BR>[Called By]<UL><LI><a href="#[41]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;TIMER0_Init <BR><BR>[Called By]<UL><LI><a href="#[4c]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;TIMER0_Init
</UL> </UL>
<P><STRONG><a name="[51]"></a>_printf_core</STRONG> (Thumb, 332 bytes, Stack size 88 bytes, printf1.o(i._printf_core), UNUSED) <P><STRONG><a name="[5f]"></a>_printf_core</STRONG> (Thumb, 332 bytes, Stack size 88 bytes, printf1.o(i._printf_core), UNUSED)
<BR><BR>[Calls]<UL><LI><a href="#[3f]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;__aeabi_uidivmod <BR><BR>[Calls]<UL><LI><a href="#[50]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;__aeabi_uidivmod
</UL> </UL>
<BR>[Called By]<UL><LI><a href="#[50]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;__0printf$1 <BR>[Called By]<UL><LI><a href="#[5e]">&gt;&gt;</a>&nbsp;&nbsp;&nbsp;__0printf$1
</UL> </UL>
<P> <P>
<H3> <H3>

View File

@ -6,6 +6,8 @@
".\objects\ens1_clock.o" ".\objects\ens1_clock.o"
".\objects\retarget.o" ".\objects\retarget.o"
".\objects\ens1_timer.o" ".\objects\ens1_timer.o"
".\objects\ens1_boost.o"
".\objects\ens1_wavegen.o"
".\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"

View File

@ -1,6 +1,6 @@
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 CompilerVersion: 5060750::V5.06 update 6 (build 750)::.\ARM_Compiler_5.06u7
F (.\USER\mian.c)(0x689C4ADA)(--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) F (.\USER\mian.c)(0x68A53A7B)(--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)(0x689C4B9B) I (USER\my_header.h)(0x689C4B9B)
I (D:\Keil_v5\ARM\ARM_Compiler_5.06u7\include\stdio.h)(0x599ECD2C) 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 (D:\Keil_v5\ARM\ARM_Compiler_5.06u7\include\math.h)(0x599ECD2E)
@ -10,7 +10,7 @@ I (D:\Keil_v5\ARM\ARM_Compiler_5.06u7\include\stdint.h)(0x599ECD2E)
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)(0x689C4BA6) I (.\FWLIB\include\ENS1_TIMER.h)(0x68A5333E)
I (.\USER\my_header.h)(0x689C4B9B) I (.\USER\my_header.h)(0x689C4B9B)
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 (D:\Keil_v5\ARM\ARM_Compiler_5.06u7\include\stdlib.h)(0x599ECD2C)
@ -18,6 +18,7 @@ I (D:\Keil_v5\ARM\ARM_Compiler_5.06u7\include\string.h)(0x599ECD2C)
I (.\FWLIB\include\ENS1_CLOCK.h)(0x68358097) I (.\FWLIB\include\ENS1_CLOCK.h)(0x68358097)
I (.\FWLIB\include\ENS1_UART.h)(0x689C4BC8) I (.\FWLIB\include\ENS1_UART.h)(0x689C4BC8)
I (.\FWLIB\include\ENS1_GPIO.h)(0x656546CE) I (.\FWLIB\include\ENS1_GPIO.h)(0x656546CE)
I (.\FWLIB\include\ENS1_WAVEGEN.h)(0x68A53A7B)
F (.\FWLIB\source\ENS1_UART.c)(0x689C4BE6)(--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_UART.c)(0x689C4BE6)(--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)
I (.\USER\my_header.h)(0x689C4B9B) I (.\USER\my_header.h)(0x689C4B9B)
I (D:\Keil_v5\ARM\ARM_Compiler_5.06u7\include\stdio.h)(0x599ECD2C) I (D:\Keil_v5\ARM\ARM_Compiler_5.06u7\include\stdio.h)(0x599ECD2C)
@ -28,7 +29,7 @@ I (D:\Keil_v5\ARM\ARM_Compiler_5.06u7\include\stdint.h)(0x599ECD2E)
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)(0x689C4BA6) I (.\FWLIB\include\ENS1_TIMER.h)(0x68A5333E)
I (.\FWLIB\include\ENS1_UART.h)(0x689C4BC8) I (.\FWLIB\include\ENS1_UART.h)(0x689C4BC8)
I (.\FWLIB\include\ENS1_CLOCK.h)(0x68358097) I (.\FWLIB\include\ENS1_CLOCK.h)(0x68358097)
I (.\FWLIB\include\ENS1_GPIO.h)(0x656546CE) I (.\FWLIB\include\ENS1_GPIO.h)(0x656546CE)
@ -42,7 +43,7 @@ I (D:\Keil_v5\ARM\ARM_Compiler_5.06u7\include\stdint.h)(0x599ECD2E)
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)(0x689C4BA6) I (.\FWLIB\include\ENS1_TIMER.h)(0x68A5333E)
I (.\FWLIB\include\ENS1_GPIO.h)(0x656546CE) I (.\FWLIB\include\ENS1_GPIO.h)(0x656546CE)
F (.\FWLIB\source\ENS1_MTP.c)(0x680B4E85)(--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) F (.\FWLIB\source\ENS1_MTP.c)(0x680B4E85)(--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 (.\FWLIB\include\ENS1_MTP.h)(0x65605CD6)
@ -57,8 +58,8 @@ I (D:\Keil_v5\ARM\ARM_Compiler_5.06u7\include\string.h)(0x599ECD2C)
I (.\USER\my_header.h)(0x689C4B9B) I (.\USER\my_header.h)(0x689C4B9B)
I (D:\Keil_v5\ARM\ARM_Compiler_5.06u7\include\stdio.h)(0x599ECD2C) 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 (D:\Keil_v5\ARM\ARM_Compiler_5.06u7\include\math.h)(0x599ECD2E)
I (.\FWLIB\include\ENS1_TIMER.h)(0x689C4BA6) I (.\FWLIB\include\ENS1_TIMER.h)(0x68A5333E)
F (.\FWLIB\source\ENS1_CLOCK.c)(0x68358347)(--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) 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 (.\FWLIB\include\ENS1_CLOCK.h)(0x68358097)
I (.\USER\my_header.h)(0x689C4B9B) I (.\USER\my_header.h)(0x689C4B9B)
I (D:\Keil_v5\ARM\ARM_Compiler_5.06u7\include\stdio.h)(0x599ECD2C) I (D:\Keil_v5\ARM\ARM_Compiler_5.06u7\include\stdio.h)(0x599ECD2C)
@ -69,7 +70,7 @@ I (D:\Keil_v5\ARM\ARM_Compiler_5.06u7\include\stdint.h)(0x599ECD2E)
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)(0x689C4BA6) I (.\FWLIB\include\ENS1_TIMER.h)(0x68A5333E)
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) 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\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\time.h)(0x599ECD2E)
@ -81,8 +82,8 @@ 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 (.\FWLIB\source\ENS1_TIMER.c)(0x689C4BF1)(--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) F (.\FWLIB\source\ENS1_TIMER.c)(0x68A53735)(--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)(0x689C4BA6) I (.\FWLIB\include\ENS1_TIMER.h)(0x68A5333E)
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 (D:\Keil_v5\ARM\ARM_Compiler_5.06u7\include\stdint.h)(0x599ECD2E)
@ -94,6 +95,29 @@ 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 (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)(0x68358097)
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)
I (D:\Keil_v5\ARM\ARM_Compiler_5.06u7\include\stdio.h)(0x599ECD2C)
I (.\FWLIB\include\ENS1_BOOST.h)(0x689E9D44)
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)
F (.\FWLIB\source\ENS1_WAVEGEN.c)(0x68A53A7B)(--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 (D:\Keil_v5\ARM\ARM_Compiler_5.06u7\include\stdio.h)(0x599ECD2C)
I (.\FWLIB\include\ENS1_WAVEGEN.h)(0x68A53A7B)
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)(0x689C4B9B)
I (D:\Keil_v5\ARM\ARM_Compiler_5.06u7\include\math.h)(0x599ECD2E)
I (.\FWLIB\include\ENS1_TIMER.h)(0x68A5333E)
I (.\FWLIB\include\ENS1_CLOCK.h)(0x68358097)
I (.\FWLIB\include\ENS1_BOOST.h)(0x689E9D44)
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) 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 (D:\Keil_v5\ARM\ARM_Compiler_5.06u7\include\stdint.h)(0x599ECD2E) I (D:\Keil_v5\ARM\ARM_Compiler_5.06u7\include\stdint.h)(0x599ECD2E)
I (.\CORE\INCLUDE\CMSDK_CM0.h)(0x64D5ADE8) I (.\CORE\INCLUDE\CMSDK_CM0.h)(0x64D5ADE8)

Binary file not shown.

View File

@ -1,12 +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: .\FWLIB\include\ENS1_BOOST.h .\objects\ens1_boost.o: .\FWLIB\include\ENS1_BOOST.h
.\objects\ens1_boost.o: .\USER\my_header.h
.\objects\ens1_boost.o: C:\Keil_v5\ARM\ARMCC\Bin\..\include\stdio.h
.\objects\ens1_boost.o: C:\Keil_v5\ARM\ARMCC\Bin\..\include\math.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: C:\Keil_v5\ARM\ARMCC\Bin\..\include\stdint.h .\objects\ens1_boost.o: D:\Keil_v5\ARM\ARM_Compiler_5.06u7\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
.\objects\ens1_boost.o: .\FWLIB\include\ENS1_CLOCK.h

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

BIN
Objects/ens1_wavegen.crf Normal file

Binary file not shown.

15
Objects/ens1_wavegen.d Normal file
View File

@ -0,0 +1,15 @@
.\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: .\FWLIB\include\ENS1_WAVEGEN.h
.\objects\ens1_wavegen.o: .\CORE\INCLUDE\CMSDK_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: .\CORE\INCLUDE\core_cmInstr.h
.\objects\ens1_wavegen.o: .\CORE\INCLUDE\core_cmFunc.h
.\objects\ens1_wavegen.o: .\CORE\INCLUDE\system_CMSDK_CM0.h
.\objects\ens1_wavegen.o: .\USER\my_header.h
.\objects\ens1_wavegen.o: D:\Keil_v5\ARM\ARM_Compiler_5.06u7\Bin\..\include\math.h
.\objects\ens1_wavegen.o: .\FWLIB\include\ENS1_TIMER.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_BOOST.h

BIN
Objects/ens1_wavegen.o Normal file

Binary file not shown.

Binary file not shown.

View File

@ -16,3 +16,4 @@
.\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
.\objects\mian.o: .\FWLIB\include\ENS1_WAVEGEN.h

Binary file not shown.

Binary file not shown.

Binary file not shown.

View File

@ -4,7 +4,7 @@
*Author: *Author:
*Version: V1.0 *Version: V1.0
*Date: 2023-11- *Date: 2023-11-
*Description: 1S TIMER0 *Description: TIMER0 +
*Function List: *Function List:
History: History:
@ -20,19 +20,119 @@ Modification:
#include "ENS1_UART.h" #include "ENS1_UART.h"
#include "ENS1_TIMER.h" #include "ENS1_TIMER.h"
#include "ENS1_GPIO.h" #include "ENS1_GPIO.h"
#include "ENS1_WAVEGEN.h"
int main(){ int main(){
// 初始化系统
MTP_init(); MTP_init();
ClockInit(); ClockInit();
// 初始化GPIO19用于定时器指示
GPIO_IO_Init(GPIO_19, OUTPUT, 0x00, 0x02, 0x00, 0x00, ENABLE); GPIO_IO_Init(GPIO_19, OUTPUT, 0x00, 0x02, 0x00, 0x00, ENABLE);
GPIO_Output(GPIO_19, LOW_LEVEL); GPIO_Output(GPIO_19, LOW_LEVEL);
/*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);
/*TIMER*/
// 初始化定时器在wavegen_Init之前
TIMER0_Init(1); TIMER0_Init(1);
// 初始化时间管理器
Time_Manager_Init();
// 添加调试信息
// printf("APB_Clock_Freq: %d Hz\n", APB_Clock_Freq);
// printf("TIMER0初始化完成\n");
// 初始化波形生成器(电刺激)
wavegen_Init();
// 配置电刺激参数
EMS_Config_TypeDef ems_config = {
.frequency = 100, // 100Hz
.duration = 1000, // 1000ms
.intensity = 128, // 中等强度
.rest_time = 100, // 100ms休息时间
.silent_time = 50 // 50ms静默时间
};
EMS_Configure(&ems_config);
// 启动电刺激
EMS_Start();
// printf("========================================\n");
// printf("定时器电刺激综合测试启动\n");
// printf("========================================\n");
// printf("GPIO19: 定时器指示1秒翻转\n");
// printf("电刺激: 方波输出强度128\n");
// printf("系统时钟: 32MHz HSI\n");
// printf("升压电压: 26V\n");
// printf("UART波特率: 115200\n");
// printf("========================================\n");
// 电刺激控制变量需要在main函数外部定义
static uint8_t ems_control_count = 0; // 电刺激控制计数器
static uint8_t ems_state = 0; // 电刺激状态0=关闭1=开启
while(1) while(1)
{ {
/*在 void TIMER0_Handler(void) 中断处理函数中打印*/ // 获取时间标志位
Time_Flag_TypeDef* time_flags = Time_Manager_GetFlags();
// 处理电刺激(在主循环中运行)
// 注意这里不再直接调用EMS_Process(),而是通过状态控制
// 基于时间标志位执行不同周期的任务
if (time_flags->T_2ms) {
// 2ms周期任务 - 高频控制任务
time_flags->T_2ms = 0; // 清除标志位
}
if (time_flags->T_10ms) {
// 10ms周期任务 - 中频控制任务
time_flags->T_10ms = 0; // 清除标志位
}
if (time_flags->T_100ms) {
// 100ms周期任务 - 低频控制任务
time_flags->T_100ms = 0; // 清除标志位
}
if (time_flags->T_1s) {
// 1s周期任务 - 超低频任务
ems_control_count++; // 每秒递增计数器
// 间断性放电控制逻辑
if (ems_control_count <= 10) {
// 前10秒开启电刺激
if (ems_state == 0) {
ems_state = 1;
EMS_Start(); // 启动电刺激
// printf("电刺激开启 - 第%d秒\n", ems_control_count);
}
// 处理电刺激
EMS_Process();
} else if (ems_control_count <= 20) {
// 后10秒关闭电刺激
if (ems_state == 1) {
ems_state = 0;
EMS_Stop(); // 停止电刺激
// printf("电刺激关闭 - 第%d秒\n", ems_control_count);
}
} else {
// 重置计数器,开始新的周期
ems_control_count = 0;
// printf("电刺激周期重置\n");
}
GPIO_Overturn(GPIO_19); // GPIO19翻转
// printf("1s定时任务执行 - 系统运行正常,电刺激状态: %s\n",
// ems_state ? "开启" : "关闭");
time_flags->T_1s = 0; // 清除标志位
}
// 定时器中断处理在 TIMER0_Handler() 中
} }
} }

115
中断调试测试.md Normal file
View File

@ -0,0 +1,115 @@
# 中断调试测试指南
## 问题分析
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

@ -0,0 +1,261 @@
# 时间管理系统使用指南
## 概述
本时间管理系统基于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);
```
## 总结
这个时间管理系统提供了一个简单而强大的多周期任务调度解决方案。通过合理使用,可以实现高效、实时的嵌入式系统控制。关键是要根据实际应用需求,合理分配任务到不同的时间周期,并注意系统的实时性和稳定性。

136
测试验证.md Normal file
View File

@ -0,0 +1,136 @@
# 移植验证测试
## 测试目标
验证将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. _________________________
## 测试结论
□ 移植成功,功能正常
□ 移植部分成功,需要进一步优化
□ 移植失败,需要重新设计
## 签名
测试人员_________ 日期_________
审核人员_________ 日期_________

155
移植完成总结.md Normal file
View File

@ -0,0 +1,155 @@
# 定时器电刺激综合测试工程移植完成总结
## 移植概述
本次移植成功将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
**审核状态**:待审核

117
移植说明.md Normal file
View File

@ -0,0 +1,117 @@
# 定时器电刺激综合测试工程移植说明
## 项目概述
本项目将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

@ -0,0 +1,198 @@
# 间断性放电功能说明
## 功能概述
本系统实现了间断性电刺激放电功能,具体表现为:
- **前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` 变量状态
- 确认条件判断逻辑正确