The processor being used is the Atmel AT91SAM7S256.
I opted for the Atmel AT91SAM7S series for several reasons:
- Minimal interface requirements
- Ability to interface to I2S devices
- Fair amount of memory
I did look at the NXP LPC214x series as well, however I didn't use them because:
- Several pins needed to be pulled high (there was no run of 8-I/O pins that didn't need this treatment)
- OpenOCD support didn't appear to be available for all the series (LPC2148 had support, but 2144 [which I used as a test device] needed to be hand-generated - I was in a rush!).
That isn't to mean to say that the AT91SAM7S doesn't have its faults:
- I/O pins are fairly randomly placed (this is also true of the LPC214x).
- Fewer I/O pins than the LPC (which doesn't bother me a great deal for what I'm doing here)
- Two voltages (VDDIO and VDDCORE - 3.3V and 1.85V respectively) - this makes it more ... interesting to route
I am using a Bolymin BL160128A OLED display, 160x128 pixels in size. The reasons for this are:
- 18-bit colour
- On-board driver
- Built-in voltage conversion
- Bright display
- Nice aspect ratio
Joystick and keys
The joystick is an ALPS RKJXK122400Y joystick. Using the AT91SAM7S' built-in ADC, it gives me values in the range of 0x080 to 0x370 - which is a nice and wide value (the ADC will range from 0x000 to 0x3ff).
The keys are MULTIMEC 3FTL6 switches
The audio DAC is a Wolfson Microelectronics WM8727 24-bit, 192kHz DAC (although it is only being used in a 16-bit mode, and at a lower frequency).
There is also a headphone amplifier, a Texas Instruments TPA122D.
In order to convert the USB 5V (or battery 6V) to 3.3V, a Texas Instruments TPS76733 is used. This also provides the reset signal.