diff options
author | Jack Humbert <jack.humb@gmail.com> | 2018-11-02 12:31:40 -0400 |
---|---|---|
committer | GitHub <noreply@github.com> | 2018-11-02 12:31:40 -0400 |
commit | 15f6278aa623ceda4c220daee1cbedb9e38e6a97 (patch) | |
tree | be1f80786f810c75d0f914899d299c530664d324 /quantum/config_common.h | |
parent | 5909d8aef1126357899b687155bfe377914891df (diff) | |
download | qmk_firmware-15f6278aa623ceda4c220daee1cbedb9e38e6a97.tar.gz qmk_firmware-15f6278aa623ceda4c220daee1cbedb9e38e6a97.zip |
Add support for Atmega32A to pin declarations and universal matrix (#4015)
* add computed pins from mcu type
* update for atmega32a
* doc typo
* add atmega16 chips, link to references
* remove avr include from config
* exclude assembler in config.h includes
* consolodate options, add 646
* fix typo in pindef
Diffstat (limited to 'quantum/config_common.h')
-rw-r--r-- | quantum/config_common.h | 156 |
1 files changed, 102 insertions, 54 deletions
diff --git a/quantum/config_common.h b/quantum/config_common.h index 288617255..cbff372ea 100644 --- a/quantum/config_common.h +++ b/quantum/config_common.h | |||
@@ -1,4 +1,4 @@ | |||
1 | /* Copyright 2015-2017 Jack Humbert | 1 | /* Copyright 2015-2018 Jack Humbert |
2 | * | 2 | * |
3 | * This program is free software: you can redistribute it and/or modify | 3 | * This program is free software: you can redistribute it and/or modify |
4 | * it under the terms of the GNU General Public License as published by | 4 | * it under the terms of the GNU General Public License as published by |
@@ -14,8 +14,7 @@ | |||
14 | * along with this program. If not, see <http://www.gnu.org/licenses/>. | 14 | * along with this program. If not, see <http://www.gnu.org/licenses/>. |
15 | */ | 15 | */ |
16 | 16 | ||
17 | #ifndef CONFIG_DEFINITIONS_H | 17 | #pragma once |
18 | #define CONFIG_DEFINITIONS_H | ||
19 | 18 | ||
20 | /* diode directions */ | 19 | /* diode directions */ |
21 | #define COL2ROW 0 | 20 | #define COL2ROW 0 |
@@ -23,57 +22,108 @@ | |||
23 | #define CUSTOM_MATRIX 2 /* Disables built-in matrix scanning code */ | 22 | #define CUSTOM_MATRIX 2 /* Disables built-in matrix scanning code */ |
24 | 23 | ||
25 | #ifdef __AVR__ | 24 | #ifdef __AVR__ |
25 | #ifndef __ASSEMBLER__ | ||
26 | #include <avr/io.h> | ||
27 | #endif | ||
28 | #define PORT_SHIFTER 4 // this may be 4 for all AVR chips | ||
29 | |||
30 | // If you want to add more to this list, reference the PINx definitions in these header | ||
31 | // files: https://github.com/vancegroup-mirrors/avr-libc/tree/master/avr-libc/include/avr | ||
32 | |||
33 | #if defined(__AVR_ATmega32U4__) || defined(__AVR_ATmega16U4__) | ||
34 | #define ADDRESS_BASE 0x00 | ||
35 | #define PINB_ADDRESS 0x3 | ||
36 | #define PINC_ADDRESS 0x6 | ||
37 | #define PIND_ADDRESS 0x9 | ||
38 | #define PINE_ADDRESS 0xC | ||
39 | #define PINF_ADDRESS 0xF | ||
40 | #elif defined(__AVR_ATmega32U2__) || defined(__AVR_ATmega16U2__) | ||
41 | #define ADDRESS_BASE 0x00 | ||
42 | #define PINB_ADDRESS 0x3 | ||
43 | #define PINC_ADDRESS 0x6 | ||
44 | #define PIND_ADDRESS 0x9 | ||
45 | #elif defined(__AVR_AT90USB1286__) || defined(__AVR_AT90USB646__) | ||
46 | #define ADDRESS_BASE 0x00 | ||
47 | #define PINA_ADDRESS 0x0 | ||
48 | #define PINB_ADDRESS 0x3 | ||
49 | #define PINC_ADDRESS 0x6 | ||
50 | #define PIND_ADDRESS 0x9 | ||
51 | #define PINE_ADDRESS 0xC | ||
52 | #define PINF_ADDRESS 0xF | ||
53 | #elif defined(__AVR_ATmega32A__) | ||
54 | #define ADDRESS_BASE 0x10 | ||
55 | #define PIND_ADDRESS 0x0 | ||
56 | #define PINC_ADDRESS 0x3 | ||
57 | #define PINB_ADDRESS 0x6 | ||
58 | #define PINA_ADDRESS 0x9 | ||
59 | #else | ||
60 | #error "Pins are not defined" | ||
61 | #endif | ||
62 | |||
26 | /* I/O pins */ | 63 | /* I/O pins */ |
27 | #ifndef F0 | 64 | #define PINDEF(port, pin) ((PIN##port##_ADDRESS << PORT_SHIFTER) | pin) |
28 | #define B0 0x30 | 65 | |
29 | #define B1 0x31 | 66 | #ifdef PORTA |
30 | #define B2 0x32 | 67 | #define A0 PINDEF(A, 0) |
31 | #define B3 0x33 | 68 | #define A1 PINDEF(A, 1) |
32 | #define B4 0x34 | 69 | #define A2 PINDEF(A, 2) |
33 | #define B5 0x35 | 70 | #define A3 PINDEF(A, 3) |
34 | #define B6 0x36 | 71 | #define A4 PINDEF(A, 4) |
35 | #define B7 0x37 | 72 | #define A5 PINDEF(A, 5) |
36 | #define C0 0x60 | 73 | #define A6 PINDEF(A, 6) |
37 | #define C1 0x61 | 74 | #define A7 PINDEF(A, 7) |
38 | #define C2 0x62 | 75 | #endif |
39 | #define C3 0x63 | 76 | #ifdef PORTB |
40 | #define C4 0x64 | 77 | #define B0 PINDEF(B, 0) |
41 | #define C5 0x65 | 78 | #define B1 PINDEF(B, 1) |
42 | #define C6 0x66 | 79 | #define B2 PINDEF(B, 2) |
43 | #define C7 0x67 | 80 | #define B3 PINDEF(B, 3) |
44 | #define D0 0x90 | 81 | #define B4 PINDEF(B, 4) |
45 | #define D1 0x91 | 82 | #define B5 PINDEF(B, 5) |
46 | #define D2 0x92 | 83 | #define B6 PINDEF(B, 6) |
47 | #define D3 0x93 | 84 | #define B7 PINDEF(B, 7) |
48 | #define D4 0x94 | ||
49 | #define D5 0x95 | ||
50 | #define D6 0x96 | ||
51 | #define D7 0x97 | ||
52 | #define E0 0xC0 | ||
53 | #define E1 0xC1 | ||
54 | #define E2 0xC2 | ||
55 | #define E3 0xC3 | ||
56 | #define E4 0xC4 | ||
57 | #define E5 0xC5 | ||
58 | #define E6 0xC6 | ||
59 | #define E7 0xC7 | ||
60 | #define F0 0xF0 | ||
61 | #define F1 0xF1 | ||
62 | #define F2 0xF2 | ||
63 | #define F3 0xF3 | ||
64 | #define F4 0xF4 | ||
65 | #define F5 0xF5 | ||
66 | #define F6 0xF6 | ||
67 | #define F7 0xF7 | ||
68 | #define A0 0x00 | ||
69 | #define A1 0x01 | ||
70 | #define A2 0x02 | ||
71 | #define A3 0x03 | ||
72 | #define A4 0x04 | ||
73 | #define A5 0x05 | ||
74 | #define A6 0x06 | ||
75 | #define A7 0x07 | ||
76 | #endif | 85 | #endif |
86 | #ifdef PORTC | ||
87 | #define C0 PINDEF(C, 0) | ||
88 | #define C1 PINDEF(C, 1) | ||
89 | #define C2 PINDEF(C, 2) | ||
90 | #define C3 PINDEF(C, 3) | ||
91 | #define C4 PINDEF(C, 4) | ||
92 | #define C5 PINDEF(C, 5) | ||
93 | #define C6 PINDEF(C, 6) | ||
94 | #define C7 PINDEF(C, 7) | ||
95 | #endif | ||
96 | #ifdef PORTD | ||
97 | #define D0 PINDEF(D, 0) | ||
98 | #define D1 PINDEF(D, 1) | ||
99 | #define D2 PINDEF(D, 2) | ||
100 | #define D3 PINDEF(D, 3) | ||
101 | #define D4 PINDEF(D, 4) | ||
102 | #define D5 PINDEF(D, 5) | ||
103 | #define D6 PINDEF(D, 6) | ||
104 | #define D7 PINDEF(D, 7) | ||
105 | #endif | ||
106 | #ifdef PORTE | ||
107 | #define E0 PINDEF(E, 0) | ||
108 | #define E1 PINDEF(E, 1) | ||
109 | #define E2 PINDEF(E, 2) | ||
110 | #define E3 PINDEF(E, 3) | ||
111 | #define E4 PINDEF(E, 4) | ||
112 | #define E5 PINDEF(E, 5) | ||
113 | #define E6 PINDEF(E, 6) | ||
114 | #define E7 PINDEF(E, 7) | ||
115 | #endif | ||
116 | #ifdef PORTF | ||
117 | #define F0 PINDEF(F, 0) | ||
118 | #define F1 PINDEF(F, 1) | ||
119 | #define F2 PINDEF(F, 2) | ||
120 | #define F3 PINDEF(F, 3) | ||
121 | #define F4 PINDEF(F, 4) | ||
122 | #define F5 PINDEF(F, 5) | ||
123 | #define F6 PINDEF(F, 6) | ||
124 | #define F7 PINDEF(F, 7) | ||
125 | #endif | ||
126 | |||
77 | #elif defined(PROTOCOL_CHIBIOS) | 127 | #elif defined(PROTOCOL_CHIBIOS) |
78 | #define A0 PAL_LINE(GPIOA, 0) | 128 | #define A0 PAL_LINE(GPIOA, 0) |
79 | #define A1 PAL_LINE(GPIOA, 1) | 129 | #define A1 PAL_LINE(GPIOA, 1) |
@@ -200,5 +250,3 @@ | |||
200 | #define API_SYSEX_MAX_SIZE 32 | 250 | #define API_SYSEX_MAX_SIZE 32 |
201 | 251 | ||
202 | #include "song_list.h" | 252 | #include "song_list.h" |
203 | |||
204 | #endif | ||