/*conf_data = 0~3*/ void GPIO_ModeSetup(kal_uint16 pin, kal_uint16 conf_dada) { kal_uint16 modeno; kal_uint16 remainder; kal_uint32 savedMask; modeno = pin/8; remainder = pin % 8; savedMask = SAVEANDSETIRQMASK(); *(GPIO_MODE(modeno)) &= ~(0x0003 << (remainder*2)); *(GPIO_MODE(modeno)) |= (conf_dada << (remainder*2)); RESTOREIRQMASK(savedMask); }
/*conf_data = 0~3*/ void GPIO_ModeSetup(kal_uint16 pin, kal_uint16 conf_dada) { kal_uint16 modeno; kal_uint16 remainder; kal_uint16 data; modeno = pin/8; remainder = pin % 8; data=DRV_Reg(GPIO_MODE(modeno)); data&=~(0x3 << (2*remainder)); data|= (conf_dada << (remainder*2)); DRV_WriteReg(GPIO_MODE(modeno),data); }
/** @brief Set GPIO Pin Mode Sets the Pin Direction and Analog/Digital Mode, and Output Pin Pullup, for a set of GPIO pins on a given GPIO port. @param[in] gpioport Unsigned int32. Port identifier @ref gpio_port_id @param[in] mode Unsigned int8. Pin mode @ref gpio_mode @param[in] pull_up_down Unsigned int8. Pin pullup/pulldown configuration @ref gpio_pup @param[in] gpios Unsigned int16. Pin identifiers @ref gpio_pin_id If multiple pins are to be set, use bitwise OR '|' to separate them. */ void gpio_mode_setup(uint32_t gpioport, uint8_t mode, uint8_t pull_up_down, uint16_t gpios) { uint16_t i; uint32_t moder, pupd; /* * We want to set the config only for the pins mentioned in gpios, * but keeping the others, so read out the actual config first. */ moder = GPIO_MODER(gpioport); pupd = GPIO_PUPDR(gpioport); for (i = 0; i < 16; i++) { if (!((1 << i) & gpios)) { continue; } moder &= ~GPIO_MODE_MASK(i); moder |= GPIO_MODE(i, mode); pupd &= ~GPIO_PUPD_MASK(i); pupd |= GPIO_PUPD(i, pull_up_down); } /* Set mode and pull up/down control registers. */ GPIO_MODER(gpioport) = moder; GPIO_PUPDR(gpioport) = pupd; }
/*conf_data = 0~3*/ void GPIO_ModeSetup(kal_uint16 pin, kal_uint16 conf_dada) { kal_uint16 modeno; kal_uint16 remainder; kal_uint16 data; kal_uint32 savedMask; modeno = pin/8; remainder = pin % 8; savedMask = SAVEANDSETIRQMASK(); data=DRV_Reg(GPIO_MODE(modeno)); data&=~(0x3 << (2*remainder)); data|= (conf_dada << (remainder*2)); DRV_WriteReg(GPIO_MODE(modeno),data); RESTOREIRQMASK(savedMask); }
kal_uint16 remainder; kal_uint16 data; kal_uint32 savedMask; #ifdef __CUST_NEW__ pin &= (~GPIO_MAGIC_NUM); if (gpio_debug_enable == KAL_TRUE) { ASSERT((gpio_mode_allowed[pin>>5][conf_dada & 3]) & (1<<(pin & 0x1f))); } #endif /* __CUST_NEW__ */ modeno = pin/8; remainder = pin % 8; savedMask = SAVEANDSETIRQMASK(); data=DRV_Reg(GPIO_MODE(modeno)); data&=~(0x3 << (2*remainder)); data|= (conf_dada << (remainder*2)); DRV_WriteReg(GPIO_MODE(modeno),data); RESTOREIRQMASK(savedMask); //DRV_WriteReg(GPIO_MODE_CLR(modeno),(0x0003 << (remainder*2))); //DRV_WriteReg(GPIO_MODE_SET(modeno),(conf_dada << (remainder*2))); } /*conf_data = 0~3*/ void GPO_ModeSetup(kal_uint16 pin, kal_uint16 conf_dada) { kal_uint16 mode; kal_uint32 savedMask;