Witam
Od niedawna przerzuciłem się na środowisko linux (Ubuntu 8.10). Jażo jest jest to system unix to do pisania programów w C dla avr'ków pisze je w gedit. Testując gcc pod linuxem natrafiłem na dziwny problem. Mianowicie timer0 wogóle nie odpala pomimo dobrej konfiguracji.
Oto najprostszy kod obsługi przerwania od timera0
Poniżej makefile którego używam do kompilacji programu
PS To nie wina mikrokontrolera gdyż próbowałem na paru niezależnych
Od niedawna przerzuciłem się na środowisko linux (Ubuntu 8.10). Jażo jest jest to system unix to do pisania programów w C dla avr'ków pisze je w gedit. Testując gcc pod linuxem natrafiłem na dziwny problem. Mianowicie timer0 wogóle nie odpala pomimo dobrej konfiguracji.
Oto najprostszy kod obsługi przerwania od timera0
#include <avr/io.h>
#include <stdio.h>
#include <avr/interrupt.h>
#include <avr/signal.h>
INT0_vect(TIMER0_OVF_vect)
{
if(bit_is_clear(PINC,0))
PORTD=0x00;
else
PORTD=0xFF;
}
int main(void)
{
DDRC=0x00;
PORTC=0xFF;
DDRD=0xFF;
TCCR0 = 0x03;
TCNT0 = 0x00;
TIMSK = 0x01;
sei();
}
Poniżej makefile którego używam do kompilacji programu
PRG = main
OBJ = main.o
MCU_TARGET = atmega16
OPTIMIZE = -O2
DEFS =
LIBS =
# You should not have to change anything below here.
CC = avr-gcc
# Override is only needed by avr-lib build system.
override CFLAGS = -g -Wall $(OPTIMIZE) -mmcu=$(MCU_TARGET) $(DEFS) -I/usr/avr/include -D__AVR_ATMega16__
override LDFLAGS = -Wl,-Map,$(PRG).map
OBJCOPY = avr-objcopy
OBJDUMP = avr-objdump
all: $(PRG).elf lst text eeprom
$(PRG).elf: $(OBJ)
$(CC) $(CFLAGS) $(LDFLAGS) -o $@ $^ $(LIBS)
clean:
rm -rf *.o $(PRG).elf *.eps *.png *.pdf *.bak
rm -rf *.lst *.map $(EXTRA_CLEAN_FILES)
lst: $(PRG).lst
%.lst: %.elf
$(OBJDUMP) -h -S $< > $@
# Rules for building the .text rom images
text: hex bin srec
hex: $(PRG).hex
bin: $(PRG).bin
srec: $(PRG).srec
%.hex: %.elf
$(OBJCOPY) -j .text -j .data -O ihex $< $@
%.srec: %.elf
$(OBJCOPY) -j .text -j .data -O srec $< $@
%.bin: %.elf
$(OBJCOPY) -j .text -j .data -O binary $< $@
# Rules for building the .eeprom rom images
eeprom: ehex ebin esrec
ehex: $(PRG)_eeprom.hex
ebin: $(PRG)_eeprom.bin
esrec: $(PRG)_eeprom.srec
%_eeprom.hex: %.elf
$(OBJCOPY) -j .eeprom --change-section-lma .eeprom=0 -O ihex $< $@
%_eeprom.srec: %.elf
$(OBJCOPY) -j .eeprom --change-section-lma .eeprom=0 -O srec $< $@
%_eeprom.bin: %.elf
$(OBJCOPY) -j .eeprom --change-section-lma .eeprom=0 -O binary $< $@
# Every thing below here is used by avr-libc's build system and can be ignored
# by the casual user.
FIG2DEV = fig2dev
EXTRA_CLEAN_FILES = *.hex *.bin *.srec
dox: eps png pdf
eps: $(PRG).eps
png: $(PRG).png
pdf: $(PRG).pdf
%.eps: %.fig
$(FIG2DEV) -L eps $< $@
%.pdf: %.fig
$(FIG2DEV) -L pdf $< $@
%.png: %.fig
$(FIG2DEV) -L png $< $@
PS To nie wina mikrokontrolera gdyż próbowałem na paru niezależnych