123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405 |
- typedef enum _cmt_mode
- {
- kCMT_DirectIROCtl = 0x00U,
- kCMT_TimeMode = 0x01U,
- kCMT_FSKMode = 0x05U,
- kCMT_BasebandMode = 0x09U
- } cmt_mode_t;
- typedef enum _cmt_primary_clkdiv
- {
- kCMT_PrimaryClkDiv1 = 0U,
- kCMT_PrimaryClkDiv2 = 1U,
- kCMT_PrimaryClkDiv3 = 2U,
- kCMT_PrimaryClkDiv4 = 3U,
- kCMT_PrimaryClkDiv5 = 4U,
- kCMT_PrimaryClkDiv6 = 5U,
- kCMT_PrimaryClkDiv7 = 6U,
- kCMT_PrimaryClkDiv8 = 7U,
- kCMT_PrimaryClkDiv9 = 8U,
- kCMT_PrimaryClkDiv10 = 9U,
- kCMT_PrimaryClkDiv11 = 10U,
- kCMT_PrimaryClkDiv12 = 11U,
- kCMT_PrimaryClkDiv13 = 12U,
- kCMT_PrimaryClkDiv14 = 13U,
- kCMT_PrimaryClkDiv15 = 14U,
- kCMT_PrimaryClkDiv16 = 15U
- } cmt_primary_clkdiv_t;
- typedef enum _cmt_second_clkdiv
- {
- kCMT_SecondClkDiv1 = 0U,
- kCMT_SecondClkDiv2 = 1U,
- kCMT_SecondClkDiv4 = 2U,
- kCMT_SecondClkDiv8 = 3U
- } cmt_second_clkdiv_t;
- typedef enum _cmt_infrared_output_polarity
- {
- kCMT_IROActiveLow = 0U,
- kCMT_IROActiveHigh = 1U
- } cmt_infrared_output_polarity_t;
- typedef enum _cmt_infrared_output_state
- {
- kCMT_IROCtlLow = 0U,
- kCMT_IROCtlHigh = 1U
- } cmt_infrared_output_state_t;
- enum _cmt_interrupt_enable
- {
- kCMT_EndOfCycleInterruptEnable = CMT_MSC_EOCIE_MASK,
- };
- typedef struct _cmt_modulate_config
- {
- uint8_t highCount1;
- uint8_t lowCount1;
- uint8_t highCount2;
- uint8_t lowCount2;
- uint16_t markCount;
- uint16_t spaceCount;
- } cmt_modulate_config_t;
- typedef struct _cmt_config
- {
- bool isInterruptEnabled;
- bool isIroEnabled;
- cmt_infrared_output_polarity_t iroPolarity;
- cmt_second_clkdiv_t divider;
- } cmt_config_t;
- extern "C" {
- void CMT_GetDefaultConfig(cmt_config_t *config);
- void CMT_Init(CMT_Type *base, const cmt_config_t *config, uint32_t busClock_Hz);
- void CMT_Deinit(CMT_Type *base);
- void CMT_SetMode(CMT_Type *base, cmt_mode_t mode, cmt_modulate_config_t *modulateConfig);
- cmt_mode_t CMT_GetMode(CMT_Type *base);
- uint32_t CMT_GetCMTFrequency(CMT_Type *base, uint32_t busClock_Hz);
- static inline void CMT_SetCarrirGenerateCountOne(CMT_Type *base, uint32_t highCount, uint32_t lowCount)
- {
- assert(highCount <= CMT_CGH1_PH_MASK);
- assert(highCount);
- assert(lowCount <= CMT_CGL1_PL_MASK);
- assert(lowCount);
- base->CGH1 = highCount;
- base->CGL1 = lowCount;
- }
- static inline void CMT_SetCarrirGenerateCountTwo(CMT_Type *base, uint32_t highCount, uint32_t lowCount)
- {
- assert(highCount <= CMT_CGH2_SH_MASK);
- assert(highCount);
- assert(lowCount <= CMT_CGL2_SL_MASK);
- assert(lowCount);
- base->CGH2 = highCount;
- base->CGL2 = lowCount;
- }
- void CMT_SetModulateMarkSpace(CMT_Type *base, uint32_t markCount, uint32_t spaceCount);
- static inline void CMT_EnableExtendedSpace(CMT_Type *base, bool enable)
- {
- if (enable)
- {
- base->MSC |= CMT_MSC_EXSPC_MASK;
- }
- else
- {
- base->MSC &= ~CMT_MSC_EXSPC_MASK;
- }
- }
- void CMT_SetIroState(CMT_Type *base, cmt_infrared_output_state_t state);
- static inline void CMT_EnableInterrupts(CMT_Type *base, uint32_t mask)
- {
- base->MSC |= mask;
- }
- static inline void CMT_DisableInterrupts(CMT_Type *base, uint32_t mask)
- {
- base->MSC &= ~mask;
- }
- static inline uint32_t CMT_GetStatusFlags(CMT_Type *base)
- {
- return base->MSC & CMT_MSC_EOCF_MASK;
- }
- }
|