Software Toolchain for Windows


RealTerm (viewing UART)

Ateml Studio

Arduino Core Library

You may also need drivers:

UART

Software Toolchain for (Debian based) Linux

Following tools are usually present in most Linux systems out of the box.
$ sudo apt-get update
$ sudo apt-get install flex byacc bison gcc build-essential
		        
These tools are necessary for AVR-based micro-controller programming.
$ sudo apt-get install gcc-avr gdb-avr binutils-avr avr-libc avrdude
$ sudo apt-get install arduino-core arduino
				
Realterm is not available for Linux systems. Cutecom is very similar to Realterm.
$ sudo apt-get install cutecom
				
Usually FTDI drivers are installed in the Linux kernel by default. Otherwise, try the following.
$ sudo apt-get install libusb libusb-dev
Try the following test program to see if the software toolchain is properly setup in you Linux system.

#include 
#include 

int main()
{
	DDRB |= _BV(PB7);
	
	while(1)
	{
		PORTB ^= _BV(PB7);
		/* blink 4 times a second */
		_delay_ms(250); 	
	}
}

		        
Now, issue the following commands to compile and upload the code in the microcontroller.
$ avr-gcc -DF_CPU=16000000 -Os -g -mmcu=atmega1280 -Wall blinking.c -o blinking.o 
$ avr-objcopy -j .text -j .data ihex blinking.o blinking.hex
$ avrdude -p atmega1280 -c arduino -P /dev/ttyUSB0 -b 57600 -U flash:w:blinking.hex:i
		        
It is a good idea to automate the process using a makefile. Here is the makefile that can be used to compile and upload the code in the microcontroller.
		
PRG            = blinking
OBJ            = blinking.o
PROGRAMMER     = arduino
PORT           = /dev/ttyUSB0
MCU_TARGET     = atmega1280
AVRDUDE_TARGET = atmega1280
OPTIMIZE       = -Os
DEFS           = 
LIBS           = 
BAUDRATE       = 57600
HZ             = 16000000

# You should not have to change anything below here.

CC             = avr-gcc

# Override is only needed by avr-lib build system.

override CFLAGS        = -g -DF_CPU=$(HZ) -Wall $(OPTIMIZE) -mmcu=$(MCU_TARGET) $(DEFS)
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 *.hex *.bin *.srec
	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 $< $@


# command to program chip (invoked by running "make install")
install:  $(PRG).hex
	avrdude -p $(AVRDUDE_TARGET) -c $(PROGRAMMER) -P $(PORT) -b $(BAUDRATE) -v  \
         -U flash:w:$(PRG).hex 

fuse:
	avrdude -p $(AVRDUDE_TARGET) -c $(PROGRAMMER) -P $(PORT) -v \
	-U lfuse:w:0xc6:m -U hfuse:w:0xd9:m 	

ddd: gdbinit
	ddd --debugger "avr-gdb -x $(GDBINITFILE)"

gdbserver: gdbinit
	simulavr --device $(MCU_TARGET) --gdbserver

gdbinit: $(GDBINITFILE)

$(GDBINITFILE): $(PRG).hex
	@echo "file $(PRG).elf" > $(GDBINITFILE)

	@echo "target remote localhost:1212" >> $(GDBINITFILE)
	@echo "load"                         >> $(GDBINITFILE)
	@echo "break main"                   >> $(GDBINITFILE)
	@echo
	@echo "Use 'avr-gdb -x $(GDBINITFILE)'"

				
Now issue the following command to compile and upload the command using this makefile.
$ make && make install 
You can download our complete makefile (adapted from here).
If you receive permission denied kind of errors, you may need to issue the following.
$ sudo chmod 666 /dev/ttyUSB0