From abf70d8e0d82536eee9d33a45639053e867ee63c Mon Sep 17 00:00:00 2001 From: Fredrik Thulin Date: Thu, 10 Dec 2015 21:25:58 +0100 Subject: init, simple LED flasher for the tamper MCU --- tamper/src/led-test/build.sh | 7 + tamper/src/led-test/iotn828.h | 847 ++++++++++++++++++++++++++++++++++++++++++ tamper/src/led-test/main.c | 29 ++ 3 files changed, 883 insertions(+) create mode 100644 tamper/src/led-test/build.sh create mode 100644 tamper/src/led-test/iotn828.h create mode 100644 tamper/src/led-test/main.c diff --git a/tamper/src/led-test/build.sh b/tamper/src/led-test/build.sh new file mode 100644 index 0000000..e9d46b4 --- /dev/null +++ b/tamper/src/led-test/build.sh @@ -0,0 +1,7 @@ +#!/bin/bash + +set -e + +avr-gcc -mmcu=avr25 main.c -o main.elf +avr-objcopy -O ihex main.elf main.hex +sudo avrdude -c usbtiny -p attiny828 -U flash:w:main.hex diff --git a/tamper/src/led-test/iotn828.h b/tamper/src/led-test/iotn828.h new file mode 100644 index 0000000..016a2c5 --- /dev/null +++ b/tamper/src/led-test/iotn828.h @@ -0,0 +1,847 @@ +/***************************************************************************** + * + * Copyright (C) 2014 Atmel Corporation + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * + * * Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * + * * Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in + * the documentation and/or other materials provided with the + * distribution. + * + * * Neither the name of the copyright holders nor the names of + * contributors may be used to endorse or promote products derived + * from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" + * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE + * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF + * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS + * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN + * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) + * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE + * POSSIBILITY OF SUCH DAMAGE. + ****************************************************************************/ + + +/* $Id$ */ + +#ifndef _AVR_ATTINY828_H_INCLUDED +#define _AVR_ATTINY828_H_INCLUDED + + +#ifndef _AVR_IO_H_ +# error "Include instead of this file." +#endif + +#ifndef _AVR_IOXXX_H_ +# define _AVR_IOXXX_H_ "iotn828.h" +#else +# error "Attempt to include more than one file." +#endif + +/* Registers and associated bit numbers */ + +#define PINA _SFR_IO8(0x00) +#define PINA7 7 +#define PINA6 6 +#define PINA5 5 +#define PINA4 4 +#define PINA3 3 +#define PINA2 2 +#define PINA1 1 +#define PINA0 0 + +#define DDRA _SFR_IO8(0x01) +#define DDRA7 7 +#define DDRA6 6 +#define DDRA5 5 +#define DDRA4 4 +#define DDRA3 3 +#define DDRA2 2 +#define DDRA1 1 +#define DDRA0 0 + +#define PORTA _SFR_IO8(0x02) +#define PORTA7 7 +#define PORTA6 6 +#define PORTA5 5 +#define PORTA4 4 +#define PORTA3 3 +#define PORTA2 2 +#define PORTA1 1 +#define PORTA0 0 + +#define PUEA _SFR_IO8(0x03) + +#define PINB _SFR_IO8(0x04) +#define PINB7 7 +#define PINB6 6 +#define PINB5 5 +#define PINB4 4 +#define PINB3 3 +#define PINB2 2 +#define PINB1 1 +#define PINB0 0 + +#define DDRB _SFR_IO8(0x05) +#define DDRB7 7 +#define DDRB6 6 +#define DDRB5 5 +#define DDRB4 4 +#define DDRB3 3 +#define DDRB2 2 +#define DDRB1 1 +#define DDRB0 0 + +#define PORTB _SFR_IO8(0x06) +#define PORTB7 7 +#define PORTB6 6 +#define PORTB5 5 +#define PORTB4 4 +#define PORTB3 3 +#define PORTB2 2 +#define PORTB1 1 +#define PORTB0 0 + +#define PUEB _SFR_IO8(0x07) + +#define PINC _SFR_IO8(0x08) +#define PINC7 7 +#define PINC6 6 +#define PINC5 5 +#define PINC4 4 +#define PINC3 3 +#define PINC2 2 +#define PINC1 1 +#define PINC0 0 + +#define DDRC _SFR_IO8(0x09) +#define DDRC7 7 +#define DDRC6 6 +#define DDRC5 5 +#define DDRC4 4 +#define DDRC3 3 +#define DDRC2 2 +#define DDRC1 1 +#define DDRC0 0 + +#define PORTC _SFR_IO8(0x0A) +#define PORTC7 7 +#define PORTC6 6 +#define PORTC5 5 +#define PORTC4 4 +#define PORTC3 3 +#define PORTC2 2 +#define PORTC1 1 +#define PORTC0 0 + +#define PUEC _SFR_IO8(0x0B) + +#define PIND _SFR_IO8(0x0C) +#define PIND3 3 +#define PIND2 2 +#define PIND1 1 +#define PIND0 0 + +#define DDRD _SFR_IO8(0x0D) +#define DDRD3 3 +#define DDRD2 2 +#define DDRD1 1 +#define DDRD0 0 + +#define PORTD _SFR_IO8(0x0E) +#define PORTD3 3 +#define PORTD2 2 +#define PORTD1 1 +#define PORTD0 0 + +#define PUED _SFR_IO8(0x0F) + +/* Reserved [0x10..0x13] */ + +#define PHDE _SFR_IO8(0x14) +#define PHDEC 2 + +#define TIFR0 _SFR_IO8(0x15) +#define TOV0 0 +#define OCF0A 1 +#define OCF0B 2 + +#define TIFR1 _SFR_IO8(0x16) +#define TOV1 0 +#define OCF1A 1 +#define OCF1B 2 +#define ICF1 5 + +/* Reserved [0x17..0x1A] */ + +#define PCIFR _SFR_IO8(0x1B) +#define PCIF0 0 +#define PCIF1 1 +#define PCIF2 2 +#define PCIF3 3 + +#define EIFR _SFR_IO8(0x1C) +#define INTF0 0 +#define INTF1 1 + +#define EIMSK _SFR_IO8(0x1D) +#define INT0 0 +#define INT1 1 + +#define GPIOR0 _SFR_IO8(0x1E) + +#define EECR _SFR_IO8(0x1F) +#define EERE 0 +#define EEPE 1 +#define EEMPE 2 +#define EERIE 3 +#define EEPM0 4 +#define EEPM1 5 + +#define EEDR _SFR_IO8(0x20) + +#define EEAR _SFR_IO8(0x21) + +/* Reserved [0x22] */ + +#define GTCCR _SFR_IO8(0x23) +#define PSRSYNC 0 +#define TSM 7 + +#define TCCR0A _SFR_IO8(0x24) +#define WGM00 0 +#define WGM01 1 +#define COM0B0 4 +#define COM0B1 5 +#define COM0A0 6 +#define COM0A1 7 + +#define TCCR0B _SFR_IO8(0x25) +#define CS00 0 +#define CS01 1 +#define CS02 2 +#define WGM02 3 +#define FOC0B 6 +#define FOC0A 7 + +#define TCNT0 _SFR_IO8(0x26) + +#define OCR0A _SFR_IO8(0x27) + +#define OCR0B _SFR_IO8(0x28) + +/* Reserved [0x29] */ + +#define GPIOR1 _SFR_IO8(0x2A) + +#define GPIOR2 _SFR_IO8(0x2B) + +#define SPCR _SFR_IO8(0x2C) +#define SPR0 0 +#define SPR1 1 +#define CPHA 2 +#define CPOL 3 +#define MSTR 4 +#define DORD 5 +#define SPE 6 +#define SPIE 7 + +#define SPSR _SFR_IO8(0x2D) +#define SPI2X 0 +#define WCOL 6 +#define SPIF 7 + +#define SPDR _SFR_IO8(0x2E) + +#define ACSRB _SFR_IO8(0x2F) +#define ACPMUX0 0 +#define ACPMUX1 1 +#define ACNMUX0 2 +#define ACNMUX1 3 +#define HLEV 6 +#define HSEL 7 + +#define ACSRA _SFR_IO8(0x30) +#define ACIS0 0 +#define ACIS1 1 +#define ACIC 2 +#define ACIE 3 +#define ACI 4 +#define ACO 5 +#define ACPMUX2 6 +#define ACD 7 + +/* Reserved [0x31..0x32] */ + +#define SMCR _SFR_IO8(0x33) +#define SE 0 +#define SM0 1 +#define SM1 2 + +#define MCUSR _SFR_IO8(0x34) +#define PORF 0 +#define EXTRF 1 +#define BORF 2 +#define WDRF 3 + +#define MCUCR _SFR_IO8(0x35) +#define IVSEL 1 + +#define CCP _SFR_IO8(0x36) + +#define SPMCSR _SFR_IO8(0x37) +#define SPMEN 0 +#define PGERS 1 +#define PGWRT 2 +#define RWFLB 3 +#define RWWSRE 4 +#define RSIG 5 +#define RWWSB 6 +#define SPMIE 7 + +/* Reserved [0x38..0x3C] */ + +/* SP [0x3D..0x3E] */ + +/* SREG [0x3F] */ + +#define WDTCSR _SFR_MEM8(0x60) +#define WDE 3 +#define WDP0 0 +#define WDP1 1 +#define WDP2 2 +#define WDP3 5 +#define WDIE 6 +#define WDIF 7 + +#define CLKPR _SFR_MEM8(0x61) +#define CLKPS0 0 +#define CLKPS1 1 +#define CLKPS2 2 +#define CLKPS3 3 + +/* Reserved [0x62..0x63] */ + +#define PRR _SFR_MEM8(0x64) +#define PRADC 0 +#define PRUSART0 1 +#define PRSPI 2 +#define PRTIM1 3 +#define PRTIM0 5 +#define PRTWI 7 + +#define __AVR_HAVE_PRR ((1< +#include +//#include + +#include "iotn828.h" + +#define AVR_LED4 PORTA4 /* RED */ +#define AVR_LED3 5 /* YELLOW */ +#define AVR_LED2 6 /* GREEN */ +#define AVR_LED1 7 /* BLUE */ + + +void main() { + int i; + uint8_t j = 0; + + /* Enable PA4 output */ + // DDRA |= (1 << AVR_LED4) | (1 << AVR_LED3) | (1 << AVR_LED2) | (1 << AVR_LED1); + DDRA |= 0xf0; + + //PORTA = 0; + while (1) { + PORTA = (PORTA & 0x0f) | ((j++<<4) & 0xf0); + //PORTA ^= (1 << AVR_LED1); + //PORTA = j++; + for (i = 0; i < 10000; i++) { ; } + //_delay_ms (100); + } +} -- cgit v1.2.3