mirror of
https://github.com/raphnet/4nes4snes
synced 2024-12-21 22:48:51 -05:00
1.4.1 Code cleanup
This commit is contained in:
parent
e4e9555583
commit
4caa7ea958
@ -1,3 +1,10 @@
|
|||||||
|
--- v1.4.1 (April 26, 2013)
|
||||||
|
- Reduced declared max current from 120mA to 100mA. This makes
|
||||||
|
it possible to connect the adapter to my keyboard USB port but
|
||||||
|
is still a conservative estimate for the worst combination
|
||||||
|
of hypothetical non-standard power hungry controllers.
|
||||||
|
- Some code cleanups
|
||||||
|
|
||||||
--- v1.4 (April 20, 2013)
|
--- v1.4 (April 20, 2013)
|
||||||
- Support for Atmega168. Use Makefile.atmega168.
|
- Support for Atmega168. Use Makefile.atmega168.
|
||||||
- New USB VID/PID
|
- New USB VID/PID
|
||||||
|
@ -46,19 +46,33 @@ $(HEXFILE): $(ELFFILE)
|
|||||||
flash: $(HEXFILE)
|
flash: $(HEXFILE)
|
||||||
$(AVRDUDE) -Uflash:w:$(HEXFILE) -B 1.0
|
$(AVRDUDE) -Uflash:w:$(HEXFILE) -B 1.0
|
||||||
|
|
||||||
|
# Extended fuse byte (Datasheet Table 28-5)
|
||||||
|
#
|
||||||
# - - - - - BOOTSZ1 BOOTSZ0 BOOTRST
|
# - - - - - BOOTSZ1 BOOTSZ0 BOOTRST
|
||||||
# 0 0 0 0 0 0 0 1
|
# 0 0 0 0 0 0 0 1
|
||||||
|
#
|
||||||
EFUSE=0x01
|
EFUSE=0x01
|
||||||
|
|
||||||
|
# Fuse high byte (Datasheet Table 28-6)
|
||||||
|
#
|
||||||
# RSTDISBL DWEN SPIEN WDTON EESAVE BODLEVEL2 BODLEVEL1 BODLEVEL0
|
# RSTDISBL DWEN SPIEN WDTON EESAVE BODLEVEL2 BODLEVEL1 BODLEVEL0
|
||||||
# 1 1 0 1 1 1 1 1
|
# 1 1 0 1 0 1 0 1
|
||||||
|
#
|
||||||
HFUSE=0xd5
|
HFUSE=0xd5
|
||||||
|
|
||||||
|
# Fuse low byte (Datasheet Table 28-7)
|
||||||
#
|
#
|
||||||
# CKDIV8 CKOUT SUT1 SUT0 CKSEL3 CKSEL2 CKSEL1 CKSEL0
|
# CKDIV8 CKOUT SUT1 SUT0 CKSEL3 CKSEL2 CKSEL1 CKSEL0
|
||||||
# 1 1 0 1 0 1 1 1
|
# 1 1 0 1 0 1 1 1
|
||||||
#
|
#
|
||||||
# Full swing crystal oscillator, BOD enabled
|
# Full swing crystal oscillator
|
||||||
LFUSE=0xDF
|
# 0.4 - 20 MHz : CKSEL3..1 011
|
||||||
|
#
|
||||||
|
# Crystal Oscillator, BOD enabled (Table 9-6)
|
||||||
|
# CKSEL0 : 1
|
||||||
|
# SUT1..0 : 01
|
||||||
|
#
|
||||||
|
LFUSE=0xD7
|
||||||
|
|
||||||
fuse:
|
fuse:
|
||||||
$(AVRDUDE) -e -Uefuse:w:$(EFUSE):m -Uhfuse:w:$(HFUSE):m -Ulfuse:w:$(LFUSE):m -B 20.0 -v
|
$(AVRDUDE) -e -Uefuse:w:$(EFUSE):m -Uhfuse:w:$(HFUSE):m -Ulfuse:w:$(LFUSE):m -B 20.0 -v
|
||||||
|
@ -13,7 +13,6 @@
|
|||||||
#include <avr/pgmspace.h>
|
#include <avr/pgmspace.h>
|
||||||
#include <string.h>
|
#include <string.h>
|
||||||
#include "gamepad.h"
|
#include "gamepad.h"
|
||||||
#include "leds.h"
|
|
||||||
#include "fournsnes.h"
|
#include "fournsnes.h"
|
||||||
|
|
||||||
#define GAMEPAD_BYTES 8 /* 2 byte per snes controller * 4 controllers */
|
#define GAMEPAD_BYTES 8 /* 2 byte per snes controller * 4 controllers */
|
||||||
|
18
leds.h
18
leds.h
@ -1,18 +0,0 @@
|
|||||||
#ifndef _leds_h__
|
|
||||||
#define _leds_h__
|
|
||||||
|
|
||||||
#ifndef PORTD
|
|
||||||
#include <avr/io.h>
|
|
||||||
#endif
|
|
||||||
|
|
||||||
|
|
||||||
#define LED_OFF()
|
|
||||||
#define LED_ON();
|
|
||||||
#define LED_TOGGLE();
|
|
||||||
|
|
||||||
//#define LED_OFF() do { PORTD |= 0x20; } while(0)
|
|
||||||
//#define LED_ON() do { PORTD &= ~0x20; } while(0)
|
|
||||||
//#define LED_TOGGLE() do { PORTD ^= 0x20; } while(0)
|
|
||||||
|
|
||||||
#endif
|
|
||||||
|
|
65
main.c
65
main.c
@ -18,7 +18,6 @@
|
|||||||
|
|
||||||
#include "fournsnes.h"
|
#include "fournsnes.h"
|
||||||
|
|
||||||
#include "leds.h"
|
|
||||||
#include "devdesc.h"
|
#include "devdesc.h"
|
||||||
|
|
||||||
static uchar *rt_usbHidReportDescriptor=NULL;
|
static uchar *rt_usbHidReportDescriptor=NULL;
|
||||||
@ -101,32 +100,40 @@ static Gamepad *curGamepad;
|
|||||||
|
|
||||||
static void hardwareInit(void)
|
static void hardwareInit(void)
|
||||||
{
|
{
|
||||||
uchar i, j;
|
|
||||||
|
/* PORTB
|
||||||
|
*
|
||||||
|
* Bit Description Direction Level/pu
|
||||||
|
* 0 Jumpers common Out 0
|
||||||
|
* 1 JP1 In 1
|
||||||
|
* 2 JP2 In 1
|
||||||
|
* 3 MOSI In 1
|
||||||
|
* 4 MISO In 1
|
||||||
|
* 5 SCK In 1
|
||||||
|
* 6 -
|
||||||
|
* 7 -
|
||||||
|
*/
|
||||||
|
DDRB = 0x01;
|
||||||
|
PORTB = 0xFE;
|
||||||
|
|
||||||
// init port C as input with pullup
|
// init port C as input with pullup
|
||||||
DDRC = 0x00;
|
DDRC = 0x00;
|
||||||
PORTC = 0xff;
|
PORTC = 0xff;
|
||||||
|
|
||||||
/* 1101 1000 bin: activate pull-ups except on USB lines
|
/*
|
||||||
|
* For port D, activate pull-ups on all lines except the D+, D- and bit 1.
|
||||||
*
|
*
|
||||||
* USB signals are on bit 0 and 2.
|
* For historical reasons (a mistake on an old PCB), bit 1
|
||||||
|
* is now always connected with bit 0. So bit 1 configured
|
||||||
|
* as an input without pullup.
|
||||||
*
|
*
|
||||||
* Bit 1 is connected with bit 0 (rev.C pcb error), so the pullup
|
* Usb pin are init as output, low. (device reset). They are released
|
||||||
* is not enabled.
|
* later when usbReset() is called.
|
||||||
* */
|
*/
|
||||||
PORTD = 0xf8;
|
PORTD = 0xf8;
|
||||||
|
|
||||||
/* Usb pin are init as outputs */
|
|
||||||
DDRD = 0x01 | 0x04;
|
DDRD = 0x01 | 0x04;
|
||||||
|
|
||||||
|
/* Configure timers */
|
||||||
j = 0;
|
|
||||||
while(--j){ /* USB Reset by device only required on Watchdog Reset */
|
|
||||||
i = 0;
|
|
||||||
while(--i); /* delay >10ms for USB reset */
|
|
||||||
}
|
|
||||||
DDRD = 0x00; /* 0000 0000 bin: remove USB reset condition */
|
|
||||||
|
|
||||||
#if defined(AT168_COMPATIBLE)
|
#if defined(AT168_COMPATIBLE)
|
||||||
TCCR2A= (1<<WGM21);
|
TCCR2A= (1<<WGM21);
|
||||||
TCCR2B=(1<<CS22)|(1<<CS21)|(1<<CS20);
|
TCCR2B=(1<<CS22)|(1<<CS21)|(1<<CS20);
|
||||||
@ -137,6 +144,19 @@ static void hardwareInit(void)
|
|||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static void usbReset(void)
|
||||||
|
{
|
||||||
|
/* [...] a single ended zero or SE0 can be used to signify a device
|
||||||
|
reset if held for more than 10mS. A SE0 is generated by holding
|
||||||
|
both th D- and D+ low (< 0.3V).
|
||||||
|
*/
|
||||||
|
|
||||||
|
PORTD &= ~(0x01 | 0x04); // Set D+ and D- to 0
|
||||||
|
DDRD |= 0x01 | 0x04;
|
||||||
|
_delay_ms(15);
|
||||||
|
DDRD &= ~(0x01 | 0x04);
|
||||||
|
}
|
||||||
|
|
||||||
#if defined(AT168_COMPATIBLE)
|
#if defined(AT168_COMPATIBLE)
|
||||||
|
|
||||||
#define mustPollControllers() (TIFR2 & (1<<OCF2A))
|
#define mustPollControllers() (TIFR2 & (1<<OCF2A))
|
||||||
@ -213,17 +233,11 @@ uchar usbFunctionSetup(uchar data[8])
|
|||||||
int main(void)
|
int main(void)
|
||||||
{
|
{
|
||||||
char must_report = 0; /* bitfield */
|
char must_report = 0; /* bitfield */
|
||||||
uchar idleCounters[MAX_REPORTS];
|
|
||||||
int i;
|
int i;
|
||||||
unsigned char run_mode;
|
unsigned char run_mode;
|
||||||
|
|
||||||
memset(idleCounters, 0, MAX_REPORTS);
|
|
||||||
|
|
||||||
|
hardwareInit();
|
||||||
DDRB |= 0x01;
|
|
||||||
DDRB &= ~0x06;
|
|
||||||
PORTB |= 0x06; /* enable pull up on DB1 and DB2 */
|
|
||||||
PORTB &= ~0x01; /* Set DB0 to low */
|
|
||||||
|
|
||||||
_delay_ms(10); /* let pins settle */
|
_delay_ms(10); /* let pins settle */
|
||||||
run_mode = (PINB & 0x06)>>1;
|
run_mode = (PINB & 0x06)>>1;
|
||||||
@ -264,8 +278,7 @@ int main(void)
|
|||||||
// patch the config descriptor with the HID report descriptor size
|
// patch the config descriptor with the HID report descriptor size
|
||||||
my_usbDescriptorConfiguration[25] = rt_usbHidReportDescriptorSize;
|
my_usbDescriptorConfiguration[25] = rt_usbHidReportDescriptorSize;
|
||||||
|
|
||||||
//wdt_enable(WDTO_2S);
|
usbReset();
|
||||||
hardwareInit();
|
|
||||||
curGamepad->init();
|
curGamepad->init();
|
||||||
usbInit();
|
usbInit();
|
||||||
|
|
||||||
|
@ -5,7 +5,7 @@
|
|||||||
* Tabsize: 4
|
* Tabsize: 4
|
||||||
* Copyright: (c) 2005 by OBJECTIVE DEVELOPMENT Software GmbH
|
* Copyright: (c) 2005 by OBJECTIVE DEVELOPMENT Software GmbH
|
||||||
* License: GNU GPL v2 (see License.txt) or proprietary (CommercialLicense.txt)
|
* License: GNU GPL v2 (see License.txt) or proprietary (CommercialLicense.txt)
|
||||||
* This Revision: $Id: usbconfig.h,v 1.9 2013-04-20 17:24:53 cvs Exp $
|
* This Revision: $Id: usbconfig.h,v 1.10 2013-04-26 12:23:38 cvs Exp $
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#ifndef __usbconfig_h_included__
|
#ifndef __usbconfig_h_included__
|
||||||
@ -89,7 +89,7 @@ rename it to "usbconfig.h". Then edit it accordingly.
|
|||||||
/* Define this to 1 if the device has its own power supply. Set it to 0 if the
|
/* Define this to 1 if the device has its own power supply. Set it to 0 if the
|
||||||
* device is powered from the USB bus.
|
* device is powered from the USB bus.
|
||||||
*/
|
*/
|
||||||
#define USB_CFG_MAX_BUS_POWER 120
|
#define USB_CFG_MAX_BUS_POWER 100
|
||||||
/* Set this variable to the maximum USB bus power consumption of your device.
|
/* Set this variable to the maximum USB bus power consumption of your device.
|
||||||
* The value is in milliamperes. [It will be divided by two since USB
|
* The value is in milliamperes. [It will be divided by two since USB
|
||||||
* communicates power requirements in units of 2 mA.]
|
* communicates power requirements in units of 2 mA.]
|
||||||
|
Loading…
Reference in New Issue
Block a user