/**
 * @file   dcs5400bk025_wdt.h
 * @author DC Soyuz
 * @brief  Заголовочный файл модуля WDT.
 */

#ifndef __DCS5400BK025_WDT_H_
#define __DCS5400BK025_WDT_H_

#ifdef __cplusplus
extern "C" {
#endif

/// @addtogroup DCS32_MSI_Driver
/// @{

/// @addtogroup WDT
/// @{

/// @brief Карта регистров.
typedef struct {
	volatile unsigned char load0;   ///< Период счета 0
	volatile unsigned char load1;   ///< Период счета 1
	volatile unsigned char load2;   ///< Период счета 2
	volatile unsigned char load3;   ///< Период счета 3
	volatile unsigned char val0;    ///< Текущее значение 0
	volatile unsigned char val1;    ///< Текущее значение 1
	volatile unsigned char val2;    ///< Текущее значение 2
	volatile unsigned char val3;    ///< Текущее значение 3
	volatile unsigned char ctrl;    ///< Управление (@ref WdtCtrlVal)
	volatile unsigned char : 8;
	volatile unsigned char : 8;
	volatile unsigned char : 8;
	volatile unsigned char clr;     ///< Сброс прерываний
	volatile unsigned char : 8;
	volatile unsigned char : 8;
	volatile unsigned char : 8;
	volatile unsigned char intraw;  ///< Исходные прерывания (@ref WdtIntRawVal)
	volatile unsigned char : 8;
	volatile unsigned char : 8;
	volatile unsigned char : 8;
	volatile unsigned char intr;  ///< Маскируемые прерывания (@ref WdtIntVal)
	volatile unsigned char : 8;
	volatile unsigned char : 8;
	volatile unsigned char : 8;
	volatile unsigned char lock;    ///< Блокировка доступа (@ref WdtLockVal)
	volatile unsigned char : 8;
	volatile unsigned char : 8;
	volatile unsigned char : 8;
	volatile unsigned char tcr;     ///< Переход в тестовый режим (@ref WdtTcrVal)
	volatile unsigned char : 8;
	volatile unsigned char : 8;
	volatile unsigned char : 8;
	volatile unsigned char top;     ///< Управление тестовым режимом (@ref WdtTopVal)
} WdtRegs;

/// @addtogroup WdtCtrlVal Значения для регистра управление
/// @{

#define WDT_CTRL_RST_EN     (1U << 1)   ///< Разрешение на формирование сигнала сброса по завершению счета таймера
#define WDT_CTRL_INT_EN     (1U << 0)   ///< Разрешение на формирование прерывания по окончанию счета таймера

/// @}

/// @addtogroup WdtIntRawVal Значения для регистра исходного прерывания
/// @{

#define WDT_INTRAW_RAW_WDT  (1U << 0)   ///< Исходное прерывание таймера

/// @}

/// @addtogroup WdtIntVal Значения для регистра маскируемого прерывания
/// @{

#define WDT_INT_INT_WDT     (1U << 0)   ///< Маскируемое прерывание таймера

/// @}

/// @addtogroup WdtLockVal Значения для регистра блокировки доступа
/// @{

#define WDT_LOCK_LOCK_WDT   (1U << 0)   ///< Блокирование записи в регистры
#define WDT_LOCK_ACCESS     0x55        ///< Код для разрешения записи в регистры

/// @}

/// @addtogroup WdtTcrVal Значения для регистра перехода в тестовый режим
/// @{

#define WDT_TCR_TEST_EN     (1U << 1)   ///< Включение тестового режима

/// @}

/// @addtogroup WdtTopVal Значения для регистра управления тестовым режимом
/// @{

#define WDT_TOP_TST_INT     (1U << 1)   ///< Формирование сигнала прерывания от таймера в тестовом режиме
#define WDT_TOP_TST_RES     (1U << 0)   ///< Формирование сигнала сброса от таймера в тестовом режиме

/// @}

/// @}

/// @}

#ifdef __cplusplus
}
#endif

#endif /* __DCS5400BK025_WDT_H_ */
