aboutsummaryrefslogtreecommitdiffstats
path: root/src/avr
diff options
context:
space:
mode:
Diffstat (limited to 'src/avr')
-rw-r--r--src/avr/gpio.c12
-rw-r--r--src/avr/irq.h6
-rw-r--r--src/avr/serial.c2
-rw-r--r--src/avr/timer.c4
4 files changed, 13 insertions, 11 deletions
diff --git a/src/avr/gpio.c b/src/avr/gpio.c
index 9f947e7a..9919cdd1 100644
--- a/src/avr/gpio.c
+++ b/src/avr/gpio.c
@@ -143,7 +143,7 @@ gpio_out_setup(uint8_t pin, uint8_t val)
if (! regs)
goto fail;
uint8_t bit = GPIO2BIT(pin);
- uint8_t flag = irq_save();
+ irqstatus_t flag = irq_save();
regs->out = val ? (regs->out | bit) : (regs->out & ~bit);
regs->mode |= bit;
irq_restore(flag);
@@ -160,7 +160,7 @@ void gpio_out_toggle(struct gpio_out g)
void
gpio_out_write(struct gpio_out g, uint8_t val)
{
- uint8_t flag = irq_save();
+ irqstatus_t flag = irq_save();
g.regs->out = val ? (g.regs->out | g.bit) : (g.regs->out & ~g.bit);
irq_restore(flag);
}
@@ -174,7 +174,7 @@ gpio_in_setup(uint8_t pin, int8_t pull_up)
if (! regs)
goto fail;
uint8_t bit = GPIO2BIT(pin);
- uint8_t flag = irq_save();
+ irqstatus_t flag = irq_save();
regs->out = pull_up > 0 ? (regs->out | bit) : (regs->out & ~bit);
regs->mode &= ~bit;
irq_restore(flag);
@@ -196,7 +196,7 @@ gpio_pwm_write(struct gpio_pwm g, uint8_t val)
if (g.size8) {
*(volatile uint8_t*)g.reg = val;
} else {
- uint8_t flag = irq_save();
+ irqstatus_t flag = irq_save();
*(volatile uint16_t*)g.reg = val;
irq_restore(flag);
}
@@ -210,7 +210,7 @@ gpio_pwm_setup(uint8_t pin, uint32_t cycle_time, uint8_t val)
if (READP(pwm_pins[chan]) != pin)
continue;
const struct gpio_pwm_info *p = &pwm_regs[chan];
- uint8_t flags = READP(p->flags), cs;
+ irqstatus_t flags = READP(p->flags), cs;
if (flags & GP_AFMT) {
switch (cycle_time) {
case 0 ... 8*510L - 1: cs = 1; break;
@@ -240,7 +240,7 @@ gpio_pwm_setup(uint8_t pin, uint32_t cycle_time, uint8_t val)
shutdown("Can not user timer1 for PWM; timer1 is used for timers");
// Setup PWM timer
- uint8_t flag = irq_save();
+ irqstatus_t flag = irq_save();
uint8_t old_cs = *regb & 0x07;
if (old_cs && old_cs != cs)
shutdown("PWM already programmed at different speed");
diff --git a/src/avr/irq.h b/src/avr/irq.h
index bfc6cb51..f586273a 100644
--- a/src/avr/irq.h
+++ b/src/avr/irq.h
@@ -15,13 +15,15 @@ static inline void irq_enable(void) {
sei();
}
-static inline uint8_t irq_save(void) {
+typedef uint8_t irqstatus_t;
+
+static inline irqstatus_t irq_save(void) {
uint8_t flag = SREG;
irq_disable();
return flag;
}
-static inline void irq_restore(uint8_t flag) {
+static inline void irq_restore(irqstatus_t flag) {
barrier();
SREG = flag;
}
diff --git a/src/avr/serial.c b/src/avr/serial.c
index 33b42fc6..0a7a9508 100644
--- a/src/avr/serial.c
+++ b/src/avr/serial.c
@@ -89,7 +89,7 @@ console_pop_input(uint8_t len)
, needcopy - copied);
copied = needcopy;
}
- uint8_t flag = irq_save();
+ irqstatus_t flag = irq_save();
if (rpos != readb(&receive_pos)) {
// Raced with irq handler - retry
irq_restore(flag);
diff --git a/src/avr/timer.c b/src/avr/timer.c
index 442bff32..e4d7b942 100644
--- a/src/avr/timer.c
+++ b/src/avr/timer.c
@@ -52,7 +52,7 @@ timer_init(void)
{
if (CONFIG_AVR_CLKPR != -1 && (uint8_t)CONFIG_AVR_CLKPR != CLKPR) {
// Program the clock prescaler
- uint8_t flag = irq_save();
+ irqstatus_t flag = irq_save();
CLKPR = 0x80;
CLKPR = CONFIG_AVR_CLKPR;
irq_restore(flag);
@@ -100,7 +100,7 @@ timer_periodic(void)
uint32_t
timer_read_time(void)
{
- uint8_t flag = irq_save();
+ irqstatus_t flag = irq_save();
uint16_t cur = timer_get();
uint32_t last = timer_last;
irq_restore(flag);