示例#1
0
static void recovery_buttons_hw_init(void)
{
	/* Configure recovery button PINs */
	/* {"RECOVERY_BUTTON", AT91C_PIN_PA(31), 0, PIO_PULLUP, PIO_INPUT} */
	writel((0x01 << 31), AT91C_BASE_PIOA + PIO_IDR(0));
	writel((0x01 << 31), AT91C_BASE_PIOA + PIO_PPUER(0));
	writel((0x01 << 31), AT91C_BASE_PIOA + PIO_ODR(0));
	writel((0x01 << 31), AT91C_BASE_PIOA + PIO_PER(0));

	writel((1 << AT91C_ID_PIOA), PMC_PCER + AT91C_BASE_PMC);
}
示例#2
0
/** @brief Initialize GPIO pins
 *
 * @param[in] port uint32_t: GPIO Port base address
 * @param[in] pin uint32_t
 * @param[in] flags enum gpio_flags
 */
void gpio_init(uint32_t port, uint32_t pins, enum gpio_flags flags)
{
	switch (flags & 0x7) {
	case GPIO_FLAG_GPINPUT:
		PIO_ODR(port) = pins;
		PIO_PER(port) = pins;
		break;
	case GPIO_FLAG_GPOUTPUT:
		PIO_OER(port) = pins;
		PIO_PER(port) = pins;
		break;
	case GPIO_FLAG_PERIPHA:
		PIO_ABCDSR1(port) &= ~pins;
		PIO_ABCDSR2(port) &= ~pins;
		PIO_PDR(port) = pins;
		break;
	case GPIO_FLAG_PERIPHB:
		PIO_ABCDSR1(port) |= pins;
		PIO_ABCDSR2(port) &= ~pins;
		PIO_PDR(port) = pins;
		break;
	case GPIO_FLAG_PERIPHC:
		PIO_ABCDSR1(port) &= ~pins;
		PIO_ABCDSR2(port) |= pins;
		PIO_PDR(port) = pins;
		break;
	case GPIO_FLAG_PERIPHD:
		PIO_ABCDSR1(port) |= pins;
		PIO_ABCDSR2(port) |= pins;
		PIO_PDR(port) = pins;
		break;
	}

	if (flags & GPIO_FLAG_OPEN_DRAIN) {
		PIO_MDER(port) = pins;
	} else {
		PIO_MDDR(port) = pins;
	}

	if (flags & GPIO_FLAG_PULL_UP) {
		PIO_PUER(port) = pins;
	} else {
		PIO_PUDR(port) = pins;
	}
}