HWA
Bare metal programming with style
coreb_2.h
Go to the documentation of this file.
1
2
/* This file is part of the HWA project.
3
* Copyright (c) 2012,2015 Christophe Duparquet.
4
* All rights reserved. Read LICENSE.TXT for details.
5
*/
6
39
#define hwa_configure__coreb , _hwa_cfcoreb
40
41
/* TODO use a list of wake-up sources instead (or in addition)?
42
*/
43
/* #define _hw_is_awaker_awaker , 1 */
44
/* #define hw_awaker_io , 0 */
45
/* #define hw_awaker_int0_edge , 0 */
46
/* #define hw_awaker_adc , 1 */
47
/* #define hw_awaker_flash , 1 */
48
/* #define hw_awaker_eeprom , 1 */
49
/* #define hw_awaker_int0_level , 2 */
50
/* #define hw_awaker_pinchange , 2 */
51
/* #define hw_awaker_usi_start_condition , 2 */
52
/* #define hw_awaker_watchdog , 2 */
53
54
/* Optionnal parameter `sleep`
55
*/
56
#define _hwa_cfcoreb(o,a,k,...) \
57
do { \
58
HW_B(_hwa_cfcoreb_ksleep_,_hw_is_sleep_##k)(o,k,__VA_ARGS__,,); \
59
} while(0)
60
61
#define _hwa_cfcoreb_ksleep_1(o,k,v,...) \
62
HW_B(_hwa_cfcoreb_vsleep_,_hw_state_##v)(o,v,__VA_ARGS__)
63
64
#define _hwa_cfcoreb_vsleep_0(o,v,...) HW_E(HW_EM_VOAST(v,sleep))
65
#define _hwa_cfcoreb_vsleep_1(o,v,k,...) \
66
_hwa_write( o, se, HW_A1(_hw_state_##v) ); \
67
HW_G2(_hwa_cfcoreb_ksleepmode,HW_IS(sleep_mode,k))(o,k,__VA_ARGS__)
68
69
#define _hwa_cfcoreb_ksleep_0(o,k,...) \
70
HW_G2(_hwa_cfcoreb_ksleepmode,HW_IS(sleep_mode,k))(o,k,__VA_ARGS__)
71
72
/* Optionnal parameter `sleep_mode`
73
*/
74
#define _hwa_cfcoreb_ksleepmode_0(o,...) HW_EOL(__VA_ARGS__)
75
76
#define _hwa_cfcoreb_ksleepmode_1(o,k,v,...) \
77
HW_B(_hwa_cfcoreb_vsleepmode_,_hw_sleepmode_##v)(o,v,__VA_ARGS__)
78
79
#define _hw_sleepmode_idle , 0
80
#define _hw_sleepmode_adc_noise_reduction , 1
81
#define _hw_sleepmode_power_down , 2
82
#define _hw_sleepmode_power_save , 3
83
#define _hw_sleepmode_standby , 6
84
#define _hw_sleepmode_extended_standby , 7
85
86
#define _hwa_cfcoreb_vsleepmode_0(o,v,...) \
87
HW_E(HW_EM_VOAL(v,sleep_mode,(idle,adc_noise_reduction,power_down,power_save,standby,extended_standby)))
88
89
#define _hwa_cfcoreb_vsleepmode_1(o,v,...) \
90
_hwa_write( o, sm, HW_A1(_hw_sleepmode_##v)) HW_EOL(__VA_ARGS__)
91
92
126
#define hw_stat__coreb , _hw_stat_coreb
127
128
typedef
union
{
129
uint8_t byte ;
130
struct
{
131
unsigned
int
porf: 1 ;
132
unsigned
int
extrf: 1 ;
133
unsigned
int
borf: 1 ;
134
unsigned
int
wdrf: 1 ;
135
unsigned
int
__4to7: 4 ;
136
};
137
struct
{
138
unsigned
int
reset_by_power_on: 1 ;
139
unsigned
int
reset_by_reset_pin: 1 ;
140
unsigned
int
reset_by_brown_out: 1 ;
141
unsigned
int
reset_by_watchdog: 1 ;
142
unsigned
int
__4to7_2: 4 ;
143
};
144
} _hw_coreb_stat_t ;
145
146
147
#define hw_stat_t__coreb , _hw_coreb_stat_t
148
#define _hw_stat_coreb(o,a,...) _hw_coreb_stat(_hw_read(o, mcusr)) HW_EOL(__VA_ARGS__)
149
150
151
HW_INLINE _hw_coreb_stat_t _hw_coreb_stat( uint8_t
byte
)
152
{
153
_hw_coreb_stat_t st ;
154
st.byte = byte ;
155
return
st ;
156
}
157
158
169
#define hwa_clear__coreb , _hwa_clear__coreb
170
171
#define _hwa_clear__coreb(o,a,...) _hwa_write(o,allrf,0)
172
173
174
/*******************************************************************************
175
* *
176
* Context management *
177
* *
178
*******************************************************************************/
179
180
#define _hwa_setup__coreb(o,a) \
181
_hwa_setup_r( o, mcucr ); \
182
_hwa_setup_r( o, mcusr ); \
183
_hwa_setup_r( o, smcr ); \
184
_hwa_setup_r( o, osccal )
185
186
/* mcusr is not initialized as its status is not known after RESET
187
*/
188
#define _hwa_init__coreb(o,a) \
189
_hwa_init_r( o, mcucr, 0x00 ); \
190
_hwa_init_r( o, smcr, 0x00 ); \
191
_hwa_init_r( o, osccal, 0x00 )
192
193
194
#define _hwa_commit__coreb(o,a) \
195
_hwa_commit_r( o, mcucr ); \
196
_hwa_commit_r( o, mcusr ); \
197
_hwa_commit_r( o, smcr ); \
198
_hwa_commit_r( o, osccal )
Generated for HWA by
1.8.6