Compare commits

...

7 Commits

Author SHA1 Message Date
Razvalyaev
d03d26cef1 Добавлен i2c и распиновка МК 2026-03-13 15:47:13 +03:00
12922152bb Обновить README.md 2025-12-28 23:41:12 +03:00
16f46c87c4 Добавить README.md 2025-12-28 23:35:56 +03:00
Razvalyaev
c82bbdc1ca Убрано лишнее из main.c 2025-12-28 15:40:33 +03:00
Razvalyaev
c63d98f431 Проект перенесен в папку MDK-ARM 2025-12-28 15:38:30 +03:00
Razvalyaev
8b930ebe12 Обновлены шапки и по мелочи 2025-12-28 14:06:19 +03:00
Razvalyaev
f3e76e105a Добавлено:
- рефакторинг названий:
	- маленькие буквы - инит периферии
	- ТакойСтильФункций - API для использования
- сделаны шапки с инструкциями к функциями
- доработан ацп секвенсора
- доработан систем тики. можно настроить его на разные частоты и подключить коллбеки на разный период
- в gpio добавлены функции для кнопок и диодов
- генерация бинарника
2025-12-27 23:20:03 +03:00
93 changed files with 5277 additions and 7972 deletions

2
.gitignore vendored
View File

@@ -46,4 +46,4 @@ JLinkSettings.ini
# Other Files # Other Files
/Objects/ MDK-ARM/Objects/

6
.gitmodules vendored
View File

@@ -1,4 +1,4 @@
[submodule "Core/ExtendedLibs"] [submodule "MDK-ARM/Core/ExtendedLibs"]
path = Core/ExtendedLibs path = MDK-ARM/Core/ExtendedLibs
url = https://git.arktika.cyou/Razvalyaev/STM32_ExtendedLibs.git url = https://git.arktika.cyou/Razvalyaev/STM32_ExtendedLibs.git
branch = release branch = develop

View File

@@ -1,437 +0,0 @@
/*==============================================================================
* Инициализация АЦП с использованием бибилотеки PLIB035
*------------------------------------------------------------------------------
* ЦНИИ СЭТ, Разваляев Алексей <wot890089@mail.ru>
*==============================================================================
* ЦНИИ СЭТ
*==============================================================================
*/
//-- Includes ------------------------------------------------------------------
#include "periph_config.h"
ADC_HandleTypeDef hadc;
//-- Defines -------------------------------------------------------------------
//-- Peripheral init functions -------------------------------------------------
////////////////////////////////////////////////////////////////////////////////
/////////////////////////////////SEQUENCORS/////////////////////////////////////
////////////////////////////////////////////////////////////////////////////////
void adc_init_first(void)
{
#if (USE_ADC_SEQ0==1) || (USE_ADC_SEQ1==1) || (USE_ADC_DC0==1) || (USE_ADC_DC1==1) || (USE_ADC_DC2==1) || (USE_ADC_DC3==1)
// Настройка тактирования
if(rcu_set_clock_adc(ADC_ClockSource, ADC_ClockMHz, ENABLE) != OK)
{
Error_Handler();
}
RCU_ADCRstCmd(ENABLE);
// Включаем аналоговый модуль
ADC_AM_Cmd(ENABLE);
hadc.Instance = ADC;
#endif
#if (USE_ADC_SEQ0==1)
adc_seq_init(&hadc, ADC_SEQ_Num_0, &adc_seq0_config);
if(hadc.SEQ[ADC_SEQ_Num_0].Config->IT == ENABLE)
{
NVIC_EnableIRQ(ADC_SEQ0_IRQn);
}
#endif
#if (USE_ADC_SEQ1==1)
adc_seq_init(&hadc, ADC_SEQ_Num_1, &adc_seq1_config);
if(hadc.SEQ_Config[ADC_SEQ_Num_1]->IT == ENABLE)
{
NVIC_EnableIRQ(ADC_SEQ1_IRQn);
}
#endif
#if (USE_ADC_DC0==1)
#endif
#if (USE_ADC_DC1==1)
#endif
#if (USE_ADC_DC2==1)
#endif
#if (USE_ADC_DC3==1)
#endif
#if (USE_ADC_SEQ0==1) || (USE_ADC_SEQ1==1) || (USE_ADC_DC0==1) || (USE_ADC_DC1==1) || (USE_ADC_DC2==1) || (USE_ADC_DC3==1)
uint32_t starttick = millis();
while (!ADC_AM_ReadyStatus()) {
if((millis() - starttick) > 1000)
Error_Handler();
}
#endif
}
/**
* @brief Инициализация секвенсора АЦП
* @param hadc указатель на хендл АЦП
* @param SEQ_Num номер секвенсора
* @param NewConfig указатель на новую конфигурацию ADC, иначе используется та, что в структуре
* @retval OperationStatus OK - если всё хорошо, ERROR - если ошибка
*/
OperationStatus adc_seq_init(ADC_HandleTypeDef *hadc, ADC_SEQ_Num_TypeDef SEQ_Num, ADC_SEQ_ExtInit_TypeDef *NewConfig)
{
if(!hadc || !hadc->Instance)
return ERROR;
ADC_SEQ_HandleTypeDef *hseq = &hadc->SEQ[SEQ_Num];
if(NewConfig != NULL)
{
hseq->Config = NewConfig;
}
if(hseq->Config == NULL)
{
return ERROR;
}
ADC_SEQ_Init(SEQ_Num, &hseq->Config->SEQ_Init);
return OK;
}
/**
* @brief Установка коллбека секвенсора АЦП
* @param hadc указатель на хендл АЦП
* @param cb_type Тип коллбека
* @param Callback Функция коллбека
* @retval void
*/
OperationStatus adc_seq_set_callback(ADC_HandleTypeDef* hadc, ADC_SEQ_Num_TypeDef SEQ_Num, ADC_CallbackTypeDef cb_type, void (*Callback)(void))
{
if (!hadc || !hadc->Instance || !hadc->SEQ[SEQ_Num].Config)
return ERROR;
ADC_SEQ_HandleTypeDef *hseq = &hadc->SEQ[SEQ_Num];
switch(cb_type)
{
case ADC_Callback_Seq:
hseq->Config->SEQCpltCallback = Callback;
break;
case ADC_Callback_Error:
hseq->Config->ErrorCallback = Callback;
break;
case ADC_Callback_BuffFull:
hseq->Config->BuffFullCallback = Callback;
break;
case ADC_Callback_BuffHalf:
hseq->Config->BuffFullCallback = Callback;
break;
default:
return ERROR;
}
return OK;
}
/**
* @brief Запуск секвенсора АЦП с буфером
* @param hadc указатель на хендл АЦП
* @param SEQ_Num номер секвенсора
* @param data_buffer указатель на буфер данных [ch][buffer_size] или NULL
* @param buffer_size размер буфера для каждого канала (0 если буфер не используется)
* @retval OperationStatus OK - если всё хорошо, ERROR - если ошибка
*/
OperationStatus adc_seq_start(ADC_HandleTypeDef *hadc,
ADC_SEQ_Num_TypeDef SEQ_Num,
uint16_t (*data_buffer)[],
uint32_t buffer_size)
{
if (!hadc || !hadc->Instance || !hadc->SEQ[SEQ_Num].Config)
return ERROR;
ADC_SEQ_HandleTypeDef *hseq = &hadc->SEQ[SEQ_Num];
ADC_SEQ_ExtInit_TypeDef *conf = hseq->Config;
// Сохраняем буферные параметры
hseq->data_buffer = (uint16_t *)data_buffer;
hseq->buffer_size = buffer_size;
hseq->buffer_count = 0; // Сбрасываем счетчик
// Настраиваем прерывания если нужно
if (conf->IT == ENABLE)
{
ADC_SEQ_ITConfig(SEQ_Num, conf->ITCount, DISABLE);
ADC_SEQ_ITCmd(SEQ_Num, ENABLE);
}
// Включаем секвенсор
ADC_SEQ_Cmd(SEQ_Num, ENABLE);
// Помечаем как запущенный
hseq->running = 1;
return OK;
}
/**
* @brief Остановка секвенсора АЦП
* @param hadc указатель на хендл АЦП
* @param SEQ_Num номер секвенсора
* @retval OperationStatus OK - если всё хорошо, ERROR - если ошибка
*/
OperationStatus adc_seq_stop(ADC_HandleTypeDef *hadc, ADC_SEQ_Num_TypeDef SEQ_Num)
{
if (!hadc || !hadc->Instance || !hadc->SEQ[SEQ_Num].Config)
return ERROR;
ADC_SEQ_HandleTypeDef *hseq = &hadc->SEQ[SEQ_Num];
// Выключаем секвенсор
ADC_SEQ_Cmd(SEQ_Num, DISABLE);
// Выключаем прерывания
ADC_SEQ_ITCmd(SEQ_Num, DISABLE);
// Сбрасываем флаг запуска
hseq->running = 1;
return OK;
}
/**
* @brief Получение текущего значения канала
* @param hadc указатель на хендл АЦП
* @param channel номер канала
* @retval значение ADC (0 если данные невалидны)
*/
uint16_t adc_get_channel_value(ADC_HandleTypeDef *hadc, ADC_CH_Num_TypeDef channel)
{
if (!hadc || channel >= ADC_CH_Total)
return 0;
if (hadc->ChannelValid[channel])
{
return hadc->ChannelData[channel];
}
return 0;
}
/**
* @brief Программный запуск преобразования
*/
void adc_sw_start(void)
{
ADC_SEQ_SwStartCmd();
}
/**
* @brief Обработчик прерываний секвенсора
* @param hadc указатель на хендл АЦП
* @param SEQ_Num номер секвенсора
* @retval void
*/
void adc_seq_handler(ADC_HandleTypeDef *hadc, ADC_SEQ_Num_TypeDef SEQ_Num)
{
if (!hadc || !hadc->Instance || !hadc->SEQ[SEQ_Num].Config)
return;
ADC_SEQ_HandleTypeDef *hseq = &hadc->SEQ[SEQ_Num];
ADC_SEQ_ExtInit_TypeDef *conf = hseq->Config;
// Проверяем флаг прерывания
if (ADC_SEQ_ITMaskedStatus(SEQ_Num) == SET)
{
// Очищаем флаг
ADC_SEQ_ITStatusClear(SEQ_Num);
// Последний запрос в секвенсоре
ADC_SEQ_ReqNum_TypeDef last_request = conf->SEQ_Init.ReqMax;
// Читаем все доступные данные из FIFO
uint8_t channels_processed = 0;
while (ADC_SEQ_GetFIFOLoad(ADC_SEQ_Num_0))
{
uint32_t data = ADC_SEQ_GetFIFOData(SEQ_Num);
ADC_SEQ_ReqNum_TypeDef req_num = ADC_SEQ_GetReqCurrent(SEQ_Num);
if (req_num < ADC_SEQ_Req_Total)
{
ADC_CH_Num_TypeDef channel = conf->SEQ_Init.Req[req_num];
if (channel < ADC_CH_Total)
{
// 1. Обновляем текущее значение
hadc->ChannelData[channel] = (uint16_t)data;
hadc->ChannelValid[channel] = 1;
// 2. Записываем в буфер если он есть
if (hseq->data_buffer &&
hseq->buffer_size > 0)
{
// Вычисляем offset для [ch][buffer_size]
uint32_t offset = channel * hseq->buffer_size +
hseq->buffer_count;
hseq->data_buffer[offset] = (uint16_t)data;
}
channels_processed++;
// Если это последний канал в секвенсоре - увеличиваем счетчик буфера
if (req_num == last_request)
{
hseq->buffer_count++;
if(hseq->buffer_count == hseq->buffer_size/2)
{
if (conf->BuffHalfCallback)
{
conf->BuffHalfCallback();
}
}
if(hseq->buffer_count >= hseq->buffer_size)
{
// Кольцевой буфер
if(conf->buffer_circular)
hseq->buffer_count = 0;
else
adc_seq_stop(hadc, SEQ_Num);
if (conf->BuffFullCallback)
{
conf->BuffFullCallback();
}
}
}
}
}
}
// Вызываем коллбек пользователя
if (conf->SEQCpltCallback)
{
conf->SEQCpltCallback();
}
}
// Обработка ошибок
if (ADC_SEQ_DMAErrorStatus(SEQ_Num) == SET)
{
ADC_SEQ_DMAErrorStatusClear(SEQ_Num);
if (conf->ErrorCallback)
{
conf->ErrorCallback();
}
}
}
////////////////////////////////////////////////////////////////////////////////
////////////////////////////DIGITAL COMPARATORS/////////////////////////////////
////////////////////////////////////////////////////////////////////////////////
///**
// * @brief Инициализация цифрового компаратора АЦП
// * @param hadc указатель на хендл АЦП
// * @param DC_Num номер компаратора
// * @param NewConfig указатель на конфигурацию
// * @retval OperationStatus OK - если всё хорошо, ERROR - если ошибка
// */
//OperationStatus adc_dc_init(ADC_HandleTypeDef *hadc, ADC_DC_Num_TypeDef DC_Num, ADC_DC_ExtInit_TypeDef *NewConfig)
//{
// if(!hadc || !hadc->Instance)
// return ERROR;
//
// if(NewConfig != NULL)
// {
// hadc->DC_Config[DC_Num] = NewConfig;
// }
//
// if(hadc->DC_Config[DC_Num] == NULL)
// {
// return ERROR;
// }
//
// // Инициализация компаратора
// ADC_DC_Init(DC_Num, &hadc->DC_Config[DC_Num]->DC_Init);
//
// return OK;
//}
///**
// * @brief Установка коллбека цифрового компаратора АЦП
// * @param hadc указатель на хендл АЦП
// * @param DC_Num номер компаратора
// * @param cb_type тип коллбека
// * @param Callback функция коллбека
// * @retval OperationStatus
// */
//OperationStatus adc_dc_set_callback(ADC_HandleTypeDef* hadc, ADC_DC_Num_TypeDef DC_Num, ADC_CallbackTypeDef cb_type, void (*Callback)(void))
//{
// if (!hadc || !hadc->Instance || !hadc->DC_Config[DC_Num])
// return ERROR;
//
// switch(cb_type)
// {
// case ADC_Callback_DC:
// hadc->DC_Config[DC_Num]->DC_TrigCallback = Callback;
// break;
// case ADC_Callback_Error:
// hadc->DC_Config[DC_Num]->ErrorCallback = Callback;
// break;
// default:
// return ERROR;
// }
// return OK;
//}
///**
// * @brief Запуск цифрового компаратора АЦП
// * @param hadc указатель на хендл АЦП
// * @param DC_Num номер компаратора
// * @retval OperationStatus OK - если всё хорошо, ERROR - если ошибка
// */
//OperationStatus adc_dc_start(ADC_HandleTypeDef *hadc, ADC_DC_Num_TypeDef DC_Num)
//{
// if (!hadc || !hadc->Instance || !hadc->DC_Config[DC_Num])
// return ERROR;
//
// ADC_DC_ExtInit_TypeDef *conf = hadc->DC_Config[DC_Num];
//
// // Включаем выход компаратора
// ADC_DC_OutputCmd(DC_Num, ENABLE);
//
// // Настраиваем прерывания если нужно
// if(conf->IT == ENABLE)
// {
// ADC_DC_ITCmd(DC_Num, ENABLE);
// }
//
// return OK;
//}
///**
// * @brief Остановка цифрового компаратора АЦП
// * @param hadc указатель на хендл АЦП
// * @param DC_Num номер компаратора
// * @retval OperationStatus OK - если всё хорошо, ERROR - если ошибка
// */
//OperationStatus adc_dc_stop(ADC_HandleTypeDef *hadc, ADC_DC_Num_TypeDef DC_Num)
//{
// if (!hadc || !hadc->Instance || !hadc->DC_Config[DC_Num])
// return ERROR;
//
// // Выключаем выход компаратора
// ADC_DC_OutputCmd(DC_Num, DISABLE);
//
// // Выключаем прерывания
// ADC_DC_ITCmd(DC_Num, DISABLE);
//
// return OK;
//}
//void adc_dc_handler(ADC_HandleTypeDef *hadc, ADC_DC_Num_TypeDef DC_Num)
//{
//}

View File

@@ -1,99 +0,0 @@
/*==============================================================================
* Инициализация таймеров с использованием бибилотеки PLIB035
*------------------------------------------------------------------------------
* ЦНИИ СЭТ, Разваляев Алексей <wot890089@mail.ru>
*==============================================================================
* ЦНИИ СЭТ
*==============================================================================
*/
#ifndef __ADC_H
#define __ADC_H
//-- Includes ------------------------------------------------------------------
#include "plib035.h"
#include "retarget_conf.h"
//-- Defines -------------------------------------------------------------------
// Дефайны для режима АЦП
typedef enum
{
ADC_Callback_Seq,
ADC_Callback_BuffHalf,
ADC_Callback_BuffFull,
ADC_Callback_DC,
ADC_Callback_Error,
}ADC_CallbackTypeDef;
typedef struct
{
ADC_SEQ_Init_TypeDef SEQ_Init; /* Стандартная конфигурация из PLIB */
FunctionalState IT; /*!< Включить прерывания */
uint8_t ITCount; /*!< Количество запросов для генерации прерывания */
uint32_t buffer_circular; /*!< Циклический буфер */
void (*SEQCpltCallback)(void); /*!< Вызывается при завершении секвенсора */
void (*BuffHalfCallback)(void); /*!< Вызывается при заполнении половины буфера */
void (*BuffFullCallback)(void); /*!< Вызывается при заполнении буфера */
void (*ErrorCallback)(); /*!< Вызывается при ошибке */
}ADC_SEQ_ExtInit_TypeDef;
typedef struct
{
ADC_DC_Init_TypeDef DC_Init;
FunctionalState IT; /*!< Включить прерывания */
void (*DC_TrigCallback); /*!< Вызывается при срабатывании компаратора */
void (*ErrorCallback)(); /*!< Вызывается при ошибке */
}ADC_DC_ExtInit_TypeDef;
typedef struct
{
ADC_SEQ_ExtInit_TypeDef *Config; /*!< Конфигурации секвенсоров */
uint8_t running;
uint16_t *data_buffer; /*!< Указатель на буфер данных [ch][buffer_size]*/
uint32_t buffer_size; /*!< Размер буфера (16-bit слова) */
uint32_t buffer_count; /*!< Счетчик текущего индекса буфера */
}ADC_SEQ_HandleTypeDef;
typedef struct
{
ADC_DC_ExtInit_TypeDef *Config; /*!< Конфигурации компараторов */
uint8_t running;
}ADC_DC_HandleTypeDef;
typedef struct
{
ADC_TypeDef *Instance; /*!< Регистры ADC */
ADC_SEQ_HandleTypeDef SEQ[ADC_SEQ_Total]; /*!< Хендл секвенсоров */
ADC_DC_ExtInit_TypeDef DC[ADC_DC_Total]; /*!< Хендл компараторов */
// Буферы данных для каждого канала (актуальные значения)
uint16_t ChannelData[ADC_CH_Total]; /*!< Текущие значения каналов */
uint8_t ChannelValid[ADC_CH_Total]; /*!< Флаги валидности данных */
}ADC_HandleTypeDef;
extern ADC_HandleTypeDef hadc;
//-- Exported functions prototypes ---------------------------------------------
void adc_init_first(void);
OperationStatus adc_seq_init(ADC_HandleTypeDef *hadc, ADC_SEQ_Num_TypeDef SEQ_Num, ADC_SEQ_ExtInit_TypeDef *NewConfig);
OperationStatus adc_seq_set_callback(ADC_HandleTypeDef* hadc, ADC_SEQ_Num_TypeDef SEQ_Num, ADC_CallbackTypeDef cb_type, void (*Callback)(void));
OperationStatus adc_seq_start(ADC_HandleTypeDef *hadc, ADC_SEQ_Num_TypeDef SEQ_Num, uint16_t (*data_buffer)[], uint32_t buffer_size);
OperationStatus adc_seq_stop(ADC_HandleTypeDef *hadc, ADC_SEQ_Num_TypeDef SEQ_Num);
uint16_t adc_get_channel_value(ADC_HandleTypeDef *hadc, ADC_CH_Num_TypeDef channel);
void adc_sw_start(void);
// Обработчики прерываний
void adc_seq_handler(ADC_HandleTypeDef *hadc, ADC_SEQ_Num_TypeDef SEQ_Num);
void adc_dc_handler(ADC_HandleTypeDef *hadc, ADC_DC_Num_TypeDef DC_Num);
#endif /*__ADC_H*/

View File

@@ -1,95 +0,0 @@
/*==============================================================================
* Инициализация портов с использованием бибилотеки PLIB035
*------------------------------------------------------------------------------
* ЦНИИ СЭТ, Разваляев Алексей <wot890089@mail.ru>
*==============================================================================
* Конфигурация портов настраивается в gpio.h
* ЦНИИ СЭТ
*==============================================================================
*/
//-- Includes ------------------------------------------------------------------
#include "periph_config.h"
//-- Defines -------------------------------------------------------------------
//-- Peripheral init functions -------------------------------------------------
void gpio_init(void)
{
RCU_AHBClkCmd(RCU_AHBClk_GPIOA, ENABLE);
RCU_AHBRstCmd(RCU_AHBRst_GPIOA, ENABLE);
RCU_AHBClkCmd(RCU_AHBClk_GPIOB, ENABLE);
RCU_AHBRstCmd(RCU_AHBRst_GPIOB, ENABLE);
/* Сброс пинов */
GPIO_DeInit(GPIOA);
GPIO_DeInit(GPIOB);
// Инициализация порта A
for (int i = 0; i < sizeof(gpioa_config) / sizeof(gpioa_config[0]); i++)
{
GPIO_Init(GPIOA, &gpioa_config[i]);
}
// Инициализация порта B
for (int i = 0; i < sizeof(gpiob_config) / sizeof(gpiob_config[0]); i++)
{
GPIO_Init(GPIOB, &gpiob_config[i]);
}
// GPIO_StructInit(&gpio_init);
// gpio_init.Digital = ENABLE;
// GPIO_Init(GPIOA, &gpio_init);
// GPIO_Init(GPIOB, &gpio_init);
//
// /* Инициализация выходных пинов Пуш-Пулл */
// gpio_init.Out = ENABLE;
// gpio_init.OutMode = GPIO_OutMode_PP;
//
// gpio_init.Pin = GPIO_OUT_PP_PA_PINS;
// GPIO_Init(GPIOA, &gpio_init);
// gpio_init.Pin = GPIO_OUT_PP_PB_PINS;
// GPIO_Init(GPIOB, &gpio_init);
//
// /* Инициализация выходных пинов Открытый сток */
// gpio_init.Out = ENABLE;
// gpio_init.OutMode = GPIO_OutMode_OD;
//
// gpio_init.Pin = GPIO_OUT_OD_PA_PINS;
// GPIO_Init(GPIOA, &gpio_init);
// gpio_init.Pin = GPIO_OUT_OD_PB_PINS;
// GPIO_Init(GPIOB, &gpio_init);
}
GPIO_Init_TypeDef *gpio_get_init(GPIO_TypeDef *GPIOx, uint32_t GPIO_Pin)
{
uint8_t pin_index = __builtin_ctz(GPIO_Pin);
if (GPIOx == GPIOA)
{
// Проверяем границы массива
if (pin_index < sizeof(gpioa_config) / sizeof(gpioa_config[0]))
{
return &gpioa_config[pin_index];
}
}
else if (GPIOx == GPIOB)
{
// У тебя была опечатка: возвращал gpioa_config вместо gpiob_config
if (pin_index < sizeof(gpiob_config) / sizeof(gpiob_config[0]))
{
return &gpiob_config[pin_index];
}
}
return NULL;
}

View File

@@ -1,28 +0,0 @@
/*==============================================================================
* Инициализация портов с использованием бибилотеки PLIB035
*------------------------------------------------------------------------------
* ЦНИИ СЭТ, Разваляев Алексей <wot890089@mail.ru>
*==============================================================================
* Реализация функций инициализации портов находится в gpio.c
* ЦНИИ СЭТ
*==============================================================================
*/
#ifndef __GPIO_H
#define __GPIO_H
//-- Includes ------------------------------------------------------------------
#include "plib035.h"
#include "retarget_conf.h"
//-- Defines -------------------------------------------------------------------
// Дефайны для режима пина OutEnable, AltFuncEnable, DigitalEnable
#define GPIO_PinMode_Unused DISABLE, DISABLE, DISABLE
#define GPIO_PinMode_Input DISABLE, DISABLE, ENABLE
#define GPIO_PinMode_Output ENABLE, DISABLE, ENABLE
#define GPIO_PinMode_AltFunc DISABLE, ENABLE, ENABLE
//#define GPIO_PinMode_Analog DISABLE, DISABLE, DISABLE
//-- Exported functions prototypes ---------------------------------------------
void gpio_init(void);
GPIO_Init_TypeDef *gpio_get_init(GPIO_TypeDef *GPIOx, uint32_t GPIO_Pin);
#endif /*__GPIO_H*/

View File

@@ -1,83 +0,0 @@
/*==============================================================================
* Инициализация тактирования с использованием бибилотеки PLIB035
*------------------------------------------------------------------------------
* ЦНИИ СЭТ, Разваляев Алексей <wot890089@mail.ru>
*==============================================================================
* ЦНИИ СЭТ
*==============================================================================
*/
//-- Includes ------------------------------------------------------------------
#include "periph_config.h"
__IO uint32_t uwTick; // Milliseconds ticks
//-- Defines -------------------------------------------------------------------
//-- Peripheral init functions -------------------------------------------------
void sysclk_init(void)
{
OperationStatus status;
status = RCU_PLL_AutoConfig(SYSCLK_CORE_CLOCK_MHZ*__MHZ, SYSCLK_Oscil_Type);
if (status == ERROR)
{
Error_Handler();
}
SystemCoreClockUpdate();
RCU_ClkOutConfig(RCU_SysPeriphClk_PLLClk, 1, ENABLE);
RCU_ClkOutCmd(ENABLE);
/* Прерывание должно быть каждую миллисекунду:
Для тактирования N Гц это каждый N / 1000 тик */
SysTick_Config(SYSCLK_CORE_CLOCK_MHZ*__MHZ/1000);
}
uint32_t millis(void)
{
return uwTick;
}
void millis_inc(void)
{
uwTick++;
}
uint32_t micros(void)
{
return 0;
}
void micros_inc(void)
{
uwTick++;
}
OperationStatus rcu_set_clock_adc(RCU_PeriphClk_TypeDef ClkSrc, float ClkMHz, FunctionalState state)
{
RCU_ADCClkCmd(DISABLE);
uint32_t adc_raw_clock = 0;
float adc_clock_div = 0;
switch(ClkSrc)
{
case RCU_PeriphClk_OSEClk:
adc_raw_clock = RCU_GetOSEClkFreq();
break;
case RCU_PeriphClk_OSIClk:
adc_raw_clock = RCU_GetOSIClkFreq();
break;
case RCU_PeriphClk_PLLClk:
adc_raw_clock = RCU_GetPLLClkFreq();
break;
case RCU_PeriphClk_PLLDivClk:
adc_raw_clock = RCU_GetPLLDivClkFreq();
break;
}
adc_clock_div = adc_raw_clock/(ClkMHz*__MHZ);
if(adc_clock_div < 1)
return ERROR;
RCU_ADCClkConfig(ClkSrc, 7, ENABLE); //12.5MHz
RCU_ADCClkCmd(ENABLE);
return OK;
}

View File

@@ -1,30 +0,0 @@
/*==============================================================================
* Инициализация тактирования с использованием бибилотеки PLIB035
*------------------------------------------------------------------------------
* ЦНИИ СЭТ, Разваляев Алексей <wot890089@mail.ru>
*==============================================================================
* ЦНИИ СЭТ
*==============================================================================
*/
#ifndef __RCU_H
#define __RCU_H
//-- Includes ------------------------------------------------------------------
#include "plib035.h"
#include "retarget_conf.h"
//-- Defines -------------------------------------------------------------------
extern __IO uint32_t uwTick;
#define __MHZ 1000000
//-- Exported functions prototypes ---------------------------------------------
void sysclk_init(void);
uint32_t millis(void);
void millis_inc(void);
uint32_t micros(void);
void micros_inc(void);
OperationStatus rcu_set_clock_adc(RCU_PeriphClk_TypeDef ClkSrc, float ClkMHz, FunctionalState state);
#endif /*__RCU_H*/

View File

@@ -1,295 +0,0 @@
/*==============================================================================
* Инициализация таймеров с использованием бибилотеки PLIB035
*------------------------------------------------------------------------------
* ЦНИИ СЭТ, Разваляев Алексей <wot890089@mail.ru>
*==============================================================================
* ЦНИИ СЭТ
*==============================================================================
*/
//-- Includes ------------------------------------------------------------------
#include "periph_config.h"
TMR_HandleTypeDef htmr0;
TMR_HandleTypeDef htmr1;
TMR_HandleTypeDef htmr2;
TMR_HandleTypeDef htmr3;
//-- Defines -------------------------------------------------------------------
//-- Peripheral init functions -------------------------------------------------
void tmr_init_first(void)
{
#if (USE_TMR0==1)
RCU_APBClkCmd(RCU_APBClk_TMR0, ENABLE);
RCU_APBRstCmd(RCU_APBRst_TMR0, ENABLE);
htmr0.Instance = TMR0;
tmr_init(&htmr0, &tmr0_config);
if(htmr0.Config->IT == ENABLE)
{
NVIC_EnableIRQ(TMR0_IRQn);
}
#endif
#if (USE_TMR1==1)
RCU_APBClkCmd(RCU_APBClk_TMR1, ENABLE);
RCU_APBRstCmd(RCU_APBRst_TMR1, ENABLE);
htmr1.Instance = TMR1;
tmr_init(&htmr1, &tmr1_config);
if(htmr1.Config->IT == ENABLE)
{
NVIC_EnableIRQ(TMR1_IRQn);
}
#endif
#if (USE_TMR2==1)
RCU_APBClkCmd(RCU_APBClk_TMR2, ENABLE);
RCU_APBRstCmd(RCU_APBRst_TMR2, ENABLE);
htmr2.Instance = TMR2;
tmr_init(&htmr2, &tmr2_config);
if(htmr2.Config->IT == ENABLE)
{
NVIC_EnableIRQ(TMR2_IRQn);
}
#endif
#if (USE_TMR3==1)
RCU_APBClkCmd(RCU_APBClk_TMR3, ENABLE);
RCU_APBRstCmd(RCU_APBRst_TMR3, ENABLE);
htmr3.Instance = TMR3;
tmr_init(&htmr3, &tmr3_config);
if(htmr3.Config->IT == ENABLE)
{
NVIC_EnableIRQ(TMR3_IRQn);
}
#endif
}
/**
* @brief Инициализация таймера
* @param htmr указатель на хендл таймера
* @param NewConfig указатель на новую конфигурацию UART, иначе используется та, что в структуре
* @retval OperationStatus OK - если всё хорошо, ERROR - если ошибка
*/
OperationStatus tmr_init(TMR_HandleTypeDef *htmr, TMR_ExtInit_TypeDef *NewConfig)
{
if(!htmr || !htmr->Instance)
return ERROR;
if(NewConfig != NULL)
{
htmr->Config = NewConfig;
}
if(htmr->Config == NULL)
{
return ERROR;
}
TMR_Init(htmr->Instance, htmr->Config);
return OK;
}
/**
* @brief Установка коллбека таймера
* @param htmr указатель на хендл таймера
* @param cb_type Тип коллбека
* @param Callback Функция коллбека
* @retval void
*/
OperationStatus tmr_set_callback(TMR_HandleTypeDef* htmr, int cb_type, void (*Callback)(void))
{
if(!htmr || !htmr->Instance || !htmr->Config)
{
return ERROR;
}
htmr->Config->Callback = Callback;
return OK;
}
/**
* @brief Запуск таймера
* @param htmr указатель на хендл таймера
* @retval OperationStatus OK - если всё хорошо, ERROR - если ошибка
*/
OperationStatus tmr_start(TMR_HandleTypeDef *htmr)
{
if(!htmr || !htmr->Instance)
{
return ERROR;
}
TMR_Cmd(htmr->Instance, ENABLE);
return OK;
}
/**
* @brief Остановка таймера
* @param htmr указатель на хендл таймера
* @retval OperationStatus OK - если всё хорошо, ERROR - если ошибка
*/
OperationStatus tmr_stop(TMR_HandleTypeDef *htmr)
{
if(!htmr || !htmr->Instance)
{
return ERROR;
}
TMR_Cmd(htmr->Instance, DISABLE);
return OK;
}
/**
* @brief Задержка в тиках таймера (блокирующая).
* @param htmr Указатель на хендл таймера.
* @param delay Задержка в тиках таймера.
* @return OperationStatus.
* @details Формирует задержку с блокировкой программы.
*/
OperationStatus tmr_delay(TMR_HandleTypeDef *htmr, uint32_t delay)
{
if(!htmr || !htmr->Instance)
return ERROR;
uint32_t presc = htmr->Config->Prescaler+1;
uint64_t delay_load = delay*presc;
if(delay_load > 0xFFFFFFFF)
{
delay_load = 0xFFFFFFFF;
}
if(delay_load >= htmr->Instance->LOAD)
{
return ERROR;
}
uint32_t starttick = htmr->Instance->VALUE;
while(1)
{
if((starttick - htmr->Instance->VALUE) >= delay_load)
{
return OK;
}
}
}
/**
* @brief Начать отсчет неблокирующей задержки.
* @param htmr Указатель на хендл таймера.
* @param var Указатель на переменную куда положить значение тиков.
* @return OperationStatus.
* @details Запоминает счетчик для начала отсчета неблокирующей задержки.
* @ref tmr_delay_done для проверки статуса задержки
*/
OperationStatus tmr_delay_start(TMR_HandleTypeDef *htmr, uint32_t *var)
{
if(!htmr || !htmr->Instance)
return ERROR;
*var = htmr->Instance->VALUE;
return OK;
}
/**
* @brief Задержка в тиках таймера (неблокирующая).
* @param htmr Указатель на хендл таймера.
* @param delay Задержка в тиках таймера.
* @param var Указатель на переменную где хранится тики в момент начала задержки.
* @return 1 - задержка прошла. 0 - задержка в процессе.
* @details Формирует задержку с блокировкой программы.
* Перед ожиданием задержки надо инициализировать задержку @ref tmr_delay_start
*/
int tmr_delay_done(TMR_HandleTypeDef *htmr, uint32_t delay, uint32_t *var)
{
if(!htmr || !htmr->Instance)
return 0;
uint32_t presc = htmr->Config->Prescaler+1;
uint64_t delay_load = delay*presc;
if(delay_load > 0xFFFFFFFF)
{
delay_load = 0xFFFFFFFF;
}
if(delay_load >= htmr->Instance->LOAD)
{
return 0;
}
if((*var - htmr->Instance->VALUE) >= delay_load)
{
return 1; // Задержка прошла
}
else
{
return 0;
}
}
/**
* @brief Обработчик прерывания таймера
* @param htmr указатель на хендл таймера
* @retval void
*/
void tmr_handler(TMR_HandleTypeDef* htmr)
{
if((htmr->Instance == NULL) || (htmr->Config == NULL))
{
return;
}
/* Проверка флага прерывания таймера */
if (TMR_ITStatus(htmr->Instance) == SET)
{
/* Если есть коллбек вызываем его */
if(htmr->Config->Callback)
htmr->Config->Callback();
/* Очистка флага прерывания */
TMR_ITStatusClear(htmr->Instance);
}
}
/* Расширение библиотеки plib */
/**
* @brief Инициализирует модуль TMRx согласно параметрам структуры InitStruct.
* @param TMRx Выбор таймера, где x=A|B
* @param InitStruct Указатель на структуру типа @ref TMR_ExtInit_TypeDef,
* которая содержит конфигурационную информацию
* @retval void
*/
void TMR_Init(TMR_TypeDef* TMRx, TMR_ExtInit_TypeDef* InitStruct)
{
uint32_t tim_clk = InitStruct->ClkFreq*__MHZ;
uint32_t presc = InitStruct->Prescaler+1;
if(InitStruct->PeriodUs)
{
TMR_PeriodConfig(TMRx, tim_clk, InitStruct->PeriodUs);
}
else if(InitStruct->FreqHz)
{
TMR_FreqConfig(TMRx, tim_clk, InitStruct->FreqHz);
}
else
{
uint64_t load = (uint64_t)InitStruct->Load*presc;
if(load > 0xFFFFFFFF)
load = 0xFFFFFFFF;
TMR_SetLoad(TMRx, load);
}
TMR_ITCmd(TMRx, InitStruct->IT);
TMR_DMAReqCmd(TMRx, InitStruct->DMAReq);
TMR_ADCSOCCmd(TMRx, InitStruct->ADCSOC);
TMR_ExtInputConfig(TMRx, InitStruct->ExtInput);
}

View File

@@ -1,63 +0,0 @@
/*==============================================================================
* Инициализация таймеров с использованием бибилотеки PLIB035
*------------------------------------------------------------------------------
* ЦНИИ СЭТ, Разваляев Алексей <wot890089@mail.ru>
*==============================================================================
* ЦНИИ СЭТ
*==============================================================================
*/
#ifndef __TMR_H
#define __TMR_H
//-- Includes ------------------------------------------------------------------
#include "plib035.h"
#include "retarget_conf.h"
//-- Defines -------------------------------------------------------------------
// Дефайны для режима таймера Период в мкс, Частота, ПсевдоПрескалер, Период в тиках
#define PERIOD_MKS(_per_) _per_, 0, 0, 0
#define FREQ_HZ(_freq_) 0, _freq_, 0, 0
#define LOAD(_load_, _presc_) 0, 0, _presc_, _load_
typedef struct
{
float ClkFreq; /*!< Частота тактирования таймера в МГц */
uint32_t PeriodUs; /*!< Период таймера в мкс */
uint32_t FreqHz; /*!< Частота таймера в Гц */
uint32_t Prescaler; /*!< Псевдопрескалер частоты */
uint32_t Load; /*!< Период таймера в тиках */
FunctionalState IT; /*!< Разрешение работы прерывания */
FunctionalState ADCSOC; /*!< Разрешение генерации сигналов запуска АЦП */
FunctionalState DMAReq; /*!< Разрешение генерации запросов к DMA */
TMR_ExtInput_TypeDef ExtInput; /*!< Настройка внешнего тактирования таймера */
void (*Callback)(void); /* Коллбек который вызовется по прерыванию таймера */
}TMR_ExtInit_TypeDef;
typedef struct
{
TMR_TypeDef *Instance;
TMR_ExtInit_TypeDef *Config;
}TMR_HandleTypeDef;
extern TMR_HandleTypeDef htmr0;
extern TMR_HandleTypeDef htmr1;
extern TMR_HandleTypeDef htmr2;
extern TMR_HandleTypeDef htmr3;
//-- Exported functions prototypes ---------------------------------------------
void tmr_init_first(void);
OperationStatus tmr_init(TMR_HandleTypeDef *htmr, TMR_ExtInit_TypeDef *NewConfig);
OperationStatus tmr_set_callback(TMR_HandleTypeDef* htmr, int cb_type, void (*Callback)(void));
OperationStatus tmr_start(TMR_HandleTypeDef *htmr);
OperationStatus tmr_stop(TMR_HandleTypeDef *htmr);
OperationStatus tmr_delay(TMR_HandleTypeDef *htmr, uint32_t delay);
OperationStatus tmr_delay_start(TMR_HandleTypeDef *htmr, uint32_t *var);
int tmr_delay_done(TMR_HandleTypeDef *htmr, uint32_t delay, uint32_t *var);
void tmr_handler(TMR_HandleTypeDef* htmr);
void TMR_Init(TMR_TypeDef* TMRx, TMR_ExtInit_TypeDef* InitStruct);
#endif /*__TMR_H*/

View File

@@ -1,502 +0,0 @@
/*==============================================================================
* Инициализация Instance с использованием бибилотеки PLIB035
*------------------------------------------------------------------------------
* ЦНИИ СЭТ, Разваляев Алексей <wot890089@mail.ru>
*==============================================================================
* ЦНИИ СЭТ
*==============================================================================
*/
//-- Includes ------------------------------------------------------------------
#include "periph_config.h"
UART_HandleTypeDef huart0;
UART_HandleTypeDef huart1;
static int __uart_fifo_receive(UART_HandleTypeDef *huart, uint8_t it_mode);
static int __uart_fifo_transmit(UART_HandleTypeDef *huart, uint8_t it_mode);
//-- Defines -------------------------------------------------------------------
//-- Peripheral init functions -------------------------------------------------
void uart_init_first(void)
{
#if (USE_UART0==1)
// Настройка пинов для UART0
uart0_gpio_init();
// Включаем тактирование UART0
RCU_UARTClkConfig(UART0_Num, RCU_PeriphClk_PLLClk, 0, DISABLE);
RCU_UARTClkCmd(UART0_Num, ENABLE);
UART_DeInit(UART0);
// Инициализируем UART0
huart0.Instance = UART0;
uart_init(&huart0, &uart0_config);
NVIC_EnableIRQ(UART0_TD_IRQn);
NVIC_EnableIRQ(UART0_RX_IRQn);
NVIC_EnableIRQ(UART0_TX_IRQn);
NVIC_EnableIRQ(UART0_E_RT_IRQn);
#endif
#if (USE_UART1==1)
// Настройка пинов для UART1
uart1_gpio_init();
// Включаем тактирование UART1
RCU_UARTClkConfig(UART1_Num, RCU_PeriphClk_PLLClk, 0, DISABLE);
RCU_UARTClkCmd(UART1_Num, ENABLE);
UART_DeInit(UART1);
// Инициализируем UART1
NVIC_EnableIRQ(UART1_TD_IRQn);
NVIC_EnableIRQ(UART1_RX_IRQn);
NVIC_EnableIRQ(UART1_TX_IRQn);
NVIC_EnableIRQ(UART1_E_RT_IRQn);
huart1.Instance = UART1;
uart_init(&huart1, &uart1_config);
#endif
}
/**
* @brief Инициализация Instance
* @param htmr указатель на хендл Instance
* @param NewConfig указатель на новую конфигурацию Instance, иначе используется та, что в структуре
* @retval OperationStatus OK - если всё хорошо, ERROR - если ошибка
*/
OperationStatus uart_init(UART_HandleTypeDef *huart, UART_ExtInit_TypeDef *NewConfig)
{
if(!huart || !huart->Instance)
return ERROR;
if(NewConfig != NULL)
{
huart->Config = NewConfig;
}
if(huart->Config == NULL)
{
return ERROR;
}
UART_Init(huart->Instance, &huart->Config->UART_Init);
return OK;
}
OperationStatus uart_start(UART_HandleTypeDef *huart, UART_FIFOLevel_TypeDef TxFifoLevel, UART_FIFOLevel_TypeDef RxFifoLevel)
{
if (!huart)
return ERROR;
UART_ITFIFOLevelRxConfig(huart->Instance, RxFifoLevel);
UART_ITFIFOLevelTxConfig(huart->Instance, TxFifoLevel);
huart->TxBufPtr = NULL;
huart->TxCount = 0;
huart->TxSize = 0;
huart->TxBusy = 0;
huart->RxBufPtr = NULL;
huart->RxCount = 0;
huart->RxSize = 0;
huart->RxBusy = 0;
UART_Cmd(huart->Instance, ENABLE);
return OK;
}
OperationStatus uart_transmit(UART_HandleTypeDef *huart,
uint8_t *buf,
uint16_t size,
uint32_t timeout)
{
if (!huart || !buf || size == 0)
return ERROR;
// Если TX занят, возвращаем ERROR
if (huart->TxBusy)
return ERROR;
huart->TxBufPtr = buf;
huart->TxSize = size;
huart->TxCount = 0;
huart->TxBusy = 1;
uint32_t starttick = millis();
// Отправляем пока всё не отправится
while(__uart_fifo_transmit(huart, 0) == 0)
{
if(millis() - starttick > timeout)
return ERROR;
}
return OK;
}
OperationStatus uart_receive(UART_HandleTypeDef *huart,
uint8_t *buf,
uint16_t size,
uint32_t timeout)
{
if (!huart || !buf || size == 0)
return ERROR;
// Если RX занят, возвращаем ERROR
if (huart->RxBusy)
return ERROR;
huart->RxBufPtr = buf;
huart->RxSize = size;
huart->RxCount = 0;
huart->RxBusy = 1;
uint32_t starttick = millis();
// Принимаем всё пока всё не примется
while(__uart_fifo_transmit(huart, 0) == 0)
{
if(millis() - starttick > timeout)
return ERROR;;
}
return OK;
}
OperationStatus uart_transmit_it(UART_HandleTypeDef *huart,
uint8_t *buf,
uint16_t size)
{
if (!huart || !buf || size == 0)
return ERROR;
// Если TX занят, возвращаем ERROR
if (huart->TxBusy)
return ERROR;
huart->TxBufPtr = buf;
huart->TxSize = size;
huart->TxCount = 0;
huart->TxBusy = 1;
// Включаем прерывания по TX FIFO
UART_ITCmd(huart->Instance, UART_ITSource_TxFIFOLevel, ENABLE);
__uart_fifo_transmit(huart, 1);
return OK;
}
OperationStatus uart_receive_it(UART_HandleTypeDef *huart,
uint8_t *buf,
uint16_t size)
{
if (!huart || !buf || size == 0)
return ERROR;
// Если RX занят, возвращаем ERROR
if (huart->RxBusy)
return ERROR;
huart->RxBufPtr = buf;
huart->RxSize = size;
huart->RxCount = 0;
huart->RxBusy = 1;
// Включаем только RX прерывания
UART_ITCmd(huart->Instance,
UART_ITSource_RxFIFOLevel |
UART_ITSource_RecieveTimeout |
UART_ITSource_ErrorFrame |
UART_ITSource_ErrorParity |
UART_ITSource_ErrorOverflow |
UART_ITSource_ErrorBreak,
ENABLE);
return OK;
}
void uart_handler(UART_HandleTypeDef *huart)
{
if (!huart || !huart->Instance || !huart->Config)
return;
UART_TypeDef *uart = huart->Instance;
uint32_t mis = uart->MIS;
// Ошибки
if (mis & (UART_ITSource_ErrorFrame |
UART_ITSource_ErrorParity |
UART_ITSource_ErrorOverflow |
UART_ITSource_ErrorBreak))
{
if (huart->Config->ErrCallback)
huart->Config->ErrCallback();
UART_ErrorStatusClear(uart, UART_Error_All);
UART_ITStatusClear(uart, mis);
}
// RX FIFO
if (mis & UART_ITSource_RxFIFOLevel)
{
// Принимаем
if(__uart_fifo_receive(huart, 1))
{ // Когда всё приняли, флаги сбросили внутри функции
}
UART_ITStatusClear(uart, UART_ITSource_RxFIFOLevel);
}
// IDLE / Receive Timeout
if (mis & UART_ITSource_RecieveTimeout)
{
UART_ITStatusClear(uart, UART_ITSource_RecieveTimeout);
huart->RxBusy = 0;
// Выключаем RX прерывания до следующего вызова uart_receive_it
UART_ITCmd(uart,
UART_ITSource_RxFIFOLevel |
UART_ITSource_RecieveTimeout,
DISABLE);
if (huart->Config->IdleCallback)
huart->Config->IdleCallback();
}
// TX FIFO
if (mis & UART_ITSource_TxFIFOLevel)
{
// Отправляем
if(__uart_fifo_transmit(huart, 1))
{ // Когда всё отправили, флаги сбросили внутри функции
}
UART_ITStatusClear(uart, UART_ITSource_TxFIFOLevel);
}
// Конец передачи
if (mis & UART_ITSource_TransmitDone)
{
UART_ITStatusClear(uart, UART_ITSource_TransmitDone);
huart->TxBusy = 0;
if (huart->Config->TxCallback)
huart->Config->TxCallback();
}
}
/**
* @brief Установка коллбека Instance
* @param htmr указатель на хендл Instance
* @param cb_type Тип коллбека
* @param Callback Функция коллбека
* @retval void
*/
OperationStatus uart_set_callback(UART_HandleTypeDef* huart, UART_CallbackTypeDef cb_type, void (*Callback)(void))
{
if (!huart || !huart->Instance || !huart->Config)
return ERROR;
switch(cb_type)
{
case UART_Callback_Rx:
huart->Config->RxCallback = Callback;
break;
case UART_Callback_Tx:
huart->Config->TxCallback = Callback;
break;
case UART_Callback_Idle:
huart->Config->IdleCallback = Callback;
break;
case UART_Callback_Error:
huart->Config->ErrCallback = Callback;
break;
default:
return ERROR;
}
return OK;
}
void uart0_gpio_init(void)
{
#if USE_UART0==1
// Получаем структуры
GPIO_Init_TypeDef *tx_config = gpio_get_init(UART0_GPIO_Port, UART0_Tx_Pin);
GPIO_Init_TypeDef *rx_config = gpio_get_init(UART0_GPIO_Port, UART0_Rx_Pin);
// TX пин
if (uart0_config.UART_Init.Tx == ENABLE && tx_config != NULL)
{
GPIO_StructInit(tx_config);
tx_config->AltFunc = ENABLE;
tx_config->Digital = ENABLE;
tx_config->Pin = UART0_Tx_Pin;
GPIO_Init(UART0_GPIO_Port, tx_config);
}
// RX пин
if (uart0_config.UART_Init.Rx == ENABLE && rx_config != NULL)
{
GPIO_StructInit(rx_config);
rx_config->AltFunc = ENABLE;
rx_config->Digital = ENABLE;
rx_config->Pin = UART0_Rx_Pin;
GPIO_Init(UART0_GPIO_Port, rx_config);
}
#endif
}
void uart0_gpio_deinit(void)
{
#if USE_UART0==1
// Получаем структуры
GPIO_Init_TypeDef *tx_config = gpio_get_init(UART0_GPIO_Port, UART0_Tx_Pin);
GPIO_Init_TypeDef *rx_config = gpio_get_init(UART0_GPIO_Port, UART0_Rx_Pin);
// Восстанавливаем оригинальные настройки из таблицы
if (tx_config != NULL)
{
GPIO_StructInit(rx_config);
rx_config->Pin = UART0_Tx_Pin;
GPIO_Init(UART0_GPIO_Port, tx_config);
}
if (rx_config != NULL)
{
GPIO_StructInit(rx_config);
rx_config->Pin = UART0_Rx_Pin;
GPIO_Init(UART0_GPIO_Port, rx_config);
}
#endif
}
void uart1_gpio_init(void)
{
#if USE_UART1==1
// Получаем структуры
GPIO_Init_TypeDef *tx_config = gpio_get_init(UART1_GPIO_Port, UART1_Tx_Pin);
GPIO_Init_TypeDef *rx_config = gpio_get_init(UART1_GPIO_Port, UART1_Rx_Pin);
// TX пин
if (uart1_config.UART_Init.Tx == ENABLE && tx_config != NULL)
{
GPIO_StructInit(tx_config);
tx_config->AltFunc = ENABLE;
tx_config->Digital = ENABLE;
tx_config->Pin = UART1_Tx_Pin;
GPIO_Init(UART1_GPIO_Port, tx_config);
}
// RX пин
if (uart1_config.UART_Init.Rx == ENABLE && rx_config != NULL)
{
;
GPIO_StructInit(rx_config);
rx_config->AltFunc = ENABLE;
rx_config->Digital = ENABLE;
rx_config->Pin = UART1_Rx_Pin;
GPIO_Init(UART1_GPIO_Port, rx_config);
}
#endif
}
void uart1_gpio_deinit(void)
{
#if USE_UART1==1
// Получаем структуры
GPIO_Init_TypeDef *tx_config = gpio_get_init(UART1_GPIO_Port, UART1_Tx_Pin);
GPIO_Init_TypeDef *rx_config = gpio_get_init(UART1_GPIO_Port, UART1_Rx_Pin);
// Восстанавливаем оригинальные настройки из таблицы
if (tx_config != NULL)
{
GPIO_StructInit(rx_config);
rx_config->Pin = UART1_Tx_Pin;
GPIO_Init(UART1_GPIO_Port, tx_config);
}
if (rx_config != NULL)
{
GPIO_StructInit(rx_config);
rx_config->Pin = UART1_Rx_Pin;
GPIO_Init(UART1_GPIO_Port, rx_config);
}
#endif
}
static int __uart_fifo_receive(UART_HandleTypeDef *huart, uint8_t it_mode)
{
while (!UART_FlagStatus(huart->Instance, UART_Flag_RxFIFOEmpty) &&
huart->RxCount < huart->RxSize)
{
huart->RxBufPtr[huart->RxCount++] = UART_RecieveData(huart->Instance);
if (huart->RxCount == huart->RxSize)
{
huart->RxBusy = 0;
if(it_mode)
{
// Выключаем RX прерывания
UART_ITCmd(huart->Instance,
UART_ITSource_RxFIFOLevel |
UART_ITSource_RecieveTimeout,
DISABLE);
}
if (huart->Config->RxCallback)
huart->Config->RxCallback();
return 1;
}
}
return 0;
}
static int __uart_fifo_transmit(UART_HandleTypeDef *huart, uint8_t it_mode)
{
while (!UART_FlagStatus(huart->Instance, UART_Flag_TxFIFOFull) &&
huart->TxCount < huart->TxSize)
{
UART_SendData(huart->Instance, huart->TxBufPtr[huart->TxCount++]);
}
if (huart->TxCount == huart->TxSize)
{
if(it_mode)
{
// Выключаем FIFO прерывание
UART_ITCmd(huart->Instance, UART_ITSource_TxFIFOLevel, DISABLE);
// Включаем TransmitDone прерывание, коллбек будет по нему
UART_ITCmd(huart->Instance, UART_ITSource_TransmitDone, ENABLE);
}
else
{
while(!UART_FlagStatus(huart->Instance, UART_Flag_TxFIFOEmpty)); // ждем пока не опустошится буфер
huart->TxBusy = 0;
if (huart->Config->TxCallback)
huart->Config->TxCallback();
}
return 1;
}
return 0;
}

View File

@@ -1,104 +0,0 @@
/*==============================================================================
* Инициализация UART с использованием бибилотеки PLIB035
*------------------------------------------------------------------------------
* ЦНИИ СЭТ, Разваляев Алексей <wot890089@mail.ru>
*==============================================================================
* ЦНИИ СЭТ
*==============================================================================
*/
#ifndef __UART_H
#define __UART_H
//-- Includes ------------------------------------------------------------------
#include "plib035.h"
#include "retarget_conf.h"
//-- Defines -------------------------------------------------------------------
// Дефайны для кольцевых буферов UART
#ifndef UART_RX_BUF_SIZE
#define UART_RX_BUF_SIZE 128
#endif
#ifndef UART_TX_BUF_SIZE
#define UART_TX_BUF_SIZE 128
#endif
// Дефайны для режима направления UART
#define UART_Direction_None DISABLE, DISABLE
#define UART_Direction_RxTx ENABLE, ENABLE
#define UART_Direction_Tx DISABLE, ENABLE
#define UART_Direction_Rx ENABLE, DISABLE
// Дефайны для пинов UART
#define UART0_Tx_Pin GPIO_Pin_10 // PB10 для UART0 Tx
#define UART0_Rx_Pin GPIO_Pin_11 // PB11 для UART0 Rx
#define UART0_GPIO_Port GPIOB
#define UART1_Tx_Pin GPIO_Pin_8 // PB8 для UART1 Tx
#define UART1_Rx_Pin GPIO_Pin_9 // PB9 для UART1 Rx
#define UART1_GPIO_Port GPIOB
typedef enum
{
UART_Callback_Rx,
UART_Callback_Tx,
UART_Callback_Idle,
UART_Callback_Error,
}UART_CallbackTypeDef;
typedef struct
{
UART_Init_TypeDef UART_Init; /* Стандартная конфигурация из PLIB */
// Callback функции
void (*RxCallback)(void); /* Вызывается при приеме полного сообщения */
void (*TxCallback)(void); /* Вызывается при окончании передачи */
void (*IdleCallback)(void); /* Вызывается при IDLE линии на RX */
void (*ErrCallback)(void); /* Вызывается при ошибке */
} UART_ExtInit_TypeDef;
typedef struct
{
UART_TypeDef *Instance; /* Регистры UART */
UART_ExtInit_TypeDef *Config; /* Конфигурация UART */
/* ===== TX ===== */
const uint8_t *TxBufPtr; /* текущий массив для передачи*/
uint16_t TxCount; /* счетчик отправленых байт*/
uint16_t TxSize; /* длина данных для отправки*/
volatile uint8_t TxBusy; /* Флаг занятости TX*/
/* ===== RX ===== */
uint8_t *RxBufPtr; /* буфер для приёма*/
uint16_t RxCount; /* счетчик принятых байт*/
uint16_t RxSize; /* длина данных для приема*/
volatile uint8_t RxBusy; /* Флаг занятости RX*/
}UART_HandleTypeDef;
extern UART_HandleTypeDef huart0;
extern UART_HandleTypeDef huart1;
//-- Exported functions prototypes ---------------------------------------------
void uart_init_first(void);
OperationStatus uart_init(UART_HandleTypeDef *huart, UART_ExtInit_TypeDef *NewConfig);
OperationStatus uart_set_callback(UART_HandleTypeDef* huart, UART_CallbackTypeDef cb_type, void (*Callback)(void));
OperationStatus uart_start(UART_HandleTypeDef *huart, UART_FIFOLevel_TypeDef TxFifoLevel, UART_FIFOLevel_TypeDef RxFifoLevel);
OperationStatus uart_transmit(UART_HandleTypeDef *huart, uint8_t *buf, uint16_t size, uint32_t timeout);
OperationStatus uart_receive(UART_HandleTypeDef *huart, uint8_t *buf, uint16_t size, uint32_t timeout);
OperationStatus uart_transmit_it(UART_HandleTypeDef *huart, uint8_t *buf, uint16_t size);
OperationStatus uart_receive_it(UART_HandleTypeDef *huart, uint8_t *buf, uint16_t size);
void uart_handler(UART_HandleTypeDef *huart);
void uart0_gpio_init(void);
void uart0_gpio_deinit(void);
void uart1_gpio_init(void);
void uart1_gpio_deinit(void);
#endif /*__UART_H*/

View File

@@ -1,324 +0,0 @@
/*==============================================================================
* Прерывания микроконтроллера 1921ВК035
*------------------------------------------------------------------------------
* ЦНИИ СЭТ, Разваляев Алексей <wot890089@mail.ru>
*==============================================================================
* ЦНИИ СЭТ
*==============================================================================
*/
//-- Includes ------------------------------------------------------------------
#include "main.h"
/******************************************************************************/
/* 1921VK035 Peripheral Interrupt Handlers */
/* Add here the Interrupt Handlers for the used peripherals. */
/******************************************************************************/
void GPIOA_IRQHandler(void)
{
}
void GPIOB_IRQHandler(void)
{
}
void TMR0_IRQHandler(void)
{
tmr_handler(&htmr0);
}
void TMR1_IRQHandler(void)
{
tmr_handler(&htmr1);
}
void TMR2_IRQHandler(void)
{
tmr_handler(&htmr2);
}
void TMR3_IRQHandler(void)
{
tmr_handler(&htmr3);
}
void UART0_TD_IRQHandler(void)
{
uart_handler(&huart0);
}
void UART0_RX_IRQHandler(void)
{
uart_handler(&huart0);
}
void UART0_TX_IRQHandler(void)
{
uart_handler(&huart0);
}
void UART0_E_RT_IRQHandler(void)
{
uart_handler(&huart0);
}
void UART1_TD_IRQHandler(void)
{
uart_handler(&huart1);
}
void UART1_RX_IRQHandler(void)
{
uart_handler(&huart1);
}
void UART1_TX_IRQHandler(void)
{
uart_handler(&huart1);
}
void UART1_E_RT_IRQHandler(void)
{
uart_handler(&huart1);
}
void SPI_RO_RT_IRQHandler(void)
{
}
void SPI_RX_IRQHandler(void)
{
}
void SPI_TX_IRQHandler(void)
{
}
void I2C_IRQHandler(void)
{
}
void ECAP0_IRQHandler(void)
{
}
void ECAP1_IRQHandler(void)
{
}
void ECAP2_IRQHandler(void)
{
}
void PWM0_IRQHandler(void)
{
}
void PWM0_HD_IRQHandler(void)
{
}
void PWM0_TZ_IRQHandler(void)
{
}
void PWM1_IRQHandler(void)
{
}
void PWM1_HD_IRQHandler(void)
{
}
void PWM1_TZ_IRQHandler(void)
{
}
void PWM2_IRQHandler(void)
{
}
void PWM2_HD_IRQHandler(void)
{
}
void PWM2_TZ_IRQHandler(void)
{
}
void QEP_IRQHandler(void)
{
}
void ADC_SEQ0_IRQHandler(void)
{
adc_seq_handler(&hadc, ADC_SEQ_Num_0);
}
void ADC_SEQ1_IRQHandler(void)
{
adc_seq_handler(&hadc, ADC_SEQ_Num_1);
}
void ADC_DC_IRQHandler(void)
{
}
void CAN0_IRQHandler(void)
{
}
void CAN1_IRQHandler(void)
{
}
void CAN2_IRQHandler(void)
{
}
void CAN3_IRQHandler(void)
{
}
void CAN4_IRQHandler(void)
{
}
void CAN5_IRQHandler(void)
{
}
void CAN6_IRQHandler(void)
{
}
void CAN7_IRQHandler(void)
{
}
void CAN8_IRQHandler(void)
{
}
void CAN9_IRQHandler(void)
{
}
void CAN10_IRQHandler(void)
{
}
void CAN11_IRQHandler(void)
{
}
void CAN12_IRQHandler(void)
{
}
void CAN13_IRQHandler(void)
{
}
void CAN14_IRQHandler(void)
{
}
void CAN15_IRQHandler(void)
{
}
void FPU_IRQHandler(void)
{
}
void DMA_CH0_IRQHandler(void)
{
}
void DMA_CH1_IRQHandler(void)
{
}
void DMA_CH2_IRQHandler(void)
{
}
void DMA_CH3_IRQHandler(void)
{
}
void DMA_CH4_IRQHandler(void)
{
}
void DMA_CH5_IRQHandler(void)
{
}
void DMA_CH6_IRQHandler(void)
{
}
void DMA_CH7_IRQHandler(void)
{
}
void DMA_CH8_IRQHandler(void)
{
}
void DMA_CH9_IRQHandler(void)
{
}
void DMA_CH10_IRQHandler(void)
{
}
void DMA_CH11_IRQHandler(void)
{
}
void DMA_CH12_IRQHandler(void)
{
}
void DMA_CH13_IRQHandler(void)
{
}
void DMA_CH14_IRQHandler(void)
{
}
void DMA_CH15_IRQHandler(void)
{
}
void WDT_IRQHandler(void)
{
}
void RCU_IRQHandler(void)
{
}
void MFLASH_IRQHandler(void)
{
}
/******************************************************************************/
/* Cortex-M4 Processor Interruption and Exception Handlers */
/******************************************************************************/
/**
* @brief This function handles Non maskable interrupt.
*/
void NMI_Handler(void)
{
while (1)
{
}
}
/**
* @brief This function handles Hard fault interrupt.
*/
void HardFault_Handler(void)
{
while (1)
{
}
}
/**
* @brief This function handles Memory management fault.
*/
void MemManage_Handler(void)
{
while (1)
{
}
}
/**
* @brief This function handles Prefetch fault, memory access fault.
*/
void BusFault_Handler(void)
{
while (1)
{
}
}
/**
* @brief This function handles Undefined instruction or illegal state.
*/
void UsageFault_Handler(void)
{
while (1)
{
}
}
/**
* @brief This function handles System service call via SWI instruction.
*/
void SVC_Handler(void)
{
}
/**
* @brief This function handles Debug monitor.
*/
void DebugMon_Handler(void)
{
}
/**
* @brief This function handles Pendable request for system service.
*/
void PendSV_Handler(void)
{
}
/**
* @brief This function handles System tick timer.
*/
void SysTick_Handler(void)
{
millis_inc();
}

View File

@@ -1,247 +0,0 @@
/*==============================================================================
* Конфигурация портов с использованием бибилотеки PLIB035
*------------------------------------------------------------------------------
* ЦНИИ СЭТ, Разваляев Алексей <wot890089@mail.ru>
*==============================================================================
* Реализация функций инициализации портов находится в gpio.c
* ЦНИИ СЭТ
*==============================================================================
*/
#ifndef __PERIPH_CONFIG_H
#define __PERIPH_CONFIG_H
//-- Includes ------------------------------------------------------------------
#include "sysclk.h"
#include "gpio.h"
#include "uart.h"
#include "tmr.h"
#include "adc.h"
void Error_Handler(void);
//-- Общие Конфигурации -------------------------------------------------------
// 0 - использовать периферию, 1 - не использовать
#define USE_UART0 0
#define USE_UART1 1
#define USE_TMR0 1
#define USE_TMR1 1
#define USE_TMR2 1
#define USE_TMR3 0
#define USE_ADC_SEQ0 1
#define USE_ADC_SEQ1 0
#define USE_ADC_DC0 0
#define USE_ADC_DC1 0
#define USE_ADC_DC2 0
#define USE_ADC_DC3 0
//#define RETARGET // закоментирован - отключен,
// // разкоментирован - включен
//#define RETARGET_USE_ITM // закоментирован - использовать UART,
// // разкоментирован - использовать ITM
// Для дальнейшей настройки RETARGET -> retarget_conf.h
//-- RCU Конфигурации ---------------------------------------------------------
static RCU_PLL_Ref_TypeDef SYSCLK_Oscil_Type = RCU_PLL_Ref_OSEClk;
#define SYSCLK_CORE_CLOCK_MHZ 100
//-- GPIO Конфигурации --------------------------------------------------------
/*
Note:
Периферия сама настроит нужные пины в gpiox_config на альтернативные функции
*/
static GPIO_Init_TypeDef gpioa_config[] = {
// Пин, Режим, Выходной режим, Входной режим, Подтяжка, Нагрузка/Скорость
{ GPIO_Pin_0, GPIO_PinMode_Unused, GPIO_OutMode_PP, GPIO_InMode_Schmitt, GPIO_PullMode_Disable, GPIO_DriveMode_HighFast },
{ GPIO_Pin_1, GPIO_PinMode_Unused, GPIO_OutMode_PP, GPIO_InMode_Schmitt, GPIO_PullMode_Disable, GPIO_DriveMode_HighFast },
{ GPIO_Pin_2, GPIO_PinMode_Unused, GPIO_OutMode_PP, GPIO_InMode_Schmitt, GPIO_PullMode_Disable, GPIO_DriveMode_HighFast },
{ GPIO_Pin_3, GPIO_PinMode_Unused, GPIO_OutMode_PP, GPIO_InMode_Schmitt, GPIO_PullMode_Disable, GPIO_DriveMode_HighFast },
{ GPIO_Pin_4, GPIO_PinMode_Unused, GPIO_OutMode_PP, GPIO_InMode_Schmitt, GPIO_PullMode_Disable, GPIO_DriveMode_HighFast },
{ GPIO_Pin_5, GPIO_PinMode_Unused, GPIO_OutMode_PP, GPIO_InMode_Schmitt, GPIO_PullMode_Disable, GPIO_DriveMode_HighFast },
{ GPIO_Pin_6, GPIO_PinMode_Unused, GPIO_OutMode_PP, GPIO_InMode_Schmitt, GPIO_PullMode_Disable, GPIO_DriveMode_HighFast },
{ GPIO_Pin_7, GPIO_PinMode_Output, GPIO_OutMode_PP, GPIO_InMode_Schmitt, GPIO_PullMode_Disable, GPIO_DriveMode_HighFast },
{ GPIO_Pin_8, GPIO_PinMode_Output, GPIO_OutMode_PP, GPIO_InMode_Schmitt, GPIO_PullMode_Disable, GPIO_DriveMode_HighFast },
{ GPIO_Pin_9, GPIO_PinMode_Unused, GPIO_OutMode_PP, GPIO_InMode_Schmitt, GPIO_PullMode_Disable, GPIO_DriveMode_HighFast },
{ GPIO_Pin_10, GPIO_PinMode_Unused, GPIO_OutMode_PP, GPIO_InMode_Schmitt, GPIO_PullMode_Disable, GPIO_DriveMode_HighFast },
{ GPIO_Pin_11, GPIO_PinMode_Unused, GPIO_OutMode_PP, GPIO_InMode_Schmitt, GPIO_PullMode_Disable, GPIO_DriveMode_HighFast },
{ GPIO_Pin_12, GPIO_PinMode_Unused, GPIO_OutMode_PP, GPIO_InMode_Schmitt, GPIO_PullMode_Disable, GPIO_DriveMode_HighFast },
{ GPIO_Pin_13, GPIO_PinMode_Unused, GPIO_OutMode_PP, GPIO_InMode_Schmitt, GPIO_PullMode_Disable, GPIO_DriveMode_HighFast },
{ GPIO_Pin_14, GPIO_PinMode_Unused, GPIO_OutMode_PP, GPIO_InMode_Schmitt, GPIO_PullMode_Disable, GPIO_DriveMode_HighFast },
{ GPIO_Pin_15, GPIO_PinMode_Unused, GPIO_OutMode_PP, GPIO_InMode_Schmitt, GPIO_PullMode_Disable, GPIO_DriveMode_HighFast },
};
static GPIO_Init_TypeDef gpiob_config[] = {
// Пин, Режим, Выходной режим, Входной режим, Подтяжка, Нагрузка/Скорость
{ GPIO_Pin_0, GPIO_PinMode_Unused, GPIO_OutMode_PP, GPIO_InMode_Schmitt, GPIO_PullMode_Disable, GPIO_DriveMode_HighFast },
{ GPIO_Pin_1, GPIO_PinMode_Unused, GPIO_OutMode_PP, GPIO_InMode_Schmitt, GPIO_PullMode_Disable, GPIO_DriveMode_HighFast },
{ GPIO_Pin_2, GPIO_PinMode_Unused, GPIO_OutMode_PP, GPIO_InMode_Schmitt, GPIO_PullMode_Disable, GPIO_DriveMode_HighFast },
{ GPIO_Pin_3, GPIO_PinMode_Unused, GPIO_OutMode_PP, GPIO_InMode_Schmitt, GPIO_PullMode_Disable, GPIO_DriveMode_HighFast },
{ GPIO_Pin_4, GPIO_PinMode_Unused, GPIO_OutMode_PP, GPIO_InMode_Schmitt, GPIO_PullMode_Disable, GPIO_DriveMode_HighFast },
{ GPIO_Pin_5, GPIO_PinMode_Unused, GPIO_OutMode_PP, GPIO_InMode_Schmitt, GPIO_PullMode_Disable, GPIO_DriveMode_HighFast },
{ GPIO_Pin_6, GPIO_PinMode_Unused, GPIO_OutMode_PP, GPIO_InMode_Schmitt, GPIO_PullMode_Disable, GPIO_DriveMode_HighFast },
{ GPIO_Pin_7, GPIO_PinMode_Unused, GPIO_OutMode_PP, GPIO_InMode_Schmitt, GPIO_PullMode_Disable, GPIO_DriveMode_HighFast },
{ GPIO_Pin_8, GPIO_PinMode_Unused, GPIO_OutMode_PP, GPIO_InMode_Schmitt, GPIO_PullMode_Disable, GPIO_DriveMode_HighFast },
{ GPIO_Pin_9, GPIO_PinMode_Unused, GPIO_OutMode_PP, GPIO_InMode_Schmitt, GPIO_PullMode_Disable, GPIO_DriveMode_HighFast },
{ GPIO_Pin_10, GPIO_PinMode_Unused, GPIO_OutMode_PP, GPIO_InMode_Schmitt, GPIO_PullMode_Disable, GPIO_DriveMode_HighFast },
{ GPIO_Pin_11, GPIO_PinMode_Unused, GPIO_OutMode_PP, GPIO_InMode_Schmitt, GPIO_PullMode_Disable, GPIO_DriveMode_HighFast },
{ GPIO_Pin_12, GPIO_PinMode_Unused, GPIO_OutMode_PP, GPIO_InMode_Schmitt, GPIO_PullMode_Disable, GPIO_DriveMode_HighFast },
{ GPIO_Pin_13, GPIO_PinMode_Unused, GPIO_OutMode_PP, GPIO_InMode_Schmitt, GPIO_PullMode_Disable, GPIO_DriveMode_HighFast },
{ GPIO_Pin_14, GPIO_PinMode_Unused, GPIO_OutMode_PP, GPIO_InMode_Schmitt, GPIO_PullMode_Disable, GPIO_DriveMode_HighFast },
{ GPIO_Pin_15, GPIO_PinMode_Unused, GPIO_OutMode_PP, GPIO_InMode_Schmitt, GPIO_PullMode_Disable, GPIO_DriveMode_HighFast },
};
//-- UART Конфигурации --------------------------------------------------------
#if USE_UART0==1
static UART_ExtInit_TypeDef uart0_config = {
//Стоп биты, Четность, Длина посылки, Скорость, FIFO, Направление работы
UART_StopBit_1, UART_ParityBit_Disable, UART_DataWidth_8, 115200, DISABLE, UART_Direction_RxTx,
//Rx Коллбек Tx Коллбек Idle Коллбек Error Коллбек
NULL, NULL, NULL, NULL
};
#endif
#if USE_UART1==1
static UART_ExtInit_TypeDef uart1_config = {
//Стоп биты, Четность, Длина посылки, Скорость, FIFO, Направление работы
UART_StopBit_1, UART_ParityBit_Disable, UART_DataWidth_8, 115200, DISABLE, UART_Direction_RxTx,
//Rx Коллбек Tx Коллбек Idle Коллбек Error Коллбек
NULL, NULL, NULL, NULL
};
#endif
//-- TMR Конфигурации ---------------------------------------------------------
#if USE_TMR0==1
static TMR_ExtInit_TypeDef tmr0_config = {
//Частота Clk МГц, Период обновления
SYSCLK_CORE_CLOCK_MHZ, LOAD(0xFFFFFFFF, SYSCLK_CORE_CLOCK_MHZ-1),
//Прерывания Запуск конверсии АЦП Реквест DMA Внешнее тактирование
DISABLE, DISABLE, DISABLE, TMR_ExtInput_Disable
};
#endif
#if USE_TMR1==1
static TMR_ExtInit_TypeDef tmr1_config = {
//Частота Clk МГц, Период обновления
SYSCLK_CORE_CLOCK_MHZ, FREQ_HZ(10),
//Прерывания Запуск конверсии АЦП Реквест DMA Внешнее тактирование
DISABLE, DISABLE, DISABLE, TMR_ExtInput_Disable
};
#endif
#if USE_TMR2==1
static TMR_ExtInit_TypeDef tmr2_config = {
//Частота Clk МГц, Период обновления
SYSCLK_CORE_CLOCK_MHZ, PERIOD_MKS(1000000),
//Прерывания Запуск конверсии АЦП Реквест DMA Внешнее тактирование
ENABLE, DISABLE, DISABLE, TMR_ExtInput_Disable
};
#endif
#if USE_TMR3==1
static TMR_Init_TypeDef tmr3_config = {
//Частота Clk МГц, Период обновления
SYSCLK_CORE_CLOCK_MHZ, PERIOD_MKS(1000),
//Прерывания Запуск конверсии АЦП Реквест DMA Внешнее тактирование
DISABLE, DISABLE, DISABLE, TMR_ExtInput_Disable
};
#endif
//-- ADC SEQ Конфигурации -----------------------------------------------------
static RCU_PeriphClk_TypeDef ADC_ClockSource = RCU_PeriphClk_PLLClk;
static float ADC_ClockMHz = 12.5;
#if USE_ADC_SEQ0==1
static ADC_SEQ_ExtInit_TypeDef adc_seq0_config = {
//Событие запуска секвенсора, Разрешение программного запуска
ADC_SEQ_StartEvent_SwReq, ENABLE,
//Выбор каналов для запросов секвенсора
ADC_CH_Num_0, ADC_CH_Num_1, ADC_CH_Num_2, ADC_CH_Num_3,
//Последний запрос, Усреднение запросов, Усреднение запросов
ADC_SEQ_ReqNum_1, ADC_SEQ_Average_2, DISABLE,
//Кол-во рестартов секвенсора, Усреднение рестартов, Задержка между рестартами
0, DISABLE, 0,
//Разрешение каналов цифровых компараторов
DISABLE, DISABLE, DISABLE, DISABLE,
//Настройка DMA FIFO, Разрешение DMA
ADC_SEQ_DMAFIFOLevel_1, DISABLE,
//Прерывания, Количество запросов для прерывания
ENABLE, 0,
//SEQ Complete Коллбек, Error коллбек
NULL, NULL
};
#endif
#if USE_ADC_SEQ1==1
static ADC_SEQ_ExtInit_TypeDef adc_seq1_config = {
//Событие запуска секвенсора, Разрешение программного запуска
ADC_SEQ_StartEvent_SwReq, ENABLE,
//Выбор каналов для запросов секвенсора
ADC_CH_Num_0, ADC_CH_Num_1, ADC_CH_Num_2, ADC_CH_Num_3,
//Макс. кол-во запросов, Усреднение запросов, Усреднение запросов
ADC_SEQ_ReqNum_0, ADC_SEQ_Average_2, DISABLE,
//Кол-во рестартов секвенсора, Усреднение рестартов, Задержка между рестартами
0, DISABLE, 0,
//Разрешение каналов цифровых компараторов
DISABLE, DISABLE, DISABLE, DISABLE,
//Настройка DMA FIFO, Разрешение DMA
ADC_SEQ_DMAFIFOLevel_1, DISABLE,
//Прерывания, Количество запросов для прерывания
DISABLE, 0,
//SEQ Complete Коллбек, Error коллбек
NULL, NULL
};
#endif
//-- ADC DC Конфигурации ------------------------------------------------------
#if USE_ADC_DC0==1
static ADC_DC_ExtInit_TypeDef adc_dc0_config = {
//Включение выхода компаратора
DISABLE,
//Нижний порог, Верхний порог
0, 0,
//Запуск измерения, Канал, Режим срабатывания, Условие срабатывания
ADC_DC_Source_EOC, ADC_CH_Num_1, ADC_DC_Mode_Multiple, ADC_DC_Condition_Low,
//DC Triggered Коллбек, Error коллбек
NULL, NULL
};
#endif
#if USE_ADC_DC1==1
static ADC_DC_ExtInit_TypeDef adc_dc1_config = {
//Включение выхода компаратора
DISABLE,
//Нижний порог, Верхний порог
0, 0,
//Запуск измерения, Канал, Режим срабатывания, Условие срабатывания
ADC_DC_Source_EOC, ADC_CH_Num_2, ADC_DC_Mode_Multiple, ADC_DC_Condition_Low,
//DC Triggered Коллбек, Error коллбек
NULL, NULL
};
#endif
#if USE_ADC_DC2==1
static ADC_DC_ExtInit_TypeDef adc_dc2_config = {
//Включение выхода компаратора
DISABLE,
//Нижний порог, Верхний порог
0, 0,
//Запуск измерения, Канал, Режим срабатывания, Условие срабатывания
ADC_DC_Source_EOC, ADC_CH_Num_3, ADC_DC_Mode_Multiple, ADC_DC_Condition_Low,
//DC Triggered Коллбек, Error коллбек
NULL, NULL
};
#endif
#if USE_ADC_DC3==1
static ADC_DC_ExtInit_TypeDef adc_dc3_config = {
//Включение выхода компаратора
DISABLE,
//Нижний порог, Верхний порог
0, 0,
//Запуск измерения, Канал, Режим срабатывания, Условие срабатывания
ADC_DC_Source_EOC, ADC_CH_Num_4, ADC_DC_Mode_Multiple, ADC_DC_Condition_Low,
//DC Triggered Коллбек, Error коллбек
NULL, NULL
};
#endif
#endif /*__PERIPH_CONFIG_H*/

View File

@@ -1,2230 +0,0 @@
Component: Arm Compiler for Embedded 6.19 Tool: armlink [5e73cb00]
==============================================================================
Section Cross References
main.o(.text.periph_init) refers to sysclk.o(.text.sysclk_init) for sysclk_init
main.o(.text.periph_init) refers to uart.o(.text.uart_init_first) for uart_init_first
main.o(.text.periph_init) refers to adc.o(.text.adc_init_first) for adc_init_first
main.o(.text.periph_init) refers to tmr.o(.text.tmr_init_first) for tmr_init_first
main.o(.text.periph_init) refers to gpio.o(.text.gpio_init) for gpio_init
main.o(.text.periph_init) refers to uart.o(.bss.huart1) for huart1
main.o(.text.periph_init) refers to main.o(.text.restart_receive) for restart_receive
main.o(.text.periph_init) refers to uart.o(.text.uart_set_callback) for uart_set_callback
main.o(.text.periph_init) refers to uart.o(.text.uart_start) for uart_start
main.o(.text.periph_init) refers to tmr.o(.bss.htmr2) for htmr2
main.o(.text.periph_init) refers to main.o(.text.heartbit) for heartbit
main.o(.text.periph_init) refers to tmr.o(.text.tmr_set_callback) for tmr_set_callback
main.o(.text.periph_init) refers to tmr.o(.bss.htmr0) for htmr0
main.o(.text.periph_init) refers to tmr.o(.text.tmr_start) for tmr_start
main.o(.text.periph_init) refers to tmr.o(.bss.htmr1) for htmr1
main.o(.text.periph_init) refers to adc.o(.bss.hadc) for hadc
main.o(.text.periph_init) refers to main.o(.bss.adc_buff) for adc_buff
main.o(.text.periph_init) refers to adc.o(.text.adc_seq_start) for adc_seq_start
main.o(.ARM.exidx.text.periph_init) refers to main.o(.text.periph_init) for [Anonymous Symbol]
main.o(.text.restart_receive) refers to uart.o(.bss.huart1) for huart1
main.o(.text.restart_receive) refers to main.o(.bss.rxbuff) for rxbuff
main.o(.text.restart_receive) refers to uart.o(.text.uart_receive_it) for uart_receive_it
main.o(.text.restart_receive) refers to uart.o(.text.uart_transmit_it) for uart_transmit_it
main.o(.ARM.exidx.text.restart_receive) refers to main.o(.text.restart_receive) for [Anonymous Symbol]
main.o(.text.heartbit) refers to uart.o(.bss.huart1) for huart1
main.o(.text.heartbit) refers to uart.o(.text.uart_transmit) for uart_transmit
main.o(.ARM.exidx.text.heartbit) refers to main.o(.text.heartbit) for [Anonymous Symbol]
main.o(.text.main) refers to main.o(.text.periph_init) for periph_init
main.o(.text.main) refers to uart.o(.bss.huart1) for huart1
main.o(.text.main) refers to main.o(.bss.rxbuff) for rxbuff
main.o(.text.main) refers to uart.o(.text.uart_receive_it) for uart_receive_it
main.o(.text.main) refers to tmr.o(.bss.htmr0) for htmr0
main.o(.text.main) refers to tmr.o(.text.tmr_delay_start) for tmr_delay_start
main.o(.text.main) refers to tmr.o(.text.tmr_delay) for tmr_delay
main.o(.text.main) refers to tmr.o(.text.tmr_delay_done) for tmr_delay_done
main.o(.text.main) refers to adc.o(.text.adc_sw_start) for adc_sw_start
main.o(.ARM.exidx.text.main) refers to main.o(.text.main) for [Anonymous Symbol]
main.o(.ARM.exidx.text.Error_Handler) refers to main.o(.text.Error_Handler) for [Anonymous Symbol]
gpio.o(.text.gpio_init) refers to plib035_gpio.o(.text.GPIO_DeInit) for GPIO_DeInit
gpio.o(.text.gpio_init) refers to gpio.o(.data.gpioa_config) for gpioa_config
gpio.o(.text.gpio_init) refers to plib035_gpio.o(.text.GPIO_Init) for GPIO_Init
gpio.o(.text.gpio_init) refers to gpio.o(.data.gpiob_config) for gpiob_config
gpio.o(.ARM.exidx.text.gpio_init) refers to gpio.o(.text.gpio_init) for [Anonymous Symbol]
gpio.o(.text.gpio_get_init) refers to gpio.o(.data.gpiob_config) for gpiob_config
gpio.o(.text.gpio_get_init) refers to gpio.o(.data.gpioa_config) for gpioa_config
gpio.o(.ARM.exidx.text.gpio_get_init) refers to gpio.o(.text.gpio_get_init) for [Anonymous Symbol]
tmr.o(.text.tmr_init_first) refers to tmr.o(.bss.htmr0) for htmr0
tmr.o(.text.tmr_init_first) refers to tmr.o(.data.tmr0_config) for tmr0_config
tmr.o(.text.tmr_init_first) refers to tmr.o(.text.TMR_Init) for TMR_Init
tmr.o(.text.tmr_init_first) refers to tmr.o(.bss.htmr1) for htmr1
tmr.o(.text.tmr_init_first) refers to tmr.o(.data.tmr1_config) for tmr1_config
tmr.o(.text.tmr_init_first) refers to tmr.o(.data.tmr2_config) for tmr2_config
tmr.o(.text.tmr_init_first) refers to tmr.o(.bss.htmr2) for htmr2
tmr.o(.ARM.exidx.text.tmr_init_first) refers to tmr.o(.text.tmr_init_first) for [Anonymous Symbol]
tmr.o(.text.tmr_init) refers to tmr.o(.text.TMR_Init) for TMR_Init
tmr.o(.ARM.exidx.text.tmr_init) refers to tmr.o(.text.tmr_init) for [Anonymous Symbol]
tmr.o(.text.TMR_Init) refers to plib035_tmr.o(.text.TMR_PeriodConfig) for TMR_PeriodConfig
tmr.o(.text.TMR_Init) refers to plib035_tmr.o(.text.TMR_FreqConfig) for TMR_FreqConfig
tmr.o(.ARM.exidx.text.TMR_Init) refers to tmr.o(.text.TMR_Init) for [Anonymous Symbol]
tmr.o(.ARM.exidx.text.tmr_set_callback) refers to tmr.o(.text.tmr_set_callback) for [Anonymous Symbol]
tmr.o(.ARM.exidx.text.tmr_start) refers to tmr.o(.text.tmr_start) for [Anonymous Symbol]
tmr.o(.ARM.exidx.text.tmr_stop) refers to tmr.o(.text.tmr_stop) for [Anonymous Symbol]
tmr.o(.ARM.exidx.text.tmr_delay) refers to tmr.o(.text.tmr_delay) for [Anonymous Symbol]
tmr.o(.ARM.exidx.text.tmr_delay_start) refers to tmr.o(.text.tmr_delay_start) for [Anonymous Symbol]
tmr.o(.ARM.exidx.text.tmr_delay_done) refers to tmr.o(.text.tmr_delay_done) for [Anonymous Symbol]
tmr.o(.ARM.exidx.text.tmr_handler) refers to tmr.o(.text.tmr_handler) for [Anonymous Symbol]
uart.o(.text.uart_init_first) refers to uart.o(.text.uart1_gpio_init) for uart1_gpio_init
uart.o(.text.uart_init_first) refers to plib035_uart.o(.text.UART_DeInit) for UART_DeInit
uart.o(.text.uart_init_first) refers to uart.o(.bss.huart1) for huart1
uart.o(.text.uart_init_first) refers to uart.o(.data.uart1_config) for uart1_config
uart.o(.text.uart_init_first) refers to plib035_uart.o(.text.UART_Init) for UART_Init
uart.o(.ARM.exidx.text.uart_init_first) refers to uart.o(.text.uart_init_first) for [Anonymous Symbol]
uart.o(.text.uart1_gpio_init) refers to gpio.o(.text.gpio_get_init) for gpio_get_init
uart.o(.text.uart1_gpio_init) refers to uart.o(.data.uart1_config) for uart1_config
uart.o(.text.uart1_gpio_init) refers to plib035_gpio.o(.text.GPIO_StructInit) for GPIO_StructInit
uart.o(.text.uart1_gpio_init) refers to plib035_gpio.o(.text.GPIO_Init) for GPIO_Init
uart.o(.ARM.exidx.text.uart1_gpio_init) refers to uart.o(.text.uart1_gpio_init) for [Anonymous Symbol]
uart.o(.text.uart_init) refers to plib035_uart.o(.text.UART_Init) for UART_Init
uart.o(.ARM.exidx.text.uart_init) refers to uart.o(.text.uart_init) for [Anonymous Symbol]
uart.o(.ARM.exidx.text.uart_start) refers to uart.o(.text.uart_start) for [Anonymous Symbol]
uart.o(.text.uart_transmit) refers to sysclk.o(.text.millis) for millis
uart.o(.ARM.exidx.text.uart_transmit) refers to uart.o(.text.uart_transmit) for [Anonymous Symbol]
uart.o(.text.uart_receive) refers to sysclk.o(.text.millis) for millis
uart.o(.ARM.exidx.text.uart_receive) refers to uart.o(.text.uart_receive) for [Anonymous Symbol]
uart.o(.ARM.exidx.text.uart_transmit_it) refers to uart.o(.text.uart_transmit_it) for [Anonymous Symbol]
uart.o(.ARM.exidx.text.uart_receive_it) refers to uart.o(.text.uart_receive_it) for [Anonymous Symbol]
uart.o(.ARM.exidx.text.uart_handler) refers to uart.o(.text.uart_handler) for [Anonymous Symbol]
uart.o(.ARM.exidx.text.uart_set_callback) refers to uart.o(.text.uart_set_callback) for [Anonymous Symbol]
uart.o(.ARM.exidx.text.uart0_gpio_init) refers to uart.o(.text.uart0_gpio_init) for [Anonymous Symbol]
uart.o(.ARM.exidx.text.uart0_gpio_deinit) refers to uart.o(.text.uart0_gpio_deinit) for [Anonymous Symbol]
uart.o(.text.uart1_gpio_deinit) refers to gpio.o(.text.gpio_get_init) for gpio_get_init
uart.o(.text.uart1_gpio_deinit) refers to plib035_gpio.o(.text.GPIO_StructInit) for GPIO_StructInit
uart.o(.text.uart1_gpio_deinit) refers to plib035_gpio.o(.text.GPIO_Init) for GPIO_Init
uart.o(.ARM.exidx.text.uart1_gpio_deinit) refers to uart.o(.text.uart1_gpio_deinit) for [Anonymous Symbol]
adc.o(.text.adc_init_first) refers to sysclk.o(.text.rcu_set_clock_adc) for rcu_set_clock_adc
adc.o(.text.adc_init_first) refers to main.o(.text.Error_Handler) for Error_Handler
adc.o(.text.adc_init_first) refers to adc.o(.bss.hadc) for hadc
adc.o(.text.adc_init_first) refers to adc.o(.data.adc_seq0_config) for adc_seq0_config
adc.o(.text.adc_init_first) refers to plib035_adc.o(.text.ADC_SEQ_Init) for ADC_SEQ_Init
adc.o(.text.adc_init_first) refers to sysclk.o(.text.millis) for millis
adc.o(.ARM.exidx.text.adc_init_first) refers to adc.o(.text.adc_init_first) for [Anonymous Symbol]
adc.o(.text.adc_seq_init) refers to plib035_adc.o(.text.ADC_SEQ_Init) for ADC_SEQ_Init
adc.o(.ARM.exidx.text.adc_seq_init) refers to adc.o(.text.adc_seq_init) for [Anonymous Symbol]
adc.o(.ARM.exidx.text.adc_seq_set_callback) refers to adc.o(.text.adc_seq_set_callback) for [Anonymous Symbol]
adc.o(.ARM.exidx.text.adc_seq_start) refers to adc.o(.text.adc_seq_start) for [Anonymous Symbol]
adc.o(.ARM.exidx.text.adc_seq_stop) refers to adc.o(.text.adc_seq_stop) for [Anonymous Symbol]
adc.o(.ARM.exidx.text.adc_get_channel_value) refers to adc.o(.text.adc_get_channel_value) for [Anonymous Symbol]
adc.o(.ARM.exidx.text.adc_sw_start) refers to adc.o(.text.adc_sw_start) for [Anonymous Symbol]
adc.o(.ARM.exidx.text.adc_seq_handler) refers to adc.o(.text.adc_seq_handler) for [Anonymous Symbol]
sysclk.o(.text.sysclk_init) refers to plib035_rcu.o(.text.RCU_PLL_AutoConfig) for RCU_PLL_AutoConfig
sysclk.o(.text.sysclk_init) refers to main.o(.text.Error_Handler) for Error_Handler
sysclk.o(.text.sysclk_init) refers to system_k1921vk035.o(.text.SystemCoreClockUpdate) for SystemCoreClockUpdate
sysclk.o(.ARM.exidx.text.sysclk_init) refers to sysclk.o(.text.sysclk_init) for [Anonymous Symbol]
sysclk.o(.text.millis) refers to sysclk.o(.bss.uwTick) for uwTick
sysclk.o(.ARM.exidx.text.millis) refers to sysclk.o(.text.millis) for [Anonymous Symbol]
sysclk.o(.text.millis_inc) refers to sysclk.o(.bss.uwTick) for uwTick
sysclk.o(.ARM.exidx.text.millis_inc) refers to sysclk.o(.text.millis_inc) for [Anonymous Symbol]
sysclk.o(.ARM.exidx.text.micros) refers to sysclk.o(.text.micros) for [Anonymous Symbol]
sysclk.o(.text.micros_inc) refers to sysclk.o(.bss.uwTick) for uwTick
sysclk.o(.ARM.exidx.text.micros_inc) refers to sysclk.o(.text.micros_inc) for [Anonymous Symbol]
sysclk.o(.text.rcu_set_clock_adc) refers to plib035_rcu.o(.text.RCU_GetOSEClkFreq) for RCU_GetOSEClkFreq
sysclk.o(.text.rcu_set_clock_adc) refers to plib035_rcu.o(.text.RCU_GetPLLClkFreq) for RCU_GetPLLClkFreq
sysclk.o(.text.rcu_set_clock_adc) refers to plib035_rcu.o(.text.RCU_GetPLLDivClkFreq) for RCU_GetPLLDivClkFreq
sysclk.o(.text.rcu_set_clock_adc) refers to plib035_rcu.o(.text.RCU_GetOSIClkFreq) for RCU_GetOSIClkFreq
sysclk.o(.ARM.exidx.text.rcu_set_clock_adc) refers to sysclk.o(.text.rcu_set_clock_adc) for [Anonymous Symbol]
vk035_it.o(.ARM.exidx.text.GPIOA_IRQHandler) refers to vk035_it.o(.text.GPIOA_IRQHandler) for [Anonymous Symbol]
vk035_it.o(.ARM.exidx.text.GPIOB_IRQHandler) refers to vk035_it.o(.text.GPIOB_IRQHandler) for [Anonymous Symbol]
vk035_it.o(.text.TMR0_IRQHandler) refers to tmr.o(.bss.htmr0) for htmr0
vk035_it.o(.text.TMR0_IRQHandler) refers to tmr.o(.text.tmr_handler) for tmr_handler
vk035_it.o(.ARM.exidx.text.TMR0_IRQHandler) refers to vk035_it.o(.text.TMR0_IRQHandler) for [Anonymous Symbol]
vk035_it.o(.text.TMR1_IRQHandler) refers to tmr.o(.bss.htmr1) for htmr1
vk035_it.o(.text.TMR1_IRQHandler) refers to tmr.o(.text.tmr_handler) for tmr_handler
vk035_it.o(.ARM.exidx.text.TMR1_IRQHandler) refers to vk035_it.o(.text.TMR1_IRQHandler) for [Anonymous Symbol]
vk035_it.o(.text.TMR2_IRQHandler) refers to tmr.o(.bss.htmr2) for htmr2
vk035_it.o(.text.TMR2_IRQHandler) refers to tmr.o(.text.tmr_handler) for tmr_handler
vk035_it.o(.ARM.exidx.text.TMR2_IRQHandler) refers to vk035_it.o(.text.TMR2_IRQHandler) for [Anonymous Symbol]
vk035_it.o(.text.TMR3_IRQHandler) refers to tmr.o(.bss.htmr3) for htmr3
vk035_it.o(.text.TMR3_IRQHandler) refers to tmr.o(.text.tmr_handler) for tmr_handler
vk035_it.o(.ARM.exidx.text.TMR3_IRQHandler) refers to vk035_it.o(.text.TMR3_IRQHandler) for [Anonymous Symbol]
vk035_it.o(.text.UART0_TD_IRQHandler) refers to uart.o(.bss.huart0) for huart0
vk035_it.o(.text.UART0_TD_IRQHandler) refers to uart.o(.text.uart_handler) for uart_handler
vk035_it.o(.ARM.exidx.text.UART0_TD_IRQHandler) refers to vk035_it.o(.text.UART0_TD_IRQHandler) for [Anonymous Symbol]
vk035_it.o(.text.UART0_RX_IRQHandler) refers to uart.o(.bss.huart0) for huart0
vk035_it.o(.text.UART0_RX_IRQHandler) refers to uart.o(.text.uart_handler) for uart_handler
vk035_it.o(.ARM.exidx.text.UART0_RX_IRQHandler) refers to vk035_it.o(.text.UART0_RX_IRQHandler) for [Anonymous Symbol]
vk035_it.o(.text.UART0_TX_IRQHandler) refers to uart.o(.bss.huart0) for huart0
vk035_it.o(.text.UART0_TX_IRQHandler) refers to uart.o(.text.uart_handler) for uart_handler
vk035_it.o(.ARM.exidx.text.UART0_TX_IRQHandler) refers to vk035_it.o(.text.UART0_TX_IRQHandler) for [Anonymous Symbol]
vk035_it.o(.text.UART0_E_RT_IRQHandler) refers to uart.o(.bss.huart0) for huart0
vk035_it.o(.text.UART0_E_RT_IRQHandler) refers to uart.o(.text.uart_handler) for uart_handler
vk035_it.o(.ARM.exidx.text.UART0_E_RT_IRQHandler) refers to vk035_it.o(.text.UART0_E_RT_IRQHandler) for [Anonymous Symbol]
vk035_it.o(.text.UART1_TD_IRQHandler) refers to uart.o(.bss.huart1) for huart1
vk035_it.o(.text.UART1_TD_IRQHandler) refers to uart.o(.text.uart_handler) for uart_handler
vk035_it.o(.ARM.exidx.text.UART1_TD_IRQHandler) refers to vk035_it.o(.text.UART1_TD_IRQHandler) for [Anonymous Symbol]
vk035_it.o(.text.UART1_RX_IRQHandler) refers to uart.o(.bss.huart1) for huart1
vk035_it.o(.text.UART1_RX_IRQHandler) refers to uart.o(.text.uart_handler) for uart_handler
vk035_it.o(.ARM.exidx.text.UART1_RX_IRQHandler) refers to vk035_it.o(.text.UART1_RX_IRQHandler) for [Anonymous Symbol]
vk035_it.o(.text.UART1_TX_IRQHandler) refers to uart.o(.bss.huart1) for huart1
vk035_it.o(.text.UART1_TX_IRQHandler) refers to uart.o(.text.uart_handler) for uart_handler
vk035_it.o(.ARM.exidx.text.UART1_TX_IRQHandler) refers to vk035_it.o(.text.UART1_TX_IRQHandler) for [Anonymous Symbol]
vk035_it.o(.text.UART1_E_RT_IRQHandler) refers to uart.o(.bss.huart1) for huart1
vk035_it.o(.text.UART1_E_RT_IRQHandler) refers to uart.o(.text.uart_handler) for uart_handler
vk035_it.o(.ARM.exidx.text.UART1_E_RT_IRQHandler) refers to vk035_it.o(.text.UART1_E_RT_IRQHandler) for [Anonymous Symbol]
vk035_it.o(.ARM.exidx.text.SPI_RO_RT_IRQHandler) refers to vk035_it.o(.text.SPI_RO_RT_IRQHandler) for [Anonymous Symbol]
vk035_it.o(.ARM.exidx.text.SPI_RX_IRQHandler) refers to vk035_it.o(.text.SPI_RX_IRQHandler) for [Anonymous Symbol]
vk035_it.o(.ARM.exidx.text.SPI_TX_IRQHandler) refers to vk035_it.o(.text.SPI_TX_IRQHandler) for [Anonymous Symbol]
vk035_it.o(.ARM.exidx.text.I2C_IRQHandler) refers to vk035_it.o(.text.I2C_IRQHandler) for [Anonymous Symbol]
vk035_it.o(.ARM.exidx.text.ECAP0_IRQHandler) refers to vk035_it.o(.text.ECAP0_IRQHandler) for [Anonymous Symbol]
vk035_it.o(.ARM.exidx.text.ECAP1_IRQHandler) refers to vk035_it.o(.text.ECAP1_IRQHandler) for [Anonymous Symbol]
vk035_it.o(.ARM.exidx.text.ECAP2_IRQHandler) refers to vk035_it.o(.text.ECAP2_IRQHandler) for [Anonymous Symbol]
vk035_it.o(.ARM.exidx.text.PWM0_IRQHandler) refers to vk035_it.o(.text.PWM0_IRQHandler) for [Anonymous Symbol]
vk035_it.o(.ARM.exidx.text.PWM0_HD_IRQHandler) refers to vk035_it.o(.text.PWM0_HD_IRQHandler) for [Anonymous Symbol]
vk035_it.o(.ARM.exidx.text.PWM0_TZ_IRQHandler) refers to vk035_it.o(.text.PWM0_TZ_IRQHandler) for [Anonymous Symbol]
vk035_it.o(.ARM.exidx.text.PWM1_IRQHandler) refers to vk035_it.o(.text.PWM1_IRQHandler) for [Anonymous Symbol]
vk035_it.o(.ARM.exidx.text.PWM1_HD_IRQHandler) refers to vk035_it.o(.text.PWM1_HD_IRQHandler) for [Anonymous Symbol]
vk035_it.o(.ARM.exidx.text.PWM1_TZ_IRQHandler) refers to vk035_it.o(.text.PWM1_TZ_IRQHandler) for [Anonymous Symbol]
vk035_it.o(.ARM.exidx.text.PWM2_IRQHandler) refers to vk035_it.o(.text.PWM2_IRQHandler) for [Anonymous Symbol]
vk035_it.o(.ARM.exidx.text.PWM2_HD_IRQHandler) refers to vk035_it.o(.text.PWM2_HD_IRQHandler) for [Anonymous Symbol]
vk035_it.o(.ARM.exidx.text.PWM2_TZ_IRQHandler) refers to vk035_it.o(.text.PWM2_TZ_IRQHandler) for [Anonymous Symbol]
vk035_it.o(.ARM.exidx.text.QEP_IRQHandler) refers to vk035_it.o(.text.QEP_IRQHandler) for [Anonymous Symbol]
vk035_it.o(.text.ADC_SEQ0_IRQHandler) refers to adc.o(.bss.hadc) for hadc
vk035_it.o(.text.ADC_SEQ0_IRQHandler) refers to adc.o(.text.adc_seq_handler) for adc_seq_handler
vk035_it.o(.ARM.exidx.text.ADC_SEQ0_IRQHandler) refers to vk035_it.o(.text.ADC_SEQ0_IRQHandler) for [Anonymous Symbol]
vk035_it.o(.text.ADC_SEQ1_IRQHandler) refers to adc.o(.bss.hadc) for hadc
vk035_it.o(.text.ADC_SEQ1_IRQHandler) refers to adc.o(.text.adc_seq_handler) for adc_seq_handler
vk035_it.o(.ARM.exidx.text.ADC_SEQ1_IRQHandler) refers to vk035_it.o(.text.ADC_SEQ1_IRQHandler) for [Anonymous Symbol]
vk035_it.o(.ARM.exidx.text.ADC_DC_IRQHandler) refers to vk035_it.o(.text.ADC_DC_IRQHandler) for [Anonymous Symbol]
vk035_it.o(.ARM.exidx.text.CAN0_IRQHandler) refers to vk035_it.o(.text.CAN0_IRQHandler) for [Anonymous Symbol]
vk035_it.o(.ARM.exidx.text.CAN1_IRQHandler) refers to vk035_it.o(.text.CAN1_IRQHandler) for [Anonymous Symbol]
vk035_it.o(.ARM.exidx.text.CAN2_IRQHandler) refers to vk035_it.o(.text.CAN2_IRQHandler) for [Anonymous Symbol]
vk035_it.o(.ARM.exidx.text.CAN3_IRQHandler) refers to vk035_it.o(.text.CAN3_IRQHandler) for [Anonymous Symbol]
vk035_it.o(.ARM.exidx.text.CAN4_IRQHandler) refers to vk035_it.o(.text.CAN4_IRQHandler) for [Anonymous Symbol]
vk035_it.o(.ARM.exidx.text.CAN5_IRQHandler) refers to vk035_it.o(.text.CAN5_IRQHandler) for [Anonymous Symbol]
vk035_it.o(.ARM.exidx.text.CAN6_IRQHandler) refers to vk035_it.o(.text.CAN6_IRQHandler) for [Anonymous Symbol]
vk035_it.o(.ARM.exidx.text.CAN7_IRQHandler) refers to vk035_it.o(.text.CAN7_IRQHandler) for [Anonymous Symbol]
vk035_it.o(.ARM.exidx.text.CAN8_IRQHandler) refers to vk035_it.o(.text.CAN8_IRQHandler) for [Anonymous Symbol]
vk035_it.o(.ARM.exidx.text.CAN9_IRQHandler) refers to vk035_it.o(.text.CAN9_IRQHandler) for [Anonymous Symbol]
vk035_it.o(.ARM.exidx.text.CAN10_IRQHandler) refers to vk035_it.o(.text.CAN10_IRQHandler) for [Anonymous Symbol]
vk035_it.o(.ARM.exidx.text.CAN11_IRQHandler) refers to vk035_it.o(.text.CAN11_IRQHandler) for [Anonymous Symbol]
vk035_it.o(.ARM.exidx.text.CAN12_IRQHandler) refers to vk035_it.o(.text.CAN12_IRQHandler) for [Anonymous Symbol]
vk035_it.o(.ARM.exidx.text.CAN13_IRQHandler) refers to vk035_it.o(.text.CAN13_IRQHandler) for [Anonymous Symbol]
vk035_it.o(.ARM.exidx.text.CAN14_IRQHandler) refers to vk035_it.o(.text.CAN14_IRQHandler) for [Anonymous Symbol]
vk035_it.o(.ARM.exidx.text.CAN15_IRQHandler) refers to vk035_it.o(.text.CAN15_IRQHandler) for [Anonymous Symbol]
vk035_it.o(.ARM.exidx.text.FPU_IRQHandler) refers to vk035_it.o(.text.FPU_IRQHandler) for [Anonymous Symbol]
vk035_it.o(.ARM.exidx.text.DMA_CH0_IRQHandler) refers to vk035_it.o(.text.DMA_CH0_IRQHandler) for [Anonymous Symbol]
vk035_it.o(.ARM.exidx.text.DMA_CH1_IRQHandler) refers to vk035_it.o(.text.DMA_CH1_IRQHandler) for [Anonymous Symbol]
vk035_it.o(.ARM.exidx.text.DMA_CH2_IRQHandler) refers to vk035_it.o(.text.DMA_CH2_IRQHandler) for [Anonymous Symbol]
vk035_it.o(.ARM.exidx.text.DMA_CH3_IRQHandler) refers to vk035_it.o(.text.DMA_CH3_IRQHandler) for [Anonymous Symbol]
vk035_it.o(.ARM.exidx.text.DMA_CH4_IRQHandler) refers to vk035_it.o(.text.DMA_CH4_IRQHandler) for [Anonymous Symbol]
vk035_it.o(.ARM.exidx.text.DMA_CH5_IRQHandler) refers to vk035_it.o(.text.DMA_CH5_IRQHandler) for [Anonymous Symbol]
vk035_it.o(.ARM.exidx.text.DMA_CH6_IRQHandler) refers to vk035_it.o(.text.DMA_CH6_IRQHandler) for [Anonymous Symbol]
vk035_it.o(.ARM.exidx.text.DMA_CH7_IRQHandler) refers to vk035_it.o(.text.DMA_CH7_IRQHandler) for [Anonymous Symbol]
vk035_it.o(.ARM.exidx.text.DMA_CH8_IRQHandler) refers to vk035_it.o(.text.DMA_CH8_IRQHandler) for [Anonymous Symbol]
vk035_it.o(.ARM.exidx.text.DMA_CH9_IRQHandler) refers to vk035_it.o(.text.DMA_CH9_IRQHandler) for [Anonymous Symbol]
vk035_it.o(.ARM.exidx.text.DMA_CH10_IRQHandler) refers to vk035_it.o(.text.DMA_CH10_IRQHandler) for [Anonymous Symbol]
vk035_it.o(.ARM.exidx.text.DMA_CH11_IRQHandler) refers to vk035_it.o(.text.DMA_CH11_IRQHandler) for [Anonymous Symbol]
vk035_it.o(.ARM.exidx.text.DMA_CH12_IRQHandler) refers to vk035_it.o(.text.DMA_CH12_IRQHandler) for [Anonymous Symbol]
vk035_it.o(.ARM.exidx.text.DMA_CH13_IRQHandler) refers to vk035_it.o(.text.DMA_CH13_IRQHandler) for [Anonymous Symbol]
vk035_it.o(.ARM.exidx.text.DMA_CH14_IRQHandler) refers to vk035_it.o(.text.DMA_CH14_IRQHandler) for [Anonymous Symbol]
vk035_it.o(.ARM.exidx.text.DMA_CH15_IRQHandler) refers to vk035_it.o(.text.DMA_CH15_IRQHandler) for [Anonymous Symbol]
vk035_it.o(.ARM.exidx.text.WDT_IRQHandler) refers to vk035_it.o(.text.WDT_IRQHandler) for [Anonymous Symbol]
vk035_it.o(.ARM.exidx.text.RCU_IRQHandler) refers to vk035_it.o(.text.RCU_IRQHandler) for [Anonymous Symbol]
vk035_it.o(.ARM.exidx.text.MFLASH_IRQHandler) refers to vk035_it.o(.text.MFLASH_IRQHandler) for [Anonymous Symbol]
vk035_it.o(.ARM.exidx.text.NMI_Handler) refers to vk035_it.o(.text.NMI_Handler) for [Anonymous Symbol]
vk035_it.o(.ARM.exidx.text.HardFault_Handler) refers to vk035_it.o(.text.HardFault_Handler) for [Anonymous Symbol]
vk035_it.o(.ARM.exidx.text.MemManage_Handler) refers to vk035_it.o(.text.MemManage_Handler) for [Anonymous Symbol]
vk035_it.o(.ARM.exidx.text.BusFault_Handler) refers to vk035_it.o(.text.BusFault_Handler) for [Anonymous Symbol]
vk035_it.o(.ARM.exidx.text.UsageFault_Handler) refers to vk035_it.o(.text.UsageFault_Handler) for [Anonymous Symbol]
vk035_it.o(.ARM.exidx.text.SVC_Handler) refers to vk035_it.o(.text.SVC_Handler) for [Anonymous Symbol]
vk035_it.o(.ARM.exidx.text.DebugMon_Handler) refers to vk035_it.o(.text.DebugMon_Handler) for [Anonymous Symbol]
vk035_it.o(.ARM.exidx.text.PendSV_Handler) refers to vk035_it.o(.text.PendSV_Handler) for [Anonymous Symbol]
vk035_it.o(.text.SysTick_Handler) refers to sysclk.o(.text.millis_inc) for millis_inc
vk035_it.o(.ARM.exidx.text.SysTick_Handler) refers to vk035_it.o(.text.SysTick_Handler) for [Anonymous Symbol]
segger_rtt.o(.text.SEGGER_RTT_ReadUpBufferNoLock) refers to segger_rtt.o(.bss._SEGGER_RTT) for _SEGGER_RTT
segger_rtt.o(.text.SEGGER_RTT_ReadUpBufferNoLock) refers to rt_memclr_w.o(.text) for __aeabi_memclr4
segger_rtt.o(.text.SEGGER_RTT_ReadUpBufferNoLock) refers to segger_rtt.o(.rodata.str1.1) for .L.str
segger_rtt.o(.text.SEGGER_RTT_ReadUpBufferNoLock) refers to segger_rtt.o(.bss._acUpBuffer) for _acUpBuffer
segger_rtt.o(.text.SEGGER_RTT_ReadUpBufferNoLock) refers to segger_rtt.o(.bss._acDownBuffer) for _acDownBuffer
segger_rtt.o(.text.SEGGER_RTT_ReadUpBufferNoLock) refers to segger_rtt.o(.rodata._DoInit._aInitStr) for _DoInit._aInitStr
segger_rtt.o(.text.SEGGER_RTT_ReadUpBufferNoLock) refers to rt_memcpy_v6.o(.text) for __aeabi_memcpy
segger_rtt.o(.ARM.exidx.text.SEGGER_RTT_ReadUpBufferNoLock) refers to segger_rtt.o(.text.SEGGER_RTT_ReadUpBufferNoLock) for [Anonymous Symbol]
segger_rtt.o(.text.SEGGER_RTT_ReadNoLock) refers to segger_rtt.o(.bss._SEGGER_RTT) for _SEGGER_RTT
segger_rtt.o(.text.SEGGER_RTT_ReadNoLock) refers to rt_memclr_w.o(.text) for __aeabi_memclr4
segger_rtt.o(.text.SEGGER_RTT_ReadNoLock) refers to segger_rtt.o(.rodata.str1.1) for .L.str
segger_rtt.o(.text.SEGGER_RTT_ReadNoLock) refers to segger_rtt.o(.bss._acUpBuffer) for _acUpBuffer
segger_rtt.o(.text.SEGGER_RTT_ReadNoLock) refers to segger_rtt.o(.bss._acDownBuffer) for _acDownBuffer
segger_rtt.o(.text.SEGGER_RTT_ReadNoLock) refers to segger_rtt.o(.rodata._DoInit._aInitStr) for _DoInit._aInitStr
segger_rtt.o(.text.SEGGER_RTT_ReadNoLock) refers to rt_memcpy_v6.o(.text) for __aeabi_memcpy
segger_rtt.o(.ARM.exidx.text.SEGGER_RTT_ReadNoLock) refers to segger_rtt.o(.text.SEGGER_RTT_ReadNoLock) for [Anonymous Symbol]
segger_rtt.o(.text.SEGGER_RTT_ReadUpBuffer) refers to segger_rtt.o(.text.SEGGER_RTT_ReadUpBufferNoLock) for SEGGER_RTT_ReadUpBufferNoLock
segger_rtt.o(.ARM.exidx.text.SEGGER_RTT_ReadUpBuffer) refers to segger_rtt.o(.text.SEGGER_RTT_ReadUpBuffer) for [Anonymous Symbol]
segger_rtt.o(.text.SEGGER_RTT_Read) refers to segger_rtt.o(.text.SEGGER_RTT_ReadNoLock) for SEGGER_RTT_ReadNoLock
segger_rtt.o(.ARM.exidx.text.SEGGER_RTT_Read) refers to segger_rtt.o(.text.SEGGER_RTT_Read) for [Anonymous Symbol]
segger_rtt.o(.text.SEGGER_RTT_WriteWithOverwriteNoLock) refers to segger_rtt.o(.bss._SEGGER_RTT) for _SEGGER_RTT
segger_rtt.o(.text.SEGGER_RTT_WriteWithOverwriteNoLock) refers to rt_memcpy_v6.o(.text) for __aeabi_memcpy
segger_rtt.o(.ARM.exidx.text.SEGGER_RTT_WriteWithOverwriteNoLock) refers to segger_rtt.o(.text.SEGGER_RTT_WriteWithOverwriteNoLock) for [Anonymous Symbol]
segger_rtt.o(.text.SEGGER_RTT_WriteDownBufferNoLock) refers to segger_rtt.o(.bss._SEGGER_RTT) for _SEGGER_RTT
segger_rtt.o(.text.SEGGER_RTT_WriteDownBufferNoLock) refers to rt_memcpy_v6.o(.text) for __aeabi_memcpy
segger_rtt.o(.ARM.exidx.text.SEGGER_RTT_WriteDownBufferNoLock) refers to segger_rtt.o(.text.SEGGER_RTT_WriteDownBufferNoLock) for [Anonymous Symbol]
segger_rtt.o(.text.SEGGER_RTT_WriteNoLock) refers to segger_rtt.o(.bss._SEGGER_RTT) for _SEGGER_RTT
segger_rtt.o(.text.SEGGER_RTT_WriteNoLock) refers to rt_memcpy_v6.o(.text) for __aeabi_memcpy
segger_rtt.o(.ARM.exidx.text.SEGGER_RTT_WriteNoLock) refers to segger_rtt.o(.text.SEGGER_RTT_WriteNoLock) for [Anonymous Symbol]
segger_rtt.o(.text.SEGGER_RTT_WriteDownBuffer) refers to segger_rtt.o(.bss._SEGGER_RTT) for _SEGGER_RTT
segger_rtt.o(.text.SEGGER_RTT_WriteDownBuffer) refers to rt_memclr_w.o(.text) for __aeabi_memclr4
segger_rtt.o(.text.SEGGER_RTT_WriteDownBuffer) refers to segger_rtt.o(.rodata.str1.1) for .L.str
segger_rtt.o(.text.SEGGER_RTT_WriteDownBuffer) refers to segger_rtt.o(.bss._acUpBuffer) for _acUpBuffer
segger_rtt.o(.text.SEGGER_RTT_WriteDownBuffer) refers to segger_rtt.o(.bss._acDownBuffer) for _acDownBuffer
segger_rtt.o(.text.SEGGER_RTT_WriteDownBuffer) refers to segger_rtt.o(.rodata._DoInit._aInitStr) for _DoInit._aInitStr
segger_rtt.o(.text.SEGGER_RTT_WriteDownBuffer) refers to segger_rtt.o(.text.SEGGER_RTT_WriteDownBufferNoLock) for SEGGER_RTT_WriteDownBufferNoLock
segger_rtt.o(.ARM.exidx.text.SEGGER_RTT_WriteDownBuffer) refers to segger_rtt.o(.text.SEGGER_RTT_WriteDownBuffer) for [Anonymous Symbol]
segger_rtt.o(.text.SEGGER_RTT_Write) refers to segger_rtt.o(.bss._SEGGER_RTT) for _SEGGER_RTT
segger_rtt.o(.text.SEGGER_RTT_Write) refers to rt_memclr_w.o(.text) for __aeabi_memclr4
segger_rtt.o(.text.SEGGER_RTT_Write) refers to segger_rtt.o(.rodata.str1.1) for .L.str
segger_rtt.o(.text.SEGGER_RTT_Write) refers to segger_rtt.o(.bss._acUpBuffer) for _acUpBuffer
segger_rtt.o(.text.SEGGER_RTT_Write) refers to segger_rtt.o(.bss._acDownBuffer) for _acDownBuffer
segger_rtt.o(.text.SEGGER_RTT_Write) refers to segger_rtt.o(.rodata._DoInit._aInitStr) for _DoInit._aInitStr
segger_rtt.o(.text.SEGGER_RTT_Write) refers to segger_rtt.o(.text.SEGGER_RTT_WriteNoLock) for SEGGER_RTT_WriteNoLock
segger_rtt.o(.ARM.exidx.text.SEGGER_RTT_Write) refers to segger_rtt.o(.text.SEGGER_RTT_Write) for [Anonymous Symbol]
segger_rtt.o(.text.SEGGER_RTT_WriteString) refers to strlen.o(.text) for strlen
segger_rtt.o(.text.SEGGER_RTT_WriteString) refers to segger_rtt.o(.bss._SEGGER_RTT) for _SEGGER_RTT
segger_rtt.o(.text.SEGGER_RTT_WriteString) refers to rt_memclr_w.o(.text) for __aeabi_memclr4
segger_rtt.o(.text.SEGGER_RTT_WriteString) refers to segger_rtt.o(.rodata.str1.1) for .L.str
segger_rtt.o(.text.SEGGER_RTT_WriteString) refers to segger_rtt.o(.bss._acUpBuffer) for _acUpBuffer
segger_rtt.o(.text.SEGGER_RTT_WriteString) refers to segger_rtt.o(.bss._acDownBuffer) for _acDownBuffer
segger_rtt.o(.text.SEGGER_RTT_WriteString) refers to segger_rtt.o(.rodata._DoInit._aInitStr) for _DoInit._aInitStr
segger_rtt.o(.text.SEGGER_RTT_WriteString) refers to segger_rtt.o(.text.SEGGER_RTT_WriteNoLock) for SEGGER_RTT_WriteNoLock
segger_rtt.o(.ARM.exidx.text.SEGGER_RTT_WriteString) refers to segger_rtt.o(.text.SEGGER_RTT_WriteString) for [Anonymous Symbol]
segger_rtt.o(.text.SEGGER_RTT_PutCharSkipNoLock) refers to segger_rtt.o(.bss._SEGGER_RTT) for _SEGGER_RTT
segger_rtt.o(.ARM.exidx.text.SEGGER_RTT_PutCharSkipNoLock) refers to segger_rtt.o(.text.SEGGER_RTT_PutCharSkipNoLock) for [Anonymous Symbol]
segger_rtt.o(.text.SEGGER_RTT_PutCharSkip) refers to segger_rtt.o(.bss._SEGGER_RTT) for _SEGGER_RTT
segger_rtt.o(.text.SEGGER_RTT_PutCharSkip) refers to rt_memclr_w.o(.text) for __aeabi_memclr4
segger_rtt.o(.text.SEGGER_RTT_PutCharSkip) refers to segger_rtt.o(.rodata.str1.1) for .L.str
segger_rtt.o(.text.SEGGER_RTT_PutCharSkip) refers to segger_rtt.o(.bss._acUpBuffer) for _acUpBuffer
segger_rtt.o(.text.SEGGER_RTT_PutCharSkip) refers to segger_rtt.o(.bss._acDownBuffer) for _acDownBuffer
segger_rtt.o(.text.SEGGER_RTT_PutCharSkip) refers to segger_rtt.o(.rodata._DoInit._aInitStr) for _DoInit._aInitStr
segger_rtt.o(.ARM.exidx.text.SEGGER_RTT_PutCharSkip) refers to segger_rtt.o(.text.SEGGER_RTT_PutCharSkip) for [Anonymous Symbol]
segger_rtt.o(.text.SEGGER_RTT_PutChar) refers to segger_rtt.o(.bss._SEGGER_RTT) for _SEGGER_RTT
segger_rtt.o(.text.SEGGER_RTT_PutChar) refers to rt_memclr_w.o(.text) for __aeabi_memclr4
segger_rtt.o(.text.SEGGER_RTT_PutChar) refers to segger_rtt.o(.rodata.str1.1) for .L.str
segger_rtt.o(.text.SEGGER_RTT_PutChar) refers to segger_rtt.o(.bss._acUpBuffer) for _acUpBuffer
segger_rtt.o(.text.SEGGER_RTT_PutChar) refers to segger_rtt.o(.bss._acDownBuffer) for _acDownBuffer
segger_rtt.o(.text.SEGGER_RTT_PutChar) refers to segger_rtt.o(.rodata._DoInit._aInitStr) for _DoInit._aInitStr
segger_rtt.o(.ARM.exidx.text.SEGGER_RTT_PutChar) refers to segger_rtt.o(.text.SEGGER_RTT_PutChar) for [Anonymous Symbol]
segger_rtt.o(.text.SEGGER_RTT_GetKey) refers to segger_rtt.o(.bss._SEGGER_RTT) for _SEGGER_RTT
segger_rtt.o(.text.SEGGER_RTT_GetKey) refers to rt_memclr_w.o(.text) for __aeabi_memclr4
segger_rtt.o(.text.SEGGER_RTT_GetKey) refers to segger_rtt.o(.rodata.str1.1) for .L.str
segger_rtt.o(.text.SEGGER_RTT_GetKey) refers to segger_rtt.o(.bss._acUpBuffer) for _acUpBuffer
segger_rtt.o(.text.SEGGER_RTT_GetKey) refers to segger_rtt.o(.bss._acDownBuffer) for _acDownBuffer
segger_rtt.o(.text.SEGGER_RTT_GetKey) refers to segger_rtt.o(.rodata._DoInit._aInitStr) for _DoInit._aInitStr
segger_rtt.o(.text.SEGGER_RTT_GetKey) refers to rt_memcpy_v6.o(.text) for __aeabi_memcpy
segger_rtt.o(.ARM.exidx.text.SEGGER_RTT_GetKey) refers to segger_rtt.o(.text.SEGGER_RTT_GetKey) for [Anonymous Symbol]
segger_rtt.o(.text.SEGGER_RTT_WaitKey) refers to segger_rtt.o(.text.SEGGER_RTT_GetKey) for SEGGER_RTT_GetKey
segger_rtt.o(.ARM.exidx.text.SEGGER_RTT_WaitKey) refers to segger_rtt.o(.text.SEGGER_RTT_WaitKey) for [Anonymous Symbol]
segger_rtt.o(.text.SEGGER_RTT_HasKey) refers to segger_rtt.o(.bss._SEGGER_RTT) for _SEGGER_RTT
segger_rtt.o(.text.SEGGER_RTT_HasKey) refers to rt_memclr_w.o(.text) for __aeabi_memclr4
segger_rtt.o(.text.SEGGER_RTT_HasKey) refers to segger_rtt.o(.rodata.str1.1) for .L.str
segger_rtt.o(.text.SEGGER_RTT_HasKey) refers to segger_rtt.o(.bss._acUpBuffer) for _acUpBuffer
segger_rtt.o(.text.SEGGER_RTT_HasKey) refers to segger_rtt.o(.bss._acDownBuffer) for _acDownBuffer
segger_rtt.o(.text.SEGGER_RTT_HasKey) refers to segger_rtt.o(.rodata._DoInit._aInitStr) for _DoInit._aInitStr
segger_rtt.o(.ARM.exidx.text.SEGGER_RTT_HasKey) refers to segger_rtt.o(.text.SEGGER_RTT_HasKey) for [Anonymous Symbol]
segger_rtt.o(.text.SEGGER_RTT_HasData) refers to segger_rtt.o(.bss._SEGGER_RTT) for _SEGGER_RTT
segger_rtt.o(.ARM.exidx.text.SEGGER_RTT_HasData) refers to segger_rtt.o(.text.SEGGER_RTT_HasData) for [Anonymous Symbol]
segger_rtt.o(.text.SEGGER_RTT_HasDataUp) refers to segger_rtt.o(.bss._SEGGER_RTT) for _SEGGER_RTT
segger_rtt.o(.ARM.exidx.text.SEGGER_RTT_HasDataUp) refers to segger_rtt.o(.text.SEGGER_RTT_HasDataUp) for [Anonymous Symbol]
segger_rtt.o(.text.SEGGER_RTT_AllocDownBuffer) refers to segger_rtt.o(.bss._SEGGER_RTT) for _SEGGER_RTT
segger_rtt.o(.text.SEGGER_RTT_AllocDownBuffer) refers to rt_memclr_w.o(.text) for __aeabi_memclr4
segger_rtt.o(.text.SEGGER_RTT_AllocDownBuffer) refers to segger_rtt.o(.rodata.str1.1) for .L.str
segger_rtt.o(.text.SEGGER_RTT_AllocDownBuffer) refers to segger_rtt.o(.bss._acUpBuffer) for _acUpBuffer
segger_rtt.o(.text.SEGGER_RTT_AllocDownBuffer) refers to segger_rtt.o(.bss._acDownBuffer) for _acDownBuffer
segger_rtt.o(.text.SEGGER_RTT_AllocDownBuffer) refers to segger_rtt.o(.rodata._DoInit._aInitStr) for _DoInit._aInitStr
segger_rtt.o(.ARM.exidx.text.SEGGER_RTT_AllocDownBuffer) refers to segger_rtt.o(.text.SEGGER_RTT_AllocDownBuffer) for [Anonymous Symbol]
segger_rtt.o(.text.SEGGER_RTT_AllocUpBuffer) refers to segger_rtt.o(.bss._SEGGER_RTT) for _SEGGER_RTT
segger_rtt.o(.text.SEGGER_RTT_AllocUpBuffer) refers to rt_memclr_w.o(.text) for __aeabi_memclr4
segger_rtt.o(.text.SEGGER_RTT_AllocUpBuffer) refers to segger_rtt.o(.rodata.str1.1) for .L.str
segger_rtt.o(.text.SEGGER_RTT_AllocUpBuffer) refers to segger_rtt.o(.bss._acUpBuffer) for _acUpBuffer
segger_rtt.o(.text.SEGGER_RTT_AllocUpBuffer) refers to segger_rtt.o(.bss._acDownBuffer) for _acDownBuffer
segger_rtt.o(.text.SEGGER_RTT_AllocUpBuffer) refers to segger_rtt.o(.rodata._DoInit._aInitStr) for _DoInit._aInitStr
segger_rtt.o(.ARM.exidx.text.SEGGER_RTT_AllocUpBuffer) refers to segger_rtt.o(.text.SEGGER_RTT_AllocUpBuffer) for [Anonymous Symbol]
segger_rtt.o(.text.SEGGER_RTT_ConfigUpBuffer) refers to segger_rtt.o(.bss._SEGGER_RTT) for _SEGGER_RTT
segger_rtt.o(.text.SEGGER_RTT_ConfigUpBuffer) refers to rt_memclr_w.o(.text) for __aeabi_memclr4
segger_rtt.o(.text.SEGGER_RTT_ConfigUpBuffer) refers to segger_rtt.o(.rodata.str1.1) for .L.str
segger_rtt.o(.text.SEGGER_RTT_ConfigUpBuffer) refers to segger_rtt.o(.bss._acUpBuffer) for _acUpBuffer
segger_rtt.o(.text.SEGGER_RTT_ConfigUpBuffer) refers to segger_rtt.o(.bss._acDownBuffer) for _acDownBuffer
segger_rtt.o(.text.SEGGER_RTT_ConfigUpBuffer) refers to segger_rtt.o(.rodata._DoInit._aInitStr) for _DoInit._aInitStr
segger_rtt.o(.ARM.exidx.text.SEGGER_RTT_ConfigUpBuffer) refers to segger_rtt.o(.text.SEGGER_RTT_ConfigUpBuffer) for [Anonymous Symbol]
segger_rtt.o(.text.SEGGER_RTT_ConfigDownBuffer) refers to segger_rtt.o(.bss._SEGGER_RTT) for _SEGGER_RTT
segger_rtt.o(.text.SEGGER_RTT_ConfigDownBuffer) refers to rt_memclr_w.o(.text) for __aeabi_memclr4
segger_rtt.o(.text.SEGGER_RTT_ConfigDownBuffer) refers to segger_rtt.o(.rodata.str1.1) for .L.str
segger_rtt.o(.text.SEGGER_RTT_ConfigDownBuffer) refers to segger_rtt.o(.bss._acUpBuffer) for _acUpBuffer
segger_rtt.o(.text.SEGGER_RTT_ConfigDownBuffer) refers to segger_rtt.o(.bss._acDownBuffer) for _acDownBuffer
segger_rtt.o(.text.SEGGER_RTT_ConfigDownBuffer) refers to segger_rtt.o(.rodata._DoInit._aInitStr) for _DoInit._aInitStr
segger_rtt.o(.ARM.exidx.text.SEGGER_RTT_ConfigDownBuffer) refers to segger_rtt.o(.text.SEGGER_RTT_ConfigDownBuffer) for [Anonymous Symbol]
segger_rtt.o(.text.SEGGER_RTT_SetNameUpBuffer) refers to segger_rtt.o(.bss._SEGGER_RTT) for _SEGGER_RTT
segger_rtt.o(.text.SEGGER_RTT_SetNameUpBuffer) refers to rt_memclr_w.o(.text) for __aeabi_memclr4
segger_rtt.o(.text.SEGGER_RTT_SetNameUpBuffer) refers to segger_rtt.o(.rodata.str1.1) for .L.str
segger_rtt.o(.text.SEGGER_RTT_SetNameUpBuffer) refers to segger_rtt.o(.bss._acUpBuffer) for _acUpBuffer
segger_rtt.o(.text.SEGGER_RTT_SetNameUpBuffer) refers to segger_rtt.o(.bss._acDownBuffer) for _acDownBuffer
segger_rtt.o(.text.SEGGER_RTT_SetNameUpBuffer) refers to segger_rtt.o(.rodata._DoInit._aInitStr) for _DoInit._aInitStr
segger_rtt.o(.ARM.exidx.text.SEGGER_RTT_SetNameUpBuffer) refers to segger_rtt.o(.text.SEGGER_RTT_SetNameUpBuffer) for [Anonymous Symbol]
segger_rtt.o(.text.SEGGER_RTT_SetNameDownBuffer) refers to segger_rtt.o(.bss._SEGGER_RTT) for _SEGGER_RTT
segger_rtt.o(.text.SEGGER_RTT_SetNameDownBuffer) refers to rt_memclr_w.o(.text) for __aeabi_memclr4
segger_rtt.o(.text.SEGGER_RTT_SetNameDownBuffer) refers to segger_rtt.o(.rodata.str1.1) for .L.str
segger_rtt.o(.text.SEGGER_RTT_SetNameDownBuffer) refers to segger_rtt.o(.bss._acUpBuffer) for _acUpBuffer
segger_rtt.o(.text.SEGGER_RTT_SetNameDownBuffer) refers to segger_rtt.o(.bss._acDownBuffer) for _acDownBuffer
segger_rtt.o(.text.SEGGER_RTT_SetNameDownBuffer) refers to segger_rtt.o(.rodata._DoInit._aInitStr) for _DoInit._aInitStr
segger_rtt.o(.ARM.exidx.text.SEGGER_RTT_SetNameDownBuffer) refers to segger_rtt.o(.text.SEGGER_RTT_SetNameDownBuffer) for [Anonymous Symbol]
segger_rtt.o(.text.SEGGER_RTT_SetFlagsUpBuffer) refers to segger_rtt.o(.bss._SEGGER_RTT) for _SEGGER_RTT
segger_rtt.o(.text.SEGGER_RTT_SetFlagsUpBuffer) refers to rt_memclr_w.o(.text) for __aeabi_memclr4
segger_rtt.o(.text.SEGGER_RTT_SetFlagsUpBuffer) refers to segger_rtt.o(.rodata.str1.1) for .L.str
segger_rtt.o(.text.SEGGER_RTT_SetFlagsUpBuffer) refers to segger_rtt.o(.bss._acUpBuffer) for _acUpBuffer
segger_rtt.o(.text.SEGGER_RTT_SetFlagsUpBuffer) refers to segger_rtt.o(.bss._acDownBuffer) for _acDownBuffer
segger_rtt.o(.text.SEGGER_RTT_SetFlagsUpBuffer) refers to segger_rtt.o(.rodata._DoInit._aInitStr) for _DoInit._aInitStr
segger_rtt.o(.ARM.exidx.text.SEGGER_RTT_SetFlagsUpBuffer) refers to segger_rtt.o(.text.SEGGER_RTT_SetFlagsUpBuffer) for [Anonymous Symbol]
segger_rtt.o(.text.SEGGER_RTT_SetFlagsDownBuffer) refers to segger_rtt.o(.bss._SEGGER_RTT) for _SEGGER_RTT
segger_rtt.o(.text.SEGGER_RTT_SetFlagsDownBuffer) refers to rt_memclr_w.o(.text) for __aeabi_memclr4
segger_rtt.o(.text.SEGGER_RTT_SetFlagsDownBuffer) refers to segger_rtt.o(.rodata.str1.1) for .L.str
segger_rtt.o(.text.SEGGER_RTT_SetFlagsDownBuffer) refers to segger_rtt.o(.bss._acUpBuffer) for _acUpBuffer
segger_rtt.o(.text.SEGGER_RTT_SetFlagsDownBuffer) refers to segger_rtt.o(.bss._acDownBuffer) for _acDownBuffer
segger_rtt.o(.text.SEGGER_RTT_SetFlagsDownBuffer) refers to segger_rtt.o(.rodata._DoInit._aInitStr) for _DoInit._aInitStr
segger_rtt.o(.ARM.exidx.text.SEGGER_RTT_SetFlagsDownBuffer) refers to segger_rtt.o(.text.SEGGER_RTT_SetFlagsDownBuffer) for [Anonymous Symbol]
segger_rtt.o(.text.SEGGER_RTT_Init) refers to segger_rtt.o(.bss._SEGGER_RTT) for _SEGGER_RTT
segger_rtt.o(.text.SEGGER_RTT_Init) refers to rt_memclr_w.o(.text) for __aeabi_memclr4
segger_rtt.o(.text.SEGGER_RTT_Init) refers to segger_rtt.o(.rodata.str1.1) for .L.str
segger_rtt.o(.text.SEGGER_RTT_Init) refers to segger_rtt.o(.bss._acUpBuffer) for _acUpBuffer
segger_rtt.o(.text.SEGGER_RTT_Init) refers to segger_rtt.o(.bss._acDownBuffer) for _acDownBuffer
segger_rtt.o(.text.SEGGER_RTT_Init) refers to segger_rtt.o(.rodata._DoInit._aInitStr) for _DoInit._aInitStr
segger_rtt.o(.ARM.exidx.text.SEGGER_RTT_Init) refers to segger_rtt.o(.text.SEGGER_RTT_Init) for [Anonymous Symbol]
segger_rtt.o(.text.SEGGER_RTT_SetTerminal) refers to segger_rtt.o(.bss._SEGGER_RTT) for _SEGGER_RTT
segger_rtt.o(.text.SEGGER_RTT_SetTerminal) refers to rt_memclr_w.o(.text) for __aeabi_memclr4
segger_rtt.o(.text.SEGGER_RTT_SetTerminal) refers to segger_rtt.o(.rodata.str1.1) for .L.str
segger_rtt.o(.text.SEGGER_RTT_SetTerminal) refers to segger_rtt.o(.bss._acUpBuffer) for _acUpBuffer
segger_rtt.o(.text.SEGGER_RTT_SetTerminal) refers to segger_rtt.o(.bss._acDownBuffer) for _acDownBuffer
segger_rtt.o(.text.SEGGER_RTT_SetTerminal) refers to segger_rtt.o(.rodata._DoInit._aInitStr) for _DoInit._aInitStr
segger_rtt.o(.text.SEGGER_RTT_SetTerminal) refers to segger_rtt.o(.rodata.cst16) for _aTerminalId
segger_rtt.o(.text.SEGGER_RTT_SetTerminal) refers to segger_rtt.o(.bss._ActiveTerminal) for _ActiveTerminal
segger_rtt.o(.text.SEGGER_RTT_SetTerminal) refers to rt_memcpy_v6.o(.text) for __aeabi_memcpy
segger_rtt.o(.ARM.exidx.text.SEGGER_RTT_SetTerminal) refers to segger_rtt.o(.text.SEGGER_RTT_SetTerminal) for [Anonymous Symbol]
segger_rtt.o(.text.SEGGER_RTT_TerminalOut) refers to segger_rtt.o(.bss._SEGGER_RTT) for _SEGGER_RTT
segger_rtt.o(.text.SEGGER_RTT_TerminalOut) refers to rt_memclr_w.o(.text) for __aeabi_memclr4
segger_rtt.o(.text.SEGGER_RTT_TerminalOut) refers to segger_rtt.o(.rodata.str1.1) for .L.str
segger_rtt.o(.text.SEGGER_RTT_TerminalOut) refers to segger_rtt.o(.bss._acUpBuffer) for _acUpBuffer
segger_rtt.o(.text.SEGGER_RTT_TerminalOut) refers to segger_rtt.o(.bss._acDownBuffer) for _acDownBuffer
segger_rtt.o(.text.SEGGER_RTT_TerminalOut) refers to segger_rtt.o(.rodata._DoInit._aInitStr) for _DoInit._aInitStr
segger_rtt.o(.text.SEGGER_RTT_TerminalOut) refers to strlen.o(.text) for strlen
segger_rtt.o(.text.SEGGER_RTT_TerminalOut) refers to segger_rtt.o(.rodata.cst16) for _aTerminalId
segger_rtt.o(.text.SEGGER_RTT_TerminalOut) refers to rt_memcpy_v6.o(.text) for __aeabi_memcpy
segger_rtt.o(.text.SEGGER_RTT_TerminalOut) refers to segger_rtt.o(.bss._ActiveTerminal) for _ActiveTerminal
segger_rtt.o(.ARM.exidx.text.SEGGER_RTT_TerminalOut) refers to segger_rtt.o(.text.SEGGER_RTT_TerminalOut) for [Anonymous Symbol]
segger_rtt.o(.text.SEGGER_RTT_GetAvailWriteSpace) refers to segger_rtt.o(.bss._SEGGER_RTT) for _SEGGER_RTT
segger_rtt.o(.ARM.exidx.text.SEGGER_RTT_GetAvailWriteSpace) refers to segger_rtt.o(.text.SEGGER_RTT_GetAvailWriteSpace) for [Anonymous Symbol]
segger_rtt.o(.text.SEGGER_RTT_GetBytesInBuffer) refers to segger_rtt.o(.bss._SEGGER_RTT) for _SEGGER_RTT
segger_rtt.o(.ARM.exidx.text.SEGGER_RTT_GetBytesInBuffer) refers to segger_rtt.o(.text.SEGGER_RTT_GetBytesInBuffer) for [Anonymous Symbol]
segger_rtt_printf.o(.text.SEGGER_RTT_vprintf) refers to segger_rtt.o(.text.SEGGER_RTT_Write) for SEGGER_RTT_Write
segger_rtt_printf.o(.text.SEGGER_RTT_vprintf) refers to segger_rtt_printf.o(.text._PrintUnsigned) for _PrintUnsigned
segger_rtt_printf.o(.ARM.exidx.text.SEGGER_RTT_vprintf) refers to segger_rtt_printf.o(.text.SEGGER_RTT_vprintf) for [Anonymous Symbol]
segger_rtt_printf.o(.text._PrintUnsigned) refers to segger_rtt.o(.text.SEGGER_RTT_Write) for SEGGER_RTT_Write
segger_rtt_printf.o(.ARM.exidx.text._PrintUnsigned) refers to segger_rtt_printf.o(.text._PrintUnsigned) for [Anonymous Symbol]
segger_rtt_printf.o(.text.SEGGER_RTT_printf) refers to segger_rtt_printf.o(.text.SEGGER_RTT_vprintf) for SEGGER_RTT_vprintf
segger_rtt_printf.o(.ARM.exidx.text.SEGGER_RTT_printf) refers to segger_rtt_printf.o(.text.SEGGER_RTT_printf) for [Anonymous Symbol]
filters.o(.text.FilterMedian_Init) refers to filters.o(.text.FilterMedian_Process) for FilterMedian_Process
filters.o(.ARM.exidx.text.FilterMedian_Init) refers to filters.o(.text.FilterMedian_Init) for [Anonymous Symbol]
filters.o(.text.FilterMedian_Process) refers to filters.o(.text.Filter_float_compare) for Filter_float_compare
filters.o(.text.FilterMedian_Process) refers to qsortnoex.o(.text) for qsort
filters.o(.ARM.exidx.text.FilterMedian_Process) refers to filters.o(.text.FilterMedian_Process) for [Anonymous Symbol]
filters.o(.ARM.exidx.text.Filter_float_compare) refers to filters.o(.text.Filter_float_compare) for [Anonymous Symbol]
filters.o(.text.FilterExp_Init) refers to filters.o(.text.FilterExp_Process) for FilterExp_Process
filters.o(.ARM.exidx.text.FilterExp_Init) refers to filters.o(.text.FilterExp_Init) for [Anonymous Symbol]
filters.o(.ARM.exidx.text.FilterExp_Process) refers to filters.o(.text.FilterExp_Process) for [Anonymous Symbol]
filters.o(.text.FilterAverage_Init) refers to filters.o(.text.FilterAverage_Process) for FilterAverage_Process
filters.o(.ARM.exidx.text.FilterAverage_Init) refers to filters.o(.text.FilterAverage_Init) for [Anonymous Symbol]
filters.o(.ARM.exidx.text.FilterAverage_Process) refers to filters.o(.text.FilterAverage_Process) for [Anonymous Symbol]
filters.o(.text.FilterPoly_Init) refers to rt_memcpy_w.o(.text) for __aeabi_memcpy4
filters.o(.text.FilterPoly_Init) refers to filters.o(.text.FilterPoly_Process) for FilterPoly_Process
filters.o(.ARM.exidx.text.FilterPoly_Init) refers to filters.o(.text.FilterPoly_Init) for [Anonymous Symbol]
filters.o(.ARM.exidx.text.FilterPoly_Process) refers to filters.o(.text.FilterPoly_Process) for [Anonymous Symbol]
filters.o(.text.FilterLUT_Init) refers to filters.o(.text.FilterLUT_Process) for FilterLUT_Process
filters.o(.ARM.exidx.text.FilterLUT_Init) refers to filters.o(.text.FilterLUT_Init) for [Anonymous Symbol]
filters.o(.ARM.exidx.text.FilterLUT_Process) refers to filters.o(.text.FilterLUT_Process) for [Anonymous Symbol]
filters.o(.text.FilterRMS_Init) refers to rt_memclr_w.o(.text) for __aeabi_memclr4
filters.o(.text.FilterRMS_Init) refers to filters.o(.text.FilterRMS_Process) for FilterRMS_Process
filters.o(.ARM.exidx.text.FilterRMS_Init) refers to filters.o(.text.FilterRMS_Init) for [Anonymous Symbol]
filters.o(.ARM.exidx.text.FilterRMS_Process) refers to filters.o(.text.FilterRMS_Process) for [Anonymous Symbol]
filters.o(.text.FilterMedianInt_Init) refers to filters.o(.text.FilterMedianInt_Process) for FilterMedianInt_Process
filters.o(.ARM.exidx.text.FilterMedianInt_Init) refers to filters.o(.text.FilterMedianInt_Init) for [Anonymous Symbol]
filters.o(.ARM.exidx.text.FilterMedianInt_Process) refers to filters.o(.text.FilterMedianInt_Process) for [Anonymous Symbol]
filters.o(.text.FilterExpInt_Init) refers to filters.o(.text.FilterExpInt_Process) for FilterExpInt_Process
filters.o(.ARM.exidx.text.FilterExpInt_Init) refers to filters.o(.text.FilterExpInt_Init) for [Anonymous Symbol]
filters.o(.text.FilterExpInt_Process) refers to llsdiv.o(.text) for __aeabi_ldivmod
filters.o(.ARM.exidx.text.FilterExpInt_Process) refers to filters.o(.text.FilterExpInt_Process) for [Anonymous Symbol]
filters.o(.text.FilterAverageInt_Init) refers to filters.o(.text.FilterAverageInt_Process) for FilterAverageInt_Process
filters.o(.ARM.exidx.text.FilterAverageInt_Init) refers to filters.o(.text.FilterAverageInt_Init) for [Anonymous Symbol]
filters.o(.text.FilterAverageInt_Process) refers to llsdiv.o(.text) for __aeabi_ldivmod
filters.o(.ARM.exidx.text.FilterAverageInt_Process) refers to filters.o(.text.FilterAverageInt_Process) for [Anonymous Symbol]
filters.o(.text.FilterPolyInt_Init) refers to rt_memcpy_w.o(.text) for __aeabi_memcpy4
filters.o(.text.FilterPolyInt_Init) refers to filters.o(.text.FilterPolyInt_Process) for FilterPolyInt_Process
filters.o(.ARM.exidx.text.FilterPolyInt_Init) refers to filters.o(.text.FilterPolyInt_Init) for [Anonymous Symbol]
filters.o(.text.FilterPolyInt_Process) refers to llsdiv.o(.text) for __aeabi_ldivmod
filters.o(.ARM.exidx.text.FilterPolyInt_Process) refers to filters.o(.text.FilterPolyInt_Process) for [Anonymous Symbol]
filters.o(.text.FilterLUTInt_Init) refers to filters.o(.text.FilterLUTInt_Process) for FilterLUTInt_Process
filters.o(.ARM.exidx.text.FilterLUTInt_Init) refers to filters.o(.text.FilterLUTInt_Init) for [Anonymous Symbol]
filters.o(.text.FilterLUTInt_Process) refers to llsdiv.o(.text) for __aeabi_ldivmod
filters.o(.ARM.exidx.text.FilterLUTInt_Process) refers to filters.o(.text.FilterLUTInt_Process) for [Anonymous Symbol]
filters.o(.text.FilterRMSInt_Init) refers to rt_memclr_w.o(.text) for __aeabi_memclr8
filters.o(.text.FilterRMSInt_Init) refers to filters.o(.text.FilterRMSInt_Process) for FilterRMSInt_Process
filters.o(.ARM.exidx.text.FilterRMSInt_Init) refers to filters.o(.text.FilterRMSInt_Init) for [Anonymous Symbol]
filters.o(.text.FilterRMSInt_Process) refers to llsdiv.o(.text) for __aeabi_ldivmod
filters.o(.text.FilterRMSInt_Process) refers to ffltll_clz.o(x$fpl$ffltll) for __aeabi_l2f
filters.o(.ARM.exidx.text.FilterRMSInt_Process) refers to filters.o(.text.FilterRMSInt_Process) for [Anonymous Symbol]
filters.o(.text.FilterBandPassDerivative_Init) refers to sinf.o(i.__hardfp_sinf) for __hardfp_sinf
filters.o(.text.FilterBandPassDerivative_Init) refers to cosf.o(i.__hardfp_cosf) for __hardfp_cosf
filters.o(.text.FilterBandPassDerivative_Init) refers to filters.o(.text.FilterBandPassDerivative_Process) for FilterBandPassDerivative_Process
filters.o(.ARM.exidx.text.FilterBandPassDerivative_Init) refers to filters.o(.text.FilterBandPassDerivative_Init) for [Anonymous Symbol]
filters.o(.ARM.exidx.text.FilterBandPassDerivative_Process) refers to filters.o(.text.FilterBandPassDerivative_Process) for [Anonymous Symbol]
system_k1921vk035.o(.text.SystemCoreClockUpdate) refers to system_k1921vk035.o(.bss.SystemCoreClock) for SystemCoreClock
system_k1921vk035.o(.ARM.exidx.text.SystemCoreClockUpdate) refers to system_k1921vk035.o(.text.SystemCoreClockUpdate) for [Anonymous Symbol]
system_k1921vk035.o(.ARM.exidx.text.ClkInit) refers to system_k1921vk035.o(.text.ClkInit) for [Anonymous Symbol]
system_k1921vk035.o(.ARM.exidx.text.FPUInit) refers to system_k1921vk035.o(.text.FPUInit) for [Anonymous Symbol]
system_k1921vk035.o(.ARM.exidx.text.SystemInit) refers to system_k1921vk035.o(.text.SystemInit) for [Anonymous Symbol]
startup_k1921vk035.o(STACK) refers (Special) to heapauxi.o(.text) for __use_two_region_memory
startup_k1921vk035.o(HEAP) refers (Special) to heapauxi.o(.text) for __use_two_region_memory
startup_k1921vk035.o(RESET) refers (Special) to heapauxi.o(.text) for __use_two_region_memory
startup_k1921vk035.o(RESET) refers to startup_k1921vk035.o(STACK) for __initial_sp
startup_k1921vk035.o(RESET) refers to startup_k1921vk035.o(.text) for Reset_Handler
startup_k1921vk035.o(RESET) refers to vk035_it.o(.text.NMI_Handler) for NMI_Handler
startup_k1921vk035.o(RESET) refers to vk035_it.o(.text.HardFault_Handler) for HardFault_Handler
startup_k1921vk035.o(RESET) refers to vk035_it.o(.text.MemManage_Handler) for MemManage_Handler
startup_k1921vk035.o(RESET) refers to vk035_it.o(.text.BusFault_Handler) for BusFault_Handler
startup_k1921vk035.o(RESET) refers to vk035_it.o(.text.UsageFault_Handler) for UsageFault_Handler
startup_k1921vk035.o(RESET) refers to vk035_it.o(.text.SVC_Handler) for SVC_Handler
startup_k1921vk035.o(RESET) refers to vk035_it.o(.text.DebugMon_Handler) for DebugMon_Handler
startup_k1921vk035.o(RESET) refers to vk035_it.o(.text.PendSV_Handler) for PendSV_Handler
startup_k1921vk035.o(RESET) refers to vk035_it.o(.text.SysTick_Handler) for SysTick_Handler
startup_k1921vk035.o(RESET) refers to vk035_it.o(.text.WDT_IRQHandler) for WDT_IRQHandler
startup_k1921vk035.o(RESET) refers to vk035_it.o(.text.RCU_IRQHandler) for RCU_IRQHandler
startup_k1921vk035.o(RESET) refers to vk035_it.o(.text.MFLASH_IRQHandler) for MFLASH_IRQHandler
startup_k1921vk035.o(RESET) refers to vk035_it.o(.text.GPIOA_IRQHandler) for GPIOA_IRQHandler
startup_k1921vk035.o(RESET) refers to vk035_it.o(.text.GPIOB_IRQHandler) for GPIOB_IRQHandler
startup_k1921vk035.o(RESET) refers to vk035_it.o(.text.DMA_CH0_IRQHandler) for DMA_CH0_IRQHandler
startup_k1921vk035.o(RESET) refers to vk035_it.o(.text.DMA_CH1_IRQHandler) for DMA_CH1_IRQHandler
startup_k1921vk035.o(RESET) refers to vk035_it.o(.text.DMA_CH2_IRQHandler) for DMA_CH2_IRQHandler
startup_k1921vk035.o(RESET) refers to vk035_it.o(.text.DMA_CH3_IRQHandler) for DMA_CH3_IRQHandler
startup_k1921vk035.o(RESET) refers to vk035_it.o(.text.DMA_CH4_IRQHandler) for DMA_CH4_IRQHandler
startup_k1921vk035.o(RESET) refers to vk035_it.o(.text.DMA_CH5_IRQHandler) for DMA_CH5_IRQHandler
startup_k1921vk035.o(RESET) refers to vk035_it.o(.text.DMA_CH6_IRQHandler) for DMA_CH6_IRQHandler
startup_k1921vk035.o(RESET) refers to vk035_it.o(.text.DMA_CH7_IRQHandler) for DMA_CH7_IRQHandler
startup_k1921vk035.o(RESET) refers to vk035_it.o(.text.DMA_CH8_IRQHandler) for DMA_CH8_IRQHandler
startup_k1921vk035.o(RESET) refers to vk035_it.o(.text.DMA_CH9_IRQHandler) for DMA_CH9_IRQHandler
startup_k1921vk035.o(RESET) refers to vk035_it.o(.text.DMA_CH10_IRQHandler) for DMA_CH10_IRQHandler
startup_k1921vk035.o(RESET) refers to vk035_it.o(.text.DMA_CH11_IRQHandler) for DMA_CH11_IRQHandler
startup_k1921vk035.o(RESET) refers to vk035_it.o(.text.DMA_CH12_IRQHandler) for DMA_CH12_IRQHandler
startup_k1921vk035.o(RESET) refers to vk035_it.o(.text.DMA_CH13_IRQHandler) for DMA_CH13_IRQHandler
startup_k1921vk035.o(RESET) refers to vk035_it.o(.text.DMA_CH14_IRQHandler) for DMA_CH14_IRQHandler
startup_k1921vk035.o(RESET) refers to vk035_it.o(.text.DMA_CH15_IRQHandler) for DMA_CH15_IRQHandler
startup_k1921vk035.o(RESET) refers to vk035_it.o(.text.TMR0_IRQHandler) for TMR0_IRQHandler
startup_k1921vk035.o(RESET) refers to vk035_it.o(.text.TMR1_IRQHandler) for TMR1_IRQHandler
startup_k1921vk035.o(RESET) refers to vk035_it.o(.text.TMR2_IRQHandler) for TMR2_IRQHandler
startup_k1921vk035.o(RESET) refers to vk035_it.o(.text.TMR3_IRQHandler) for TMR3_IRQHandler
startup_k1921vk035.o(RESET) refers to vk035_it.o(.text.UART0_TD_IRQHandler) for UART0_TD_IRQHandler
startup_k1921vk035.o(RESET) refers to vk035_it.o(.text.UART0_RX_IRQHandler) for UART0_RX_IRQHandler
startup_k1921vk035.o(RESET) refers to vk035_it.o(.text.UART0_TX_IRQHandler) for UART0_TX_IRQHandler
startup_k1921vk035.o(RESET) refers to vk035_it.o(.text.UART0_E_RT_IRQHandler) for UART0_E_RT_IRQHandler
startup_k1921vk035.o(RESET) refers to vk035_it.o(.text.UART1_TD_IRQHandler) for UART1_TD_IRQHandler
startup_k1921vk035.o(RESET) refers to vk035_it.o(.text.UART1_RX_IRQHandler) for UART1_RX_IRQHandler
startup_k1921vk035.o(RESET) refers to vk035_it.o(.text.UART1_TX_IRQHandler) for UART1_TX_IRQHandler
startup_k1921vk035.o(RESET) refers to vk035_it.o(.text.UART1_E_RT_IRQHandler) for UART1_E_RT_IRQHandler
startup_k1921vk035.o(RESET) refers to vk035_it.o(.text.SPI_RO_RT_IRQHandler) for SPI_RO_RT_IRQHandler
startup_k1921vk035.o(RESET) refers to vk035_it.o(.text.SPI_RX_IRQHandler) for SPI_RX_IRQHandler
startup_k1921vk035.o(RESET) refers to vk035_it.o(.text.SPI_TX_IRQHandler) for SPI_TX_IRQHandler
startup_k1921vk035.o(RESET) refers to vk035_it.o(.text.I2C_IRQHandler) for I2C_IRQHandler
startup_k1921vk035.o(RESET) refers to vk035_it.o(.text.ECAP0_IRQHandler) for ECAP0_IRQHandler
startup_k1921vk035.o(RESET) refers to vk035_it.o(.text.ECAP1_IRQHandler) for ECAP1_IRQHandler
startup_k1921vk035.o(RESET) refers to vk035_it.o(.text.ECAP2_IRQHandler) for ECAP2_IRQHandler
startup_k1921vk035.o(RESET) refers to vk035_it.o(.text.PWM0_IRQHandler) for PWM0_IRQHandler
startup_k1921vk035.o(RESET) refers to vk035_it.o(.text.PWM0_HD_IRQHandler) for PWM0_HD_IRQHandler
startup_k1921vk035.o(RESET) refers to vk035_it.o(.text.PWM0_TZ_IRQHandler) for PWM0_TZ_IRQHandler
startup_k1921vk035.o(RESET) refers to vk035_it.o(.text.PWM1_IRQHandler) for PWM1_IRQHandler
startup_k1921vk035.o(RESET) refers to vk035_it.o(.text.PWM1_HD_IRQHandler) for PWM1_HD_IRQHandler
startup_k1921vk035.o(RESET) refers to vk035_it.o(.text.PWM1_TZ_IRQHandler) for PWM1_TZ_IRQHandler
startup_k1921vk035.o(RESET) refers to vk035_it.o(.text.PWM2_IRQHandler) for PWM2_IRQHandler
startup_k1921vk035.o(RESET) refers to vk035_it.o(.text.PWM2_HD_IRQHandler) for PWM2_HD_IRQHandler
startup_k1921vk035.o(RESET) refers to vk035_it.o(.text.PWM2_TZ_IRQHandler) for PWM2_TZ_IRQHandler
startup_k1921vk035.o(RESET) refers to vk035_it.o(.text.QEP_IRQHandler) for QEP_IRQHandler
startup_k1921vk035.o(RESET) refers to vk035_it.o(.text.ADC_SEQ0_IRQHandler) for ADC_SEQ0_IRQHandler
startup_k1921vk035.o(RESET) refers to vk035_it.o(.text.ADC_SEQ1_IRQHandler) for ADC_SEQ1_IRQHandler
startup_k1921vk035.o(RESET) refers to vk035_it.o(.text.ADC_DC_IRQHandler) for ADC_DC_IRQHandler
startup_k1921vk035.o(RESET) refers to vk035_it.o(.text.CAN0_IRQHandler) for CAN0_IRQHandler
startup_k1921vk035.o(RESET) refers to vk035_it.o(.text.CAN1_IRQHandler) for CAN1_IRQHandler
startup_k1921vk035.o(RESET) refers to vk035_it.o(.text.CAN2_IRQHandler) for CAN2_IRQHandler
startup_k1921vk035.o(RESET) refers to vk035_it.o(.text.CAN3_IRQHandler) for CAN3_IRQHandler
startup_k1921vk035.o(RESET) refers to vk035_it.o(.text.CAN4_IRQHandler) for CAN4_IRQHandler
startup_k1921vk035.o(RESET) refers to vk035_it.o(.text.CAN5_IRQHandler) for CAN5_IRQHandler
startup_k1921vk035.o(RESET) refers to vk035_it.o(.text.CAN6_IRQHandler) for CAN6_IRQHandler
startup_k1921vk035.o(RESET) refers to vk035_it.o(.text.CAN7_IRQHandler) for CAN7_IRQHandler
startup_k1921vk035.o(RESET) refers to vk035_it.o(.text.CAN8_IRQHandler) for CAN8_IRQHandler
startup_k1921vk035.o(RESET) refers to vk035_it.o(.text.CAN9_IRQHandler) for CAN9_IRQHandler
startup_k1921vk035.o(RESET) refers to vk035_it.o(.text.CAN10_IRQHandler) for CAN10_IRQHandler
startup_k1921vk035.o(RESET) refers to vk035_it.o(.text.CAN11_IRQHandler) for CAN11_IRQHandler
startup_k1921vk035.o(RESET) refers to vk035_it.o(.text.CAN12_IRQHandler) for CAN12_IRQHandler
startup_k1921vk035.o(RESET) refers to vk035_it.o(.text.CAN13_IRQHandler) for CAN13_IRQHandler
startup_k1921vk035.o(RESET) refers to vk035_it.o(.text.CAN14_IRQHandler) for CAN14_IRQHandler
startup_k1921vk035.o(RESET) refers to vk035_it.o(.text.CAN15_IRQHandler) for CAN15_IRQHandler
startup_k1921vk035.o(RESET) refers to vk035_it.o(.text.FPU_IRQHandler) for FPU_IRQHandler
startup_k1921vk035.o(.text) refers (Special) to heapauxi.o(.text) for __use_two_region_memory
startup_k1921vk035.o(.text) refers to system_k1921vk035.o(.text.SystemInit) for SystemInit
startup_k1921vk035.o(.text) refers to __main.o(!!!main) for __main
startup_k1921vk035.o(.text) refers to startup_k1921vk035.o(HEAP) for Heap_Mem
startup_k1921vk035.o(.text) refers to startup_k1921vk035.o(STACK) for Stack_Mem
plib035_adc.o(.ARM.exidx.text.ADC_DeInit) refers to plib035_adc.o(.text.ADC_DeInit) for [Anonymous Symbol]
plib035_adc.o(.ARM.exidx.text.ADC_SEQ_Init) refers to plib035_adc.o(.text.ADC_SEQ_Init) for [Anonymous Symbol]
plib035_adc.o(.ARM.exidx.text.ADC_SEQ_StructInit) refers to plib035_adc.o(.text.ADC_SEQ_StructInit) for [Anonymous Symbol]
plib035_adc.o(.ARM.exidx.text.ADC_DC_Init) refers to plib035_adc.o(.text.ADC_DC_Init) for [Anonymous Symbol]
plib035_adc.o(.ARM.exidx.text.ADC_DC_StructInit) refers to plib035_adc.o(.text.ADC_DC_StructInit) for [Anonymous Symbol]
plib035_dma.o(.ARM.exidx.text.DMA_ChannelDeInit) refers to plib035_dma.o(.text.DMA_ChannelDeInit) for [Anonymous Symbol]
plib035_dma.o(.ARM.exidx.text.DMA_ChannelInit) refers to plib035_dma.o(.text.DMA_ChannelInit) for [Anonymous Symbol]
plib035_dma.o(.ARM.exidx.text.DMA_ChannelStructInit) refers to plib035_dma.o(.text.DMA_ChannelStructInit) for [Anonymous Symbol]
plib035_dma.o(.ARM.exidx.text.DMA_DeInit) refers to plib035_dma.o(.text.DMA_DeInit) for [Anonymous Symbol]
plib035_dma.o(.ARM.exidx.text.DMA_Init) refers to plib035_dma.o(.text.DMA_Init) for [Anonymous Symbol]
plib035_dma.o(.ARM.exidx.text.DMA_StructInit) refers to plib035_dma.o(.text.DMA_StructInit) for [Anonymous Symbol]
plib035_ecap.o(.ARM.exidx.text.ECAP_DeInit) refers to plib035_ecap.o(.text.ECAP_DeInit) for [Anonymous Symbol]
plib035_ecap.o(.ARM.exidx.text.ECAP_Init) refers to plib035_ecap.o(.text.ECAP_Init) for [Anonymous Symbol]
plib035_ecap.o(.ARM.exidx.text.ECAP_StructInit) refers to plib035_ecap.o(.text.ECAP_StructInit) for [Anonymous Symbol]
plib035_ecap.o(.ARM.exidx.text.ECAP_PWM_Init) refers to plib035_ecap.o(.text.ECAP_PWM_Init) for [Anonymous Symbol]
plib035_ecap.o(.ARM.exidx.text.ECAP_PWM_StructInit) refers to plib035_ecap.o(.text.ECAP_PWM_StructInit) for [Anonymous Symbol]
plib035_ecap.o(.ARM.exidx.text.ECAP_Capture_Init) refers to plib035_ecap.o(.text.ECAP_Capture_Init) for [Anonymous Symbol]
plib035_ecap.o(.ARM.exidx.text.ECAP_Capture_StructInit) refers to plib035_ecap.o(.text.ECAP_Capture_StructInit) for [Anonymous Symbol]
plib035_gpio.o(.ARM.exidx.text.GPIO_OutModeConfig) refers to plib035_gpio.o(.text.GPIO_OutModeConfig) for [Anonymous Symbol]
plib035_gpio.o(.ARM.exidx.text.GPIO_InModeConfig) refers to plib035_gpio.o(.text.GPIO_InModeConfig) for [Anonymous Symbol]
plib035_gpio.o(.ARM.exidx.text.GPIO_PullModeConfig) refers to plib035_gpio.o(.text.GPIO_PullModeConfig) for [Anonymous Symbol]
plib035_gpio.o(.ARM.exidx.text.GPIO_DriveModeConfig) refers to plib035_gpio.o(.text.GPIO_DriveModeConfig) for [Anonymous Symbol]
plib035_gpio.o(.ARM.exidx.text.GPIO_DeInit) refers to plib035_gpio.o(.text.GPIO_DeInit) for [Anonymous Symbol]
plib035_gpio.o(.ARM.exidx.text.GPIO_Init) refers to plib035_gpio.o(.text.GPIO_Init) for [Anonymous Symbol]
plib035_gpio.o(.ARM.exidx.text.GPIO_StructInit) refers to plib035_gpio.o(.text.GPIO_StructInit) for [Anonymous Symbol]
plib035_i2c.o(.ARM.exidx.text.I2C_FSFreqConfig) refers to plib035_i2c.o(.text.I2C_FSFreqConfig) for [Anonymous Symbol]
plib035_i2c.o(.ARM.exidx.text.I2C_HSFreqConfig) refers to plib035_i2c.o(.text.I2C_HSFreqConfig) for [Anonymous Symbol]
plib035_mflash.o(.ARM.exidx.text.MFLASH_ReadData) refers to plib035_mflash.o(.text.MFLASH_ReadData) for [Anonymous Symbol]
plib035_mflash.o(.ARM.exidx.text.MFLASH_WriteData) refers to plib035_mflash.o(.text.MFLASH_WriteData) for [Anonymous Symbol]
plib035_mflash.o(.ARM.exidx.text.MFLASH_ErasePage) refers to plib035_mflash.o(.text.MFLASH_ErasePage) for [Anonymous Symbol]
plib035_mflash.o(.ARM.exidx.text.MFLASH_EraseFull) refers to plib035_mflash.o(.text.MFLASH_EraseFull) for [Anonymous Symbol]
plib035_pwm.o(.ARM.exidx.text.PWM_DeInit) refers to plib035_pwm.o(.text.PWM_DeInit) for [Anonymous Symbol]
plib035_pwm.o(.ARM.exidx.text.PWM_TB_Init) refers to plib035_pwm.o(.text.PWM_TB_Init) for [Anonymous Symbol]
plib035_pwm.o(.ARM.exidx.text.PWM_TB_StructInit) refers to plib035_pwm.o(.text.PWM_TB_StructInit) for [Anonymous Symbol]
plib035_pwm.o(.ARM.exidx.text.PWM_AQ_Init) refers to plib035_pwm.o(.text.PWM_AQ_Init) for [Anonymous Symbol]
plib035_pwm.o(.ARM.exidx.text.PWM_AQ_StructInit) refers to plib035_pwm.o(.text.PWM_AQ_StructInit) for [Anonymous Symbol]
plib035_pwm.o(.ARM.exidx.text.PWM_CMP_Init) refers to plib035_pwm.o(.text.PWM_CMP_Init) for [Anonymous Symbol]
plib035_pwm.o(.ARM.exidx.text.PWM_CMP_StructInit) refers to plib035_pwm.o(.text.PWM_CMP_StructInit) for [Anonymous Symbol]
plib035_pwm.o(.ARM.exidx.text.PWM_HD_Init) refers to plib035_pwm.o(.text.PWM_HD_Init) for [Anonymous Symbol]
plib035_pwm.o(.ARM.exidx.text.PWM_HD_StructInit) refers to plib035_pwm.o(.text.PWM_HD_StructInit) for [Anonymous Symbol]
plib035_pwm.o(.ARM.exidx.text.PWM_DB_Init) refers to plib035_pwm.o(.text.PWM_DB_Init) for [Anonymous Symbol]
plib035_pwm.o(.ARM.exidx.text.PWM_DB_StructInit) refers to plib035_pwm.o(.text.PWM_DB_StructInit) for [Anonymous Symbol]
plib035_pwm.o(.ARM.exidx.text.PWM_TZ_Init) refers to plib035_pwm.o(.text.PWM_TZ_Init) for [Anonymous Symbol]
plib035_pwm.o(.ARM.exidx.text.PWM_TZ_StructInit) refers to plib035_pwm.o(.text.PWM_TZ_StructInit) for [Anonymous Symbol]
plib035_pwm.o(.ARM.exidx.text.PWM_ET_Init) refers to plib035_pwm.o(.text.PWM_ET_Init) for [Anonymous Symbol]
plib035_pwm.o(.ARM.exidx.text.PWM_ET_StructInit) refers to plib035_pwm.o(.text.PWM_ET_StructInit) for [Anonymous Symbol]
plib035_qep.o(.ARM.exidx.text.QEP_DeInit) refers to plib035_qep.o(.text.QEP_DeInit) for [Anonymous Symbol]
plib035_qep.o(.ARM.exidx.text.QEP_PC_Init) refers to plib035_qep.o(.text.QEP_PC_Init) for [Anonymous Symbol]
plib035_qep.o(.ARM.exidx.text.QEP_PC_StructInit) refers to plib035_qep.o(.text.QEP_PC_StructInit) for [Anonymous Symbol]
plib035_qep.o(.ARM.exidx.text.QEP_CMP_Init) refers to plib035_qep.o(.text.QEP_CMP_Init) for [Anonymous Symbol]
plib035_qep.o(.ARM.exidx.text.QEP_CMP_StructInit) refers to plib035_qep.o(.text.QEP_CMP_StructInit) for [Anonymous Symbol]
plib035_qep.o(.ARM.exidx.text.QEP_CAP_Init) refers to plib035_qep.o(.text.QEP_CAP_Init) for [Anonymous Symbol]
plib035_qep.o(.ARM.exidx.text.QEP_CAP_StructInit) refers to plib035_qep.o(.text.QEP_CAP_StructInit) for [Anonymous Symbol]
plib035_rcu.o(.ARM.exidx.text.RCU_GetOSIClkFreq) refers to plib035_rcu.o(.text.RCU_GetOSIClkFreq) for [Anonymous Symbol]
plib035_rcu.o(.ARM.exidx.text.RCU_GetOSEClkFreq) refers to plib035_rcu.o(.text.RCU_GetOSEClkFreq) for [Anonymous Symbol]
plib035_rcu.o(.ARM.exidx.text.RCU_GetPLLClkFreq) refers to plib035_rcu.o(.text.RCU_GetPLLClkFreq) for [Anonymous Symbol]
plib035_rcu.o(.ARM.exidx.text.RCU_GetPLLDivClkFreq) refers to plib035_rcu.o(.text.RCU_GetPLLDivClkFreq) for [Anonymous Symbol]
plib035_rcu.o(.ARM.exidx.text.RCU_GetSysClkFreq) refers to plib035_rcu.o(.text.RCU_GetSysClkFreq) for [Anonymous Symbol]
plib035_rcu.o(.ARM.exidx.text.RCU_GetUARTClkFreq) refers to plib035_rcu.o(.text.RCU_GetUARTClkFreq) for [Anonymous Symbol]
plib035_rcu.o(.ARM.exidx.text.RCU_GetSPIClkFreq) refers to plib035_rcu.o(.text.RCU_GetSPIClkFreq) for [Anonymous Symbol]
plib035_rcu.o(.ARM.exidx.text.RCU_GetADCClkFreq) refers to plib035_rcu.o(.text.RCU_GetADCClkFreq) for [Anonymous Symbol]
plib035_rcu.o(.ARM.exidx.text.RCU_GetWDTClkFreq) refers to plib035_rcu.o(.text.RCU_GetWDTClkFreq) for [Anonymous Symbol]
plib035_rcu.o(.ARM.exidx.text.RCU_GetTraceClkFreq) refers to plib035_rcu.o(.text.RCU_GetTraceClkFreq) for [Anonymous Symbol]
plib035_rcu.o(.ARM.exidx.text.RCU_GetClkOutFreq) refers to plib035_rcu.o(.text.RCU_GetClkOutFreq) for [Anonymous Symbol]
plib035_rcu.o(.ARM.exidx.text.RCU_PLL_AutoConfig) refers to plib035_rcu.o(.text.RCU_PLL_AutoConfig) for [Anonymous Symbol]
plib035_rcu.o(.ARM.exidx.text.RCU_PLL_StructInit) refers to plib035_rcu.o(.text.RCU_PLL_StructInit) for [Anonymous Symbol]
plib035_rcu.o(.ARM.exidx.text.RCU_PLL_Init) refers to plib035_rcu.o(.text.RCU_PLL_Init) for [Anonymous Symbol]
plib035_rcu.o(.ARM.exidx.text.RCU_SysClkChangeCmd) refers to plib035_rcu.o(.text.RCU_SysClkChangeCmd) for [Anonymous Symbol]
plib035_rcu.o(.ARM.exidx.text.RCU_PLL_DeInit) refers to plib035_rcu.o(.text.RCU_PLL_DeInit) for [Anonymous Symbol]
plib035_spi.o(.ARM.exidx.text.SPI_DeInit) refers to plib035_spi.o(.text.SPI_DeInit) for [Anonymous Symbol]
plib035_spi.o(.ARM.exidx.text.SPI_Init) refers to plib035_spi.o(.text.SPI_Init) for [Anonymous Symbol]
plib035_spi.o(.ARM.exidx.text.SPI_StructInit) refers to plib035_spi.o(.text.SPI_StructInit) for [Anonymous Symbol]
plib035_tmr.o(.ARM.exidx.text.TMR_PeriodConfig) refers to plib035_tmr.o(.text.TMR_PeriodConfig) for [Anonymous Symbol]
plib035_tmr.o(.ARM.exidx.text.TMR_FreqConfig) refers to plib035_tmr.o(.text.TMR_FreqConfig) for [Anonymous Symbol]
plib035_uart.o(.text.UART_AutoBaudConfig) refers to plib035_rcu.o(.text.RCU_GetUARTClkFreq) for RCU_GetUARTClkFreq
plib035_uart.o(.ARM.exidx.text.UART_AutoBaudConfig) refers to plib035_uart.o(.text.UART_AutoBaudConfig) for [Anonymous Symbol]
plib035_uart.o(.ARM.exidx.text.UART_DeInit) refers to plib035_uart.o(.text.UART_DeInit) for [Anonymous Symbol]
plib035_uart.o(.text.UART_Init) refers to plib035_rcu.o(.text.RCU_GetUARTClkFreq) for RCU_GetUARTClkFreq
plib035_uart.o(.ARM.exidx.text.UART_Init) refers to plib035_uart.o(.text.UART_Init) for [Anonymous Symbol]
plib035_uart.o(.ARM.exidx.text.UART_StructInit) refers to plib035_uart.o(.text.UART_StructInit) for [Anonymous Symbol]
retarget_conf.o(.ARM.exidx.text.retarget_init) refers to retarget_conf.o(.text.retarget_init) for [Anonymous Symbol]
retarget_conf.o(.ARM.exidx.text.retarget_get_char) refers to retarget_conf.o(.text.retarget_get_char) for [Anonymous Symbol]
retarget_conf.o(.ARM.exidx.text.retarget_put_char) refers to retarget_conf.o(.text.retarget_put_char) for [Anonymous Symbol]
llsdiv.o(.text) refers to lludivv7m.o(.text) for __aeabi_uldivmod
rt_memcpy_v6.o(.text) refers to rt_memcpy_w.o(.text) for __aeabi_memcpy4
__main.o(!!!main) refers to __rtentry.o(.ARM.Collect$$rtentry$$00000000) for __rt_entry
ffltll_clz.o(x$fpl$ffltll) refers (Special) to usenofp.o(x$fpl$usenofp) for __I$use$fp
cosf.o(i.__hardfp_cosf) refers (Special) to usenofp.o(x$fpl$usenofp) for __I$use$fp
cosf.o(i.__hardfp_cosf) refers to rredf.o(i.__mathlib_rredf2) for __mathlib_rredf2
cosf.o(i.__hardfp_cosf) refers to _rserrno.o(.text) for __set_errno
cosf.o(i.__hardfp_cosf) refers to funder.o(i.__mathlib_flt_invalid) for __mathlib_flt_invalid
cosf.o(i.__hardfp_cosf) refers to funder.o(i.__mathlib_flt_infnan) for __mathlib_flt_infnan
cosf.o(i.__softfp_cosf) refers (Special) to usenofp.o(x$fpl$usenofp) for __I$use$fp
cosf.o(i.__softfp_cosf) refers to cosf.o(i.__hardfp_cosf) for __hardfp_cosf
cosf.o(i.cosf) refers (Special) to usenofp.o(x$fpl$usenofp) for __I$use$fp
cosf.o(i.cosf) refers to cosf.o(i.__hardfp_cosf) for __hardfp_cosf
sinf.o(i.__hardfp_sinf) refers (Special) to usenofp.o(x$fpl$usenofp) for __I$use$fp
sinf.o(i.__hardfp_sinf) refers to rredf.o(i.__mathlib_rredf2) for __mathlib_rredf2
sinf.o(i.__hardfp_sinf) refers to fpclassifyf.o(i.__ARM_fpclassifyf) for __ARM_fpclassifyf
sinf.o(i.__hardfp_sinf) refers to funder.o(i.__mathlib_flt_underflow) for __mathlib_flt_underflow
sinf.o(i.__hardfp_sinf) refers to _rserrno.o(.text) for __set_errno
sinf.o(i.__hardfp_sinf) refers to funder.o(i.__mathlib_flt_invalid) for __mathlib_flt_invalid
sinf.o(i.__hardfp_sinf) refers to funder.o(i.__mathlib_flt_infnan) for __mathlib_flt_infnan
sinf.o(i.__softfp_sinf) refers (Special) to usenofp.o(x$fpl$usenofp) for __I$use$fp
sinf.o(i.__softfp_sinf) refers to sinf.o(i.__hardfp_sinf) for __hardfp_sinf
sinf.o(i.sinf) refers (Special) to usenofp.o(x$fpl$usenofp) for __I$use$fp
sinf.o(i.sinf) refers to sinf.o(i.__hardfp_sinf) for __hardfp_sinf
__rtentry.o(.ARM.Collect$$rtentry$$00000000) refers (Special) to __rtentry2.o(.ARM.Collect$$rtentry$$0000000A) for __rt_entry_li
__rtentry.o(.ARM.Collect$$rtentry$$00000000) refers (Special) to __rtentry2.o(.ARM.Collect$$rtentry$$0000000D) for __rt_entry_main
__rtentry.o(.ARM.Collect$$rtentry$$00000000) refers (Special) to __rtentry2.o(.ARM.Collect$$rtentry$$0000000C) for __rt_entry_postli_1
__rtentry.o(.ARM.Collect$$rtentry$$00000000) refers (Special) to __rtentry2.o(.ARM.Collect$$rtentry$$00000009) for __rt_entry_postsh_1
__rtentry.o(.ARM.Collect$$rtentry$$00000000) refers (Special) to __rtentry2.o(.ARM.Collect$$rtentry$$00000002) for __rt_entry_presh_1
__rtentry.o(.ARM.Collect$$rtentry$$00000000) refers (Special) to __rtentry4.o(.ARM.Collect$$rtentry$$00000004) for __rt_entry_sh
aeabi_ldiv0_sigfpe.o(.text) refers to rt_div0.o(.text) for __rt_div0
_rserrno.o(.text) refers to rt_errno_addr_intlibspace.o(.text) for __aeabi_errno_addr
fpclassifyf.o(i.__ARM_fpclassifyf) refers (Special) to usenofp.o(x$fpl$usenofp) for __I$use$fp
rredf.o(i.__mathlib_rredf2) refers (Special) to usenofp.o(x$fpl$usenofp) for __I$use$fp
rredf.o(i.__mathlib_rredf2) refers to rredf.o(.constdata) for .constdata
rredf.o(.constdata) refers (Special) to usenofp.o(x$fpl$usenofp) for __I$use$fp
__rtentry2.o(.ARM.Collect$$rtentry$$00000008) refers to boardinit2.o(.text) for _platform_post_stackheap_init
__rtentry2.o(.ARM.Collect$$rtentry$$0000000A) refers to libinit.o(.ARM.Collect$$libinit$$00000000) for __rt_lib_init
__rtentry2.o(.ARM.Collect$$rtentry$$0000000B) refers to boardinit3.o(.text) for _platform_post_lib_init
__rtentry2.o(.ARM.Collect$$rtentry$$0000000D) refers to main.o(.text.main) for main
__rtentry2.o(.ARM.Collect$$rtentry$$0000000D) refers to exit.o(.text) for exit
__rtentry2.o(.ARM.exidx) refers to __rtentry2.o(.ARM.Collect$$rtentry$$00000001) for .ARM.Collect$$rtentry$$00000001
__rtentry2.o(.ARM.exidx) refers to __rtentry2.o(.ARM.Collect$$rtentry$$00000008) for .ARM.Collect$$rtentry$$00000008
__rtentry2.o(.ARM.exidx) refers to __rtentry2.o(.ARM.Collect$$rtentry$$0000000A) for .ARM.Collect$$rtentry$$0000000A
__rtentry2.o(.ARM.exidx) refers to __rtentry2.o(.ARM.Collect$$rtentry$$0000000B) for .ARM.Collect$$rtentry$$0000000B
__rtentry2.o(.ARM.exidx) refers to __rtentry2.o(.ARM.Collect$$rtentry$$0000000D) for .ARM.Collect$$rtentry$$0000000D
__rtentry4.o(.ARM.Collect$$rtentry$$00000004) refers to sys_stackheap_outer.o(.text) for __user_setup_stackheap
__rtentry4.o(.ARM.exidx) refers to __rtentry4.o(.ARM.Collect$$rtentry$$00000004) for .ARM.Collect$$rtentry$$00000004
rt_div0.o(.text) refers to defsig_fpe_outer.o(.text) for __rt_SIGFPE
rt_errno_addr.o(.text) refers to rt_errno_addr.o(.bss) for __aeabi_errno_addr_data
rt_errno_addr_intlibspace.o(.text) refers to libspace.o(.bss) for __libspace_start
libspace.o(.text) refers to libspace.o(.bss) for __libspace_start
sys_stackheap_outer.o(.text) refers to libspace.o(.text) for __user_perproc_libspace
sys_stackheap_outer.o(.text) refers to startup_k1921vk035.o(.text) for __user_initial_stackheap
exit.o(.text) refers to rtexit.o(.ARM.Collect$$rtexit$$00000000) for __rt_exit
defsig_fpe_outer.o(.text) refers to defsig_fpe_inner.o(.text) for __rt_SIGFPE_inner
defsig_fpe_outer.o(.text) refers to defsig_exit.o(.text) for __sig_exit
defsig_fpe_formal.o(.text) refers to rt_raise.o(.text) for __rt_raise
libinit.o(.ARM.Collect$$libinit$$00000000) refers (Special) to libinit2.o(.ARM.Collect$$libinit$$00000030) for __rt_lib_init_alloca_1
libinit.o(.ARM.Collect$$libinit$$00000000) refers (Special) to libinit2.o(.ARM.Collect$$libinit$$0000002E) for __rt_lib_init_argv_1
libinit.o(.ARM.Collect$$libinit$$00000000) refers (Special) to libinit2.o(.ARM.Collect$$libinit$$0000001D) for __rt_lib_init_atexit_1
libinit.o(.ARM.Collect$$libinit$$00000000) refers (Special) to libinit2.o(.ARM.Collect$$libinit$$00000023) for __rt_lib_init_clock_1
libinit.o(.ARM.Collect$$libinit$$00000000) refers (Special) to libinit2.o(.ARM.Collect$$libinit$$00000034) for __rt_lib_init_cpp_1
libinit.o(.ARM.Collect$$libinit$$00000000) refers (Special) to libinit2.o(.ARM.Collect$$libinit$$00000032) for __rt_lib_init_exceptions_1
libinit.o(.ARM.Collect$$libinit$$00000000) refers (Special) to libinit2.o(.ARM.Collect$$libinit$$00000001) for __rt_lib_init_fp_1
libinit.o(.ARM.Collect$$libinit$$00000000) refers (Special) to libinit2.o(.ARM.Collect$$libinit$$00000021) for __rt_lib_init_fp_trap_1
libinit.o(.ARM.Collect$$libinit$$00000000) refers (Special) to libinit2.o(.ARM.Collect$$libinit$$00000025) for __rt_lib_init_getenv_1
libinit.o(.ARM.Collect$$libinit$$00000000) refers (Special) to libinit2.o(.ARM.Collect$$libinit$$0000000C) for __rt_lib_init_heap_1
libinit.o(.ARM.Collect$$libinit$$00000000) refers (Special) to libinit2.o(.ARM.Collect$$libinit$$00000013) for __rt_lib_init_lc_collate_1
libinit.o(.ARM.Collect$$libinit$$00000000) refers (Special) to libinit2.o(.ARM.Collect$$libinit$$00000015) for __rt_lib_init_lc_ctype_1
libinit.o(.ARM.Collect$$libinit$$00000000) refers (Special) to libinit2.o(.ARM.Collect$$libinit$$00000017) for __rt_lib_init_lc_monetary_1
libinit.o(.ARM.Collect$$libinit$$00000000) refers (Special) to libinit2.o(.ARM.Collect$$libinit$$00000019) for __rt_lib_init_lc_numeric_1
libinit.o(.ARM.Collect$$libinit$$00000000) refers (Special) to libinit2.o(.ARM.Collect$$libinit$$0000001B) for __rt_lib_init_lc_time_1
libinit.o(.ARM.Collect$$libinit$$00000000) refers (Special) to libinit2.o(.ARM.Collect$$libinit$$00000006) for __rt_lib_init_preinit_1
libinit.o(.ARM.Collect$$libinit$$00000000) refers (Special) to libinit2.o(.ARM.Collect$$libinit$$00000010) for __rt_lib_init_rand_1
libinit.o(.ARM.Collect$$libinit$$00000000) refers (Special) to libinit2.o(.ARM.Collect$$libinit$$00000004) for __rt_lib_init_relocate_pie_1
libinit.o(.ARM.Collect$$libinit$$00000000) refers (Special) to libinit2.o(.ARM.Collect$$libinit$$00000035) for __rt_lib_init_return
libinit.o(.ARM.Collect$$libinit$$00000000) refers (Special) to libinit2.o(.ARM.Collect$$libinit$$0000001F) for __rt_lib_init_signal_1
libinit.o(.ARM.Collect$$libinit$$00000000) refers (Special) to libinit2.o(.ARM.Collect$$libinit$$00000027) for __rt_lib_init_stdio_1
libinit.o(.ARM.Collect$$libinit$$00000000) refers (Special) to libinit2.o(.ARM.Collect$$libinit$$0000000E) for __rt_lib_init_user_alloc_1
rtexit.o(.ARM.Collect$$rtexit$$00000000) refers (Special) to rtexit2.o(.ARM.Collect$$rtexit$$00000004) for __rt_exit_exit
rtexit.o(.ARM.Collect$$rtexit$$00000000) refers (Special) to rtexit2.o(.ARM.Collect$$rtexit$$00000003) for __rt_exit_ls
rtexit.o(.ARM.Collect$$rtexit$$00000000) refers (Special) to rtexit2.o(.ARM.Collect$$rtexit$$00000002) for __rt_exit_prels_1
rtexit.o(.ARM.exidx) refers (Special) to rtexit2.o(.ARM.Collect$$rtexit$$00000004) for __rt_exit_exit
rtexit.o(.ARM.exidx) refers (Special) to rtexit2.o(.ARM.Collect$$rtexit$$00000003) for __rt_exit_ls
rtexit.o(.ARM.exidx) refers (Special) to rtexit2.o(.ARM.Collect$$rtexit$$00000002) for __rt_exit_prels_1
rtexit.o(.ARM.exidx) refers to rtexit.o(.ARM.Collect$$rtexit$$00000000) for .ARM.Collect$$rtexit$$00000000
rt_raise.o(.text) refers to __raise.o(.text) for __raise
rt_raise.o(.text) refers to sys_exit.o(.text) for _sys_exit
defsig_exit.o(.text) refers to sys_exit.o(.text) for _sys_exit
defsig_fpe_inner.o(.text) refers to defsig_general.o(.text) for __default_signal_display
libinit2.o(.ARM.Collect$$libinit$$00000001) refers to fpinit.o(x$fpl$fpinit) for _fp_init
libinit2.o(.ARM.Collect$$libinit$$00000012) refers to libinit2.o(.ARM.Collect$$libinit$$00000011) for .ARM.Collect$$libinit$$00000011
libinit2.o(.ARM.Collect$$libinit$$00000014) refers to libinit2.o(.ARM.Collect$$libinit$$00000011) for .ARM.Collect$$libinit$$00000011
libinit2.o(.ARM.Collect$$libinit$$00000016) refers to libinit2.o(.ARM.Collect$$libinit$$00000011) for .ARM.Collect$$libinit$$00000011
libinit2.o(.ARM.Collect$$libinit$$00000018) refers to libinit2.o(.ARM.Collect$$libinit$$00000011) for .ARM.Collect$$libinit$$00000011
libinit2.o(.ARM.Collect$$libinit$$0000001A) refers to libinit2.o(.ARM.Collect$$libinit$$00000011) for .ARM.Collect$$libinit$$00000011
libinit2.o(.ARM.Collect$$libinit$$00000028) refers to argv_veneer.o(.emb_text) for __ARM_argv_veneer
libinit2.o(.ARM.Collect$$libinit$$00000029) refers to argv_veneer.o(.emb_text) for __ARM_argv_veneer
sys_exit.o(.text) refers (Special) to use_no_semi.o(.text) for __I$use$semihosting
sys_exit.o(.text) refers (Special) to indicate_semi.o(.text) for __semihosting_library_function
sys_exit_hlt.o(.text) refers (Special) to use_no_semi.o(.text) for __I$use$semihosting
sys_exit_hlt.o(.text) refers (Special) to indicate_semi.o(.text) for __semihosting_library_function
rtexit2.o(.ARM.Collect$$rtexit$$00000003) refers to libshutdown.o(.ARM.Collect$$libshutdown$$00000000) for __rt_lib_shutdown
rtexit2.o(.ARM.Collect$$rtexit$$00000004) refers to sys_exit.o(.text) for _sys_exit
rtexit2.o(.ARM.exidx) refers to rtexit2.o(.ARM.Collect$$rtexit$$00000001) for .ARM.Collect$$rtexit$$00000001
rtexit2.o(.ARM.exidx) refers to rtexit2.o(.ARM.Collect$$rtexit$$00000003) for .ARM.Collect$$rtexit$$00000003
rtexit2.o(.ARM.exidx) refers to rtexit2.o(.ARM.Collect$$rtexit$$00000004) for .ARM.Collect$$rtexit$$00000004
__raise.o(.text) refers to defsig.o(CL$$defsig) for __default_signal_handler
defsig_general.o(.text) refers to sys_wrch.o(.text) for _ttywrch
argv_veneer.o(.emb_text) refers to no_argv.o(.text) for __ARM_get_argv
sys_wrch.o(.text) refers (Special) to use_no_semi.o(.text) for __I$use$semihosting
sys_wrch.o(.text) refers (Special) to indicate_semi.o(.text) for __semihosting_library_function
sys_wrch_hlt.o(.text) refers (Special) to use_no_semi.o(.text) for __I$use$semihosting
sys_wrch_hlt.o(.text) refers (Special) to indicate_semi.o(.text) for __semihosting_library_function
defsig.o(CL$$defsig) refers to defsig_fpe_inner.o(.text) for __rt_SIGFPE_inner
defsig.o(CL$$defsig) refers to defsig_rtmem_inner.o(.text) for __rt_SIGRTMEM_inner
_get_argv_nomalloc.o(.text) refers (Special) to hrguard.o(.text) for __heap_region$guard
_get_argv_nomalloc.o(.text) refers to defsig_rtmem_outer.o(.text) for __rt_SIGRTMEM
_get_argv_nomalloc.o(.text) refers to sys_command.o(.text) for _sys_command_string
libshutdown.o(.ARM.Collect$$libshutdown$$00000000) refers (Special) to libshutdown2.o(.ARM.Collect$$libshutdown$$00000002) for __rt_lib_shutdown_cpp_1
libshutdown.o(.ARM.Collect$$libshutdown$$00000000) refers (Special) to libshutdown2.o(.ARM.Collect$$libshutdown$$00000007) for __rt_lib_shutdown_fp_trap_1
libshutdown.o(.ARM.Collect$$libshutdown$$00000000) refers (Special) to libshutdown2.o(.ARM.Collect$$libshutdown$$0000000F) for __rt_lib_shutdown_heap_1
libshutdown.o(.ARM.Collect$$libshutdown$$00000000) refers (Special) to libshutdown2.o(.ARM.Collect$$libshutdown$$00000010) for __rt_lib_shutdown_return
libshutdown.o(.ARM.Collect$$libshutdown$$00000000) refers (Special) to libshutdown2.o(.ARM.Collect$$libshutdown$$0000000A) for __rt_lib_shutdown_signal_1
libshutdown.o(.ARM.Collect$$libshutdown$$00000000) refers (Special) to libshutdown2.o(.ARM.Collect$$libshutdown$$00000004) for __rt_lib_shutdown_stdio_1
libshutdown.o(.ARM.Collect$$libshutdown$$00000000) refers (Special) to libshutdown2.o(.ARM.Collect$$libshutdown$$0000000C) for __rt_lib_shutdown_user_alloc_1
sys_command.o(.text) refers (Special) to use_no_semi.o(.text) for __I$use$semihosting
sys_command.o(.text) refers (Special) to indicate_semi.o(.text) for __semihosting_library_function
sys_command_hlt.o(.text) refers (Special) to use_no_semi.o(.text) for __I$use$semihosting
sys_command_hlt.o(.text) refers (Special) to indicate_semi.o(.text) for __semihosting_library_function
defsig_abrt_inner.o(.text) refers to defsig_general.o(.text) for __default_signal_display
defsig_rtred_inner.o(.text) refers to defsig_general.o(.text) for __default_signal_display
defsig_rtmem_inner.o(.text) refers to defsig_general.o(.text) for __default_signal_display
defsig_rtmem_outer.o(.text) refers to defsig_rtmem_inner.o(.text) for __rt_SIGRTMEM_inner
defsig_rtmem_outer.o(.text) refers to defsig_exit.o(.text) for __sig_exit
defsig_rtmem_formal.o(.text) refers to rt_raise.o(.text) for __rt_raise
defsig_stak_inner.o(.text) refers to defsig_general.o(.text) for __default_signal_display
defsig_pvfn_inner.o(.text) refers to defsig_general.o(.text) for __default_signal_display
defsig_cppl_inner.o(.text) refers to defsig_general.o(.text) for __default_signal_display
defsig_segv_inner.o(.text) refers to defsig_general.o(.text) for __default_signal_display
defsig_other.o(.text) refers to defsig_general.o(.text) for __default_signal_display
==============================================================================
Removing Unused input sections from the image.
Removing main.o(.text), (0 bytes).
Removing main.o(.ARM.exidx.text.periph_init), (8 bytes).
Removing main.o(.ARM.exidx.text.restart_receive), (8 bytes).
Removing main.o(.ARM.exidx.text.heartbit), (8 bytes).
Removing main.o(.ARM.exidx.text.main), (8 bytes).
Removing main.o(.ARM.exidx.text.Error_Handler), (8 bytes).
Removing main.o(.ARM.use_no_argv), (4 bytes).
Removing gpio.o(.text), (0 bytes).
Removing gpio.o(.ARM.exidx.text.gpio_init), (8 bytes).
Removing gpio.o(.ARM.exidx.text.gpio_get_init), (8 bytes).
Removing tmr.o(.text), (0 bytes).
Removing tmr.o(.ARM.exidx.text.tmr_init_first), (8 bytes).
Removing tmr.o(.text.tmr_init), (32 bytes).
Removing tmr.o(.ARM.exidx.text.tmr_init), (8 bytes).
Removing tmr.o(.ARM.exidx.text.TMR_Init), (8 bytes).
Removing tmr.o(.ARM.exidx.text.tmr_set_callback), (8 bytes).
Removing tmr.o(.ARM.exidx.text.tmr_start), (8 bytes).
Removing tmr.o(.text.tmr_stop), (22 bytes).
Removing tmr.o(.ARM.exidx.text.tmr_stop), (8 bytes).
Removing tmr.o(.ARM.exidx.text.tmr_delay), (8 bytes).
Removing tmr.o(.ARM.exidx.text.tmr_delay_start), (8 bytes).
Removing tmr.o(.ARM.exidx.text.tmr_delay_done), (8 bytes).
Removing tmr.o(.ARM.exidx.text.tmr_handler), (8 bytes).
Removing uart.o(.text), (0 bytes).
Removing uart.o(.ARM.exidx.text.uart_init_first), (8 bytes).
Removing uart.o(.ARM.exidx.text.uart1_gpio_init), (8 bytes).
Removing uart.o(.text.uart_init), (32 bytes).
Removing uart.o(.ARM.exidx.text.uart_init), (8 bytes).
Removing uart.o(.ARM.exidx.text.uart_start), (8 bytes).
Removing uart.o(.ARM.exidx.text.uart_transmit), (8 bytes).
Removing uart.o(.text.uart_receive), (160 bytes).
Removing uart.o(.ARM.exidx.text.uart_receive), (8 bytes).
Removing uart.o(.ARM.exidx.text.uart_transmit_it), (8 bytes).
Removing uart.o(.ARM.exidx.text.uart_receive_it), (8 bytes).
Removing uart.o(.ARM.exidx.text.uart_handler), (8 bytes).
Removing uart.o(.ARM.exidx.text.uart_set_callback), (8 bytes).
Removing uart.o(.text.uart0_gpio_init), (2 bytes).
Removing uart.o(.ARM.exidx.text.uart0_gpio_init), (8 bytes).
Removing uart.o(.text.uart0_gpio_deinit), (2 bytes).
Removing uart.o(.ARM.exidx.text.uart0_gpio_deinit), (8 bytes).
Removing uart.o(.text.uart1_gpio_deinit), (90 bytes).
Removing uart.o(.ARM.exidx.text.uart1_gpio_deinit), (8 bytes).
Removing adc.o(.text), (0 bytes).
Removing adc.o(.ARM.exidx.text.adc_init_first), (8 bytes).
Removing adc.o(.text.adc_seq_init), (46 bytes).
Removing adc.o(.ARM.exidx.text.adc_seq_init), (8 bytes).
Removing adc.o(.text.adc_seq_set_callback), (76 bytes).
Removing adc.o(.ARM.exidx.text.adc_seq_set_callback), (8 bytes).
Removing adc.o(.ARM.exidx.text.adc_seq_start), (8 bytes).
Removing adc.o(.text.adc_seq_stop), (86 bytes).
Removing adc.o(.ARM.exidx.text.adc_seq_stop), (8 bytes).
Removing adc.o(.text.adc_get_channel_value), (40 bytes).
Removing adc.o(.ARM.exidx.text.adc_get_channel_value), (8 bytes).
Removing adc.o(.ARM.exidx.text.adc_sw_start), (8 bytes).
Removing adc.o(.ARM.exidx.text.adc_seq_handler), (8 bytes).
Removing sysclk.o(.text), (0 bytes).
Removing sysclk.o(.ARM.exidx.text.sysclk_init), (8 bytes).
Removing sysclk.o(.ARM.exidx.text.millis), (8 bytes).
Removing sysclk.o(.ARM.exidx.text.millis_inc), (8 bytes).
Removing sysclk.o(.text.micros), (4 bytes).
Removing sysclk.o(.ARM.exidx.text.micros), (8 bytes).
Removing sysclk.o(.text.micros_inc), (16 bytes).
Removing sysclk.o(.ARM.exidx.text.micros_inc), (8 bytes).
Removing sysclk.o(.ARM.exidx.text.rcu_set_clock_adc), (8 bytes).
Removing vk035_it.o(.text), (0 bytes).
Removing vk035_it.o(.ARM.exidx.text.GPIOA_IRQHandler), (8 bytes).
Removing vk035_it.o(.ARM.exidx.text.GPIOB_IRQHandler), (8 bytes).
Removing vk035_it.o(.ARM.exidx.text.TMR0_IRQHandler), (8 bytes).
Removing vk035_it.o(.ARM.exidx.text.TMR1_IRQHandler), (8 bytes).
Removing vk035_it.o(.ARM.exidx.text.TMR2_IRQHandler), (8 bytes).
Removing vk035_it.o(.ARM.exidx.text.TMR3_IRQHandler), (8 bytes).
Removing vk035_it.o(.ARM.exidx.text.UART0_TD_IRQHandler), (8 bytes).
Removing vk035_it.o(.ARM.exidx.text.UART0_RX_IRQHandler), (8 bytes).
Removing vk035_it.o(.ARM.exidx.text.UART0_TX_IRQHandler), (8 bytes).
Removing vk035_it.o(.ARM.exidx.text.UART0_E_RT_IRQHandler), (8 bytes).
Removing vk035_it.o(.ARM.exidx.text.UART1_TD_IRQHandler), (8 bytes).
Removing vk035_it.o(.ARM.exidx.text.UART1_RX_IRQHandler), (8 bytes).
Removing vk035_it.o(.ARM.exidx.text.UART1_TX_IRQHandler), (8 bytes).
Removing vk035_it.o(.ARM.exidx.text.UART1_E_RT_IRQHandler), (8 bytes).
Removing vk035_it.o(.ARM.exidx.text.SPI_RO_RT_IRQHandler), (8 bytes).
Removing vk035_it.o(.ARM.exidx.text.SPI_RX_IRQHandler), (8 bytes).
Removing vk035_it.o(.ARM.exidx.text.SPI_TX_IRQHandler), (8 bytes).
Removing vk035_it.o(.ARM.exidx.text.I2C_IRQHandler), (8 bytes).
Removing vk035_it.o(.ARM.exidx.text.ECAP0_IRQHandler), (8 bytes).
Removing vk035_it.o(.ARM.exidx.text.ECAP1_IRQHandler), (8 bytes).
Removing vk035_it.o(.ARM.exidx.text.ECAP2_IRQHandler), (8 bytes).
Removing vk035_it.o(.ARM.exidx.text.PWM0_IRQHandler), (8 bytes).
Removing vk035_it.o(.ARM.exidx.text.PWM0_HD_IRQHandler), (8 bytes).
Removing vk035_it.o(.ARM.exidx.text.PWM0_TZ_IRQHandler), (8 bytes).
Removing vk035_it.o(.ARM.exidx.text.PWM1_IRQHandler), (8 bytes).
Removing vk035_it.o(.ARM.exidx.text.PWM1_HD_IRQHandler), (8 bytes).
Removing vk035_it.o(.ARM.exidx.text.PWM1_TZ_IRQHandler), (8 bytes).
Removing vk035_it.o(.ARM.exidx.text.PWM2_IRQHandler), (8 bytes).
Removing vk035_it.o(.ARM.exidx.text.PWM2_HD_IRQHandler), (8 bytes).
Removing vk035_it.o(.ARM.exidx.text.PWM2_TZ_IRQHandler), (8 bytes).
Removing vk035_it.o(.ARM.exidx.text.QEP_IRQHandler), (8 bytes).
Removing vk035_it.o(.ARM.exidx.text.ADC_SEQ0_IRQHandler), (8 bytes).
Removing vk035_it.o(.ARM.exidx.text.ADC_SEQ1_IRQHandler), (8 bytes).
Removing vk035_it.o(.ARM.exidx.text.ADC_DC_IRQHandler), (8 bytes).
Removing vk035_it.o(.ARM.exidx.text.CAN0_IRQHandler), (8 bytes).
Removing vk035_it.o(.ARM.exidx.text.CAN1_IRQHandler), (8 bytes).
Removing vk035_it.o(.ARM.exidx.text.CAN2_IRQHandler), (8 bytes).
Removing vk035_it.o(.ARM.exidx.text.CAN3_IRQHandler), (8 bytes).
Removing vk035_it.o(.ARM.exidx.text.CAN4_IRQHandler), (8 bytes).
Removing vk035_it.o(.ARM.exidx.text.CAN5_IRQHandler), (8 bytes).
Removing vk035_it.o(.ARM.exidx.text.CAN6_IRQHandler), (8 bytes).
Removing vk035_it.o(.ARM.exidx.text.CAN7_IRQHandler), (8 bytes).
Removing vk035_it.o(.ARM.exidx.text.CAN8_IRQHandler), (8 bytes).
Removing vk035_it.o(.ARM.exidx.text.CAN9_IRQHandler), (8 bytes).
Removing vk035_it.o(.ARM.exidx.text.CAN10_IRQHandler), (8 bytes).
Removing vk035_it.o(.ARM.exidx.text.CAN11_IRQHandler), (8 bytes).
Removing vk035_it.o(.ARM.exidx.text.CAN12_IRQHandler), (8 bytes).
Removing vk035_it.o(.ARM.exidx.text.CAN13_IRQHandler), (8 bytes).
Removing vk035_it.o(.ARM.exidx.text.CAN14_IRQHandler), (8 bytes).
Removing vk035_it.o(.ARM.exidx.text.CAN15_IRQHandler), (8 bytes).
Removing vk035_it.o(.ARM.exidx.text.FPU_IRQHandler), (8 bytes).
Removing vk035_it.o(.ARM.exidx.text.DMA_CH0_IRQHandler), (8 bytes).
Removing vk035_it.o(.ARM.exidx.text.DMA_CH1_IRQHandler), (8 bytes).
Removing vk035_it.o(.ARM.exidx.text.DMA_CH2_IRQHandler), (8 bytes).
Removing vk035_it.o(.ARM.exidx.text.DMA_CH3_IRQHandler), (8 bytes).
Removing vk035_it.o(.ARM.exidx.text.DMA_CH4_IRQHandler), (8 bytes).
Removing vk035_it.o(.ARM.exidx.text.DMA_CH5_IRQHandler), (8 bytes).
Removing vk035_it.o(.ARM.exidx.text.DMA_CH6_IRQHandler), (8 bytes).
Removing vk035_it.o(.ARM.exidx.text.DMA_CH7_IRQHandler), (8 bytes).
Removing vk035_it.o(.ARM.exidx.text.DMA_CH8_IRQHandler), (8 bytes).
Removing vk035_it.o(.ARM.exidx.text.DMA_CH9_IRQHandler), (8 bytes).
Removing vk035_it.o(.ARM.exidx.text.DMA_CH10_IRQHandler), (8 bytes).
Removing vk035_it.o(.ARM.exidx.text.DMA_CH11_IRQHandler), (8 bytes).
Removing vk035_it.o(.ARM.exidx.text.DMA_CH12_IRQHandler), (8 bytes).
Removing vk035_it.o(.ARM.exidx.text.DMA_CH13_IRQHandler), (8 bytes).
Removing vk035_it.o(.ARM.exidx.text.DMA_CH14_IRQHandler), (8 bytes).
Removing vk035_it.o(.ARM.exidx.text.DMA_CH15_IRQHandler), (8 bytes).
Removing vk035_it.o(.ARM.exidx.text.WDT_IRQHandler), (8 bytes).
Removing vk035_it.o(.ARM.exidx.text.RCU_IRQHandler), (8 bytes).
Removing vk035_it.o(.ARM.exidx.text.MFLASH_IRQHandler), (8 bytes).
Removing vk035_it.o(.ARM.exidx.text.NMI_Handler), (8 bytes).
Removing vk035_it.o(.ARM.exidx.text.HardFault_Handler), (8 bytes).
Removing vk035_it.o(.ARM.exidx.text.MemManage_Handler), (8 bytes).
Removing vk035_it.o(.ARM.exidx.text.BusFault_Handler), (8 bytes).
Removing vk035_it.o(.ARM.exidx.text.UsageFault_Handler), (8 bytes).
Removing vk035_it.o(.ARM.exidx.text.SVC_Handler), (8 bytes).
Removing vk035_it.o(.ARM.exidx.text.DebugMon_Handler), (8 bytes).
Removing vk035_it.o(.ARM.exidx.text.PendSV_Handler), (8 bytes).
Removing vk035_it.o(.ARM.exidx.text.SysTick_Handler), (8 bytes).
Removing segger_rtt.o(.text), (0 bytes).
Removing segger_rtt.o(.text.SEGGER_RTT_ReadUpBufferNoLock), (232 bytes).
Removing segger_rtt.o(.ARM.exidx.text.SEGGER_RTT_ReadUpBufferNoLock), (8 bytes).
Removing segger_rtt.o(.text.SEGGER_RTT_ReadNoLock), (232 bytes).
Removing segger_rtt.o(.ARM.exidx.text.SEGGER_RTT_ReadNoLock), (8 bytes).
Removing segger_rtt.o(.text.SEGGER_RTT_ReadUpBuffer), (28 bytes).
Removing segger_rtt.o(.ARM.exidx.text.SEGGER_RTT_ReadUpBuffer), (8 bytes).
Removing segger_rtt.o(.text.SEGGER_RTT_Read), (28 bytes).
Removing segger_rtt.o(.ARM.exidx.text.SEGGER_RTT_Read), (8 bytes).
Removing segger_rtt.o(.text.SEGGER_RTT_WriteWithOverwriteNoLock), (206 bytes).
Removing segger_rtt.o(.ARM.exidx.text.SEGGER_RTT_WriteWithOverwriteNoLock), (8 bytes).
Removing segger_rtt.o(.text.SEGGER_RTT_WriteDownBufferNoLock), (352 bytes).
Removing segger_rtt.o(.ARM.exidx.text.SEGGER_RTT_WriteDownBufferNoLock), (8 bytes).
Removing segger_rtt.o(.text.SEGGER_RTT_WriteNoLock), (368 bytes).
Removing segger_rtt.o(.ARM.exidx.text.SEGGER_RTT_WriteNoLock), (8 bytes).
Removing segger_rtt.o(.text.SEGGER_RTT_WriteDownBuffer), (158 bytes).
Removing segger_rtt.o(.ARM.exidx.text.SEGGER_RTT_WriteDownBuffer), (8 bytes).
Removing segger_rtt.o(.text.SEGGER_RTT_Write), (158 bytes).
Removing segger_rtt.o(.ARM.exidx.text.SEGGER_RTT_Write), (8 bytes).
Removing segger_rtt.o(.text.SEGGER_RTT_WriteString), (166 bytes).
Removing segger_rtt.o(.ARM.exidx.text.SEGGER_RTT_WriteString), (8 bytes).
Removing segger_rtt.o(.text.SEGGER_RTT_PutCharSkipNoLock), (66 bytes).
Removing segger_rtt.o(.ARM.exidx.text.SEGGER_RTT_PutCharSkipNoLock), (8 bytes).
Removing segger_rtt.o(.text.SEGGER_RTT_PutCharSkip), (196 bytes).
Removing segger_rtt.o(.ARM.exidx.text.SEGGER_RTT_PutCharSkip), (8 bytes).
Removing segger_rtt.o(.text.SEGGER_RTT_PutChar), (212 bytes).
Removing segger_rtt.o(.ARM.exidx.text.SEGGER_RTT_PutChar), (8 bytes).
Removing segger_rtt.o(.text.SEGGER_RTT_GetKey), (288 bytes).
Removing segger_rtt.o(.ARM.exidx.text.SEGGER_RTT_GetKey), (8 bytes).
Removing segger_rtt.o(.text.SEGGER_RTT_WaitKey), (14 bytes).
Removing segger_rtt.o(.ARM.exidx.text.SEGGER_RTT_WaitKey), (8 bytes).
Removing segger_rtt.o(.text.SEGGER_RTT_HasKey), (132 bytes).
Removing segger_rtt.o(.ARM.exidx.text.SEGGER_RTT_HasKey), (8 bytes).
Removing segger_rtt.o(.text.SEGGER_RTT_HasData), (24 bytes).
Removing segger_rtt.o(.ARM.exidx.text.SEGGER_RTT_HasData), (8 bytes).
Removing segger_rtt.o(.text.SEGGER_RTT_HasDataUp), (24 bytes).
Removing segger_rtt.o(.ARM.exidx.text.SEGGER_RTT_HasDataUp), (8 bytes).
Removing segger_rtt.o(.text.SEGGER_RTT_AllocDownBuffer), (220 bytes).
Removing segger_rtt.o(.ARM.exidx.text.SEGGER_RTT_AllocDownBuffer), (8 bytes).
Removing segger_rtt.o(.text.SEGGER_RTT_AllocUpBuffer), (220 bytes).
Removing segger_rtt.o(.ARM.exidx.text.SEGGER_RTT_AllocUpBuffer), (8 bytes).
Removing segger_rtt.o(.text.SEGGER_RTT_ConfigUpBuffer), (208 bytes).
Removing segger_rtt.o(.ARM.exidx.text.SEGGER_RTT_ConfigUpBuffer), (8 bytes).
Removing segger_rtt.o(.text.SEGGER_RTT_ConfigDownBuffer), (212 bytes).
Removing segger_rtt.o(.ARM.exidx.text.SEGGER_RTT_ConfigDownBuffer), (8 bytes).
Removing segger_rtt.o(.text.SEGGER_RTT_SetNameUpBuffer), (172 bytes).
Removing segger_rtt.o(.ARM.exidx.text.SEGGER_RTT_SetNameUpBuffer), (8 bytes).
Removing segger_rtt.o(.text.SEGGER_RTT_SetNameDownBuffer), (172 bytes).
Removing segger_rtt.o(.ARM.exidx.text.SEGGER_RTT_SetNameDownBuffer), (8 bytes).
Removing segger_rtt.o(.text.SEGGER_RTT_SetFlagsUpBuffer), (172 bytes).
Removing segger_rtt.o(.ARM.exidx.text.SEGGER_RTT_SetFlagsUpBuffer), (8 bytes).
Removing segger_rtt.o(.text.SEGGER_RTT_SetFlagsDownBuffer), (172 bytes).
Removing segger_rtt.o(.ARM.exidx.text.SEGGER_RTT_SetFlagsDownBuffer), (8 bytes).
Removing segger_rtt.o(.text.SEGGER_RTT_Init), (118 bytes).
Removing segger_rtt.o(.ARM.exidx.text.SEGGER_RTT_Init), (8 bytes).
Removing segger_rtt.o(.text.SEGGER_RTT_SetTerminal), (444 bytes).
Removing segger_rtt.o(.ARM.exidx.text.SEGGER_RTT_SetTerminal), (8 bytes).
Removing segger_rtt.o(.text.SEGGER_RTT_TerminalOut), (1226 bytes).
Removing segger_rtt.o(.ARM.exidx.text.SEGGER_RTT_TerminalOut), (8 bytes).
Removing segger_rtt.o(.text.SEGGER_RTT_GetAvailWriteSpace), (40 bytes).
Removing segger_rtt.o(.ARM.exidx.text.SEGGER_RTT_GetAvailWriteSpace), (8 bytes).
Removing segger_rtt.o(.text.SEGGER_RTT_GetBytesInBuffer), (34 bytes).
Removing segger_rtt.o(.ARM.exidx.text.SEGGER_RTT_GetBytesInBuffer), (8 bytes).
Removing segger_rtt.o(.bss._SEGGER_RTT), (168 bytes).
Removing segger_rtt.o(.rodata.cst16), (16 bytes).
Removing segger_rtt.o(.bss._ActiveTerminal), (1 bytes).
Removing segger_rtt.o(.rodata._DoInit._aInitStr), (17 bytes).
Removing segger_rtt.o(.rodata.str1.1), (9 bytes).
Removing segger_rtt.o(.bss._acUpBuffer), (4096 bytes).
Removing segger_rtt.o(.bss._acDownBuffer), (16 bytes).
Removing segger_rtt_printf.o(.text), (0 bytes).
Removing segger_rtt_printf.o(.text.SEGGER_RTT_vprintf), (1136 bytes).
Removing segger_rtt_printf.o(.ARM.exidx.text.SEGGER_RTT_vprintf), (8 bytes).
Removing segger_rtt_printf.o(.text._PrintUnsigned), (392 bytes).
Removing segger_rtt_printf.o(.ARM.exidx.text._PrintUnsigned), (8 bytes).
Removing segger_rtt_printf.o(.text.SEGGER_RTT_printf), (30 bytes).
Removing segger_rtt_printf.o(.ARM.exidx.text.SEGGER_RTT_printf), (8 bytes).
Removing filters.o(.text), (0 bytes).
Removing filters.o(.text.FilterMedian_Init), (78 bytes).
Removing filters.o(.ARM.exidx.text.FilterMedian_Init), (8 bytes).
Removing filters.o(.text.FilterMedian_Process), (124 bytes).
Removing filters.o(.ARM.exidx.text.FilterMedian_Process), (8 bytes).
Removing filters.o(.text.Filter_float_compare), (30 bytes).
Removing filters.o(.ARM.exidx.text.Filter_float_compare), (8 bytes).
Removing filters.o(.text.FilterExp_Init), (48 bytes).
Removing filters.o(.ARM.exidx.text.FilterExp_Init), (8 bytes).
Removing filters.o(.text.FilterExp_Process), (58 bytes).
Removing filters.o(.ARM.exidx.text.FilterExp_Process), (8 bytes).
Removing filters.o(.text.FilterAverage_Init), (66 bytes).
Removing filters.o(.ARM.exidx.text.FilterAverage_Init), (8 bytes).
Removing filters.o(.text.FilterAverage_Process), (76 bytes).
Removing filters.o(.ARM.exidx.text.FilterAverage_Process), (8 bytes).
Removing filters.o(.text.FilterPoly_Init), (70 bytes).
Removing filters.o(.ARM.exidx.text.FilterPoly_Init), (8 bytes).
Removing filters.o(.text.FilterPoly_Process), (64 bytes).
Removing filters.o(.ARM.exidx.text.FilterPoly_Process), (8 bytes).
Removing filters.o(.text.FilterLUT_Init), (80 bytes).
Removing filters.o(.ARM.exidx.text.FilterLUT_Init), (8 bytes).
Removing filters.o(.text.FilterLUT_Process), (232 bytes).
Removing filters.o(.ARM.exidx.text.FilterLUT_Process), (8 bytes).
Removing filters.o(.text.FilterRMS_Init), (74 bytes).
Removing filters.o(.ARM.exidx.text.FilterRMS_Init), (8 bytes).
Removing filters.o(.text.FilterRMS_Process), (164 bytes).
Removing filters.o(.ARM.exidx.text.FilterRMS_Process), (8 bytes).
Removing filters.o(.text.FilterMedianInt_Init), (84 bytes).
Removing filters.o(.ARM.exidx.text.FilterMedianInt_Init), (8 bytes).
Removing filters.o(.text.FilterMedianInt_Process), (238 bytes).
Removing filters.o(.ARM.exidx.text.FilterMedianInt_Process), (8 bytes).
Removing filters.o(.text.FilterExpInt_Init), (48 bytes).
Removing filters.o(.ARM.exidx.text.FilterExpInt_Init), (8 bytes).
Removing filters.o(.text.FilterExpInt_Process), (62 bytes).
Removing filters.o(.ARM.exidx.text.FilterExpInt_Process), (8 bytes).
Removing filters.o(.text.FilterAverageInt_Init), (70 bytes).
Removing filters.o(.ARM.exidx.text.FilterAverageInt_Init), (8 bytes).
Removing filters.o(.text.FilterAverageInt_Process), (68 bytes).
Removing filters.o(.ARM.exidx.text.FilterAverageInt_Process), (8 bytes).
Removing filters.o(.text.FilterPolyInt_Init), (72 bytes).
Removing filters.o(.ARM.exidx.text.FilterPolyInt_Init), (8 bytes).
Removing filters.o(.text.FilterPolyInt_Process), (104 bytes).
Removing filters.o(.ARM.exidx.text.FilterPolyInt_Process), (8 bytes).
Removing filters.o(.text.FilterLUTInt_Init), (80 bytes).
Removing filters.o(.ARM.exidx.text.FilterLUTInt_Init), (8 bytes).
Removing filters.o(.text.FilterLUTInt_Process), (208 bytes).
Removing filters.o(.ARM.exidx.text.FilterLUTInt_Process), (8 bytes).
Removing filters.o(.text.FilterRMSInt_Init), (92 bytes).
Removing filters.o(.ARM.exidx.text.FilterRMSInt_Init), (8 bytes).
Removing filters.o(.text.FilterRMSInt_Process), (206 bytes).
Removing filters.o(.ARM.exidx.text.FilterRMSInt_Process), (8 bytes).
Removing filters.o(.text.FilterBandPassDerivative_Init), (224 bytes).
Removing filters.o(.ARM.exidx.text.FilterBandPassDerivative_Init), (8 bytes).
Removing filters.o(.text.FilterBandPassDerivative_Process), (110 bytes).
Removing filters.o(.ARM.exidx.text.FilterBandPassDerivative_Process), (8 bytes).
Removing system_k1921vk035.o(.text), (0 bytes).
Removing system_k1921vk035.o(.ARM.exidx.text.SystemCoreClockUpdate), (8 bytes).
Removing system_k1921vk035.o(.text.ClkInit), (128 bytes).
Removing system_k1921vk035.o(.ARM.exidx.text.ClkInit), (8 bytes).
Removing system_k1921vk035.o(.text.FPUInit), (24 bytes).
Removing system_k1921vk035.o(.ARM.exidx.text.FPUInit), (8 bytes).
Removing system_k1921vk035.o(.ARM.exidx.text.SystemInit), (8 bytes).
Removing plib035_adc.o(.text), (0 bytes).
Removing plib035_adc.o(.text.ADC_DeInit), (26 bytes).
Removing plib035_adc.o(.ARM.exidx.text.ADC_DeInit), (8 bytes).
Removing plib035_adc.o(.ARM.exidx.text.ADC_SEQ_Init), (8 bytes).
Removing plib035_adc.o(.text.ADC_SEQ_StructInit), (26 bytes).
Removing plib035_adc.o(.ARM.exidx.text.ADC_SEQ_StructInit), (8 bytes).
Removing plib035_adc.o(.text.ADC_DC_Init), (136 bytes).
Removing plib035_adc.o(.ARM.exidx.text.ADC_DC_Init), (8 bytes).
Removing plib035_adc.o(.text.ADC_DC_StructInit), (12 bytes).
Removing plib035_adc.o(.ARM.exidx.text.ADC_DC_StructInit), (8 bytes).
Removing plib035_can.o(.text), (0 bytes).
Removing plib035_dma.o(.text), (0 bytes).
Removing plib035_dma.o(.text.DMA_ChannelDeInit), (10 bytes).
Removing plib035_dma.o(.ARM.exidx.text.DMA_ChannelDeInit), (8 bytes).
Removing plib035_dma.o(.text.DMA_ChannelInit), (246 bytes).
Removing plib035_dma.o(.ARM.exidx.text.DMA_ChannelInit), (8 bytes).
Removing plib035_dma.o(.text.DMA_ChannelStructInit), (30 bytes).
Removing plib035_dma.o(.ARM.exidx.text.DMA_ChannelStructInit), (8 bytes).
Removing plib035_dma.o(.text.DMA_DeInit), (30 bytes).
Removing plib035_dma.o(.ARM.exidx.text.DMA_DeInit), (8 bytes).
Removing plib035_dma.o(.text.DMA_Init), (122 bytes).
Removing plib035_dma.o(.ARM.exidx.text.DMA_Init), (8 bytes).
Removing plib035_dma.o(.text.DMA_StructInit), (14 bytes).
Removing plib035_dma.o(.ARM.exidx.text.DMA_StructInit), (8 bytes).
Removing plib035_ecap.o(.text), (0 bytes).
Removing plib035_ecap.o(.text.ECAP_DeInit), (54 bytes).
Removing plib035_ecap.o(.ARM.exidx.text.ECAP_DeInit), (8 bytes).
Removing plib035_ecap.o(.text.ECAP_Init), (66 bytes).
Removing plib035_ecap.o(.ARM.exidx.text.ECAP_Init), (8 bytes).
Removing plib035_ecap.o(.text.ECAP_StructInit), (6 bytes).
Removing plib035_ecap.o(.ARM.exidx.text.ECAP_StructInit), (8 bytes).
Removing plib035_ecap.o(.text.ECAP_PWM_Init), (28 bytes).
Removing plib035_ecap.o(.ARM.exidx.text.ECAP_PWM_Init), (8 bytes).
Removing plib035_ecap.o(.text.ECAP_PWM_StructInit), (18 bytes).
Removing plib035_ecap.o(.ARM.exidx.text.ECAP_PWM_StructInit), (8 bytes).
Removing plib035_ecap.o(.text.ECAP_Capture_Init), (120 bytes).
Removing plib035_ecap.o(.ARM.exidx.text.ECAP_Capture_Init), (8 bytes).
Removing plib035_ecap.o(.text.ECAP_Capture_StructInit), (16 bytes).
Removing plib035_ecap.o(.ARM.exidx.text.ECAP_Capture_StructInit), (8 bytes).
Removing plib035_gpio.o(.text), (0 bytes).
Removing plib035_gpio.o(.text.GPIO_OutModeConfig), (58 bytes).
Removing plib035_gpio.o(.ARM.exidx.text.GPIO_OutModeConfig), (8 bytes).
Removing plib035_gpio.o(.text.GPIO_InModeConfig), (58 bytes).
Removing plib035_gpio.o(.ARM.exidx.text.GPIO_InModeConfig), (8 bytes).
Removing plib035_gpio.o(.text.GPIO_PullModeConfig), (58 bytes).
Removing plib035_gpio.o(.ARM.exidx.text.GPIO_PullModeConfig), (8 bytes).
Removing plib035_gpio.o(.text.GPIO_DriveModeConfig), (58 bytes).
Removing plib035_gpio.o(.ARM.exidx.text.GPIO_DriveModeConfig), (8 bytes).
Removing plib035_gpio.o(.ARM.exidx.text.GPIO_DeInit), (8 bytes).
Removing plib035_gpio.o(.ARM.exidx.text.GPIO_Init), (8 bytes).
Removing plib035_gpio.o(.ARM.exidx.text.GPIO_StructInit), (8 bytes).
Removing plib035_i2c.o(.text), (0 bytes).
Removing plib035_i2c.o(.text.I2C_FSFreqConfig), (32 bytes).
Removing plib035_i2c.o(.ARM.exidx.text.I2C_FSFreqConfig), (8 bytes).
Removing plib035_i2c.o(.text.I2C_HSFreqConfig), (34 bytes).
Removing plib035_i2c.o(.ARM.exidx.text.I2C_HSFreqConfig), (8 bytes).
Removing plib035_mflash.o(.text), (0 bytes).
Removing plib035_mflash.o(.text.MFLASH_ReadData), (54 bytes).
Removing plib035_mflash.o(.ARM.exidx.text.MFLASH_ReadData), (8 bytes).
Removing plib035_mflash.o(.text.MFLASH_WriteData), (66 bytes).
Removing plib035_mflash.o(.ARM.exidx.text.MFLASH_WriteData), (8 bytes).
Removing plib035_mflash.o(.text.MFLASH_ErasePage), (36 bytes).
Removing plib035_mflash.o(.ARM.exidx.text.MFLASH_ErasePage), (8 bytes).
Removing plib035_mflash.o(.text.MFLASH_EraseFull), (36 bytes).
Removing plib035_mflash.o(.ARM.exidx.text.MFLASH_EraseFull), (8 bytes).
Removing plib035_pmu.o(.text), (0 bytes).
Removing plib035_pwm.o(.text), (0 bytes).
Removing plib035_pwm.o(.text.PWM_DeInit), (48 bytes).
Removing plib035_pwm.o(.ARM.exidx.text.PWM_DeInit), (8 bytes).
Removing plib035_pwm.o(.text.PWM_TB_Init), (108 bytes).
Removing plib035_pwm.o(.ARM.exidx.text.PWM_TB_Init), (8 bytes).
Removing plib035_pwm.o(.text.PWM_TB_StructInit), (14 bytes).
Removing plib035_pwm.o(.ARM.exidx.text.PWM_TB_StructInit), (8 bytes).
Removing plib035_pwm.o(.text.PWM_AQ_Init), (166 bytes).
Removing plib035_pwm.o(.ARM.exidx.text.PWM_AQ_Init), (8 bytes).
Removing plib035_pwm.o(.text.PWM_AQ_StructInit), (10 bytes).
Removing plib035_pwm.o(.ARM.exidx.text.PWM_AQ_StructInit), (8 bytes).
Removing plib035_pwm.o(.text.PWM_CMP_Init), (62 bytes).
Removing plib035_pwm.o(.ARM.exidx.text.PWM_CMP_Init), (8 bytes).
Removing plib035_pwm.o(.text.PWM_CMP_StructInit), (12 bytes).
Removing plib035_pwm.o(.ARM.exidx.text.PWM_CMP_StructInit), (8 bytes).
Removing plib035_pwm.o(.text.PWM_HD_Init), (82 bytes).
Removing plib035_pwm.o(.ARM.exidx.text.PWM_HD_Init), (8 bytes).
Removing plib035_pwm.o(.text.PWM_HD_StructInit), (14 bytes).
Removing plib035_pwm.o(.ARM.exidx.text.PWM_HD_StructInit), (8 bytes).
Removing plib035_pwm.o(.text.PWM_DB_Init), (40 bytes).
Removing plib035_pwm.o(.ARM.exidx.text.PWM_DB_Init), (8 bytes).
Removing plib035_pwm.o(.text.PWM_DB_StructInit), (12 bytes).
Removing plib035_pwm.o(.ARM.exidx.text.PWM_DB_StructInit), (8 bytes).
Removing plib035_pwm.o(.text.PWM_TZ_Init), (50 bytes).
Removing plib035_pwm.o(.ARM.exidx.text.PWM_TZ_Init), (8 bytes).
Removing plib035_pwm.o(.text.PWM_TZ_StructInit), (6 bytes).
Removing plib035_pwm.o(.ARM.exidx.text.PWM_TZ_StructInit), (8 bytes).
Removing plib035_pwm.o(.text.PWM_ET_Init), (186 bytes).
Removing plib035_pwm.o(.ARM.exidx.text.PWM_ET_Init), (8 bytes).
Removing plib035_pwm.o(.text.PWM_ET_StructInit), (24 bytes).
Removing plib035_pwm.o(.ARM.exidx.text.PWM_ET_StructInit), (8 bytes).
Removing plib035_qep.o(.text), (0 bytes).
Removing plib035_qep.o(.text.QEP_DeInit), (26 bytes).
Removing plib035_qep.o(.ARM.exidx.text.QEP_DeInit), (8 bytes).
Removing plib035_qep.o(.text.QEP_PC_Init), (146 bytes).
Removing plib035_qep.o(.ARM.exidx.text.QEP_PC_Init), (8 bytes).
Removing plib035_qep.o(.text.QEP_PC_StructInit), (16 bytes).
Removing plib035_qep.o(.ARM.exidx.text.QEP_PC_StructInit), (8 bytes).
Removing plib035_qep.o(.text.QEP_CMP_Init), (124 bytes).
Removing plib035_qep.o(.ARM.exidx.text.QEP_CMP_Init), (8 bytes).
Removing plib035_qep.o(.text.QEP_CMP_StructInit), (12 bytes).
Removing plib035_qep.o(.ARM.exidx.text.QEP_CMP_StructInit), (8 bytes).
Removing plib035_qep.o(.text.QEP_CAP_Init), (88 bytes).
Removing plib035_qep.o(.ARM.exidx.text.QEP_CAP_Init), (8 bytes).
Removing plib035_qep.o(.text.QEP_CAP_StructInit), (12 bytes).
Removing plib035_qep.o(.ARM.exidx.text.QEP_CAP_StructInit), (8 bytes).
Removing plib035_rcu.o(.text), (0 bytes).
Removing plib035_rcu.o(.ARM.exidx.text.RCU_GetOSIClkFreq), (8 bytes).
Removing plib035_rcu.o(.ARM.exidx.text.RCU_GetOSEClkFreq), (8 bytes).
Removing plib035_rcu.o(.ARM.exidx.text.RCU_GetPLLClkFreq), (8 bytes).
Removing plib035_rcu.o(.ARM.exidx.text.RCU_GetPLLDivClkFreq), (8 bytes).
Removing plib035_rcu.o(.text.RCU_GetSysClkFreq), (148 bytes).
Removing plib035_rcu.o(.ARM.exidx.text.RCU_GetSysClkFreq), (8 bytes).
Removing plib035_rcu.o(.ARM.exidx.text.RCU_GetUARTClkFreq), (8 bytes).
Removing plib035_rcu.o(.text.RCU_GetSPIClkFreq), (178 bytes).
Removing plib035_rcu.o(.ARM.exidx.text.RCU_GetSPIClkFreq), (8 bytes).
Removing plib035_rcu.o(.text.RCU_GetADCClkFreq), (184 bytes).
Removing plib035_rcu.o(.ARM.exidx.text.RCU_GetADCClkFreq), (8 bytes).
Removing plib035_rcu.o(.text.RCU_GetWDTClkFreq), (178 bytes).
Removing plib035_rcu.o(.ARM.exidx.text.RCU_GetWDTClkFreq), (8 bytes).
Removing plib035_rcu.o(.text.RCU_GetTraceClkFreq), (178 bytes).
Removing plib035_rcu.o(.ARM.exidx.text.RCU_GetTraceClkFreq), (8 bytes).
Removing plib035_rcu.o(.text.RCU_GetClkOutFreq), (178 bytes).
Removing plib035_rcu.o(.ARM.exidx.text.RCU_GetClkOutFreq), (8 bytes).
Removing plib035_rcu.o(.ARM.exidx.text.RCU_PLL_AutoConfig), (8 bytes).
Removing plib035_rcu.o(.text.RCU_PLL_StructInit), (14 bytes).
Removing plib035_rcu.o(.ARM.exidx.text.RCU_PLL_StructInit), (8 bytes).
Removing plib035_rcu.o(.text.RCU_PLL_Init), (126 bytes).
Removing plib035_rcu.o(.ARM.exidx.text.RCU_PLL_Init), (8 bytes).
Removing plib035_rcu.o(.text.RCU_SysClkChangeCmd), (54 bytes).
Removing plib035_rcu.o(.ARM.exidx.text.RCU_SysClkChangeCmd), (8 bytes).
Removing plib035_rcu.o(.text.RCU_PLL_DeInit), (24 bytes).
Removing plib035_rcu.o(.ARM.exidx.text.RCU_PLL_DeInit), (8 bytes).
Removing plib035_spi.o(.text), (0 bytes).
Removing plib035_spi.o(.text.SPI_DeInit), (26 bytes).
Removing plib035_spi.o(.ARM.exidx.text.SPI_DeInit), (8 bytes).
Removing plib035_spi.o(.text.SPI_Init), (56 bytes).
Removing plib035_spi.o(.ARM.exidx.text.SPI_Init), (8 bytes).
Removing plib035_spi.o(.text.SPI_StructInit), (16 bytes).
Removing plib035_spi.o(.ARM.exidx.text.SPI_StructInit), (8 bytes).
Removing plib035_tmr.o(.text), (0 bytes).
Removing plib035_tmr.o(.ARM.exidx.text.TMR_PeriodConfig), (8 bytes).
Removing plib035_tmr.o(.ARM.exidx.text.TMR_FreqConfig), (8 bytes).
Removing plib035_uart.o(.text), (0 bytes).
Removing plib035_uart.o(.text.UART_AutoBaudConfig), (104 bytes).
Removing plib035_uart.o(.ARM.exidx.text.UART_AutoBaudConfig), (8 bytes).
Removing plib035_uart.o(.ARM.exidx.text.UART_DeInit), (8 bytes).
Removing plib035_uart.o(.ARM.exidx.text.UART_Init), (8 bytes).
Removing plib035_uart.o(.text.UART_StructInit), (22 bytes).
Removing plib035_uart.o(.ARM.exidx.text.UART_StructInit), (8 bytes).
Removing plib035_wdt.o(.text), (0 bytes).
Removing retarget.o(.text), (0 bytes).
Removing retarget_conf.o(.text), (0 bytes).
Removing retarget_conf.o(.text.retarget_init), (2 bytes).
Removing retarget_conf.o(.ARM.exidx.text.retarget_init), (8 bytes).
Removing retarget_conf.o(.text.retarget_get_char), (4 bytes).
Removing retarget_conf.o(.ARM.exidx.text.retarget_get_char), (8 bytes).
Removing retarget_conf.o(.text.retarget_put_char), (4 bytes).
Removing retarget_conf.o(.ARM.exidx.text.retarget_put_char), (8 bytes).
448 unused section(s) (total 22125 bytes) removed from the image.
==============================================================================
Image Symbol Table
Local Symbols
Symbol Name Value Ov Type Size Object(Section)
../clib/angel/boardlib.s 0x00000000 Number 0 boardinit1.o ABSOLUTE
../clib/angel/boardlib.s 0x00000000 Number 0 boardinit2.o ABSOLUTE
../clib/angel/boardlib.s 0x00000000 Number 0 boardinit3.o ABSOLUTE
../clib/angel/boardlib.s 0x00000000 Number 0 boardshut.o ABSOLUTE
../clib/angel/dczerorl2.s 0x00000000 Number 0 __dczerorl2.o ABSOLUTE
../clib/angel/handlers.s 0x00000000 Number 0 __scatter_zi.o ABSOLUTE
../clib/angel/kernel.s 0x00000000 Number 0 __rtentry.o ABSOLUTE
../clib/angel/kernel.s 0x00000000 Number 0 __rtentry2.o ABSOLUTE
../clib/angel/kernel.s 0x00000000 Number 0 __rtentry4.o ABSOLUTE
../clib/angel/kernel.s 0x00000000 Number 0 rtexit.o ABSOLUTE
../clib/angel/kernel.s 0x00000000 Number 0 rtexit2.o ABSOLUTE
../clib/angel/rt.s 0x00000000 Number 0 aeabi_ldiv0.o ABSOLUTE
../clib/angel/rt.s 0x00000000 Number 0 aeabi_ldiv0_sigfpe.o ABSOLUTE
../clib/angel/rt.s 0x00000000 Number 0 rt_div0.o ABSOLUTE
../clib/angel/rt.s 0x00000000 Number 0 rt_errno_addr.o ABSOLUTE
../clib/angel/rt.s 0x00000000 Number 0 rt_errno_addr_intlibspace.o ABSOLUTE
../clib/angel/rt.s 0x00000000 Number 0 rt_raise.o ABSOLUTE
../clib/angel/scatter.s 0x00000000 Number 0 __scatter.o ABSOLUTE
../clib/angel/startup.s 0x00000000 Number 0 __main.o ABSOLUTE
../clib/angel/sys.s 0x00000000 Number 0 libspace.o ABSOLUTE
../clib/angel/sys.s 0x00000000 Number 0 sys_stackheap_outer.o ABSOLUTE
../clib/angel/sys.s 0x00000000 Number 0 use_no_semi.o ABSOLUTE
../clib/angel/sys.s 0x00000000 Number 0 indicate_semi.o ABSOLUTE
../clib/angel/sysapp.c 0x00000000 Number 0 sys_exit.o ABSOLUTE
../clib/angel/sysapp.c 0x00000000 Number 0 sys_exit_hlt.o ABSOLUTE
../clib/angel/sysapp.c 0x00000000 Number 0 sys_wrch.o ABSOLUTE
../clib/angel/sysapp.c 0x00000000 Number 0 sys_wrch_hlt.o ABSOLUTE
../clib/angel/sysapp.c 0x00000000 Number 0 sys_command.o ABSOLUTE
../clib/angel/sysapp.c 0x00000000 Number 0 sys_command_hlt.o ABSOLUTE
../clib/armsys.c 0x00000000 Number 0 argv_veneer.o ABSOLUTE
../clib/armsys.c 0x00000000 Number 0 argv_veneer.o ABSOLUTE
../clib/armsys.c 0x00000000 Number 0 _get_argv_nomalloc.o ABSOLUTE
../clib/armsys.c 0x00000000 Number 0 no_argv.o ABSOLUTE
../clib/fenv.c 0x00000000 Number 0 _rserrno.o ABSOLUTE
../clib/heapalloc.c 0x00000000 Number 0 hrguard.o ABSOLUTE
../clib/heapaux.c 0x00000000 Number 0 heapauxi.o ABSOLUTE
../clib/libinit.s 0x00000000 Number 0 libinit.o ABSOLUTE
../clib/libinit.s 0x00000000 Number 0 libinit2.o ABSOLUTE
../clib/libinit.s 0x00000000 Number 0 libshutdown.o ABSOLUTE
../clib/libinit.s 0x00000000 Number 0 libshutdown2.o ABSOLUTE
../clib/longlong.s 0x00000000 Number 0 llsdiv.o ABSOLUTE
../clib/longlong.s 0x00000000 Number 0 lludivv7m.o ABSOLUTE
../clib/memcpset.s 0x00000000 Number 0 rt_memcpy_v6.o ABSOLUTE
../clib/memcpset.s 0x00000000 Number 0 rt_memcpy_w.o ABSOLUTE
../clib/memcpset.s 0x00000000 Number 0 rt_memclr_w.o ABSOLUTE
../clib/signal.c 0x00000000 Number 0 defsig_fpe_outer.o ABSOLUTE
../clib/signal.c 0x00000000 Number 0 defsig_fpe_formal.o ABSOLUTE
../clib/signal.c 0x00000000 Number 0 defsig_exit.o ABSOLUTE
../clib/signal.c 0x00000000 Number 0 defsig_fpe_inner.o ABSOLUTE
../clib/signal.c 0x00000000 Number 0 __raise.o ABSOLUTE
../clib/signal.c 0x00000000 Number 0 defsig_general.o ABSOLUTE
../clib/signal.c 0x00000000 Number 0 defsig_abrt_inner.o ABSOLUTE
../clib/signal.c 0x00000000 Number 0 defsig_rtred_inner.o ABSOLUTE
../clib/signal.c 0x00000000 Number 0 defsig_rtmem_inner.o ABSOLUTE
../clib/signal.c 0x00000000 Number 0 defsig_rtmem_outer.o ABSOLUTE
../clib/signal.c 0x00000000 Number 0 defsig_rtmem_formal.o ABSOLUTE
../clib/signal.c 0x00000000 Number 0 defsig_stak_inner.o ABSOLUTE
../clib/signal.c 0x00000000 Number 0 defsig_pvfn_inner.o ABSOLUTE
../clib/signal.c 0x00000000 Number 0 defsig_cppl_inner.o ABSOLUTE
../clib/signal.c 0x00000000 Number 0 defsig_segv_inner.o ABSOLUTE
../clib/signal.c 0x00000000 Number 0 defsig_other.o ABSOLUTE
../clib/signal.s 0x00000000 Number 0 defsig.o ABSOLUTE
../clib/stdlib.c 0x00000000 Number 0 qsortnoex.o ABSOLUTE
../clib/stdlib.c 0x00000000 Number 0 exit.o ABSOLUTE
../clib/string.c 0x00000000 Number 0 strlen.o ABSOLUTE
../fplib/ffltll.s 0x00000000 Number 0 ffltll_clz.o ABSOLUTE
../fplib/fpinit.s 0x00000000 Number 0 fpinit.o ABSOLUTE
../fplib/usenofp.s 0x00000000 Number 0 usenofp.o ABSOLUTE
../mathlib/cosf.c 0x00000000 Number 0 cosf.o ABSOLUTE
../mathlib/fpclassifyf.c 0x00000000 Number 0 fpclassifyf.o ABSOLUTE
../mathlib/funder.c 0x00000000 Number 0 funder.o ABSOLUTE
../mathlib/rredf.c 0x00000000 Number 0 rredf.o ABSOLUTE
../mathlib/sinf.c 0x00000000 Number 0 sinf.o ABSOLUTE
SEGGER_RTT.c 0x00000000 Number 0 segger_rtt.o ABSOLUTE
SEGGER_RTT_printf.c 0x00000000 Number 0 segger_rtt_printf.o ABSOLUTE
adc.c 0x00000000 Number 0 adc.o ABSOLUTE
dc.s 0x00000000 Number 0 dc.o ABSOLUTE
filters.c 0x00000000 Number 0 filters.o ABSOLUTE
gpio.c 0x00000000 Number 0 gpio.o ABSOLUTE
main.c 0x00000000 Number 0 main.o ABSOLUTE
platform\Device\NIIET\K1921VK035\Source\ARM\startup_K1921VK035.s 0x00000000 Number 0 startup_k1921vk035.o ABSOLUTE
plib035_adc.c 0x00000000 Number 0 plib035_adc.o ABSOLUTE
plib035_can.c 0x00000000 Number 0 plib035_can.o ABSOLUTE
plib035_dma.c 0x00000000 Number 0 plib035_dma.o ABSOLUTE
plib035_ecap.c 0x00000000 Number 0 plib035_ecap.o ABSOLUTE
plib035_gpio.c 0x00000000 Number 0 plib035_gpio.o ABSOLUTE
plib035_i2c.c 0x00000000 Number 0 plib035_i2c.o ABSOLUTE
plib035_mflash.c 0x00000000 Number 0 plib035_mflash.o ABSOLUTE
plib035_pmu.c 0x00000000 Number 0 plib035_pmu.o ABSOLUTE
plib035_pwm.c 0x00000000 Number 0 plib035_pwm.o ABSOLUTE
plib035_qep.c 0x00000000 Number 0 plib035_qep.o ABSOLUTE
plib035_rcu.c 0x00000000 Number 0 plib035_rcu.o ABSOLUTE
plib035_spi.c 0x00000000 Number 0 plib035_spi.o ABSOLUTE
plib035_tmr.c 0x00000000 Number 0 plib035_tmr.o ABSOLUTE
plib035_uart.c 0x00000000 Number 0 plib035_uart.o ABSOLUTE
plib035_wdt.c 0x00000000 Number 0 plib035_wdt.o ABSOLUTE
retarget.c 0x00000000 Number 0 retarget.o ABSOLUTE
retarget_conf.c 0x00000000 Number 0 retarget_conf.o ABSOLUTE
sysclk.c 0x00000000 Number 0 sysclk.o ABSOLUTE
system_K1921VK035.c 0x00000000 Number 0 system_k1921vk035.o ABSOLUTE
tmr.c 0x00000000 Number 0 tmr.o ABSOLUTE
uart.c 0x00000000 Number 0 uart.o ABSOLUTE
vk035_it.c 0x00000000 Number 0 vk035_it.o ABSOLUTE
RESET 0x00000000 Section 344 startup_k1921vk035.o(RESET)
!!!main 0x00000158 Section 8 __main.o(!!!main)
!!!scatter 0x00000160 Section 52 __scatter.o(!!!scatter)
!!dczerorl2 0x00000194 Section 90 __dczerorl2.o(!!dczerorl2)
!!handler_zi 0x000001f0 Section 28 __scatter_zi.o(!!handler_zi)
.ARM.Collect$$libinit$$00000000 0x0000020c Section 2 libinit.o(.ARM.Collect$$libinit$$00000000)
.ARM.Collect$$libinit$$00000001 0x0000020e Section 4 libinit2.o(.ARM.Collect$$libinit$$00000001)
.ARM.Collect$$libinit$$00000004 0x00000212 Section 0 libinit2.o(.ARM.Collect$$libinit$$00000004)
.ARM.Collect$$libinit$$00000006 0x00000212 Section 0 libinit2.o(.ARM.Collect$$libinit$$00000006)
.ARM.Collect$$libinit$$0000000C 0x00000212 Section 0 libinit2.o(.ARM.Collect$$libinit$$0000000C)
.ARM.Collect$$libinit$$0000000E 0x00000212 Section 0 libinit2.o(.ARM.Collect$$libinit$$0000000E)
.ARM.Collect$$libinit$$00000010 0x00000212 Section 0 libinit2.o(.ARM.Collect$$libinit$$00000010)
.ARM.Collect$$libinit$$00000013 0x00000212 Section 0 libinit2.o(.ARM.Collect$$libinit$$00000013)
.ARM.Collect$$libinit$$00000015 0x00000212 Section 0 libinit2.o(.ARM.Collect$$libinit$$00000015)
.ARM.Collect$$libinit$$00000017 0x00000212 Section 0 libinit2.o(.ARM.Collect$$libinit$$00000017)
.ARM.Collect$$libinit$$00000019 0x00000212 Section 0 libinit2.o(.ARM.Collect$$libinit$$00000019)
.ARM.Collect$$libinit$$0000001B 0x00000212 Section 0 libinit2.o(.ARM.Collect$$libinit$$0000001B)
.ARM.Collect$$libinit$$0000001D 0x00000212 Section 0 libinit2.o(.ARM.Collect$$libinit$$0000001D)
.ARM.Collect$$libinit$$0000001F 0x00000212 Section 0 libinit2.o(.ARM.Collect$$libinit$$0000001F)
.ARM.Collect$$libinit$$00000021 0x00000212 Section 0 libinit2.o(.ARM.Collect$$libinit$$00000021)
.ARM.Collect$$libinit$$00000023 0x00000212 Section 0 libinit2.o(.ARM.Collect$$libinit$$00000023)
.ARM.Collect$$libinit$$00000025 0x00000212 Section 0 libinit2.o(.ARM.Collect$$libinit$$00000025)
.ARM.Collect$$libinit$$00000027 0x00000212 Section 0 libinit2.o(.ARM.Collect$$libinit$$00000027)
.ARM.Collect$$libinit$$0000002E 0x00000212 Section 0 libinit2.o(.ARM.Collect$$libinit$$0000002E)
.ARM.Collect$$libinit$$00000030 0x00000212 Section 0 libinit2.o(.ARM.Collect$$libinit$$00000030)
.ARM.Collect$$libinit$$00000032 0x00000212 Section 0 libinit2.o(.ARM.Collect$$libinit$$00000032)
.ARM.Collect$$libinit$$00000034 0x00000212 Section 0 libinit2.o(.ARM.Collect$$libinit$$00000034)
.ARM.Collect$$libinit$$00000035 0x00000212 Section 2 libinit2.o(.ARM.Collect$$libinit$$00000035)
.ARM.Collect$$libshutdown$$00000000 0x00000214 Section 2 libshutdown.o(.ARM.Collect$$libshutdown$$00000000)
.ARM.Collect$$libshutdown$$00000002 0x00000216 Section 0 libshutdown2.o(.ARM.Collect$$libshutdown$$00000002)
.ARM.Collect$$libshutdown$$00000004 0x00000216 Section 0 libshutdown2.o(.ARM.Collect$$libshutdown$$00000004)
.ARM.Collect$$libshutdown$$00000007 0x00000216 Section 0 libshutdown2.o(.ARM.Collect$$libshutdown$$00000007)
.ARM.Collect$$libshutdown$$0000000A 0x00000216 Section 0 libshutdown2.o(.ARM.Collect$$libshutdown$$0000000A)
.ARM.Collect$$libshutdown$$0000000C 0x00000216 Section 0 libshutdown2.o(.ARM.Collect$$libshutdown$$0000000C)
.ARM.Collect$$libshutdown$$0000000F 0x00000216 Section 0 libshutdown2.o(.ARM.Collect$$libshutdown$$0000000F)
.ARM.Collect$$libshutdown$$00000010 0x00000216 Section 2 libshutdown2.o(.ARM.Collect$$libshutdown$$00000010)
.ARM.Collect$$rtentry$$00000000 0x00000218 Section 0 __rtentry.o(.ARM.Collect$$rtentry$$00000000)
.ARM.Collect$$rtentry$$00000002 0x00000218 Section 0 __rtentry2.o(.ARM.Collect$$rtentry$$00000002)
.ARM.Collect$$rtentry$$00000004 0x00000218 Section 6 __rtentry4.o(.ARM.Collect$$rtentry$$00000004)
.ARM.Collect$$rtentry$$00000009 0x0000021e Section 0 __rtentry2.o(.ARM.Collect$$rtentry$$00000009)
.ARM.Collect$$rtentry$$0000000A 0x0000021e Section 4 __rtentry2.o(.ARM.Collect$$rtentry$$0000000A)
.ARM.Collect$$rtentry$$0000000C 0x00000222 Section 0 __rtentry2.o(.ARM.Collect$$rtentry$$0000000C)
.ARM.Collect$$rtentry$$0000000D 0x00000222 Section 8 __rtentry2.o(.ARM.Collect$$rtentry$$0000000D)
.ARM.Collect$$rtexit$$00000000 0x0000022a Section 2 rtexit.o(.ARM.Collect$$rtexit$$00000000)
.ARM.Collect$$rtexit$$00000002 0x0000022c Section 0 rtexit2.o(.ARM.Collect$$rtexit$$00000002)
.ARM.Collect$$rtexit$$00000003 0x0000022c Section 4 rtexit2.o(.ARM.Collect$$rtexit$$00000003)
.ARM.Collect$$rtexit$$00000004 0x00000230 Section 6 rtexit2.o(.ARM.Collect$$rtexit$$00000004)
$v0 0x00000238 Number 0 startup_k1921vk035.o(.text)
.text 0x00000238 Section 64 startup_k1921vk035.o(.text)
.text 0x00000278 Section 0 heapauxi.o(.text)
.text 0x00000280 Section 8 libspace.o(.text)
.text 0x00000288 Section 74 sys_stackheap_outer.o(.text)
.text 0x000002d2 Section 0 exit.o(.text)
.text 0x000002e4 Section 0 sys_exit.o(.text)
.text 0x000002f0 Section 2 use_no_semi.o(.text)
.text 0x000002f2 Section 0 indicate_semi.o(.text)
[Anonymous Symbol] 0x000002f4 Section 0 vk035_it.o(.text.ADC_DC_IRQHandler)
[Anonymous Symbol] 0x000002f8 Section 0 vk035_it.o(.text.ADC_SEQ0_IRQHandler)
[Anonymous Symbol] 0x00000308 Section 0 vk035_it.o(.text.ADC_SEQ1_IRQHandler)
[Anonymous Symbol] 0x00000318 Section 0 plib035_adc.o(.text.ADC_SEQ_Init)
[Anonymous Symbol] 0x00000424 Section 0 vk035_it.o(.text.BusFault_Handler)
[Anonymous Symbol] 0x00000428 Section 0 vk035_it.o(.text.CAN0_IRQHandler)
[Anonymous Symbol] 0x0000042c Section 0 vk035_it.o(.text.CAN10_IRQHandler)
[Anonymous Symbol] 0x00000430 Section 0 vk035_it.o(.text.CAN11_IRQHandler)
[Anonymous Symbol] 0x00000434 Section 0 vk035_it.o(.text.CAN12_IRQHandler)
[Anonymous Symbol] 0x00000438 Section 0 vk035_it.o(.text.CAN13_IRQHandler)
[Anonymous Symbol] 0x0000043c Section 0 vk035_it.o(.text.CAN14_IRQHandler)
[Anonymous Symbol] 0x00000440 Section 0 vk035_it.o(.text.CAN15_IRQHandler)
[Anonymous Symbol] 0x00000444 Section 0 vk035_it.o(.text.CAN1_IRQHandler)
[Anonymous Symbol] 0x00000448 Section 0 vk035_it.o(.text.CAN2_IRQHandler)
[Anonymous Symbol] 0x0000044c Section 0 vk035_it.o(.text.CAN3_IRQHandler)
[Anonymous Symbol] 0x00000450 Section 0 vk035_it.o(.text.CAN4_IRQHandler)
[Anonymous Symbol] 0x00000454 Section 0 vk035_it.o(.text.CAN5_IRQHandler)
[Anonymous Symbol] 0x00000458 Section 0 vk035_it.o(.text.CAN6_IRQHandler)
[Anonymous Symbol] 0x0000045c Section 0 vk035_it.o(.text.CAN7_IRQHandler)
[Anonymous Symbol] 0x00000460 Section 0 vk035_it.o(.text.CAN8_IRQHandler)
[Anonymous Symbol] 0x00000464 Section 0 vk035_it.o(.text.CAN9_IRQHandler)
[Anonymous Symbol] 0x00000468 Section 0 vk035_it.o(.text.DMA_CH0_IRQHandler)
[Anonymous Symbol] 0x0000046c Section 0 vk035_it.o(.text.DMA_CH10_IRQHandler)
[Anonymous Symbol] 0x00000470 Section 0 vk035_it.o(.text.DMA_CH11_IRQHandler)
[Anonymous Symbol] 0x00000474 Section 0 vk035_it.o(.text.DMA_CH12_IRQHandler)
[Anonymous Symbol] 0x00000478 Section 0 vk035_it.o(.text.DMA_CH13_IRQHandler)
[Anonymous Symbol] 0x0000047c Section 0 vk035_it.o(.text.DMA_CH14_IRQHandler)
[Anonymous Symbol] 0x00000480 Section 0 vk035_it.o(.text.DMA_CH15_IRQHandler)
[Anonymous Symbol] 0x00000484 Section 0 vk035_it.o(.text.DMA_CH1_IRQHandler)
[Anonymous Symbol] 0x00000488 Section 0 vk035_it.o(.text.DMA_CH2_IRQHandler)
[Anonymous Symbol] 0x0000048c Section 0 vk035_it.o(.text.DMA_CH3_IRQHandler)
[Anonymous Symbol] 0x00000490 Section 0 vk035_it.o(.text.DMA_CH4_IRQHandler)
[Anonymous Symbol] 0x00000494 Section 0 vk035_it.o(.text.DMA_CH5_IRQHandler)
[Anonymous Symbol] 0x00000498 Section 0 vk035_it.o(.text.DMA_CH6_IRQHandler)
[Anonymous Symbol] 0x0000049c Section 0 vk035_it.o(.text.DMA_CH7_IRQHandler)
[Anonymous Symbol] 0x000004a0 Section 0 vk035_it.o(.text.DMA_CH8_IRQHandler)
[Anonymous Symbol] 0x000004a4 Section 0 vk035_it.o(.text.DMA_CH9_IRQHandler)
[Anonymous Symbol] 0x000004a8 Section 0 vk035_it.o(.text.DebugMon_Handler)
[Anonymous Symbol] 0x000004ac Section 0 vk035_it.o(.text.ECAP0_IRQHandler)
[Anonymous Symbol] 0x000004b0 Section 0 vk035_it.o(.text.ECAP1_IRQHandler)
[Anonymous Symbol] 0x000004b4 Section 0 vk035_it.o(.text.ECAP2_IRQHandler)
[Anonymous Symbol] 0x000004b8 Section 0 main.o(.text.Error_Handler)
[Anonymous Symbol] 0x000004c4 Section 0 vk035_it.o(.text.FPU_IRQHandler)
[Anonymous Symbol] 0x000004c8 Section 0 vk035_it.o(.text.GPIOA_IRQHandler)
[Anonymous Symbol] 0x000004cc Section 0 vk035_it.o(.text.GPIOB_IRQHandler)
[Anonymous Symbol] 0x000004d0 Section 0 plib035_gpio.o(.text.GPIO_DeInit)
[Anonymous Symbol] 0x000004f8 Section 0 plib035_gpio.o(.text.GPIO_Init)
[Anonymous Symbol] 0x000005f8 Section 0 plib035_gpio.o(.text.GPIO_StructInit)
[Anonymous Symbol] 0x00000608 Section 0 vk035_it.o(.text.HardFault_Handler)
[Anonymous Symbol] 0x0000060c Section 0 vk035_it.o(.text.I2C_IRQHandler)
[Anonymous Symbol] 0x00000610 Section 0 vk035_it.o(.text.MFLASH_IRQHandler)
[Anonymous Symbol] 0x00000614 Section 0 vk035_it.o(.text.MemManage_Handler)
[Anonymous Symbol] 0x00000618 Section 0 vk035_it.o(.text.NMI_Handler)
[Anonymous Symbol] 0x0000061c Section 0 vk035_it.o(.text.PWM0_HD_IRQHandler)
[Anonymous Symbol] 0x00000620 Section 0 vk035_it.o(.text.PWM0_IRQHandler)
[Anonymous Symbol] 0x00000624 Section 0 vk035_it.o(.text.PWM0_TZ_IRQHandler)
[Anonymous Symbol] 0x00000628 Section 0 vk035_it.o(.text.PWM1_HD_IRQHandler)
[Anonymous Symbol] 0x0000062c Section 0 vk035_it.o(.text.PWM1_IRQHandler)
[Anonymous Symbol] 0x00000630 Section 0 vk035_it.o(.text.PWM1_TZ_IRQHandler)
[Anonymous Symbol] 0x00000634 Section 0 vk035_it.o(.text.PWM2_HD_IRQHandler)
[Anonymous Symbol] 0x00000638 Section 0 vk035_it.o(.text.PWM2_IRQHandler)
[Anonymous Symbol] 0x0000063c Section 0 vk035_it.o(.text.PWM2_TZ_IRQHandler)
[Anonymous Symbol] 0x00000640 Section 0 vk035_it.o(.text.PendSV_Handler)
[Anonymous Symbol] 0x00000644 Section 0 vk035_it.o(.text.QEP_IRQHandler)
[Anonymous Symbol] 0x00000648 Section 0 plib035_rcu.o(.text.RCU_GetOSEClkFreq)
[Anonymous Symbol] 0x00000654 Section 0 plib035_rcu.o(.text.RCU_GetOSIClkFreq)
[Anonymous Symbol] 0x00000660 Section 0 plib035_rcu.o(.text.RCU_GetPLLClkFreq)
[Anonymous Symbol] 0x0000069c Section 0 plib035_rcu.o(.text.RCU_GetPLLDivClkFreq)
[Anonymous Symbol] 0x000006e8 Section 0 plib035_rcu.o(.text.RCU_GetUARTClkFreq)
[Anonymous Symbol] 0x000007b0 Section 0 vk035_it.o(.text.RCU_IRQHandler)
[Anonymous Symbol] 0x000007b4 Section 0 plib035_rcu.o(.text.RCU_PLL_AutoConfig)
[Anonymous Symbol] 0x000009d0 Section 0 vk035_it.o(.text.SPI_RO_RT_IRQHandler)
[Anonymous Symbol] 0x000009d4 Section 0 vk035_it.o(.text.SPI_RX_IRQHandler)
[Anonymous Symbol] 0x000009d8 Section 0 vk035_it.o(.text.SPI_TX_IRQHandler)
[Anonymous Symbol] 0x000009dc Section 0 vk035_it.o(.text.SVC_Handler)
[Anonymous Symbol] 0x000009e0 Section 0 vk035_it.o(.text.SysTick_Handler)
[Anonymous Symbol] 0x000009e4 Section 0 system_k1921vk035.o(.text.SystemCoreClockUpdate)
[Anonymous Symbol] 0x00000a58 Section 0 system_k1921vk035.o(.text.SystemInit)
[Anonymous Symbol] 0x00000af0 Section 0 vk035_it.o(.text.TMR0_IRQHandler)
[Anonymous Symbol] 0x00000afc Section 0 vk035_it.o(.text.TMR1_IRQHandler)
[Anonymous Symbol] 0x00000b08 Section 0 vk035_it.o(.text.TMR2_IRQHandler)
[Anonymous Symbol] 0x00000b14 Section 0 vk035_it.o(.text.TMR3_IRQHandler)
[Anonymous Symbol] 0x00000b20 Section 0 plib035_tmr.o(.text.TMR_FreqConfig)
[Anonymous Symbol] 0x00000b28 Section 0 tmr.o(.text.TMR_Init)
[Anonymous Symbol] 0x00000ba0 Section 0 plib035_tmr.o(.text.TMR_PeriodConfig)
[Anonymous Symbol] 0x00000bb4 Section 0 vk035_it.o(.text.UART0_E_RT_IRQHandler)
[Anonymous Symbol] 0x00000bc0 Section 0 vk035_it.o(.text.UART0_RX_IRQHandler)
[Anonymous Symbol] 0x00000bcc Section 0 vk035_it.o(.text.UART0_TD_IRQHandler)
[Anonymous Symbol] 0x00000bd8 Section 0 vk035_it.o(.text.UART0_TX_IRQHandler)
[Anonymous Symbol] 0x00000be4 Section 0 vk035_it.o(.text.UART1_E_RT_IRQHandler)
[Anonymous Symbol] 0x00000bf0 Section 0 vk035_it.o(.text.UART1_RX_IRQHandler)
[Anonymous Symbol] 0x00000bfc Section 0 vk035_it.o(.text.UART1_TD_IRQHandler)
[Anonymous Symbol] 0x00000c08 Section 0 vk035_it.o(.text.UART1_TX_IRQHandler)
[Anonymous Symbol] 0x00000c14 Section 0 plib035_uart.o(.text.UART_DeInit)
[Anonymous Symbol] 0x00000c44 Section 0 plib035_uart.o(.text.UART_Init)
[Anonymous Symbol] 0x00000cfc Section 0 vk035_it.o(.text.UsageFault_Handler)
[Anonymous Symbol] 0x00000d00 Section 0 vk035_it.o(.text.WDT_IRQHandler)
[Anonymous Symbol] 0x00000d04 Section 0 adc.o(.text.adc_init_first)
[Anonymous Symbol] 0x00000d98 Section 0 adc.o(.text.adc_seq_handler)
[Anonymous Symbol] 0x00000f1c Section 0 adc.o(.text.adc_seq_start)
[Anonymous Symbol] 0x00000fa0 Section 0 adc.o(.text.adc_sw_start)
[Anonymous Symbol] 0x00000fb0 Section 0 gpio.o(.text.gpio_get_init)
[Anonymous Symbol] 0x00001000 Section 0 gpio.o(.text.gpio_init)
[Anonymous Symbol] 0x00001078 Section 0 main.o(.text.heartbit)
[Anonymous Symbol] 0x0000109c Section 0 main.o(.text.main)
[Anonymous Symbol] 0x00001114 Section 0 sysclk.o(.text.millis)
[Anonymous Symbol] 0x00001120 Section 0 sysclk.o(.text.millis_inc)
[Anonymous Symbol] 0x00001130 Section 0 main.o(.text.periph_init)
[Anonymous Symbol] 0x000011bc Section 0 sysclk.o(.text.rcu_set_clock_adc)
[Anonymous Symbol] 0x00001258 Section 0 main.o(.text.restart_receive)
[Anonymous Symbol] 0x00001284 Section 0 sysclk.o(.text.sysclk_init)
[Anonymous Symbol] 0x000012fc Section 0 tmr.o(.text.tmr_delay)
[Anonymous Symbol] 0x00001324 Section 0 tmr.o(.text.tmr_delay_done)
[Anonymous Symbol] 0x00001354 Section 0 tmr.o(.text.tmr_delay_start)
[Anonymous Symbol] 0x00001368 Section 0 tmr.o(.text.tmr_handler)
[Anonymous Symbol] 0x00001394 Section 0 tmr.o(.text.tmr_init_first)
[Anonymous Symbol] 0x00001460 Section 0 tmr.o(.text.tmr_set_callback)
[Anonymous Symbol] 0x00001478 Section 0 tmr.o(.text.tmr_start)
[Anonymous Symbol] 0x00001490 Section 0 uart.o(.text.uart1_gpio_init)
[Anonymous Symbol] 0x00001510 Section 0 uart.o(.text.uart_handler)
[Anonymous Symbol] 0x00001600 Section 0 uart.o(.text.uart_init_first)
[Anonymous Symbol] 0x00001674 Section 0 uart.o(.text.uart_receive_it)
[Anonymous Symbol] 0x000016ac Section 0 uart.o(.text.uart_set_callback)
[Anonymous Symbol] 0x000016dc Section 0 uart.o(.text.uart_start)
[Anonymous Symbol] 0x00001724 Section 0 uart.o(.text.uart_transmit)
[Anonymous Symbol] 0x000017c4 Section 0 uart.o(.text.uart_transmit_it)
$v0 0x0000183c Number 0 fpinit.o(x$fpl$fpinit)
x$fpl$fpinit 0x0000183c Section 26 fpinit.o(x$fpl$fpinit)
adc_seq0_config 0x20000000 Data 56 adc.o(.data.adc_seq0_config)
[Anonymous Symbol] 0x20000000 Section 0 adc.o(.data.adc_seq0_config)
gpioa_config 0x20000038 Data 192 gpio.o(.data.gpioa_config)
[Anonymous Symbol] 0x20000038 Section 0 gpio.o(.data.gpioa_config)
gpiob_config 0x200000f8 Data 192 gpio.o(.data.gpiob_config)
[Anonymous Symbol] 0x200000f8 Section 0 gpio.o(.data.gpiob_config)
tmr0_config 0x200001b8 Data 28 tmr.o(.data.tmr0_config)
[Anonymous Symbol] 0x200001b8 Section 0 tmr.o(.data.tmr0_config)
tmr1_config 0x200001d4 Data 28 tmr.o(.data.tmr1_config)
[Anonymous Symbol] 0x200001d4 Section 0 tmr.o(.data.tmr1_config)
tmr2_config 0x200001f0 Data 28 tmr.o(.data.tmr2_config)
[Anonymous Symbol] 0x200001f0 Section 0 tmr.o(.data.tmr2_config)
uart1_config 0x2000020c Data 28 uart.o(.data.uart1_config)
[Anonymous Symbol] 0x2000020c Section 0 uart.o(.data.uart1_config)
.bss 0x20000228 Section 96 libspace.o(.bss)
Heap_Mem 0x20000538 Data 512 startup_k1921vk035.o(HEAP)
HEAP 0x20000538 Section 512 startup_k1921vk035.o(HEAP)
Stack_Mem 0x20000738 Data 1024 startup_k1921vk035.o(STACK)
STACK 0x20000738 Section 1024 startup_k1921vk035.o(STACK)
__initial_sp 0x20000b38 Data 0 startup_k1921vk035.o(STACK)
Global Symbols
Symbol Name Value Ov Type Size Object(Section)
BuildAttributes$$THM_ISAv4$E$P$D$K$B$S$7EM$VFPi3$EXTD16$VFPS$VFMA$PE$A:L22UL41UL21$X:L11$S22US41US21$IEEE1$IW$~IW$USESV6$~STKCKD$USESV7$~SHL$OTIME$ROPI$IEEEX$EBA8$UX$STANDARDLIB$REQ8$PRES8$EABIv2 0x00000000 Number 0 anon$$obj.o ABSOLUTE
__Vectors 0x00000000 Data 4 startup_k1921vk035.o(RESET)
__ARM_exceptions_init - Undefined Weak Reference
__alloca_initialize - Undefined Weak Reference
__arm_preinit_ - Undefined Weak Reference
__arm_relocate_pie_ - Undefined Weak Reference
__cpp_initialize__aeabi_ - Undefined Weak Reference
__cxa_finalize - Undefined Weak Reference
__rt_locale - Undefined Weak Reference
__sigvec_lookup - Undefined Weak Reference
_atexit_init - Undefined Weak Reference
_call_atexit_fns - Undefined Weak Reference
_clock_init - Undefined Weak Reference
_fp_trap_init - Undefined Weak Reference
_fp_trap_shutdown - Undefined Weak Reference
_get_lc_collate - Undefined Weak Reference
_get_lc_ctype - Undefined Weak Reference
_get_lc_monetary - Undefined Weak Reference
_get_lc_numeric - Undefined Weak Reference
_get_lc_time - Undefined Weak Reference
_getenv_init - Undefined Weak Reference
_handle_redirection - Undefined Weak Reference
_init_alloc - Undefined Weak Reference
_init_user_alloc - Undefined Weak Reference
_initio - Undefined Weak Reference
_rand_init - Undefined Weak Reference
_signal_finish - Undefined Weak Reference
_signal_init - Undefined Weak Reference
_terminate_alloc - Undefined Weak Reference
_terminate_user_alloc - Undefined Weak Reference
_terminateio - Undefined Weak Reference
__Vectors_End 0x00000158 Data 0 startup_k1921vk035.o(RESET)
__Vectors_Size 0x00000158 Number 0 startup_k1921vk035.o ABSOLUTE
__main 0x00000159 Thumb Code 8 __main.o(!!!main)
__scatterload 0x00000161 Thumb Code 0 __scatter.o(!!!scatter)
__scatterload_rt2 0x00000161 Thumb Code 44 __scatter.o(!!!scatter)
__scatterload_rt2_thumb_only 0x00000161 Thumb Code 0 __scatter.o(!!!scatter)
__scatterload_null 0x0000016f Thumb Code 0 __scatter.o(!!!scatter)
__decompress 0x00000195 Thumb Code 90 __dczerorl2.o(!!dczerorl2)
__decompress1 0x00000195 Thumb Code 0 __dczerorl2.o(!!dczerorl2)
__scatterload_zeroinit 0x000001f1 Thumb Code 28 __scatter_zi.o(!!handler_zi)
__rt_lib_init 0x0000020d Thumb Code 0 libinit.o(.ARM.Collect$$libinit$$00000000)
__rt_lib_init_fp_1 0x0000020f Thumb Code 0 libinit2.o(.ARM.Collect$$libinit$$00000001)
__rt_lib_init_alloca_1 0x00000213 Thumb Code 0 libinit2.o(.ARM.Collect$$libinit$$00000030)
__rt_lib_init_argv_1 0x00000213 Thumb Code 0 libinit2.o(.ARM.Collect$$libinit$$0000002E)
__rt_lib_init_atexit_1 0x00000213 Thumb Code 0 libinit2.o(.ARM.Collect$$libinit$$0000001D)
__rt_lib_init_clock_1 0x00000213 Thumb Code 0 libinit2.o(.ARM.Collect$$libinit$$00000023)
__rt_lib_init_cpp_1 0x00000213 Thumb Code 0 libinit2.o(.ARM.Collect$$libinit$$00000034)
__rt_lib_init_exceptions_1 0x00000213 Thumb Code 0 libinit2.o(.ARM.Collect$$libinit$$00000032)
__rt_lib_init_fp_trap_1 0x00000213 Thumb Code 0 libinit2.o(.ARM.Collect$$libinit$$00000021)
__rt_lib_init_getenv_1 0x00000213 Thumb Code 0 libinit2.o(.ARM.Collect$$libinit$$00000025)
__rt_lib_init_heap_1 0x00000213 Thumb Code 0 libinit2.o(.ARM.Collect$$libinit$$0000000C)
__rt_lib_init_lc_collate_1 0x00000213 Thumb Code 0 libinit2.o(.ARM.Collect$$libinit$$00000013)
__rt_lib_init_lc_ctype_1 0x00000213 Thumb Code 0 libinit2.o(.ARM.Collect$$libinit$$00000015)
__rt_lib_init_lc_monetary_1 0x00000213 Thumb Code 0 libinit2.o(.ARM.Collect$$libinit$$00000017)
__rt_lib_init_lc_numeric_1 0x00000213 Thumb Code 0 libinit2.o(.ARM.Collect$$libinit$$00000019)
__rt_lib_init_lc_time_1 0x00000213 Thumb Code 0 libinit2.o(.ARM.Collect$$libinit$$0000001B)
__rt_lib_init_preinit_1 0x00000213 Thumb Code 0 libinit2.o(.ARM.Collect$$libinit$$00000006)
__rt_lib_init_rand_1 0x00000213 Thumb Code 0 libinit2.o(.ARM.Collect$$libinit$$00000010)
__rt_lib_init_relocate_pie_1 0x00000213 Thumb Code 0 libinit2.o(.ARM.Collect$$libinit$$00000004)
__rt_lib_init_return 0x00000213 Thumb Code 0 libinit2.o(.ARM.Collect$$libinit$$00000035)
__rt_lib_init_signal_1 0x00000213 Thumb Code 0 libinit2.o(.ARM.Collect$$libinit$$0000001F)
__rt_lib_init_stdio_1 0x00000213 Thumb Code 0 libinit2.o(.ARM.Collect$$libinit$$00000027)
__rt_lib_init_user_alloc_1 0x00000213 Thumb Code 0 libinit2.o(.ARM.Collect$$libinit$$0000000E)
__rt_lib_shutdown 0x00000215 Thumb Code 0 libshutdown.o(.ARM.Collect$$libshutdown$$00000000)
__rt_lib_shutdown_cpp_1 0x00000217 Thumb Code 0 libshutdown2.o(.ARM.Collect$$libshutdown$$00000002)
__rt_lib_shutdown_fp_trap_1 0x00000217 Thumb Code 0 libshutdown2.o(.ARM.Collect$$libshutdown$$00000007)
__rt_lib_shutdown_heap_1 0x00000217 Thumb Code 0 libshutdown2.o(.ARM.Collect$$libshutdown$$0000000F)
__rt_lib_shutdown_return 0x00000217 Thumb Code 0 libshutdown2.o(.ARM.Collect$$libshutdown$$00000010)
__rt_lib_shutdown_signal_1 0x00000217 Thumb Code 0 libshutdown2.o(.ARM.Collect$$libshutdown$$0000000A)
__rt_lib_shutdown_stdio_1 0x00000217 Thumb Code 0 libshutdown2.o(.ARM.Collect$$libshutdown$$00000004)
__rt_lib_shutdown_user_alloc_1 0x00000217 Thumb Code 0 libshutdown2.o(.ARM.Collect$$libshutdown$$0000000C)
__rt_entry 0x00000219 Thumb Code 0 __rtentry.o(.ARM.Collect$$rtentry$$00000000)
__rt_entry_presh_1 0x00000219 Thumb Code 0 __rtentry2.o(.ARM.Collect$$rtentry$$00000002)
__rt_entry_sh 0x00000219 Thumb Code 0 __rtentry4.o(.ARM.Collect$$rtentry$$00000004)
__rt_entry_li 0x0000021f Thumb Code 0 __rtentry2.o(.ARM.Collect$$rtentry$$0000000A)
__rt_entry_postsh_1 0x0000021f Thumb Code 0 __rtentry2.o(.ARM.Collect$$rtentry$$00000009)
__rt_entry_main 0x00000223 Thumb Code 0 __rtentry2.o(.ARM.Collect$$rtentry$$0000000D)
__rt_entry_postli_1 0x00000223 Thumb Code 0 __rtentry2.o(.ARM.Collect$$rtentry$$0000000C)
__rt_exit 0x0000022b Thumb Code 0 rtexit.o(.ARM.Collect$$rtexit$$00000000)
__rt_exit_ls 0x0000022d Thumb Code 0 rtexit2.o(.ARM.Collect$$rtexit$$00000003)
__rt_exit_prels_1 0x0000022d Thumb Code 0 rtexit2.o(.ARM.Collect$$rtexit$$00000002)
__rt_exit_exit 0x00000231 Thumb Code 0 rtexit2.o(.ARM.Collect$$rtexit$$00000004)
Reset_Handler 0x00000239 Thumb Code 8 startup_k1921vk035.o(.text)
__user_initial_stackheap 0x00000255 Thumb Code 0 startup_k1921vk035.o(.text)
__use_two_region_memory 0x00000279 Thumb Code 2 heapauxi.o(.text)
__rt_heap_escrow$2region 0x0000027b Thumb Code 2 heapauxi.o(.text)
__rt_heap_expand$2region 0x0000027d Thumb Code 2 heapauxi.o(.text)
__user_libspace 0x00000281 Thumb Code 8 libspace.o(.text)
__user_perproc_libspace 0x00000281 Thumb Code 0 libspace.o(.text)
__user_perthread_libspace 0x00000281 Thumb Code 0 libspace.o(.text)
__user_setup_stackheap 0x00000289 Thumb Code 74 sys_stackheap_outer.o(.text)
exit 0x000002d3 Thumb Code 18 exit.o(.text)
_sys_exit 0x000002e5 Thumb Code 8 sys_exit.o(.text)
__I$use$semihosting 0x000002f1 Thumb Code 0 use_no_semi.o(.text)
__use_no_semihosting_swi 0x000002f1 Thumb Code 2 use_no_semi.o(.text)
__semihosting_library_function 0x000002f3 Thumb Code 0 indicate_semi.o(.text)
ADC_DC_IRQHandler 0x000002f5 Thumb Code 2 vk035_it.o(.text.ADC_DC_IRQHandler)
ADC_SEQ0_IRQHandler 0x000002f9 Thumb Code 14 vk035_it.o(.text.ADC_SEQ0_IRQHandler)
ADC_SEQ1_IRQHandler 0x00000309 Thumb Code 14 vk035_it.o(.text.ADC_SEQ1_IRQHandler)
ADC_SEQ_Init 0x00000319 Thumb Code 266 plib035_adc.o(.text.ADC_SEQ_Init)
BusFault_Handler 0x00000425 Thumb Code 2 vk035_it.o(.text.BusFault_Handler)
CAN0_IRQHandler 0x00000429 Thumb Code 2 vk035_it.o(.text.CAN0_IRQHandler)
CAN10_IRQHandler 0x0000042d Thumb Code 2 vk035_it.o(.text.CAN10_IRQHandler)
CAN11_IRQHandler 0x00000431 Thumb Code 2 vk035_it.o(.text.CAN11_IRQHandler)
CAN12_IRQHandler 0x00000435 Thumb Code 2 vk035_it.o(.text.CAN12_IRQHandler)
CAN13_IRQHandler 0x00000439 Thumb Code 2 vk035_it.o(.text.CAN13_IRQHandler)
CAN14_IRQHandler 0x0000043d Thumb Code 2 vk035_it.o(.text.CAN14_IRQHandler)
CAN15_IRQHandler 0x00000441 Thumb Code 2 vk035_it.o(.text.CAN15_IRQHandler)
CAN1_IRQHandler 0x00000445 Thumb Code 2 vk035_it.o(.text.CAN1_IRQHandler)
CAN2_IRQHandler 0x00000449 Thumb Code 2 vk035_it.o(.text.CAN2_IRQHandler)
CAN3_IRQHandler 0x0000044d Thumb Code 2 vk035_it.o(.text.CAN3_IRQHandler)
CAN4_IRQHandler 0x00000451 Thumb Code 2 vk035_it.o(.text.CAN4_IRQHandler)
CAN5_IRQHandler 0x00000455 Thumb Code 2 vk035_it.o(.text.CAN5_IRQHandler)
CAN6_IRQHandler 0x00000459 Thumb Code 2 vk035_it.o(.text.CAN6_IRQHandler)
CAN7_IRQHandler 0x0000045d Thumb Code 2 vk035_it.o(.text.CAN7_IRQHandler)
CAN8_IRQHandler 0x00000461 Thumb Code 2 vk035_it.o(.text.CAN8_IRQHandler)
CAN9_IRQHandler 0x00000465 Thumb Code 2 vk035_it.o(.text.CAN9_IRQHandler)
DMA_CH0_IRQHandler 0x00000469 Thumb Code 2 vk035_it.o(.text.DMA_CH0_IRQHandler)
DMA_CH10_IRQHandler 0x0000046d Thumb Code 2 vk035_it.o(.text.DMA_CH10_IRQHandler)
DMA_CH11_IRQHandler 0x00000471 Thumb Code 2 vk035_it.o(.text.DMA_CH11_IRQHandler)
DMA_CH12_IRQHandler 0x00000475 Thumb Code 2 vk035_it.o(.text.DMA_CH12_IRQHandler)
DMA_CH13_IRQHandler 0x00000479 Thumb Code 2 vk035_it.o(.text.DMA_CH13_IRQHandler)
DMA_CH14_IRQHandler 0x0000047d Thumb Code 2 vk035_it.o(.text.DMA_CH14_IRQHandler)
DMA_CH15_IRQHandler 0x00000481 Thumb Code 2 vk035_it.o(.text.DMA_CH15_IRQHandler)
DMA_CH1_IRQHandler 0x00000485 Thumb Code 2 vk035_it.o(.text.DMA_CH1_IRQHandler)
DMA_CH2_IRQHandler 0x00000489 Thumb Code 2 vk035_it.o(.text.DMA_CH2_IRQHandler)
DMA_CH3_IRQHandler 0x0000048d Thumb Code 2 vk035_it.o(.text.DMA_CH3_IRQHandler)
DMA_CH4_IRQHandler 0x00000491 Thumb Code 2 vk035_it.o(.text.DMA_CH4_IRQHandler)
DMA_CH5_IRQHandler 0x00000495 Thumb Code 2 vk035_it.o(.text.DMA_CH5_IRQHandler)
DMA_CH6_IRQHandler 0x00000499 Thumb Code 2 vk035_it.o(.text.DMA_CH6_IRQHandler)
DMA_CH7_IRQHandler 0x0000049d Thumb Code 2 vk035_it.o(.text.DMA_CH7_IRQHandler)
DMA_CH8_IRQHandler 0x000004a1 Thumb Code 2 vk035_it.o(.text.DMA_CH8_IRQHandler)
DMA_CH9_IRQHandler 0x000004a5 Thumb Code 2 vk035_it.o(.text.DMA_CH9_IRQHandler)
DebugMon_Handler 0x000004a9 Thumb Code 2 vk035_it.o(.text.DebugMon_Handler)
ECAP0_IRQHandler 0x000004ad Thumb Code 2 vk035_it.o(.text.ECAP0_IRQHandler)
ECAP1_IRQHandler 0x000004b1 Thumb Code 2 vk035_it.o(.text.ECAP1_IRQHandler)
ECAP2_IRQHandler 0x000004b5 Thumb Code 2 vk035_it.o(.text.ECAP2_IRQHandler)
Error_Handler 0x000004b9 Thumb Code 10 main.o(.text.Error_Handler)
FPU_IRQHandler 0x000004c5 Thumb Code 2 vk035_it.o(.text.FPU_IRQHandler)
GPIOA_IRQHandler 0x000004c9 Thumb Code 2 vk035_it.o(.text.GPIOA_IRQHandler)
GPIOB_IRQHandler 0x000004cd Thumb Code 2 vk035_it.o(.text.GPIOB_IRQHandler)
GPIO_DeInit 0x000004d1 Thumb Code 38 plib035_gpio.o(.text.GPIO_DeInit)
GPIO_Init 0x000004f9 Thumb Code 254 plib035_gpio.o(.text.GPIO_Init)
GPIO_StructInit 0x000005f9 Thumb Code 16 plib035_gpio.o(.text.GPIO_StructInit)
HardFault_Handler 0x00000609 Thumb Code 2 vk035_it.o(.text.HardFault_Handler)
I2C_IRQHandler 0x0000060d Thumb Code 2 vk035_it.o(.text.I2C_IRQHandler)
MFLASH_IRQHandler 0x00000611 Thumb Code 2 vk035_it.o(.text.MFLASH_IRQHandler)
MemManage_Handler 0x00000615 Thumb Code 2 vk035_it.o(.text.MemManage_Handler)
NMI_Handler 0x00000619 Thumb Code 2 vk035_it.o(.text.NMI_Handler)
PWM0_HD_IRQHandler 0x0000061d Thumb Code 2 vk035_it.o(.text.PWM0_HD_IRQHandler)
PWM0_IRQHandler 0x00000621 Thumb Code 2 vk035_it.o(.text.PWM0_IRQHandler)
PWM0_TZ_IRQHandler 0x00000625 Thumb Code 2 vk035_it.o(.text.PWM0_TZ_IRQHandler)
PWM1_HD_IRQHandler 0x00000629 Thumb Code 2 vk035_it.o(.text.PWM1_HD_IRQHandler)
PWM1_IRQHandler 0x0000062d Thumb Code 2 vk035_it.o(.text.PWM1_IRQHandler)
PWM1_TZ_IRQHandler 0x00000631 Thumb Code 2 vk035_it.o(.text.PWM1_TZ_IRQHandler)
PWM2_HD_IRQHandler 0x00000635 Thumb Code 2 vk035_it.o(.text.PWM2_HD_IRQHandler)
PWM2_IRQHandler 0x00000639 Thumb Code 2 vk035_it.o(.text.PWM2_IRQHandler)
PWM2_TZ_IRQHandler 0x0000063d Thumb Code 2 vk035_it.o(.text.PWM2_TZ_IRQHandler)
PendSV_Handler 0x00000641 Thumb Code 2 vk035_it.o(.text.PendSV_Handler)
QEP_IRQHandler 0x00000645 Thumb Code 2 vk035_it.o(.text.QEP_IRQHandler)
RCU_GetOSEClkFreq 0x00000649 Thumb Code 10 plib035_rcu.o(.text.RCU_GetOSEClkFreq)
RCU_GetOSIClkFreq 0x00000655 Thumb Code 10 plib035_rcu.o(.text.RCU_GetOSIClkFreq)
RCU_GetPLLClkFreq 0x00000661 Thumb Code 58 plib035_rcu.o(.text.RCU_GetPLLClkFreq)
RCU_GetPLLDivClkFreq 0x0000069d Thumb Code 76 plib035_rcu.o(.text.RCU_GetPLLDivClkFreq)
RCU_GetUARTClkFreq 0x000006e9 Thumb Code 200 plib035_rcu.o(.text.RCU_GetUARTClkFreq)
RCU_IRQHandler 0x000007b1 Thumb Code 2 vk035_it.o(.text.RCU_IRQHandler)
RCU_PLL_AutoConfig 0x000007b5 Thumb Code 540 plib035_rcu.o(.text.RCU_PLL_AutoConfig)
SPI_RO_RT_IRQHandler 0x000009d1 Thumb Code 2 vk035_it.o(.text.SPI_RO_RT_IRQHandler)
SPI_RX_IRQHandler 0x000009d5 Thumb Code 2 vk035_it.o(.text.SPI_RX_IRQHandler)
SPI_TX_IRQHandler 0x000009d9 Thumb Code 2 vk035_it.o(.text.SPI_TX_IRQHandler)
SVC_Handler 0x000009dd Thumb Code 2 vk035_it.o(.text.SVC_Handler)
SysTick_Handler 0x000009e1 Thumb Code 4 vk035_it.o(.text.SysTick_Handler)
SystemCoreClockUpdate 0x000009e5 Thumb Code 114 system_k1921vk035.o(.text.SystemCoreClockUpdate)
SystemInit 0x00000a59 Thumb Code 150 system_k1921vk035.o(.text.SystemInit)
TMR0_IRQHandler 0x00000af1 Thumb Code 12 vk035_it.o(.text.TMR0_IRQHandler)
TMR1_IRQHandler 0x00000afd Thumb Code 12 vk035_it.o(.text.TMR1_IRQHandler)
TMR2_IRQHandler 0x00000b09 Thumb Code 12 vk035_it.o(.text.TMR2_IRQHandler)
TMR3_IRQHandler 0x00000b15 Thumb Code 12 vk035_it.o(.text.TMR3_IRQHandler)
TMR_FreqConfig 0x00000b21 Thumb Code 8 plib035_tmr.o(.text.TMR_FreqConfig)
TMR_Init 0x00000b29 Thumb Code 120 tmr.o(.text.TMR_Init)
TMR_PeriodConfig 0x00000ba1 Thumb Code 20 plib035_tmr.o(.text.TMR_PeriodConfig)
UART0_E_RT_IRQHandler 0x00000bb5 Thumb Code 12 vk035_it.o(.text.UART0_E_RT_IRQHandler)
UART0_RX_IRQHandler 0x00000bc1 Thumb Code 12 vk035_it.o(.text.UART0_RX_IRQHandler)
UART0_TD_IRQHandler 0x00000bcd Thumb Code 12 vk035_it.o(.text.UART0_TD_IRQHandler)
UART0_TX_IRQHandler 0x00000bd9 Thumb Code 12 vk035_it.o(.text.UART0_TX_IRQHandler)
UART1_E_RT_IRQHandler 0x00000be5 Thumb Code 12 vk035_it.o(.text.UART1_E_RT_IRQHandler)
UART1_RX_IRQHandler 0x00000bf1 Thumb Code 12 vk035_it.o(.text.UART1_RX_IRQHandler)
UART1_TD_IRQHandler 0x00000bfd Thumb Code 12 vk035_it.o(.text.UART1_TD_IRQHandler)
UART1_TX_IRQHandler 0x00000c09 Thumb Code 12 vk035_it.o(.text.UART1_TX_IRQHandler)
UART_DeInit 0x00000c15 Thumb Code 48 plib035_uart.o(.text.UART_DeInit)
UART_Init 0x00000c45 Thumb Code 184 plib035_uart.o(.text.UART_Init)
UsageFault_Handler 0x00000cfd Thumb Code 2 vk035_it.o(.text.UsageFault_Handler)
WDT_IRQHandler 0x00000d01 Thumb Code 2 vk035_it.o(.text.WDT_IRQHandler)
adc_init_first 0x00000d05 Thumb Code 148 adc.o(.text.adc_init_first)
adc_seq_handler 0x00000d99 Thumb Code 388 adc.o(.text.adc_seq_handler)
adc_seq_start 0x00000f1d Thumb Code 130 adc.o(.text.adc_seq_start)
adc_sw_start 0x00000fa1 Thumb Code 16 adc.o(.text.adc_sw_start)
gpio_get_init 0x00000fb1 Thumb Code 78 gpio.o(.text.gpio_get_init)
gpio_init 0x00001001 Thumb Code 118 gpio.o(.text.gpio_init)
heartbit 0x00001079 Thumb Code 20 main.o(.text.heartbit)
main 0x0000109d Thumb Code 118 main.o(.text.main)
millis 0x00001115 Thumb Code 12 sysclk.o(.text.millis)
millis_inc 0x00001121 Thumb Code 16 sysclk.o(.text.millis_inc)
periph_init 0x00001131 Thumb Code 138 main.o(.text.periph_init)
rcu_set_clock_adc 0x000011bd Thumb Code 156 sysclk.o(.text.rcu_set_clock_adc)
restart_receive 0x00001259 Thumb Code 42 main.o(.text.restart_receive)
sysclk_init 0x00001285 Thumb Code 120 sysclk.o(.text.sysclk_init)
tmr_delay 0x000012fd Thumb Code 40 tmr.o(.text.tmr_delay)
tmr_delay_done 0x00001325 Thumb Code 46 tmr.o(.text.tmr_delay_done)
tmr_delay_start 0x00001355 Thumb Code 18 tmr.o(.text.tmr_delay_start)
tmr_handler 0x00001369 Thumb Code 44 tmr.o(.text.tmr_handler)
tmr_init_first 0x00001395 Thumb Code 204 tmr.o(.text.tmr_init_first)
tmr_set_callback 0x00001461 Thumb Code 22 tmr.o(.text.tmr_set_callback)
tmr_start 0x00001479 Thumb Code 22 tmr.o(.text.tmr_start)
uart1_gpio_init 0x00001491 Thumb Code 126 uart.o(.text.uart1_gpio_init)
uart_handler 0x00001511 Thumb Code 240 uart.o(.text.uart_handler)
uart_init_first 0x00001601 Thumb Code 114 uart.o(.text.uart_init_first)
uart_receive_it 0x00001675 Thumb Code 56 uart.o(.text.uart_receive_it)
uart_set_callback 0x000016ad Thumb Code 46 uart.o(.text.uart_set_callback)
uart_start 0x000016dd Thumb Code 72 uart.o(.text.uart_start)
uart_transmit 0x00001725 Thumb Code 160 uart.o(.text.uart_transmit)
uart_transmit_it 0x000017c5 Thumb Code 120 uart.o(.text.uart_transmit_it)
_fp_init 0x0000183d Thumb Code 26 fpinit.o(x$fpl$fpinit)
__fplib_config_fpu_vfp 0x00001855 Thumb Code 0 fpinit.o(x$fpl$fpinit)
__fplib_config_pureend_doubles 0x00001855 Thumb Code 0 fpinit.o(x$fpl$fpinit)
Region$$Table$$Base 0x00001858 Number 0 anon$$obj.o(Region$$Table)
Region$$Table$$Limit 0x00001878 Number 0 anon$$obj.o(Region$$Table)
__libspace_start 0x20000228 Data 96 libspace.o(.bss)
SystemCoreClock 0x20000288 Data 4 system_k1921vk035.o(.bss.SystemCoreClock)
__temporary_stack_top$libspace 0x20000288 Data 0 libspace.o(.bss)
adc_buff 0x2000028c Data 400 main.o(.bss.adc_buff)
hadc 0x2000041c Data 168 adc.o(.bss.hadc)
htmr0 0x200004c4 Data 8 tmr.o(.bss.htmr0)
htmr1 0x200004cc Data 8 tmr.o(.bss.htmr1)
htmr2 0x200004d4 Data 8 tmr.o(.bss.htmr2)
htmr3 0x200004dc Data 8 tmr.o(.bss.htmr3)
huart0 0x200004e4 Data 32 uart.o(.bss.huart0)
huart1 0x20000504 Data 32 uart.o(.bss.huart1)
rxbuff 0x20000524 Data 10 main.o(.bss.rxbuff)
uwTick 0x20000530 Data 4 sysclk.o(.bss.uwTick)
==============================================================================
Memory Map of the image
Image Entry point : 0x00000239
Load Region LR_1 (Base: 0x00000000, Size: 0x00001aa0, Max: 0xffffffff, ABSOLUTE, COMPRESSED[0x000018c8])
Execution Region ER_RO (Exec base: 0x00000000, Load base: 0x00000000, Size: 0x00001878, Max: 0xffffffff, ABSOLUTE)
Exec Addr Load Addr Size Type Attr Idx E Section Name Object
0x00000000 0x00000000 0x00000158 Data RO 492 RESET startup_k1921vk035.o
0x00000158 0x00000158 0x00000008 Code RO 785 * !!!main c_w.l(__main.o)
0x00000160 0x00000160 0x00000034 Code RO 1005 !!!scatter c_w.l(__scatter.o)
0x00000194 0x00000194 0x0000005a Code RO 1003 !!dczerorl2 c_w.l(__dczerorl2.o)
0x000001ee 0x000001ee 0x00000002 PAD
0x000001f0 0x000001f0 0x0000001c Code RO 1007 !!handler_zi c_w.l(__scatter_zi.o)
0x0000020c 0x0000020c 0x00000002 Code RO 868 .ARM.Collect$$libinit$$00000000 c_w.l(libinit.o)
0x0000020e 0x0000020e 0x00000004 Code RO 877 .ARM.Collect$$libinit$$00000001 c_w.l(libinit2.o)
0x00000212 0x00000212 0x00000000 Code RO 880 .ARM.Collect$$libinit$$00000004 c_w.l(libinit2.o)
0x00000212 0x00000212 0x00000000 Code RO 882 .ARM.Collect$$libinit$$00000006 c_w.l(libinit2.o)
0x00000212 0x00000212 0x00000000 Code RO 885 .ARM.Collect$$libinit$$0000000C c_w.l(libinit2.o)
0x00000212 0x00000212 0x00000000 Code RO 887 .ARM.Collect$$libinit$$0000000E c_w.l(libinit2.o)
0x00000212 0x00000212 0x00000000 Code RO 889 .ARM.Collect$$libinit$$00000010 c_w.l(libinit2.o)
0x00000212 0x00000212 0x00000000 Code RO 892 .ARM.Collect$$libinit$$00000013 c_w.l(libinit2.o)
0x00000212 0x00000212 0x00000000 Code RO 894 .ARM.Collect$$libinit$$00000015 c_w.l(libinit2.o)
0x00000212 0x00000212 0x00000000 Code RO 896 .ARM.Collect$$libinit$$00000017 c_w.l(libinit2.o)
0x00000212 0x00000212 0x00000000 Code RO 898 .ARM.Collect$$libinit$$00000019 c_w.l(libinit2.o)
0x00000212 0x00000212 0x00000000 Code RO 900 .ARM.Collect$$libinit$$0000001B c_w.l(libinit2.o)
0x00000212 0x00000212 0x00000000 Code RO 902 .ARM.Collect$$libinit$$0000001D c_w.l(libinit2.o)
0x00000212 0x00000212 0x00000000 Code RO 904 .ARM.Collect$$libinit$$0000001F c_w.l(libinit2.o)
0x00000212 0x00000212 0x00000000 Code RO 906 .ARM.Collect$$libinit$$00000021 c_w.l(libinit2.o)
0x00000212 0x00000212 0x00000000 Code RO 908 .ARM.Collect$$libinit$$00000023 c_w.l(libinit2.o)
0x00000212 0x00000212 0x00000000 Code RO 910 .ARM.Collect$$libinit$$00000025 c_w.l(libinit2.o)
0x00000212 0x00000212 0x00000000 Code RO 912 .ARM.Collect$$libinit$$00000027 c_w.l(libinit2.o)
0x00000212 0x00000212 0x00000000 Code RO 916 .ARM.Collect$$libinit$$0000002E c_w.l(libinit2.o)
0x00000212 0x00000212 0x00000000 Code RO 918 .ARM.Collect$$libinit$$00000030 c_w.l(libinit2.o)
0x00000212 0x00000212 0x00000000 Code RO 920 .ARM.Collect$$libinit$$00000032 c_w.l(libinit2.o)
0x00000212 0x00000212 0x00000000 Code RO 922 .ARM.Collect$$libinit$$00000034 c_w.l(libinit2.o)
0x00000212 0x00000212 0x00000002 Code RO 923 .ARM.Collect$$libinit$$00000035 c_w.l(libinit2.o)
0x00000214 0x00000214 0x00000002 Code RO 958 .ARM.Collect$$libshutdown$$00000000 c_w.l(libshutdown.o)
0x00000216 0x00000216 0x00000000 Code RO 986 .ARM.Collect$$libshutdown$$00000002 c_w.l(libshutdown2.o)
0x00000216 0x00000216 0x00000000 Code RO 988 .ARM.Collect$$libshutdown$$00000004 c_w.l(libshutdown2.o)
0x00000216 0x00000216 0x00000000 Code RO 991 .ARM.Collect$$libshutdown$$00000007 c_w.l(libshutdown2.o)
0x00000216 0x00000216 0x00000000 Code RO 994 .ARM.Collect$$libshutdown$$0000000A c_w.l(libshutdown2.o)
0x00000216 0x00000216 0x00000000 Code RO 996 .ARM.Collect$$libshutdown$$0000000C c_w.l(libshutdown2.o)
0x00000216 0x00000216 0x00000000 Code RO 999 .ARM.Collect$$libshutdown$$0000000F c_w.l(libshutdown2.o)
0x00000216 0x00000216 0x00000002 Code RO 1000 .ARM.Collect$$libshutdown$$00000010 c_w.l(libshutdown2.o)
0x00000218 0x00000218 0x00000000 Code RO 801 .ARM.Collect$$rtentry$$00000000 c_w.l(__rtentry.o)
0x00000218 0x00000218 0x00000000 Code RO 831 .ARM.Collect$$rtentry$$00000002 c_w.l(__rtentry2.o)
0x00000218 0x00000218 0x00000006 Code RO 843 .ARM.Collect$$rtentry$$00000004 c_w.l(__rtentry4.o)
0x0000021e 0x0000021e 0x00000000 Code RO 833 .ARM.Collect$$rtentry$$00000009 c_w.l(__rtentry2.o)
0x0000021e 0x0000021e 0x00000004 Code RO 834 .ARM.Collect$$rtentry$$0000000A c_w.l(__rtentry2.o)
0x00000222 0x00000222 0x00000000 Code RO 836 .ARM.Collect$$rtentry$$0000000C c_w.l(__rtentry2.o)
0x00000222 0x00000222 0x00000008 Code RO 837 .ARM.Collect$$rtentry$$0000000D c_w.l(__rtentry2.o)
0x0000022a 0x0000022a 0x00000002 Code RO 869 .ARM.Collect$$rtexit$$00000000 c_w.l(rtexit.o)
0x0000022c 0x0000022c 0x00000000 Code RO 929 .ARM.Collect$$rtexit$$00000002 c_w.l(rtexit2.o)
0x0000022c 0x0000022c 0x00000004 Code RO 930 .ARM.Collect$$rtexit$$00000003 c_w.l(rtexit2.o)
0x00000230 0x00000230 0x00000006 Code RO 931 .ARM.Collect$$rtexit$$00000004 c_w.l(rtexit2.o)
0x00000236 0x00000236 0x00000002 PAD
0x00000238 0x00000238 0x00000040 Code RO 493 * .text startup_k1921vk035.o
0x00000278 0x00000278 0x00000006 Code RO 783 .text c_w.l(heapauxi.o)
0x0000027e 0x0000027e 0x00000002 PAD
0x00000280 0x00000280 0x00000008 Code RO 852 .text c_w.l(libspace.o)
0x00000288 0x00000288 0x0000004a Code RO 855 .text c_w.l(sys_stackheap_outer.o)
0x000002d2 0x000002d2 0x00000012 Code RO 857 .text c_w.l(exit.o)
0x000002e4 0x000002e4 0x0000000c Code RO 924 .text c_w.l(sys_exit.o)
0x000002f0 0x000002f0 0x00000002 Code RO 947 .text c_w.l(use_no_semi.o)
0x000002f2 0x000002f2 0x00000000 Code RO 949 .text c_w.l(indicate_semi.o)
0x000002f2 0x000002f2 0x00000002 PAD
0x000002f4 0x000002f4 0x00000002 Code RO 222 .text.ADC_DC_IRQHandler vk035_it.o
0x000002f6 0x000002f6 0x00000002 PAD
0x000002f8 0x000002f8 0x0000000e Code RO 218 .text.ADC_SEQ0_IRQHandler vk035_it.o
0x00000306 0x00000306 0x00000002 PAD
0x00000308 0x00000308 0x0000000e Code RO 220 .text.ADC_SEQ1_IRQHandler vk035_it.o
0x00000316 0x00000316 0x00000002 PAD
0x00000318 0x00000318 0x0000010a Code RO 502 .text.ADC_SEQ_Init plib035_adc.o
0x00000422 0x00000422 0x00000002 PAD
0x00000424 0x00000424 0x00000002 Code RO 302 .text.BusFault_Handler vk035_it.o
0x00000426 0x00000426 0x00000002 PAD
0x00000428 0x00000428 0x00000002 Code RO 224 .text.CAN0_IRQHandler vk035_it.o
0x0000042a 0x0000042a 0x00000002 PAD
0x0000042c 0x0000042c 0x00000002 Code RO 244 .text.CAN10_IRQHandler vk035_it.o
0x0000042e 0x0000042e 0x00000002 PAD
0x00000430 0x00000430 0x00000002 Code RO 246 .text.CAN11_IRQHandler vk035_it.o
0x00000432 0x00000432 0x00000002 PAD
0x00000434 0x00000434 0x00000002 Code RO 248 .text.CAN12_IRQHandler vk035_it.o
0x00000436 0x00000436 0x00000002 PAD
0x00000438 0x00000438 0x00000002 Code RO 250 .text.CAN13_IRQHandler vk035_it.o
0x0000043a 0x0000043a 0x00000002 PAD
0x0000043c 0x0000043c 0x00000002 Code RO 252 .text.CAN14_IRQHandler vk035_it.o
0x0000043e 0x0000043e 0x00000002 PAD
0x00000440 0x00000440 0x00000002 Code RO 254 .text.CAN15_IRQHandler vk035_it.o
0x00000442 0x00000442 0x00000002 PAD
0x00000444 0x00000444 0x00000002 Code RO 226 .text.CAN1_IRQHandler vk035_it.o
0x00000446 0x00000446 0x00000002 PAD
0x00000448 0x00000448 0x00000002 Code RO 228 .text.CAN2_IRQHandler vk035_it.o
0x0000044a 0x0000044a 0x00000002 PAD
0x0000044c 0x0000044c 0x00000002 Code RO 230 .text.CAN3_IRQHandler vk035_it.o
0x0000044e 0x0000044e 0x00000002 PAD
0x00000450 0x00000450 0x00000002 Code RO 232 .text.CAN4_IRQHandler vk035_it.o
0x00000452 0x00000452 0x00000002 PAD
0x00000454 0x00000454 0x00000002 Code RO 234 .text.CAN5_IRQHandler vk035_it.o
0x00000456 0x00000456 0x00000002 PAD
0x00000458 0x00000458 0x00000002 Code RO 236 .text.CAN6_IRQHandler vk035_it.o
0x0000045a 0x0000045a 0x00000002 PAD
0x0000045c 0x0000045c 0x00000002 Code RO 238 .text.CAN7_IRQHandler vk035_it.o
0x0000045e 0x0000045e 0x00000002 PAD
0x00000460 0x00000460 0x00000002 Code RO 240 .text.CAN8_IRQHandler vk035_it.o
0x00000462 0x00000462 0x00000002 PAD
0x00000464 0x00000464 0x00000002 Code RO 242 .text.CAN9_IRQHandler vk035_it.o
0x00000466 0x00000466 0x00000002 PAD
0x00000468 0x00000468 0x00000002 Code RO 258 .text.DMA_CH0_IRQHandler vk035_it.o
0x0000046a 0x0000046a 0x00000002 PAD
0x0000046c 0x0000046c 0x00000002 Code RO 278 .text.DMA_CH10_IRQHandler vk035_it.o
0x0000046e 0x0000046e 0x00000002 PAD
0x00000470 0x00000470 0x00000002 Code RO 280 .text.DMA_CH11_IRQHandler vk035_it.o
0x00000472 0x00000472 0x00000002 PAD
0x00000474 0x00000474 0x00000002 Code RO 282 .text.DMA_CH12_IRQHandler vk035_it.o
0x00000476 0x00000476 0x00000002 PAD
0x00000478 0x00000478 0x00000002 Code RO 284 .text.DMA_CH13_IRQHandler vk035_it.o
0x0000047a 0x0000047a 0x00000002 PAD
0x0000047c 0x0000047c 0x00000002 Code RO 286 .text.DMA_CH14_IRQHandler vk035_it.o
0x0000047e 0x0000047e 0x00000002 PAD
0x00000480 0x00000480 0x00000002 Code RO 288 .text.DMA_CH15_IRQHandler vk035_it.o
0x00000482 0x00000482 0x00000002 PAD
0x00000484 0x00000484 0x00000002 Code RO 260 .text.DMA_CH1_IRQHandler vk035_it.o
0x00000486 0x00000486 0x00000002 PAD
0x00000488 0x00000488 0x00000002 Code RO 262 .text.DMA_CH2_IRQHandler vk035_it.o
0x0000048a 0x0000048a 0x00000002 PAD
0x0000048c 0x0000048c 0x00000002 Code RO 264 .text.DMA_CH3_IRQHandler vk035_it.o
0x0000048e 0x0000048e 0x00000002 PAD
0x00000490 0x00000490 0x00000002 Code RO 266 .text.DMA_CH4_IRQHandler vk035_it.o
0x00000492 0x00000492 0x00000002 PAD
0x00000494 0x00000494 0x00000002 Code RO 268 .text.DMA_CH5_IRQHandler vk035_it.o
0x00000496 0x00000496 0x00000002 PAD
0x00000498 0x00000498 0x00000002 Code RO 270 .text.DMA_CH6_IRQHandler vk035_it.o
0x0000049a 0x0000049a 0x00000002 PAD
0x0000049c 0x0000049c 0x00000002 Code RO 272 .text.DMA_CH7_IRQHandler vk035_it.o
0x0000049e 0x0000049e 0x00000002 PAD
0x000004a0 0x000004a0 0x00000002 Code RO 274 .text.DMA_CH8_IRQHandler vk035_it.o
0x000004a2 0x000004a2 0x00000002 PAD
0x000004a4 0x000004a4 0x00000002 Code RO 276 .text.DMA_CH9_IRQHandler vk035_it.o
0x000004a6 0x000004a6 0x00000002 PAD
0x000004a8 0x000004a8 0x00000002 Code RO 308 .text.DebugMon_Handler vk035_it.o
0x000004aa 0x000004aa 0x00000002 PAD
0x000004ac 0x000004ac 0x00000002 Code RO 192 .text.ECAP0_IRQHandler vk035_it.o
0x000004ae 0x000004ae 0x00000002 PAD
0x000004b0 0x000004b0 0x00000002 Code RO 194 .text.ECAP1_IRQHandler vk035_it.o
0x000004b2 0x000004b2 0x00000002 PAD
0x000004b4 0x000004b4 0x00000002 Code RO 196 .text.ECAP2_IRQHandler vk035_it.o
0x000004b6 0x000004b6 0x00000002 PAD
0x000004b8 0x000004b8 0x0000000a Code RO 10 .text.Error_Handler main.o
0x000004c2 0x000004c2 0x00000002 PAD
0x000004c4 0x000004c4 0x00000002 Code RO 256 .text.FPU_IRQHandler vk035_it.o
0x000004c6 0x000004c6 0x00000002 PAD
0x000004c8 0x000004c8 0x00000002 Code RO 156 .text.GPIOA_IRQHandler vk035_it.o
0x000004ca 0x000004ca 0x00000002 PAD
0x000004cc 0x000004cc 0x00000002 Code RO 158 .text.GPIOB_IRQHandler vk035_it.o
0x000004ce 0x000004ce 0x00000002 PAD
0x000004d0 0x000004d0 0x00000026 Code RO 569 .text.GPIO_DeInit plib035_gpio.o
0x000004f6 0x000004f6 0x00000002 PAD
0x000004f8 0x000004f8 0x000000fe Code RO 571 .text.GPIO_Init plib035_gpio.o
0x000005f6 0x000005f6 0x00000002 PAD
0x000005f8 0x000005f8 0x00000010 Code RO 573 .text.GPIO_StructInit plib035_gpio.o
0x00000608 0x00000608 0x00000002 Code RO 298 .text.HardFault_Handler vk035_it.o
0x0000060a 0x0000060a 0x00000002 PAD
0x0000060c 0x0000060c 0x00000002 Code RO 190 .text.I2C_IRQHandler vk035_it.o
0x0000060e 0x0000060e 0x00000002 PAD
0x00000610 0x00000610 0x00000002 Code RO 294 .text.MFLASH_IRQHandler vk035_it.o
0x00000612 0x00000612 0x00000002 PAD
0x00000614 0x00000614 0x00000002 Code RO 300 .text.MemManage_Handler vk035_it.o
0x00000616 0x00000616 0x00000002 PAD
0x00000618 0x00000618 0x00000002 Code RO 296 .text.NMI_Handler vk035_it.o
0x0000061a 0x0000061a 0x00000002 PAD
0x0000061c 0x0000061c 0x00000002 Code RO 200 .text.PWM0_HD_IRQHandler vk035_it.o
0x0000061e 0x0000061e 0x00000002 PAD
0x00000620 0x00000620 0x00000002 Code RO 198 .text.PWM0_IRQHandler vk035_it.o
0x00000622 0x00000622 0x00000002 PAD
0x00000624 0x00000624 0x00000002 Code RO 202 .text.PWM0_TZ_IRQHandler vk035_it.o
0x00000626 0x00000626 0x00000002 PAD
0x00000628 0x00000628 0x00000002 Code RO 206 .text.PWM1_HD_IRQHandler vk035_it.o
0x0000062a 0x0000062a 0x00000002 PAD
0x0000062c 0x0000062c 0x00000002 Code RO 204 .text.PWM1_IRQHandler vk035_it.o
0x0000062e 0x0000062e 0x00000002 PAD
0x00000630 0x00000630 0x00000002 Code RO 208 .text.PWM1_TZ_IRQHandler vk035_it.o
0x00000632 0x00000632 0x00000002 PAD
0x00000634 0x00000634 0x00000002 Code RO 212 .text.PWM2_HD_IRQHandler vk035_it.o
0x00000636 0x00000636 0x00000002 PAD
0x00000638 0x00000638 0x00000002 Code RO 210 .text.PWM2_IRQHandler vk035_it.o
0x0000063a 0x0000063a 0x00000002 PAD
0x0000063c 0x0000063c 0x00000002 Code RO 214 .text.PWM2_TZ_IRQHandler vk035_it.o
0x0000063e 0x0000063e 0x00000002 PAD
0x00000640 0x00000640 0x00000002 Code RO 310 .text.PendSV_Handler vk035_it.o
0x00000642 0x00000642 0x00000002 PAD
0x00000644 0x00000644 0x00000002 Code RO 216 .text.QEP_IRQHandler vk035_it.o
0x00000646 0x00000646 0x00000002 PAD
0x00000648 0x00000648 0x0000000a Code RO 674 .text.RCU_GetOSEClkFreq plib035_rcu.o
0x00000652 0x00000652 0x00000002 PAD
0x00000654 0x00000654 0x0000000a Code RO 672 .text.RCU_GetOSIClkFreq plib035_rcu.o
0x0000065e 0x0000065e 0x00000002 PAD
0x00000660 0x00000660 0x0000003a Code RO 676 .text.RCU_GetPLLClkFreq plib035_rcu.o
0x0000069a 0x0000069a 0x00000002 PAD
0x0000069c 0x0000069c 0x0000004c Code RO 678 .text.RCU_GetPLLDivClkFreq plib035_rcu.o
0x000006e8 0x000006e8 0x000000c8 Code RO 682 .text.RCU_GetUARTClkFreq plib035_rcu.o
0x000007b0 0x000007b0 0x00000002 Code RO 292 .text.RCU_IRQHandler vk035_it.o
0x000007b2 0x000007b2 0x00000002 PAD
0x000007b4 0x000007b4 0x0000021c Code RO 694 .text.RCU_PLL_AutoConfig plib035_rcu.o
0x000009d0 0x000009d0 0x00000002 Code RO 184 .text.SPI_RO_RT_IRQHandler vk035_it.o
0x000009d2 0x000009d2 0x00000002 PAD
0x000009d4 0x000009d4 0x00000002 Code RO 186 .text.SPI_RX_IRQHandler vk035_it.o
0x000009d6 0x000009d6 0x00000002 PAD
0x000009d8 0x000009d8 0x00000002 Code RO 188 .text.SPI_TX_IRQHandler vk035_it.o
0x000009da 0x000009da 0x00000002 PAD
0x000009dc 0x000009dc 0x00000002 Code RO 306 .text.SVC_Handler vk035_it.o
0x000009de 0x000009de 0x00000002 PAD
0x000009e0 0x000009e0 0x00000004 Code RO 312 .text.SysTick_Handler vk035_it.o
0x000009e4 0x000009e4 0x00000072 Code RO 474 .text.SystemCoreClockUpdate system_k1921vk035.o
0x00000a56 0x00000a56 0x00000002 PAD
0x00000a58 0x00000a58 0x00000096 Code RO 480 .text.SystemInit system_k1921vk035.o
0x00000aee 0x00000aee 0x00000002 PAD
0x00000af0 0x00000af0 0x0000000c Code RO 160 .text.TMR0_IRQHandler vk035_it.o
0x00000afc 0x00000afc 0x0000000c Code RO 162 .text.TMR1_IRQHandler vk035_it.o
0x00000b08 0x00000b08 0x0000000c Code RO 164 .text.TMR2_IRQHandler vk035_it.o
0x00000b14 0x00000b14 0x0000000c Code RO 166 .text.TMR3_IRQHandler vk035_it.o
0x00000b20 0x00000b20 0x00000008 Code RO 728 .text.TMR_FreqConfig plib035_tmr.o
0x00000b28 0x00000b28 0x00000078 Code RO 41 .text.TMR_Init tmr.o
0x00000ba0 0x00000ba0 0x00000014 Code RO 726 .text.TMR_PeriodConfig plib035_tmr.o
0x00000bb4 0x00000bb4 0x0000000c Code RO 174 .text.UART0_E_RT_IRQHandler vk035_it.o
0x00000bc0 0x00000bc0 0x0000000c Code RO 170 .text.UART0_RX_IRQHandler vk035_it.o
0x00000bcc 0x00000bcc 0x0000000c Code RO 168 .text.UART0_TD_IRQHandler vk035_it.o
0x00000bd8 0x00000bd8 0x0000000c Code RO 172 .text.UART0_TX_IRQHandler vk035_it.o
0x00000be4 0x00000be4 0x0000000c Code RO 182 .text.UART1_E_RT_IRQHandler vk035_it.o
0x00000bf0 0x00000bf0 0x0000000c Code RO 178 .text.UART1_RX_IRQHandler vk035_it.o
0x00000bfc 0x00000bfc 0x0000000c Code RO 176 .text.UART1_TD_IRQHandler vk035_it.o
0x00000c08 0x00000c08 0x0000000c Code RO 180 .text.UART1_TX_IRQHandler vk035_it.o
0x00000c14 0x00000c14 0x00000030 Code RO 740 .text.UART_DeInit plib035_uart.o
0x00000c44 0x00000c44 0x000000b8 Code RO 742 .text.UART_Init plib035_uart.o
0x00000cfc 0x00000cfc 0x00000002 Code RO 304 .text.UsageFault_Handler vk035_it.o
0x00000cfe 0x00000cfe 0x00000002 PAD
0x00000d00 0x00000d00 0x00000002 Code RO 290 .text.WDT_IRQHandler vk035_it.o
0x00000d02 0x00000d02 0x00000002 PAD
0x00000d04 0x00000d04 0x00000094 Code RO 109 .text.adc_init_first adc.o
0x00000d98 0x00000d98 0x00000184 Code RO 123 .text.adc_seq_handler adc.o
0x00000f1c 0x00000f1c 0x00000082 Code RO 115 .text.adc_seq_start adc.o
0x00000f9e 0x00000f9e 0x00000002 PAD
0x00000fa0 0x00000fa0 0x00000010 Code RO 121 .text.adc_sw_start adc.o
0x00000fb0 0x00000fb0 0x0000004e Code RO 25 .text.gpio_get_init gpio.o
0x00000ffe 0x00000ffe 0x00000002 PAD
0x00001000 0x00001000 0x00000076 Code RO 23 .text.gpio_init gpio.o
0x00001076 0x00001076 0x00000002 PAD
0x00001078 0x00001078 0x00000024 Code RO 6 .text.heartbit main.o
0x0000109c 0x0000109c 0x00000076 Code RO 8 .text.main main.o
0x00001112 0x00001112 0x00000002 PAD
0x00001114 0x00001114 0x0000000c Code RO 137 .text.millis sysclk.o
0x00001120 0x00001120 0x00000010 Code RO 139 .text.millis_inc sysclk.o
0x00001130 0x00001130 0x0000008a Code RO 2 .text.periph_init main.o
0x000011ba 0x000011ba 0x00000002 PAD
0x000011bc 0x000011bc 0x0000009c Code RO 145 .text.rcu_set_clock_adc sysclk.o
0x00001258 0x00001258 0x0000002a Code RO 4 .text.restart_receive main.o
0x00001282 0x00001282 0x00000002 PAD
0x00001284 0x00001284 0x00000078 Code RO 135 .text.sysclk_init sysclk.o
0x000012fc 0x000012fc 0x00000028 Code RO 49 .text.tmr_delay tmr.o
0x00001324 0x00001324 0x0000002e Code RO 53 .text.tmr_delay_done tmr.o
0x00001352 0x00001352 0x00000002 PAD
0x00001354 0x00001354 0x00000012 Code RO 51 .text.tmr_delay_start tmr.o
0x00001366 0x00001366 0x00000002 PAD
0x00001368 0x00001368 0x0000002c Code RO 55 .text.tmr_handler tmr.o
0x00001394 0x00001394 0x000000cc Code RO 37 .text.tmr_init_first tmr.o
0x00001460 0x00001460 0x00000016 Code RO 43 .text.tmr_set_callback tmr.o
0x00001476 0x00001476 0x00000002 PAD
0x00001478 0x00001478 0x00000016 Code RO 45 .text.tmr_start tmr.o
0x0000148e 0x0000148e 0x00000002 PAD
0x00001490 0x00001490 0x0000007e Code RO 74 .text.uart1_gpio_init uart.o
0x0000150e 0x0000150e 0x00000002 PAD
0x00001510 0x00001510 0x000000f0 Code RO 88 .text.uart_handler uart.o
0x00001600 0x00001600 0x00000072 Code RO 72 .text.uart_init_first uart.o
0x00001672 0x00001672 0x00000002 PAD
0x00001674 0x00001674 0x00000038 Code RO 86 .text.uart_receive_it uart.o
0x000016ac 0x000016ac 0x0000002e Code RO 90 .text.uart_set_callback uart.o
0x000016da 0x000016da 0x00000002 PAD
0x000016dc 0x000016dc 0x00000048 Code RO 78 .text.uart_start uart.o
0x00001724 0x00001724 0x000000a0 Code RO 80 .text.uart_transmit uart.o
0x000017c4 0x000017c4 0x00000078 Code RO 84 .text.uart_transmit_it uart.o
0x0000183c 0x0000183c 0x0000001a Code RO 941 x$fpl$fpinit fz_wm.l(fpinit.o)
0x00001856 0x00001856 0x00000002 PAD
0x00001858 0x00001858 0x00000020 Data RO 1002 Region$$Table anon$$obj.o
Execution Region ER_RW (Exec base: 0x20000000, Load base: 0x00001878, Size: 0x00000228, Max: 0xffffffff, ABSOLUTE, COMPRESSED[0x00000050])
Exec Addr Load Addr Size Type Attr Idx E Section Name Object
0x20000000 COMPRESSED 0x00000038 Data RW 126 .data.adc_seq0_config adc.o
0x20000038 COMPRESSED 0x000000c0 Data RW 27 .data.gpioa_config gpio.o
0x200000f8 COMPRESSED 0x000000c0 Data RW 28 .data.gpiob_config gpio.o
0x200001b8 COMPRESSED 0x0000001c Data RW 58 .data.tmr0_config tmr.o
0x200001d4 COMPRESSED 0x0000001c Data RW 60 .data.tmr1_config tmr.o
0x200001f0 COMPRESSED 0x0000001c Data RW 62 .data.tmr2_config tmr.o
0x2000020c COMPRESSED 0x0000001c Data RW 99 .data.uart1_config uart.o
Execution Region ER_ZI (Exec base: 0x20000228, Load base: 0x000018c8, Size: 0x00000910, Max: 0xffffffff, ABSOLUTE)
Exec Addr Load Addr Size Type Attr Idx E Section Name Object
0x20000228 - 0x00000060 Zero RW 853 .bss c_w.l(libspace.o)
0x20000288 - 0x00000004 Zero RW 482 .bss.SystemCoreClock system_k1921vk035.o
0x2000028c - 0x00000190 Zero RW 13 .bss.adc_buff main.o
0x2000041c - 0x000000a8 Zero RW 125 .bss.hadc adc.o
0x200004c4 - 0x00000008 Zero RW 57 .bss.htmr0 tmr.o
0x200004cc - 0x00000008 Zero RW 59 .bss.htmr1 tmr.o
0x200004d4 - 0x00000008 Zero RW 61 .bss.htmr2 tmr.o
0x200004dc - 0x00000008 Zero RW 63 .bss.htmr3 tmr.o
0x200004e4 - 0x00000020 Zero RW 100 .bss.huart0 uart.o
0x20000504 - 0x00000020 Zero RW 98 .bss.huart1 uart.o
0x20000524 - 0x0000000a Zero RW 12 .bss.rxbuff main.o
0x2000052e 0x000018c8 0x00000002 PAD
0x20000530 - 0x00000004 Zero RW 147 .bss.uwTick sysclk.o
0x20000534 0x000018c8 0x00000004 PAD
0x20000538 - 0x00000200 Zero RW 491 HEAP startup_k1921vk035.o
0x20000738 - 0x00000400 Zero RW 490 STACK startup_k1921vk035.o
==============================================================================
Image component sizes
Code (inc. data) RO Data RW Data ZI Data Debug Object Name
682 0 0 56 168 21004 adc.o
196 0 0 384 0 21442 gpio.o
344 16 0 0 410 28047 main.o
266 0 0 0 0 15568 plib035_adc.o
308 0 0 0 0 23684 plib035_gpio.o
894 4 0 0 0 19079 plib035_rcu.o
28 0 0 0 0 2018 plib035_tmr.o
232 4 0 0 0 10928 plib035_uart.o
64 26 344 0 1536 916 startup_k1921vk035.o
304 8 0 0 4 11618 sysclk.o
264 4 0 0 4 8950 system_k1921vk035.o
516 4 0 84 32 13684 tmr.o
934 4 0 28 64 33809 uart.o
304 0 0 0 0 20168 vk035_it.o
----------------------------------------------------------------------
5512 70 376 552 2224 230915 Object Totals
0 0 32 0 0 0 (incl. Generated)
176 0 0 0 6 0 (incl. Padding)
----------------------------------------------------------------------
Code (inc. data) RO Data RW Data ZI Data Debug Library Member Name
90 0 0 0 0 0 __dczerorl2.o
8 0 0 0 0 68 __main.o
0 0 0 0 0 0 __rtentry.o
12 0 0 0 0 0 __rtentry2.o
6 0 0 0 0 0 __rtentry4.o
52 8 0 0 0 0 __scatter.o
28 0 0 0 0 0 __scatter_zi.o
18 0 0 0 0 80 exit.o
6 0 0 0 0 152 heapauxi.o
0 0 0 0 0 0 indicate_semi.o
2 0 0 0 0 0 libinit.o
6 0 0 0 0 0 libinit2.o
2 0 0 0 0 0 libshutdown.o
2 0 0 0 0 0 libshutdown2.o
8 4 0 0 96 68 libspace.o
2 0 0 0 0 0 rtexit.o
10 0 0 0 0 0 rtexit2.o
12 4 0 0 0 68 sys_exit.o
74 0 0 0 0 80 sys_stackheap_outer.o
2 0 0 0 0 68 use_no_semi.o
26 0 0 0 0 116 fpinit.o
----------------------------------------------------------------------
376 16 0 0 96 700 Library Totals
10 0 0 0 0 0 (incl. Padding)
----------------------------------------------------------------------
Code (inc. data) RO Data RW Data ZI Data Debug Library Name
340 16 0 0 96 584 c_w.l
26 0 0 0 0 116 fz_wm.l
----------------------------------------------------------------------
376 16 0 0 96 700 Library Totals
----------------------------------------------------------------------
==============================================================================
Code (inc. data) RO Data RW Data ZI Data Debug
5888 86 376 552 2320 231219 Grand Totals
5888 86 376 80 2320 231219 ELF Image Totals (compressed)
5888 86 376 80 0 0 ROM Totals
==============================================================================
Total RO Size (Code + RO Data) 6264 ( 6.12kB)
Total RW Size (RW Data + ZI Data) 2872 ( 2.80kB)
Total ROM Size (Code + RO Data + RW Data) 6344 ( 6.20kB)
==============================================================================

View File

@@ -1,1961 +0,0 @@
ARM Macro Assembler Page 1
1 00000000 ;******************** (C) COPYRIGHT 2018 NIIET *********
***********
2 00000000 ;* File Name : startup_K1921VK035.s
3 00000000 ;* Author : NIIET
4 00000000 ;* Version : V1.7
5 00000000 ;* Date : 02.05.2018
6 00000000 ;* Description : K1921VK035 vector table for MDK-
ARM
7 00000000 ;* toolchain.
8 00000000 ;* This module performs:
9 00000000 ;* - Set the initial SP
10 00000000 ;* - Set the initial PC == Reset_Ha
ndler
11 00000000 ;* - Set the vector table entries w
ith the exceptions ISR address
12 00000000 ;* - Configure the clock system
13 00000000 ;* - Branches to __main in the C li
brary (which eventually
14 00000000 ;* calls main()).
15 00000000 ;* After Reset the CortexM4 process
or is in Thread mode,
16 00000000 ;* priority is Privileged, and the
Stack is set to Main.
17 00000000 ;* <<< Use Configuration Wizard in Context Menu >>>
18 00000000 ;*******************************************************
************************
19 00000000 ; THE PRESENT FIRMWARE WHICH IS FOR GUIDANCE ONLY AIMS A
T PROVIDING CUSTOMERS
20 00000000 ; WITH CODING INFORMATION REGARDING THEIR PRODUCTS IN OR
DER FOR THEM TO SAVE TIME.
21 00000000 ; AS A RESULT, NIIET SHALL NOT BE HELD LIABLE FOR ANY DI
RECT,
22 00000000 ; INDIRECT OR CONSEQUENTIAL DAMAGES WITH RESPECT TO ANY
CLAIMS ARISING FROM THE
23 00000000 ; CONTENT OF SUCH FIRMWARE AND/OR THE USE MADE BY CUSTOM
ERS OF THE CODING
24 00000000 ; INFORMATION CONTAINED HEREIN IN CONNECTION WITH THEIR
PRODUCTS.
25 00000000 ;*******************************************************
************************
26 00000000
27 00000000 ; Amount of memory (in bytes) allocated for Stack
28 00000000 ; Tailor this value to your application needs
29 00000000 ; <h> Stack Configuration
30 00000000 ; <o> Stack Size (in Bytes) <0x0-0xFFFFFFFF:8>
31 00000000 ; </h>
32 00000000
33 00000000 00000400
Stack_Size
EQU 0x00000400
34 00000000
35 00000000 AREA STACK, NOINIT, READWRITE, ALIGN
=3
36 00000000 Stack_Mem
SPACE Stack_Size
37 00000400 __initial_sp
38 00000400
39 00000400
40 00000400 ; <h> Heap Configuration
ARM Macro Assembler Page 2
41 00000400 ; <o> Heap Size (in Bytes) <0x0-0xFFFFFFFF:8>
42 00000400 ; </h>
43 00000400
44 00000400 00000200
Heap_Size
EQU 0x00000200
45 00000400
46 00000400 AREA HEAP, NOINIT, READWRITE, ALIGN=
3
47 00000000 __heap_base
48 00000000 Heap_Mem
SPACE Heap_Size
49 00000200 __heap_limit
50 00000200
51 00000200 PRESERVE8
52 00000200 THUMB
53 00000200
54 00000200
55 00000200 ; Vector Table Mapped to Address 0 at Reset
56 00000200 AREA RESET, DATA, READONLY
57 00000000 EXPORT __Vectors
58 00000000 EXPORT __Vectors_End
59 00000000 EXPORT __Vectors_Size
60 00000000
61 00000000 00000000
__Vectors
DCD __initial_sp ; Top of Stack
62 00000004 00000000 DCD Reset_Handler ; Reset Handler
63 00000008 00000000 DCD NMI_Handler ; NMI Handler
64 0000000C 00000000 DCD HardFault_Handler ; Hard Fault
Handler
65 00000010 00000000 DCD MemManage_Handler
; MPU Fault Handler
66 00000014 00000000 DCD BusFault_Handler
; Bus Fault Handler
67 00000018 00000000 DCD UsageFault_Handler ; Usage Faul
t Handler
68 0000001C 00000000 DCD 0 ; Reserved
69 00000020 00000000 DCD 0 ; Reserved
70 00000024 00000000 DCD 0 ; Reserved
71 00000028 00000000 DCD 0 ; Reserved
72 0000002C 00000000 DCD SVC_Handler ; SVCall Handler
73 00000030 00000000 DCD DebugMon_Handler ; Debug Monito
r Handler
74 00000034 00000000 DCD 0 ; Reserved
75 00000038 00000000 DCD PendSV_Handler ; PendSV Handler
76 0000003C 00000000 DCD SysTick_Handler
; SysTick Handler
77 00000040
78 00000040 ; External Interrupts
79 00000040 00000000 DCD WDT_IRQHandler ; Watchdog timer
interrupt
80 00000044 00000000 DCD RCU_IRQHandler ; Reset and cloc
k unit interrupt
81 00000048 00000000 DCD MFLASH_IRQHandler
; MFLASH interrupt
ARM Macro Assembler Page 3
82 0000004C 00000000 DCD GPIOA_IRQHandler
; GPIO A interrupt
83 00000050 00000000 DCD GPIOB_IRQHandler
; GPIO B interrupt
84 00000054 00000000 DCD DMA_CH0_IRQHandler ; DMA channe
l 0 interrupt
85 00000058 00000000 DCD DMA_CH1_IRQHandler ; DMA channe
l 1 interrupt
86 0000005C 00000000 DCD DMA_CH2_IRQHandler ; DMA channe
l 2 interrupt
87 00000060 00000000 DCD DMA_CH3_IRQHandler ; DMA channe
l 3 interrupt
88 00000064 00000000 DCD DMA_CH4_IRQHandler ; DMA channe
l 4 interrupt
89 00000068 00000000 DCD DMA_CH5_IRQHandler ; DMA channe
l 5 interrupt
90 0000006C 00000000 DCD DMA_CH6_IRQHandler ; DMA channe
l 6 interrupt
91 00000070 00000000 DCD DMA_CH7_IRQHandler ; DMA channe
l 7 interrupt
92 00000074 00000000 DCD DMA_CH8_IRQHandler ; DMA channe
l 8 interrupt
93 00000078 00000000 DCD DMA_CH9_IRQHandler ; DMA channe
l 9 interrupt
94 0000007C 00000000 DCD DMA_CH10_IRQHandler ; DMA chann
el 10 interrupt
95 00000080 00000000 DCD DMA_CH11_IRQHandler ; DMA chann
el 11 interrupt
96 00000084 00000000 DCD DMA_CH12_IRQHandler ; DMA chann
el 12 interrupt
97 00000088 00000000 DCD DMA_CH13_IRQHandler ; DMA chann
el 13 interrupt
98 0000008C 00000000 DCD DMA_CH14_IRQHandler ; DMA chann
el 14 interrupt
99 00000090 00000000 DCD DMA_CH15_IRQHandler ; DMA chann
el 15 interrupt
100 00000094 00000000 DCD TMR0_IRQHandler
; Timer 0 interrupt
101 00000098 00000000 DCD TMR1_IRQHandler
; Timer 1 interrupt
102 0000009C 00000000 DCD TMR2_IRQHandler
; Timer 2 interrupt
103 000000A0 00000000 DCD TMR3_IRQHandler
; Timer 3 interrupt
104 000000A4 00000000 DCD UART0_TD_IRQHandler ; UART0 Tra
nsmit Done interrup
t
105 000000A8 00000000 DCD UART0_RX_IRQHandler ; UART0 Rec
ieve interrupt
106 000000AC 00000000 DCD UART0_TX_IRQHandler ; UART0 Tra
nsmit interrupt
107 000000B0 00000000 DCD UART0_E_RT_IRQHandler ; UART0 E
rror and Receive Ti
meout interrupt
108 000000B4 00000000 DCD UART1_TD_IRQHandler ; UART1 Tra
ARM Macro Assembler Page 4
nsmit Done interrup
t
109 000000B8 00000000 DCD UART1_RX_IRQHandler ; UART1 Rec
ieve interrupt
110 000000BC 00000000 DCD UART1_TX_IRQHandler ; UART1 Tra
nsmit interrupt
111 000000C0 00000000 DCD UART1_E_RT_IRQHandler ; UART1 E
rror and Receive Ti
meout interrupt
112 000000C4 00000000 DCD SPI_RO_RT_IRQHandler ; SPI RX F
IFO overrun and Rec
eive Timeout interr
upt
113 000000C8 00000000 DCD SPI_RX_IRQHandler ; SPI Receive
interrupt
114 000000CC 00000000 DCD SPI_TX_IRQHandler ; SPI Transmi
t interrupt
115 000000D0 00000000 DCD I2C_IRQHandler ; I2C interrupt
116 000000D4 00000000 DCD ECAP0_IRQHandler
; ECAP0 interrupt
117 000000D8 00000000 DCD ECAP1_IRQHandler
; ECAP1 interrupt
118 000000DC 00000000 DCD ECAP2_IRQHandler
; ECAP2 interrupt
119 000000E0 00000000 DCD PWM0_IRQHandler
; PWM0 interrupt
120 000000E4 00000000 DCD PWM0_HD_IRQHandler
; PWM0 HD interrupt
121 000000E8 00000000 DCD PWM0_TZ_IRQHandler
; PWM0 TZ interrupt
122 000000EC 00000000 DCD PWM1_IRQHandler
; PWM1 interrupt
123 000000F0 00000000 DCD PWM1_HD_IRQHandler
; PWM1 HD interrupt
124 000000F4 00000000 DCD PWM1_TZ_IRQHandler
; PWM1 TZ interrupt
125 000000F8 00000000 DCD PWM2_IRQHandler
; PWM2 interrupt
126 000000FC 00000000 DCD PWM2_HD_IRQHandler
; PWM2 HD interrupt
127 00000100 00000000 DCD PWM2_TZ_IRQHandler
; PWM2 TZ interrupt
128 00000104 00000000 DCD QEP_IRQHandler ; QEP interrupt
129 00000108 00000000 DCD ADC_SEQ0_IRQHandler ; ADC Seque
ncer 0 interrupt
130 0000010C 00000000 DCD ADC_SEQ1_IRQHandler ; ADC Seque
ncer 1 interrupt
131 00000110 00000000 DCD ADC_DC_IRQHandler ; ADC Digital
Comparator interru
pt
132 00000114 00000000 DCD CAN0_IRQHandler
; CAN0 interrupt
133 00000118 00000000 DCD CAN1_IRQHandler
ARM Macro Assembler Page 5
; CAN1 interrupt
134 0000011C 00000000 DCD CAN2_IRQHandler
; CAN2 interrupt
135 00000120 00000000 DCD CAN3_IRQHandler
; CAN3 interrupt
136 00000124 00000000 DCD CAN4_IRQHandler
; CAN4 interrupt
137 00000128 00000000 DCD CAN5_IRQHandler
; CAN5 interrupt
138 0000012C 00000000 DCD CAN6_IRQHandler
; CAN6 interrupt
139 00000130 00000000 DCD CAN7_IRQHandler
; CAN7 interrupt
140 00000134 00000000 DCD CAN8_IRQHandler
; CAN8 interrupt
141 00000138 00000000 DCD CAN9_IRQHandler
; CAN9 interrupt
142 0000013C 00000000 DCD CAN10_IRQHandler
; CAN10 interrupt
143 00000140 00000000 DCD CAN11_IRQHandler
; CAN11 interrupt
144 00000144 00000000 DCD CAN12_IRQHandler
; CAN12 interrupt
145 00000148 00000000 DCD CAN13_IRQHandler
; CAN13 interrupt
146 0000014C 00000000 DCD CAN14_IRQHandler
; CAN14 interrupt
147 00000150 00000000 DCD CAN15_IRQHandler
; CAN15 interrupt
148 00000154 00000000 DCD FPU_IRQHandler ; FPU exception
interrupt
149 00000158
150 00000158 __Vectors_End
151 00000158
152 00000158 00000158
__Vectors_Size
EQU __Vectors_End - __Vectors
153 00000158
154 00000158 AREA |.text|, CODE, READONLY
155 00000000
156 00000000 ; Reset handler
157 00000000 Reset_Handler
PROC
158 00000000 EXPORT Reset_Handler [WEAK
]
159 00000000 IMPORT __main
160 00000000 IMPORT SystemInit
161 00000000 4809 LDR R0, =SystemInit
162 00000002 4780 BLX R0
163 00000004 4809 LDR R0, =__main
164 00000006 4700 BX R0
165 00000008 ENDP
166 00000008
167 00000008 ; Dummy Exception Handlers (infinite loops which can be
modified)
168 00000008
169 00000008 NMI_Handler
PROC
170 00000008 EXPORT NMI_Handler [WEA
ARM Macro Assembler Page 6
K]
171 00000008 E7FE B .
172 0000000A ENDP
174 0000000A HardFault_Handler
PROC
175 0000000A EXPORT HardFault_Handler [WEA
K]
176 0000000A E7FE B .
177 0000000C ENDP
179 0000000C MemManage_Handler
PROC
180 0000000C EXPORT MemManage_Handler [WEA
K]
181 0000000C E7FE B .
182 0000000E ENDP
184 0000000E BusFault_Handler
PROC
185 0000000E EXPORT BusFault_Handler [WEA
K]
186 0000000E E7FE B .
187 00000010 ENDP
189 00000010 UsageFault_Handler
PROC
190 00000010 EXPORT UsageFault_Handler [WEA
K]
191 00000010 E7FE B .
192 00000012 ENDP
193 00000012 SVC_Handler
PROC
194 00000012 EXPORT SVC_Handler [WEA
K]
195 00000012 E7FE B .
196 00000014 ENDP
198 00000014 DebugMon_Handler
PROC
199 00000014 EXPORT DebugMon_Handler [WEA
K]
200 00000014 E7FE B .
201 00000016 ENDP
202 00000016 PendSV_Handler
PROC
203 00000016 EXPORT PendSV_Handler [WEA
K]
204 00000016 E7FE B .
205 00000018 ENDP
206 00000018 SysTick_Handler
PROC
207 00000018 EXPORT SysTick_Handler [WEA
K]
208 00000018 E7FE B .
209 0000001A ENDP
210 0000001A
211 0000001A Default_Handler
PROC
212 0000001A
213 0000001A EXPORT WDT_IRQHandler [WEAK]
214 0000001A EXPORT RCU_IRQHandler [WEAK]
215 0000001A EXPORT MFLASH_IRQHandler [WE
AK]
ARM Macro Assembler Page 7
216 0000001A EXPORT GPIOA_IRQHandler [WEA
K]
217 0000001A EXPORT GPIOB_IRQHandler [WEA
K]
218 0000001A EXPORT DMA_CH0_IRQHandler [W
EAK]
219 0000001A EXPORT DMA_CH1_IRQHandler [W
EAK]
220 0000001A EXPORT DMA_CH2_IRQHandler [W
EAK]
221 0000001A EXPORT DMA_CH3_IRQHandler [W
EAK]
222 0000001A EXPORT DMA_CH4_IRQHandler [W
EAK]
223 0000001A EXPORT DMA_CH5_IRQHandler [W
EAK]
224 0000001A EXPORT DMA_CH6_IRQHandler [W
EAK]
225 0000001A EXPORT DMA_CH7_IRQHandler [W
EAK]
226 0000001A EXPORT DMA_CH8_IRQHandler [W
EAK]
227 0000001A EXPORT DMA_CH9_IRQHandler [W
EAK]
228 0000001A EXPORT DMA_CH10_IRQHandler [
WEAK]
229 0000001A EXPORT DMA_CH11_IRQHandler [
WEAK]
230 0000001A EXPORT DMA_CH12_IRQHandler [
WEAK]
231 0000001A EXPORT DMA_CH13_IRQHandler [
WEAK]
232 0000001A EXPORT DMA_CH14_IRQHandler [
WEAK]
233 0000001A EXPORT DMA_CH15_IRQHandler [
WEAK]
234 0000001A EXPORT TMR0_IRQHandler [WEAK
]
235 0000001A EXPORT TMR1_IRQHandler [WEAK
]
236 0000001A EXPORT TMR2_IRQHandler [WEAK
]
237 0000001A EXPORT TMR3_IRQHandler [WEAK
]
238 0000001A EXPORT UART0_TD_IRQHandler [
WEAK]
239 0000001A EXPORT UART0_RX_IRQHandler [
WEAK]
240 0000001A EXPORT UART0_TX_IRQHandler [
WEAK]
241 0000001A EXPORT UART0_E_RT_IRQHandler
[WEAK]
242 0000001A EXPORT UART1_TD_IRQHandler [
WEAK]
243 0000001A EXPORT UART1_RX_IRQHandler [
WEAK]
244 0000001A EXPORT UART1_TX_IRQHandler [
WEAK]
245 0000001A EXPORT UART1_E_RT_IRQHandler
ARM Macro Assembler Page 8
[WEAK]
246 0000001A EXPORT SPI_RO_RT_IRQHandler
[WEAK]
247 0000001A EXPORT SPI_RX_IRQHandler [WE
AK]
248 0000001A EXPORT SPI_TX_IRQHandler [WE
AK]
249 0000001A EXPORT I2C_IRQHandler [WEAK]
250 0000001A EXPORT ECAP0_IRQHandler [WEA
K]
251 0000001A EXPORT ECAP1_IRQHandler [WEA
K]
252 0000001A EXPORT ECAP2_IRQHandler [WEA
K]
253 0000001A EXPORT PWM0_IRQHandler [WEAK
]
254 0000001A EXPORT PWM0_HD_IRQHandler [W
EAK]
255 0000001A EXPORT PWM0_TZ_IRQHandler [W
EAK]
256 0000001A EXPORT PWM1_IRQHandler [WEAK
]
257 0000001A EXPORT PWM1_HD_IRQHandler [W
EAK]
258 0000001A EXPORT PWM1_TZ_IRQHandler [W
EAK]
259 0000001A EXPORT PWM2_IRQHandler [WEAK
]
260 0000001A EXPORT PWM2_HD_IRQHandler [W
EAK]
261 0000001A EXPORT PWM2_TZ_IRQHandler [W
EAK]
262 0000001A EXPORT QEP_IRQHandler [WEAK]
263 0000001A EXPORT ADC_SEQ0_IRQHandler [
WEAK]
264 0000001A EXPORT ADC_SEQ1_IRQHandler [
WEAK]
265 0000001A EXPORT ADC_DC_IRQHandler [WE
AK]
266 0000001A EXPORT CAN0_IRQHandler [WEAK
]
267 0000001A EXPORT CAN1_IRQHandler [WEAK
]
268 0000001A EXPORT CAN2_IRQHandler [WEAK
]
269 0000001A EXPORT CAN3_IRQHandler [WEAK
]
270 0000001A EXPORT CAN4_IRQHandler [WEAK
]
271 0000001A EXPORT CAN5_IRQHandler [WEAK
]
272 0000001A EXPORT CAN6_IRQHandler [WEAK
]
273 0000001A EXPORT CAN7_IRQHandler [WEAK
]
274 0000001A EXPORT CAN8_IRQHandler [WEAK
]
275 0000001A EXPORT CAN9_IRQHandler [WEAK
]
ARM Macro Assembler Page 9
276 0000001A EXPORT CAN10_IRQHandler [WEA
K]
277 0000001A EXPORT CAN11_IRQHandler [WEA
K]
278 0000001A EXPORT CAN12_IRQHandler [WEA
K]
279 0000001A EXPORT CAN13_IRQHandler [WEA
K]
280 0000001A EXPORT CAN14_IRQHandler [WEA
K]
281 0000001A EXPORT CAN15_IRQHandler [WEA
K]
282 0000001A EXPORT FPU_IRQHandler [WEAK]
283 0000001A
284 0000001A
285 0000001A
286 0000001A WDT_IRQHandler
287 0000001A RCU_IRQHandler
288 0000001A MFLASH_IRQHandler
289 0000001A GPIOA_IRQHandler
290 0000001A GPIOB_IRQHandler
291 0000001A DMA_CH0_IRQHandler
292 0000001A DMA_CH1_IRQHandler
293 0000001A DMA_CH2_IRQHandler
294 0000001A DMA_CH3_IRQHandler
295 0000001A DMA_CH4_IRQHandler
296 0000001A DMA_CH5_IRQHandler
297 0000001A DMA_CH6_IRQHandler
298 0000001A DMA_CH7_IRQHandler
299 0000001A DMA_CH8_IRQHandler
300 0000001A DMA_CH9_IRQHandler
301 0000001A DMA_CH10_IRQHandler
302 0000001A DMA_CH11_IRQHandler
303 0000001A DMA_CH12_IRQHandler
304 0000001A DMA_CH13_IRQHandler
305 0000001A DMA_CH14_IRQHandler
306 0000001A DMA_CH15_IRQHandler
307 0000001A TMR0_IRQHandler
308 0000001A TMR1_IRQHandler
309 0000001A TMR2_IRQHandler
310 0000001A TMR3_IRQHandler
311 0000001A UART0_TD_IRQHandler
312 0000001A UART0_RX_IRQHandler
313 0000001A UART0_TX_IRQHandler
314 0000001A UART0_E_RT_IRQHandler
315 0000001A UART1_TD_IRQHandler
316 0000001A UART1_RX_IRQHandler
317 0000001A UART1_TX_IRQHandler
318 0000001A UART1_E_RT_IRQHandler
319 0000001A SPI_RO_RT_IRQHandler
320 0000001A SPI_RX_IRQHandler
321 0000001A SPI_TX_IRQHandler
322 0000001A I2C_IRQHandler
323 0000001A ECAP0_IRQHandler
324 0000001A ECAP1_IRQHandler
325 0000001A ECAP2_IRQHandler
326 0000001A PWM0_IRQHandler
327 0000001A PWM0_HD_IRQHandler
328 0000001A PWM0_TZ_IRQHandler
ARM Macro Assembler Page 10
329 0000001A PWM1_IRQHandler
330 0000001A PWM1_HD_IRQHandler
331 0000001A PWM1_TZ_IRQHandler
332 0000001A PWM2_IRQHandler
333 0000001A PWM2_HD_IRQHandler
334 0000001A PWM2_TZ_IRQHandler
335 0000001A QEP_IRQHandler
336 0000001A ADC_SEQ0_IRQHandler
337 0000001A ADC_SEQ1_IRQHandler
338 0000001A ADC_DC_IRQHandler
339 0000001A CAN0_IRQHandler
340 0000001A CAN1_IRQHandler
341 0000001A CAN2_IRQHandler
342 0000001A CAN3_IRQHandler
343 0000001A CAN4_IRQHandler
344 0000001A CAN5_IRQHandler
345 0000001A CAN6_IRQHandler
346 0000001A CAN7_IRQHandler
347 0000001A CAN8_IRQHandler
348 0000001A CAN9_IRQHandler
349 0000001A CAN10_IRQHandler
350 0000001A CAN11_IRQHandler
351 0000001A CAN12_IRQHandler
352 0000001A CAN13_IRQHandler
353 0000001A CAN14_IRQHandler
354 0000001A CAN15_IRQHandler
355 0000001A FPU_IRQHandler
356 0000001A
357 0000001A
358 0000001A
359 0000001A E7FE B .
360 0000001C
361 0000001C ENDP
362 0000001C
363 0000001C ALIGN
364 0000001C
365 0000001C ;*******************************************************
************************
366 0000001C ; User Stack and Heap initialization
367 0000001C ;*******************************************************
************************
368 0000001C IF :DEF:__MICROLIB
375 0000001C
376 0000001C IMPORT __use_two_region_memory
377 0000001C EXPORT __user_initial_stackheap
378 0000001C
379 0000001C __user_initial_stackheap
380 0000001C
381 0000001C 4804 LDR R0, = Heap_Mem
382 0000001E 4905 LDR R1, =(Stack_Mem + Stack_Size)
383 00000020 4A05 LDR R2, = (Heap_Mem + Heap_Size)
384 00000022 4B06 LDR R3, = Stack_Mem
385 00000024 4770 BX LR
386 00000026
387 00000026 00 00 ALIGN
388 00000028
389 00000028 ENDIF
390 00000028
391 00000028 END
ARM Macro Assembler Page 11
00000000
00000000
00000000
00000400
00000200
00000000
Command Line: --debug --xref --diag_suppress=9931,A1950W --cpu=Cortex-M4.fp.sp
--depend=.\objects\startup_k1921vk035.d -o.\objects\startup_k1921vk035.o -IC:\U
sers\I\AppData\Local\Arm\Packs\NIIET\K1921VK035_DFP\2.0.6\Device\Include --pred
efine="__UVISION_VERSION SETA 538" --predefine="K1921VK035 SETA 1" --list=.\lis
tings\startup_k1921vk035.lst platform\Device\NIIET\K1921VK035\Source\ARM\startu
p_K1921VK035.s
ARM Macro Assembler Page 1 Alphabetic symbol ordering
Relocatable symbols
STACK 00000000
Symbol: STACK
Definitions
At line 35 in file platform\Device\NIIET\K1921VK035\Source\ARM\startup_K1
921VK035.s
Uses
None
Comment: STACK unused
Stack_Mem 00000000
Symbol: Stack_Mem
Definitions
At line 36 in file platform\Device\NIIET\K1921VK035\Source\ARM\startup_K1
921VK035.s
Uses
At line 382 in file platform\Device\NIIET\K1921VK035\Source\ARM\startup_K
1921VK035.s
At line 384 in file platform\Device\NIIET\K1921VK035\Source\ARM\startup_K
1921VK035.s
__initial_sp 00000400
Symbol: __initial_sp
Definitions
At line 37 in file platform\Device\NIIET\K1921VK035\Source\ARM\startup_K1
921VK035.s
Uses
At line 61 in file platform\Device\NIIET\K1921VK035\Source\ARM\startup_K1
921VK035.s
Comment: __initial_sp used once
3 symbols
ARM Macro Assembler Page 1 Alphabetic symbol ordering
Relocatable symbols
HEAP 00000000
Symbol: HEAP
Definitions
At line 46 in file platform\Device\NIIET\K1921VK035\Source\ARM\startup_K1
921VK035.s
Uses
None
Comment: HEAP unused
Heap_Mem 00000000
Symbol: Heap_Mem
Definitions
At line 48 in file platform\Device\NIIET\K1921VK035\Source\ARM\startup_K1
921VK035.s
Uses
At line 381 in file platform\Device\NIIET\K1921VK035\Source\ARM\startup_K
1921VK035.s
At line 383 in file platform\Device\NIIET\K1921VK035\Source\ARM\startup_K
1921VK035.s
__heap_base 00000000
Symbol: __heap_base
Definitions
At line 47 in file platform\Device\NIIET\K1921VK035\Source\ARM\startup_K1
921VK035.s
Uses
None
Comment: __heap_base unused
__heap_limit 00000200
Symbol: __heap_limit
Definitions
At line 49 in file platform\Device\NIIET\K1921VK035\Source\ARM\startup_K1
921VK035.s
Uses
None
Comment: __heap_limit unused
4 symbols
ARM Macro Assembler Page 1 Alphabetic symbol ordering
Relocatable symbols
RESET 00000000
Symbol: RESET
Definitions
At line 56 in file platform\Device\NIIET\K1921VK035\Source\ARM\startup_K1
921VK035.s
Uses
None
Comment: RESET unused
__Vectors 00000000
Symbol: __Vectors
Definitions
At line 61 in file platform\Device\NIIET\K1921VK035\Source\ARM\startup_K1
921VK035.s
Uses
At line 57 in file platform\Device\NIIET\K1921VK035\Source\ARM\startup_K1
921VK035.s
At line 152 in file platform\Device\NIIET\K1921VK035\Source\ARM\startup_K
1921VK035.s
__Vectors_End 00000158
Symbol: __Vectors_End
Definitions
At line 150 in file platform\Device\NIIET\K1921VK035\Source\ARM\startup_K
1921VK035.s
Uses
At line 58 in file platform\Device\NIIET\K1921VK035\Source\ARM\startup_K1
921VK035.s
At line 152 in file platform\Device\NIIET\K1921VK035\Source\ARM\startup_K
1921VK035.s
3 symbols
ARM Macro Assembler Page 1 Alphabetic symbol ordering
Relocatable symbols
.text 00000000
Symbol: .text
Definitions
At line 154 in file platform\Device\NIIET\K1921VK035\Source\ARM\startup_K
1921VK035.s
Uses
None
Comment: .text unused
ADC_DC_IRQHandler 0000001A
Symbol: ADC_DC_IRQHandler
Definitions
At line 338 in file platform\Device\NIIET\K1921VK035\Source\ARM\startup_K
1921VK035.s
Uses
At line 131 in file platform\Device\NIIET\K1921VK035\Source\ARM\startup_K
1921VK035.s
At line 265 in file platform\Device\NIIET\K1921VK035\Source\ARM\startup_K
1921VK035.s
ADC_SEQ0_IRQHandler 0000001A
Symbol: ADC_SEQ0_IRQHandler
Definitions
At line 336 in file platform\Device\NIIET\K1921VK035\Source\ARM\startup_K
1921VK035.s
Uses
At line 129 in file platform\Device\NIIET\K1921VK035\Source\ARM\startup_K
1921VK035.s
At line 263 in file platform\Device\NIIET\K1921VK035\Source\ARM\startup_K
1921VK035.s
ADC_SEQ1_IRQHandler 0000001A
Symbol: ADC_SEQ1_IRQHandler
Definitions
At line 337 in file platform\Device\NIIET\K1921VK035\Source\ARM\startup_K
1921VK035.s
Uses
At line 130 in file platform\Device\NIIET\K1921VK035\Source\ARM\startup_K
1921VK035.s
At line 264 in file platform\Device\NIIET\K1921VK035\Source\ARM\startup_K
1921VK035.s
BusFault_Handler 0000000E
Symbol: BusFault_Handler
Definitions
At line 184 in file platform\Device\NIIET\K1921VK035\Source\ARM\startup_K
1921VK035.s
Uses
At line 66 in file platform\Device\NIIET\K1921VK035\Source\ARM\startup_K1
921VK035.s
At line 185 in file platform\Device\NIIET\K1921VK035\Source\ARM\startup_K
1921VK035.s
CAN0_IRQHandler 0000001A
ARM Macro Assembler Page 2 Alphabetic symbol ordering
Relocatable symbols
Symbol: CAN0_IRQHandler
Definitions
At line 339 in file platform\Device\NIIET\K1921VK035\Source\ARM\startup_K
1921VK035.s
Uses
At line 132 in file platform\Device\NIIET\K1921VK035\Source\ARM\startup_K
1921VK035.s
At line 266 in file platform\Device\NIIET\K1921VK035\Source\ARM\startup_K
1921VK035.s
CAN10_IRQHandler 0000001A
Symbol: CAN10_IRQHandler
Definitions
At line 349 in file platform\Device\NIIET\K1921VK035\Source\ARM\startup_K
1921VK035.s
Uses
At line 142 in file platform\Device\NIIET\K1921VK035\Source\ARM\startup_K
1921VK035.s
At line 276 in file platform\Device\NIIET\K1921VK035\Source\ARM\startup_K
1921VK035.s
CAN11_IRQHandler 0000001A
Symbol: CAN11_IRQHandler
Definitions
At line 350 in file platform\Device\NIIET\K1921VK035\Source\ARM\startup_K
1921VK035.s
Uses
At line 143 in file platform\Device\NIIET\K1921VK035\Source\ARM\startup_K
1921VK035.s
At line 277 in file platform\Device\NIIET\K1921VK035\Source\ARM\startup_K
1921VK035.s
CAN12_IRQHandler 0000001A
Symbol: CAN12_IRQHandler
Definitions
At line 351 in file platform\Device\NIIET\K1921VK035\Source\ARM\startup_K
1921VK035.s
Uses
At line 144 in file platform\Device\NIIET\K1921VK035\Source\ARM\startup_K
1921VK035.s
At line 278 in file platform\Device\NIIET\K1921VK035\Source\ARM\startup_K
1921VK035.s
CAN13_IRQHandler 0000001A
Symbol: CAN13_IRQHandler
Definitions
At line 352 in file platform\Device\NIIET\K1921VK035\Source\ARM\startup_K
1921VK035.s
Uses
At line 145 in file platform\Device\NIIET\K1921VK035\Source\ARM\startup_K
1921VK035.s
At line 279 in file platform\Device\NIIET\K1921VK035\Source\ARM\startup_K
1921VK035.s
CAN14_IRQHandler 0000001A
ARM Macro Assembler Page 3 Alphabetic symbol ordering
Relocatable symbols
Symbol: CAN14_IRQHandler
Definitions
At line 353 in file platform\Device\NIIET\K1921VK035\Source\ARM\startup_K
1921VK035.s
Uses
At line 146 in file platform\Device\NIIET\K1921VK035\Source\ARM\startup_K
1921VK035.s
At line 280 in file platform\Device\NIIET\K1921VK035\Source\ARM\startup_K
1921VK035.s
CAN15_IRQHandler 0000001A
Symbol: CAN15_IRQHandler
Definitions
At line 354 in file platform\Device\NIIET\K1921VK035\Source\ARM\startup_K
1921VK035.s
Uses
At line 147 in file platform\Device\NIIET\K1921VK035\Source\ARM\startup_K
1921VK035.s
At line 281 in file platform\Device\NIIET\K1921VK035\Source\ARM\startup_K
1921VK035.s
CAN1_IRQHandler 0000001A
Symbol: CAN1_IRQHandler
Definitions
At line 340 in file platform\Device\NIIET\K1921VK035\Source\ARM\startup_K
1921VK035.s
Uses
At line 133 in file platform\Device\NIIET\K1921VK035\Source\ARM\startup_K
1921VK035.s
At line 267 in file platform\Device\NIIET\K1921VK035\Source\ARM\startup_K
1921VK035.s
CAN2_IRQHandler 0000001A
Symbol: CAN2_IRQHandler
Definitions
At line 341 in file platform\Device\NIIET\K1921VK035\Source\ARM\startup_K
1921VK035.s
Uses
At line 134 in file platform\Device\NIIET\K1921VK035\Source\ARM\startup_K
1921VK035.s
At line 268 in file platform\Device\NIIET\K1921VK035\Source\ARM\startup_K
1921VK035.s
CAN3_IRQHandler 0000001A
Symbol: CAN3_IRQHandler
Definitions
At line 342 in file platform\Device\NIIET\K1921VK035\Source\ARM\startup_K
1921VK035.s
Uses
At line 135 in file platform\Device\NIIET\K1921VK035\Source\ARM\startup_K
1921VK035.s
At line 269 in file platform\Device\NIIET\K1921VK035\Source\ARM\startup_K
1921VK035.s
ARM Macro Assembler Page 4 Alphabetic symbol ordering
Relocatable symbols
CAN4_IRQHandler 0000001A
Symbol: CAN4_IRQHandler
Definitions
At line 343 in file platform\Device\NIIET\K1921VK035\Source\ARM\startup_K
1921VK035.s
Uses
At line 136 in file platform\Device\NIIET\K1921VK035\Source\ARM\startup_K
1921VK035.s
At line 270 in file platform\Device\NIIET\K1921VK035\Source\ARM\startup_K
1921VK035.s
CAN5_IRQHandler 0000001A
Symbol: CAN5_IRQHandler
Definitions
At line 344 in file platform\Device\NIIET\K1921VK035\Source\ARM\startup_K
1921VK035.s
Uses
At line 137 in file platform\Device\NIIET\K1921VK035\Source\ARM\startup_K
1921VK035.s
At line 271 in file platform\Device\NIIET\K1921VK035\Source\ARM\startup_K
1921VK035.s
CAN6_IRQHandler 0000001A
Symbol: CAN6_IRQHandler
Definitions
At line 345 in file platform\Device\NIIET\K1921VK035\Source\ARM\startup_K
1921VK035.s
Uses
At line 138 in file platform\Device\NIIET\K1921VK035\Source\ARM\startup_K
1921VK035.s
At line 272 in file platform\Device\NIIET\K1921VK035\Source\ARM\startup_K
1921VK035.s
CAN7_IRQHandler 0000001A
Symbol: CAN7_IRQHandler
Definitions
At line 346 in file platform\Device\NIIET\K1921VK035\Source\ARM\startup_K
1921VK035.s
Uses
At line 139 in file platform\Device\NIIET\K1921VK035\Source\ARM\startup_K
1921VK035.s
At line 273 in file platform\Device\NIIET\K1921VK035\Source\ARM\startup_K
1921VK035.s
CAN8_IRQHandler 0000001A
Symbol: CAN8_IRQHandler
Definitions
At line 347 in file platform\Device\NIIET\K1921VK035\Source\ARM\startup_K
1921VK035.s
Uses
At line 140 in file platform\Device\NIIET\K1921VK035\Source\ARM\startup_K
1921VK035.s
At line 274 in file platform\Device\NIIET\K1921VK035\Source\ARM\startup_K
1921VK035.s
ARM Macro Assembler Page 5 Alphabetic symbol ordering
Relocatable symbols
CAN9_IRQHandler 0000001A
Symbol: CAN9_IRQHandler
Definitions
At line 348 in file platform\Device\NIIET\K1921VK035\Source\ARM\startup_K
1921VK035.s
Uses
At line 141 in file platform\Device\NIIET\K1921VK035\Source\ARM\startup_K
1921VK035.s
At line 275 in file platform\Device\NIIET\K1921VK035\Source\ARM\startup_K
1921VK035.s
DMA_CH0_IRQHandler 0000001A
Symbol: DMA_CH0_IRQHandler
Definitions
At line 291 in file platform\Device\NIIET\K1921VK035\Source\ARM\startup_K
1921VK035.s
Uses
At line 84 in file platform\Device\NIIET\K1921VK035\Source\ARM\startup_K1
921VK035.s
At line 218 in file platform\Device\NIIET\K1921VK035\Source\ARM\startup_K
1921VK035.s
DMA_CH10_IRQHandler 0000001A
Symbol: DMA_CH10_IRQHandler
Definitions
At line 301 in file platform\Device\NIIET\K1921VK035\Source\ARM\startup_K
1921VK035.s
Uses
At line 94 in file platform\Device\NIIET\K1921VK035\Source\ARM\startup_K1
921VK035.s
At line 228 in file platform\Device\NIIET\K1921VK035\Source\ARM\startup_K
1921VK035.s
DMA_CH11_IRQHandler 0000001A
Symbol: DMA_CH11_IRQHandler
Definitions
At line 302 in file platform\Device\NIIET\K1921VK035\Source\ARM\startup_K
1921VK035.s
Uses
At line 95 in file platform\Device\NIIET\K1921VK035\Source\ARM\startup_K1
921VK035.s
At line 229 in file platform\Device\NIIET\K1921VK035\Source\ARM\startup_K
1921VK035.s
DMA_CH12_IRQHandler 0000001A
Symbol: DMA_CH12_IRQHandler
Definitions
At line 303 in file platform\Device\NIIET\K1921VK035\Source\ARM\startup_K
1921VK035.s
Uses
At line 96 in file platform\Device\NIIET\K1921VK035\Source\ARM\startup_K1
921VK035.s
At line 230 in file platform\Device\NIIET\K1921VK035\Source\ARM\startup_K
ARM Macro Assembler Page 6 Alphabetic symbol ordering
Relocatable symbols
1921VK035.s
DMA_CH13_IRQHandler 0000001A
Symbol: DMA_CH13_IRQHandler
Definitions
At line 304 in file platform\Device\NIIET\K1921VK035\Source\ARM\startup_K
1921VK035.s
Uses
At line 97 in file platform\Device\NIIET\K1921VK035\Source\ARM\startup_K1
921VK035.s
At line 231 in file platform\Device\NIIET\K1921VK035\Source\ARM\startup_K
1921VK035.s
DMA_CH14_IRQHandler 0000001A
Symbol: DMA_CH14_IRQHandler
Definitions
At line 305 in file platform\Device\NIIET\K1921VK035\Source\ARM\startup_K
1921VK035.s
Uses
At line 98 in file platform\Device\NIIET\K1921VK035\Source\ARM\startup_K1
921VK035.s
At line 232 in file platform\Device\NIIET\K1921VK035\Source\ARM\startup_K
1921VK035.s
DMA_CH15_IRQHandler 0000001A
Symbol: DMA_CH15_IRQHandler
Definitions
At line 306 in file platform\Device\NIIET\K1921VK035\Source\ARM\startup_K
1921VK035.s
Uses
At line 99 in file platform\Device\NIIET\K1921VK035\Source\ARM\startup_K1
921VK035.s
At line 233 in file platform\Device\NIIET\K1921VK035\Source\ARM\startup_K
1921VK035.s
DMA_CH1_IRQHandler 0000001A
Symbol: DMA_CH1_IRQHandler
Definitions
At line 292 in file platform\Device\NIIET\K1921VK035\Source\ARM\startup_K
1921VK035.s
Uses
At line 85 in file platform\Device\NIIET\K1921VK035\Source\ARM\startup_K1
921VK035.s
At line 219 in file platform\Device\NIIET\K1921VK035\Source\ARM\startup_K
1921VK035.s
DMA_CH2_IRQHandler 0000001A
Symbol: DMA_CH2_IRQHandler
Definitions
At line 293 in file platform\Device\NIIET\K1921VK035\Source\ARM\startup_K
1921VK035.s
Uses
At line 86 in file platform\Device\NIIET\K1921VK035\Source\ARM\startup_K1
921VK035.s
ARM Macro Assembler Page 7 Alphabetic symbol ordering
Relocatable symbols
At line 220 in file platform\Device\NIIET\K1921VK035\Source\ARM\startup_K
1921VK035.s
DMA_CH3_IRQHandler 0000001A
Symbol: DMA_CH3_IRQHandler
Definitions
At line 294 in file platform\Device\NIIET\K1921VK035\Source\ARM\startup_K
1921VK035.s
Uses
At line 87 in file platform\Device\NIIET\K1921VK035\Source\ARM\startup_K1
921VK035.s
At line 221 in file platform\Device\NIIET\K1921VK035\Source\ARM\startup_K
1921VK035.s
DMA_CH4_IRQHandler 0000001A
Symbol: DMA_CH4_IRQHandler
Definitions
At line 295 in file platform\Device\NIIET\K1921VK035\Source\ARM\startup_K
1921VK035.s
Uses
At line 88 in file platform\Device\NIIET\K1921VK035\Source\ARM\startup_K1
921VK035.s
At line 222 in file platform\Device\NIIET\K1921VK035\Source\ARM\startup_K
1921VK035.s
DMA_CH5_IRQHandler 0000001A
Symbol: DMA_CH5_IRQHandler
Definitions
At line 296 in file platform\Device\NIIET\K1921VK035\Source\ARM\startup_K
1921VK035.s
Uses
At line 89 in file platform\Device\NIIET\K1921VK035\Source\ARM\startup_K1
921VK035.s
At line 223 in file platform\Device\NIIET\K1921VK035\Source\ARM\startup_K
1921VK035.s
DMA_CH6_IRQHandler 0000001A
Symbol: DMA_CH6_IRQHandler
Definitions
At line 297 in file platform\Device\NIIET\K1921VK035\Source\ARM\startup_K
1921VK035.s
Uses
At line 90 in file platform\Device\NIIET\K1921VK035\Source\ARM\startup_K1
921VK035.s
At line 224 in file platform\Device\NIIET\K1921VK035\Source\ARM\startup_K
1921VK035.s
DMA_CH7_IRQHandler 0000001A
Symbol: DMA_CH7_IRQHandler
Definitions
At line 298 in file platform\Device\NIIET\K1921VK035\Source\ARM\startup_K
1921VK035.s
Uses
At line 91 in file platform\Device\NIIET\K1921VK035\Source\ARM\startup_K1
ARM Macro Assembler Page 8 Alphabetic symbol ordering
Relocatable symbols
921VK035.s
At line 225 in file platform\Device\NIIET\K1921VK035\Source\ARM\startup_K
1921VK035.s
DMA_CH8_IRQHandler 0000001A
Symbol: DMA_CH8_IRQHandler
Definitions
At line 299 in file platform\Device\NIIET\K1921VK035\Source\ARM\startup_K
1921VK035.s
Uses
At line 92 in file platform\Device\NIIET\K1921VK035\Source\ARM\startup_K1
921VK035.s
At line 226 in file platform\Device\NIIET\K1921VK035\Source\ARM\startup_K
1921VK035.s
DMA_CH9_IRQHandler 0000001A
Symbol: DMA_CH9_IRQHandler
Definitions
At line 300 in file platform\Device\NIIET\K1921VK035\Source\ARM\startup_K
1921VK035.s
Uses
At line 93 in file platform\Device\NIIET\K1921VK035\Source\ARM\startup_K1
921VK035.s
At line 227 in file platform\Device\NIIET\K1921VK035\Source\ARM\startup_K
1921VK035.s
DebugMon_Handler 00000014
Symbol: DebugMon_Handler
Definitions
At line 198 in file platform\Device\NIIET\K1921VK035\Source\ARM\startup_K
1921VK035.s
Uses
At line 73 in file platform\Device\NIIET\K1921VK035\Source\ARM\startup_K1
921VK035.s
At line 199 in file platform\Device\NIIET\K1921VK035\Source\ARM\startup_K
1921VK035.s
Default_Handler 0000001A
Symbol: Default_Handler
Definitions
At line 211 in file platform\Device\NIIET\K1921VK035\Source\ARM\startup_K
1921VK035.s
Uses
None
Comment: Default_Handler unused
ECAP0_IRQHandler 0000001A
Symbol: ECAP0_IRQHandler
Definitions
At line 323 in file platform\Device\NIIET\K1921VK035\Source\ARM\startup_K
1921VK035.s
Uses
At line 116 in file platform\Device\NIIET\K1921VK035\Source\ARM\startup_K
1921VK035.s
At line 250 in file platform\Device\NIIET\K1921VK035\Source\ARM\startup_K
ARM Macro Assembler Page 9 Alphabetic symbol ordering
Relocatable symbols
1921VK035.s
ECAP1_IRQHandler 0000001A
Symbol: ECAP1_IRQHandler
Definitions
At line 324 in file platform\Device\NIIET\K1921VK035\Source\ARM\startup_K
1921VK035.s
Uses
At line 117 in file platform\Device\NIIET\K1921VK035\Source\ARM\startup_K
1921VK035.s
At line 251 in file platform\Device\NIIET\K1921VK035\Source\ARM\startup_K
1921VK035.s
ECAP2_IRQHandler 0000001A
Symbol: ECAP2_IRQHandler
Definitions
At line 325 in file platform\Device\NIIET\K1921VK035\Source\ARM\startup_K
1921VK035.s
Uses
At line 118 in file platform\Device\NIIET\K1921VK035\Source\ARM\startup_K
1921VK035.s
At line 252 in file platform\Device\NIIET\K1921VK035\Source\ARM\startup_K
1921VK035.s
FPU_IRQHandler 0000001A
Symbol: FPU_IRQHandler
Definitions
At line 355 in file platform\Device\NIIET\K1921VK035\Source\ARM\startup_K
1921VK035.s
Uses
At line 148 in file platform\Device\NIIET\K1921VK035\Source\ARM\startup_K
1921VK035.s
At line 282 in file platform\Device\NIIET\K1921VK035\Source\ARM\startup_K
1921VK035.s
GPIOA_IRQHandler 0000001A
Symbol: GPIOA_IRQHandler
Definitions
At line 289 in file platform\Device\NIIET\K1921VK035\Source\ARM\startup_K
1921VK035.s
Uses
At line 82 in file platform\Device\NIIET\K1921VK035\Source\ARM\startup_K1
921VK035.s
At line 216 in file platform\Device\NIIET\K1921VK035\Source\ARM\startup_K
1921VK035.s
GPIOB_IRQHandler 0000001A
Symbol: GPIOB_IRQHandler
Definitions
At line 290 in file platform\Device\NIIET\K1921VK035\Source\ARM\startup_K
1921VK035.s
Uses
At line 83 in file platform\Device\NIIET\K1921VK035\Source\ARM\startup_K1
921VK035.s
ARM Macro Assembler Page 10 Alphabetic symbol ordering
Relocatable symbols
At line 217 in file platform\Device\NIIET\K1921VK035\Source\ARM\startup_K
1921VK035.s
HardFault_Handler 0000000A
Symbol: HardFault_Handler
Definitions
At line 174 in file platform\Device\NIIET\K1921VK035\Source\ARM\startup_K
1921VK035.s
Uses
At line 64 in file platform\Device\NIIET\K1921VK035\Source\ARM\startup_K1
921VK035.s
At line 175 in file platform\Device\NIIET\K1921VK035\Source\ARM\startup_K
1921VK035.s
I2C_IRQHandler 0000001A
Symbol: I2C_IRQHandler
Definitions
At line 322 in file platform\Device\NIIET\K1921VK035\Source\ARM\startup_K
1921VK035.s
Uses
At line 115 in file platform\Device\NIIET\K1921VK035\Source\ARM\startup_K
1921VK035.s
At line 249 in file platform\Device\NIIET\K1921VK035\Source\ARM\startup_K
1921VK035.s
MFLASH_IRQHandler 0000001A
Symbol: MFLASH_IRQHandler
Definitions
At line 288 in file platform\Device\NIIET\K1921VK035\Source\ARM\startup_K
1921VK035.s
Uses
At line 81 in file platform\Device\NIIET\K1921VK035\Source\ARM\startup_K1
921VK035.s
At line 215 in file platform\Device\NIIET\K1921VK035\Source\ARM\startup_K
1921VK035.s
MemManage_Handler 0000000C
Symbol: MemManage_Handler
Definitions
At line 179 in file platform\Device\NIIET\K1921VK035\Source\ARM\startup_K
1921VK035.s
Uses
At line 65 in file platform\Device\NIIET\K1921VK035\Source\ARM\startup_K1
921VK035.s
At line 180 in file platform\Device\NIIET\K1921VK035\Source\ARM\startup_K
1921VK035.s
NMI_Handler 00000008
Symbol: NMI_Handler
Definitions
At line 169 in file platform\Device\NIIET\K1921VK035\Source\ARM\startup_K
1921VK035.s
Uses
At line 63 in file platform\Device\NIIET\K1921VK035\Source\ARM\startup_K1
ARM Macro Assembler Page 11 Alphabetic symbol ordering
Relocatable symbols
921VK035.s
At line 170 in file platform\Device\NIIET\K1921VK035\Source\ARM\startup_K
1921VK035.s
PWM0_HD_IRQHandler 0000001A
Symbol: PWM0_HD_IRQHandler
Definitions
At line 327 in file platform\Device\NIIET\K1921VK035\Source\ARM\startup_K
1921VK035.s
Uses
At line 120 in file platform\Device\NIIET\K1921VK035\Source\ARM\startup_K
1921VK035.s
At line 254 in file platform\Device\NIIET\K1921VK035\Source\ARM\startup_K
1921VK035.s
PWM0_IRQHandler 0000001A
Symbol: PWM0_IRQHandler
Definitions
At line 326 in file platform\Device\NIIET\K1921VK035\Source\ARM\startup_K
1921VK035.s
Uses
At line 119 in file platform\Device\NIIET\K1921VK035\Source\ARM\startup_K
1921VK035.s
At line 253 in file platform\Device\NIIET\K1921VK035\Source\ARM\startup_K
1921VK035.s
PWM0_TZ_IRQHandler 0000001A
Symbol: PWM0_TZ_IRQHandler
Definitions
At line 328 in file platform\Device\NIIET\K1921VK035\Source\ARM\startup_K
1921VK035.s
Uses
At line 121 in file platform\Device\NIIET\K1921VK035\Source\ARM\startup_K
1921VK035.s
At line 255 in file platform\Device\NIIET\K1921VK035\Source\ARM\startup_K
1921VK035.s
PWM1_HD_IRQHandler 0000001A
Symbol: PWM1_HD_IRQHandler
Definitions
At line 330 in file platform\Device\NIIET\K1921VK035\Source\ARM\startup_K
1921VK035.s
Uses
At line 123 in file platform\Device\NIIET\K1921VK035\Source\ARM\startup_K
1921VK035.s
At line 257 in file platform\Device\NIIET\K1921VK035\Source\ARM\startup_K
1921VK035.s
PWM1_IRQHandler 0000001A
Symbol: PWM1_IRQHandler
Definitions
At line 329 in file platform\Device\NIIET\K1921VK035\Source\ARM\startup_K
1921VK035.s
Uses
ARM Macro Assembler Page 12 Alphabetic symbol ordering
Relocatable symbols
At line 122 in file platform\Device\NIIET\K1921VK035\Source\ARM\startup_K
1921VK035.s
At line 256 in file platform\Device\NIIET\K1921VK035\Source\ARM\startup_K
1921VK035.s
PWM1_TZ_IRQHandler 0000001A
Symbol: PWM1_TZ_IRQHandler
Definitions
At line 331 in file platform\Device\NIIET\K1921VK035\Source\ARM\startup_K
1921VK035.s
Uses
At line 124 in file platform\Device\NIIET\K1921VK035\Source\ARM\startup_K
1921VK035.s
At line 258 in file platform\Device\NIIET\K1921VK035\Source\ARM\startup_K
1921VK035.s
PWM2_HD_IRQHandler 0000001A
Symbol: PWM2_HD_IRQHandler
Definitions
At line 333 in file platform\Device\NIIET\K1921VK035\Source\ARM\startup_K
1921VK035.s
Uses
At line 126 in file platform\Device\NIIET\K1921VK035\Source\ARM\startup_K
1921VK035.s
At line 260 in file platform\Device\NIIET\K1921VK035\Source\ARM\startup_K
1921VK035.s
PWM2_IRQHandler 0000001A
Symbol: PWM2_IRQHandler
Definitions
At line 332 in file platform\Device\NIIET\K1921VK035\Source\ARM\startup_K
1921VK035.s
Uses
At line 125 in file platform\Device\NIIET\K1921VK035\Source\ARM\startup_K
1921VK035.s
At line 259 in file platform\Device\NIIET\K1921VK035\Source\ARM\startup_K
1921VK035.s
PWM2_TZ_IRQHandler 0000001A
Symbol: PWM2_TZ_IRQHandler
Definitions
At line 334 in file platform\Device\NIIET\K1921VK035\Source\ARM\startup_K
1921VK035.s
Uses
At line 127 in file platform\Device\NIIET\K1921VK035\Source\ARM\startup_K
1921VK035.s
At line 261 in file platform\Device\NIIET\K1921VK035\Source\ARM\startup_K
1921VK035.s
PendSV_Handler 00000016
Symbol: PendSV_Handler
Definitions
At line 202 in file platform\Device\NIIET\K1921VK035\Source\ARM\startup_K
1921VK035.s
ARM Macro Assembler Page 13 Alphabetic symbol ordering
Relocatable symbols
Uses
At line 75 in file platform\Device\NIIET\K1921VK035\Source\ARM\startup_K1
921VK035.s
At line 203 in file platform\Device\NIIET\K1921VK035\Source\ARM\startup_K
1921VK035.s
QEP_IRQHandler 0000001A
Symbol: QEP_IRQHandler
Definitions
At line 335 in file platform\Device\NIIET\K1921VK035\Source\ARM\startup_K
1921VK035.s
Uses
At line 128 in file platform\Device\NIIET\K1921VK035\Source\ARM\startup_K
1921VK035.s
At line 262 in file platform\Device\NIIET\K1921VK035\Source\ARM\startup_K
1921VK035.s
RCU_IRQHandler 0000001A
Symbol: RCU_IRQHandler
Definitions
At line 287 in file platform\Device\NIIET\K1921VK035\Source\ARM\startup_K
1921VK035.s
Uses
At line 80 in file platform\Device\NIIET\K1921VK035\Source\ARM\startup_K1
921VK035.s
At line 214 in file platform\Device\NIIET\K1921VK035\Source\ARM\startup_K
1921VK035.s
Reset_Handler 00000000
Symbol: Reset_Handler
Definitions
At line 157 in file platform\Device\NIIET\K1921VK035\Source\ARM\startup_K
1921VK035.s
Uses
At line 62 in file platform\Device\NIIET\K1921VK035\Source\ARM\startup_K1
921VK035.s
At line 158 in file platform\Device\NIIET\K1921VK035\Source\ARM\startup_K
1921VK035.s
SPI_RO_RT_IRQHandler 0000001A
Symbol: SPI_RO_RT_IRQHandler
Definitions
At line 319 in file platform\Device\NIIET\K1921VK035\Source\ARM\startup_K
1921VK035.s
Uses
At line 112 in file platform\Device\NIIET\K1921VK035\Source\ARM\startup_K
1921VK035.s
At line 246 in file platform\Device\NIIET\K1921VK035\Source\ARM\startup_K
1921VK035.s
SPI_RX_IRQHandler 0000001A
Symbol: SPI_RX_IRQHandler
Definitions
At line 320 in file platform\Device\NIIET\K1921VK035\Source\ARM\startup_K
ARM Macro Assembler Page 14 Alphabetic symbol ordering
Relocatable symbols
1921VK035.s
Uses
At line 113 in file platform\Device\NIIET\K1921VK035\Source\ARM\startup_K
1921VK035.s
At line 247 in file platform\Device\NIIET\K1921VK035\Source\ARM\startup_K
1921VK035.s
SPI_TX_IRQHandler 0000001A
Symbol: SPI_TX_IRQHandler
Definitions
At line 321 in file platform\Device\NIIET\K1921VK035\Source\ARM\startup_K
1921VK035.s
Uses
At line 114 in file platform\Device\NIIET\K1921VK035\Source\ARM\startup_K
1921VK035.s
At line 248 in file platform\Device\NIIET\K1921VK035\Source\ARM\startup_K
1921VK035.s
SVC_Handler 00000012
Symbol: SVC_Handler
Definitions
At line 193 in file platform\Device\NIIET\K1921VK035\Source\ARM\startup_K
1921VK035.s
Uses
At line 72 in file platform\Device\NIIET\K1921VK035\Source\ARM\startup_K1
921VK035.s
At line 194 in file platform\Device\NIIET\K1921VK035\Source\ARM\startup_K
1921VK035.s
SysTick_Handler 00000018
Symbol: SysTick_Handler
Definitions
At line 206 in file platform\Device\NIIET\K1921VK035\Source\ARM\startup_K
1921VK035.s
Uses
At line 76 in file platform\Device\NIIET\K1921VK035\Source\ARM\startup_K1
921VK035.s
At line 207 in file platform\Device\NIIET\K1921VK035\Source\ARM\startup_K
1921VK035.s
TMR0_IRQHandler 0000001A
Symbol: TMR0_IRQHandler
Definitions
At line 307 in file platform\Device\NIIET\K1921VK035\Source\ARM\startup_K
1921VK035.s
Uses
At line 100 in file platform\Device\NIIET\K1921VK035\Source\ARM\startup_K
1921VK035.s
At line 234 in file platform\Device\NIIET\K1921VK035\Source\ARM\startup_K
1921VK035.s
TMR1_IRQHandler 0000001A
Symbol: TMR1_IRQHandler
Definitions
ARM Macro Assembler Page 15 Alphabetic symbol ordering
Relocatable symbols
At line 308 in file platform\Device\NIIET\K1921VK035\Source\ARM\startup_K
1921VK035.s
Uses
At line 101 in file platform\Device\NIIET\K1921VK035\Source\ARM\startup_K
1921VK035.s
At line 235 in file platform\Device\NIIET\K1921VK035\Source\ARM\startup_K
1921VK035.s
TMR2_IRQHandler 0000001A
Symbol: TMR2_IRQHandler
Definitions
At line 309 in file platform\Device\NIIET\K1921VK035\Source\ARM\startup_K
1921VK035.s
Uses
At line 102 in file platform\Device\NIIET\K1921VK035\Source\ARM\startup_K
1921VK035.s
At line 236 in file platform\Device\NIIET\K1921VK035\Source\ARM\startup_K
1921VK035.s
TMR3_IRQHandler 0000001A
Symbol: TMR3_IRQHandler
Definitions
At line 310 in file platform\Device\NIIET\K1921VK035\Source\ARM\startup_K
1921VK035.s
Uses
At line 103 in file platform\Device\NIIET\K1921VK035\Source\ARM\startup_K
1921VK035.s
At line 237 in file platform\Device\NIIET\K1921VK035\Source\ARM\startup_K
1921VK035.s
UART0_E_RT_IRQHandler 0000001A
Symbol: UART0_E_RT_IRQHandler
Definitions
At line 314 in file platform\Device\NIIET\K1921VK035\Source\ARM\startup_K
1921VK035.s
Uses
At line 107 in file platform\Device\NIIET\K1921VK035\Source\ARM\startup_K
1921VK035.s
At line 241 in file platform\Device\NIIET\K1921VK035\Source\ARM\startup_K
1921VK035.s
UART0_RX_IRQHandler 0000001A
Symbol: UART0_RX_IRQHandler
Definitions
At line 312 in file platform\Device\NIIET\K1921VK035\Source\ARM\startup_K
1921VK035.s
Uses
At line 105 in file platform\Device\NIIET\K1921VK035\Source\ARM\startup_K
1921VK035.s
At line 239 in file platform\Device\NIIET\K1921VK035\Source\ARM\startup_K
1921VK035.s
UART0_TD_IRQHandler 0000001A
Symbol: UART0_TD_IRQHandler
ARM Macro Assembler Page 16 Alphabetic symbol ordering
Relocatable symbols
Definitions
At line 311 in file platform\Device\NIIET\K1921VK035\Source\ARM\startup_K
1921VK035.s
Uses
At line 104 in file platform\Device\NIIET\K1921VK035\Source\ARM\startup_K
1921VK035.s
At line 238 in file platform\Device\NIIET\K1921VK035\Source\ARM\startup_K
1921VK035.s
UART0_TX_IRQHandler 0000001A
Symbol: UART0_TX_IRQHandler
Definitions
At line 313 in file platform\Device\NIIET\K1921VK035\Source\ARM\startup_K
1921VK035.s
Uses
At line 106 in file platform\Device\NIIET\K1921VK035\Source\ARM\startup_K
1921VK035.s
At line 240 in file platform\Device\NIIET\K1921VK035\Source\ARM\startup_K
1921VK035.s
UART1_E_RT_IRQHandler 0000001A
Symbol: UART1_E_RT_IRQHandler
Definitions
At line 318 in file platform\Device\NIIET\K1921VK035\Source\ARM\startup_K
1921VK035.s
Uses
At line 111 in file platform\Device\NIIET\K1921VK035\Source\ARM\startup_K
1921VK035.s
At line 245 in file platform\Device\NIIET\K1921VK035\Source\ARM\startup_K
1921VK035.s
UART1_RX_IRQHandler 0000001A
Symbol: UART1_RX_IRQHandler
Definitions
At line 316 in file platform\Device\NIIET\K1921VK035\Source\ARM\startup_K
1921VK035.s
Uses
At line 109 in file platform\Device\NIIET\K1921VK035\Source\ARM\startup_K
1921VK035.s
At line 243 in file platform\Device\NIIET\K1921VK035\Source\ARM\startup_K
1921VK035.s
UART1_TD_IRQHandler 0000001A
Symbol: UART1_TD_IRQHandler
Definitions
At line 315 in file platform\Device\NIIET\K1921VK035\Source\ARM\startup_K
1921VK035.s
Uses
At line 108 in file platform\Device\NIIET\K1921VK035\Source\ARM\startup_K
1921VK035.s
At line 242 in file platform\Device\NIIET\K1921VK035\Source\ARM\startup_K
1921VK035.s
UART1_TX_IRQHandler 0000001A
ARM Macro Assembler Page 17 Alphabetic symbol ordering
Relocatable symbols
Symbol: UART1_TX_IRQHandler
Definitions
At line 317 in file platform\Device\NIIET\K1921VK035\Source\ARM\startup_K
1921VK035.s
Uses
At line 110 in file platform\Device\NIIET\K1921VK035\Source\ARM\startup_K
1921VK035.s
At line 244 in file platform\Device\NIIET\K1921VK035\Source\ARM\startup_K
1921VK035.s
UsageFault_Handler 00000010
Symbol: UsageFault_Handler
Definitions
At line 189 in file platform\Device\NIIET\K1921VK035\Source\ARM\startup_K
1921VK035.s
Uses
At line 67 in file platform\Device\NIIET\K1921VK035\Source\ARM\startup_K1
921VK035.s
At line 190 in file platform\Device\NIIET\K1921VK035\Source\ARM\startup_K
1921VK035.s
WDT_IRQHandler 0000001A
Symbol: WDT_IRQHandler
Definitions
At line 286 in file platform\Device\NIIET\K1921VK035\Source\ARM\startup_K
1921VK035.s
Uses
At line 79 in file platform\Device\NIIET\K1921VK035\Source\ARM\startup_K1
921VK035.s
At line 213 in file platform\Device\NIIET\K1921VK035\Source\ARM\startup_K
1921VK035.s
__user_initial_stackheap 0000001C
Symbol: __user_initial_stackheap
Definitions
At line 379 in file platform\Device\NIIET\K1921VK035\Source\ARM\startup_K
1921VK035.s
Uses
At line 377 in file platform\Device\NIIET\K1921VK035\Source\ARM\startup_K
1921VK035.s
Comment: __user_initial_stackheap used once
83 symbols
ARM Macro Assembler Page 1 Alphabetic symbol ordering
Absolute symbols
Heap_Size 00000200
Symbol: Heap_Size
Definitions
At line 44 in file platform\Device\NIIET\K1921VK035\Source\ARM\startup_K1
921VK035.s
Uses
At line 48 in file platform\Device\NIIET\K1921VK035\Source\ARM\startup_K1
921VK035.s
At line 383 in file platform\Device\NIIET\K1921VK035\Source\ARM\startup_K
1921VK035.s
Stack_Size 00000400
Symbol: Stack_Size
Definitions
At line 33 in file platform\Device\NIIET\K1921VK035\Source\ARM\startup_K1
921VK035.s
Uses
At line 36 in file platform\Device\NIIET\K1921VK035\Source\ARM\startup_K1
921VK035.s
At line 382 in file platform\Device\NIIET\K1921VK035\Source\ARM\startup_K
1921VK035.s
__Vectors_Size 00000158
Symbol: __Vectors_Size
Definitions
At line 152 in file platform\Device\NIIET\K1921VK035\Source\ARM\startup_K
1921VK035.s
Uses
At line 59 in file platform\Device\NIIET\K1921VK035\Source\ARM\startup_K1
921VK035.s
Comment: __Vectors_Size used once
3 symbols
ARM Macro Assembler Page 1 Alphabetic symbol ordering
External symbols
SystemInit 00000000
Symbol: SystemInit
Definitions
At line 160 in file platform\Device\NIIET\K1921VK035\Source\ARM\startup_K
1921VK035.s
Uses
At line 161 in file platform\Device\NIIET\K1921VK035\Source\ARM\startup_K
1921VK035.s
Comment: SystemInit used once
__main 00000000
Symbol: __main
Definitions
At line 159 in file platform\Device\NIIET\K1921VK035\Source\ARM\startup_K
1921VK035.s
Uses
At line 163 in file platform\Device\NIIET\K1921VK035\Source\ARM\startup_K
1921VK035.s
Comment: __main used once
__use_two_region_memory 00000000
Symbol: __use_two_region_memory
Definitions
At line 376 in file platform\Device\NIIET\K1921VK035\Source\ARM\startup_K
1921VK035.s
Uses
None
Comment: __use_two_region_memory unused
3 symbols
436 symbols in table

View File

@@ -1,1316 +0,0 @@
Component: ARM Compiler 5.06 update 7 (build 960) Tool: armlink [4d3601]
==============================================================================
Section Cross References
system_k1921vk035.o(i.SystemCoreClockUpdate) refers to system_k1921vk035.o(.data) for .data
system_k1921vk035.o(i.SystemInit) refers to system_k1921vk035.o(i.ClkInit) for ClkInit
system_k1921vk035.o(i.SystemInit) refers to system_k1921vk035.o(i.FPUInit) for FPUInit
startup_k1921vk035.o(STACK) refers (Special) to heapauxi.o(.text) for __use_two_region_memory
startup_k1921vk035.o(HEAP) refers (Special) to heapauxi.o(.text) for __use_two_region_memory
startup_k1921vk035.o(RESET) refers (Special) to heapauxi.o(.text) for __use_two_region_memory
startup_k1921vk035.o(RESET) refers to startup_k1921vk035.o(STACK) for __initial_sp
startup_k1921vk035.o(RESET) refers to startup_k1921vk035.o(.text) for Reset_Handler
startup_k1921vk035.o(RESET) refers to vk035_it.o(i.NMI_Handler) for NMI_Handler
startup_k1921vk035.o(RESET) refers to vk035_it.o(i.HardFault_Handler) for HardFault_Handler
startup_k1921vk035.o(RESET) refers to vk035_it.o(i.MemManage_Handler) for MemManage_Handler
startup_k1921vk035.o(RESET) refers to vk035_it.o(i.BusFault_Handler) for BusFault_Handler
startup_k1921vk035.o(RESET) refers to vk035_it.o(i.UsageFault_Handler) for UsageFault_Handler
startup_k1921vk035.o(RESET) refers to vk035_it.o(i.SVC_Handler) for SVC_Handler
startup_k1921vk035.o(RESET) refers to vk035_it.o(i.DebugMon_Handler) for DebugMon_Handler
startup_k1921vk035.o(RESET) refers to vk035_it.o(i.PendSV_Handler) for PendSV_Handler
startup_k1921vk035.o(RESET) refers to vk035_it.o(i.SysTick_Handler) for SysTick_Handler
startup_k1921vk035.o(.text) refers (Special) to heapauxi.o(.text) for __use_two_region_memory
startup_k1921vk035.o(.text) refers to system_k1921vk035.o(i.SystemInit) for SystemInit
startup_k1921vk035.o(.text) refers to __main.o(!!!main) for __main
startup_k1921vk035.o(.text) refers to startup_k1921vk035.o(HEAP) for Heap_Mem
startup_k1921vk035.o(.text) refers to startup_k1921vk035.o(STACK) for Stack_Mem
main.o(i.assert_failed) refers to _printf_percent.o(.ARM.Collect$$_printf_percent$$00000000) for _printf_percent
main.o(i.assert_failed) refers to _printf_d.o(.ARM.Collect$$_printf_percent$$00000009) for _printf_d
main.o(i.assert_failed) refers to _printf_s.o(.ARM.Collect$$_printf_percent$$00000014) for _printf_s
main.o(i.assert_failed) refers to _printf_dec.o(.text) for _printf_int_dec
main.o(i.assert_failed) refers to _printf_str.o(.text) for _printf_str
main.o(i.assert_failed) refers to noretval__2printf.o(.text) for __2printf
main.o(i.main) refers to main.o(i.periph_init) for periph_init
main.o(i.periph_init) refers to _printf_pad.o(.text) for _printf_pre_padding
main.o(i.periph_init) refers to _printf_percent.o(.ARM.Collect$$_printf_percent$$00000000) for _printf_percent
main.o(i.periph_init) refers to _printf_d.o(.ARM.Collect$$_printf_percent$$00000009) for _printf_d
main.o(i.periph_init) refers to _printf_dec.o(.text) for _printf_int_dec
main.o(i.periph_init) refers to system_k1921vk035.o(i.SystemCoreClockUpdate) for SystemCoreClockUpdate
main.o(i.periph_init) refers to rcu.o(i.sysclk_init) for sysclk_init
main.o(i.periph_init) refers to gpio.o(i.gpio_init) for gpio_init
main.o(i.periph_init) refers to retarget_conf.o(i.retarget_init) for retarget_init
main.o(i.periph_init) refers to dflt_clz.o(x$fpl$dfltu) for __aeabi_ui2d
main.o(i.periph_init) refers to ddiv.o(x$fpl$ddiv) for __aeabi_ddiv
main.o(i.periph_init) refers to dfix.o(x$fpl$dfix) for __aeabi_d2iz
main.o(i.periph_init) refers to noretval__2printf.o(.text) for __2printf
main.o(i.periph_init) refers to system_k1921vk035.o(.data) for SystemCoreClock
gpio.o(i.gpio_init) refers to plib035_gpio.o(i.GPIO_DeInit) for GPIO_DeInit
gpio.o(i.gpio_init) refers to plib035_gpio.o(i.GPIO_Init) for GPIO_Init
gpio.o(i.gpio_init) refers to gpio.o(.data) for .data
rcu.o(i.RCU_ClkOutConfig) refers to main.o(i.assert_failed) for assert_failed
rcu.o(i.sysclk_init) refers to plib035_rcu.o(i.RCU_PLL_AutoConfig) for RCU_PLL_AutoConfig
rcu.o(i.sysclk_init) refers to main.o(i.Error_Handler) for Error_Handler
rcu.o(i.sysclk_init) refers to system_k1921vk035.o(i.SystemCoreClockUpdate) for SystemCoreClockUpdate
rcu.o(i.sysclk_init) refers to rcu.o(i.RCU_ClkOutConfig) for RCU_ClkOutConfig
rcu.o(i.sysclk_init) refers to rcu.o(.data) for .data
vk035_it.o(i.SysTick_Handler) refers to system_k1921vk035.o(.data) for uwTick
plib035_adc.o(i.ADC_DC_Config) refers to main.o(i.assert_failed) for assert_failed
plib035_adc.o(i.ADC_DC_Config) refers to plib035_adc.o(i.ADC_SEQ_Init) for i.ADC_SEQ_Init
plib035_adc.o(i.ADC_DC_Init) refers to main.o(i.assert_failed) for assert_failed
plib035_adc.o(i.ADC_DC_Init) refers to plib035_adc.o(i.ADC_DC_Config) for ADC_DC_Config
plib035_adc.o(i.ADC_DC_Init) refers to plib035_adc.o(i.ADC_SEQ_Init) for i.ADC_SEQ_Init
plib035_adc.o(i.ADC_DeInit) refers to plib035_adc.o(i.RCU_ADCRstCmd) for RCU_ADCRstCmd
plib035_adc.o(i.ADC_SEQ_DCEnableCmd) refers to main.o(i.assert_failed) for assert_failed
plib035_adc.o(i.ADC_SEQ_DCEnableCmd) refers to plib035_adc.o(i.ADC_SEQ_Init) for i.ADC_SEQ_Init
plib035_adc.o(i.ADC_SEQ_Init) refers to main.o(i.assert_failed) for assert_failed
plib035_adc.o(i.ADC_SEQ_Init) refers to plib035_adc.o(i.ADC_SEQ_ReqConfig) for ADC_SEQ_ReqConfig
plib035_adc.o(i.ADC_SEQ_Init) refers to plib035_adc.o(i.ADC_SEQ_DCEnableCmd) for ADC_SEQ_DCEnableCmd
plib035_adc.o(i.ADC_SEQ_ReqConfig) refers to main.o(i.assert_failed) for assert_failed
plib035_adc.o(i.ADC_SEQ_ReqConfig) refers to plib035_adc.o(i.ADC_SEQ_Init) for i.ADC_SEQ_Init
plib035_adc.o(i.RCU_ADCRstCmd) refers to main.o(i.assert_failed) for assert_failed
plib035_dma.o(i.DMA_ChannelInit) refers to main.o(i.assert_failed) for assert_failed
plib035_dma.o(i.DMA_Init) refers to plib035_dma.o(i.DMA_ProtectConfig) for DMA_ProtectConfig
plib035_dma.o(i.DMA_Init) refers to main.o(i.assert_failed) for assert_failed
plib035_dma.o(i.DMA_ProtectConfig) refers to main.o(i.assert_failed) for assert_failed
plib035_dma.o(i.DMA_ProtectConfig) refers to plib035_dma.o(i.DMA_Init) for i.DMA_Init
plib035_ecap.o(i.ECAP_Capture_Init) refers to main.o(i.assert_failed) for assert_failed
plib035_ecap.o(i.ECAP_Capture_Init) refers to plib035_ecap.o(i.ECAP_Init) for i.ECAP_Init
plib035_ecap.o(i.ECAP_DeInit) refers to main.o(i.assert_failed) for assert_failed
plib035_ecap.o(i.ECAP_DeInit) refers to plib035_ecap.o(i.RCU_APBRstCmd) for RCU_APBRstCmd
plib035_ecap.o(i.ECAP_Init) refers to main.o(i.assert_failed) for assert_failed
plib035_ecap.o(i.ECAP_PWM_Init) refers to main.o(i.assert_failed) for assert_failed
plib035_ecap.o(i.ECAP_PWM_Init) refers to plib035_ecap.o(i.ECAP_Init) for i.ECAP_Init
plib035_ecap.o(i.RCU_APBRstCmd) refers to main.o(i.assert_failed) for assert_failed
plib035_gpio.o(i.GPIO_AltFuncCmd) refers to main.o(i.assert_failed) for assert_failed
plib035_gpio.o(i.GPIO_AltFuncCmd) refers to plib035_gpio.o(i.GPIO_DigitalCmd) for i.GPIO_DigitalCmd
plib035_gpio.o(i.GPIO_DeInit) refers to main.o(i.assert_failed) for assert_failed
plib035_gpio.o(i.GPIO_DeInit) refers to plib035_gpio.o(i.RCU_AHBRstCmd) for RCU_AHBRstCmd
plib035_gpio.o(i.GPIO_DigitalCmd) refers to main.o(i.assert_failed) for assert_failed
plib035_gpio.o(i.GPIO_DriveModeConfig) refers to main.o(i.assert_failed) for assert_failed
plib035_gpio.o(i.GPIO_DriveModeConfig) refers to plib035_gpio.o(i.GPIO_ModeConfig) for GPIO_ModeConfig
plib035_gpio.o(i.GPIO_InModeConfig) refers to main.o(i.assert_failed) for assert_failed
plib035_gpio.o(i.GPIO_InModeConfig) refers to plib035_gpio.o(i.GPIO_ModeConfig) for GPIO_ModeConfig
plib035_gpio.o(i.GPIO_Init) refers to plib035_gpio.o(i.GPIO_OutCmd) for GPIO_OutCmd
plib035_gpio.o(i.GPIO_Init) refers to plib035_gpio.o(i.GPIO_AltFuncCmd) for GPIO_AltFuncCmd
plib035_gpio.o(i.GPIO_Init) refers to plib035_gpio.o(i.GPIO_OutModeConfig) for GPIO_OutModeConfig
plib035_gpio.o(i.GPIO_Init) refers to plib035_gpio.o(i.GPIO_InModeConfig) for GPIO_InModeConfig
plib035_gpio.o(i.GPIO_Init) refers to plib035_gpio.o(i.GPIO_PullModeConfig) for GPIO_PullModeConfig
plib035_gpio.o(i.GPIO_Init) refers to plib035_gpio.o(i.GPIO_DriveModeConfig) for GPIO_DriveModeConfig
plib035_gpio.o(i.GPIO_Init) refers to plib035_gpio.o(i.GPIO_DigitalCmd) for GPIO_DigitalCmd
plib035_gpio.o(i.GPIO_OutCmd) refers to main.o(i.assert_failed) for assert_failed
plib035_gpio.o(i.GPIO_OutCmd) refers to plib035_gpio.o(i.GPIO_DigitalCmd) for i.GPIO_DigitalCmd
plib035_gpio.o(i.GPIO_OutModeConfig) refers to main.o(i.assert_failed) for assert_failed
plib035_gpio.o(i.GPIO_OutModeConfig) refers to plib035_gpio.o(i.GPIO_ModeConfig) for GPIO_ModeConfig
plib035_gpio.o(i.GPIO_PullModeConfig) refers to main.o(i.assert_failed) for assert_failed
plib035_gpio.o(i.GPIO_PullModeConfig) refers to plib035_gpio.o(i.GPIO_ModeConfig) for GPIO_ModeConfig
plib035_gpio.o(i.RCU_AHBRstCmd) refers to main.o(i.assert_failed) for assert_failed
plib035_i2c.o(i.I2C_FSFreqConfig) refers to main.o(i.assert_failed) for assert_failed
plib035_i2c.o(i.I2C_HSFreqConfig) refers to main.o(i.assert_failed) for assert_failed
plib035_i2c.o(i.I2C_HSFreqConfig) refers to plib035_i2c.o(i.I2C_FSFreqConfig) for i.I2C_FSFreqConfig
plib035_mflash.o(i.MFLASH_EraseFull) refers to main.o(i.assert_failed) for assert_failed
plib035_mflash.o(i.MFLASH_EraseFull) refers to plib035_mflash.o(i.MFLASH_SetCmd) for MFLASH_SetCmd
plib035_mflash.o(i.MFLASH_EraseFull) refers to plib035_mflash.o(i.MFLASH_BusyStatus) for MFLASH_BusyStatus
plib035_mflash.o(i.MFLASH_ErasePage) refers to main.o(i.assert_failed) for assert_failed
plib035_mflash.o(i.MFLASH_ErasePage) refers to plib035_mflash.o(i.MFLASH_SetCmd) for MFLASH_SetCmd
plib035_mflash.o(i.MFLASH_ErasePage) refers to plib035_mflash.o(i.MFLASH_BusyStatus) for MFLASH_BusyStatus
plib035_mflash.o(i.MFLASH_ReadData) refers to main.o(i.assert_failed) for assert_failed
plib035_mflash.o(i.MFLASH_ReadData) refers to plib035_mflash.o(i.MFLASH_SetCmd) for MFLASH_SetCmd
plib035_mflash.o(i.MFLASH_ReadData) refers to plib035_mflash.o(i.MFLASH_BusyStatus) for MFLASH_BusyStatus
plib035_mflash.o(i.MFLASH_WriteData) refers to main.o(i.assert_failed) for assert_failed
plib035_mflash.o(i.MFLASH_WriteData) refers to plib035_mflash.o(i.MFLASH_SetCmd) for MFLASH_SetCmd
plib035_mflash.o(i.MFLASH_WriteData) refers to plib035_mflash.o(i.MFLASH_BusyStatus) for MFLASH_BusyStatus
plib035_mflash.o(i.MFLASH_WriteData) refers to plib035_mflash.o(i.MFLASH_ReadData) for i.MFLASH_ReadData
plib035_pwm.o(i.PWM_AQ_ActionAConfig) refers to main.o(i.assert_failed) for assert_failed
plib035_pwm.o(i.PWM_AQ_ActionBConfig) refers to main.o(i.assert_failed) for assert_failed
plib035_pwm.o(i.PWM_AQ_Init) refers to plib035_pwm.o(i.PWM_AQ_ActionAConfig) for PWM_AQ_ActionAConfig
plib035_pwm.o(i.PWM_AQ_Init) refers to plib035_pwm.o(i.PWM_AQ_ActionBConfig) for PWM_AQ_ActionBConfig
plib035_pwm.o(i.PWM_CMP_CmpADirectLoadCmd) refers to main.o(i.assert_failed) for assert_failed
plib035_pwm.o(i.PWM_CMP_CmpALoadEventConfig) refers to main.o(i.assert_failed) for assert_failed
plib035_pwm.o(i.PWM_CMP_Init) refers to plib035_pwm.o(i.PWM_CMP_CmpALoadEventConfig) for PWM_CMP_CmpALoadEventConfig
plib035_pwm.o(i.PWM_CMP_Init) refers to plib035_pwm.o(i.PWM_CMP_CmpADirectLoadCmd) for PWM_CMP_CmpADirectLoadCmd
plib035_pwm.o(i.PWM_CMP_Init) refers to main.o(i.assert_failed) for assert_failed
plib035_pwm.o(i.PWM_CMP_Init) refers to plib035_pwm.o(i.PWM_TB_Init) for i.PWM_TB_Init
plib035_pwm.o(i.PWM_DB_Init) refers to main.o(i.assert_failed) for assert_failed
plib035_pwm.o(i.PWM_DB_Init) refers to plib035_pwm.o(i.PWM_TB_Init) for i.PWM_TB_Init
plib035_pwm.o(i.PWM_DeInit) refers to main.o(i.assert_failed) for assert_failed
plib035_pwm.o(i.PWM_DeInit) refers to plib035_pwm.o(i.RCU_APBRstCmd) for RCU_APBRstCmd
plib035_pwm.o(i.PWM_ET_Init) refers to main.o(i.assert_failed) for assert_failed
plib035_pwm.o(i.PWM_ET_Init) refers to plib035_pwm.o(i.PWM_TB_Init) for i.PWM_TB_Init
plib035_pwm.o(i.PWM_HD_Init) refers to main.o(i.assert_failed) for assert_failed
plib035_pwm.o(i.PWM_HD_Init) refers to plib035_pwm.o(i.PWM_TB_Init) for i.PWM_TB_Init
plib035_pwm.o(i.PWM_TB_ClkDivConfig) refers to main.o(i.assert_failed) for assert_failed
plib035_pwm.o(i.PWM_TB_ClkDivConfig) refers to plib035_pwm.o(i.PWM_TB_Init) for i.PWM_TB_Init
plib035_pwm.o(i.PWM_TB_Init) refers to main.o(i.assert_failed) for assert_failed
plib035_pwm.o(i.PWM_TB_Init) refers to plib035_pwm.o(i.PWM_TB_ClkDivConfig) for PWM_TB_ClkDivConfig
plib035_pwm.o(i.PWM_TZ_Init) refers to main.o(i.assert_failed) for assert_failed
plib035_pwm.o(i.PWM_TZ_Init) refers to plib035_pwm.o(i.PWM_TB_Init) for i.PWM_TB_Init
plib035_pwm.o(i.RCU_APBRstCmd) refers to main.o(i.assert_failed) for assert_failed
plib035_qep.o(i.QEP_CAP_Init) refers to main.o(i.assert_failed) for assert_failed
plib035_qep.o(i.QEP_CAP_Init) refers to plib035_qep.o(i.QEP_PC_Init) for i.QEP_PC_Init
plib035_qep.o(i.QEP_CMP_Init) refers to main.o(i.assert_failed) for assert_failed
plib035_qep.o(i.QEP_CMP_Init) refers to plib035_qep.o(i.QEP_PC_Init) for i.QEP_PC_Init
plib035_qep.o(i.QEP_DeInit) refers to plib035_qep.o(i.RCU_APBRstCmd) for RCU_APBRstCmd
plib035_qep.o(i.QEP_PC_Init) refers to main.o(i.assert_failed) for assert_failed
plib035_qep.o(i.RCU_APBRstCmd) refers to main.o(i.assert_failed) for assert_failed
plib035_rcu.o(i.MFLASH_LatencyConfig) refers to main.o(i.assert_failed) for assert_failed
plib035_rcu.o(i.RCU_GetADCClkFreq) refers to plib035_rcu.o(i.getPeriphClkFreq) for getPeriphClkFreq
plib035_rcu.o(i.RCU_GetClkOutFreq) refers to plib035_rcu.o(i.getSysPeriphClkFreq) for getSysPeriphClkFreq
plib035_rcu.o(i.RCU_GetPLLDivClkFreq) refers to plib035_rcu.o(i.RCU_GetPLLClkFreq) for RCU_GetPLLClkFreq
plib035_rcu.o(i.RCU_GetSPIClkFreq) refers to plib035_rcu.o(i.getPeriphClkFreq) for getPeriphClkFreq
plib035_rcu.o(i.RCU_GetSysClkFreq) refers to plib035_rcu.o(i.getSysClkFreq) for getSysClkFreq
plib035_rcu.o(i.RCU_GetTraceClkFreq) refers to plib035_rcu.o(i.getSysPeriphClkFreq) for getSysPeriphClkFreq
plib035_rcu.o(i.RCU_GetUARTClkFreq) refers to plib035_rcu.o(i.getPeriphClkFreq) for getPeriphClkFreq
plib035_rcu.o(i.RCU_GetWDTClkFreq) refers to plib035_rcu.o(i.getSysPeriphClkFreq) for getSysPeriphClkFreq
plib035_rcu.o(i.RCU_PLL_AutoConfig) refers to plib035_rcu.o(i.RCU_PLL_StructInit) for RCU_PLL_StructInit
plib035_rcu.o(i.RCU_PLL_AutoConfig) refers to plib035_rcu.o(i.RCU_PLL_Init) for RCU_PLL_Init
plib035_rcu.o(i.RCU_PLL_AutoConfig) refers to plib035_rcu.o(i.MFLASH_LatencyConfig) for MFLASH_LatencyConfig
plib035_rcu.o(i.RCU_PLL_AutoConfig) refers to plib035_rcu.o(i.RCU_SysClkChangeCmd) for RCU_SysClkChangeCmd
plib035_rcu.o(i.RCU_PLL_DeInit) refers to plib035_rcu.o(i.RCU_PLL_OutCmd) for RCU_PLL_OutCmd
plib035_rcu.o(i.RCU_PLL_Init) refers to main.o(i.assert_failed) for assert_failed
plib035_rcu.o(i.RCU_PLL_Init) refers to plib035_rcu.o(i.RCU_PLL_OutCmd) for RCU_PLL_OutCmd
plib035_rcu.o(i.RCU_PLL_OutCmd) refers to main.o(i.assert_failed) for assert_failed
plib035_rcu.o(i.RCU_SysClkChangeCmd) refers to main.o(i.assert_failed) for assert_failed
plib035_rcu.o(i.getPeriphClkFreq) refers to plib035_rcu.o(i.RCU_GetOSIClkFreq) for RCU_GetOSIClkFreq
plib035_rcu.o(i.getPeriphClkFreq) refers to plib035_rcu.o(i.RCU_GetOSEClkFreq) for RCU_GetOSEClkFreq
plib035_rcu.o(i.getPeriphClkFreq) refers to plib035_rcu.o(i.RCU_GetPLLClkFreq) for RCU_GetPLLClkFreq
plib035_rcu.o(i.getPeriphClkFreq) refers to plib035_rcu.o(i.RCU_GetPLLDivClkFreq) for RCU_GetPLLDivClkFreq
plib035_rcu.o(i.getSysClkFreq) refers to plib035_rcu.o(i.RCU_GetPLLDivClkFreq) for RCU_GetPLLDivClkFreq
plib035_rcu.o(i.getSysClkFreq) refers to plib035_rcu.o(i.RCU_GetOSIClkFreq) for RCU_GetOSIClkFreq
plib035_rcu.o(i.getSysClkFreq) refers to plib035_rcu.o(i.RCU_GetOSEClkFreq) for RCU_GetOSEClkFreq
plib035_rcu.o(i.getSysClkFreq) refers to plib035_rcu.o(i.RCU_GetPLLClkFreq) for RCU_GetPLLClkFreq
plib035_rcu.o(i.getSysPeriphClkFreq) refers to plib035_rcu.o(i.RCU_GetPLLDivClkFreq) for RCU_GetPLLDivClkFreq
plib035_rcu.o(i.getSysPeriphClkFreq) refers to plib035_rcu.o(i.RCU_GetOSEClkFreq) for RCU_GetOSEClkFreq
plib035_rcu.o(i.getSysPeriphClkFreq) refers to plib035_rcu.o(i.RCU_GetPLLClkFreq) for RCU_GetPLLClkFreq
plib035_rcu.o(i.getSysPeriphClkFreq) refers to plib035_rcu.o(i.RCU_GetOSIClkFreq) for RCU_GetOSIClkFreq
plib035_spi.o(i.RCU_SPIRstCmd) refers to main.o(i.assert_failed) for assert_failed
plib035_spi.o(i.SPI_DeInit) refers to plib035_spi.o(i.RCU_SPIRstCmd) for RCU_SPIRstCmd
plib035_spi.o(i.SPI_Init) refers to main.o(i.assert_failed) for assert_failed
plib035_tmr.o(i.TMR_FreqConfig) refers to plib035_tmr.o(i.TMR_SetLoad) for TMR_SetLoad
plib035_tmr.o(i.TMR_PeriodConfig) refers to plib035_tmr.o(i.TMR_SetLoad) for TMR_SetLoad
plib035_tmr.o(i.TMR_SetLoad) refers to main.o(i.assert_failed) for assert_failed
plib035_uart.o(i.RCU_UARTRstCmd) refers to main.o(i.assert_failed) for assert_failed
plib035_uart.o(i.UART_AutoBaudConfig) refers to main.o(i.assert_failed) for assert_failed
plib035_uart.o(i.UART_AutoBaudConfig) refers to plib035_rcu.o(i.RCU_GetUARTClkFreq) for RCU_GetUARTClkFreq
plib035_uart.o(i.UART_DeInit) refers to main.o(i.assert_failed) for assert_failed
plib035_uart.o(i.UART_DeInit) refers to plib035_uart.o(i.RCU_UARTRstCmd) for RCU_UARTRstCmd
plib035_uart.o(i.UART_Init) refers to plib035_uart.o(i.UART_AutoBaudConfig) for UART_AutoBaudConfig
plib035_uart.o(i.UART_Init) refers to main.o(i.assert_failed) for assert_failed
retarget.o(.rev16_text) refers (Special) to use_no_semi.o(.text) for __use_no_semihosting_swi
retarget.o(.revsh_text) refers (Special) to use_no_semi.o(.text) for __use_no_semihosting_swi
retarget.o(.rrx_text) refers (Special) to use_no_semi.o(.text) for __use_no_semihosting_swi
retarget.o(i._sys_exit) refers (Special) to use_no_semi.o(.text) for __use_no_semihosting_swi
retarget.o(i._ttywrch) refers (Special) to use_no_semi.o(.text) for __use_no_semihosting_swi
retarget.o(i._ttywrch) refers to retarget_conf.o(i.retarget_put_char) for retarget_put_char
retarget.o(i.ferror) refers (Special) to use_no_semi.o(.text) for __use_no_semihosting_swi
retarget.o(i.fgetc) refers (Special) to use_no_semi.o(.text) for __use_no_semihosting_swi
retarget.o(i.fgetc) refers to retarget_conf.o(i.retarget_get_char) for retarget_get_char
retarget.o(i.fputc) refers (Special) to use_no_semi.o(.text) for __use_no_semihosting_swi
retarget.o(i.fputc) refers to retarget_conf.o(i.retarget_put_char) for retarget_put_char
retarget.o(.data) refers (Special) to use_no_semi.o(.text) for __use_no_semihosting_swi
retarget.o(.data) refers (Special) to use_no_semi.o(.text) for __use_no_semihosting_swi
retarget_conf.o(i.retarget_init) refers to system_k1921vk035.o(.data) for SystemCoreClock
__2printf.o(.text) refers to _printf_char_file.o(.text) for _printf_char_file
__2printf.o(.text) refers to retarget.o(.data) for __stdout
noretval__2printf.o(.text) refers to _printf_char_file.o(.text) for _printf_char_file
noretval__2printf.o(.text) refers to retarget.o(.data) for __stdout
__printf.o(.text) refers to _printf_percent.o(.ARM.Collect$$_printf_percent$$00000000) for _printf_percent
_printf_str.o(.text) refers (Special) to _printf_char.o(.text) for _printf_cs_common
_printf_str.o(.text) refers (Weak) to _printf_pad.o(.text) for _printf_pre_padding
_printf_str.o(.text) refers (Weak) to _printf_pad.o(.text) for _printf_post_padding
_printf_dec.o(.text) refers to _printf_intcommon.o(.text) for _printf_int_common
__printf_flags.o(.text) refers to _printf_percent.o(.ARM.Collect$$_printf_percent$$00000000) for _printf_percent
__printf_flags.o(.text) refers to __printf_flags.o(.constdata) for .constdata
__printf_ss.o(.text) refers to _printf_percent.o(.ARM.Collect$$_printf_percent$$00000000) for _printf_percent
__printf_flags_ss.o(.text) refers to _printf_percent.o(.ARM.Collect$$_printf_percent$$00000000) for _printf_percent
__printf_flags_ss.o(.text) refers to __printf_flags_ss.o(.constdata) for .constdata
__printf_wp.o(.text) refers to __printf_wp.o(i._is_digit) for _is_digit
__printf_wp.o(.text) refers to _printf_percent.o(.ARM.Collect$$_printf_percent$$00000000) for _printf_percent
__printf_flags_wp.o(.text) refers to __printf_wp.o(i._is_digit) for _is_digit
__printf_flags_wp.o(.text) refers to _printf_percent.o(.ARM.Collect$$_printf_percent$$00000000) for _printf_percent
__printf_flags_wp.o(.text) refers to __printf_flags_wp.o(.constdata) for .constdata
__printf_ss_wp.o(.text) refers to __printf_wp.o(i._is_digit) for _is_digit
__printf_ss_wp.o(.text) refers to _printf_percent.o(.ARM.Collect$$_printf_percent$$00000000) for _printf_percent
__printf_flags_ss_wp.o(.text) refers to __printf_wp.o(i._is_digit) for _is_digit
__printf_flags_ss_wp.o(.text) refers to _printf_percent.o(.ARM.Collect$$_printf_percent$$00000000) for _printf_percent
__printf_flags_ss_wp.o(.text) refers to __printf_flags_ss_wp.o(.constdata) for .constdata
_printf_s.o(.ARM.Collect$$_printf_percent$$00000014) refers (Weak) to _printf_char.o(.text) for _printf_string
_printf_d.o(.ARM.Collect$$_printf_percent$$00000009) refers (Weak) to _printf_dec.o(.text) for _printf_int_dec
_printf_percent.o(.ARM.Collect$$_printf_percent$$00000000) refers (Special) to _printf_percent_end.o(.ARM.Collect$$_printf_percent$$00000017) for _printf_percent_end
__main.o(!!!main) refers to __rtentry.o(.ARM.Collect$$rtentry$$00000000) for __rt_entry
ddiv.o(x$fpl$drdiv) refers (Special) to usenofp.o(x$fpl$usenofp) for __I$use$fp
ddiv.o(x$fpl$drdiv) refers to ddiv.o(x$fpl$ddiv) for ddiv_entry
ddiv.o(x$fpl$ddiv) refers (Special) to usenofp.o(x$fpl$usenofp) for __I$use$fp
ddiv.o(x$fpl$ddiv) refers to dretinf.o(x$fpl$dretinf) for __fpl_dretinf
ddiv.o(x$fpl$ddiv) refers to dnaninf.o(x$fpl$dnaninf) for __fpl_dnaninf
dfix.o(x$fpl$dfix) refers (Special) to usenofp.o(x$fpl$usenofp) for __I$use$fp
dfix.o(x$fpl$dfix) refers to dnaninf.o(x$fpl$dnaninf) for __fpl_dnaninf
dfix.o(x$fpl$dfixr) refers (Special) to usenofp.o(x$fpl$usenofp) for __I$use$fp
dfix.o(x$fpl$dfixr) refers to dnaninf.o(x$fpl$dnaninf) for __fpl_dnaninf
dflt_clz.o(x$fpl$dfltu) refers (Special) to usenofp.o(x$fpl$usenofp) for __I$use$fp
dflt_clz.o(x$fpl$dflt) refers (Special) to usenofp.o(x$fpl$usenofp) for __I$use$fp
dflt_clz.o(x$fpl$dfltn) refers (Special) to usenofp.o(x$fpl$usenofp) for __I$use$fp
__rtentry.o(.ARM.Collect$$rtentry$$00000000) refers (Special) to __rtentry2.o(.ARM.Collect$$rtentry$$0000000A) for __rt_entry_li
__rtentry.o(.ARM.Collect$$rtentry$$00000000) refers (Special) to __rtentry2.o(.ARM.Collect$$rtentry$$0000000D) for __rt_entry_main
__rtentry.o(.ARM.Collect$$rtentry$$00000000) refers (Special) to __rtentry2.o(.ARM.Collect$$rtentry$$0000000C) for __rt_entry_postli_1
__rtentry.o(.ARM.Collect$$rtentry$$00000000) refers (Special) to __rtentry2.o(.ARM.Collect$$rtentry$$00000009) for __rt_entry_postsh_1
__rtentry.o(.ARM.Collect$$rtentry$$00000000) refers (Special) to __rtentry2.o(.ARM.Collect$$rtentry$$00000002) for __rt_entry_presh_1
__rtentry.o(.ARM.Collect$$rtentry$$00000000) refers (Special) to __rtentry4.o(.ARM.Collect$$rtentry$$00000004) for __rt_entry_sh
_printf_intcommon.o(.text) refers (Weak) to _printf_pad.o(.text) for _printf_pre_padding
_printf_intcommon.o(.text) refers (Weak) to _printf_pad.o(.text) for _printf_pre_padding
_printf_intcommon.o(.text) refers (Weak) to _printf_pad.o(.text) for _printf_post_padding
_printf_char.o(.text) refers (Weak) to _printf_str.o(.text) for _printf_str
_printf_char_file.o(.text) refers to _printf_char_common.o(.text) for _printf_char_common
_printf_char_file.o(.text) refers to retarget.o(i.ferror) for ferror
_printf_char_file.o(.text) refers to retarget.o(i.fputc) for fputc
dnaninf.o(x$fpl$dnaninf) refers (Special) to usenofp.o(x$fpl$usenofp) for __I$use$fp
dretinf.o(x$fpl$dretinf) refers (Special) to usenofp.o(x$fpl$usenofp) for __I$use$fp
__rtentry2.o(.ARM.Collect$$rtentry$$00000008) refers to boardinit2.o(.text) for _platform_post_stackheap_init
__rtentry2.o(.ARM.Collect$$rtentry$$0000000A) refers to libinit.o(.ARM.Collect$$libinit$$00000000) for __rt_lib_init
__rtentry2.o(.ARM.Collect$$rtentry$$0000000B) refers to boardinit3.o(.text) for _platform_post_lib_init
__rtentry2.o(.ARM.Collect$$rtentry$$0000000D) refers to main.o(i.main) for main
__rtentry2.o(.ARM.Collect$$rtentry$$0000000D) refers to exit.o(.text) for exit
__rtentry2.o(.ARM.exidx) refers to __rtentry2.o(.ARM.Collect$$rtentry$$00000001) for .ARM.Collect$$rtentry$$00000001
__rtentry2.o(.ARM.exidx) refers to __rtentry2.o(.ARM.Collect$$rtentry$$00000008) for .ARM.Collect$$rtentry$$00000008
__rtentry2.o(.ARM.exidx) refers to __rtentry2.o(.ARM.Collect$$rtentry$$0000000A) for .ARM.Collect$$rtentry$$0000000A
__rtentry2.o(.ARM.exidx) refers to __rtentry2.o(.ARM.Collect$$rtentry$$0000000B) for .ARM.Collect$$rtentry$$0000000B
__rtentry2.o(.ARM.exidx) refers to __rtentry2.o(.ARM.Collect$$rtentry$$0000000D) for .ARM.Collect$$rtentry$$0000000D
__rtentry4.o(.ARM.Collect$$rtentry$$00000004) refers to sys_stackheap_outer.o(.text) for __user_setup_stackheap
__rtentry4.o(.ARM.exidx) refers to __rtentry4.o(.ARM.Collect$$rtentry$$00000004) for .ARM.Collect$$rtentry$$00000004
_printf_char_common.o(.text) refers to __printf_wp.o(.text) for __printf
sys_stackheap_outer.o(.text) refers to libspace.o(.text) for __user_perproc_libspace
sys_stackheap_outer.o(.text) refers to startup_k1921vk035.o(.text) for __user_initial_stackheap
exit.o(.text) refers to rtexit.o(.ARM.Collect$$rtexit$$00000000) for __rt_exit
libinit.o(.ARM.Collect$$libinit$$00000000) refers (Special) to libinit2.o(.ARM.Collect$$libinit$$0000002E) for __rt_lib_init_alloca_1
libinit.o(.ARM.Collect$$libinit$$00000000) refers (Special) to libinit2.o(.ARM.Collect$$libinit$$0000002C) for __rt_lib_init_argv_1
libinit.o(.ARM.Collect$$libinit$$00000000) refers (Special) to libinit2.o(.ARM.Collect$$libinit$$0000001B) for __rt_lib_init_atexit_1
libinit.o(.ARM.Collect$$libinit$$00000000) refers (Special) to libinit2.o(.ARM.Collect$$libinit$$00000021) for __rt_lib_init_clock_1
libinit.o(.ARM.Collect$$libinit$$00000000) refers (Special) to libinit2.o(.ARM.Collect$$libinit$$00000032) for __rt_lib_init_cpp_1
libinit.o(.ARM.Collect$$libinit$$00000000) refers (Special) to libinit2.o(.ARM.Collect$$libinit$$00000030) for __rt_lib_init_exceptions_1
libinit.o(.ARM.Collect$$libinit$$00000000) refers (Special) to libinit2.o(.ARM.Collect$$libinit$$00000001) for __rt_lib_init_fp_1
libinit.o(.ARM.Collect$$libinit$$00000000) refers (Special) to libinit2.o(.ARM.Collect$$libinit$$0000001F) for __rt_lib_init_fp_trap_1
libinit.o(.ARM.Collect$$libinit$$00000000) refers (Special) to libinit2.o(.ARM.Collect$$libinit$$00000023) for __rt_lib_init_getenv_1
libinit.o(.ARM.Collect$$libinit$$00000000) refers (Special) to libinit2.o(.ARM.Collect$$libinit$$0000000A) for __rt_lib_init_heap_1
libinit.o(.ARM.Collect$$libinit$$00000000) refers (Special) to libinit2.o(.ARM.Collect$$libinit$$00000011) for __rt_lib_init_lc_collate_1
libinit.o(.ARM.Collect$$libinit$$00000000) refers (Special) to libinit2.o(.ARM.Collect$$libinit$$00000013) for __rt_lib_init_lc_ctype_1
libinit.o(.ARM.Collect$$libinit$$00000000) refers (Special) to libinit2.o(.ARM.Collect$$libinit$$00000015) for __rt_lib_init_lc_monetary_1
libinit.o(.ARM.Collect$$libinit$$00000000) refers (Special) to libinit2.o(.ARM.Collect$$libinit$$00000017) for __rt_lib_init_lc_numeric_1
libinit.o(.ARM.Collect$$libinit$$00000000) refers (Special) to libinit2.o(.ARM.Collect$$libinit$$00000019) for __rt_lib_init_lc_time_1
libinit.o(.ARM.Collect$$libinit$$00000000) refers (Special) to libinit2.o(.ARM.Collect$$libinit$$00000004) for __rt_lib_init_preinit_1
libinit.o(.ARM.Collect$$libinit$$00000000) refers (Special) to libinit2.o(.ARM.Collect$$libinit$$0000000E) for __rt_lib_init_rand_1
libinit.o(.ARM.Collect$$libinit$$00000000) refers (Special) to libinit2.o(.ARM.Collect$$libinit$$00000033) for __rt_lib_init_return
libinit.o(.ARM.Collect$$libinit$$00000000) refers (Special) to libinit2.o(.ARM.Collect$$libinit$$0000001D) for __rt_lib_init_signal_1
libinit.o(.ARM.Collect$$libinit$$00000000) refers (Special) to libinit2.o(.ARM.Collect$$libinit$$00000025) for __rt_lib_init_stdio_1
libinit.o(.ARM.Collect$$libinit$$00000000) refers (Special) to libinit2.o(.ARM.Collect$$libinit$$0000000C) for __rt_lib_init_user_alloc_1
libspace.o(.text) refers to libspace.o(.bss) for __libspace_start
rtexit.o(.ARM.Collect$$rtexit$$00000000) refers (Special) to rtexit2.o(.ARM.Collect$$rtexit$$00000004) for __rt_exit_exit
rtexit.o(.ARM.Collect$$rtexit$$00000000) refers (Special) to rtexit2.o(.ARM.Collect$$rtexit$$00000003) for __rt_exit_ls
rtexit.o(.ARM.Collect$$rtexit$$00000000) refers (Special) to rtexit2.o(.ARM.Collect$$rtexit$$00000002) for __rt_exit_prels_1
rtexit.o(.ARM.exidx) refers (Special) to rtexit2.o(.ARM.Collect$$rtexit$$00000004) for __rt_exit_exit
rtexit.o(.ARM.exidx) refers (Special) to rtexit2.o(.ARM.Collect$$rtexit$$00000003) for __rt_exit_ls
rtexit.o(.ARM.exidx) refers (Special) to rtexit2.o(.ARM.Collect$$rtexit$$00000002) for __rt_exit_prels_1
rtexit.o(.ARM.exidx) refers to rtexit.o(.ARM.Collect$$rtexit$$00000000) for .ARM.Collect$$rtexit$$00000000
libinit2.o(.ARM.Collect$$libinit$$00000001) refers to fpinit.o(x$fpl$fpinit) for _fp_init
libinit2.o(.ARM.Collect$$libinit$$00000010) refers to libinit2.o(.ARM.Collect$$libinit$$0000000F) for .ARM.Collect$$libinit$$0000000F
libinit2.o(.ARM.Collect$$libinit$$00000012) refers to libinit2.o(.ARM.Collect$$libinit$$0000000F) for .ARM.Collect$$libinit$$0000000F
libinit2.o(.ARM.Collect$$libinit$$00000014) refers to libinit2.o(.ARM.Collect$$libinit$$0000000F) for .ARM.Collect$$libinit$$0000000F
libinit2.o(.ARM.Collect$$libinit$$00000016) refers to libinit2.o(.ARM.Collect$$libinit$$0000000F) for .ARM.Collect$$libinit$$0000000F
libinit2.o(.ARM.Collect$$libinit$$00000018) refers to libinit2.o(.ARM.Collect$$libinit$$0000000F) for .ARM.Collect$$libinit$$0000000F
libinit2.o(.ARM.Collect$$libinit$$00000026) refers to argv_veneer.o(.emb_text) for __ARM_argv_veneer
libinit2.o(.ARM.Collect$$libinit$$00000027) refers to argv_veneer.o(.emb_text) for __ARM_argv_veneer
rtexit2.o(.ARM.Collect$$rtexit$$00000003) refers to libshutdown.o(.ARM.Collect$$libshutdown$$00000000) for __rt_lib_shutdown
rtexit2.o(.ARM.Collect$$rtexit$$00000004) refers to retarget.o(i._sys_exit) for _sys_exit
rtexit2.o(.ARM.exidx) refers to rtexit2.o(.ARM.Collect$$rtexit$$00000001) for .ARM.Collect$$rtexit$$00000001
rtexit2.o(.ARM.exidx) refers to rtexit2.o(.ARM.Collect$$rtexit$$00000003) for .ARM.Collect$$rtexit$$00000003
rtexit2.o(.ARM.exidx) refers to rtexit2.o(.ARM.Collect$$rtexit$$00000004) for .ARM.Collect$$rtexit$$00000004
argv_veneer.o(.emb_text) refers to no_argv.o(.text) for __ARM_get_argv
_get_argv_nomalloc.o(.text) refers (Special) to hrguard.o(.text) for __heap_region$guard
_get_argv_nomalloc.o(.text) refers to defsig_rtmem_outer.o(.text) for __rt_SIGRTMEM
_get_argv_nomalloc.o(.text) refers to sys_command.o(.text) for _sys_command_string
libshutdown.o(.ARM.Collect$$libshutdown$$00000000) refers (Special) to libshutdown2.o(.ARM.Collect$$libshutdown$$00000004) for __rt_lib_shutdown_cpp_1
libshutdown.o(.ARM.Collect$$libshutdown$$00000000) refers (Special) to libshutdown2.o(.ARM.Collect$$libshutdown$$00000002) for __rt_lib_shutdown_fini_1
libshutdown.o(.ARM.Collect$$libshutdown$$00000000) refers (Special) to libshutdown2.o(.ARM.Collect$$libshutdown$$00000009) for __rt_lib_shutdown_fp_trap_1
libshutdown.o(.ARM.Collect$$libshutdown$$00000000) refers (Special) to libshutdown2.o(.ARM.Collect$$libshutdown$$00000011) for __rt_lib_shutdown_heap_1
libshutdown.o(.ARM.Collect$$libshutdown$$00000000) refers (Special) to libshutdown2.o(.ARM.Collect$$libshutdown$$00000012) for __rt_lib_shutdown_return
libshutdown.o(.ARM.Collect$$libshutdown$$00000000) refers (Special) to libshutdown2.o(.ARM.Collect$$libshutdown$$0000000C) for __rt_lib_shutdown_signal_1
libshutdown.o(.ARM.Collect$$libshutdown$$00000000) refers (Special) to libshutdown2.o(.ARM.Collect$$libshutdown$$00000006) for __rt_lib_shutdown_stdio_1
libshutdown.o(.ARM.Collect$$libshutdown$$00000000) refers (Special) to libshutdown2.o(.ARM.Collect$$libshutdown$$0000000E) for __rt_lib_shutdown_user_alloc_1
sys_command.o(.text) refers (Special) to use_no_semi.o(.text) for __I$use$semihosting
sys_command.o(.text) refers (Special) to indicate_semi.o(.text) for __semihosting_library_function
defsig_rtmem_outer.o(.text) refers to defsig_rtmem_inner.o(.text) for __rt_SIGRTMEM_inner
defsig_rtmem_outer.o(.text) refers to defsig_exit.o(.text) for __sig_exit
defsig_rtmem_formal.o(.text) refers to rt_raise.o(.text) for __rt_raise
rt_raise.o(.text) refers to __raise.o(.text) for __raise
rt_raise.o(.text) refers to retarget.o(i._sys_exit) for _sys_exit
defsig_exit.o(.text) refers to retarget.o(i._sys_exit) for _sys_exit
defsig_rtmem_inner.o(.text) refers to defsig_general.o(.text) for __default_signal_display
__raise.o(.text) refers to defsig.o(CL$$defsig) for __default_signal_handler
defsig_general.o(.text) refers to retarget.o(i._ttywrch) for _ttywrch
defsig.o(CL$$defsig) refers to defsig_rtmem_inner.o(.text) for __rt_SIGRTMEM_inner
defsig_abrt_inner.o(.text) refers to defsig_general.o(.text) for __default_signal_display
defsig_fpe_inner.o(.text) refers to defsig_general.o(.text) for __default_signal_display
defsig_rtred_inner.o(.text) refers to defsig_general.o(.text) for __default_signal_display
defsig_stak_inner.o(.text) refers to defsig_general.o(.text) for __default_signal_display
defsig_pvfn_inner.o(.text) refers to defsig_general.o(.text) for __default_signal_display
defsig_cppl_inner.o(.text) refers to defsig_general.o(.text) for __default_signal_display
defsig_segv_inner.o(.text) refers to defsig_general.o(.text) for __default_signal_display
defsig_other.o(.text) refers to defsig_general.o(.text) for __default_signal_display
==============================================================================
Removing Unused input sections from the image.
Removing system_k1921vk035.o(.rev16_text), (4 bytes).
Removing system_k1921vk035.o(.revsh_text), (4 bytes).
Removing system_k1921vk035.o(.rrx_text), (6 bytes).
Removing main.o(.rev16_text), (4 bytes).
Removing main.o(.revsh_text), (4 bytes).
Removing main.o(.rrx_text), (6 bytes).
Removing gpio.o(.rev16_text), (4 bytes).
Removing gpio.o(.revsh_text), (4 bytes).
Removing gpio.o(.rrx_text), (6 bytes).
Removing rcu.o(.rev16_text), (4 bytes).
Removing rcu.o(.revsh_text), (4 bytes).
Removing rcu.o(.rrx_text), (6 bytes).
Removing vk035_it.o(.rev16_text), (4 bytes).
Removing vk035_it.o(.revsh_text), (4 bytes).
Removing vk035_it.o(.rrx_text), (6 bytes).
Removing plib035_adc.o(.rev16_text), (4 bytes).
Removing plib035_adc.o(.revsh_text), (4 bytes).
Removing plib035_adc.o(.rrx_text), (6 bytes).
Removing plib035_adc.o(i.ADC_DC_Config), (116 bytes).
Removing plib035_adc.o(i.ADC_DC_Init), (316 bytes).
Removing plib035_adc.o(i.ADC_DC_StructInit), (18 bytes).
Removing plib035_adc.o(i.ADC_DeInit), (18 bytes).
Removing plib035_adc.o(i.ADC_SEQ_DCEnableCmd), (96 bytes).
Removing plib035_adc.o(i.ADC_SEQ_Init), (568 bytes).
Removing plib035_adc.o(i.ADC_SEQ_ReqConfig), (104 bytes).
Removing plib035_adc.o(i.ADC_SEQ_StructInit), (52 bytes).
Removing plib035_adc.o(i.RCU_ADCRstCmd), (80 bytes).
Removing plib035_can.o(.rev16_text), (4 bytes).
Removing plib035_can.o(.revsh_text), (4 bytes).
Removing plib035_can.o(.rrx_text), (6 bytes).
Removing plib035_dma.o(.rev16_text), (4 bytes).
Removing plib035_dma.o(.revsh_text), (4 bytes).
Removing plib035_dma.o(.rrx_text), (6 bytes).
Removing plib035_dma.o(i.DMA_ChannelDeInit), (10 bytes).
Removing plib035_dma.o(i.DMA_ChannelInit), (492 bytes).
Removing plib035_dma.o(i.DMA_ChannelStructInit), (40 bytes).
Removing plib035_dma.o(i.DMA_DeInit), (28 bytes).
Removing plib035_dma.o(i.DMA_Init), (292 bytes).
Removing plib035_dma.o(i.DMA_ProtectConfig), (100 bytes).
Removing plib035_dma.o(i.DMA_StructInit), (26 bytes).
Removing plib035_ecap.o(.rev16_text), (4 bytes).
Removing plib035_ecap.o(.revsh_text), (4 bytes).
Removing plib035_ecap.o(.rrx_text), (6 bytes).
Removing plib035_ecap.o(i.ECAP_Capture_Init), (632 bytes).
Removing plib035_ecap.o(i.ECAP_Capture_StructInit), (28 bytes).
Removing plib035_ecap.o(i.ECAP_DeInit), (124 bytes).
Removing plib035_ecap.o(i.ECAP_Init), (276 bytes).
Removing plib035_ecap.o(i.ECAP_PWM_Init), (144 bytes).
Removing plib035_ecap.o(i.ECAP_PWM_StructInit), (18 bytes).
Removing plib035_ecap.o(i.ECAP_StructInit), (12 bytes).
Removing plib035_ecap.o(i.RCU_APBRstCmd), (152 bytes).
Removing plib035_gpio.o(.rev16_text), (4 bytes).
Removing plib035_gpio.o(.revsh_text), (4 bytes).
Removing plib035_gpio.o(.rrx_text), (6 bytes).
Removing plib035_gpio.o(i.GPIO_StructInit), (24 bytes).
Removing plib035_i2c.o(.rev16_text), (4 bytes).
Removing plib035_i2c.o(.revsh_text), (4 bytes).
Removing plib035_i2c.o(.rrx_text), (6 bytes).
Removing plib035_i2c.o(i.I2C_FSFreqConfig), (104 bytes).
Removing plib035_i2c.o(i.I2C_HSFreqConfig), (72 bytes).
Removing plib035_mflash.o(.rev16_text), (4 bytes).
Removing plib035_mflash.o(.revsh_text), (4 bytes).
Removing plib035_mflash.o(.rrx_text), (6 bytes).
Removing plib035_mflash.o(i.MFLASH_BusyStatus), (16 bytes).
Removing plib035_mflash.o(i.MFLASH_EraseFull), (92 bytes).
Removing plib035_mflash.o(i.MFLASH_ErasePage), (132 bytes).
Removing plib035_mflash.o(i.MFLASH_ReadData), (212 bytes).
Removing plib035_mflash.o(i.MFLASH_SetCmd), (20 bytes).
Removing plib035_mflash.o(i.MFLASH_WriteData), (180 bytes).
Removing plib035_pmu.o(.rev16_text), (4 bytes).
Removing plib035_pmu.o(.revsh_text), (4 bytes).
Removing plib035_pmu.o(.rrx_text), (6 bytes).
Removing plib035_pwm.o(.rev16_text), (4 bytes).
Removing plib035_pwm.o(.revsh_text), (4 bytes).
Removing plib035_pwm.o(.rrx_text), (6 bytes).
Removing plib035_pwm.o(i.PWM_AQ_ActionAConfig), (160 bytes).
Removing plib035_pwm.o(i.PWM_AQ_ActionBConfig), (160 bytes).
Removing plib035_pwm.o(i.PWM_AQ_Init), (130 bytes).
Removing plib035_pwm.o(i.PWM_AQ_StructInit), (28 bytes).
Removing plib035_pwm.o(i.PWM_CMP_CmpADirectLoadCmd), (112 bytes).
Removing plib035_pwm.o(i.PWM_CMP_CmpALoadEventConfig), (120 bytes).
Removing plib035_pwm.o(i.PWM_CMP_Init), (168 bytes).
Removing plib035_pwm.o(i.PWM_CMP_StructInit), (16 bytes).
Removing plib035_pwm.o(i.PWM_DB_Init), (292 bytes).
Removing plib035_pwm.o(i.PWM_DB_StructInit), (14 bytes).
Removing plib035_pwm.o(i.PWM_DeInit), (116 bytes).
Removing plib035_pwm.o(i.PWM_ET_Init), (680 bytes).
Removing plib035_pwm.o(i.PWM_ET_StructInit), (30 bytes).
Removing plib035_pwm.o(i.PWM_HD_Init), (336 bytes).
Removing plib035_pwm.o(i.PWM_HD_StructInit), (16 bytes).
Removing plib035_pwm.o(i.PWM_TB_ClkDivConfig), (152 bytes).
Removing plib035_pwm.o(i.PWM_TB_Init), (532 bytes).
Removing plib035_pwm.o(i.PWM_TB_StructInit), (24 bytes).
Removing plib035_pwm.o(i.PWM_TZ_Init), (248 bytes).
Removing plib035_pwm.o(i.PWM_TZ_StructInit), (12 bytes).
Removing plib035_pwm.o(i.RCU_APBRstCmd), (152 bytes).
Removing plib035_qep.o(.rev16_text), (4 bytes).
Removing plib035_qep.o(.revsh_text), (4 bytes).
Removing plib035_qep.o(.rrx_text), (6 bytes).
Removing plib035_qep.o(i.QEP_CAP_Init), (224 bytes).
Removing plib035_qep.o(i.QEP_CAP_StructInit), (18 bytes).
Removing plib035_qep.o(i.QEP_CMP_Init), (180 bytes).
Removing plib035_qep.o(i.QEP_CMP_StructInit), (18 bytes).
Removing plib035_qep.o(i.QEP_DeInit), (26 bytes).
Removing plib035_qep.o(i.QEP_PC_Init), (280 bytes).
Removing plib035_qep.o(i.QEP_PC_StructInit), (24 bytes).
Removing plib035_qep.o(i.RCU_APBRstCmd), (152 bytes).
Removing plib035_rcu.o(.rev16_text), (4 bytes).
Removing plib035_rcu.o(.revsh_text), (4 bytes).
Removing plib035_rcu.o(.rrx_text), (6 bytes).
Removing plib035_rcu.o(i.RCU_GetADCClkFreq), (48 bytes).
Removing plib035_rcu.o(i.RCU_GetClkOutFreq), (44 bytes).
Removing plib035_rcu.o(i.RCU_GetOSEClkFreq), (8 bytes).
Removing plib035_rcu.o(i.RCU_GetOSIClkFreq), (8 bytes).
Removing plib035_rcu.o(i.RCU_GetPLLClkFreq), (56 bytes).
Removing plib035_rcu.o(i.RCU_GetPLLDivClkFreq), (28 bytes).
Removing plib035_rcu.o(i.RCU_GetSPIClkFreq), (48 bytes).
Removing plib035_rcu.o(i.RCU_GetSysClkFreq), (16 bytes).
Removing plib035_rcu.o(i.RCU_GetTraceClkFreq), (44 bytes).
Removing plib035_rcu.o(i.RCU_GetUARTClkFreq), (48 bytes).
Removing plib035_rcu.o(i.RCU_GetWDTClkFreq), (44 bytes).
Removing plib035_rcu.o(i.RCU_PLL_DeInit), (24 bytes).
Removing plib035_rcu.o(i.getPeriphClkFreq), (38 bytes).
Removing plib035_rcu.o(i.getSysClkFreq), (38 bytes).
Removing plib035_rcu.o(i.getSysPeriphClkFreq), (38 bytes).
Removing plib035_spi.o(.rev16_text), (4 bytes).
Removing plib035_spi.o(.revsh_text), (4 bytes).
Removing plib035_spi.o(.rrx_text), (6 bytes).
Removing plib035_spi.o(i.RCU_SPIRstCmd), (80 bytes).
Removing plib035_spi.o(i.SPI_DeInit), (18 bytes).
Removing plib035_spi.o(i.SPI_Init), (228 bytes).
Removing plib035_spi.o(i.SPI_StructInit), (18 bytes).
Removing plib035_tmr.o(.rev16_text), (4 bytes).
Removing plib035_tmr.o(.revsh_text), (4 bytes).
Removing plib035_tmr.o(.rrx_text), (6 bytes).
Removing plib035_tmr.o(i.TMR_FreqConfig), (8 bytes).
Removing plib035_tmr.o(i.TMR_PeriodConfig), (16 bytes).
Removing plib035_tmr.o(i.TMR_SetLoad), (100 bytes).
Removing plib035_uart.o(.rev16_text), (4 bytes).
Removing plib035_uart.o(.revsh_text), (4 bytes).
Removing plib035_uart.o(.rrx_text), (6 bytes).
Removing plib035_uart.o(i.RCU_UARTRstCmd), (84 bytes).
Removing plib035_uart.o(i.UART_AutoBaudConfig), (260 bytes).
Removing plib035_uart.o(i.UART_DeInit), (100 bytes).
Removing plib035_uart.o(i.UART_Init), (316 bytes).
Removing plib035_uart.o(i.UART_StructInit), (24 bytes).
Removing plib035_wdt.o(.rev16_text), (4 bytes).
Removing plib035_wdt.o(.revsh_text), (4 bytes).
Removing plib035_wdt.o(.rrx_text), (6 bytes).
Removing retarget.o(.rev16_text), (4 bytes).
Removing retarget.o(.revsh_text), (4 bytes).
Removing retarget.o(.rrx_text), (6 bytes).
Removing retarget.o(i._ttywrch), (4 bytes).
Removing retarget.o(i.fgetc), (4 bytes).
Removing retarget.o(.data), (4 bytes).
Removing retarget_conf.o(.rev16_text), (4 bytes).
Removing retarget_conf.o(.revsh_text), (4 bytes).
Removing retarget_conf.o(.rrx_text), (6 bytes).
Removing retarget_conf.o(i.retarget_get_char), (20 bytes).
159 unused section(s) (total 11136 bytes) removed from the image.
==============================================================================
Image Symbol Table
Local Symbols
Symbol Name Value Ov Type Size Object(Section)
RESET 0x00000000 Section 344 startup_k1921vk035.o(RESET)
../clib/angel/boardlib.s 0x00000000 Number 0 boardshut.o ABSOLUTE
../clib/angel/boardlib.s 0x00000000 Number 0 boardinit3.o ABSOLUTE
../clib/angel/boardlib.s 0x00000000 Number 0 boardinit2.o ABSOLUTE
../clib/angel/boardlib.s 0x00000000 Number 0 boardinit1.o ABSOLUTE
../clib/angel/dczerorl2.s 0x00000000 Number 0 __dczerorl2.o ABSOLUTE
../clib/angel/handlers.s 0x00000000 Number 0 __scatter_zi.o ABSOLUTE
../clib/angel/kernel.s 0x00000000 Number 0 __rtentry.o ABSOLUTE
../clib/angel/kernel.s 0x00000000 Number 0 rtexit2.o ABSOLUTE
../clib/angel/kernel.s 0x00000000 Number 0 __rtentry2.o ABSOLUTE
../clib/angel/kernel.s 0x00000000 Number 0 rtexit.o ABSOLUTE
../clib/angel/kernel.s 0x00000000 Number 0 __rtentry4.o ABSOLUTE
../clib/angel/rt.s 0x00000000 Number 0 rt_raise.o ABSOLUTE
../clib/angel/scatter.s 0x00000000 Number 0 __scatter.o ABSOLUTE
../clib/angel/startup.s 0x00000000 Number 0 __main.o ABSOLUTE
../clib/angel/sys.s 0x00000000 Number 0 sys_stackheap_outer.o ABSOLUTE
../clib/angel/sys.s 0x00000000 Number 0 indicate_semi.o ABSOLUTE
../clib/angel/sys.s 0x00000000 Number 0 use_no_semi.o ABSOLUTE
../clib/angel/sys.s 0x00000000 Number 0 libspace.o ABSOLUTE
../clib/angel/sysapp.c 0x00000000 Number 0 sys_command.o ABSOLUTE
../clib/armsys.c 0x00000000 Number 0 argv_veneer.o ABSOLUTE
../clib/armsys.c 0x00000000 Number 0 argv_veneer.o ABSOLUTE
../clib/armsys.c 0x00000000 Number 0 _get_argv_nomalloc.o ABSOLUTE
../clib/armsys.c 0x00000000 Number 0 no_argv.o ABSOLUTE
../clib/heapalloc.c 0x00000000 Number 0 hrguard.o ABSOLUTE
../clib/heapaux.c 0x00000000 Number 0 heapauxi.o ABSOLUTE
../clib/libinit.s 0x00000000 Number 0 libshutdown.o ABSOLUTE
../clib/libinit.s 0x00000000 Number 0 libshutdown2.o ABSOLUTE
../clib/libinit.s 0x00000000 Number 0 libinit2.o ABSOLUTE
../clib/libinit.s 0x00000000 Number 0 libinit.o ABSOLUTE
../clib/misc.s 0x00000000 Number 0 printf_stubs.o ABSOLUTE
../clib/printf.c 0x00000000 Number 0 _printf_dec.o ABSOLUTE
../clib/printf.c 0x00000000 Number 0 __printf_ss.o ABSOLUTE
../clib/printf.c 0x00000000 Number 0 __printf_flags_ss.o ABSOLUTE
../clib/printf.c 0x00000000 Number 0 __printf_wp.o ABSOLUTE
../clib/printf.c 0x00000000 Number 0 __printf_flags_wp.o ABSOLUTE
../clib/printf.c 0x00000000 Number 0 __printf_flags.o ABSOLUTE
../clib/printf.c 0x00000000 Number 0 __printf_flags_ss_wp.o ABSOLUTE
../clib/printf.c 0x00000000 Number 0 __printf_nopercent.o ABSOLUTE
../clib/printf.c 0x00000000 Number 0 __printf_ss_wp.o ABSOLUTE
../clib/printf.c 0x00000000 Number 0 _printf_char_file.o ABSOLUTE
../clib/printf.c 0x00000000 Number 0 _printf_char.o ABSOLUTE
../clib/printf.c 0x00000000 Number 0 _printf_intcommon.o ABSOLUTE
../clib/printf.c 0x00000000 Number 0 _printf_char_common.o ABSOLUTE
../clib/printf.c 0x00000000 Number 0 __2printf.o ABSOLUTE
../clib/printf.c 0x00000000 Number 0 noretval__2printf.o ABSOLUTE
../clib/printf.c 0x00000000 Number 0 __printf.o ABSOLUTE
../clib/printf.c 0x00000000 Number 0 _printf_pad.o ABSOLUTE
../clib/printf.c 0x00000000 Number 0 _printf_str.o ABSOLUTE
../clib/printf_percent.s 0x00000000 Number 0 _printf_percent_end.o ABSOLUTE
../clib/printf_percent.s 0x00000000 Number 0 _printf_s.o ABSOLUTE
../clib/printf_percent.s 0x00000000 Number 0 _printf_d.o ABSOLUTE
../clib/printf_percent.s 0x00000000 Number 0 _printf_percent.o ABSOLUTE
../clib/signal.c 0x00000000 Number 0 defsig_rtred_inner.o ABSOLUTE
../clib/signal.c 0x00000000 Number 0 defsig_stak_inner.o ABSOLUTE
../clib/signal.c 0x00000000 Number 0 defsig_pvfn_inner.o ABSOLUTE
../clib/signal.c 0x00000000 Number 0 defsig_cppl_inner.o ABSOLUTE
../clib/signal.c 0x00000000 Number 0 defsig_segv_inner.o ABSOLUTE
../clib/signal.c 0x00000000 Number 0 defsig_other.o ABSOLUTE
../clib/signal.c 0x00000000 Number 0 defsig_rtmem_inner.o ABSOLUTE
../clib/signal.c 0x00000000 Number 0 __raise.o ABSOLUTE
../clib/signal.c 0x00000000 Number 0 defsig_rtmem_formal.o ABSOLUTE
../clib/signal.c 0x00000000 Number 0 defsig_rtmem_outer.o ABSOLUTE
../clib/signal.c 0x00000000 Number 0 defsig_general.o ABSOLUTE
../clib/signal.c 0x00000000 Number 0 defsig_abrt_inner.o ABSOLUTE
../clib/signal.c 0x00000000 Number 0 defsig_exit.o ABSOLUTE
../clib/signal.c 0x00000000 Number 0 defsig_fpe_inner.o ABSOLUTE
../clib/signal.s 0x00000000 Number 0 defsig.o ABSOLUTE
../clib/stdlib.c 0x00000000 Number 0 exit.o ABSOLUTE
../fplib/ddiv.s 0x00000000 Number 0 ddiv.o ABSOLUTE
../fplib/dfix.s 0x00000000 Number 0 dfix.o ABSOLUTE
../fplib/dflt.s 0x00000000 Number 0 dflt_clz.o ABSOLUTE
../fplib/dnaninf.s 0x00000000 Number 0 dnaninf.o ABSOLUTE
../fplib/dretinf.s 0x00000000 Number 0 dretinf.o ABSOLUTE
../fplib/fpinit.s 0x00000000 Number 0 fpinit.o ABSOLUTE
../fplib/usenofp.s 0x00000000 Number 0 usenofp.o ABSOLUTE
Core\App\gpio.c 0x00000000 Number 0 gpio.o ABSOLUTE
Core\App\main.c 0x00000000 Number 0 main.o ABSOLUTE
Core\App\rcu.c 0x00000000 Number 0 rcu.o ABSOLUTE
Core\App\vk035_it.c 0x00000000 Number 0 vk035_it.o ABSOLUTE
Core\\App\\gpio.c 0x00000000 Number 0 gpio.o ABSOLUTE
Core\\App\\main.c 0x00000000 Number 0 main.o ABSOLUTE
Core\\App\\rcu.c 0x00000000 Number 0 rcu.o ABSOLUTE
Core\\App\\vk035_it.c 0x00000000 Number 0 vk035_it.o ABSOLUTE
dc.s 0x00000000 Number 0 dc.o ABSOLUTE
platform\Device\NIIET\K1921VK035\Source\ARM\startup_K1921VK035.s 0x00000000 Number 0 startup_k1921vk035.o ABSOLUTE
platform\Device\NIIET\K1921VK035\Source\system_K1921VK035.c 0x00000000 Number 0 system_k1921vk035.o ABSOLUTE
platform\\Device\\NIIET\\K1921VK035\\Source\\system_K1921VK035.c 0x00000000 Number 0 system_k1921vk035.o ABSOLUTE
platform\\plib035\\src\\plib035_adc.c 0x00000000 Number 0 plib035_adc.o ABSOLUTE
platform\\plib035\\src\\plib035_can.c 0x00000000 Number 0 plib035_can.o ABSOLUTE
platform\\plib035\\src\\plib035_dma.c 0x00000000 Number 0 plib035_dma.o ABSOLUTE
platform\\plib035\\src\\plib035_ecap.c 0x00000000 Number 0 plib035_ecap.o ABSOLUTE
platform\\plib035\\src\\plib035_gpio.c 0x00000000 Number 0 plib035_gpio.o ABSOLUTE
platform\\plib035\\src\\plib035_i2c.c 0x00000000 Number 0 plib035_i2c.o ABSOLUTE
platform\\plib035\\src\\plib035_mflash.c 0x00000000 Number 0 plib035_mflash.o ABSOLUTE
platform\\plib035\\src\\plib035_pmu.c 0x00000000 Number 0 plib035_pmu.o ABSOLUTE
platform\\plib035\\src\\plib035_pwm.c 0x00000000 Number 0 plib035_pwm.o ABSOLUTE
platform\\plib035\\src\\plib035_qep.c 0x00000000 Number 0 plib035_qep.o ABSOLUTE
platform\\plib035\\src\\plib035_rcu.c 0x00000000 Number 0 plib035_rcu.o ABSOLUTE
platform\\plib035\\src\\plib035_spi.c 0x00000000 Number 0 plib035_spi.o ABSOLUTE
platform\\plib035\\src\\plib035_tmr.c 0x00000000 Number 0 plib035_tmr.o ABSOLUTE
platform\\plib035\\src\\plib035_uart.c 0x00000000 Number 0 plib035_uart.o ABSOLUTE
platform\\plib035\\src\\plib035_wdt.c 0x00000000 Number 0 plib035_wdt.o ABSOLUTE
platform\\retarget\\retarget.c 0x00000000 Number 0 retarget.o ABSOLUTE
platform\\retarget\\retarget_conf.c 0x00000000 Number 0 retarget_conf.o ABSOLUTE
platform\plib035\src\plib035_adc.c 0x00000000 Number 0 plib035_adc.o ABSOLUTE
platform\plib035\src\plib035_can.c 0x00000000 Number 0 plib035_can.o ABSOLUTE
platform\plib035\src\plib035_dma.c 0x00000000 Number 0 plib035_dma.o ABSOLUTE
platform\plib035\src\plib035_ecap.c 0x00000000 Number 0 plib035_ecap.o ABSOLUTE
platform\plib035\src\plib035_gpio.c 0x00000000 Number 0 plib035_gpio.o ABSOLUTE
platform\plib035\src\plib035_i2c.c 0x00000000 Number 0 plib035_i2c.o ABSOLUTE
platform\plib035\src\plib035_mflash.c 0x00000000 Number 0 plib035_mflash.o ABSOLUTE
platform\plib035\src\plib035_pmu.c 0x00000000 Number 0 plib035_pmu.o ABSOLUTE
platform\plib035\src\plib035_pwm.c 0x00000000 Number 0 plib035_pwm.o ABSOLUTE
platform\plib035\src\plib035_qep.c 0x00000000 Number 0 plib035_qep.o ABSOLUTE
platform\plib035\src\plib035_rcu.c 0x00000000 Number 0 plib035_rcu.o ABSOLUTE
platform\plib035\src\plib035_spi.c 0x00000000 Number 0 plib035_spi.o ABSOLUTE
platform\plib035\src\plib035_tmr.c 0x00000000 Number 0 plib035_tmr.o ABSOLUTE
platform\plib035\src\plib035_uart.c 0x00000000 Number 0 plib035_uart.o ABSOLUTE
platform\plib035\src\plib035_wdt.c 0x00000000 Number 0 plib035_wdt.o ABSOLUTE
platform\retarget\retarget.c 0x00000000 Number 0 retarget.o ABSOLUTE
platform\retarget\retarget_conf.c 0x00000000 Number 0 retarget_conf.o ABSOLUTE
!!!main 0x00000158 Section 8 __main.o(!!!main)
!!!scatter 0x00000160 Section 52 __scatter.o(!!!scatter)
!!dczerorl2 0x00000194 Section 90 __dczerorl2.o(!!dczerorl2)
!!handler_zi 0x000001f0 Section 28 __scatter_zi.o(!!handler_zi)
.ARM.Collect$$_printf_percent$$00000000 0x0000020c Section 0 _printf_percent.o(.ARM.Collect$$_printf_percent$$00000000)
.ARM.Collect$$_printf_percent$$00000009 0x0000020c Section 6 _printf_d.o(.ARM.Collect$$_printf_percent$$00000009)
.ARM.Collect$$_printf_percent$$00000014 0x00000212 Section 6 _printf_s.o(.ARM.Collect$$_printf_percent$$00000014)
.ARM.Collect$$_printf_percent$$00000017 0x00000218 Section 4 _printf_percent_end.o(.ARM.Collect$$_printf_percent$$00000017)
.ARM.Collect$$libinit$$00000000 0x0000021c Section 2 libinit.o(.ARM.Collect$$libinit$$00000000)
.ARM.Collect$$libinit$$00000001 0x0000021e Section 4 libinit2.o(.ARM.Collect$$libinit$$00000001)
.ARM.Collect$$libinit$$00000004 0x00000222 Section 0 libinit2.o(.ARM.Collect$$libinit$$00000004)
.ARM.Collect$$libinit$$0000000A 0x00000222 Section 0 libinit2.o(.ARM.Collect$$libinit$$0000000A)
.ARM.Collect$$libinit$$0000000C 0x00000222 Section 0 libinit2.o(.ARM.Collect$$libinit$$0000000C)
.ARM.Collect$$libinit$$0000000E 0x00000222 Section 0 libinit2.o(.ARM.Collect$$libinit$$0000000E)
.ARM.Collect$$libinit$$00000011 0x00000222 Section 0 libinit2.o(.ARM.Collect$$libinit$$00000011)
.ARM.Collect$$libinit$$00000013 0x00000222 Section 0 libinit2.o(.ARM.Collect$$libinit$$00000013)
.ARM.Collect$$libinit$$00000015 0x00000222 Section 0 libinit2.o(.ARM.Collect$$libinit$$00000015)
.ARM.Collect$$libinit$$00000017 0x00000222 Section 0 libinit2.o(.ARM.Collect$$libinit$$00000017)
.ARM.Collect$$libinit$$00000019 0x00000222 Section 0 libinit2.o(.ARM.Collect$$libinit$$00000019)
.ARM.Collect$$libinit$$0000001B 0x00000222 Section 0 libinit2.o(.ARM.Collect$$libinit$$0000001B)
.ARM.Collect$$libinit$$0000001D 0x00000222 Section 0 libinit2.o(.ARM.Collect$$libinit$$0000001D)
.ARM.Collect$$libinit$$0000001F 0x00000222 Section 0 libinit2.o(.ARM.Collect$$libinit$$0000001F)
.ARM.Collect$$libinit$$00000021 0x00000222 Section 0 libinit2.o(.ARM.Collect$$libinit$$00000021)
.ARM.Collect$$libinit$$00000023 0x00000222 Section 0 libinit2.o(.ARM.Collect$$libinit$$00000023)
.ARM.Collect$$libinit$$00000025 0x00000222 Section 0 libinit2.o(.ARM.Collect$$libinit$$00000025)
.ARM.Collect$$libinit$$0000002C 0x00000222 Section 0 libinit2.o(.ARM.Collect$$libinit$$0000002C)
.ARM.Collect$$libinit$$0000002E 0x00000222 Section 0 libinit2.o(.ARM.Collect$$libinit$$0000002E)
.ARM.Collect$$libinit$$00000030 0x00000222 Section 0 libinit2.o(.ARM.Collect$$libinit$$00000030)
.ARM.Collect$$libinit$$00000032 0x00000222 Section 0 libinit2.o(.ARM.Collect$$libinit$$00000032)
.ARM.Collect$$libinit$$00000033 0x00000222 Section 2 libinit2.o(.ARM.Collect$$libinit$$00000033)
.ARM.Collect$$libshutdown$$00000000 0x00000224 Section 2 libshutdown.o(.ARM.Collect$$libshutdown$$00000000)
.ARM.Collect$$libshutdown$$00000002 0x00000226 Section 0 libshutdown2.o(.ARM.Collect$$libshutdown$$00000002)
.ARM.Collect$$libshutdown$$00000004 0x00000226 Section 0 libshutdown2.o(.ARM.Collect$$libshutdown$$00000004)
.ARM.Collect$$libshutdown$$00000006 0x00000226 Section 0 libshutdown2.o(.ARM.Collect$$libshutdown$$00000006)
.ARM.Collect$$libshutdown$$00000009 0x00000226 Section 0 libshutdown2.o(.ARM.Collect$$libshutdown$$00000009)
.ARM.Collect$$libshutdown$$0000000C 0x00000226 Section 0 libshutdown2.o(.ARM.Collect$$libshutdown$$0000000C)
.ARM.Collect$$libshutdown$$0000000E 0x00000226 Section 0 libshutdown2.o(.ARM.Collect$$libshutdown$$0000000E)
.ARM.Collect$$libshutdown$$00000011 0x00000226 Section 0 libshutdown2.o(.ARM.Collect$$libshutdown$$00000011)
.ARM.Collect$$libshutdown$$00000012 0x00000226 Section 2 libshutdown2.o(.ARM.Collect$$libshutdown$$00000012)
.ARM.Collect$$rtentry$$00000000 0x00000228 Section 0 __rtentry.o(.ARM.Collect$$rtentry$$00000000)
.ARM.Collect$$rtentry$$00000002 0x00000228 Section 0 __rtentry2.o(.ARM.Collect$$rtentry$$00000002)
.ARM.Collect$$rtentry$$00000004 0x00000228 Section 6 __rtentry4.o(.ARM.Collect$$rtentry$$00000004)
.ARM.Collect$$rtentry$$00000009 0x0000022e Section 0 __rtentry2.o(.ARM.Collect$$rtentry$$00000009)
.ARM.Collect$$rtentry$$0000000A 0x0000022e Section 4 __rtentry2.o(.ARM.Collect$$rtentry$$0000000A)
.ARM.Collect$$rtentry$$0000000C 0x00000232 Section 0 __rtentry2.o(.ARM.Collect$$rtentry$$0000000C)
.ARM.Collect$$rtentry$$0000000D 0x00000232 Section 8 __rtentry2.o(.ARM.Collect$$rtentry$$0000000D)
.ARM.Collect$$rtexit$$00000000 0x0000023a Section 2 rtexit.o(.ARM.Collect$$rtexit$$00000000)
.ARM.Collect$$rtexit$$00000002 0x0000023c Section 0 rtexit2.o(.ARM.Collect$$rtexit$$00000002)
.ARM.Collect$$rtexit$$00000003 0x0000023c Section 4 rtexit2.o(.ARM.Collect$$rtexit$$00000003)
.ARM.Collect$$rtexit$$00000004 0x00000240 Section 6 rtexit2.o(.ARM.Collect$$rtexit$$00000004)
.text 0x00000248 Section 64 startup_k1921vk035.o(.text)
$v0 0x00000248 Number 0 startup_k1921vk035.o(.text)
.text 0x00000288 Section 2 use_no_semi.o(.text)
.text 0x0000028c Section 0 noretval__2printf.o(.text)
.text 0x000002a4 Section 0 _printf_pad.o(.text)
.text 0x000002f2 Section 0 _printf_str.o(.text)
.text 0x00000344 Section 0 _printf_dec.o(.text)
.text 0x000003bc Section 0 __printf_wp.o(.text)
.text 0x000004ca Section 0 heapauxi.o(.text)
.text 0x000004d0 Section 0 _printf_intcommon.o(.text)
.text 0x00000582 Section 0 _printf_char.o(.text)
.text 0x000005b0 Section 0 _printf_char_file.o(.text)
.text 0x000005d4 Section 0 _printf_char_common.o(.text)
_printf_input_char 0x000005d5 Thumb Code 10 _printf_char_common.o(.text)
.text 0x00000604 Section 74 sys_stackheap_outer.o(.text)
.text 0x0000064e Section 0 exit.o(.text)
.text 0x00000660 Section 8 libspace.o(.text)
i.BusFault_Handler 0x00000668 Section 0 vk035_it.o(i.BusFault_Handler)
i.ClkInit 0x0000066c Section 0 system_k1921vk035.o(i.ClkInit)
i.DebugMon_Handler 0x000006e0 Section 0 vk035_it.o(i.DebugMon_Handler)
i.Error_Handler 0x000006e2 Section 0 main.o(i.Error_Handler)
i.FPUInit 0x000006e8 Section 0 system_k1921vk035.o(i.FPUInit)
i.GPIO_AltFuncCmd 0x00000700 Section 0 plib035_gpio.o(i.GPIO_AltFuncCmd)
GPIO_AltFuncCmd 0x00000701 Thumb Code 74 plib035_gpio.o(i.GPIO_AltFuncCmd)
i.GPIO_DeInit 0x00000758 Section 0 plib035_gpio.o(i.GPIO_DeInit)
i.GPIO_DigitalCmd 0x000007bc Section 0 plib035_gpio.o(i.GPIO_DigitalCmd)
GPIO_DigitalCmd 0x000007bd Thumb Code 74 plib035_gpio.o(i.GPIO_DigitalCmd)
i.GPIO_DriveModeConfig 0x00000838 Section 0 plib035_gpio.o(i.GPIO_DriveModeConfig)
i.GPIO_InModeConfig 0x000008b4 Section 0 plib035_gpio.o(i.GPIO_InModeConfig)
i.GPIO_Init 0x0000092c Section 0 plib035_gpio.o(i.GPIO_Init)
i.GPIO_ModeConfig 0x0000097c Section 0 plib035_gpio.o(i.GPIO_ModeConfig)
GPIO_ModeConfig 0x0000097d Thumb Code 44 plib035_gpio.o(i.GPIO_ModeConfig)
i.GPIO_OutCmd 0x000009a8 Section 0 plib035_gpio.o(i.GPIO_OutCmd)
GPIO_OutCmd 0x000009a9 Thumb Code 74 plib035_gpio.o(i.GPIO_OutCmd)
i.GPIO_OutModeConfig 0x00000a00 Section 0 plib035_gpio.o(i.GPIO_OutModeConfig)
i.GPIO_PullModeConfig 0x00000a78 Section 0 plib035_gpio.o(i.GPIO_PullModeConfig)
i.HardFault_Handler 0x00000af0 Section 0 vk035_it.o(i.HardFault_Handler)
i.MFLASH_LatencyConfig 0x00000af4 Section 0 plib035_rcu.o(i.MFLASH_LatencyConfig)
MFLASH_LatencyConfig 0x00000af5 Thumb Code 28 plib035_rcu.o(i.MFLASH_LatencyConfig)
i.MemManage_Handler 0x00000b3c Section 0 vk035_it.o(i.MemManage_Handler)
i.NMI_Handler 0x00000b3e Section 0 vk035_it.o(i.NMI_Handler)
i.PendSV_Handler 0x00000b40 Section 0 vk035_it.o(i.PendSV_Handler)
i.RCU_AHBRstCmd 0x00000b44 Section 0 plib035_gpio.o(i.RCU_AHBRstCmd)
RCU_AHBRstCmd 0x00000b45 Thumb Code 64 plib035_gpio.o(i.RCU_AHBRstCmd)
i.RCU_ClkOutConfig 0x00000bb0 Section 0 rcu.o(i.RCU_ClkOutConfig)
RCU_ClkOutConfig 0x00000bb1 Thumb Code 86 rcu.o(i.RCU_ClkOutConfig)
i.RCU_PLL_AutoConfig 0x00000c38 Section 0 plib035_rcu.o(i.RCU_PLL_AutoConfig)
i.RCU_PLL_Init 0x00000d98 Section 0 plib035_rcu.o(i.RCU_PLL_Init)
i.RCU_PLL_OutCmd 0x00000e98 Section 0 plib035_rcu.o(i.RCU_PLL_OutCmd)
RCU_PLL_OutCmd 0x00000e99 Thumb Code 34 plib035_rcu.o(i.RCU_PLL_OutCmd)
i.RCU_PLL_StructInit 0x00000ee8 Section 0 plib035_rcu.o(i.RCU_PLL_StructInit)
i.RCU_SysClkChangeCmd 0x00000ef8 Section 0 plib035_rcu.o(i.RCU_SysClkChangeCmd)
i.SVC_Handler 0x00000fb0 Section 0 vk035_it.o(i.SVC_Handler)
i.SysTick_Handler 0x00000fb4 Section 0 vk035_it.o(i.SysTick_Handler)
i.SystemCoreClockUpdate 0x00000fc4 Section 0 system_k1921vk035.o(i.SystemCoreClockUpdate)
i.SystemInit 0x00001034 Section 0 system_k1921vk035.o(i.SystemInit)
i.UsageFault_Handler 0x00001042 Section 0 vk035_it.o(i.UsageFault_Handler)
i._is_digit 0x00001044 Section 0 __printf_wp.o(i._is_digit)
i._sys_exit 0x00001052 Section 0 retarget.o(i._sys_exit)
i.assert_failed 0x00001054 Section 0 main.o(i.assert_failed)
i.ferror 0x00001084 Section 0 retarget.o(i.ferror)
i.fputc 0x0000108a Section 0 retarget.o(i.fputc)
i.gpio_init 0x00001090 Section 0 gpio.o(i.gpio_init)
i.main 0x00001104 Section 0 main.o(i.main)
i.periph_init 0x0000110c Section 0 main.o(i.periph_init)
i.retarget_init 0x0000117c Section 0 retarget_conf.o(i.retarget_init)
i.retarget_put_char 0x0000123c Section 0 retarget_conf.o(i.retarget_put_char)
i.sysclk_init 0x00001250 Section 0 rcu.o(i.sysclk_init)
x$fpl$ddiv 0x000012b8 Section 688 ddiv.o(x$fpl$ddiv)
$v0 0x000012b8 Number 0 ddiv.o(x$fpl$ddiv)
ddiv_entry 0x000012bf Thumb Code 0 ddiv.o(x$fpl$ddiv)
x$fpl$dfix 0x00001568 Section 94 dfix.o(x$fpl$dfix)
$v0 0x00001568 Number 0 dfix.o(x$fpl$dfix)
x$fpl$dfltu 0x000015c6 Section 38 dflt_clz.o(x$fpl$dfltu)
$v0 0x000015c6 Number 0 dflt_clz.o(x$fpl$dfltu)
x$fpl$dnaninf 0x000015ec Section 156 dnaninf.o(x$fpl$dnaninf)
$v0 0x000015ec Number 0 dnaninf.o(x$fpl$dnaninf)
x$fpl$dretinf 0x00001688 Section 12 dretinf.o(x$fpl$dretinf)
$v0 0x00001688 Number 0 dretinf.o(x$fpl$dretinf)
x$fpl$fpinit 0x00001694 Section 10 fpinit.o(x$fpl$fpinit)
$v0 0x00001694 Number 0 fpinit.o(x$fpl$fpinit)
x$fpl$usenofp 0x0000169e Section 0 usenofp.o(x$fpl$usenofp)
.data 0x20000000 Section 4 system_k1921vk035.o(.data)
.data 0x20000004 Section 4 system_k1921vk035.o(.data)
.data 0x20000008 Section 384 gpio.o(.data)
gpioa_config 0x20000008 Data 192 gpio.o(.data)
gpiob_config 0x200000c8 Data 192 gpio.o(.data)
.data 0x20000188 Section 1 rcu.o(.data)
OS_Type 0x20000188 Data 1 rcu.o(.data)
.data 0x2000018c Section 4 retarget.o(.data)
.bss 0x20000190 Section 96 libspace.o(.bss)
HEAP 0x200001f0 Section 512 startup_k1921vk035.o(HEAP)
Heap_Mem 0x200001f0 Data 512 startup_k1921vk035.o(HEAP)
STACK 0x200003f0 Section 1024 startup_k1921vk035.o(STACK)
Stack_Mem 0x200003f0 Data 1024 startup_k1921vk035.o(STACK)
__initial_sp 0x200007f0 Data 0 startup_k1921vk035.o(STACK)
Global Symbols
Symbol Name Value Ov Type Size Object(Section)
BuildAttributes$$THM_ISAv4$E$P$D$K$B$S$7EM$VFPi3$EXTD16$VFPS$VFMA$PE$A:L22UL41UL21$X:L11$S22US41US21$IEEE1$IW$USESV6$~STKCKD$USESV7$~SHL$OSPACE$ROPI$EBA8$UX$STANDARDLIB$REQ8$PRES8$EABIv2 0x00000000 Number 0 anon$$obj.o ABSOLUTE
__ARM_use_no_argv 0x00000000 Number 0 main.o ABSOLUTE
__Vectors 0x00000000 Data 4 startup_k1921vk035.o(RESET)
_printf_flags 0x00000000 Number 0 printf_stubs.o ABSOLUTE
_printf_return_value 0x00000000 Number 0 printf_stubs.o ABSOLUTE
_printf_sizespec 0x00000000 Number 0 printf_stubs.o ABSOLUTE
_printf_widthprec 0x00000000 Number 0 printf_stubs.o ABSOLUTE
__ARM_exceptions_init - Undefined Weak Reference
__alloca_initialize - Undefined Weak Reference
__arm_fini_ - Undefined Weak Reference
__arm_preinit_ - Undefined Weak Reference
__cpp_initialize__aeabi_ - Undefined Weak Reference
__cxa_finalize - Undefined Weak Reference
__rt_locale - Undefined Weak Reference
__sigvec_lookup - Undefined Weak Reference
_atexit_init - Undefined Weak Reference
_call_atexit_fns - Undefined Weak Reference
_clock_init - Undefined Weak Reference
_fp_trap_init - Undefined Weak Reference
_fp_trap_shutdown - Undefined Weak Reference
_get_lc_collate - Undefined Weak Reference
_get_lc_ctype - Undefined Weak Reference
_get_lc_monetary - Undefined Weak Reference
_get_lc_numeric - Undefined Weak Reference
_get_lc_time - Undefined Weak Reference
_getenv_init - Undefined Weak Reference
_handle_redirection - Undefined Weak Reference
_init_alloc - Undefined Weak Reference
_init_user_alloc - Undefined Weak Reference
_initio - Undefined Weak Reference
_printf_mbtowc - Undefined Weak Reference
_printf_truncate_signed - Undefined Weak Reference
_printf_truncate_unsigned - Undefined Weak Reference
_rand_init - Undefined Weak Reference
_signal_finish - Undefined Weak Reference
_signal_init - Undefined Weak Reference
_terminate_alloc - Undefined Weak Reference
_terminate_user_alloc - Undefined Weak Reference
_terminateio - Undefined Weak Reference
__Vectors_End 0x00000158 Data 0 startup_k1921vk035.o(RESET)
__Vectors_Size 0x00000158 Number 0 startup_k1921vk035.o ABSOLUTE
__main 0x00000159 Thumb Code 8 __main.o(!!!main)
__scatterload 0x00000161 Thumb Code 0 __scatter.o(!!!scatter)
__scatterload_rt2 0x00000161 Thumb Code 44 __scatter.o(!!!scatter)
__scatterload_rt2_thumb_only 0x00000161 Thumb Code 0 __scatter.o(!!!scatter)
__scatterload_null 0x0000016f Thumb Code 0 __scatter.o(!!!scatter)
__decompress 0x00000195 Thumb Code 90 __dczerorl2.o(!!dczerorl2)
__decompress1 0x00000195 Thumb Code 0 __dczerorl2.o(!!dczerorl2)
__scatterload_zeroinit 0x000001f1 Thumb Code 28 __scatter_zi.o(!!handler_zi)
_printf_d 0x0000020d Thumb Code 0 _printf_d.o(.ARM.Collect$$_printf_percent$$00000009)
_printf_percent 0x0000020d Thumb Code 0 _printf_percent.o(.ARM.Collect$$_printf_percent$$00000000)
_printf_s 0x00000213 Thumb Code 0 _printf_s.o(.ARM.Collect$$_printf_percent$$00000014)
_printf_percent_end 0x00000219 Thumb Code 0 _printf_percent_end.o(.ARM.Collect$$_printf_percent$$00000017)
__rt_lib_init 0x0000021d Thumb Code 0 libinit.o(.ARM.Collect$$libinit$$00000000)
__rt_lib_init_fp_1 0x0000021f Thumb Code 0 libinit2.o(.ARM.Collect$$libinit$$00000001)
__rt_lib_init_alloca_1 0x00000223 Thumb Code 0 libinit2.o(.ARM.Collect$$libinit$$0000002E)
__rt_lib_init_argv_1 0x00000223 Thumb Code 0 libinit2.o(.ARM.Collect$$libinit$$0000002C)
__rt_lib_init_atexit_1 0x00000223 Thumb Code 0 libinit2.o(.ARM.Collect$$libinit$$0000001B)
__rt_lib_init_clock_1 0x00000223 Thumb Code 0 libinit2.o(.ARM.Collect$$libinit$$00000021)
__rt_lib_init_cpp_1 0x00000223 Thumb Code 0 libinit2.o(.ARM.Collect$$libinit$$00000032)
__rt_lib_init_exceptions_1 0x00000223 Thumb Code 0 libinit2.o(.ARM.Collect$$libinit$$00000030)
__rt_lib_init_fp_trap_1 0x00000223 Thumb Code 0 libinit2.o(.ARM.Collect$$libinit$$0000001F)
__rt_lib_init_getenv_1 0x00000223 Thumb Code 0 libinit2.o(.ARM.Collect$$libinit$$00000023)
__rt_lib_init_heap_1 0x00000223 Thumb Code 0 libinit2.o(.ARM.Collect$$libinit$$0000000A)
__rt_lib_init_lc_collate_1 0x00000223 Thumb Code 0 libinit2.o(.ARM.Collect$$libinit$$00000011)
__rt_lib_init_lc_ctype_1 0x00000223 Thumb Code 0 libinit2.o(.ARM.Collect$$libinit$$00000013)
__rt_lib_init_lc_monetary_1 0x00000223 Thumb Code 0 libinit2.o(.ARM.Collect$$libinit$$00000015)
__rt_lib_init_lc_numeric_1 0x00000223 Thumb Code 0 libinit2.o(.ARM.Collect$$libinit$$00000017)
__rt_lib_init_lc_time_1 0x00000223 Thumb Code 0 libinit2.o(.ARM.Collect$$libinit$$00000019)
__rt_lib_init_preinit_1 0x00000223 Thumb Code 0 libinit2.o(.ARM.Collect$$libinit$$00000004)
__rt_lib_init_rand_1 0x00000223 Thumb Code 0 libinit2.o(.ARM.Collect$$libinit$$0000000E)
__rt_lib_init_return 0x00000223 Thumb Code 0 libinit2.o(.ARM.Collect$$libinit$$00000033)
__rt_lib_init_signal_1 0x00000223 Thumb Code 0 libinit2.o(.ARM.Collect$$libinit$$0000001D)
__rt_lib_init_stdio_1 0x00000223 Thumb Code 0 libinit2.o(.ARM.Collect$$libinit$$00000025)
__rt_lib_init_user_alloc_1 0x00000223 Thumb Code 0 libinit2.o(.ARM.Collect$$libinit$$0000000C)
__rt_lib_shutdown 0x00000225 Thumb Code 0 libshutdown.o(.ARM.Collect$$libshutdown$$00000000)
__rt_lib_shutdown_cpp_1 0x00000227 Thumb Code 0 libshutdown2.o(.ARM.Collect$$libshutdown$$00000004)
__rt_lib_shutdown_fini_1 0x00000227 Thumb Code 0 libshutdown2.o(.ARM.Collect$$libshutdown$$00000002)
__rt_lib_shutdown_fp_trap_1 0x00000227 Thumb Code 0 libshutdown2.o(.ARM.Collect$$libshutdown$$00000009)
__rt_lib_shutdown_heap_1 0x00000227 Thumb Code 0 libshutdown2.o(.ARM.Collect$$libshutdown$$00000011)
__rt_lib_shutdown_return 0x00000227 Thumb Code 0 libshutdown2.o(.ARM.Collect$$libshutdown$$00000012)
__rt_lib_shutdown_signal_1 0x00000227 Thumb Code 0 libshutdown2.o(.ARM.Collect$$libshutdown$$0000000C)
__rt_lib_shutdown_stdio_1 0x00000227 Thumb Code 0 libshutdown2.o(.ARM.Collect$$libshutdown$$00000006)
__rt_lib_shutdown_user_alloc_1 0x00000227 Thumb Code 0 libshutdown2.o(.ARM.Collect$$libshutdown$$0000000E)
__rt_entry 0x00000229 Thumb Code 0 __rtentry.o(.ARM.Collect$$rtentry$$00000000)
__rt_entry_presh_1 0x00000229 Thumb Code 0 __rtentry2.o(.ARM.Collect$$rtentry$$00000002)
__rt_entry_sh 0x00000229 Thumb Code 0 __rtentry4.o(.ARM.Collect$$rtentry$$00000004)
__rt_entry_li 0x0000022f Thumb Code 0 __rtentry2.o(.ARM.Collect$$rtentry$$0000000A)
__rt_entry_postsh_1 0x0000022f Thumb Code 0 __rtentry2.o(.ARM.Collect$$rtentry$$00000009)
__rt_entry_main 0x00000233 Thumb Code 0 __rtentry2.o(.ARM.Collect$$rtentry$$0000000D)
__rt_entry_postli_1 0x00000233 Thumb Code 0 __rtentry2.o(.ARM.Collect$$rtentry$$0000000C)
__rt_exit 0x0000023b Thumb Code 0 rtexit.o(.ARM.Collect$$rtexit$$00000000)
__rt_exit_ls 0x0000023d Thumb Code 0 rtexit2.o(.ARM.Collect$$rtexit$$00000003)
__rt_exit_prels_1 0x0000023d Thumb Code 0 rtexit2.o(.ARM.Collect$$rtexit$$00000002)
__rt_exit_exit 0x00000241 Thumb Code 0 rtexit2.o(.ARM.Collect$$rtexit$$00000004)
Reset_Handler 0x00000249 Thumb Code 8 startup_k1921vk035.o(.text)
ADC_DC_IRQHandler 0x00000263 Thumb Code 0 startup_k1921vk035.o(.text)
ADC_SEQ0_IRQHandler 0x00000263 Thumb Code 0 startup_k1921vk035.o(.text)
ADC_SEQ1_IRQHandler 0x00000263 Thumb Code 0 startup_k1921vk035.o(.text)
CAN0_IRQHandler 0x00000263 Thumb Code 0 startup_k1921vk035.o(.text)
CAN10_IRQHandler 0x00000263 Thumb Code 0 startup_k1921vk035.o(.text)
CAN11_IRQHandler 0x00000263 Thumb Code 0 startup_k1921vk035.o(.text)
CAN12_IRQHandler 0x00000263 Thumb Code 0 startup_k1921vk035.o(.text)
CAN13_IRQHandler 0x00000263 Thumb Code 0 startup_k1921vk035.o(.text)
CAN14_IRQHandler 0x00000263 Thumb Code 0 startup_k1921vk035.o(.text)
CAN15_IRQHandler 0x00000263 Thumb Code 0 startup_k1921vk035.o(.text)
CAN1_IRQHandler 0x00000263 Thumb Code 0 startup_k1921vk035.o(.text)
CAN2_IRQHandler 0x00000263 Thumb Code 0 startup_k1921vk035.o(.text)
CAN3_IRQHandler 0x00000263 Thumb Code 0 startup_k1921vk035.o(.text)
CAN4_IRQHandler 0x00000263 Thumb Code 0 startup_k1921vk035.o(.text)
CAN5_IRQHandler 0x00000263 Thumb Code 0 startup_k1921vk035.o(.text)
CAN6_IRQHandler 0x00000263 Thumb Code 0 startup_k1921vk035.o(.text)
CAN7_IRQHandler 0x00000263 Thumb Code 0 startup_k1921vk035.o(.text)
CAN8_IRQHandler 0x00000263 Thumb Code 0 startup_k1921vk035.o(.text)
CAN9_IRQHandler 0x00000263 Thumb Code 0 startup_k1921vk035.o(.text)
DMA_CH0_IRQHandler 0x00000263 Thumb Code 0 startup_k1921vk035.o(.text)
DMA_CH10_IRQHandler 0x00000263 Thumb Code 0 startup_k1921vk035.o(.text)
DMA_CH11_IRQHandler 0x00000263 Thumb Code 0 startup_k1921vk035.o(.text)
DMA_CH12_IRQHandler 0x00000263 Thumb Code 0 startup_k1921vk035.o(.text)
DMA_CH13_IRQHandler 0x00000263 Thumb Code 0 startup_k1921vk035.o(.text)
DMA_CH14_IRQHandler 0x00000263 Thumb Code 0 startup_k1921vk035.o(.text)
DMA_CH15_IRQHandler 0x00000263 Thumb Code 0 startup_k1921vk035.o(.text)
DMA_CH1_IRQHandler 0x00000263 Thumb Code 0 startup_k1921vk035.o(.text)
DMA_CH2_IRQHandler 0x00000263 Thumb Code 0 startup_k1921vk035.o(.text)
DMA_CH3_IRQHandler 0x00000263 Thumb Code 0 startup_k1921vk035.o(.text)
DMA_CH4_IRQHandler 0x00000263 Thumb Code 0 startup_k1921vk035.o(.text)
DMA_CH5_IRQHandler 0x00000263 Thumb Code 0 startup_k1921vk035.o(.text)
DMA_CH6_IRQHandler 0x00000263 Thumb Code 0 startup_k1921vk035.o(.text)
DMA_CH7_IRQHandler 0x00000263 Thumb Code 0 startup_k1921vk035.o(.text)
DMA_CH8_IRQHandler 0x00000263 Thumb Code 0 startup_k1921vk035.o(.text)
DMA_CH9_IRQHandler 0x00000263 Thumb Code 0 startup_k1921vk035.o(.text)
ECAP0_IRQHandler 0x00000263 Thumb Code 0 startup_k1921vk035.o(.text)
ECAP1_IRQHandler 0x00000263 Thumb Code 0 startup_k1921vk035.o(.text)
ECAP2_IRQHandler 0x00000263 Thumb Code 0 startup_k1921vk035.o(.text)
FPU_IRQHandler 0x00000263 Thumb Code 0 startup_k1921vk035.o(.text)
GPIOA_IRQHandler 0x00000263 Thumb Code 0 startup_k1921vk035.o(.text)
GPIOB_IRQHandler 0x00000263 Thumb Code 0 startup_k1921vk035.o(.text)
I2C_IRQHandler 0x00000263 Thumb Code 0 startup_k1921vk035.o(.text)
MFLASH_IRQHandler 0x00000263 Thumb Code 0 startup_k1921vk035.o(.text)
PWM0_HD_IRQHandler 0x00000263 Thumb Code 0 startup_k1921vk035.o(.text)
PWM0_IRQHandler 0x00000263 Thumb Code 0 startup_k1921vk035.o(.text)
PWM0_TZ_IRQHandler 0x00000263 Thumb Code 0 startup_k1921vk035.o(.text)
PWM1_HD_IRQHandler 0x00000263 Thumb Code 0 startup_k1921vk035.o(.text)
PWM1_IRQHandler 0x00000263 Thumb Code 0 startup_k1921vk035.o(.text)
PWM1_TZ_IRQHandler 0x00000263 Thumb Code 0 startup_k1921vk035.o(.text)
PWM2_HD_IRQHandler 0x00000263 Thumb Code 0 startup_k1921vk035.o(.text)
PWM2_IRQHandler 0x00000263 Thumb Code 0 startup_k1921vk035.o(.text)
PWM2_TZ_IRQHandler 0x00000263 Thumb Code 0 startup_k1921vk035.o(.text)
QEP_IRQHandler 0x00000263 Thumb Code 0 startup_k1921vk035.o(.text)
RCU_IRQHandler 0x00000263 Thumb Code 0 startup_k1921vk035.o(.text)
SPI_RO_RT_IRQHandler 0x00000263 Thumb Code 0 startup_k1921vk035.o(.text)
SPI_RX_IRQHandler 0x00000263 Thumb Code 0 startup_k1921vk035.o(.text)
SPI_TX_IRQHandler 0x00000263 Thumb Code 0 startup_k1921vk035.o(.text)
TMR0_IRQHandler 0x00000263 Thumb Code 0 startup_k1921vk035.o(.text)
TMR1_IRQHandler 0x00000263 Thumb Code 0 startup_k1921vk035.o(.text)
TMR2_IRQHandler 0x00000263 Thumb Code 0 startup_k1921vk035.o(.text)
TMR3_IRQHandler 0x00000263 Thumb Code 0 startup_k1921vk035.o(.text)
UART0_E_RT_IRQHandler 0x00000263 Thumb Code 0 startup_k1921vk035.o(.text)
UART0_RX_IRQHandler 0x00000263 Thumb Code 0 startup_k1921vk035.o(.text)
UART0_TD_IRQHandler 0x00000263 Thumb Code 0 startup_k1921vk035.o(.text)
UART0_TX_IRQHandler 0x00000263 Thumb Code 0 startup_k1921vk035.o(.text)
UART1_E_RT_IRQHandler 0x00000263 Thumb Code 0 startup_k1921vk035.o(.text)
UART1_RX_IRQHandler 0x00000263 Thumb Code 0 startup_k1921vk035.o(.text)
UART1_TD_IRQHandler 0x00000263 Thumb Code 0 startup_k1921vk035.o(.text)
UART1_TX_IRQHandler 0x00000263 Thumb Code 0 startup_k1921vk035.o(.text)
WDT_IRQHandler 0x00000263 Thumb Code 0 startup_k1921vk035.o(.text)
__user_initial_stackheap 0x00000265 Thumb Code 0 startup_k1921vk035.o(.text)
__I$use$semihosting 0x00000289 Thumb Code 0 use_no_semi.o(.text)
__use_no_semihosting_swi 0x00000289 Thumb Code 2 use_no_semi.o(.text)
__2printf 0x0000028d Thumb Code 20 noretval__2printf.o(.text)
_printf_pre_padding 0x000002a5 Thumb Code 44 _printf_pad.o(.text)
_printf_post_padding 0x000002d1 Thumb Code 34 _printf_pad.o(.text)
_printf_str 0x000002f3 Thumb Code 82 _printf_str.o(.text)
_printf_int_dec 0x00000345 Thumb Code 104 _printf_dec.o(.text)
__printf 0x000003bd Thumb Code 270 __printf_wp.o(.text)
__use_two_region_memory 0x000004cb Thumb Code 2 heapauxi.o(.text)
__rt_heap_escrow$2region 0x000004cd Thumb Code 2 heapauxi.o(.text)
__rt_heap_expand$2region 0x000004cf Thumb Code 2 heapauxi.o(.text)
_printf_int_common 0x000004d1 Thumb Code 178 _printf_intcommon.o(.text)
_printf_cs_common 0x00000583 Thumb Code 20 _printf_char.o(.text)
_printf_char 0x00000597 Thumb Code 16 _printf_char.o(.text)
_printf_string 0x000005a7 Thumb Code 8 _printf_char.o(.text)
_printf_char_file 0x000005b1 Thumb Code 32 _printf_char_file.o(.text)
_printf_char_common 0x000005df Thumb Code 32 _printf_char_common.o(.text)
__user_setup_stackheap 0x00000605 Thumb Code 74 sys_stackheap_outer.o(.text)
exit 0x0000064f Thumb Code 18 exit.o(.text)
__user_libspace 0x00000661 Thumb Code 8 libspace.o(.text)
__user_perproc_libspace 0x00000661 Thumb Code 0 libspace.o(.text)
__user_perthread_libspace 0x00000661 Thumb Code 0 libspace.o(.text)
BusFault_Handler 0x00000669 Thumb Code 2 vk035_it.o(i.BusFault_Handler)
ClkInit 0x0000066d Thumb Code 106 system_k1921vk035.o(i.ClkInit)
DebugMon_Handler 0x000006e1 Thumb Code 2 vk035_it.o(i.DebugMon_Handler)
Error_Handler 0x000006e3 Thumb Code 4 main.o(i.Error_Handler)
FPUInit 0x000006e9 Thumb Code 18 system_k1921vk035.o(i.FPUInit)
GPIO_DeInit 0x00000759 Thumb Code 54 plib035_gpio.o(i.GPIO_DeInit)
GPIO_DriveModeConfig 0x00000839 Thumb Code 80 plib035_gpio.o(i.GPIO_DriveModeConfig)
GPIO_InModeConfig 0x000008b5 Thumb Code 76 plib035_gpio.o(i.GPIO_InModeConfig)
GPIO_Init 0x0000092d Thumb Code 80 plib035_gpio.o(i.GPIO_Init)
GPIO_OutModeConfig 0x00000a01 Thumb Code 76 plib035_gpio.o(i.GPIO_OutModeConfig)
GPIO_PullModeConfig 0x00000a79 Thumb Code 76 plib035_gpio.o(i.GPIO_PullModeConfig)
HardFault_Handler 0x00000af1 Thumb Code 2 vk035_it.o(i.HardFault_Handler)
MemManage_Handler 0x00000b3d Thumb Code 2 vk035_it.o(i.MemManage_Handler)
NMI_Handler 0x00000b3f Thumb Code 2 vk035_it.o(i.NMI_Handler)
PendSV_Handler 0x00000b41 Thumb Code 2 vk035_it.o(i.PendSV_Handler)
RCU_PLL_AutoConfig 0x00000c39 Thumb Code 304 plib035_rcu.o(i.RCU_PLL_AutoConfig)
RCU_PLL_Init 0x00000d99 Thumb Code 212 plib035_rcu.o(i.RCU_PLL_Init)
RCU_PLL_StructInit 0x00000ee9 Thumb Code 16 plib035_rcu.o(i.RCU_PLL_StructInit)
RCU_SysClkChangeCmd 0x00000ef9 Thumb Code 104 plib035_rcu.o(i.RCU_SysClkChangeCmd)
SVC_Handler 0x00000fb1 Thumb Code 2 vk035_it.o(i.SVC_Handler)
SysTick_Handler 0x00000fb5 Thumb Code 10 vk035_it.o(i.SysTick_Handler)
SystemCoreClockUpdate 0x00000fc5 Thumb Code 96 system_k1921vk035.o(i.SystemCoreClockUpdate)
SystemInit 0x00001035 Thumb Code 14 system_k1921vk035.o(i.SystemInit)
UsageFault_Handler 0x00001043 Thumb Code 2 vk035_it.o(i.UsageFault_Handler)
_is_digit 0x00001045 Thumb Code 14 __printf_wp.o(i._is_digit)
_sys_exit 0x00001053 Thumb Code 2 retarget.o(i._sys_exit)
assert_failed 0x00001055 Thumb Code 12 main.o(i.assert_failed)
ferror 0x00001085 Thumb Code 6 retarget.o(i.ferror)
fputc 0x0000108b Thumb Code 4 retarget.o(i.fputc)
gpio_init 0x00001091 Thumb Code 100 gpio.o(i.gpio_init)
main 0x00001105 Thumb Code 6 main.o(i.main)
periph_init 0x0000110d Thumb Code 54 main.o(i.periph_init)
retarget_init 0x0000117d Thumb Code 166 retarget_conf.o(i.retarget_init)
retarget_put_char 0x0000123d Thumb Code 14 retarget_conf.o(i.retarget_put_char)
sysclk_init 0x00001251 Thumb Code 80 rcu.o(i.sysclk_init)
__aeabi_ddiv 0x000012b9 Thumb Code 0 ddiv.o(x$fpl$ddiv)
_ddiv 0x000012b9 Thumb Code 552 ddiv.o(x$fpl$ddiv)
__aeabi_d2iz 0x00001569 Thumb Code 0 dfix.o(x$fpl$dfix)
_dfix 0x00001569 Thumb Code 94 dfix.o(x$fpl$dfix)
__aeabi_ui2d 0x000015c7 Thumb Code 0 dflt_clz.o(x$fpl$dfltu)
_dfltu 0x000015c7 Thumb Code 38 dflt_clz.o(x$fpl$dfltu)
__fpl_dnaninf 0x000015ed Thumb Code 156 dnaninf.o(x$fpl$dnaninf)
__fpl_dretinf 0x00001689 Thumb Code 12 dretinf.o(x$fpl$dretinf)
_fp_init 0x00001695 Thumb Code 10 fpinit.o(x$fpl$fpinit)
__fplib_config_fpu_vfp 0x0000169d Thumb Code 0 fpinit.o(x$fpl$fpinit)
__fplib_config_pureend_doubles 0x0000169d Thumb Code 0 fpinit.o(x$fpl$fpinit)
__I$use$fp 0x0000169e Number 0 usenofp.o(x$fpl$usenofp)
Region$$Table$$Base 0x000016a0 Number 0 anon$$obj.o(Region$$Table)
Region$$Table$$Limit 0x000016c0 Number 0 anon$$obj.o(Region$$Table)
SystemCoreClock 0x20000000 Data 4 system_k1921vk035.o(.data)
uwTick 0x20000004 Data 4 system_k1921vk035.o(.data)
__stdout 0x2000018c Data 4 retarget.o(.data)
__libspace_start 0x20000190 Data 96 libspace.o(.bss)
__temporary_stack_top$libspace 0x200001f0 Data 0 libspace.o(.bss)
==============================================================================
Memory Map of the image
Image Entry point : 0x00000249
Load Region LR_1 (Base: 0x00000000, Size: 0x00001850, Max: 0xffffffff, ABSOLUTE, COMPRESSED[0x000016e4])
Execution Region ER_RO (Exec base: 0x00000000, Load base: 0x00000000, Size: 0x000016c0, Max: 0xffffffff, ABSOLUTE)
Exec Addr Load Addr Size Type Attr Idx E Section Name Object
0x00000000 0x00000000 0x00000158 Data RO 77 RESET startup_k1921vk035.o
0x00000158 0x00000158 0x00000008 Code RO 1417 * !!!main c_w.l(__main.o)
0x00000160 0x00000160 0x00000034 Code RO 1602 !!!scatter c_w.l(__scatter.o)
0x00000194 0x00000194 0x0000005a Code RO 1600 !!dczerorl2 c_w.l(__dczerorl2.o)
0x000001ee 0x000001ee 0x00000002 PAD
0x000001f0 0x000001f0 0x0000001c Code RO 1604 !!handler_zi c_w.l(__scatter_zi.o)
0x0000020c 0x0000020c 0x00000000 Code RO 1414 .ARM.Collect$$_printf_percent$$00000000 c_w.l(_printf_percent.o)
0x0000020c 0x0000020c 0x00000006 Code RO 1413 .ARM.Collect$$_printf_percent$$00000009 c_w.l(_printf_d.o)
0x00000212 0x00000212 0x00000006 Code RO 1412 .ARM.Collect$$_printf_percent$$00000014 c_w.l(_printf_s.o)
0x00000218 0x00000218 0x00000004 Code RO 1440 .ARM.Collect$$_printf_percent$$00000017 c_w.l(_printf_percent_end.o)
0x0000021c 0x0000021c 0x00000002 Code RO 1474 .ARM.Collect$$libinit$$00000000 c_w.l(libinit.o)
0x0000021e 0x0000021e 0x00000004 Code RO 1480 .ARM.Collect$$libinit$$00000001 c_w.l(libinit2.o)
0x00000222 0x00000222 0x00000000 Code RO 1483 .ARM.Collect$$libinit$$00000004 c_w.l(libinit2.o)
0x00000222 0x00000222 0x00000000 Code RO 1486 .ARM.Collect$$libinit$$0000000A c_w.l(libinit2.o)
0x00000222 0x00000222 0x00000000 Code RO 1488 .ARM.Collect$$libinit$$0000000C c_w.l(libinit2.o)
0x00000222 0x00000222 0x00000000 Code RO 1490 .ARM.Collect$$libinit$$0000000E c_w.l(libinit2.o)
0x00000222 0x00000222 0x00000000 Code RO 1493 .ARM.Collect$$libinit$$00000011 c_w.l(libinit2.o)
0x00000222 0x00000222 0x00000000 Code RO 1495 .ARM.Collect$$libinit$$00000013 c_w.l(libinit2.o)
0x00000222 0x00000222 0x00000000 Code RO 1497 .ARM.Collect$$libinit$$00000015 c_w.l(libinit2.o)
0x00000222 0x00000222 0x00000000 Code RO 1499 .ARM.Collect$$libinit$$00000017 c_w.l(libinit2.o)
0x00000222 0x00000222 0x00000000 Code RO 1501 .ARM.Collect$$libinit$$00000019 c_w.l(libinit2.o)
0x00000222 0x00000222 0x00000000 Code RO 1503 .ARM.Collect$$libinit$$0000001B c_w.l(libinit2.o)
0x00000222 0x00000222 0x00000000 Code RO 1505 .ARM.Collect$$libinit$$0000001D c_w.l(libinit2.o)
0x00000222 0x00000222 0x00000000 Code RO 1507 .ARM.Collect$$libinit$$0000001F c_w.l(libinit2.o)
0x00000222 0x00000222 0x00000000 Code RO 1509 .ARM.Collect$$libinit$$00000021 c_w.l(libinit2.o)
0x00000222 0x00000222 0x00000000 Code RO 1511 .ARM.Collect$$libinit$$00000023 c_w.l(libinit2.o)
0x00000222 0x00000222 0x00000000 Code RO 1513 .ARM.Collect$$libinit$$00000025 c_w.l(libinit2.o)
0x00000222 0x00000222 0x00000000 Code RO 1517 .ARM.Collect$$libinit$$0000002C c_w.l(libinit2.o)
0x00000222 0x00000222 0x00000000 Code RO 1519 .ARM.Collect$$libinit$$0000002E c_w.l(libinit2.o)
0x00000222 0x00000222 0x00000000 Code RO 1521 .ARM.Collect$$libinit$$00000030 c_w.l(libinit2.o)
0x00000222 0x00000222 0x00000000 Code RO 1523 .ARM.Collect$$libinit$$00000032 c_w.l(libinit2.o)
0x00000222 0x00000222 0x00000002 Code RO 1524 .ARM.Collect$$libinit$$00000033 c_w.l(libinit2.o)
0x00000224 0x00000224 0x00000002 Code RO 1542 .ARM.Collect$$libshutdown$$00000000 c_w.l(libshutdown.o)
0x00000226 0x00000226 0x00000000 Code RO 1552 .ARM.Collect$$libshutdown$$00000002 c_w.l(libshutdown2.o)
0x00000226 0x00000226 0x00000000 Code RO 1554 .ARM.Collect$$libshutdown$$00000004 c_w.l(libshutdown2.o)
0x00000226 0x00000226 0x00000000 Code RO 1556 .ARM.Collect$$libshutdown$$00000006 c_w.l(libshutdown2.o)
0x00000226 0x00000226 0x00000000 Code RO 1559 .ARM.Collect$$libshutdown$$00000009 c_w.l(libshutdown2.o)
0x00000226 0x00000226 0x00000000 Code RO 1562 .ARM.Collect$$libshutdown$$0000000C c_w.l(libshutdown2.o)
0x00000226 0x00000226 0x00000000 Code RO 1564 .ARM.Collect$$libshutdown$$0000000E c_w.l(libshutdown2.o)
0x00000226 0x00000226 0x00000000 Code RO 1567 .ARM.Collect$$libshutdown$$00000011 c_w.l(libshutdown2.o)
0x00000226 0x00000226 0x00000002 Code RO 1568 .ARM.Collect$$libshutdown$$00000012 c_w.l(libshutdown2.o)
0x00000228 0x00000228 0x00000000 Code RO 1433 .ARM.Collect$$rtentry$$00000000 c_w.l(__rtentry.o)
0x00000228 0x00000228 0x00000000 Code RO 1447 .ARM.Collect$$rtentry$$00000002 c_w.l(__rtentry2.o)
0x00000228 0x00000228 0x00000006 Code RO 1459 .ARM.Collect$$rtentry$$00000004 c_w.l(__rtentry4.o)
0x0000022e 0x0000022e 0x00000000 Code RO 1449 .ARM.Collect$$rtentry$$00000009 c_w.l(__rtentry2.o)
0x0000022e 0x0000022e 0x00000004 Code RO 1450 .ARM.Collect$$rtentry$$0000000A c_w.l(__rtentry2.o)
0x00000232 0x00000232 0x00000000 Code RO 1452 .ARM.Collect$$rtentry$$0000000C c_w.l(__rtentry2.o)
0x00000232 0x00000232 0x00000008 Code RO 1453 .ARM.Collect$$rtentry$$0000000D c_w.l(__rtentry2.o)
0x0000023a 0x0000023a 0x00000002 Code RO 1478 .ARM.Collect$$rtexit$$00000000 c_w.l(rtexit.o)
0x0000023c 0x0000023c 0x00000000 Code RO 1526 .ARM.Collect$$rtexit$$00000002 c_w.l(rtexit2.o)
0x0000023c 0x0000023c 0x00000004 Code RO 1527 .ARM.Collect$$rtexit$$00000003 c_w.l(rtexit2.o)
0x00000240 0x00000240 0x00000006 Code RO 1528 .ARM.Collect$$rtexit$$00000004 c_w.l(rtexit2.o)
0x00000246 0x00000246 0x00000002 PAD
0x00000248 0x00000248 0x00000040 Code RO 78 * .text startup_k1921vk035.o
0x00000288 0x00000288 0x00000002 Code RO 1378 .text c_w.l(use_no_semi.o)
0x0000028a 0x0000028a 0x00000002 PAD
0x0000028c 0x0000028c 0x00000018 Code RO 1382 .text c_w.l(noretval__2printf.o)
0x000002a4 0x000002a4 0x0000004e Code RO 1386 .text c_w.l(_printf_pad.o)
0x000002f2 0x000002f2 0x00000052 Code RO 1388 .text c_w.l(_printf_str.o)
0x00000344 0x00000344 0x00000078 Code RO 1390 .text c_w.l(_printf_dec.o)
0x000003bc 0x000003bc 0x0000010e Code RO 1400 .text c_w.l(__printf_wp.o)
0x000004ca 0x000004ca 0x00000006 Code RO 1415 .text c_w.l(heapauxi.o)
0x000004d0 0x000004d0 0x000000b2 Code RO 1434 .text c_w.l(_printf_intcommon.o)
0x00000582 0x00000582 0x0000002c Code RO 1436 .text c_w.l(_printf_char.o)
0x000005ae 0x000005ae 0x00000002 PAD
0x000005b0 0x000005b0 0x00000024 Code RO 1438 .text c_w.l(_printf_char_file.o)
0x000005d4 0x000005d4 0x00000030 Code RO 1461 .text c_w.l(_printf_char_common.o)
0x00000604 0x00000604 0x0000004a Code RO 1463 .text c_w.l(sys_stackheap_outer.o)
0x0000064e 0x0000064e 0x00000012 Code RO 1467 .text c_w.l(exit.o)
0x00000660 0x00000660 0x00000008 Code RO 1475 .text c_w.l(libspace.o)
0x00000668 0x00000668 0x00000002 Code RO 274 i.BusFault_Handler vk035_it.o
0x0000066a 0x0000066a 0x00000002 PAD
0x0000066c 0x0000066c 0x00000074 Code RO 4 i.ClkInit system_k1921vk035.o
0x000006e0 0x000006e0 0x00000002 Code RO 275 i.DebugMon_Handler vk035_it.o
0x000006e2 0x000006e2 0x00000004 Code RO 85 i.Error_Handler main.o
0x000006e6 0x000006e6 0x00000002 PAD
0x000006e8 0x000006e8 0x00000018 Code RO 5 i.FPUInit system_k1921vk035.o
0x00000700 0x00000700 0x00000058 Code RO 571 i.GPIO_AltFuncCmd plib035_gpio.o
0x00000758 0x00000758 0x00000064 Code RO 572 i.GPIO_DeInit plib035_gpio.o
0x000007bc 0x000007bc 0x0000007c Code RO 573 i.GPIO_DigitalCmd plib035_gpio.o
0x00000838 0x00000838 0x0000007c Code RO 574 i.GPIO_DriveModeConfig plib035_gpio.o
0x000008b4 0x000008b4 0x00000078 Code RO 575 i.GPIO_InModeConfig plib035_gpio.o
0x0000092c 0x0000092c 0x00000050 Code RO 576 i.GPIO_Init plib035_gpio.o
0x0000097c 0x0000097c 0x0000002c Code RO 577 i.GPIO_ModeConfig plib035_gpio.o
0x000009a8 0x000009a8 0x00000058 Code RO 578 i.GPIO_OutCmd plib035_gpio.o
0x00000a00 0x00000a00 0x00000078 Code RO 579 i.GPIO_OutModeConfig plib035_gpio.o
0x00000a78 0x00000a78 0x00000078 Code RO 580 i.GPIO_PullModeConfig plib035_gpio.o
0x00000af0 0x00000af0 0x00000002 Code RO 276 i.HardFault_Handler vk035_it.o
0x00000af2 0x00000af2 0x00000002 PAD
0x00000af4 0x00000af4 0x00000048 Code RO 977 i.MFLASH_LatencyConfig plib035_rcu.o
0x00000b3c 0x00000b3c 0x00000002 Code RO 277 i.MemManage_Handler vk035_it.o
0x00000b3e 0x00000b3e 0x00000002 Code RO 278 i.NMI_Handler vk035_it.o
0x00000b40 0x00000b40 0x00000002 Code RO 279 i.PendSV_Handler vk035_it.o
0x00000b42 0x00000b42 0x00000002 PAD
0x00000b44 0x00000b44 0x0000006c Code RO 582 i.RCU_AHBRstCmd plib035_gpio.o
0x00000bb0 0x00000bb0 0x00000088 Code RO 236 i.RCU_ClkOutConfig rcu.o
0x00000c38 0x00000c38 0x00000160 Code RO 989 i.RCU_PLL_AutoConfig plib035_rcu.o
0x00000d98 0x00000d98 0x00000100 Code RO 991 i.RCU_PLL_Init plib035_rcu.o
0x00000e98 0x00000e98 0x00000050 Code RO 992 i.RCU_PLL_OutCmd plib035_rcu.o
0x00000ee8 0x00000ee8 0x00000010 Code RO 993 i.RCU_PLL_StructInit plib035_rcu.o
0x00000ef8 0x00000ef8 0x000000b8 Code RO 994 i.RCU_SysClkChangeCmd plib035_rcu.o
0x00000fb0 0x00000fb0 0x00000002 Code RO 280 i.SVC_Handler vk035_it.o
0x00000fb2 0x00000fb2 0x00000002 PAD
0x00000fb4 0x00000fb4 0x00000010 Code RO 281 i.SysTick_Handler vk035_it.o
0x00000fc4 0x00000fc4 0x00000070 Code RO 6 i.SystemCoreClockUpdate system_k1921vk035.o
0x00001034 0x00001034 0x0000000e Code RO 7 i.SystemInit system_k1921vk035.o
0x00001042 0x00001042 0x00000002 Code RO 282 i.UsageFault_Handler vk035_it.o
0x00001044 0x00001044 0x0000000e Code RO 1402 i._is_digit c_w.l(__printf_wp.o)
0x00001052 0x00001052 0x00000002 Code RO 1278 i._sys_exit retarget.o
0x00001054 0x00001054 0x00000030 Code RO 86 i.assert_failed main.o
0x00001084 0x00001084 0x00000006 Code RO 1280 i.ferror retarget.o
0x0000108a 0x0000108a 0x00000004 Code RO 1282 i.fputc retarget.o
0x0000108e 0x0000108e 0x00000002 PAD
0x00001090 0x00001090 0x00000074 Code RO 204 i.gpio_init gpio.o
0x00001104 0x00001104 0x00000006 Code RO 87 i.main main.o
0x0000110a 0x0000110a 0x00000002 PAD
0x0000110c 0x0000110c 0x00000070 Code RO 88 i.periph_init main.o
0x0000117c 0x0000117c 0x000000c0 Code RO 1344 i.retarget_init retarget_conf.o
0x0000123c 0x0000123c 0x00000014 Code RO 1345 i.retarget_put_char retarget_conf.o
0x00001250 0x00001250 0x00000068 Code RO 237 i.sysclk_init rcu.o
0x000012b8 0x000012b8 0x000002b0 Code RO 1420 x$fpl$ddiv fz_wm.l(ddiv.o)
0x00001568 0x00001568 0x0000005e Code RO 1423 x$fpl$dfix fz_wm.l(dfix.o)
0x000015c6 0x000015c6 0x00000026 Code RO 1427 x$fpl$dfltu fz_wm.l(dflt_clz.o)
0x000015ec 0x000015ec 0x0000009c Code RO 1441 x$fpl$dnaninf fz_wm.l(dnaninf.o)
0x00001688 0x00001688 0x0000000c Code RO 1443 x$fpl$dretinf fz_wm.l(dretinf.o)
0x00001694 0x00001694 0x0000000a Code RO 1534 x$fpl$fpinit fz_wm.l(fpinit.o)
0x0000169e 0x0000169e 0x00000000 Code RO 1445 x$fpl$usenofp fz_wm.l(usenofp.o)
0x0000169e 0x0000169e 0x00000002 PAD
0x000016a0 0x000016a0 0x00000020 Data RO 1598 Region$$Table anon$$obj.o
Execution Region ER_RW (Exec base: 0x20000000, Load base: 0x000016c0, Size: 0x00000190, Max: 0xffffffff, ABSOLUTE, COMPRESSED[0x00000024])
Exec Addr Load Addr Size Type Attr Idx E Section Name Object
0x20000000 COMPRESSED 0x00000004 Data RW 8 .data system_k1921vk035.o
0x20000004 COMPRESSED 0x00000004 Data RW 9 .data system_k1921vk035.o
0x20000008 COMPRESSED 0x00000180 Data RW 205 .data gpio.o
0x20000188 COMPRESSED 0x00000001 Data RW 238 .data rcu.o
0x20000189 COMPRESSED 0x00000003 PAD
0x2000018c COMPRESSED 0x00000004 Data RW 1283 .data retarget.o
Execution Region ER_ZI (Exec base: 0x20000190, Load base: 0x000016e4, Size: 0x00000660, Max: 0xffffffff, ABSOLUTE)
Exec Addr Load Addr Size Type Attr Idx E Section Name Object
0x20000190 - 0x00000060 Zero RW 1476 .bss c_w.l(libspace.o)
0x200001f0 - 0x00000200 Zero RW 76 HEAP startup_k1921vk035.o
0x200003f0 - 0x00000400 Zero RW 75 STACK startup_k1921vk035.o
==============================================================================
Image component sizes
Code (inc. data) RO Data RW Data ZI Data Debug Object Name
116 16 0 384 0 10416 gpio.o
170 94 0 0 0 8505 main.o
1116 344 0 0 0 12904 plib035_gpio.o
960 262 0 0 0 15871 plib035_rcu.o
240 74 0 1 0 40297 rcu.o
12 0 0 4 0 3303 retarget.o
212 32 0 0 0 1204 retarget_conf.o
64 26 344 0 1536 892 startup_k1921vk035.o
266 32 0 8 0 197926 system_k1921vk035.o
32 6 0 0 0 3974 vk035_it.o
----------------------------------------------------------------------
3202 886 376 400 1536 295292 Object Totals
0 0 32 0 0 0 (incl. Generated)
14 0 0 3 0 0 (incl. Padding)
----------------------------------------------------------------------
Code (inc. data) RO Data RW Data ZI Data Debug Library Member Name
90 0 0 0 0 0 __dczerorl2.o
8 0 0 0 0 68 __main.o
284 0 0 0 0 156 __printf_wp.o
0 0 0 0 0 0 __rtentry.o
12 0 0 0 0 0 __rtentry2.o
6 0 0 0 0 0 __rtentry4.o
52 8 0 0 0 0 __scatter.o
28 0 0 0 0 0 __scatter_zi.o
44 0 0 0 0 108 _printf_char.o
48 6 0 0 0 96 _printf_char_common.o
36 4 0 0 0 80 _printf_char_file.o
6 0 0 0 0 0 _printf_d.o
120 16 0 0 0 92 _printf_dec.o
178 0 0 0 0 88 _printf_intcommon.o
78 0 0 0 0 108 _printf_pad.o
0 0 0 0 0 0 _printf_percent.o
4 0 0 0 0 0 _printf_percent_end.o
6 0 0 0 0 0 _printf_s.o
82 0 0 0 0 80 _printf_str.o
18 0 0 0 0 80 exit.o
6 0 0 0 0 152 heapauxi.o
2 0 0 0 0 0 libinit.o
6 0 0 0 0 0 libinit2.o
2 0 0 0 0 0 libshutdown.o
2 0 0 0 0 0 libshutdown2.o
8 4 0 0 96 68 libspace.o
24 4 0 0 0 84 noretval__2printf.o
2 0 0 0 0 0 rtexit.o
10 0 0 0 0 0 rtexit2.o
74 0 0 0 0 80 sys_stackheap_outer.o
2 0 0 0 0 68 use_no_semi.o
688 140 0 0 0 256 ddiv.o
94 4 0 0 0 140 dfix.o
38 0 0 0 0 116 dflt_clz.o
156 4 0 0 0 140 dnaninf.o
12 0 0 0 0 116 dretinf.o
10 0 0 0 0 116 fpinit.o
0 0 0 0 0 0 usenofp.o
----------------------------------------------------------------------
2246 190 0 0 96 2292 Library Totals
10 0 0 0 0 0 (incl. Padding)
----------------------------------------------------------------------
Code (inc. data) RO Data RW Data ZI Data Debug Library Name
1238 42 0 0 96 1408 c_w.l
998 148 0 0 0 884 fz_wm.l
----------------------------------------------------------------------
2246 190 0 0 96 2292 Library Totals
----------------------------------------------------------------------
==============================================================================
Code (inc. data) RO Data RW Data ZI Data Debug
5448 1076 376 400 1632 292960 Grand Totals
5448 1076 376 36 1632 292960 ELF Image Totals (compressed)
5448 1076 376 36 0 0 ROM Totals
==============================================================================
Total RO Size (Code + RO Data) 5824 ( 5.69kB)
Total RW Size (RW Data + ZI Data) 2032 ( 1.98kB)
Total ROM Size (Code + RO Data + RW Data) 5860 ( 5.72kB)
==============================================================================

588
MDK-ARM/Core/App/adc.c Normal file
View File

@@ -0,0 +1,588 @@
/**
******************************************************************************
* @file adc.c
* @author Разваляев Алексей
* @brief Драйвер ADC на основе PLIB035.
* Этот файл содержит:
* + Инициализацию ADC и аналогового модуля (AM)
* + Управление секвенсорами (SEQ0, SEQ1):
* - Инициализацию и конфигурацию секвенсоров
* - Запуск и остановку преобразований с буфером
* - Обработку прерываний секвенсоров
* - Установку callback-функций для событий:
* - завершение секвенсора
* - половина буфера
* - полный буфера
* - ошибка
* + Управление цифровыми компараторами (DC0-DC3):
* - Инициализацию и конфигурацию компараторов
* - Запуск и остановку компараторов
* - Обработку прерываний компараторов
* - Установку callback-функций для событий:
* - срабатывание компаратора
* - ошибка
* + Функции для работы с каналами ADC
* + Программный запуск преобразований
*
******************************************************************************
* @attention
*
* Использование этого драйвера предполагает наличие корректных настроек:
* - Определены конфигурационные структуры adc_seqx_config и adc_dcx_config
* в periph_config.h
* - Настроено тактирование ADC через RCU
* - Для использования прерываний - включены соответствующие NVIC IRQ
*
******************************************************************************
* @verbatim
==============================================================================
##### Как использовать этот драйвер #####
==============================================================================
-------------------------- Общие функции АЦП --------------------------------
1. Инициализация АЦП:
(+) adc_init_first() - обязательный вызов перед использованием АЦП
(+) Настраивает тактирование, GPIO и ожидает готовности аналогового модуля
2. Калибровка каналов:
(+) ADC_Channel_Calibr(&hadc, channel, OFFSET, GAIN) - калибровка смещения и усиления
(+) Формула калибровки: Dc = Dr * (4096+GAIN)/4096 + OFFSET
3. Чтение значений каналов:
(+) ADC_Channel_GetValue(&hadc, channel) - получение текущего значения канала
(+) Данные обновляются автоматически при работе секвенсоров
4. Инициализация GPIO:
(+) adc_gpio_init(hadc.ChannelEnable) - настраивает пины выбранных каналов
(+) Вызывается автоматически в adc_init_first()
------------------------ Секвенсоры (SEQ0, SEQ1) ----------------------------
1. Настройка в periph_config.h:
(+) Определите adc_seq0_config, adc_seq1_config
(+) Настройте ADC_ClockSource и ADC_ClockMHz для тактирования АЦП
(+) Определите adc_ch_config для включения нужных каналов
2. Инициализация секвенсоров:
(+) adc_seq_init(&hadc, ADC_SEQ_Num_0, &adc_seq0_config) - инициализация SEQ0
(+) Аналогично для SEQ1 при необходимости
3. Работа с секвенсорами:
(+) ADC_SEQ_Start(&hadc, ADC_SEQ_Num_0, buffer, buffer_size) - запуск с буфером
(+) ADC_SEQ_Stop(&hadc, ADC_SEQ_Num_0) - остановка секвенсора
(+) ADC_SEQ_Set_Callback(&hadc, ADC_SEQ_Num_0, тип, func) - установка обработчика
(+) ADC_SEQ_SoftwareStart() - программный запуск преобразования
4. Обработка прерываний секвенсоров:
(+) ADC_SEQ0_IRQHandler - вызвать adc_seq_irq_handler(&hadc, ADC_SEQ_Num_0)
(+) ADC_SEQ1_IRQHandler - вызвать adc_seq_irq_handler(&hadc, ADC_SEQ_Num_1)
------------------------ Цифровые компараторы (DC) --------------------------
==============================================================================
##### Особенности работы #####
==============================================================================
-------------------------- Общие особенности --------------------------------
- Частота ADC:
- Задается через ADC_ClockMHz в periph_config.h
- Автоматически настраивается делитель от источника тактирования
- Аналоговый модуль (AM):
- Требует времени для старта после включения (до 1 мс)
- adc_init_first() ожидает готовности AM с таймаутом 1 секунда
- При неудаче вызывает Error_Handler()
- Калибровка:
- OFFSET: смещение в диапазоне [-255, 255] квантов АЦП
- GAIN: коэффициент усиления в диапазоне [-255, 255] квантов АЦП (4096+GAIN)
- Калибровка применяется аппаратно для каждого канала отдельно
------------------------ Секвенсоры (SEQ0, SEQ1) ----------------------------
- Буферизация данных:
- Данные в буфере хранятся в формате [канал][время]
- При buffer_size=100 для 2 каналов буфер будет 200 элементов
- Буфер может быть кольцевым (BufferCircular=ENABLE)
- Прерывания секвенсоров:
- Генерируются после заданного количества рестартов (ITCount)
- ITCount=0 означает прерывание после каждого прохода секвенсора
- Данные автоматически читаются из FIFO в прерывании
- Работа с усреднением:
- Аппаратное усреднение измерения:
- 2, 4, 8, 16, 32 или 64 выборок (SEQ_Init.ReqAverage)
- Включается через SEQ_Init.ReqAverageEn
- Усредненные значения помещаются в FIFO как единый результат
- Аппаратное усреднение рестартов
- 2, 4, 8, 16, 32, 64, 128, 256 выборок (SER_Init.RestartCount + 1)
- Включается через SEQ_Init.RestartAverageEn
- Усредненные значения помещаются в FIFO как единый результат
- Таймер рестартов:
- Период в тиках ADC_ClockMHz/2 (драйвер автоматически делит на 2)
- Используется для периодического запуска секвенсора
- При RestartTimer=0 рестарт происходит немедленно
- Чтение FIFO:
- FIFO буфер на 32 элемента автоматически читается в прерывании
- Данные распределяются по каналам согласно последовательности в Req[0..3]
- При переполнении FIFO (>32 элементов до прерывания) возможна потеря данных
------------------------ Цифровые компараторы (DC) --------------------------
@endverbatim
******************************************************************************
*/
//-- Includes ------------------------------------------------------------------
#include "periph_config.h"
ADC_HandleTypeDef hadc; /*!< Хендл ADC */
//-- Private function prototypes -----------------------------------------------
static void __adc_seq_fifo_read(ADC_HandleTypeDef *hadc, ADC_SEQ_Num_TypeDef SEQ_Num);
static int __adc_seq_calc_fifo_load(ADC_HandleTypeDef *hadc, ADC_SEQ_Num_TypeDef SEQ_Num);
//-- Defines -------------------------------------------------------------------
//-- ADC Init functions --------------------------------------------------------
/**
* @brief Первичная инициализация ADC
* @details Настройка ADC и хендла: тактирования, прерывания
* и секвенсоры с компараторами
*/
void adc_init_first(void)
{
#if (USE_ADC_SEQ0==1) || (USE_ADC_SEQ1==1) || (USE_ADC_DC0==1) || (USE_ADC_DC1==1) || (USE_ADC_DC2==1) || (USE_ADC_DC3==1)
// Настройка тактирования
if(rcu_set_clock_adc(ADC_ClockSource, ADC_ClockMHz, ENABLE) != OK)
{
Error_Handler();
}
RCU_ADCRstCmd(ENABLE);
// Включаем аналоговый модуль
ADC_AM_Cmd(ENABLE);
// Настройка пинов для ADC
hadc.ChannelEnable = &adc_ch_config;
adc_gpio_init(hadc.ChannelEnable);
hadc.Instance = ADC;
#endif
#if (USE_ADC_SEQ0==1)
adc_seq_init(&hadc, ADC_SEQ_Num_0, &adc_seq0_config);
if(hadc.SEQ[ADC_SEQ_Num_0].Config->IT == ENABLE)
{
NVIC_EnableIRQ(ADC_SEQ0_IRQn);
}
#endif
#if (USE_ADC_SEQ1==1)
adc_seq_init(&hadc, ADC_SEQ_Num_1, &adc_seq1_config);
if(hadc.SEQ[ADC_SEQ_Num_1].Config->IT == ENABLE)
{
NVIC_EnableIRQ(ADC_SEQ1_IRQn);
}
#endif
#if (USE_ADC_SEQ0==1) || (USE_ADC_SEQ1==1) || (USE_ADC_DC0==1) || (USE_ADC_DC1==1) || (USE_ADC_DC2==1) || (USE_ADC_DC3==1)
uint32_t starttick = millis();
while (!ADC_AM_ReadyStatus()) {
if((millis() - starttick) > 1000)
Error_Handler();
}
#endif
}
/**
* @brief Записать калибровочные значения канала
* @param hadc указатель на хендл АЦП
* @param channel номер канала
* @param OFFSET Коэффициент корректировки смещения нуля АЦП в квантах [-255:255]
* @param GAIN Коэффициент корректировки усиления зн АЦП в квантах [-255:255]
* @retval значение ADC (0 если данные невалидны)
* @details Результат преобразования передается на схему коррекции, которая нивелирует
* ошибку усиления и смещения нуля и работа которой описывается формулой
* Dc = Dr * (4096+GAIN)/4096 + OFFSET
*/
OperationStatus ADC_Channel_Calibr(ADC_HandleTypeDef *hadc, ADC_CH_Num_TypeDef channel, int OFFSET, int GAIN)
{
if (!hadc || (int)channel >= ADC_CH_Total)
return ERROR;
ADC_CH_SetOffsetTrim(channel, OFFSET);
ADC_CH_SetGainTrim(channel, GAIN);
return OK;
}
/**
* @brief Получение текущего значения канала
* @param hadc указатель на хендл АЦП
* @param channel номер канала
* @retval значение ADC (0 если данные невалидны)
*/
uint16_t ADC_Channel_GetValue(ADC_HandleTypeDef *hadc, ADC_CH_Num_TypeDef channel)
{
if (!hadc || (int)channel >= ADC_CH_Total)
return 0;
return hadc->ChannelData[channel];
}
//-- ADC Sequencers API functions ----------------------------------------------
/**
* @brief Инициализация секвенсора АЦП
* @param hadc указатель на хендл АЦП
* @param SEQ_Num номер секвенсора
* @param NewConfig указатель на новую конфигурацию ADC, иначе используется та, что в структуре
* @retval OperationStatus OK - если всё хорошо, ERROR - если ошибка
*/
OperationStatus adc_seq_init(ADC_HandleTypeDef *hadc, ADC_SEQ_Num_TypeDef SEQ_Num, ADC_SEQ_ExtInit_TypeDef *NewConfig)
{
if(!hadc || !hadc->Instance)
return ERROR;
ADC_SEQ_HandleTypeDef *hseq = &hadc->SEQ[SEQ_Num];
if(NewConfig != NULL)
{
hseq->Config = NewConfig;
}
if(hseq->Config == NULL)
{
return ERROR;
}
ADC_SEQ_ExtInit_TypeDef *conf = hseq->Config;
if(conf->SEQ_Init.RestartTimer) // не значю почему но этот таймер работает в 2 раза медленее чем AdcClk
{
conf->SEQ_Init.RestartTimer = (conf->SEQ_Init.RestartTimer+1)/2-1; // поэтому дополнительно делим всё на два чтобы работало
}
if(__adc_seq_calc_fifo_load(hadc, SEQ_Num) < 0)
return ERROR;
ADC_SEQ_Init(SEQ_Num, &hseq->Config->SEQ_Init);
return OK;
}
/**
* @brief Установка коллбека секвенсора АЦП
* @param hadc указатель на хендл АЦП
* @param CallbackType Тип коллбека
* @param Callback Функция коллбека
* @retval void
*/
OperationStatus ADC_SEQ_Set_Callback(ADC_HandleTypeDef* hadc, ADC_SEQ_Num_TypeDef SEQ_Num, ADC_CallbackTypeDef CallbackType, void (*Callback)(void))
{
if (!hadc || !hadc->Instance || !hadc->SEQ[SEQ_Num].Config)
return ERROR;
ADC_SEQ_HandleTypeDef *hseq = &hadc->SEQ[SEQ_Num];
switch(CallbackType)
{
case ADC_Callback_SeqCplt:
hseq->Config->SEQCpltCallback = Callback;
break;
case ADC_Callback_Error:
hseq->Config->ErrorCallback = Callback;
break;
case ADC_Callback_BuffFull:
hseq->Config->BuffFullCallback = Callback;
break;
case ADC_Callback_BuffHalf:
hseq->Config->BuffFullCallback = Callback;
break;
default:
return ERROR;
}
return OK;
}
/**
* @brief Запуск секвенсора АЦП с буфером
* @param hadc указатель на хендл АЦП
* @param SEQ_Num номер секвенсора
* @param data_buffer указатель на буфер данных [ch][buffer_size] или NULL
* @param buffer_size размер буфера для каждого канала (0 если буфер не используется)
* @retval OperationStatus OK - если всё хорошо, ERROR - если ошибка
*/
OperationStatus ADC_SEQ_Start(ADC_HandleTypeDef *hadc,
ADC_SEQ_Num_TypeDef SEQ_Num,
uint16_t (*data_buffer)[],
uint32_t buffer_size)
{
if (!hadc || !hadc->Instance || !hadc->SEQ[SEQ_Num].Config)
return ERROR;
ADC_SEQ_HandleTypeDef *hseq = &hadc->SEQ[SEQ_Num];
ADC_SEQ_ExtInit_TypeDef *conf = hseq->Config;
// Сохраняем буферные параметры
hseq->data_buffer = (uint16_t *)data_buffer;
hseq->buffer_size = buffer_size;
hseq->buffer_count = 0; // Сбрасываем счетчик
// DMA > IT
if(conf->SEQ_Init.DMAEn == ENABLE)
{
conf->IT = DISABLE;
}
// Настраиваем прерывания если нужно
if (conf->IT == ENABLE)
{
uint32_t it_real_cnt = (uint32_t)(conf->ITCount+1)*(conf->SEQ_Init.ReqMax+1);
ADC_SEQ_ITConfig(SEQ_Num, it_real_cnt-1, DISABLE);
ADC_SEQ_ITCmd(SEQ_Num, ENABLE);
}
// Включаем секвенсор
ADC_SEQ_Cmd(SEQ_Num, ENABLE);
return OK;
}
/**
* @brief Остановка секвенсора АЦП
* @param hadc указатель на хендл АЦП
* @param SEQ_Num номер секвенсора
* @retval OperationStatus OK - если всё хорошо, ERROR - если ошибка
*/
OperationStatus ADC_SEQ_Stop(ADC_HandleTypeDef *hadc, ADC_SEQ_Num_TypeDef SEQ_Num)
{
if (!hadc || !hadc->Instance || !hadc->SEQ[SEQ_Num].Config)
return ERROR;
// ADC_SEQ_HandleTypeDef *hseq = &hadc->SEQ[SEQ_Num];
// Выключаем секвенсор
ADC_SEQ_Cmd(SEQ_Num, DISABLE);
// Выключаем прерывания
ADC_SEQ_ITCmd(SEQ_Num, DISABLE);
return OK;
}
/**
* @brief Программный запуск преобразования
*/
void ADC_SEQ_SoftwareStart(void)
{
ADC_SEQ_SwStartCmd();
}
/**
* @brief Обработчик прерываний секвенсора
* @param hadc указатель на хендл АЦП
* @param SEQ_Num номер секвенсора
* @retval void
*/
void adc_seq_irq_handler(ADC_HandleTypeDef *hadc, ADC_SEQ_Num_TypeDef SEQ_Num)
{
if (!hadc || !hadc->Instance || !hadc->SEQ[SEQ_Num].Config)
return;
// GPIO_SetBits(GPIOA, GPIO_Pin_7);
ADC_SEQ_HandleTypeDef *hseq = &hadc->SEQ[SEQ_Num];
ADC_SEQ_ExtInit_TypeDef *conf = hseq->Config;
// Проверяем флаг прерывания
if (ADC_SEQ_ITMaskedStatus(SEQ_Num) == SET)
{
// Очищаем флаг
ADC_SEQ_ITStatusClear(SEQ_Num);
__adc_seq_fifo_read(hadc, SEQ_Num);
}
// Обработка ошибок
if (ADC_SEQ_DMAErrorStatus(SEQ_Num) == SET)
{
ADC_SEQ_DMAErrorStatusClear(SEQ_Num);
if (conf->ErrorCallback)
{
conf->ErrorCallback();
}
}
// GPIO_ClearBits(GPIOA, GPIO_Pin_7);
}
/**
* @brief Внутренняя функция для расчета загрузки FIFO буфера
* @param hadc указатель на хендл АЦП
* @param SEQ_Num номер секвенсора
* @retval Кол-во данных FIFO буфера, или -1 если переполнение FIFO
* @details Рассчитывает сколько данных накопится в fifo буфере за одно прерывание
*/
static int __adc_seq_calc_fifo_load(ADC_HandleTypeDef *hadc, ADC_SEQ_Num_TypeDef SEQ_Num)
{
ADC_SEQ_HandleTypeDef *hseq = &hadc->SEQ[SEQ_Num];
ADC_SEQ_ExtInit_TypeDef *conf = hseq->Config;
int numb_of_data = 0;
uint32_t numb_of_req = ((uint32_t)conf->SEQ_Init.ReqMax+1);
uint32_t it_cnt = ((uint32_t)conf->ITCount+1);
if(conf->SEQ_Init.RestartAverageEn)
{
numb_of_data = numb_of_req;
}
else
{
numb_of_data = it_cnt*numb_of_req;
if(numb_of_data > 32) // Максимальный размер FIFO - 32 элемента, поэтому если слишком многшо данных за время работы перед прерыванием - то ошибка
return -1;
}
return numb_of_data;
}
/**
* @brief Внутренняя функция для чтения данных из FIFO
* @param hadc указатель на хендл АЦП
* @param SEQ_Num номер секвенсора
* @retval void
* @details Автоматически достает данные из FIFO и складывает их в заданный буфер
и в структуру hadc
*/
static void __adc_seq_fifo_read(ADC_HandleTypeDef *hadc, ADC_SEQ_Num_TypeDef SEQ_Num)
{
ADC_SEQ_HandleTypeDef *hseq = &hadc->SEQ[SEQ_Num];
_ADC_SEQ_TypeDef *SEQx = &hadc->Instance->SEQ[SEQ_Num];
ADC_SEQ_ExtInit_TypeDef *conf = hseq->Config;
// Последний запрос в секвенсоре
uint32_t last_request = SEQx->SRQCTL_bit.RQMAX;
uint32_t numb_of_request = last_request+1;
// Читаем все доступные данные из FIFO
uint32_t fifo_size = ADC_SEQ_GetFIFOLoad(SEQ_Num);
uint32_t req_num = ((int)ADC_SEQ_GetReqCurrent(SEQ_Num)-fifo_size)%(numb_of_request); // первая дата в fifo будет (следующий запрос - количество данных в буфере)
while (ADC_SEQ_GetFIFOLoad(SEQ_Num))
{
uint32_t data = ADC_SEQ_GetFIFOData(SEQ_Num);
if(ADC_SEQ_GetFIFOLoad(SEQ_Num) == 0)
{
__NOP();
}
if ((int)req_num < ADC_SEQ_Req_Total)
{
ADC_CH_Num_TypeDef channel = conf->SEQ_Init.Req[req_num];
if ((int)channel < ADC_CH_Total)
{
// 1. Обновляем текущее значение
hadc->ChannelData[channel] = (uint16_t)data;
// 2. Записываем в буфер если он есть
if (hseq->data_buffer &&
hseq->buffer_size > 0)
{
// Вычисляем offset для [ch][buffer_size]
uint32_t offset = req_num * hseq->buffer_size +
hseq->buffer_count;
hseq->data_buffer[offset] = (uint16_t)data;
}
}
// Если это последний канал в секвенсоре - увеличиваем счетчик буфера
if (req_num == last_request)
{
hseq->buffer_count++;
if(hseq->buffer_count == hseq->buffer_size/2)
{
if (conf->BuffHalfCallback)
{
conf->BuffHalfCallback();
}
}
if(hseq->buffer_count >= hseq->buffer_size)
{
// Кольцевой буфер
if(conf->BufferCircular)
hseq->buffer_count = 0;
else
ADC_SEQ_Stop(hadc, SEQ_Num);
if (conf->BuffFullCallback)
{
conf->BuffFullCallback();
}
}
}
}
// Переход на Следующий канал
req_num = (req_num+1)%numb_of_request;
}
// Вызываем коллбек пользователя
if (conf->SEQCpltCallback)
{
conf->SEQCpltCallback();
}
}
//-- ADC Digital Comparators API functions -------------------------------------
//-- ADC GPIO functions --------------------------------------------------------
/**
* @brief Инициализация GPIO для ADC
*/
void adc_gpio_init(ADC_ChannelEnableTypeDef *ChEn)
{
#if (USE_ADC_SEQ0==1) || (USE_ADC_SEQ1==1) || (USE_ADC_DC0==1) || (USE_ADC_DC1==1) || (USE_ADC_DC2==1) || (USE_ADC_DC3==1)
// Получаем структуру
GPIO_Init_TypeDef *ch0_config = gpio_get_init(ADC_Ch0_GPIO_Port, ADC_Ch0_Pin);
GPIO_Init_TypeDef *ch1_config = gpio_get_init(ADC_Ch1_GPIO_Port, ADC_Ch1_Pin);
GPIO_Init_TypeDef *ch2_config = gpio_get_init(ADC_Ch2_GPIO_Port, ADC_Ch2_Pin);
GPIO_Init_TypeDef *ch3_config = gpio_get_init(ADC_Ch3_GPIO_Port, ADC_Ch3_Pin);
if(ChEn->Ch0)
{
GPIO_StructInit(ch0_config);
ch0_config->Pin = ADC_Ch0_Pin;
GPIO_Init(ADC_Ch0_GPIO_Port, ch0_config);
}
if(ChEn->Ch1)
{
GPIO_StructInit(ch1_config);
ch1_config->Pin = ADC_Ch1_Pin;
GPIO_Init(ADC_Ch1_GPIO_Port, ch1_config);
}
if(ChEn->Ch2)
{
GPIO_StructInit(ch2_config);
ch2_config->Pin = ADC_Ch2_Pin;
GPIO_Init(ADC_Ch2_GPIO_Port, ch2_config);
}
if(ChEn->Ch3)
{
GPIO_StructInit(ch3_config);
ch3_config->Pin = ADC_Ch3_Pin;
GPIO_Init(ADC_Ch3_GPIO_Port, ch3_config);
}
#endif
}

162
MDK-ARM/Core/App/adc.h Normal file
View File

@@ -0,0 +1,162 @@
/**
******************************************************************************
* @file adc.h
* @author Разваляев Алексей
* @brief Драйвер ADC на основе PLIB035.
* Данный файл содержит определения типов, структур и прототипы функций
* для работы с ADC, включая:
* + Структуры и typedef для ADC
* + Прототипы функций для инициализации и API драйвера
*
******************************************************************************
*/
#ifndef __ADC_H
#define __ADC_H
//-- Includes ------------------------------------------------------------------
#include "plib035.h"
#include "retarget_conf.h"
//-- Defines -------------------------------------------------------------------
// Дефайны для пинов ADC
#define ADC_Ch0_Pin GPIO_Pin_0 /**< PB0 — ADC Channel 0 */
#define ADC_Ch0_GPIO_Port GPIOB /**< GPIO порт ADC Channel 0 */
#define ADC_Ch1_Pin GPIO_Pin_1 /**< PB1 — ADC Channel 1 */
#define ADC_Ch1_GPIO_Port GPIOB /**< GPIO порт ADC Channel 1 */
#define ADC_Ch2_Pin GPIO_Pin_2 /**< PB2 — ADC Channel 2 */
#define ADC_Ch2_GPIO_Port GPIOB /**< GPIO порт ADC Channel 2 */
#define ADC_Ch3_Pin GPIO_Pin_3 /**< PB3 — ADC Channel 3 */
#define ADC_Ch3_GPIO_Port GPIOB /**< GPIO порт ADC Channel 3 */
//-- Types ---------------------------------------------------------------------
/**
* @brief Типы callback-функций ADC
*/
typedef enum
{
ADC_Callback_SeqCplt, /*!< Преобразование секвенсора завершено */
ADC_Callback_BuffHalf, /*!< Буфер заполнен наполовину */
ADC_Callback_BuffFull, /*!< Буфер заполнен полностью */
ADC_Callback_DCTrig, /*!< Компаратор сработал */
ADC_Callback_Error, /*!< Ошибка */
}ADC_CallbackTypeDef;
/**
* @brief Типы callback-функций ADC
*/
typedef struct
{
unsigned Ch0:1; /*!< АЦП Канал 0 */
unsigned Ch1:1; /*!< АЦП Канал 1 */
unsigned Ch2:1; /*!< АЦП Канал 2 */
unsigned Ch3:1; /*!< АЦП Канал 3 */
}ADC_ChannelEnableTypeDef;
/**
* @brief Расширенная конфигурация секвенсора ADC
*/
typedef struct
{
ADC_SEQ_Init_TypeDef SEQ_Init; /* Стандартная конфигурация из PLIB */
FunctionalState IT; /*!< Включить прерывания */
uint8_t ITCount; /*!< Количество запросов для генерации прерывания */
FunctionalState BufferCircular; /*!< Циклический буфер */
void (*SEQCpltCallback)(void); /*!< Вызывается при завершении секвенсора */
void (*BuffHalfCallback)(void); /*!< Вызывается при заполнении половины буфера */
void (*BuffFullCallback)(void); /*!< Вызывается при заполнении буфера */
void (*ErrorCallback)(); /*!< Вызывается при ошибке */
}ADC_SEQ_ExtInit_TypeDef;
/**
* @brief Расширенная конфигурация компаратора ADC
*/
typedef struct
{
ADC_DC_Init_TypeDef DC_Init;
FunctionalState IT; /*!< Включить прерывания */
void (*DC_TrigCallback); /*!< Вызывается при срабатывании компаратора */
void (*ErrorCallback)(); /*!< Вызывается при ошибке */
}ADC_DC_ExtInit_TypeDef;
/**
* @brief Хендл секвенсора ADC
*/
typedef struct
{
ADC_SEQ_ExtInit_TypeDef *Config; /*!< Конфигурации секвенсоров */
uint16_t *data_buffer; /*!< Указатель на буфер данных [ch][buffer_size]*/
uint32_t buffer_size; /*!< Размер буфера (16-bit слова) */
uint32_t buffer_count; /*!< Счетчик текущего индекса буфера */
}ADC_SEQ_HandleTypeDef;
/**
* @brief Хендл компаратора ADC
*/
typedef struct
{
ADC_DC_ExtInit_TypeDef *Config; /*!< Конфигурации компараторов */
}ADC_DC_HandleTypeDef;
/**
* @brief Хендл ADC
*/
typedef struct
{
ADC_TypeDef *Instance; /*!< Регистры ADC */
ADC_SEQ_HandleTypeDef SEQ[ADC_SEQ_Total]; /*!< Хендл секвенсоров */
ADC_DC_ExtInit_TypeDef DC[ADC_DC_Total]; /*!< Хендл компараторов */
/* ===== Channels ===== */
ADC_ChannelEnableTypeDef *ChannelEnable; /*!< Какие каналы АЦП инициализировать (GPIO Pin) */
uint16_t ChannelData[ADC_CH_Total]; /*!< Текущие значения каналов */
}ADC_HandleTypeDef;
//-- External handles ----------------------------------------------------------
extern ADC_HandleTypeDef hadc;
//-- Exported functions prototypes ---------------------------------------------
/* Первичная инициализация ADC */
void adc_init_first(void);
void adc_gpio_init(ADC_ChannelEnableTypeDef *ChEn);
/* ADC API functions */
/* Записать калибровочные значения канала */
OperationStatus ADC_Channel_Calibr(ADC_HandleTypeDef *hadc, ADC_CH_Num_TypeDef channel, int OFFSET, int GAIN);
/* Получение текущего значения канала */
uint16_t ADC_Channel_GetValue(ADC_HandleTypeDef *hadc, ADC_CH_Num_TypeDef channel);
/* Sequencer Init functions*/
/* Инициализация секвенсора АЦП */
OperationStatus adc_seq_init(ADC_HandleTypeDef *hadc, ADC_SEQ_Num_TypeDef SEQ_Num, ADC_SEQ_ExtInit_TypeDef *NewConfig);
/* Обработчик прерываний секвенсора */
void adc_seq_irq_handler(ADC_HandleTypeDef *hadc, ADC_SEQ_Num_TypeDef SEQ_Num);
/* Sequencer API functions */
/* Установка коллбека секвенсора АЦП */
OperationStatus ADC_SEQ_Set_Callback(ADC_HandleTypeDef* hadc, ADC_SEQ_Num_TypeDef SEQ_Num, ADC_CallbackTypeDef CallbackType, void (*Callback)(void));
/* Запуск секвенсора АЦП с буфером */
OperationStatus ADC_SEQ_Start(ADC_HandleTypeDef *hadc, ADC_SEQ_Num_TypeDef SEQ_Num, uint16_t (*data_buffer)[], uint32_t buffer_size);
/* Остановка секвенсора АЦП */
OperationStatus ADC_SEQ_Stop(ADC_HandleTypeDef *hadc, ADC_SEQ_Num_TypeDef SEQ_Num);
/* Программный запуск преобразования секвенсора */
void ADC_SEQ_SoftwareStart(void);
/* Comparator API functions*/
void adc_dc_handler(ADC_HandleTypeDef *hadc, ADC_DC_Num_TypeDef DC_Num);
#endif /*__ADC_H*/

417
MDK-ARM/Core/App/gpio.c Normal file
View File

@@ -0,0 +1,417 @@
/**
******************************************************************************
* @file gpio.c
* @author Разваляев Алексей
* @brief Драйвер GPIO на основе PLIB035.
* Этот файл содержит:
* + Инициализацию портов GPIOA и GPIOB
* + Функции для работы со светодиодами:
* - Инициализацию структуры светодиода
* - Включение, выключение, переключение светодиода
* - Динамические режимы: моргание и плавное затухание
* + Функции для работы с кнопками:
* - Инициализацию структуры кнопки
* - Чтение состояния кнопки с защитой от дребезга
* + Утилитарные функции для получения конфигурации пинов
*
******************************************************************************
* @attention
*
* Использование этого драйвера предполагает наличие корректных настроек:
* - Определены массивы конфигурации gpioa_config и gpiob_config в periph_config.h
*
******************************************************************************
* @verbatim
==============================================================================
##### Как использовать этот драйвер #####
==============================================================================
1. Настройка периферии (periph_config.h):
(+) Определить массивы GPIO_Init_TypeDef для портов:
gpioa_config[32], gpiob_config[32]
(+) Настроить режим пинов: Input, Output, AltFunc или не используется (аналог режим)
2. Инициализация GPIO:
(+) gpio_init() — инициализация портов GPIOA и GPIOB
3. Работа со светодиодами:
(+) GPIO_LED_Init(&led, GPIOA, GPIO_PIN_5, SET) — инициализация светодиода
(+) GPIO_LED_On(&led) — включение светодиода
(+) GPIO_LED_Off(&led) — выключение светодиода
(+) GPIO_LED_Toggle(&led) — переключение светодиода
(+) GPIO_LED_Blink_Start(&led, 500) — запуск моргания (период 500 мс)
(+) GPIO_LED_Fading_Start(&led, 1000) — запуск плавного затухания (период 1 секунда)
(+) GPIO_LED_Dynamic_Handle(&led) — обработка динамических режимов в основном цикле
4. Работа с кнопками:
(+) GPIO_Switch_Init(&sw, GPIOB, GPIO_PIN_0, SET) — инициализация кнопки
(+) GPIO_Read_Switch(&sw) — чтение состояния кнопки с фильтрацией
5. Получение конфигурации пинов:
(+) gpio_get_init(порт, пин) - для периферии
==============================================================================
##### Особенности работы #####
==============================================================================
- Динамические режимы светодиодов:
- Моргание: простой on/off с заданным периодом
- Плавное затухание: квадратичное изменение яркости через ШИМ
- Требуют вызова GPIO_LED_Dynamic_Handle() в основном цикле
- Защита от дребезга:
- Фильтрация по времени (Sw_FilterDelay в миллисекундах)
- Неблокирующий алгоритм с отслеживанием состояния
- При изменении уровня запускается таймер, состояние обновляется после задержки
- ШИМ для плавного затухания:
- Программная генерация с 15 уровнями яркости (LED_PWM_TICKS)
- Полный цикл затухания-разтухания: 2 × LED_PWM_TICKS шагов
- Конфигурация пинов:
- Периферия может перезаписывать конфигурацию пинов (например, UART на AltFunc)
- gpio_get_init() позволяет периферии получить исходную конфигурацию
- После использования периферии можно восстановить исходные настройки
- Табличный подход:
- Каждый пин имеет свою строку в массиве конфигурации
- Позволяет централизованно управлять всеми пинами
- Упрощает отладку и модификацию конфигурации
@endverbatim
******************************************************************************
*/
//-- Includes ------------------------------------------------------------------
#include "periph_config.h"
//-- Defines -------------------------------------------------------------------
//-- GPIO init functions -------------------------------------------------------
void gpio_init(void)
{
RCU_AHBClkCmd(RCU_AHBClk_GPIOA, ENABLE);
RCU_AHBRstCmd(RCU_AHBRst_GPIOA, ENABLE);
RCU_AHBClkCmd(RCU_AHBClk_GPIOB, ENABLE);
RCU_AHBRstCmd(RCU_AHBRst_GPIOB, ENABLE);
/* Сброс пинов */
GPIO_DeInit(GPIOA);
GPIO_DeInit(GPIOB);
// Инициализация порта A
for (int i = 0; i < sizeof(gpioa_config) / sizeof(gpioa_config[0]); i++)
{
GPIO_Init(GPIOA, &gpioa_config[i]);
}
// Инициализация порта B
for (int i = 0; i < sizeof(gpiob_config) / sizeof(gpiob_config[0]); i++)
{
GPIO_Init(GPIOB, &gpiob_config[i]);
}
}
GPIO_Init_TypeDef *gpio_get_init(GPIO_TypeDef *GPIOx, uint32_t GPIO_Pin)
{
uint8_t pin_index = (31 - __CLZ(GPIO_Pin & -GPIO_Pin));
if (GPIOx == GPIOA)
{
// Проверяем границы массива
if (pin_index < sizeof(gpioa_config) / sizeof(gpioa_config[0]))
{
return &gpioa_config[pin_index];
}
}
else if (GPIOx == GPIOB)
{
// У тебя была опечатка: возвращал gpioa_config вместо gpiob_config
if (pin_index < sizeof(gpiob_config) / sizeof(gpiob_config[0]))
{
return &gpiob_config[pin_index];
}
}
return NULL;
}
//-- GPIO LED functions --------------------------------------------------------
/**
* @brief Инициализировать светодиод (структуру светодиода)
* @param led Указатель на структуру светодиода
* @param GPIOx Указатель на структуру порта для светодиода
* @param GPIO_PIN_X Пин для светодиода
* @param LED_ActiveLevel Состояния пина, при котором светодиод будет включен
*/
OperationStatus GPIO_LED_Init(GPIO_LEDTypeDef *led, GPIO_TypeDef *GPIOx, uint32_t GPIO_PIN_X, BitState LED_ActiveLevel)
{
if(!led || !GPIOx ||!GPIO_PIN_X)
return ERROR;
led->LED_Port = GPIOx;
led->LED_Pin = GPIO_PIN_X;
led->LED_ActiveLvl = LED_ActiveLevel;
GPIO_LED_Off(led);
return OK;
}
/**
* @brief Включить светодиод
* @param led Указатель на структуру светодиода
* @return Operation Status
*/
OperationStatus GPIO_LED_On(GPIO_LEDTypeDef *led)
{
if(!led || !led->LED_Port || !led->LED_Pin)
return ERROR;
led->state = LED_IS_ON;
GPIO_WriteBit(led->LED_Port, led->LED_Pin, led->LED_ActiveLvl);
return OK;
}
/**
* @brief Выключить светодиод
* @param led Указатель на структуру светодиода
* @return Operation Status
*/
OperationStatus GPIO_LED_Off(GPIO_LEDTypeDef *led)
{
if(!led || !led->LED_Port || !led->LED_Pin)
return ERROR;
led->state = LED_IS_OFF;
BitState offstate = (led->LED_ActiveLvl == SET)? CLEAR: SET;
GPIO_WriteBit(led->LED_Port, led->LED_Pin, offstate);
return OK;
}
/**
* @brief Переключить светодиод
* @param led Указатель на структуру светодиода
* @return Operation Status
*/
OperationStatus GPIO_LED_Toggle(GPIO_LEDTypeDef *led)
{
if(!led || !led->LED_Port || !led->LED_Pin)
return ERROR;
if(led->state == LED_IS_ON || led->state == LED_IS_OFF)
{
if(led->state == LED_IS_OFF)
led->state = LED_IS_ON;
else
led->state = LED_IS_OFF;
GPIO_ToggleBits(led->LED_Port, led->LED_Pin);
return OK;
}
else
return ERROR;
}
/**
* @brief Выставить светодиод по переменной
* @param led Указатель на структуру светодиода
* @param led_state Состояние светодиода
* @return Operation Status
*/
OperationStatus GPIO_LED_Set(GPIO_LEDTypeDef *led, uint8_t led_state)
{
if(!led || !led->LED_Port || !led->LED_Pin)
return ERROR;
if(led_state)
{
return GPIO_LED_On(led);
}
else
{
return GPIO_LED_Off(led);
}
}
/**
* @brief Активировать моргание светодиодом
* @param led Указатель на структуру светодиода
* @param period Период плавного моргания светодиода
* @return Operation Status
* @details Функция ставит режим моргания, который после управляется в @ref GPIO_LED_Dynamic_Handle
*/
OperationStatus GPIO_LED_Blink_Start(GPIO_LEDTypeDef *led, uint32_t period)
{
if(!led || !led->LED_Port || !led->LED_Pin)
return ERROR;
led->state = LED_IS_BLINKING;
led->LED_Period = period;
return OK;
}
/**
* @brief Активировать моргание светодиодом
* @param led Указатель на структуру светодиода
* @param period Период плавного моргания светодиода
* @return Operation Status
* @details Функция ставит режим моргания, который после управляется в @ref GPIO_LED_Dynamic_Handle
*/
OperationStatus GPIO_LED_Fading_Start(GPIO_LEDTypeDef *led, uint32_t period)
{
if(!led || !led->LED_Port || !led->LED_Pin)
return ERROR;
led->state = LED_IS_FADING;
led->LED_Period = period;
return OK;
}
//uint8_t LED_PWM_FADING_DUTYS[LED_PWM_TICKS] = {0 1 2 3 4 5 6 7 8 9 10 11 12 }
/**
* @brief Управление динамическими режимами свечения светодиода
* @param Указатель на структуру светодиода
* @details Функция моргает/плавно моргает светодиодом в неблокирующем режиме
* Т.е. функцию надо вызывать постоянно, чтобы она мониторила тики
* и в нужный момент переключала светодиод
*/
void GPIO_LED_Dynamic_Handle(GPIO_LEDTypeDef *led)
{
if(!led || !led->LED_Port || !led->LED_Pin)
return;
/* Режим моргания светодиода */
if(led->state == LED_IS_BLINKING)
{
uint32_t tickcurrent = millis();
/* Ожидание истечения периода моргания */
if((tickcurrent - led->tickprev) > led->LED_Period)
{
/* Моргание */
GPIO_ToggleBits(led->LED_Port, led->LED_Pin);
led->tickprev = tickcurrent;
}
}
/* Режим плавного моргания светодиода */
else if(led->state == LED_IS_FADING)
{
static unsigned direction = 0;
static int duty = 0;
uint32_t tickcurrent = millis();
/* Ожидание момента изменения яркости */
/* Период ШИМ 20 мс, поэтому менять яроксть надо 40 раз за период (туда обратно) */
if((tickcurrent - led->tickprev) > led->LED_Period/(LED_PWM_TICKS*2))
{
/* Формирование разтухания */
if(direction == 0)
{
if(++duty >= LED_PWM_TICKS)
{
direction = 1;
duty = LED_PWM_TICKS;
}
}
/* Формирование затухания */
else
{
if(--duty <= 0)
{
direction = 0;
duty = 0;
}
}
led->tickprev = tickcurrent;
}
/* Формирование ШИМ для изменения яркости */
int duty_crt = (duty*duty/LED_PWM_TICKS);
if(tickcurrent%LED_PWM_TICKS < duty_crt)
{
GPIO_WriteBit(led->LED_Port, led->LED_Pin, led->LED_ActiveLvl);
}
else
{
BitState offstate = (led->LED_ActiveLvl == SET)? CLEAR: SET;
GPIO_WriteBit(led->LED_Port, led->LED_Pin, offstate);
}
}
}
//-- GPIO Switch functions -----------------------------------------------------
/**
* @brief Инициализировать кнопку (структуру кнопки)
* @param sw Указатель на структуру кнопки
* @param GPIOx Указатель на структуру порта для кнопки
* @param GPIO_PIN_X Пин для кнопки
* @param SW_ActiveLevel Состояния пина, когда кнопка нажата
* @return Operation Status
*/
OperationStatus GPIO_Switch_Init(GPIO_SwitchTypeDef *sw, GPIO_TypeDef *GPIOx, uint32_t GPIO_PIN_X, BitState SW_ActiveLevel)
{
if(!sw || !GPIOx || !GPIO_PIN_X)
return ERROR;
sw->Sw_Port = GPIOx;
sw->Sw_Pin = GPIO_PIN_X;
sw->Sw_ActiveLvl = SW_ActiveLevel;
return OK;
}
/**
* @brief Считать состоянии кнопки
* @param sw Указатель на структуру кнопки
* @return 1 - если кнопка нажата,
* 0 - если отжата,
* -1 - если ошибка
* @details Функция включает в себя неблокирующую проверку на дребезг
* Т.е. функцию надо вызывать постоянно, чтобы она мониторила состояние кнопки
*/
int GPIO_Read_Switch(GPIO_SwitchTypeDef *sw)
{
if(!sw || !sw->Sw_Port || !sw->Sw_Pin)
return -1;
int current_level = (GPIO_ReadBit(sw->Sw_Port, sw->Sw_Pin) == sw->Sw_ActiveLvl);
if(sw->Sw_FilterDelay) // если включена защита от дребезга
{
// Если таймер не запущен и состояние изменилось - запускаем таймер
if(sw->tickprev == 0 && current_level != sw->Sw_CurrentState)
{
sw->tickprev = millis();
}
// Если таймер запущен
if(sw->tickprev != 0)
{
// Проверяем, прошел ли достаточный интервал для фильтрации
if((millis() - sw->tickprev) >= sw->Sw_FilterDelay)
{
// Обновляем состояние только если оно все еще отличается
if(current_level != sw->Sw_CurrentState)
{
sw->Sw_CurrentState = current_level;
}
// Останавливаем таймер в любом случае
sw->tickprev = 0;
}
}
}
else // если нет защиты от дребезга
{
sw->Sw_CurrentState = current_level;
}
return sw->Sw_CurrentState;
}

164
MDK-ARM/Core/App/gpio.h Normal file
View File

@@ -0,0 +1,164 @@
/**
******************************************************************************
* @file gpio.h
* @author Разваляев Алексей
* @brief Драйвер GPIO на основе PLIB035.
* Данный файл содержит определения типов, структур и прототипы функций
* для работы с UART, включая:
* + Структуры и typedef для работы с кнопками и светодиодами
* + Макросы для конфигурации режима пинов
* + Прототипы функций для инициализации и API драйвера
*
******************************************************************************
*/
#ifndef __GPIO_H
#define __GPIO_H
//-- Includes ------------------------------------------------------------------
#include "plib035.h"
#include "retarget_conf.h"
//-- Defines -------------------------------------------------------------------
// Дефайны для режима пина OutEnable, AltFuncEnable, DigitalEnable
#define GPIO_PinMode_Unused DISABLE, DISABLE, DISABLE
#define GPIO_PinMode_Input DISABLE, DISABLE, ENABLE
#define GPIO_PinMode_Output ENABLE, DISABLE, ENABLE
#define GPIO_PinMode_AltFunc DISABLE, ENABLE, ENABLE
#ifndef LED_PWM_TICKS
#define LED_PWM_TICKS 15 ///< Количество тиков в периоде ШИМ
#endif
//-- Types ---------------------------------------------------------------------
/**
* @brief Режимы работы светодиода
*/
typedef enum
{
LED_IS_OFF = 0, ///< Светодиод выключен
LED_IS_ON = 1, ///< Светодиод включен
LED_IS_BLINKING = 2, ///< Моргание светодиодом
LED_IS_FADING = 3, ///< Плавное моргание светодиодом
}GPIO_LEDStateTypeDef;
/**
* @brief Структура светодиода
*/
typedef struct
{
GPIO_LEDStateTypeDef state; ///< Текущий режим работы светодиода
GPIO_TypeDef *LED_Port; ///< GPIO порт ножки светодиода
uint32_t LED_Pin; ///< GPIO пин ножки светодиода
BitState LED_ActiveLvl; ///< Активный уровень ножки (при котором светодиод горит)
uint32_t LED_Period; ///< Период моргания светодиода
uint32_t tickprev;
}GPIO_LEDTypeDef;
/**
* @brief Структура кнопки
*/
typedef struct
{
GPIO_TypeDef *Sw_Port; ///< GPIO порт ножки кнопки
uint32_t Sw_Pin; ///< GPIO пин ножки кнопки
BitState Sw_ActiveLvl; ///< Активный уровень ножки (при котором кнопка нажата)
uint32_t Sw_CurrentState; ///< Текущее состояние кнопки
uint32_t Sw_FilterDelay; ///< Фильтр от дребезга (в мс)
uint32_t tickprev;
}GPIO_SwitchTypeDef;
//-- Exported functions prototypes ---------------------------------------------
/* Init functions */
void gpio_init(void);
GPIO_Init_TypeDef *gpio_get_init(GPIO_TypeDef *GPIOx, uint32_t GPIO_Pin);
/* API functions*/
/**
* @addtogroup GPIO_SWITCH Switch tools
* @brief Функции для работы с GPIO, как с кнопкой
* @par Пример использования:
@code
MX_GPIO_Init(); // инициализация пина аппаратная
// Инициализация кнопки на порте GPIOB, пин 0, активный уровень 1
GPIO_SwitchTypeDef sw1;
GPIO_Switch_Init(&sw1, GPIOB, GPIO_PIN_0, 1); // или дефайн SW_ON/SW_OFF
// Считываем состояние кнопки
if(GPIO_Read_Switch(&sw1))
{
// Кнопка нажата
LED_ON();
}
else
{
// Кнопка отжата
LED_OFF();
}
@endcode
* @{
*/
/* Инициализировать кнопку (структуру кнопки) */
OperationStatus GPIO_Switch_Init(GPIO_SwitchTypeDef *sw, GPIO_TypeDef *GPIOx, uint32_t GPIO_PIN_X, BitState SW_On_State);
/* Считать состоянии кнопки запуска */
int GPIO_Read_Switch(GPIO_SwitchTypeDef *swstart);
/** GPIO_SWITCH
* @}
*/
/**
* @addtogroup GPIO_LEDS LED tools
* @brief Функции для работы с GPIO, для управления светодиодом
* @par Пример использования:
@code
// Инициализация светодиода на порте GPIOA, пин 5, активный уровень 0
GPIO_LEDTypeDef led;
GPIO_LED_Init(&led, GPIOA, GPIO_PIN_5, 0); // или дефайн LED_ON/LED_OFF
// Включение светодиода
GPIO_LED_On(&led);
// Запуск моргания
GPIO_LED_Blink_Start(&led, 500); // Период 500 мс
// В основном цикле
while (1) {
GPIO_LED_Dynamic_Handle(&led);
}
@endcode
* @{
*/
/* Инициализировать светодиод (структуру светодиода) */
OperationStatus GPIO_LED_Init(GPIO_LEDTypeDef *led, GPIO_TypeDef *GPIOx, uint32_t GPIO_PIN_X, BitState LED_On_State);
/* Включить светодиод */
OperationStatus GPIO_LED_On (GPIO_LEDTypeDef *led);
/* Выключить светодиод */
OperationStatus GPIO_LED_Off (GPIO_LEDTypeDef *led);
/* Переключить светодиод */
OperationStatus GPIO_LED_Toggle(GPIO_LEDTypeDef *led);
/* Выставить светодиод по переменной */
OperationStatus GPIO_LED_Set (GPIO_LEDTypeDef *led, uint8_t led_state);
/* Активировать моргание светодиодом */
OperationStatus GPIO_LED_Blink_Start (GPIO_LEDTypeDef *led, uint32_t period);
/* Активировать моргание светодиодом */
OperationStatus GPIO_LED_Fading_Start(GPIO_LEDTypeDef *led, uint32_t period);
/* Управление динамическими режимами свечения светодиода */
void GPIO_LED_Dynamic_Handle(GPIO_LEDTypeDef *led);
/** GPIO_LEDS
* @}
*/
#endif /*__GPIO_H*/

971
MDK-ARM/Core/App/i2c.c Normal file
View File

@@ -0,0 +1,971 @@
/**
******************************************************************************
* @file i2c.c
* @author Разваляев Алексей
* @brief Драйвер I2C на основе PLIB035.
* Этот файл содержит:
* + Инициализацию I2C
* + Функции для работы в режиме мастера (блокирующие):
* - Блокирующая передача/прием
* - Функции чтения/записи регистров устройств
* - Проверка наличия устройства
*
******************************************************************************
* @attention
*
* Использование этого драйвера предполагает наличие корректных настроек:
* - Определена конфигурационная структура i2c_config в periph_config.h
* - Определены пины SDA/SCL для I2C
*
******************************************************************************
* @verbatim
==============================================================================
##### Как использовать этот драйвер #####
==============================================================================
1. Настройка в periph_config.h:
(+) Определите i2c_config для I2C
(+) Настройте частоту SCL (FSFreq для стандартного режима, HSFreq для высокоскоростного)
(+) Используйте enum для настройки:
• I2C_Mode_Master - режим мастера
• I2C_Mode_Slave - режим ведомого
2. Инициализация:
(+) i2c_init_first() - настройка GPIO, тактирования
(+) i2c_init(&hi2c, &config) - инициализация I2C
3. Запуск I2C:
(+) I2C_Start(&hi2c) - включение I2C
4. Работа в режиме мастера (блокирующие функции):
- Основные функции:
(+) I2C_Master_Transmit(&hi2c, addr, buf, size, timeout) - передача данных
(+) I2C_Master_Receive(&hi2c, addr, buf, size, timeout) - прием данных
(+) I2C_Master_WriteReg(&hi2c, addr, reg, val, timeout) - запись регистра
(+) I2C_Master_ReadReg(&hi2c, addr, reg, buf, size, timeout) - чтение регистра
(+) I2C_Master_WriteRegs(&hi2c, addr, reg, buf, size, timeout) - запись нескольких регистров
(+) I2C_Master_ReadRegs(&hi2c, addr, reg, buf, size, timeout) - чтение нескольких регистров
(+) I2C_Master_IsDeviceReady(&hi2c, addr, timeout) - проверка наличия устройства
5. Обработка ошибок:
(+) I2C_GetLastError(&hi2c) - получение кода последней ошибки
(+) Callback-функция ошибки вызывается автоматически при ошибках
6. GPIO для I2C:
(+) Пины настраиваются автоматически при вызове i2c_init_first()
(+) При необходимости можно вызвать i2c_gpio_deinit() для восстановления
==============================================================================
##### Особенности работы #####
==============================================================================
- Режимы работы:
- Master: инициирует передачу данных, управляет шиной
- Slave: реагирует на запросы мастера
- Скорости работы:
- Standard Mode (до 100 кГц)
- Fast Mode (до 400 кГц)
- Fast Mode Plus (до 1 МГц)
- High Speed Mode (до 3.4 МГц)
- Адресация:
- 7-битная адресация (стандартная)
- 10-битная адресация (поддерживается)
- Обработка ошибок:
- Обрабатываются ошибки шины, арбитража, таймаута
- При ошибке вызывается ErrCallback и сохраняется код ошибки
- После ошибки требуется переинициализация I2C
- Функции работы с регистрами:
- Упрощают чтение/запись регистров устройств на шине I2C
- Поддерживают различные размеры регистров (8/16 бит)
- Проверка устройства:
- Функция проверяет ответ устройства на свой адрес
- Полезна для проверки подключения устройств
@endverbatim
******************************************************************************
*/
//-- Includes ------------------------------------------------------------------
#include "periph_config.h"
I2C_HandleTypeDef hi2c; /*!< Хендл I2C */
//-- Private function prototypes -----------------------------------------------
static OperationStatus __i2c_master_wait_bus_free(I2C_HandleTypeDef *hi2c, uint32_t timeout);
static OperationStatus __i2c_master_send_start(I2C_HandleTypeDef *hi2c, uint32_t timeout);
static OperationStatus __i2c_master_send_address(I2C_HandleTypeDef *hi2c, uint16_t addr, uint8_t direction, uint32_t timeout);
static OperationStatus __i2c_master_send_stop(I2C_HandleTypeDef *hi2c, uint32_t timeout);
static OperationStatus __i2c_master_transmit_blocking(I2C_HandleTypeDef *hi2c, uint8_t *buf, uint16_t size, uint32_t timeout);
static OperationStatus __i2c_master_receive_blocking(I2C_HandleTypeDef *hi2c, uint8_t *buf, uint16_t size, uint32_t timeout);
static void __i2c_set_error(I2C_HandleTypeDef *hi2c, uint8_t error);
//-- I2C Init functions -------------------------------------------------------
/**
* @brief Первичная инициализация I2C
* @details Настройка I2C и хендла: GPIO, тактирование
*/
void i2c_init_first(void)
{
#if (USE_I2C==1)
// Настройка пинов для I2C
i2c_gpio_init();
// Включение тактирования и сброс I2C
RCU_APBClkCmd(RCU_APBClk_I2C, ENABLE);
RCU_APBRstCmd(RCU_APBRst_I2C, ENABLE);
// Инициализируем I2C
hi2c.Instance = I2C;
hi2c.LastError = I2C_ERROR_NONE;
i2c_init(&hi2c, &i2c_config);
#endif
}
/**
* @brief Инициализация I2C
* @param hi2c указатель на хендл I2C
* @param NewConfig указатель на новую конфигурацию I2C, иначе используется та, что в структуре
* @retval OperationStatus OK - если всё хорошо, ERROR - если ошибка
*/
OperationStatus i2c_init(I2C_HandleTypeDef *hi2c, I2C_ExtInit_TypeDef *NewConfig)
{
if(!hi2c || !hi2c->Instance)
return ERROR;
if(NewConfig != NULL)
{
hi2c->Config = NewConfig;
}
if(hi2c->Config == NULL)
{
return ERROR;
}
// Сбрасываем ошибку
hi2c->LastError = I2C_ERROR_NONE;
// Настраиваем частоту SCL
if(hi2c->Config->I2C_Init.HSMode == ENABLE)
{
// Высокоскоростной режим
I2C_HSFreqConfig(hi2c->Config->HSFreq, hi2c->Config->I2CFreq);
}
else
{
// Стандартный/быстрый режим
I2C_FSFreqConfig(hi2c->Config->FSFreq, hi2c->Config->I2CFreq);
}
// Настраиваем таймаут
if(hi2c->Config->I2C_Init.Timeout != DISABLE)
{
I2C_TimeoutClkDivConfig(hi2c->Config->I2C_Init.TimeoutClkDiv);
I2C_SetTimeoutCounterLoad(hi2c->Config->I2C_Init.TimeoutLoad);
}
// Настраиваем дополнительные функции
I2C_AlertResponseMatchCmd(hi2c->Config->I2C_Init.AlertResponse);
I2C_GlobalCallMatchCmd(hi2c->Config->I2C_Init.GlobalCall);
return OK;
}
/**
* @brief Установка коллбека I2C
* @param hi2c указатель на хендл I2C
* @param CallbackType Тип коллбека
* @param Callback Функция коллбека
* @retval OperationStatus OK - если успешно, ERROR - при ошибке
*/
OperationStatus I2C_Set_Callback(I2C_HandleTypeDef* hi2c, I2C_CallbackTypeDef CallbackType, void (*Callback)())
{
if (!hi2c || !hi2c->Instance || !hi2c->Config)
return ERROR;
switch(CallbackType)
{
case I2C_Callback_Tx:
hi2c->Config->TxCallback = Callback;
break;
case I2C_Callback_Rx:
hi2c->Config->RxCallback = Callback;
break;
case I2C_Callback_Addr:
hi2c->Config->AddrCallback = Callback;
break;
case I2C_Callback_Error:
hi2c->Config->ErrCallback = Callback;
break;
default:
return ERROR;
}
return OK;
}
//-- I2C API functions --------------------------------------------------------
/**
* @brief Запуск I2C
* @param hi2c указатель на хендл I2C
* @retval OperationStatus OK - если успешно, ERROR - при ошибке
*/
OperationStatus I2C_Start(I2C_HandleTypeDef *hi2c)
{
if (!hi2c)
return ERROR;
// Сбрасываем ошибку
hi2c->LastError = I2C_ERROR_NONE;
// Включаем I2C
I2C_Cmd(ENABLE);
// Если режим ведомого, настраиваем адрес и включаем распознавание
if(hi2c->Config->I2C_Init.Mode == I2C_Mode_Slave)
{
if(hi2c->Config->I2C_Init.Addr10Bit == ENABLE)
{
I2C_Slave10AddrCmd(ENABLE);
I2C_SetSlave10Addr(hi2c->Config->I2C_Init.SlaveAddr >> 8);
I2C_SetSlaveAddr(hi2c->Config->I2C_Init.SlaveAddr & 0xFF);
}
else
{
I2C_Slave10AddrCmd(DISABLE);
I2C_SetSlaveAddr(hi2c->Config->I2C_Init.SlaveAddr);
}
I2C_SlaveCmd(ENABLE);
}
return OK;
}
/**
* @brief Остановка I2C
* @param hi2c указатель на хендл I2C
* @retval OperationStatus OK - если успешно, ERROR - при ошибке
*/
OperationStatus I2C_Stop(I2C_HandleTypeDef *hi2c)
{
if (!hi2c)
return ERROR;
// Выключаем I2C
I2C_Cmd(DISABLE);
// Если режим ведомого, выключаем распознавание адреса
if(hi2c->Config->I2C_Init.Mode == I2C_Mode_Slave)
{
I2C_SlaveCmd(DISABLE);
}
return OK;
}
/**
* @brief Получение кода последней ошибки
* @param hi2c указатель на хендл I2C
* @retval Код последней ошибки I2C
*/
uint8_t I2C_GetLastError(I2C_HandleTypeDef *hi2c)
{
if (!hi2c)
return I2C_ERROR_NONE;
return hi2c->LastError;
}
//-- I2C Master functions -----------------------------------------------------
/**
* @brief Передача данных в режиме мастера (блокирующий режим)
* @param hi2c указатель на хендл I2C
* @param addr адрес устройства на шине I2C
* @param buf указатель на буфер данных
* @param size размер данных в байтах
* @param timeout таймаут ожидания (мс)
* @retval OperationStatus OK - если успешно, ERROR - при ошибке или таймауте
*/
OperationStatus I2C_Master_Transmit(I2C_HandleTypeDef *hi2c,
uint16_t addr,
uint8_t *buf,
uint16_t size,
uint32_t timeout)
{
OperationStatus status;
if (!hi2c || !buf || size == 0)
{
__i2c_set_error(hi2c, I2C_ERROR_NONE);
return ERROR;
}
// Проверяем, свободна ли шина
status = __i2c_master_wait_bus_free(hi2c, timeout);
if (status != OK)
return status;
// Отправляем START
status = __i2c_master_send_start(hi2c, timeout);
if (status != OK)
return status;
// Отправляем адрес с направлением "запись"
status = __i2c_master_send_address(hi2c, addr, I2C_Direction_Transmitter, timeout);
if (status != OK)
{
// При NACK отправляем STOP и выходим
if (hi2c->LastError == I2C_ERROR_NACK)
{
__i2c_master_send_stop(hi2c, timeout);
}
return status;
}
// Передаем данные
status = __i2c_master_transmit_blocking(hi2c, buf, size, timeout);
// Отправляем STOP (даже при ошибке в данных)
__i2c_master_send_stop(hi2c, timeout);
// Если была ошибка передачи данных, возвращаем ошибку
if (status != OK)
return status;
// Вызываем callback успешной передачи
if (hi2c->Config->TxCallback)
hi2c->Config->TxCallback();
return OK;
}
/**
* @brief Прием данных в режиме мастера (блокирующий режим)
* @param hi2c указатель на хендл I2C
* @param addr адрес устройства на шине I2C
* @param buf указатель на буфер приема
* @param size количество принимаемых байт
* @param timeout таймаут ожидания (мс)
* @retval OperationStatus OK - если успешно, ERROR - при ошибке или таймауте
*/
OperationStatus I2C_Master_Receive(I2C_HandleTypeDef *hi2c,
uint16_t addr,
uint8_t *buf,
uint16_t size,
uint32_t timeout)
{
OperationStatus status;
if (!hi2c || !buf || size == 0)
{
__i2c_set_error(hi2c, I2C_ERROR_NONE);
return ERROR;
}
// Проверяем, свободна ли шина
status = __i2c_master_wait_bus_free(hi2c, timeout);
if (status != OK)
return status;
// Отправляем START
status = __i2c_master_send_start(hi2c, timeout);
if (status != OK)
return status;
// Отправляем адрес с направлением "чтение"
status = __i2c_master_send_address(hi2c, addr, I2C_Direction_Receiver, timeout);
if (status != OK)
{
// При NACK отправляем STOP и выходим
if (hi2c->LastError == I2C_ERROR_NACK)
{
__i2c_master_send_stop(hi2c, timeout);
}
return status;
}
// Принимаем данные
status = __i2c_master_receive_blocking(hi2c, buf, size, timeout);
// Отправляем STOP (даже при ошибке приема)
__i2c_master_send_stop(hi2c, timeout);
// Если была ошибка приема данных, возвращаем ошибку
if (status != OK)
return status;
// Вызываем callback успешного приема
if (hi2c->Config->RxCallback)
hi2c->Config->RxCallback();
return OK;
}
/**
* @brief Запись регистра устройства (блокирующий режим)
* @param hi2c указатель на хендл I2C
* @param addr адрес устройства на шине I2C
* @param reg адрес регистра
* @param value значение для записи
* @param timeout таймаут ожидания (мс)
* @retval OperationStatus OK - если успешно, ERROR - при ошибке или таймауте
*/
OperationStatus I2C_Master_WriteReg(I2C_HandleTypeDef *hi2c,
uint16_t addr,
uint16_t reg,
uint8_t value,
uint32_t timeout)
{
uint8_t data[3];
uint16_t reg_size = (hi2c->Config->I2C_Init.RegSize == I2C_RegSize_8bit) ? 1 : 2;
if (reg_size == 1)
{
data[0] = (uint8_t)reg;
data[1] = value;
return I2C_Master_Transmit(hi2c, addr, data, 2, timeout);
}
else
{
data[0] = (uint8_t)(reg >> 8);
data[1] = (uint8_t)reg;
data[2] = value;
return I2C_Master_Transmit(hi2c, addr, data, 3, timeout);
}
}
/**
* @brief Чтение регистра устройства (блокирующий режим)
* @param hi2c указатель на хендл I2C
* @param addr адрес устройства на шине I2C
* @param reg адрес регистра
* @param buf указатель на буфер для данных
* @param size размер данных для чтения
* @param timeout таймаут ожидания (мс)
* @retval OperationStatus OK - если успешно, ERROR - при ошибке или таймауте
*/
OperationStatus I2C_Master_ReadReg(I2C_HandleTypeDef *hi2c,
uint16_t addr,
uint16_t reg,
uint8_t *buf,
uint16_t size,
uint32_t timeout)
{
OperationStatus status;
uint8_t reg_data[2];
uint16_t reg_size = (hi2c->Config->I2C_Init.RegSize == I2C_RegSize_8bit) ? 1 : 2;
// Сначала отправляем адрес регистра
if (reg_size == 1)
{
reg_data[0] = (uint8_t)reg;
status = I2C_Master_Transmit(hi2c, addr, reg_data, 1, timeout);
}
else
{
reg_data[0] = (uint8_t)(reg >> 8);
reg_data[1] = (uint8_t)reg;
status = I2C_Master_Transmit(hi2c, addr, reg_data, 2, timeout);
}
if (status != OK)
return status;
// Затем читаем данные
return I2C_Master_Receive(hi2c, addr, buf, size, timeout);
}
/**
* @brief Запись нескольких регистров (блокирующий режим)
* @param hi2c указатель на хендл I2C
* @param addr адрес устройства на шине I2C
* @param reg начальный адрес регистра
* @param buf указатель на буфер данных
* @param size количество регистров для записи
* @param timeout таймаут ожидания (мс)
* @retval OperationStatus OK - если успешно, ERROR - при ошибке или таймауте
*/
OperationStatus I2C_Master_WriteRegs(I2C_HandleTypeDef *hi2c,
uint16_t addr,
uint16_t reg,
uint8_t *buf,
uint16_t size,
uint32_t timeout)
{
OperationStatus status;
uint16_t reg_size = (hi2c->Config->I2C_Init.RegSize == I2C_RegSize_8bit) ? 1 : 2;
// Проверяем, свободна ли шина
status = __i2c_master_wait_bus_free(hi2c, timeout);
if (status != OK)
return status;
// Отправляем START
status = __i2c_master_send_start(hi2c, timeout);
if (status != OK)
return status;
// Отправляем адрес с направлением "запись"
status = __i2c_master_send_address(hi2c, addr, I2C_Direction_Transmitter, timeout);
if (status != OK)
{
// При NACK отправляем STOP и выходим
if (hi2c->LastError == I2C_ERROR_NACK)
{
__i2c_master_send_stop(hi2c, timeout);
}
return status;
}
// Отправляем адрес регистра (первый байт)
if (reg_size == 1)
{
status = __i2c_master_transmit_blocking(hi2c, (uint8_t*)&reg, 1, timeout);
}
else
{
// Для 16-битного адреса отправляем старший, затем младший байт
uint8_t reg_bytes[2] = {(uint8_t)(reg >> 8), (uint8_t)reg};
status = __i2c_master_transmit_blocking(hi2c, reg_bytes, 2, timeout);
}
if (status != OK)
{
__i2c_master_send_stop(hi2c, timeout);
return status;
}
// Отправляем данные
status = __i2c_master_transmit_blocking(hi2c, buf, size, timeout);
// Отправляем STOP
__i2c_master_send_stop(hi2c, timeout);
// Если была ошибка передачи данных, возвращаем ошибку
if (status != OK)
return status;
// Вызываем callback успешной передачи
if (hi2c->Config->TxCallback)
hi2c->Config->TxCallback();
return OK;
}
/**
* @brief Чтение нескольких регистров (блокирующий режим)
* @param hi2c указатель на хендл I2C
* @param addr адрес устройства на шине I2C
* @param reg начальный адрес регистра
* @param buf указатель на буфер для данных
* @param size количество регистров для чтения
* @param timeout таймаут ожидания (мс)
* @retval OperationStatus OK - если успешно, ERROR - при ошибке или таймауте
*/
OperationStatus I2C_Master_ReadRegs(I2C_HandleTypeDef *hi2c,
uint16_t addr,
uint16_t reg,
uint8_t *buf,
uint16_t size,
uint32_t timeout)
{
// Для чтения нескольких регистров используется та же функция, что и для одного
// т.к. после отправки адреса регистра можно читать любое количество байт
return I2C_Master_ReadReg(hi2c, addr, reg, buf, size, timeout);
}
/**
* @brief Проверка наличия устройства на шине
* @param hi2c указатель на хендл I2C
* @param addr адрес устройства на шине I2C
* @param timeout таймаут ожидания (мс)
* @retval OperationStatus OK - если устройство отвечает, ERROR - если нет ответа
*/
OperationStatus I2C_Master_IsDeviceReady(I2C_HandleTypeDef *hi2c,
uint16_t addr,
uint32_t timeout)
{
OperationStatus status;
if (!hi2c)
return ERROR;
// Проверяем, свободна ли шина
status = __i2c_master_wait_bus_free(hi2c, timeout);
if (status != OK)
return status;
// Отправляем START
status = __i2c_master_send_start(hi2c, timeout);
if (status != OK)
return status;
// Отправляем адрес с направлением "запись" (любое направление подойдет для проверки)
status = __i2c_master_send_address(hi2c, addr, I2C_Direction_Transmitter, timeout);
// Отправляем STOP независимо от результата
__i2c_master_send_stop(hi2c, timeout);
// Если устройство ответило ACK, значит оно готово
if (status == OK && hi2c->LastError == I2C_ERROR_NONE)
return OK;
return ERROR;
}
//-- I2C GPIO functions -------------------------------------------------------
/**
* @brief Инициализация GPIO для I2C
*/
void i2c_gpio_init(void)
{
#if USE_I2C==1
// Получаем структуры
GPIO_Init_TypeDef *sda_config = gpio_get_init(I2C_GPIO_Port, I2C_SDA_Pin);
GPIO_Init_TypeDef *scl_config = gpio_get_init(I2C_GPIO_Port, I2C_SCL_Pin);
// SDA пин
if (sda_config != NULL)
{
GPIO_StructInit(sda_config);
sda_config->Pin = I2C_SDA_Pin;
sda_config->AltFunc = ENABLE;
sda_config->Digital = ENABLE;
sda_config->OutMode = GPIO_OutMode_OD; // Открытый сток для I2C
sda_config->PullMode = GPIO_PullMode_PU; // Подтяжка к питанию для I2C
GPIO_Init(I2C_GPIO_Port, sda_config);
}
// SCL пин
if (scl_config != NULL)
{
GPIO_StructInit(scl_config);
scl_config->Pin = I2C_SCL_Pin;
scl_config->AltFunc = ENABLE;
scl_config->Digital = ENABLE;
scl_config->OutMode = GPIO_OutMode_OD; // Открытый сток для I2C
scl_config->PullMode = GPIO_PullMode_PU; // Подтяжка к питанию для I2C
GPIO_Init(I2C_GPIO_Port, scl_config);
}
#endif
}
/**
* @brief Деинициализация GPIO для I2C
*/
void i2c_gpio_deinit(void)
{
#if USE_I2C==1
// Получаем структуры
GPIO_Init_TypeDef *sda_config = gpio_get_init(I2C_GPIO_Port, I2C_SDA_Pin);
GPIO_Init_TypeDef *scl_config = gpio_get_init(I2C_GPIO_Port, I2C_SCL_Pin);
// Восстанавливаем оригинальные настройки из таблицы
if (sda_config != NULL)
{
GPIO_StructInit(sda_config);
sda_config->Pin = I2C_SDA_Pin;
GPIO_Init(I2C_GPIO_Port, sda_config);
}
if (scl_config != NULL)
{
GPIO_StructInit(scl_config);
scl_config->Pin = I2C_SCL_Pin;
GPIO_Init(I2C_GPIO_Port, scl_config);
}
#endif
}
//-- I2C private functions ----------------------------------------------------
/**
* @brief Установка ошибки I2C
*/
static void __i2c_set_error(I2C_HandleTypeDef *hi2c, uint8_t error)
{
if (!hi2c)
return;
hi2c->LastError = error;
// Вызываем callback ошибки, если он установлен
if (hi2c->Config->ErrCallback)
hi2c->Config->ErrCallback(error);
}
/**
* @brief Ожидание освобождения шины I2C
*/
static OperationStatus __i2c_master_wait_bus_free(I2C_HandleTypeDef *hi2c, uint32_t timeout)
{
uint32_t starttick = millis();
while(I2C_BusBusyStatus() == SET)
{
if(millis() - starttick > timeout)
{
__i2c_set_error(hi2c, I2C_ERROR_BUS_BUSY);
return ERROR;
}
}
return OK;
}
/**
* @brief Отправка условия START
*/
static OperationStatus __i2c_master_send_start(I2C_HandleTypeDef *hi2c, uint32_t timeout)
{
uint32_t starttick = millis();
I2C_State_TypeDef state;
// Формируем START
I2C_StartCmd();
// Ожидаем подтверждения формирования START
while(1)
{
state = I2C_GetState();
if (state == I2C_State_STDONE || state == I2C_State_HMTMCOK)
{
// START успешно сформирован
return OK;
}
else if (state == I2C_State_BERROR)
{
__i2c_set_error(hi2c, I2C_ERROR_BUS_ERROR);
return ERROR;
}
else if (state == I2C_State_IDLARL || state == I2C_State_HIDLARL)
{
__i2c_set_error(hi2c, I2C_ERROR_ARBITRATION_LOST);
return ERROR;
}
if(millis() - starttick > timeout)
{
__i2c_set_error(hi2c, I2C_ERROR_TIMEOUT);
return ERROR;
}
}
}
/**
* @brief Отправка адреса устройства
*/
static OperationStatus __i2c_master_send_address(I2C_HandleTypeDef *hi2c, uint16_t addr, uint8_t direction, uint32_t timeout)
{
uint8_t address;
uint32_t starttick = millis();
I2C_State_TypeDef state;
// Формируем адрес
if (addr > 0x7F)
{
// 10-битный адрес - первая часть всегда на запись
address = 0xF0 | ((addr >> 7) & 0x06);
I2C_SetData(address | I2C_Direction_Transmitter);
}
else
{
// 7-битный адрес
address = (addr << 1);
I2C_SetData(address | direction);
}
// Сбрасываем флаг прерывания
I2C_ITStatusClear();
// Ожидаем подтверждения адреса
while(1)
{
state = I2C_GetState();
// ACK получен для 7-битного адреса
if ((direction == I2C_Direction_Transmitter &&
(state == I2C_State_MTADPA || state == I2C_State_HMTADPA)) ||
(direction == I2C_Direction_Receiver &&
(state == I2C_State_MRADPA || state == I2C_State_HMRADPA)))
{
return OK;
}
// NACK получен
else if ((direction == I2C_Direction_Transmitter &&
(state == I2C_State_MTADNA || state == I2C_State_HMTADNA)) ||
(direction == I2C_Direction_Receiver &&
(state == I2C_State_MRADNA || state == I2C_State_HMRADNA)))
{
__i2c_set_error(hi2c, I2C_ERROR_NACK);
return ERROR;
}
// Ошибка шины
else if (state == I2C_State_BERROR)
{
__i2c_set_error(hi2c, I2C_ERROR_BUS_ERROR);
return ERROR;
}
// Потеря арбитража
else if (state == I2C_State_IDLARL || state == I2C_State_HIDLARL)
{
__i2c_set_error(hi2c, I2C_ERROR_ARBITRATION_LOST);
return ERROR;
}
if(millis() - starttick > timeout)
{
__i2c_set_error(hi2c, I2C_ERROR_TIMEOUT);
return ERROR;
}
}
}
/**
* @brief Отправка условия STOP
*/
static OperationStatus __i2c_master_send_stop(I2C_HandleTypeDef *hi2c, uint32_t timeout)
{
uint32_t starttick = millis();
// Формируем STOP
I2C_StopCmd();
// Сбрасываем флаг прерывания
I2C_ITStatusClear();
// Ожидаем освобождения шины (опционально, не обязательно)
// while(I2C_BusBusyStatus() == SET)
// {
// if(millis() - starttick > timeout)
// {
// __i2c_set_error(hi2c, I2C_ERROR_TIMEOUT);
// return ERROR;
// }
// }
return OK;
}
/**
* @brief Блокирующая передача данных
*/
static OperationStatus __i2c_master_transmit_blocking(I2C_HandleTypeDef *hi2c, uint8_t *buf, uint16_t size, uint32_t timeout)
{
uint32_t starttick;
I2C_State_TypeDef state;
for(uint16_t i = 0; i < size; i++)
{
// Отправляем байт данных
I2C_SetData(buf[i]);
// Сбрасываем флаг прерывания
I2C_ITStatusClear();
starttick = millis();
// Ожидаем подтверждения байта
while(1)
{
state = I2C_GetState();
// ACK получен
if (state == I2C_State_MTDAPA || state == I2C_State_HMTDAPA)
{
break;
}
// NACK получен
else if (state == I2C_State_MTDANA || state == I2C_State_HMTDANA)
{
__i2c_set_error(hi2c, I2C_ERROR_NACK);
return ERROR;
}
// Ошибка шины
else if (state == I2C_State_BERROR)
{
__i2c_set_error(hi2c, I2C_ERROR_BUS_ERROR);
return ERROR;
}
// Потеря арбитража
else if (state == I2C_State_IDLARL || state == I2C_State_HIDLARL)
{
__i2c_set_error(hi2c, I2C_ERROR_ARBITRATION_LOST);
return ERROR;
}
if(millis() - starttick > timeout)
{
__i2c_set_error(hi2c, I2C_ERROR_TIMEOUT);
return ERROR;
}
}
}
return OK;
}
/**
* @brief Блокирующий прием данных
*/
static OperationStatus __i2c_master_receive_blocking(I2C_HandleTypeDef *hi2c, uint8_t *buf, uint16_t size, uint32_t timeout)
{
uint32_t starttick;
I2C_State_TypeDef state;
for(uint16_t i = 0; i < size; i++)
{
starttick = millis();
// Ожидаем приема байта
while(1)
{
state = I2C_GetState();
// Байт получен с ACK или NACK
if (state == I2C_State_MRDAPA || state == I2C_State_MRDANA ||
state == I2C_State_HMRDAPA || state == I2C_State_HMRDANA)
{
// Читаем данные
buf[i] = I2C_GetData();
// Для последнего байта отправляем NACK
if (i == size - 1)
{
I2C_NACKCmd();
}
break;
}
// Ошибка шины
else if (state == I2C_State_BERROR)
{
__i2c_set_error(hi2c, I2C_ERROR_BUS_ERROR);
return ERROR;
}
// Потеря арбитража
else if (state == I2C_State_IDLARL || state == I2C_State_HIDLARL)
{
__i2c_set_error(hi2c, I2C_ERROR_ARBITRATION_LOST);
return ERROR;
}
if(millis() - starttick > timeout)
{
__i2c_set_error(hi2c, I2C_ERROR_TIMEOUT);
return ERROR;
}
}
}
return OK;
}

183
MDK-ARM/Core/App/i2c.h Normal file
View File

@@ -0,0 +1,183 @@
/**
******************************************************************************
* @file i2c.h
* @author Разваляев Алексей
* @brief Драйвер I2C на основе PLIB035.
* Данный файл содержит определения типов, структур и прототипы функций
* для работы с I2C, включая:
* + Структуры и typedef для I2C
* + Прототипы функций для инициализации и API драйвера
*
******************************************************************************
*/
#ifndef __I2C_H
#define __I2C_H
//-- Includes ------------------------------------------------------------------
#include "plib035.h"
#include "plib035_i2c.h"
#include "retarget_conf.h"
//-- Defines -------------------------------------------------------------------
// Дефайны для пинов I2C
#define I2C_SCL_Pin GPIO_Pin_0 /**< PA0 — I2C SCL */
#define I2C_SDA_Pin GPIO_Pin_1 /**< PA1 — I2C SDA */
#define I2C_GPIO_Port GPIOA /**< GPIO порт I2C */
// Стандартные частоты I2C
#define I2C_STANDARD_MODE 100000 /**< 100 kHz */
#define I2C_FAST_MODE 400000 /**< 400 kHz */
#define I2C_FAST_MODE_PLUS 1000000 /**< 1 MHz */
#define I2C_HIGH_SPEED_MODE 3400000 /**< 3.4 MHz */
// Максимальное время ожидания по умолчанию (мс)
#define I2C_DEFAULT_TIMEOUT 1000
// Коды ошибок I2C
#define I2C_ERROR_NONE 0x00
#define I2C_ERROR_BUS_BUSY 0x01
#define I2C_ERROR_TIMEOUT 0x02
#define I2C_ERROR_NACK 0x03
#define I2C_ERROR_ARBITRATION_LOST 0x04
#define I2C_ERROR_BUS_ERROR 0x05
#define I2C_ERROR_PEC_FAIL 0x06
//-- Types ---------------------------------------------------------------------
/**
* @brief Типы callback-функций I2C
*/
typedef enum
{
I2C_Callback_Tx, /*!< Передача данных завершена */
I2C_Callback_Rx, /*!< Приём данных завершён */
I2C_Callback_Addr, /*!< Ведомый получил свой адрес */
I2C_Callback_Error, /*!< Ошибка I2C */
} I2C_CallbackTypeDef;
/**
* @brief Режимы работы I2C
*/
typedef enum
{
I2C_Mode_Master, /*!< Режим мастера */
I2C_Mode_Slave, /*!< Режим ведомого */
} I2C_ModeTypeDef;
/**
* @brief Направление передачи I2C
*/
typedef enum
{
I2C_Direction_Transmitter, /*!< Направление: передатчик */
I2C_Direction_Receiver, /*!< Направление: приемник */
} I2C_DirectionTypeDef;
/**
* @brief Размер регистра устройства
*/
typedef enum
{
I2C_RegSize_8bit, /*!< Размер регистра: 8 бит */
I2C_RegSize_16bit, /*!< Размер регистра: 16 бит */
} I2C_RegSizeTypeDef;
/**
* @brief Структура инициализации I2C
*/
typedef struct
{
I2C_ModeTypeDef Mode; /*!< Режим работы: I2C_Mode_Master или I2C_Mode_Slave */
FunctionalState HSMode; /*!< Высокоскоростной режим */
FunctionalState Addr10Bit; /*!< 10-битная адресация */
I2C_RegSizeTypeDef RegSize; /*!< Размер регистра: I2C_RegSize_8bit или I2C_RegSize_16bit */
uint16_t SlaveAddr; /*!< Адрес ведомого (для режима Slave) */
FunctionalState Timeout; /*!< Таймаут: */
I2C_TimeoutClkDiv_TypeDef TimeoutClkDiv; /*!< Делитель тактирования таймаута */
uint8_t TimeoutLoad; /*!< Значение загрузки счетчика таймаута */
FunctionalState AlertResponse; /*!< Ответ на тревогу */
FunctionalState GlobalCall; /*!< Общий вызов */
} I2C_Init_TypeDef;
/**
* @brief Расширенная конфигурация I2C
*/
typedef struct
{
I2C_Init_TypeDef I2C_Init; /*!< Базовая конфигурация I2C */
uint32_t I2CFreq; /*!< Частота тактирования I2C в Гц */
uint32_t FSFreq; /*!< Частота SCL в стандартном режиме в Гц */
uint32_t HSFreq; /*!< Частота SCL в высокоскоростном режиме в Гц */
/* Callback функции */
void (*TxCallback)(void); /*!< Вызывается при завершении передачи */
void (*RxCallback)(void); /*!< Вызывается при завершении приема */
void (*AddrCallback)(void); /*!< Вызывается когда ведомый получает свой адрес */
void (*ErrCallback)(uint8_t error); /*!< Вызывается при ошибке I2C с кодом ошибки */
} I2C_ExtInit_TypeDef;
/**
* @brief Хендл I2C
*/
typedef struct
{
I2C_TypeDef *Instance; /*!< Регистры I2C */
I2C_ExtInit_TypeDef *Config; /*!< Конфигурация I2C */
uint8_t LastError; /*!< Код последней ошибки */
} I2C_HandleTypeDef;
//-- External handles ----------------------------------------------------------
extern I2C_HandleTypeDef hi2c;
//-- Exported functions prototypes ---------------------------------------------
/* Init functions */
/* Первичная инициализация I2C */
void i2c_init_first(void);
/* Инициализация I2C */
OperationStatus i2c_init(I2C_HandleTypeDef *hi2c, I2C_ExtInit_TypeDef *NewConfig);
/* Инициализация GPIO для I2C */
void i2c_gpio_init(void);
/* Деинициализация GPIO для I2C */
void i2c_gpio_deinit(void);
/* API functions*/
/* Установка callback-функции I2C */
OperationStatus I2C_Set_Callback(I2C_HandleTypeDef *hi2c, I2C_CallbackTypeDef CallbackType, void (*Callback)());
/* Запуск I2C */
OperationStatus I2C_Start(I2C_HandleTypeDef *hi2c);
/* Остановка I2C */
OperationStatus I2C_Stop(I2C_HandleTypeDef *hi2c);
/* Получение кода последней ошибки */
uint8_t I2C_GetLastError(I2C_HandleTypeDef *hi2c);
/* Передача данных в режиме мастера (блокирующий режим) */
OperationStatus I2C_Master_Transmit(I2C_HandleTypeDef *hi2c, uint16_t addr, uint8_t *buf, uint16_t size, uint32_t timeout);
/* Прием данных в режиме мастера (блокирующий режим) */
OperationStatus I2C_Master_Receive(I2C_HandleTypeDef *hi2c, uint16_t addr, uint8_t *buf, uint16_t size, uint32_t timeout);
/* Запись регистра устройства (блокирующий режим) */
OperationStatus I2C_Master_WriteReg(I2C_HandleTypeDef *hi2c, uint16_t addr, uint16_t reg, uint8_t value, uint32_t timeout);
/* Чтение регистра устройства (блокирующий режим) */
OperationStatus I2C_Master_ReadReg(I2C_HandleTypeDef *hi2c, uint16_t addr, uint16_t reg, uint8_t *buf, uint16_t size, uint32_t timeout);
/* Запись нескольких регистров (блокирующий режим) */
OperationStatus I2C_Master_WriteRegs(I2C_HandleTypeDef *hi2c, uint16_t addr, uint16_t reg, uint8_t *buf, uint16_t size, uint32_t timeout);
/* Чтение нескольких регистров (блокирующий режим) */
OperationStatus I2C_Master_ReadRegs(I2C_HandleTypeDef *hi2c, uint16_t addr, uint16_t reg, uint8_t *buf, uint16_t size, uint32_t timeout);
/* Проверка наличия устройства на шине */
OperationStatus I2C_Master_IsDeviceReady(I2C_HandleTypeDef *hi2c, uint16_t addr, uint32_t timeout);
#endif /*__I2C_H*/

View File

@@ -10,76 +10,43 @@
//-- Includes ------------------------------------------------------------------ //-- Includes ------------------------------------------------------------------
#include "main.h" #include "main.h"
void restart_receive(void);
void heartbit(void);
//-- Defines ------------------------------------------------------------------- //-- Defines -------------------------------------------------------------------
uint8_t rxbuff[10] = {0};
uint16_t adc_buff[2][100];
//-- Peripheral init functions ------------------------------------------------- //-- Peripheral init functions -------------------------------------------------
void periph_init() void periph_init()
{ {
sysclk_init(); sysclk_init();
uart_init_first(); uart_init_first();
adc_init_first();
tmr_init_first(); tmr_init_first();
adc_init_first();
i2c_init_first();
gpio_init(); gpio_init();
#ifdef RETARGET #ifdef RETARGET
retarget_init(); retarget_init();
#endif #endif
NVIC_SetAllPriorities();
printf("\nAll peripherals inited, SYSCLK = %3d MHz\n", (int)(SystemCoreClock / 1E6)); printf("\nAll peripherals inited, SYSCLK = %3d MHz\n", (int)(SystemCoreClock / 1E6));
uart_set_callback(&huart1, UART_Callback_Rx, &restart_receive);
uart_start(&huart1, UART_FIFOLevel_1_8, UART_FIFOLevel_1_8);
tmr_set_callback(&htmr2, 0, &heartbit);
tmr_start(&htmr0);
tmr_start(&htmr1);
tmr_start(&htmr2);
adc_seq_start(&hadc, ADC_SEQ_Num_0, adc_buff, 100);
} }
//-- Main ---------------------------------------------------------------------- //-- Main ----------------------------------------------------------------------
int main() int main()
{ {
periph_init(); periph_init();
uint8_t cnt;
uart_receive_it(&huart1, rxbuff, sizeof(rxbuff)); while (1)
uint32_t prev_tick; {
tmr_delay_start(&htmr0, &prev_tick);
while (1) {
if(tmr_delay_done(&htmr0, 1000000, &prev_tick))
{
tmr_delay_start(&htmr0, &prev_tick);
GPIO_ToggleBits(GPIOA, GPIO_Pin_8);
adc_sw_start();
}
tmr_delay(&htmr0, 100000);
GPIO_ToggleBits(GPIOA, GPIO_Pin_7);
// uart_transmit_it(&huart1, (uint8_t*)"Hello World: ", sizeof("Hello World: ")-1);
// uart_transmit_it(&huart1, (uint8_t*)"delay 500\r\n", sizeof("delay 500\r\n")-1);
}; };
//return 0; //return 0;
} }
void restart_receive(void)
{
uart_receive_it(&huart1, rxbuff, sizeof(rxbuff));
uart_transmit_it(&huart1, rxbuff, sizeof(rxbuff));
}
void heartbit(void)
{
uart_transmit(&huart1, (uint8_t *)"\r\nTick 1 sec\r\n", sizeof("\r\nTick 1 sec\r\n")-1, 1000);
}
//-- Assert -------------------------------------------------------------------- //-- Assert --------------------------------------------------------------------
void Error_Handler(void) void Error_Handler(void)
{ {
__disable_irq(); __disable_irq();
while (1) while (1)
{ {
} }
} }
#if defined USE_FULL_ASSERT #if defined USE_FULL_ASSERT

316
MDK-ARM/Core/App/sysclk.c Normal file
View File

@@ -0,0 +1,316 @@
/**
******************************************************************************
* @file sysclk.c
* @author Разваляев Алексей
* @brief Драйвер тактирования системы на основе PLIB035.
* Этот файл содержит:
* + Инициализацию системного тактирования (PLL, осцилляторы)
* + Настройку частоты ядра и периферии
* + Управление системным таймером (SysTick)
* + Функции для работы со временем (millis, micros)
* + Систему периодических коллбеков
* + Настройку тактирования периферии
*
******************************************************************************
* @attention
*
* Этот драйвер должен быть инициализирован ПЕРВЫМ в программе, до любой другой периферии.
* Неправильная настройка тактирования может привести к неработоспособности всего МК.
*
* Использование этого драйвера предполагает наличие корректных настроек:
* - Определены константы SYSCLK_CORE_CLOCK_MHZ и SYSCLK_Oscil_Type в periph_config.h
* - Определен тип системного тика SYSCLK_TickType в periph_config.h
*
******************************************************************************
* @verbatim
==============================================================================
##### Как использовать этот драйвер #####
==============================================================================
1. Настройка в periph_config.h:
(+) SYSCLK_CORE_CLOCK_MHZ - частота ядра в МГц (например, 100)
(+) SYSCLK_Oscil_Type - источник тактирования (RCU_Oscil_OSE или RCU_Oscil_OSI)
(+) SYSCLK_TickType - период системного тика (от SYSCLK_Tick_1us до SYSCLK_Tick_100ms)
2. Инициализация (в начале main()):
(+) sysclk_init() - настраивает PLL, SysTick и счетчики времени
(+) В SysTick_Handler() вызвать sysclk_irq_handler()
3. Работа со временем:
(+) millis() - текущее время в миллисекундах (переполнение через 49 дней)
(+) micros() - текущее время в микросекундах (точность зависит от SYSCLK_TickType)
4. Периодические задачи:
(+) SYSCLK_Set_Callback(func, period_ms) - регистрация функции для периодического вызова
(+) Максимум 16 функций, период должен быть >= периода системного тика
5. Настройка тактирования периферии:
(+) rcu_set_clock_adc(source, freq_mhz, enable) - для АЦП
(+) Частота АЦП не должна превышать 12.5 МГц согласно datasheet
==============================================================================
##### Особенности работы #####
==============================================================================
- Выбор SYSCLK_TickType влияет на:
- Точность micros() (при 1ms тике micros() дает значения с шагом 1000)
- Нагрузку на ЦП (1us = 1М прерываний в секунду, 100ms = 10 прерываний в секунду)
- Минимальный период коллбеков (не может быть меньше SYSCLK_TickType)
- При настройке PLL:
- Драйвер автоматически подбирает делители для заданной частоты
- Если частота недостижима - вызовется Error_Handler()
- Всегда проверяйте supported frequencies в datasheet
- Коллбеки выполняются в контексте прерывания SysTick:
- Не должны выполняться долго
- Не должны вызывать блокирующие функции
@endverbatim
******************************************************************************
*/
/* Includes ------------------------------------------------------------------*/
#include "periph_config.h"
/* Private variables ---------------------------------------------------------*/
/** @brief Счетчик миллисекунд */
__IO uint32_t msTick = 0;
/** @brief Счетчик микросекунд */
__IO uint32_t usTick = 0;
/** @brief Инкремент для миллисекунд */
static __IO uint32_t msTickInc = 0;
/** @brief Инкремент для микросекунд */
static __IO uint32_t usTickInc = 0;
/** @brief Обработчик системных коллбеков */
static SYSCLK_CallbackHandleTypeDef hsyscb = {0};
//-- Defines -------------------------------------------------------------------
//-- Private function prototypes -----------------------------------------------
static inline void millis_inc(void);
static inline void micros_inc(void);
//-- Peripheral init functions -------------------------------------------------
/**
* @brief Инициализация системного тактирования.
* @details Настраивает PLL, SysTick и счетчики времени.
* Должна быть вызвана первой в функции main().
*/
void sysclk_init(void)
{
OperationStatus status;
status = RCU_PLL_AutoConfig(SYSCLK_CORE_CLOCK_MHZ*__MHZ, SYSCLK_Oscil_Type);
if (status == ERROR)
{
Error_Handler();
}
SystemCoreClockUpdate();
// RCU_ClkOutConfig(RCU_SysPeriphClk_PLLClk, 1, ENABLE);
// RCU_ClkOutCmd(ENABLE);
SysTick_Config(SYSCLK_CORE_CLOCK_MHZ*__MHZ/SYSCLK_TickType);
switch(SYSCLK_TickType)
{
case SYSCLK_Tick_1us:
usTickInc = 1;
msTickInc = 1;
break;
case SYSCLK_Tick_10us:
usTickInc = 10;
msTickInc = 1;
break;
case SYSCLK_Tick_100us:
usTickInc = 100;
msTickInc = 1;
break;
case SYSCLK_Tick_1ms:
usTickInc = 1000;
msTickInc = 1;
break;
case SYSCLK_Tick_10ms:
usTickInc = 10000;
msTickInc = 10;
break;
case SYSCLK_Tick_100ms:
usTickInc = 100000;
msTickInc = 100;
break;
default:
/* Должен быть определен в periph_config.h */
Error_Handler();
break;
}
}
/**
* @brief Общий обработчик прерываний SysClock
* @details Обрабатывает мс и мкс и вызывает коллбеки
*/
void sysclk_irq_handler(void)
{
static uint32_t usAccumulator = 0; // Накопитель мкс
/* Инкремент микросекунд */
micros_inc();
if(msTickInc == 1)
{
/* Аккумулятивный метод для миллисекунд (без деления) */
usAccumulator += usTickInc;
if (usAccumulator >= 1000) {
millis_inc();
usAccumulator -= 1000; // Вычитание быстрее деления
}
}
else
{
millis_inc();
}
/* Вызов зарегистрированных коллбеков */
for(int i = 0; i < hsyscb.CallbackInUse; i++)
{
if(hsyscb.Callback[i] != NULL)
{
/* Проверка истекшего времени */
uint32_t elapsed = msTick - hsyscb.CallbackPrevMs[i];
if(elapsed >= hsyscb.CallbackPeriod[i])
{
/* Обновление времени последнего вызова и вызов коллбека */
hsyscb.CallbackPrevMs[i] = msTick;
hsyscb.Callback[i]();
}
}
}
}
/**
* @brief Добавление периодического коллбека.
* @param Callback Указатель на функцию-коллбек
* @param PeriodInMs Период вызова коллбека в миллисекундах
* @retval OperationStatus OK при успехе, ERROR при ошибке
* @note Максимальное количество коллбеков: SYSCLK_NUMB_OF_CUSTOM_CALLBACKS
* @note Минимальный период: текущий период тика SysTick
*/
OperationStatus SYSCLK_Set_Callback(void (*Callback)(void), uint32_t PeriodInMs)
{
/* Проверка валидности указателя на функцию */
if(Callback == NULL)
return ERROR;
/* Проверка минимального периода */
if(PeriodInMs < msTickInc)
return ERROR;
/* Проверка доступности свободных слотов */
if(hsyscb.CallbackInUse >= SYSCLK_NUMB_OF_CUSTOM_CALLBACKS)
return ERROR;
/* Регистрация коллбека */
hsyscb.Callback[hsyscb.CallbackInUse] = Callback;
hsyscb.CallbackPeriod[hsyscb.CallbackInUse] = PeriodInMs;
hsyscb.CallbackPrevMs[hsyscb.CallbackInUse] = msTick;
hsyscb.CallbackInUse++;
return OK;
}
/**
* @brief Получение текущего времени в миллисекундах.
* @retval uint32_t Текущее время в миллисекундах
* @note Переполнение происходит через ~49 дней
*/
uint32_t millis(void)
{
return msTick;
}
/**
* @brief Получение текущего времени в микросекундах.
* @retval uint32_t Текущее время в микросекундах
* @note Переполнение происходит через ~71 минуту
*/
uint32_t micros(void)
{
return usTick;
}
/**
* @brief Настройка тактирования АЦП.
* @param ClkSrc Источник тактирования (RCU_PeriphClk_TypeDef)
* @param ClkMHz Желаемая частота АЦП в МГц
* @param state Состояние (ENABLE/DISABLE)
* @retval OperationStatus OK при успехе, ERROR при ошибке
* @note Временное отключает тактирование АЦП во время настройки
*/
OperationStatus rcu_set_clock_adc(RCU_PeriphClk_TypeDef ClkSrc, float ClkMHz, FunctionalState state)
{
uint32_t adc_raw_clock = 0;
float adc_clock_div = 0;
/* Отключение тактирования АЦП для настройки */
RCU_ADCClkCmd(DISABLE);
/* Определение частоты источника тактирования */
switch(ClkSrc)
{
case RCU_PeriphClk_OSEClk:
adc_raw_clock = RCU_GetOSEClkFreq();
break;
case RCU_PeriphClk_OSIClk:
adc_raw_clock = RCU_GetOSIClkFreq();
break;
case RCU_PeriphClk_PLLClk:
adc_raw_clock = RCU_GetPLLClkFreq();
break;
case RCU_PeriphClk_PLLDivClk:
adc_raw_clock = RCU_GetPLLDivClkFreq();
break;
default:
return ERROR;
}
/* Расчет делителя частоты */
adc_clock_div = adc_raw_clock / (ClkMHz * __MHZ);
if(adc_clock_div < 1)
return ERROR;
/* Настройка источника тактирования и делителя */
RCU_ADCClkConfig(ClkSrc, (uint32_t)(adc_clock_div - 1), ENABLE);
/* Включение тактирования, если запрошено */
if(state == ENABLE)
{
RCU_ADCClkCmd(ENABLE);
}
return OK;
}
/**
* @brief Инкремент счетчика миллисекунд.
*/
static inline void millis_inc(void)
{
msTick+=msTickInc;
}
/**
* @brief Инкремент счетчика микросекунд.
*/
static inline void micros_inc(void)
{
usTick+=usTickInc;
}

78
MDK-ARM/Core/App/sysclk.h Normal file
View File

@@ -0,0 +1,78 @@
/**
******************************************************************************
* @file sysclk.h
* @author Разваляев Алексей
* @brief Драйвер тактирования системы на основе PLIB035.
* Данный файл содержит определения типов, структур и прототипы функций
* для работы с системным тактированием, включая:
* + Типы системных тиков
* + Структуру для управления коллбеками
* + Прототипы функций для инициализации тактирования
* + Функции настройки тактирования периферии
* + Функции работы со временем
*
******************************************************************************
*/
#ifndef __RCU_H
#define __RCU_H
//-- Includes ------------------------------------------------------------------
#include "plib035.h"
#include "retarget_conf.h"
//-- Defines -------------------------------------------------------------------
/** @brief Конвертация МГц в Гц */
#define __MHZ 1000000
/** @brief Максимальное количество коллбеков */
#define SYSCLK_NUMB_OF_CUSTOM_CALLBACKS 16
//-- Exported variables --------------------------------------------------------
extern __IO uint32_t msTick;
extern __IO uint32_t usTick;
//-- Types ---------------------------------------------------------------------
/**
* @brief Типы частот системных тиков
*/
typedef enum
{
SYSCLK_Tick_1us = 1000000, /**< Тик 1 микросекунда */
SYSCLK_Tick_10us = 100000, /**< Тик 10 микросекунд */
SYSCLK_Tick_100us = 10000, /**< Тик 100 микросекунд */
SYSCLK_Tick_1ms = 1000, /**< Тик 1 миллисекунда */
SYSCLK_Tick_10ms = 100, /**< Тик 10 миллисекунд */
SYSCLK_Tick_100ms = 10, /**< Тик 100 миллисекунд */
}SYSCLK_TickHz_TypeDef;
/**
* @brief Структура для управления системными коллбеками
*/
typedef struct
{
int CallbackInUse; /**< Количество активных коллбеков */
void (*Callback[SYSCLK_NUMB_OF_CUSTOM_CALLBACKS])(void); /**< Массив указателей на функции-коллбеки */
uint32_t CallbackPeriod[SYSCLK_NUMB_OF_CUSTOM_CALLBACKS]; /**< Периоды вызова коллбеков в мс */
uint32_t CallbackPrevMs[SYSCLK_NUMB_OF_CUSTOM_CALLBACKS]; /**< Время последнего вызова коллбеков */
} SYSCLK_CallbackHandleTypeDef;
//-- Exported functions prototypes ---------------------------------------------
/* Инициализация системного тактирования */
void sysclk_init(void);
/* Общий обработчик прерываний SysClock */
void sysclk_irq_handler(void);
/* Добавление периодического коллбека */
OperationStatus SYSCLK_Set_Callback(void (*Callback)(void), uint32_t PeriodInMs);
/* Получение текущего времени в миллисекундах */
uint32_t millis(void);
/* Получение текущего времени в микросекундах */
uint32_t micros(void);
/* Настройка тактирования АЦП */
OperationStatus rcu_set_clock_adc(RCU_PeriphClk_TypeDef ClkSrc, float ClkMHz, FunctionalState state);
#endif /*__RCU_H*/

423
MDK-ARM/Core/App/tmr.c Normal file
View File

@@ -0,0 +1,423 @@
/**
******************************************************************************
* @file tmr.c
* @author Разваляев Алексей
* @brief Драйвер таймеров на основе PLIB035.
* Этот файл содержит:
* + Инициализацию таймеров TMR0-TMR3
* + Запуск и остановку таймера
* + Блокирующие и неблокирующие задержки
* + Настройку callback-функций
* + Общий обработчик прерываний таймера
* + Псевдо-PLIB функции для инициализации таймеров
*
******************************************************************************
* @attention
*
* Использование этого драйвера предполагает наличие корректных настроек:
* - Определены конфигурационные структуры tmrx_config в periph_config.h
*
******************************************************************************
* @verbatim
==============================================================================
##### Как использовать этот драйвер #####
==============================================================================
1. Настройка в periph_config.h:
(+) Определите структуры tmr0_config, tmr1_config и т.д.
(+) Используйте макросы для задания периода:
• PERIOD_US(us) - период в микросекундах
• FREQ_HZ(hz) - частота в герцах
• LOAD(ticks, presc) - период в тиках с псевдопрескалером
2. Инициализация:
(+) tmr_init_first() - включает тактирование и сброс таймеров
(+) Для каждого таймера автоматически создается хендл (htmr0, htmr1...)
3. Работа с таймером:
(+) TMR_Start(&htmr, IT) / TMR_Stop(&htmr, IT) - запуск и остановка
(+) TMR_Set_Callback(&htmr, TMR_Callback_Update, func) - установка обработчика
(+) TMR_Get_Cnt(&htmr) - текущее значение (уже поделенное на прескалер)
(+) TMR_Get_Period(&htmr) - период (уже поделенный на прескалер)
4. Задержки:
(+) TMR_Delay(&htmr, ticks) - блокирующая задержка в тиках таймера с псевдопрескалером
(+) TMR_Delay_Start(&htmr, &var) + TMR_Delay_Done(&htmr, ticks, &var) - неблокирующая
задержка в тиках таймера с псевдопрескалером
5. Обработка прерываний:
(+) Callback-функция будет вызвана автоматически
==============================================================================
##### Особенности работы #####
==============================================================================
- Псевдопрескалер:
- Это программная абстракция, реальный счетчик всегда считает полные тики
- TMR_Get_Cnt() возвращает значение уже поделенное на (Prescaler+1)
- Позволяет увеличить максимальный период в (Prescaler+1) раз
- Пример: LOAD(1000, 99) даст реальный период в 100 раз больше
- Особенности счетчиков:
- Максимальный период: 42.9 сек при 100 МГц
- Таймеры используют убывающий счет (от LOAD до 0). Функция TMR_Get_Cnt
возвращает инвертированный счетчик (LOAD-VALUE)
- Задержки:
- TMR_Delay проверяет, что задержка < LOAD, иначе вернет ERROR
- Неблокирующие задержки используют "сырые" тики (без учета прескалера)
@endverbatim
******************************************************************************
*/
//-- Includes ------------------------------------------------------------------
#include "periph_config.h"
TMR_HandleTypeDef htmr0; /*!< Хендл TMR0 */
TMR_HandleTypeDef htmr1; /*!< Хендл TMR1 */
TMR_HandleTypeDef htmr2; /*!< Хендл TMR2 */
TMR_HandleTypeDef htmr3; /*!< Хендл TMR3 */
//-- Defines -------------------------------------------------------------------
//-- TMR Init functions --------------------------------------------------------
/**
* @brief Первичная инициализация таймеров TMR0-TMR3
* @details Настройка таймеров и хендлов: тактирование, прерывания
*/
void tmr_init_first(void)
{
#if (USE_TMR0==1)
RCU_APBClkCmd(RCU_APBClk_TMR0, ENABLE);
RCU_APBRstCmd(RCU_APBRst_TMR0, ENABLE);
htmr0.Instance = TMR0;
tmr_init(&htmr0, &tmr0_config);
if(htmr0.Config->IT == ENABLE)
{
NVIC_EnableIRQ(TMR0_IRQn);
}
#endif
#if (USE_TMR1==1)
RCU_APBClkCmd(RCU_APBClk_TMR1, ENABLE);
RCU_APBRstCmd(RCU_APBRst_TMR1, ENABLE);
htmr1.Instance = TMR1;
tmr_init(&htmr1, &tmr1_config);
if(htmr1.Config->IT == ENABLE)
{
NVIC_EnableIRQ(TMR1_IRQn);
}
#endif
#if (USE_TMR2==1)
RCU_APBClkCmd(RCU_APBClk_TMR2, ENABLE);
RCU_APBRstCmd(RCU_APBRst_TMR2, ENABLE);
htmr2.Instance = TMR2;
tmr_init(&htmr2, &tmr2_config);
if(htmr2.Config->IT == ENABLE)
{
NVIC_EnableIRQ(TMR2_IRQn);
}
#endif
#if (USE_TMR3==1)
RCU_APBClkCmd(RCU_APBClk_TMR3, ENABLE);
RCU_APBRstCmd(RCU_APBRst_TMR3, ENABLE);
htmr3.Instance = TMR3;
tmr_init(&htmr3, &tmr3_config);
if(htmr3.Config->IT == ENABLE)
{
NVIC_EnableIRQ(TMR3_IRQn);
}
#endif
}
/**
* @brief Инициализация таймера
* @param htmr указатель на хендл таймера
* @param NewConfig указатель на новую конфигурацию UART, иначе используется та, что в структуре
* @retval OperationStatus OK - если всё хорошо, ERROR - если ошибка
*/
OperationStatus tmr_init(TMR_HandleTypeDef *htmr, TMR_ExtInit_TypeDef *NewConfig)
{
if(!htmr || !htmr->Instance)
return ERROR;
if(NewConfig != NULL)
{
htmr->Config = NewConfig;
}
if(htmr->Config == NULL)
{
return ERROR;
}
TMR_Init(htmr->Instance, htmr->Config);
return OK;
}
/**
* @brief Установка коллбека таймера
* @param htmr указатель на хендл таймера
* @param CallbackType Тип коллбека
* @param UpdCallback Функция коллбека
* @retval void
*/
OperationStatus TMR_Set_Callback(TMR_HandleTypeDef* htmr, TMR_CallbackTypeDef CallbackType, void (*Callback)(void))
{
if(!htmr || !htmr->Instance || !htmr->Config)
{
return ERROR;
}
switch(CallbackType)
{
case TMR_Callback_Update:
htmr->Config->UpdCallback = Callback;
break;
default:
return ERROR;
}
return OK;
}
//-- TMR API functions --------------------------------------------------------
/**
* @brief Запуск таймера
* @param htmr указатель на хендл таймера
* @retval OperationStatus OK - если всё хорошо, ERROR - если ошибка
*/
OperationStatus TMR_Start(TMR_HandleTypeDef *htmr, FunctionalState IT)
{
if(!htmr || !htmr->Instance)
{
return ERROR;
}
TMR_ITCmd(htmr->Instance, IT);
TMR_Cmd(htmr->Instance, ENABLE);
return OK;
}
/**
* @brief Остановка таймера
* @param htmr указатель на хендл таймера
* @retval OperationStatus OK - если всё хорошо, ERROR - если ошибка
*/
OperationStatus TMR_Stop(TMR_HandleTypeDef *htmr, FunctionalState IT)
{
if(!htmr || !htmr->Instance)
{
return ERROR;
}
TMR_ITCmd(htmr->Instance, IT);
TMR_Cmd(htmr->Instance, DISABLE);
return OK;
}
/**
* @brief Получить счетчик таймера (с псевдопрескалером)
* @param htmr указатель на хендл таймера
* @retval Текущие значение счетчика с псевдопрескалером
* @details Если частота таймера 100 МГц, и псведопрескалер 100-1,
* то при реальном счетчике 100,000, вернется значение 1,000
* Также переводит счетчик в возрастающий (LOAD-VALUE)
*/
uint32_t TMR_Get_Cnt(TMR_HandleTypeDef *htmr)
{
if(!htmr || !htmr->Instance)
{
return ERROR;
}
uint32_t presc = htmr->Config->Prescaler+1;
uint32_t currtick = (htmr->Instance->LOAD - htmr->Instance->VALUE);
return currtick/presc;
}
/**
* @brief Получить период таймера (с псевдопрескалером)
* @param htmr указатель на хендл таймера
* @retval Период с псевдопрескалером
* @details Если частота таймера 100 МГц, и псведопрескалер 100-1, и период равен 1 мс,
* то при реальном периоде 100,000, вернется значение 1,000
*/
uint32_t TMR_Get_Period(TMR_HandleTypeDef *htmr)
{
if(!htmr || !htmr->Instance)
{
return ERROR;
}
uint32_t presc = htmr->Config->Prescaler+1;
uint32_t currload = htmr->Instance->LOAD;
return currload/presc;
}
//-- TMR Delays API functions -------------------------------------------------
/**
* @brief Задержка в тиках таймера (блокирующая).
* @param htmr Указатель на хендл таймера.
* @param delay Задержка в тиках таймера.
* @return OperationStatus.
* @details Формирует задержку с блокировкой программы.
*/
OperationStatus TMR_Delay(TMR_HandleTypeDef *htmr, uint32_t delay)
{
if(!htmr || !htmr->Instance)
return ERROR;
uint32_t presc = htmr->Config->Prescaler+1;
uint64_t delay_load = delay*presc;
if(delay_load > 0xFFFFFFFF)
{
delay_load = 0xFFFFFFFF;
}
if(delay_load >= htmr->Instance->LOAD)
{
return ERROR;
}
uint32_t starttick = htmr->Instance->VALUE;
while(1)
{
if((starttick - htmr->Instance->VALUE) >= delay_load)
{
return OK;
}
}
}
/**
* @brief Начать отсчет неблокирующей задержки.
* @param htmr Указатель на хендл таймера.
* @param var Указатель на переменную куда положить значение тиков.
* @return OperationStatus.
* @details Запоминает счетчик для начала отсчета неблокирующей задержки.
* @ref TMR_Delay_Done для проверки статуса задержки.
* @note Переменная содержит сырые тики, без преобразования под псевдопрескалер,
* поэтому в var могут быть неадекватно большие значения тиков
*/
OperationStatus TMR_Delay_Start(TMR_HandleTypeDef *htmr, uint32_t *var)
{
if(!htmr || !htmr->Instance)
return ERROR;
*var = htmr->Instance->VALUE;
return OK;
}
/**
* @brief Задержка в тиках таймера (неблокирующая).
* @param htmr Указатель на хендл таймера.
* @param delay Задержка в тиках таймера.
* @param var Указатель на переменную где хранится тики в момент начала задержки.
* @return 1 - задержка прошла. 0 - задержка в процессе.
* @details Формирует задержку с блокировкой программы.
* Перед ожиданием задержки надо инициализировать задержку @ref TMR_Delay_Start
* @note Функция считает задержку через сырые тики, поэтому в var могут быть
* неадекватно большие значения тиков
*/
int TMR_Delay_Done(TMR_HandleTypeDef *htmr, uint32_t delay, uint32_t *var)
{
if(!htmr || !htmr->Instance)
return 0;
uint32_t presc = htmr->Config->Prescaler+1;
uint64_t delay_load = delay*presc;
if(delay_load > 0xFFFFFFFF)
{
delay_load = 0xFFFFFFFF;
}
if(delay_load >= htmr->Instance->LOAD)
{
return 0;
}
if((*var - htmr->Instance->VALUE) >= delay_load)
{
return 1; // Задержка прошла
}
else
{
return 0;
}
}
//-- TMR Handler functions ----------------------------------------------------
/**
* @brief Обработчик прерывания таймера
* @param htmr указатель на хендл таймера
* @retval void
*/
void tmr_irq_handler(TMR_HandleTypeDef* htmr)
{
if((htmr->Instance == NULL) || (htmr->Config == NULL))
{
return;
}
/* Проверка флага прерывания таймера */
if (TMR_ITStatus(htmr->Instance) == SET)
{
/* Если есть коллбек вызываем его */
if(htmr->Config->UpdCallback)
htmr->Config->UpdCallback();
/* Очистка флага прерывания */
TMR_ITStatusClear(htmr->Instance);
}
}
//-- TMR pseudoPLIB functions -------------------------------------------------
/**
* @brief Инициализирует модуль TMRx согласно параметрам структуры InitStruct.
* @param TMRx Выбор таймера, где x=A|B
* @param InitStruct Указатель на структуру типа @ref TMR_ExtInit_TypeDef,
* которая содержит конфигурационную информацию
* @retval void
*/
void TMR_Init(TMR_TypeDef* TMRx, TMR_ExtInit_TypeDef* InitStruct)
{
uint32_t tim_clk = InitStruct->ClkFreq*__MHZ;
uint32_t presc = InitStruct->Prescaler+1;
if(InitStruct->PeriodUs)
{
TMR_PeriodConfig(TMRx, tim_clk, InitStruct->PeriodUs);
}
else if(InitStruct->FreqHz)
{
TMR_FreqConfig(TMRx, tim_clk, InitStruct->FreqHz);
}
else
{
uint64_t load = (uint64_t)InitStruct->Load*presc;
if(load > 0xFFFFFFFF)
load = 0xFFFFFFFF;
TMR_SetLoad(TMRx, load);
}
TMR_ITCmd(TMRx, InitStruct->IT);
TMR_DMAReqCmd(TMRx, InitStruct->DMAReq);
TMR_ADCSOCCmd(TMRx, InitStruct->ADCSOC);
TMR_ExtInputConfig(TMRx, InitStruct->ExtInput);
}

111
MDK-ARM/Core/App/tmr.h Normal file
View File

@@ -0,0 +1,111 @@
/**
******************************************************************************
* @file tmr.h
* @author Разваляев Алексей
* @brief Драйвер UART на основе PLIB035.
* Данный файл содержит определения типов, структур и прототипы функций
* для работы с TMR, включая:
* + Структуры и typedef для таймеров
* + Макросы для конфигурации периодов и частот
* + Прототипы функций для инициализации и API драйвера
*
******************************************************************************
*/
#ifndef __TMR_H
#define __TMR_H
//-- Includes ------------------------------------------------------------------
#include "plib035.h"
#include "retarget_conf.h"
//-- Defines -------------------------------------------------------------------
// Дефайны для режима таймера Период в мкс, Частота, ПсевдоПрескалер, Период в тиках
/** @brief Период в мкс */
#define PERIOD_US(_per_) (_per_), 0, 0, 0
/** @brief Период в Гц */
#define FREQ_HZ(_freq_) 0, (_freq_), 0, 0
/** @brief Период в прескалере и тиках */
#define LOAD(_load_, _presc_) 0, 0, (_presc_), (_load_)
//-- Types ---------------------------------------------------------------------
/**
* @brief Типы callback-функций TMR
*/
typedef enum
{
TMR_Callback_Update, /*!< Переполнение (опустошение) таймера */
} TMR_CallbackTypeDef;
/**
* @brief Расширенная конфигурация таймера
*/
typedef struct
{
float ClkFreq; /*!< Частота тактирования таймера в МГц */
uint32_t PeriodUs; /*!< Период таймера в мкс */
uint32_t FreqHz; /*!< Частота таймера в Гц */
uint32_t Prescaler; /*!< Псевдопрескалер */
uint32_t Load; /*!< Период таймера в тиках */
FunctionalState IT; /*!< Разрешение прерывания */
FunctionalState ADCSOC; /*!< Разрешение генерации запуска АЦП */
FunctionalState DMAReq; /*!< Разрешение генерации DMA-запросов */
TMR_ExtInput_TypeDef ExtInput; /*!< Настройка внешнего тактирования таймера */
void (*UpdCallback)(void); /*!< Callback-функция по прерыванию таймера */
} TMR_ExtInit_TypeDef;
/**
* @brief Хендл таймера
*/
typedef struct
{
TMR_TypeDef *Instance; /*!< Указатель на регистры таймера */
TMR_ExtInit_TypeDef *Config; /*!< Конфигурация таймера */
} TMR_HandleTypeDef;
//-- External handles ----------------------------------------------------------
extern TMR_HandleTypeDef htmr0;
extern TMR_HandleTypeDef htmr1;
extern TMR_HandleTypeDef htmr2;
extern TMR_HandleTypeDef htmr3;
//-- Exported functions prototypes ---------------------------------------------
/* Init functions */
/* Первичная инициализация таймеров */
void tmr_init_first(void);
/* Общий обработчик прерывания таймера */
void tmr_irq_handler(TMR_HandleTypeDef* htmr);
/* Инициализация TMRx */
OperationStatus tmr_init(TMR_HandleTypeDef *htmr, TMR_ExtInit_TypeDef *NewConfig);
/* Инициализация таймера (её нет в PLIB, поэтому она здесь) */
void TMR_Init(TMR_TypeDef* TMRx, TMR_ExtInit_TypeDef* InitStruct);
/* Установка callback-функции таймера */
OperationStatus TMR_Set_Callback(TMR_HandleTypeDef* htmr, TMR_CallbackTypeDef CallbackType, void (*Callback)(void));
/* API functions*/
/* Запуск таймера */
OperationStatus TMR_Start(TMR_HandleTypeDef *htmr, FunctionalState IT);
/* Остановка таймера */
OperationStatus TMR_Stop(TMR_HandleTypeDef *htmr, FunctionalState IT);
/*Получить счетчик таймера (с псевдопрескалером) */
uint32_t TMR_Get_Cnt(TMR_HandleTypeDef *htmr);
/* Получить период таймера (с псевдопрескалером) */
uint32_t TMR_Get_Period(TMR_HandleTypeDef *htmr);
/* Задержка в тиках таймера (блокирующая). */
OperationStatus TMR_Delay(TMR_HandleTypeDef *htmr, uint32_t delay);
/* Проверка завершения неблокирующей задержки. */
OperationStatus TMR_Delay_Start(TMR_HandleTypeDef *htmr, uint32_t *var);
/* Проверка завершения неблокирующей задержки. */
int TMR_Delay_Done(TMR_HandleTypeDef *htmr, uint32_t delay, uint32_t *var);
#endif /*__TMR_H*/

776
MDK-ARM/Core/App/uart.c Normal file
View File

@@ -0,0 +1,776 @@
/**
******************************************************************************
* @file uart.c
* @author Разваляев Алексей
* @brief Драйвер UART на основе PLIB035.
* Этот файл содержит:
* + Инициализацию UART0/UART1
* + Управление FIFO
* + Передачу и приём данных в blocking и interrupt режимах
* + Общий обработчик прерываний UART
* + Функции настройки GPIO для UART
* + Очередь передачи для предотвращения потери данных
*
******************************************************************************
* @attention
*
* Использование этого драйвера предполагает наличие корректных настроек:
* - Определены конфигурационные структуры uartx_config в periph_config.h
* - Определены пины TX/RX для UART0/UART1
*
******************************************************************************
* @verbatim
==============================================================================
##### Как использовать этот драйвер #####
==============================================================================
1. Настройка в periph_config.h:
(+) Определите uart0_config, uart1_config для нужных UART
(+) Используйте макросы для направления:
• UART_Direction_None - прием и передача отключены
• UART_Direction_RxTx - полный дуплекс
• UART_Direction_Tx - только передача
• UART_Direction_Rx - только прием
2. Инициализация:
(+) uart_init_first() - настройка GPIO, тактирования и прерываний
(+) uart_init(&huart, &config) - инициализация конкретного UART
3. Callback-функции:
(+) UART_Set_Callback(&huart, UART_Callback_Rx, func) - при завершении приема
(+) UART_Set_Callback(&huart, UART_Callback_Tx, func) - при завершении передачи
(+) UART_Set_Callback(&huart, UART_Callback_Idle, func) - при обнаружении IDLE
(+) UART_Set_Callback(&huart, UART_Callback_Error, func) - при ошибках
4. Запуск UART:
(+) UART_Start(&huart, TxFifoLevel, RxFifoLevel) - включение UART и настройка FIFO
5. Передача и приём данных:
- Режим Polling:
(+) UART_Transmit(&huart, buf, size, timeout) - блокирующая передача
(+) UART_Receive(&huart, buf, size, timeout) - блокирующий прием
- Режим Interrupt:
(+) UART_Transmit_IT(&huart, buf, size) - неблокирующая передача
(+) UART_Receive_IT(&huart, buf, size) - неблокирующий прием
6. Обработка прерываний:
(+) Прерывания обрабатывают TX FIFO, RX FIFO, ошибки и состояние IDLE
7. GPIO для UART:
(+) Пины настраиваются автоматически при вызове uart_init_first()
(+) При необходимости можно вызвать uart0_gpio_deinit() для восстановления
==============================================================================
##### Особенности работы #####
==============================================================================
- Очередь передачи (USE_TX_QUEUE):
- Циклический буфер на 32 сообщения (TX_QUEUE_SIZE)
- Предотвращает потерю данных при частой отправке
- Включается автоматически при USE_TX_QUEUE=1 в uart.h
- Сообщения обрабатываются последовательно по завершении предыдущей передачи
- FIFO и прерывания:
- Аппаратный FIFO 16 байт для приема и передачи
- Уровни прерываний настраиваются через TxFifoLevel и RxFifoLevel
- Прерывание TX FIFO генерируется когда FIFO не полон
- Прерывание RX FIFO генерируется когда FIFO не пуст
- Состояние IDLE:
- Обнаруживается по таймауту приема (32 бит-времени)
- Генерирует прерывание RecieveTimeout
- Полезно для определения конца пакета переменной длины
- Обработка ошибок:
- Обрабатываются все типы ошибок UART: фрейм, паритет, переполнение, break
- При ошибке вызывается ErrCallback и сбрасываются флаги ошибок
- Ошибки не останавливают работу UART
- GPIO автоматическая настройка:
- Пины TX/RX настраиваются в AltFunc режим при инициализации
- Поддерживаются стандартные пины (PB10/PB11 для UART0, PB8/PB9 для UART1)
- Режимы работы:
- Polling: простой, но блокирующий, подходит для инициализации и отладки
- Interrupt: неблокирующий, требует прерываний и поддерживает callback-функций
- Queue: расширенный interrupt режим с буферизацией сообщений
@endverbatim
******************************************************************************
*/
//-- Includes ------------------------------------------------------------------
#include "periph_config.h"
UART_HandleTypeDef huart0; /*!< Хендл UART0 */
UART_HandleTypeDef huart1; /*!< Хендл UART1 */
//-- Private function prototypes -----------------------------------------------
static int __uart_fifo_receive(UART_HandleTypeDef *huart, uint8_t it_mode);
static int __uart_fifo_transmit(UART_HandleTypeDef *huart, uint8_t it_mode);
#if USE_TX_QUEUE==1
static void __uart_tx_queue_process(UART_HandleTypeDef *huart);
static OperationStatus __uart_tx_queue_push(UART_HandleTypeDef *huart, const uint8_t *buf, uint16_t size);
static OperationStatus __uart_tx_queue_pop(UART_HandleTypeDef *huart);
#endif
//-- Defines -------------------------------------------------------------------
//-- UART Init functions -------------------------------------------------------
/**
* @brief Первичная инициализация UART (UART0 / UART1)
* @details Настройка UART и хендлов: GPIO, тактирование и прерывания
*/
void uart_init_first(void)
{
#if (USE_UART0==1)
// Настройка пинов для UART0
uart0_gpio_init();
// Включаем тактирование UART0
RCU_UARTClkConfig(UART0_Num, RCU_PeriphClk_PLLClk, 0, DISABLE);
RCU_UARTClkCmd(UART0_Num, ENABLE);
UART_DeInit(UART0);
// Инициализируем UART0
huart0.Instance = UART0;
uart_init(&huart0, &uart0_config);
NVIC_EnableIRQ(UART0_TD_IRQn);
NVIC_EnableIRQ(UART0_RX_IRQn);
NVIC_EnableIRQ(UART0_TX_IRQn);
NVIC_EnableIRQ(UART0_E_RT_IRQn);
#endif
#if (USE_UART1==1)
// Настройка пинов для UART1
uart1_gpio_init();
// Включаем тактирование UART1
RCU_UARTClkConfig(UART1_Num, RCU_PeriphClk_PLLClk, 0, DISABLE);
RCU_UARTClkCmd(UART1_Num, ENABLE);
UART_DeInit(UART1);
// Инициализируем UART1
NVIC_EnableIRQ(UART1_TD_IRQn);
NVIC_EnableIRQ(UART1_RX_IRQn);
NVIC_EnableIRQ(UART1_TX_IRQn);
NVIC_EnableIRQ(UART1_E_RT_IRQn);
huart1.Instance = UART1;
uart_init(&huart1, &uart1_config);
#endif
}
/**
* @brief Инициализация UART
* @param htmr указатель на хендл UART
* @param NewConfig указатель на новую конфигурацию UART, иначе используется та, что в структуре
* @retval OperationStatus OK - если всё хорошо, ERROR - если ошибка
*/
OperationStatus uart_init(UART_HandleTypeDef *huart, UART_ExtInit_TypeDef *NewConfig)
{
if(!huart || !huart->Instance)
return ERROR;
if(NewConfig != NULL)
{
huart->Config = NewConfig;
}
if(huart->Config == NULL)
{
return ERROR;
}
UART_Init(huart->Instance, &huart->Config->UART_Init);
return OK;
}
/**
* @brief Установка коллбека UART
* @param htmr указатель на хендл UART
* @param CallbackType Тип коллбека
* @param Callback Функция коллбека
* @retval void
*/
OperationStatus UART_Set_Callback(UART_HandleTypeDef* huart, UART_CallbackTypeDef CallbackType, void (*Callback)(void))
{
if (!huart || !huart->Instance || !huart->Config)
return ERROR;
switch(CallbackType)
{
case UART_Callback_Rx:
huart->Config->RxCallback = Callback;
break;
case UART_Callback_Tx:
huart->Config->TxCallback = Callback;
break;
case UART_Callback_Idle:
huart->Config->IdleCallback = Callback;
break;
case UART_Callback_Error:
huart->Config->ErrCallback = Callback;
break;
default:
return ERROR;
}
return OK;
}
//-- UART API functions --------------------------------------------------------
/**
* @brief Запуск UART и инициализация FIFO
* @param huart указатель на хендл UART
* @param TxFifoLevel уровень прерывания TX FIFO
* @param RxFifoLevel уровень прерывания RX FIFO
* @retval OperationStatus OK - если успешно, ERROR - при ошибке
*/
OperationStatus UART_Start(UART_HandleTypeDef *huart, UART_FIFOLevel_TypeDef TxFifoLevel, UART_FIFOLevel_TypeDef RxFifoLevel)
{
if (!huart)
return ERROR;
UART_ITFIFOLevelRxConfig(huart->Instance, RxFifoLevel);
UART_ITFIFOLevelTxConfig(huart->Instance, TxFifoLevel);
huart->TxBufPtr = NULL;
huart->TxCount = 0;
huart->TxSize = 0;
huart->TxBusy = 0;
huart->RxBufPtr = NULL;
huart->RxCount = 0;
huart->RxSize = 0;
huart->RxBusy = 0;
#if USE_TX_QUEUE==1
huart->TxQueue.QueueHead = 0;
huart->TxQueue.QueueTail = 0;
huart->TxQueue.QueueCount = 0;
huart->TxQueue.QueueEmpty = 1;
huart->TxQueue.QueueFull = 0;
for (uint8_t i = 0; i < TX_QUEUE_SIZE; i++)
{
huart->TxQueue.Queue[i].Buf = NULL;
huart->TxQueue.Queue[i].Size = 0;
huart->TxQueue.Queue[i].InUse = 0;
}
#endif
UART_Cmd(huart->Instance, ENABLE);
return OK;
}
/**
* @brief Передача данных по UART (блокирующий режим)
* @param huart указатель на хендл UART
* @param buf указатель на буфер данных
* @param size размер данных в байтах
* @param timeout таймаут ожидания (мс)
* @retval OperationStatus OK - если успешно, ERROR - при ошибке или таймауте
*/
OperationStatus UART_Transmit(UART_HandleTypeDef *huart,
uint8_t *buf,
uint16_t size,
uint32_t timeout)
{
if (!huart || !buf || size == 0)
return ERROR;
// Если TX занят, возвращаем ERROR
if (huart->TxBusy)
return ERROR;
huart->TxBufPtr = buf;
huart->TxSize = size;
huart->TxCount = 0;
huart->TxBusy = 1;
uint32_t starttick = millis();
// Отправляем пока всё не отправится
while(__uart_fifo_transmit(huart, 0) == 0)
{
if(millis() - starttick > timeout)
return ERROR;
}
return OK;
}
/**
* @brief Приём данных по UART (блокирующий режим)
* @param huart указатель на хендл UART
* @param buf указатель на буфер приёма
* @param size количество принимаемых байт
* @param timeout таймаут ожидания (мс)
* @retval OperationStatus OK - если успешно, ERROR - при ошибке или таймауте
*/
OperationStatus UART_Receive(UART_HandleTypeDef *huart,
uint8_t *buf,
uint16_t size,
uint32_t timeout)
{
if (!huart || !buf || size == 0)
return ERROR;
// Если RX занят, возвращаем ERROR
if (huart->RxBusy)
return ERROR;
huart->RxBufPtr = buf;
huart->RxSize = size;
huart->RxCount = 0;
huart->RxBusy = 1;
uint32_t starttick = millis();
// Принимаем всё пока всё не примется
while(__uart_fifo_transmit(huart, 0) == 0)
{
if(millis() - starttick > timeout)
return ERROR;;
}
return OK;
}
/**
* @brief Передача данных по UART (прерывания)
* @param huart указатель на хендл UART
* @param buf указатель на буфер данных
* @param size размер данных в байтах
* @retval OperationStatus OK - если успешно, ERROR - если передача уже идёт
*/
OperationStatus UART_Transmit_IT(UART_HandleTypeDef *huart,
uint8_t *buf,
uint16_t size)
{
if (!huart || !buf || size == 0)
return ERROR;
#if USE_TX_QUEUE==1
// Автоматически используем очередь
if (huart->TxQueue.QueueFull)
return ERROR;
OperationStatus status = __uart_tx_queue_push(huart, buf, size);
if (status != OK)
return ERROR;
if (!huart->TxBusy)
{
__uart_tx_queue_process(huart);
}
return OK;
#else
// Без очереди
// Если TX занят, возвращаем ERROR
if (huart->TxBusy)
return ERROR;
huart->TxBufPtr = buf;
huart->TxSize = size;
huart->TxCount = 0;
huart->TxBusy = 1;
// Включаем прерывания по TX FIFO
UART_ITCmd(huart->Instance, UART_ITSource_TxFIFOLevel, ENABLE);
__uart_fifo_transmit(huart, 1);
return OK;
#endif
}
/**
* @brief Приём данных по UART (прерывания)
* @param huart указатель на хендл UART
* @param buf указатель на буфер приёма
* @param size количество принимаемых байт
* @retval OperationStatus OK - если успешно, ERROR - если приём уже идёт
*/
OperationStatus UART_Receive_IT(UART_HandleTypeDef *huart,
uint8_t *buf,
uint16_t size)
{
if (!huart || !buf || size == 0)
return ERROR;
// Если RX занят, возвращаем ERROR
if (huart->RxBusy)
return ERROR;
huart->RxBufPtr = buf;
huart->RxSize = size;
huart->RxCount = 0;
huart->RxBusy = 1;
// Включаем только RX прерывания
UART_ITCmd(huart->Instance,
UART_ITSource_RxFIFOLevel |
UART_ITSource_RecieveTimeout |
UART_ITSource_ErrorFrame |
UART_ITSource_ErrorParity |
UART_ITSource_ErrorOverflow |
UART_ITSource_ErrorBreak,
ENABLE);
return OK;
}
//-- UART Handler functions ---------------------------------------------------
/**
* @brief Общий обработчик прерываний UART
* @param huart указатель на хендл UART
* @details Обрабатывает RX/TX FIFO, ошибки и события Idle
* @retval void
*/
void uart_irq_handler(UART_HandleTypeDef *huart)
{
if (!huart || !huart->Instance || !huart->Config)
return;
// GPIO_SetBits(GPIOA, GPIO_Pin_7);
UART_TypeDef *uart = huart->Instance;
uint32_t mis = uart->MIS;
// Ошибки
if (mis & (UART_ITSource_ErrorFrame |
UART_ITSource_ErrorParity |
UART_ITSource_ErrorOverflow |
UART_ITSource_ErrorBreak))
{
if (huart->Config->ErrCallback)
huart->Config->ErrCallback();
UART_ErrorStatusClear(uart, UART_Error_All);
UART_ITStatusClear(uart, mis);
}
// RX FIFO
if (mis & UART_ITSource_RxFIFOLevel)
{
// Принимаем
if(__uart_fifo_receive(huart, 1))
{ // Когда всё приняли, флаги сбросили внутри функции
}
UART_ITStatusClear(uart, UART_ITSource_RxFIFOLevel);
}
// IDLE / Receive Timeout
if (mis & UART_ITSource_RecieveTimeout)
{
UART_ITStatusClear(uart, UART_ITSource_RecieveTimeout);
huart->RxBusy = 0;
// Выключаем RX прерывания до следующего вызова UART_Receive_IT
UART_ITCmd(uart,
UART_ITSource_RxFIFOLevel |
UART_ITSource_RecieveTimeout,
DISABLE);
if (huart->Config->IdleCallback)
huart->Config->IdleCallback();
}
// TX FIFO
if (mis & UART_ITSource_TxFIFOLevel)
{
// Отправляем
if(__uart_fifo_transmit(huart, 1))
{ // Когда всё отправили, флаги сбросили внутри функции
}
UART_ITStatusClear(uart, UART_ITSource_TxFIFOLevel);
}
// Конец передачи
if (mis & UART_ITSource_TransmitDone)
{
UART_ITStatusClear(uart, UART_ITSource_TransmitDone);
huart->TxBusy = 0;
if (huart->Config->TxCallback)
huart->Config->TxCallback();
#if USE_TX_QUEUE==1
// Если есть очередь, обрабатываем следующий пакет
__uart_tx_queue_process(huart);
#endif
}
// GPIO_ClearBits(GPIOA, GPIO_Pin_7);
}
//-- UART GPIO functions -------------------------------------------------------
/**
* @brief Инициализация GPIO для UART0
*/
void uart0_gpio_init(void)
{
#if USE_UART0==1
// Получаем структуры
GPIO_Init_TypeDef *tx_config = gpio_get_init(UART0_GPIO_Port, UART0_Tx_Pin);
GPIO_Init_TypeDef *rx_config = gpio_get_init(UART0_GPIO_Port, UART0_Rx_Pin);
// TX пин
if (uart0_config.UART_Init.Tx == ENABLE && tx_config != NULL)
{
GPIO_StructInit(tx_config);
tx_config->AltFunc = ENABLE;
tx_config->Digital = ENABLE;
tx_config->Pin = UART0_Tx_Pin;
GPIO_Init(UART0_GPIO_Port, tx_config);
}
// RX пин
if (uart0_config.UART_Init.Rx == ENABLE && rx_config != NULL)
{
GPIO_StructInit(rx_config);
rx_config->AltFunc = ENABLE;
rx_config->Digital = ENABLE;
rx_config->Pin = UART0_Rx_Pin;
GPIO_Init(UART0_GPIO_Port, rx_config);
}
#endif
}
/**
* @brief Деинициализация GPIO для UART0
*/
void uart0_gpio_deinit(void)
{
#if USE_UART0==1
// Получаем структуры
GPIO_Init_TypeDef *tx_config = gpio_get_init(UART0_GPIO_Port, UART0_Tx_Pin);
GPIO_Init_TypeDef *rx_config = gpio_get_init(UART0_GPIO_Port, UART0_Rx_Pin);
// Восстанавливаем оригинальные настройки из таблицы
if (tx_config != NULL)
{
GPIO_StructInit(rx_config);
rx_config->Pin = UART0_Tx_Pin;
GPIO_Init(UART0_GPIO_Port, tx_config);
}
if (rx_config != NULL)
{
GPIO_StructInit(rx_config);
rx_config->Pin = UART0_Rx_Pin;
GPIO_Init(UART0_GPIO_Port, rx_config);
}
#endif
}
/**
* @brief Инициализация GPIO для UART1
*/
void uart1_gpio_init(void)
{
#if USE_UART1==1
// Получаем структуры
GPIO_Init_TypeDef *tx_config = gpio_get_init(UART1_GPIO_Port, UART1_Tx_Pin);
GPIO_Init_TypeDef *rx_config = gpio_get_init(UART1_GPIO_Port, UART1_Rx_Pin);
// TX пин
if (uart1_config.UART_Init.Tx == ENABLE && tx_config != NULL)
{
GPIO_StructInit(tx_config);
tx_config->AltFunc = ENABLE;
tx_config->Digital = ENABLE;
tx_config->Pin = UART1_Tx_Pin;
GPIO_Init(UART1_GPIO_Port, tx_config);
}
// RX пин
if (uart1_config.UART_Init.Rx == ENABLE && rx_config != NULL)
{
;
GPIO_StructInit(rx_config);
rx_config->AltFunc = ENABLE;
rx_config->Digital = ENABLE;
rx_config->Pin = UART1_Rx_Pin;
GPIO_Init(UART1_GPIO_Port, rx_config);
}
#endif
}
/**
* @brief Деинициализация GPIO для UART1
*/
void uart1_gpio_deinit(void)
{
#if USE_UART1==1
// Получаем структуры
GPIO_Init_TypeDef *tx_config = gpio_get_init(UART1_GPIO_Port, UART1_Tx_Pin);
GPIO_Init_TypeDef *rx_config = gpio_get_init(UART1_GPIO_Port, UART1_Rx_Pin);
// Восстанавливаем оригинальные настройки из таблицы
if (tx_config != NULL)
{
GPIO_StructInit(rx_config);
rx_config->Pin = UART1_Tx_Pin;
GPIO_Init(UART1_GPIO_Port, tx_config);
}
if (rx_config != NULL)
{
GPIO_StructInit(rx_config);
rx_config->Pin = UART1_Rx_Pin;
GPIO_Init(UART1_GPIO_Port, rx_config);
}
#endif
}
//-- UART private functions ----------------------------------------------------
/**
* @brief Приём данных из RX FIFO
* @param huart указатель на хендл UART
* @param it_mode режим работы (0 — polling, 1 — прерывания)
* @retval int 1 — приём завершён, 0 — данные ещё принимаются
*/
static int __uart_fifo_receive(UART_HandleTypeDef *huart, uint8_t it_mode)
{
while (!UART_FlagStatus(huart->Instance, UART_Flag_RxFIFOEmpty) &&
huart->RxCount < huart->RxSize)
{
huart->RxBufPtr[huart->RxCount++] = UART_RecieveData(huart->Instance);
if (huart->RxCount == huart->RxSize)
{
huart->RxBusy = 0;
if(it_mode)
{
// Выключаем RX прерывания
UART_ITCmd(huart->Instance,
UART_ITSource_RxFIFOLevel |
UART_ITSource_RecieveTimeout,
DISABLE);
}
if (huart->Config->RxCallback)
huart->Config->RxCallback();
return 1;
}
}
return 0;
}
/**
* @brief Передача данных в TX FIFO
* @param huart указатель на хендл UART
* @param it_mode режим работы (0 — polling, 1 — прерывания)
* @retval int 1 — передача завершена, 0 — данные ещё передаются
*/
static int __uart_fifo_transmit(UART_HandleTypeDef *huart, uint8_t it_mode)
{
while (!UART_FlagStatus(huart->Instance, UART_Flag_TxFIFOFull) &&
huart->TxCount < huart->TxSize)
{
UART_SendData(huart->Instance, huart->TxBufPtr[huart->TxCount++]);
}
if (huart->TxCount == huart->TxSize)
{
if(it_mode)
{
// Выключаем FIFO прерывание
UART_ITCmd(huart->Instance, UART_ITSource_TxFIFOLevel, DISABLE);
// Включаем TransmitDone прерывание, коллбек будет по нему
UART_ITCmd(huart->Instance, UART_ITSource_TransmitDone, ENABLE);
}
else
{
while(!UART_FlagStatus(huart->Instance, UART_Flag_TxFIFOEmpty)); // ждем пока не опустошится буфер
huart->TxBusy = 0;
if (huart->Config->TxCallback)
huart->Config->TxCallback();
}
return 1;
}
return 0;
}
#if USE_TX_QUEUE==1
static void __uart_tx_queue_process(UART_HandleTypeDef *huart)
{
if (!huart->TxBusy && !huart->TxQueue.QueueEmpty)
{
__uart_tx_queue_pop(huart);
}
}
static OperationStatus __uart_tx_queue_push(UART_HandleTypeDef *huart, const uint8_t *buf, uint16_t size)
{
if (!huart || !buf || size == 0 || huart->TxQueue.QueueFull)
return ERROR;
huart->TxQueue.Queue[huart->TxQueue.QueueHead].Buf = buf;
huart->TxQueue.Queue[huart->TxQueue.QueueHead].Size = size;
huart->TxQueue.Queue[huart->TxQueue.QueueHead].InUse = 1;
huart->TxQueue.QueueHead = (huart->TxQueue.QueueHead + 1) % TX_QUEUE_SIZE;
huart->TxQueue.QueueCount++;
huart->TxQueue.QueueEmpty = 0;
if (huart->TxQueue.QueueCount == TX_QUEUE_SIZE)
huart->TxQueue.QueueFull = 1;
return OK;
}
static OperationStatus __uart_tx_queue_pop(UART_HandleTypeDef *huart)
{
if (!huart || huart->TxQueue.QueueEmpty)
return ERROR;
const uint8_t *buf = huart->TxQueue.Queue[huart->TxQueue.QueueTail].Buf;
uint16_t size = huart->TxQueue.Queue[huart->TxQueue.QueueTail].Size;
if (huart->TxBusy)
return ERROR;
huart->TxBufPtr = buf;
huart->TxSize = size;
huart->TxCount = 0;
huart->TxBusy = 1;
UART_ITCmd(huart->Instance, UART_ITSource_TxFIFOLevel, ENABLE);
__uart_fifo_transmit(huart, 1);
huart->TxQueue.Queue[huart->TxQueue.QueueTail].Buf = NULL;
huart->TxQueue.Queue[huart->TxQueue.QueueTail].Size = 0;
huart->TxQueue.Queue[huart->TxQueue.QueueTail].InUse = 0;
huart->TxQueue.QueueTail = (huart->TxQueue.QueueTail + 1) % TX_QUEUE_SIZE;
huart->TxQueue.QueueCount--;
huart->TxQueue.QueueFull = 0;
if (huart->TxQueue.QueueCount == 0)
huart->TxQueue.QueueEmpty = 1;
return OK;
}
#endif

166
MDK-ARM/Core/App/uart.h Normal file
View File

@@ -0,0 +1,166 @@
/**
******************************************************************************
* @file uart.h
* @author Разваляев Алексей
* @brief Драйвер UART на основе PLIB035.
* Данный файл содержит определения типов, структур и прототипы функций
* для работы с UART, включая:
* + Структуры и typedef для UART
* + Макросы для конфигурации направления передачи
* + Прототипы функций для инициализации и API драйвера
*
******************************************************************************
*/
#ifndef __UART_H
#define __UART_H
//-- Includes ------------------------------------------------------------------
#include "plib035.h"
#include "retarget_conf.h"
//-- Defines -------------------------------------------------------------------
// Дефайны для режима направления UART
// Дефайны для режима пина RxEnable, TxEnable
/** @brief Направление: никакого */
#define UART_Direction_None DISABLE, DISABLE
/** @brief Направление: Rx и Tx */
#define UART_Direction_RxTx ENABLE, ENABLE
/** @brief Направление: только Tx */
#define UART_Direction_Tx DISABLE, ENABLE
/** @brief Направление: только Rx */
#define UART_Direction_Rx ENABLE, DISABLE
// Дефайны для пинов UART
#define UART0_Tx_Pin GPIO_Pin_10 /**< PB10 — UART0 Tx */
#define UART0_Rx_Pin GPIO_Pin_11 /**< PB11 — UART0 Rx */
#define UART0_GPIO_Port GPIOB /**< GPIO порт UART0 */
#define UART1_Tx_Pin GPIO_Pin_8 /**< PB8 — UART1 Tx */
#define UART1_Rx_Pin GPIO_Pin_9 /**< PB9 — UART1 Rx */
#define UART1_GPIO_Port GPIOB /**< GPIO порт UART1 */
#define USE_TX_QUEUE 1 /*!< Использовать очередь для отправки, чтобы не терять данные */
#define TX_QUEUE_SIZE 32 /*!< Размер очереди в кол-ве буферов для отправки */
//-- Types ---------------------------------------------------------------------
/**
* @brief Типы callback-функций UART
*/
typedef enum
{
UART_Callback_Rx, /*!< Приём данных завершён */
UART_Callback_Tx, /*!< Передача данных завершена */
UART_Callback_Idle, /*!< Обнаружено состояние IDLE */
UART_Callback_Error, /*!< Ошибка UART */
} UART_CallbackTypeDef;
/**
* @brief Расширенная конфигурация UART
*/
typedef struct
{
UART_Init_TypeDef UART_Init; /*!< Стандартная конфигурация UART из PLIB */
/* Callback функции */
void (*RxCallback)(void); /*!< Вызывается при приёме полного сообщения */
void (*TxCallback)(void); /*!< Вызывается при окончании передачи */
void (*IdleCallback)(void); /*!< Вызывается при IDLE линии RX */
void (*ErrCallback)(void); /*!< Вызывается при ошибке UART */
} UART_ExtInit_TypeDef;
/**
* @brief Структура элемента очереди
*/
typedef struct {
const uint8_t *Buf; /*!< Указатель на буфер данных */
uint16_t Size; /*!< Размер данных в буфере */
uint8_t InUse; /*!< Флаг занятости элемента */
} UART_QueueItemTypeDef;
/**
* @brief Структура очереди UART
*/
typedef struct {
UART_QueueItemTypeDef Queue[TX_QUEUE_SIZE]; /*!< Циклический буфер очереди */
uint8_t QueueHead; /*!< Индекс головы очереди (куда добавляем) */
uint8_t QueueTail; /*!< Индекс хвоста очереди (откуда берем) */
uint8_t QueueCount; /*!< Количество элементов в очереди */
uint8_t QueueEmpty; /*!< Флаг пустой очереди */
uint8_t QueueFull; /*!< Флаг полной очереди */
} UART_TxQueueTypeDef;
/**
* @brief Хендл UART
*/
typedef struct
{
UART_TypeDef *Instance; /*!< Регистры UART */
UART_ExtInit_TypeDef *Config; /*!< Конфигурация UART */
/* ===== TX ===== */
const uint8_t *TxBufPtr; /*!< Указатель на буфер передачи */
uint16_t TxCount; /*!< Счётчик переданных байт */
uint16_t TxSize; /*!< Размер передаваемых данных */
volatile uint8_t TxBusy; /*!< Флаг занятости TX */
/* ===== RX ===== */
uint8_t *RxBufPtr; /*!< Указатель на буфер приёма */
uint16_t RxCount; /*!< Счётчик принятых байт */
uint16_t RxSize; /*!< Размер принимаемых данных */
volatile uint8_t RxBusy; /*!< Флаг занятости RX */
#if (USE_TX_QUEUE==1)
/* == TX QUEUE == */
UART_TxQueueTypeDef TxQueue;
#endif
} UART_HandleTypeDef;
//-- External handles ----------------------------------------------------------
extern UART_HandleTypeDef huart0;
extern UART_HandleTypeDef huart1;
//-- Exported functions prototypes ---------------------------------------------
/* Init functions */
/* Первичная инициализация UART (UART0 / UART1) */
void uart_init_first(void);
/* Инициализация UARTx */
OperationStatus uart_init(UART_HandleTypeDef *huart, UART_ExtInit_TypeDef *NewConfig);
/* Общий обработчик прерываний UART */
void uart_irq_handler(UART_HandleTypeDef *huart);
/* Инициализация GPIO для UART0 */
void uart0_gpio_init(void);
/* Деинициализация GPIO для UART0 */
void uart0_gpio_deinit(void);
/* Инициализация GPIO для UART1 */
void uart1_gpio_init(void);
/* Деинициализация GPIO для UART1 */
void uart1_gpio_deinit(void);
/* API functions*/
/* Установка callback-функции UART */
OperationStatus UART_Set_Callback(UART_HandleTypeDef *huart, UART_CallbackTypeDef CallbackType, void (*Callback)(void));
/* Запуск UART и настройка FIFO */
OperationStatus UART_Start(UART_HandleTypeDef *huart, UART_FIFOLevel_TypeDef TxFifoLevel, UART_FIFOLevel_TypeDef RxFifoLevel);
/* Передача данных по UART (блокирующий режим) */
OperationStatus UART_Transmit(UART_HandleTypeDef *huart, uint8_t *buf, uint16_t size, uint32_t timeout);
/* Приём данных по UART (блокирующий режим) */
OperationStatus UART_Receive(UART_HandleTypeDef *huart, uint8_t *buf, uint16_t size, uint32_t timeout);
/* Передача данных по UART (режим прерываний) */
OperationStatus UART_Transmit_IT(UART_HandleTypeDef *huart, uint8_t *buf, uint16_t size);
/* Приём данных по UART (режим прерываний) */
OperationStatus UART_Receive_IT(UART_HandleTypeDef *huart, uint8_t *buf, uint16_t size);
#endif /*__UART_H*/

412
MDK-ARM/Core/App/vk035_it.c Normal file
View File

@@ -0,0 +1,412 @@
/**
******************************************************************************
* @file vk035_it.c
* @author Разваляев Алексей
* @brief Обработчики прерываний для микроконтроллера 1921ВК035.
* Этот файл содержит:
* + Обработчики прерываний периферии (UART, TMR, ADC, DMA и др.)
* + Обработчики исключений Cortex-M4 (HardFault, SysTick и др.)
* + Интеграцию с драйверами периферии через вызовы обработчиков
* + Управление системным временем через SysTick
*
******************************************************************************
* @attention
*
* Использование этого файла предполагает наличие корректных настроек:
* - Определены USE_xxx макросы в periph_config.h для включения периферии
* - Инициализированы соответствующие драйверы периферии
* - Включены прерывания в NVIC через функции драйверов
*
******************************************************************************
* @verbatim
==============================================================================
##### Как использовать этот файл #####
==============================================================================
1. Настройка периферии (periph_config.h):
(+) Определить USE_TMRx для используемых таймеров (0-3)
(+) Определить USE_UARTx для используемых UART (0-1)
(+) Определить USE_ADC_SEQx для используемых секвенсоров ADC (0-1)
2. Инициализация драйверов:
(+) Вызвать функции инициализации драйверов (uart_init_first, tmr_init_first и т.д.)
- Драйверы автоматически включат соответствующие прерывания в NVIC
3. Обработка прерываний:
(+) Прерывания периферии автоматически перенаправляются в драйверы
(+) Системные прерывания (SysTick) управляют временем millis/micros
(+) Обработчики исключений обрабатывают критические ошибки
4. Интеграция с драйверами:
(+) UART прерывания -> uart_irq_handler(&huartx)
(+) TMR прерывания -> tmr_irq_handler(&htmrx)
(+) ADC SEQ прерывания -> adc_seq_irq_handler(&hadc, SEQ_Num)
5. Системное время:
(+) SysTick_Handler() автоматически обновляет millis() и micros()
(+) Период SysTick настраивается в sysclk_init()
6. Особенности работы:
(+) Неиспользуемые обработчики оставлены пустыми для будущего расширения
(+) Критические ошибки (HardFault и др.) уходят в бесконечный цикл
(+) Прерывания обрабатываются неблокирующе с минимальными задержками
@endverbatim
******************************************************************************
*/
//-- Includes ------------------------------------------------------------------
#include "main.h"
/******************************************************************************/
/* 1921VK035 Peripheral Interrupt Handlers */
/* Add here the Interrupt Handlers for the used peripherals. */
/******************************************************************************/
#if USE_WDT==1
void WDT_IRQHandler(void)
{
}
#endif
void GPIOA_IRQHandler(void)
{
}
void GPIOB_IRQHandler(void)
{
}
#if USE_TMR0==1
void TMR0_IRQHandler(void)
{
tmr_irq_handler(&htmr0);
}
#endif
#if USE_TMR1==1
void TMR1_IRQHandler(void)
{
tmr_irq_handler(&htmr1);
}
#endif
#if USE_TMR2==1
void TMR2_IRQHandler(void)
{
tmr_irq_handler(&htmr2);
}
#endif
#if USE_TMR3==1
void TMR3_IRQHandler(void)
{
tmr_irq_handler(&htmr3);
}
#endif
#if USE_UART0==1
void UART0_TD_IRQHandler(void)
{
uart_irq_handler(&huart0);
}
void UART0_RX_IRQHandler(void)
{
uart_irq_handler(&huart0);
}
void UART0_TX_IRQHandler(void)
{
uart_irq_handler(&huart0);
}
void UART0_E_RT_IRQHandler(void)
{
uart_irq_handler(&huart0);
}
#endif
#if USE_UART1==1
void UART1_TD_IRQHandler(void)
{
uart_irq_handler(&huart1);
}
void UART1_RX_IRQHandler(void)
{
uart_irq_handler(&huart1);
}
void UART1_TX_IRQHandler(void)
{
uart_irq_handler(&huart1);
}
void UART1_E_RT_IRQHandler(void)
{
uart_irq_handler(&huart1);
}
#endif
#if USE_SPI==1
void SPI_RO_RT_IRQHandler(void)
{
}
void SPI_RX_IRQHandler(void)
{
}
void SPI_TX_IRQHandler(void)
{
}
#endif
#if USE_I2C==1
void I2C_IRQHandler(void)
{
}
#endif
#if USE_ECAP0==1
void ECAP0_IRQHandler(void)
{
}
#endif
#if USE_ECAP1==1
void ECAP1_IRQHandler(void)
{
}
#endif
#if USE_ECAP2==1
void ECAP2_IRQHandler(void)
{
}
#endif
#if USE_PWM0==1
void PWM0_IRQHandler(void)
{
}
void PWM0_HD_IRQHandler(void)
{
}
void PWM0_TZ_IRQHandler(void)
{
}
#endif
#if USE_PWM1==1
void PWM1_IRQHandler(void)
{
}
void PWM1_HD_IRQHandler(void)
{
}
void PWM1_TZ_IRQHandler(void)
{
}
#endif
#if USE_PWM2==1
void PWM2_IRQHandler(void)
{
}
void PWM2_HD_IRQHandler(void)
{
}
void PWM2_TZ_IRQHandler(void)
{
}
#endif
#if USE_QEP==1
void QEP_IRQHandler(void)
{
}
#endif
#if USE_ADC_SEQ0==1
void ADC_SEQ0_IRQHandler(void)
{
adc_seq_irq_handler(&hadc, ADC_SEQ_Num_0);
}
#endif
#if USE_ADC_SEQ1==1
void ADC_SEQ1_IRQHandler(void)
{
adc_seq_irq_handler(&hadc, ADC_SEQ_Num_1);
}
#endif
#if (USE_ADC_DC0==1) || (USE_ADC_DC1==1) || (USE_ADC_DC2==1) || (USE_ADC_DC3==1)
void ADC_DC_IRQHandler(void)
{
}
#endif
#if USE_ADC_CAN==1
void CAN0_IRQHandler(void)
{
}
void CAN1_IRQHandler(void)
{
}
void CAN2_IRQHandler(void)
{
}
void CAN3_IRQHandler(void)
{
}
void CAN4_IRQHandler(void)
{
}
void CAN5_IRQHandler(void)
{
}
void CAN6_IRQHandler(void)
{
}
void CAN7_IRQHandler(void)
{
}
void CAN8_IRQHandler(void)
{
}
void CAN9_IRQHandler(void)
{
}
void CAN10_IRQHandler(void)
{
}
void CAN11_IRQHandler(void)
{
}
void CAN12_IRQHandler(void)
{
}
void CAN13_IRQHandler(void)
{
}
void CAN14_IRQHandler(void)
{
}
void CAN15_IRQHandler(void)
{
}
#endif
void DMA_CH0_IRQHandler(void)
{
}
void DMA_CH1_IRQHandler(void)
{
}
void DMA_CH2_IRQHandler(void)
{
}
void DMA_CH3_IRQHandler(void)
{
}
void DMA_CH4_IRQHandler(void)
{
}
void DMA_CH5_IRQHandler(void)
{
}
void DMA_CH6_IRQHandler(void)
{
}
void DMA_CH7_IRQHandler(void)
{
}
void DMA_CH8_IRQHandler(void)
{
}
void DMA_CH9_IRQHandler(void)
{
}
void DMA_CH10_IRQHandler(void)
{
}
void DMA_CH11_IRQHandler(void)
{
}
void DMA_CH12_IRQHandler(void)
{
}
void DMA_CH13_IRQHandler(void)
{
}
void DMA_CH14_IRQHandler(void)
{
}
void DMA_CH15_IRQHandler(void)
{
}
void FPU_IRQHandler(void)
{
}
void RCU_IRQHandler(void)
{
}
void MFLASH_IRQHandler(void)
{
}
/******************************************************************************/
/* Cortex-M4 Processor Interruption and Exception Handlers */
/******************************************************************************/
/**
* @brief This function handles Non maskable interrupt.
*/
void NMI_Handler(void)
{
while (1)
{
}
}
/**
* @brief This function handles Hard fault interrupt.
*/
void HardFault_Handler(void)
{
while (1)
{
}
}
/**
* @brief This function handles Memory management fault.
*/
void MemManage_Handler(void)
{
while (1)
{
}
}
/**
* @brief This function handles Prefetch fault, memory access fault.
*/
void BusFault_Handler(void)
{
while (1)
{
}
}
/**
* @brief This function handles Undefined instruction or illegal state.
*/
void UsageFault_Handler(void)
{
while (1)
{
}
}
/**
* @brief This function handles System service call via SWI instruction.
*/
void SVC_Handler(void)
{
}
/**
* @brief This function handles Debug monitor.
*/
void DebugMon_Handler(void)
{
}
/**
* @brief This function handles Pendable request for system service.
*/
void PendSV_Handler(void)
{
}
/**
* @brief This function handles System tick timer.
*/
void SysTick_Handler(void)
{
sysclk_irq_handler();
}

View File

@@ -25,7 +25,7 @@
#define TRACKERS_ENABLE ///< Включить трекеры #define TRACKERS_ENABLE ///< Включить трекеры
#define SERIAL_TRACE_ENABLE ///< Включить serial трассировку #define SERIAL_TRACE_ENABLE ///< Включить serial трассировку
#define RTT_TRACE_ENABLE ///< Включить serial трассировку через RTT #define RTT_TRACE_ENABLE ///< Включить serial трассировку через RTT
#define SWO_TRACE_ENABLE ///< Включить serial трассировку через SWO //#define SWO_TRACE_ENABLE ///< Включить serial трассировку через SWO
/** /**
* @brief Уровень log serial трассировки @ref log_printf * @brief Уровень log serial трассировки @ref log_printf
* - LOG_LEVEL == 0 - логирование отключено (макрос пустой) * - LOG_LEVEL == 0 - логирование отключено (макрос пустой)

View File

@@ -0,0 +1,415 @@
/*==============================================================================
* @file periph_config.h
* @author Разваляев Алексей
*------------------------------------------------------------------------------
* Общий файл конфигурации периферии проекта.
*
* Содержит:
* + Глобальные флаги включения периферии (USE_...)
* + Конфигурации тактирования и источников RCU
* + Таблицы конфигурации GPIO
* + Конфигурационные структуры для периферии:
* - GPIO
* - UART
* - TMR (таймеры)
* - ADC (SEQ и DC)
* - DMA
* - NVIC (приоритеты прерываний)
*
* Используется драйверами:
* - gpio.c
* - uart.c
* - tmr.c
* - adc.c
* - dma.c
*
* Реализация инициализации периферии находится в соответствующих *.c файлах.
*==============================================================================
*/
#pragma once
//-- Includes ------------------------------------------------------------------
#include "sysclk.h"
#include "gpio.h"
#include "uart.h"
#include "tmr.h"
#include "adc.h"
#include "i2c.h"
/* Обработчик ошибок */
void Error_Handler(void);
//-- Общие Конфигурации -------------------------------------------------------
// 0 - использовать периферию
// 1 - не использовать
/* UART */
#define USE_UART0 0 /*!< Использовать UART0 */
#define USE_UART1 1 /*!< Использовать UART1 */
/* Timers */
#define USE_TMR0 1 /*!< Использовать Таймер 0 */
#define USE_TMR1 1 /*!< Использовать Таймер 1 */
#define USE_TMR2 1 /*!< Использовать Таймер 2 */
#define USE_TMR3 0 /*!< Использовать Таймер 3 */
/* ADC */
#define USE_ADC_SEQ0 0 /*!< Использовать Секвенсор 0 */
#define USE_ADC_SEQ1 1 /*!< Использовать Секвенсор 1 */
#define USE_ADC_DC0 0 /*!< Использовать Компаратор 0 */
#define USE_ADC_DC1 0 /*!< Использовать Компаратор 1 */
#define USE_ADC_DC2 0 /*!< Использовать Компаратор 2 */
#define USE_ADC_DC3 0 /*!< Использовать Компаратор 3 */
/* I2C */
#define USE_I2C 0 /*!< Использовать I2C */
/** @note Для RETARGET надо объявить этот дефайн в проекте
Options for Target -> C/C++ -> Defines
*/
//#define RETARGET // закоментирован - отключен,
// // разкоментирован - включен
//#define RETARGET_USE_ITM // закоментирован - использовать UART,
// // разкоментирован - использовать ITM
// Для дальнейшей настройки RETARGET -> retarget_conf.h
//-- RCU Конфигурации ---------------------------------------------------------
/** @brief Источник тактирования МК
* @note Система всегда стартует с внутреннего МК и после потом переходит на PLL и заданный здесь источник
Поменять тактировние при старте можно в system_K1921VK035.h
*/
static RCU_PLL_Ref_TypeDef SYSCLK_Oscil_Type = RCU_PLL_Ref_OSEClk;
/** @brief Желаемая частота тактирования МК в МГц*/
#define SYSCLK_CORE_CLOCK_MHZ 100
/** @brief Частота тиков uwTick тактирования МК */
static SYSCLK_TickHz_TypeDef SYSCLK_TickType = SYSCLK_Tick_1ms;
//-- GPIO Конфигурации --------------------------------------------------------
/** @note
Note:
Периферия сама настроит нужные пины в gpiox_config на альтернативные функции
*/
/** @brief Конфигурации пинов порта GPIOA */
static GPIO_Init_TypeDef gpioa_config[] = {
// Pin, Mode, OutMode, InMode, PullMode, DriveMode
{ GPIO_Pin_0, GPIO_PinMode_Unused, GPIO_OutMode_PP, GPIO_InMode_Schmitt, GPIO_PullMode_Disable, GPIO_DriveMode_HighFast },
{ GPIO_Pin_1, GPIO_PinMode_Unused, GPIO_OutMode_PP, GPIO_InMode_Schmitt, GPIO_PullMode_Disable, GPIO_DriveMode_HighFast },
{ GPIO_Pin_2, GPIO_PinMode_Unused, GPIO_OutMode_PP, GPIO_InMode_Schmitt, GPIO_PullMode_Disable, GPIO_DriveMode_HighFast },
{ GPIO_Pin_3, GPIO_PinMode_Unused, GPIO_OutMode_PP, GPIO_InMode_Schmitt, GPIO_PullMode_Disable, GPIO_DriveMode_HighFast },
{ GPIO_Pin_4, GPIO_PinMode_Unused, GPIO_OutMode_PP, GPIO_InMode_Schmitt, GPIO_PullMode_Disable, GPIO_DriveMode_HighFast },
{ GPIO_Pin_5, GPIO_PinMode_Unused, GPIO_OutMode_PP, GPIO_InMode_Schmitt, GPIO_PullMode_Disable, GPIO_DriveMode_HighFast },
{ GPIO_Pin_6, GPIO_PinMode_Unused, GPIO_OutMode_PP, GPIO_InMode_Schmitt, GPIO_PullMode_Disable, GPIO_DriveMode_HighFast },
{ GPIO_Pin_7, GPIO_PinMode_Output, GPIO_OutMode_PP, GPIO_InMode_Schmitt, GPIO_PullMode_Disable, GPIO_DriveMode_HighFast },
{ GPIO_Pin_8, GPIO_PinMode_Output, GPIO_OutMode_PP, GPIO_InMode_Schmitt, GPIO_PullMode_Disable, GPIO_DriveMode_HighFast },
{ GPIO_Pin_9, GPIO_PinMode_Unused, GPIO_OutMode_PP, GPIO_InMode_Schmitt, GPIO_PullMode_Disable, GPIO_DriveMode_HighFast },
{ GPIO_Pin_10, GPIO_PinMode_Unused, GPIO_OutMode_PP, GPIO_InMode_Schmitt, GPIO_PullMode_Disable, GPIO_DriveMode_HighFast },
{ GPIO_Pin_11, GPIO_PinMode_Unused, GPIO_OutMode_PP, GPIO_InMode_Schmitt, GPIO_PullMode_Disable, GPIO_DriveMode_HighFast },
{ GPIO_Pin_12, GPIO_PinMode_Unused, GPIO_OutMode_PP, GPIO_InMode_Schmitt, GPIO_PullMode_Disable, GPIO_DriveMode_HighFast },
{ GPIO_Pin_13, GPIO_PinMode_Unused, GPIO_OutMode_PP, GPIO_InMode_Schmitt, GPIO_PullMode_Disable, GPIO_DriveMode_HighFast },
{ GPIO_Pin_14, GPIO_PinMode_Unused, GPIO_OutMode_PP, GPIO_InMode_Schmitt, GPIO_PullMode_Disable, GPIO_DriveMode_HighFast },
{ GPIO_Pin_15, GPIO_PinMode_Unused, GPIO_OutMode_PP, GPIO_InMode_Schmitt, GPIO_PullMode_Disable, GPIO_DriveMode_HighFast },
};
/** @brief Конфигурации пинов порта GPIOB */
static GPIO_Init_TypeDef gpiob_config[] = {
// Pin, Mode, OutMode, InMode, PullMode, DriveMode
{ GPIO_Pin_0, GPIO_PinMode_Unused, GPIO_OutMode_PP, GPIO_InMode_Schmitt, GPIO_PullMode_Disable, GPIO_DriveMode_HighFast },
{ GPIO_Pin_1, GPIO_PinMode_Unused, GPIO_OutMode_PP, GPIO_InMode_Schmitt, GPIO_PullMode_Disable, GPIO_DriveMode_HighFast },
{ GPIO_Pin_2, GPIO_PinMode_Unused, GPIO_OutMode_PP, GPIO_InMode_Schmitt, GPIO_PullMode_Disable, GPIO_DriveMode_HighFast },
{ GPIO_Pin_3, GPIO_PinMode_Unused, GPIO_OutMode_PP, GPIO_InMode_Schmitt, GPIO_PullMode_Disable, GPIO_DriveMode_HighFast },
{ GPIO_Pin_4, GPIO_PinMode_Unused, GPIO_OutMode_PP, GPIO_InMode_Schmitt, GPIO_PullMode_Disable, GPIO_DriveMode_HighFast },
{ GPIO_Pin_5, GPIO_PinMode_Unused, GPIO_OutMode_PP, GPIO_InMode_Schmitt, GPIO_PullMode_Disable, GPIO_DriveMode_HighFast },
{ GPIO_Pin_6, GPIO_PinMode_Unused, GPIO_OutMode_PP, GPIO_InMode_Schmitt, GPIO_PullMode_Disable, GPIO_DriveMode_HighFast },
{ GPIO_Pin_7, GPIO_PinMode_Unused, GPIO_OutMode_PP, GPIO_InMode_Schmitt, GPIO_PullMode_Disable, GPIO_DriveMode_HighFast },
{ GPIO_Pin_8, GPIO_PinMode_Unused, GPIO_OutMode_PP, GPIO_InMode_Schmitt, GPIO_PullMode_Disable, GPIO_DriveMode_HighFast },
{ GPIO_Pin_9, GPIO_PinMode_Unused, GPIO_OutMode_PP, GPIO_InMode_Schmitt, GPIO_PullMode_Disable, GPIO_DriveMode_HighFast },
{ GPIO_Pin_10, GPIO_PinMode_Unused, GPIO_OutMode_PP, GPIO_InMode_Schmitt, GPIO_PullMode_Disable, GPIO_DriveMode_HighFast },
{ GPIO_Pin_11, GPIO_PinMode_Unused, GPIO_OutMode_PP, GPIO_InMode_Schmitt, GPIO_PullMode_Disable, GPIO_DriveMode_HighFast },
{ GPIO_Pin_12, GPIO_PinMode_Unused, GPIO_OutMode_PP, GPIO_InMode_Schmitt, GPIO_PullMode_Disable, GPIO_DriveMode_HighFast },
{ GPIO_Pin_13, GPIO_PinMode_Unused, GPIO_OutMode_PP, GPIO_InMode_Schmitt, GPIO_PullMode_Disable, GPIO_DriveMode_HighFast },
{ GPIO_Pin_14, GPIO_PinMode_Unused, GPIO_OutMode_PP, GPIO_InMode_Schmitt, GPIO_PullMode_Disable, GPIO_DriveMode_HighFast },
{ GPIO_Pin_15, GPIO_PinMode_Unused, GPIO_OutMode_PP, GPIO_InMode_Schmitt, GPIO_PullMode_Disable, GPIO_DriveMode_HighFast },
};
//-- UART Конфигурации --------------------------------------------------------
#if USE_UART0==1
static UART_ExtInit_TypeDef uart0_config = {
//StopBit, ParityBit, DataWidth, BaudRate, FIFO, Direction
UART_StopBit_1, UART_ParityBit_Disable, UART_DataWidth_8, 115200, DISABLE, UART_Direction_RxTx,
//RxCallback TxCallback IdleCallback ErrCallback
NULL, NULL, NULL, NULL
};
#endif
#if USE_UART1==1
static UART_ExtInit_TypeDef uart1_config = {
//StopBit, ParityBit, DataWidth, BaudRate, FIFO, Direction
UART_StopBit_1, UART_ParityBit_Disable, UART_DataWidth_8, 115200, DISABLE, UART_Direction_RxTx,
//RxCallback TxCallback IdleCallback ErrCallback
NULL, NULL, NULL, NULL
};
#endif
//-- TMR Конфигурации ---------------------------------------------------------
/** @note Макросы для задания периода:
* - LOAD(Period, Prescaler) - период в тиках и прескалер*
* - FREQ_HZ(Hz) - период таймера в Герцах
* - PERIOD_US(us) - период в микросекундах
* * Т.к. аппаратного прескалера нет, используется программный.
* Получить тики будто бы они с прескалером можно функциями TMR_Get_Cnt, TMR_Get_Period
*/
#if USE_TMR0==1
static TMR_ExtInit_TypeDef tmr0_config = {
//SystemCoreClock, Period Update
SYSCLK_CORE_CLOCK_MHZ, LOAD(0xFFFFFFFF, SYSCLK_CORE_CLOCK_MHZ-1),
//IT ADCSOC DMAReq ExtInput
DISABLE, DISABLE, DISABLE, TMR_ExtInput_Disable
};
#endif
#if USE_TMR1==1
static TMR_ExtInit_TypeDef tmr1_config = {
//SystemCoreClock, Period Update
SYSCLK_CORE_CLOCK_MHZ, FREQ_HZ(10),
//IT ADCSOC DMAReq ExtInput
DISABLE, DISABLE, DISABLE, TMR_ExtInput_Disable
};
#endif
#if USE_TMR2==1
static TMR_ExtInit_TypeDef tmr2_config = {
//SystemCoreClock, Period Update
SYSCLK_CORE_CLOCK_MHZ, PERIOD_US(1000000),
//IT ADCSOC DMAReq ExtInput
DISABLE, DISABLE, DISABLE, TMR_ExtInput_Disable
};
#endif
#if USE_TMR3==1
static TMR_Init_TypeDef tmr3_config = {
//SystemCoreClock, Period Update
SYSCLK_CORE_CLOCK_MHZ, PERIOD_US(1000),
//IT ADCSOC DMAReq ExtInput
DISABLE, DISABLE, DISABLE, TMR_ExtInput_Disable
};
#endif
//-- ADC Конфигурации -----------------------------------------------------
/** @brief Источник тактирования АЦП */
static RCU_PeriphClk_TypeDef ADC_ClockSource = RCU_PeriphClk_PLLClk;
/** @brief Желаемая частота тактирования АЦП в МГц*/
static float ADC_ClockMHz = 12.5;
/** @brief Пины каких каналов инициализировать для АЦП */
static ADC_ChannelEnableTypeDef adc_ch_config = {
//Channel 0, Channel 1, Channel 2, Channel 3
ENABLE, ENABLE, ENABLE, ENABLE,
};
//-- ADC SEQ Конфигурации -----------------------------------------------------
#if USE_ADC_SEQ0==1
static ADC_SEQ_ExtInit_TypeDef adc_seq0_config = {
//StartEvent, SWStartEn
ADC_SEQ_StartEvent_SwReq, ENABLE,
//Req[0], Req[1], Req[2], Req[3]
ADC_CH_Num_0, ADC_CH_Num_1, ADC_CH_Num_2, ADC_CH_Num_3,
//ReqMax, ReqAverage, ReqAverageEn
ADC_SEQ_ReqNum_1, ADC_SEQ_Average_2, DISABLE,
//RestartCount, RestartAverageEn, RestartTimer (в тиках ADC_ClockMHz)
0, DISABLE, 0,
//DCEn[0], DCEn[1], DCEn[2], DCEn[3]
DISABLE, DISABLE, DISABLE, DISABLE,
//DMAFIFOLevel, DMAEn
ADC_SEQ_DMAFIFOLevel_1, DISABLE,
//IT, ITCount BufferCircular
ENABLE, 0, ENABLE,
//SEQCpltCallback, BuffHalfCallback, BuffFullCallback, ErrorCallback
NULL, NULL, NULL, NULL,
};
#endif
#if USE_ADC_SEQ1==1
static ADC_SEQ_ExtInit_TypeDef adc_seq1_config = {
//StartEvent, SWStartEn
ADC_SEQ_StartEvent_SwReq, ENABLE,
//Req[0], Req[1], Req[2], Req[3]
ADC_CH_Num_0, ADC_CH_Num_1, ADC_CH_Num_2, ADC_CH_Num_3,
//ReqMax, ReqAverage, ReqAverageEn
ADC_SEQ_ReqNum_1, ADC_SEQ_Average_2, DISABLE,
//RestartCount, RestartAverageEn, RestartTimer (в тиках ADC_ClockMHz)
0, DISABLE, 0,
//DCEn[0], DCEn[1], DCEn[2], DCEn[3]
DISABLE, DISABLE, DISABLE, DISABLE,
//DMAFIFOLevel, DMAEn
ADC_SEQ_DMAFIFOLevel_1, DISABLE,
//IT, ITCount BufferCircular
ENABLE, 0, ENABLE,
//SEQCpltCallback, BuffHalfCallback, BuffFullCallback, ErrorCallback
NULL, NULL, NULL, NULL,
};
#endif
//-- ADC DC Конфигурации ------------------------------------------------------
#if USE_ADC_DC0==1
static ADC_DC_ExtInit_TypeDef adc_dc0_config = {
//DCOutput
DISABLE,
//ThresholdLow, ThresholdHigh
0, 0,
//Source, Channel, Mode, Condition
ADC_DC_Source_EOC, ADC_CH_Num_1, ADC_DC_Mode_Multiple, ADC_DC_Condition_Low,
//IT
DISABLE,
//DC_TrigCallback, ErrorCallback
NULL, NULL
};
#endif
#if USE_ADC_DC1==1
static ADC_DC_ExtInit_TypeDef adc_dc1_config = {
//DCOutput
DISABLE,
//ThresholdLow, ThresholdHigh
0, 0,
//Source, Channel, Mode, Condition
ADC_DC_Source_EOC, ADC_CH_Num_1, ADC_DC_Mode_Multiple, ADC_DC_Condition_Low,
//IT
DISABLE,
//DC_TrigCallback, ErrorCallback
NULL, NULL
};
#endif
#if USE_ADC_DC2==1
static ADC_DC_ExtInit_TypeDef adc_dc2_config = {
//DCOutput
DISABLE,
//ThresholdLow, ThresholdHigh
0, 0,
//Source, Channel, Mode, Condition
ADC_DC_Source_EOC, ADC_CH_Num_1, ADC_DC_Mode_Multiple, ADC_DC_Condition_Low,
//IT
DISABLE,
//DC_TrigCallback, ErrorCallback
NULL, NULL
};
#endif
#if USE_ADC_DC3==1
static ADC_DC_ExtInit_TypeDef adc_dc3_config = {
//DCOutput
DISABLE,
//ThresholdLow, ThresholdHigh
0, 0,
//Source, Channel, Mode, Condition
ADC_DC_Source_EOC, ADC_CH_Num_1, ADC_DC_Mode_Multiple, ADC_DC_Condition_Low,
//IT
DISABLE,
//DC_TrigCallback, ErrorCallback
NULL, NULL
};
#endif
//-- I2C Конфигурации ---------------------------------------------------------
#if USE_I2C==1
static I2C_ExtInit_TypeDef i2c_config = {
//Mode, HSMode, Addr10Bit, RegSize, SlaveAddr
I2C_Mode_Master, DISABLE, DISABLE, I2C_RegSize_8bit, 0x00,
//Timeout, TimeoutClkDiv, TimeoutLoad
DISABLE, I2C_TimeoutClkDiv_Div4, 0x00,
//AlertResponse, GlobalCall
DISABLE, DISABLE,
//I2CFreq, FSFreq, HSFreq
SYSCLK_CORE_CLOCK_MHZ * __MHZ, I2C_STANDARD_MODE, I2C_HIGH_SPEED_MODE,
//TxCallback, RxCallback, AddrCallback, ErrCallback
NULL, NULL, NULL, NULL
};
#endif
//-- NVIC Конфигурации --------------------------------------------------------
/** @brief Приоритеты прерываний, 0 - самый высокий приоритет*/
static uint8_t NCIV_Priorities[] =
{
[GPIOA_IRQn] = 0,
[GPIOB_IRQn] = 0,
[TMR0_IRQn] = 0,
[TMR1_IRQn] = 0,
[TMR2_IRQn] = 0,
[TMR3_IRQn] = 0,
[UART0_TD_IRQn] = 0,
[UART0_RX_IRQn] = 0,
[UART0_TX_IRQn] = 0,
[UART0_E_RT_IRQn] = 0,
[UART1_TD_IRQn] = 0,
[UART1_RX_IRQn] = 0,
[UART1_TX_IRQn] = 0,
[UART1_E_RT_IRQn] = 0,
[SPI_RO_RT_IRQn] = 0,
[SPI_RX_IRQn] = 0,
[SPI_TX_IRQn] = 0,
[I2C_IRQn] = 0,
[ECAP0_IRQn] = 0,
[ECAP1_IRQn] = 0,
[ECAP2_IRQn] = 0,
[PWM0_IRQn] = 0,
[PWM0_HD_IRQn] = 0,
[PWM0_TZ_IRQn] = 0,
[PWM1_IRQn] = 0,
[PWM1_HD_IRQn] = 0,
[PWM1_TZ_IRQn] = 0,
[PWM2_IRQn] = 0,
[PWM2_HD_IRQn] = 0,
[PWM2_TZ_IRQn] = 0,
[QEP_IRQn] = 0,
[ADC_SEQ0_IRQn] = 0,
[ADC_SEQ1_IRQn] = 0,
[ADC_DC_IRQn] = 0,
[CAN0_IRQn] = 0,
[CAN1_IRQn] = 0,
[CAN2_IRQn] = 0,
[CAN3_IRQn] = 0,
[CAN4_IRQn] = 0,
[CAN5_IRQn] = 0,
[CAN6_IRQn] = 0,
[CAN7_IRQn] = 0,
[CAN8_IRQn] = 0,
[CAN9_IRQn] = 0,
[CAN10_IRQn] = 0,
[CAN11_IRQn] = 0,
[CAN12_IRQn] = 0,
[CAN13_IRQn] = 0,
[CAN14_IRQn] = 0,
[CAN15_IRQn] = 0,
[DMA_CH0_IRQn] = 0,
[DMA_CH1_IRQn] = 0,
[DMA_CH2_IRQn] = 0,
[DMA_CH3_IRQn] = 0,
[DMA_CH4_IRQn] = 0,
[DMA_CH5_IRQn] = 0,
[DMA_CH6_IRQn] = 0,
[DMA_CH7_IRQn] = 0,
[DMA_CH8_IRQn] = 0,
[DMA_CH9_IRQn] = 0,
[DMA_CH10_IRQn] = 0,
[DMA_CH11_IRQn] = 0,
[DMA_CH12_IRQn] = 0,
[DMA_CH13_IRQn] = 0,
[DMA_CH14_IRQn] = 0,
[DMA_CH15_IRQn] = 0,
[WDT_IRQn] = 0,
[RCU_IRQn] = 0,
[MFLASH_IRQn] = 0,
[FPU_IRQn] = 0,
};
static inline void NVIC_SetAllPriorities(void)
{
for(int i = 0; i < sizeof(NCIV_Priorities); i++)
{
NVIC_SetPriority((IRQn_Type)i, NCIV_Priorities[i]);
}
}
//-- Utils --------------------------------------------------------------------

View File

@@ -153,82 +153,47 @@
<Ww> <Ww>
<count>0</count> <count>0</count>
<WinNumber>1</WinNumber> <WinNumber>1</WinNumber>
<ItemText>hadc</ItemText> <ItemText>msTick,0x0A</ItemText>
</Ww> </Ww>
<Ww> <Ww>
<count>1</count> <count>1</count>
<WinNumber>1</WinNumber> <WinNumber>1</WinNumber>
<ItemText>ADC</ItemText> <ItemText>huart1</ItemText>
</Ww> </Ww>
<Ww> <Ww>
<count>2</count> <count>2</count>
<WinNumber>1</WinNumber> <WinNumber>1</WinNumber>
<ItemText>uwTick,0x0A</ItemText> <ItemText>hadc</ItemText>
</Ww> </Ww>
<Ww> <Ww>
<count>3</count> <count>3</count>
<WinNumber>1</WinNumber> <WinNumber>1</WinNumber>
<ItemText>(uwTick-start) &lt; ms</ItemText> <ItemText>tickbuff</ItemText>
</Ww> </Ww>
<Ww> <Ww>
<count>4</count> <count>4</count>
<WinNumber>1</WinNumber> <WinNumber>1</WinNumber>
<ItemText>ms,0x0A</ItemText> <ItemText>adc_seq1_config</ItemText>
</Ww> </Ww>
<Ww> <Ww>
<count>5</count> <count>5</count>
<WinNumber>1</WinNumber> <WinNumber>1</WinNumber>
<ItemText>local_time()</ItemText> <ItemText>ch3_config</ItemText>
</Ww> </Ww>
<Ww> <Ww>
<count>6</count> <count>6</count>
<WinNumber>1</WinNumber> <WinNumber>1</WinNumber>
<ItemText>GPIOA</ItemText> <ItemText>starttick - htmr-&gt;Instance-&gt;VALUE,0x0A</ItemText>
</Ww> </Ww>
<Ww> <Ww>
<count>7</count> <count>7</count>
<WinNumber>1</WinNumber> <WinNumber>1</WinNumber>
<ItemText>gpioa_config</ItemText> <ItemText>gpiob_config</ItemText>
</Ww> </Ww>
<Ww> <Ww>
<count>8</count> <count>8</count>
<WinNumber>1</WinNumber> <WinNumber>1</WinNumber>
<ItemText>gpiob_config</ItemText> <ItemText>seq0_buff</ItemText>
</Ww>
<Ww>
<count>9</count>
<WinNumber>1</WinNumber>
<ItemText>rxbuff</ItemText>
</Ww>
<Ww>
<count>10</count>
<WinNumber>1</WinNumber>
<ItemText>*var - htmr-&gt;TMR-&gt;VALUE,0x0A</ItemText>
</Ww>
<Ww>
<count>11</count>
<WinNumber>1</WinNumber>
<ItemText>delay_load,0x0A</ItemText>
</Ww>
<Ww>
<count>12</count>
<WinNumber>1</WinNumber>
<ItemText>adc_raw_clock,0x0A</ItemText>
</Ww>
<Ww>
<count>13</count>
<WinNumber>1</WinNumber>
<ItemText>adc_clock_div,0x0A</ItemText>
</Ww>
<Ww>
<count>14</count>
<WinNumber>1</WinNumber>
<ItemText>ClkMHz</ItemText>
</Ww>
<Ww>
<count>15</count>
<WinNumber>1</WinNumber>
<ItemText>adc_buff</ItemText>
</Ww> </Ww>
</WatchWindow1> </WatchWindow1>
<Tracepoint> <Tracepoint>
@@ -276,30 +241,10 @@
<SystemViewers> <SystemViewers>
<Entry> <Entry>
<Name>System Viewer\ADC</Name> <Name>System Viewer\ADC</Name>
<WinId>35899</WinId>
</Entry>
<Entry>
<Name>System Viewer\GPIOA</Name>
<WinId>35901</WinId>
</Entry>
<Entry>
<Name>System Viewer\GPIOB</Name>
<WinId>35903</WinId>
</Entry>
<Entry>
<Name>System Viewer\RCU</Name>
<WinId>35905</WinId> <WinId>35905</WinId>
</Entry> </Entry>
<Entry> <Entry>
<Name>System Viewer\TMR0</Name> <Name>System Viewer\GPIOB</Name>
<WinId>35902</WinId>
</Entry>
<Entry>
<Name>System Viewer\TMR2</Name>
<WinId>35900</WinId>
</Entry>
<Entry>
<Name>System Viewer\UART1</Name>
<WinId>35904</WinId> <WinId>35904</WinId>
</Entry> </Entry>
</SystemViewers> </SystemViewers>
@@ -435,6 +380,18 @@
<tvExp>0</tvExp> <tvExp>0</tvExp>
<tvExpOptDlg>0</tvExpOptDlg> <tvExpOptDlg>0</tvExpOptDlg>
<bDave2>0</bDave2> <bDave2>0</bDave2>
<PathWithFileName>.\Core\App\i2c.c</PathWithFileName>
<FilenameWithoutPath>i2c.c</FilenameWithoutPath>
<RteFlg>0</RteFlg>
<bShared>0</bShared>
</File>
<File>
<GroupNumber>2</GroupNumber>
<FileNumber>11</FileNumber>
<FileType>1</FileType>
<tvExp>0</tvExp>
<tvExpOptDlg>0</tvExpOptDlg>
<bDave2>0</bDave2>
<PathWithFileName>.\Core\App\sysclk.c</PathWithFileName> <PathWithFileName>.\Core\App\sysclk.c</PathWithFileName>
<FilenameWithoutPath>sysclk.c</FilenameWithoutPath> <FilenameWithoutPath>sysclk.c</FilenameWithoutPath>
<RteFlg>0</RteFlg> <RteFlg>0</RteFlg>
@@ -442,7 +399,7 @@
</File> </File>
<File> <File>
<GroupNumber>2</GroupNumber> <GroupNumber>2</GroupNumber>
<FileNumber>11</FileNumber> <FileNumber>12</FileNumber>
<FileType>1</FileType> <FileType>1</FileType>
<tvExp>0</tvExp> <tvExp>0</tvExp>
<tvExpOptDlg>0</tvExpOptDlg> <tvExpOptDlg>0</tvExpOptDlg>
@@ -462,7 +419,7 @@
<RteFlg>0</RteFlg> <RteFlg>0</RteFlg>
<File> <File>
<GroupNumber>3</GroupNumber> <GroupNumber>3</GroupNumber>
<FileNumber>12</FileNumber> <FileNumber>13</FileNumber>
<FileType>5</FileType> <FileType>5</FileType>
<tvExp>0</tvExp> <tvExp>0</tvExp>
<tvExpOptDlg>0</tvExpOptDlg> <tvExpOptDlg>0</tvExpOptDlg>
@@ -474,7 +431,7 @@
</File> </File>
<File> <File>
<GroupNumber>3</GroupNumber> <GroupNumber>3</GroupNumber>
<FileNumber>13</FileNumber> <FileNumber>14</FileNumber>
<FileType>5</FileType> <FileType>5</FileType>
<tvExp>0</tvExp> <tvExp>0</tvExp>
<tvExpOptDlg>0</tvExpOptDlg> <tvExpOptDlg>0</tvExpOptDlg>
@@ -486,7 +443,7 @@
</File> </File>
<File> <File>
<GroupNumber>3</GroupNumber> <GroupNumber>3</GroupNumber>
<FileNumber>14</FileNumber> <FileNumber>15</FileNumber>
<FileType>5</FileType> <FileType>5</FileType>
<tvExp>0</tvExp> <tvExp>0</tvExp>
<tvExpOptDlg>0</tvExpOptDlg> <tvExpOptDlg>0</tvExpOptDlg>
@@ -498,7 +455,7 @@
</File> </File>
<File> <File>
<GroupNumber>3</GroupNumber> <GroupNumber>3</GroupNumber>
<FileNumber>15</FileNumber> <FileNumber>16</FileNumber>
<FileType>5</FileType> <FileType>5</FileType>
<tvExp>0</tvExp> <tvExp>0</tvExp>
<tvExpOptDlg>0</tvExpOptDlg> <tvExpOptDlg>0</tvExpOptDlg>
@@ -510,7 +467,7 @@
</File> </File>
<File> <File>
<GroupNumber>3</GroupNumber> <GroupNumber>3</GroupNumber>
<FileNumber>16</FileNumber> <FileNumber>17</FileNumber>
<FileType>5</FileType> <FileType>5</FileType>
<tvExp>0</tvExp> <tvExp>0</tvExp>
<tvExpOptDlg>0</tvExpOptDlg> <tvExpOptDlg>0</tvExpOptDlg>
@@ -522,7 +479,7 @@
</File> </File>
<File> <File>
<GroupNumber>3</GroupNumber> <GroupNumber>3</GroupNumber>
<FileNumber>17</FileNumber> <FileNumber>18</FileNumber>
<FileType>5</FileType> <FileType>5</FileType>
<tvExp>0</tvExp> <tvExp>0</tvExp>
<tvExpOptDlg>0</tvExpOptDlg> <tvExpOptDlg>0</tvExpOptDlg>
@@ -534,7 +491,7 @@
</File> </File>
<File> <File>
<GroupNumber>3</GroupNumber> <GroupNumber>3</GroupNumber>
<FileNumber>18</FileNumber> <FileNumber>19</FileNumber>
<FileType>1</FileType> <FileType>1</FileType>
<tvExp>0</tvExp> <tvExp>0</tvExp>
<tvExpOptDlg>0</tvExpOptDlg> <tvExpOptDlg>0</tvExpOptDlg>
@@ -546,7 +503,7 @@
</File> </File>
<File> <File>
<GroupNumber>3</GroupNumber> <GroupNumber>3</GroupNumber>
<FileNumber>19</FileNumber> <FileNumber>20</FileNumber>
<FileType>1</FileType> <FileType>1</FileType>
<tvExp>0</tvExp> <tvExp>0</tvExp>
<tvExpOptDlg>0</tvExpOptDlg> <tvExpOptDlg>0</tvExpOptDlg>
@@ -558,7 +515,7 @@
</File> </File>
<File> <File>
<GroupNumber>3</GroupNumber> <GroupNumber>3</GroupNumber>
<FileNumber>20</FileNumber> <FileNumber>21</FileNumber>
<FileType>5</FileType> <FileType>5</FileType>
<tvExp>0</tvExp> <tvExp>0</tvExp>
<tvExpOptDlg>0</tvExpOptDlg> <tvExpOptDlg>0</tvExpOptDlg>
@@ -570,7 +527,7 @@
</File> </File>
<File> <File>
<GroupNumber>3</GroupNumber> <GroupNumber>3</GroupNumber>
<FileNumber>21</FileNumber> <FileNumber>22</FileNumber>
<FileType>1</FileType> <FileType>1</FileType>
<tvExp>0</tvExp> <tvExp>0</tvExp>
<tvExpOptDlg>0</tvExpOptDlg> <tvExpOptDlg>0</tvExpOptDlg>
@@ -584,13 +541,13 @@
<Group> <Group>
<GroupName>startup</GroupName> <GroupName>startup</GroupName>
<tvExp>1</tvExp> <tvExp>0</tvExp>
<tvExpOptDlg>0</tvExpOptDlg> <tvExpOptDlg>0</tvExpOptDlg>
<cbSel>0</cbSel> <cbSel>0</cbSel>
<RteFlg>0</RteFlg> <RteFlg>0</RteFlg>
<File> <File>
<GroupNumber>4</GroupNumber> <GroupNumber>4</GroupNumber>
<FileNumber>22</FileNumber> <FileNumber>23</FileNumber>
<FileType>1</FileType> <FileType>1</FileType>
<tvExp>0</tvExp> <tvExp>0</tvExp>
<tvExpOptDlg>0</tvExpOptDlg> <tvExpOptDlg>0</tvExpOptDlg>
@@ -602,7 +559,7 @@
</File> </File>
<File> <File>
<GroupNumber>4</GroupNumber> <GroupNumber>4</GroupNumber>
<FileNumber>23</FileNumber> <FileNumber>24</FileNumber>
<FileType>2</FileType> <FileType>2</FileType>
<tvExp>0</tvExp> <tvExp>0</tvExp>
<tvExpOptDlg>0</tvExpOptDlg> <tvExpOptDlg>0</tvExpOptDlg>
@@ -616,13 +573,13 @@
<Group> <Group>
<GroupName>plib035</GroupName> <GroupName>plib035</GroupName>
<tvExp>1</tvExp> <tvExp>0</tvExp>
<tvExpOptDlg>0</tvExpOptDlg> <tvExpOptDlg>0</tvExpOptDlg>
<cbSel>0</cbSel> <cbSel>0</cbSel>
<RteFlg>0</RteFlg> <RteFlg>0</RteFlg>
<File> <File>
<GroupNumber>5</GroupNumber> <GroupNumber>5</GroupNumber>
<FileNumber>24</FileNumber> <FileNumber>25</FileNumber>
<FileType>1</FileType> <FileType>1</FileType>
<tvExp>0</tvExp> <tvExp>0</tvExp>
<tvExpOptDlg>0</tvExpOptDlg> <tvExpOptDlg>0</tvExpOptDlg>
@@ -634,7 +591,7 @@
</File> </File>
<File> <File>
<GroupNumber>5</GroupNumber> <GroupNumber>5</GroupNumber>
<FileNumber>25</FileNumber> <FileNumber>26</FileNumber>
<FileType>1</FileType> <FileType>1</FileType>
<tvExp>0</tvExp> <tvExp>0</tvExp>
<tvExpOptDlg>0</tvExpOptDlg> <tvExpOptDlg>0</tvExpOptDlg>
@@ -646,7 +603,7 @@
</File> </File>
<File> <File>
<GroupNumber>5</GroupNumber> <GroupNumber>5</GroupNumber>
<FileNumber>26</FileNumber> <FileNumber>27</FileNumber>
<FileType>1</FileType> <FileType>1</FileType>
<tvExp>0</tvExp> <tvExp>0</tvExp>
<tvExpOptDlg>0</tvExpOptDlg> <tvExpOptDlg>0</tvExpOptDlg>
@@ -658,7 +615,7 @@
</File> </File>
<File> <File>
<GroupNumber>5</GroupNumber> <GroupNumber>5</GroupNumber>
<FileNumber>27</FileNumber> <FileNumber>28</FileNumber>
<FileType>1</FileType> <FileType>1</FileType>
<tvExp>0</tvExp> <tvExp>0</tvExp>
<tvExpOptDlg>0</tvExpOptDlg> <tvExpOptDlg>0</tvExpOptDlg>
@@ -670,7 +627,7 @@
</File> </File>
<File> <File>
<GroupNumber>5</GroupNumber> <GroupNumber>5</GroupNumber>
<FileNumber>28</FileNumber> <FileNumber>29</FileNumber>
<FileType>1</FileType> <FileType>1</FileType>
<tvExp>0</tvExp> <tvExp>0</tvExp>
<tvExpOptDlg>0</tvExpOptDlg> <tvExpOptDlg>0</tvExpOptDlg>
@@ -682,7 +639,7 @@
</File> </File>
<File> <File>
<GroupNumber>5</GroupNumber> <GroupNumber>5</GroupNumber>
<FileNumber>29</FileNumber> <FileNumber>30</FileNumber>
<FileType>1</FileType> <FileType>1</FileType>
<tvExp>0</tvExp> <tvExp>0</tvExp>
<tvExpOptDlg>0</tvExpOptDlg> <tvExpOptDlg>0</tvExpOptDlg>
@@ -694,7 +651,7 @@
</File> </File>
<File> <File>
<GroupNumber>5</GroupNumber> <GroupNumber>5</GroupNumber>
<FileNumber>30</FileNumber> <FileNumber>31</FileNumber>
<FileType>1</FileType> <FileType>1</FileType>
<tvExp>0</tvExp> <tvExp>0</tvExp>
<tvExpOptDlg>0</tvExpOptDlg> <tvExpOptDlg>0</tvExpOptDlg>
@@ -706,7 +663,7 @@
</File> </File>
<File> <File>
<GroupNumber>5</GroupNumber> <GroupNumber>5</GroupNumber>
<FileNumber>31</FileNumber> <FileNumber>32</FileNumber>
<FileType>1</FileType> <FileType>1</FileType>
<tvExp>0</tvExp> <tvExp>0</tvExp>
<tvExpOptDlg>0</tvExpOptDlg> <tvExpOptDlg>0</tvExpOptDlg>
@@ -718,7 +675,7 @@
</File> </File>
<File> <File>
<GroupNumber>5</GroupNumber> <GroupNumber>5</GroupNumber>
<FileNumber>32</FileNumber> <FileNumber>33</FileNumber>
<FileType>1</FileType> <FileType>1</FileType>
<tvExp>0</tvExp> <tvExp>0</tvExp>
<tvExpOptDlg>0</tvExpOptDlg> <tvExpOptDlg>0</tvExpOptDlg>
@@ -730,7 +687,7 @@
</File> </File>
<File> <File>
<GroupNumber>5</GroupNumber> <GroupNumber>5</GroupNumber>
<FileNumber>33</FileNumber> <FileNumber>34</FileNumber>
<FileType>1</FileType> <FileType>1</FileType>
<tvExp>0</tvExp> <tvExp>0</tvExp>
<tvExpOptDlg>0</tvExpOptDlg> <tvExpOptDlg>0</tvExpOptDlg>
@@ -742,7 +699,7 @@
</File> </File>
<File> <File>
<GroupNumber>5</GroupNumber> <GroupNumber>5</GroupNumber>
<FileNumber>34</FileNumber> <FileNumber>35</FileNumber>
<FileType>1</FileType> <FileType>1</FileType>
<tvExp>0</tvExp> <tvExp>0</tvExp>
<tvExpOptDlg>0</tvExpOptDlg> <tvExpOptDlg>0</tvExpOptDlg>
@@ -754,7 +711,7 @@
</File> </File>
<File> <File>
<GroupNumber>5</GroupNumber> <GroupNumber>5</GroupNumber>
<FileNumber>35</FileNumber> <FileNumber>36</FileNumber>
<FileType>1</FileType> <FileType>1</FileType>
<tvExp>0</tvExp> <tvExp>0</tvExp>
<tvExpOptDlg>0</tvExpOptDlg> <tvExpOptDlg>0</tvExpOptDlg>
@@ -766,7 +723,7 @@
</File> </File>
<File> <File>
<GroupNumber>5</GroupNumber> <GroupNumber>5</GroupNumber>
<FileNumber>36</FileNumber> <FileNumber>37</FileNumber>
<FileType>1</FileType> <FileType>1</FileType>
<tvExp>0</tvExp> <tvExp>0</tvExp>
<tvExpOptDlg>0</tvExpOptDlg> <tvExpOptDlg>0</tvExpOptDlg>
@@ -778,7 +735,7 @@
</File> </File>
<File> <File>
<GroupNumber>5</GroupNumber> <GroupNumber>5</GroupNumber>
<FileNumber>37</FileNumber> <FileNumber>38</FileNumber>
<FileType>1</FileType> <FileType>1</FileType>
<tvExp>0</tvExp> <tvExp>0</tvExp>
<tvExpOptDlg>0</tvExpOptDlg> <tvExpOptDlg>0</tvExpOptDlg>
@@ -790,7 +747,7 @@
</File> </File>
<File> <File>
<GroupNumber>5</GroupNumber> <GroupNumber>5</GroupNumber>
<FileNumber>38</FileNumber> <FileNumber>39</FileNumber>
<FileType>1</FileType> <FileType>1</FileType>
<tvExp>0</tvExp> <tvExp>0</tvExp>
<tvExpOptDlg>0</tvExpOptDlg> <tvExpOptDlg>0</tvExpOptDlg>
@@ -810,7 +767,7 @@
<RteFlg>0</RteFlg> <RteFlg>0</RteFlg>
<File> <File>
<GroupNumber>6</GroupNumber> <GroupNumber>6</GroupNumber>
<FileNumber>39</FileNumber> <FileNumber>40</FileNumber>
<FileType>1</FileType> <FileType>1</FileType>
<tvExp>0</tvExp> <tvExp>0</tvExp>
<tvExpOptDlg>0</tvExpOptDlg> <tvExpOptDlg>0</tvExpOptDlg>
@@ -822,7 +779,7 @@
</File> </File>
<File> <File>
<GroupNumber>6</GroupNumber> <GroupNumber>6</GroupNumber>
<FileNumber>40</FileNumber> <FileNumber>41</FileNumber>
<FileType>1</FileType> <FileType>1</FileType>
<tvExp>0</tvExp> <tvExp>0</tvExp>
<tvExpOptDlg>0</tvExpOptDlg> <tvExpOptDlg>0</tvExpOptDlg>
@@ -834,7 +791,7 @@
</File> </File>
<File> <File>
<GroupNumber>6</GroupNumber> <GroupNumber>6</GroupNumber>
<FileNumber>41</FileNumber> <FileNumber>42</FileNumber>
<FileType>5</FileType> <FileType>5</FileType>
<tvExp>0</tvExp> <tvExp>0</tvExp>
<tvExpOptDlg>0</tvExpOptDlg> <tvExpOptDlg>0</tvExpOptDlg>

View File

@@ -10,9 +10,8 @@
<TargetName>template</TargetName> <TargetName>template</TargetName>
<ToolsetNumber>0x4</ToolsetNumber> <ToolsetNumber>0x4</ToolsetNumber>
<ToolsetName>ARM-ADS</ToolsetName> <ToolsetName>ARM-ADS</ToolsetName>
<pArmCC>6190000::V6.19::ARMCLANG</pArmCC> <pCCUsed>5060960::V5.06 update 7 (build 960)::.\ARMCC</pCCUsed>
<pCCUsed>6190000::V6.19::ARMCLANG</pCCUsed> <uAC6>0</uAC6>
<uAC6>1</uAC6>
<TargetOption> <TargetOption>
<TargetCommonOption> <TargetCommonOption>
<Device>K1921VK035</Device> <Device>K1921VK035</Device>
@@ -81,9 +80,9 @@
<nStopB2X>0</nStopB2X> <nStopB2X>0</nStopB2X>
</BeforeMake> </BeforeMake>
<AfterMake> <AfterMake>
<RunUserProg1>0</RunUserProg1> <RunUserProg1>1</RunUserProg1>
<RunUserProg2>0</RunUserProg2> <RunUserProg2>0</RunUserProg2>
<UserProg1Name></UserProg1Name> <UserProg1Name>fromelf.exe --bin --output .\Listings\@L.bin !L</UserProg1Name>
<UserProg2Name></UserProg2Name> <UserProg2Name></UserProg2Name>
<UserProg1Dos16Mode>0</UserProg1Dos16Mode> <UserProg1Dos16Mode>0</UserProg1Dos16Mode>
<UserProg2Dos16Mode>0</UserProg2Dos16Mode> <UserProg2Dos16Mode>0</UserProg2Dos16Mode>
@@ -324,7 +323,7 @@
<PlainCh>0</PlainCh> <PlainCh>0</PlainCh>
<Ropi>0</Ropi> <Ropi>0</Ropi>
<Rwpi>0</Rwpi> <Rwpi>0</Rwpi>
<wLevel>3</wLevel> <wLevel>2</wLevel>
<uThumb>0</uThumb> <uThumb>0</uThumb>
<uSurpInc>0</uSurpInc> <uSurpInc>0</uSurpInc>
<uC99>1</uC99> <uC99>1</uC99>
@@ -339,7 +338,7 @@
<v6Rtti>0</v6Rtti> <v6Rtti>0</v6Rtti>
<VariousControls> <VariousControls>
<MiscControls></MiscControls> <MiscControls></MiscControls>
<Define>SYSCLK_OSE, OSECLK_VAL=24000000</Define> <Define></Define>
<Undefine></Undefine> <Undefine></Undefine>
<IncludePath>.\platform\CMSIS\Core\Include;.\platform\Device\NIIET\K1921VK035\Include;.\platform\plib035\inc;.\platform\retarget;.\platform\retarget\Template\K1921VK035;.\Core\App;.\Core\Config;.\Core\ExtendedLibs;.\Core\ExtendedLibs\MyLibs\Inc;.\Core\ExtendedLibs\RTT</IncludePath> <IncludePath>.\platform\CMSIS\Core\Include;.\platform\Device\NIIET\K1921VK035\Include;.\platform\plib035\inc;.\platform\retarget;.\platform\retarget\Template\K1921VK035;.\Core\App;.\Core\Config;.\Core\ExtendedLibs;.\Core\ExtendedLibs\MyLibs\Inc;.\Core\ExtendedLibs\RTT</IncludePath>
</VariousControls> </VariousControls>
@@ -435,6 +434,11 @@
<FileType>1</FileType> <FileType>1</FileType>
<FilePath>.\Core\App\adc.c</FilePath> <FilePath>.\Core\App\adc.c</FilePath>
</File> </File>
<File>
<FileName>i2c.c</FileName>
<FileType>1</FileType>
<FilePath>.\Core\App\i2c.c</FilePath>
</File>
<File> <File>
<FileName>sysclk.c</FileName> <FileName>sysclk.c</FileName>
<FileType>1</FileType> <FileType>1</FileType>
@@ -632,6 +636,7 @@
<Layer> <Layer>
<LayName>UKSI</LayName> <LayName>UKSI</LayName>
<LayPrjMark>1</LayPrjMark> <LayPrjMark>1</LayPrjMark>
<LayTitle>Template</LayTitle>
</Layer> </Layer>
</Layers> </Layers>
</LayerInfo> </LayerInfo>

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