borgware-2d/src/joystick/lolshield_joystick.c

91 lines
2.8 KiB
C

/**
* @file lolshield_joystick.c
* @brief Driver for Jimmie Rodgers' LoL Shield
* @author Christian Kroll
* @date 2014
* @copyright GNU Public License 2 or later
* @see http://jimmieprodgers.com/kits/lolshield/
*
* This driver prepares the A0-A5 pins of an Ardunino device to serve as
* joystick input lines.
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation; either version 2 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program; if not, write to the Free Software
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA
*/
#include <avr/io.h>
void joy_init(){
#if defined (__AVR_ATmega8__) || \
defined (__AVR_ATmega48__) || \
defined (__AVR_ATmega48P__) || \
defined (__AVR_ATmega88__) || \
defined (__AVR_ATmega88P__) || \
defined (__AVR_ATmega168__) || \
defined (__AVR_ATmega168P__) || \
defined (__AVR_ATmega328__) || \
defined (__AVR_ATmega328P__)
/*
* A0 => PC0 => JOYISUP
* A1 => PC1 => JOYISDOWN
* A2 => PC2 => JOYISLEFT
* A3 => PC3 => JOYISRIGHT
* A4 => PC4 => NC (JOYIS2GND)
* A5 => PC5 => JOYISFIRE
*/
// set joystick pins to input
DDRC &= ~(_BV(PINC0) | _BV(PINC1) | _BV(PINC2) |
_BV(PINC3) | _BV(PINC4) | _BV(PINC5));
// activate pullups
PORTC |= _BV(PINC0) | _BV(PINC1) | _BV(PINC2) |
_BV(PINC3) | _BV(PINC4) | _BV(PINC5);
#elif defined (__AVR_ATmega32U4__)
/*
* A0 => PF7 => JOYISUP
* A1 => PF6 => JOYISDOWN
* A2 => PF5 => JOYISLEFT
* A3 => PF4 => JOYISRIGHT
* A4 => PF1 => NC (JOYIS2GND)
* A5 => PF0 => JOYISFIRE
*/
// set joystick pins to input
DDRF &= ~(_BV(PINF7) | _BV(PINF6) | _BV(PINF5) |
_BV(PINF4) | _BV(PINF1) | _BV(PINF0));
// activate pullups
PORTF |= _BV(PINF7) | _BV(PINF6) | _BV(PINF5) | _BV(PINF4) |
_BV(PINF1) | _BV(PINF0);
#elif defined (__AVR_ATmega1280__) || \
defined (__AVR_ATmega2560__)
/*
* A0 => PF0 => JOYISUP
* A1 => PF1 => JOYISDOWN
* A2 => PF2 => JOYISLEFT
* A3 => PF3 => JOYISRIGHT
* A4 => PF4 => NC (JOYIS2GND)
* A5 => PF5 => JOYISFIRE
*/
// set joystick pins to input
DDRF &= ~(_BV(PINF0) | _BV(PINF1) | _BV(PINF2) |
_BV(PINF3) | _BV(PINF4) | _BV(PINF5));
// activate pullups
PORTF |= _BV(PINF0) | _BV(PINF1) | _BV(PINF2) |
_BV(PINF3) | _BV(PINF4) | _BV(PINF5);
#else
# error "Unsupported Arduino board!"
#endif
}