| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823 |
- /*
- * Copyright (C) 2022-2024, Xiaohua Semiconductor Co., Ltd.
- *
- * SPDX-License-Identifier: Apache-2.0
- *
- * Change Logs:
- * Date Author Notes
- * 2023-06-09 CDT first version
- */
- #include "board.h"
- #include "drv_config.h"
- #ifdef RT_USING_PULSE_ENCODER
- #include "drv_irq.h"
- // #define DRV_DEBUG
- #define LOG_TAG "drv_pulse_encoder"
- #include <drv_log.h>
- #if defined(BSP_USING_TMRA_PULSE_ENCODER)
- #if !defined(BSP_USING_PULSE_ENCODER_TMRA_1) && !defined(BSP_USING_PULSE_ENCODER_TMRA_2) && !defined(BSP_USING_PULSE_ENCODER_TMRA_3) && \
- !defined(BSP_USING_PULSE_ENCODER_TMRA_4) && !defined(BSP_USING_PULSE_ENCODER_TMRA_5) && !defined(BSP_USING_PULSE_ENCODER_TMRA_6) && \
- !defined(BSP_USING_PULSE_ENCODER_TMRA_7) && !defined(BSP_USING_PULSE_ENCODER_TMRA_8) && !defined(BSP_USING_PULSE_ENCODER_TMRA_9) && \
- !defined(BSP_USING_PULSE_ENCODER_TMRA_10) && !defined(BSP_USING_PULSE_ENCODER_TMRA_11) && !defined(BSP_USING_PULSE_ENCODER_TMRA_12)
- #error "Please define at least one BSP_USING_PULSE_ENCODERx"
- /* this driver can be disabled at menuconfig -> RT-Thread Components -> Device Drivers */
- #endif
- enum
- {
- #ifdef BSP_USING_PULSE_ENCODER_TMRA_1
- PULSE_ENCODER_TMRA_1_INDEX,
- #endif
- #ifdef BSP_USING_PULSE_ENCODER_TMRA_2
- PULSE_ENCODER_TMRA_2_INDEX,
- #endif
- #ifdef BSP_USING_PULSE_ENCODER_TMRA_3
- PULSE_ENCODER_TMRA_3_INDEX,
- #endif
- #ifdef BSP_USING_PULSE_ENCODER_TMRA_4
- PULSE_ENCODER_TMRA_4_INDEX,
- #endif
- #ifdef BSP_USING_PULSE_ENCODER_TMRA_5
- PULSE_ENCODER_TMRA_5_INDEX,
- #endif
- #ifdef BSP_USING_PULSE_ENCODER_TMRA_6
- PULSE_ENCODER_TMRA_6_INDEX,
- #endif
- #ifdef BSP_USING_PULSE_ENCODER_TMRA_7
- PULSE_ENCODER_TMRA_7_INDEX,
- #endif
- #ifdef BSP_USING_PULSE_ENCODER_TMRA_8
- PULSE_ENCODER_TMRA_8_INDEX,
- #endif
- #ifdef BSP_USING_PULSE_ENCODER_TMRA_9
- PULSE_ENCODER_TMRA_9_INDEX,
- #endif
- #ifdef BSP_USING_PULSE_ENCODER_TMRA_10
- PULSE_ENCODER_TMRA_10_INDEX,
- #endif
- #ifdef BSP_USING_PULSE_ENCODER_TMRA_11
- PULSE_ENCODER_TMRA_11_INDEX,
- #endif
- #ifdef BSP_USING_PULSE_ENCODER_TMRA_12
- PULSE_ENCODER_TMRA_12_INDEX,
- #endif
- };
- struct hc32_pulse_encoder_tmra_device
- {
- struct rt_pulse_encoder_device pulse_encoder;
- CM_TMRA_TypeDef *tmr_handler;
- uint32_t u32Fcg2Periph;
- struct
- {
- uint16_t u16CountUpCond;
- uint16_t u16CountDownCond;
- } hw_count;
- struct
- {
- en_int_src_t enIntSrc_Ovf;
- IRQn_Type enIRQn_Ovf;
- uint8_t u8Int_Prio_Ovf;
- func_ptr_t Irq_Ovf_Callback;
- en_int_src_t enIntSrc_Udf;
- IRQn_Type enIRQn_Udf;
- uint8_t u8Int_Prio_Udf;
- func_ptr_t Irq_Udf_Callback;
- } isr;
- rt_uint32_t u32PeriodValue;
- rt_int32_t Over_Under_Flowcount;
- char *name;
- };
- static struct hc32_pulse_encoder_tmra_device hc32_pulse_encoder_tmra_obj[] =
- {
- #ifdef BSP_USING_PULSE_ENCODER_TMRA_1
- PULSE_ENCODER_TMRA_1_CONFIG,
- #endif
- #ifdef BSP_USING_PULSE_ENCODER_TMRA_2
- PULSE_ENCODER_TMRA_2_CONFIG,
- #endif
- #ifdef BSP_USING_PULSE_ENCODER_TMRA_3
- PULSE_ENCODER_TMRA_3_CONFIG,
- #endif
- #ifdef BSP_USING_PULSE_ENCODER_TMRA_4
- PULSE_ENCODER_TMRA_4_CONFIG,
- #endif
- #ifdef BSP_USING_PULSE_ENCODER_TMRA_5
- PULSE_ENCODER_TMRA_5_CONFIG,
- #endif
- #ifdef BSP_USING_PULSE_ENCODER_TMRA_6
- PULSE_ENCODER_TMRA_6_CONFIG,
- #endif
- #ifdef BSP_USING_PULSE_ENCODER_TMRA_7
- PULSE_ENCODER_TMRA_7_CONFIG,
- #endif
- #ifdef BSP_USING_PULSE_ENCODER_TMRA_8
- PULSE_ENCODER_TMRA_8_CONFIG,
- #endif
- #ifdef BSP_USING_PULSE_ENCODER_TMRA_9
- PULSE_ENCODER_TMRA_9_CONFIG,
- #endif
- #ifdef BSP_USING_PULSE_ENCODER_TMRA_10
- PULSE_ENCODER_TMRA_10_CONFIG,
- #endif
- #ifdef BSP_USING_PULSE_ENCODER_TMRA_11
- PULSE_ENCODER_TMRA_11_CONFIG,
- #endif
- #ifdef BSP_USING_PULSE_ENCODER_TMRA_12
- PULSE_ENCODER_TMRA_12_CONFIG,
- #endif
- };
- #ifdef BSP_USING_PULSE_ENCODER_TMRA_1
- static void TMRA_1_Ovf_callback(void)
- {
- TMRA_ClearStatus(hc32_pulse_encoder_tmra_obj[PULSE_ENCODER_TMRA_1_INDEX].tmr_handler, TMRA_FLAG_OVF);
- hc32_pulse_encoder_tmra_obj[PULSE_ENCODER_TMRA_1_INDEX].Over_Under_Flowcount++;
- }
- static void TMRA_1_Udf_callback(void)
- {
- TMRA_ClearStatus(hc32_pulse_encoder_tmra_obj[PULSE_ENCODER_TMRA_1_INDEX].tmr_handler, TMRA_FLAG_UDF);
- hc32_pulse_encoder_tmra_obj[PULSE_ENCODER_TMRA_1_INDEX].Over_Under_Flowcount--;
- }
- #endif
- #ifdef BSP_USING_PULSE_ENCODER_TMRA_2
- static void TMRA_2_Ovf_callback(void)
- {
- TMRA_ClearStatus(hc32_pulse_encoder_tmra_obj[PULSE_ENCODER_TMRA_2_INDEX].tmr_handler, TMRA_FLAG_OVF);
- hc32_pulse_encoder_tmra_obj[PULSE_ENCODER_TMRA_2_INDEX].Over_Under_Flowcount++;
- }
- static void TMRA_2_Udf_callback(void)
- {
- TMRA_ClearStatus(hc32_pulse_encoder_tmra_obj[PULSE_ENCODER_TMRA_2_INDEX].tmr_handler, TMRA_FLAG_UDF);
- hc32_pulse_encoder_tmra_obj[PULSE_ENCODER_TMRA_2_INDEX].Over_Under_Flowcount--;
- }
- #endif
- #ifdef BSP_USING_PULSE_ENCODER_TMRA_3
- static void TMRA_3_Ovf_callback(void)
- {
- TMRA_ClearStatus(hc32_pulse_encoder_tmra_obj[PULSE_ENCODER_TMRA_3_INDEX].tmr_handler, TMRA_FLAG_OVF);
- hc32_pulse_encoder_tmra_obj[PULSE_ENCODER_TMRA_3_INDEX].Over_Under_Flowcount++;
- }
- static void TMRA_3_Udf_callback(void)
- {
- TMRA_ClearStatus(hc32_pulse_encoder_tmra_obj[PULSE_ENCODER_TMRA_3_INDEX].tmr_handler, TMRA_FLAG_UDF);
- hc32_pulse_encoder_tmra_obj[PULSE_ENCODER_TMRA_3_INDEX].Over_Under_Flowcount--;
- }
- #endif
- #ifdef BSP_USING_PULSE_ENCODER_TMRA_4
- static void TMRA_4_Ovf_callback(void)
- {
- TMRA_ClearStatus(hc32_pulse_encoder_tmra_obj[PULSE_ENCODER_TMRA_4_INDEX].tmr_handler, TMRA_FLAG_OVF);
- hc32_pulse_encoder_tmra_obj[PULSE_ENCODER_TMRA_4_INDEX].Over_Under_Flowcount++;
- }
- static void TMRA_4_Udf_callback(void)
- {
- TMRA_ClearStatus(hc32_pulse_encoder_tmra_obj[PULSE_ENCODER_TMRA_4_INDEX].tmr_handler, TMRA_FLAG_UDF);
- hc32_pulse_encoder_tmra_obj[PULSE_ENCODER_TMRA_4_INDEX].Over_Under_Flowcount--;
- }
- #endif
- #ifdef BSP_USING_PULSE_ENCODER_TMRA_5
- static void TMRA_5_Ovf_callback(void)
- {
- TMRA_ClearStatus(hc32_pulse_encoder_tmra_obj[PULSE_ENCODER_TMRA_5_INDEX].tmr_handler, TMRA_FLAG_OVF);
- hc32_pulse_encoder_tmra_obj[PULSE_ENCODER_TMRA_5_INDEX].Over_Under_Flowcount++;
- }
- static void TMRA_5_Udf_callback(void)
- {
- TMRA_ClearStatus(hc32_pulse_encoder_tmra_obj[PULSE_ENCODER_TMRA_5_INDEX].tmr_handler, TMRA_FLAG_UDF);
- hc32_pulse_encoder_tmra_obj[PULSE_ENCODER_TMRA_5_INDEX].Over_Under_Flowcount--;
- }
- #endif
- #ifdef BSP_USING_PULSE_ENCODER_TMRA_6
- static void TMRA_6_Ovf_callback(void)
- {
- TMRA_ClearStatus(hc32_pulse_encoder_tmra_obj[PULSE_ENCODER_TMRA_6_INDEX].tmr_handler, TMRA_FLAG_OVF);
- hc32_pulse_encoder_tmra_obj[PULSE_ENCODER_TMRA_6_INDEX].Over_Under_Flowcount++;
- }
- static void TMRA_6_Udf_callback(void)
- {
- TMRA_ClearStatus(hc32_pulse_encoder_tmra_obj[PULSE_ENCODER_TMRA_6_INDEX].tmr_handler, TMRA_FLAG_UDF);
- hc32_pulse_encoder_tmra_obj[PULSE_ENCODER_TMRA_6_INDEX].Over_Under_Flowcount--;
- }
- #endif
- #ifdef BSP_USING_PULSE_ENCODER_TMRA_7
- static void TMRA_7_Ovf_callback(void)
- {
- TMRA_ClearStatus(hc32_pulse_encoder_tmra_obj[PULSE_ENCODER_TMRA_7_INDEX].tmr_handler, TMRA_FLAG_OVF);
- hc32_pulse_encoder_tmra_obj[PULSE_ENCODER_TMRA_7_INDEX].Over_Under_Flowcount++;
- }
- static void TMRA_7_Udf_callback(void)
- {
- TMRA_ClearStatus(hc32_pulse_encoder_tmra_obj[PULSE_ENCODER_TMRA_7_INDEX].tmr_handler, TMRA_FLAG_UDF);
- hc32_pulse_encoder_tmra_obj[PULSE_ENCODER_TMRA_7_INDEX].Over_Under_Flowcount--;
- }
- #endif
- #ifdef BSP_USING_PULSE_ENCODER_TMRA_8
- static void TMRA_8_Ovf_callback(void)
- {
- TMRA_ClearStatus(hc32_pulse_encoder_tmra_obj[PULSE_ENCODER_TMRA_8_INDEX].tmr_handler, TMRA_FLAG_OVF);
- hc32_pulse_encoder_tmra_obj[PULSE_ENCODER_TMRA_8_INDEX].Over_Under_Flowcount++;
- }
- static void TMRA_8_Udf_callback(void)
- {
- TMRA_ClearStatus(hc32_pulse_encoder_tmra_obj[PULSE_ENCODER_TMRA_8_INDEX].tmr_handler, TMRA_FLAG_UDF);
- hc32_pulse_encoder_tmra_obj[PULSE_ENCODER_TMRA_8_INDEX].Over_Under_Flowcount--;
- }
- #endif
- #ifdef BSP_USING_PULSE_ENCODER_TMRA_9
- static void TMRA_9_Ovf_callback(void)
- {
- TMRA_ClearStatus(hc32_pulse_encoder_tmra_obj[PULSE_ENCODER_TMRA_9_INDEX].tmr_handler, TMRA_FLAG_OVF);
- hc32_pulse_encoder_tmra_obj[PULSE_ENCODER_TMRA_9_INDEX].Over_Under_Flowcount++;
- }
- static void TMRA_9_Udf_callback(void)
- {
- TMRA_ClearStatus(hc32_pulse_encoder_tmra_obj[PULSE_ENCODER_TMRA_9_INDEX].tmr_handler, TMRA_FLAG_UDF);
- hc32_pulse_encoder_tmra_obj[PULSE_ENCODER_TMRA_9_INDEX].Over_Under_Flowcount--;
- }
- #endif
- #ifdef BSP_USING_PULSE_ENCODER_TMRA_10
- static void TMRA_10_Ovf_callback(void)
- {
- TMRA_ClearStatus(hc32_pulse_encoder_tmra_obj[PULSE_ENCODER_TMRA_10_INDEX].tmr_handler, TMRA_FLAG_OVF);
- hc32_pulse_encoder_tmra_obj[PULSE_ENCODER_TMRA_10_INDEX].Over_Under_Flowcount++;
- }
- static void TMRA_10_Udf_callback(void)
- {
- TMRA_ClearStatus(hc32_pulse_encoder_tmra_obj[PULSE_ENCODER_TMRA_10_INDEX].tmr_handler, TMRA_FLAG_UDF);
- hc32_pulse_encoder_tmra_obj[PULSE_ENCODER_TMRA_10_INDEX].Over_Under_Flowcount--;
- }
- #endif
- #ifdef BSP_USING_PULSE_ENCODER_TMRA_11
- static void TMRA_11_Ovf_callback(void)
- {
- TMRA_ClearStatus(hc32_pulse_encoder_tmra_obj[PULSE_ENCODER_TMRA_11_INDEX].tmr_handler, TMRA_FLAG_OVF);
- hc32_pulse_encoder_tmra_obj[PULSE_ENCODER_TMRA_11_INDEX].Over_Under_Flowcount++;
- }
- static void TMRA_11_Udf_callback(void)
- {
- TMRA_ClearStatus(hc32_pulse_encoder_tmra_obj[PULSE_ENCODER_TMRA_11_INDEX].tmr_handler, TMRA_FLAG_UDF);
- hc32_pulse_encoder_tmra_obj[PULSE_ENCODER_TMRA_11_INDEX].Over_Under_Flowcount--;
- }
- #endif
- #ifdef BSP_USING_PULSE_ENCODER_TMRA_12
- static void TMRA_12_Ovf_callback(void)
- {
- TMRA_ClearStatus(hc32_pulse_encoder_tmra_obj[PULSE_ENCODER_TMRA_12_INDEX].tmr_handler, TMRA_FLAG_OVF);
- hc32_pulse_encoder_tmra_obj[PULSE_ENCODER_TMRA_12_INDEX].Over_Under_Flowcount++;
- }
- static void TMRA_12_Udf_callback(void)
- {
- TMRA_ClearStatus(hc32_pulse_encoder_tmra_obj[PULSE_ENCODER_TMRA_12_INDEX].tmr_handler, TMRA_FLAG_UDF);
- hc32_pulse_encoder_tmra_obj[PULSE_ENCODER_TMRA_12_INDEX].Over_Under_Flowcount--;
- }
- #endif
- /**
- * @brief This function gets pulse_encoder_tima irq handle.
- * @param None
- * @retval None
- */
- static void hc32_get_pulse_encoder_tmra_callback(void)
- {
- #ifdef BSP_USING_PULSE_ENCODER_TMRA_1
- hc32_pulse_encoder_tmra_obj[PULSE_ENCODER_TMRA_1_INDEX].isr.Irq_Ovf_Callback = TMRA_1_Ovf_callback;
- hc32_pulse_encoder_tmra_obj[PULSE_ENCODER_TMRA_1_INDEX].isr.Irq_Udf_Callback = TMRA_1_Udf_callback;
- #endif
- #ifdef BSP_USING_PULSE_ENCODER_TMRA_2
- hc32_pulse_encoder_tmra_obj[PULSE_ENCODER_TMRA_2_INDEX].isr.Irq_Ovf_Callback = TMRA_2_Ovf_callback;
- hc32_pulse_encoder_tmra_obj[PULSE_ENCODER_TMRA_2_INDEX].isr.Irq_Udf_Callback = TMRA_2_Udf_callback;
- #endif
- #ifdef BSP_USING_PULSE_ENCODER_TMRA_3
- hc32_pulse_encoder_tmra_obj[PULSE_ENCODER_TMRA_3_INDEX].isr.Irq_Ovf_Callback = TMRA_3_Ovf_callback;
- hc32_pulse_encoder_tmra_obj[PULSE_ENCODER_TMRA_3_INDEX].isr.Irq_Udf_Callback = TMRA_3_Udf_callback;
- #endif
- #ifdef BSP_USING_PULSE_ENCODER_TMRA_4
- hc32_pulse_encoder_tmra_obj[PULSE_ENCODER_TMRA_4_INDEX].isr.Irq_Ovf_Callback = TMRA_4_Ovf_callback;
- hc32_pulse_encoder_tmra_obj[PULSE_ENCODER_TMRA_4_INDEX].isr.Irq_Udf_Callback = TMRA_4_Udf_callback;
- #endif
- #ifdef BSP_USING_PULSE_ENCODER_TMRA_5
- hc32_pulse_encoder_tmra_obj[PULSE_ENCODER_TMRA_5_INDEX].isr.Irq_Ovf_Callback = TMRA_5_Ovf_callback;
- hc32_pulse_encoder_tmra_obj[PULSE_ENCODER_TMRA_5_INDEX].isr.Irq_Udf_Callback = TMRA_5_Udf_callback;
- #endif
- #ifdef BSP_USING_PULSE_ENCODER_TMRA_6
- hc32_pulse_encoder_tmra_obj[PULSE_ENCODER_TMRA_6_INDEX].isr.Irq_Ovf_Callback = TMRA_6_Ovf_callback;
- hc32_pulse_encoder_tmra_obj[PULSE_ENCODER_TMRA_6_INDEX].isr.Irq_Udf_Callback = TMRA_6_Udf_callback;
- #endif
- #ifdef BSP_USING_PULSE_ENCODER_TMRA_7
- hc32_pulse_encoder_tmra_obj[PULSE_ENCODER_TMRA_7_INDEX].isr.Irq_Ovf_Callback = TMRA_7_Ovf_callback;
- hc32_pulse_encoder_tmra_obj[PULSE_ENCODER_TMRA_7_INDEX].isr.Irq_Udf_Callback = TMRA_7_Udf_callback;
- #endif
- #ifdef BSP_USING_PULSE_ENCODER_TMRA_8
- hc32_pulse_encoder_tmra_obj[PULSE_ENCODER_TMRA_8_INDEX].isr.Irq_Ovf_Callback = TMRA_8_Ovf_callback;
- hc32_pulse_encoder_tmra_obj[PULSE_ENCODER_TMRA_8_INDEX].isr.Irq_Udf_Callback = TMRA_8_Udf_callback;
- #endif
- #ifdef BSP_USING_PULSE_ENCODER_TMRA_9
- hc32_pulse_encoder_tmra_obj[PULSE_ENCODER_TMRA_9_INDEX].isr.Irq_Ovf_Callback = TMRA_9_Ovf_callback;
- hc32_pulse_encoder_tmra_obj[PULSE_ENCODER_TMRA_9_INDEX].isr.Irq_Udf_Callback = TMRA_9_Udf_callback;
- #endif
- #ifdef BSP_USING_PULSE_ENCODER_TMRA_10
- hc32_pulse_encoder_tmra_obj[PULSE_ENCODER_TMRA_10_INDEX].isr.Irq_Ovf_Callback = TMRA_10_Ovf_callback;
- hc32_pulse_encoder_tmra_obj[PULSE_ENCODER_TMRA_10_INDEX].isr.Irq_Udf_Callback = TMRA_10_Udf_callback;
- #endif
- #ifdef BSP_USING_PULSE_ENCODER_TMRA_11
- hc32_pulse_encoder_tmra_obj[PULSE_ENCODER_TMRA_11_INDEX].isr.Irq_Ovf_Callback = TMRA_11_Ovf_callback;
- hc32_pulse_encoder_tmra_obj[PULSE_ENCODER_TMRA_11_INDEX].isr.Irq_Udf_Callback = TMRA_11_Udf_callback;
- #endif
- #ifdef BSP_USING_PULSE_ENCODER_TMRA_12
- hc32_pulse_encoder_tmra_obj[PULSE_ENCODER_TMRA_12_INDEX].isr.Irq_Ovf_Callback = TMRA_12_Ovf_callback;
- hc32_pulse_encoder_tmra_obj[PULSE_ENCODER_TMRA_12_INDEX].isr.Irq_Udf_Callback = TMRA_12_Udf_callback;
- #endif
- }
- rt_err_t _tmra_pulse_encoder_init(struct rt_pulse_encoder_device *pulse_encoder)
- {
- stc_tmra_init_t stcTmraInit;
- struct hc32_irq_config irq_config;
- struct hc32_pulse_encoder_tmra_device *hc32_device;
- hc32_device = (struct hc32_pulse_encoder_tmra_device *)pulse_encoder;
- /* Enable TimerA peripheral clock. */
- FCG_Fcg2PeriphClockCmd(hc32_device->u32Fcg2Periph, ENABLE);
- (void)TMRA_StructInit(&stcTmraInit);
- /* Initializes position-count unit. */
- stcTmraInit.u8CountSrc = TMRA_CNT_SRC_HW;
- stcTmraInit.hw_count.u16CountUpCond = hc32_device->hw_count.u16CountUpCond;
- stcTmraInit.hw_count.u16CountDownCond = hc32_device->hw_count.u16CountDownCond;
- stcTmraInit.u32PeriodValue = hc32_device->u32PeriodValue;
- (void)TMRA_Init(hc32_device->tmr_handler, &stcTmraInit);
- /* OVF interrupt configuration */
- irq_config.irq_num = hc32_device->isr.enIRQn_Ovf;
- irq_config.int_src = hc32_device->isr.enIntSrc_Ovf;
- irq_config.irq_prio = hc32_device->isr.u8Int_Prio_Ovf;
- /* register interrupt */
- hc32_install_irq_handler(&irq_config,
- hc32_device->isr.Irq_Ovf_Callback,
- RT_TRUE);
- /* UDF interrupt configuration */
- irq_config.irq_num = hc32_device->isr.enIRQn_Udf;
- irq_config.int_src = hc32_device->isr.enIntSrc_Udf;
- irq_config.irq_prio = hc32_device->isr.u8Int_Prio_Udf;
- /* register interrupt */
- hc32_install_irq_handler(&irq_config,
- hc32_device->isr.Irq_Udf_Callback,
- RT_TRUE);
- /* Enable the specified interrupts of TimerA. */
- TMRA_IntCmd(hc32_device->tmr_handler, TMRA_INT_OVF | TMRA_INT_UDF, ENABLE);
- LOG_D("_tmra_pulse_encoder_init");
- return RT_EOK;
- }
- rt_err_t _tmra_pulse_encoder_clear_count(struct rt_pulse_encoder_device *pulse_encoder)
- {
- rt_uint8_t startFlag = RT_FALSE;
- struct hc32_pulse_encoder_tmra_device *hc32_device;
- hc32_device = (struct hc32_pulse_encoder_tmra_device *)pulse_encoder;
- hc32_device->Over_Under_Flowcount = 0;
- if (READ_REG8_BIT(hc32_device->tmr_handler->BCSTRL, TMRA_BCSTRL_START) == TMRA_BCSTRL_START)
- {
- startFlag = RT_TRUE;
- }
- TMRA_Stop(hc32_device->tmr_handler);
- TMRA_SetCountValue(hc32_device->tmr_handler, 0);
- if (RT_TRUE == startFlag)
- {
- TMRA_Start(hc32_device->tmr_handler);
- }
- return RT_EOK;
- }
- rt_int32_t _tmra_pulse_encoder_get_count(struct rt_pulse_encoder_device *pulse_encoder)
- {
- struct hc32_pulse_encoder_tmra_device *hc32_device;
- hc32_device = (struct hc32_pulse_encoder_tmra_device *)pulse_encoder;
- return (rt_int32_t)((rt_int16_t)TMRA_GetCountValue(hc32_device->tmr_handler) + (hc32_device->Over_Under_Flowcount * (hc32_device->u32PeriodValue + 1)));
- }
- rt_err_t _tmra_pulse_encoder_control(struct rt_pulse_encoder_device *pulse_encoder, rt_uint32_t cmd, void *args)
- {
- rt_err_t result;
- struct hc32_pulse_encoder_tmra_device *hc32_device;
- hc32_device = (struct hc32_pulse_encoder_tmra_device *)pulse_encoder;
- result = RT_EOK;
- switch (cmd)
- {
- case PULSE_ENCODER_CMD_ENABLE:
- TMRA_Start(hc32_device->tmr_handler);
- LOG_D("TMRA_Start");
- break;
- case PULSE_ENCODER_CMD_DISABLE:
- TMRA_Stop(hc32_device->tmr_handler);
- LOG_D("TMRA_Stop");
- break;
- default:
- result = -RT_ENOSYS;
- break;
- }
- return result;
- }
- static const struct rt_pulse_encoder_ops _tmra_ops =
- {
- .init = _tmra_pulse_encoder_init,
- .get_count = _tmra_pulse_encoder_get_count,
- .clear_count = _tmra_pulse_encoder_clear_count,
- .control = _tmra_pulse_encoder_control,
- };
- #endif /* BSP_USING_TMRA_PULSE_ENCODER */
- #if defined(BSP_USING_TMR6_PULSE_ENCODER)
- #if !defined(BSP_USING_PULSE_ENCODER_TMR6_1) && !defined(BSP_USING_PULSE_ENCODER_TMR6_2) && !defined(BSP_USING_PULSE_ENCODER_TMR6_3) && \
- !defined(BSP_USING_PULSE_ENCODER_TMR6_4) && !defined(BSP_USING_PULSE_ENCODER_TMR6_5) && !defined(BSP_USING_PULSE_ENCODER_TMR6_6) && \
- !defined(BSP_USING_PULSE_ENCODER_TMR6_7) && !defined(BSP_USING_PULSE_ENCODER_TMR6_8)
- #error "Please define at least one BSP_USING_PULSE_ENCODERx"
- /* this driver can be disabled at menuconfig -> RT-Thread Components -> Device Drivers */
- #endif
- enum
- {
- #ifdef BSP_USING_PULSE_ENCODER_TMR6_1
- PULSE_ENCODER_TMR6_1_INDEX,
- #endif
- #ifdef BSP_USING_PULSE_ENCODER_TMR6_2
- PULSE_ENCODER_TMR6_2_INDEX,
- #endif
- #ifdef BSP_USING_PULSE_ENCODER_TMR6_3
- PULSE_ENCODER_TMR6_3_INDEX,
- #endif
- #ifdef BSP_USING_PULSE_ENCODER_TMR6_4
- PULSE_ENCODER_TMR6_4_INDEX,
- #endif
- #ifdef BSP_USING_PULSE_ENCODER_TMR6_5
- PULSE_ENCODER_TMR6_5_INDEX,
- #endif
- #ifdef BSP_USING_PULSE_ENCODER_TMR6_6
- PULSE_ENCODER_TMR6_6_INDEX,
- #endif
- #ifdef BSP_USING_PULSE_ENCODER_TMR6_7
- PULSE_ENCODER_TMR6_7_INDEX,
- #endif
- #ifdef BSP_USING_PULSE_ENCODER_TMR6_8
- PULSE_ENCODER_TMR6_8_INDEX,
- #endif
- };
- struct hc32_pulse_encoder_tmr6_device
- {
- struct rt_pulse_encoder_device pulse_encoder;
- CM_TMR6_TypeDef *tmr_handler;
- uint32_t u32Fcg2Periph;
- struct
- {
- uint32_t u32CountUpCond;
- uint32_t u32CountDownCond;
- } hw_count;
- struct
- {
- en_int_src_t enIntSrc_Ovf;
- IRQn_Type enIRQn_Ovf;
- uint8_t u8Int_Prio_Ovf;
- func_ptr_t Irq_Ovf_Callback;
- en_int_src_t enIntSrc_Udf;
- IRQn_Type enIRQn_Udf;
- uint8_t u8Int_Prio_Udf;
- func_ptr_t Irq_Udf_Callback;
- } isr;
- rt_uint32_t u32PeriodValue;
- rt_int32_t Over_Under_Flowcount;
- char *name;
- };
- static struct hc32_pulse_encoder_tmr6_device hc32_pulse_encoder_tmr6_obj[] =
- {
- #ifdef BSP_USING_PULSE_ENCODER_TMR6_1
- PULSE_ENCODER_TMR6_1_CONFIG,
- #endif
- #ifdef BSP_USING_PULSE_ENCODER_TMR6_2
- PULSE_ENCODER_TMR6_2_CONFIG,
- #endif
- #ifdef BSP_USING_PULSE_ENCODER_TMR6_3
- PULSE_ENCODER_TMR6_3_CONFIG,
- #endif
- #ifdef BSP_USING_PULSE_ENCODER_TMR6_4
- PULSE_ENCODER_TMR6_4_CONFIG,
- #endif
- #ifdef BSP_USING_PULSE_ENCODER_TMR6_5
- PULSE_ENCODER_TMR6_5_CONFIG,
- #endif
- #ifdef BSP_USING_PULSE_ENCODER_TMR6_6
- PULSE_ENCODER_TMR6_6_CONFIG,
- #endif
- #ifdef BSP_USING_PULSE_ENCODER_TMR6_7
- PULSE_ENCODER_TMR6_7_CONFIG,
- #endif
- #ifdef BSP_USING_PULSE_ENCODER_TMR6_8
- PULSE_ENCODER_TMR6_8_CONFIG,
- #endif
- };
- #ifdef BSP_USING_PULSE_ENCODER_TMR6_1
- void TMR6_1_Ovf_callback(void)
- {
- TMR6_ClearStatus(hc32_pulse_encoder_tmr6_obj[PULSE_ENCODER_TMR6_1_INDEX].tmr_handler, TMR6_FLAG_OVF);
- hc32_pulse_encoder_tmr6_obj[PULSE_ENCODER_TMR6_1_INDEX].Over_Under_Flowcount++;
- }
- void TMR6_1_Udf_callback(void)
- {
- TMR6_ClearStatus(hc32_pulse_encoder_tmr6_obj[PULSE_ENCODER_TMR6_1_INDEX].tmr_handler, TMR6_FLAG_UDF);
- hc32_pulse_encoder_tmr6_obj[PULSE_ENCODER_TMR6_1_INDEX].Over_Under_Flowcount--;
- }
- #endif
- #ifdef BSP_USING_PULSE_ENCODER_TMR6_2
- void TMR6_2_Ovf_callback(void)
- {
- TMR6_ClearStatus(hc32_pulse_encoder_tmr6_obj[PULSE_ENCODER_TMR6_2_INDEX].tmr_handler, TMR6_FLAG_OVF);
- hc32_pulse_encoder_tmr6_obj[PULSE_ENCODER_TMR6_2_INDEX].Over_Under_Flowcount++;
- }
- void TMR6_2_Udf_callback(void)
- {
- TMR6_ClearStatus(hc32_pulse_encoder_tmr6_obj[PULSE_ENCODER_TMR6_2_INDEX].tmr_handler, TMR6_FLAG_UDF);
- hc32_pulse_encoder_tmr6_obj[PULSE_ENCODER_TMR6_2_INDEX].Over_Under_Flowcount--;
- }
- #endif
- #ifdef BSP_USING_PULSE_ENCODER_TMR6_3
- void TMR6_3_Ovf_callback(void)
- {
- TMR6_ClearStatus(hc32_pulse_encoder_tmr6_obj[PULSE_ENCODER_TMR6_3_INDEX].tmr_handler, TMR6_FLAG_OVF);
- hc32_pulse_encoder_tmr6_obj[PULSE_ENCODER_TMR6_3_INDEX].Over_Under_Flowcount++;
- }
- void TMR6_3_Udf_callback(void)
- {
- TMR6_ClearStatus(hc32_pulse_encoder_tmr6_obj[PULSE_ENCODER_TMR6_3_INDEX].tmr_handler, TMR6_FLAG_UDF);
- hc32_pulse_encoder_tmr6_obj[PULSE_ENCODER_TMR6_3_INDEX].Over_Under_Flowcount--;
- }
- #endif
- #ifdef BSP_USING_PULSE_ENCODER_TMR6_4
- void TMR6_4_Ovf_callback(void)
- {
- TMR6_ClearStatus(hc32_pulse_encoder_tmr6_obj[PULSE_ENCODER_TMR6_4_INDEX].tmr_handler, TMR6_FLAG_OVF);
- hc32_pulse_encoder_tmr6_obj[PULSE_ENCODER_TMR6_4_INDEX].Over_Under_Flowcount++;
- }
- void TMR6_4_Udf_callback(void)
- {
- TMR6_ClearStatus(hc32_pulse_encoder_tmr6_obj[PULSE_ENCODER_TMR6_4_INDEX].tmr_handler, TMR6_FLAG_UDF);
- hc32_pulse_encoder_tmr6_obj[PULSE_ENCODER_TMR6_4_INDEX].Over_Under_Flowcount--;
- }
- #endif
- #ifdef BSP_USING_PULSE_ENCODER_TMR6_5
- void TMR6_5_Ovf_callback(void)
- {
- TMR6_ClearStatus(hc32_pulse_encoder_tmr6_obj[PULSE_ENCODER_TMR6_5_INDEX].tmr_handler, TMR6_FLAG_OVF);
- hc32_pulse_encoder_tmr6_obj[PULSE_ENCODER_TMR6_5_INDEX].Over_Under_Flowcount++;
- }
- void TMR6_5_Udf_callback(void)
- {
- TMR6_ClearStatus(hc32_pulse_encoder_tmr6_obj[PULSE_ENCODER_TMR6_5_INDEX].tmr_handler, TMR6_FLAG_UDF);
- hc32_pulse_encoder_tmr6_obj[PULSE_ENCODER_TMR6_5_INDEX].Over_Under_Flowcount--;
- }
- #endif
- #ifdef BSP_USING_PULSE_ENCODER_TMR6_6
- void TMR6_6_Ovf_callback(void)
- {
- TMR6_ClearStatus(hc32_pulse_encoder_tmr6_obj[PULSE_ENCODER_TMR6_6_INDEX].tmr_handler, TMR6_FLAG_OVF);
- hc32_pulse_encoder_tmr6_obj[PULSE_ENCODER_TMR6_6_INDEX].Over_Under_Flowcount++;
- }
- void TMR6_6_Udf_callback(void)
- {
- TMR6_ClearStatus(hc32_pulse_encoder_tmr6_obj[PULSE_ENCODER_TMR6_6_INDEX].tmr_handler, TMR6_FLAG_UDF);
- hc32_pulse_encoder_tmr6_obj[PULSE_ENCODER_TMR6_6_INDEX].Over_Under_Flowcount--;
- }
- #endif
- #ifdef BSP_USING_PULSE_ENCODER_TMR6_7
- void TMR6_7_Ovf_callback(void)
- {
- TMR6_ClearStatus(hc32_pulse_encoder_tmr6_obj[PULSE_ENCODER_TMR6_7_INDEX].tmr_handler, TMR6_FLAG_OVF);
- hc32_pulse_encoder_tmr6_obj[PULSE_ENCODER_TMR6_7_INDEX].Over_Under_Flowcount++;
- }
- void TMR6_7_Udf_callback(void)
- {
- TMR6_ClearStatus(hc32_pulse_encoder_tmr6_obj[PULSE_ENCODER_TMR6_7_INDEX].tmr_handler, TMR6_FLAG_UDF);
- hc32_pulse_encoder_tmr6_obj[PULSE_ENCODER_TMR6_7_INDEX].Over_Under_Flowcount--;
- }
- #endif
- #ifdef BSP_USING_PULSE_ENCODER_TMR6_8
- void TMR6_8_Ovf_callback(void)
- {
- TMR6_ClearStatus(hc32_pulse_encoder_tmr6_obj[PULSE_ENCODER_TMR6_8_INDEX].tmr_handler, TMR6_FLAG_OVF);
- hc32_pulse_encoder_tmr6_obj[PULSE_ENCODER_TMR6_8_INDEX].Over_Under_Flowcount++;
- }
- void TMR6_8_Udf_callback(void)
- {
- TMR6_ClearStatus(hc32_pulse_encoder_tmr6_obj[PULSE_ENCODER_TMR6_8_INDEX].tmr_handler, TMR6_FLAG_UDF);
- hc32_pulse_encoder_tmr6_obj[PULSE_ENCODER_TMR6_8_INDEX].Over_Under_Flowcount--;
- }
- #endif
- /**
- * @brief This function gets pulse_encoder_tim6 irq handle.
- * @param None
- * @retval None
- */
- static void hc32_get_pulse_encoder_tmr6_callback(void)
- {
- #ifdef BSP_USING_PULSE_ENCODER_TMR6_1
- hc32_pulse_encoder_tmr6_obj[PULSE_ENCODER_TMR6_1_INDEX].isr.Irq_Ovf_Callback = TMR6_1_Ovf_callback;
- hc32_pulse_encoder_tmr6_obj[PULSE_ENCODER_TMR6_1_INDEX].isr.Irq_Udf_Callback = TMR6_1_Udf_callback;
- #endif
- #ifdef BSP_USING_PULSE_ENCODER_TMR6_2
- hc32_pulse_encoder_tmr6_obj[PULSE_ENCODER_TMR6_2_INDEX].isr.Irq_Ovf_Callback = TMR6_2_Ovf_callback;
- hc32_pulse_encoder_tmr6_obj[PULSE_ENCODER_TMR6_2_INDEX].isr.Irq_Udf_Callback = TMR6_2_Udf_callback;
- #endif
- #ifdef BSP_USING_PULSE_ENCODER_TMR6_3
- hc32_pulse_encoder_tmr6_obj[PULSE_ENCODER_TMR6_3_INDEX].isr.Irq_Ovf_Callback = TMR6_3_Ovf_callback;
- hc32_pulse_encoder_tmr6_obj[PULSE_ENCODER_TMR6_3_INDEX].isr.Irq_Udf_Callback = TMR6_3_Udf_callback;
- #endif
- #ifdef BSP_USING_PULSE_ENCODER_TMR6_4
- hc32_pulse_encoder_tmr6_obj[PULSE_ENCODER_TMR6_4_INDEX].isr.Irq_Ovf_Callback = TMR6_4_Ovf_callback;
- hc32_pulse_encoder_tmr6_obj[PULSE_ENCODER_TMR6_4_INDEX].isr.Irq_Udf_Callback = TMR6_4_Udf_callback;
- #endif
- #ifdef BSP_USING_PULSE_ENCODER_TMR6_5
- hc32_pulse_encoder_tmr6_obj[PULSE_ENCODER_TMR6_5_INDEX].isr.Irq_Ovf_Callback = TMR6_5_Ovf_callback;
- hc32_pulse_encoder_tmr6_obj[PULSE_ENCODER_TMR6_5_INDEX].isr.Irq_Udf_Callback = TMR6_5_Udf_callback;
- #endif
- #ifdef BSP_USING_PULSE_ENCODER_TMR6_6
- hc32_pulse_encoder_tmr6_obj[PULSE_ENCODER_TMR6_6_INDEX].isr.Irq_Ovf_Callback = TMR6_6_Ovf_callback;
- hc32_pulse_encoder_tmr6_obj[PULSE_ENCODER_TMR6_6_INDEX].isr.Irq_Udf_Callback = TMR6_6_Udf_callback;
- #endif
- #ifdef BSP_USING_PULSE_ENCODER_TMR6_7
- hc32_pulse_encoder_tmr6_obj[PULSE_ENCODER_TMR6_7_INDEX].isr.Irq_Ovf_Callback = TMR6_7_Ovf_callback;
- hc32_pulse_encoder_tmr6_obj[PULSE_ENCODER_TMR6_7_INDEX].isr.Irq_Udf_Callback = TMR6_7_Udf_callback;
- #endif
- #ifdef BSP_USING_PULSE_ENCODER_TMR6_8
- hc32_pulse_encoder_tmr6_obj[PULSE_ENCODER_TMR6_8_INDEX].isr.Irq_Ovf_Callback = TMR6_8_Ovf_callback;
- hc32_pulse_encoder_tmr6_obj[PULSE_ENCODER_TMR6_8_INDEX].isr.Irq_Udf_Callback = TMR6_8_Udf_callback;
- #endif
- }
- rt_err_t _tmr6_pulse_encoder_init(struct rt_pulse_encoder_device *pulse_encoder)
- {
- stc_tmr6_init_t stcTmr6Init;
- struct hc32_irq_config irq_config;
- struct hc32_pulse_encoder_tmr6_device *hc32_device;
- hc32_device = (struct hc32_pulse_encoder_tmr6_device *)pulse_encoder;
- /* Enable Timer6 peripheral clock. */
- FCG_Fcg2PeriphClockCmd(hc32_device->u32Fcg2Periph, ENABLE);
- (void)TMR6_StructInit(&stcTmr6Init);
- /* Initializes position-count unit. */
- stcTmr6Init.u8CountSrc = TMR6_CNT_SRC_HW;
- stcTmr6Init.hw_count.u32CountUpCond = hc32_device->hw_count.u32CountUpCond;
- stcTmr6Init.hw_count.u32CountDownCond = hc32_device->hw_count.u32CountDownCond;
- stcTmr6Init.u32PeriodValue = hc32_device->u32PeriodValue;
- (void)TMR6_Init(hc32_device->tmr_handler, &stcTmr6Init);
- /* OVF interrupt configuration */
- irq_config.irq_num = hc32_device->isr.enIRQn_Ovf;
- irq_config.int_src = hc32_device->isr.enIntSrc_Ovf;
- irq_config.irq_prio = hc32_device->isr.u8Int_Prio_Ovf;
- /* register interrupt */
- hc32_install_irq_handler(&irq_config,
- hc32_device->isr.Irq_Ovf_Callback,
- RT_TRUE);
- /* UDF interrupt configuration */
- irq_config.irq_num = hc32_device->isr.enIRQn_Udf;
- irq_config.int_src = hc32_device->isr.enIntSrc_Udf;
- irq_config.irq_prio = hc32_device->isr.u8Int_Prio_Udf;
- /* register interrupt */
- hc32_install_irq_handler(&irq_config,
- hc32_device->isr.Irq_Udf_Callback,
- RT_TRUE);
- /* Enable the specified interrupts of Timer6. */
- TMR6_IntCmd(hc32_device->tmr_handler, TMR6_INT_OVF | TMR6_INT_UDF, ENABLE);
- LOG_D("_tmr6_pulse_encoder_init");
- return RT_EOK;
- }
- rt_err_t _tmr6_pulse_encoder_clear_count(struct rt_pulse_encoder_device *pulse_encoder)
- {
- rt_uint8_t startFlag = RT_FALSE;
- struct hc32_pulse_encoder_tmr6_device *hc32_device;
- hc32_device = (struct hc32_pulse_encoder_tmr6_device *)pulse_encoder;
- hc32_device->Over_Under_Flowcount = 0;
- if (READ_REG32_BIT(hc32_device->tmr_handler->GCONR, TMR6_GCONR_START) == TMR6_GCONR_START)
- {
- startFlag = RT_TRUE;
- }
- TMR6_Stop(hc32_device->tmr_handler);
- TMR6_SetCountValue(hc32_device->tmr_handler, 0);
- if (RT_TRUE == startFlag)
- {
- TMR6_Start(hc32_device->tmr_handler);
- }
- return RT_EOK;
- }
- rt_int32_t _tmr6_pulse_encoder_get_count(struct rt_pulse_encoder_device *pulse_encoder)
- {
- struct hc32_pulse_encoder_tmr6_device *hc32_device;
- hc32_device = (struct hc32_pulse_encoder_tmr6_device *)pulse_encoder;
- return (rt_int32_t)((rt_int16_t)TMR6_GetCountValue(hc32_device->tmr_handler) + (hc32_device->Over_Under_Flowcount * (hc32_device->u32PeriodValue + 1)));
- }
- rt_err_t _tmr6_pulse_encoder_control(struct rt_pulse_encoder_device *pulse_encoder, rt_uint32_t cmd, void *args)
- {
- rt_err_t result;
- struct hc32_pulse_encoder_tmr6_device *hc32_device;
- hc32_device = (struct hc32_pulse_encoder_tmr6_device *)pulse_encoder;
- result = RT_EOK;
- switch (cmd)
- {
- case PULSE_ENCODER_CMD_ENABLE:
- TMR6_Start(hc32_device->tmr_handler);
- LOG_D("TMR6_Start");
- break;
- case PULSE_ENCODER_CMD_DISABLE:
- TMR6_Stop(hc32_device->tmr_handler);
- LOG_D("TMR6_Stop");
- break;
- default:
- result = -RT_ENOSYS;
- break;
- }
- return result;
- }
- static const struct rt_pulse_encoder_ops _tmr6_ops =
- {
- .init = _tmr6_pulse_encoder_init,
- .get_count = _tmr6_pulse_encoder_get_count,
- .clear_count = _tmr6_pulse_encoder_clear_count,
- .control = _tmr6_pulse_encoder_control,
- };
- #endif /* BSP_USING_TMR6_PULSE_ENCODER */
- static int rt_hw_pulse_encoder_init(void)
- {
- int result;
- result = RT_EOK;
- #if defined(BSP_USING_TMRA_PULSE_ENCODER)
- extern rt_err_t rt_hw_board_pulse_encoder_tmra_init(void);
- result = rt_hw_board_pulse_encoder_tmra_init();
- hc32_get_pulse_encoder_tmra_callback();
- for (int i = 0; i < sizeof(hc32_pulse_encoder_tmra_obj) / sizeof(hc32_pulse_encoder_tmra_obj[0]); i++)
- {
- hc32_pulse_encoder_tmra_obj[i].pulse_encoder.type = AB_PHASE_PULSE_ENCODER;
- hc32_pulse_encoder_tmra_obj[i].pulse_encoder.ops = &_tmra_ops;
- if (rt_device_pulse_encoder_register(&hc32_pulse_encoder_tmra_obj[i].pulse_encoder, hc32_pulse_encoder_tmra_obj[i].name, RT_NULL) != RT_EOK)
- {
- LOG_E("%s register failed", hc32_pulse_encoder_tmra_obj[i].name);
- result = -RT_ERROR;
- }
- }
- #endif /* BSP_USING_TMRA_PULSE_ENCODER */
- #if defined(BSP_USING_TMR6_PULSE_ENCODER)
- extern rt_err_t rt_hw_board_pulse_encoder_tmr6_init(void);
- result = rt_hw_board_pulse_encoder_tmr6_init();
- hc32_get_pulse_encoder_tmr6_callback();
- for (int i = 0; i < sizeof(hc32_pulse_encoder_tmr6_obj) / sizeof(hc32_pulse_encoder_tmr6_obj[0]); i++)
- {
- hc32_pulse_encoder_tmr6_obj[i].pulse_encoder.type = AB_PHASE_PULSE_ENCODER;
- hc32_pulse_encoder_tmr6_obj[i].pulse_encoder.ops = &_tmr6_ops;
- if (rt_device_pulse_encoder_register(&hc32_pulse_encoder_tmr6_obj[i].pulse_encoder, hc32_pulse_encoder_tmr6_obj[i].name, RT_NULL) != RT_EOK)
- {
- LOG_E("%s register failed", hc32_pulse_encoder_tmr6_obj[i].name);
- result = -RT_ERROR;
- }
- }
- #endif /* BSP_USING_TMR6_PULSE_ENCODER */
- return result;
- }
- INIT_BOARD_EXPORT(rt_hw_pulse_encoder_init);
- #endif /* RT_USING_PULSE_ENCODER */
|