21ic问答首页 - 各位大佬,有HC32F460的EC11旋转编码器的实现没?
各位大佬,有HC32F460的EC11旋转编码器的实现没?
uint8_t state = 100;static void TimeraUnit1Over_IrqCallback(void){ state--; //ʹLED0µçƽ½øÐз´×ª TIMERA_ClearFlag(TIMERA_UNIT1, TimeraFlagOverflow); //Çå³ýÖжϱê־λ}/** ******************************************************************************* ** \brief Timera unit 1 count underflow callback function ** ** \param [in] None ** ** \retval None ** ******************************************************************************/static void TimeraUnit1Under_IrqCallback(void){ state++; TIMERA_ClearFlag(TIMERA_UNIT1, TimeraFlagUnderflow); //Çå³ýÖжϱê־λ}void Timera_Config(void){ stc_timera_base_init_t stcTimeraInit; //¶¨Òå TimerA µÄ³õʼ»¯½á¹¹Ìå stc_irq_regi_conf_t stcIrqRegiConf; //¶¨Ò嶨ʱÆ÷Òç³öÖжÏÅäÖýṹÌå stc_timera_orthogonal_coding_init_t stcTimeraCondingInit; //¶¨Òå±àÂë¼ÆÊý³õʼ»¯½á¹¹Ìå /* configuration structure initialization */ MEM_ZERO_STRUCT(stcTimeraInit); //¶Ô½á¹¹ÌåÇåÁã MEM_ZERO_STRUCT(stcIrqRegiConf); //¶Ô½á¹¹ÌåÇåÁã MEM_ZERO_STRUCT(stcTimeraCondingInit); //¶Ô½á¹¹ÌåÇåÁã /* Configuration peripheral clock */ PWC_Fcg2PeriphClockCmd(TIMERA_UNIT1_CLOCK, Enable); //ʹÄÜTimerA1µÄʱÖÓ /* Configuration TIMERA coding pin */ PORT_SetFunc(TIMERA_UNIT1_CLKA_PORT, TIMERA_UNIT1_CLKA_PIN, TIMERA_UNIT1_CLKA_FUNC, Disable); //ÅäÖö˿ڵĸ´Óù¦ÄÜ£¬¸±¹¦Äܲ»ÆôÓà PORT_SetFunc(TIMERA_UNIT1_CLKB_PORT, TIMERA_UNIT1_CLKB_PIN, TIMERA_UNIT1_CLKB_FUNC, Disable); //ÅäÖö˿ڵĸ´Óù¦ÄÜ£¬¸±¹¦Äܲ»ÆôÓà /* Configuration timera unit 1 structure */ stcTimeraInit.enCntMode = TimeraCountModeSawtoothWave; //ÅäÖÃΪ¾â³Ý²¨Ä£Ê½ ÅäÖÿØÖÆ×´Ì¬¼Ä´æÆ÷ TMRA_BCSTR Bit[2] Mode stcTimeraInit.enSyncStartupEn = Disable; //ÅäÖÃÓëµ¥Ôª1ͬ²½Æô¶¯ ÅäÖÿØÖÆ×´Ì¬¼Ä´æÆ÷ TMRA_BCSTR Bit[3] SYNST stcTimeraInit.u16PeriodVal = 1000u; //ÅäÖüÆÊýÆ÷µÄÖÜÆÚ ÖÜÆÚ»ù×¼Öµ¼Ä´æÆ÷ TMRA_PERAR Bit[15:0] TIMERA_BaseInit(TIMERA_UNIT1, &stcTimeraInit); //³õʼ»¯ÅäÖà TIMERA_IrqCmd(TIMERA_UNIT1, TimeraIrqOverflow, Enable); //ʹÄÜÏòÉϼÆÊýÒç³öÖжÏʹÄÜ TIMERA_IrqCmd(TIMERA_UNIT1, TimeraIrqUnderflow, Enable); //ʹÄÜÏòϼÆÊýÒç³öÖжÏʹÄÜ /* Configure coding count structure */ stcTimeraCondingInit.enIncClkBHighAndClkARisingEn = Enable; //µ± ClkB Ϊ¸ßµçƽʱ ClkA ÉÏÉýÑØÊ±Ó²¼þµÝ¼ÓÓÐЧ stcTimeraCondingInit.enDecClkBLowAndClkARisingEn = Enable; //µ± ClkB ΪµÍµçƽʱ ClkA ÉÏÉýÑØÊ±Ó²¼þµÝ¼õÓÐЧ stcTimeraCondingInit.enClkAFilterEn = Enable; //ʹÄÜ ClkA ÊäÈë¶Ë¿ÚÂ˲¨¹¦ÄÜʹÄÜ stcTimeraCondingInit.enClkAClkDiv = TimeraFilterPclkDiv4; //Â˲¨²ÉÑù»ù׼ʱÖÓÑ¡ÔñCA stcTimeraCondingInit.enClkBFilterEn = Enable; //ʹÄÜ ClkB ÊäÈë¶Ë¿ÚÂ˲¨¹¦ÄÜʹÄÜ stcTimeraCondingInit.enClkBClkDiv = TimeraFilterPclkDiv4; //Â˲¨²ÉÑù»ù׼ʱÖÓÑ¡ÔñCB TIMERA_OrthogonalCodingInit(TIMERA_UNIT1, &stcTimeraCondingInit); //ÅäÖà TimerA µÄµ¥Ôª1 /* Configure count overflow interrupt of timera unit 1 */ stcIrqRegiConf.enIntSrc = TIMERA_UNIT1_OVERFLOW_INT; //ÅäÖÃΪTimerAµ¥Ôª1Òç³öÖÐ¶Ï stcIrqRegiConf.enIRQn = Int006_IRQn; //ÅäÖÃÖжÏÏòÁ¿ stcIrqRegiConf.pfnCallback = &TimeraUnit1Over_IrqCallback; //ÅäÖÃÖжϻص÷º¯Êý enIrqRegistration(&stcIrqRegiConf); //³õʼ»¯ÖжÏÅäÖà NVIC_ClearPendingIRQ(stcIrqRegiConf.enIRQn); //Çå³ý¹ÒÆðÖÐ¶Ï NVIC_SetPriority(stcIrqRegiConf.enIRQn, DDL_IRQ_PRIORITY_15); //ÅäÖÃÖжÏÓÅÏȼ¶ NVIC_EnableIRQ(stcIrqRegiConf.enIRQn); //ʹÄܶÔÓ¦µÄÖжÏÅäÖà /* Configure count underflow interrupt of timera unit 1 */ stcIrqRegiConf.enIntSrc = TIMERA_UNIT1_UPDATE_INT; //ÅäÖÃΪTimerAµ¥Ôª1¸üÐÂÖÐ¶Ï stcIrqRegiConf.enIRQn = Int007_IRQn; //ÅäÖÃÖжÏÏòÁ¿ stcIrqRegiConf.pfnCallback = &TimeraUnit1Under_IrqCallback; //ÅäÖÃÖжϻص÷º¯Êý enIrqRegistration(&stcIrqRegiConf); //³õʼ»¯ÖжÏÅäÖà NVIC_ClearPendingIRQ(stcIrqRegiConf.enIRQn); //Çå³ý¹ÒÆðÖÐ¶Ï NVIC_SetPriority(stcIrqRegiConf.enIRQn, DDL_IRQ_PRIORITY_15); //ÅäÖÃÖжÏÓÅÏȼ¶ NVIC_EnableIRQ(stcIrqRegiConf.enIRQn); //ʹÄܶÔÓ¦µÄÖжÏÅäÖà /* Timera unit 1 startup */ TIMERA_Cmd(TIMERA_UNIT1, Enable); //ʹÄÜTimerAµÄµ¥Ôª1}
赞0
评论
2025-07-26
您需要登录后才可以回复 登录 | 注册