CPU_INT32U CSP_DMA_XferSizeMaxGetExt (CSP_DEV_NBR ch_nbr) { (void)ch_nbr; return (DEF_BIT_FIELD(12u, 0u)); }
void CSP_TmrInit (void) { CSP_DEV_NBR per_nbr; CSP_DEV_NBR tmr_nbr; CSP_TMR_REG *p_tmr_reg; CPU_SR_ALLOC(); for (tmr_nbr = CSP_TMR_NBR_00; tmr_nbr <= CSP_TMR_NBR_03; tmr_nbr++) { p_tmr_reg = (CSP_TMR_REG *)CSP_TmrAddrTbl[tmr_nbr]; per_nbr = (CSP_DEV_NBR )CSP_TmrPerTbl[tmr_nbr]; CPU_CRITICAL_ENTER(); CSP_PM_PerClkEn(per_nbr); p_tmr_reg->MCR = DEF_BIT_NONE; p_tmr_reg->MRx[0] = 0u; p_tmr_reg->MRx[1] = 0u; p_tmr_reg->MRx[2] = 0u; p_tmr_reg->IR = DEF_BIT_FIELD(5u, 0u); p_tmr_reg->TCR = DEF_BIT_NONE; p_tmr_reg->MCR = DEF_BIT_NONE; p_tmr_reg->EMR = DEF_BIT_NONE; CSP_PM_PerClkDis(per_nbr); CPU_CRITICAL_EXIT(); } }
void CSP_IntDisAll (CSP_DEV_NBR int_ctrl) { CSP_DEV_NBR int_src; CSP_DEV_NBR int_src_grp; if (int_ctrl == CSP_INT_CTRL_NBR_MAIN) { int_src = 0u; int_src_grp = 0u; while (int_src < CSP_INT_SRC_NBR_MAX) { CPU_REG_NVIC_CLREN(int_src_grp) = DEF_BIT_FIELD(32u, 0u); int_src_grp++; int_src += 32u; } } }
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; }
static void CSP_DMA_IntHandler (void *p_arg) { CSP_DMA_REG *p_dma_reg; CSP_DMA_CH_REG *p_dma_ch_reg; CSP_DMA_CH *p_dma_ch; void *p_callback_arg; CSP_DMA_CALLBACK_PTR callback_fnct; CSP_DEV_NBR ch_nbr; CPU_INT32U int_tc_stat; CPU_INT32U int_err_stat; CPU_BOOLEAN status; CPU_INT16U xfer_size_rem; p_dma_reg = (CSP_DMA_REG *)CSP_ADDR_DMA_REG; int_tc_stat = p_dma_reg->IntTCStat & DEF_BIT_FIELD(8u, 0u); int_err_stat = p_dma_reg->IntErrStat & DEF_BIT_FIELD(8u, 0u); /* --------- INTERRUPT TERMINAL COUNT HANDLING -------- */ while (int_tc_stat != DEF_BIT_NONE) { /* Get current DMA channel number */ ch_nbr = 31u - CPU_CntLeadZeros(int_tc_stat); p_dma_ch_reg = &(p_dma_reg->CHx[ch_nbr]); p_dma_ch = &(CSP_DMA_ChTbl[ch_nbr]); callback_fnct = p_dma_ch->CallBackFnctPtr; /* Get the callback function */ p_callback_arg = p_dma_ch->CallBackArgPtr; /* Get the callback argument pointer. */ /* Get the remaining transfer size. */ xfer_size_rem = p_dma_ch_reg->Ctrl & DEF_BIT_FIELD(12u, 0u); p_dma_reg->IntTCClr = DEF_BIT(ch_nbr); /* Clear the terminal count interrupt. */ if (DEF_BIT_IS_SET(int_err_stat, DEF_BIT(ch_nbr))) { /* If an error occured in the channel... */ status = DEF_FAIL; /* ... set the status, and clear the error interrupt. */ p_dma_reg->IntErrClr = DEF_BIT(ch_nbr); } else { status = DEF_OK; } callback_fnct(ch_nbr, /* Call the callback function. */ xfer_size_rem, p_callback_arg, status); /* Read the terminal count and error interrupts status */ int_tc_stat = p_dma_reg->IntTCStat & DEF_BIT_FIELD(8u, 0u); int_err_stat = p_dma_reg->IntErrStat & DEF_BIT_FIELD(8u, 0u); } /* --------------- ERROR INTERRUPT HANDLING ------------ */ int_err_stat = p_dma_reg->IntErrStat & DEF_BIT_FIELD(8u, 0u); while (int_err_stat != DEF_BIT_NONE) { ch_nbr = 31u - CPU_CntLeadZeros(int_err_stat); p_dma_ch_reg = &(p_dma_reg->CHx[ch_nbr]); p_dma_ch = &(CSP_DMA_ChTbl[ch_nbr]); callback_fnct = p_dma_ch->CallBackFnctPtr; p_callback_arg = p_dma_ch->CallBackArgPtr; p_dma_ch->State = CSP_DMA_CH_STATE_ALLOC; /* Set the channel state = 'ALLOC' */ xfer_size_rem = p_dma_ch_reg->Ctrl & DEF_BIT_FIELD(12u, 0u); status = DEF_FAIL; p_dma_reg->IntErrClr = DEF_BIT(ch_nbr); callback_fnct(ch_nbr, xfer_size_rem, p_callback_arg, status); int_err_stat = p_dma_reg->IntErrStat & DEF_BIT_FIELD(8u, 0u); } }
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; } }