/** ****************************************************************************** * @file fm33a0xxev_et.c * @author FM33A0XXEV Application Team * @version V1.0.0 * @date 16-April-2020 * @brief This file provides firmware functions to manage the following * functionalities of....: * */ /* Includes ------------------------------------------------------------------*/ #include "fm33a0xxev_et.h" /** @addtogroup fm33a0xxev_StdPeriph_Driver * @{ */ /** @defgroup ET * @brief ET driver modules * @{ */ /* Êä³ö¼«ÐÔÑ¡Ôñ (Output Polarity) 0£ºÊä³ö²»È¡·´ 1£ºÊä³öÈ¡·´ Ïà¹Øº¯Êý */ void ETx_CR_OPOL_Set(ET_Type* ETx, uint32_t SetValue) { uint32_t tmpreg; tmpreg = ETx->CR ; tmpreg &= ~(ETx_CR_OPOL_Msk); tmpreg |= (SetValue & ETx_CR_OPOL_Msk); ETx->CR = tmpreg; } uint32_t ETx_CR_OPOL_Get(ET_Type* ETx) { return (ETx->CR & ETx_CR_OPOL_Msk); } /* ÍⲿÒý½ÅÊäÈëÊý×ÖÂ˲¨Ê¹ÄÜ 1 = ´ò¿ªÒý½ÅÊäÈëÐźÅÊý×ÖÂ˲¨ 0 = ¹Ø±ÕÒý½ÅÊäÈëÐźÅÊý×ÖÂ˲¨ Ïà¹Øº¯Êý */ void ETx_CR_EXFLT_Set(ET_Type* ETx, uint32_t SetValue) { uint32_t tmpreg; tmpreg = ETx->CR ; tmpreg &= ~(ETx_CR_EXFLT_Msk); tmpreg |= (SetValue & ETx_CR_EXFLT_Msk); ETx->CR = tmpreg; } uint32_t ETx_CR_EXFLT_Get(ET_Type* ETx) { return (ETx->CR & ETx_CR_EXFLT_Msk); } /* PWMÊä³ö¿ØÖÆ 1 = PWMÊä³öʹÄÜ 0 = PWMÊä³ö½ûÖ¹ Ïà¹Øº¯Êý */ void ETx_CR_PWM_Setable(ET_Type* ETx, FunState NewState) { if (NewState == ENABLE) { ETx->CR |= (ETx_CR_PWM_Msk); } else { ETx->CR &= ~(ETx_CR_PWM_Msk); } } FunState ETx_CR_PWM_Getable(ET_Type* ETx) { if (ETx->CR & (ETx_CR_PWM_Msk)) { return ENABLE; } else { return DISABLE; } } /* Æô¶¯¿ØÖÆ 1 = Æô¶¯¶¨Ê±Æ÷£¬ÔÚ¼ÆÊýÆ÷ģʽÏÂÆô¶¯Ê±½«¼ÆÊý³õÖµ¼ÓÔØÖÁ¼ÆÊýÆ÷ºÍ¹¤×÷¼Ä´æÆ÷£»ÔÚ²¶×½Ä£Ê½Ï£¬Æô¶¯Ê±¼ÆÊýÆ÷ÓÉÁ㿪ʼ×ÔÓɼÆÊý£¬¼ÆÊýµ½0xFFFFºó²úÉúÒç³öÐźÅÈ»ºóÓÉÁã¿ªÊ¼ÖØÐ¼ÆÊý 0 = Í£Ö¹¼ÆÊýÆ÷¼ÆÊý Ïà¹Øº¯Êý */ void ETx_CR_CEN_Setable(ET_Type* ETx, FunState NewState) { if (NewState == ENABLE) { ETx->CR |= (ETx_CR_CEN_Msk); } else { ETx->CR &= ~(ETx_CR_CEN_Msk); } } FunState ETx_CR_CEN_Getable(ET_Type* ETx) { if (ETx->CR & (ETx_CR_CEN_Msk)) { return ENABLE; } else { return DISABLE; } } /* ¹¤×÷ģʽѡÔñ 1 = ²¶×½Ä£Ê½ 0 = ¶¨Ê±/¼ÆÊýģʽ Ïà¹Øº¯Êý */ void ETx_CR_MOD_Set(ET_Type* ETx, uint32_t SetValue) { uint32_t tmpreg; tmpreg = ETx->CR ; tmpreg &= ~(ETx_CR_MOD_Msk); tmpreg |= (SetValue & ETx_CR_MOD_Msk); ETx->CR = tmpreg; } uint32_t ETx_CR_MOD_Get(ET_Type* ETx) { return (ETx->CR & ETx_CR_MOD_Msk); } /* Cascade Enable£¬À©Õ¹¶¨Ê±Æ÷¼¶ÁªÊ¹ÄÜ 1 = ET1£¨ET3£©ºÍET2£¨ET4£©¼¶Áª³É32bit¶¨Ê±Æ÷ 0 = 16bit¶¨Ê±Æ÷¶ÀÁ¢¹¤×÷ Ïà¹Øº¯Êý */ void ETx_CR_CASEN_Set(ET_Type* ETx, uint32_t SetValue) { uint32_t tmpreg; tmpreg = ETx->CR ; tmpreg &= ~(ETx_CR_CASEN_Msk); tmpreg |= (SetValue & ETx_CR_CASEN_Msk); ETx->CR = tmpreg; } uint32_t ETx_CR_CASEN_Get(ET_Type* ETx) { return (ETx->CR & ETx_CR_CASEN_Msk); } /* ¼ÆÊýģʽ²ÉÑØ·½Ê½Ñ¡Ôñ £¨¼ÆÊýʱÖÓÑ¡Ôñmcu_clkʱ¸ÃλÎÞЧ£¬×ÜÊDzÉÓÃmcu_clkʱÖÓÉÏÉýÑØ¼ÆÊý£© 1 = ¼ÆÊýģʽ²ÉϽµÑØ 0 = ¼ÆÊýģʽ²ÉÉÏÉýÑØ Ïà¹Øº¯Êý */ void ETx_CR_EDGESEL_Set(ET_Type* ETx, uint32_t SetValue) { uint32_t tmpreg; tmpreg = ETx->CR ; tmpreg &= ~(ETx_CR_EDGESEL_Msk); tmpreg |= (SetValue & ETx_CR_EDGESEL_Msk); ETx->CR = tmpreg; } uint32_t ETx_CR_EDGESEL_Get(ET_Type* ETx) { return (ETx->CR & ETx_CR_EDGESEL_Msk); } /* ²¶×½Ä£Ê½¿ØÖÆ 1 = Âö¿í²¶×½ 0 = Âö³åÖÜÆÚ²¶×½ Ïà¹Øº¯Êý */ void ETx_CR_CAPMOD_Set(ET_Type* ETx, uint32_t SetValue) { uint32_t tmpreg; tmpreg = ETx->CR ; tmpreg &= ~(ETx_CR_CAPMOD_Msk); tmpreg |= (SetValue & ETx_CR_CAPMOD_Msk); ETx->CR = tmpreg; } uint32_t ETx_CR_CAPMOD_Get(ET_Type* ETx) { return (ETx->CR & ETx_CR_CAPMOD_Msk); } /* ´øÇåÁ㲶׽ģʽ¿ØÖÆ 1 = ʼþ´¥·¢²¶×½£ºÊ¹Äܺó¼ÆÊýÆ÷±£³Ö0£¬²¶×½µ½µÚÒ»¸öÓÐÐ§ÑØÖ®ºótimer²Å¿ªÊ¼¼ÆÊý 0 = ²¶×½²»ÇåÁ㣬¼ÆÊýÆ÷Ò»Ö±×ÔÓɼÆÊý Ïà¹Øº¯Êý */ void ETx_CR_CAPCLR_Setable(ET_Type* ETx, FunState NewState) { if (NewState == ENABLE) { ETx->CR |= (ETx_CR_CAPCLR_Msk); } else { ETx->CR &= ~(ETx_CR_CAPCLR_Msk); } } FunState ETx_CR_CAPCLR_Getable(ET_Type* ETx) { if (ETx->CR & (ETx_CR_CAPCLR_Msk)) { return ENABLE; } else { return DISABLE; } } /* µ¥´Î²¶×½¿ØÖÆ 1 = µ¥´Î²¶×½ÓÐЧ£¬ÔÚ²¶×½µ½Ò»´ÎÂö³åÖÜÆÚºó¼ÆÊýÆ÷Í£Ö¹£¬ÈôÐèÒªÔٴβ¶×½ÐèÖØÐÂÆô¶¯ 0 = Á¬Ðø²¶×½ Ïà¹Øº¯Êý */ void ETx_CR_CAPONCE_Set(ET_Type* ETx, uint32_t SetValue) { uint32_t tmpreg; tmpreg = ETx->CR ; tmpreg &= ~(ETx_CR_CAPONCE_Msk); tmpreg |= (SetValue & ETx_CR_CAPONCE_Msk); ETx->CR = tmpreg; } uint32_t ETx_CR_CAPONCE_Get(ET_Type* ETx) { return (ETx->CR & ETx_CR_CAPONCE_Msk); } /* ²¶×½ÑØÑ¡Ôñ 1 = ÖÜÆÚ²¶×½Ä£Ê½Ê±ÏÂÑØ²¶×½ 0 = ÖÜÆÚ²¶×½Ä£Ê½Ê±ÉÏÑØ²¶×½ Ïà¹Øº¯Êý */ void ETx_CR_CAPEDGE_Set(ET_Type* ETx, uint32_t SetValue) { uint32_t tmpreg; tmpreg = ETx->CR ; tmpreg &= ~(ETx_CR_CAPEDGE_Msk); tmpreg |= (SetValue & ETx_CR_CAPEDGE_Msk); ETx->CR = tmpreg; } uint32_t ETx_CR_CAPEDGE_Get(ET_Type* ETx) { return (ETx->CR & ETx_CR_CAPEDGE_Msk); } /* ÄÚ²¿ÐźÅ2Ô´Ñ¡Ôñ(²¶×½Ô´) 1 = À©Õ¹¶¨Ê±Æ÷3µÄÄÚ²¿ÐźÅ2Ñ¡ÔñGroup1 0 = À©Õ¹¶¨Ê±Æ÷3µÄÄÚ²¿ÐźÅ2Ñ¡ÔñGroup2 Ïà¹Øº¯Êý */ void ETx_INSR_SIG2SEL_Set(ET_Type* ETx, uint32_t SetValue) { uint32_t tmpreg; tmpreg = ETx->INSR ; tmpreg &= ~(ETx_INSR_SIG2SEL_Msk); tmpreg |= (SetValue & ETx_INSR_SIG2SEL_Msk); ETx->INSR = tmpreg; } uint32_t ETx_INSR_SIG2SEL_Get(ET_Type* ETx) { return (ETx->INSR & ETx_INSR_SIG2SEL_Msk); } /* ÄÚ²¿ÐźÅ1Ô´Ñ¡Ôñ£¨ÔÚ¼ÆÊýģʽϼÆÊýÔ´½öÓÉ´ËÑ¡Ôñ£¬²¶×½Ä£Ê½Ï¼ÆÊýÔ´£© 1 = À©Õ¹¶¨Ê±Æ÷3µÄÄÚ²¿ÐźÅ1Ñ¡ÔñGroup2 0 = À©Õ¹¶¨Ê±Æ÷3µÄÄÚ²¿ÐźÅ1Ñ¡ÔñGroup1 Ïà¹Øº¯Êý */ void ETx_INSR_SIG1SEL_Set(ET_Type* ETx, uint32_t SetValue) { uint32_t tmpreg; tmpreg = ETx->INSR ; tmpreg &= ~(ETx_INSR_SIG1SEL_Msk); tmpreg |= (SetValue & ETx_INSR_SIG1SEL_Msk); ETx->INSR = tmpreg; } uint32_t ETx_INSR_SIG1SEL_Get(ET_Type* ETx) { return (ETx->INSR & ETx_INSR_SIG1SEL_Msk); } /* GROUP2 ÐźÅÑ¡Ôñ¿ØÖÆ ET1 000 = UART0_RX 001 = UART1_RX 010 = XTLF 011 = ET1_IN1 100 = ET1_IN2 101 = CMP1O£¨±È½ÏÆ÷1Êä³ö£© 110 = CMP2O£¨±È½ÏÆ÷2Êä³ö£© 111 = RCMF ET2 000 = UART2_RX 001 = UART3_RX 010 = XTLF 011 = ET2_IN1 100 = ET2_IN2 101 = CMP1O£¨±È½ÏÆ÷1Êä³ö£© 110 = CMP2O£¨±È½ÏÆ÷2Êä³ö£© 111 = RCMF ET3 000 = ET3_IN1 001 = XTLF 010 = UART4_RX 011 = UART5_RX 100 = RTCSEC 101~111 = RFU ET4 000 = ET4_IN1 001 = XTLF 010 = UART_RX2 011 = UART_RX0 100 = CMP1O£¨±È½ÏÆ÷1Êä³ö£© 101 = CMP2O£¨±È½ÏÆ÷2Êä³ö£© 110= RTCSEC 111= RCMF? Ïà¹Øº¯Êý */ void ETx_INSR_GRP2SEL_Set(ET_Type* ETx, uint32_t SetValue) { uint32_t tmpreg; tmpreg = ETx->INSR ; tmpreg &= ~(ETx_INSR_GRP2SEL_Msk); tmpreg |= (SetValue & ETx_INSR_GRP2SEL_Msk); ETx->INSR = tmpreg; } uint32_t ETx_INSR_GRP2SEL_Get(ET_Type* ETx) { return (ETx->INSR & ETx_INSR_GRP2SEL_Msk); } /* GROUP1 ÐźÅÑ¡Ôñ¿ØÖÆ ET1 00 = APBCLK 01 = XTLF 10 = RCLP 11 = ET1_IN0 ET2 00 = APBCLK 01 = XTLF 10 = RCLP 11 = ET2_IN0 ET3 00 = APBCLK 01 = ET3_IN0 10 = RTCSEC 11 = RCLP ET4 00 = APBCLK 01 = ET4_IN0 10 = RTC64HZ 11 = RCMF Ïà¹Øº¯Êý */ void ETx_INSR_GRP1SEL_Set(ET_Type* ETx, uint32_t SetValue) { uint32_t tmpreg; tmpreg = ETx->INSR ; tmpreg &= ~(ETx_INSR_GRP1SEL_Msk); tmpreg |= (SetValue & ETx_INSR_GRP1SEL_Msk); ETx->INSR = tmpreg; } uint32_t ETx_INSR_GRP1SEL_Get(ET_Type* ETx) { return (ETx->INSR & ETx_INSR_GRP1SEL_Msk); } /* ÊäÈëSignal1£¨¼ÆÊýÔ´£©µÄÔ¤·ÖƵ¼Ä´æÆ÷ 00±íʾ1·ÖƵ£¬FF±íʾ256·ÖƵ Ïà¹Øº¯Êý */ void ETx_PSCR1_Write(ET_Type* ETx, uint32_t SetValue) { ETx->PSCR1 = (SetValue & ETx_PSCR1_PRESCALE1_Msk); } uint32_t ETx_PSCR1_Read(ET_Type* ETx) { return (ETx->PSCR1 & ETx_PSCR1_PRESCALE1_Msk); } /* ÊäÈëSignal2£¨²¶×½Ô´£©µÄÔ¤·ÖƵ¼Ä´æÆ÷ 00±íʾ1·ÖƵ£¬FF±íʾ256·ÖƵ¡£ Ïà¹Øº¯Êý */ void ETx_PSCR2_Write(ET_Type* ETx, uint32_t SetValue) { ETx->PSCR2 = (SetValue & ETx_PSCR2_PRESCALE2_Msk); } uint32_t ETx_PSCR2_Read(ET_Type* ETx) { return (ETx->PSCR2 & ETx_PSCR2_PRESCALE2_Msk); } /* À©Õ¹¶¨Ê±Æ÷³õÖµ¼Ä´æÆ÷ Ïà¹Øº¯Êý */ void ETx_IVR_Write(ET_Type* ETx, uint32_t SetValue) { ETx->IVR = (SetValue & ETx_IVR_INITVALUE_Msk); } uint32_t ETx_IVR_Read(ET_Type* ETx) { return (ETx->IVR & ETx_IVR_INITVALUE_Msk); } /* À©Õ¹¶¨Ê±Æ÷±È½Ï¼Ä´æÆ÷ ¸Ã¼Ä´æÆ÷Óë¼ÆÊýÆ÷±È½Ï£¬Èô¼ÆÊýÖµ´óÓÚµÈÓڸüĴæÆ÷µÄÖµ£¬Ôò²úÉú¼ÆÊýÆ¥ÅäÐźÅÖÁÊä³ö¿ØÖÆÄ£¿é£¬²¢²úÉúÏàÓ¦Öжϡ£ Ïà¹Øº¯Êý */ void ETx_CMPR_Write(ET_Type* ETx, uint32_t SetValue) { ETx->CMPR = (SetValue & ETx_CMPR_CMP_Msk); } uint32_t ETx_CMPR_Read(ET_Type* ETx) { return (ETx->CMPR & ETx_CMPR_CMP_Msk); } /* À©Õ¹¶¨Ê±Æ÷±È½ÏÖжÏʹÄÜ 1 = ʹÄÜ 0 = ½ûÖ¹ Ïà¹Øº¯Êý */ void ETx_IER_CMPIE_Setable(ET_Type* ETx, FunState NewState) { if (NewState == ENABLE) { ETx->IER |= (ETx_IER_CMPIE_Msk); } else { ETx->IER &= ~(ETx_IER_CMPIE_Msk); } } FunState ETx_IER_CMPIE_Getable(ET_Type* ETx) { if (ETx->IER & (ETx_IER_CMPIE_Msk)) { return ENABLE; } else { return DISABLE; } } /* À©Õ¹¶¨Ê±Æ÷²¶×½ÖжÏʹÄÜ 1 = ʹÄÜ 0 = ½ûÖ¹ Ïà¹Øº¯Êý */ void ETx_IER_CAPIE_Setable(ET_Type* ETx, FunState NewState) { if (NewState == ENABLE) { ETx->IER |= (ETx_IER_CAPIE_Msk); } else { ETx->IER &= ~(ETx_IER_CAPIE_Msk); } } FunState ETx_IER_CAPIE_Getable(ET_Type* ETx) { if (ETx->IER & (ETx_IER_CAPIE_Msk)) { return ENABLE; } else { return DISABLE; } } /* À©Õ¹¶¨Ê±Æ÷3Òç³öÖжÏʹÄÜ 1 = ʹÄÜ 0 = ½ûÖ¹ Ïà¹Øº¯Êý */ void ETx_IER_OVIE_Setable(ET_Type* ETx, FunState NewState) { if (NewState == ENABLE) { ETx->IER |= (ETx_IER_OVIE_Msk); } else { ETx->IER &= ~(ETx_IER_OVIE_Msk); } } FunState ETx_IER_OVIE_Getable(ET_Type* ETx) { if (ETx->IER & (ETx_IER_OVIE_Msk)) { return ENABLE; } else { return DISABLE; } } /* ±È½Ï״̬£¬Ð´1Çå0 1 =µ±Ç°¼ÆÊýÆ÷µÄÖµ´óÓÚµÈÓڱȽϼĴæÆ÷µÄÖµ 0 =µ±Ç°¼ÆÊýÆ÷µÄֵСÓڱȽϼĴæÆ÷µÄÖµ Ïà¹Øº¯Êý */ void ETx_ISR_CMPIF_Clr(ET_Type* ETx) { ETx->ISR = ETx_ISR_CMPIF_Msk; } FlagStatus ETx_ISR_CMPIF_Chk(ET_Type* ETx) { if (ETx->ISR & ETx_ISR_CMPIF_Msk) { return SET; } else { return RESET; } } /* ²¶×½ÑØ×´Ì¬±êÖ¾ 1 = ²¶×½µ½ÏÂÑØ 0 = ²¶×½µ½ÉÏÑØ */ FlagStatus ETx_ISR_EDGESTA_Chk(ET_Type* ETx) { if (ETx->ISR & ETx_ISR_EDGESTA_Msk) { return SET; } else { return RESET; } } /* À©Õ¹¶¨Ê±Æ÷²¶×½²úÉúÐźŠ1 = ²¶×½µ½Ö¸¶¨µÄÑØ 0 = δ²¶×½µ½Ö¸¶¨µÄÑØ Ïà¹Øº¯Êý */ void ETx_ISR_CAPIF_Clr(ET_Type* ETx) { ETx->ISR = ETx_ISR_CAPIF_Msk; } FlagStatus ETx_ISR_CAPIF_Chk(ET_Type* ETx) { if (ETx->ISR & ETx_ISR_CAPIF_Msk) { return SET; } else { return RESET; } } /* À©Õ¹¶¨Ê±Æ÷3Òç³öÐźţ¬µ±¼ÆÊýÆ÷µÄÖµÓÉ0xFFFFÔÙÔö¼Óʱ½«ÖÃλ 1 = ²úÉú¼ÆÊýÒç³ö 0 = δ²úÉúÒç³ö Ïà¹Øº¯Êý */ void ETx_ISR_OVIF_Clr(ET_Type* ETx) { ETx->ISR = ETx_ISR_OVIF_Msk; } FlagStatus ETx_ISR_OVIF_Chk(ET_Type* ETx) { if (ETx->ISR & ETx_ISR_OVIF_Msk) { return SET; } else { return RESET; } } /********************************* »ñÈ¡ET ¼ÆÊýÆ÷ÊýÖµº¯Êý ¹¦ÄÜ£º»ñÈ¡ET ¼ÆÊýÆ÷ÊýÖµ ÊäÈë: ET1/ET2/ET3/ET4 ¶¨Ê±Æ÷Ãû³Æ Êä³ö: 00-FFFF ÆäÓàΪÎÞЧֵ *********************************/ uint32_t ETxCNT_CNTx_Read(ETCNT_Type* ETIMx) { volatile uint8_t tmp08; uint32_t tmp32; tmp08 = ((uint32_t)ETIMx - ET1_BASE)>>5; //»ñÈ¡ETIM switch(tmp08) { case 0: tmp32 = (ETCNT->CNT1 & ETCNTx_CNT_Msk); break; case 1: tmp32 = (ETCNT->CNT2 & ETCNTx_CNT_Msk); break; case 2: tmp32 = (ETCNT->CNT3 & ETCNTx_CNT_Msk); break; case 3: tmp32 = (ETCNT->CNT4 & ETCNTx_CNT_Msk); break; default: tmp32 = 0x1fffffff; break; } return tmp32; } void ETx_Deinit(ET_Type* ETx) { ETx->CR = 0x00000000; ETx->INSR = 0x00000000; ETx->PSCR1 = 0x00000000; ETx->PSCR2 = 0x00000000; ETx->IVR = 0x00000000; ETx->CMPR = 0x00000000; ETx->IER = 0x00000000; ETx->ISR = 0x00000000; } /******END OF FILE****/