Шаблон проекта с моей расширенной библиотекой MyLibs

This commit is contained in:
2025-12-25 10:36:35 +03:00
commit c6e1dc049f
69 changed files with 40782 additions and 0 deletions

View File

@@ -0,0 +1,327 @@
/**
******************************************************************************
* @file plib035_mflash.h
*
* @brief Файл содержит прототипы и компактные inline реализации функций для
* MFLASH, а также сопутствующие макроопределения и перечисления
*
* @author НИИЭТ, Богдан Колбов <kolbov@niiet.ru>
*
******************************************************************************
* @attention
*
* ДАННОЕ ПРОГРАММНОЕ ОБЕСПЕЧЕНИЕ ПРЕДОСТАВЛЯЕТСЯ «КАК ЕСТЬ», БЕЗ КАКИХ-ЛИБО
* ГАРАНТИЙ, ЯВНО ВЫРАЖЕННЫХ ИЛИ ПОДРАЗУМЕВАЕМЫХ, ВКЛЮЧАЯ ГАРАНТИИ ТОВАРНОЙ
* ПРИГОДНОСТИ, СООТВЕТСТВИЯ ПО ЕГО КОНКРЕТНОМУ НАЗНАЧЕНИЮ И ОТСУТСТВИЯ
* НАРУШЕНИЙ, НО НЕ ОГРАНИЧИВАЯСЬ ИМИ. ДАННОЕ ПРОГРАММНОЕ ОБЕСПЕЧЕНИЕ
* ПРЕДНАЗНАЧЕНО ДЛЯ ОЗНАКОМИТЕЛЬНЫХ ЦЕЛЕЙ И НАПРАВЛЕНО ТОЛЬКО НА
* ПРЕДОСТАВЛЕНИЕ ДОПОЛНИТЕЛЬНОЙ ИНФОРМАЦИИ О ПРОДУКТЕ, С ЦЕЛЬЮ СОХРАНИТЬ ВРЕМЯ
* ПОТРЕБИТЕЛЮ. НИ В КАКОМ СЛУЧАЕ АВТОРЫ ИЛИ ПРАВООБЛАДАТЕЛИ НЕ НЕСУТ
* ОТВЕТСТВЕННОСТИ ПО КАКИМ-ЛИБО ИСКАМ, ЗА ПРЯМОЙ ИЛИ КОСВЕННЫЙ УЩЕРБ, ИЛИ
* ПО ИНЫМ ТРЕБОВАНИЯМ, ВОЗНИКШИМ ИЗ-ЗА ИСПОЛЬЗОВАНИЯ ПРОГРАММНОГО ОБЕСПЕЧЕНИЯ
* ИЛИ ИНЫХ ДЕЙСТВИЙ С ПРОГРАММНЫМ ОБЕСПЕЧЕНИЕМ.
*
* <h2><center>&copy; 2018 ОАО "НИИЭТ"</center></h2>
******************************************************************************
*/
/* Define to prevent recursive inclusion -------------------------------------*/
#ifndef __PLIB035_MFLASH_H
#define __PLIB035_MFLASH_H
#ifdef __cplusplus
extern "C" {
#endif
/* Includes ------------------------------------------------------------------*/
#include "plib035.h"
/** @addtogroup Peripheral
* @{
*/
/** @defgroup MFLASH
* @brief Драйвер для работы с MFLASH
* @{
*/
/** @defgroup MFLASH_Exported_Defines Константы
* @{
*/
/**
* @}
*/
/** @defgroup MFLASH_Exported_Types Типы
* @{
*/
/**
* @brief Команды контроллера флеш-памяти
*/
typedef enum {
MFLASH_Cmd_Read = MFLASH_CMD_RD_Msk, /*!< Команда чтения */
MFLASH_Cmd_Write = MFLASH_CMD_WR_Msk, /*!< Команда записи */
MFLASH_Cmd_EraseFull = MFLASH_CMD_ERALL_Msk, /*!< Команда стирания всей памяти */
MFLASH_Cmd_ErasePage = MFLASH_CMD_ERSEC_Msk, /*!< Команда стирания страницы */
} MFLASH_Cmd_TypeDef;
#define IS_MFLASH_CMD(VALUE) (((VALUE) == MFLASH_Cmd_Read) || \
((VALUE) == MFLASH_Cmd_Write) || \
((VALUE) == MFLASH_Cmd_EraseFull) || \
((VALUE) == MFLASH_Cmd_ErasePage))
/**
* @brief Выбор региона флеш-памяти для исполнения команд
*/
typedef enum {
MFLASH_Region_Main = 0UL, /*!< Основная область */
MFLASH_Region_NVR = MFLASH_CMD_NVRON_Msk, /*!< NVR область (загрузочная) */
} MFLASH_Region_TypeDef;
#define IS_MFLASH_REGION(VALUE) (((VALUE) == MFLASH_Region_Main) || \
((VALUE) == MFLASH_Region_NVR))
#define IS_MFLASH_MAIN_ADDR(MAIN_ADDR) (MAIN_ADDR < MEM_MFLASH_SIZE)
#define IS_MFLASH_MAIN_PAGE_NUM(MAIN_PAGE_NUM) (MAIN_PAGE_NUM < MEM_MFLASH_PAGE_TOTAL)
#define IS_MFLASH_NVR_ADDR(NVR_ADDR) (NVR_ADDR < MEM_MFLASH_NVR_SIZE)
#define IS_MFLASH_NVR_PAGE_NUM(NVR_PAGE_NUM) (NVR_PAGE_NUM < MEM_MFLASH_NVR_PAGE_TOTAL)
#define IS_MFLASH_DATA_NUM(DATA_NUM) (DATA_NUM < MEM_MFLASH_BUS_WIDTH_WORDS)
#define IS_MFLASH_LATENCY(LATENCY) (LATENCY < 15)
/**
* @}
*/
/** @defgroup MFLASH_Exported_Functions Функции
* @{
*/
/** @defgroup MFLASH_Cmd Управление контроллером флеш-памяти
* @{
*/
/**
* @brief Установка значения адреса
* @param AddrVal Значение адреса
* @retval void
*/
__STATIC_INLINE void MFLASH_SetAddr(uint32_t AddrVal)
{
WRITE_REG(MFLASH->ADDR, AddrVal);
}
/**
* @brief Установка выбранного слова данных
* @param DataNum Номер слова данных
* @param DataVal Значение слова данных
* @retval void
*/
__STATIC_INLINE void MFLASH_SetData(uint32_t DataNum, uint32_t DataVal)
{
assert_param(IS_MFLASH_DATA_NUM(DataNum));
WRITE_REG(MFLASH->DATA[DataNum].DATA, DataVal);
}
/**
* @brief Получение выбранного слова данных
* @param DataNum Номер слова данных
* @retval Val Значение слова данных
*/
__STATIC_INLINE uint32_t MFLASH_GetData(uint32_t DataNum)
{
assert_param(IS_MFLASH_DATA_NUM(DataNum));
return READ_REG(MFLASH->DATA[DataNum].DATA);
}
/**
* @brief Передача команды контроллеру флеш-памяти
* @param Cmd Команда
* @param Region Область
* @retval void
*/
__STATIC_INLINE void MFLASH_SetCmd(MFLASH_Cmd_TypeDef Cmd, MFLASH_Region_TypeDef Region)
{
WRITE_REG(MFLASH->CMD, ((uint32_t)MFLASH_CMD_KEY_Access << MFLASH_CMD_KEY_Pos) | (uint32_t)Region | (uint32_t)Cmd);
}
/**
* @brief Получение статуса занятости контроллера флеш-памяти
* @retval Status
*/
__STATIC_INLINE FlagStatus MFLASH_BusyStatus(void)
{
return (FlagStatus)READ_BIT(MFLASH->STAT, MFLASH_STAT_BUSY_Msk);
}
void MFLASH_ReadData(uint32_t AddrVal, uint32_t* DataArr, MFLASH_Region_TypeDef Region);
void MFLASH_WriteData(uint32_t AddrVal, uint32_t* DataArr, MFLASH_Region_TypeDef Region);
void MFLASH_ErasePage(uint32_t AddrVal, MFLASH_Region_TypeDef Region);
void MFLASH_EraseFull(MFLASH_Region_TypeDef Region);
/**
* @}
*/
/** @defgroup MFLASH_ExecCtrl Настройка исполнения программ
* @{
*/
/**
* @brief Настройка количества тактов ожидания чтения из флеш
* @param LatencyVal Значение
* @retval void
*/
__STATIC_INLINE void MFLASH_LatencyConfig(uint32_t LatencyVal)
{
assert_param(IS_MFLASH_LATENCY(LatencyVal));
WRITE_REG(MFLASH->CTRL_bit.LAT, LatencyVal);
}
/**
* @brief Разрешение работы кэша инструкций
* @param State Выбор состояния
* @retval void
*/
__STATIC_INLINE void MFLASH_ICacheCmd(FunctionalState State)
{
assert_param(IS_FUNCTIONAL_STATE(State));
WRITE_REG(MFLASH->CTRL_bit.ICEN, State);
}
/**
* @brief Очистка кэша инструкций
* @param State Выбор состояния
* @retval void
*/
__STATIC_INLINE void MFLASH_ICacheFlushCmd(void)
{
WRITE_REG(MFLASH->CTRL_bit.IFLUSH, 1);
}
/**
* @brief Получение статуса занятости очистки кэша инструкций
* @retval Status
*/
__STATIC_INLINE FlagStatus MFLASH_ICacheBusyStatus(void)
{
return (FlagStatus)READ_BIT(MFLASH->ICSTAT, MFLASH_ICSTAT_BUSY_Msk);
}
/**
* @brief Разрешение работы кэша данных
* @param State Выбор состояния
* @retval void
*/
__STATIC_INLINE void MFLASH_DCacheCmd(FunctionalState State)
{
assert_param(IS_FUNCTIONAL_STATE(State));
WRITE_REG(MFLASH->CTRL_bit.DCEN, State);
}
/**
* @brief Очистка кэша данных
* @param State Выбор состояния
* @retval void
*/
__STATIC_INLINE void MFLASH_DCacheFlushCmd(void)
{
WRITE_REG(MFLASH->CTRL_bit.DFLUSH, 1);
}
/**
* @brief Получение статуса занятости очистки кэша данных
* @retval Status
*/
__STATIC_INLINE FlagStatus MFLASH_DCacheBusyStatus(void)
{
return (FlagStatus)READ_BIT(MFLASH->DCSTAT, MFLASH_DCSTAT_BUSY_Msk);
}
/**
* @brief Разрешение работы предвыборки
* @param State Выбор состояния
* @retval void
*/
__STATIC_INLINE void MFLASH_PrefetchCmd(FunctionalState State)
{
assert_param(IS_FUNCTIONAL_STATE(State));
WRITE_REG(MFLASH->CTRL_bit.PEN, State);
}
/**
* @brief Отключение старта из загрузчоной памяти после следующего программного сброса.
* Оказывает влияние только если в CFGWORD активирован старт из загрузочной области.
* @retval void
*/
__STATIC_INLINE void MFLASH_BootDisableCmd(void)
{
WRITE_REG(MFLASH->BDIS, MFLASH_BDIS_BMDIS_Msk);
}
/**
* @}
*/
/** @defgroup MFLASH_IRQ Прерывания
* @{
*/
/**
* @brief Разрешение работы прерывания MFLASH
* @param State Выбор состояния
* @retval void
*/
__STATIC_INLINE void MFLASH_ITCmd(FunctionalState State)
{
assert_param(IS_FUNCTIONAL_STATE(State));
WRITE_REG(MFLASH->CTRL_bit.IRQEN, State);
}
/**
* @brief Получение статуса прерывания
* @retval Status
*/
__STATIC_INLINE FlagStatus MFLASH_ITStatus(void)
{
return (FlagStatus)READ_BIT(MFLASH->STAT, MFLASH_STAT_IRQF_Msk);
}
/**
* @brief Сброс статуса прерывания
* @retval void
*/
__STATIC_INLINE void MFLASH_ITStatusClear(void)
{
WRITE_REG(MFLASH->STAT, MFLASH_STAT_IRQF_Msk);
}
/**
* @}
*/
/**
* @}
*/
#ifdef __cplusplus
}
#endif
#endif /* __PLIB035_MFLASH_H */
/**
* @}
*/
/**
* @}
*/
/******************* (C) COPYRIGHT 2018 NIIET *****END OF FILE****/