aboutsummaryrefslogtreecommitdiff
path: root/tmk_core/common/avr
diff options
context:
space:
mode:
Diffstat (limited to 'tmk_core/common/avr')
-rw-r--r--tmk_core/common/avr/bootloader.c15
-rw-r--r--tmk_core/common/avr/sleep_led.c19
-rw-r--r--tmk_core/common/avr/suspend.c20
-rw-r--r--tmk_core/common/avr/timer.c24
4 files changed, 67 insertions, 11 deletions
diff --git a/tmk_core/common/avr/bootloader.c b/tmk_core/common/avr/bootloader.c
index ee150817c..d89c8d768 100644
--- a/tmk_core/common/avr/bootloader.c
+++ b/tmk_core/common/avr/bootloader.c
@@ -13,12 +13,11 @@
13#endif 13#endif
14 14
15 15
16/* Bootloader Size in *bytes* 16/** \brief Bootloader Size in *bytes*
17 * 17 *
18 * AVR Boot section size are defined by setting BOOTSZ fuse in fact. Consult with your MCU datasheet. 18 * AVR Boot section size are defined by setting BOOTSZ fuse in fact. Consult with your MCU datasheet.
19 * Note that 'Word'(2 bytes) size and address are used in datasheet while TMK uses 'Byte'. 19 * Note that 'Word'(2 bytes) size and address are used in datasheet while TMK uses 'Byte'.
20 * 20 *
21 *
22 * Size of Bootloaders in bytes: 21 * Size of Bootloaders in bytes:
23 * Atmel DFU loader(ATmega32U4) 4096 22 * Atmel DFU loader(ATmega32U4) 4096
24 * Atmel DFU loader(AT90USB128) 8192 23 * Atmel DFU loader(AT90USB128) 8192
@@ -28,10 +27,8 @@
28 * Teensy halfKay(ATmega32U4) 512 27 * Teensy halfKay(ATmega32U4) 512
29 * Teensy++ halfKay(AT90USB128) 1024 28 * Teensy++ halfKay(AT90USB128) 1024
30 * 29 *
31 *
32 * AVR Boot section is located at the end of Flash memory like the followings. 30 * AVR Boot section is located at the end of Flash memory like the followings.
33 * 31 *
34 *
35 * byte Atmel/LUFA(ATMega32u4) byte Atmel(AT90SUB128) 32 * byte Atmel/LUFA(ATMega32u4) byte Atmel(AT90SUB128)
36 * 0x0000 +---------------+ 0x00000 +---------------+ 33 * 0x0000 +---------------+ 0x00000 +---------------+
37 * | | | | 34 * | | | |
@@ -57,7 +54,6 @@
57 * | Bootloader | 512B | Bootloader | 1KB 54 * | Bootloader | 512B | Bootloader | 1KB
58 * 0x7FFF +---------------+ 0x1FFFF +---------------+ 55 * 0x7FFF +---------------+ 0x1FFFF +---------------+
59 */ 56 */
60
61#define FLASH_SIZE (FLASHEND + 1L) 57#define FLASH_SIZE (FLASHEND + 1L)
62 58
63#if !defined(BOOTLOADER_SIZE) 59#if !defined(BOOTLOADER_SIZE)
@@ -69,14 +65,17 @@
69#define BOOT_SIZE_1024 0b010 65#define BOOT_SIZE_1024 0b010
70#define BOOT_SIZE_2048 0b000 66#define BOOT_SIZE_2048 0b000
71 67
72/* 68/** \brief Entering the Bootloader via Software
73 * Entering the Bootloader via Software 69 *
74 * http://www.fourwalledcubicle.com/files/LUFA/Doc/120730/html/_page__software_bootloader_start.html 70 * http://www.fourwalledcubicle.com/files/LUFA/Doc/120730/html/_page__software_bootloader_start.html
75 */ 71 */
76#define BOOTLOADER_RESET_KEY 0xB007B007 72#define BOOTLOADER_RESET_KEY 0xB007B007
77uint32_t reset_key __attribute__ ((section (".noinit"))); 73uint32_t reset_key __attribute__ ((section (".noinit")));
78 74
79/* initialize MCU status by watchdog reset */ 75/** \brief initialize MCU status by watchdog reset
76 *
77 * FIXME: needs doc
78 */
80void bootloader_jump(void) { 79void bootloader_jump(void) {
81 80
82 #if !defined(BOOTLOADER_SIZE) 81 #if !defined(BOOTLOADER_SIZE)
diff --git a/tmk_core/common/avr/sleep_led.c b/tmk_core/common/avr/sleep_led.c
index dab3eb0f3..0cb774c81 100644
--- a/tmk_core/common/avr/sleep_led.c
+++ b/tmk_core/common/avr/sleep_led.c
@@ -18,6 +18,10 @@
18 */ 18 */
19#define SLEEP_LED_TIMER_TOP F_CPU/(256*64) 19#define SLEEP_LED_TIMER_TOP F_CPU/(256*64)
20 20
21/** \brief Sleep LED initialization
22 *
23 * FIXME: needs doc
24 */
21void sleep_led_init(void) 25void sleep_led_init(void)
22{ 26{
23 /* Timer1 setup */ 27 /* Timer1 setup */
@@ -33,18 +37,30 @@ void sleep_led_init(void)
33 SREG = sreg; 37 SREG = sreg;
34} 38}
35 39
40/** \brief Sleep LED enable
41 *
42 * FIXME: needs doc
43 */
36void sleep_led_enable(void) 44void sleep_led_enable(void)
37{ 45{
38 /* Enable Compare Match Interrupt */ 46 /* Enable Compare Match Interrupt */
39 TIMSK1 |= _BV(OCIE1A); 47 TIMSK1 |= _BV(OCIE1A);
40} 48}
41 49
50/** \brief Sleep LED disable
51 *
52 * FIXME: needs doc
53 */
42void sleep_led_disable(void) 54void sleep_led_disable(void)
43{ 55{
44 /* Disable Compare Match Interrupt */ 56 /* Disable Compare Match Interrupt */
45 TIMSK1 &= ~_BV(OCIE1A); 57 TIMSK1 &= ~_BV(OCIE1A);
46} 58}
47 59
60/** \brief Sleep LED toggle
61 *
62 * FIXME: needs doc
63 */
48void sleep_led_toggle(void) 64void sleep_led_toggle(void)
49{ 65{
50 /* Disable Compare Match Interrupt */ 66 /* Disable Compare Match Interrupt */
@@ -52,7 +68,8 @@ void sleep_led_toggle(void)
52} 68}
53 69
54 70
55/* Breathing Sleep LED brighness(PWM On period) table 71/** \brief Breathing Sleep LED brighness(PWM On period) table
72 *
56 * (64[steps] * 4[duration]) / 64[PWM periods/s] = 4 second breath cycle 73 * (64[steps] * 4[duration]) / 64[PWM periods/s] = 4 second breath cycle
57 * 74 *
58 * http://www.wolframalpha.com/input/?i=%28sin%28+x%2F64*pi%29**8+*+255%2C+x%3D0+to+63 75 * http://www.wolframalpha.com/input/?i=%28sin%28+x%2F64*pi%29**8+*+255%2C+x%3D0+to+63
diff --git a/tmk_core/common/avr/suspend.c b/tmk_core/common/avr/suspend.c
index 213f03f6f..4cdd6a420 100644
--- a/tmk_core/common/avr/suspend.c
+++ b/tmk_core/common/avr/suspend.c
@@ -41,6 +41,10 @@ __asm__ __volatile__ ( \
41) 41)
42 42
43 43
44/** \brief Suspend idle
45 *
46 * FIXME: needs doc
47 */
44void suspend_idle(uint8_t time) 48void suspend_idle(uint8_t time)
45{ 49{
46 cli(); 50 cli();
@@ -52,7 +56,8 @@ void suspend_idle(uint8_t time)
52} 56}
53 57
54#ifndef NO_SUSPEND_POWER_DOWN 58#ifndef NO_SUSPEND_POWER_DOWN
55/* Power down MCU with watchdog timer 59/** \brief Power down MCU with watchdog timer
60 *
56 * wdto: watchdog timer timeout defined in <avr/wdt.h> 61 * wdto: watchdog timer timeout defined in <avr/wdt.h>
57 * WDTO_15MS 62 * WDTO_15MS
58 * WDTO_30MS 63 * WDTO_30MS
@@ -67,6 +72,10 @@ void suspend_idle(uint8_t time)
67 */ 72 */
68static uint8_t wdt_timeout = 0; 73static uint8_t wdt_timeout = 0;
69 74
75/** \brief Power down
76 *
77 * FIXME: needs doc
78 */
70static void power_down(uint8_t wdto) 79static void power_down(uint8_t wdto)
71{ 80{
72#ifdef PROTOCOL_LUFA 81#ifdef PROTOCOL_LUFA
@@ -111,6 +120,10 @@ static void power_down(uint8_t wdto)
111} 120}
112#endif 121#endif
113 122
123/** \brief Suspend power down
124 *
125 * FIXME: needs doc
126 */
114void suspend_power_down(void) 127void suspend_power_down(void)
115{ 128{
116#ifndef NO_SUSPEND_POWER_DOWN 129#ifndef NO_SUSPEND_POWER_DOWN
@@ -131,7 +144,10 @@ bool suspend_wakeup_condition(void)
131 return false; 144 return false;
132} 145}
133 146
134// run immediately after wakeup 147/** \brief run immediately after wakeup
148 *
149 * FIXME: needs doc
150 */
135void suspend_wakeup_init(void) 151void suspend_wakeup_init(void)
136{ 152{
137 // clear keyboard state 153 // clear keyboard state
diff --git a/tmk_core/common/avr/timer.c b/tmk_core/common/avr/timer.c
index 369015200..b7d4f060e 100644
--- a/tmk_core/common/avr/timer.c
+++ b/tmk_core/common/avr/timer.c
@@ -27,6 +27,10 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
27// NOTE: union { uint32_t timer32; struct { uint16_t dummy; uint16_t timer16; }} 27// NOTE: union { uint32_t timer32; struct { uint16_t dummy; uint16_t timer16; }}
28volatile uint32_t timer_count; 28volatile uint32_t timer_count;
29 29
30/** \brief timer initialization
31 *
32 * FIXME: needs doc
33 */
30void timer_init(void) 34void timer_init(void)
31{ 35{
32#if TIMER_PRESCALER == 1 36#if TIMER_PRESCALER == 1
@@ -60,6 +64,10 @@ void timer_init(void)
60#endif 64#endif
61} 65}
62 66
67/** \brief timer clear
68 *
69 * FIXME: needs doc
70 */
63inline 71inline
64void timer_clear(void) 72void timer_clear(void)
65{ 73{
@@ -68,6 +76,10 @@ void timer_clear(void)
68 } 76 }
69} 77}
70 78
79/** \brief timer read
80 *
81 * FIXME: needs doc
82 */
71inline 83inline
72uint16_t timer_read(void) 84uint16_t timer_read(void)
73{ 85{
@@ -80,6 +92,10 @@ uint16_t timer_read(void)
80 return (t & 0xFFFF); 92 return (t & 0xFFFF);
81} 93}
82 94
95/** \brief timer read32
96 *
97 * FIXME: needs doc
98 */
83inline 99inline
84uint32_t timer_read32(void) 100uint32_t timer_read32(void)
85{ 101{
@@ -92,6 +108,10 @@ uint32_t timer_read32(void)
92 return t; 108 return t;
93} 109}
94 110
111/** \brief timer elapsed
112 *
113 * FIXME: needs doc
114 */
95inline 115inline
96uint16_t timer_elapsed(uint16_t last) 116uint16_t timer_elapsed(uint16_t last)
97{ 117{
@@ -104,6 +124,10 @@ uint16_t timer_elapsed(uint16_t last)
104 return TIMER_DIFF_16((t & 0xFFFF), last); 124 return TIMER_DIFF_16((t & 0xFFFF), last);
105} 125}
106 126
127/** \brief timer elapsed32
128 *
129 * FIXME: needs doc
130 */
107inline 131inline
108uint32_t timer_elapsed32(uint32_t last) 132uint32_t timer_elapsed32(uint32_t last)
109{ 133{