working more on controller_init(), and file factoring
parent
37b504adfe
commit
4dd05f515b
|
@ -49,6 +49,9 @@
|
|||
(http://www.cprogramming.com/tutorial/bitwise_operators.html)
|
||||
(on <http://cprogramming.com/>)
|
||||
|
||||
* [AVR Tutorials - \[TUT\] \[C\] Bit manipulation (AKA "Programming 101")]
|
||||
(http://www.avrfreaks.net/index.php?name=PNphpBB2&file=printview&t=37871&start=0)
|
||||
|
||||
* [In C++ is "const" after type ID acceptable?]
|
||||
(http://stackoverflow.com/questions/988069/in-c-is-const-after-type-id-acceptable)
|
||||
(on <http://stackoverflow.com/>)
|
||||
|
@ -63,6 +66,10 @@
|
|||
* [Markdown: Syntax]
|
||||
(http://daringfireball.net/projects/markdown/syntax)
|
||||
|
||||
* [Keyboard Scan Rates]
|
||||
(http://geekhack.org/showwiki.php?title=Keyboard+scan+rates)
|
||||
list (on <http://geekhack.org/>)
|
||||
|
||||
|
||||
## AVR C stuff
|
||||
|
||||
|
|
|
@ -1,6 +1,6 @@
|
|||
/* ----------------------------------------------------------------------------
|
||||
* ergoDOX keyboard specific stuff
|
||||
* - public things are prefixed by `kb_` or `KB_`
|
||||
* ergoDOX layout specific stuff
|
||||
* - public things are prefixed by `layout_` or `LAYOUT_`
|
||||
* ----------------------------------------------------------------------------
|
||||
* Copyright (c) 2012 Ben Blazak
|
||||
* Released under The MIT License (MIT) (see "license.md") at
|
||||
|
@ -33,7 +33,7 @@
|
|||
* ------------------------------------------------------------------------- */
|
||||
|
||||
|
||||
#include "ergodox.h"
|
||||
#include "layout.h"
|
||||
|
||||
|
||||
/* ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
|
@ -1,4 +1,7 @@
|
|||
/* ----------------------------------------------------------------------------
|
||||
* ergoDOX layout specific stuff
|
||||
* - public things are prefixed by `layout_` or `LAYOUT_`
|
||||
* ----------------------------------------------------------------------------
|
||||
* Copyright (c) 2012 Ben Blazak
|
||||
* Released under The MIT License (MIT) (see "license.md") at
|
||||
* <https://github.com/benblazak/ergodox-firmware>
|
||||
|
@ -10,9 +13,5 @@
|
|||
#define KB_COLUMNS 7 // must match real life
|
||||
|
||||
|
||||
void controller_init();
|
||||
|
||||
void kb_init();
|
||||
|
||||
// TODO
|
||||
|
|
@ -16,7 +16,7 @@
|
|||
* Pinouts and Pin assignments
|
||||
* - '+' indicates pin
|
||||
* - 'o' indicates unused pin
|
||||
* - '-'s inserted between some of the pin names for readability
|
||||
* - '-'s inserted between some of the pin functions for readability
|
||||
* - 'OC**' pins enclosed in parenthesis had lines over them in the pinout
|
||||
* ----------------------------------------------------------------------------
|
||||
* ----------------------------------------------------------------------------
|
||||
|
@ -39,16 +39,16 @@
|
|||
* ----------------------------------------------------------------------------
|
||||
* MCP23018
|
||||
* ======== Vss(GND) +01---.---28+ NC
|
||||
* GPNC +02 27+ GPAC
|
||||
* NC +02 27+ GPA7
|
||||
* GPB0 +03 26+ GPA6
|
||||
* GPB1 +04 25+ GPAC
|
||||
* GPB2 +05 24+ GPAC
|
||||
* GPB3 +06 23+ GPAC
|
||||
* GPB4 +07 22+ GPAC
|
||||
* GPB5 +08 21+ GPAC
|
||||
* GPB6 +09 20+ GPAC
|
||||
* GPB7 +10 19+ INTC
|
||||
* Vdd(Vcc) +11 18+ INTC
|
||||
* GPB1 +04 25+ GPA5
|
||||
* GPB2 +05 24+ GPA4
|
||||
* GPB3 +06 23+ GPA3
|
||||
* GPB4 +07 22+ GPA2
|
||||
* GPB5 +08 21+ GPA1
|
||||
* GPB6 +09 20+ GPA0
|
||||
* GPB7 +10 19+ INTA
|
||||
* Vdd(Vcc) +11 18+ INTB
|
||||
* SCL +12 17+ NC
|
||||
* SDA +13 16+ RESET
|
||||
* NC +14-------15+ ADDR
|
||||
|
@ -93,12 +93,12 @@
|
|||
* o14-------15+ ADDR (see note)
|
||||
*
|
||||
* notes:
|
||||
* - ADDR (pin15): Set slave address to 0b0100000 by connecting to Vss(GND)
|
||||
* - note: The user-defined bits are the three least significant
|
||||
* - ADDR (pin15): Set slave address to 0b0100000 by connecting to Vss(GND).
|
||||
* (The user-defined bits are the three least significant).
|
||||
* ------------------------------------------------------------------------- */
|
||||
|
||||
/* ----------------------------------------------------------------------------
|
||||
* Registers
|
||||
* Notes about Registers
|
||||
* ----------------------------------------------------------------------------
|
||||
* General I/O (see datasheet section 10.2.1)
|
||||
*
|
||||
|
@ -134,11 +134,16 @@
|
|||
* the default value of all the bits in those registers is 0)
|
||||
*
|
||||
* abbreviations:
|
||||
* - OC = Output Compare
|
||||
* - OCR = Output Compare Register
|
||||
* - TCCR = Timer/Counter Control Register
|
||||
* ------------------------------------------------------------------------- */
|
||||
|
||||
|
||||
#include "lib/twi.h"
|
||||
|
||||
#include "teensy-2-0--mcp23018.h"
|
||||
|
||||
|
||||
/* ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
||||
* ~~~ macros ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
||||
* ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ */
|
||||
|
@ -155,40 +160,13 @@
|
|||
#define CPU_125kHz 0x07
|
||||
#define CPU_62kHz 0x08
|
||||
|
||||
// pins
|
||||
#define CONTROLLER_LED1_ON (OCR1A = 0xFFFF)
|
||||
#define CONTROLLER_LED1_OFF (OCR1A = 0)
|
||||
#define CONTROLLER_LED1_SET(n) (OCR1A = (n))
|
||||
#define CONTROLLER_LED1_SET_PERCENT(n) (OCR1A = (n) * 0xFFFF)
|
||||
#define CONTROLLER_LED2_ON (OCR1B = 0xFFFF)
|
||||
#define CONTROLLER_LED2_OFF (OCR1B = 0)
|
||||
#define CONTROLLER_LED2_SET(n) (OCR1B = (n))
|
||||
#define CONTROLLER_LED2_SET_PERCENT(n) (OCR1B = (n) * 0xFFFF)
|
||||
#define CONTROLLER_LED3_ON (OCR1C = 0xFFFF)
|
||||
#define CONTROLLER_LED3_OFF (OCR1C = 0)
|
||||
#define CONTROLLER_LED3_SET(n) (OCR1C = (n))
|
||||
#define CONTROLLER_LED3_SET_PERCENT(n) (OCR1C = (n) * 0xFFFF)
|
||||
// TWI frequency
|
||||
#define TWI_FREQ 400000 // (see lib/twi.(h|c))
|
||||
|
||||
// pins
|
||||
// --- rows ?TODO
|
||||
// --- columns ?TODO
|
||||
|
||||
// teensy pins
|
||||
// TODO
|
||||
// I2C SCL PD0
|
||||
// I2C SDA PD1
|
||||
// LED1 OC1A PB5
|
||||
// LED2 OC1B PB6
|
||||
// LED3 OC1C PB7
|
||||
// ROW_0 PF0
|
||||
// ROW_1 PF1
|
||||
// ROW_2 PF4
|
||||
// ROW_3 PF5
|
||||
// ROW_4 PF6
|
||||
// ROW_5 PF7
|
||||
// COLUMN_0_RH PB4
|
||||
// COLUMN_1_RH PC6
|
||||
// COLUMN_2_RH PC7
|
||||
// COLUMN_3_RH PD2
|
||||
// COLUMN_4_RH PD3
|
||||
// COLUMN_5_RH PD7
|
||||
// COLUMN_6_RH PB0
|
||||
|
||||
// mcp23018 pins
|
||||
// TODO
|
||||
|
@ -214,33 +192,41 @@
|
|||
* ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ */
|
||||
|
||||
void controller_init() {
|
||||
teensy_init();
|
||||
mcp23018_init();
|
||||
teensy_init(); // must be first
|
||||
mcp23018_init(); // must be second
|
||||
}
|
||||
|
||||
// TODO
|
||||
// - set internal brown-out detection circuit?
|
||||
void teensy_init() {
|
||||
CPU_PRESCALE(CPU_16MHz); // speed should match F_CPU in makefile
|
||||
|
||||
// unused pins
|
||||
DDRB &= ~0b00001110; // set B(1,2,3) as input
|
||||
PORTB |= 0b00001110; // set B(1,2,3) internal pullup enabled
|
||||
PORTB |= 0b00001110; // set B(1,2,3) internal pull-up enabled
|
||||
DDRD &= ~0b01110000; // set D(4,5,6) as input
|
||||
PORTD |= 0b01110000; // set D(4,5,6) internal pullup enabled
|
||||
PORTD |= 0b01110000; // set D(4,5,6) internal pull-up enabled
|
||||
DDRE &= ~0b01000000; // set E(6) as input
|
||||
PORTE |= 0b01000000; // set E(6) internal pullup enabled
|
||||
PORTE |= 0b01000000; // set E(6) internal pull-up enabled
|
||||
|
||||
// LEDs with PWM
|
||||
// LEDs
|
||||
DDRB |= 0b11100000; // set B(5,6,7) as output
|
||||
TCCR1A = 0b10101011; // set and configure fast PWM
|
||||
TCCR1B |= 0b00011001; // set and configure fast PWM
|
||||
// --- --- rows
|
||||
// TODO: set to high output
|
||||
// --- --- columns
|
||||
// TODO: set to input with pullup enabled
|
||||
// --- --- I2C (TWI)
|
||||
// TODO: use twi library
|
||||
TCCR1B = 0b00011001; // set and configure fast PWM
|
||||
|
||||
// rows
|
||||
DDRF |= 0b11110011; // set F(0,1,4,5,6,7) as output
|
||||
PORTF |= 0b11110011; // set F(0,1,4,5,6,7) drive high
|
||||
|
||||
// columns
|
||||
DDRB &= ~0b00010001; // set B(0,4) as input
|
||||
PORTB |= 0b00010001; // set B(0,4) internal pull-up enabled
|
||||
DDRC &= ~0b11000000; // set C(6,7) as input
|
||||
PORTC |= 0b11000000; // set C(6,7) internal pull-up enabled
|
||||
DDRD &= ~0b10001100; // set D(2,3,7) as input
|
||||
PORTD |= 0b10001100; // set D(2,3,7) internal pull-up enabled
|
||||
|
||||
// I2C (TWI)
|
||||
twi_init(); // (on pins D(0,1))
|
||||
twi_setAddress(0b0100000);
|
||||
}
|
||||
|
||||
// TODO
|
|
@ -0,0 +1,28 @@
|
|||
/* ----------------------------------------------------------------------------
|
||||
* ergodox controller (Teensy 2.0 and MCP23018) specific stuff
|
||||
* - public things are prefixed by `controller_` or `CONTROLLER_`
|
||||
* ----------------------------------------------------------------------------
|
||||
* Copyright (c) 2012 Ben Blazak
|
||||
* Released under The MIT License (MIT) (see "license.md") at
|
||||
* <https://github.com/benblazak/ergodox-firmware>
|
||||
* ------------------------------------------------------------------------- */
|
||||
|
||||
|
||||
// LEDs
|
||||
#define CONTROLLER_LED1_ON (OCR1A = 0xFFFF)
|
||||
#define CONTROLLER_LED1_OFF (OCR1A = 0x0000)
|
||||
#define CONTROLLER_LED1_SET(n) (OCR1A = (uint16_t)(n))
|
||||
#define CONTROLLER_LED1_SET_PERCENT(n) (OCR1A = (uint16_t)((n) * 0xFFFF))
|
||||
#define CONTROLLER_LED2_ON (OCR1B = 0xFFFF)
|
||||
#define CONTROLLER_LED2_OFF (OCR1B = 0x0000)
|
||||
#define CONTROLLER_LED2_SET(n) (OCR1B = (uint16_t)(n))
|
||||
#define CONTROLLER_LED2_SET_PERCENT(n) (OCR1B = (uint16_t)((n) * 0xFFFF))
|
||||
#define CONTROLLER_LED3_ON (OCR1C = 0xFFFF)
|
||||
#define CONTROLLER_LED3_OFF (OCR1C = 0x0000)
|
||||
#define CONTROLLER_LED3_SET(n) (OCR1C = (uint16_t)(n))
|
||||
#define CONTROLLER_LED3_SET_PERCENT(n) (OCR1C = (uint16_t)((n) * 0xFFFF))
|
||||
|
||||
|
||||
// init
|
||||
void controller_init();
|
||||
|
|
@ -7,9 +7,6 @@
|
|||
* ------------------------------------------------------------------------- */
|
||||
|
||||
|
||||
#include "hardware/ergodox.h"
|
||||
|
||||
#include "lib/twi.h"
|
||||
#include "lib/print.h"
|
||||
|
||||
|
||||
|
@ -18,9 +15,5 @@ void main() {
|
|||
}
|
||||
|
||||
void init() {
|
||||
controller_init(); // must be first
|
||||
kb_init(); // must be second
|
||||
|
||||
// TODO: other stuff?
|
||||
}
|
||||
|
||||
|
|
Loading…
Reference in New Issue