diff options
author | Matthias P. Braendli <matthias.braendli@mpb.li> | 2014-07-11 14:53:33 +0200 |
---|---|---|
committer | Matthias P. Braendli <matthias.braendli@mpb.li> | 2014-07-11 14:53:33 +0200 |
commit | b40a1196a8e7c4c6ad163028774394a90fd87fc6 (patch) | |
tree | adf2dc9e30d7c22dc414237d5d62e66f43ce4107 /src | |
parent | 2a70ced5cd41f66df77a8b7ef05d9e75de406b55 (diff) | |
download | renard_hb9hi-b40a1196a8e7c4c6ad163028774394a90fd87fc6.tar.gz renard_hb9hi-b40a1196a8e7c4c6ad163028774394a90fd87fc6.tar.bz2 renard_hb9hi-b40a1196a8e7c4c6ad163028774394a90fd87fc6.zip |
Add first test code for ATtiny25
Diffstat (limited to 'src')
-rw-r--r-- | src/lib/delay.h | 9 | ||||
-rw-r--r-- | src/testapp1/Makefile | 103 | ||||
-rw-r--r-- | src/testapp1/README.md | 5 | ||||
-rw-r--r-- | src/testapp1/main.c | 126 |
4 files changed, 243 insertions, 0 deletions
diff --git a/src/lib/delay.h b/src/lib/delay.h new file mode 100644 index 0000000..af92a4f --- /dev/null +++ b/src/lib/delay.h @@ -0,0 +1,9 @@ +#ifndef __DELAY_INT_H +#define __DELAY_INT_H + +#include <util/delay.h> + +#define delay_us(us) _delay_us(us) +#define delay_ms(ms) _delay_ms(ms) + +#endif diff --git a/src/testapp1/Makefile b/src/testapp1/Makefile new file mode 100644 index 0000000..5ff4010 --- /dev/null +++ b/src/testapp1/Makefile @@ -0,0 +1,103 @@ +# Location of build tools +CC=avr-gcc +OBJCOPY=avr-objcopy +SIZE=avr-size +AVRDUDE=avrdude + +# Modify this to the device name of the UART used for AVRDUDE +AVRDUDE_DEV=usb +PROG = dragon_isp + +# Modify this to the CPU you are using +PART=attiny25 +AVRDUDE_PART=t25 + +# Cpu frequency +# is 3.579545MHz / 8 = 447443.125 +#F_CPU=447443UL +F_CPU="(3579545UL/8)" + +# Directory for built objects +BUILD_DIR=build + +# Port/application object files +APP_NAME = testapp1 + +# Application object files +APP_OBJECTS = main.o + +# Library object files to build and use +LIB_OBJECTS = +LIB_ASM_OBJECTS = +LIB_DIR = ../lib + +# Collection of built objects +ALL_OBJECTS = $(LIB_OBJECTS) $(LIB_ASM_OBJECTS) $(APP_OBJECTS) +BUILT_OBJECTS = $(patsubst %,$(BUILD_DIR)/%,$(ALL_OBJECTS)) + +# Target application filenames (.elf and .hex) for each application object +APP_ELF = $(APP_NAME).elf +APP_HEX = $(APP_NAME).hex + +# Search build/output directory for dependencies +vpath %.o ./$(BUILD_DIR) +vpath %.elf ./$(BUILD_DIR) +vpath %.hex ./$(BUILD_DIR) + +# GCC flags +CFLAGS=-g -mmcu=$(PART) -O1 -Wall -Werror -DF_CPU=$(F_CPU) +INCLUDES=-I. -I$(LIB_DIR) + + +################# +# Build targets # +################# + +# All applications +all: $(BUILD_DIR) $(APP_HEX) Makefile + +# Make build/output directory +$(BUILD_DIR): + mkdir $(BUILD_DIR) + +# Application HEX files +$(APP_HEX): %.hex: %.elf + @echo Building $@ + $(OBJCOPY) -j .text -j .data -O ihex $(BUILD_DIR)/$< $(BUILD_DIR)/$@ + +# Application ELF files +$(APP_ELF): %.elf: $(LIB_OBJECTS) $(LIB_ASM_OBJECTS) $(APP_OBJECTS) + $(CC) $(CFLAGS) $(BUILT_OBJECTS) --output $(BUILD_DIR)/$@ -Wl,-Map,$(BUILD_DIR)/$(basename $@).map + +# Application objects builder +$(APP_OBJECTS): %.o: %.c + $(CC) -c $(CFLAGS) $(INCLUDES) $< -o $(BUILD_DIR)/$(notdir $@) + +# Application C objects builder +$(LIB_OBJECTS): %.o: $(LIB_DIR)/%.c + $(CC) -c $(CFLAGS) $(INCLUDES) $< -o $(BUILD_DIR)/$(notdir $@) + +# Application asm objects builder +$(LIB_ASM_OBJECTS): %.o: $(LIB_DIR)/%.s + $(CC) -c $(CFLAGS) -x assembler-with-cpp $(INCLUDES) $< -o $(BUILD_DIR)/$(notdir $@) + +# .lst file builder +%.lst: %.c + $(CC) $(CFLAGS) $(INCLUDES) -Wa,-al $< > $@ + +# Clean +clean: + rm -f *.o *.elf *.map *.hex *.bin *.lst + rm -rf doxygen-avr + rm -rf build + +# Send to device +program: $(BUILD_DIR)/$(APP_HEX) + $(SIZE) -C $(BUILD_DIR)/$(APP_ELF) + $(AVRDUDE) $(AVRDUDE_FLAGS) -c $(PROG) -P $(AVRDUDE_DEV) -p $(AVRDUDE_PART) -U flash:w:$(BUILD_DIR)/$(APP_HEX) -v + +interactive: + $(AVRDUDE) $(AVRDUDE_FLAGS) -c $(PROG) -P $(AVRDUDE_DEV) -p $(AVRDUDE_PART) -t -v + +doxygen: + doxygen ./Doxyfile diff --git a/src/testapp1/README.md b/src/testapp1/README.md new file mode 100644 index 0000000..7099b6a --- /dev/null +++ b/src/testapp1/README.md @@ -0,0 +1,5 @@ +testapp1 +======== + +This only sends MOS in morse code on PB0 + diff --git a/src/testapp1/main.c b/src/testapp1/main.c new file mode 100644 index 0000000..9ce1456 --- /dev/null +++ b/src/testapp1/main.c @@ -0,0 +1,126 @@ +#include <stdio.h> +#include <avr/pgmspace.h> +#include <avr/io.h> +#include <avr/interrupt.h> + +#include "delay.h" + +#define PORTB_PTT (1 << 0) + +volatile uint8_t Timer; /* Timer (100Hz increment) */ + +/*---------------------------------------------------------*/ +/* 100Hz timer interrupt generated by OC2 */ +/*---------------------------------------------------------*/ +ISR(TIMER1_COMPA_vect) +{ + Timer++; +} + +static int inittimer(void) +{ + /* Start 100Hz system timer (TC2.OC) */ + TCCR0B |= (1 << WGM02); // Configure timer for CTC mode + TIMSK |= (1 << OCIE1A); // enable overflow interrupt + OCR1A = (uint8_t)(F_CPU / 64 / 1000 / 100 - 1); // Set CTC compare value to 10ms + TCCR0B |= ((1 << CS10) | (1 << CS11)); // Start timer at Fcpu/64 + + // Enable interrupts + sei(); + + return 0; +} + +#define DIT_DURATION 100 // ms +#define PTT_LOGIC_LOW 0 + +#if PTT_LOGIC_LOW +void dah() +{ + PORTB = 0; // PTT is inverted logic + delay_ms(3*DIT_DURATION); + + PORTB = PORTB_PTT; // PTT is inverted logic + delay_ms(DIT_DURATION); +} + +void dit() +{ + PORTB = 0; // PTT is inverted logic + delay_ms(DIT_DURATION); + + PORTB = PORTB_PTT; // PTT is inverted logic + delay_ms(DIT_DURATION); +} +#else +void dah() +{ + PORTB = PORTB_PTT; + delay_ms(3*DIT_DURATION); + + PORTB = 0; + delay_ms(DIT_DURATION); +} + +void dit() +{ + PORTB = PORTB_PTT; + delay_ms(DIT_DURATION); + + PORTB = 0; + delay_ms(DIT_DURATION); +} +#endif + +int main ( void ) +{ + /* Enable PTT output on PB0 */ + PORTB = PORTB_PTT; + DDRB = PORTB_PTT; + + /* initialise timer interrupt */ + inittimer(); + + while (1) { + // morse code ! + dah(); + dah(); + + delay_ms(2*DIT_DURATION); + dah(); + dah(); + dah(); + + delay_ms(2*DIT_DURATION); + dit(); + dit(); + dit(); + + delay_ms(6*DIT_DURATION); + } + + return 0; +} + +#if 0 +static void some_old_function(uint32_t data) +{ + uint32_t test_status; + int sleep_ticks; + + /* Enable all LEDs */ + DDRB = 0xFF; + PORTB = 0xFF; + + /* Flash LED once per second if passed, very quickly if failed */ + sleep_ticks = (test_status == 0) ? SYSTEM_TICKS_PER_SEC : (SYSTEM_TICKS_PER_SEC/8); + + /* Test finished, flash slowly for pass, fast for fail */ + while (1) + { + /* Toggle a LED */ + PORTB ^= (1 << 0); + } +} +#endif + |