75#define PMUX_SELECTION(GPIO_PORT, GPIO_PIN, PER_TYPE) \
76if ((GPIO_PIN) & 1) { \
77 PORT->Group[(GPIO_PORT)].PMUX[(GPIO_PIN) >> 1].bit.PMUXO = (PER_TYPE); \
80 PORT->Group[(GPIO_PORT)].PMUX[(GPIO_PIN) >> 1].bit.PMUXE = (PER_TYPE); \
86#define DATA_OUTPUT_STATE(GPIO_PORT, DATA_MASK, STATE) \
88 PORT->Group[(GPIO_PORT)].OUTSET.reg = (DATA_MASK); \
91 PORT->Group[(GPIO_PORT)].OUTCLR.reg = (DATA_MASK); \
97#define PMUX_ENABLE(GPIO_PORT, GPIO_PIN) \
98PORT->Group[(GPIO_PORT)].PINCFG[(GPIO_PIN)].bit.PMUXEN = 1
103#define PMUX_DISABLE(GPIO_PORT, GPIO_PIN) \
104PORT->Group[(GPIO_PORT)].PINCFG[(GPIO_PIN)].bit.PMUXEN = 0
109#define PIN_CONFIGURATION(GPIO_PORT, GPIO_PIN, CONFIG) \
110PORT->Group[(GPIO_PORT)].PINCFG[(GPIO_PIN)].reg = (CONFIG)
115#define DATA_DIRECTION_OUTPUT(GPIO_PORT, DATA_MASK) \
116PORT->Group[(GPIO_PORT)].DIRSET.reg = (DATA_MASK)
121#define DATA_DIRECTION_INPUT(GPIO_PORT, DATA_MASK) \
122PORT->Group[(GPIO_PORT)].DIRCLR.reg = (DATA_MASK)
127#define SYNCBUSY_WAIT(PER, BITMASK) \
128while ((PER)->SYNCBUSY.reg & (BITMASK)) { \
135#define CLOCK_ENABLE(BUS, BIT) \
166#define SET_CLOCK_SOURCE(PER_GCLK_ID, GCLK_INDEX) \
167GCLK->PCHCTRL[(PER_GCLK_ID)].bit.CHEN = 0; \
168while (GCLK->PCHCTRL[(PER_GCLK_ID)].bit.CHEN) { \
171GCLK->PCHCTRL[(PER_GCLK_ID)].bit.GEN = GCLK_PCHCTRL_GEN((GCLK_INDEX)); \
172GCLK->PCHCTRL[(PER_GCLK_ID)].bit.CHEN = 1; \
173while (GCLK->SYNCBUSY.reg & GCLK_SYNCBUSY_GENCTRL((GCLK_INDEX))) { \
180#define max(a, b) (((a) > (b)) ? (a) : (b))
187#define min(a, b) (((a) < (b)) ? (a) : (b))
void GClkFreqUpdate(uint8_t gclkIndex, uint32_t freqReq)
Update GCLK frequency.
PerType
Definition SysUtils.h:53