void OS_CPU_SysTickInit (CPU_INT32U cnts) { CPU_INT32U prio; CPU_REG_NVIC_ST_RELOAD = cnts - 1u; /* Set SysTick handler prio. */ prio = CPU_REG_NVIC_SHPRI3; prio &= DEF_BIT_FIELD(24, 0); prio |= DEF_BIT_MASK(OS_CPU_CFG_SYSTICK_PRIO, 24); CPU_REG_NVIC_SHPRI3 = prio; /* Enable timer. */ CPU_REG_NVIC_ST_CTRL |= CPU_REG_NVIC_ST_CTRL_CLKSOURCE | CPU_REG_NVIC_ST_CTRL_ENABLE; /* Enable timer interrupt. */ CPU_REG_NVIC_ST_CTRL |= CPU_REG_NVIC_ST_CTRL_TICKINT; }
void OS_CPU_SysTickInit (INT32U cnts) { INT32U prio; OS_CPU_CM4_NVIC_ST_RELOAD = cnts - 1u; /* Set SysTick handler prio. */ prio = OS_CPU_CM4_NVIC_SHPRI3; prio &= DEF_BIT_FIELD(24, 0); prio |= DEF_BIT_MASK(OS_CPU_CFG_SYSTICK_PRIO, 24); OS_CPU_CM4_NVIC_SHPRI3 = prio; /* Enable timer. */ OS_CPU_CM4_NVIC_ST_CTRL |= OS_CPU_CM4_NVIC_ST_CTRL_CLK_SRC | OS_CPU_CM4_NVIC_ST_CTRL_ENABLE; /* Enable timer interrupt. */ OS_CPU_CM4_NVIC_ST_CTRL |= OS_CPU_CM4_NVIC_ST_CTRL_INTEN; }
CPU_BOOLEAN CSP_TmrOutCmpCfg (CSP_DEV_NBR tmr_nbr, CSP_DEV_NBR pin, CSP_OPT pin_action, CPU_INT32U freq) { CSP_TMR_REG *p_tmr_reg; CPU_INT08U match_nbr; CPU_INT32U match_val; CPU_INT32U per_freq; CSP_DEV_NBR per_nbr; CPU_SR_ALLOC(); /* ---------------- ARGUMENTS CHECKING -------------- */ #if (CSP_CFG_ARG_CHK_EN == DEF_ENABLED) if (tmr_nbr > CSP_TMR_NBR_01) { return (DEF_FAIL); } if (pin > CSP_TMR_PIN_OUT_NBR_03) { return (DEF_FAIL); } if (freq == 0u) { return (DEF_FAIL); } #endif p_tmr_reg = (CSP_TMR_REG *)CSP_TmrAddrTbl[tmr_nbr]; per_nbr = (CSP_DEV_NBR )CSP_TmrPerTbl[tmr_nbr]; match_nbr = pin, per_freq = CSP_PM_PerClkFreqGet(per_nbr); /* Get the peripheral clock. */ if (freq > per_freq) { return (DEF_FAIL); } match_val = ((2u * per_freq / freq) + 1u) / 2u; if (match_val == 0u) { return (DEF_FAIL); } CSP_PM_PerClkEn(per_nbr); /* Enable Peripherical clock. */ CPU_CRITICAL_ENTER(); DEF_BIT_CLR(p_tmr_reg->EMR, DEF_BIT_MASK(3u, (2u * match_nbr) + 4u)); switch (pin_action) { case CSP_TMR_OPT_PIN_OUT_NONE: break; case CSP_TMR_OPT_PIN_OUT_CLR: DEF_BIT_SET(p_tmr_reg->EMR, DEF_BIT_MASK(1u, (2u * match_nbr) + 4u)); break; case CSP_TMR_OPT_PIN_OUT_SET: DEF_BIT_SET(p_tmr_reg->EMR, DEF_BIT_MASK(2u, (2u * match_nbr) + 4u)); break; case CSP_TMR_OPT_PIN_OUT_TOGGLE: DEF_BIT_SET(p_tmr_reg->EMR, DEF_BIT_MASK(3u, (2u * match_nbr) + 4u)); break; default: CPU_CRITICAL_EXIT(); return (DEF_FAIL); } /* Disable the Interrupt, Reset and Stop features on */ /* ... Match channel 0, 1, 2 or 3. */ DEF_BIT_CLR(p_tmr_reg->MCR, CSP_TMR_MASK_MCR_MRx(match_nbr)); DEF_BIT_CLR(p_tmr_reg->TCR, CSP_TMR_MASK_TCR_MODE); /* Clear the Mode */ DEF_BIT_SET(p_tmr_reg->TCR, CSP_TMR_BIT_TCR_TMR_MODE); /* Set the Timer Mode */ p_tmr_reg->PR = 0u; /* Set the prescaler to 0 */ p_tmr_reg->MRx[match_nbr] = match_val; p_tmr_reg->TCR = CSP_TMR_BIT_CR_RST; /* Reset the timer */ /* Enable Interrupt and Reset when TC matches MR0, ... */ /* MR1, MR2, etc */ DEF_BIT_SET(p_tmr_reg->MCR, CSP_TMR_BIT_MCR_MRIx(match_nbr) | CSP_TMR_BIT_MCR_MRRx(match_nbr)); CPU_CRITICAL_EXIT(); return (DEF_OK); }
CPU_BOOLEAN CSP_TmrCfg (CSP_DEV_NBR tmr_nbr, CPU_INT32U freq) { CSP_TMR_REG *p_tmr_reg; CPU_INT32U match_val; CPU_INT32U per_freq; CSP_DEV_NBR per_nbr; CPU_SR_ALLOC(); #if (CSP_CFG_ARG_CHK_EN == DEF_ENABLED) if (tmr_nbr > CSP_TMR_NBR_03) { return (DEF_FAIL); } #endif p_tmr_reg = (CSP_TMR_REG *)CSP_TmrAddrTbl[tmr_nbr]; per_nbr = (CSP_DEV_NBR )CSP_TmrPerTbl[tmr_nbr]; if (freq == 0u) { /* -------- FREE RUNNING TIMER CONFIGURATION --------- */ CSP_PM_PerClkEn(per_nbr); /* Enable peripheral clock */ CPU_CRITICAL_ENTER(); p_tmr_reg->MCR = DEF_BIT_NONE; /* Disable theInterrupt, Reset and Stop feauture on */ /* ... Match channels. */ DEF_BIT_CLR(p_tmr_reg->TCR, CSP_TMR_MASK_TCR_MODE); /* Clear the Mode. */ DEF_BIT_SET(p_tmr_reg->TCR, CSP_TMR_BIT_TCR_TMR_MODE); /* Set the Timer Mode. */ p_tmr_reg->PR = 0u; /* Set the prescaler to 0. */ p_tmr_reg->TCR = CSP_TMR_BIT_CR_RST; /* Reset the timer. */ CPU_CRITICAL_EXIT(); } else { /* ---------- PERIODIC TIMER CONFIGURATION ----------- */ per_freq = CSP_PM_PerClkFreqGet(per_nbr); /* Get the peripheral clock. */ if (freq > per_freq) { return (DEF_FAIL); } match_val = ((2u * per_freq / freq) + 1u) / 2u; if (match_val == 0u) { return (DEF_FAIL); } CSP_PM_PerClkEn(per_nbr); /* Enable peripheral clock. */ CPU_CRITICAL_ENTER(); DEF_BIT_CLR(p_tmr_reg->EMR, DEF_BIT_MASK(3u, (2u * 0u) + 4u)); CPU_CRITICAL_EXIT(); /* Disable the Interrupt, Reset and Stop features on */ /* ... Match channel 0, 1, 2 or 3. */ DEF_BIT_CLR(p_tmr_reg->MCR, CSP_TMR_MASK_MCR_MRx(0u)); DEF_BIT_CLR(p_tmr_reg->TCR, CSP_TMR_MASK_TCR_MODE); /* Clear the Mode */ DEF_BIT_SET(p_tmr_reg->TCR, CSP_TMR_BIT_TCR_TMR_MODE); /* Set the Timer Mode */ p_tmr_reg->PR = 0u; /* Set the prescaler to 0 */ p_tmr_reg->MRx[0] = match_val; p_tmr_reg->TCR = CSP_TMR_BIT_CR_RST; /* Reset the timer */ /* Enable Interrupt and Reset when TC matches MR0, ... */ /* MR1, MR2, etc */ DEF_BIT_SET(p_tmr_reg->MCR, CSP_TMR_BIT_MCR_MRIx(0u) | CSP_TMR_BIT_MCR_MRRx(0u)); CPU_CRITICAL_EXIT(); } return (DEF_OK); }
void BSP_GPIO_Cfg (CPU_INT08U gpio_port, CPU_INT32U gpio_pins, CPU_INT16U gpio_opt) { BSP_GPIO_FAST_REG *p_gpio_fast_reg; CPU_REG32 *p_gpio_pinsel; CPU_REG32 *p_gpio_pinmode; CPU_REG32 *p_gpio_pinmode_od; CPU_INT32U pinsel_opt; CPU_INT32U pinmode_opt; CPU_INT32U pin_nbr; switch (gpio_port) { case BSP_GPIO_PORT0_FAST: p_gpio_fast_reg = (BSP_GPIO_FAST_REG *)(BSP_GPIO_REG_PORT0_FAST_BASE_ADDR); p_gpio_pinsel = (CPU_REG32 *)(BSP_GPIO_REG_PINSEL_BASE_ADDR + 0x00); p_gpio_pinmode = (CPU_REG32 *)(BSP_GPIO_REG_PINMODE_BASE_ADDR + 0x00); p_gpio_pinmode_od = (CPU_REG32 *)(BSP_GPIO_REG_PINMODE_OD0_BASE_ADDR); break; case BSP_GPIO_PORT1_FAST: p_gpio_fast_reg = (BSP_GPIO_FAST_REG *)(BSP_GPIO_REG_PORT1_FAST_BASE_ADDR); p_gpio_pinsel = (CPU_REG32 *)(BSP_GPIO_REG_PINSEL_BASE_ADDR + 0x08); p_gpio_pinmode = (CPU_REG32 *)(BSP_GPIO_REG_PINMODE_BASE_ADDR + 0x08); p_gpio_pinmode_od = (CPU_REG32 *)(BSP_GPIO_REG_PINMODE_OD1_BASE_ADDR); break; case BSP_GPIO_PORT2_FAST: p_gpio_fast_reg = (BSP_GPIO_FAST_REG *)(BSP_GPIO_REG_PORT2_FAST_BASE_ADDR); p_gpio_pinsel = (CPU_REG32 *)(BSP_GPIO_REG_PINSEL_BASE_ADDR + 0x10); p_gpio_pinmode = (CPU_REG32 *)(BSP_GPIO_REG_PINMODE_BASE_ADDR + 0x10); p_gpio_pinmode_od = (CPU_REG32 *)(BSP_GPIO_REG_PINMODE_OD2_BASE_ADDR); break; case BSP_GPIO_PORT3_FAST: p_gpio_fast_reg = (BSP_GPIO_FAST_REG *)(BSP_GPIO_REG_PORT3_FAST_BASE_ADDR); p_gpio_pinsel = (CPU_REG32 *)(BSP_GPIO_REG_PINSEL_BASE_ADDR + 0x18); p_gpio_pinmode = (CPU_REG32 *)(BSP_GPIO_REG_PINMODE_BASE_ADDR + 0x18); p_gpio_pinmode_od = (CPU_REG32 *)(BSP_GPIO_REG_PINMODE_OD3_BASE_ADDR); break; case BSP_GPIO_PORT4_FAST: p_gpio_fast_reg = (BSP_GPIO_FAST_REG *)(BSP_GPIO_REG_PORT4_FAST_BASE_ADDR); p_gpio_pinsel = (CPU_REG32 *)(BSP_GPIO_REG_PINSEL_BASE_ADDR + 0x20); p_gpio_pinmode = (CPU_REG32 *)(BSP_GPIO_REG_PINMODE_BASE_ADDR + 0x20); p_gpio_pinmode_od = (CPU_REG32 *)(BSP_GPIO_REG_PINMODE_OD4_BASE_ADDR); break; case BSP_GPIO_PORT0: case BSP_GPIO_PORT1: default: return; } /* ------------ I/O DIRECTION CONFIGURATION ----------- */ if (DEF_BIT_IS_SET(gpio_opt, BSP_GPIO_OPT_OUT_EN)) { DEF_BIT_SET(p_gpio_fast_reg->FIODIR, gpio_pins); } if (DEF_BIT_IS_SET(gpio_opt, BSP_GPIO_OPT_IN_EN)) { DEF_BIT_CLR(p_gpio_fast_reg->FIODIR, gpio_pins); } if (DEF_BIT_IS_SET(gpio_opt, BSP_GPIO_OPT_RD_WR_EN)) { DEF_BIT_CLR(p_gpio_fast_reg->FIOMASK, gpio_pins); } if (DEF_BIT_IS_SET(gpio_opt, BSP_GPIO_OPT_RD_WR_DIS)) { DEF_BIT_SET(p_gpio_fast_reg->FIOMASK, gpio_pins); } /* ---- I/O MODE/PERIPHERAL FUNCTION CONFIGURATION ---- */ pinsel_opt = BSP_GPIO_OPT_FNCT_INVALID; pinmode_opt = BSP_GPIO_OPT_MODE_INVALID; /* Set PINSELxx based on BSP_GPIO_OPT_FNCT_xxx */ if (DEF_BIT_IS_SET_ANY(gpio_opt, BSP_GPIO_OPT_FNCT_ANY)) { if (DEF_BIT_IS_SET(gpio_opt, BSP_GPIO_OPT_FNCT_1)) { pinsel_opt = 0x00; } else if (DEF_BIT_IS_SET(gpio_opt, BSP_GPIO_OPT_FNCT_2)) { pinsel_opt = 0x01; } else if (DEF_BIT_IS_SET(gpio_opt, BSP_GPIO_OPT_FNCT_3)) { pinsel_opt = 0x02; } else if (DEF_BIT_IS_SET(gpio_opt, BSP_GPIO_OPT_FNCT_4)) { pinsel_opt = 0x03; } else { return; } } /* Set PMODExx based on BSP_GPIO_OPT_MDOE_xxx */ if (DEF_BIT_IS_SET_ANY(gpio_opt, BSP_GPIO_OPT_MODE_ANY)) { if (DEF_BIT_IS_SET(gpio_opt, BSP_GPIO_OPT_MODE_PULLUP)) { pinmode_opt = 0x00; } else if (DEF_BIT_IS_SET(gpio_opt, BSP_GPIO_OPT_MODE_REPEATER)) { pinmode_opt = 0x01; } else if (DEF_BIT_IS_SET(gpio_opt, BSP_GPIO_OPT_MODE_NONE)) { pinmode_opt = 0x02; } else if (DEF_BIT_IS_SET(gpio_opt, BSP_GPIO_OPT_MODE_PULLDOWN)) { pinmode_opt = 0x03; } } if ((pinsel_opt != BSP_GPIO_OPT_FNCT_INVALID) || (pinmode_opt != BSP_GPIO_OPT_MODE_INVALID)) { for (pin_nbr = 0; pin_nbr < 32; pin_nbr++) { if (DEF_BIT_IS_SET(gpio_pins, DEF_BIT(pin_nbr))) { if (pinsel_opt != BSP_GPIO_OPT_FNCT_INVALID) { if (pin_nbr < 16) { DEF_BIT_CLR(*p_gpio_pinsel, DEF_BIT_FIELD(2, pin_nbr * 2)); DEF_BIT_SET(*p_gpio_pinsel, DEF_BIT_MASK(pinsel_opt, pin_nbr * 2)); } else { DEF_BIT_CLR(*((CPU_REG32 *)((CPU_INT32U)p_gpio_pinsel + 0x04)), DEF_BIT_FIELD(2, (pin_nbr - 16) * 2)); DEF_BIT_SET(*((CPU_REG32 *)((CPU_INT32U)p_gpio_pinsel + 0x04)), DEF_BIT_MASK(pinsel_opt, (pin_nbr - 16) * 2)); } } if (DEF_BIT_IS_SET(gpio_pins, DEF_BIT(pin_nbr))) { if (pinmode_opt != BSP_GPIO_OPT_MODE_INVALID) { if (pin_nbr < 16) { DEF_BIT_CLR(*p_gpio_pinmode, DEF_BIT_FIELD(2, pin_nbr * 2)); DEF_BIT_SET(*p_gpio_pinmode, DEF_BIT_MASK(pinmode_opt, pin_nbr * 2)); } else { DEF_BIT_CLR(*((CPU_REG32 *)((CPU_INT32U)p_gpio_pinmode + 0x04)), DEF_BIT_FIELD(2, (pin_nbr - 16) * 2)); DEF_BIT_SET(*((CPU_REG32 *)((CPU_INT32U)p_gpio_pinmode + 0x04)), DEF_BIT_MASK(pinmode_opt, (pin_nbr - 16) * 2)); } } } } } } if (DEF_BIT_IS_SET(gpio_opt, BSP_GPIO_OPT_MODE_OPEN_DRAIN)) { *p_gpio_pinmode_od = gpio_pins; } }