/** ****************************************************************************** * @file fm33a0xxev_bt.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_bt.h" /** @addtogroup fm33a0xxev_StdPeriph_Driver * @{ */ /** @defgroup BT * @brief BT driver modules * @{ */ /* ¸ß8λ¼ÆÊýÆ÷£¨BT1H»òBT2H£©Æô¶¯¿ØÖÆ Ïà¹Øº¯Êý */ void BTx_CR1_CHEN_Setable(BT_Type* BTx, FunState NewState) { if (NewState == ENABLE) { BTx->CR1 |= (BTx_CR1_CHEN_Msk); } else { BTx->CR1 &= ~(BTx_CR1_CHEN_Msk); } } FunState BTx_CR1_CHEN_Getable(BT_Type* BTx) { if (BTx->CR1 & (BTx_CR1_CHEN_Msk)) { return ENABLE; } else { return DISABLE; } } /* µÍ8λ¼ÆÊýÆ÷£¨BT1L»òBT2L£©Æô¶¯¿ØÖÆ (Counter-Lowend enable) 1£ºÆô¶¯µÍ8bit¼ÆÊýÆ÷£¬ÔÚ¼ÆÊýÆ÷ģʽÏÂÆô¶¯Ê±½«Ô¤ÖÃÊýÖµºÍ¼ÓÔØÖµ·Ö±ð¼ÓÔØÖÁ¼ÆÊýÆ÷ºÍ±È½Ï¼Ä´æÆ÷£»²¶×½Ä£Ê½ÏÂÆô¶¯Ê±¼ÆÊýÆ÷ÓÉÁ㿪ʼ×ÔÓɼÆÊý£¬¼ÆÊýµ½0xFFFFºó²úÉúÒç³öÐźÅÈ»ºóÓÉÁã¿ªÊ¼ÖØÐ¼ÆÊý£¬²¶×½¹¦ÄÜÖ»¹¤×÷ÔÚ16λģʽ£»ÔÚ16λµÄ¶¨Ê±/¼ÆÊýºÍ²¶×½Ä£Ê½ÏÂCHEN×÷Ϊ¼ÆÊýÆ÷µÄÆô¶¯¿ØÖÆ£¬CLEN×Ô¶¯Ê§Ð§ 0£ºÍ£Ö¹µÍ8bit¼ÆÊýÆ÷¼ÆÊý Ïà¹Øº¯Êý */ void BTx_CR1_CLEN_Setable(BT_Type* BTx, FunState NewState) { if (NewState == ENABLE) { BTx->CR1 |= (BTx_CR1_CLEN_Msk); } else { BTx->CR1 &= ~(BTx_CR1_CLEN_Msk); } } FunState BTx_CR1_CLEN_Getable(BT_Type* BTx) { if (BTx->CR1 & (BTx_CR1_CLEN_Msk)) { return ENABLE; } else { return DISABLE; } } /* ¹¤×÷ģʽѡÔñ (work mode) 1£º16λ²¶×½Ä£Ê½ 0£º8λ¶¨Ê±/¼ÆÊýģʽ£¬Èô¸ßλ¼ÆÊýÆ÷¼ÆÊýÔ´Ñ¡ÔñΪµÍλ¼ÆÊýÆ÷µÄÒç³öÐźţ¬Ôò¿ÉʵÏÖ16λ¶¨Ê±/¼ÆÊýģʽ Ïà¹Øº¯Êý */ void BTx_CR1_MODE_Set(BT_Type* BTx, uint32_t SetValue) { uint32_t tmpreg; tmpreg = BTx->CR1 ; tmpreg &= ~(BTx_CR1_MODE_Msk); tmpreg |= (SetValue & BTx_CR1_MODE_Msk); BTx->CR1 = tmpreg; } uint32_t BTx_CR1_MODE_Get(BT_Type* BTx) { return (BTx->CR1 & BTx_CR1_MODE_Msk); } /* ¼ÆÊýģʽϵļÆÊýÑØºÍÖÜÆÚ²¶×½Ê±µÄ²¶×½ÑØÑ¡Ôñλ (edge select) 1£º¼ÆÊýģʽ²ÉÑù¼ÆÊýԴϽµÑØ£¬ÖÜÆÚ²¶×½Ä£Ê½Ê±ÏÂÑØ²¶×½ 0£º¼ÆÊýģʽ²ÉÑù¼ÆÊýÔ´ÉÏÉýÑØ£¬ÖÜÆÚ²¶×½Ä£Ê½Ê±ÉÏÑØ²¶×½ ×¢£º²»Ö§³ÖϵͳʱÖÓµÄϽµÑؼÆÊý£¬²¶×½Ô´ºÍ¼ÆÊýԴΪϵͳʱÖÓʱѡÔñϽµÑؽ«²»»áÓÐЧ¼ÆÊý¡£ Ïà¹Øº¯Êý */ void BTx_CR1_EDGESEL_Set(BT_Type* BTx, uint32_t SetValue) { uint32_t tmpreg; tmpreg = BTx->CR1 ; tmpreg &= ~(BTx_CR1_EDGESEL_Msk); tmpreg |= (SetValue & BTx_CR1_EDGESEL_Msk); BTx->CR1 = tmpreg; } uint32_t BTx_CR1_EDGESEL_Get(BT_Type* BTx) { return (BTx->CR1 & BTx_CR1_EDGESEL_Msk); } /* ²¶×½Ä£Ê½¿ØÖÆ£¨Ö»ÔÚ²¶×½Ä£Ê½ÏÂÓÐЧ£©(capture mode) 1£ºÂö³å¿í¶È²¶×½ 0£ºÂö³åÖÜÆÚ²¶×½ Ïà¹Øº¯Êý */ void BTx_CR1_CAPMOD_Set(BT_Type* BTx, uint32_t SetValue) { uint32_t tmpreg; tmpreg = BTx->CR1 ; tmpreg &= ~(BTx_CR1_CAPMOD_Msk); tmpreg |= (SetValue & BTx_CR1_CAPMOD_Msk); BTx->CR1 = tmpreg; } uint32_t BTx_CR1_CAPMOD_Get(BT_Type* BTx) { return (BTx->CR1 & BTx_CR1_CAPMOD_Msk); } /* ´øÇåÁ㲶׽ģʽ¿ØÖÆ (capture clear) 1£º²»ÂÛÔÚÂö³å¿í¶È»¹ÊÇÖÜÆÚ²¶×½Çé¿öÏ£¬²¶×½µ½µÚÒ»¸öÑØºó½«¼ÆÊýÆ÷ÇåÁã²úÉúÖжϣ¬²¶×½µ½µÚ¶þ¸öÑØºóËø´æ£¨Ëø´æµ½¸ßµÍλԤÖÃÊý¼Ä´æÆ÷£©¼ÆÊýÖµ²¢Í¬Ê±ÇåÁã¼ÆÊýÆ÷ 0£º²¶×½²»ÇåÁ㣬¼ÆÊýÆ÷Ò»Ö±×ÔÓɼÆÊý Ïà¹Øº¯Êý */ void BTx_CR1_CAPCLR_Setable(BT_Type* BTx, FunState NewState) { if (NewState == ENABLE) { BTx->CR1 |= (BTx_CR1_CAPCLR_Msk); } else { BTx->CR1 &= ~(BTx_CR1_CAPCLR_Msk); } } FunState BTx_CR1_CAPCLR_Getable(BT_Type* BTx) { if (BTx->CR1 & (BTx_CR1_CAPCLR_Msk)) { return ENABLE; } else { return DISABLE; } } /* µ¥´Î²¶×½¿ØÖÆ (capture once) 1£ºµ¥´Î²¶×½ÓÐЧ£¬ÔÚ²¶×½µ½Ò»´ÎÂö³å¿í¶È»òÂö³åÖÜÆÚºó¼ÆÊýÆ÷Í£Ö¹£¬ÈôÐèÒªÔٴβ¶×½ÐèÖØÐÂÆô¶¯ 0£ºÁ¬Ðø²¶×½ Ïà¹Øº¯Êý */ void BTx_CR1_CAPONCE_Set(BT_Type* BTx, uint32_t SetValue) { uint32_t tmpreg; tmpreg = BTx->CR1 ; tmpreg &= ~(BTx_CR1_CAPONCE_Msk); tmpreg |= (SetValue & BTx_CR1_CAPONCE_Msk); BTx->CR1 = tmpreg; } uint32_t BTx_CR1_CAPONCE_Get(BT_Type* BTx) { return (BTx->CR1 & BTx_CR1_CAPONCE_Msk); } /* PWMģʽÊä³ö (pulse width modulation) 1£ºPWMÊä³öʹÄÜ 0£ºPWM Êä³ö²»Ê¹ÄÜ Ïà¹Øº¯Êý */ void BTx_CR1_PWM_Setable(BT_Type* BTx, FunState NewState) { if (NewState == ENABLE) { BTx->CR1 |= (BTx_CR1_PWM_Msk); } else { BTx->CR1 &= ~(BTx_CR1_PWM_Msk); } } FunState BTx_CR1_PWM_Getable(BT_Type* BTx) { if (BTx->CR1 & (BTx_CR1_PWM_Msk)) { return ENABLE; } else { return DISABLE; } } /* ¼ÆÊýÆ÷ÄÚ²¿¼ÆÊýÔ´ÐźÅÑ¡Ôñ (signal group2 select) 1£ºÄÚ²¿¼ÆÊýÔ´ÐźÅÑ¡ÔñGroup2 0£ºÄÚ²¿¼ÆÊýÔ´ÐźÅÑ¡ÔñGroup1 Ïà¹Øº¯Êý */ void BTx_CR2_SIG2SEL_Set(BT_Type* BTx, uint32_t SetValue) { uint32_t tmpreg; tmpreg = BTx->CR2 ; tmpreg &= ~(BTx_CR2_SIG2SEL_Msk); tmpreg |= (SetValue & BTx_CR2_SIG2SEL_Msk); BTx->CR2 = tmpreg; } uint32_t BTx_CR2_SIG2SEL_Get(BT_Type* BTx) { return (BTx->CR2 & BTx_CR2_SIG2SEL_Msk); } /* ¼ÆÊýÆ÷ÄÚ²¿²¶×½Ô´ÐźÅÑ¡Ôñ (signal group1 select) 1£ºÄÚ²¿²¶×½Ô´ÐźÅÑ¡ÔñGroup1 0£ºÄÚ²¿²¶×½Ô´ÐźÅÑ¡ÔñGroup2 Ïà¹Øº¯Êý */ void BTx_CR2_SIG1SEL_Set(BT_Type* BTx, uint32_t SetValue) { uint32_t tmpreg; tmpreg = BTx->CR2 ; tmpreg &= ~(BTx_CR2_SIG1SEL_Msk); tmpreg |= (SetValue & BTx_CR2_SIG1SEL_Msk); BTx->CR2 = tmpreg; } uint32_t BTx_CR2_SIG1SEL_Get(BT_Type* BTx) { return (BTx->CR2 & BTx_CR2_SIG1SEL_Msk); } /* ¸ß8λ¼ÆÊýÆ÷¼ÆÊýÔ´Ñ¡Ôñ (Counter Highend source select) 00/11£ºÑ¡ÔñET1µÄµÍλ¼ÆÊýÆ÷µÄÒç³öÐźţ¬ÓëµÍλ¼ÆÊýÆ÷×é³É16λ¼ÆÊýÆ÷ 01£ºÑ¡ÔñÄÚ²¿²¶×½Ô´ÐźŠ10£ºÑ¡ÔñÄÚ²¿¼ÆÊýÔ´ÐźŻòÍⲿDIRÊäÈë×éºÏÐźŠÏà¹Øº¯Êý */ void BTx_CR2_CNTHSEL_Set(BT_Type* BTx, uint32_t SetValue) { uint32_t tmpreg; tmpreg = BTx->CR2 ; tmpreg &= ~(BTx_CR2_CNTHSEL_Msk); tmpreg |= (SetValue & BTx_CR2_CNTHSEL_Msk); BTx->CR2 = tmpreg; } uint32_t BTx_CR2_CNTHSEL_Get(BT_Type* BTx) { return (BTx->CR2 & BTx_CR2_CNTHSEL_Msk); } /* ÍⲿÊäÈëDIR¿ØÖÆÊ¹ÄÜ¡£Í¨³£µçÁ¿Âö³åÊä³öʱͬʱ»áÊä³öÒ»¸öÓÉ¸ßµÍµçÆ½Ö¸Ê¾Õý·´ÏòµÄ·½ÏòÐźÅDIR¡£µç·½«Í¨¹ýDIRÐÅºÅµçÆ½µÄ¸ßµÍ£¬·Ö±ð¿ØÖƸßλ¼ÆÊýÆ÷ºÍµÍλ¼ÆÊýÆ÷¼ÆÊýʹÄÜ£¬ÒÔʵÏÖÕë¶ÔÕýÏò¡¢·´ÏòÂö³åµÄ¸÷ÖÖ¼ÆÊý¹¦ÄÜ (direction bit enable) 1£ºÍⲿÊäÈëµÄDIRÐźÅÓÐЧ£¬´Ëʱ¸ßµÍλ¼ÆÊýÆ÷ÊÇ·ñ¼ÆÊý¿ÉÓÉÍⲿÊäÈëµÄDIRÐźſØÖÆ¡£ 0£ºÍⲿÊäÈëµÄDIRÐźÅÎÞЧ£¬´Ëʱ¸ßµÍλ¼ÆÊýÆ÷ÊÇ·ñ¼ÆÊý½«ÓÉÄÚ²¿¿ØÖÆÐźſØÖÆ¡£ Ïà¹Øº¯Êý */ void BTx_CR2_DIREN_Setable(BT_Type* BTx, FunState NewState) { if (NewState == ENABLE) { BTx->CR2 |= (BTx_CR2_DIREN_Msk); } else { BTx->CR2 &= ~(BTx_CR2_DIREN_Msk); } } FunState BTx_CR2_DIREN_Getable(BT_Type* BTx) { if (BTx->CR2 & (BTx_CR2_DIREN_Msk)) { return ENABLE; } else { return DISABLE; } } /* ÄÚ²¿DIR¿ØÖÆÐźţ¬µ±DIRENΪ0£¬¼´ÍⲿÊäÈëDIR¿ØÖÆÎÞЧʱ£¬¿ÉÓɸÃÐźŴúÌæDIRÊäÈ룬ֱ½Ó¿ØÖÆÄÚ²¿¼ÆÊýÆ÷µÄ¼ÆÊý¡£µ±ÐèÒªÍⲿDIRÊäÈ룬¼´DIRENΪ1ʱ£¬¸ÃλӦÉèÖÃΪ0 (set direction) 1£ºÄÚ²¿DIRÐźÅΪ¸ßµçƽ£¬Ôò¸ß8λ¼ÆÊýÆ÷¼ÆÊý Ïà¹Øº¯Êý */ void BTx_CR2_STDIR_Setable(BT_Type* BTx, FunState NewState) { if (NewState == ENABLE) { BTx->CR2 |= (BTx_CR2_STDIR_Msk); } else { BTx->CR2 &= ~(BTx_CR2_STDIR_Msk); } } FunState BTx_CR2_STDIR_Getable(BT_Type* BTx) { if (BTx->CR2 & (BTx_CR2_STDIR_Msk)) { return ENABLE; } else { return DISABLE; } } /* µÍλ¼ÆÊýÆ÷¼ÆÊýʹÄÜ¿ØÖÆÑ¡ÔñÐźŠ(source select) 1µÍλ¼ÆÊýÆ÷¼ÆÊýʹÄܶËÑ¡Ôò³£Ê¹ÄÜ¡£´ËʱµÍλ¼ÆÊýÆ÷¼ÆÊý²»ÊÜDIR¿ØÖÆ£¬¿É½«Õý·´ÏòËùÓÐÂö³åÒ»²¢¼ÆÊý 0£ºµÍλ¼ÆÊýÆ÷¼ÆÊýʹÄܶËÑ¡ÔòÓɼĴæÆ÷STDIR»òÍⲿEX_SIG2ÊäÈë¿ØÖÆ¡£ Ïà¹Øº¯Êý */ void BTx_CR2_SRCSEL_Setable(BT_Type* BTx, FunState NewState) { if (NewState == ENABLE) { BTx->CR2 |= (BTx_CR2_SRCSEL_Msk); } else { BTx->CR2 &= ~(BTx_CR2_SRCSEL_Msk); } } FunState BTx_CR2_SRCSEL_Getable(BT_Type* BTx) { if (BTx->CR2 & (BTx_CR2_SRCSEL_Msk)) { return ENABLE; } else { return DISABLE; } } /* ÊäÈëÐźÅ2¼«ÐÔÑ¡Ôñ (direction polarity) 1£º¶ÔÍⲿÊäÈëDIRÐźÅEX_SIG2·´Ïò 0£º¶ÔÍⲿÊäÈëDIRÐźÅEX_SIG2²»·´Ïò Ïà¹Øº¯Êý */ void BTx_CR2_DIRPO_Set(BT_Type* BTx, uint32_t SetValue) { uint32_t tmpreg; tmpreg = BTx->CR2 ; tmpreg &= ~(BTx_CR2_DIRPO_Msk); tmpreg |= (SetValue & BTx_CR2_DIRPO_Msk); BTx->CR2 = tmpreg; } uint32_t BTx_CR2_DIRPO_Get(BT_Type* BTx) { return (BTx->CR2 & BTx_CR2_DIRPO_Msk); } /* RTCOUT2ÐźÅÑ¡Ôñ¿ØÖÆ2 (RTCOUT2 source select) 00 = 32768Hz£¬XTLFʱÖÓÊä³ö 01 = RTCSec£¬ÓÉRTCÄ£¿éÊä³öµÄÃëÐźŠ10 = RTCMin£¬ÓÉRTCÄ£¿éÊä³öµÄ·ÖÖÓÐźŠ11 = RFU Ïà¹Øº¯Êý */ void BTx_CFGR1_RTCSEL2_Set(BT_Type* BTx, uint32_t SetValue) { uint32_t tmpreg; tmpreg = BTx->CFGR1 ; tmpreg &= ~(BTx_CFGR1_RTCSEL2_Msk); tmpreg |= (SetValue & BTx_CFGR1_RTCSEL2_Msk); BTx->CFGR1 = tmpreg; } uint32_t BTx_CFGR1_RTCSEL2_Get(BT_Type* BTx) { return (BTx->CFGR1 & BTx_CFGR1_RTCSEL2_Msk); } /* RTCOUT1ÐźÅÑ¡Ôñ¿ØÖÆ1 (RTCOUT1 source select) 00 = 32768Hz£¬XTLFʱÖÓÊä³ö 01 = RTCSec£¬ÓÉRTCÄ£¿éÊä³öµÄÃëÐźŠ10 = RTCMin£¬ÓÉRTCÄ£¿éÊä³öµÄ·ÖÖÓÐźŠ11 = RFU Ïà¹Øº¯Êý */ void BTx_CFGR1_RTCSEL1_Set(BT_Type* BTx, uint32_t SetValue) { uint32_t tmpreg; tmpreg = BTx->CFGR1 ; tmpreg &= ~(BTx_CFGR1_RTCSEL1_Msk); tmpreg |= (SetValue & BTx_CFGR1_RTCSEL1_Msk); BTx->CFGR1 = tmpreg; } uint32_t BTx_CFGR1_RTCSEL1_Get(BT_Type* BTx) { return (BTx->CFGR1 & BTx_CFGR1_RTCSEL1_Msk); } /* Group2ÐźÅÑ¡Ôñ¿ØÖÆ (Group2 source select) 00 = APBCLK 01 = RTCOUT2 10 = IN_SIG2£¬ÄÚ²¿ÊäÈëÐźÅ2 11 = EX_SIG2£¬ÍⲿÊäÈëÐźÅ2 ×¢£º²»Ö§³ÖAPBCLKµÄϽµÑز¶×½ºÍ¼ÆÊý£¬²¶×½Ô´ºÍ¼ÆÊýԴΪAPBCLKʱѡÔñϽµÑؽ«²»»áÓÐЧ²¶×½ºÍ¼ÆÊý¡£ Ïà¹Øº¯Êý */ void BTx_CFGR1_GRP2SEL_Set(BT_Type* BTx, uint32_t SetValue) { uint32_t tmpreg; tmpreg = BTx->CFGR1 ; tmpreg &= ~(BTx_CFGR1_GRP2SEL_Msk); tmpreg |= (SetValue & BTx_CFGR1_GRP2SEL_Msk); BTx->CFGR1 = tmpreg; } uint32_t BTx_CFGR1_GRP2SEL_Get(BT_Type* BTx) { return (BTx->CFGR1 & BTx_CFGR1_GRP2SEL_Msk); } /* Group1ÐźÅÑ¡Ôñ¿ØÖÆ£¨¿É×÷Ϊ²¶×½Ä£Ê½Ï²ÉÑùʱÖÓÑ¡Ôñ£¬Í¬Ê±¿É×÷ΪÐźŲ¶×½Ô´£©(Group1 source select) 00 = APBCLK 01 = RTCOUT1 10 = IN_SIG1£¬ÄÚ²¿ÊäÈëÐźÅ1 11 = EX_SIG1£¬ÍⲿÊäÈëÐźÅ1 ×¢£º²»Ö§³ÖAPBCLKµÄϽµÑز¶×½ºÍ¼ÆÊý£¬²¶×½Ô´ºÍ¼ÆÊýԴΪAPBCLKʱѡÔñϽµÑؽ«²»»áÓÐЧ²¶×½ºÍ¼ÆÊý¡£ Ïà¹Øº¯Êý */ void BTx_CFGR1_GRP1SEL_Set(BT_Type* BTx, uint32_t SetValue) { uint32_t tmpreg; tmpreg = BTx->CFGR1 ; tmpreg &= ~(BTx_CFGR1_GRP1SEL_Msk); tmpreg |= (SetValue & BTx_CFGR1_GRP1SEL_Msk); BTx->CFGR1 = tmpreg; } uint32_t BTx_CFGR1_GRP1SEL_Get(BT_Type* BTx) { return (BTx->CFGR1 & BTx_CFGR1_GRP1SEL_Msk); } /* ÍⲿÊäÈëÐźÅÑ¡Ôñ¿ØÖÆ2 (external source select2) 00 = BT1_IN0/BT2_IN0 01 = BT1_IN1/BT2_IN1 10 = BT1_IN2/BT2_IN2 11 = BT1_IN3/BT2_IN3 Ïà¹Øº¯Êý */ void BTx_CFGR2_EXSEL2_Set(BT_Type* BTx, uint32_t SetValue) { uint32_t tmpreg; tmpreg = BTx->CFGR2 ; tmpreg &= ~(BTx_CFGR2_EXSEL2_Msk); tmpreg |= (SetValue & BTx_CFGR2_EXSEL2_Msk); BTx->CFGR2 = tmpreg; } uint32_t BTx_CFGR2_EXSEL2_Get(BT_Type* BTx) { return (BTx->CFGR2 & BTx_CFGR2_EXSEL2_Msk); } /* ÍⲿÊäÈëÐźÅÑ¡Ôñ¿ØÖÆ1 (external source select1) 00 = BT1_IN0/BT2_IN0 01 = BT1_IN1/BT2_IN1 10 = BT1_IN2/BT2_IN2 11 = BT1_IN3/BT2_IN3 Ïà¹Øº¯Êý */ void BTx_CFGR2_EXSEL1_Set(BT_Type* BTx, uint32_t SetValue) { uint32_t tmpreg; tmpreg = BTx->CFGR2 ; tmpreg &= ~(BTx_CFGR2_EXSEL1_Msk); tmpreg |= (SetValue & BTx_CFGR2_EXSEL1_Msk); BTx->CFGR2 = tmpreg; } uint32_t BTx_CFGR2_EXSEL1_Get(BT_Type* BTx) { return (BTx->CFGR2 & BTx_CFGR2_EXSEL1_Msk); } /* ÄÚ²¿ÊäÈëÐźÅÑ¡Ôñ¿ØÖÆ2 (internal source select 2) 00 = UART_RX3/UART_RX3 01 = UART_RX4/UART_RX4 10 = UART_RX5/UART_RX5 11 = RCLP/BT1_OUT Ïà¹Øº¯Êý */ void BTx_CFGR2_INSEL2_Set(BT_Type* BTx, uint32_t SetValue) { uint32_t tmpreg; tmpreg = BTx->CFGR2 ; tmpreg &= ~(BTx_CFGR2_INSEL2_Msk); tmpreg |= (SetValue & BTx_CFGR2_INSEL2_Msk); BTx->CFGR2 = tmpreg; } uint32_t BTx_CFGR2_INSEL2_Get(BT_Type* BTx) { return (BTx->CFGR2 & BTx_CFGR2_INSEL2_Msk); } /* ÄÚ²¿ÊäÈëÐźÅÑ¡Ôñ¿ØÖÆ1 (internal source select 1) 00 = UART_RX0/UART_RX0 01 = UART_RX1/UART_RX1 10 = UART_RX2/UART_RX2 11 = RCLP/RCLP Ïà¹Øº¯Êý */ void BTx_CFGR2_INSEL1_Set(BT_Type* BTx, uint32_t SetValue) { uint32_t tmpreg; tmpreg = BTx->CFGR2 ; tmpreg &= ~(BTx_CFGR2_INSEL1_Msk); tmpreg |= (SetValue & BTx_CFGR2_INSEL1_Msk); BTx->CFGR2 = tmpreg; } uint32_t BTx_CFGR2_INSEL1_Get(BT_Type* BTx) { return (BTx->CFGR2 & BTx_CFGR2_INSEL1_Msk); } /* ÊäÈëGroup1µÄÔ¤·ÖƵ¼Ä´æÆ÷ (Group1 input signal prescaler) ·ÖƵÊý=£¨X+1£©£¬¼´00±íʾ1·ÖƵ£¬FF±íʾ256·ÖƵ¡£Ô¤·ÖƵºóµÄÐźŶ¼Îªµ¥ÖÜÆÚÂö³åµÄÐÎʽ£¬Õ¼¿Õ±È1:X Ïà¹Øº¯Êý */ void BTx_PRES_Write(BT_Type* BTx, uint32_t SetValue) { BTx->PRES = (SetValue & BTx_PRES_PRESCALE_Msk); } uint32_t BTx_PRES_Read(BT_Type* BTx) { return (BTx->PRES & BTx_PRES_PRESCALE_Msk); } /* ¸ßλ¼ÓÔØ¿ØÖÆ (Counter highend load enable) д1½«Ô¤ÖÃÊý¼Ä´æÆ÷ET1PRESETHºÍ¼ÓÔØ¼Ä´æÆ÷ET1LOADH·Ö±ð¼ÓÔØµ½¼ÆÊýÖµ¼Ä´æÆ÷ET1CNTHºÍ±È½Ï¼Ä´æÆ÷ET1CMPH£¬Ð´0ÎÞЧ£¬¸ÃλӲ¼þ×Ô¶¯Çå0¡£ÔÚ16λµÄ¶¨Ê±/¼ÆÊýÏÂLHEN×÷Ϊ¼ÆÊýÆ÷µÄ¼ÓÔØ¿ØÖÆ£¬LLEN×Ô¶¯Ê§Ð§ Ïà¹Øº¯Êý */ void BTx_LOADCR_LHEN_Setable(BT_Type* BTx, FunState NewState) { if (NewState == ENABLE) { BTx->LOADCR |= (BTx_LOADCR_LHEN_Msk); } else { BTx->LOADCR &= ~(BTx_LOADCR_LHEN_Msk); } } FunState BTx_LOADCR_LHEN_Getable(BT_Type* BTx) { if (BTx->LOADCR & (BTx_LOADCR_LHEN_Msk)) { return ENABLE; } else { return DISABLE; } } /* µÍλ¼ÓÔØ¿ØÖÆ (Counter lowend load enable) д1½«Ô¤ÖÃÊý¼Ä´æÆ÷PRESETLºÍ¼ÓÔØ¼Ä´æÆ÷LOADL·Ö±ð¼ÓÔØµ½¼ÆÊýÖµ¼Ä´æÆ÷ET1CNTLºÍ±È½Ï¼Ä´æÆ÷ET1CMPL£¬Ð´0ÎÞЧ£¬¸ÃλӲ¼þ×Ô¶¯Çå0¡£ÔÚ16λµÄ¶¨Ê±/¼ÆÊýÏÂLHEN×÷Ϊ¼ÆÊýÆ÷µÄ¼ÓÔØ¿ØÖÆ£¬LLEN×Ô¶¯Ê§Ð§ Ïà¹Øº¯Êý */ void BTx_LOADCR_LLEN_Setable(BT_Type* BTx, FunState NewState) { if (NewState == ENABLE) { BTx->LOADCR |= (BTx_LOADCR_LLEN_Msk); } else { BTx->LOADCR &= ~(BTx_LOADCR_LLEN_Msk); } } FunState BTx_LOADCR_LLEN_Getable(BT_Type* BTx) { if (BTx->LOADCR & (BTx_LOADCR_LLEN_Msk)) { return ENABLE; } else { return DISABLE; } } /* ¼ÆÊýÆ÷µÍλ¼ÆÊýÖµ¼Ä´æÆ÷ (counter lowend) LLENÓÐЧʱ¼ÓÔØÔ¤ÖÃÊýµ½¸Ã¼Ä´æÆ÷¡£ Ïà¹Øº¯Êý */ uint32_t BTx_CNTL_Read(BT_Type* BTx) { return (BTx->CNTL & BTx_CNTL_CNTL_Msk); } /* ¼ÆÊýÆ÷¸ßλ¼ÆÊýÖµ¼Ä´æÆ÷ (counter highend) LHENÓÐЧʱ¼ÓÔØÔ¤ÖÃÊýµ½¸Ã¼Ä´æÆ÷¡£ Ïà¹Øº¯Êý */ uint32_t BTx_CNTH_Read(BT_Type* BTx) { return (BTx->CNTH & BTx_CNTH_CNTH_Msk); } /* ¼ÆÊýÆ÷¸ßλԤÖÃÊý¼Ä´æÆ÷ (preset highend) ÓÃÓÚ±£´æ¸ßλ¼ÆÊýÆ÷³õÖµ£¬»ò±£´æ²¶×½½á¹û¸ß8bit Ïà¹Øº¯Êý */ void BTx_PRESET_PRESETH_Set(BT_Type* BTx, uint32_t SetValue) { uint32_t tmpreg; tmpreg = BTx->PRESET ; tmpreg &= ~(BTx_PRESET_PRESETH_Msk); tmpreg |= (SetValue & BTx_PRESET_PRESETH_Msk); BTx->PRESET = tmpreg; } uint32_t BTx_PRESET_PRESETH_Get(BT_Type* BTx) { return (BTx->PRESET & BTx_PRESET_PRESETH_Msk); } /* ¼ÆÊýÆ÷µÍλԤÖÃÊý¼Ä´æÆ÷ (preset lowend) ÓÃÓÚ±£´æµÍλ¼ÆÊýÆ÷³õÖµ£¬»ò±£´æ²¶×½½á¹ûµÍ8bit Ïà¹Øº¯Êý */ void BTx_PRESET_PRESETL_Set(BT_Type* BTx, uint32_t SetValue) { uint32_t tmpreg; tmpreg = BTx->PRESET ; tmpreg &= ~(BTx_PRESET_PRESETL_Msk); tmpreg |= (SetValue & BTx_PRESET_PRESETL_Msk); BTx->PRESET = tmpreg; } uint32_t BTx_PRESET_PRESETL_Get(BT_Type* BTx) { return (BTx->PRESET & BTx_PRESET_PRESETL_Msk); } /* ¼ÆÊýÆ÷µÍλ¼ÓÔØ¼Ä´æÆ÷ (load lowend counter) ÔÚ¼ÆÊýÆ¥Åä»òÖ´ÐмÓÔØÃüÁîʱ½«¼ÓÔØ¼Ä´æÆ÷µÄÖµ¼ÓÔØÖÁ±È½Ï¹¤×÷¼Ä´æÆ÷¡£ Ïà¹Øº¯Êý */ void BTx_LOADL_Write(BT_Type* BTx, uint32_t SetValue) { BTx->LOADL = (SetValue & BTx_LOADL_LOADL_Msk); } uint32_t BTx_LOADL_Read(BT_Type* BTx) { return (BTx->LOADL & BTx_LOADL_LOADL_Msk); } /* ¼ÆÊýÆ÷¸ßλ¼ÓÔØ¼Ä´æÆ÷ (load highend counter) ÔÚ¼ÆÊýÆ¥Åä»òÖ´ÐмÓÔØÃüÁîʱ½«¼ÓÔØ¼Ä´æÆ÷µÄÖµ¼ÓÔØÖÁ±È½Ï¹¤×÷¼Ä´æÆ÷¡£µ±¹¤×÷ÔÚ8λ¶¨Ê±/¼ÆÊýÆ÷ģʽʱ£¬¸Ã¸ßλ¼ÓÔØ¼Ä´æÆ÷²»Ö§³Ö¼ÓÔØÖµÎª0x00µÄÉèÖᣠÏà¹Øº¯Êý */ void BTx_LOADH_Write(BT_Type* BTx, uint32_t SetValue) { BTx->LOADH = (SetValue & BTx_LOADH_LOADH_Msk); } uint32_t BTx_LOADH_Read(BT_Type* BTx) { return (BTx->LOADH & BTx_LOADH_LOADH_Msk); } /* ¼ÆÊýÆ÷µÍλ±È½Ï¼Ä´æÆ÷ (compare lowend ) ¼ÓÔØ¼Ä´æÆ÷µÄÖµ¼ÓÔØºó½«Ð´Èë¸Ã¼Ä´æÆ÷£¬¸Ã¼Ä´æÆ÷Óë¼ÆÊýÆ÷±È½Ï£¬Èô¼ÆÊýÖµ´óÓÚµÈÓڸüĴæÆ÷µÄÖµ£¬Ôò²úÉú¼ÆÊýÆ¥ÅäÐźÅÖÁÊä³ö¿ØÖÆÄ£¿é£¬²¢²úÉúÏàÓ¦Öжϡ£ Ïà¹Øº¯Êý */ void BTx_CMPL_Write(BT_Type* BTx, uint32_t SetValue) { BTx->CMPL = (SetValue & BTx_CMPL_CMPL_Msk); } uint32_t BTx_CMPL_Read(BT_Type* BTx) { return (BTx->CMPL & BTx_CMPL_CMPL_Msk); } /* ¼ÆÊýÆ÷¸ßλ±È½Ï¼Ä´æÆ÷ (compare highend) ¼ÓÔØ¼Ä´æÆ÷µÄÖµ¼ÓÔØºó½«Ð´Èë¸Ã¼Ä´æÆ÷£¬¸Ã¼Ä´æÆ÷Óë¼ÆÊýÆ÷±È½Ï£¬Èô¼ÆÊýÖµ´óÓÚµÈÓڸüĴæÆ÷µÄÖµ£¬Ôò²úÉú¼ÆÊýÆ¥ÅäÐźÅÖÁÊä³ö¿ØÖÆÄ£¿é£¬²¢²úÉúÏàÓ¦Öжϡ£ Ïà¹Øº¯Êý */ void BTx_CMPH_Write(BT_Type* BTx, uint32_t SetValue) { BTx->CMPH = (SetValue & BTx_CMPH_CMPH_Msk); } uint32_t BTx_CMPH_Read(BT_Type* BTx) { return (BTx->CMPH & BTx_CMPH_CMPH_Msk); } /* ¼ÆÊýÆ÷Êä³öÂö³å¿í¶È¼ÆÊýÆ÷ (output pulse width counter) ¸Ã¼Ä´æÆ÷ÓÃÓÚµ÷ÕûÊä³öÂö³å¿í¶È¡£¼ÆÊýʱÖÓΪ32768Hz£¬¶ÔÓ¦µÄÊä³öÂö³å¿í¶È·¶Î§Îª30.5uS~125mS¡£Êä³öÂö³å¿í¶È=(OUTCNT+1)/32768Ãë Ïà¹Øº¯Êý */ void BTx_OUTCNT_Write(BT_Type* BTx, uint32_t SetValue) { BTx->OUTCNT = (SetValue & BTx_OUTCNT_OUTCNT_Msk); } uint32_t BTx_OUTCNT_Read(BT_Type* BTx) { return (BTx->OUTCNT & BTx_OUTCNT_OUTCNT_Msk); } void BTx_OCR_OUTCLR_Set(BT_Type* BTx, uint32_t SetValue) { uint32_t tmpreg; tmpreg = BTx->OCR; tmpreg &= ~(BTx_OCR_OUTCLR_Msk); tmpreg |= (SetValue & BTx_OCR_OUTCLR_Msk); BTx->OCR = tmpreg; } uint32_t BTx_OCR_OUTCLR_Get(BT_Type* BTx) { return (BTx->OCR & BTx_OCR_OUTCLR_Msk); } void BTx_OCR_OUTINV_Set(BT_Type* BTx, uint32_t SetValue) { uint32_t tmpreg; tmpreg = BTx->OCR; tmpreg &= ~(BTx_OCR_OUTINV_Msk); tmpreg |= (SetValue & BTx_OCR_OUTINV_Msk); BTx->OCR = tmpreg; } uint32_t BTx_OCR_OUTINV_Get(BT_Type* BTx) { return (BTx->OCR & BTx_OCR_OUTINV_Msk); } void BTx_OCR_OUTMOD_Set(BT_Type* BTx, uint32_t SetValue) { uint32_t tmpreg; tmpreg = BTx->OCR; tmpreg &= ~(BTx_OCR_OUTMOD_Msk); tmpreg |= (SetValue & BTx_OCR_OUTMOD_Msk); BTx->OCR = tmpreg; } uint32_t BTx_OCR_OUTMOD_Get(BT_Type* BTx) { return (BTx->OCR & BTx_OCR_OUTMOD_Msk); } void BTx_OCR_OUTSEL_Set(BT_Type* BTx, uint32_t SetValue) { uint32_t tmpreg; tmpreg = BTx->OCR; tmpreg &= ~(BTx_OCR_OUTSEL_Msk); tmpreg |= (SetValue & BTx_OCR_OUTSEL_Msk); BTx->OCR = tmpreg; } uint32_t BTx_OCR_OUTSEL_Get(BT_Type* BTx) { return (BTx->OCR & BTx_OCR_OUTSEL_Msk); } /* À©Õ¹¶¨Ê±Æ÷¸ßλ±È½Ï·¢ÉúÐźŠ(compare highend interrupt enable) 1 = ÖжÏʹÄÜ 0 = ÖжϽûÖ¹ Ïà¹Øº¯Êý */ void BTx_IER_CMPHIE_Setable(BT_Type* BTx, FunState NewState) { if (NewState == ENABLE) { BTx->IER |= (BTx_IER_CMPHIE_Msk); } else { BTx->IER &= ~(BTx_IER_CMPHIE_Msk); } } FunState BTx_IER_CMPHIE_Getable(BT_Type* BTx) { if (BTx->IER & (BTx_IER_CMPHIE_Msk)) { return ENABLE; } else { return DISABLE; } } /* À©Õ¹¶¨Ê±Æ÷µÍλ±È½Ï·¢ÉúÐźŠ(compare lowend interrupt enable) 1 = ÖжÏʹÄÜ 0 = ÖжϽûÖ¹ Ïà¹Øº¯Êý */ void BTx_IER_CMPLIE_Setable(BT_Type* BTx, FunState NewState) { if (NewState == ENABLE) { BTx->IER |= (BTx_IER_CMPLIE_Msk); } else { BTx->IER &= ~(BTx_IER_CMPLIE_Msk); } } FunState BTx_IER_CMPLIE_Getable(BT_Type* BTx) { if (BTx->IER & (BTx_IER_CMPLIE_Msk)) { return ENABLE; } else { return DISABLE; } } /* ¶¨Ê±Æ÷¸ßλÒç³öÐźŠ(highend overflow interrupt enable) 1 = ÖжÏʹÄÜ 0 = ÖжϽûÖ¹ Ïà¹Øº¯Êý */ void BTx_IER_OVHIE_Setable(BT_Type* BTx, FunState NewState) { if (NewState == ENABLE) { BTx->IER |= (BTx_IER_OVHIE_Msk); } else { BTx->IER &= ~(BTx_IER_OVHIE_Msk); } } FunState BTx_IER_OVHIE_Getable(BT_Type* BTx) { if (BTx->IER & (BTx_IER_OVHIE_Msk)) { return ENABLE; } else { return DISABLE; } } /* ¶¨Ê±Æ÷µÍλÒç³öÐźŠ(lowend overflow interrupt enable) 1 = ÖжÏʹÄÜ 0 = ÖжϽûÖ¹ Ïà¹Øº¯Êý */ void BTx_IER_OVLIE_Setable(BT_Type* BTx, FunState NewState) { if (NewState == ENABLE) { BTx->IER |= (BTx_IER_OVLIE_Msk); } else { BTx->IER &= ~(BTx_IER_OVLIE_Msk); } } FunState BTx_IER_OVLIE_Getable(BT_Type* BTx) { if (BTx->IER & (BTx_IER_OVLIE_Msk)) { return ENABLE; } else { return DISABLE; } } /* ¶¨Ê±Æ÷²¶×½²úÉúÐźŠ(capture interrupt enable) 1 = ÖжÏʹÄÜ 0 = ÖжϽûÖ¹ Ïà¹Øº¯Êý */ void BTx_IER_CAPIE_Setable(BT_Type* BTx, FunState NewState) { if (NewState == ENABLE) { BTx->IER |= (BTx_IER_CAPIE_Msk); } else { BTx->IER &= ~(BTx_IER_CAPIE_Msk); } } FunState BTx_IER_CAPIE_Getable(BT_Type* BTx) { if (BTx->IER & (BTx_IER_CAPIE_Msk)) { return ENABLE; } else { return DISABLE; } } /* ²¶×½ÑØ×´Ì¬ 1 = ²¶×½µ½ÏÂÑØ 0 = ²¶×½µ½ÉÏÑØ */ FlagStatus BTx_ISR_EDGESTA_Chk(BT_Type* BTx) { if (BTx->ISR & BTx_ISR_EDGESTA_Msk) { return SET; } else { return RESET; } } /* ¶¨Ê±Æ÷¸ßλ±È½Ï·¢ÉúÐźŠ(compare highend interrupt flag) 1 = µ±Ç°¼ÆÊýÆ÷µÄÖµ´óÓÚµÈÓڱȽϼĴæÆ÷µÄÖµ£¬¸ÃÐźŽ«ÖØÐ¼ÓÔØÐµļÓÔØ¼Ä´æÆ÷µÄÖµµ½¹¤×÷¼Ä´æÆ÷¡£ 0 = µ±Ç°¼ÆÊýÆ÷µÄֵСÓڱȽϼĴæÆ÷µÄÖµ Ïà¹Øº¯Êý */ void BTx_ISR_CMPHIF_Clr(BT_Type* BTx) { BTx->ISR = BTx_ISR_CMPHIF_Msk; } FlagStatus BTx_ISR_CMPHIF_Chk(BT_Type* BTx) { if (BTx->ISR & BTx_ISR_CMPHIF_Msk) { return SET; } else { return RESET; } } /* ¶¨Ê±Æ÷µÍλ±È½Ï·¢ÉúÐźŠ(compare lowend interrupt flag) 1 = µ±Ç°¼ÆÊýÆ÷µÄÖµ´óÓÚµÈÓڱȽϼĴæÆ÷µÄÖµ£¬¸ÃÐźŽ«ÖØÐ¼ÓÔØÐµļÓÔØ¼Ä´æÆ÷µÄÖµµ½¹¤×÷¼Ä´æÆ÷¡£ 0 = µ±Ç°¼ÆÊýÆ÷µÄֵСÓڱȽϼĴæÆ÷µÄÖµ Ïà¹Øº¯Êý */ void BTx_ISR_CMPLIF_Clr(BT_Type* BTx) { BTx->ISR = BTx_ISR_CMPLIF_Msk; } FlagStatus BTx_ISR_CMPLIF_Chk(BT_Type* BTx) { if (BTx->ISR & BTx_ISR_CMPLIF_Msk) { return SET; } else { return RESET; } } /* ¶¨Ê±Æ÷¸ßλÒç³öÐźŠ(highend overflow interrupt flag) 1 = ²úÉú¼ÆÊýÒç³ö 0 = δ²úÉúÒç³ö Ïà¹Øº¯Êý */ void BTx_ISR_OVHIF_Clr(BT_Type* BTx) { BTx->ISR = BTx_ISR_OVHIF_Msk; } FlagStatus BTx_ISR_OVHIF_Chk(BT_Type* BTx) { if (BTx->ISR & BTx_ISR_OVHIF_Msk) { return SET; } else { return RESET; } } /* ¶¨Ê±Æ÷µÍλÒç³öÐźŠ(lowend overflow interrupt flag) 1 = ²úÉú¼ÆÊýÒç³ö 0 = δ²úÉúÒç³ö Ïà¹Øº¯Êý */ void BTx_ISR_OVLIF_Clr(BT_Type* BTx) { BTx->ISR = BTx_ISR_OVLIF_Msk; } FlagStatus BTx_ISR_OVLIF_Chk(BT_Type* BTx) { if (BTx->ISR & BTx_ISR_OVLIF_Msk) { return SET; } else { return RESET; } } /* ¶¨Ê±Æ÷²¶×½²úÉúÐźŠ(capture interrupt flag) 1 = ²¶×½µ½Ö¸¶¨µÄÑØ 0 = δ²¶×½µ½Ö¸¶¨µÄÑØ Ïà¹Øº¯Êý */ void BTx_ISR_CAPIF_Clr(BT_Type* BTx) { BTx->ISR = BTx_ISR_CAPIF_Msk; } FlagStatus BTx_ISR_CAPIF_Chk(BT_Type* BTx) { if (BTx->ISR & BTx_ISR_CAPIF_Msk) { return SET; } else { return RESET; } } void BTx_Deinit(BT_Type* BTx) { //BTx->CR1 = 0x00000000; //BTx->CR2 = 0x00000000; //BTx->CFGR1 = 0x00000000; //BTx->CFGR2 = 0x00000000; //BTx->PRES = 0x00000000; //BTx->LOADCR = 0x00000000; //BTx->CNTL = 0x00000000; //BTx->CNTH = 0x00000000; //BTx->PRESET = 0x00000000; //BTx->LOADL = 0x00000000; //BTx->LOADH = 0x00000000; //BTx->CMPL = 0x00000000; //BTx->CMPH = 0x00000000; //BTx->OUTCNT = 0x00000000; //BTx->OCR = ; //BTx->IER = 0x00000000; //BTx->ISR = 0x00000000; } /******END OF FILE****/