[M1 Mac, Big Sur 11.6.8, avr-gcc 9.4.0, NO IDE]
ATtiny13AにつないだLEDの点滅が設定に比べて異様に遅いので色々調べてみると、システムクロック周波数がデフォルトで8分周(8分の1)になっていました。
対策としてavrdudeでヒューズビットを変更することにより1分周に変えます。コマンドは”make fuse”です。
Makefileは以下の通りです。ヒューズビットは16進数で表記されていますが、これでは各ビットの設定がわかりにくいため2進数表記に変えています。
DEVICE = attiny13a
CLOCK = 9600000
PROGRAMMER = -c avrispmkII
OBJECTS = main.o
# FUSESのシステムクロック(lfuse第4ビット[下5桁目])を8分周から1分周に変更し2進数表記にした
FUSES = -U lfuse:w:0b01111010:m -U hfuse:w:0b11111111:m
# デフォルト FUSES = -U lfuse:w:0x6a:m -U hfuse:w:0xff:m
AVRDUDE = avrdude $(PROGRAMMER) -p $(DEVICE)
COMPILE = avr-gcc -Wall -Os -DF_CPU=$(CLOCK) -mmcu=$(DEVICE)
all: main.hex
.c.o:
$(COMPILE) -c $< -o $@
.S.o:
$(COMPILE) -x assembler-with-cpp -c $< -o $@
.c.s:
$(COMPILE) -S $< -o $@
flash: all
$(AVRDUDE) -U flash:w:main.hex:i
fuse:
$(AVRDUDE) $(FUSES)
install: flash fuse
load: all
bootloadHID main.hex
clean:
rm -f main.hex main.elf $(OBJECTS)
main.elf: $(OBJECTS)
$(COMPILE) -o main.elf $(OBJECTS)
main.hex: main.elf
rm -f main.hex
avr-objcopy -j .text -j .data -O ihex main.elf main.hex
avr-size --format=avr --mcu=$(DEVICE) main.elf
disasm: main.elf
avr-objdump -d main.elf
cpp:
$(COMPILE) -E main.c
# 以下追記
# cファイルからsファイル作成
asm:
$(COMPILE) -S main.c
# sファイルからhexファイル作成
tar:
$(COMPILE) -o main.o main.s -c
$(COMPILE) -o main.elf main.o
rm -f main.hex
avr-objcopy -j .text -j .data -O ihex main.elf main.hex
avr-size --format=avr --mcu=$(DEVICE) main.elf