diff options
Diffstat (limited to 'lib/hc32f460/driver/inc/hc32f460_keyscan.h')
-rw-r--r-- | lib/hc32f460/driver/inc/hc32f460_keyscan.h | 186 |
1 files changed, 186 insertions, 0 deletions
diff --git a/lib/hc32f460/driver/inc/hc32f460_keyscan.h b/lib/hc32f460/driver/inc/hc32f460_keyscan.h new file mode 100644 index 00000000..a06ecbc8 --- /dev/null +++ b/lib/hc32f460/driver/inc/hc32f460_keyscan.h @@ -0,0 +1,186 @@ +/******************************************************************************
+ * Copyright (C) 2020, Huada Semiconductor Co., Ltd. All rights reserved.
+ *
+ * This software component is licensed by HDSC under BSD 3-Clause license
+ * (the "License"); You may not use this file except in compliance with the
+ * License. You may obtain a copy of the License at:
+ * opensource.org/licenses/BSD-3-Clause
+ */
+/******************************************************************************/
+/** \file hc32f460_keyscan.h
+ **
+ ** A detailed description is available at
+ ** @link KeyscanGroup Keyscan description @endlink
+ **
+ ** - 2018-10-17 CDT First version for Device Driver Library of keyscan.
+ **
+ ******************************************************************************/
+
+#ifndef __HC32F460_KEYSCAN_H__
+#define __HC32F460_KEYSCAN_H__
+
+/*******************************************************************************
+ * Include files
+ ******************************************************************************/
+#include "hc32_common.h"
+
+/* C binding of definitions if building with C++ compiler */
+#ifdef __cplusplus
+extern "C"
+{
+#endif
+
+/**
+ *******************************************************************************
+ * \defgroup KeyscanGroup Matrix Key Scan Module (KeyScan)
+ **
+ ******************************************************************************/
+//@{
+
+/*******************************************************************************
+ * Global type definitions ('typedef')
+ ******************************************************************************/
+/**
+ *******************************************************************************
+ ** \brief Enumeration to hi-z state cycles of each keyout
+ **
+ ** \note
+ ******************************************************************************/
+typedef enum en_hiz_cycle
+{
+ Hiz4 = 0u,
+ Hiz8 = 1u,
+ Hiz16 = 2u,
+ Hiz32 = 3u,
+ Hiz64 = 4u,
+ Hiz256 = 5u,
+ Hiz512 = 6u,
+ Hiz1K = 7u,
+}en_hiz_cycle_t;
+
+/**
+ *******************************************************************************
+ ** \brief Enumeration to low state cycles of each keyout
+ **
+ ** \note
+ ******************************************************************************/
+typedef enum en_low_cycle
+{
+ Low8 = 3u,
+ Low16 = 4u,
+ Low32 = 5u,
+ Low64 = 6u,
+ Low128 = 7u,
+ Low256 = 8u,
+ Low512 = 9u,
+ Low1K = 10u,
+ Low2K = 11u,
+ Low4K = 12u,
+ Low8K = 13u,
+ Low16K = 14u,
+ Low32K = 15u,
+ Low64K = 16u,
+ Low128K = 17u,
+ Low256K = 18u,
+ Low512K = 19u,
+ Low1M = 20u,
+ Low2M = 21u,
+ Low4M = 22u,
+ Low8M = 23u,
+ Low16M = 24u,
+}en_low_cycle_t;
+
+/**
+ *******************************************************************************
+ ** \brief Enumeration to key scan clock
+ **
+ ** \note
+ ******************************************************************************/
+typedef enum en_keyscan_clk
+{
+ KeyscanHclk = 0u, ///< use HCLK as scan clock
+ KeyscanLrc = 1u, ///< use internal Low RC as scan clock
+ KeyscanXtal32 = 2u, ///< use external XTAL32 as scan clock
+}en_keyscan_clk_t;
+
+/**
+ *******************************************************************************
+ ** \brief Enumeration to KEYOUT combination
+ ******************************************************************************/
+typedef enum en_keyout_sel
+{
+ Keyout0To1 = 1u, ///< KEYOUT 0 to 1 are selected
+ Keyout0To2 = 2u, ///< KEYOUT 0 to 2 are selected
+ Keyout0To3 = 3u, ///< KEYOUT 0 to 3 are selected
+ Keyout0To4 = 4u, ///< KEYOUT 0 to 4 are selected
+ Keyout0To5 = 5u, ///< KEYOUT 0 to 5 are selected
+ Keyout0To6 = 6u, ///< KEYOUT 0 to 6 are selected
+ Keyout0To7 = 7u, ///< KEYOUT 0 to 7 are selected
+}en_keyout_sel_t;
+
+/**
+ *******************************************************************************
+ ** \brief Enumeration to KEYIN combination
+ ******************************************************************************/
+typedef enum en_keyin_sel
+{
+ Keyin00 = 1u << 0, ///< KEYIN 0 is selected
+ Keyin01 = 1u << 1, ///< KEYIN 1 is selected
+ Keyin02 = 1u << 2, ///< KEYIN 2 is selected
+ Keyin03 = 1u << 3, ///< KEYIN 3 is selected
+ Keyin04 = 1u << 4, ///< KEYIN 4 is selected
+ Keyin05 = 1u << 5, ///< KEYIN 5 is selected
+ Keyin06 = 1u << 6, ///< KEYIN 6 is selected
+ Keyin07 = 1u << 7, ///< KEYIN 7 is selected
+ Keyin08 = 1u << 8, ///< KEYIN 8 is selected
+ Keyin09 = 1u << 9, ///< KEYIN 9 is selected
+ Keyin10 = 1u << 10, ///< KEYIN 10 is selected
+ Keyin11 = 1u << 11, ///< KEYIN 11 is selected
+ Keyin12 = 1u << 12, ///< KEYIN 12 is selected
+ Keyin13 = 1u << 13, ///< KEYIN 13 is selected
+ Keyin14 = 1u << 14, ///< KEYIN 14 is selected
+ Keyin15 = 1u << 15, ///< KEYIN 15 is selected
+}en_keyin_sel_t;
+
+/**
+ *******************************************************************************
+ ** \brief Keyscan configuration
+ **
+ ** \note The Keyscan configuration structure
+ ******************************************************************************/
+typedef struct stc_keyscan_config
+{
+ en_hiz_cycle_t enHizCycle; ///< KEYOUT Hiz state cycles, ref @ en_hiz_cycle_t for details
+ en_low_cycle_t enLowCycle; ///< KEYOUT Low state cycles, ref @ en_low_cycle_t for details
+ en_keyscan_clk_t enKeyscanClk; ///< Key scan clock, ref @ en_keyscan_clk_t for details
+ en_keyout_sel_t enKeyoutSel; ///< KEYOUT selection, ref @ en_keyout_sel_t for details
+ uint16_t u16KeyinSel; ///< KEYIN selection, ref @ en_keyin_sel_t for details
+}stc_keyscan_config_t;
+
+/*******************************************************************************
+ * Global pre-processor symbols/macros ('#define')
+ ******************************************************************************/
+
+/*******************************************************************************
+ * Global variable definitions ('extern')
+ ******************************************************************************/
+
+/*******************************************************************************
+ * Global function prototypes (definition in C source)
+ ******************************************************************************/
+extern en_result_t KEYSCAN_Init(const stc_keyscan_config_t *pstcKeyscanConfig);
+extern en_result_t KEYSCAN_DeInit(void);
+extern en_result_t KEYSCAN_Start(void);
+extern en_result_t KEYSCAN_Stop(void);
+extern uint8_t KEYSCAN_GetColIdx(void);
+
+//@} // KeyscanGroup
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* __HC32F460_KEYSCAN_H__ */
+/*******************************************************************************
+ * EOF (not truncated)
+ ******************************************************************************/
|