Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- /*
- * Copyright 2011-2012 Haiku, Inc. All rights reserved.
- * Distributed under the terms of the MIT License.
- *
- * Authors:
- * Alexander von Gluck, kallisti5@unixzen.com
- */
- #include "gpio.h"
- #if 0
- #define GPIO_IN(g) *(GPIO_BASE + ((g) / 10)) &= ~(7 << (((g) % 10) * 3))
- #define GPIO_OUT(g) *(GPIO_BASE + ((g) / 10)) |= (1 << (((g) % 10) * 3))
- #define GPIO_SET(g) *(GPIO_BASE + 7) = (1 << g)
- #define GPIO_CLR(g) *(GPIO_BASE + 10) = (1 << g)
- #define GPIO_ALT(g, a) *(GPIO_BASE + (((g) / 10))) \
- |= (((a) <= 3 ? (a) + 4 : (a) == 4 ? 3 : 2) << (((g)%10) * 3))
- #endif
- /*!
- * At GPIO (base) (pin) directon to input
- */
- void
- gpio_in(addr_t base, int pin)
- {
- *(volatile unsigned char *)(base + (pin / 10))
- &= ~(7 << ((pin % 10) * 3));
- }
- /*!
- * At GPIO (base) (pin) directon to output
- */
- void
- gpio_out(addr_t base, int pin)
- {
- *(volatile unsigned char *)(base + (pin / 10))
- |= (1 << ((pin % 10) * 3));
- }
- /*!
- * At GPIO (base) (pin) state set (high)
- */
- void
- gpio_set(addr_t base, int pin)
- {
- *(volatile unsigned char *)(base + 7) = (1 << pin);
- }
- /*!
- * At GPIO (base) (pin) state clear (low)
- */
- void
- gpio_clear(addr_t base, int pin)
- {
- *(volatile unsigned char *)(base + 10) = (1 << pin);
- }
- /*!
- * At GPIO (base) (pin) alternate function (value)
- */
- void
- gpio_alt(addr_t base, int pin, int value)
- {
- *(volatile unsigned char *)(base + (pin / 10))
- |= ((value <= 3 ? value + 4 : value == 4 ? 3 : 2) << ((pin % 10) * 3));
- }
- void
- gpio_init()
- {
- // ** Take control of ok uart, led, and general use pins
- int pin = 0;
- for (pin = 14; pin <= 25; pin++) {
- gpio_in(GPIO_BASE, pin);
- gpio_out(GPIO_BASE, pin);
- }
- // ** Prepare UART pins for serial communication
- // Set alternate function 0 on UART pins
- gpio_alt(GPIO_BASE, 14, 4);
- gpio_alt(GPIO_BASE, 15, 4);
- // Pull UART pins to initial state low
- gpio_clear(GPIO_BASE, 14);
- gpio_clear(GPIO_BASE, 15);
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement