initial
This commit is contained in:
commit
ef10854bbe
72
Makefile
Normal file
72
Makefile
Normal file
@ -0,0 +1,72 @@
|
|||||||
|
PRG = ispprog
|
||||||
|
OBJ = ispprog.o
|
||||||
|
MCU_TARGET = atmega16
|
||||||
|
OPTIMIZE = -Os
|
||||||
|
|
||||||
|
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)
|
||||||
|
override LDFLAGS = -Wl,-Map,$(PRG).map
|
||||||
|
|
||||||
|
OBJCOPY = avr-objcopy
|
||||||
|
OBJDUMP = avr-objdump
|
||||||
|
SIZE = avr-size
|
||||||
|
|
||||||
|
all: $(PRG).elf lst text eeprom
|
||||||
|
$(SIZE) -x -A $(PRG).elf
|
||||||
|
|
||||||
|
$(PRG).elf: $(OBJ)
|
||||||
|
$(CC) $(CFLAGS) $(LDFLAGS) -o $@ $^ $(LIBS)
|
||||||
|
|
||||||
|
clean:
|
||||||
|
rm -rf *.o *.lst *.map $(PRG).elf *.hex *.bin *.srec
|
||||||
|
|
||||||
|
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 $< $@
|
||||||
|
|
||||||
|
install: text
|
||||||
|
# uisp -dprog=stk200 --erase --upload if=$(PRG).srec --verify
|
||||||
|
avrdude -p m16 -c butterfly -b 115200 -U flash:w:$(PRG).srec
|
1931
avr910_2313_v38b.asm
Normal file
1931
avr910_2313_v38b.asm
Normal file
File diff suppressed because it is too large
Load Diff
246
ispprog.c
Normal file
246
ispprog.c
Normal file
@ -0,0 +1,246 @@
|
|||||||
|
#include <avr/io.h>
|
||||||
|
#include <stdio.h>
|
||||||
|
#include <stdlib.h>
|
||||||
|
#include <stdint.h>
|
||||||
|
|
||||||
|
#define F_CPU 7372800
|
||||||
|
#define BAUDRATE 115200
|
||||||
|
|
||||||
|
#define UART_CALC_BAUDRATE(baudRate) (((uint32_t)F_CPU) / (((uint32_t)baudRate)*16) -1)
|
||||||
|
|
||||||
|
void sendchar(uint8_t data)
|
||||||
|
{
|
||||||
|
loop_until_bit_is_set(UCSRA, UDRE);
|
||||||
|
UDR = data;
|
||||||
|
}
|
||||||
|
|
||||||
|
uint8_t recvchar(void)
|
||||||
|
{
|
||||||
|
loop_until_bit_is_set(UCSRA, RXC);
|
||||||
|
return UDR;
|
||||||
|
}
|
||||||
|
|
||||||
|
int main(void)
|
||||||
|
{
|
||||||
|
// reset & activity as outputs
|
||||||
|
PORTB = (1<<PORTB1) | (1<<PORTB3);
|
||||||
|
DDRB = (1<<PORTB1) | (1<<PORTB3);
|
||||||
|
|
||||||
|
// Set baud rate
|
||||||
|
UBRRH = (UART_CALC_BAUDRATE(BAUDRATE)>>8) & 0xFF;
|
||||||
|
UBRRL = (UART_CALC_BAUDRATE(BAUDRATE) & 0xFF);
|
||||||
|
|
||||||
|
// enable rx & tx
|
||||||
|
UCSRB = (1<<TXEN) | (1<<RXEN);
|
||||||
|
UCSRC = (1<<URSEL) | (1<<UCSZ1) | (1<<UCSZ0);
|
||||||
|
|
||||||
|
while (1) {
|
||||||
|
switch (recvchar()) {
|
||||||
|
// Enter programming mode
|
||||||
|
case 'P':
|
||||||
|
sendchar('\r');
|
||||||
|
break;
|
||||||
|
|
||||||
|
// Report autoincrement address
|
||||||
|
case 'a':
|
||||||
|
sendchar('Y');
|
||||||
|
break;
|
||||||
|
|
||||||
|
// Set address
|
||||||
|
case 'A':
|
||||||
|
recvchar();
|
||||||
|
recvchar();
|
||||||
|
sendchar('\r');
|
||||||
|
break;
|
||||||
|
|
||||||
|
// Write program memory, low byte
|
||||||
|
case 'c':
|
||||||
|
recvchar();
|
||||||
|
sendchar('\r');
|
||||||
|
break;
|
||||||
|
|
||||||
|
// Write program memory, high byte
|
||||||
|
case 'C':
|
||||||
|
recvchar();
|
||||||
|
sendchar('\r');
|
||||||
|
break;
|
||||||
|
|
||||||
|
// Issue Page Write
|
||||||
|
case 'm':
|
||||||
|
sendchar('\r');
|
||||||
|
break;
|
||||||
|
|
||||||
|
// Read program memory
|
||||||
|
case 'R':
|
||||||
|
sendchar(0x00);
|
||||||
|
sendchar(0x00);
|
||||||
|
break;
|
||||||
|
|
||||||
|
// Write data memory
|
||||||
|
case 'D':
|
||||||
|
recvchar();
|
||||||
|
sendchar('\r');
|
||||||
|
break;
|
||||||
|
|
||||||
|
// Read data memory
|
||||||
|
case 'd':
|
||||||
|
sendchar(0x00);
|
||||||
|
break;
|
||||||
|
|
||||||
|
// Chip erase
|
||||||
|
case 'e':
|
||||||
|
sendchar('\r');
|
||||||
|
break;
|
||||||
|
|
||||||
|
// Write lock bits
|
||||||
|
case 'l':
|
||||||
|
recvchar();
|
||||||
|
sendchar('\r');
|
||||||
|
break;
|
||||||
|
// Leave programming mode
|
||||||
|
case 'L':
|
||||||
|
sendchar('\r');
|
||||||
|
break;
|
||||||
|
|
||||||
|
// Select device type
|
||||||
|
case 'T':
|
||||||
|
recvchar();
|
||||||
|
sendchar('\r');
|
||||||
|
break;
|
||||||
|
|
||||||
|
// Read signature bytes
|
||||||
|
case 's':
|
||||||
|
sendchar(0x00);
|
||||||
|
sendchar(0x00);
|
||||||
|
sendchar(0x00);
|
||||||
|
break;
|
||||||
|
|
||||||
|
// Return supported device codes
|
||||||
|
case 't':
|
||||||
|
sendchar(0x00);
|
||||||
|
break;
|
||||||
|
|
||||||
|
// Return software identifier
|
||||||
|
case 'S':
|
||||||
|
sendchar('I');
|
||||||
|
sendchar('S');
|
||||||
|
sendchar('P');
|
||||||
|
sendchar('P');
|
||||||
|
sendchar('R');
|
||||||
|
sendchar('O');
|
||||||
|
sendchar('G');
|
||||||
|
break;
|
||||||
|
|
||||||
|
// Return software version
|
||||||
|
case 'V':
|
||||||
|
sendchar('0');
|
||||||
|
sendchar('0');
|
||||||
|
break;
|
||||||
|
|
||||||
|
// Return hardware version
|
||||||
|
case 'v':
|
||||||
|
sendchar('0');
|
||||||
|
sendchar('0');
|
||||||
|
break;
|
||||||
|
|
||||||
|
// Return programmer type
|
||||||
|
case 'p':
|
||||||
|
sendchar('S');
|
||||||
|
break;
|
||||||
|
|
||||||
|
// Set/Clear LED
|
||||||
|
case 'x':
|
||||||
|
case 'y':
|
||||||
|
recvchar();
|
||||||
|
break;
|
||||||
|
|
||||||
|
// Universial command
|
||||||
|
case ':':
|
||||||
|
recvchar();
|
||||||
|
recvchar();
|
||||||
|
recvchar();
|
||||||
|
sendchar(0x00);
|
||||||
|
break;
|
||||||
|
|
||||||
|
// New universal command
|
||||||
|
case '.':
|
||||||
|
recvchar();
|
||||||
|
recvchar();
|
||||||
|
recvchar();
|
||||||
|
recvchar();
|
||||||
|
sendchar(0x00);
|
||||||
|
break;
|
||||||
|
|
||||||
|
// Exit (AVR109, Bootloader)
|
||||||
|
case 'E':
|
||||||
|
sendchar('\r');
|
||||||
|
break;
|
||||||
|
|
||||||
|
// Return Chip ID (Terminalmode only)
|
||||||
|
case 'i':
|
||||||
|
break;
|
||||||
|
|
||||||
|
// Report Block write Mode (AVR109)
|
||||||
|
case 'b':
|
||||||
|
sendchar('Y');
|
||||||
|
sendchar(0x00);
|
||||||
|
sendchar(0x00);
|
||||||
|
sendchar('\r');
|
||||||
|
break;
|
||||||
|
|
||||||
|
// Block Write (AVR109)
|
||||||
|
case 'B':
|
||||||
|
recvchar();
|
||||||
|
recvchar();
|
||||||
|
recvchar();
|
||||||
|
sendchar('\n');
|
||||||
|
break;
|
||||||
|
|
||||||
|
// Block Read (AVR109)
|
||||||
|
case 'g':
|
||||||
|
recvchar();
|
||||||
|
recvchar();
|
||||||
|
recvchar();
|
||||||
|
sendchar('\n');
|
||||||
|
break;
|
||||||
|
|
||||||
|
// Return Lockbits
|
||||||
|
case 'r':
|
||||||
|
sendchar(0x00);
|
||||||
|
sendchar('\r');
|
||||||
|
break;
|
||||||
|
|
||||||
|
// Return High Fusebits
|
||||||
|
case 'N':
|
||||||
|
sendchar(0x00);
|
||||||
|
sendchar('\r');
|
||||||
|
break;
|
||||||
|
|
||||||
|
// Return extendet Fusebits
|
||||||
|
case 'Q':
|
||||||
|
sendchar(0x00);
|
||||||
|
sendchar('\r');
|
||||||
|
break;
|
||||||
|
|
||||||
|
// Write fuse bits
|
||||||
|
case 'f':
|
||||||
|
recvchar();
|
||||||
|
sendchar('\r');
|
||||||
|
break;
|
||||||
|
|
||||||
|
// Read fuse and lock bits
|
||||||
|
case 'F':
|
||||||
|
sendchar(0x00);
|
||||||
|
break;
|
||||||
|
|
||||||
|
case 0x1B:
|
||||||
|
break;
|
||||||
|
|
||||||
|
default:
|
||||||
|
sendchar('?');
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return 0;
|
||||||
|
}
|
Loading…
Reference in New Issue
Block a user