[avr] add debug macros for tracing interrupts
This commit is contained in:
parent
f74b124884
commit
65db2fe1dd
|
@ -0,0 +1,14 @@
|
||||||
|
#if DBG > 0
|
||||||
|
/* set LED pin high/low at the start/end of an ISR */
|
||||||
|
#define DBG_ISR_BEGIN PORTB |= (1<<PB0);
|
||||||
|
#define DBG_ISR_END PORTB &= ~(1<<PB0);
|
||||||
|
|
||||||
|
/* Set PB1=OC1A as output pin and toggle this pin on TIMER1 compare match */
|
||||||
|
#define DBG_OC1A_TOGGLE DDRB |= (1<<DDB1); \
|
||||||
|
TCCR1A |= 1<<COM1A0;
|
||||||
|
#else
|
||||||
|
#define DBG_ISR_BEGIN /* nothing */
|
||||||
|
#define DBG_ISR_END /* nothing */
|
||||||
|
#define DBG_OC1A_TOGGLE /* nothing */
|
||||||
|
#endif
|
||||||
|
|
|
@ -27,6 +27,7 @@
|
||||||
|
|
||||||
#include <util/delay.h>
|
#include <util/delay.h>
|
||||||
|
|
||||||
|
#include "debug.h"
|
||||||
#include "main.h"
|
#include "main.h"
|
||||||
#include "uart.h"
|
#include "uart.h"
|
||||||
#include "spi.h"
|
#include "spi.h"
|
||||||
|
@ -36,10 +37,10 @@
|
||||||
|
|
||||||
volatile uint8_t spi_status, spi_high_hex;
|
volatile uint8_t spi_status, spi_high_hex;
|
||||||
|
|
||||||
uint8_t EEMEM first_EEPROM_byte_not_used_to_protect_from_brownout_corruption = 0xab;
|
uint8_t EEMEM first_EEPROM_byte_not_used_to_protect_from_brownout_corruption = 0xbe;
|
||||||
|
|
||||||
uint16_t EEMEM EEPROM_version = 210;
|
uint8_t EEMEM EEPROM_version[2] = {2, 1};
|
||||||
uint16_t version;
|
uint8_t version[2];
|
||||||
|
|
||||||
volatile struct event_struct EEMEM EEPROM_event = {0, 0};
|
volatile struct event_struct EEMEM EEPROM_event = {0, 0};
|
||||||
volatile struct event_struct event;
|
volatile struct event_struct event;
|
||||||
|
@ -62,6 +63,8 @@ ISR(SPI_STC_vect)
|
||||||
uint8_t spi_rx, rx, tx;
|
uint8_t spi_rx, rx, tx;
|
||||||
uint16_t spi_tx;
|
uint16_t spi_tx;
|
||||||
|
|
||||||
|
DBG_ISR_BEGIN
|
||||||
|
|
||||||
// the SPI is double-buffered, requiring two NO_OPs when switching from Tx to Rx
|
// the SPI is double-buffered, requiring two NO_OPs when switching from Tx to Rx
|
||||||
if (spi_status & (SPI_NO_OP_1 | SPI_NO_OP_2)) {
|
if (spi_status & (SPI_NO_OP_1 | SPI_NO_OP_2)) {
|
||||||
spi_status--;
|
spi_status--;
|
||||||
|
@ -146,6 +149,8 @@ ISR(SPI_STC_vect)
|
||||||
// toggle the HEX bit in spi_status
|
// toggle the HEX bit in spi_status
|
||||||
spi_status ^= SPI_HIGH_HEX;
|
spi_status ^= SPI_HIGH_HEX;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
DBG_ISR_END
|
||||||
}
|
}
|
||||||
|
|
||||||
ISR(INT0_vect)
|
ISR(INT0_vect)
|
||||||
|
@ -173,6 +178,8 @@ ISR(TIMER1_COMPA_vect)
|
||||||
{
|
{
|
||||||
uint8_t muxn_l = phy_to_log[muxn];
|
uint8_t muxn_l = phy_to_log[muxn];
|
||||||
|
|
||||||
|
DBG_ISR_BEGIN
|
||||||
|
|
||||||
MacU16X16to32(state[muxn_l].nano, sensor[muxn_l].meterconst, ADC);
|
MacU16X16to32(state[muxn_l].nano, sensor[muxn_l].meterconst, ADC);
|
||||||
|
|
||||||
if (state[muxn_l].nano > WATT) {
|
if (state[muxn_l].nano > WATT) {
|
||||||
|
@ -204,6 +211,8 @@ ISR(TIMER1_COMPA_vect)
|
||||||
ADMUX |= muxn;
|
ADMUX |= muxn;
|
||||||
/* Start a new ADC conversion. */
|
/* Start a new ADC conversion. */
|
||||||
ADCSRA |= (1<<ADSC);
|
ADCSRA |= (1<<ADSC);
|
||||||
|
|
||||||
|
DBG_ISR_END
|
||||||
}
|
}
|
||||||
|
|
||||||
ISR(ANALOG_COMP_vect)
|
ISR(ANALOG_COMP_vect)
|
||||||
|
@ -237,6 +246,12 @@ void setup_datastructs(void)
|
||||||
eeprom_read_block((void*)&sensor, (const void*)&EEPROM_sensor, sizeof(sensor));
|
eeprom_read_block((void*)&sensor, (const void*)&EEPROM_sensor, sizeof(sensor));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void setup_led(void)
|
||||||
|
{
|
||||||
|
// set LED pin (PB0) as output pin
|
||||||
|
DDRB |= (1<<DDB0);
|
||||||
|
}
|
||||||
|
|
||||||
void setup_pulse_input(void)
|
void setup_pulse_input(void)
|
||||||
{
|
{
|
||||||
// PD2=INT0 and PD3=INT1 configuration
|
// PD2=INT0 and PD3=INT1 configuration
|
||||||
|
@ -271,12 +286,8 @@ void setup_timer1(void)
|
||||||
TCCR1B |= 1<<WGM12;
|
TCCR1B |= 1<<WGM12;
|
||||||
// Enable output compare match interrupt for timer1 (DS p.136)
|
// Enable output compare match interrupt for timer1 (DS p.136)
|
||||||
TIMSK1 |= (1<<OCIE1A);
|
TIMSK1 |= (1<<OCIE1A);
|
||||||
#if DBG > 0
|
|
||||||
// Set PB1=OC1A as output pin
|
DBG_OC1A_TOGGLE
|
||||||
DDRB |= (1<<DDB1);
|
|
||||||
// Toggle pin OC1A=PB1 on compare match
|
|
||||||
TCCR1A |= 1<<COM1A0;
|
|
||||||
#endif
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void setup_analog_comparator(void)
|
void setup_analog_comparator(void)
|
||||||
|
@ -338,6 +349,7 @@ int main(void)
|
||||||
//PORTD |= (1<<PD5);
|
//PORTD |= (1<<PD5);
|
||||||
|
|
||||||
setup_datastructs();
|
setup_datastructs();
|
||||||
|
setup_led();
|
||||||
setup_adc();
|
setup_adc();
|
||||||
setup_timer1();
|
setup_timer1();
|
||||||
setup_pulse_input();
|
setup_pulse_input();
|
||||||
|
@ -365,10 +377,6 @@ int main(void)
|
||||||
state[i].flags |= STATE_POWER;
|
state[i].flags |= STATE_POWER;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// toggle the LED=PB0 pin
|
|
||||||
_delay_ms(50);
|
|
||||||
DDRB ^= (1<<PB0);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
|
|
|
@ -115,8 +115,9 @@ CSTANDARD = -std=gnu99
|
||||||
# Place -D or -U options here
|
# Place -D or -U options here
|
||||||
CDEFS = -DF_CPU=$(F_CPU)UL
|
CDEFS = -DF_CPU=$(F_CPU)UL
|
||||||
|
|
||||||
# Enable debugging mode
|
# Debugging mode
|
||||||
#CDEFS += -DDBG=1
|
DBG = 0
|
||||||
|
CDEFS += -D DBG=$(DBG)
|
||||||
|
|
||||||
# uncomment and adapt these line if you want different UART library buffer size
|
# uncomment and adapt these line if you want different UART library buffer size
|
||||||
CDEFS += -DUART_RX_BUFFER_SIZE=64
|
CDEFS += -DUART_RX_BUFFER_SIZE=64
|
||||||
|
|
Loading…
Reference in New Issue