summaryrefslogtreecommitdiffstats
path: root/cpukit/score/cpu/avr/avr/iom406.h
diff options
context:
space:
mode:
Diffstat (limited to 'cpukit/score/cpu/avr/avr/iom406.h')
-rw-r--r--cpukit/score/cpu/avr/avr/iom406.h768
1 files changed, 768 insertions, 0 deletions
diff --git a/cpukit/score/cpu/avr/avr/iom406.h b/cpukit/score/cpu/avr/avr/iom406.h
new file mode 100644
index 0000000000..466e6478ca
--- /dev/null
+++ b/cpukit/score/cpu/avr/avr/iom406.h
@@ -0,0 +1,768 @@
+/* Copyright (c) 2006, Pieter Conradie
+ 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$ */
+
+/* avr/iom406.h - definitions for ATmega406 */
+
+#ifndef _AVR_IOM406_H_
+#define _AVR_IOM406_H_ 1
+
+/* This file should only be included from <avr/io.h>, never directly. */
+
+#ifndef _AVR_IO_H_
+# error "Include <avr/io.h> instead of this file."
+#endif
+
+#ifndef _AVR_IOXXX_H_
+# define _AVR_IOXXX_H_ "iom406.h"
+#else
+# error "Attempt to include more than one <avr/ioXXX.h> file."
+#endif
+
+/* I/O registers */
+
+#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 DDA7 7
+#define DDA6 6
+#define DDA5 5
+#define DDA4 4
+#define DDA3 3
+#define DDA2 2
+#define DDA1 1
+#define DDA0 0
+
+#define PORTA _SFR_IO8(0x02)
+#define PA7 7
+#define PA6 6
+#define PA5 5
+#define PA4 4
+#define PA3 3
+#define PA2 2
+#define PA1 1
+#define PA0 0
+
+#define PINB _SFR_IO8(0x03)
+#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(0x04)
+#define DDB7 7
+#define DDB6 6
+#define DDB5 5
+#define DDB4 4
+#define DDB3 3
+#define DDB2 2
+#define DDB1 1
+#define DDB0 0
+
+#define PORTB _SFR_IO8(0x05)
+#define PB7 7
+#define PB6 6
+#define PB5 5
+#define PB4 4
+#define PB3 3
+#define PB2 2
+#define PB1 1
+#define PB0 0
+
+/* Reserved [0x06..0x07] */
+
+#define PORTC _SFR_IO8(0x08)
+#define PC0 0
+
+#define PIND _SFR_IO8(0x09)
+#define PIND1 1
+#define PIND0 0
+
+#define DDRD _SFR_IO8(0x0A)
+#define DDD1 1
+#define DDD0 0
+
+#define PORTD _SFR_IO8(0x0B)
+#define PD1 1
+#define PD0 0
+
+/* Reserved [0x0C..0x14] */
+
+/* Timer/Counter0 Interrupt Flag Register */
+#define TIFR0 _SFR_IO8(0x15)
+#define OCF0B 2
+#define OCF0A 1
+#define TOV0 0
+
+/* Timer/Counter1 Interrupt Flag Register */
+#define TIFR1 _SFR_IO8(0x16)
+#define OCF1A 1
+#define TOV1 0
+
+/* Reserved [0x17..0x1A] */
+
+/* Pin Change Interrupt Control Register */
+#define PCIFR _SFR_IO8(0x1B)
+#define PCIF1 1
+#define PCIF0 0
+
+/* External Interrupt Flag Register */
+#define EIFR _SFR_IO8(0x1C)
+#define INTF3 3
+#define INTF2 2
+#define INTF1 1
+#define INTF0 0
+
+/* External Interrupt MaSK register */
+#define EIMSK _SFR_IO8(0x1D)
+#define INT3 3
+#define INT2 2
+#define INT1 1
+#define INT0 0
+
+/* General Purpose I/O Register 0 */
+#define GPIOR0 _SFR_IO8(0x1E)
+
+/* EEPROM Control Register */
+#define EECR _SFR_IO8(0x1F)
+#define EEPM1 5
+#define EEPM0 4
+#define EERIE 3
+#define EEMPE 2
+#define EEPE 1
+#define EERE 0
+
+/* EEPROM Data Register */
+#define EEDR _SFR_IO8(0x20)
+
+/* EEPROM Address Register */
+#define EEAR _SFR_IO16(0x21)
+#define EEARL _SFR_IO8(0x21)
+#define EEARH _SFR_IO8(0x22)
+
+/* 6-char sequence denoting where to find the EEPROM registers in memory space.
+ Adresses denoted in hex syntax with uppercase letters. Used by the EEPROM
+ subroutines.
+ First two letters: EECR address.
+ Second two letters: EEDR address.
+ Last two letters: EEAR address. */
+#define __EEPROM_REG_LOCATIONS__ 1F2021
+
+/* General Timer/Counter Control Register */
+#define GTCCR _SFR_IO8(0x23)
+#define TSM 7
+#define PSRSYNC 0
+
+/* Timer/Counter Control Register A */
+#define TCCR0A _SFR_IO8(0x24)
+#define COM0A1 7
+#define COM0A0 6
+#define COM0B1 5
+#define COM0B0 4
+#define WGM01 1
+#define WGM00 0
+
+/* Timer/Counter Control Register B */
+#define TCCR0B _SFR_IO8(0x25)
+#define FOC0A 7
+#define FOC0B 6
+#define WGM02 3
+#define CS02 2
+#define CS01 1
+#define CS00 0
+
+/* Timer/Counter 0 */
+#define TCNT0 _SFR_IO8(0x26)
+
+/* Output Compare Register A */
+#define OCR0A _SFR_IO8(0x27)
+
+/* Output Compare Register B */
+#define OCR0B _SFR_IO8(0x28)
+
+/* Reserved [0x29] */
+
+/* General Purpose I/O Register 1 */
+#define GPIOR1 _SFR_IO8(0x2A)
+
+/* General Purpose I/O Register 2 */
+#define GPIOR2 _SFR_IO8(0x2B)
+
+/* Reserved [0x2C..0x30] */
+
+/* On-chip Debug Register */
+#define OCDR _SFR_IO8(0x31)
+
+/* Reserved [0x32] */
+
+/* Sleep Mode Control Register */
+#define SMCR _SFR_IO8(0x33)
+#define SM2 3
+#define SM1 2
+#define SM0 1
+#define SE 0
+
+/* MCU Status Register */
+#define MCUSR _SFR_IO8(0x34)
+#define JTRF 4
+#define WDRF 3
+#define BODRF 2
+#define EXTRF 1
+#define PORF 0
+
+/* MCU general Control Register */
+#define MCUCR _SFR_IO8(0x35)
+#define JTD 7
+#define PUD 4
+#define IVSEL 1
+#define IVCE 0
+
+/* Reserved [0x36] */
+
+/* Store Program Memory Control and Status Register */
+#define SPMCSR _SFR_IO8(0x37)
+#define SPMIE 7
+#define RWWSB 6
+#define SIGRD 5
+#define RWWSRE 4
+#define BLBSET 3
+#define PGWRT 2
+#define PGERS 1
+#define SPMEN 0
+
+/* Reserved [0x36..0x3C] */
+
+/* 0x3D..0x3E SP */
+
+/* 0x3F SREG */
+
+/* Extended I/O registers */
+
+/* Watchdog Timer Control Register */
+#define WDTCSR _SFR_MEM8(0x60)
+#define WDIF 7
+#define WDIE 6
+#define WDP3 5
+#define WDCE 4
+#define WDE 3
+#define WDP2 2
+#define WDP1 1
+#define WDP0 0
+
+/* Reserved [0x61] */
+
+/* Wake-up Timer Control and Status Register */
+#define WUTCSR _SFR_MEM8(0x62)
+#define WUTIF 7
+#define WUTIE 6
+#define WUTCF 5
+#define WUTR 4
+#define WUTE 3
+#define WUTP2 2
+#define WUTP1 1
+#define WUTP0 0
+
+/* Reserved [0x63] */
+
+/* Power Reduction Register 0 */
+#define PRR0 _SFR_MEM8(0x64)
+#define PRTWI 3
+#define PRTIM1 2
+#define PRTIM0 1
+#define PRVADC 0
+
+/* Reserved [0x65] */
+
+/* Fast Oscillator Calibration Register */
+#define FOSCCAL _SFR_MEM8(0x66)
+
+/* Reserved [0x67] */
+
+/* Pin Change Interrupt Control Register */
+#define PCICR _SFR_MEM8(0x68)
+#define PCIE1 1
+#define PCIE0 0
+
+/* External Interrupt Control Register A */
+#define EICRA _SFR_MEM8(0x69)
+#define ISC31 7
+#define ISC30 6
+#define ISC21 5
+#define ISC20 4
+#define ISC11 3
+#define ISC10 2
+#define ISC01 1
+#define ISC00 0
+
+/* Reserved [0x6A] */
+
+/* Pin Change Mask Register 0 */
+#define PCMSK0 _SFR_MEM8(0x6B)
+#define PCINT7 7
+#define PCINT6 6
+#define PCINT5 5
+#define PCINT4 4
+#define PCINT3 3
+#define PCINT2 2
+#define PCINT1 1
+#define PCINT0 0
+
+/* Pin Change Mask Register 1 */
+#define PCMSK1 _SFR_MEM8(0x6C)
+#define PCINT15 7
+#define PCINT14 6
+#define PCINT13 5
+#define PCINT12 4
+#define PCINT11 3
+#define PCINT10 2
+#define PCINT9 1
+#define PCINT8 0
+
+/* Reserved [0x6D] */
+
+/* Timer/Counter Interrupt MaSK register 0 */
+#define TIMSK0 _SFR_MEM8(0x6E)
+#define OCIE0B 2
+#define OCIE0A 1
+#define TOIE0 0
+
+/* Timer/Counter Interrupt MaSK register 1 */
+#define TIMSK1 _SFR_MEM8(0x6F)
+#define OCIE1A 1
+#define TOIE1 0
+
+/* Reserved [0x70..0x77] */
+
+/* V-ADC Data Register */
+#define VADC _SFR_MEM16(0x78)
+#define VADCL _SFR_MEM8(0x78)
+#define VADCH _SFR_MEM8(0x79)
+
+/* V-ADC Control and Status Register */
+#define VADCSR _SFR_MEM8(0x7A)
+#define VADEN 3
+#define VADSC 2
+#define VADCCIF 1
+#define VADCCIE 0
+
+/* Reserved [0x7B] */
+
+/* V-ADC Multiplexer Selection Register */
+#define VADMUX _SFR_MEM8(0x7C)
+#define VADMUX3 3
+#define VADMUX2 2
+#define VADMUX1 1
+#define VADMUX0 0
+
+/* Reserved [0x7D] */
+
+/* Digital Input Disable Register 0 */
+#define DIDR0 _SFR_MEM8(0x7E)
+#define VADC3D 3
+#define VADC2D 2
+#define VADC1D 1
+#define VADC0D 0
+
+/* Reserved [0x82..0x83] */
+
+/* Timer/Counter 1 Control and Status Register */
+#define TCCR1B _SFR_MEM8(0x81)
+#define CTC1 3
+#define CS12 2
+#define CS11 1
+#define CS10 0
+
+/* Reserved [0x82..0x83] */
+
+/* Timer/Counter 1 */
+#define TCNT1 _SFR_MEM16(0x84)
+#define TCNT1L _SFR_MEM8(0x84)
+#define TCNT1H _SFR_MEM8(0x85)
+
+/* Reserved [0x86..0x87] */
+
+/* Timer/Counter1 Output Compare Register A */
+#define OCR1A _SFR_MEM16(0x88)
+#define OCR1AL _SFR_MEM8(0x88)
+#define OCR1AH _SFR_MEM8(0x89)
+
+/* Reserved [0x8A..0xB7] */
+
+/* 2-wire Serial Interface Bit Rate Register */
+#define TWBR _SFR_MEM8(0xB8)
+
+/* 2-wire Serial Interface Status Register */
+#define TWSR _SFR_MEM8(0xB9)
+#define TWS7 7
+#define TWS6 6
+#define TWS5 5
+#define TWS4 4
+#define TWS3 3
+#define TWPS1 1
+#define TWPS0 0
+
+/* 2-wire Serial Interface Address Register */
+#define TWAR _SFR_MEM8(0xBA)
+#define TWA6 7
+#define TWA5 6
+#define TWA4 5
+#define TWA3 4
+#define TWA2 3
+#define TWA1 2
+#define TWA0 1
+#define TWGCE 0
+
+/* 2-wire Serial Interface Data Register */
+#define TWDR _SFR_MEM8(0xBB)
+
+/* 2-wire Serial Interface Control Register */
+#define TWCR _SFR_MEM8(0xBC)
+#define TWINT 7
+#define TWEA 6
+#define TWSTA 5
+#define TWSTO 4
+#define TWWC 3
+#define TWEN 2
+#define TWIE 0
+
+/* 2-wire Serial (Slave) Address Mask Register */
+#define TWAMR _SFR_MEM8(0xBD)
+#define TWAM6 7
+#define TWAM5 6
+#define TWAM4 5
+#define TWAM3 4
+#define TWAM2 3
+#define TWAM1 2
+#define TWAM0 1
+
+/* 2-wire Serial Bus Control and Status Register */
+#define TWBCSR _SFR_MEM8(0xBE)
+#define TWBCIF 7
+#define TWBCIE 6
+#define TWBDT1 2
+#define TWBDT0 1
+#define TWBCIP 0
+
+/* Reserved [0xBF] */
+
+/* Clock Control Status Register */
+#define CCSR _SFR_MEM8(0xC0)
+#define XOE 1
+#define ACS 0
+
+/* Reserved [0xC1..0xCF] */
+
+/* Bandgap Calibration C Register */
+#define BGCCR _SFR_MEM8(0xD0)
+#define BGEN 7
+#define BGCC5 5
+#define BGCC4 4
+#define BGCC3 3
+#define BGCC2 2
+#define BGCC1 1
+#define BGCC0 0
+
+/* Bandgap Calibration R Register */
+#define BGCRR _SFR_MEM8(0xD1)
+#define BGCR7 7
+#define BGCR6 6
+#define BGCR5 5
+#define BGCR4 4
+#define BGCR3 3
+#define BGCR2 2
+#define BGCR1 1
+#define BGCR0 0
+
+/* Reserved [0xD2..0xDF] */
+
+/* CC-ADC Accumulate Current */
+/* TODO: Add _SFR_MEM32 */
+/* #define CADAC _SFR_MEM32(0xE0) */
+#define CADAC0 _SFR_MEM8(0xE0)
+#define CADAC1 _SFR_MEM8(0xE1)
+#define CADAC2 _SFR_MEM8(0xE2)
+#define CADAC3 _SFR_MEM8(0xE3)
+
+/* CC-ADC Control and Status Register A */
+#define CADCSRA _SFR_MEM8(0xE4)
+#define CADEN 7
+#define CADUB 5
+#define CADAS1 4
+#define CADAS0 3
+#define CADSI1 2
+#define CADSI0 1
+#define CADSE 0
+
+/* CC-ADC Control and Status Register B */
+#define CADCSRB _SFR_MEM8(0xE5)
+#define CADACIE 6
+#define CADRCIE 5
+#define CADICIE 4
+#define CADACIF 2
+#define CADRCIF 1
+#define CADICIF 0
+
+/* CC-ADC Regular Charge Current */
+#define CADRCC _SFR_MEM8(0xE6)
+
+/* CC-ADC Regular Discharge Current */
+#define CADRDC _SFR_MEM8(0xE7)
+
+/* CC-ADC Instantaneous Current */
+#define CADIC _SFR_MEM16(0xE8)
+#define CADICL _SFR_MEM8(0xE8)
+#define CADICH _SFR_MEM8(0xE9)
+
+/* Reserved [0xEA..0xEF] */
+
+/* FET Control and Status Register */
+#define FCSR _SFR_MEM8(0xF0)
+#define PWMOC 5
+#define PWMOPC 4
+#define CPS 3
+#define DFE 2
+#define CFE 1
+#define PFD 0
+
+/* Cell Balancing Control Register */
+#define CBCR _SFR_MEM8(0xF1)
+#define CBE4 3
+#define CBE3 2
+#define CBE2 1
+#define CBE1 0
+
+/* Battery Protection Interrupt Register */
+#define BPIR _SFR_MEM8(0xF2)
+#define DUVIF 7
+#define COCIF 6
+#define DOCIF 5
+#define SCIF 4
+#define DUVIE 3
+#define COCIE 2
+#define DOCIE 1
+#define SCIE 0
+
+/* Battery Protection Deep Under Voltage Register */
+#define BPDUV _SFR_MEM8(0xF3)
+#define DUVT1 5
+#define DUVT0 4
+#define DUDL3 3
+#define DUDL2 2
+#define DUDL1 1
+#define DUDL0 0
+
+/* Battery Protection Short-circuit Detection Level Register */
+#define BPSCD _SFR_MEM8(0xF4)
+#define SCDL3 3
+#define SCDL2 2
+#define SCDL1 1
+#define SCDL0 0
+
+/* Battery Protection Over-current Detection Level Register */
+#define BPOCD _SFR_MEM8(0xF5)
+#define DCDL3 7
+#define DCDL2 6
+#define DCDL1 5
+#define DCDL0 4
+#define CCDL3 3
+#define CCDL2 2
+#define CCDL1 1
+#define CCDL0 0
+
+/* Current Battery Protection Timing Register */
+#define CBPTR _SFR_MEM8(0xF6)
+#define SCPT3 7
+#define SCPT2 6
+#define SCPT1 5
+#define SCPT0 4
+#define OCPT3 3
+#define OCPT2 2
+#define OCPT1 1
+#define OCPT0 0
+
+/* Battery Protection Control Register */
+#define BPCR _SFR_MEM8(0xF7)
+#define DUVD 3
+#define SCD 2
+#define DCD 1
+#define CCD 0
+
+/* Battery Protection Parameter Lock Register */
+#define BPPLR _SFR_MEM8(0xF8)
+#define BPPLE 1
+#define BPPL 0
+
+/* Reserved [0xF9..0xFF] */
+
+/* Interrupt vectors */
+/* Battery Protection Interrupt */
+#define BPINT_vect _VECTOR(1)
+
+
+/* External Interrupt Request 0 */
+#define INT0_vect _VECTOR(2)
+
+
+/* External Interrupt Request 1 */
+#define INT1_vect _VECTOR(3)
+
+
+/* External Interrupt Request 2 */
+#define INT2_vect _VECTOR(4)
+
+
+/* External Interrupt Request 3 */
+#define INT3_vect _VECTOR(5)
+
+
+/* Pin Change Interrupt 0 */
+#define PCINT0_vect _VECTOR(6)
+
+
+/* Pin Change Interrupt 1 */
+#define PCINT1_vect _VECTOR(7)
+
+
+/* Watchdog Timeout Interrupt */
+#define WDT_vect _VECTOR(8)
+
+
+/* Wakeup timer overflow */
+#define WAKE_UP_vect _VECTOR(9)
+
+
+/* Timer/Counter 1 Compare Match */
+#define TIM1_COMP_vect _VECTOR(10)
+
+
+/* Timer/Counter 1 Overflow */
+#define TIM1_OVF_vect _VECTOR(11)
+
+
+/* Timer/Counter0 Compare A Match */
+#define TIM0_COMPA_vect _VECTOR(12)
+
+
+/* Timer/Counter0 Compare B Match */
+#define TIM0_COMPB_vect _VECTOR(13)
+
+
+/* Timer/Counter0 Overflow */
+#define TIM0_OVF_vect _VECTOR(14)
+
+
+/* Two-Wire Bus Connect/Disconnect */
+#define TWI_BUS_CD_vect _VECTOR(15)
+
+
+/* Two-Wire Serial Interface */
+#define TWI_vect _VECTOR(16)
+
+
+/* Voltage ADC Conversion Complete */
+#define VADC_vect _VECTOR(17)
+
+
+/* Coulomb Counter ADC Conversion Complete */
+#define CCADC_CONV_vect _VECTOR(18)
+
+/* Coloumb Counter ADC Regular Current */
+#define CCADC_REG_CUR_vect _VECTOR(19)
+
+
+/* Coloumb Counter ADC Accumulator */
+#define CCADC_ACC_vect _VECTOR(20)
+
+
+/* EEPROM Ready */
+#define EE_READY_vect _VECTOR(21)
+
+
+/* Store Program Memory Ready */
+#define SPM_READY_vect _VECTOR(22)
+
+#define _VECTORS_SIZE 92
+
+/* Constants */
+#define SPM_PAGESIZE 128
+#define RAMEND 0x8FF
+#define XRAMEND RAMEND
+#define E2END 0x1FF
+#define E2PAGESIZE 4
+#define FLASHEND 0x9FFF
+
+
+/* Fuses */
+
+#define FUSE_MEMORY_SIZE 2
+
+/* Low Fuse Byte */
+#define FUSE_CKSEL (unsigned char)~_BV(0)
+#define FUSE_SUT0 (unsigned char)~_BV(1)
+#define FUSE_SUT1 (unsigned char)~_BV(2)
+#define FUSE_BOOTRST (unsigned char)~_BV(3)
+#define FUSE_BOOTSZ0 (unsigned char)~_BV(4)
+#define FUSE_BOOTSZ1 (unsigned char)~_BV(5)
+#define FUSE_EESAVE (unsigned char)~_BV(6)
+#define FUSE_WDTON (unsigned char)~_BV(7)
+#define LFUSE_DEFAULT (FUSE_SUT0 & FUSE_BOOTSZ0 & FUSE_BOOTSZ1)
+
+/* High Fuse Byte */
+#define FUSE_JTAGEN (unsigned char)~_BV(0)
+#define FUSE_OCDEN (unsigned char)~_BV(1)
+#define HFUSE_DEFAULT (FUSE_JTAGEN)
+
+
+/* Lock Bits */
+#define __LOCK_BITS_EXIST
+#define __BOOT_LOCK_BITS_0_EXIST
+#define __BOOT_LOCK_BITS_1_EXIST
+
+
+/* Signature */
+#define SIGNATURE_0 0x1E
+#define SIGNATURE_1 0x95
+#define SIGNATURE_2 0x07
+
+
+#endif /* _AVR_IOM406_H_ */