hpw421初始版本
This commit is contained in:
@@ -0,0 +1,172 @@
|
||||
/*!
|
||||
* \file xc_drv_qdec.c
|
||||
*
|
||||
* \brief Target xc qdec driver implementation
|
||||
*
|
||||
* \copyright Revised BSD License, see section \ref LICENSE.
|
||||
*
|
||||
* \code
|
||||
*
|
||||
* _ __ _ ________ _
|
||||
* | |/ /(_)___ / ____/ /_ (_)___
|
||||
* | // / __ \/ / / __ \/ / __ \
|
||||
* / |/ / / / / /___/ / / / / /_/ /
|
||||
* /_/|_/_/_/ /_/\____/_/ /_/_/ .___/
|
||||
* /_/
|
||||
* (C) 2022-2025 XinChip
|
||||
*
|
||||
* \endcode
|
||||
*
|
||||
* \author ( XinChip ) Alex-J
|
||||
*
|
||||
* \author ( XinChip )
|
||||
*/
|
||||
|
||||
/*-----------------------------------------------------------------------------------
|
||||
INCLUDE HEADE FILES
|
||||
------------------------------------------------------------------------------------*/
|
||||
#include "xc_drv_qdec.h"
|
||||
|
||||
/*------------------------------------------------------------------------------------
|
||||
Local Variables
|
||||
-------------------------------------------------------------------------------------*/
|
||||
|
||||
/*------------------------------------------------------------------------------------
|
||||
Func Prototype
|
||||
-------------------------------------------------------------------------------------*/
|
||||
|
||||
/*------------------------------------------------------------------------------------
|
||||
Functions
|
||||
-------------------------------------------------------------------------------------*/
|
||||
/**
|
||||
****************************************************************************************
|
||||
* @brief
|
||||
*
|
||||
* @param[in]
|
||||
* @param[in]
|
||||
****************************************************************************************
|
||||
*/
|
||||
void xc_qdec_init(Qdec_InitCfg_t *init_cfg)
|
||||
{
|
||||
xc_gpio_mux_ctl(GPIO_21, GPIO_Mux2);
|
||||
xc_gpio_mux_ctl(GPIO_20, GPIO_Mux2);
|
||||
|
||||
// DEBUG("0_CTLAPBCLKEN_GRCTL: %08x\n", cpr_ctlapbclken_grctl_get());
|
||||
cpr_ctlapbclken_grctl__qdec_pclk_en__setf(ENABLE);
|
||||
// DEBUG("1_CTLAPBCLKEN_GRCTL: %08x\n", cpr_ctlapbclken_grctl_get());
|
||||
cpr_rstctl_ctlapb_sw__qdec_rstn__setf(~ENABLE);
|
||||
cpr_rstctl_ctlapb_sw__qdec_rstn__setf(~DISABLE);
|
||||
DEBUG("0_QDEC_CLK_CTL: %08x\n", cpr_qdec_clk_ctl_get());
|
||||
cpr_qdec_clk_ctl__qdec_clk_div__setf(0x07);
|
||||
cpr_qdec_clk_ctl__qdec_clk_en__setf(ENABLE);
|
||||
DEBUG("1_QDEC_CLK_CTL: %08x\n", cpr_qdec_clk_ctl_get());
|
||||
if(ENABLE == init_cfg->auto_clr_en) {
|
||||
qdec_ctl__auto_clr_en__setf(ENABLE);
|
||||
} else {
|
||||
qdec_ctl__auto_clr_en__setf(DISABLE);
|
||||
}
|
||||
|
||||
if(ENABLE == init_cfg->single_sample_rst_en) {
|
||||
qdec_ctl__single_sample_rst_en__setf(ENABLE);
|
||||
} else {
|
||||
qdec_ctl__single_sample_rst_en__setf(DISABLE);
|
||||
}
|
||||
|
||||
if(ENABLE == init_cfg->db_filter_en) {
|
||||
qdec_ctl__db_filter_en__setf(ENABLE);
|
||||
} else {
|
||||
qdec_ctl__db_filter_en__setf(DISABLE);
|
||||
}
|
||||
QDEC_CTL_REG = 0x40;
|
||||
qdec_samp_ctl_pack(init_cfg->db_sample_div,
|
||||
init_cfg->num_pts_sampled,
|
||||
init_cfg->acc_sample_div);
|
||||
|
||||
qdec_int_msk_pack(ENABLE, ENABLE, ENABLE, DISABLE);
|
||||
}
|
||||
|
||||
/**
|
||||
****************************************************************************************
|
||||
* @brief
|
||||
*
|
||||
* @param[in]
|
||||
* @param[in]
|
||||
****************************************************************************************
|
||||
*/
|
||||
void xc_qdec_enable(void)
|
||||
{
|
||||
qdec_ctl__qdec_en__setf(ENABLE);
|
||||
}
|
||||
|
||||
/**
|
||||
****************************************************************************************
|
||||
* @brief
|
||||
*
|
||||
* @param[in]
|
||||
* @param[in]
|
||||
****************************************************************************************
|
||||
*/
|
||||
void xc_qdec_disable(void)
|
||||
{
|
||||
qdec_ctl__qdec_en__setf(DISABLE);
|
||||
}
|
||||
|
||||
/**
|
||||
****************************************************************************************
|
||||
* @brief
|
||||
*
|
||||
* @param[in]
|
||||
* @param[in]
|
||||
****************************************************************************************
|
||||
*/
|
||||
void xc_qdec_start(void)
|
||||
{
|
||||
qdec_ctl__qdec_start__setf(ENABLE);
|
||||
}
|
||||
|
||||
/**
|
||||
****************************************************************************************
|
||||
* @brief
|
||||
*
|
||||
* @param[in]
|
||||
* @param[in]
|
||||
****************************************************************************************
|
||||
*/
|
||||
void xc_qdec_stop(void)
|
||||
{
|
||||
qdec_ctl__qdec_start__setf(DISABLE);
|
||||
}
|
||||
|
||||
/**
|
||||
****************************************************************************************
|
||||
* @brief
|
||||
*
|
||||
* @param[in]
|
||||
* @param[in]
|
||||
****************************************************************************************
|
||||
*/
|
||||
void QDEC_Handler(void)
|
||||
{
|
||||
uint8_t qdec_int_mask = qdec_int_msk_get( );
|
||||
uint8_t qdec_int = qdec_int_get( );
|
||||
uint8_t qdec_int_sta = (qdec_int & qdec_int_mask);
|
||||
qdec_int_set(qdec_int);
|
||||
|
||||
if(SINGLE_SAMPLE_MSK_BIT == (qdec_int_sta & SINGLE_SAMPLE_MSK_BIT)) {
|
||||
DEBUG("__SINGLE_SAMPLE_INT__\n");
|
||||
}
|
||||
|
||||
if(SAMPLE_END_MSK_BIT == (qdec_int_sta & SAMPLE_END_MSK_BIT)) {
|
||||
DEBUG("__SAMPLE_END_INT__\n");
|
||||
DEBUG("Sample: %04x\n", (uint16_t)qdec_acc_get( ));
|
||||
DEBUG("DB: %02x\n", (uint8_t)qdec_db_get( ));
|
||||
}
|
||||
|
||||
if(ACC_OF_MSK_BIT == (qdec_int_sta & ACC_OF_MSK_BIT)) {
|
||||
DEBUG("__ACC_INT__\n");
|
||||
}
|
||||
|
||||
if(DB_OF_MSK_BIT == (qdec_int_sta & DB_OF_MSK_BIT)) {
|
||||
DEBUG("__DB_INT__\n");
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user