Add AVR support
This requires support in LLVM, as AVR support is still experimental. For example, in bindings/go/build.sh, add -DLLVM_EXPERIMENTAL_TARGETS_TO_BUILD=AVR to cmake_flags.
Этот коммит содержится в:
		
							родитель
							
								
									802302a1aa
								
							
						
					
					
						коммит
						90fb0ee4eb
					
				
					 264 изменённых файлов: 105721 добавлений и 3 удалений
				
			
		
							
								
								
									
										22
									
								
								Makefile
									
										
									
									
									
								
							
							
						
						
									
										22
									
								
								Makefile
									
										
									
									
									
								
							| 
						 | 
				
			
			@ -3,7 +3,7 @@
 | 
			
		|||
all: tgo
 | 
			
		||||
tgo: build/tgo
 | 
			
		||||
 | 
			
		||||
.PHONY: all tgo run-hello run-blinky flash-blinky clean gen-device gen-device-nrf
 | 
			
		||||
.PHONY: all tgo run-hello run-blinky clean gen-device gen-device-nrf
 | 
			
		||||
 | 
			
		||||
# Custom LLVM toolchain.
 | 
			
		||||
LLVM := $(shell go env GOPATH)/src/github.com/aykevl/llvm/bindings/go/llvm/workdir/llvm_build/bin/
 | 
			
		||||
| 
						 | 
				
			
			@ -43,6 +43,16 @@ RUNTIME_PARTS += build/runtime_nrf.bc
 | 
			
		|||
RUNTIME_PARTS += build/nrfx_system_nrf52.bc
 | 
			
		||||
OBJ += build/nrfx_startup_nrf51.o # TODO nrf52, see https://bugs.llvm.org/show_bug.cgi?id=31601
 | 
			
		||||
 | 
			
		||||
else ifeq ($(TARGET),arduino)
 | 
			
		||||
GCC = avr-gcc
 | 
			
		||||
AS = avr-as -mmcu=atmega328p
 | 
			
		||||
LD = avr-ld -T avr.ld --gc-sections
 | 
			
		||||
SIZE = avr-size
 | 
			
		||||
OBJCOPY = avr-objcopy
 | 
			
		||||
LLFLAGS += -target avr8--
 | 
			
		||||
TGOFLAGS += -target $(TARGET)
 | 
			
		||||
OBJ += build/avr.o
 | 
			
		||||
 | 
			
		||||
else
 | 
			
		||||
$(error Unknown target)
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -56,8 +66,13 @@ run-hello: build/hello
 | 
			
		|||
run-blinky: build/blinky
 | 
			
		||||
	./build/blinky
 | 
			
		||||
 | 
			
		||||
flash-blinky: build/blinky.hex
 | 
			
		||||
ifeq ($(TARGET),pca10040)
 | 
			
		||||
flash-%: build/%.hex
 | 
			
		||||
	nrfjprog -f nrf52 --sectorerase --program $< --reset
 | 
			
		||||
else ifeq ($(TARGET),arduino)
 | 
			
		||||
flash-%: build/%.hex
 | 
			
		||||
	avrdude -c arduino -p atmega328p -P /dev/ttyACM0 -U flash:w:$<
 | 
			
		||||
endif
 | 
			
		||||
 | 
			
		||||
clean:
 | 
			
		||||
	@rm -rf build
 | 
			
		||||
| 
						 | 
				
			
			@ -102,6 +117,9 @@ build/nrfx_%.o: lib/nrfx/mdk/gcc_%.S
 | 
			
		|||
	@mkdir -p build
 | 
			
		||||
	clang $(CFLAGS) -D__STARTUP_CLEAR_BSS -c -o $@ $^
 | 
			
		||||
 | 
			
		||||
build/%.o: %.S
 | 
			
		||||
	$(AS) -o $@ $^
 | 
			
		||||
 | 
			
		||||
# Merge all runtime LLVM files together in a single bitcode file.
 | 
			
		||||
build/runtime-$(TARGET)-combined.bc: $(RUNTIME_PARTS)
 | 
			
		||||
	$(LINK) -o $@ $^
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
							
								
								
									
										62
									
								
								avr.S
									
										
									
									
									
										Обычный файл
									
								
							
							
						
						
									
										62
									
								
								avr.S
									
										
									
									
									
										Обычный файл
									
								
							| 
						 | 
				
			
			@ -0,0 +1,62 @@
 | 
			
		|||
.section .isr
 | 
			
		||||
isr:
 | 
			
		||||
    rjmp reset
 | 
			
		||||
 | 
			
		||||
.org 0x18 ; WDT
 | 
			
		||||
    rjmp wdt
 | 
			
		||||
 | 
			
		||||
; Startup code
 | 
			
		||||
.section .reset
 | 
			
		||||
.org 26
 | 
			
		||||
reset:
 | 
			
		||||
    clr  r1          ; r1 is expected to be 0 by the C calling convention
 | 
			
		||||
 | 
			
		||||
    ; Zero .bss
 | 
			
		||||
clear_bss:
 | 
			
		||||
    ldi  xl, lo8(_sbss)
 | 
			
		||||
    ldi  xh, hi8(_sbss)
 | 
			
		||||
clear_bss_loop:
 | 
			
		||||
    ldi  yl, lo8(_ebss)
 | 
			
		||||
    ldi  yh, hi8(_ebss)
 | 
			
		||||
    cp   xl, yl         ; if x == y
 | 
			
		||||
    cpc  xh, yh
 | 
			
		||||
    breq clear_bss_end
 | 
			
		||||
    st   x+, r1         ; zero byte in *x
 | 
			
		||||
    rjmp clear_bss_loop
 | 
			
		||||
clear_bss_end:
 | 
			
		||||
 | 
			
		||||
    ; Set up the stack pointer.
 | 
			
		||||
    ldi  xl, lo8(_stack_top)
 | 
			
		||||
    ldi  xh, hi8(_stack_top)
 | 
			
		||||
    out  0x3d, xl; SPL
 | 
			
		||||
    out  0x3e, xh; SPH
 | 
			
		||||
 | 
			
		||||
    ; Enable interrupts.
 | 
			
		||||
    ; TODO: make sure interrupts are started after all initializers have run.
 | 
			
		||||
    sei
 | 
			
		||||
 | 
			
		||||
    ; main will be placed right after here by the linker script so there's no
 | 
			
		||||
    ; need to jump.
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
; The only thing this WDT handler really does is disable itself, to get out of
 | 
			
		||||
; sleep mode.
 | 
			
		||||
.section .text.wdt
 | 
			
		||||
wdt:
 | 
			
		||||
    push r16
 | 
			
		||||
 | 
			
		||||
    clr  r16
 | 
			
		||||
    wdr            ; Reset watchdog
 | 
			
		||||
    out  0x34, r16 ; Clear reset reason (MCUSR)
 | 
			
		||||
 | 
			
		||||
    ; part 1: set WDCE and WDE to enable editing WDTCSR
 | 
			
		||||
    lds  r16, 0x60 ; r16 = WDTCSR
 | 
			
		||||
    ori  r16, 0x18 ; r16 |= WDCE | WDE
 | 
			
		||||
    sts  0x60, r16 ; WDTCSR = r16
 | 
			
		||||
 | 
			
		||||
    ; part 2: within 4 clock cycles, set the new value for WDTCSR
 | 
			
		||||
    clr  r16
 | 
			
		||||
    sts  0x60, r16 ; WDTCSR = 0
 | 
			
		||||
 | 
			
		||||
    pop  r16
 | 
			
		||||
    reti
 | 
			
		||||
							
								
								
									
										43
									
								
								avr.ld
									
										
									
									
									
										Обычный файл
									
								
							
							
						
						
									
										43
									
								
								avr.ld
									
										
									
									
									
										Обычный файл
									
								
							| 
						 | 
				
			
			@ -0,0 +1,43 @@
 | 
			
		|||
 | 
			
		||||
MEMORY
 | 
			
		||||
{
 | 
			
		||||
    FLASH_TEXT (rw) : ORIGIN = 0, LENGTH = 32256
 | 
			
		||||
    RAM (xrw)       : ORIGIN = 0, LENGTH = 2K
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
_stack_size = 512;
 | 
			
		||||
 | 
			
		||||
SECTIONS
 | 
			
		||||
{
 | 
			
		||||
    .text :
 | 
			
		||||
    {
 | 
			
		||||
        KEEP(*(.isr))
 | 
			
		||||
        KEEP(*(.reset))
 | 
			
		||||
        KEEP(*(.text.main)) /* main must follow the reset handler */
 | 
			
		||||
        *(.text.*)
 | 
			
		||||
        *(.rodata)
 | 
			
		||||
        *(.rodata.*)
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    .stack :
 | 
			
		||||
    {
 | 
			
		||||
        . += _stack_size;
 | 
			
		||||
        _stack_top = .;
 | 
			
		||||
    } >RAM
 | 
			
		||||
 | 
			
		||||
    .data :
 | 
			
		||||
    {
 | 
			
		||||
        *(.data)
 | 
			
		||||
        *(.data*)
 | 
			
		||||
    } >RAM AT>FLASH_TEXT
 | 
			
		||||
 | 
			
		||||
    .bss :
 | 
			
		||||
    {
 | 
			
		||||
        _sbss = .;
 | 
			
		||||
        *(.bss)
 | 
			
		||||
        *(.bss*)
 | 
			
		||||
        *(COMMON)
 | 
			
		||||
        _ebss = .;
 | 
			
		||||
        _heap_start = .;
 | 
			
		||||
    } >RAM
 | 
			
		||||
}
 | 
			
		||||
							
								
								
									
										125
									
								
								gen-device.py
									
										
									
									
									
								
							
							
						
						
									
										125
									
								
								gen-device.py
									
										
									
									
									
								
							| 
						 | 
				
			
			@ -143,6 +143,110 @@ def parseSVDRegister(peripheralName, regEl, baseAddress, namePrefix=''):
 | 
			
		|||
        'array':       array,
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
def readATDF(path):
 | 
			
		||||
    # Read Atmel device descriptor files.
 | 
			
		||||
    # See: http://packs.download.atmel.com
 | 
			
		||||
 | 
			
		||||
    device = Device()
 | 
			
		||||
 | 
			
		||||
    xml = minidom.parse(path)
 | 
			
		||||
    device = xml.getElementsByTagName('device')[0]
 | 
			
		||||
    deviceName = device.getAttribute('name')
 | 
			
		||||
    arch = device.getAttribute('architecture')
 | 
			
		||||
    family = device.getAttribute('family')
 | 
			
		||||
 | 
			
		||||
    memorySizes = {}
 | 
			
		||||
    for el in device.getElementsByTagName('address-space'):
 | 
			
		||||
        addressSpace = {
 | 
			
		||||
            'size': int(el.getAttribute('size'), 0),
 | 
			
		||||
            'segments': {},
 | 
			
		||||
        }
 | 
			
		||||
        memorySizes[el.getAttribute('name')] = addressSpace
 | 
			
		||||
        for segmentEl in el.getElementsByTagName('memory-segment'):
 | 
			
		||||
            addressSpace['segments'][segmentEl.getAttribute('name')] = int(segmentEl.getAttribute('size'), 0)
 | 
			
		||||
 | 
			
		||||
    device.interrupts = []
 | 
			
		||||
    for el in device.getElementsByTagName('interrupts')[0].getElementsByTagName('interrupt'):
 | 
			
		||||
        device.interrupts.append({
 | 
			
		||||
            'index':       int(el.getAttribute('index')),
 | 
			
		||||
            'name':        el.getAttribute('name'),
 | 
			
		||||
            'description': el.getAttribute('caption'),
 | 
			
		||||
        })
 | 
			
		||||
 | 
			
		||||
    allRegisters = {}
 | 
			
		||||
    commonRegisters = {}
 | 
			
		||||
 | 
			
		||||
    device.peripherals = []
 | 
			
		||||
    for el in xml.getElementsByTagName('modules')[0].getElementsByTagName('module'):
 | 
			
		||||
        peripheral = {
 | 
			
		||||
            'name':        el.getAttribute('name'),
 | 
			
		||||
            'description': el.getAttribute('caption'),
 | 
			
		||||
            'registers':   [],
 | 
			
		||||
        }
 | 
			
		||||
        device.peripherals.append(peripheral)
 | 
			
		||||
        for regElGroup in el.getElementsByTagName('register-group'):
 | 
			
		||||
            for regEl in regElGroup.getElementsByTagName('register'):
 | 
			
		||||
                size = int(regEl.getAttribute('size'))
 | 
			
		||||
                regName = regEl.getAttribute('name')
 | 
			
		||||
                regOffset = int(regEl.getAttribute('offset'), 0)
 | 
			
		||||
                reg = {
 | 
			
		||||
                    'description': regEl.getAttribute('caption'),
 | 
			
		||||
                    'bitfields':   [],
 | 
			
		||||
                    'array':       None,
 | 
			
		||||
                }
 | 
			
		||||
                if size == 1:
 | 
			
		||||
                    reg['variants'] = [{
 | 
			
		||||
                        'name':    regName,
 | 
			
		||||
                        'address': regOffset,
 | 
			
		||||
                    }]
 | 
			
		||||
                elif size == 2:
 | 
			
		||||
                    reg['variants'] = [{
 | 
			
		||||
                        'name':    regName + 'L',
 | 
			
		||||
                        'address': regOffset,
 | 
			
		||||
                    }, {
 | 
			
		||||
                        'name':    regName + 'H',
 | 
			
		||||
                        'address': regOffset,
 | 
			
		||||
                    }]
 | 
			
		||||
                else:
 | 
			
		||||
                    reg['variants'] = [] # TODO
 | 
			
		||||
 | 
			
		||||
                for bitfieldEl in regEl.getElementsByTagName('bitfield'):
 | 
			
		||||
                    reg['bitfields'].append({
 | 
			
		||||
                        'name':        regName + '_' + bitfieldEl.getAttribute('name'),
 | 
			
		||||
                        'description': bitfieldEl.getAttribute('caption'),
 | 
			
		||||
                        'value':       int(bitfieldEl.getAttribute('mask'), 0),
 | 
			
		||||
                    })
 | 
			
		||||
 | 
			
		||||
                if regName in allRegisters:
 | 
			
		||||
                    firstReg = allRegisters[regName]
 | 
			
		||||
                    if firstReg['register'] in firstReg['peripheral']['registers']:
 | 
			
		||||
                        firstReg['peripheral']['registers'].remove(firstReg['register'])
 | 
			
		||||
                    if firstReg['address'] != regOffset:
 | 
			
		||||
                        continue # TODO
 | 
			
		||||
                    commonRegisters = allRegisters[regName]['register']
 | 
			
		||||
                    continue
 | 
			
		||||
                else:
 | 
			
		||||
                    allRegisters[regName] = {'address': regOffset, 'register': reg, 'peripheral': peripheral}
 | 
			
		||||
 | 
			
		||||
                peripheral['registers'].append(reg)
 | 
			
		||||
 | 
			
		||||
    device.metadata = {
 | 
			
		||||
        'file':             os.path.basename(path),
 | 
			
		||||
        'descriptorSource': 'http://packs.download.atmel.com/',
 | 
			
		||||
        'name':             deviceName,
 | 
			
		||||
        'nameLower':        deviceName.lower(),
 | 
			
		||||
        'description':      'Device information for the {}.'.format(deviceName),
 | 
			
		||||
        'licenseBlock':     '',
 | 
			
		||||
        'regType':          'uint8',
 | 
			
		||||
        'arch':             arch,
 | 
			
		||||
        'family':           family,
 | 
			
		||||
        'flashSize':        memorySizes['prog']['size'],
 | 
			
		||||
        'ramSize':          memorySizes['data']['segments'].get('IRAM', memorySizes['data']['segments'].get('INTERNAL_SRAM')),
 | 
			
		||||
        'numInterrupts':    len(device.interrupts),
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    return device
 | 
			
		||||
 | 
			
		||||
def writeGo(outdir, device):
 | 
			
		||||
    # The Go module for this device.
 | 
			
		||||
    out = open(outdir + '/' + device.metadata['nameLower'] + '.go', 'w')
 | 
			
		||||
| 
						 | 
				
			
			@ -224,6 +328,19 @@ const (
 | 
			
		|||
                out.write('\n')
 | 
			
		||||
        out.write(')\n')
 | 
			
		||||
 | 
			
		||||
def writeLD(outdir, device):
 | 
			
		||||
    # Variables for the linker script.
 | 
			
		||||
    out = open(outdir + '/' + device.metadata['nameLower'] + '.ld', 'w')
 | 
			
		||||
    out.write('''\
 | 
			
		||||
/* Automatically generated file. DO NOT EDIT. */
 | 
			
		||||
/* Generated by gen-device.py from {file}, see {descriptorSource} */
 | 
			
		||||
 | 
			
		||||
__flash_size = 0x{flashSize:x};
 | 
			
		||||
__ram_size   = 0x{ramSize:x};
 | 
			
		||||
__num_isrs   = {numInterrupts};
 | 
			
		||||
'''.format(**device.metadata))
 | 
			
		||||
    out.close()
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
def generate(indir, outdir):
 | 
			
		||||
    for filepath in glob(indir + '/*.svd'):
 | 
			
		||||
| 
						 | 
				
			
			@ -231,8 +348,14 @@ def generate(indir, outdir):
 | 
			
		|||
        device = readSVD(filepath)
 | 
			
		||||
        writeGo(outdir, device)
 | 
			
		||||
 | 
			
		||||
    for filepath in glob(indir + '/*.atdf'):
 | 
			
		||||
        print(filepath)
 | 
			
		||||
        device = readATDF(filepath)
 | 
			
		||||
        writeGo(outdir, device)
 | 
			
		||||
        writeLD(outdir, device)
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
if __name__ == '__main__':
 | 
			
		||||
    indir = sys.argv[1] # directory with register descriptor files (*.svd)
 | 
			
		||||
    indir = sys.argv[1] # directory with register descriptor files (*.svd, *.atdf)
 | 
			
		||||
    outdir = sys.argv[2] # output directory
 | 
			
		||||
    generate(indir, outdir)
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
							
								
								
									
										1000
									
								
								src/device/avr/at90can128.go
									
										
									
									
									
										Обычный файл
									
								
							
							
						
						
									
										1000
									
								
								src/device/avr/at90can128.go
									
										
									
									
									
										Обычный файл
									
								
							
										
											
												Различия файлов не показаны, т.к. их слишком много
												Показать различия
											
										
									
								
							
							
								
								
									
										6
									
								
								src/device/avr/at90can128.ld
									
										
									
									
									
										Обычный файл
									
								
							
							
						
						
									
										6
									
								
								src/device/avr/at90can128.ld
									
										
									
									
									
										Обычный файл
									
								
							| 
						 | 
				
			
			@ -0,0 +1,6 @@
 | 
			
		|||
/* Automatically generated file. DO NOT EDIT. */
 | 
			
		||||
/* Generated by gen-device.py from AT90CAN128.atdf, see http://packs.download.atmel.com/ */
 | 
			
		||||
 | 
			
		||||
__flash_size = 0x20000;
 | 
			
		||||
__ram_size   = 0x1000;
 | 
			
		||||
__num_isrs   = 37;
 | 
			
		||||
							
								
								
									
										1000
									
								
								src/device/avr/at90can32.go
									
										
									
									
									
										Обычный файл
									
								
							
							
						
						
									
										1000
									
								
								src/device/avr/at90can32.go
									
										
									
									
									
										Обычный файл
									
								
							
										
											
												Различия файлов не показаны, т.к. их слишком много
												Показать различия
											
										
									
								
							
							
								
								
									
										6
									
								
								src/device/avr/at90can32.ld
									
										
									
									
									
										Обычный файл
									
								
							
							
						
						
									
										6
									
								
								src/device/avr/at90can32.ld
									
										
									
									
									
										Обычный файл
									
								
							| 
						 | 
				
			
			@ -0,0 +1,6 @@
 | 
			
		|||
/* Automatically generated file. DO NOT EDIT. */
 | 
			
		||||
/* Generated by gen-device.py from AT90CAN32.atdf, see http://packs.download.atmel.com/ */
 | 
			
		||||
 | 
			
		||||
__flash_size = 0x8000;
 | 
			
		||||
__ram_size   = 0x800;
 | 
			
		||||
__num_isrs   = 37;
 | 
			
		||||
							
								
								
									
										1000
									
								
								src/device/avr/at90can64.go
									
										
									
									
									
										Обычный файл
									
								
							
							
						
						
									
										1000
									
								
								src/device/avr/at90can64.go
									
										
									
									
									
										Обычный файл
									
								
							
										
											
												Различия файлов не показаны, т.к. их слишком много
												Показать различия
											
										
									
								
							
							
								
								
									
										6
									
								
								src/device/avr/at90can64.ld
									
										
									
									
									
										Обычный файл
									
								
							
							
						
						
									
										6
									
								
								src/device/avr/at90can64.ld
									
										
									
									
									
										Обычный файл
									
								
							| 
						 | 
				
			
			@ -0,0 +1,6 @@
 | 
			
		|||
/* Automatically generated file. DO NOT EDIT. */
 | 
			
		||||
/* Generated by gen-device.py from AT90CAN64.atdf, see http://packs.download.atmel.com/ */
 | 
			
		||||
 | 
			
		||||
__flash_size = 0x10000;
 | 
			
		||||
__ram_size   = 0x1000;
 | 
			
		||||
__num_isrs   = 37;
 | 
			
		||||
							
								
								
									
										841
									
								
								src/device/avr/at90pwm1.go
									
										
									
									
									
										Обычный файл
									
								
							
							
						
						
									
										841
									
								
								src/device/avr/at90pwm1.go
									
										
									
									
									
										Обычный файл
									
								
							| 
						 | 
				
			
			@ -0,0 +1,841 @@
 | 
			
		|||
// Automatically generated file. DO NOT EDIT.
 | 
			
		||||
// Generated by gen-device.py from AT90PWM1.atdf, see http://packs.download.atmel.com/
 | 
			
		||||
 | 
			
		||||
// +build avr,at90pwm1
 | 
			
		||||
 | 
			
		||||
// Device information for the AT90PWM1.
 | 
			
		||||
//
 | 
			
		||||
package avr
 | 
			
		||||
 | 
			
		||||
// Magic type name for the compiler.
 | 
			
		||||
type __reg uint8
 | 
			
		||||
 | 
			
		||||
// Export this magic type name.
 | 
			
		||||
type RegValue = __reg
 | 
			
		||||
 | 
			
		||||
// Some information about this device.
 | 
			
		||||
const (
 | 
			
		||||
	DEVICE = "AT90PWM1"
 | 
			
		||||
	ARCH   = "AVR8"
 | 
			
		||||
	FAMILY = "megaAVR"
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
// Interrupts
 | 
			
		||||
const (
 | 
			
		||||
	IRQ_RESET         = 0  // External Pin, Power-on Reset, Brown-out Reset, Watchdog Reset and JTAG AVR Reset
 | 
			
		||||
	IRQ_PSC2_CAPT     = 1  // PSC2 Capture Event
 | 
			
		||||
	IRQ_PSC2_EC       = 2  // PSC2 End Cycle
 | 
			
		||||
	IRQ_PSC1_CAPT     = 3  // PSC1 Capture Event
 | 
			
		||||
	IRQ_PSC1_EC       = 4  // PSC1 End Cycle
 | 
			
		||||
	IRQ_PSC0_CAPT     = 5  // PSC0 Capture Event
 | 
			
		||||
	IRQ_PSC0_EC       = 6  // PSC0 End Cycle
 | 
			
		||||
	IRQ_ANALOG_COMP_0 = 7  // Analog Comparator 0
 | 
			
		||||
	IRQ_ANALOG_COMP_1 = 8  // Analog Comparator 1
 | 
			
		||||
	IRQ_ANALOG_COMP_2 = 9  // Analog Comparator 2
 | 
			
		||||
	IRQ_INT0          = 10 // External Interrupt Request 0
 | 
			
		||||
	IRQ_TIMER1_CAPT   = 11 // Timer/Counter1 Capture Event
 | 
			
		||||
	IRQ_TIMER1_COMPA  = 12 // Timer/Counter1 Compare Match A
 | 
			
		||||
	IRQ_TIMER1_COMPB  = 13 // Timer/Counter Compare Match B
 | 
			
		||||
	IRQ_RESERVED15    = 14 //
 | 
			
		||||
	IRQ_TIMER1_OVF    = 15 // Timer/Counter1 Overflow
 | 
			
		||||
	IRQ_TIMER0_COMP_A = 16 // Timer/Counter0 Compare Match A
 | 
			
		||||
	IRQ_TIMER0_OVF    = 17 // Timer/Counter0 Overflow
 | 
			
		||||
	IRQ_ADC           = 18 // ADC Conversion Complete
 | 
			
		||||
	IRQ_INT1          = 19 // External Interrupt Request 1
 | 
			
		||||
	IRQ_SPI_STC       = 20 // SPI Serial Transfer Complete
 | 
			
		||||
	IRQ_USART_RX      = 21 // USART, Rx Complete
 | 
			
		||||
	IRQ_USART_UDRE    = 22 // USART Data Register Empty
 | 
			
		||||
	IRQ_USART_TX      = 23 // USART, Tx Complete
 | 
			
		||||
	IRQ_INT2          = 24 // External Interrupt Request 2
 | 
			
		||||
	IRQ_WDT           = 25 // Watchdog Timeout Interrupt
 | 
			
		||||
	IRQ_EE_READY      = 26 // EEPROM Ready
 | 
			
		||||
	IRQ_TIMER0_COMPB  = 27 // Timer Counter 0 Compare Match B
 | 
			
		||||
	IRQ_INT3          = 28 // External Interrupt Request 3
 | 
			
		||||
	IRQ_RESERVED30    = 29 //
 | 
			
		||||
	IRQ_RESERVED31    = 30 //
 | 
			
		||||
	IRQ_SPM_READY     = 31 // Store Program Memory Read
 | 
			
		||||
	IRQ_max           = 31 // Highest interrupt number on this device.
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
// Peripherals
 | 
			
		||||
var (
 | 
			
		||||
	// Fuses
 | 
			
		||||
	FUSE = struct {
 | 
			
		||||
		EXTENDED __reg
 | 
			
		||||
		HIGH     __reg
 | 
			
		||||
		LOW      __reg
 | 
			
		||||
	}{
 | 
			
		||||
		EXTENDED: 0x2,
 | 
			
		||||
		HIGH:     0x1,
 | 
			
		||||
		LOW:      0x0,
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	// Lockbits
 | 
			
		||||
	LOCKBIT = struct {
 | 
			
		||||
		LOCKBIT __reg
 | 
			
		||||
	}{
 | 
			
		||||
		LOCKBIT: 0x0,
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	// I/O Port
 | 
			
		||||
	PORT = struct {
 | 
			
		||||
		PORTB __reg
 | 
			
		||||
		DDRB  __reg
 | 
			
		||||
		PINB  __reg
 | 
			
		||||
		PORTD __reg
 | 
			
		||||
		DDRD  __reg
 | 
			
		||||
		PIND  __reg
 | 
			
		||||
		PORTE __reg
 | 
			
		||||
		DDRE  __reg
 | 
			
		||||
		PINE  __reg
 | 
			
		||||
	}{
 | 
			
		||||
		PORTB: 0x25, // Port B Data Register
 | 
			
		||||
		DDRB:  0x24, // Port B Data Direction Register
 | 
			
		||||
		PINB:  0x23, // Port B Input Pins
 | 
			
		||||
		PORTD: 0x2b, // Port D Data Register
 | 
			
		||||
		DDRD:  0x2a, // Port D Data Direction Register
 | 
			
		||||
		PIND:  0x29, // Port D Input Pins
 | 
			
		||||
		PORTE: 0x2e, // Port E Data Register
 | 
			
		||||
		DDRE:  0x2d, // Port E Data Direction Register
 | 
			
		||||
		PINE:  0x2c, // Port E Input Pins
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	// Bootloader
 | 
			
		||||
	BOOT_LOAD = struct {
 | 
			
		||||
		SPMCSR __reg
 | 
			
		||||
	}{
 | 
			
		||||
		SPMCSR: 0x57, // Store Program Memory Control Register
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	// Power Stage Controller
 | 
			
		||||
	PSC = struct {
 | 
			
		||||
		PICR0L  __reg
 | 
			
		||||
		PICR0H  __reg
 | 
			
		||||
		PFRC0B  __reg
 | 
			
		||||
		PFRC0A  __reg
 | 
			
		||||
		PCTL0   __reg
 | 
			
		||||
		PCNF0   __reg
 | 
			
		||||
		OCR0RBL __reg
 | 
			
		||||
		OCR0RBH __reg
 | 
			
		||||
		OCR0SBL __reg
 | 
			
		||||
		OCR0SBH __reg
 | 
			
		||||
		OCR0RAL __reg
 | 
			
		||||
		OCR0RAH __reg
 | 
			
		||||
		OCR0SAL __reg
 | 
			
		||||
		OCR0SAH __reg
 | 
			
		||||
		PSOC0   __reg
 | 
			
		||||
		PIM0    __reg
 | 
			
		||||
		PIFR0   __reg
 | 
			
		||||
		PICR2L  __reg
 | 
			
		||||
		PICR2H  __reg
 | 
			
		||||
		PFRC2B  __reg
 | 
			
		||||
		PFRC2A  __reg
 | 
			
		||||
		PCTL2   __reg
 | 
			
		||||
		PCNF2   __reg
 | 
			
		||||
		OCR2RBL __reg
 | 
			
		||||
		OCR2RBH __reg
 | 
			
		||||
		OCR2SBL __reg
 | 
			
		||||
		OCR2SBH __reg
 | 
			
		||||
		OCR2RAL __reg
 | 
			
		||||
		OCR2RAH __reg
 | 
			
		||||
		OCR2SAL __reg
 | 
			
		||||
		OCR2SAH __reg
 | 
			
		||||
		POM2    __reg
 | 
			
		||||
		PSOC2   __reg
 | 
			
		||||
		PIM2    __reg
 | 
			
		||||
		PIFR2   __reg
 | 
			
		||||
		PICR1L  __reg
 | 
			
		||||
		PICR1H  __reg
 | 
			
		||||
		PFRC1B  __reg
 | 
			
		||||
		PFRC1A  __reg
 | 
			
		||||
		PCTL1   __reg
 | 
			
		||||
		PSOC1   __reg
 | 
			
		||||
	}{
 | 
			
		||||
		PICR0L:  0xde, // PSC 0 Input Capture Register
 | 
			
		||||
		PICR0H:  0xde, // PSC 0 Input Capture Register
 | 
			
		||||
		PFRC0B:  0xdd, // PSC 0 Input B Control
 | 
			
		||||
		PFRC0A:  0xdc, // PSC 0 Input A Control
 | 
			
		||||
		PCTL0:   0xdb, // PSC 0 Control Register
 | 
			
		||||
		PCNF0:   0xda, // PSC 0 Configuration Register
 | 
			
		||||
		OCR0RBL: 0xd8, // Output Compare RB Register
 | 
			
		||||
		OCR0RBH: 0xd8, // Output Compare RB Register
 | 
			
		||||
		OCR0SBL: 0xd6, // Output Compare SB Register
 | 
			
		||||
		OCR0SBH: 0xd6, // Output Compare SB Register
 | 
			
		||||
		OCR0RAL: 0xd4, // Output Compare RA Register
 | 
			
		||||
		OCR0RAH: 0xd4, // Output Compare RA Register
 | 
			
		||||
		OCR0SAL: 0xd2, // Output Compare SA Register
 | 
			
		||||
		OCR0SAH: 0xd2, // Output Compare SA Register
 | 
			
		||||
		PSOC0:   0xd0, // PSC0 Synchro and Output Configuration
 | 
			
		||||
		PIM0:    0xa1, // PSC0 Interrupt Mask Register
 | 
			
		||||
		PIFR0:   0xa0, // PSC0 Interrupt Flag Register
 | 
			
		||||
		PICR2L:  0xfe, // PSC 2 Input Capture Register
 | 
			
		||||
		PICR2H:  0xfe, // PSC 2 Input Capture Register
 | 
			
		||||
		PFRC2B:  0xfd, // PSC 2 Input B Control
 | 
			
		||||
		PFRC2A:  0xfc, // PSC 2 Input B Control
 | 
			
		||||
		PCTL2:   0xfb, // PSC 2 Control Register
 | 
			
		||||
		PCNF2:   0xfa, // PSC 2 Configuration Register
 | 
			
		||||
		OCR2RBL: 0xf8, // Output Compare RB Register
 | 
			
		||||
		OCR2RBH: 0xf8, // Output Compare RB Register
 | 
			
		||||
		OCR2SBL: 0xf6, // Output Compare SB Register
 | 
			
		||||
		OCR2SBH: 0xf6, // Output Compare SB Register
 | 
			
		||||
		OCR2RAL: 0xf4, // Output Compare RA Register
 | 
			
		||||
		OCR2RAH: 0xf4, // Output Compare RA Register
 | 
			
		||||
		OCR2SAL: 0xf2, // Output Compare SA Register
 | 
			
		||||
		OCR2SAH: 0xf2, // Output Compare SA Register
 | 
			
		||||
		POM2:    0xf1, // PSC 2 Output Matrix
 | 
			
		||||
		PSOC2:   0xf0, // PSC2 Synchro and Output Configuration
 | 
			
		||||
		PIM2:    0xa5, // PSC2 Interrupt Mask Register
 | 
			
		||||
		PIFR2:   0xa4, // PSC2 Interrupt Flag Register
 | 
			
		||||
		PICR1L:  0xee, // PSC 1 Input Capture Register
 | 
			
		||||
		PICR1H:  0xee, // PSC 1 Input Capture Register
 | 
			
		||||
		PFRC1B:  0xed, // PSC 1 Input B Control
 | 
			
		||||
		PFRC1A:  0xec, // PSC 1 Input B Control
 | 
			
		||||
		PCTL1:   0xeb, // PSC 1 Control Register
 | 
			
		||||
		PSOC1:   0xe0, // PSC1 Synchro and Output Configuration
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	// CPU Registers
 | 
			
		||||
	CPU = struct {
 | 
			
		||||
		SREG   __reg
 | 
			
		||||
		SPL    __reg
 | 
			
		||||
		SPH    __reg
 | 
			
		||||
		MCUCR  __reg
 | 
			
		||||
		MCUSR  __reg
 | 
			
		||||
		OSCCAL __reg
 | 
			
		||||
		CLKPR  __reg
 | 
			
		||||
		SMCR   __reg
 | 
			
		||||
		GPIOR3 __reg
 | 
			
		||||
		GPIOR2 __reg
 | 
			
		||||
		GPIOR1 __reg
 | 
			
		||||
		GPIOR0 __reg
 | 
			
		||||
		PLLCSR __reg
 | 
			
		||||
		PRR    __reg
 | 
			
		||||
	}{
 | 
			
		||||
		SREG:   0x5f, // Status Register
 | 
			
		||||
		SPL:    0x5d, // Stack Pointer
 | 
			
		||||
		SPH:    0x5d, // Stack Pointer
 | 
			
		||||
		MCUCR:  0x55, // MCU Control Register
 | 
			
		||||
		MCUSR:  0x54, // MCU Status Register
 | 
			
		||||
		OSCCAL: 0x66, // Oscillator Calibration Value
 | 
			
		||||
		CLKPR:  0x61,
 | 
			
		||||
		SMCR:   0x53, // Sleep Mode Control Register
 | 
			
		||||
		GPIOR3: 0x3b, // General Purpose IO Register 3
 | 
			
		||||
		GPIOR2: 0x3a, // General Purpose IO Register 2
 | 
			
		||||
		GPIOR1: 0x39, // General Purpose IO Register 1
 | 
			
		||||
		GPIOR0: 0x3e, // General Purpose IO Register 0
 | 
			
		||||
		PLLCSR: 0x49, // PLL Control And Status Register
 | 
			
		||||
		PRR:    0x64, // Power Reduction Register
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	// Timer/Counter, 8-bit
 | 
			
		||||
	TC8 = struct {
 | 
			
		||||
		TIMSK0 __reg
 | 
			
		||||
		TIFR0  __reg
 | 
			
		||||
		TCCR0A __reg
 | 
			
		||||
		TCCR0B __reg
 | 
			
		||||
		TCNT0  __reg
 | 
			
		||||
		OCR0A  __reg
 | 
			
		||||
		OCR0B  __reg
 | 
			
		||||
	}{
 | 
			
		||||
		TIMSK0: 0x6e, // Timer/Counter0 Interrupt Mask Register
 | 
			
		||||
		TIFR0:  0x35, // Timer/Counter0 Interrupt Flag register
 | 
			
		||||
		TCCR0A: 0x44, // Timer/Counter  Control Register A
 | 
			
		||||
		TCCR0B: 0x45, // Timer/Counter Control Register B
 | 
			
		||||
		TCNT0:  0x46, // Timer/Counter0
 | 
			
		||||
		OCR0A:  0x47, // Timer/Counter0 Output Compare Register
 | 
			
		||||
		OCR0B:  0x48, // Timer/Counter0 Output Compare Register
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	// Timer/Counter, 16-bit
 | 
			
		||||
	TC16 = struct {
 | 
			
		||||
		TIMSK1 __reg
 | 
			
		||||
		TIFR1  __reg
 | 
			
		||||
		TCCR1A __reg
 | 
			
		||||
		TCCR1B __reg
 | 
			
		||||
		TCCR1C __reg
 | 
			
		||||
		TCNT1L __reg
 | 
			
		||||
		TCNT1H __reg
 | 
			
		||||
		OCR1AL __reg
 | 
			
		||||
		OCR1AH __reg
 | 
			
		||||
		OCR1BL __reg
 | 
			
		||||
		OCR1BH __reg
 | 
			
		||||
		ICR1L  __reg
 | 
			
		||||
		ICR1H  __reg
 | 
			
		||||
	}{
 | 
			
		||||
		TIMSK1: 0x6f, // Timer/Counter Interrupt Mask Register
 | 
			
		||||
		TIFR1:  0x36, // Timer/Counter Interrupt Flag register
 | 
			
		||||
		TCCR1A: 0x80, // Timer/Counter1 Control Register A
 | 
			
		||||
		TCCR1B: 0x81, // Timer/Counter1 Control Register B
 | 
			
		||||
		TCCR1C: 0x82, // Timer/Counter1 Control Register C
 | 
			
		||||
		TCNT1L: 0x84, // Timer/Counter1 Bytes
 | 
			
		||||
		TCNT1H: 0x84, // Timer/Counter1 Bytes
 | 
			
		||||
		OCR1AL: 0x88, // Timer/Counter1 Output Compare Register Bytes
 | 
			
		||||
		OCR1AH: 0x88, // Timer/Counter1 Output Compare Register Bytes
 | 
			
		||||
		OCR1BL: 0x8a, // Timer/Counter1 Output Compare Register  Bytes
 | 
			
		||||
		OCR1BH: 0x8a, // Timer/Counter1 Output Compare Register  Bytes
 | 
			
		||||
		ICR1L:  0x86, // Timer/Counter1 Input Capture Register  Bytes
 | 
			
		||||
		ICR1H:  0x86, // Timer/Counter1 Input Capture Register  Bytes
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	// Analog-to-Digital Converter
 | 
			
		||||
	ADC = struct {
 | 
			
		||||
		ADMUX   __reg
 | 
			
		||||
		ADCSRA  __reg
 | 
			
		||||
		ADCL    __reg
 | 
			
		||||
		ADCH    __reg
 | 
			
		||||
		ADCSRB  __reg
 | 
			
		||||
		DIDR0   __reg
 | 
			
		||||
		DIDR1   __reg
 | 
			
		||||
		AMP0CSR __reg
 | 
			
		||||
		AMP1CSR __reg
 | 
			
		||||
	}{
 | 
			
		||||
		ADMUX:   0x7c, // The ADC multiplexer Selection Register
 | 
			
		||||
		ADCSRA:  0x7a, // The ADC Control and Status register
 | 
			
		||||
		ADCL:    0x78, // ADC Data Register  Bytes
 | 
			
		||||
		ADCH:    0x78, // ADC Data Register  Bytes
 | 
			
		||||
		ADCSRB:  0x7b, // ADC Control and Status Register B
 | 
			
		||||
		DIDR0:   0x7e, // Digital Input Disable Register 0
 | 
			
		||||
		DIDR1:   0x7f, // Digital Input Disable Register 1
 | 
			
		||||
		AMP0CSR: 0x76,
 | 
			
		||||
		AMP1CSR: 0x77,
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	// Serial Peripheral Interface
 | 
			
		||||
	SPI = struct {
 | 
			
		||||
		SPCR __reg
 | 
			
		||||
		SPSR __reg
 | 
			
		||||
		SPDR __reg
 | 
			
		||||
	}{
 | 
			
		||||
		SPCR: 0x4c, // SPI Control Register
 | 
			
		||||
		SPSR: 0x4d, // SPI Status Register
 | 
			
		||||
		SPDR: 0x4e, // SPI Data Register
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	// Watchdog Timer
 | 
			
		||||
	WDT = struct {
 | 
			
		||||
		WDTCSR __reg
 | 
			
		||||
	}{
 | 
			
		||||
		WDTCSR: 0x60, // Watchdog Timer Control Register
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	// External Interrupts
 | 
			
		||||
	EXINT = struct {
 | 
			
		||||
		EICRA __reg
 | 
			
		||||
		EIMSK __reg
 | 
			
		||||
		EIFR  __reg
 | 
			
		||||
	}{
 | 
			
		||||
		EICRA: 0x69, // External Interrupt Control Register A
 | 
			
		||||
		EIMSK: 0x3d, // External Interrupt Mask Register
 | 
			
		||||
		EIFR:  0x3c, // External Interrupt Flag Register
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	// EEPROM
 | 
			
		||||
	EEPROM = struct {
 | 
			
		||||
		EEARL __reg
 | 
			
		||||
		EEARH __reg
 | 
			
		||||
		EEDR  __reg
 | 
			
		||||
		EECR  __reg
 | 
			
		||||
	}{
 | 
			
		||||
		EEARL: 0x41, // EEPROM Read/Write Access Bytes
 | 
			
		||||
		EEARH: 0x41, // EEPROM Read/Write Access Bytes
 | 
			
		||||
		EEDR:  0x40, // EEPROM Data Register
 | 
			
		||||
		EECR:  0x3f, // EEPROM Control Register
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	// Analog Comparator
 | 
			
		||||
	AC = struct {
 | 
			
		||||
		AC0CON __reg
 | 
			
		||||
		AC2CON __reg
 | 
			
		||||
		ACSR   __reg
 | 
			
		||||
	}{
 | 
			
		||||
		AC0CON: 0xad, // Analog Comparator 0 Control Register
 | 
			
		||||
		AC2CON: 0xaf, // Analog Comparator 2 Control Register
 | 
			
		||||
		ACSR:   0x50, // Analog Comparator Status Register
 | 
			
		||||
	}
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
// Bitfields for FUSE: Fuses
 | 
			
		||||
const (
 | 
			
		||||
	// EXTENDED
 | 
			
		||||
	EXTENDED_PSC2RB  = 0x80 // PSC2 Reset Behavior
 | 
			
		||||
	EXTENDED_PSC0RB  = 0x20 // PSC0 Reset Behavior
 | 
			
		||||
	EXTENDED_PSCRV   = 0x10 // PSCOUT Reset Value
 | 
			
		||||
	EXTENDED_BOOTSZ  = 0x6  // Select Boot Size
 | 
			
		||||
	EXTENDED_BOOTRST = 0x1  // Select Reset Vector
 | 
			
		||||
 | 
			
		||||
	// HIGH
 | 
			
		||||
	HIGH_RSTDISBL = 0x80 // Reset Disabled (Enable PC6 as i/o pin)
 | 
			
		||||
	HIGH_DWEN     = 0x40 // Debug Wire enable
 | 
			
		||||
	HIGH_SPIEN    = 0x20 // Serial program downloading (SPI) enabled
 | 
			
		||||
	HIGH_WDTON    = 0x10 // Watch-dog Timer always on
 | 
			
		||||
	HIGH_EESAVE   = 0x8  // Preserve EEPROM through the Chip Erase cycle
 | 
			
		||||
	HIGH_BODLEVEL = 0x7  // Brown-out Detector Trigger Level
 | 
			
		||||
 | 
			
		||||
	// LOW
 | 
			
		||||
	LOW_CKDIV8    = 0x80 // Divide clock by 8 internally
 | 
			
		||||
	LOW_CKOUT     = 0x40 // Clock output on PORTB0
 | 
			
		||||
	LOW_SUT_CKSEL = 0x3f // Select Clock Source
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
// Bitfields for LOCKBIT: Lockbits
 | 
			
		||||
const (
 | 
			
		||||
	// LOCKBIT
 | 
			
		||||
	LOCKBIT_LB   = 0x3  // Memory Lock
 | 
			
		||||
	LOCKBIT_BLB0 = 0xc  // Boot Loader Protection Mode
 | 
			
		||||
	LOCKBIT_BLB1 = 0x30 // Boot Loader Protection Mode
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
// Bitfields for BOOT_LOAD: Bootloader
 | 
			
		||||
const (
 | 
			
		||||
	// SPMCSR: Store Program Memory Control Register
 | 
			
		||||
	SPMCSR_SPMIE  = 0x80 // SPM Interrupt Enable
 | 
			
		||||
	SPMCSR_RWWSB  = 0x40 // Read While Write Section Busy
 | 
			
		||||
	SPMCSR_RWWSRE = 0x10 // Read While Write section read enable
 | 
			
		||||
	SPMCSR_BLBSET = 0x8  // Boot Lock Bit Set
 | 
			
		||||
	SPMCSR_PGWRT  = 0x4  // Page Write
 | 
			
		||||
	SPMCSR_PGERS  = 0x2  // Page Erase
 | 
			
		||||
	SPMCSR_SPMEN  = 0x1  // Store Program Memory Enable
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
// Bitfields for PSC: Power Stage Controller
 | 
			
		||||
const (
 | 
			
		||||
	// PICR0L: PSC 0 Input Capture Register
 | 
			
		||||
 | 
			
		||||
	// PICR0H: PSC 0 Input Capture Register
 | 
			
		||||
	PICR0_PCST0 = 0x8000 // PSC 0 Capture Software Trig bit
 | 
			
		||||
	PICR0_PICR0 = 0xfff  // PSC 0 Capture Register
 | 
			
		||||
 | 
			
		||||
	// PFRC0B: PSC 0 Input B Control
 | 
			
		||||
	PFRC0B_PCAE0B  = 0x80 // PSC 0 Capture Enable Input Part B
 | 
			
		||||
	PFRC0B_PISEL0B = 0x40 // PSC 0 Input Select for Part B
 | 
			
		||||
	PFRC0B_PELEV0B = 0x20 // PSC 0 Edge Level Selector on Input Part B
 | 
			
		||||
	PFRC0B_PFLTE0B = 0x10 // PSC 0 Filter Enable on Input Part B
 | 
			
		||||
	PFRC0B_PRFM0B  = 0xf  // PSC 0 Retrigger and Fault Mode for Part B
 | 
			
		||||
 | 
			
		||||
	// PFRC0A: PSC 0 Input A Control
 | 
			
		||||
	PFRC0A_PCAE0A  = 0x80 // PSC 0 Capture Enable Input Part A
 | 
			
		||||
	PFRC0A_PISEL0A = 0x40 // PSC 0 Input Select for Part A
 | 
			
		||||
	PFRC0A_PELEV0A = 0x20 // PSC 0 Edge Level Selector on Input Part A
 | 
			
		||||
	PFRC0A_PFLTE0A = 0x10 // PSC 0 Filter Enable on Input Part A
 | 
			
		||||
	PFRC0A_PRFM0A  = 0xf  // PSC 0 Retrigger and Fault Mode for Part A
 | 
			
		||||
 | 
			
		||||
	// PCTL0: PSC 0 Control Register
 | 
			
		||||
	PCTL0_PPRE0  = 0xc0 // PSC 0 Prescaler Selects
 | 
			
		||||
	PCTL0_PBFM0  = 0x20 // PSC 0 Balance Flank Width Modulation
 | 
			
		||||
	PCTL0_PAOC0B = 0x10 // PSC 0 Asynchronous Output Control B
 | 
			
		||||
	PCTL0_PAOC0A = 0x8  // PSC 0 Asynchronous Output Control A
 | 
			
		||||
	PCTL0_PARUN0 = 0x4  // PSC0 Auto Run
 | 
			
		||||
	PCTL0_PCCYC0 = 0x2  // PSC0 Complete Cycle
 | 
			
		||||
	PCTL0_PRUN0  = 0x1  // PSC 0 Run
 | 
			
		||||
 | 
			
		||||
	// PCNF0: PSC 0 Configuration Register
 | 
			
		||||
	PCNF0_PFIFTY0  = 0x80 // PSC 0 Fifty
 | 
			
		||||
	PCNF0_PALOCK0  = 0x40 // PSC 0 Autolock
 | 
			
		||||
	PCNF0_PLOCK0   = 0x20 // PSC 0 Lock
 | 
			
		||||
	PCNF0_PMODE0   = 0x18 // PSC 0 Mode
 | 
			
		||||
	PCNF0_POP0     = 0x4  // PSC 0 Output Polarity
 | 
			
		||||
	PCNF0_PCLKSEL0 = 0x2  // PSC 0 Input Clock Select
 | 
			
		||||
 | 
			
		||||
	// PSOC0: PSC0 Synchro and Output Configuration
 | 
			
		||||
	PSOC0_PSYNC0 = 0x30 // Synchronization Out for ADC Selection
 | 
			
		||||
	PSOC0_POEN0B = 0x4  // PSCOUT01 Output Enable
 | 
			
		||||
	PSOC0_POEN0A = 0x1  // PSCOUT00 Output Enable
 | 
			
		||||
 | 
			
		||||
	// PIM0: PSC0 Interrupt Mask Register
 | 
			
		||||
	PIM0_PSEIE0 = 0x20 // PSC 0 Synchro Error Interrupt Enable
 | 
			
		||||
	PIM0_PEVE0B = 0x10 // External Event B Interrupt Enable
 | 
			
		||||
	PIM0_PEVE0A = 0x8  // External Event A Interrupt Enable
 | 
			
		||||
	PIM0_PEOPE0 = 0x1  // End of Cycle Interrupt Enable
 | 
			
		||||
 | 
			
		||||
	// PIFR0: PSC0 Interrupt Flag Register
 | 
			
		||||
	PIFR0_PSEI0 = 0x20 // PSC 0 Synchro Error Interrupt
 | 
			
		||||
	PIFR0_PEV0B = 0x10 // External Event B Interrupt
 | 
			
		||||
	PIFR0_PEV0A = 0x8  // External Event A Interrupt
 | 
			
		||||
	PIFR0_PRN0  = 0x6  // Ramp Number
 | 
			
		||||
	PIFR0_PEOP0 = 0x1  // End of PSC0 Interrupt
 | 
			
		||||
 | 
			
		||||
	// PICR2L: PSC 2 Input Capture Register
 | 
			
		||||
 | 
			
		||||
	// PICR2H: PSC 2 Input Capture Register
 | 
			
		||||
	PICR2_PCST2 = 0x8000 // PSC 2 Capture Software Trig bit
 | 
			
		||||
	PICR2_PICR2 = 0xfff  // PSC 2 Input Capture Register
 | 
			
		||||
 | 
			
		||||
	// PFRC2B: PSC 2 Input B Control
 | 
			
		||||
	PFRC2B_PCAE2B  = 0x80 // PSC 2 Capture Enable Input Part B
 | 
			
		||||
	PFRC2B_PISEL2B = 0x40 // PSC 2 Input Select for Part B
 | 
			
		||||
	PFRC2B_PELEV2B = 0x20 // PSC 2 Edge Level Selector on Input Part B
 | 
			
		||||
	PFRC2B_PFLTE2B = 0x10 // PSC 2 Filter Enable on Input Part B
 | 
			
		||||
	PFRC2B_PRFM2B  = 0xf  // PSC 2 Retrigger and Fault Mode for Part B
 | 
			
		||||
 | 
			
		||||
	// PFRC2A: PSC 2 Input B Control
 | 
			
		||||
	PFRC2A_PCAE2A  = 0x80 // PSC 2 Capture Enable Input Part A
 | 
			
		||||
	PFRC2A_PISEL2A = 0x40 // PSC 2 Input Select for Part A
 | 
			
		||||
	PFRC2A_PELEV2A = 0x20 // PSC 2 Edge Level Selector on Input Part A
 | 
			
		||||
	PFRC2A_PFLTE2A = 0x10 // PSC 2 Filter Enable on Input Part A
 | 
			
		||||
	PFRC2A_PRFM2A  = 0xf  // PSC 2 Retrigger and Fault Mode for Part A
 | 
			
		||||
 | 
			
		||||
	// PCTL2: PSC 2 Control Register
 | 
			
		||||
	PCTL2_PPRE2  = 0xc0 // PSC 2 Prescaler Selects
 | 
			
		||||
	PCTL2_PBFM2  = 0x20 // Balance Flank Width Modulation
 | 
			
		||||
	PCTL2_PAOC2B = 0x10 // PSC 2 Asynchronous Output Control B
 | 
			
		||||
	PCTL2_PAOC2A = 0x8  // PSC 2 Asynchronous Output Control A
 | 
			
		||||
	PCTL2_PARUN2 = 0x4  // PSC2 Auto Run
 | 
			
		||||
	PCTL2_PCCYC2 = 0x2  // PSC2 Complete Cycle
 | 
			
		||||
	PCTL2_PRUN2  = 0x1  // PSC 2 Run
 | 
			
		||||
 | 
			
		||||
	// PCNF2: PSC 2 Configuration Register
 | 
			
		||||
	PCNF2_PFIFTY2  = 0x80 // PSC 2 Fifty
 | 
			
		||||
	PCNF2_PALOCK2  = 0x40 // PSC 2 Autolock
 | 
			
		||||
	PCNF2_PLOCK2   = 0x20 // PSC 2 Lock
 | 
			
		||||
	PCNF2_PMODE2   = 0x18 // PSC 2 Mode
 | 
			
		||||
	PCNF2_POP2     = 0x4  // PSC 2 Output Polarity
 | 
			
		||||
	PCNF2_PCLKSEL2 = 0x2  // PSC 2 Input Clock Select
 | 
			
		||||
	PCNF2_POME2    = 0x1  // PSC 2 Output Matrix Enable
 | 
			
		||||
 | 
			
		||||
	// POM2: PSC 2 Output Matrix
 | 
			
		||||
	POM2_POMV2B = 0xf0 // Output Matrix Output B Ramps
 | 
			
		||||
	POM2_POMV2A = 0xf  // Output Matrix Output A Ramps
 | 
			
		||||
 | 
			
		||||
	// PSOC2: PSC2 Synchro and Output Configuration
 | 
			
		||||
	PSOC2_POS2   = 0xc0 // PSC 2 Output 23 Select
 | 
			
		||||
	PSOC2_PSYNC2 = 0x30 // Synchronization Out for ADC Selection
 | 
			
		||||
	PSOC2_POEN2D = 0x8  // PSCOUT23 Output Enable
 | 
			
		||||
	PSOC2_POEN2B = 0x4  // PSCOUT21 Output Enable
 | 
			
		||||
	PSOC2_POEN2C = 0x2  // PSCOUT22 Output Enable
 | 
			
		||||
	PSOC2_POEN2A = 0x1  // PSCOUT20 Output Enable
 | 
			
		||||
 | 
			
		||||
	// PIM2: PSC2 Interrupt Mask Register
 | 
			
		||||
	PIM2_PSEIE2 = 0x20 // PSC 2 Synchro Error Interrupt Enable
 | 
			
		||||
	PIM2_PEVE2B = 0x10 // External Event B Interrupt Enable
 | 
			
		||||
	PIM2_PEVE2A = 0x8  // External Event A Interrupt Enable
 | 
			
		||||
	PIM2_PEOPE2 = 0x1  // End of Cycle Interrupt Enable
 | 
			
		||||
 | 
			
		||||
	// PIFR2: PSC2 Interrupt Flag Register
 | 
			
		||||
	PIFR2_PSEI2 = 0x20 // PSC 2 Synchro Error Interrupt
 | 
			
		||||
	PIFR2_PEV2B = 0x10 // External Event B Interrupt
 | 
			
		||||
	PIFR2_PEV2A = 0x8  // External Event A Interrupt
 | 
			
		||||
	PIFR2_PRN2  = 0x6  // Ramp Number
 | 
			
		||||
	PIFR2_PEOP2 = 0x1  // End of PSC2 Interrupt
 | 
			
		||||
 | 
			
		||||
	// PFRC1B: PSC 1 Input B Control
 | 
			
		||||
	PFRC1B_PCAE1B  = 0x80 // PSC 1 Capture Enable Input Part B
 | 
			
		||||
	PFRC1B_PISEL1B = 0x40 // PSC 1 Input Select for Part B
 | 
			
		||||
	PFRC1B_PELEV1B = 0x20 // PSC 1 Edge Level Selector on Input Part B
 | 
			
		||||
	PFRC1B_PFLTE1B = 0x10 // PSC 1 Filter Enable on Input Part B
 | 
			
		||||
	PFRC1B_PRFM1B  = 0xf  // PSC 1 Retrigger and Fault Mode for Part B
 | 
			
		||||
 | 
			
		||||
	// PFRC1A: PSC 1 Input B Control
 | 
			
		||||
	PFRC1A_PCAE1A  = 0x80 // PSC 1 Capture Enable Input Part A
 | 
			
		||||
	PFRC1A_PISEL1A = 0x40 // PSC 1 Input Select for Part A
 | 
			
		||||
	PFRC1A_PELEV1A = 0x20 // PSC 1 Edge Level Selector on Input Part A
 | 
			
		||||
	PFRC1A_PFLTE1A = 0x10 // PSC 1 Filter Enable on Input Part A
 | 
			
		||||
	PFRC1A_PRFM1A  = 0xf  // PSC 1 Retrigger and Fault Mode for Part A
 | 
			
		||||
 | 
			
		||||
	// PCTL1: PSC 1 Control Register
 | 
			
		||||
	PCTL1_PPRE1  = 0xc0 // PSC 1 Prescaler Selects
 | 
			
		||||
	PCTL1_PBFM1  = 0x20 // Balance Flank Width Modulation
 | 
			
		||||
	PCTL1_PAOC1B = 0x10 // PSC 1 Asynchronous Output Control B
 | 
			
		||||
	PCTL1_PAOC1A = 0x8  // PSC 1 Asynchronous Output Control A
 | 
			
		||||
	PCTL1_PARUN1 = 0x4  // PSC1 Auto Run
 | 
			
		||||
	PCTL1_PCCYC1 = 0x2  // PSC1 Complete Cycle
 | 
			
		||||
	PCTL1_PRUN1  = 0x1  // PSC 1 Run
 | 
			
		||||
 | 
			
		||||
	// PSOC1: PSC1 Synchro and Output Configuration
 | 
			
		||||
	PSOC1_PSYNC1 = 0x30 // Synchronization Out for ADC Selection
 | 
			
		||||
	PSOC1_POEN1B = 0x4  // PSCOUT11 Output Enable
 | 
			
		||||
	PSOC1_POEN1A = 0x1  // PSCOUT10 Output Enable
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
// Bitfields for CPU: CPU Registers
 | 
			
		||||
const (
 | 
			
		||||
	// SREG: Status Register
 | 
			
		||||
	SREG_I = 0x80 // Global Interrupt Enable
 | 
			
		||||
	SREG_T = 0x40 // Bit Copy Storage
 | 
			
		||||
	SREG_H = 0x20 // Half Carry Flag
 | 
			
		||||
	SREG_S = 0x10 // Sign Bit
 | 
			
		||||
	SREG_V = 0x8  // Two's Complement Overflow Flag
 | 
			
		||||
	SREG_N = 0x4  // Negative Flag
 | 
			
		||||
	SREG_Z = 0x2  // Zero Flag
 | 
			
		||||
	SREG_C = 0x1  // Carry Flag
 | 
			
		||||
 | 
			
		||||
	// MCUCR: MCU Control Register
 | 
			
		||||
	MCUCR_SPIPS = 0x80 // SPI Pin Select
 | 
			
		||||
	MCUCR_PUD   = 0x10 // Pull-up disable
 | 
			
		||||
	MCUCR_IVSEL = 0x2  // Interrupt Vector Select
 | 
			
		||||
	MCUCR_IVCE  = 0x1  // Interrupt Vector Change Enable
 | 
			
		||||
 | 
			
		||||
	// MCUSR: MCU Status Register
 | 
			
		||||
	MCUSR_WDRF  = 0x8 // Watchdog Reset Flag
 | 
			
		||||
	MCUSR_BORF  = 0x4 // Brown-out Reset Flag
 | 
			
		||||
	MCUSR_EXTRF = 0x2 // External Reset Flag
 | 
			
		||||
	MCUSR_PORF  = 0x1 // Power-on reset flag
 | 
			
		||||
 | 
			
		||||
	// OSCCAL: Oscillator Calibration Value
 | 
			
		||||
	OSCCAL_OSCCAL = 0xff // Oscillator Calibration
 | 
			
		||||
 | 
			
		||||
	// CLKPR
 | 
			
		||||
	CLKPR_CLKPCE = 0x80
 | 
			
		||||
	CLKPR_CLKPS  = 0xf
 | 
			
		||||
 | 
			
		||||
	// SMCR: Sleep Mode Control Register
 | 
			
		||||
	SMCR_SM = 0xe // Sleep Mode Select bits
 | 
			
		||||
	SMCR_SE = 0x1 // Sleep Enable
 | 
			
		||||
 | 
			
		||||
	// GPIOR3: General Purpose IO Register 3
 | 
			
		||||
	GPIOR3_GPIOR = 0xff // General Purpose IO Register 3 bis
 | 
			
		||||
 | 
			
		||||
	// GPIOR2: General Purpose IO Register 2
 | 
			
		||||
	GPIOR2_GPIOR = 0xff // General Purpose IO Register 2 bis
 | 
			
		||||
 | 
			
		||||
	// GPIOR1: General Purpose IO Register 1
 | 
			
		||||
	GPIOR1_GPIOR = 0xff // General Purpose IO Register 1 bis
 | 
			
		||||
 | 
			
		||||
	// GPIOR0: General Purpose IO Register 0
 | 
			
		||||
	GPIOR0_GPIOR07 = 0x80 // General Purpose IO Register 0 bit 7
 | 
			
		||||
	GPIOR0_GPIOR06 = 0x40 // General Purpose IO Register 0 bit 6
 | 
			
		||||
	GPIOR0_GPIOR05 = 0x20 // General Purpose IO Register 0 bit 5
 | 
			
		||||
	GPIOR0_GPIOR04 = 0x10 // General Purpose IO Register 0 bit 4
 | 
			
		||||
	GPIOR0_GPIOR03 = 0x8  // General Purpose IO Register 0 bit 3
 | 
			
		||||
	GPIOR0_GPIOR02 = 0x4  // General Purpose IO Register 0 bit 2
 | 
			
		||||
	GPIOR0_GPIOR01 = 0x2  // General Purpose IO Register 0 bit 1
 | 
			
		||||
	GPIOR0_GPIOR00 = 0x1  // General Purpose IO Register 0 bit 0
 | 
			
		||||
 | 
			
		||||
	// PLLCSR: PLL Control And Status Register
 | 
			
		||||
	PLLCSR_PLLF  = 0x4 // PLL Factor
 | 
			
		||||
	PLLCSR_PLLE  = 0x2 // PLL Enable
 | 
			
		||||
	PLLCSR_PLOCK = 0x1 // PLL Lock Detector
 | 
			
		||||
 | 
			
		||||
	// PRR: Power Reduction Register
 | 
			
		||||
	PRR_PRPSC2   = 0x80 // Power Reduction PSC2
 | 
			
		||||
	PRR_PRPSC1   = 0x40 // Power Reduction PSC1
 | 
			
		||||
	PRR_PRPSC0   = 0x20 // Power Reduction PSC0
 | 
			
		||||
	PRR_PRTIM1   = 0x10 // Power Reduction Timer/Counter1
 | 
			
		||||
	PRR_PRTIM0   = 0x8  // Power Reduction Timer/Counter0
 | 
			
		||||
	PRR_PRSPI    = 0x4  // Power Reduction Serial Peripheral Interface
 | 
			
		||||
	PRR_PRUSART0 = 0x2  // Power Reduction USART
 | 
			
		||||
	PRR_PRADC    = 0x1  // Power Reduction ADC
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
// Bitfields for TC8: Timer/Counter, 8-bit
 | 
			
		||||
const (
 | 
			
		||||
	// TIMSK0: Timer/Counter0 Interrupt Mask Register
 | 
			
		||||
	TIMSK0_OCIE0B = 0x4 // Timer/Counter0 Output Compare Match B Interrupt Enable
 | 
			
		||||
	TIMSK0_OCIE0A = 0x2 // Timer/Counter0 Output Compare Match A Interrupt Enable
 | 
			
		||||
	TIMSK0_TOIE0  = 0x1 // Timer/Counter0 Overflow Interrupt Enable
 | 
			
		||||
 | 
			
		||||
	// TIFR0: Timer/Counter0 Interrupt Flag register
 | 
			
		||||
	TIFR0_OCF0B = 0x4 // Timer/Counter0 Output Compare Flag 0B
 | 
			
		||||
	TIFR0_OCF0A = 0x2 // Timer/Counter0 Output Compare Flag 0A
 | 
			
		||||
	TIFR0_TOV0  = 0x1 // Timer/Counter0 Overflow Flag
 | 
			
		||||
 | 
			
		||||
	// TCCR0A: Timer/Counter  Control Register A
 | 
			
		||||
	TCCR0A_COM0A = 0xc0 // Compare Output Mode, Phase Correct PWM Mode
 | 
			
		||||
	TCCR0A_COM0B = 0x30 // Compare Output Mode, Fast PWm
 | 
			
		||||
	TCCR0A_WGM0  = 0x3  // Waveform Generation Mode
 | 
			
		||||
 | 
			
		||||
	// TCCR0B: Timer/Counter Control Register B
 | 
			
		||||
	TCCR0B_FOC0A = 0x80 // Force Output Compare A
 | 
			
		||||
	TCCR0B_FOC0B = 0x40 // Force Output Compare B
 | 
			
		||||
	TCCR0B_WGM02 = 0x8
 | 
			
		||||
	TCCR0B_CS0   = 0x7 // Clock Select
 | 
			
		||||
 | 
			
		||||
	// TCNT0: Timer/Counter0
 | 
			
		||||
	TCNT0_TCNT0 = 0xff // Timer Counter 0 value
 | 
			
		||||
 | 
			
		||||
	// OCR0A: Timer/Counter0 Output Compare Register
 | 
			
		||||
	OCR0A_OCR0A = 0xff // Output Compare A value
 | 
			
		||||
 | 
			
		||||
	// OCR0B: Timer/Counter0 Output Compare Register
 | 
			
		||||
	OCR0B_OCR0B = 0xff // Output Compare B value
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
// Bitfields for TC16: Timer/Counter, 16-bit
 | 
			
		||||
const (
 | 
			
		||||
	// TIMSK1: Timer/Counter Interrupt Mask Register
 | 
			
		||||
	TIMSK1_ICIE1  = 0x20 // Timer/Counter1 Input Capture Interrupt Enable
 | 
			
		||||
	TIMSK1_OCIE1B = 0x4  // Timer/Counter1 Output CompareB Match Interrupt Enable
 | 
			
		||||
	TIMSK1_OCIE1A = 0x2  // Timer/Counter1 Output CompareA Match Interrupt Enable
 | 
			
		||||
	TIMSK1_TOIE1  = 0x1  // Timer/Counter1 Overflow Interrupt Enable
 | 
			
		||||
 | 
			
		||||
	// TIFR1: Timer/Counter Interrupt Flag register
 | 
			
		||||
	TIFR1_ICF1  = 0x20 // Input Capture Flag 1
 | 
			
		||||
	TIFR1_OCF1B = 0x4  // Output Compare Flag 1B
 | 
			
		||||
	TIFR1_OCF1A = 0x2  // Output Compare Flag 1A
 | 
			
		||||
	TIFR1_TOV1  = 0x1  // Timer/Counter1 Overflow Flag
 | 
			
		||||
 | 
			
		||||
	// TCCR1A: Timer/Counter1 Control Register A
 | 
			
		||||
	TCCR1A_COM1A = 0xc0 // Compare Output Mode 1A, bits
 | 
			
		||||
	TCCR1A_COM1B = 0x30 // Compare Output Mode 1B, bits
 | 
			
		||||
	TCCR1A_WGM1  = 0x3  // Waveform Generation Mode
 | 
			
		||||
 | 
			
		||||
	// TCCR1B: Timer/Counter1 Control Register B
 | 
			
		||||
	TCCR1B_ICNC1 = 0x80 // Input Capture 1 Noise Canceler
 | 
			
		||||
	TCCR1B_ICES1 = 0x40 // Input Capture 1 Edge Select
 | 
			
		||||
	TCCR1B_WGM1  = 0x18 // Waveform Generation Mode
 | 
			
		||||
	TCCR1B_CS1   = 0x7  // Prescaler source of Timer/Counter 1
 | 
			
		||||
 | 
			
		||||
	// TCCR1C: Timer/Counter1 Control Register C
 | 
			
		||||
	TCCR1C_FOC1A = 0x80
 | 
			
		||||
	TCCR1C_FOC1B = 0x40
 | 
			
		||||
 | 
			
		||||
	// TCNT1L: Timer/Counter1 Bytes
 | 
			
		||||
 | 
			
		||||
	// TCNT1H: Timer/Counter1 Bytes
 | 
			
		||||
	TCNT1_TCNT1 = 0xffff // Timer/Counter1
 | 
			
		||||
 | 
			
		||||
	// OCR1AL: Timer/Counter1 Output Compare Register Bytes
 | 
			
		||||
 | 
			
		||||
	// OCR1AH: Timer/Counter1 Output Compare Register Bytes
 | 
			
		||||
	OCR1A_OCR1A = 0xffff // Timer/Counter1 Output Compare A Register
 | 
			
		||||
 | 
			
		||||
	// OCR1BL: Timer/Counter1 Output Compare Register  Bytes
 | 
			
		||||
 | 
			
		||||
	// OCR1BH: Timer/Counter1 Output Compare Register  Bytes
 | 
			
		||||
	OCR1B_OCR1B = 0xffff // Timer/Counter1 Output Compare B Register
 | 
			
		||||
 | 
			
		||||
	// ICR1L: Timer/Counter1 Input Capture Register  Bytes
 | 
			
		||||
 | 
			
		||||
	// ICR1H: Timer/Counter1 Input Capture Register  Bytes
 | 
			
		||||
	ICR1_ICR1 = 0xffff // Timer/Counter Input Capture
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
// Bitfields for ADC: Analog-to-Digital Converter
 | 
			
		||||
const (
 | 
			
		||||
	// ADMUX: The ADC multiplexer Selection Register
 | 
			
		||||
	ADMUX_REFS  = 0xc0 // Reference Selection Bits
 | 
			
		||||
	ADMUX_ADLAR = 0x20 // Left Adjust Result
 | 
			
		||||
	ADMUX_MUX   = 0xf  // Analog Channel and Gain Selection Bits
 | 
			
		||||
 | 
			
		||||
	// ADCSRA: The ADC Control and Status register
 | 
			
		||||
	ADCSRA_ADEN  = 0x80 // ADC Enable
 | 
			
		||||
	ADCSRA_ADSC  = 0x40 // ADC Start Conversion
 | 
			
		||||
	ADCSRA_ADATE = 0x20 // ADC Auto Trigger Enable
 | 
			
		||||
	ADCSRA_ADIF  = 0x10 // ADC Interrupt Flag
 | 
			
		||||
	ADCSRA_ADIE  = 0x8  // ADC Interrupt Enable
 | 
			
		||||
	ADCSRA_ADPS  = 0x7  // ADC  Prescaler Select Bits
 | 
			
		||||
 | 
			
		||||
	// ADCSRB: ADC Control and Status Register B
 | 
			
		||||
	ADCSRB_ADHSM  = 0x80 // ADC High Speed Mode
 | 
			
		||||
	ADCSRB_ADASCR = 0x10 // ADC Start Conversion
 | 
			
		||||
	ADCSRB_ADTS3  = 0x8  // ADC Auto Trigger Source Selection 3
 | 
			
		||||
	ADCSRB_ADTS2  = 0x4  // ADC Auto Trigger Source Selection 2
 | 
			
		||||
	ADCSRB_ADTS1  = 0x2  // ADC Auto Trigger Source Selection 1
 | 
			
		||||
	ADCSRB_ADTS0  = 0x1  // ADC Auto Trigger Source Selection 0
 | 
			
		||||
 | 
			
		||||
	// DIDR0: Digital Input Disable Register 0
 | 
			
		||||
	DIDR0_ADC7D = 0x80
 | 
			
		||||
	DIDR0_ADC6D = 0x40
 | 
			
		||||
	DIDR0_ADC5D = 0x20
 | 
			
		||||
	DIDR0_ADC4D = 0x10
 | 
			
		||||
	DIDR0_ADC3D = 0x8
 | 
			
		||||
	DIDR0_ADC2D = 0x4
 | 
			
		||||
	DIDR0_ADC1D = 0x2
 | 
			
		||||
	DIDR0_ADC0D = 0x1
 | 
			
		||||
 | 
			
		||||
	// DIDR1: Digital Input Disable Register 1
 | 
			
		||||
	DIDR1_ACMP0D = 0x20
 | 
			
		||||
	DIDR1_AMP0PD = 0x10
 | 
			
		||||
	DIDR1_AMP0ND = 0x8
 | 
			
		||||
	DIDR1_ADC10D = 0x4
 | 
			
		||||
	DIDR1_ADC9D  = 0x2
 | 
			
		||||
	DIDR1_ADC8D  = 0x1
 | 
			
		||||
 | 
			
		||||
	// AMP0CSR
 | 
			
		||||
	AMP0CSR_AMP0EN = 0x80
 | 
			
		||||
	AMP0CSR_AMP0IS = 0x40
 | 
			
		||||
	AMP0CSR_AMP0G  = 0x30
 | 
			
		||||
	AMP0CSR_AMP0TS = 0x3
 | 
			
		||||
 | 
			
		||||
	// AMP1CSR
 | 
			
		||||
	AMP1CSR_AMP1EN = 0x80
 | 
			
		||||
	AMP1CSR_AMP1IS = 0x40
 | 
			
		||||
	AMP1CSR_AMP1G  = 0x30
 | 
			
		||||
	AMP1CSR_AMP1TS = 0x3
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
// Bitfields for SPI: Serial Peripheral Interface
 | 
			
		||||
const (
 | 
			
		||||
	// SPCR: SPI Control Register
 | 
			
		||||
	SPCR_SPIE = 0x80 // SPI Interrupt Enable
 | 
			
		||||
	SPCR_SPE  = 0x40 // SPI Enable
 | 
			
		||||
	SPCR_DORD = 0x20 // Data Order
 | 
			
		||||
	SPCR_MSTR = 0x10 // Master/Slave Select
 | 
			
		||||
	SPCR_CPOL = 0x8  // Clock polarity
 | 
			
		||||
	SPCR_CPHA = 0x4  // Clock Phase
 | 
			
		||||
	SPCR_SPR  = 0x3  // SPI Clock Rate Selects
 | 
			
		||||
 | 
			
		||||
	// SPSR: SPI Status Register
 | 
			
		||||
	SPSR_SPIF  = 0x80 // SPI Interrupt Flag
 | 
			
		||||
	SPSR_WCOL  = 0x40 // Write Collision Flag
 | 
			
		||||
	SPSR_SPI2X = 0x1  // Double SPI Speed Bit
 | 
			
		||||
 | 
			
		||||
	// SPDR: SPI Data Register
 | 
			
		||||
	SPDR_SPD = 0xff // SPI Data
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
// Bitfields for WDT: Watchdog Timer
 | 
			
		||||
const (
 | 
			
		||||
	// WDTCSR: Watchdog Timer Control Register
 | 
			
		||||
	WDTCSR_WDIF = 0x80 // Watchdog Timeout Interrupt Flag
 | 
			
		||||
	WDTCSR_WDIE = 0x40 // Watchdog Timeout Interrupt Enable
 | 
			
		||||
	WDTCSR_WDP  = 0x27 // Watchdog Timer Prescaler Bits
 | 
			
		||||
	WDTCSR_WDCE = 0x10 // Watchdog Change Enable
 | 
			
		||||
	WDTCSR_WDE  = 0x8  // Watch Dog Enable
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
// Bitfields for EXINT: External Interrupts
 | 
			
		||||
const (
 | 
			
		||||
	// EICRA: External Interrupt Control Register A
 | 
			
		||||
	EICRA_ISC3 = 0xc0 // External Interrupt Sense Control Bit
 | 
			
		||||
	EICRA_ISC2 = 0x30 // External Interrupt Sense Control Bit
 | 
			
		||||
	EICRA_ISC1 = 0xc  // External Interrupt Sense Control Bit
 | 
			
		||||
	EICRA_ISC0 = 0x3  // External Interrupt Sense Control Bit
 | 
			
		||||
 | 
			
		||||
	// EIMSK: External Interrupt Mask Register
 | 
			
		||||
	EIMSK_INT = 0xf // External Interrupt Mask
 | 
			
		||||
 | 
			
		||||
	// EIFR: External Interrupt Flag Register
 | 
			
		||||
	EIFR_INTF = 0xf // External Interrupt Flags
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
// Bitfields for EEPROM: EEPROM
 | 
			
		||||
const (
 | 
			
		||||
	// EEARL: EEPROM Read/Write Access Bytes
 | 
			
		||||
 | 
			
		||||
	// EEARH: EEPROM Read/Write Access Bytes
 | 
			
		||||
	EEAR_EEAR = 0xfff // EEPROM Address bytes
 | 
			
		||||
 | 
			
		||||
	// EEDR: EEPROM Data Register
 | 
			
		||||
	EEDR_EEDR = 0xff // EEPROM Data Bits
 | 
			
		||||
 | 
			
		||||
	// EECR: EEPROM Control Register
 | 
			
		||||
	EECR_EEPM  = 0x30 // EEPROM Programming Mode
 | 
			
		||||
	EECR_EERIE = 0x8  // EEPROM Ready Interrupt Enable
 | 
			
		||||
	EECR_EEMWE = 0x4  // EEPROM Master Write Enable
 | 
			
		||||
	EECR_EEWE  = 0x2  // EEPROM Write Enable
 | 
			
		||||
	EECR_EERE  = 0x1  // EEPROM Read Enable
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
// Bitfields for AC: Analog Comparator
 | 
			
		||||
const (
 | 
			
		||||
	// AC0CON: Analog Comparator 0 Control Register
 | 
			
		||||
	AC0CON_AC0EN = 0x80 // Analog Comparator 0 Enable Bit
 | 
			
		||||
	AC0CON_AC0IE = 0x40 // Analog Comparator 0 Interrupt Enable Bit
 | 
			
		||||
	AC0CON_AC0IS = 0x30 // Analog Comparator 0  Interrupt Select Bit
 | 
			
		||||
	AC0CON_AC0M  = 0x7  // Analog Comparator 0 Multiplexer Register
 | 
			
		||||
 | 
			
		||||
	// AC2CON: Analog Comparator 2 Control Register
 | 
			
		||||
	AC2CON_AC2EN = 0x80 // Analog Comparator 2 Enable Bit
 | 
			
		||||
	AC2CON_AC2IE = 0x40 // Analog Comparator 2 Interrupt Enable Bit
 | 
			
		||||
	AC2CON_AC2IS = 0x30 // Analog Comparator 2  Interrupt Select Bit
 | 
			
		||||
	AC2CON_AC2M  = 0x7  // Analog Comparator 2 Multiplexer Register
 | 
			
		||||
 | 
			
		||||
	// ACSR: Analog Comparator Status Register
 | 
			
		||||
	ACSR_ACCKDIV = 0x80 // Analog Comparator Clock Divider
 | 
			
		||||
	ACSR_AC2IF   = 0x40 // Analog Comparator 2 Interrupt Flag Bit
 | 
			
		||||
	ACSR_AC1IF   = 0x20 // Analog Comparator 1  Interrupt Flag Bit
 | 
			
		||||
	ACSR_AC0IF   = 0x10 // Analog Comparator 0 Interrupt Flag Bit
 | 
			
		||||
	ACSR_AC2O    = 0x4  // Analog Comparator 2 Output Bit
 | 
			
		||||
	ACSR_AC1O    = 0x2  // Analog Comparator 1 Output Bit
 | 
			
		||||
	ACSR_AC0O    = 0x1  // Analog Comparator 0 Output Bit
 | 
			
		||||
)
 | 
			
		||||
							
								
								
									
										6
									
								
								src/device/avr/at90pwm1.ld
									
										
									
									
									
										Обычный файл
									
								
							
							
						
						
									
										6
									
								
								src/device/avr/at90pwm1.ld
									
										
									
									
									
										Обычный файл
									
								
							| 
						 | 
				
			
			@ -0,0 +1,6 @@
 | 
			
		|||
/* Automatically generated file. DO NOT EDIT. */
 | 
			
		||||
/* Generated by gen-device.py from AT90PWM1.atdf, see http://packs.download.atmel.com/ */
 | 
			
		||||
 | 
			
		||||
__flash_size = 0x2000;
 | 
			
		||||
__ram_size   = 0x200;
 | 
			
		||||
__num_isrs   = 32;
 | 
			
		||||
							
								
								
									
										757
									
								
								src/device/avr/at90pwm161.go
									
										
									
									
									
										Обычный файл
									
								
							
							
						
						
									
										757
									
								
								src/device/avr/at90pwm161.go
									
										
									
									
									
										Обычный файл
									
								
							| 
						 | 
				
			
			@ -0,0 +1,757 @@
 | 
			
		|||
// Automatically generated file. DO NOT EDIT.
 | 
			
		||||
// Generated by gen-device.py from AT90PWM161.atdf, see http://packs.download.atmel.com/
 | 
			
		||||
 | 
			
		||||
// +build avr,at90pwm161
 | 
			
		||||
 | 
			
		||||
// Device information for the AT90PWM161.
 | 
			
		||||
//
 | 
			
		||||
package avr
 | 
			
		||||
 | 
			
		||||
// Magic type name for the compiler.
 | 
			
		||||
type __reg uint8
 | 
			
		||||
 | 
			
		||||
// Export this magic type name.
 | 
			
		||||
type RegValue = __reg
 | 
			
		||||
 | 
			
		||||
// Some information about this device.
 | 
			
		||||
const (
 | 
			
		||||
	DEVICE = "AT90PWM161"
 | 
			
		||||
	ARCH   = "AVR8"
 | 
			
		||||
	FAMILY = "megaAVR"
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
// Interrupts
 | 
			
		||||
const (
 | 
			
		||||
	IRQ_RESET         = 0  // External Pin, Power-on Reset, Brown-out Reset, Watchdog Reset and JTAG AVR Reset
 | 
			
		||||
	IRQ_PSC2_CAPT     = 1  // PSC2 Capture Event
 | 
			
		||||
	IRQ_PSC2_EC       = 2  // PSC2 End Cycle
 | 
			
		||||
	IRQ_PSC2_EEC      = 3  // PSC2 End Of Enhanced Cycle
 | 
			
		||||
	IRQ_PSC0_CAPT     = 4  // PSC0 Capture Event
 | 
			
		||||
	IRQ_PSC0_EC       = 5  // PSC0 End Cycle
 | 
			
		||||
	IRQ_PSC0_EEC      = 6  // PSC0 End Of Enhanced Cycle
 | 
			
		||||
	IRQ_ANALOG_COMP_1 = 7  // Analog Comparator 1
 | 
			
		||||
	IRQ_ANALOG_COMP_2 = 8  // Analog Comparator 2
 | 
			
		||||
	IRQ_ANALOG_COMP_3 = 9  // Analog Comparator 3
 | 
			
		||||
	IRQ_INT0          = 10 // External Interrupt Request 0
 | 
			
		||||
	IRQ_TIMER1_CAPT   = 11 // Timer/Counter1 Capture Event
 | 
			
		||||
	IRQ_TIMER1_OVF    = 12 // Timer/Counter1 Overflow
 | 
			
		||||
	IRQ_ADC           = 13 // ADC Conversion Complete
 | 
			
		||||
	IRQ_INT1          = 14 // External Interrupt Request 1
 | 
			
		||||
	IRQ_SPI_STC       = 15 // SPI Serial Transfer Complet
 | 
			
		||||
	IRQ_INT2          = 16 // External Interrupt Request 2
 | 
			
		||||
	IRQ_WDT           = 17 // Watchdog Timeout Interrupt
 | 
			
		||||
	IRQ_EE_READY      = 18 // EEPROM Ready
 | 
			
		||||
	IRQ_SPM_READY     = 19 // Store Program Memory Read
 | 
			
		||||
	IRQ_max           = 19 // Highest interrupt number on this device.
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
// Peripherals
 | 
			
		||||
var (
 | 
			
		||||
	// Fuses
 | 
			
		||||
	FUSE = struct {
 | 
			
		||||
		EXTENDED __reg
 | 
			
		||||
		HIGH     __reg
 | 
			
		||||
		LOW      __reg
 | 
			
		||||
	}{
 | 
			
		||||
		EXTENDED: 0x2,
 | 
			
		||||
		HIGH:     0x1,
 | 
			
		||||
		LOW:      0x0,
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	// Lockbits
 | 
			
		||||
	LOCKBIT = struct {
 | 
			
		||||
		LOCKBIT __reg
 | 
			
		||||
	}{
 | 
			
		||||
		LOCKBIT: 0x0,
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	// I/O Port
 | 
			
		||||
	PORT = struct {
 | 
			
		||||
		PORTB __reg
 | 
			
		||||
		DDRB  __reg
 | 
			
		||||
		PINB  __reg
 | 
			
		||||
		PORTD __reg
 | 
			
		||||
		DDRD  __reg
 | 
			
		||||
		PIND  __reg
 | 
			
		||||
		PORTE __reg
 | 
			
		||||
		DDRE  __reg
 | 
			
		||||
		PINE  __reg
 | 
			
		||||
	}{
 | 
			
		||||
		PORTB: 0x25, // Port B Data Register
 | 
			
		||||
		DDRB:  0x24, // Port B Data Direction Register
 | 
			
		||||
		PINB:  0x23, // Port B Input Pins
 | 
			
		||||
		PORTD: 0x2b, // Port D Data Register
 | 
			
		||||
		DDRD:  0x2a, // Port D Data Direction Register
 | 
			
		||||
		PIND:  0x29, // Port D Input Pins
 | 
			
		||||
		PORTE: 0x2e, // Port E Data Register
 | 
			
		||||
		DDRE:  0x2d, // Port E Data Direction Register
 | 
			
		||||
		PINE:  0x2c, // Port E Input Pins
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	// Digital-to-Analog Converter
 | 
			
		||||
	DAC = struct {
 | 
			
		||||
		DACH  __reg
 | 
			
		||||
		DACL  __reg
 | 
			
		||||
		DACON __reg
 | 
			
		||||
	}{
 | 
			
		||||
		DACH:  0x59, // DAC Data Register High Byte
 | 
			
		||||
		DACL:  0x58, // DAC Data Register Low Byte
 | 
			
		||||
		DACON: 0x76, // DAC Control Register
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	// Serial Peripheral Interface
 | 
			
		||||
	SPI = struct {
 | 
			
		||||
		SPCR __reg
 | 
			
		||||
		SPSR __reg
 | 
			
		||||
		SPDR __reg
 | 
			
		||||
	}{
 | 
			
		||||
		SPCR: 0x37, // SPI Control Register
 | 
			
		||||
		SPSR: 0x38, // SPI Status Register
 | 
			
		||||
		SPDR: 0x56, // SPI Data Register
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	// Watchdog Timer
 | 
			
		||||
	WDT = struct {
 | 
			
		||||
		WDTCSR __reg
 | 
			
		||||
	}{
 | 
			
		||||
		WDTCSR: 0x82, // Watchdog Timer Control Register
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	// External Interrupts
 | 
			
		||||
	EXINT = struct {
 | 
			
		||||
		EICRA __reg
 | 
			
		||||
		EIMSK __reg
 | 
			
		||||
		EIFR  __reg
 | 
			
		||||
	}{
 | 
			
		||||
		EICRA: 0x89, // External Interrupt Control Register A
 | 
			
		||||
		EIMSK: 0x41, // External Interrupt Mask Register
 | 
			
		||||
		EIFR:  0x40, // External Interrupt Flag Register
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	// Analog-to-Digital Converter
 | 
			
		||||
	ADC = struct {
 | 
			
		||||
		ADMUX   __reg
 | 
			
		||||
		ADCSRA  __reg
 | 
			
		||||
		ADCL    __reg
 | 
			
		||||
		ADCH    __reg
 | 
			
		||||
		ADCSRB  __reg
 | 
			
		||||
		DIDR0   __reg
 | 
			
		||||
		DIDR1   __reg
 | 
			
		||||
		AMP0CSR __reg
 | 
			
		||||
	}{
 | 
			
		||||
		ADMUX:   0x28, // The ADC multiplexer Selection Register
 | 
			
		||||
		ADCSRA:  0x26, // The ADC Control and Status register
 | 
			
		||||
		ADCL:    0x4c, // ADC Data Register  Bytes
 | 
			
		||||
		ADCH:    0x4c, // ADC Data Register  Bytes
 | 
			
		||||
		ADCSRB:  0x27, // ADC Control and Status Register B
 | 
			
		||||
		DIDR0:   0x77, // Digital Input Disable Register 0
 | 
			
		||||
		DIDR1:   0x78, // Digital Input Disable Register 0
 | 
			
		||||
		AMP0CSR: 0x79,
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	// Analog Comparator
 | 
			
		||||
	AC = struct {
 | 
			
		||||
		AC3CON  __reg
 | 
			
		||||
		AC1CON  __reg
 | 
			
		||||
		AC2CON  __reg
 | 
			
		||||
		ACSR    __reg
 | 
			
		||||
		AC3ECON __reg
 | 
			
		||||
		AC2ECON __reg
 | 
			
		||||
		AC1ECON __reg
 | 
			
		||||
	}{
 | 
			
		||||
		AC3CON:  0x7f, // Analog Comparator3 Control Register
 | 
			
		||||
		AC1CON:  0x7d, // Analog Comparator 1 Control Register
 | 
			
		||||
		AC2CON:  0x7e, // Analog Comparator 2 Control Register
 | 
			
		||||
		ACSR:    0x20, // Analog Comparator Status Register
 | 
			
		||||
		AC3ECON: 0x7c,
 | 
			
		||||
		AC2ECON: 0x7b,
 | 
			
		||||
		AC1ECON: 0x7a,
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	// CPU Registers
 | 
			
		||||
	CPU = struct {
 | 
			
		||||
		SREG    __reg
 | 
			
		||||
		SPL     __reg
 | 
			
		||||
		SPH     __reg
 | 
			
		||||
		MCUCR   __reg
 | 
			
		||||
		MCUSR   __reg
 | 
			
		||||
		OSCCAL  __reg
 | 
			
		||||
		CLKPR   __reg
 | 
			
		||||
		SMCR    __reg
 | 
			
		||||
		GPIOR2  __reg
 | 
			
		||||
		GPIOR1  __reg
 | 
			
		||||
		GPIOR0  __reg
 | 
			
		||||
		PLLCSR  __reg
 | 
			
		||||
		PRR     __reg
 | 
			
		||||
		CLKCSR  __reg
 | 
			
		||||
		CLKSELR __reg
 | 
			
		||||
		BGCCR   __reg
 | 
			
		||||
		BGCRR   __reg
 | 
			
		||||
	}{
 | 
			
		||||
		SREG:    0x5f, // Status Register
 | 
			
		||||
		SPL:     0x5d, // Stack Pointer
 | 
			
		||||
		SPH:     0x5d, // Stack Pointer
 | 
			
		||||
		MCUCR:   0x55, // MCU Control Register
 | 
			
		||||
		MCUSR:   0x54, // MCU Status Register
 | 
			
		||||
		OSCCAL:  0x88, // Oscillator Calibration Value
 | 
			
		||||
		CLKPR:   0x83,
 | 
			
		||||
		SMCR:    0x53, // Sleep Mode Control Register
 | 
			
		||||
		GPIOR2:  0x3b, // General Purpose IO Register 2
 | 
			
		||||
		GPIOR1:  0x3a, // General Purpose IO Register 1
 | 
			
		||||
		GPIOR0:  0x39, // General Purpose IO Register 0
 | 
			
		||||
		PLLCSR:  0x87, // PLL Control And Status Register
 | 
			
		||||
		PRR:     0x86, // Power Reduction Register
 | 
			
		||||
		CLKCSR:  0x84,
 | 
			
		||||
		CLKSELR: 0x85,
 | 
			
		||||
		BGCCR:   0x81, // BandGap Current Calibration Register
 | 
			
		||||
		BGCRR:   0x80, // BandGap Resistor Calibration Register
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	// EEPROM
 | 
			
		||||
	EEPROM = struct {
 | 
			
		||||
		EEARL __reg
 | 
			
		||||
		EEARH __reg
 | 
			
		||||
		EEDR  __reg
 | 
			
		||||
		EECR  __reg
 | 
			
		||||
	}{
 | 
			
		||||
		EEARL: 0x3e, // EEPROM Read/Write Access  Bytes
 | 
			
		||||
		EEARH: 0x3e, // EEPROM Read/Write Access  Bytes
 | 
			
		||||
		EEDR:  0x3d, // EEPROM Data Register
 | 
			
		||||
		EECR:  0x3c, // EEPROM Control Register
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	// Power Stage Controller
 | 
			
		||||
	PSC = struct {
 | 
			
		||||
		PICR0L  __reg
 | 
			
		||||
		PICR0H  __reg
 | 
			
		||||
		PFRC0B  __reg
 | 
			
		||||
		PFRC0A  __reg
 | 
			
		||||
		PCTL0   __reg
 | 
			
		||||
		PCNF0   __reg
 | 
			
		||||
		OCR0RBL __reg
 | 
			
		||||
		OCR0RBH __reg
 | 
			
		||||
		OCR0SBL __reg
 | 
			
		||||
		OCR0SBH __reg
 | 
			
		||||
		OCR0RAL __reg
 | 
			
		||||
		OCR0RAH __reg
 | 
			
		||||
		OCR0SAL __reg
 | 
			
		||||
		OCR0SAH __reg
 | 
			
		||||
		PSOC0   __reg
 | 
			
		||||
		PIM0    __reg
 | 
			
		||||
		PIFR0   __reg
 | 
			
		||||
		PICR2H  __reg
 | 
			
		||||
		PICR2L  __reg
 | 
			
		||||
		PFRC2B  __reg
 | 
			
		||||
		PFRC2A  __reg
 | 
			
		||||
		PCTL2   __reg
 | 
			
		||||
		PCNF2   __reg
 | 
			
		||||
		PCNFE2  __reg
 | 
			
		||||
		OCR2RBL __reg
 | 
			
		||||
		OCR2RBH __reg
 | 
			
		||||
		OCR2SBL __reg
 | 
			
		||||
		OCR2SBH __reg
 | 
			
		||||
		OCR2RAL __reg
 | 
			
		||||
		OCR2RAH __reg
 | 
			
		||||
		OCR2SAL __reg
 | 
			
		||||
		OCR2SAH __reg
 | 
			
		||||
		POM2    __reg
 | 
			
		||||
		PSOC2   __reg
 | 
			
		||||
		PIM2    __reg
 | 
			
		||||
		PIFR2   __reg
 | 
			
		||||
		PASDLY2 __reg
 | 
			
		||||
	}{
 | 
			
		||||
		PICR0L:  0x68, // PSC 0 Input Capture Register
 | 
			
		||||
		PICR0H:  0x68, // PSC 0 Input Capture Register
 | 
			
		||||
		PFRC0B:  0x63, // PSC 0 Input B Control
 | 
			
		||||
		PFRC0A:  0x62, // PSC 0 Input A Control
 | 
			
		||||
		PCTL0:   0x32, // PSC 0 Control Register
 | 
			
		||||
		PCNF0:   0x31, // PSC 0 Configuration Register
 | 
			
		||||
		OCR0RBL: 0x44, // Output Compare RB Register
 | 
			
		||||
		OCR0RBH: 0x44, // Output Compare RB Register
 | 
			
		||||
		OCR0SBL: 0x42, // Output Compare SB Register
 | 
			
		||||
		OCR0SBH: 0x42, // Output Compare SB Register
 | 
			
		||||
		OCR0RAL: 0x4a, // Output Compare RA Register
 | 
			
		||||
		OCR0RAH: 0x4a, // Output Compare RA Register
 | 
			
		||||
		OCR0SAL: 0x60, // Output Compare SA Register
 | 
			
		||||
		OCR0SAH: 0x60, // Output Compare SA Register
 | 
			
		||||
		PSOC0:   0x6a, // PSC0 Synchro and Output Configuration
 | 
			
		||||
		PIM0:    0x2f, // PSC0 Interrupt Mask Register
 | 
			
		||||
		PIFR0:   0x30, // PSC0 Interrupt Flag Register
 | 
			
		||||
		PICR2H:  0x6d, // PSC 2 Input Capture Register High
 | 
			
		||||
		PICR2L:  0x6c, // PSC 2 Input Capture Register Low
 | 
			
		||||
		PFRC2B:  0x67, // PSC 2 Input B Control
 | 
			
		||||
		PFRC2A:  0x66, // PSC 2 Input B Control
 | 
			
		||||
		PCTL2:   0x36, // PSC 2 Control Register
 | 
			
		||||
		PCNF2:   0x35, // PSC 2 Configuration Register
 | 
			
		||||
		PCNFE2:  0x70, // PSC 2 Enhanced Configuration Register
 | 
			
		||||
		OCR2RBL: 0x48, // Output Compare RB Register
 | 
			
		||||
		OCR2RBH: 0x48, // Output Compare RB Register
 | 
			
		||||
		OCR2SBL: 0x46, // Output Compare SB Register
 | 
			
		||||
		OCR2SBH: 0x46, // Output Compare SB Register
 | 
			
		||||
		OCR2RAL: 0x4e, // Output Compare RA Register
 | 
			
		||||
		OCR2RAH: 0x4e, // Output Compare RA Register
 | 
			
		||||
		OCR2SAL: 0x64, // Output Compare SA Register
 | 
			
		||||
		OCR2SAH: 0x64, // Output Compare SA Register
 | 
			
		||||
		POM2:    0x6f, // PSC 2 Output Matrix
 | 
			
		||||
		PSOC2:   0x6e, // PSC2 Synchro and Output Configuration
 | 
			
		||||
		PIM2:    0x33, // PSC2 Interrupt Mask Register
 | 
			
		||||
		PIFR2:   0x34, // PSC2 Interrupt Flag Register
 | 
			
		||||
		PASDLY2: 0x71, // Analog Synchronization Delay Register
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	// Timer/Counter, 16-bit
 | 
			
		||||
	TC16 = struct {
 | 
			
		||||
		TIMSK1 __reg
 | 
			
		||||
		TIFR1  __reg
 | 
			
		||||
		TCCR1B __reg
 | 
			
		||||
		TCNT1L __reg
 | 
			
		||||
		TCNT1H __reg
 | 
			
		||||
		ICR1L  __reg
 | 
			
		||||
		ICR1H  __reg
 | 
			
		||||
	}{
 | 
			
		||||
		TIMSK1: 0x21, // Timer/Counter Interrupt Mask Register
 | 
			
		||||
		TIFR1:  0x22, // Timer/Counter Interrupt Flag register
 | 
			
		||||
		TCCR1B: 0x8a, // Timer/Counter1 Control Register B
 | 
			
		||||
		TCNT1L: 0x5a, // Timer/Counter1  Bytes
 | 
			
		||||
		TCNT1H: 0x5a, // Timer/Counter1  Bytes
 | 
			
		||||
		ICR1L:  0x8c, // Timer/Counter1 Input Capture Register  Bytes
 | 
			
		||||
		ICR1H:  0x8c, // Timer/Counter1 Input Capture Register  Bytes
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	// Bootloader
 | 
			
		||||
	BOOT_LOAD = struct {
 | 
			
		||||
		SPMCSR __reg
 | 
			
		||||
	}{
 | 
			
		||||
		SPMCSR: 0x57, // Store Program Memory Control Register
 | 
			
		||||
	}
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
// Bitfields for FUSE: Fuses
 | 
			
		||||
const (
 | 
			
		||||
	// EXTENDED
 | 
			
		||||
	EXTENDED_PSC2RB   = 0x80 // PSC2 Reset Behavior
 | 
			
		||||
	EXTENDED_PSC2RBA  = 0x40 // PSC2 Reset Behavior for 22 and 23
 | 
			
		||||
	EXTENDED_PSC0RB   = 0x20 // PSC0 Reset Behavior
 | 
			
		||||
	EXTENDED_PSCRV    = 0x10 // PSC Reset Value
 | 
			
		||||
	EXTENDED_PSCINRB  = 0x8  // PSC2 and PSC0 input Reset Behavior
 | 
			
		||||
	EXTENDED_BODLEVEL = 0x7  // Brown-out Detector Trigger Level
 | 
			
		||||
 | 
			
		||||
	// HIGH
 | 
			
		||||
	HIGH_RSTDISBL = 0x80 // Reset Disabled (Enable PE0 as I/O pin)
 | 
			
		||||
	HIGH_DWEN     = 0x40 // Debug Wire enable
 | 
			
		||||
	HIGH_SPIEN    = 0x20 // Serial program downloading (SPI) enabled
 | 
			
		||||
	HIGH_WDTON    = 0x10 // Watch-dog Timer always on
 | 
			
		||||
	HIGH_EESAVE   = 0x8  // Preserve EEPROM through the Chip Erase cycle
 | 
			
		||||
	HIGH_BOOTSZ   = 0x6  // Select Boot Size
 | 
			
		||||
	HIGH_BOOTRST  = 0x1  // Select Reset Vector
 | 
			
		||||
 | 
			
		||||
	// LOW
 | 
			
		||||
	LOW_CKDIV8    = 0x80 // Divide clock by 8 internally
 | 
			
		||||
	LOW_CKOUT     = 0x40 // Clock output on PORTD1
 | 
			
		||||
	LOW_SUT_CKSEL = 0x3f // Select Clock Source
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
// Bitfields for LOCKBIT: Lockbits
 | 
			
		||||
const (
 | 
			
		||||
	// LOCKBIT
 | 
			
		||||
	LOCKBIT_LB   = 0x3  // Memory Lock
 | 
			
		||||
	LOCKBIT_BLB0 = 0xc  // Boot Loader Protection Mode
 | 
			
		||||
	LOCKBIT_BLB1 = 0x30 // Boot Loader Protection Mode
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
// Bitfields for DAC: Digital-to-Analog Converter
 | 
			
		||||
const (
 | 
			
		||||
	// DACH: DAC Data Register High Byte
 | 
			
		||||
	DACH_DACH = 0xff // DAC Data Register High Byte Bits
 | 
			
		||||
 | 
			
		||||
	// DACL: DAC Data Register Low Byte
 | 
			
		||||
	DACL_DACL = 0xff // DAC Data Register Low Byte Bits
 | 
			
		||||
 | 
			
		||||
	// DACON: DAC Control Register
 | 
			
		||||
	DACON_DAATE = 0x80 // DAC Auto Trigger Enable Bit
 | 
			
		||||
	DACON_DATS  = 0x70 // DAC Trigger Selection Bits
 | 
			
		||||
	DACON_DALA  = 0x4  // DAC Left Adjust
 | 
			
		||||
	DACON_DAEN  = 0x1  // DAC Enable Bit
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
// Bitfields for SPI: Serial Peripheral Interface
 | 
			
		||||
const (
 | 
			
		||||
	// SPCR: SPI Control Register
 | 
			
		||||
	SPCR_SPIE = 0x80 // SPI Interrupt Enable
 | 
			
		||||
	SPCR_SPE  = 0x40 // SPI Enable
 | 
			
		||||
	SPCR_DORD = 0x20 // Data Order
 | 
			
		||||
	SPCR_MSTR = 0x10 // Master/Slave Select
 | 
			
		||||
	SPCR_CPOL = 0x8  // Clock polarity
 | 
			
		||||
	SPCR_CPHA = 0x4  // Clock Phase
 | 
			
		||||
	SPCR_SPR  = 0x3  // SPI Clock Rate Selects
 | 
			
		||||
 | 
			
		||||
	// SPSR: SPI Status Register
 | 
			
		||||
	SPSR_SPIF  = 0x80 // SPI Interrupt Flag
 | 
			
		||||
	SPSR_WCOL  = 0x40 // Write Collision Flag
 | 
			
		||||
	SPSR_SPI2X = 0x1  // Double SPI Speed Bit
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
// Bitfields for WDT: Watchdog Timer
 | 
			
		||||
const (
 | 
			
		||||
	// WDTCSR: Watchdog Timer Control Register
 | 
			
		||||
	WDTCSR_WDIF = 0x80 // Watchdog Timeout Interrupt Flag
 | 
			
		||||
	WDTCSR_WDIE = 0x40 // Watchdog Timeout Interrupt Enable
 | 
			
		||||
	WDTCSR_WDP  = 0x27 // Watchdog Timer Prescaler Bits
 | 
			
		||||
	WDTCSR_WDCE = 0x10 // Watchdog Change Enable
 | 
			
		||||
	WDTCSR_WDE  = 0x8  // Watch Dog Enable
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
// Bitfields for EXINT: External Interrupts
 | 
			
		||||
const (
 | 
			
		||||
	// EICRA: External Interrupt Control Register A
 | 
			
		||||
	EICRA_ISC2 = 0x30 // External Interrupt Sense Control Bit
 | 
			
		||||
	EICRA_ISC1 = 0xc  // External Interrupt Sense Control Bit
 | 
			
		||||
	EICRA_ISC0 = 0x3  // External Interrupt Sense Control Bit
 | 
			
		||||
 | 
			
		||||
	// EIMSK: External Interrupt Mask Register
 | 
			
		||||
	EIMSK_INT = 0x7 // External Interrupt Request 2 Enable
 | 
			
		||||
 | 
			
		||||
	// EIFR: External Interrupt Flag Register
 | 
			
		||||
	EIFR_INTF = 0x7 // External Interrupt Flags
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
// Bitfields for ADC: Analog-to-Digital Converter
 | 
			
		||||
const (
 | 
			
		||||
	// ADMUX: The ADC multiplexer Selection Register
 | 
			
		||||
	ADMUX_REFS  = 0xc0 // Reference Selection Bits
 | 
			
		||||
	ADMUX_ADLAR = 0x20 // Left Adjust Result
 | 
			
		||||
	ADMUX_MUX   = 0xf  // Analog Channel and Gain Selection Bits
 | 
			
		||||
 | 
			
		||||
	// ADCSRA: The ADC Control and Status register
 | 
			
		||||
	ADCSRA_ADEN  = 0x80 // ADC Enable
 | 
			
		||||
	ADCSRA_ADSC  = 0x40 // ADC Start Conversion
 | 
			
		||||
	ADCSRA_ADATE = 0x20 // ADC Auto Trigger Enable
 | 
			
		||||
	ADCSRA_ADIF  = 0x10 // ADC Interrupt Flag
 | 
			
		||||
	ADCSRA_ADIE  = 0x8  // ADC Interrupt Enable
 | 
			
		||||
	ADCSRA_ADPS  = 0x7  // ADC  Prescaler Select Bits
 | 
			
		||||
 | 
			
		||||
	// ADCSRB: ADC Control and Status Register B
 | 
			
		||||
	ADCSRB_ADHSM   = 0x80 // ADC High Speed Mode
 | 
			
		||||
	ADCSRB_ADNCDIS = 0x40 // ADC Noise Canceller Disable
 | 
			
		||||
	ADCSRB_ADSSEN  = 0x10 // ADC Single Shot Enable on PSC's Synchronisation Signals
 | 
			
		||||
	ADCSRB_ADTS    = 0xf  // ADC Auto Trigger Sources
 | 
			
		||||
 | 
			
		||||
	// DIDR0: Digital Input Disable Register 0
 | 
			
		||||
	DIDR0_ADC7D = 0x80
 | 
			
		||||
	DIDR0_ADC6D = 0x40 // ADC7 Digital input Disable
 | 
			
		||||
	DIDR0_ADC5D = 0x20 // ADC5 Digital input Disable
 | 
			
		||||
	DIDR0_ADC4D = 0x10 // ADC4 Digital input Disable
 | 
			
		||||
	DIDR0_ADC3D = 0x8  // ADC3 Digital input Disable
 | 
			
		||||
	DIDR0_ADC2D = 0x4  // ADC2 Digital input Disable
 | 
			
		||||
	DIDR0_ADC1D = 0x2  // ADC1 Digital input Disable
 | 
			
		||||
	DIDR0_ADC0D = 0x1  // ADC0 Digital input Disable
 | 
			
		||||
 | 
			
		||||
	// DIDR1: Digital Input Disable Register 0
 | 
			
		||||
	DIDR1_ACMP1MD  = 0x8
 | 
			
		||||
	DIDR1_AMP0POSD = 0x4
 | 
			
		||||
	DIDR1_ADC10D   = 0x2
 | 
			
		||||
	DIDR1_ADC9D    = 0x1
 | 
			
		||||
 | 
			
		||||
	// AMP0CSR
 | 
			
		||||
	AMP0CSR_AMP0EN = 0x80
 | 
			
		||||
	AMP0CSR_AMP0IS = 0x40
 | 
			
		||||
	AMP0CSR_AMP0G  = 0x30
 | 
			
		||||
	AMP0CSR_AMP0GS = 0x8
 | 
			
		||||
	AMP0CSR_AMP0TS = 0x3
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
// Bitfields for AC: Analog Comparator
 | 
			
		||||
const (
 | 
			
		||||
	// AC3CON: Analog Comparator3 Control Register
 | 
			
		||||
	AC3CON_AC3EN  = 0x80 // Analog Comparator3 Enable Bit
 | 
			
		||||
	AC3CON_AC3IE  = 0x40 // Analog Comparator 3 Interrupt Enable Bit
 | 
			
		||||
	AC3CON_AC3IS  = 0x30 // Analog Comparator 3  Interrupt Select Bit
 | 
			
		||||
	AC3CON_AC3OEA = 0x8  // Analog Comparator 3 Alternate Output Enable
 | 
			
		||||
	AC3CON_AC3M   = 0x7  // Analog Comparator 3 Multiplexer Register
 | 
			
		||||
 | 
			
		||||
	// AC1CON: Analog Comparator 1 Control Register
 | 
			
		||||
	AC1CON_AC1EN = 0x80 // Analog Comparator 1 Enable Bit
 | 
			
		||||
	AC1CON_AC1IE = 0x40 // Analog Comparator 1 Interrupt Enable Bit
 | 
			
		||||
	AC1CON_AC1IS = 0x30 // Analog Comparator 1  Interrupt Select Bit
 | 
			
		||||
	AC1CON_AC1M  = 0x7  // Analog Comparator 1 Multiplexer Register
 | 
			
		||||
 | 
			
		||||
	// AC2CON: Analog Comparator 2 Control Register
 | 
			
		||||
	AC2CON_AC2EN = 0x80 // Analog Comparator 2 Enable Bit
 | 
			
		||||
	AC2CON_AC2IE = 0x40 // Analog Comparator 2 Interrupt Enable Bit
 | 
			
		||||
	AC2CON_AC2IS = 0x30 // Analog Comparator 2  Interrupt Select Bit
 | 
			
		||||
	AC2CON_AC2M  = 0x7  // Analog Comparator 2 Multiplexer Register
 | 
			
		||||
 | 
			
		||||
	// ACSR: Analog Comparator Status Register
 | 
			
		||||
	ACSR_AC3IF = 0x80 // Analog Comparator 3 Interrupt Flag Bit
 | 
			
		||||
	ACSR_AC2IF = 0x40 // Analog Comparator 2 Interrupt Flag Bit
 | 
			
		||||
	ACSR_AC1IF = 0x20 // Analog Comparator 1  Interrupt Flag Bit
 | 
			
		||||
	ACSR_AC3O  = 0x8  // Analog Comparator 3 Output Bit
 | 
			
		||||
	ACSR_AC2O  = 0x4  // Analog Comparator 2 Output Bit
 | 
			
		||||
	ACSR_AC1O  = 0x2  // Analog Comparator 1 Output Bit
 | 
			
		||||
 | 
			
		||||
	// AC3ECON
 | 
			
		||||
	AC3ECON_AC3OI = 0x20 // Analog Comparator Ouput Invert
 | 
			
		||||
	AC3ECON_AC3OE = 0x10 // Analog Comparator Ouput Enable
 | 
			
		||||
	AC3ECON_AC3H  = 0x7  // Analog Comparator Hysteresis Select
 | 
			
		||||
 | 
			
		||||
	// AC2ECON
 | 
			
		||||
	AC2ECON_AC2OI = 0x20 // Analog Comparator Ouput Invert
 | 
			
		||||
	AC2ECON_AC2OE = 0x10 // Analog Comparator Ouput Enable
 | 
			
		||||
	AC2ECON_AC2H  = 0x7  // Analog Comparator Hysteresis Select
 | 
			
		||||
 | 
			
		||||
	// AC1ECON
 | 
			
		||||
	AC1ECON_AC1OI  = 0x20 // Analog Comparator Ouput Invert
 | 
			
		||||
	AC1ECON_AC1OE  = 0x10 // Analog Comparator Ouput Enable
 | 
			
		||||
	AC1ECON_AC1ICE = 0x8  // Analog Comparator Interrupt Capture Enable
 | 
			
		||||
	AC1ECON_AC1H   = 0x7  // Analog Comparator Hysteresis Select
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
// Bitfields for CPU: CPU Registers
 | 
			
		||||
const (
 | 
			
		||||
	// SREG: Status Register
 | 
			
		||||
	SREG_I = 0x80 // Global Interrupt Enable
 | 
			
		||||
	SREG_T = 0x40 // Bit Copy Storage
 | 
			
		||||
	SREG_H = 0x20 // Half Carry Flag
 | 
			
		||||
	SREG_S = 0x10 // Sign Bit
 | 
			
		||||
	SREG_V = 0x8  // Two's Complement Overflow Flag
 | 
			
		||||
	SREG_N = 0x4  // Negative Flag
 | 
			
		||||
	SREG_Z = 0x2  // Zero Flag
 | 
			
		||||
	SREG_C = 0x1  // Carry Flag
 | 
			
		||||
 | 
			
		||||
	// MCUCR: MCU Control Register
 | 
			
		||||
	MCUCR_PUD    = 0x10 // Pull-up disable
 | 
			
		||||
	MCUCR_RSTDIS = 0x8  // Reset Pin Disable
 | 
			
		||||
	MCUCR_CKRC81 = 0x4  // Frequency Selection of the Calibrated RC Oscillator
 | 
			
		||||
	MCUCR_IVSEL  = 0x2  // Interrupt Vector Select
 | 
			
		||||
	MCUCR_IVCE   = 0x1  // Interrupt Vector Change Enable
 | 
			
		||||
 | 
			
		||||
	// MCUSR: MCU Status Register
 | 
			
		||||
	MCUSR_WDRF  = 0x8 // Watchdog Reset Flag
 | 
			
		||||
	MCUSR_BORF  = 0x4 // Brown-out Reset Flag
 | 
			
		||||
	MCUSR_EXTRF = 0x2 // External Reset Flag
 | 
			
		||||
	MCUSR_PORF  = 0x1 // Power-on reset flag
 | 
			
		||||
 | 
			
		||||
	// OSCCAL: Oscillator Calibration Value
 | 
			
		||||
	OSCCAL_OSCCAL = 0xff // Oscillator Calibration
 | 
			
		||||
 | 
			
		||||
	// CLKPR
 | 
			
		||||
	CLKPR_CLKPCE = 0x80
 | 
			
		||||
	CLKPR_CLKPS  = 0xf
 | 
			
		||||
 | 
			
		||||
	// SMCR: Sleep Mode Control Register
 | 
			
		||||
	SMCR_SM = 0xe // Sleep Mode Select bits
 | 
			
		||||
	SMCR_SE = 0x1 // Sleep Enable
 | 
			
		||||
 | 
			
		||||
	// GPIOR2: General Purpose IO Register 2
 | 
			
		||||
	GPIOR2_GPIOR = 0xff // General Purpose IO Register 2 bis
 | 
			
		||||
 | 
			
		||||
	// GPIOR1: General Purpose IO Register 1
 | 
			
		||||
	GPIOR1_GPIOR = 0xff // General Purpose IO Register 1 bis
 | 
			
		||||
 | 
			
		||||
	// GPIOR0: General Purpose IO Register 0
 | 
			
		||||
	GPIOR0_GPIOR07 = 0x80 // General Purpose IO Register 0 bit 7
 | 
			
		||||
	GPIOR0_GPIOR06 = 0x40 // General Purpose IO Register 0 bit 6
 | 
			
		||||
	GPIOR0_GPIOR05 = 0x20 // General Purpose IO Register 0 bit 5
 | 
			
		||||
	GPIOR0_GPIOR04 = 0x10 // General Purpose IO Register 0 bit 4
 | 
			
		||||
	GPIOR0_GPIOR03 = 0x8  // General Purpose IO Register 0 bit 3
 | 
			
		||||
	GPIOR0_GPIOR02 = 0x4  // General Purpose IO Register 0 bit 2
 | 
			
		||||
	GPIOR0_GPIOR01 = 0x2  // General Purpose IO Register 0 bit 1
 | 
			
		||||
	GPIOR0_GPIOR00 = 0x1  // General Purpose IO Register 0 bit 0
 | 
			
		||||
 | 
			
		||||
	// PLLCSR: PLL Control And Status Register
 | 
			
		||||
	PLLCSR_PLLF  = 0x3c
 | 
			
		||||
	PLLCSR_PLLE  = 0x2 // PLL Enable
 | 
			
		||||
	PLLCSR_PLOCK = 0x1 // PLL Lock Detector
 | 
			
		||||
 | 
			
		||||
	// PRR: Power Reduction Register
 | 
			
		||||
	PRR_PRPSC2 = 0x80 // Power Reduction PSC2
 | 
			
		||||
	PRR_PRPSCR = 0x20 // Power Reduction PSC0
 | 
			
		||||
	PRR_PRTIM1 = 0x10 // Power Reduction Timer/Counter1
 | 
			
		||||
	PRR_PRSPI  = 0x4  // Power Reduction Serial Peripheral Interface
 | 
			
		||||
	PRR_PRADC  = 0x1  // Power Reduction ADC
 | 
			
		||||
 | 
			
		||||
	// CLKCSR
 | 
			
		||||
	CLKCSR_CLKCCE = 0x80 // Clock Control Change Enable
 | 
			
		||||
	CLKCSR_CLKRDY = 0x10 // Clock Ready Flag
 | 
			
		||||
	CLKCSR_CLKC   = 0xf  // Clock Control
 | 
			
		||||
 | 
			
		||||
	// CLKSELR
 | 
			
		||||
	CLKSELR_COUT  = 0x40 // Clock OUT
 | 
			
		||||
	CLKSELR_CSUT  = 0x30 // Clock Start up Time
 | 
			
		||||
	CLKSELR_CKSEL = 0xf  // Clock Source Select
 | 
			
		||||
 | 
			
		||||
	// BGCCR: BandGap Current Calibration Register
 | 
			
		||||
	BGCCR_BGCC = 0xf
 | 
			
		||||
 | 
			
		||||
	// BGCRR: BandGap Resistor Calibration Register
 | 
			
		||||
	BGCRR_BGCR = 0xf
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
// Bitfields for EEPROM: EEPROM
 | 
			
		||||
const (
 | 
			
		||||
	// EECR: EEPROM Control Register
 | 
			
		||||
	EECR_NVMBSY = 0x80 // None Volatile Busy Memory Busy
 | 
			
		||||
	EECR_EEPAGE = 0x40 // EEPROM Page Access
 | 
			
		||||
	EECR_EEPM   = 0x30 // EEPROM Programming Mode
 | 
			
		||||
	EECR_EERIE  = 0x8  // EEPROM Ready Interrupt Enable
 | 
			
		||||
	EECR_EEMWE  = 0x4  // EEPROM Master Write Enable
 | 
			
		||||
	EECR_EEWE   = 0x2  // EEPROM Write Enable
 | 
			
		||||
	EECR_EERE   = 0x1  // EEPROM Read Enable
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
// Bitfields for PSC: Power Stage Controller
 | 
			
		||||
const (
 | 
			
		||||
	// PFRC0B: PSC 0 Input B Control
 | 
			
		||||
	PFRC0B_PCAE0B  = 0x80 // PSC 0 Capture Enable Input Part B
 | 
			
		||||
	PFRC0B_PISEL0B = 0x40 // PSC 0 Input Select for Part B
 | 
			
		||||
	PFRC0B_PELEV0B = 0x20 // PSC 0 Edge Level Selector on Input Part B
 | 
			
		||||
	PFRC0B_PFLTE0B = 0x10 // PSC 0 Filter Enable on Input Part B
 | 
			
		||||
	PFRC0B_PRFM0B  = 0xf  // PSC 0 Retrigger and Fault Mode for Part B
 | 
			
		||||
 | 
			
		||||
	// PFRC0A: PSC 0 Input A Control
 | 
			
		||||
	PFRC0A_PCAE0A  = 0x80 // PSC 0 Capture Enable Input Part A
 | 
			
		||||
	PFRC0A_PISEL0A = 0x40 // PSC 0 Input Select for Part A
 | 
			
		||||
	PFRC0A_PELEV0A = 0x20 // PSC 0 Edge Level Selector on Input Part A
 | 
			
		||||
	PFRC0A_PFLTE0A = 0x10 // PSC 0 Filter Enable on Input Part A
 | 
			
		||||
	PFRC0A_PRFM0A  = 0xf  // PSC 0 Retrigger and Fault Mode for Part A
 | 
			
		||||
 | 
			
		||||
	// PCTL0: PSC 0 Control Register
 | 
			
		||||
	PCTL0_PPRE0  = 0xc0 // PSC 0 Prescaler Selects
 | 
			
		||||
	PCTL0_PBFM0  = 0x24 // PSC 0 Balance Flank Width Modulation
 | 
			
		||||
	PCTL0_PAOC0B = 0x10 // PSC 0 Asynchronous Output Control B
 | 
			
		||||
	PCTL0_PAOC0A = 0x8  // PSC 0 Asynchronous Output Control A
 | 
			
		||||
	PCTL0_PCCYC0 = 0x2  // PSC0 Complete Cycle
 | 
			
		||||
	PCTL0_PRUN0  = 0x1  // PSC 0 Run
 | 
			
		||||
 | 
			
		||||
	// PCNF0: PSC 0 Configuration Register
 | 
			
		||||
	PCNF0_PFIFTY0  = 0x80 // PSC 0 Fifty
 | 
			
		||||
	PCNF0_PALOCK0  = 0x40 // PSC 0 Autolock
 | 
			
		||||
	PCNF0_PLOCK0   = 0x20 // PSC 0 Lock
 | 
			
		||||
	PCNF0_PMODE0   = 0x18 // PSC 0 Mode
 | 
			
		||||
	PCNF0_POP0     = 0x4  // PSC 0 Output Polarity
 | 
			
		||||
	PCNF0_PCLKSEL0 = 0x2  // PSC 0 Input Clock Select
 | 
			
		||||
 | 
			
		||||
	// PSOC0: PSC0 Synchro and Output Configuration
 | 
			
		||||
	PSOC0_PISEL0A1 = 0x80 // PSC Input Select
 | 
			
		||||
	PSOC0_PISEL0B1 = 0x40 // PSC Input Select
 | 
			
		||||
	PSOC0_PSYNC0   = 0x30 // Synchronisation out for ADC selection
 | 
			
		||||
	PSOC0_POEN0B   = 0x4  // PSCOUT01 Output Enable
 | 
			
		||||
	PSOC0_POEN0A   = 0x1  // PSCOUT00 Output Enable
 | 
			
		||||
 | 
			
		||||
	// PIM0: PSC0 Interrupt Mask Register
 | 
			
		||||
	PIM0_PEVE0B  = 0x10 // External Event B Interrupt Enable
 | 
			
		||||
	PIM0_PEVE0A  = 0x8  // External Event A Interrupt Enable
 | 
			
		||||
	PIM0_PEOEPE0 = 0x2  // End of Enhanced Cycle Enable
 | 
			
		||||
	PIM0_PEOPE0  = 0x1  // End of Cycle Interrupt Enable
 | 
			
		||||
 | 
			
		||||
	// PIFR0: PSC0 Interrupt Flag Register
 | 
			
		||||
	PIFR0_POAC0B = 0x80 // PSC 0 Output A Activity
 | 
			
		||||
	PIFR0_POAC0A = 0x40 // PSC 0 Output A Activity
 | 
			
		||||
	PIFR0_PEV0B  = 0x10 // External Event B Interrupt
 | 
			
		||||
	PIFR0_PEV0A  = 0x8  // External Event A Interrupt
 | 
			
		||||
	PIFR0_PRN0   = 0x6  // Ramp Number
 | 
			
		||||
	PIFR0_PEOP0  = 0x1  // End of PSC0 Interrupt
 | 
			
		||||
 | 
			
		||||
	// PICR2H: PSC 2 Input Capture Register High
 | 
			
		||||
	PICR2H_PCST2  = 0x80 // PSC 2 Capture Software Trigger Bit
 | 
			
		||||
	PICR2H_PICR21 = 0xc
 | 
			
		||||
	PICR2H_PICR2  = 0x3
 | 
			
		||||
 | 
			
		||||
	// PFRC2B: PSC 2 Input B Control
 | 
			
		||||
	PFRC2B_PCAE2B  = 0x80 // PSC 2 Capture Enable Input Part B
 | 
			
		||||
	PFRC2B_PISEL2B = 0x40 // PSC 2 Input Select for Part B
 | 
			
		||||
	PFRC2B_PELEV2B = 0x20 // PSC 2 Edge Level Selector on Input Part B
 | 
			
		||||
	PFRC2B_PFLTE2B = 0x10 // PSC 2 Filter Enable on Input Part B
 | 
			
		||||
	PFRC2B_PRFM2B  = 0xf  // PSC 2 Retrigger and Fault Mode for Part B
 | 
			
		||||
 | 
			
		||||
	// PFRC2A: PSC 2 Input B Control
 | 
			
		||||
	PFRC2A_PCAE2A  = 0x80 // PSC 2 Capture Enable Input Part A
 | 
			
		||||
	PFRC2A_PISEL2A = 0x40 // PSC 2 Input Select for Part A
 | 
			
		||||
	PFRC2A_PELEV2A = 0x20 // PSC 2 Edge Level Selector on Input Part A
 | 
			
		||||
	PFRC2A_PFLTE2A = 0x10 // PSC 2 Filter Enable on Input Part A
 | 
			
		||||
	PFRC2A_PRFM2A  = 0xf  // PSC 2 Retrigger and Fault Mode for Part A
 | 
			
		||||
 | 
			
		||||
	// PCTL2: PSC 2 Control Register
 | 
			
		||||
	PCTL2_PPRE2  = 0xc0 // PSC 2 Prescaler Selects
 | 
			
		||||
	PCTL2_PBFM2  = 0x20 // Balance Flank Width Modulation
 | 
			
		||||
	PCTL2_PAOC2B = 0x10 // PSC 2 Asynchronous Output Control B
 | 
			
		||||
	PCTL2_PAOC2A = 0x8  // PSC 2 Asynchronous Output Control A
 | 
			
		||||
	PCTL2_PARUN2 = 0x4  // PSC2 Auto Run
 | 
			
		||||
	PCTL2_PCCYC2 = 0x2  // PSC2 Complete Cycle
 | 
			
		||||
	PCTL2_PRUN2  = 0x1  // PSC 2 Run
 | 
			
		||||
 | 
			
		||||
	// PCNF2: PSC 2 Configuration Register
 | 
			
		||||
	PCNF2_PFIFTY2  = 0x80 // PSC 2 Fifty
 | 
			
		||||
	PCNF2_PALOCK2  = 0x40 // PSC 2 Autolock
 | 
			
		||||
	PCNF2_PLOCK2   = 0x20 // PSC 2 Lock
 | 
			
		||||
	PCNF2_PMODE2   = 0x18 // PSC 2 Mode
 | 
			
		||||
	PCNF2_POP2     = 0x4  // PSC 2 Output Polarity
 | 
			
		||||
	PCNF2_PCLKSEL2 = 0x2  // PSC 2 Input Clock Select
 | 
			
		||||
	PCNF2_POME2    = 0x1  // PSC 2 Output Matrix Enable
 | 
			
		||||
 | 
			
		||||
	// PCNFE2: PSC 2 Enhanced Configuration Register
 | 
			
		||||
	PCNFE2_PASDLK2  = 0xe0
 | 
			
		||||
	PCNFE2_PBFM21   = 0x10
 | 
			
		||||
	PCNFE2_PELEV2A1 = 0x8
 | 
			
		||||
	PCNFE2_PELEV2B1 = 0x4
 | 
			
		||||
	PCNFE2_PISEL2A1 = 0x2
 | 
			
		||||
	PCNFE2_PISEL2B1 = 0x1
 | 
			
		||||
 | 
			
		||||
	// POM2: PSC 2 Output Matrix
 | 
			
		||||
	POM2_POMV2B = 0xf0 // Output Matrix Output B Ramps
 | 
			
		||||
	POM2_POMV2A = 0xf  // Output Matrix Output A Ramps
 | 
			
		||||
 | 
			
		||||
	// PSOC2: PSC2 Synchro and Output Configuration
 | 
			
		||||
	PSOC2_POS2   = 0xc0 // PSC 2 Output 23 Select
 | 
			
		||||
	PSOC2_PSYNC2 = 0x30 // Synchronization Out for ADC Selection
 | 
			
		||||
	PSOC2_POEN2D = 0x8  // PSCOUT23 Output Enable
 | 
			
		||||
	PSOC2_POEN2B = 0x4  // PSCOUT21 Output Enable
 | 
			
		||||
	PSOC2_POEN2C = 0x2  // PSCOUT22 Output Enable
 | 
			
		||||
	PSOC2_POEN2A = 0x1  // PSCOUT20 Output Enable
 | 
			
		||||
 | 
			
		||||
	// PIM2: PSC2 Interrupt Mask Register
 | 
			
		||||
	PIM2_PSEIE2  = 0x20 // PSC 2 Synchro Error Interrupt Enable
 | 
			
		||||
	PIM2_PEVE2B  = 0x10 // External Event B Interrupt Enable
 | 
			
		||||
	PIM2_PEVE2A  = 0x8  // External Event A Interrupt Enable
 | 
			
		||||
	PIM2_PEOEPE2 = 0x2  // End of Enhanced Cycle Interrupt Enable
 | 
			
		||||
	PIM2_PEOPE2  = 0x1  // End of Cycle Interrupt Enable
 | 
			
		||||
 | 
			
		||||
	// PIFR2: PSC2 Interrupt Flag Register
 | 
			
		||||
	PIFR2_POAC2B = 0x80 // PSC 2 Output A Activity
 | 
			
		||||
	PIFR2_POAC2A = 0x40 // PSC 2 Output A Activity
 | 
			
		||||
	PIFR2_PSEI2  = 0x20 // PSC 2 Synchro Error Interrupt
 | 
			
		||||
	PIFR2_PEV2B  = 0x10 // External Event B Interrupt
 | 
			
		||||
	PIFR2_PEV2A  = 0x8  // External Event A Interrupt
 | 
			
		||||
	PIFR2_PRN2   = 0x6  // Ramp Number
 | 
			
		||||
	PIFR2_PEOP2  = 0x1  // End of PSC2 Interrupt
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
// Bitfields for TC16: Timer/Counter, 16-bit
 | 
			
		||||
const (
 | 
			
		||||
	// TIMSK1: Timer/Counter Interrupt Mask Register
 | 
			
		||||
	TIMSK1_ICIE1 = 0x20 // Timer/Counter1 Input Capture Interrupt Enable
 | 
			
		||||
	TIMSK1_TOIE1 = 0x1  // Timer/Counter1 Overflow Interrupt Enable
 | 
			
		||||
 | 
			
		||||
	// TIFR1: Timer/Counter Interrupt Flag register
 | 
			
		||||
	TIFR1_ICF1 = 0x20 // Input Capture Flag 1
 | 
			
		||||
	TIFR1_TOV1 = 0x1  // Timer/Counter1 Overflow Flag
 | 
			
		||||
 | 
			
		||||
	// TCCR1B: Timer/Counter1 Control Register B
 | 
			
		||||
	TCCR1B_ICNC1 = 0x80 // Input Capture 1 Noise Canceler
 | 
			
		||||
	TCCR1B_ICES1 = 0x40 // Input Capture 1 Edge Select
 | 
			
		||||
	TCCR1B_WGM13 = 0x10 // Waveform Generation Mode
 | 
			
		||||
	TCCR1B_CS1   = 0x7  // Prescaler source of Timer/Counter 1
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
// Bitfields for BOOT_LOAD: Bootloader
 | 
			
		||||
const (
 | 
			
		||||
	// SPMCSR: Store Program Memory Control Register
 | 
			
		||||
	SPMCSR_SPMIE  = 0x80 // SPM Interrupt Enable
 | 
			
		||||
	SPMCSR_RWWSB  = 0x40 // Read While Write Section Busy
 | 
			
		||||
	SPMCSR_SIGRD  = 0x20 // Signature Row Read
 | 
			
		||||
	SPMCSR_RWWSRE = 0x10 // Read While Write section read enable
 | 
			
		||||
	SPMCSR_BLBSET = 0x8  // Boot Lock Bit Set
 | 
			
		||||
	SPMCSR_PGWRT  = 0x4  // Page Write
 | 
			
		||||
	SPMCSR_PGERS  = 0x2  // Page Erase
 | 
			
		||||
	SPMCSR_SPMEN  = 0x1  // Store Program Memory Enable
 | 
			
		||||
)
 | 
			
		||||
							
								
								
									
										6
									
								
								src/device/avr/at90pwm161.ld
									
										
									
									
									
										Обычный файл
									
								
							
							
						
						
									
										6
									
								
								src/device/avr/at90pwm161.ld
									
										
									
									
									
										Обычный файл
									
								
							| 
						 | 
				
			
			@ -0,0 +1,6 @@
 | 
			
		|||
/* Automatically generated file. DO NOT EDIT. */
 | 
			
		||||
/* Generated by gen-device.py from AT90PWM161.atdf, see http://packs.download.atmel.com/ */
 | 
			
		||||
 | 
			
		||||
__flash_size = 0x4000;
 | 
			
		||||
__ram_size   = 0x400;
 | 
			
		||||
__num_isrs   = 20;
 | 
			
		||||
							
								
								
									
										934
									
								
								src/device/avr/at90pwm216.go
									
										
									
									
									
										Обычный файл
									
								
							
							
						
						
									
										934
									
								
								src/device/avr/at90pwm216.go
									
										
									
									
									
										Обычный файл
									
								
							| 
						 | 
				
			
			@ -0,0 +1,934 @@
 | 
			
		|||
// Automatically generated file. DO NOT EDIT.
 | 
			
		||||
// Generated by gen-device.py from AT90PWM216.atdf, see http://packs.download.atmel.com/
 | 
			
		||||
 | 
			
		||||
// +build avr,at90pwm216
 | 
			
		||||
 | 
			
		||||
// Device information for the AT90PWM216.
 | 
			
		||||
//
 | 
			
		||||
package avr
 | 
			
		||||
 | 
			
		||||
// Magic type name for the compiler.
 | 
			
		||||
type __reg uint8
 | 
			
		||||
 | 
			
		||||
// Export this magic type name.
 | 
			
		||||
type RegValue = __reg
 | 
			
		||||
 | 
			
		||||
// Some information about this device.
 | 
			
		||||
const (
 | 
			
		||||
	DEVICE = "AT90PWM216"
 | 
			
		||||
	ARCH   = "AVR8"
 | 
			
		||||
	FAMILY = "megaAVR"
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
// Interrupts
 | 
			
		||||
const (
 | 
			
		||||
	IRQ_RESET         = 0  // External Pin, Power-on Reset, Brown-out Reset, Watchdog Reset and JTAG AVR Reset
 | 
			
		||||
	IRQ_PSC2_CAPT     = 1  // PSC2 Capture Event
 | 
			
		||||
	IRQ_PSC2_EC       = 2  // PSC2 End Cycle
 | 
			
		||||
	IRQ_PSC1_CAPT     = 3  // PSC1 Capture Event
 | 
			
		||||
	IRQ_PSC1_EC       = 4  // PSC1 End Cycle
 | 
			
		||||
	IRQ_PSC0_CAPT     = 5  // PSC0 Capture Event
 | 
			
		||||
	IRQ_PSC0_EC       = 6  // PSC0 End Cycle
 | 
			
		||||
	IRQ_ANALOG_COMP_0 = 7  // Analog Comparator 0
 | 
			
		||||
	IRQ_ANALOG_COMP_1 = 8  // Analog Comparator 1
 | 
			
		||||
	IRQ_ANALOG_COMP_2 = 9  // Analog Comparator 2
 | 
			
		||||
	IRQ_INT0          = 10 // External Interrupt Request 0
 | 
			
		||||
	IRQ_TIMER1_CAPT   = 11 // Timer/Counter1 Capture Event
 | 
			
		||||
	IRQ_TIMER1_COMPA  = 12 // Timer/Counter1 Compare Match A
 | 
			
		||||
	IRQ_TIMER1_COMPB  = 13 // Timer/Counter Compare Match B
 | 
			
		||||
	IRQ_RESERVED15    = 14 //
 | 
			
		||||
	IRQ_TIMER1_OVF    = 15 // Timer/Counter1 Overflow
 | 
			
		||||
	IRQ_TIMER0_COMP_A = 16 // Timer/Counter0 Compare Match A
 | 
			
		||||
	IRQ_TIMER0_OVF    = 17 // Timer/Counter0 Overflow
 | 
			
		||||
	IRQ_ADC           = 18 // ADC Conversion Complete
 | 
			
		||||
	IRQ_INT1          = 19 // External Interrupt Request 1
 | 
			
		||||
	IRQ_SPI_STC       = 20 // SPI Serial Transfer Complete
 | 
			
		||||
	IRQ_USART_RX      = 21 // USART, Rx Complete
 | 
			
		||||
	IRQ_USART_UDRE    = 22 // USART Data Register Empty
 | 
			
		||||
	IRQ_USART_TX      = 23 // USART, Tx Complete
 | 
			
		||||
	IRQ_INT2          = 24 // External Interrupt Request 2
 | 
			
		||||
	IRQ_WDT           = 25 // Watchdog Timeout Interrupt
 | 
			
		||||
	IRQ_EE_READY      = 26 // EEPROM Ready
 | 
			
		||||
	IRQ_TIMER0_COMPB  = 27 // Timer Counter 0 Compare Match B
 | 
			
		||||
	IRQ_INT3          = 28 // External Interrupt Request 3
 | 
			
		||||
	IRQ_RESERVED30    = 29 //
 | 
			
		||||
	IRQ_RESERVED31    = 30 //
 | 
			
		||||
	IRQ_SPM_READY     = 31 // Store Program Memory Read
 | 
			
		||||
	IRQ_max           = 31 // Highest interrupt number on this device.
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
// Peripherals
 | 
			
		||||
var (
 | 
			
		||||
	// Fuses
 | 
			
		||||
	FUSE = struct {
 | 
			
		||||
		EXTENDED __reg
 | 
			
		||||
		HIGH     __reg
 | 
			
		||||
		LOW      __reg
 | 
			
		||||
	}{
 | 
			
		||||
		EXTENDED: 0x2,
 | 
			
		||||
		HIGH:     0x1,
 | 
			
		||||
		LOW:      0x0,
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	// Lockbits
 | 
			
		||||
	LOCKBIT = struct {
 | 
			
		||||
		LOCKBIT __reg
 | 
			
		||||
	}{
 | 
			
		||||
		LOCKBIT: 0x0,
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	// I/O Port
 | 
			
		||||
	PORT = struct {
 | 
			
		||||
		PORTB __reg
 | 
			
		||||
		DDRB  __reg
 | 
			
		||||
		PINB  __reg
 | 
			
		||||
		PORTD __reg
 | 
			
		||||
		DDRD  __reg
 | 
			
		||||
		PIND  __reg
 | 
			
		||||
		PORTE __reg
 | 
			
		||||
		DDRE  __reg
 | 
			
		||||
		PINE  __reg
 | 
			
		||||
	}{
 | 
			
		||||
		PORTB: 0x25, // Port B Data Register
 | 
			
		||||
		DDRB:  0x24, // Port B Data Direction Register
 | 
			
		||||
		PINB:  0x23, // Port B Input Pins
 | 
			
		||||
		PORTD: 0x2b, // Port D Data Register
 | 
			
		||||
		DDRD:  0x2a, // Port D Data Direction Register
 | 
			
		||||
		PIND:  0x29, // Port D Input Pins
 | 
			
		||||
		PORTE: 0x2e, // Port E Data Register
 | 
			
		||||
		DDRE:  0x2d, // Port E Data Direction Register
 | 
			
		||||
		PINE:  0x2c, // Port E Input Pins
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	// Bootloader
 | 
			
		||||
	BOOT_LOAD = struct {
 | 
			
		||||
		SPMCSR __reg
 | 
			
		||||
	}{
 | 
			
		||||
		SPMCSR: 0x57, // Store Program Memory Control Register
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	// Extended USART
 | 
			
		||||
	EUSART = struct {
 | 
			
		||||
		EUDR   __reg
 | 
			
		||||
		EUCSRA __reg
 | 
			
		||||
		EUCSRB __reg
 | 
			
		||||
		EUCSRC __reg
 | 
			
		||||
		MUBRRH __reg
 | 
			
		||||
		MUBRRL __reg
 | 
			
		||||
	}{
 | 
			
		||||
		EUDR:   0xce, // EUSART I/O Data Register
 | 
			
		||||
		EUCSRA: 0xc8, // EUSART Control and Status Register A
 | 
			
		||||
		EUCSRB: 0xc9, // EUSART Control Register B
 | 
			
		||||
		EUCSRC: 0xca, // EUSART Status Register C
 | 
			
		||||
		MUBRRH: 0xcd, // Manchester Receiver Baud Rate Register High Byte
 | 
			
		||||
		MUBRRL: 0xcc, // Manchester Receiver Baud Rate Register Low Byte
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	// Analog Comparator
 | 
			
		||||
	AC = struct {
 | 
			
		||||
		AC0CON __reg
 | 
			
		||||
		AC1CON __reg
 | 
			
		||||
		AC2CON __reg
 | 
			
		||||
		ACSR   __reg
 | 
			
		||||
	}{
 | 
			
		||||
		AC0CON: 0xad, // Analog Comparator 0 Control Register
 | 
			
		||||
		AC1CON: 0xae, // Analog Comparator 1 Control Register
 | 
			
		||||
		AC2CON: 0xaf, // Analog Comparator 2 Control Register
 | 
			
		||||
		ACSR:   0x50, // Analog Comparator Status Register
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	// Digital-to-Analog Converter
 | 
			
		||||
	DAC = struct {
 | 
			
		||||
		DACL  __reg
 | 
			
		||||
		DACH  __reg
 | 
			
		||||
		DACON __reg
 | 
			
		||||
	}{
 | 
			
		||||
		DACL:  0xab, // DAC Data Register Bytes
 | 
			
		||||
		DACH:  0xab, // DAC Data Register Bytes
 | 
			
		||||
		DACON: 0xaa, // DAC Control Register
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	// CPU Registers
 | 
			
		||||
	CPU = struct {
 | 
			
		||||
		SREG   __reg
 | 
			
		||||
		SPL    __reg
 | 
			
		||||
		SPH    __reg
 | 
			
		||||
		MCUCR  __reg
 | 
			
		||||
		MCUSR  __reg
 | 
			
		||||
		OSCCAL __reg
 | 
			
		||||
		CLKPR  __reg
 | 
			
		||||
		SMCR   __reg
 | 
			
		||||
		GPIOR3 __reg
 | 
			
		||||
		GPIOR2 __reg
 | 
			
		||||
		GPIOR1 __reg
 | 
			
		||||
		GPIOR0 __reg
 | 
			
		||||
		PLLCSR __reg
 | 
			
		||||
		PRR    __reg
 | 
			
		||||
	}{
 | 
			
		||||
		SREG:   0x5f, // Status Register
 | 
			
		||||
		SPL:    0x5d, // Stack Pointer
 | 
			
		||||
		SPH:    0x5d, // Stack Pointer
 | 
			
		||||
		MCUCR:  0x55, // MCU Control Register
 | 
			
		||||
		MCUSR:  0x54, // MCU Status Register
 | 
			
		||||
		OSCCAL: 0x66, // Oscillator Calibration Value
 | 
			
		||||
		CLKPR:  0x61,
 | 
			
		||||
		SMCR:   0x53, // Sleep Mode Control Register
 | 
			
		||||
		GPIOR3: 0x3b, // General Purpose IO Register 3
 | 
			
		||||
		GPIOR2: 0x3a, // General Purpose IO Register 2
 | 
			
		||||
		GPIOR1: 0x39, // General Purpose IO Register 1
 | 
			
		||||
		GPIOR0: 0x3e, // General Purpose IO Register 0
 | 
			
		||||
		PLLCSR: 0x49, // PLL Control And Status Register
 | 
			
		||||
		PRR:    0x64, // Power Reduction Register
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	// Timer/Counter, 8-bit
 | 
			
		||||
	TC8 = struct {
 | 
			
		||||
		TIMSK0 __reg
 | 
			
		||||
		TIFR0  __reg
 | 
			
		||||
		TCCR0A __reg
 | 
			
		||||
		TCCR0B __reg
 | 
			
		||||
		TCNT0  __reg
 | 
			
		||||
		OCR0A  __reg
 | 
			
		||||
		OCR0B  __reg
 | 
			
		||||
	}{
 | 
			
		||||
		TIMSK0: 0x6e, // Timer/Counter0 Interrupt Mask Register
 | 
			
		||||
		TIFR0:  0x35, // Timer/Counter0 Interrupt Flag register
 | 
			
		||||
		TCCR0A: 0x44, // Timer/Counter Control Register A
 | 
			
		||||
		TCCR0B: 0x45, // Timer/Counter Control Register B
 | 
			
		||||
		TCNT0:  0x46, // Timer/Counter0
 | 
			
		||||
		OCR0A:  0x47, // Timer/Counter0 Output Compare Register
 | 
			
		||||
		OCR0B:  0x48, // Timer/Counter0 Output Compare Register
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	// Timer/Counter, 16-bit
 | 
			
		||||
	TC16 = struct {
 | 
			
		||||
		TIMSK1 __reg
 | 
			
		||||
		TIFR1  __reg
 | 
			
		||||
		TCCR1A __reg
 | 
			
		||||
		TCCR1B __reg
 | 
			
		||||
		TCCR1C __reg
 | 
			
		||||
		TCNT1L __reg
 | 
			
		||||
		TCNT1H __reg
 | 
			
		||||
		OCR1AL __reg
 | 
			
		||||
		OCR1AH __reg
 | 
			
		||||
		OCR1BL __reg
 | 
			
		||||
		OCR1BH __reg
 | 
			
		||||
		ICR1L  __reg
 | 
			
		||||
		ICR1H  __reg
 | 
			
		||||
	}{
 | 
			
		||||
		TIMSK1: 0x6f, // Timer/Counter Interrupt Mask Register
 | 
			
		||||
		TIFR1:  0x36, // Timer/Counter Interrupt Flag register
 | 
			
		||||
		TCCR1A: 0x80, // Timer/Counter1 Control Register A
 | 
			
		||||
		TCCR1B: 0x81, // Timer/Counter1 Control Register B
 | 
			
		||||
		TCCR1C: 0x82, // Timer/Counter1 Control Register C
 | 
			
		||||
		TCNT1L: 0x84, // Timer/Counter1 Bytes
 | 
			
		||||
		TCNT1H: 0x84, // Timer/Counter1 Bytes
 | 
			
		||||
		OCR1AL: 0x88, // Timer/Counter1 Output Compare Register Bytes
 | 
			
		||||
		OCR1AH: 0x88, // Timer/Counter1 Output Compare Register Bytes
 | 
			
		||||
		OCR1BL: 0x8a, // Timer/Counter1 Output Compare Register Bytes
 | 
			
		||||
		OCR1BH: 0x8a, // Timer/Counter1 Output Compare Register Bytes
 | 
			
		||||
		ICR1L:  0x86, // Timer/Counter1 Input Capture Register Bytes
 | 
			
		||||
		ICR1H:  0x86, // Timer/Counter1 Input Capture Register Bytes
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	// Analog-to-Digital Converter
 | 
			
		||||
	ADC = struct {
 | 
			
		||||
		ADMUX   __reg
 | 
			
		||||
		ADCSRA  __reg
 | 
			
		||||
		ADCL    __reg
 | 
			
		||||
		ADCH    __reg
 | 
			
		||||
		ADCSRB  __reg
 | 
			
		||||
		DIDR0   __reg
 | 
			
		||||
		DIDR1   __reg
 | 
			
		||||
		AMP0CSR __reg
 | 
			
		||||
		AMP1CSR __reg
 | 
			
		||||
	}{
 | 
			
		||||
		ADMUX:   0x7c, // The ADC multiplexer Selection Register
 | 
			
		||||
		ADCSRA:  0x7a, // The ADC Control and Status register
 | 
			
		||||
		ADCL:    0x78, // ADC Data Register Bytes
 | 
			
		||||
		ADCH:    0x78, // ADC Data Register Bytes
 | 
			
		||||
		ADCSRB:  0x7b, // ADC Control and Status Register B
 | 
			
		||||
		DIDR0:   0x7e, // Digital Input Disable Register 0
 | 
			
		||||
		DIDR1:   0x7f, // Digital Input Disable Register 1
 | 
			
		||||
		AMP0CSR: 0x76,
 | 
			
		||||
		AMP1CSR: 0x77,
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	// USART
 | 
			
		||||
	USART = struct {
 | 
			
		||||
		UDR   __reg
 | 
			
		||||
		UCSRA __reg
 | 
			
		||||
		UCSRB __reg
 | 
			
		||||
		UCSRC __reg
 | 
			
		||||
		UBRRH __reg
 | 
			
		||||
		UBRRL __reg
 | 
			
		||||
	}{
 | 
			
		||||
		UDR:   0xc6, // USART I/O Data Register
 | 
			
		||||
		UCSRA: 0xc0, // USART Control and Status register A
 | 
			
		||||
		UCSRB: 0xc1, // USART Control an Status register B
 | 
			
		||||
		UCSRC: 0xc2, // USART Control an Status register C
 | 
			
		||||
		UBRRH: 0xc5, // USART Baud Rate Register High Byte
 | 
			
		||||
		UBRRL: 0xc4, // USART Baud Rate Register Low Byte
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	// Serial Peripheral Interface
 | 
			
		||||
	SPI = struct {
 | 
			
		||||
		SPCR __reg
 | 
			
		||||
		SPSR __reg
 | 
			
		||||
		SPDR __reg
 | 
			
		||||
	}{
 | 
			
		||||
		SPCR: 0x4c, // SPI Control Register
 | 
			
		||||
		SPSR: 0x4d, // SPI Status Register
 | 
			
		||||
		SPDR: 0x4e, // SPI Data Register
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	// Watchdog Timer
 | 
			
		||||
	WDT = struct {
 | 
			
		||||
		WDTCSR __reg
 | 
			
		||||
	}{
 | 
			
		||||
		WDTCSR: 0x60, // Watchdog Timer Control Register
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	// External Interrupts
 | 
			
		||||
	EXINT = struct {
 | 
			
		||||
		EICRA __reg
 | 
			
		||||
		EIMSK __reg
 | 
			
		||||
		EIFR  __reg
 | 
			
		||||
	}{
 | 
			
		||||
		EICRA: 0x69, // External Interrupt Control Register A
 | 
			
		||||
		EIMSK: 0x3d, // External Interrupt Mask Register
 | 
			
		||||
		EIFR:  0x3c, // External Interrupt Flag Register
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	// EEPROM
 | 
			
		||||
	EEPROM = struct {
 | 
			
		||||
		EEARL __reg
 | 
			
		||||
		EEARH __reg
 | 
			
		||||
		EEDR  __reg
 | 
			
		||||
		EECR  __reg
 | 
			
		||||
	}{
 | 
			
		||||
		EEARL: 0x41, // EEPROM Read/Write Access Bytes
 | 
			
		||||
		EEARH: 0x41, // EEPROM Read/Write Access Bytes
 | 
			
		||||
		EEDR:  0x40, // EEPROM Data Register
 | 
			
		||||
		EECR:  0x3f, // EEPROM Control Register
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	// Power Stage Controller
 | 
			
		||||
	PSC = struct {
 | 
			
		||||
		PICR0L  __reg
 | 
			
		||||
		PICR0H  __reg
 | 
			
		||||
		PFRC0B  __reg
 | 
			
		||||
		PFRC0A  __reg
 | 
			
		||||
		PCTL0   __reg
 | 
			
		||||
		PCNF0   __reg
 | 
			
		||||
		OCR0RBL __reg
 | 
			
		||||
		OCR0RBH __reg
 | 
			
		||||
		OCR0SBL __reg
 | 
			
		||||
		OCR0SBH __reg
 | 
			
		||||
		OCR0RAL __reg
 | 
			
		||||
		OCR0RAH __reg
 | 
			
		||||
		OCR0SAL __reg
 | 
			
		||||
		OCR0SAH __reg
 | 
			
		||||
		PSOC0   __reg
 | 
			
		||||
		PIM0    __reg
 | 
			
		||||
		PIFR0   __reg
 | 
			
		||||
		PICR2L  __reg
 | 
			
		||||
		PICR2H  __reg
 | 
			
		||||
		PFRC2B  __reg
 | 
			
		||||
		PFRC2A  __reg
 | 
			
		||||
		PCTL2   __reg
 | 
			
		||||
		PCNF2   __reg
 | 
			
		||||
		OCR2RBL __reg
 | 
			
		||||
		OCR2RBH __reg
 | 
			
		||||
		OCR2SBL __reg
 | 
			
		||||
		OCR2SBH __reg
 | 
			
		||||
		OCR2RAL __reg
 | 
			
		||||
		OCR2RAH __reg
 | 
			
		||||
		OCR2SAL __reg
 | 
			
		||||
		OCR2SAH __reg
 | 
			
		||||
		POM2    __reg
 | 
			
		||||
		PSOC2   __reg
 | 
			
		||||
		PIM2    __reg
 | 
			
		||||
		PIFR2   __reg
 | 
			
		||||
	}{
 | 
			
		||||
		PICR0L:  0xde, // PSC 0 Input Capture Register
 | 
			
		||||
		PICR0H:  0xde, // PSC 0 Input Capture Register
 | 
			
		||||
		PFRC0B:  0xdd, // PSC 0 Input B Control
 | 
			
		||||
		PFRC0A:  0xdc, // PSC 0 Input A Control
 | 
			
		||||
		PCTL0:   0xdb, // PSC 0 Control Register
 | 
			
		||||
		PCNF0:   0xda, // PSC 0 Configuration Register
 | 
			
		||||
		OCR0RBL: 0xd8, // Output Compare RB Register
 | 
			
		||||
		OCR0RBH: 0xd8, // Output Compare RB Register
 | 
			
		||||
		OCR0SBL: 0xd6, // Output Compare SB Register
 | 
			
		||||
		OCR0SBH: 0xd6, // Output Compare SB Register
 | 
			
		||||
		OCR0RAL: 0xd4, // Output Compare RA Register
 | 
			
		||||
		OCR0RAH: 0xd4, // Output Compare RA Register
 | 
			
		||||
		OCR0SAL: 0xd2, // Output Compare SA Register
 | 
			
		||||
		OCR0SAH: 0xd2, // Output Compare SA Register
 | 
			
		||||
		PSOC0:   0xd0, // PSC0 Synchro and Output Configuration
 | 
			
		||||
		PIM0:    0xa1, // PSC0 Interrupt Mask Register
 | 
			
		||||
		PIFR0:   0xa0, // PSC0 Interrupt Flag Register
 | 
			
		||||
		PICR2L:  0xfe, // PSC 2 Input Capture Register
 | 
			
		||||
		PICR2H:  0xfe, // PSC 2 Input Capture Register
 | 
			
		||||
		PFRC2B:  0xfd, // PSC 2 Input B Control
 | 
			
		||||
		PFRC2A:  0xfc, // PSC 2 Input B Control
 | 
			
		||||
		PCTL2:   0xfb, // PSC 2 Control Register
 | 
			
		||||
		PCNF2:   0xfa, // PSC 2 Configuration Register
 | 
			
		||||
		OCR2RBL: 0xf8, // Output Compare RB Register
 | 
			
		||||
		OCR2RBH: 0xf8, // Output Compare RB Register
 | 
			
		||||
		OCR2SBL: 0xf6, // Output Compare SB Register
 | 
			
		||||
		OCR2SBH: 0xf6, // Output Compare SB Register
 | 
			
		||||
		OCR2RAL: 0xf4, // Output Compare RA Register
 | 
			
		||||
		OCR2RAH: 0xf4, // Output Compare RA Register
 | 
			
		||||
		OCR2SAL: 0xf2, // Output Compare SA Register
 | 
			
		||||
		OCR2SAH: 0xf2, // Output Compare SA Register
 | 
			
		||||
		POM2:    0xf1, // PSC 2 Output Matrix
 | 
			
		||||
		PSOC2:   0xf0, // PSC2 Synchro and Output Configuration
 | 
			
		||||
		PIM2:    0xa5, // PSC2 Interrupt Mask Register
 | 
			
		||||
		PIFR2:   0xa4, // PSC2 Interrupt Flag Register
 | 
			
		||||
	}
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
// Bitfields for FUSE: Fuses
 | 
			
		||||
const (
 | 
			
		||||
	// EXTENDED
 | 
			
		||||
	EXTENDED_PSC2RB  = 0x80 // PSC2 Reset Behavior
 | 
			
		||||
	EXTENDED_PSC1RB  = 0x40 // PSC1 Reset Behavior
 | 
			
		||||
	EXTENDED_PSC0RB  = 0x20 // PSC0 Reset Behavior
 | 
			
		||||
	EXTENDED_PSCRV   = 0x10 // PSCOUT Reset Value
 | 
			
		||||
	EXTENDED_BOOTSZ  = 0x6  // Select Boot Size
 | 
			
		||||
	EXTENDED_BOOTRST = 0x1  // Select Reset Vector
 | 
			
		||||
 | 
			
		||||
	// HIGH
 | 
			
		||||
	HIGH_RSTDISBL = 0x80 // Reset Disabled (Enable PC6 as i/o pin)
 | 
			
		||||
	HIGH_DWEN     = 0x40 // Debug Wire enable
 | 
			
		||||
	HIGH_SPIEN    = 0x20 // Serial program downloading (SPI) enabled
 | 
			
		||||
	HIGH_WDTON    = 0x10 // Watch-dog Timer always on
 | 
			
		||||
	HIGH_EESAVE   = 0x8  // Preserve EEPROM through the Chip Erase cycle
 | 
			
		||||
	HIGH_BODLEVEL = 0x7  // Brown-out Detector Trigger Level
 | 
			
		||||
 | 
			
		||||
	// LOW
 | 
			
		||||
	LOW_CKDIV8    = 0x80 // Divide clock by 8 internally
 | 
			
		||||
	LOW_CKOUT     = 0x40 // Clock output on PORTB0
 | 
			
		||||
	LOW_SUT_CKSEL = 0x3f // Select Clock Source
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
// Bitfields for LOCKBIT: Lockbits
 | 
			
		||||
const (
 | 
			
		||||
	// LOCKBIT
 | 
			
		||||
	LOCKBIT_LB   = 0x3  // Memory Lock
 | 
			
		||||
	LOCKBIT_BLB0 = 0xc  // Boot Loader Protection Mode
 | 
			
		||||
	LOCKBIT_BLB1 = 0x30 // Boot Loader Protection Mode
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
// Bitfields for BOOT_LOAD: Bootloader
 | 
			
		||||
const (
 | 
			
		||||
	// SPMCSR: Store Program Memory Control Register
 | 
			
		||||
	SPMCSR_SPMIE  = 0x80 // SPM Interrupt Enable
 | 
			
		||||
	SPMCSR_RWWSB  = 0x40 // Read While Write Section Busy
 | 
			
		||||
	SPMCSR_RWWSRE = 0x10 // Read While Write section read enable
 | 
			
		||||
	SPMCSR_BLBSET = 0x8  // Boot Lock Bit Set
 | 
			
		||||
	SPMCSR_PGWRT  = 0x4  // Page Write
 | 
			
		||||
	SPMCSR_PGERS  = 0x2  // Page Erase
 | 
			
		||||
	SPMCSR_SPMEN  = 0x1  // Store Program Memory Enable
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
// Bitfields for EUSART: Extended USART
 | 
			
		||||
const (
 | 
			
		||||
	// EUCSRA: EUSART Control and Status Register A
 | 
			
		||||
	EUCSRA_UTxS = 0xf0 // EUSART Control and Status Register A Bits
 | 
			
		||||
	EUCSRA_URxS = 0xf  // EUSART Control and Status Register A Bits
 | 
			
		||||
 | 
			
		||||
	// EUCSRB: EUSART Control Register B
 | 
			
		||||
	EUCSRB_EUSART = 0x10 // EUSART Enable Bit
 | 
			
		||||
	EUCSRB_EUSBS  = 0x8  // EUSBS Enable Bit
 | 
			
		||||
	EUCSRB_EMCH   = 0x2  // Manchester Mode Bit
 | 
			
		||||
	EUCSRB_BODR   = 0x1  // Order Bit
 | 
			
		||||
 | 
			
		||||
	// EUCSRC: EUSART Status Register C
 | 
			
		||||
	EUCSRC_FEM   = 0x8 // Frame Error Manchester Bit
 | 
			
		||||
	EUCSRC_F1617 = 0x4 // F1617 Bit
 | 
			
		||||
	EUCSRC_STP   = 0x3 // Stop Bits
 | 
			
		||||
 | 
			
		||||
	// MUBRRH: Manchester Receiver Baud Rate Register High Byte
 | 
			
		||||
	MUBRRH_MUBRR = 0xff // Manchester Receiver Baud Rate Register Bits
 | 
			
		||||
 | 
			
		||||
	// MUBRRL: Manchester Receiver Baud Rate Register Low Byte
 | 
			
		||||
	MUBRRL_MUBRR = 0xff // Manchester Receiver Baud Rate Register Bits
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
// Bitfields for AC: Analog Comparator
 | 
			
		||||
const (
 | 
			
		||||
	// AC0CON: Analog Comparator 0 Control Register
 | 
			
		||||
	AC0CON_AC0EN = 0x80 // Analog Comparator 0 Enable Bit
 | 
			
		||||
	AC0CON_AC0IE = 0x40 // Analog Comparator 0 Interrupt Enable Bit
 | 
			
		||||
	AC0CON_AC0IS = 0x30 // Analog Comparator 0  Interrupt Select Bit
 | 
			
		||||
	AC0CON_AC0M  = 0x7  // Analog Comparator 0 Multiplexer Register
 | 
			
		||||
 | 
			
		||||
	// AC1CON: Analog Comparator 1 Control Register
 | 
			
		||||
	AC1CON_AC1EN  = 0x80 // Analog Comparator 1 Enable Bit
 | 
			
		||||
	AC1CON_AC1IE  = 0x40 // Analog Comparator 1 Interrupt Enable Bit
 | 
			
		||||
	AC1CON_AC1IS  = 0x30 // Analog Comparator 1  Interrupt Select Bit
 | 
			
		||||
	AC1CON_AC1ICE = 0x8  // Analog Comparator 1 Interrupt Capture Enable Bit
 | 
			
		||||
	AC1CON_AC1M   = 0x7  // Analog Comparator 1 Multiplexer Register
 | 
			
		||||
 | 
			
		||||
	// AC2CON: Analog Comparator 2 Control Register
 | 
			
		||||
	AC2CON_AC2EN = 0x80 // Analog Comparator 2 Enable Bit
 | 
			
		||||
	AC2CON_AC2IE = 0x40 // Analog Comparator 2 Interrupt Enable Bit
 | 
			
		||||
	AC2CON_AC2IS = 0x30 // Analog Comparator 2  Interrupt Select Bit
 | 
			
		||||
	AC2CON_AC2M  = 0x7  // Analog Comparator 2 Multiplexer Register
 | 
			
		||||
 | 
			
		||||
	// ACSR: Analog Comparator Status Register
 | 
			
		||||
	ACSR_ACCKDIV = 0x80 // Analog Comparator Clock Divider
 | 
			
		||||
	ACSR_AC2IF   = 0x40 // Analog Comparator 2 Interrupt Flag Bit
 | 
			
		||||
	ACSR_AC1IF   = 0x20 // Analog Comparator 1  Interrupt Flag Bit
 | 
			
		||||
	ACSR_AC0IF   = 0x10 // Analog Comparator 0 Interrupt Flag Bit
 | 
			
		||||
	ACSR_AC2O    = 0x4  // Analog Comparator 2 Output Bit
 | 
			
		||||
	ACSR_AC1O    = 0x2  // Analog Comparator 1 Output Bit
 | 
			
		||||
	ACSR_AC0O    = 0x1  // Analog Comparator 0 Output Bit
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
// Bitfields for DAC: Digital-to-Analog Converter
 | 
			
		||||
const (
 | 
			
		||||
	// DACL: DAC Data Register Bytes
 | 
			
		||||
 | 
			
		||||
	// DACH: DAC Data Register Bytes
 | 
			
		||||
	DAC_DAC = 0xffff // DAC Data Register Bits
 | 
			
		||||
 | 
			
		||||
	// DACON: DAC Control Register
 | 
			
		||||
	DACON_DAATE = 0x80 // DAC Auto Trigger Enable Bit
 | 
			
		||||
	DACON_DATS  = 0x70 // DAC Trigger Selection Bits
 | 
			
		||||
	DACON_DALA  = 0x4  // DAC Left Adjust
 | 
			
		||||
	DACON_DAOE  = 0x2  // DAC Output Enable
 | 
			
		||||
	DACON_DAEN  = 0x1  // DAC Enable Bit
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
// Bitfields for CPU: CPU Registers
 | 
			
		||||
const (
 | 
			
		||||
	// SREG: Status Register
 | 
			
		||||
	SREG_I = 0x80 // Global Interrupt Enable
 | 
			
		||||
	SREG_T = 0x40 // Bit Copy Storage
 | 
			
		||||
	SREG_H = 0x20 // Half Carry Flag
 | 
			
		||||
	SREG_S = 0x10 // Sign Bit
 | 
			
		||||
	SREG_V = 0x8  // Two's Complement Overflow Flag
 | 
			
		||||
	SREG_N = 0x4  // Negative Flag
 | 
			
		||||
	SREG_Z = 0x2  // Zero Flag
 | 
			
		||||
	SREG_C = 0x1  // Carry Flag
 | 
			
		||||
 | 
			
		||||
	// MCUCR: MCU Control Register
 | 
			
		||||
	MCUCR_SPIPS = 0x80 // SPI Pin Select
 | 
			
		||||
	MCUCR_PUD   = 0x10 // Pull-up disable
 | 
			
		||||
	MCUCR_IVSEL = 0x2  // Interrupt Vector Select
 | 
			
		||||
	MCUCR_IVCE  = 0x1  // Interrupt Vector Change Enable
 | 
			
		||||
 | 
			
		||||
	// MCUSR: MCU Status Register
 | 
			
		||||
	MCUSR_WDRF  = 0x8 // Watchdog Reset Flag
 | 
			
		||||
	MCUSR_BORF  = 0x4 // Brown-out Reset Flag
 | 
			
		||||
	MCUSR_EXTRF = 0x2 // External Reset Flag
 | 
			
		||||
	MCUSR_PORF  = 0x1 // Power-on reset flag
 | 
			
		||||
 | 
			
		||||
	// OSCCAL: Oscillator Calibration Value
 | 
			
		||||
	OSCCAL_OSCCAL = 0xff // Oscillator Calibration
 | 
			
		||||
 | 
			
		||||
	// CLKPR
 | 
			
		||||
	CLKPR_CLKPCE = 0x80
 | 
			
		||||
	CLKPR_CLKPS  = 0xf
 | 
			
		||||
 | 
			
		||||
	// SMCR: Sleep Mode Control Register
 | 
			
		||||
	SMCR_SM = 0xe // Sleep Mode Select bits
 | 
			
		||||
	SMCR_SE = 0x1 // Sleep Enable
 | 
			
		||||
 | 
			
		||||
	// GPIOR3: General Purpose IO Register 3
 | 
			
		||||
	GPIOR3_GPIOR = 0xff // General Purpose IO Register 3 bis
 | 
			
		||||
 | 
			
		||||
	// GPIOR2: General Purpose IO Register 2
 | 
			
		||||
	GPIOR2_GPIOR = 0xff // General Purpose IO Register 2 bis
 | 
			
		||||
 | 
			
		||||
	// GPIOR1: General Purpose IO Register 1
 | 
			
		||||
	GPIOR1_GPIOR = 0xff // General Purpose IO Register 1 bis
 | 
			
		||||
 | 
			
		||||
	// GPIOR0: General Purpose IO Register 0
 | 
			
		||||
	GPIOR0_GPIOR07 = 0x80 // General Purpose IO Register 0 bit 7
 | 
			
		||||
	GPIOR0_GPIOR06 = 0x40 // General Purpose IO Register 0 bit 6
 | 
			
		||||
	GPIOR0_GPIOR05 = 0x20 // General Purpose IO Register 0 bit 5
 | 
			
		||||
	GPIOR0_GPIOR04 = 0x10 // General Purpose IO Register 0 bit 4
 | 
			
		||||
	GPIOR0_GPIOR03 = 0x8  // General Purpose IO Register 0 bit 3
 | 
			
		||||
	GPIOR0_GPIOR02 = 0x4  // General Purpose IO Register 0 bit 2
 | 
			
		||||
	GPIOR0_GPIOR01 = 0x2  // General Purpose IO Register 0 bit 1
 | 
			
		||||
	GPIOR0_GPIOR00 = 0x1  // General Purpose IO Register 0 bit 0
 | 
			
		||||
 | 
			
		||||
	// PLLCSR: PLL Control And Status Register
 | 
			
		||||
	PLLCSR_PLLF  = 0x4 // PLL Factor
 | 
			
		||||
	PLLCSR_PLLE  = 0x2 // PLL Enable
 | 
			
		||||
	PLLCSR_PLOCK = 0x1 // PLL Lock Detector
 | 
			
		||||
 | 
			
		||||
	// PRR: Power Reduction Register
 | 
			
		||||
	PRR_PRPSC2   = 0x80 // Power Reduction PSC2
 | 
			
		||||
	PRR_PRPSC1   = 0x40 // Power Reduction PSC1
 | 
			
		||||
	PRR_PRPSC0   = 0x20 // Power Reduction PSC0
 | 
			
		||||
	PRR_PRTIM1   = 0x10 // Power Reduction Timer/Counter1
 | 
			
		||||
	PRR_PRTIM0   = 0x8  // Power Reduction Timer/Counter0
 | 
			
		||||
	PRR_PRSPI    = 0x4  // Power Reduction Serial Peripheral Interface
 | 
			
		||||
	PRR_PRUSART0 = 0x2  // Power Reduction USART
 | 
			
		||||
	PRR_PRADC    = 0x1  // Power Reduction ADC
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
// Bitfields for TC8: Timer/Counter, 8-bit
 | 
			
		||||
const (
 | 
			
		||||
	// TIMSK0: Timer/Counter0 Interrupt Mask Register
 | 
			
		||||
	TIMSK0_OCIE0B = 0x4 // Timer/Counter0 Output Compare Match B Interrupt Enable
 | 
			
		||||
	TIMSK0_OCIE0A = 0x2 // Timer/Counter0 Output Compare Match A Interrupt Enable
 | 
			
		||||
	TIMSK0_TOIE0  = 0x1 // Timer/Counter0 Overflow Interrupt Enable
 | 
			
		||||
 | 
			
		||||
	// TIFR0: Timer/Counter0 Interrupt Flag register
 | 
			
		||||
	TIFR0_OCF0B = 0x4 // Timer/Counter0 Output Compare Flag 0B
 | 
			
		||||
	TIFR0_OCF0A = 0x2 // Timer/Counter0 Output Compare Flag 0A
 | 
			
		||||
	TIFR0_TOV0  = 0x1 // Timer/Counter0 Overflow Flag
 | 
			
		||||
 | 
			
		||||
	// TCCR0A: Timer/Counter Control Register A
 | 
			
		||||
	TCCR0A_COM0A = 0xc0 // Compare Output Mode, Phase Correct PWM Mode
 | 
			
		||||
	TCCR0A_COM0B = 0x30 // Compare Output Mode, Fast PWm
 | 
			
		||||
	TCCR0A_WGM0  = 0x3  // Waveform Generation Mode
 | 
			
		||||
 | 
			
		||||
	// TCCR0B: Timer/Counter Control Register B
 | 
			
		||||
	TCCR0B_FOC0A = 0x80 // Force Output Compare A
 | 
			
		||||
	TCCR0B_FOC0B = 0x40 // Force Output Compare B
 | 
			
		||||
	TCCR0B_WGM02 = 0x8
 | 
			
		||||
	TCCR0B_CS0   = 0x7 // Clock Select
 | 
			
		||||
 | 
			
		||||
	// TCNT0: Timer/Counter0
 | 
			
		||||
	TCNT0_TCNT0 = 0xff // Timer Counter 0 value
 | 
			
		||||
 | 
			
		||||
	// OCR0A: Timer/Counter0 Output Compare Register
 | 
			
		||||
	OCR0A_OCR0A = 0xff // Output Compare A value
 | 
			
		||||
 | 
			
		||||
	// OCR0B: Timer/Counter0 Output Compare Register
 | 
			
		||||
	OCR0B_OCR0B = 0xff // Output Compare B value
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
// Bitfields for TC16: Timer/Counter, 16-bit
 | 
			
		||||
const (
 | 
			
		||||
	// TIMSK1: Timer/Counter Interrupt Mask Register
 | 
			
		||||
	TIMSK1_ICIE1  = 0x20 // Timer/Counter1 Input Capture Interrupt Enable
 | 
			
		||||
	TIMSK1_OCIE1B = 0x4  // Timer/Counter1 Output CompareB Match Interrupt Enable
 | 
			
		||||
	TIMSK1_OCIE1A = 0x2  // Timer/Counter1 Output CompareA Match Interrupt Enable
 | 
			
		||||
	TIMSK1_TOIE1  = 0x1  // Timer/Counter1 Overflow Interrupt Enable
 | 
			
		||||
 | 
			
		||||
	// TIFR1: Timer/Counter Interrupt Flag register
 | 
			
		||||
	TIFR1_ICF1  = 0x20 // Input Capture Flag 1
 | 
			
		||||
	TIFR1_OCF1B = 0x4  // Output Compare Flag 1B
 | 
			
		||||
	TIFR1_OCF1A = 0x2  // Output Compare Flag 1A
 | 
			
		||||
	TIFR1_TOV1  = 0x1  // Timer/Counter1 Overflow Flag
 | 
			
		||||
 | 
			
		||||
	// TCCR1A: Timer/Counter1 Control Register A
 | 
			
		||||
	TCCR1A_COM1A = 0xc0 // Compare Output Mode 1A, bits
 | 
			
		||||
	TCCR1A_COM1B = 0x30 // Compare Output Mode 1B, bits
 | 
			
		||||
	TCCR1A_WGM1  = 0x3  // Waveform Generation Mode
 | 
			
		||||
 | 
			
		||||
	// TCCR1B: Timer/Counter1 Control Register B
 | 
			
		||||
	TCCR1B_ICNC1 = 0x80 // Input Capture 1 Noise Canceler
 | 
			
		||||
	TCCR1B_ICES1 = 0x40 // Input Capture 1 Edge Select
 | 
			
		||||
	TCCR1B_WGM1  = 0x18 // Waveform Generation Mode
 | 
			
		||||
	TCCR1B_CS1   = 0x7  // Prescaler source of Timer/Counter 1
 | 
			
		||||
 | 
			
		||||
	// TCCR1C: Timer/Counter1 Control Register C
 | 
			
		||||
	TCCR1C_FOC1A = 0x80
 | 
			
		||||
	TCCR1C_FOC1B = 0x40
 | 
			
		||||
 | 
			
		||||
	// TCNT1L: Timer/Counter1 Bytes
 | 
			
		||||
 | 
			
		||||
	// TCNT1H: Timer/Counter1 Bytes
 | 
			
		||||
	TCNT1_TCNT1 = 0xffff // Timer/Counter1
 | 
			
		||||
 | 
			
		||||
	// OCR1AL: Timer/Counter1 Output Compare Register Bytes
 | 
			
		||||
 | 
			
		||||
	// OCR1AH: Timer/Counter1 Output Compare Register Bytes
 | 
			
		||||
	OCR1A_OCR1A = 0xffff // Timer/Counter1 Output Compare A Register
 | 
			
		||||
 | 
			
		||||
	// OCR1BL: Timer/Counter1 Output Compare Register Bytes
 | 
			
		||||
 | 
			
		||||
	// OCR1BH: Timer/Counter1 Output Compare Register Bytes
 | 
			
		||||
	OCR1B_OCR1B = 0xffff // Timer/Counter1 Output Compare B Register
 | 
			
		||||
 | 
			
		||||
	// ICR1L: Timer/Counter1 Input Capture Register Bytes
 | 
			
		||||
 | 
			
		||||
	// ICR1H: Timer/Counter1 Input Capture Register Bytes
 | 
			
		||||
	ICR1_ICR1 = 0xffff // Timer/Counter Input Capture
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
// Bitfields for ADC: Analog-to-Digital Converter
 | 
			
		||||
const (
 | 
			
		||||
	// ADMUX: The ADC multiplexer Selection Register
 | 
			
		||||
	ADMUX_REFS  = 0xc0 // Reference Selection Bits
 | 
			
		||||
	ADMUX_ADLAR = 0x20 // Left Adjust Result
 | 
			
		||||
	ADMUX_MUX   = 0xf  // Analog Channel and Gain Selection Bits
 | 
			
		||||
 | 
			
		||||
	// ADCSRA: The ADC Control and Status register
 | 
			
		||||
	ADCSRA_ADEN  = 0x80 // ADC Enable
 | 
			
		||||
	ADCSRA_ADSC  = 0x40 // ADC Start Conversion
 | 
			
		||||
	ADCSRA_ADATE = 0x20 // ADC Auto Trigger Enable
 | 
			
		||||
	ADCSRA_ADIF  = 0x10 // ADC Interrupt Flag
 | 
			
		||||
	ADCSRA_ADIE  = 0x8  // ADC Interrupt Enable
 | 
			
		||||
	ADCSRA_ADPS  = 0x7  // ADC Prescaler Select Bits
 | 
			
		||||
 | 
			
		||||
	// ADCSRB: ADC Control and Status Register B
 | 
			
		||||
	ADCSRB_ADHSM = 0x80 // ADC High Speed Mode
 | 
			
		||||
	ADCSRB_ADTS3 = 0x8  // ADC Auto Trigger Source Selection 3
 | 
			
		||||
	ADCSRB_ADTS2 = 0x4  // ADC Auto Trigger Source Selection 2
 | 
			
		||||
	ADCSRB_ADTS1 = 0x2  // ADC Auto Trigger Source Selection 1
 | 
			
		||||
	ADCSRB_ADTS0 = 0x1  // ADC Auto Trigger Source Selection 0
 | 
			
		||||
 | 
			
		||||
	// DIDR0: Digital Input Disable Register 0
 | 
			
		||||
	DIDR0_ADC7D = 0x80
 | 
			
		||||
	DIDR0_ADC6D = 0x40
 | 
			
		||||
	DIDR0_ADC5D = 0x20
 | 
			
		||||
	DIDR0_ADC4D = 0x10
 | 
			
		||||
	DIDR0_ADC3D = 0x8
 | 
			
		||||
	DIDR0_ADC2D = 0x4
 | 
			
		||||
	DIDR0_ADC1D = 0x2
 | 
			
		||||
	DIDR0_ADC0D = 0x1
 | 
			
		||||
 | 
			
		||||
	// DIDR1: Digital Input Disable Register 1
 | 
			
		||||
	DIDR1_ACMP0D = 0x20
 | 
			
		||||
	DIDR1_AMP0PD = 0x10
 | 
			
		||||
	DIDR1_AMP0ND = 0x8
 | 
			
		||||
	DIDR1_ADC10D = 0x4
 | 
			
		||||
	DIDR1_ADC9D  = 0x2
 | 
			
		||||
	DIDR1_ADC8D  = 0x1
 | 
			
		||||
 | 
			
		||||
	// AMP0CSR
 | 
			
		||||
	AMP0CSR_AMP0EN = 0x80
 | 
			
		||||
	AMP0CSR_AMP0IS = 0x40
 | 
			
		||||
	AMP0CSR_AMP0G  = 0x30
 | 
			
		||||
	AMP0CSR_AMP0TS = 0x3
 | 
			
		||||
 | 
			
		||||
	// AMP1CSR
 | 
			
		||||
	AMP1CSR_AMP1EN = 0x80
 | 
			
		||||
	AMP1CSR_AMP1IS = 0x40
 | 
			
		||||
	AMP1CSR_AMP1G  = 0x30
 | 
			
		||||
	AMP1CSR_AMP1TS = 0x3
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
// Bitfields for USART: USART
 | 
			
		||||
const (
 | 
			
		||||
	// UCSRA: USART Control and Status register A
 | 
			
		||||
	UCSRA_RXC  = 0x80 // USART Receive Complete
 | 
			
		||||
	UCSRA_TXC  = 0x40 // USART Transmitt Complete
 | 
			
		||||
	UCSRA_UDRE = 0x20 // USART Data Register Empty
 | 
			
		||||
	UCSRA_FE   = 0x10 // Framing Error
 | 
			
		||||
	UCSRA_DOR  = 0x8  // Data Overrun
 | 
			
		||||
	UCSRA_UPE  = 0x4  // USART Parity Error
 | 
			
		||||
	UCSRA_U2X  = 0x2  // Double USART Transmission Bit
 | 
			
		||||
	UCSRA_MPCM = 0x1  // Multi-processor Communication Mode
 | 
			
		||||
 | 
			
		||||
	// UCSRB: USART Control an Status register B
 | 
			
		||||
	UCSRB_RXCIE = 0x80 // RX Complete Interrupt Enable
 | 
			
		||||
	UCSRB_TXCIE = 0x40 // TX Complete Interrupt Enable
 | 
			
		||||
	UCSRB_UDRIE = 0x20 // USART Data Register Empty Interrupt Enable
 | 
			
		||||
	UCSRB_RXEN  = 0x10 // Receiver Enable
 | 
			
		||||
	UCSRB_TXEN  = 0x8  // Transmitter Enable
 | 
			
		||||
	UCSRB_UCSZ2 = 0x4  // Character Size
 | 
			
		||||
	UCSRB_RXB8  = 0x2  // Receive Data Bit 8
 | 
			
		||||
	UCSRB_TXB8  = 0x1  // Transmit Data Bit 8
 | 
			
		||||
 | 
			
		||||
	// UCSRC: USART Control an Status register C
 | 
			
		||||
	UCSRC_UMSEL0 = 0x40 // USART Mode Select
 | 
			
		||||
	UCSRC_UPM    = 0x30 // Parity Mode Bits
 | 
			
		||||
	UCSRC_USBS   = 0x8  // Stop Bit Select
 | 
			
		||||
	UCSRC_UCSZ   = 0x6  // Character Size Bits
 | 
			
		||||
	UCSRC_UCPOL  = 0x1  // Clock Polarity
 | 
			
		||||
 | 
			
		||||
	// UBRRH: USART Baud Rate Register High Byte
 | 
			
		||||
	UBRRH_UBRR = 0xf // USART Baud Rate Register Bits
 | 
			
		||||
 | 
			
		||||
	// UBRRL: USART Baud Rate Register Low Byte
 | 
			
		||||
	UBRRL_UBRR = 0xff // USART Baud Rate Register bits
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
// Bitfields for SPI: Serial Peripheral Interface
 | 
			
		||||
const (
 | 
			
		||||
	// SPCR: SPI Control Register
 | 
			
		||||
	SPCR_SPIE = 0x80 // SPI Interrupt Enable
 | 
			
		||||
	SPCR_SPE  = 0x40 // SPI Enable
 | 
			
		||||
	SPCR_DORD = 0x20 // Data Order
 | 
			
		||||
	SPCR_MSTR = 0x10 // Master/Slave Select
 | 
			
		||||
	SPCR_CPOL = 0x8  // Clock polarity
 | 
			
		||||
	SPCR_CPHA = 0x4  // Clock Phase
 | 
			
		||||
	SPCR_SPR  = 0x3  // SPI Clock Rate Selects
 | 
			
		||||
 | 
			
		||||
	// SPSR: SPI Status Register
 | 
			
		||||
	SPSR_SPIF  = 0x80 // SPI Interrupt Flag
 | 
			
		||||
	SPSR_WCOL  = 0x40 // Write Collision Flag
 | 
			
		||||
	SPSR_SPI2X = 0x1  // Double SPI Speed Bit
 | 
			
		||||
 | 
			
		||||
	// SPDR: SPI Data Register
 | 
			
		||||
	SPDR_SPD = 0xff // SPI Data
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
// Bitfields for WDT: Watchdog Timer
 | 
			
		||||
const (
 | 
			
		||||
	// WDTCSR: Watchdog Timer Control Register
 | 
			
		||||
	WDTCSR_WDIF = 0x80 // Watchdog Timeout Interrupt Flag
 | 
			
		||||
	WDTCSR_WDIE = 0x40 // Watchdog Timeout Interrupt Enable
 | 
			
		||||
	WDTCSR_WDP  = 0x27 // Watchdog Timer Prescaler Bits
 | 
			
		||||
	WDTCSR_WDCE = 0x10 // Watchdog Change Enable
 | 
			
		||||
	WDTCSR_WDE  = 0x8  // Watch Dog Enable
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
// Bitfields for EXINT: External Interrupts
 | 
			
		||||
const (
 | 
			
		||||
	// EICRA: External Interrupt Control Register A
 | 
			
		||||
	EICRA_ISC3 = 0xc0 // External Interrupt Sense Control Bit
 | 
			
		||||
	EICRA_ISC2 = 0x30 // External Interrupt Sense Control Bit
 | 
			
		||||
	EICRA_ISC1 = 0xc  // External Interrupt Sense Control Bit
 | 
			
		||||
	EICRA_ISC0 = 0x3  // External Interrupt Sense Control Bit
 | 
			
		||||
 | 
			
		||||
	// EIMSK: External Interrupt Mask Register
 | 
			
		||||
	EIMSK_INT = 0xf // External Interrupt Mask
 | 
			
		||||
 | 
			
		||||
	// EIFR: External Interrupt Flag Register
 | 
			
		||||
	EIFR_INTF = 0xf // External Interrupt Flags
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
// Bitfields for EEPROM: EEPROM
 | 
			
		||||
const (
 | 
			
		||||
	// EEARL: EEPROM Read/Write Access Bytes
 | 
			
		||||
 | 
			
		||||
	// EEARH: EEPROM Read/Write Access Bytes
 | 
			
		||||
	EEAR_EEAR = 0xfff // EEPROM Address bytes
 | 
			
		||||
 | 
			
		||||
	// EEDR: EEPROM Data Register
 | 
			
		||||
	EEDR_EEDR = 0xff // EEPROM Data Bits
 | 
			
		||||
 | 
			
		||||
	// EECR: EEPROM Control Register
 | 
			
		||||
	EECR_EEPM  = 0x30 // EEPROM Programming Mode
 | 
			
		||||
	EECR_EERIE = 0x8  // EEPROM Ready Interrupt Enable
 | 
			
		||||
	EECR_EEMWE = 0x4  // EEPROM Master Write Enable
 | 
			
		||||
	EECR_EEWE  = 0x2  // EEPROM Write Enable
 | 
			
		||||
	EECR_EERE  = 0x1  // EEPROM Read Enable
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
// Bitfields for PSC: Power Stage Controller
 | 
			
		||||
const (
 | 
			
		||||
	// PICR0L: PSC 0 Input Capture Register
 | 
			
		||||
 | 
			
		||||
	// PICR0H: PSC 0 Input Capture Register
 | 
			
		||||
	PICR0_PCST0 = 0x8000 // PSC 0 Input Capture Software Trig
 | 
			
		||||
	PICR0_PICR0 = 0xfff  // PSC 0 Input Capture Bytes
 | 
			
		||||
 | 
			
		||||
	// PFRC0B: PSC 0 Input B Control
 | 
			
		||||
	PFRC0B_PCAE0B  = 0x80 // PSC 0 Capture Enable Input Part B
 | 
			
		||||
	PFRC0B_PISEL0B = 0x40 // PSC 0 Input Select for Part B
 | 
			
		||||
	PFRC0B_PELEV0B = 0x20 // PSC 0 Edge Level Selector on Input Part B
 | 
			
		||||
	PFRC0B_PFLTE0B = 0x10 // PSC 0 Filter Enable on Input Part B
 | 
			
		||||
	PFRC0B_PRFM0B  = 0xf  // PSC 0 Retrigger and Fault Mode for Part B
 | 
			
		||||
 | 
			
		||||
	// PFRC0A: PSC 0 Input A Control
 | 
			
		||||
	PFRC0A_PCAE0A  = 0x80 // PSC 0 Capture Enable Input Part A
 | 
			
		||||
	PFRC0A_PISEL0A = 0x40 // PSC 0 Input Select for Part A
 | 
			
		||||
	PFRC0A_PELEV0A = 0x20 // PSC 0 Edge Level Selector on Input Part A
 | 
			
		||||
	PFRC0A_PFLTE0A = 0x10 // PSC 0 Filter Enable on Input Part A
 | 
			
		||||
	PFRC0A_PRFM0A  = 0xf  // PSC 0 Retrigger and Fault Mode for Part A
 | 
			
		||||
 | 
			
		||||
	// PCTL0: PSC 0 Control Register
 | 
			
		||||
	PCTL0_PPRE0  = 0xc0 // PSC 0 Prescaler Selects
 | 
			
		||||
	PCTL0_PBFM0  = 0x20 // PSC 0 Balance Flank Width Modulation
 | 
			
		||||
	PCTL0_PAOC0B = 0x10 // PSC 0 Asynchronous Output Control B
 | 
			
		||||
	PCTL0_PAOC0A = 0x8  // PSC 0 Asynchronous Output Control A
 | 
			
		||||
	PCTL0_PARUN0 = 0x4  // PSC0 Auto Run
 | 
			
		||||
	PCTL0_PCCYC0 = 0x2  // PSC0 Complete Cycle
 | 
			
		||||
	PCTL0_PRUN0  = 0x1  // PSC 0 Run
 | 
			
		||||
 | 
			
		||||
	// PCNF0: PSC 0 Configuration Register
 | 
			
		||||
	PCNF0_PFIFTY0  = 0x80 // PSC 0 Fifty
 | 
			
		||||
	PCNF0_PALOCK0  = 0x40 // PSC 0 Autolock
 | 
			
		||||
	PCNF0_PLOCK0   = 0x20 // PSC 0 Lock
 | 
			
		||||
	PCNF0_PMODE0   = 0x18 // PSC 0 Mode
 | 
			
		||||
	PCNF0_POP0     = 0x4  // PSC 0 Output Polarity
 | 
			
		||||
	PCNF0_PCLKSEL0 = 0x2  // PSC 0 Input Clock Select
 | 
			
		||||
 | 
			
		||||
	// PSOC0: PSC0 Synchro and Output Configuration
 | 
			
		||||
	PSOC0_PSYNC0 = 0x30 // Synchronization Out for ADC Selection
 | 
			
		||||
	PSOC0_POEN0B = 0x4  // PSCOUT01 Output Enable
 | 
			
		||||
	PSOC0_POEN0A = 0x1  // PSCOUT00 Output Enable
 | 
			
		||||
 | 
			
		||||
	// PIM0: PSC0 Interrupt Mask Register
 | 
			
		||||
	PIM0_PSEIE0 = 0x20 // PSC 0 Synchro Error Interrupt Enable
 | 
			
		||||
	PIM0_PEVE0B = 0x10 // External Event B Interrupt Enable
 | 
			
		||||
	PIM0_PEVE0A = 0x8  // External Event A Interrupt Enable
 | 
			
		||||
	PIM0_PEOPE0 = 0x1  // End of Cycle Interrupt Enable
 | 
			
		||||
 | 
			
		||||
	// PIFR0: PSC0 Interrupt Flag Register
 | 
			
		||||
	PIFR0_POAC0B = 0x80 // PSC 0 Output A Activity
 | 
			
		||||
	PIFR0_POAC0A = 0x40 // PSC 0 Output A Activity
 | 
			
		||||
	PIFR0_PSEI0  = 0x20 // PSC 0 Synchro Error Interrupt
 | 
			
		||||
	PIFR0_PEV0B  = 0x10 // External Event B Interrupt
 | 
			
		||||
	PIFR0_PEV0A  = 0x8  // External Event A Interrupt
 | 
			
		||||
	PIFR0_PRN0   = 0x6  // Ramp Number
 | 
			
		||||
	PIFR0_PEOP0  = 0x1  // End of PSC0 Interrupt
 | 
			
		||||
 | 
			
		||||
	// PICR2L: PSC 2 Input Capture Register
 | 
			
		||||
 | 
			
		||||
	// PICR2H: PSC 2 Input Capture Register
 | 
			
		||||
	PICR2_PCST2 = 0x8000 // PSC 2 Input Capture Software Trig
 | 
			
		||||
	PICR2_PICR2 = 0xfff  // PSC 2 Input Capture Bytes
 | 
			
		||||
 | 
			
		||||
	// PFRC2B: PSC 2 Input B Control
 | 
			
		||||
	PFRC2B_PCAE2B  = 0x80 // PSC 2 Capture Enable Input Part B
 | 
			
		||||
	PFRC2B_PISEL2B = 0x40 // PSC 2 Input Select for Part B
 | 
			
		||||
	PFRC2B_PELEV2B = 0x20 // PSC 2 Edge Level Selector on Input Part B
 | 
			
		||||
	PFRC2B_PFLTE2B = 0x10 // PSC 2 Filter Enable on Input Part B
 | 
			
		||||
	PFRC2B_PRFM2B  = 0xf  // PSC 2 Retrigger and Fault Mode for Part B
 | 
			
		||||
 | 
			
		||||
	// PFRC2A: PSC 2 Input B Control
 | 
			
		||||
	PFRC2A_PCAE2A  = 0x80 // PSC 2 Capture Enable Input Part A
 | 
			
		||||
	PFRC2A_PISEL2A = 0x40 // PSC 2 Input Select for Part A
 | 
			
		||||
	PFRC2A_PELEV2A = 0x20 // PSC 2 Edge Level Selector on Input Part A
 | 
			
		||||
	PFRC2A_PFLTE2A = 0x10 // PSC 2 Filter Enable on Input Part A
 | 
			
		||||
	PFRC2A_PRFM2A  = 0xf  // PSC 2 Retrigger and Fault Mode for Part A
 | 
			
		||||
 | 
			
		||||
	// PCTL2: PSC 2 Control Register
 | 
			
		||||
	PCTL2_PPRE2  = 0xc0 // PSC 2 Prescaler Selects
 | 
			
		||||
	PCTL2_PBFM2  = 0x20 // Balance Flank Width Modulation
 | 
			
		||||
	PCTL2_PAOC2B = 0x10 // PSC 2 Asynchronous Output Control B
 | 
			
		||||
	PCTL2_PAOC2A = 0x8  // PSC 2 Asynchronous Output Control A
 | 
			
		||||
	PCTL2_PARUN2 = 0x4  // PSC2 Auto Run
 | 
			
		||||
	PCTL2_PCCYC2 = 0x2  // PSC2 Complete Cycle
 | 
			
		||||
	PCTL2_PRUN2  = 0x1  // PSC 2 Run
 | 
			
		||||
 | 
			
		||||
	// PCNF2: PSC 2 Configuration Register
 | 
			
		||||
	PCNF2_PFIFTY2  = 0x80 // PSC 2 Fifty
 | 
			
		||||
	PCNF2_PALOCK2  = 0x40 // PSC 2 Autolock
 | 
			
		||||
	PCNF2_PLOCK2   = 0x20 // PSC 2 Lock
 | 
			
		||||
	PCNF2_PMODE2   = 0x18 // PSC 2 Mode
 | 
			
		||||
	PCNF2_POP2     = 0x4  // PSC 2 Output Polarity
 | 
			
		||||
	PCNF2_PCLKSEL2 = 0x2  // PSC 2 Input Clock Select
 | 
			
		||||
	PCNF2_POME2    = 0x1  // PSC 2 Output Matrix Enable
 | 
			
		||||
 | 
			
		||||
	// POM2: PSC 2 Output Matrix
 | 
			
		||||
	POM2_POMV2B = 0xf0 // Output Matrix Output B Ramps
 | 
			
		||||
	POM2_POMV2A = 0xf  // Output Matrix Output A Ramps
 | 
			
		||||
 | 
			
		||||
	// PSOC2: PSC2 Synchro and Output Configuration
 | 
			
		||||
	PSOC2_POS2   = 0xc0 // PSC 2 Output 23 Select
 | 
			
		||||
	PSOC2_PSYNC2 = 0x30 // Synchronization Out for ADC Selection
 | 
			
		||||
	PSOC2_POEN2D = 0x8  // PSCOUT23 Output Enable
 | 
			
		||||
	PSOC2_POEN2B = 0x4  // PSCOUT21 Output Enable
 | 
			
		||||
	PSOC2_POEN2C = 0x2  // PSCOUT22 Output Enable
 | 
			
		||||
	PSOC2_POEN2A = 0x1  // PSCOUT20 Output Enable
 | 
			
		||||
 | 
			
		||||
	// PIM2: PSC2 Interrupt Mask Register
 | 
			
		||||
	PIM2_PSEIE2 = 0x20 // PSC 2 Synchro Error Interrupt Enable
 | 
			
		||||
	PIM2_PEVE2B = 0x10 // External Event B Interrupt Enable
 | 
			
		||||
	PIM2_PEVE2A = 0x8  // External Event A Interrupt Enable
 | 
			
		||||
	PIM2_PEOPE2 = 0x1  // End of Cycle Interrupt Enable
 | 
			
		||||
 | 
			
		||||
	// PIFR2: PSC2 Interrupt Flag Register
 | 
			
		||||
	PIFR2_POAC2B = 0x80 // PSC 2 Output A Activity
 | 
			
		||||
	PIFR2_POAC2A = 0x40 // PSC 2 Output A Activity
 | 
			
		||||
	PIFR2_PSEI2  = 0x20 // PSC 2 Synchro Error Interrupt
 | 
			
		||||
	PIFR2_PEV2B  = 0x10 // External Event B Interrupt
 | 
			
		||||
	PIFR2_PEV2A  = 0x8  // External Event A Interrupt
 | 
			
		||||
	PIFR2_PRN2   = 0x6  // Ramp Number
 | 
			
		||||
	PIFR2_PEOP2  = 0x1  // End of PSC2 Interrupt
 | 
			
		||||
)
 | 
			
		||||
							
								
								
									
										6
									
								
								src/device/avr/at90pwm216.ld
									
										
									
									
									
										Обычный файл
									
								
							
							
						
						
									
										6
									
								
								src/device/avr/at90pwm216.ld
									
										
									
									
									
										Обычный файл
									
								
							| 
						 | 
				
			
			@ -0,0 +1,6 @@
 | 
			
		|||
/* Automatically generated file. DO NOT EDIT. */
 | 
			
		||||
/* Generated by gen-device.py from AT90PWM216.atdf, see http://packs.download.atmel.com/ */
 | 
			
		||||
 | 
			
		||||
__flash_size = 0x4000;
 | 
			
		||||
__ram_size   = 0x400;
 | 
			
		||||
__num_isrs   = 32;
 | 
			
		||||
							
								
								
									
										970
									
								
								src/device/avr/at90pwm2b.go
									
										
									
									
									
										Обычный файл
									
								
							
							
						
						
									
										970
									
								
								src/device/avr/at90pwm2b.go
									
										
									
									
									
										Обычный файл
									
								
							| 
						 | 
				
			
			@ -0,0 +1,970 @@
 | 
			
		|||
// Automatically generated file. DO NOT EDIT.
 | 
			
		||||
// Generated by gen-device.py from AT90PWM2B.atdf, see http://packs.download.atmel.com/
 | 
			
		||||
 | 
			
		||||
// +build avr,at90pwm2b
 | 
			
		||||
 | 
			
		||||
// Device information for the AT90PWM2B.
 | 
			
		||||
//
 | 
			
		||||
package avr
 | 
			
		||||
 | 
			
		||||
// Magic type name for the compiler.
 | 
			
		||||
type __reg uint8
 | 
			
		||||
 | 
			
		||||
// Export this magic type name.
 | 
			
		||||
type RegValue = __reg
 | 
			
		||||
 | 
			
		||||
// Some information about this device.
 | 
			
		||||
const (
 | 
			
		||||
	DEVICE = "AT90PWM2B"
 | 
			
		||||
	ARCH   = "AVR8"
 | 
			
		||||
	FAMILY = "megaAVR"
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
// Interrupts
 | 
			
		||||
const (
 | 
			
		||||
	IRQ_RESET         = 0  // External Pin, Power-on Reset, Brown-out Reset, Watchdog Reset and JTAG AVR Reset
 | 
			
		||||
	IRQ_PSC2_CAPT     = 1  // PSC2 Capture Event
 | 
			
		||||
	IRQ_PSC2_EC       = 2  // PSC2 End Cycle
 | 
			
		||||
	IRQ_PSC1_CAPT     = 3  // PSC1 Capture Event
 | 
			
		||||
	IRQ_PSC1_EC       = 4  // PSC1 End Cycle
 | 
			
		||||
	IRQ_PSC0_CAPT     = 5  // PSC0 Capture Event
 | 
			
		||||
	IRQ_PSC0_EC       = 6  // PSC0 End Cycle
 | 
			
		||||
	IRQ_ANALOG_COMP_0 = 7  // Analog Comparator 0
 | 
			
		||||
	IRQ_ANALOG_COMP_1 = 8  // Analog Comparator 1
 | 
			
		||||
	IRQ_ANALOG_COMP_2 = 9  // Analog Comparator 2
 | 
			
		||||
	IRQ_INT0          = 10 // External Interrupt Request 0
 | 
			
		||||
	IRQ_TIMER1_CAPT   = 11 // Timer/Counter1 Capture Event
 | 
			
		||||
	IRQ_TIMER1_COMPA  = 12 // Timer/Counter1 Compare Match A
 | 
			
		||||
	IRQ_TIMER1_COMPB  = 13 // Timer/Counter Compare Match B
 | 
			
		||||
	IRQ_RESERVED15    = 14 //
 | 
			
		||||
	IRQ_TIMER1_OVF    = 15 // Timer/Counter1 Overflow
 | 
			
		||||
	IRQ_TIMER0_COMPA  = 16 // Timer/Counter0 Compare Match A
 | 
			
		||||
	IRQ_TIMER0_OVF    = 17 // Timer/Counter0 Overflow
 | 
			
		||||
	IRQ_ADC           = 18 // ADC Conversion Complete
 | 
			
		||||
	IRQ_INT1          = 19 // External Interrupt Request 1
 | 
			
		||||
	IRQ_SPI_STC       = 20 // SPI Serial Transfer Complete
 | 
			
		||||
	IRQ_USART_RX      = 21 // USART, Rx Complete
 | 
			
		||||
	IRQ_USART_UDRE    = 22 // USART Data Register Empty
 | 
			
		||||
	IRQ_USART_TX      = 23 // USART, Tx Complete
 | 
			
		||||
	IRQ_INT2          = 24 // External Interrupt Request 2
 | 
			
		||||
	IRQ_WDT           = 25 // Watchdog Timeout Interrupt
 | 
			
		||||
	IRQ_EE_READY      = 26 // EEPROM Ready
 | 
			
		||||
	IRQ_TIMER0_COMPB  = 27 // Timer Counter 0 Compare Match B
 | 
			
		||||
	IRQ_INT3          = 28 // External Interrupt Request 3
 | 
			
		||||
	IRQ_RESERVED30    = 29 //
 | 
			
		||||
	IRQ_RESERVED31    = 30 //
 | 
			
		||||
	IRQ_SPM_READY     = 31 // Store Program Memory Read
 | 
			
		||||
	IRQ_max           = 31 // Highest interrupt number on this device.
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
// Peripherals
 | 
			
		||||
var (
 | 
			
		||||
	// Fuses
 | 
			
		||||
	FUSE = struct {
 | 
			
		||||
		EXTENDED __reg
 | 
			
		||||
		HIGH     __reg
 | 
			
		||||
		LOW      __reg
 | 
			
		||||
	}{
 | 
			
		||||
		EXTENDED: 0x2,
 | 
			
		||||
		HIGH:     0x1,
 | 
			
		||||
		LOW:      0x0,
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	// Lockbits
 | 
			
		||||
	LOCKBIT = struct {
 | 
			
		||||
		LOCKBIT __reg
 | 
			
		||||
	}{
 | 
			
		||||
		LOCKBIT: 0x0,
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	// I/O Port
 | 
			
		||||
	PORT = struct {
 | 
			
		||||
		PORTB __reg
 | 
			
		||||
		DDRB  __reg
 | 
			
		||||
		PINB  __reg
 | 
			
		||||
		PORTD __reg
 | 
			
		||||
		DDRD  __reg
 | 
			
		||||
		PIND  __reg
 | 
			
		||||
		PORTE __reg
 | 
			
		||||
		DDRE  __reg
 | 
			
		||||
		PINE  __reg
 | 
			
		||||
	}{
 | 
			
		||||
		PORTB: 0x25, // Port B Data Register
 | 
			
		||||
		DDRB:  0x24, // Port B Data Direction Register
 | 
			
		||||
		PINB:  0x23, // Port B Input Pins
 | 
			
		||||
		PORTD: 0x2b, // Port D Data Register
 | 
			
		||||
		DDRD:  0x2a, // Port D Data Direction Register
 | 
			
		||||
		PIND:  0x29, // Port D Input Pins
 | 
			
		||||
		PORTE: 0x2e, // Port E Data Register
 | 
			
		||||
		DDRE:  0x2d, // Port E Data Direction Register
 | 
			
		||||
		PINE:  0x2c, // Port E Input Pins
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	// Bootloader
 | 
			
		||||
	BOOT_LOAD = struct {
 | 
			
		||||
		SPMCSR __reg
 | 
			
		||||
	}{
 | 
			
		||||
		SPMCSR: 0x57, // Store Program Memory Control Register
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	// Extended USART
 | 
			
		||||
	EUSART = struct {
 | 
			
		||||
		EUDR   __reg
 | 
			
		||||
		EUCSRA __reg
 | 
			
		||||
		EUCSRB __reg
 | 
			
		||||
		EUCSRC __reg
 | 
			
		||||
		MUBRRL __reg
 | 
			
		||||
		MUBRRH __reg
 | 
			
		||||
	}{
 | 
			
		||||
		EUDR:   0xce, // EUSART I/O Data Register
 | 
			
		||||
		EUCSRA: 0xc8, // EUSART Control and Status Register A
 | 
			
		||||
		EUCSRB: 0xc9, // EUSART Control Register B
 | 
			
		||||
		EUCSRC: 0xca, // EUSART Status Register C
 | 
			
		||||
		MUBRRL: 0xcc, // Manchester Receiver Baud Rate Register
 | 
			
		||||
		MUBRRH: 0xcc, // Manchester Receiver Baud Rate Register
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	// Analog Comparator
 | 
			
		||||
	AC = struct {
 | 
			
		||||
		AC0CON __reg
 | 
			
		||||
		AC1CON __reg
 | 
			
		||||
		AC2CON __reg
 | 
			
		||||
		ACSR   __reg
 | 
			
		||||
	}{
 | 
			
		||||
		AC0CON: 0xad, // Analog Comparator 0 Control Register
 | 
			
		||||
		AC1CON: 0xae, // Analog Comparator 1 Control Register
 | 
			
		||||
		AC2CON: 0xaf, // Analog Comparator 2 Control Register
 | 
			
		||||
		ACSR:   0x50, // Analog Comparator Status Register
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	// Digital-to-Analog Converter
 | 
			
		||||
	DAC = struct {
 | 
			
		||||
		DACL  __reg
 | 
			
		||||
		DACH  __reg
 | 
			
		||||
		DACON __reg
 | 
			
		||||
	}{
 | 
			
		||||
		DACL:  0xab, // DAC Data Register
 | 
			
		||||
		DACH:  0xab, // DAC Data Register
 | 
			
		||||
		DACON: 0xaa, // DAC Control Register
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	// CPU Registers
 | 
			
		||||
	CPU = struct {
 | 
			
		||||
		SREG   __reg
 | 
			
		||||
		SPL    __reg
 | 
			
		||||
		SPH    __reg
 | 
			
		||||
		MCUCR  __reg
 | 
			
		||||
		MCUSR  __reg
 | 
			
		||||
		OSCCAL __reg
 | 
			
		||||
		CLKPR  __reg
 | 
			
		||||
		SMCR   __reg
 | 
			
		||||
		GPIOR3 __reg
 | 
			
		||||
		GPIOR2 __reg
 | 
			
		||||
		GPIOR1 __reg
 | 
			
		||||
		GPIOR0 __reg
 | 
			
		||||
		PLLCSR __reg
 | 
			
		||||
		PRR    __reg
 | 
			
		||||
	}{
 | 
			
		||||
		SREG:   0x5f, // Status Register
 | 
			
		||||
		SPL:    0x5d, // Stack Pointer
 | 
			
		||||
		SPH:    0x5d, // Stack Pointer
 | 
			
		||||
		MCUCR:  0x55, // MCU Control Register
 | 
			
		||||
		MCUSR:  0x54, // MCU Status Register
 | 
			
		||||
		OSCCAL: 0x66, // Oscillator Calibration Value
 | 
			
		||||
		CLKPR:  0x61,
 | 
			
		||||
		SMCR:   0x53, // Sleep Mode Control Register
 | 
			
		||||
		GPIOR3: 0x3b, // General Purpose IO Register 3
 | 
			
		||||
		GPIOR2: 0x3a, // General Purpose IO Register 2
 | 
			
		||||
		GPIOR1: 0x39, // General Purpose IO Register 1
 | 
			
		||||
		GPIOR0: 0x3e, // General Purpose IO Register 0
 | 
			
		||||
		PLLCSR: 0x49, // PLL Control And Status Register
 | 
			
		||||
		PRR:    0x64, // Power Reduction Register
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	// Timer/Counter, 8-bit
 | 
			
		||||
	TC8 = struct {
 | 
			
		||||
		TIMSK0 __reg
 | 
			
		||||
		TIFR0  __reg
 | 
			
		||||
		TCCR0A __reg
 | 
			
		||||
		TCCR0B __reg
 | 
			
		||||
		TCNT0  __reg
 | 
			
		||||
		OCR0A  __reg
 | 
			
		||||
		OCR0B  __reg
 | 
			
		||||
	}{
 | 
			
		||||
		TIMSK0: 0x6e, // Timer/Counter0 Interrupt Mask Register
 | 
			
		||||
		TIFR0:  0x35, // Timer/Counter0 Interrupt Flag register
 | 
			
		||||
		TCCR0A: 0x44, // Timer/Counter Control Register A
 | 
			
		||||
		TCCR0B: 0x45, // Timer/Counter Control Register B
 | 
			
		||||
		TCNT0:  0x46, // Timer/Counter0
 | 
			
		||||
		OCR0A:  0x47, // Timer/Counter0 Output Compare Register
 | 
			
		||||
		OCR0B:  0x48, // Timer/Counter0 Output Compare Register
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	// Timer/Counter, 16-bit
 | 
			
		||||
	TC16 = struct {
 | 
			
		||||
		TIMSK1 __reg
 | 
			
		||||
		TIFR1  __reg
 | 
			
		||||
		TCCR1A __reg
 | 
			
		||||
		TCCR1B __reg
 | 
			
		||||
		TCCR1C __reg
 | 
			
		||||
		TCNT1L __reg
 | 
			
		||||
		TCNT1H __reg
 | 
			
		||||
		OCR1AL __reg
 | 
			
		||||
		OCR1AH __reg
 | 
			
		||||
		OCR1BL __reg
 | 
			
		||||
		OCR1BH __reg
 | 
			
		||||
		ICR1L  __reg
 | 
			
		||||
		ICR1H  __reg
 | 
			
		||||
	}{
 | 
			
		||||
		TIMSK1: 0x6f, // Timer/Counter Interrupt Mask Register
 | 
			
		||||
		TIFR1:  0x36, // Timer/Counter Interrupt Flag register
 | 
			
		||||
		TCCR1A: 0x80, // Timer/Counter1 Control Register A
 | 
			
		||||
		TCCR1B: 0x81, // Timer/Counter1 Control Register B
 | 
			
		||||
		TCCR1C: 0x82, // Timer/Counter1 Control Register C
 | 
			
		||||
		TCNT1L: 0x84, // Timer/Counter1 Bytes
 | 
			
		||||
		TCNT1H: 0x84, // Timer/Counter1 Bytes
 | 
			
		||||
		OCR1AL: 0x88, // Timer/Counter1 Output Compare Register Bytes
 | 
			
		||||
		OCR1AH: 0x88, // Timer/Counter1 Output Compare Register Bytes
 | 
			
		||||
		OCR1BL: 0x8a, // Timer/Counter1 Output Compare Register Bytes
 | 
			
		||||
		OCR1BH: 0x8a, // Timer/Counter1 Output Compare Register Bytes
 | 
			
		||||
		ICR1L:  0x86, // Timer/Counter1 Input Capture Register Bytes
 | 
			
		||||
		ICR1H:  0x86, // Timer/Counter1 Input Capture Register Bytes
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	// Analog-to-Digital Converter
 | 
			
		||||
	ADC = struct {
 | 
			
		||||
		ADMUX   __reg
 | 
			
		||||
		ADCSRA  __reg
 | 
			
		||||
		ADCL    __reg
 | 
			
		||||
		ADCH    __reg
 | 
			
		||||
		ADCSRB  __reg
 | 
			
		||||
		DIDR0   __reg
 | 
			
		||||
		DIDR1   __reg
 | 
			
		||||
		AMP0CSR __reg
 | 
			
		||||
		AMP1CSR __reg
 | 
			
		||||
	}{
 | 
			
		||||
		ADMUX:   0x7c, // The ADC multiplexer Selection Register
 | 
			
		||||
		ADCSRA:  0x7a, // The ADC Control and Status register
 | 
			
		||||
		ADCL:    0x78, // ADC Data Register Bytes
 | 
			
		||||
		ADCH:    0x78, // ADC Data Register Bytes
 | 
			
		||||
		ADCSRB:  0x7b, // ADC Control and Status Register B
 | 
			
		||||
		DIDR0:   0x7e, // Digital Input Disable Register 0
 | 
			
		||||
		DIDR1:   0x7f, // Digital Input Disable Register 1
 | 
			
		||||
		AMP0CSR: 0x76,
 | 
			
		||||
		AMP1CSR: 0x77,
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	// USART
 | 
			
		||||
	USART = struct {
 | 
			
		||||
		UDR   __reg
 | 
			
		||||
		UCSRA __reg
 | 
			
		||||
		UCSRB __reg
 | 
			
		||||
		UCSRC __reg
 | 
			
		||||
		UBRRL __reg
 | 
			
		||||
		UBRRH __reg
 | 
			
		||||
	}{
 | 
			
		||||
		UDR:   0xc6, // USART I/O Data Register
 | 
			
		||||
		UCSRA: 0xc0, // USART Control and Status register A
 | 
			
		||||
		UCSRB: 0xc1, // USART Control an Status register B
 | 
			
		||||
		UCSRC: 0xc2, // USART Control an Status register C
 | 
			
		||||
		UBRRL: 0xc4, // USART Baud Rate Register
 | 
			
		||||
		UBRRH: 0xc4, // USART Baud Rate Register
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	// Serial Peripheral Interface
 | 
			
		||||
	SPI = struct {
 | 
			
		||||
		SPCR __reg
 | 
			
		||||
		SPSR __reg
 | 
			
		||||
		SPDR __reg
 | 
			
		||||
	}{
 | 
			
		||||
		SPCR: 0x4c, // SPI Control Register
 | 
			
		||||
		SPSR: 0x4d, // SPI Status Register
 | 
			
		||||
		SPDR: 0x4e, // SPI Data Register
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	// Watchdog Timer
 | 
			
		||||
	WDT = struct {
 | 
			
		||||
		WDTCSR __reg
 | 
			
		||||
	}{
 | 
			
		||||
		WDTCSR: 0x60, // Watchdog Timer Control Register
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	// External Interrupts
 | 
			
		||||
	EXINT = struct {
 | 
			
		||||
		EICRA __reg
 | 
			
		||||
		EIMSK __reg
 | 
			
		||||
		EIFR  __reg
 | 
			
		||||
	}{
 | 
			
		||||
		EICRA: 0x69, // External Interrupt Control Register A
 | 
			
		||||
		EIMSK: 0x3d, // External Interrupt Mask Register
 | 
			
		||||
		EIFR:  0x3c, // External Interrupt Flag Register
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	// EEPROM
 | 
			
		||||
	EEPROM = struct {
 | 
			
		||||
		EEARL __reg
 | 
			
		||||
		EEARH __reg
 | 
			
		||||
		EEDR  __reg
 | 
			
		||||
		EECR  __reg
 | 
			
		||||
	}{
 | 
			
		||||
		EEARL: 0x41, // EEPROM Read/Write Access Bytes
 | 
			
		||||
		EEARH: 0x41, // EEPROM Read/Write Access Bytes
 | 
			
		||||
		EEDR:  0x40, // EEPROM Data Register
 | 
			
		||||
		EECR:  0x3f, // EEPROM Control Register
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	// Power Stage Controller
 | 
			
		||||
	PSC = struct {
 | 
			
		||||
		PICR0L  __reg
 | 
			
		||||
		PICR0H  __reg
 | 
			
		||||
		PFRC0B  __reg
 | 
			
		||||
		PFRC0A  __reg
 | 
			
		||||
		PCTL0   __reg
 | 
			
		||||
		PCNF0   __reg
 | 
			
		||||
		OCR0RBL __reg
 | 
			
		||||
		OCR0RBH __reg
 | 
			
		||||
		OCR0SBL __reg
 | 
			
		||||
		OCR0SBH __reg
 | 
			
		||||
		OCR0RAL __reg
 | 
			
		||||
		OCR0RAH __reg
 | 
			
		||||
		OCR0SAL __reg
 | 
			
		||||
		OCR0SAH __reg
 | 
			
		||||
		PSOC0   __reg
 | 
			
		||||
		PIM0    __reg
 | 
			
		||||
		PIFR0   __reg
 | 
			
		||||
		PICR2L  __reg
 | 
			
		||||
		PICR2H  __reg
 | 
			
		||||
		PFRC2B  __reg
 | 
			
		||||
		PFRC2A  __reg
 | 
			
		||||
		PCTL2   __reg
 | 
			
		||||
		PCNF2   __reg
 | 
			
		||||
		OCR2RBL __reg
 | 
			
		||||
		OCR2RBH __reg
 | 
			
		||||
		OCR2SBL __reg
 | 
			
		||||
		OCR2SBH __reg
 | 
			
		||||
		OCR2RAL __reg
 | 
			
		||||
		OCR2RAH __reg
 | 
			
		||||
		OCR2SAL __reg
 | 
			
		||||
		OCR2SAH __reg
 | 
			
		||||
		POM2    __reg
 | 
			
		||||
		PSOC2   __reg
 | 
			
		||||
		PIM2    __reg
 | 
			
		||||
		PIFR2   __reg
 | 
			
		||||
	}{
 | 
			
		||||
		PICR0L:  0xde, // PSC 0 Input Capture Register
 | 
			
		||||
		PICR0H:  0xde, // PSC 0 Input Capture Register
 | 
			
		||||
		PFRC0B:  0xdd, // PSC 0 Input B Control
 | 
			
		||||
		PFRC0A:  0xdc, // PSC 0 Input A Control
 | 
			
		||||
		PCTL0:   0xdb, // PSC 0 Control Register
 | 
			
		||||
		PCNF0:   0xda, // PSC 0 Configuration Register
 | 
			
		||||
		OCR0RBL: 0xd8, // Output Compare 0 RB Register
 | 
			
		||||
		OCR0RBH: 0xd8, // Output Compare 0 RB Register
 | 
			
		||||
		OCR0SBL: 0xd6, // Output Compare 0 SB Register
 | 
			
		||||
		OCR0SBH: 0xd6, // Output Compare 0 SB Register
 | 
			
		||||
		OCR0RAL: 0xd4, // Output Compare 0 RA Register
 | 
			
		||||
		OCR0RAH: 0xd4, // Output Compare 0 RA Register
 | 
			
		||||
		OCR0SAL: 0xd2, // Output Compare 0 SA Register
 | 
			
		||||
		OCR0SAH: 0xd2, // Output Compare 0 SA Register
 | 
			
		||||
		PSOC0:   0xd0, // PSC0 Synchro and Output Configuration
 | 
			
		||||
		PIM0:    0xa1, // PSC0 Interrupt Mask Register
 | 
			
		||||
		PIFR0:   0xa0, // PSC0 Interrupt Flag Register
 | 
			
		||||
		PICR2L:  0xfe, // PSC 2 Input Capture Register
 | 
			
		||||
		PICR2H:  0xfe, // PSC 2 Input Capture Register
 | 
			
		||||
		PFRC2B:  0xfd, // PSC 2 Input B Control
 | 
			
		||||
		PFRC2A:  0xfc, // PSC 2 Input B Control
 | 
			
		||||
		PCTL2:   0xfb, // PSC 2 Control Register
 | 
			
		||||
		PCNF2:   0xfa, // PSC 2 Configuration Register
 | 
			
		||||
		OCR2RBL: 0xf8, // Output Compare 2 RB Register
 | 
			
		||||
		OCR2RBH: 0xf8, // Output Compare 2 RB Register
 | 
			
		||||
		OCR2SBL: 0xf6, // Output Compare 2 SB Register
 | 
			
		||||
		OCR2SBH: 0xf6, // Output Compare 2 SB Register
 | 
			
		||||
		OCR2RAL: 0xf4, // Output Compare 2 RA Register
 | 
			
		||||
		OCR2RAH: 0xf4, // Output Compare 2 RA Register
 | 
			
		||||
		OCR2SAL: 0xf2, // Output Compare 2 SA Register
 | 
			
		||||
		OCR2SAH: 0xf2, // Output Compare 2 SA Register
 | 
			
		||||
		POM2:    0xf1, // PSC 2 Output Matrix
 | 
			
		||||
		PSOC2:   0xf0, // PSC2 Synchro and Output Configuration
 | 
			
		||||
		PIM2:    0xa5, // PSC2 Interrupt Mask Register
 | 
			
		||||
		PIFR2:   0xa4, // PSC2 Interrupt Flag Register
 | 
			
		||||
	}
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
// Bitfields for FUSE: Fuses
 | 
			
		||||
const (
 | 
			
		||||
	// EXTENDED
 | 
			
		||||
	EXTENDED_PSC2RB  = 0x80 // PSC2 Reset Behavior
 | 
			
		||||
	EXTENDED_PSC1RB  = 0x40 // PSC1 Reset Behavior
 | 
			
		||||
	EXTENDED_PSC0RB  = 0x20 // PSC0 Reset Behavior
 | 
			
		||||
	EXTENDED_PSCRV   = 0x10 // PSCOUT Reset Value
 | 
			
		||||
	EXTENDED_BOOTSZ  = 0x6  // Select Boot Size
 | 
			
		||||
	EXTENDED_BOOTRST = 0x1  // Select Reset Vector
 | 
			
		||||
 | 
			
		||||
	// HIGH
 | 
			
		||||
	HIGH_RSTDISBL = 0x80 // Reset Disabled (Enable PC6 as i/o pin)
 | 
			
		||||
	HIGH_DWEN     = 0x40 // Debug Wire enable
 | 
			
		||||
	HIGH_SPIEN    = 0x20 // Serial program downloading (SPI) enabled
 | 
			
		||||
	HIGH_WDTON    = 0x10 // Watch-dog Timer always on
 | 
			
		||||
	HIGH_EESAVE   = 0x8  // Preserve EEPROM through the Chip Erase cycle
 | 
			
		||||
	HIGH_BODLEVEL = 0x7  // Brown-out Detector Trigger Level
 | 
			
		||||
 | 
			
		||||
	// LOW
 | 
			
		||||
	LOW_CKDIV8    = 0x80 // Divide clock by 8 internally
 | 
			
		||||
	LOW_CKOUT     = 0x40 // Clock output on PORTB0
 | 
			
		||||
	LOW_SUT_CKSEL = 0x3f // Select Clock Source
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
// Bitfields for LOCKBIT: Lockbits
 | 
			
		||||
const (
 | 
			
		||||
	// LOCKBIT
 | 
			
		||||
	LOCKBIT_LB   = 0x3  // Memory Lock
 | 
			
		||||
	LOCKBIT_BLB0 = 0xc  // Boot Loader Protection Mode
 | 
			
		||||
	LOCKBIT_BLB1 = 0x30 // Boot Loader Protection Mode
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
// Bitfields for BOOT_LOAD: Bootloader
 | 
			
		||||
const (
 | 
			
		||||
	// SPMCSR: Store Program Memory Control Register
 | 
			
		||||
	SPMCSR_SPMIE  = 0x80 // SPM Interrupt Enable
 | 
			
		||||
	SPMCSR_RWWSB  = 0x40 // Read While Write Section Busy
 | 
			
		||||
	SPMCSR_RWWSRE = 0x10 // Read While Write section read enable
 | 
			
		||||
	SPMCSR_BLBSET = 0x8  // Boot Lock Bit Set
 | 
			
		||||
	SPMCSR_PGWRT  = 0x4  // Page Write
 | 
			
		||||
	SPMCSR_PGERS  = 0x2  // Page Erase
 | 
			
		||||
	SPMCSR_SPMEN  = 0x1  // Store Program Memory Enable
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
// Bitfields for EUSART: Extended USART
 | 
			
		||||
const (
 | 
			
		||||
	// EUDR: EUSART I/O Data Register
 | 
			
		||||
	EUDR_EUDR = 0xff // EUSART Extended data bits
 | 
			
		||||
 | 
			
		||||
	// EUCSRA: EUSART Control and Status Register A
 | 
			
		||||
	EUCSRA_UTxS = 0xf0 // EUSART Control and Status Register A Bits
 | 
			
		||||
	EUCSRA_URxS = 0xf  // EUSART Control and Status Register A Bits
 | 
			
		||||
 | 
			
		||||
	// EUCSRB: EUSART Control Register B
 | 
			
		||||
	EUCSRB_EUSART = 0x10 // EUSART Enable Bit
 | 
			
		||||
	EUCSRB_EUSBS  = 0x8  // EUSBS Enable Bit
 | 
			
		||||
	EUCSRB_EMCH   = 0x2  // Manchester Mode Bit
 | 
			
		||||
	EUCSRB_BODR   = 0x1  // Order Bit
 | 
			
		||||
 | 
			
		||||
	// EUCSRC: EUSART Status Register C
 | 
			
		||||
	EUCSRC_FEM   = 0x8 // Frame Error Manchester Bit
 | 
			
		||||
	EUCSRC_F1617 = 0x4 // F1617 Bit
 | 
			
		||||
	EUCSRC_STP   = 0x3 // Stop Bits
 | 
			
		||||
 | 
			
		||||
	// MUBRRL: Manchester Receiver Baud Rate Register
 | 
			
		||||
 | 
			
		||||
	// MUBRRH: Manchester Receiver Baud Rate Register
 | 
			
		||||
	MUBRR_MUBRR = 0xffff // Manchester Receiver Baud Rate Register Bits
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
// Bitfields for AC: Analog Comparator
 | 
			
		||||
const (
 | 
			
		||||
	// AC0CON: Analog Comparator 0 Control Register
 | 
			
		||||
	AC0CON_AC0EN = 0x80 // Analog Comparator 0 Enable Bit
 | 
			
		||||
	AC0CON_AC0IE = 0x40 // Analog Comparator 0 Interrupt Enable Bit
 | 
			
		||||
	AC0CON_AC0IS = 0x30 // Analog Comparator 0  Interrupt Select Bit
 | 
			
		||||
	AC0CON_AC0M  = 0x7  // Analog Comparator 0 Multiplexer Register
 | 
			
		||||
 | 
			
		||||
	// AC1CON: Analog Comparator 1 Control Register
 | 
			
		||||
	AC1CON_AC1EN  = 0x80 // Analog Comparator 1 Enable Bit
 | 
			
		||||
	AC1CON_AC1IE  = 0x40 // Analog Comparator 1 Interrupt Enable Bit
 | 
			
		||||
	AC1CON_AC1IS  = 0x30 // Analog Comparator 1  Interrupt Select Bit
 | 
			
		||||
	AC1CON_AC1ICE = 0x8  // Analog Comparator 1 Interrupt Capture Enable Bit
 | 
			
		||||
	AC1CON_AC1M   = 0x7  // Analog Comparator 1 Multiplexer Register
 | 
			
		||||
 | 
			
		||||
	// AC2CON: Analog Comparator 2 Control Register
 | 
			
		||||
	AC2CON_AC2EN = 0x80 // Analog Comparator 2 Enable Bit
 | 
			
		||||
	AC2CON_AC2IE = 0x40 // Analog Comparator 2 Interrupt Enable Bit
 | 
			
		||||
	AC2CON_AC2IS = 0x30 // Analog Comparator 2  Interrupt Select Bit
 | 
			
		||||
	AC2CON_AC2M  = 0x7  // Analog Comparator 2 Multiplexer Register
 | 
			
		||||
 | 
			
		||||
	// ACSR: Analog Comparator Status Register
 | 
			
		||||
	ACSR_ACCKDIV = 0x80 // Analog Comparator Clock Divider
 | 
			
		||||
	ACSR_AC2IF   = 0x40 // Analog Comparator 2 Interrupt Flag Bit
 | 
			
		||||
	ACSR_AC1IF   = 0x20 // Analog Comparator 1  Interrupt Flag Bit
 | 
			
		||||
	ACSR_AC0IF   = 0x10 // Analog Comparator 0 Interrupt Flag Bit
 | 
			
		||||
	ACSR_AC2O    = 0x4  // Analog Comparator 2 Output Bit
 | 
			
		||||
	ACSR_AC1O    = 0x2  // Analog Comparator 1 Output Bit
 | 
			
		||||
	ACSR_AC0O    = 0x1  // Analog Comparator 0 Output Bit
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
// Bitfields for DAC: Digital-to-Analog Converter
 | 
			
		||||
const (
 | 
			
		||||
	// DACL: DAC Data Register
 | 
			
		||||
 | 
			
		||||
	// DACH: DAC Data Register
 | 
			
		||||
	DAC_DAC = 0xffff // DAC Data Register Bits
 | 
			
		||||
 | 
			
		||||
	// DACON: DAC Control Register
 | 
			
		||||
	DACON_DAATE = 0x80 // DAC Auto Trigger Enable Bit
 | 
			
		||||
	DACON_DATS  = 0x70 // DAC Trigger Selection Bits
 | 
			
		||||
	DACON_DALA  = 0x4  // DAC Left Adjust
 | 
			
		||||
	DACON_DAOE  = 0x2  // DAC Output Enable
 | 
			
		||||
	DACON_DAEN  = 0x1  // DAC Enable Bit
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
// Bitfields for CPU: CPU Registers
 | 
			
		||||
const (
 | 
			
		||||
	// SREG: Status Register
 | 
			
		||||
	SREG_I = 0x80 // Global Interrupt Enable
 | 
			
		||||
	SREG_T = 0x40 // Bit Copy Storage
 | 
			
		||||
	SREG_H = 0x20 // Half Carry Flag
 | 
			
		||||
	SREG_S = 0x10 // Sign Bit
 | 
			
		||||
	SREG_V = 0x8  // Two's Complement Overflow Flag
 | 
			
		||||
	SREG_N = 0x4  // Negative Flag
 | 
			
		||||
	SREG_Z = 0x2  // Zero Flag
 | 
			
		||||
	SREG_C = 0x1  // Carry Flag
 | 
			
		||||
 | 
			
		||||
	// MCUCR: MCU Control Register
 | 
			
		||||
	MCUCR_SPIPS = 0x80 // SPI Pin Select
 | 
			
		||||
	MCUCR_PUD   = 0x10 // Pull-up disable
 | 
			
		||||
	MCUCR_IVSEL = 0x2  // Interrupt Vector Select
 | 
			
		||||
	MCUCR_IVCE  = 0x1  // Interrupt Vector Change Enable
 | 
			
		||||
 | 
			
		||||
	// MCUSR: MCU Status Register
 | 
			
		||||
	MCUSR_WDRF  = 0x8 // Watchdog Reset Flag
 | 
			
		||||
	MCUSR_BORF  = 0x4 // Brown-out Reset Flag
 | 
			
		||||
	MCUSR_EXTRF = 0x2 // External Reset Flag
 | 
			
		||||
	MCUSR_PORF  = 0x1 // Power-on reset flag
 | 
			
		||||
 | 
			
		||||
	// OSCCAL: Oscillator Calibration Value
 | 
			
		||||
	OSCCAL_OSCCAL = 0xff // Oscillator Calibration
 | 
			
		||||
 | 
			
		||||
	// CLKPR
 | 
			
		||||
	CLKPR_CLKPCE = 0x80
 | 
			
		||||
	CLKPR_CLKPS  = 0xf
 | 
			
		||||
 | 
			
		||||
	// SMCR: Sleep Mode Control Register
 | 
			
		||||
	SMCR_SM = 0xe // Sleep Mode Select bits
 | 
			
		||||
	SMCR_SE = 0x1 // Sleep Enable
 | 
			
		||||
 | 
			
		||||
	// GPIOR3: General Purpose IO Register 3
 | 
			
		||||
	GPIOR3_GPIOR = 0xff // General Purpose IO Register 3 bis
 | 
			
		||||
 | 
			
		||||
	// GPIOR2: General Purpose IO Register 2
 | 
			
		||||
	GPIOR2_GPIOR = 0xff // General Purpose IO Register 2 bis
 | 
			
		||||
 | 
			
		||||
	// GPIOR1: General Purpose IO Register 1
 | 
			
		||||
	GPIOR1_GPIOR = 0xff // General Purpose IO Register 1 bis
 | 
			
		||||
 | 
			
		||||
	// GPIOR0: General Purpose IO Register 0
 | 
			
		||||
	GPIOR0_GPIOR07 = 0x80 // General Purpose IO Register 0 bit 7
 | 
			
		||||
	GPIOR0_GPIOR06 = 0x40 // General Purpose IO Register 0 bit 6
 | 
			
		||||
	GPIOR0_GPIOR05 = 0x20 // General Purpose IO Register 0 bit 5
 | 
			
		||||
	GPIOR0_GPIOR04 = 0x10 // General Purpose IO Register 0 bit 4
 | 
			
		||||
	GPIOR0_GPIOR03 = 0x8  // General Purpose IO Register 0 bit 3
 | 
			
		||||
	GPIOR0_GPIOR02 = 0x4  // General Purpose IO Register 0 bit 2
 | 
			
		||||
	GPIOR0_GPIOR01 = 0x2  // General Purpose IO Register 0 bit 1
 | 
			
		||||
	GPIOR0_GPIOR00 = 0x1  // General Purpose IO Register 0 bit 0
 | 
			
		||||
 | 
			
		||||
	// PLLCSR: PLL Control And Status Register
 | 
			
		||||
	PLLCSR_PLLF  = 0x4 // PLL Factor
 | 
			
		||||
	PLLCSR_PLLE  = 0x2 // PLL Enable
 | 
			
		||||
	PLLCSR_PLOCK = 0x1 // PLL Lock Detector
 | 
			
		||||
 | 
			
		||||
	// PRR: Power Reduction Register
 | 
			
		||||
	PRR_PRPSC2   = 0x80 // Power Reduction PSC2
 | 
			
		||||
	PRR_PRPSC1   = 0x40 // Power Reduction PSC1
 | 
			
		||||
	PRR_PRPSC0   = 0x20 // Power Reduction PSC0
 | 
			
		||||
	PRR_PRTIM1   = 0x10 // Power Reduction Timer/Counter1
 | 
			
		||||
	PRR_PRTIM0   = 0x8  // Power Reduction Timer/Counter0
 | 
			
		||||
	PRR_PRSPI    = 0x4  // Power Reduction Serial Peripheral Interface
 | 
			
		||||
	PRR_PRUSART0 = 0x2  // Power Reduction USART
 | 
			
		||||
	PRR_PRADC    = 0x1  // Power Reduction ADC
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
// Bitfields for TC8: Timer/Counter, 8-bit
 | 
			
		||||
const (
 | 
			
		||||
	// TIMSK0: Timer/Counter0 Interrupt Mask Register
 | 
			
		||||
	TIMSK0_OCIE0B = 0x4 // Timer/Counter0 Output Compare Match B Interrupt Enable
 | 
			
		||||
	TIMSK0_OCIE0A = 0x2 // Timer/Counter0 Output Compare Match A Interrupt Enable
 | 
			
		||||
	TIMSK0_TOIE0  = 0x1 // Timer/Counter0 Overflow Interrupt Enable
 | 
			
		||||
 | 
			
		||||
	// TIFR0: Timer/Counter0 Interrupt Flag register
 | 
			
		||||
	TIFR0_OCF0B = 0x4 // Timer/Counter0 Output Compare Flag 0B
 | 
			
		||||
	TIFR0_OCF0A = 0x2 // Timer/Counter0 Output Compare Flag 0A
 | 
			
		||||
	TIFR0_TOV0  = 0x1 // Timer/Counter0 Overflow Flag
 | 
			
		||||
 | 
			
		||||
	// TCCR0A: Timer/Counter Control Register A
 | 
			
		||||
	TCCR0A_COM0A = 0xc0 // Compare Output Mode, Phase Correct PWM Mode
 | 
			
		||||
	TCCR0A_COM0B = 0x30 // Compare Output Mode, Fast PWm
 | 
			
		||||
	TCCR0A_WGM0  = 0x3  // Waveform Generation Mode
 | 
			
		||||
 | 
			
		||||
	// TCCR0B: Timer/Counter Control Register B
 | 
			
		||||
	TCCR0B_FOC0A = 0x80 // Force Output Compare A
 | 
			
		||||
	TCCR0B_FOC0B = 0x40 // Force Output Compare B
 | 
			
		||||
	TCCR0B_WGM02 = 0x8
 | 
			
		||||
	TCCR0B_CS0   = 0x7 // Clock Select
 | 
			
		||||
 | 
			
		||||
	// TCNT0: Timer/Counter0
 | 
			
		||||
	TCNT0_TCNT0 = 0xff // Timer Counter 0 value
 | 
			
		||||
 | 
			
		||||
	// OCR0A: Timer/Counter0 Output Compare Register
 | 
			
		||||
	OCR0A_OCR0A = 0xff // Timer/Counter0 Output Compare A
 | 
			
		||||
 | 
			
		||||
	// OCR0B: Timer/Counter0 Output Compare Register
 | 
			
		||||
	OCR0B_OCR0B = 0xff // Timer/Counter0 Output Compare B
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
// Bitfields for TC16: Timer/Counter, 16-bit
 | 
			
		||||
const (
 | 
			
		||||
	// TIMSK1: Timer/Counter Interrupt Mask Register
 | 
			
		||||
	TIMSK1_ICIE1  = 0x20 // Timer/Counter1 Input Capture Interrupt Enable
 | 
			
		||||
	TIMSK1_OCIE1B = 0x4  // Timer/Counter1 Output CompareB Match Interrupt Enable
 | 
			
		||||
	TIMSK1_OCIE1A = 0x2  // Timer/Counter1 Output CompareA Match Interrupt Enable
 | 
			
		||||
	TIMSK1_TOIE1  = 0x1  // Timer/Counter1 Overflow Interrupt Enable
 | 
			
		||||
 | 
			
		||||
	// TIFR1: Timer/Counter Interrupt Flag register
 | 
			
		||||
	TIFR1_ICF1  = 0x20 // Input Capture Flag 1
 | 
			
		||||
	TIFR1_OCF1B = 0x4  // Output Compare Flag 1B
 | 
			
		||||
	TIFR1_OCF1A = 0x2  // Output Compare Flag 1A
 | 
			
		||||
	TIFR1_TOV1  = 0x1  // Timer/Counter1 Overflow Flag
 | 
			
		||||
 | 
			
		||||
	// TCCR1A: Timer/Counter1 Control Register A
 | 
			
		||||
	TCCR1A_COM1A = 0xc0 // Compare Output Mode 1A, bits
 | 
			
		||||
	TCCR1A_COM1B = 0x30 // Compare Output Mode 1B, bits
 | 
			
		||||
	TCCR1A_WGM1  = 0x3  // Waveform Generation Mode
 | 
			
		||||
 | 
			
		||||
	// TCCR1B: Timer/Counter1 Control Register B
 | 
			
		||||
	TCCR1B_ICNC1 = 0x80 // Input Capture 1 Noise Canceler
 | 
			
		||||
	TCCR1B_ICES1 = 0x40 // Input Capture 1 Edge Select
 | 
			
		||||
	TCCR1B_WGM1  = 0x18 // Waveform Generation Mode
 | 
			
		||||
	TCCR1B_CS1   = 0x7  // Prescaler source of Timer/Counter 1
 | 
			
		||||
 | 
			
		||||
	// TCCR1C: Timer/Counter1 Control Register C
 | 
			
		||||
	TCCR1C_FOC1A = 0x80
 | 
			
		||||
	TCCR1C_FOC1B = 0x40
 | 
			
		||||
 | 
			
		||||
	// TCNT1L: Timer/Counter1 Bytes
 | 
			
		||||
 | 
			
		||||
	// TCNT1H: Timer/Counter1 Bytes
 | 
			
		||||
	TCNT1_TCNT1 = 0xffff // Timer/Counter1
 | 
			
		||||
 | 
			
		||||
	// ICR1L: Timer/Counter1 Input Capture Register Bytes
 | 
			
		||||
 | 
			
		||||
	// ICR1H: Timer/Counter1 Input Capture Register Bytes
 | 
			
		||||
	ICR1_ICR1 = 0xffff // Timer/Counter1 Input Capture
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
// Bitfields for ADC: Analog-to-Digital Converter
 | 
			
		||||
const (
 | 
			
		||||
	// ADMUX: The ADC multiplexer Selection Register
 | 
			
		||||
	ADMUX_REFS  = 0xc0 // Reference Selection Bits
 | 
			
		||||
	ADMUX_ADLAR = 0x20 // Left Adjust Result
 | 
			
		||||
	ADMUX_MUX   = 0xf  // Analog Channel and Gain Selection Bits
 | 
			
		||||
 | 
			
		||||
	// ADCSRA: The ADC Control and Status register
 | 
			
		||||
	ADCSRA_ADEN  = 0x80 // ADC Enable
 | 
			
		||||
	ADCSRA_ADSC  = 0x40 // ADC Start Conversion
 | 
			
		||||
	ADCSRA_ADATE = 0x20 // ADC Auto Trigger Enable
 | 
			
		||||
	ADCSRA_ADIF  = 0x10 // ADC Interrupt Flag
 | 
			
		||||
	ADCSRA_ADIE  = 0x8  // ADC Interrupt Enable
 | 
			
		||||
	ADCSRA_ADPS  = 0x7  // ADC Prescaler Select Bits
 | 
			
		||||
 | 
			
		||||
	// ADCL: ADC Data Register Bytes
 | 
			
		||||
 | 
			
		||||
	// ADCH: ADC Data Register Bytes
 | 
			
		||||
	ADC_ADC = 0xffff // ADC Data Register
 | 
			
		||||
 | 
			
		||||
	// ADCSRB: ADC Control and Status Register B
 | 
			
		||||
	ADCSRB_ADHSM = 0x80 // ADC High Speed Mode
 | 
			
		||||
	ADCSRB_ADTS  = 0xf  // ADC Auto Trigger Source
 | 
			
		||||
 | 
			
		||||
	// DIDR0: Digital Input Disable Register 0
 | 
			
		||||
	DIDR0_ADC7D = 0x80
 | 
			
		||||
	DIDR0_ADC6D = 0x40
 | 
			
		||||
	DIDR0_ADC5D = 0x20
 | 
			
		||||
	DIDR0_ADC4D = 0x10
 | 
			
		||||
	DIDR0_ADC3D = 0x8
 | 
			
		||||
	DIDR0_ADC2D = 0x4
 | 
			
		||||
	DIDR0_ADC1D = 0x2
 | 
			
		||||
	DIDR0_ADC0D = 0x1
 | 
			
		||||
 | 
			
		||||
	// DIDR1: Digital Input Disable Register 1
 | 
			
		||||
	DIDR1_ACMP0D = 0x20
 | 
			
		||||
	DIDR1_AMP0PD = 0x10
 | 
			
		||||
	DIDR1_AMP0ND = 0x8
 | 
			
		||||
	DIDR1_ADC10D = 0x4
 | 
			
		||||
	DIDR1_ADC9D  = 0x2
 | 
			
		||||
	DIDR1_ADC8D  = 0x1
 | 
			
		||||
 | 
			
		||||
	// AMP0CSR
 | 
			
		||||
	AMP0CSR_AMP0EN = 0x80
 | 
			
		||||
	AMP0CSR_AMP0IS = 0x40
 | 
			
		||||
	AMP0CSR_AMP0G  = 0x30
 | 
			
		||||
	AMP0CSR_AMP0TS = 0x3
 | 
			
		||||
 | 
			
		||||
	// AMP1CSR
 | 
			
		||||
	AMP1CSR_AMP1EN = 0x80
 | 
			
		||||
	AMP1CSR_AMP1IS = 0x40
 | 
			
		||||
	AMP1CSR_AMP1G  = 0x30
 | 
			
		||||
	AMP1CSR_AMP1TS = 0x3
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
// Bitfields for USART: USART
 | 
			
		||||
const (
 | 
			
		||||
	// UDR: USART I/O Data Register
 | 
			
		||||
	UDR_UDR = 0xff // USART I/O Data
 | 
			
		||||
 | 
			
		||||
	// UCSRA: USART Control and Status register A
 | 
			
		||||
	UCSRA_RXC  = 0x80 // USART Receive Complete
 | 
			
		||||
	UCSRA_TXC  = 0x40 // USART Transmitt Complete
 | 
			
		||||
	UCSRA_UDRE = 0x20 // USART Data Register Empty
 | 
			
		||||
	UCSRA_FE   = 0x10 // Framing Error
 | 
			
		||||
	UCSRA_DOR  = 0x8  // Data Overrun
 | 
			
		||||
	UCSRA_UPE  = 0x4  // USART Parity Error
 | 
			
		||||
	UCSRA_U2X  = 0x2  // Double USART Transmission Bit
 | 
			
		||||
	UCSRA_MPCM = 0x1  // Multi-processor Communication Mode
 | 
			
		||||
 | 
			
		||||
	// UCSRB: USART Control an Status register B
 | 
			
		||||
	UCSRB_RXCIE = 0x80 // RX Complete Interrupt Enable
 | 
			
		||||
	UCSRB_TXCIE = 0x40 // TX Complete Interrupt Enable
 | 
			
		||||
	UCSRB_UDRIE = 0x20 // USART Data Register Empty Interrupt Enable
 | 
			
		||||
	UCSRB_RXEN  = 0x10 // Receiver Enable
 | 
			
		||||
	UCSRB_TXEN  = 0x8  // Transmitter Enable
 | 
			
		||||
	UCSRB_UCSZ2 = 0x4  // Character Size
 | 
			
		||||
	UCSRB_RXB8  = 0x2  // Receive Data Bit 8
 | 
			
		||||
	UCSRB_TXB8  = 0x1  // Transmit Data Bit 8
 | 
			
		||||
 | 
			
		||||
	// UCSRC: USART Control an Status register C
 | 
			
		||||
	UCSRC_UMSEL0 = 0x40 // USART Mode Select
 | 
			
		||||
	UCSRC_UPM    = 0x30 // Parity Mode Bits
 | 
			
		||||
	UCSRC_USBS   = 0x8  // Stop Bit Select
 | 
			
		||||
	UCSRC_UCSZ   = 0x6  // Character Size Bits
 | 
			
		||||
	UCSRC_UCPOL  = 0x1  // Clock Polarity
 | 
			
		||||
 | 
			
		||||
	// UBRRL: USART Baud Rate Register
 | 
			
		||||
 | 
			
		||||
	// UBRRH: USART Baud Rate Register
 | 
			
		||||
	UBRR_UBRR = 0xfff // USART Baud Rate Register Bits
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
// Bitfields for SPI: Serial Peripheral Interface
 | 
			
		||||
const (
 | 
			
		||||
	// SPCR: SPI Control Register
 | 
			
		||||
	SPCR_SPIE = 0x80 // SPI Interrupt Enable
 | 
			
		||||
	SPCR_SPE  = 0x40 // SPI Enable
 | 
			
		||||
	SPCR_DORD = 0x20 // Data Order
 | 
			
		||||
	SPCR_MSTR = 0x10 // Master/Slave Select
 | 
			
		||||
	SPCR_CPOL = 0x8  // Clock polarity
 | 
			
		||||
	SPCR_CPHA = 0x4  // Clock Phase
 | 
			
		||||
	SPCR_SPR  = 0x3  // SPI Clock Rate Selects
 | 
			
		||||
 | 
			
		||||
	// SPSR: SPI Status Register
 | 
			
		||||
	SPSR_SPIF  = 0x80 // SPI Interrupt Flag
 | 
			
		||||
	SPSR_WCOL  = 0x40 // Write Collision Flag
 | 
			
		||||
	SPSR_SPI2X = 0x1  // Double SPI Speed Bit
 | 
			
		||||
 | 
			
		||||
	// SPDR: SPI Data Register
 | 
			
		||||
	SPDR_SPD = 0xff // SPI Data bits
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
// Bitfields for WDT: Watchdog Timer
 | 
			
		||||
const (
 | 
			
		||||
	// WDTCSR: Watchdog Timer Control Register
 | 
			
		||||
	WDTCSR_WDIF = 0x80 // Watchdog Timeout Interrupt Flag
 | 
			
		||||
	WDTCSR_WDIE = 0x40 // Watchdog Timeout Interrupt Enable
 | 
			
		||||
	WDTCSR_WDP  = 0x27 // Watchdog Timer Prescaler Bits
 | 
			
		||||
	WDTCSR_WDCE = 0x10 // Watchdog Change Enable
 | 
			
		||||
	WDTCSR_WDE  = 0x8  // Watch Dog Enable
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
// Bitfields for EXINT: External Interrupts
 | 
			
		||||
const (
 | 
			
		||||
	// EICRA: External Interrupt Control Register A
 | 
			
		||||
	EICRA_ISC3 = 0xc0 // External Interrupt Sense Control Bit
 | 
			
		||||
	EICRA_ISC2 = 0x30 // External Interrupt Sense Control Bit
 | 
			
		||||
	EICRA_ISC1 = 0xc  // External Interrupt Sense Control Bit
 | 
			
		||||
	EICRA_ISC0 = 0x3  // External Interrupt Sense Control Bit
 | 
			
		||||
 | 
			
		||||
	// EIMSK: External Interrupt Mask Register
 | 
			
		||||
	EIMSK_INT = 0x7 // External Interrupt Request Enable
 | 
			
		||||
 | 
			
		||||
	// EIFR: External Interrupt Flag Register
 | 
			
		||||
	EIFR_INTF = 0x7 // External Interrupt Flags
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
// Bitfields for EEPROM: EEPROM
 | 
			
		||||
const (
 | 
			
		||||
	// EEARL: EEPROM Read/Write Access Bytes
 | 
			
		||||
 | 
			
		||||
	// EEARH: EEPROM Read/Write Access Bytes
 | 
			
		||||
	EEAR_EEAR = 0xfff // EEPROM Address bytes
 | 
			
		||||
 | 
			
		||||
	// EEDR: EEPROM Data Register
 | 
			
		||||
	EEDR_EEDR = 0xff // EEPROM Data Bits
 | 
			
		||||
 | 
			
		||||
	// EECR: EEPROM Control Register
 | 
			
		||||
	EECR_EEPM  = 0x30 // EEPROM Programming Mode
 | 
			
		||||
	EECR_EERIE = 0x8  // EEPROM Ready Interrupt Enable
 | 
			
		||||
	EECR_EEMWE = 0x4  // EEPROM Master Write Enable
 | 
			
		||||
	EECR_EEWE  = 0x2  // EEPROM Write Enable
 | 
			
		||||
	EECR_EERE  = 0x1  // EEPROM Read Enable
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
// Bitfields for PSC: Power Stage Controller
 | 
			
		||||
const (
 | 
			
		||||
	// PICR0L: PSC 0 Input Capture Register
 | 
			
		||||
 | 
			
		||||
	// PICR0H: PSC 0 Input Capture Register
 | 
			
		||||
	PICR0_PCST0 = 0x8000 // PSC 0 Input Capture Software Trig
 | 
			
		||||
	PICR0_PICR0 = 0xfff  // PSC 0 Input Capture Bytes
 | 
			
		||||
 | 
			
		||||
	// PFRC0B: PSC 0 Input B Control
 | 
			
		||||
	PFRC0B_PCAE0B  = 0x80 // PSC 0 Capture Enable Input Part B
 | 
			
		||||
	PFRC0B_PISEL0B = 0x40 // PSC 0 Input Select for Part B
 | 
			
		||||
	PFRC0B_PELEV0B = 0x20 // PSC 0 Edge Level Selector on Input Part B
 | 
			
		||||
	PFRC0B_PFLTE0B = 0x10 // PSC 0 Filter Enable on Input Part B
 | 
			
		||||
	PFRC0B_PRFM0B  = 0xf  // PSC 0 Retrigger and Fault Mode for Part B
 | 
			
		||||
 | 
			
		||||
	// PFRC0A: PSC 0 Input A Control
 | 
			
		||||
	PFRC0A_PCAE0A  = 0x80 // PSC 0 Capture Enable Input Part A
 | 
			
		||||
	PFRC0A_PISEL0A = 0x40 // PSC 0 Input Select for Part A
 | 
			
		||||
	PFRC0A_PELEV0A = 0x20 // PSC 0 Edge Level Selector on Input Part A
 | 
			
		||||
	PFRC0A_PFLTE0A = 0x10 // PSC 0 Filter Enable on Input Part A
 | 
			
		||||
	PFRC0A_PRFM0A  = 0xf  // PSC 0 Retrigger and Fault Mode for Part A
 | 
			
		||||
 | 
			
		||||
	// PCTL0: PSC 0 Control Register
 | 
			
		||||
	PCTL0_PPRE0  = 0xc0 // PSC 0 Prescaler Selects
 | 
			
		||||
	PCTL0_PBFM0  = 0x20 // PSC 0 Balance Flank Width Modulation
 | 
			
		||||
	PCTL0_PAOC0B = 0x10 // PSC 0 Asynchronous Output Control B
 | 
			
		||||
	PCTL0_PAOC0A = 0x8  // PSC 0 Asynchronous Output Control A
 | 
			
		||||
	PCTL0_PARUN0 = 0x4  // PSC0 Auto Run
 | 
			
		||||
	PCTL0_PCCYC0 = 0x2  // PSC0 Complete Cycle
 | 
			
		||||
	PCTL0_PRUN0  = 0x1  // PSC 0 Run
 | 
			
		||||
 | 
			
		||||
	// PCNF0: PSC 0 Configuration Register
 | 
			
		||||
	PCNF0_PFIFTY0  = 0x80 // PSC 0 Fifty
 | 
			
		||||
	PCNF0_PALOCK0  = 0x40 // PSC 0 Autolock
 | 
			
		||||
	PCNF0_PLOCK0   = 0x20 // PSC 0 Lock
 | 
			
		||||
	PCNF0_PMODE0   = 0x18 // PSC 0 Mode
 | 
			
		||||
	PCNF0_POP0     = 0x4  // PSC 0 Output Polarity
 | 
			
		||||
	PCNF0_PCLKSEL0 = 0x2  // PSC 0 Input Clock Select
 | 
			
		||||
 | 
			
		||||
	// OCR0RBL: Output Compare 0 RB Register
 | 
			
		||||
 | 
			
		||||
	// OCR0RBH: Output Compare 0 RB Register
 | 
			
		||||
	OCR0RB_OCR0RB = 0xffff // Output Compare RB
 | 
			
		||||
 | 
			
		||||
	// OCR0SBL: Output Compare 0 SB Register
 | 
			
		||||
 | 
			
		||||
	// OCR0SBH: Output Compare 0 SB Register
 | 
			
		||||
	OCR0SB_OCR0SB = 0xfff // Output Compare SB
 | 
			
		||||
 | 
			
		||||
	// OCR0RAL: Output Compare 0 RA Register
 | 
			
		||||
 | 
			
		||||
	// OCR0RAH: Output Compare 0 RA Register
 | 
			
		||||
	OCR0RA_OCR0RA = 0xfff // Output Compare RA
 | 
			
		||||
 | 
			
		||||
	// OCR0SAL: Output Compare 0 SA Register
 | 
			
		||||
 | 
			
		||||
	// OCR0SAH: Output Compare 0 SA Register
 | 
			
		||||
	OCR0SA_OCR0SA = 0xfff // Output Compare SA
 | 
			
		||||
 | 
			
		||||
	// PSOC0: PSC0 Synchro and Output Configuration
 | 
			
		||||
	PSOC0_PSYNC0 = 0x30 // Synchronization Out for ADC Selection
 | 
			
		||||
	PSOC0_POEN0B = 0x4  // PSCOUT01 Output Enable
 | 
			
		||||
	PSOC0_POEN0A = 0x1  // PSCOUT00 Output Enable
 | 
			
		||||
 | 
			
		||||
	// PIM0: PSC0 Interrupt Mask Register
 | 
			
		||||
	PIM0_PSEIE0 = 0x20 // PSC 0 Synchro Error Interrupt Enable
 | 
			
		||||
	PIM0_PEVE0B = 0x10 // External Event B Interrupt Enable
 | 
			
		||||
	PIM0_PEVE0A = 0x8  // External Event A Interrupt Enable
 | 
			
		||||
	PIM0_PEOPE0 = 0x1  // End of Cycle Interrupt Enable
 | 
			
		||||
 | 
			
		||||
	// PIFR0: PSC0 Interrupt Flag Register
 | 
			
		||||
	PIFR0_POAC0B = 0x80 // PSC 0 Output A Activity
 | 
			
		||||
	PIFR0_POAC0A = 0x40 // PSC 0 Output A Activity
 | 
			
		||||
	PIFR0_PSEI0  = 0x20 // PSC 0 Synchro Error Interrupt
 | 
			
		||||
	PIFR0_PEV0B  = 0x10 // External Event B Interrupt
 | 
			
		||||
	PIFR0_PEV0A  = 0x8  // External Event A Interrupt
 | 
			
		||||
	PIFR0_PRN0   = 0x6  // Ramp Number
 | 
			
		||||
	PIFR0_PEOP0  = 0x1  // End of PSC0 Interrupt
 | 
			
		||||
 | 
			
		||||
	// PICR2L: PSC 2 Input Capture Register
 | 
			
		||||
 | 
			
		||||
	// PICR2H: PSC 2 Input Capture Register
 | 
			
		||||
	PICR2_PCST2 = 0x8000 // PSC 2 Input Capture Software Trig
 | 
			
		||||
	PICR2_PICR2 = 0xfff  // PSC 2 Input Capture Bytes
 | 
			
		||||
 | 
			
		||||
	// PFRC2B: PSC 2 Input B Control
 | 
			
		||||
	PFRC2B_PCAE2B  = 0x80 // PSC 2 Capture Enable Input Part B
 | 
			
		||||
	PFRC2B_PISEL2B = 0x40 // PSC 2 Input Select for Part B
 | 
			
		||||
	PFRC2B_PELEV2B = 0x20 // PSC 2 Edge Level Selector on Input Part B
 | 
			
		||||
	PFRC2B_PFLTE2B = 0x10 // PSC 2 Filter Enable on Input Part B
 | 
			
		||||
	PFRC2B_PRFM2B  = 0xf  // PSC 2 Retrigger and Fault Mode for Part B
 | 
			
		||||
 | 
			
		||||
	// PFRC2A: PSC 2 Input B Control
 | 
			
		||||
	PFRC2A_PCAE2A  = 0x80 // PSC 2 Capture Enable Input Part A
 | 
			
		||||
	PFRC2A_PISEL2A = 0x40 // PSC 2 Input Select for Part A
 | 
			
		||||
	PFRC2A_PELEV2A = 0x20 // PSC 2 Edge Level Selector on Input Part A
 | 
			
		||||
	PFRC2A_PFLTE2A = 0x10 // PSC 2 Filter Enable on Input Part A
 | 
			
		||||
	PFRC2A_PRFM2A  = 0xf  // PSC 2 Retrigger and Fault Mode for Part A
 | 
			
		||||
 | 
			
		||||
	// PCTL2: PSC 2 Control Register
 | 
			
		||||
	PCTL2_PPRE2  = 0xc0 // PSC 2 Prescaler Selects
 | 
			
		||||
	PCTL2_PBFM2  = 0x20 // Balance Flank Width Modulation
 | 
			
		||||
	PCTL2_PAOC2B = 0x10 // PSC 2 Asynchronous Output Control B
 | 
			
		||||
	PCTL2_PAOC2A = 0x8  // PSC 2 Asynchronous Output Control A
 | 
			
		||||
	PCTL2_PARUN2 = 0x4  // PSC2 Auto Run
 | 
			
		||||
	PCTL2_PCCYC2 = 0x2  // PSC2 Complete Cycle
 | 
			
		||||
	PCTL2_PRUN2  = 0x1  // PSC 2 Run
 | 
			
		||||
 | 
			
		||||
	// PCNF2: PSC 2 Configuration Register
 | 
			
		||||
	PCNF2_PFIFTY2  = 0x80 // PSC 2 Fifty
 | 
			
		||||
	PCNF2_PALOCK2  = 0x40 // PSC 2 Autolock
 | 
			
		||||
	PCNF2_PLOCK2   = 0x20 // PSC 2 Lock
 | 
			
		||||
	PCNF2_PMODE2   = 0x18 // PSC 2 Mode
 | 
			
		||||
	PCNF2_POP2     = 0x4  // PSC 2 Output Polarity
 | 
			
		||||
	PCNF2_PCLKSEL2 = 0x2  // PSC 2 Input Clock Select
 | 
			
		||||
	PCNF2_POME2    = 0x1  // PSC 2 Output Matrix Enable
 | 
			
		||||
 | 
			
		||||
	// OCR2RBL: Output Compare 2 RB Register
 | 
			
		||||
 | 
			
		||||
	// OCR2RBH: Output Compare 2 RB Register
 | 
			
		||||
	OCR2RB_OCR2RB = 0xffff // Output Compare RB
 | 
			
		||||
 | 
			
		||||
	// OCR2SBL: Output Compare 2 SB Register
 | 
			
		||||
 | 
			
		||||
	// OCR2SBH: Output Compare 2 SB Register
 | 
			
		||||
	OCR2SB_OCR2SB = 0xfff // Output Compare SB
 | 
			
		||||
 | 
			
		||||
	// OCR2RAL: Output Compare 2 RA Register
 | 
			
		||||
 | 
			
		||||
	// OCR2RAH: Output Compare 2 RA Register
 | 
			
		||||
	OCR2RA_OCR2RA = 0xfff // Output Compare RA
 | 
			
		||||
 | 
			
		||||
	// OCR2SAL: Output Compare 2 SA Register
 | 
			
		||||
 | 
			
		||||
	// OCR2SAH: Output Compare 2 SA Register
 | 
			
		||||
	OCR2SA_OCR2SA = 0xfff // Output Compare SA
 | 
			
		||||
 | 
			
		||||
	// POM2: PSC 2 Output Matrix
 | 
			
		||||
	POM2_POMV2B = 0xf0 // Output Matrix Output B Ramps
 | 
			
		||||
	POM2_POMV2A = 0xf  // Output Matrix Output A Ramps
 | 
			
		||||
 | 
			
		||||
	// PSOC2: PSC2 Synchro and Output Configuration
 | 
			
		||||
	PSOC2_POS2    = 0xc0 // PSC 2 Output 23 Select
 | 
			
		||||
	PSOC2_PSYNC2_ = 0x30 // Synchronization Out for ADC Selection
 | 
			
		||||
	PSOC2_POEN2D  = 0x8  // PSCOUT23 Output Enable
 | 
			
		||||
	PSOC2_POEN2B  = 0x4  // PSCOUT21 Output Enable
 | 
			
		||||
	PSOC2_POEN2C  = 0x2  // PSCOUT22 Output Enable
 | 
			
		||||
	PSOC2_POEN2A  = 0x1  // PSCOUT20 Output Enable
 | 
			
		||||
 | 
			
		||||
	// PIM2: PSC2 Interrupt Mask Register
 | 
			
		||||
	PIM2_PSEIE2 = 0x20 // PSC 2 Synchro Error Interrupt Enable
 | 
			
		||||
	PIM2_PEVE2B = 0x10 // External Event B Interrupt Enable
 | 
			
		||||
	PIM2_PEVE2A = 0x8  // External Event A Interrupt Enable
 | 
			
		||||
	PIM2_PEOPE2 = 0x1  // End of Cycle Interrupt Enable
 | 
			
		||||
 | 
			
		||||
	// PIFR2: PSC2 Interrupt Flag Register
 | 
			
		||||
	PIFR2_POAC2B = 0x80 // PSC 2 Output A Activity
 | 
			
		||||
	PIFR2_POAC2A = 0x40 // PSC 2 Output A Activity
 | 
			
		||||
	PIFR2_PSEI2  = 0x20 // PSC 2 Synchro Error Interrupt
 | 
			
		||||
	PIFR2_PEV2B  = 0x10 // External Event B Interrupt
 | 
			
		||||
	PIFR2_PEV2A  = 0x8  // External Event A Interrupt
 | 
			
		||||
	PIFR2_PRN2   = 0x6  // Ramp Number
 | 
			
		||||
	PIFR2_PEOP2  = 0x1  // End of PSC2 Interrupt
 | 
			
		||||
)
 | 
			
		||||
							
								
								
									
										6
									
								
								src/device/avr/at90pwm2b.ld
									
										
									
									
									
										Обычный файл
									
								
							
							
						
						
									
										6
									
								
								src/device/avr/at90pwm2b.ld
									
										
									
									
									
										Обычный файл
									
								
							| 
						 | 
				
			
			@ -0,0 +1,6 @@
 | 
			
		|||
/* Automatically generated file. DO NOT EDIT. */
 | 
			
		||||
/* Generated by gen-device.py from AT90PWM2B.atdf, see http://packs.download.atmel.com/ */
 | 
			
		||||
 | 
			
		||||
__flash_size = 0x2000;
 | 
			
		||||
__ram_size   = 0x200;
 | 
			
		||||
__num_isrs   = 32;
 | 
			
		||||
							
								
								
									
										1025
									
								
								src/device/avr/at90pwm316.go
									
										
									
									
									
										Обычный файл
									
								
							
							
						
						
									
										1025
									
								
								src/device/avr/at90pwm316.go
									
										
									
									
									
										Обычный файл
									
								
							
										
											
												Различия файлов не показаны, т.к. их слишком много
												Показать различия
											
										
									
								
							
							
								
								
									
										6
									
								
								src/device/avr/at90pwm316.ld
									
										
									
									
									
										Обычный файл
									
								
							
							
						
						
									
										6
									
								
								src/device/avr/at90pwm316.ld
									
										
									
									
									
										Обычный файл
									
								
							| 
						 | 
				
			
			@ -0,0 +1,6 @@
 | 
			
		|||
/* Automatically generated file. DO NOT EDIT. */
 | 
			
		||||
/* Generated by gen-device.py from AT90PWM316.atdf, see http://packs.download.atmel.com/ */
 | 
			
		||||
 | 
			
		||||
__flash_size = 0x4000;
 | 
			
		||||
__ram_size   = 0x400;
 | 
			
		||||
__num_isrs   = 32;
 | 
			
		||||
							
								
								
									
										1097
									
								
								src/device/avr/at90pwm3b.go
									
										
									
									
									
										Обычный файл
									
								
							
							
						
						
									
										1097
									
								
								src/device/avr/at90pwm3b.go
									
										
									
									
									
										Обычный файл
									
								
							
										
											
												Различия файлов не показаны, т.к. их слишком много
												Показать различия
											
										
									
								
							
							
								
								
									
										6
									
								
								src/device/avr/at90pwm3b.ld
									
										
									
									
									
										Обычный файл
									
								
							
							
						
						
									
										6
									
								
								src/device/avr/at90pwm3b.ld
									
										
									
									
									
										Обычный файл
									
								
							| 
						 | 
				
			
			@ -0,0 +1,6 @@
 | 
			
		|||
/* Automatically generated file. DO NOT EDIT. */
 | 
			
		||||
/* Generated by gen-device.py from AT90PWM3B.atdf, see http://packs.download.atmel.com/ */
 | 
			
		||||
 | 
			
		||||
__flash_size = 0x2000;
 | 
			
		||||
__ram_size   = 0x200;
 | 
			
		||||
__num_isrs   = 32;
 | 
			
		||||
							
								
								
									
										832
									
								
								src/device/avr/at90pwm81.go
									
										
									
									
									
										Обычный файл
									
								
							
							
						
						
									
										832
									
								
								src/device/avr/at90pwm81.go
									
										
									
									
									
										Обычный файл
									
								
							| 
						 | 
				
			
			@ -0,0 +1,832 @@
 | 
			
		|||
// Automatically generated file. DO NOT EDIT.
 | 
			
		||||
// Generated by gen-device.py from AT90PWM81.atdf, see http://packs.download.atmel.com/
 | 
			
		||||
 | 
			
		||||
// +build avr,at90pwm81
 | 
			
		||||
 | 
			
		||||
// Device information for the AT90PWM81.
 | 
			
		||||
//
 | 
			
		||||
package avr
 | 
			
		||||
 | 
			
		||||
// Magic type name for the compiler.
 | 
			
		||||
type __reg uint8
 | 
			
		||||
 | 
			
		||||
// Export this magic type name.
 | 
			
		||||
type RegValue = __reg
 | 
			
		||||
 | 
			
		||||
// Some information about this device.
 | 
			
		||||
const (
 | 
			
		||||
	DEVICE = "AT90PWM81"
 | 
			
		||||
	ARCH   = "AVR8"
 | 
			
		||||
	FAMILY = "megaAVR"
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
// Interrupts
 | 
			
		||||
const (
 | 
			
		||||
	IRQ_RESET         = 0  // External Pin, Power-on Reset, Brown-out Reset, Watchdog Reset and JTAG AVR Reset
 | 
			
		||||
	IRQ_PSC2_CAPT     = 1  // PSC2 Capture Event
 | 
			
		||||
	IRQ_PSC2_EC       = 2  // PSC2 End Cycle
 | 
			
		||||
	IRQ_PSC2_EEC      = 3  // PSC2 End Of Enhanced Cycle
 | 
			
		||||
	IRQ_PSC0_CAPT     = 4  // PSC0 Capture Event
 | 
			
		||||
	IRQ_PSC0_EC       = 5  // PSC0 End Cycle
 | 
			
		||||
	IRQ_PSC0_EEC      = 6  // PSC0 End Of Enhanced Cycle
 | 
			
		||||
	IRQ_ANALOG_COMP_1 = 7  // Analog Comparator 1
 | 
			
		||||
	IRQ_ANALOG_COMP_2 = 8  // Analog Comparator 2
 | 
			
		||||
	IRQ_ANALOG_COMP_3 = 9  // Analog Comparator 3
 | 
			
		||||
	IRQ_INT0          = 10 // External Interrupt Request 0
 | 
			
		||||
	IRQ_TIMER1_CAPT   = 11 // Timer/Counter1 Capture Event
 | 
			
		||||
	IRQ_TIMER1_OVF    = 12 // Timer/Counter1 Overflow
 | 
			
		||||
	IRQ_ADC           = 13 // ADC Conversion Complete
 | 
			
		||||
	IRQ_INT1          = 14 // External Interrupt Request 1
 | 
			
		||||
	IRQ_SPI_STC       = 15 // SPI Serial Transfer Complet
 | 
			
		||||
	IRQ_INT2          = 16 // External Interrupt Request 2
 | 
			
		||||
	IRQ_WDT           = 17 // Watchdog Timeout Interrupt
 | 
			
		||||
	IRQ_EE_READY      = 18 // EEPROM Ready
 | 
			
		||||
	IRQ_SPM_READY     = 19 // Store Program Memory Read
 | 
			
		||||
	IRQ_max           = 19 // Highest interrupt number on this device.
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
// Peripherals
 | 
			
		||||
var (
 | 
			
		||||
	// Fuses
 | 
			
		||||
	FUSE = struct {
 | 
			
		||||
		EXTENDED __reg
 | 
			
		||||
		HIGH     __reg
 | 
			
		||||
		LOW      __reg
 | 
			
		||||
	}{
 | 
			
		||||
		EXTENDED: 0x2,
 | 
			
		||||
		HIGH:     0x1,
 | 
			
		||||
		LOW:      0x0,
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	// Lockbits
 | 
			
		||||
	LOCKBIT = struct {
 | 
			
		||||
		LOCKBIT __reg
 | 
			
		||||
	}{
 | 
			
		||||
		LOCKBIT: 0x0,
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	// I/O Port
 | 
			
		||||
	PORT = struct {
 | 
			
		||||
		PORTB __reg
 | 
			
		||||
		DDRB  __reg
 | 
			
		||||
		PINB  __reg
 | 
			
		||||
		PORTD __reg
 | 
			
		||||
		DDRD  __reg
 | 
			
		||||
		PIND  __reg
 | 
			
		||||
		PORTE __reg
 | 
			
		||||
		DDRE  __reg
 | 
			
		||||
		PINE  __reg
 | 
			
		||||
	}{
 | 
			
		||||
		PORTB: 0x25, // Port B Data Register
 | 
			
		||||
		DDRB:  0x24, // Port B Data Direction Register
 | 
			
		||||
		PINB:  0x23, // Port B Input Pins
 | 
			
		||||
		PORTD: 0x2b, // Port D Data Register
 | 
			
		||||
		DDRD:  0x2a, // Port D Data Direction Register
 | 
			
		||||
		PIND:  0x29, // Port D Input Pins
 | 
			
		||||
		PORTE: 0x2e, // Port E Data Register
 | 
			
		||||
		DDRE:  0x2d, // Port E Data Direction Register
 | 
			
		||||
		PINE:  0x2c, // Port E Input Pins
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	// Digital-to-Analog Converter
 | 
			
		||||
	DAC = struct {
 | 
			
		||||
		DACL  __reg
 | 
			
		||||
		DACH  __reg
 | 
			
		||||
		DACON __reg
 | 
			
		||||
	}{
 | 
			
		||||
		DACL:  0x58, // DAC Data Register
 | 
			
		||||
		DACH:  0x58, // DAC Data Register
 | 
			
		||||
		DACON: 0x76, // DAC Control Register
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	// Serial Peripheral Interface
 | 
			
		||||
	SPI = struct {
 | 
			
		||||
		SPCR __reg
 | 
			
		||||
		SPSR __reg
 | 
			
		||||
		SPDR __reg
 | 
			
		||||
	}{
 | 
			
		||||
		SPCR: 0x37, // SPI Control Register
 | 
			
		||||
		SPSR: 0x38, // SPI Status Register
 | 
			
		||||
		SPDR: 0x56, // SPI Data Register
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	// Watchdog Timer
 | 
			
		||||
	WDT = struct {
 | 
			
		||||
		WDTCSR __reg
 | 
			
		||||
	}{
 | 
			
		||||
		WDTCSR: 0x82, // Watchdog Timer Control Register
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	// External Interrupts
 | 
			
		||||
	EXINT = struct {
 | 
			
		||||
		EICRA __reg
 | 
			
		||||
		EIMSK __reg
 | 
			
		||||
		EIFR  __reg
 | 
			
		||||
	}{
 | 
			
		||||
		EICRA: 0x89, // External Interrupt Control Register A
 | 
			
		||||
		EIMSK: 0x41, // External Interrupt Mask Register
 | 
			
		||||
		EIFR:  0x40, // External Interrupt Flag Register
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	// Analog-to-Digital Converter
 | 
			
		||||
	ADC = struct {
 | 
			
		||||
		ADMUX   __reg
 | 
			
		||||
		ADCSRA  __reg
 | 
			
		||||
		ADCL    __reg
 | 
			
		||||
		ADCH    __reg
 | 
			
		||||
		ADCSRB  __reg
 | 
			
		||||
		DIDR0   __reg
 | 
			
		||||
		DIDR1   __reg
 | 
			
		||||
		AMP0CSR __reg
 | 
			
		||||
	}{
 | 
			
		||||
		ADMUX:   0x28, // The ADC multiplexer Selection Register
 | 
			
		||||
		ADCSRA:  0x26, // The ADC Control and Status register
 | 
			
		||||
		ADCL:    0x4c, // ADC Data Register Bytes
 | 
			
		||||
		ADCH:    0x4c, // ADC Data Register Bytes
 | 
			
		||||
		ADCSRB:  0x27, // ADC Control and Status Register B
 | 
			
		||||
		DIDR0:   0x77, // Digital Input Disable Register 0
 | 
			
		||||
		DIDR1:   0x78, // Digital Input Disable Register 1
 | 
			
		||||
		AMP0CSR: 0x79,
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	// Analog Comparator
 | 
			
		||||
	AC = struct {
 | 
			
		||||
		AC3CON  __reg
 | 
			
		||||
		AC1CON  __reg
 | 
			
		||||
		AC2CON  __reg
 | 
			
		||||
		ACSR    __reg
 | 
			
		||||
		AC3ECON __reg
 | 
			
		||||
		AC2ECON __reg
 | 
			
		||||
		AC1ECON __reg
 | 
			
		||||
	}{
 | 
			
		||||
		AC3CON:  0x7f, // Analog Comparator3 Control Register
 | 
			
		||||
		AC1CON:  0x7d, // Analog Comparator 1 Control Register
 | 
			
		||||
		AC2CON:  0x7e, // Analog Comparator 2 Control Register
 | 
			
		||||
		ACSR:    0x20, // Analog Comparator Status Register
 | 
			
		||||
		AC3ECON: 0x7c,
 | 
			
		||||
		AC2ECON: 0x7b,
 | 
			
		||||
		AC1ECON: 0x7a,
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	// CPU Registers
 | 
			
		||||
	CPU = struct {
 | 
			
		||||
		SREG    __reg
 | 
			
		||||
		SPL     __reg
 | 
			
		||||
		SPH     __reg
 | 
			
		||||
		MCUCR   __reg
 | 
			
		||||
		MCUSR   __reg
 | 
			
		||||
		OSCCAL  __reg
 | 
			
		||||
		CLKPR   __reg
 | 
			
		||||
		SMCR    __reg
 | 
			
		||||
		GPIOR2  __reg
 | 
			
		||||
		GPIOR1  __reg
 | 
			
		||||
		GPIOR0  __reg
 | 
			
		||||
		PLLCSR  __reg
 | 
			
		||||
		PRR     __reg
 | 
			
		||||
		CLKCSR  __reg
 | 
			
		||||
		CLKSELR __reg
 | 
			
		||||
		BGCCR   __reg
 | 
			
		||||
		BGCRR   __reg
 | 
			
		||||
	}{
 | 
			
		||||
		SREG:    0x5f, // Status Register
 | 
			
		||||
		SPL:     0x5d, // Stack Pointer
 | 
			
		||||
		SPH:     0x5d, // Stack Pointer
 | 
			
		||||
		MCUCR:   0x55, // MCU Control Register
 | 
			
		||||
		MCUSR:   0x54, // MCU Status Register
 | 
			
		||||
		OSCCAL:  0x88, // Oscillator Calibration Value
 | 
			
		||||
		CLKPR:   0x83,
 | 
			
		||||
		SMCR:    0x53, // Sleep Mode Control Register
 | 
			
		||||
		GPIOR2:  0x3b, // General Purpose IO Register 2
 | 
			
		||||
		GPIOR1:  0x3a, // General Purpose IO Register 1
 | 
			
		||||
		GPIOR0:  0x39, // General Purpose IO Register 0
 | 
			
		||||
		PLLCSR:  0x87, // PLL Control And Status Register
 | 
			
		||||
		PRR:     0x86, // Power Reduction Register
 | 
			
		||||
		CLKCSR:  0x84,
 | 
			
		||||
		CLKSELR: 0x85,
 | 
			
		||||
		BGCCR:   0x81, // BandGap Current Calibration Register
 | 
			
		||||
		BGCRR:   0x80, // BandGap Resistor Calibration Register
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	// EEPROM
 | 
			
		||||
	EEPROM = struct {
 | 
			
		||||
		EEARL __reg
 | 
			
		||||
		EEARH __reg
 | 
			
		||||
		EEDR  __reg
 | 
			
		||||
		EECR  __reg
 | 
			
		||||
	}{
 | 
			
		||||
		EEARL: 0x3e, // EEPROM Read/Write Access Bytes
 | 
			
		||||
		EEARH: 0x3e, // EEPROM Read/Write Access Bytes
 | 
			
		||||
		EEDR:  0x3d, // EEPROM Data Register
 | 
			
		||||
		EECR:  0x3c, // EEPROM Control Register
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	// Power Stage Controller
 | 
			
		||||
	PSC = struct {
 | 
			
		||||
		PICR0L  __reg
 | 
			
		||||
		PICR0H  __reg
 | 
			
		||||
		PFRC0B  __reg
 | 
			
		||||
		PFRC0A  __reg
 | 
			
		||||
		PCTL0   __reg
 | 
			
		||||
		PCNF0   __reg
 | 
			
		||||
		OCR0RBL __reg
 | 
			
		||||
		OCR0RBH __reg
 | 
			
		||||
		OCR0SBL __reg
 | 
			
		||||
		OCR0SBH __reg
 | 
			
		||||
		OCR0RAL __reg
 | 
			
		||||
		OCR0RAH __reg
 | 
			
		||||
		OCR0SAL __reg
 | 
			
		||||
		OCR0SAH __reg
 | 
			
		||||
		PSOC0   __reg
 | 
			
		||||
		PIM0    __reg
 | 
			
		||||
		PIFR0   __reg
 | 
			
		||||
		PICR2L  __reg
 | 
			
		||||
		PICR2H  __reg
 | 
			
		||||
		PFRC2B  __reg
 | 
			
		||||
		PFRC2A  __reg
 | 
			
		||||
		PCTL2   __reg
 | 
			
		||||
		PCNF2   __reg
 | 
			
		||||
		PCNFE2  __reg
 | 
			
		||||
		OCR2RBL __reg
 | 
			
		||||
		OCR2RBH __reg
 | 
			
		||||
		OCR2SBL __reg
 | 
			
		||||
		OCR2SBH __reg
 | 
			
		||||
		OCR2RAL __reg
 | 
			
		||||
		OCR2RAH __reg
 | 
			
		||||
		OCR2SAL __reg
 | 
			
		||||
		OCR2SAH __reg
 | 
			
		||||
		POM2    __reg
 | 
			
		||||
		PSOC2   __reg
 | 
			
		||||
		PIM2    __reg
 | 
			
		||||
		PIFR2   __reg
 | 
			
		||||
		PASDLY2 __reg
 | 
			
		||||
	}{
 | 
			
		||||
		PICR0L:  0x68, // PSC 0 Input Capture Register
 | 
			
		||||
		PICR0H:  0x68, // PSC 0 Input Capture Register
 | 
			
		||||
		PFRC0B:  0x63, // PSC 0 Input B Control
 | 
			
		||||
		PFRC0A:  0x62, // PSC 0 Input A Control
 | 
			
		||||
		PCTL0:   0x32, // PSC 0 Control Register
 | 
			
		||||
		PCNF0:   0x31, // PSC 0 Configuration Register
 | 
			
		||||
		OCR0RBL: 0x44, // Output Compare RB Register
 | 
			
		||||
		OCR0RBH: 0x44, // Output Compare RB Register
 | 
			
		||||
		OCR0SBL: 0x42, // Output Compare SB Register
 | 
			
		||||
		OCR0SBH: 0x42, // Output Compare SB Register
 | 
			
		||||
		OCR0RAL: 0x4a, // Output Compare RA Register
 | 
			
		||||
		OCR0RAH: 0x4a, // Output Compare RA Register
 | 
			
		||||
		OCR0SAL: 0x60, // Output Compare SA Register
 | 
			
		||||
		OCR0SAH: 0x60, // Output Compare SA Register
 | 
			
		||||
		PSOC0:   0x6a, // PSC0 Synchro and Output Configuration
 | 
			
		||||
		PIM0:    0x2f, // PSC0 Interrupt Mask Register
 | 
			
		||||
		PIFR0:   0x30, // PSC0 Interrupt Flag Register
 | 
			
		||||
		PICR2L:  0x6c, // PSC 2 Input Capture Register
 | 
			
		||||
		PICR2H:  0x6c, // PSC 2 Input Capture Register
 | 
			
		||||
		PFRC2B:  0x67, // PSC 2 Input B Control
 | 
			
		||||
		PFRC2A:  0x66, // PSC 2 Input B Control
 | 
			
		||||
		PCTL2:   0x36, // PSC 2 Control Register
 | 
			
		||||
		PCNF2:   0x35, // PSC 2 Configuration Register
 | 
			
		||||
		PCNFE2:  0x70, // PSC 2 Enhanced Configuration Register
 | 
			
		||||
		OCR2RBL: 0x48, // Output Compare RB Register
 | 
			
		||||
		OCR2RBH: 0x48, // Output Compare RB Register
 | 
			
		||||
		OCR2SBL: 0x46, // Output Compare SB Register
 | 
			
		||||
		OCR2SBH: 0x46, // Output Compare SB Register
 | 
			
		||||
		OCR2RAL: 0x4e, // Output Compare RA Register
 | 
			
		||||
		OCR2RAH: 0x4e, // Output Compare RA Register
 | 
			
		||||
		OCR2SAL: 0x64, // Output Compare SA Register
 | 
			
		||||
		OCR2SAH: 0x64, // Output Compare SA Register
 | 
			
		||||
		POM2:    0x6f, // PSC 2 Output Matrix
 | 
			
		||||
		PSOC2:   0x6e, // PSC2 Synchro and Output Configuration
 | 
			
		||||
		PIM2:    0x33, // PSC2 Interrupt Mask Register
 | 
			
		||||
		PIFR2:   0x34, // PSC2 Interrupt Flag Register
 | 
			
		||||
		PASDLY2: 0x71, // Analog Synchronization Delay Register
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	// Timer/Counter, 16-bit
 | 
			
		||||
	TC16 = struct {
 | 
			
		||||
		TIMSK1 __reg
 | 
			
		||||
		TIFR1  __reg
 | 
			
		||||
		TCCR1B __reg
 | 
			
		||||
		TCNT1L __reg
 | 
			
		||||
		TCNT1H __reg
 | 
			
		||||
		ICR1L  __reg
 | 
			
		||||
		ICR1H  __reg
 | 
			
		||||
	}{
 | 
			
		||||
		TIMSK1: 0x21, // Timer/Counter Interrupt Mask Register
 | 
			
		||||
		TIFR1:  0x22, // Timer/Counter Interrupt Flag register
 | 
			
		||||
		TCCR1B: 0x8a, // Timer/Counter1 Control Register B
 | 
			
		||||
		TCNT1L: 0x5a, // Timer/Counter1 Bytes
 | 
			
		||||
		TCNT1H: 0x5a, // Timer/Counter1 Bytes
 | 
			
		||||
		ICR1L:  0x8c, // Timer/Counter1 Input Capture Register Bytes
 | 
			
		||||
		ICR1H:  0x8c, // Timer/Counter1 Input Capture Register Bytes
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	// Bootloader
 | 
			
		||||
	BOOT_LOAD = struct {
 | 
			
		||||
		SPMCSR __reg
 | 
			
		||||
	}{
 | 
			
		||||
		SPMCSR: 0x57, // Store Program Memory Control Register
 | 
			
		||||
	}
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
// Bitfields for FUSE: Fuses
 | 
			
		||||
const (
 | 
			
		||||
	// EXTENDED
 | 
			
		||||
	EXTENDED_PSC2RB   = 0x80 // PSC2 Reset Behavior
 | 
			
		||||
	EXTENDED_PSC2RBA  = 0x40 // PSC2 Reset Behavior for 22 and 23
 | 
			
		||||
	EXTENDED_PSC0RB   = 0x20 // PSC0 Reset Behavior
 | 
			
		||||
	EXTENDED_PSCRV    = 0x10 // PSC Reset Value
 | 
			
		||||
	EXTENDED_PSCINRB  = 0x8  // PSC2 and PSC0 input Reset Behavior
 | 
			
		||||
	EXTENDED_BODLEVEL = 0x7  // Brown-out Detector Trigger Level
 | 
			
		||||
 | 
			
		||||
	// HIGH
 | 
			
		||||
	HIGH_RSTDISBL = 0x80 // Reset Disabled (Enable PE0 as I/O pin)
 | 
			
		||||
	HIGH_DWEN     = 0x40 // Debug Wire enable
 | 
			
		||||
	HIGH_SPIEN    = 0x20 // Serial program downloading (SPI) enabled
 | 
			
		||||
	HIGH_WDTON    = 0x10 // Watch-dog Timer always on
 | 
			
		||||
	HIGH_EESAVE   = 0x8  // Preserve EEPROM through the Chip Erase cycle
 | 
			
		||||
	HIGH_BOOTSZ   = 0x6  // Select Boot Size
 | 
			
		||||
	HIGH_BOOTRST  = 0x1  // Select Reset Vector
 | 
			
		||||
 | 
			
		||||
	// LOW
 | 
			
		||||
	LOW_CKDIV8    = 0x80 // Divide clock by 8 internally
 | 
			
		||||
	LOW_CKOUT     = 0x40 // Clock output on PORTD1
 | 
			
		||||
	LOW_SUT_CKSEL = 0x3f // Select Clock Source
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
// Bitfields for LOCKBIT: Lockbits
 | 
			
		||||
const (
 | 
			
		||||
	// LOCKBIT
 | 
			
		||||
	LOCKBIT_LB   = 0x3  // Memory Lock
 | 
			
		||||
	LOCKBIT_BLB0 = 0xc  // Boot Loader Protection Mode
 | 
			
		||||
	LOCKBIT_BLB1 = 0x30 // Boot Loader Protection Mode
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
// Bitfields for DAC: Digital-to-Analog Converter
 | 
			
		||||
const (
 | 
			
		||||
	// DACL: DAC Data Register
 | 
			
		||||
 | 
			
		||||
	// DACH: DAC Data Register
 | 
			
		||||
	DAC_DACH = 0x3ff // DAC Data Register Bits
 | 
			
		||||
 | 
			
		||||
	// DACON: DAC Control Register
 | 
			
		||||
	DACON_DAATE = 0x80 // DAC Auto Trigger Enable Bit
 | 
			
		||||
	DACON_DATS  = 0x70 // DAC Trigger Selection Bits
 | 
			
		||||
	DACON_DALA  = 0x4  // DAC Left Adjust
 | 
			
		||||
	DACON_DAEN  = 0x1  // DAC Enable Bit
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
// Bitfields for SPI: Serial Peripheral Interface
 | 
			
		||||
const (
 | 
			
		||||
	// SPCR: SPI Control Register
 | 
			
		||||
	SPCR_SPIE = 0x80 // SPI Interrupt Enable
 | 
			
		||||
	SPCR_SPE  = 0x40 // SPI Enable
 | 
			
		||||
	SPCR_DORD = 0x20 // Data Order
 | 
			
		||||
	SPCR_MSTR = 0x10 // Master/Slave Select
 | 
			
		||||
	SPCR_CPOL = 0x8  // Clock polarity
 | 
			
		||||
	SPCR_CPHA = 0x4  // Clock Phase
 | 
			
		||||
	SPCR_SPR  = 0x3  // SPI Clock Rate Selects
 | 
			
		||||
 | 
			
		||||
	// SPSR: SPI Status Register
 | 
			
		||||
	SPSR_SPIF  = 0x80 // SPI Interrupt Flag
 | 
			
		||||
	SPSR_WCOL  = 0x40 // Write Collision Flag
 | 
			
		||||
	SPSR_SPI2X = 0x1  // Double SPI Speed Bit
 | 
			
		||||
 | 
			
		||||
	// SPDR: SPI Data Register
 | 
			
		||||
	SPDR_SPD = 0xff // SPI Data bits
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
// Bitfields for WDT: Watchdog Timer
 | 
			
		||||
const (
 | 
			
		||||
	// WDTCSR: Watchdog Timer Control Register
 | 
			
		||||
	WDTCSR_WDIF = 0x80 // Watchdog Timeout Interrupt Flag
 | 
			
		||||
	WDTCSR_WDIE = 0x40 // Watchdog Timeout Interrupt Enable
 | 
			
		||||
	WDTCSR_WDP  = 0x27 // Watchdog Timer Prescaler Bits
 | 
			
		||||
	WDTCSR_WDCE = 0x10 // Watchdog Change Enable
 | 
			
		||||
	WDTCSR_WDE  = 0x8  // Watch Dog Enable
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
// Bitfields for EXINT: External Interrupts
 | 
			
		||||
const (
 | 
			
		||||
	// EICRA: External Interrupt Control Register A
 | 
			
		||||
	EICRA_ISC2 = 0x30 // External Interrupt Sense Control Bit
 | 
			
		||||
	EICRA_ISC1 = 0xc  // External Interrupt Sense Control Bit
 | 
			
		||||
	EICRA_ISC0 = 0x3  // External Interrupt Sense Control Bit
 | 
			
		||||
 | 
			
		||||
	// EIMSK: External Interrupt Mask Register
 | 
			
		||||
	EIMSK_INT = 0x7 // External Interrupt Request 2 Enable
 | 
			
		||||
 | 
			
		||||
	// EIFR: External Interrupt Flag Register
 | 
			
		||||
	EIFR_INTF = 0x7 // External Interrupt Flags
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
// Bitfields for ADC: Analog-to-Digital Converter
 | 
			
		||||
const (
 | 
			
		||||
	// ADMUX: The ADC multiplexer Selection Register
 | 
			
		||||
	ADMUX_REFS  = 0xc0 // Reference Selection Bits
 | 
			
		||||
	ADMUX_ADLAR = 0x20 // Left Adjust Result
 | 
			
		||||
	ADMUX_MUX   = 0xf  // Analog Channel and Gain Selection Bits
 | 
			
		||||
 | 
			
		||||
	// ADCSRA: The ADC Control and Status register
 | 
			
		||||
	ADCSRA_ADEN  = 0x80 // ADC Enable
 | 
			
		||||
	ADCSRA_ADSC  = 0x40 // ADC Start Conversion
 | 
			
		||||
	ADCSRA_ADATE = 0x20 // ADC Auto Trigger Enable
 | 
			
		||||
	ADCSRA_ADIF  = 0x10 // ADC Interrupt Flag
 | 
			
		||||
	ADCSRA_ADIE  = 0x8  // ADC Interrupt Enable
 | 
			
		||||
	ADCSRA_ADPS  = 0x7  // ADC Prescaler Select Bits
 | 
			
		||||
 | 
			
		||||
	// ADCL: ADC Data Register Bytes
 | 
			
		||||
 | 
			
		||||
	// ADCH: ADC Data Register Bytes
 | 
			
		||||
	ADC_ADC = 0xffff // ADC Data Register
 | 
			
		||||
 | 
			
		||||
	// ADCSRB: ADC Control and Status Register B
 | 
			
		||||
	ADCSRB_ADHSM   = 0x80 // ADC High Speed Mode
 | 
			
		||||
	ADCSRB_ADNCDIS = 0x40 // ADC Noise Canceller Disable
 | 
			
		||||
	ADCSRB_ADSSEN  = 0x10 // ADC Single Shot Enable on PSC's Synchronisation Signals
 | 
			
		||||
	ADCSRB_ADTS    = 0xf  // ADC Auto Trigger Sources
 | 
			
		||||
 | 
			
		||||
	// DIDR0: Digital Input Disable Register 0
 | 
			
		||||
	DIDR0_ADC8D = 0x80 // ADC8 Digital input Disable
 | 
			
		||||
	DIDR0_ADC7D = 0x40 // ADC7 Digital input Disable
 | 
			
		||||
	DIDR0_ADC5D = 0x20 // ADC5 Digital input Disable
 | 
			
		||||
	DIDR0_ADC4D = 0x10 // ADC4 Digital input Disable
 | 
			
		||||
	DIDR0_ADC3D = 0x8  // ADC3 Digital input Disable
 | 
			
		||||
	DIDR0_ADC2D = 0x4  // ADC2 Digital input Disable
 | 
			
		||||
	DIDR0_ADC1D = 0x2  // ADC1 Digital input Disable
 | 
			
		||||
	DIDR0_ADC0D = 0x1  // ADC0 Digital input Disable
 | 
			
		||||
 | 
			
		||||
	// DIDR1: Digital Input Disable Register 1
 | 
			
		||||
	DIDR1_ACMP1MD = 0x8
 | 
			
		||||
	DIDR1_AMP0PD  = 0x4
 | 
			
		||||
	DIDR1_ADC10D  = 0x2 // ADC10 Digital input Disable
 | 
			
		||||
	DIDR1_ADC9D   = 0x1 // ADC9 Digital input Disable
 | 
			
		||||
 | 
			
		||||
	// AMP0CSR
 | 
			
		||||
	AMP0CSR_AMP0EN = 0x80
 | 
			
		||||
	AMP0CSR_AMP0IS = 0x40
 | 
			
		||||
	AMP0CSR_AMP0G  = 0x30
 | 
			
		||||
	AMP0CSR_AMP0GS = 0x8
 | 
			
		||||
	AMP0CSR_AMP0TS = 0x3
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
// Bitfields for AC: Analog Comparator
 | 
			
		||||
const (
 | 
			
		||||
	// AC3CON: Analog Comparator3 Control Register
 | 
			
		||||
	AC3CON_AC3EN  = 0x80 // Analog Comparator3 Enable Bit
 | 
			
		||||
	AC3CON_AC3IE  = 0x40 // Analog Comparator 3 Interrupt Enable Bit
 | 
			
		||||
	AC3CON_AC3IS  = 0x30 // Analog Comparator 3  Interrupt Select Bit
 | 
			
		||||
	AC3CON_AC3OEA = 0x8  // Analog Comparator 3 Alternate Output Enable
 | 
			
		||||
	AC3CON_AC3M   = 0x7  // Analog Comparator 3 Multiplexer Register
 | 
			
		||||
 | 
			
		||||
	// AC1CON: Analog Comparator 1 Control Register
 | 
			
		||||
	AC1CON_AC1EN = 0x80 // Analog Comparator 1 Enable Bit
 | 
			
		||||
	AC1CON_AC1IE = 0x40 // Analog Comparator 1 Interrupt Enable Bit
 | 
			
		||||
	AC1CON_AC1IS = 0x30 // Analog Comparator 1  Interrupt Select Bit
 | 
			
		||||
	AC1CON_AC1M  = 0x7  // Analog Comparator 1 Multiplexer Register
 | 
			
		||||
 | 
			
		||||
	// AC2CON: Analog Comparator 2 Control Register
 | 
			
		||||
	AC2CON_AC2EN = 0x80 // Analog Comparator 2 Enable Bit
 | 
			
		||||
	AC2CON_AC2IE = 0x40 // Analog Comparator 2 Interrupt Enable Bit
 | 
			
		||||
	AC2CON_AC2IS = 0x30 // Analog Comparator 2  Interrupt Select Bit
 | 
			
		||||
	AC2CON_AC2M  = 0x7  // Analog Comparator 2 Multiplexer Register
 | 
			
		||||
 | 
			
		||||
	// ACSR: Analog Comparator Status Register
 | 
			
		||||
	ACSR_AC3IF = 0x80 // Analog Comparator 3 Interrupt Flag Bit
 | 
			
		||||
	ACSR_AC2IF = 0x40 // Analog Comparator 2 Interrupt Flag Bit
 | 
			
		||||
	ACSR_AC1IF = 0x20 // Analog Comparator 1  Interrupt Flag Bit
 | 
			
		||||
	ACSR_AC3O  = 0x8  // Analog Comparator 3 Output Bit
 | 
			
		||||
	ACSR_AC2O  = 0x4  // Analog Comparator 2 Output Bit
 | 
			
		||||
	ACSR_AC1O  = 0x2  // Analog Comparator 1 Output Bit
 | 
			
		||||
 | 
			
		||||
	// AC3ECON
 | 
			
		||||
	AC3ECON_AC3OI = 0x20 // Analog Comparator Ouput Invert
 | 
			
		||||
	AC3ECON_AC3OE = 0x10 // Analog Comparator Ouput Enable
 | 
			
		||||
	AC3ECON_AC3H  = 0x7  // Analog Comparator Hysteresis Select
 | 
			
		||||
 | 
			
		||||
	// AC2ECON
 | 
			
		||||
	AC2ECON_AC2OI = 0x20 // Analog Comparator Ouput Invert
 | 
			
		||||
	AC2ECON_AC2OE = 0x10 // Analog Comparator Ouput Enable
 | 
			
		||||
	AC2ECON_AC2H  = 0x7  // Analog Comparator Hysteresis Select
 | 
			
		||||
 | 
			
		||||
	// AC1ECON
 | 
			
		||||
	AC1ECON_AC1OI  = 0x20 // Analog Comparator Ouput Invert
 | 
			
		||||
	AC1ECON_AC1OE  = 0x10 // Analog Comparator Ouput Enable
 | 
			
		||||
	AC1ECON_AC1ICE = 0x8  // Analog Comparator Interrupt Capture Enable
 | 
			
		||||
	AC1ECON_AC1H   = 0x7  // Analog Comparator Hysteresis Select
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
// Bitfields for CPU: CPU Registers
 | 
			
		||||
const (
 | 
			
		||||
	// SREG: Status Register
 | 
			
		||||
	SREG_I = 0x80 // Global Interrupt Enable
 | 
			
		||||
	SREG_T = 0x40 // Bit Copy Storage
 | 
			
		||||
	SREG_H = 0x20 // Half Carry Flag
 | 
			
		||||
	SREG_S = 0x10 // Sign Bit
 | 
			
		||||
	SREG_V = 0x8  // Two's Complement Overflow Flag
 | 
			
		||||
	SREG_N = 0x4  // Negative Flag
 | 
			
		||||
	SREG_Z = 0x2  // Zero Flag
 | 
			
		||||
	SREG_C = 0x1  // Carry Flag
 | 
			
		||||
 | 
			
		||||
	// MCUCR: MCU Control Register
 | 
			
		||||
	MCUCR_PUD    = 0x10 // Pull-up disable
 | 
			
		||||
	MCUCR_RSTDIS = 0x8  // Reset Pin Disable
 | 
			
		||||
	MCUCR_CKRC81 = 0x4  // Frequency Selection of the Calibrated RC Oscillator
 | 
			
		||||
	MCUCR_IVSEL  = 0x2  // Interrupt Vector Select
 | 
			
		||||
	MCUCR_IVCE   = 0x1  // Interrupt Vector Change Enable
 | 
			
		||||
 | 
			
		||||
	// MCUSR: MCU Status Register
 | 
			
		||||
	MCUSR_WDRF  = 0x8 // Watchdog Reset Flag
 | 
			
		||||
	MCUSR_BORF  = 0x4 // Brown-out Reset Flag
 | 
			
		||||
	MCUSR_EXTRF = 0x2 // External Reset Flag
 | 
			
		||||
	MCUSR_PORF  = 0x1 // Power-on reset flag
 | 
			
		||||
 | 
			
		||||
	// OSCCAL: Oscillator Calibration Value
 | 
			
		||||
	OSCCAL_OSCCAL = 0xff // Oscillator Calibration
 | 
			
		||||
 | 
			
		||||
	// CLKPR
 | 
			
		||||
	CLKPR_CLKPCE = 0x80
 | 
			
		||||
	CLKPR_CLKPS  = 0xf
 | 
			
		||||
 | 
			
		||||
	// SMCR: Sleep Mode Control Register
 | 
			
		||||
	SMCR_SM = 0xe // Sleep Mode Select bits
 | 
			
		||||
	SMCR_SE = 0x1 // Sleep Enable
 | 
			
		||||
 | 
			
		||||
	// GPIOR2: General Purpose IO Register 2
 | 
			
		||||
	GPIOR2_GPIOR = 0xff // General Purpose IO Register 2 bis
 | 
			
		||||
 | 
			
		||||
	// GPIOR1: General Purpose IO Register 1
 | 
			
		||||
	GPIOR1_GPIOR = 0xff // General Purpose IO Register 1 bis
 | 
			
		||||
 | 
			
		||||
	// GPIOR0: General Purpose IO Register 0
 | 
			
		||||
	GPIOR0_GPIOR07 = 0x80 // General Purpose IO Register 0 bit 7
 | 
			
		||||
	GPIOR0_GPIOR06 = 0x40 // General Purpose IO Register 0 bit 6
 | 
			
		||||
	GPIOR0_GPIOR05 = 0x20 // General Purpose IO Register 0 bit 5
 | 
			
		||||
	GPIOR0_GPIOR04 = 0x10 // General Purpose IO Register 0 bit 4
 | 
			
		||||
	GPIOR0_GPIOR03 = 0x8  // General Purpose IO Register 0 bit 3
 | 
			
		||||
	GPIOR0_GPIOR02 = 0x4  // General Purpose IO Register 0 bit 2
 | 
			
		||||
	GPIOR0_GPIOR01 = 0x2  // General Purpose IO Register 0 bit 1
 | 
			
		||||
	GPIOR0_GPIOR00 = 0x1  // General Purpose IO Register 0 bit 0
 | 
			
		||||
 | 
			
		||||
	// PLLCSR: PLL Control And Status Register
 | 
			
		||||
	PLLCSR_PLLF  = 0x3c
 | 
			
		||||
	PLLCSR_PLLE  = 0x2 // PLL Enable
 | 
			
		||||
	PLLCSR_PLOCK = 0x1 // PLL Lock Detector
 | 
			
		||||
 | 
			
		||||
	// PRR: Power Reduction Register
 | 
			
		||||
	PRR_PRPSC2 = 0x80 // Power Reduction PSC2
 | 
			
		||||
	PRR_PRPSCR = 0x20 // Power Reduction PSC0
 | 
			
		||||
	PRR_PRTIM1 = 0x10 // Power Reduction Timer/Counter1
 | 
			
		||||
	PRR_PRSPI  = 0x4  // Power Reduction Serial Peripheral Interface
 | 
			
		||||
	PRR_PRADC  = 0x1  // Power Reduction ADC
 | 
			
		||||
 | 
			
		||||
	// CLKCSR
 | 
			
		||||
	CLKCSR_CLKCCE = 0x80 // Clock Control Change Enable
 | 
			
		||||
	CLKCSR_CLKRDY = 0x10 // Clock Ready Flag
 | 
			
		||||
	CLKCSR_CLKC   = 0xf  // Clock Control
 | 
			
		||||
 | 
			
		||||
	// CLKSELR
 | 
			
		||||
	CLKSELR_COUT  = 0x40 // Clock OUT
 | 
			
		||||
	CLKSELR_CSUT  = 0x30 // Clock Start up Time
 | 
			
		||||
	CLKSELR_CKSEL = 0xf  // Clock Source Select
 | 
			
		||||
 | 
			
		||||
	// BGCCR: BandGap Current Calibration Register
 | 
			
		||||
	BGCCR_BGCC = 0xf
 | 
			
		||||
 | 
			
		||||
	// BGCRR: BandGap Resistor Calibration Register
 | 
			
		||||
	BGCRR_BGCR = 0xf
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
// Bitfields for EEPROM: EEPROM
 | 
			
		||||
const (
 | 
			
		||||
	// EEARL: EEPROM Read/Write Access Bytes
 | 
			
		||||
 | 
			
		||||
	// EEARH: EEPROM Read/Write Access Bytes
 | 
			
		||||
	EEAR_EEAR = 0x1ff // EEPROM Address bytes
 | 
			
		||||
 | 
			
		||||
	// EEDR: EEPROM Data Register
 | 
			
		||||
	EEDR_EEDR = 0xff // EEPROM Data bits
 | 
			
		||||
 | 
			
		||||
	// EECR: EEPROM Control Register
 | 
			
		||||
	EECR_NVMBSY = 0x80 // None Volatile Busy Memory Busy
 | 
			
		||||
	EECR_EEPAGE = 0x40 // EEPROM Page Access
 | 
			
		||||
	EECR_EEPM   = 0x30 // EEPROM Programming Mode
 | 
			
		||||
	EECR_EERIE  = 0x8  // EEPROM Ready Interrupt Enable
 | 
			
		||||
	EECR_EEMWE  = 0x4  // EEPROM Master Write Enable
 | 
			
		||||
	EECR_EEWE   = 0x2  // EEPROM Write Enable
 | 
			
		||||
	EECR_EERE   = 0x1  // EEPROM Read Enable
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
// Bitfields for PSC: Power Stage Controller
 | 
			
		||||
const (
 | 
			
		||||
	// PICR0L: PSC 0 Input Capture Register
 | 
			
		||||
 | 
			
		||||
	// PICR0H: PSC 0 Input Capture Register
 | 
			
		||||
	PICR0_PCST0 = 0x8000 // PSC 0 Capture Software Trigger Bit
 | 
			
		||||
	PICR0_PICR0 = 0xfff  // PSC 0 Input Capture Bytes
 | 
			
		||||
 | 
			
		||||
	// PFRC0B: PSC 0 Input B Control
 | 
			
		||||
	PFRC0B_PCAE0B  = 0x80 // PSC 0 Capture Enable Input Part B
 | 
			
		||||
	PFRC0B_PISEL0B = 0x40 // PSC 0 Input Select for Part B
 | 
			
		||||
	PFRC0B_PELEV0B = 0x20 // PSC 0 Edge Level Selector on Input Part B
 | 
			
		||||
	PFRC0B_PFLTE0B = 0x10 // PSC 0 Filter Enable on Input Part B
 | 
			
		||||
	PFRC0B_PRFM0B  = 0xf  // PSC 0 Retrigger and Fault Mode for Part B
 | 
			
		||||
 | 
			
		||||
	// PFRC0A: PSC 0 Input A Control
 | 
			
		||||
	PFRC0A_PCAE0A  = 0x80 // PSC 0 Capture Enable Input Part A
 | 
			
		||||
	PFRC0A_PISEL0A = 0x40 // PSC 0 Input Select for Part A
 | 
			
		||||
	PFRC0A_PELEV0A = 0x20 // PSC 0 Edge Level Selector on Input Part A
 | 
			
		||||
	PFRC0A_PFLTE0A = 0x10 // PSC 0 Filter Enable on Input Part A
 | 
			
		||||
	PFRC0A_PRFM0A  = 0xf  // PSC 0 Retrigger and Fault Mode for Part A
 | 
			
		||||
 | 
			
		||||
	// PCTL0: PSC 0 Control Register
 | 
			
		||||
	PCTL0_PPRE0  = 0xc0 // PSC 0 Prescaler Selects
 | 
			
		||||
	PCTL0_PBFM0  = 0x24 // PSC 0 Balance Flank Width Modulation
 | 
			
		||||
	PCTL0_PAOC0B = 0x10 // PSC 0 Asynchronous Output Control B
 | 
			
		||||
	PCTL0_PAOC0A = 0x8  // PSC 0 Asynchronous Output Control A
 | 
			
		||||
	PCTL0_PCCYC0 = 0x2  // PSC0 Complete Cycle
 | 
			
		||||
	PCTL0_PRUN0  = 0x1  // PSC 0 Run
 | 
			
		||||
 | 
			
		||||
	// PCNF0: PSC 0 Configuration Register
 | 
			
		||||
	PCNF0_PFIFTY0  = 0x80 // PSC 0 Fifty
 | 
			
		||||
	PCNF0_PALOCK0  = 0x40 // PSC 0 Autolock
 | 
			
		||||
	PCNF0_PLOCK0   = 0x20 // PSC 0 Lock
 | 
			
		||||
	PCNF0_PMODE0   = 0x18 // PSC 0 Mode
 | 
			
		||||
	PCNF0_POP0     = 0x4  // PSC 0 Output Polarity
 | 
			
		||||
	PCNF0_PCLKSEL0 = 0x2  // PSC 0 Input Clock Select
 | 
			
		||||
 | 
			
		||||
	// OCR0RBL: Output Compare RB Register
 | 
			
		||||
 | 
			
		||||
	// OCR0RBH: Output Compare RB Register
 | 
			
		||||
	OCR0RB_OCR0RB = 0xffff // Output Compare 0 RB
 | 
			
		||||
 | 
			
		||||
	// OCR0SBL: Output Compare SB Register
 | 
			
		||||
 | 
			
		||||
	// OCR0SBH: Output Compare SB Register
 | 
			
		||||
	OCR0SB_OCR0SB = 0xfff // Output Compare 0 SB
 | 
			
		||||
 | 
			
		||||
	// OCR0RAL: Output Compare RA Register
 | 
			
		||||
 | 
			
		||||
	// OCR0RAH: Output Compare RA Register
 | 
			
		||||
	OCR0RA_OCR0RA = 0xfff // Output Compare 0 RA
 | 
			
		||||
 | 
			
		||||
	// OCR0SAL: Output Compare SA Register
 | 
			
		||||
 | 
			
		||||
	// OCR0SAH: Output Compare SA Register
 | 
			
		||||
	OCR0SA_OCR0SA = 0xfff // Output Compare 0 SA
 | 
			
		||||
 | 
			
		||||
	// PSOC0: PSC0 Synchro and Output Configuration
 | 
			
		||||
	PSOC0_PISEL0A1 = 0x80 // PSC Input Select
 | 
			
		||||
	PSOC0_PISEL0B1 = 0x40 // PSC Input Select
 | 
			
		||||
	PSOC0_PSYNC0   = 0x30 // Synchronisation out for ADC selection
 | 
			
		||||
	PSOC0_POEN0B   = 0x4  // PSCOUT01 Output Enable
 | 
			
		||||
	PSOC0_POEN0A   = 0x1  // PSCOUT00 Output Enable
 | 
			
		||||
 | 
			
		||||
	// PIM0: PSC0 Interrupt Mask Register
 | 
			
		||||
	PIM0_PEVE0B  = 0x10 // External Event B Interrupt Enable
 | 
			
		||||
	PIM0_PEVE0A  = 0x8  // External Event A Interrupt Enable
 | 
			
		||||
	PIM0_PEOEPE0 = 0x2  // End of Enhanced Cycle Enable
 | 
			
		||||
	PIM0_PEOPE0  = 0x1  // End of Cycle Interrupt Enable
 | 
			
		||||
 | 
			
		||||
	// PIFR0: PSC0 Interrupt Flag Register
 | 
			
		||||
	PIFR0_POAC0B = 0x80 // PSC 0 Output A Activity
 | 
			
		||||
	PIFR0_POAC0A = 0x40 // PSC 0 Output A Activity
 | 
			
		||||
	PIFR0_PEV0B  = 0x10 // External Event B Interrupt
 | 
			
		||||
	PIFR0_PEV0A  = 0x8  // External Event A Interrupt
 | 
			
		||||
	PIFR0_PRN0   = 0x6  // Ramp Number
 | 
			
		||||
	PIFR0_PEOP0  = 0x1  // End of PSC0 Interrupt
 | 
			
		||||
 | 
			
		||||
	// PICR2L: PSC 2 Input Capture Register
 | 
			
		||||
 | 
			
		||||
	// PICR2H: PSC 2 Input Capture Register
 | 
			
		||||
	PICR2_PCST2 = 0x8000 // PSC 2 Capture Software Trigger Bit
 | 
			
		||||
	PICR2_PICR2 = 0xfff  // PSC 2 Input Capture Bytes
 | 
			
		||||
 | 
			
		||||
	// PFRC2B: PSC 2 Input B Control
 | 
			
		||||
	PFRC2B_PCAE2B  = 0x80 // PSC 2 Capture Enable Input Part B
 | 
			
		||||
	PFRC2B_PISEL2B = 0x40 // PSC 2 Input Select for Part B
 | 
			
		||||
	PFRC2B_PELEV2B = 0x20 // PSC 2 Edge Level Selector on Input Part B
 | 
			
		||||
	PFRC2B_PFLTE2B = 0x10 // PSC 2 Filter Enable on Input Part B
 | 
			
		||||
	PFRC2B_PRFM2B  = 0xf  // PSC 2 Retrigger and Fault Mode for Part B
 | 
			
		||||
 | 
			
		||||
	// PFRC2A: PSC 2 Input B Control
 | 
			
		||||
	PFRC2A_PCAE2A  = 0x80 // PSC 2 Capture Enable Input Part A
 | 
			
		||||
	PFRC2A_PISEL2A = 0x40 // PSC 2 Input Select for Part A
 | 
			
		||||
	PFRC2A_PELEV2A = 0x20 // PSC 2 Edge Level Selector on Input Part A
 | 
			
		||||
	PFRC2A_PFLTE2A = 0x10 // PSC 2 Filter Enable on Input Part A
 | 
			
		||||
	PFRC2A_PRFM2A  = 0xf  // PSC 2 Retrigger and Fault Mode for Part A
 | 
			
		||||
 | 
			
		||||
	// PCTL2: PSC 2 Control Register
 | 
			
		||||
	PCTL2_PPRE2  = 0xc0 // PSC 2 Prescaler Selects
 | 
			
		||||
	PCTL2_PBFM2  = 0x20 // Balance Flank Width Modulation
 | 
			
		||||
	PCTL2_PAOC2B = 0x10 // PSC 2 Asynchronous Output Control B
 | 
			
		||||
	PCTL2_PAOC2A = 0x8  // PSC 2 Asynchronous Output Control A
 | 
			
		||||
	PCTL2_PARUN2 = 0x4  // PSC2 Auto Run
 | 
			
		||||
	PCTL2_PCCYC2 = 0x2  // PSC2 Complete Cycle
 | 
			
		||||
	PCTL2_PRUN2  = 0x1  // PSC 2 Run
 | 
			
		||||
 | 
			
		||||
	// PCNF2: PSC 2 Configuration Register
 | 
			
		||||
	PCNF2_PFIFTY2  = 0x80 // PSC 2 Fifty
 | 
			
		||||
	PCNF2_PALOCK2  = 0x40 // PSC 2 Autolock
 | 
			
		||||
	PCNF2_PLOCK2   = 0x20 // PSC 2 Lock
 | 
			
		||||
	PCNF2_PMODE2   = 0x18 // PSC 2 Mode
 | 
			
		||||
	PCNF2_POP2     = 0x4  // PSC 2 Output Polarity
 | 
			
		||||
	PCNF2_PCLKSEL2 = 0x2  // PSC 2 Input Clock Select
 | 
			
		||||
	PCNF2_POME2    = 0x1  // PSC 2 Output Matrix Enable
 | 
			
		||||
 | 
			
		||||
	// PCNFE2: PSC 2 Enhanced Configuration Register
 | 
			
		||||
	PCNFE2_PASDLK2  = 0xe0
 | 
			
		||||
	PCNFE2_PBFM21   = 0x10
 | 
			
		||||
	PCNFE2_PELEV2A1 = 0x8
 | 
			
		||||
	PCNFE2_PELEV2B1 = 0x4
 | 
			
		||||
	PCNFE2_PISEL2A1 = 0x2
 | 
			
		||||
	PCNFE2_PISEL2B1 = 0x1
 | 
			
		||||
 | 
			
		||||
	// OCR2RBL: Output Compare RB Register
 | 
			
		||||
 | 
			
		||||
	// OCR2RBH: Output Compare RB Register
 | 
			
		||||
	OCR2RB_OCR2RB = 0xffff // Output Compare 2 RB
 | 
			
		||||
 | 
			
		||||
	// OCR2SBL: Output Compare SB Register
 | 
			
		||||
 | 
			
		||||
	// OCR2SBH: Output Compare SB Register
 | 
			
		||||
	OCR2SB_OCR2SB = 0xfff // Output Compare 2 SB
 | 
			
		||||
 | 
			
		||||
	// OCR2RAL: Output Compare RA Register
 | 
			
		||||
 | 
			
		||||
	// OCR2RAH: Output Compare RA Register
 | 
			
		||||
	OCR2RA_OCR2RA = 0xfff // Output Compare 2 RA
 | 
			
		||||
 | 
			
		||||
	// OCR2SAL: Output Compare SA Register
 | 
			
		||||
 | 
			
		||||
	// OCR2SAH: Output Compare SA Register
 | 
			
		||||
	OCR2SA_OCR2SA = 0xfff // Output Compare 2 SA
 | 
			
		||||
 | 
			
		||||
	// POM2: PSC 2 Output Matrix
 | 
			
		||||
	POM2_POMV2B = 0xf0 // Output Matrix Output B Ramps
 | 
			
		||||
	POM2_POMV2A = 0xf  // Output Matrix Output A Ramps
 | 
			
		||||
 | 
			
		||||
	// PSOC2: PSC2 Synchro and Output Configuration
 | 
			
		||||
	PSOC2_POS2   = 0xc0 // PSC 2 Output 23 Select
 | 
			
		||||
	PSOC2_PSYNC2 = 0x30 // Synchronization Out for ADC Selection
 | 
			
		||||
	PSOC2_POEN2D = 0x8  // PSCOUT23 Output Enable
 | 
			
		||||
	PSOC2_POEN2B = 0x4  // PSCOUT21 Output Enable
 | 
			
		||||
	PSOC2_POEN2C = 0x2  // PSCOUT22 Output Enable
 | 
			
		||||
	PSOC2_POEN2A = 0x1  // PSCOUT20 Output Enable
 | 
			
		||||
 | 
			
		||||
	// PIM2: PSC2 Interrupt Mask Register
 | 
			
		||||
	PIM2_PSEIE2  = 0x20 // PSC 2 Synchro Error Interrupt Enable
 | 
			
		||||
	PIM2_PEVE2B  = 0x10 // External Event B Interrupt Enable
 | 
			
		||||
	PIM2_PEVE2A  = 0x8  // External Event A Interrupt Enable
 | 
			
		||||
	PIM2_PEOEPE2 = 0x2  // End of Enhanced Cycle Interrupt Enable
 | 
			
		||||
	PIM2_PEOPE2  = 0x1  // End of Cycle Interrupt Enable
 | 
			
		||||
 | 
			
		||||
	// PIFR2: PSC2 Interrupt Flag Register
 | 
			
		||||
	PIFR2_POAC2B = 0x80 // PSC 2 Output A Activity
 | 
			
		||||
	PIFR2_POAC2A = 0x40 // PSC 2 Output A Activity
 | 
			
		||||
	PIFR2_PSEI2  = 0x20 // PSC 2 Synchro Error Interrupt
 | 
			
		||||
	PIFR2_PEV2B  = 0x10 // External Event B Interrupt
 | 
			
		||||
	PIFR2_PEV2A  = 0x8  // External Event A Interrupt
 | 
			
		||||
	PIFR2_PRN2   = 0x6  // Ramp Number
 | 
			
		||||
	PIFR2_PEOP2  = 0x1  // End of PSC2 Interrupt
 | 
			
		||||
 | 
			
		||||
	// PASDLY2: Analog Synchronization Delay Register
 | 
			
		||||
	PASDLY2_PASDLY2 = 0xff // Analog Synchronization Delay bits
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
// Bitfields for TC16: Timer/Counter, 16-bit
 | 
			
		||||
const (
 | 
			
		||||
	// TIMSK1: Timer/Counter Interrupt Mask Register
 | 
			
		||||
	TIMSK1_ICIE1 = 0x20 // Timer/Counter1 Input Capture Interrupt Enable
 | 
			
		||||
	TIMSK1_TOIE1 = 0x1  // Timer/Counter1 Overflow Interrupt Enable
 | 
			
		||||
 | 
			
		||||
	// TIFR1: Timer/Counter Interrupt Flag register
 | 
			
		||||
	TIFR1_ICF1 = 0x20 // Input Capture Flag 1
 | 
			
		||||
	TIFR1_TOV1 = 0x1  // Timer/Counter1 Overflow Flag
 | 
			
		||||
 | 
			
		||||
	// TCCR1B: Timer/Counter1 Control Register B
 | 
			
		||||
	TCCR1B_ICNC1 = 0x80 // Input Capture 1 Noise Canceler
 | 
			
		||||
	TCCR1B_ICES1 = 0x40 // Input Capture 1 Edge Select
 | 
			
		||||
	TCCR1B_WGM13 = 0x10 // Waveform Generation Mode
 | 
			
		||||
	TCCR1B_CS1   = 0x7  // Prescaler source of Timer/Counter 1
 | 
			
		||||
 | 
			
		||||
	// TCNT1L: Timer/Counter1 Bytes
 | 
			
		||||
 | 
			
		||||
	// TCNT1H: Timer/Counter1 Bytes
 | 
			
		||||
	TCNT1_TCNT1 = 0xffff // Timer/Counter 1 bits
 | 
			
		||||
 | 
			
		||||
	// ICR1L: Timer/Counter1 Input Capture Register Bytes
 | 
			
		||||
 | 
			
		||||
	// ICR1H: Timer/Counter1 Input Capture Register Bytes
 | 
			
		||||
	ICR1_ICR1 = 0xffff // Timer/Counter1 Input Capture bits
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
// Bitfields for BOOT_LOAD: Bootloader
 | 
			
		||||
const (
 | 
			
		||||
	// SPMCSR: Store Program Memory Control Register
 | 
			
		||||
	SPMCSR_SPMIE  = 0x80 // SPM Interrupt Enable
 | 
			
		||||
	SPMCSR_RWWSB  = 0x40 // Read While Write Section Busy
 | 
			
		||||
	SPMCSR_SIGRD  = 0x20 // Signature Row Read
 | 
			
		||||
	SPMCSR_RWWSRE = 0x10 // Read While Write section read enable
 | 
			
		||||
	SPMCSR_BLBSET = 0x8  // Boot Lock Bit Set
 | 
			
		||||
	SPMCSR_PGWRT  = 0x4  // Page Write
 | 
			
		||||
	SPMCSR_PGERS  = 0x2  // Page Erase
 | 
			
		||||
	SPMCSR_SPMEN  = 0x1  // Store Program Memory Enable
 | 
			
		||||
)
 | 
			
		||||
							
								
								
									
										6
									
								
								src/device/avr/at90pwm81.ld
									
										
									
									
									
										Обычный файл
									
								
							
							
						
						
									
										6
									
								
								src/device/avr/at90pwm81.ld
									
										
									
									
									
										Обычный файл
									
								
							| 
						 | 
				
			
			@ -0,0 +1,6 @@
 | 
			
		|||
/* Automatically generated file. DO NOT EDIT. */
 | 
			
		||||
/* Generated by gen-device.py from AT90PWM81.atdf, see http://packs.download.atmel.com/ */
 | 
			
		||||
 | 
			
		||||
__flash_size = 0x2000;
 | 
			
		||||
__ram_size   = 0x100;
 | 
			
		||||
__num_isrs   = 20;
 | 
			
		||||
							
								
								
									
										952
									
								
								src/device/avr/at90usb1286.go
									
										
									
									
									
										Обычный файл
									
								
							
							
						
						
									
										952
									
								
								src/device/avr/at90usb1286.go
									
										
									
									
									
										Обычный файл
									
								
							| 
						 | 
				
			
			@ -0,0 +1,952 @@
 | 
			
		|||
// Automatically generated file. DO NOT EDIT.
 | 
			
		||||
// Generated by gen-device.py from AT90USB1286.atdf, see http://packs.download.atmel.com/
 | 
			
		||||
 | 
			
		||||
// +build avr,at90usb1286
 | 
			
		||||
 | 
			
		||||
// Device information for the AT90USB1286.
 | 
			
		||||
//
 | 
			
		||||
package avr
 | 
			
		||||
 | 
			
		||||
// Magic type name for the compiler.
 | 
			
		||||
type __reg uint8
 | 
			
		||||
 | 
			
		||||
// Export this magic type name.
 | 
			
		||||
type RegValue = __reg
 | 
			
		||||
 | 
			
		||||
// Some information about this device.
 | 
			
		||||
const (
 | 
			
		||||
	DEVICE = "AT90USB1286"
 | 
			
		||||
	ARCH   = "AVR8"
 | 
			
		||||
	FAMILY = "megaAVR"
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
// Interrupts
 | 
			
		||||
const (
 | 
			
		||||
	IRQ_RESET        = 0  // External Pin,Power-on Reset,Brown-out Reset,Watchdog Reset,and JTAG AVR Reset. See Datasheet.
 | 
			
		||||
	IRQ_INT0         = 1  // External Interrupt Request 0
 | 
			
		||||
	IRQ_INT1         = 2  // External Interrupt Request 1
 | 
			
		||||
	IRQ_INT2         = 3  // External Interrupt Request 2
 | 
			
		||||
	IRQ_INT3         = 4  // External Interrupt Request 3
 | 
			
		||||
	IRQ_INT4         = 5  // External Interrupt Request 4
 | 
			
		||||
	IRQ_INT5         = 6  // External Interrupt Request 5
 | 
			
		||||
	IRQ_INT6         = 7  // External Interrupt Request 6
 | 
			
		||||
	IRQ_INT7         = 8  // External Interrupt Request 7
 | 
			
		||||
	IRQ_PCINT0       = 9  // Pin Change Interrupt Request 0
 | 
			
		||||
	IRQ_USB_GEN      = 10 // USB General Interrupt Request
 | 
			
		||||
	IRQ_USB_COM      = 11 // USB Endpoint/Pipe Interrupt Communication Request
 | 
			
		||||
	IRQ_WDT          = 12 // Watchdog Time-out Interrupt
 | 
			
		||||
	IRQ_TIMER2_COMPA = 13 // Timer/Counter2 Compare Match A
 | 
			
		||||
	IRQ_TIMER2_COMPB = 14 // Timer/Counter2 Compare Match B
 | 
			
		||||
	IRQ_TIMER2_OVF   = 15 // Timer/Counter2 Overflow
 | 
			
		||||
	IRQ_TIMER1_CAPT  = 16 // Timer/Counter1 Capture Event
 | 
			
		||||
	IRQ_TIMER1_COMPA = 17 // Timer/Counter1 Compare Match A
 | 
			
		||||
	IRQ_TIMER1_COMPB = 18 // Timer/Counter1 Compare Match B
 | 
			
		||||
	IRQ_TIMER1_COMPC = 19 // Timer/Counter1 Compare Match C
 | 
			
		||||
	IRQ_TIMER1_OVF   = 20 // Timer/Counter1 Overflow
 | 
			
		||||
	IRQ_TIMER0_COMPA = 21 // Timer/Counter0 Compare Match A
 | 
			
		||||
	IRQ_TIMER0_COMPB = 22 // Timer/Counter0 Compare Match B
 | 
			
		||||
	IRQ_TIMER0_OVF   = 23 // Timer/Counter0 Overflow
 | 
			
		||||
	IRQ_SPI_STC      = 24 // SPI Serial Transfer Complete
 | 
			
		||||
	IRQ_USART1_RX    = 25 // USART1, Rx Complete
 | 
			
		||||
	IRQ_USART1_UDRE  = 26 // USART1 Data register Empty
 | 
			
		||||
	IRQ_USART1_TX    = 27 // USART1, Tx Complete
 | 
			
		||||
	IRQ_ANALOG_COMP  = 28 // Analog Comparator
 | 
			
		||||
	IRQ_ADC          = 29 // ADC Conversion Complete
 | 
			
		||||
	IRQ_EE_READY     = 30 // EEPROM Ready
 | 
			
		||||
	IRQ_TIMER3_CAPT  = 31 // Timer/Counter3 Capture Event
 | 
			
		||||
	IRQ_TIMER3_COMPA = 32 // Timer/Counter3 Compare Match A
 | 
			
		||||
	IRQ_TIMER3_COMPB = 33 // Timer/Counter3 Compare Match B
 | 
			
		||||
	IRQ_TIMER3_COMPC = 34 // Timer/Counter3 Compare Match C
 | 
			
		||||
	IRQ_TIMER3_OVF   = 35 // Timer/Counter3 Overflow
 | 
			
		||||
	IRQ_TWI          = 36 // 2-wire Serial Interface
 | 
			
		||||
	IRQ_SPM_READY    = 37 // Store Program Memory Read
 | 
			
		||||
	IRQ_max          = 37 // Highest interrupt number on this device.
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
// Peripherals
 | 
			
		||||
var (
 | 
			
		||||
	// Fuses
 | 
			
		||||
	FUSE = struct {
 | 
			
		||||
		EXTENDED __reg
 | 
			
		||||
		HIGH     __reg
 | 
			
		||||
		LOW      __reg
 | 
			
		||||
	}{
 | 
			
		||||
		EXTENDED: 0x2,
 | 
			
		||||
		HIGH:     0x1,
 | 
			
		||||
		LOW:      0x0,
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	// Lockbits
 | 
			
		||||
	LOCKBIT = struct {
 | 
			
		||||
		LOCKBIT __reg
 | 
			
		||||
	}{
 | 
			
		||||
		LOCKBIT: 0x0,
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	// Watchdog Timer
 | 
			
		||||
	WDT = struct {
 | 
			
		||||
		WDTCSR __reg
 | 
			
		||||
	}{
 | 
			
		||||
		WDTCSR: 0x60, // Watchdog Timer Control Register
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	// I/O Port
 | 
			
		||||
	PORT = struct {
 | 
			
		||||
		PORTA __reg
 | 
			
		||||
		DDRA  __reg
 | 
			
		||||
		PINA  __reg
 | 
			
		||||
		PORTB __reg
 | 
			
		||||
		DDRB  __reg
 | 
			
		||||
		PINB  __reg
 | 
			
		||||
		PORTC __reg
 | 
			
		||||
		DDRC  __reg
 | 
			
		||||
		PINC  __reg
 | 
			
		||||
		PORTD __reg
 | 
			
		||||
		DDRD  __reg
 | 
			
		||||
		PIND  __reg
 | 
			
		||||
		PORTE __reg
 | 
			
		||||
		DDRE  __reg
 | 
			
		||||
		PINE  __reg
 | 
			
		||||
		PORTF __reg
 | 
			
		||||
		DDRF  __reg
 | 
			
		||||
		PINF  __reg
 | 
			
		||||
	}{
 | 
			
		||||
		PORTA: 0x22, // Port A Data Register
 | 
			
		||||
		DDRA:  0x21, // Port A Data Direction Register
 | 
			
		||||
		PINA:  0x20, // Port A Input Pins
 | 
			
		||||
		PORTB: 0x25, // Port B Data Register
 | 
			
		||||
		DDRB:  0x24, // Port B Data Direction Register
 | 
			
		||||
		PINB:  0x23, // Port B Input Pins
 | 
			
		||||
		PORTC: 0x28, // Port C Data Register
 | 
			
		||||
		DDRC:  0x27, // Port C Data Direction Register
 | 
			
		||||
		PINC:  0x26, // Port C Input Pins
 | 
			
		||||
		PORTD: 0x2b, // Port D Data Register
 | 
			
		||||
		DDRD:  0x2a, // Port D Data Direction Register
 | 
			
		||||
		PIND:  0x29, // Port D Input Pins
 | 
			
		||||
		PORTE: 0x2e, // Data Register, Port E
 | 
			
		||||
		DDRE:  0x2d, // Data Direction Register, Port E
 | 
			
		||||
		PINE:  0x2c, // Input Pins, Port E
 | 
			
		||||
		PORTF: 0x31, // Data Register, Port F
 | 
			
		||||
		DDRF:  0x30, // Data Direction Register, Port F
 | 
			
		||||
		PINF:  0x2f, // Input Pins, Port F
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	// CPU Registers
 | 
			
		||||
	CPU = struct {
 | 
			
		||||
		SREG   __reg
 | 
			
		||||
		SPL    __reg
 | 
			
		||||
		SPH    __reg
 | 
			
		||||
		XMCRA  __reg
 | 
			
		||||
		XMCRB  __reg
 | 
			
		||||
		OSCCAL __reg
 | 
			
		||||
		CLKPR  __reg
 | 
			
		||||
		SMCR   __reg
 | 
			
		||||
		EIND   __reg
 | 
			
		||||
		RAMPZ  __reg
 | 
			
		||||
		GPIOR2 __reg
 | 
			
		||||
		GPIOR1 __reg
 | 
			
		||||
		GPIOR0 __reg
 | 
			
		||||
		PRR1   __reg
 | 
			
		||||
		PRR0   __reg
 | 
			
		||||
	}{
 | 
			
		||||
		SREG:   0x5f, // Status Register
 | 
			
		||||
		SPL:    0x5d, // Stack Pointer
 | 
			
		||||
		SPH:    0x5d, // Stack Pointer
 | 
			
		||||
		XMCRA:  0x74, // External Memory Control Register A
 | 
			
		||||
		XMCRB:  0x75, // External Memory Control Register B
 | 
			
		||||
		OSCCAL: 0x66, // Oscillator Calibration Value
 | 
			
		||||
		CLKPR:  0x61,
 | 
			
		||||
		SMCR:   0x53, // Sleep Mode Control Register
 | 
			
		||||
		EIND:   0x5c, // Extended Indirect Register
 | 
			
		||||
		RAMPZ:  0x5b, // RAM Page Z Select Register
 | 
			
		||||
		GPIOR2: 0x4b, // General Purpose IO Register 2
 | 
			
		||||
		GPIOR1: 0x4a, // General Purpose IO Register 1
 | 
			
		||||
		GPIOR0: 0x3e, // General Purpose IO Register 0
 | 
			
		||||
		PRR1:   0x65, // Power Reduction Register1
 | 
			
		||||
		PRR0:   0x64, // Power Reduction Register0
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	// Two Wire Serial Interface
 | 
			
		||||
	TWI = struct {
 | 
			
		||||
		TWAMR __reg
 | 
			
		||||
		TWBR  __reg
 | 
			
		||||
		TWCR  __reg
 | 
			
		||||
		TWSR  __reg
 | 
			
		||||
		TWDR  __reg
 | 
			
		||||
		TWAR  __reg
 | 
			
		||||
	}{
 | 
			
		||||
		TWAMR: 0xbd, // TWI (Slave) Address Mask Register
 | 
			
		||||
		TWBR:  0xb8, // TWI Bit Rate register
 | 
			
		||||
		TWCR:  0xbc, // TWI Control Register
 | 
			
		||||
		TWSR:  0xb9, // TWI Status Register
 | 
			
		||||
		TWDR:  0xbb, // TWI Data register
 | 
			
		||||
		TWAR:  0xba, // TWI (Slave) Address register
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	// Serial Peripheral Interface
 | 
			
		||||
	SPI = struct {
 | 
			
		||||
		SPCR __reg
 | 
			
		||||
		SPSR __reg
 | 
			
		||||
		SPDR __reg
 | 
			
		||||
	}{
 | 
			
		||||
		SPCR: 0x4c, // SPI Control Register
 | 
			
		||||
		SPSR: 0x4d, // SPI Status Register
 | 
			
		||||
		SPDR: 0x4e, // SPI Data Register
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	// USART
 | 
			
		||||
	USART = struct {
 | 
			
		||||
		UDR1   __reg
 | 
			
		||||
		UCSR1A __reg
 | 
			
		||||
		UCSR1B __reg
 | 
			
		||||
		UCSR1C __reg
 | 
			
		||||
		UBRR1L __reg
 | 
			
		||||
		UBRR1H __reg
 | 
			
		||||
	}{
 | 
			
		||||
		UDR1:   0xce, // USART I/O Data Register
 | 
			
		||||
		UCSR1A: 0xc8, // USART Control and Status Register A
 | 
			
		||||
		UCSR1B: 0xc9, // USART Control and Status Register B
 | 
			
		||||
		UCSR1C: 0xca, // USART Control and Status Register C
 | 
			
		||||
		UBRR1L: 0xcc, // USART Baud Rate Register  Bytes
 | 
			
		||||
		UBRR1H: 0xcc, // USART Baud Rate Register  Bytes
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	// USB Device Registers
 | 
			
		||||
	USB_DEVICE = struct {
 | 
			
		||||
		UEINT   __reg
 | 
			
		||||
		UEBCHX  __reg
 | 
			
		||||
		UEBCLX  __reg
 | 
			
		||||
		UEDATX  __reg
 | 
			
		||||
		UEIENX  __reg
 | 
			
		||||
		UESTA1X __reg
 | 
			
		||||
		UESTA0X __reg
 | 
			
		||||
		UECFG1X __reg
 | 
			
		||||
		UECFG0X __reg
 | 
			
		||||
		UECONX  __reg
 | 
			
		||||
		UERST   __reg
 | 
			
		||||
		UENUM   __reg
 | 
			
		||||
		UEINTX  __reg
 | 
			
		||||
		UDMFN   __reg
 | 
			
		||||
		UDFNUML __reg
 | 
			
		||||
		UDFNUMH __reg
 | 
			
		||||
		UDADDR  __reg
 | 
			
		||||
		UDIEN   __reg
 | 
			
		||||
		UDINT   __reg
 | 
			
		||||
		UDCON   __reg
 | 
			
		||||
	}{
 | 
			
		||||
		UEINT:   0xf4,
 | 
			
		||||
		UEBCHX:  0xf3,
 | 
			
		||||
		UEBCLX:  0xf2,
 | 
			
		||||
		UEDATX:  0xf1,
 | 
			
		||||
		UEIENX:  0xf0,
 | 
			
		||||
		UESTA1X: 0xef,
 | 
			
		||||
		UESTA0X: 0xee,
 | 
			
		||||
		UECFG1X: 0xed,
 | 
			
		||||
		UECFG0X: 0xec,
 | 
			
		||||
		UECONX:  0xeb,
 | 
			
		||||
		UERST:   0xea,
 | 
			
		||||
		UENUM:   0xe9,
 | 
			
		||||
		UEINTX:  0xe8,
 | 
			
		||||
		UDMFN:   0xe6,
 | 
			
		||||
		UDFNUML: 0xe4,
 | 
			
		||||
		UDFNUMH: 0xe4,
 | 
			
		||||
		UDADDR:  0xe3,
 | 
			
		||||
		UDIEN:   0xe2,
 | 
			
		||||
		UDINT:   0xe1,
 | 
			
		||||
		UDCON:   0xe0,
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	// Bootloader
 | 
			
		||||
	BOOT_LOAD = struct {
 | 
			
		||||
		SPMCSR __reg
 | 
			
		||||
	}{
 | 
			
		||||
		SPMCSR: 0x57, // Store Program Memory Control Register
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	// EEPROM
 | 
			
		||||
	EEPROM = struct {
 | 
			
		||||
		EEARL __reg
 | 
			
		||||
		EEARH __reg
 | 
			
		||||
		EEDR  __reg
 | 
			
		||||
		EECR  __reg
 | 
			
		||||
	}{
 | 
			
		||||
		EEARL: 0x41, // EEPROM Address Register Low Bytes
 | 
			
		||||
		EEARH: 0x41, // EEPROM Address Register Low Bytes
 | 
			
		||||
		EEDR:  0x40, // EEPROM Data Register
 | 
			
		||||
		EECR:  0x3f, // EEPROM Control Register
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	// Timer/Counter, 8-bit
 | 
			
		||||
	TC8 = struct {
 | 
			
		||||
		OCR0B  __reg
 | 
			
		||||
		OCR0A  __reg
 | 
			
		||||
		TCNT0  __reg
 | 
			
		||||
		TCCR0B __reg
 | 
			
		||||
		TCCR0A __reg
 | 
			
		||||
		TIMSK0 __reg
 | 
			
		||||
		TIFR0  __reg
 | 
			
		||||
	}{
 | 
			
		||||
		OCR0B:  0x48, // Timer/Counter0 Output Compare Register
 | 
			
		||||
		OCR0A:  0x47, // Timer/Counter0 Output Compare Register
 | 
			
		||||
		TCNT0:  0x46, // Timer/Counter0
 | 
			
		||||
		TCCR0B: 0x45, // Timer/Counter Control Register B
 | 
			
		||||
		TCCR0A: 0x44, // Timer/Counter  Control Register A
 | 
			
		||||
		TIMSK0: 0x6e, // Timer/Counter0 Interrupt Mask Register
 | 
			
		||||
		TIFR0:  0x35, // Timer/Counter0 Interrupt Flag register
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	// Timer/Counter, 8-bit Async
 | 
			
		||||
	TC8_ASYNC = struct {
 | 
			
		||||
		TIMSK2 __reg
 | 
			
		||||
		TIFR2  __reg
 | 
			
		||||
		TCCR2A __reg
 | 
			
		||||
		TCCR2B __reg
 | 
			
		||||
		TCNT2  __reg
 | 
			
		||||
		OCR2B  __reg
 | 
			
		||||
		OCR2A  __reg
 | 
			
		||||
		ASSR   __reg
 | 
			
		||||
	}{
 | 
			
		||||
		TIMSK2: 0x70, // Timer/Counter Interrupt Mask register
 | 
			
		||||
		TIFR2:  0x37, // Timer/Counter Interrupt Flag Register
 | 
			
		||||
		TCCR2A: 0xb0, // Timer/Counter2 Control Register A
 | 
			
		||||
		TCCR2B: 0xb1, // Timer/Counter2 Control Register B
 | 
			
		||||
		TCNT2:  0xb2, // Timer/Counter2
 | 
			
		||||
		OCR2B:  0xb4, // Timer/Counter2 Output Compare Register B
 | 
			
		||||
		OCR2A:  0xb3, // Timer/Counter2 Output Compare Register A
 | 
			
		||||
		ASSR:   0xb6, // Asynchronous Status Register
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	// Timer/Counter, 16-bit
 | 
			
		||||
	TC16 = struct {
 | 
			
		||||
		TCCR3A __reg
 | 
			
		||||
		TCCR3B __reg
 | 
			
		||||
		TCCR3C __reg
 | 
			
		||||
		TCNT3L __reg
 | 
			
		||||
		TCNT3H __reg
 | 
			
		||||
		OCR3AL __reg
 | 
			
		||||
		OCR3AH __reg
 | 
			
		||||
		OCR3BL __reg
 | 
			
		||||
		OCR3BH __reg
 | 
			
		||||
		OCR3CL __reg
 | 
			
		||||
		OCR3CH __reg
 | 
			
		||||
		ICR3L  __reg
 | 
			
		||||
		ICR3H  __reg
 | 
			
		||||
		TIMSK3 __reg
 | 
			
		||||
		TIFR3  __reg
 | 
			
		||||
		TCCR1A __reg
 | 
			
		||||
		TCCR1B __reg
 | 
			
		||||
		TCCR1C __reg
 | 
			
		||||
		TCNT1L __reg
 | 
			
		||||
		TCNT1H __reg
 | 
			
		||||
		OCR1AL __reg
 | 
			
		||||
		OCR1AH __reg
 | 
			
		||||
		OCR1BL __reg
 | 
			
		||||
		OCR1BH __reg
 | 
			
		||||
		OCR1CL __reg
 | 
			
		||||
		OCR1CH __reg
 | 
			
		||||
		ICR1L  __reg
 | 
			
		||||
		ICR1H  __reg
 | 
			
		||||
		TIMSK1 __reg
 | 
			
		||||
		TIFR1  __reg
 | 
			
		||||
	}{
 | 
			
		||||
		TCCR3A: 0x90, // Timer/Counter3 Control Register A
 | 
			
		||||
		TCCR3B: 0x91, // Timer/Counter3 Control Register B
 | 
			
		||||
		TCCR3C: 0x92, // Timer/Counter 3 Control Register C
 | 
			
		||||
		TCNT3L: 0x94, // Timer/Counter3  Bytes
 | 
			
		||||
		TCNT3H: 0x94, // Timer/Counter3  Bytes
 | 
			
		||||
		OCR3AL: 0x98, // Timer/Counter3 Output Compare Register A  Bytes
 | 
			
		||||
		OCR3AH: 0x98, // Timer/Counter3 Output Compare Register A  Bytes
 | 
			
		||||
		OCR3BL: 0x9a, // Timer/Counter3 Output Compare Register B  Bytes
 | 
			
		||||
		OCR3BH: 0x9a, // Timer/Counter3 Output Compare Register B  Bytes
 | 
			
		||||
		OCR3CL: 0x9c, // Timer/Counter3 Output Compare Register B  Bytes
 | 
			
		||||
		OCR3CH: 0x9c, // Timer/Counter3 Output Compare Register B  Bytes
 | 
			
		||||
		ICR3L:  0x96, // Timer/Counter3 Input Capture Register  Bytes
 | 
			
		||||
		ICR3H:  0x96, // Timer/Counter3 Input Capture Register  Bytes
 | 
			
		||||
		TIMSK3: 0x71, // Timer/Counter3 Interrupt Mask Register
 | 
			
		||||
		TIFR3:  0x38, // Timer/Counter3 Interrupt Flag register
 | 
			
		||||
		TCCR1A: 0x80, // Timer/Counter1 Control Register A
 | 
			
		||||
		TCCR1B: 0x81, // Timer/Counter1 Control Register B
 | 
			
		||||
		TCCR1C: 0x82, // Timer/Counter 1 Control Register C
 | 
			
		||||
		TCNT1L: 0x84, // Timer/Counter1  Bytes
 | 
			
		||||
		TCNT1H: 0x84, // Timer/Counter1  Bytes
 | 
			
		||||
		OCR1AL: 0x88, // Timer/Counter1 Output Compare Register A  Bytes
 | 
			
		||||
		OCR1AH: 0x88, // Timer/Counter1 Output Compare Register A  Bytes
 | 
			
		||||
		OCR1BL: 0x8a, // Timer/Counter1 Output Compare Register B  Bytes
 | 
			
		||||
		OCR1BH: 0x8a, // Timer/Counter1 Output Compare Register B  Bytes
 | 
			
		||||
		OCR1CL: 0x8c, // Timer/Counter1 Output Compare Register C  Bytes
 | 
			
		||||
		OCR1CH: 0x8c, // Timer/Counter1 Output Compare Register C  Bytes
 | 
			
		||||
		ICR1L:  0x86, // Timer/Counter1 Input Capture Register  Bytes
 | 
			
		||||
		ICR1H:  0x86, // Timer/Counter1 Input Capture Register  Bytes
 | 
			
		||||
		TIMSK1: 0x6f, // Timer/Counter1 Interrupt Mask Register
 | 
			
		||||
		TIFR1:  0x36, // Timer/Counter1 Interrupt Flag register
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	// JTAG Interface
 | 
			
		||||
	JTAG = struct {
 | 
			
		||||
		OCDR __reg
 | 
			
		||||
	}{
 | 
			
		||||
		OCDR: 0x51, // On-Chip Debug Related Register in I/O Memory
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	// External Interrupts
 | 
			
		||||
	EXINT = struct {
 | 
			
		||||
		EICRA  __reg
 | 
			
		||||
		EICRB  __reg
 | 
			
		||||
		EIMSK  __reg
 | 
			
		||||
		EIFR   __reg
 | 
			
		||||
		PCMSK0 __reg
 | 
			
		||||
		PCIFR  __reg
 | 
			
		||||
		PCICR  __reg
 | 
			
		||||
	}{
 | 
			
		||||
		EICRA:  0x69, // External Interrupt Control Register A
 | 
			
		||||
		EICRB:  0x6a, // External Interrupt Control Register B
 | 
			
		||||
		EIMSK:  0x3d, // External Interrupt Mask Register
 | 
			
		||||
		EIFR:   0x3c, // External Interrupt Flag Register
 | 
			
		||||
		PCMSK0: 0x6b, // Pin Change Mask Register 0
 | 
			
		||||
		PCIFR:  0x3b, // Pin Change Interrupt Flag Register
 | 
			
		||||
		PCICR:  0x68, // Pin Change Interrupt Control Register
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	// Analog-to-Digital Converter
 | 
			
		||||
	ADC = struct {
 | 
			
		||||
		ADMUX  __reg
 | 
			
		||||
		ADCSRA __reg
 | 
			
		||||
		ADCL   __reg
 | 
			
		||||
		ADCH   __reg
 | 
			
		||||
		DIDR0  __reg
 | 
			
		||||
	}{
 | 
			
		||||
		ADMUX:  0x7c, // The ADC multiplexer Selection Register
 | 
			
		||||
		ADCSRA: 0x7a, // The ADC Control and Status register
 | 
			
		||||
		ADCL:   0x78, // ADC Data Register  Bytes
 | 
			
		||||
		ADCH:   0x78, // ADC Data Register  Bytes
 | 
			
		||||
		DIDR0:  0x7e, // Digital Input Disable Register 1
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	// Analog Comparator
 | 
			
		||||
	AC = struct {
 | 
			
		||||
		ACSR  __reg
 | 
			
		||||
		DIDR1 __reg
 | 
			
		||||
	}{
 | 
			
		||||
		ACSR:  0x50, // Analog Comparator Control And Status Register
 | 
			
		||||
		DIDR1: 0x7f,
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	// Phase Locked Loop
 | 
			
		||||
	PLL = struct {
 | 
			
		||||
		PLLCSR __reg
 | 
			
		||||
	}{
 | 
			
		||||
		PLLCSR: 0x49, // PLL Status and Control register
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	// USB Controller
 | 
			
		||||
	USB_GLOBAL = struct {
 | 
			
		||||
		USBINT __reg
 | 
			
		||||
		USBSTA __reg
 | 
			
		||||
		USBCON __reg
 | 
			
		||||
		UHWCON __reg
 | 
			
		||||
	}{
 | 
			
		||||
		USBINT: 0xda,
 | 
			
		||||
		USBSTA: 0xd9,
 | 
			
		||||
		USBCON: 0xd8, // USB General Control Register
 | 
			
		||||
		UHWCON: 0xd7, // USB Hardware Configuration Register
 | 
			
		||||
	}
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
// Bitfields for FUSE: Fuses
 | 
			
		||||
const (
 | 
			
		||||
	// EXTENDED
 | 
			
		||||
	EXTENDED_BODLEVEL = 0x7 // Brown-out Detector trigger level
 | 
			
		||||
	EXTENDED_HWBE     = 0x8 // Hardware Boot Enable
 | 
			
		||||
 | 
			
		||||
	// HIGH
 | 
			
		||||
	HIGH_OCDEN   = 0x80 // On-Chip Debug Enabled
 | 
			
		||||
	HIGH_JTAGEN  = 0x40 // JTAG Interface Enabled
 | 
			
		||||
	HIGH_SPIEN   = 0x20 // Serial program downloading (SPI) enabled
 | 
			
		||||
	HIGH_WDTON   = 0x10 // Watchdog timer always on
 | 
			
		||||
	HIGH_EESAVE  = 0x8  // Preserve EEPROM through the Chip Erase cycle
 | 
			
		||||
	HIGH_BOOTSZ  = 0x6  // Select Boot Size
 | 
			
		||||
	HIGH_BOOTRST = 0x1  // Boot Reset vector Enabled
 | 
			
		||||
 | 
			
		||||
	// LOW
 | 
			
		||||
	LOW_CKDIV8    = 0x80 // Divide clock by 8 internally
 | 
			
		||||
	LOW_CKOUT     = 0x40 // Clock output on PORTC7
 | 
			
		||||
	LOW_SUT_CKSEL = 0x3f // Select Clock Source
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
// Bitfields for LOCKBIT: Lockbits
 | 
			
		||||
const (
 | 
			
		||||
	// LOCKBIT
 | 
			
		||||
	LOCKBIT_LB   = 0x3  // Memory Lock
 | 
			
		||||
	LOCKBIT_BLB0 = 0xc  // Boot Loader Protection Mode
 | 
			
		||||
	LOCKBIT_BLB1 = 0x30 // Boot Loader Protection Mode
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
// Bitfields for WDT: Watchdog Timer
 | 
			
		||||
const (
 | 
			
		||||
	// WDTCSR: Watchdog Timer Control Register
 | 
			
		||||
	WDTCSR_WDIF = 0x80 // Watchdog Timeout Interrupt Flag
 | 
			
		||||
	WDTCSR_WDIE = 0x40 // Watchdog Timeout Interrupt Enable
 | 
			
		||||
	WDTCSR_WDP  = 0x27 // Watchdog Timer Prescaler Bits
 | 
			
		||||
	WDTCSR_WDCE = 0x10 // Watchdog Change Enable
 | 
			
		||||
	WDTCSR_WDE  = 0x8  // Watch Dog Enable
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
// Bitfields for CPU: CPU Registers
 | 
			
		||||
const (
 | 
			
		||||
	// SREG: Status Register
 | 
			
		||||
	SREG_I = 0x80 // Global Interrupt Enable
 | 
			
		||||
	SREG_T = 0x40 // Bit Copy Storage
 | 
			
		||||
	SREG_H = 0x20 // Half Carry Flag
 | 
			
		||||
	SREG_S = 0x10 // Sign Bit
 | 
			
		||||
	SREG_V = 0x8  // Two's Complement Overflow Flag
 | 
			
		||||
	SREG_N = 0x4  // Negative Flag
 | 
			
		||||
	SREG_Z = 0x2  // Zero Flag
 | 
			
		||||
	SREG_C = 0x1  // Carry Flag
 | 
			
		||||
 | 
			
		||||
	// XMCRA: External Memory Control Register A
 | 
			
		||||
	XMCRA_SRE  = 0x80 // External SRAM Enable
 | 
			
		||||
	XMCRA_SRL  = 0x70 // Wait state page limit
 | 
			
		||||
	XMCRA_SRW1 = 0xc  // Wait state select bit upper page
 | 
			
		||||
	XMCRA_SRW0 = 0x3  // Wait state select bit lower page
 | 
			
		||||
 | 
			
		||||
	// XMCRB: External Memory Control Register B
 | 
			
		||||
	XMCRB_XMBK = 0x80 // External Memory Bus Keeper Enable
 | 
			
		||||
	XMCRB_XMM  = 0x7  // External Memory High Mask
 | 
			
		||||
 | 
			
		||||
	// OSCCAL: Oscillator Calibration Value
 | 
			
		||||
	OSCCAL_OSCCAL = 0xff // Oscillator Calibration
 | 
			
		||||
 | 
			
		||||
	// CLKPR
 | 
			
		||||
	CLKPR_CLKPCE = 0x80
 | 
			
		||||
	CLKPR_CLKPS  = 0xf
 | 
			
		||||
 | 
			
		||||
	// SMCR: Sleep Mode Control Register
 | 
			
		||||
	SMCR_SM = 0xe // Sleep Mode Select bits
 | 
			
		||||
	SMCR_SE = 0x1 // Sleep Enable
 | 
			
		||||
 | 
			
		||||
	// GPIOR2: General Purpose IO Register 2
 | 
			
		||||
	GPIOR2_GPIOR = 0xff // General Purpose IO Register 2 bis
 | 
			
		||||
 | 
			
		||||
	// GPIOR1: General Purpose IO Register 1
 | 
			
		||||
	GPIOR1_GPIOR = 0xff // General Purpose IO Register 1 bis
 | 
			
		||||
 | 
			
		||||
	// GPIOR0: General Purpose IO Register 0
 | 
			
		||||
	GPIOR0_GPIOR07 = 0x80 // General Purpose IO Register 0 bit 7
 | 
			
		||||
	GPIOR0_GPIOR06 = 0x40 // General Purpose IO Register 0 bit 6
 | 
			
		||||
	GPIOR0_GPIOR05 = 0x20 // General Purpose IO Register 0 bit 5
 | 
			
		||||
	GPIOR0_GPIOR04 = 0x10 // General Purpose IO Register 0 bit 4
 | 
			
		||||
	GPIOR0_GPIOR03 = 0x8  // General Purpose IO Register 0 bit 3
 | 
			
		||||
	GPIOR0_GPIOR02 = 0x4  // General Purpose IO Register 0 bit 2
 | 
			
		||||
	GPIOR0_GPIOR01 = 0x2  // General Purpose IO Register 0 bit 1
 | 
			
		||||
	GPIOR0_GPIOR00 = 0x1  // General Purpose IO Register 0 bit 0
 | 
			
		||||
 | 
			
		||||
	// PRR1: Power Reduction Register1
 | 
			
		||||
	PRR1_PRUSB    = 0x80 // Power Reduction USB
 | 
			
		||||
	PRR1_PRTIM3   = 0x8  // Power Reduction Timer/Counter3
 | 
			
		||||
	PRR1_PRUSART1 = 0x1  // Power Reduction USART1
 | 
			
		||||
 | 
			
		||||
	// PRR0: Power Reduction Register0
 | 
			
		||||
	PRR0_PRTWI  = 0x80 // Power Reduction TWI
 | 
			
		||||
	PRR0_PRTIM2 = 0x40 // Power Reduction Timer/Counter2
 | 
			
		||||
	PRR0_PRTIM0 = 0x20 // Power Reduction Timer/Counter0
 | 
			
		||||
	PRR0_PRTIM1 = 0x8  // Power Reduction Timer/Counter1
 | 
			
		||||
	PRR0_PRSPI  = 0x4  // Power Reduction Serial Peripheral Interface
 | 
			
		||||
	PRR0_PRADC  = 0x1  // Power Reduction ADC
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
// Bitfields for TWI: Two Wire Serial Interface
 | 
			
		||||
const (
 | 
			
		||||
	// TWAMR: TWI (Slave) Address Mask Register
 | 
			
		||||
	TWAMR_TWAM = 0xfe
 | 
			
		||||
 | 
			
		||||
	// TWCR: TWI Control Register
 | 
			
		||||
	TWCR_TWINT = 0x80 // TWI Interrupt Flag
 | 
			
		||||
	TWCR_TWEA  = 0x40 // TWI Enable Acknowledge Bit
 | 
			
		||||
	TWCR_TWSTA = 0x20 // TWI Start Condition Bit
 | 
			
		||||
	TWCR_TWSTO = 0x10 // TWI Stop Condition Bit
 | 
			
		||||
	TWCR_TWWC  = 0x8  // TWI Write Collition Flag
 | 
			
		||||
	TWCR_TWEN  = 0x4  // TWI Enable Bit
 | 
			
		||||
	TWCR_TWIE  = 0x1  // TWI Interrupt Enable
 | 
			
		||||
 | 
			
		||||
	// TWSR: TWI Status Register
 | 
			
		||||
	TWSR_TWS  = 0xf8 // TWI Status
 | 
			
		||||
	TWSR_TWPS = 0x3  // TWI Prescaler
 | 
			
		||||
 | 
			
		||||
	// TWAR: TWI (Slave) Address register
 | 
			
		||||
	TWAR_TWA   = 0xfe // TWI (Slave) Address register Bits
 | 
			
		||||
	TWAR_TWGCE = 0x1  // TWI General Call Recognition Enable Bit
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
// Bitfields for SPI: Serial Peripheral Interface
 | 
			
		||||
const (
 | 
			
		||||
	// SPCR: SPI Control Register
 | 
			
		||||
	SPCR_SPIE = 0x80 // SPI Interrupt Enable
 | 
			
		||||
	SPCR_SPE  = 0x40 // SPI Enable
 | 
			
		||||
	SPCR_DORD = 0x20 // Data Order
 | 
			
		||||
	SPCR_MSTR = 0x10 // Master/Slave Select
 | 
			
		||||
	SPCR_CPOL = 0x8  // Clock polarity
 | 
			
		||||
	SPCR_CPHA = 0x4  // Clock Phase
 | 
			
		||||
	SPCR_SPR  = 0x3  // SPI Clock Rate Selects
 | 
			
		||||
 | 
			
		||||
	// SPSR: SPI Status Register
 | 
			
		||||
	SPSR_SPIF  = 0x80 // SPI Interrupt Flag
 | 
			
		||||
	SPSR_WCOL  = 0x40 // Write Collision Flag
 | 
			
		||||
	SPSR_SPI2X = 0x1  // Double SPI Speed Bit
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
// Bitfields for USART: USART
 | 
			
		||||
const (
 | 
			
		||||
	// UCSR1A: USART Control and Status Register A
 | 
			
		||||
	UCSR1A_RXC1  = 0x80 // USART Receive Complete
 | 
			
		||||
	UCSR1A_TXC1  = 0x40 // USART Transmitt Complete
 | 
			
		||||
	UCSR1A_UDRE1 = 0x20 // USART Data Register Empty
 | 
			
		||||
	UCSR1A_FE1   = 0x10 // Framing Error
 | 
			
		||||
	UCSR1A_DOR1  = 0x8  // Data overRun
 | 
			
		||||
	UCSR1A_UPE1  = 0x4  // Parity Error
 | 
			
		||||
	UCSR1A_U2X1  = 0x2  // Double the USART transmission speed
 | 
			
		||||
	UCSR1A_MPCM1 = 0x1  // Multi-processor Communication Mode
 | 
			
		||||
 | 
			
		||||
	// UCSR1B: USART Control and Status Register B
 | 
			
		||||
	UCSR1B_RXCIE1 = 0x80 // RX Complete Interrupt Enable
 | 
			
		||||
	UCSR1B_TXCIE1 = 0x40 // TX Complete Interrupt Enable
 | 
			
		||||
	UCSR1B_UDRIE1 = 0x20 // USART Data register Empty Interrupt Enable
 | 
			
		||||
	UCSR1B_RXEN1  = 0x10 // Receiver Enable
 | 
			
		||||
	UCSR1B_TXEN1  = 0x8  // Transmitter Enable
 | 
			
		||||
	UCSR1B_UCSZ12 = 0x4  // Character Size
 | 
			
		||||
	UCSR1B_RXB81  = 0x2  // Receive Data Bit 8
 | 
			
		||||
	UCSR1B_TXB81  = 0x1  // Transmit Data Bit 8
 | 
			
		||||
 | 
			
		||||
	// UCSR1C: USART Control and Status Register C
 | 
			
		||||
	UCSR1C_UMSEL1 = 0xc0 // USART Mode Select
 | 
			
		||||
	UCSR1C_UPM1   = 0x30 // Parity Mode Bits
 | 
			
		||||
	UCSR1C_USBS1  = 0x8  // Stop Bit Select
 | 
			
		||||
	UCSR1C_UCSZ1  = 0x6  // Character Size
 | 
			
		||||
	UCSR1C_UCPOL1 = 0x1  // Clock Polarity
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
// Bitfields for USB_DEVICE: USB Device Registers
 | 
			
		||||
const (
 | 
			
		||||
	// UEIENX
 | 
			
		||||
	UEIENX_FLERRE   = 0x80
 | 
			
		||||
	UEIENX_NAKINE   = 0x40
 | 
			
		||||
	UEIENX_NAKOUTE  = 0x10
 | 
			
		||||
	UEIENX_RXSTPE   = 0x8
 | 
			
		||||
	UEIENX_RXOUTE   = 0x4
 | 
			
		||||
	UEIENX_STALLEDE = 0x2
 | 
			
		||||
	UEIENX_TXINE    = 0x1
 | 
			
		||||
 | 
			
		||||
	// UESTA1X
 | 
			
		||||
	UESTA1X_CTRLDIR = 0x4
 | 
			
		||||
	UESTA1X_CURRBK  = 0x3
 | 
			
		||||
 | 
			
		||||
	// UESTA0X
 | 
			
		||||
	UESTA0X_CFGOK   = 0x80
 | 
			
		||||
	UESTA0X_OVERFI  = 0x40
 | 
			
		||||
	UESTA0X_UNDERFI = 0x20
 | 
			
		||||
	UESTA0X_DTSEQ   = 0xc
 | 
			
		||||
	UESTA0X_NBUSYBK = 0x3
 | 
			
		||||
 | 
			
		||||
	// UECFG1X
 | 
			
		||||
	UECFG1X_EPSIZE = 0x70
 | 
			
		||||
	UECFG1X_EPBK   = 0xc
 | 
			
		||||
	UECFG1X_ALLOC  = 0x2
 | 
			
		||||
 | 
			
		||||
	// UECFG0X
 | 
			
		||||
	UECFG0X_EPTYPE = 0xc0
 | 
			
		||||
	UECFG0X_EPDIR  = 0x1
 | 
			
		||||
 | 
			
		||||
	// UECONX
 | 
			
		||||
	UECONX_STALLRQ  = 0x20
 | 
			
		||||
	UECONX_STALLRQC = 0x10
 | 
			
		||||
	UECONX_RSTDT    = 0x8
 | 
			
		||||
	UECONX_EPEN     = 0x1
 | 
			
		||||
 | 
			
		||||
	// UERST
 | 
			
		||||
	UERST_EPRST = 0x7f
 | 
			
		||||
 | 
			
		||||
	// UEINTX
 | 
			
		||||
	UEINTX_FIFOCON  = 0x80
 | 
			
		||||
	UEINTX_NAKINI   = 0x40
 | 
			
		||||
	UEINTX_RWAL     = 0x20
 | 
			
		||||
	UEINTX_NAKOUTI  = 0x10
 | 
			
		||||
	UEINTX_RXSTPI   = 0x8
 | 
			
		||||
	UEINTX_RXOUTI   = 0x4
 | 
			
		||||
	UEINTX_STALLEDI = 0x2
 | 
			
		||||
	UEINTX_TXINI    = 0x1
 | 
			
		||||
 | 
			
		||||
	// UDMFN
 | 
			
		||||
	UDMFN_FNCERR = 0x10
 | 
			
		||||
 | 
			
		||||
	// UDADDR
 | 
			
		||||
	UDADDR_ADDEN = 0x80
 | 
			
		||||
	UDADDR_UADD  = 0x7f
 | 
			
		||||
 | 
			
		||||
	// UDIEN
 | 
			
		||||
	UDIEN_UPRSME  = 0x40
 | 
			
		||||
	UDIEN_EORSME  = 0x20
 | 
			
		||||
	UDIEN_WAKEUPE = 0x10
 | 
			
		||||
	UDIEN_EORSTE  = 0x8
 | 
			
		||||
	UDIEN_SOFE    = 0x4
 | 
			
		||||
	UDIEN_SUSPE   = 0x1
 | 
			
		||||
 | 
			
		||||
	// UDINT
 | 
			
		||||
	UDINT_UPRSMI  = 0x40
 | 
			
		||||
	UDINT_EORSMI  = 0x20
 | 
			
		||||
	UDINT_WAKEUPI = 0x10
 | 
			
		||||
	UDINT_EORSTI  = 0x8
 | 
			
		||||
	UDINT_SOFI    = 0x4
 | 
			
		||||
	UDINT_SUSPI   = 0x1
 | 
			
		||||
 | 
			
		||||
	// UDCON
 | 
			
		||||
	UDCON_LSM    = 0x4
 | 
			
		||||
	UDCON_RMWKUP = 0x2
 | 
			
		||||
	UDCON_DETACH = 0x1
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
// Bitfields for BOOT_LOAD: Bootloader
 | 
			
		||||
const (
 | 
			
		||||
	// SPMCSR: Store Program Memory Control Register
 | 
			
		||||
	SPMCSR_SPMIE  = 0x80 // SPM Interrupt Enable
 | 
			
		||||
	SPMCSR_RWWSB  = 0x40 // Read While Write Section Busy
 | 
			
		||||
	SPMCSR_SIGRD  = 0x20 // Signature Row Read
 | 
			
		||||
	SPMCSR_RWWSRE = 0x10 // Read While Write section read enable
 | 
			
		||||
	SPMCSR_BLBSET = 0x8  // Boot Lock Bit Set
 | 
			
		||||
	SPMCSR_PGWRT  = 0x4  // Page Write
 | 
			
		||||
	SPMCSR_PGERS  = 0x2  // Page Erase
 | 
			
		||||
	SPMCSR_SPMEN  = 0x1  // Store Program Memory Enable
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
// Bitfields for EEPROM: EEPROM
 | 
			
		||||
const (
 | 
			
		||||
	// EECR: EEPROM Control Register
 | 
			
		||||
	EECR_EEPM  = 0x30 // EEPROM Programming Mode Bits
 | 
			
		||||
	EECR_EERIE = 0x8  // EEPROM Ready Interrupt Enable
 | 
			
		||||
	EECR_EEMPE = 0x4  // EEPROM Master Write Enable
 | 
			
		||||
	EECR_EEPE  = 0x2  // EEPROM Write Enable
 | 
			
		||||
	EECR_EERE  = 0x1  // EEPROM Read Enable
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
// Bitfields for TC8: Timer/Counter, 8-bit
 | 
			
		||||
const (
 | 
			
		||||
	// TCCR0B: Timer/Counter Control Register B
 | 
			
		||||
	TCCR0B_FOC0A = 0x80 // Force Output Compare A
 | 
			
		||||
	TCCR0B_FOC0B = 0x40 // Force Output Compare B
 | 
			
		||||
	TCCR0B_WGM02 = 0x8
 | 
			
		||||
	TCCR0B_CS0   = 0x7 // Clock Select
 | 
			
		||||
 | 
			
		||||
	// TCCR0A: Timer/Counter  Control Register A
 | 
			
		||||
	TCCR0A_COM0A = 0xc0 // Compare Output Mode, Phase Correct PWM Mode
 | 
			
		||||
	TCCR0A_COM0B = 0x30 // Compare Output Mode, Fast PWm
 | 
			
		||||
	TCCR0A_WGM0  = 0x3  // Waveform Generation Mode
 | 
			
		||||
 | 
			
		||||
	// TIMSK0: Timer/Counter0 Interrupt Mask Register
 | 
			
		||||
	TIMSK0_OCIE0B = 0x4 // Timer/Counter0 Output Compare Match B Interrupt Enable
 | 
			
		||||
	TIMSK0_OCIE0A = 0x2 // Timer/Counter0 Output Compare Match A Interrupt Enable
 | 
			
		||||
	TIMSK0_TOIE0  = 0x1 // Timer/Counter0 Overflow Interrupt Enable
 | 
			
		||||
 | 
			
		||||
	// TIFR0: Timer/Counter0 Interrupt Flag register
 | 
			
		||||
	TIFR0_OCF0B = 0x4 // Timer/Counter0 Output Compare Flag 0B
 | 
			
		||||
	TIFR0_OCF0A = 0x2 // Timer/Counter0 Output Compare Flag 0A
 | 
			
		||||
	TIFR0_TOV0  = 0x1 // Timer/Counter0 Overflow Flag
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
// Bitfields for TC8_ASYNC: Timer/Counter, 8-bit Async
 | 
			
		||||
const (
 | 
			
		||||
	// TIMSK2: Timer/Counter Interrupt Mask register
 | 
			
		||||
	TIMSK2_OCIE2B = 0x4 // Timer/Counter2 Output Compare Match B Interrupt Enable
 | 
			
		||||
	TIMSK2_OCIE2A = 0x2 // Timer/Counter2 Output Compare Match A Interrupt Enable
 | 
			
		||||
	TIMSK2_TOIE2  = 0x1 // Timer/Counter2 Overflow Interrupt Enable
 | 
			
		||||
 | 
			
		||||
	// TIFR2: Timer/Counter Interrupt Flag Register
 | 
			
		||||
	TIFR2_OCF2B = 0x4 // Output Compare Flag 2B
 | 
			
		||||
	TIFR2_OCF2A = 0x2 // Output Compare Flag 2A
 | 
			
		||||
	TIFR2_TOV2  = 0x1 // Timer/Counter2 Overflow Flag
 | 
			
		||||
 | 
			
		||||
	// TCCR2A: Timer/Counter2 Control Register A
 | 
			
		||||
	TCCR2A_COM2A = 0xc0 // Compare Output Mode bits
 | 
			
		||||
	TCCR2A_COM2B = 0x30 // Compare Output Mode bits
 | 
			
		||||
	TCCR2A_WGM2  = 0x3  // Waveform Genration Mode
 | 
			
		||||
 | 
			
		||||
	// TCCR2B: Timer/Counter2 Control Register B
 | 
			
		||||
	TCCR2B_FOC2A = 0x80 // Force Output Compare A
 | 
			
		||||
	TCCR2B_FOC2B = 0x40 // Force Output Compare B
 | 
			
		||||
	TCCR2B_WGM22 = 0x8  // Waveform Generation Mode
 | 
			
		||||
	TCCR2B_CS2   = 0x7  // Clock Select bits
 | 
			
		||||
 | 
			
		||||
	// ASSR: Asynchronous Status Register
 | 
			
		||||
	ASSR_EXCLK   = 0x40 // Enable External Clock Input
 | 
			
		||||
	ASSR_AS2     = 0x20 // Asynchronous Timer/Counter2
 | 
			
		||||
	ASSR_TCN2UB  = 0x10 // Timer/Counter2 Update Busy
 | 
			
		||||
	ASSR_OCR2AUB = 0x8  // Output Compare Register2 Update Busy
 | 
			
		||||
	ASSR_OCR2BUB = 0x4  // Output Compare Register 2 Update Busy
 | 
			
		||||
	ASSR_TCR2AUB = 0x2  // Timer/Counter Control Register2 Update Busy
 | 
			
		||||
	ASSR_TCR2BUB = 0x1  // Timer/Counter Control Register2 Update Busy
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
// Bitfields for TC16: Timer/Counter, 16-bit
 | 
			
		||||
const (
 | 
			
		||||
	// TCCR3A: Timer/Counter3 Control Register A
 | 
			
		||||
	TCCR3A_COM3A = 0xc0 // Compare Output Mode 1A, bits
 | 
			
		||||
	TCCR3A_COM3B = 0x30 // Compare Output Mode 3B, bits
 | 
			
		||||
	TCCR3A_COM3C = 0xc  // Compare Output Mode 3C, bits
 | 
			
		||||
	TCCR3A_WGM3  = 0x3  // Waveform Generation Mode
 | 
			
		||||
 | 
			
		||||
	// TCCR3B: Timer/Counter3 Control Register B
 | 
			
		||||
	TCCR3B_ICNC3 = 0x80 // Input Capture 3 Noise Canceler
 | 
			
		||||
	TCCR3B_ICES3 = 0x40 // Input Capture 3 Edge Select
 | 
			
		||||
	TCCR3B_WGM3  = 0x18 // Waveform Generation Mode
 | 
			
		||||
	TCCR3B_CS3   = 0x7  // Prescaler source of Timer/Counter 3
 | 
			
		||||
 | 
			
		||||
	// TCCR3C: Timer/Counter 3 Control Register C
 | 
			
		||||
	TCCR3C_FOC3A = 0x80 // Force Output Compare 3A
 | 
			
		||||
	TCCR3C_FOC3B = 0x40 // Force Output Compare 3B
 | 
			
		||||
	TCCR3C_FOC3C = 0x20 // Force Output Compare 3C
 | 
			
		||||
 | 
			
		||||
	// TIMSK3: Timer/Counter3 Interrupt Mask Register
 | 
			
		||||
	TIMSK3_ICIE3  = 0x20 // Timer/Counter3 Input Capture Interrupt Enable
 | 
			
		||||
	TIMSK3_OCIE3C = 0x8  // Timer/Counter3 Output Compare C Match Interrupt Enable
 | 
			
		||||
	TIMSK3_OCIE3B = 0x4  // Timer/Counter3 Output Compare B Match Interrupt Enable
 | 
			
		||||
	TIMSK3_OCIE3A = 0x2  // Timer/Counter3 Output Compare A Match Interrupt Enable
 | 
			
		||||
	TIMSK3_TOIE3  = 0x1  // Timer/Counter3 Overflow Interrupt Enable
 | 
			
		||||
 | 
			
		||||
	// TIFR3: Timer/Counter3 Interrupt Flag register
 | 
			
		||||
	TIFR3_ICF3  = 0x20 // Input Capture Flag 3
 | 
			
		||||
	TIFR3_OCF3C = 0x8  // Output Compare Flag 3C
 | 
			
		||||
	TIFR3_OCF3B = 0x4  // Output Compare Flag 3B
 | 
			
		||||
	TIFR3_OCF3A = 0x2  // Output Compare Flag 3A
 | 
			
		||||
	TIFR3_TOV3  = 0x1  // Timer/Counter3 Overflow Flag
 | 
			
		||||
 | 
			
		||||
	// TCCR1A: Timer/Counter1 Control Register A
 | 
			
		||||
	TCCR1A_COM1A = 0xc0 // Compare Output Mode 1A, bits
 | 
			
		||||
	TCCR1A_COM1B = 0x30 // Compare Output Mode 1B, bits
 | 
			
		||||
	TCCR1A_COM1C = 0xc  // Compare Output Mode 1C, bits
 | 
			
		||||
	TCCR1A_WGM1  = 0x3  // Waveform Generation Mode
 | 
			
		||||
 | 
			
		||||
	// TCCR1B: Timer/Counter1 Control Register B
 | 
			
		||||
	TCCR1B_ICNC1 = 0x80 // Input Capture 1 Noise Canceler
 | 
			
		||||
	TCCR1B_ICES1 = 0x40 // Input Capture 1 Edge Select
 | 
			
		||||
	TCCR1B_WGM1  = 0x18 // Waveform Generation Mode
 | 
			
		||||
	TCCR1B_CS1   = 0x7  // Prescaler source of Timer/Counter 1
 | 
			
		||||
 | 
			
		||||
	// TCCR1C: Timer/Counter 1 Control Register C
 | 
			
		||||
	TCCR1C_FOC1A = 0x80 // Force Output Compare 1A
 | 
			
		||||
	TCCR1C_FOC1B = 0x40 // Force Output Compare 1B
 | 
			
		||||
	TCCR1C_FOC1C = 0x20 // Force Output Compare 1C
 | 
			
		||||
 | 
			
		||||
	// TIMSK1: Timer/Counter1 Interrupt Mask Register
 | 
			
		||||
	TIMSK1_ICIE1  = 0x20 // Timer/Counter1 Input Capture Interrupt Enable
 | 
			
		||||
	TIMSK1_OCIE1C = 0x8  // Timer/Counter1 Output Compare C Match Interrupt Enable
 | 
			
		||||
	TIMSK1_OCIE1B = 0x4  // Timer/Counter1 Output Compare B Match Interrupt Enable
 | 
			
		||||
	TIMSK1_OCIE1A = 0x2  // Timer/Counter1 Output Compare A Match Interrupt Enable
 | 
			
		||||
	TIMSK1_TOIE1  = 0x1  // Timer/Counter1 Overflow Interrupt Enable
 | 
			
		||||
 | 
			
		||||
	// TIFR1: Timer/Counter1 Interrupt Flag register
 | 
			
		||||
	TIFR1_ICF1  = 0x20 // Input Capture Flag 1
 | 
			
		||||
	TIFR1_OCF1C = 0x8  // Output Compare Flag 1C
 | 
			
		||||
	TIFR1_OCF1B = 0x4  // Output Compare Flag 1B
 | 
			
		||||
	TIFR1_OCF1A = 0x2  // Output Compare Flag 1A
 | 
			
		||||
	TIFR1_TOV1  = 0x1  // Timer/Counter1 Overflow Flag
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
// Bitfields for EXINT: External Interrupts
 | 
			
		||||
const (
 | 
			
		||||
	// EICRA: External Interrupt Control Register A
 | 
			
		||||
	EICRA_ISC3 = 0xc0 // External Interrupt Sense Control Bit
 | 
			
		||||
	EICRA_ISC2 = 0x30 // External Interrupt Sense Control Bit
 | 
			
		||||
	EICRA_ISC1 = 0xc  // External Interrupt Sense Control Bit
 | 
			
		||||
	EICRA_ISC0 = 0x3  // External Interrupt Sense Control Bit
 | 
			
		||||
 | 
			
		||||
	// EICRB: External Interrupt Control Register B
 | 
			
		||||
	EICRB_ISC7 = 0xc0 // External Interrupt 7-4 Sense Control Bit
 | 
			
		||||
	EICRB_ISC6 = 0x30 // External Interrupt 7-4 Sense Control Bit
 | 
			
		||||
	EICRB_ISC5 = 0xc  // External Interrupt 7-4 Sense Control Bit
 | 
			
		||||
	EICRB_ISC4 = 0x3  // External Interrupt 7-4 Sense Control Bit
 | 
			
		||||
 | 
			
		||||
	// EIMSK: External Interrupt Mask Register
 | 
			
		||||
	EIMSK_INT = 0xff // External Interrupt Request 7 Enable
 | 
			
		||||
 | 
			
		||||
	// EIFR: External Interrupt Flag Register
 | 
			
		||||
	EIFR_INTF = 0xff // External Interrupt Flags
 | 
			
		||||
 | 
			
		||||
	// PCIFR: Pin Change Interrupt Flag Register
 | 
			
		||||
	PCIFR_PCIF0 = 0x1 // Pin Change Interrupt Flag 0
 | 
			
		||||
 | 
			
		||||
	// PCICR: Pin Change Interrupt Control Register
 | 
			
		||||
	PCICR_PCIE0 = 0x1 // Pin Change Interrupt Enable 0
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
// Bitfields for ADC: Analog-to-Digital Converter
 | 
			
		||||
const (
 | 
			
		||||
	// ADMUX: The ADC multiplexer Selection Register
 | 
			
		||||
	ADMUX_REFS  = 0xc0 // Reference Selection Bits
 | 
			
		||||
	ADMUX_ADLAR = 0x20 // Left Adjust Result
 | 
			
		||||
	ADMUX_MUX   = 0x1f // Analog Channel and Gain Selection Bits
 | 
			
		||||
 | 
			
		||||
	// ADCSRA: The ADC Control and Status register
 | 
			
		||||
	ADCSRA_ADEN  = 0x80 // ADC Enable
 | 
			
		||||
	ADCSRA_ADSC  = 0x40 // ADC Start Conversion
 | 
			
		||||
	ADCSRA_ADATE = 0x20 // ADC Auto Trigger Enable
 | 
			
		||||
	ADCSRA_ADIF  = 0x10 // ADC Interrupt Flag
 | 
			
		||||
	ADCSRA_ADIE  = 0x8  // ADC Interrupt Enable
 | 
			
		||||
	ADCSRA_ADPS  = 0x7  // ADC Prescaler Select Bits
 | 
			
		||||
 | 
			
		||||
	// DIDR0: Digital Input Disable Register 1
 | 
			
		||||
	DIDR0_ADC7D = 0x80 // ADC7 Digital input Disable
 | 
			
		||||
	DIDR0_ADC6D = 0x40 // ADC6 Digital input Disable
 | 
			
		||||
	DIDR0_ADC5D = 0x20 // ADC5 Digital input Disable
 | 
			
		||||
	DIDR0_ADC4D = 0x10 // ADC4 Digital input Disable
 | 
			
		||||
	DIDR0_ADC3D = 0x8  // ADC3 Digital input Disable
 | 
			
		||||
	DIDR0_ADC2D = 0x4  // ADC2 Digital input Disable
 | 
			
		||||
	DIDR0_ADC1D = 0x2  // ADC1 Digital input Disable
 | 
			
		||||
	DIDR0_ADC0D = 0x1  // ADC0 Digital input Disable
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
// Bitfields for AC: Analog Comparator
 | 
			
		||||
const (
 | 
			
		||||
	// ACSR: Analog Comparator Control And Status Register
 | 
			
		||||
	ACSR_ACD  = 0x80 // Analog Comparator Disable
 | 
			
		||||
	ACSR_ACBG = 0x40 // Analog Comparator Bandgap Select
 | 
			
		||||
	ACSR_ACO  = 0x20 // Analog Compare Output
 | 
			
		||||
	ACSR_ACI  = 0x10 // Analog Comparator Interrupt Flag
 | 
			
		||||
	ACSR_ACIE = 0x8  // Analog Comparator Interrupt Enable
 | 
			
		||||
	ACSR_ACIC = 0x4  // Analog Comparator Input Capture Enable
 | 
			
		||||
	ACSR_ACIS = 0x3  // Analog Comparator Interrupt Mode Select bits
 | 
			
		||||
 | 
			
		||||
	// DIDR1
 | 
			
		||||
	DIDR1_AIN1D = 0x2 // AIN1 Digital Input Disable
 | 
			
		||||
	DIDR1_AIN0D = 0x1 // AIN0 Digital Input Disable
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
// Bitfields for PLL: Phase Locked Loop
 | 
			
		||||
const (
 | 
			
		||||
	// PLLCSR: PLL Status and Control register
 | 
			
		||||
	PLLCSR_PLLP  = 0x1c // PLL prescaler Bits
 | 
			
		||||
	PLLCSR_PLLE  = 0x2  // PLL Enable Bit
 | 
			
		||||
	PLLCSR_PLOCK = 0x1  // PLL Lock Status Bit
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
// Bitfields for USB_GLOBAL: USB Controller
 | 
			
		||||
const (
 | 
			
		||||
	// USBINT
 | 
			
		||||
	USBINT_IDTI   = 0x2
 | 
			
		||||
	USBINT_VBUSTI = 0x1
 | 
			
		||||
 | 
			
		||||
	// USBSTA
 | 
			
		||||
	USBSTA_SPEED = 0x8
 | 
			
		||||
	USBSTA_ID    = 0x2
 | 
			
		||||
	USBSTA_VBUS  = 0x1
 | 
			
		||||
 | 
			
		||||
	// USBCON: USB General Control Register
 | 
			
		||||
	USBCON_USBE    = 0x80
 | 
			
		||||
	USBCON_HOST    = 0x40
 | 
			
		||||
	USBCON_FRZCLK  = 0x20
 | 
			
		||||
	USBCON_OTGPADE = 0x10
 | 
			
		||||
	USBCON_IDTE    = 0x2
 | 
			
		||||
	USBCON_VBUSTE  = 0x1
 | 
			
		||||
 | 
			
		||||
	// UHWCON: USB Hardware Configuration Register
 | 
			
		||||
	UHWCON_UIMOD  = 0x80
 | 
			
		||||
	UHWCON_UIDE   = 0x40
 | 
			
		||||
	UHWCON_UVCONE = 0x10
 | 
			
		||||
	UHWCON_UVREGE = 0x1
 | 
			
		||||
)
 | 
			
		||||
							
								
								
									
										6
									
								
								src/device/avr/at90usb1286.ld
									
										
									
									
									
										Обычный файл
									
								
							
							
						
						
									
										6
									
								
								src/device/avr/at90usb1286.ld
									
										
									
									
									
										Обычный файл
									
								
							| 
						 | 
				
			
			@ -0,0 +1,6 @@
 | 
			
		|||
/* Automatically generated file. DO NOT EDIT. */
 | 
			
		||||
/* Generated by gen-device.py from AT90USB1286.atdf, see http://packs.download.atmel.com/ */
 | 
			
		||||
 | 
			
		||||
__flash_size = 0x20000;
 | 
			
		||||
__ram_size   = 0x2000;
 | 
			
		||||
__num_isrs   = 38;
 | 
			
		||||
							
								
								
									
										1117
									
								
								src/device/avr/at90usb1287.go
									
										
									
									
									
										Обычный файл
									
								
							
							
						
						
									
										1117
									
								
								src/device/avr/at90usb1287.go
									
										
									
									
									
										Обычный файл
									
								
							
										
											
												Различия файлов не показаны, т.к. их слишком много
												Показать различия
											
										
									
								
							
							
								
								
									
										6
									
								
								src/device/avr/at90usb1287.ld
									
										
									
									
									
										Обычный файл
									
								
							
							
						
						
									
										6
									
								
								src/device/avr/at90usb1287.ld
									
										
									
									
									
										Обычный файл
									
								
							| 
						 | 
				
			
			@ -0,0 +1,6 @@
 | 
			
		|||
/* Automatically generated file. DO NOT EDIT. */
 | 
			
		||||
/* Generated by gen-device.py from AT90USB1287.atdf, see http://packs.download.atmel.com/ */
 | 
			
		||||
 | 
			
		||||
__flash_size = 0x20000;
 | 
			
		||||
__ram_size   = 0x2000;
 | 
			
		||||
__num_isrs   = 38;
 | 
			
		||||
							
								
								
									
										776
									
								
								src/device/avr/at90usb162.go
									
										
									
									
									
										Обычный файл
									
								
							
							
						
						
									
										776
									
								
								src/device/avr/at90usb162.go
									
										
									
									
									
										Обычный файл
									
								
							| 
						 | 
				
			
			@ -0,0 +1,776 @@
 | 
			
		|||
// Automatically generated file. DO NOT EDIT.
 | 
			
		||||
// Generated by gen-device.py from AT90USB162.atdf, see http://packs.download.atmel.com/
 | 
			
		||||
 | 
			
		||||
// +build avr,at90usb162
 | 
			
		||||
 | 
			
		||||
// Device information for the AT90USB162.
 | 
			
		||||
//
 | 
			
		||||
package avr
 | 
			
		||||
 | 
			
		||||
// Magic type name for the compiler.
 | 
			
		||||
type __reg uint8
 | 
			
		||||
 | 
			
		||||
// Export this magic type name.
 | 
			
		||||
type RegValue = __reg
 | 
			
		||||
 | 
			
		||||
// Some information about this device.
 | 
			
		||||
const (
 | 
			
		||||
	DEVICE = "AT90USB162"
 | 
			
		||||
	ARCH   = "AVR8"
 | 
			
		||||
	FAMILY = "megaAVR"
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
// Interrupts
 | 
			
		||||
const (
 | 
			
		||||
	IRQ_RESET        = 0  // External Pin,Power-on Reset,Brown-out Reset,Watchdog Reset,and JTAG AVR Reset. See Datasheet.
 | 
			
		||||
	IRQ_INT0         = 1  // External Interrupt Request 0
 | 
			
		||||
	IRQ_INT1         = 2  // External Interrupt Request 1
 | 
			
		||||
	IRQ_INT2         = 3  // External Interrupt Request 2
 | 
			
		||||
	IRQ_INT3         = 4  // External Interrupt Request 3
 | 
			
		||||
	IRQ_INT4         = 5  // External Interrupt Request 4
 | 
			
		||||
	IRQ_INT5         = 6  // External Interrupt Request 5
 | 
			
		||||
	IRQ_INT6         = 7  // External Interrupt Request 6
 | 
			
		||||
	IRQ_INT7         = 8  // External Interrupt Request 7
 | 
			
		||||
	IRQ_PCINT0       = 9  // Pin Change Interrupt Request 0
 | 
			
		||||
	IRQ_PCINT1       = 10 // Pin Change Interrupt Request 1
 | 
			
		||||
	IRQ_USB_GEN      = 11 // USB General Interrupt Request
 | 
			
		||||
	IRQ_USB_COM      = 12 // USB Endpoint/Pipe Interrupt Communication Request
 | 
			
		||||
	IRQ_WDT          = 13 // Watchdog Time-out Interrupt
 | 
			
		||||
	IRQ_TIMER1_CAPT  = 14 // Timer/Counter2 Capture Event
 | 
			
		||||
	IRQ_TIMER1_COMPA = 15 // Timer/Counter2 Compare Match B
 | 
			
		||||
	IRQ_TIMER1_COMPB = 16 // Timer/Counter2 Compare Match B
 | 
			
		||||
	IRQ_TIMER1_COMPC = 17 // Timer/Counter2 Compare Match C
 | 
			
		||||
	IRQ_TIMER1_OVF   = 18 // Timer/Counter1 Overflow
 | 
			
		||||
	IRQ_TIMER0_COMPA = 19 // Timer/Counter0 Compare Match A
 | 
			
		||||
	IRQ_TIMER0_COMPB = 20 // Timer/Counter0 Compare Match B
 | 
			
		||||
	IRQ_TIMER0_OVF   = 21 // Timer/Counter0 Overflow
 | 
			
		||||
	IRQ_SPI_STC      = 22 // SPI Serial Transfer Complete
 | 
			
		||||
	IRQ_USART1_RX    = 23 // USART1, Rx Complete
 | 
			
		||||
	IRQ_USART1_UDRE  = 24 // USART1 Data register Empty
 | 
			
		||||
	IRQ_USART1_TX    = 25 // USART1, Tx Complete
 | 
			
		||||
	IRQ_ANALOG_COMP  = 26 // Analog Comparator
 | 
			
		||||
	IRQ_EE_READY     = 27 // EEPROM Ready
 | 
			
		||||
	IRQ_SPM_READY    = 28 // Store Program Memory Read
 | 
			
		||||
	IRQ_max          = 28 // Highest interrupt number on this device.
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
// Peripherals
 | 
			
		||||
var (
 | 
			
		||||
	// Fuses
 | 
			
		||||
	FUSE = struct {
 | 
			
		||||
		EXTENDED __reg
 | 
			
		||||
		HIGH     __reg
 | 
			
		||||
		LOW      __reg
 | 
			
		||||
	}{
 | 
			
		||||
		EXTENDED: 0x2,
 | 
			
		||||
		HIGH:     0x1,
 | 
			
		||||
		LOW:      0x0,
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	// Lockbits
 | 
			
		||||
	LOCKBIT = struct {
 | 
			
		||||
		LOCKBIT __reg
 | 
			
		||||
	}{
 | 
			
		||||
		LOCKBIT: 0x0,
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	// I/O Port
 | 
			
		||||
	PORT = struct {
 | 
			
		||||
		PORTB __reg
 | 
			
		||||
		DDRB  __reg
 | 
			
		||||
		PINB  __reg
 | 
			
		||||
		PORTD __reg
 | 
			
		||||
		DDRD  __reg
 | 
			
		||||
		PIND  __reg
 | 
			
		||||
		PORTC __reg
 | 
			
		||||
		DDRC  __reg
 | 
			
		||||
		PINC  __reg
 | 
			
		||||
	}{
 | 
			
		||||
		PORTB: 0x25, // Port B Data Register
 | 
			
		||||
		DDRB:  0x24, // Port B Data Direction Register
 | 
			
		||||
		PINB:  0x23, // Port B Input Pins
 | 
			
		||||
		PORTD: 0x2b, // Port D Data Register
 | 
			
		||||
		DDRD:  0x2a, // Port D Data Direction Register
 | 
			
		||||
		PIND:  0x29, // Port D Input Pins
 | 
			
		||||
		PORTC: 0x28, // Port C Data Register
 | 
			
		||||
		DDRC:  0x27, // Port C Data Direction Register
 | 
			
		||||
		PINC:  0x26, // Port C Input Pins
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	// Serial Peripheral Interface
 | 
			
		||||
	SPI = struct {
 | 
			
		||||
		SPCR __reg
 | 
			
		||||
		SPSR __reg
 | 
			
		||||
		SPDR __reg
 | 
			
		||||
	}{
 | 
			
		||||
		SPCR: 0x4c, // SPI Control Register
 | 
			
		||||
		SPSR: 0x4d, // SPI Status Register
 | 
			
		||||
		SPDR: 0x4e, // SPI Data Register
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	// Bootloader
 | 
			
		||||
	BOOT_LOAD = struct {
 | 
			
		||||
		SPMCSR __reg
 | 
			
		||||
	}{
 | 
			
		||||
		SPMCSR: 0x57, // Store Program Memory Control Register
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	// EEPROM
 | 
			
		||||
	EEPROM = struct {
 | 
			
		||||
		EEARL __reg
 | 
			
		||||
		EEARH __reg
 | 
			
		||||
		EEDR  __reg
 | 
			
		||||
		EECR  __reg
 | 
			
		||||
	}{
 | 
			
		||||
		EEARL: 0x41, // EEPROM Address Register Low Bytes
 | 
			
		||||
		EEARH: 0x41, // EEPROM Address Register Low Bytes
 | 
			
		||||
		EEDR:  0x40, // EEPROM Data Register
 | 
			
		||||
		EECR:  0x3f, // EEPROM Control Register
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	// Timer/Counter, 8-bit
 | 
			
		||||
	TC8 = struct {
 | 
			
		||||
		OCR0B  __reg
 | 
			
		||||
		OCR0A  __reg
 | 
			
		||||
		TCNT0  __reg
 | 
			
		||||
		TCCR0B __reg
 | 
			
		||||
		TCCR0A __reg
 | 
			
		||||
		TIMSK0 __reg
 | 
			
		||||
		TIFR0  __reg
 | 
			
		||||
		GTCCR  __reg
 | 
			
		||||
	}{
 | 
			
		||||
		OCR0B:  0x48, // Timer/Counter0 Output Compare Register
 | 
			
		||||
		OCR0A:  0x47, // Timer/Counter0 Output Compare Register
 | 
			
		||||
		TCNT0:  0x46, // Timer/Counter0
 | 
			
		||||
		TCCR0B: 0x45, // Timer/Counter Control Register B
 | 
			
		||||
		TCCR0A: 0x44, // Timer/Counter  Control Register A
 | 
			
		||||
		TIMSK0: 0x6e, // Timer/Counter0 Interrupt Mask Register
 | 
			
		||||
		TIFR0:  0x35, // Timer/Counter0 Interrupt Flag register
 | 
			
		||||
		GTCCR:  0x43, // General Timer/Counter Control Register
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	// Timer/Counter, 16-bit
 | 
			
		||||
	TC16 = struct {
 | 
			
		||||
		TCCR1A __reg
 | 
			
		||||
		TCCR1B __reg
 | 
			
		||||
		TCCR1C __reg
 | 
			
		||||
		TCNT1L __reg
 | 
			
		||||
		TCNT1H __reg
 | 
			
		||||
		OCR1AL __reg
 | 
			
		||||
		OCR1AH __reg
 | 
			
		||||
		OCR1BL __reg
 | 
			
		||||
		OCR1BH __reg
 | 
			
		||||
		OCR1CL __reg
 | 
			
		||||
		OCR1CH __reg
 | 
			
		||||
		ICR1L  __reg
 | 
			
		||||
		ICR1H  __reg
 | 
			
		||||
		TIMSK1 __reg
 | 
			
		||||
		TIFR1  __reg
 | 
			
		||||
	}{
 | 
			
		||||
		TCCR1A: 0x80, // Timer/Counter1 Control Register A
 | 
			
		||||
		TCCR1B: 0x81, // Timer/Counter1 Control Register B
 | 
			
		||||
		TCCR1C: 0x82, // Timer/Counter 1 Control Register C
 | 
			
		||||
		TCNT1L: 0x84, // Timer/Counter1  Bytes
 | 
			
		||||
		TCNT1H: 0x84, // Timer/Counter1  Bytes
 | 
			
		||||
		OCR1AL: 0x88, // Timer/Counter1 Output Compare Register A  Bytes
 | 
			
		||||
		OCR1AH: 0x88, // Timer/Counter1 Output Compare Register A  Bytes
 | 
			
		||||
		OCR1BL: 0x8a, // Timer/Counter1 Output Compare Register B  Bytes
 | 
			
		||||
		OCR1BH: 0x8a, // Timer/Counter1 Output Compare Register B  Bytes
 | 
			
		||||
		OCR1CL: 0x8c, // Timer/Counter1 Output Compare Register C  Bytes
 | 
			
		||||
		OCR1CH: 0x8c, // Timer/Counter1 Output Compare Register C  Bytes
 | 
			
		||||
		ICR1L:  0x86, // Timer/Counter1 Input Capture Register  Bytes
 | 
			
		||||
		ICR1H:  0x86, // Timer/Counter1 Input Capture Register  Bytes
 | 
			
		||||
		TIMSK1: 0x6f, // Timer/Counter1 Interrupt Mask Register
 | 
			
		||||
		TIFR1:  0x36, // Timer/Counter1 Interrupt Flag register
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	// Phase Locked Loop
 | 
			
		||||
	PLL = struct {
 | 
			
		||||
		PLLCSR __reg
 | 
			
		||||
	}{
 | 
			
		||||
		PLLCSR: 0x49, // PLL Status and Control register
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	// USB Device Registers
 | 
			
		||||
	USB_DEVICE = struct {
 | 
			
		||||
		UEINT   __reg
 | 
			
		||||
		UEBCLX  __reg
 | 
			
		||||
		UEDATX  __reg
 | 
			
		||||
		UEIENX  __reg
 | 
			
		||||
		UESTA1X __reg
 | 
			
		||||
		UESTA0X __reg
 | 
			
		||||
		UECFG1X __reg
 | 
			
		||||
		UECFG0X __reg
 | 
			
		||||
		UECONX  __reg
 | 
			
		||||
		UERST   __reg
 | 
			
		||||
		UENUM   __reg
 | 
			
		||||
		UEINTX  __reg
 | 
			
		||||
		UDMFN   __reg
 | 
			
		||||
		UDFNUML __reg
 | 
			
		||||
		UDFNUMH __reg
 | 
			
		||||
		UDADDR  __reg
 | 
			
		||||
		UDIEN   __reg
 | 
			
		||||
		UDINT   __reg
 | 
			
		||||
		UDCON   __reg
 | 
			
		||||
		USBCON  __reg
 | 
			
		||||
		REGCR   __reg
 | 
			
		||||
	}{
 | 
			
		||||
		UEINT:   0xf4,
 | 
			
		||||
		UEBCLX:  0xf2,
 | 
			
		||||
		UEDATX:  0xf1,
 | 
			
		||||
		UEIENX:  0xf0,
 | 
			
		||||
		UESTA1X: 0xef,
 | 
			
		||||
		UESTA0X: 0xee,
 | 
			
		||||
		UECFG1X: 0xed,
 | 
			
		||||
		UECFG0X: 0xec,
 | 
			
		||||
		UECONX:  0xeb,
 | 
			
		||||
		UERST:   0xea,
 | 
			
		||||
		UENUM:   0xe9,
 | 
			
		||||
		UEINTX:  0xe8,
 | 
			
		||||
		UDMFN:   0xe6,
 | 
			
		||||
		UDFNUML: 0xe4,
 | 
			
		||||
		UDFNUMH: 0xe4,
 | 
			
		||||
		UDADDR:  0xe3,
 | 
			
		||||
		UDIEN:   0xe2,
 | 
			
		||||
		UDINT:   0xe1,
 | 
			
		||||
		UDCON:   0xe0,
 | 
			
		||||
		USBCON:  0xd8, // USB General Control Register
 | 
			
		||||
		REGCR:   0x63, // Regulator Control Register
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	// PS/2 Controller
 | 
			
		||||
	PS2 = struct {
 | 
			
		||||
		UPOE   __reg
 | 
			
		||||
		PS2CON __reg
 | 
			
		||||
	}{
 | 
			
		||||
		UPOE:   0xfb,
 | 
			
		||||
		PS2CON: 0xfa, // PS2 Pad Enable register
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	// CPU Registers
 | 
			
		||||
	CPU = struct {
 | 
			
		||||
		SREG    __reg
 | 
			
		||||
		SPL     __reg
 | 
			
		||||
		SPH     __reg
 | 
			
		||||
		MCUCR   __reg
 | 
			
		||||
		MCUSR   __reg
 | 
			
		||||
		OSCCAL  __reg
 | 
			
		||||
		CLKPR   __reg
 | 
			
		||||
		SMCR    __reg
 | 
			
		||||
		EIND    __reg
 | 
			
		||||
		GPIOR2  __reg
 | 
			
		||||
		GPIOR1  __reg
 | 
			
		||||
		GPIOR0  __reg
 | 
			
		||||
		PRR1    __reg
 | 
			
		||||
		PRR0    __reg
 | 
			
		||||
		CLKSTA  __reg
 | 
			
		||||
		CLKSEL1 __reg
 | 
			
		||||
		CLKSEL0 __reg
 | 
			
		||||
		DWDR    __reg
 | 
			
		||||
	}{
 | 
			
		||||
		SREG:    0x5f, // Status Register
 | 
			
		||||
		SPL:     0x5d, // Stack Pointer
 | 
			
		||||
		SPH:     0x5d, // Stack Pointer
 | 
			
		||||
		MCUCR:   0x55, // MCU Control Register
 | 
			
		||||
		MCUSR:   0x54, // MCU Status Register
 | 
			
		||||
		OSCCAL:  0x66, // Oscillator Calibration Value
 | 
			
		||||
		CLKPR:   0x61,
 | 
			
		||||
		SMCR:    0x53, // Sleep Mode Control Register
 | 
			
		||||
		EIND:    0x5c, // Extended Indirect Register
 | 
			
		||||
		GPIOR2:  0x4b, // General Purpose IO Register 2
 | 
			
		||||
		GPIOR1:  0x4a, // General Purpose IO Register 1
 | 
			
		||||
		GPIOR0:  0x3e, // General Purpose IO Register 0
 | 
			
		||||
		PRR1:    0x65, // Power Reduction Register1
 | 
			
		||||
		PRR0:    0x64, // Power Reduction Register0
 | 
			
		||||
		CLKSTA:  0xd2,
 | 
			
		||||
		CLKSEL1: 0xd1,
 | 
			
		||||
		CLKSEL0: 0xd0,
 | 
			
		||||
		DWDR:    0x51, // debugWire communication register
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	// External Interrupts
 | 
			
		||||
	EXINT = struct {
 | 
			
		||||
		EICRA  __reg
 | 
			
		||||
		EICRB  __reg
 | 
			
		||||
		EIMSK  __reg
 | 
			
		||||
		EIFR   __reg
 | 
			
		||||
		PCMSK0 __reg
 | 
			
		||||
		PCMSK1 __reg
 | 
			
		||||
		PCIFR  __reg
 | 
			
		||||
		PCICR  __reg
 | 
			
		||||
	}{
 | 
			
		||||
		EICRA:  0x69, // External Interrupt Control Register A
 | 
			
		||||
		EICRB:  0x6a, // External Interrupt Control Register B
 | 
			
		||||
		EIMSK:  0x3d, // External Interrupt Mask Register
 | 
			
		||||
		EIFR:   0x3c, // External Interrupt Flag Register
 | 
			
		||||
		PCMSK0: 0x6b, // Pin Change Mask Register 0
 | 
			
		||||
		PCMSK1: 0x6c, // Pin Change Mask Register 1
 | 
			
		||||
		PCIFR:  0x3b, // Pin Change Interrupt Flag Register
 | 
			
		||||
		PCICR:  0x68, // Pin Change Interrupt Control Register
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	// USART
 | 
			
		||||
	USART = struct {
 | 
			
		||||
		UDR1   __reg
 | 
			
		||||
		UCSR1A __reg
 | 
			
		||||
		UCSR1B __reg
 | 
			
		||||
		UCSR1C __reg
 | 
			
		||||
		UCSR1D __reg
 | 
			
		||||
		UBRR1L __reg
 | 
			
		||||
		UBRR1H __reg
 | 
			
		||||
	}{
 | 
			
		||||
		UDR1:   0xce, // USART I/O Data Register
 | 
			
		||||
		UCSR1A: 0xc8, // USART Control and Status Register A
 | 
			
		||||
		UCSR1B: 0xc9, // USART Control and Status Register B
 | 
			
		||||
		UCSR1C: 0xca, // USART Control and Status Register C
 | 
			
		||||
		UCSR1D: 0xcb, // USART Control and Status Register D
 | 
			
		||||
		UBRR1L: 0xcc, // USART Baud Rate Register  Bytes
 | 
			
		||||
		UBRR1H: 0xcc, // USART Baud Rate Register  Bytes
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	// Watchdog Timer
 | 
			
		||||
	WDT = struct {
 | 
			
		||||
		WDTCSR __reg
 | 
			
		||||
		WDTCKD __reg
 | 
			
		||||
	}{
 | 
			
		||||
		WDTCSR: 0x60, // Watchdog Timer Control Register
 | 
			
		||||
		WDTCKD: 0x62, // Watchdog Timer Clock Divider
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	// Analog Comparator
 | 
			
		||||
	AC = struct {
 | 
			
		||||
		ACSR  __reg
 | 
			
		||||
		DIDR1 __reg
 | 
			
		||||
	}{
 | 
			
		||||
		ACSR:  0x50, // Analog Comparator Control And Status Register
 | 
			
		||||
		DIDR1: 0x7f,
 | 
			
		||||
	}
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
// Bitfields for FUSE: Fuses
 | 
			
		||||
const (
 | 
			
		||||
	// EXTENDED
 | 
			
		||||
	EXTENDED_BODLEVEL = 0x7 // Brown-out Detector trigger level
 | 
			
		||||
	EXTENDED_HWBE     = 0x8 // Hardware Boot Enable
 | 
			
		||||
 | 
			
		||||
	// HIGH
 | 
			
		||||
	HIGH_DWEN     = 0x80 // Debug Wire enable
 | 
			
		||||
	HIGH_RSTDISBL = 0x40 // Reset Disabled (Enable PC6 as i/o pin)
 | 
			
		||||
	HIGH_SPIEN    = 0x20 // Serial program downloading (SPI) enabled
 | 
			
		||||
	HIGH_WDTON    = 0x10 // Watchdog timer always on
 | 
			
		||||
	HIGH_EESAVE   = 0x8  // Preserve EEPROM through the Chip Erase cycle
 | 
			
		||||
	HIGH_BOOTSZ   = 0x6  // Select Boot Size
 | 
			
		||||
	HIGH_BOOTRST  = 0x1  // Boot Reset vector Enabled
 | 
			
		||||
 | 
			
		||||
	// LOW
 | 
			
		||||
	LOW_CKDIV8    = 0x80 // Divide clock by 8 internally
 | 
			
		||||
	LOW_CKOUT     = 0x40 // Clock output on PORTC7
 | 
			
		||||
	LOW_SUT_CKSEL = 0x3f // Select Clock Source
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
// Bitfields for LOCKBIT: Lockbits
 | 
			
		||||
const (
 | 
			
		||||
	// LOCKBIT
 | 
			
		||||
	LOCKBIT_LB   = 0x3  // Memory Lock
 | 
			
		||||
	LOCKBIT_BLB0 = 0xc  // Boot Loader Protection Mode
 | 
			
		||||
	LOCKBIT_BLB1 = 0x30 // Boot Loader Protection Mode
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
// Bitfields for PORT: I/O Port
 | 
			
		||||
const (
 | 
			
		||||
	// PORTC: Port C Data Register
 | 
			
		||||
	PORTC_PORTC = 0xf0 // Port C Data Register bits
 | 
			
		||||
	PORTC_PORTC = 0x7  // Port C Data Register bits
 | 
			
		||||
 | 
			
		||||
	// DDRC: Port C Data Direction Register
 | 
			
		||||
	DDRC_DDC = 0xf0 // Port C Data Direction Register bits
 | 
			
		||||
	DDRC_DDC = 0x7  // Port C Data Direction Register bits
 | 
			
		||||
 | 
			
		||||
	// PINC: Port C Input Pins
 | 
			
		||||
	PINC_PINC = 0xf0 // Port C Input Pins bits
 | 
			
		||||
	PINC_PINC = 0x7  // Port C Input Pins bits
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
// Bitfields for SPI: Serial Peripheral Interface
 | 
			
		||||
const (
 | 
			
		||||
	// SPCR: SPI Control Register
 | 
			
		||||
	SPCR_SPIE = 0x80 // SPI Interrupt Enable
 | 
			
		||||
	SPCR_SPE  = 0x40 // SPI Enable
 | 
			
		||||
	SPCR_DORD = 0x20 // Data Order
 | 
			
		||||
	SPCR_MSTR = 0x10 // Master/Slave Select
 | 
			
		||||
	SPCR_CPOL = 0x8  // Clock polarity
 | 
			
		||||
	SPCR_CPHA = 0x4  // Clock Phase
 | 
			
		||||
	SPCR_SPR  = 0x3  // SPI Clock Rate Selects
 | 
			
		||||
 | 
			
		||||
	// SPSR: SPI Status Register
 | 
			
		||||
	SPSR_SPIF  = 0x80 // SPI Interrupt Flag
 | 
			
		||||
	SPSR_WCOL  = 0x40 // Write Collision Flag
 | 
			
		||||
	SPSR_SPI2X = 0x1  // Double SPI Speed Bit
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
// Bitfields for BOOT_LOAD: Bootloader
 | 
			
		||||
const (
 | 
			
		||||
	// SPMCSR: Store Program Memory Control Register
 | 
			
		||||
	SPMCSR_SPMIE  = 0x80 // SPM Interrupt Enable
 | 
			
		||||
	SPMCSR_RWWSB  = 0x40 // Read While Write Section Busy
 | 
			
		||||
	SPMCSR_SIGRD  = 0x20 // Signature Row Read
 | 
			
		||||
	SPMCSR_RWWSRE = 0x10 // Read While Write section read enable
 | 
			
		||||
	SPMCSR_BLBSET = 0x8  // Boot Lock Bit Set
 | 
			
		||||
	SPMCSR_PGWRT  = 0x4  // Page Write
 | 
			
		||||
	SPMCSR_PGERS  = 0x2  // Page Erase
 | 
			
		||||
	SPMCSR_SPMEN  = 0x1  // Store Program Memory Enable
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
// Bitfields for EEPROM: EEPROM
 | 
			
		||||
const (
 | 
			
		||||
	// EECR: EEPROM Control Register
 | 
			
		||||
	EECR_EEPM  = 0x30 // EEPROM Programming Mode Bits
 | 
			
		||||
	EECR_EERIE = 0x8  // EEPROM Ready Interrupt Enable
 | 
			
		||||
	EECR_EEMPE = 0x4  // EEPROM Master Write Enable
 | 
			
		||||
	EECR_EEPE  = 0x2  // EEPROM Write Enable
 | 
			
		||||
	EECR_EERE  = 0x1  // EEPROM Read Enable
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
// Bitfields for TC8: Timer/Counter, 8-bit
 | 
			
		||||
const (
 | 
			
		||||
	// TCCR0B: Timer/Counter Control Register B
 | 
			
		||||
	TCCR0B_FOC0A = 0x80 // Force Output Compare A
 | 
			
		||||
	TCCR0B_FOC0B = 0x40 // Force Output Compare B
 | 
			
		||||
	TCCR0B_WGM02 = 0x8
 | 
			
		||||
	TCCR0B_CS0   = 0x7 // Clock Select
 | 
			
		||||
 | 
			
		||||
	// TCCR0A: Timer/Counter  Control Register A
 | 
			
		||||
	TCCR0A_COM0A = 0xc0 // Compare Output Mode, Phase Correct PWM Mode
 | 
			
		||||
	TCCR0A_COM0B = 0x30 // Compare Output Mode, Fast PWm
 | 
			
		||||
	TCCR0A_WGM0  = 0x3  // Waveform Generation Mode
 | 
			
		||||
 | 
			
		||||
	// TIMSK0: Timer/Counter0 Interrupt Mask Register
 | 
			
		||||
	TIMSK0_OCIE0B = 0x4 // Timer/Counter0 Output Compare Match B Interrupt Enable
 | 
			
		||||
	TIMSK0_OCIE0A = 0x2 // Timer/Counter0 Output Compare Match A Interrupt Enable
 | 
			
		||||
	TIMSK0_TOIE0  = 0x1 // Timer/Counter0 Overflow Interrupt Enable
 | 
			
		||||
 | 
			
		||||
	// TIFR0: Timer/Counter0 Interrupt Flag register
 | 
			
		||||
	TIFR0_OCF0B = 0x4 // Timer/Counter0 Output Compare Flag 0B
 | 
			
		||||
	TIFR0_OCF0A = 0x2 // Timer/Counter0 Output Compare Flag 0A
 | 
			
		||||
	TIFR0_TOV0  = 0x1 // Timer/Counter0 Overflow Flag
 | 
			
		||||
 | 
			
		||||
	// GTCCR: General Timer/Counter Control Register
 | 
			
		||||
	GTCCR_TSM     = 0x80 // Timer/Counter Synchronization Mode
 | 
			
		||||
	GTCCR_PSRSYNC = 0x1  // Prescaler Reset Timer/Counter1 and Timer/Counter0
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
// Bitfields for TC16: Timer/Counter, 16-bit
 | 
			
		||||
const (
 | 
			
		||||
	// TCCR1A: Timer/Counter1 Control Register A
 | 
			
		||||
	TCCR1A_COM1A = 0xc0 // Compare Output Mode 1A, bits
 | 
			
		||||
	TCCR1A_COM1B = 0x30 // Compare Output Mode 1B, bits
 | 
			
		||||
	TCCR1A_COM1C = 0xc  // Compare Output Mode 1C, bits
 | 
			
		||||
	TCCR1A_WGM1  = 0x3  // Waveform Generation Mode
 | 
			
		||||
 | 
			
		||||
	// TCCR1B: Timer/Counter1 Control Register B
 | 
			
		||||
	TCCR1B_ICNC1 = 0x80 // Input Capture 1 Noise Canceler
 | 
			
		||||
	TCCR1B_ICES1 = 0x40 // Input Capture 1 Edge Select
 | 
			
		||||
	TCCR1B_WGM1  = 0x18 // Waveform Generation Mode
 | 
			
		||||
	TCCR1B_CS1   = 0x7  // Prescaler source of Timer/Counter 1
 | 
			
		||||
 | 
			
		||||
	// TCCR1C: Timer/Counter 1 Control Register C
 | 
			
		||||
	TCCR1C_FOC1A = 0x80 // Force Output Compare 1A
 | 
			
		||||
	TCCR1C_FOC1B = 0x40 // Force Output Compare 1B
 | 
			
		||||
	TCCR1C_FOC1C = 0x20 // Force Output Compare 1C
 | 
			
		||||
 | 
			
		||||
	// TIMSK1: Timer/Counter1 Interrupt Mask Register
 | 
			
		||||
	TIMSK1_ICIE1  = 0x20 // Timer/Counter1 Input Capture Interrupt Enable
 | 
			
		||||
	TIMSK1_OCIE1C = 0x8  // Timer/Counter1 Output Compare C Match Interrupt Enable
 | 
			
		||||
	TIMSK1_OCIE1B = 0x4  // Timer/Counter1 Output Compare B Match Interrupt Enable
 | 
			
		||||
	TIMSK1_OCIE1A = 0x2  // Timer/Counter1 Output Compare A Match Interrupt Enable
 | 
			
		||||
	TIMSK1_TOIE1  = 0x1  // Timer/Counter1 Overflow Interrupt Enable
 | 
			
		||||
 | 
			
		||||
	// TIFR1: Timer/Counter1 Interrupt Flag register
 | 
			
		||||
	TIFR1_ICF1  = 0x20 // Input Capture Flag 1
 | 
			
		||||
	TIFR1_OCF1C = 0x8  // Output Compare Flag 1C
 | 
			
		||||
	TIFR1_OCF1B = 0x4  // Output Compare Flag 1B
 | 
			
		||||
	TIFR1_OCF1A = 0x2  // Output Compare Flag 1A
 | 
			
		||||
	TIFR1_TOV1  = 0x1  // Timer/Counter1 Overflow Flag
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
// Bitfields for PLL: Phase Locked Loop
 | 
			
		||||
const (
 | 
			
		||||
	// PLLCSR: PLL Status and Control register
 | 
			
		||||
	PLLCSR_PLLP  = 0x1c // PLL prescaler Bits
 | 
			
		||||
	PLLCSR_PLLE  = 0x2  // PLL Enable Bit
 | 
			
		||||
	PLLCSR_PLOCK = 0x1  // PLL Lock Status Bit
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
// Bitfields for USB_DEVICE: USB Device Registers
 | 
			
		||||
const (
 | 
			
		||||
	// UEIENX
 | 
			
		||||
	UEIENX_FLERRE   = 0x80
 | 
			
		||||
	UEIENX_NAKINE   = 0x40
 | 
			
		||||
	UEIENX_NAKOUTE  = 0x10
 | 
			
		||||
	UEIENX_RXSTPE   = 0x8
 | 
			
		||||
	UEIENX_RXOUTE   = 0x4
 | 
			
		||||
	UEIENX_STALLEDE = 0x2
 | 
			
		||||
	UEIENX_TXINE    = 0x1
 | 
			
		||||
 | 
			
		||||
	// UESTA1X
 | 
			
		||||
	UESTA1X_CTRLDIR = 0x4
 | 
			
		||||
	UESTA1X_CURRBK  = 0x3
 | 
			
		||||
 | 
			
		||||
	// UESTA0X
 | 
			
		||||
	UESTA0X_CFGOK   = 0x80
 | 
			
		||||
	UESTA0X_OVERFI  = 0x40
 | 
			
		||||
	UESTA0X_UNDERFI = 0x20
 | 
			
		||||
	UESTA0X_DTSEQ   = 0xc
 | 
			
		||||
	UESTA0X_NBUSYBK = 0x3
 | 
			
		||||
 | 
			
		||||
	// UECFG1X
 | 
			
		||||
	UECFG1X_EPSIZE = 0x70
 | 
			
		||||
	UECFG1X_EPBK   = 0xc
 | 
			
		||||
	UECFG1X_ALLOC  = 0x2
 | 
			
		||||
 | 
			
		||||
	// UECFG0X
 | 
			
		||||
	UECFG0X_EPTYPE = 0xc0
 | 
			
		||||
	UECFG0X_EPDIR  = 0x1
 | 
			
		||||
 | 
			
		||||
	// UECONX
 | 
			
		||||
	UECONX_STALLRQ  = 0x20
 | 
			
		||||
	UECONX_STALLRQC = 0x10
 | 
			
		||||
	UECONX_RSTDT    = 0x8
 | 
			
		||||
	UECONX_EPEN     = 0x1
 | 
			
		||||
 | 
			
		||||
	// UERST
 | 
			
		||||
	UERST_EPRST = 0x1f
 | 
			
		||||
 | 
			
		||||
	// UEINTX
 | 
			
		||||
	UEINTX_FIFOCON  = 0x80
 | 
			
		||||
	UEINTX_NAKINI   = 0x40
 | 
			
		||||
	UEINTX_RWAL     = 0x20
 | 
			
		||||
	UEINTX_NAKOUTI  = 0x10
 | 
			
		||||
	UEINTX_RXSTPI   = 0x8
 | 
			
		||||
	UEINTX_RXOUTI   = 0x4
 | 
			
		||||
	UEINTX_STALLEDI = 0x2
 | 
			
		||||
	UEINTX_TXINI    = 0x1
 | 
			
		||||
 | 
			
		||||
	// UDMFN
 | 
			
		||||
	UDMFN_FNCERR = 0x10
 | 
			
		||||
 | 
			
		||||
	// UDADDR
 | 
			
		||||
	UDADDR_ADDEN = 0x80
 | 
			
		||||
	UDADDR_UADD  = 0x7f
 | 
			
		||||
 | 
			
		||||
	// UDIEN
 | 
			
		||||
	UDIEN_UPRSME  = 0x40
 | 
			
		||||
	UDIEN_EORSME  = 0x20
 | 
			
		||||
	UDIEN_WAKEUPE = 0x10
 | 
			
		||||
	UDIEN_EORSTE  = 0x8
 | 
			
		||||
	UDIEN_SOFE    = 0x4
 | 
			
		||||
	UDIEN_SUSPE   = 0x1
 | 
			
		||||
 | 
			
		||||
	// UDINT
 | 
			
		||||
	UDINT_UPRSMI  = 0x40
 | 
			
		||||
	UDINT_EORSMI  = 0x20
 | 
			
		||||
	UDINT_WAKEUPI = 0x10
 | 
			
		||||
	UDINT_EORSTI  = 0x8
 | 
			
		||||
	UDINT_SOFI    = 0x4
 | 
			
		||||
	UDINT_SUSPI   = 0x1
 | 
			
		||||
 | 
			
		||||
	// UDCON
 | 
			
		||||
	UDCON_RSTCPU = 0x4
 | 
			
		||||
	UDCON_RMWKUP = 0x2
 | 
			
		||||
	UDCON_DETACH = 0x1
 | 
			
		||||
 | 
			
		||||
	// USBCON: USB General Control Register
 | 
			
		||||
	USBCON_USBE   = 0x80
 | 
			
		||||
	USBCON_FRZCLK = 0x20
 | 
			
		||||
 | 
			
		||||
	// REGCR: Regulator Control Register
 | 
			
		||||
	REGCR_REGDIS = 0x1
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
// Bitfields for PS2: PS/2 Controller
 | 
			
		||||
const (
 | 
			
		||||
	// UPOE
 | 
			
		||||
	UPOE_UPWE  = 0xc0
 | 
			
		||||
	UPOE_UPDRV = 0x30
 | 
			
		||||
	UPOE_SCKI  = 0x8
 | 
			
		||||
	UPOE_DATAI = 0x4
 | 
			
		||||
	UPOE_DPI   = 0x2
 | 
			
		||||
	UPOE_DMI   = 0x1
 | 
			
		||||
 | 
			
		||||
	// PS2CON: PS2 Pad Enable register
 | 
			
		||||
	PS2CON_PS2EN = 0x1 // Enable
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
// Bitfields for CPU: CPU Registers
 | 
			
		||||
const (
 | 
			
		||||
	// SREG: Status Register
 | 
			
		||||
	SREG_I = 0x80 // Global Interrupt Enable
 | 
			
		||||
	SREG_T = 0x40 // Bit Copy Storage
 | 
			
		||||
	SREG_H = 0x20 // Half Carry Flag
 | 
			
		||||
	SREG_S = 0x10 // Sign Bit
 | 
			
		||||
	SREG_V = 0x8  // Two's Complement Overflow Flag
 | 
			
		||||
	SREG_N = 0x4  // Negative Flag
 | 
			
		||||
	SREG_Z = 0x2  // Zero Flag
 | 
			
		||||
	SREG_C = 0x1  // Carry Flag
 | 
			
		||||
 | 
			
		||||
	// MCUCR: MCU Control Register
 | 
			
		||||
	MCUCR_PUD   = 0x10 // Pull-up disable
 | 
			
		||||
	MCUCR_IVSEL = 0x2  // Interrupt Vector Select
 | 
			
		||||
	MCUCR_IVCE  = 0x1  // Interrupt Vector Change Enable
 | 
			
		||||
 | 
			
		||||
	// MCUSR: MCU Status Register
 | 
			
		||||
	MCUSR_USBRF = 0x20 // USB reset flag
 | 
			
		||||
	MCUSR_WDRF  = 0x8  // Watchdog Reset Flag
 | 
			
		||||
	MCUSR_BORF  = 0x4  // Brown-out Reset Flag
 | 
			
		||||
	MCUSR_EXTRF = 0x2  // External Reset Flag
 | 
			
		||||
	MCUSR_PORF  = 0x1  // Power-on reset flag
 | 
			
		||||
 | 
			
		||||
	// OSCCAL: Oscillator Calibration Value
 | 
			
		||||
	OSCCAL_OSCCAL = 0xff // Oscillator Calibration
 | 
			
		||||
 | 
			
		||||
	// CLKPR
 | 
			
		||||
	CLKPR_CLKPCE = 0x80
 | 
			
		||||
	CLKPR_CLKPS  = 0xf
 | 
			
		||||
 | 
			
		||||
	// SMCR: Sleep Mode Control Register
 | 
			
		||||
	SMCR_SM = 0xe // Sleep Mode Select bits
 | 
			
		||||
	SMCR_SE = 0x1 // Sleep Enable
 | 
			
		||||
 | 
			
		||||
	// GPIOR2: General Purpose IO Register 2
 | 
			
		||||
	GPIOR2_GPIOR = 0xff // General Purpose IO Register 2 bis
 | 
			
		||||
 | 
			
		||||
	// GPIOR1: General Purpose IO Register 1
 | 
			
		||||
	GPIOR1_GPIOR = 0xff // General Purpose IO Register 1 bis
 | 
			
		||||
 | 
			
		||||
	// GPIOR0: General Purpose IO Register 0
 | 
			
		||||
	GPIOR0_GPIOR07 = 0x80 // General Purpose IO Register 0 bit 7
 | 
			
		||||
	GPIOR0_GPIOR06 = 0x40 // General Purpose IO Register 0 bit 6
 | 
			
		||||
	GPIOR0_GPIOR05 = 0x20 // General Purpose IO Register 0 bit 5
 | 
			
		||||
	GPIOR0_GPIOR04 = 0x10 // General Purpose IO Register 0 bit 4
 | 
			
		||||
	GPIOR0_GPIOR03 = 0x8  // General Purpose IO Register 0 bit 3
 | 
			
		||||
	GPIOR0_GPIOR02 = 0x4  // General Purpose IO Register 0 bit 2
 | 
			
		||||
	GPIOR0_GPIOR01 = 0x2  // General Purpose IO Register 0 bit 1
 | 
			
		||||
	GPIOR0_GPIOR00 = 0x1  // General Purpose IO Register 0 bit 0
 | 
			
		||||
 | 
			
		||||
	// PRR1: Power Reduction Register1
 | 
			
		||||
	PRR1_PRUSB    = 0x80 // Power Reduction USB
 | 
			
		||||
	PRR1_PRUSART1 = 0x1  // Power Reduction USART1
 | 
			
		||||
 | 
			
		||||
	// PRR0: Power Reduction Register0
 | 
			
		||||
	PRR0_PRTIM0 = 0x20 // Power Reduction Timer/Counter0
 | 
			
		||||
	PRR0_PRTIM1 = 0x8  // Power Reduction Timer/Counter1
 | 
			
		||||
	PRR0_PRSPI  = 0x4  // Power Reduction Serial Peripheral Interface
 | 
			
		||||
 | 
			
		||||
	// CLKSTA
 | 
			
		||||
	CLKSTA_RCON  = 0x2
 | 
			
		||||
	CLKSTA_EXTON = 0x1
 | 
			
		||||
 | 
			
		||||
	// CLKSEL1
 | 
			
		||||
	CLKSEL1_RCCKSEL = 0xf0
 | 
			
		||||
	CLKSEL1_EXCKSEL = 0xf
 | 
			
		||||
 | 
			
		||||
	// CLKSEL0
 | 
			
		||||
	CLKSEL0_RCSUT = 0xc0
 | 
			
		||||
	CLKSEL0_EXSUT = 0x30
 | 
			
		||||
	CLKSEL0_RCE   = 0x8
 | 
			
		||||
	CLKSEL0_EXTE  = 0x4
 | 
			
		||||
	CLKSEL0_CLKS  = 0x1
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
// Bitfields for EXINT: External Interrupts
 | 
			
		||||
const (
 | 
			
		||||
	// EICRA: External Interrupt Control Register A
 | 
			
		||||
	EICRA_ISC3 = 0xc0 // External Interrupt Sense Control Bit
 | 
			
		||||
	EICRA_ISC2 = 0x30 // External Interrupt Sense Control Bit
 | 
			
		||||
	EICRA_ISC1 = 0xc  // External Interrupt Sense Control Bit
 | 
			
		||||
	EICRA_ISC0 = 0x3  // External Interrupt Sense Control Bit
 | 
			
		||||
 | 
			
		||||
	// EICRB: External Interrupt Control Register B
 | 
			
		||||
	EICRB_ISC7 = 0xc0 // External Interrupt 7-4 Sense Control Bit
 | 
			
		||||
	EICRB_ISC6 = 0x30 // External Interrupt 7-4 Sense Control Bit
 | 
			
		||||
	EICRB_ISC5 = 0xc  // External Interrupt 7-4 Sense Control Bit
 | 
			
		||||
	EICRB_ISC4 = 0x3  // External Interrupt 7-4 Sense Control Bit
 | 
			
		||||
 | 
			
		||||
	// EIMSK: External Interrupt Mask Register
 | 
			
		||||
	EIMSK_INT = 0xff // External Interrupt Request 7 Enable
 | 
			
		||||
 | 
			
		||||
	// EIFR: External Interrupt Flag Register
 | 
			
		||||
	EIFR_INTF = 0xff // External Interrupt Flags
 | 
			
		||||
 | 
			
		||||
	// PCMSK0: Pin Change Mask Register 0
 | 
			
		||||
	PCMSK0_PCINT = 0xff // Pin Change Enable Masks
 | 
			
		||||
 | 
			
		||||
	// PCMSK1: Pin Change Mask Register 1
 | 
			
		||||
	PCMSK1_PCINT = 0x1f
 | 
			
		||||
 | 
			
		||||
	// PCIFR: Pin Change Interrupt Flag Register
 | 
			
		||||
	PCIFR_PCIF = 0x3 // Pin Change Interrupt Flags
 | 
			
		||||
 | 
			
		||||
	// PCICR: Pin Change Interrupt Control Register
 | 
			
		||||
	PCICR_PCIE = 0x3 // Pin Change Interrupt Enables
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
// Bitfields for USART: USART
 | 
			
		||||
const (
 | 
			
		||||
	// UCSR1A: USART Control and Status Register A
 | 
			
		||||
	UCSR1A_RXC1  = 0x80 // USART Receive Complete
 | 
			
		||||
	UCSR1A_TXC1  = 0x40 // USART Transmitt Complete
 | 
			
		||||
	UCSR1A_UDRE1 = 0x20 // USART Data Register Empty
 | 
			
		||||
	UCSR1A_FE1   = 0x10 // Framing Error
 | 
			
		||||
	UCSR1A_DOR1  = 0x8  // Data overRun
 | 
			
		||||
	UCSR1A_UPE1  = 0x4  // Parity Error
 | 
			
		||||
	UCSR1A_U2X1  = 0x2  // Double the USART transmission speed
 | 
			
		||||
	UCSR1A_MPCM1 = 0x1  // Multi-processor Communication Mode
 | 
			
		||||
 | 
			
		||||
	// UCSR1B: USART Control and Status Register B
 | 
			
		||||
	UCSR1B_RXCIE1 = 0x80 // RX Complete Interrupt Enable
 | 
			
		||||
	UCSR1B_TXCIE1 = 0x40 // TX Complete Interrupt Enable
 | 
			
		||||
	UCSR1B_UDRIE1 = 0x20 // USART Data register Empty Interrupt Enable
 | 
			
		||||
	UCSR1B_RXEN1  = 0x10 // Receiver Enable
 | 
			
		||||
	UCSR1B_TXEN1  = 0x8  // Transmitter Enable
 | 
			
		||||
	UCSR1B_UCSZ12 = 0x4  // Character Size
 | 
			
		||||
	UCSR1B_RXB81  = 0x2  // Receive Data Bit 8
 | 
			
		||||
	UCSR1B_TXB81  = 0x1  // Transmit Data Bit 8
 | 
			
		||||
 | 
			
		||||
	// UCSR1C: USART Control and Status Register C
 | 
			
		||||
	UCSR1C_UMSEL1 = 0xc0 // USART Mode Select
 | 
			
		||||
	UCSR1C_UPM1   = 0x30 // Parity Mode Bits
 | 
			
		||||
	UCSR1C_USBS1  = 0x8  // Stop Bit Select
 | 
			
		||||
	UCSR1C_UCSZ1  = 0x6  // Character Size
 | 
			
		||||
	UCSR1C_UCPOL1 = 0x1  // Clock Polarity
 | 
			
		||||
 | 
			
		||||
	// UCSR1D: USART Control and Status Register D
 | 
			
		||||
	UCSR1D_CTSEN = 0x2 // CTS Enable
 | 
			
		||||
	UCSR1D_RTSEN = 0x1 // RTS Enable
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
// Bitfields for WDT: Watchdog Timer
 | 
			
		||||
const (
 | 
			
		||||
	// WDTCSR: Watchdog Timer Control Register
 | 
			
		||||
	WDTCSR_WDIF = 0x80 // Watchdog Timeout Interrupt Flag
 | 
			
		||||
	WDTCSR_WDIE = 0x40 // Watchdog Timeout Interrupt Enable
 | 
			
		||||
	WDTCSR_WDP  = 0x27 // Watchdog Timer Prescaler Bits
 | 
			
		||||
	WDTCSR_WDCE = 0x10 // Watchdog Change Enable
 | 
			
		||||
	WDTCSR_WDE  = 0x8  // Watch Dog Enable
 | 
			
		||||
 | 
			
		||||
	// WDTCKD: Watchdog Timer Clock Divider
 | 
			
		||||
	WDTCKD_WDEWIF = 0x8 // Watchdog Early Warning Interrupt Flag
 | 
			
		||||
	WDTCKD_WDEWIE = 0x4 // Watchdog Early Warning Interrupt Enable
 | 
			
		||||
	WDTCKD_WCLKD  = 0x3 // Watchdog Timer Clock Dividers
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
// Bitfields for AC: Analog Comparator
 | 
			
		||||
const (
 | 
			
		||||
	// ACSR: Analog Comparator Control And Status Register
 | 
			
		||||
	ACSR_ACD  = 0x80 // Analog Comparator Disable
 | 
			
		||||
	ACSR_ACBG = 0x40 // Analog Comparator Bandgap Select
 | 
			
		||||
	ACSR_ACO  = 0x20 // Analog Compare Output
 | 
			
		||||
	ACSR_ACI  = 0x10 // Analog Comparator Interrupt Flag
 | 
			
		||||
	ACSR_ACIE = 0x8  // Analog Comparator Interrupt Enable
 | 
			
		||||
	ACSR_ACIC = 0x4  // Analog Comparator Input Capture Enable
 | 
			
		||||
	ACSR_ACIS = 0x3  // Analog Comparator Interrupt Mode Select bits
 | 
			
		||||
 | 
			
		||||
	// DIDR1
 | 
			
		||||
	DIDR1_AIN1D = 0x2 // AIN1 Digital Input Disable
 | 
			
		||||
	DIDR1_AIN0D = 0x1 // AIN0 Digital Input Disable
 | 
			
		||||
)
 | 
			
		||||
							
								
								
									
										6
									
								
								src/device/avr/at90usb162.ld
									
										
									
									
									
										Обычный файл
									
								
							
							
						
						
									
										6
									
								
								src/device/avr/at90usb162.ld
									
										
									
									
									
										Обычный файл
									
								
							| 
						 | 
				
			
			@ -0,0 +1,6 @@
 | 
			
		|||
/* Automatically generated file. DO NOT EDIT. */
 | 
			
		||||
/* Generated by gen-device.py from AT90USB162.atdf, see http://packs.download.atmel.com/ */
 | 
			
		||||
 | 
			
		||||
__flash_size = 0x4000;
 | 
			
		||||
__ram_size   = 0x200;
 | 
			
		||||
__num_isrs   = 29;
 | 
			
		||||
							
								
								
									
										1117
									
								
								src/device/avr/at90usb646.go
									
										
									
									
									
										Обычный файл
									
								
							
							
						
						
									
										1117
									
								
								src/device/avr/at90usb646.go
									
										
									
									
									
										Обычный файл
									
								
							
										
											
												Различия файлов не показаны, т.к. их слишком много
												Показать различия
											
										
									
								
							
							
								
								
									
										6
									
								
								src/device/avr/at90usb646.ld
									
										
									
									
									
										Обычный файл
									
								
							
							
						
						
									
										6
									
								
								src/device/avr/at90usb646.ld
									
										
									
									
									
										Обычный файл
									
								
							| 
						 | 
				
			
			@ -0,0 +1,6 @@
 | 
			
		|||
/* Automatically generated file. DO NOT EDIT. */
 | 
			
		||||
/* Generated by gen-device.py from AT90USB646.atdf, see http://packs.download.atmel.com/ */
 | 
			
		||||
 | 
			
		||||
__flash_size = 0x10000;
 | 
			
		||||
__ram_size   = 0x1000;
 | 
			
		||||
__num_isrs   = 38;
 | 
			
		||||
							
								
								
									
										1117
									
								
								src/device/avr/at90usb647.go
									
										
									
									
									
										Обычный файл
									
								
							
							
						
						
									
										1117
									
								
								src/device/avr/at90usb647.go
									
										
									
									
									
										Обычный файл
									
								
							
										
											
												Различия файлов не показаны, т.к. их слишком много
												Показать различия
											
										
									
								
							
							
								
								
									
										6
									
								
								src/device/avr/at90usb647.ld
									
										
									
									
									
										Обычный файл
									
								
							
							
						
						
									
										6
									
								
								src/device/avr/at90usb647.ld
									
										
									
									
									
										Обычный файл
									
								
							| 
						 | 
				
			
			@ -0,0 +1,6 @@
 | 
			
		|||
/* Automatically generated file. DO NOT EDIT. */
 | 
			
		||||
/* Generated by gen-device.py from AT90USB647.atdf, see http://packs.download.atmel.com/ */
 | 
			
		||||
 | 
			
		||||
__flash_size = 0x10000;
 | 
			
		||||
__ram_size   = 0x1000;
 | 
			
		||||
__num_isrs   = 38;
 | 
			
		||||
							
								
								
									
										776
									
								
								src/device/avr/at90usb82.go
									
										
									
									
									
										Обычный файл
									
								
							
							
						
						
									
										776
									
								
								src/device/avr/at90usb82.go
									
										
									
									
									
										Обычный файл
									
								
							| 
						 | 
				
			
			@ -0,0 +1,776 @@
 | 
			
		|||
// Automatically generated file. DO NOT EDIT.
 | 
			
		||||
// Generated by gen-device.py from AT90USB82.atdf, see http://packs.download.atmel.com/
 | 
			
		||||
 | 
			
		||||
// +build avr,at90usb82
 | 
			
		||||
 | 
			
		||||
// Device information for the AT90USB82.
 | 
			
		||||
//
 | 
			
		||||
package avr
 | 
			
		||||
 | 
			
		||||
// Magic type name for the compiler.
 | 
			
		||||
type __reg uint8
 | 
			
		||||
 | 
			
		||||
// Export this magic type name.
 | 
			
		||||
type RegValue = __reg
 | 
			
		||||
 | 
			
		||||
// Some information about this device.
 | 
			
		||||
const (
 | 
			
		||||
	DEVICE = "AT90USB82"
 | 
			
		||||
	ARCH   = "AVR8"
 | 
			
		||||
	FAMILY = "megaAVR"
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
// Interrupts
 | 
			
		||||
const (
 | 
			
		||||
	IRQ_RESET        = 0  // External Pin,Power-on Reset,Brown-out Reset,Watchdog Reset,and JTAG AVR Reset. See Datasheet.
 | 
			
		||||
	IRQ_INT0         = 1  // External Interrupt Request 0
 | 
			
		||||
	IRQ_INT1         = 2  // External Interrupt Request 1
 | 
			
		||||
	IRQ_INT2         = 3  // External Interrupt Request 2
 | 
			
		||||
	IRQ_INT3         = 4  // External Interrupt Request 3
 | 
			
		||||
	IRQ_INT4         = 5  // External Interrupt Request 4
 | 
			
		||||
	IRQ_INT5         = 6  // External Interrupt Request 5
 | 
			
		||||
	IRQ_INT6         = 7  // External Interrupt Request 6
 | 
			
		||||
	IRQ_INT7         = 8  // External Interrupt Request 7
 | 
			
		||||
	IRQ_PCINT0       = 9  // Pin Change Interrupt Request 0
 | 
			
		||||
	IRQ_PCINT1       = 10 // Pin Change Interrupt Request 1
 | 
			
		||||
	IRQ_USB_GEN      = 11 // USB General Interrupt Request
 | 
			
		||||
	IRQ_USB_COM      = 12 // USB Endpoint/Pipe Interrupt Communication Request
 | 
			
		||||
	IRQ_WDT          = 13 // Watchdog Time-out Interrupt
 | 
			
		||||
	IRQ_TIMER1_CAPT  = 14 // Timer/Counter2 Capture Event
 | 
			
		||||
	IRQ_TIMER1_COMPA = 15 // Timer/Counter2 Compare Match B
 | 
			
		||||
	IRQ_TIMER1_COMPB = 16 // Timer/Counter2 Compare Match B
 | 
			
		||||
	IRQ_TIMER1_COMPC = 17 // Timer/Counter2 Compare Match C
 | 
			
		||||
	IRQ_TIMER1_OVF   = 18 // Timer/Counter1 Overflow
 | 
			
		||||
	IRQ_TIMER0_COMPA = 19 // Timer/Counter0 Compare Match A
 | 
			
		||||
	IRQ_TIMER0_COMPB = 20 // Timer/Counter0 Compare Match B
 | 
			
		||||
	IRQ_TIMER0_OVF   = 21 // Timer/Counter0 Overflow
 | 
			
		||||
	IRQ_SPI_STC      = 22 // SPI Serial Transfer Complete
 | 
			
		||||
	IRQ_USART1_RX    = 23 // USART1, Rx Complete
 | 
			
		||||
	IRQ_USART1_UDRE  = 24 // USART1 Data register Empty
 | 
			
		||||
	IRQ_USART1_TX    = 25 // USART1, Tx Complete
 | 
			
		||||
	IRQ_ANALOG_COMP  = 26 // Analog Comparator
 | 
			
		||||
	IRQ_EE_READY     = 27 // EEPROM Ready
 | 
			
		||||
	IRQ_SPM_READY    = 28 // Store Program Memory Read
 | 
			
		||||
	IRQ_max          = 28 // Highest interrupt number on this device.
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
// Peripherals
 | 
			
		||||
var (
 | 
			
		||||
	// Fuses
 | 
			
		||||
	FUSE = struct {
 | 
			
		||||
		EXTENDED __reg
 | 
			
		||||
		HIGH     __reg
 | 
			
		||||
		LOW      __reg
 | 
			
		||||
	}{
 | 
			
		||||
		EXTENDED: 0x2,
 | 
			
		||||
		HIGH:     0x1,
 | 
			
		||||
		LOW:      0x0,
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	// Lockbits
 | 
			
		||||
	LOCKBIT = struct {
 | 
			
		||||
		LOCKBIT __reg
 | 
			
		||||
	}{
 | 
			
		||||
		LOCKBIT: 0x0,
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	// I/O Port
 | 
			
		||||
	PORT = struct {
 | 
			
		||||
		PORTB __reg
 | 
			
		||||
		DDRB  __reg
 | 
			
		||||
		PINB  __reg
 | 
			
		||||
		PORTD __reg
 | 
			
		||||
		DDRD  __reg
 | 
			
		||||
		PIND  __reg
 | 
			
		||||
		PORTC __reg
 | 
			
		||||
		DDRC  __reg
 | 
			
		||||
		PINC  __reg
 | 
			
		||||
	}{
 | 
			
		||||
		PORTB: 0x25, // Port B Data Register
 | 
			
		||||
		DDRB:  0x24, // Port B Data Direction Register
 | 
			
		||||
		PINB:  0x23, // Port B Input Pins
 | 
			
		||||
		PORTD: 0x2b, // Port D Data Register
 | 
			
		||||
		DDRD:  0x2a, // Port D Data Direction Register
 | 
			
		||||
		PIND:  0x29, // Port D Input Pins
 | 
			
		||||
		PORTC: 0x28, // Port C Data Register
 | 
			
		||||
		DDRC:  0x27, // Port C Data Direction Register
 | 
			
		||||
		PINC:  0x26, // Port C Input Pins
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	// Serial Peripheral Interface
 | 
			
		||||
	SPI = struct {
 | 
			
		||||
		SPCR __reg
 | 
			
		||||
		SPSR __reg
 | 
			
		||||
		SPDR __reg
 | 
			
		||||
	}{
 | 
			
		||||
		SPCR: 0x4c, // SPI Control Register
 | 
			
		||||
		SPSR: 0x4d, // SPI Status Register
 | 
			
		||||
		SPDR: 0x4e, // SPI Data Register
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	// Bootloader
 | 
			
		||||
	BOOT_LOAD = struct {
 | 
			
		||||
		SPMCSR __reg
 | 
			
		||||
	}{
 | 
			
		||||
		SPMCSR: 0x57, // Store Program Memory Control Register
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	// EEPROM
 | 
			
		||||
	EEPROM = struct {
 | 
			
		||||
		EEARL __reg
 | 
			
		||||
		EEARH __reg
 | 
			
		||||
		EEDR  __reg
 | 
			
		||||
		EECR  __reg
 | 
			
		||||
	}{
 | 
			
		||||
		EEARL: 0x41, // EEPROM Address Register Low Bytes
 | 
			
		||||
		EEARH: 0x41, // EEPROM Address Register Low Bytes
 | 
			
		||||
		EEDR:  0x40, // EEPROM Data Register
 | 
			
		||||
		EECR:  0x3f, // EEPROM Control Register
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	// Timer/Counter, 8-bit
 | 
			
		||||
	TC8 = struct {
 | 
			
		||||
		OCR0B  __reg
 | 
			
		||||
		OCR0A  __reg
 | 
			
		||||
		TCNT0  __reg
 | 
			
		||||
		TCCR0B __reg
 | 
			
		||||
		TCCR0A __reg
 | 
			
		||||
		TIMSK0 __reg
 | 
			
		||||
		TIFR0  __reg
 | 
			
		||||
		GTCCR  __reg
 | 
			
		||||
	}{
 | 
			
		||||
		OCR0B:  0x48, // Timer/Counter0 Output Compare Register
 | 
			
		||||
		OCR0A:  0x47, // Timer/Counter0 Output Compare Register
 | 
			
		||||
		TCNT0:  0x46, // Timer/Counter0
 | 
			
		||||
		TCCR0B: 0x45, // Timer/Counter Control Register B
 | 
			
		||||
		TCCR0A: 0x44, // Timer/Counter  Control Register A
 | 
			
		||||
		TIMSK0: 0x6e, // Timer/Counter0 Interrupt Mask Register
 | 
			
		||||
		TIFR0:  0x35, // Timer/Counter0 Interrupt Flag register
 | 
			
		||||
		GTCCR:  0x43, // General Timer/Counter Control Register
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	// Timer/Counter, 16-bit
 | 
			
		||||
	TC16 = struct {
 | 
			
		||||
		TCCR1A __reg
 | 
			
		||||
		TCCR1B __reg
 | 
			
		||||
		TCCR1C __reg
 | 
			
		||||
		TCNT1L __reg
 | 
			
		||||
		TCNT1H __reg
 | 
			
		||||
		OCR1AL __reg
 | 
			
		||||
		OCR1AH __reg
 | 
			
		||||
		OCR1BL __reg
 | 
			
		||||
		OCR1BH __reg
 | 
			
		||||
		OCR1CL __reg
 | 
			
		||||
		OCR1CH __reg
 | 
			
		||||
		ICR1L  __reg
 | 
			
		||||
		ICR1H  __reg
 | 
			
		||||
		TIMSK1 __reg
 | 
			
		||||
		TIFR1  __reg
 | 
			
		||||
	}{
 | 
			
		||||
		TCCR1A: 0x80, // Timer/Counter1 Control Register A
 | 
			
		||||
		TCCR1B: 0x81, // Timer/Counter1 Control Register B
 | 
			
		||||
		TCCR1C: 0x82, // Timer/Counter 1 Control Register C
 | 
			
		||||
		TCNT1L: 0x84, // Timer/Counter1  Bytes
 | 
			
		||||
		TCNT1H: 0x84, // Timer/Counter1  Bytes
 | 
			
		||||
		OCR1AL: 0x88, // Timer/Counter1 Output Compare Register A  Bytes
 | 
			
		||||
		OCR1AH: 0x88, // Timer/Counter1 Output Compare Register A  Bytes
 | 
			
		||||
		OCR1BL: 0x8a, // Timer/Counter1 Output Compare Register B  Bytes
 | 
			
		||||
		OCR1BH: 0x8a, // Timer/Counter1 Output Compare Register B  Bytes
 | 
			
		||||
		OCR1CL: 0x8c, // Timer/Counter1 Output Compare Register C  Bytes
 | 
			
		||||
		OCR1CH: 0x8c, // Timer/Counter1 Output Compare Register C  Bytes
 | 
			
		||||
		ICR1L:  0x86, // Timer/Counter1 Input Capture Register  Bytes
 | 
			
		||||
		ICR1H:  0x86, // Timer/Counter1 Input Capture Register  Bytes
 | 
			
		||||
		TIMSK1: 0x6f, // Timer/Counter1 Interrupt Mask Register
 | 
			
		||||
		TIFR1:  0x36, // Timer/Counter1 Interrupt Flag register
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	// Phase Locked Loop
 | 
			
		||||
	PLL = struct {
 | 
			
		||||
		PLLCSR __reg
 | 
			
		||||
	}{
 | 
			
		||||
		PLLCSR: 0x49, // PLL Status and Control register
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	// USB Device Registers
 | 
			
		||||
	USB_DEVICE = struct {
 | 
			
		||||
		UEINT   __reg
 | 
			
		||||
		UEBCLX  __reg
 | 
			
		||||
		UEDATX  __reg
 | 
			
		||||
		UEIENX  __reg
 | 
			
		||||
		UESTA1X __reg
 | 
			
		||||
		UESTA0X __reg
 | 
			
		||||
		UECFG1X __reg
 | 
			
		||||
		UECFG0X __reg
 | 
			
		||||
		UECONX  __reg
 | 
			
		||||
		UERST   __reg
 | 
			
		||||
		UENUM   __reg
 | 
			
		||||
		UEINTX  __reg
 | 
			
		||||
		UDMFN   __reg
 | 
			
		||||
		UDFNUML __reg
 | 
			
		||||
		UDFNUMH __reg
 | 
			
		||||
		UDADDR  __reg
 | 
			
		||||
		UDIEN   __reg
 | 
			
		||||
		UDINT   __reg
 | 
			
		||||
		UDCON   __reg
 | 
			
		||||
		USBCON  __reg
 | 
			
		||||
		REGCR   __reg
 | 
			
		||||
	}{
 | 
			
		||||
		UEINT:   0xf4,
 | 
			
		||||
		UEBCLX:  0xf2,
 | 
			
		||||
		UEDATX:  0xf1,
 | 
			
		||||
		UEIENX:  0xf0,
 | 
			
		||||
		UESTA1X: 0xef,
 | 
			
		||||
		UESTA0X: 0xee,
 | 
			
		||||
		UECFG1X: 0xed,
 | 
			
		||||
		UECFG0X: 0xec,
 | 
			
		||||
		UECONX:  0xeb,
 | 
			
		||||
		UERST:   0xea,
 | 
			
		||||
		UENUM:   0xe9,
 | 
			
		||||
		UEINTX:  0xe8,
 | 
			
		||||
		UDMFN:   0xe6,
 | 
			
		||||
		UDFNUML: 0xe4,
 | 
			
		||||
		UDFNUMH: 0xe4,
 | 
			
		||||
		UDADDR:  0xe3,
 | 
			
		||||
		UDIEN:   0xe2,
 | 
			
		||||
		UDINT:   0xe1,
 | 
			
		||||
		UDCON:   0xe0,
 | 
			
		||||
		USBCON:  0xd8, // USB General Control Register
 | 
			
		||||
		REGCR:   0x63, // Regulator Control Register
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	// PS/2 Controller
 | 
			
		||||
	PS2 = struct {
 | 
			
		||||
		UPOE   __reg
 | 
			
		||||
		PS2CON __reg
 | 
			
		||||
	}{
 | 
			
		||||
		UPOE:   0xfb,
 | 
			
		||||
		PS2CON: 0xfa, // PS2 Pad Enable register
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	// CPU Registers
 | 
			
		||||
	CPU = struct {
 | 
			
		||||
		SREG    __reg
 | 
			
		||||
		SPL     __reg
 | 
			
		||||
		SPH     __reg
 | 
			
		||||
		MCUCR   __reg
 | 
			
		||||
		MCUSR   __reg
 | 
			
		||||
		OSCCAL  __reg
 | 
			
		||||
		CLKPR   __reg
 | 
			
		||||
		SMCR    __reg
 | 
			
		||||
		EIND    __reg
 | 
			
		||||
		GPIOR2  __reg
 | 
			
		||||
		GPIOR1  __reg
 | 
			
		||||
		GPIOR0  __reg
 | 
			
		||||
		PRR1    __reg
 | 
			
		||||
		PRR0    __reg
 | 
			
		||||
		CLKSTA  __reg
 | 
			
		||||
		CLKSEL1 __reg
 | 
			
		||||
		CLKSEL0 __reg
 | 
			
		||||
		DWDR    __reg
 | 
			
		||||
	}{
 | 
			
		||||
		SREG:    0x5f, // Status Register
 | 
			
		||||
		SPL:     0x5d, // Stack Pointer
 | 
			
		||||
		SPH:     0x5d, // Stack Pointer
 | 
			
		||||
		MCUCR:   0x55, // MCU Control Register
 | 
			
		||||
		MCUSR:   0x54, // MCU Status Register
 | 
			
		||||
		OSCCAL:  0x66, // Oscillator Calibration Value
 | 
			
		||||
		CLKPR:   0x61,
 | 
			
		||||
		SMCR:    0x53, // Sleep Mode Control Register
 | 
			
		||||
		EIND:    0x5c, // Extended Indirect Register
 | 
			
		||||
		GPIOR2:  0x4b, // General Purpose IO Register 2
 | 
			
		||||
		GPIOR1:  0x4a, // General Purpose IO Register 1
 | 
			
		||||
		GPIOR0:  0x3e, // General Purpose IO Register 0
 | 
			
		||||
		PRR1:    0x65, // Power Reduction Register1
 | 
			
		||||
		PRR0:    0x64, // Power Reduction Register0
 | 
			
		||||
		CLKSTA:  0xd2,
 | 
			
		||||
		CLKSEL1: 0xd1,
 | 
			
		||||
		CLKSEL0: 0xd0,
 | 
			
		||||
		DWDR:    0x51, // debugWire communication register
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	// External Interrupts
 | 
			
		||||
	EXINT = struct {
 | 
			
		||||
		EICRA  __reg
 | 
			
		||||
		EICRB  __reg
 | 
			
		||||
		EIMSK  __reg
 | 
			
		||||
		EIFR   __reg
 | 
			
		||||
		PCMSK0 __reg
 | 
			
		||||
		PCMSK1 __reg
 | 
			
		||||
		PCIFR  __reg
 | 
			
		||||
		PCICR  __reg
 | 
			
		||||
	}{
 | 
			
		||||
		EICRA:  0x69, // External Interrupt Control Register A
 | 
			
		||||
		EICRB:  0x6a, // External Interrupt Control Register B
 | 
			
		||||
		EIMSK:  0x3d, // External Interrupt Mask Register
 | 
			
		||||
		EIFR:   0x3c, // External Interrupt Flag Register
 | 
			
		||||
		PCMSK0: 0x6b, // Pin Change Mask Register 0
 | 
			
		||||
		PCMSK1: 0x6c, // Pin Change Mask Register 1
 | 
			
		||||
		PCIFR:  0x3b, // Pin Change Interrupt Flag Register
 | 
			
		||||
		PCICR:  0x68, // Pin Change Interrupt Control Register
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	// USART
 | 
			
		||||
	USART = struct {
 | 
			
		||||
		UDR1   __reg
 | 
			
		||||
		UCSR1A __reg
 | 
			
		||||
		UCSR1B __reg
 | 
			
		||||
		UCSR1C __reg
 | 
			
		||||
		UCSR1D __reg
 | 
			
		||||
		UBRR1L __reg
 | 
			
		||||
		UBRR1H __reg
 | 
			
		||||
	}{
 | 
			
		||||
		UDR1:   0xce, // USART I/O Data Register
 | 
			
		||||
		UCSR1A: 0xc8, // USART Control and Status Register A
 | 
			
		||||
		UCSR1B: 0xc9, // USART Control and Status Register B
 | 
			
		||||
		UCSR1C: 0xca, // USART Control and Status Register C
 | 
			
		||||
		UCSR1D: 0xcb, // USART Control and Status Register D
 | 
			
		||||
		UBRR1L: 0xcc, // USART Baud Rate Register  Bytes
 | 
			
		||||
		UBRR1H: 0xcc, // USART Baud Rate Register  Bytes
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	// Watchdog Timer
 | 
			
		||||
	WDT = struct {
 | 
			
		||||
		WDTCSR __reg
 | 
			
		||||
		WDTCKD __reg
 | 
			
		||||
	}{
 | 
			
		||||
		WDTCSR: 0x60, // Watchdog Timer Control Register
 | 
			
		||||
		WDTCKD: 0x62, // Watchdog Timer Clock Divider
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	// Analog Comparator
 | 
			
		||||
	AC = struct {
 | 
			
		||||
		ACSR  __reg
 | 
			
		||||
		DIDR1 __reg
 | 
			
		||||
	}{
 | 
			
		||||
		ACSR:  0x50, // Analog Comparator Control And Status Register
 | 
			
		||||
		DIDR1: 0x7f,
 | 
			
		||||
	}
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
// Bitfields for FUSE: Fuses
 | 
			
		||||
const (
 | 
			
		||||
	// EXTENDED
 | 
			
		||||
	EXTENDED_BODLEVEL = 0x7 // Brown-out Detector trigger level
 | 
			
		||||
	EXTENDED_HWBE     = 0x8 // Hardware Boot Enable
 | 
			
		||||
 | 
			
		||||
	// HIGH
 | 
			
		||||
	HIGH_DWEN     = 0x80 // Debug Wire enable
 | 
			
		||||
	HIGH_RSTDISBL = 0x40 // Reset Disabled (Enable PC6 as i/o pin)
 | 
			
		||||
	HIGH_SPIEN    = 0x20 // Serial program downloading (SPI) enabled
 | 
			
		||||
	HIGH_WDTON    = 0x10 // Watchdog timer always on
 | 
			
		||||
	HIGH_EESAVE   = 0x8  // Preserve EEPROM through the Chip Erase cycle
 | 
			
		||||
	HIGH_BOOTSZ   = 0x6  // Select Boot Size
 | 
			
		||||
	HIGH_BOOTRST  = 0x1  // Boot Reset vector Enabled
 | 
			
		||||
 | 
			
		||||
	// LOW
 | 
			
		||||
	LOW_CKDIV8    = 0x80 // Divide clock by 8 internally
 | 
			
		||||
	LOW_CKOUT     = 0x40 // Clock output on PORTC7
 | 
			
		||||
	LOW_SUT_CKSEL = 0x3f // Select Clock Source
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
// Bitfields for LOCKBIT: Lockbits
 | 
			
		||||
const (
 | 
			
		||||
	// LOCKBIT
 | 
			
		||||
	LOCKBIT_LB   = 0x3  // Memory Lock
 | 
			
		||||
	LOCKBIT_BLB0 = 0xc  // Boot Loader Protection Mode
 | 
			
		||||
	LOCKBIT_BLB1 = 0x30 // Boot Loader Protection Mode
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
// Bitfields for PORT: I/O Port
 | 
			
		||||
const (
 | 
			
		||||
	// PORTC: Port C Data Register
 | 
			
		||||
	PORTC_PORTC = 0xf0 // Port C Data Register bits
 | 
			
		||||
	PORTC_PORTC = 0x7  // Port C Data Register bits
 | 
			
		||||
 | 
			
		||||
	// DDRC: Port C Data Direction Register
 | 
			
		||||
	DDRC_DDC = 0xf0 // Port C Data Direction Register bits
 | 
			
		||||
	DDRC_DDC = 0x7  // Port C Data Direction Register bits
 | 
			
		||||
 | 
			
		||||
	// PINC: Port C Input Pins
 | 
			
		||||
	PINC_PINC = 0xf0 // Port C Input Pins bits
 | 
			
		||||
	PINC_PINC = 0x7  // Port C Input Pins bits
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
// Bitfields for SPI: Serial Peripheral Interface
 | 
			
		||||
const (
 | 
			
		||||
	// SPCR: SPI Control Register
 | 
			
		||||
	SPCR_SPIE = 0x80 // SPI Interrupt Enable
 | 
			
		||||
	SPCR_SPE  = 0x40 // SPI Enable
 | 
			
		||||
	SPCR_DORD = 0x20 // Data Order
 | 
			
		||||
	SPCR_MSTR = 0x10 // Master/Slave Select
 | 
			
		||||
	SPCR_CPOL = 0x8  // Clock polarity
 | 
			
		||||
	SPCR_CPHA = 0x4  // Clock Phase
 | 
			
		||||
	SPCR_SPR  = 0x3  // SPI Clock Rate Selects
 | 
			
		||||
 | 
			
		||||
	// SPSR: SPI Status Register
 | 
			
		||||
	SPSR_SPIF  = 0x80 // SPI Interrupt Flag
 | 
			
		||||
	SPSR_WCOL  = 0x40 // Write Collision Flag
 | 
			
		||||
	SPSR_SPI2X = 0x1  // Double SPI Speed Bit
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
// Bitfields for BOOT_LOAD: Bootloader
 | 
			
		||||
const (
 | 
			
		||||
	// SPMCSR: Store Program Memory Control Register
 | 
			
		||||
	SPMCSR_SPMIE  = 0x80 // SPM Interrupt Enable
 | 
			
		||||
	SPMCSR_RWWSB  = 0x40 // Read While Write Section Busy
 | 
			
		||||
	SPMCSR_SIGRD  = 0x20 // Signature Row Read
 | 
			
		||||
	SPMCSR_RWWSRE = 0x10 // Read While Write section read enable
 | 
			
		||||
	SPMCSR_BLBSET = 0x8  // Boot Lock Bit Set
 | 
			
		||||
	SPMCSR_PGWRT  = 0x4  // Page Write
 | 
			
		||||
	SPMCSR_PGERS  = 0x2  // Page Erase
 | 
			
		||||
	SPMCSR_SPMEN  = 0x1  // Store Program Memory Enable
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
// Bitfields for EEPROM: EEPROM
 | 
			
		||||
const (
 | 
			
		||||
	// EECR: EEPROM Control Register
 | 
			
		||||
	EECR_EEPM  = 0x30 // EEPROM Programming Mode Bits
 | 
			
		||||
	EECR_EERIE = 0x8  // EEPROM Ready Interrupt Enable
 | 
			
		||||
	EECR_EEMPE = 0x4  // EEPROM Master Write Enable
 | 
			
		||||
	EECR_EEPE  = 0x2  // EEPROM Write Enable
 | 
			
		||||
	EECR_EERE  = 0x1  // EEPROM Read Enable
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
// Bitfields for TC8: Timer/Counter, 8-bit
 | 
			
		||||
const (
 | 
			
		||||
	// TCCR0B: Timer/Counter Control Register B
 | 
			
		||||
	TCCR0B_FOC0A = 0x80 // Force Output Compare A
 | 
			
		||||
	TCCR0B_FOC0B = 0x40 // Force Output Compare B
 | 
			
		||||
	TCCR0B_WGM02 = 0x8
 | 
			
		||||
	TCCR0B_CS0   = 0x7 // Clock Select
 | 
			
		||||
 | 
			
		||||
	// TCCR0A: Timer/Counter  Control Register A
 | 
			
		||||
	TCCR0A_COM0A = 0xc0 // Compare Output Mode, Phase Correct PWM Mode
 | 
			
		||||
	TCCR0A_COM0B = 0x30 // Compare Output Mode, Fast PWm
 | 
			
		||||
	TCCR0A_WGM0  = 0x3  // Waveform Generation Mode
 | 
			
		||||
 | 
			
		||||
	// TIMSK0: Timer/Counter0 Interrupt Mask Register
 | 
			
		||||
	TIMSK0_OCIE0B = 0x4 // Timer/Counter0 Output Compare Match B Interrupt Enable
 | 
			
		||||
	TIMSK0_OCIE0A = 0x2 // Timer/Counter0 Output Compare Match A Interrupt Enable
 | 
			
		||||
	TIMSK0_TOIE0  = 0x1 // Timer/Counter0 Overflow Interrupt Enable
 | 
			
		||||
 | 
			
		||||
	// TIFR0: Timer/Counter0 Interrupt Flag register
 | 
			
		||||
	TIFR0_OCF0B = 0x4 // Timer/Counter0 Output Compare Flag 0B
 | 
			
		||||
	TIFR0_OCF0A = 0x2 // Timer/Counter0 Output Compare Flag 0A
 | 
			
		||||
	TIFR0_TOV0  = 0x1 // Timer/Counter0 Overflow Flag
 | 
			
		||||
 | 
			
		||||
	// GTCCR: General Timer/Counter Control Register
 | 
			
		||||
	GTCCR_TSM     = 0x80 // Timer/Counter Synchronization Mode
 | 
			
		||||
	GTCCR_PSRSYNC = 0x1  // Prescaler Reset Timer/Counter1 and Timer/Counter0
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
// Bitfields for TC16: Timer/Counter, 16-bit
 | 
			
		||||
const (
 | 
			
		||||
	// TCCR1A: Timer/Counter1 Control Register A
 | 
			
		||||
	TCCR1A_COM1A = 0xc0 // Compare Output Mode 1A, bits
 | 
			
		||||
	TCCR1A_COM1B = 0x30 // Compare Output Mode 1B, bits
 | 
			
		||||
	TCCR1A_COM1C = 0xc  // Compare Output Mode 1C, bits
 | 
			
		||||
	TCCR1A_WGM1  = 0x3  // Waveform Generation Mode
 | 
			
		||||
 | 
			
		||||
	// TCCR1B: Timer/Counter1 Control Register B
 | 
			
		||||
	TCCR1B_ICNC1 = 0x80 // Input Capture 1 Noise Canceler
 | 
			
		||||
	TCCR1B_ICES1 = 0x40 // Input Capture 1 Edge Select
 | 
			
		||||
	TCCR1B_WGM1  = 0x18 // Waveform Generation Mode
 | 
			
		||||
	TCCR1B_CS1   = 0x7  // Prescaler source of Timer/Counter 1
 | 
			
		||||
 | 
			
		||||
	// TCCR1C: Timer/Counter 1 Control Register C
 | 
			
		||||
	TCCR1C_FOC1A = 0x80 // Force Output Compare 1A
 | 
			
		||||
	TCCR1C_FOC1B = 0x40 // Force Output Compare 1B
 | 
			
		||||
	TCCR1C_FOC1C = 0x20 // Force Output Compare 1C
 | 
			
		||||
 | 
			
		||||
	// TIMSK1: Timer/Counter1 Interrupt Mask Register
 | 
			
		||||
	TIMSK1_ICIE1  = 0x20 // Timer/Counter1 Input Capture Interrupt Enable
 | 
			
		||||
	TIMSK1_OCIE1C = 0x8  // Timer/Counter1 Output Compare C Match Interrupt Enable
 | 
			
		||||
	TIMSK1_OCIE1B = 0x4  // Timer/Counter1 Output Compare B Match Interrupt Enable
 | 
			
		||||
	TIMSK1_OCIE1A = 0x2  // Timer/Counter1 Output Compare A Match Interrupt Enable
 | 
			
		||||
	TIMSK1_TOIE1  = 0x1  // Timer/Counter1 Overflow Interrupt Enable
 | 
			
		||||
 | 
			
		||||
	// TIFR1: Timer/Counter1 Interrupt Flag register
 | 
			
		||||
	TIFR1_ICF1  = 0x20 // Input Capture Flag 1
 | 
			
		||||
	TIFR1_OCF1C = 0x8  // Output Compare Flag 1C
 | 
			
		||||
	TIFR1_OCF1B = 0x4  // Output Compare Flag 1B
 | 
			
		||||
	TIFR1_OCF1A = 0x2  // Output Compare Flag 1A
 | 
			
		||||
	TIFR1_TOV1  = 0x1  // Timer/Counter1 Overflow Flag
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
// Bitfields for PLL: Phase Locked Loop
 | 
			
		||||
const (
 | 
			
		||||
	// PLLCSR: PLL Status and Control register
 | 
			
		||||
	PLLCSR_PLLP  = 0x1c // PLL prescaler Bits
 | 
			
		||||
	PLLCSR_PLLE  = 0x2  // PLL Enable Bit
 | 
			
		||||
	PLLCSR_PLOCK = 0x1  // PLL Lock Status Bit
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
// Bitfields for USB_DEVICE: USB Device Registers
 | 
			
		||||
const (
 | 
			
		||||
	// UEIENX
 | 
			
		||||
	UEIENX_FLERRE   = 0x80
 | 
			
		||||
	UEIENX_NAKINE   = 0x40
 | 
			
		||||
	UEIENX_NAKOUTE  = 0x10
 | 
			
		||||
	UEIENX_RXSTPE   = 0x8
 | 
			
		||||
	UEIENX_RXOUTE   = 0x4
 | 
			
		||||
	UEIENX_STALLEDE = 0x2
 | 
			
		||||
	UEIENX_TXINE    = 0x1
 | 
			
		||||
 | 
			
		||||
	// UESTA1X
 | 
			
		||||
	UESTA1X_CTRLDIR = 0x4
 | 
			
		||||
	UESTA1X_CURRBK  = 0x3
 | 
			
		||||
 | 
			
		||||
	// UESTA0X
 | 
			
		||||
	UESTA0X_CFGOK   = 0x80
 | 
			
		||||
	UESTA0X_OVERFI  = 0x40
 | 
			
		||||
	UESTA0X_UNDERFI = 0x20
 | 
			
		||||
	UESTA0X_DTSEQ   = 0xc
 | 
			
		||||
	UESTA0X_NBUSYBK = 0x3
 | 
			
		||||
 | 
			
		||||
	// UECFG1X
 | 
			
		||||
	UECFG1X_EPSIZE = 0x70
 | 
			
		||||
	UECFG1X_EPBK   = 0xc
 | 
			
		||||
	UECFG1X_ALLOC  = 0x2
 | 
			
		||||
 | 
			
		||||
	// UECFG0X
 | 
			
		||||
	UECFG0X_EPTYPE = 0xc0
 | 
			
		||||
	UECFG0X_EPDIR  = 0x1
 | 
			
		||||
 | 
			
		||||
	// UECONX
 | 
			
		||||
	UECONX_STALLRQ  = 0x20
 | 
			
		||||
	UECONX_STALLRQC = 0x10
 | 
			
		||||
	UECONX_RSTDT    = 0x8
 | 
			
		||||
	UECONX_EPEN     = 0x1
 | 
			
		||||
 | 
			
		||||
	// UERST
 | 
			
		||||
	UERST_EPRST = 0x1f
 | 
			
		||||
 | 
			
		||||
	// UEINTX
 | 
			
		||||
	UEINTX_FIFOCON  = 0x80
 | 
			
		||||
	UEINTX_NAKINI   = 0x40
 | 
			
		||||
	UEINTX_RWAL     = 0x20
 | 
			
		||||
	UEINTX_NAKOUTI  = 0x10
 | 
			
		||||
	UEINTX_RXSTPI   = 0x8
 | 
			
		||||
	UEINTX_RXOUTI   = 0x4
 | 
			
		||||
	UEINTX_STALLEDI = 0x2
 | 
			
		||||
	UEINTX_TXINI    = 0x1
 | 
			
		||||
 | 
			
		||||
	// UDMFN
 | 
			
		||||
	UDMFN_FNCERR = 0x10
 | 
			
		||||
 | 
			
		||||
	// UDADDR
 | 
			
		||||
	UDADDR_ADDEN = 0x80
 | 
			
		||||
	UDADDR_UADD  = 0x7f
 | 
			
		||||
 | 
			
		||||
	// UDIEN
 | 
			
		||||
	UDIEN_UPRSME  = 0x40
 | 
			
		||||
	UDIEN_EORSME  = 0x20
 | 
			
		||||
	UDIEN_WAKEUPE = 0x10
 | 
			
		||||
	UDIEN_EORSTE  = 0x8
 | 
			
		||||
	UDIEN_SOFE    = 0x4
 | 
			
		||||
	UDIEN_SUSPE   = 0x1
 | 
			
		||||
 | 
			
		||||
	// UDINT
 | 
			
		||||
	UDINT_UPRSMI  = 0x40
 | 
			
		||||
	UDINT_EORSMI  = 0x20
 | 
			
		||||
	UDINT_WAKEUPI = 0x10
 | 
			
		||||
	UDINT_EORSTI  = 0x8
 | 
			
		||||
	UDINT_SOFI    = 0x4
 | 
			
		||||
	UDINT_SUSPI   = 0x1
 | 
			
		||||
 | 
			
		||||
	// UDCON
 | 
			
		||||
	UDCON_RSTCPU = 0x4
 | 
			
		||||
	UDCON_RMWKUP = 0x2
 | 
			
		||||
	UDCON_DETACH = 0x1
 | 
			
		||||
 | 
			
		||||
	// USBCON: USB General Control Register
 | 
			
		||||
	USBCON_USBE   = 0x80
 | 
			
		||||
	USBCON_FRZCLK = 0x20
 | 
			
		||||
 | 
			
		||||
	// REGCR: Regulator Control Register
 | 
			
		||||
	REGCR_REGDIS = 0x1
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
// Bitfields for PS2: PS/2 Controller
 | 
			
		||||
const (
 | 
			
		||||
	// UPOE
 | 
			
		||||
	UPOE_UPWE  = 0xc0
 | 
			
		||||
	UPOE_UPDRV = 0x30
 | 
			
		||||
	UPOE_SCKI  = 0x8
 | 
			
		||||
	UPOE_DATAI = 0x4
 | 
			
		||||
	UPOE_DPI   = 0x2
 | 
			
		||||
	UPOE_DMI   = 0x1
 | 
			
		||||
 | 
			
		||||
	// PS2CON: PS2 Pad Enable register
 | 
			
		||||
	PS2CON_PS2EN = 0x1 // Enable
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
// Bitfields for CPU: CPU Registers
 | 
			
		||||
const (
 | 
			
		||||
	// SREG: Status Register
 | 
			
		||||
	SREG_I = 0x80 // Global Interrupt Enable
 | 
			
		||||
	SREG_T = 0x40 // Bit Copy Storage
 | 
			
		||||
	SREG_H = 0x20 // Half Carry Flag
 | 
			
		||||
	SREG_S = 0x10 // Sign Bit
 | 
			
		||||
	SREG_V = 0x8  // Two's Complement Overflow Flag
 | 
			
		||||
	SREG_N = 0x4  // Negative Flag
 | 
			
		||||
	SREG_Z = 0x2  // Zero Flag
 | 
			
		||||
	SREG_C = 0x1  // Carry Flag
 | 
			
		||||
 | 
			
		||||
	// MCUCR: MCU Control Register
 | 
			
		||||
	MCUCR_PUD   = 0x10 // Pull-up disable
 | 
			
		||||
	MCUCR_IVSEL = 0x2  // Interrupt Vector Select
 | 
			
		||||
	MCUCR_IVCE  = 0x1  // Interrupt Vector Change Enable
 | 
			
		||||
 | 
			
		||||
	// MCUSR: MCU Status Register
 | 
			
		||||
	MCUSR_USBRF = 0x20 // USB reset flag
 | 
			
		||||
	MCUSR_WDRF  = 0x8  // Watchdog Reset Flag
 | 
			
		||||
	MCUSR_BORF  = 0x4  // Brown-out Reset Flag
 | 
			
		||||
	MCUSR_EXTRF = 0x2  // External Reset Flag
 | 
			
		||||
	MCUSR_PORF  = 0x1  // Power-on reset flag
 | 
			
		||||
 | 
			
		||||
	// OSCCAL: Oscillator Calibration Value
 | 
			
		||||
	OSCCAL_OSCCAL = 0xff // Oscillator Calibration
 | 
			
		||||
 | 
			
		||||
	// CLKPR
 | 
			
		||||
	CLKPR_CLKPCE = 0x80
 | 
			
		||||
	CLKPR_CLKPS  = 0xf
 | 
			
		||||
 | 
			
		||||
	// SMCR: Sleep Mode Control Register
 | 
			
		||||
	SMCR_SM = 0xe // Sleep Mode Select bits
 | 
			
		||||
	SMCR_SE = 0x1 // Sleep Enable
 | 
			
		||||
 | 
			
		||||
	// GPIOR2: General Purpose IO Register 2
 | 
			
		||||
	GPIOR2_GPIOR = 0xff // General Purpose IO Register 2 bis
 | 
			
		||||
 | 
			
		||||
	// GPIOR1: General Purpose IO Register 1
 | 
			
		||||
	GPIOR1_GPIOR = 0xff // General Purpose IO Register 1 bis
 | 
			
		||||
 | 
			
		||||
	// GPIOR0: General Purpose IO Register 0
 | 
			
		||||
	GPIOR0_GPIOR07 = 0x80 // General Purpose IO Register 0 bit 7
 | 
			
		||||
	GPIOR0_GPIOR06 = 0x40 // General Purpose IO Register 0 bit 6
 | 
			
		||||
	GPIOR0_GPIOR05 = 0x20 // General Purpose IO Register 0 bit 5
 | 
			
		||||
	GPIOR0_GPIOR04 = 0x10 // General Purpose IO Register 0 bit 4
 | 
			
		||||
	GPIOR0_GPIOR03 = 0x8  // General Purpose IO Register 0 bit 3
 | 
			
		||||
	GPIOR0_GPIOR02 = 0x4  // General Purpose IO Register 0 bit 2
 | 
			
		||||
	GPIOR0_GPIOR01 = 0x2  // General Purpose IO Register 0 bit 1
 | 
			
		||||
	GPIOR0_GPIOR00 = 0x1  // General Purpose IO Register 0 bit 0
 | 
			
		||||
 | 
			
		||||
	// PRR1: Power Reduction Register1
 | 
			
		||||
	PRR1_PRUSB    = 0x80 // Power Reduction USB
 | 
			
		||||
	PRR1_PRUSART1 = 0x1  // Power Reduction USART1
 | 
			
		||||
 | 
			
		||||
	// PRR0: Power Reduction Register0
 | 
			
		||||
	PRR0_PRTIM0 = 0x20 // Power Reduction Timer/Counter0
 | 
			
		||||
	PRR0_PRTIM1 = 0x8  // Power Reduction Timer/Counter1
 | 
			
		||||
	PRR0_PRSPI  = 0x4  // Power Reduction Serial Peripheral Interface
 | 
			
		||||
 | 
			
		||||
	// CLKSTA
 | 
			
		||||
	CLKSTA_RCON  = 0x2
 | 
			
		||||
	CLKSTA_EXTON = 0x1
 | 
			
		||||
 | 
			
		||||
	// CLKSEL1
 | 
			
		||||
	CLKSEL1_RCCKSEL = 0xf0
 | 
			
		||||
	CLKSEL1_EXCKSEL = 0xf
 | 
			
		||||
 | 
			
		||||
	// CLKSEL0
 | 
			
		||||
	CLKSEL0_RCSUT = 0xc0
 | 
			
		||||
	CLKSEL0_EXSUT = 0x30
 | 
			
		||||
	CLKSEL0_RCE   = 0x8
 | 
			
		||||
	CLKSEL0_EXTE  = 0x4
 | 
			
		||||
	CLKSEL0_CLKS  = 0x1
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
// Bitfields for EXINT: External Interrupts
 | 
			
		||||
const (
 | 
			
		||||
	// EICRA: External Interrupt Control Register A
 | 
			
		||||
	EICRA_ISC3 = 0xc0 // External Interrupt Sense Control Bit
 | 
			
		||||
	EICRA_ISC2 = 0x30 // External Interrupt Sense Control Bit
 | 
			
		||||
	EICRA_ISC1 = 0xc  // External Interrupt Sense Control Bit
 | 
			
		||||
	EICRA_ISC0 = 0x3  // External Interrupt Sense Control Bit
 | 
			
		||||
 | 
			
		||||
	// EICRB: External Interrupt Control Register B
 | 
			
		||||
	EICRB_ISC7 = 0xc0 // External Interrupt 7-4 Sense Control Bit
 | 
			
		||||
	EICRB_ISC6 = 0x30 // External Interrupt 7-4 Sense Control Bit
 | 
			
		||||
	EICRB_ISC5 = 0xc  // External Interrupt 7-4 Sense Control Bit
 | 
			
		||||
	EICRB_ISC4 = 0x3  // External Interrupt 7-4 Sense Control Bit
 | 
			
		||||
 | 
			
		||||
	// EIMSK: External Interrupt Mask Register
 | 
			
		||||
	EIMSK_INT = 0xff // External Interrupt Request 7 Enable
 | 
			
		||||
 | 
			
		||||
	// EIFR: External Interrupt Flag Register
 | 
			
		||||
	EIFR_INTF = 0xff // External Interrupt Flags
 | 
			
		||||
 | 
			
		||||
	// PCMSK0: Pin Change Mask Register 0
 | 
			
		||||
	PCMSK0_PCINT = 0xff // Pin Change Enable Masks
 | 
			
		||||
 | 
			
		||||
	// PCMSK1: Pin Change Mask Register 1
 | 
			
		||||
	PCMSK1_PCINT = 0x1f
 | 
			
		||||
 | 
			
		||||
	// PCIFR: Pin Change Interrupt Flag Register
 | 
			
		||||
	PCIFR_PCIF = 0x3 // Pin Change Interrupt Flags
 | 
			
		||||
 | 
			
		||||
	// PCICR: Pin Change Interrupt Control Register
 | 
			
		||||
	PCICR_PCIE = 0x3 // Pin Change Interrupt Enables
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
// Bitfields for USART: USART
 | 
			
		||||
const (
 | 
			
		||||
	// UCSR1A: USART Control and Status Register A
 | 
			
		||||
	UCSR1A_RXC1  = 0x80 // USART Receive Complete
 | 
			
		||||
	UCSR1A_TXC1  = 0x40 // USART Transmitt Complete
 | 
			
		||||
	UCSR1A_UDRE1 = 0x20 // USART Data Register Empty
 | 
			
		||||
	UCSR1A_FE1   = 0x10 // Framing Error
 | 
			
		||||
	UCSR1A_DOR1  = 0x8  // Data overRun
 | 
			
		||||
	UCSR1A_UPE1  = 0x4  // Parity Error
 | 
			
		||||
	UCSR1A_U2X1  = 0x2  // Double the USART transmission speed
 | 
			
		||||
	UCSR1A_MPCM1 = 0x1  // Multi-processor Communication Mode
 | 
			
		||||
 | 
			
		||||
	// UCSR1B: USART Control and Status Register B
 | 
			
		||||
	UCSR1B_RXCIE1 = 0x80 // RX Complete Interrupt Enable
 | 
			
		||||
	UCSR1B_TXCIE1 = 0x40 // TX Complete Interrupt Enable
 | 
			
		||||
	UCSR1B_UDRIE1 = 0x20 // USART Data register Empty Interrupt Enable
 | 
			
		||||
	UCSR1B_RXEN1  = 0x10 // Receiver Enable
 | 
			
		||||
	UCSR1B_TXEN1  = 0x8  // Transmitter Enable
 | 
			
		||||
	UCSR1B_UCSZ12 = 0x4  // Character Size
 | 
			
		||||
	UCSR1B_RXB81  = 0x2  // Receive Data Bit 8
 | 
			
		||||
	UCSR1B_TXB81  = 0x1  // Transmit Data Bit 8
 | 
			
		||||
 | 
			
		||||
	// UCSR1C: USART Control and Status Register C
 | 
			
		||||
	UCSR1C_UMSEL1 = 0xc0 // USART Mode Select
 | 
			
		||||
	UCSR1C_UPM1   = 0x30 // Parity Mode Bits
 | 
			
		||||
	UCSR1C_USBS1  = 0x8  // Stop Bit Select
 | 
			
		||||
	UCSR1C_UCSZ1  = 0x6  // Character Size
 | 
			
		||||
	UCSR1C_UCPOL1 = 0x1  // Clock Polarity
 | 
			
		||||
 | 
			
		||||
	// UCSR1D: USART Control and Status Register D
 | 
			
		||||
	UCSR1D_CTSEN = 0x2 // CTS Enable
 | 
			
		||||
	UCSR1D_RTSEN = 0x1 // RTS Enable
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
// Bitfields for WDT: Watchdog Timer
 | 
			
		||||
const (
 | 
			
		||||
	// WDTCSR: Watchdog Timer Control Register
 | 
			
		||||
	WDTCSR_WDIF = 0x80 // Watchdog Timeout Interrupt Flag
 | 
			
		||||
	WDTCSR_WDIE = 0x40 // Watchdog Timeout Interrupt Enable
 | 
			
		||||
	WDTCSR_WDP  = 0x27 // Watchdog Timer Prescaler Bits
 | 
			
		||||
	WDTCSR_WDCE = 0x10 // Watchdog Change Enable
 | 
			
		||||
	WDTCSR_WDE  = 0x8  // Watch Dog Enable
 | 
			
		||||
 | 
			
		||||
	// WDTCKD: Watchdog Timer Clock Divider
 | 
			
		||||
	WDTCKD_WDEWIF = 0x8 // Watchdog Early Warning Interrupt Flag
 | 
			
		||||
	WDTCKD_WDEWIE = 0x4 // Watchdog Early Warning Interrupt Enable
 | 
			
		||||
	WDTCKD_WCLKD  = 0x3 // Watchdog Timer Clock Dividers
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
// Bitfields for AC: Analog Comparator
 | 
			
		||||
const (
 | 
			
		||||
	// ACSR: Analog Comparator Control And Status Register
 | 
			
		||||
	ACSR_ACD  = 0x80 // Analog Comparator Disable
 | 
			
		||||
	ACSR_ACBG = 0x40 // Analog Comparator Bandgap Select
 | 
			
		||||
	ACSR_ACO  = 0x20 // Analog Compare Output
 | 
			
		||||
	ACSR_ACI  = 0x10 // Analog Comparator Interrupt Flag
 | 
			
		||||
	ACSR_ACIE = 0x8  // Analog Comparator Interrupt Enable
 | 
			
		||||
	ACSR_ACIC = 0x4  // Analog Comparator Input Capture Enable
 | 
			
		||||
	ACSR_ACIS = 0x3  // Analog Comparator Interrupt Mode Select bits
 | 
			
		||||
 | 
			
		||||
	// DIDR1
 | 
			
		||||
	DIDR1_AIN1D = 0x2 // AIN1 Digital Input Disable
 | 
			
		||||
	DIDR1_AIN0D = 0x1 // AIN0 Digital Input Disable
 | 
			
		||||
)
 | 
			
		||||
							
								
								
									
										6
									
								
								src/device/avr/at90usb82.ld
									
										
									
									
									
										Обычный файл
									
								
							
							
						
						
									
										6
									
								
								src/device/avr/at90usb82.ld
									
										
									
									
									
										Обычный файл
									
								
							| 
						 | 
				
			
			@ -0,0 +1,6 @@
 | 
			
		|||
/* Automatically generated file. DO NOT EDIT. */
 | 
			
		||||
/* Generated by gen-device.py from AT90USB82.atdf, see http://packs.download.atmel.com/ */
 | 
			
		||||
 | 
			
		||||
__flash_size = 0x2000;
 | 
			
		||||
__ram_size   = 0x200;
 | 
			
		||||
__num_isrs   = 29;
 | 
			
		||||
							
								
								
									
										676
									
								
								src/device/avr/atmega128.go
									
										
									
									
									
										Обычный файл
									
								
							
							
						
						
									
										676
									
								
								src/device/avr/atmega128.go
									
										
									
									
									
										Обычный файл
									
								
							| 
						 | 
				
			
			@ -0,0 +1,676 @@
 | 
			
		|||
// Automatically generated file. DO NOT EDIT.
 | 
			
		||||
// Generated by gen-device.py from ATmega128.atdf, see http://packs.download.atmel.com/
 | 
			
		||||
 | 
			
		||||
// +build avr,atmega128
 | 
			
		||||
 | 
			
		||||
// Device information for the ATmega128.
 | 
			
		||||
//
 | 
			
		||||
package avr
 | 
			
		||||
 | 
			
		||||
// Magic type name for the compiler.
 | 
			
		||||
type __reg uint8
 | 
			
		||||
 | 
			
		||||
// Export this magic type name.
 | 
			
		||||
type RegValue = __reg
 | 
			
		||||
 | 
			
		||||
// Some information about this device.
 | 
			
		||||
const (
 | 
			
		||||
	DEVICE = "ATmega128"
 | 
			
		||||
	ARCH   = "AVR8"
 | 
			
		||||
	FAMILY = "megaAVR"
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
// Interrupts
 | 
			
		||||
const (
 | 
			
		||||
	IRQ_RESET        = 0  // External Pin, Power-on Reset, Brown-out Reset, Watchdog Reset and JTAG AVR Reset
 | 
			
		||||
	IRQ_INT0         = 1  // External Interrupt Request 0
 | 
			
		||||
	IRQ_INT1         = 2  // External Interrupt Request 1
 | 
			
		||||
	IRQ_INT2         = 3  // External Interrupt Request 2
 | 
			
		||||
	IRQ_INT3         = 4  // External Interrupt Request 3
 | 
			
		||||
	IRQ_INT4         = 5  // External Interrupt Request 4
 | 
			
		||||
	IRQ_INT5         = 6  // External Interrupt Request 5
 | 
			
		||||
	IRQ_INT6         = 7  // External Interrupt Request 6
 | 
			
		||||
	IRQ_INT7         = 8  // External Interrupt Request 7
 | 
			
		||||
	IRQ_TIMER2_COMP  = 9  // Timer/Counter2 Compare Match
 | 
			
		||||
	IRQ_TIMER2_OVF   = 10 // Timer/Counter2 Overflow
 | 
			
		||||
	IRQ_TIMER1_CAPT  = 11 // Timer/Counter1 Capture Event
 | 
			
		||||
	IRQ_TIMER1_COMPA = 12 // Timer/Counter1 Compare Match A
 | 
			
		||||
	IRQ_TIMER1_COMPB = 13 // Timer/Counter Compare Match B
 | 
			
		||||
	IRQ_TIMER1_OVF   = 14 // Timer/Counter1 Overflow
 | 
			
		||||
	IRQ_TIMER0_COMP  = 15 // Timer/Counter0 Compare Match
 | 
			
		||||
	IRQ_TIMER0_OVF   = 16 // Timer/Counter0 Overflow
 | 
			
		||||
	IRQ_SPI_STC      = 17 // SPI Serial Transfer Complete
 | 
			
		||||
	IRQ_USART0_RX    = 18 // USART0, Rx Complete
 | 
			
		||||
	IRQ_USART0_UDRE  = 19 // USART0 Data Register Empty
 | 
			
		||||
	IRQ_USART0_TX    = 20 // USART0, Tx Complete
 | 
			
		||||
	IRQ_ADC          = 21 // ADC Conversion Complete
 | 
			
		||||
	IRQ_EE_READY     = 22 // EEPROM Ready
 | 
			
		||||
	IRQ_ANALOG_COMP  = 23 // Analog Comparator
 | 
			
		||||
	IRQ_TIMER1_COMPC = 24 // Timer/Counter1 Compare Match C
 | 
			
		||||
	IRQ_TIMER3_CAPT  = 25 // Timer/Counter3 Capture Event
 | 
			
		||||
	IRQ_TIMER3_COMPA = 26 // Timer/Counter3 Compare Match A
 | 
			
		||||
	IRQ_TIMER3_COMPB = 27 // Timer/Counter3 Compare Match B
 | 
			
		||||
	IRQ_TIMER3_COMPC = 28 // Timer/Counter3 Compare Match C
 | 
			
		||||
	IRQ_TIMER3_OVF   = 29 // Timer/Counter3 Overflow
 | 
			
		||||
	IRQ_USART1_RX    = 30 // USART1, Rx Complete
 | 
			
		||||
	IRQ_USART1_UDRE  = 31 // USART1, Data Register Empty
 | 
			
		||||
	IRQ_USART1_TX    = 32 // USART1, Tx Complete
 | 
			
		||||
	IRQ_TWI          = 33 // 2-wire Serial Interface
 | 
			
		||||
	IRQ_SPM_READY    = 34 // Store Program Memory Read
 | 
			
		||||
	IRQ_max          = 34 // Highest interrupt number on this device.
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
// Peripherals
 | 
			
		||||
var (
 | 
			
		||||
	// Fuses
 | 
			
		||||
	FUSE = struct {
 | 
			
		||||
		EXTENDED __reg
 | 
			
		||||
		HIGH     __reg
 | 
			
		||||
		LOW      __reg
 | 
			
		||||
	}{
 | 
			
		||||
		EXTENDED: 0x2,
 | 
			
		||||
		HIGH:     0x1,
 | 
			
		||||
		LOW:      0x0,
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	// Lockbits
 | 
			
		||||
	LOCKBIT = struct {
 | 
			
		||||
		LOCKBIT __reg
 | 
			
		||||
	}{
 | 
			
		||||
		LOCKBIT: 0x0,
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	// Analog Comparator
 | 
			
		||||
	AC = struct {
 | 
			
		||||
		ACSR __reg
 | 
			
		||||
	}{
 | 
			
		||||
		ACSR: 0x28, // Analog Comparator Control And Status Register
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	// Serial Peripheral Interface
 | 
			
		||||
	SPI = struct {
 | 
			
		||||
		SPDR __reg
 | 
			
		||||
		SPSR __reg
 | 
			
		||||
		SPCR __reg
 | 
			
		||||
	}{
 | 
			
		||||
		SPDR: 0x2f, // SPI Data Register
 | 
			
		||||
		SPSR: 0x2e, // SPI Status Register
 | 
			
		||||
		SPCR: 0x2d, // SPI Control Register
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	// Two Wire Serial Interface
 | 
			
		||||
	TWI = struct {
 | 
			
		||||
		TWBR __reg
 | 
			
		||||
		TWCR __reg
 | 
			
		||||
		TWSR __reg
 | 
			
		||||
		TWDR __reg
 | 
			
		||||
		TWAR __reg
 | 
			
		||||
	}{
 | 
			
		||||
		TWBR: 0x70, // TWI Bit Rate register
 | 
			
		||||
		TWCR: 0x74, // TWI Control Register
 | 
			
		||||
		TWSR: 0x71, // TWI Status Register
 | 
			
		||||
		TWDR: 0x73, // TWI Data register
 | 
			
		||||
		TWAR: 0x72, // TWI (Slave) Address register
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	// USART
 | 
			
		||||
	USART = struct {
 | 
			
		||||
		UDR0   __reg
 | 
			
		||||
		UCSR0A __reg
 | 
			
		||||
		UCSR0B __reg
 | 
			
		||||
		UCSR0C __reg
 | 
			
		||||
		UBRR0H __reg
 | 
			
		||||
		UBRR0L __reg
 | 
			
		||||
		UDR1   __reg
 | 
			
		||||
		UCSR1A __reg
 | 
			
		||||
		UCSR1B __reg
 | 
			
		||||
		UCSR1C __reg
 | 
			
		||||
		UBRR1H __reg
 | 
			
		||||
		UBRR1L __reg
 | 
			
		||||
	}{
 | 
			
		||||
		UDR0:   0x2c, // USART I/O Data Register
 | 
			
		||||
		UCSR0A: 0x2b, // USART Control and Status Register A
 | 
			
		||||
		UCSR0B: 0x2a, // USART Control and Status Register B
 | 
			
		||||
		UCSR0C: 0x95, // USART Control and Status Register C
 | 
			
		||||
		UBRR0H: 0x90, // USART Baud Rate Register Hight Byte
 | 
			
		||||
		UBRR0L: 0x29, // USART Baud Rate Register Low Byte
 | 
			
		||||
		UDR1:   0x9c, // USART I/O Data Register
 | 
			
		||||
		UCSR1A: 0x9b, // USART Control and Status Register A
 | 
			
		||||
		UCSR1B: 0x9a, // USART Control and Status Register B
 | 
			
		||||
		UCSR1C: 0x9d, // USART Control and Status Register C
 | 
			
		||||
		UBRR1H: 0x98, // USART Baud Rate Register Hight Byte
 | 
			
		||||
		UBRR1L: 0x99, // USART Baud Rate Register Low Byte
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	// CPU Registers
 | 
			
		||||
	CPU = struct {
 | 
			
		||||
		SREG   __reg
 | 
			
		||||
		SPL    __reg
 | 
			
		||||
		SPH    __reg
 | 
			
		||||
		MCUCR  __reg
 | 
			
		||||
		XDIV   __reg
 | 
			
		||||
		XMCRA  __reg
 | 
			
		||||
		XMCRB  __reg
 | 
			
		||||
		OSCCAL __reg
 | 
			
		||||
		RAMPZ  __reg
 | 
			
		||||
	}{
 | 
			
		||||
		SREG:   0x5f, // Status Register
 | 
			
		||||
		SPL:    0x5d, // Stack Pointer
 | 
			
		||||
		SPH:    0x5d, // Stack Pointer
 | 
			
		||||
		MCUCR:  0x55, // MCU Control Register
 | 
			
		||||
		XDIV:   0x5c, // XTAL Divide Control Register
 | 
			
		||||
		XMCRA:  0x6d, // External Memory Control Register A
 | 
			
		||||
		XMCRB:  0x6c, // External Memory Control Register B
 | 
			
		||||
		OSCCAL: 0x6f, // Oscillator Calibration Value
 | 
			
		||||
		RAMPZ:  0x5b, // RAM Page Z Select Register
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	// Bootloader
 | 
			
		||||
	BOOT_LOAD = struct {
 | 
			
		||||
		SPMCSR __reg
 | 
			
		||||
	}{
 | 
			
		||||
		SPMCSR: 0x68, // Store Program Memory Control Register
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	// JTAG Interface
 | 
			
		||||
	JTAG = struct {
 | 
			
		||||
		OCDR __reg
 | 
			
		||||
	}{
 | 
			
		||||
		OCDR: 0x42, // On-Chip Debug Related Register in I/O Memory
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	// Other Registers
 | 
			
		||||
	MISC = struct {
 | 
			
		||||
	}{}
 | 
			
		||||
 | 
			
		||||
	// External Interrupts
 | 
			
		||||
	EXINT = struct {
 | 
			
		||||
		EICRA __reg
 | 
			
		||||
		EICRB __reg
 | 
			
		||||
		EIMSK __reg
 | 
			
		||||
		EIFR  __reg
 | 
			
		||||
	}{
 | 
			
		||||
		EICRA: 0x6a, // External Interrupt Control Register A
 | 
			
		||||
		EICRB: 0x5a, // External Interrupt Control Register B
 | 
			
		||||
		EIMSK: 0x59, // External Interrupt Mask Register
 | 
			
		||||
		EIFR:  0x58, // External Interrupt Flag Register
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	// EEPROM
 | 
			
		||||
	EEPROM = struct {
 | 
			
		||||
		EEARL __reg
 | 
			
		||||
		EEARH __reg
 | 
			
		||||
		EEDR  __reg
 | 
			
		||||
		EECR  __reg
 | 
			
		||||
	}{
 | 
			
		||||
		EEARL: 0x3e, // EEPROM Read/Write Access  Bytes
 | 
			
		||||
		EEARH: 0x3e, // EEPROM Read/Write Access  Bytes
 | 
			
		||||
		EEDR:  0x3d, // EEPROM Data Register
 | 
			
		||||
		EECR:  0x3c, // EEPROM Control Register
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	// I/O Port
 | 
			
		||||
	PORT = struct {
 | 
			
		||||
		PORTA __reg
 | 
			
		||||
		DDRA  __reg
 | 
			
		||||
		PINA  __reg
 | 
			
		||||
		PORTB __reg
 | 
			
		||||
		DDRB  __reg
 | 
			
		||||
		PINB  __reg
 | 
			
		||||
		PORTC __reg
 | 
			
		||||
		DDRC  __reg
 | 
			
		||||
		PINC  __reg
 | 
			
		||||
		PORTD __reg
 | 
			
		||||
		DDRD  __reg
 | 
			
		||||
		PIND  __reg
 | 
			
		||||
		PORTE __reg
 | 
			
		||||
		DDRE  __reg
 | 
			
		||||
		PINE  __reg
 | 
			
		||||
		PORTF __reg
 | 
			
		||||
		DDRF  __reg
 | 
			
		||||
		PINF  __reg
 | 
			
		||||
		PORTG __reg
 | 
			
		||||
		DDRG  __reg
 | 
			
		||||
		PING  __reg
 | 
			
		||||
	}{
 | 
			
		||||
		PORTA: 0x3b, // Port A Data Register
 | 
			
		||||
		DDRA:  0x3a, // Port A Data Direction Register
 | 
			
		||||
		PINA:  0x39, // Port A Input Pins
 | 
			
		||||
		PORTB: 0x38, // Port B Data Register
 | 
			
		||||
		DDRB:  0x37, // Port B Data Direction Register
 | 
			
		||||
		PINB:  0x36, // Port B Input Pins
 | 
			
		||||
		PORTC: 0x35, // Port C Data Register
 | 
			
		||||
		DDRC:  0x34, // Port C Data Direction Register
 | 
			
		||||
		PINC:  0x33, // Port C Input Pins
 | 
			
		||||
		PORTD: 0x32, // Port D Data Register
 | 
			
		||||
		DDRD:  0x31, // Port D Data Direction Register
 | 
			
		||||
		PIND:  0x30, // Port D Input Pins
 | 
			
		||||
		PORTE: 0x23, // Data Register, Port E
 | 
			
		||||
		DDRE:  0x22, // Data Direction Register, Port E
 | 
			
		||||
		PINE:  0x21, // Input Pins, Port E
 | 
			
		||||
		PORTF: 0x62, // Data Register, Port F
 | 
			
		||||
		DDRF:  0x61, // Data Direction Register, Port F
 | 
			
		||||
		PINF:  0x20, // Input Pins, Port F
 | 
			
		||||
		PORTG: 0x65, // Data Register, Port G
 | 
			
		||||
		DDRG:  0x64, // Data Direction Register, Port G
 | 
			
		||||
		PING:  0x63, // Input Pins, Port G
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	// Timer/Counter, 8-bit Async
 | 
			
		||||
	TC8_ASYNC = struct {
 | 
			
		||||
		TCCR0 __reg
 | 
			
		||||
		TCNT0 __reg
 | 
			
		||||
		OCR0  __reg
 | 
			
		||||
		ASSR  __reg
 | 
			
		||||
	}{
 | 
			
		||||
		TCCR0: 0x53, // Timer/Counter Control Register
 | 
			
		||||
		TCNT0: 0x52, // Timer/Counter Register
 | 
			
		||||
		OCR0:  0x51, // Output Compare Register
 | 
			
		||||
		ASSR:  0x50, // Asynchronus Status Register
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	// Timer/Counter, 16-bit
 | 
			
		||||
	TC16 = struct {
 | 
			
		||||
		TCCR1A __reg
 | 
			
		||||
		TCCR1B __reg
 | 
			
		||||
		TCCR1C __reg
 | 
			
		||||
		TCNT1L __reg
 | 
			
		||||
		TCNT1H __reg
 | 
			
		||||
		OCR1AL __reg
 | 
			
		||||
		OCR1AH __reg
 | 
			
		||||
		OCR1BL __reg
 | 
			
		||||
		OCR1BH __reg
 | 
			
		||||
		OCR1CL __reg
 | 
			
		||||
		OCR1CH __reg
 | 
			
		||||
		ICR1L  __reg
 | 
			
		||||
		ICR1H  __reg
 | 
			
		||||
		TCCR3A __reg
 | 
			
		||||
		TCCR3B __reg
 | 
			
		||||
		TCCR3C __reg
 | 
			
		||||
		TCNT3L __reg
 | 
			
		||||
		TCNT3H __reg
 | 
			
		||||
		OCR3AL __reg
 | 
			
		||||
		OCR3AH __reg
 | 
			
		||||
		OCR3BL __reg
 | 
			
		||||
		OCR3BH __reg
 | 
			
		||||
		OCR3CL __reg
 | 
			
		||||
		OCR3CH __reg
 | 
			
		||||
		ICR3L  __reg
 | 
			
		||||
		ICR3H  __reg
 | 
			
		||||
	}{
 | 
			
		||||
		TCCR1A: 0x4f, // Timer/Counter1 Control Register A
 | 
			
		||||
		TCCR1B: 0x4e, // Timer/Counter1 Control Register B
 | 
			
		||||
		TCCR1C: 0x7a, // Timer/Counter1 Control Register C
 | 
			
		||||
		TCNT1L: 0x4c, // Timer/Counter1  Bytes
 | 
			
		||||
		TCNT1H: 0x4c, // Timer/Counter1  Bytes
 | 
			
		||||
		OCR1AL: 0x4a, // Timer/Counter1 Output Compare Register  Bytes
 | 
			
		||||
		OCR1AH: 0x4a, // Timer/Counter1 Output Compare Register  Bytes
 | 
			
		||||
		OCR1BL: 0x48, // Timer/Counter1 Output Compare Register  Bytes
 | 
			
		||||
		OCR1BH: 0x48, // Timer/Counter1 Output Compare Register  Bytes
 | 
			
		||||
		OCR1CL: 0x78, // Timer/Counter1 Output Compare Register  Bytes
 | 
			
		||||
		OCR1CH: 0x78, // Timer/Counter1 Output Compare Register  Bytes
 | 
			
		||||
		ICR1L:  0x46, // Timer/Counter1 Input Capture Register  Bytes
 | 
			
		||||
		ICR1H:  0x46, // Timer/Counter1 Input Capture Register  Bytes
 | 
			
		||||
		TCCR3A: 0x8b, // Timer/Counter3 Control Register A
 | 
			
		||||
		TCCR3B: 0x8a, // Timer/Counter3 Control Register B
 | 
			
		||||
		TCCR3C: 0x8c, // Timer/Counter3 Control Register C
 | 
			
		||||
		TCNT3L: 0x88, // Timer/Counter3  Bytes
 | 
			
		||||
		TCNT3H: 0x88, // Timer/Counter3  Bytes
 | 
			
		||||
		OCR3AL: 0x86, // Timer/Counter3 Output Compare Register A  Bytes
 | 
			
		||||
		OCR3AH: 0x86, // Timer/Counter3 Output Compare Register A  Bytes
 | 
			
		||||
		OCR3BL: 0x84, // Timer/Counter3 Output Compare Register B  Bytes
 | 
			
		||||
		OCR3BH: 0x84, // Timer/Counter3 Output Compare Register B  Bytes
 | 
			
		||||
		OCR3CL: 0x82, // Timer/Counter3 Output compare Register C  Bytes
 | 
			
		||||
		OCR3CH: 0x82, // Timer/Counter3 Output compare Register C  Bytes
 | 
			
		||||
		ICR3L:  0x80, // Timer/Counter3 Input Capture Register  Bytes
 | 
			
		||||
		ICR3H:  0x80, // Timer/Counter3 Input Capture Register  Bytes
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	// Timer/Counter, 8-bit
 | 
			
		||||
	TC8 = struct {
 | 
			
		||||
		TCCR2 __reg
 | 
			
		||||
		TCNT2 __reg
 | 
			
		||||
		OCR2  __reg
 | 
			
		||||
	}{
 | 
			
		||||
		TCCR2: 0x45, // Timer/Counter Control Register
 | 
			
		||||
		TCNT2: 0x44, // Timer/Counter Register
 | 
			
		||||
		OCR2:  0x43, // Output Compare Register
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	// Watchdog Timer
 | 
			
		||||
	WDT = struct {
 | 
			
		||||
		WDTCR __reg
 | 
			
		||||
	}{
 | 
			
		||||
		WDTCR: 0x41, // Watchdog Timer Control Register
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	// Analog-to-Digital Converter
 | 
			
		||||
	ADC = struct {
 | 
			
		||||
		ADMUX  __reg
 | 
			
		||||
		ADCSRA __reg
 | 
			
		||||
		ADCL   __reg
 | 
			
		||||
		ADCH   __reg
 | 
			
		||||
	}{
 | 
			
		||||
		ADMUX:  0x27, // The ADC multiplexer Selection Register
 | 
			
		||||
		ADCSRA: 0x26, // The ADC Control and Status register
 | 
			
		||||
		ADCL:   0x24, // ADC Data Register  Bytes
 | 
			
		||||
		ADCH:   0x24, // ADC Data Register  Bytes
 | 
			
		||||
	}
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
// Bitfields for FUSE: Fuses
 | 
			
		||||
const (
 | 
			
		||||
	// EXTENDED
 | 
			
		||||
	EXTENDED_M103C = 0x2 // ATmega103 Compatibility Mode
 | 
			
		||||
	EXTENDED_WDTON = 0x1 // Watchdog Timer always on
 | 
			
		||||
 | 
			
		||||
	// HIGH
 | 
			
		||||
	HIGH_OCDEN   = 0x80 // On-Chip Debug Enabled
 | 
			
		||||
	HIGH_JTAGEN  = 0x40 // JTAG Interface Enabled
 | 
			
		||||
	HIGH_SPIEN   = 0x20 // Serial program downloading (SPI) enabled
 | 
			
		||||
	HIGH_EESAVE  = 0x8  // Preserve EEPROM through the Chip Erase cycle
 | 
			
		||||
	HIGH_BOOTSZ  = 0x6  // Select Boot Size
 | 
			
		||||
	HIGH_BOOTRST = 0x1  // Boot Reset vector Enabled
 | 
			
		||||
	HIGH_CKOPT   = 0x10 // CKOPT fuse (operation dependent of CKSEL fuses)
 | 
			
		||||
 | 
			
		||||
	// LOW
 | 
			
		||||
	LOW_BODLEVEL  = 0x80 // Brownout detector trigger level
 | 
			
		||||
	LOW_BODEN     = 0x40 // Brown-out detection enabled
 | 
			
		||||
	LOW_SUT_CKSEL = 0x3f // Select Clock Source
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
// Bitfields for LOCKBIT: Lockbits
 | 
			
		||||
const (
 | 
			
		||||
	// LOCKBIT
 | 
			
		||||
	LOCKBIT_LB   = 0x3  // Memory Lock
 | 
			
		||||
	LOCKBIT_BLB0 = 0xc  // Boot Loader Protection Mode
 | 
			
		||||
	LOCKBIT_BLB1 = 0x30 // Boot Loader Protection Mode
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
// Bitfields for AC: Analog Comparator
 | 
			
		||||
const (
 | 
			
		||||
	// ACSR: Analog Comparator Control And Status Register
 | 
			
		||||
	ACSR_ACD  = 0x80 // Analog Comparator Disable
 | 
			
		||||
	ACSR_ACBG = 0x40 // Analog Comparator Bandgap Select
 | 
			
		||||
	ACSR_ACO  = 0x20 // Analog Compare Output
 | 
			
		||||
	ACSR_ACI  = 0x10 // Analog Comparator Interrupt Flag
 | 
			
		||||
	ACSR_ACIE = 0x8  // Analog Comparator Interrupt Enable
 | 
			
		||||
	ACSR_ACIC = 0x4  // Analog Comparator Input Capture Enable
 | 
			
		||||
	ACSR_ACIS = 0x3  // Analog Comparator Interrupt Mode Select bits
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
// Bitfields for SPI: Serial Peripheral Interface
 | 
			
		||||
const (
 | 
			
		||||
	// SPSR: SPI Status Register
 | 
			
		||||
	SPSR_SPIF  = 0x80 // SPI Interrupt Flag
 | 
			
		||||
	SPSR_WCOL  = 0x40 // Write Collision Flag
 | 
			
		||||
	SPSR_SPI2X = 0x1  // Double SPI Speed Bit
 | 
			
		||||
 | 
			
		||||
	// SPCR: SPI Control Register
 | 
			
		||||
	SPCR_SPIE = 0x80 // SPI Interrupt Enable
 | 
			
		||||
	SPCR_SPE  = 0x40 // SPI Enable
 | 
			
		||||
	SPCR_DORD = 0x20 // Data Order
 | 
			
		||||
	SPCR_MSTR = 0x10 // Master/Slave Select
 | 
			
		||||
	SPCR_CPOL = 0x8  // Clock polarity
 | 
			
		||||
	SPCR_CPHA = 0x4  // Clock Phase
 | 
			
		||||
	SPCR_SPR  = 0x3  // SPI Clock Rate Selects
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
// Bitfields for TWI: Two Wire Serial Interface
 | 
			
		||||
const (
 | 
			
		||||
	// TWCR: TWI Control Register
 | 
			
		||||
	TWCR_TWINT = 0x80 // TWI Interrupt Flag
 | 
			
		||||
	TWCR_TWEA  = 0x40 // TWI Enable Acknowledge Bit
 | 
			
		||||
	TWCR_TWSTA = 0x20 // TWI Start Condition Bit
 | 
			
		||||
	TWCR_TWSTO = 0x10 // TWI Stop Condition Bit
 | 
			
		||||
	TWCR_TWWC  = 0x8  // TWI Write Collition Flag
 | 
			
		||||
	TWCR_TWEN  = 0x4  // TWI Enable Bit
 | 
			
		||||
	TWCR_TWIE  = 0x1  // TWI Interrupt Enable
 | 
			
		||||
 | 
			
		||||
	// TWSR: TWI Status Register
 | 
			
		||||
	TWSR_TWS  = 0xf8 // TWI Status
 | 
			
		||||
	TWSR_TWPS = 0x3  // TWI Prescaler
 | 
			
		||||
 | 
			
		||||
	// TWAR: TWI (Slave) Address register
 | 
			
		||||
	TWAR_TWA   = 0xfe // TWI (Slave) Address register Bits
 | 
			
		||||
	TWAR_TWGCE = 0x1  // TWI General Call Recognition Enable Bit
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
// Bitfields for USART: USART
 | 
			
		||||
const (
 | 
			
		||||
	// UCSR0A: USART Control and Status Register A
 | 
			
		||||
	UCSR0A_RXC0  = 0x80 // USART Receive Complete
 | 
			
		||||
	UCSR0A_TXC0  = 0x40 // USART Transmitt Complete
 | 
			
		||||
	UCSR0A_UDRE0 = 0x20 // USART Data Register Empty
 | 
			
		||||
	UCSR0A_FE0   = 0x10 // Framing Error
 | 
			
		||||
	UCSR0A_DOR0  = 0x8  // Data overRun
 | 
			
		||||
	UCSR0A_UPE0  = 0x4  // Parity Error
 | 
			
		||||
	UCSR0A_U2X0  = 0x2  // Double the USART transmission speed
 | 
			
		||||
	UCSR0A_MPCM0 = 0x1  // Multi-processor Communication Mode
 | 
			
		||||
 | 
			
		||||
	// UCSR0B: USART Control and Status Register B
 | 
			
		||||
	UCSR0B_RXCIE0 = 0x80 // RX Complete Interrupt Enable
 | 
			
		||||
	UCSR0B_TXCIE0 = 0x40 // TX Complete Interrupt Enable
 | 
			
		||||
	UCSR0B_UDRIE0 = 0x20 // USART Data register Empty Interrupt Enable
 | 
			
		||||
	UCSR0B_RXEN0  = 0x10 // Receiver Enable
 | 
			
		||||
	UCSR0B_TXEN0  = 0x8  // Transmitter Enable
 | 
			
		||||
	UCSR0B_UCSZ02 = 0x4  // Character Size
 | 
			
		||||
	UCSR0B_RXB80  = 0x2  // Receive Data Bit 8
 | 
			
		||||
	UCSR0B_TXB80  = 0x1  // Transmit Data Bit 8
 | 
			
		||||
 | 
			
		||||
	// UCSR0C: USART Control and Status Register C
 | 
			
		||||
	UCSR0C_UMSEL0 = 0x40 // USART Mode Select
 | 
			
		||||
	UCSR0C_UPM0   = 0x30 // Parity Mode Bits
 | 
			
		||||
	UCSR0C_USBS0  = 0x8  // Stop Bit Select
 | 
			
		||||
	UCSR0C_UCSZ0  = 0x6  // Character Size
 | 
			
		||||
	UCSR0C_UCPOL0 = 0x1  // Clock Polarity
 | 
			
		||||
 | 
			
		||||
	// UCSR1A: USART Control and Status Register A
 | 
			
		||||
	UCSR1A_RXC1  = 0x80 // USART Receive Complete
 | 
			
		||||
	UCSR1A_TXC1  = 0x40 // USART Transmitt Complete
 | 
			
		||||
	UCSR1A_UDRE1 = 0x20 // USART Data Register Empty
 | 
			
		||||
	UCSR1A_FE1   = 0x10 // Framing Error
 | 
			
		||||
	UCSR1A_DOR1  = 0x8  // Data overRun
 | 
			
		||||
	UCSR1A_UPE1  = 0x4  // Parity Error
 | 
			
		||||
	UCSR1A_U2X1  = 0x2  // Double the USART transmission speed
 | 
			
		||||
	UCSR1A_MPCM1 = 0x1  // Multi-processor Communication Mode
 | 
			
		||||
 | 
			
		||||
	// UCSR1B: USART Control and Status Register B
 | 
			
		||||
	UCSR1B_RXCIE1 = 0x80 // RX Complete Interrupt Enable
 | 
			
		||||
	UCSR1B_TXCIE1 = 0x40 // TX Complete Interrupt Enable
 | 
			
		||||
	UCSR1B_UDRIE1 = 0x20 // USART Data register Empty Interrupt Enable
 | 
			
		||||
	UCSR1B_RXEN1  = 0x10 // Receiver Enable
 | 
			
		||||
	UCSR1B_TXEN1  = 0x8  // Transmitter Enable
 | 
			
		||||
	UCSR1B_UCSZ12 = 0x4  // Character Size
 | 
			
		||||
	UCSR1B_RXB81  = 0x2  // Receive Data Bit 8
 | 
			
		||||
	UCSR1B_TXB81  = 0x1  // Transmit Data Bit 8
 | 
			
		||||
 | 
			
		||||
	// UCSR1C: USART Control and Status Register C
 | 
			
		||||
	UCSR1C_UMSEL1 = 0x40 // USART Mode Select
 | 
			
		||||
	UCSR1C_UPM1   = 0x30 // Parity Mode Bits
 | 
			
		||||
	UCSR1C_USBS1  = 0x8  // Stop Bit Select
 | 
			
		||||
	UCSR1C_UCSZ1  = 0x6  // Character Size
 | 
			
		||||
	UCSR1C_UCPOL1 = 0x1  // Clock Polarity
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
// Bitfields for CPU: CPU Registers
 | 
			
		||||
const (
 | 
			
		||||
	// SREG: Status Register
 | 
			
		||||
	SREG_I = 0x80 // Global Interrupt Enable
 | 
			
		||||
	SREG_T = 0x40 // Bit Copy Storage
 | 
			
		||||
	SREG_H = 0x20 // Half Carry Flag
 | 
			
		||||
	SREG_S = 0x10 // Sign Bit
 | 
			
		||||
	SREG_V = 0x8  // Two's Complement Overflow Flag
 | 
			
		||||
	SREG_N = 0x4  // Negative Flag
 | 
			
		||||
	SREG_Z = 0x2  // Zero Flag
 | 
			
		||||
	SREG_C = 0x1  // Carry Flag
 | 
			
		||||
 | 
			
		||||
	// MCUCR: MCU Control Register
 | 
			
		||||
	MCUCR_SRE   = 0x80 // External SRAM Enable
 | 
			
		||||
	MCUCR_SRW10 = 0x40 // External SRAM Wait State Select
 | 
			
		||||
	MCUCR_SE    = 0x20 // Sleep Enable
 | 
			
		||||
	MCUCR_SM    = 0x18 // Sleep Mode Select
 | 
			
		||||
	MCUCR_SM2   = 0x4  // Sleep Mode Select
 | 
			
		||||
	MCUCR_IVSEL = 0x2  // Interrupt Vector Select
 | 
			
		||||
	MCUCR_IVCE  = 0x1  // Interrupt Vector Change Enable
 | 
			
		||||
 | 
			
		||||
	// XDIV: XTAL Divide Control Register
 | 
			
		||||
	XDIV_XDIVEN = 0x80 // XTAL Divide Enable
 | 
			
		||||
	XDIV_XDIV6  = 0x40 // XTAL Divide Select Bit 6
 | 
			
		||||
	XDIV_XDIV5  = 0x20 // XTAL Divide Select Bit 5
 | 
			
		||||
	XDIV_XDIV4  = 0x10 // XTAL Divide Select Bit 4
 | 
			
		||||
	XDIV_XDIV3  = 0x8  // XTAL Divide Select Bit 3
 | 
			
		||||
	XDIV_XDIV2  = 0x4  // XTAL Divide Select Bit 2
 | 
			
		||||
	XDIV_XDIV1  = 0x2  // XTAL Divide Select Bit 1
 | 
			
		||||
	XDIV_XDIV0  = 0x1  // XTAL Divide Select Bit 0
 | 
			
		||||
 | 
			
		||||
	// XMCRA: External Memory Control Register A
 | 
			
		||||
	XMCRA_SRL   = 0x70 // Wait state page limit
 | 
			
		||||
	XMCRA_SRW0  = 0xc  // Wait state select bit lower page
 | 
			
		||||
	XMCRA_SRW11 = 0x2  // Wait state select bit upper page
 | 
			
		||||
 | 
			
		||||
	// XMCRB: External Memory Control Register B
 | 
			
		||||
	XMCRB_XMBK = 0x80 // External Memory Bus Keeper Enable
 | 
			
		||||
	XMCRB_XMM  = 0x7  // External Memory High Mask
 | 
			
		||||
 | 
			
		||||
	// OSCCAL: Oscillator Calibration Value
 | 
			
		||||
	OSCCAL_OSCCAL = 0xff // Oscillator Calibration
 | 
			
		||||
 | 
			
		||||
	// RAMPZ: RAM Page Z Select Register
 | 
			
		||||
	RAMPZ_RAMPZ0 = 0x1 // RAM Page Z Select Register Bit 0
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
// Bitfields for BOOT_LOAD: Bootloader
 | 
			
		||||
const (
 | 
			
		||||
	// SPMCSR: Store Program Memory Control Register
 | 
			
		||||
	SPMCSR_SPMIE  = 0x80 // SPM Interrupt Enable
 | 
			
		||||
	SPMCSR_RWWSB  = 0x40 // Read While Write Section Busy
 | 
			
		||||
	SPMCSR_RWWSRE = 0x10 // Read While Write section read enable
 | 
			
		||||
	SPMCSR_BLBSET = 0x8  // Boot Lock Bit Set
 | 
			
		||||
	SPMCSR_PGWRT  = 0x4  // Page Write
 | 
			
		||||
	SPMCSR_PGERS  = 0x2  // Page Erase
 | 
			
		||||
	SPMCSR_SPMEN  = 0x1  // Store Program Memory Enable
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
// Bitfields for JTAG: JTAG Interface
 | 
			
		||||
const (
 | 
			
		||||
	// OCDR: On-Chip Debug Related Register in I/O Memory
 | 
			
		||||
	OCDR_OCDR = 0xff // On-Chip Debug Register Bits
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
// Bitfields for EXINT: External Interrupts
 | 
			
		||||
const (
 | 
			
		||||
	// EICRA: External Interrupt Control Register A
 | 
			
		||||
	EICRA_ISC3 = 0xc0 // External Interrupt Sense Control Bit
 | 
			
		||||
	EICRA_ISC2 = 0x30 // External Interrupt Sense Control Bit
 | 
			
		||||
	EICRA_ISC1 = 0xc  // External Interrupt Sense Control Bit
 | 
			
		||||
	EICRA_ISC0 = 0x3  // External Interrupt Sense Control Bit
 | 
			
		||||
 | 
			
		||||
	// EICRB: External Interrupt Control Register B
 | 
			
		||||
	EICRB_ISC7 = 0xc0 // External Interrupt 7-4 Sense Control Bit
 | 
			
		||||
	EICRB_ISC6 = 0x30 // External Interrupt 7-4 Sense Control Bit
 | 
			
		||||
	EICRB_ISC5 = 0xc  // External Interrupt 7-4 Sense Control Bit
 | 
			
		||||
	EICRB_ISC4 = 0x3  // External Interrupt 7-4 Sense Control Bit
 | 
			
		||||
 | 
			
		||||
	// EIMSK: External Interrupt Mask Register
 | 
			
		||||
	EIMSK_INT = 0xff // External Interrupt Request 7 Enable
 | 
			
		||||
 | 
			
		||||
	// EIFR: External Interrupt Flag Register
 | 
			
		||||
	EIFR_INTF = 0xff // External Interrupt Flags
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
// Bitfields for EEPROM: EEPROM
 | 
			
		||||
const (
 | 
			
		||||
	// EECR: EEPROM Control Register
 | 
			
		||||
	EECR_EERIE = 0x8 // EEPROM Ready Interrupt Enable
 | 
			
		||||
	EECR_EEMWE = 0x4 // EEPROM Master Write Enable
 | 
			
		||||
	EECR_EEWE  = 0x2 // EEPROM Write Enable
 | 
			
		||||
	EECR_EERE  = 0x1 // EEPROM Read Enable
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
// Bitfields for TC8_ASYNC: Timer/Counter, 8-bit Async
 | 
			
		||||
const (
 | 
			
		||||
	// TCCR0: Timer/Counter Control Register
 | 
			
		||||
	TCCR0_FOC0  = 0x80 // Force Output Compare
 | 
			
		||||
	TCCR0_WGM00 = 0x40 // Waveform Generation Mode 0
 | 
			
		||||
	TCCR0_COM0  = 0x30 // Compare Match Output Modes
 | 
			
		||||
	TCCR0_WGM01 = 0x8  // Waveform Generation Mode 1
 | 
			
		||||
	TCCR0_CS0   = 0x7  // Clock Selects
 | 
			
		||||
 | 
			
		||||
	// ASSR: Asynchronus Status Register
 | 
			
		||||
	ASSR_AS0    = 0x8 // Asynchronus Timer/Counter 0
 | 
			
		||||
	ASSR_TCN0UB = 0x4 // Timer/Counter0 Update Busy
 | 
			
		||||
	ASSR_OCR0UB = 0x2 // Output Compare register 0 Busy
 | 
			
		||||
	ASSR_TCR0UB = 0x1 // Timer/Counter Control Register 0 Update Busy
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
// Bitfields for TC16: Timer/Counter, 16-bit
 | 
			
		||||
const (
 | 
			
		||||
	// TCCR1A: Timer/Counter1 Control Register A
 | 
			
		||||
	TCCR1A_COM1A = 0xc0 // Compare Output Mode 1A, bits
 | 
			
		||||
	TCCR1A_COM1B = 0x30 // Compare Output Mode 1B, bits
 | 
			
		||||
	TCCR1A_COM1C = 0xc  // Compare Output Mode 1C, bits
 | 
			
		||||
	TCCR1A_WGM1  = 0x3  // Waveform Generation Mode Bits
 | 
			
		||||
 | 
			
		||||
	// TCCR1B: Timer/Counter1 Control Register B
 | 
			
		||||
	TCCR1B_ICNC1 = 0x80 // Input Capture 1 Noise Canceler
 | 
			
		||||
	TCCR1B_ICES1 = 0x40 // Input Capture 1 Edge Select
 | 
			
		||||
	TCCR1B_WGM1  = 0x18 // Waveform Generation Mode
 | 
			
		||||
	TCCR1B_CS1   = 0x7  // Clock Select1 bits
 | 
			
		||||
 | 
			
		||||
	// TCCR1C: Timer/Counter1 Control Register C
 | 
			
		||||
	TCCR1C_FOC1A = 0x80 // Force Output Compare for channel A
 | 
			
		||||
	TCCR1C_FOC1B = 0x40 // Force Output Compare for channel B
 | 
			
		||||
	TCCR1C_FOC1C = 0x20 // Force Output Compare for channel C
 | 
			
		||||
 | 
			
		||||
	// TCCR3A: Timer/Counter3 Control Register A
 | 
			
		||||
	TCCR3A_COM3A = 0xc0 // Compare Output Mode 3A, bits
 | 
			
		||||
	TCCR3A_COM3B = 0x30 // Compare Output Mode 3B, bits
 | 
			
		||||
	TCCR3A_COM3C = 0xc  // Compare Output Mode 3C, bits
 | 
			
		||||
	TCCR3A_WGM3  = 0x3  // Waveform Generation Mode Bits
 | 
			
		||||
 | 
			
		||||
	// TCCR3B: Timer/Counter3 Control Register B
 | 
			
		||||
	TCCR3B_ICNC3 = 0x80 // Input Capture 3  Noise Canceler
 | 
			
		||||
	TCCR3B_ICES3 = 0x40 // Input Capture 3 Edge Select
 | 
			
		||||
	TCCR3B_WGM3  = 0x18 // Waveform Generation Mode
 | 
			
		||||
	TCCR3B_CS3   = 0x7  // Clock Select3 bits
 | 
			
		||||
 | 
			
		||||
	// TCCR3C: Timer/Counter3 Control Register C
 | 
			
		||||
	TCCR3C_FOC3A = 0x80 // Force Output Compare for channel A
 | 
			
		||||
	TCCR3C_FOC3B = 0x40 // Force Output Compare for channel B
 | 
			
		||||
	TCCR3C_FOC3C = 0x20 // Force Output Compare for channel C
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
// Bitfields for TC8: Timer/Counter, 8-bit
 | 
			
		||||
const (
 | 
			
		||||
	// TCCR2: Timer/Counter Control Register
 | 
			
		||||
	TCCR2_FOC2  = 0x80 // Force Output Compare
 | 
			
		||||
	TCCR2_WGM20 = 0x40 // Wafeform Generation Mode
 | 
			
		||||
	TCCR2_COM2  = 0x30 // Compare Match Output Mode
 | 
			
		||||
	TCCR2_WGM21 = 0x8  // Waveform Generation Mode
 | 
			
		||||
	TCCR2_CS2   = 0x7  // Clock Select
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
// Bitfields for WDT: Watchdog Timer
 | 
			
		||||
const (
 | 
			
		||||
	// WDTCR: Watchdog Timer Control Register
 | 
			
		||||
	WDTCR_WDCE = 0x10 // Watchdog Change Enable
 | 
			
		||||
	WDTCR_WDE  = 0x8  // Watch Dog Enable
 | 
			
		||||
	WDTCR_WDP  = 0x7  // Watch Dog Timer Prescaler bits
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
// Bitfields for ADC: Analog-to-Digital Converter
 | 
			
		||||
const (
 | 
			
		||||
	// ADMUX: The ADC multiplexer Selection Register
 | 
			
		||||
	ADMUX_REFS  = 0xc0 // Reference Selection Bits
 | 
			
		||||
	ADMUX_ADLAR = 0x20 // Left Adjust Result
 | 
			
		||||
	ADMUX_MUX   = 0x1f // Analog Channel and Gain Selection Bits
 | 
			
		||||
 | 
			
		||||
	// ADCSRA: The ADC Control and Status register
 | 
			
		||||
	ADCSRA_ADEN = 0x80 // ADC Enable
 | 
			
		||||
	ADCSRA_ADSC = 0x40 // ADC Start Conversion
 | 
			
		||||
	ADCSRA_ADFR = 0x20 // ADC  Free Running Select
 | 
			
		||||
	ADCSRA_ADIF = 0x10 // ADC Interrupt Flag
 | 
			
		||||
	ADCSRA_ADIE = 0x8  // ADC Interrupt Enable
 | 
			
		||||
	ADCSRA_ADPS = 0x7  // ADC  Prescaler Select Bits
 | 
			
		||||
)
 | 
			
		||||
							
								
								
									
										6
									
								
								src/device/avr/atmega128.ld
									
										
									
									
									
										Обычный файл
									
								
							
							
						
						
									
										6
									
								
								src/device/avr/atmega128.ld
									
										
									
									
									
										Обычный файл
									
								
							| 
						 | 
				
			
			@ -0,0 +1,6 @@
 | 
			
		|||
/* Automatically generated file. DO NOT EDIT. */
 | 
			
		||||
/* Generated by gen-device.py from ATmega128.atdf, see http://packs.download.atmel.com/ */
 | 
			
		||||
 | 
			
		||||
__flash_size = 0x20000;
 | 
			
		||||
__ram_size   = 0x1000;
 | 
			
		||||
__num_isrs   = 35;
 | 
			
		||||
							
								
								
									
										1090
									
								
								src/device/avr/atmega1280.go
									
										
									
									
									
										Обычный файл
									
								
							
							
						
						
									
										1090
									
								
								src/device/avr/atmega1280.go
									
										
									
									
									
										Обычный файл
									
								
							
										
											
												Различия файлов не показаны, т.к. их слишком много
												Показать различия
											
										
									
								
							
							
								
								
									
										6
									
								
								src/device/avr/atmega1280.ld
									
										
									
									
									
										Обычный файл
									
								
							
							
						
						
									
										6
									
								
								src/device/avr/atmega1280.ld
									
										
									
									
									
										Обычный файл
									
								
							| 
						 | 
				
			
			@ -0,0 +1,6 @@
 | 
			
		|||
/* Automatically generated file. DO NOT EDIT. */
 | 
			
		||||
/* Generated by gen-device.py from ATmega1280.atdf, see http://packs.download.atmel.com/ */
 | 
			
		||||
 | 
			
		||||
__flash_size = 0x20000;
 | 
			
		||||
__ram_size   = 0x2000;
 | 
			
		||||
__num_isrs   = 57;
 | 
			
		||||
							
								
								
									
										986
									
								
								src/device/avr/atmega1281.go
									
										
									
									
									
										Обычный файл
									
								
							
							
						
						
									
										986
									
								
								src/device/avr/atmega1281.go
									
										
									
									
									
										Обычный файл
									
								
							| 
						 | 
				
			
			@ -0,0 +1,986 @@
 | 
			
		|||
// Automatically generated file. DO NOT EDIT.
 | 
			
		||||
// Generated by gen-device.py from ATmega1281.atdf, see http://packs.download.atmel.com/
 | 
			
		||||
 | 
			
		||||
// +build avr,atmega1281
 | 
			
		||||
 | 
			
		||||
// Device information for the ATmega1281.
 | 
			
		||||
//
 | 
			
		||||
package avr
 | 
			
		||||
 | 
			
		||||
// Magic type name for the compiler.
 | 
			
		||||
type __reg uint8
 | 
			
		||||
 | 
			
		||||
// Export this magic type name.
 | 
			
		||||
type RegValue = __reg
 | 
			
		||||
 | 
			
		||||
// Some information about this device.
 | 
			
		||||
const (
 | 
			
		||||
	DEVICE = "ATmega1281"
 | 
			
		||||
	ARCH   = "AVR8"
 | 
			
		||||
	FAMILY = "megaAVR"
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
// Interrupts
 | 
			
		||||
const (
 | 
			
		||||
	IRQ_RESET        = 0  // External Pin,Power-on Reset,Brown-out Reset,Watchdog Reset,and JTAG AVR Reset. See Datasheet.
 | 
			
		||||
	IRQ_INT0         = 1  // External Interrupt Request 0
 | 
			
		||||
	IRQ_INT1         = 2  // External Interrupt Request 1
 | 
			
		||||
	IRQ_INT2         = 3  // External Interrupt Request 2
 | 
			
		||||
	IRQ_INT3         = 4  // External Interrupt Request 3
 | 
			
		||||
	IRQ_INT4         = 5  // External Interrupt Request 4
 | 
			
		||||
	IRQ_INT5         = 6  // External Interrupt Request 5
 | 
			
		||||
	IRQ_INT6         = 7  // External Interrupt Request 6
 | 
			
		||||
	IRQ_INT7         = 8  // External Interrupt Request 7
 | 
			
		||||
	IRQ_PCINT0       = 9  // Pin Change Interrupt Request 0
 | 
			
		||||
	IRQ_PCINT1       = 10 // Pin Change Interrupt Request 1
 | 
			
		||||
	IRQ_PCINT2       = 11 // Pin Change Interrupt Request 2
 | 
			
		||||
	IRQ_WDT          = 12 // Watchdog Time-out Interrupt
 | 
			
		||||
	IRQ_TIMER2_COMPA = 13 // Timer/Counter2 Compare Match A
 | 
			
		||||
	IRQ_TIMER2_COMPB = 14 // Timer/Counter2 Compare Match B
 | 
			
		||||
	IRQ_TIMER2_OVF   = 15 // Timer/Counter2 Overflow
 | 
			
		||||
	IRQ_TIMER1_CAPT  = 16 // Timer/Counter1 Capture Event
 | 
			
		||||
	IRQ_TIMER1_COMPA = 17 // Timer/Counter1 Compare Match A
 | 
			
		||||
	IRQ_TIMER1_COMPB = 18 // Timer/Counter1 Compare Match B
 | 
			
		||||
	IRQ_TIMER1_COMPC = 19 // Timer/Counter1 Compare Match C
 | 
			
		||||
	IRQ_TIMER1_OVF   = 20 // Timer/Counter1 Overflow
 | 
			
		||||
	IRQ_TIMER0_COMPA = 21 // Timer/Counter0 Compare Match A
 | 
			
		||||
	IRQ_TIMER0_COMPB = 22 // Timer/Counter0 Compare Match B
 | 
			
		||||
	IRQ_TIMER0_OVF   = 23 // Timer/Counter0 Overflow
 | 
			
		||||
	IRQ_SPI_STC      = 24 // SPI Serial Transfer Complete
 | 
			
		||||
	IRQ_USART0_RX    = 25 // USART0, Rx Complete
 | 
			
		||||
	IRQ_USART0_UDRE  = 26 // USART0 Data register Empty
 | 
			
		||||
	IRQ_USART0_TX    = 27 // USART0, Tx Complete
 | 
			
		||||
	IRQ_ANALOG_COMP  = 28 // Analog Comparator
 | 
			
		||||
	IRQ_ADC          = 29 // ADC Conversion Complete
 | 
			
		||||
	IRQ_EE_READY     = 30 // EEPROM Ready
 | 
			
		||||
	IRQ_TIMER3_CAPT  = 31 // Timer/Counter3 Capture Event
 | 
			
		||||
	IRQ_TIMER3_COMPA = 32 // Timer/Counter3 Compare Match A
 | 
			
		||||
	IRQ_TIMER3_COMPB = 33 // Timer/Counter3 Compare Match B
 | 
			
		||||
	IRQ_TIMER3_COMPC = 34 // Timer/Counter3 Compare Match C
 | 
			
		||||
	IRQ_TIMER3_OVF   = 35 // Timer/Counter3 Overflow
 | 
			
		||||
	IRQ_USART1_RX    = 36 // USART1, Rx Complete
 | 
			
		||||
	IRQ_USART1_UDRE  = 37 // USART1 Data register Empty
 | 
			
		||||
	IRQ_USART1_TX    = 38 // USART1, Tx Complete
 | 
			
		||||
	IRQ_TWI          = 39 // 2-wire Serial Interface
 | 
			
		||||
	IRQ_SPM_READY    = 40 // Store Program Memory Read
 | 
			
		||||
	IRQ_TIMER4_CAPT  = 41 // Timer/Counter4 Capture Event
 | 
			
		||||
	IRQ_TIMER4_COMPA = 42 // Timer/Counter4 Compare Match A
 | 
			
		||||
	IRQ_TIMER4_COMPB = 43 // Timer/Counter4 Compare Match B
 | 
			
		||||
	IRQ_TIMER4_COMPC = 44 // Timer/Counter4 Compare Match C
 | 
			
		||||
	IRQ_TIMER4_OVF   = 45 // Timer/Counter4 Overflow
 | 
			
		||||
	IRQ_TIMER5_CAPT  = 46 // Timer/Counter5 Capture Event
 | 
			
		||||
	IRQ_TIMER5_COMPA = 47 // Timer/Counter5 Compare Match A
 | 
			
		||||
	IRQ_TIMER5_COMPB = 48 // Timer/Counter5 Compare Match B
 | 
			
		||||
	IRQ_TIMER5_COMPC = 49 // Timer/Counter5 Compare Match C
 | 
			
		||||
	IRQ_TIMER5_OVF   = 50 // Timer/Counter5 Overflow
 | 
			
		||||
	IRQ_USART2_RX    = 51 // USART2, Rx Complete
 | 
			
		||||
	IRQ_USART2_UDRE  = 52 // USART2 Data register Empty
 | 
			
		||||
	IRQ_USART2_TX    = 53 // USART2, Tx Complete
 | 
			
		||||
	IRQ_USART3_RX    = 54 // USART3, Rx Complete
 | 
			
		||||
	IRQ_USART3_UDRE  = 55 // USART3 Data register Empty
 | 
			
		||||
	IRQ_USART3_TX    = 56 // USART3, Tx Complete
 | 
			
		||||
	IRQ_max          = 56 // Highest interrupt number on this device.
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
// Peripherals
 | 
			
		||||
var (
 | 
			
		||||
	// Fuses
 | 
			
		||||
	FUSE = struct {
 | 
			
		||||
		EXTENDED __reg
 | 
			
		||||
		HIGH     __reg
 | 
			
		||||
		LOW      __reg
 | 
			
		||||
	}{
 | 
			
		||||
		EXTENDED: 0x2,
 | 
			
		||||
		HIGH:     0x1,
 | 
			
		||||
		LOW:      0x0,
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	// Lockbits
 | 
			
		||||
	LOCKBIT = struct {
 | 
			
		||||
		LOCKBIT __reg
 | 
			
		||||
	}{
 | 
			
		||||
		LOCKBIT: 0x0,
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	// Analog Comparator
 | 
			
		||||
	AC = struct {
 | 
			
		||||
		ACSR  __reg
 | 
			
		||||
		DIDR1 __reg
 | 
			
		||||
	}{
 | 
			
		||||
		ACSR:  0x50, // Analog Comparator Control And Status Register
 | 
			
		||||
		DIDR1: 0x7f, // Digital Input Disable Register 1
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	// USART
 | 
			
		||||
	USART = struct {
 | 
			
		||||
		UDR0   __reg
 | 
			
		||||
		UCSR0A __reg
 | 
			
		||||
		UCSR0B __reg
 | 
			
		||||
		UCSR0C __reg
 | 
			
		||||
		UBRR0L __reg
 | 
			
		||||
		UBRR0H __reg
 | 
			
		||||
		UDR1   __reg
 | 
			
		||||
		UCSR1A __reg
 | 
			
		||||
		UCSR1B __reg
 | 
			
		||||
		UCSR1C __reg
 | 
			
		||||
		UBRR1L __reg
 | 
			
		||||
		UBRR1H __reg
 | 
			
		||||
	}{
 | 
			
		||||
		UDR0:   0xc6, // USART I/O Data Register
 | 
			
		||||
		UCSR0A: 0xc0, // USART Control and Status Register A
 | 
			
		||||
		UCSR0B: 0xc1, // USART Control and Status Register B
 | 
			
		||||
		UCSR0C: 0xc2, // USART Control and Status Register C
 | 
			
		||||
		UBRR0L: 0xc4, // USART Baud Rate Register  Bytes
 | 
			
		||||
		UBRR0H: 0xc4, // USART Baud Rate Register  Bytes
 | 
			
		||||
		UDR1:   0xce, // USART I/O Data Register
 | 
			
		||||
		UCSR1A: 0xc8, // USART Control and Status Register A
 | 
			
		||||
		UCSR1B: 0xc9, // USART Control and Status Register B
 | 
			
		||||
		UCSR1C: 0xca, // USART Control and Status Register C
 | 
			
		||||
		UBRR1L: 0xcc, // USART Baud Rate Register  Bytes
 | 
			
		||||
		UBRR1H: 0xcc, // USART Baud Rate Register  Bytes
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	// Two Wire Serial Interface
 | 
			
		||||
	TWI = struct {
 | 
			
		||||
		TWAMR __reg
 | 
			
		||||
		TWBR  __reg
 | 
			
		||||
		TWCR  __reg
 | 
			
		||||
		TWSR  __reg
 | 
			
		||||
		TWDR  __reg
 | 
			
		||||
		TWAR  __reg
 | 
			
		||||
	}{
 | 
			
		||||
		TWAMR: 0xbd, // TWI (Slave) Address Mask Register
 | 
			
		||||
		TWBR:  0xb8, // TWI Bit Rate register
 | 
			
		||||
		TWCR:  0xbc, // TWI Control Register
 | 
			
		||||
		TWSR:  0xb9, // TWI Status Register
 | 
			
		||||
		TWDR:  0xbb, // TWI Data register
 | 
			
		||||
		TWAR:  0xba, // TWI (Slave) Address register
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	// Serial Peripheral Interface
 | 
			
		||||
	SPI = struct {
 | 
			
		||||
		SPCR __reg
 | 
			
		||||
		SPSR __reg
 | 
			
		||||
		SPDR __reg
 | 
			
		||||
	}{
 | 
			
		||||
		SPCR: 0x4c, // SPI Control Register
 | 
			
		||||
		SPSR: 0x4d, // SPI Status Register
 | 
			
		||||
		SPDR: 0x4e, // SPI Data Register
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	// I/O Port
 | 
			
		||||
	PORT = struct {
 | 
			
		||||
		PORTA __reg
 | 
			
		||||
		DDRA  __reg
 | 
			
		||||
		PINA  __reg
 | 
			
		||||
		PORTB __reg
 | 
			
		||||
		DDRB  __reg
 | 
			
		||||
		PINB  __reg
 | 
			
		||||
		PORTC __reg
 | 
			
		||||
		DDRC  __reg
 | 
			
		||||
		PINC  __reg
 | 
			
		||||
		PORTD __reg
 | 
			
		||||
		DDRD  __reg
 | 
			
		||||
		PIND  __reg
 | 
			
		||||
		PORTE __reg
 | 
			
		||||
		DDRE  __reg
 | 
			
		||||
		PINE  __reg
 | 
			
		||||
		PORTF __reg
 | 
			
		||||
		DDRF  __reg
 | 
			
		||||
		PINF  __reg
 | 
			
		||||
		PORTG __reg
 | 
			
		||||
		DDRG  __reg
 | 
			
		||||
		PING  __reg
 | 
			
		||||
	}{
 | 
			
		||||
		PORTA: 0x22, // Port A Data Register
 | 
			
		||||
		DDRA:  0x21, // Port A Data Direction Register
 | 
			
		||||
		PINA:  0x20, // Port A Input Pins
 | 
			
		||||
		PORTB: 0x25, // Port B Data Register
 | 
			
		||||
		DDRB:  0x24, // Port B Data Direction Register
 | 
			
		||||
		PINB:  0x23, // Port B Input Pins
 | 
			
		||||
		PORTC: 0x28, // Port C Data Register
 | 
			
		||||
		DDRC:  0x27, // Port C Data Direction Register
 | 
			
		||||
		PINC:  0x26, // Port C Input Pins
 | 
			
		||||
		PORTD: 0x2b, // Port D Data Register
 | 
			
		||||
		DDRD:  0x2a, // Port D Data Direction Register
 | 
			
		||||
		PIND:  0x29, // Port D Input Pins
 | 
			
		||||
		PORTE: 0x2e, // Data Register, Port E
 | 
			
		||||
		DDRE:  0x2d, // Data Direction Register, Port E
 | 
			
		||||
		PINE:  0x2c, // Input Pins, Port E
 | 
			
		||||
		PORTF: 0x31, // Data Register, Port F
 | 
			
		||||
		DDRF:  0x30, // Data Direction Register, Port F
 | 
			
		||||
		PINF:  0x2f, // Input Pins, Port F
 | 
			
		||||
		PORTG: 0x34, // Data Register, Port G
 | 
			
		||||
		DDRG:  0x33, // Data Direction Register, Port G
 | 
			
		||||
		PING:  0x32, // Input Pins, Port G
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	// Timer/Counter, 8-bit
 | 
			
		||||
	TC8 = struct {
 | 
			
		||||
		OCR0B  __reg
 | 
			
		||||
		OCR0A  __reg
 | 
			
		||||
		TCNT0  __reg
 | 
			
		||||
		TCCR0B __reg
 | 
			
		||||
		TCCR0A __reg
 | 
			
		||||
		TIMSK0 __reg
 | 
			
		||||
		TIFR0  __reg
 | 
			
		||||
	}{
 | 
			
		||||
		OCR0B:  0x48, // Timer/Counter0 Output Compare Register
 | 
			
		||||
		OCR0A:  0x47, // Timer/Counter0 Output Compare Register
 | 
			
		||||
		TCNT0:  0x46, // Timer/Counter0
 | 
			
		||||
		TCCR0B: 0x45, // Timer/Counter Control Register B
 | 
			
		||||
		TCCR0A: 0x44, // Timer/Counter  Control Register A
 | 
			
		||||
		TIMSK0: 0x6e, // Timer/Counter0 Interrupt Mask Register
 | 
			
		||||
		TIFR0:  0x35, // Timer/Counter0 Interrupt Flag register
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	// Timer/Counter, 8-bit Async
 | 
			
		||||
	TC8_ASYNC = struct {
 | 
			
		||||
		TIMSK2 __reg
 | 
			
		||||
		TIFR2  __reg
 | 
			
		||||
		TCCR2A __reg
 | 
			
		||||
		TCCR2B __reg
 | 
			
		||||
		TCNT2  __reg
 | 
			
		||||
		OCR2B  __reg
 | 
			
		||||
		OCR2A  __reg
 | 
			
		||||
		ASSR   __reg
 | 
			
		||||
	}{
 | 
			
		||||
		TIMSK2: 0x70, // Timer/Counter Interrupt Mask register
 | 
			
		||||
		TIFR2:  0x37, // Timer/Counter Interrupt Flag Register
 | 
			
		||||
		TCCR2A: 0xb0, // Timer/Counter2 Control Register A
 | 
			
		||||
		TCCR2B: 0xb1, // Timer/Counter2 Control Register B
 | 
			
		||||
		TCNT2:  0xb2, // Timer/Counter2
 | 
			
		||||
		OCR2B:  0xb4, // Timer/Counter2 Output Compare Register B
 | 
			
		||||
		OCR2A:  0xb3, // Timer/Counter2 Output Compare Register A
 | 
			
		||||
		ASSR:   0xb6, // Asynchronous Status Register
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	// Watchdog Timer
 | 
			
		||||
	WDT = struct {
 | 
			
		||||
		WDTCSR __reg
 | 
			
		||||
	}{
 | 
			
		||||
		WDTCSR: 0x60, // Watchdog Timer Control Register
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	// Timer/Counter, 16-bit
 | 
			
		||||
	TC16 = struct {
 | 
			
		||||
		TCCR5A __reg
 | 
			
		||||
		TCCR5B __reg
 | 
			
		||||
		TCCR5C __reg
 | 
			
		||||
		TCNT5L __reg
 | 
			
		||||
		TCNT5H __reg
 | 
			
		||||
		OCR5AL __reg
 | 
			
		||||
		OCR5AH __reg
 | 
			
		||||
		OCR5BL __reg
 | 
			
		||||
		OCR5BH __reg
 | 
			
		||||
		OCR5CL __reg
 | 
			
		||||
		OCR5CH __reg
 | 
			
		||||
		ICR5L  __reg
 | 
			
		||||
		ICR5H  __reg
 | 
			
		||||
		TIMSK5 __reg
 | 
			
		||||
		TIFR5  __reg
 | 
			
		||||
		TCCR4A __reg
 | 
			
		||||
		TCCR4B __reg
 | 
			
		||||
		TCCR4C __reg
 | 
			
		||||
		TCNT4L __reg
 | 
			
		||||
		TCNT4H __reg
 | 
			
		||||
		OCR4AL __reg
 | 
			
		||||
		OCR4AH __reg
 | 
			
		||||
		OCR4BL __reg
 | 
			
		||||
		OCR4BH __reg
 | 
			
		||||
		OCR4CL __reg
 | 
			
		||||
		OCR4CH __reg
 | 
			
		||||
		ICR4L  __reg
 | 
			
		||||
		ICR4H  __reg
 | 
			
		||||
		TIMSK4 __reg
 | 
			
		||||
		TIFR4  __reg
 | 
			
		||||
		TCCR3A __reg
 | 
			
		||||
		TCCR3B __reg
 | 
			
		||||
		TCCR3C __reg
 | 
			
		||||
		TCNT3L __reg
 | 
			
		||||
		TCNT3H __reg
 | 
			
		||||
		OCR3AL __reg
 | 
			
		||||
		OCR3AH __reg
 | 
			
		||||
		OCR3BL __reg
 | 
			
		||||
		OCR3BH __reg
 | 
			
		||||
		OCR3CL __reg
 | 
			
		||||
		OCR3CH __reg
 | 
			
		||||
		ICR3L  __reg
 | 
			
		||||
		ICR3H  __reg
 | 
			
		||||
		TIMSK3 __reg
 | 
			
		||||
		TIFR3  __reg
 | 
			
		||||
		TCCR1A __reg
 | 
			
		||||
		TCCR1B __reg
 | 
			
		||||
		TCCR1C __reg
 | 
			
		||||
		TCNT1L __reg
 | 
			
		||||
		TCNT1H __reg
 | 
			
		||||
		OCR1AL __reg
 | 
			
		||||
		OCR1AH __reg
 | 
			
		||||
		OCR1BL __reg
 | 
			
		||||
		OCR1BH __reg
 | 
			
		||||
		OCR1CL __reg
 | 
			
		||||
		OCR1CH __reg
 | 
			
		||||
		ICR1L  __reg
 | 
			
		||||
		ICR1H  __reg
 | 
			
		||||
		TIMSK1 __reg
 | 
			
		||||
		TIFR1  __reg
 | 
			
		||||
	}{
 | 
			
		||||
		TCCR5A: 0x120, // Timer/Counter5 Control Register A
 | 
			
		||||
		TCCR5B: 0x121, // Timer/Counter5 Control Register B
 | 
			
		||||
		TCCR5C: 0x122, // Timer/Counter 5 Control Register C
 | 
			
		||||
		TCNT5L: 0x124, // Timer/Counter5  Bytes
 | 
			
		||||
		TCNT5H: 0x124, // Timer/Counter5  Bytes
 | 
			
		||||
		OCR5AL: 0x128, // Timer/Counter5 Output Compare Register A  Bytes
 | 
			
		||||
		OCR5AH: 0x128, // Timer/Counter5 Output Compare Register A  Bytes
 | 
			
		||||
		OCR5BL: 0x12a, // Timer/Counter5 Output Compare Register B  Bytes
 | 
			
		||||
		OCR5BH: 0x12a, // Timer/Counter5 Output Compare Register B  Bytes
 | 
			
		||||
		OCR5CL: 0x12c, // Timer/Counter5 Output Compare Register B  Bytes
 | 
			
		||||
		OCR5CH: 0x12c, // Timer/Counter5 Output Compare Register B  Bytes
 | 
			
		||||
		ICR5L:  0x126, // Timer/Counter5 Input Capture Register  Bytes
 | 
			
		||||
		ICR5H:  0x126, // Timer/Counter5 Input Capture Register  Bytes
 | 
			
		||||
		TIMSK5: 0x73,  // Timer/Counter5 Interrupt Mask Register
 | 
			
		||||
		TIFR5:  0x3a,  // Timer/Counter5 Interrupt Flag register
 | 
			
		||||
		TCCR4A: 0xa0,  // Timer/Counter4 Control Register A
 | 
			
		||||
		TCCR4B: 0xa1,  // Timer/Counter4 Control Register B
 | 
			
		||||
		TCCR4C: 0xa2,  // Timer/Counter 4 Control Register C
 | 
			
		||||
		TCNT4L: 0xa4,  // Timer/Counter4  Bytes
 | 
			
		||||
		TCNT4H: 0xa4,  // Timer/Counter4  Bytes
 | 
			
		||||
		OCR4AL: 0xa8,  // Timer/Counter4 Output Compare Register A  Bytes
 | 
			
		||||
		OCR4AH: 0xa8,  // Timer/Counter4 Output Compare Register A  Bytes
 | 
			
		||||
		OCR4BL: 0xaa,  // Timer/Counter4 Output Compare Register B  Bytes
 | 
			
		||||
		OCR4BH: 0xaa,  // Timer/Counter4 Output Compare Register B  Bytes
 | 
			
		||||
		OCR4CL: 0xac,  // Timer/Counter4 Output Compare Register B  Bytes
 | 
			
		||||
		OCR4CH: 0xac,  // Timer/Counter4 Output Compare Register B  Bytes
 | 
			
		||||
		ICR4L:  0xa6,  // Timer/Counter4 Input Capture Register  Bytes
 | 
			
		||||
		ICR4H:  0xa6,  // Timer/Counter4 Input Capture Register  Bytes
 | 
			
		||||
		TIMSK4: 0x72,  // Timer/Counter4 Interrupt Mask Register
 | 
			
		||||
		TIFR4:  0x39,  // Timer/Counter4 Interrupt Flag register
 | 
			
		||||
		TCCR3A: 0x90,  // Timer/Counter3 Control Register A
 | 
			
		||||
		TCCR3B: 0x91,  // Timer/Counter3 Control Register B
 | 
			
		||||
		TCCR3C: 0x92,  // Timer/Counter 3 Control Register C
 | 
			
		||||
		TCNT3L: 0x94,  // Timer/Counter3  Bytes
 | 
			
		||||
		TCNT3H: 0x94,  // Timer/Counter3  Bytes
 | 
			
		||||
		OCR3AL: 0x98,  // Timer/Counter3 Output Compare Register A  Bytes
 | 
			
		||||
		OCR3AH: 0x98,  // Timer/Counter3 Output Compare Register A  Bytes
 | 
			
		||||
		OCR3BL: 0x9a,  // Timer/Counter3 Output Compare Register B  Bytes
 | 
			
		||||
		OCR3BH: 0x9a,  // Timer/Counter3 Output Compare Register B  Bytes
 | 
			
		||||
		OCR3CL: 0x9c,  // Timer/Counter3 Output Compare Register B  Bytes
 | 
			
		||||
		OCR3CH: 0x9c,  // Timer/Counter3 Output Compare Register B  Bytes
 | 
			
		||||
		ICR3L:  0x96,  // Timer/Counter3 Input Capture Register  Bytes
 | 
			
		||||
		ICR3H:  0x96,  // Timer/Counter3 Input Capture Register  Bytes
 | 
			
		||||
		TIMSK3: 0x71,  // Timer/Counter3 Interrupt Mask Register
 | 
			
		||||
		TIFR3:  0x38,  // Timer/Counter3 Interrupt Flag register
 | 
			
		||||
		TCCR1A: 0x80,  // Timer/Counter1 Control Register A
 | 
			
		||||
		TCCR1B: 0x81,  // Timer/Counter1 Control Register B
 | 
			
		||||
		TCCR1C: 0x82,  // Timer/Counter 1 Control Register C
 | 
			
		||||
		TCNT1L: 0x84,  // Timer/Counter1  Bytes
 | 
			
		||||
		TCNT1H: 0x84,  // Timer/Counter1  Bytes
 | 
			
		||||
		OCR1AL: 0x88,  // Timer/Counter1 Output Compare Register A  Bytes
 | 
			
		||||
		OCR1AH: 0x88,  // Timer/Counter1 Output Compare Register A  Bytes
 | 
			
		||||
		OCR1BL: 0x8a,  // Timer/Counter1 Output Compare Register B  Bytes
 | 
			
		||||
		OCR1BH: 0x8a,  // Timer/Counter1 Output Compare Register B  Bytes
 | 
			
		||||
		OCR1CL: 0x8c,  // Timer/Counter1 Output Compare Register C  Bytes
 | 
			
		||||
		OCR1CH: 0x8c,  // Timer/Counter1 Output Compare Register C  Bytes
 | 
			
		||||
		ICR1L:  0x86,  // Timer/Counter1 Input Capture Register  Bytes
 | 
			
		||||
		ICR1H:  0x86,  // Timer/Counter1 Input Capture Register  Bytes
 | 
			
		||||
		TIMSK1: 0x6f,  // Timer/Counter1 Interrupt Mask Register
 | 
			
		||||
		TIFR1:  0x36,  // Timer/Counter1 Interrupt Flag register
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	// EEPROM
 | 
			
		||||
	EEPROM = struct {
 | 
			
		||||
		EEARL __reg
 | 
			
		||||
		EEARH __reg
 | 
			
		||||
		EEDR  __reg
 | 
			
		||||
		EECR  __reg
 | 
			
		||||
	}{
 | 
			
		||||
		EEARL: 0x41, // EEPROM Address Register Low Bytes
 | 
			
		||||
		EEARH: 0x41, // EEPROM Address Register Low Bytes
 | 
			
		||||
		EEDR:  0x40, // EEPROM Data Register
 | 
			
		||||
		EECR:  0x3f, // EEPROM Control Register
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	// JTAG Interface
 | 
			
		||||
	JTAG = struct {
 | 
			
		||||
		OCDR __reg
 | 
			
		||||
	}{
 | 
			
		||||
		OCDR: 0x51, // On-Chip Debug Related Register in I/O Memory
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	// External Interrupts
 | 
			
		||||
	EXINT = struct {
 | 
			
		||||
		EICRA  __reg
 | 
			
		||||
		EICRB  __reg
 | 
			
		||||
		EIMSK  __reg
 | 
			
		||||
		EIFR   __reg
 | 
			
		||||
		PCMSK2 __reg
 | 
			
		||||
		PCMSK1 __reg
 | 
			
		||||
		PCMSK0 __reg
 | 
			
		||||
		PCIFR  __reg
 | 
			
		||||
		PCICR  __reg
 | 
			
		||||
	}{
 | 
			
		||||
		EICRA:  0x69, // External Interrupt Control Register A
 | 
			
		||||
		EICRB:  0x6a, // External Interrupt Control Register B
 | 
			
		||||
		EIMSK:  0x3d, // External Interrupt Mask Register
 | 
			
		||||
		EIFR:   0x3c, // External Interrupt Flag Register
 | 
			
		||||
		PCMSK2: 0x6d, // Pin Change Mask Register 2
 | 
			
		||||
		PCMSK1: 0x6c, // Pin Change Mask Register 1
 | 
			
		||||
		PCMSK0: 0x6b, // Pin Change Mask Register 0
 | 
			
		||||
		PCIFR:  0x3b, // Pin Change Interrupt Flag Register
 | 
			
		||||
		PCICR:  0x68, // Pin Change Interrupt Control Register
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	// Analog-to-Digital Converter
 | 
			
		||||
	ADC = struct {
 | 
			
		||||
		ADMUX  __reg
 | 
			
		||||
		ADCL   __reg
 | 
			
		||||
		ADCH   __reg
 | 
			
		||||
		ADCSRA __reg
 | 
			
		||||
		DIDR2  __reg
 | 
			
		||||
		DIDR0  __reg
 | 
			
		||||
	}{
 | 
			
		||||
		ADMUX:  0x7c, // The ADC multiplexer Selection Register
 | 
			
		||||
		ADCL:   0x78, // ADC Data Register  Bytes
 | 
			
		||||
		ADCH:   0x78, // ADC Data Register  Bytes
 | 
			
		||||
		ADCSRA: 0x7a, // The ADC Control and Status register A
 | 
			
		||||
		DIDR2:  0x7d, // Digital Input Disable Register
 | 
			
		||||
		DIDR0:  0x7e, // Digital Input Disable Register
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	// Bootloader
 | 
			
		||||
	BOOT_LOAD = struct {
 | 
			
		||||
		SPMCSR __reg
 | 
			
		||||
	}{
 | 
			
		||||
		SPMCSR: 0x57, // Store Program Memory Control Register
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	// CPU Registers
 | 
			
		||||
	CPU = struct {
 | 
			
		||||
		SREG   __reg
 | 
			
		||||
		SPL    __reg
 | 
			
		||||
		SPH    __reg
 | 
			
		||||
		XMCRA  __reg
 | 
			
		||||
		XMCRB  __reg
 | 
			
		||||
		OSCCAL __reg
 | 
			
		||||
		CLKPR  __reg
 | 
			
		||||
		SMCR   __reg
 | 
			
		||||
		RAMPZ  __reg
 | 
			
		||||
		GPIOR2 __reg
 | 
			
		||||
		GPIOR1 __reg
 | 
			
		||||
		GPIOR0 __reg
 | 
			
		||||
		PRR1   __reg
 | 
			
		||||
		PRR0   __reg
 | 
			
		||||
	}{
 | 
			
		||||
		SREG:   0x5f, // Status Register
 | 
			
		||||
		SPL:    0x5d, // Stack Pointer
 | 
			
		||||
		SPH:    0x5d, // Stack Pointer
 | 
			
		||||
		XMCRA:  0x74, // External Memory Control Register A
 | 
			
		||||
		XMCRB:  0x75, // External Memory Control Register B
 | 
			
		||||
		OSCCAL: 0x66, // Oscillator Calibration Value
 | 
			
		||||
		CLKPR:  0x61,
 | 
			
		||||
		SMCR:   0x53, // Sleep Mode Control Register
 | 
			
		||||
		RAMPZ:  0x5b, // RAM Page Z Select Register
 | 
			
		||||
		GPIOR2: 0x4b, // General Purpose IO Register 2
 | 
			
		||||
		GPIOR1: 0x4a, // General Purpose IO Register 1
 | 
			
		||||
		GPIOR0: 0x3e, // General Purpose IO Register 0
 | 
			
		||||
		PRR1:   0x65, // Power Reduction Register1
 | 
			
		||||
		PRR0:   0x64, // Power Reduction Register0
 | 
			
		||||
	}
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
// Bitfields for FUSE: Fuses
 | 
			
		||||
const (
 | 
			
		||||
	// EXTENDED
 | 
			
		||||
	EXTENDED_BODLEVEL = 0x7 // Brown-out Detector trigger level
 | 
			
		||||
 | 
			
		||||
	// HIGH
 | 
			
		||||
	HIGH_OCDEN   = 0x80 // On-Chip Debug Enabled
 | 
			
		||||
	HIGH_JTAGEN  = 0x40 // JTAG Interface Enabled
 | 
			
		||||
	HIGH_SPIEN   = 0x20 // Serial program downloading (SPI) enabled
 | 
			
		||||
	HIGH_WDTON   = 0x10 // Watchdog timer always on
 | 
			
		||||
	HIGH_EESAVE  = 0x8  // Preserve EEPROM through the Chip Erase cycle
 | 
			
		||||
	HIGH_BOOTSZ  = 0x6  // Select Boot Size
 | 
			
		||||
	HIGH_BOOTRST = 0x1  // Boot Reset vector Enabled
 | 
			
		||||
 | 
			
		||||
	// LOW
 | 
			
		||||
	LOW_CKDIV8    = 0x80 // Divide clock by 8 internally
 | 
			
		||||
	LOW_CKOUT     = 0x40 // Clock output on PORTE7
 | 
			
		||||
	LOW_SUT_CKSEL = 0x3f // Select Clock Source
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
// Bitfields for LOCKBIT: Lockbits
 | 
			
		||||
const (
 | 
			
		||||
	// LOCKBIT
 | 
			
		||||
	LOCKBIT_LB   = 0x3  // Memory Lock
 | 
			
		||||
	LOCKBIT_BLB0 = 0xc  // Boot Loader Protection Mode
 | 
			
		||||
	LOCKBIT_BLB1 = 0x30 // Boot Loader Protection Mode
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
// Bitfields for AC: Analog Comparator
 | 
			
		||||
const (
 | 
			
		||||
	// ACSR: Analog Comparator Control And Status Register
 | 
			
		||||
	ACSR_ACD  = 0x80 // Analog Comparator Disable
 | 
			
		||||
	ACSR_ACBG = 0x40 // Analog Comparator Bandgap Select
 | 
			
		||||
	ACSR_ACO  = 0x20 // Analog Compare Output
 | 
			
		||||
	ACSR_ACI  = 0x10 // Analog Comparator Interrupt Flag
 | 
			
		||||
	ACSR_ACIE = 0x8  // Analog Comparator Interrupt Enable
 | 
			
		||||
	ACSR_ACIC = 0x4  // Analog Comparator Input Capture Enable
 | 
			
		||||
	ACSR_ACIS = 0x3  // Analog Comparator Interrupt Mode Select bits
 | 
			
		||||
 | 
			
		||||
	// DIDR1: Digital Input Disable Register 1
 | 
			
		||||
	DIDR1_AIN1D = 0x2 // AIN1 Digital Input Disable
 | 
			
		||||
	DIDR1_AIN0D = 0x1 // AIN0 Digital Input Disable
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
// Bitfields for USART: USART
 | 
			
		||||
const (
 | 
			
		||||
	// UCSR0A: USART Control and Status Register A
 | 
			
		||||
	UCSR0A_RXC0  = 0x80 // USART Receive Complete
 | 
			
		||||
	UCSR0A_TXC0  = 0x40 // USART Transmitt Complete
 | 
			
		||||
	UCSR0A_UDRE0 = 0x20 // USART Data Register Empty
 | 
			
		||||
	UCSR0A_FE0   = 0x10 // Framing Error
 | 
			
		||||
	UCSR0A_DOR0  = 0x8  // Data overRun
 | 
			
		||||
	UCSR0A_UPE0  = 0x4  // Parity Error
 | 
			
		||||
	UCSR0A_U2X0  = 0x2  // Double the USART transmission speed
 | 
			
		||||
	UCSR0A_MPCM0 = 0x1  // Multi-processor Communication Mode
 | 
			
		||||
 | 
			
		||||
	// UCSR0B: USART Control and Status Register B
 | 
			
		||||
	UCSR0B_RXCIE0 = 0x80 // RX Complete Interrupt Enable
 | 
			
		||||
	UCSR0B_TXCIE0 = 0x40 // TX Complete Interrupt Enable
 | 
			
		||||
	UCSR0B_UDRIE0 = 0x20 // USART Data register Empty Interrupt Enable
 | 
			
		||||
	UCSR0B_RXEN0  = 0x10 // Receiver Enable
 | 
			
		||||
	UCSR0B_TXEN0  = 0x8  // Transmitter Enable
 | 
			
		||||
	UCSR0B_UCSZ02 = 0x4  // Character Size
 | 
			
		||||
	UCSR0B_RXB80  = 0x2  // Receive Data Bit 8
 | 
			
		||||
	UCSR0B_TXB80  = 0x1  // Transmit Data Bit 8
 | 
			
		||||
 | 
			
		||||
	// UCSR0C: USART Control and Status Register C
 | 
			
		||||
	UCSR0C_UMSEL0 = 0xc0 // USART Mode Select
 | 
			
		||||
	UCSR0C_UPM0   = 0x30 // Parity Mode Bits
 | 
			
		||||
	UCSR0C_USBS0  = 0x8  // Stop Bit Select
 | 
			
		||||
	UCSR0C_UCSZ0  = 0x6  // Character Size
 | 
			
		||||
	UCSR0C_UCPOL0 = 0x1  // Clock Polarity
 | 
			
		||||
 | 
			
		||||
	// UCSR1A: USART Control and Status Register A
 | 
			
		||||
	UCSR1A_RXC1  = 0x80 // USART Receive Complete
 | 
			
		||||
	UCSR1A_TXC1  = 0x40 // USART Transmitt Complete
 | 
			
		||||
	UCSR1A_UDRE1 = 0x20 // USART Data Register Empty
 | 
			
		||||
	UCSR1A_FE1   = 0x10 // Framing Error
 | 
			
		||||
	UCSR1A_DOR1  = 0x8  // Data overRun
 | 
			
		||||
	UCSR1A_UPE1  = 0x4  // Parity Error
 | 
			
		||||
	UCSR1A_U2X1  = 0x2  // Double the USART transmission speed
 | 
			
		||||
	UCSR1A_MPCM1 = 0x1  // Multi-processor Communication Mode
 | 
			
		||||
 | 
			
		||||
	// UCSR1B: USART Control and Status Register B
 | 
			
		||||
	UCSR1B_RXCIE1 = 0x80 // RX Complete Interrupt Enable
 | 
			
		||||
	UCSR1B_TXCIE1 = 0x40 // TX Complete Interrupt Enable
 | 
			
		||||
	UCSR1B_UDRIE1 = 0x20 // USART Data register Empty Interrupt Enable
 | 
			
		||||
	UCSR1B_RXEN1  = 0x10 // Receiver Enable
 | 
			
		||||
	UCSR1B_TXEN1  = 0x8  // Transmitter Enable
 | 
			
		||||
	UCSR1B_UCSZ12 = 0x4  // Character Size
 | 
			
		||||
	UCSR1B_RXB81  = 0x2  // Receive Data Bit 8
 | 
			
		||||
	UCSR1B_TXB81  = 0x1  // Transmit Data Bit 8
 | 
			
		||||
 | 
			
		||||
	// UCSR1C: USART Control and Status Register C
 | 
			
		||||
	UCSR1C_UMSEL1 = 0xc0 // USART Mode Select
 | 
			
		||||
	UCSR1C_UPM1   = 0x30 // Parity Mode Bits
 | 
			
		||||
	UCSR1C_USBS1  = 0x8  // Stop Bit Select
 | 
			
		||||
	UCSR1C_UCSZ1  = 0x6  // Character Size
 | 
			
		||||
	UCSR1C_UCPOL1 = 0x1  // Clock Polarity
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
// Bitfields for TWI: Two Wire Serial Interface
 | 
			
		||||
const (
 | 
			
		||||
	// TWAMR: TWI (Slave) Address Mask Register
 | 
			
		||||
	TWAMR_TWAM = 0xfe
 | 
			
		||||
 | 
			
		||||
	// TWCR: TWI Control Register
 | 
			
		||||
	TWCR_TWINT = 0x80 // TWI Interrupt Flag
 | 
			
		||||
	TWCR_TWEA  = 0x40 // TWI Enable Acknowledge Bit
 | 
			
		||||
	TWCR_TWSTA = 0x20 // TWI Start Condition Bit
 | 
			
		||||
	TWCR_TWSTO = 0x10 // TWI Stop Condition Bit
 | 
			
		||||
	TWCR_TWWC  = 0x8  // TWI Write Collition Flag
 | 
			
		||||
	TWCR_TWEN  = 0x4  // TWI Enable Bit
 | 
			
		||||
	TWCR_TWIE  = 0x1  // TWI Interrupt Enable
 | 
			
		||||
 | 
			
		||||
	// TWSR: TWI Status Register
 | 
			
		||||
	TWSR_TWS  = 0xf8 // TWI Status
 | 
			
		||||
	TWSR_TWPS = 0x3  // TWI Prescaler
 | 
			
		||||
 | 
			
		||||
	// TWAR: TWI (Slave) Address register
 | 
			
		||||
	TWAR_TWA   = 0xfe // TWI (Slave) Address register Bits
 | 
			
		||||
	TWAR_TWGCE = 0x1  // TWI General Call Recognition Enable Bit
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
// Bitfields for SPI: Serial Peripheral Interface
 | 
			
		||||
const (
 | 
			
		||||
	// SPCR: SPI Control Register
 | 
			
		||||
	SPCR_SPIE = 0x80 // SPI Interrupt Enable
 | 
			
		||||
	SPCR_SPE  = 0x40 // SPI Enable
 | 
			
		||||
	SPCR_DORD = 0x20 // Data Order
 | 
			
		||||
	SPCR_MSTR = 0x10 // Master/Slave Select
 | 
			
		||||
	SPCR_CPOL = 0x8  // Clock polarity
 | 
			
		||||
	SPCR_CPHA = 0x4  // Clock Phase
 | 
			
		||||
	SPCR_SPR  = 0x3  // SPI Clock Rate Selects
 | 
			
		||||
 | 
			
		||||
	// SPSR: SPI Status Register
 | 
			
		||||
	SPSR_SPIF  = 0x80 // SPI Interrupt Flag
 | 
			
		||||
	SPSR_WCOL  = 0x40 // Write Collision Flag
 | 
			
		||||
	SPSR_SPI2X = 0x1  // Double SPI Speed Bit
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
// Bitfields for TC8: Timer/Counter, 8-bit
 | 
			
		||||
const (
 | 
			
		||||
	// TCCR0B: Timer/Counter Control Register B
 | 
			
		||||
	TCCR0B_FOC0A = 0x80 // Force Output Compare A
 | 
			
		||||
	TCCR0B_FOC0B = 0x40 // Force Output Compare B
 | 
			
		||||
	TCCR0B_WGM02 = 0x8
 | 
			
		||||
	TCCR0B_CS0   = 0x7 // Clock Select
 | 
			
		||||
 | 
			
		||||
	// TCCR0A: Timer/Counter  Control Register A
 | 
			
		||||
	TCCR0A_COM0A = 0xc0 // Compare Output Mode, Phase Correct PWM Mode
 | 
			
		||||
	TCCR0A_COM0B = 0x30 // Compare Output Mode, Fast PWm
 | 
			
		||||
	TCCR0A_WGM0  = 0x3  // Waveform Generation Mode
 | 
			
		||||
 | 
			
		||||
	// TIMSK0: Timer/Counter0 Interrupt Mask Register
 | 
			
		||||
	TIMSK0_OCIE0B = 0x4 // Timer/Counter0 Output Compare Match B Interrupt Enable
 | 
			
		||||
	TIMSK0_OCIE0A = 0x2 // Timer/Counter0 Output Compare Match A Interrupt Enable
 | 
			
		||||
	TIMSK0_TOIE0  = 0x1 // Timer/Counter0 Overflow Interrupt Enable
 | 
			
		||||
 | 
			
		||||
	// TIFR0: Timer/Counter0 Interrupt Flag register
 | 
			
		||||
	TIFR0_OCF0B = 0x4 // Timer/Counter0 Output Compare Flag 0B
 | 
			
		||||
	TIFR0_OCF0A = 0x2 // Timer/Counter0 Output Compare Flag 0A
 | 
			
		||||
	TIFR0_TOV0  = 0x1 // Timer/Counter0 Overflow Flag
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
// Bitfields for TC8_ASYNC: Timer/Counter, 8-bit Async
 | 
			
		||||
const (
 | 
			
		||||
	// TIMSK2: Timer/Counter Interrupt Mask register
 | 
			
		||||
	TIMSK2_OCIE2B = 0x4 // Timer/Counter2 Output Compare Match B Interrupt Enable
 | 
			
		||||
	TIMSK2_OCIE2A = 0x2 // Timer/Counter2 Output Compare Match A Interrupt Enable
 | 
			
		||||
	TIMSK2_TOIE2  = 0x1 // Timer/Counter2 Overflow Interrupt Enable
 | 
			
		||||
 | 
			
		||||
	// TIFR2: Timer/Counter Interrupt Flag Register
 | 
			
		||||
	TIFR2_OCF2B = 0x4 // Output Compare Flag 2B
 | 
			
		||||
	TIFR2_OCF2A = 0x2 // Output Compare Flag 2A
 | 
			
		||||
	TIFR2_TOV2  = 0x1 // Timer/Counter2 Overflow Flag
 | 
			
		||||
 | 
			
		||||
	// TCCR2A: Timer/Counter2 Control Register A
 | 
			
		||||
	TCCR2A_COM2A = 0xc0 // Compare Output Mode bits
 | 
			
		||||
	TCCR2A_COM2B = 0x30 // Compare Output Mode bits
 | 
			
		||||
	TCCR2A_WGM2  = 0x3  // Waveform Genration Mode
 | 
			
		||||
 | 
			
		||||
	// TCCR2B: Timer/Counter2 Control Register B
 | 
			
		||||
	TCCR2B_FOC2A = 0x80 // Force Output Compare A
 | 
			
		||||
	TCCR2B_FOC2B = 0x40 // Force Output Compare B
 | 
			
		||||
	TCCR2B_WGM22 = 0x8  // Waveform Generation Mode
 | 
			
		||||
	TCCR2B_CS2   = 0x7  // Clock Select bits
 | 
			
		||||
 | 
			
		||||
	// ASSR: Asynchronous Status Register
 | 
			
		||||
	ASSR_EXCLK   = 0x40 // Enable External Clock Input
 | 
			
		||||
	ASSR_AS2     = 0x20 // Asynchronous Timer/Counter2
 | 
			
		||||
	ASSR_TCN2UB  = 0x10 // Timer/Counter2 Update Busy
 | 
			
		||||
	ASSR_OCR2AUB = 0x8  // Output Compare Register2 Update Busy
 | 
			
		||||
	ASSR_OCR2BUB = 0x4  // Output Compare Register 2 Update Busy
 | 
			
		||||
	ASSR_TCR2AUB = 0x2  // Timer/Counter Control Register2 Update Busy
 | 
			
		||||
	ASSR_TCR2BUB = 0x1  // Timer/Counter Control Register2 Update Busy
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
// Bitfields for WDT: Watchdog Timer
 | 
			
		||||
const (
 | 
			
		||||
	// WDTCSR: Watchdog Timer Control Register
 | 
			
		||||
	WDTCSR_WDIF = 0x80 // Watchdog Timeout Interrupt Flag
 | 
			
		||||
	WDTCSR_WDIE = 0x40 // Watchdog Timeout Interrupt Enable
 | 
			
		||||
	WDTCSR_WDP  = 0x27 // Watchdog Timer Prescaler Bits
 | 
			
		||||
	WDTCSR_WDCE = 0x10 // Watchdog Change Enable
 | 
			
		||||
	WDTCSR_WDE  = 0x8  // Watch Dog Enable
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
// Bitfields for TC16: Timer/Counter, 16-bit
 | 
			
		||||
const (
 | 
			
		||||
	// TCCR5A: Timer/Counter5 Control Register A
 | 
			
		||||
	TCCR5A_COM5A = 0xc0 // Compare Output Mode 1A, bits
 | 
			
		||||
	TCCR5A_COM5B = 0x30 // Compare Output Mode 5B, bits
 | 
			
		||||
	TCCR5A_COM5C = 0xc  // Compare Output Mode 5C, bits
 | 
			
		||||
	TCCR5A_WGM5  = 0x3  // Waveform Generation Mode
 | 
			
		||||
 | 
			
		||||
	// TCCR5B: Timer/Counter5 Control Register B
 | 
			
		||||
	TCCR5B_ICNC5 = 0x80 // Input Capture 5 Noise Canceler
 | 
			
		||||
	TCCR5B_ICES5 = 0x40 // Input Capture 5 Edge Select
 | 
			
		||||
	TCCR5B_WGM5  = 0x18 // Waveform Generation Mode
 | 
			
		||||
	TCCR5B_CS5   = 0x7  // Prescaler source of Timer/Counter 5
 | 
			
		||||
 | 
			
		||||
	// TCCR5C: Timer/Counter 5 Control Register C
 | 
			
		||||
	TCCR5C_FOC5A = 0x80 // Force Output Compare 5A
 | 
			
		||||
	TCCR5C_FOC5B = 0x40 // Force Output Compare 5B
 | 
			
		||||
	TCCR5C_FOC5C = 0x20 // Force Output Compare 5C
 | 
			
		||||
 | 
			
		||||
	// TIMSK5: Timer/Counter5 Interrupt Mask Register
 | 
			
		||||
	TIMSK5_ICIE5  = 0x20 // Timer/Counter5 Input Capture Interrupt Enable
 | 
			
		||||
	TIMSK5_OCIE5C = 0x8  // Timer/Counter5 Output Compare C Match Interrupt Enable
 | 
			
		||||
	TIMSK5_OCIE5B = 0x4  // Timer/Counter5 Output Compare B Match Interrupt Enable
 | 
			
		||||
	TIMSK5_OCIE5A = 0x2  // Timer/Counter5 Output Compare A Match Interrupt Enable
 | 
			
		||||
	TIMSK5_TOIE5  = 0x1  // Timer/Counter5 Overflow Interrupt Enable
 | 
			
		||||
 | 
			
		||||
	// TIFR5: Timer/Counter5 Interrupt Flag register
 | 
			
		||||
	TIFR5_ICF5  = 0x20 // Input Capture Flag 5
 | 
			
		||||
	TIFR5_OCF5C = 0x8  // Output Compare Flag 5C
 | 
			
		||||
	TIFR5_OCF5B = 0x4  // Output Compare Flag 5B
 | 
			
		||||
	TIFR5_OCF5A = 0x2  // Output Compare Flag 5A
 | 
			
		||||
	TIFR5_TOV5  = 0x1  // Timer/Counter5 Overflow Flag
 | 
			
		||||
 | 
			
		||||
	// TCCR4A: Timer/Counter4 Control Register A
 | 
			
		||||
	TCCR4A_COM4A = 0xc0 // Compare Output Mode 1A, bits
 | 
			
		||||
	TCCR4A_COM4B = 0x30 // Compare Output Mode 4B, bits
 | 
			
		||||
	TCCR4A_COM4C = 0xc  // Compare Output Mode 4C, bits
 | 
			
		||||
	TCCR4A_WGM4  = 0x3  // Waveform Generation Mode
 | 
			
		||||
 | 
			
		||||
	// TCCR4B: Timer/Counter4 Control Register B
 | 
			
		||||
	TCCR4B_ICNC4 = 0x80 // Input Capture 4 Noise Canceler
 | 
			
		||||
	TCCR4B_ICES4 = 0x40 // Input Capture 4 Edge Select
 | 
			
		||||
	TCCR4B_WGM4  = 0x18 // Waveform Generation Mode
 | 
			
		||||
	TCCR4B_CS4   = 0x7  // Prescaler source of Timer/Counter 4
 | 
			
		||||
 | 
			
		||||
	// TCCR4C: Timer/Counter 4 Control Register C
 | 
			
		||||
	TCCR4C_FOC4A = 0x80 // Force Output Compare 4A
 | 
			
		||||
	TCCR4C_FOC4B = 0x40 // Force Output Compare 4B
 | 
			
		||||
	TCCR4C_FOC4C = 0x20 // Force Output Compare 4C
 | 
			
		||||
 | 
			
		||||
	// TIMSK4: Timer/Counter4 Interrupt Mask Register
 | 
			
		||||
	TIMSK4_ICIE4  = 0x20 // Timer/Counter4 Input Capture Interrupt Enable
 | 
			
		||||
	TIMSK4_OCIE4C = 0x8  // Timer/Counter4 Output Compare C Match Interrupt Enable
 | 
			
		||||
	TIMSK4_OCIE4B = 0x4  // Timer/Counter4 Output Compare B Match Interrupt Enable
 | 
			
		||||
	TIMSK4_OCIE4A = 0x2  // Timer/Counter4 Output Compare A Match Interrupt Enable
 | 
			
		||||
	TIMSK4_TOIE4  = 0x1  // Timer/Counter4 Overflow Interrupt Enable
 | 
			
		||||
 | 
			
		||||
	// TIFR4: Timer/Counter4 Interrupt Flag register
 | 
			
		||||
	TIFR4_ICF4  = 0x20 // Input Capture Flag 4
 | 
			
		||||
	TIFR4_OCF4C = 0x8  // Output Compare Flag 4C
 | 
			
		||||
	TIFR4_OCF4B = 0x4  // Output Compare Flag 4B
 | 
			
		||||
	TIFR4_OCF4A = 0x2  // Output Compare Flag 4A
 | 
			
		||||
	TIFR4_TOV4  = 0x1  // Timer/Counter4 Overflow Flag
 | 
			
		||||
 | 
			
		||||
	// TCCR3A: Timer/Counter3 Control Register A
 | 
			
		||||
	TCCR3A_COM3A = 0xc0 // Compare Output Mode 1A, bits
 | 
			
		||||
	TCCR3A_COM3B = 0x30 // Compare Output Mode 3B, bits
 | 
			
		||||
	TCCR3A_COM3C = 0xc  // Compare Output Mode 3C, bits
 | 
			
		||||
	TCCR3A_WGM3  = 0x3  // Waveform Generation Mode
 | 
			
		||||
 | 
			
		||||
	// TCCR3B: Timer/Counter3 Control Register B
 | 
			
		||||
	TCCR3B_ICNC3 = 0x80 // Input Capture 3 Noise Canceler
 | 
			
		||||
	TCCR3B_ICES3 = 0x40 // Input Capture 3 Edge Select
 | 
			
		||||
	TCCR3B_WGM3  = 0x18 // Waveform Generation Mode
 | 
			
		||||
	TCCR3B_CS3   = 0x7  // Prescaler source of Timer/Counter 3
 | 
			
		||||
 | 
			
		||||
	// TCCR3C: Timer/Counter 3 Control Register C
 | 
			
		||||
	TCCR3C_FOC3A = 0x80 // Force Output Compare 3A
 | 
			
		||||
	TCCR3C_FOC3B = 0x40 // Force Output Compare 3B
 | 
			
		||||
	TCCR3C_FOC3C = 0x20 // Force Output Compare 3C
 | 
			
		||||
 | 
			
		||||
	// TIMSK3: Timer/Counter3 Interrupt Mask Register
 | 
			
		||||
	TIMSK3_ICIE3  = 0x20 // Timer/Counter3 Input Capture Interrupt Enable
 | 
			
		||||
	TIMSK3_OCIE3C = 0x8  // Timer/Counter3 Output Compare C Match Interrupt Enable
 | 
			
		||||
	TIMSK3_OCIE3B = 0x4  // Timer/Counter3 Output Compare B Match Interrupt Enable
 | 
			
		||||
	TIMSK3_OCIE3A = 0x2  // Timer/Counter3 Output Compare A Match Interrupt Enable
 | 
			
		||||
	TIMSK3_TOIE3  = 0x1  // Timer/Counter3 Overflow Interrupt Enable
 | 
			
		||||
 | 
			
		||||
	// TIFR3: Timer/Counter3 Interrupt Flag register
 | 
			
		||||
	TIFR3_ICF3  = 0x20 // Input Capture Flag 3
 | 
			
		||||
	TIFR3_OCF3C = 0x8  // Output Compare Flag 3C
 | 
			
		||||
	TIFR3_OCF3B = 0x4  // Output Compare Flag 3B
 | 
			
		||||
	TIFR3_OCF3A = 0x2  // Output Compare Flag 3A
 | 
			
		||||
	TIFR3_TOV3  = 0x1  // Timer/Counter3 Overflow Flag
 | 
			
		||||
 | 
			
		||||
	// TCCR1A: Timer/Counter1 Control Register A
 | 
			
		||||
	TCCR1A_COM1A = 0xc0 // Compare Output Mode 1A, bits
 | 
			
		||||
	TCCR1A_COM1B = 0x30 // Compare Output Mode 1B, bits
 | 
			
		||||
	TCCR1A_COM1C = 0xc  // Compare Output Mode 1C, bits
 | 
			
		||||
	TCCR1A_WGM1  = 0x3  // Waveform Generation Mode
 | 
			
		||||
 | 
			
		||||
	// TCCR1B: Timer/Counter1 Control Register B
 | 
			
		||||
	TCCR1B_ICNC1 = 0x80 // Input Capture 1 Noise Canceler
 | 
			
		||||
	TCCR1B_ICES1 = 0x40 // Input Capture 1 Edge Select
 | 
			
		||||
	TCCR1B_WGM1  = 0x18 // Waveform Generation Mode
 | 
			
		||||
	TCCR1B_CS1   = 0x7  // Prescaler source of Timer/Counter 1
 | 
			
		||||
 | 
			
		||||
	// TCCR1C: Timer/Counter 1 Control Register C
 | 
			
		||||
	TCCR1C_FOC1A = 0x80 // Force Output Compare 1A
 | 
			
		||||
	TCCR1C_FOC1B = 0x40 // Force Output Compare 1B
 | 
			
		||||
	TCCR1C_FOC1C = 0x20 // Force Output Compare 1C
 | 
			
		||||
 | 
			
		||||
	// TIMSK1: Timer/Counter1 Interrupt Mask Register
 | 
			
		||||
	TIMSK1_ICIE1  = 0x20 // Timer/Counter1 Input Capture Interrupt Enable
 | 
			
		||||
	TIMSK1_OCIE1C = 0x8  // Timer/Counter1 Output Compare C Match Interrupt Enable
 | 
			
		||||
	TIMSK1_OCIE1B = 0x4  // Timer/Counter1 Output Compare B Match Interrupt Enable
 | 
			
		||||
	TIMSK1_OCIE1A = 0x2  // Timer/Counter1 Output Compare A Match Interrupt Enable
 | 
			
		||||
	TIMSK1_TOIE1  = 0x1  // Timer/Counter1 Overflow Interrupt Enable
 | 
			
		||||
 | 
			
		||||
	// TIFR1: Timer/Counter1 Interrupt Flag register
 | 
			
		||||
	TIFR1_ICF1  = 0x20 // Input Capture Flag 1
 | 
			
		||||
	TIFR1_OCF1C = 0x8  // Output Compare Flag 1C
 | 
			
		||||
	TIFR1_OCF1B = 0x4  // Output Compare Flag 1B
 | 
			
		||||
	TIFR1_OCF1A = 0x2  // Output Compare Flag 1A
 | 
			
		||||
	TIFR1_TOV1  = 0x1  // Timer/Counter1 Overflow Flag
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
// Bitfields for EEPROM: EEPROM
 | 
			
		||||
const (
 | 
			
		||||
	// EECR: EEPROM Control Register
 | 
			
		||||
	EECR_EEPM  = 0x30 // EEPROM Programming Mode Bits
 | 
			
		||||
	EECR_EERIE = 0x8  // EEPROM Ready Interrupt Enable
 | 
			
		||||
	EECR_EEMPE = 0x4  // EEPROM Master Write Enable
 | 
			
		||||
	EECR_EEPE  = 0x2  // EEPROM Write Enable
 | 
			
		||||
	EECR_EERE  = 0x1  // EEPROM Read Enable
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
// Bitfields for EXINT: External Interrupts
 | 
			
		||||
const (
 | 
			
		||||
	// EICRA: External Interrupt Control Register A
 | 
			
		||||
	EICRA_ISC3 = 0xc0 // External Interrupt Sense Control Bit
 | 
			
		||||
	EICRA_ISC2 = 0x30 // External Interrupt Sense Control Bit
 | 
			
		||||
	EICRA_ISC1 = 0xc  // External Interrupt Sense Control Bit
 | 
			
		||||
	EICRA_ISC0 = 0x3  // External Interrupt Sense Control Bit
 | 
			
		||||
 | 
			
		||||
	// EICRB: External Interrupt Control Register B
 | 
			
		||||
	EICRB_ISC7 = 0xc0 // External Interrupt 7-4 Sense Control Bit
 | 
			
		||||
	EICRB_ISC6 = 0x30 // External Interrupt 7-4 Sense Control Bit
 | 
			
		||||
	EICRB_ISC5 = 0xc  // External Interrupt 7-4 Sense Control Bit
 | 
			
		||||
	EICRB_ISC4 = 0x3  // External Interrupt 7-4 Sense Control Bit
 | 
			
		||||
 | 
			
		||||
	// EIMSK: External Interrupt Mask Register
 | 
			
		||||
	EIMSK_INT = 0xff // External Interrupt Request 7 Enable
 | 
			
		||||
 | 
			
		||||
	// EIFR: External Interrupt Flag Register
 | 
			
		||||
	EIFR_INTF = 0xff // External Interrupt Flags
 | 
			
		||||
 | 
			
		||||
	// PCMSK2: Pin Change Mask Register 2
 | 
			
		||||
	PCMSK2_PCINT = 0xff // Pin Change Enable mask
 | 
			
		||||
 | 
			
		||||
	// PCMSK1: Pin Change Mask Register 1
 | 
			
		||||
	PCMSK1_PCINT = 0xff // Pin Change Enable mask
 | 
			
		||||
 | 
			
		||||
	// PCMSK0: Pin Change Mask Register 0
 | 
			
		||||
	PCMSK0_PCINT = 0xff // Pin Change Enable mask
 | 
			
		||||
 | 
			
		||||
	// PCIFR: Pin Change Interrupt Flag Register
 | 
			
		||||
	PCIFR_PCIF = 0x7 // Pin Change Interrupt Flags
 | 
			
		||||
 | 
			
		||||
	// PCICR: Pin Change Interrupt Control Register
 | 
			
		||||
	PCICR_PCIE = 0x7 // Pin Change Interrupt Enables
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
// Bitfields for ADC: Analog-to-Digital Converter
 | 
			
		||||
const (
 | 
			
		||||
	// ADMUX: The ADC multiplexer Selection Register
 | 
			
		||||
	ADMUX_REFS  = 0xc0 // Reference Selection Bits
 | 
			
		||||
	ADMUX_ADLAR = 0x20 // Left Adjust Result
 | 
			
		||||
	ADMUX_MUX   = 0x1f // Analog Channel and Gain Selection Bits
 | 
			
		||||
 | 
			
		||||
	// ADCSRA: The ADC Control and Status register A
 | 
			
		||||
	ADCSRA_ADEN  = 0x80 // ADC Enable
 | 
			
		||||
	ADCSRA_ADSC  = 0x40 // ADC Start Conversion
 | 
			
		||||
	ADCSRA_ADATE = 0x20 // ADC  Auto Trigger Enable
 | 
			
		||||
	ADCSRA_ADIF  = 0x10 // ADC Interrupt Flag
 | 
			
		||||
	ADCSRA_ADIE  = 0x8  // ADC Interrupt Enable
 | 
			
		||||
	ADCSRA_ADPS  = 0x7  // ADC  Prescaler Select Bits
 | 
			
		||||
 | 
			
		||||
	// DIDR2: Digital Input Disable Register
 | 
			
		||||
	DIDR2_ADC15D = 0x80
 | 
			
		||||
	DIDR2_ADC14D = 0x40
 | 
			
		||||
	DIDR2_ADC13D = 0x20
 | 
			
		||||
	DIDR2_ADC12D = 0x10
 | 
			
		||||
	DIDR2_ADC11D = 0x8
 | 
			
		||||
	DIDR2_ADC10D = 0x4
 | 
			
		||||
	DIDR2_ADC9D  = 0x2
 | 
			
		||||
	DIDR2_ADC8D  = 0x1
 | 
			
		||||
 | 
			
		||||
	// DIDR0: Digital Input Disable Register
 | 
			
		||||
	DIDR0_ADC7D = 0x80
 | 
			
		||||
	DIDR0_ADC6D = 0x40
 | 
			
		||||
	DIDR0_ADC5D = 0x20
 | 
			
		||||
	DIDR0_ADC4D = 0x10
 | 
			
		||||
	DIDR0_ADC3D = 0x8
 | 
			
		||||
	DIDR0_ADC2D = 0x4
 | 
			
		||||
	DIDR0_ADC1D = 0x2
 | 
			
		||||
	DIDR0_ADC0D = 0x1
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
// Bitfields for BOOT_LOAD: Bootloader
 | 
			
		||||
const (
 | 
			
		||||
	// SPMCSR: Store Program Memory Control Register
 | 
			
		||||
	SPMCSR_SPMIE  = 0x80 // SPM Interrupt Enable
 | 
			
		||||
	SPMCSR_RWWSB  = 0x40 // Read While Write Section Busy
 | 
			
		||||
	SPMCSR_SIGRD  = 0x20 // Signature Row Read
 | 
			
		||||
	SPMCSR_RWWSRE = 0x10 // Read While Write section read enable
 | 
			
		||||
	SPMCSR_BLBSET = 0x8  // Boot Lock Bit Set
 | 
			
		||||
	SPMCSR_PGWRT  = 0x4  // Page Write
 | 
			
		||||
	SPMCSR_PGERS  = 0x2  // Page Erase
 | 
			
		||||
	SPMCSR_SPMEN  = 0x1  // Store Program Memory Enable
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
// Bitfields for CPU: CPU Registers
 | 
			
		||||
const (
 | 
			
		||||
	// SREG: Status Register
 | 
			
		||||
	SREG_I = 0x80 // Global Interrupt Enable
 | 
			
		||||
	SREG_T = 0x40 // Bit Copy Storage
 | 
			
		||||
	SREG_H = 0x20 // Half Carry Flag
 | 
			
		||||
	SREG_S = 0x10 // Sign Bit
 | 
			
		||||
	SREG_V = 0x8  // Two's Complement Overflow Flag
 | 
			
		||||
	SREG_N = 0x4  // Negative Flag
 | 
			
		||||
	SREG_Z = 0x2  // Zero Flag
 | 
			
		||||
	SREG_C = 0x1  // Carry Flag
 | 
			
		||||
 | 
			
		||||
	// XMCRA: External Memory Control Register A
 | 
			
		||||
	XMCRA_SRE  = 0x80 // External SRAM Enable
 | 
			
		||||
	XMCRA_SRL  = 0x70 // Wait state page limit
 | 
			
		||||
	XMCRA_SRW1 = 0xc  // Wait state select bit upper page
 | 
			
		||||
	XMCRA_SRW0 = 0x3  // Wait state select bit lower page
 | 
			
		||||
 | 
			
		||||
	// XMCRB: External Memory Control Register B
 | 
			
		||||
	XMCRB_XMBK = 0x80 // External Memory Bus Keeper Enable
 | 
			
		||||
	XMCRB_XMM  = 0x7  // External Memory High Mask
 | 
			
		||||
 | 
			
		||||
	// OSCCAL: Oscillator Calibration Value
 | 
			
		||||
	OSCCAL_OSCCAL = 0xff // Oscillator Calibration
 | 
			
		||||
 | 
			
		||||
	// CLKPR
 | 
			
		||||
	CLKPR_CLKPCE = 0x80
 | 
			
		||||
	CLKPR_CLKPS  = 0xf
 | 
			
		||||
 | 
			
		||||
	// SMCR: Sleep Mode Control Register
 | 
			
		||||
	SMCR_SM = 0xe // Sleep Mode Select bits
 | 
			
		||||
	SMCR_SE = 0x1 // Sleep Enable
 | 
			
		||||
 | 
			
		||||
	// GPIOR2: General Purpose IO Register 2
 | 
			
		||||
	GPIOR2_GPIOR = 0xff // General Purpose IO Register 2 bis
 | 
			
		||||
 | 
			
		||||
	// GPIOR1: General Purpose IO Register 1
 | 
			
		||||
	GPIOR1_GPIOR = 0xff // General Purpose IO Register 1 bis
 | 
			
		||||
 | 
			
		||||
	// GPIOR0: General Purpose IO Register 0
 | 
			
		||||
	GPIOR0_GPIOR07 = 0x80 // General Purpose IO Register 0 bit 7
 | 
			
		||||
	GPIOR0_GPIOR06 = 0x40 // General Purpose IO Register 0 bit 6
 | 
			
		||||
	GPIOR0_GPIOR05 = 0x20 // General Purpose IO Register 0 bit 5
 | 
			
		||||
	GPIOR0_GPIOR04 = 0x10 // General Purpose IO Register 0 bit 4
 | 
			
		||||
	GPIOR0_GPIOR03 = 0x8  // General Purpose IO Register 0 bit 3
 | 
			
		||||
	GPIOR0_GPIOR02 = 0x4  // General Purpose IO Register 0 bit 2
 | 
			
		||||
	GPIOR0_GPIOR01 = 0x2  // General Purpose IO Register 0 bit 1
 | 
			
		||||
	GPIOR0_GPIOR00 = 0x1  // General Purpose IO Register 0 bit 0
 | 
			
		||||
 | 
			
		||||
	// PRR1: Power Reduction Register1
 | 
			
		||||
	PRR1_PRTIM5   = 0x20 // Power Reduction Timer/Counter5
 | 
			
		||||
	PRR1_PRTIM4   = 0x10 // Power Reduction Timer/Counter4
 | 
			
		||||
	PRR1_PRTIM3   = 0x8  // Power Reduction Timer/Counter3
 | 
			
		||||
	PRR1_PRUSART3 = 0x4  // Power Reduction USART3
 | 
			
		||||
	PRR1_PRUSART2 = 0x2  // Power Reduction USART2
 | 
			
		||||
	PRR1_PRUSART1 = 0x1  // Power Reduction USART1
 | 
			
		||||
 | 
			
		||||
	// PRR0: Power Reduction Register0
 | 
			
		||||
	PRR0_PRTWI    = 0x80 // Power Reduction TWI
 | 
			
		||||
	PRR0_PRTIM2   = 0x40 // Power Reduction Timer/Counter2
 | 
			
		||||
	PRR0_PRTIM0   = 0x20 // Power Reduction Timer/Counter0
 | 
			
		||||
	PRR0_PRTIM1   = 0x8  // Power Reduction Timer/Counter1
 | 
			
		||||
	PRR0_PRSPI    = 0x4  // Power Reduction Serial Peripheral Interface
 | 
			
		||||
	PRR0_PRUSART0 = 0x2  // Power Reduction USART0
 | 
			
		||||
	PRR0_PRADC    = 0x1  // Power Reduction ADC
 | 
			
		||||
)
 | 
			
		||||
							
								
								
									
										6
									
								
								src/device/avr/atmega1281.ld
									
										
									
									
									
										Обычный файл
									
								
							
							
						
						
									
										6
									
								
								src/device/avr/atmega1281.ld
									
										
									
									
									
										Обычный файл
									
								
							| 
						 | 
				
			
			@ -0,0 +1,6 @@
 | 
			
		|||
/* Automatically generated file. DO NOT EDIT. */
 | 
			
		||||
/* Generated by gen-device.py from ATmega1281.atdf, see http://packs.download.atmel.com/ */
 | 
			
		||||
 | 
			
		||||
__flash_size = 0x20000;
 | 
			
		||||
__ram_size   = 0x2000;
 | 
			
		||||
__num_isrs   = 57;
 | 
			
		||||
							
								
								
									
										774
									
								
								src/device/avr/atmega1284.go
									
										
									
									
									
										Обычный файл
									
								
							
							
						
						
									
										774
									
								
								src/device/avr/atmega1284.go
									
										
									
									
									
										Обычный файл
									
								
							| 
						 | 
				
			
			@ -0,0 +1,774 @@
 | 
			
		|||
// Automatically generated file. DO NOT EDIT.
 | 
			
		||||
// Generated by gen-device.py from ATmega1284.atdf, see http://packs.download.atmel.com/
 | 
			
		||||
 | 
			
		||||
// +build avr,atmega1284
 | 
			
		||||
 | 
			
		||||
// Device information for the ATmega1284.
 | 
			
		||||
//
 | 
			
		||||
package avr
 | 
			
		||||
 | 
			
		||||
// Magic type name for the compiler.
 | 
			
		||||
type __reg uint8
 | 
			
		||||
 | 
			
		||||
// Export this magic type name.
 | 
			
		||||
type RegValue = __reg
 | 
			
		||||
 | 
			
		||||
// Some information about this device.
 | 
			
		||||
const (
 | 
			
		||||
	DEVICE = "ATmega1284"
 | 
			
		||||
	ARCH   = "AVR8"
 | 
			
		||||
	FAMILY = "megaAVR"
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
// Interrupts
 | 
			
		||||
const (
 | 
			
		||||
	IRQ_RESET        = 0  // External Pin,Power-on Reset,Brown-out Reset,Watchdog Reset,and JTAG AVR Reset. See Datasheet.
 | 
			
		||||
	IRQ_INT0         = 1  // External Interrupt Request 0
 | 
			
		||||
	IRQ_INT1         = 2  // External Interrupt Request 1
 | 
			
		||||
	IRQ_INT2         = 3  // External Interrupt Request 2
 | 
			
		||||
	IRQ_PCINT0       = 4  // Pin Change Interrupt Request 0
 | 
			
		||||
	IRQ_PCINT1       = 5  // Pin Change Interrupt Request 1
 | 
			
		||||
	IRQ_PCINT2       = 6  // Pin Change Interrupt Request 2
 | 
			
		||||
	IRQ_PCINT3       = 7  // Pin Change Interrupt Request 3
 | 
			
		||||
	IRQ_WDT          = 8  // Watchdog Time-out Interrupt
 | 
			
		||||
	IRQ_TIMER2_COMPA = 9  // Timer/Counter2 Compare Match A
 | 
			
		||||
	IRQ_TIMER2_COMPB = 10 // Timer/Counter2 Compare Match B
 | 
			
		||||
	IRQ_TIMER2_OVF   = 11 // Timer/Counter2 Overflow
 | 
			
		||||
	IRQ_TIMER1_CAPT  = 12 // Timer/Counter1 Capture Event
 | 
			
		||||
	IRQ_TIMER1_COMPA = 13 // Timer/Counter1 Compare Match A
 | 
			
		||||
	IRQ_TIMER1_COMPB = 14 // Timer/Counter1 Compare Match B
 | 
			
		||||
	IRQ_TIMER1_OVF   = 15 // Timer/Counter1 Overflow
 | 
			
		||||
	IRQ_TIMER0_COMPA = 16 // Timer/Counter0 Compare Match A
 | 
			
		||||
	IRQ_TIMER0_COMPB = 17 // Timer/Counter0 Compare Match B
 | 
			
		||||
	IRQ_TIMER0_OVF   = 18 // Timer/Counter0 Overflow
 | 
			
		||||
	IRQ_SPI_STC      = 19 // SPI Serial Transfer Complete
 | 
			
		||||
	IRQ_USART0_RX    = 20 // USART0, Rx Complete
 | 
			
		||||
	IRQ_USART0_UDRE  = 21 // USART0 Data register Empty
 | 
			
		||||
	IRQ_USART0_TX    = 22 // USART0, Tx Complete
 | 
			
		||||
	IRQ_ANALOG_COMP  = 23 // Analog Comparator
 | 
			
		||||
	IRQ_ADC          = 24 // ADC Conversion Complete
 | 
			
		||||
	IRQ_EE_READY     = 25 // EEPROM Ready
 | 
			
		||||
	IRQ_TWI          = 26 // 2-wire Serial Interface
 | 
			
		||||
	IRQ_SPM_READY    = 27 // Store Program Memory Read
 | 
			
		||||
	IRQ_USART1_RX    = 28 // USART1 RX complete
 | 
			
		||||
	IRQ_USART1_UDRE  = 29 // USART1 Data Register Empty
 | 
			
		||||
	IRQ_USART1_TX    = 30 // USART1 TX complete
 | 
			
		||||
	IRQ_TIMER3_CAPT  = 31 // Timer/Counter3 Capture Event
 | 
			
		||||
	IRQ_TIMER3_COMPA = 32 // Timer/Counter3 Compare Match A
 | 
			
		||||
	IRQ_TIMER3_COMPB = 33 // Timer/Counter3 Compare Match B
 | 
			
		||||
	IRQ_TIMER3_OVF   = 34 // Timer/Counter3 Overflow
 | 
			
		||||
	IRQ_max          = 34 // Highest interrupt number on this device.
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
// Peripherals
 | 
			
		||||
var (
 | 
			
		||||
	// Fuses
 | 
			
		||||
	FUSE = struct {
 | 
			
		||||
		EXTENDED __reg
 | 
			
		||||
		HIGH     __reg
 | 
			
		||||
		LOW      __reg
 | 
			
		||||
	}{
 | 
			
		||||
		EXTENDED: 0x2,
 | 
			
		||||
		HIGH:     0x1,
 | 
			
		||||
		LOW:      0x0,
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	// Lockbits
 | 
			
		||||
	LOCKBIT = struct {
 | 
			
		||||
		LOCKBIT __reg
 | 
			
		||||
	}{
 | 
			
		||||
		LOCKBIT: 0x0,
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	// Analog Comparator
 | 
			
		||||
	AC = struct {
 | 
			
		||||
		ACSR  __reg
 | 
			
		||||
		DIDR1 __reg
 | 
			
		||||
	}{
 | 
			
		||||
		ACSR:  0x50, // Analog Comparator Control And Status Register
 | 
			
		||||
		DIDR1: 0x7f, // Digital Input Disable Register 1
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	// USART
 | 
			
		||||
	USART = struct {
 | 
			
		||||
		UDR0   __reg
 | 
			
		||||
		UCSR0A __reg
 | 
			
		||||
		UCSR0B __reg
 | 
			
		||||
		UCSR0C __reg
 | 
			
		||||
		UBRR0L __reg
 | 
			
		||||
		UBRR0H __reg
 | 
			
		||||
		UDR1   __reg
 | 
			
		||||
		UCSR1A __reg
 | 
			
		||||
		UCSR1B __reg
 | 
			
		||||
		UCSR1C __reg
 | 
			
		||||
		UBRR1L __reg
 | 
			
		||||
		UBRR1H __reg
 | 
			
		||||
	}{
 | 
			
		||||
		UDR0:   0xc6, // USART I/O Data Register
 | 
			
		||||
		UCSR0A: 0xc0, // USART Control and Status Register A
 | 
			
		||||
		UCSR0B: 0xc1, // USART Control and Status Register B
 | 
			
		||||
		UCSR0C: 0xc2, // USART Control and Status Register C
 | 
			
		||||
		UBRR0L: 0xc4, // USART Baud Rate Register  Bytes
 | 
			
		||||
		UBRR0H: 0xc4, // USART Baud Rate Register  Bytes
 | 
			
		||||
		UDR1:   0xce, // USART I/O Data Register
 | 
			
		||||
		UCSR1A: 0xc8, // USART Control and Status Register A
 | 
			
		||||
		UCSR1B: 0xc9, // USART Control and Status Register B
 | 
			
		||||
		UCSR1C: 0xca, // USART Control and Status Register C
 | 
			
		||||
		UBRR1L: 0xcc, // USART Baud Rate Register  Bytes
 | 
			
		||||
		UBRR1H: 0xcc, // USART Baud Rate Register  Bytes
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	// I/O Port
 | 
			
		||||
	PORT = struct {
 | 
			
		||||
		PORTA __reg
 | 
			
		||||
		DDRA  __reg
 | 
			
		||||
		PINA  __reg
 | 
			
		||||
		PORTB __reg
 | 
			
		||||
		DDRB  __reg
 | 
			
		||||
		PINB  __reg
 | 
			
		||||
		PORTC __reg
 | 
			
		||||
		DDRC  __reg
 | 
			
		||||
		PINC  __reg
 | 
			
		||||
		PORTD __reg
 | 
			
		||||
		DDRD  __reg
 | 
			
		||||
		PIND  __reg
 | 
			
		||||
	}{
 | 
			
		||||
		PORTA: 0x22, // Port A Data Register
 | 
			
		||||
		DDRA:  0x21, // Port A Data Direction Register
 | 
			
		||||
		PINA:  0x20, // Port A Input Pins
 | 
			
		||||
		PORTB: 0x25, // Port B Data Register
 | 
			
		||||
		DDRB:  0x24, // Port B Data Direction Register
 | 
			
		||||
		PINB:  0x23, // Port B Input Pins
 | 
			
		||||
		PORTC: 0x28, // Port C Data Register
 | 
			
		||||
		DDRC:  0x27, // Port C Data Direction Register
 | 
			
		||||
		PINC:  0x26, // Port C Input Pins
 | 
			
		||||
		PORTD: 0x2b, // Port D Data Register
 | 
			
		||||
		DDRD:  0x2a, // Port D Data Direction Register
 | 
			
		||||
		PIND:  0x29, // Port D Input Pins
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	// Timer/Counter, 8-bit
 | 
			
		||||
	TC8 = struct {
 | 
			
		||||
		OCR0B  __reg
 | 
			
		||||
		OCR0A  __reg
 | 
			
		||||
		TCNT0  __reg
 | 
			
		||||
		TCCR0B __reg
 | 
			
		||||
		TCCR0A __reg
 | 
			
		||||
		TIMSK0 __reg
 | 
			
		||||
		TIFR0  __reg
 | 
			
		||||
	}{
 | 
			
		||||
		OCR0B:  0x48, // Timer/Counter0 Output Compare Register
 | 
			
		||||
		OCR0A:  0x47, // Timer/Counter0 Output Compare Register
 | 
			
		||||
		TCNT0:  0x46, // Timer/Counter0
 | 
			
		||||
		TCCR0B: 0x45, // Timer/Counter Control Register B
 | 
			
		||||
		TCCR0A: 0x44, // Timer/Counter  Control Register A
 | 
			
		||||
		TIMSK0: 0x6e, // Timer/Counter0 Interrupt Mask Register
 | 
			
		||||
		TIFR0:  0x35, // Timer/Counter0 Interrupt Flag register
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	// Timer/Counter, 16-bit
 | 
			
		||||
	TC16 = struct {
 | 
			
		||||
		TIMSK1 __reg
 | 
			
		||||
		TIFR1  __reg
 | 
			
		||||
		TCCR1A __reg
 | 
			
		||||
		TCCR1B __reg
 | 
			
		||||
		TCCR1C __reg
 | 
			
		||||
		TCNT1L __reg
 | 
			
		||||
		TCNT1H __reg
 | 
			
		||||
		OCR1AL __reg
 | 
			
		||||
		OCR1AH __reg
 | 
			
		||||
		OCR1BL __reg
 | 
			
		||||
		OCR1BH __reg
 | 
			
		||||
		ICR1L  __reg
 | 
			
		||||
		ICR1H  __reg
 | 
			
		||||
		TIMSK3 __reg
 | 
			
		||||
		TIFR3  __reg
 | 
			
		||||
		TCCR3A __reg
 | 
			
		||||
		TCCR3B __reg
 | 
			
		||||
		TCCR3C __reg
 | 
			
		||||
		TCNT3L __reg
 | 
			
		||||
		TCNT3H __reg
 | 
			
		||||
		OCR3AL __reg
 | 
			
		||||
		OCR3AH __reg
 | 
			
		||||
		OCR3BL __reg
 | 
			
		||||
		OCR3BH __reg
 | 
			
		||||
		ICR3L  __reg
 | 
			
		||||
		ICR3H  __reg
 | 
			
		||||
	}{
 | 
			
		||||
		TIMSK1: 0x6f, // Timer/Counter1 Interrupt Mask Register
 | 
			
		||||
		TIFR1:  0x36, // Timer/Counter Interrupt Flag register
 | 
			
		||||
		TCCR1A: 0x80, // Timer/Counter1 Control Register A
 | 
			
		||||
		TCCR1B: 0x81, // Timer/Counter1 Control Register B
 | 
			
		||||
		TCCR1C: 0x82, // Timer/Counter1 Control Register C
 | 
			
		||||
		TCNT1L: 0x84, // Timer/Counter1  Bytes
 | 
			
		||||
		TCNT1H: 0x84, // Timer/Counter1  Bytes
 | 
			
		||||
		OCR1AL: 0x88, // Timer/Counter1 Output Compare Register A  Bytes
 | 
			
		||||
		OCR1AH: 0x88, // Timer/Counter1 Output Compare Register A  Bytes
 | 
			
		||||
		OCR1BL: 0x8a, // Timer/Counter1 Output Compare Register B  Bytes
 | 
			
		||||
		OCR1BH: 0x8a, // Timer/Counter1 Output Compare Register B  Bytes
 | 
			
		||||
		ICR1L:  0x86, // Timer/Counter1 Input Capture Register  Bytes
 | 
			
		||||
		ICR1H:  0x86, // Timer/Counter1 Input Capture Register  Bytes
 | 
			
		||||
		TIMSK3: 0x71, // Timer/Counter3 Interrupt Mask Register
 | 
			
		||||
		TIFR3:  0x38, // Timer/Counter Interrupt Flag register
 | 
			
		||||
		TCCR3A: 0x90, // Timer/Counter3 Control Register A
 | 
			
		||||
		TCCR3B: 0x91, // Timer/Counter3 Control Register B
 | 
			
		||||
		TCCR3C: 0x92, // Timer/Counter3 Control Register C
 | 
			
		||||
		TCNT3L: 0x94, // Timer/Counter3  Bytes
 | 
			
		||||
		TCNT3H: 0x94, // Timer/Counter3  Bytes
 | 
			
		||||
		OCR3AL: 0x98, // Timer/Counter3 Output Compare Register A  Bytes
 | 
			
		||||
		OCR3AH: 0x98, // Timer/Counter3 Output Compare Register A  Bytes
 | 
			
		||||
		OCR3BL: 0x9a, // Timer/Counter3 Output Compare Register B  Bytes
 | 
			
		||||
		OCR3BH: 0x9a, // Timer/Counter3 Output Compare Register B  Bytes
 | 
			
		||||
		ICR3L:  0x96, // Timer/Counter3 Input Capture Register  Bytes
 | 
			
		||||
		ICR3H:  0x96, // Timer/Counter3 Input Capture Register  Bytes
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	// Timer/Counter, 8-bit Async
 | 
			
		||||
	TC8_ASYNC = struct {
 | 
			
		||||
		TIMSK2 __reg
 | 
			
		||||
		TIFR2  __reg
 | 
			
		||||
		TCCR2A __reg
 | 
			
		||||
		TCCR2B __reg
 | 
			
		||||
		TCNT2  __reg
 | 
			
		||||
		OCR2B  __reg
 | 
			
		||||
		OCR2A  __reg
 | 
			
		||||
		ASSR   __reg
 | 
			
		||||
	}{
 | 
			
		||||
		TIMSK2: 0x70, // Timer/Counter Interrupt Mask register
 | 
			
		||||
		TIFR2:  0x37, // Timer/Counter Interrupt Flag Register
 | 
			
		||||
		TCCR2A: 0xb0, // Timer/Counter2 Control Register A
 | 
			
		||||
		TCCR2B: 0xb1, // Timer/Counter2 Control Register B
 | 
			
		||||
		TCNT2:  0xb2, // Timer/Counter2
 | 
			
		||||
		OCR2B:  0xb4, // Timer/Counter2 Output Compare Register B
 | 
			
		||||
		OCR2A:  0xb3, // Timer/Counter2 Output Compare Register A
 | 
			
		||||
		ASSR:   0xb6, // Asynchronous Status Register
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	// Bootloader
 | 
			
		||||
	BOOT_LOAD = struct {
 | 
			
		||||
		SPMCSR __reg
 | 
			
		||||
	}{
 | 
			
		||||
		SPMCSR: 0x57, // Store Program Memory Control Register
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	// External Interrupts
 | 
			
		||||
	EXINT = struct {
 | 
			
		||||
		EICRA  __reg
 | 
			
		||||
		EIMSK  __reg
 | 
			
		||||
		EIFR   __reg
 | 
			
		||||
		PCMSK3 __reg
 | 
			
		||||
		PCMSK2 __reg
 | 
			
		||||
		PCMSK1 __reg
 | 
			
		||||
		PCMSK0 __reg
 | 
			
		||||
		PCIFR  __reg
 | 
			
		||||
		PCICR  __reg
 | 
			
		||||
	}{
 | 
			
		||||
		EICRA:  0x69, // External Interrupt Control Register A
 | 
			
		||||
		EIMSK:  0x3d, // External Interrupt Mask Register
 | 
			
		||||
		EIFR:   0x3c, // External Interrupt Flag Register
 | 
			
		||||
		PCMSK3: 0x73, // Pin Change Mask Register 3
 | 
			
		||||
		PCMSK2: 0x6d, // Pin Change Mask Register 2
 | 
			
		||||
		PCMSK1: 0x6c, // Pin Change Mask Register 1
 | 
			
		||||
		PCMSK0: 0x6b, // Pin Change Mask Register 0
 | 
			
		||||
		PCIFR:  0x3b, // Pin Change Interrupt Flag Register
 | 
			
		||||
		PCICR:  0x68, // Pin Change Interrupt Control Register
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	// Analog-to-Digital Converter
 | 
			
		||||
	ADC = struct {
 | 
			
		||||
		ADMUX  __reg
 | 
			
		||||
		ADCL   __reg
 | 
			
		||||
		ADCH   __reg
 | 
			
		||||
		ADCSRA __reg
 | 
			
		||||
		DIDR0  __reg
 | 
			
		||||
	}{
 | 
			
		||||
		ADMUX:  0x7c, // The ADC multiplexer Selection Register
 | 
			
		||||
		ADCL:   0x78, // ADC Data Register  Bytes
 | 
			
		||||
		ADCH:   0x78, // ADC Data Register  Bytes
 | 
			
		||||
		ADCSRA: 0x7a, // The ADC Control and Status register A
 | 
			
		||||
		DIDR0:  0x7e, // Digital Input Disable Register
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	// JTAG Interface
 | 
			
		||||
	JTAG = struct {
 | 
			
		||||
		OCDR __reg
 | 
			
		||||
	}{
 | 
			
		||||
		OCDR: 0x51, // On-Chip Debug Related Register in I/O Memory
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	// EEPROM
 | 
			
		||||
	EEPROM = struct {
 | 
			
		||||
		EEARL __reg
 | 
			
		||||
		EEARH __reg
 | 
			
		||||
		EEDR  __reg
 | 
			
		||||
		EECR  __reg
 | 
			
		||||
	}{
 | 
			
		||||
		EEARL: 0x41, // EEPROM Address Register Low Bytes
 | 
			
		||||
		EEARH: 0x41, // EEPROM Address Register Low Bytes
 | 
			
		||||
		EEDR:  0x40, // EEPROM Data Register
 | 
			
		||||
		EECR:  0x3f, // EEPROM Control Register
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	// Two Wire Serial Interface
 | 
			
		||||
	TWI = struct {
 | 
			
		||||
		TWAMR __reg
 | 
			
		||||
		TWBR  __reg
 | 
			
		||||
		TWCR  __reg
 | 
			
		||||
		TWSR  __reg
 | 
			
		||||
		TWDR  __reg
 | 
			
		||||
		TWAR  __reg
 | 
			
		||||
	}{
 | 
			
		||||
		TWAMR: 0xbd, // TWI (Slave) Address Mask Register
 | 
			
		||||
		TWBR:  0xb8, // TWI Bit Rate register
 | 
			
		||||
		TWCR:  0xbc, // TWI Control Register
 | 
			
		||||
		TWSR:  0xb9, // TWI Status Register
 | 
			
		||||
		TWDR:  0xbb, // TWI Data register
 | 
			
		||||
		TWAR:  0xba, // TWI (Slave) Address register
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	// Serial Peripheral Interface
 | 
			
		||||
	SPI = struct {
 | 
			
		||||
		SPDR __reg
 | 
			
		||||
		SPSR __reg
 | 
			
		||||
		SPCR __reg
 | 
			
		||||
	}{
 | 
			
		||||
		SPDR: 0x4e, // SPI Data Register
 | 
			
		||||
		SPSR: 0x4d, // SPI Status Register
 | 
			
		||||
		SPCR: 0x4c, // SPI Control Register
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	// Watchdog Timer
 | 
			
		||||
	WDT = struct {
 | 
			
		||||
		WDTCSR __reg
 | 
			
		||||
	}{
 | 
			
		||||
		WDTCSR: 0x60, // Watchdog Timer Control Register
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	// CPU Registers
 | 
			
		||||
	CPU = struct {
 | 
			
		||||
		SREG   __reg
 | 
			
		||||
		SPL    __reg
 | 
			
		||||
		SPH    __reg
 | 
			
		||||
		OSCCAL __reg
 | 
			
		||||
		CLKPR  __reg
 | 
			
		||||
		SMCR   __reg
 | 
			
		||||
		RAMPZ  __reg
 | 
			
		||||
		GPIOR2 __reg
 | 
			
		||||
		GPIOR1 __reg
 | 
			
		||||
		GPIOR0 __reg
 | 
			
		||||
		PRR0   __reg
 | 
			
		||||
		PRR1   __reg
 | 
			
		||||
	}{
 | 
			
		||||
		SREG:   0x5f, // Status Register
 | 
			
		||||
		SPL:    0x5d, // Stack Pointer
 | 
			
		||||
		SPH:    0x5d, // Stack Pointer
 | 
			
		||||
		OSCCAL: 0x66, // Oscillator Calibration Value
 | 
			
		||||
		CLKPR:  0x61,
 | 
			
		||||
		SMCR:   0x53, // Sleep Mode Control Register
 | 
			
		||||
		RAMPZ:  0x5b, // RAM Page Z Select Register
 | 
			
		||||
		GPIOR2: 0x4b, // General Purpose IO Register 2
 | 
			
		||||
		GPIOR1: 0x4a, // General Purpose IO Register 1
 | 
			
		||||
		GPIOR0: 0x3e, // General Purpose IO Register 0
 | 
			
		||||
		PRR0:   0x64, // Power Reduction Register0
 | 
			
		||||
		PRR1:   0x65, // Power Reduction Register1
 | 
			
		||||
	}
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
// Bitfields for FUSE: Fuses
 | 
			
		||||
const (
 | 
			
		||||
	// EXTENDED
 | 
			
		||||
	EXTENDED_BODLEVEL = 0x7 // Brown-out Detector trigger level
 | 
			
		||||
 | 
			
		||||
	// HIGH
 | 
			
		||||
	HIGH_OCDEN   = 0x80 // On-Chip Debug Enabled
 | 
			
		||||
	HIGH_JTAGEN  = 0x40 // JTAG Interface Enabled
 | 
			
		||||
	HIGH_SPIEN   = 0x20 // Serial program downloading (SPI) enabled
 | 
			
		||||
	HIGH_WDTON   = 0x10 // Watchdog timer always on
 | 
			
		||||
	HIGH_EESAVE  = 0x8  // Preserve EEPROM through the Chip Erase cycle
 | 
			
		||||
	HIGH_BOOTSZ  = 0x6  // Select Boot Size
 | 
			
		||||
	HIGH_BOOTRST = 0x1  // Boot Reset vector Enabled
 | 
			
		||||
 | 
			
		||||
	// LOW
 | 
			
		||||
	LOW_CKDIV8    = 0x80 // Divide clock by 8 internally
 | 
			
		||||
	LOW_CKOUT     = 0x40 // Clock output on PORTB1
 | 
			
		||||
	LOW_SUT_CKSEL = 0x3f // Select Clock Source
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
// Bitfields for LOCKBIT: Lockbits
 | 
			
		||||
const (
 | 
			
		||||
	// LOCKBIT
 | 
			
		||||
	LOCKBIT_LB   = 0x3  // Memory Lock
 | 
			
		||||
	LOCKBIT_BLB0 = 0xc  // Boot Loader Protection Mode
 | 
			
		||||
	LOCKBIT_BLB1 = 0x30 // Boot Loader Protection Mode
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
// Bitfields for AC: Analog Comparator
 | 
			
		||||
const (
 | 
			
		||||
	// ACSR: Analog Comparator Control And Status Register
 | 
			
		||||
	ACSR_ACD  = 0x80 // Analog Comparator Disable
 | 
			
		||||
	ACSR_ACBG = 0x40 // Analog Comparator Bandgap Select
 | 
			
		||||
	ACSR_ACO  = 0x20 // Analog Compare Output
 | 
			
		||||
	ACSR_ACI  = 0x10 // Analog Comparator Interrupt Flag
 | 
			
		||||
	ACSR_ACIE = 0x8  // Analog Comparator Interrupt Enable
 | 
			
		||||
	ACSR_ACIC = 0x4  // Analog Comparator Input Capture Enable
 | 
			
		||||
	ACSR_ACIS = 0x3  // Analog Comparator Interrupt Mode Select bits
 | 
			
		||||
 | 
			
		||||
	// DIDR1: Digital Input Disable Register 1
 | 
			
		||||
	DIDR1_AIN1D = 0x2 // AIN1 Digital Input Disable
 | 
			
		||||
	DIDR1_AIN0D = 0x1 // AIN0 Digital Input Disable
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
// Bitfields for USART: USART
 | 
			
		||||
const (
 | 
			
		||||
	// UCSR0A: USART Control and Status Register A
 | 
			
		||||
	UCSR0A_RXC0  = 0x80 // USART Receive Complete
 | 
			
		||||
	UCSR0A_TXC0  = 0x40 // USART Transmitt Complete
 | 
			
		||||
	UCSR0A_UDRE0 = 0x20 // USART Data Register Empty
 | 
			
		||||
	UCSR0A_FE0   = 0x10 // Framing Error
 | 
			
		||||
	UCSR0A_DOR0  = 0x8  // Data overRun
 | 
			
		||||
	UCSR0A_UPE0  = 0x4  // Parity Error
 | 
			
		||||
	UCSR0A_U2X0  = 0x2  // Double the USART transmission speed
 | 
			
		||||
	UCSR0A_MPCM0 = 0x1  // Multi-processor Communication Mode
 | 
			
		||||
 | 
			
		||||
	// UCSR0B: USART Control and Status Register B
 | 
			
		||||
	UCSR0B_RXCIE0 = 0x80 // RX Complete Interrupt Enable
 | 
			
		||||
	UCSR0B_TXCIE0 = 0x40 // TX Complete Interrupt Enable
 | 
			
		||||
	UCSR0B_UDRIE0 = 0x20 // USART Data register Empty Interrupt Enable
 | 
			
		||||
	UCSR0B_RXEN0  = 0x10 // Receiver Enable
 | 
			
		||||
	UCSR0B_TXEN0  = 0x8  // Transmitter Enable
 | 
			
		||||
	UCSR0B_UCSZ02 = 0x4  // Character Size
 | 
			
		||||
	UCSR0B_RXB80  = 0x2  // Receive Data Bit 8
 | 
			
		||||
	UCSR0B_TXB80  = 0x1  // Transmit Data Bit 8
 | 
			
		||||
 | 
			
		||||
	// UCSR0C: USART Control and Status Register C
 | 
			
		||||
	UCSR0C_UMSEL0 = 0xc0 // USART Mode Select
 | 
			
		||||
	UCSR0C_UPM0   = 0x30 // Parity Mode Bits
 | 
			
		||||
	UCSR0C_USBS0  = 0x8  // Stop Bit Select
 | 
			
		||||
	UCSR0C_UCSZ0  = 0x6  // Character Size
 | 
			
		||||
	UCSR0C_UCPOL0 = 0x1  // Clock Polarity
 | 
			
		||||
 | 
			
		||||
	// UCSR1A: USART Control and Status Register A
 | 
			
		||||
	UCSR1A_RXC1  = 0x80 // USART Receive Complete
 | 
			
		||||
	UCSR1A_TXC1  = 0x40 // USART Transmitt Complete
 | 
			
		||||
	UCSR1A_UDRE1 = 0x20 // USART Data Register Empty
 | 
			
		||||
	UCSR1A_FE1   = 0x10 // Framing Error
 | 
			
		||||
	UCSR1A_DOR1  = 0x8  // Data overRun
 | 
			
		||||
	UCSR1A_UPE1  = 0x4  // Parity Error
 | 
			
		||||
	UCSR1A_U2X1  = 0x2  // Double the USART transmission speed
 | 
			
		||||
	UCSR1A_MPCM1 = 0x1  // Multi-processor Communication Mode
 | 
			
		||||
 | 
			
		||||
	// UCSR1B: USART Control and Status Register B
 | 
			
		||||
	UCSR1B_RXCIE1 = 0x80 // RX Complete Interrupt Enable
 | 
			
		||||
	UCSR1B_TXCIE1 = 0x40 // TX Complete Interrupt Enable
 | 
			
		||||
	UCSR1B_UDRIE1 = 0x20 // USART Data register Empty Interrupt Enable
 | 
			
		||||
	UCSR1B_RXEN1  = 0x10 // Receiver Enable
 | 
			
		||||
	UCSR1B_TXEN1  = 0x8  // Transmitter Enable
 | 
			
		||||
	UCSR1B_UCSZ12 = 0x4  // Character Size
 | 
			
		||||
	UCSR1B_RXB81  = 0x2  // Receive Data Bit 8
 | 
			
		||||
	UCSR1B_TXB81  = 0x1  // Transmit Data Bit 8
 | 
			
		||||
 | 
			
		||||
	// UCSR1C: USART Control and Status Register C
 | 
			
		||||
	UCSR1C_UMSEL1 = 0xc0 // USART Mode Select
 | 
			
		||||
	UCSR1C_UPM1   = 0x30 // Parity Mode Bits
 | 
			
		||||
	UCSR1C_USBS1  = 0x8  // Stop Bit Select
 | 
			
		||||
	UCSR1C_UCSZ1  = 0x6  // Character Size
 | 
			
		||||
	UCSR1C_UCPOL1 = 0x1  // Clock Polarity
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
// Bitfields for TC8: Timer/Counter, 8-bit
 | 
			
		||||
const (
 | 
			
		||||
	// TCCR0B: Timer/Counter Control Register B
 | 
			
		||||
	TCCR0B_FOC0A = 0x80 // Force Output Compare A
 | 
			
		||||
	TCCR0B_FOC0B = 0x40 // Force Output Compare B
 | 
			
		||||
	TCCR0B_WGM02 = 0x8
 | 
			
		||||
	TCCR0B_CS0   = 0x7 // Clock Select
 | 
			
		||||
 | 
			
		||||
	// TCCR0A: Timer/Counter  Control Register A
 | 
			
		||||
	TCCR0A_COM0A = 0xc0 // Compare Output Mode, Phase Correct PWM Mode
 | 
			
		||||
	TCCR0A_COM0B = 0x30 // Compare Output Mode, Fast PWm
 | 
			
		||||
	TCCR0A_WGM0  = 0x3  // Waveform Generation Mode
 | 
			
		||||
 | 
			
		||||
	// TIMSK0: Timer/Counter0 Interrupt Mask Register
 | 
			
		||||
	TIMSK0_OCIE0B = 0x4 // Timer/Counter0 Output Compare Match B Interrupt Enable
 | 
			
		||||
	TIMSK0_OCIE0A = 0x2 // Timer/Counter0 Output Compare Match A Interrupt Enable
 | 
			
		||||
	TIMSK0_TOIE0  = 0x1 // Timer/Counter0 Overflow Interrupt Enable
 | 
			
		||||
 | 
			
		||||
	// TIFR0: Timer/Counter0 Interrupt Flag register
 | 
			
		||||
	TIFR0_OCF0B = 0x4 // Timer/Counter0 Output Compare Flag 0B
 | 
			
		||||
	TIFR0_OCF0A = 0x2 // Timer/Counter0 Output Compare Flag 0A
 | 
			
		||||
	TIFR0_TOV0  = 0x1 // Timer/Counter0 Overflow Flag
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
// Bitfields for TC16: Timer/Counter, 16-bit
 | 
			
		||||
const (
 | 
			
		||||
	// TIMSK1: Timer/Counter1 Interrupt Mask Register
 | 
			
		||||
	TIMSK1_ICIE1  = 0x20 // Timer/Counter1 Input Capture Interrupt Enable
 | 
			
		||||
	TIMSK1_OCIE1B = 0x4  // Timer/Counter1 Output Compare B Match Interrupt Enable
 | 
			
		||||
	TIMSK1_OCIE1A = 0x2  // Timer/Counter1 Output Compare A Match Interrupt Enable
 | 
			
		||||
	TIMSK1_TOIE1  = 0x1  // Timer/Counter1 Overflow Interrupt Enable
 | 
			
		||||
 | 
			
		||||
	// TIFR1: Timer/Counter Interrupt Flag register
 | 
			
		||||
	TIFR1_ICF1  = 0x20 // Timer/Counter1 Input Capture Flag
 | 
			
		||||
	TIFR1_OCF1B = 0x4  // Timer/Counter1 Output Compare B Match Flag
 | 
			
		||||
	TIFR1_OCF1A = 0x2  // Timer/Counter1 Output Compare A Match Flag
 | 
			
		||||
	TIFR1_TOV1  = 0x1  // Timer/Counter1 Overflow Flag
 | 
			
		||||
 | 
			
		||||
	// TCCR1A: Timer/Counter1 Control Register A
 | 
			
		||||
	TCCR1A_COM1A = 0xc0 // Compare Output Mode 1A, bits
 | 
			
		||||
	TCCR1A_COM1B = 0x30 // Compare Output Mode 1B, bits
 | 
			
		||||
	TCCR1A_WGM1  = 0x3  // Pulse Width Modulator Select Bits
 | 
			
		||||
 | 
			
		||||
	// TCCR1B: Timer/Counter1 Control Register B
 | 
			
		||||
	TCCR1B_ICNC1 = 0x80 // Input Capture 1 Noise Canceler
 | 
			
		||||
	TCCR1B_ICES1 = 0x40 // Input Capture 1 Edge Select
 | 
			
		||||
	TCCR1B_WGM1  = 0x18 // Waveform Generation Mode Bits
 | 
			
		||||
	TCCR1B_CS1   = 0x7  // Clock Select1 bits
 | 
			
		||||
 | 
			
		||||
	// TCCR1C: Timer/Counter1 Control Register C
 | 
			
		||||
	TCCR1C_FOC1A = 0x80 // Force Output Compare for Channel A
 | 
			
		||||
	TCCR1C_FOC1B = 0x40 // Force Output Compare for Channel B
 | 
			
		||||
 | 
			
		||||
	// TIMSK3: Timer/Counter3 Interrupt Mask Register
 | 
			
		||||
	TIMSK3_ICIE3  = 0x20 // Timer/Counter3 Input Capture Interrupt Enable
 | 
			
		||||
	TIMSK3_OCIE3B = 0x4  // Timer/Counter3 Output Compare B Match Interrupt Enable
 | 
			
		||||
	TIMSK3_OCIE3A = 0x2  // Timer/Counter3 Output Compare A Match Interrupt Enable
 | 
			
		||||
	TIMSK3_TOIE3  = 0x1  // Timer/Counter3 Overflow Interrupt Enable
 | 
			
		||||
 | 
			
		||||
	// TIFR3: Timer/Counter Interrupt Flag register
 | 
			
		||||
	TIFR3_ICF3  = 0x20 // Timer/Counter3 Input Capture Flag
 | 
			
		||||
	TIFR3_OCF3B = 0x4  // Timer/Counter3 Output Compare B Match Flag
 | 
			
		||||
	TIFR3_OCF3A = 0x2  // Timer/Counter3 Output Compare A Match Flag
 | 
			
		||||
	TIFR3_TOV3  = 0x1  // Timer/Counter3 Overflow Flag
 | 
			
		||||
 | 
			
		||||
	// TCCR3A: Timer/Counter3 Control Register A
 | 
			
		||||
	TCCR3A_COM3A = 0xc0 // Compare Output Mode 3A, bits
 | 
			
		||||
	TCCR3A_COM3B = 0x30 // Compare Output Mode 3B, bits
 | 
			
		||||
	TCCR3A_WGM3  = 0x3  // Pulse Width Modulator Select Bits
 | 
			
		||||
 | 
			
		||||
	// TCCR3B: Timer/Counter3 Control Register B
 | 
			
		||||
	TCCR3B_ICNC3 = 0x80 // Input Capture 3 Noise Canceler
 | 
			
		||||
	TCCR3B_ICES3 = 0x40 // Input Capture 3 Edge Select
 | 
			
		||||
	TCCR3B_WGM3  = 0x18 // Waveform Generation Mode Bits
 | 
			
		||||
	TCCR3B_CS3   = 0x7  // Clock Select3 bits
 | 
			
		||||
 | 
			
		||||
	// TCCR3C: Timer/Counter3 Control Register C
 | 
			
		||||
	TCCR3C_FOC3A = 0x80 // Force Output Compare for Channel A
 | 
			
		||||
	TCCR3C_FOC3B = 0x40 // Force Output Compare for Channel B
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
// Bitfields for TC8_ASYNC: Timer/Counter, 8-bit Async
 | 
			
		||||
const (
 | 
			
		||||
	// TIMSK2: Timer/Counter Interrupt Mask register
 | 
			
		||||
	TIMSK2_OCIE2B = 0x4 // Timer/Counter2 Output Compare Match B Interrupt Enable
 | 
			
		||||
	TIMSK2_OCIE2A = 0x2 // Timer/Counter2 Output Compare Match A Interrupt Enable
 | 
			
		||||
	TIMSK2_TOIE2  = 0x1 // Timer/Counter2 Overflow Interrupt Enable
 | 
			
		||||
 | 
			
		||||
	// TIFR2: Timer/Counter Interrupt Flag Register
 | 
			
		||||
	TIFR2_OCF2B = 0x4 // Output Compare Flag 2B
 | 
			
		||||
	TIFR2_OCF2A = 0x2 // Output Compare Flag 2A
 | 
			
		||||
	TIFR2_TOV2  = 0x1 // Timer/Counter2 Overflow Flag
 | 
			
		||||
 | 
			
		||||
	// TCCR2A: Timer/Counter2 Control Register A
 | 
			
		||||
	TCCR2A_COM2A = 0xc0 // Compare Output Mode bits
 | 
			
		||||
	TCCR2A_COM2B = 0x30 // Compare Output Mode bits
 | 
			
		||||
	TCCR2A_WGM2  = 0x3  // Waveform Genration Mode
 | 
			
		||||
 | 
			
		||||
	// TCCR2B: Timer/Counter2 Control Register B
 | 
			
		||||
	TCCR2B_FOC2A = 0x80 // Force Output Compare A
 | 
			
		||||
	TCCR2B_FOC2B = 0x40 // Force Output Compare B
 | 
			
		||||
	TCCR2B_WGM22 = 0x8  // Waveform Generation Mode
 | 
			
		||||
	TCCR2B_CS2   = 0x7  // Clock Select bits
 | 
			
		||||
 | 
			
		||||
	// ASSR: Asynchronous Status Register
 | 
			
		||||
	ASSR_EXCLK   = 0x40 // Enable External Clock Input
 | 
			
		||||
	ASSR_AS2     = 0x20 // Asynchronous Timer/Counter2
 | 
			
		||||
	ASSR_TCN2UB  = 0x10 // Timer/Counter2 Update Busy
 | 
			
		||||
	ASSR_OCR2AUB = 0x8  // Output Compare Register2 Update Busy
 | 
			
		||||
	ASSR_OCR2BUB = 0x4  // Output Compare Register 2 Update Busy
 | 
			
		||||
	ASSR_TCR2AUB = 0x2  // Timer/Counter Control Register2 Update Busy
 | 
			
		||||
	ASSR_TCR2BUB = 0x1  // Timer/Counter Control Register2 Update Busy
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
// Bitfields for BOOT_LOAD: Bootloader
 | 
			
		||||
const (
 | 
			
		||||
	// SPMCSR: Store Program Memory Control Register
 | 
			
		||||
	SPMCSR_SPMIE  = 0x80 // SPM Interrupt Enable
 | 
			
		||||
	SPMCSR_RWWSB  = 0x40 // Read While Write Section Busy
 | 
			
		||||
	SPMCSR_SIGRD  = 0x20 // Signature Row Read
 | 
			
		||||
	SPMCSR_RWWSRE = 0x10 // Read While Write section read enable
 | 
			
		||||
	SPMCSR_BLBSET = 0x8  // Boot Lock Bit Set
 | 
			
		||||
	SPMCSR_PGWRT  = 0x4  // Page Write
 | 
			
		||||
	SPMCSR_PGERS  = 0x2  // Page Erase
 | 
			
		||||
	SPMCSR_SPMEN  = 0x1  // Store Program Memory Enable
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
// Bitfields for EXINT: External Interrupts
 | 
			
		||||
const (
 | 
			
		||||
	// EICRA: External Interrupt Control Register A
 | 
			
		||||
	EICRA_ISC2 = 0x30 // External Interrupt Sense Control Bit
 | 
			
		||||
	EICRA_ISC1 = 0xc  // External Interrupt Sense Control Bit
 | 
			
		||||
	EICRA_ISC0 = 0x3  // External Interrupt Sense Control Bit
 | 
			
		||||
 | 
			
		||||
	// EIMSK: External Interrupt Mask Register
 | 
			
		||||
	EIMSK_INT = 0x7 // External Interrupt Request 2 Enable
 | 
			
		||||
 | 
			
		||||
	// EIFR: External Interrupt Flag Register
 | 
			
		||||
	EIFR_INTF = 0x7 // External Interrupt Flags
 | 
			
		||||
 | 
			
		||||
	// PCMSK3: Pin Change Mask Register 3
 | 
			
		||||
	PCMSK3_PCINT = 0xff // Pin Change Enable Masks
 | 
			
		||||
 | 
			
		||||
	// PCMSK2: Pin Change Mask Register 2
 | 
			
		||||
	PCMSK2_PCINT = 0xff // Pin Change Enable Masks
 | 
			
		||||
 | 
			
		||||
	// PCMSK1: Pin Change Mask Register 1
 | 
			
		||||
	PCMSK1_PCINT = 0xff // Pin Change Enable Masks
 | 
			
		||||
 | 
			
		||||
	// PCMSK0: Pin Change Mask Register 0
 | 
			
		||||
	PCMSK0_PCINT = 0xff // Pin Change Enable Masks
 | 
			
		||||
 | 
			
		||||
	// PCIFR: Pin Change Interrupt Flag Register
 | 
			
		||||
	PCIFR_PCIF = 0xf // Pin Change Interrupt Flags
 | 
			
		||||
 | 
			
		||||
	// PCICR: Pin Change Interrupt Control Register
 | 
			
		||||
	PCICR_PCIE = 0xf // Pin Change Interrupt Enables
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
// Bitfields for ADC: Analog-to-Digital Converter
 | 
			
		||||
const (
 | 
			
		||||
	// ADMUX: The ADC multiplexer Selection Register
 | 
			
		||||
	ADMUX_REFS  = 0xc0 // Reference Selection Bits
 | 
			
		||||
	ADMUX_ADLAR = 0x20 // Left Adjust Result
 | 
			
		||||
	ADMUX_MUX   = 0x1f // Analog Channel and Gain Selection Bits
 | 
			
		||||
 | 
			
		||||
	// ADCSRA: The ADC Control and Status register A
 | 
			
		||||
	ADCSRA_ADEN  = 0x80 // ADC Enable
 | 
			
		||||
	ADCSRA_ADSC  = 0x40 // ADC Start Conversion
 | 
			
		||||
	ADCSRA_ADATE = 0x20 // ADC  Auto Trigger Enable
 | 
			
		||||
	ADCSRA_ADIF  = 0x10 // ADC Interrupt Flag
 | 
			
		||||
	ADCSRA_ADIE  = 0x8  // ADC Interrupt Enable
 | 
			
		||||
	ADCSRA_ADPS  = 0x7  // ADC  Prescaler Select Bits
 | 
			
		||||
 | 
			
		||||
	// DIDR0: Digital Input Disable Register
 | 
			
		||||
	DIDR0_ADC7D = 0x80
 | 
			
		||||
	DIDR0_ADC6D = 0x40
 | 
			
		||||
	DIDR0_ADC5D = 0x20
 | 
			
		||||
	DIDR0_ADC4D = 0x10
 | 
			
		||||
	DIDR0_ADC3D = 0x8
 | 
			
		||||
	DIDR0_ADC2D = 0x4
 | 
			
		||||
	DIDR0_ADC1D = 0x2
 | 
			
		||||
	DIDR0_ADC0D = 0x1
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
// Bitfields for EEPROM: EEPROM
 | 
			
		||||
const (
 | 
			
		||||
	// EECR: EEPROM Control Register
 | 
			
		||||
	EECR_EEPM  = 0x30 // EEPROM Programming Mode Bits
 | 
			
		||||
	EECR_EERIE = 0x8  // EEPROM Ready Interrupt Enable
 | 
			
		||||
	EECR_EEMPE = 0x4  // EEPROM Master Write Enable
 | 
			
		||||
	EECR_EEPE  = 0x2  // EEPROM Write Enable
 | 
			
		||||
	EECR_EERE  = 0x1  // EEPROM Read Enable
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
// Bitfields for TWI: Two Wire Serial Interface
 | 
			
		||||
const (
 | 
			
		||||
	// TWAMR: TWI (Slave) Address Mask Register
 | 
			
		||||
	TWAMR_TWAM = 0xfe
 | 
			
		||||
 | 
			
		||||
	// TWCR: TWI Control Register
 | 
			
		||||
	TWCR_TWINT = 0x80 // TWI Interrupt Flag
 | 
			
		||||
	TWCR_TWEA  = 0x40 // TWI Enable Acknowledge Bit
 | 
			
		||||
	TWCR_TWSTA = 0x20 // TWI Start Condition Bit
 | 
			
		||||
	TWCR_TWSTO = 0x10 // TWI Stop Condition Bit
 | 
			
		||||
	TWCR_TWWC  = 0x8  // TWI Write Collition Flag
 | 
			
		||||
	TWCR_TWEN  = 0x4  // TWI Enable Bit
 | 
			
		||||
	TWCR_TWIE  = 0x1  // TWI Interrupt Enable
 | 
			
		||||
 | 
			
		||||
	// TWSR: TWI Status Register
 | 
			
		||||
	TWSR_TWS  = 0xf8 // TWI Status
 | 
			
		||||
	TWSR_TWPS = 0x3  // TWI Prescaler
 | 
			
		||||
 | 
			
		||||
	// TWAR: TWI (Slave) Address register
 | 
			
		||||
	TWAR_TWA   = 0xfe // TWI (Slave) Address register Bits
 | 
			
		||||
	TWAR_TWGCE = 0x1  // TWI General Call Recognition Enable Bit
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
// Bitfields for SPI: Serial Peripheral Interface
 | 
			
		||||
const (
 | 
			
		||||
	// SPSR: SPI Status Register
 | 
			
		||||
	SPSR_SPIF  = 0x80 // SPI Interrupt Flag
 | 
			
		||||
	SPSR_WCOL  = 0x40 // Write Collision Flag
 | 
			
		||||
	SPSR_SPI2X = 0x1  // Double SPI Speed Bit
 | 
			
		||||
 | 
			
		||||
	// SPCR: SPI Control Register
 | 
			
		||||
	SPCR_SPIE = 0x80 // SPI Interrupt Enable
 | 
			
		||||
	SPCR_SPE  = 0x40 // SPI Enable
 | 
			
		||||
	SPCR_DORD = 0x20 // Data Order
 | 
			
		||||
	SPCR_MSTR = 0x10 // Master/Slave Select
 | 
			
		||||
	SPCR_CPOL = 0x8  // Clock polarity
 | 
			
		||||
	SPCR_CPHA = 0x4  // Clock Phase
 | 
			
		||||
	SPCR_SPR  = 0x3  // SPI Clock Rate Selects
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
// Bitfields for WDT: Watchdog Timer
 | 
			
		||||
const (
 | 
			
		||||
	// WDTCSR: Watchdog Timer Control Register
 | 
			
		||||
	WDTCSR_WDIF = 0x80 // Watchdog Timeout Interrupt Flag
 | 
			
		||||
	WDTCSR_WDIE = 0x40 // Watchdog Timeout Interrupt Enable
 | 
			
		||||
	WDTCSR_WDP  = 0x27 // Watchdog Timer Prescaler Bits
 | 
			
		||||
	WDTCSR_WDCE = 0x10 // Watchdog Change Enable
 | 
			
		||||
	WDTCSR_WDE  = 0x8  // Watch Dog Enable
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
// Bitfields for CPU: CPU Registers
 | 
			
		||||
const (
 | 
			
		||||
	// SREG: Status Register
 | 
			
		||||
	SREG_I = 0x80 // Global Interrupt Enable
 | 
			
		||||
	SREG_T = 0x40 // Bit Copy Storage
 | 
			
		||||
	SREG_H = 0x20 // Half Carry Flag
 | 
			
		||||
	SREG_S = 0x10 // Sign Bit
 | 
			
		||||
	SREG_V = 0x8  // Two's Complement Overflow Flag
 | 
			
		||||
	SREG_N = 0x4  // Negative Flag
 | 
			
		||||
	SREG_Z = 0x2  // Zero Flag
 | 
			
		||||
	SREG_C = 0x1  // Carry Flag
 | 
			
		||||
 | 
			
		||||
	// OSCCAL: Oscillator Calibration Value
 | 
			
		||||
	OSCCAL_OSCCAL = 0xff // Oscillator Calibration
 | 
			
		||||
 | 
			
		||||
	// CLKPR
 | 
			
		||||
	CLKPR_CLKPCE = 0x80
 | 
			
		||||
	CLKPR_CLKPS  = 0xf
 | 
			
		||||
 | 
			
		||||
	// SMCR: Sleep Mode Control Register
 | 
			
		||||
	SMCR_SM = 0xe // Sleep Mode Select bits
 | 
			
		||||
	SMCR_SE = 0x1 // Sleep Enable
 | 
			
		||||
 | 
			
		||||
	// GPIOR2: General Purpose IO Register 2
 | 
			
		||||
	GPIOR2_GPIOR = 0xff // General Purpose IO Register 2 bis
 | 
			
		||||
 | 
			
		||||
	// GPIOR1: General Purpose IO Register 1
 | 
			
		||||
	GPIOR1_GPIOR = 0xff // General Purpose IO Register 1 bis
 | 
			
		||||
 | 
			
		||||
	// GPIOR0: General Purpose IO Register 0
 | 
			
		||||
	GPIOR0_GPIOR07 = 0x80 // General Purpose IO Register 0 bit 7
 | 
			
		||||
	GPIOR0_GPIOR06 = 0x40 // General Purpose IO Register 0 bit 6
 | 
			
		||||
	GPIOR0_GPIOR05 = 0x20 // General Purpose IO Register 0 bit 5
 | 
			
		||||
	GPIOR0_GPIOR04 = 0x10 // General Purpose IO Register 0 bit 4
 | 
			
		||||
	GPIOR0_GPIOR03 = 0x8  // General Purpose IO Register 0 bit 3
 | 
			
		||||
	GPIOR0_GPIOR02 = 0x4  // General Purpose IO Register 0 bit 2
 | 
			
		||||
	GPIOR0_GPIOR01 = 0x2  // General Purpose IO Register 0 bit 1
 | 
			
		||||
	GPIOR0_GPIOR00 = 0x1  // General Purpose IO Register 0 bit 0
 | 
			
		||||
 | 
			
		||||
	// PRR0: Power Reduction Register0
 | 
			
		||||
	PRR0_PRTWI    = 0x80 // Power Reduction TWI
 | 
			
		||||
	PRR0_PRTIM2   = 0x40 // Power Reduction Timer/Counter2
 | 
			
		||||
	PRR0_PRTIM0   = 0x20 // Power Reduction Timer/Counter0
 | 
			
		||||
	PRR0_PRUSART1 = 0x10 // Power Reduction USART1
 | 
			
		||||
	PRR0_PRTIM1   = 0x8  // Power Reduction Timer/Counter1
 | 
			
		||||
	PRR0_PRSPI    = 0x4  // Power Reduction Serial Peripheral Interface
 | 
			
		||||
	PRR0_PRUSART0 = 0x2  // Power Reduction USART0
 | 
			
		||||
	PRR0_PRADC    = 0x1  // Power Reduction ADC
 | 
			
		||||
 | 
			
		||||
	// PRR1: Power Reduction Register1
 | 
			
		||||
	PRR1_PRTIM3 = 0x1 // Power Reduction Timer/Counter3
 | 
			
		||||
)
 | 
			
		||||
							
								
								
									
										6
									
								
								src/device/avr/atmega1284.ld
									
										
									
									
									
										Обычный файл
									
								
							
							
						
						
									
										6
									
								
								src/device/avr/atmega1284.ld
									
										
									
									
									
										Обычный файл
									
								
							| 
						 | 
				
			
			@ -0,0 +1,6 @@
 | 
			
		|||
/* Automatically generated file. DO NOT EDIT. */
 | 
			
		||||
/* Generated by gen-device.py from ATmega1284.atdf, see http://packs.download.atmel.com/ */
 | 
			
		||||
 | 
			
		||||
__flash_size = 0x20000;
 | 
			
		||||
__ram_size   = 0x4000;
 | 
			
		||||
__num_isrs   = 35;
 | 
			
		||||
							
								
								
									
										870
									
								
								src/device/avr/atmega1284p.go
									
										
									
									
									
										Обычный файл
									
								
							
							
						
						
									
										870
									
								
								src/device/avr/atmega1284p.go
									
										
									
									
									
										Обычный файл
									
								
							| 
						 | 
				
			
			@ -0,0 +1,870 @@
 | 
			
		|||
// Automatically generated file. DO NOT EDIT.
 | 
			
		||||
// Generated by gen-device.py from ATmega1284P.atdf, see http://packs.download.atmel.com/
 | 
			
		||||
 | 
			
		||||
// +build avr,atmega1284p
 | 
			
		||||
 | 
			
		||||
// Device information for the ATmega1284P.
 | 
			
		||||
//
 | 
			
		||||
package avr
 | 
			
		||||
 | 
			
		||||
// Magic type name for the compiler.
 | 
			
		||||
type __reg uint8
 | 
			
		||||
 | 
			
		||||
// Export this magic type name.
 | 
			
		||||
type RegValue = __reg
 | 
			
		||||
 | 
			
		||||
// Some information about this device.
 | 
			
		||||
const (
 | 
			
		||||
	DEVICE = "ATmega1284P"
 | 
			
		||||
	ARCH   = "AVR8"
 | 
			
		||||
	FAMILY = "megaAVR"
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
// Interrupts
 | 
			
		||||
const (
 | 
			
		||||
	IRQ_RESET        = 0  // External Pin,Power-on Reset,Brown-out Reset,Watchdog Reset,and JTAG AVR Reset. See Datasheet.
 | 
			
		||||
	IRQ_INT0         = 1  // External Interrupt Request 0
 | 
			
		||||
	IRQ_INT1         = 2  // External Interrupt Request 1
 | 
			
		||||
	IRQ_INT2         = 3  // External Interrupt Request 2
 | 
			
		||||
	IRQ_PCINT0       = 4  // Pin Change Interrupt Request 0
 | 
			
		||||
	IRQ_PCINT1       = 5  // Pin Change Interrupt Request 1
 | 
			
		||||
	IRQ_PCINT2       = 6  // Pin Change Interrupt Request 2
 | 
			
		||||
	IRQ_PCINT3       = 7  // Pin Change Interrupt Request 3
 | 
			
		||||
	IRQ_WDT          = 8  // Watchdog Time-out Interrupt
 | 
			
		||||
	IRQ_TIMER2_COMPA = 9  // Timer/Counter2 Compare Match A
 | 
			
		||||
	IRQ_TIMER2_COMPB = 10 // Timer/Counter2 Compare Match B
 | 
			
		||||
	IRQ_TIMER2_OVF   = 11 // Timer/Counter2 Overflow
 | 
			
		||||
	IRQ_TIMER1_CAPT  = 12 // Timer/Counter1 Capture Event
 | 
			
		||||
	IRQ_TIMER1_COMPA = 13 // Timer/Counter1 Compare Match A
 | 
			
		||||
	IRQ_TIMER1_COMPB = 14 // Timer/Counter1 Compare Match B
 | 
			
		||||
	IRQ_TIMER1_OVF   = 15 // Timer/Counter1 Overflow
 | 
			
		||||
	IRQ_TIMER0_COMPA = 16 // Timer/Counter0 Compare Match A
 | 
			
		||||
	IRQ_TIMER0_COMPB = 17 // Timer/Counter0 Compare Match B
 | 
			
		||||
	IRQ_TIMER0_OVF   = 18 // Timer/Counter0 Overflow
 | 
			
		||||
	IRQ_SPI_STC      = 19 // SPI Serial Transfer Complete
 | 
			
		||||
	IRQ_USART0_RX    = 20 // USART0, Rx Complete
 | 
			
		||||
	IRQ_USART0_UDRE  = 21 // USART0 Data register Empty
 | 
			
		||||
	IRQ_USART0_TX    = 22 // USART0, Tx Complete
 | 
			
		||||
	IRQ_ANALOG_COMP  = 23 // Analog Comparator
 | 
			
		||||
	IRQ_ADC          = 24 // ADC Conversion Complete
 | 
			
		||||
	IRQ_EE_READY     = 25 // EEPROM Ready
 | 
			
		||||
	IRQ_TWI          = 26 // 2-wire Serial Interface
 | 
			
		||||
	IRQ_SPM_READY    = 27 // Store Program Memory Read
 | 
			
		||||
	IRQ_USART1_RX    = 28 // USART1 RX complete
 | 
			
		||||
	IRQ_USART1_UDRE  = 29 // USART1 Data Register Empty
 | 
			
		||||
	IRQ_USART1_TX    = 30 // USART1 TX complete
 | 
			
		||||
	IRQ_TIMER3_CAPT  = 31 // Timer/Counter3 Capture Event
 | 
			
		||||
	IRQ_TIMER3_COMPA = 32 // Timer/Counter3 Compare Match A
 | 
			
		||||
	IRQ_TIMER3_COMPB = 33 // Timer/Counter3 Compare Match B
 | 
			
		||||
	IRQ_TIMER3_OVF   = 34 // Timer/Counter3 Overflow
 | 
			
		||||
	IRQ_max          = 34 // Highest interrupt number on this device.
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
// Peripherals
 | 
			
		||||
var (
 | 
			
		||||
	// Fuses
 | 
			
		||||
	FUSE = struct {
 | 
			
		||||
		EXTENDED __reg
 | 
			
		||||
		HIGH     __reg
 | 
			
		||||
		LOW      __reg
 | 
			
		||||
	}{
 | 
			
		||||
		EXTENDED: 0x2,
 | 
			
		||||
		HIGH:     0x1,
 | 
			
		||||
		LOW:      0x0,
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	// Lockbits
 | 
			
		||||
	LOCKBIT = struct {
 | 
			
		||||
		LOCKBIT __reg
 | 
			
		||||
	}{
 | 
			
		||||
		LOCKBIT: 0x0,
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	// Analog Comparator
 | 
			
		||||
	AC = struct {
 | 
			
		||||
		ACSR  __reg
 | 
			
		||||
		DIDR1 __reg
 | 
			
		||||
	}{
 | 
			
		||||
		ACSR:  0x50, // Analog Comparator Control And Status Register
 | 
			
		||||
		DIDR1: 0x7f, // Digital Input Disable Register 1
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	// USART
 | 
			
		||||
	USART = struct {
 | 
			
		||||
		UDR0   __reg
 | 
			
		||||
		UCSR0A __reg
 | 
			
		||||
		UCSR0B __reg
 | 
			
		||||
		UCSR0C __reg
 | 
			
		||||
		UBRR0L __reg
 | 
			
		||||
		UBRR0H __reg
 | 
			
		||||
		UDR1   __reg
 | 
			
		||||
		UCSR1A __reg
 | 
			
		||||
		UCSR1B __reg
 | 
			
		||||
		UCSR1C __reg
 | 
			
		||||
		UBRR1L __reg
 | 
			
		||||
		UBRR1H __reg
 | 
			
		||||
	}{
 | 
			
		||||
		UDR0:   0xc6, // USART I/O Data Register
 | 
			
		||||
		UCSR0A: 0xc0, // USART Control and Status Register A
 | 
			
		||||
		UCSR0B: 0xc1, // USART Control and Status Register B
 | 
			
		||||
		UCSR0C: 0xc2, // USART Control and Status Register C
 | 
			
		||||
		UBRR0L: 0xc4, // USART Baud Rate Register Bytes
 | 
			
		||||
		UBRR0H: 0xc4, // USART Baud Rate Register Bytes
 | 
			
		||||
		UDR1:   0xce, // USART I/O Data Register
 | 
			
		||||
		UCSR1A: 0xc8, // USART Control and Status Register A
 | 
			
		||||
		UCSR1B: 0xc9, // USART Control and Status Register B
 | 
			
		||||
		UCSR1C: 0xca, // USART Control and Status Register C
 | 
			
		||||
		UBRR1L: 0xcc, // USART Baud Rate Register Bytes
 | 
			
		||||
		UBRR1H: 0xcc, // USART Baud Rate Register Bytes
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	// I/O Port
 | 
			
		||||
	PORT = struct {
 | 
			
		||||
		PORTA __reg
 | 
			
		||||
		DDRA  __reg
 | 
			
		||||
		PINA  __reg
 | 
			
		||||
		PORTB __reg
 | 
			
		||||
		DDRB  __reg
 | 
			
		||||
		PINB  __reg
 | 
			
		||||
		PORTC __reg
 | 
			
		||||
		DDRC  __reg
 | 
			
		||||
		PINC  __reg
 | 
			
		||||
		PORTD __reg
 | 
			
		||||
		DDRD  __reg
 | 
			
		||||
		PIND  __reg
 | 
			
		||||
	}{
 | 
			
		||||
		PORTA: 0x22, // Port A Data Register
 | 
			
		||||
		DDRA:  0x21, // Port A Data Direction Register
 | 
			
		||||
		PINA:  0x20, // Port A Input Pins
 | 
			
		||||
		PORTB: 0x25, // Port B Data Register
 | 
			
		||||
		DDRB:  0x24, // Port B Data Direction Register
 | 
			
		||||
		PINB:  0x23, // Port B Input Pins
 | 
			
		||||
		PORTC: 0x28, // Port C Data Register
 | 
			
		||||
		DDRC:  0x27, // Port C Data Direction Register
 | 
			
		||||
		PINC:  0x26, // Port C Input Pins
 | 
			
		||||
		PORTD: 0x2b, // Port D Data Register
 | 
			
		||||
		DDRD:  0x2a, // Port D Data Direction Register
 | 
			
		||||
		PIND:  0x29, // Port D Input Pins
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	// Timer/Counter, 8-bit
 | 
			
		||||
	TC8 = struct {
 | 
			
		||||
		OCR0B  __reg
 | 
			
		||||
		OCR0A  __reg
 | 
			
		||||
		TCNT0  __reg
 | 
			
		||||
		TCCR0B __reg
 | 
			
		||||
		TCCR0A __reg
 | 
			
		||||
		TIMSK0 __reg
 | 
			
		||||
		TIFR0  __reg
 | 
			
		||||
	}{
 | 
			
		||||
		OCR0B:  0x48, // Timer/Counter0 Output Compare Register B
 | 
			
		||||
		OCR0A:  0x47, // Timer/Counter0 Output Compare Register A
 | 
			
		||||
		TCNT0:  0x46, // Timer/Counter0
 | 
			
		||||
		TCCR0B: 0x45, // Timer/Counter Control Register B
 | 
			
		||||
		TCCR0A: 0x44, // Timer/Counter Control Register A
 | 
			
		||||
		TIMSK0: 0x6e, // Timer/Counter0 Interrupt Mask Register
 | 
			
		||||
		TIFR0:  0x35, // Timer/Counter0 Interrupt Flag register
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	// Timer/Counter, 16-bit
 | 
			
		||||
	TC16 = struct {
 | 
			
		||||
		TIMSK1 __reg
 | 
			
		||||
		TIFR1  __reg
 | 
			
		||||
		TCCR1A __reg
 | 
			
		||||
		TCCR1B __reg
 | 
			
		||||
		TCCR1C __reg
 | 
			
		||||
		TCNT1L __reg
 | 
			
		||||
		TCNT1H __reg
 | 
			
		||||
		OCR1AL __reg
 | 
			
		||||
		OCR1AH __reg
 | 
			
		||||
		OCR1BL __reg
 | 
			
		||||
		OCR1BH __reg
 | 
			
		||||
		ICR1L  __reg
 | 
			
		||||
		ICR1H  __reg
 | 
			
		||||
		TIMSK3 __reg
 | 
			
		||||
		TIFR3  __reg
 | 
			
		||||
		TCCR3A __reg
 | 
			
		||||
		TCCR3B __reg
 | 
			
		||||
		TCCR3C __reg
 | 
			
		||||
		TCNT3L __reg
 | 
			
		||||
		TCNT3H __reg
 | 
			
		||||
		OCR3AL __reg
 | 
			
		||||
		OCR3AH __reg
 | 
			
		||||
		OCR3BL __reg
 | 
			
		||||
		OCR3BH __reg
 | 
			
		||||
		ICR3L  __reg
 | 
			
		||||
		ICR3H  __reg
 | 
			
		||||
	}{
 | 
			
		||||
		TIMSK1: 0x6f, // Timer/Counter1 Interrupt Mask Register
 | 
			
		||||
		TIFR1:  0x36, // Timer/Counter Interrupt Flag register
 | 
			
		||||
		TCCR1A: 0x80, // Timer/Counter1 Control Register A
 | 
			
		||||
		TCCR1B: 0x81, // Timer/Counter1 Control Register B
 | 
			
		||||
		TCCR1C: 0x82, // Timer/Counter1 Control Register C
 | 
			
		||||
		TCNT1L: 0x84, // Timer/Counter1 Bytes
 | 
			
		||||
		TCNT1H: 0x84, // Timer/Counter1 Bytes
 | 
			
		||||
		OCR1AL: 0x88, // Timer/Counter1 Output Compare Register A Bytes
 | 
			
		||||
		OCR1AH: 0x88, // Timer/Counter1 Output Compare Register A Bytes
 | 
			
		||||
		OCR1BL: 0x8a, // Timer/Counter1 Output Compare Register B Bytes
 | 
			
		||||
		OCR1BH: 0x8a, // Timer/Counter1 Output Compare Register B Bytes
 | 
			
		||||
		ICR1L:  0x86, // Timer/Counter1 Input Capture Register Bytes
 | 
			
		||||
		ICR1H:  0x86, // Timer/Counter1 Input Capture Register Bytes
 | 
			
		||||
		TIMSK3: 0x71, // Timer/Counter3 Interrupt Mask Register
 | 
			
		||||
		TIFR3:  0x38, // Timer/Counter Interrupt Flag register
 | 
			
		||||
		TCCR3A: 0x90, // Timer/Counter3 Control Register A
 | 
			
		||||
		TCCR3B: 0x91, // Timer/Counter3 Control Register B
 | 
			
		||||
		TCCR3C: 0x92, // Timer/Counter3 Control Register C
 | 
			
		||||
		TCNT3L: 0x94, // Timer/Counter3 Bytes
 | 
			
		||||
		TCNT3H: 0x94, // Timer/Counter3 Bytes
 | 
			
		||||
		OCR3AL: 0x98, // Timer/Counter3 Output Compare Register A Bytes
 | 
			
		||||
		OCR3AH: 0x98, // Timer/Counter3 Output Compare Register A Bytes
 | 
			
		||||
		OCR3BL: 0x9a, // Timer/Counter3 Output Compare Register B Bytes
 | 
			
		||||
		OCR3BH: 0x9a, // Timer/Counter3 Output Compare Register B Bytes
 | 
			
		||||
		ICR3L:  0x96, // Timer/Counter3 Input Capture Register Bytes
 | 
			
		||||
		ICR3H:  0x96, // Timer/Counter3 Input Capture Register Bytes
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	// Timer/Counter, 8-bit Async
 | 
			
		||||
	TC8_ASYNC = struct {
 | 
			
		||||
		TIMSK2 __reg
 | 
			
		||||
		TIFR2  __reg
 | 
			
		||||
		TCCR2A __reg
 | 
			
		||||
		TCCR2B __reg
 | 
			
		||||
		TCNT2  __reg
 | 
			
		||||
		OCR2B  __reg
 | 
			
		||||
		OCR2A  __reg
 | 
			
		||||
		ASSR   __reg
 | 
			
		||||
	}{
 | 
			
		||||
		TIMSK2: 0x70, // Timer/Counter Interrupt Mask register
 | 
			
		||||
		TIFR2:  0x37, // Timer/Counter Interrupt Flag Register
 | 
			
		||||
		TCCR2A: 0xb0, // Timer/Counter2 Control Register A
 | 
			
		||||
		TCCR2B: 0xb1, // Timer/Counter2 Control Register B
 | 
			
		||||
		TCNT2:  0xb2, // Timer/Counter2
 | 
			
		||||
		OCR2B:  0xb4, // Timer/Counter2 Output Compare Register B
 | 
			
		||||
		OCR2A:  0xb3, // Timer/Counter2 Output Compare Register A
 | 
			
		||||
		ASSR:   0xb6, // Asynchronous Status Register
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	// Bootloader
 | 
			
		||||
	BOOT_LOAD = struct {
 | 
			
		||||
		SPMCSR __reg
 | 
			
		||||
	}{
 | 
			
		||||
		SPMCSR: 0x57, // Store Program Memory Control Register
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	// External Interrupts
 | 
			
		||||
	EXINT = struct {
 | 
			
		||||
		EICRA  __reg
 | 
			
		||||
		EIMSK  __reg
 | 
			
		||||
		EIFR   __reg
 | 
			
		||||
		PCMSK3 __reg
 | 
			
		||||
		PCMSK2 __reg
 | 
			
		||||
		PCMSK1 __reg
 | 
			
		||||
		PCMSK0 __reg
 | 
			
		||||
		PCIFR  __reg
 | 
			
		||||
		PCICR  __reg
 | 
			
		||||
	}{
 | 
			
		||||
		EICRA:  0x69, // External Interrupt Control Register A
 | 
			
		||||
		EIMSK:  0x3d, // External Interrupt Mask Register
 | 
			
		||||
		EIFR:   0x3c, // External Interrupt Flag Register
 | 
			
		||||
		PCMSK3: 0x73, // Pin Change Mask Register 3
 | 
			
		||||
		PCMSK2: 0x6d, // Pin Change Mask Register 2
 | 
			
		||||
		PCMSK1: 0x6c, // Pin Change Mask Register 1
 | 
			
		||||
		PCMSK0: 0x6b, // Pin Change Mask Register 0
 | 
			
		||||
		PCIFR:  0x3b, // Pin Change Interrupt Flag Register
 | 
			
		||||
		PCICR:  0x68, // Pin Change Interrupt Control Register
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	// Analog-to-Digital Converter
 | 
			
		||||
	ADC = struct {
 | 
			
		||||
		ADMUX  __reg
 | 
			
		||||
		ADCL   __reg
 | 
			
		||||
		ADCH   __reg
 | 
			
		||||
		ADCSRA __reg
 | 
			
		||||
		DIDR0  __reg
 | 
			
		||||
	}{
 | 
			
		||||
		ADMUX:  0x7c, // The ADC multiplexer Selection Register
 | 
			
		||||
		ADCL:   0x78, // ADC Data Register Bytes
 | 
			
		||||
		ADCH:   0x78, // ADC Data Register Bytes
 | 
			
		||||
		ADCSRA: 0x7a, // The ADC Control and Status register A
 | 
			
		||||
		DIDR0:  0x7e, // Digital Input Disable Register
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	// JTAG Interface
 | 
			
		||||
	JTAG = struct {
 | 
			
		||||
		OCDR __reg
 | 
			
		||||
	}{
 | 
			
		||||
		OCDR: 0x51, // On-Chip Debug Related Register in I/O Memory
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	// EEPROM
 | 
			
		||||
	EEPROM = struct {
 | 
			
		||||
		EEARL __reg
 | 
			
		||||
		EEARH __reg
 | 
			
		||||
		EEDR  __reg
 | 
			
		||||
		EECR  __reg
 | 
			
		||||
	}{
 | 
			
		||||
		EEARL: 0x41, // EEPROM Address Register Low Bytes
 | 
			
		||||
		EEARH: 0x41, // EEPROM Address Register Low Bytes
 | 
			
		||||
		EEDR:  0x40, // EEPROM Data Register
 | 
			
		||||
		EECR:  0x3f, // EEPROM Control Register
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	// Two Wire Serial Interface
 | 
			
		||||
	TWI = struct {
 | 
			
		||||
		TWAMR __reg
 | 
			
		||||
		TWBR  __reg
 | 
			
		||||
		TWCR  __reg
 | 
			
		||||
		TWSR  __reg
 | 
			
		||||
		TWDR  __reg
 | 
			
		||||
		TWAR  __reg
 | 
			
		||||
	}{
 | 
			
		||||
		TWAMR: 0xbd, // TWI (Slave) Address Mask Register
 | 
			
		||||
		TWBR:  0xb8, // TWI Bit Rate register
 | 
			
		||||
		TWCR:  0xbc, // TWI Control Register
 | 
			
		||||
		TWSR:  0xb9, // TWI Status Register
 | 
			
		||||
		TWDR:  0xbb, // TWI Data register
 | 
			
		||||
		TWAR:  0xba, // TWI (Slave) Address register
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	// Serial Peripheral Interface
 | 
			
		||||
	SPI = struct {
 | 
			
		||||
		SPDR __reg
 | 
			
		||||
		SPSR __reg
 | 
			
		||||
		SPCR __reg
 | 
			
		||||
	}{
 | 
			
		||||
		SPDR: 0x4e, // SPI Data Register
 | 
			
		||||
		SPSR: 0x4d, // SPI Status Register
 | 
			
		||||
		SPCR: 0x4c, // SPI Control Register
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	// Watchdog Timer
 | 
			
		||||
	WDT = struct {
 | 
			
		||||
		WDTCSR __reg
 | 
			
		||||
	}{
 | 
			
		||||
		WDTCSR: 0x60, // Watchdog Timer Control Register
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	// CPU Registers
 | 
			
		||||
	CPU = struct {
 | 
			
		||||
		SREG   __reg
 | 
			
		||||
		SPL    __reg
 | 
			
		||||
		SPH    __reg
 | 
			
		||||
		OSCCAL __reg
 | 
			
		||||
		CLKPR  __reg
 | 
			
		||||
		SMCR   __reg
 | 
			
		||||
		RAMPZ  __reg
 | 
			
		||||
		GPIOR2 __reg
 | 
			
		||||
		GPIOR1 __reg
 | 
			
		||||
		GPIOR0 __reg
 | 
			
		||||
		PRR0   __reg
 | 
			
		||||
		PRR1   __reg
 | 
			
		||||
	}{
 | 
			
		||||
		SREG:   0x5f, // Status Register
 | 
			
		||||
		SPL:    0x5d, // Stack Pointer
 | 
			
		||||
		SPH:    0x5d, // Stack Pointer
 | 
			
		||||
		OSCCAL: 0x66, // Oscillator Calibration Value
 | 
			
		||||
		CLKPR:  0x61,
 | 
			
		||||
		SMCR:   0x53, // Sleep Mode Control Register
 | 
			
		||||
		RAMPZ:  0x5b, // RAM Page Z Select Register
 | 
			
		||||
		GPIOR2: 0x4b, // General Purpose IO Register 2
 | 
			
		||||
		GPIOR1: 0x4a, // General Purpose IO Register 1
 | 
			
		||||
		GPIOR0: 0x3e, // General Purpose IO Register 0
 | 
			
		||||
		PRR0:   0x64, // Power Reduction Register0
 | 
			
		||||
		PRR1:   0x65, // Power Reduction Register1
 | 
			
		||||
	}
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
// Bitfields for FUSE: Fuses
 | 
			
		||||
const (
 | 
			
		||||
	// EXTENDED
 | 
			
		||||
	EXTENDED_BODLEVEL = 0x7 // Brown-out Detector trigger level
 | 
			
		||||
 | 
			
		||||
	// HIGH
 | 
			
		||||
	HIGH_OCDEN   = 0x80 // On-Chip Debug Enabled
 | 
			
		||||
	HIGH_JTAGEN  = 0x40 // JTAG Interface Enabled
 | 
			
		||||
	HIGH_SPIEN   = 0x20 // Serial program downloading (SPI) enabled
 | 
			
		||||
	HIGH_WDTON   = 0x10 // Watchdog timer always on
 | 
			
		||||
	HIGH_EESAVE  = 0x8  // Preserve EEPROM through the Chip Erase cycle
 | 
			
		||||
	HIGH_BOOTSZ  = 0x6  // Select Boot Size
 | 
			
		||||
	HIGH_BOOTRST = 0x1  // Boot Reset vector Enabled
 | 
			
		||||
 | 
			
		||||
	// LOW
 | 
			
		||||
	LOW_CKDIV8    = 0x80 // Divide clock by 8 internally
 | 
			
		||||
	LOW_CKOUT     = 0x40 // Clock output on PORTB1
 | 
			
		||||
	LOW_SUT_CKSEL = 0x3f // Select Clock Source
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
// Bitfields for LOCKBIT: Lockbits
 | 
			
		||||
const (
 | 
			
		||||
	// LOCKBIT
 | 
			
		||||
	LOCKBIT_LB   = 0x3  // Memory Lock
 | 
			
		||||
	LOCKBIT_BLB0 = 0xc  // Boot Loader Protection Mode
 | 
			
		||||
	LOCKBIT_BLB1 = 0x30 // Boot Loader Protection Mode
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
// Bitfields for AC: Analog Comparator
 | 
			
		||||
const (
 | 
			
		||||
	// ACSR: Analog Comparator Control And Status Register
 | 
			
		||||
	ACSR_ACD  = 0x80 // Analog Comparator Disable
 | 
			
		||||
	ACSR_ACBG = 0x40 // Analog Comparator Bandgap Select
 | 
			
		||||
	ACSR_ACO  = 0x20 // Analog Compare Output
 | 
			
		||||
	ACSR_ACI  = 0x10 // Analog Comparator Interrupt Flag
 | 
			
		||||
	ACSR_ACIE = 0x8  // Analog Comparator Interrupt Enable
 | 
			
		||||
	ACSR_ACIC = 0x4  // Analog Comparator Input Capture Enable
 | 
			
		||||
	ACSR_ACIS = 0x3  // Analog Comparator Interrupt Mode Select bits
 | 
			
		||||
 | 
			
		||||
	// DIDR1: Digital Input Disable Register 1
 | 
			
		||||
	DIDR1_AIN1D = 0x2 // AIN1 Digital Input Disable
 | 
			
		||||
	DIDR1_AIN0D = 0x1 // AIN0 Digital Input Disable
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
// Bitfields for USART: USART
 | 
			
		||||
const (
 | 
			
		||||
	// UDR0: USART I/O Data Register
 | 
			
		||||
	UDR0_UDR0 = 0xff // USART I/O Data bits
 | 
			
		||||
 | 
			
		||||
	// UCSR0A: USART Control and Status Register A
 | 
			
		||||
	UCSR0A_RXC0  = 0x80 // USART Receive Complete
 | 
			
		||||
	UCSR0A_TXC0  = 0x40 // USART Transmitt Complete
 | 
			
		||||
	UCSR0A_UDRE0 = 0x20 // USART Data Register Empty
 | 
			
		||||
	UCSR0A_FE0   = 0x10 // Framing Error
 | 
			
		||||
	UCSR0A_DOR0  = 0x8  // Data overRun
 | 
			
		||||
	UCSR0A_UPE0  = 0x4  // Parity Error
 | 
			
		||||
	UCSR0A_U2X0  = 0x2  // Double the USART transmission speed
 | 
			
		||||
	UCSR0A_MPCM0 = 0x1  // Multi-processor Communication Mode
 | 
			
		||||
 | 
			
		||||
	// UCSR0B: USART Control and Status Register B
 | 
			
		||||
	UCSR0B_RXCIE0 = 0x80 // RX Complete Interrupt Enable
 | 
			
		||||
	UCSR0B_TXCIE0 = 0x40 // TX Complete Interrupt Enable
 | 
			
		||||
	UCSR0B_UDRIE0 = 0x20 // USART Data register Empty Interrupt Enable
 | 
			
		||||
	UCSR0B_RXEN0  = 0x10 // Receiver Enable
 | 
			
		||||
	UCSR0B_TXEN0  = 0x8  // Transmitter Enable
 | 
			
		||||
	UCSR0B_UCSZ02 = 0x4  // Character Size
 | 
			
		||||
	UCSR0B_RXB80  = 0x2  // Receive Data Bit 8
 | 
			
		||||
	UCSR0B_TXB80  = 0x1  // Transmit Data Bit 8
 | 
			
		||||
 | 
			
		||||
	// UCSR0C: USART Control and Status Register C
 | 
			
		||||
	UCSR0C_UMSEL0 = 0xc0 // USART Mode Select
 | 
			
		||||
	UCSR0C_UPM0   = 0x30 // Parity Mode Bits
 | 
			
		||||
	UCSR0C_USBS0  = 0x8  // Stop Bit Select
 | 
			
		||||
	UCSR0C_UCSZ0  = 0x6  // Character Size
 | 
			
		||||
	UCSR0C_UCPOL0 = 0x1  // Clock Polarity
 | 
			
		||||
 | 
			
		||||
	// UBRR0L: USART Baud Rate Register Bytes
 | 
			
		||||
 | 
			
		||||
	// UBRR0H: USART Baud Rate Register Bytes
 | 
			
		||||
	UBRR0_UBRR0 = 0xfff // USART Baud Rate Register
 | 
			
		||||
 | 
			
		||||
	// UDR1: USART I/O Data Register
 | 
			
		||||
	UDR1_UDR1 = 0xff // USART I/O Data bits
 | 
			
		||||
 | 
			
		||||
	// UCSR1A: USART Control and Status Register A
 | 
			
		||||
	UCSR1A_RXC1  = 0x80 // USART Receive Complete
 | 
			
		||||
	UCSR1A_TXC1  = 0x40 // USART Transmitt Complete
 | 
			
		||||
	UCSR1A_UDRE1 = 0x20 // USART Data Register Empty
 | 
			
		||||
	UCSR1A_FE1   = 0x10 // Framing Error
 | 
			
		||||
	UCSR1A_DOR1  = 0x8  // Data overRun
 | 
			
		||||
	UCSR1A_UPE1  = 0x4  // Parity Error
 | 
			
		||||
	UCSR1A_U2X1  = 0x2  // Double the USART transmission speed
 | 
			
		||||
	UCSR1A_MPCM1 = 0x1  // Multi-processor Communication Mode
 | 
			
		||||
 | 
			
		||||
	// UCSR1B: USART Control and Status Register B
 | 
			
		||||
	UCSR1B_RXCIE1 = 0x80 // RX Complete Interrupt Enable
 | 
			
		||||
	UCSR1B_TXCIE1 = 0x40 // TX Complete Interrupt Enable
 | 
			
		||||
	UCSR1B_UDRIE1 = 0x20 // USART Data register Empty Interrupt Enable
 | 
			
		||||
	UCSR1B_RXEN1  = 0x10 // Receiver Enable
 | 
			
		||||
	UCSR1B_TXEN1  = 0x8  // Transmitter Enable
 | 
			
		||||
	UCSR1B_UCSZ12 = 0x4  // Character Size
 | 
			
		||||
	UCSR1B_RXB81  = 0x2  // Receive Data Bit 8
 | 
			
		||||
	UCSR1B_TXB81  = 0x1  // Transmit Data Bit 8
 | 
			
		||||
 | 
			
		||||
	// UCSR1C: USART Control and Status Register C
 | 
			
		||||
	UCSR1C_UMSEL1 = 0xc0 // USART Mode Select
 | 
			
		||||
	UCSR1C_UPM1   = 0x30 // Parity Mode Bits
 | 
			
		||||
	UCSR1C_USBS1  = 0x8  // Stop Bit Select
 | 
			
		||||
	UCSR1C_UCSZ1  = 0x6  // Character Size
 | 
			
		||||
	UCSR1C_UCPOL1 = 0x1  // Clock Polarity
 | 
			
		||||
 | 
			
		||||
	// UBRR1L: USART Baud Rate Register Bytes
 | 
			
		||||
 | 
			
		||||
	// UBRR1H: USART Baud Rate Register Bytes
 | 
			
		||||
	UBRR1_UBRR1 = 0xfff // USART Baud Rate Register
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
// Bitfields for TC8: Timer/Counter, 8-bit
 | 
			
		||||
const (
 | 
			
		||||
	// OCR0B: Timer/Counter0 Output Compare Register B
 | 
			
		||||
	OCR0B_OCR0B = 0xff // Timer/Counter0 Output Compare B bits
 | 
			
		||||
 | 
			
		||||
	// OCR0A: Timer/Counter0 Output Compare Register A
 | 
			
		||||
	OCR0A_OCR0A = 0xff // Timer/Counter0 Output Compare A bits
 | 
			
		||||
 | 
			
		||||
	// TCNT0: Timer/Counter0
 | 
			
		||||
	TCNT0_TCNT0 = 0xff // Timer/Counter0 bits
 | 
			
		||||
 | 
			
		||||
	// TCCR0B: Timer/Counter Control Register B
 | 
			
		||||
	TCCR0B_FOC0A = 0x80 // Force Output Compare A
 | 
			
		||||
	TCCR0B_FOC0B = 0x40 // Force Output Compare B
 | 
			
		||||
	TCCR0B_WGM02 = 0x8
 | 
			
		||||
	TCCR0B_CS0   = 0x7 // Clock Select
 | 
			
		||||
 | 
			
		||||
	// TCCR0A: Timer/Counter Control Register A
 | 
			
		||||
	TCCR0A_COM0A = 0xc0 // Compare Output Mode, Phase Correct PWM Mode
 | 
			
		||||
	TCCR0A_COM0B = 0x30 // Compare Output Mode, Fast PWm
 | 
			
		||||
	TCCR0A_WGM0  = 0x3  // Waveform Generation Mode
 | 
			
		||||
 | 
			
		||||
	// TIMSK0: Timer/Counter0 Interrupt Mask Register
 | 
			
		||||
	TIMSK0_OCIE0B = 0x4 // Timer/Counter0 Output Compare Match B Interrupt Enable
 | 
			
		||||
	TIMSK0_OCIE0A = 0x2 // Timer/Counter0 Output Compare Match A Interrupt Enable
 | 
			
		||||
	TIMSK0_TOIE0  = 0x1 // Timer/Counter0 Overflow Interrupt Enable
 | 
			
		||||
 | 
			
		||||
	// TIFR0: Timer/Counter0 Interrupt Flag register
 | 
			
		||||
	TIFR0_OCF0B = 0x4 // Timer/Counter0 Output Compare Flag 0B
 | 
			
		||||
	TIFR0_OCF0A = 0x2 // Timer/Counter0 Output Compare Flag 0A
 | 
			
		||||
	TIFR0_TOV0  = 0x1 // Timer/Counter0 Overflow Flag
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
// Bitfields for TC16: Timer/Counter, 16-bit
 | 
			
		||||
const (
 | 
			
		||||
	// TIMSK1: Timer/Counter1 Interrupt Mask Register
 | 
			
		||||
	TIMSK1_ICIE1  = 0x20 // Timer/Counter1 Input Capture Interrupt Enable
 | 
			
		||||
	TIMSK1_OCIE1B = 0x4  // Timer/Counter1 Output Compare B Match Interrupt Enable
 | 
			
		||||
	TIMSK1_OCIE1A = 0x2  // Timer/Counter1 Output Compare A Match Interrupt Enable
 | 
			
		||||
	TIMSK1_TOIE1  = 0x1  // Timer/Counter1 Overflow Interrupt Enable
 | 
			
		||||
 | 
			
		||||
	// TIFR1: Timer/Counter Interrupt Flag register
 | 
			
		||||
	TIFR1_ICF1  = 0x20 // Timer/Counter1 Input Capture Flag
 | 
			
		||||
	TIFR1_OCF1B = 0x4  // Timer/Counter1 Output Compare B Match Flag
 | 
			
		||||
	TIFR1_OCF1A = 0x2  // Timer/Counter1 Output Compare A Match Flag
 | 
			
		||||
	TIFR1_TOV1  = 0x1  // Timer/Counter1 Overflow Flag
 | 
			
		||||
 | 
			
		||||
	// TCCR1A: Timer/Counter1 Control Register A
 | 
			
		||||
	TCCR1A_COM1A = 0xc0 // Compare Output Mode 1A, bits
 | 
			
		||||
	TCCR1A_COM1B = 0x30 // Compare Output Mode 1B, bits
 | 
			
		||||
	TCCR1A_WGM1  = 0x3  // Pulse Width Modulator Select Bits
 | 
			
		||||
 | 
			
		||||
	// TCCR1B: Timer/Counter1 Control Register B
 | 
			
		||||
	TCCR1B_ICNC1 = 0x80 // Input Capture 1 Noise Canceler
 | 
			
		||||
	TCCR1B_ICES1 = 0x40 // Input Capture 1 Edge Select
 | 
			
		||||
	TCCR1B_WGM1  = 0x18 // Waveform Generation Mode Bits
 | 
			
		||||
	TCCR1B_CS1   = 0x7  // Clock Select1 bits
 | 
			
		||||
 | 
			
		||||
	// TCCR1C: Timer/Counter1 Control Register C
 | 
			
		||||
	TCCR1C_FOC1A = 0x80 // Force Output Compare for Channel A
 | 
			
		||||
	TCCR1C_FOC1B = 0x40 // Force Output Compare for Channel B
 | 
			
		||||
 | 
			
		||||
	// TCNT1L: Timer/Counter1 Bytes
 | 
			
		||||
 | 
			
		||||
	// TCNT1H: Timer/Counter1 Bytes
 | 
			
		||||
	TCNT1_TCNT1 = 0xffff // Timer/Counter1 bits
 | 
			
		||||
 | 
			
		||||
	// OCR1AL: Timer/Counter1 Output Compare Register A Bytes
 | 
			
		||||
 | 
			
		||||
	// OCR1AH: Timer/Counter1 Output Compare Register A Bytes
 | 
			
		||||
	OCR1A_OCR1A = 0xffff // Timer/Counter1 Output Compare A bits
 | 
			
		||||
 | 
			
		||||
	// OCR1BL: Timer/Counter1 Output Compare Register B Bytes
 | 
			
		||||
 | 
			
		||||
	// OCR1BH: Timer/Counter1 Output Compare Register B Bytes
 | 
			
		||||
	OCR1B_OCR1B = 0xffff // Timer/Counter1 Output Compare B bits
 | 
			
		||||
 | 
			
		||||
	// ICR1L: Timer/Counter1 Input Capture Register Bytes
 | 
			
		||||
 | 
			
		||||
	// ICR1H: Timer/Counter1 Input Capture Register Bytes
 | 
			
		||||
	ICR1_ICR1 = 0xffff // Timer/Counter1 Input Capture bits
 | 
			
		||||
 | 
			
		||||
	// TIMSK3: Timer/Counter3 Interrupt Mask Register
 | 
			
		||||
	TIMSK3_ICIE3  = 0x20 // Timer/Counter3 Input Capture Interrupt Enable
 | 
			
		||||
	TIMSK3_OCIE3B = 0x4  // Timer/Counter3 Output Compare B Match Interrupt Enable
 | 
			
		||||
	TIMSK3_OCIE3A = 0x2  // Timer/Counter3 Output Compare A Match Interrupt Enable
 | 
			
		||||
	TIMSK3_TOIE3  = 0x1  // Timer/Counter3 Overflow Interrupt Enable
 | 
			
		||||
 | 
			
		||||
	// TIFR3: Timer/Counter Interrupt Flag register
 | 
			
		||||
	TIFR3_ICF3  = 0x20 // Timer/Counter3 Input Capture Flag
 | 
			
		||||
	TIFR3_OCF3B = 0x4  // Timer/Counter3 Output Compare B Match Flag
 | 
			
		||||
	TIFR3_OCF3A = 0x2  // Timer/Counter3 Output Compare A Match Flag
 | 
			
		||||
	TIFR3_TOV3  = 0x1  // Timer/Counter3 Overflow Flag
 | 
			
		||||
 | 
			
		||||
	// TCCR3A: Timer/Counter3 Control Register A
 | 
			
		||||
	TCCR3A_COM3A = 0xc0 // Compare Output Mode 3A, bits
 | 
			
		||||
	TCCR3A_COM3B = 0x30 // Compare Output Mode 3B, bits
 | 
			
		||||
	TCCR3A_WGM3  = 0x3  // Pulse Width Modulator Select Bits
 | 
			
		||||
 | 
			
		||||
	// TCCR3B: Timer/Counter3 Control Register B
 | 
			
		||||
	TCCR3B_ICNC3 = 0x80 // Input Capture 3 Noise Canceler
 | 
			
		||||
	TCCR3B_ICES3 = 0x40 // Input Capture 3 Edge Select
 | 
			
		||||
	TCCR3B_WGM3  = 0x18 // Waveform Generation Mode Bits
 | 
			
		||||
	TCCR3B_CS3   = 0x7  // Clock Select3 bits
 | 
			
		||||
 | 
			
		||||
	// TCCR3C: Timer/Counter3 Control Register C
 | 
			
		||||
	TCCR3C_FOC3A = 0x80 // Force Output Compare for Channel A
 | 
			
		||||
	TCCR3C_FOC3B = 0x40 // Force Output Compare for Channel B
 | 
			
		||||
 | 
			
		||||
	// TCNT3L: Timer/Counter3 Bytes
 | 
			
		||||
 | 
			
		||||
	// TCNT3H: Timer/Counter3 Bytes
 | 
			
		||||
	TCNT3_TCNT3 = 0xffff // Timer/Counter3 bits
 | 
			
		||||
 | 
			
		||||
	// OCR3AL: Timer/Counter3 Output Compare Register A Bytes
 | 
			
		||||
 | 
			
		||||
	// OCR3AH: Timer/Counter3 Output Compare Register A Bytes
 | 
			
		||||
	OCR3A_OCR3A = 0xffff // Timer/Counter3 Output Compare A bits
 | 
			
		||||
 | 
			
		||||
	// OCR3BL: Timer/Counter3 Output Compare Register B Bytes
 | 
			
		||||
 | 
			
		||||
	// OCR3BH: Timer/Counter3 Output Compare Register B Bytes
 | 
			
		||||
	OCR3B_OCR3B = 0xffff // Timer/Counter3 Output Compare B bits
 | 
			
		||||
 | 
			
		||||
	// ICR3L: Timer/Counter3 Input Capture Register Bytes
 | 
			
		||||
 | 
			
		||||
	// ICR3H: Timer/Counter3 Input Capture Register Bytes
 | 
			
		||||
	ICR3_ICR3 = 0xffff // Timer/Counter3 Input Capture bits
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
// Bitfields for TC8_ASYNC: Timer/Counter, 8-bit Async
 | 
			
		||||
const (
 | 
			
		||||
	// TIMSK2: Timer/Counter Interrupt Mask register
 | 
			
		||||
	TIMSK2_OCIE2B = 0x4 // Timer/Counter2 Output Compare Match B Interrupt Enable
 | 
			
		||||
	TIMSK2_OCIE2A = 0x2 // Timer/Counter2 Output Compare Match A Interrupt Enable
 | 
			
		||||
	TIMSK2_TOIE2  = 0x1 // Timer/Counter2 Overflow Interrupt Enable
 | 
			
		||||
 | 
			
		||||
	// TIFR2: Timer/Counter Interrupt Flag Register
 | 
			
		||||
	TIFR2_OCF2B = 0x4 // Output Compare Flag 2B
 | 
			
		||||
	TIFR2_OCF2A = 0x2 // Output Compare Flag 2A
 | 
			
		||||
	TIFR2_TOV2  = 0x1 // Timer/Counter2 Overflow Flag
 | 
			
		||||
 | 
			
		||||
	// TCCR2A: Timer/Counter2 Control Register A
 | 
			
		||||
	TCCR2A_COM2A = 0xc0 // Compare Output Mode bits
 | 
			
		||||
	TCCR2A_COM2B = 0x30 // Compare Output Mode bits
 | 
			
		||||
	TCCR2A_WGM2  = 0x3  // Waveform Genration Mode
 | 
			
		||||
 | 
			
		||||
	// TCCR2B: Timer/Counter2 Control Register B
 | 
			
		||||
	TCCR2B_FOC2A = 0x80 // Force Output Compare A
 | 
			
		||||
	TCCR2B_FOC2B = 0x40 // Force Output Compare B
 | 
			
		||||
	TCCR2B_WGM22 = 0x8  // Waveform Generation Mode
 | 
			
		||||
	TCCR2B_CS2   = 0x7  // Clock Select bits
 | 
			
		||||
 | 
			
		||||
	// TCNT2: Timer/Counter2
 | 
			
		||||
	TCNT2_TCNT2 = 0xff // Timer/Counter2 bits
 | 
			
		||||
 | 
			
		||||
	// OCR2B: Timer/Counter2 Output Compare Register B
 | 
			
		||||
	OCR2B_OCR2B = 0xff // Timer/Counter2 Output Compare B bits
 | 
			
		||||
 | 
			
		||||
	// OCR2A: Timer/Counter2 Output Compare Register A
 | 
			
		||||
	OCR2A_OCR2A = 0xff // Timer/Counter2 Output Compare A bits
 | 
			
		||||
 | 
			
		||||
	// ASSR: Asynchronous Status Register
 | 
			
		||||
	ASSR_EXCLK   = 0x40 // Enable External Clock Input
 | 
			
		||||
	ASSR_AS2     = 0x20 // Asynchronous Timer/Counter2
 | 
			
		||||
	ASSR_TCN2UB  = 0x10 // Timer/Counter2 Update Busy
 | 
			
		||||
	ASSR_OCR2AUB = 0x8  // Output Compare Register2 Update Busy
 | 
			
		||||
	ASSR_OCR2BUB = 0x4  // Output Compare Register 2 Update Busy
 | 
			
		||||
	ASSR_TCR2AUB = 0x2  // Timer/Counter Control Register2 Update Busy
 | 
			
		||||
	ASSR_TCR2BUB = 0x1  // Timer/Counter Control Register2 Update Busy
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
// Bitfields for BOOT_LOAD: Bootloader
 | 
			
		||||
const (
 | 
			
		||||
	// SPMCSR: Store Program Memory Control Register
 | 
			
		||||
	SPMCSR_SPMIE  = 0x80 // SPM Interrupt Enable
 | 
			
		||||
	SPMCSR_RWWSB  = 0x40 // Read While Write Section Busy
 | 
			
		||||
	SPMCSR_SIGRD  = 0x20 // Signature Row Read
 | 
			
		||||
	SPMCSR_RWWSRE = 0x10 // Read While Write section read enable
 | 
			
		||||
	SPMCSR_BLBSET = 0x8  // Boot Lock Bit Set
 | 
			
		||||
	SPMCSR_PGWRT  = 0x4  // Page Write
 | 
			
		||||
	SPMCSR_PGERS  = 0x2  // Page Erase
 | 
			
		||||
	SPMCSR_SPMEN  = 0x1  // Store Program Memory Enable
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
// Bitfields for EXINT: External Interrupts
 | 
			
		||||
const (
 | 
			
		||||
	// EICRA: External Interrupt Control Register A
 | 
			
		||||
	EICRA_ISC2 = 0x30 // External Interrupt Sense Control Bit
 | 
			
		||||
	EICRA_ISC1 = 0xc  // External Interrupt Sense Control Bit
 | 
			
		||||
	EICRA_ISC0 = 0x3  // External Interrupt Sense Control Bit
 | 
			
		||||
 | 
			
		||||
	// EIMSK: External Interrupt Mask Register
 | 
			
		||||
	EIMSK_INT = 0x7 // External Interrupt Request 2 Enable
 | 
			
		||||
 | 
			
		||||
	// EIFR: External Interrupt Flag Register
 | 
			
		||||
	EIFR_INTF = 0x7 // External Interrupt Flags
 | 
			
		||||
 | 
			
		||||
	// PCMSK3: Pin Change Mask Register 3
 | 
			
		||||
	PCMSK3_PCINT = 0xff // Pin Change Enable Masks
 | 
			
		||||
 | 
			
		||||
	// PCMSK2: Pin Change Mask Register 2
 | 
			
		||||
	PCMSK2_PCINT = 0xff // Pin Change Enable Masks
 | 
			
		||||
 | 
			
		||||
	// PCMSK1: Pin Change Mask Register 1
 | 
			
		||||
	PCMSK1_PCINT = 0xff // Pin Change Enable Masks
 | 
			
		||||
 | 
			
		||||
	// PCMSK0: Pin Change Mask Register 0
 | 
			
		||||
	PCMSK0_PCINT = 0xff // Pin Change Enable Masks
 | 
			
		||||
 | 
			
		||||
	// PCIFR: Pin Change Interrupt Flag Register
 | 
			
		||||
	PCIFR_PCIF = 0xf // Pin Change Interrupt Flags
 | 
			
		||||
 | 
			
		||||
	// PCICR: Pin Change Interrupt Control Register
 | 
			
		||||
	PCICR_PCIE = 0xf // Pin Change Interrupt Enables
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
// Bitfields for ADC: Analog-to-Digital Converter
 | 
			
		||||
const (
 | 
			
		||||
	// ADMUX: The ADC multiplexer Selection Register
 | 
			
		||||
	ADMUX_REFS  = 0xc0 // Reference Selection Bits
 | 
			
		||||
	ADMUX_ADLAR = 0x20 // Left Adjust Result
 | 
			
		||||
	ADMUX_MUX   = 0x1f // Analog Channel and Gain Selection Bits
 | 
			
		||||
 | 
			
		||||
	// ADCL: ADC Data Register Bytes
 | 
			
		||||
 | 
			
		||||
	// ADCH: ADC Data Register Bytes
 | 
			
		||||
	ADC_ADC = 0xffff // ADC Data bits
 | 
			
		||||
 | 
			
		||||
	// ADCSRA: The ADC Control and Status register A
 | 
			
		||||
	ADCSRA_ADEN  = 0x80 // ADC Enable
 | 
			
		||||
	ADCSRA_ADSC  = 0x40 // ADC Start Conversion
 | 
			
		||||
	ADCSRA_ADATE = 0x20 // ADC Auto Trigger Enable
 | 
			
		||||
	ADCSRA_ADIF  = 0x10 // ADC Interrupt Flag
 | 
			
		||||
	ADCSRA_ADIE  = 0x8  // ADC Interrupt Enable
 | 
			
		||||
	ADCSRA_ADPS  = 0x7  // ADC Prescaler Select Bits
 | 
			
		||||
 | 
			
		||||
	// DIDR0: Digital Input Disable Register
 | 
			
		||||
	DIDR0_ADC7D = 0x80
 | 
			
		||||
	DIDR0_ADC6D = 0x40
 | 
			
		||||
	DIDR0_ADC5D = 0x20
 | 
			
		||||
	DIDR0_ADC4D = 0x10
 | 
			
		||||
	DIDR0_ADC3D = 0x8
 | 
			
		||||
	DIDR0_ADC2D = 0x4
 | 
			
		||||
	DIDR0_ADC1D = 0x2
 | 
			
		||||
	DIDR0_ADC0D = 0x1
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
// Bitfields for EEPROM: EEPROM
 | 
			
		||||
const (
 | 
			
		||||
	// EEARL: EEPROM Address Register Low Bytes
 | 
			
		||||
 | 
			
		||||
	// EEARH: EEPROM Address Register Low Bytes
 | 
			
		||||
	EEAR_EEAR = 0xfff // EEPROM Address bits
 | 
			
		||||
 | 
			
		||||
	// EEDR: EEPROM Data Register
 | 
			
		||||
	EEDR_EEDR = 0xff // EEPROM Data bits
 | 
			
		||||
 | 
			
		||||
	// EECR: EEPROM Control Register
 | 
			
		||||
	EECR_EEPM  = 0x30 // EEPROM Programming Mode Bits
 | 
			
		||||
	EECR_EERIE = 0x8  // EEPROM Ready Interrupt Enable
 | 
			
		||||
	EECR_EEMPE = 0x4  // EEPROM Master Write Enable
 | 
			
		||||
	EECR_EEPE  = 0x2  // EEPROM Write Enable
 | 
			
		||||
	EECR_EERE  = 0x1  // EEPROM Read Enable
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
// Bitfields for TWI: Two Wire Serial Interface
 | 
			
		||||
const (
 | 
			
		||||
	// TWAMR: TWI (Slave) Address Mask Register
 | 
			
		||||
	TWAMR_TWAM = 0xfe
 | 
			
		||||
 | 
			
		||||
	// TWBR: TWI Bit Rate register
 | 
			
		||||
	TWBR_TWBR = 0xff // TWI Bit Rate bits
 | 
			
		||||
 | 
			
		||||
	// TWCR: TWI Control Register
 | 
			
		||||
	TWCR_TWINT = 0x80 // TWI Interrupt Flag
 | 
			
		||||
	TWCR_TWEA  = 0x40 // TWI Enable Acknowledge Bit
 | 
			
		||||
	TWCR_TWSTA = 0x20 // TWI Start Condition Bit
 | 
			
		||||
	TWCR_TWSTO = 0x10 // TWI Stop Condition Bit
 | 
			
		||||
	TWCR_TWWC  = 0x8  // TWI Write Collition Flag
 | 
			
		||||
	TWCR_TWEN  = 0x4  // TWI Enable Bit
 | 
			
		||||
	TWCR_TWIE  = 0x1  // TWI Interrupt Enable
 | 
			
		||||
 | 
			
		||||
	// TWSR: TWI Status Register
 | 
			
		||||
	TWSR_TWS  = 0xf8 // TWI Status
 | 
			
		||||
	TWSR_TWPS = 0x3  // TWI Prescaler
 | 
			
		||||
 | 
			
		||||
	// TWDR: TWI Data register
 | 
			
		||||
	TWDR_TWD = 0xff // TWI Data bits
 | 
			
		||||
 | 
			
		||||
	// TWAR: TWI (Slave) Address register
 | 
			
		||||
	TWAR_TWA   = 0xfe // TWI (Slave) Address register Bits
 | 
			
		||||
	TWAR_TWGCE = 0x1  // TWI General Call Recognition Enable Bit
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
// Bitfields for SPI: Serial Peripheral Interface
 | 
			
		||||
const (
 | 
			
		||||
	// SPDR: SPI Data Register
 | 
			
		||||
	SPDR_SPD = 0xff // SPI Data bits
 | 
			
		||||
 | 
			
		||||
	// SPSR: SPI Status Register
 | 
			
		||||
	SPSR_SPIF  = 0x80 // SPI Interrupt Flag
 | 
			
		||||
	SPSR_WCOL  = 0x40 // Write Collision Flag
 | 
			
		||||
	SPSR_SPI2X = 0x1  // Double SPI Speed Bit
 | 
			
		||||
 | 
			
		||||
	// SPCR: SPI Control Register
 | 
			
		||||
	SPCR_SPIE = 0x80 // SPI Interrupt Enable
 | 
			
		||||
	SPCR_SPE  = 0x40 // SPI Enable
 | 
			
		||||
	SPCR_DORD = 0x20 // Data Order
 | 
			
		||||
	SPCR_MSTR = 0x10 // Master/Slave Select
 | 
			
		||||
	SPCR_CPOL = 0x8  // Clock polarity
 | 
			
		||||
	SPCR_CPHA = 0x4  // Clock Phase
 | 
			
		||||
	SPCR_SPR  = 0x3  // SPI Clock Rate Selects
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
// Bitfields for WDT: Watchdog Timer
 | 
			
		||||
const (
 | 
			
		||||
	// WDTCSR: Watchdog Timer Control Register
 | 
			
		||||
	WDTCSR_WDIF = 0x80 // Watchdog Timeout Interrupt Flag
 | 
			
		||||
	WDTCSR_WDIE = 0x40 // Watchdog Timeout Interrupt Enable
 | 
			
		||||
	WDTCSR_WDP  = 0x27 // Watchdog Timer Prescaler Bits
 | 
			
		||||
	WDTCSR_WDCE = 0x10 // Watchdog Change Enable
 | 
			
		||||
	WDTCSR_WDE  = 0x8  // Watch Dog Enable
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
// Bitfields for CPU: CPU Registers
 | 
			
		||||
const (
 | 
			
		||||
	// SREG: Status Register
 | 
			
		||||
	SREG_I = 0x80 // Global Interrupt Enable
 | 
			
		||||
	SREG_T = 0x40 // Bit Copy Storage
 | 
			
		||||
	SREG_H = 0x20 // Half Carry Flag
 | 
			
		||||
	SREG_S = 0x10 // Sign Bit
 | 
			
		||||
	SREG_V = 0x8  // Two's Complement Overflow Flag
 | 
			
		||||
	SREG_N = 0x4  // Negative Flag
 | 
			
		||||
	SREG_Z = 0x2  // Zero Flag
 | 
			
		||||
	SREG_C = 0x1  // Carry Flag
 | 
			
		||||
 | 
			
		||||
	// OSCCAL: Oscillator Calibration Value
 | 
			
		||||
	OSCCAL_OSCCAL = 0xff // Oscillator Calibration
 | 
			
		||||
 | 
			
		||||
	// CLKPR
 | 
			
		||||
	CLKPR_CLKPCE = 0x80
 | 
			
		||||
	CLKPR_CLKPS  = 0xf
 | 
			
		||||
 | 
			
		||||
	// SMCR: Sleep Mode Control Register
 | 
			
		||||
	SMCR_SM = 0xe // Sleep Mode Select bits
 | 
			
		||||
	SMCR_SE = 0x1 // Sleep Enable
 | 
			
		||||
 | 
			
		||||
	// GPIOR2: General Purpose IO Register 2
 | 
			
		||||
	GPIOR2_GPIOR = 0xff // General Purpose IO Register 2 bis
 | 
			
		||||
 | 
			
		||||
	// GPIOR1: General Purpose IO Register 1
 | 
			
		||||
	GPIOR1_GPIOR = 0xff // General Purpose IO Register 1 bis
 | 
			
		||||
 | 
			
		||||
	// GPIOR0: General Purpose IO Register 0
 | 
			
		||||
	GPIOR0_GPIOR07 = 0x80 // General Purpose IO Register 0 bit 7
 | 
			
		||||
	GPIOR0_GPIOR06 = 0x40 // General Purpose IO Register 0 bit 6
 | 
			
		||||
	GPIOR0_GPIOR05 = 0x20 // General Purpose IO Register 0 bit 5
 | 
			
		||||
	GPIOR0_GPIOR04 = 0x10 // General Purpose IO Register 0 bit 4
 | 
			
		||||
	GPIOR0_GPIOR03 = 0x8  // General Purpose IO Register 0 bit 3
 | 
			
		||||
	GPIOR0_GPIOR02 = 0x4  // General Purpose IO Register 0 bit 2
 | 
			
		||||
	GPIOR0_GPIOR01 = 0x2  // General Purpose IO Register 0 bit 1
 | 
			
		||||
	GPIOR0_GPIOR00 = 0x1  // General Purpose IO Register 0 bit 0
 | 
			
		||||
 | 
			
		||||
	// PRR0: Power Reduction Register0
 | 
			
		||||
	PRR0_PRTWI    = 0x80 // Power Reduction TWI
 | 
			
		||||
	PRR0_PRTIM2   = 0x40 // Power Reduction Timer/Counter2
 | 
			
		||||
	PRR0_PRTIM0   = 0x20 // Power Reduction Timer/Counter0
 | 
			
		||||
	PRR0_PRUSART1 = 0x10 // Power Reduction USART1
 | 
			
		||||
	PRR0_PRTIM1   = 0x8  // Power Reduction Timer/Counter1
 | 
			
		||||
	PRR0_PRSPI    = 0x4  // Power Reduction Serial Peripheral Interface
 | 
			
		||||
	PRR0_PRUSART0 = 0x2  // Power Reduction USART0
 | 
			
		||||
	PRR0_PRADC    = 0x1  // Power Reduction ADC
 | 
			
		||||
 | 
			
		||||
	// PRR1: Power Reduction Register1
 | 
			
		||||
	PRR1_PRTIM3 = 0x1 // Power Reduction Timer/Counter3
 | 
			
		||||
)
 | 
			
		||||
							
								
								
									
										6
									
								
								src/device/avr/atmega1284p.ld
									
										
									
									
									
										Обычный файл
									
								
							
							
						
						
									
										6
									
								
								src/device/avr/atmega1284p.ld
									
										
									
									
									
										Обычный файл
									
								
							| 
						 | 
				
			
			@ -0,0 +1,6 @@
 | 
			
		|||
/* Automatically generated file. DO NOT EDIT. */
 | 
			
		||||
/* Generated by gen-device.py from ATmega1284P.atdf, see http://packs.download.atmel.com/ */
 | 
			
		||||
 | 
			
		||||
__flash_size = 0x20000;
 | 
			
		||||
__ram_size   = 0x4000;
 | 
			
		||||
__num_isrs   = 35;
 | 
			
		||||
							
								
								
									
										1793
									
								
								src/device/avr/atmega1284rfr2.go
									
										
									
									
									
										Обычный файл
									
								
							
							
						
						
									
										1793
									
								
								src/device/avr/atmega1284rfr2.go
									
										
									
									
									
										Обычный файл
									
								
							
										
											
												Различия файлов не показаны, т.к. их слишком много
												Показать различия
											
										
									
								
							
							
								
								
									
										6
									
								
								src/device/avr/atmega1284rfr2.ld
									
										
									
									
									
										Обычный файл
									
								
							
							
						
						
									
										6
									
								
								src/device/avr/atmega1284rfr2.ld
									
										
									
									
									
										Обычный файл
									
								
							| 
						 | 
				
			
			@ -0,0 +1,6 @@
 | 
			
		|||
/* Automatically generated file. DO NOT EDIT. */
 | 
			
		||||
/* Generated by gen-device.py from ATmega1284RFR2.atdf, see http://packs.download.atmel.com/ */
 | 
			
		||||
 | 
			
		||||
__flash_size = 0x20000;
 | 
			
		||||
__ram_size   = 0x4000;
 | 
			
		||||
__num_isrs   = 71;
 | 
			
		||||
							
								
								
									
										666
									
								
								src/device/avr/atmega128a.go
									
										
									
									
									
										Обычный файл
									
								
							
							
						
						
									
										666
									
								
								src/device/avr/atmega128a.go
									
										
									
									
									
										Обычный файл
									
								
							| 
						 | 
				
			
			@ -0,0 +1,666 @@
 | 
			
		|||
// Automatically generated file. DO NOT EDIT.
 | 
			
		||||
// Generated by gen-device.py from ATmega128A.atdf, see http://packs.download.atmel.com/
 | 
			
		||||
 | 
			
		||||
// +build avr,atmega128a
 | 
			
		||||
 | 
			
		||||
// Device information for the ATmega128A.
 | 
			
		||||
//
 | 
			
		||||
package avr
 | 
			
		||||
 | 
			
		||||
// Magic type name for the compiler.
 | 
			
		||||
type __reg uint8
 | 
			
		||||
 | 
			
		||||
// Export this magic type name.
 | 
			
		||||
type RegValue = __reg
 | 
			
		||||
 | 
			
		||||
// Some information about this device.
 | 
			
		||||
const (
 | 
			
		||||
	DEVICE = "ATmega128A"
 | 
			
		||||
	ARCH   = "AVR8"
 | 
			
		||||
	FAMILY = "megaAVR"
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
// Interrupts
 | 
			
		||||
const (
 | 
			
		||||
	IRQ_RESET        = 0  // External Pin, Power-on Reset, Brown-out Reset, Watchdog Reset and JTAG AVR Reset
 | 
			
		||||
	IRQ_INT0         = 1  // External Interrupt Request 0
 | 
			
		||||
	IRQ_INT1         = 2  // External Interrupt Request 1
 | 
			
		||||
	IRQ_INT2         = 3  // External Interrupt Request 2
 | 
			
		||||
	IRQ_INT3         = 4  // External Interrupt Request 3
 | 
			
		||||
	IRQ_INT4         = 5  // External Interrupt Request 4
 | 
			
		||||
	IRQ_INT5         = 6  // External Interrupt Request 5
 | 
			
		||||
	IRQ_INT6         = 7  // External Interrupt Request 6
 | 
			
		||||
	IRQ_INT7         = 8  // External Interrupt Request 7
 | 
			
		||||
	IRQ_TIMER2_COMP  = 9  // Timer/Counter2 Compare Match
 | 
			
		||||
	IRQ_TIMER2_OVF   = 10 // Timer/Counter2 Overflow
 | 
			
		||||
	IRQ_TIMER1_CAPT  = 11 // Timer/Counter1 Capture Event
 | 
			
		||||
	IRQ_TIMER1_COMPA = 12 // Timer/Counter1 Compare Match A
 | 
			
		||||
	IRQ_TIMER1_COMPB = 13 // Timer/Counter Compare Match B
 | 
			
		||||
	IRQ_TIMER1_OVF   = 14 // Timer/Counter1 Overflow
 | 
			
		||||
	IRQ_TIMER0_COMP  = 15 // Timer/Counter0 Compare Match
 | 
			
		||||
	IRQ_TIMER0_OVF   = 16 // Timer/Counter0 Overflow
 | 
			
		||||
	IRQ_SPI_STC      = 17 // SPI Serial Transfer Complete
 | 
			
		||||
	IRQ_USART0_RX    = 18 // USART0, Rx Complete
 | 
			
		||||
	IRQ_USART0_UDRE  = 19 // USART0 Data Register Empty
 | 
			
		||||
	IRQ_USART0_TX    = 20 // USART0, Tx Complete
 | 
			
		||||
	IRQ_ADC          = 21 // ADC Conversion Complete
 | 
			
		||||
	IRQ_EE_READY     = 22 // EEPROM Ready
 | 
			
		||||
	IRQ_ANALOG_COMP  = 23 // Analog Comparator
 | 
			
		||||
	IRQ_TIMER1_COMPC = 24 // Timer/Counter1 Compare Match C
 | 
			
		||||
	IRQ_TIMER3_CAPT  = 25 // Timer/Counter3 Capture Event
 | 
			
		||||
	IRQ_TIMER3_COMPA = 26 // Timer/Counter3 Compare Match A
 | 
			
		||||
	IRQ_TIMER3_COMPB = 27 // Timer/Counter3 Compare Match B
 | 
			
		||||
	IRQ_TIMER3_COMPC = 28 // Timer/Counter3 Compare Match C
 | 
			
		||||
	IRQ_TIMER3_OVF   = 29 // Timer/Counter3 Overflow
 | 
			
		||||
	IRQ_USART1_RX    = 30 // USART1, Rx Complete
 | 
			
		||||
	IRQ_USART1_UDRE  = 31 // USART1, Data Register Empty
 | 
			
		||||
	IRQ_USART1_TX    = 32 // USART1, Tx Complete
 | 
			
		||||
	IRQ_TWI          = 33 // 2-wire Serial Interface
 | 
			
		||||
	IRQ_SPM_READY    = 34 // Store Program Memory Read
 | 
			
		||||
	IRQ_max          = 34 // Highest interrupt number on this device.
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
// Peripherals
 | 
			
		||||
var (
 | 
			
		||||
	// Fuses
 | 
			
		||||
	FUSE = struct {
 | 
			
		||||
		EXTENDED __reg
 | 
			
		||||
		HIGH     __reg
 | 
			
		||||
		LOW      __reg
 | 
			
		||||
	}{
 | 
			
		||||
		EXTENDED: 0x2,
 | 
			
		||||
		HIGH:     0x1,
 | 
			
		||||
		LOW:      0x0,
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	// Lockbits
 | 
			
		||||
	LOCKBIT = struct {
 | 
			
		||||
		LOCKBIT __reg
 | 
			
		||||
	}{
 | 
			
		||||
		LOCKBIT: 0x0,
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	// Analog Comparator
 | 
			
		||||
	AC = struct {
 | 
			
		||||
		ACSR __reg
 | 
			
		||||
	}{
 | 
			
		||||
		ACSR: 0x28, // Analog Comparator Control And Status Register
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	// Serial Peripheral Interface
 | 
			
		||||
	SPI = struct {
 | 
			
		||||
		SPDR __reg
 | 
			
		||||
		SPSR __reg
 | 
			
		||||
		SPCR __reg
 | 
			
		||||
	}{
 | 
			
		||||
		SPDR: 0x2f, // SPI Data Register
 | 
			
		||||
		SPSR: 0x2e, // SPI Status Register
 | 
			
		||||
		SPCR: 0x2d, // SPI Control Register
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	// Two Wire Serial Interface
 | 
			
		||||
	TWI = struct {
 | 
			
		||||
		TWBR __reg
 | 
			
		||||
		TWCR __reg
 | 
			
		||||
		TWSR __reg
 | 
			
		||||
		TWDR __reg
 | 
			
		||||
		TWAR __reg
 | 
			
		||||
	}{
 | 
			
		||||
		TWBR: 0x70, // TWI Bit Rate register
 | 
			
		||||
		TWCR: 0x74, // TWI Control Register
 | 
			
		||||
		TWSR: 0x71, // TWI Status Register
 | 
			
		||||
		TWDR: 0x73, // TWI Data register
 | 
			
		||||
		TWAR: 0x72, // TWI (Slave) Address register
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	// USART
 | 
			
		||||
	USART = struct {
 | 
			
		||||
		UDR0   __reg
 | 
			
		||||
		UCSR0A __reg
 | 
			
		||||
		UCSR0B __reg
 | 
			
		||||
		UCSR0C __reg
 | 
			
		||||
		UBRR0H __reg
 | 
			
		||||
		UBRR0L __reg
 | 
			
		||||
		UDR1   __reg
 | 
			
		||||
		UCSR1A __reg
 | 
			
		||||
		UCSR1B __reg
 | 
			
		||||
		UCSR1C __reg
 | 
			
		||||
		UBRR1H __reg
 | 
			
		||||
		UBRR1L __reg
 | 
			
		||||
	}{
 | 
			
		||||
		UDR0:   0x2c, // USART I/O Data Register
 | 
			
		||||
		UCSR0A: 0x2b, // USART Control and Status Register A
 | 
			
		||||
		UCSR0B: 0x2a, // USART Control and Status Register B
 | 
			
		||||
		UCSR0C: 0x95, // USART Control and Status Register C
 | 
			
		||||
		UBRR0H: 0x90, // USART Baud Rate Register Hight Byte
 | 
			
		||||
		UBRR0L: 0x29, // USART Baud Rate Register Low Byte
 | 
			
		||||
		UDR1:   0x9c, // USART I/O Data Register
 | 
			
		||||
		UCSR1A: 0x9b, // USART Control and Status Register A
 | 
			
		||||
		UCSR1B: 0x9a, // USART Control and Status Register B
 | 
			
		||||
		UCSR1C: 0x9d, // USART Control and Status Register C
 | 
			
		||||
		UBRR1H: 0x98, // USART Baud Rate Register Hight Byte
 | 
			
		||||
		UBRR1L: 0x99, // USART Baud Rate Register Low Byte
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	// CPU Registers
 | 
			
		||||
	CPU = struct {
 | 
			
		||||
		SREG   __reg
 | 
			
		||||
		SPL    __reg
 | 
			
		||||
		SPH    __reg
 | 
			
		||||
		MCUCR  __reg
 | 
			
		||||
		XMCRA  __reg
 | 
			
		||||
		XMCRB  __reg
 | 
			
		||||
		OSCCAL __reg
 | 
			
		||||
		XDIV   __reg
 | 
			
		||||
		RAMPZ  __reg
 | 
			
		||||
	}{
 | 
			
		||||
		SREG:   0x5f, // Status Register
 | 
			
		||||
		SPL:    0x5d, // Stack Pointer
 | 
			
		||||
		SPH:    0x5d, // Stack Pointer
 | 
			
		||||
		MCUCR:  0x55, // MCU Control Register
 | 
			
		||||
		XMCRA:  0x6d, // External Memory Control Register A
 | 
			
		||||
		XMCRB:  0x6c, // External Memory Control Register B
 | 
			
		||||
		OSCCAL: 0x6f, // Oscillator Calibration Value
 | 
			
		||||
		XDIV:   0x5c, // XTAL Divide Control Register
 | 
			
		||||
		RAMPZ:  0x5b, // RAM Page Z Select Register
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	// Bootloader
 | 
			
		||||
	BOOT_LOAD = struct {
 | 
			
		||||
		SPMCSR __reg
 | 
			
		||||
	}{
 | 
			
		||||
		SPMCSR: 0x68, // Store Program Memory Control Register
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	// JTAG Interface
 | 
			
		||||
	JTAG = struct {
 | 
			
		||||
		OCDR __reg
 | 
			
		||||
	}{
 | 
			
		||||
		OCDR: 0x42, // On-Chip Debug Related Register in I/O Memory
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	// Other Registers
 | 
			
		||||
	MISC = struct {
 | 
			
		||||
	}{}
 | 
			
		||||
 | 
			
		||||
	// External Interrupts
 | 
			
		||||
	EXINT = struct {
 | 
			
		||||
		EICRA __reg
 | 
			
		||||
		EICRB __reg
 | 
			
		||||
		EIMSK __reg
 | 
			
		||||
		EIFR  __reg
 | 
			
		||||
	}{
 | 
			
		||||
		EICRA: 0x6a, // External Interrupt Control Register A
 | 
			
		||||
		EICRB: 0x5a, // External Interrupt Control Register B
 | 
			
		||||
		EIMSK: 0x59, // External Interrupt Mask Register
 | 
			
		||||
		EIFR:  0x58, // External Interrupt Flag Register
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	// EEPROM
 | 
			
		||||
	EEPROM = struct {
 | 
			
		||||
		EEARL __reg
 | 
			
		||||
		EEARH __reg
 | 
			
		||||
		EEDR  __reg
 | 
			
		||||
		EECR  __reg
 | 
			
		||||
	}{
 | 
			
		||||
		EEARL: 0x3e, // EEPROM Read/Write Access  Bytes
 | 
			
		||||
		EEARH: 0x3e, // EEPROM Read/Write Access  Bytes
 | 
			
		||||
		EEDR:  0x3d, // EEPROM Data Register
 | 
			
		||||
		EECR:  0x3c, // EEPROM Control Register
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	// I/O Port
 | 
			
		||||
	PORT = struct {
 | 
			
		||||
		PORTA __reg
 | 
			
		||||
		DDRA  __reg
 | 
			
		||||
		PINA  __reg
 | 
			
		||||
		PORTB __reg
 | 
			
		||||
		DDRB  __reg
 | 
			
		||||
		PINB  __reg
 | 
			
		||||
		PORTC __reg
 | 
			
		||||
		DDRC  __reg
 | 
			
		||||
		PINC  __reg
 | 
			
		||||
		PORTD __reg
 | 
			
		||||
		DDRD  __reg
 | 
			
		||||
		PIND  __reg
 | 
			
		||||
		PORTE __reg
 | 
			
		||||
		DDRE  __reg
 | 
			
		||||
		PINE  __reg
 | 
			
		||||
		PORTF __reg
 | 
			
		||||
		DDRF  __reg
 | 
			
		||||
		PINF  __reg
 | 
			
		||||
		PORTG __reg
 | 
			
		||||
		DDRG  __reg
 | 
			
		||||
		PING  __reg
 | 
			
		||||
	}{
 | 
			
		||||
		PORTA: 0x3b, // Port A Data Register
 | 
			
		||||
		DDRA:  0x3a, // Port A Data Direction Register
 | 
			
		||||
		PINA:  0x39, // Port A Input Pins
 | 
			
		||||
		PORTB: 0x38, // Port B Data Register
 | 
			
		||||
		DDRB:  0x37, // Port B Data Direction Register
 | 
			
		||||
		PINB:  0x36, // Port B Input Pins
 | 
			
		||||
		PORTC: 0x35, // Port C Data Register
 | 
			
		||||
		DDRC:  0x34, // Port C Data Direction Register
 | 
			
		||||
		PINC:  0x33, // Port C Input Pins
 | 
			
		||||
		PORTD: 0x32, // Port D Data Register
 | 
			
		||||
		DDRD:  0x31, // Port D Data Direction Register
 | 
			
		||||
		PIND:  0x30, // Port D Input Pins
 | 
			
		||||
		PORTE: 0x23, // Data Register, Port E
 | 
			
		||||
		DDRE:  0x22, // Data Direction Register, Port E
 | 
			
		||||
		PINE:  0x21, // Input Pins, Port E
 | 
			
		||||
		PORTF: 0x62, // Data Register, Port F
 | 
			
		||||
		DDRF:  0x61, // Data Direction Register, Port F
 | 
			
		||||
		PINF:  0x20, // Input Pins, Port F
 | 
			
		||||
		PORTG: 0x65, // Data Register, Port G
 | 
			
		||||
		DDRG:  0x64, // Data Direction Register, Port G
 | 
			
		||||
		PING:  0x63, // Input Pins, Port G
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	// Timer/Counter, 8-bit Async
 | 
			
		||||
	TC8_ASYNC = struct {
 | 
			
		||||
		TCCR0 __reg
 | 
			
		||||
		TCNT0 __reg
 | 
			
		||||
		OCR0  __reg
 | 
			
		||||
		ASSR  __reg
 | 
			
		||||
	}{
 | 
			
		||||
		TCCR0: 0x53, // Timer/Counter Control Register
 | 
			
		||||
		TCNT0: 0x52, // Timer/Counter Register
 | 
			
		||||
		OCR0:  0x51, // Output Compare Register
 | 
			
		||||
		ASSR:  0x50, // Asynchronus Status Register
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	// Timer/Counter, 16-bit
 | 
			
		||||
	TC16 = struct {
 | 
			
		||||
		TCCR1A __reg
 | 
			
		||||
		TCCR1B __reg
 | 
			
		||||
		TCCR1C __reg
 | 
			
		||||
		TCNT1L __reg
 | 
			
		||||
		TCNT1H __reg
 | 
			
		||||
		OCR1AL __reg
 | 
			
		||||
		OCR1AH __reg
 | 
			
		||||
		OCR1BL __reg
 | 
			
		||||
		OCR1BH __reg
 | 
			
		||||
		OCR1CL __reg
 | 
			
		||||
		OCR1CH __reg
 | 
			
		||||
		ICR1L  __reg
 | 
			
		||||
		ICR1H  __reg
 | 
			
		||||
		TCCR3A __reg
 | 
			
		||||
		TCCR3B __reg
 | 
			
		||||
		TCCR3C __reg
 | 
			
		||||
		TCNT3L __reg
 | 
			
		||||
		TCNT3H __reg
 | 
			
		||||
		OCR3AL __reg
 | 
			
		||||
		OCR3AH __reg
 | 
			
		||||
		OCR3BL __reg
 | 
			
		||||
		OCR3BH __reg
 | 
			
		||||
		OCR3CL __reg
 | 
			
		||||
		OCR3CH __reg
 | 
			
		||||
		ICR3L  __reg
 | 
			
		||||
		ICR3H  __reg
 | 
			
		||||
	}{
 | 
			
		||||
		TCCR1A: 0x4f, // Timer/Counter1 Control Register A
 | 
			
		||||
		TCCR1B: 0x4e, // Timer/Counter1 Control Register B
 | 
			
		||||
		TCCR1C: 0x7a, // Timer/Counter1 Control Register C
 | 
			
		||||
		TCNT1L: 0x4c, // Timer/Counter1  Bytes
 | 
			
		||||
		TCNT1H: 0x4c, // Timer/Counter1  Bytes
 | 
			
		||||
		OCR1AL: 0x4a, // Timer/Counter1 Output Compare Register  Bytes
 | 
			
		||||
		OCR1AH: 0x4a, // Timer/Counter1 Output Compare Register  Bytes
 | 
			
		||||
		OCR1BL: 0x48, // Timer/Counter1 Output Compare Register  Bytes
 | 
			
		||||
		OCR1BH: 0x48, // Timer/Counter1 Output Compare Register  Bytes
 | 
			
		||||
		OCR1CL: 0x78, // Timer/Counter1 Output Compare Register  Bytes
 | 
			
		||||
		OCR1CH: 0x78, // Timer/Counter1 Output Compare Register  Bytes
 | 
			
		||||
		ICR1L:  0x46, // Timer/Counter1 Input Capture Register  Bytes
 | 
			
		||||
		ICR1H:  0x46, // Timer/Counter1 Input Capture Register  Bytes
 | 
			
		||||
		TCCR3A: 0x8b, // Timer/Counter3 Control Register A
 | 
			
		||||
		TCCR3B: 0x8a, // Timer/Counter3 Control Register B
 | 
			
		||||
		TCCR3C: 0x8c, // Timer/Counter3 Control Register C
 | 
			
		||||
		TCNT3L: 0x88, // Timer/Counter3  Bytes
 | 
			
		||||
		TCNT3H: 0x88, // Timer/Counter3  Bytes
 | 
			
		||||
		OCR3AL: 0x86, // Timer/Counter3 Output Compare Register A  Bytes
 | 
			
		||||
		OCR3AH: 0x86, // Timer/Counter3 Output Compare Register A  Bytes
 | 
			
		||||
		OCR3BL: 0x84, // Timer/Counter3 Output Compare Register B  Bytes
 | 
			
		||||
		OCR3BH: 0x84, // Timer/Counter3 Output Compare Register B  Bytes
 | 
			
		||||
		OCR3CL: 0x82, // Timer/Counter3 Output compare Register C  Bytes
 | 
			
		||||
		OCR3CH: 0x82, // Timer/Counter3 Output compare Register C  Bytes
 | 
			
		||||
		ICR3L:  0x80, // Timer/Counter3 Input Capture Register  Bytes
 | 
			
		||||
		ICR3H:  0x80, // Timer/Counter3 Input Capture Register  Bytes
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	// Timer/Counter, 8-bit
 | 
			
		||||
	TC8 = struct {
 | 
			
		||||
		TCCR2 __reg
 | 
			
		||||
		TCNT2 __reg
 | 
			
		||||
		OCR2  __reg
 | 
			
		||||
	}{
 | 
			
		||||
		TCCR2: 0x45, // Timer/Counter Control Register
 | 
			
		||||
		TCNT2: 0x44, // Timer/Counter Register
 | 
			
		||||
		OCR2:  0x43, // Output Compare Register
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	// Watchdog Timer
 | 
			
		||||
	WDT = struct {
 | 
			
		||||
		WDTCR __reg
 | 
			
		||||
	}{
 | 
			
		||||
		WDTCR: 0x41, // Watchdog Timer Control Register
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	// Analog-to-Digital Converter
 | 
			
		||||
	ADC = struct {
 | 
			
		||||
		ADMUX  __reg
 | 
			
		||||
		ADCSRA __reg
 | 
			
		||||
		ADCL   __reg
 | 
			
		||||
		ADCH   __reg
 | 
			
		||||
	}{
 | 
			
		||||
		ADMUX:  0x27, // The ADC multiplexer Selection Register
 | 
			
		||||
		ADCSRA: 0x26, // The ADC Control and Status register
 | 
			
		||||
		ADCL:   0x24, // ADC Data Register  Bytes
 | 
			
		||||
		ADCH:   0x24, // ADC Data Register  Bytes
 | 
			
		||||
	}
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
// Bitfields for FUSE: Fuses
 | 
			
		||||
const (
 | 
			
		||||
	// EXTENDED
 | 
			
		||||
	EXTENDED_M103C = 0x2 // ATmega103 Compatibility Mode
 | 
			
		||||
	EXTENDED_WDTON = 0x1 // Watchdog Timer always on
 | 
			
		||||
 | 
			
		||||
	// HIGH
 | 
			
		||||
	HIGH_OCDEN   = 0x80 // On-Chip Debug Enabled
 | 
			
		||||
	HIGH_JTAGEN  = 0x40 // JTAG Interface Enabled
 | 
			
		||||
	HIGH_SPIEN   = 0x20 // Serial program downloading (SPI) enabled
 | 
			
		||||
	HIGH_EESAVE  = 0x8  // Preserve EEPROM through the Chip Erase cycle
 | 
			
		||||
	HIGH_BOOTSZ  = 0x6  // Select Boot Size
 | 
			
		||||
	HIGH_BOOTRST = 0x1  // Boot Reset vector Enabled
 | 
			
		||||
	HIGH_CKOPT   = 0x10 // CKOPT fuse (operation dependent of CKSEL fuses)
 | 
			
		||||
 | 
			
		||||
	// LOW
 | 
			
		||||
	LOW_BODLEVEL  = 0x80 // Brownout detector trigger level
 | 
			
		||||
	LOW_BODEN     = 0x40 // Brown-out detection enabled
 | 
			
		||||
	LOW_SUT_CKSEL = 0x3f // Select Clock Source
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
// Bitfields for LOCKBIT: Lockbits
 | 
			
		||||
const (
 | 
			
		||||
	// LOCKBIT
 | 
			
		||||
	LOCKBIT_LB   = 0x3  // Memory Lock
 | 
			
		||||
	LOCKBIT_BLB0 = 0xc  // Boot Loader Protection Mode
 | 
			
		||||
	LOCKBIT_BLB1 = 0x30 // Boot Loader Protection Mode
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
// Bitfields for AC: Analog Comparator
 | 
			
		||||
const (
 | 
			
		||||
	// ACSR: Analog Comparator Control And Status Register
 | 
			
		||||
	ACSR_ACD  = 0x80 // Analog Comparator Disable
 | 
			
		||||
	ACSR_ACBG = 0x40 // Analog Comparator Bandgap Select
 | 
			
		||||
	ACSR_ACO  = 0x20 // Analog Compare Output
 | 
			
		||||
	ACSR_ACI  = 0x10 // Analog Comparator Interrupt Flag
 | 
			
		||||
	ACSR_ACIE = 0x8  // Analog Comparator Interrupt Enable
 | 
			
		||||
	ACSR_ACIC = 0x4  // Analog Comparator Input Capture Enable
 | 
			
		||||
	ACSR_ACIS = 0x3  // Analog Comparator Interrupt Mode Select bits
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
// Bitfields for SPI: Serial Peripheral Interface
 | 
			
		||||
const (
 | 
			
		||||
	// SPSR: SPI Status Register
 | 
			
		||||
	SPSR_SPIF  = 0x80 // SPI Interrupt Flag
 | 
			
		||||
	SPSR_WCOL  = 0x40 // Write Collision Flag
 | 
			
		||||
	SPSR_SPI2X = 0x1  // Double SPI Speed Bit
 | 
			
		||||
 | 
			
		||||
	// SPCR: SPI Control Register
 | 
			
		||||
	SPCR_SPIE = 0x80 // SPI Interrupt Enable
 | 
			
		||||
	SPCR_SPE  = 0x40 // SPI Enable
 | 
			
		||||
	SPCR_DORD = 0x20 // Data Order
 | 
			
		||||
	SPCR_MSTR = 0x10 // Master/Slave Select
 | 
			
		||||
	SPCR_CPOL = 0x8  // Clock polarity
 | 
			
		||||
	SPCR_CPHA = 0x4  // Clock Phase
 | 
			
		||||
	SPCR_SPR  = 0x3  // SPI Clock Rate Selects
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
// Bitfields for TWI: Two Wire Serial Interface
 | 
			
		||||
const (
 | 
			
		||||
	// TWCR: TWI Control Register
 | 
			
		||||
	TWCR_TWINT = 0x80 // TWI Interrupt Flag
 | 
			
		||||
	TWCR_TWEA  = 0x40 // TWI Enable Acknowledge Bit
 | 
			
		||||
	TWCR_TWSTA = 0x20 // TWI Start Condition Bit
 | 
			
		||||
	TWCR_TWSTO = 0x10 // TWI Stop Condition Bit
 | 
			
		||||
	TWCR_TWWC  = 0x8  // TWI Write Collition Flag
 | 
			
		||||
	TWCR_TWEN  = 0x4  // TWI Enable Bit
 | 
			
		||||
	TWCR_TWIE  = 0x1  // TWI Interrupt Enable
 | 
			
		||||
 | 
			
		||||
	// TWSR: TWI Status Register
 | 
			
		||||
	TWSR_TWS  = 0xf8 // TWI Status
 | 
			
		||||
	TWSR_TWPS = 0x3  // TWI Prescaler
 | 
			
		||||
 | 
			
		||||
	// TWAR: TWI (Slave) Address register
 | 
			
		||||
	TWAR_TWA   = 0xfe // TWI (Slave) Address register Bits
 | 
			
		||||
	TWAR_TWGCE = 0x1  // TWI General Call Recognition Enable Bit
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
// Bitfields for USART: USART
 | 
			
		||||
const (
 | 
			
		||||
	// UCSR0A: USART Control and Status Register A
 | 
			
		||||
	UCSR0A_RXC0  = 0x80 // USART Receive Complete
 | 
			
		||||
	UCSR0A_TXC0  = 0x40 // USART Transmitt Complete
 | 
			
		||||
	UCSR0A_UDRE0 = 0x20 // USART Data Register Empty
 | 
			
		||||
	UCSR0A_FE0   = 0x10 // Framing Error
 | 
			
		||||
	UCSR0A_DOR0  = 0x8  // Data overRun
 | 
			
		||||
	UCSR0A_UPE0  = 0x4  // Parity Error
 | 
			
		||||
	UCSR0A_U2X0  = 0x2  // Double the USART transmission speed
 | 
			
		||||
	UCSR0A_MPCM0 = 0x1  // Multi-processor Communication Mode
 | 
			
		||||
 | 
			
		||||
	// UCSR0B: USART Control and Status Register B
 | 
			
		||||
	UCSR0B_RXCIE0 = 0x80 // RX Complete Interrupt Enable
 | 
			
		||||
	UCSR0B_TXCIE0 = 0x40 // TX Complete Interrupt Enable
 | 
			
		||||
	UCSR0B_UDRIE0 = 0x20 // USART Data register Empty Interrupt Enable
 | 
			
		||||
	UCSR0B_RXEN0  = 0x10 // Receiver Enable
 | 
			
		||||
	UCSR0B_TXEN0  = 0x8  // Transmitter Enable
 | 
			
		||||
	UCSR0B_UCSZ02 = 0x4  // Character Size
 | 
			
		||||
	UCSR0B_RXB80  = 0x2  // Receive Data Bit 8
 | 
			
		||||
	UCSR0B_TXB80  = 0x1  // Transmit Data Bit 8
 | 
			
		||||
 | 
			
		||||
	// UCSR0C: USART Control and Status Register C
 | 
			
		||||
	UCSR0C_UMSEL0 = 0x40 // USART Mode Select
 | 
			
		||||
	UCSR0C_UPM0   = 0x30 // Parity Mode Bits
 | 
			
		||||
	UCSR0C_USBS0  = 0x8  // Stop Bit Select
 | 
			
		||||
	UCSR0C_UCSZ0  = 0x6  // Character Size
 | 
			
		||||
	UCSR0C_UCPOL0 = 0x1  // Clock Polarity
 | 
			
		||||
 | 
			
		||||
	// UCSR1A: USART Control and Status Register A
 | 
			
		||||
	UCSR1A_RXC1  = 0x80 // USART Receive Complete
 | 
			
		||||
	UCSR1A_TXC1  = 0x40 // USART Transmitt Complete
 | 
			
		||||
	UCSR1A_UDRE1 = 0x20 // USART Data Register Empty
 | 
			
		||||
	UCSR1A_FE1   = 0x10 // Framing Error
 | 
			
		||||
	UCSR1A_DOR1  = 0x8  // Data overRun
 | 
			
		||||
	UCSR1A_UPE1  = 0x4  // Parity Error
 | 
			
		||||
	UCSR1A_U2X1  = 0x2  // Double the USART transmission speed
 | 
			
		||||
	UCSR1A_MPCM1 = 0x1  // Multi-processor Communication Mode
 | 
			
		||||
 | 
			
		||||
	// UCSR1B: USART Control and Status Register B
 | 
			
		||||
	UCSR1B_RXCIE1 = 0x80 // RX Complete Interrupt Enable
 | 
			
		||||
	UCSR1B_TXCIE1 = 0x40 // TX Complete Interrupt Enable
 | 
			
		||||
	UCSR1B_UDRIE1 = 0x20 // USART Data register Empty Interrupt Enable
 | 
			
		||||
	UCSR1B_RXEN1  = 0x10 // Receiver Enable
 | 
			
		||||
	UCSR1B_TXEN1  = 0x8  // Transmitter Enable
 | 
			
		||||
	UCSR1B_UCSZ12 = 0x4  // Character Size
 | 
			
		||||
	UCSR1B_RXB81  = 0x2  // Receive Data Bit 8
 | 
			
		||||
	UCSR1B_TXB81  = 0x1  // Transmit Data Bit 8
 | 
			
		||||
 | 
			
		||||
	// UCSR1C: USART Control and Status Register C
 | 
			
		||||
	UCSR1C_UMSEL1 = 0x40 // USART Mode Select
 | 
			
		||||
	UCSR1C_UPM1   = 0x30 // Parity Mode Bits
 | 
			
		||||
	UCSR1C_USBS1  = 0x8  // Stop Bit Select
 | 
			
		||||
	UCSR1C_UCSZ1  = 0x6  // Character Size
 | 
			
		||||
	UCSR1C_UCPOL1 = 0x1  // Clock Polarity
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
// Bitfields for CPU: CPU Registers
 | 
			
		||||
const (
 | 
			
		||||
	// SREG: Status Register
 | 
			
		||||
	SREG_I = 0x80 // Global Interrupt Enable
 | 
			
		||||
	SREG_T = 0x40 // Bit Copy Storage
 | 
			
		||||
	SREG_H = 0x20 // Half Carry Flag
 | 
			
		||||
	SREG_S = 0x10 // Sign Bit
 | 
			
		||||
	SREG_V = 0x8  // Two's Complement Overflow Flag
 | 
			
		||||
	SREG_N = 0x4  // Negative Flag
 | 
			
		||||
	SREG_Z = 0x2  // Zero Flag
 | 
			
		||||
	SREG_C = 0x1  // Carry Flag
 | 
			
		||||
 | 
			
		||||
	// MCUCR: MCU Control Register
 | 
			
		||||
	MCUCR_SRE   = 0x80 // External SRAM Enable
 | 
			
		||||
	MCUCR_SRW10 = 0x40 // External SRAM Wait State Select
 | 
			
		||||
	MCUCR_SE    = 0x20 // Sleep Enable
 | 
			
		||||
	MCUCR_SM    = 0x18 // Sleep Mode Select
 | 
			
		||||
	MCUCR_SM2   = 0x4  // Sleep Mode Select
 | 
			
		||||
	MCUCR_IVSEL = 0x2  // Interrupt Vector Select
 | 
			
		||||
	MCUCR_IVCE  = 0x1  // Interrupt Vector Change Enable
 | 
			
		||||
 | 
			
		||||
	// XMCRA: External Memory Control Register A
 | 
			
		||||
	XMCRA_SRL   = 0x70 // Wait state page limit
 | 
			
		||||
	XMCRA_SRW0  = 0xc  // Wait state select bit lower page
 | 
			
		||||
	XMCRA_SRW11 = 0x2  // Wait state select bit upper page
 | 
			
		||||
 | 
			
		||||
	// XMCRB: External Memory Control Register B
 | 
			
		||||
	XMCRB_XMBK = 0x80 // External Memory Bus Keeper Enable
 | 
			
		||||
	XMCRB_XMM  = 0x7  // External Memory High Mask
 | 
			
		||||
 | 
			
		||||
	// OSCCAL: Oscillator Calibration Value
 | 
			
		||||
	OSCCAL_OSCCAL = 0xff // Oscillator Calibration
 | 
			
		||||
 | 
			
		||||
	// RAMPZ: RAM Page Z Select Register
 | 
			
		||||
	RAMPZ_RAMPZ0 = 0x1 // RAM Page Z Select Register Bit 0
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
// Bitfields for BOOT_LOAD: Bootloader
 | 
			
		||||
const (
 | 
			
		||||
	// SPMCSR: Store Program Memory Control Register
 | 
			
		||||
	SPMCSR_SPMIE  = 0x80 // SPM Interrupt Enable
 | 
			
		||||
	SPMCSR_RWWSB  = 0x40 // Read While Write Section Busy
 | 
			
		||||
	SPMCSR_RWWSRE = 0x10 // Read While Write section read enable
 | 
			
		||||
	SPMCSR_BLBSET = 0x8  // Boot Lock Bit Set
 | 
			
		||||
	SPMCSR_PGWRT  = 0x4  // Page Write
 | 
			
		||||
	SPMCSR_PGERS  = 0x2  // Page Erase
 | 
			
		||||
	SPMCSR_SPMEN  = 0x1  // Store Program Memory Enable
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
// Bitfields for JTAG: JTAG Interface
 | 
			
		||||
const (
 | 
			
		||||
	// OCDR: On-Chip Debug Related Register in I/O Memory
 | 
			
		||||
	OCDR_OCDR = 0xff // On-Chip Debug Register Bits
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
// Bitfields for EXINT: External Interrupts
 | 
			
		||||
const (
 | 
			
		||||
	// EICRA: External Interrupt Control Register A
 | 
			
		||||
	EICRA_ISC3 = 0xc0 // External Interrupt Sense Control Bit
 | 
			
		||||
	EICRA_ISC2 = 0x30 // External Interrupt Sense Control Bit
 | 
			
		||||
	EICRA_ISC1 = 0xc  // External Interrupt Sense Control Bit
 | 
			
		||||
	EICRA_ISC0 = 0x3  // External Interrupt Sense Control Bit
 | 
			
		||||
 | 
			
		||||
	// EICRB: External Interrupt Control Register B
 | 
			
		||||
	EICRB_ISC7 = 0xc0 // External Interrupt 7-4 Sense Control Bit
 | 
			
		||||
	EICRB_ISC6 = 0x30 // External Interrupt 7-4 Sense Control Bit
 | 
			
		||||
	EICRB_ISC5 = 0xc  // External Interrupt 7-4 Sense Control Bit
 | 
			
		||||
	EICRB_ISC4 = 0x3  // External Interrupt 7-4 Sense Control Bit
 | 
			
		||||
 | 
			
		||||
	// EIMSK: External Interrupt Mask Register
 | 
			
		||||
	EIMSK_INT = 0xff // External Interrupt Request 7 Enable
 | 
			
		||||
 | 
			
		||||
	// EIFR: External Interrupt Flag Register
 | 
			
		||||
	EIFR_INTF = 0xff // External Interrupt Flags
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
// Bitfields for EEPROM: EEPROM
 | 
			
		||||
const (
 | 
			
		||||
	// EECR: EEPROM Control Register
 | 
			
		||||
	EECR_EERIE = 0x8 // EEPROM Ready Interrupt Enable
 | 
			
		||||
	EECR_EEMWE = 0x4 // EEPROM Master Write Enable
 | 
			
		||||
	EECR_EEWE  = 0x2 // EEPROM Write Enable
 | 
			
		||||
	EECR_EERE  = 0x1 // EEPROM Read Enable
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
// Bitfields for TC8_ASYNC: Timer/Counter, 8-bit Async
 | 
			
		||||
const (
 | 
			
		||||
	// TCCR0: Timer/Counter Control Register
 | 
			
		||||
	TCCR0_FOC0  = 0x80 // Force Output Compare
 | 
			
		||||
	TCCR0_WGM00 = 0x40 // Waveform Generation Mode 0
 | 
			
		||||
	TCCR0_COM0  = 0x30 // Compare Match Output Modes
 | 
			
		||||
	TCCR0_WGM01 = 0x8  // Waveform Generation Mode 1
 | 
			
		||||
	TCCR0_CS0   = 0x7  // Clock Selects
 | 
			
		||||
 | 
			
		||||
	// ASSR: Asynchronus Status Register
 | 
			
		||||
	ASSR_AS0    = 0x8 // Asynchronus Timer/Counter 0
 | 
			
		||||
	ASSR_TCN0UB = 0x4 // Timer/Counter0 Update Busy
 | 
			
		||||
	ASSR_OCR0UB = 0x2 // Output Compare register 0 Busy
 | 
			
		||||
	ASSR_TCR0UB = 0x1 // Timer/Counter Control Register 0 Update Busy
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
// Bitfields for TC16: Timer/Counter, 16-bit
 | 
			
		||||
const (
 | 
			
		||||
	// TCCR1A: Timer/Counter1 Control Register A
 | 
			
		||||
	TCCR1A_COM1A = 0xc0 // Compare Output Mode 1A, bits
 | 
			
		||||
	TCCR1A_COM1B = 0x30 // Compare Output Mode 1B, bits
 | 
			
		||||
	TCCR1A_COM1C = 0xc  // Compare Output Mode 1C, bits
 | 
			
		||||
	TCCR1A_WGM1  = 0x3  // Waveform Generation Mode Bits
 | 
			
		||||
 | 
			
		||||
	// TCCR1B: Timer/Counter1 Control Register B
 | 
			
		||||
	TCCR1B_ICNC1 = 0x80 // Input Capture 1 Noise Canceler
 | 
			
		||||
	TCCR1B_ICES1 = 0x40 // Input Capture 1 Edge Select
 | 
			
		||||
	TCCR1B_WGM1  = 0x18 // Waveform Generation Mode
 | 
			
		||||
	TCCR1B_CS1   = 0x7  // Clock Select1 bits
 | 
			
		||||
 | 
			
		||||
	// TCCR1C: Timer/Counter1 Control Register C
 | 
			
		||||
	TCCR1C_FOC1A = 0x80 // Force Output Compare for channel A
 | 
			
		||||
	TCCR1C_FOC1B = 0x40 // Force Output Compare for channel B
 | 
			
		||||
	TCCR1C_FOC1C = 0x20 // Force Output Compare for channel C
 | 
			
		||||
 | 
			
		||||
	// TCCR3A: Timer/Counter3 Control Register A
 | 
			
		||||
	TCCR3A_COM3A = 0xc0 // Compare Output Mode 3A, bits
 | 
			
		||||
	TCCR3A_COM3B = 0x30 // Compare Output Mode 3B, bits
 | 
			
		||||
	TCCR3A_COM3C = 0xc  // Compare Output Mode 3C, bits
 | 
			
		||||
	TCCR3A_WGM3  = 0x3  // Waveform Generation Mode Bits
 | 
			
		||||
 | 
			
		||||
	// TCCR3B: Timer/Counter3 Control Register B
 | 
			
		||||
	TCCR3B_ICNC3 = 0x80 // Input Capture 3  Noise Canceler
 | 
			
		||||
	TCCR3B_ICES3 = 0x40 // Input Capture 3 Edge Select
 | 
			
		||||
	TCCR3B_WGM3  = 0x18 // Waveform Generation Mode
 | 
			
		||||
	TCCR3B_CS3   = 0x7  // Clock Select3 bits
 | 
			
		||||
 | 
			
		||||
	// TCCR3C: Timer/Counter3 Control Register C
 | 
			
		||||
	TCCR3C_FOC3A = 0x80 // Force Output Compare for channel A
 | 
			
		||||
	TCCR3C_FOC3B = 0x40 // Force Output Compare for channel B
 | 
			
		||||
	TCCR3C_FOC3C = 0x20 // Force Output Compare for channel C
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
// Bitfields for TC8: Timer/Counter, 8-bit
 | 
			
		||||
const (
 | 
			
		||||
	// TCCR2: Timer/Counter Control Register
 | 
			
		||||
	TCCR2_FOC2  = 0x80 // Force Output Compare
 | 
			
		||||
	TCCR2_WGM20 = 0x40 // Wafeform Generation Mode
 | 
			
		||||
	TCCR2_COM2  = 0x30 // Compare Match Output Mode
 | 
			
		||||
	TCCR2_WGM21 = 0x8  // Waveform Generation Mode
 | 
			
		||||
	TCCR2_CS2   = 0x7  // Clock Select
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
// Bitfields for WDT: Watchdog Timer
 | 
			
		||||
const (
 | 
			
		||||
	// WDTCR: Watchdog Timer Control Register
 | 
			
		||||
	WDTCR_WDCE = 0x10 // Watchdog Change Enable
 | 
			
		||||
	WDTCR_WDE  = 0x8  // Watch Dog Enable
 | 
			
		||||
	WDTCR_WDP  = 0x7  // Watch Dog Timer Prescaler bits
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
// Bitfields for ADC: Analog-to-Digital Converter
 | 
			
		||||
const (
 | 
			
		||||
	// ADMUX: The ADC multiplexer Selection Register
 | 
			
		||||
	ADMUX_REFS  = 0xc0 // Reference Selection Bits
 | 
			
		||||
	ADMUX_ADLAR = 0x20 // Left Adjust Result
 | 
			
		||||
	ADMUX_MUX   = 0x1f // Analog Channel and Gain Selection Bits
 | 
			
		||||
 | 
			
		||||
	// ADCSRA: The ADC Control and Status register
 | 
			
		||||
	ADCSRA_ADEN = 0x80 // ADC Enable
 | 
			
		||||
	ADCSRA_ADSC = 0x40 // ADC Start Conversion
 | 
			
		||||
	ADCSRA_ADFR = 0x20 // ADC  Free Running Select
 | 
			
		||||
	ADCSRA_ADIF = 0x10 // ADC Interrupt Flag
 | 
			
		||||
	ADCSRA_ADIE = 0x8  // ADC Interrupt Enable
 | 
			
		||||
	ADCSRA_ADPS = 0x7  // ADC  Prescaler Select Bits
 | 
			
		||||
)
 | 
			
		||||
							
								
								
									
										6
									
								
								src/device/avr/atmega128a.ld
									
										
									
									
									
										Обычный файл
									
								
							
							
						
						
									
										6
									
								
								src/device/avr/atmega128a.ld
									
										
									
									
									
										Обычный файл
									
								
							| 
						 | 
				
			
			@ -0,0 +1,6 @@
 | 
			
		|||
/* Automatically generated file. DO NOT EDIT. */
 | 
			
		||||
/* Generated by gen-device.py from ATmega128A.atdf, see http://packs.download.atmel.com/ */
 | 
			
		||||
 | 
			
		||||
__flash_size = 0x20000;
 | 
			
		||||
__ram_size   = 0x1000;
 | 
			
		||||
__num_isrs   = 35;
 | 
			
		||||
							
								
								
									
										1585
									
								
								src/device/avr/atmega128rfa1.go
									
										
									
									
									
										Обычный файл
									
								
							
							
						
						
									
										1585
									
								
								src/device/avr/atmega128rfa1.go
									
										
									
									
									
										Обычный файл
									
								
							
										
											
												Различия файлов не показаны, т.к. их слишком много
												Показать различия
											
										
									
								
							
							
								
								
									
										6
									
								
								src/device/avr/atmega128rfa1.ld
									
										
									
									
									
										Обычный файл
									
								
							
							
						
						
									
										6
									
								
								src/device/avr/atmega128rfa1.ld
									
										
									
									
									
										Обычный файл
									
								
							| 
						 | 
				
			
			@ -0,0 +1,6 @@
 | 
			
		|||
/* Automatically generated file. DO NOT EDIT. */
 | 
			
		||||
/* Generated by gen-device.py from ATmega128RFA1.atdf, see http://packs.download.atmel.com/ */
 | 
			
		||||
 | 
			
		||||
__flash_size = 0x20000;
 | 
			
		||||
__ram_size   = 0x4000;
 | 
			
		||||
__num_isrs   = 72;
 | 
			
		||||
							
								
								
									
										1768
									
								
								src/device/avr/atmega128rfr2.go
									
										
									
									
									
										Обычный файл
									
								
							
							
						
						
									
										1768
									
								
								src/device/avr/atmega128rfr2.go
									
										
									
									
									
										Обычный файл
									
								
							
										
											
												Различия файлов не показаны, т.к. их слишком много
												Показать различия
											
										
									
								
							
							
								
								
									
										6
									
								
								src/device/avr/atmega128rfr2.ld
									
										
									
									
									
										Обычный файл
									
								
							
							
						
						
									
										6
									
								
								src/device/avr/atmega128rfr2.ld
									
										
									
									
									
										Обычный файл
									
								
							| 
						 | 
				
			
			@ -0,0 +1,6 @@
 | 
			
		|||
/* Automatically generated file. DO NOT EDIT. */
 | 
			
		||||
/* Generated by gen-device.py from ATmega128RFR2.atdf, see http://packs.download.atmel.com/ */
 | 
			
		||||
 | 
			
		||||
__flash_size = 0x20000;
 | 
			
		||||
__ram_size   = 0x4000;
 | 
			
		||||
__num_isrs   = 71;
 | 
			
		||||
							
								
								
									
										491
									
								
								src/device/avr/atmega16.go
									
										
									
									
									
										Обычный файл
									
								
							
							
						
						
									
										491
									
								
								src/device/avr/atmega16.go
									
										
									
									
									
										Обычный файл
									
								
							| 
						 | 
				
			
			@ -0,0 +1,491 @@
 | 
			
		|||
// Automatically generated file. DO NOT EDIT.
 | 
			
		||||
// Generated by gen-device.py from ATmega16.atdf, see http://packs.download.atmel.com/
 | 
			
		||||
 | 
			
		||||
// +build avr,atmega16
 | 
			
		||||
 | 
			
		||||
// Device information for the ATmega16.
 | 
			
		||||
//
 | 
			
		||||
package avr
 | 
			
		||||
 | 
			
		||||
// Magic type name for the compiler.
 | 
			
		||||
type __reg uint8
 | 
			
		||||
 | 
			
		||||
// Export this magic type name.
 | 
			
		||||
type RegValue = __reg
 | 
			
		||||
 | 
			
		||||
// Some information about this device.
 | 
			
		||||
const (
 | 
			
		||||
	DEVICE = "ATmega16"
 | 
			
		||||
	ARCH   = "AVR8"
 | 
			
		||||
	FAMILY = "megaAVR"
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
// Interrupts
 | 
			
		||||
const (
 | 
			
		||||
	IRQ_RESET        = 0  // External Pin, Power-on Reset, Brown-out Reset, Watchdog Reset and JTAG AVR Reset
 | 
			
		||||
	IRQ_INT0         = 1  // External Interrupt Request 0
 | 
			
		||||
	IRQ_INT1         = 2  // External Interrupt Request 1
 | 
			
		||||
	IRQ_TIMER2_COMP  = 3  // Timer/Counter2 Compare Match
 | 
			
		||||
	IRQ_TIMER2_OVF   = 4  // Timer/Counter2 Overflow
 | 
			
		||||
	IRQ_TIMER1_CAPT  = 5  // Timer/Counter1 Capture Event
 | 
			
		||||
	IRQ_TIMER1_COMPA = 6  // Timer/Counter1 Compare Match A
 | 
			
		||||
	IRQ_TIMER1_COMPB = 7  // Timer/Counter1 Compare Match B
 | 
			
		||||
	IRQ_TIMER1_OVF   = 8  // Timer/Counter1 Overflow
 | 
			
		||||
	IRQ_TIMER0_OVF   = 9  // Timer/Counter0 Overflow
 | 
			
		||||
	IRQ_SPI_STC      = 10 // Serial Transfer Complete
 | 
			
		||||
	IRQ_USART_RXC    = 11 // USART, Rx Complete
 | 
			
		||||
	IRQ_USART_UDRE   = 12 // USART Data Register Empty
 | 
			
		||||
	IRQ_USART_TXC    = 13 // USART, Tx Complete
 | 
			
		||||
	IRQ_ADC          = 14 // ADC Conversion Complete
 | 
			
		||||
	IRQ_EE_RDY       = 15 // EEPROM Ready
 | 
			
		||||
	IRQ_ANA_COMP     = 16 // Analog Comparator
 | 
			
		||||
	IRQ_TWI          = 17 // 2-wire Serial Interface
 | 
			
		||||
	IRQ_INT2         = 18 // External Interrupt Request 2
 | 
			
		||||
	IRQ_TIMER0_COMP  = 19 // Timer/Counter0 Compare Match
 | 
			
		||||
	IRQ_SPM_RDY      = 20 // Store Program Memory Ready
 | 
			
		||||
	IRQ_max          = 20 // Highest interrupt number on this device.
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
// Peripherals
 | 
			
		||||
var (
 | 
			
		||||
	// Fuses
 | 
			
		||||
	FUSE = struct {
 | 
			
		||||
		HIGH __reg
 | 
			
		||||
		LOW  __reg
 | 
			
		||||
	}{
 | 
			
		||||
		HIGH: 0x1,
 | 
			
		||||
		LOW:  0x0,
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	// Lockbits
 | 
			
		||||
	LOCKBIT = struct {
 | 
			
		||||
		LOCKBIT __reg
 | 
			
		||||
	}{
 | 
			
		||||
		LOCKBIT: 0x0,
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	// Timer/Counter, 8-bit
 | 
			
		||||
	TC8 = struct {
 | 
			
		||||
		TCCR0 __reg
 | 
			
		||||
		TCNT0 __reg
 | 
			
		||||
		OCR0  __reg
 | 
			
		||||
	}{
 | 
			
		||||
		TCCR0: 0x53, // Timer/Counter Control Register
 | 
			
		||||
		TCNT0: 0x52, // Timer/Counter Register
 | 
			
		||||
		OCR0:  0x5c, // Output Compare Register
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	// Timer/Counter, 16-bit
 | 
			
		||||
	TC16 = struct {
 | 
			
		||||
		TCCR1A __reg
 | 
			
		||||
		TCCR1B __reg
 | 
			
		||||
		TCNT1L __reg
 | 
			
		||||
		TCNT1H __reg
 | 
			
		||||
		OCR1AL __reg
 | 
			
		||||
		OCR1AH __reg
 | 
			
		||||
		OCR1BL __reg
 | 
			
		||||
		OCR1BH __reg
 | 
			
		||||
		ICR1L  __reg
 | 
			
		||||
		ICR1H  __reg
 | 
			
		||||
	}{
 | 
			
		||||
		TCCR1A: 0x4f, // Timer/Counter1 Control Register A
 | 
			
		||||
		TCCR1B: 0x4e, // Timer/Counter1 Control Register B
 | 
			
		||||
		TCNT1L: 0x4c, // Timer/Counter1  Bytes
 | 
			
		||||
		TCNT1H: 0x4c, // Timer/Counter1  Bytes
 | 
			
		||||
		OCR1AL: 0x4a, // Timer/Counter1 Output Compare Register  Bytes
 | 
			
		||||
		OCR1AH: 0x4a, // Timer/Counter1 Output Compare Register  Bytes
 | 
			
		||||
		OCR1BL: 0x48, // Timer/Counter1 Output Compare Register  Bytes
 | 
			
		||||
		OCR1BH: 0x48, // Timer/Counter1 Output Compare Register  Bytes
 | 
			
		||||
		ICR1L:  0x46, // Timer/Counter1 Input Capture Register  Bytes
 | 
			
		||||
		ICR1H:  0x46, // Timer/Counter1 Input Capture Register  Bytes
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	// External Interrupts
 | 
			
		||||
	EXINT = struct {
 | 
			
		||||
		GICR __reg
 | 
			
		||||
		GIFR __reg
 | 
			
		||||
	}{
 | 
			
		||||
		GICR: 0x5b, // General Interrupt Control Register
 | 
			
		||||
		GIFR: 0x5a, // General Interrupt Flag Register
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	// EEPROM
 | 
			
		||||
	EEPROM = struct {
 | 
			
		||||
		EEARL __reg
 | 
			
		||||
		EEARH __reg
 | 
			
		||||
		EEDR  __reg
 | 
			
		||||
		EECR  __reg
 | 
			
		||||
	}{
 | 
			
		||||
		EEARL: 0x3e, // EEPROM Address Register  Bytes
 | 
			
		||||
		EEARH: 0x3e, // EEPROM Address Register  Bytes
 | 
			
		||||
		EEDR:  0x3d, // EEPROM Data Register
 | 
			
		||||
		EECR:  0x3c, // EEPROM Control Register
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	// CPU Registers
 | 
			
		||||
	CPU = struct {
 | 
			
		||||
		SREG   __reg
 | 
			
		||||
		SPL    __reg
 | 
			
		||||
		SPH    __reg
 | 
			
		||||
		OSCCAL __reg
 | 
			
		||||
	}{
 | 
			
		||||
		SREG:   0x5f, // Status Register
 | 
			
		||||
		SPL:    0x5d, // Stack Pointer
 | 
			
		||||
		SPH:    0x5d, // Stack Pointer
 | 
			
		||||
		OSCCAL: 0x51, // Oscillator Calibration Value
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	// Timer/Counter, 8-bit Async
 | 
			
		||||
	TC8_ASYNC = struct {
 | 
			
		||||
		TCCR2 __reg
 | 
			
		||||
		TCNT2 __reg
 | 
			
		||||
		OCR2  __reg
 | 
			
		||||
		ASSR  __reg
 | 
			
		||||
	}{
 | 
			
		||||
		TCCR2: 0x45, // Timer/Counter2 Control Register
 | 
			
		||||
		TCNT2: 0x44, // Timer/Counter2
 | 
			
		||||
		OCR2:  0x43, // Timer/Counter2 Output Compare Register
 | 
			
		||||
		ASSR:  0x42, // Asynchronous Status Register
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	// Serial Peripheral Interface
 | 
			
		||||
	SPI = struct {
 | 
			
		||||
		SPDR __reg
 | 
			
		||||
		SPSR __reg
 | 
			
		||||
		SPCR __reg
 | 
			
		||||
	}{
 | 
			
		||||
		SPDR: 0x2f, // SPI Data Register
 | 
			
		||||
		SPSR: 0x2e, // SPI Status Register
 | 
			
		||||
		SPCR: 0x2d, // SPI Control Register
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	// USART
 | 
			
		||||
	USART = struct {
 | 
			
		||||
		UDR   __reg
 | 
			
		||||
		UCSRA __reg
 | 
			
		||||
		UCSRB __reg
 | 
			
		||||
		UCSRC __reg
 | 
			
		||||
		UBRRH __reg
 | 
			
		||||
		UBRRL __reg
 | 
			
		||||
	}{
 | 
			
		||||
		UDR:   0x2c, // USART I/O Data Register
 | 
			
		||||
		UCSRA: 0x2b, // USART Control and Status Register A
 | 
			
		||||
		UCSRB: 0x2a, // USART Control and Status Register B
 | 
			
		||||
		UCSRC: 0x40, // USART Control and Status Register C
 | 
			
		||||
		UBRRH: 0x40, // USART Baud Rate Register Hight Byte
 | 
			
		||||
		UBRRL: 0x29, // USART Baud Rate Register Low Byte
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	// Two Wire Serial Interface
 | 
			
		||||
	TWI = struct {
 | 
			
		||||
		TWBR __reg
 | 
			
		||||
		TWCR __reg
 | 
			
		||||
		TWSR __reg
 | 
			
		||||
		TWDR __reg
 | 
			
		||||
		TWAR __reg
 | 
			
		||||
	}{
 | 
			
		||||
		TWBR: 0x20, // TWI Bit Rate register
 | 
			
		||||
		TWCR: 0x56, // TWI Control Register
 | 
			
		||||
		TWSR: 0x21, // TWI Status Register
 | 
			
		||||
		TWDR: 0x23, // TWI Data register
 | 
			
		||||
		TWAR: 0x22, // TWI (Slave) Address register
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	// Analog Comparator
 | 
			
		||||
	AC = struct {
 | 
			
		||||
		ACSR __reg
 | 
			
		||||
	}{
 | 
			
		||||
		ACSR: 0x28, // Analog Comparator Control And Status Register
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	// Analog-to-Digital Converter
 | 
			
		||||
	ADC = struct {
 | 
			
		||||
		ADMUX  __reg
 | 
			
		||||
		ADCSRA __reg
 | 
			
		||||
		ADCL   __reg
 | 
			
		||||
		ADCH   __reg
 | 
			
		||||
	}{
 | 
			
		||||
		ADMUX:  0x27, // The ADC multiplexer Selection Register
 | 
			
		||||
		ADCSRA: 0x26, // The ADC Control and Status register
 | 
			
		||||
		ADCL:   0x24, // ADC Data Register  Bytes
 | 
			
		||||
		ADCH:   0x24, // ADC Data Register  Bytes
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	// JTAG Interface
 | 
			
		||||
	JTAG = struct {
 | 
			
		||||
		OCDR __reg
 | 
			
		||||
	}{
 | 
			
		||||
		OCDR: 0x51, // On-Chip Debug Related Register in I/O Memory
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	// Bootloader
 | 
			
		||||
	BOOT_LOAD = struct {
 | 
			
		||||
		SPMCSR __reg
 | 
			
		||||
	}{
 | 
			
		||||
		SPMCSR: 0x57, // Store Program Memory Control Register
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	// I/O Port
 | 
			
		||||
	PORT = struct {
 | 
			
		||||
		PORTA __reg
 | 
			
		||||
		DDRA  __reg
 | 
			
		||||
		PINA  __reg
 | 
			
		||||
		PORTB __reg
 | 
			
		||||
		DDRB  __reg
 | 
			
		||||
		PINB  __reg
 | 
			
		||||
		PORTC __reg
 | 
			
		||||
		DDRC  __reg
 | 
			
		||||
		PINC  __reg
 | 
			
		||||
		PORTD __reg
 | 
			
		||||
		DDRD  __reg
 | 
			
		||||
		PIND  __reg
 | 
			
		||||
	}{
 | 
			
		||||
		PORTA: 0x3b, // Port A Data Register
 | 
			
		||||
		DDRA:  0x3a, // Port A Data Direction Register
 | 
			
		||||
		PINA:  0x39, // Port A Input Pins
 | 
			
		||||
		PORTB: 0x38, // Port B Data Register
 | 
			
		||||
		DDRB:  0x37, // Port B Data Direction Register
 | 
			
		||||
		PINB:  0x36, // Port B Input Pins
 | 
			
		||||
		PORTC: 0x35, // Port C Data Register
 | 
			
		||||
		DDRC:  0x34, // Port C Data Direction Register
 | 
			
		||||
		PINC:  0x33, // Port C Input Pins
 | 
			
		||||
		PORTD: 0x32, // Port D Data Register
 | 
			
		||||
		DDRD:  0x31, // Port D Data Direction Register
 | 
			
		||||
		PIND:  0x30, // Port D Input Pins
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	// Watchdog Timer
 | 
			
		||||
	WDT = struct {
 | 
			
		||||
		WDTCR __reg
 | 
			
		||||
	}{
 | 
			
		||||
		WDTCR: 0x41, // Watchdog Timer Control Register
 | 
			
		||||
	}
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
// Bitfields for FUSE: Fuses
 | 
			
		||||
const (
 | 
			
		||||
	// HIGH
 | 
			
		||||
	HIGH_OCDEN   = 0x80 // On-Chip Debug Enabled
 | 
			
		||||
	HIGH_JTAGEN  = 0x40 // JTAG Interface Enabled
 | 
			
		||||
	HIGH_SPIEN   = 0x20 // Serial program downloading (SPI) enabled
 | 
			
		||||
	HIGH_EESAVE  = 0x8  // Preserve EEPROM through the Chip Erase cycle
 | 
			
		||||
	HIGH_BOOTSZ  = 0x6  // Select Boot Size
 | 
			
		||||
	HIGH_BOOTRST = 0x1  // Boot Reset vector Enabled
 | 
			
		||||
	HIGH_CKOPT   = 0x10 // CKOPT fuse (operation dependent of CKSEL fuses)
 | 
			
		||||
 | 
			
		||||
	// LOW
 | 
			
		||||
	LOW_BODLEVEL  = 0x80 // Brownout detector trigger level
 | 
			
		||||
	LOW_BODEN     = 0x40 // Brown-out detection enabled
 | 
			
		||||
	LOW_SUT_CKSEL = 0x3f // Select Clock Source
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
// Bitfields for LOCKBIT: Lockbits
 | 
			
		||||
const (
 | 
			
		||||
	// LOCKBIT
 | 
			
		||||
	LOCKBIT_LB   = 0x3  // Memory Lock
 | 
			
		||||
	LOCKBIT_BLB0 = 0xc  // Boot Loader Protection Mode
 | 
			
		||||
	LOCKBIT_BLB1 = 0x30 // Boot Loader Protection Mode
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
// Bitfields for TC8: Timer/Counter, 8-bit
 | 
			
		||||
const (
 | 
			
		||||
	// TCCR0: Timer/Counter Control Register
 | 
			
		||||
	TCCR0_FOC0  = 0x80 // Force Output Compare
 | 
			
		||||
	TCCR0_WGM00 = 0x40 // Waveform Generation Mode 0
 | 
			
		||||
	TCCR0_COM0  = 0x30 // Compare Match Output Modes
 | 
			
		||||
	TCCR0_WGM01 = 0x8  // Waveform Generation Mode 1
 | 
			
		||||
	TCCR0_CS0   = 0x7  // Clock Selects
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
// Bitfields for TC16: Timer/Counter, 16-bit
 | 
			
		||||
const (
 | 
			
		||||
	// TCCR1A: Timer/Counter1 Control Register A
 | 
			
		||||
	TCCR1A_COM1A = 0xc0 // Compare Output Mode 1A, bits
 | 
			
		||||
	TCCR1A_COM1B = 0x30 // Compare Output Mode 1B, bits
 | 
			
		||||
	TCCR1A_FOC1A = 0x8  // Force Output Compare 1A
 | 
			
		||||
	TCCR1A_FOC1B = 0x4  // Force Output Compare 1B
 | 
			
		||||
	TCCR1A_WGM1  = 0x3  // Waveform Generation Mode
 | 
			
		||||
 | 
			
		||||
	// TCCR1B: Timer/Counter1 Control Register B
 | 
			
		||||
	TCCR1B_ICNC1 = 0x80 // Input Capture 1 Noise Canceler
 | 
			
		||||
	TCCR1B_ICES1 = 0x40 // Input Capture 1 Edge Select
 | 
			
		||||
	TCCR1B_WGM1  = 0x18 // Waveform Generation Mode
 | 
			
		||||
	TCCR1B_CS1   = 0x7  // Prescaler source of Timer/Counter 1
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
// Bitfields for EXINT: External Interrupts
 | 
			
		||||
const (
 | 
			
		||||
	// GICR: General Interrupt Control Register
 | 
			
		||||
	GICR_INT0  = 0x40 // External Interrupt Request 0 Enable
 | 
			
		||||
	GICR_INT1  = 0x80 // External Interrupt Request 1 Enable
 | 
			
		||||
	GICR_INT2  = 0x20 // External Interrupt Request 2 Enable
 | 
			
		||||
	GICR_IVSEL = 0x2  // Interrupt Vector Select
 | 
			
		||||
	GICR_IVCE  = 0x1  // Interrupt Vector Change Enable
 | 
			
		||||
 | 
			
		||||
	// GIFR: General Interrupt Flag Register
 | 
			
		||||
	GIFR_INTF  = 0xc0 // External Interrupt Flags
 | 
			
		||||
	GIFR_INTF2 = 0x20 // External Interrupt Flag 2
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
// Bitfields for EEPROM: EEPROM
 | 
			
		||||
const (
 | 
			
		||||
	// EECR: EEPROM Control Register
 | 
			
		||||
	EECR_EERIE = 0x8 // EEPROM Ready Interrupt Enable
 | 
			
		||||
	EECR_EEMWE = 0x4 // EEPROM Master Write Enable
 | 
			
		||||
	EECR_EEWE  = 0x2 // EEPROM Write Enable
 | 
			
		||||
	EECR_EERE  = 0x1 // EEPROM Read Enable
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
// Bitfields for CPU: CPU Registers
 | 
			
		||||
const (
 | 
			
		||||
	// SREG: Status Register
 | 
			
		||||
	SREG_I = 0x80 // Global Interrupt Enable
 | 
			
		||||
	SREG_T = 0x40 // Bit Copy Storage
 | 
			
		||||
	SREG_H = 0x20 // Half Carry Flag
 | 
			
		||||
	SREG_S = 0x10 // Sign Bit
 | 
			
		||||
	SREG_V = 0x8  // Two's Complement Overflow Flag
 | 
			
		||||
	SREG_N = 0x4  // Negative Flag
 | 
			
		||||
	SREG_Z = 0x2  // Zero Flag
 | 
			
		||||
	SREG_C = 0x1  // Carry Flag
 | 
			
		||||
 | 
			
		||||
	// OSCCAL: Oscillator Calibration Value
 | 
			
		||||
	OSCCAL_OSCCAL = 0xff // Oscillator Calibration
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
// Bitfields for TC8_ASYNC: Timer/Counter, 8-bit Async
 | 
			
		||||
const (
 | 
			
		||||
	// TCCR2: Timer/Counter2 Control Register
 | 
			
		||||
	TCCR2_FOC2  = 0x80 // Force Output Compare
 | 
			
		||||
	TCCR2_WGM20 = 0x40 // Waveform Genration Mode
 | 
			
		||||
	TCCR2_COM2  = 0x30 // Compare Output Mode bits
 | 
			
		||||
	TCCR2_WGM21 = 0x8  // Waveform Generation Mode
 | 
			
		||||
	TCCR2_CS2   = 0x7  // Clock Select bits
 | 
			
		||||
 | 
			
		||||
	// ASSR: Asynchronous Status Register
 | 
			
		||||
	ASSR_AS2    = 0x8 // Asynchronous Timer/counter2
 | 
			
		||||
	ASSR_TCN2UB = 0x4 // Timer/Counter2 Update Busy
 | 
			
		||||
	ASSR_OCR2UB = 0x2 // Output Compare Register2 Update Busy
 | 
			
		||||
	ASSR_TCR2UB = 0x1 // Timer/counter Control Register2 Update Busy
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
// Bitfields for SPI: Serial Peripheral Interface
 | 
			
		||||
const (
 | 
			
		||||
	// SPSR: SPI Status Register
 | 
			
		||||
	SPSR_SPIF  = 0x80 // SPI Interrupt Flag
 | 
			
		||||
	SPSR_WCOL  = 0x40 // Write Collision Flag
 | 
			
		||||
	SPSR_SPI2X = 0x1  // Double SPI Speed Bit
 | 
			
		||||
 | 
			
		||||
	// SPCR: SPI Control Register
 | 
			
		||||
	SPCR_SPIE = 0x80 // SPI Interrupt Enable
 | 
			
		||||
	SPCR_SPE  = 0x40 // SPI Enable
 | 
			
		||||
	SPCR_DORD = 0x20 // Data Order
 | 
			
		||||
	SPCR_MSTR = 0x10 // Master/Slave Select
 | 
			
		||||
	SPCR_CPOL = 0x8  // Clock polarity
 | 
			
		||||
	SPCR_CPHA = 0x4  // Clock Phase
 | 
			
		||||
	SPCR_SPR  = 0x3  // SPI Clock Rate Selects
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
// Bitfields for USART: USART
 | 
			
		||||
const (
 | 
			
		||||
	// UCSRA: USART Control and Status Register A
 | 
			
		||||
	UCSRA_RXC  = 0x80 // USART Receive Complete
 | 
			
		||||
	UCSRA_TXC  = 0x40 // USART Transmitt Complete
 | 
			
		||||
	UCSRA_UDRE = 0x20 // USART Data Register Empty
 | 
			
		||||
	UCSRA_FE   = 0x10 // Framing Error
 | 
			
		||||
	UCSRA_DOR  = 0x8  // Data overRun
 | 
			
		||||
	UCSRA_UPE  = 0x4  // Parity Error
 | 
			
		||||
	UCSRA_U2X  = 0x2  // Double the USART transmission speed
 | 
			
		||||
	UCSRA_MPCM = 0x1  // Multi-processor Communication Mode
 | 
			
		||||
 | 
			
		||||
	// UCSRB: USART Control and Status Register B
 | 
			
		||||
	UCSRB_RXCIE = 0x80 // RX Complete Interrupt Enable
 | 
			
		||||
	UCSRB_TXCIE = 0x40 // TX Complete Interrupt Enable
 | 
			
		||||
	UCSRB_UDRIE = 0x20 // USART Data register Empty Interrupt Enable
 | 
			
		||||
	UCSRB_RXEN  = 0x10 // Receiver Enable
 | 
			
		||||
	UCSRB_TXEN  = 0x8  // Transmitter Enable
 | 
			
		||||
	UCSRB_UCSZ2 = 0x4  // Character Size
 | 
			
		||||
	UCSRB_RXB8  = 0x2  // Receive Data Bit 8
 | 
			
		||||
	UCSRB_TXB8  = 0x1  // Transmit Data Bit 8
 | 
			
		||||
 | 
			
		||||
	// UCSRC: USART Control and Status Register C
 | 
			
		||||
	UCSRC_URSEL = 0x80 // Register Select
 | 
			
		||||
	UCSRC_UMSEL = 0x40 // USART Mode Select
 | 
			
		||||
	UCSRC_UPM   = 0x30 // Parity Mode Bits
 | 
			
		||||
	UCSRC_USBS  = 0x8  // Stop Bit Select
 | 
			
		||||
	UCSRC_UCSZ  = 0x6  // Character Size
 | 
			
		||||
	UCSRC_UCPOL = 0x1  // Clock Polarity
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
// Bitfields for TWI: Two Wire Serial Interface
 | 
			
		||||
const (
 | 
			
		||||
	// TWCR: TWI Control Register
 | 
			
		||||
	TWCR_TWINT = 0x80 // TWI Interrupt Flag
 | 
			
		||||
	TWCR_TWEA  = 0x40 // TWI Enable Acknowledge Bit
 | 
			
		||||
	TWCR_TWSTA = 0x20 // TWI Start Condition Bit
 | 
			
		||||
	TWCR_TWSTO = 0x10 // TWI Stop Condition Bit
 | 
			
		||||
	TWCR_TWWC  = 0x8  // TWI Write Collition Flag
 | 
			
		||||
	TWCR_TWEN  = 0x4  // TWI Enable Bit
 | 
			
		||||
	TWCR_TWIE  = 0x1  // TWI Interrupt Enable
 | 
			
		||||
 | 
			
		||||
	// TWSR: TWI Status Register
 | 
			
		||||
	TWSR_TWS  = 0xf8 // TWI Status
 | 
			
		||||
	TWSR_TWPS = 0x3  // TWI Prescaler
 | 
			
		||||
 | 
			
		||||
	// TWAR: TWI (Slave) Address register
 | 
			
		||||
	TWAR_TWA   = 0xfe // TWI (Slave) Address register Bits
 | 
			
		||||
	TWAR_TWGCE = 0x1  // TWI General Call Recognition Enable Bit
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
// Bitfields for AC: Analog Comparator
 | 
			
		||||
const (
 | 
			
		||||
	// ACSR: Analog Comparator Control And Status Register
 | 
			
		||||
	ACSR_ACD  = 0x80 // Analog Comparator Disable
 | 
			
		||||
	ACSR_ACBG = 0x40 // Analog Comparator Bandgap Select
 | 
			
		||||
	ACSR_ACO  = 0x20 // Analog Compare Output
 | 
			
		||||
	ACSR_ACI  = 0x10 // Analog Comparator Interrupt Flag
 | 
			
		||||
	ACSR_ACIE = 0x8  // Analog Comparator Interrupt Enable
 | 
			
		||||
	ACSR_ACIC = 0x4  // Analog Comparator Input Capture Enable
 | 
			
		||||
	ACSR_ACIS = 0x3  // Analog Comparator Interrupt Mode Select bits
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
// Bitfields for ADC: Analog-to-Digital Converter
 | 
			
		||||
const (
 | 
			
		||||
	// ADMUX: The ADC multiplexer Selection Register
 | 
			
		||||
	ADMUX_REFS  = 0xc0 // Reference Selection Bits
 | 
			
		||||
	ADMUX_ADLAR = 0x20 // Left Adjust Result
 | 
			
		||||
	ADMUX_MUX   = 0x1f // Analog Channel and Gain Selection Bits
 | 
			
		||||
 | 
			
		||||
	// ADCSRA: The ADC Control and Status register
 | 
			
		||||
	ADCSRA_ADEN  = 0x80 // ADC Enable
 | 
			
		||||
	ADCSRA_ADSC  = 0x40 // ADC Start Conversion
 | 
			
		||||
	ADCSRA_ADATE = 0x20 // ADC Auto Trigger
 | 
			
		||||
	ADCSRA_ADIF  = 0x10 // ADC Interrupt Flag
 | 
			
		||||
	ADCSRA_ADIE  = 0x8  // ADC Interrupt Enable
 | 
			
		||||
	ADCSRA_ADPS  = 0x7  // ADC Prescaler Select Bits
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
// Bitfields for JTAG: JTAG Interface
 | 
			
		||||
const (
 | 
			
		||||
	// OCDR: On-Chip Debug Related Register in I/O Memory
 | 
			
		||||
	OCDR_OCDR = 0xff // On-Chip Debug Register Bits
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
// Bitfields for BOOT_LOAD: Bootloader
 | 
			
		||||
const (
 | 
			
		||||
	// SPMCSR: Store Program Memory Control Register
 | 
			
		||||
	SPMCSR_SPMIE  = 0x80 // SPM Interrupt Enable
 | 
			
		||||
	SPMCSR_RWWSB  = 0x40 // Read While Write Section Busy
 | 
			
		||||
	SPMCSR_RWWSRE = 0x10 // Read While Write section read enable
 | 
			
		||||
	SPMCSR_BLBSET = 0x8  // Boot Lock Bit Set
 | 
			
		||||
	SPMCSR_PGWRT  = 0x4  // Page Write
 | 
			
		||||
	SPMCSR_PGERS  = 0x2  // Page Erase
 | 
			
		||||
	SPMCSR_SPMEN  = 0x1  // Store Program Memory Enable
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
// Bitfields for WDT: Watchdog Timer
 | 
			
		||||
const (
 | 
			
		||||
	// WDTCR: Watchdog Timer Control Register
 | 
			
		||||
	WDTCR_WDTOE = 0x10 // RW
 | 
			
		||||
	WDTCR_WDE   = 0x8  // Watch Dog Enable
 | 
			
		||||
	WDTCR_WDP   = 0x7  // Watch Dog Timer Prescaler bits
 | 
			
		||||
)
 | 
			
		||||
							
								
								
									
										6
									
								
								src/device/avr/atmega16.ld
									
										
									
									
									
										Обычный файл
									
								
							
							
						
						
									
										6
									
								
								src/device/avr/atmega16.ld
									
										
									
									
									
										Обычный файл
									
								
							| 
						 | 
				
			
			@ -0,0 +1,6 @@
 | 
			
		|||
/* Automatically generated file. DO NOT EDIT. */
 | 
			
		||||
/* Generated by gen-device.py from ATmega16.atdf, see http://packs.download.atmel.com/ */
 | 
			
		||||
 | 
			
		||||
__flash_size = 0x4000;
 | 
			
		||||
__ram_size   = 0x400;
 | 
			
		||||
__num_isrs   = 21;
 | 
			
		||||
							
								
								
									
										585
									
								
								src/device/avr/atmega162.go
									
										
									
									
									
										Обычный файл
									
								
							
							
						
						
									
										585
									
								
								src/device/avr/atmega162.go
									
										
									
									
									
										Обычный файл
									
								
							| 
						 | 
				
			
			@ -0,0 +1,585 @@
 | 
			
		|||
// Automatically generated file. DO NOT EDIT.
 | 
			
		||||
// Generated by gen-device.py from ATmega162.atdf, see http://packs.download.atmel.com/
 | 
			
		||||
 | 
			
		||||
// +build avr,atmega162
 | 
			
		||||
 | 
			
		||||
// Device information for the ATmega162.
 | 
			
		||||
//
 | 
			
		||||
package avr
 | 
			
		||||
 | 
			
		||||
// Magic type name for the compiler.
 | 
			
		||||
type __reg uint8
 | 
			
		||||
 | 
			
		||||
// Export this magic type name.
 | 
			
		||||
type RegValue = __reg
 | 
			
		||||
 | 
			
		||||
// Some information about this device.
 | 
			
		||||
const (
 | 
			
		||||
	DEVICE = "ATmega162"
 | 
			
		||||
	ARCH   = "AVR8"
 | 
			
		||||
	FAMILY = "megaAVR"
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
// Interrupts
 | 
			
		||||
const (
 | 
			
		||||
	IRQ_RESET        = 0  // External Pin,Power-on Reset,Brown-out Reset,Watchdog Reset,and JTAG AVR Reset. See Datasheet.
 | 
			
		||||
	IRQ_INT0         = 1  // External Interrupt Request 0
 | 
			
		||||
	IRQ_INT1         = 2  // External Interrupt Request 1
 | 
			
		||||
	IRQ_INT2         = 3  // External Interrupt Request 2
 | 
			
		||||
	IRQ_PCINT0       = 4  // Pin Change Interrupt Request 0
 | 
			
		||||
	IRQ_PCINT1       = 5  // Pin Change Interrupt Request 1
 | 
			
		||||
	IRQ_TIMER3_CAPT  = 6  // Timer/Counter3 Capture Event
 | 
			
		||||
	IRQ_TIMER3_COMPA = 7  // Timer/Counter3 Compare Match A
 | 
			
		||||
	IRQ_TIMER3_COMPB = 8  // Timer/Counter3 Compare Match B
 | 
			
		||||
	IRQ_TIMER3_OVF   = 9  // Timer/Counter3 Overflow
 | 
			
		||||
	IRQ_TIMER2_COMP  = 10 // Timer/Counter2 Compare Match
 | 
			
		||||
	IRQ_TIMER2_OVF   = 11 // Timer/Counter2 Overflow
 | 
			
		||||
	IRQ_TIMER1_CAPT  = 12 // Timer/Counter1 Capture Event
 | 
			
		||||
	IRQ_TIMER1_COMPA = 13 // Timer/Counter1 Compare Match A
 | 
			
		||||
	IRQ_TIMER1_COMPB = 14 // Timer/Counter Compare Match B
 | 
			
		||||
	IRQ_TIMER1_OVF   = 15 // Timer/Counter1 Overflow
 | 
			
		||||
	IRQ_TIMER0_COMP  = 16 // Timer/Counter0 Compare Match
 | 
			
		||||
	IRQ_TIMER0_OVF   = 17 // Timer/Counter0 Overflow
 | 
			
		||||
	IRQ_SPI_STC      = 18 // SPI Serial Transfer Complete
 | 
			
		||||
	IRQ_USART0_RXC   = 19 // USART0, Rx Complete
 | 
			
		||||
	IRQ_USART1_RXC   = 20 // USART1, Rx Complete
 | 
			
		||||
	IRQ_USART0_UDRE  = 21 // USART0 Data register Empty
 | 
			
		||||
	IRQ_USART1_UDRE  = 22 // USART1, Data register Empty
 | 
			
		||||
	IRQ_USART0_TXC   = 23 // USART0, Tx Complete
 | 
			
		||||
	IRQ_USART1_TXC   = 24 // USART1, Tx Complete
 | 
			
		||||
	IRQ_EE_RDY       = 25 // EEPROM Ready
 | 
			
		||||
	IRQ_ANA_COMP     = 26 // Analog Comparator
 | 
			
		||||
	IRQ_SPM_RDY      = 27 // Store Program Memory Read
 | 
			
		||||
	IRQ_max          = 27 // Highest interrupt number on this device.
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
// Peripherals
 | 
			
		||||
var (
 | 
			
		||||
	// Fuses
 | 
			
		||||
	FUSE = struct {
 | 
			
		||||
		EXTENDED __reg
 | 
			
		||||
		HIGH     __reg
 | 
			
		||||
		LOW      __reg
 | 
			
		||||
	}{
 | 
			
		||||
		EXTENDED: 0x2,
 | 
			
		||||
		HIGH:     0x1,
 | 
			
		||||
		LOW:      0x0,
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	// Lockbits
 | 
			
		||||
	LOCKBIT = struct {
 | 
			
		||||
		LOCKBIT __reg
 | 
			
		||||
	}{
 | 
			
		||||
		LOCKBIT: 0x0,
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	// Timer/Counter, 16-bit
 | 
			
		||||
	TC16 = struct {
 | 
			
		||||
		TCCR1A __reg
 | 
			
		||||
		TCCR1B __reg
 | 
			
		||||
		TCNT1L __reg
 | 
			
		||||
		TCNT1H __reg
 | 
			
		||||
		OCR1AL __reg
 | 
			
		||||
		OCR1AH __reg
 | 
			
		||||
		OCR1BL __reg
 | 
			
		||||
		OCR1BH __reg
 | 
			
		||||
		ICR1L  __reg
 | 
			
		||||
		ICR1H  __reg
 | 
			
		||||
		ETIMSK __reg
 | 
			
		||||
		ETIFR  __reg
 | 
			
		||||
		TCCR3A __reg
 | 
			
		||||
		TCCR3B __reg
 | 
			
		||||
		TCNT3L __reg
 | 
			
		||||
		TCNT3H __reg
 | 
			
		||||
		OCR3AL __reg
 | 
			
		||||
		OCR3AH __reg
 | 
			
		||||
		OCR3BL __reg
 | 
			
		||||
		OCR3BH __reg
 | 
			
		||||
		ICR3L  __reg
 | 
			
		||||
		ICR3H  __reg
 | 
			
		||||
	}{
 | 
			
		||||
		TCCR1A: 0x4f, // Timer/Counter1 Control Register A
 | 
			
		||||
		TCCR1B: 0x4e, // Timer/Counter1 Control Register B
 | 
			
		||||
		TCNT1L: 0x4c, // Timer/Counter1  Bytes
 | 
			
		||||
		TCNT1H: 0x4c, // Timer/Counter1  Bytes
 | 
			
		||||
		OCR1AL: 0x4a, // Timer/Counter1 Output Compare Register A  Bytes
 | 
			
		||||
		OCR1AH: 0x4a, // Timer/Counter1 Output Compare Register A  Bytes
 | 
			
		||||
		OCR1BL: 0x48, // Timer/Counter1 Output Compare Register B  Bytes
 | 
			
		||||
		OCR1BH: 0x48, // Timer/Counter1 Output Compare Register B  Bytes
 | 
			
		||||
		ICR1L:  0x44, // Timer/Counter1 Input Capture Register  Bytes
 | 
			
		||||
		ICR1H:  0x44, // Timer/Counter1 Input Capture Register  Bytes
 | 
			
		||||
		ETIMSK: 0x7d, // Extended Timer/Counter Interrupt Mask Register
 | 
			
		||||
		ETIFR:  0x7c, // Extended Timer/Counter Interrupt Flag register
 | 
			
		||||
		TCCR3A: 0x8b, // Timer/Counter3 Control Register A
 | 
			
		||||
		TCCR3B: 0x8a, // Timer/Counter3 Control Register B
 | 
			
		||||
		TCNT3L: 0x88, // Timer/Counter3  Bytes
 | 
			
		||||
		TCNT3H: 0x88, // Timer/Counter3  Bytes
 | 
			
		||||
		OCR3AL: 0x86, // Timer/Counter3 Output Compare Register A  Bytes
 | 
			
		||||
		OCR3AH: 0x86, // Timer/Counter3 Output Compare Register A  Bytes
 | 
			
		||||
		OCR3BL: 0x84, // Timer/Counte3 Output Compare Register B  Bytes
 | 
			
		||||
		OCR3BH: 0x84, // Timer/Counte3 Output Compare Register B  Bytes
 | 
			
		||||
		ICR3L:  0x80, // Timer/Counter3 Input Capture Register  Bytes
 | 
			
		||||
		ICR3H:  0x80, // Timer/Counter3 Input Capture Register  Bytes
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	// Timer/Counter, 8-bit Async
 | 
			
		||||
	TC8_ASYNC = struct {
 | 
			
		||||
		TCCR2 __reg
 | 
			
		||||
		TCNT2 __reg
 | 
			
		||||
		OCR2  __reg
 | 
			
		||||
		ASSR  __reg
 | 
			
		||||
	}{
 | 
			
		||||
		TCCR2: 0x47, // Timer/Counter Control Register
 | 
			
		||||
		TCNT2: 0x43, // Timer/Counter Register
 | 
			
		||||
		OCR2:  0x42, // Output Compare Register
 | 
			
		||||
		ASSR:  0x46, // Asynchronous Status Register
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	// Analog Comparator
 | 
			
		||||
	AC = struct {
 | 
			
		||||
		ACSR __reg
 | 
			
		||||
	}{
 | 
			
		||||
		ACSR: 0x28, // Analog Comparator Control And Status Register
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	// USART
 | 
			
		||||
	USART = struct {
 | 
			
		||||
		UDR0   __reg
 | 
			
		||||
		UCSR0A __reg
 | 
			
		||||
		UCSR0B __reg
 | 
			
		||||
		UCSR0C __reg
 | 
			
		||||
		UBRR0H __reg
 | 
			
		||||
		UBRR0L __reg
 | 
			
		||||
		UDR1   __reg
 | 
			
		||||
		UCSR1A __reg
 | 
			
		||||
		UCSR1B __reg
 | 
			
		||||
		UCSR1C __reg
 | 
			
		||||
		UBRR1H __reg
 | 
			
		||||
		UBRR1L __reg
 | 
			
		||||
	}{
 | 
			
		||||
		UDR0:   0x2c, // USART I/O Data Register
 | 
			
		||||
		UCSR0A: 0x2b, // USART Control and Status Register A
 | 
			
		||||
		UCSR0B: 0x2a, // USART Control and Status Register B
 | 
			
		||||
		UCSR0C: 0x40, // USART Control and Status Register C
 | 
			
		||||
		UBRR0H: 0x40, // USART Baud Rate Register High Byte
 | 
			
		||||
		UBRR0L: 0x29, // USART Baud Rate Register Low Byte
 | 
			
		||||
		UDR1:   0x23, // USART I/O Data Register
 | 
			
		||||
		UCSR1A: 0x22, // USART Control and Status Register A
 | 
			
		||||
		UCSR1B: 0x21, // USART Control and Status Register B
 | 
			
		||||
		UCSR1C: 0x5c, // USART Control and Status Register C
 | 
			
		||||
		UBRR1H: 0x5c, // USART Baud Rate Register Highg Byte
 | 
			
		||||
		UBRR1L: 0x20, // USART Baud Rate Register Low Byte
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	// Serial Peripheral Interface
 | 
			
		||||
	SPI = struct {
 | 
			
		||||
		SPCR __reg
 | 
			
		||||
		SPSR __reg
 | 
			
		||||
		SPDR __reg
 | 
			
		||||
	}{
 | 
			
		||||
		SPCR: 0x2d, // SPI Control Register
 | 
			
		||||
		SPSR: 0x2e, // SPI Status Register
 | 
			
		||||
		SPDR: 0x2f, // SPI Data Register
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	// CPU Registers
 | 
			
		||||
	CPU = struct {
 | 
			
		||||
		SREG   __reg
 | 
			
		||||
		SPL    __reg
 | 
			
		||||
		SPH    __reg
 | 
			
		||||
		OSCCAL __reg
 | 
			
		||||
		CLKPR  __reg
 | 
			
		||||
		SFIOR  __reg
 | 
			
		||||
	}{
 | 
			
		||||
		SREG:   0x5f, // Status Register
 | 
			
		||||
		SPL:    0x5d, // Stack Pointer
 | 
			
		||||
		SPH:    0x5d, // Stack Pointer
 | 
			
		||||
		OSCCAL: 0x24, // Oscillator Calibration Value
 | 
			
		||||
		CLKPR:  0x61, // Clock prescale register
 | 
			
		||||
		SFIOR:  0x50, // Special Function IO Register
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	// JTAG Interface
 | 
			
		||||
	JTAG = struct {
 | 
			
		||||
		OCDR __reg
 | 
			
		||||
	}{
 | 
			
		||||
		OCDR: 0x24, // On-Chip Debug Related Register in I/O Memory
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	// Bootloader
 | 
			
		||||
	BOOT_LOAD = struct {
 | 
			
		||||
		SPMCR __reg
 | 
			
		||||
	}{
 | 
			
		||||
		SPMCR: 0x57, // Store Program Memory Control Register
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	// EEPROM
 | 
			
		||||
	EEPROM = struct {
 | 
			
		||||
		EEARL __reg
 | 
			
		||||
		EEARH __reg
 | 
			
		||||
		EEDR  __reg
 | 
			
		||||
		EECR  __reg
 | 
			
		||||
	}{
 | 
			
		||||
		EEARL: 0x3e, // EEPROM Address Register Bytes
 | 
			
		||||
		EEARH: 0x3e, // EEPROM Address Register Bytes
 | 
			
		||||
		EEDR:  0x3d, // EEPROM Data Register
 | 
			
		||||
		EECR:  0x3c, // EEPROM Control Register
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	// I/O Port
 | 
			
		||||
	PORT = struct {
 | 
			
		||||
		PORTA __reg
 | 
			
		||||
		DDRA  __reg
 | 
			
		||||
		PINA  __reg
 | 
			
		||||
		PORTB __reg
 | 
			
		||||
		DDRB  __reg
 | 
			
		||||
		PINB  __reg
 | 
			
		||||
		PORTC __reg
 | 
			
		||||
		DDRC  __reg
 | 
			
		||||
		PINC  __reg
 | 
			
		||||
		PORTD __reg
 | 
			
		||||
		DDRD  __reg
 | 
			
		||||
		PIND  __reg
 | 
			
		||||
		PORTE __reg
 | 
			
		||||
		DDRE  __reg
 | 
			
		||||
		PINE  __reg
 | 
			
		||||
	}{
 | 
			
		||||
		PORTA: 0x3b, // Port A Data Register
 | 
			
		||||
		DDRA:  0x3a, // Port A Data Direction Register
 | 
			
		||||
		PINA:  0x39, // Port A Input Pins
 | 
			
		||||
		PORTB: 0x38, // Port B Data Register
 | 
			
		||||
		DDRB:  0x37, // Port B Data Direction Register
 | 
			
		||||
		PINB:  0x36, // Port B Input Pins
 | 
			
		||||
		PORTC: 0x35, // Port C Data Register
 | 
			
		||||
		DDRC:  0x34, // Port C Data Direction Register
 | 
			
		||||
		PINC:  0x33, // Port C Input Pins
 | 
			
		||||
		PORTD: 0x32, // Port D Data Register
 | 
			
		||||
		DDRD:  0x31, // Port D Data Direction Register
 | 
			
		||||
		PIND:  0x30, // Port D Input Pins
 | 
			
		||||
		PORTE: 0x27, // Data Register, Port E
 | 
			
		||||
		DDRE:  0x26, // Data Direction Register, Port E
 | 
			
		||||
		PINE:  0x25, // Input Pins, Port E
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	// Timer/Counter, 8-bit
 | 
			
		||||
	TC8 = struct {
 | 
			
		||||
		TCCR0 __reg
 | 
			
		||||
		TCNT0 __reg
 | 
			
		||||
		OCR0  __reg
 | 
			
		||||
	}{
 | 
			
		||||
		TCCR0: 0x53, // Timer/Counter 0 Control Register
 | 
			
		||||
		TCNT0: 0x52, // Timer/Counter 0 Register
 | 
			
		||||
		OCR0:  0x51, // Timer/Counter 0 Output Compare Register
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	// Watchdog Timer
 | 
			
		||||
	WDT = struct {
 | 
			
		||||
		WDTCR __reg
 | 
			
		||||
	}{
 | 
			
		||||
		WDTCR: 0x41, // Watchdog Timer Control Register
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	// External Interrupts
 | 
			
		||||
	EXINT = struct {
 | 
			
		||||
		GICR   __reg
 | 
			
		||||
		GIFR   __reg
 | 
			
		||||
		PCMSK1 __reg
 | 
			
		||||
		PCMSK0 __reg
 | 
			
		||||
	}{
 | 
			
		||||
		GICR:   0x5b, // General Interrupt Control Register
 | 
			
		||||
		GIFR:   0x5a, // General Interrupt Flag Register
 | 
			
		||||
		PCMSK1: 0x6c, // Pin Change Mask Register 1
 | 
			
		||||
		PCMSK0: 0x6b, // Pin Change Enable Mask
 | 
			
		||||
	}
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
// Bitfields for FUSE: Fuses
 | 
			
		||||
const (
 | 
			
		||||
	// EXTENDED
 | 
			
		||||
	EXTENDED_M161C    = 0x10 // ATmega161 compability mode
 | 
			
		||||
	EXTENDED_BODLEVEL = 0xe  // Brownout detector trigger level
 | 
			
		||||
 | 
			
		||||
	// HIGH
 | 
			
		||||
	HIGH_OCDEN   = 0x80 // On-Chip Debug Enabled
 | 
			
		||||
	HIGH_JTAGEN  = 0x40 // JTAG Interface Enabled
 | 
			
		||||
	HIGH_SPIEN   = 0x20 // Serial program downloading (SPI) enabled
 | 
			
		||||
	HIGH_WDTON   = 0x10 // Watchdog timer always on
 | 
			
		||||
	HIGH_EESAVE  = 0x8  // Preserve EEPROM through the Chip Erase cycle
 | 
			
		||||
	HIGH_BOOTSZ  = 0x6  // Select Boot Size
 | 
			
		||||
	HIGH_BOOTRST = 0x1  // Boot Reset vector Enabled
 | 
			
		||||
 | 
			
		||||
	// LOW
 | 
			
		||||
	LOW_CKDIV8    = 0x80 // Divide clock by 8 internally
 | 
			
		||||
	LOW_CKOUT     = 0x40 // Clock output on PORTB0
 | 
			
		||||
	LOW_SUT_CKSEL = 0x3f // Select Clock Source
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
// Bitfields for LOCKBIT: Lockbits
 | 
			
		||||
const (
 | 
			
		||||
	// LOCKBIT
 | 
			
		||||
	LOCKBIT_LB   = 0x3  // Memory Lock
 | 
			
		||||
	LOCKBIT_BLB0 = 0xc  // Boot Loader Protection Mode
 | 
			
		||||
	LOCKBIT_BLB1 = 0x30 // Boot Loader Protection Mode
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
// Bitfields for TC16: Timer/Counter, 16-bit
 | 
			
		||||
const (
 | 
			
		||||
	// TCCR1A: Timer/Counter1 Control Register A
 | 
			
		||||
	TCCR1A_COM1A = 0xc0 // Compare Output Mode 1A, bits
 | 
			
		||||
	TCCR1A_COM1B = 0x30 // Compare Output Mode 1B, bits
 | 
			
		||||
	TCCR1A_FOC1A = 0x8  // Force Output Compare for Channel A
 | 
			
		||||
	TCCR1A_FOC1B = 0x4  // Force Output Compare for Channel B
 | 
			
		||||
	TCCR1A_WGM1  = 0x3  // Pulse Width Modulator Select Bits
 | 
			
		||||
 | 
			
		||||
	// TCCR1B: Timer/Counter1 Control Register B
 | 
			
		||||
	TCCR1B_ICNC1 = 0x80 // Input Capture 1 Noise Canceler
 | 
			
		||||
	TCCR1B_ICES1 = 0x40 // Input Capture 1 Edge Select
 | 
			
		||||
	TCCR1B_WGM1  = 0x18 // Pulse Width Modulator Select Bits
 | 
			
		||||
	TCCR1B_CS1   = 0x7  // Clock Select1 bits
 | 
			
		||||
 | 
			
		||||
	// ETIMSK: Extended Timer/Counter Interrupt Mask Register
 | 
			
		||||
	ETIMSK_TICIE3 = 0x20 // Timer/Counter3 Input Capture Interrupt Enable
 | 
			
		||||
	ETIMSK_OCIE3A = 0x10 // Timer/Counter3 Output CompareA Match Interrupt Enable
 | 
			
		||||
	ETIMSK_OCIE3B = 0x8  // Timer/Counter3 Output CompareB Match Interrupt Enable
 | 
			
		||||
	ETIMSK_TOIE3  = 0x4  // Timer/Counter3 Overflow Interrupt Enable
 | 
			
		||||
 | 
			
		||||
	// ETIFR: Extended Timer/Counter Interrupt Flag register
 | 
			
		||||
	ETIFR_ICF3  = 0x20 // Input Capture Flag 3
 | 
			
		||||
	ETIFR_OCF3A = 0x10 // Output Compare Flag 3A
 | 
			
		||||
	ETIFR_OCF3B = 0x8  // Output Compare Flag 3B
 | 
			
		||||
	ETIFR_TOV3  = 0x4  // Timer/Counter3 Overflow Flag
 | 
			
		||||
 | 
			
		||||
	// TCCR3A: Timer/Counter3 Control Register A
 | 
			
		||||
	TCCR3A_COM3A = 0xc0 // Compare Output Mode 3A, bits
 | 
			
		||||
	TCCR3A_COM3B = 0x30 // Compare Output Mode 3B, bits
 | 
			
		||||
	TCCR3A_FOC3A = 0x8  // Force Output Compare for Channel A
 | 
			
		||||
	TCCR3A_FOC3B = 0x4  // Force Output Compare for Channel B
 | 
			
		||||
	TCCR3A_WGM3  = 0x3  // Pulse Width Modulator Select Bits
 | 
			
		||||
 | 
			
		||||
	// TCCR3B: Timer/Counter3 Control Register B
 | 
			
		||||
	TCCR3B_ICNC3 = 0x80 // Input Capture 3 Noise Canceler
 | 
			
		||||
	TCCR3B_ICES3 = 0x40 // Input Capture 3 Edge Select
 | 
			
		||||
	TCCR3B_WGM3  = 0x18 // Pulse Width Modulator Select Bits
 | 
			
		||||
	TCCR3B_CS3   = 0x7  // Clock Select3 bits
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
// Bitfields for TC8_ASYNC: Timer/Counter, 8-bit Async
 | 
			
		||||
const (
 | 
			
		||||
	// TCCR2: Timer/Counter Control Register
 | 
			
		||||
	TCCR2_FOC2  = 0x80 // Forde Output Compare
 | 
			
		||||
	TCCR2_WGM20 = 0x40 // Pulse Width Modulator Select Bit 0
 | 
			
		||||
	TCCR2_COM2  = 0x30 // Compare Match Output Mode
 | 
			
		||||
	TCCR2_WGM21 = 0x8  // Pulse Width Modulator Select Bit 1
 | 
			
		||||
	TCCR2_CS2   = 0x7  // Clock Select
 | 
			
		||||
 | 
			
		||||
	// ASSR: Asynchronous Status Register
 | 
			
		||||
	ASSR_AS2    = 0x8 // Asynchronous Timer 2
 | 
			
		||||
	ASSR_TCN2UB = 0x4 // Timer/Counter2 Update Busy
 | 
			
		||||
	ASSR_OCR2UB = 0x2 // Output Compare Register2 Update Busy
 | 
			
		||||
	ASSR_TCR2UB = 0x1 // Timer/Counter Control Register2 Update Busy
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
// Bitfields for AC: Analog Comparator
 | 
			
		||||
const (
 | 
			
		||||
	// ACSR: Analog Comparator Control And Status Register
 | 
			
		||||
	ACSR_ACD  = 0x80 // Analog Comparator Disable
 | 
			
		||||
	ACSR_ACBG = 0x40 // Analog Comparator Bandgap Select
 | 
			
		||||
	ACSR_ACO  = 0x20 // Analog Compare Output
 | 
			
		||||
	ACSR_ACI  = 0x10 // Analog Comparator Interrupt Flag
 | 
			
		||||
	ACSR_ACIE = 0x8  // Analog Comparator Interrupt Enable
 | 
			
		||||
	ACSR_ACIC = 0x4  // Analog Comparator Input Capture Enable
 | 
			
		||||
	ACSR_ACIS = 0x3  // Analog Comparator Interrupt Mode Select bits
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
// Bitfields for USART: USART
 | 
			
		||||
const (
 | 
			
		||||
	// UCSR0A: USART Control and Status Register A
 | 
			
		||||
	UCSR0A_RXC0  = 0x80 // USART Receive Complete
 | 
			
		||||
	UCSR0A_TXC0  = 0x40 // USART Transmitt Complete
 | 
			
		||||
	UCSR0A_UDRE0 = 0x20 // USART Data Register Empty
 | 
			
		||||
	UCSR0A_FE0   = 0x10 // Framing Error
 | 
			
		||||
	UCSR0A_DOR0  = 0x8  // Data overRun
 | 
			
		||||
	UCSR0A_UPE0  = 0x4  // Parity Error
 | 
			
		||||
	UCSR0A_U2X0  = 0x2  // Double the USART transmission speed
 | 
			
		||||
	UCSR0A_MPCM0 = 0x1  // Multi-processor Communication Mode
 | 
			
		||||
 | 
			
		||||
	// UCSR0B: USART Control and Status Register B
 | 
			
		||||
	UCSR0B_RXCIE0 = 0x80 // RX Complete Interrupt Enable
 | 
			
		||||
	UCSR0B_TXCIE0 = 0x40 // TX Complete Interrupt Enable
 | 
			
		||||
	UCSR0B_UDRIE0 = 0x20 // USART Data register Empty Interrupt Enable
 | 
			
		||||
	UCSR0B_RXEN0  = 0x10 // Receiver Enable
 | 
			
		||||
	UCSR0B_TXEN0  = 0x8  // Transmitter Enable
 | 
			
		||||
	UCSR0B_UCSZ02 = 0x4  // Character Size
 | 
			
		||||
	UCSR0B_RXB80  = 0x2  // Receive Data Bit 8
 | 
			
		||||
	UCSR0B_TXB80  = 0x1  // Transmit Data Bit 8
 | 
			
		||||
 | 
			
		||||
	// UCSR0C: USART Control and Status Register C
 | 
			
		||||
	UCSR0C_URSEL0 = 0x80 // Register Select
 | 
			
		||||
	UCSR0C_UMSEL0 = 0x40 // USART Mode Select
 | 
			
		||||
	UCSR0C_UPM0   = 0x30 // Parity Mode Bits
 | 
			
		||||
	UCSR0C_USBS0  = 0x8  // Stop Bit Select
 | 
			
		||||
	UCSR0C_UCSZ0  = 0x6  // Character Size
 | 
			
		||||
	UCSR0C_UCPOL0 = 0x1  // Clock Polarity
 | 
			
		||||
 | 
			
		||||
	// UBRR0H: USART Baud Rate Register High Byte
 | 
			
		||||
	UBRR0H_URSEL0 = 0x80 // Register Select
 | 
			
		||||
	UBRR0H_UBRR0  = 0xf  // USART Baud Rate Register High bits
 | 
			
		||||
 | 
			
		||||
	// UBRR0L: USART Baud Rate Register Low Byte
 | 
			
		||||
	UBRR0L_UBRR0 = 0xff // USART Baud Rate Register Low bits
 | 
			
		||||
 | 
			
		||||
	// UCSR1A: USART Control and Status Register A
 | 
			
		||||
	UCSR1A_RXC1  = 0x80 // USART Receive Complete
 | 
			
		||||
	UCSR1A_TXC1  = 0x40 // USART Transmitt Complete
 | 
			
		||||
	UCSR1A_UDRE1 = 0x20 // USART Data Register Empty
 | 
			
		||||
	UCSR1A_FE1   = 0x10 // Framing Error
 | 
			
		||||
	UCSR1A_DOR1  = 0x8  // Data overRun
 | 
			
		||||
	UCSR1A_UPE1  = 0x4  // Parity Error
 | 
			
		||||
	UCSR1A_U2X1  = 0x2  // Double the USART transmission speed
 | 
			
		||||
	UCSR1A_MPCM1 = 0x1  // Multi-processor Communication Mode
 | 
			
		||||
 | 
			
		||||
	// UCSR1B: USART Control and Status Register B
 | 
			
		||||
	UCSR1B_RXCIE1 = 0x80 // RX Complete Interrupt Enable
 | 
			
		||||
	UCSR1B_TXCIE1 = 0x40 // TX Complete Interrupt Enable
 | 
			
		||||
	UCSR1B_UDRIE1 = 0x20 // USART Data register Empty Interrupt Enable
 | 
			
		||||
	UCSR1B_RXEN1  = 0x10 // Receiver Enable
 | 
			
		||||
	UCSR1B_TXEN1  = 0x8  // Transmitter Enable
 | 
			
		||||
	UCSR1B_UCSZ12 = 0x4  // Character Size
 | 
			
		||||
	UCSR1B_RXB81  = 0x2  // Receive Data Bit 8
 | 
			
		||||
	UCSR1B_TXB81  = 0x1  // Transmit Data Bit 8
 | 
			
		||||
 | 
			
		||||
	// UCSR1C: USART Control and Status Register C
 | 
			
		||||
	UCSR1C_URSEL1 = 0x80 // Register Select
 | 
			
		||||
	UCSR1C_UMSEL1 = 0x40 // USART Mode Select
 | 
			
		||||
	UCSR1C_UPM1   = 0x30 // Parity Mode Bits
 | 
			
		||||
	UCSR1C_USBS1  = 0x8  // Stop Bit Select
 | 
			
		||||
	UCSR1C_UCSZ1  = 0x6  // Character Size
 | 
			
		||||
	UCSR1C_UCPOL1 = 0x1  // Clock Polarity
 | 
			
		||||
 | 
			
		||||
	// UBRR1H: USART Baud Rate Register Highg Byte
 | 
			
		||||
	UBRR1H_URSEL0 = 0x80 // Register Select
 | 
			
		||||
	UBRR1H_UBRR1  = 0xf  // USART Baud Rate Register High bits
 | 
			
		||||
 | 
			
		||||
	// UBRR1L: USART Baud Rate Register Low Byte
 | 
			
		||||
	UBRR1L_UBRR1 = 0xff // USART Baud Rate Register Low bits
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
// Bitfields for SPI: Serial Peripheral Interface
 | 
			
		||||
const (
 | 
			
		||||
	// SPCR: SPI Control Register
 | 
			
		||||
	SPCR_SPIE = 0x80 // SPI Interrupt Enable
 | 
			
		||||
	SPCR_SPE  = 0x40 // SPI Enable
 | 
			
		||||
	SPCR_DORD = 0x20 // Data Order
 | 
			
		||||
	SPCR_MSTR = 0x10 // Master/Slave Select
 | 
			
		||||
	SPCR_CPOL = 0x8  // Clock polarity
 | 
			
		||||
	SPCR_CPHA = 0x4  // Clock Phase
 | 
			
		||||
	SPCR_SPR  = 0x3  // SPI Clock Rate Selects
 | 
			
		||||
 | 
			
		||||
	// SPSR: SPI Status Register
 | 
			
		||||
	SPSR_SPIF  = 0x80 // SPI Interrupt Flag
 | 
			
		||||
	SPSR_WCOL  = 0x40 // Write Collision Flag
 | 
			
		||||
	SPSR_SPI2X = 0x1  // Double SPI Speed Bit
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
// Bitfields for CPU: CPU Registers
 | 
			
		||||
const (
 | 
			
		||||
	// SREG: Status Register
 | 
			
		||||
	SREG_I = 0x80 // Global Interrupt Enable
 | 
			
		||||
	SREG_T = 0x40 // Bit Copy Storage
 | 
			
		||||
	SREG_H = 0x20 // Half Carry Flag
 | 
			
		||||
	SREG_S = 0x10 // Sign Bit
 | 
			
		||||
	SREG_V = 0x8  // Two's Complement Overflow Flag
 | 
			
		||||
	SREG_N = 0x4  // Negative Flag
 | 
			
		||||
	SREG_Z = 0x2  // Zero Flag
 | 
			
		||||
	SREG_C = 0x1  // Carry Flag
 | 
			
		||||
 | 
			
		||||
	// OSCCAL: Oscillator Calibration Value
 | 
			
		||||
	OSCCAL_OSCCAL = 0xff // Oscillator Calibration
 | 
			
		||||
 | 
			
		||||
	// CLKPR: Clock prescale register
 | 
			
		||||
	CLKPR_CLKPCE = 0x80 // Clock Prescaler Change Enable
 | 
			
		||||
	CLKPR_CLKPS  = 0xf  // Clock Prescaler Select Bits
 | 
			
		||||
 | 
			
		||||
	// SFIOR: Special Function IO Register
 | 
			
		||||
	SFIOR_TSM    = 0x80 // Timer/Counter Synchronization Mode
 | 
			
		||||
	SFIOR_XMBK   = 0x40 // External Memory Bus Keeper Enable
 | 
			
		||||
	SFIOR_XMM    = 0x38 // External Memory High Mask Bits
 | 
			
		||||
	SFIOR_PUD    = 0x4  // Pull-up Disable
 | 
			
		||||
	SFIOR_PSR2   = 0x2  // Prescaler Reset Timer/Counter2
 | 
			
		||||
	SFIOR_PSR310 = 0x1  // Prescaler Reset Timer/Counter3, Timer/Counter1 and Timer/Counter0
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
// Bitfields for JTAG: JTAG Interface
 | 
			
		||||
const (
 | 
			
		||||
	// OCDR: On-Chip Debug Related Register in I/O Memory
 | 
			
		||||
	OCDR_OCDR = 0xff // On-Chip Debug Register Bits
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
// Bitfields for BOOT_LOAD: Bootloader
 | 
			
		||||
const (
 | 
			
		||||
	// SPMCR: Store Program Memory Control Register
 | 
			
		||||
	SPMCR_SPMIE  = 0x80 // SPM Interrupt Enable
 | 
			
		||||
	SPMCR_RWWSB  = 0x40 // Read While Write Section Busy
 | 
			
		||||
	SPMCR_RWWSRE = 0x10 // Read While Write secion read enable
 | 
			
		||||
	SPMCR_BLBSET = 0x8  // Boot Lock Bit Set
 | 
			
		||||
	SPMCR_PGWRT  = 0x4  // Page Write
 | 
			
		||||
	SPMCR_PGERS  = 0x2  // Page Erase
 | 
			
		||||
	SPMCR_SPMEN  = 0x1  // Store Program Memory Enable
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
// Bitfields for EEPROM: EEPROM
 | 
			
		||||
const (
 | 
			
		||||
	// EEARL: EEPROM Address Register Bytes
 | 
			
		||||
 | 
			
		||||
	// EEARH: EEPROM Address Register Bytes
 | 
			
		||||
	EEAR_EEAR = 0x1ff // EEPROM Address Register bits
 | 
			
		||||
 | 
			
		||||
	// EEDR: EEPROM Data Register
 | 
			
		||||
	EEDR_EEDR = 0xff // EEPROM Data Register bits
 | 
			
		||||
 | 
			
		||||
	// EECR: EEPROM Control Register
 | 
			
		||||
	EECR_EERIE = 0x8 // EEPROM Ready Interrupt Enable
 | 
			
		||||
	EECR_EEMWE = 0x4 // EEPROM Master Write Enable
 | 
			
		||||
	EECR_EEWE  = 0x2 // EEPROM Write Enable
 | 
			
		||||
	EECR_EERE  = 0x1 // EEPROM Read Enable
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
// Bitfields for TC8: Timer/Counter, 8-bit
 | 
			
		||||
const (
 | 
			
		||||
	// TCCR0: Timer/Counter 0 Control Register
 | 
			
		||||
	TCCR0_FOC0  = 0x80 // Force Output Compare
 | 
			
		||||
	TCCR0_WGM00 = 0x40 // Waveform Generation Mode 0
 | 
			
		||||
	TCCR0_COM0  = 0x30 // Compare Match Output Modes
 | 
			
		||||
	TCCR0_WGM01 = 0x8  // Waveform Generation Mode 1
 | 
			
		||||
	TCCR0_CS0   = 0x7  // Clock Selects
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
// Bitfields for WDT: Watchdog Timer
 | 
			
		||||
const (
 | 
			
		||||
	// WDTCR: Watchdog Timer Control Register
 | 
			
		||||
	WDTCR_WDCE = 0x10 // Watchdog Change Enable
 | 
			
		||||
	WDTCR_WDE  = 0x8  // Watch Dog Enable
 | 
			
		||||
	WDTCR_WDP  = 0x7  // Watch Dog Timer Prescaler bits
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
// Bitfields for EXINT: External Interrupts
 | 
			
		||||
const (
 | 
			
		||||
	// GICR: General Interrupt Control Register
 | 
			
		||||
	GICR_INT0  = 0x40 // External Interrupt Request 0 Enable
 | 
			
		||||
	GICR_INT1  = 0x80 // External Interrupt Request 1 Enable
 | 
			
		||||
	GICR_INT2  = 0x20 // External Interrupt Request 2 Enable
 | 
			
		||||
	GICR_PCIE  = 0x18 // Pin Change Interrupt Enables
 | 
			
		||||
	GICR_IVSEL = 0x2  // Interrupt Vector Select
 | 
			
		||||
	GICR_IVCE  = 0x1  // Interrupt Vector Change Enable
 | 
			
		||||
 | 
			
		||||
	// GIFR: General Interrupt Flag Register
 | 
			
		||||
	GIFR_INTF  = 0xc0 // External Interrupt Flags
 | 
			
		||||
	GIFR_INTF2 = 0x20 // External Interrupt Flag 2
 | 
			
		||||
	GIFR_PCIF  = 0x18 // Pin Change Interrupt Flags
 | 
			
		||||
 | 
			
		||||
	// PCMSK1: Pin Change Mask Register 1
 | 
			
		||||
	PCMSK1_PCINT = 0xff // Pin Change Interrupt mask bits
 | 
			
		||||
 | 
			
		||||
	// PCMSK0: Pin Change Enable Mask
 | 
			
		||||
	PCMSK0_PCINT = 0xff // Pin Change Interrupt mask bits
 | 
			
		||||
)
 | 
			
		||||
							
								
								
									
										6
									
								
								src/device/avr/atmega162.ld
									
										
									
									
									
										Обычный файл
									
								
							
							
						
						
									
										6
									
								
								src/device/avr/atmega162.ld
									
										
									
									
									
										Обычный файл
									
								
							| 
						 | 
				
			
			@ -0,0 +1,6 @@
 | 
			
		|||
/* Automatically generated file. DO NOT EDIT. */
 | 
			
		||||
/* Generated by gen-device.py from ATmega162.atdf, see http://packs.download.atmel.com/ */
 | 
			
		||||
 | 
			
		||||
__flash_size = 0x4000;
 | 
			
		||||
__ram_size   = 0x400;
 | 
			
		||||
__num_isrs   = 28;
 | 
			
		||||
							
								
								
									
										711
									
								
								src/device/avr/atmega164a.go
									
										
									
									
									
										Обычный файл
									
								
							
							
						
						
									
										711
									
								
								src/device/avr/atmega164a.go
									
										
									
									
									
										Обычный файл
									
								
							| 
						 | 
				
			
			@ -0,0 +1,711 @@
 | 
			
		|||
// Automatically generated file. DO NOT EDIT.
 | 
			
		||||
// Generated by gen-device.py from ATmega164A.atdf, see http://packs.download.atmel.com/
 | 
			
		||||
 | 
			
		||||
// +build avr,atmega164a
 | 
			
		||||
 | 
			
		||||
// Device information for the ATmega164A.
 | 
			
		||||
//
 | 
			
		||||
package avr
 | 
			
		||||
 | 
			
		||||
// Magic type name for the compiler.
 | 
			
		||||
type __reg uint8
 | 
			
		||||
 | 
			
		||||
// Export this magic type name.
 | 
			
		||||
type RegValue = __reg
 | 
			
		||||
 | 
			
		||||
// Some information about this device.
 | 
			
		||||
const (
 | 
			
		||||
	DEVICE = "ATmega164A"
 | 
			
		||||
	ARCH   = "AVR8"
 | 
			
		||||
	FAMILY = "megaAVR"
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
// Interrupts
 | 
			
		||||
const (
 | 
			
		||||
	IRQ_RESET        = 0  // External Pin,Power-on Reset,Brown-out Reset,Watchdog Reset,and JTAG AVR Reset. See Datasheet.
 | 
			
		||||
	IRQ_INT0         = 1  // External Interrupt Request 0
 | 
			
		||||
	IRQ_INT1         = 2  // External Interrupt Request 1
 | 
			
		||||
	IRQ_INT2         = 3  // External Interrupt Request 2
 | 
			
		||||
	IRQ_PCINT0       = 4  // Pin Change Interrupt Request 0
 | 
			
		||||
	IRQ_PCINT1       = 5  // Pin Change Interrupt Request 1
 | 
			
		||||
	IRQ_PCINT2       = 6  // Pin Change Interrupt Request 2
 | 
			
		||||
	IRQ_PCINT3       = 7  // Pin Change Interrupt Request 3
 | 
			
		||||
	IRQ_WDT          = 8  // Watchdog Time-out Interrupt
 | 
			
		||||
	IRQ_TIMER2_COMPA = 9  // Timer/Counter2 Compare Match A
 | 
			
		||||
	IRQ_TIMER2_COMPB = 10 // Timer/Counter2 Compare Match B
 | 
			
		||||
	IRQ_TIMER2_OVF   = 11 // Timer/Counter2 Overflow
 | 
			
		||||
	IRQ_TIMER1_CAPT  = 12 // Timer/Counter1 Capture Event
 | 
			
		||||
	IRQ_TIMER1_COMPA = 13 // Timer/Counter1 Compare Match A
 | 
			
		||||
	IRQ_TIMER1_COMPB = 14 // Timer/Counter1 Compare Match B
 | 
			
		||||
	IRQ_TIMER1_OVF   = 15 // Timer/Counter1 Overflow
 | 
			
		||||
	IRQ_TIMER0_COMPA = 16 // Timer/Counter0 Compare Match A
 | 
			
		||||
	IRQ_TIMER0_COMPB = 17 // Timer/Counter0 Compare Match B
 | 
			
		||||
	IRQ_TIMER0_OVF   = 18 // Timer/Counter0 Overflow
 | 
			
		||||
	IRQ_SPI_STC      = 19 // SPI Serial Transfer Complete
 | 
			
		||||
	IRQ_USART0_RX    = 20 // USART0, Rx Complete
 | 
			
		||||
	IRQ_USART0_UDRE  = 21 // USART0 Data register Empty
 | 
			
		||||
	IRQ_USART0_TX    = 22 // USART0, Tx Complete
 | 
			
		||||
	IRQ_ANALOG_COMP  = 23 // Analog Comparator
 | 
			
		||||
	IRQ_ADC          = 24 // ADC Conversion Complete
 | 
			
		||||
	IRQ_EE_READY     = 25 // EEPROM Ready
 | 
			
		||||
	IRQ_TWI          = 26 // 2-wire Serial Interface
 | 
			
		||||
	IRQ_SPM_READY    = 27 // Store Program Memory Read
 | 
			
		||||
	IRQ_USART1_RX    = 28 // USART1 RX complete
 | 
			
		||||
	IRQ_USART1_UDRE  = 29 // USART1 Data Register Empty
 | 
			
		||||
	IRQ_USART1_TX    = 30 // USART1 TX complete
 | 
			
		||||
	IRQ_max          = 30 // Highest interrupt number on this device.
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
// Peripherals
 | 
			
		||||
var (
 | 
			
		||||
	// Fuses
 | 
			
		||||
	FUSE = struct {
 | 
			
		||||
		EXTENDED __reg
 | 
			
		||||
		HIGH     __reg
 | 
			
		||||
		LOW      __reg
 | 
			
		||||
	}{
 | 
			
		||||
		EXTENDED: 0x2,
 | 
			
		||||
		HIGH:     0x1,
 | 
			
		||||
		LOW:      0x0,
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	// Lockbits
 | 
			
		||||
	LOCKBIT = struct {
 | 
			
		||||
		LOCKBIT __reg
 | 
			
		||||
	}{
 | 
			
		||||
		LOCKBIT: 0x0,
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	// Analog Comparator
 | 
			
		||||
	AC = struct {
 | 
			
		||||
		ACSR  __reg
 | 
			
		||||
		DIDR1 __reg
 | 
			
		||||
	}{
 | 
			
		||||
		ACSR:  0x50, // Analog Comparator Control And Status Register
 | 
			
		||||
		DIDR1: 0x7f, // Digital Input Disable Register 1
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	// USART
 | 
			
		||||
	USART = struct {
 | 
			
		||||
		UDR0   __reg
 | 
			
		||||
		UCSR0A __reg
 | 
			
		||||
		UCSR0B __reg
 | 
			
		||||
		UCSR0C __reg
 | 
			
		||||
		UBRR0L __reg
 | 
			
		||||
		UBRR0H __reg
 | 
			
		||||
		UDR1   __reg
 | 
			
		||||
		UCSR1A __reg
 | 
			
		||||
		UCSR1B __reg
 | 
			
		||||
		UCSR1C __reg
 | 
			
		||||
		UBRR1L __reg
 | 
			
		||||
		UBRR1H __reg
 | 
			
		||||
	}{
 | 
			
		||||
		UDR0:   0xc6, // USART I/O Data Register
 | 
			
		||||
		UCSR0A: 0xc0, // USART Control and Status Register A
 | 
			
		||||
		UCSR0B: 0xc1, // USART Control and Status Register B
 | 
			
		||||
		UCSR0C: 0xc2, // USART Control and Status Register C
 | 
			
		||||
		UBRR0L: 0xc4, // USART Baud Rate Register  Bytes
 | 
			
		||||
		UBRR0H: 0xc4, // USART Baud Rate Register  Bytes
 | 
			
		||||
		UDR1:   0xce, // USART I/O Data Register
 | 
			
		||||
		UCSR1A: 0xc8, // USART Control and Status Register A
 | 
			
		||||
		UCSR1B: 0xc9, // USART Control and Status Register B
 | 
			
		||||
		UCSR1C: 0xca, // USART Control and Status Register C
 | 
			
		||||
		UBRR1L: 0xcc, // USART Baud Rate Register  Bytes
 | 
			
		||||
		UBRR1H: 0xcc, // USART Baud Rate Register  Bytes
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	// I/O Port
 | 
			
		||||
	PORT = struct {
 | 
			
		||||
		PORTA __reg
 | 
			
		||||
		DDRA  __reg
 | 
			
		||||
		PINA  __reg
 | 
			
		||||
		PORTB __reg
 | 
			
		||||
		DDRB  __reg
 | 
			
		||||
		PINB  __reg
 | 
			
		||||
		PORTC __reg
 | 
			
		||||
		DDRC  __reg
 | 
			
		||||
		PINC  __reg
 | 
			
		||||
		PORTD __reg
 | 
			
		||||
		DDRD  __reg
 | 
			
		||||
		PIND  __reg
 | 
			
		||||
	}{
 | 
			
		||||
		PORTA: 0x22, // Port A Data Register
 | 
			
		||||
		DDRA:  0x21, // Port A Data Direction Register
 | 
			
		||||
		PINA:  0x20, // Port A Input Pins
 | 
			
		||||
		PORTB: 0x25, // Port B Data Register
 | 
			
		||||
		DDRB:  0x24, // Port B Data Direction Register
 | 
			
		||||
		PINB:  0x23, // Port B Input Pins
 | 
			
		||||
		PORTC: 0x28, // Port C Data Register
 | 
			
		||||
		DDRC:  0x27, // Port C Data Direction Register
 | 
			
		||||
		PINC:  0x26, // Port C Input Pins
 | 
			
		||||
		PORTD: 0x2b, // Port D Data Register
 | 
			
		||||
		DDRD:  0x2a, // Port D Data Direction Register
 | 
			
		||||
		PIND:  0x29, // Port D Input Pins
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	// Timer/Counter, 8-bit
 | 
			
		||||
	TC8 = struct {
 | 
			
		||||
		OCR0B  __reg
 | 
			
		||||
		OCR0A  __reg
 | 
			
		||||
		TCNT0  __reg
 | 
			
		||||
		TCCR0B __reg
 | 
			
		||||
		TCCR0A __reg
 | 
			
		||||
		TIMSK0 __reg
 | 
			
		||||
		TIFR0  __reg
 | 
			
		||||
	}{
 | 
			
		||||
		OCR0B:  0x48, // Timer/Counter0 Output Compare Register
 | 
			
		||||
		OCR0A:  0x47, // Timer/Counter0 Output Compare Register
 | 
			
		||||
		TCNT0:  0x46, // Timer/Counter0
 | 
			
		||||
		TCCR0B: 0x45, // Timer/Counter Control Register B
 | 
			
		||||
		TCCR0A: 0x44, // Timer/Counter  Control Register A
 | 
			
		||||
		TIMSK0: 0x6e, // Timer/Counter0 Interrupt Mask Register
 | 
			
		||||
		TIFR0:  0x35, // Timer/Counter0 Interrupt Flag register
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	// Timer/Counter, 8-bit Async
 | 
			
		||||
	TC8_ASYNC = struct {
 | 
			
		||||
		TIMSK2 __reg
 | 
			
		||||
		TIFR2  __reg
 | 
			
		||||
		TCCR2A __reg
 | 
			
		||||
		TCCR2B __reg
 | 
			
		||||
		TCNT2  __reg
 | 
			
		||||
		OCR2B  __reg
 | 
			
		||||
		OCR2A  __reg
 | 
			
		||||
		ASSR   __reg
 | 
			
		||||
	}{
 | 
			
		||||
		TIMSK2: 0x70, // Timer/Counter Interrupt Mask register
 | 
			
		||||
		TIFR2:  0x37, // Timer/Counter Interrupt Flag Register
 | 
			
		||||
		TCCR2A: 0xb0, // Timer/Counter2 Control Register A
 | 
			
		||||
		TCCR2B: 0xb1, // Timer/Counter2 Control Register B
 | 
			
		||||
		TCNT2:  0xb2, // Timer/Counter2
 | 
			
		||||
		OCR2B:  0xb4, // Timer/Counter2 Output Compare Register B
 | 
			
		||||
		OCR2A:  0xb3, // Timer/Counter2 Output Compare Register A
 | 
			
		||||
		ASSR:   0xb6, // Asynchronous Status Register
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	// Watchdog Timer
 | 
			
		||||
	WDT = struct {
 | 
			
		||||
		WDTCSR __reg
 | 
			
		||||
	}{
 | 
			
		||||
		WDTCSR: 0x60, // Watchdog Timer Control Register
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	// JTAG Interface
 | 
			
		||||
	JTAG = struct {
 | 
			
		||||
		OCDR __reg
 | 
			
		||||
	}{
 | 
			
		||||
		OCDR: 0x51, // On-Chip Debug Related Register in I/O Memory
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	// Bootloader
 | 
			
		||||
	BOOT_LOAD = struct {
 | 
			
		||||
		SPMCSR __reg
 | 
			
		||||
	}{
 | 
			
		||||
		SPMCSR: 0x57, // Store Program Memory Control Register
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	// External Interrupts
 | 
			
		||||
	EXINT = struct {
 | 
			
		||||
		EICRA  __reg
 | 
			
		||||
		EIMSK  __reg
 | 
			
		||||
		EIFR   __reg
 | 
			
		||||
		PCMSK3 __reg
 | 
			
		||||
		PCMSK2 __reg
 | 
			
		||||
		PCMSK1 __reg
 | 
			
		||||
		PCMSK0 __reg
 | 
			
		||||
		PCIFR  __reg
 | 
			
		||||
		PCICR  __reg
 | 
			
		||||
	}{
 | 
			
		||||
		EICRA:  0x69, // External Interrupt Control Register A
 | 
			
		||||
		EIMSK:  0x3d, // External Interrupt Mask Register
 | 
			
		||||
		EIFR:   0x3c, // External Interrupt Flag Register
 | 
			
		||||
		PCMSK3: 0x73, // Pin Change Mask Register 3
 | 
			
		||||
		PCMSK2: 0x6d, // Pin Change Mask Register 2
 | 
			
		||||
		PCMSK1: 0x6c, // Pin Change Mask Register 1
 | 
			
		||||
		PCMSK0: 0x6b, // Pin Change Mask Register 0
 | 
			
		||||
		PCIFR:  0x3b, // Pin Change Interrupt Flag Register
 | 
			
		||||
		PCICR:  0x68, // Pin Change Interrupt Control Register
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	// Analog-to-Digital Converter
 | 
			
		||||
	ADC = struct {
 | 
			
		||||
		ADMUX  __reg
 | 
			
		||||
		ADCL   __reg
 | 
			
		||||
		ADCH   __reg
 | 
			
		||||
		ADCSRA __reg
 | 
			
		||||
		DIDR0  __reg
 | 
			
		||||
	}{
 | 
			
		||||
		ADMUX:  0x7c, // The ADC multiplexer Selection Register
 | 
			
		||||
		ADCL:   0x78, // ADC Data Register  Bytes
 | 
			
		||||
		ADCH:   0x78, // ADC Data Register  Bytes
 | 
			
		||||
		ADCSRA: 0x7a, // The ADC Control and Status register A
 | 
			
		||||
		DIDR0:  0x7e, // Digital Input Disable Register
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	// Timer/Counter, 16-bit
 | 
			
		||||
	TC16 = struct {
 | 
			
		||||
		TIMSK1 __reg
 | 
			
		||||
		TIFR1  __reg
 | 
			
		||||
		TCCR1A __reg
 | 
			
		||||
		TCCR1B __reg
 | 
			
		||||
		TCCR1C __reg
 | 
			
		||||
		TCNT1L __reg
 | 
			
		||||
		TCNT1H __reg
 | 
			
		||||
		OCR1AL __reg
 | 
			
		||||
		OCR1AH __reg
 | 
			
		||||
		OCR1BL __reg
 | 
			
		||||
		OCR1BH __reg
 | 
			
		||||
		ICR1L  __reg
 | 
			
		||||
		ICR1H  __reg
 | 
			
		||||
	}{
 | 
			
		||||
		TIMSK1: 0x6f, // Timer/Counter1 Interrupt Mask Register
 | 
			
		||||
		TIFR1:  0x36, // Timer/Counter Interrupt Flag register
 | 
			
		||||
		TCCR1A: 0x80, // Timer/Counter1 Control Register A
 | 
			
		||||
		TCCR1B: 0x81, // Timer/Counter1 Control Register B
 | 
			
		||||
		TCCR1C: 0x82, // Timer/Counter1 Control Register C
 | 
			
		||||
		TCNT1L: 0x84, // Timer/Counter1  Bytes
 | 
			
		||||
		TCNT1H: 0x84, // Timer/Counter1  Bytes
 | 
			
		||||
		OCR1AL: 0x88, // Timer/Counter1 Output Compare Register A  Bytes
 | 
			
		||||
		OCR1AH: 0x88, // Timer/Counter1 Output Compare Register A  Bytes
 | 
			
		||||
		OCR1BL: 0x8a, // Timer/Counter1 Output Compare Register B  Bytes
 | 
			
		||||
		OCR1BH: 0x8a, // Timer/Counter1 Output Compare Register B  Bytes
 | 
			
		||||
		ICR1L:  0x86, // Timer/Counter1 Input Capture Register  Bytes
 | 
			
		||||
		ICR1H:  0x86, // Timer/Counter1 Input Capture Register  Bytes
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	// EEPROM
 | 
			
		||||
	EEPROM = struct {
 | 
			
		||||
		EEARL __reg
 | 
			
		||||
		EEARH __reg
 | 
			
		||||
		EEDR  __reg
 | 
			
		||||
		EECR  __reg
 | 
			
		||||
	}{
 | 
			
		||||
		EEARL: 0x41, // EEPROM Address Register Low Bytes
 | 
			
		||||
		EEARH: 0x41, // EEPROM Address Register Low Bytes
 | 
			
		||||
		EEDR:  0x40, // EEPROM Data Register
 | 
			
		||||
		EECR:  0x3f, // EEPROM Control Register
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	// Serial Peripheral Interface
 | 
			
		||||
	SPI = struct {
 | 
			
		||||
		SPDR0 __reg
 | 
			
		||||
		SPSR0 __reg
 | 
			
		||||
		SPCR0 __reg
 | 
			
		||||
	}{
 | 
			
		||||
		SPDR0: 0x4e, // SPI Data Register
 | 
			
		||||
		SPSR0: 0x4d, // SPI Status Register
 | 
			
		||||
		SPCR0: 0x4c, // SPI Control Register
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	// Two Wire Serial Interface
 | 
			
		||||
	TWI = struct {
 | 
			
		||||
		TWAMR __reg
 | 
			
		||||
		TWBR  __reg
 | 
			
		||||
		TWCR  __reg
 | 
			
		||||
		TWSR  __reg
 | 
			
		||||
		TWDR  __reg
 | 
			
		||||
		TWAR  __reg
 | 
			
		||||
	}{
 | 
			
		||||
		TWAMR: 0xbd, // TWI (Slave) Address Mask Register
 | 
			
		||||
		TWBR:  0xb8, // TWI Bit Rate register
 | 
			
		||||
		TWCR:  0xbc, // TWI Control Register
 | 
			
		||||
		TWSR:  0xb9, // TWI Status Register
 | 
			
		||||
		TWDR:  0xbb, // TWI Data register
 | 
			
		||||
		TWAR:  0xba, // TWI (Slave) Address register
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	// CPU Registers
 | 
			
		||||
	CPU = struct {
 | 
			
		||||
		SREG   __reg
 | 
			
		||||
		SPL    __reg
 | 
			
		||||
		SPH    __reg
 | 
			
		||||
		OSCCAL __reg
 | 
			
		||||
		CLKPR  __reg
 | 
			
		||||
		SMCR   __reg
 | 
			
		||||
		GPIOR2 __reg
 | 
			
		||||
		GPIOR1 __reg
 | 
			
		||||
		GPIOR0 __reg
 | 
			
		||||
		PRR0   __reg
 | 
			
		||||
	}{
 | 
			
		||||
		SREG:   0x5f, // Status Register
 | 
			
		||||
		SPL:    0x5d, // Stack Pointer
 | 
			
		||||
		SPH:    0x5d, // Stack Pointer
 | 
			
		||||
		OSCCAL: 0x66, // Oscillator Calibration Value
 | 
			
		||||
		CLKPR:  0x61,
 | 
			
		||||
		SMCR:   0x53, // Sleep Mode Control Register
 | 
			
		||||
		GPIOR2: 0x4b, // General Purpose IO Register 2
 | 
			
		||||
		GPIOR1: 0x4a, // General Purpose IO Register 1
 | 
			
		||||
		GPIOR0: 0x3e, // General Purpose IO Register 0
 | 
			
		||||
		PRR0:   0x64, // Power Reduction Register0
 | 
			
		||||
	}
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
// Bitfields for FUSE: Fuses
 | 
			
		||||
const (
 | 
			
		||||
	// EXTENDED
 | 
			
		||||
	EXTENDED_BODLEVEL = 0x7 // Brown-out Detector trigger level
 | 
			
		||||
 | 
			
		||||
	// HIGH
 | 
			
		||||
	HIGH_OCDEN   = 0x80 // On-Chip Debug Enabled
 | 
			
		||||
	HIGH_JTAGEN  = 0x40 // JTAG Interface Enabled
 | 
			
		||||
	HIGH_SPIEN   = 0x20 // Serial program downloading (SPI) enabled
 | 
			
		||||
	HIGH_WDTON   = 0x10 // Watchdog timer always on
 | 
			
		||||
	HIGH_EESAVE  = 0x8  // Preserve EEPROM through the Chip Erase cycle
 | 
			
		||||
	HIGH_BOOTSZ  = 0x6  // Select Boot Size
 | 
			
		||||
	HIGH_BOOTRST = 0x1  // Boot Reset vector Enabled
 | 
			
		||||
 | 
			
		||||
	// LOW
 | 
			
		||||
	LOW_CKDIV8    = 0x80 // Divide clock by 8 internally
 | 
			
		||||
	LOW_CKOUT     = 0x40 // Clock output on PORTB1
 | 
			
		||||
	LOW_SUT_CKSEL = 0x3f // Select Clock Source
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
// Bitfields for LOCKBIT: Lockbits
 | 
			
		||||
const (
 | 
			
		||||
	// LOCKBIT
 | 
			
		||||
	LOCKBIT_LB   = 0x3  // Memory Lock
 | 
			
		||||
	LOCKBIT_BLB0 = 0xc  // Boot Loader Protection Mode
 | 
			
		||||
	LOCKBIT_BLB1 = 0x30 // Boot Loader Protection Mode
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
// Bitfields for AC: Analog Comparator
 | 
			
		||||
const (
 | 
			
		||||
	// ACSR: Analog Comparator Control And Status Register
 | 
			
		||||
	ACSR_ACD  = 0x80 // Analog Comparator Disable
 | 
			
		||||
	ACSR_ACBG = 0x40 // Analog Comparator Bandgap Select
 | 
			
		||||
	ACSR_ACO  = 0x20 // Analog Compare Output
 | 
			
		||||
	ACSR_ACI  = 0x10 // Analog Comparator Interrupt Flag
 | 
			
		||||
	ACSR_ACIE = 0x8  // Analog Comparator Interrupt Enable
 | 
			
		||||
	ACSR_ACIC = 0x4  // Analog Comparator Input Capture Enable
 | 
			
		||||
	ACSR_ACIS = 0x3  // Analog Comparator Interrupt Mode Select bits
 | 
			
		||||
 | 
			
		||||
	// DIDR1: Digital Input Disable Register 1
 | 
			
		||||
	DIDR1_AIN1D = 0x2 // AIN1 Digital Input Disable
 | 
			
		||||
	DIDR1_AIN0D = 0x1 // AIN0 Digital Input Disable
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
// Bitfields for USART: USART
 | 
			
		||||
const (
 | 
			
		||||
	// UCSR0A: USART Control and Status Register A
 | 
			
		||||
	UCSR0A_RXC0  = 0x80 // USART Receive Complete
 | 
			
		||||
	UCSR0A_TXC0  = 0x40 // USART Transmitt Complete
 | 
			
		||||
	UCSR0A_UDRE0 = 0x20 // USART Data Register Empty
 | 
			
		||||
	UCSR0A_FE0   = 0x10 // Framing Error
 | 
			
		||||
	UCSR0A_DOR0  = 0x8  // Data overRun
 | 
			
		||||
	UCSR0A_UPE0  = 0x4  // Parity Error
 | 
			
		||||
	UCSR0A_U2X0  = 0x2  // Double the USART transmission speed
 | 
			
		||||
	UCSR0A_MPCM0 = 0x1  // Multi-processor Communication Mode
 | 
			
		||||
 | 
			
		||||
	// UCSR0B: USART Control and Status Register B
 | 
			
		||||
	UCSR0B_RXCIE0 = 0x80 // RX Complete Interrupt Enable
 | 
			
		||||
	UCSR0B_TXCIE0 = 0x40 // TX Complete Interrupt Enable
 | 
			
		||||
	UCSR0B_UDRIE0 = 0x20 // USART Data register Empty Interrupt Enable
 | 
			
		||||
	UCSR0B_RXEN0  = 0x10 // Receiver Enable
 | 
			
		||||
	UCSR0B_TXEN0  = 0x8  // Transmitter Enable
 | 
			
		||||
	UCSR0B_UCSZ02 = 0x4  // Character Size
 | 
			
		||||
	UCSR0B_RXB80  = 0x2  // Receive Data Bit 8
 | 
			
		||||
	UCSR0B_TXB80  = 0x1  // Transmit Data Bit 8
 | 
			
		||||
 | 
			
		||||
	// UCSR0C: USART Control and Status Register C
 | 
			
		||||
	UCSR0C_UMSEL0 = 0xc0 // USART Mode Select
 | 
			
		||||
	UCSR0C_UPM0   = 0x30 // Parity Mode Bits
 | 
			
		||||
	UCSR0C_USBS0  = 0x8  // Stop Bit Select
 | 
			
		||||
	UCSR0C_UCSZ0  = 0x6  // Character Size
 | 
			
		||||
	UCSR0C_UCPOL0 = 0x1  // Clock Polarity
 | 
			
		||||
 | 
			
		||||
	// UCSR1A: USART Control and Status Register A
 | 
			
		||||
	UCSR1A_RXC1  = 0x80 // USART Receive Complete
 | 
			
		||||
	UCSR1A_TXC1  = 0x40 // USART Transmitt Complete
 | 
			
		||||
	UCSR1A_UDRE1 = 0x20 // USART Data Register Empty
 | 
			
		||||
	UCSR1A_FE1   = 0x10 // Framing Error
 | 
			
		||||
	UCSR1A_DOR1  = 0x8  // Data overRun
 | 
			
		||||
	UCSR1A_UPE1  = 0x4  // Parity Error
 | 
			
		||||
	UCSR1A_U2X1  = 0x2  // Double the USART transmission speed
 | 
			
		||||
	UCSR1A_MPCM1 = 0x1  // Multi-processor Communication Mode
 | 
			
		||||
 | 
			
		||||
	// UCSR1B: USART Control and Status Register B
 | 
			
		||||
	UCSR1B_RXCIE1 = 0x80 // RX Complete Interrupt Enable
 | 
			
		||||
	UCSR1B_TXCIE1 = 0x40 // TX Complete Interrupt Enable
 | 
			
		||||
	UCSR1B_UDRIE1 = 0x20 // USART Data register Empty Interrupt Enable
 | 
			
		||||
	UCSR1B_RXEN1  = 0x10 // Receiver Enable
 | 
			
		||||
	UCSR1B_TXEN1  = 0x8  // Transmitter Enable
 | 
			
		||||
	UCSR1B_UCSZ12 = 0x4  // Character Size
 | 
			
		||||
	UCSR1B_RXB81  = 0x2  // Receive Data Bit 8
 | 
			
		||||
	UCSR1B_TXB81  = 0x1  // Transmit Data Bit 8
 | 
			
		||||
 | 
			
		||||
	// UCSR1C: USART Control and Status Register C
 | 
			
		||||
	UCSR1C_UMSEL1 = 0xc0 // USART Mode Select
 | 
			
		||||
	UCSR1C_UPM1   = 0x30 // Parity Mode Bits
 | 
			
		||||
	UCSR1C_USBS1  = 0x8  // Stop Bit Select
 | 
			
		||||
	UCSR1C_UCSZ1  = 0x6  // Character Size
 | 
			
		||||
	UCSR1C_UCPOL1 = 0x1  // Clock Polarity
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
// Bitfields for TC8: Timer/Counter, 8-bit
 | 
			
		||||
const (
 | 
			
		||||
	// TCCR0B: Timer/Counter Control Register B
 | 
			
		||||
	TCCR0B_FOC0A = 0x80 // Force Output Compare A
 | 
			
		||||
	TCCR0B_FOC0B = 0x40 // Force Output Compare B
 | 
			
		||||
	TCCR0B_WGM02 = 0x8
 | 
			
		||||
	TCCR0B_CS0   = 0x7 // Clock Select
 | 
			
		||||
 | 
			
		||||
	// TCCR0A: Timer/Counter  Control Register A
 | 
			
		||||
	TCCR0A_COM0A = 0xc0 // Compare Output Mode, Phase Correct PWM Mode
 | 
			
		||||
	TCCR0A_COM0B = 0x30 // Compare Output Mode, Fast PWm
 | 
			
		||||
	TCCR0A_WGM0  = 0x3  // Waveform Generation Mode
 | 
			
		||||
 | 
			
		||||
	// TIMSK0: Timer/Counter0 Interrupt Mask Register
 | 
			
		||||
	TIMSK0_OCIE0B = 0x4 // Timer/Counter0 Output Compare Match B Interrupt Enable
 | 
			
		||||
	TIMSK0_OCIE0A = 0x2 // Timer/Counter0 Output Compare Match A Interrupt Enable
 | 
			
		||||
	TIMSK0_TOIE0  = 0x1 // Timer/Counter0 Overflow Interrupt Enable
 | 
			
		||||
 | 
			
		||||
	// TIFR0: Timer/Counter0 Interrupt Flag register
 | 
			
		||||
	TIFR0_OCF0B = 0x4 // Timer/Counter0 Output Compare Flag 0B
 | 
			
		||||
	TIFR0_OCF0A = 0x2 // Timer/Counter0 Output Compare Flag 0A
 | 
			
		||||
	TIFR0_TOV0  = 0x1 // Timer/Counter0 Overflow Flag
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
// Bitfields for TC8_ASYNC: Timer/Counter, 8-bit Async
 | 
			
		||||
const (
 | 
			
		||||
	// TIMSK2: Timer/Counter Interrupt Mask register
 | 
			
		||||
	TIMSK2_OCIE2B = 0x4 // Timer/Counter2 Output Compare Match B Interrupt Enable
 | 
			
		||||
	TIMSK2_OCIE2A = 0x2 // Timer/Counter2 Output Compare Match A Interrupt Enable
 | 
			
		||||
	TIMSK2_TOIE2  = 0x1 // Timer/Counter2 Overflow Interrupt Enable
 | 
			
		||||
 | 
			
		||||
	// TIFR2: Timer/Counter Interrupt Flag Register
 | 
			
		||||
	TIFR2_OCF2B = 0x4 // Output Compare Flag 2B
 | 
			
		||||
	TIFR2_OCF2A = 0x2 // Output Compare Flag 2A
 | 
			
		||||
	TIFR2_TOV2  = 0x1 // Timer/Counter2 Overflow Flag
 | 
			
		||||
 | 
			
		||||
	// TCCR2A: Timer/Counter2 Control Register A
 | 
			
		||||
	TCCR2A_COM2A = 0xc0 // Compare Output Mode bits
 | 
			
		||||
	TCCR2A_COM2B = 0x30 // Compare Output Mode bits
 | 
			
		||||
	TCCR2A_WGM2  = 0x3  // Waveform Genration Mode
 | 
			
		||||
 | 
			
		||||
	// TCCR2B: Timer/Counter2 Control Register B
 | 
			
		||||
	TCCR2B_FOC2A = 0x80 // Force Output Compare A
 | 
			
		||||
	TCCR2B_FOC2B = 0x40 // Force Output Compare B
 | 
			
		||||
	TCCR2B_WGM22 = 0x8  // Waveform Generation Mode
 | 
			
		||||
	TCCR2B_CS2   = 0x7  // Clock Select bits
 | 
			
		||||
 | 
			
		||||
	// ASSR: Asynchronous Status Register
 | 
			
		||||
	ASSR_EXCLK   = 0x40 // Enable External Clock Input
 | 
			
		||||
	ASSR_AS2     = 0x20 // Asynchronous Timer/Counter2
 | 
			
		||||
	ASSR_TCN2UB  = 0x10 // Timer/Counter2 Update Busy
 | 
			
		||||
	ASSR_OCR2AUB = 0x8  // Output Compare Register2 Update Busy
 | 
			
		||||
	ASSR_OCR2BUB = 0x4  // Output Compare Register 2 Update Busy
 | 
			
		||||
	ASSR_TCR2AUB = 0x2  // Timer/Counter Control Register2 Update Busy
 | 
			
		||||
	ASSR_TCR2BUB = 0x1  // Timer/Counter Control Register2 Update Busy
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
// Bitfields for WDT: Watchdog Timer
 | 
			
		||||
const (
 | 
			
		||||
	// WDTCSR: Watchdog Timer Control Register
 | 
			
		||||
	WDTCSR_WDIF = 0x80 // Watchdog Timeout Interrupt Flag
 | 
			
		||||
	WDTCSR_WDIE = 0x40 // Watchdog Timeout Interrupt Enable
 | 
			
		||||
	WDTCSR_WDP  = 0x27 // Watchdog Timer Prescaler Bits
 | 
			
		||||
	WDTCSR_WDCE = 0x10 // Watchdog Change Enable
 | 
			
		||||
	WDTCSR_WDE  = 0x8  // Watch Dog Enable
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
// Bitfields for BOOT_LOAD: Bootloader
 | 
			
		||||
const (
 | 
			
		||||
	// SPMCSR: Store Program Memory Control Register
 | 
			
		||||
	SPMCSR_SPMIE  = 0x80 // SPM Interrupt Enable
 | 
			
		||||
	SPMCSR_RWWSB  = 0x40 // Read While Write Section Busy
 | 
			
		||||
	SPMCSR_SIGRD  = 0x20 // Signature Row Read
 | 
			
		||||
	SPMCSR_RWWSRE = 0x10 // Read While Write section read enable
 | 
			
		||||
	SPMCSR_BLBSET = 0x8  // Boot Lock Bit Set
 | 
			
		||||
	SPMCSR_PGWRT  = 0x4  // Page Write
 | 
			
		||||
	SPMCSR_PGERS  = 0x2  // Page Erase
 | 
			
		||||
	SPMCSR_SPMEN  = 0x1  // Store Program Memory Enable
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
// Bitfields for EXINT: External Interrupts
 | 
			
		||||
const (
 | 
			
		||||
	// EICRA: External Interrupt Control Register A
 | 
			
		||||
	EICRA_ISC2 = 0x30 // External Interrupt Sense Control Bit
 | 
			
		||||
	EICRA_ISC1 = 0xc  // External Interrupt Sense Control Bit
 | 
			
		||||
	EICRA_ISC0 = 0x3  // External Interrupt Sense Control Bit
 | 
			
		||||
 | 
			
		||||
	// EIMSK: External Interrupt Mask Register
 | 
			
		||||
	EIMSK_INT = 0x7 // External Interrupt Request 2 Enable
 | 
			
		||||
 | 
			
		||||
	// EIFR: External Interrupt Flag Register
 | 
			
		||||
	EIFR_INTF = 0x7 // External Interrupt Flags
 | 
			
		||||
 | 
			
		||||
	// PCMSK3: Pin Change Mask Register 3
 | 
			
		||||
	PCMSK3_PCINT = 0xff // Pin Change Enable Masks
 | 
			
		||||
 | 
			
		||||
	// PCMSK2: Pin Change Mask Register 2
 | 
			
		||||
	PCMSK2_PCINT = 0xff // Pin Change Enable Masks
 | 
			
		||||
 | 
			
		||||
	// PCMSK1: Pin Change Mask Register 1
 | 
			
		||||
	PCMSK1_PCINT = 0xff // Pin Change Enable Masks
 | 
			
		||||
 | 
			
		||||
	// PCMSK0: Pin Change Mask Register 0
 | 
			
		||||
	PCMSK0_PCINT = 0xff // Pin Change Enable Masks
 | 
			
		||||
 | 
			
		||||
	// PCIFR: Pin Change Interrupt Flag Register
 | 
			
		||||
	PCIFR_PCIF = 0xf // Pin Change Interrupt Flags
 | 
			
		||||
 | 
			
		||||
	// PCICR: Pin Change Interrupt Control Register
 | 
			
		||||
	PCICR_PCIE = 0xf // Pin Change Interrupt Enables
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
// Bitfields for ADC: Analog-to-Digital Converter
 | 
			
		||||
const (
 | 
			
		||||
	// ADMUX: The ADC multiplexer Selection Register
 | 
			
		||||
	ADMUX_REFS  = 0xc0 // Reference Selection Bits
 | 
			
		||||
	ADMUX_ADLAR = 0x20 // Left Adjust Result
 | 
			
		||||
	ADMUX_MUX   = 0x1f // Analog Channel and Gain Selection Bits
 | 
			
		||||
 | 
			
		||||
	// ADCSRA: The ADC Control and Status register A
 | 
			
		||||
	ADCSRA_ADEN  = 0x80 // ADC Enable
 | 
			
		||||
	ADCSRA_ADSC  = 0x40 // ADC Start Conversion
 | 
			
		||||
	ADCSRA_ADATE = 0x20 // ADC  Auto Trigger Enable
 | 
			
		||||
	ADCSRA_ADIF  = 0x10 // ADC Interrupt Flag
 | 
			
		||||
	ADCSRA_ADIE  = 0x8  // ADC Interrupt Enable
 | 
			
		||||
	ADCSRA_ADPS  = 0x7  // ADC  Prescaler Select Bits
 | 
			
		||||
 | 
			
		||||
	// DIDR0: Digital Input Disable Register
 | 
			
		||||
	DIDR0_ADC7D = 0x80
 | 
			
		||||
	DIDR0_ADC6D = 0x40
 | 
			
		||||
	DIDR0_ADC5D = 0x20
 | 
			
		||||
	DIDR0_ADC4D = 0x10
 | 
			
		||||
	DIDR0_ADC3D = 0x8
 | 
			
		||||
	DIDR0_ADC2D = 0x4
 | 
			
		||||
	DIDR0_ADC1D = 0x2
 | 
			
		||||
	DIDR0_ADC0D = 0x1
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
// Bitfields for TC16: Timer/Counter, 16-bit
 | 
			
		||||
const (
 | 
			
		||||
	// TIMSK1: Timer/Counter1 Interrupt Mask Register
 | 
			
		||||
	TIMSK1_ICIE1  = 0x20 // Timer/Counter1 Input Capture Interrupt Enable
 | 
			
		||||
	TIMSK1_OCIE1B = 0x4  // Timer/Counter1 Output Compare B Match Interrupt Enable
 | 
			
		||||
	TIMSK1_OCIE1A = 0x2  // Timer/Counter1 Output Compare A Match Interrupt Enable
 | 
			
		||||
	TIMSK1_TOIE1  = 0x1  // Timer/Counter1 Overflow Interrupt Enable
 | 
			
		||||
 | 
			
		||||
	// TIFR1: Timer/Counter Interrupt Flag register
 | 
			
		||||
	TIFR1_ICF1  = 0x20 // Timer/Counter1 Input Capture Flag
 | 
			
		||||
	TIFR1_OCF1B = 0x4  // Timer/Counter1 Output Compare B Match Flag
 | 
			
		||||
	TIFR1_OCF1A = 0x2  // Timer/Counter1 Output Compare A Match Flag
 | 
			
		||||
	TIFR1_TOV1  = 0x1  // Timer/Counter1 Overflow Flag
 | 
			
		||||
 | 
			
		||||
	// TCCR1A: Timer/Counter1 Control Register A
 | 
			
		||||
	TCCR1A_COM1A = 0xc0 // Compare Output Mode 1A, bits
 | 
			
		||||
	TCCR1A_COM1B = 0x30 // Compare Output Mode 1B, bits
 | 
			
		||||
	TCCR1A_WGM1  = 0x3  // Pulse Width Modulator Select Bits
 | 
			
		||||
 | 
			
		||||
	// TCCR1B: Timer/Counter1 Control Register B
 | 
			
		||||
	TCCR1B_ICNC1 = 0x80 // Input Capture 1 Noise Canceler
 | 
			
		||||
	TCCR1B_ICES1 = 0x40 // Input Capture 1 Edge Select
 | 
			
		||||
	TCCR1B_WGM1  = 0x18 // Waveform Generation Mode Bits
 | 
			
		||||
	TCCR1B_CS1   = 0x7  // Clock Select1 bits
 | 
			
		||||
 | 
			
		||||
	// TCCR1C: Timer/Counter1 Control Register C
 | 
			
		||||
	TCCR1C_FOC1A = 0x80 // Force Output Compare for Channel A
 | 
			
		||||
	TCCR1C_FOC1B = 0x40 // Force Output Compare for Channel B
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
// Bitfields for EEPROM: EEPROM
 | 
			
		||||
const (
 | 
			
		||||
	// EECR: EEPROM Control Register
 | 
			
		||||
	EECR_EEPM  = 0x30 // EEPROM Programming Mode Bits
 | 
			
		||||
	EECR_EERIE = 0x8  // EEPROM Ready Interrupt Enable
 | 
			
		||||
	EECR_EEMPE = 0x4  // EEPROM Master Write Enable
 | 
			
		||||
	EECR_EEPE  = 0x2  // EEPROM Write Enable
 | 
			
		||||
	EECR_EERE  = 0x1  // EEPROM Read Enable
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
// Bitfields for SPI: Serial Peripheral Interface
 | 
			
		||||
const (
 | 
			
		||||
	// SPSR0: SPI Status Register
 | 
			
		||||
	SPSR0_SPIF0  = 0x80 // SPI Interrupt Flag
 | 
			
		||||
	SPSR0_WCOL0  = 0x40 // Write Collision Flag
 | 
			
		||||
	SPSR0_SPI2X0 = 0x1  // Double SPI Speed Bit
 | 
			
		||||
 | 
			
		||||
	// SPCR0: SPI Control Register
 | 
			
		||||
	SPCR0_SPIE0 = 0x80 // SPI Interrupt Enable
 | 
			
		||||
	SPCR0_SPE0  = 0x40 // SPI Enable
 | 
			
		||||
	SPCR0_DORD0 = 0x20 // Data Order
 | 
			
		||||
	SPCR0_MSTR0 = 0x10 // Master/Slave Select
 | 
			
		||||
	SPCR0_CPOL0 = 0x8  // Clock polarity
 | 
			
		||||
	SPCR0_CPHA0 = 0x4  // Clock Phase
 | 
			
		||||
	SPCR0_SPR01 = 0x2  // SPI Clock Rate Select 1
 | 
			
		||||
	SPCR0_SPR00 = 0x1  // SPI Clock Rate Select 0
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
// Bitfields for TWI: Two Wire Serial Interface
 | 
			
		||||
const (
 | 
			
		||||
	// TWAMR: TWI (Slave) Address Mask Register
 | 
			
		||||
	TWAMR_TWAM = 0xfe
 | 
			
		||||
 | 
			
		||||
	// TWCR: TWI Control Register
 | 
			
		||||
	TWCR_TWINT = 0x80 // TWI Interrupt Flag
 | 
			
		||||
	TWCR_TWEA  = 0x40 // TWI Enable Acknowledge Bit
 | 
			
		||||
	TWCR_TWSTA = 0x20 // TWI Start Condition Bit
 | 
			
		||||
	TWCR_TWSTO = 0x10 // TWI Stop Condition Bit
 | 
			
		||||
	TWCR_TWWC  = 0x8  // TWI Write Collition Flag
 | 
			
		||||
	TWCR_TWEN  = 0x4  // TWI Enable Bit
 | 
			
		||||
	TWCR_TWIE  = 0x1  // TWI Interrupt Enable
 | 
			
		||||
 | 
			
		||||
	// TWSR: TWI Status Register
 | 
			
		||||
	TWSR_TWS  = 0xf8 // TWI Status
 | 
			
		||||
	TWSR_TWPS = 0x3  // TWI Prescaler
 | 
			
		||||
 | 
			
		||||
	// TWAR: TWI (Slave) Address register
 | 
			
		||||
	TWAR_TWA   = 0xfe // TWI (Slave) Address register Bits
 | 
			
		||||
	TWAR_TWGCE = 0x1  // TWI General Call Recognition Enable Bit
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
// Bitfields for CPU: CPU Registers
 | 
			
		||||
const (
 | 
			
		||||
	// SREG: Status Register
 | 
			
		||||
	SREG_I = 0x80 // Global Interrupt Enable
 | 
			
		||||
	SREG_T = 0x40 // Bit Copy Storage
 | 
			
		||||
	SREG_H = 0x20 // Half Carry Flag
 | 
			
		||||
	SREG_S = 0x10 // Sign Bit
 | 
			
		||||
	SREG_V = 0x8  // Two's Complement Overflow Flag
 | 
			
		||||
	SREG_N = 0x4  // Negative Flag
 | 
			
		||||
	SREG_Z = 0x2  // Zero Flag
 | 
			
		||||
	SREG_C = 0x1  // Carry Flag
 | 
			
		||||
 | 
			
		||||
	// OSCCAL: Oscillator Calibration Value
 | 
			
		||||
	OSCCAL_OSCCAL = 0xff // Oscillator Calibration
 | 
			
		||||
 | 
			
		||||
	// CLKPR
 | 
			
		||||
	CLKPR_CLKPCE = 0x80
 | 
			
		||||
	CLKPR_CLKPS  = 0xf
 | 
			
		||||
 | 
			
		||||
	// SMCR: Sleep Mode Control Register
 | 
			
		||||
	SMCR_SM = 0xe // Sleep Mode Select bits
 | 
			
		||||
	SMCR_SE = 0x1 // Sleep Enable
 | 
			
		||||
 | 
			
		||||
	// GPIOR2: General Purpose IO Register 2
 | 
			
		||||
	GPIOR2_GPIOR = 0xff // General Purpose IO Register 2 bis
 | 
			
		||||
 | 
			
		||||
	// GPIOR1: General Purpose IO Register 1
 | 
			
		||||
	GPIOR1_GPIOR = 0xff // General Purpose IO Register 1 bis
 | 
			
		||||
 | 
			
		||||
	// GPIOR0: General Purpose IO Register 0
 | 
			
		||||
	GPIOR0_GPIOR07 = 0x80 // General Purpose IO Register 0 bit 7
 | 
			
		||||
	GPIOR0_GPIOR06 = 0x40 // General Purpose IO Register 0 bit 6
 | 
			
		||||
	GPIOR0_GPIOR05 = 0x20 // General Purpose IO Register 0 bit 5
 | 
			
		||||
	GPIOR0_GPIOR04 = 0x10 // General Purpose IO Register 0 bit 4
 | 
			
		||||
	GPIOR0_GPIOR03 = 0x8  // General Purpose IO Register 0 bit 3
 | 
			
		||||
	GPIOR0_GPIOR02 = 0x4  // General Purpose IO Register 0 bit 2
 | 
			
		||||
	GPIOR0_GPIOR01 = 0x2  // General Purpose IO Register 0 bit 1
 | 
			
		||||
	GPIOR0_GPIOR00 = 0x1  // General Purpose IO Register 0 bit 0
 | 
			
		||||
 | 
			
		||||
	// PRR0: Power Reduction Register0
 | 
			
		||||
	PRR0_PRTWI    = 0x80 // Power Reduction TWI
 | 
			
		||||
	PRR0_PRTIM2   = 0x40 // Power Reduction Timer/Counter2
 | 
			
		||||
	PRR0_PRTIM0   = 0x20 // Power Reduction Timer/Counter0
 | 
			
		||||
	PRR0_PRUSART1 = 0x10 // Power Reduction USART1
 | 
			
		||||
	PRR0_PRTIM1   = 0x8  // Power Reduction Timer/Counter1
 | 
			
		||||
	PRR0_PRSPI    = 0x4  // Power Reduction Serial Peripheral Interface
 | 
			
		||||
	PRR0_PRUSART0 = 0x2  // Power Reduction USART0
 | 
			
		||||
	PRR0_PRADC    = 0x1  // Power Reduction ADC
 | 
			
		||||
)
 | 
			
		||||
							
								
								
									
										6
									
								
								src/device/avr/atmega164a.ld
									
										
									
									
									
										Обычный файл
									
								
							
							
						
						
									
										6
									
								
								src/device/avr/atmega164a.ld
									
										
									
									
									
										Обычный файл
									
								
							| 
						 | 
				
			
			@ -0,0 +1,6 @@
 | 
			
		|||
/* Automatically generated file. DO NOT EDIT. */
 | 
			
		||||
/* Generated by gen-device.py from ATmega164A.atdf, see http://packs.download.atmel.com/ */
 | 
			
		||||
 | 
			
		||||
__flash_size = 0x4000;
 | 
			
		||||
__ram_size   = 0x400;
 | 
			
		||||
__num_isrs   = 31;
 | 
			
		||||
							
								
								
									
										711
									
								
								src/device/avr/atmega164p.go
									
										
									
									
									
										Обычный файл
									
								
							
							
						
						
									
										711
									
								
								src/device/avr/atmega164p.go
									
										
									
									
									
										Обычный файл
									
								
							| 
						 | 
				
			
			@ -0,0 +1,711 @@
 | 
			
		|||
// Automatically generated file. DO NOT EDIT.
 | 
			
		||||
// Generated by gen-device.py from ATmega164P.atdf, see http://packs.download.atmel.com/
 | 
			
		||||
 | 
			
		||||
// +build avr,atmega164p
 | 
			
		||||
 | 
			
		||||
// Device information for the ATmega164P.
 | 
			
		||||
//
 | 
			
		||||
package avr
 | 
			
		||||
 | 
			
		||||
// Magic type name for the compiler.
 | 
			
		||||
type __reg uint8
 | 
			
		||||
 | 
			
		||||
// Export this magic type name.
 | 
			
		||||
type RegValue = __reg
 | 
			
		||||
 | 
			
		||||
// Some information about this device.
 | 
			
		||||
const (
 | 
			
		||||
	DEVICE = "ATmega164P"
 | 
			
		||||
	ARCH   = "AVR8"
 | 
			
		||||
	FAMILY = "megaAVR"
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
// Interrupts
 | 
			
		||||
const (
 | 
			
		||||
	IRQ_RESET        = 0  // External Pin,Power-on Reset,Brown-out Reset,Watchdog Reset,and JTAG AVR Reset. See Datasheet.
 | 
			
		||||
	IRQ_INT0         = 1  // External Interrupt Request 0
 | 
			
		||||
	IRQ_INT1         = 2  // External Interrupt Request 1
 | 
			
		||||
	IRQ_INT2         = 3  // External Interrupt Request 2
 | 
			
		||||
	IRQ_PCINT0       = 4  // Pin Change Interrupt Request 0
 | 
			
		||||
	IRQ_PCINT1       = 5  // Pin Change Interrupt Request 1
 | 
			
		||||
	IRQ_PCINT2       = 6  // Pin Change Interrupt Request 2
 | 
			
		||||
	IRQ_PCINT3       = 7  // Pin Change Interrupt Request 3
 | 
			
		||||
	IRQ_WDT          = 8  // Watchdog Time-out Interrupt
 | 
			
		||||
	IRQ_TIMER2_COMPA = 9  // Timer/Counter2 Compare Match A
 | 
			
		||||
	IRQ_TIMER2_COMPB = 10 // Timer/Counter2 Compare Match B
 | 
			
		||||
	IRQ_TIMER2_OVF   = 11 // Timer/Counter2 Overflow
 | 
			
		||||
	IRQ_TIMER1_CAPT  = 12 // Timer/Counter1 Capture Event
 | 
			
		||||
	IRQ_TIMER1_COMPA = 13 // Timer/Counter1 Compare Match A
 | 
			
		||||
	IRQ_TIMER1_COMPB = 14 // Timer/Counter1 Compare Match B
 | 
			
		||||
	IRQ_TIMER1_OVF   = 15 // Timer/Counter1 Overflow
 | 
			
		||||
	IRQ_TIMER0_COMPA = 16 // Timer/Counter0 Compare Match A
 | 
			
		||||
	IRQ_TIMER0_COMPB = 17 // Timer/Counter0 Compare Match B
 | 
			
		||||
	IRQ_TIMER0_OVF   = 18 // Timer/Counter0 Overflow
 | 
			
		||||
	IRQ_SPI_STC      = 19 // SPI Serial Transfer Complete
 | 
			
		||||
	IRQ_USART0_RX    = 20 // USART0, Rx Complete
 | 
			
		||||
	IRQ_USART0_UDRE  = 21 // USART0 Data register Empty
 | 
			
		||||
	IRQ_USART0_TX    = 22 // USART0, Tx Complete
 | 
			
		||||
	IRQ_ANALOG_COMP  = 23 // Analog Comparator
 | 
			
		||||
	IRQ_ADC          = 24 // ADC Conversion Complete
 | 
			
		||||
	IRQ_EE_READY     = 25 // EEPROM Ready
 | 
			
		||||
	IRQ_TWI          = 26 // 2-wire Serial Interface
 | 
			
		||||
	IRQ_SPM_READY    = 27 // Store Program Memory Read
 | 
			
		||||
	IRQ_USART1_RX    = 28 // USART1 RX complete
 | 
			
		||||
	IRQ_USART1_UDRE  = 29 // USART1 Data Register Empty
 | 
			
		||||
	IRQ_USART1_TX    = 30 // USART1 TX complete
 | 
			
		||||
	IRQ_max          = 30 // Highest interrupt number on this device.
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
// Peripherals
 | 
			
		||||
var (
 | 
			
		||||
	// Fuses
 | 
			
		||||
	FUSE = struct {
 | 
			
		||||
		EXTENDED __reg
 | 
			
		||||
		HIGH     __reg
 | 
			
		||||
		LOW      __reg
 | 
			
		||||
	}{
 | 
			
		||||
		EXTENDED: 0x2,
 | 
			
		||||
		HIGH:     0x1,
 | 
			
		||||
		LOW:      0x0,
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	// Lockbits
 | 
			
		||||
	LOCKBIT = struct {
 | 
			
		||||
		LOCKBIT __reg
 | 
			
		||||
	}{
 | 
			
		||||
		LOCKBIT: 0x0,
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	// Analog Comparator
 | 
			
		||||
	AC = struct {
 | 
			
		||||
		ACSR  __reg
 | 
			
		||||
		DIDR1 __reg
 | 
			
		||||
	}{
 | 
			
		||||
		ACSR:  0x50, // Analog Comparator Control And Status Register
 | 
			
		||||
		DIDR1: 0x7f, // Digital Input Disable Register 1
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	// USART
 | 
			
		||||
	USART = struct {
 | 
			
		||||
		UDR0   __reg
 | 
			
		||||
		UCSR0A __reg
 | 
			
		||||
		UCSR0B __reg
 | 
			
		||||
		UCSR0C __reg
 | 
			
		||||
		UBRR0L __reg
 | 
			
		||||
		UBRR0H __reg
 | 
			
		||||
		UDR1   __reg
 | 
			
		||||
		UCSR1A __reg
 | 
			
		||||
		UCSR1B __reg
 | 
			
		||||
		UCSR1C __reg
 | 
			
		||||
		UBRR1L __reg
 | 
			
		||||
		UBRR1H __reg
 | 
			
		||||
	}{
 | 
			
		||||
		UDR0:   0xc6, // USART I/O Data Register
 | 
			
		||||
		UCSR0A: 0xc0, // USART Control and Status Register A
 | 
			
		||||
		UCSR0B: 0xc1, // USART Control and Status Register B
 | 
			
		||||
		UCSR0C: 0xc2, // USART Control and Status Register C
 | 
			
		||||
		UBRR0L: 0xc4, // USART Baud Rate Register Bytes
 | 
			
		||||
		UBRR0H: 0xc4, // USART Baud Rate Register Bytes
 | 
			
		||||
		UDR1:   0xce, // USART I/O Data Register
 | 
			
		||||
		UCSR1A: 0xc8, // USART Control and Status Register A
 | 
			
		||||
		UCSR1B: 0xc9, // USART Control and Status Register B
 | 
			
		||||
		UCSR1C: 0xca, // USART Control and Status Register C
 | 
			
		||||
		UBRR1L: 0xcc, // USART Baud Rate Register  Bytes
 | 
			
		||||
		UBRR1H: 0xcc, // USART Baud Rate Register  Bytes
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	// I/O Port
 | 
			
		||||
	PORT = struct {
 | 
			
		||||
		PORTA __reg
 | 
			
		||||
		DDRA  __reg
 | 
			
		||||
		PINA  __reg
 | 
			
		||||
		PORTB __reg
 | 
			
		||||
		DDRB  __reg
 | 
			
		||||
		PINB  __reg
 | 
			
		||||
		PORTC __reg
 | 
			
		||||
		DDRC  __reg
 | 
			
		||||
		PINC  __reg
 | 
			
		||||
		PORTD __reg
 | 
			
		||||
		DDRD  __reg
 | 
			
		||||
		PIND  __reg
 | 
			
		||||
	}{
 | 
			
		||||
		PORTA: 0x22, // Port A Data Register
 | 
			
		||||
		DDRA:  0x21, // Port A Data Direction Register
 | 
			
		||||
		PINA:  0x20, // Port A Input Pins
 | 
			
		||||
		PORTB: 0x25, // Port B Data Register
 | 
			
		||||
		DDRB:  0x24, // Port B Data Direction Register
 | 
			
		||||
		PINB:  0x23, // Port B Input Pins
 | 
			
		||||
		PORTC: 0x28, // Port C Data Register
 | 
			
		||||
		DDRC:  0x27, // Port C Data Direction Register
 | 
			
		||||
		PINC:  0x26, // Port C Input Pins
 | 
			
		||||
		PORTD: 0x2b, // Port D Data Register
 | 
			
		||||
		DDRD:  0x2a, // Port D Data Direction Register
 | 
			
		||||
		PIND:  0x29, // Port D Input Pins
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	// Timer/Counter, 8-bit
 | 
			
		||||
	TC8 = struct {
 | 
			
		||||
		OCR0B  __reg
 | 
			
		||||
		OCR0A  __reg
 | 
			
		||||
		TCNT0  __reg
 | 
			
		||||
		TCCR0B __reg
 | 
			
		||||
		TCCR0A __reg
 | 
			
		||||
		TIMSK0 __reg
 | 
			
		||||
		TIFR0  __reg
 | 
			
		||||
	}{
 | 
			
		||||
		OCR0B:  0x48, // Timer/Counter0 Output Compare Register
 | 
			
		||||
		OCR0A:  0x47, // Timer/Counter0 Output Compare Register
 | 
			
		||||
		TCNT0:  0x46, // Timer/Counter0
 | 
			
		||||
		TCCR0B: 0x45, // Timer/Counter Control Register B
 | 
			
		||||
		TCCR0A: 0x44, // Timer/Counter  Control Register A
 | 
			
		||||
		TIMSK0: 0x6e, // Timer/Counter0 Interrupt Mask Register
 | 
			
		||||
		TIFR0:  0x35, // Timer/Counter0 Interrupt Flag register
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	// Timer/Counter, 8-bit Async
 | 
			
		||||
	TC8_ASYNC = struct {
 | 
			
		||||
		TIMSK2 __reg
 | 
			
		||||
		TIFR2  __reg
 | 
			
		||||
		TCCR2A __reg
 | 
			
		||||
		TCCR2B __reg
 | 
			
		||||
		TCNT2  __reg
 | 
			
		||||
		OCR2B  __reg
 | 
			
		||||
		OCR2A  __reg
 | 
			
		||||
		ASSR   __reg
 | 
			
		||||
	}{
 | 
			
		||||
		TIMSK2: 0x70, // Timer/Counter Interrupt Mask register
 | 
			
		||||
		TIFR2:  0x37, // Timer/Counter Interrupt Flag Register
 | 
			
		||||
		TCCR2A: 0xb0, // Timer/Counter2 Control Register A
 | 
			
		||||
		TCCR2B: 0xb1, // Timer/Counter2 Control Register B
 | 
			
		||||
		TCNT2:  0xb2, // Timer/Counter2
 | 
			
		||||
		OCR2B:  0xb4, // Timer/Counter2 Output Compare Register B
 | 
			
		||||
		OCR2A:  0xb3, // Timer/Counter2 Output Compare Register A
 | 
			
		||||
		ASSR:   0xb6, // Asynchronous Status Register
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	// Watchdog Timer
 | 
			
		||||
	WDT = struct {
 | 
			
		||||
		WDTCSR __reg
 | 
			
		||||
	}{
 | 
			
		||||
		WDTCSR: 0x60, // Watchdog Timer Control Register
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	// JTAG Interface
 | 
			
		||||
	JTAG = struct {
 | 
			
		||||
		OCDR __reg
 | 
			
		||||
	}{
 | 
			
		||||
		OCDR: 0x51, // On-Chip Debug Related Register in I/O Memory
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	// Bootloader
 | 
			
		||||
	BOOT_LOAD = struct {
 | 
			
		||||
		SPMCSR __reg
 | 
			
		||||
	}{
 | 
			
		||||
		SPMCSR: 0x57, // Store Program Memory Control Register
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	// External Interrupts
 | 
			
		||||
	EXINT = struct {
 | 
			
		||||
		EICRA  __reg
 | 
			
		||||
		EIMSK  __reg
 | 
			
		||||
		EIFR   __reg
 | 
			
		||||
		PCMSK3 __reg
 | 
			
		||||
		PCMSK2 __reg
 | 
			
		||||
		PCMSK1 __reg
 | 
			
		||||
		PCMSK0 __reg
 | 
			
		||||
		PCIFR  __reg
 | 
			
		||||
		PCICR  __reg
 | 
			
		||||
	}{
 | 
			
		||||
		EICRA:  0x69, // External Interrupt Control Register A
 | 
			
		||||
		EIMSK:  0x3d, // External Interrupt Mask Register
 | 
			
		||||
		EIFR:   0x3c, // External Interrupt Flag Register
 | 
			
		||||
		PCMSK3: 0x73, // Pin Change Mask Register 3
 | 
			
		||||
		PCMSK2: 0x6d, // Pin Change Mask Register 2
 | 
			
		||||
		PCMSK1: 0x6c, // Pin Change Mask Register 1
 | 
			
		||||
		PCMSK0: 0x6b, // Pin Change Mask Register 0
 | 
			
		||||
		PCIFR:  0x3b, // Pin Change Interrupt Flag Register
 | 
			
		||||
		PCICR:  0x68, // Pin Change Interrupt Control Register
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	// Analog-to-Digital Converter
 | 
			
		||||
	ADC = struct {
 | 
			
		||||
		ADMUX  __reg
 | 
			
		||||
		ADCL   __reg
 | 
			
		||||
		ADCH   __reg
 | 
			
		||||
		ADCSRA __reg
 | 
			
		||||
		DIDR0  __reg
 | 
			
		||||
	}{
 | 
			
		||||
		ADMUX:  0x7c, // The ADC multiplexer Selection Register
 | 
			
		||||
		ADCL:   0x78, // ADC Data Register  Bytes
 | 
			
		||||
		ADCH:   0x78, // ADC Data Register  Bytes
 | 
			
		||||
		ADCSRA: 0x7a, // The ADC Control and Status register A
 | 
			
		||||
		DIDR0:  0x7e, // Digital Input Disable Register
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	// Timer/Counter, 16-bit
 | 
			
		||||
	TC16 = struct {
 | 
			
		||||
		TIMSK1 __reg
 | 
			
		||||
		TIFR1  __reg
 | 
			
		||||
		TCCR1A __reg
 | 
			
		||||
		TCCR1B __reg
 | 
			
		||||
		TCCR1C __reg
 | 
			
		||||
		TCNT1L __reg
 | 
			
		||||
		TCNT1H __reg
 | 
			
		||||
		OCR1AL __reg
 | 
			
		||||
		OCR1AH __reg
 | 
			
		||||
		OCR1BL __reg
 | 
			
		||||
		OCR1BH __reg
 | 
			
		||||
		ICR1L  __reg
 | 
			
		||||
		ICR1H  __reg
 | 
			
		||||
	}{
 | 
			
		||||
		TIMSK1: 0x6f, // Timer/Counter1 Interrupt Mask Register
 | 
			
		||||
		TIFR1:  0x36, // Timer/Counter Interrupt Flag register
 | 
			
		||||
		TCCR1A: 0x80, // Timer/Counter1 Control Register A
 | 
			
		||||
		TCCR1B: 0x81, // Timer/Counter1 Control Register B
 | 
			
		||||
		TCCR1C: 0x82, // Timer/Counter1 Control Register C
 | 
			
		||||
		TCNT1L: 0x84, // Timer/Counter1  Bytes
 | 
			
		||||
		TCNT1H: 0x84, // Timer/Counter1  Bytes
 | 
			
		||||
		OCR1AL: 0x88, // Timer/Counter1 Output Compare Register A  Bytes
 | 
			
		||||
		OCR1AH: 0x88, // Timer/Counter1 Output Compare Register A  Bytes
 | 
			
		||||
		OCR1BL: 0x8a, // Timer/Counter1 Output Compare Register B  Bytes
 | 
			
		||||
		OCR1BH: 0x8a, // Timer/Counter1 Output Compare Register B  Bytes
 | 
			
		||||
		ICR1L:  0x86, // Timer/Counter1 Input Capture Register  Bytes
 | 
			
		||||
		ICR1H:  0x86, // Timer/Counter1 Input Capture Register  Bytes
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	// EEPROM
 | 
			
		||||
	EEPROM = struct {
 | 
			
		||||
		EEARL __reg
 | 
			
		||||
		EEARH __reg
 | 
			
		||||
		EEDR  __reg
 | 
			
		||||
		EECR  __reg
 | 
			
		||||
	}{
 | 
			
		||||
		EEARL: 0x41, // EEPROM Address Register Low Bytes
 | 
			
		||||
		EEARH: 0x41, // EEPROM Address Register Low Bytes
 | 
			
		||||
		EEDR:  0x40, // EEPROM Data Register
 | 
			
		||||
		EECR:  0x3f, // EEPROM Control Register
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	// Serial Peripheral Interface
 | 
			
		||||
	SPI = struct {
 | 
			
		||||
		SPDR0 __reg
 | 
			
		||||
		SPSR0 __reg
 | 
			
		||||
		SPCR0 __reg
 | 
			
		||||
	}{
 | 
			
		||||
		SPDR0: 0x4e, // SPI Data Register
 | 
			
		||||
		SPSR0: 0x4d, // SPI Status Register
 | 
			
		||||
		SPCR0: 0x4c, // SPI Control Register
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	// Two Wire Serial Interface
 | 
			
		||||
	TWI = struct {
 | 
			
		||||
		TWAMR __reg
 | 
			
		||||
		TWBR  __reg
 | 
			
		||||
		TWCR  __reg
 | 
			
		||||
		TWSR  __reg
 | 
			
		||||
		TWDR  __reg
 | 
			
		||||
		TWAR  __reg
 | 
			
		||||
	}{
 | 
			
		||||
		TWAMR: 0xbd, // TWI (Slave) Address Mask Register
 | 
			
		||||
		TWBR:  0xb8, // TWI Bit Rate register
 | 
			
		||||
		TWCR:  0xbc, // TWI Control Register
 | 
			
		||||
		TWSR:  0xb9, // TWI Status Register
 | 
			
		||||
		TWDR:  0xbb, // TWI Data register
 | 
			
		||||
		TWAR:  0xba, // TWI (Slave) Address register
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	// CPU Registers
 | 
			
		||||
	CPU = struct {
 | 
			
		||||
		SREG   __reg
 | 
			
		||||
		SPL    __reg
 | 
			
		||||
		SPH    __reg
 | 
			
		||||
		OSCCAL __reg
 | 
			
		||||
		CLKPR  __reg
 | 
			
		||||
		SMCR   __reg
 | 
			
		||||
		GPIOR2 __reg
 | 
			
		||||
		GPIOR1 __reg
 | 
			
		||||
		GPIOR0 __reg
 | 
			
		||||
		PRR0   __reg
 | 
			
		||||
	}{
 | 
			
		||||
		SREG:   0x5f, // Status Register
 | 
			
		||||
		SPL:    0x5d, // Stack Pointer
 | 
			
		||||
		SPH:    0x5d, // Stack Pointer
 | 
			
		||||
		OSCCAL: 0x66, // Oscillator Calibration Value
 | 
			
		||||
		CLKPR:  0x61,
 | 
			
		||||
		SMCR:   0x53, // Sleep Mode Control Register
 | 
			
		||||
		GPIOR2: 0x4b, // General Purpose IO Register 2
 | 
			
		||||
		GPIOR1: 0x4a, // General Purpose IO Register 1
 | 
			
		||||
		GPIOR0: 0x3e, // General Purpose IO Register 0
 | 
			
		||||
		PRR0:   0x64, // Power Reduction Register0
 | 
			
		||||
	}
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
// Bitfields for FUSE: Fuses
 | 
			
		||||
const (
 | 
			
		||||
	// EXTENDED
 | 
			
		||||
	EXTENDED_BODLEVEL = 0x7 // Brown-out Detector trigger level
 | 
			
		||||
 | 
			
		||||
	// HIGH
 | 
			
		||||
	HIGH_OCDEN   = 0x80 // On-Chip Debug Enabled
 | 
			
		||||
	HIGH_JTAGEN  = 0x40 // JTAG Interface Enabled
 | 
			
		||||
	HIGH_SPIEN   = 0x20 // Serial program downloading (SPI) enabled
 | 
			
		||||
	HIGH_WDTON   = 0x10 // Watchdog timer always on
 | 
			
		||||
	HIGH_EESAVE  = 0x8  // Preserve EEPROM through the Chip Erase cycle
 | 
			
		||||
	HIGH_BOOTSZ  = 0x6  // Select Boot Size
 | 
			
		||||
	HIGH_BOOTRST = 0x1  // Boot Reset vector Enabled
 | 
			
		||||
 | 
			
		||||
	// LOW
 | 
			
		||||
	LOW_CKDIV8    = 0x80 // Divide clock by 8 internally
 | 
			
		||||
	LOW_CKOUT     = 0x40 // Clock output on PORTB1
 | 
			
		||||
	LOW_SUT_CKSEL = 0x3f // Select Clock Source
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
// Bitfields for LOCKBIT: Lockbits
 | 
			
		||||
const (
 | 
			
		||||
	// LOCKBIT
 | 
			
		||||
	LOCKBIT_LB   = 0x3  // Memory Lock
 | 
			
		||||
	LOCKBIT_BLB0 = 0xc  // Boot Loader Protection Mode
 | 
			
		||||
	LOCKBIT_BLB1 = 0x30 // Boot Loader Protection Mode
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
// Bitfields for AC: Analog Comparator
 | 
			
		||||
const (
 | 
			
		||||
	// ACSR: Analog Comparator Control And Status Register
 | 
			
		||||
	ACSR_ACD  = 0x80 // Analog Comparator Disable
 | 
			
		||||
	ACSR_ACBG = 0x40 // Analog Comparator Bandgap Select
 | 
			
		||||
	ACSR_ACO  = 0x20 // Analog Compare Output
 | 
			
		||||
	ACSR_ACI  = 0x10 // Analog Comparator Interrupt Flag
 | 
			
		||||
	ACSR_ACIE = 0x8  // Analog Comparator Interrupt Enable
 | 
			
		||||
	ACSR_ACIC = 0x4  // Analog Comparator Input Capture Enable
 | 
			
		||||
	ACSR_ACIS = 0x3  // Analog Comparator Interrupt Mode Select bits
 | 
			
		||||
 | 
			
		||||
	// DIDR1: Digital Input Disable Register 1
 | 
			
		||||
	DIDR1_AIN1D = 0x2 // AIN1 Digital Input Disable
 | 
			
		||||
	DIDR1_AIN0D = 0x1 // AIN0 Digital Input Disable
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
// Bitfields for USART: USART
 | 
			
		||||
const (
 | 
			
		||||
	// UCSR0A: USART Control and Status Register A
 | 
			
		||||
	UCSR0A_RXC0  = 0x80 // USART Receive Complete
 | 
			
		||||
	UCSR0A_TXC0  = 0x40 // USART Transmitt Complete
 | 
			
		||||
	UCSR0A_UDRE0 = 0x20 // USART Data Register Empty
 | 
			
		||||
	UCSR0A_FE0   = 0x10 // Framing Error
 | 
			
		||||
	UCSR0A_DOR0  = 0x8  // Data overRun
 | 
			
		||||
	UCSR0A_UPE0  = 0x4  // Parity Error
 | 
			
		||||
	UCSR0A_U2X0  = 0x2  // Double the USART transmission speed
 | 
			
		||||
	UCSR0A_MPCM0 = 0x1  // Multi-processor Communication Mode
 | 
			
		||||
 | 
			
		||||
	// UCSR0B: USART Control and Status Register B
 | 
			
		||||
	UCSR0B_RXCIE0 = 0x80 // RX Complete Interrupt Enable
 | 
			
		||||
	UCSR0B_TXCIE0 = 0x40 // TX Complete Interrupt Enable
 | 
			
		||||
	UCSR0B_UDRIE0 = 0x20 // USART Data register Empty Interrupt Enable
 | 
			
		||||
	UCSR0B_RXEN0  = 0x10 // Receiver Enable
 | 
			
		||||
	UCSR0B_TXEN0  = 0x8  // Transmitter Enable
 | 
			
		||||
	UCSR0B_UCSZ02 = 0x4  // Character Size
 | 
			
		||||
	UCSR0B_RXB80  = 0x2  // Receive Data Bit 8
 | 
			
		||||
	UCSR0B_TXB80  = 0x1  // Transmit Data Bit 8
 | 
			
		||||
 | 
			
		||||
	// UCSR0C: USART Control and Status Register C
 | 
			
		||||
	UCSR0C_UMSEL0 = 0xc0 // USART Mode Select
 | 
			
		||||
	UCSR0C_UPM0   = 0x30 // Parity Mode Bits
 | 
			
		||||
	UCSR0C_USBS0  = 0x8  // Stop Bit Select
 | 
			
		||||
	UCSR0C_UCSZ0  = 0x6  // Character Size
 | 
			
		||||
	UCSR0C_UCPOL0 = 0x1  // Clock Polarity
 | 
			
		||||
 | 
			
		||||
	// UCSR1A: USART Control and Status Register A
 | 
			
		||||
	UCSR1A_RXC1  = 0x80 // USART Receive Complete
 | 
			
		||||
	UCSR1A_TXC1  = 0x40 // USART Transmitt Complete
 | 
			
		||||
	UCSR1A_UDRE1 = 0x20 // USART Data Register Empty
 | 
			
		||||
	UCSR1A_FE1   = 0x10 // Framing Error
 | 
			
		||||
	UCSR1A_DOR1  = 0x8  // Data overRun
 | 
			
		||||
	UCSR1A_UPE1  = 0x4  // Parity Error
 | 
			
		||||
	UCSR1A_U2X1  = 0x2  // Double the USART transmission speed
 | 
			
		||||
	UCSR1A_MPCM1 = 0x1  // Multi-processor Communication Mode
 | 
			
		||||
 | 
			
		||||
	// UCSR1B: USART Control and Status Register B
 | 
			
		||||
	UCSR1B_RXCIE1 = 0x80 // RX Complete Interrupt Enable
 | 
			
		||||
	UCSR1B_TXCIE1 = 0x40 // TX Complete Interrupt Enable
 | 
			
		||||
	UCSR1B_UDRIE1 = 0x20 // USART Data register Empty Interrupt Enable
 | 
			
		||||
	UCSR1B_RXEN1  = 0x10 // Receiver Enable
 | 
			
		||||
	UCSR1B_TXEN1  = 0x8  // Transmitter Enable
 | 
			
		||||
	UCSR1B_UCSZ12 = 0x4  // Character Size
 | 
			
		||||
	UCSR1B_RXB81  = 0x2  // Receive Data Bit 8
 | 
			
		||||
	UCSR1B_TXB81  = 0x1  // Transmit Data Bit 8
 | 
			
		||||
 | 
			
		||||
	// UCSR1C: USART Control and Status Register C
 | 
			
		||||
	UCSR1C_UMSEL1 = 0xc0 // USART Mode Select
 | 
			
		||||
	UCSR1C_UPM1   = 0x30 // Parity Mode Bits
 | 
			
		||||
	UCSR1C_USBS1  = 0x8  // Stop Bit Select
 | 
			
		||||
	UCSR1C_UCSZ1  = 0x6  // Character Size
 | 
			
		||||
	UCSR1C_UCPOL1 = 0x1  // Clock Polarity
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
// Bitfields for TC8: Timer/Counter, 8-bit
 | 
			
		||||
const (
 | 
			
		||||
	// TCCR0B: Timer/Counter Control Register B
 | 
			
		||||
	TCCR0B_FOC0A = 0x80 // Force Output Compare A
 | 
			
		||||
	TCCR0B_FOC0B = 0x40 // Force Output Compare B
 | 
			
		||||
	TCCR0B_WGM02 = 0x8
 | 
			
		||||
	TCCR0B_CS0   = 0x7 // Clock Select
 | 
			
		||||
 | 
			
		||||
	// TCCR0A: Timer/Counter  Control Register A
 | 
			
		||||
	TCCR0A_COM0A = 0xc0 // Compare Output Mode, Phase Correct PWM Mode
 | 
			
		||||
	TCCR0A_COM0B = 0x30 // Compare Output Mode, Fast PWm
 | 
			
		||||
	TCCR0A_WGM0  = 0x3  // Waveform Generation Mode
 | 
			
		||||
 | 
			
		||||
	// TIMSK0: Timer/Counter0 Interrupt Mask Register
 | 
			
		||||
	TIMSK0_OCIE0B = 0x4 // Timer/Counter0 Output Compare Match B Interrupt Enable
 | 
			
		||||
	TIMSK0_OCIE0A = 0x2 // Timer/Counter0 Output Compare Match A Interrupt Enable
 | 
			
		||||
	TIMSK0_TOIE0  = 0x1 // Timer/Counter0 Overflow Interrupt Enable
 | 
			
		||||
 | 
			
		||||
	// TIFR0: Timer/Counter0 Interrupt Flag register
 | 
			
		||||
	TIFR0_OCF0B = 0x4 // Timer/Counter0 Output Compare Flag 0B
 | 
			
		||||
	TIFR0_OCF0A = 0x2 // Timer/Counter0 Output Compare Flag 0A
 | 
			
		||||
	TIFR0_TOV0  = 0x1 // Timer/Counter0 Overflow Flag
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
// Bitfields for TC8_ASYNC: Timer/Counter, 8-bit Async
 | 
			
		||||
const (
 | 
			
		||||
	// TIMSK2: Timer/Counter Interrupt Mask register
 | 
			
		||||
	TIMSK2_OCIE2B = 0x4 // Timer/Counter2 Output Compare Match B Interrupt Enable
 | 
			
		||||
	TIMSK2_OCIE2A = 0x2 // Timer/Counter2 Output Compare Match A Interrupt Enable
 | 
			
		||||
	TIMSK2_TOIE2  = 0x1 // Timer/Counter2 Overflow Interrupt Enable
 | 
			
		||||
 | 
			
		||||
	// TIFR2: Timer/Counter Interrupt Flag Register
 | 
			
		||||
	TIFR2_OCF2B = 0x4 // Output Compare Flag 2B
 | 
			
		||||
	TIFR2_OCF2A = 0x2 // Output Compare Flag 2A
 | 
			
		||||
	TIFR2_TOV2  = 0x1 // Timer/Counter2 Overflow Flag
 | 
			
		||||
 | 
			
		||||
	// TCCR2A: Timer/Counter2 Control Register A
 | 
			
		||||
	TCCR2A_COM2A = 0xc0 // Compare Output Mode bits
 | 
			
		||||
	TCCR2A_COM2B = 0x30 // Compare Output Mode bits
 | 
			
		||||
	TCCR2A_WGM2  = 0x3  // Waveform Genration Mode
 | 
			
		||||
 | 
			
		||||
	// TCCR2B: Timer/Counter2 Control Register B
 | 
			
		||||
	TCCR2B_FOC2A = 0x80 // Force Output Compare A
 | 
			
		||||
	TCCR2B_FOC2B = 0x40 // Force Output Compare B
 | 
			
		||||
	TCCR2B_WGM22 = 0x8  // Waveform Generation Mode
 | 
			
		||||
	TCCR2B_CS2   = 0x7  // Clock Select bits
 | 
			
		||||
 | 
			
		||||
	// ASSR: Asynchronous Status Register
 | 
			
		||||
	ASSR_EXCLK   = 0x40 // Enable External Clock Input
 | 
			
		||||
	ASSR_AS2     = 0x20 // Asynchronous Timer/Counter2
 | 
			
		||||
	ASSR_TCN2UB  = 0x10 // Timer/Counter2 Update Busy
 | 
			
		||||
	ASSR_OCR2AUB = 0x8  // Output Compare Register2 Update Busy
 | 
			
		||||
	ASSR_OCR2BUB = 0x4  // Output Compare Register 2 Update Busy
 | 
			
		||||
	ASSR_TCR2AUB = 0x2  // Timer/Counter Control Register2 Update Busy
 | 
			
		||||
	ASSR_TCR2BUB = 0x1  // Timer/Counter Control Register2 Update Busy
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
// Bitfields for WDT: Watchdog Timer
 | 
			
		||||
const (
 | 
			
		||||
	// WDTCSR: Watchdog Timer Control Register
 | 
			
		||||
	WDTCSR_WDIF = 0x80 // Watchdog Timeout Interrupt Flag
 | 
			
		||||
	WDTCSR_WDIE = 0x40 // Watchdog Timeout Interrupt Enable
 | 
			
		||||
	WDTCSR_WDP  = 0x27 // Watchdog Timer Prescaler Bits
 | 
			
		||||
	WDTCSR_WDCE = 0x10 // Watchdog Change Enable
 | 
			
		||||
	WDTCSR_WDE  = 0x8  // Watch Dog Enable
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
// Bitfields for BOOT_LOAD: Bootloader
 | 
			
		||||
const (
 | 
			
		||||
	// SPMCSR: Store Program Memory Control Register
 | 
			
		||||
	SPMCSR_SPMIE  = 0x80 // SPM Interrupt Enable
 | 
			
		||||
	SPMCSR_RWWSB  = 0x40 // Read While Write Section Busy
 | 
			
		||||
	SPMCSR_SIGRD  = 0x20 // Signature Row Read
 | 
			
		||||
	SPMCSR_RWWSRE = 0x10 // Read While Write section read enable
 | 
			
		||||
	SPMCSR_BLBSET = 0x8  // Boot Lock Bit Set
 | 
			
		||||
	SPMCSR_PGWRT  = 0x4  // Page Write
 | 
			
		||||
	SPMCSR_PGERS  = 0x2  // Page Erase
 | 
			
		||||
	SPMCSR_SPMEN  = 0x1  // Store Program Memory Enable
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
// Bitfields for EXINT: External Interrupts
 | 
			
		||||
const (
 | 
			
		||||
	// EICRA: External Interrupt Control Register A
 | 
			
		||||
	EICRA_ISC2 = 0x30 // External Interrupt Sense Control Bit
 | 
			
		||||
	EICRA_ISC1 = 0xc  // External Interrupt Sense Control Bit
 | 
			
		||||
	EICRA_ISC0 = 0x3  // External Interrupt Sense Control Bit
 | 
			
		||||
 | 
			
		||||
	// EIMSK: External Interrupt Mask Register
 | 
			
		||||
	EIMSK_INT = 0x7 // External Interrupt Request 2 Enable
 | 
			
		||||
 | 
			
		||||
	// EIFR: External Interrupt Flag Register
 | 
			
		||||
	EIFR_INTF = 0x7 // External Interrupt Flags
 | 
			
		||||
 | 
			
		||||
	// PCMSK3: Pin Change Mask Register 3
 | 
			
		||||
	PCMSK3_PCINT = 0xff // Pin Change Enable Masks
 | 
			
		||||
 | 
			
		||||
	// PCMSK2: Pin Change Mask Register 2
 | 
			
		||||
	PCMSK2_PCINT = 0xff // Pin Change Enable Masks
 | 
			
		||||
 | 
			
		||||
	// PCMSK1: Pin Change Mask Register 1
 | 
			
		||||
	PCMSK1_PCINT = 0xff // Pin Change Enable Masks
 | 
			
		||||
 | 
			
		||||
	// PCMSK0: Pin Change Mask Register 0
 | 
			
		||||
	PCMSK0_PCINT = 0xff // Pin Change Enable Masks
 | 
			
		||||
 | 
			
		||||
	// PCIFR: Pin Change Interrupt Flag Register
 | 
			
		||||
	PCIFR_PCIF = 0xf // Pin Change Interrupt Flags
 | 
			
		||||
 | 
			
		||||
	// PCICR: Pin Change Interrupt Control Register
 | 
			
		||||
	PCICR_PCIE = 0xf // Pin Change Interrupt Enables
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
// Bitfields for ADC: Analog-to-Digital Converter
 | 
			
		||||
const (
 | 
			
		||||
	// ADMUX: The ADC multiplexer Selection Register
 | 
			
		||||
	ADMUX_REFS  = 0xc0 // Reference Selection Bits
 | 
			
		||||
	ADMUX_ADLAR = 0x20 // Left Adjust Result
 | 
			
		||||
	ADMUX_MUX   = 0x1f // Analog Channel and Gain Selection Bits
 | 
			
		||||
 | 
			
		||||
	// ADCSRA: The ADC Control and Status register A
 | 
			
		||||
	ADCSRA_ADEN  = 0x80 // ADC Enable
 | 
			
		||||
	ADCSRA_ADSC  = 0x40 // ADC Start Conversion
 | 
			
		||||
	ADCSRA_ADATE = 0x20 // ADC  Auto Trigger Enable
 | 
			
		||||
	ADCSRA_ADIF  = 0x10 // ADC Interrupt Flag
 | 
			
		||||
	ADCSRA_ADIE  = 0x8  // ADC Interrupt Enable
 | 
			
		||||
	ADCSRA_ADPS  = 0x7  // ADC  Prescaler Select Bits
 | 
			
		||||
 | 
			
		||||
	// DIDR0: Digital Input Disable Register
 | 
			
		||||
	DIDR0_ADC7D = 0x80
 | 
			
		||||
	DIDR0_ADC6D = 0x40
 | 
			
		||||
	DIDR0_ADC5D = 0x20
 | 
			
		||||
	DIDR0_ADC4D = 0x10
 | 
			
		||||
	DIDR0_ADC3D = 0x8
 | 
			
		||||
	DIDR0_ADC2D = 0x4
 | 
			
		||||
	DIDR0_ADC1D = 0x2
 | 
			
		||||
	DIDR0_ADC0D = 0x1
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
// Bitfields for TC16: Timer/Counter, 16-bit
 | 
			
		||||
const (
 | 
			
		||||
	// TIMSK1: Timer/Counter1 Interrupt Mask Register
 | 
			
		||||
	TIMSK1_ICIE1  = 0x20 // Timer/Counter1 Input Capture Interrupt Enable
 | 
			
		||||
	TIMSK1_OCIE1B = 0x4  // Timer/Counter1 Output Compare B Match Interrupt Enable
 | 
			
		||||
	TIMSK1_OCIE1A = 0x2  // Timer/Counter1 Output Compare A Match Interrupt Enable
 | 
			
		||||
	TIMSK1_TOIE1  = 0x1  // Timer/Counter1 Overflow Interrupt Enable
 | 
			
		||||
 | 
			
		||||
	// TIFR1: Timer/Counter Interrupt Flag register
 | 
			
		||||
	TIFR1_ICF1  = 0x20 // Timer/Counter1 Input Capture Flag
 | 
			
		||||
	TIFR1_OCF1B = 0x4  // Timer/Counter1 Output Compare B Match Flag
 | 
			
		||||
	TIFR1_OCF1A = 0x2  // Timer/Counter1 Output Compare A Match Flag
 | 
			
		||||
	TIFR1_TOV1  = 0x1  // Timer/Counter1 Overflow Flag
 | 
			
		||||
 | 
			
		||||
	// TCCR1A: Timer/Counter1 Control Register A
 | 
			
		||||
	TCCR1A_COM1A = 0xc0 // Compare Output Mode 1A, bits
 | 
			
		||||
	TCCR1A_COM1B = 0x30 // Compare Output Mode 1B, bits
 | 
			
		||||
	TCCR1A_WGM1  = 0x3  // Pulse Width Modulator Select Bits
 | 
			
		||||
 | 
			
		||||
	// TCCR1B: Timer/Counter1 Control Register B
 | 
			
		||||
	TCCR1B_ICNC1 = 0x80 // Input Capture 1 Noise Canceler
 | 
			
		||||
	TCCR1B_ICES1 = 0x40 // Input Capture 1 Edge Select
 | 
			
		||||
	TCCR1B_WGM1  = 0x18 // Waveform Generation Mode Bits
 | 
			
		||||
	TCCR1B_CS1   = 0x7  // Clock Select1 bits
 | 
			
		||||
 | 
			
		||||
	// TCCR1C: Timer/Counter1 Control Register C
 | 
			
		||||
	TCCR1C_FOC1A = 0x80 // Force Output Compare for Channel A
 | 
			
		||||
	TCCR1C_FOC1B = 0x40 // Force Output Compare for Channel B
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
// Bitfields for EEPROM: EEPROM
 | 
			
		||||
const (
 | 
			
		||||
	// EECR: EEPROM Control Register
 | 
			
		||||
	EECR_EEPM  = 0x30 // EEPROM Programming Mode Bits
 | 
			
		||||
	EECR_EERIE = 0x8  // EEPROM Ready Interrupt Enable
 | 
			
		||||
	EECR_EEMPE = 0x4  // EEPROM Master Write Enable
 | 
			
		||||
	EECR_EEPE  = 0x2  // EEPROM Write Enable
 | 
			
		||||
	EECR_EERE  = 0x1  // EEPROM Read Enable
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
// Bitfields for SPI: Serial Peripheral Interface
 | 
			
		||||
const (
 | 
			
		||||
	// SPSR0: SPI Status Register
 | 
			
		||||
	SPSR0_SPIF0  = 0x80 // SPI Interrupt Flag
 | 
			
		||||
	SPSR0_WCOL0  = 0x40 // Write Collision Flag
 | 
			
		||||
	SPSR0_SPI2X0 = 0x1  // Double SPI Speed Bit
 | 
			
		||||
 | 
			
		||||
	// SPCR0: SPI Control Register
 | 
			
		||||
	SPCR0_SPIE0 = 0x80 // SPI Interrupt Enable
 | 
			
		||||
	SPCR0_SPE0  = 0x40 // SPI Enable
 | 
			
		||||
	SPCR0_DORD0 = 0x20 // Data Order
 | 
			
		||||
	SPCR0_MSTR0 = 0x10 // Master/Slave Select
 | 
			
		||||
	SPCR0_CPOL0 = 0x8  // Clock polarity
 | 
			
		||||
	SPCR0_CPHA0 = 0x4  // Clock Phase
 | 
			
		||||
	SPCR0_SPR10 = 0x2  // SPI Clock Rate Select 1
 | 
			
		||||
	SPCR0_SPR00 = 0x1  // SPI Clock Rate Select 0
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
// Bitfields for TWI: Two Wire Serial Interface
 | 
			
		||||
const (
 | 
			
		||||
	// TWAMR: TWI (Slave) Address Mask Register
 | 
			
		||||
	TWAMR_TWAM = 0xfe
 | 
			
		||||
 | 
			
		||||
	// TWCR: TWI Control Register
 | 
			
		||||
	TWCR_TWINT = 0x80 // TWI Interrupt Flag
 | 
			
		||||
	TWCR_TWEA  = 0x40 // TWI Enable Acknowledge Bit
 | 
			
		||||
	TWCR_TWSTA = 0x20 // TWI Start Condition Bit
 | 
			
		||||
	TWCR_TWSTO = 0x10 // TWI Stop Condition Bit
 | 
			
		||||
	TWCR_TWWC  = 0x8  // TWI Write Collition Flag
 | 
			
		||||
	TWCR_TWEN  = 0x4  // TWI Enable Bit
 | 
			
		||||
	TWCR_TWIE  = 0x1  // TWI Interrupt Enable
 | 
			
		||||
 | 
			
		||||
	// TWSR: TWI Status Register
 | 
			
		||||
	TWSR_TWS  = 0xf8 // TWI Status
 | 
			
		||||
	TWSR_TWPS = 0x3  // TWI Prescaler
 | 
			
		||||
 | 
			
		||||
	// TWAR: TWI (Slave) Address register
 | 
			
		||||
	TWAR_TWA   = 0xfe // TWI (Slave) Address register Bits
 | 
			
		||||
	TWAR_TWGCE = 0x1  // TWI General Call Recognition Enable Bit
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
// Bitfields for CPU: CPU Registers
 | 
			
		||||
const (
 | 
			
		||||
	// SREG: Status Register
 | 
			
		||||
	SREG_I = 0x80 // Global Interrupt Enable
 | 
			
		||||
	SREG_T = 0x40 // Bit Copy Storage
 | 
			
		||||
	SREG_H = 0x20 // Half Carry Flag
 | 
			
		||||
	SREG_S = 0x10 // Sign Bit
 | 
			
		||||
	SREG_V = 0x8  // Two's Complement Overflow Flag
 | 
			
		||||
	SREG_N = 0x4  // Negative Flag
 | 
			
		||||
	SREG_Z = 0x2  // Zero Flag
 | 
			
		||||
	SREG_C = 0x1  // Carry Flag
 | 
			
		||||
 | 
			
		||||
	// OSCCAL: Oscillator Calibration Value
 | 
			
		||||
	OSCCAL_OSCCAL = 0xff // Oscillator Calibration
 | 
			
		||||
 | 
			
		||||
	// CLKPR
 | 
			
		||||
	CLKPR_CLKPCE = 0x80
 | 
			
		||||
	CLKPR_CLKPS  = 0xf
 | 
			
		||||
 | 
			
		||||
	// SMCR: Sleep Mode Control Register
 | 
			
		||||
	SMCR_SM = 0xe // Sleep Mode Select bits
 | 
			
		||||
	SMCR_SE = 0x1 // Sleep Enable
 | 
			
		||||
 | 
			
		||||
	// GPIOR2: General Purpose IO Register 2
 | 
			
		||||
	GPIOR2_GPIOR = 0xff // General Purpose IO Register 2 bis
 | 
			
		||||
 | 
			
		||||
	// GPIOR1: General Purpose IO Register 1
 | 
			
		||||
	GPIOR1_GPIOR = 0xff // General Purpose IO Register 1 bis
 | 
			
		||||
 | 
			
		||||
	// GPIOR0: General Purpose IO Register 0
 | 
			
		||||
	GPIOR0_GPIOR07 = 0x80 // General Purpose IO Register 0 bit 7
 | 
			
		||||
	GPIOR0_GPIOR06 = 0x40 // General Purpose IO Register 0 bit 6
 | 
			
		||||
	GPIOR0_GPIOR05 = 0x20 // General Purpose IO Register 0 bit 5
 | 
			
		||||
	GPIOR0_GPIOR04 = 0x10 // General Purpose IO Register 0 bit 4
 | 
			
		||||
	GPIOR0_GPIOR03 = 0x8  // General Purpose IO Register 0 bit 3
 | 
			
		||||
	GPIOR0_GPIOR02 = 0x4  // General Purpose IO Register 0 bit 2
 | 
			
		||||
	GPIOR0_GPIOR01 = 0x2  // General Purpose IO Register 0 bit 1
 | 
			
		||||
	GPIOR0_GPIOR00 = 0x1  // General Purpose IO Register 0 bit 0
 | 
			
		||||
 | 
			
		||||
	// PRR0: Power Reduction Register0
 | 
			
		||||
	PRR0_PRTWI    = 0x80 // Power Reduction TWI
 | 
			
		||||
	PRR0_PRTIM2   = 0x40 // Power Reduction Timer/Counter2
 | 
			
		||||
	PRR0_PRTIM0   = 0x20 // Power Reduction Timer/Counter0
 | 
			
		||||
	PRR0_PRUSART1 = 0x10 // Power Reduction USART1
 | 
			
		||||
	PRR0_PRTIM1   = 0x8  // Power Reduction Timer/Counter1
 | 
			
		||||
	PRR0_PRSPI    = 0x4  // Power Reduction Serial Peripheral Interface
 | 
			
		||||
	PRR0_PRUSART0 = 0x2  // Power Reduction USART0
 | 
			
		||||
	PRR0_PRADC    = 0x1  // Power Reduction ADC
 | 
			
		||||
)
 | 
			
		||||
							
								
								
									
										6
									
								
								src/device/avr/atmega164p.ld
									
										
									
									
									
										Обычный файл
									
								
							
							
						
						
									
										6
									
								
								src/device/avr/atmega164p.ld
									
										
									
									
									
										Обычный файл
									
								
							| 
						 | 
				
			
			@ -0,0 +1,6 @@
 | 
			
		|||
/* Automatically generated file. DO NOT EDIT. */
 | 
			
		||||
/* Generated by gen-device.py from ATmega164P.atdf, see http://packs.download.atmel.com/ */
 | 
			
		||||
 | 
			
		||||
__flash_size = 0x4000;
 | 
			
		||||
__ram_size   = 0x400;
 | 
			
		||||
__num_isrs   = 31;
 | 
			
		||||
							
								
								
									
										711
									
								
								src/device/avr/atmega164pa.go
									
										
									
									
									
										Обычный файл
									
								
							
							
						
						
									
										711
									
								
								src/device/avr/atmega164pa.go
									
										
									
									
									
										Обычный файл
									
								
							| 
						 | 
				
			
			@ -0,0 +1,711 @@
 | 
			
		|||
// Automatically generated file. DO NOT EDIT.
 | 
			
		||||
// Generated by gen-device.py from ATmega164PA.atdf, see http://packs.download.atmel.com/
 | 
			
		||||
 | 
			
		||||
// +build avr,atmega164pa
 | 
			
		||||
 | 
			
		||||
// Device information for the ATmega164PA.
 | 
			
		||||
//
 | 
			
		||||
package avr
 | 
			
		||||
 | 
			
		||||
// Magic type name for the compiler.
 | 
			
		||||
type __reg uint8
 | 
			
		||||
 | 
			
		||||
// Export this magic type name.
 | 
			
		||||
type RegValue = __reg
 | 
			
		||||
 | 
			
		||||
// Some information about this device.
 | 
			
		||||
const (
 | 
			
		||||
	DEVICE = "ATmega164PA"
 | 
			
		||||
	ARCH   = "AVR8"
 | 
			
		||||
	FAMILY = "megaAVR"
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
// Interrupts
 | 
			
		||||
const (
 | 
			
		||||
	IRQ_RESET        = 0  // External Pin,Power-on Reset,Brown-out Reset,Watchdog Reset,and JTAG AVR Reset. See Datasheet.
 | 
			
		||||
	IRQ_INT0         = 1  // External Interrupt Request 0
 | 
			
		||||
	IRQ_INT1         = 2  // External Interrupt Request 1
 | 
			
		||||
	IRQ_INT2         = 3  // External Interrupt Request 2
 | 
			
		||||
	IRQ_PCINT0       = 4  // Pin Change Interrupt Request 0
 | 
			
		||||
	IRQ_PCINT1       = 5  // Pin Change Interrupt Request 1
 | 
			
		||||
	IRQ_PCINT2       = 6  // Pin Change Interrupt Request 2
 | 
			
		||||
	IRQ_PCINT3       = 7  // Pin Change Interrupt Request 3
 | 
			
		||||
	IRQ_WDT          = 8  // Watchdog Time-out Interrupt
 | 
			
		||||
	IRQ_TIMER2_COMPA = 9  // Timer/Counter2 Compare Match A
 | 
			
		||||
	IRQ_TIMER2_COMPB = 10 // Timer/Counter2 Compare Match B
 | 
			
		||||
	IRQ_TIMER2_OVF   = 11 // Timer/Counter2 Overflow
 | 
			
		||||
	IRQ_TIMER1_CAPT  = 12 // Timer/Counter1 Capture Event
 | 
			
		||||
	IRQ_TIMER1_COMPA = 13 // Timer/Counter1 Compare Match A
 | 
			
		||||
	IRQ_TIMER1_COMPB = 14 // Timer/Counter1 Compare Match B
 | 
			
		||||
	IRQ_TIMER1_OVF   = 15 // Timer/Counter1 Overflow
 | 
			
		||||
	IRQ_TIMER0_COMPA = 16 // Timer/Counter0 Compare Match A
 | 
			
		||||
	IRQ_TIMER0_COMPB = 17 // Timer/Counter0 Compare Match B
 | 
			
		||||
	IRQ_TIMER0_OVF   = 18 // Timer/Counter0 Overflow
 | 
			
		||||
	IRQ_SPI_STC      = 19 // SPI Serial Transfer Complete
 | 
			
		||||
	IRQ_USART0_RX    = 20 // USART0, Rx Complete
 | 
			
		||||
	IRQ_USART0_UDRE  = 21 // USART0 Data register Empty
 | 
			
		||||
	IRQ_USART0_TX    = 22 // USART0, Tx Complete
 | 
			
		||||
	IRQ_ANALOG_COMP  = 23 // Analog Comparator
 | 
			
		||||
	IRQ_ADC          = 24 // ADC Conversion Complete
 | 
			
		||||
	IRQ_EE_READY     = 25 // EEPROM Ready
 | 
			
		||||
	IRQ_TWI          = 26 // 2-wire Serial Interface
 | 
			
		||||
	IRQ_SPM_READY    = 27 // Store Program Memory Read
 | 
			
		||||
	IRQ_USART1_RX    = 28 // USART1 RX complete
 | 
			
		||||
	IRQ_USART1_UDRE  = 29 // USART1 Data Register Empty
 | 
			
		||||
	IRQ_USART1_TX    = 30 // USART1 TX complete
 | 
			
		||||
	IRQ_max          = 30 // Highest interrupt number on this device.
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
// Peripherals
 | 
			
		||||
var (
 | 
			
		||||
	// Fuses
 | 
			
		||||
	FUSE = struct {
 | 
			
		||||
		EXTENDED __reg
 | 
			
		||||
		HIGH     __reg
 | 
			
		||||
		LOW      __reg
 | 
			
		||||
	}{
 | 
			
		||||
		EXTENDED: 0x2,
 | 
			
		||||
		HIGH:     0x1,
 | 
			
		||||
		LOW:      0x0,
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	// Lockbits
 | 
			
		||||
	LOCKBIT = struct {
 | 
			
		||||
		LOCKBIT __reg
 | 
			
		||||
	}{
 | 
			
		||||
		LOCKBIT: 0x0,
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	// Analog Comparator
 | 
			
		||||
	AC = struct {
 | 
			
		||||
		ACSR  __reg
 | 
			
		||||
		DIDR1 __reg
 | 
			
		||||
	}{
 | 
			
		||||
		ACSR:  0x50, // Analog Comparator Control And Status Register
 | 
			
		||||
		DIDR1: 0x7f, // Digital Input Disable Register 1
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	// USART
 | 
			
		||||
	USART = struct {
 | 
			
		||||
		UDR0   __reg
 | 
			
		||||
		UCSR0A __reg
 | 
			
		||||
		UCSR0B __reg
 | 
			
		||||
		UCSR0C __reg
 | 
			
		||||
		UBRR0L __reg
 | 
			
		||||
		UBRR0H __reg
 | 
			
		||||
		UDR1   __reg
 | 
			
		||||
		UCSR1A __reg
 | 
			
		||||
		UCSR1B __reg
 | 
			
		||||
		UCSR1C __reg
 | 
			
		||||
		UBRR1L __reg
 | 
			
		||||
		UBRR1H __reg
 | 
			
		||||
	}{
 | 
			
		||||
		UDR0:   0xc6, // USART I/O Data Register
 | 
			
		||||
		UCSR0A: 0xc0, // USART Control and Status Register A
 | 
			
		||||
		UCSR0B: 0xc1, // USART Control and Status Register B
 | 
			
		||||
		UCSR0C: 0xc2, // USART Control and Status Register C
 | 
			
		||||
		UBRR0L: 0xc4, // USART Baud Rate Register  Bytes
 | 
			
		||||
		UBRR0H: 0xc4, // USART Baud Rate Register  Bytes
 | 
			
		||||
		UDR1:   0xce, // USART I/O Data Register
 | 
			
		||||
		UCSR1A: 0xc8, // USART Control and Status Register A
 | 
			
		||||
		UCSR1B: 0xc9, // USART Control and Status Register B
 | 
			
		||||
		UCSR1C: 0xca, // USART Control and Status Register C
 | 
			
		||||
		UBRR1L: 0xcc, // USART Baud Rate Register Bytes
 | 
			
		||||
		UBRR1H: 0xcc, // USART Baud Rate Register Bytes
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	// I/O Port
 | 
			
		||||
	PORT = struct {
 | 
			
		||||
		PORTA __reg
 | 
			
		||||
		DDRA  __reg
 | 
			
		||||
		PINA  __reg
 | 
			
		||||
		PORTB __reg
 | 
			
		||||
		DDRB  __reg
 | 
			
		||||
		PINB  __reg
 | 
			
		||||
		PORTC __reg
 | 
			
		||||
		DDRC  __reg
 | 
			
		||||
		PINC  __reg
 | 
			
		||||
		PORTD __reg
 | 
			
		||||
		DDRD  __reg
 | 
			
		||||
		PIND  __reg
 | 
			
		||||
	}{
 | 
			
		||||
		PORTA: 0x22, // Port A Data Register
 | 
			
		||||
		DDRA:  0x21, // Port A Data Direction Register
 | 
			
		||||
		PINA:  0x20, // Port A Input Pins
 | 
			
		||||
		PORTB: 0x25, // Port B Data Register
 | 
			
		||||
		DDRB:  0x24, // Port B Data Direction Register
 | 
			
		||||
		PINB:  0x23, // Port B Input Pins
 | 
			
		||||
		PORTC: 0x28, // Port C Data Register
 | 
			
		||||
		DDRC:  0x27, // Port C Data Direction Register
 | 
			
		||||
		PINC:  0x26, // Port C Input Pins
 | 
			
		||||
		PORTD: 0x2b, // Port D Data Register
 | 
			
		||||
		DDRD:  0x2a, // Port D Data Direction Register
 | 
			
		||||
		PIND:  0x29, // Port D Input Pins
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	// Timer/Counter, 8-bit
 | 
			
		||||
	TC8 = struct {
 | 
			
		||||
		OCR0B  __reg
 | 
			
		||||
		OCR0A  __reg
 | 
			
		||||
		TCNT0  __reg
 | 
			
		||||
		TCCR0B __reg
 | 
			
		||||
		TCCR0A __reg
 | 
			
		||||
		TIMSK0 __reg
 | 
			
		||||
		TIFR0  __reg
 | 
			
		||||
	}{
 | 
			
		||||
		OCR0B:  0x48, // Timer/Counter0 Output Compare Register
 | 
			
		||||
		OCR0A:  0x47, // Timer/Counter0 Output Compare Register
 | 
			
		||||
		TCNT0:  0x46, // Timer/Counter0
 | 
			
		||||
		TCCR0B: 0x45, // Timer/Counter Control Register B
 | 
			
		||||
		TCCR0A: 0x44, // Timer/Counter  Control Register A
 | 
			
		||||
		TIMSK0: 0x6e, // Timer/Counter0 Interrupt Mask Register
 | 
			
		||||
		TIFR0:  0x35, // Timer/Counter0 Interrupt Flag register
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	// Timer/Counter, 8-bit Async
 | 
			
		||||
	TC8_ASYNC = struct {
 | 
			
		||||
		TIMSK2 __reg
 | 
			
		||||
		TIFR2  __reg
 | 
			
		||||
		TCCR2A __reg
 | 
			
		||||
		TCCR2B __reg
 | 
			
		||||
		TCNT2  __reg
 | 
			
		||||
		OCR2B  __reg
 | 
			
		||||
		OCR2A  __reg
 | 
			
		||||
		ASSR   __reg
 | 
			
		||||
	}{
 | 
			
		||||
		TIMSK2: 0x70, // Timer/Counter Interrupt Mask register
 | 
			
		||||
		TIFR2:  0x37, // Timer/Counter Interrupt Flag Register
 | 
			
		||||
		TCCR2A: 0xb0, // Timer/Counter2 Control Register A
 | 
			
		||||
		TCCR2B: 0xb1, // Timer/Counter2 Control Register B
 | 
			
		||||
		TCNT2:  0xb2, // Timer/Counter2
 | 
			
		||||
		OCR2B:  0xb4, // Timer/Counter2 Output Compare Register B
 | 
			
		||||
		OCR2A:  0xb3, // Timer/Counter2 Output Compare Register A
 | 
			
		||||
		ASSR:   0xb6, // Asynchronous Status Register
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	// Watchdog Timer
 | 
			
		||||
	WDT = struct {
 | 
			
		||||
		WDTCSR __reg
 | 
			
		||||
	}{
 | 
			
		||||
		WDTCSR: 0x60, // Watchdog Timer Control Register
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	// JTAG Interface
 | 
			
		||||
	JTAG = struct {
 | 
			
		||||
		OCDR __reg
 | 
			
		||||
	}{
 | 
			
		||||
		OCDR: 0x51, // On-Chip Debug Related Register in I/O Memory
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	// Bootloader
 | 
			
		||||
	BOOT_LOAD = struct {
 | 
			
		||||
		SPMCSR __reg
 | 
			
		||||
	}{
 | 
			
		||||
		SPMCSR: 0x57, // Store Program Memory Control Register
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	// External Interrupts
 | 
			
		||||
	EXINT = struct {
 | 
			
		||||
		EICRA  __reg
 | 
			
		||||
		EIMSK  __reg
 | 
			
		||||
		EIFR   __reg
 | 
			
		||||
		PCMSK3 __reg
 | 
			
		||||
		PCMSK2 __reg
 | 
			
		||||
		PCMSK1 __reg
 | 
			
		||||
		PCMSK0 __reg
 | 
			
		||||
		PCIFR  __reg
 | 
			
		||||
		PCICR  __reg
 | 
			
		||||
	}{
 | 
			
		||||
		EICRA:  0x69, // External Interrupt Control Register A
 | 
			
		||||
		EIMSK:  0x3d, // External Interrupt Mask Register
 | 
			
		||||
		EIFR:   0x3c, // External Interrupt Flag Register
 | 
			
		||||
		PCMSK3: 0x73, // Pin Change Mask Register 3
 | 
			
		||||
		PCMSK2: 0x6d, // Pin Change Mask Register 2
 | 
			
		||||
		PCMSK1: 0x6c, // Pin Change Mask Register 1
 | 
			
		||||
		PCMSK0: 0x6b, // Pin Change Mask Register 0
 | 
			
		||||
		PCIFR:  0x3b, // Pin Change Interrupt Flag Register
 | 
			
		||||
		PCICR:  0x68, // Pin Change Interrupt Control Register
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	// Analog-to-Digital Converter
 | 
			
		||||
	ADC = struct {
 | 
			
		||||
		ADMUX  __reg
 | 
			
		||||
		ADCL   __reg
 | 
			
		||||
		ADCH   __reg
 | 
			
		||||
		ADCSRA __reg
 | 
			
		||||
		DIDR0  __reg
 | 
			
		||||
	}{
 | 
			
		||||
		ADMUX:  0x7c, // The ADC multiplexer Selection Register
 | 
			
		||||
		ADCL:   0x78, // ADC Data Register  Bytes
 | 
			
		||||
		ADCH:   0x78, // ADC Data Register  Bytes
 | 
			
		||||
		ADCSRA: 0x7a, // The ADC Control and Status register A
 | 
			
		||||
		DIDR0:  0x7e, // Digital Input Disable Register
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	// Timer/Counter, 16-bit
 | 
			
		||||
	TC16 = struct {
 | 
			
		||||
		TIMSK1 __reg
 | 
			
		||||
		TIFR1  __reg
 | 
			
		||||
		TCCR1A __reg
 | 
			
		||||
		TCCR1B __reg
 | 
			
		||||
		TCCR1C __reg
 | 
			
		||||
		TCNT1L __reg
 | 
			
		||||
		TCNT1H __reg
 | 
			
		||||
		OCR1AL __reg
 | 
			
		||||
		OCR1AH __reg
 | 
			
		||||
		OCR1BL __reg
 | 
			
		||||
		OCR1BH __reg
 | 
			
		||||
		ICR1L  __reg
 | 
			
		||||
		ICR1H  __reg
 | 
			
		||||
	}{
 | 
			
		||||
		TIMSK1: 0x6f, // Timer/Counter1 Interrupt Mask Register
 | 
			
		||||
		TIFR1:  0x36, // Timer/Counter Interrupt Flag register
 | 
			
		||||
		TCCR1A: 0x80, // Timer/Counter1 Control Register A
 | 
			
		||||
		TCCR1B: 0x81, // Timer/Counter1 Control Register B
 | 
			
		||||
		TCCR1C: 0x82, // Timer/Counter1 Control Register C
 | 
			
		||||
		TCNT1L: 0x84, // Timer/Counter1  Bytes
 | 
			
		||||
		TCNT1H: 0x84, // Timer/Counter1  Bytes
 | 
			
		||||
		OCR1AL: 0x88, // Timer/Counter1 Output Compare Register A  Bytes
 | 
			
		||||
		OCR1AH: 0x88, // Timer/Counter1 Output Compare Register A  Bytes
 | 
			
		||||
		OCR1BL: 0x8a, // Timer/Counter1 Output Compare Register B  Bytes
 | 
			
		||||
		OCR1BH: 0x8a, // Timer/Counter1 Output Compare Register B  Bytes
 | 
			
		||||
		ICR1L:  0x86, // Timer/Counter1 Input Capture Register  Bytes
 | 
			
		||||
		ICR1H:  0x86, // Timer/Counter1 Input Capture Register  Bytes
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	// EEPROM
 | 
			
		||||
	EEPROM = struct {
 | 
			
		||||
		EEARL __reg
 | 
			
		||||
		EEARH __reg
 | 
			
		||||
		EEDR  __reg
 | 
			
		||||
		EECR  __reg
 | 
			
		||||
	}{
 | 
			
		||||
		EEARL: 0x41, // EEPROM Address Register Low Bytes
 | 
			
		||||
		EEARH: 0x41, // EEPROM Address Register Low Bytes
 | 
			
		||||
		EEDR:  0x40, // EEPROM Data Register
 | 
			
		||||
		EECR:  0x3f, // EEPROM Control Register
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	// Serial Peripheral Interface
 | 
			
		||||
	SPI = struct {
 | 
			
		||||
		SPDR0 __reg
 | 
			
		||||
		SPSR0 __reg
 | 
			
		||||
		SPCR0 __reg
 | 
			
		||||
	}{
 | 
			
		||||
		SPDR0: 0x4e, // SPI Data Register
 | 
			
		||||
		SPSR0: 0x4d, // SPI Status Register
 | 
			
		||||
		SPCR0: 0x4c, // SPI Control Register
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	// Two Wire Serial Interface
 | 
			
		||||
	TWI = struct {
 | 
			
		||||
		TWAMR __reg
 | 
			
		||||
		TWBR  __reg
 | 
			
		||||
		TWCR  __reg
 | 
			
		||||
		TWSR  __reg
 | 
			
		||||
		TWDR  __reg
 | 
			
		||||
		TWAR  __reg
 | 
			
		||||
	}{
 | 
			
		||||
		TWAMR: 0xbd, // TWI (Slave) Address Mask Register
 | 
			
		||||
		TWBR:  0xb8, // TWI Bit Rate register
 | 
			
		||||
		TWCR:  0xbc, // TWI Control Register
 | 
			
		||||
		TWSR:  0xb9, // TWI Status Register
 | 
			
		||||
		TWDR:  0xbb, // TWI Data register
 | 
			
		||||
		TWAR:  0xba, // TWI (Slave) Address register
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	// CPU Registers
 | 
			
		||||
	CPU = struct {
 | 
			
		||||
		SREG   __reg
 | 
			
		||||
		SPL    __reg
 | 
			
		||||
		SPH    __reg
 | 
			
		||||
		OSCCAL __reg
 | 
			
		||||
		CLKPR  __reg
 | 
			
		||||
		SMCR   __reg
 | 
			
		||||
		GPIOR2 __reg
 | 
			
		||||
		GPIOR1 __reg
 | 
			
		||||
		GPIOR0 __reg
 | 
			
		||||
		PRR0   __reg
 | 
			
		||||
	}{
 | 
			
		||||
		SREG:   0x5f, // Status Register
 | 
			
		||||
		SPL:    0x5d, // Stack Pointer
 | 
			
		||||
		SPH:    0x5d, // Stack Pointer
 | 
			
		||||
		OSCCAL: 0x66, // Oscillator Calibration Value
 | 
			
		||||
		CLKPR:  0x61,
 | 
			
		||||
		SMCR:   0x53, // Sleep Mode Control Register
 | 
			
		||||
		GPIOR2: 0x4b, // General Purpose IO Register 2
 | 
			
		||||
		GPIOR1: 0x4a, // General Purpose IO Register 1
 | 
			
		||||
		GPIOR0: 0x3e, // General Purpose IO Register 0
 | 
			
		||||
		PRR0:   0x64, // Power Reduction Register0
 | 
			
		||||
	}
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
// Bitfields for FUSE: Fuses
 | 
			
		||||
const (
 | 
			
		||||
	// EXTENDED
 | 
			
		||||
	EXTENDED_BODLEVEL = 0x7 // Brown-out Detector trigger level
 | 
			
		||||
 | 
			
		||||
	// HIGH
 | 
			
		||||
	HIGH_OCDEN   = 0x80 // On-Chip Debug Enabled
 | 
			
		||||
	HIGH_JTAGEN  = 0x40 // JTAG Interface Enabled
 | 
			
		||||
	HIGH_SPIEN   = 0x20 // Serial program downloading (SPI) enabled
 | 
			
		||||
	HIGH_WDTON   = 0x10 // Watchdog timer always on
 | 
			
		||||
	HIGH_EESAVE  = 0x8  // Preserve EEPROM through the Chip Erase cycle
 | 
			
		||||
	HIGH_BOOTSZ  = 0x6  // Select Boot Size
 | 
			
		||||
	HIGH_BOOTRST = 0x1  // Boot Reset vector Enabled
 | 
			
		||||
 | 
			
		||||
	// LOW
 | 
			
		||||
	LOW_CKDIV8    = 0x80 // Divide clock by 8 internally
 | 
			
		||||
	LOW_CKOUT     = 0x40 // Clock output on PORTB1
 | 
			
		||||
	LOW_SUT_CKSEL = 0x3f // Select Clock Source
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
// Bitfields for LOCKBIT: Lockbits
 | 
			
		||||
const (
 | 
			
		||||
	// LOCKBIT
 | 
			
		||||
	LOCKBIT_LB   = 0x3  // Memory Lock
 | 
			
		||||
	LOCKBIT_BLB0 = 0xc  // Boot Loader Protection Mode
 | 
			
		||||
	LOCKBIT_BLB1 = 0x30 // Boot Loader Protection Mode
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
// Bitfields for AC: Analog Comparator
 | 
			
		||||
const (
 | 
			
		||||
	// ACSR: Analog Comparator Control And Status Register
 | 
			
		||||
	ACSR_ACD  = 0x80 // Analog Comparator Disable
 | 
			
		||||
	ACSR_ACBG = 0x40 // Analog Comparator Bandgap Select
 | 
			
		||||
	ACSR_ACO  = 0x20 // Analog Compare Output
 | 
			
		||||
	ACSR_ACI  = 0x10 // Analog Comparator Interrupt Flag
 | 
			
		||||
	ACSR_ACIE = 0x8  // Analog Comparator Interrupt Enable
 | 
			
		||||
	ACSR_ACIC = 0x4  // Analog Comparator Input Capture Enable
 | 
			
		||||
	ACSR_ACIS = 0x3  // Analog Comparator Interrupt Mode Select bits
 | 
			
		||||
 | 
			
		||||
	// DIDR1: Digital Input Disable Register 1
 | 
			
		||||
	DIDR1_AIN1D = 0x2 // AIN1 Digital Input Disable
 | 
			
		||||
	DIDR1_AIN0D = 0x1 // AIN0 Digital Input Disable
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
// Bitfields for USART: USART
 | 
			
		||||
const (
 | 
			
		||||
	// UCSR0A: USART Control and Status Register A
 | 
			
		||||
	UCSR0A_RXC0  = 0x80 // USART Receive Complete
 | 
			
		||||
	UCSR0A_TXC0  = 0x40 // USART Transmitt Complete
 | 
			
		||||
	UCSR0A_UDRE0 = 0x20 // USART Data Register Empty
 | 
			
		||||
	UCSR0A_FE0   = 0x10 // Framing Error
 | 
			
		||||
	UCSR0A_DOR0  = 0x8  // Data overRun
 | 
			
		||||
	UCSR0A_UPE0  = 0x4  // Parity Error
 | 
			
		||||
	UCSR0A_U2X0  = 0x2  // Double the USART transmission speed
 | 
			
		||||
	UCSR0A_MPCM0 = 0x1  // Multi-processor Communication Mode
 | 
			
		||||
 | 
			
		||||
	// UCSR0B: USART Control and Status Register B
 | 
			
		||||
	UCSR0B_RXCIE0 = 0x80 // RX Complete Interrupt Enable
 | 
			
		||||
	UCSR0B_TXCIE0 = 0x40 // TX Complete Interrupt Enable
 | 
			
		||||
	UCSR0B_UDRIE0 = 0x20 // USART Data register Empty Interrupt Enable
 | 
			
		||||
	UCSR0B_RXEN0  = 0x10 // Receiver Enable
 | 
			
		||||
	UCSR0B_TXEN0  = 0x8  // Transmitter Enable
 | 
			
		||||
	UCSR0B_UCSZ02 = 0x4  // Character Size
 | 
			
		||||
	UCSR0B_RXB80  = 0x2  // Receive Data Bit 8
 | 
			
		||||
	UCSR0B_TXB80  = 0x1  // Transmit Data Bit 8
 | 
			
		||||
 | 
			
		||||
	// UCSR0C: USART Control and Status Register C
 | 
			
		||||
	UCSR0C_UMSEL0 = 0xc0 // USART Mode Select
 | 
			
		||||
	UCSR0C_UPM0   = 0x30 // Parity Mode Bits
 | 
			
		||||
	UCSR0C_USBS0  = 0x8  // Stop Bit Select
 | 
			
		||||
	UCSR0C_UCSZ0  = 0x6  // Character Size
 | 
			
		||||
	UCSR0C_UCPOL0 = 0x1  // Clock Polarity
 | 
			
		||||
 | 
			
		||||
	// UCSR1A: USART Control and Status Register A
 | 
			
		||||
	UCSR1A_RXC1  = 0x80 // USART Receive Complete
 | 
			
		||||
	UCSR1A_TXC1  = 0x40 // USART Transmitt Complete
 | 
			
		||||
	UCSR1A_UDRE1 = 0x20 // USART Data Register Empty
 | 
			
		||||
	UCSR1A_FE1   = 0x10 // Framing Error
 | 
			
		||||
	UCSR1A_DOR1  = 0x8  // Data overRun
 | 
			
		||||
	UCSR1A_UPE1  = 0x4  // Parity Error
 | 
			
		||||
	UCSR1A_U2X1  = 0x2  // Double the USART transmission speed
 | 
			
		||||
	UCSR1A_MPCM1 = 0x1  // Multi-processor Communication Mode
 | 
			
		||||
 | 
			
		||||
	// UCSR1B: USART Control and Status Register B
 | 
			
		||||
	UCSR1B_RXCIE1 = 0x80 // RX Complete Interrupt Enable
 | 
			
		||||
	UCSR1B_TXCIE1 = 0x40 // TX Complete Interrupt Enable
 | 
			
		||||
	UCSR1B_UDRIE1 = 0x20 // USART Data register Empty Interrupt Enable
 | 
			
		||||
	UCSR1B_RXEN1  = 0x10 // Receiver Enable
 | 
			
		||||
	UCSR1B_TXEN1  = 0x8  // Transmitter Enable
 | 
			
		||||
	UCSR1B_UCSZ12 = 0x4  // Character Size
 | 
			
		||||
	UCSR1B_RXB81  = 0x2  // Receive Data Bit 8
 | 
			
		||||
	UCSR1B_TXB81  = 0x1  // Transmit Data Bit 8
 | 
			
		||||
 | 
			
		||||
	// UCSR1C: USART Control and Status Register C
 | 
			
		||||
	UCSR1C_UMSEL1 = 0xc0 // USART Mode Select
 | 
			
		||||
	UCSR1C_UPM1   = 0x30 // Parity Mode Bits
 | 
			
		||||
	UCSR1C_USBS1  = 0x8  // Stop Bit Select
 | 
			
		||||
	UCSR1C_UCSZ1  = 0x6  // Character Size
 | 
			
		||||
	UCSR1C_UCPOL1 = 0x1  // Clock Polarity
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
// Bitfields for TC8: Timer/Counter, 8-bit
 | 
			
		||||
const (
 | 
			
		||||
	// TCCR0B: Timer/Counter Control Register B
 | 
			
		||||
	TCCR0B_FOC0A = 0x80 // Force Output Compare A
 | 
			
		||||
	TCCR0B_FOC0B = 0x40 // Force Output Compare B
 | 
			
		||||
	TCCR0B_WGM02 = 0x8
 | 
			
		||||
	TCCR0B_CS0   = 0x7 // Clock Select
 | 
			
		||||
 | 
			
		||||
	// TCCR0A: Timer/Counter  Control Register A
 | 
			
		||||
	TCCR0A_COM0A = 0xc0 // Compare Output Mode, Phase Correct PWM Mode
 | 
			
		||||
	TCCR0A_COM0B = 0x30 // Compare Output Mode, Fast PWm
 | 
			
		||||
	TCCR0A_WGM0  = 0x3  // Waveform Generation Mode
 | 
			
		||||
 | 
			
		||||
	// TIMSK0: Timer/Counter0 Interrupt Mask Register
 | 
			
		||||
	TIMSK0_OCIE0B = 0x4 // Timer/Counter0 Output Compare Match B Interrupt Enable
 | 
			
		||||
	TIMSK0_OCIE0A = 0x2 // Timer/Counter0 Output Compare Match A Interrupt Enable
 | 
			
		||||
	TIMSK0_TOIE0  = 0x1 // Timer/Counter0 Overflow Interrupt Enable
 | 
			
		||||
 | 
			
		||||
	// TIFR0: Timer/Counter0 Interrupt Flag register
 | 
			
		||||
	TIFR0_OCF0B = 0x4 // Timer/Counter0 Output Compare Flag 0B
 | 
			
		||||
	TIFR0_OCF0A = 0x2 // Timer/Counter0 Output Compare Flag 0A
 | 
			
		||||
	TIFR0_TOV0  = 0x1 // Timer/Counter0 Overflow Flag
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
// Bitfields for TC8_ASYNC: Timer/Counter, 8-bit Async
 | 
			
		||||
const (
 | 
			
		||||
	// TIMSK2: Timer/Counter Interrupt Mask register
 | 
			
		||||
	TIMSK2_OCIE2B = 0x4 // Timer/Counter2 Output Compare Match B Interrupt Enable
 | 
			
		||||
	TIMSK2_OCIE2A = 0x2 // Timer/Counter2 Output Compare Match A Interrupt Enable
 | 
			
		||||
	TIMSK2_TOIE2  = 0x1 // Timer/Counter2 Overflow Interrupt Enable
 | 
			
		||||
 | 
			
		||||
	// TIFR2: Timer/Counter Interrupt Flag Register
 | 
			
		||||
	TIFR2_OCF2B = 0x4 // Output Compare Flag 2B
 | 
			
		||||
	TIFR2_OCF2A = 0x2 // Output Compare Flag 2A
 | 
			
		||||
	TIFR2_TOV2  = 0x1 // Timer/Counter2 Overflow Flag
 | 
			
		||||
 | 
			
		||||
	// TCCR2A: Timer/Counter2 Control Register A
 | 
			
		||||
	TCCR2A_COM2A = 0xc0 // Compare Output Mode bits
 | 
			
		||||
	TCCR2A_COM2B = 0x30 // Compare Output Mode bits
 | 
			
		||||
	TCCR2A_WGM2  = 0x3  // Waveform Genration Mode
 | 
			
		||||
 | 
			
		||||
	// TCCR2B: Timer/Counter2 Control Register B
 | 
			
		||||
	TCCR2B_FOC2A = 0x80 // Force Output Compare A
 | 
			
		||||
	TCCR2B_FOC2B = 0x40 // Force Output Compare B
 | 
			
		||||
	TCCR2B_WGM22 = 0x8  // Waveform Generation Mode
 | 
			
		||||
	TCCR2B_CS2   = 0x7  // Clock Select bits
 | 
			
		||||
 | 
			
		||||
	// ASSR: Asynchronous Status Register
 | 
			
		||||
	ASSR_EXCLK   = 0x40 // Enable External Clock Input
 | 
			
		||||
	ASSR_AS2     = 0x20 // Asynchronous Timer/Counter2
 | 
			
		||||
	ASSR_TCN2UB  = 0x10 // Timer/Counter2 Update Busy
 | 
			
		||||
	ASSR_OCR2AUB = 0x8  // Output Compare Register2 Update Busy
 | 
			
		||||
	ASSR_OCR2BUB = 0x4  // Output Compare Register 2 Update Busy
 | 
			
		||||
	ASSR_TCR2AUB = 0x2  // Timer/Counter Control Register2 Update Busy
 | 
			
		||||
	ASSR_TCR2BUB = 0x1  // Timer/Counter Control Register2 Update Busy
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
// Bitfields for WDT: Watchdog Timer
 | 
			
		||||
const (
 | 
			
		||||
	// WDTCSR: Watchdog Timer Control Register
 | 
			
		||||
	WDTCSR_WDIF = 0x80 // Watchdog Timeout Interrupt Flag
 | 
			
		||||
	WDTCSR_WDIE = 0x40 // Watchdog Timeout Interrupt Enable
 | 
			
		||||
	WDTCSR_WDP  = 0x27 // Watchdog Timer Prescaler Bits
 | 
			
		||||
	WDTCSR_WDCE = 0x10 // Watchdog Change Enable
 | 
			
		||||
	WDTCSR_WDE  = 0x8  // Watch Dog Enable
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
// Bitfields for BOOT_LOAD: Bootloader
 | 
			
		||||
const (
 | 
			
		||||
	// SPMCSR: Store Program Memory Control Register
 | 
			
		||||
	SPMCSR_SPMIE  = 0x80 // SPM Interrupt Enable
 | 
			
		||||
	SPMCSR_RWWSB  = 0x40 // Read While Write Section Busy
 | 
			
		||||
	SPMCSR_SIGRD  = 0x20 // Signature Row Read
 | 
			
		||||
	SPMCSR_RWWSRE = 0x10 // Read While Write section read enable
 | 
			
		||||
	SPMCSR_BLBSET = 0x8  // Boot Lock Bit Set
 | 
			
		||||
	SPMCSR_PGWRT  = 0x4  // Page Write
 | 
			
		||||
	SPMCSR_PGERS  = 0x2  // Page Erase
 | 
			
		||||
	SPMCSR_SPMEN  = 0x1  // Store Program Memory Enable
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
// Bitfields for EXINT: External Interrupts
 | 
			
		||||
const (
 | 
			
		||||
	// EICRA: External Interrupt Control Register A
 | 
			
		||||
	EICRA_ISC2 = 0x30 // External Interrupt Sense Control Bit
 | 
			
		||||
	EICRA_ISC1 = 0xc  // External Interrupt Sense Control Bit
 | 
			
		||||
	EICRA_ISC0 = 0x3  // External Interrupt Sense Control Bit
 | 
			
		||||
 | 
			
		||||
	// EIMSK: External Interrupt Mask Register
 | 
			
		||||
	EIMSK_INT = 0x7 // External Interrupt Request 2 Enable
 | 
			
		||||
 | 
			
		||||
	// EIFR: External Interrupt Flag Register
 | 
			
		||||
	EIFR_INTF = 0x7 // External Interrupt Flags
 | 
			
		||||
 | 
			
		||||
	// PCMSK3: Pin Change Mask Register 3
 | 
			
		||||
	PCMSK3_PCINT = 0xff // Pin Change Enable Masks
 | 
			
		||||
 | 
			
		||||
	// PCMSK2: Pin Change Mask Register 2
 | 
			
		||||
	PCMSK2_PCINT = 0xff // Pin Change Enable Masks
 | 
			
		||||
 | 
			
		||||
	// PCMSK1: Pin Change Mask Register 1
 | 
			
		||||
	PCMSK1_PCINT = 0xff // Pin Change Enable Masks
 | 
			
		||||
 | 
			
		||||
	// PCMSK0: Pin Change Mask Register 0
 | 
			
		||||
	PCMSK0_PCINT = 0xff // Pin Change Enable Masks
 | 
			
		||||
 | 
			
		||||
	// PCIFR: Pin Change Interrupt Flag Register
 | 
			
		||||
	PCIFR_PCIF = 0xf // Pin Change Interrupt Flags
 | 
			
		||||
 | 
			
		||||
	// PCICR: Pin Change Interrupt Control Register
 | 
			
		||||
	PCICR_PCIE = 0xf // Pin Change Interrupt Enables
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
// Bitfields for ADC: Analog-to-Digital Converter
 | 
			
		||||
const (
 | 
			
		||||
	// ADMUX: The ADC multiplexer Selection Register
 | 
			
		||||
	ADMUX_REFS  = 0xc0 // Reference Selection Bits
 | 
			
		||||
	ADMUX_ADLAR = 0x20 // Left Adjust Result
 | 
			
		||||
	ADMUX_MUX   = 0x1f // Analog Channel and Gain Selection Bits
 | 
			
		||||
 | 
			
		||||
	// ADCSRA: The ADC Control and Status register A
 | 
			
		||||
	ADCSRA_ADEN  = 0x80 // ADC Enable
 | 
			
		||||
	ADCSRA_ADSC  = 0x40 // ADC Start Conversion
 | 
			
		||||
	ADCSRA_ADATE = 0x20 // ADC  Auto Trigger Enable
 | 
			
		||||
	ADCSRA_ADIF  = 0x10 // ADC Interrupt Flag
 | 
			
		||||
	ADCSRA_ADIE  = 0x8  // ADC Interrupt Enable
 | 
			
		||||
	ADCSRA_ADPS  = 0x7  // ADC  Prescaler Select Bits
 | 
			
		||||
 | 
			
		||||
	// DIDR0: Digital Input Disable Register
 | 
			
		||||
	DIDR0_ADC7D = 0x80
 | 
			
		||||
	DIDR0_ADC6D = 0x40
 | 
			
		||||
	DIDR0_ADC5D = 0x20
 | 
			
		||||
	DIDR0_ADC4D = 0x10
 | 
			
		||||
	DIDR0_ADC3D = 0x8
 | 
			
		||||
	DIDR0_ADC2D = 0x4
 | 
			
		||||
	DIDR0_ADC1D = 0x2
 | 
			
		||||
	DIDR0_ADC0D = 0x1
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
// Bitfields for TC16: Timer/Counter, 16-bit
 | 
			
		||||
const (
 | 
			
		||||
	// TIMSK1: Timer/Counter1 Interrupt Mask Register
 | 
			
		||||
	TIMSK1_ICIE1  = 0x20 // Timer/Counter1 Input Capture Interrupt Enable
 | 
			
		||||
	TIMSK1_OCIE1B = 0x4  // Timer/Counter1 Output Compare B Match Interrupt Enable
 | 
			
		||||
	TIMSK1_OCIE1A = 0x2  // Timer/Counter1 Output Compare A Match Interrupt Enable
 | 
			
		||||
	TIMSK1_TOIE1  = 0x1  // Timer/Counter1 Overflow Interrupt Enable
 | 
			
		||||
 | 
			
		||||
	// TIFR1: Timer/Counter Interrupt Flag register
 | 
			
		||||
	TIFR1_ICF1  = 0x20 // Timer/Counter1 Input Capture Flag
 | 
			
		||||
	TIFR1_OCF1B = 0x4  // Timer/Counter1 Output Compare B Match Flag
 | 
			
		||||
	TIFR1_OCF1A = 0x2  // Timer/Counter1 Output Compare A Match Flag
 | 
			
		||||
	TIFR1_TOV1  = 0x1  // Timer/Counter1 Overflow Flag
 | 
			
		||||
 | 
			
		||||
	// TCCR1A: Timer/Counter1 Control Register A
 | 
			
		||||
	TCCR1A_COM1A = 0xc0 // Compare Output Mode 1A, bits
 | 
			
		||||
	TCCR1A_COM1B = 0x30 // Compare Output Mode 1B, bits
 | 
			
		||||
	TCCR1A_WGM1  = 0x3  // Pulse Width Modulator Select Bits
 | 
			
		||||
 | 
			
		||||
	// TCCR1B: Timer/Counter1 Control Register B
 | 
			
		||||
	TCCR1B_ICNC1 = 0x80 // Input Capture 1 Noise Canceler
 | 
			
		||||
	TCCR1B_ICES1 = 0x40 // Input Capture 1 Edge Select
 | 
			
		||||
	TCCR1B_WGM1  = 0x18 // Waveform Generation Mode Bits
 | 
			
		||||
	TCCR1B_CS1   = 0x7  // Clock Select1 bits
 | 
			
		||||
 | 
			
		||||
	// TCCR1C: Timer/Counter1 Control Register C
 | 
			
		||||
	TCCR1C_FOC1A = 0x80 // Force Output Compare for Channel A
 | 
			
		||||
	TCCR1C_FOC1B = 0x40 // Force Output Compare for Channel B
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
// Bitfields for EEPROM: EEPROM
 | 
			
		||||
const (
 | 
			
		||||
	// EECR: EEPROM Control Register
 | 
			
		||||
	EECR_EEPM  = 0x30 // EEPROM Programming Mode Bits
 | 
			
		||||
	EECR_EERIE = 0x8  // EEPROM Ready Interrupt Enable
 | 
			
		||||
	EECR_EEMPE = 0x4  // EEPROM Master Write Enable
 | 
			
		||||
	EECR_EEPE  = 0x2  // EEPROM Write Enable
 | 
			
		||||
	EECR_EERE  = 0x1  // EEPROM Read Enable
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
// Bitfields for SPI: Serial Peripheral Interface
 | 
			
		||||
const (
 | 
			
		||||
	// SPSR0: SPI Status Register
 | 
			
		||||
	SPSR0_SPIF0  = 0x80 // SPI Interrupt Flag
 | 
			
		||||
	SPSR0_WCOL0  = 0x40 // Write Collision Flag
 | 
			
		||||
	SPSR0_SPI2X0 = 0x1  // Double SPI Speed Bit
 | 
			
		||||
 | 
			
		||||
	// SPCR0: SPI Control Register
 | 
			
		||||
	SPCR0_SPIE0 = 0x80 // SPI Interrupt Enable
 | 
			
		||||
	SPCR0_SPE0  = 0x40 // SPI Enable
 | 
			
		||||
	SPCR0_DORD0 = 0x20 // Data Order
 | 
			
		||||
	SPCR0_MSTR0 = 0x10 // Master/Slave Select
 | 
			
		||||
	SPCR0_CPOL0 = 0x8  // Clock polarity
 | 
			
		||||
	SPCR0_CPHA0 = 0x4  // Clock Phase
 | 
			
		||||
	SPCR0_SPR10 = 0x2  // SPI Clock Rate Select 1
 | 
			
		||||
	SPCR0_SPR00 = 0x1  // SPI Clock Rate Select 0
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
// Bitfields for TWI: Two Wire Serial Interface
 | 
			
		||||
const (
 | 
			
		||||
	// TWAMR: TWI (Slave) Address Mask Register
 | 
			
		||||
	TWAMR_TWAM = 0xfe
 | 
			
		||||
 | 
			
		||||
	// TWCR: TWI Control Register
 | 
			
		||||
	TWCR_TWINT = 0x80 // TWI Interrupt Flag
 | 
			
		||||
	TWCR_TWEA  = 0x40 // TWI Enable Acknowledge Bit
 | 
			
		||||
	TWCR_TWSTA = 0x20 // TWI Start Condition Bit
 | 
			
		||||
	TWCR_TWSTO = 0x10 // TWI Stop Condition Bit
 | 
			
		||||
	TWCR_TWWC  = 0x8  // TWI Write Collition Flag
 | 
			
		||||
	TWCR_TWEN  = 0x4  // TWI Enable Bit
 | 
			
		||||
	TWCR_TWIE  = 0x1  // TWI Interrupt Enable
 | 
			
		||||
 | 
			
		||||
	// TWSR: TWI Status Register
 | 
			
		||||
	TWSR_TWS  = 0xf8 // TWI Status
 | 
			
		||||
	TWSR_TWPS = 0x3  // TWI Prescaler
 | 
			
		||||
 | 
			
		||||
	// TWAR: TWI (Slave) Address register
 | 
			
		||||
	TWAR_TWA   = 0xfe // TWI (Slave) Address register Bits
 | 
			
		||||
	TWAR_TWGCE = 0x1  // TWI General Call Recognition Enable Bit
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
// Bitfields for CPU: CPU Registers
 | 
			
		||||
const (
 | 
			
		||||
	// SREG: Status Register
 | 
			
		||||
	SREG_I = 0x80 // Global Interrupt Enable
 | 
			
		||||
	SREG_T = 0x40 // Bit Copy Storage
 | 
			
		||||
	SREG_H = 0x20 // Half Carry Flag
 | 
			
		||||
	SREG_S = 0x10 // Sign Bit
 | 
			
		||||
	SREG_V = 0x8  // Two's Complement Overflow Flag
 | 
			
		||||
	SREG_N = 0x4  // Negative Flag
 | 
			
		||||
	SREG_Z = 0x2  // Zero Flag
 | 
			
		||||
	SREG_C = 0x1  // Carry Flag
 | 
			
		||||
 | 
			
		||||
	// OSCCAL: Oscillator Calibration Value
 | 
			
		||||
	OSCCAL_OSCCAL = 0xff // Oscillator Calibration
 | 
			
		||||
 | 
			
		||||
	// CLKPR
 | 
			
		||||
	CLKPR_CLKPCE = 0x80
 | 
			
		||||
	CLKPR_CLKPS  = 0xf
 | 
			
		||||
 | 
			
		||||
	// SMCR: Sleep Mode Control Register
 | 
			
		||||
	SMCR_SM = 0xe // Sleep Mode Select bits
 | 
			
		||||
	SMCR_SE = 0x1 // Sleep Enable
 | 
			
		||||
 | 
			
		||||
	// GPIOR2: General Purpose IO Register 2
 | 
			
		||||
	GPIOR2_GPIOR = 0xff // General Purpose IO Register 2 bis
 | 
			
		||||
 | 
			
		||||
	// GPIOR1: General Purpose IO Register 1
 | 
			
		||||
	GPIOR1_GPIOR = 0xff // General Purpose IO Register 1 bis
 | 
			
		||||
 | 
			
		||||
	// GPIOR0: General Purpose IO Register 0
 | 
			
		||||
	GPIOR0_GPIOR07 = 0x80 // General Purpose IO Register 0 bit 7
 | 
			
		||||
	GPIOR0_GPIOR06 = 0x40 // General Purpose IO Register 0 bit 6
 | 
			
		||||
	GPIOR0_GPIOR05 = 0x20 // General Purpose IO Register 0 bit 5
 | 
			
		||||
	GPIOR0_GPIOR04 = 0x10 // General Purpose IO Register 0 bit 4
 | 
			
		||||
	GPIOR0_GPIOR03 = 0x8  // General Purpose IO Register 0 bit 3
 | 
			
		||||
	GPIOR0_GPIOR02 = 0x4  // General Purpose IO Register 0 bit 2
 | 
			
		||||
	GPIOR0_GPIOR01 = 0x2  // General Purpose IO Register 0 bit 1
 | 
			
		||||
	GPIOR0_GPIOR00 = 0x1  // General Purpose IO Register 0 bit 0
 | 
			
		||||
 | 
			
		||||
	// PRR0: Power Reduction Register0
 | 
			
		||||
	PRR0_PRTWI    = 0x80 // Power Reduction TWI
 | 
			
		||||
	PRR0_PRTIM2   = 0x40 // Power Reduction Timer/Counter2
 | 
			
		||||
	PRR0_PRTIM0   = 0x20 // Power Reduction Timer/Counter0
 | 
			
		||||
	PRR0_PRUSART1 = 0x10 // Power Reduction USART1
 | 
			
		||||
	PRR0_PRTIM1   = 0x8  // Power Reduction Timer/Counter1
 | 
			
		||||
	PRR0_PRSPI    = 0x4  // Power Reduction Serial Peripheral Interface
 | 
			
		||||
	PRR0_PRUSART0 = 0x2  // Power Reduction USART0
 | 
			
		||||
	PRR0_PRADC    = 0x1  // Power Reduction ADC
 | 
			
		||||
)
 | 
			
		||||
							
								
								
									
										6
									
								
								src/device/avr/atmega164pa.ld
									
										
									
									
									
										Обычный файл
									
								
							
							
						
						
									
										6
									
								
								src/device/avr/atmega164pa.ld
									
										
									
									
									
										Обычный файл
									
								
							| 
						 | 
				
			
			@ -0,0 +1,6 @@
 | 
			
		|||
/* Automatically generated file. DO NOT EDIT. */
 | 
			
		||||
/* Generated by gen-device.py from ATmega164PA.atdf, see http://packs.download.atmel.com/ */
 | 
			
		||||
 | 
			
		||||
__flash_size = 0x4000;
 | 
			
		||||
__ram_size   = 0x400;
 | 
			
		||||
__num_isrs   = 31;
 | 
			
		||||
							
								
								
									
										605
									
								
								src/device/avr/atmega165a.go
									
										
									
									
									
										Обычный файл
									
								
							
							
						
						
									
										605
									
								
								src/device/avr/atmega165a.go
									
										
									
									
									
										Обычный файл
									
								
							| 
						 | 
				
			
			@ -0,0 +1,605 @@
 | 
			
		|||
// Automatically generated file. DO NOT EDIT.
 | 
			
		||||
// Generated by gen-device.py from ATmega165A.atdf, see http://packs.download.atmel.com/
 | 
			
		||||
 | 
			
		||||
// +build avr,atmega165a
 | 
			
		||||
 | 
			
		||||
// Device information for the ATmega165A.
 | 
			
		||||
//
 | 
			
		||||
package avr
 | 
			
		||||
 | 
			
		||||
// Magic type name for the compiler.
 | 
			
		||||
type __reg uint8
 | 
			
		||||
 | 
			
		||||
// Export this magic type name.
 | 
			
		||||
type RegValue = __reg
 | 
			
		||||
 | 
			
		||||
// Some information about this device.
 | 
			
		||||
const (
 | 
			
		||||
	DEVICE = "ATmega165A"
 | 
			
		||||
	ARCH   = "AVR8"
 | 
			
		||||
	FAMILY = "megaAVR"
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
// Interrupts
 | 
			
		||||
const (
 | 
			
		||||
	IRQ_RESET        = 0  // External Pin,Power-on Reset,Brown-out Reset,Watchdog Reset,and JTAG AVR Reset. See Datasheet.
 | 
			
		||||
	IRQ_INT0         = 1  // External Interrupt Request 0
 | 
			
		||||
	IRQ_PCINT0       = 2  // Pin Change Interrupt Request 0
 | 
			
		||||
	IRQ_PCINT1       = 3  // Pin Change Interrupt Request 1
 | 
			
		||||
	IRQ_TIMER2_COMP  = 4  // Timer/Counter2 Compare Match
 | 
			
		||||
	IRQ_TIMER2_OVF   = 5  // Timer/Counter2 Overflow
 | 
			
		||||
	IRQ_TIMER1_CAPT  = 6  // Timer/Counter1 Capture Event
 | 
			
		||||
	IRQ_TIMER1_COMPA = 7  // Timer/Counter1 Compare Match A
 | 
			
		||||
	IRQ_TIMER1_COMPB = 8  // Timer/Counter Compare Match B
 | 
			
		||||
	IRQ_TIMER1_OVF   = 9  // Timer/Counter1 Overflow
 | 
			
		||||
	IRQ_TIMER0_COMP  = 10 // Timer/Counter0 Compare Match
 | 
			
		||||
	IRQ_TIMER0_OVF   = 11 // Timer/Counter0 Overflow
 | 
			
		||||
	IRQ_SPI_STC      = 12 // SPI Serial Transfer Complete
 | 
			
		||||
	IRQ_USART0_RX    = 13 // USART0, Rx Complete
 | 
			
		||||
	IRQ_USART0_UDRE  = 14 // USART0 Data register Empty
 | 
			
		||||
	IRQ_USART0_TX    = 15 // USART0, Tx Complete
 | 
			
		||||
	IRQ_USI_START    = 16 // USI Start Condition
 | 
			
		||||
	IRQ_USI_OVERFLOW = 17 // USI Overflow
 | 
			
		||||
	IRQ_ANALOG_COMP  = 18 // Analog Comparator
 | 
			
		||||
	IRQ_ADC          = 19 // ADC Conversion Complete
 | 
			
		||||
	IRQ_EE_READY     = 20 // EEPROM Ready
 | 
			
		||||
	IRQ_SPM_READY    = 21 // Store Program Memory Read
 | 
			
		||||
	IRQ_max          = 21 // Highest interrupt number on this device.
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
// Peripherals
 | 
			
		||||
var (
 | 
			
		||||
	// Fuses
 | 
			
		||||
	FUSE = struct {
 | 
			
		||||
		EXTENDED __reg
 | 
			
		||||
		HIGH     __reg
 | 
			
		||||
		LOW      __reg
 | 
			
		||||
	}{
 | 
			
		||||
		EXTENDED: 0x2,
 | 
			
		||||
		HIGH:     0x1,
 | 
			
		||||
		LOW:      0x0,
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	// Lockbits
 | 
			
		||||
	LOCKBIT = struct {
 | 
			
		||||
		LOCKBIT __reg
 | 
			
		||||
	}{
 | 
			
		||||
		LOCKBIT: 0x0,
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	// Timer/Counter, 8-bit
 | 
			
		||||
	TC8 = struct {
 | 
			
		||||
		TCCR0A __reg
 | 
			
		||||
		TCNT0  __reg
 | 
			
		||||
		OCR0A  __reg
 | 
			
		||||
		TIMSK0 __reg
 | 
			
		||||
		TIFR0  __reg
 | 
			
		||||
	}{
 | 
			
		||||
		TCCR0A: 0x44, // Timer/Counter0 Control Register
 | 
			
		||||
		TCNT0:  0x46, // Timer/Counter0
 | 
			
		||||
		OCR0A:  0x47, // Timer/Counter0 Output Compare Register
 | 
			
		||||
		TIMSK0: 0x6e, // Timer/Counter0 Interrupt Mask Register
 | 
			
		||||
		TIFR0:  0x35, // Timer/Counter0 Interrupt Flag register
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	// Timer/Counter, 16-bit
 | 
			
		||||
	TC16 = struct {
 | 
			
		||||
		TCCR1A __reg
 | 
			
		||||
		TCCR1B __reg
 | 
			
		||||
		TCCR1C __reg
 | 
			
		||||
		TCNT1L __reg
 | 
			
		||||
		TCNT1H __reg
 | 
			
		||||
		OCR1AL __reg
 | 
			
		||||
		OCR1AH __reg
 | 
			
		||||
		OCR1BL __reg
 | 
			
		||||
		OCR1BH __reg
 | 
			
		||||
		ICR1L  __reg
 | 
			
		||||
		ICR1H  __reg
 | 
			
		||||
		TIMSK1 __reg
 | 
			
		||||
		TIFR1  __reg
 | 
			
		||||
	}{
 | 
			
		||||
		TCCR1A: 0x80, // Timer/Counter1 Control Register A
 | 
			
		||||
		TCCR1B: 0x81, // Timer/Counter1 Control Register B
 | 
			
		||||
		TCCR1C: 0x82, // Timer/Counter 1 Control Register C
 | 
			
		||||
		TCNT1L: 0x84, // Timer/Counter1  Bytes
 | 
			
		||||
		TCNT1H: 0x84, // Timer/Counter1  Bytes
 | 
			
		||||
		OCR1AL: 0x88, // Timer/Counter1 Output Compare Register A  Bytes
 | 
			
		||||
		OCR1AH: 0x88, // Timer/Counter1 Output Compare Register A  Bytes
 | 
			
		||||
		OCR1BL: 0x8a, // Timer/Counter1 Output Compare Register B  Bytes
 | 
			
		||||
		OCR1BH: 0x8a, // Timer/Counter1 Output Compare Register B  Bytes
 | 
			
		||||
		ICR1L:  0x86, // Timer/Counter1 Input Capture Register  Bytes
 | 
			
		||||
		ICR1H:  0x86, // Timer/Counter1 Input Capture Register  Bytes
 | 
			
		||||
		TIMSK1: 0x6f, // Timer/Counter1 Interrupt Mask Register
 | 
			
		||||
		TIFR1:  0x36, // Timer/Counter1 Interrupt Flag register
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	// Timer/Counter, 8-bit Async
 | 
			
		||||
	TC8_ASYNC = struct {
 | 
			
		||||
		TCCR2A __reg
 | 
			
		||||
		TCNT2  __reg
 | 
			
		||||
		OCR2A  __reg
 | 
			
		||||
		TIMSK2 __reg
 | 
			
		||||
		TIFR2  __reg
 | 
			
		||||
		ASSR   __reg
 | 
			
		||||
	}{
 | 
			
		||||
		TCCR2A: 0xb0, // Timer/Counter2 Control Register
 | 
			
		||||
		TCNT2:  0xb2, // Timer/Counter2
 | 
			
		||||
		OCR2A:  0xb3, // Timer/Counter2 Output Compare Register
 | 
			
		||||
		TIMSK2: 0x70, // Timer/Counter2 Interrupt Mask register
 | 
			
		||||
		TIFR2:  0x37, // Timer/Counter2 Interrupt Flag Register
 | 
			
		||||
		ASSR:   0xb6, // Asynchronous Status Register
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	// Watchdog Timer
 | 
			
		||||
	WDT = struct {
 | 
			
		||||
		WDTCR __reg
 | 
			
		||||
	}{
 | 
			
		||||
		WDTCR: 0x60, // Watchdog Timer Control Register
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	// EEPROM
 | 
			
		||||
	EEPROM = struct {
 | 
			
		||||
		EEARL __reg
 | 
			
		||||
		EEARH __reg
 | 
			
		||||
		EEDR  __reg
 | 
			
		||||
		EECR  __reg
 | 
			
		||||
	}{
 | 
			
		||||
		EEARL: 0x41, // EEPROM Address Register  Bytes
 | 
			
		||||
		EEARH: 0x41, // EEPROM Address Register  Bytes
 | 
			
		||||
		EEDR:  0x40, // EEPROM Data Register
 | 
			
		||||
		EECR:  0x3f, // EEPROM Control Register
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	// Serial Peripheral Interface
 | 
			
		||||
	SPI = struct {
 | 
			
		||||
		SPCR __reg
 | 
			
		||||
		SPSR __reg
 | 
			
		||||
		SPDR __reg
 | 
			
		||||
	}{
 | 
			
		||||
		SPCR: 0x4c, // SPI Control Register
 | 
			
		||||
		SPSR: 0x4d, // SPI Status Register
 | 
			
		||||
		SPDR: 0x4e, // SPI Data Register
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	// I/O Port
 | 
			
		||||
	PORT = struct {
 | 
			
		||||
		PORTA __reg
 | 
			
		||||
		DDRA  __reg
 | 
			
		||||
		PINA  __reg
 | 
			
		||||
		PORTB __reg
 | 
			
		||||
		DDRB  __reg
 | 
			
		||||
		PINB  __reg
 | 
			
		||||
		PORTC __reg
 | 
			
		||||
		DDRC  __reg
 | 
			
		||||
		PINC  __reg
 | 
			
		||||
		PORTD __reg
 | 
			
		||||
		DDRD  __reg
 | 
			
		||||
		PIND  __reg
 | 
			
		||||
		PORTE __reg
 | 
			
		||||
		DDRE  __reg
 | 
			
		||||
		PINE  __reg
 | 
			
		||||
		PORTF __reg
 | 
			
		||||
		DDRF  __reg
 | 
			
		||||
		PINF  __reg
 | 
			
		||||
		PORTG __reg
 | 
			
		||||
		DDRG  __reg
 | 
			
		||||
		PING  __reg
 | 
			
		||||
	}{
 | 
			
		||||
		PORTA: 0x22, // Port A Data Register
 | 
			
		||||
		DDRA:  0x21, // Port A Data Direction Register
 | 
			
		||||
		PINA:  0x20, // Port A Input Pins
 | 
			
		||||
		PORTB: 0x25, // Port B Data Register
 | 
			
		||||
		DDRB:  0x24, // Port B Data Direction Register
 | 
			
		||||
		PINB:  0x23, // Port B Input Pins
 | 
			
		||||
		PORTC: 0x28, // Port C Data Register
 | 
			
		||||
		DDRC:  0x27, // Port C Data Direction Register
 | 
			
		||||
		PINC:  0x26, // Port C Input Pins
 | 
			
		||||
		PORTD: 0x2b, // Port D Data Register
 | 
			
		||||
		DDRD:  0x2a, // Port D Data Direction Register
 | 
			
		||||
		PIND:  0x29, // Port D Input Pins
 | 
			
		||||
		PORTE: 0x2e, // Data Register, Port E
 | 
			
		||||
		DDRE:  0x2d, // Data Direction Register, Port E
 | 
			
		||||
		PINE:  0x2c, // Input Pins, Port E
 | 
			
		||||
		PORTF: 0x31, // Data Register, Port F
 | 
			
		||||
		DDRF:  0x30, // Data Direction Register, Port F
 | 
			
		||||
		PINF:  0x2f, // Input Pins, Port F
 | 
			
		||||
		PORTG: 0x34, // Port G Data Register
 | 
			
		||||
		DDRG:  0x33, // Port G Data Direction Register
 | 
			
		||||
		PING:  0x32, // Port G Input Pins
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	// Analog Comparator
 | 
			
		||||
	AC = struct {
 | 
			
		||||
		ACSR  __reg
 | 
			
		||||
		DIDR1 __reg
 | 
			
		||||
	}{
 | 
			
		||||
		ACSR:  0x50, // Analog Comparator Control And Status Register
 | 
			
		||||
		DIDR1: 0x7f, // Digital Input Disable Register 1
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	// JTAG Interface
 | 
			
		||||
	JTAG = struct {
 | 
			
		||||
		OCDR __reg
 | 
			
		||||
	}{
 | 
			
		||||
		OCDR: 0x51, // On-Chip Debug Related Register in I/O Memory
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	// Universal Serial Interface
 | 
			
		||||
	USI = struct {
 | 
			
		||||
		USIDR __reg
 | 
			
		||||
		USISR __reg
 | 
			
		||||
		USICR __reg
 | 
			
		||||
	}{
 | 
			
		||||
		USIDR: 0xba, // USI Data Register
 | 
			
		||||
		USISR: 0xb9, // USI Status Register
 | 
			
		||||
		USICR: 0xb8, // USI Control Register
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	// Analog-to-Digital Converter
 | 
			
		||||
	ADC = struct {
 | 
			
		||||
		ADMUX  __reg
 | 
			
		||||
		ADCSRA __reg
 | 
			
		||||
		ADCL   __reg
 | 
			
		||||
		ADCH   __reg
 | 
			
		||||
		DIDR0  __reg
 | 
			
		||||
	}{
 | 
			
		||||
		ADMUX:  0x7c, // The ADC multiplexer Selection Register
 | 
			
		||||
		ADCSRA: 0x7a, // The ADC Control and Status register
 | 
			
		||||
		ADCL:   0x78, // ADC Data Register  Bytes
 | 
			
		||||
		ADCH:   0x78, // ADC Data Register  Bytes
 | 
			
		||||
		DIDR0:  0x7e, // Digital Input Disable Register 0
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	// Bootloader
 | 
			
		||||
	BOOT_LOAD = struct {
 | 
			
		||||
		SPMCSR __reg
 | 
			
		||||
	}{
 | 
			
		||||
		SPMCSR: 0x57, // Store Program Memory Control Register
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	// USART
 | 
			
		||||
	USART = struct {
 | 
			
		||||
		UDR0   __reg
 | 
			
		||||
		UCSR0A __reg
 | 
			
		||||
		UCSR0B __reg
 | 
			
		||||
		UCSR0C __reg
 | 
			
		||||
		UBRR0L __reg
 | 
			
		||||
		UBRR0H __reg
 | 
			
		||||
	}{
 | 
			
		||||
		UDR0:   0xc6, // USART I/O Data Register
 | 
			
		||||
		UCSR0A: 0xc0, // USART Control and Status Register A
 | 
			
		||||
		UCSR0B: 0xc1, // USART Control and Status Register B
 | 
			
		||||
		UCSR0C: 0xc2, // USART Control and Status Register C
 | 
			
		||||
		UBRR0L: 0xc4, // USART Baud Rate Register  Bytes
 | 
			
		||||
		UBRR0H: 0xc4, // USART Baud Rate Register  Bytes
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	// External Interrupts
 | 
			
		||||
	EXINT = struct {
 | 
			
		||||
		EICRA  __reg
 | 
			
		||||
		EIMSK  __reg
 | 
			
		||||
		EIFR   __reg
 | 
			
		||||
		PCMSK1 __reg
 | 
			
		||||
		PCMSK0 __reg
 | 
			
		||||
	}{
 | 
			
		||||
		EICRA:  0x69, // External Interrupt Control Register
 | 
			
		||||
		EIMSK:  0x3d, // External Interrupt Mask Register
 | 
			
		||||
		EIFR:   0x3c, // External Interrupt Flag Register
 | 
			
		||||
		PCMSK1: 0x6c, // Pin Change Mask Register 1
 | 
			
		||||
		PCMSK0: 0x6b, // Pin Change Mask Register 0
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	// CPU Registers
 | 
			
		||||
	CPU = struct {
 | 
			
		||||
		SREG   __reg
 | 
			
		||||
		SPL    __reg
 | 
			
		||||
		SPH    __reg
 | 
			
		||||
		OSCCAL __reg
 | 
			
		||||
		CLKPR  __reg
 | 
			
		||||
		PRR    __reg
 | 
			
		||||
		SMCR   __reg
 | 
			
		||||
		GPIOR2 __reg
 | 
			
		||||
		GPIOR1 __reg
 | 
			
		||||
		GPIOR0 __reg
 | 
			
		||||
	}{
 | 
			
		||||
		SREG:   0x5f, // Status Register
 | 
			
		||||
		SPL:    0x5d, // Stack Pointer
 | 
			
		||||
		SPH:    0x5d, // Stack Pointer
 | 
			
		||||
		OSCCAL: 0x66, // Oscillator Calibration Value
 | 
			
		||||
		CLKPR:  0x61, // Clock Prescale Register
 | 
			
		||||
		PRR:    0x64, // Power Reduction Register
 | 
			
		||||
		SMCR:   0x53, // Sleep Mode Control Register
 | 
			
		||||
		GPIOR2: 0x4b, // General Purpose IO Register 2
 | 
			
		||||
		GPIOR1: 0x4a, // General Purpose IO Register 1
 | 
			
		||||
		GPIOR0: 0x3e, // General Purpose IO Register 0
 | 
			
		||||
	}
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
// Bitfields for FUSE: Fuses
 | 
			
		||||
const (
 | 
			
		||||
	// EXTENDED
 | 
			
		||||
	EXTENDED_BODLEVEL = 0xe // Brown-out Detector trigger level
 | 
			
		||||
	EXTENDED_RSTDISBL = 0x1 // Disable external reset
 | 
			
		||||
 | 
			
		||||
	// HIGH
 | 
			
		||||
	HIGH_OCDEN   = 0x80 // On-Chip Debug Enabled
 | 
			
		||||
	HIGH_JTAGEN  = 0x40 // JTAG Interface Enabled
 | 
			
		||||
	HIGH_SPIEN   = 0x20 // Serial program downloading (SPI) enabled
 | 
			
		||||
	HIGH_WDTON   = 0x10 // Watchdog timer always on
 | 
			
		||||
	HIGH_EESAVE  = 0x8  // Preserve EEPROM through the Chip Erase cycle
 | 
			
		||||
	HIGH_BOOTSZ  = 0x6  // Select Boot Size
 | 
			
		||||
	HIGH_BOOTRST = 0x1  // Boot Reset vector Enabled
 | 
			
		||||
 | 
			
		||||
	// LOW
 | 
			
		||||
	LOW_CKDIV8    = 0x80 // Divide clock by 8 internally
 | 
			
		||||
	LOW_CKOUT     = 0x40 // Clock output on PORTE7
 | 
			
		||||
	LOW_SUT_CKSEL = 0x3f // Select Clock Source
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
// Bitfields for LOCKBIT: Lockbits
 | 
			
		||||
const (
 | 
			
		||||
	// LOCKBIT
 | 
			
		||||
	LOCKBIT_LB   = 0x3  // Memory Lock
 | 
			
		||||
	LOCKBIT_BLB0 = 0xc  // Boot Loader Protection Mode
 | 
			
		||||
	LOCKBIT_BLB1 = 0x30 // Boot Loader Protection Mode
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
// Bitfields for TC8: Timer/Counter, 8-bit
 | 
			
		||||
const (
 | 
			
		||||
	// TCCR0A: Timer/Counter0 Control Register
 | 
			
		||||
	TCCR0A_FOC0A = 0x80 // Force Output Compare
 | 
			
		||||
	TCCR0A_WGM00 = 0x40 // Waveform Generation Mode 0
 | 
			
		||||
	TCCR0A_COM0A = 0x30 // Compare Match Output Modes
 | 
			
		||||
	TCCR0A_WGM01 = 0x8  // Waveform Generation Mode 1
 | 
			
		||||
	TCCR0A_CS0   = 0x7  // Clock Selects
 | 
			
		||||
 | 
			
		||||
	// TIMSK0: Timer/Counter0 Interrupt Mask Register
 | 
			
		||||
	TIMSK0_OCIE0A = 0x2 // Timer/Counter0 Output Compare Match Interrupt Enable
 | 
			
		||||
	TIMSK0_TOIE0  = 0x1 // Timer/Counter0 Overflow Interrupt Enable
 | 
			
		||||
 | 
			
		||||
	// TIFR0: Timer/Counter0 Interrupt Flag register
 | 
			
		||||
	TIFR0_OCF0A = 0x2 // Timer/Counter0 Output Compare Flag 0
 | 
			
		||||
	TIFR0_TOV0  = 0x1 // Timer/Counter0 Overflow Flag
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
// Bitfields for TC16: Timer/Counter, 16-bit
 | 
			
		||||
const (
 | 
			
		||||
	// TCCR1A: Timer/Counter1 Control Register A
 | 
			
		||||
	TCCR1A_COM1A = 0xc0 // Compare Output Mode 1A, bits
 | 
			
		||||
	TCCR1A_COM1B = 0x30 // Compare Output Mode 1B, bits
 | 
			
		||||
	TCCR1A_WGM1  = 0x3  // Waveform Generation Mode
 | 
			
		||||
 | 
			
		||||
	// TCCR1B: Timer/Counter1 Control Register B
 | 
			
		||||
	TCCR1B_ICNC1 = 0x80 // Input Capture 1 Noise Canceler
 | 
			
		||||
	TCCR1B_ICES1 = 0x40 // Input Capture 1 Edge Select
 | 
			
		||||
	TCCR1B_WGM1  = 0x18 // Waveform Generation Mode
 | 
			
		||||
	TCCR1B_CS1   = 0x7  // Prescaler source of Timer/Counter 1
 | 
			
		||||
 | 
			
		||||
	// TCCR1C: Timer/Counter 1 Control Register C
 | 
			
		||||
	TCCR1C_FOC1A = 0x80 // Force Output Compare 1A
 | 
			
		||||
	TCCR1C_FOC1B = 0x40 // Force Output Compare 1B
 | 
			
		||||
 | 
			
		||||
	// TIMSK1: Timer/Counter1 Interrupt Mask Register
 | 
			
		||||
	TIMSK1_ICIE1  = 0x20 // Timer/Counter1 Input Capture Interrupt Enable
 | 
			
		||||
	TIMSK1_OCIE1B = 0x4  // Timer/Counter1 Output Compare B Match Interrupt Enable
 | 
			
		||||
	TIMSK1_OCIE1A = 0x2  // Timer/Counter1 Output Compare A Match Interrupt Enable
 | 
			
		||||
	TIMSK1_TOIE1  = 0x1  // Timer/Counter1 Overflow Interrupt Enable
 | 
			
		||||
 | 
			
		||||
	// TIFR1: Timer/Counter1 Interrupt Flag register
 | 
			
		||||
	TIFR1_ICF1  = 0x20 // Input Capture Flag 1
 | 
			
		||||
	TIFR1_OCF1B = 0x4  // Output Compare Flag 1B
 | 
			
		||||
	TIFR1_OCF1A = 0x2  // Output Compare Flag 1A
 | 
			
		||||
	TIFR1_TOV1  = 0x1  // Timer/Counter1 Overflow Flag
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
// Bitfields for TC8_ASYNC: Timer/Counter, 8-bit Async
 | 
			
		||||
const (
 | 
			
		||||
	// TCCR2A: Timer/Counter2 Control Register
 | 
			
		||||
	TCCR2A_FOC2A = 0x80 // Force Output Compare A
 | 
			
		||||
	TCCR2A_WGM20 = 0x40 // Waveform Generation Mode
 | 
			
		||||
	TCCR2A_COM2A = 0x30 // Compare Output Mode bits
 | 
			
		||||
	TCCR2A_WGM21 = 0x8  // Waveform Generation Mode
 | 
			
		||||
	TCCR2A_CS2   = 0x7  // Clock Select bits
 | 
			
		||||
 | 
			
		||||
	// TIMSK2: Timer/Counter2 Interrupt Mask register
 | 
			
		||||
	TIMSK2_OCIE2A = 0x2 // Timer/Counter2 Output Compare Match Interrupt Enable
 | 
			
		||||
	TIMSK2_TOIE2  = 0x1 // Timer/Counter2 Overflow Interrupt Enable
 | 
			
		||||
 | 
			
		||||
	// TIFR2: Timer/Counter2 Interrupt Flag Register
 | 
			
		||||
	TIFR2_OCF2A = 0x2 // Timer/Counter2 Output Compare Flag 2
 | 
			
		||||
	TIFR2_TOV2  = 0x1 // Timer/Counter2 Overflow Flag
 | 
			
		||||
 | 
			
		||||
	// ASSR: Asynchronous Status Register
 | 
			
		||||
	ASSR_EXCLK  = 0x10 // Enable External Clock Interrupt
 | 
			
		||||
	ASSR_AS2    = 0x8  // AS2: Asynchronous Timer/Counter2
 | 
			
		||||
	ASSR_TCN2UB = 0x4  // TCN2UB: Timer/Counter2 Update Busy
 | 
			
		||||
	ASSR_OCR2UB = 0x2  // Output Compare Register2 Update Busy
 | 
			
		||||
	ASSR_TCR2UB = 0x1  // TCR2UB: Timer/Counter Control Register2 Update Busy
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
// Bitfields for WDT: Watchdog Timer
 | 
			
		||||
const (
 | 
			
		||||
	// WDTCR: Watchdog Timer Control Register
 | 
			
		||||
	WDTCR_WDCE = 0x10 // Watchdog Change Enable
 | 
			
		||||
	WDTCR_WDE  = 0x8  // Watch Dog Enable
 | 
			
		||||
	WDTCR_WDP  = 0x7  // Watch Dog Timer Prescaler bits
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
// Bitfields for EEPROM: EEPROM
 | 
			
		||||
const (
 | 
			
		||||
	// EECR: EEPROM Control Register
 | 
			
		||||
	EECR_EERIE = 0x8 // EEPROM Ready Interrupt Enable
 | 
			
		||||
	EECR_EEMWE = 0x4 // EEPROM Master Write Enable
 | 
			
		||||
	EECR_EEWE  = 0x2 // EEPROM Write Enable
 | 
			
		||||
	EECR_EERE  = 0x1 // EEPROM Read Enable
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
// Bitfields for SPI: Serial Peripheral Interface
 | 
			
		||||
const (
 | 
			
		||||
	// SPCR: SPI Control Register
 | 
			
		||||
	SPCR_SPIE = 0x80 // SPI Interrupt Enable
 | 
			
		||||
	SPCR_SPE  = 0x40 // SPI Enable
 | 
			
		||||
	SPCR_DORD = 0x20 // Data Order
 | 
			
		||||
	SPCR_MSTR = 0x10 // Master/Slave Select
 | 
			
		||||
	SPCR_CPOL = 0x8  // Clock polarity
 | 
			
		||||
	SPCR_CPHA = 0x4  // Clock Phase
 | 
			
		||||
	SPCR_SPR  = 0x3  // SPI Clock Rate Selects
 | 
			
		||||
 | 
			
		||||
	// SPSR: SPI Status Register
 | 
			
		||||
	SPSR_SPIF  = 0x80 // SPI Interrupt Flag
 | 
			
		||||
	SPSR_WCOL  = 0x40 // Write Collision Flag
 | 
			
		||||
	SPSR_SPI2X = 0x1  // Double SPI Speed Bit
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
// Bitfields for AC: Analog Comparator
 | 
			
		||||
const (
 | 
			
		||||
	// ACSR: Analog Comparator Control And Status Register
 | 
			
		||||
	ACSR_ACD  = 0x80 // Analog Comparator Disable
 | 
			
		||||
	ACSR_ACBG = 0x40 // Analog Comparator Bandgap Select
 | 
			
		||||
	ACSR_ACO  = 0x20 // Analog Compare Output
 | 
			
		||||
	ACSR_ACI  = 0x10 // Analog Comparator Interrupt Flag
 | 
			
		||||
	ACSR_ACIE = 0x8  // Analog Comparator Interrupt Enable
 | 
			
		||||
	ACSR_ACIC = 0x4  // Analog Comparator Input Capture Enable
 | 
			
		||||
	ACSR_ACIS = 0x3  // Analog Comparator Interrupt Mode Select bits
 | 
			
		||||
 | 
			
		||||
	// DIDR1: Digital Input Disable Register 1
 | 
			
		||||
	DIDR1_AIN1D = 0x2 // AIN1 Digital Input Disable
 | 
			
		||||
	DIDR1_AIN0D = 0x1 // AIN0 Digital Input Disable
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
// Bitfields for USI: Universal Serial Interface
 | 
			
		||||
const (
 | 
			
		||||
	// USISR: USI Status Register
 | 
			
		||||
	USISR_USISIF = 0x80 // Start Condition Interrupt Flag
 | 
			
		||||
	USISR_USIOIF = 0x40 // Counter Overflow Interrupt Flag
 | 
			
		||||
	USISR_USIPF  = 0x20 // Stop Condition Flag
 | 
			
		||||
	USISR_USIDC  = 0x10 // Data Output Collision
 | 
			
		||||
	USISR_USICNT = 0xf  // USI Counter Value Bits
 | 
			
		||||
 | 
			
		||||
	// USICR: USI Control Register
 | 
			
		||||
	USICR_USISIE = 0x80 // Start Condition Interrupt Enable
 | 
			
		||||
	USICR_USIOIE = 0x40 // Counter Overflow Interrupt Enable
 | 
			
		||||
	USICR_USIWM  = 0x30 // USI Wire Mode Bits
 | 
			
		||||
	USICR_USICS  = 0xc  // USI Clock Source Select Bits
 | 
			
		||||
	USICR_USICLK = 0x2  // Clock Strobe
 | 
			
		||||
	USICR_USITC  = 0x1  // Toggle Clock Port Pin
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
// Bitfields for ADC: Analog-to-Digital Converter
 | 
			
		||||
const (
 | 
			
		||||
	// ADMUX: The ADC multiplexer Selection Register
 | 
			
		||||
	ADMUX_REFS  = 0xc0 // Reference Selection Bits
 | 
			
		||||
	ADMUX_ADLAR = 0x20 // Left Adjust Result
 | 
			
		||||
	ADMUX_MUX   = 0x1f // Analog Channel and Gain Selection Bits
 | 
			
		||||
 | 
			
		||||
	// ADCSRA: The ADC Control and Status register
 | 
			
		||||
	ADCSRA_ADEN  = 0x80 // ADC Enable
 | 
			
		||||
	ADCSRA_ADSC  = 0x40 // ADC Start Conversion
 | 
			
		||||
	ADCSRA_ADATE = 0x20 // ADC Auto Trigger Enable
 | 
			
		||||
	ADCSRA_ADIF  = 0x10 // ADC Interrupt Flag
 | 
			
		||||
	ADCSRA_ADIE  = 0x8  // ADC Interrupt Enable
 | 
			
		||||
	ADCSRA_ADPS  = 0x7  // ADC  Prescaler Select Bits
 | 
			
		||||
 | 
			
		||||
	// DIDR0: Digital Input Disable Register 0
 | 
			
		||||
	DIDR0_ADC7D = 0x80 // ADC7 Digital input Disable
 | 
			
		||||
	DIDR0_ADC6D = 0x40 // ADC6 Digital input Disable
 | 
			
		||||
	DIDR0_ADC5D = 0x20 // ADC5 Digital input Disable
 | 
			
		||||
	DIDR0_ADC4D = 0x10 // ADC4 Digital input Disable
 | 
			
		||||
	DIDR0_ADC3D = 0x8  // ADC3 Digital input Disable
 | 
			
		||||
	DIDR0_ADC2D = 0x4  // ADC2 Digital input Disable
 | 
			
		||||
	DIDR0_ADC1D = 0x2  // ADC1 Digital input Disable
 | 
			
		||||
	DIDR0_ADC0D = 0x1  // ADC0 Digital input Disable
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
// Bitfields for BOOT_LOAD: Bootloader
 | 
			
		||||
const (
 | 
			
		||||
	// SPMCSR: Store Program Memory Control Register
 | 
			
		||||
	SPMCSR_SPMIE  = 0x80 // SPM Interrupt Enable
 | 
			
		||||
	SPMCSR_RWWSB  = 0x40 // Read While Write Section Busy
 | 
			
		||||
	SPMCSR_RWWSRE = 0x10 // Read While Write section read enable
 | 
			
		||||
	SPMCSR_BLBSET = 0x8  // Boot Lock Bit Set
 | 
			
		||||
	SPMCSR_PGWRT  = 0x4  // Page Write
 | 
			
		||||
	SPMCSR_PGERS  = 0x2  // Page Erase
 | 
			
		||||
	SPMCSR_SPMEN  = 0x1  // Store Program Memory Enable
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
// Bitfields for USART: USART
 | 
			
		||||
const (
 | 
			
		||||
	// UCSR0A: USART Control and Status Register A
 | 
			
		||||
	UCSR0A_RXC0  = 0x80 // USART Receive Complete
 | 
			
		||||
	UCSR0A_TXC0  = 0x40 // USART Transmit Complete
 | 
			
		||||
	UCSR0A_UDRE0 = 0x20 // USART Data Register Empty
 | 
			
		||||
	UCSR0A_FE0   = 0x10 // Framing Error
 | 
			
		||||
	UCSR0A_DOR0  = 0x8  // Data OverRun
 | 
			
		||||
	UCSR0A_UPE0  = 0x4  // USART Parity Error
 | 
			
		||||
	UCSR0A_U2X0  = 0x2  // Double the USART Transmission Speed
 | 
			
		||||
	UCSR0A_MPCM0 = 0x1  // Multi-processor Communication Mode
 | 
			
		||||
 | 
			
		||||
	// UCSR0B: USART Control and Status Register B
 | 
			
		||||
	UCSR0B_RXCIE0 = 0x80 // RX Complete Interrupt Enable
 | 
			
		||||
	UCSR0B_TXCIE0 = 0x40 // TX Complete Interrupt Enable
 | 
			
		||||
	UCSR0B_UDRIE0 = 0x20 // USART Data Register Empty Interrupt Enable
 | 
			
		||||
	UCSR0B_RXEN0  = 0x10 // Receiver Enable
 | 
			
		||||
	UCSR0B_TXEN0  = 0x8  // Transmitter Enable
 | 
			
		||||
	UCSR0B_UCSZ02 = 0x4  // Character Size
 | 
			
		||||
	UCSR0B_RXB80  = 0x2  // Receive Data Bit 8
 | 
			
		||||
	UCSR0B_TXB80  = 0x1  // Transmit Data Bit 8
 | 
			
		||||
 | 
			
		||||
	// UCSR0C: USART Control and Status Register C
 | 
			
		||||
	UCSR0C_UMSEL0 = 0x40 // USART Mode Select
 | 
			
		||||
	UCSR0C_UPM0   = 0x30 // Parity Mode Bits
 | 
			
		||||
	UCSR0C_USBS0  = 0x8  // Stop Bit Select
 | 
			
		||||
	UCSR0C_UCSZ0  = 0x6  // Character Size
 | 
			
		||||
	UCSR0C_UCPOL0 = 0x1  // Clock Polarity
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
// Bitfields for EXINT: External Interrupts
 | 
			
		||||
const (
 | 
			
		||||
	// EICRA: External Interrupt Control Register
 | 
			
		||||
	EICRA_ISC01 = 0x2 // External Interrupt Sense Control 0 Bit 1
 | 
			
		||||
	EICRA_ISC00 = 0x1 // External Interrupt Sense Control 0 Bit 0
 | 
			
		||||
 | 
			
		||||
	// EIMSK: External Interrupt Mask Register
 | 
			
		||||
	EIMSK_PCIE = 0x30 // Pin Change Interrupt Enables
 | 
			
		||||
	EIMSK_INT0 = 0x1  // External Interrupt Request 0 Enable
 | 
			
		||||
 | 
			
		||||
	// EIFR: External Interrupt Flag Register
 | 
			
		||||
	EIFR_PCIF  = 0x30 // Pin Change Interrupt Flags
 | 
			
		||||
	EIFR_INTF0 = 0x1  // External Interrupt Flag 0
 | 
			
		||||
 | 
			
		||||
	// PCMSK1: Pin Change Mask Register 1
 | 
			
		||||
	PCMSK1_PCINT = 0xff // Pin Change Enable Masks
 | 
			
		||||
 | 
			
		||||
	// PCMSK0: Pin Change Mask Register 0
 | 
			
		||||
	PCMSK0_PCINT = 0xff // Pin Change Enable Masks
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
// Bitfields for CPU: CPU Registers
 | 
			
		||||
const (
 | 
			
		||||
	// SREG: Status Register
 | 
			
		||||
	SREG_I = 0x80 // Global Interrupt Enable
 | 
			
		||||
	SREG_T = 0x40 // Bit Copy Storage
 | 
			
		||||
	SREG_H = 0x20 // Half Carry Flag
 | 
			
		||||
	SREG_S = 0x10 // Sign Bit
 | 
			
		||||
	SREG_V = 0x8  // Two's Complement Overflow Flag
 | 
			
		||||
	SREG_N = 0x4  // Negative Flag
 | 
			
		||||
	SREG_Z = 0x2  // Zero Flag
 | 
			
		||||
	SREG_C = 0x1  // Carry Flag
 | 
			
		||||
 | 
			
		||||
	// OSCCAL: Oscillator Calibration Value
 | 
			
		||||
	OSCCAL_OSCCAL = 0xff // Oscillator Calibration
 | 
			
		||||
 | 
			
		||||
	// CLKPR: Clock Prescale Register
 | 
			
		||||
	CLKPR_CLKPCE = 0x80 // Clock Prescaler Change Enable
 | 
			
		||||
	CLKPR_CLKPS  = 0xf  // Clock Prescaler Select Bits
 | 
			
		||||
 | 
			
		||||
	// PRR: Power Reduction Register
 | 
			
		||||
	PRR_PRTIM1   = 0x8 // Power Reduction Timer/Counter1
 | 
			
		||||
	PRR_PRSPI    = 0x4 // Power Reduction Serial Peripheral Interface
 | 
			
		||||
	PRR_PRUSART0 = 0x2 // Power Reduction USART
 | 
			
		||||
	PRR_PRADC    = 0x1 // Power Reduction ADC
 | 
			
		||||
 | 
			
		||||
	// SMCR: Sleep Mode Control Register
 | 
			
		||||
	SMCR_SM = 0xe // Sleep Mode Select bits
 | 
			
		||||
	SMCR_SE = 0x1 // Sleep Enable
 | 
			
		||||
)
 | 
			
		||||
							
								
								
									
										6
									
								
								src/device/avr/atmega165a.ld
									
										
									
									
									
										Обычный файл
									
								
							
							
						
						
									
										6
									
								
								src/device/avr/atmega165a.ld
									
										
									
									
									
										Обычный файл
									
								
							| 
						 | 
				
			
			@ -0,0 +1,6 @@
 | 
			
		|||
/* Automatically generated file. DO NOT EDIT. */
 | 
			
		||||
/* Generated by gen-device.py from ATmega165A.atdf, see http://packs.download.atmel.com/ */
 | 
			
		||||
 | 
			
		||||
__flash_size = 0x4000;
 | 
			
		||||
__ram_size   = 0x400;
 | 
			
		||||
__num_isrs   = 22;
 | 
			
		||||
							
								
								
									
										605
									
								
								src/device/avr/atmega165p.go
									
										
									
									
									
										Обычный файл
									
								
							
							
						
						
									
										605
									
								
								src/device/avr/atmega165p.go
									
										
									
									
									
										Обычный файл
									
								
							| 
						 | 
				
			
			@ -0,0 +1,605 @@
 | 
			
		|||
// Automatically generated file. DO NOT EDIT.
 | 
			
		||||
// Generated by gen-device.py from ATmega165P.atdf, see http://packs.download.atmel.com/
 | 
			
		||||
 | 
			
		||||
// +build avr,atmega165p
 | 
			
		||||
 | 
			
		||||
// Device information for the ATmega165P.
 | 
			
		||||
//
 | 
			
		||||
package avr
 | 
			
		||||
 | 
			
		||||
// Magic type name for the compiler.
 | 
			
		||||
type __reg uint8
 | 
			
		||||
 | 
			
		||||
// Export this magic type name.
 | 
			
		||||
type RegValue = __reg
 | 
			
		||||
 | 
			
		||||
// Some information about this device.
 | 
			
		||||
const (
 | 
			
		||||
	DEVICE = "ATmega165P"
 | 
			
		||||
	ARCH   = "AVR8"
 | 
			
		||||
	FAMILY = "megaAVR"
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
// Interrupts
 | 
			
		||||
const (
 | 
			
		||||
	IRQ_RESET        = 0  // External Pin,Power-on Reset,Brown-out Reset,Watchdog Reset,and JTAG AVR Reset. See Datasheet.
 | 
			
		||||
	IRQ_INT0         = 1  // External Interrupt Request 0
 | 
			
		||||
	IRQ_PCINT0       = 2  // Pin Change Interrupt Request 0
 | 
			
		||||
	IRQ_PCINT1       = 3  // Pin Change Interrupt Request 1
 | 
			
		||||
	IRQ_TIMER2_COMP  = 4  // Timer/Counter2 Compare Match
 | 
			
		||||
	IRQ_TIMER2_OVF   = 5  // Timer/Counter2 Overflow
 | 
			
		||||
	IRQ_TIMER1_CAPT  = 6  // Timer/Counter1 Capture Event
 | 
			
		||||
	IRQ_TIMER1_COMPA = 7  // Timer/Counter1 Compare Match A
 | 
			
		||||
	IRQ_TIMER1_COMPB = 8  // Timer/Counter Compare Match B
 | 
			
		||||
	IRQ_TIMER1_OVF   = 9  // Timer/Counter1 Overflow
 | 
			
		||||
	IRQ_TIMER0_COMP  = 10 // Timer/Counter0 Compare Match
 | 
			
		||||
	IRQ_TIMER0_OVF   = 11 // Timer/Counter0 Overflow
 | 
			
		||||
	IRQ_SPI_STC      = 12 // SPI Serial Transfer Complete
 | 
			
		||||
	IRQ_USART0_RX    = 13 // USART0, Rx Complete
 | 
			
		||||
	IRQ_USART0_UDRE  = 14 // USART0 Data register Empty
 | 
			
		||||
	IRQ_USART0_TX    = 15 // USART0, Tx Complete
 | 
			
		||||
	IRQ_USI_START    = 16 // USI Start Condition
 | 
			
		||||
	IRQ_USI_OVERFLOW = 17 // USI Overflow
 | 
			
		||||
	IRQ_ANALOG_COMP  = 18 // Analog Comparator
 | 
			
		||||
	IRQ_ADC          = 19 // ADC Conversion Complete
 | 
			
		||||
	IRQ_EE_READY     = 20 // EEPROM Ready
 | 
			
		||||
	IRQ_SPM_READY    = 21 // Store Program Memory Read
 | 
			
		||||
	IRQ_max          = 21 // Highest interrupt number on this device.
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
// Peripherals
 | 
			
		||||
var (
 | 
			
		||||
	// Fuses
 | 
			
		||||
	FUSE = struct {
 | 
			
		||||
		EXTENDED __reg
 | 
			
		||||
		HIGH     __reg
 | 
			
		||||
		LOW      __reg
 | 
			
		||||
	}{
 | 
			
		||||
		EXTENDED: 0x2,
 | 
			
		||||
		HIGH:     0x1,
 | 
			
		||||
		LOW:      0x0,
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	// Lockbits
 | 
			
		||||
	LOCKBIT = struct {
 | 
			
		||||
		LOCKBIT __reg
 | 
			
		||||
	}{
 | 
			
		||||
		LOCKBIT: 0x0,
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	// Timer/Counter, 8-bit
 | 
			
		||||
	TC8 = struct {
 | 
			
		||||
		TCCR0A __reg
 | 
			
		||||
		TCNT0  __reg
 | 
			
		||||
		OCR0A  __reg
 | 
			
		||||
		TIMSK0 __reg
 | 
			
		||||
		TIFR0  __reg
 | 
			
		||||
	}{
 | 
			
		||||
		TCCR0A: 0x44, // Timer/Counter0 Control Register
 | 
			
		||||
		TCNT0:  0x46, // Timer/Counter0
 | 
			
		||||
		OCR0A:  0x47, // Timer/Counter0 Output Compare Register
 | 
			
		||||
		TIMSK0: 0x6e, // Timer/Counter0 Interrupt Mask Register
 | 
			
		||||
		TIFR0:  0x35, // Timer/Counter0 Interrupt Flag register
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	// Timer/Counter, 16-bit
 | 
			
		||||
	TC16 = struct {
 | 
			
		||||
		TCCR1A __reg
 | 
			
		||||
		TCCR1B __reg
 | 
			
		||||
		TCCR1C __reg
 | 
			
		||||
		TCNT1L __reg
 | 
			
		||||
		TCNT1H __reg
 | 
			
		||||
		OCR1AL __reg
 | 
			
		||||
		OCR1AH __reg
 | 
			
		||||
		OCR1BL __reg
 | 
			
		||||
		OCR1BH __reg
 | 
			
		||||
		ICR1L  __reg
 | 
			
		||||
		ICR1H  __reg
 | 
			
		||||
		TIMSK1 __reg
 | 
			
		||||
		TIFR1  __reg
 | 
			
		||||
	}{
 | 
			
		||||
		TCCR1A: 0x80, // Timer/Counter1 Control Register A
 | 
			
		||||
		TCCR1B: 0x81, // Timer/Counter1 Control Register B
 | 
			
		||||
		TCCR1C: 0x82, // Timer/Counter 1 Control Register C
 | 
			
		||||
		TCNT1L: 0x84, // Timer/Counter1  Bytes
 | 
			
		||||
		TCNT1H: 0x84, // Timer/Counter1  Bytes
 | 
			
		||||
		OCR1AL: 0x88, // Timer/Counter1 Output Compare Register A  Bytes
 | 
			
		||||
		OCR1AH: 0x88, // Timer/Counter1 Output Compare Register A  Bytes
 | 
			
		||||
		OCR1BL: 0x8a, // Timer/Counter1 Output Compare Register B  Bytes
 | 
			
		||||
		OCR1BH: 0x8a, // Timer/Counter1 Output Compare Register B  Bytes
 | 
			
		||||
		ICR1L:  0x86, // Timer/Counter1 Input Capture Register  Bytes
 | 
			
		||||
		ICR1H:  0x86, // Timer/Counter1 Input Capture Register  Bytes
 | 
			
		||||
		TIMSK1: 0x6f, // Timer/Counter1 Interrupt Mask Register
 | 
			
		||||
		TIFR1:  0x36, // Timer/Counter1 Interrupt Flag register
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	// Timer/Counter, 8-bit Async
 | 
			
		||||
	TC8_ASYNC = struct {
 | 
			
		||||
		TCCR2A __reg
 | 
			
		||||
		TCNT2  __reg
 | 
			
		||||
		OCR2A  __reg
 | 
			
		||||
		TIMSK2 __reg
 | 
			
		||||
		TIFR2  __reg
 | 
			
		||||
		ASSR   __reg
 | 
			
		||||
	}{
 | 
			
		||||
		TCCR2A: 0xb0, // Timer/Counter2 Control Register
 | 
			
		||||
		TCNT2:  0xb2, // Timer/Counter2
 | 
			
		||||
		OCR2A:  0xb3, // Timer/Counter2 Output Compare Register
 | 
			
		||||
		TIMSK2: 0x70, // Timer/Counter2 Interrupt Mask register
 | 
			
		||||
		TIFR2:  0x37, // Timer/Counter2 Interrupt Flag Register
 | 
			
		||||
		ASSR:   0xb6, // Asynchronous Status Register
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	// Watchdog Timer
 | 
			
		||||
	WDT = struct {
 | 
			
		||||
		WDTCR __reg
 | 
			
		||||
	}{
 | 
			
		||||
		WDTCR: 0x60, // Watchdog Timer Control Register
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	// EEPROM
 | 
			
		||||
	EEPROM = struct {
 | 
			
		||||
		EEARL __reg
 | 
			
		||||
		EEARH __reg
 | 
			
		||||
		EEDR  __reg
 | 
			
		||||
		EECR  __reg
 | 
			
		||||
	}{
 | 
			
		||||
		EEARL: 0x41, // EEPROM Address Register  Bytes
 | 
			
		||||
		EEARH: 0x41, // EEPROM Address Register  Bytes
 | 
			
		||||
		EEDR:  0x40, // EEPROM Data Register
 | 
			
		||||
		EECR:  0x3f, // EEPROM Control Register
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	// Serial Peripheral Interface
 | 
			
		||||
	SPI = struct {
 | 
			
		||||
		SPCR __reg
 | 
			
		||||
		SPSR __reg
 | 
			
		||||
		SPDR __reg
 | 
			
		||||
	}{
 | 
			
		||||
		SPCR: 0x4c, // SPI Control Register
 | 
			
		||||
		SPSR: 0x4d, // SPI Status Register
 | 
			
		||||
		SPDR: 0x4e, // SPI Data Register
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	// I/O Port
 | 
			
		||||
	PORT = struct {
 | 
			
		||||
		PORTA __reg
 | 
			
		||||
		DDRA  __reg
 | 
			
		||||
		PINA  __reg
 | 
			
		||||
		PORTB __reg
 | 
			
		||||
		DDRB  __reg
 | 
			
		||||
		PINB  __reg
 | 
			
		||||
		PORTC __reg
 | 
			
		||||
		DDRC  __reg
 | 
			
		||||
		PINC  __reg
 | 
			
		||||
		PORTD __reg
 | 
			
		||||
		DDRD  __reg
 | 
			
		||||
		PIND  __reg
 | 
			
		||||
		PORTE __reg
 | 
			
		||||
		DDRE  __reg
 | 
			
		||||
		PINE  __reg
 | 
			
		||||
		PORTF __reg
 | 
			
		||||
		DDRF  __reg
 | 
			
		||||
		PINF  __reg
 | 
			
		||||
		PORTG __reg
 | 
			
		||||
		DDRG  __reg
 | 
			
		||||
		PING  __reg
 | 
			
		||||
	}{
 | 
			
		||||
		PORTA: 0x22, // Port A Data Register
 | 
			
		||||
		DDRA:  0x21, // Port A Data Direction Register
 | 
			
		||||
		PINA:  0x20, // Port A Input Pins
 | 
			
		||||
		PORTB: 0x25, // Port B Data Register
 | 
			
		||||
		DDRB:  0x24, // Port B Data Direction Register
 | 
			
		||||
		PINB:  0x23, // Port B Input Pins
 | 
			
		||||
		PORTC: 0x28, // Port C Data Register
 | 
			
		||||
		DDRC:  0x27, // Port C Data Direction Register
 | 
			
		||||
		PINC:  0x26, // Port C Input Pins
 | 
			
		||||
		PORTD: 0x2b, // Port D Data Register
 | 
			
		||||
		DDRD:  0x2a, // Port D Data Direction Register
 | 
			
		||||
		PIND:  0x29, // Port D Input Pins
 | 
			
		||||
		PORTE: 0x2e, // Data Register, Port E
 | 
			
		||||
		DDRE:  0x2d, // Data Direction Register, Port E
 | 
			
		||||
		PINE:  0x2c, // Input Pins, Port E
 | 
			
		||||
		PORTF: 0x31, // Data Register, Port F
 | 
			
		||||
		DDRF:  0x30, // Data Direction Register, Port F
 | 
			
		||||
		PINF:  0x2f, // Input Pins, Port F
 | 
			
		||||
		PORTG: 0x34, // Port G Data Register
 | 
			
		||||
		DDRG:  0x33, // Port G Data Direction Register
 | 
			
		||||
		PING:  0x32, // Port G Input Pins
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	// Analog Comparator
 | 
			
		||||
	AC = struct {
 | 
			
		||||
		ACSR  __reg
 | 
			
		||||
		DIDR1 __reg
 | 
			
		||||
	}{
 | 
			
		||||
		ACSR:  0x50, // Analog Comparator Control And Status Register
 | 
			
		||||
		DIDR1: 0x7f, // Digital Input Disable Register 1
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	// JTAG Interface
 | 
			
		||||
	JTAG = struct {
 | 
			
		||||
		OCDR __reg
 | 
			
		||||
	}{
 | 
			
		||||
		OCDR: 0x51, // On-Chip Debug Related Register in I/O Memory
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	// External Interrupts
 | 
			
		||||
	EXINT = struct {
 | 
			
		||||
		EICRA  __reg
 | 
			
		||||
		EIMSK  __reg
 | 
			
		||||
		EIFR   __reg
 | 
			
		||||
		PCMSK1 __reg
 | 
			
		||||
		PCMSK0 __reg
 | 
			
		||||
	}{
 | 
			
		||||
		EICRA:  0x69, // External Interrupt Control Register
 | 
			
		||||
		EIMSK:  0x3d, // External Interrupt Mask Register
 | 
			
		||||
		EIFR:   0x3c, // External Interrupt Flag Register
 | 
			
		||||
		PCMSK1: 0x6c, // Pin Change Mask Register 1
 | 
			
		||||
		PCMSK0: 0x6b, // Pin Change Mask Register 0
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	// Universal Serial Interface
 | 
			
		||||
	USI = struct {
 | 
			
		||||
		USIDR __reg
 | 
			
		||||
		USISR __reg
 | 
			
		||||
		USICR __reg
 | 
			
		||||
	}{
 | 
			
		||||
		USIDR: 0xba, // USI Data Register
 | 
			
		||||
		USISR: 0xb9, // USI Status Register
 | 
			
		||||
		USICR: 0xb8, // USI Control Register
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	// Analog-to-Digital Converter
 | 
			
		||||
	ADC = struct {
 | 
			
		||||
		ADMUX  __reg
 | 
			
		||||
		ADCSRA __reg
 | 
			
		||||
		ADCL   __reg
 | 
			
		||||
		ADCH   __reg
 | 
			
		||||
		DIDR0  __reg
 | 
			
		||||
	}{
 | 
			
		||||
		ADMUX:  0x7c, // The ADC multiplexer Selection Register
 | 
			
		||||
		ADCSRA: 0x7a, // The ADC Control and Status register
 | 
			
		||||
		ADCL:   0x78, // ADC Data Register  Bytes
 | 
			
		||||
		ADCH:   0x78, // ADC Data Register  Bytes
 | 
			
		||||
		DIDR0:  0x7e, // Digital Input Disable Register 0
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	// Bootloader
 | 
			
		||||
	BOOT_LOAD = struct {
 | 
			
		||||
		SPMCSR __reg
 | 
			
		||||
	}{
 | 
			
		||||
		SPMCSR: 0x57, // Store Program Memory Control Register
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	// USART
 | 
			
		||||
	USART = struct {
 | 
			
		||||
		UDR0   __reg
 | 
			
		||||
		UCSR0A __reg
 | 
			
		||||
		UCSR0B __reg
 | 
			
		||||
		UCSR0C __reg
 | 
			
		||||
		UBRR0L __reg
 | 
			
		||||
		UBRR0H __reg
 | 
			
		||||
	}{
 | 
			
		||||
		UDR0:   0xc6, // USART I/O Data Register
 | 
			
		||||
		UCSR0A: 0xc0, // USART Control and Status Register A
 | 
			
		||||
		UCSR0B: 0xc1, // USART Control and Status Register B
 | 
			
		||||
		UCSR0C: 0xc2, // USART Control and Status Register C
 | 
			
		||||
		UBRR0L: 0xc4, // USART Baud Rate Register  Bytes
 | 
			
		||||
		UBRR0H: 0xc4, // USART Baud Rate Register  Bytes
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	// CPU Registers
 | 
			
		||||
	CPU = struct {
 | 
			
		||||
		SREG   __reg
 | 
			
		||||
		SPL    __reg
 | 
			
		||||
		SPH    __reg
 | 
			
		||||
		OSCCAL __reg
 | 
			
		||||
		CLKPR  __reg
 | 
			
		||||
		PRR    __reg
 | 
			
		||||
		SMCR   __reg
 | 
			
		||||
		GPIOR2 __reg
 | 
			
		||||
		GPIOR1 __reg
 | 
			
		||||
		GPIOR0 __reg
 | 
			
		||||
	}{
 | 
			
		||||
		SREG:   0x5f, // Status Register
 | 
			
		||||
		SPL:    0x5d, // Stack Pointer
 | 
			
		||||
		SPH:    0x5d, // Stack Pointer
 | 
			
		||||
		OSCCAL: 0x66, // Oscillator Calibration Value
 | 
			
		||||
		CLKPR:  0x61, // Clock Prescale Register
 | 
			
		||||
		PRR:    0x64, // Power Reduction Register
 | 
			
		||||
		SMCR:   0x53, // Sleep Mode Control Register
 | 
			
		||||
		GPIOR2: 0x4b, // General Purpose IO Register 2
 | 
			
		||||
		GPIOR1: 0x4a, // General Purpose IO Register 1
 | 
			
		||||
		GPIOR0: 0x3e, // General Purpose IO Register 0
 | 
			
		||||
	}
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
// Bitfields for FUSE: Fuses
 | 
			
		||||
const (
 | 
			
		||||
	// EXTENDED
 | 
			
		||||
	EXTENDED_BODLEVEL = 0xe // Brown-out Detector trigger level
 | 
			
		||||
	EXTENDED_RSTDISBL = 0x1 // Disable external reset
 | 
			
		||||
 | 
			
		||||
	// HIGH
 | 
			
		||||
	HIGH_OCDEN   = 0x80 // On-Chip Debug Enabled
 | 
			
		||||
	HIGH_JTAGEN  = 0x40 // JTAG Interface Enabled
 | 
			
		||||
	HIGH_SPIEN   = 0x20 // Serial program downloading (SPI) enabled
 | 
			
		||||
	HIGH_WDTON   = 0x10 // Watchdog timer always on
 | 
			
		||||
	HIGH_EESAVE  = 0x8  // Preserve EEPROM through the Chip Erase cycle
 | 
			
		||||
	HIGH_BOOTSZ  = 0x6  // Select Boot Size
 | 
			
		||||
	HIGH_BOOTRST = 0x1  // Boot Reset vector Enabled
 | 
			
		||||
 | 
			
		||||
	// LOW
 | 
			
		||||
	LOW_CKDIV8    = 0x80 // Divide clock by 8 internally
 | 
			
		||||
	LOW_CKOUT     = 0x40 // Clock output on PORTE7
 | 
			
		||||
	LOW_SUT_CKSEL = 0x3f // Select Clock Source
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
// Bitfields for LOCKBIT: Lockbits
 | 
			
		||||
const (
 | 
			
		||||
	// LOCKBIT
 | 
			
		||||
	LOCKBIT_LB   = 0x3  // Memory Lock
 | 
			
		||||
	LOCKBIT_BLB0 = 0xc  // Boot Loader Protection Mode
 | 
			
		||||
	LOCKBIT_BLB1 = 0x30 // Boot Loader Protection Mode
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
// Bitfields for TC8: Timer/Counter, 8-bit
 | 
			
		||||
const (
 | 
			
		||||
	// TCCR0A: Timer/Counter0 Control Register
 | 
			
		||||
	TCCR0A_FOC0A = 0x80 // Force Output Compare
 | 
			
		||||
	TCCR0A_WGM00 = 0x40 // Waveform Generation Mode 0
 | 
			
		||||
	TCCR0A_COM0A = 0x30 // Compare Match Output Modes
 | 
			
		||||
	TCCR0A_WGM01 = 0x8  // Waveform Generation Mode 1
 | 
			
		||||
	TCCR0A_CS0   = 0x7  // Clock Selects
 | 
			
		||||
 | 
			
		||||
	// TIMSK0: Timer/Counter0 Interrupt Mask Register
 | 
			
		||||
	TIMSK0_OCIE0A = 0x2 // Timer/Counter0 Output Compare Match Interrupt Enable
 | 
			
		||||
	TIMSK0_TOIE0  = 0x1 // Timer/Counter0 Overflow Interrupt Enable
 | 
			
		||||
 | 
			
		||||
	// TIFR0: Timer/Counter0 Interrupt Flag register
 | 
			
		||||
	TIFR0_OCF0A = 0x2 // Timer/Counter0 Output Compare Flag 0
 | 
			
		||||
	TIFR0_TOV0  = 0x1 // Timer/Counter0 Overflow Flag
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
// Bitfields for TC16: Timer/Counter, 16-bit
 | 
			
		||||
const (
 | 
			
		||||
	// TCCR1A: Timer/Counter1 Control Register A
 | 
			
		||||
	TCCR1A_COM1A = 0xc0 // Compare Output Mode 1A, bits
 | 
			
		||||
	TCCR1A_COM1B = 0x30 // Compare Output Mode 1B, bits
 | 
			
		||||
	TCCR1A_WGM1  = 0x3  // Waveform Generation Mode
 | 
			
		||||
 | 
			
		||||
	// TCCR1B: Timer/Counter1 Control Register B
 | 
			
		||||
	TCCR1B_ICNC1 = 0x80 // Input Capture 1 Noise Canceler
 | 
			
		||||
	TCCR1B_ICES1 = 0x40 // Input Capture 1 Edge Select
 | 
			
		||||
	TCCR1B_WGM1  = 0x18 // Waveform Generation Mode
 | 
			
		||||
	TCCR1B_CS1   = 0x7  // Prescaler source of Timer/Counter 1
 | 
			
		||||
 | 
			
		||||
	// TCCR1C: Timer/Counter 1 Control Register C
 | 
			
		||||
	TCCR1C_FOC1A = 0x80 // Force Output Compare 1A
 | 
			
		||||
	TCCR1C_FOC1B = 0x40 // Force Output Compare 1B
 | 
			
		||||
 | 
			
		||||
	// TIMSK1: Timer/Counter1 Interrupt Mask Register
 | 
			
		||||
	TIMSK1_ICIE1  = 0x20 // Timer/Counter1 Input Capture Interrupt Enable
 | 
			
		||||
	TIMSK1_OCIE1B = 0x4  // Timer/Counter1 Output Compare B Match Interrupt Enable
 | 
			
		||||
	TIMSK1_OCIE1A = 0x2  // Timer/Counter1 Output Compare A Match Interrupt Enable
 | 
			
		||||
	TIMSK1_TOIE1  = 0x1  // Timer/Counter1 Overflow Interrupt Enable
 | 
			
		||||
 | 
			
		||||
	// TIFR1: Timer/Counter1 Interrupt Flag register
 | 
			
		||||
	TIFR1_ICF1  = 0x20 // Input Capture Flag 1
 | 
			
		||||
	TIFR1_OCF1B = 0x4  // Output Compare Flag 1B
 | 
			
		||||
	TIFR1_OCF1A = 0x2  // Output Compare Flag 1A
 | 
			
		||||
	TIFR1_TOV1  = 0x1  // Timer/Counter1 Overflow Flag
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
// Bitfields for TC8_ASYNC: Timer/Counter, 8-bit Async
 | 
			
		||||
const (
 | 
			
		||||
	// TCCR2A: Timer/Counter2 Control Register
 | 
			
		||||
	TCCR2A_FOC2A = 0x80 // Force Output Compare A
 | 
			
		||||
	TCCR2A_WGM20 = 0x40 // Waveform Generation Mode
 | 
			
		||||
	TCCR2A_COM2A = 0x30 // Compare Output Mode bits
 | 
			
		||||
	TCCR2A_WGM21 = 0x8  // Waveform Generation Mode
 | 
			
		||||
	TCCR2A_CS2   = 0x7  // Clock Select bits
 | 
			
		||||
 | 
			
		||||
	// TIMSK2: Timer/Counter2 Interrupt Mask register
 | 
			
		||||
	TIMSK2_OCIE2A = 0x2 // Timer/Counter2 Output Compare Match Interrupt Enable
 | 
			
		||||
	TIMSK2_TOIE2  = 0x1 // Timer/Counter2 Overflow Interrupt Enable
 | 
			
		||||
 | 
			
		||||
	// TIFR2: Timer/Counter2 Interrupt Flag Register
 | 
			
		||||
	TIFR2_OCF2A = 0x2 // Timer/Counter2 Output Compare Flag 2
 | 
			
		||||
	TIFR2_TOV2  = 0x1 // Timer/Counter2 Overflow Flag
 | 
			
		||||
 | 
			
		||||
	// ASSR: Asynchronous Status Register
 | 
			
		||||
	ASSR_EXCLK  = 0x10 // Enable External Clock Interrupt
 | 
			
		||||
	ASSR_AS2    = 0x8  // AS2: Asynchronous Timer/Counter2
 | 
			
		||||
	ASSR_TCN2UB = 0x4  // TCN2UB: Timer/Counter2 Update Busy
 | 
			
		||||
	ASSR_OCR2UB = 0x2  // Output Compare Register2 Update Busy
 | 
			
		||||
	ASSR_TCR2UB = 0x1  // TCR2UB: Timer/Counter Control Register2 Update Busy
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
// Bitfields for WDT: Watchdog Timer
 | 
			
		||||
const (
 | 
			
		||||
	// WDTCR: Watchdog Timer Control Register
 | 
			
		||||
	WDTCR_WDCE = 0x10 // Watchdog Change Enable
 | 
			
		||||
	WDTCR_WDE  = 0x8  // Watch Dog Enable
 | 
			
		||||
	WDTCR_WDP  = 0x7  // Watch Dog Timer Prescaler bits
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
// Bitfields for EEPROM: EEPROM
 | 
			
		||||
const (
 | 
			
		||||
	// EECR: EEPROM Control Register
 | 
			
		||||
	EECR_EERIE = 0x8 // EEPROM Ready Interrupt Enable
 | 
			
		||||
	EECR_EEMWE = 0x4 // EEPROM Master Write Enable
 | 
			
		||||
	EECR_EEWE  = 0x2 // EEPROM Write Enable
 | 
			
		||||
	EECR_EERE  = 0x1 // EEPROM Read Enable
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
// Bitfields for SPI: Serial Peripheral Interface
 | 
			
		||||
const (
 | 
			
		||||
	// SPCR: SPI Control Register
 | 
			
		||||
	SPCR_SPIE = 0x80 // SPI Interrupt Enable
 | 
			
		||||
	SPCR_SPE  = 0x40 // SPI Enable
 | 
			
		||||
	SPCR_DORD = 0x20 // Data Order
 | 
			
		||||
	SPCR_MSTR = 0x10 // Master/Slave Select
 | 
			
		||||
	SPCR_CPOL = 0x8  // Clock polarity
 | 
			
		||||
	SPCR_CPHA = 0x4  // Clock Phase
 | 
			
		||||
	SPCR_SPR  = 0x3  // SPI Clock Rate Selects
 | 
			
		||||
 | 
			
		||||
	// SPSR: SPI Status Register
 | 
			
		||||
	SPSR_SPIF  = 0x80 // SPI Interrupt Flag
 | 
			
		||||
	SPSR_WCOL  = 0x40 // Write Collision Flag
 | 
			
		||||
	SPSR_SPI2X = 0x1  // Double SPI Speed Bit
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
// Bitfields for AC: Analog Comparator
 | 
			
		||||
const (
 | 
			
		||||
	// ACSR: Analog Comparator Control And Status Register
 | 
			
		||||
	ACSR_ACD  = 0x80 // Analog Comparator Disable
 | 
			
		||||
	ACSR_ACBG = 0x40 // Analog Comparator Bandgap Select
 | 
			
		||||
	ACSR_ACO  = 0x20 // Analog Compare Output
 | 
			
		||||
	ACSR_ACI  = 0x10 // Analog Comparator Interrupt Flag
 | 
			
		||||
	ACSR_ACIE = 0x8  // Analog Comparator Interrupt Enable
 | 
			
		||||
	ACSR_ACIC = 0x4  // Analog Comparator Input Capture Enable
 | 
			
		||||
	ACSR_ACIS = 0x3  // Analog Comparator Interrupt Mode Select bits
 | 
			
		||||
 | 
			
		||||
	// DIDR1: Digital Input Disable Register 1
 | 
			
		||||
	DIDR1_AIN1D = 0x2 // AIN1 Digital Input Disable
 | 
			
		||||
	DIDR1_AIN0D = 0x1 // AIN0 Digital Input Disable
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
// Bitfields for EXINT: External Interrupts
 | 
			
		||||
const (
 | 
			
		||||
	// EICRA: External Interrupt Control Register
 | 
			
		||||
	EICRA_ISC01 = 0x2 // External Interrupt Sense Control 0 Bit 1
 | 
			
		||||
	EICRA_ISC00 = 0x1 // External Interrupt Sense Control 0 Bit 0
 | 
			
		||||
 | 
			
		||||
	// EIMSK: External Interrupt Mask Register
 | 
			
		||||
	EIMSK_PCIE = 0xc0 // Pin Change Interrupt Enables
 | 
			
		||||
	EIMSK_INT0 = 0x1  // External Interrupt Request 0 Enable
 | 
			
		||||
 | 
			
		||||
	// EIFR: External Interrupt Flag Register
 | 
			
		||||
	EIFR_PCIF  = 0xc0 // Pin Change Interrupt Flags
 | 
			
		||||
	EIFR_INTF0 = 0x1  // External Interrupt Flag 0
 | 
			
		||||
 | 
			
		||||
	// PCMSK1: Pin Change Mask Register 1
 | 
			
		||||
	PCMSK1_PCINT = 0xff // Pin Change Enable Masks
 | 
			
		||||
 | 
			
		||||
	// PCMSK0: Pin Change Mask Register 0
 | 
			
		||||
	PCMSK0_PCINT = 0xff // Pin Change Enable Masks
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
// Bitfields for USI: Universal Serial Interface
 | 
			
		||||
const (
 | 
			
		||||
	// USISR: USI Status Register
 | 
			
		||||
	USISR_USISIF = 0x80 // Start Condition Interrupt Flag
 | 
			
		||||
	USISR_USIOIF = 0x40 // Counter Overflow Interrupt Flag
 | 
			
		||||
	USISR_USIPF  = 0x20 // Stop Condition Flag
 | 
			
		||||
	USISR_USIDC  = 0x10 // Data Output Collision
 | 
			
		||||
	USISR_USICNT = 0xf  // USI Counter Value Bits
 | 
			
		||||
 | 
			
		||||
	// USICR: USI Control Register
 | 
			
		||||
	USICR_USISIE = 0x80 // Start Condition Interrupt Enable
 | 
			
		||||
	USICR_USIOIE = 0x40 // Counter Overflow Interrupt Enable
 | 
			
		||||
	USICR_USIWM  = 0x30 // USI Wire Mode Bits
 | 
			
		||||
	USICR_USICS  = 0xc  // USI Clock Source Select Bits
 | 
			
		||||
	USICR_USICLK = 0x2  // Clock Strobe
 | 
			
		||||
	USICR_USITC  = 0x1  // Toggle Clock Port Pin
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
// Bitfields for ADC: Analog-to-Digital Converter
 | 
			
		||||
const (
 | 
			
		||||
	// ADMUX: The ADC multiplexer Selection Register
 | 
			
		||||
	ADMUX_REFS  = 0xc0 // Reference Selection Bits
 | 
			
		||||
	ADMUX_ADLAR = 0x20 // Left Adjust Result
 | 
			
		||||
	ADMUX_MUX   = 0x1f // Analog Channel and Gain Selection Bits
 | 
			
		||||
 | 
			
		||||
	// ADCSRA: The ADC Control and Status register
 | 
			
		||||
	ADCSRA_ADEN  = 0x80 // ADC Enable
 | 
			
		||||
	ADCSRA_ADSC  = 0x40 // ADC Start Conversion
 | 
			
		||||
	ADCSRA_ADATE = 0x20 // ADC Auto Trigger Enable
 | 
			
		||||
	ADCSRA_ADIF  = 0x10 // ADC Interrupt Flag
 | 
			
		||||
	ADCSRA_ADIE  = 0x8  // ADC Interrupt Enable
 | 
			
		||||
	ADCSRA_ADPS  = 0x7  // ADC  Prescaler Select Bits
 | 
			
		||||
 | 
			
		||||
	// DIDR0: Digital Input Disable Register 0
 | 
			
		||||
	DIDR0_ADC7D = 0x80 // ADC7 Digital input Disable
 | 
			
		||||
	DIDR0_ADC6D = 0x40 // ADC6 Digital input Disable
 | 
			
		||||
	DIDR0_ADC5D = 0x20 // ADC5 Digital input Disable
 | 
			
		||||
	DIDR0_ADC4D = 0x10 // ADC4 Digital input Disable
 | 
			
		||||
	DIDR0_ADC3D = 0x8  // ADC3 Digital input Disable
 | 
			
		||||
	DIDR0_ADC2D = 0x4  // ADC2 Digital input Disable
 | 
			
		||||
	DIDR0_ADC1D = 0x2  // ADC1 Digital input Disable
 | 
			
		||||
	DIDR0_ADC0D = 0x1  // ADC0 Digital input Disable
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
// Bitfields for BOOT_LOAD: Bootloader
 | 
			
		||||
const (
 | 
			
		||||
	// SPMCSR: Store Program Memory Control Register
 | 
			
		||||
	SPMCSR_SPMIE  = 0x80 // SPM Interrupt Enable
 | 
			
		||||
	SPMCSR_RWWSB  = 0x40 // Read While Write Section Busy
 | 
			
		||||
	SPMCSR_RWWSRE = 0x10 // Read While Write section read enable
 | 
			
		||||
	SPMCSR_BLBSET = 0x8  // Boot Lock Bit Set
 | 
			
		||||
	SPMCSR_PGWRT  = 0x4  // Page Write
 | 
			
		||||
	SPMCSR_PGERS  = 0x2  // Page Erase
 | 
			
		||||
	SPMCSR_SPMEN  = 0x1  // Store Program Memory Enable
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
// Bitfields for USART: USART
 | 
			
		||||
const (
 | 
			
		||||
	// UCSR0A: USART Control and Status Register A
 | 
			
		||||
	UCSR0A_RXC0  = 0x80 // USART Receive Complete
 | 
			
		||||
	UCSR0A_TXC0  = 0x40 // USART Transmit Complete
 | 
			
		||||
	UCSR0A_UDRE0 = 0x20 // USART Data Register Empty
 | 
			
		||||
	UCSR0A_FE0   = 0x10 // Framing Error
 | 
			
		||||
	UCSR0A_DOR0  = 0x8  // Data OverRun
 | 
			
		||||
	UCSR0A_UPE0  = 0x4  // USART Parity Error
 | 
			
		||||
	UCSR0A_U2X0  = 0x2  // Double the USART Transmission Speed
 | 
			
		||||
	UCSR0A_MPCM0 = 0x1  // Multi-processor Communication Mode
 | 
			
		||||
 | 
			
		||||
	// UCSR0B: USART Control and Status Register B
 | 
			
		||||
	UCSR0B_RXCIE0 = 0x80 // RX Complete Interrupt Enable
 | 
			
		||||
	UCSR0B_TXCIE0 = 0x40 // TX Complete Interrupt Enable
 | 
			
		||||
	UCSR0B_UDRIE0 = 0x20 // USART Data Register Empty Interrupt Enable
 | 
			
		||||
	UCSR0B_RXEN0  = 0x10 // Receiver Enable
 | 
			
		||||
	UCSR0B_TXEN0  = 0x8  // Transmitter Enable
 | 
			
		||||
	UCSR0B_UCSZ02 = 0x4  // Character Size
 | 
			
		||||
	UCSR0B_RXB80  = 0x2  // Receive Data Bit 8
 | 
			
		||||
	UCSR0B_TXB80  = 0x1  // Transmit Data Bit 8
 | 
			
		||||
 | 
			
		||||
	// UCSR0C: USART Control and Status Register C
 | 
			
		||||
	UCSR0C_UMSEL0 = 0x40 // USART Mode Select
 | 
			
		||||
	UCSR0C_UPM0   = 0x30 // Parity Mode Bits
 | 
			
		||||
	UCSR0C_USBS0  = 0x8  // Stop Bit Select
 | 
			
		||||
	UCSR0C_UCSZ0  = 0x6  // Character Size
 | 
			
		||||
	UCSR0C_UCPOL0 = 0x1  // Clock Polarity
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
// Bitfields for CPU: CPU Registers
 | 
			
		||||
const (
 | 
			
		||||
	// SREG: Status Register
 | 
			
		||||
	SREG_I = 0x80 // Global Interrupt Enable
 | 
			
		||||
	SREG_T = 0x40 // Bit Copy Storage
 | 
			
		||||
	SREG_H = 0x20 // Half Carry Flag
 | 
			
		||||
	SREG_S = 0x10 // Sign Bit
 | 
			
		||||
	SREG_V = 0x8  // Two's Complement Overflow Flag
 | 
			
		||||
	SREG_N = 0x4  // Negative Flag
 | 
			
		||||
	SREG_Z = 0x2  // Zero Flag
 | 
			
		||||
	SREG_C = 0x1  // Carry Flag
 | 
			
		||||
 | 
			
		||||
	// OSCCAL: Oscillator Calibration Value
 | 
			
		||||
	OSCCAL_OSCCAL = 0xff // Oscillator Calibration
 | 
			
		||||
 | 
			
		||||
	// CLKPR: Clock Prescale Register
 | 
			
		||||
	CLKPR_CLKPCE = 0x80 // Clock Prescaler Change Enable
 | 
			
		||||
	CLKPR_CLKPS  = 0xf  // Clock Prescaler Select Bits
 | 
			
		||||
 | 
			
		||||
	// PRR: Power Reduction Register
 | 
			
		||||
	PRR_PRTIM1   = 0x8 // Power Reduction Timer/Counter1
 | 
			
		||||
	PRR_PRSPI    = 0x4 // Power Reduction Serial Peripheral Interface
 | 
			
		||||
	PRR_PRUSART0 = 0x2 // Power Reduction USART
 | 
			
		||||
	PRR_PRADC    = 0x1 // Power Reduction ADC
 | 
			
		||||
 | 
			
		||||
	// SMCR: Sleep Mode Control Register
 | 
			
		||||
	SMCR_SM = 0xe // Sleep Mode Select bits
 | 
			
		||||
	SMCR_SE = 0x1 // Sleep Enable
 | 
			
		||||
)
 | 
			
		||||
							
								
								
									
										6
									
								
								src/device/avr/atmega165p.ld
									
										
									
									
									
										Обычный файл
									
								
							
							
						
						
									
										6
									
								
								src/device/avr/atmega165p.ld
									
										
									
									
									
										Обычный файл
									
								
							| 
						 | 
				
			
			@ -0,0 +1,6 @@
 | 
			
		|||
/* Automatically generated file. DO NOT EDIT. */
 | 
			
		||||
/* Generated by gen-device.py from ATmega165P.atdf, see http://packs.download.atmel.com/ */
 | 
			
		||||
 | 
			
		||||
__flash_size = 0x4000;
 | 
			
		||||
__ram_size   = 0x400;
 | 
			
		||||
__num_isrs   = 22;
 | 
			
		||||
							
								
								
									
										605
									
								
								src/device/avr/atmega165pa.go
									
										
									
									
									
										Обычный файл
									
								
							
							
						
						
									
										605
									
								
								src/device/avr/atmega165pa.go
									
										
									
									
									
										Обычный файл
									
								
							| 
						 | 
				
			
			@ -0,0 +1,605 @@
 | 
			
		|||
// Automatically generated file. DO NOT EDIT.
 | 
			
		||||
// Generated by gen-device.py from ATmega165PA.atdf, see http://packs.download.atmel.com/
 | 
			
		||||
 | 
			
		||||
// +build avr,atmega165pa
 | 
			
		||||
 | 
			
		||||
// Device information for the ATmega165PA.
 | 
			
		||||
//
 | 
			
		||||
package avr
 | 
			
		||||
 | 
			
		||||
// Magic type name for the compiler.
 | 
			
		||||
type __reg uint8
 | 
			
		||||
 | 
			
		||||
// Export this magic type name.
 | 
			
		||||
type RegValue = __reg
 | 
			
		||||
 | 
			
		||||
// Some information about this device.
 | 
			
		||||
const (
 | 
			
		||||
	DEVICE = "ATmega165PA"
 | 
			
		||||
	ARCH   = "AVR8"
 | 
			
		||||
	FAMILY = "megaAVR"
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
// Interrupts
 | 
			
		||||
const (
 | 
			
		||||
	IRQ_RESET        = 0  // External Pin,Power-on Reset,Brown-out Reset,Watchdog Reset,and JTAG AVR Reset. See Datasheet.
 | 
			
		||||
	IRQ_INT0         = 1  // External Interrupt Request 0
 | 
			
		||||
	IRQ_PCINT0       = 2  // Pin Change Interrupt Request 0
 | 
			
		||||
	IRQ_PCINT1       = 3  // Pin Change Interrupt Request 1
 | 
			
		||||
	IRQ_TIMER2_COMP  = 4  // Timer/Counter2 Compare Match
 | 
			
		||||
	IRQ_TIMER2_OVF   = 5  // Timer/Counter2 Overflow
 | 
			
		||||
	IRQ_TIMER1_CAPT  = 6  // Timer/Counter1 Capture Event
 | 
			
		||||
	IRQ_TIMER1_COMPA = 7  // Timer/Counter1 Compare Match A
 | 
			
		||||
	IRQ_TIMER1_COMPB = 8  // Timer/Counter Compare Match B
 | 
			
		||||
	IRQ_TIMER1_OVF   = 9  // Timer/Counter1 Overflow
 | 
			
		||||
	IRQ_TIMER0_COMP  = 10 // Timer/Counter0 Compare Match
 | 
			
		||||
	IRQ_TIMER0_OVF   = 11 // Timer/Counter0 Overflow
 | 
			
		||||
	IRQ_SPI_STC      = 12 // SPI Serial Transfer Complete
 | 
			
		||||
	IRQ_USART0_RX    = 13 // USART0, Rx Complete
 | 
			
		||||
	IRQ_USART0_UDRE  = 14 // USART0 Data register Empty
 | 
			
		||||
	IRQ_USART0_TX    = 15 // USART0, Tx Complete
 | 
			
		||||
	IRQ_USI_START    = 16 // USI Start Condition
 | 
			
		||||
	IRQ_USI_OVERFLOW = 17 // USI Overflow
 | 
			
		||||
	IRQ_ANALOG_COMP  = 18 // Analog Comparator
 | 
			
		||||
	IRQ_ADC          = 19 // ADC Conversion Complete
 | 
			
		||||
	IRQ_EE_READY     = 20 // EEPROM Ready
 | 
			
		||||
	IRQ_SPM_READY    = 21 // Store Program Memory Read
 | 
			
		||||
	IRQ_max          = 21 // Highest interrupt number on this device.
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
// Peripherals
 | 
			
		||||
var (
 | 
			
		||||
	// Fuses
 | 
			
		||||
	FUSE = struct {
 | 
			
		||||
		EXTENDED __reg
 | 
			
		||||
		HIGH     __reg
 | 
			
		||||
		LOW      __reg
 | 
			
		||||
	}{
 | 
			
		||||
		EXTENDED: 0x2,
 | 
			
		||||
		HIGH:     0x1,
 | 
			
		||||
		LOW:      0x0,
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	// Lockbits
 | 
			
		||||
	LOCKBIT = struct {
 | 
			
		||||
		LOCKBIT __reg
 | 
			
		||||
	}{
 | 
			
		||||
		LOCKBIT: 0x0,
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	// Timer/Counter, 8-bit
 | 
			
		||||
	TC8 = struct {
 | 
			
		||||
		TCCR0A __reg
 | 
			
		||||
		TCNT0  __reg
 | 
			
		||||
		OCR0A  __reg
 | 
			
		||||
		TIMSK0 __reg
 | 
			
		||||
		TIFR0  __reg
 | 
			
		||||
	}{
 | 
			
		||||
		TCCR0A: 0x44, // Timer/Counter0 Control Register
 | 
			
		||||
		TCNT0:  0x46, // Timer/Counter0
 | 
			
		||||
		OCR0A:  0x47, // Timer/Counter0 Output Compare Register
 | 
			
		||||
		TIMSK0: 0x6e, // Timer/Counter0 Interrupt Mask Register
 | 
			
		||||
		TIFR0:  0x35, // Timer/Counter0 Interrupt Flag register
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	// Timer/Counter, 16-bit
 | 
			
		||||
	TC16 = struct {
 | 
			
		||||
		TCCR1A __reg
 | 
			
		||||
		TCCR1B __reg
 | 
			
		||||
		TCCR1C __reg
 | 
			
		||||
		TCNT1L __reg
 | 
			
		||||
		TCNT1H __reg
 | 
			
		||||
		OCR1AL __reg
 | 
			
		||||
		OCR1AH __reg
 | 
			
		||||
		OCR1BL __reg
 | 
			
		||||
		OCR1BH __reg
 | 
			
		||||
		ICR1L  __reg
 | 
			
		||||
		ICR1H  __reg
 | 
			
		||||
		TIMSK1 __reg
 | 
			
		||||
		TIFR1  __reg
 | 
			
		||||
	}{
 | 
			
		||||
		TCCR1A: 0x80, // Timer/Counter1 Control Register A
 | 
			
		||||
		TCCR1B: 0x81, // Timer/Counter1 Control Register B
 | 
			
		||||
		TCCR1C: 0x82, // Timer/Counter 1 Control Register C
 | 
			
		||||
		TCNT1L: 0x84, // Timer/Counter1  Bytes
 | 
			
		||||
		TCNT1H: 0x84, // Timer/Counter1  Bytes
 | 
			
		||||
		OCR1AL: 0x88, // Timer/Counter1 Output Compare Register A  Bytes
 | 
			
		||||
		OCR1AH: 0x88, // Timer/Counter1 Output Compare Register A  Bytes
 | 
			
		||||
		OCR1BL: 0x8a, // Timer/Counter1 Output Compare Register B  Bytes
 | 
			
		||||
		OCR1BH: 0x8a, // Timer/Counter1 Output Compare Register B  Bytes
 | 
			
		||||
		ICR1L:  0x86, // Timer/Counter1 Input Capture Register  Bytes
 | 
			
		||||
		ICR1H:  0x86, // Timer/Counter1 Input Capture Register  Bytes
 | 
			
		||||
		TIMSK1: 0x6f, // Timer/Counter1 Interrupt Mask Register
 | 
			
		||||
		TIFR1:  0x36, // Timer/Counter1 Interrupt Flag register
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	// Timer/Counter, 8-bit Async
 | 
			
		||||
	TC8_ASYNC = struct {
 | 
			
		||||
		TCCR2A __reg
 | 
			
		||||
		TCNT2  __reg
 | 
			
		||||
		OCR2A  __reg
 | 
			
		||||
		TIMSK2 __reg
 | 
			
		||||
		TIFR2  __reg
 | 
			
		||||
		ASSR   __reg
 | 
			
		||||
	}{
 | 
			
		||||
		TCCR2A: 0xb0, // Timer/Counter2 Control Register
 | 
			
		||||
		TCNT2:  0xb2, // Timer/Counter2
 | 
			
		||||
		OCR2A:  0xb3, // Timer/Counter2 Output Compare Register
 | 
			
		||||
		TIMSK2: 0x70, // Timer/Counter2 Interrupt Mask register
 | 
			
		||||
		TIFR2:  0x37, // Timer/Counter2 Interrupt Flag Register
 | 
			
		||||
		ASSR:   0xb6, // Asynchronous Status Register
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	// Watchdog Timer
 | 
			
		||||
	WDT = struct {
 | 
			
		||||
		WDTCR __reg
 | 
			
		||||
	}{
 | 
			
		||||
		WDTCR: 0x60, // Watchdog Timer Control Register
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	// EEPROM
 | 
			
		||||
	EEPROM = struct {
 | 
			
		||||
		EEARL __reg
 | 
			
		||||
		EEARH __reg
 | 
			
		||||
		EEDR  __reg
 | 
			
		||||
		EECR  __reg
 | 
			
		||||
	}{
 | 
			
		||||
		EEARL: 0x41, // EEPROM Address Register  Bytes
 | 
			
		||||
		EEARH: 0x41, // EEPROM Address Register  Bytes
 | 
			
		||||
		EEDR:  0x40, // EEPROM Data Register
 | 
			
		||||
		EECR:  0x3f, // EEPROM Control Register
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	// Serial Peripheral Interface
 | 
			
		||||
	SPI = struct {
 | 
			
		||||
		SPCR __reg
 | 
			
		||||
		SPSR __reg
 | 
			
		||||
		SPDR __reg
 | 
			
		||||
	}{
 | 
			
		||||
		SPCR: 0x4c, // SPI Control Register
 | 
			
		||||
		SPSR: 0x4d, // SPI Status Register
 | 
			
		||||
		SPDR: 0x4e, // SPI Data Register
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	// I/O Port
 | 
			
		||||
	PORT = struct {
 | 
			
		||||
		PORTA __reg
 | 
			
		||||
		DDRA  __reg
 | 
			
		||||
		PINA  __reg
 | 
			
		||||
		PORTB __reg
 | 
			
		||||
		DDRB  __reg
 | 
			
		||||
		PINB  __reg
 | 
			
		||||
		PORTC __reg
 | 
			
		||||
		DDRC  __reg
 | 
			
		||||
		PINC  __reg
 | 
			
		||||
		PORTD __reg
 | 
			
		||||
		DDRD  __reg
 | 
			
		||||
		PIND  __reg
 | 
			
		||||
		PORTE __reg
 | 
			
		||||
		DDRE  __reg
 | 
			
		||||
		PINE  __reg
 | 
			
		||||
		PORTF __reg
 | 
			
		||||
		DDRF  __reg
 | 
			
		||||
		PINF  __reg
 | 
			
		||||
		PORTG __reg
 | 
			
		||||
		DDRG  __reg
 | 
			
		||||
		PING  __reg
 | 
			
		||||
	}{
 | 
			
		||||
		PORTA: 0x22, // Port A Data Register
 | 
			
		||||
		DDRA:  0x21, // Port A Data Direction Register
 | 
			
		||||
		PINA:  0x20, // Port A Input Pins
 | 
			
		||||
		PORTB: 0x25, // Port B Data Register
 | 
			
		||||
		DDRB:  0x24, // Port B Data Direction Register
 | 
			
		||||
		PINB:  0x23, // Port B Input Pins
 | 
			
		||||
		PORTC: 0x28, // Port C Data Register
 | 
			
		||||
		DDRC:  0x27, // Port C Data Direction Register
 | 
			
		||||
		PINC:  0x26, // Port C Input Pins
 | 
			
		||||
		PORTD: 0x2b, // Port D Data Register
 | 
			
		||||
		DDRD:  0x2a, // Port D Data Direction Register
 | 
			
		||||
		PIND:  0x29, // Port D Input Pins
 | 
			
		||||
		PORTE: 0x2e, // Data Register, Port E
 | 
			
		||||
		DDRE:  0x2d, // Data Direction Register, Port E
 | 
			
		||||
		PINE:  0x2c, // Input Pins, Port E
 | 
			
		||||
		PORTF: 0x31, // Data Register, Port F
 | 
			
		||||
		DDRF:  0x30, // Data Direction Register, Port F
 | 
			
		||||
		PINF:  0x2f, // Input Pins, Port F
 | 
			
		||||
		PORTG: 0x34, // Port G Data Register
 | 
			
		||||
		DDRG:  0x33, // Port G Data Direction Register
 | 
			
		||||
		PING:  0x32, // Port G Input Pins
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	// Analog Comparator
 | 
			
		||||
	AC = struct {
 | 
			
		||||
		ACSR  __reg
 | 
			
		||||
		DIDR1 __reg
 | 
			
		||||
	}{
 | 
			
		||||
		ACSR:  0x50, // Analog Comparator Control And Status Register
 | 
			
		||||
		DIDR1: 0x7f, // Digital Input Disable Register 1
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	// JTAG Interface
 | 
			
		||||
	JTAG = struct {
 | 
			
		||||
		OCDR __reg
 | 
			
		||||
	}{
 | 
			
		||||
		OCDR: 0x51, // On-Chip Debug Related Register in I/O Memory
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	// Universal Serial Interface
 | 
			
		||||
	USI = struct {
 | 
			
		||||
		USIDR __reg
 | 
			
		||||
		USISR __reg
 | 
			
		||||
		USICR __reg
 | 
			
		||||
	}{
 | 
			
		||||
		USIDR: 0xba, // USI Data Register
 | 
			
		||||
		USISR: 0xb9, // USI Status Register
 | 
			
		||||
		USICR: 0xb8, // USI Control Register
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	// Analog-to-Digital Converter
 | 
			
		||||
	ADC = struct {
 | 
			
		||||
		ADMUX  __reg
 | 
			
		||||
		ADCSRA __reg
 | 
			
		||||
		ADCL   __reg
 | 
			
		||||
		ADCH   __reg
 | 
			
		||||
		DIDR0  __reg
 | 
			
		||||
	}{
 | 
			
		||||
		ADMUX:  0x7c, // The ADC multiplexer Selection Register
 | 
			
		||||
		ADCSRA: 0x7a, // The ADC Control and Status register
 | 
			
		||||
		ADCL:   0x78, // ADC Data Register  Bytes
 | 
			
		||||
		ADCH:   0x78, // ADC Data Register  Bytes
 | 
			
		||||
		DIDR0:  0x7e, // Digital Input Disable Register 0
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	// Bootloader
 | 
			
		||||
	BOOT_LOAD = struct {
 | 
			
		||||
		SPMCSR __reg
 | 
			
		||||
	}{
 | 
			
		||||
		SPMCSR: 0x57, // Store Program Memory Control Register
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	// USART
 | 
			
		||||
	USART = struct {
 | 
			
		||||
		UDR0   __reg
 | 
			
		||||
		UCSR0A __reg
 | 
			
		||||
		UCSR0B __reg
 | 
			
		||||
		UCSR0C __reg
 | 
			
		||||
		UBRR0L __reg
 | 
			
		||||
		UBRR0H __reg
 | 
			
		||||
	}{
 | 
			
		||||
		UDR0:   0xc6, // USART I/O Data Register
 | 
			
		||||
		UCSR0A: 0xc0, // USART Control and Status Register A
 | 
			
		||||
		UCSR0B: 0xc1, // USART Control and Status Register B
 | 
			
		||||
		UCSR0C: 0xc2, // USART Control and Status Register C
 | 
			
		||||
		UBRR0L: 0xc4, // USART Baud Rate Register  Bytes
 | 
			
		||||
		UBRR0H: 0xc4, // USART Baud Rate Register  Bytes
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	// External Interrupts
 | 
			
		||||
	EXINT = struct {
 | 
			
		||||
		EICRA  __reg
 | 
			
		||||
		EIMSK  __reg
 | 
			
		||||
		EIFR   __reg
 | 
			
		||||
		PCMSK1 __reg
 | 
			
		||||
		PCMSK0 __reg
 | 
			
		||||
	}{
 | 
			
		||||
		EICRA:  0x69, // External Interrupt Control Register
 | 
			
		||||
		EIMSK:  0x3d, // External Interrupt Mask Register
 | 
			
		||||
		EIFR:   0x3c, // External Interrupt Flag Register
 | 
			
		||||
		PCMSK1: 0x6c, // Pin Change Mask Register 1
 | 
			
		||||
		PCMSK0: 0x6b, // Pin Change Mask Register 0
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	// CPU Registers
 | 
			
		||||
	CPU = struct {
 | 
			
		||||
		SREG   __reg
 | 
			
		||||
		SPL    __reg
 | 
			
		||||
		SPH    __reg
 | 
			
		||||
		OSCCAL __reg
 | 
			
		||||
		CLKPR  __reg
 | 
			
		||||
		PRR    __reg
 | 
			
		||||
		SMCR   __reg
 | 
			
		||||
		GPIOR2 __reg
 | 
			
		||||
		GPIOR1 __reg
 | 
			
		||||
		GPIOR0 __reg
 | 
			
		||||
	}{
 | 
			
		||||
		SREG:   0x5f, // Status Register
 | 
			
		||||
		SPL:    0x5d, // Stack Pointer
 | 
			
		||||
		SPH:    0x5d, // Stack Pointer
 | 
			
		||||
		OSCCAL: 0x66, // Oscillator Calibration Value
 | 
			
		||||
		CLKPR:  0x61, // Clock Prescale Register
 | 
			
		||||
		PRR:    0x64, // Power Reduction Register
 | 
			
		||||
		SMCR:   0x53, // Sleep Mode Control Register
 | 
			
		||||
		GPIOR2: 0x4b, // General Purpose IO Register 2
 | 
			
		||||
		GPIOR1: 0x4a, // General Purpose IO Register 1
 | 
			
		||||
		GPIOR0: 0x3e, // General Purpose IO Register 0
 | 
			
		||||
	}
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
// Bitfields for FUSE: Fuses
 | 
			
		||||
const (
 | 
			
		||||
	// EXTENDED
 | 
			
		||||
	EXTENDED_BODLEVEL = 0xe // Brown-out Detector trigger level
 | 
			
		||||
	EXTENDED_RSTDISBL = 0x1 // Disable external reset
 | 
			
		||||
 | 
			
		||||
	// HIGH
 | 
			
		||||
	HIGH_OCDEN   = 0x80 // On-Chip Debug Enabled
 | 
			
		||||
	HIGH_JTAGEN  = 0x40 // JTAG Interface Enabled
 | 
			
		||||
	HIGH_SPIEN   = 0x20 // Serial program downloading (SPI) enabled
 | 
			
		||||
	HIGH_WDTON   = 0x10 // Watchdog timer always on
 | 
			
		||||
	HIGH_EESAVE  = 0x8  // Preserve EEPROM through the Chip Erase cycle
 | 
			
		||||
	HIGH_BOOTSZ  = 0x6  // Select Boot Size
 | 
			
		||||
	HIGH_BOOTRST = 0x1  // Boot Reset vector Enabled
 | 
			
		||||
 | 
			
		||||
	// LOW
 | 
			
		||||
	LOW_CKDIV8    = 0x80 // Divide clock by 8 internally
 | 
			
		||||
	LOW_CKOUT     = 0x40 // Clock output on PORTE7
 | 
			
		||||
	LOW_SUT_CKSEL = 0x3f // Select Clock Source
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
// Bitfields for LOCKBIT: Lockbits
 | 
			
		||||
const (
 | 
			
		||||
	// LOCKBIT
 | 
			
		||||
	LOCKBIT_LB   = 0x3  // Memory Lock
 | 
			
		||||
	LOCKBIT_BLB0 = 0xc  // Boot Loader Protection Mode
 | 
			
		||||
	LOCKBIT_BLB1 = 0x30 // Boot Loader Protection Mode
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
// Bitfields for TC8: Timer/Counter, 8-bit
 | 
			
		||||
const (
 | 
			
		||||
	// TCCR0A: Timer/Counter0 Control Register
 | 
			
		||||
	TCCR0A_FOC0A = 0x80 // Force Output Compare
 | 
			
		||||
	TCCR0A_WGM00 = 0x40 // Waveform Generation Mode 0
 | 
			
		||||
	TCCR0A_COM0A = 0x30 // Compare Match Output Modes
 | 
			
		||||
	TCCR0A_WGM01 = 0x8  // Waveform Generation Mode 1
 | 
			
		||||
	TCCR0A_CS0   = 0x7  // Clock Selects
 | 
			
		||||
 | 
			
		||||
	// TIMSK0: Timer/Counter0 Interrupt Mask Register
 | 
			
		||||
	TIMSK0_OCIE0A = 0x2 // Timer/Counter0 Output Compare Match Interrupt Enable
 | 
			
		||||
	TIMSK0_TOIE0  = 0x1 // Timer/Counter0 Overflow Interrupt Enable
 | 
			
		||||
 | 
			
		||||
	// TIFR0: Timer/Counter0 Interrupt Flag register
 | 
			
		||||
	TIFR0_OCF0A = 0x2 // Timer/Counter0 Output Compare Flag 0
 | 
			
		||||
	TIFR0_TOV0  = 0x1 // Timer/Counter0 Overflow Flag
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
// Bitfields for TC16: Timer/Counter, 16-bit
 | 
			
		||||
const (
 | 
			
		||||
	// TCCR1A: Timer/Counter1 Control Register A
 | 
			
		||||
	TCCR1A_COM1A = 0xc0 // Compare Output Mode 1A, bits
 | 
			
		||||
	TCCR1A_COM1B = 0x30 // Compare Output Mode 1B, bits
 | 
			
		||||
	TCCR1A_WGM1  = 0x3  // Waveform Generation Mode
 | 
			
		||||
 | 
			
		||||
	// TCCR1B: Timer/Counter1 Control Register B
 | 
			
		||||
	TCCR1B_ICNC1 = 0x80 // Input Capture 1 Noise Canceler
 | 
			
		||||
	TCCR1B_ICES1 = 0x40 // Input Capture 1 Edge Select
 | 
			
		||||
	TCCR1B_WGM1  = 0x18 // Waveform Generation Mode
 | 
			
		||||
	TCCR1B_CS1   = 0x7  // Prescaler source of Timer/Counter 1
 | 
			
		||||
 | 
			
		||||
	// TCCR1C: Timer/Counter 1 Control Register C
 | 
			
		||||
	TCCR1C_FOC1A = 0x80 // Force Output Compare 1A
 | 
			
		||||
	TCCR1C_FOC1B = 0x40 // Force Output Compare 1B
 | 
			
		||||
 | 
			
		||||
	// TIMSK1: Timer/Counter1 Interrupt Mask Register
 | 
			
		||||
	TIMSK1_ICIE1  = 0x20 // Timer/Counter1 Input Capture Interrupt Enable
 | 
			
		||||
	TIMSK1_OCIE1B = 0x4  // Timer/Counter1 Output Compare B Match Interrupt Enable
 | 
			
		||||
	TIMSK1_OCIE1A = 0x2  // Timer/Counter1 Output Compare A Match Interrupt Enable
 | 
			
		||||
	TIMSK1_TOIE1  = 0x1  // Timer/Counter1 Overflow Interrupt Enable
 | 
			
		||||
 | 
			
		||||
	// TIFR1: Timer/Counter1 Interrupt Flag register
 | 
			
		||||
	TIFR1_ICF1  = 0x20 // Input Capture Flag 1
 | 
			
		||||
	TIFR1_OCF1B = 0x4  // Output Compare Flag 1B
 | 
			
		||||
	TIFR1_OCF1A = 0x2  // Output Compare Flag 1A
 | 
			
		||||
	TIFR1_TOV1  = 0x1  // Timer/Counter1 Overflow Flag
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
// Bitfields for TC8_ASYNC: Timer/Counter, 8-bit Async
 | 
			
		||||
const (
 | 
			
		||||
	// TCCR2A: Timer/Counter2 Control Register
 | 
			
		||||
	TCCR2A_FOC2A = 0x80 // Force Output Compare A
 | 
			
		||||
	TCCR2A_WGM20 = 0x40 // Waveform Generation Mode
 | 
			
		||||
	TCCR2A_COM2A = 0x30 // Compare Output Mode bits
 | 
			
		||||
	TCCR2A_WGM21 = 0x8  // Waveform Generation Mode
 | 
			
		||||
	TCCR2A_CS2   = 0x7  // Clock Select bits
 | 
			
		||||
 | 
			
		||||
	// TIMSK2: Timer/Counter2 Interrupt Mask register
 | 
			
		||||
	TIMSK2_OCIE2A = 0x2 // Timer/Counter2 Output Compare Match Interrupt Enable
 | 
			
		||||
	TIMSK2_TOIE2  = 0x1 // Timer/Counter2 Overflow Interrupt Enable
 | 
			
		||||
 | 
			
		||||
	// TIFR2: Timer/Counter2 Interrupt Flag Register
 | 
			
		||||
	TIFR2_OCF2A = 0x2 // Timer/Counter2 Output Compare Flag 2
 | 
			
		||||
	TIFR2_TOV2  = 0x1 // Timer/Counter2 Overflow Flag
 | 
			
		||||
 | 
			
		||||
	// ASSR: Asynchronous Status Register
 | 
			
		||||
	ASSR_EXCLK  = 0x10 // Enable External Clock Interrupt
 | 
			
		||||
	ASSR_AS2    = 0x8  // AS2: Asynchronous Timer/Counter2
 | 
			
		||||
	ASSR_TCN2UB = 0x4  // TCN2UB: Timer/Counter2 Update Busy
 | 
			
		||||
	ASSR_OCR2UB = 0x2  // Output Compare Register2 Update Busy
 | 
			
		||||
	ASSR_TCR2UB = 0x1  // TCR2UB: Timer/Counter Control Register2 Update Busy
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
// Bitfields for WDT: Watchdog Timer
 | 
			
		||||
const (
 | 
			
		||||
	// WDTCR: Watchdog Timer Control Register
 | 
			
		||||
	WDTCR_WDCE = 0x10 // Watchdog Change Enable
 | 
			
		||||
	WDTCR_WDE  = 0x8  // Watch Dog Enable
 | 
			
		||||
	WDTCR_WDP  = 0x7  // Watch Dog Timer Prescaler bits
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
// Bitfields for EEPROM: EEPROM
 | 
			
		||||
const (
 | 
			
		||||
	// EECR: EEPROM Control Register
 | 
			
		||||
	EECR_EERIE = 0x8 // EEPROM Ready Interrupt Enable
 | 
			
		||||
	EECR_EEMWE = 0x4 // EEPROM Master Write Enable
 | 
			
		||||
	EECR_EEWE  = 0x2 // EEPROM Write Enable
 | 
			
		||||
	EECR_EERE  = 0x1 // EEPROM Read Enable
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
// Bitfields for SPI: Serial Peripheral Interface
 | 
			
		||||
const (
 | 
			
		||||
	// SPCR: SPI Control Register
 | 
			
		||||
	SPCR_SPIE = 0x80 // SPI Interrupt Enable
 | 
			
		||||
	SPCR_SPE  = 0x40 // SPI Enable
 | 
			
		||||
	SPCR_DORD = 0x20 // Data Order
 | 
			
		||||
	SPCR_MSTR = 0x10 // Master/Slave Select
 | 
			
		||||
	SPCR_CPOL = 0x8  // Clock polarity
 | 
			
		||||
	SPCR_CPHA = 0x4  // Clock Phase
 | 
			
		||||
	SPCR_SPR  = 0x3  // SPI Clock Rate Selects
 | 
			
		||||
 | 
			
		||||
	// SPSR: SPI Status Register
 | 
			
		||||
	SPSR_SPIF  = 0x80 // SPI Interrupt Flag
 | 
			
		||||
	SPSR_WCOL  = 0x40 // Write Collision Flag
 | 
			
		||||
	SPSR_SPI2X = 0x1  // Double SPI Speed Bit
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
// Bitfields for AC: Analog Comparator
 | 
			
		||||
const (
 | 
			
		||||
	// ACSR: Analog Comparator Control And Status Register
 | 
			
		||||
	ACSR_ACD  = 0x80 // Analog Comparator Disable
 | 
			
		||||
	ACSR_ACBG = 0x40 // Analog Comparator Bandgap Select
 | 
			
		||||
	ACSR_ACO  = 0x20 // Analog Compare Output
 | 
			
		||||
	ACSR_ACI  = 0x10 // Analog Comparator Interrupt Flag
 | 
			
		||||
	ACSR_ACIE = 0x8  // Analog Comparator Interrupt Enable
 | 
			
		||||
	ACSR_ACIC = 0x4  // Analog Comparator Input Capture Enable
 | 
			
		||||
	ACSR_ACIS = 0x3  // Analog Comparator Interrupt Mode Select bits
 | 
			
		||||
 | 
			
		||||
	// DIDR1: Digital Input Disable Register 1
 | 
			
		||||
	DIDR1_AIN1D = 0x2 // AIN1 Digital Input Disable
 | 
			
		||||
	DIDR1_AIN0D = 0x1 // AIN0 Digital Input Disable
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
// Bitfields for USI: Universal Serial Interface
 | 
			
		||||
const (
 | 
			
		||||
	// USISR: USI Status Register
 | 
			
		||||
	USISR_USISIF = 0x80 // Start Condition Interrupt Flag
 | 
			
		||||
	USISR_USIOIF = 0x40 // Counter Overflow Interrupt Flag
 | 
			
		||||
	USISR_USIPF  = 0x20 // Stop Condition Flag
 | 
			
		||||
	USISR_USIDC  = 0x10 // Data Output Collision
 | 
			
		||||
	USISR_USICNT = 0xf  // USI Counter Value Bits
 | 
			
		||||
 | 
			
		||||
	// USICR: USI Control Register
 | 
			
		||||
	USICR_USISIE = 0x80 // Start Condition Interrupt Enable
 | 
			
		||||
	USICR_USIOIE = 0x40 // Counter Overflow Interrupt Enable
 | 
			
		||||
	USICR_USIWM  = 0x30 // USI Wire Mode Bits
 | 
			
		||||
	USICR_USICS  = 0xc  // USI Clock Source Select Bits
 | 
			
		||||
	USICR_USICLK = 0x2  // Clock Strobe
 | 
			
		||||
	USICR_USITC  = 0x1  // Toggle Clock Port Pin
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
// Bitfields for ADC: Analog-to-Digital Converter
 | 
			
		||||
const (
 | 
			
		||||
	// ADMUX: The ADC multiplexer Selection Register
 | 
			
		||||
	ADMUX_REFS  = 0xc0 // Reference Selection Bits
 | 
			
		||||
	ADMUX_ADLAR = 0x20 // Left Adjust Result
 | 
			
		||||
	ADMUX_MUX   = 0x1f // Analog Channel and Gain Selection Bits
 | 
			
		||||
 | 
			
		||||
	// ADCSRA: The ADC Control and Status register
 | 
			
		||||
	ADCSRA_ADEN  = 0x80 // ADC Enable
 | 
			
		||||
	ADCSRA_ADSC  = 0x40 // ADC Start Conversion
 | 
			
		||||
	ADCSRA_ADATE = 0x20 // ADC Auto Trigger Enable
 | 
			
		||||
	ADCSRA_ADIF  = 0x10 // ADC Interrupt Flag
 | 
			
		||||
	ADCSRA_ADIE  = 0x8  // ADC Interrupt Enable
 | 
			
		||||
	ADCSRA_ADPS  = 0x7  // ADC  Prescaler Select Bits
 | 
			
		||||
 | 
			
		||||
	// DIDR0: Digital Input Disable Register 0
 | 
			
		||||
	DIDR0_ADC7D = 0x80 // ADC7 Digital input Disable
 | 
			
		||||
	DIDR0_ADC6D = 0x40 // ADC6 Digital input Disable
 | 
			
		||||
	DIDR0_ADC5D = 0x20 // ADC5 Digital input Disable
 | 
			
		||||
	DIDR0_ADC4D = 0x10 // ADC4 Digital input Disable
 | 
			
		||||
	DIDR0_ADC3D = 0x8  // ADC3 Digital input Disable
 | 
			
		||||
	DIDR0_ADC2D = 0x4  // ADC2 Digital input Disable
 | 
			
		||||
	DIDR0_ADC1D = 0x2  // ADC1 Digital input Disable
 | 
			
		||||
	DIDR0_ADC0D = 0x1  // ADC0 Digital input Disable
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
// Bitfields for BOOT_LOAD: Bootloader
 | 
			
		||||
const (
 | 
			
		||||
	// SPMCSR: Store Program Memory Control Register
 | 
			
		||||
	SPMCSR_SPMIE  = 0x80 // SPM Interrupt Enable
 | 
			
		||||
	SPMCSR_RWWSB  = 0x40 // Read While Write Section Busy
 | 
			
		||||
	SPMCSR_RWWSRE = 0x10 // Read While Write section read enable
 | 
			
		||||
	SPMCSR_BLBSET = 0x8  // Boot Lock Bit Set
 | 
			
		||||
	SPMCSR_PGWRT  = 0x4  // Page Write
 | 
			
		||||
	SPMCSR_PGERS  = 0x2  // Page Erase
 | 
			
		||||
	SPMCSR_SPMEN  = 0x1  // Store Program Memory Enable
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
// Bitfields for USART: USART
 | 
			
		||||
const (
 | 
			
		||||
	// UCSR0A: USART Control and Status Register A
 | 
			
		||||
	UCSR0A_RXC0  = 0x80 // USART Receive Complete
 | 
			
		||||
	UCSR0A_TXC0  = 0x40 // USART Transmit Complete
 | 
			
		||||
	UCSR0A_UDRE0 = 0x20 // USART Data Register Empty
 | 
			
		||||
	UCSR0A_FE0   = 0x10 // Framing Error
 | 
			
		||||
	UCSR0A_DOR0  = 0x8  // Data OverRun
 | 
			
		||||
	UCSR0A_UPE0  = 0x4  // USART Parity Error
 | 
			
		||||
	UCSR0A_U2X0  = 0x2  // Double the USART Transmission Speed
 | 
			
		||||
	UCSR0A_MPCM0 = 0x1  // Multi-processor Communication Mode
 | 
			
		||||
 | 
			
		||||
	// UCSR0B: USART Control and Status Register B
 | 
			
		||||
	UCSR0B_RXCIE0 = 0x80 // RX Complete Interrupt Enable
 | 
			
		||||
	UCSR0B_TXCIE0 = 0x40 // TX Complete Interrupt Enable
 | 
			
		||||
	UCSR0B_UDRIE0 = 0x20 // USART Data Register Empty Interrupt Enable
 | 
			
		||||
	UCSR0B_RXEN0  = 0x10 // Receiver Enable
 | 
			
		||||
	UCSR0B_TXEN0  = 0x8  // Transmitter Enable
 | 
			
		||||
	UCSR0B_UCSZ02 = 0x4  // Character Size
 | 
			
		||||
	UCSR0B_RXB80  = 0x2  // Receive Data Bit 8
 | 
			
		||||
	UCSR0B_TXB80  = 0x1  // Transmit Data Bit 8
 | 
			
		||||
 | 
			
		||||
	// UCSR0C: USART Control and Status Register C
 | 
			
		||||
	UCSR0C_UMSEL0 = 0x40 // USART Mode Select
 | 
			
		||||
	UCSR0C_UPM0   = 0x30 // Parity Mode Bits
 | 
			
		||||
	UCSR0C_USBS0  = 0x8  // Stop Bit Select
 | 
			
		||||
	UCSR0C_UCSZ0  = 0x6  // Character Size
 | 
			
		||||
	UCSR0C_UCPOL0 = 0x1  // Clock Polarity
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
// Bitfields for EXINT: External Interrupts
 | 
			
		||||
const (
 | 
			
		||||
	// EICRA: External Interrupt Control Register
 | 
			
		||||
	EICRA_ISC01 = 0x2 // External Interrupt Sense Control 0 Bit 1
 | 
			
		||||
	EICRA_ISC00 = 0x1 // External Interrupt Sense Control 0 Bit 0
 | 
			
		||||
 | 
			
		||||
	// EIMSK: External Interrupt Mask Register
 | 
			
		||||
	EIMSK_PCIE = 0x30 // Pin Change Interrupt Enables
 | 
			
		||||
	EIMSK_INT0 = 0x1  // External Interrupt Request 0 Enable
 | 
			
		||||
 | 
			
		||||
	// EIFR: External Interrupt Flag Register
 | 
			
		||||
	EIFR_PCIF  = 0x30 // Pin Change Interrupt Flags
 | 
			
		||||
	EIFR_INTF0 = 0x1  // External Interrupt Flag 0
 | 
			
		||||
 | 
			
		||||
	// PCMSK1: Pin Change Mask Register 1
 | 
			
		||||
	PCMSK1_PCINT = 0xff // Pin Change Enable Masks
 | 
			
		||||
 | 
			
		||||
	// PCMSK0: Pin Change Mask Register 0
 | 
			
		||||
	PCMSK0_PCINT = 0xff // Pin Change Enable Masks
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
// Bitfields for CPU: CPU Registers
 | 
			
		||||
const (
 | 
			
		||||
	// SREG: Status Register
 | 
			
		||||
	SREG_I = 0x80 // Global Interrupt Enable
 | 
			
		||||
	SREG_T = 0x40 // Bit Copy Storage
 | 
			
		||||
	SREG_H = 0x20 // Half Carry Flag
 | 
			
		||||
	SREG_S = 0x10 // Sign Bit
 | 
			
		||||
	SREG_V = 0x8  // Two's Complement Overflow Flag
 | 
			
		||||
	SREG_N = 0x4  // Negative Flag
 | 
			
		||||
	SREG_Z = 0x2  // Zero Flag
 | 
			
		||||
	SREG_C = 0x1  // Carry Flag
 | 
			
		||||
 | 
			
		||||
	// OSCCAL: Oscillator Calibration Value
 | 
			
		||||
	OSCCAL_OSCCAL = 0xff // Oscillator Calibration
 | 
			
		||||
 | 
			
		||||
	// CLKPR: Clock Prescale Register
 | 
			
		||||
	CLKPR_CLKPCE = 0x80 // Clock Prescaler Change Enable
 | 
			
		||||
	CLKPR_CLKPS  = 0xf  // Clock Prescaler Select Bits
 | 
			
		||||
 | 
			
		||||
	// PRR: Power Reduction Register
 | 
			
		||||
	PRR_PRTIM1   = 0x8 // Power Reduction Timer/Counter1
 | 
			
		||||
	PRR_PRSPI    = 0x4 // Power Reduction Serial Peripheral Interface
 | 
			
		||||
	PRR_PRUSART0 = 0x2 // Power Reduction USART
 | 
			
		||||
	PRR_PRADC    = 0x1 // Power Reduction ADC
 | 
			
		||||
 | 
			
		||||
	// SMCR: Sleep Mode Control Register
 | 
			
		||||
	SMCR_SM = 0xe // Sleep Mode Select bits
 | 
			
		||||
	SMCR_SE = 0x1 // Sleep Enable
 | 
			
		||||
)
 | 
			
		||||
							
								
								
									
										6
									
								
								src/device/avr/atmega165pa.ld
									
										
									
									
									
										Обычный файл
									
								
							
							
						
						
									
										6
									
								
								src/device/avr/atmega165pa.ld
									
										
									
									
									
										Обычный файл
									
								
							| 
						 | 
				
			
			@ -0,0 +1,6 @@
 | 
			
		|||
/* Automatically generated file. DO NOT EDIT. */
 | 
			
		||||
/* Generated by gen-device.py from ATmega165PA.atdf, see http://packs.download.atmel.com/ */
 | 
			
		||||
 | 
			
		||||
__flash_size = 0x4000;
 | 
			
		||||
__ram_size   = 0x400;
 | 
			
		||||
__num_isrs   = 22;
 | 
			
		||||
							
								
								
									
										640
									
								
								src/device/avr/atmega168.go
									
										
									
									
									
										Обычный файл
									
								
							
							
						
						
									
										640
									
								
								src/device/avr/atmega168.go
									
										
									
									
									
										Обычный файл
									
								
							| 
						 | 
				
			
			@ -0,0 +1,640 @@
 | 
			
		|||
// Automatically generated file. DO NOT EDIT.
 | 
			
		||||
// Generated by gen-device.py from ATmega168.atdf, see http://packs.download.atmel.com/
 | 
			
		||||
 | 
			
		||||
// +build avr,atmega168
 | 
			
		||||
 | 
			
		||||
// Device information for the ATmega168.
 | 
			
		||||
//
 | 
			
		||||
package avr
 | 
			
		||||
 | 
			
		||||
// Magic type name for the compiler.
 | 
			
		||||
type __reg uint8
 | 
			
		||||
 | 
			
		||||
// Export this magic type name.
 | 
			
		||||
type RegValue = __reg
 | 
			
		||||
 | 
			
		||||
// Some information about this device.
 | 
			
		||||
const (
 | 
			
		||||
	DEVICE = "ATmega168"
 | 
			
		||||
	ARCH   = "AVR8"
 | 
			
		||||
	FAMILY = "megaAVR"
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
// Interrupts
 | 
			
		||||
const (
 | 
			
		||||
	IRQ_RESET        = 0  // External Pin, Power-on Reset, Brown-out Reset and Watchdog Reset
 | 
			
		||||
	IRQ_INT0         = 1  // External Interrupt Request 0
 | 
			
		||||
	IRQ_INT1         = 2  // External Interrupt Request 1
 | 
			
		||||
	IRQ_PCINT0       = 3  // Pin Change Interrupt Request 0
 | 
			
		||||
	IRQ_PCINT1       = 4  // Pin Change Interrupt Request 0
 | 
			
		||||
	IRQ_PCINT2       = 5  // Pin Change Interrupt Request 1
 | 
			
		||||
	IRQ_WDT          = 6  // Watchdog Time-out Interrupt
 | 
			
		||||
	IRQ_TIMER2_COMPA = 7  // Timer/Counter2 Compare Match A
 | 
			
		||||
	IRQ_TIMER2_COMPB = 8  // Timer/Counter2 Compare Match A
 | 
			
		||||
	IRQ_TIMER2_OVF   = 9  // Timer/Counter2 Overflow
 | 
			
		||||
	IRQ_TIMER1_CAPT  = 10 // Timer/Counter1 Capture Event
 | 
			
		||||
	IRQ_TIMER1_COMPA = 11 // Timer/Counter1 Compare Match A
 | 
			
		||||
	IRQ_TIMER1_COMPB = 12 // Timer/Counter1 Compare Match B
 | 
			
		||||
	IRQ_TIMER1_OVF   = 13 // Timer/Counter1 Overflow
 | 
			
		||||
	IRQ_TIMER0_COMPA = 14 // TimerCounter0 Compare Match A
 | 
			
		||||
	IRQ_TIMER0_COMPB = 15 // TimerCounter0 Compare Match B
 | 
			
		||||
	IRQ_TIMER0_OVF   = 16 // Timer/Couner0 Overflow
 | 
			
		||||
	IRQ_SPI_STC      = 17 // SPI Serial Transfer Complete
 | 
			
		||||
	IRQ_USART_RX     = 18 // USART Rx Complete
 | 
			
		||||
	IRQ_USART_UDRE   = 19 // USART, Data Register Empty
 | 
			
		||||
	IRQ_USART_TX     = 20 // USART Tx Complete
 | 
			
		||||
	IRQ_ADC          = 21 // ADC Conversion Complete
 | 
			
		||||
	IRQ_EE_READY     = 22 // EEPROM Ready
 | 
			
		||||
	IRQ_ANALOG_COMP  = 23 // Analog Comparator
 | 
			
		||||
	IRQ_TWI          = 24 // Two-wire Serial Interface
 | 
			
		||||
	IRQ_SPM_READY    = 25 // Store Program Memory Read
 | 
			
		||||
	IRQ_max          = 25 // Highest interrupt number on this device.
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
// Peripherals
 | 
			
		||||
var (
 | 
			
		||||
	// Fuses
 | 
			
		||||
	FUSE = struct {
 | 
			
		||||
		EXTENDED __reg
 | 
			
		||||
		HIGH     __reg
 | 
			
		||||
		LOW      __reg
 | 
			
		||||
	}{
 | 
			
		||||
		EXTENDED: 0x2,
 | 
			
		||||
		HIGH:     0x1,
 | 
			
		||||
		LOW:      0x0,
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	// Lockbits
 | 
			
		||||
	LOCKBIT = struct {
 | 
			
		||||
		LOCKBIT __reg
 | 
			
		||||
	}{
 | 
			
		||||
		LOCKBIT: 0x0,
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	// USART
 | 
			
		||||
	USART = struct {
 | 
			
		||||
		UDR0   __reg
 | 
			
		||||
		UCSR0A __reg
 | 
			
		||||
		UCSR0B __reg
 | 
			
		||||
		UCSR0C __reg
 | 
			
		||||
		UBRR0L __reg
 | 
			
		||||
		UBRR0H __reg
 | 
			
		||||
	}{
 | 
			
		||||
		UDR0:   0xc6, // USART I/O Data Register
 | 
			
		||||
		UCSR0A: 0xc0, // USART Control and Status Register A
 | 
			
		||||
		UCSR0B: 0xc1, // USART Control and Status Register B
 | 
			
		||||
		UCSR0C: 0xc2, // USART Control and Status Register C
 | 
			
		||||
		UBRR0L: 0xc4, // USART Baud Rate Register  Bytes
 | 
			
		||||
		UBRR0H: 0xc4, // USART Baud Rate Register  Bytes
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	// Two Wire Serial Interface
 | 
			
		||||
	TWI = struct {
 | 
			
		||||
		TWAMR __reg
 | 
			
		||||
		TWBR  __reg
 | 
			
		||||
		TWCR  __reg
 | 
			
		||||
		TWSR  __reg
 | 
			
		||||
		TWDR  __reg
 | 
			
		||||
		TWAR  __reg
 | 
			
		||||
	}{
 | 
			
		||||
		TWAMR: 0xbd, // TWI (Slave) Address Mask Register
 | 
			
		||||
		TWBR:  0xb8, // TWI Bit Rate register
 | 
			
		||||
		TWCR:  0xbc, // TWI Control Register
 | 
			
		||||
		TWSR:  0xb9, // TWI Status Register
 | 
			
		||||
		TWDR:  0xbb, // TWI Data register
 | 
			
		||||
		TWAR:  0xba, // TWI (Slave) Address register
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	// Timer/Counter, 16-bit
 | 
			
		||||
	TC16 = struct {
 | 
			
		||||
		TIMSK1 __reg
 | 
			
		||||
		TIFR1  __reg
 | 
			
		||||
		TCCR1A __reg
 | 
			
		||||
		TCCR1B __reg
 | 
			
		||||
		TCCR1C __reg
 | 
			
		||||
		TCNT1L __reg
 | 
			
		||||
		TCNT1H __reg
 | 
			
		||||
		OCR1AL __reg
 | 
			
		||||
		OCR1AH __reg
 | 
			
		||||
		OCR1BL __reg
 | 
			
		||||
		OCR1BH __reg
 | 
			
		||||
		ICR1L  __reg
 | 
			
		||||
		ICR1H  __reg
 | 
			
		||||
	}{
 | 
			
		||||
		TIMSK1: 0x6f, // Timer/Counter Interrupt Mask Register
 | 
			
		||||
		TIFR1:  0x36, // Timer/Counter Interrupt Flag register
 | 
			
		||||
		TCCR1A: 0x80, // Timer/Counter1 Control Register A
 | 
			
		||||
		TCCR1B: 0x81, // Timer/Counter1 Control Register B
 | 
			
		||||
		TCCR1C: 0x82, // Timer/Counter1 Control Register C
 | 
			
		||||
		TCNT1L: 0x84, // Timer/Counter1  Bytes
 | 
			
		||||
		TCNT1H: 0x84, // Timer/Counter1  Bytes
 | 
			
		||||
		OCR1AL: 0x88, // Timer/Counter1 Output Compare Register  Bytes
 | 
			
		||||
		OCR1AH: 0x88, // Timer/Counter1 Output Compare Register  Bytes
 | 
			
		||||
		OCR1BL: 0x8a, // Timer/Counter1 Output Compare Register  Bytes
 | 
			
		||||
		OCR1BH: 0x8a, // Timer/Counter1 Output Compare Register  Bytes
 | 
			
		||||
		ICR1L:  0x86, // Timer/Counter1 Input Capture Register  Bytes
 | 
			
		||||
		ICR1H:  0x86, // Timer/Counter1 Input Capture Register  Bytes
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	// Timer/Counter, 8-bit Async
 | 
			
		||||
	TC8_ASYNC = struct {
 | 
			
		||||
		TIMSK2 __reg
 | 
			
		||||
		TIFR2  __reg
 | 
			
		||||
		TCCR2A __reg
 | 
			
		||||
		TCCR2B __reg
 | 
			
		||||
		TCNT2  __reg
 | 
			
		||||
		OCR2B  __reg
 | 
			
		||||
		OCR2A  __reg
 | 
			
		||||
		ASSR   __reg
 | 
			
		||||
	}{
 | 
			
		||||
		TIMSK2: 0x70, // Timer/Counter Interrupt Mask register
 | 
			
		||||
		TIFR2:  0x37, // Timer/Counter Interrupt Flag Register
 | 
			
		||||
		TCCR2A: 0xb0, // Timer/Counter2 Control Register A
 | 
			
		||||
		TCCR2B: 0xb1, // Timer/Counter2 Control Register B
 | 
			
		||||
		TCNT2:  0xb2, // Timer/Counter2
 | 
			
		||||
		OCR2B:  0xb4, // Timer/Counter2 Output Compare Register B
 | 
			
		||||
		OCR2A:  0xb3, // Timer/Counter2 Output Compare Register A
 | 
			
		||||
		ASSR:   0xb6, // Asynchronous Status Register
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	// Analog-to-Digital Converter
 | 
			
		||||
	ADC = struct {
 | 
			
		||||
		ADMUX  __reg
 | 
			
		||||
		ADCL   __reg
 | 
			
		||||
		ADCH   __reg
 | 
			
		||||
		ADCSRA __reg
 | 
			
		||||
		ADCSRB __reg
 | 
			
		||||
		DIDR0  __reg
 | 
			
		||||
	}{
 | 
			
		||||
		ADMUX:  0x7c, // The ADC multiplexer Selection Register
 | 
			
		||||
		ADCL:   0x78, // ADC Data Register  Bytes
 | 
			
		||||
		ADCH:   0x78, // ADC Data Register  Bytes
 | 
			
		||||
		ADCSRA: 0x7a, // The ADC Control and Status register A
 | 
			
		||||
		ADCSRB: 0x7b, // The ADC Control and Status register B
 | 
			
		||||
		DIDR0:  0x7e, // Digital Input Disable Register
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	// Analog Comparator
 | 
			
		||||
	AC = struct {
 | 
			
		||||
		ACSR  __reg
 | 
			
		||||
		DIDR1 __reg
 | 
			
		||||
	}{
 | 
			
		||||
		ACSR:  0x50, // Analog Comparator Control And Status Register
 | 
			
		||||
		DIDR1: 0x7f, // Digital Input Disable Register 1
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	// I/O Port
 | 
			
		||||
	PORT = struct {
 | 
			
		||||
		PORTB __reg
 | 
			
		||||
		DDRB  __reg
 | 
			
		||||
		PINB  __reg
 | 
			
		||||
		PORTC __reg
 | 
			
		||||
		DDRC  __reg
 | 
			
		||||
		PINC  __reg
 | 
			
		||||
		PORTD __reg
 | 
			
		||||
		DDRD  __reg
 | 
			
		||||
		PIND  __reg
 | 
			
		||||
	}{
 | 
			
		||||
		PORTB: 0x25, // Port B Data Register
 | 
			
		||||
		DDRB:  0x24, // Port B Data Direction Register
 | 
			
		||||
		PINB:  0x23, // Port B Input Pins
 | 
			
		||||
		PORTC: 0x28, // Port C Data Register
 | 
			
		||||
		DDRC:  0x27, // Port C Data Direction Register
 | 
			
		||||
		PINC:  0x26, // Port C Input Pins
 | 
			
		||||
		PORTD: 0x2b, // Port D Data Register
 | 
			
		||||
		DDRD:  0x2a, // Port D Data Direction Register
 | 
			
		||||
		PIND:  0x29, // Port D Input Pins
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	// Timer/Counter, 8-bit
 | 
			
		||||
	TC8 = struct {
 | 
			
		||||
		OCR0B  __reg
 | 
			
		||||
		OCR0A  __reg
 | 
			
		||||
		TCNT0  __reg
 | 
			
		||||
		TCCR0B __reg
 | 
			
		||||
		TCCR0A __reg
 | 
			
		||||
		TIMSK0 __reg
 | 
			
		||||
		TIFR0  __reg
 | 
			
		||||
	}{
 | 
			
		||||
		OCR0B:  0x48, // Timer/Counter0 Output Compare Register
 | 
			
		||||
		OCR0A:  0x47, // Timer/Counter0 Output Compare Register
 | 
			
		||||
		TCNT0:  0x46, // Timer/Counter0
 | 
			
		||||
		TCCR0B: 0x45, // Timer/Counter Control Register B
 | 
			
		||||
		TCCR0A: 0x44, // Timer/Counter  Control Register A
 | 
			
		||||
		TIMSK0: 0x6e, // Timer/Counter0 Interrupt Mask Register
 | 
			
		||||
		TIFR0:  0x35, // Timer/Counter0 Interrupt Flag register
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	// External Interrupts
 | 
			
		||||
	EXINT = struct {
 | 
			
		||||
		EICRA  __reg
 | 
			
		||||
		EIMSK  __reg
 | 
			
		||||
		EIFR   __reg
 | 
			
		||||
		PCICR  __reg
 | 
			
		||||
		PCMSK2 __reg
 | 
			
		||||
		PCMSK1 __reg
 | 
			
		||||
		PCMSK0 __reg
 | 
			
		||||
		PCIFR  __reg
 | 
			
		||||
	}{
 | 
			
		||||
		EICRA:  0x69, // External Interrupt Control Register
 | 
			
		||||
		EIMSK:  0x3d, // External Interrupt Mask Register
 | 
			
		||||
		EIFR:   0x3c, // External Interrupt Flag Register
 | 
			
		||||
		PCICR:  0x68, // Pin Change Interrupt Control Register
 | 
			
		||||
		PCMSK2: 0x6d, // Pin Change Mask Register 2
 | 
			
		||||
		PCMSK1: 0x6c, // Pin Change Mask Register 1
 | 
			
		||||
		PCMSK0: 0x6b, // Pin Change Mask Register 0
 | 
			
		||||
		PCIFR:  0x3b, // Pin Change Interrupt Flag Register
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	// Serial Peripheral Interface
 | 
			
		||||
	SPI = struct {
 | 
			
		||||
		SPDR __reg
 | 
			
		||||
		SPSR __reg
 | 
			
		||||
		SPCR __reg
 | 
			
		||||
	}{
 | 
			
		||||
		SPDR: 0x4e, // SPI Data Register
 | 
			
		||||
		SPSR: 0x4d, // SPI Status Register
 | 
			
		||||
		SPCR: 0x4c, // SPI Control Register
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	// CPU Registers
 | 
			
		||||
	CPU = struct {
 | 
			
		||||
		PRR    __reg
 | 
			
		||||
		OSCCAL __reg
 | 
			
		||||
		CLKPR  __reg
 | 
			
		||||
		SREG   __reg
 | 
			
		||||
		SPL    __reg
 | 
			
		||||
		SPH    __reg
 | 
			
		||||
		SPMCSR __reg
 | 
			
		||||
		MCUCR  __reg
 | 
			
		||||
		MCUSR  __reg
 | 
			
		||||
		SMCR   __reg
 | 
			
		||||
		GPIOR2 __reg
 | 
			
		||||
		GPIOR1 __reg
 | 
			
		||||
		GPIOR0 __reg
 | 
			
		||||
	}{
 | 
			
		||||
		PRR:    0x64, // Power Reduction Register
 | 
			
		||||
		OSCCAL: 0x66, // Oscillator Calibration Value
 | 
			
		||||
		CLKPR:  0x61, // Clock Prescale Register
 | 
			
		||||
		SREG:   0x5f, // Status Register
 | 
			
		||||
		SPL:    0x5d, // Stack Pointer
 | 
			
		||||
		SPH:    0x5d, // Stack Pointer
 | 
			
		||||
		SPMCSR: 0x57, // Store Program Memory Control and Status Register
 | 
			
		||||
		MCUCR:  0x55, // MCU Control Register
 | 
			
		||||
		MCUSR:  0x54, // MCU Status Register
 | 
			
		||||
		SMCR:   0x53, // Sleep Mode Control Register
 | 
			
		||||
		GPIOR2: 0x4b, // General Purpose I/O Register 2
 | 
			
		||||
		GPIOR1: 0x4a, // General Purpose I/O Register 1
 | 
			
		||||
		GPIOR0: 0x3e, // General Purpose I/O Register 0
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	// Watchdog Timer
 | 
			
		||||
	WDT = struct {
 | 
			
		||||
		WDTCSR __reg
 | 
			
		||||
	}{
 | 
			
		||||
		WDTCSR: 0x60, // Watchdog Timer Control Register
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	// EEPROM
 | 
			
		||||
	EEPROM = struct {
 | 
			
		||||
		EEARL __reg
 | 
			
		||||
		EEARH __reg
 | 
			
		||||
		EEDR  __reg
 | 
			
		||||
		EECR  __reg
 | 
			
		||||
	}{
 | 
			
		||||
		EEARL: 0x41, // EEPROM Address Register  Bytes
 | 
			
		||||
		EEARH: 0x41, // EEPROM Address Register  Bytes
 | 
			
		||||
		EEDR:  0x40, // EEPROM Data Register
 | 
			
		||||
		EECR:  0x3f, // EEPROM Control Register
 | 
			
		||||
	}
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
// Bitfields for FUSE: Fuses
 | 
			
		||||
const (
 | 
			
		||||
	// EXTENDED
 | 
			
		||||
	EXTENDED_BOOTSZ  = 0x6 // Select boot size
 | 
			
		||||
	EXTENDED_BOOTRST = 0x1 // Boot Reset vector Enabled
 | 
			
		||||
 | 
			
		||||
	// HIGH
 | 
			
		||||
	HIGH_RSTDISBL = 0x80 // Reset Disabled (Enable PC6 as i/o pin)
 | 
			
		||||
	HIGH_DWEN     = 0x40 // Debug Wire enable
 | 
			
		||||
	HIGH_SPIEN    = 0x20 // Serial program downloading (SPI) enabled
 | 
			
		||||
	HIGH_WDTON    = 0x10 // Watch-dog Timer always on
 | 
			
		||||
	HIGH_EESAVE   = 0x8  // Preserve EEPROM through the Chip Erase cycle
 | 
			
		||||
	HIGH_BODLEVEL = 0x7  // Brown-out Detector trigger level
 | 
			
		||||
 | 
			
		||||
	// LOW
 | 
			
		||||
	LOW_CKDIV8    = 0x80 // Divide clock by 8 internally
 | 
			
		||||
	LOW_CKOUT     = 0x40 // Clock output on PORTB0
 | 
			
		||||
	LOW_SUT_CKSEL = 0x3f // Select Clock Source
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
// Bitfields for LOCKBIT: Lockbits
 | 
			
		||||
const (
 | 
			
		||||
	// LOCKBIT
 | 
			
		||||
	LOCKBIT_LB   = 0x3  // Memory Lock
 | 
			
		||||
	LOCKBIT_BLB0 = 0xc  // Boot Loader Protection Mode
 | 
			
		||||
	LOCKBIT_BLB1 = 0x30 // Boot Loader Protection Mode
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
// Bitfields for USART: USART
 | 
			
		||||
const (
 | 
			
		||||
	// UCSR0A: USART Control and Status Register A
 | 
			
		||||
	UCSR0A_RXC0  = 0x80 // USART Receive Complete
 | 
			
		||||
	UCSR0A_TXC0  = 0x40 // USART Transmitt Complete
 | 
			
		||||
	UCSR0A_UDRE0 = 0x20 // USART Data Register Empty
 | 
			
		||||
	UCSR0A_FE0   = 0x10 // Framing Error
 | 
			
		||||
	UCSR0A_DOR0  = 0x8  // Data overRun
 | 
			
		||||
	UCSR0A_UPE0  = 0x4  // Parity Error
 | 
			
		||||
	UCSR0A_U2X0  = 0x2  // Double the USART transmission speed
 | 
			
		||||
	UCSR0A_MPCM0 = 0x1  // Multi-processor Communication Mode
 | 
			
		||||
 | 
			
		||||
	// UCSR0B: USART Control and Status Register B
 | 
			
		||||
	UCSR0B_RXCIE0 = 0x80 // RX Complete Interrupt Enable
 | 
			
		||||
	UCSR0B_TXCIE0 = 0x40 // TX Complete Interrupt Enable
 | 
			
		||||
	UCSR0B_UDRIE0 = 0x20 // USART Data register Empty Interrupt Enable
 | 
			
		||||
	UCSR0B_RXEN0  = 0x10 // Receiver Enable
 | 
			
		||||
	UCSR0B_TXEN0  = 0x8  // Transmitter Enable
 | 
			
		||||
	UCSR0B_UCSZ02 = 0x4  // Character Size
 | 
			
		||||
	UCSR0B_RXB80  = 0x2  // Receive Data Bit 8
 | 
			
		||||
	UCSR0B_TXB80  = 0x1  // Transmit Data Bit 8
 | 
			
		||||
 | 
			
		||||
	// UCSR0C: USART Control and Status Register C
 | 
			
		||||
	UCSR0C_UMSEL0 = 0xc0 // USART Mode Select
 | 
			
		||||
	UCSR0C_UPM0   = 0x30 // Parity Mode Bits
 | 
			
		||||
	UCSR0C_USBS0  = 0x8  // Stop Bit Select
 | 
			
		||||
	UCSR0C_UCSZ0  = 0x6  // Character Size
 | 
			
		||||
	UCSR0C_UCPOL0 = 0x1  // Clock Polarity
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
// Bitfields for TWI: Two Wire Serial Interface
 | 
			
		||||
const (
 | 
			
		||||
	// TWAMR: TWI (Slave) Address Mask Register
 | 
			
		||||
	TWAMR_TWAM = 0xfe
 | 
			
		||||
 | 
			
		||||
	// TWCR: TWI Control Register
 | 
			
		||||
	TWCR_TWINT = 0x80 // TWI Interrupt Flag
 | 
			
		||||
	TWCR_TWEA  = 0x40 // TWI Enable Acknowledge Bit
 | 
			
		||||
	TWCR_TWSTA = 0x20 // TWI Start Condition Bit
 | 
			
		||||
	TWCR_TWSTO = 0x10 // TWI Stop Condition Bit
 | 
			
		||||
	TWCR_TWWC  = 0x8  // TWI Write Collition Flag
 | 
			
		||||
	TWCR_TWEN  = 0x4  // TWI Enable Bit
 | 
			
		||||
	TWCR_TWIE  = 0x1  // TWI Interrupt Enable
 | 
			
		||||
 | 
			
		||||
	// TWSR: TWI Status Register
 | 
			
		||||
	TWSR_TWS  = 0xf8 // TWI Status
 | 
			
		||||
	TWSR_TWPS = 0x3  // TWI Prescaler
 | 
			
		||||
 | 
			
		||||
	// TWAR: TWI (Slave) Address register
 | 
			
		||||
	TWAR_TWA   = 0xfe // TWI (Slave) Address register Bits
 | 
			
		||||
	TWAR_TWGCE = 0x1  // TWI General Call Recognition Enable Bit
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
// Bitfields for TC16: Timer/Counter, 16-bit
 | 
			
		||||
const (
 | 
			
		||||
	// TIMSK1: Timer/Counter Interrupt Mask Register
 | 
			
		||||
	TIMSK1_ICIE1  = 0x20 // Timer/Counter1 Input Capture Interrupt Enable
 | 
			
		||||
	TIMSK1_OCIE1B = 0x4  // Timer/Counter1 Output CompareB Match Interrupt Enable
 | 
			
		||||
	TIMSK1_OCIE1A = 0x2  // Timer/Counter1 Output CompareA Match Interrupt Enable
 | 
			
		||||
	TIMSK1_TOIE1  = 0x1  // Timer/Counter1 Overflow Interrupt Enable
 | 
			
		||||
 | 
			
		||||
	// TIFR1: Timer/Counter Interrupt Flag register
 | 
			
		||||
	TIFR1_ICF1  = 0x20 // Input Capture Flag 1
 | 
			
		||||
	TIFR1_OCF1B = 0x4  // Output Compare Flag 1B
 | 
			
		||||
	TIFR1_OCF1A = 0x2  // Output Compare Flag 1A
 | 
			
		||||
	TIFR1_TOV1  = 0x1  // Timer/Counter1 Overflow Flag
 | 
			
		||||
 | 
			
		||||
	// TCCR1A: Timer/Counter1 Control Register A
 | 
			
		||||
	TCCR1A_COM1A = 0xc0 // Compare Output Mode 1A, bits
 | 
			
		||||
	TCCR1A_COM1B = 0x30 // Compare Output Mode 1B, bits
 | 
			
		||||
	TCCR1A_WGM1  = 0x3  // Waveform Generation Mode
 | 
			
		||||
 | 
			
		||||
	// TCCR1B: Timer/Counter1 Control Register B
 | 
			
		||||
	TCCR1B_ICNC1 = 0x80 // Input Capture 1 Noise Canceler
 | 
			
		||||
	TCCR1B_ICES1 = 0x40 // Input Capture 1 Edge Select
 | 
			
		||||
	TCCR1B_WGM1  = 0x18 // Waveform Generation Mode
 | 
			
		||||
	TCCR1B_CS1   = 0x7  // Prescaler source of Timer/Counter 1
 | 
			
		||||
 | 
			
		||||
	// TCCR1C: Timer/Counter1 Control Register C
 | 
			
		||||
	TCCR1C_FOC1A = 0x80
 | 
			
		||||
	TCCR1C_FOC1B = 0x40
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
// Bitfields for TC8_ASYNC: Timer/Counter, 8-bit Async
 | 
			
		||||
const (
 | 
			
		||||
	// TIMSK2: Timer/Counter Interrupt Mask register
 | 
			
		||||
	TIMSK2_OCIE2B = 0x4 // Timer/Counter2 Output Compare Match B Interrupt Enable
 | 
			
		||||
	TIMSK2_OCIE2A = 0x2 // Timer/Counter2 Output Compare Match A Interrupt Enable
 | 
			
		||||
	TIMSK2_TOIE2  = 0x1 // Timer/Counter2 Overflow Interrupt Enable
 | 
			
		||||
 | 
			
		||||
	// TIFR2: Timer/Counter Interrupt Flag Register
 | 
			
		||||
	TIFR2_OCF2B = 0x4 // Output Compare Flag 2B
 | 
			
		||||
	TIFR2_OCF2A = 0x2 // Output Compare Flag 2A
 | 
			
		||||
	TIFR2_TOV2  = 0x1 // Timer/Counter2 Overflow Flag
 | 
			
		||||
 | 
			
		||||
	// TCCR2A: Timer/Counter2 Control Register A
 | 
			
		||||
	TCCR2A_COM2A = 0xc0 // Compare Output Mode bits
 | 
			
		||||
	TCCR2A_COM2B = 0x30 // Compare Output Mode bits
 | 
			
		||||
	TCCR2A_WGM2  = 0x3  // Waveform Genration Mode
 | 
			
		||||
 | 
			
		||||
	// TCCR2B: Timer/Counter2 Control Register B
 | 
			
		||||
	TCCR2B_FOC2A = 0x80 // Force Output Compare A
 | 
			
		||||
	TCCR2B_FOC2B = 0x40 // Force Output Compare B
 | 
			
		||||
	TCCR2B_WGM22 = 0x8  // Waveform Generation Mode
 | 
			
		||||
	TCCR2B_CS2   = 0x7  // Clock Select bits
 | 
			
		||||
 | 
			
		||||
	// ASSR: Asynchronous Status Register
 | 
			
		||||
	ASSR_EXCLK   = 0x40 // Enable External Clock Input
 | 
			
		||||
	ASSR_AS2     = 0x20 // Asynchronous Timer/Counter2
 | 
			
		||||
	ASSR_TCN2UB  = 0x10 // Timer/Counter2 Update Busy
 | 
			
		||||
	ASSR_OCR2AUB = 0x8  // Output Compare Register2 Update Busy
 | 
			
		||||
	ASSR_OCR2BUB = 0x4  // Output Compare Register 2 Update Busy
 | 
			
		||||
	ASSR_TCR2AUB = 0x2  // Timer/Counter Control Register2 Update Busy
 | 
			
		||||
	ASSR_TCR2BUB = 0x1  // Timer/Counter Control Register2 Update Busy
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
// Bitfields for ADC: Analog-to-Digital Converter
 | 
			
		||||
const (
 | 
			
		||||
	// ADMUX: The ADC multiplexer Selection Register
 | 
			
		||||
	ADMUX_REFS  = 0xc0 // Reference Selection Bits
 | 
			
		||||
	ADMUX_ADLAR = 0x20 // Left Adjust Result
 | 
			
		||||
	ADMUX_MUX   = 0xf  // Analog Channel Selection Bits
 | 
			
		||||
 | 
			
		||||
	// ADCSRA: The ADC Control and Status register A
 | 
			
		||||
	ADCSRA_ADEN  = 0x80 // ADC Enable
 | 
			
		||||
	ADCSRA_ADSC  = 0x40 // ADC Start Conversion
 | 
			
		||||
	ADCSRA_ADATE = 0x20 // ADC  Auto Trigger Enable
 | 
			
		||||
	ADCSRA_ADIF  = 0x10 // ADC Interrupt Flag
 | 
			
		||||
	ADCSRA_ADIE  = 0x8  // ADC Interrupt Enable
 | 
			
		||||
	ADCSRA_ADPS  = 0x7  // ADC  Prescaler Select Bits
 | 
			
		||||
 | 
			
		||||
	// ADCSRB: The ADC Control and Status register B
 | 
			
		||||
	ADCSRB_ACME = 0x40
 | 
			
		||||
	ADCSRB_ADTS = 0x7 // ADC Auto Trigger Source bits
 | 
			
		||||
 | 
			
		||||
	// DIDR0: Digital Input Disable Register
 | 
			
		||||
	DIDR0_ADC5D = 0x20
 | 
			
		||||
	DIDR0_ADC4D = 0x10
 | 
			
		||||
	DIDR0_ADC3D = 0x8
 | 
			
		||||
	DIDR0_ADC2D = 0x4
 | 
			
		||||
	DIDR0_ADC1D = 0x2
 | 
			
		||||
	DIDR0_ADC0D = 0x1
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
// Bitfields for AC: Analog Comparator
 | 
			
		||||
const (
 | 
			
		||||
	// ACSR: Analog Comparator Control And Status Register
 | 
			
		||||
	ACSR_ACD  = 0x80 // Analog Comparator Disable
 | 
			
		||||
	ACSR_ACBG = 0x40 // Analog Comparator Bandgap Select
 | 
			
		||||
	ACSR_ACO  = 0x20 // Analog Compare Output
 | 
			
		||||
	ACSR_ACI  = 0x10 // Analog Comparator Interrupt Flag
 | 
			
		||||
	ACSR_ACIE = 0x8  // Analog Comparator Interrupt Enable
 | 
			
		||||
	ACSR_ACIC = 0x4  // Analog Comparator Input Capture Enable
 | 
			
		||||
	ACSR_ACIS = 0x3  // Analog Comparator Interrupt Mode Select bits
 | 
			
		||||
 | 
			
		||||
	// DIDR1: Digital Input Disable Register 1
 | 
			
		||||
	DIDR1_AIN1D = 0x2 // AIN1 Digital Input Disable
 | 
			
		||||
	DIDR1_AIN0D = 0x1 // AIN0 Digital Input Disable
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
// Bitfields for TC8: Timer/Counter, 8-bit
 | 
			
		||||
const (
 | 
			
		||||
	// TCCR0B: Timer/Counter Control Register B
 | 
			
		||||
	TCCR0B_FOC0A = 0x80 // Force Output Compare A
 | 
			
		||||
	TCCR0B_FOC0B = 0x40 // Force Output Compare B
 | 
			
		||||
	TCCR0B_WGM02 = 0x8
 | 
			
		||||
	TCCR0B_CS0   = 0x7 // Clock Select
 | 
			
		||||
 | 
			
		||||
	// TCCR0A: Timer/Counter  Control Register A
 | 
			
		||||
	TCCR0A_COM0A = 0xc0 // Compare Output Mode, Phase Correct PWM Mode
 | 
			
		||||
	TCCR0A_COM0B = 0x30 // Compare Output Mode, Fast PWm
 | 
			
		||||
	TCCR0A_WGM0  = 0x3  // Waveform Generation Mode
 | 
			
		||||
 | 
			
		||||
	// TIMSK0: Timer/Counter0 Interrupt Mask Register
 | 
			
		||||
	TIMSK0_OCIE0B = 0x4 // Timer/Counter0 Output Compare Match B Interrupt Enable
 | 
			
		||||
	TIMSK0_OCIE0A = 0x2 // Timer/Counter0 Output Compare Match A Interrupt Enable
 | 
			
		||||
	TIMSK0_TOIE0  = 0x1 // Timer/Counter0 Overflow Interrupt Enable
 | 
			
		||||
 | 
			
		||||
	// TIFR0: Timer/Counter0 Interrupt Flag register
 | 
			
		||||
	TIFR0_OCF0B = 0x4 // Timer/Counter0 Output Compare Flag 0B
 | 
			
		||||
	TIFR0_OCF0A = 0x2 // Timer/Counter0 Output Compare Flag 0A
 | 
			
		||||
	TIFR0_TOV0  = 0x1 // Timer/Counter0 Overflow Flag
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
// Bitfields for EXINT: External Interrupts
 | 
			
		||||
const (
 | 
			
		||||
	// EICRA: External Interrupt Control Register
 | 
			
		||||
	EICRA_ISC1 = 0xc // External Interrupt Sense Control 1 Bits
 | 
			
		||||
	EICRA_ISC0 = 0x3 // External Interrupt Sense Control 0 Bits
 | 
			
		||||
 | 
			
		||||
	// EIMSK: External Interrupt Mask Register
 | 
			
		||||
	EIMSK_INT = 0x3 // External Interrupt Request 1 Enable
 | 
			
		||||
 | 
			
		||||
	// EIFR: External Interrupt Flag Register
 | 
			
		||||
	EIFR_INTF = 0x3 // External Interrupt Flags
 | 
			
		||||
 | 
			
		||||
	// PCICR: Pin Change Interrupt Control Register
 | 
			
		||||
	PCICR_PCIE = 0x7 // Pin Change Interrupt Enables
 | 
			
		||||
 | 
			
		||||
	// PCMSK2: Pin Change Mask Register 2
 | 
			
		||||
	PCMSK2_PCINT = 0xff // Pin Change Enable Masks
 | 
			
		||||
 | 
			
		||||
	// PCMSK1: Pin Change Mask Register 1
 | 
			
		||||
	PCMSK1_PCINT = 0x7f // Pin Change Enable Masks
 | 
			
		||||
 | 
			
		||||
	// PCMSK0: Pin Change Mask Register 0
 | 
			
		||||
	PCMSK0_PCINT = 0xff // Pin Change Enable Masks
 | 
			
		||||
 | 
			
		||||
	// PCIFR: Pin Change Interrupt Flag Register
 | 
			
		||||
	PCIFR_PCIF = 0x7 // Pin Change Interrupt Flags
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
// Bitfields for SPI: Serial Peripheral Interface
 | 
			
		||||
const (
 | 
			
		||||
	// SPSR: SPI Status Register
 | 
			
		||||
	SPSR_SPIF  = 0x80 // SPI Interrupt Flag
 | 
			
		||||
	SPSR_WCOL  = 0x40 // Write Collision Flag
 | 
			
		||||
	SPSR_SPI2X = 0x1  // Double SPI Speed Bit
 | 
			
		||||
 | 
			
		||||
	// SPCR: SPI Control Register
 | 
			
		||||
	SPCR_SPIE = 0x80 // SPI Interrupt Enable
 | 
			
		||||
	SPCR_SPE  = 0x40 // SPI Enable
 | 
			
		||||
	SPCR_DORD = 0x20 // Data Order
 | 
			
		||||
	SPCR_MSTR = 0x10 // Master/Slave Select
 | 
			
		||||
	SPCR_CPOL = 0x8  // Clock polarity
 | 
			
		||||
	SPCR_CPHA = 0x4  // Clock Phase
 | 
			
		||||
	SPCR_SPR  = 0x3  // SPI Clock Rate Selects
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
// Bitfields for CPU: CPU Registers
 | 
			
		||||
const (
 | 
			
		||||
	// PRR: Power Reduction Register
 | 
			
		||||
	PRR_PRTWI    = 0x80 // Power Reduction TWI
 | 
			
		||||
	PRR_PRTIM2   = 0x40 // Power Reduction Timer/Counter2
 | 
			
		||||
	PRR_PRTIM0   = 0x20 // Power Reduction Timer/Counter0
 | 
			
		||||
	PRR_PRTIM1   = 0x8  // Power Reduction Timer/Counter1
 | 
			
		||||
	PRR_PRSPI    = 0x4  // Power Reduction Serial Peripheral Interface
 | 
			
		||||
	PRR_PRUSART0 = 0x2  // Power Reduction USART
 | 
			
		||||
	PRR_PRADC    = 0x1  // Power Reduction ADC
 | 
			
		||||
 | 
			
		||||
	// OSCCAL: Oscillator Calibration Value
 | 
			
		||||
	OSCCAL_OSCCAL = 0xff // Oscillator Calibration
 | 
			
		||||
 | 
			
		||||
	// CLKPR: Clock Prescale Register
 | 
			
		||||
	CLKPR_CLKPCE = 0x80 // Clock Prescaler Change Enable
 | 
			
		||||
	CLKPR_CLKPS  = 0xf  // Clock Prescaler Select Bits
 | 
			
		||||
 | 
			
		||||
	// SREG: Status Register
 | 
			
		||||
	SREG_I = 0x80 // Global Interrupt Enable
 | 
			
		||||
	SREG_T = 0x40 // Bit Copy Storage
 | 
			
		||||
	SREG_H = 0x20 // Half Carry Flag
 | 
			
		||||
	SREG_S = 0x10 // Sign Bit
 | 
			
		||||
	SREG_V = 0x8  // Two's Complement Overflow Flag
 | 
			
		||||
	SREG_N = 0x4  // Negative Flag
 | 
			
		||||
	SREG_Z = 0x2  // Zero Flag
 | 
			
		||||
	SREG_C = 0x1  // Carry Flag
 | 
			
		||||
 | 
			
		||||
	// SPMCSR: Store Program Memory Control and Status Register
 | 
			
		||||
	SPMCSR_SPMIE     = 0x80 // SPM Interrupt Enable
 | 
			
		||||
	SPMCSR_RWWSB     = 0x40 // Read-While-Write Section Busy
 | 
			
		||||
	SPMCSR_RWWSRE    = 0x10 // Read-While-Write section read enable
 | 
			
		||||
	SPMCSR_BLBSET    = 0x8  // Boot Lock Bit Set
 | 
			
		||||
	SPMCSR_PGWRT     = 0x4  // Page Write
 | 
			
		||||
	SPMCSR_PGERS     = 0x2  // Page Erase
 | 
			
		||||
	SPMCSR_SELFPRGEN = 0x1  // Self Programming Enable
 | 
			
		||||
 | 
			
		||||
	// MCUCR: MCU Control Register
 | 
			
		||||
	MCUCR_PUD   = 0x10 // Pull-up Disable
 | 
			
		||||
	MCUCR_IVSEL = 0x2  // Interrupt Vector Select
 | 
			
		||||
	MCUCR_IVCE  = 0x1  // Interrupt Vector Change Enable
 | 
			
		||||
 | 
			
		||||
	// MCUSR: MCU Status Register
 | 
			
		||||
	MCUSR_WDRF  = 0x8 // Watchdog Reset Flag
 | 
			
		||||
	MCUSR_BORF  = 0x4 // Brown-out Reset Flag
 | 
			
		||||
	MCUSR_EXTRF = 0x2 // External Reset Flag
 | 
			
		||||
	MCUSR_PORF  = 0x1 // Power-on reset flag
 | 
			
		||||
 | 
			
		||||
	// SMCR: Sleep Mode Control Register
 | 
			
		||||
	SMCR_SM = 0xe // Sleep Mode
 | 
			
		||||
	SMCR_SE = 0x1 // Sleep Enable
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
// Bitfields for WDT: Watchdog Timer
 | 
			
		||||
const (
 | 
			
		||||
	// WDTCSR: Watchdog Timer Control Register
 | 
			
		||||
	WDTCSR_WDIF = 0x80 // Watchdog Timeout Interrupt Flag
 | 
			
		||||
	WDTCSR_WDIE = 0x40 // Watchdog Timeout Interrupt Enable
 | 
			
		||||
	WDTCSR_WDP  = 0x27 // Watchdog Timer Prescaler Bits
 | 
			
		||||
	WDTCSR_WDCE = 0x10 // Watchdog Change Enable
 | 
			
		||||
	WDTCSR_WDE  = 0x8  // Watch Dog Enable
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
// Bitfields for EEPROM: EEPROM
 | 
			
		||||
const (
 | 
			
		||||
	// EECR: EEPROM Control Register
 | 
			
		||||
	EECR_EEPM  = 0x30 // EEPROM Programming Mode Bits
 | 
			
		||||
	EECR_EERIE = 0x8  // EEPROM Ready Interrupt Enable
 | 
			
		||||
	EECR_EEMPE = 0x4  // EEPROM Master Write Enable
 | 
			
		||||
	EECR_EEPE  = 0x2  // EEPROM Write Enable
 | 
			
		||||
	EECR_EERE  = 0x1  // EEPROM Read Enable
 | 
			
		||||
)
 | 
			
		||||
							
								
								
									
										6
									
								
								src/device/avr/atmega168.ld
									
										
									
									
									
										Обычный файл
									
								
							
							
						
						
									
										6
									
								
								src/device/avr/atmega168.ld
									
										
									
									
									
										Обычный файл
									
								
							| 
						 | 
				
			
			@ -0,0 +1,6 @@
 | 
			
		|||
/* Automatically generated file. DO NOT EDIT. */
 | 
			
		||||
/* Generated by gen-device.py from ATmega168.atdf, see http://packs.download.atmel.com/ */
 | 
			
		||||
 | 
			
		||||
__flash_size = 0x4000;
 | 
			
		||||
__ram_size   = 0x400;
 | 
			
		||||
__num_isrs   = 26;
 | 
			
		||||
							
								
								
									
										641
									
								
								src/device/avr/atmega168a.go
									
										
									
									
									
										Обычный файл
									
								
							
							
						
						
									
										641
									
								
								src/device/avr/atmega168a.go
									
										
									
									
									
										Обычный файл
									
								
							| 
						 | 
				
			
			@ -0,0 +1,641 @@
 | 
			
		|||
// Automatically generated file. DO NOT EDIT.
 | 
			
		||||
// Generated by gen-device.py from ATmega168A.atdf, see http://packs.download.atmel.com/
 | 
			
		||||
 | 
			
		||||
// +build avr,atmega168a
 | 
			
		||||
 | 
			
		||||
// Device information for the ATmega168A.
 | 
			
		||||
//
 | 
			
		||||
package avr
 | 
			
		||||
 | 
			
		||||
// Magic type name for the compiler.
 | 
			
		||||
type __reg uint8
 | 
			
		||||
 | 
			
		||||
// Export this magic type name.
 | 
			
		||||
type RegValue = __reg
 | 
			
		||||
 | 
			
		||||
// Some information about this device.
 | 
			
		||||
const (
 | 
			
		||||
	DEVICE = "ATmega168A"
 | 
			
		||||
	ARCH   = "AVR8"
 | 
			
		||||
	FAMILY = "megaAVR"
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
// Interrupts
 | 
			
		||||
const (
 | 
			
		||||
	IRQ_RESET        = 0  // External Pin, Power-on Reset, Brown-out Reset and Watchdog Reset
 | 
			
		||||
	IRQ_INT0         = 1  // External Interrupt Request 0
 | 
			
		||||
	IRQ_INT1         = 2  // External Interrupt Request 1
 | 
			
		||||
	IRQ_PCINT0       = 3  // Pin Change Interrupt Request 0
 | 
			
		||||
	IRQ_PCINT1       = 4  // Pin Change Interrupt Request 0
 | 
			
		||||
	IRQ_PCINT2       = 5  // Pin Change Interrupt Request 1
 | 
			
		||||
	IRQ_WDT          = 6  // Watchdog Time-out Interrupt
 | 
			
		||||
	IRQ_TIMER2_COMPA = 7  // Timer/Counter2 Compare Match A
 | 
			
		||||
	IRQ_TIMER2_COMPB = 8  // Timer/Counter2 Compare Match A
 | 
			
		||||
	IRQ_TIMER2_OVF   = 9  // Timer/Counter2 Overflow
 | 
			
		||||
	IRQ_TIMER1_CAPT  = 10 // Timer/Counter1 Capture Event
 | 
			
		||||
	IRQ_TIMER1_COMPA = 11 // Timer/Counter1 Compare Match A
 | 
			
		||||
	IRQ_TIMER1_COMPB = 12 // Timer/Counter1 Compare Match B
 | 
			
		||||
	IRQ_TIMER1_OVF   = 13 // Timer/Counter1 Overflow
 | 
			
		||||
	IRQ_TIMER0_COMPA = 14 // TimerCounter0 Compare Match A
 | 
			
		||||
	IRQ_TIMER0_COMPB = 15 // TimerCounter0 Compare Match B
 | 
			
		||||
	IRQ_TIMER0_OVF   = 16 // Timer/Couner0 Overflow
 | 
			
		||||
	IRQ_SPI_STC      = 17 // SPI Serial Transfer Complete
 | 
			
		||||
	IRQ_USART_RX     = 18 // USART Rx Complete
 | 
			
		||||
	IRQ_USART_UDRE   = 19 // USART, Data Register Empty
 | 
			
		||||
	IRQ_USART_TX     = 20 // USART Tx Complete
 | 
			
		||||
	IRQ_ADC          = 21 // ADC Conversion Complete
 | 
			
		||||
	IRQ_EE_READY     = 22 // EEPROM Ready
 | 
			
		||||
	IRQ_ANALOG_COMP  = 23 // Analog Comparator
 | 
			
		||||
	IRQ_TWI          = 24 // Two-wire Serial Interface
 | 
			
		||||
	IRQ_SPM_Ready    = 25 // Store Program Memory Read
 | 
			
		||||
	IRQ_max          = 25 // Highest interrupt number on this device.
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
// Peripherals
 | 
			
		||||
var (
 | 
			
		||||
	// Fuses
 | 
			
		||||
	FUSE = struct {
 | 
			
		||||
		EXTENDED __reg
 | 
			
		||||
		HIGH     __reg
 | 
			
		||||
		LOW      __reg
 | 
			
		||||
	}{
 | 
			
		||||
		EXTENDED: 0x2,
 | 
			
		||||
		HIGH:     0x1,
 | 
			
		||||
		LOW:      0x0,
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	// Lockbits
 | 
			
		||||
	LOCKBIT = struct {
 | 
			
		||||
		LOCKBIT __reg
 | 
			
		||||
	}{
 | 
			
		||||
		LOCKBIT: 0x0,
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	// USART
 | 
			
		||||
	USART = struct {
 | 
			
		||||
		UDR0   __reg
 | 
			
		||||
		UCSR0A __reg
 | 
			
		||||
		UCSR0B __reg
 | 
			
		||||
		UCSR0C __reg
 | 
			
		||||
		UBRR0L __reg
 | 
			
		||||
		UBRR0H __reg
 | 
			
		||||
	}{
 | 
			
		||||
		UDR0:   0xc6, // USART I/O Data Register
 | 
			
		||||
		UCSR0A: 0xc0, // USART Control and Status Register A
 | 
			
		||||
		UCSR0B: 0xc1, // USART Control and Status Register B
 | 
			
		||||
		UCSR0C: 0xc2, // USART Control and Status Register C
 | 
			
		||||
		UBRR0L: 0xc4, // USART Baud Rate Register  Bytes
 | 
			
		||||
		UBRR0H: 0xc4, // USART Baud Rate Register  Bytes
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	// Two Wire Serial Interface
 | 
			
		||||
	TWI = struct {
 | 
			
		||||
		TWAMR __reg
 | 
			
		||||
		TWBR  __reg
 | 
			
		||||
		TWCR  __reg
 | 
			
		||||
		TWSR  __reg
 | 
			
		||||
		TWDR  __reg
 | 
			
		||||
		TWAR  __reg
 | 
			
		||||
	}{
 | 
			
		||||
		TWAMR: 0xbd, // TWI (Slave) Address Mask Register
 | 
			
		||||
		TWBR:  0xb8, // TWI Bit Rate register
 | 
			
		||||
		TWCR:  0xbc, // TWI Control Register
 | 
			
		||||
		TWSR:  0xb9, // TWI Status Register
 | 
			
		||||
		TWDR:  0xbb, // TWI Data register
 | 
			
		||||
		TWAR:  0xba, // TWI (Slave) Address register
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	// Timer/Counter, 16-bit
 | 
			
		||||
	TC16 = struct {
 | 
			
		||||
		TIMSK1 __reg
 | 
			
		||||
		TIFR1  __reg
 | 
			
		||||
		TCCR1A __reg
 | 
			
		||||
		TCCR1B __reg
 | 
			
		||||
		TCCR1C __reg
 | 
			
		||||
		TCNT1L __reg
 | 
			
		||||
		TCNT1H __reg
 | 
			
		||||
		OCR1AL __reg
 | 
			
		||||
		OCR1AH __reg
 | 
			
		||||
		OCR1BL __reg
 | 
			
		||||
		OCR1BH __reg
 | 
			
		||||
		ICR1L  __reg
 | 
			
		||||
		ICR1H  __reg
 | 
			
		||||
	}{
 | 
			
		||||
		TIMSK1: 0x6f, // Timer/Counter Interrupt Mask Register
 | 
			
		||||
		TIFR1:  0x36, // Timer/Counter Interrupt Flag register
 | 
			
		||||
		TCCR1A: 0x80, // Timer/Counter1 Control Register A
 | 
			
		||||
		TCCR1B: 0x81, // Timer/Counter1 Control Register B
 | 
			
		||||
		TCCR1C: 0x82, // Timer/Counter1 Control Register C
 | 
			
		||||
		TCNT1L: 0x84, // Timer/Counter1  Bytes
 | 
			
		||||
		TCNT1H: 0x84, // Timer/Counter1  Bytes
 | 
			
		||||
		OCR1AL: 0x88, // Timer/Counter1 Output Compare Register  Bytes
 | 
			
		||||
		OCR1AH: 0x88, // Timer/Counter1 Output Compare Register  Bytes
 | 
			
		||||
		OCR1BL: 0x8a, // Timer/Counter1 Output Compare Register  Bytes
 | 
			
		||||
		OCR1BH: 0x8a, // Timer/Counter1 Output Compare Register  Bytes
 | 
			
		||||
		ICR1L:  0x86, // Timer/Counter1 Input Capture Register  Bytes
 | 
			
		||||
		ICR1H:  0x86, // Timer/Counter1 Input Capture Register  Bytes
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	// Timer/Counter, 8-bit Async
 | 
			
		||||
	TC8_ASYNC = struct {
 | 
			
		||||
		TIMSK2 __reg
 | 
			
		||||
		TIFR2  __reg
 | 
			
		||||
		TCCR2A __reg
 | 
			
		||||
		TCCR2B __reg
 | 
			
		||||
		TCNT2  __reg
 | 
			
		||||
		OCR2B  __reg
 | 
			
		||||
		OCR2A  __reg
 | 
			
		||||
		ASSR   __reg
 | 
			
		||||
	}{
 | 
			
		||||
		TIMSK2: 0x70, // Timer/Counter Interrupt Mask register
 | 
			
		||||
		TIFR2:  0x37, // Timer/Counter Interrupt Flag Register
 | 
			
		||||
		TCCR2A: 0xb0, // Timer/Counter2 Control Register A
 | 
			
		||||
		TCCR2B: 0xb1, // Timer/Counter2 Control Register B
 | 
			
		||||
		TCNT2:  0xb2, // Timer/Counter2
 | 
			
		||||
		OCR2B:  0xb4, // Timer/Counter2 Output Compare Register B
 | 
			
		||||
		OCR2A:  0xb3, // Timer/Counter2 Output Compare Register A
 | 
			
		||||
		ASSR:   0xb6, // Asynchronous Status Register
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	// Analog-to-Digital Converter
 | 
			
		||||
	ADC = struct {
 | 
			
		||||
		ADMUX  __reg
 | 
			
		||||
		ADCL   __reg
 | 
			
		||||
		ADCH   __reg
 | 
			
		||||
		ADCSRA __reg
 | 
			
		||||
		ADCSRB __reg
 | 
			
		||||
		DIDR0  __reg
 | 
			
		||||
	}{
 | 
			
		||||
		ADMUX:  0x7c, // The ADC multiplexer Selection Register
 | 
			
		||||
		ADCL:   0x78, // ADC Data Register  Bytes
 | 
			
		||||
		ADCH:   0x78, // ADC Data Register  Bytes
 | 
			
		||||
		ADCSRA: 0x7a, // The ADC Control and Status register A
 | 
			
		||||
		ADCSRB: 0x7b, // The ADC Control and Status register B
 | 
			
		||||
		DIDR0:  0x7e, // Digital Input Disable Register
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	// Analog Comparator
 | 
			
		||||
	AC = struct {
 | 
			
		||||
		ACSR  __reg
 | 
			
		||||
		DIDR1 __reg
 | 
			
		||||
	}{
 | 
			
		||||
		ACSR:  0x50, // Analog Comparator Control And Status Register
 | 
			
		||||
		DIDR1: 0x7f, // Digital Input Disable Register 1
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	// I/O Port
 | 
			
		||||
	PORT = struct {
 | 
			
		||||
		PORTB __reg
 | 
			
		||||
		DDRB  __reg
 | 
			
		||||
		PINB  __reg
 | 
			
		||||
		PORTC __reg
 | 
			
		||||
		DDRC  __reg
 | 
			
		||||
		PINC  __reg
 | 
			
		||||
		PORTD __reg
 | 
			
		||||
		DDRD  __reg
 | 
			
		||||
		PIND  __reg
 | 
			
		||||
	}{
 | 
			
		||||
		PORTB: 0x25, // Port B Data Register
 | 
			
		||||
		DDRB:  0x24, // Port B Data Direction Register
 | 
			
		||||
		PINB:  0x23, // Port B Input Pins
 | 
			
		||||
		PORTC: 0x28, // Port C Data Register
 | 
			
		||||
		DDRC:  0x27, // Port C Data Direction Register
 | 
			
		||||
		PINC:  0x26, // Port C Input Pins
 | 
			
		||||
		PORTD: 0x2b, // Port D Data Register
 | 
			
		||||
		DDRD:  0x2a, // Port D Data Direction Register
 | 
			
		||||
		PIND:  0x29, // Port D Input Pins
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	// Timer/Counter, 8-bit
 | 
			
		||||
	TC8 = struct {
 | 
			
		||||
		OCR0B  __reg
 | 
			
		||||
		OCR0A  __reg
 | 
			
		||||
		TCNT0  __reg
 | 
			
		||||
		TCCR0B __reg
 | 
			
		||||
		TCCR0A __reg
 | 
			
		||||
		TIMSK0 __reg
 | 
			
		||||
		TIFR0  __reg
 | 
			
		||||
	}{
 | 
			
		||||
		OCR0B:  0x48, // Timer/Counter0 Output Compare Register
 | 
			
		||||
		OCR0A:  0x47, // Timer/Counter0 Output Compare Register
 | 
			
		||||
		TCNT0:  0x46, // Timer/Counter0
 | 
			
		||||
		TCCR0B: 0x45, // Timer/Counter Control Register B
 | 
			
		||||
		TCCR0A: 0x44, // Timer/Counter  Control Register A
 | 
			
		||||
		TIMSK0: 0x6e, // Timer/Counter0 Interrupt Mask Register
 | 
			
		||||
		TIFR0:  0x35, // Timer/Counter0 Interrupt Flag register
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	// External Interrupts
 | 
			
		||||
	EXINT = struct {
 | 
			
		||||
		EICRA  __reg
 | 
			
		||||
		EIMSK  __reg
 | 
			
		||||
		EIFR   __reg
 | 
			
		||||
		PCICR  __reg
 | 
			
		||||
		PCMSK2 __reg
 | 
			
		||||
		PCMSK1 __reg
 | 
			
		||||
		PCMSK0 __reg
 | 
			
		||||
		PCIFR  __reg
 | 
			
		||||
	}{
 | 
			
		||||
		EICRA:  0x69, // External Interrupt Control Register
 | 
			
		||||
		EIMSK:  0x3d, // External Interrupt Mask Register
 | 
			
		||||
		EIFR:   0x3c, // External Interrupt Flag Register
 | 
			
		||||
		PCICR:  0x68, // Pin Change Interrupt Control Register
 | 
			
		||||
		PCMSK2: 0x6d, // Pin Change Mask Register 2
 | 
			
		||||
		PCMSK1: 0x6c, // Pin Change Mask Register 1
 | 
			
		||||
		PCMSK0: 0x6b, // Pin Change Mask Register 0
 | 
			
		||||
		PCIFR:  0x3b, // Pin Change Interrupt Flag Register
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	// Serial Peripheral Interface
 | 
			
		||||
	SPI = struct {
 | 
			
		||||
		SPDR __reg
 | 
			
		||||
		SPSR __reg
 | 
			
		||||
		SPCR __reg
 | 
			
		||||
	}{
 | 
			
		||||
		SPDR: 0x4e, // SPI Data Register
 | 
			
		||||
		SPSR: 0x4d, // SPI Status Register
 | 
			
		||||
		SPCR: 0x4c, // SPI Control Register
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	// Watchdog Timer
 | 
			
		||||
	WDT = struct {
 | 
			
		||||
		WDTCSR __reg
 | 
			
		||||
	}{
 | 
			
		||||
		WDTCSR: 0x60, // Watchdog Timer Control Register
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	// EEPROM
 | 
			
		||||
	EEPROM = struct {
 | 
			
		||||
		EEARL __reg
 | 
			
		||||
		EEARH __reg
 | 
			
		||||
		EEDR  __reg
 | 
			
		||||
		EECR  __reg
 | 
			
		||||
	}{
 | 
			
		||||
		EEARL: 0x41, // EEPROM Address Register  Bytes
 | 
			
		||||
		EEARH: 0x41, // EEPROM Address Register  Bytes
 | 
			
		||||
		EEDR:  0x40, // EEPROM Data Register
 | 
			
		||||
		EECR:  0x3f, // EEPROM Control Register
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	// CPU Registers
 | 
			
		||||
	CPU = struct {
 | 
			
		||||
		PRR    __reg
 | 
			
		||||
		OSCCAL __reg
 | 
			
		||||
		CLKPR  __reg
 | 
			
		||||
		SREG   __reg
 | 
			
		||||
		SPL    __reg
 | 
			
		||||
		SPH    __reg
 | 
			
		||||
		SPMCSR __reg
 | 
			
		||||
		MCUCR  __reg
 | 
			
		||||
		MCUSR  __reg
 | 
			
		||||
		SMCR   __reg
 | 
			
		||||
		GPIOR2 __reg
 | 
			
		||||
		GPIOR1 __reg
 | 
			
		||||
		GPIOR0 __reg
 | 
			
		||||
	}{
 | 
			
		||||
		PRR:    0x64, // Power Reduction Register
 | 
			
		||||
		OSCCAL: 0x66, // Oscillator Calibration Value
 | 
			
		||||
		CLKPR:  0x61, // Clock Prescale Register
 | 
			
		||||
		SREG:   0x5f, // Status Register
 | 
			
		||||
		SPL:    0x5d, // Stack Pointer
 | 
			
		||||
		SPH:    0x5d, // Stack Pointer
 | 
			
		||||
		SPMCSR: 0x57, // Store Program Memory Control and Status Register
 | 
			
		||||
		MCUCR:  0x55, // MCU Control Register
 | 
			
		||||
		MCUSR:  0x54, // MCU Status Register
 | 
			
		||||
		SMCR:   0x53, // Sleep Mode Control Register
 | 
			
		||||
		GPIOR2: 0x4b, // General Purpose I/O Register 2
 | 
			
		||||
		GPIOR1: 0x4a, // General Purpose I/O Register 1
 | 
			
		||||
		GPIOR0: 0x3e, // General Purpose I/O Register 0
 | 
			
		||||
	}
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
// Bitfields for FUSE: Fuses
 | 
			
		||||
const (
 | 
			
		||||
	// EXTENDED
 | 
			
		||||
	EXTENDED_BOOTSZ  = 0x6 // Select boot size
 | 
			
		||||
	EXTENDED_BOOTRST = 0x1 // Boot Reset vector Enabled
 | 
			
		||||
 | 
			
		||||
	// HIGH
 | 
			
		||||
	HIGH_RSTDISBL = 0x80 // Reset Disabled (Enable PC6 as i/o pin)
 | 
			
		||||
	HIGH_DWEN     = 0x40 // Debug Wire enable
 | 
			
		||||
	HIGH_SPIEN    = 0x20 // Serial program downloading (SPI) enabled
 | 
			
		||||
	HIGH_WDTON    = 0x10 // Watch-dog Timer always on
 | 
			
		||||
	HIGH_EESAVE   = 0x8  // Preserve EEPROM through the Chip Erase cycle
 | 
			
		||||
	HIGH_BODLEVEL = 0x7  // Brown-out Detector trigger level
 | 
			
		||||
 | 
			
		||||
	// LOW
 | 
			
		||||
	LOW_CKDIV8    = 0x80 // Divide clock by 8 internally
 | 
			
		||||
	LOW_CKOUT     = 0x40 // Clock output on PORTB0
 | 
			
		||||
	LOW_SUT_CKSEL = 0x3f // Select Clock Source
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
// Bitfields for LOCKBIT: Lockbits
 | 
			
		||||
const (
 | 
			
		||||
	// LOCKBIT
 | 
			
		||||
	LOCKBIT_LB   = 0x3  // Memory Lock
 | 
			
		||||
	LOCKBIT_BLB0 = 0xc  // Boot Loader Protection Mode
 | 
			
		||||
	LOCKBIT_BLB1 = 0x30 // Boot Loader Protection Mode
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
// Bitfields for USART: USART
 | 
			
		||||
const (
 | 
			
		||||
	// UCSR0A: USART Control and Status Register A
 | 
			
		||||
	UCSR0A_RXC0  = 0x80 // USART Receive Complete
 | 
			
		||||
	UCSR0A_TXC0  = 0x40 // USART Transmitt Complete
 | 
			
		||||
	UCSR0A_UDRE0 = 0x20 // USART Data Register Empty
 | 
			
		||||
	UCSR0A_FE0   = 0x10 // Framing Error
 | 
			
		||||
	UCSR0A_DOR0  = 0x8  // Data overRun
 | 
			
		||||
	UCSR0A_UPE0  = 0x4  // Parity Error
 | 
			
		||||
	UCSR0A_U2X0  = 0x2  // Double the USART transmission speed
 | 
			
		||||
	UCSR0A_MPCM0 = 0x1  // Multi-processor Communication Mode
 | 
			
		||||
 | 
			
		||||
	// UCSR0B: USART Control and Status Register B
 | 
			
		||||
	UCSR0B_RXCIE0 = 0x80 // RX Complete Interrupt Enable
 | 
			
		||||
	UCSR0B_TXCIE0 = 0x40 // TX Complete Interrupt Enable
 | 
			
		||||
	UCSR0B_UDRIE0 = 0x20 // USART Data register Empty Interrupt Enable
 | 
			
		||||
	UCSR0B_RXEN0  = 0x10 // Receiver Enable
 | 
			
		||||
	UCSR0B_TXEN0  = 0x8  // Transmitter Enable
 | 
			
		||||
	UCSR0B_UCSZ02 = 0x4  // Character Size
 | 
			
		||||
	UCSR0B_RXB80  = 0x2  // Receive Data Bit 8
 | 
			
		||||
	UCSR0B_TXB80  = 0x1  // Transmit Data Bit 8
 | 
			
		||||
 | 
			
		||||
	// UCSR0C: USART Control and Status Register C
 | 
			
		||||
	UCSR0C_UMSEL0 = 0xc0 // USART Mode Select
 | 
			
		||||
	UCSR0C_UPM0   = 0x30 // Parity Mode Bits
 | 
			
		||||
	UCSR0C_USBS0  = 0x8  // Stop Bit Select
 | 
			
		||||
	UCSR0C_UCSZ0  = 0x6  // Character Size
 | 
			
		||||
	UCSR0C_UCPOL0 = 0x1  // Clock Polarity
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
// Bitfields for TWI: Two Wire Serial Interface
 | 
			
		||||
const (
 | 
			
		||||
	// TWAMR: TWI (Slave) Address Mask Register
 | 
			
		||||
	TWAMR_TWAM = 0xfe
 | 
			
		||||
 | 
			
		||||
	// TWCR: TWI Control Register
 | 
			
		||||
	TWCR_TWINT = 0x80 // TWI Interrupt Flag
 | 
			
		||||
	TWCR_TWEA  = 0x40 // TWI Enable Acknowledge Bit
 | 
			
		||||
	TWCR_TWSTA = 0x20 // TWI Start Condition Bit
 | 
			
		||||
	TWCR_TWSTO = 0x10 // TWI Stop Condition Bit
 | 
			
		||||
	TWCR_TWWC  = 0x8  // TWI Write Collition Flag
 | 
			
		||||
	TWCR_TWEN  = 0x4  // TWI Enable Bit
 | 
			
		||||
	TWCR_TWIE  = 0x1  // TWI Interrupt Enable
 | 
			
		||||
 | 
			
		||||
	// TWSR: TWI Status Register
 | 
			
		||||
	TWSR_TWS  = 0xf8 // TWI Status
 | 
			
		||||
	TWSR_TWPS = 0x3  // TWI Prescaler
 | 
			
		||||
 | 
			
		||||
	// TWAR: TWI (Slave) Address register
 | 
			
		||||
	TWAR_TWA   = 0xfe // TWI (Slave) Address register Bits
 | 
			
		||||
	TWAR_TWGCE = 0x1  // TWI General Call Recognition Enable Bit
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
// Bitfields for TC16: Timer/Counter, 16-bit
 | 
			
		||||
const (
 | 
			
		||||
	// TIMSK1: Timer/Counter Interrupt Mask Register
 | 
			
		||||
	TIMSK1_ICIE1  = 0x20 // Timer/Counter1 Input Capture Interrupt Enable
 | 
			
		||||
	TIMSK1_OCIE1B = 0x4  // Timer/Counter1 Output CompareB Match Interrupt Enable
 | 
			
		||||
	TIMSK1_OCIE1A = 0x2  // Timer/Counter1 Output CompareA Match Interrupt Enable
 | 
			
		||||
	TIMSK1_TOIE1  = 0x1  // Timer/Counter1 Overflow Interrupt Enable
 | 
			
		||||
 | 
			
		||||
	// TIFR1: Timer/Counter Interrupt Flag register
 | 
			
		||||
	TIFR1_ICF1  = 0x20 // Input Capture Flag 1
 | 
			
		||||
	TIFR1_OCF1B = 0x4  // Output Compare Flag 1B
 | 
			
		||||
	TIFR1_OCF1A = 0x2  // Output Compare Flag 1A
 | 
			
		||||
	TIFR1_TOV1  = 0x1  // Timer/Counter1 Overflow Flag
 | 
			
		||||
 | 
			
		||||
	// TCCR1A: Timer/Counter1 Control Register A
 | 
			
		||||
	TCCR1A_COM1A = 0xc0 // Compare Output Mode 1A, bits
 | 
			
		||||
	TCCR1A_COM1B = 0x30 // Compare Output Mode 1B, bits
 | 
			
		||||
	TCCR1A_WGM1  = 0x3  // Waveform Generation Mode
 | 
			
		||||
 | 
			
		||||
	// TCCR1B: Timer/Counter1 Control Register B
 | 
			
		||||
	TCCR1B_ICNC1 = 0x80 // Input Capture 1 Noise Canceler
 | 
			
		||||
	TCCR1B_ICES1 = 0x40 // Input Capture 1 Edge Select
 | 
			
		||||
	TCCR1B_WGM1  = 0x18 // Waveform Generation Mode
 | 
			
		||||
	TCCR1B_CS1   = 0x7  // Prescaler source of Timer/Counter 1
 | 
			
		||||
 | 
			
		||||
	// TCCR1C: Timer/Counter1 Control Register C
 | 
			
		||||
	TCCR1C_FOC1A = 0x80
 | 
			
		||||
	TCCR1C_FOC1B = 0x40
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
// Bitfields for TC8_ASYNC: Timer/Counter, 8-bit Async
 | 
			
		||||
const (
 | 
			
		||||
	// TIMSK2: Timer/Counter Interrupt Mask register
 | 
			
		||||
	TIMSK2_OCIE2B = 0x4 // Timer/Counter2 Output Compare Match B Interrupt Enable
 | 
			
		||||
	TIMSK2_OCIE2A = 0x2 // Timer/Counter2 Output Compare Match A Interrupt Enable
 | 
			
		||||
	TIMSK2_TOIE2  = 0x1 // Timer/Counter2 Overflow Interrupt Enable
 | 
			
		||||
 | 
			
		||||
	// TIFR2: Timer/Counter Interrupt Flag Register
 | 
			
		||||
	TIFR2_OCF2B = 0x4 // Output Compare Flag 2B
 | 
			
		||||
	TIFR2_OCF2A = 0x2 // Output Compare Flag 2A
 | 
			
		||||
	TIFR2_TOV2  = 0x1 // Timer/Counter2 Overflow Flag
 | 
			
		||||
 | 
			
		||||
	// TCCR2A: Timer/Counter2 Control Register A
 | 
			
		||||
	TCCR2A_COM2A = 0xc0 // Compare Output Mode bits
 | 
			
		||||
	TCCR2A_COM2B = 0x30 // Compare Output Mode bits
 | 
			
		||||
	TCCR2A_WGM2  = 0x3  // Waveform Genration Mode
 | 
			
		||||
 | 
			
		||||
	// TCCR2B: Timer/Counter2 Control Register B
 | 
			
		||||
	TCCR2B_FOC2A = 0x80 // Force Output Compare A
 | 
			
		||||
	TCCR2B_FOC2B = 0x40 // Force Output Compare B
 | 
			
		||||
	TCCR2B_WGM22 = 0x8  // Waveform Generation Mode
 | 
			
		||||
	TCCR2B_CS2   = 0x7  // Clock Select bits
 | 
			
		||||
 | 
			
		||||
	// ASSR: Asynchronous Status Register
 | 
			
		||||
	ASSR_EXCLK   = 0x40 // Enable External Clock Input
 | 
			
		||||
	ASSR_AS2     = 0x20 // Asynchronous Timer/Counter2
 | 
			
		||||
	ASSR_TCN2UB  = 0x10 // Timer/Counter2 Update Busy
 | 
			
		||||
	ASSR_OCR2AUB = 0x8  // Output Compare Register2 Update Busy
 | 
			
		||||
	ASSR_OCR2BUB = 0x4  // Output Compare Register 2 Update Busy
 | 
			
		||||
	ASSR_TCR2AUB = 0x2  // Timer/Counter Control Register2 Update Busy
 | 
			
		||||
	ASSR_TCR2BUB = 0x1  // Timer/Counter Control Register2 Update Busy
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
// Bitfields for ADC: Analog-to-Digital Converter
 | 
			
		||||
const (
 | 
			
		||||
	// ADMUX: The ADC multiplexer Selection Register
 | 
			
		||||
	ADMUX_REFS  = 0xc0 // Reference Selection Bits
 | 
			
		||||
	ADMUX_ADLAR = 0x20 // Left Adjust Result
 | 
			
		||||
	ADMUX_MUX   = 0xf  // Analog Channel Selection Bits
 | 
			
		||||
 | 
			
		||||
	// ADCSRA: The ADC Control and Status register A
 | 
			
		||||
	ADCSRA_ADEN  = 0x80 // ADC Enable
 | 
			
		||||
	ADCSRA_ADSC  = 0x40 // ADC Start Conversion
 | 
			
		||||
	ADCSRA_ADATE = 0x20 // ADC  Auto Trigger Enable
 | 
			
		||||
	ADCSRA_ADIF  = 0x10 // ADC Interrupt Flag
 | 
			
		||||
	ADCSRA_ADIE  = 0x8  // ADC Interrupt Enable
 | 
			
		||||
	ADCSRA_ADPS  = 0x7  // ADC  Prescaler Select Bits
 | 
			
		||||
 | 
			
		||||
	// ADCSRB: The ADC Control and Status register B
 | 
			
		||||
	ADCSRB_ACME = 0x40
 | 
			
		||||
	ADCSRB_ADTS = 0x7 // ADC Auto Trigger Source bits
 | 
			
		||||
 | 
			
		||||
	// DIDR0: Digital Input Disable Register
 | 
			
		||||
	DIDR0_ADC5D = 0x20
 | 
			
		||||
	DIDR0_ADC4D = 0x10
 | 
			
		||||
	DIDR0_ADC3D = 0x8
 | 
			
		||||
	DIDR0_ADC2D = 0x4
 | 
			
		||||
	DIDR0_ADC1D = 0x2
 | 
			
		||||
	DIDR0_ADC0D = 0x1
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
// Bitfields for AC: Analog Comparator
 | 
			
		||||
const (
 | 
			
		||||
	// ACSR: Analog Comparator Control And Status Register
 | 
			
		||||
	ACSR_ACD  = 0x80 // Analog Comparator Disable
 | 
			
		||||
	ACSR_ACBG = 0x40 // Analog Comparator Bandgap Select
 | 
			
		||||
	ACSR_ACO  = 0x20 // Analog Compare Output
 | 
			
		||||
	ACSR_ACI  = 0x10 // Analog Comparator Interrupt Flag
 | 
			
		||||
	ACSR_ACIE = 0x8  // Analog Comparator Interrupt Enable
 | 
			
		||||
	ACSR_ACIC = 0x4  // Analog Comparator Input Capture Enable
 | 
			
		||||
	ACSR_ACIS = 0x3  // Analog Comparator Interrupt Mode Select bits
 | 
			
		||||
 | 
			
		||||
	// DIDR1: Digital Input Disable Register 1
 | 
			
		||||
	DIDR1_AIN1D = 0x2 // AIN1 Digital Input Disable
 | 
			
		||||
	DIDR1_AIN0D = 0x1 // AIN0 Digital Input Disable
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
// Bitfields for TC8: Timer/Counter, 8-bit
 | 
			
		||||
const (
 | 
			
		||||
	// TCCR0B: Timer/Counter Control Register B
 | 
			
		||||
	TCCR0B_FOC0A = 0x80 // Force Output Compare A
 | 
			
		||||
	TCCR0B_FOC0B = 0x40 // Force Output Compare B
 | 
			
		||||
	TCCR0B_WGM02 = 0x8
 | 
			
		||||
	TCCR0B_CS0   = 0x7 // Clock Select
 | 
			
		||||
 | 
			
		||||
	// TCCR0A: Timer/Counter  Control Register A
 | 
			
		||||
	TCCR0A_COM0A = 0xc0 // Compare Output Mode, Phase Correct PWM Mode
 | 
			
		||||
	TCCR0A_COM0B = 0x30 // Compare Output Mode, Fast PWm
 | 
			
		||||
	TCCR0A_WGM0  = 0x3  // Waveform Generation Mode
 | 
			
		||||
 | 
			
		||||
	// TIMSK0: Timer/Counter0 Interrupt Mask Register
 | 
			
		||||
	TIMSK0_OCIE0B = 0x4 // Timer/Counter0 Output Compare Match B Interrupt Enable
 | 
			
		||||
	TIMSK0_OCIE0A = 0x2 // Timer/Counter0 Output Compare Match A Interrupt Enable
 | 
			
		||||
	TIMSK0_TOIE0  = 0x1 // Timer/Counter0 Overflow Interrupt Enable
 | 
			
		||||
 | 
			
		||||
	// TIFR0: Timer/Counter0 Interrupt Flag register
 | 
			
		||||
	TIFR0_OCF0B = 0x4 // Timer/Counter0 Output Compare Flag 0B
 | 
			
		||||
	TIFR0_OCF0A = 0x2 // Timer/Counter0 Output Compare Flag 0A
 | 
			
		||||
	TIFR0_TOV0  = 0x1 // Timer/Counter0 Overflow Flag
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
// Bitfields for EXINT: External Interrupts
 | 
			
		||||
const (
 | 
			
		||||
	// EICRA: External Interrupt Control Register
 | 
			
		||||
	EICRA_ISC1 = 0xc // External Interrupt Sense Control 1 Bits
 | 
			
		||||
	EICRA_ISC0 = 0x3 // External Interrupt Sense Control 0 Bits
 | 
			
		||||
 | 
			
		||||
	// EIMSK: External Interrupt Mask Register
 | 
			
		||||
	EIMSK_INT = 0x3 // External Interrupt Request 1 Enable
 | 
			
		||||
 | 
			
		||||
	// EIFR: External Interrupt Flag Register
 | 
			
		||||
	EIFR_INTF = 0x3 // External Interrupt Flags
 | 
			
		||||
 | 
			
		||||
	// PCICR: Pin Change Interrupt Control Register
 | 
			
		||||
	PCICR_PCIE = 0x7 // Pin Change Interrupt Enables
 | 
			
		||||
 | 
			
		||||
	// PCMSK2: Pin Change Mask Register 2
 | 
			
		||||
	PCMSK2_PCINT = 0xff // Pin Change Enable Masks
 | 
			
		||||
 | 
			
		||||
	// PCMSK1: Pin Change Mask Register 1
 | 
			
		||||
	PCMSK1_PCINT = 0x7f // Pin Change Enable Masks
 | 
			
		||||
 | 
			
		||||
	// PCMSK0: Pin Change Mask Register 0
 | 
			
		||||
	PCMSK0_PCINT = 0xff // Pin Change Enable Masks
 | 
			
		||||
 | 
			
		||||
	// PCIFR: Pin Change Interrupt Flag Register
 | 
			
		||||
	PCIFR_PCIF = 0x7 // Pin Change Interrupt Flags
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
// Bitfields for SPI: Serial Peripheral Interface
 | 
			
		||||
const (
 | 
			
		||||
	// SPSR: SPI Status Register
 | 
			
		||||
	SPSR_SPIF  = 0x80 // SPI Interrupt Flag
 | 
			
		||||
	SPSR_WCOL  = 0x40 // Write Collision Flag
 | 
			
		||||
	SPSR_SPI2X = 0x1  // Double SPI Speed Bit
 | 
			
		||||
 | 
			
		||||
	// SPCR: SPI Control Register
 | 
			
		||||
	SPCR_SPIE = 0x80 // SPI Interrupt Enable
 | 
			
		||||
	SPCR_SPE  = 0x40 // SPI Enable
 | 
			
		||||
	SPCR_DORD = 0x20 // Data Order
 | 
			
		||||
	SPCR_MSTR = 0x10 // Master/Slave Select
 | 
			
		||||
	SPCR_CPOL = 0x8  // Clock polarity
 | 
			
		||||
	SPCR_CPHA = 0x4  // Clock Phase
 | 
			
		||||
	SPCR_SPR  = 0x3  // SPI Clock Rate Selects
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
// Bitfields for WDT: Watchdog Timer
 | 
			
		||||
const (
 | 
			
		||||
	// WDTCSR: Watchdog Timer Control Register
 | 
			
		||||
	WDTCSR_WDIF = 0x80 // Watchdog Timeout Interrupt Flag
 | 
			
		||||
	WDTCSR_WDIE = 0x40 // Watchdog Timeout Interrupt Enable
 | 
			
		||||
	WDTCSR_WDP  = 0x27 // Watchdog Timer Prescaler Bits
 | 
			
		||||
	WDTCSR_WDCE = 0x10 // Watchdog Change Enable
 | 
			
		||||
	WDTCSR_WDE  = 0x8  // Watch Dog Enable
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
// Bitfields for EEPROM: EEPROM
 | 
			
		||||
const (
 | 
			
		||||
	// EECR: EEPROM Control Register
 | 
			
		||||
	EECR_EEPM  = 0x30 // EEPROM Programming Mode Bits
 | 
			
		||||
	EECR_EERIE = 0x8  // EEPROM Ready Interrupt Enable
 | 
			
		||||
	EECR_EEMPE = 0x4  // EEPROM Master Write Enable
 | 
			
		||||
	EECR_EEPE  = 0x2  // EEPROM Write Enable
 | 
			
		||||
	EECR_EERE  = 0x1  // EEPROM Read Enable
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
// Bitfields for CPU: CPU Registers
 | 
			
		||||
const (
 | 
			
		||||
	// PRR: Power Reduction Register
 | 
			
		||||
	PRR_PRTWI    = 0x80 // Power Reduction TWI
 | 
			
		||||
	PRR_PRTIM2   = 0x40 // Power Reduction Timer/Counter2
 | 
			
		||||
	PRR_PRTIM0   = 0x20 // Power Reduction Timer/Counter0
 | 
			
		||||
	PRR_PRTIM1   = 0x8  // Power Reduction Timer/Counter1
 | 
			
		||||
	PRR_PRSPI    = 0x4  // Power Reduction Serial Peripheral Interface
 | 
			
		||||
	PRR_PRUSART0 = 0x2  // Power Reduction USART
 | 
			
		||||
	PRR_PRADC    = 0x1  // Power Reduction ADC
 | 
			
		||||
 | 
			
		||||
	// OSCCAL: Oscillator Calibration Value
 | 
			
		||||
	OSCCAL_OSCCAL = 0xff // Oscillator Calibration
 | 
			
		||||
 | 
			
		||||
	// CLKPR: Clock Prescale Register
 | 
			
		||||
	CLKPR_CLKPCE = 0x80 // Clock Prescaler Change Enable
 | 
			
		||||
	CLKPR_CLKPS  = 0xf  // Clock Prescaler Select Bits
 | 
			
		||||
 | 
			
		||||
	// SREG: Status Register
 | 
			
		||||
	SREG_I = 0x80 // Global Interrupt Enable
 | 
			
		||||
	SREG_T = 0x40 // Bit Copy Storage
 | 
			
		||||
	SREG_H = 0x20 // Half Carry Flag
 | 
			
		||||
	SREG_S = 0x10 // Sign Bit
 | 
			
		||||
	SREG_V = 0x8  // Two's Complement Overflow Flag
 | 
			
		||||
	SREG_N = 0x4  // Negative Flag
 | 
			
		||||
	SREG_Z = 0x2  // Zero Flag
 | 
			
		||||
	SREG_C = 0x1  // Carry Flag
 | 
			
		||||
 | 
			
		||||
	// SPMCSR: Store Program Memory Control and Status Register
 | 
			
		||||
	SPMCSR_SPMIE  = 0x80 // SPM Interrupt Enable
 | 
			
		||||
	SPMCSR_RWWSB  = 0x40 // Read-While-Write Section Busy
 | 
			
		||||
	SPMCSR_SIGRD  = 0x20 // Signature Row Read
 | 
			
		||||
	SPMCSR_RWWSRE = 0x10 // Read-While-Write section read enable
 | 
			
		||||
	SPMCSR_BLBSET = 0x8  // Boot Lock Bit Set
 | 
			
		||||
	SPMCSR_PGWRT  = 0x4  // Page Write
 | 
			
		||||
	SPMCSR_PGERS  = 0x2  // Page Erase
 | 
			
		||||
	SPMCSR_SPMEN  = 0x1  // Store Program Memory
 | 
			
		||||
 | 
			
		||||
	// MCUCR: MCU Control Register
 | 
			
		||||
	MCUCR_PUD   = 0x10
 | 
			
		||||
	MCUCR_IVSEL = 0x2
 | 
			
		||||
	MCUCR_IVCE  = 0x1
 | 
			
		||||
 | 
			
		||||
	// MCUSR: MCU Status Register
 | 
			
		||||
	MCUSR_WDRF  = 0x8 // Watchdog Reset Flag
 | 
			
		||||
	MCUSR_BORF  = 0x4 // Brown-out Reset Flag
 | 
			
		||||
	MCUSR_EXTRF = 0x2 // External Reset Flag
 | 
			
		||||
	MCUSR_PORF  = 0x1 // Power-on reset flag
 | 
			
		||||
 | 
			
		||||
	// SMCR: Sleep Mode Control Register
 | 
			
		||||
	SMCR_SM = 0xe // Sleep Mode Select Bits
 | 
			
		||||
	SMCR_SE = 0x1 // Sleep Enable
 | 
			
		||||
)
 | 
			
		||||
							
								
								
									
										6
									
								
								src/device/avr/atmega168a.ld
									
										
									
									
									
										Обычный файл
									
								
							
							
						
						
									
										6
									
								
								src/device/avr/atmega168a.ld
									
										
									
									
									
										Обычный файл
									
								
							| 
						 | 
				
			
			@ -0,0 +1,6 @@
 | 
			
		|||
/* Automatically generated file. DO NOT EDIT. */
 | 
			
		||||
/* Generated by gen-device.py from ATmega168A.atdf, see http://packs.download.atmel.com/ */
 | 
			
		||||
 | 
			
		||||
__flash_size = 0x4000;
 | 
			
		||||
__ram_size   = 0x400;
 | 
			
		||||
__num_isrs   = 26;
 | 
			
		||||
							
								
								
									
										642
									
								
								src/device/avr/atmega168p.go
									
										
									
									
									
										Обычный файл
									
								
							
							
						
						
									
										642
									
								
								src/device/avr/atmega168p.go
									
										
									
									
									
										Обычный файл
									
								
							| 
						 | 
				
			
			@ -0,0 +1,642 @@
 | 
			
		|||
// Automatically generated file. DO NOT EDIT.
 | 
			
		||||
// Generated by gen-device.py from ATmega168P.atdf, see http://packs.download.atmel.com/
 | 
			
		||||
 | 
			
		||||
// +build avr,atmega168p
 | 
			
		||||
 | 
			
		||||
// Device information for the ATmega168P.
 | 
			
		||||
//
 | 
			
		||||
package avr
 | 
			
		||||
 | 
			
		||||
// Magic type name for the compiler.
 | 
			
		||||
type __reg uint8
 | 
			
		||||
 | 
			
		||||
// Export this magic type name.
 | 
			
		||||
type RegValue = __reg
 | 
			
		||||
 | 
			
		||||
// Some information about this device.
 | 
			
		||||
const (
 | 
			
		||||
	DEVICE = "ATmega168P"
 | 
			
		||||
	ARCH   = "AVR8"
 | 
			
		||||
	FAMILY = "megaAVR"
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
// Interrupts
 | 
			
		||||
const (
 | 
			
		||||
	IRQ_RESET        = 0  // External Pin, Power-on Reset, Brown-out Reset and Watchdog Reset
 | 
			
		||||
	IRQ_INT0         = 1  // External Interrupt Request 0
 | 
			
		||||
	IRQ_INT1         = 2  // External Interrupt Request 1
 | 
			
		||||
	IRQ_PCINT0       = 3  // Pin Change Interrupt Request 0
 | 
			
		||||
	IRQ_PCINT1       = 4  // Pin Change Interrupt Request 0
 | 
			
		||||
	IRQ_PCINT2       = 5  // Pin Change Interrupt Request 1
 | 
			
		||||
	IRQ_WDT          = 6  // Watchdog Time-out Interrupt
 | 
			
		||||
	IRQ_TIMER2_COMPA = 7  // Timer/Counter2 Compare Match A
 | 
			
		||||
	IRQ_TIMER2_COMPB = 8  // Timer/Counter2 Compare Match A
 | 
			
		||||
	IRQ_TIMER2_OVF   = 9  // Timer/Counter2 Overflow
 | 
			
		||||
	IRQ_TIMER1_CAPT  = 10 // Timer/Counter1 Capture Event
 | 
			
		||||
	IRQ_TIMER1_COMPA = 11 // Timer/Counter1 Compare Match A
 | 
			
		||||
	IRQ_TIMER1_COMPB = 12 // Timer/Counter1 Compare Match B
 | 
			
		||||
	IRQ_TIMER1_OVF   = 13 // Timer/Counter1 Overflow
 | 
			
		||||
	IRQ_TIMER0_COMPA = 14 // TimerCounter0 Compare Match A
 | 
			
		||||
	IRQ_TIMER0_COMPB = 15 // TimerCounter0 Compare Match B
 | 
			
		||||
	IRQ_TIMER0_OVF   = 16 // Timer/Couner0 Overflow
 | 
			
		||||
	IRQ_SPI_STC      = 17 // SPI Serial Transfer Complete
 | 
			
		||||
	IRQ_USART_RX     = 18 // USART Rx Complete
 | 
			
		||||
	IRQ_USART_UDRE   = 19 // USART, Data Register Empty
 | 
			
		||||
	IRQ_USART_TX     = 20 // USART Tx Complete
 | 
			
		||||
	IRQ_ADC          = 21 // ADC Conversion Complete
 | 
			
		||||
	IRQ_EE_READY     = 22 // EEPROM Ready
 | 
			
		||||
	IRQ_ANALOG_COMP  = 23 // Analog Comparator
 | 
			
		||||
	IRQ_TWI          = 24 // Two-wire Serial Interface
 | 
			
		||||
	IRQ_SPM_Ready    = 25 // Store Program Memory Read
 | 
			
		||||
	IRQ_max          = 25 // Highest interrupt number on this device.
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
// Peripherals
 | 
			
		||||
var (
 | 
			
		||||
	// Fuses
 | 
			
		||||
	FUSE = struct {
 | 
			
		||||
		EXTENDED __reg
 | 
			
		||||
		HIGH     __reg
 | 
			
		||||
		LOW      __reg
 | 
			
		||||
	}{
 | 
			
		||||
		EXTENDED: 0x2,
 | 
			
		||||
		HIGH:     0x1,
 | 
			
		||||
		LOW:      0x0,
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	// Lockbits
 | 
			
		||||
	LOCKBIT = struct {
 | 
			
		||||
		LOCKBIT __reg
 | 
			
		||||
	}{
 | 
			
		||||
		LOCKBIT: 0x0,
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	// USART
 | 
			
		||||
	USART = struct {
 | 
			
		||||
		UDR0   __reg
 | 
			
		||||
		UCSR0A __reg
 | 
			
		||||
		UCSR0B __reg
 | 
			
		||||
		UCSR0C __reg
 | 
			
		||||
		UBRR0L __reg
 | 
			
		||||
		UBRR0H __reg
 | 
			
		||||
	}{
 | 
			
		||||
		UDR0:   0xc6, // USART I/O Data Register
 | 
			
		||||
		UCSR0A: 0xc0, // USART Control and Status Register A
 | 
			
		||||
		UCSR0B: 0xc1, // USART Control and Status Register B
 | 
			
		||||
		UCSR0C: 0xc2, // USART Control and Status Register C
 | 
			
		||||
		UBRR0L: 0xc4, // USART Baud Rate Register  Bytes
 | 
			
		||||
		UBRR0H: 0xc4, // USART Baud Rate Register  Bytes
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	// Two Wire Serial Interface
 | 
			
		||||
	TWI = struct {
 | 
			
		||||
		TWAMR __reg
 | 
			
		||||
		TWBR  __reg
 | 
			
		||||
		TWCR  __reg
 | 
			
		||||
		TWSR  __reg
 | 
			
		||||
		TWDR  __reg
 | 
			
		||||
		TWAR  __reg
 | 
			
		||||
	}{
 | 
			
		||||
		TWAMR: 0xbd, // TWI (Slave) Address Mask Register
 | 
			
		||||
		TWBR:  0xb8, // TWI Bit Rate register
 | 
			
		||||
		TWCR:  0xbc, // TWI Control Register
 | 
			
		||||
		TWSR:  0xb9, // TWI Status Register
 | 
			
		||||
		TWDR:  0xbb, // TWI Data register
 | 
			
		||||
		TWAR:  0xba, // TWI (Slave) Address register
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	// Timer/Counter, 16-bit
 | 
			
		||||
	TC16 = struct {
 | 
			
		||||
		TIMSK1 __reg
 | 
			
		||||
		TIFR1  __reg
 | 
			
		||||
		TCCR1A __reg
 | 
			
		||||
		TCCR1B __reg
 | 
			
		||||
		TCCR1C __reg
 | 
			
		||||
		TCNT1L __reg
 | 
			
		||||
		TCNT1H __reg
 | 
			
		||||
		OCR1AL __reg
 | 
			
		||||
		OCR1AH __reg
 | 
			
		||||
		OCR1BL __reg
 | 
			
		||||
		OCR1BH __reg
 | 
			
		||||
		ICR1L  __reg
 | 
			
		||||
		ICR1H  __reg
 | 
			
		||||
	}{
 | 
			
		||||
		TIMSK1: 0x6f, // Timer/Counter Interrupt Mask Register
 | 
			
		||||
		TIFR1:  0x36, // Timer/Counter Interrupt Flag register
 | 
			
		||||
		TCCR1A: 0x80, // Timer/Counter1 Control Register A
 | 
			
		||||
		TCCR1B: 0x81, // Timer/Counter1 Control Register B
 | 
			
		||||
		TCCR1C: 0x82, // Timer/Counter1 Control Register C
 | 
			
		||||
		TCNT1L: 0x84, // Timer/Counter1  Bytes
 | 
			
		||||
		TCNT1H: 0x84, // Timer/Counter1  Bytes
 | 
			
		||||
		OCR1AL: 0x88, // Timer/Counter1 Output Compare Register  Bytes
 | 
			
		||||
		OCR1AH: 0x88, // Timer/Counter1 Output Compare Register  Bytes
 | 
			
		||||
		OCR1BL: 0x8a, // Timer/Counter1 Output Compare Register  Bytes
 | 
			
		||||
		OCR1BH: 0x8a, // Timer/Counter1 Output Compare Register  Bytes
 | 
			
		||||
		ICR1L:  0x86, // Timer/Counter1 Input Capture Register  Bytes
 | 
			
		||||
		ICR1H:  0x86, // Timer/Counter1 Input Capture Register  Bytes
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	// Timer/Counter, 8-bit Async
 | 
			
		||||
	TC8_ASYNC = struct {
 | 
			
		||||
		TIMSK2 __reg
 | 
			
		||||
		TIFR2  __reg
 | 
			
		||||
		TCCR2A __reg
 | 
			
		||||
		TCCR2B __reg
 | 
			
		||||
		TCNT2  __reg
 | 
			
		||||
		OCR2B  __reg
 | 
			
		||||
		OCR2A  __reg
 | 
			
		||||
		ASSR   __reg
 | 
			
		||||
	}{
 | 
			
		||||
		TIMSK2: 0x70, // Timer/Counter Interrupt Mask register
 | 
			
		||||
		TIFR2:  0x37, // Timer/Counter Interrupt Flag Register
 | 
			
		||||
		TCCR2A: 0xb0, // Timer/Counter2 Control Register A
 | 
			
		||||
		TCCR2B: 0xb1, // Timer/Counter2 Control Register B
 | 
			
		||||
		TCNT2:  0xb2, // Timer/Counter2
 | 
			
		||||
		OCR2B:  0xb4, // Timer/Counter2 Output Compare Register B
 | 
			
		||||
		OCR2A:  0xb3, // Timer/Counter2 Output Compare Register A
 | 
			
		||||
		ASSR:   0xb6, // Asynchronous Status Register
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	// Analog-to-Digital Converter
 | 
			
		||||
	ADC = struct {
 | 
			
		||||
		ADMUX  __reg
 | 
			
		||||
		ADCL   __reg
 | 
			
		||||
		ADCH   __reg
 | 
			
		||||
		ADCSRA __reg
 | 
			
		||||
		ADCSRB __reg
 | 
			
		||||
		DIDR0  __reg
 | 
			
		||||
	}{
 | 
			
		||||
		ADMUX:  0x7c, // The ADC multiplexer Selection Register
 | 
			
		||||
		ADCL:   0x78, // ADC Data Register  Bytes
 | 
			
		||||
		ADCH:   0x78, // ADC Data Register  Bytes
 | 
			
		||||
		ADCSRA: 0x7a, // The ADC Control and Status register A
 | 
			
		||||
		ADCSRB: 0x7b, // The ADC Control and Status register B
 | 
			
		||||
		DIDR0:  0x7e, // Digital Input Disable Register
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	// Analog Comparator
 | 
			
		||||
	AC = struct {
 | 
			
		||||
		ACSR  __reg
 | 
			
		||||
		DIDR1 __reg
 | 
			
		||||
	}{
 | 
			
		||||
		ACSR:  0x50, // Analog Comparator Control And Status Register
 | 
			
		||||
		DIDR1: 0x7f, // Digital Input Disable Register 1
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	// I/O Port
 | 
			
		||||
	PORT = struct {
 | 
			
		||||
		PORTB __reg
 | 
			
		||||
		DDRB  __reg
 | 
			
		||||
		PINB  __reg
 | 
			
		||||
		PORTC __reg
 | 
			
		||||
		DDRC  __reg
 | 
			
		||||
		PINC  __reg
 | 
			
		||||
		PORTD __reg
 | 
			
		||||
		DDRD  __reg
 | 
			
		||||
		PIND  __reg
 | 
			
		||||
	}{
 | 
			
		||||
		PORTB: 0x25, // Port B Data Register
 | 
			
		||||
		DDRB:  0x24, // Port B Data Direction Register
 | 
			
		||||
		PINB:  0x23, // Port B Input Pins
 | 
			
		||||
		PORTC: 0x28, // Port C Data Register
 | 
			
		||||
		DDRC:  0x27, // Port C Data Direction Register
 | 
			
		||||
		PINC:  0x26, // Port C Input Pins
 | 
			
		||||
		PORTD: 0x2b, // Port D Data Register
 | 
			
		||||
		DDRD:  0x2a, // Port D Data Direction Register
 | 
			
		||||
		PIND:  0x29, // Port D Input Pins
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	// Timer/Counter, 8-bit
 | 
			
		||||
	TC8 = struct {
 | 
			
		||||
		OCR0B  __reg
 | 
			
		||||
		OCR0A  __reg
 | 
			
		||||
		TCNT0  __reg
 | 
			
		||||
		TCCR0B __reg
 | 
			
		||||
		TCCR0A __reg
 | 
			
		||||
		TIMSK0 __reg
 | 
			
		||||
		TIFR0  __reg
 | 
			
		||||
	}{
 | 
			
		||||
		OCR0B:  0x48, // Timer/Counter0 Output Compare Register
 | 
			
		||||
		OCR0A:  0x47, // Timer/Counter0 Output Compare Register
 | 
			
		||||
		TCNT0:  0x46, // Timer/Counter0
 | 
			
		||||
		TCCR0B: 0x45, // Timer/Counter Control Register B
 | 
			
		||||
		TCCR0A: 0x44, // Timer/Counter  Control Register A
 | 
			
		||||
		TIMSK0: 0x6e, // Timer/Counter0 Interrupt Mask Register
 | 
			
		||||
		TIFR0:  0x35, // Timer/Counter0 Interrupt Flag register
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	// External Interrupts
 | 
			
		||||
	EXINT = struct {
 | 
			
		||||
		EICRA  __reg
 | 
			
		||||
		EIMSK  __reg
 | 
			
		||||
		EIFR   __reg
 | 
			
		||||
		PCICR  __reg
 | 
			
		||||
		PCMSK2 __reg
 | 
			
		||||
		PCMSK1 __reg
 | 
			
		||||
		PCMSK0 __reg
 | 
			
		||||
		PCIFR  __reg
 | 
			
		||||
	}{
 | 
			
		||||
		EICRA:  0x69, // External Interrupt Control Register
 | 
			
		||||
		EIMSK:  0x3d, // External Interrupt Mask Register
 | 
			
		||||
		EIFR:   0x3c, // External Interrupt Flag Register
 | 
			
		||||
		PCICR:  0x68, // Pin Change Interrupt Control Register
 | 
			
		||||
		PCMSK2: 0x6d, // Pin Change Mask Register 2
 | 
			
		||||
		PCMSK1: 0x6c, // Pin Change Mask Register 1
 | 
			
		||||
		PCMSK0: 0x6b, // Pin Change Mask Register 0
 | 
			
		||||
		PCIFR:  0x3b, // Pin Change Interrupt Flag Register
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	// Serial Peripheral Interface
 | 
			
		||||
	SPI = struct {
 | 
			
		||||
		SPDR __reg
 | 
			
		||||
		SPSR __reg
 | 
			
		||||
		SPCR __reg
 | 
			
		||||
	}{
 | 
			
		||||
		SPDR: 0x4e, // SPI Data Register
 | 
			
		||||
		SPSR: 0x4d, // SPI Status Register
 | 
			
		||||
		SPCR: 0x4c, // SPI Control Register
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	// Watchdog Timer
 | 
			
		||||
	WDT = struct {
 | 
			
		||||
		WDTCSR __reg
 | 
			
		||||
	}{
 | 
			
		||||
		WDTCSR: 0x60, // Watchdog Timer Control Register
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	// EEPROM
 | 
			
		||||
	EEPROM = struct {
 | 
			
		||||
		EEARL __reg
 | 
			
		||||
		EEARH __reg
 | 
			
		||||
		EEDR  __reg
 | 
			
		||||
		EECR  __reg
 | 
			
		||||
	}{
 | 
			
		||||
		EEARL: 0x41, // EEPROM Address Register  Bytes
 | 
			
		||||
		EEARH: 0x41, // EEPROM Address Register  Bytes
 | 
			
		||||
		EEDR:  0x40, // EEPROM Data Register
 | 
			
		||||
		EECR:  0x3f, // EEPROM Control Register
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	// CPU Registers
 | 
			
		||||
	CPU = struct {
 | 
			
		||||
		PRR    __reg
 | 
			
		||||
		OSCCAL __reg
 | 
			
		||||
		CLKPR  __reg
 | 
			
		||||
		SREG   __reg
 | 
			
		||||
		SPL    __reg
 | 
			
		||||
		SPH    __reg
 | 
			
		||||
		SPMCSR __reg
 | 
			
		||||
		MCUCR  __reg
 | 
			
		||||
		MCUSR  __reg
 | 
			
		||||
		SMCR   __reg
 | 
			
		||||
		GPIOR2 __reg
 | 
			
		||||
		GPIOR1 __reg
 | 
			
		||||
		GPIOR0 __reg
 | 
			
		||||
	}{
 | 
			
		||||
		PRR:    0x64, // Power Reduction Register
 | 
			
		||||
		OSCCAL: 0x66, // Oscillator Calibration Value
 | 
			
		||||
		CLKPR:  0x61, // Clock Prescale Register
 | 
			
		||||
		SREG:   0x5f, // Status Register
 | 
			
		||||
		SPL:    0x5d, // Stack Pointer
 | 
			
		||||
		SPH:    0x5d, // Stack Pointer
 | 
			
		||||
		SPMCSR: 0x57, // Store Program Memory Control and Status Register
 | 
			
		||||
		MCUCR:  0x55, // MCU Control Register
 | 
			
		||||
		MCUSR:  0x54, // MCU Status Register
 | 
			
		||||
		SMCR:   0x53, // Sleep Mode Control Register
 | 
			
		||||
		GPIOR2: 0x4b, // General Purpose I/O Register 2
 | 
			
		||||
		GPIOR1: 0x4a, // General Purpose I/O Register 1
 | 
			
		||||
		GPIOR0: 0x3e, // General Purpose I/O Register 0
 | 
			
		||||
	}
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
// Bitfields for FUSE: Fuses
 | 
			
		||||
const (
 | 
			
		||||
	// EXTENDED
 | 
			
		||||
	EXTENDED_BOOTSZ  = 0x6 // Select boot size
 | 
			
		||||
	EXTENDED_BOOTRST = 0x1 // Boot Reset vector Enabled
 | 
			
		||||
 | 
			
		||||
	// HIGH
 | 
			
		||||
	HIGH_RSTDISBL = 0x80 // Reset Disabled (Enable PC6 as i/o pin)
 | 
			
		||||
	HIGH_DWEN     = 0x40 // Debug Wire enable
 | 
			
		||||
	HIGH_SPIEN    = 0x20 // Serial program downloading (SPI) enabled
 | 
			
		||||
	HIGH_WDTON    = 0x10 // Watch-dog Timer always on
 | 
			
		||||
	HIGH_EESAVE   = 0x8  // Preserve EEPROM through the Chip Erase cycle
 | 
			
		||||
	HIGH_BODLEVEL = 0x7  // Brown-out Detector trigger level
 | 
			
		||||
 | 
			
		||||
	// LOW
 | 
			
		||||
	LOW_CKDIV8    = 0x80 // Divide clock by 8 internally
 | 
			
		||||
	LOW_CKOUT     = 0x40 // Clock output on PORTB0
 | 
			
		||||
	LOW_SUT_CKSEL = 0x3f // Select Clock Source
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
// Bitfields for LOCKBIT: Lockbits
 | 
			
		||||
const (
 | 
			
		||||
	// LOCKBIT
 | 
			
		||||
	LOCKBIT_LB   = 0x3  // Memory Lock
 | 
			
		||||
	LOCKBIT_BLB0 = 0xc  // Boot Loader Protection Mode
 | 
			
		||||
	LOCKBIT_BLB1 = 0x30 // Boot Loader Protection Mode
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
// Bitfields for USART: USART
 | 
			
		||||
const (
 | 
			
		||||
	// UCSR0A: USART Control and Status Register A
 | 
			
		||||
	UCSR0A_RXC0  = 0x80 // USART Receive Complete
 | 
			
		||||
	UCSR0A_TXC0  = 0x40 // USART Transmitt Complete
 | 
			
		||||
	UCSR0A_UDRE0 = 0x20 // USART Data Register Empty
 | 
			
		||||
	UCSR0A_FE0   = 0x10 // Framing Error
 | 
			
		||||
	UCSR0A_DOR0  = 0x8  // Data overRun
 | 
			
		||||
	UCSR0A_UPE0  = 0x4  // Parity Error
 | 
			
		||||
	UCSR0A_U2X0  = 0x2  // Double the USART transmission speed
 | 
			
		||||
	UCSR0A_MPCM0 = 0x1  // Multi-processor Communication Mode
 | 
			
		||||
 | 
			
		||||
	// UCSR0B: USART Control and Status Register B
 | 
			
		||||
	UCSR0B_RXCIE0 = 0x80 // RX Complete Interrupt Enable
 | 
			
		||||
	UCSR0B_TXCIE0 = 0x40 // TX Complete Interrupt Enable
 | 
			
		||||
	UCSR0B_UDRIE0 = 0x20 // USART Data register Empty Interrupt Enable
 | 
			
		||||
	UCSR0B_RXEN0  = 0x10 // Receiver Enable
 | 
			
		||||
	UCSR0B_TXEN0  = 0x8  // Transmitter Enable
 | 
			
		||||
	UCSR0B_UCSZ02 = 0x4  // Character Size
 | 
			
		||||
	UCSR0B_RXB80  = 0x2  // Receive Data Bit 8
 | 
			
		||||
	UCSR0B_TXB80  = 0x1  // Transmit Data Bit 8
 | 
			
		||||
 | 
			
		||||
	// UCSR0C: USART Control and Status Register C
 | 
			
		||||
	UCSR0C_UMSEL0 = 0xc0 // USART Mode Select
 | 
			
		||||
	UCSR0C_UPM0   = 0x30 // Parity Mode Bits
 | 
			
		||||
	UCSR0C_USBS0  = 0x8  // Stop Bit Select
 | 
			
		||||
	UCSR0C_UCSZ0  = 0x6  // Character Size
 | 
			
		||||
	UCSR0C_UCPOL0 = 0x1  // Clock Polarity
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
// Bitfields for TWI: Two Wire Serial Interface
 | 
			
		||||
const (
 | 
			
		||||
	// TWAMR: TWI (Slave) Address Mask Register
 | 
			
		||||
	TWAMR_TWAM = 0xfe
 | 
			
		||||
 | 
			
		||||
	// TWCR: TWI Control Register
 | 
			
		||||
	TWCR_TWINT = 0x80 // TWI Interrupt Flag
 | 
			
		||||
	TWCR_TWEA  = 0x40 // TWI Enable Acknowledge Bit
 | 
			
		||||
	TWCR_TWSTA = 0x20 // TWI Start Condition Bit
 | 
			
		||||
	TWCR_TWSTO = 0x10 // TWI Stop Condition Bit
 | 
			
		||||
	TWCR_TWWC  = 0x8  // TWI Write Collition Flag
 | 
			
		||||
	TWCR_TWEN  = 0x4  // TWI Enable Bit
 | 
			
		||||
	TWCR_TWIE  = 0x1  // TWI Interrupt Enable
 | 
			
		||||
 | 
			
		||||
	// TWSR: TWI Status Register
 | 
			
		||||
	TWSR_TWS  = 0xf8 // TWI Status
 | 
			
		||||
	TWSR_TWPS = 0x3  // TWI Prescaler
 | 
			
		||||
 | 
			
		||||
	// TWAR: TWI (Slave) Address register
 | 
			
		||||
	TWAR_TWA   = 0xfe // TWI (Slave) Address register Bits
 | 
			
		||||
	TWAR_TWGCE = 0x1  // TWI General Call Recognition Enable Bit
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
// Bitfields for TC16: Timer/Counter, 16-bit
 | 
			
		||||
const (
 | 
			
		||||
	// TIMSK1: Timer/Counter Interrupt Mask Register
 | 
			
		||||
	TIMSK1_ICIE1  = 0x20 // Timer/Counter1 Input Capture Interrupt Enable
 | 
			
		||||
	TIMSK1_OCIE1B = 0x4  // Timer/Counter1 Output CompareB Match Interrupt Enable
 | 
			
		||||
	TIMSK1_OCIE1A = 0x2  // Timer/Counter1 Output CompareA Match Interrupt Enable
 | 
			
		||||
	TIMSK1_TOIE1  = 0x1  // Timer/Counter1 Overflow Interrupt Enable
 | 
			
		||||
 | 
			
		||||
	// TIFR1: Timer/Counter Interrupt Flag register
 | 
			
		||||
	TIFR1_ICF1  = 0x20 // Input Capture Flag 1
 | 
			
		||||
	TIFR1_OCF1B = 0x4  // Output Compare Flag 1B
 | 
			
		||||
	TIFR1_OCF1A = 0x2  // Output Compare Flag 1A
 | 
			
		||||
	TIFR1_TOV1  = 0x1  // Timer/Counter1 Overflow Flag
 | 
			
		||||
 | 
			
		||||
	// TCCR1A: Timer/Counter1 Control Register A
 | 
			
		||||
	TCCR1A_COM1A = 0xc0 // Compare Output Mode 1A, bits
 | 
			
		||||
	TCCR1A_COM1B = 0x30 // Compare Output Mode 1B, bits
 | 
			
		||||
	TCCR1A_WGM1  = 0x3  // Waveform Generation Mode
 | 
			
		||||
 | 
			
		||||
	// TCCR1B: Timer/Counter1 Control Register B
 | 
			
		||||
	TCCR1B_ICNC1 = 0x80 // Input Capture 1 Noise Canceler
 | 
			
		||||
	TCCR1B_ICES1 = 0x40 // Input Capture 1 Edge Select
 | 
			
		||||
	TCCR1B_WGM1  = 0x18 // Waveform Generation Mode
 | 
			
		||||
	TCCR1B_CS1   = 0x7  // Prescaler source of Timer/Counter 1
 | 
			
		||||
 | 
			
		||||
	// TCCR1C: Timer/Counter1 Control Register C
 | 
			
		||||
	TCCR1C_FOC1A = 0x80
 | 
			
		||||
	TCCR1C_FOC1B = 0x40
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
// Bitfields for TC8_ASYNC: Timer/Counter, 8-bit Async
 | 
			
		||||
const (
 | 
			
		||||
	// TIMSK2: Timer/Counter Interrupt Mask register
 | 
			
		||||
	TIMSK2_OCIE2B = 0x4 // Timer/Counter2 Output Compare Match B Interrupt Enable
 | 
			
		||||
	TIMSK2_OCIE2A = 0x2 // Timer/Counter2 Output Compare Match A Interrupt Enable
 | 
			
		||||
	TIMSK2_TOIE2  = 0x1 // Timer/Counter2 Overflow Interrupt Enable
 | 
			
		||||
 | 
			
		||||
	// TIFR2: Timer/Counter Interrupt Flag Register
 | 
			
		||||
	TIFR2_OCF2B = 0x4 // Output Compare Flag 2B
 | 
			
		||||
	TIFR2_OCF2A = 0x2 // Output Compare Flag 2A
 | 
			
		||||
	TIFR2_TOV2  = 0x1 // Timer/Counter2 Overflow Flag
 | 
			
		||||
 | 
			
		||||
	// TCCR2A: Timer/Counter2 Control Register A
 | 
			
		||||
	TCCR2A_COM2A = 0xc0 // Compare Output Mode bits
 | 
			
		||||
	TCCR2A_COM2B = 0x30 // Compare Output Mode bits
 | 
			
		||||
	TCCR2A_WGM2  = 0x3  // Waveform Genration Mode
 | 
			
		||||
 | 
			
		||||
	// TCCR2B: Timer/Counter2 Control Register B
 | 
			
		||||
	TCCR2B_FOC2A = 0x80 // Force Output Compare A
 | 
			
		||||
	TCCR2B_FOC2B = 0x40 // Force Output Compare B
 | 
			
		||||
	TCCR2B_WGM22 = 0x8  // Waveform Generation Mode
 | 
			
		||||
	TCCR2B_CS2   = 0x7  // Clock Select bits
 | 
			
		||||
 | 
			
		||||
	// ASSR: Asynchronous Status Register
 | 
			
		||||
	ASSR_EXCLK   = 0x40 // Enable External Clock Input
 | 
			
		||||
	ASSR_AS2     = 0x20 // Asynchronous Timer/Counter2
 | 
			
		||||
	ASSR_TCN2UB  = 0x10 // Timer/Counter2 Update Busy
 | 
			
		||||
	ASSR_OCR2AUB = 0x8  // Output Compare Register2 Update Busy
 | 
			
		||||
	ASSR_OCR2BUB = 0x4  // Output Compare Register 2 Update Busy
 | 
			
		||||
	ASSR_TCR2AUB = 0x2  // Timer/Counter Control Register2 Update Busy
 | 
			
		||||
	ASSR_TCR2BUB = 0x1  // Timer/Counter Control Register2 Update Busy
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
// Bitfields for ADC: Analog-to-Digital Converter
 | 
			
		||||
const (
 | 
			
		||||
	// ADMUX: The ADC multiplexer Selection Register
 | 
			
		||||
	ADMUX_REFS  = 0xc0 // Reference Selection Bits
 | 
			
		||||
	ADMUX_ADLAR = 0x20 // Left Adjust Result
 | 
			
		||||
	ADMUX_MUX   = 0xf  // Analog Channel Selection Bits
 | 
			
		||||
 | 
			
		||||
	// ADCSRA: The ADC Control and Status register A
 | 
			
		||||
	ADCSRA_ADEN  = 0x80 // ADC Enable
 | 
			
		||||
	ADCSRA_ADSC  = 0x40 // ADC Start Conversion
 | 
			
		||||
	ADCSRA_ADATE = 0x20 // ADC  Auto Trigger Enable
 | 
			
		||||
	ADCSRA_ADIF  = 0x10 // ADC Interrupt Flag
 | 
			
		||||
	ADCSRA_ADIE  = 0x8  // ADC Interrupt Enable
 | 
			
		||||
	ADCSRA_ADPS  = 0x7  // ADC  Prescaler Select Bits
 | 
			
		||||
 | 
			
		||||
	// ADCSRB: The ADC Control and Status register B
 | 
			
		||||
	ADCSRB_ACME = 0x40
 | 
			
		||||
	ADCSRB_ADTS = 0x7 // ADC Auto Trigger Source bits
 | 
			
		||||
 | 
			
		||||
	// DIDR0: Digital Input Disable Register
 | 
			
		||||
	DIDR0_ADC5D = 0x20
 | 
			
		||||
	DIDR0_ADC4D = 0x10
 | 
			
		||||
	DIDR0_ADC3D = 0x8
 | 
			
		||||
	DIDR0_ADC2D = 0x4
 | 
			
		||||
	DIDR0_ADC1D = 0x2
 | 
			
		||||
	DIDR0_ADC0D = 0x1
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
// Bitfields for AC: Analog Comparator
 | 
			
		||||
const (
 | 
			
		||||
	// ACSR: Analog Comparator Control And Status Register
 | 
			
		||||
	ACSR_ACD  = 0x80 // Analog Comparator Disable
 | 
			
		||||
	ACSR_ACBG = 0x40 // Analog Comparator Bandgap Select
 | 
			
		||||
	ACSR_ACO  = 0x20 // Analog Compare Output
 | 
			
		||||
	ACSR_ACI  = 0x10 // Analog Comparator Interrupt Flag
 | 
			
		||||
	ACSR_ACIE = 0x8  // Analog Comparator Interrupt Enable
 | 
			
		||||
	ACSR_ACIC = 0x4  // Analog Comparator Input Capture Enable
 | 
			
		||||
	ACSR_ACIS = 0x3  // Analog Comparator Interrupt Mode Select bits
 | 
			
		||||
 | 
			
		||||
	// DIDR1: Digital Input Disable Register 1
 | 
			
		||||
	DIDR1_AIN1D = 0x2 // AIN1 Digital Input Disable
 | 
			
		||||
	DIDR1_AIN0D = 0x1 // AIN0 Digital Input Disable
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
// Bitfields for TC8: Timer/Counter, 8-bit
 | 
			
		||||
const (
 | 
			
		||||
	// TCCR0B: Timer/Counter Control Register B
 | 
			
		||||
	TCCR0B_FOC0A = 0x80 // Force Output Compare A
 | 
			
		||||
	TCCR0B_FOC0B = 0x40 // Force Output Compare B
 | 
			
		||||
	TCCR0B_WGM02 = 0x8
 | 
			
		||||
	TCCR0B_CS0   = 0x7 // Clock Select
 | 
			
		||||
 | 
			
		||||
	// TCCR0A: Timer/Counter  Control Register A
 | 
			
		||||
	TCCR0A_COM0A = 0xc0 // Compare Output Mode, Phase Correct PWM Mode
 | 
			
		||||
	TCCR0A_COM0B = 0x30 // Compare Output Mode, Fast PWm
 | 
			
		||||
	TCCR0A_WGM0  = 0x3  // Waveform Generation Mode
 | 
			
		||||
 | 
			
		||||
	// TIMSK0: Timer/Counter0 Interrupt Mask Register
 | 
			
		||||
	TIMSK0_OCIE0B = 0x4 // Timer/Counter0 Output Compare Match B Interrupt Enable
 | 
			
		||||
	TIMSK0_OCIE0A = 0x2 // Timer/Counter0 Output Compare Match A Interrupt Enable
 | 
			
		||||
	TIMSK0_TOIE0  = 0x1 // Timer/Counter0 Overflow Interrupt Enable
 | 
			
		||||
 | 
			
		||||
	// TIFR0: Timer/Counter0 Interrupt Flag register
 | 
			
		||||
	TIFR0_OCF0B = 0x4 // Timer/Counter0 Output Compare Flag 0B
 | 
			
		||||
	TIFR0_OCF0A = 0x2 // Timer/Counter0 Output Compare Flag 0A
 | 
			
		||||
	TIFR0_TOV0  = 0x1 // Timer/Counter0 Overflow Flag
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
// Bitfields for EXINT: External Interrupts
 | 
			
		||||
const (
 | 
			
		||||
	// EICRA: External Interrupt Control Register
 | 
			
		||||
	EICRA_ISC1 = 0xc // External Interrupt Sense Control 1 Bits
 | 
			
		||||
	EICRA_ISC0 = 0x3 // External Interrupt Sense Control 0 Bits
 | 
			
		||||
 | 
			
		||||
	// EIMSK: External Interrupt Mask Register
 | 
			
		||||
	EIMSK_INT = 0x3 // External Interrupt Request 1 Enable
 | 
			
		||||
 | 
			
		||||
	// EIFR: External Interrupt Flag Register
 | 
			
		||||
	EIFR_INTF = 0x3 // External Interrupt Flags
 | 
			
		||||
 | 
			
		||||
	// PCICR: Pin Change Interrupt Control Register
 | 
			
		||||
	PCICR_PCIE = 0x7 // Pin Change Interrupt Enables
 | 
			
		||||
 | 
			
		||||
	// PCMSK2: Pin Change Mask Register 2
 | 
			
		||||
	PCMSK2_PCINT = 0xff // Pin Change Enable Masks
 | 
			
		||||
 | 
			
		||||
	// PCMSK1: Pin Change Mask Register 1
 | 
			
		||||
	PCMSK1_PCINT = 0x7f // Pin Change Enable Masks
 | 
			
		||||
 | 
			
		||||
	// PCMSK0: Pin Change Mask Register 0
 | 
			
		||||
	PCMSK0_PCINT = 0xff // Pin Change Enable Masks
 | 
			
		||||
 | 
			
		||||
	// PCIFR: Pin Change Interrupt Flag Register
 | 
			
		||||
	PCIFR_PCIF = 0x7 // Pin Change Interrupt Flags
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
// Bitfields for SPI: Serial Peripheral Interface
 | 
			
		||||
const (
 | 
			
		||||
	// SPSR: SPI Status Register
 | 
			
		||||
	SPSR_SPIF  = 0x80 // SPI Interrupt Flag
 | 
			
		||||
	SPSR_WCOL  = 0x40 // Write Collision Flag
 | 
			
		||||
	SPSR_SPI2X = 0x1  // Double SPI Speed Bit
 | 
			
		||||
 | 
			
		||||
	// SPCR: SPI Control Register
 | 
			
		||||
	SPCR_SPIE = 0x80 // SPI Interrupt Enable
 | 
			
		||||
	SPCR_SPE  = 0x40 // SPI Enable
 | 
			
		||||
	SPCR_DORD = 0x20 // Data Order
 | 
			
		||||
	SPCR_MSTR = 0x10 // Master/Slave Select
 | 
			
		||||
	SPCR_CPOL = 0x8  // Clock polarity
 | 
			
		||||
	SPCR_CPHA = 0x4  // Clock Phase
 | 
			
		||||
	SPCR_SPR  = 0x3  // SPI Clock Rate Selects
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
// Bitfields for WDT: Watchdog Timer
 | 
			
		||||
const (
 | 
			
		||||
	// WDTCSR: Watchdog Timer Control Register
 | 
			
		||||
	WDTCSR_WDIF = 0x80 // Watchdog Timeout Interrupt Flag
 | 
			
		||||
	WDTCSR_WDIE = 0x40 // Watchdog Timeout Interrupt Enable
 | 
			
		||||
	WDTCSR_WDP  = 0x27 // Watchdog Timer Prescaler Bits
 | 
			
		||||
	WDTCSR_WDCE = 0x10 // Watchdog Change Enable
 | 
			
		||||
	WDTCSR_WDE  = 0x8  // Watch Dog Enable
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
// Bitfields for EEPROM: EEPROM
 | 
			
		||||
const (
 | 
			
		||||
	// EECR: EEPROM Control Register
 | 
			
		||||
	EECR_EEPM  = 0x30 // EEPROM Programming Mode Bits
 | 
			
		||||
	EECR_EERIE = 0x8  // EEPROM Ready Interrupt Enable
 | 
			
		||||
	EECR_EEMPE = 0x4  // EEPROM Master Write Enable
 | 
			
		||||
	EECR_EEPE  = 0x2  // EEPROM Write Enable
 | 
			
		||||
	EECR_EERE  = 0x1  // EEPROM Read Enable
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
// Bitfields for CPU: CPU Registers
 | 
			
		||||
const (
 | 
			
		||||
	// PRR: Power Reduction Register
 | 
			
		||||
	PRR_PRTWI    = 0x80 // Power Reduction TWI
 | 
			
		||||
	PRR_PRTIM2   = 0x40 // Power Reduction Timer/Counter2
 | 
			
		||||
	PRR_PRTIM0   = 0x20 // Power Reduction Timer/Counter0
 | 
			
		||||
	PRR_PRTIM1   = 0x8  // Power Reduction Timer/Counter1
 | 
			
		||||
	PRR_PRSPI    = 0x4  // Power Reduction Serial Peripheral Interface
 | 
			
		||||
	PRR_PRUSART0 = 0x2  // Power Reduction USART
 | 
			
		||||
	PRR_PRADC    = 0x1  // Power Reduction ADC
 | 
			
		||||
 | 
			
		||||
	// OSCCAL: Oscillator Calibration Value
 | 
			
		||||
	OSCCAL_OSCCAL = 0xff // Oscillator Calibration
 | 
			
		||||
 | 
			
		||||
	// CLKPR: Clock Prescale Register
 | 
			
		||||
	CLKPR_CLKPCE = 0x80 // Clock Prescaler Change Enable
 | 
			
		||||
	CLKPR_CLKPS  = 0xf  // Clock Prescaler Select Bits
 | 
			
		||||
 | 
			
		||||
	// SREG: Status Register
 | 
			
		||||
	SREG_I = 0x80 // Global Interrupt Enable
 | 
			
		||||
	SREG_T = 0x40 // Bit Copy Storage
 | 
			
		||||
	SREG_H = 0x20 // Half Carry Flag
 | 
			
		||||
	SREG_S = 0x10 // Sign Bit
 | 
			
		||||
	SREG_V = 0x8  // Two's Complement Overflow Flag
 | 
			
		||||
	SREG_N = 0x4  // Negative Flag
 | 
			
		||||
	SREG_Z = 0x2  // Zero Flag
 | 
			
		||||
	SREG_C = 0x1  // Carry Flag
 | 
			
		||||
 | 
			
		||||
	// SPMCSR: Store Program Memory Control and Status Register
 | 
			
		||||
	SPMCSR_SPMIE     = 0x80 // SPM Interrupt Enable
 | 
			
		||||
	SPMCSR_RWWSB     = 0x40 // Read-While-Write Section Busy
 | 
			
		||||
	SPMCSR_RWWSRE    = 0x10 // Read-While-Write section read enable
 | 
			
		||||
	SPMCSR_BLBSET    = 0x8  // Boot Lock Bit Set
 | 
			
		||||
	SPMCSR_PGWRT     = 0x4  // Page Write
 | 
			
		||||
	SPMCSR_PGERS     = 0x2  // Page Erase
 | 
			
		||||
	SPMCSR_SELFPRGEN = 0x1  // Self Programming Enable
 | 
			
		||||
 | 
			
		||||
	// MCUCR: MCU Control Register
 | 
			
		||||
	MCUCR_BODS  = 0x40 // BOD Sleep
 | 
			
		||||
	MCUCR_BODSE = 0x20 // BOD Sleep Enable
 | 
			
		||||
	MCUCR_PUD   = 0x10
 | 
			
		||||
	MCUCR_IVSEL = 0x2
 | 
			
		||||
	MCUCR_IVCE  = 0x1
 | 
			
		||||
 | 
			
		||||
	// MCUSR: MCU Status Register
 | 
			
		||||
	MCUSR_WDRF  = 0x8 // Watchdog Reset Flag
 | 
			
		||||
	MCUSR_BORF  = 0x4 // Brown-out Reset Flag
 | 
			
		||||
	MCUSR_EXTRF = 0x2 // External Reset Flag
 | 
			
		||||
	MCUSR_PORF  = 0x1 // Power-on reset flag
 | 
			
		||||
 | 
			
		||||
	// SMCR: Sleep Mode Control Register
 | 
			
		||||
	SMCR_SM = 0xe // Sleep Mode Select Bits
 | 
			
		||||
	SMCR_SE = 0x1 // Sleep Enable
 | 
			
		||||
)
 | 
			
		||||
							
								
								
									
										6
									
								
								src/device/avr/atmega168p.ld
									
										
									
									
									
										Обычный файл
									
								
							
							
						
						
									
										6
									
								
								src/device/avr/atmega168p.ld
									
										
									
									
									
										Обычный файл
									
								
							| 
						 | 
				
			
			@ -0,0 +1,6 @@
 | 
			
		|||
/* Automatically generated file. DO NOT EDIT. */
 | 
			
		||||
/* Generated by gen-device.py from ATmega168P.atdf, see http://packs.download.atmel.com/ */
 | 
			
		||||
 | 
			
		||||
__flash_size = 0x4000;
 | 
			
		||||
__ram_size   = 0x400;
 | 
			
		||||
__num_isrs   = 26;
 | 
			
		||||
							
								
								
									
										643
									
								
								src/device/avr/atmega168pa.go
									
										
									
									
									
										Обычный файл
									
								
							
							
						
						
									
										643
									
								
								src/device/avr/atmega168pa.go
									
										
									
									
									
										Обычный файл
									
								
							| 
						 | 
				
			
			@ -0,0 +1,643 @@
 | 
			
		|||
// Automatically generated file. DO NOT EDIT.
 | 
			
		||||
// Generated by gen-device.py from ATmega168PA.atdf, see http://packs.download.atmel.com/
 | 
			
		||||
 | 
			
		||||
// +build avr,atmega168pa
 | 
			
		||||
 | 
			
		||||
// Device information for the ATmega168PA.
 | 
			
		||||
//
 | 
			
		||||
package avr
 | 
			
		||||
 | 
			
		||||
// Magic type name for the compiler.
 | 
			
		||||
type __reg uint8
 | 
			
		||||
 | 
			
		||||
// Export this magic type name.
 | 
			
		||||
type RegValue = __reg
 | 
			
		||||
 | 
			
		||||
// Some information about this device.
 | 
			
		||||
const (
 | 
			
		||||
	DEVICE = "ATmega168PA"
 | 
			
		||||
	ARCH   = "AVR8"
 | 
			
		||||
	FAMILY = "megaAVR"
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
// Interrupts
 | 
			
		||||
const (
 | 
			
		||||
	IRQ_RESET        = 0  // External Pin, Power-on Reset, Brown-out Reset and Watchdog Reset
 | 
			
		||||
	IRQ_INT0         = 1  // External Interrupt Request 0
 | 
			
		||||
	IRQ_INT1         = 2  // External Interrupt Request 1
 | 
			
		||||
	IRQ_PCINT0       = 3  // Pin Change Interrupt Request 0
 | 
			
		||||
	IRQ_PCINT1       = 4  // Pin Change Interrupt Request 0
 | 
			
		||||
	IRQ_PCINT2       = 5  // Pin Change Interrupt Request 1
 | 
			
		||||
	IRQ_WDT          = 6  // Watchdog Time-out Interrupt
 | 
			
		||||
	IRQ_TIMER2_COMPA = 7  // Timer/Counter2 Compare Match A
 | 
			
		||||
	IRQ_TIMER2_COMPB = 8  // Timer/Counter2 Compare Match A
 | 
			
		||||
	IRQ_TIMER2_OVF   = 9  // Timer/Counter2 Overflow
 | 
			
		||||
	IRQ_TIMER1_CAPT  = 10 // Timer/Counter1 Capture Event
 | 
			
		||||
	IRQ_TIMER1_COMPA = 11 // Timer/Counter1 Compare Match A
 | 
			
		||||
	IRQ_TIMER1_COMPB = 12 // Timer/Counter1 Compare Match B
 | 
			
		||||
	IRQ_TIMER1_OVF   = 13 // Timer/Counter1 Overflow
 | 
			
		||||
	IRQ_TIMER0_COMPA = 14 // TimerCounter0 Compare Match A
 | 
			
		||||
	IRQ_TIMER0_COMPB = 15 // TimerCounter0 Compare Match B
 | 
			
		||||
	IRQ_TIMER0_OVF   = 16 // Timer/Couner0 Overflow
 | 
			
		||||
	IRQ_SPI_STC      = 17 // SPI Serial Transfer Complete
 | 
			
		||||
	IRQ_USART_RX     = 18 // USART Rx Complete
 | 
			
		||||
	IRQ_USART_UDRE   = 19 // USART, Data Register Empty
 | 
			
		||||
	IRQ_USART_TX     = 20 // USART Tx Complete
 | 
			
		||||
	IRQ_ADC          = 21 // ADC Conversion Complete
 | 
			
		||||
	IRQ_EE_READY     = 22 // EEPROM Ready
 | 
			
		||||
	IRQ_ANALOG_COMP  = 23 // Analog Comparator
 | 
			
		||||
	IRQ_TWI          = 24 // Two-wire Serial Interface
 | 
			
		||||
	IRQ_SPM_Ready    = 25 // Store Program Memory Read
 | 
			
		||||
	IRQ_max          = 25 // Highest interrupt number on this device.
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
// Peripherals
 | 
			
		||||
var (
 | 
			
		||||
	// Fuses
 | 
			
		||||
	FUSE = struct {
 | 
			
		||||
		EXTENDED __reg
 | 
			
		||||
		HIGH     __reg
 | 
			
		||||
		LOW      __reg
 | 
			
		||||
	}{
 | 
			
		||||
		EXTENDED: 0x2,
 | 
			
		||||
		HIGH:     0x1,
 | 
			
		||||
		LOW:      0x0,
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	// Lockbits
 | 
			
		||||
	LOCKBIT = struct {
 | 
			
		||||
		LOCKBIT __reg
 | 
			
		||||
	}{
 | 
			
		||||
		LOCKBIT: 0x0,
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	// USART
 | 
			
		||||
	USART = struct {
 | 
			
		||||
		UDR0   __reg
 | 
			
		||||
		UCSR0A __reg
 | 
			
		||||
		UCSR0B __reg
 | 
			
		||||
		UCSR0C __reg
 | 
			
		||||
		UBRR0L __reg
 | 
			
		||||
		UBRR0H __reg
 | 
			
		||||
	}{
 | 
			
		||||
		UDR0:   0xc6, // USART I/O Data Register
 | 
			
		||||
		UCSR0A: 0xc0, // USART Control and Status Register A
 | 
			
		||||
		UCSR0B: 0xc1, // USART Control and Status Register B
 | 
			
		||||
		UCSR0C: 0xc2, // USART Control and Status Register C
 | 
			
		||||
		UBRR0L: 0xc4, // USART Baud Rate Register  Bytes
 | 
			
		||||
		UBRR0H: 0xc4, // USART Baud Rate Register  Bytes
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	// Two Wire Serial Interface
 | 
			
		||||
	TWI = struct {
 | 
			
		||||
		TWAMR __reg
 | 
			
		||||
		TWBR  __reg
 | 
			
		||||
		TWCR  __reg
 | 
			
		||||
		TWSR  __reg
 | 
			
		||||
		TWDR  __reg
 | 
			
		||||
		TWAR  __reg
 | 
			
		||||
	}{
 | 
			
		||||
		TWAMR: 0xbd, // TWI (Slave) Address Mask Register
 | 
			
		||||
		TWBR:  0xb8, // TWI Bit Rate register
 | 
			
		||||
		TWCR:  0xbc, // TWI Control Register
 | 
			
		||||
		TWSR:  0xb9, // TWI Status Register
 | 
			
		||||
		TWDR:  0xbb, // TWI Data register
 | 
			
		||||
		TWAR:  0xba, // TWI (Slave) Address register
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	// Timer/Counter, 16-bit
 | 
			
		||||
	TC16 = struct {
 | 
			
		||||
		TIMSK1 __reg
 | 
			
		||||
		TIFR1  __reg
 | 
			
		||||
		TCCR1A __reg
 | 
			
		||||
		TCCR1B __reg
 | 
			
		||||
		TCCR1C __reg
 | 
			
		||||
		TCNT1L __reg
 | 
			
		||||
		TCNT1H __reg
 | 
			
		||||
		OCR1AL __reg
 | 
			
		||||
		OCR1AH __reg
 | 
			
		||||
		OCR1BL __reg
 | 
			
		||||
		OCR1BH __reg
 | 
			
		||||
		ICR1L  __reg
 | 
			
		||||
		ICR1H  __reg
 | 
			
		||||
	}{
 | 
			
		||||
		TIMSK1: 0x6f, // Timer/Counter Interrupt Mask Register
 | 
			
		||||
		TIFR1:  0x36, // Timer/Counter Interrupt Flag register
 | 
			
		||||
		TCCR1A: 0x80, // Timer/Counter1 Control Register A
 | 
			
		||||
		TCCR1B: 0x81, // Timer/Counter1 Control Register B
 | 
			
		||||
		TCCR1C: 0x82, // Timer/Counter1 Control Register C
 | 
			
		||||
		TCNT1L: 0x84, // Timer/Counter1  Bytes
 | 
			
		||||
		TCNT1H: 0x84, // Timer/Counter1  Bytes
 | 
			
		||||
		OCR1AL: 0x88, // Timer/Counter1 Output Compare Register  Bytes
 | 
			
		||||
		OCR1AH: 0x88, // Timer/Counter1 Output Compare Register  Bytes
 | 
			
		||||
		OCR1BL: 0x8a, // Timer/Counter1 Output Compare Register  Bytes
 | 
			
		||||
		OCR1BH: 0x8a, // Timer/Counter1 Output Compare Register  Bytes
 | 
			
		||||
		ICR1L:  0x86, // Timer/Counter1 Input Capture Register  Bytes
 | 
			
		||||
		ICR1H:  0x86, // Timer/Counter1 Input Capture Register  Bytes
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	// Timer/Counter, 8-bit Async
 | 
			
		||||
	TC8_ASYNC = struct {
 | 
			
		||||
		TIMSK2 __reg
 | 
			
		||||
		TIFR2  __reg
 | 
			
		||||
		TCCR2A __reg
 | 
			
		||||
		TCCR2B __reg
 | 
			
		||||
		TCNT2  __reg
 | 
			
		||||
		OCR2B  __reg
 | 
			
		||||
		OCR2A  __reg
 | 
			
		||||
		ASSR   __reg
 | 
			
		||||
	}{
 | 
			
		||||
		TIMSK2: 0x70, // Timer/Counter Interrupt Mask register
 | 
			
		||||
		TIFR2:  0x37, // Timer/Counter Interrupt Flag Register
 | 
			
		||||
		TCCR2A: 0xb0, // Timer/Counter2 Control Register A
 | 
			
		||||
		TCCR2B: 0xb1, // Timer/Counter2 Control Register B
 | 
			
		||||
		TCNT2:  0xb2, // Timer/Counter2
 | 
			
		||||
		OCR2B:  0xb4, // Timer/Counter2 Output Compare Register B
 | 
			
		||||
		OCR2A:  0xb3, // Timer/Counter2 Output Compare Register A
 | 
			
		||||
		ASSR:   0xb6, // Asynchronous Status Register
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	// Analog-to-Digital Converter
 | 
			
		||||
	ADC = struct {
 | 
			
		||||
		ADMUX  __reg
 | 
			
		||||
		ADCL   __reg
 | 
			
		||||
		ADCH   __reg
 | 
			
		||||
		ADCSRA __reg
 | 
			
		||||
		ADCSRB __reg
 | 
			
		||||
		DIDR0  __reg
 | 
			
		||||
	}{
 | 
			
		||||
		ADMUX:  0x7c, // The ADC multiplexer Selection Register
 | 
			
		||||
		ADCL:   0x78, // ADC Data Register  Bytes
 | 
			
		||||
		ADCH:   0x78, // ADC Data Register  Bytes
 | 
			
		||||
		ADCSRA: 0x7a, // The ADC Control and Status register A
 | 
			
		||||
		ADCSRB: 0x7b, // The ADC Control and Status register B
 | 
			
		||||
		DIDR0:  0x7e, // Digital Input Disable Register
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	// Analog Comparator
 | 
			
		||||
	AC = struct {
 | 
			
		||||
		ACSR  __reg
 | 
			
		||||
		DIDR1 __reg
 | 
			
		||||
	}{
 | 
			
		||||
		ACSR:  0x50, // Analog Comparator Control And Status Register
 | 
			
		||||
		DIDR1: 0x7f, // Digital Input Disable Register 1
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	// I/O Port
 | 
			
		||||
	PORT = struct {
 | 
			
		||||
		PORTB __reg
 | 
			
		||||
		DDRB  __reg
 | 
			
		||||
		PINB  __reg
 | 
			
		||||
		PORTC __reg
 | 
			
		||||
		DDRC  __reg
 | 
			
		||||
		PINC  __reg
 | 
			
		||||
		PORTD __reg
 | 
			
		||||
		DDRD  __reg
 | 
			
		||||
		PIND  __reg
 | 
			
		||||
	}{
 | 
			
		||||
		PORTB: 0x25, // Port B Data Register
 | 
			
		||||
		DDRB:  0x24, // Port B Data Direction Register
 | 
			
		||||
		PINB:  0x23, // Port B Input Pins
 | 
			
		||||
		PORTC: 0x28, // Port C Data Register
 | 
			
		||||
		DDRC:  0x27, // Port C Data Direction Register
 | 
			
		||||
		PINC:  0x26, // Port C Input Pins
 | 
			
		||||
		PORTD: 0x2b, // Port D Data Register
 | 
			
		||||
		DDRD:  0x2a, // Port D Data Direction Register
 | 
			
		||||
		PIND:  0x29, // Port D Input Pins
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	// Timer/Counter, 8-bit
 | 
			
		||||
	TC8 = struct {
 | 
			
		||||
		OCR0B  __reg
 | 
			
		||||
		OCR0A  __reg
 | 
			
		||||
		TCNT0  __reg
 | 
			
		||||
		TCCR0B __reg
 | 
			
		||||
		TCCR0A __reg
 | 
			
		||||
		TIMSK0 __reg
 | 
			
		||||
		TIFR0  __reg
 | 
			
		||||
	}{
 | 
			
		||||
		OCR0B:  0x48, // Timer/Counter0 Output Compare Register
 | 
			
		||||
		OCR0A:  0x47, // Timer/Counter0 Output Compare Register
 | 
			
		||||
		TCNT0:  0x46, // Timer/Counter0
 | 
			
		||||
		TCCR0B: 0x45, // Timer/Counter Control Register B
 | 
			
		||||
		TCCR0A: 0x44, // Timer/Counter  Control Register A
 | 
			
		||||
		TIMSK0: 0x6e, // Timer/Counter0 Interrupt Mask Register
 | 
			
		||||
		TIFR0:  0x35, // Timer/Counter0 Interrupt Flag register
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	// External Interrupts
 | 
			
		||||
	EXINT = struct {
 | 
			
		||||
		EICRA  __reg
 | 
			
		||||
		EIMSK  __reg
 | 
			
		||||
		EIFR   __reg
 | 
			
		||||
		PCICR  __reg
 | 
			
		||||
		PCMSK2 __reg
 | 
			
		||||
		PCMSK1 __reg
 | 
			
		||||
		PCMSK0 __reg
 | 
			
		||||
		PCIFR  __reg
 | 
			
		||||
	}{
 | 
			
		||||
		EICRA:  0x69, // External Interrupt Control Register
 | 
			
		||||
		EIMSK:  0x3d, // External Interrupt Mask Register
 | 
			
		||||
		EIFR:   0x3c, // External Interrupt Flag Register
 | 
			
		||||
		PCICR:  0x68, // Pin Change Interrupt Control Register
 | 
			
		||||
		PCMSK2: 0x6d, // Pin Change Mask Register 2
 | 
			
		||||
		PCMSK1: 0x6c, // Pin Change Mask Register 1
 | 
			
		||||
		PCMSK0: 0x6b, // Pin Change Mask Register 0
 | 
			
		||||
		PCIFR:  0x3b, // Pin Change Interrupt Flag Register
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	// Serial Peripheral Interface
 | 
			
		||||
	SPI = struct {
 | 
			
		||||
		SPDR __reg
 | 
			
		||||
		SPSR __reg
 | 
			
		||||
		SPCR __reg
 | 
			
		||||
	}{
 | 
			
		||||
		SPDR: 0x4e, // SPI Data Register
 | 
			
		||||
		SPSR: 0x4d, // SPI Status Register
 | 
			
		||||
		SPCR: 0x4c, // SPI Control Register
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	// Watchdog Timer
 | 
			
		||||
	WDT = struct {
 | 
			
		||||
		WDTCSR __reg
 | 
			
		||||
	}{
 | 
			
		||||
		WDTCSR: 0x60, // Watchdog Timer Control Register
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	// EEPROM
 | 
			
		||||
	EEPROM = struct {
 | 
			
		||||
		EEARL __reg
 | 
			
		||||
		EEARH __reg
 | 
			
		||||
		EEDR  __reg
 | 
			
		||||
		EECR  __reg
 | 
			
		||||
	}{
 | 
			
		||||
		EEARL: 0x41, // EEPROM Address Register  Bytes
 | 
			
		||||
		EEARH: 0x41, // EEPROM Address Register  Bytes
 | 
			
		||||
		EEDR:  0x40, // EEPROM Data Register
 | 
			
		||||
		EECR:  0x3f, // EEPROM Control Register
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	// CPU Registers
 | 
			
		||||
	CPU = struct {
 | 
			
		||||
		PRR    __reg
 | 
			
		||||
		OSCCAL __reg
 | 
			
		||||
		CLKPR  __reg
 | 
			
		||||
		SREG   __reg
 | 
			
		||||
		SPL    __reg
 | 
			
		||||
		SPH    __reg
 | 
			
		||||
		SPMCSR __reg
 | 
			
		||||
		MCUCR  __reg
 | 
			
		||||
		MCUSR  __reg
 | 
			
		||||
		SMCR   __reg
 | 
			
		||||
		GPIOR2 __reg
 | 
			
		||||
		GPIOR1 __reg
 | 
			
		||||
		GPIOR0 __reg
 | 
			
		||||
	}{
 | 
			
		||||
		PRR:    0x64, // Power Reduction Register
 | 
			
		||||
		OSCCAL: 0x66, // Oscillator Calibration Value
 | 
			
		||||
		CLKPR:  0x61, // Clock Prescale Register
 | 
			
		||||
		SREG:   0x5f, // Status Register
 | 
			
		||||
		SPL:    0x5d, // Stack Pointer
 | 
			
		||||
		SPH:    0x5d, // Stack Pointer
 | 
			
		||||
		SPMCSR: 0x57, // Store Program Memory Control and Status Register
 | 
			
		||||
		MCUCR:  0x55, // MCU Control Register
 | 
			
		||||
		MCUSR:  0x54, // MCU Status Register
 | 
			
		||||
		SMCR:   0x53, // Sleep Mode Control Register
 | 
			
		||||
		GPIOR2: 0x4b, // General Purpose I/O Register 2
 | 
			
		||||
		GPIOR1: 0x4a, // General Purpose I/O Register 1
 | 
			
		||||
		GPIOR0: 0x3e, // General Purpose I/O Register 0
 | 
			
		||||
	}
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
// Bitfields for FUSE: Fuses
 | 
			
		||||
const (
 | 
			
		||||
	// EXTENDED
 | 
			
		||||
	EXTENDED_BOOTSZ  = 0x6 // Select boot size
 | 
			
		||||
	EXTENDED_BOOTRST = 0x1 // Boot Reset vector Enabled
 | 
			
		||||
 | 
			
		||||
	// HIGH
 | 
			
		||||
	HIGH_RSTDISBL = 0x80 // Reset Disabled (Enable PC6 as i/o pin)
 | 
			
		||||
	HIGH_DWEN     = 0x40 // Debug Wire enable
 | 
			
		||||
	HIGH_SPIEN    = 0x20 // Serial program downloading (SPI) enabled
 | 
			
		||||
	HIGH_WDTON    = 0x10 // Watch-dog Timer always on
 | 
			
		||||
	HIGH_EESAVE   = 0x8  // Preserve EEPROM through the Chip Erase cycle
 | 
			
		||||
	HIGH_BODLEVEL = 0x7  // Brown-out Detector trigger level
 | 
			
		||||
 | 
			
		||||
	// LOW
 | 
			
		||||
	LOW_CKDIV8    = 0x80 // Divide clock by 8 internally
 | 
			
		||||
	LOW_CKOUT     = 0x40 // Clock output on PORTB0
 | 
			
		||||
	LOW_SUT_CKSEL = 0x3f // Select Clock Source
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
// Bitfields for LOCKBIT: Lockbits
 | 
			
		||||
const (
 | 
			
		||||
	// LOCKBIT
 | 
			
		||||
	LOCKBIT_LB   = 0x3  // Memory Lock
 | 
			
		||||
	LOCKBIT_BLB0 = 0xc  // Boot Loader Protection Mode
 | 
			
		||||
	LOCKBIT_BLB1 = 0x30 // Boot Loader Protection Mode
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
// Bitfields for USART: USART
 | 
			
		||||
const (
 | 
			
		||||
	// UCSR0A: USART Control and Status Register A
 | 
			
		||||
	UCSR0A_RXC0  = 0x80 // USART Receive Complete
 | 
			
		||||
	UCSR0A_TXC0  = 0x40 // USART Transmitt Complete
 | 
			
		||||
	UCSR0A_UDRE0 = 0x20 // USART Data Register Empty
 | 
			
		||||
	UCSR0A_FE0   = 0x10 // Framing Error
 | 
			
		||||
	UCSR0A_DOR0  = 0x8  // Data overRun
 | 
			
		||||
	UCSR0A_UPE0  = 0x4  // Parity Error
 | 
			
		||||
	UCSR0A_U2X0  = 0x2  // Double the USART transmission speed
 | 
			
		||||
	UCSR0A_MPCM0 = 0x1  // Multi-processor Communication Mode
 | 
			
		||||
 | 
			
		||||
	// UCSR0B: USART Control and Status Register B
 | 
			
		||||
	UCSR0B_RXCIE0 = 0x80 // RX Complete Interrupt Enable
 | 
			
		||||
	UCSR0B_TXCIE0 = 0x40 // TX Complete Interrupt Enable
 | 
			
		||||
	UCSR0B_UDRIE0 = 0x20 // USART Data register Empty Interrupt Enable
 | 
			
		||||
	UCSR0B_RXEN0  = 0x10 // Receiver Enable
 | 
			
		||||
	UCSR0B_TXEN0  = 0x8  // Transmitter Enable
 | 
			
		||||
	UCSR0B_UCSZ02 = 0x4  // Character Size
 | 
			
		||||
	UCSR0B_RXB80  = 0x2  // Receive Data Bit 8
 | 
			
		||||
	UCSR0B_TXB80  = 0x1  // Transmit Data Bit 8
 | 
			
		||||
 | 
			
		||||
	// UCSR0C: USART Control and Status Register C
 | 
			
		||||
	UCSR0C_UMSEL0 = 0xc0 // USART Mode Select
 | 
			
		||||
	UCSR0C_UPM0   = 0x30 // Parity Mode Bits
 | 
			
		||||
	UCSR0C_USBS0  = 0x8  // Stop Bit Select
 | 
			
		||||
	UCSR0C_UCSZ0  = 0x6  // Character Size
 | 
			
		||||
	UCSR0C_UCPOL0 = 0x1  // Clock Polarity
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
// Bitfields for TWI: Two Wire Serial Interface
 | 
			
		||||
const (
 | 
			
		||||
	// TWAMR: TWI (Slave) Address Mask Register
 | 
			
		||||
	TWAMR_TWAM = 0xfe
 | 
			
		||||
 | 
			
		||||
	// TWCR: TWI Control Register
 | 
			
		||||
	TWCR_TWINT = 0x80 // TWI Interrupt Flag
 | 
			
		||||
	TWCR_TWEA  = 0x40 // TWI Enable Acknowledge Bit
 | 
			
		||||
	TWCR_TWSTA = 0x20 // TWI Start Condition Bit
 | 
			
		||||
	TWCR_TWSTO = 0x10 // TWI Stop Condition Bit
 | 
			
		||||
	TWCR_TWWC  = 0x8  // TWI Write Collition Flag
 | 
			
		||||
	TWCR_TWEN  = 0x4  // TWI Enable Bit
 | 
			
		||||
	TWCR_TWIE  = 0x1  // TWI Interrupt Enable
 | 
			
		||||
 | 
			
		||||
	// TWSR: TWI Status Register
 | 
			
		||||
	TWSR_TWS  = 0xf8 // TWI Status
 | 
			
		||||
	TWSR_TWPS = 0x3  // TWI Prescaler
 | 
			
		||||
 | 
			
		||||
	// TWAR: TWI (Slave) Address register
 | 
			
		||||
	TWAR_TWA   = 0xfe // TWI (Slave) Address register Bits
 | 
			
		||||
	TWAR_TWGCE = 0x1  // TWI General Call Recognition Enable Bit
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
// Bitfields for TC16: Timer/Counter, 16-bit
 | 
			
		||||
const (
 | 
			
		||||
	// TIMSK1: Timer/Counter Interrupt Mask Register
 | 
			
		||||
	TIMSK1_ICIE1  = 0x20 // Timer/Counter1 Input Capture Interrupt Enable
 | 
			
		||||
	TIMSK1_OCIE1B = 0x4  // Timer/Counter1 Output CompareB Match Interrupt Enable
 | 
			
		||||
	TIMSK1_OCIE1A = 0x2  // Timer/Counter1 Output CompareA Match Interrupt Enable
 | 
			
		||||
	TIMSK1_TOIE1  = 0x1  // Timer/Counter1 Overflow Interrupt Enable
 | 
			
		||||
 | 
			
		||||
	// TIFR1: Timer/Counter Interrupt Flag register
 | 
			
		||||
	TIFR1_ICF1  = 0x20 // Input Capture Flag 1
 | 
			
		||||
	TIFR1_OCF1B = 0x4  // Output Compare Flag 1B
 | 
			
		||||
	TIFR1_OCF1A = 0x2  // Output Compare Flag 1A
 | 
			
		||||
	TIFR1_TOV1  = 0x1  // Timer/Counter1 Overflow Flag
 | 
			
		||||
 | 
			
		||||
	// TCCR1A: Timer/Counter1 Control Register A
 | 
			
		||||
	TCCR1A_COM1A = 0xc0 // Compare Output Mode 1A, bits
 | 
			
		||||
	TCCR1A_COM1B = 0x30 // Compare Output Mode 1B, bits
 | 
			
		||||
	TCCR1A_WGM1  = 0x3  // Waveform Generation Mode
 | 
			
		||||
 | 
			
		||||
	// TCCR1B: Timer/Counter1 Control Register B
 | 
			
		||||
	TCCR1B_ICNC1 = 0x80 // Input Capture 1 Noise Canceler
 | 
			
		||||
	TCCR1B_ICES1 = 0x40 // Input Capture 1 Edge Select
 | 
			
		||||
	TCCR1B_WGM1  = 0x18 // Waveform Generation Mode
 | 
			
		||||
	TCCR1B_CS1   = 0x7  // Prescaler source of Timer/Counter 1
 | 
			
		||||
 | 
			
		||||
	// TCCR1C: Timer/Counter1 Control Register C
 | 
			
		||||
	TCCR1C_FOC1A = 0x80
 | 
			
		||||
	TCCR1C_FOC1B = 0x40
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
// Bitfields for TC8_ASYNC: Timer/Counter, 8-bit Async
 | 
			
		||||
const (
 | 
			
		||||
	// TIMSK2: Timer/Counter Interrupt Mask register
 | 
			
		||||
	TIMSK2_OCIE2B = 0x4 // Timer/Counter2 Output Compare Match B Interrupt Enable
 | 
			
		||||
	TIMSK2_OCIE2A = 0x2 // Timer/Counter2 Output Compare Match A Interrupt Enable
 | 
			
		||||
	TIMSK2_TOIE2  = 0x1 // Timer/Counter2 Overflow Interrupt Enable
 | 
			
		||||
 | 
			
		||||
	// TIFR2: Timer/Counter Interrupt Flag Register
 | 
			
		||||
	TIFR2_OCF2B = 0x4 // Output Compare Flag 2B
 | 
			
		||||
	TIFR2_OCF2A = 0x2 // Output Compare Flag 2A
 | 
			
		||||
	TIFR2_TOV2  = 0x1 // Timer/Counter2 Overflow Flag
 | 
			
		||||
 | 
			
		||||
	// TCCR2A: Timer/Counter2 Control Register A
 | 
			
		||||
	TCCR2A_COM2A = 0xc0 // Compare Output Mode bits
 | 
			
		||||
	TCCR2A_COM2B = 0x30 // Compare Output Mode bits
 | 
			
		||||
	TCCR2A_WGM2  = 0x3  // Waveform Genration Mode
 | 
			
		||||
 | 
			
		||||
	// TCCR2B: Timer/Counter2 Control Register B
 | 
			
		||||
	TCCR2B_FOC2A = 0x80 // Force Output Compare A
 | 
			
		||||
	TCCR2B_FOC2B = 0x40 // Force Output Compare B
 | 
			
		||||
	TCCR2B_WGM22 = 0x8  // Waveform Generation Mode
 | 
			
		||||
	TCCR2B_CS2   = 0x7  // Clock Select bits
 | 
			
		||||
 | 
			
		||||
	// ASSR: Asynchronous Status Register
 | 
			
		||||
	ASSR_EXCLK   = 0x40 // Enable External Clock Input
 | 
			
		||||
	ASSR_AS2     = 0x20 // Asynchronous Timer/Counter2
 | 
			
		||||
	ASSR_TCN2UB  = 0x10 // Timer/Counter2 Update Busy
 | 
			
		||||
	ASSR_OCR2AUB = 0x8  // Output Compare Register2 Update Busy
 | 
			
		||||
	ASSR_OCR2BUB = 0x4  // Output Compare Register 2 Update Busy
 | 
			
		||||
	ASSR_TCR2AUB = 0x2  // Timer/Counter Control Register2 Update Busy
 | 
			
		||||
	ASSR_TCR2BUB = 0x1  // Timer/Counter Control Register2 Update Busy
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
// Bitfields for ADC: Analog-to-Digital Converter
 | 
			
		||||
const (
 | 
			
		||||
	// ADMUX: The ADC multiplexer Selection Register
 | 
			
		||||
	ADMUX_REFS  = 0xc0 // Reference Selection Bits
 | 
			
		||||
	ADMUX_ADLAR = 0x20 // Left Adjust Result
 | 
			
		||||
	ADMUX_MUX   = 0xf  // Analog Channel Selection Bits
 | 
			
		||||
 | 
			
		||||
	// ADCSRA: The ADC Control and Status register A
 | 
			
		||||
	ADCSRA_ADEN  = 0x80 // ADC Enable
 | 
			
		||||
	ADCSRA_ADSC  = 0x40 // ADC Start Conversion
 | 
			
		||||
	ADCSRA_ADATE = 0x20 // ADC  Auto Trigger Enable
 | 
			
		||||
	ADCSRA_ADIF  = 0x10 // ADC Interrupt Flag
 | 
			
		||||
	ADCSRA_ADIE  = 0x8  // ADC Interrupt Enable
 | 
			
		||||
	ADCSRA_ADPS  = 0x7  // ADC  Prescaler Select Bits
 | 
			
		||||
 | 
			
		||||
	// ADCSRB: The ADC Control and Status register B
 | 
			
		||||
	ADCSRB_ACME = 0x40
 | 
			
		||||
	ADCSRB_ADTS = 0x7 // ADC Auto Trigger Source bits
 | 
			
		||||
 | 
			
		||||
	// DIDR0: Digital Input Disable Register
 | 
			
		||||
	DIDR0_ADC5D = 0x20
 | 
			
		||||
	DIDR0_ADC4D = 0x10
 | 
			
		||||
	DIDR0_ADC3D = 0x8
 | 
			
		||||
	DIDR0_ADC2D = 0x4
 | 
			
		||||
	DIDR0_ADC1D = 0x2
 | 
			
		||||
	DIDR0_ADC0D = 0x1
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
// Bitfields for AC: Analog Comparator
 | 
			
		||||
const (
 | 
			
		||||
	// ACSR: Analog Comparator Control And Status Register
 | 
			
		||||
	ACSR_ACD  = 0x80 // Analog Comparator Disable
 | 
			
		||||
	ACSR_ACBG = 0x40 // Analog Comparator Bandgap Select
 | 
			
		||||
	ACSR_ACO  = 0x20 // Analog Compare Output
 | 
			
		||||
	ACSR_ACI  = 0x10 // Analog Comparator Interrupt Flag
 | 
			
		||||
	ACSR_ACIE = 0x8  // Analog Comparator Interrupt Enable
 | 
			
		||||
	ACSR_ACIC = 0x4  // Analog Comparator Input Capture Enable
 | 
			
		||||
	ACSR_ACIS = 0x3  // Analog Comparator Interrupt Mode Select bits
 | 
			
		||||
 | 
			
		||||
	// DIDR1: Digital Input Disable Register 1
 | 
			
		||||
	DIDR1_AIN1D = 0x2 // AIN1 Digital Input Disable
 | 
			
		||||
	DIDR1_AIN0D = 0x1 // AIN0 Digital Input Disable
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
// Bitfields for TC8: Timer/Counter, 8-bit
 | 
			
		||||
const (
 | 
			
		||||
	// TCCR0B: Timer/Counter Control Register B
 | 
			
		||||
	TCCR0B_FOC0A = 0x80 // Force Output Compare A
 | 
			
		||||
	TCCR0B_FOC0B = 0x40 // Force Output Compare B
 | 
			
		||||
	TCCR0B_WGM02 = 0x8
 | 
			
		||||
	TCCR0B_CS0   = 0x7 // Clock Select
 | 
			
		||||
 | 
			
		||||
	// TCCR0A: Timer/Counter  Control Register A
 | 
			
		||||
	TCCR0A_COM0A = 0xc0 // Compare Output Mode, Phase Correct PWM Mode
 | 
			
		||||
	TCCR0A_COM0B = 0x30 // Compare Output Mode, Fast PWm
 | 
			
		||||
	TCCR0A_WGM0  = 0x3  // Waveform Generation Mode
 | 
			
		||||
 | 
			
		||||
	// TIMSK0: Timer/Counter0 Interrupt Mask Register
 | 
			
		||||
	TIMSK0_OCIE0B = 0x4 // Timer/Counter0 Output Compare Match B Interrupt Enable
 | 
			
		||||
	TIMSK0_OCIE0A = 0x2 // Timer/Counter0 Output Compare Match A Interrupt Enable
 | 
			
		||||
	TIMSK0_TOIE0  = 0x1 // Timer/Counter0 Overflow Interrupt Enable
 | 
			
		||||
 | 
			
		||||
	// TIFR0: Timer/Counter0 Interrupt Flag register
 | 
			
		||||
	TIFR0_OCF0B = 0x4 // Timer/Counter0 Output Compare Flag 0B
 | 
			
		||||
	TIFR0_OCF0A = 0x2 // Timer/Counter0 Output Compare Flag 0A
 | 
			
		||||
	TIFR0_TOV0  = 0x1 // Timer/Counter0 Overflow Flag
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
// Bitfields for EXINT: External Interrupts
 | 
			
		||||
const (
 | 
			
		||||
	// EICRA: External Interrupt Control Register
 | 
			
		||||
	EICRA_ISC1 = 0xc // External Interrupt Sense Control 1 Bits
 | 
			
		||||
	EICRA_ISC0 = 0x3 // External Interrupt Sense Control 0 Bits
 | 
			
		||||
 | 
			
		||||
	// EIMSK: External Interrupt Mask Register
 | 
			
		||||
	EIMSK_INT = 0x3 // External Interrupt Request 1 Enable
 | 
			
		||||
 | 
			
		||||
	// EIFR: External Interrupt Flag Register
 | 
			
		||||
	EIFR_INTF = 0x3 // External Interrupt Flags
 | 
			
		||||
 | 
			
		||||
	// PCICR: Pin Change Interrupt Control Register
 | 
			
		||||
	PCICR_PCIE = 0x7 // Pin Change Interrupt Enables
 | 
			
		||||
 | 
			
		||||
	// PCMSK2: Pin Change Mask Register 2
 | 
			
		||||
	PCMSK2_PCINT = 0xff // Pin Change Enable Masks
 | 
			
		||||
 | 
			
		||||
	// PCMSK1: Pin Change Mask Register 1
 | 
			
		||||
	PCMSK1_PCINT = 0x7f // Pin Change Enable Masks
 | 
			
		||||
 | 
			
		||||
	// PCMSK0: Pin Change Mask Register 0
 | 
			
		||||
	PCMSK0_PCINT = 0xff // Pin Change Enable Masks
 | 
			
		||||
 | 
			
		||||
	// PCIFR: Pin Change Interrupt Flag Register
 | 
			
		||||
	PCIFR_PCIF = 0x7 // Pin Change Interrupt Flags
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
// Bitfields for SPI: Serial Peripheral Interface
 | 
			
		||||
const (
 | 
			
		||||
	// SPSR: SPI Status Register
 | 
			
		||||
	SPSR_SPIF  = 0x80 // SPI Interrupt Flag
 | 
			
		||||
	SPSR_WCOL  = 0x40 // Write Collision Flag
 | 
			
		||||
	SPSR_SPI2X = 0x1  // Double SPI Speed Bit
 | 
			
		||||
 | 
			
		||||
	// SPCR: SPI Control Register
 | 
			
		||||
	SPCR_SPIE = 0x80 // SPI Interrupt Enable
 | 
			
		||||
	SPCR_SPE  = 0x40 // SPI Enable
 | 
			
		||||
	SPCR_DORD = 0x20 // Data Order
 | 
			
		||||
	SPCR_MSTR = 0x10 // Master/Slave Select
 | 
			
		||||
	SPCR_CPOL = 0x8  // Clock polarity
 | 
			
		||||
	SPCR_CPHA = 0x4  // Clock Phase
 | 
			
		||||
	SPCR_SPR  = 0x3  // SPI Clock Rate Selects
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
// Bitfields for WDT: Watchdog Timer
 | 
			
		||||
const (
 | 
			
		||||
	// WDTCSR: Watchdog Timer Control Register
 | 
			
		||||
	WDTCSR_WDIF = 0x80 // Watchdog Timeout Interrupt Flag
 | 
			
		||||
	WDTCSR_WDIE = 0x40 // Watchdog Timeout Interrupt Enable
 | 
			
		||||
	WDTCSR_WDP  = 0x27 // Watchdog Timer Prescaler Bits
 | 
			
		||||
	WDTCSR_WDCE = 0x10 // Watchdog Change Enable
 | 
			
		||||
	WDTCSR_WDE  = 0x8  // Watch Dog Enable
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
// Bitfields for EEPROM: EEPROM
 | 
			
		||||
const (
 | 
			
		||||
	// EECR: EEPROM Control Register
 | 
			
		||||
	EECR_EEPM  = 0x30 // EEPROM Programming Mode Bits
 | 
			
		||||
	EECR_EERIE = 0x8  // EEPROM Ready Interrupt Enable
 | 
			
		||||
	EECR_EEMPE = 0x4  // EEPROM Master Write Enable
 | 
			
		||||
	EECR_EEPE  = 0x2  // EEPROM Write Enable
 | 
			
		||||
	EECR_EERE  = 0x1  // EEPROM Read Enable
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
// Bitfields for CPU: CPU Registers
 | 
			
		||||
const (
 | 
			
		||||
	// PRR: Power Reduction Register
 | 
			
		||||
	PRR_PRTWI    = 0x80 // Power Reduction TWI
 | 
			
		||||
	PRR_PRTIM2   = 0x40 // Power Reduction Timer/Counter2
 | 
			
		||||
	PRR_PRTIM0   = 0x20 // Power Reduction Timer/Counter0
 | 
			
		||||
	PRR_PRTIM1   = 0x8  // Power Reduction Timer/Counter1
 | 
			
		||||
	PRR_PRSPI    = 0x4  // Power Reduction Serial Peripheral Interface
 | 
			
		||||
	PRR_PRUSART0 = 0x2  // Power Reduction USART
 | 
			
		||||
	PRR_PRADC    = 0x1  // Power Reduction ADC
 | 
			
		||||
 | 
			
		||||
	// OSCCAL: Oscillator Calibration Value
 | 
			
		||||
	OSCCAL_OSCCAL = 0xff // Oscillator Calibration
 | 
			
		||||
 | 
			
		||||
	// CLKPR: Clock Prescale Register
 | 
			
		||||
	CLKPR_CLKPCE = 0x80 // Clock Prescaler Change Enable
 | 
			
		||||
	CLKPR_CLKPS  = 0xf  // Clock Prescaler Select Bits
 | 
			
		||||
 | 
			
		||||
	// SREG: Status Register
 | 
			
		||||
	SREG_I = 0x80 // Global Interrupt Enable
 | 
			
		||||
	SREG_T = 0x40 // Bit Copy Storage
 | 
			
		||||
	SREG_H = 0x20 // Half Carry Flag
 | 
			
		||||
	SREG_S = 0x10 // Sign Bit
 | 
			
		||||
	SREG_V = 0x8  // Two's Complement Overflow Flag
 | 
			
		||||
	SREG_N = 0x4  // Negative Flag
 | 
			
		||||
	SREG_Z = 0x2  // Zero Flag
 | 
			
		||||
	SREG_C = 0x1  // Carry Flag
 | 
			
		||||
 | 
			
		||||
	// SPMCSR: Store Program Memory Control and Status Register
 | 
			
		||||
	SPMCSR_SPMIE  = 0x80 // SPM Interrupt Enable
 | 
			
		||||
	SPMCSR_RWWSB  = 0x40 // Read-While-Write Section Busy
 | 
			
		||||
	SPMCSR_SIGRD  = 0x20 // Signature Row Read
 | 
			
		||||
	SPMCSR_RWWSRE = 0x10 // Read-While-Write section read enable
 | 
			
		||||
	SPMCSR_BLBSET = 0x8  // Boot Lock Bit Set
 | 
			
		||||
	SPMCSR_PGWRT  = 0x4  // Page Write
 | 
			
		||||
	SPMCSR_PGERS  = 0x2  // Page Erase
 | 
			
		||||
	SPMCSR_SPMEN  = 0x1  // Store Program Memory
 | 
			
		||||
 | 
			
		||||
	// MCUCR: MCU Control Register
 | 
			
		||||
	MCUCR_BODS  = 0x40 // BOD Sleep
 | 
			
		||||
	MCUCR_BODSE = 0x20 // BOD Sleep Enable
 | 
			
		||||
	MCUCR_PUD   = 0x10
 | 
			
		||||
	MCUCR_IVSEL = 0x2
 | 
			
		||||
	MCUCR_IVCE  = 0x1
 | 
			
		||||
 | 
			
		||||
	// MCUSR: MCU Status Register
 | 
			
		||||
	MCUSR_WDRF  = 0x8 // Watchdog Reset Flag
 | 
			
		||||
	MCUSR_BORF  = 0x4 // Brown-out Reset Flag
 | 
			
		||||
	MCUSR_EXTRF = 0x2 // External Reset Flag
 | 
			
		||||
	MCUSR_PORF  = 0x1 // Power-on reset flag
 | 
			
		||||
 | 
			
		||||
	// SMCR: Sleep Mode Control Register
 | 
			
		||||
	SMCR_SM = 0xe // Sleep Mode Select Bits
 | 
			
		||||
	SMCR_SE = 0x1 // Sleep Enable
 | 
			
		||||
)
 | 
			
		||||
							
								
								
									
										6
									
								
								src/device/avr/atmega168pa.ld
									
										
									
									
									
										Обычный файл
									
								
							
							
						
						
									
										6
									
								
								src/device/avr/atmega168pa.ld
									
										
									
									
									
										Обычный файл
									
								
							| 
						 | 
				
			
			@ -0,0 +1,6 @@
 | 
			
		|||
/* Automatically generated file. DO NOT EDIT. */
 | 
			
		||||
/* Generated by gen-device.py from ATmega168PA.atdf, see http://packs.download.atmel.com/ */
 | 
			
		||||
 | 
			
		||||
__flash_size = 0x4000;
 | 
			
		||||
__ram_size   = 0x400;
 | 
			
		||||
__num_isrs   = 26;
 | 
			
		||||
							
								
								
									
										685
									
								
								src/device/avr/atmega168pb.go
									
										
									
									
									
										Обычный файл
									
								
							
							
						
						
									
										685
									
								
								src/device/avr/atmega168pb.go
									
										
									
									
									
										Обычный файл
									
								
							| 
						 | 
				
			
			@ -0,0 +1,685 @@
 | 
			
		|||
// Automatically generated file. DO NOT EDIT.
 | 
			
		||||
// Generated by gen-device.py from ATmega168PB.atdf, see http://packs.download.atmel.com/
 | 
			
		||||
 | 
			
		||||
// +build avr,atmega168pb
 | 
			
		||||
 | 
			
		||||
// Device information for the ATmega168PB.
 | 
			
		||||
//
 | 
			
		||||
package avr
 | 
			
		||||
 | 
			
		||||
// Magic type name for the compiler.
 | 
			
		||||
type __reg uint8
 | 
			
		||||
 | 
			
		||||
// Export this magic type name.
 | 
			
		||||
type RegValue = __reg
 | 
			
		||||
 | 
			
		||||
// Some information about this device.
 | 
			
		||||
const (
 | 
			
		||||
	DEVICE = "ATmega168PB"
 | 
			
		||||
	ARCH   = "AVR8"
 | 
			
		||||
	FAMILY = "megaAVR"
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
// Interrupts
 | 
			
		||||
const (
 | 
			
		||||
	IRQ_RESET        = 0  // External Pin, Power-on Reset, Brown-out Reset and Watchdog Reset
 | 
			
		||||
	IRQ_INT0         = 1  // External Interrupt Request 0
 | 
			
		||||
	IRQ_INT1         = 2  // External Interrupt Request 1
 | 
			
		||||
	IRQ_PCINT0       = 3  // Pin Change Interrupt Request 0
 | 
			
		||||
	IRQ_PCINT1       = 4  // Pin Change Interrupt Request 0
 | 
			
		||||
	IRQ_PCINT2       = 5  // Pin Change Interrupt Request 1
 | 
			
		||||
	IRQ_WDT          = 6  // Watchdog Time-out Interrupt
 | 
			
		||||
	IRQ_TIMER2_COMPA = 7  // Timer/Counter2 Compare Match A
 | 
			
		||||
	IRQ_TIMER2_COMPB = 8  // Timer/Counter2 Compare Match A
 | 
			
		||||
	IRQ_TIMER2_OVF   = 9  // Timer/Counter2 Overflow
 | 
			
		||||
	IRQ_TIMER1_CAPT  = 10 // Timer/Counter1 Capture Event
 | 
			
		||||
	IRQ_TIMER1_COMPA = 11 // Timer/Counter1 Compare Match A
 | 
			
		||||
	IRQ_TIMER1_COMPB = 12 // Timer/Counter1 Compare Match B
 | 
			
		||||
	IRQ_TIMER1_OVF   = 13 // Timer/Counter1 Overflow
 | 
			
		||||
	IRQ_TIMER0_COMPA = 14 // TimerCounter0 Compare Match A
 | 
			
		||||
	IRQ_TIMER0_COMPB = 15 // TimerCounter0 Compare Match B
 | 
			
		||||
	IRQ_TIMER0_OVF   = 16 // Timer/Couner0 Overflow
 | 
			
		||||
	IRQ_SPI_STC      = 17 // SPI Serial Transfer Complete
 | 
			
		||||
	IRQ_USART_RX     = 18 // USART Rx Complete
 | 
			
		||||
	IRQ_USART_UDRE   = 19 // USART, Data Register Empty
 | 
			
		||||
	IRQ_USART_TX     = 20 // USART Tx Complete
 | 
			
		||||
	IRQ_ADC          = 21 // ADC Conversion Complete
 | 
			
		||||
	IRQ_EE_READY     = 22 // EEPROM Ready
 | 
			
		||||
	IRQ_ANALOG_COMP  = 23 // Analog Comparator
 | 
			
		||||
	IRQ_TWI          = 24 // Two-wire Serial Interface
 | 
			
		||||
	IRQ_SPM_Ready    = 25 // Store Program Memory Read
 | 
			
		||||
	IRQ_USART_START  = 26 // USART Start Edge Interrupt
 | 
			
		||||
	IRQ_max          = 26 // Highest interrupt number on this device.
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
// Peripherals
 | 
			
		||||
var (
 | 
			
		||||
	// Fuses
 | 
			
		||||
	FUSE = struct {
 | 
			
		||||
		EXTENDED __reg
 | 
			
		||||
		HIGH     __reg
 | 
			
		||||
		LOW      __reg
 | 
			
		||||
	}{
 | 
			
		||||
		EXTENDED: 0x2,
 | 
			
		||||
		HIGH:     0x1,
 | 
			
		||||
		LOW:      0x0,
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	// Lockbits
 | 
			
		||||
	LOCKBIT = struct {
 | 
			
		||||
		LOCKBIT __reg
 | 
			
		||||
	}{
 | 
			
		||||
		LOCKBIT: 0x0,
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	// Device ID
 | 
			
		||||
	DEVICEID = struct {
 | 
			
		||||
		DEVID0 __reg
 | 
			
		||||
		DEVID1 __reg
 | 
			
		||||
		DEVID2 __reg
 | 
			
		||||
		DEVID3 __reg
 | 
			
		||||
		DEVID4 __reg
 | 
			
		||||
		DEVID5 __reg
 | 
			
		||||
		DEVID6 __reg
 | 
			
		||||
		DEVID7 __reg
 | 
			
		||||
		DEVID8 __reg
 | 
			
		||||
	}{
 | 
			
		||||
		DEVID0: 0xf0,
 | 
			
		||||
		DEVID1: 0xf1,
 | 
			
		||||
		DEVID2: 0xf2,
 | 
			
		||||
		DEVID3: 0xf3,
 | 
			
		||||
		DEVID4: 0xf4,
 | 
			
		||||
		DEVID5: 0xf5,
 | 
			
		||||
		DEVID6: 0xf6,
 | 
			
		||||
		DEVID7: 0xf7,
 | 
			
		||||
		DEVID8: 0xf8,
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	// USART
 | 
			
		||||
	USART = struct {
 | 
			
		||||
		UDR0   __reg
 | 
			
		||||
		UCSR0A __reg
 | 
			
		||||
		UCSR0B __reg
 | 
			
		||||
		UCSR0C __reg
 | 
			
		||||
		UCSR0D __reg
 | 
			
		||||
		UBRR0L __reg
 | 
			
		||||
		UBRR0H __reg
 | 
			
		||||
	}{
 | 
			
		||||
		UDR0:   0xc6, // USART I/O Data Register
 | 
			
		||||
		UCSR0A: 0xc0, // USART Control and Status Register A
 | 
			
		||||
		UCSR0B: 0xc1, // USART Control and Status Register B
 | 
			
		||||
		UCSR0C: 0xc2, // USART Control and Status Register C
 | 
			
		||||
		UCSR0D: 0xc3, // USART Control and Status Register D
 | 
			
		||||
		UBRR0L: 0xc4, // USART Baud Rate Register Bytes
 | 
			
		||||
		UBRR0H: 0xc4, // USART Baud Rate Register Bytes
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	// Two Wire Serial Interface
 | 
			
		||||
	TWI = struct {
 | 
			
		||||
		TWAMR __reg
 | 
			
		||||
		TWBR  __reg
 | 
			
		||||
		TWCR  __reg
 | 
			
		||||
		TWSR  __reg
 | 
			
		||||
		TWDR  __reg
 | 
			
		||||
		TWAR  __reg
 | 
			
		||||
	}{
 | 
			
		||||
		TWAMR: 0xbd, // TWI (Slave) Address Mask Register
 | 
			
		||||
		TWBR:  0xb8, // TWI Bit Rate register
 | 
			
		||||
		TWCR:  0xbc, // TWI Control Register
 | 
			
		||||
		TWSR:  0xb9, // TWI Status Register
 | 
			
		||||
		TWDR:  0xbb, // TWI Data register
 | 
			
		||||
		TWAR:  0xba, // TWI (Slave) Address register
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	// Timer/Counter, 16-bit
 | 
			
		||||
	TC16 = struct {
 | 
			
		||||
		TIMSK1 __reg
 | 
			
		||||
		TIFR1  __reg
 | 
			
		||||
		TCCR1A __reg
 | 
			
		||||
		TCCR1B __reg
 | 
			
		||||
		TCCR1C __reg
 | 
			
		||||
		TCNT1L __reg
 | 
			
		||||
		TCNT1H __reg
 | 
			
		||||
		OCR1AL __reg
 | 
			
		||||
		OCR1AH __reg
 | 
			
		||||
		OCR1BL __reg
 | 
			
		||||
		OCR1BH __reg
 | 
			
		||||
		ICR1L  __reg
 | 
			
		||||
		ICR1H  __reg
 | 
			
		||||
	}{
 | 
			
		||||
		TIMSK1: 0x6f, // Timer/Counter Interrupt Mask Register
 | 
			
		||||
		TIFR1:  0x36, // Timer/Counter Interrupt Flag register
 | 
			
		||||
		TCCR1A: 0x80, // Timer/Counter1 Control Register A
 | 
			
		||||
		TCCR1B: 0x81, // Timer/Counter1 Control Register B
 | 
			
		||||
		TCCR1C: 0x82, // Timer/Counter1 Control Register C
 | 
			
		||||
		TCNT1L: 0x84, // Timer/Counter1  Bytes
 | 
			
		||||
		TCNT1H: 0x84, // Timer/Counter1  Bytes
 | 
			
		||||
		OCR1AL: 0x88, // Timer/Counter1 Output Compare Register  Bytes
 | 
			
		||||
		OCR1AH: 0x88, // Timer/Counter1 Output Compare Register  Bytes
 | 
			
		||||
		OCR1BL: 0x8a, // Timer/Counter1 Output Compare Register  Bytes
 | 
			
		||||
		OCR1BH: 0x8a, // Timer/Counter1 Output Compare Register  Bytes
 | 
			
		||||
		ICR1L:  0x86, // Timer/Counter1 Input Capture Register  Bytes
 | 
			
		||||
		ICR1H:  0x86, // Timer/Counter1 Input Capture Register  Bytes
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	// Timer/Counter, 8-bit Async
 | 
			
		||||
	TC8_ASYNC = struct {
 | 
			
		||||
		TIMSK2 __reg
 | 
			
		||||
		TIFR2  __reg
 | 
			
		||||
		TCCR2A __reg
 | 
			
		||||
		TCCR2B __reg
 | 
			
		||||
		TCNT2  __reg
 | 
			
		||||
		OCR2B  __reg
 | 
			
		||||
		OCR2A  __reg
 | 
			
		||||
		ASSR   __reg
 | 
			
		||||
	}{
 | 
			
		||||
		TIMSK2: 0x70, // Timer/Counter Interrupt Mask register
 | 
			
		||||
		TIFR2:  0x37, // Timer/Counter Interrupt Flag Register
 | 
			
		||||
		TCCR2A: 0xb0, // Timer/Counter2 Control Register A
 | 
			
		||||
		TCCR2B: 0xb1, // Timer/Counter2 Control Register B
 | 
			
		||||
		TCNT2:  0xb2, // Timer/Counter2
 | 
			
		||||
		OCR2B:  0xb4, // Timer/Counter2 Output Compare Register B
 | 
			
		||||
		OCR2A:  0xb3, // Timer/Counter2 Output Compare Register A
 | 
			
		||||
		ASSR:   0xb6, // Asynchronous Status Register
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	// Analog-to-Digital Converter
 | 
			
		||||
	ADC = struct {
 | 
			
		||||
		ADMUX  __reg
 | 
			
		||||
		ADCL   __reg
 | 
			
		||||
		ADCH   __reg
 | 
			
		||||
		ADCSRA __reg
 | 
			
		||||
		ADCSRB __reg
 | 
			
		||||
		DIDR0  __reg
 | 
			
		||||
	}{
 | 
			
		||||
		ADMUX:  0x7c, // The ADC multiplexer Selection Register
 | 
			
		||||
		ADCL:   0x78, // ADC Data Register  Bytes
 | 
			
		||||
		ADCH:   0x78, // ADC Data Register  Bytes
 | 
			
		||||
		ADCSRA: 0x7a, // The ADC Control and Status register A
 | 
			
		||||
		ADCSRB: 0x7b, // The ADC Control and Status register B
 | 
			
		||||
		DIDR0:  0x7e, // Digital Input Disable Register
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	// Analog Comparator
 | 
			
		||||
	AC = struct {
 | 
			
		||||
		ACSR  __reg
 | 
			
		||||
		DIDR1 __reg
 | 
			
		||||
		ACSRB __reg
 | 
			
		||||
	}{
 | 
			
		||||
		ACSR:  0x50, // Analog Comparator Control And Status Register
 | 
			
		||||
		DIDR1: 0x7f, // Digital Input Disable Register 1
 | 
			
		||||
		ACSRB: 0x4f, // Analog Comparator Status Register B
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	// I/O Port
 | 
			
		||||
	PORT = struct {
 | 
			
		||||
		PORTB __reg
 | 
			
		||||
		DDRB  __reg
 | 
			
		||||
		PINB  __reg
 | 
			
		||||
		PORTC __reg
 | 
			
		||||
		DDRC  __reg
 | 
			
		||||
		PINC  __reg
 | 
			
		||||
		PORTD __reg
 | 
			
		||||
		DDRD  __reg
 | 
			
		||||
		PIND  __reg
 | 
			
		||||
		PORTE __reg
 | 
			
		||||
		DDRE  __reg
 | 
			
		||||
		PINE  __reg
 | 
			
		||||
	}{
 | 
			
		||||
		PORTB: 0x25, // Port B Data Register
 | 
			
		||||
		DDRB:  0x24, // Port B Data Direction Register
 | 
			
		||||
		PINB:  0x23, // Port B Input Pins
 | 
			
		||||
		PORTC: 0x28, // Port C Data Register
 | 
			
		||||
		DDRC:  0x27, // Port C Data Direction Register
 | 
			
		||||
		PINC:  0x26, // Port C Input Pins
 | 
			
		||||
		PORTD: 0x2b, // Port D Data Register
 | 
			
		||||
		DDRD:  0x2a, // Port D Data Direction Register
 | 
			
		||||
		PIND:  0x29, // Port D Input Pins
 | 
			
		||||
		PORTE: 0x2e, // Port E Data Register
 | 
			
		||||
		DDRE:  0x2d, // Port E Data Direction Register
 | 
			
		||||
		PINE:  0x2c, // Port E Input Pins
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	// Timer/Counter, 8-bit
 | 
			
		||||
	TC8 = struct {
 | 
			
		||||
		OCR0B  __reg
 | 
			
		||||
		OCR0A  __reg
 | 
			
		||||
		TCNT0  __reg
 | 
			
		||||
		TCCR0B __reg
 | 
			
		||||
		TCCR0A __reg
 | 
			
		||||
		TIMSK0 __reg
 | 
			
		||||
		TIFR0  __reg
 | 
			
		||||
	}{
 | 
			
		||||
		OCR0B:  0x48, // Timer/Counter0 Output Compare Register
 | 
			
		||||
		OCR0A:  0x47, // Timer/Counter0 Output Compare Register
 | 
			
		||||
		TCNT0:  0x46, // Timer/Counter0
 | 
			
		||||
		TCCR0B: 0x45, // Timer/Counter Control Register B
 | 
			
		||||
		TCCR0A: 0x44, // Timer/Counter  Control Register A
 | 
			
		||||
		TIMSK0: 0x6e, // Timer/Counter0 Interrupt Mask Register
 | 
			
		||||
		TIFR0:  0x35, // Timer/Counter0 Interrupt Flag register
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	// External Interrupts
 | 
			
		||||
	EXINT = struct {
 | 
			
		||||
		EICRA  __reg
 | 
			
		||||
		EIMSK  __reg
 | 
			
		||||
		EIFR   __reg
 | 
			
		||||
		PCICR  __reg
 | 
			
		||||
		PCMSK2 __reg
 | 
			
		||||
		PCMSK1 __reg
 | 
			
		||||
		PCMSK0 __reg
 | 
			
		||||
		PCIFR  __reg
 | 
			
		||||
	}{
 | 
			
		||||
		EICRA:  0x69, // External Interrupt Control Register
 | 
			
		||||
		EIMSK:  0x3d, // External Interrupt Mask Register
 | 
			
		||||
		EIFR:   0x3c, // External Interrupt Flag Register
 | 
			
		||||
		PCICR:  0x68, // Pin Change Interrupt Control Register
 | 
			
		||||
		PCMSK2: 0x6d, // Pin Change Mask Register 2
 | 
			
		||||
		PCMSK1: 0x6c, // Pin Change Mask Register 1
 | 
			
		||||
		PCMSK0: 0x6b, // Pin Change Mask Register 0
 | 
			
		||||
		PCIFR:  0x3b, // Pin Change Interrupt Flag Register
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	// Serial Peripheral Interface
 | 
			
		||||
	SPI = struct {
 | 
			
		||||
		SPDR __reg
 | 
			
		||||
		SPSR __reg
 | 
			
		||||
		SPCR __reg
 | 
			
		||||
	}{
 | 
			
		||||
		SPDR: 0x4e, // SPI Data Register
 | 
			
		||||
		SPSR: 0x4d, // SPI Status Register
 | 
			
		||||
		SPCR: 0x4c, // SPI Control Register
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	// Watchdog Timer
 | 
			
		||||
	WDT = struct {
 | 
			
		||||
		WDTCSR __reg
 | 
			
		||||
	}{
 | 
			
		||||
		WDTCSR: 0x60, // Watchdog Timer Control Register
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	// EEPROM
 | 
			
		||||
	EEPROM = struct {
 | 
			
		||||
		EEARL __reg
 | 
			
		||||
		EEARH __reg
 | 
			
		||||
		EEDR  __reg
 | 
			
		||||
		EECR  __reg
 | 
			
		||||
	}{
 | 
			
		||||
		EEARL: 0x41, // EEPROM Address Register  Bytes
 | 
			
		||||
		EEARH: 0x41, // EEPROM Address Register  Bytes
 | 
			
		||||
		EEDR:  0x40, // EEPROM Data Register
 | 
			
		||||
		EECR:  0x3f, // EEPROM Control Register
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	// CPU Registers
 | 
			
		||||
	CPU = struct {
 | 
			
		||||
		PRR    __reg
 | 
			
		||||
		OSCCAL __reg
 | 
			
		||||
		CLKPR  __reg
 | 
			
		||||
		SREG   __reg
 | 
			
		||||
		SPL    __reg
 | 
			
		||||
		SPH    __reg
 | 
			
		||||
		SPMCSR __reg
 | 
			
		||||
		MCUCR  __reg
 | 
			
		||||
		MCUSR  __reg
 | 
			
		||||
		SMCR   __reg
 | 
			
		||||
		GPIOR2 __reg
 | 
			
		||||
		GPIOR1 __reg
 | 
			
		||||
		GPIOR0 __reg
 | 
			
		||||
	}{
 | 
			
		||||
		PRR:    0x64, // Power Reduction Register
 | 
			
		||||
		OSCCAL: 0x66, // Oscillator Calibration Value
 | 
			
		||||
		CLKPR:  0x61, // Clock Prescale Register
 | 
			
		||||
		SREG:   0x5f, // Status Register
 | 
			
		||||
		SPL:    0x5d, // Stack Pointer
 | 
			
		||||
		SPH:    0x5d, // Stack Pointer
 | 
			
		||||
		SPMCSR: 0x57, // Store Program Memory Control and Status Register
 | 
			
		||||
		MCUCR:  0x55, // MCU Control Register
 | 
			
		||||
		MCUSR:  0x54, // MCU Status Register
 | 
			
		||||
		SMCR:   0x53, // Sleep Mode Control Register
 | 
			
		||||
		GPIOR2: 0x4b, // General Purpose I/O Register 2
 | 
			
		||||
		GPIOR1: 0x4a, // General Purpose I/O Register 1
 | 
			
		||||
		GPIOR0: 0x3e, // General Purpose I/O Register 0
 | 
			
		||||
	}
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
// Bitfields for FUSE: Fuses
 | 
			
		||||
const (
 | 
			
		||||
	// EXTENDED
 | 
			
		||||
	EXTENDED_BOOTSZ  = 0x6 // Select boot size
 | 
			
		||||
	EXTENDED_BOOTRST = 0x1 // Boot Reset vector Enabled
 | 
			
		||||
 | 
			
		||||
	// HIGH
 | 
			
		||||
	HIGH_RSTDISBL = 0x80 // Reset Disabled (Enable PC6 as i/o pin)
 | 
			
		||||
	HIGH_DWEN     = 0x40 // Debug Wire enable
 | 
			
		||||
	HIGH_SPIEN    = 0x20 // Serial program downloading (SPI) enabled
 | 
			
		||||
	HIGH_WDTON    = 0x10 // Watch-dog Timer always on
 | 
			
		||||
	HIGH_EESAVE   = 0x8  // Preserve EEPROM through the Chip Erase cycle
 | 
			
		||||
	HIGH_BODLEVEL = 0x7  // Brown-out Detector trigger level
 | 
			
		||||
 | 
			
		||||
	// LOW
 | 
			
		||||
	LOW_CKDIV8    = 0x80 // Divide clock by 8 internally
 | 
			
		||||
	LOW_CKOUT     = 0x40 // Clock output on PORTB0
 | 
			
		||||
	LOW_SUT_CKSEL = 0x3f // Select Clock Source
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
// Bitfields for LOCKBIT: Lockbits
 | 
			
		||||
const (
 | 
			
		||||
	// LOCKBIT
 | 
			
		||||
	LOCKBIT_LB   = 0x3  // Memory Lock
 | 
			
		||||
	LOCKBIT_BLB0 = 0xc  // Boot Loader Protection Mode
 | 
			
		||||
	LOCKBIT_BLB1 = 0x30 // Boot Loader Protection Mode
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
// Bitfields for USART: USART
 | 
			
		||||
const (
 | 
			
		||||
	// UCSR0A: USART Control and Status Register A
 | 
			
		||||
	UCSR0A_RXC0  = 0x80 // USART Receive Complete
 | 
			
		||||
	UCSR0A_TXC0  = 0x40 // USART Transmitt Complete
 | 
			
		||||
	UCSR0A_UDRE0 = 0x20 // USART Data Register Empty
 | 
			
		||||
	UCSR0A_FE0   = 0x10 // Framing Error
 | 
			
		||||
	UCSR0A_DOR0  = 0x8  // Data overRun
 | 
			
		||||
	UCSR0A_UPE0  = 0x4  // Parity Error
 | 
			
		||||
	UCSR0A_U2X0  = 0x2  // Double the USART transmission speed
 | 
			
		||||
	UCSR0A_MPCM0 = 0x1  // Multi-processor Communication Mode
 | 
			
		||||
 | 
			
		||||
	// UCSR0B: USART Control and Status Register B
 | 
			
		||||
	UCSR0B_RXCIE0 = 0x80 // RX Complete Interrupt Enable
 | 
			
		||||
	UCSR0B_TXCIE0 = 0x40 // TX Complete Interrupt Enable
 | 
			
		||||
	UCSR0B_UDRIE0 = 0x20 // USART Data register Empty Interrupt Enable
 | 
			
		||||
	UCSR0B_RXEN0  = 0x10 // Receiver Enable
 | 
			
		||||
	UCSR0B_TXEN0  = 0x8  // Transmitter Enable
 | 
			
		||||
	UCSR0B_UCSZ02 = 0x4  // Character Size
 | 
			
		||||
	UCSR0B_RXB80  = 0x2  // Receive Data Bit 8
 | 
			
		||||
	UCSR0B_TXB80  = 0x1  // Transmit Data Bit 8
 | 
			
		||||
 | 
			
		||||
	// UCSR0C: USART Control and Status Register C
 | 
			
		||||
	UCSR0C_UMSEL0 = 0xc0 // USART Mode Select
 | 
			
		||||
	UCSR0C_UPM0   = 0x30 // Parity Mode Bits
 | 
			
		||||
	UCSR0C_USBS0  = 0x8  // Stop Bit Select
 | 
			
		||||
	UCSR0C_UCSZ0  = 0x6  // Character Size
 | 
			
		||||
	UCSR0C_UCPOL0 = 0x1  // Clock Polarity
 | 
			
		||||
 | 
			
		||||
	// UCSR0D: USART Control and Status Register D
 | 
			
		||||
	UCSR0D_RXSIE = 0x80 // RX Start Interrupt Enable
 | 
			
		||||
	UCSR0D_RXS   = 0x40 // RX Start
 | 
			
		||||
	UCSR0D_SFDE  = 0x20 // Start Frame Detection Enable
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
// Bitfields for TWI: Two Wire Serial Interface
 | 
			
		||||
const (
 | 
			
		||||
	// TWAMR: TWI (Slave) Address Mask Register
 | 
			
		||||
	TWAMR_TWAM = 0xfe
 | 
			
		||||
 | 
			
		||||
	// TWCR: TWI Control Register
 | 
			
		||||
	TWCR_TWINT = 0x80 // TWI Interrupt Flag
 | 
			
		||||
	TWCR_TWEA  = 0x40 // TWI Enable Acknowledge Bit
 | 
			
		||||
	TWCR_TWSTA = 0x20 // TWI Start Condition Bit
 | 
			
		||||
	TWCR_TWSTO = 0x10 // TWI Stop Condition Bit
 | 
			
		||||
	TWCR_TWWC  = 0x8  // TWI Write Collition Flag
 | 
			
		||||
	TWCR_TWEN  = 0x4  // TWI Enable Bit
 | 
			
		||||
	TWCR_TWIE  = 0x1  // TWI Interrupt Enable
 | 
			
		||||
 | 
			
		||||
	// TWSR: TWI Status Register
 | 
			
		||||
	TWSR_TWS  = 0xf8 // TWI Status
 | 
			
		||||
	TWSR_TWPS = 0x3  // TWI Prescaler
 | 
			
		||||
 | 
			
		||||
	// TWAR: TWI (Slave) Address register
 | 
			
		||||
	TWAR_TWA   = 0xfe // TWI (Slave) Address register Bits
 | 
			
		||||
	TWAR_TWGCE = 0x1  // TWI General Call Recognition Enable Bit
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
// Bitfields for TC16: Timer/Counter, 16-bit
 | 
			
		||||
const (
 | 
			
		||||
	// TIMSK1: Timer/Counter Interrupt Mask Register
 | 
			
		||||
	TIMSK1_ICIE1  = 0x20 // Timer/Counter1 Input Capture Interrupt Enable
 | 
			
		||||
	TIMSK1_OCIE1B = 0x4  // Timer/Counter1 Output CompareB Match Interrupt Enable
 | 
			
		||||
	TIMSK1_OCIE1A = 0x2  // Timer/Counter1 Output CompareA Match Interrupt Enable
 | 
			
		||||
	TIMSK1_TOIE1  = 0x1  // Timer/Counter1 Overflow Interrupt Enable
 | 
			
		||||
 | 
			
		||||
	// TIFR1: Timer/Counter Interrupt Flag register
 | 
			
		||||
	TIFR1_ICF1  = 0x20 // Input Capture Flag 1
 | 
			
		||||
	TIFR1_OCF1B = 0x4  // Output Compare Flag 1B
 | 
			
		||||
	TIFR1_OCF1A = 0x2  // Output Compare Flag 1A
 | 
			
		||||
	TIFR1_TOV1  = 0x1  // Timer/Counter1 Overflow Flag
 | 
			
		||||
 | 
			
		||||
	// TCCR1A: Timer/Counter1 Control Register A
 | 
			
		||||
	TCCR1A_COM1A = 0xc0 // Compare Output Mode 1A, bits
 | 
			
		||||
	TCCR1A_COM1B = 0x30 // Compare Output Mode 1B, bits
 | 
			
		||||
	TCCR1A_WGM1  = 0x3  // Waveform Generation Mode
 | 
			
		||||
 | 
			
		||||
	// TCCR1B: Timer/Counter1 Control Register B
 | 
			
		||||
	TCCR1B_ICNC1 = 0x80 // Input Capture 1 Noise Canceler
 | 
			
		||||
	TCCR1B_ICES1 = 0x40 // Input Capture 1 Edge Select
 | 
			
		||||
	TCCR1B_WGM1  = 0x18 // Waveform Generation Mode
 | 
			
		||||
	TCCR1B_CS1   = 0x7  // Prescaler source of Timer/Counter 1
 | 
			
		||||
 | 
			
		||||
	// TCCR1C: Timer/Counter1 Control Register C
 | 
			
		||||
	TCCR1C_FOC1A = 0x80
 | 
			
		||||
	TCCR1C_FOC1B = 0x40
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
// Bitfields for TC8_ASYNC: Timer/Counter, 8-bit Async
 | 
			
		||||
const (
 | 
			
		||||
	// TIMSK2: Timer/Counter Interrupt Mask register
 | 
			
		||||
	TIMSK2_OCIE2B = 0x4 // Timer/Counter2 Output Compare Match B Interrupt Enable
 | 
			
		||||
	TIMSK2_OCIE2A = 0x2 // Timer/Counter2 Output Compare Match A Interrupt Enable
 | 
			
		||||
	TIMSK2_TOIE2  = 0x1 // Timer/Counter2 Overflow Interrupt Enable
 | 
			
		||||
 | 
			
		||||
	// TIFR2: Timer/Counter Interrupt Flag Register
 | 
			
		||||
	TIFR2_OCF2B = 0x4 // Output Compare Flag 2B
 | 
			
		||||
	TIFR2_OCF2A = 0x2 // Output Compare Flag 2A
 | 
			
		||||
	TIFR2_TOV2  = 0x1 // Timer/Counter2 Overflow Flag
 | 
			
		||||
 | 
			
		||||
	// TCCR2A: Timer/Counter2 Control Register A
 | 
			
		||||
	TCCR2A_COM2A = 0xc0 // Compare Output Mode bits
 | 
			
		||||
	TCCR2A_COM2B = 0x30 // Compare Output Mode bits
 | 
			
		||||
	TCCR2A_WGM2  = 0x3  // Waveform Genration Mode
 | 
			
		||||
 | 
			
		||||
	// TCCR2B: Timer/Counter2 Control Register B
 | 
			
		||||
	TCCR2B_FOC2A = 0x80 // Force Output Compare A
 | 
			
		||||
	TCCR2B_FOC2B = 0x40 // Force Output Compare B
 | 
			
		||||
	TCCR2B_WGM22 = 0x8  // Waveform Generation Mode
 | 
			
		||||
	TCCR2B_CS2   = 0x7  // Clock Select bits
 | 
			
		||||
 | 
			
		||||
	// ASSR: Asynchronous Status Register
 | 
			
		||||
	ASSR_EXCLK   = 0x40 // Enable External Clock Input
 | 
			
		||||
	ASSR_AS2     = 0x20 // Asynchronous Timer/Counter2
 | 
			
		||||
	ASSR_TCN2UB  = 0x10 // Timer/Counter2 Update Busy
 | 
			
		||||
	ASSR_OCR2AUB = 0x8  // Output Compare Register2 Update Busy
 | 
			
		||||
	ASSR_OCR2BUB = 0x4  // Output Compare Register 2 Update Busy
 | 
			
		||||
	ASSR_TCR2AUB = 0x2  // Timer/Counter Control Register2 Update Busy
 | 
			
		||||
	ASSR_TCR2BUB = 0x1  // Timer/Counter Control Register2 Update Busy
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
// Bitfields for ADC: Analog-to-Digital Converter
 | 
			
		||||
const (
 | 
			
		||||
	// ADMUX: The ADC multiplexer Selection Register
 | 
			
		||||
	ADMUX_REFS  = 0xc0 // Reference Selection Bits
 | 
			
		||||
	ADMUX_ADLAR = 0x20 // Left Adjust Result
 | 
			
		||||
	ADMUX_MUX   = 0xf  // Analog Channel Selection Bits
 | 
			
		||||
 | 
			
		||||
	// ADCSRA: The ADC Control and Status register A
 | 
			
		||||
	ADCSRA_ADEN  = 0x80 // ADC Enable
 | 
			
		||||
	ADCSRA_ADSC  = 0x40 // ADC Start Conversion
 | 
			
		||||
	ADCSRA_ADATE = 0x20 // ADC  Auto Trigger Enable
 | 
			
		||||
	ADCSRA_ADIF  = 0x10 // ADC Interrupt Flag
 | 
			
		||||
	ADCSRA_ADIE  = 0x8  // ADC Interrupt Enable
 | 
			
		||||
	ADCSRA_ADPS  = 0x7  // ADC  Prescaler Select Bits
 | 
			
		||||
 | 
			
		||||
	// ADCSRB: The ADC Control and Status register B
 | 
			
		||||
	ADCSRB_ACME = 0x40
 | 
			
		||||
	ADCSRB_ADTS = 0x7 // ADC Auto Trigger Source bits
 | 
			
		||||
 | 
			
		||||
	// DIDR0: Digital Input Disable Register
 | 
			
		||||
	DIDR0_ADC5D = 0x20
 | 
			
		||||
	DIDR0_ADC4D = 0x10
 | 
			
		||||
	DIDR0_ADC3D = 0x8
 | 
			
		||||
	DIDR0_ADC2D = 0x4
 | 
			
		||||
	DIDR0_ADC1D = 0x2
 | 
			
		||||
	DIDR0_ADC0D = 0x1
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
// Bitfields for AC: Analog Comparator
 | 
			
		||||
const (
 | 
			
		||||
	// ACSR: Analog Comparator Control And Status Register
 | 
			
		||||
	ACSR_ACD  = 0x80 // Analog Comparator Disable
 | 
			
		||||
	ACSR_ACBG = 0x40 // Analog Comparator Bandgap Select
 | 
			
		||||
	ACSR_ACO  = 0x20 // Analog Compare Output
 | 
			
		||||
	ACSR_ACI  = 0x10 // Analog Comparator Interrupt Flag
 | 
			
		||||
	ACSR_ACIE = 0x8  // Analog Comparator Interrupt Enable
 | 
			
		||||
	ACSR_ACIC = 0x4  // Analog Comparator Input Capture Enable
 | 
			
		||||
	ACSR_ACIS = 0x3  // Analog Comparator Interrupt Mode Select bits
 | 
			
		||||
 | 
			
		||||
	// DIDR1: Digital Input Disable Register 1
 | 
			
		||||
	DIDR1_AIN1D = 0x2 // AIN1 Digital Input Disable
 | 
			
		||||
	DIDR1_AIN0D = 0x1 // AIN0 Digital Input Disable
 | 
			
		||||
 | 
			
		||||
	// ACSRB: Analog Comparator Status Register B
 | 
			
		||||
	ACSRB_ACOE = 0x1 // Analog Comparator Output Enable
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
// Bitfields for TC8: Timer/Counter, 8-bit
 | 
			
		||||
const (
 | 
			
		||||
	// TCCR0B: Timer/Counter Control Register B
 | 
			
		||||
	TCCR0B_FOC0A = 0x80 // Force Output Compare A
 | 
			
		||||
	TCCR0B_FOC0B = 0x40 // Force Output Compare B
 | 
			
		||||
	TCCR0B_WGM02 = 0x8
 | 
			
		||||
	TCCR0B_CS0   = 0x7 // Clock Select
 | 
			
		||||
 | 
			
		||||
	// TCCR0A: Timer/Counter  Control Register A
 | 
			
		||||
	TCCR0A_COM0A = 0xc0 // Compare Output Mode, Phase Correct PWM Mode
 | 
			
		||||
	TCCR0A_COM0B = 0x30 // Compare Output Mode, Fast PWm
 | 
			
		||||
	TCCR0A_WGM0  = 0x3  // Waveform Generation Mode
 | 
			
		||||
 | 
			
		||||
	// TIMSK0: Timer/Counter0 Interrupt Mask Register
 | 
			
		||||
	TIMSK0_OCIE0B = 0x4 // Timer/Counter0 Output Compare Match B Interrupt Enable
 | 
			
		||||
	TIMSK0_OCIE0A = 0x2 // Timer/Counter0 Output Compare Match A Interrupt Enable
 | 
			
		||||
	TIMSK0_TOIE0  = 0x1 // Timer/Counter0 Overflow Interrupt Enable
 | 
			
		||||
 | 
			
		||||
	// TIFR0: Timer/Counter0 Interrupt Flag register
 | 
			
		||||
	TIFR0_OCF0B = 0x4 // Timer/Counter0 Output Compare Flag 0B
 | 
			
		||||
	TIFR0_OCF0A = 0x2 // Timer/Counter0 Output Compare Flag 0A
 | 
			
		||||
	TIFR0_TOV0  = 0x1 // Timer/Counter0 Overflow Flag
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
// Bitfields for EXINT: External Interrupts
 | 
			
		||||
const (
 | 
			
		||||
	// EICRA: External Interrupt Control Register
 | 
			
		||||
	EICRA_ISC1 = 0xc // External Interrupt Sense Control 1 Bits
 | 
			
		||||
	EICRA_ISC0 = 0x3 // External Interrupt Sense Control 0 Bits
 | 
			
		||||
 | 
			
		||||
	// EIMSK: External Interrupt Mask Register
 | 
			
		||||
	EIMSK_INT = 0x3 // External Interrupt Request 1 Enable
 | 
			
		||||
 | 
			
		||||
	// EIFR: External Interrupt Flag Register
 | 
			
		||||
	EIFR_INTF = 0x3 // External Interrupt Flags
 | 
			
		||||
 | 
			
		||||
	// PCICR: Pin Change Interrupt Control Register
 | 
			
		||||
	PCICR_PCIE = 0x7 // Pin Change Interrupt Enables
 | 
			
		||||
 | 
			
		||||
	// PCMSK2: Pin Change Mask Register 2
 | 
			
		||||
	PCMSK2_PCINT = 0xff // Pin Change Enable Masks
 | 
			
		||||
 | 
			
		||||
	// PCMSK1: Pin Change Mask Register 1
 | 
			
		||||
	PCMSK1_PCINT = 0x7f // Pin Change Enable Masks
 | 
			
		||||
 | 
			
		||||
	// PCMSK0: Pin Change Mask Register 0
 | 
			
		||||
	PCMSK0_PCINT = 0xff // Pin Change Enable Masks
 | 
			
		||||
 | 
			
		||||
	// PCIFR: Pin Change Interrupt Flag Register
 | 
			
		||||
	PCIFR_PCIF = 0x7 // Pin Change Interrupt Flags
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
// Bitfields for SPI: Serial Peripheral Interface
 | 
			
		||||
const (
 | 
			
		||||
	// SPSR: SPI Status Register
 | 
			
		||||
	SPSR_SPIF  = 0x80 // SPI Interrupt Flag
 | 
			
		||||
	SPSR_WCOL  = 0x40 // Write Collision Flag
 | 
			
		||||
	SPSR_SPI2X = 0x1  // Double SPI Speed Bit
 | 
			
		||||
 | 
			
		||||
	// SPCR: SPI Control Register
 | 
			
		||||
	SPCR_SPIE = 0x80 // SPI Interrupt Enable
 | 
			
		||||
	SPCR_SPE  = 0x40 // SPI Enable
 | 
			
		||||
	SPCR_DORD = 0x20 // Data Order
 | 
			
		||||
	SPCR_MSTR = 0x10 // Master/Slave Select
 | 
			
		||||
	SPCR_CPOL = 0x8  // Clock polarity
 | 
			
		||||
	SPCR_CPHA = 0x4  // Clock Phase
 | 
			
		||||
	SPCR_SPR  = 0x3  // SPI Clock Rate Selects
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
// Bitfields for WDT: Watchdog Timer
 | 
			
		||||
const (
 | 
			
		||||
	// WDTCSR: Watchdog Timer Control Register
 | 
			
		||||
	WDTCSR_WDIF = 0x80 // Watchdog Timeout Interrupt Flag
 | 
			
		||||
	WDTCSR_WDIE = 0x40 // Watchdog Timeout Interrupt Enable
 | 
			
		||||
	WDTCSR_WDP  = 0x27 // Watchdog Timer Prescaler Bits
 | 
			
		||||
	WDTCSR_WDCE = 0x10 // Watchdog Change Enable
 | 
			
		||||
	WDTCSR_WDE  = 0x8  // Watch Dog Enable
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
// Bitfields for EEPROM: EEPROM
 | 
			
		||||
const (
 | 
			
		||||
	// EECR: EEPROM Control Register
 | 
			
		||||
	EECR_EEPM  = 0x30 // EEPROM Programming Mode Bits
 | 
			
		||||
	EECR_EERIE = 0x8  // EEPROM Ready Interrupt Enable
 | 
			
		||||
	EECR_EEMPE = 0x4  // EEPROM Master Write Enable
 | 
			
		||||
	EECR_EEPE  = 0x2  // EEPROM Write Enable
 | 
			
		||||
	EECR_EERE  = 0x1  // EEPROM Read Enable
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
// Bitfields for CPU: CPU Registers
 | 
			
		||||
const (
 | 
			
		||||
	// PRR: Power Reduction Register
 | 
			
		||||
	PRR_PRTWI    = 0x80 // Power Reduction TWI
 | 
			
		||||
	PRR_PRTIM2   = 0x40 // Power Reduction Timer/Counter2
 | 
			
		||||
	PRR_PRTIM0   = 0x20 // Power Reduction Timer/Counter0
 | 
			
		||||
	PRR_PRTIM1   = 0x8  // Power Reduction Timer/Counter1
 | 
			
		||||
	PRR_PRSPI    = 0x4  // Power Reduction Serial Peripheral Interface
 | 
			
		||||
	PRR_PRUSART0 = 0x2  // Power Reduction USART
 | 
			
		||||
	PRR_PRADC    = 0x1  // Power Reduction ADC
 | 
			
		||||
 | 
			
		||||
	// OSCCAL: Oscillator Calibration Value
 | 
			
		||||
	OSCCAL_OSCCAL = 0xff // Oscillator Calibration
 | 
			
		||||
 | 
			
		||||
	// CLKPR: Clock Prescale Register
 | 
			
		||||
	CLKPR_CLKPCE = 0x80 // Clock Prescaler Change Enable
 | 
			
		||||
	CLKPR_CLKPS  = 0xf  // Clock Prescaler Select Bits
 | 
			
		||||
 | 
			
		||||
	// SREG: Status Register
 | 
			
		||||
	SREG_I = 0x80 // Global Interrupt Enable
 | 
			
		||||
	SREG_T = 0x40 // Bit Copy Storage
 | 
			
		||||
	SREG_H = 0x20 // Half Carry Flag
 | 
			
		||||
	SREG_S = 0x10 // Sign Bit
 | 
			
		||||
	SREG_V = 0x8  // Two's Complement Overflow Flag
 | 
			
		||||
	SREG_N = 0x4  // Negative Flag
 | 
			
		||||
	SREG_Z = 0x2  // Zero Flag
 | 
			
		||||
	SREG_C = 0x1  // Carry Flag
 | 
			
		||||
 | 
			
		||||
	// SPMCSR: Store Program Memory Control and Status Register
 | 
			
		||||
	SPMCSR_SPMIE  = 0x80 // SPM Interrupt Enable
 | 
			
		||||
	SPMCSR_RWWSB  = 0x40 // Read-While-Write Section Busy
 | 
			
		||||
	SPMCSR_SIGRD  = 0x20 // Signature Row Read
 | 
			
		||||
	SPMCSR_RWWSRE = 0x10 // Read-While-Write section read enable
 | 
			
		||||
	SPMCSR_BLBSET = 0x8  // Boot Lock Bit Set
 | 
			
		||||
	SPMCSR_PGWRT  = 0x4  // Page Write
 | 
			
		||||
	SPMCSR_PGERS  = 0x2  // Page Erase
 | 
			
		||||
	SPMCSR_SPMEN  = 0x1  // Store Program Memory
 | 
			
		||||
 | 
			
		||||
	// MCUCR: MCU Control Register
 | 
			
		||||
	MCUCR_BODS  = 0x40 // BOD Sleep
 | 
			
		||||
	MCUCR_BODSE = 0x20 // BOD Sleep Enable
 | 
			
		||||
	MCUCR_PUD   = 0x10
 | 
			
		||||
	MCUCR_IVSEL = 0x2
 | 
			
		||||
	MCUCR_IVCE  = 0x1
 | 
			
		||||
 | 
			
		||||
	// MCUSR: MCU Status Register
 | 
			
		||||
	MCUSR_WDRF  = 0x8 // Watchdog Reset Flag
 | 
			
		||||
	MCUSR_BORF  = 0x4 // Brown-out Reset Flag
 | 
			
		||||
	MCUSR_EXTRF = 0x2 // External Reset Flag
 | 
			
		||||
	MCUSR_PORF  = 0x1 // Power-on reset flag
 | 
			
		||||
 | 
			
		||||
	// SMCR: Sleep Mode Control Register
 | 
			
		||||
	SMCR_SM = 0xe // Sleep Mode Select Bits
 | 
			
		||||
	SMCR_SE = 0x1 // Sleep Enable
 | 
			
		||||
)
 | 
			
		||||
							
								
								
									
										6
									
								
								src/device/avr/atmega168pb.ld
									
										
									
									
									
										Обычный файл
									
								
							
							
						
						
									
										6
									
								
								src/device/avr/atmega168pb.ld
									
										
									
									
									
										Обычный файл
									
								
							| 
						 | 
				
			
			@ -0,0 +1,6 @@
 | 
			
		|||
/* Automatically generated file. DO NOT EDIT. */
 | 
			
		||||
/* Generated by gen-device.py from ATmega168PB.atdf, see http://packs.download.atmel.com/ */
 | 
			
		||||
 | 
			
		||||
__flash_size = 0x4000;
 | 
			
		||||
__ram_size   = 0x400;
 | 
			
		||||
__num_isrs   = 27;
 | 
			
		||||
							
								
								
									
										679
									
								
								src/device/avr/atmega169a.go
									
										
									
									
									
										Обычный файл
									
								
							
							
						
						
									
										679
									
								
								src/device/avr/atmega169a.go
									
										
									
									
									
										Обычный файл
									
								
							| 
						 | 
				
			
			@ -0,0 +1,679 @@
 | 
			
		|||
// Automatically generated file. DO NOT EDIT.
 | 
			
		||||
// Generated by gen-device.py from ATmega169A.atdf, see http://packs.download.atmel.com/
 | 
			
		||||
 | 
			
		||||
// +build avr,atmega169a
 | 
			
		||||
 | 
			
		||||
// Device information for the ATmega169A.
 | 
			
		||||
//
 | 
			
		||||
package avr
 | 
			
		||||
 | 
			
		||||
// Magic type name for the compiler.
 | 
			
		||||
type __reg uint8
 | 
			
		||||
 | 
			
		||||
// Export this magic type name.
 | 
			
		||||
type RegValue = __reg
 | 
			
		||||
 | 
			
		||||
// Some information about this device.
 | 
			
		||||
const (
 | 
			
		||||
	DEVICE = "ATmega169A"
 | 
			
		||||
	ARCH   = "AVR8"
 | 
			
		||||
	FAMILY = "megaAVR"
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
// Interrupts
 | 
			
		||||
const (
 | 
			
		||||
	IRQ_RESET        = 0  // External Pin,Power-on Reset,Brown-out Reset,Watchdog Reset,and JTAG AVR Reset. See Datasheet.
 | 
			
		||||
	IRQ_INT0         = 1  // External Interrupt Request 0
 | 
			
		||||
	IRQ_PCINT0       = 2  // Pin Change Interrupt Request 0
 | 
			
		||||
	IRQ_PCINT1       = 3  // Pin Change Interrupt Request 1
 | 
			
		||||
	IRQ_TIMER2_COMP  = 4  // Timer/Counter2 Compare Match
 | 
			
		||||
	IRQ_TIMER2_OVF   = 5  // Timer/Counter2 Overflow
 | 
			
		||||
	IRQ_TIMER1_CAPT  = 6  // Timer/Counter1 Capture Event
 | 
			
		||||
	IRQ_TIMER1_COMPA = 7  // Timer/Counter1 Compare Match A
 | 
			
		||||
	IRQ_TIMER1_COMPB = 8  // Timer/Counter Compare Match B
 | 
			
		||||
	IRQ_TIMER1_OVF   = 9  // Timer/Counter1 Overflow
 | 
			
		||||
	IRQ_TIMER0_COMP  = 10 // Timer/Counter0 Compare Match
 | 
			
		||||
	IRQ_TIMER0_OVF   = 11 // Timer/Counter0 Overflow
 | 
			
		||||
	IRQ_SPI_STC      = 12 // SPI Serial Transfer Complete
 | 
			
		||||
	IRQ_USART0_RX    = 13 // USART0, Rx Complete
 | 
			
		||||
	IRQ_USART0_UDRE  = 14 // USART0 Data register Empty
 | 
			
		||||
	IRQ_USART0_TX    = 15 // USART0, Tx Complete
 | 
			
		||||
	IRQ_USI_START    = 16 // USI Start Condition
 | 
			
		||||
	IRQ_USI_OVERFLOW = 17 // USI Overflow
 | 
			
		||||
	IRQ_ANALOG_COMP  = 18 // Analog Comparator
 | 
			
		||||
	IRQ_ADC          = 19 // ADC Conversion Complete
 | 
			
		||||
	IRQ_EE_READY     = 20 // EEPROM Ready
 | 
			
		||||
	IRQ_SPM_READY    = 21 // Store Program Memory Read
 | 
			
		||||
	IRQ_LCD          = 22 // LCD Start of Frame
 | 
			
		||||
	IRQ_max          = 22 // Highest interrupt number on this device.
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
// Peripherals
 | 
			
		||||
var (
 | 
			
		||||
	// Fuses
 | 
			
		||||
	FUSE = struct {
 | 
			
		||||
		EXTENDED __reg
 | 
			
		||||
		HIGH     __reg
 | 
			
		||||
		LOW      __reg
 | 
			
		||||
	}{
 | 
			
		||||
		EXTENDED: 0x2,
 | 
			
		||||
		HIGH:     0x1,
 | 
			
		||||
		LOW:      0x0,
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	// Lockbits
 | 
			
		||||
	LOCKBIT = struct {
 | 
			
		||||
		LOCKBIT __reg
 | 
			
		||||
	}{
 | 
			
		||||
		LOCKBIT: 0x0,
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	// Timer/Counter, 8-bit
 | 
			
		||||
	TC8 = struct {
 | 
			
		||||
		TCCR0A __reg
 | 
			
		||||
		TCNT0  __reg
 | 
			
		||||
		OCR0A  __reg
 | 
			
		||||
		TIMSK0 __reg
 | 
			
		||||
		TIFR0  __reg
 | 
			
		||||
	}{
 | 
			
		||||
		TCCR0A: 0x44, // Timer/Counter0 Control Register
 | 
			
		||||
		TCNT0:  0x46, // Timer/Counter0
 | 
			
		||||
		OCR0A:  0x47, // Timer/Counter0 Output Compare Register
 | 
			
		||||
		TIMSK0: 0x6e, // Timer/Counter0 Interrupt Mask Register
 | 
			
		||||
		TIFR0:  0x35, // Timer/Counter0 Interrupt Flag register
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	// Timer/Counter, 16-bit
 | 
			
		||||
	TC16 = struct {
 | 
			
		||||
		TCCR1A __reg
 | 
			
		||||
		TCCR1B __reg
 | 
			
		||||
		TCCR1C __reg
 | 
			
		||||
		TCNT1L __reg
 | 
			
		||||
		TCNT1H __reg
 | 
			
		||||
		OCR1AL __reg
 | 
			
		||||
		OCR1AH __reg
 | 
			
		||||
		OCR1BL __reg
 | 
			
		||||
		OCR1BH __reg
 | 
			
		||||
		ICR1L  __reg
 | 
			
		||||
		ICR1H  __reg
 | 
			
		||||
		TIMSK1 __reg
 | 
			
		||||
		TIFR1  __reg
 | 
			
		||||
	}{
 | 
			
		||||
		TCCR1A: 0x80, // Timer/Counter1 Control Register A
 | 
			
		||||
		TCCR1B: 0x81, // Timer/Counter1 Control Register B
 | 
			
		||||
		TCCR1C: 0x82, // Timer/Counter 1 Control Register C
 | 
			
		||||
		TCNT1L: 0x84, // Timer/Counter1  Bytes
 | 
			
		||||
		TCNT1H: 0x84, // Timer/Counter1  Bytes
 | 
			
		||||
		OCR1AL: 0x88, // Timer/Counter1 Output Compare Register A  Bytes
 | 
			
		||||
		OCR1AH: 0x88, // Timer/Counter1 Output Compare Register A  Bytes
 | 
			
		||||
		OCR1BL: 0x8a, // Timer/Counter1 Output Compare Register B  Bytes
 | 
			
		||||
		OCR1BH: 0x8a, // Timer/Counter1 Output Compare Register B  Bytes
 | 
			
		||||
		ICR1L:  0x86, // Timer/Counter1 Input Capture Register  Bytes
 | 
			
		||||
		ICR1H:  0x86, // Timer/Counter1 Input Capture Register  Bytes
 | 
			
		||||
		TIMSK1: 0x6f, // Timer/Counter1 Interrupt Mask Register
 | 
			
		||||
		TIFR1:  0x36, // Timer/Counter1 Interrupt Flag register
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	// Timer/Counter, 8-bit Async
 | 
			
		||||
	TC8_ASYNC = struct {
 | 
			
		||||
		TCCR2A __reg
 | 
			
		||||
		TCNT2  __reg
 | 
			
		||||
		OCR2A  __reg
 | 
			
		||||
		TIMSK2 __reg
 | 
			
		||||
		TIFR2  __reg
 | 
			
		||||
		ASSR   __reg
 | 
			
		||||
	}{
 | 
			
		||||
		TCCR2A: 0xb0, // Timer/Counter2 Control Register
 | 
			
		||||
		TCNT2:  0xb2, // Timer/Counter2
 | 
			
		||||
		OCR2A:  0xb3, // Timer/Counter2 Output Compare Register
 | 
			
		||||
		TIMSK2: 0x70, // Timer/Counter2 Interrupt Mask register
 | 
			
		||||
		TIFR2:  0x37, // Timer/Counter2 Interrupt Flag Register
 | 
			
		||||
		ASSR:   0xb6, // Asynchronous Status Register
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	// Watchdog Timer
 | 
			
		||||
	WDT = struct {
 | 
			
		||||
		WDTCR __reg
 | 
			
		||||
	}{
 | 
			
		||||
		WDTCR: 0x60, // Watchdog Timer Control Register
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	// EEPROM
 | 
			
		||||
	EEPROM = struct {
 | 
			
		||||
		EEARL __reg
 | 
			
		||||
		EEARH __reg
 | 
			
		||||
		EEDR  __reg
 | 
			
		||||
		EECR  __reg
 | 
			
		||||
	}{
 | 
			
		||||
		EEARL: 0x41, // EEPROM Address Register  Bytes
 | 
			
		||||
		EEARH: 0x41, // EEPROM Address Register  Bytes
 | 
			
		||||
		EEDR:  0x40, // EEPROM Data Register
 | 
			
		||||
		EECR:  0x3f, // EEPROM Control Register
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	// Serial Peripheral Interface
 | 
			
		||||
	SPI = struct {
 | 
			
		||||
		SPCR __reg
 | 
			
		||||
		SPSR __reg
 | 
			
		||||
		SPDR __reg
 | 
			
		||||
	}{
 | 
			
		||||
		SPCR: 0x4c, // SPI Control Register
 | 
			
		||||
		SPSR: 0x4d, // SPI Status Register
 | 
			
		||||
		SPDR: 0x4e, // SPI Data Register
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	// I/O Port
 | 
			
		||||
	PORT = struct {
 | 
			
		||||
		PORTA __reg
 | 
			
		||||
		DDRA  __reg
 | 
			
		||||
		PINA  __reg
 | 
			
		||||
		PORTB __reg
 | 
			
		||||
		DDRB  __reg
 | 
			
		||||
		PINB  __reg
 | 
			
		||||
		PORTC __reg
 | 
			
		||||
		DDRC  __reg
 | 
			
		||||
		PINC  __reg
 | 
			
		||||
		PORTD __reg
 | 
			
		||||
		DDRD  __reg
 | 
			
		||||
		PIND  __reg
 | 
			
		||||
		PORTE __reg
 | 
			
		||||
		DDRE  __reg
 | 
			
		||||
		PINE  __reg
 | 
			
		||||
		PORTF __reg
 | 
			
		||||
		DDRF  __reg
 | 
			
		||||
		PINF  __reg
 | 
			
		||||
		PORTG __reg
 | 
			
		||||
		DDRG  __reg
 | 
			
		||||
		PING  __reg
 | 
			
		||||
	}{
 | 
			
		||||
		PORTA: 0x22, // Port A Data Register
 | 
			
		||||
		DDRA:  0x21, // Port A Data Direction Register
 | 
			
		||||
		PINA:  0x20, // Port A Input Pins
 | 
			
		||||
		PORTB: 0x25, // Port B Data Register
 | 
			
		||||
		DDRB:  0x24, // Port B Data Direction Register
 | 
			
		||||
		PINB:  0x23, // Port B Input Pins
 | 
			
		||||
		PORTC: 0x28, // Port C Data Register
 | 
			
		||||
		DDRC:  0x27, // Port C Data Direction Register
 | 
			
		||||
		PINC:  0x26, // Port C Input Pins
 | 
			
		||||
		PORTD: 0x2b, // Port D Data Register
 | 
			
		||||
		DDRD:  0x2a, // Port D Data Direction Register
 | 
			
		||||
		PIND:  0x29, // Port D Input Pins
 | 
			
		||||
		PORTE: 0x2e, // Data Register, Port E
 | 
			
		||||
		DDRE:  0x2d, // Data Direction Register, Port E
 | 
			
		||||
		PINE:  0x2c, // Input Pins, Port E
 | 
			
		||||
		PORTF: 0x31, // Data Register, Port F
 | 
			
		||||
		DDRF:  0x30, // Data Direction Register, Port F
 | 
			
		||||
		PINF:  0x2f, // Input Pins, Port F
 | 
			
		||||
		PORTG: 0x34, // Port G Data Register
 | 
			
		||||
		DDRG:  0x33, // Port G Data Direction Register
 | 
			
		||||
		PING:  0x32, // Port G Input Pins
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	// Analog Comparator
 | 
			
		||||
	AC = struct {
 | 
			
		||||
		ACSR  __reg
 | 
			
		||||
		DIDR1 __reg
 | 
			
		||||
	}{
 | 
			
		||||
		ACSR:  0x50, // Analog Comparator Control And Status Register
 | 
			
		||||
		DIDR1: 0x7f, // Digital Input Disable Register 1
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	// JTAG Interface
 | 
			
		||||
	JTAG = struct {
 | 
			
		||||
		OCDR __reg
 | 
			
		||||
	}{
 | 
			
		||||
		OCDR: 0x51, // On-Chip Debug Related Register in I/O Memory
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	// Liquid Crystal Display
 | 
			
		||||
	LCD = struct {
 | 
			
		||||
		LCDCRA  __reg
 | 
			
		||||
		LCDCRB  __reg
 | 
			
		||||
		LCDFRR  __reg
 | 
			
		||||
		LCDCCR  __reg
 | 
			
		||||
		LCDDR18 __reg
 | 
			
		||||
		LCDDR17 __reg
 | 
			
		||||
		LCDDR16 __reg
 | 
			
		||||
		LCDDR15 __reg
 | 
			
		||||
		LCDDR13 __reg
 | 
			
		||||
		LCDDR12 __reg
 | 
			
		||||
		LCDDR11 __reg
 | 
			
		||||
		LCDDR10 __reg
 | 
			
		||||
		LCDDR8  __reg
 | 
			
		||||
		LCDDR7  __reg
 | 
			
		||||
		LCDDR6  __reg
 | 
			
		||||
		LCDDR5  __reg
 | 
			
		||||
		LCDDR3  __reg
 | 
			
		||||
		LCDDR2  __reg
 | 
			
		||||
		LCDDR1  __reg
 | 
			
		||||
		LCDDR0  __reg
 | 
			
		||||
	}{
 | 
			
		||||
		LCDCRA:  0xe4, // LCD Control Register A
 | 
			
		||||
		LCDCRB:  0xe5, // LCD Control and Status Register B
 | 
			
		||||
		LCDFRR:  0xe6, // LCD Frame Rate Register
 | 
			
		||||
		LCDCCR:  0xe7, // LCD Contrast Control Register
 | 
			
		||||
		LCDDR18: 0xfe, // LCD Data Register 18
 | 
			
		||||
		LCDDR17: 0xfd, // LCD Data Register 17
 | 
			
		||||
		LCDDR16: 0xfc, // LCD Data Register 16
 | 
			
		||||
		LCDDR15: 0xfb, // LCD Data Register 15
 | 
			
		||||
		LCDDR13: 0xf9, // LCD Data Register 13
 | 
			
		||||
		LCDDR12: 0xf8, // LCD Data Register 12
 | 
			
		||||
		LCDDR11: 0xf7, // LCD Data Register 11
 | 
			
		||||
		LCDDR10: 0xf6, // LCD Data Register 10
 | 
			
		||||
		LCDDR8:  0xf4, // LCD Data Register 8
 | 
			
		||||
		LCDDR7:  0xf3, // LCD Data Register 7
 | 
			
		||||
		LCDDR6:  0xf2, // LCD Data Register 6
 | 
			
		||||
		LCDDR5:  0xf1, // LCD Data Register 5
 | 
			
		||||
		LCDDR3:  0xef, // LCD Data Register 3
 | 
			
		||||
		LCDDR2:  0xee, // LCD Data Register 2
 | 
			
		||||
		LCDDR1:  0xed, // LCD Data Register 1
 | 
			
		||||
		LCDDR0:  0xec, // LCD Data Register 0
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	// Universal Serial Interface
 | 
			
		||||
	USI = struct {
 | 
			
		||||
		USIDR __reg
 | 
			
		||||
		USISR __reg
 | 
			
		||||
		USICR __reg
 | 
			
		||||
	}{
 | 
			
		||||
		USIDR: 0xba, // USI Data Register
 | 
			
		||||
		USISR: 0xb9, // USI Status Register
 | 
			
		||||
		USICR: 0xb8, // USI Control Register
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	// Analog-to-Digital Converter
 | 
			
		||||
	ADC = struct {
 | 
			
		||||
		ADMUX  __reg
 | 
			
		||||
		ADCSRA __reg
 | 
			
		||||
		ADCL   __reg
 | 
			
		||||
		ADCH   __reg
 | 
			
		||||
		DIDR0  __reg
 | 
			
		||||
	}{
 | 
			
		||||
		ADMUX:  0x7c, // The ADC multiplexer Selection Register
 | 
			
		||||
		ADCSRA: 0x7a, // The ADC Control and Status register
 | 
			
		||||
		ADCL:   0x78, // ADC Data Register  Bytes
 | 
			
		||||
		ADCH:   0x78, // ADC Data Register  Bytes
 | 
			
		||||
		DIDR0:  0x7e, // Digital Input Disable Register 0
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	// Bootloader
 | 
			
		||||
	BOOT_LOAD = struct {
 | 
			
		||||
		SPMCSR __reg
 | 
			
		||||
	}{
 | 
			
		||||
		SPMCSR: 0x57, // Store Program Memory Control Register
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	// USART
 | 
			
		||||
	USART = struct {
 | 
			
		||||
		UDR0   __reg
 | 
			
		||||
		UCSR0A __reg
 | 
			
		||||
		UCSR0B __reg
 | 
			
		||||
		UCSR0C __reg
 | 
			
		||||
		UBRR0L __reg
 | 
			
		||||
		UBRR0H __reg
 | 
			
		||||
	}{
 | 
			
		||||
		UDR0:   0xc6, // USART I/O Data Register
 | 
			
		||||
		UCSR0A: 0xc0, // USART Control and Status Register A
 | 
			
		||||
		UCSR0B: 0xc1, // USART Control and Status Register B
 | 
			
		||||
		UCSR0C: 0xc2, // USART Control and Status Register C
 | 
			
		||||
		UBRR0L: 0xc4, // USART Baud Rate Register  Bytes
 | 
			
		||||
		UBRR0H: 0xc4, // USART Baud Rate Register  Bytes
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	// External Interrupts
 | 
			
		||||
	EXINT = struct {
 | 
			
		||||
		EICRA  __reg
 | 
			
		||||
		EIMSK  __reg
 | 
			
		||||
		EIFR   __reg
 | 
			
		||||
		PCMSK1 __reg
 | 
			
		||||
		PCMSK0 __reg
 | 
			
		||||
	}{
 | 
			
		||||
		EICRA:  0x69, // External Interrupt Control Register
 | 
			
		||||
		EIMSK:  0x3d, // External Interrupt Mask Register
 | 
			
		||||
		EIFR:   0x3c, // External Interrupt Flag Register
 | 
			
		||||
		PCMSK1: 0x6c, // Pin Change Mask Register 1
 | 
			
		||||
		PCMSK0: 0x6b, // Pin Change Mask Register 0
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	// CPU Registers
 | 
			
		||||
	CPU = struct {
 | 
			
		||||
		SREG   __reg
 | 
			
		||||
		SPL    __reg
 | 
			
		||||
		SPH    __reg
 | 
			
		||||
		OSCCAL __reg
 | 
			
		||||
		CLKPR  __reg
 | 
			
		||||
		PRR    __reg
 | 
			
		||||
		SMCR   __reg
 | 
			
		||||
		GPIOR2 __reg
 | 
			
		||||
		GPIOR1 __reg
 | 
			
		||||
		GPIOR0 __reg
 | 
			
		||||
	}{
 | 
			
		||||
		SREG:   0x5f, // Status Register
 | 
			
		||||
		SPL:    0x5d, // Stack Pointer
 | 
			
		||||
		SPH:    0x5d, // Stack Pointer
 | 
			
		||||
		OSCCAL: 0x66, // Oscillator Calibration Value
 | 
			
		||||
		CLKPR:  0x61, // Clock Prescale Register
 | 
			
		||||
		PRR:    0x64, // Power Reduction Register
 | 
			
		||||
		SMCR:   0x53, // Sleep Mode Control Register
 | 
			
		||||
		GPIOR2: 0x4b, // General Purpose IO Register 2
 | 
			
		||||
		GPIOR1: 0x4a, // General Purpose IO Register 1
 | 
			
		||||
		GPIOR0: 0x3e, // General Purpose IO Register 0
 | 
			
		||||
	}
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
// Bitfields for FUSE: Fuses
 | 
			
		||||
const (
 | 
			
		||||
	// EXTENDED
 | 
			
		||||
	EXTENDED_BODLEVEL = 0xe // Brown-out Detector trigger level
 | 
			
		||||
	EXTENDED_RSTDISBL = 0x1 // Disable external reset
 | 
			
		||||
 | 
			
		||||
	// HIGH
 | 
			
		||||
	HIGH_OCDEN   = 0x80 // On-Chip Debug Enabled
 | 
			
		||||
	HIGH_JTAGEN  = 0x40 // JTAG Interface Enabled
 | 
			
		||||
	HIGH_SPIEN   = 0x20 // Serial program downloading (SPI) enabled
 | 
			
		||||
	HIGH_WDTON   = 0x10 // Watchdog timer always on
 | 
			
		||||
	HIGH_EESAVE  = 0x8  // Preserve EEPROM through the Chip Erase cycle
 | 
			
		||||
	HIGH_BOOTSZ  = 0x6  // Select Boot Size
 | 
			
		||||
	HIGH_BOOTRST = 0x1  // Boot Reset vector Enabled
 | 
			
		||||
 | 
			
		||||
	// LOW
 | 
			
		||||
	LOW_CKDIV8    = 0x80 // Divide clock by 8 internally
 | 
			
		||||
	LOW_CKOUT     = 0x40 // Clock output on PORTE7
 | 
			
		||||
	LOW_SUT_CKSEL = 0x3f // Select Clock Source
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
// Bitfields for LOCKBIT: Lockbits
 | 
			
		||||
const (
 | 
			
		||||
	// LOCKBIT
 | 
			
		||||
	LOCKBIT_LB   = 0x3  // Memory Lock
 | 
			
		||||
	LOCKBIT_BLB0 = 0xc  // Boot Loader Protection Mode
 | 
			
		||||
	LOCKBIT_BLB1 = 0x30 // Boot Loader Protection Mode
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
// Bitfields for TC8: Timer/Counter, 8-bit
 | 
			
		||||
const (
 | 
			
		||||
	// TCCR0A: Timer/Counter0 Control Register
 | 
			
		||||
	TCCR0A_FOC0A = 0x80 // Force Output Compare
 | 
			
		||||
	TCCR0A_WGM00 = 0x40 // Waveform Generation Mode 0
 | 
			
		||||
	TCCR0A_COM0A = 0x30 // Compare Match Output Modes
 | 
			
		||||
	TCCR0A_WGM01 = 0x8  // Waveform Generation Mode 1
 | 
			
		||||
	TCCR0A_CS0   = 0x7  // Clock Selects
 | 
			
		||||
 | 
			
		||||
	// TIMSK0: Timer/Counter0 Interrupt Mask Register
 | 
			
		||||
	TIMSK0_OCIE0A = 0x2 // Timer/Counter0 Output Compare Match Interrupt Enable
 | 
			
		||||
	TIMSK0_TOIE0  = 0x1 // Timer/Counter0 Overflow Interrupt Enable
 | 
			
		||||
 | 
			
		||||
	// TIFR0: Timer/Counter0 Interrupt Flag register
 | 
			
		||||
	TIFR0_OCF0A = 0x2 // Timer/Counter0 Output Compare Flag 0
 | 
			
		||||
	TIFR0_TOV0  = 0x1 // Timer/Counter0 Overflow Flag
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
// Bitfields for TC16: Timer/Counter, 16-bit
 | 
			
		||||
const (
 | 
			
		||||
	// TCCR1A: Timer/Counter1 Control Register A
 | 
			
		||||
	TCCR1A_COM1A = 0xc0 // Compare Output Mode 1A, bits
 | 
			
		||||
	TCCR1A_COM1B = 0x30 // Compare Output Mode 1B, bits
 | 
			
		||||
	TCCR1A_WGM1  = 0x3  // Waveform Generation Mode
 | 
			
		||||
 | 
			
		||||
	// TCCR1B: Timer/Counter1 Control Register B
 | 
			
		||||
	TCCR1B_ICNC1 = 0x80 // Input Capture 1 Noise Canceler
 | 
			
		||||
	TCCR1B_ICES1 = 0x40 // Input Capture 1 Edge Select
 | 
			
		||||
	TCCR1B_WGM1  = 0x18 // Waveform Generation Mode
 | 
			
		||||
	TCCR1B_CS1   = 0x7  // Prescaler source of Timer/Counter 1
 | 
			
		||||
 | 
			
		||||
	// TCCR1C: Timer/Counter 1 Control Register C
 | 
			
		||||
	TCCR1C_FOC1A = 0x80 // Force Output Compare 1A
 | 
			
		||||
	TCCR1C_FOC1B = 0x40 // Force Output Compare 1B
 | 
			
		||||
 | 
			
		||||
	// TIMSK1: Timer/Counter1 Interrupt Mask Register
 | 
			
		||||
	TIMSK1_ICIE1  = 0x20 // Timer/Counter1 Input Capture Interrupt Enable
 | 
			
		||||
	TIMSK1_OCIE1B = 0x4  // Timer/Counter1 Output Compare B Match Interrupt Enable
 | 
			
		||||
	TIMSK1_OCIE1A = 0x2  // Timer/Counter1 Output Compare A Match Interrupt Enable
 | 
			
		||||
	TIMSK1_TOIE1  = 0x1  // Timer/Counter1 Overflow Interrupt Enable
 | 
			
		||||
 | 
			
		||||
	// TIFR1: Timer/Counter1 Interrupt Flag register
 | 
			
		||||
	TIFR1_ICF1  = 0x20 // Input Capture Flag 1
 | 
			
		||||
	TIFR1_OCF1B = 0x4  // Output Compare Flag 1B
 | 
			
		||||
	TIFR1_OCF1A = 0x2  // Output Compare Flag 1A
 | 
			
		||||
	TIFR1_TOV1  = 0x1  // Timer/Counter1 Overflow Flag
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
// Bitfields for TC8_ASYNC: Timer/Counter, 8-bit Async
 | 
			
		||||
const (
 | 
			
		||||
	// TCCR2A: Timer/Counter2 Control Register
 | 
			
		||||
	TCCR2A_FOC2A = 0x80 // Force Output Compare A
 | 
			
		||||
	TCCR2A_WGM20 = 0x40 // Waveform Generation Mode
 | 
			
		||||
	TCCR2A_COM2A = 0x30 // Compare Output Mode bits
 | 
			
		||||
	TCCR2A_WGM21 = 0x8  // Waveform Generation Mode
 | 
			
		||||
	TCCR2A_CS2   = 0x7  // Clock Select bits
 | 
			
		||||
 | 
			
		||||
	// TIMSK2: Timer/Counter2 Interrupt Mask register
 | 
			
		||||
	TIMSK2_OCIE2A = 0x2 // Timer/Counter2 Output Compare Match Interrupt Enable
 | 
			
		||||
	TIMSK2_TOIE2  = 0x1 // Timer/Counter2 Overflow Interrupt Enable
 | 
			
		||||
 | 
			
		||||
	// TIFR2: Timer/Counter2 Interrupt Flag Register
 | 
			
		||||
	TIFR2_OCF2A = 0x2 // Timer/Counter2 Output Compare Flag 2
 | 
			
		||||
	TIFR2_TOV2  = 0x1 // Timer/Counter2 Overflow Flag
 | 
			
		||||
 | 
			
		||||
	// ASSR: Asynchronous Status Register
 | 
			
		||||
	ASSR_EXCLK  = 0x10 // Enable External Clock Interrupt
 | 
			
		||||
	ASSR_AS2    = 0x8  // AS2: Asynchronous Timer/Counter2
 | 
			
		||||
	ASSR_TCN2UB = 0x4  // TCN2UB: Timer/Counter2 Update Busy
 | 
			
		||||
	ASSR_OCR2UB = 0x2  // Output Compare Register2 Update Busy
 | 
			
		||||
	ASSR_TCR2UB = 0x1  // TCR2UB: Timer/Counter Control Register2 Update Busy
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
// Bitfields for WDT: Watchdog Timer
 | 
			
		||||
const (
 | 
			
		||||
	// WDTCR: Watchdog Timer Control Register
 | 
			
		||||
	WDTCR_WDCE = 0x10 // Watchdog Change Enable
 | 
			
		||||
	WDTCR_WDE  = 0x8  // Watch Dog Enable
 | 
			
		||||
	WDTCR_WDP  = 0x7  // Watch Dog Timer Prescaler bits
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
// Bitfields for EEPROM: EEPROM
 | 
			
		||||
const (
 | 
			
		||||
	// EECR: EEPROM Control Register
 | 
			
		||||
	EECR_EERIE = 0x8 // EEPROM Ready Interrupt Enable
 | 
			
		||||
	EECR_EEMWE = 0x4 // EEPROM Master Write Enable
 | 
			
		||||
	EECR_EEWE  = 0x2 // EEPROM Write Enable
 | 
			
		||||
	EECR_EERE  = 0x1 // EEPROM Read Enable
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
// Bitfields for SPI: Serial Peripheral Interface
 | 
			
		||||
const (
 | 
			
		||||
	// SPCR: SPI Control Register
 | 
			
		||||
	SPCR_SPIE = 0x80 // SPI Interrupt Enable
 | 
			
		||||
	SPCR_SPE  = 0x40 // SPI Enable
 | 
			
		||||
	SPCR_DORD = 0x20 // Data Order
 | 
			
		||||
	SPCR_MSTR = 0x10 // Master/Slave Select
 | 
			
		||||
	SPCR_CPOL = 0x8  // Clock polarity
 | 
			
		||||
	SPCR_CPHA = 0x4  // Clock Phase
 | 
			
		||||
	SPCR_SPR  = 0x3  // SPI Clock Rate Selects
 | 
			
		||||
 | 
			
		||||
	// SPSR: SPI Status Register
 | 
			
		||||
	SPSR_SPIF  = 0x80 // SPI Interrupt Flag
 | 
			
		||||
	SPSR_WCOL  = 0x40 // Write Collision Flag
 | 
			
		||||
	SPSR_SPI2X = 0x1  // Double SPI Speed Bit
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
// Bitfields for AC: Analog Comparator
 | 
			
		||||
const (
 | 
			
		||||
	// ACSR: Analog Comparator Control And Status Register
 | 
			
		||||
	ACSR_ACD  = 0x80 // Analog Comparator Disable
 | 
			
		||||
	ACSR_ACBG = 0x40 // Analog Comparator Bandgap Select
 | 
			
		||||
	ACSR_ACO  = 0x20 // Analog Compare Output
 | 
			
		||||
	ACSR_ACI  = 0x10 // Analog Comparator Interrupt Flag
 | 
			
		||||
	ACSR_ACIE = 0x8  // Analog Comparator Interrupt Enable
 | 
			
		||||
	ACSR_ACIC = 0x4  // Analog Comparator Input Capture Enable
 | 
			
		||||
	ACSR_ACIS = 0x3  // Analog Comparator Interrupt Mode Select bits
 | 
			
		||||
 | 
			
		||||
	// DIDR1: Digital Input Disable Register 1
 | 
			
		||||
	DIDR1_AIN1D = 0x2 // AIN1 Digital Input Disable
 | 
			
		||||
	DIDR1_AIN0D = 0x1 // AIN0 Digital Input Disable
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
// Bitfields for LCD: Liquid Crystal Display
 | 
			
		||||
const (
 | 
			
		||||
	// LCDCRA: LCD Control Register A
 | 
			
		||||
	LCDCRA_LCDEN  = 0x80 // LCD Enable
 | 
			
		||||
	LCDCRA_LCDAB  = 0x40 // LCD A or B waveform
 | 
			
		||||
	LCDCRA_LCDIF  = 0x10 // LCD Interrupt Flag
 | 
			
		||||
	LCDCRA_LCDIE  = 0x8  // LCD Interrupt Enable
 | 
			
		||||
	LCDCRA_LCDBD  = 0x4  // LCD Buffer Disable
 | 
			
		||||
	LCDCRA_LCDCCD = 0x2  // LCD Contrast Control Disable
 | 
			
		||||
	LCDCRA_LCDBL  = 0x1  // LCD Blanking
 | 
			
		||||
 | 
			
		||||
	// LCDCRB: LCD Control and Status Register B
 | 
			
		||||
	LCDCRB_LCDCS  = 0x80 // LCD CLock Select
 | 
			
		||||
	LCDCRB_LCD2B  = 0x40 // LCD 1/2 Bias Select
 | 
			
		||||
	LCDCRB_LCDMUX = 0x30 // LCD Mux Selects
 | 
			
		||||
	LCDCRB_LCDPM  = 0x7  // LCD Port Masks
 | 
			
		||||
 | 
			
		||||
	// LCDFRR: LCD Frame Rate Register
 | 
			
		||||
	LCDFRR_LCDPS = 0x70 // LCD Prescaler Selects
 | 
			
		||||
	LCDFRR_LCDCD = 0x7  // LCD Clock Dividers
 | 
			
		||||
 | 
			
		||||
	// LCDCCR: LCD Contrast Control Register
 | 
			
		||||
	LCDCCR_LCDDC  = 0xe0 // LCD Display Configuration Bits
 | 
			
		||||
	LCDCCR_LCDMDT = 0x10 // LCD Maximum Drive Time
 | 
			
		||||
	LCDCCR_LCDCC  = 0xf  // LCD Contrast Controls
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
// Bitfields for USI: Universal Serial Interface
 | 
			
		||||
const (
 | 
			
		||||
	// USISR: USI Status Register
 | 
			
		||||
	USISR_USISIF = 0x80 // Start Condition Interrupt Flag
 | 
			
		||||
	USISR_USIOIF = 0x40 // Counter Overflow Interrupt Flag
 | 
			
		||||
	USISR_USIPF  = 0x20 // Stop Condition Flag
 | 
			
		||||
	USISR_USIDC  = 0x10 // Data Output Collision
 | 
			
		||||
	USISR_USICNT = 0xf  // USI Counter Value Bits
 | 
			
		||||
 | 
			
		||||
	// USICR: USI Control Register
 | 
			
		||||
	USICR_USISIE = 0x80 // Start Condition Interrupt Enable
 | 
			
		||||
	USICR_USIOIE = 0x40 // Counter Overflow Interrupt Enable
 | 
			
		||||
	USICR_USIWM  = 0x30 // USI Wire Mode Bits
 | 
			
		||||
	USICR_USICS  = 0xc  // USI Clock Source Select Bits
 | 
			
		||||
	USICR_USICLK = 0x2  // Clock Strobe
 | 
			
		||||
	USICR_USITC  = 0x1  // Toggle Clock Port Pin
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
// Bitfields for ADC: Analog-to-Digital Converter
 | 
			
		||||
const (
 | 
			
		||||
	// ADMUX: The ADC multiplexer Selection Register
 | 
			
		||||
	ADMUX_REFS  = 0xc0 // Reference Selection Bits
 | 
			
		||||
	ADMUX_ADLAR = 0x20 // Left Adjust Result
 | 
			
		||||
	ADMUX_MUX   = 0x1f // Analog Channel and Gain Selection Bits
 | 
			
		||||
 | 
			
		||||
	// ADCSRA: The ADC Control and Status register
 | 
			
		||||
	ADCSRA_ADEN  = 0x80 // ADC Enable
 | 
			
		||||
	ADCSRA_ADSC  = 0x40 // ADC Start Conversion
 | 
			
		||||
	ADCSRA_ADATE = 0x20 // ADC Auto Trigger Enable
 | 
			
		||||
	ADCSRA_ADIF  = 0x10 // ADC Interrupt Flag
 | 
			
		||||
	ADCSRA_ADIE  = 0x8  // ADC Interrupt Enable
 | 
			
		||||
	ADCSRA_ADPS  = 0x7  // ADC  Prescaler Select Bits
 | 
			
		||||
 | 
			
		||||
	// DIDR0: Digital Input Disable Register 0
 | 
			
		||||
	DIDR0_ADC7D = 0x80 // ADC7 Digital input Disable
 | 
			
		||||
	DIDR0_ADC6D = 0x40 // ADC6 Digital input Disable
 | 
			
		||||
	DIDR0_ADC5D = 0x20 // ADC5 Digital input Disable
 | 
			
		||||
	DIDR0_ADC4D = 0x10 // ADC4 Digital input Disable
 | 
			
		||||
	DIDR0_ADC3D = 0x8  // ADC3 Digital input Disable
 | 
			
		||||
	DIDR0_ADC2D = 0x4  // ADC2 Digital input Disable
 | 
			
		||||
	DIDR0_ADC1D = 0x2  // ADC1 Digital input Disable
 | 
			
		||||
	DIDR0_ADC0D = 0x1  // ADC0 Digital input Disable
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
// Bitfields for BOOT_LOAD: Bootloader
 | 
			
		||||
const (
 | 
			
		||||
	// SPMCSR: Store Program Memory Control Register
 | 
			
		||||
	SPMCSR_SPMIE  = 0x80 // SPM Interrupt Enable
 | 
			
		||||
	SPMCSR_RWWSB  = 0x40 // Read While Write Section Busy
 | 
			
		||||
	SPMCSR_RWWSRE = 0x10 // Read While Write section read enable
 | 
			
		||||
	SPMCSR_BLBSET = 0x8  // Boot Lock Bit Set
 | 
			
		||||
	SPMCSR_PGWRT  = 0x4  // Page Write
 | 
			
		||||
	SPMCSR_PGERS  = 0x2  // Page Erase
 | 
			
		||||
	SPMCSR_SPMEN  = 0x1  // Store Program Memory Enable
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
// Bitfields for USART: USART
 | 
			
		||||
const (
 | 
			
		||||
	// UCSR0A: USART Control and Status Register A
 | 
			
		||||
	UCSR0A_RXC0  = 0x80 // USART Receive Complete
 | 
			
		||||
	UCSR0A_TXC0  = 0x40 // USART Transmit Complete
 | 
			
		||||
	UCSR0A_UDRE0 = 0x20 // USART Data Register Empty
 | 
			
		||||
	UCSR0A_FE0   = 0x10 // Framing Error
 | 
			
		||||
	UCSR0A_DOR0  = 0x8  // Data OverRun
 | 
			
		||||
	UCSR0A_UPE0  = 0x4  // USART Parity Error
 | 
			
		||||
	UCSR0A_U2X0  = 0x2  // Double the USART Transmission Speed
 | 
			
		||||
	UCSR0A_MPCM0 = 0x1  // Multi-processor Communication Mode
 | 
			
		||||
 | 
			
		||||
	// UCSR0B: USART Control and Status Register B
 | 
			
		||||
	UCSR0B_RXCIE0 = 0x80 // RX Complete Interrupt Enable
 | 
			
		||||
	UCSR0B_TXCIE0 = 0x40 // TX Complete Interrupt Enable
 | 
			
		||||
	UCSR0B_UDRIE0 = 0x20 // USART Data Register Empty Interrupt Enable
 | 
			
		||||
	UCSR0B_RXEN0  = 0x10 // Receiver Enable
 | 
			
		||||
	UCSR0B_TXEN0  = 0x8  // Transmitter Enable
 | 
			
		||||
	UCSR0B_UCSZ02 = 0x4  // Character Size
 | 
			
		||||
	UCSR0B_RXB80  = 0x2  // Receive Data Bit 8
 | 
			
		||||
	UCSR0B_TXB80  = 0x1  // Transmit Data Bit 8
 | 
			
		||||
 | 
			
		||||
	// UCSR0C: USART Control and Status Register C
 | 
			
		||||
	UCSR0C_UMSEL0 = 0x40 // USART Mode Select
 | 
			
		||||
	UCSR0C_UPM0   = 0x30 // Parity Mode Bits
 | 
			
		||||
	UCSR0C_USBS0  = 0x8  // Stop Bit Select
 | 
			
		||||
	UCSR0C_UCSZ0  = 0x6  // Character Size
 | 
			
		||||
	UCSR0C_UCPOL0 = 0x1  // Clock Polarity
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
// Bitfields for EXINT: External Interrupts
 | 
			
		||||
const (
 | 
			
		||||
	// EICRA: External Interrupt Control Register
 | 
			
		||||
	EICRA_ISC01 = 0x2 // External Interrupt Sense Control 0 Bit 1
 | 
			
		||||
	EICRA_ISC00 = 0x1 // External Interrupt Sense Control 0 Bit 0
 | 
			
		||||
 | 
			
		||||
	// EIMSK: External Interrupt Mask Register
 | 
			
		||||
	EIMSK_PCIE = 0x30 // Pin Change Interrupt Enables
 | 
			
		||||
	EIMSK_INT0 = 0x1  // External Interrupt Request 0 Enable
 | 
			
		||||
 | 
			
		||||
	// EIFR: External Interrupt Flag Register
 | 
			
		||||
	EIFR_PCIF  = 0x30 // Pin Change Interrupt Flags
 | 
			
		||||
	EIFR_INTF0 = 0x1  // External Interrupt Flag 0
 | 
			
		||||
 | 
			
		||||
	// PCMSK1: Pin Change Mask Register 1
 | 
			
		||||
	PCMSK1_PCINT = 0xff // Pin Change Enable Masks
 | 
			
		||||
 | 
			
		||||
	// PCMSK0: Pin Change Mask Register 0
 | 
			
		||||
	PCMSK0_PCINT = 0xff // Pin Change Enable Masks
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
// Bitfields for CPU: CPU Registers
 | 
			
		||||
const (
 | 
			
		||||
	// SREG: Status Register
 | 
			
		||||
	SREG_I = 0x80 // Global Interrupt Enable
 | 
			
		||||
	SREG_T = 0x40 // Bit Copy Storage
 | 
			
		||||
	SREG_H = 0x20 // Half Carry Flag
 | 
			
		||||
	SREG_S = 0x10 // Sign Bit
 | 
			
		||||
	SREG_V = 0x8  // Two's Complement Overflow Flag
 | 
			
		||||
	SREG_N = 0x4  // Negative Flag
 | 
			
		||||
	SREG_Z = 0x2  // Zero Flag
 | 
			
		||||
	SREG_C = 0x1  // Carry Flag
 | 
			
		||||
 | 
			
		||||
	// OSCCAL: Oscillator Calibration Value
 | 
			
		||||
	OSCCAL_OSCCAL = 0xff // Oscillator Calibration
 | 
			
		||||
 | 
			
		||||
	// CLKPR: Clock Prescale Register
 | 
			
		||||
	CLKPR_CLKPCE = 0x80 // Clock Prescaler Change Enable
 | 
			
		||||
	CLKPR_CLKPS  = 0xf  // Clock Prescaler Select Bits
 | 
			
		||||
 | 
			
		||||
	// PRR: Power Reduction Register
 | 
			
		||||
	PRR_PRLCD    = 0x10 // Power Reduction LCD
 | 
			
		||||
	PRR_PRTIM1   = 0x8  // Power Reduction Timer/Counter1
 | 
			
		||||
	PRR_PRSPI    = 0x4  // Power Reduction Serial Peripheral Interface
 | 
			
		||||
	PRR_PRUSART0 = 0x2  // Power Reduction USART
 | 
			
		||||
	PRR_PRADC    = 0x1  // Power Reduction ADC
 | 
			
		||||
 | 
			
		||||
	// SMCR: Sleep Mode Control Register
 | 
			
		||||
	SMCR_SM = 0xe // Sleep Mode Select bits
 | 
			
		||||
	SMCR_SE = 0x1 // Sleep Enable
 | 
			
		||||
)
 | 
			
		||||
							
								
								
									
										6
									
								
								src/device/avr/atmega169a.ld
									
										
									
									
									
										Обычный файл
									
								
							
							
						
						
									
										6
									
								
								src/device/avr/atmega169a.ld
									
										
									
									
									
										Обычный файл
									
								
							| 
						 | 
				
			
			@ -0,0 +1,6 @@
 | 
			
		|||
/* Automatically generated file. DO NOT EDIT. */
 | 
			
		||||
/* Generated by gen-device.py from ATmega169A.atdf, see http://packs.download.atmel.com/ */
 | 
			
		||||
 | 
			
		||||
__flash_size = 0x4000;
 | 
			
		||||
__ram_size   = 0x400;
 | 
			
		||||
__num_isrs   = 23;
 | 
			
		||||
							
								
								
									
										679
									
								
								src/device/avr/atmega169p.go
									
										
									
									
									
										Обычный файл
									
								
							
							
						
						
									
										679
									
								
								src/device/avr/atmega169p.go
									
										
									
									
									
										Обычный файл
									
								
							| 
						 | 
				
			
			@ -0,0 +1,679 @@
 | 
			
		|||
// Automatically generated file. DO NOT EDIT.
 | 
			
		||||
// Generated by gen-device.py from ATmega169P.atdf, see http://packs.download.atmel.com/
 | 
			
		||||
 | 
			
		||||
// +build avr,atmega169p
 | 
			
		||||
 | 
			
		||||
// Device information for the ATmega169P.
 | 
			
		||||
//
 | 
			
		||||
package avr
 | 
			
		||||
 | 
			
		||||
// Magic type name for the compiler.
 | 
			
		||||
type __reg uint8
 | 
			
		||||
 | 
			
		||||
// Export this magic type name.
 | 
			
		||||
type RegValue = __reg
 | 
			
		||||
 | 
			
		||||
// Some information about this device.
 | 
			
		||||
const (
 | 
			
		||||
	DEVICE = "ATmega169P"
 | 
			
		||||
	ARCH   = "AVR8"
 | 
			
		||||
	FAMILY = "megaAVR"
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
// Interrupts
 | 
			
		||||
const (
 | 
			
		||||
	IRQ_RESET        = 0  // External Pin,Power-on Reset,Brown-out Reset,Watchdog Reset,and JTAG AVR Reset. See Datasheet.
 | 
			
		||||
	IRQ_INT0         = 1  // External Interrupt Request 0
 | 
			
		||||
	IRQ_PCINT0       = 2  // Pin Change Interrupt Request 0
 | 
			
		||||
	IRQ_PCINT1       = 3  // Pin Change Interrupt Request 1
 | 
			
		||||
	IRQ_TIMER2_COMP  = 4  // Timer/Counter2 Compare Match
 | 
			
		||||
	IRQ_TIMER2_OVF   = 5  // Timer/Counter2 Overflow
 | 
			
		||||
	IRQ_TIMER1_CAPT  = 6  // Timer/Counter1 Capture Event
 | 
			
		||||
	IRQ_TIMER1_COMPA = 7  // Timer/Counter1 Compare Match A
 | 
			
		||||
	IRQ_TIMER1_COMPB = 8  // Timer/Counter Compare Match B
 | 
			
		||||
	IRQ_TIMER1_OVF   = 9  // Timer/Counter1 Overflow
 | 
			
		||||
	IRQ_TIMER0_COMP  = 10 // Timer/Counter0 Compare Match
 | 
			
		||||
	IRQ_TIMER0_OVF   = 11 // Timer/Counter0 Overflow
 | 
			
		||||
	IRQ_SPI_STC      = 12 // SPI Serial Transfer Complete
 | 
			
		||||
	IRQ_USART0_RX    = 13 // USART0, Rx Complete
 | 
			
		||||
	IRQ_USART0_UDRE  = 14 // USART0 Data register Empty
 | 
			
		||||
	IRQ_USART0_TX    = 15 // USART0, Tx Complete
 | 
			
		||||
	IRQ_USI_START    = 16 // USI Start Condition
 | 
			
		||||
	IRQ_USI_OVERFLOW = 17 // USI Overflow
 | 
			
		||||
	IRQ_ANALOG_COMP  = 18 // Analog Comparator
 | 
			
		||||
	IRQ_ADC          = 19 // ADC Conversion Complete
 | 
			
		||||
	IRQ_EE_READY     = 20 // EEPROM Ready
 | 
			
		||||
	IRQ_SPM_READY    = 21 // Store Program Memory Read
 | 
			
		||||
	IRQ_LCD          = 22 // LCD Start of Frame
 | 
			
		||||
	IRQ_max          = 22 // Highest interrupt number on this device.
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
// Peripherals
 | 
			
		||||
var (
 | 
			
		||||
	// Fuses
 | 
			
		||||
	FUSE = struct {
 | 
			
		||||
		EXTENDED __reg
 | 
			
		||||
		HIGH     __reg
 | 
			
		||||
		LOW      __reg
 | 
			
		||||
	}{
 | 
			
		||||
		EXTENDED: 0x2,
 | 
			
		||||
		HIGH:     0x1,
 | 
			
		||||
		LOW:      0x0,
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	// Lockbits
 | 
			
		||||
	LOCKBIT = struct {
 | 
			
		||||
		LOCKBIT __reg
 | 
			
		||||
	}{
 | 
			
		||||
		LOCKBIT: 0x0,
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	// Timer/Counter, 8-bit
 | 
			
		||||
	TC8 = struct {
 | 
			
		||||
		TCCR0A __reg
 | 
			
		||||
		TCNT0  __reg
 | 
			
		||||
		OCR0A  __reg
 | 
			
		||||
		TIMSK0 __reg
 | 
			
		||||
		TIFR0  __reg
 | 
			
		||||
	}{
 | 
			
		||||
		TCCR0A: 0x44, // Timer/Counter0 Control Register
 | 
			
		||||
		TCNT0:  0x46, // Timer/Counter0
 | 
			
		||||
		OCR0A:  0x47, // Timer/Counter0 Output Compare Register
 | 
			
		||||
		TIMSK0: 0x6e, // Timer/Counter0 Interrupt Mask Register
 | 
			
		||||
		TIFR0:  0x35, // Timer/Counter0 Interrupt Flag register
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	// Timer/Counter, 16-bit
 | 
			
		||||
	TC16 = struct {
 | 
			
		||||
		TCCR1A __reg
 | 
			
		||||
		TCCR1B __reg
 | 
			
		||||
		TCCR1C __reg
 | 
			
		||||
		TCNT1L __reg
 | 
			
		||||
		TCNT1H __reg
 | 
			
		||||
		OCR1AL __reg
 | 
			
		||||
		OCR1AH __reg
 | 
			
		||||
		OCR1BL __reg
 | 
			
		||||
		OCR1BH __reg
 | 
			
		||||
		ICR1L  __reg
 | 
			
		||||
		ICR1H  __reg
 | 
			
		||||
		TIMSK1 __reg
 | 
			
		||||
		TIFR1  __reg
 | 
			
		||||
	}{
 | 
			
		||||
		TCCR1A: 0x80, // Timer/Counter1 Control Register A
 | 
			
		||||
		TCCR1B: 0x81, // Timer/Counter1 Control Register B
 | 
			
		||||
		TCCR1C: 0x82, // Timer/Counter 1 Control Register C
 | 
			
		||||
		TCNT1L: 0x84, // Timer/Counter1  Bytes
 | 
			
		||||
		TCNT1H: 0x84, // Timer/Counter1  Bytes
 | 
			
		||||
		OCR1AL: 0x88, // Timer/Counter1 Output Compare Register A  Bytes
 | 
			
		||||
		OCR1AH: 0x88, // Timer/Counter1 Output Compare Register A  Bytes
 | 
			
		||||
		OCR1BL: 0x8a, // Timer/Counter1 Output Compare Register B  Bytes
 | 
			
		||||
		OCR1BH: 0x8a, // Timer/Counter1 Output Compare Register B  Bytes
 | 
			
		||||
		ICR1L:  0x86, // Timer/Counter1 Input Capture Register  Bytes
 | 
			
		||||
		ICR1H:  0x86, // Timer/Counter1 Input Capture Register  Bytes
 | 
			
		||||
		TIMSK1: 0x6f, // Timer/Counter1 Interrupt Mask Register
 | 
			
		||||
		TIFR1:  0x36, // Timer/Counter1 Interrupt Flag register
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	// Timer/Counter, 8-bit Async
 | 
			
		||||
	TC8_ASYNC = struct {
 | 
			
		||||
		TCCR2A __reg
 | 
			
		||||
		TCNT2  __reg
 | 
			
		||||
		OCR2A  __reg
 | 
			
		||||
		TIMSK2 __reg
 | 
			
		||||
		TIFR2  __reg
 | 
			
		||||
		ASSR   __reg
 | 
			
		||||
	}{
 | 
			
		||||
		TCCR2A: 0xb0, // Timer/Counter2 Control Register
 | 
			
		||||
		TCNT2:  0xb2, // Timer/Counter2
 | 
			
		||||
		OCR2A:  0xb3, // Timer/Counter2 Output Compare Register
 | 
			
		||||
		TIMSK2: 0x70, // Timer/Counter2 Interrupt Mask register
 | 
			
		||||
		TIFR2:  0x37, // Timer/Counter2 Interrupt Flag Register
 | 
			
		||||
		ASSR:   0xb6, // Asynchronous Status Register
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	// Watchdog Timer
 | 
			
		||||
	WDT = struct {
 | 
			
		||||
		WDTCR __reg
 | 
			
		||||
	}{
 | 
			
		||||
		WDTCR: 0x60, // Watchdog Timer Control Register
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	// EEPROM
 | 
			
		||||
	EEPROM = struct {
 | 
			
		||||
		EEARL __reg
 | 
			
		||||
		EEARH __reg
 | 
			
		||||
		EEDR  __reg
 | 
			
		||||
		EECR  __reg
 | 
			
		||||
	}{
 | 
			
		||||
		EEARL: 0x41, // EEPROM Address Register  Bytes
 | 
			
		||||
		EEARH: 0x41, // EEPROM Address Register  Bytes
 | 
			
		||||
		EEDR:  0x40, // EEPROM Data Register
 | 
			
		||||
		EECR:  0x3f, // EEPROM Control Register
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	// Serial Peripheral Interface
 | 
			
		||||
	SPI = struct {
 | 
			
		||||
		SPCR __reg
 | 
			
		||||
		SPSR __reg
 | 
			
		||||
		SPDR __reg
 | 
			
		||||
	}{
 | 
			
		||||
		SPCR: 0x4c, // SPI Control Register
 | 
			
		||||
		SPSR: 0x4d, // SPI Status Register
 | 
			
		||||
		SPDR: 0x4e, // SPI Data Register
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	// I/O Port
 | 
			
		||||
	PORT = struct {
 | 
			
		||||
		PORTA __reg
 | 
			
		||||
		DDRA  __reg
 | 
			
		||||
		PINA  __reg
 | 
			
		||||
		PORTB __reg
 | 
			
		||||
		DDRB  __reg
 | 
			
		||||
		PINB  __reg
 | 
			
		||||
		PORTC __reg
 | 
			
		||||
		DDRC  __reg
 | 
			
		||||
		PINC  __reg
 | 
			
		||||
		PORTD __reg
 | 
			
		||||
		DDRD  __reg
 | 
			
		||||
		PIND  __reg
 | 
			
		||||
		PORTE __reg
 | 
			
		||||
		DDRE  __reg
 | 
			
		||||
		PINE  __reg
 | 
			
		||||
		PORTF __reg
 | 
			
		||||
		DDRF  __reg
 | 
			
		||||
		PINF  __reg
 | 
			
		||||
		PORTG __reg
 | 
			
		||||
		DDRG  __reg
 | 
			
		||||
		PING  __reg
 | 
			
		||||
	}{
 | 
			
		||||
		PORTA: 0x22, // Port A Data Register
 | 
			
		||||
		DDRA:  0x21, // Port A Data Direction Register
 | 
			
		||||
		PINA:  0x20, // Port A Input Pins
 | 
			
		||||
		PORTB: 0x25, // Port B Data Register
 | 
			
		||||
		DDRB:  0x24, // Port B Data Direction Register
 | 
			
		||||
		PINB:  0x23, // Port B Input Pins
 | 
			
		||||
		PORTC: 0x28, // Port C Data Register
 | 
			
		||||
		DDRC:  0x27, // Port C Data Direction Register
 | 
			
		||||
		PINC:  0x26, // Port C Input Pins
 | 
			
		||||
		PORTD: 0x2b, // Port D Data Register
 | 
			
		||||
		DDRD:  0x2a, // Port D Data Direction Register
 | 
			
		||||
		PIND:  0x29, // Port D Input Pins
 | 
			
		||||
		PORTE: 0x2e, // Data Register, Port E
 | 
			
		||||
		DDRE:  0x2d, // Data Direction Register, Port E
 | 
			
		||||
		PINE:  0x2c, // Input Pins, Port E
 | 
			
		||||
		PORTF: 0x31, // Data Register, Port F
 | 
			
		||||
		DDRF:  0x30, // Data Direction Register, Port F
 | 
			
		||||
		PINF:  0x2f, // Input Pins, Port F
 | 
			
		||||
		PORTG: 0x34, // Port G Data Register
 | 
			
		||||
		DDRG:  0x33, // Port G Data Direction Register
 | 
			
		||||
		PING:  0x32, // Port G Input Pins
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	// Analog Comparator
 | 
			
		||||
	AC = struct {
 | 
			
		||||
		ACSR  __reg
 | 
			
		||||
		DIDR1 __reg
 | 
			
		||||
	}{
 | 
			
		||||
		ACSR:  0x50, // Analog Comparator Control And Status Register
 | 
			
		||||
		DIDR1: 0x7f, // Digital Input Disable Register 1
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	// JTAG Interface
 | 
			
		||||
	JTAG = struct {
 | 
			
		||||
		OCDR __reg
 | 
			
		||||
	}{
 | 
			
		||||
		OCDR: 0x51, // On-Chip Debug Related Register in I/O Memory
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	// Liquid Crystal Display
 | 
			
		||||
	LCD = struct {
 | 
			
		||||
		LCDCRA  __reg
 | 
			
		||||
		LCDCRB  __reg
 | 
			
		||||
		LCDFRR  __reg
 | 
			
		||||
		LCDCCR  __reg
 | 
			
		||||
		LCDDR18 __reg
 | 
			
		||||
		LCDDR17 __reg
 | 
			
		||||
		LCDDR16 __reg
 | 
			
		||||
		LCDDR15 __reg
 | 
			
		||||
		LCDDR13 __reg
 | 
			
		||||
		LCDDR12 __reg
 | 
			
		||||
		LCDDR11 __reg
 | 
			
		||||
		LCDDR10 __reg
 | 
			
		||||
		LCDDR8  __reg
 | 
			
		||||
		LCDDR7  __reg
 | 
			
		||||
		LCDDR6  __reg
 | 
			
		||||
		LCDDR5  __reg
 | 
			
		||||
		LCDDR3  __reg
 | 
			
		||||
		LCDDR2  __reg
 | 
			
		||||
		LCDDR1  __reg
 | 
			
		||||
		LCDDR0  __reg
 | 
			
		||||
	}{
 | 
			
		||||
		LCDCRA:  0xe4, // LCD Control Register A
 | 
			
		||||
		LCDCRB:  0xe5, // LCD Control and Status Register B
 | 
			
		||||
		LCDFRR:  0xe6, // LCD Frame Rate Register
 | 
			
		||||
		LCDCCR:  0xe7, // LCD Contrast Control Register
 | 
			
		||||
		LCDDR18: 0xfe, // LCD Data Register 18
 | 
			
		||||
		LCDDR17: 0xfd, // LCD Data Register 17
 | 
			
		||||
		LCDDR16: 0xfc, // LCD Data Register 16
 | 
			
		||||
		LCDDR15: 0xfb, // LCD Data Register 15
 | 
			
		||||
		LCDDR13: 0xf9, // LCD Data Register 13
 | 
			
		||||
		LCDDR12: 0xf8, // LCD Data Register 12
 | 
			
		||||
		LCDDR11: 0xf7, // LCD Data Register 11
 | 
			
		||||
		LCDDR10: 0xf6, // LCD Data Register 10
 | 
			
		||||
		LCDDR8:  0xf4, // LCD Data Register 8
 | 
			
		||||
		LCDDR7:  0xf3, // LCD Data Register 7
 | 
			
		||||
		LCDDR6:  0xf2, // LCD Data Register 6
 | 
			
		||||
		LCDDR5:  0xf1, // LCD Data Register 5
 | 
			
		||||
		LCDDR3:  0xef, // LCD Data Register 3
 | 
			
		||||
		LCDDR2:  0xee, // LCD Data Register 2
 | 
			
		||||
		LCDDR1:  0xed, // LCD Data Register 1
 | 
			
		||||
		LCDDR0:  0xec, // LCD Data Register 0
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	// External Interrupts
 | 
			
		||||
	EXINT = struct {
 | 
			
		||||
		EICRA  __reg
 | 
			
		||||
		EIMSK  __reg
 | 
			
		||||
		EIFR   __reg
 | 
			
		||||
		PCMSK1 __reg
 | 
			
		||||
		PCMSK0 __reg
 | 
			
		||||
	}{
 | 
			
		||||
		EICRA:  0x69, // External Interrupt Control Register
 | 
			
		||||
		EIMSK:  0x3d, // External Interrupt Mask Register
 | 
			
		||||
		EIFR:   0x3c, // External Interrupt Flag Register
 | 
			
		||||
		PCMSK1: 0x6c, // Pin Change Mask Register 1
 | 
			
		||||
		PCMSK0: 0x6b, // Pin Change Mask Register 0
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	// Universal Serial Interface
 | 
			
		||||
	USI = struct {
 | 
			
		||||
		USIDR __reg
 | 
			
		||||
		USISR __reg
 | 
			
		||||
		USICR __reg
 | 
			
		||||
	}{
 | 
			
		||||
		USIDR: 0xba, // USI Data Register
 | 
			
		||||
		USISR: 0xb9, // USI Status Register
 | 
			
		||||
		USICR: 0xb8, // USI Control Register
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	// Analog-to-Digital Converter
 | 
			
		||||
	ADC = struct {
 | 
			
		||||
		ADMUX  __reg
 | 
			
		||||
		ADCSRA __reg
 | 
			
		||||
		ADCL   __reg
 | 
			
		||||
		ADCH   __reg
 | 
			
		||||
		DIDR0  __reg
 | 
			
		||||
	}{
 | 
			
		||||
		ADMUX:  0x7c, // The ADC multiplexer Selection Register
 | 
			
		||||
		ADCSRA: 0x7a, // The ADC Control and Status register
 | 
			
		||||
		ADCL:   0x78, // ADC Data Register  Bytes
 | 
			
		||||
		ADCH:   0x78, // ADC Data Register  Bytes
 | 
			
		||||
		DIDR0:  0x7e, // Digital Input Disable Register 0
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	// Bootloader
 | 
			
		||||
	BOOT_LOAD = struct {
 | 
			
		||||
		SPMCSR __reg
 | 
			
		||||
	}{
 | 
			
		||||
		SPMCSR: 0x57, // Store Program Memory Control Register
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	// USART
 | 
			
		||||
	USART = struct {
 | 
			
		||||
		UDR0   __reg
 | 
			
		||||
		UCSR0A __reg
 | 
			
		||||
		UCSR0B __reg
 | 
			
		||||
		UCSR0C __reg
 | 
			
		||||
		UBRR0L __reg
 | 
			
		||||
		UBRR0H __reg
 | 
			
		||||
	}{
 | 
			
		||||
		UDR0:   0xc6, // USART I/O Data Register
 | 
			
		||||
		UCSR0A: 0xc0, // USART Control and Status Register A
 | 
			
		||||
		UCSR0B: 0xc1, // USART Control and Status Register B
 | 
			
		||||
		UCSR0C: 0xc2, // USART Control and Status Register C
 | 
			
		||||
		UBRR0L: 0xc4, // USART Baud Rate Register  Bytes
 | 
			
		||||
		UBRR0H: 0xc4, // USART Baud Rate Register  Bytes
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	// CPU Registers
 | 
			
		||||
	CPU = struct {
 | 
			
		||||
		SREG   __reg
 | 
			
		||||
		SPL    __reg
 | 
			
		||||
		SPH    __reg
 | 
			
		||||
		OSCCAL __reg
 | 
			
		||||
		CLKPR  __reg
 | 
			
		||||
		PRR    __reg
 | 
			
		||||
		SMCR   __reg
 | 
			
		||||
		GPIOR2 __reg
 | 
			
		||||
		GPIOR1 __reg
 | 
			
		||||
		GPIOR0 __reg
 | 
			
		||||
	}{
 | 
			
		||||
		SREG:   0x5f, // Status Register
 | 
			
		||||
		SPL:    0x5d, // Stack Pointer
 | 
			
		||||
		SPH:    0x5d, // Stack Pointer
 | 
			
		||||
		OSCCAL: 0x66, // Oscillator Calibration Value
 | 
			
		||||
		CLKPR:  0x61, // Clock Prescale Register
 | 
			
		||||
		PRR:    0x64, // Power Reduction Register
 | 
			
		||||
		SMCR:   0x53, // Sleep Mode Control Register
 | 
			
		||||
		GPIOR2: 0x4b, // General Purpose IO Register 2
 | 
			
		||||
		GPIOR1: 0x4a, // General Purpose IO Register 1
 | 
			
		||||
		GPIOR0: 0x3e, // General Purpose IO Register 0
 | 
			
		||||
	}
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
// Bitfields for FUSE: Fuses
 | 
			
		||||
const (
 | 
			
		||||
	// EXTENDED
 | 
			
		||||
	EXTENDED_BODLEVEL = 0xe // Brown-out Detector trigger level
 | 
			
		||||
	EXTENDED_RSTDISBL = 0x1 // Disable external reset
 | 
			
		||||
 | 
			
		||||
	// HIGH
 | 
			
		||||
	HIGH_OCDEN   = 0x80 // On-Chip Debug Enabled
 | 
			
		||||
	HIGH_JTAGEN  = 0x40 // JTAG Interface Enabled
 | 
			
		||||
	HIGH_SPIEN   = 0x20 // Serial program downloading (SPI) enabled
 | 
			
		||||
	HIGH_WDTON   = 0x10 // Watchdog timer always on
 | 
			
		||||
	HIGH_EESAVE  = 0x8  // Preserve EEPROM through the Chip Erase cycle
 | 
			
		||||
	HIGH_BOOTSZ  = 0x6  // Select Boot Size
 | 
			
		||||
	HIGH_BOOTRST = 0x1  // Boot Reset vector Enabled
 | 
			
		||||
 | 
			
		||||
	// LOW
 | 
			
		||||
	LOW_CKDIV8    = 0x80 // Divide clock by 8 internally
 | 
			
		||||
	LOW_CKOUT     = 0x40 // Clock output on PORTE7
 | 
			
		||||
	LOW_SUT_CKSEL = 0x3f // Select Clock Source
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
// Bitfields for LOCKBIT: Lockbits
 | 
			
		||||
const (
 | 
			
		||||
	// LOCKBIT
 | 
			
		||||
	LOCKBIT_LB   = 0x3  // Memory Lock
 | 
			
		||||
	LOCKBIT_BLB0 = 0xc  // Boot Loader Protection Mode
 | 
			
		||||
	LOCKBIT_BLB1 = 0x30 // Boot Loader Protection Mode
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
// Bitfields for TC8: Timer/Counter, 8-bit
 | 
			
		||||
const (
 | 
			
		||||
	// TCCR0A: Timer/Counter0 Control Register
 | 
			
		||||
	TCCR0A_FOC0A = 0x80 // Force Output Compare
 | 
			
		||||
	TCCR0A_WGM00 = 0x40 // Waveform Generation Mode 0
 | 
			
		||||
	TCCR0A_COM0A = 0x30 // Compare Match Output Modes
 | 
			
		||||
	TCCR0A_WGM01 = 0x8  // Waveform Generation Mode 1
 | 
			
		||||
	TCCR0A_CS0   = 0x7  // Clock Selects
 | 
			
		||||
 | 
			
		||||
	// TIMSK0: Timer/Counter0 Interrupt Mask Register
 | 
			
		||||
	TIMSK0_OCIE0A = 0x2 // Timer/Counter0 Output Compare Match Interrupt Enable
 | 
			
		||||
	TIMSK0_TOIE0  = 0x1 // Timer/Counter0 Overflow Interrupt Enable
 | 
			
		||||
 | 
			
		||||
	// TIFR0: Timer/Counter0 Interrupt Flag register
 | 
			
		||||
	TIFR0_OCF0A = 0x2 // Timer/Counter0 Output Compare Flag 0
 | 
			
		||||
	TIFR0_TOV0  = 0x1 // Timer/Counter0 Overflow Flag
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
// Bitfields for TC16: Timer/Counter, 16-bit
 | 
			
		||||
const (
 | 
			
		||||
	// TCCR1A: Timer/Counter1 Control Register A
 | 
			
		||||
	TCCR1A_COM1A = 0xc0 // Compare Output Mode 1A, bits
 | 
			
		||||
	TCCR1A_COM1B = 0x30 // Compare Output Mode 1B, bits
 | 
			
		||||
	TCCR1A_WGM1  = 0x3  // Waveform Generation Mode
 | 
			
		||||
 | 
			
		||||
	// TCCR1B: Timer/Counter1 Control Register B
 | 
			
		||||
	TCCR1B_ICNC1 = 0x80 // Input Capture 1 Noise Canceler
 | 
			
		||||
	TCCR1B_ICES1 = 0x40 // Input Capture 1 Edge Select
 | 
			
		||||
	TCCR1B_WGM1  = 0x18 // Waveform Generation Mode
 | 
			
		||||
	TCCR1B_CS1   = 0x7  // Prescaler source of Timer/Counter 1
 | 
			
		||||
 | 
			
		||||
	// TCCR1C: Timer/Counter 1 Control Register C
 | 
			
		||||
	TCCR1C_FOC1A = 0x80 // Force Output Compare 1A
 | 
			
		||||
	TCCR1C_FOC1B = 0x40 // Force Output Compare 1B
 | 
			
		||||
 | 
			
		||||
	// TIMSK1: Timer/Counter1 Interrupt Mask Register
 | 
			
		||||
	TIMSK1_ICIE1  = 0x20 // Timer/Counter1 Input Capture Interrupt Enable
 | 
			
		||||
	TIMSK1_OCIE1B = 0x4  // Timer/Counter1 Output Compare B Match Interrupt Enable
 | 
			
		||||
	TIMSK1_OCIE1A = 0x2  // Timer/Counter1 Output Compare A Match Interrupt Enable
 | 
			
		||||
	TIMSK1_TOIE1  = 0x1  // Timer/Counter1 Overflow Interrupt Enable
 | 
			
		||||
 | 
			
		||||
	// TIFR1: Timer/Counter1 Interrupt Flag register
 | 
			
		||||
	TIFR1_ICF1  = 0x20 // Input Capture Flag 1
 | 
			
		||||
	TIFR1_OCF1B = 0x4  // Output Compare Flag 1B
 | 
			
		||||
	TIFR1_OCF1A = 0x2  // Output Compare Flag 1A
 | 
			
		||||
	TIFR1_TOV1  = 0x1  // Timer/Counter1 Overflow Flag
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
// Bitfields for TC8_ASYNC: Timer/Counter, 8-bit Async
 | 
			
		||||
const (
 | 
			
		||||
	// TCCR2A: Timer/Counter2 Control Register
 | 
			
		||||
	TCCR2A_FOC2A = 0x80 // Force Output Compare A
 | 
			
		||||
	TCCR2A_WGM20 = 0x40 // Waveform Generation Mode
 | 
			
		||||
	TCCR2A_COM2A = 0x30 // Compare Output Mode bits
 | 
			
		||||
	TCCR2A_WGM21 = 0x8  // Waveform Generation Mode
 | 
			
		||||
	TCCR2A_CS2   = 0x7  // Clock Select bits
 | 
			
		||||
 | 
			
		||||
	// TIMSK2: Timer/Counter2 Interrupt Mask register
 | 
			
		||||
	TIMSK2_OCIE2A = 0x2 // Timer/Counter2 Output Compare Match Interrupt Enable
 | 
			
		||||
	TIMSK2_TOIE2  = 0x1 // Timer/Counter2 Overflow Interrupt Enable
 | 
			
		||||
 | 
			
		||||
	// TIFR2: Timer/Counter2 Interrupt Flag Register
 | 
			
		||||
	TIFR2_OCF2A = 0x2 // Timer/Counter2 Output Compare Flag 2
 | 
			
		||||
	TIFR2_TOV2  = 0x1 // Timer/Counter2 Overflow Flag
 | 
			
		||||
 | 
			
		||||
	// ASSR: Asynchronous Status Register
 | 
			
		||||
	ASSR_EXCLK  = 0x10 // Enable External Clock Interrupt
 | 
			
		||||
	ASSR_AS2    = 0x8  // AS2: Asynchronous Timer/Counter2
 | 
			
		||||
	ASSR_TCN2UB = 0x4  // TCN2UB: Timer/Counter2 Update Busy
 | 
			
		||||
	ASSR_OCR2UB = 0x2  // Output Compare Register2 Update Busy
 | 
			
		||||
	ASSR_TCR2UB = 0x1  // TCR2UB: Timer/Counter Control Register2 Update Busy
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
// Bitfields for WDT: Watchdog Timer
 | 
			
		||||
const (
 | 
			
		||||
	// WDTCR: Watchdog Timer Control Register
 | 
			
		||||
	WDTCR_WDCE = 0x10 // Watchdog Change Enable
 | 
			
		||||
	WDTCR_WDE  = 0x8  // Watch Dog Enable
 | 
			
		||||
	WDTCR_WDP  = 0x7  // Watch Dog Timer Prescaler bits
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
// Bitfields for EEPROM: EEPROM
 | 
			
		||||
const (
 | 
			
		||||
	// EECR: EEPROM Control Register
 | 
			
		||||
	EECR_EERIE = 0x8 // EEPROM Ready Interrupt Enable
 | 
			
		||||
	EECR_EEMWE = 0x4 // EEPROM Master Write Enable
 | 
			
		||||
	EECR_EEWE  = 0x2 // EEPROM Write Enable
 | 
			
		||||
	EECR_EERE  = 0x1 // EEPROM Read Enable
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
// Bitfields for SPI: Serial Peripheral Interface
 | 
			
		||||
const (
 | 
			
		||||
	// SPCR: SPI Control Register
 | 
			
		||||
	SPCR_SPIE = 0x80 // SPI Interrupt Enable
 | 
			
		||||
	SPCR_SPE  = 0x40 // SPI Enable
 | 
			
		||||
	SPCR_DORD = 0x20 // Data Order
 | 
			
		||||
	SPCR_MSTR = 0x10 // Master/Slave Select
 | 
			
		||||
	SPCR_CPOL = 0x8  // Clock polarity
 | 
			
		||||
	SPCR_CPHA = 0x4  // Clock Phase
 | 
			
		||||
	SPCR_SPR  = 0x3  // SPI Clock Rate Selects
 | 
			
		||||
 | 
			
		||||
	// SPSR: SPI Status Register
 | 
			
		||||
	SPSR_SPIF  = 0x80 // SPI Interrupt Flag
 | 
			
		||||
	SPSR_WCOL  = 0x40 // Write Collision Flag
 | 
			
		||||
	SPSR_SPI2X = 0x1  // Double SPI Speed Bit
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
// Bitfields for AC: Analog Comparator
 | 
			
		||||
const (
 | 
			
		||||
	// ACSR: Analog Comparator Control And Status Register
 | 
			
		||||
	ACSR_ACD  = 0x80 // Analog Comparator Disable
 | 
			
		||||
	ACSR_ACBG = 0x40 // Analog Comparator Bandgap Select
 | 
			
		||||
	ACSR_ACO  = 0x20 // Analog Compare Output
 | 
			
		||||
	ACSR_ACI  = 0x10 // Analog Comparator Interrupt Flag
 | 
			
		||||
	ACSR_ACIE = 0x8  // Analog Comparator Interrupt Enable
 | 
			
		||||
	ACSR_ACIC = 0x4  // Analog Comparator Input Capture Enable
 | 
			
		||||
	ACSR_ACIS = 0x3  // Analog Comparator Interrupt Mode Select bits
 | 
			
		||||
 | 
			
		||||
	// DIDR1: Digital Input Disable Register 1
 | 
			
		||||
	DIDR1_AIN1D = 0x2 // AIN1 Digital Input Disable
 | 
			
		||||
	DIDR1_AIN0D = 0x1 // AIN0 Digital Input Disable
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
// Bitfields for LCD: Liquid Crystal Display
 | 
			
		||||
const (
 | 
			
		||||
	// LCDCRA: LCD Control Register A
 | 
			
		||||
	LCDCRA_LCDEN  = 0x80 // LCD Enable
 | 
			
		||||
	LCDCRA_LCDAB  = 0x40 // LCD A or B waveform
 | 
			
		||||
	LCDCRA_LCDIF  = 0x10 // LCD Interrupt Flag
 | 
			
		||||
	LCDCRA_LCDIE  = 0x8  // LCD Interrupt Enable
 | 
			
		||||
	LCDCRA_LCDBD  = 0x4  // LCD Buffer Disable
 | 
			
		||||
	LCDCRA_LCDCCD = 0x2  // LCD Contrast Control Disable
 | 
			
		||||
	LCDCRA_LCDBL  = 0x1  // LCD Blanking
 | 
			
		||||
 | 
			
		||||
	// LCDCRB: LCD Control and Status Register B
 | 
			
		||||
	LCDCRB_LCDCS  = 0x80 // LCD CLock Select
 | 
			
		||||
	LCDCRB_LCD2B  = 0x40 // LCD 1/2 Bias Select
 | 
			
		||||
	LCDCRB_LCDMUX = 0x30 // LCD Mux Selects
 | 
			
		||||
	LCDCRB_LCDPM  = 0x7  // LCD Port Masks
 | 
			
		||||
 | 
			
		||||
	// LCDFRR: LCD Frame Rate Register
 | 
			
		||||
	LCDFRR_LCDPS = 0x70 // LCD Prescaler Selects
 | 
			
		||||
	LCDFRR_LCDCD = 0x7  // LCD Clock Dividers
 | 
			
		||||
 | 
			
		||||
	// LCDCCR: LCD Contrast Control Register
 | 
			
		||||
	LCDCCR_LCDDC  = 0xe0 // LCD Display Configuration Bits
 | 
			
		||||
	LCDCCR_LCDMDT = 0x10 // LCD Maximum Drive Time
 | 
			
		||||
	LCDCCR_LCDCC  = 0xf  // LCD Contrast Controls
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
// Bitfields for EXINT: External Interrupts
 | 
			
		||||
const (
 | 
			
		||||
	// EICRA: External Interrupt Control Register
 | 
			
		||||
	EICRA_ISC01 = 0x2 // External Interrupt Sense Control 0 Bit 1
 | 
			
		||||
	EICRA_ISC00 = 0x1 // External Interrupt Sense Control 0 Bit 0
 | 
			
		||||
 | 
			
		||||
	// EIMSK: External Interrupt Mask Register
 | 
			
		||||
	EIMSK_PCIE = 0xc0 // Pin Change Interrupt Enables
 | 
			
		||||
	EIMSK_INT0 = 0x1  // External Interrupt Request 0 Enable
 | 
			
		||||
 | 
			
		||||
	// EIFR: External Interrupt Flag Register
 | 
			
		||||
	EIFR_PCIF  = 0xc0 // Pin Change Interrupt Flags
 | 
			
		||||
	EIFR_INTF0 = 0x1  // External Interrupt Flag 0
 | 
			
		||||
 | 
			
		||||
	// PCMSK1: Pin Change Mask Register 1
 | 
			
		||||
	PCMSK1_PCINT = 0xff // Pin Change Enable Masks
 | 
			
		||||
 | 
			
		||||
	// PCMSK0: Pin Change Mask Register 0
 | 
			
		||||
	PCMSK0_PCINT = 0xff // Pin Change Enable Masks
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
// Bitfields for USI: Universal Serial Interface
 | 
			
		||||
const (
 | 
			
		||||
	// USISR: USI Status Register
 | 
			
		||||
	USISR_USISIF = 0x80 // Start Condition Interrupt Flag
 | 
			
		||||
	USISR_USIOIF = 0x40 // Counter Overflow Interrupt Flag
 | 
			
		||||
	USISR_USIPF  = 0x20 // Stop Condition Flag
 | 
			
		||||
	USISR_USIDC  = 0x10 // Data Output Collision
 | 
			
		||||
	USISR_USICNT = 0xf  // USI Counter Value Bits
 | 
			
		||||
 | 
			
		||||
	// USICR: USI Control Register
 | 
			
		||||
	USICR_USISIE = 0x80 // Start Condition Interrupt Enable
 | 
			
		||||
	USICR_USIOIE = 0x40 // Counter Overflow Interrupt Enable
 | 
			
		||||
	USICR_USIWM  = 0x30 // USI Wire Mode Bits
 | 
			
		||||
	USICR_USICS  = 0xc  // USI Clock Source Select Bits
 | 
			
		||||
	USICR_USICLK = 0x2  // Clock Strobe
 | 
			
		||||
	USICR_USITC  = 0x1  // Toggle Clock Port Pin
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
// Bitfields for ADC: Analog-to-Digital Converter
 | 
			
		||||
const (
 | 
			
		||||
	// ADMUX: The ADC multiplexer Selection Register
 | 
			
		||||
	ADMUX_REFS  = 0xc0 // Reference Selection Bits
 | 
			
		||||
	ADMUX_ADLAR = 0x20 // Left Adjust Result
 | 
			
		||||
	ADMUX_MUX   = 0x1f // Analog Channel and Gain Selection Bits
 | 
			
		||||
 | 
			
		||||
	// ADCSRA: The ADC Control and Status register
 | 
			
		||||
	ADCSRA_ADEN  = 0x80 // ADC Enable
 | 
			
		||||
	ADCSRA_ADSC  = 0x40 // ADC Start Conversion
 | 
			
		||||
	ADCSRA_ADATE = 0x20 // ADC Auto Trigger Enable
 | 
			
		||||
	ADCSRA_ADIF  = 0x10 // ADC Interrupt Flag
 | 
			
		||||
	ADCSRA_ADIE  = 0x8  // ADC Interrupt Enable
 | 
			
		||||
	ADCSRA_ADPS  = 0x7  // ADC  Prescaler Select Bits
 | 
			
		||||
 | 
			
		||||
	// DIDR0: Digital Input Disable Register 0
 | 
			
		||||
	DIDR0_ADC7D = 0x80 // ADC7 Digital input Disable
 | 
			
		||||
	DIDR0_ADC6D = 0x40 // ADC6 Digital input Disable
 | 
			
		||||
	DIDR0_ADC5D = 0x20 // ADC5 Digital input Disable
 | 
			
		||||
	DIDR0_ADC4D = 0x10 // ADC4 Digital input Disable
 | 
			
		||||
	DIDR0_ADC3D = 0x8  // ADC3 Digital input Disable
 | 
			
		||||
	DIDR0_ADC2D = 0x4  // ADC2 Digital input Disable
 | 
			
		||||
	DIDR0_ADC1D = 0x2  // ADC1 Digital input Disable
 | 
			
		||||
	DIDR0_ADC0D = 0x1  // ADC0 Digital input Disable
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
// Bitfields for BOOT_LOAD: Bootloader
 | 
			
		||||
const (
 | 
			
		||||
	// SPMCSR: Store Program Memory Control Register
 | 
			
		||||
	SPMCSR_SPMIE  = 0x80 // SPM Interrupt Enable
 | 
			
		||||
	SPMCSR_RWWSB  = 0x40 // Read While Write Section Busy
 | 
			
		||||
	SPMCSR_RWWSRE = 0x10 // Read While Write section read enable
 | 
			
		||||
	SPMCSR_BLBSET = 0x8  // Boot Lock Bit Set
 | 
			
		||||
	SPMCSR_PGWRT  = 0x4  // Page Write
 | 
			
		||||
	SPMCSR_PGERS  = 0x2  // Page Erase
 | 
			
		||||
	SPMCSR_SPMEN  = 0x1  // Store Program Memory Enable
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
// Bitfields for USART: USART
 | 
			
		||||
const (
 | 
			
		||||
	// UCSR0A: USART Control and Status Register A
 | 
			
		||||
	UCSR0A_RXC0  = 0x80 // USART Receive Complete
 | 
			
		||||
	UCSR0A_TXC0  = 0x40 // USART Transmit Complete
 | 
			
		||||
	UCSR0A_UDRE0 = 0x20 // USART Data Register Empty
 | 
			
		||||
	UCSR0A_FE0   = 0x10 // Framing Error
 | 
			
		||||
	UCSR0A_DOR0  = 0x8  // Data OverRun
 | 
			
		||||
	UCSR0A_UPE0  = 0x4  // USART Parity Error
 | 
			
		||||
	UCSR0A_U2X0  = 0x2  // Double the USART Transmission Speed
 | 
			
		||||
	UCSR0A_MPCM0 = 0x1  // Multi-processor Communication Mode
 | 
			
		||||
 | 
			
		||||
	// UCSR0B: USART Control and Status Register B
 | 
			
		||||
	UCSR0B_RXCIE0 = 0x80 // RX Complete Interrupt Enable
 | 
			
		||||
	UCSR0B_TXCIE0 = 0x40 // TX Complete Interrupt Enable
 | 
			
		||||
	UCSR0B_UDRIE0 = 0x20 // USART Data Register Empty Interrupt Enable
 | 
			
		||||
	UCSR0B_RXEN0  = 0x10 // Receiver Enable
 | 
			
		||||
	UCSR0B_TXEN0  = 0x8  // Transmitter Enable
 | 
			
		||||
	UCSR0B_UCSZ02 = 0x4  // Character Size
 | 
			
		||||
	UCSR0B_RXB80  = 0x2  // Receive Data Bit 8
 | 
			
		||||
	UCSR0B_TXB80  = 0x1  // Transmit Data Bit 8
 | 
			
		||||
 | 
			
		||||
	// UCSR0C: USART Control and Status Register C
 | 
			
		||||
	UCSR0C_UMSEL0 = 0x40 // USART Mode Select
 | 
			
		||||
	UCSR0C_UPM0   = 0x30 // Parity Mode Bits
 | 
			
		||||
	UCSR0C_USBS0  = 0x8  // Stop Bit Select
 | 
			
		||||
	UCSR0C_UCSZ0  = 0x6  // Character Size
 | 
			
		||||
	UCSR0C_UCPOL0 = 0x1  // Clock Polarity
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
// Bitfields for CPU: CPU Registers
 | 
			
		||||
const (
 | 
			
		||||
	// SREG: Status Register
 | 
			
		||||
	SREG_I = 0x80 // Global Interrupt Enable
 | 
			
		||||
	SREG_T = 0x40 // Bit Copy Storage
 | 
			
		||||
	SREG_H = 0x20 // Half Carry Flag
 | 
			
		||||
	SREG_S = 0x10 // Sign Bit
 | 
			
		||||
	SREG_V = 0x8  // Two's Complement Overflow Flag
 | 
			
		||||
	SREG_N = 0x4  // Negative Flag
 | 
			
		||||
	SREG_Z = 0x2  // Zero Flag
 | 
			
		||||
	SREG_C = 0x1  // Carry Flag
 | 
			
		||||
 | 
			
		||||
	// OSCCAL: Oscillator Calibration Value
 | 
			
		||||
	OSCCAL_OSCCAL = 0xff // Oscillator Calibration
 | 
			
		||||
 | 
			
		||||
	// CLKPR: Clock Prescale Register
 | 
			
		||||
	CLKPR_CLKPCE = 0x80 // Clock Prescaler Change Enable
 | 
			
		||||
	CLKPR_CLKPS  = 0xf  // Clock Prescaler Select Bits
 | 
			
		||||
 | 
			
		||||
	// PRR: Power Reduction Register
 | 
			
		||||
	PRR_PRLCD    = 0x10 // Power Reduction LCD
 | 
			
		||||
	PRR_PRTIM1   = 0x8  // Power Reduction Timer/Counter1
 | 
			
		||||
	PRR_PRSPI    = 0x4  // Power Reduction Serial Peripheral Interface
 | 
			
		||||
	PRR_PRUSART0 = 0x2  // Power Reduction USART
 | 
			
		||||
	PRR_PRADC    = 0x1  // Power Reduction ADC
 | 
			
		||||
 | 
			
		||||
	// SMCR: Sleep Mode Control Register
 | 
			
		||||
	SMCR_SM = 0xe // Sleep Mode Select bits
 | 
			
		||||
	SMCR_SE = 0x1 // Sleep Enable
 | 
			
		||||
)
 | 
			
		||||
							
								
								
									
										6
									
								
								src/device/avr/atmega169p.ld
									
										
									
									
									
										Обычный файл
									
								
							
							
						
						
									
										6
									
								
								src/device/avr/atmega169p.ld
									
										
									
									
									
										Обычный файл
									
								
							| 
						 | 
				
			
			@ -0,0 +1,6 @@
 | 
			
		|||
/* Automatically generated file. DO NOT EDIT. */
 | 
			
		||||
/* Generated by gen-device.py from ATmega169P.atdf, see http://packs.download.atmel.com/ */
 | 
			
		||||
 | 
			
		||||
__flash_size = 0x4000;
 | 
			
		||||
__ram_size   = 0x400;
 | 
			
		||||
__num_isrs   = 23;
 | 
			
		||||
							
								
								
									
										747
									
								
								src/device/avr/atmega169pa.go
									
										
									
									
									
										Обычный файл
									
								
							
							
						
						
									
										747
									
								
								src/device/avr/atmega169pa.go
									
										
									
									
									
										Обычный файл
									
								
							| 
						 | 
				
			
			@ -0,0 +1,747 @@
 | 
			
		|||
// Automatically generated file. DO NOT EDIT.
 | 
			
		||||
// Generated by gen-device.py from ATmega169PA.atdf, see http://packs.download.atmel.com/
 | 
			
		||||
 | 
			
		||||
// +build avr,atmega169pa
 | 
			
		||||
 | 
			
		||||
// Device information for the ATmega169PA.
 | 
			
		||||
//
 | 
			
		||||
package avr
 | 
			
		||||
 | 
			
		||||
// Magic type name for the compiler.
 | 
			
		||||
type __reg uint8
 | 
			
		||||
 | 
			
		||||
// Export this magic type name.
 | 
			
		||||
type RegValue = __reg
 | 
			
		||||
 | 
			
		||||
// Some information about this device.
 | 
			
		||||
const (
 | 
			
		||||
	DEVICE = "ATmega169PA"
 | 
			
		||||
	ARCH   = "AVR8"
 | 
			
		||||
	FAMILY = "megaAVR"
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
// Interrupts
 | 
			
		||||
const (
 | 
			
		||||
	IRQ_RESET        = 0  // External Pin,Power-on Reset,Brown-out Reset,Watchdog Reset,and JTAG AVR Reset. See Datasheet.
 | 
			
		||||
	IRQ_INT0         = 1  // External Interrupt Request 0
 | 
			
		||||
	IRQ_PCINT0       = 2  // Pin Change Interrupt Request 0
 | 
			
		||||
	IRQ_PCINT1       = 3  // Pin Change Interrupt Request 1
 | 
			
		||||
	IRQ_TIMER2_COMP  = 4  // Timer/Counter2 Compare Match
 | 
			
		||||
	IRQ_TIMER2_OVF   = 5  // Timer/Counter2 Overflow
 | 
			
		||||
	IRQ_TIMER1_CAPT  = 6  // Timer/Counter1 Capture Event
 | 
			
		||||
	IRQ_TIMER1_COMPA = 7  // Timer/Counter1 Compare Match A
 | 
			
		||||
	IRQ_TIMER1_COMPB = 8  // Timer/Counter Compare Match B
 | 
			
		||||
	IRQ_TIMER1_OVF   = 9  // Timer/Counter1 Overflow
 | 
			
		||||
	IRQ_TIMER0_COMP  = 10 // Timer/Counter0 Compare Match
 | 
			
		||||
	IRQ_TIMER0_OVF   = 11 // Timer/Counter0 Overflow
 | 
			
		||||
	IRQ_SPI_STC      = 12 // SPI Serial Transfer Complete
 | 
			
		||||
	IRQ_USART0_RX    = 13 // USART0, Rx Complete
 | 
			
		||||
	IRQ_USART0_UDRE  = 14 // USART0 Data register Empty
 | 
			
		||||
	IRQ_USART0_TX    = 15 // USART0, Tx Complete
 | 
			
		||||
	IRQ_USI_START    = 16 // USI Start Condition
 | 
			
		||||
	IRQ_USI_OVERFLOW = 17 // USI Overflow
 | 
			
		||||
	IRQ_ANALOG_COMP  = 18 // Analog Comparator
 | 
			
		||||
	IRQ_ADC          = 19 // ADC Conversion Complete
 | 
			
		||||
	IRQ_EE_READY     = 20 // EEPROM Ready
 | 
			
		||||
	IRQ_SPM_READY    = 21 // Store Program Memory Read
 | 
			
		||||
	IRQ_LCD          = 22 // LCD Start of Frame
 | 
			
		||||
	IRQ_max          = 22 // Highest interrupt number on this device.
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
// Peripherals
 | 
			
		||||
var (
 | 
			
		||||
	// Fuses
 | 
			
		||||
	FUSE = struct {
 | 
			
		||||
		EXTENDED __reg
 | 
			
		||||
		HIGH     __reg
 | 
			
		||||
		LOW      __reg
 | 
			
		||||
	}{
 | 
			
		||||
		EXTENDED: 0x2,
 | 
			
		||||
		HIGH:     0x1,
 | 
			
		||||
		LOW:      0x0,
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	// Lockbits
 | 
			
		||||
	LOCKBIT = struct {
 | 
			
		||||
		LOCKBIT __reg
 | 
			
		||||
	}{
 | 
			
		||||
		LOCKBIT: 0x0,
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	// Timer/Counter, 8-bit
 | 
			
		||||
	TC8 = struct {
 | 
			
		||||
		TCCR0A __reg
 | 
			
		||||
		TCNT0  __reg
 | 
			
		||||
		OCR0A  __reg
 | 
			
		||||
		TIMSK0 __reg
 | 
			
		||||
		TIFR0  __reg
 | 
			
		||||
	}{
 | 
			
		||||
		TCCR0A: 0x44, // Timer/Counter0 Control Register
 | 
			
		||||
		TCNT0:  0x46, // Timer/Counter0
 | 
			
		||||
		OCR0A:  0x47, // Timer/Counter0 Output Compare Register
 | 
			
		||||
		TIMSK0: 0x6e, // Timer/Counter0 Interrupt Mask Register
 | 
			
		||||
		TIFR0:  0x35, // Timer/Counter0 Interrupt Flag register
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	// Timer/Counter, 16-bit
 | 
			
		||||
	TC16 = struct {
 | 
			
		||||
		TCCR1A __reg
 | 
			
		||||
		TCCR1B __reg
 | 
			
		||||
		TCCR1C __reg
 | 
			
		||||
		TCNT1L __reg
 | 
			
		||||
		TCNT1H __reg
 | 
			
		||||
		OCR1AL __reg
 | 
			
		||||
		OCR1AH __reg
 | 
			
		||||
		OCR1BL __reg
 | 
			
		||||
		OCR1BH __reg
 | 
			
		||||
		ICR1L  __reg
 | 
			
		||||
		ICR1H  __reg
 | 
			
		||||
		TIMSK1 __reg
 | 
			
		||||
		TIFR1  __reg
 | 
			
		||||
	}{
 | 
			
		||||
		TCCR1A: 0x80, // Timer/Counter1 Control Register A
 | 
			
		||||
		TCCR1B: 0x81, // Timer/Counter1 Control Register B
 | 
			
		||||
		TCCR1C: 0x82, // Timer/Counter 1 Control Register C
 | 
			
		||||
		TCNT1L: 0x84, // Timer/Counter1  Bytes
 | 
			
		||||
		TCNT1H: 0x84, // Timer/Counter1  Bytes
 | 
			
		||||
		OCR1AL: 0x88, // Timer/Counter1 Output Compare Register A Bytes
 | 
			
		||||
		OCR1AH: 0x88, // Timer/Counter1 Output Compare Register A Bytes
 | 
			
		||||
		OCR1BL: 0x8a, // Timer/Counter1 Output Compare Register B Bytes
 | 
			
		||||
		OCR1BH: 0x8a, // Timer/Counter1 Output Compare Register B Bytes
 | 
			
		||||
		ICR1L:  0x86, // Timer/Counter1 Input Capture Register Bytes
 | 
			
		||||
		ICR1H:  0x86, // Timer/Counter1 Input Capture Register Bytes
 | 
			
		||||
		TIMSK1: 0x6f, // Timer/Counter1 Interrupt Mask Register
 | 
			
		||||
		TIFR1:  0x36, // Timer/Counter1 Interrupt Flag register
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	// Timer/Counter, 8-bit Async
 | 
			
		||||
	TC8_ASYNC = struct {
 | 
			
		||||
		TCCR2A __reg
 | 
			
		||||
		TCNT2  __reg
 | 
			
		||||
		OCR2A  __reg
 | 
			
		||||
		TIMSK2 __reg
 | 
			
		||||
		TIFR2  __reg
 | 
			
		||||
		ASSR   __reg
 | 
			
		||||
	}{
 | 
			
		||||
		TCCR2A: 0xb0, // Timer/Counter2 Control Register
 | 
			
		||||
		TCNT2:  0xb2, // Timer/Counter2
 | 
			
		||||
		OCR2A:  0xb3, // Timer/Counter2 Output Compare Register
 | 
			
		||||
		TIMSK2: 0x70, // Timer/Counter2 Interrupt Mask register
 | 
			
		||||
		TIFR2:  0x37, // Timer/Counter2 Interrupt Flag Register
 | 
			
		||||
		ASSR:   0xb6, // Asynchronous Status Register
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	// Watchdog Timer
 | 
			
		||||
	WDT = struct {
 | 
			
		||||
		WDTCR __reg
 | 
			
		||||
	}{
 | 
			
		||||
		WDTCR: 0x60, // Watchdog Timer Control Register
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	// EEPROM
 | 
			
		||||
	EEPROM = struct {
 | 
			
		||||
		EEARL __reg
 | 
			
		||||
		EEARH __reg
 | 
			
		||||
		EEDR  __reg
 | 
			
		||||
		EECR  __reg
 | 
			
		||||
	}{
 | 
			
		||||
		EEARL: 0x41, // EEPROM Address Register Bytes
 | 
			
		||||
		EEARH: 0x41, // EEPROM Address Register Bytes
 | 
			
		||||
		EEDR:  0x40, // EEPROM Data Register
 | 
			
		||||
		EECR:  0x3f, // EEPROM Control Register
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	// Serial Peripheral Interface
 | 
			
		||||
	SPI = struct {
 | 
			
		||||
		SPCR __reg
 | 
			
		||||
		SPSR __reg
 | 
			
		||||
		SPDR __reg
 | 
			
		||||
	}{
 | 
			
		||||
		SPCR: 0x4c, // SPI Control Register
 | 
			
		||||
		SPSR: 0x4d, // SPI Status Register
 | 
			
		||||
		SPDR: 0x4e, // SPI Data Register
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	// I/O Port
 | 
			
		||||
	PORT = struct {
 | 
			
		||||
		PORTA __reg
 | 
			
		||||
		DDRA  __reg
 | 
			
		||||
		PINA  __reg
 | 
			
		||||
		PORTB __reg
 | 
			
		||||
		DDRB  __reg
 | 
			
		||||
		PINB  __reg
 | 
			
		||||
		PORTC __reg
 | 
			
		||||
		DDRC  __reg
 | 
			
		||||
		PINC  __reg
 | 
			
		||||
		PORTD __reg
 | 
			
		||||
		DDRD  __reg
 | 
			
		||||
		PIND  __reg
 | 
			
		||||
		PORTE __reg
 | 
			
		||||
		DDRE  __reg
 | 
			
		||||
		PINE  __reg
 | 
			
		||||
		PORTF __reg
 | 
			
		||||
		DDRF  __reg
 | 
			
		||||
		PINF  __reg
 | 
			
		||||
		PORTG __reg
 | 
			
		||||
		DDRG  __reg
 | 
			
		||||
		PING  __reg
 | 
			
		||||
	}{
 | 
			
		||||
		PORTA: 0x22, // Port A Data Register
 | 
			
		||||
		DDRA:  0x21, // Port A Data Direction Register
 | 
			
		||||
		PINA:  0x20, // Port A Input Pins
 | 
			
		||||
		PORTB: 0x25, // Port B Data Register
 | 
			
		||||
		DDRB:  0x24, // Port B Data Direction Register
 | 
			
		||||
		PINB:  0x23, // Port B Input Pins
 | 
			
		||||
		PORTC: 0x28, // Port C Data Register
 | 
			
		||||
		DDRC:  0x27, // Port C Data Direction Register
 | 
			
		||||
		PINC:  0x26, // Port C Input Pins
 | 
			
		||||
		PORTD: 0x2b, // Port D Data Register
 | 
			
		||||
		DDRD:  0x2a, // Port D Data Direction Register
 | 
			
		||||
		PIND:  0x29, // Port D Input Pins
 | 
			
		||||
		PORTE: 0x2e, // Data Register, Port E
 | 
			
		||||
		DDRE:  0x2d, // Data Direction Register, Port E
 | 
			
		||||
		PINE:  0x2c, // Input Pins, Port E
 | 
			
		||||
		PORTF: 0x31, // Data Register, Port F
 | 
			
		||||
		DDRF:  0x30, // Data Direction Register, Port F
 | 
			
		||||
		PINF:  0x2f, // Input Pins, Port F
 | 
			
		||||
		PORTG: 0x34, // Port G Data Register
 | 
			
		||||
		DDRG:  0x33, // Port G Data Direction Register
 | 
			
		||||
		PING:  0x32, // Port G Input Pins
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	// Analog Comparator
 | 
			
		||||
	AC = struct {
 | 
			
		||||
		ACSR  __reg
 | 
			
		||||
		DIDR1 __reg
 | 
			
		||||
	}{
 | 
			
		||||
		ACSR:  0x50, // Analog Comparator Control And Status Register
 | 
			
		||||
		DIDR1: 0x7f, // Digital Input Disable Register 1
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	// JTAG Interface
 | 
			
		||||
	JTAG = struct {
 | 
			
		||||
		OCDR __reg
 | 
			
		||||
	}{
 | 
			
		||||
		OCDR: 0x51, // On-Chip Debug Related Register in I/O Memory
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	// Liquid Crystal Display
 | 
			
		||||
	LCD = struct {
 | 
			
		||||
		LCDCRA  __reg
 | 
			
		||||
		LCDCRB  __reg
 | 
			
		||||
		LCDFRR  __reg
 | 
			
		||||
		LCDCCR  __reg
 | 
			
		||||
		LCDDR18 __reg
 | 
			
		||||
		LCDDR17 __reg
 | 
			
		||||
		LCDDR16 __reg
 | 
			
		||||
		LCDDR15 __reg
 | 
			
		||||
		LCDDR13 __reg
 | 
			
		||||
		LCDDR12 __reg
 | 
			
		||||
		LCDDR11 __reg
 | 
			
		||||
		LCDDR10 __reg
 | 
			
		||||
		LCDDR8  __reg
 | 
			
		||||
		LCDDR7  __reg
 | 
			
		||||
		LCDDR6  __reg
 | 
			
		||||
		LCDDR5  __reg
 | 
			
		||||
		LCDDR3  __reg
 | 
			
		||||
		LCDDR2  __reg
 | 
			
		||||
		LCDDR1  __reg
 | 
			
		||||
		LCDDR0  __reg
 | 
			
		||||
	}{
 | 
			
		||||
		LCDCRA:  0xe4, // LCD Control Register A
 | 
			
		||||
		LCDCRB:  0xe5, // LCD Control and Status Register B
 | 
			
		||||
		LCDFRR:  0xe6, // LCD Frame Rate Register
 | 
			
		||||
		LCDCCR:  0xe7, // LCD Contrast Control Register
 | 
			
		||||
		LCDDR18: 0xfe, // LCD Data Register 18
 | 
			
		||||
		LCDDR17: 0xfd, // LCD Data Register 17
 | 
			
		||||
		LCDDR16: 0xfc, // LCD Data Register 16
 | 
			
		||||
		LCDDR15: 0xfb, // LCD Data Register 15
 | 
			
		||||
		LCDDR13: 0xf9, // LCD Data Register 13
 | 
			
		||||
		LCDDR12: 0xf8, // LCD Data Register 12
 | 
			
		||||
		LCDDR11: 0xf7, // LCD Data Register 11
 | 
			
		||||
		LCDDR10: 0xf6, // LCD Data Register 10
 | 
			
		||||
		LCDDR8:  0xf4, // LCD Data Register 8
 | 
			
		||||
		LCDDR7:  0xf3, // LCD Data Register 7
 | 
			
		||||
		LCDDR6:  0xf2, // LCD Data Register 6
 | 
			
		||||
		LCDDR5:  0xf1, // LCD Data Register 5
 | 
			
		||||
		LCDDR3:  0xef, // LCD Data Register 3
 | 
			
		||||
		LCDDR2:  0xee, // LCD Data Register 2
 | 
			
		||||
		LCDDR1:  0xed, // LCD Data Register 1
 | 
			
		||||
		LCDDR0:  0xec, // LCD Data Register 0
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	// Universal Serial Interface
 | 
			
		||||
	USI = struct {
 | 
			
		||||
		USIDR __reg
 | 
			
		||||
		USISR __reg
 | 
			
		||||
		USICR __reg
 | 
			
		||||
	}{
 | 
			
		||||
		USIDR: 0xba, // USI Data Register
 | 
			
		||||
		USISR: 0xb9, // USI Status Register
 | 
			
		||||
		USICR: 0xb8, // USI Control Register
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	// Analog-to-Digital Converter
 | 
			
		||||
	ADC = struct {
 | 
			
		||||
		ADMUX  __reg
 | 
			
		||||
		ADCSRA __reg
 | 
			
		||||
		ADCL   __reg
 | 
			
		||||
		ADCH   __reg
 | 
			
		||||
		DIDR0  __reg
 | 
			
		||||
	}{
 | 
			
		||||
		ADMUX:  0x7c, // The ADC multiplexer Selection Register
 | 
			
		||||
		ADCSRA: 0x7a, // The ADC Control and Status register
 | 
			
		||||
		ADCL:   0x78, // ADC Data Register Bytes
 | 
			
		||||
		ADCH:   0x78, // ADC Data Register Bytes
 | 
			
		||||
		DIDR0:  0x7e, // Digital Input Disable Register 0
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	// Bootloader
 | 
			
		||||
	BOOT_LOAD = struct {
 | 
			
		||||
		SPMCSR __reg
 | 
			
		||||
	}{
 | 
			
		||||
		SPMCSR: 0x57, // Store Program Memory Control Register
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	// USART
 | 
			
		||||
	USART = struct {
 | 
			
		||||
		UDR0   __reg
 | 
			
		||||
		UCSR0A __reg
 | 
			
		||||
		UCSR0B __reg
 | 
			
		||||
		UCSR0C __reg
 | 
			
		||||
		UBRR0L __reg
 | 
			
		||||
		UBRR0H __reg
 | 
			
		||||
	}{
 | 
			
		||||
		UDR0:   0xc6, // USART I/O Data Register
 | 
			
		||||
		UCSR0A: 0xc0, // USART Control and Status Register A
 | 
			
		||||
		UCSR0B: 0xc1, // USART Control and Status Register B
 | 
			
		||||
		UCSR0C: 0xc2, // USART Control and Status Register C
 | 
			
		||||
		UBRR0L: 0xc4, // USART Baud Rate Register Bytes
 | 
			
		||||
		UBRR0H: 0xc4, // USART Baud Rate Register Bytes
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	// External Interrupts
 | 
			
		||||
	EXINT = struct {
 | 
			
		||||
		EICRA  __reg
 | 
			
		||||
		EIMSK  __reg
 | 
			
		||||
		EIFR   __reg
 | 
			
		||||
		PCMSK1 __reg
 | 
			
		||||
		PCMSK0 __reg
 | 
			
		||||
	}{
 | 
			
		||||
		EICRA:  0x69, // External Interrupt Control Register
 | 
			
		||||
		EIMSK:  0x3d, // External Interrupt Mask Register
 | 
			
		||||
		EIFR:   0x3c, // External Interrupt Flag Register
 | 
			
		||||
		PCMSK1: 0x6c, // Pin Change Mask Register 1
 | 
			
		||||
		PCMSK0: 0x6b, // Pin Change Mask Register 0
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	// CPU Registers
 | 
			
		||||
	CPU = struct {
 | 
			
		||||
		SREG   __reg
 | 
			
		||||
		SPL    __reg
 | 
			
		||||
		SPH    __reg
 | 
			
		||||
		OSCCAL __reg
 | 
			
		||||
		CLKPR  __reg
 | 
			
		||||
		PRR    __reg
 | 
			
		||||
		SMCR   __reg
 | 
			
		||||
		GPIOR2 __reg
 | 
			
		||||
		GPIOR1 __reg
 | 
			
		||||
		GPIOR0 __reg
 | 
			
		||||
	}{
 | 
			
		||||
		SREG:   0x5f, // Status Register
 | 
			
		||||
		SPL:    0x5d, // Stack Pointer
 | 
			
		||||
		SPH:    0x5d, // Stack Pointer
 | 
			
		||||
		OSCCAL: 0x66, // Oscillator Calibration Value
 | 
			
		||||
		CLKPR:  0x61, // Clock Prescale Register
 | 
			
		||||
		PRR:    0x64, // Power Reduction Register
 | 
			
		||||
		SMCR:   0x53, // Sleep Mode Control Register
 | 
			
		||||
		GPIOR2: 0x4b, // General Purpose IO Register 2
 | 
			
		||||
		GPIOR1: 0x4a, // General Purpose IO Register 1
 | 
			
		||||
		GPIOR0: 0x3e, // General Purpose IO Register 0
 | 
			
		||||
	}
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
// Bitfields for FUSE: Fuses
 | 
			
		||||
const (
 | 
			
		||||
	// EXTENDED
 | 
			
		||||
	EXTENDED_BODLEVEL = 0xe // Brown-out Detector trigger level
 | 
			
		||||
	EXTENDED_RSTDISBL = 0x1 // Disable external reset
 | 
			
		||||
 | 
			
		||||
	// HIGH
 | 
			
		||||
	HIGH_OCDEN   = 0x80 // On-Chip Debug Enabled
 | 
			
		||||
	HIGH_JTAGEN  = 0x40 // JTAG Interface Enabled
 | 
			
		||||
	HIGH_SPIEN   = 0x20 // Serial program downloading (SPI) enabled
 | 
			
		||||
	HIGH_WDTON   = 0x10 // Watchdog timer always on
 | 
			
		||||
	HIGH_EESAVE  = 0x8  // Preserve EEPROM through the Chip Erase cycle
 | 
			
		||||
	HIGH_BOOTSZ  = 0x6  // Select Boot Size
 | 
			
		||||
	HIGH_BOOTRST = 0x1  // Boot Reset vector Enabled
 | 
			
		||||
 | 
			
		||||
	// LOW
 | 
			
		||||
	LOW_CKDIV8    = 0x80 // Divide clock by 8 internally
 | 
			
		||||
	LOW_CKOUT     = 0x40 // Clock output on PORTE7
 | 
			
		||||
	LOW_SUT_CKSEL = 0x3f // Select Clock Source
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
// Bitfields for LOCKBIT: Lockbits
 | 
			
		||||
const (
 | 
			
		||||
	// LOCKBIT
 | 
			
		||||
	LOCKBIT_LB   = 0x3  // Memory Lock
 | 
			
		||||
	LOCKBIT_BLB0 = 0xc  // Boot Loader Protection Mode
 | 
			
		||||
	LOCKBIT_BLB1 = 0x30 // Boot Loader Protection Mode
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
// Bitfields for TC8: Timer/Counter, 8-bit
 | 
			
		||||
const (
 | 
			
		||||
	// TCCR0A: Timer/Counter0 Control Register
 | 
			
		||||
	TCCR0A_FOC0A = 0x80 // Force Output Compare
 | 
			
		||||
	TCCR0A_WGM00 = 0x40 // Waveform Generation Mode 0
 | 
			
		||||
	TCCR0A_COM0A = 0x30 // Compare Match Output Modes
 | 
			
		||||
	TCCR0A_WGM01 = 0x8  // Waveform Generation Mode 1
 | 
			
		||||
	TCCR0A_CS0   = 0x7  // Clock Selects
 | 
			
		||||
 | 
			
		||||
	// TCNT0: Timer/Counter0
 | 
			
		||||
	TCNT0_TCNT0 = 0xff // Timer/Counter0 bits
 | 
			
		||||
 | 
			
		||||
	// OCR0A: Timer/Counter0 Output Compare Register
 | 
			
		||||
	OCR0A_OCR0A = 0xff // Timer/Counter0 Output Compare A
 | 
			
		||||
 | 
			
		||||
	// TIMSK0: Timer/Counter0 Interrupt Mask Register
 | 
			
		||||
	TIMSK0_OCIE0A = 0x2 // Timer/Counter0 Output Compare Match Interrupt Enable
 | 
			
		||||
	TIMSK0_TOIE0  = 0x1 // Timer/Counter0 Overflow Interrupt Enable
 | 
			
		||||
 | 
			
		||||
	// TIFR0: Timer/Counter0 Interrupt Flag register
 | 
			
		||||
	TIFR0_OCF0A = 0x2 // Timer/Counter0 Output Compare Flag 0
 | 
			
		||||
	TIFR0_TOV0  = 0x1 // Timer/Counter0 Overflow Flag
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
// Bitfields for TC16: Timer/Counter, 16-bit
 | 
			
		||||
const (
 | 
			
		||||
	// TCCR1A: Timer/Counter1 Control Register A
 | 
			
		||||
	TCCR1A_COM1A = 0xc0 // Compare Output Mode 1A, bits
 | 
			
		||||
	TCCR1A_COM1B = 0x30 // Compare Output Mode 1B, bits
 | 
			
		||||
	TCCR1A_WGM1  = 0x3  // Waveform Generation Mode
 | 
			
		||||
 | 
			
		||||
	// TCCR1B: Timer/Counter1 Control Register B
 | 
			
		||||
	TCCR1B_ICNC1 = 0x80 // Input Capture 1 Noise Canceler
 | 
			
		||||
	TCCR1B_ICES1 = 0x40 // Input Capture 1 Edge Select
 | 
			
		||||
	TCCR1B_WGM1  = 0x18 // Waveform Generation Mode
 | 
			
		||||
	TCCR1B_CS1   = 0x7  // Prescaler source of Timer/Counter 1
 | 
			
		||||
 | 
			
		||||
	// TCCR1C: Timer/Counter 1 Control Register C
 | 
			
		||||
	TCCR1C_FOC1A = 0x80 // Force Output Compare 1A
 | 
			
		||||
	TCCR1C_FOC1B = 0x40 // Force Output Compare 1B
 | 
			
		||||
 | 
			
		||||
	// TCNT1L: Timer/Counter1  Bytes
 | 
			
		||||
 | 
			
		||||
	// TCNT1H: Timer/Counter1  Bytes
 | 
			
		||||
	TCNT1_TCNT1 = 0xffff // Timer/Counter1 bits
 | 
			
		||||
 | 
			
		||||
	// OCR1AL: Timer/Counter1 Output Compare Register A Bytes
 | 
			
		||||
 | 
			
		||||
	// OCR1AH: Timer/Counter1 Output Compare Register A Bytes
 | 
			
		||||
	OCR1A_OCR1A = 0xffff // Timer/Counter1 Output Compare A
 | 
			
		||||
 | 
			
		||||
	// OCR1BL: Timer/Counter1 Output Compare Register B Bytes
 | 
			
		||||
 | 
			
		||||
	// OCR1BH: Timer/Counter1 Output Compare Register B Bytes
 | 
			
		||||
	OCR1B_OCR1B = 0xffff // Timer/Counter1 Output Compare B
 | 
			
		||||
 | 
			
		||||
	// ICR1L: Timer/Counter1 Input Capture Register Bytes
 | 
			
		||||
 | 
			
		||||
	// ICR1H: Timer/Counter1 Input Capture Register Bytes
 | 
			
		||||
	ICR1_ICR1 = 0xffff // Timer/Counter1 Input Capture
 | 
			
		||||
 | 
			
		||||
	// TIMSK1: Timer/Counter1 Interrupt Mask Register
 | 
			
		||||
	TIMSK1_ICIE1  = 0x20 // Timer/Counter1 Input Capture Interrupt Enable
 | 
			
		||||
	TIMSK1_OCIE1B = 0x4  // Timer/Counter1 Output Compare B Match Interrupt Enable
 | 
			
		||||
	TIMSK1_OCIE1A = 0x2  // Timer/Counter1 Output Compare A Match Interrupt Enable
 | 
			
		||||
	TIMSK1_TOIE1  = 0x1  // Timer/Counter1 Overflow Interrupt Enable
 | 
			
		||||
 | 
			
		||||
	// TIFR1: Timer/Counter1 Interrupt Flag register
 | 
			
		||||
	TIFR1_ICF1  = 0x20 // Input Capture Flag 1
 | 
			
		||||
	TIFR1_OCF1B = 0x4  // Output Compare Flag 1B
 | 
			
		||||
	TIFR1_OCF1A = 0x2  // Output Compare Flag 1A
 | 
			
		||||
	TIFR1_TOV1  = 0x1  // Timer/Counter1 Overflow Flag
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
// Bitfields for TC8_ASYNC: Timer/Counter, 8-bit Async
 | 
			
		||||
const (
 | 
			
		||||
	// TCCR2A: Timer/Counter2 Control Register
 | 
			
		||||
	TCCR2A_FOC2A = 0x80 // Force Output Compare A
 | 
			
		||||
	TCCR2A_WGM20 = 0x40 // Waveform Generation Mode
 | 
			
		||||
	TCCR2A_COM2A = 0x30 // Compare Output Mode bits
 | 
			
		||||
	TCCR2A_WGM21 = 0x8  // Waveform Generation Mode
 | 
			
		||||
	TCCR2A_CS2   = 0x7  // Clock Select bits
 | 
			
		||||
 | 
			
		||||
	// TCNT2: Timer/Counter2
 | 
			
		||||
	TCNT2_TCNT2 = 0xff // Timer/Counter2 bits
 | 
			
		||||
 | 
			
		||||
	// OCR2A: Timer/Counter2 Output Compare Register
 | 
			
		||||
	OCR2A_OCR2A = 0xff // Timer/Counter2 Output Compare A
 | 
			
		||||
 | 
			
		||||
	// TIMSK2: Timer/Counter2 Interrupt Mask register
 | 
			
		||||
	TIMSK2_OCIE2A = 0x2 // Timer/Counter2 Output Compare Match Interrupt Enable
 | 
			
		||||
	TIMSK2_TOIE2  = 0x1 // Timer/Counter2 Overflow Interrupt Enable
 | 
			
		||||
 | 
			
		||||
	// TIFR2: Timer/Counter2 Interrupt Flag Register
 | 
			
		||||
	TIFR2_OCF2A = 0x2 // Timer/Counter2 Output Compare Flag 2
 | 
			
		||||
	TIFR2_TOV2  = 0x1 // Timer/Counter2 Overflow Flag
 | 
			
		||||
 | 
			
		||||
	// ASSR: Asynchronous Status Register
 | 
			
		||||
	ASSR_EXCLK  = 0x10 // Enable External Clock Interrupt
 | 
			
		||||
	ASSR_AS2    = 0x8  // AS2: Asynchronous Timer/Counter2
 | 
			
		||||
	ASSR_TCN2UB = 0x4  // TCN2UB: Timer/Counter2 Update Busy
 | 
			
		||||
	ASSR_OCR2UB = 0x2  // Output Compare Register2 Update Busy
 | 
			
		||||
	ASSR_TCR2UB = 0x1  // TCR2UB: Timer/Counter Control Register2 Update Busy
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
// Bitfields for WDT: Watchdog Timer
 | 
			
		||||
const (
 | 
			
		||||
	// WDTCR: Watchdog Timer Control Register
 | 
			
		||||
	WDTCR_WDCE = 0x10 // Watchdog Change Enable
 | 
			
		||||
	WDTCR_WDE  = 0x8  // Watch Dog Enable
 | 
			
		||||
	WDTCR_WDP  = 0x7  // Watch Dog Timer Prescaler bits
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
// Bitfields for EEPROM: EEPROM
 | 
			
		||||
const (
 | 
			
		||||
	// EEARL: EEPROM Address Register Bytes
 | 
			
		||||
 | 
			
		||||
	// EEARH: EEPROM Address Register Bytes
 | 
			
		||||
	EEAR_EEAR = 0x1ff // EEPROM Address Bits
 | 
			
		||||
 | 
			
		||||
	// EEDR: EEPROM Data Register
 | 
			
		||||
	EEDR_EEDR = 0xff // EEPROM Data Bits
 | 
			
		||||
 | 
			
		||||
	// EECR: EEPROM Control Register
 | 
			
		||||
	EECR_EERIE = 0x8 // EEPROM Ready Interrupt Enable
 | 
			
		||||
	EECR_EEMWE = 0x4 // EEPROM Master Write Enable
 | 
			
		||||
	EECR_EEWE  = 0x2 // EEPROM Write Enable
 | 
			
		||||
	EECR_EERE  = 0x1 // EEPROM Read Enable
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
// Bitfields for SPI: Serial Peripheral Interface
 | 
			
		||||
const (
 | 
			
		||||
	// SPCR: SPI Control Register
 | 
			
		||||
	SPCR_SPIE = 0x80 // SPI Interrupt Enable
 | 
			
		||||
	SPCR_SPE  = 0x40 // SPI Enable
 | 
			
		||||
	SPCR_DORD = 0x20 // Data Order
 | 
			
		||||
	SPCR_MSTR = 0x10 // Master/Slave Select
 | 
			
		||||
	SPCR_CPOL = 0x8  // Clock polarity
 | 
			
		||||
	SPCR_CPHA = 0x4  // Clock Phase
 | 
			
		||||
	SPCR_SPR  = 0x3  // SPI Clock Rate Selects
 | 
			
		||||
 | 
			
		||||
	// SPSR: SPI Status Register
 | 
			
		||||
	SPSR_SPIF  = 0x80 // SPI Interrupt Flag
 | 
			
		||||
	SPSR_WCOL  = 0x40 // Write Collision Flag
 | 
			
		||||
	SPSR_SPI2X = 0x1  // Double SPI Speed Bit
 | 
			
		||||
 | 
			
		||||
	// SPDR: SPI Data Register
 | 
			
		||||
	SPDR_SPDR = 0xff // SPI Data bits
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
// Bitfields for AC: Analog Comparator
 | 
			
		||||
const (
 | 
			
		||||
	// ACSR: Analog Comparator Control And Status Register
 | 
			
		||||
	ACSR_ACD  = 0x80 // Analog Comparator Disable
 | 
			
		||||
	ACSR_ACBG = 0x40 // Analog Comparator Bandgap Select
 | 
			
		||||
	ACSR_ACO  = 0x20 // Analog Compare Output
 | 
			
		||||
	ACSR_ACI  = 0x10 // Analog Comparator Interrupt Flag
 | 
			
		||||
	ACSR_ACIE = 0x8  // Analog Comparator Interrupt Enable
 | 
			
		||||
	ACSR_ACIC = 0x4  // Analog Comparator Input Capture Enable
 | 
			
		||||
	ACSR_ACIS = 0x3  // Analog Comparator Interrupt Mode Select bits
 | 
			
		||||
 | 
			
		||||
	// DIDR1: Digital Input Disable Register 1
 | 
			
		||||
	DIDR1_AIN1D = 0x2 // AIN1 Digital Input Disable
 | 
			
		||||
	DIDR1_AIN0D = 0x1 // AIN0 Digital Input Disable
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
// Bitfields for LCD: Liquid Crystal Display
 | 
			
		||||
const (
 | 
			
		||||
	// LCDCRA: LCD Control Register A
 | 
			
		||||
	LCDCRA_LCDEN  = 0x80 // LCD Enable
 | 
			
		||||
	LCDCRA_LCDAB  = 0x40 // LCD A or B waveform
 | 
			
		||||
	LCDCRA_LCDIF  = 0x10 // LCD Interrupt Flag
 | 
			
		||||
	LCDCRA_LCDIE  = 0x8  // LCD Interrupt Enable
 | 
			
		||||
	LCDCRA_LCDBD  = 0x4  // LCD Buffer Disable
 | 
			
		||||
	LCDCRA_LCDCCD = 0x2  // LCD Contrast Control Disable
 | 
			
		||||
	LCDCRA_LCDBL  = 0x1  // LCD Blanking
 | 
			
		||||
 | 
			
		||||
	// LCDCRB: LCD Control and Status Register B
 | 
			
		||||
	LCDCRB_LCDCS  = 0x80 // LCD CLock Select
 | 
			
		||||
	LCDCRB_LCD2B  = 0x40 // LCD 1/2 Bias Select
 | 
			
		||||
	LCDCRB_LCDMUX = 0x30 // LCD Mux Selects
 | 
			
		||||
	LCDCRB_LCDPM  = 0x7  // LCD Port Masks
 | 
			
		||||
 | 
			
		||||
	// LCDFRR: LCD Frame Rate Register
 | 
			
		||||
	LCDFRR_LCDPS = 0x70 // LCD Prescaler Selects
 | 
			
		||||
	LCDFRR_LCDCD = 0x7  // LCD Clock Dividers
 | 
			
		||||
 | 
			
		||||
	// LCDCCR: LCD Contrast Control Register
 | 
			
		||||
	LCDCCR_LCDDC  = 0xe0 // LCD Display Configuration Bits
 | 
			
		||||
	LCDCCR_LCDMDT = 0x10 // LCD Maximum Drive Time
 | 
			
		||||
	LCDCCR_LCDCC  = 0xf  // LCD Contrast Controls
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
// Bitfields for USI: Universal Serial Interface
 | 
			
		||||
const (
 | 
			
		||||
	// USIDR: USI Data Register
 | 
			
		||||
	USIDR_USIDR = 0xff // USI Data bits
 | 
			
		||||
 | 
			
		||||
	// USISR: USI Status Register
 | 
			
		||||
	USISR_USISIF = 0x80 // Start Condition Interrupt Flag
 | 
			
		||||
	USISR_USIOIF = 0x40 // Counter Overflow Interrupt Flag
 | 
			
		||||
	USISR_USIPF  = 0x20 // Stop Condition Flag
 | 
			
		||||
	USISR_USIDC  = 0x10 // Data Output Collision
 | 
			
		||||
	USISR_USICNT = 0xf  // USI Counter Value Bits
 | 
			
		||||
 | 
			
		||||
	// USICR: USI Control Register
 | 
			
		||||
	USICR_USISIE = 0x80 // Start Condition Interrupt Enable
 | 
			
		||||
	USICR_USIOIE = 0x40 // Counter Overflow Interrupt Enable
 | 
			
		||||
	USICR_USIWM  = 0x30 // USI Wire Mode Bits
 | 
			
		||||
	USICR_USICS  = 0xc  // USI Clock Source Select Bits
 | 
			
		||||
	USICR_USICLK = 0x2  // Clock Strobe
 | 
			
		||||
	USICR_USITC  = 0x1  // Toggle Clock Port Pin
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
// Bitfields for ADC: Analog-to-Digital Converter
 | 
			
		||||
const (
 | 
			
		||||
	// ADMUX: The ADC multiplexer Selection Register
 | 
			
		||||
	ADMUX_REFS  = 0xc0 // Reference Selection Bits
 | 
			
		||||
	ADMUX_ADLAR = 0x20 // Left Adjust Result
 | 
			
		||||
	ADMUX_MUX   = 0x1f // Analog Channel and Gain Selection Bits
 | 
			
		||||
 | 
			
		||||
	// ADCSRA: The ADC Control and Status register
 | 
			
		||||
	ADCSRA_ADEN  = 0x80 // ADC Enable
 | 
			
		||||
	ADCSRA_ADSC  = 0x40 // ADC Start Conversion
 | 
			
		||||
	ADCSRA_ADATE = 0x20 // ADC Auto Trigger Enable
 | 
			
		||||
	ADCSRA_ADIF  = 0x10 // ADC Interrupt Flag
 | 
			
		||||
	ADCSRA_ADIE  = 0x8  // ADC Interrupt Enable
 | 
			
		||||
	ADCSRA_ADPS  = 0x7  // ADC Prescaler Select Bits
 | 
			
		||||
 | 
			
		||||
	// ADCL: ADC Data Register Bytes
 | 
			
		||||
 | 
			
		||||
	// ADCH: ADC Data Register Bytes
 | 
			
		||||
	ADC_ADC = 0x3ff // ADC Data Bits
 | 
			
		||||
 | 
			
		||||
	// DIDR0: Digital Input Disable Register 0
 | 
			
		||||
	DIDR0_ADC7D = 0x80 // ADC7 Digital input Disable
 | 
			
		||||
	DIDR0_ADC6D = 0x40 // ADC6 Digital input Disable
 | 
			
		||||
	DIDR0_ADC5D = 0x20 // ADC5 Digital input Disable
 | 
			
		||||
	DIDR0_ADC4D = 0x10 // ADC4 Digital input Disable
 | 
			
		||||
	DIDR0_ADC3D = 0x8  // ADC3 Digital input Disable
 | 
			
		||||
	DIDR0_ADC2D = 0x4  // ADC2 Digital input Disable
 | 
			
		||||
	DIDR0_ADC1D = 0x2  // ADC1 Digital input Disable
 | 
			
		||||
	DIDR0_ADC0D = 0x1  // ADC0 Digital input Disable
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
// Bitfields for BOOT_LOAD: Bootloader
 | 
			
		||||
const (
 | 
			
		||||
	// SPMCSR: Store Program Memory Control Register
 | 
			
		||||
	SPMCSR_SPMIE  = 0x80 // SPM Interrupt Enable
 | 
			
		||||
	SPMCSR_RWWSB  = 0x40 // Read While Write Section Busy
 | 
			
		||||
	SPMCSR_RWWSRE = 0x10 // Read While Write section read enable
 | 
			
		||||
	SPMCSR_BLBSET = 0x8  // Boot Lock Bit Set
 | 
			
		||||
	SPMCSR_PGWRT  = 0x4  // Page Write
 | 
			
		||||
	SPMCSR_PGERS  = 0x2  // Page Erase
 | 
			
		||||
	SPMCSR_SPMEN  = 0x1  // Store Program Memory Enable
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
// Bitfields for USART: USART
 | 
			
		||||
const (
 | 
			
		||||
	// UDR0: USART I/O Data Register
 | 
			
		||||
	UDR0_UDR0 = 0xff // USART I/O Data bits
 | 
			
		||||
 | 
			
		||||
	// UCSR0A: USART Control and Status Register A
 | 
			
		||||
	UCSR0A_RXC0  = 0x80 // USART Receive Complete
 | 
			
		||||
	UCSR0A_TXC0  = 0x40 // USART Transmit Complete
 | 
			
		||||
	UCSR0A_UDRE0 = 0x20 // USART Data Register Empty
 | 
			
		||||
	UCSR0A_FE0   = 0x10 // Framing Error
 | 
			
		||||
	UCSR0A_DOR0  = 0x8  // Data OverRun
 | 
			
		||||
	UCSR0A_UPE0  = 0x4  // USART Parity Error
 | 
			
		||||
	UCSR0A_U2X0  = 0x2  // Double the USART Transmission Speed
 | 
			
		||||
	UCSR0A_MPCM0 = 0x1  // Multi-processor Communication Mode
 | 
			
		||||
 | 
			
		||||
	// UCSR0B: USART Control and Status Register B
 | 
			
		||||
	UCSR0B_RXCIE0 = 0x80 // RX Complete Interrupt Enable
 | 
			
		||||
	UCSR0B_TXCIE0 = 0x40 // TX Complete Interrupt Enable
 | 
			
		||||
	UCSR0B_UDRIE0 = 0x20 // USART Data Register Empty Interrupt Enable
 | 
			
		||||
	UCSR0B_RXEN0  = 0x10 // Receiver Enable
 | 
			
		||||
	UCSR0B_TXEN0  = 0x8  // Transmitter Enable
 | 
			
		||||
	UCSR0B_UCSZ02 = 0x4  // Character Size
 | 
			
		||||
	UCSR0B_RXB80  = 0x2  // Receive Data Bit 8
 | 
			
		||||
	UCSR0B_TXB80  = 0x1  // Transmit Data Bit 8
 | 
			
		||||
 | 
			
		||||
	// UCSR0C: USART Control and Status Register C
 | 
			
		||||
	UCSR0C_UMSEL0 = 0x40 // USART Mode Select
 | 
			
		||||
	UCSR0C_UPM0   = 0x30 // Parity Mode Bits
 | 
			
		||||
	UCSR0C_USBS0  = 0x8  // Stop Bit Select
 | 
			
		||||
	UCSR0C_UCSZ0  = 0x6  // Character Size
 | 
			
		||||
	UCSR0C_UCPOL0 = 0x1  // Clock Polarity
 | 
			
		||||
 | 
			
		||||
	// UBRR0L: USART Baud Rate Register Bytes
 | 
			
		||||
 | 
			
		||||
	// UBRR0H: USART Baud Rate Register Bytes
 | 
			
		||||
	UBRR0_UBRR0 = 0xfff // USART Baud Rate bits
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
// Bitfields for EXINT: External Interrupts
 | 
			
		||||
const (
 | 
			
		||||
	// EICRA: External Interrupt Control Register
 | 
			
		||||
	EICRA_ISC01 = 0x2 // External Interrupt Sense Control 0 Bit 1
 | 
			
		||||
	EICRA_ISC00 = 0x1 // External Interrupt Sense Control 0 Bit 0
 | 
			
		||||
 | 
			
		||||
	// EIMSK: External Interrupt Mask Register
 | 
			
		||||
	EIMSK_PCIE = 0x30 // Pin Change Interrupt Enables
 | 
			
		||||
	EIMSK_INT0 = 0x1  // External Interrupt Request 0 Enable
 | 
			
		||||
 | 
			
		||||
	// EIFR: External Interrupt Flag Register
 | 
			
		||||
	EIFR_PCIF  = 0x30 // Pin Change Interrupt Flags
 | 
			
		||||
	EIFR_INTF0 = 0x1  // External Interrupt Flag 0
 | 
			
		||||
 | 
			
		||||
	// PCMSK1: Pin Change Mask Register 1
 | 
			
		||||
	PCMSK1_PCINT = 0xff // Pin Change Enable Masks
 | 
			
		||||
 | 
			
		||||
	// PCMSK0: Pin Change Mask Register 0
 | 
			
		||||
	PCMSK0_PCINT = 0xff // Pin Change Enable Masks
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
// Bitfields for CPU: CPU Registers
 | 
			
		||||
const (
 | 
			
		||||
	// SREG: Status Register
 | 
			
		||||
	SREG_I = 0x80 // Global Interrupt Enable
 | 
			
		||||
	SREG_T = 0x40 // Bit Copy Storage
 | 
			
		||||
	SREG_H = 0x20 // Half Carry Flag
 | 
			
		||||
	SREG_S = 0x10 // Sign Bit
 | 
			
		||||
	SREG_V = 0x8  // Two's Complement Overflow Flag
 | 
			
		||||
	SREG_N = 0x4  // Negative Flag
 | 
			
		||||
	SREG_Z = 0x2  // Zero Flag
 | 
			
		||||
	SREG_C = 0x1  // Carry Flag
 | 
			
		||||
 | 
			
		||||
	// OSCCAL: Oscillator Calibration Value
 | 
			
		||||
	OSCCAL_OSCCAL = 0xff // Oscillator Calibration
 | 
			
		||||
 | 
			
		||||
	// CLKPR: Clock Prescale Register
 | 
			
		||||
	CLKPR_CLKPCE = 0x80 // Clock Prescaler Change Enable
 | 
			
		||||
	CLKPR_CLKPS  = 0xf  // Clock Prescaler Select Bits
 | 
			
		||||
 | 
			
		||||
	// PRR: Power Reduction Register
 | 
			
		||||
	PRR_PRLCD    = 0x10 // Power Reduction LCD
 | 
			
		||||
	PRR_PRTIM1   = 0x8  // Power Reduction Timer/Counter1
 | 
			
		||||
	PRR_PRSPI    = 0x4  // Power Reduction Serial Peripheral Interface
 | 
			
		||||
	PRR_PRUSART0 = 0x2  // Power Reduction USART
 | 
			
		||||
	PRR_PRADC    = 0x1  // Power Reduction ADC
 | 
			
		||||
 | 
			
		||||
	// SMCR: Sleep Mode Control Register
 | 
			
		||||
	SMCR_SM = 0xe // Sleep Mode Select bits
 | 
			
		||||
	SMCR_SE = 0x1 // Sleep Enable
 | 
			
		||||
 | 
			
		||||
	// GPIOR2: General Purpose IO Register 2
 | 
			
		||||
	GPIOR2_GPIOR2 = 0xff // General Purpose Bits
 | 
			
		||||
 | 
			
		||||
	// GPIOR1: General Purpose IO Register 1
 | 
			
		||||
	GPIOR1_GPIOR1 = 0xff // General Purpose Bits
 | 
			
		||||
 | 
			
		||||
	// GPIOR0: General Purpose IO Register 0
 | 
			
		||||
	GPIOR0_GPIOR0 = 0xff // General Purpose Bits
 | 
			
		||||
)
 | 
			
		||||
							
								
								
									
										6
									
								
								src/device/avr/atmega169pa.ld
									
										
									
									
									
										Обычный файл
									
								
							
							
						
						
									
										6
									
								
								src/device/avr/atmega169pa.ld
									
										
									
									
									
										Обычный файл
									
								
							| 
						 | 
				
			
			@ -0,0 +1,6 @@
 | 
			
		|||
/* Automatically generated file. DO NOT EDIT. */
 | 
			
		||||
/* Generated by gen-device.py from ATmega169PA.atdf, see http://packs.download.atmel.com/ */
 | 
			
		||||
 | 
			
		||||
__flash_size = 0x4000;
 | 
			
		||||
__ram_size   = 0x400;
 | 
			
		||||
__num_isrs   = 23;
 | 
			
		||||
							
								
								
									
										553
									
								
								src/device/avr/atmega16a.go
									
										
									
									
									
										Обычный файл
									
								
							
							
						
						
									
										553
									
								
								src/device/avr/atmega16a.go
									
										
									
									
									
										Обычный файл
									
								
							| 
						 | 
				
			
			@ -0,0 +1,553 @@
 | 
			
		|||
// Automatically generated file. DO NOT EDIT.
 | 
			
		||||
// Generated by gen-device.py from ATmega16A.atdf, see http://packs.download.atmel.com/
 | 
			
		||||
 | 
			
		||||
// +build avr,atmega16a
 | 
			
		||||
 | 
			
		||||
// Device information for the ATmega16A.
 | 
			
		||||
//
 | 
			
		||||
package avr
 | 
			
		||||
 | 
			
		||||
// Magic type name for the compiler.
 | 
			
		||||
type __reg uint8
 | 
			
		||||
 | 
			
		||||
// Export this magic type name.
 | 
			
		||||
type RegValue = __reg
 | 
			
		||||
 | 
			
		||||
// Some information about this device.
 | 
			
		||||
const (
 | 
			
		||||
	DEVICE = "ATmega16A"
 | 
			
		||||
	ARCH   = "AVR8"
 | 
			
		||||
	FAMILY = "megaAVR"
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
// Interrupts
 | 
			
		||||
const (
 | 
			
		||||
	IRQ_RESET        = 0  // External Pin, Power-on Reset, Brown-out Reset, Watchdog Reset and JTAG AVR Reset
 | 
			
		||||
	IRQ_INT0         = 1  // External Interrupt Request 0
 | 
			
		||||
	IRQ_INT1         = 2  // External Interrupt Request 1
 | 
			
		||||
	IRQ_TIMER2_COMP  = 3  // Timer/Counter2 Compare Match
 | 
			
		||||
	IRQ_TIMER2_OVF   = 4  // Timer/Counter2 Overflow
 | 
			
		||||
	IRQ_TIMER1_CAPT  = 5  // Timer/Counter1 Capture Event
 | 
			
		||||
	IRQ_TIMER1_COMPA = 6  // Timer/Counter1 Compare Match A
 | 
			
		||||
	IRQ_TIMER1_COMPB = 7  // Timer/Counter1 Compare Match B
 | 
			
		||||
	IRQ_TIMER1_OVF   = 8  // Timer/Counter1 Overflow
 | 
			
		||||
	IRQ_TIMER0_OVF   = 9  // Timer/Counter0 Overflow
 | 
			
		||||
	IRQ_SPI_STC      = 10 // Serial Transfer Complete
 | 
			
		||||
	IRQ_USART_RXC    = 11 // USART, Rx Complete
 | 
			
		||||
	IRQ_USART_UDRE   = 12 // USART Data Register Empty
 | 
			
		||||
	IRQ_USART_TXC    = 13 // USART, Tx Complete
 | 
			
		||||
	IRQ_ADC          = 14 // ADC Conversion Complete
 | 
			
		||||
	IRQ_EE_RDY       = 15 // EEPROM Ready
 | 
			
		||||
	IRQ_ANA_COMP     = 16 // Analog Comparator
 | 
			
		||||
	IRQ_TWI          = 17 // 2-wire Serial Interface
 | 
			
		||||
	IRQ_INT2         = 18 // External Interrupt Request 2
 | 
			
		||||
	IRQ_TIMER0_COMP  = 19 // Timer/Counter0 Compare Match
 | 
			
		||||
	IRQ_SPM_RDY      = 20 // Store Program Memory Ready
 | 
			
		||||
	IRQ_max          = 20 // Highest interrupt number on this device.
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
// Peripherals
 | 
			
		||||
var (
 | 
			
		||||
	// Fuses
 | 
			
		||||
	FUSE = struct {
 | 
			
		||||
		HIGH __reg
 | 
			
		||||
		LOW  __reg
 | 
			
		||||
	}{
 | 
			
		||||
		HIGH: 0x1,
 | 
			
		||||
		LOW:  0x0,
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	// Lockbits
 | 
			
		||||
	LOCKBIT = struct {
 | 
			
		||||
		LOCKBIT __reg
 | 
			
		||||
	}{
 | 
			
		||||
		LOCKBIT: 0x0,
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	// Timer/Counter, 8-bit
 | 
			
		||||
	TC8 = struct {
 | 
			
		||||
		TCCR0 __reg
 | 
			
		||||
		TCNT0 __reg
 | 
			
		||||
		OCR0  __reg
 | 
			
		||||
	}{
 | 
			
		||||
		TCCR0: 0x53, // Timer/Counter Control Register
 | 
			
		||||
		TCNT0: 0x52, // Timer/Counter 0 Register
 | 
			
		||||
		OCR0:  0x5c, // Output Compare 0 Register
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	// Timer/Counter, 16-bit
 | 
			
		||||
	TC16 = struct {
 | 
			
		||||
		TCCR1A __reg
 | 
			
		||||
		TCCR1B __reg
 | 
			
		||||
		TCNT1L __reg
 | 
			
		||||
		TCNT1H __reg
 | 
			
		||||
		OCR1AL __reg
 | 
			
		||||
		OCR1AH __reg
 | 
			
		||||
		OCR1BL __reg
 | 
			
		||||
		OCR1BH __reg
 | 
			
		||||
		ICR1L  __reg
 | 
			
		||||
		ICR1H  __reg
 | 
			
		||||
	}{
 | 
			
		||||
		TCCR1A: 0x4f, // Timer/Counter1 Control Register A
 | 
			
		||||
		TCCR1B: 0x4e, // Timer/Counter1 Control Register B
 | 
			
		||||
		TCNT1L: 0x4c, // Timer/Counter1 Bytes
 | 
			
		||||
		TCNT1H: 0x4c, // Timer/Counter1 Bytes
 | 
			
		||||
		OCR1AL: 0x4a, // Timer/Counter1 Output Compare Register Bytes
 | 
			
		||||
		OCR1AH: 0x4a, // Timer/Counter1 Output Compare Register Bytes
 | 
			
		||||
		OCR1BL: 0x48, // Timer/Counter1 Output Compare Register Bytes
 | 
			
		||||
		OCR1BH: 0x48, // Timer/Counter1 Output Compare Register Bytes
 | 
			
		||||
		ICR1L:  0x46, // Timer/Counter1 Input Capture Register Bytes
 | 
			
		||||
		ICR1H:  0x46, // Timer/Counter1 Input Capture Register Bytes
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	// External Interrupts
 | 
			
		||||
	EXINT = struct {
 | 
			
		||||
		GICR __reg
 | 
			
		||||
		GIFR __reg
 | 
			
		||||
	}{
 | 
			
		||||
		GICR: 0x5b, // General Interrupt Control Register
 | 
			
		||||
		GIFR: 0x5a, // General Interrupt Flag Register
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	// EEPROM
 | 
			
		||||
	EEPROM = struct {
 | 
			
		||||
		EEARL __reg
 | 
			
		||||
		EEARH __reg
 | 
			
		||||
		EEDR  __reg
 | 
			
		||||
		EECR  __reg
 | 
			
		||||
	}{
 | 
			
		||||
		EEARL: 0x3e, // EEPROM Address Register Bytes
 | 
			
		||||
		EEARH: 0x3e, // EEPROM Address Register Bytes
 | 
			
		||||
		EEDR:  0x3d, // EEPROM Data Register
 | 
			
		||||
		EECR:  0x3c, // EEPROM Control Register
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	// CPU Registers
 | 
			
		||||
	CPU = struct {
 | 
			
		||||
		SREG   __reg
 | 
			
		||||
		SPL    __reg
 | 
			
		||||
		SPH    __reg
 | 
			
		||||
		OSCCAL __reg
 | 
			
		||||
	}{
 | 
			
		||||
		SREG:   0x5f, // Status Register
 | 
			
		||||
		SPL:    0x5d, // Stack Pointer
 | 
			
		||||
		SPH:    0x5d, // Stack Pointer
 | 
			
		||||
		OSCCAL: 0x51, // Oscillator Calibration Value
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	// Timer/Counter, 8-bit Async
 | 
			
		||||
	TC8_ASYNC = struct {
 | 
			
		||||
		TCCR2 __reg
 | 
			
		||||
		TCNT2 __reg
 | 
			
		||||
		OCR2  __reg
 | 
			
		||||
		ASSR  __reg
 | 
			
		||||
	}{
 | 
			
		||||
		TCCR2: 0x45, // Timer/Counter2 Control Register
 | 
			
		||||
		TCNT2: 0x44, // Timer/Counter2
 | 
			
		||||
		OCR2:  0x43, // Timer/Counter2 Output Compare Register
 | 
			
		||||
		ASSR:  0x42, // Asynchronous Status Register
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	// Serial Peripheral Interface
 | 
			
		||||
	SPI = struct {
 | 
			
		||||
		SPDR __reg
 | 
			
		||||
		SPSR __reg
 | 
			
		||||
		SPCR __reg
 | 
			
		||||
	}{
 | 
			
		||||
		SPDR: 0x2f, // SPI Data Register
 | 
			
		||||
		SPSR: 0x2e, // SPI Status Register
 | 
			
		||||
		SPCR: 0x2d, // SPI Control Register
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	// USART
 | 
			
		||||
	USART = struct {
 | 
			
		||||
		UDR   __reg
 | 
			
		||||
		UCSRA __reg
 | 
			
		||||
		UCSRB __reg
 | 
			
		||||
		UCSRC __reg
 | 
			
		||||
		UBRRL __reg
 | 
			
		||||
		UBRRH __reg
 | 
			
		||||
	}{
 | 
			
		||||
		UDR:   0x2c, // USART I/O Data Register
 | 
			
		||||
		UCSRA: 0x2b, // USART Control and Status Register A
 | 
			
		||||
		UCSRB: 0x2a, // USART Control and Status Register B
 | 
			
		||||
		UCSRC: 0x40, // USART Control and Status Register C
 | 
			
		||||
		UBRRL: 0x3f, // USART Baud Rate Register
 | 
			
		||||
		UBRRH: 0x3f, // USART Baud Rate Register
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	// Two Wire Serial Interface
 | 
			
		||||
	TWI = struct {
 | 
			
		||||
		TWBR __reg
 | 
			
		||||
		TWCR __reg
 | 
			
		||||
		TWSR __reg
 | 
			
		||||
		TWDR __reg
 | 
			
		||||
		TWAR __reg
 | 
			
		||||
	}{
 | 
			
		||||
		TWBR: 0x20, // TWI Bit Rate register
 | 
			
		||||
		TWCR: 0x56, // TWI Control Register
 | 
			
		||||
		TWSR: 0x21, // TWI Status Register
 | 
			
		||||
		TWDR: 0x23, // TWI Data register
 | 
			
		||||
		TWAR: 0x22, // TWI (Slave) Address register
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	// Analog Comparator
 | 
			
		||||
	AC = struct {
 | 
			
		||||
		ACSR __reg
 | 
			
		||||
	}{
 | 
			
		||||
		ACSR: 0x28, // Analog Comparator Control And Status Register
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	// Analog-to-Digital Converter
 | 
			
		||||
	ADC = struct {
 | 
			
		||||
		ADMUX  __reg
 | 
			
		||||
		ADCSRA __reg
 | 
			
		||||
		ADCL   __reg
 | 
			
		||||
		ADCH   __reg
 | 
			
		||||
	}{
 | 
			
		||||
		ADMUX:  0x27, // The ADC multiplexer Selection Register
 | 
			
		||||
		ADCSRA: 0x26, // The ADC Control and Status register
 | 
			
		||||
		ADCL:   0x24, // ADC Data Register Bytes
 | 
			
		||||
		ADCH:   0x24, // ADC Data Register Bytes
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	// JTAG Interface
 | 
			
		||||
	JTAG = struct {
 | 
			
		||||
		OCDR __reg
 | 
			
		||||
	}{
 | 
			
		||||
		OCDR: 0x51, // On-Chip Debug Related Register in I/O Memory
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	// Bootloader
 | 
			
		||||
	BOOT_LOAD = struct {
 | 
			
		||||
		SPMCSR __reg
 | 
			
		||||
	}{
 | 
			
		||||
		SPMCSR: 0x57, // Store Program Memory Control Register
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	// I/O Port
 | 
			
		||||
	PORT = struct {
 | 
			
		||||
		PORTA __reg
 | 
			
		||||
		DDRA  __reg
 | 
			
		||||
		PINA  __reg
 | 
			
		||||
		PORTB __reg
 | 
			
		||||
		DDRB  __reg
 | 
			
		||||
		PINB  __reg
 | 
			
		||||
		PORTC __reg
 | 
			
		||||
		DDRC  __reg
 | 
			
		||||
		PINC  __reg
 | 
			
		||||
		PORTD __reg
 | 
			
		||||
		DDRD  __reg
 | 
			
		||||
		PIND  __reg
 | 
			
		||||
	}{
 | 
			
		||||
		PORTA: 0x3b, // Port A Data Register
 | 
			
		||||
		DDRA:  0x3a, // Port A Data Direction Register
 | 
			
		||||
		PINA:  0x39, // Port A Input Pins
 | 
			
		||||
		PORTB: 0x38, // Port B Data Register
 | 
			
		||||
		DDRB:  0x37, // Port B Data Direction Register
 | 
			
		||||
		PINB:  0x36, // Port B Input Pins
 | 
			
		||||
		PORTC: 0x35, // Port C Data Register
 | 
			
		||||
		DDRC:  0x34, // Port C Data Direction Register
 | 
			
		||||
		PINC:  0x33, // Port C Input Pins
 | 
			
		||||
		PORTD: 0x32, // Port D Data Register
 | 
			
		||||
		DDRD:  0x31, // Port D Data Direction Register
 | 
			
		||||
		PIND:  0x30, // Port D Input Pins
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	// Watchdog Timer
 | 
			
		||||
	WDT = struct {
 | 
			
		||||
		WDTCR __reg
 | 
			
		||||
	}{
 | 
			
		||||
		WDTCR: 0x41, // Watchdog Timer Control Register
 | 
			
		||||
	}
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
// Bitfields for FUSE: Fuses
 | 
			
		||||
const (
 | 
			
		||||
	// HIGH
 | 
			
		||||
	HIGH_OCDEN   = 0x80 // On-Chip Debug Enabled
 | 
			
		||||
	HIGH_JTAGEN  = 0x40 // JTAG Interface Enabled
 | 
			
		||||
	HIGH_SPIEN   = 0x20 // Serial program downloading (SPI) enabled
 | 
			
		||||
	HIGH_EESAVE  = 0x8  // Preserve EEPROM through the Chip Erase cycle
 | 
			
		||||
	HIGH_BOOTSZ  = 0x6  // Select Boot Size
 | 
			
		||||
	HIGH_BOOTRST = 0x1  // Boot Reset vector Enabled
 | 
			
		||||
	HIGH_CKOPT   = 0x10 // CKOPT fuse (operation dependent of CKSEL fuses)
 | 
			
		||||
 | 
			
		||||
	// LOW
 | 
			
		||||
	LOW_BODLEVEL  = 0x80 // Brownout detector trigger level
 | 
			
		||||
	LOW_BODEN     = 0x40 // Brown-out detection enabled
 | 
			
		||||
	LOW_SUT_CKSEL = 0x3f // Select Clock Source
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
// Bitfields for LOCKBIT: Lockbits
 | 
			
		||||
const (
 | 
			
		||||
	// LOCKBIT
 | 
			
		||||
	LOCKBIT_LB   = 0x3  // Memory Lock
 | 
			
		||||
	LOCKBIT_BLB0 = 0xc  // Boot Loader Protection Mode
 | 
			
		||||
	LOCKBIT_BLB1 = 0x30 // Boot Loader Protection Mode
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
// Bitfields for TC8: Timer/Counter, 8-bit
 | 
			
		||||
const (
 | 
			
		||||
	// TCCR0: Timer/Counter Control Register
 | 
			
		||||
	TCCR0_FOC0  = 0x80 // Force Output Compare
 | 
			
		||||
	TCCR0_WGM00 = 0x40 // Waveform Generation Mode 0
 | 
			
		||||
	TCCR0_COM0  = 0x30 // Compare Match Output Modes
 | 
			
		||||
	TCCR0_WGM01 = 0x8  // Waveform Generation Mode 1
 | 
			
		||||
	TCCR0_CS0   = 0x7  // Clock Selects
 | 
			
		||||
 | 
			
		||||
	// TCNT0: Timer/Counter 0 Register
 | 
			
		||||
	TCNT0_TCNT0 = 0xff // Timer/Counter 0 bits
 | 
			
		||||
 | 
			
		||||
	// OCR0: Output Compare 0 Register
 | 
			
		||||
	OCR0_OCR0 = 0xff // Output Compare bits
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
// Bitfields for TC16: Timer/Counter, 16-bit
 | 
			
		||||
const (
 | 
			
		||||
	// TCCR1A: Timer/Counter1 Control Register A
 | 
			
		||||
	TCCR1A_COM1A = 0xc0 // Compare Output Mode 1A, bits
 | 
			
		||||
	TCCR1A_COM1B = 0x30 // Compare Output Mode 1B, bits
 | 
			
		||||
	TCCR1A_FOC1A = 0x8  // Force Output Compare 1A
 | 
			
		||||
	TCCR1A_FOC1B = 0x4  // Force Output Compare 1B
 | 
			
		||||
	TCCR1A_WGM1  = 0x3  // Waveform Generation Mode
 | 
			
		||||
 | 
			
		||||
	// TCCR1B: Timer/Counter1 Control Register B
 | 
			
		||||
	TCCR1B_ICNC1 = 0x80 // Input Capture 1 Noise Canceler
 | 
			
		||||
	TCCR1B_ICES1 = 0x40 // Input Capture 1 Edge Select
 | 
			
		||||
	TCCR1B_WGM1  = 0x18 // Waveform Generation Mode
 | 
			
		||||
	TCCR1B_CS1   = 0x7  // Prescaler source of Timer/Counter 1
 | 
			
		||||
 | 
			
		||||
	// TCNT1L: Timer/Counter1 Bytes
 | 
			
		||||
 | 
			
		||||
	// TCNT1H: Timer/Counter1 Bytes
 | 
			
		||||
	TCNT1_TCNT1 = 0xffff // Timer/Counter1 bits
 | 
			
		||||
 | 
			
		||||
	// OCR1AL: Timer/Counter1 Output Compare Register Bytes
 | 
			
		||||
 | 
			
		||||
	// OCR1AH: Timer/Counter1 Output Compare Register Bytes
 | 
			
		||||
	OCR1A_OCR1A = 0xffff // Timer/Counter1 Output Compare A bits
 | 
			
		||||
 | 
			
		||||
	// OCR1BL: Timer/Counter1 Output Compare Register Bytes
 | 
			
		||||
 | 
			
		||||
	// OCR1BH: Timer/Counter1 Output Compare Register Bytes
 | 
			
		||||
	OCR1B_OCR1B = 0xffff // Timer/Counter1 Output Compare B bits
 | 
			
		||||
 | 
			
		||||
	// ICR1L: Timer/Counter1 Input Capture Register Bytes
 | 
			
		||||
 | 
			
		||||
	// ICR1H: Timer/Counter1 Input Capture Register Bytes
 | 
			
		||||
	ICR1_ICR1 = 0xffff // Timer/Counter1 Input Capture bits
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
// Bitfields for EXINT: External Interrupts
 | 
			
		||||
const (
 | 
			
		||||
	// GICR: General Interrupt Control Register
 | 
			
		||||
	GICR_INT0  = 0x40 // External Interrupt Request 0 Enable
 | 
			
		||||
	GICR_INT1  = 0x80 // External Interrupt Request 1 Enable
 | 
			
		||||
	GICR_INT2  = 0x20 // External Interrupt Request 2 Enable
 | 
			
		||||
	GICR_IVSEL = 0x2  // Interrupt Vector Select
 | 
			
		||||
	GICR_IVCE  = 0x1  // Interrupt Vector Change Enable
 | 
			
		||||
 | 
			
		||||
	// GIFR: General Interrupt Flag Register
 | 
			
		||||
	GIFR_INTF  = 0xc0 // External Interrupt Flags
 | 
			
		||||
	GIFR_INTF2 = 0x20 // External Interrupt Flag 2
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
// Bitfields for EEPROM: EEPROM
 | 
			
		||||
const (
 | 
			
		||||
	// EEARL: EEPROM Address Register Bytes
 | 
			
		||||
 | 
			
		||||
	// EEARH: EEPROM Address Register Bytes
 | 
			
		||||
	EEAR_EEAR = 0x1ff // EEPROM Address bits
 | 
			
		||||
 | 
			
		||||
	// EEDR: EEPROM Data Register
 | 
			
		||||
	EEDR_EEDR = 0xff // EEPROM Data bits
 | 
			
		||||
 | 
			
		||||
	// EECR: EEPROM Control Register
 | 
			
		||||
	EECR_EERIE = 0x8 // EEPROM Ready Interrupt Enable
 | 
			
		||||
	EECR_EEMWE = 0x4 // EEPROM Master Write Enable
 | 
			
		||||
	EECR_EEWE  = 0x2 // EEPROM Write Enable
 | 
			
		||||
	EECR_EERE  = 0x1 // EEPROM Read Enable
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
// Bitfields for CPU: CPU Registers
 | 
			
		||||
const (
 | 
			
		||||
	// SREG: Status Register
 | 
			
		||||
	SREG_I = 0x80 // Global Interrupt Enable
 | 
			
		||||
	SREG_T = 0x40 // Bit Copy Storage
 | 
			
		||||
	SREG_H = 0x20 // Half Carry Flag
 | 
			
		||||
	SREG_S = 0x10 // Sign Bit
 | 
			
		||||
	SREG_V = 0x8  // Two's Complement Overflow Flag
 | 
			
		||||
	SREG_N = 0x4  // Negative Flag
 | 
			
		||||
	SREG_Z = 0x2  // Zero Flag
 | 
			
		||||
	SREG_C = 0x1  // Carry Flag
 | 
			
		||||
 | 
			
		||||
	// OSCCAL: Oscillator Calibration Value
 | 
			
		||||
	OSCCAL_OSCCAL = 0xff // Oscillator Calibration
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
// Bitfields for TC8_ASYNC: Timer/Counter, 8-bit Async
 | 
			
		||||
const (
 | 
			
		||||
	// TCCR2: Timer/Counter2 Control Register
 | 
			
		||||
	TCCR2_FOC2  = 0x80 // Force Output Compare
 | 
			
		||||
	TCCR2_WGM20 = 0x40 // Waveform Genration Mode
 | 
			
		||||
	TCCR2_COM2  = 0x30 // Compare Output Mode bits
 | 
			
		||||
	TCCR2_WGM21 = 0x8  // Waveform Generation Mode
 | 
			
		||||
	TCCR2_CS2   = 0x7  // Clock Select bits
 | 
			
		||||
 | 
			
		||||
	// TCNT2: Timer/Counter2
 | 
			
		||||
	TCNT2_TCNT2 = 0xff // Timer/Counter2
 | 
			
		||||
 | 
			
		||||
	// OCR2: Timer/Counter2 Output Compare Register
 | 
			
		||||
	OCR2_OCR2 = 0xff // Timer/Counter2 Output Compare bits
 | 
			
		||||
 | 
			
		||||
	// ASSR: Asynchronous Status Register
 | 
			
		||||
	ASSR_AS2    = 0x8 // Asynchronous Timer/counter2
 | 
			
		||||
	ASSR_TCN2UB = 0x4 // Timer/Counter2 Update Busy
 | 
			
		||||
	ASSR_OCR2UB = 0x2 // Output Compare Register2 Update Busy
 | 
			
		||||
	ASSR_TCR2UB = 0x1 // Timer/counter Control Register2 Update Busy
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
// Bitfields for SPI: Serial Peripheral Interface
 | 
			
		||||
const (
 | 
			
		||||
	// SPDR: SPI Data Register
 | 
			
		||||
	SPDR_SPDR = 0xff // SPI Data bits
 | 
			
		||||
 | 
			
		||||
	// SPSR: SPI Status Register
 | 
			
		||||
	SPSR_SPIF  = 0x80 // SPI Interrupt Flag
 | 
			
		||||
	SPSR_WCOL  = 0x40 // Write Collision Flag
 | 
			
		||||
	SPSR_SPI2X = 0x1  // Double SPI Speed Bit
 | 
			
		||||
 | 
			
		||||
	// SPCR: SPI Control Register
 | 
			
		||||
	SPCR_SPIE = 0x80 // SPI Interrupt Enable
 | 
			
		||||
	SPCR_SPE  = 0x40 // SPI Enable
 | 
			
		||||
	SPCR_DORD = 0x20 // Data Order
 | 
			
		||||
	SPCR_MSTR = 0x10 // Master/Slave Select
 | 
			
		||||
	SPCR_CPOL = 0x8  // Clock polarity
 | 
			
		||||
	SPCR_CPHA = 0x4  // Clock Phase
 | 
			
		||||
	SPCR_SPR  = 0x3  // SPI Clock Rate Selects
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
// Bitfields for USART: USART
 | 
			
		||||
const (
 | 
			
		||||
	// UDR: USART I/O Data Register
 | 
			
		||||
	UDR_UDR = 0xff // USART I/O Data bits
 | 
			
		||||
 | 
			
		||||
	// UCSRA: USART Control and Status Register A
 | 
			
		||||
	UCSRA_RXC  = 0x80 // USART Receive Complete
 | 
			
		||||
	UCSRA_TXC  = 0x40 // USART Transmitt Complete
 | 
			
		||||
	UCSRA_UDRE = 0x20 // USART Data Register Empty
 | 
			
		||||
	UCSRA_FE   = 0x10 // Framing Error
 | 
			
		||||
	UCSRA_DOR  = 0x8  // Data overRun
 | 
			
		||||
	UCSRA_UPE  = 0x4  // Parity Error
 | 
			
		||||
	UCSRA_U2X  = 0x2  // Double the USART transmission speed
 | 
			
		||||
	UCSRA_MPCM = 0x1  // Multi-processor Communication Mode
 | 
			
		||||
 | 
			
		||||
	// UCSRB: USART Control and Status Register B
 | 
			
		||||
	UCSRB_RXCIE = 0x80 // RX Complete Interrupt Enable
 | 
			
		||||
	UCSRB_TXCIE = 0x40 // TX Complete Interrupt Enable
 | 
			
		||||
	UCSRB_UDRIE = 0x20 // USART Data register Empty Interrupt Enable
 | 
			
		||||
	UCSRB_RXEN  = 0x10 // Receiver Enable
 | 
			
		||||
	UCSRB_TXEN  = 0x8  // Transmitter Enable
 | 
			
		||||
	UCSRB_UCSZ2 = 0x4  // Character Size
 | 
			
		||||
	UCSRB_RXB8  = 0x2  // Receive Data Bit 8
 | 
			
		||||
	UCSRB_TXB8  = 0x1  // Transmit Data Bit 8
 | 
			
		||||
 | 
			
		||||
	// UCSRC: USART Control and Status Register C
 | 
			
		||||
	UCSRC_URSEL = 0x80 // Register Select
 | 
			
		||||
	UCSRC_UMSEL = 0x40 // USART Mode Select
 | 
			
		||||
	UCSRC_UPM   = 0x30 // Parity Mode Bits
 | 
			
		||||
	UCSRC_USBS  = 0x8  // Stop Bit Select
 | 
			
		||||
	UCSRC_UCSZ  = 0x6  // Character Size
 | 
			
		||||
	UCSRC_UCPOL = 0x1  // Clock Polarity
 | 
			
		||||
 | 
			
		||||
	// UBRRL: USART Baud Rate Register
 | 
			
		||||
 | 
			
		||||
	// UBRRH: USART Baud Rate Register
 | 
			
		||||
	UBRR_UBRR = 0xfff // USART Baud Rate bits
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
// Bitfields for TWI: Two Wire Serial Interface
 | 
			
		||||
const (
 | 
			
		||||
	// TWBR: TWI Bit Rate register
 | 
			
		||||
	TWBR_TWBR = 0xff // TWI Bit Rate bits
 | 
			
		||||
 | 
			
		||||
	// TWCR: TWI Control Register
 | 
			
		||||
	TWCR_TWINT = 0x80 // TWI Interrupt Flag
 | 
			
		||||
	TWCR_TWEA  = 0x40 // TWI Enable Acknowledge Bit
 | 
			
		||||
	TWCR_TWSTA = 0x20 // TWI Start Condition Bit
 | 
			
		||||
	TWCR_TWSTO = 0x10 // TWI Stop Condition Bit
 | 
			
		||||
	TWCR_TWWC  = 0x8  // TWI Write Collition Flag
 | 
			
		||||
	TWCR_TWEN  = 0x4  // TWI Enable Bit
 | 
			
		||||
	TWCR_TWIE  = 0x1  // TWI Interrupt Enable
 | 
			
		||||
 | 
			
		||||
	// TWSR: TWI Status Register
 | 
			
		||||
	TWSR_TWS  = 0xf8 // TWI Status
 | 
			
		||||
	TWSR_TWPS = 0x3  // TWI Prescaler
 | 
			
		||||
 | 
			
		||||
	// TWDR: TWI Data register
 | 
			
		||||
	TWDR_TWD = 0xff // TWI Data bits
 | 
			
		||||
 | 
			
		||||
	// TWAR: TWI (Slave) Address register
 | 
			
		||||
	TWAR_TWA   = 0xfe // TWI (Slave) Address register Bits
 | 
			
		||||
	TWAR_TWGCE = 0x1  // TWI General Call Recognition Enable Bit
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
// Bitfields for AC: Analog Comparator
 | 
			
		||||
const (
 | 
			
		||||
	// ACSR: Analog Comparator Control And Status Register
 | 
			
		||||
	ACSR_ACD  = 0x80 // Analog Comparator Disable
 | 
			
		||||
	ACSR_ACBG = 0x40 // Analog Comparator Bandgap Select
 | 
			
		||||
	ACSR_ACO  = 0x20 // Analog Compare Output
 | 
			
		||||
	ACSR_ACI  = 0x10 // Analog Comparator Interrupt Flag
 | 
			
		||||
	ACSR_ACIE = 0x8  // Analog Comparator Interrupt Enable
 | 
			
		||||
	ACSR_ACIC = 0x4  // Analog Comparator Input Capture Enable
 | 
			
		||||
	ACSR_ACIS = 0x3  // Analog Comparator Interrupt Mode Select bits
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
// Bitfields for ADC: Analog-to-Digital Converter
 | 
			
		||||
const (
 | 
			
		||||
	// ADMUX: The ADC multiplexer Selection Register
 | 
			
		||||
	ADMUX_REFS  = 0xc0 // Reference Selection Bits
 | 
			
		||||
	ADMUX_ADLAR = 0x20 // Left Adjust Result
 | 
			
		||||
	ADMUX_MUX   = 0x1f // Analog Channel and Gain Selection Bits
 | 
			
		||||
 | 
			
		||||
	// ADCSRA: The ADC Control and Status register
 | 
			
		||||
	ADCSRA_ADEN  = 0x80 // ADC Enable
 | 
			
		||||
	ADCSRA_ADSC  = 0x40 // ADC Start Conversion
 | 
			
		||||
	ADCSRA_ADATE = 0x20 // ADC Auto Trigger
 | 
			
		||||
	ADCSRA_ADIF  = 0x10 // ADC Interrupt Flag
 | 
			
		||||
	ADCSRA_ADIE  = 0x8  // ADC Interrupt Enable
 | 
			
		||||
	ADCSRA_ADPS  = 0x7  // ADC Prescaler Select Bits
 | 
			
		||||
 | 
			
		||||
	// ADCL: ADC Data Register Bytes
 | 
			
		||||
 | 
			
		||||
	// ADCH: ADC Data Register Bytes
 | 
			
		||||
	ADC_ADC = 0x3ff // ADC Data Bits
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
// Bitfields for JTAG: JTAG Interface
 | 
			
		||||
const (
 | 
			
		||||
	// OCDR: On-Chip Debug Related Register in I/O Memory
 | 
			
		||||
	OCDR_OCDR = 0xff // On-Chip Debug Register Bits
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
// Bitfields for BOOT_LOAD: Bootloader
 | 
			
		||||
const (
 | 
			
		||||
	// SPMCSR: Store Program Memory Control Register
 | 
			
		||||
	SPMCSR_SPMIE  = 0x80 // SPM Interrupt Enable
 | 
			
		||||
	SPMCSR_RWWSB  = 0x40 // Read While Write Section Busy
 | 
			
		||||
	SPMCSR_RWWSRE = 0x10 // Read While Write section read enable
 | 
			
		||||
	SPMCSR_BLBSET = 0x8  // Boot Lock Bit Set
 | 
			
		||||
	SPMCSR_PGWRT  = 0x4  // Page Write
 | 
			
		||||
	SPMCSR_PGERS  = 0x2  // Page Erase
 | 
			
		||||
	SPMCSR_SPMEN  = 0x1  // Store Program Memory Enable
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
// Bitfields for WDT: Watchdog Timer
 | 
			
		||||
const (
 | 
			
		||||
	// WDTCR: Watchdog Timer Control Register
 | 
			
		||||
	WDTCR_WDTOE = 0x10 // RW
 | 
			
		||||
	WDTCR_WDE   = 0x8  // Watch Dog Enable
 | 
			
		||||
	WDTCR_WDP   = 0x7  // Watch Dog Timer Prescaler bits
 | 
			
		||||
)
 | 
			
		||||
							
								
								
									
										6
									
								
								src/device/avr/atmega16a.ld
									
										
									
									
									
										Обычный файл
									
								
							
							
						
						
									
										6
									
								
								src/device/avr/atmega16a.ld
									
										
									
									
									
										Обычный файл
									
								
							| 
						 | 
				
			
			@ -0,0 +1,6 @@
 | 
			
		|||
/* Automatically generated file. DO NOT EDIT. */
 | 
			
		||||
/* Generated by gen-device.py from ATmega16A.atdf, see http://packs.download.atmel.com/ */
 | 
			
		||||
 | 
			
		||||
__flash_size = 0x4000;
 | 
			
		||||
__ram_size   = 0x400;
 | 
			
		||||
__num_isrs   = 21;
 | 
			
		||||
							
								
								
									
										560
									
								
								src/device/avr/atmega16hva.go
									
										
									
									
									
										Обычный файл
									
								
							
							
						
						
									
										560
									
								
								src/device/avr/atmega16hva.go
									
										
									
									
									
										Обычный файл
									
								
							| 
						 | 
				
			
			@ -0,0 +1,560 @@
 | 
			
		|||
// Automatically generated file. DO NOT EDIT.
 | 
			
		||||
// Generated by gen-device.py from ATmega16HVA.atdf, see http://packs.download.atmel.com/
 | 
			
		||||
 | 
			
		||||
// +build avr,atmega16hva
 | 
			
		||||
 | 
			
		||||
// Device information for the ATmega16HVA.
 | 
			
		||||
//
 | 
			
		||||
package avr
 | 
			
		||||
 | 
			
		||||
// Magic type name for the compiler.
 | 
			
		||||
type __reg uint8
 | 
			
		||||
 | 
			
		||||
// Export this magic type name.
 | 
			
		||||
type RegValue = __reg
 | 
			
		||||
 | 
			
		||||
// Some information about this device.
 | 
			
		||||
const (
 | 
			
		||||
	DEVICE = "ATmega16HVA"
 | 
			
		||||
	ARCH   = "AVR8"
 | 
			
		||||
	FAMILY = "megaAVR"
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
// Interrupts
 | 
			
		||||
const (
 | 
			
		||||
	IRQ_RESET         = 0  // External Pin, Power-on Reset, Brown-out Reset and Watchdog Reset
 | 
			
		||||
	IRQ_BPINT         = 1  // Battery Protection Interrupt
 | 
			
		||||
	IRQ_VREGMON       = 2  // Voltage regulator monitor interrupt
 | 
			
		||||
	IRQ_INT0          = 3  // External Interrupt Request 0
 | 
			
		||||
	IRQ_INT1          = 4  // External Interrupt Request 1
 | 
			
		||||
	IRQ_INT2          = 5  // External Interrupt Request 2
 | 
			
		||||
	IRQ_WDT           = 6  // Watchdog Timeout Interrupt
 | 
			
		||||
	IRQ_TIMER1_IC     = 7  // Timer 1 Input capture
 | 
			
		||||
	IRQ_TIMER1_COMPA  = 8  // Timer 1 Compare Match A
 | 
			
		||||
	IRQ_TIMER1_COMPB  = 9  // Timer 1 Compare Match B
 | 
			
		||||
	IRQ_TIMER1_OVF    = 10 // Timer 1 overflow
 | 
			
		||||
	IRQ_TIMER0_IC     = 11 // Timer 0 Input Capture
 | 
			
		||||
	IRQ_TIMER0_COMPA  = 12 // Timer 0 Comapre Match A
 | 
			
		||||
	IRQ_TIMER0_COMPB  = 13 // Timer 0 Compare Match B
 | 
			
		||||
	IRQ_TIMER0_OVF    = 14 // Timer 0 Overflow
 | 
			
		||||
	IRQ_SPI_STC       = 15 // SPI Serial transfer complete
 | 
			
		||||
	IRQ_VADC          = 16 // Voltage ADC Conversion Complete
 | 
			
		||||
	IRQ_CCADC_CONV    = 17 // Coulomb Counter ADC Conversion Complete
 | 
			
		||||
	IRQ_CCADC_REG_CUR = 18 // Coloumb Counter ADC Regular Current
 | 
			
		||||
	IRQ_CCADC_ACC     = 19 // Coloumb Counter ADC Accumulator
 | 
			
		||||
	IRQ_EE_READY      = 20 // EEPROM Ready
 | 
			
		||||
	IRQ_max           = 20 // Highest interrupt number on this device.
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
// Peripherals
 | 
			
		||||
var (
 | 
			
		||||
	// Fuses
 | 
			
		||||
	FUSE = struct {
 | 
			
		||||
		LOW __reg
 | 
			
		||||
	}{
 | 
			
		||||
		LOW: 0x0,
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	// Lockbits
 | 
			
		||||
	LOCKBIT = struct {
 | 
			
		||||
		LOCKBIT __reg
 | 
			
		||||
	}{
 | 
			
		||||
		LOCKBIT: 0x0,
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	// Analog-to-Digital Converter
 | 
			
		||||
	ADC = struct {
 | 
			
		||||
		VADMUX __reg
 | 
			
		||||
		VADCL  __reg
 | 
			
		||||
		VADCH  __reg
 | 
			
		||||
		VADCSR __reg
 | 
			
		||||
	}{
 | 
			
		||||
		VADMUX: 0x7c, // The VADC multiplexer Selection Register
 | 
			
		||||
		VADCL:  0x78, // VADC Data Register  Bytes
 | 
			
		||||
		VADCH:  0x78, // VADC Data Register  Bytes
 | 
			
		||||
		VADCSR: 0x7a, // The VADC Control and Status register
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	// Watchdog Timer
 | 
			
		||||
	WDT = struct {
 | 
			
		||||
		WDTCSR __reg
 | 
			
		||||
	}{
 | 
			
		||||
		WDTCSR: 0x60, // Watchdog Timer Control Register
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	// Bandgap
 | 
			
		||||
	BANDGAP = struct {
 | 
			
		||||
		BGCRR __reg
 | 
			
		||||
		BGCCR __reg
 | 
			
		||||
	}{
 | 
			
		||||
		BGCRR: 0xd1, // Bandgap Calibration of Resistor Ladder
 | 
			
		||||
		BGCCR: 0xd0, // Bandgap Calibration Register
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	// External Interrupts
 | 
			
		||||
	EXINT = struct {
 | 
			
		||||
		EICRA __reg
 | 
			
		||||
		EIMSK __reg
 | 
			
		||||
		EIFR  __reg
 | 
			
		||||
	}{
 | 
			
		||||
		EICRA: 0x69, // External Interrupt Control Register
 | 
			
		||||
		EIMSK: 0x3d, // External Interrupt Mask Register
 | 
			
		||||
		EIFR:  0x3c, // External Interrupt Flag Register
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	// I/O Port
 | 
			
		||||
	PORT = struct {
 | 
			
		||||
		PORTC __reg
 | 
			
		||||
		PINC  __reg
 | 
			
		||||
		PORTA __reg
 | 
			
		||||
		DDRA  __reg
 | 
			
		||||
		PINA  __reg
 | 
			
		||||
		PORTB __reg
 | 
			
		||||
		DDRB  __reg
 | 
			
		||||
		PINB  __reg
 | 
			
		||||
	}{
 | 
			
		||||
		PORTC: 0x28, // Port C Data Register
 | 
			
		||||
		PINC:  0x26, // Port C Input Pins
 | 
			
		||||
		PORTA: 0x22, // Port A Data Register
 | 
			
		||||
		DDRA:  0x21, // Port A Data Direction Register
 | 
			
		||||
		PINA:  0x20, // Port A Input Pins
 | 
			
		||||
		PORTB: 0x25, // Data Register, Port B
 | 
			
		||||
		DDRB:  0x24, // Data Direction Register, Port B
 | 
			
		||||
		PINB:  0x23, // Input Pins, Port B
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	// FET Control
 | 
			
		||||
	FET = struct {
 | 
			
		||||
		FCSR __reg
 | 
			
		||||
	}{
 | 
			
		||||
		FCSR: 0xf0, // FET Control and Status Register
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	// Serial Peripheral Interface
 | 
			
		||||
	SPI = struct {
 | 
			
		||||
		SPCR __reg
 | 
			
		||||
		SPSR __reg
 | 
			
		||||
		SPDR __reg
 | 
			
		||||
	}{
 | 
			
		||||
		SPCR: 0x4c, // SPI Control Register
 | 
			
		||||
		SPSR: 0x4d, // SPI Status Register
 | 
			
		||||
		SPDR: 0x4e, // SPI Data Register
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	// Bootloader
 | 
			
		||||
	BOOT_LOAD = struct {
 | 
			
		||||
		SPMCSR __reg
 | 
			
		||||
	}{
 | 
			
		||||
		SPMCSR: 0x57, // Store Program Memory Control and Status Register
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	// CPU Registers
 | 
			
		||||
	CPU = struct {
 | 
			
		||||
		SREG    __reg
 | 
			
		||||
		SPL     __reg
 | 
			
		||||
		SPH     __reg
 | 
			
		||||
		MCUCR   __reg
 | 
			
		||||
		MCUSR   __reg
 | 
			
		||||
		FOSCCAL __reg
 | 
			
		||||
		OSICSR  __reg
 | 
			
		||||
		SMCR    __reg
 | 
			
		||||
		GPIOR2  __reg
 | 
			
		||||
		GPIOR1  __reg
 | 
			
		||||
		GPIOR0  __reg
 | 
			
		||||
		DIDR0   __reg
 | 
			
		||||
		PRR0    __reg
 | 
			
		||||
		CLKPR   __reg
 | 
			
		||||
	}{
 | 
			
		||||
		SREG:    0x5f, // Status Register
 | 
			
		||||
		SPL:     0x5d, // Stack Pointer
 | 
			
		||||
		SPH:     0x5d, // Stack Pointer
 | 
			
		||||
		MCUCR:   0x55, // MCU Control Register
 | 
			
		||||
		MCUSR:   0x54, // MCU Status Register
 | 
			
		||||
		FOSCCAL: 0x66, // Fast Oscillator Calibration Value
 | 
			
		||||
		OSICSR:  0x37, // Oscillator Sampling Interface Control and Status Register
 | 
			
		||||
		SMCR:    0x53, // Sleep Mode Control Register
 | 
			
		||||
		GPIOR2:  0x4b, // General Purpose IO Register 2
 | 
			
		||||
		GPIOR1:  0x4a, // General Purpose IO Register 1
 | 
			
		||||
		GPIOR0:  0x3e, // General Purpose IO Register 0
 | 
			
		||||
		DIDR0:   0x7e, // Digital Input Disable Register
 | 
			
		||||
		PRR0:    0x64, // Power Reduction Register 0
 | 
			
		||||
		CLKPR:   0x61, // Clock Prescale Register
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	// Battery Protection
 | 
			
		||||
	BATTERY_PROTECTION = struct {
 | 
			
		||||
		BPPLR  __reg
 | 
			
		||||
		BPCR   __reg
 | 
			
		||||
		BPHCTR __reg
 | 
			
		||||
		BPOCTR __reg
 | 
			
		||||
		BPSCTR __reg
 | 
			
		||||
		BPCHCD __reg
 | 
			
		||||
		BPDHCD __reg
 | 
			
		||||
		BPCOCD __reg
 | 
			
		||||
		BPDOCD __reg
 | 
			
		||||
		BPSCD  __reg
 | 
			
		||||
		BPIFR  __reg
 | 
			
		||||
		BPIMSK __reg
 | 
			
		||||
	}{
 | 
			
		||||
		BPPLR:  0xfe, // Battery Protection Parameter Lock Register
 | 
			
		||||
		BPCR:   0xfd, // Battery Protection Control Register
 | 
			
		||||
		BPHCTR: 0xfc, // Battery Protection Short-current Timing Register
 | 
			
		||||
		BPOCTR: 0xfb, // Battery Protection Over-current Timing Register
 | 
			
		||||
		BPSCTR: 0xfa, // Battery Protection Short-current Timing Register
 | 
			
		||||
		BPCHCD: 0xf9, // Battery Protection Charge-High-current Detection Level Register
 | 
			
		||||
		BPDHCD: 0xf8, // Battery Protection Discharge-High-current Detection Level Register
 | 
			
		||||
		BPCOCD: 0xf7, // Battery Protection Charge-Over-current Detection Level Register
 | 
			
		||||
		BPDOCD: 0xf6, // Battery Protection Discharge-Over-current Detection Level Register
 | 
			
		||||
		BPSCD:  0xf5, // Battery Protection Short-Circuit Detection Level Register
 | 
			
		||||
		BPIFR:  0xf3, // Battery Protection Interrupt Flag Register
 | 
			
		||||
		BPIMSK: 0xf2, // Battery Protection Interrupt Mask Register
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	// EEPROM
 | 
			
		||||
	EEPROM = struct {
 | 
			
		||||
		EEAR __reg
 | 
			
		||||
		EEDR __reg
 | 
			
		||||
		EECR __reg
 | 
			
		||||
	}{
 | 
			
		||||
		EEAR: 0x41, // EEPROM Read/Write Access
 | 
			
		||||
		EEDR: 0x40, // EEPROM Data Register
 | 
			
		||||
		EECR: 0x3f, // EEPROM Control Register
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	// Timer/Counter, 16-bit
 | 
			
		||||
	TC16 = struct {
 | 
			
		||||
		TCCR1B __reg
 | 
			
		||||
		TCCR1A __reg
 | 
			
		||||
		TCNT1L __reg
 | 
			
		||||
		TCNT1H __reg
 | 
			
		||||
		OCR1A  __reg
 | 
			
		||||
		OCR1B  __reg
 | 
			
		||||
		TIMSK1 __reg
 | 
			
		||||
		TIFR1  __reg
 | 
			
		||||
		GTCCR  __reg
 | 
			
		||||
		TCCR0A __reg
 | 
			
		||||
		TCCR0B __reg
 | 
			
		||||
		TCNT0L __reg
 | 
			
		||||
		TCNT0H __reg
 | 
			
		||||
		OCR0A  __reg
 | 
			
		||||
		OCR0B  __reg
 | 
			
		||||
		TIMSK0 __reg
 | 
			
		||||
		TIFR0  __reg
 | 
			
		||||
	}{
 | 
			
		||||
		TCCR1B: 0x81, // Timer/Counter1 Control Register B
 | 
			
		||||
		TCCR1A: 0x80, // Timer/Counter 1 Control Register A
 | 
			
		||||
		TCNT1L: 0x84, // Timer Counter 1  Bytes
 | 
			
		||||
		TCNT1H: 0x84, // Timer Counter 1  Bytes
 | 
			
		||||
		OCR1A:  0x88, // Output Compare Register 1A
 | 
			
		||||
		OCR1B:  0x89, // Output Compare Register B
 | 
			
		||||
		TIMSK1: 0x6f, // Timer/Counter Interrupt Mask Register
 | 
			
		||||
		TIFR1:  0x36, // Timer/Counter Interrupt Flag register
 | 
			
		||||
		GTCCR:  0x43, // General Timer/Counter Control Register
 | 
			
		||||
		TCCR0A: 0x44, // Timer/Counter0 Control Register
 | 
			
		||||
		TCCR0B: 0x45, // Timer/Counter0 Control Register
 | 
			
		||||
		TCNT0L: 0x46, // Timer Counter 0  Bytes
 | 
			
		||||
		TCNT0H: 0x46, // Timer Counter 0  Bytes
 | 
			
		||||
		OCR0A:  0x48, // Output compare Register A
 | 
			
		||||
		OCR0B:  0x49, // Output compare Register B
 | 
			
		||||
		TIMSK0: 0x6e, // Timer/Counter Interrupt Mask Register
 | 
			
		||||
		TIFR0:  0x35, // Timer/Counter Interrupt Flag register
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	// Coulomb Counter
 | 
			
		||||
	COULOMB_COUNTER = struct {
 | 
			
		||||
		CADCSRA __reg
 | 
			
		||||
		CADCSRB __reg
 | 
			
		||||
		CADICL  __reg
 | 
			
		||||
		CADICH  __reg
 | 
			
		||||
		CADAC3  __reg
 | 
			
		||||
		CADAC2  __reg
 | 
			
		||||
		CADAC1  __reg
 | 
			
		||||
		CADAC0  __reg
 | 
			
		||||
		CADRC   __reg
 | 
			
		||||
	}{
 | 
			
		||||
		CADCSRA: 0xe4, // CC-ADC Control and Status Register A
 | 
			
		||||
		CADCSRB: 0xe5, // CC-ADC Control and Status Register B
 | 
			
		||||
		CADICL:  0xe8, // CC-ADC Instantaneous Current
 | 
			
		||||
		CADICH:  0xe8, // CC-ADC Instantaneous Current
 | 
			
		||||
		CADAC3:  0xe3, // ADC Accumulate Current
 | 
			
		||||
		CADAC2:  0xe2, // ADC Accumulate Current
 | 
			
		||||
		CADAC1:  0xe1, // ADC Accumulate Current
 | 
			
		||||
		CADAC0:  0xe0, // ADC Accumulate Current
 | 
			
		||||
		CADRC:   0xe6, // CC-ADC Regular Current
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	// Voltage Regulator
 | 
			
		||||
	VOLTAGE_REGULATOR = struct {
 | 
			
		||||
		ROCR __reg
 | 
			
		||||
	}{
 | 
			
		||||
		ROCR: 0xc8, // Regulator Operating Condition Register
 | 
			
		||||
	}
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
// Bitfields for FUSE: Fuses
 | 
			
		||||
const (
 | 
			
		||||
	// LOW
 | 
			
		||||
	LOW_WDTON     = 0x80 // Watch-dog Timer always on
 | 
			
		||||
	LOW_EESAVE    = 0x40 // Preserve EEPROM through the Chip Erase cycle
 | 
			
		||||
	LOW_SPIEN     = 0x20 // Serial program downloading (SPI) enabled
 | 
			
		||||
	LOW_DWEN      = 0x10 // Debug Wire enable
 | 
			
		||||
	LOW_SELFPRGEN = 0x8  // Self Programming enable
 | 
			
		||||
	LOW_SUT       = 0x7  // Select start-up time
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
// Bitfields for LOCKBIT: Lockbits
 | 
			
		||||
const (
 | 
			
		||||
	// LOCKBIT
 | 
			
		||||
	LOCKBIT_LB = 0x3 // Memory Lock
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
// Bitfields for ADC: Analog-to-Digital Converter
 | 
			
		||||
const (
 | 
			
		||||
	// VADMUX: The VADC multiplexer Selection Register
 | 
			
		||||
	VADMUX_VADMUX = 0xf // Analog Channel and Gain Selection Bits
 | 
			
		||||
 | 
			
		||||
	// VADCSR: The VADC Control and Status register
 | 
			
		||||
	VADCSR_VADEN   = 0x8 // VADC Enable
 | 
			
		||||
	VADCSR_VADSC   = 0x4 // VADC Satrt Conversion
 | 
			
		||||
	VADCSR_VADCCIF = 0x2 // VADC Conversion Complete Interrupt Flag
 | 
			
		||||
	VADCSR_VADCCIE = 0x1 // VADC Conversion Complete Interrupt Enable
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
// Bitfields for WDT: Watchdog Timer
 | 
			
		||||
const (
 | 
			
		||||
	// WDTCSR: Watchdog Timer Control Register
 | 
			
		||||
	WDTCSR_WDIF = 0x80 // Watchdog Timeout Interrupt Flag
 | 
			
		||||
	WDTCSR_WDIE = 0x40 // Watchdog Timeout Interrupt Enable
 | 
			
		||||
	WDTCSR_WDP  = 0x27 // Watchdog Timer Prescaler Bits
 | 
			
		||||
	WDTCSR_WDCE = 0x10 // Watchdog Change Enable
 | 
			
		||||
	WDTCSR_WDE  = 0x8  // Watch Dog Enable
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
// Bitfields for BANDGAP: Bandgap
 | 
			
		||||
const (
 | 
			
		||||
	// BGCRR: Bandgap Calibration of Resistor Ladder
 | 
			
		||||
	BGCRR_BGCR = 0xff // Bandgap calibration bits
 | 
			
		||||
 | 
			
		||||
	// BGCCR: Bandgap Calibration Register
 | 
			
		||||
	BGCCR_BGD  = 0x80 // Setting the BGD bit to one will disable the bandgap voltage reference. This bit must be cleared before enabling CC-ADC or V-ADC, and must remain unset while either ADC is enabled.
 | 
			
		||||
	BGCCR_BGCC = 0x3f // BG Calibration of PTAT Current Bits
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
// Bitfields for EXINT: External Interrupts
 | 
			
		||||
const (
 | 
			
		||||
	// EICRA: External Interrupt Control Register
 | 
			
		||||
	EICRA_ISC2 = 0x30 // External Interrupt Sense Control 2 Bits
 | 
			
		||||
	EICRA_ISC1 = 0xc  // External Interrupt Sense Control 1 Bits
 | 
			
		||||
	EICRA_ISC0 = 0x3  // External Interrupt Sense Control 0 Bits
 | 
			
		||||
 | 
			
		||||
	// EIMSK: External Interrupt Mask Register
 | 
			
		||||
	EIMSK_INT = 0x7 // External Interrupt Request 2 Enable
 | 
			
		||||
 | 
			
		||||
	// EIFR: External Interrupt Flag Register
 | 
			
		||||
	EIFR_INTF = 0x7 // External Interrupt Flags
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
// Bitfields for FET: FET Control
 | 
			
		||||
const (
 | 
			
		||||
	// FCSR: FET Control and Status Register
 | 
			
		||||
	FCSR_DUVRD = 0x8 // Deep Under-Voltage Recovery Disable
 | 
			
		||||
	FCSR_CPS   = 0x4 // Current Protection Status
 | 
			
		||||
	FCSR_DFE   = 0x2 // Discharge FET Enable
 | 
			
		||||
	FCSR_CFE   = 0x1 // Charge FET Enable
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
// Bitfields for SPI: Serial Peripheral Interface
 | 
			
		||||
const (
 | 
			
		||||
	// SPCR: SPI Control Register
 | 
			
		||||
	SPCR_SPIE = 0x80 // SPI Interrupt Enable
 | 
			
		||||
	SPCR_SPE  = 0x40 // SPI Enable
 | 
			
		||||
	SPCR_DORD = 0x20 // Data Order
 | 
			
		||||
	SPCR_MSTR = 0x10 // Master/Slave Select
 | 
			
		||||
	SPCR_CPOL = 0x8  // Clock polarity
 | 
			
		||||
	SPCR_CPHA = 0x4  // Clock Phase
 | 
			
		||||
	SPCR_SPR  = 0x3  // SPI Clock Rate Selects
 | 
			
		||||
 | 
			
		||||
	// SPSR: SPI Status Register
 | 
			
		||||
	SPSR_SPIF  = 0x80 // SPI Interrupt Flag
 | 
			
		||||
	SPSR_WCOL  = 0x40 // Write Collision Flag
 | 
			
		||||
	SPSR_SPI2X = 0x1  // Double SPI Speed Bit
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
// Bitfields for BOOT_LOAD: Bootloader
 | 
			
		||||
const (
 | 
			
		||||
	// SPMCSR: Store Program Memory Control and Status Register
 | 
			
		||||
	SPMCSR_SIGRD = 0x20 // Signature Row Read
 | 
			
		||||
	SPMCSR_CTPB  = 0x10 // Clear Temporary Page Buffer
 | 
			
		||||
	SPMCSR_RFLB  = 0x8  // Read Fuse and Lock Bits
 | 
			
		||||
	SPMCSR_PGWRT = 0x4  // Page Write
 | 
			
		||||
	SPMCSR_PGERS = 0x2  // Page Erase
 | 
			
		||||
	SPMCSR_SPMEN = 0x1  // Store Program Memory Enable
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
// Bitfields for CPU: CPU Registers
 | 
			
		||||
const (
 | 
			
		||||
	// SREG: Status Register
 | 
			
		||||
	SREG_I = 0x80 // Global Interrupt Enable
 | 
			
		||||
	SREG_T = 0x40 // Bit Copy Storage
 | 
			
		||||
	SREG_H = 0x20 // Half Carry Flag
 | 
			
		||||
	SREG_S = 0x10 // Sign Bit
 | 
			
		||||
	SREG_V = 0x8  // Two's Complement Overflow Flag
 | 
			
		||||
	SREG_N = 0x4  // Negative Flag
 | 
			
		||||
	SREG_Z = 0x2  // Zero Flag
 | 
			
		||||
	SREG_C = 0x1  // Carry Flag
 | 
			
		||||
 | 
			
		||||
	// MCUCR: MCU Control Register
 | 
			
		||||
	MCUCR_CKOE = 0x20 // Clock Output Enable
 | 
			
		||||
	MCUCR_PUD  = 0x10 // Pull-up disable
 | 
			
		||||
 | 
			
		||||
	// MCUSR: MCU Status Register
 | 
			
		||||
	MCUSR_OCDRF = 0x10 // OCD Reset Flag
 | 
			
		||||
	MCUSR_WDRF  = 0x8  // Watchdog Reset Flag
 | 
			
		||||
	MCUSR_BODRF = 0x4  // Brown-out Reset Flag
 | 
			
		||||
	MCUSR_EXTRF = 0x2  // External Reset Flag
 | 
			
		||||
	MCUSR_PORF  = 0x1  // Power-on reset flag
 | 
			
		||||
 | 
			
		||||
	// OSICSR: Oscillator Sampling Interface Control and Status Register
 | 
			
		||||
	OSICSR_OSISEL0 = 0x10 // Oscillator Sampling Interface Select 0
 | 
			
		||||
	OSICSR_OSIST   = 0x2  // Oscillator Sampling Interface Status
 | 
			
		||||
	OSICSR_OSIEN   = 0x1  // Oscillator Sampling Interface Enable
 | 
			
		||||
 | 
			
		||||
	// SMCR: Sleep Mode Control Register
 | 
			
		||||
	SMCR_SM = 0xe // Sleep Mode Select bits
 | 
			
		||||
	SMCR_SE = 0x1 // Sleep Enable
 | 
			
		||||
 | 
			
		||||
	// DIDR0: Digital Input Disable Register
 | 
			
		||||
	DIDR0_PA1DID = 0x2 // When this bit is written logic one, the digital input buffer of the corresponding V_ADC pin is disabled.
 | 
			
		||||
	DIDR0_PA0DID = 0x1 // When this bit is written logic one, the digital input buffer of the corresponding V_ADC pin is disabled.
 | 
			
		||||
 | 
			
		||||
	// PRR0: Power Reduction Register 0
 | 
			
		||||
	PRR0_PRVRM  = 0x20 // Power Reduction Voltage Regulator Monitor
 | 
			
		||||
	PRR0_PRSPI  = 0x8  // Power reduction SPI
 | 
			
		||||
	PRR0_PRTIM1 = 0x4  // Power Reduction Timer/Counter1
 | 
			
		||||
	PRR0_PRTIM0 = 0x2  // Power Reduction Timer/Counter0
 | 
			
		||||
	PRR0_PRVADC = 0x1  // Power Reduction V-ADC
 | 
			
		||||
 | 
			
		||||
	// CLKPR: Clock Prescale Register
 | 
			
		||||
	CLKPR_CLKPCE = 0x80 // Clock Prescaler Change Enable
 | 
			
		||||
	CLKPR_CLKPS  = 0x3  // Clock Prescaler Select Bits
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
// Bitfields for BATTERY_PROTECTION: Battery Protection
 | 
			
		||||
const (
 | 
			
		||||
	// BPPLR: Battery Protection Parameter Lock Register
 | 
			
		||||
	BPPLR_BPPLE = 0x2 // Battery Protection Parameter Lock Enable
 | 
			
		||||
	BPPLR_BPPL  = 0x1 // Battery Protection Parameter Lock
 | 
			
		||||
 | 
			
		||||
	// BPCR: Battery Protection Control Register
 | 
			
		||||
	BPCR_SCD  = 0x10 // Short Circuit Protection Disabled
 | 
			
		||||
	BPCR_DOCD = 0x8  // Discharge Over-current Protection Disabled
 | 
			
		||||
	BPCR_COCD = 0x4  // Charge Over-current Protection Disabled
 | 
			
		||||
	BPCR_DHCD = 0x2  // Discharge High-current Protection Disable
 | 
			
		||||
	BPCR_CHCD = 0x1  // Charge High-current Protection Disable
 | 
			
		||||
 | 
			
		||||
	// BPIFR: Battery Protection Interrupt Flag Register
 | 
			
		||||
	BPIFR_SCIF  = 0x10 // Short-circuit Protection Activated Interrupt Flag
 | 
			
		||||
	BPIFR_DOCIF = 0x8  // Discharge Over-current Protection Activated Interrupt Flag
 | 
			
		||||
	BPIFR_COCIF = 0x4  // Charge Over-current Protection Activated Interrupt Flag
 | 
			
		||||
	BPIFR_DHCIF = 0x2  // Disharge High-current Protection Activated Interrupt
 | 
			
		||||
	BPIFR_CHCIF = 0x1  // Charge High-current Protection Activated Interrupt
 | 
			
		||||
 | 
			
		||||
	// BPIMSK: Battery Protection Interrupt Mask Register
 | 
			
		||||
	BPIMSK_SCIE  = 0x10 // Short-circuit Protection Activated Interrupt Enable
 | 
			
		||||
	BPIMSK_DOCIE = 0x8  // Discharge Over-current Protection Activated Interrupt Enable
 | 
			
		||||
	BPIMSK_COCIE = 0x4  // Charge Over-current Protection Activated Interrupt Enable
 | 
			
		||||
	BPIMSK_DHCIE = 0x2  // Discharger High-current Protection Activated Interrupt
 | 
			
		||||
	BPIMSK_CHCIE = 0x1  // Charger High-current Protection Activated Interrupt
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
// Bitfields for EEPROM: EEPROM
 | 
			
		||||
const (
 | 
			
		||||
	// EECR: EEPROM Control Register
 | 
			
		||||
	EECR_EEPM  = 0x30
 | 
			
		||||
	EECR_EERIE = 0x8 // EEProm Ready Interrupt Enable
 | 
			
		||||
	EECR_EEMPE = 0x4 // EEPROM Master Write Enable
 | 
			
		||||
	EECR_EEPE  = 0x2 // EEPROM Write Enable
 | 
			
		||||
	EECR_EERE  = 0x1 // EEPROM Read Enable
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
// Bitfields for TC16: Timer/Counter, 16-bit
 | 
			
		||||
const (
 | 
			
		||||
	// TCCR1B: Timer/Counter1 Control Register B
 | 
			
		||||
	TCCR1B_CS = 0x7 // Clock Select1 bis
 | 
			
		||||
 | 
			
		||||
	// TCCR1A: Timer/Counter 1 Control Register A
 | 
			
		||||
	TCCR1A_TCW1  = 0x80 // Timer/Counter Width
 | 
			
		||||
	TCCR1A_ICEN1 = 0x40 // Input Capture Mode Enable
 | 
			
		||||
	TCCR1A_ICNC1 = 0x20 // Input Capture Noise Canceler
 | 
			
		||||
	TCCR1A_ICES1 = 0x10 // Input Capture Edge Select
 | 
			
		||||
	TCCR1A_ICS1  = 0x8  // Input Capture Select
 | 
			
		||||
	TCCR1A_WGM10 = 0x1  // Waveform Generation Mode
 | 
			
		||||
 | 
			
		||||
	// TIMSK1: Timer/Counter Interrupt Mask Register
 | 
			
		||||
	TIMSK1_ICIE1  = 0x8 // Timer/Counter n Input Capture Interrupt Enable
 | 
			
		||||
	TIMSK1_OCIE1B = 0x4 // Timer/Counter1 Output Compare B Interrupt Enable
 | 
			
		||||
	TIMSK1_OCIE1A = 0x2 // Timer/Counter1 Output Compare A Interrupt Enable
 | 
			
		||||
	TIMSK1_TOIE1  = 0x1 // Timer/Counter1 Overflow Interrupt Enable
 | 
			
		||||
 | 
			
		||||
	// TIFR1: Timer/Counter Interrupt Flag register
 | 
			
		||||
	TIFR1_ICF1  = 0x8 // Timer/Counter 1 Input Capture Flag
 | 
			
		||||
	TIFR1_OCF1B = 0x4 // Timer/Counter1 Output Compare Flag B
 | 
			
		||||
	TIFR1_OCF1A = 0x2 // Timer/Counter1 Output Compare Flag A
 | 
			
		||||
	TIFR1_TOV1  = 0x1 // Timer/Counter1 Overflow Flag
 | 
			
		||||
 | 
			
		||||
	// GTCCR: General Timer/Counter Control Register
 | 
			
		||||
	GTCCR_TSM     = 0x80 // Timer/Counter Synchronization Mode
 | 
			
		||||
	GTCCR_PSRSYNC = 0x1  // Prescaler Reset
 | 
			
		||||
 | 
			
		||||
	// TCCR0A: Timer/Counter0 Control Register
 | 
			
		||||
	TCCR0A_TCW0  = 0x80 // Timer/Counter Width
 | 
			
		||||
	TCCR0A_ICEN0 = 0x40 // Input Capture Mode Enable
 | 
			
		||||
	TCCR0A_ICNC0 = 0x20 // Input Capture Noise Canceler
 | 
			
		||||
	TCCR0A_ICES0 = 0x10 // Input Capture Edge Select
 | 
			
		||||
	TCCR0A_ICS0  = 0x8  // Input Capture Select
 | 
			
		||||
	TCCR0A_WGM00 = 0x1  // Clock Select0 bit 0
 | 
			
		||||
 | 
			
		||||
	// TCCR0B: Timer/Counter0 Control Register
 | 
			
		||||
	TCCR0B_CS02 = 0x4 // Clock Select0 bit 2
 | 
			
		||||
	TCCR0B_CS01 = 0x2 // Clock Select0 bit 1
 | 
			
		||||
	TCCR0B_CS00 = 0x1 // Clock Select0 bit 0
 | 
			
		||||
 | 
			
		||||
	// TIMSK0: Timer/Counter Interrupt Mask Register
 | 
			
		||||
	TIMSK0_ICIE0  = 0x8 // Timer/Counter n Input Capture Interrupt Enable
 | 
			
		||||
	TIMSK0_OCIE0B = 0x4 // Output Compare Interrupt Enable
 | 
			
		||||
	TIMSK0_OCIE0A = 0x2 // Output Compare Interrupt Enable
 | 
			
		||||
	TIMSK0_TOIE0  = 0x1 // Overflow Interrupt Enable
 | 
			
		||||
 | 
			
		||||
	// TIFR0: Timer/Counter Interrupt Flag register
 | 
			
		||||
	TIFR0_ICF0  = 0x8 // Timer/Counter Interrupt Flag Register
 | 
			
		||||
	TIFR0_OCF0B = 0x4 // Output Compare Flag
 | 
			
		||||
	TIFR0_OCF0A = 0x2 // Output Compare Flag
 | 
			
		||||
	TIFR0_TOV0  = 0x1 // Overflow Flag
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
// Bitfields for COULOMB_COUNTER: Coulomb Counter
 | 
			
		||||
const (
 | 
			
		||||
	// CADCSRA: CC-ADC Control and Status Register A
 | 
			
		||||
	CADCSRA_CADEN  = 0x80 // When the CADEN bit is cleared (zero), the CC-ADC is disabled. When the CADEN bit is set (one), the CC-ADC will continuously measure the voltage drop over the external sense resistor RSENSE. In Power-down, only the Regular Current detection is active. In Power-off, the CC-ADC is always disabled.
 | 
			
		||||
	CADCSRA_CADPOL = 0x40
 | 
			
		||||
	CADCSRA_CADUB  = 0x20 // CC_ADC Update Busy
 | 
			
		||||
	CADCSRA_CADAS  = 0x18 // CC_ADC Accumulate Current Select Bits
 | 
			
		||||
	CADCSRA_CADSI  = 0x6  // The CADSI bits determine the current sampling interval for the Regular Current detection in Power-down mode. The actual settings remain to be determined.
 | 
			
		||||
	CADCSRA_CADSE  = 0x1  // When the CADSE bit is written to one, the ongoing CC-ADC conversion is aborted, and the CC-ADC enters Regular Current detection mode.
 | 
			
		||||
 | 
			
		||||
	// CADCSRB: CC-ADC Control and Status Register B
 | 
			
		||||
	CADCSRB_CADACIE = 0x40
 | 
			
		||||
	CADCSRB_CADRCIE = 0x20 // Regular Current Interrupt Enable
 | 
			
		||||
	CADCSRB_CADICIE = 0x10 // CAD Instantenous Current Interrupt Enable
 | 
			
		||||
	CADCSRB_CADACIF = 0x4  // CC-ADC Accumulate Current Interrupt Flag
 | 
			
		||||
	CADCSRB_CADRCIF = 0x2  // CC-ADC Accumulate Current Interrupt Flag
 | 
			
		||||
	CADCSRB_CADICIF = 0x1  // CC-ADC Instantaneous Current Interrupt Flag
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
// Bitfields for VOLTAGE_REGULATOR: Voltage Regulator
 | 
			
		||||
const (
 | 
			
		||||
	// ROCR: Regulator Operating Condition Register
 | 
			
		||||
	ROCR_ROCS   = 0x80 // ROC Status
 | 
			
		||||
	ROCR_ROCWIF = 0x2  // ROC Warning Interrupt Flag
 | 
			
		||||
	ROCR_ROCWIE = 0x1  // ROC Warning Interrupt Enable
 | 
			
		||||
)
 | 
			
		||||
							
								
								
									
										6
									
								
								src/device/avr/atmega16hva.ld
									
										
									
									
									
										Обычный файл
									
								
							
							
						
						
									
										6
									
								
								src/device/avr/atmega16hva.ld
									
										
									
									
									
										Обычный файл
									
								
							| 
						 | 
				
			
			@ -0,0 +1,6 @@
 | 
			
		|||
/* Automatically generated file. DO NOT EDIT. */
 | 
			
		||||
/* Generated by gen-device.py from ATmega16HVA.atdf, see http://packs.download.atmel.com/ */
 | 
			
		||||
 | 
			
		||||
__flash_size = 0x4000;
 | 
			
		||||
__ram_size   = 0x200;
 | 
			
		||||
__num_isrs   = 21;
 | 
			
		||||
							
								
								
									
										796
									
								
								src/device/avr/atmega16hvb.go
									
										
									
									
									
										Обычный файл
									
								
							
							
						
						
									
										796
									
								
								src/device/avr/atmega16hvb.go
									
										
									
									
									
										Обычный файл
									
								
							| 
						 | 
				
			
			@ -0,0 +1,796 @@
 | 
			
		|||
// Automatically generated file. DO NOT EDIT.
 | 
			
		||||
// Generated by gen-device.py from ATmega16HVB.atdf, see http://packs.download.atmel.com/
 | 
			
		||||
 | 
			
		||||
// +build avr,atmega16hvb
 | 
			
		||||
 | 
			
		||||
// Device information for the ATmega16HVB.
 | 
			
		||||
//
 | 
			
		||||
package avr
 | 
			
		||||
 | 
			
		||||
// Magic type name for the compiler.
 | 
			
		||||
type __reg uint8
 | 
			
		||||
 | 
			
		||||
// Export this magic type name.
 | 
			
		||||
type RegValue = __reg
 | 
			
		||||
 | 
			
		||||
// Some information about this device.
 | 
			
		||||
const (
 | 
			
		||||
	DEVICE = "ATmega16HVB"
 | 
			
		||||
	ARCH   = "AVR8"
 | 
			
		||||
	FAMILY = "megaAVR"
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
// Interrupts
 | 
			
		||||
const (
 | 
			
		||||
	IRQ_RESET         = 0  // External Pin, Power-on Reset, Brown-out Reset and Watchdog Reset
 | 
			
		||||
	IRQ_BPINT         = 1  // Battery Protection Interrupt
 | 
			
		||||
	IRQ_VREGMON       = 2  // Voltage regulator monitor interrupt
 | 
			
		||||
	IRQ_INT0          = 3  // External Interrupt Request 0
 | 
			
		||||
	IRQ_INT1          = 4  // External Interrupt Request 1
 | 
			
		||||
	IRQ_INT2          = 5  // External Interrupt Request 2
 | 
			
		||||
	IRQ_INT3          = 6  // External Interrupt Request 3
 | 
			
		||||
	IRQ_PCINT0        = 7  // Pin Change Interrupt 0
 | 
			
		||||
	IRQ_PCINT1        = 8  // Pin Change Interrupt 1
 | 
			
		||||
	IRQ_WDT           = 9  // Watchdog Timeout Interrupt
 | 
			
		||||
	IRQ_BGSCD         = 10 // Bandgap Buffer Short Circuit Detected
 | 
			
		||||
	IRQ_CHDET         = 11 // Charger Detect
 | 
			
		||||
	IRQ_TIMER1_IC     = 12 // Timer 1 Input capture
 | 
			
		||||
	IRQ_TIMER1_COMPA  = 13 // Timer 1 Compare Match A
 | 
			
		||||
	IRQ_TIMER1_COMPB  = 14 // Timer 1 Compare Match B
 | 
			
		||||
	IRQ_TIMER1_OVF    = 15 // Timer 1 overflow
 | 
			
		||||
	IRQ_TIMER0_IC     = 16 // Timer 0 Input Capture
 | 
			
		||||
	IRQ_TIMER0_COMPA  = 17 // Timer 0 Comapre Match A
 | 
			
		||||
	IRQ_TIMER0_COMPB  = 18 // Timer 0 Compare Match B
 | 
			
		||||
	IRQ_TIMER0_OVF    = 19 // Timer 0 Overflow
 | 
			
		||||
	IRQ_TWIBUSCD      = 20 // Two-Wire Bus Connect/Disconnect
 | 
			
		||||
	IRQ_TWI           = 21 // Two-Wire Serial Interface
 | 
			
		||||
	IRQ_SPI_STC       = 22 // SPI Serial transfer complete
 | 
			
		||||
	IRQ_VADC          = 23 // Voltage ADC Conversion Complete
 | 
			
		||||
	IRQ_CCADC_CONV    = 24 // Coulomb Counter ADC Conversion Complete
 | 
			
		||||
	IRQ_CCADC_REG_CUR = 25 // Coloumb Counter ADC Regular Current
 | 
			
		||||
	IRQ_CCADC_ACC     = 26 // Coloumb Counter ADC Accumulator
 | 
			
		||||
	IRQ_EE_READY      = 27 // EEPROM Ready
 | 
			
		||||
	IRQ_SPM           = 28 // SPM Ready
 | 
			
		||||
	IRQ_max           = 28 // Highest interrupt number on this device.
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
// Peripherals
 | 
			
		||||
var (
 | 
			
		||||
	// Fuses
 | 
			
		||||
	FUSE = struct {
 | 
			
		||||
		LOW  __reg
 | 
			
		||||
		HIGH __reg
 | 
			
		||||
	}{
 | 
			
		||||
		LOW:  0x0,
 | 
			
		||||
		HIGH: 0x1,
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	// Lockbits
 | 
			
		||||
	LOCKBIT = struct {
 | 
			
		||||
		LOCKBIT __reg
 | 
			
		||||
	}{
 | 
			
		||||
		LOCKBIT: 0x0,
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	// Analog-to-Digital Converter
 | 
			
		||||
	ADC = struct {
 | 
			
		||||
		VADMUX __reg
 | 
			
		||||
		VADCL  __reg
 | 
			
		||||
		VADCH  __reg
 | 
			
		||||
		VADCSR __reg
 | 
			
		||||
	}{
 | 
			
		||||
		VADMUX: 0x7c, // The VADC multiplexer Selection Register
 | 
			
		||||
		VADCL:  0x78, // VADC Data Register Bytes
 | 
			
		||||
		VADCH:  0x78, // VADC Data Register Bytes
 | 
			
		||||
		VADCSR: 0x7a, // The VADC Control and Status register
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	// Watchdog Timer
 | 
			
		||||
	WDT = struct {
 | 
			
		||||
		WDTCSR __reg
 | 
			
		||||
	}{
 | 
			
		||||
		WDTCSR: 0x60, // Watchdog Timer Control Register
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	// FET Control
 | 
			
		||||
	FET = struct {
 | 
			
		||||
		FCSR __reg
 | 
			
		||||
	}{
 | 
			
		||||
		FCSR: 0xf0, // FET Control and Status Register
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	// Serial Peripheral Interface
 | 
			
		||||
	SPI = struct {
 | 
			
		||||
		SPCR __reg
 | 
			
		||||
		SPSR __reg
 | 
			
		||||
		SPDR __reg
 | 
			
		||||
	}{
 | 
			
		||||
		SPCR: 0x4c, // SPI Control Register
 | 
			
		||||
		SPSR: 0x4d, // SPI Status Register
 | 
			
		||||
		SPDR: 0x4e, // SPI Data Register
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	// EEPROM
 | 
			
		||||
	EEPROM = struct {
 | 
			
		||||
		EEARL __reg
 | 
			
		||||
		EEARH __reg
 | 
			
		||||
		EEDR  __reg
 | 
			
		||||
		EECR  __reg
 | 
			
		||||
	}{
 | 
			
		||||
		EEARL: 0x41, // EEPROM Read/Write Access
 | 
			
		||||
		EEARH: 0x41, // EEPROM Read/Write Access
 | 
			
		||||
		EEDR:  0x40, // EEPROM Data Register
 | 
			
		||||
		EECR:  0x3f, // EEPROM Control Register
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	// Coulomb Counter
 | 
			
		||||
	COULOMB_COUNTER = struct {
 | 
			
		||||
		CADCSRA __reg
 | 
			
		||||
		CADCSRB __reg
 | 
			
		||||
		CADCSRC __reg
 | 
			
		||||
		CADICL  __reg
 | 
			
		||||
		CADICH  __reg
 | 
			
		||||
		CADAC3  __reg
 | 
			
		||||
		CADAC2  __reg
 | 
			
		||||
		CADAC1  __reg
 | 
			
		||||
		CADAC0  __reg
 | 
			
		||||
		CADRCC  __reg
 | 
			
		||||
		CADRDC  __reg
 | 
			
		||||
	}{
 | 
			
		||||
		CADCSRA: 0xe6, // CC-ADC Control and Status Register A
 | 
			
		||||
		CADCSRB: 0xe7, // CC-ADC Control and Status Register B
 | 
			
		||||
		CADCSRC: 0xe8, // CC-ADC Control and Status Register C
 | 
			
		||||
		CADICL:  0xe4, // CC-ADC Instantaneous Current
 | 
			
		||||
		CADICH:  0xe4, // CC-ADC Instantaneous Current
 | 
			
		||||
		CADAC3:  0xe3, // ADC Accumulate Current
 | 
			
		||||
		CADAC2:  0xe2, // ADC Accumulate Current
 | 
			
		||||
		CADAC1:  0xe1, // ADC Accumulate Current
 | 
			
		||||
		CADAC0:  0xe0, // ADC Accumulate Current
 | 
			
		||||
		CADRCC:  0xe9, // CC-ADC Regular Charge Current
 | 
			
		||||
		CADRDC:  0xea, // CC-ADC Regular Discharge Current
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	// Two Wire Serial Interface
 | 
			
		||||
	TWI = struct {
 | 
			
		||||
		TWBCSR __reg
 | 
			
		||||
		TWAMR  __reg
 | 
			
		||||
		TWBR   __reg
 | 
			
		||||
		TWCR   __reg
 | 
			
		||||
		TWSR   __reg
 | 
			
		||||
		TWDR   __reg
 | 
			
		||||
		TWAR   __reg
 | 
			
		||||
	}{
 | 
			
		||||
		TWBCSR: 0xbe, // TWI Bus Control and Status Register
 | 
			
		||||
		TWAMR:  0xbd, // TWI (Slave) Address Mask Register
 | 
			
		||||
		TWBR:   0xb8, // TWI Bit Rate register
 | 
			
		||||
		TWCR:   0xbc, // TWI Control Register
 | 
			
		||||
		TWSR:   0xb9, // TWI Status Register
 | 
			
		||||
		TWDR:   0xbb, // TWI Data register
 | 
			
		||||
		TWAR:   0xba, // TWI (Slave) Address register
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	// External Interrupts
 | 
			
		||||
	EXINT = struct {
 | 
			
		||||
		EICRA  __reg
 | 
			
		||||
		EIMSK  __reg
 | 
			
		||||
		EIFR   __reg
 | 
			
		||||
		PCICR  __reg
 | 
			
		||||
		PCIFR  __reg
 | 
			
		||||
		PCMSK1 __reg
 | 
			
		||||
		PCMSK0 __reg
 | 
			
		||||
	}{
 | 
			
		||||
		EICRA:  0x69, // External Interrupt Control Register
 | 
			
		||||
		EIMSK:  0x3d, // External Interrupt Mask Register
 | 
			
		||||
		EIFR:   0x3c, // External Interrupt Flag Register
 | 
			
		||||
		PCICR:  0x68, // Pin Change Interrupt Control Register
 | 
			
		||||
		PCIFR:  0x3b, // Pin Change Interrupt Flag Register
 | 
			
		||||
		PCMSK1: 0x6c, // Pin Change Enable Mask Register 1
 | 
			
		||||
		PCMSK0: 0x6b, // Pin Change Enable Mask Register 0
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	// Timer/Counter, 16-bit
 | 
			
		||||
	TC16 = struct {
 | 
			
		||||
		TCCR1B __reg
 | 
			
		||||
		TCCR1A __reg
 | 
			
		||||
		TCNT1L __reg
 | 
			
		||||
		TCNT1H __reg
 | 
			
		||||
		OCR1A  __reg
 | 
			
		||||
		OCR1B  __reg
 | 
			
		||||
		TIMSK1 __reg
 | 
			
		||||
		TIFR1  __reg
 | 
			
		||||
		TCCR0B __reg
 | 
			
		||||
		TCCR0A __reg
 | 
			
		||||
		TCNT0L __reg
 | 
			
		||||
		TCNT0H __reg
 | 
			
		||||
		OCR0A  __reg
 | 
			
		||||
		OCR0B  __reg
 | 
			
		||||
		TIMSK0 __reg
 | 
			
		||||
		TIFR0  __reg
 | 
			
		||||
	}{
 | 
			
		||||
		TCCR1B: 0x81, // Timer/Counter1 Control Register B
 | 
			
		||||
		TCCR1A: 0x80, // Timer/Counter 1 Control Register A
 | 
			
		||||
		TCNT1L: 0x84, // Timer Counter 1 Bytes
 | 
			
		||||
		TCNT1H: 0x84, // Timer Counter 1 Bytes
 | 
			
		||||
		OCR1A:  0x88, // Output Compare Register 1A
 | 
			
		||||
		OCR1B:  0x89, // Output Compare Register B
 | 
			
		||||
		TIMSK1: 0x6f, // Timer/Counter Interrupt Mask Register
 | 
			
		||||
		TIFR1:  0x36, // Timer/Counter Interrupt Flag register
 | 
			
		||||
		TCCR0B: 0x45, // Timer/Counter0 Control Register B
 | 
			
		||||
		TCCR0A: 0x44, // Timer/Counter 0 Control Register A
 | 
			
		||||
		TCNT0L: 0x46, // Timer Counter 0 Bytes
 | 
			
		||||
		TCNT0H: 0x46, // Timer Counter 0 Bytes
 | 
			
		||||
		OCR0A:  0x48, // Output Compare Register A
 | 
			
		||||
		OCR0B:  0x49, // Output Compare Register B
 | 
			
		||||
		TIMSK0: 0x6e, // Timer/Counter Interrupt Mask Register
 | 
			
		||||
		TIFR0:  0x35, // Timer/Counter Interrupt Flag register
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	// Cell Balancing
 | 
			
		||||
	CELL_BALANCING = struct {
 | 
			
		||||
		CBCR __reg
 | 
			
		||||
	}{
 | 
			
		||||
		CBCR: 0xf1, // Cell Balancing Control Register
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	// Battery Protection
 | 
			
		||||
	BATTERY_PROTECTION = struct {
 | 
			
		||||
		BPPLR  __reg
 | 
			
		||||
		BPCR   __reg
 | 
			
		||||
		BPHCTR __reg
 | 
			
		||||
		BPOCTR __reg
 | 
			
		||||
		BPSCTR __reg
 | 
			
		||||
		BPCHCD __reg
 | 
			
		||||
		BPDHCD __reg
 | 
			
		||||
		BPCOCD __reg
 | 
			
		||||
		BPDOCD __reg
 | 
			
		||||
		BPSCD  __reg
 | 
			
		||||
		BPIFR  __reg
 | 
			
		||||
		BPIMSK __reg
 | 
			
		||||
	}{
 | 
			
		||||
		BPPLR:  0xfe, // Battery Protection Parameter Lock Register
 | 
			
		||||
		BPCR:   0xfd, // Battery Protection Control Register
 | 
			
		||||
		BPHCTR: 0xfc, // Battery Protection Short-current Timing Register
 | 
			
		||||
		BPOCTR: 0xfb, // Battery Protection Over-current Timing Register
 | 
			
		||||
		BPSCTR: 0xfa, // Battery Protection Short-current Timing Register
 | 
			
		||||
		BPCHCD: 0xf9, // Battery Protection Charge-High-current Detection Level Register
 | 
			
		||||
		BPDHCD: 0xf8, // Battery Protection Discharge-High-current Detection Level Register
 | 
			
		||||
		BPCOCD: 0xf7, // Battery Protection Charge-Over-current Detection Level Register
 | 
			
		||||
		BPDOCD: 0xf6, // Battery Protection Discharge-Over-current Detection Level Register
 | 
			
		||||
		BPSCD:  0xf5, // Battery Protection Short-Circuit Detection Level Register
 | 
			
		||||
		BPIFR:  0xf3, // Battery Protection Interrupt Flag Register
 | 
			
		||||
		BPIMSK: 0xf2, // Battery Protection Interrupt Mask Register
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	// Charger Detect
 | 
			
		||||
	CHARGER_DETECT = struct {
 | 
			
		||||
		CHGDCSR __reg
 | 
			
		||||
	}{
 | 
			
		||||
		CHGDCSR: 0xd4, // Charger Detect Control and Status Register
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	// Voltage Regulator
 | 
			
		||||
	VOLTAGE_REGULATOR = struct {
 | 
			
		||||
		ROCR __reg
 | 
			
		||||
	}{
 | 
			
		||||
		ROCR: 0xc8, // Regulator Operating Condition Register
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	// Bandgap
 | 
			
		||||
	BANDGAP = struct {
 | 
			
		||||
		BGCSR __reg
 | 
			
		||||
		BGCRR __reg
 | 
			
		||||
		BGCCR __reg
 | 
			
		||||
	}{
 | 
			
		||||
		BGCSR: 0xd2, // Bandgap Control and Status Register
 | 
			
		||||
		BGCRR: 0xd1, // Bandgap Calibration of Resistor Ladder
 | 
			
		||||
		BGCCR: 0xd0, // Bandgap Calibration Register
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	// CPU Registers
 | 
			
		||||
	CPU = struct {
 | 
			
		||||
		SREG    __reg
 | 
			
		||||
		SPL     __reg
 | 
			
		||||
		SPH     __reg
 | 
			
		||||
		MCUCR   __reg
 | 
			
		||||
		MCUSR   __reg
 | 
			
		||||
		FOSCCAL __reg
 | 
			
		||||
		OSICSR  __reg
 | 
			
		||||
		SMCR    __reg
 | 
			
		||||
		GPIOR2  __reg
 | 
			
		||||
		GPIOR1  __reg
 | 
			
		||||
		GPIOR0  __reg
 | 
			
		||||
		DIDR0   __reg
 | 
			
		||||
		PRR0    __reg
 | 
			
		||||
		CLKPR   __reg
 | 
			
		||||
	}{
 | 
			
		||||
		SREG:    0x5f, // Status Register
 | 
			
		||||
		SPL:     0x5d, // Stack Pointer
 | 
			
		||||
		SPH:     0x5d, // Stack Pointer
 | 
			
		||||
		MCUCR:   0x55, // MCU Control Register
 | 
			
		||||
		MCUSR:   0x54, // MCU Status Register
 | 
			
		||||
		FOSCCAL: 0x66, // Fast Oscillator Calibration Value
 | 
			
		||||
		OSICSR:  0x37, // Oscillator Sampling Interface Control and Status Register
 | 
			
		||||
		SMCR:    0x53, // Sleep Mode Control Register
 | 
			
		||||
		GPIOR2:  0x4b, // General Purpose IO Register 2
 | 
			
		||||
		GPIOR1:  0x4a, // General Purpose IO Register 1
 | 
			
		||||
		GPIOR0:  0x3e, // General Purpose IO Register 0
 | 
			
		||||
		DIDR0:   0x7e, // Digital Input Disable Register
 | 
			
		||||
		PRR0:    0x64, // Power Reduction Register 0
 | 
			
		||||
		CLKPR:   0x61, // Clock Prescale Register
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	// I/O Port
 | 
			
		||||
	PORT = struct {
 | 
			
		||||
		PORTA __reg
 | 
			
		||||
		DDRA  __reg
 | 
			
		||||
		PINA  __reg
 | 
			
		||||
		PORTB __reg
 | 
			
		||||
		DDRB  __reg
 | 
			
		||||
		PINB  __reg
 | 
			
		||||
		PORTC __reg
 | 
			
		||||
		PINC  __reg
 | 
			
		||||
	}{
 | 
			
		||||
		PORTA: 0x22, // Port A Data Register
 | 
			
		||||
		DDRA:  0x21, // Port A Data Direction Register
 | 
			
		||||
		PINA:  0x20, // Port A Input Pins
 | 
			
		||||
		PORTB: 0x25, // Port B Data Register
 | 
			
		||||
		DDRB:  0x24, // Port B Data Direction Register
 | 
			
		||||
		PINB:  0x23, // Port B Input Pins
 | 
			
		||||
		PORTC: 0x28, // Port C Data Register
 | 
			
		||||
		PINC:  0x26, // Port C Input Pins
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	// Bootloader
 | 
			
		||||
	BOOT_LOAD = struct {
 | 
			
		||||
		SPMCSR __reg
 | 
			
		||||
	}{
 | 
			
		||||
		SPMCSR: 0x57, // Store Program Memory Control and Status Register
 | 
			
		||||
	}
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
// Bitfields for FUSE: Fuses
 | 
			
		||||
const (
 | 
			
		||||
	// LOW
 | 
			
		||||
	LOW_WDTON  = 0x80 // Watch-dog Timer always on
 | 
			
		||||
	LOW_EESAVE = 0x40 // Preserve EEPROM through the Chip Erase cycle
 | 
			
		||||
	LOW_SPIEN  = 0x20 // Serial program downloading (SPI) enabled
 | 
			
		||||
	LOW_SUT    = 0x1c // Select start-up time
 | 
			
		||||
	LOW_OSCSEL = 0x3  // Oscillator select
 | 
			
		||||
 | 
			
		||||
	// HIGH
 | 
			
		||||
	HIGH_CKDIV8  = 0x10 // Clock Divide mode
 | 
			
		||||
	HIGH_DWEN    = 0x8  // Debug Wire enable
 | 
			
		||||
	HIGH_BOOTSZ  = 0x6  // Select Boot Size
 | 
			
		||||
	HIGH_BOOTRST = 0x1  // Boot Reset vector Enabled
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
// Bitfields for LOCKBIT: Lockbits
 | 
			
		||||
const (
 | 
			
		||||
	// LOCKBIT
 | 
			
		||||
	LOCKBIT_LB   = 0x3  // Memory Lock
 | 
			
		||||
	LOCKBIT_BLB0 = 0xc  // Boot Loader Protection Mode
 | 
			
		||||
	LOCKBIT_BLB1 = 0x30 // Boot Loader Protection Mode
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
// Bitfields for ADC: Analog-to-Digital Converter
 | 
			
		||||
const (
 | 
			
		||||
	// VADMUX: The VADC multiplexer Selection Register
 | 
			
		||||
	VADMUX_VADMUX = 0xf // Analog Channel and Gain Selection Bits
 | 
			
		||||
 | 
			
		||||
	// VADCL: VADC Data Register Bytes
 | 
			
		||||
 | 
			
		||||
	// VADCH: VADC Data Register Bytes
 | 
			
		||||
	VADC_VADC = 0xfff // VADC Data bits
 | 
			
		||||
 | 
			
		||||
	// VADCSR: The VADC Control and Status register
 | 
			
		||||
	VADCSR_VADEN   = 0x8 // VADC Enable
 | 
			
		||||
	VADCSR_VADSC   = 0x4 // VADC Satrt Conversion
 | 
			
		||||
	VADCSR_VADCCIF = 0x2 // VADC Conversion Complete Interrupt Flag
 | 
			
		||||
	VADCSR_VADCCIE = 0x1 // VADC Conversion Complete Interrupt Enable
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
// Bitfields for WDT: Watchdog Timer
 | 
			
		||||
const (
 | 
			
		||||
	// WDTCSR: Watchdog Timer Control Register
 | 
			
		||||
	WDTCSR_WDIF = 0x80 // Watchdog Timeout Interrupt Flag
 | 
			
		||||
	WDTCSR_WDIE = 0x40 // Watchdog Timeout Interrupt Enable
 | 
			
		||||
	WDTCSR_WDP  = 0x27 // Watchdog Timer Prescaler Bits
 | 
			
		||||
	WDTCSR_WDCE = 0x10 // Watchdog Change Enable
 | 
			
		||||
	WDTCSR_WDE  = 0x8  // Watch Dog Enable
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
// Bitfields for FET: FET Control
 | 
			
		||||
const (
 | 
			
		||||
	// FCSR: FET Control and Status Register
 | 
			
		||||
	FCSR_DUVRD = 0x8 // Deep Under-Voltage Recovery Disable
 | 
			
		||||
	FCSR_CPS   = 0x4 // Current Protection Status
 | 
			
		||||
	FCSR_DFE   = 0x2 // Discharge FET Enable
 | 
			
		||||
	FCSR_CFE   = 0x1 // Charge FET Enable
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
// Bitfields for SPI: Serial Peripheral Interface
 | 
			
		||||
const (
 | 
			
		||||
	// SPCR: SPI Control Register
 | 
			
		||||
	SPCR_SPIE = 0x80 // SPI Interrupt Enable
 | 
			
		||||
	SPCR_SPE  = 0x40 // SPI Enable
 | 
			
		||||
	SPCR_DORD = 0x20 // Data Order
 | 
			
		||||
	SPCR_MSTR = 0x10 // Master/Slave Select
 | 
			
		||||
	SPCR_CPOL = 0x8  // Clock polarity
 | 
			
		||||
	SPCR_CPHA = 0x4  // Clock Phase
 | 
			
		||||
	SPCR_SPR  = 0x3  // SPI Clock Rate Selects
 | 
			
		||||
 | 
			
		||||
	// SPSR: SPI Status Register
 | 
			
		||||
	SPSR_SPIF  = 0x80 // SPI Interrupt Flag
 | 
			
		||||
	SPSR_WCOL  = 0x40 // Write Collision Flag
 | 
			
		||||
	SPSR_SPI2X = 0x1  // Double SPI Speed Bit
 | 
			
		||||
 | 
			
		||||
	// SPDR: SPI Data Register
 | 
			
		||||
	SPDR_SPDR = 0xff // SPI Data bits
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
// Bitfields for EEPROM: EEPROM
 | 
			
		||||
const (
 | 
			
		||||
	// EEARL: EEPROM Read/Write Access
 | 
			
		||||
 | 
			
		||||
	// EEARH: EEPROM Read/Write Access
 | 
			
		||||
	EEAR_EEAR = 0x3ff // EEPROM Address bits
 | 
			
		||||
 | 
			
		||||
	// EEDR: EEPROM Data Register
 | 
			
		||||
	EEDR_EEDR = 0xff // EEPROM Data bits
 | 
			
		||||
 | 
			
		||||
	// EECR: EEPROM Control Register
 | 
			
		||||
	EECR_EEPM  = 0x30
 | 
			
		||||
	EECR_EERIE = 0x8 // EEProm Ready Interrupt Enable
 | 
			
		||||
	EECR_EEMPE = 0x4 // EEPROM Master Write Enable
 | 
			
		||||
	EECR_EEPE  = 0x2 // EEPROM Write Enable
 | 
			
		||||
	EECR_EERE  = 0x1 // EEPROM Read Enable
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
// Bitfields for COULOMB_COUNTER: Coulomb Counter
 | 
			
		||||
const (
 | 
			
		||||
	// CADCSRA: CC-ADC Control and Status Register A
 | 
			
		||||
	CADCSRA_CADEN  = 0x80 // When the CADEN bit is cleared (zero), the CC-ADC is disabled. When the CADEN bit is set (one), the CC-ADC will continuously measure the voltage drop over the external sense resistor RSENSE. In Power-down, only the Regular Current detection is active. In Power-off, the CC-ADC is always disabled.
 | 
			
		||||
	CADCSRA_CADPOL = 0x40
 | 
			
		||||
	CADCSRA_CADUB  = 0x20 // CC_ADC Update Busy
 | 
			
		||||
	CADCSRA_CADAS  = 0x18 // CC_ADC Accumulate Current Select Bits
 | 
			
		||||
	CADCSRA_CADSI  = 0x6  // The CADSI bits determine the current sampling interval for the Regular Current detection in Power-down mode. The actual settings remain to be determined.
 | 
			
		||||
	CADCSRA_CADSE  = 0x1  // When the CADSE bit is written to one, the ongoing CC-ADC conversion is aborted, and the CC-ADC enters Regular Current detection mode.
 | 
			
		||||
 | 
			
		||||
	// CADCSRB: CC-ADC Control and Status Register B
 | 
			
		||||
	CADCSRB_CADACIE = 0x40
 | 
			
		||||
	CADCSRB_CADRCIE = 0x20 // Regular Current Interrupt Enable
 | 
			
		||||
	CADCSRB_CADICIE = 0x10 // CAD Instantenous Current Interrupt Enable
 | 
			
		||||
	CADCSRB_CADACIF = 0x4  // CC-ADC Accumulate Current Interrupt Flag
 | 
			
		||||
	CADCSRB_CADRCIF = 0x2  // CC-ADC Accumulate Current Interrupt Flag
 | 
			
		||||
	CADCSRB_CADICIF = 0x1  // CC-ADC Instantaneous Current Interrupt Flag
 | 
			
		||||
 | 
			
		||||
	// CADCSRC: CC-ADC Control and Status Register C
 | 
			
		||||
	CADCSRC_CADVSE = 0x1 // CC-ADC Voltage Scaling Enable
 | 
			
		||||
 | 
			
		||||
	// CADICL: CC-ADC Instantaneous Current
 | 
			
		||||
 | 
			
		||||
	// CADICH: CC-ADC Instantaneous Current
 | 
			
		||||
	CADIC_CADIC = 0xffff // CC-ADC Instantaneous Current
 | 
			
		||||
 | 
			
		||||
	// CADAC3: ADC Accumulate Current
 | 
			
		||||
	CADAC3_CADAC = 0xff // ADC accumulate current bits
 | 
			
		||||
 | 
			
		||||
	// CADAC2: ADC Accumulate Current
 | 
			
		||||
	CADAC2_CADAC = 0xff // ADC accumulate current bits
 | 
			
		||||
 | 
			
		||||
	// CADAC1: ADC Accumulate Current
 | 
			
		||||
	CADAC1_CADAC  = 0xfc // ADC accumulate current bits
 | 
			
		||||
	CADAC1_CADAC0 = 0x3  // ADC accumulate current bits
 | 
			
		||||
 | 
			
		||||
	// CADAC0: ADC Accumulate Current
 | 
			
		||||
	CADAC0_CADAC0 = 0xff // ADC accumulate current bits
 | 
			
		||||
 | 
			
		||||
	// CADRCC: CC-ADC Regular Charge Current
 | 
			
		||||
	CADRCC_CADRCC = 0xff // CC-ADC Regular Charge Current
 | 
			
		||||
 | 
			
		||||
	// CADRDC: CC-ADC Regular Discharge Current
 | 
			
		||||
	CADRDC_CADRDC = 0xff // CC-ADC Regular Discharge Current
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
// Bitfields for TWI: Two Wire Serial Interface
 | 
			
		||||
const (
 | 
			
		||||
	// TWBCSR: TWI Bus Control and Status Register
 | 
			
		||||
	TWBCSR_TWBCIF = 0x80 // TWI Bus Connect/Disconnect Interrupt Flag
 | 
			
		||||
	TWBCSR_TWBCIE = 0x40 // TWI Bus Connect/Disconnect Interrupt Enable
 | 
			
		||||
	TWBCSR_TWBDT  = 0x6  // TWI Bus Disconnect Time-out Period
 | 
			
		||||
	TWBCSR_TWBCIP = 0x1  // TWI Bus Connect/Disconnect Interrupt Polarity
 | 
			
		||||
 | 
			
		||||
	// TWAMR: TWI (Slave) Address Mask Register
 | 
			
		||||
	TWAMR_TWAM = 0xfe
 | 
			
		||||
 | 
			
		||||
	// TWBR: TWI Bit Rate register
 | 
			
		||||
	TWBR_TWBR = 0xff // TWI Bit Rate bits
 | 
			
		||||
 | 
			
		||||
	// TWCR: TWI Control Register
 | 
			
		||||
	TWCR_TWINT = 0x80 // TWI Interrupt Flag
 | 
			
		||||
	TWCR_TWEA  = 0x40 // TWI Enable Acknowledge Bit
 | 
			
		||||
	TWCR_TWSTA = 0x20 // TWI Start Condition Bit
 | 
			
		||||
	TWCR_TWSTO = 0x10 // TWI Stop Condition Bit
 | 
			
		||||
	TWCR_TWWC  = 0x8  // TWI Write Collition Flag
 | 
			
		||||
	TWCR_TWEN  = 0x4  // TWI Enable Bit
 | 
			
		||||
	TWCR_TWIE  = 0x1  // TWI Interrupt Enable
 | 
			
		||||
 | 
			
		||||
	// TWSR: TWI Status Register
 | 
			
		||||
	TWSR_TWS  = 0xf8 // TWI Status
 | 
			
		||||
	TWSR_TWPS = 0x3  // TWI Prescaler
 | 
			
		||||
 | 
			
		||||
	// TWDR: TWI Data register
 | 
			
		||||
	TWDR_TWD = 0xff // TWI Data Bits
 | 
			
		||||
 | 
			
		||||
	// TWAR: TWI (Slave) Address register
 | 
			
		||||
	TWAR_TWA   = 0xfe // TWI (Slave) Address register Bits
 | 
			
		||||
	TWAR_TWGCE = 0x1  // TWI General Call Recognition Enable Bit
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
// Bitfields for EXINT: External Interrupts
 | 
			
		||||
const (
 | 
			
		||||
	// EICRA: External Interrupt Control Register
 | 
			
		||||
	EICRA_ISC3 = 0xc0 // External Interrupt Sense Control 3 Bits
 | 
			
		||||
	EICRA_ISC2 = 0x30 // External Interrupt Sense Control 2 Bits
 | 
			
		||||
	EICRA_ISC1 = 0xc  // External Interrupt Sense Control 1 Bits
 | 
			
		||||
	EICRA_ISC0 = 0x3  // External Interrupt Sense Control 0 Bits
 | 
			
		||||
 | 
			
		||||
	// EIMSK: External Interrupt Mask Register
 | 
			
		||||
	EIMSK_INT = 0xf // External Interrupt Request 3 Enable
 | 
			
		||||
 | 
			
		||||
	// EIFR: External Interrupt Flag Register
 | 
			
		||||
	EIFR_INTF = 0xf // External Interrupt Flags
 | 
			
		||||
 | 
			
		||||
	// PCICR: Pin Change Interrupt Control Register
 | 
			
		||||
	PCICR_PCIE = 0x3 // Pin Change Interrupt Enables
 | 
			
		||||
 | 
			
		||||
	// PCIFR: Pin Change Interrupt Flag Register
 | 
			
		||||
	PCIFR_PCIF = 0x3 // Pin Change Interrupt Flags
 | 
			
		||||
 | 
			
		||||
	// PCMSK1: Pin Change Enable Mask Register 1
 | 
			
		||||
	PCMSK1_PCINT = 0xff // Pin Change Enable Mask
 | 
			
		||||
 | 
			
		||||
	// PCMSK0: Pin Change Enable Mask Register 0
 | 
			
		||||
	PCMSK0_PCINT = 0xf // Pin Change Enable Mask
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
// Bitfields for TC16: Timer/Counter, 16-bit
 | 
			
		||||
const (
 | 
			
		||||
	// TCCR1B: Timer/Counter1 Control Register B
 | 
			
		||||
	TCCR1B_CS = 0x7 // Clock Select1 bis
 | 
			
		||||
 | 
			
		||||
	// TCCR1A: Timer/Counter 1 Control Register A
 | 
			
		||||
	TCCR1A_TCW1  = 0x80 // Timer/Counter Width
 | 
			
		||||
	TCCR1A_ICEN1 = 0x40 // Input Capture Mode Enable
 | 
			
		||||
	TCCR1A_ICNC1 = 0x20 // Input Capture Noise Canceler
 | 
			
		||||
	TCCR1A_ICES1 = 0x10 // Input Capture Edge Select
 | 
			
		||||
	TCCR1A_ICS1  = 0x8  // Input Capture Select
 | 
			
		||||
	TCCR1A_WGM10 = 0x1  // Waveform Generation Mode
 | 
			
		||||
 | 
			
		||||
	// TCNT1L: Timer Counter 1 Bytes
 | 
			
		||||
 | 
			
		||||
	// TCNT1H: Timer Counter 1 Bytes
 | 
			
		||||
	TCNT1_TCNT1 = 0xffff // Timer Counter 1 bits
 | 
			
		||||
 | 
			
		||||
	// OCR1A: Output Compare Register 1A
 | 
			
		||||
	OCR1A_OCR1A = 0xff // Output Compare 1 A bits
 | 
			
		||||
 | 
			
		||||
	// OCR1B: Output Compare Register B
 | 
			
		||||
	OCR1B_OCR1B = 0xff // Output Compare 1 B bits
 | 
			
		||||
 | 
			
		||||
	// TIMSK1: Timer/Counter Interrupt Mask Register
 | 
			
		||||
	TIMSK1_ICIE1  = 0x8 // Timer/Counter n Input Capture Interrupt Enable
 | 
			
		||||
	TIMSK1_OCIE1B = 0x4 // Timer/Counter1 Output Compare B Interrupt Enable
 | 
			
		||||
	TIMSK1_OCIE1A = 0x2 // Timer/Counter1 Output Compare A Interrupt Enable
 | 
			
		||||
	TIMSK1_TOIE1  = 0x1 // Timer/Counter1 Overflow Interrupt Enable
 | 
			
		||||
 | 
			
		||||
	// TIFR1: Timer/Counter Interrupt Flag register
 | 
			
		||||
	TIFR1_ICF1  = 0x8 // Timer/Counter 1 Input Capture Flag
 | 
			
		||||
	TIFR1_OCF1B = 0x4 // Timer/Counter1 Output Compare Flag B
 | 
			
		||||
	TIFR1_OCF1A = 0x2 // Timer/Counter1 Output Compare Flag A
 | 
			
		||||
	TIFR1_TOV1  = 0x1 // Timer/Counter1 Overflow Flag
 | 
			
		||||
 | 
			
		||||
	// TCCR0B: Timer/Counter0 Control Register B
 | 
			
		||||
	TCCR0B_CS02 = 0x4 // Clock Select0 bit 2
 | 
			
		||||
	TCCR0B_CS01 = 0x2 // Clock Select0 bit 1
 | 
			
		||||
	TCCR0B_CS00 = 0x1 // Clock Select0 bit 0
 | 
			
		||||
 | 
			
		||||
	// TCCR0A: Timer/Counter 0 Control Register A
 | 
			
		||||
	TCCR0A_TCW0  = 0x80 // Timer/Counter Width
 | 
			
		||||
	TCCR0A_ICEN0 = 0x40 // Input Capture Mode Enable
 | 
			
		||||
	TCCR0A_ICNC0 = 0x20 // Input Capture Noise Canceler
 | 
			
		||||
	TCCR0A_ICES0 = 0x10 // Input Capture Edge Select
 | 
			
		||||
	TCCR0A_ICS0  = 0x8  // Input Capture Select
 | 
			
		||||
	TCCR0A_WGM00 = 0x1  // Waveform Generation Mode
 | 
			
		||||
 | 
			
		||||
	// TCNT0L: Timer Counter 0 Bytes
 | 
			
		||||
 | 
			
		||||
	// TCNT0H: Timer Counter 0 Bytes
 | 
			
		||||
	TCNT0_TCNT0 = 0xffff // Timer Counter 0 bits
 | 
			
		||||
 | 
			
		||||
	// OCR0A: Output Compare Register A
 | 
			
		||||
	OCR0A_OCR0A = 0xff // Output Compare 0 A bits
 | 
			
		||||
 | 
			
		||||
	// OCR0B: Output Compare Register B
 | 
			
		||||
	OCR0B_OCR0B = 0xff // Output Compare 0 B bits
 | 
			
		||||
 | 
			
		||||
	// TIMSK0: Timer/Counter Interrupt Mask Register
 | 
			
		||||
	TIMSK0_ICIE0  = 0x8 // Timer/Counter n Input Capture Interrupt Enable
 | 
			
		||||
	TIMSK0_OCIE0B = 0x4 // Timer/Counter0 Output Compare B Interrupt Enable
 | 
			
		||||
	TIMSK0_OCIE0A = 0x2 // Timer/Counter0 Output Compare A Interrupt Enable
 | 
			
		||||
	TIMSK0_TOIE0  = 0x1 // Timer/Counter0 Overflow Interrupt Enable
 | 
			
		||||
 | 
			
		||||
	// TIFR0: Timer/Counter Interrupt Flag register
 | 
			
		||||
	TIFR0_ICF0  = 0x8 // Timer/Counter 0 Input Capture Flag
 | 
			
		||||
	TIFR0_OCF0B = 0x4 // Timer/Counter0 Output Compare Flag B
 | 
			
		||||
	TIFR0_OCF0A = 0x2 // Timer/Counter0 Output Compare Flag A
 | 
			
		||||
	TIFR0_TOV0  = 0x1 // Timer/Counter0 Overflow Flag
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
// Bitfields for CELL_BALANCING: Cell Balancing
 | 
			
		||||
const (
 | 
			
		||||
	// CBCR: Cell Balancing Control Register
 | 
			
		||||
	CBCR_CBE = 0xf // Cell Balancing Enables
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
// Bitfields for BATTERY_PROTECTION: Battery Protection
 | 
			
		||||
const (
 | 
			
		||||
	// BPPLR: Battery Protection Parameter Lock Register
 | 
			
		||||
	BPPLR_BPPLE = 0x2 // Battery Protection Parameter Lock Enable
 | 
			
		||||
	BPPLR_BPPL  = 0x1 // Battery Protection Parameter Lock
 | 
			
		||||
 | 
			
		||||
	// BPCR: Battery Protection Control Register
 | 
			
		||||
	BPCR_EPID = 0x20 // External Protection Input Disable
 | 
			
		||||
	BPCR_SCD  = 0x10 // Short Circuit Protection Disabled
 | 
			
		||||
	BPCR_DOCD = 0x8  // Discharge Over-current Protection Disabled
 | 
			
		||||
	BPCR_COCD = 0x4  // Charge Over-current Protection Disabled
 | 
			
		||||
	BPCR_DHCD = 0x2  // Discharge High-current Protection Disable
 | 
			
		||||
	BPCR_CHCD = 0x1  // Charge High-current Protection Disable
 | 
			
		||||
 | 
			
		||||
	// BPHCTR: Battery Protection Short-current Timing Register
 | 
			
		||||
	BPHCTR_HCPT = 0x3f // Battery Protection Short-current Timing bits
 | 
			
		||||
 | 
			
		||||
	// BPOCTR: Battery Protection Over-current Timing Register
 | 
			
		||||
	BPOCTR_OCPT = 0x3f // Battery Protection Over-current Timing bits
 | 
			
		||||
 | 
			
		||||
	// BPSCTR: Battery Protection Short-current Timing Register
 | 
			
		||||
	BPSCTR_SCPT = 0x7f // Battery Protection Short-current Timing bits
 | 
			
		||||
 | 
			
		||||
	// BPCHCD: Battery Protection Charge-High-current Detection Level Register
 | 
			
		||||
	BPCHCD_CHCDL = 0xff // Battery Protection Charge-High-current Detection Level bits
 | 
			
		||||
 | 
			
		||||
	// BPDHCD: Battery Protection Discharge-High-current Detection Level Register
 | 
			
		||||
	BPDHCD_DHCDL = 0xff // Battery Protection Discharge-High-current Detection Level bits
 | 
			
		||||
 | 
			
		||||
	// BPCOCD: Battery Protection Charge-Over-current Detection Level Register
 | 
			
		||||
	BPCOCD_COCDL = 0xff // Battery Protection Charge-Over-current Detection Level bits
 | 
			
		||||
 | 
			
		||||
	// BPDOCD: Battery Protection Discharge-Over-current Detection Level Register
 | 
			
		||||
	BPDOCD_DOCDL = 0xff // Battery Protection Discharge-Over-current Detection Level bits
 | 
			
		||||
 | 
			
		||||
	// BPSCD: Battery Protection Short-Circuit Detection Level Register
 | 
			
		||||
	BPSCD_SCDL = 0xff // Battery Protection Short-Circuit Detection Level Register bits
 | 
			
		||||
 | 
			
		||||
	// BPIFR: Battery Protection Interrupt Flag Register
 | 
			
		||||
	BPIFR_SCIF  = 0x10 // Short-circuit Protection Activated Interrupt Flag
 | 
			
		||||
	BPIFR_DOCIF = 0x8  // Discharge Over-current Protection Activated Interrupt Flag
 | 
			
		||||
	BPIFR_COCIF = 0x4  // Charge Over-current Protection Activated Interrupt Flag
 | 
			
		||||
	BPIFR_DHCIF = 0x2  // Disharge High-current Protection Activated Interrupt
 | 
			
		||||
	BPIFR_CHCIF = 0x1  // Charge High-current Protection Activated Interrupt
 | 
			
		||||
 | 
			
		||||
	// BPIMSK: Battery Protection Interrupt Mask Register
 | 
			
		||||
	BPIMSK_SCIE  = 0x10 // Short-circuit Protection Activated Interrupt Enable
 | 
			
		||||
	BPIMSK_DOCIE = 0x8  // Discharge Over-current Protection Activated Interrupt Enable
 | 
			
		||||
	BPIMSK_COCIE = 0x4  // Charge Over-current Protection Activated Interrupt Enable
 | 
			
		||||
	BPIMSK_DHCIE = 0x2  // Discharger High-current Protection Activated Interrupt
 | 
			
		||||
	BPIMSK_CHCIE = 0x1  // Charger High-current Protection Activated Interrupt
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
// Bitfields for CHARGER_DETECT: Charger Detect
 | 
			
		||||
const (
 | 
			
		||||
	// CHGDCSR: Charger Detect Control and Status Register
 | 
			
		||||
	CHGDCSR_BATTPVL = 0x10 // BATT Pin Voltage Level
 | 
			
		||||
	CHGDCSR_CHGDISC = 0xc  // Charger Detect Interrupt Sense Control
 | 
			
		||||
	CHGDCSR_CHGDIF  = 0x2  // Charger Detect Interrupt Flag
 | 
			
		||||
	CHGDCSR_CHGDIE  = 0x1  // Charger Detect Interrupt Enable
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
// Bitfields for VOLTAGE_REGULATOR: Voltage Regulator
 | 
			
		||||
const (
 | 
			
		||||
	// ROCR: Regulator Operating Condition Register
 | 
			
		||||
	ROCR_ROCS   = 0x80 // ROC Status
 | 
			
		||||
	ROCR_ROCD   = 0x10 // ROC Disable
 | 
			
		||||
	ROCR_ROCWIF = 0x2  // ROC Warning Interrupt Flag
 | 
			
		||||
	ROCR_ROCWIE = 0x1  // ROC Warning Interrupt Enable
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
// Bitfields for BANDGAP: Bandgap
 | 
			
		||||
const (
 | 
			
		||||
	// BGCSR: Bandgap Control and Status Register
 | 
			
		||||
	BGCSR_BGD     = 0x20 // Bandgap Disable
 | 
			
		||||
	BGCSR_BGSCDE  = 0x10 // Bandgap Short Circuit Detection Enabled
 | 
			
		||||
	BGCSR_BGSCDIF = 0x2  // Bandgap Short Circuit Detection Interrupt Flag
 | 
			
		||||
	BGCSR_BGSCDIE = 0x1  // Bandgap Short Circuit Detection Interrupt Enable
 | 
			
		||||
 | 
			
		||||
	// BGCRR: Bandgap Calibration of Resistor Ladder
 | 
			
		||||
	BGCRR_BGCR = 0xff // Bandgap Calibration of Resistor Ladder Bits
 | 
			
		||||
 | 
			
		||||
	// BGCCR: Bandgap Calibration Register
 | 
			
		||||
	BGCCR_BGCC = 0x3f // BG Calibration of PTAT Current Bits
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
// Bitfields for CPU: CPU Registers
 | 
			
		||||
const (
 | 
			
		||||
	// SREG: Status Register
 | 
			
		||||
	SREG_I = 0x80 // Global Interrupt Enable
 | 
			
		||||
	SREG_T = 0x40 // Bit Copy Storage
 | 
			
		||||
	SREG_H = 0x20 // Half Carry Flag
 | 
			
		||||
	SREG_S = 0x10 // Sign Bit
 | 
			
		||||
	SREG_V = 0x8  // Two's Complement Overflow Flag
 | 
			
		||||
	SREG_N = 0x4  // Negative Flag
 | 
			
		||||
	SREG_Z = 0x2  // Zero Flag
 | 
			
		||||
	SREG_C = 0x1  // Carry Flag
 | 
			
		||||
 | 
			
		||||
	// MCUCR: MCU Control Register
 | 
			
		||||
	MCUCR_CKOE  = 0x20 // Clock Output Enable
 | 
			
		||||
	MCUCR_PUD   = 0x10 // Pull-up disable
 | 
			
		||||
	MCUCR_IVSEL = 0x2  // Interrupt Vector Select
 | 
			
		||||
	MCUCR_IVCE  = 0x1  // Interrupt Vector Change Enable
 | 
			
		||||
 | 
			
		||||
	// MCUSR: MCU Status Register
 | 
			
		||||
	MCUSR_OCDRF = 0x10 // OCD Reset Flag
 | 
			
		||||
	MCUSR_WDRF  = 0x8  // Watchdog Reset Flag
 | 
			
		||||
	MCUSR_BODRF = 0x4  // Brown-out Reset Flag
 | 
			
		||||
	MCUSR_EXTRF = 0x2  // External Reset Flag
 | 
			
		||||
	MCUSR_PORF  = 0x1  // Power-on reset flag
 | 
			
		||||
 | 
			
		||||
	// FOSCCAL: Fast Oscillator Calibration Value
 | 
			
		||||
	FOSCCAL_FCAL = 0xff // Fast Oscillator Calibration Value
 | 
			
		||||
 | 
			
		||||
	// OSICSR: Oscillator Sampling Interface Control and Status Register
 | 
			
		||||
	OSICSR_OSISEL0 = 0x10 // Oscillator Sampling Interface Select 0
 | 
			
		||||
	OSICSR_OSIST   = 0x2  // Oscillator Sampling Interface Status
 | 
			
		||||
	OSICSR_OSIEN   = 0x1  // Oscillator Sampling Interface Enable
 | 
			
		||||
 | 
			
		||||
	// SMCR: Sleep Mode Control Register
 | 
			
		||||
	SMCR_SM = 0xe // Sleep Mode Select bits
 | 
			
		||||
	SMCR_SE = 0x1 // Sleep Enable
 | 
			
		||||
 | 
			
		||||
	// GPIOR2: General Purpose IO Register 2
 | 
			
		||||
	GPIOR2_GPIOR2 = 0xff // General Purpose IO bits
 | 
			
		||||
 | 
			
		||||
	// GPIOR1: General Purpose IO Register 1
 | 
			
		||||
	GPIOR1_GPIOR1 = 0xff // General Purpose IO bits
 | 
			
		||||
 | 
			
		||||
	// GPIOR0: General Purpose IO Register 0
 | 
			
		||||
	GPIOR0_GPIOR0 = 0xff // General Purpose IO bits
 | 
			
		||||
 | 
			
		||||
	// DIDR0: Digital Input Disable Register
 | 
			
		||||
	DIDR0_PA1DID = 0x2 // When this bit is written logic one, the digital input buffer of the corresponding V_ADC pin is disabled.
 | 
			
		||||
	DIDR0_PA0DID = 0x1 // When this bit is written logic one, the digital input buffer of the corresponding V_ADC pin is disabled.
 | 
			
		||||
 | 
			
		||||
	// PRR0: Power Reduction Register 0
 | 
			
		||||
	PRR0_PRTWI  = 0x40 // Power Reduction TWI
 | 
			
		||||
	PRR0_PRVRM  = 0x20 // Power Reduction Voltage Regulator Monitor
 | 
			
		||||
	PRR0_PRSPI  = 0x8  // Power reduction SPI
 | 
			
		||||
	PRR0_PRTIM1 = 0x4  // Power Reduction Timer/Counter1
 | 
			
		||||
	PRR0_PRTIM0 = 0x2  // Power Reduction Timer/Counter0
 | 
			
		||||
	PRR0_PRVADC = 0x1  // Power Reduction V-ADC
 | 
			
		||||
 | 
			
		||||
	// CLKPR: Clock Prescale Register
 | 
			
		||||
	CLKPR_CLKPCE = 0x80 // Clock Prescaler Change Enable
 | 
			
		||||
	CLKPR_CLKPS  = 0x3  // Clock Prescaler Select Bits
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
// Bitfields for BOOT_LOAD: Bootloader
 | 
			
		||||
const (
 | 
			
		||||
	// SPMCSR: Store Program Memory Control and Status Register
 | 
			
		||||
	SPMCSR_SPMIE  = 0x80 // SPM Interrupt Enable
 | 
			
		||||
	SPMCSR_RWWSB  = 0x40 // Read-While-Write Section Busy
 | 
			
		||||
	SPMCSR_SIGRD  = 0x20 // Signature Row Read
 | 
			
		||||
	SPMCSR_RWWSRE = 0x10 // Read-While-Write Section Read Enable
 | 
			
		||||
	SPMCSR_LBSET  = 0x8  // Lock Bit Set
 | 
			
		||||
	SPMCSR_PGWRT  = 0x4  // Page Write
 | 
			
		||||
	SPMCSR_PGERS  = 0x2  // Page Erase
 | 
			
		||||
	SPMCSR_SPMEN  = 0x1  // Store Program Memory Enable
 | 
			
		||||
)
 | 
			
		||||
							
								
								
									
										6
									
								
								src/device/avr/atmega16hvb.ld
									
										
									
									
									
										Обычный файл
									
								
							
							
						
						
									
										6
									
								
								src/device/avr/atmega16hvb.ld
									
										
									
									
									
										Обычный файл
									
								
							| 
						 | 
				
			
			@ -0,0 +1,6 @@
 | 
			
		|||
/* Automatically generated file. DO NOT EDIT. */
 | 
			
		||||
/* Generated by gen-device.py from ATmega16HVB.atdf, see http://packs.download.atmel.com/ */
 | 
			
		||||
 | 
			
		||||
__flash_size = 0x4000;
 | 
			
		||||
__ram_size   = 0x400;
 | 
			
		||||
__num_isrs   = 29;
 | 
			
		||||
							
								
								
									
										796
									
								
								src/device/avr/atmega16hvbrevb.go
									
										
									
									
									
										Обычный файл
									
								
							
							
						
						
									
										796
									
								
								src/device/avr/atmega16hvbrevb.go
									
										
									
									
									
										Обычный файл
									
								
							| 
						 | 
				
			
			@ -0,0 +1,796 @@
 | 
			
		|||
// Automatically generated file. DO NOT EDIT.
 | 
			
		||||
// Generated by gen-device.py from ATmega16HVBrevB.atdf, see http://packs.download.atmel.com/
 | 
			
		||||
 | 
			
		||||
// +build avr,atmega16hvbrevb
 | 
			
		||||
 | 
			
		||||
// Device information for the ATmega16HVBrevB.
 | 
			
		||||
//
 | 
			
		||||
package avr
 | 
			
		||||
 | 
			
		||||
// Magic type name for the compiler.
 | 
			
		||||
type __reg uint8
 | 
			
		||||
 | 
			
		||||
// Export this magic type name.
 | 
			
		||||
type RegValue = __reg
 | 
			
		||||
 | 
			
		||||
// Some information about this device.
 | 
			
		||||
const (
 | 
			
		||||
	DEVICE = "ATmega16HVBrevB"
 | 
			
		||||
	ARCH   = "AVR8"
 | 
			
		||||
	FAMILY = "megaAVR"
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
// Interrupts
 | 
			
		||||
const (
 | 
			
		||||
	IRQ_RESET         = 0  // External Pin, Power-on Reset, Brown-out Reset and Watchdog Reset
 | 
			
		||||
	IRQ_BPINT         = 1  // Battery Protection Interrupt
 | 
			
		||||
	IRQ_VREGMON       = 2  // Voltage regulator monitor interrupt
 | 
			
		||||
	IRQ_INT0          = 3  // External Interrupt Request 0
 | 
			
		||||
	IRQ_INT1          = 4  // External Interrupt Request 1
 | 
			
		||||
	IRQ_INT2          = 5  // External Interrupt Request 2
 | 
			
		||||
	IRQ_INT3          = 6  // External Interrupt Request 3
 | 
			
		||||
	IRQ_PCINT0        = 7  // Pin Change Interrupt 0
 | 
			
		||||
	IRQ_PCINT1        = 8  // Pin Change Interrupt 1
 | 
			
		||||
	IRQ_WDT           = 9  // Watchdog Timeout Interrupt
 | 
			
		||||
	IRQ_BGSCD         = 10 // Bandgap Buffer Short Circuit Detected
 | 
			
		||||
	IRQ_CHDET         = 11 // Charger Detect
 | 
			
		||||
	IRQ_TIMER1_IC     = 12 // Timer 1 Input capture
 | 
			
		||||
	IRQ_TIMER1_COMPA  = 13 // Timer 1 Compare Match A
 | 
			
		||||
	IRQ_TIMER1_COMPB  = 14 // Timer 1 Compare Match B
 | 
			
		||||
	IRQ_TIMER1_OVF    = 15 // Timer 1 overflow
 | 
			
		||||
	IRQ_TIMER0_IC     = 16 // Timer 0 Input Capture
 | 
			
		||||
	IRQ_TIMER0_COMPA  = 17 // Timer 0 Comapre Match A
 | 
			
		||||
	IRQ_TIMER0_COMPB  = 18 // Timer 0 Compare Match B
 | 
			
		||||
	IRQ_TIMER0_OVF    = 19 // Timer 0 Overflow
 | 
			
		||||
	IRQ_TWIBUSCD      = 20 // Two-Wire Bus Connect/Disconnect
 | 
			
		||||
	IRQ_TWI           = 21 // Two-Wire Serial Interface
 | 
			
		||||
	IRQ_SPI_STC       = 22 // SPI Serial transfer complete
 | 
			
		||||
	IRQ_VADC          = 23 // Voltage ADC Conversion Complete
 | 
			
		||||
	IRQ_CCADC_CONV    = 24 // Coulomb Counter ADC Conversion Complete
 | 
			
		||||
	IRQ_CCADC_REG_CUR = 25 // Coloumb Counter ADC Regular Current
 | 
			
		||||
	IRQ_CCADC_ACC     = 26 // Coloumb Counter ADC Accumulator
 | 
			
		||||
	IRQ_EE_READY      = 27 // EEPROM Ready
 | 
			
		||||
	IRQ_SPM           = 28 // SPM Ready
 | 
			
		||||
	IRQ_max           = 28 // Highest interrupt number on this device.
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
// Peripherals
 | 
			
		||||
var (
 | 
			
		||||
	// Fuses
 | 
			
		||||
	FUSE = struct {
 | 
			
		||||
		LOW  __reg
 | 
			
		||||
		HIGH __reg
 | 
			
		||||
	}{
 | 
			
		||||
		LOW:  0x0,
 | 
			
		||||
		HIGH: 0x1,
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	// Lockbits
 | 
			
		||||
	LOCKBIT = struct {
 | 
			
		||||
		LOCKBIT __reg
 | 
			
		||||
	}{
 | 
			
		||||
		LOCKBIT: 0x0,
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	// Analog-to-Digital Converter
 | 
			
		||||
	ADC = struct {
 | 
			
		||||
		VADMUX __reg
 | 
			
		||||
		VADCL  __reg
 | 
			
		||||
		VADCH  __reg
 | 
			
		||||
		VADCSR __reg
 | 
			
		||||
	}{
 | 
			
		||||
		VADMUX: 0x7c, // The VADC multiplexer Selection Register
 | 
			
		||||
		VADCL:  0x78, // VADC Data Register Bytes
 | 
			
		||||
		VADCH:  0x78, // VADC Data Register Bytes
 | 
			
		||||
		VADCSR: 0x7a, // The VADC Control and Status register
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	// Watchdog Timer
 | 
			
		||||
	WDT = struct {
 | 
			
		||||
		WDTCSR __reg
 | 
			
		||||
	}{
 | 
			
		||||
		WDTCSR: 0x60, // Watchdog Timer Control Register
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	// FET Control
 | 
			
		||||
	FET = struct {
 | 
			
		||||
		FCSR __reg
 | 
			
		||||
	}{
 | 
			
		||||
		FCSR: 0xf0, // FET Control and Status Register
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	// Serial Peripheral Interface
 | 
			
		||||
	SPI = struct {
 | 
			
		||||
		SPCR __reg
 | 
			
		||||
		SPSR __reg
 | 
			
		||||
		SPDR __reg
 | 
			
		||||
	}{
 | 
			
		||||
		SPCR: 0x4c, // SPI Control Register
 | 
			
		||||
		SPSR: 0x4d, // SPI Status Register
 | 
			
		||||
		SPDR: 0x4e, // SPI Data Register
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	// EEPROM
 | 
			
		||||
	EEPROM = struct {
 | 
			
		||||
		EEARL __reg
 | 
			
		||||
		EEARH __reg
 | 
			
		||||
		EEDR  __reg
 | 
			
		||||
		EECR  __reg
 | 
			
		||||
	}{
 | 
			
		||||
		EEARL: 0x41, // EEPROM Read/Write Access
 | 
			
		||||
		EEARH: 0x41, // EEPROM Read/Write Access
 | 
			
		||||
		EEDR:  0x40, // EEPROM Data Register
 | 
			
		||||
		EECR:  0x3f, // EEPROM Control Register
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	// Coulomb Counter
 | 
			
		||||
	COULOMB_COUNTER = struct {
 | 
			
		||||
		CADCSRA __reg
 | 
			
		||||
		CADCSRB __reg
 | 
			
		||||
		CADCSRC __reg
 | 
			
		||||
		CADICL  __reg
 | 
			
		||||
		CADICH  __reg
 | 
			
		||||
		CADAC3  __reg
 | 
			
		||||
		CADAC2  __reg
 | 
			
		||||
		CADAC1  __reg
 | 
			
		||||
		CADAC0  __reg
 | 
			
		||||
		CADRCC  __reg
 | 
			
		||||
		CADRDC  __reg
 | 
			
		||||
	}{
 | 
			
		||||
		CADCSRA: 0xe6, // CC-ADC Control and Status Register A
 | 
			
		||||
		CADCSRB: 0xe7, // CC-ADC Control and Status Register B
 | 
			
		||||
		CADCSRC: 0xe8, // CC-ADC Control and Status Register C
 | 
			
		||||
		CADICL:  0xe4, // CC-ADC Instantaneous Current
 | 
			
		||||
		CADICH:  0xe4, // CC-ADC Instantaneous Current
 | 
			
		||||
		CADAC3:  0xe3, // ADC Accumulate Current
 | 
			
		||||
		CADAC2:  0xe2, // ADC Accumulate Current
 | 
			
		||||
		CADAC1:  0xe1, // ADC Accumulate Current
 | 
			
		||||
		CADAC0:  0xe0, // ADC Accumulate Current
 | 
			
		||||
		CADRCC:  0xe9, // CC-ADC Regular Charge Current
 | 
			
		||||
		CADRDC:  0xea, // CC-ADC Regular Discharge Current
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	// Two Wire Serial Interface
 | 
			
		||||
	TWI = struct {
 | 
			
		||||
		TWBCSR __reg
 | 
			
		||||
		TWAMR  __reg
 | 
			
		||||
		TWBR   __reg
 | 
			
		||||
		TWCR   __reg
 | 
			
		||||
		TWSR   __reg
 | 
			
		||||
		TWDR   __reg
 | 
			
		||||
		TWAR   __reg
 | 
			
		||||
	}{
 | 
			
		||||
		TWBCSR: 0xbe, // TWI Bus Control and Status Register
 | 
			
		||||
		TWAMR:  0xbd, // TWI (Slave) Address Mask Register
 | 
			
		||||
		TWBR:   0xb8, // TWI Bit Rate register
 | 
			
		||||
		TWCR:   0xbc, // TWI Control Register
 | 
			
		||||
		TWSR:   0xb9, // TWI Status Register
 | 
			
		||||
		TWDR:   0xbb, // TWI Data register
 | 
			
		||||
		TWAR:   0xba, // TWI (Slave) Address register
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	// External Interrupts
 | 
			
		||||
	EXINT = struct {
 | 
			
		||||
		EICRA  __reg
 | 
			
		||||
		EIMSK  __reg
 | 
			
		||||
		EIFR   __reg
 | 
			
		||||
		PCICR  __reg
 | 
			
		||||
		PCIFR  __reg
 | 
			
		||||
		PCMSK1 __reg
 | 
			
		||||
		PCMSK0 __reg
 | 
			
		||||
	}{
 | 
			
		||||
		EICRA:  0x69, // External Interrupt Control Register
 | 
			
		||||
		EIMSK:  0x3d, // External Interrupt Mask Register
 | 
			
		||||
		EIFR:   0x3c, // External Interrupt Flag Register
 | 
			
		||||
		PCICR:  0x68, // Pin Change Interrupt Control Register
 | 
			
		||||
		PCIFR:  0x3b, // Pin Change Interrupt Flag Register
 | 
			
		||||
		PCMSK1: 0x6c, // Pin Change Enable Mask Register 1
 | 
			
		||||
		PCMSK0: 0x6b, // Pin Change Enable Mask Register 0
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	// Timer/Counter, 16-bit
 | 
			
		||||
	TC16 = struct {
 | 
			
		||||
		TCCR1B __reg
 | 
			
		||||
		TCCR1A __reg
 | 
			
		||||
		TCNT1L __reg
 | 
			
		||||
		TCNT1H __reg
 | 
			
		||||
		OCR1A  __reg
 | 
			
		||||
		OCR1B  __reg
 | 
			
		||||
		TIMSK1 __reg
 | 
			
		||||
		TIFR1  __reg
 | 
			
		||||
		TCCR0B __reg
 | 
			
		||||
		TCCR0A __reg
 | 
			
		||||
		TCNT0L __reg
 | 
			
		||||
		TCNT0H __reg
 | 
			
		||||
		OCR0A  __reg
 | 
			
		||||
		OCR0B  __reg
 | 
			
		||||
		TIMSK0 __reg
 | 
			
		||||
		TIFR0  __reg
 | 
			
		||||
	}{
 | 
			
		||||
		TCCR1B: 0x81, // Timer/Counter1 Control Register B
 | 
			
		||||
		TCCR1A: 0x80, // Timer/Counter 1 Control Register A
 | 
			
		||||
		TCNT1L: 0x84, // Timer Counter 1 Bytes
 | 
			
		||||
		TCNT1H: 0x84, // Timer Counter 1 Bytes
 | 
			
		||||
		OCR1A:  0x88, // Output Compare Register 1A
 | 
			
		||||
		OCR1B:  0x89, // Output Compare Register B
 | 
			
		||||
		TIMSK1: 0x6f, // Timer/Counter Interrupt Mask Register
 | 
			
		||||
		TIFR1:  0x36, // Timer/Counter Interrupt Flag register
 | 
			
		||||
		TCCR0B: 0x45, // Timer/Counter0 Control Register B
 | 
			
		||||
		TCCR0A: 0x44, // Timer/Counter 0 Control Register A
 | 
			
		||||
		TCNT0L: 0x46, // Timer Counter 0 Bytes
 | 
			
		||||
		TCNT0H: 0x46, // Timer Counter 0 Bytes
 | 
			
		||||
		OCR0A:  0x48, // Output Compare Register 0A
 | 
			
		||||
		OCR0B:  0x49, // Output Compare Register B
 | 
			
		||||
		TIMSK0: 0x6e, // Timer/Counter Interrupt Mask Register
 | 
			
		||||
		TIFR0:  0x35, // Timer/Counter Interrupt Flag register
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	// Cell Balancing
 | 
			
		||||
	CELL_BALANCING = struct {
 | 
			
		||||
		CBCR __reg
 | 
			
		||||
	}{
 | 
			
		||||
		CBCR: 0xf1, // Cell Balancing Control Register
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	// Battery Protection
 | 
			
		||||
	BATTERY_PROTECTION = struct {
 | 
			
		||||
		BPPLR  __reg
 | 
			
		||||
		BPCR   __reg
 | 
			
		||||
		BPHCTR __reg
 | 
			
		||||
		BPOCTR __reg
 | 
			
		||||
		BPSCTR __reg
 | 
			
		||||
		BPCHCD __reg
 | 
			
		||||
		BPDHCD __reg
 | 
			
		||||
		BPCOCD __reg
 | 
			
		||||
		BPDOCD __reg
 | 
			
		||||
		BPSCD  __reg
 | 
			
		||||
		BPIFR  __reg
 | 
			
		||||
		BPIMSK __reg
 | 
			
		||||
	}{
 | 
			
		||||
		BPPLR:  0xfe, // Battery Protection Parameter Lock Register
 | 
			
		||||
		BPCR:   0xfd, // Battery Protection Control Register
 | 
			
		||||
		BPHCTR: 0xfc, // Battery Protection Short-current Timing Register
 | 
			
		||||
		BPOCTR: 0xfb, // Battery Protection Over-current Timing Register
 | 
			
		||||
		BPSCTR: 0xfa, // Battery Protection Short-current Timing Register
 | 
			
		||||
		BPCHCD: 0xf9, // Battery Protection Charge-High-current Detection Level Register
 | 
			
		||||
		BPDHCD: 0xf8, // Battery Protection Discharge-High-current Detection Level Register
 | 
			
		||||
		BPCOCD: 0xf7, // Battery Protection Charge-Over-current Detection Level Register
 | 
			
		||||
		BPDOCD: 0xf6, // Battery Protection Discharge-Over-current Detection Level Register
 | 
			
		||||
		BPSCD:  0xf5, // Battery Protection Short-Circuit Detection Level Register
 | 
			
		||||
		BPIFR:  0xf3, // Battery Protection Interrupt Flag Register
 | 
			
		||||
		BPIMSK: 0xf2, // Battery Protection Interrupt Mask Register
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	// Charger Detect
 | 
			
		||||
	CHARGER_DETECT = struct {
 | 
			
		||||
		CHGDCSR __reg
 | 
			
		||||
	}{
 | 
			
		||||
		CHGDCSR: 0xd4, // Charger Detect Control and Status Register
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	// Voltage Regulator
 | 
			
		||||
	VOLTAGE_REGULATOR = struct {
 | 
			
		||||
		ROCR __reg
 | 
			
		||||
	}{
 | 
			
		||||
		ROCR: 0xc8, // Regulator Operating Condition Register
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	// Bandgap
 | 
			
		||||
	BANDGAP = struct {
 | 
			
		||||
		BGCSR __reg
 | 
			
		||||
		BGCRR __reg
 | 
			
		||||
		BGCCR __reg
 | 
			
		||||
	}{
 | 
			
		||||
		BGCSR: 0xd2, // Bandgap Control and Status Register
 | 
			
		||||
		BGCRR: 0xd1, // Bandgap Calibration of Resistor Ladder
 | 
			
		||||
		BGCCR: 0xd0, // Bandgap Calibration Register
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	// CPU Registers
 | 
			
		||||
	CPU = struct {
 | 
			
		||||
		SREG    __reg
 | 
			
		||||
		SPL     __reg
 | 
			
		||||
		SPH     __reg
 | 
			
		||||
		MCUCR   __reg
 | 
			
		||||
		MCUSR   __reg
 | 
			
		||||
		FOSCCAL __reg
 | 
			
		||||
		OSICSR  __reg
 | 
			
		||||
		SMCR    __reg
 | 
			
		||||
		GPIOR2  __reg
 | 
			
		||||
		GPIOR1  __reg
 | 
			
		||||
		GPIOR0  __reg
 | 
			
		||||
		DIDR0   __reg
 | 
			
		||||
		PRR0    __reg
 | 
			
		||||
		CLKPR   __reg
 | 
			
		||||
	}{
 | 
			
		||||
		SREG:    0x5f, // Status Register
 | 
			
		||||
		SPL:     0x5d, // Stack Pointer
 | 
			
		||||
		SPH:     0x5d, // Stack Pointer
 | 
			
		||||
		MCUCR:   0x55, // MCU Control Register
 | 
			
		||||
		MCUSR:   0x54, // MCU Status Register
 | 
			
		||||
		FOSCCAL: 0x66, // Fast Oscillator Calibration Value
 | 
			
		||||
		OSICSR:  0x37, // Oscillator Sampling Interface Control and Status Register
 | 
			
		||||
		SMCR:    0x53, // Sleep Mode Control Register
 | 
			
		||||
		GPIOR2:  0x4b, // General Purpose IO Register 2
 | 
			
		||||
		GPIOR1:  0x4a, // General Purpose IO Register 1
 | 
			
		||||
		GPIOR0:  0x3e, // General Purpose IO Register 0
 | 
			
		||||
		DIDR0:   0x7e, // Digital Input Disable Register
 | 
			
		||||
		PRR0:    0x64, // Power Reduction Register 0
 | 
			
		||||
		CLKPR:   0x61, // Clock Prescale Register
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	// I/O Port
 | 
			
		||||
	PORT = struct {
 | 
			
		||||
		PORTA __reg
 | 
			
		||||
		DDRA  __reg
 | 
			
		||||
		PINA  __reg
 | 
			
		||||
		PORTB __reg
 | 
			
		||||
		DDRB  __reg
 | 
			
		||||
		PINB  __reg
 | 
			
		||||
		PORTC __reg
 | 
			
		||||
		PINC  __reg
 | 
			
		||||
	}{
 | 
			
		||||
		PORTA: 0x22, // Port A Data Register
 | 
			
		||||
		DDRA:  0x21, // Port A Data Direction Register
 | 
			
		||||
		PINA:  0x20, // Port A Input Pins
 | 
			
		||||
		PORTB: 0x25, // Port B Data Register
 | 
			
		||||
		DDRB:  0x24, // Port B Data Direction Register
 | 
			
		||||
		PINB:  0x23, // Port B Input Pins
 | 
			
		||||
		PORTC: 0x28, // Port C Data Register
 | 
			
		||||
		PINC:  0x26, // Port C Input Pins
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	// Bootloader
 | 
			
		||||
	BOOT_LOAD = struct {
 | 
			
		||||
		SPMCSR __reg
 | 
			
		||||
	}{
 | 
			
		||||
		SPMCSR: 0x57, // Store Program Memory Control and Status Register
 | 
			
		||||
	}
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
// Bitfields for FUSE: Fuses
 | 
			
		||||
const (
 | 
			
		||||
	// LOW
 | 
			
		||||
	LOW_WDTON  = 0x80 // Watch-dog Timer always on
 | 
			
		||||
	LOW_EESAVE = 0x40 // Preserve EEPROM through the Chip Erase cycle
 | 
			
		||||
	LOW_SPIEN  = 0x20 // Serial program downloading (SPI) enabled
 | 
			
		||||
	LOW_SUT    = 0x1c // Select start-up time
 | 
			
		||||
	LOW_OSCSEL = 0x3  // Oscillator select
 | 
			
		||||
 | 
			
		||||
	// HIGH
 | 
			
		||||
	HIGH_DUVRDINIT = 0x10 // DUVR mode on
 | 
			
		||||
	HIGH_DWEN      = 0x8  // Debug Wire enable
 | 
			
		||||
	HIGH_BOOTSZ    = 0x6  // Select Boot Size
 | 
			
		||||
	HIGH_BOOTRST   = 0x1  // Boot Reset vector Enabled
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
// Bitfields for LOCKBIT: Lockbits
 | 
			
		||||
const (
 | 
			
		||||
	// LOCKBIT
 | 
			
		||||
	LOCKBIT_LB   = 0x3  // Memory Lock
 | 
			
		||||
	LOCKBIT_BLB0 = 0xc  // Boot Loader Protection Mode
 | 
			
		||||
	LOCKBIT_BLB1 = 0x30 // Boot Loader Protection Mode
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
// Bitfields for ADC: Analog-to-Digital Converter
 | 
			
		||||
const (
 | 
			
		||||
	// VADMUX: The VADC multiplexer Selection Register
 | 
			
		||||
	VADMUX_VADMUX = 0xf // Analog Channel and Gain Selection Bits
 | 
			
		||||
 | 
			
		||||
	// VADCL: VADC Data Register Bytes
 | 
			
		||||
 | 
			
		||||
	// VADCH: VADC Data Register Bytes
 | 
			
		||||
	VADC_VADC = 0xfff // VADC Data bits
 | 
			
		||||
 | 
			
		||||
	// VADCSR: The VADC Control and Status register
 | 
			
		||||
	VADCSR_VADEN   = 0x8 // VADC Enable
 | 
			
		||||
	VADCSR_VADSC   = 0x4 // VADC Satrt Conversion
 | 
			
		||||
	VADCSR_VADCCIF = 0x2 // VADC Conversion Complete Interrupt Flag
 | 
			
		||||
	VADCSR_VADCCIE = 0x1 // VADC Conversion Complete Interrupt Enable
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
// Bitfields for WDT: Watchdog Timer
 | 
			
		||||
const (
 | 
			
		||||
	// WDTCSR: Watchdog Timer Control Register
 | 
			
		||||
	WDTCSR_WDIF = 0x80 // Watchdog Timeout Interrupt Flag
 | 
			
		||||
	WDTCSR_WDIE = 0x40 // Watchdog Timeout Interrupt Enable
 | 
			
		||||
	WDTCSR_WDP  = 0x27 // Watchdog Timer Prescaler Bits
 | 
			
		||||
	WDTCSR_WDCE = 0x10 // Watchdog Change Enable
 | 
			
		||||
	WDTCSR_WDE  = 0x8  // Watch Dog Enable
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
// Bitfields for FET: FET Control
 | 
			
		||||
const (
 | 
			
		||||
	// FCSR: FET Control and Status Register
 | 
			
		||||
	FCSR_DUVRD = 0x8 // Deep Under-Voltage Recovery Disable
 | 
			
		||||
	FCSR_CPS   = 0x4 // Current Protection Status
 | 
			
		||||
	FCSR_DFE   = 0x2 // Discharge FET Enable
 | 
			
		||||
	FCSR_CFE   = 0x1 // Charge FET Enable
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
// Bitfields for SPI: Serial Peripheral Interface
 | 
			
		||||
const (
 | 
			
		||||
	// SPCR: SPI Control Register
 | 
			
		||||
	SPCR_SPIE = 0x80 // SPI Interrupt Enable
 | 
			
		||||
	SPCR_SPE  = 0x40 // SPI Enable
 | 
			
		||||
	SPCR_DORD = 0x20 // Data Order
 | 
			
		||||
	SPCR_MSTR = 0x10 // Master/Slave Select
 | 
			
		||||
	SPCR_CPOL = 0x8  // Clock polarity
 | 
			
		||||
	SPCR_CPHA = 0x4  // Clock Phase
 | 
			
		||||
	SPCR_SPR  = 0x3  // SPI Clock Rate Selects
 | 
			
		||||
 | 
			
		||||
	// SPSR: SPI Status Register
 | 
			
		||||
	SPSR_SPIF  = 0x80 // SPI Interrupt Flag
 | 
			
		||||
	SPSR_WCOL  = 0x40 // Write Collision Flag
 | 
			
		||||
	SPSR_SPI2X = 0x1  // Double SPI Speed Bit
 | 
			
		||||
 | 
			
		||||
	// SPDR: SPI Data Register
 | 
			
		||||
	SPDR_SPDR = 0xff // SPI Data bits
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
// Bitfields for EEPROM: EEPROM
 | 
			
		||||
const (
 | 
			
		||||
	// EEARL: EEPROM Read/Write Access
 | 
			
		||||
 | 
			
		||||
	// EEARH: EEPROM Read/Write Access
 | 
			
		||||
	EEAR_EEAR = 0x3ff // EEPROM Address bits
 | 
			
		||||
 | 
			
		||||
	// EEDR: EEPROM Data Register
 | 
			
		||||
	EEDR_EEDR = 0xff // EEPROM Data bits
 | 
			
		||||
 | 
			
		||||
	// EECR: EEPROM Control Register
 | 
			
		||||
	EECR_EEPM  = 0x30
 | 
			
		||||
	EECR_EERIE = 0x8 // EEProm Ready Interrupt Enable
 | 
			
		||||
	EECR_EEMPE = 0x4 // EEPROM Master Write Enable
 | 
			
		||||
	EECR_EEPE  = 0x2 // EEPROM Write Enable
 | 
			
		||||
	EECR_EERE  = 0x1 // EEPROM Read Enable
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
// Bitfields for COULOMB_COUNTER: Coulomb Counter
 | 
			
		||||
const (
 | 
			
		||||
	// CADCSRA: CC-ADC Control and Status Register A
 | 
			
		||||
	CADCSRA_CADEN  = 0x80 // When the CADEN bit is cleared (zero), the CC-ADC is disabled. When the CADEN bit is set (one), the CC-ADC will continuously measure the voltage drop over the external sense resistor RSENSE. In Power-down, only the Regular Current detection is active. In Power-off, the CC-ADC is always disabled.
 | 
			
		||||
	CADCSRA_CADPOL = 0x40
 | 
			
		||||
	CADCSRA_CADUB  = 0x20 // CC_ADC Update Busy
 | 
			
		||||
	CADCSRA_CADAS  = 0x18 // CC_ADC Accumulate Current Select Bits
 | 
			
		||||
	CADCSRA_CADSI  = 0x6  // The CADSI bits determine the current sampling interval for the Regular Current detection in Power-down mode. The actual settings remain to be determined.
 | 
			
		||||
	CADCSRA_CADSE  = 0x1  // When the CADSE bit is written to one, the ongoing CC-ADC conversion is aborted, and the CC-ADC enters Regular Current detection mode.
 | 
			
		||||
 | 
			
		||||
	// CADCSRB: CC-ADC Control and Status Register B
 | 
			
		||||
	CADCSRB_CADACIE = 0x40
 | 
			
		||||
	CADCSRB_CADRCIE = 0x20 // Regular Current Interrupt Enable
 | 
			
		||||
	CADCSRB_CADICIE = 0x10 // CAD Instantenous Current Interrupt Enable
 | 
			
		||||
	CADCSRB_CADACIF = 0x4  // CC-ADC Accumulate Current Interrupt Flag
 | 
			
		||||
	CADCSRB_CADRCIF = 0x2  // CC-ADC Accumulate Current Interrupt Flag
 | 
			
		||||
	CADCSRB_CADICIF = 0x1  // CC-ADC Instantaneous Current Interrupt Flag
 | 
			
		||||
 | 
			
		||||
	// CADCSRC: CC-ADC Control and Status Register C
 | 
			
		||||
	CADCSRC_CADVSE = 0x1 // CC-ADC Voltage Scaling Enable
 | 
			
		||||
 | 
			
		||||
	// CADICL: CC-ADC Instantaneous Current
 | 
			
		||||
 | 
			
		||||
	// CADICH: CC-ADC Instantaneous Current
 | 
			
		||||
	CADIC_CADIC = 0xffff // CC-ADC Instantaneous Current
 | 
			
		||||
 | 
			
		||||
	// CADAC3: ADC Accumulate Current
 | 
			
		||||
	CADAC3_CADAC = 0xff // ADC accumulate current bits
 | 
			
		||||
 | 
			
		||||
	// CADAC2: ADC Accumulate Current
 | 
			
		||||
	CADAC2_CADAC = 0xff // ADC accumulate current bits
 | 
			
		||||
 | 
			
		||||
	// CADAC1: ADC Accumulate Current
 | 
			
		||||
	CADAC1_CADAC  = 0xfc // ADC accumulate current bits
 | 
			
		||||
	CADAC1_CADAC0 = 0x3  // ADC accumulate current bits
 | 
			
		||||
 | 
			
		||||
	// CADAC0: ADC Accumulate Current
 | 
			
		||||
	CADAC0_CADAC0 = 0xff // ADC accumulate current bits
 | 
			
		||||
 | 
			
		||||
	// CADRCC: CC-ADC Regular Charge Current
 | 
			
		||||
	CADRCC_CADRCC = 0xff // CC-ADC Regular Charge Current
 | 
			
		||||
 | 
			
		||||
	// CADRDC: CC-ADC Regular Discharge Current
 | 
			
		||||
	CADRDC_CADRDC = 0xff // CC-ADC Regular Discharge Current
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
// Bitfields for TWI: Two Wire Serial Interface
 | 
			
		||||
const (
 | 
			
		||||
	// TWBCSR: TWI Bus Control and Status Register
 | 
			
		||||
	TWBCSR_TWBCIF = 0x80 // TWI Bus Connect/Disconnect Interrupt Flag
 | 
			
		||||
	TWBCSR_TWBCIE = 0x40 // TWI Bus Connect/Disconnect Interrupt Enable
 | 
			
		||||
	TWBCSR_TWBDT  = 0x6  // TWI Bus Disconnect Time-out Period
 | 
			
		||||
	TWBCSR_TWBCIP = 0x1  // TWI Bus Connect/Disconnect Interrupt Polarity
 | 
			
		||||
 | 
			
		||||
	// TWAMR: TWI (Slave) Address Mask Register
 | 
			
		||||
	TWAMR_TWAM = 0xfe
 | 
			
		||||
 | 
			
		||||
	// TWBR: TWI Bit Rate register
 | 
			
		||||
	TWBR_TWBR = 0xff // TWI Bit Rate bits
 | 
			
		||||
 | 
			
		||||
	// TWCR: TWI Control Register
 | 
			
		||||
	TWCR_TWINT = 0x80 // TWI Interrupt Flag
 | 
			
		||||
	TWCR_TWEA  = 0x40 // TWI Enable Acknowledge Bit
 | 
			
		||||
	TWCR_TWSTA = 0x20 // TWI Start Condition Bit
 | 
			
		||||
	TWCR_TWSTO = 0x10 // TWI Stop Condition Bit
 | 
			
		||||
	TWCR_TWWC  = 0x8  // TWI Write Collition Flag
 | 
			
		||||
	TWCR_TWEN  = 0x4  // TWI Enable Bit
 | 
			
		||||
	TWCR_TWIE  = 0x1  // TWI Interrupt Enable
 | 
			
		||||
 | 
			
		||||
	// TWSR: TWI Status Register
 | 
			
		||||
	TWSR_TWS  = 0xf8 // TWI Status
 | 
			
		||||
	TWSR_TWPS = 0x3  // TWI Prescaler
 | 
			
		||||
 | 
			
		||||
	// TWDR: TWI Data register
 | 
			
		||||
	TWDR_TWD = 0xff // TWI Data Bits
 | 
			
		||||
 | 
			
		||||
	// TWAR: TWI (Slave) Address register
 | 
			
		||||
	TWAR_TWA   = 0xfe // TWI (Slave) Address register Bits
 | 
			
		||||
	TWAR_TWGCE = 0x1  // TWI General Call Recognition Enable Bit
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
// Bitfields for EXINT: External Interrupts
 | 
			
		||||
const (
 | 
			
		||||
	// EICRA: External Interrupt Control Register
 | 
			
		||||
	EICRA_ISC3 = 0xc0 // External Interrupt Sense Control 3 Bits
 | 
			
		||||
	EICRA_ISC2 = 0x30 // External Interrupt Sense Control 2 Bits
 | 
			
		||||
	EICRA_ISC1 = 0xc  // External Interrupt Sense Control 1 Bits
 | 
			
		||||
	EICRA_ISC0 = 0x3  // External Interrupt Sense Control 0 Bits
 | 
			
		||||
 | 
			
		||||
	// EIMSK: External Interrupt Mask Register
 | 
			
		||||
	EIMSK_INT = 0xf // External Interrupt Request 3 Enable
 | 
			
		||||
 | 
			
		||||
	// EIFR: External Interrupt Flag Register
 | 
			
		||||
	EIFR_INTF = 0xf // External Interrupt Flags
 | 
			
		||||
 | 
			
		||||
	// PCICR: Pin Change Interrupt Control Register
 | 
			
		||||
	PCICR_PCIE = 0x3 // Pin Change Interrupt Enables
 | 
			
		||||
 | 
			
		||||
	// PCIFR: Pin Change Interrupt Flag Register
 | 
			
		||||
	PCIFR_PCIF = 0x3 // Pin Change Interrupt Flags
 | 
			
		||||
 | 
			
		||||
	// PCMSK1: Pin Change Enable Mask Register 1
 | 
			
		||||
	PCMSK1_PCINT = 0xff // Pin Change Enable Mask
 | 
			
		||||
 | 
			
		||||
	// PCMSK0: Pin Change Enable Mask Register 0
 | 
			
		||||
	PCMSK0_PCINT = 0xf // Pin Change Enable Mask
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
// Bitfields for TC16: Timer/Counter, 16-bit
 | 
			
		||||
const (
 | 
			
		||||
	// TCCR1B: Timer/Counter1 Control Register B
 | 
			
		||||
	TCCR1B_CS = 0x7 // Clock Select1 bis
 | 
			
		||||
 | 
			
		||||
	// TCCR1A: Timer/Counter 1 Control Register A
 | 
			
		||||
	TCCR1A_TCW1  = 0x80 // Timer/Counter Width
 | 
			
		||||
	TCCR1A_ICEN1 = 0x40 // Input Capture Mode Enable
 | 
			
		||||
	TCCR1A_ICNC1 = 0x20 // Input Capture Noise Canceler
 | 
			
		||||
	TCCR1A_ICES1 = 0x10 // Input Capture Edge Select
 | 
			
		||||
	TCCR1A_ICS1  = 0x8  // Input Capture Select
 | 
			
		||||
	TCCR1A_WGM10 = 0x1  // Waveform Generation Mode
 | 
			
		||||
 | 
			
		||||
	// TCNT1L: Timer Counter 1 Bytes
 | 
			
		||||
 | 
			
		||||
	// TCNT1H: Timer Counter 1 Bytes
 | 
			
		||||
	TCNT1_TCNT1 = 0xffff // Timer Counter 1 bits
 | 
			
		||||
 | 
			
		||||
	// OCR1A: Output Compare Register 1A
 | 
			
		||||
	OCR1A_OCR1A = 0xff // Output Compare 1 A bits
 | 
			
		||||
 | 
			
		||||
	// OCR1B: Output Compare Register B
 | 
			
		||||
	OCR1B_OCR1B = 0xff // Output Compare 1 B bits
 | 
			
		||||
 | 
			
		||||
	// TIMSK1: Timer/Counter Interrupt Mask Register
 | 
			
		||||
	TIMSK1_ICIE1  = 0x8 // Timer/Counter n Input Capture Interrupt Enable
 | 
			
		||||
	TIMSK1_OCIE1B = 0x4 // Timer/Counter1 Output Compare B Interrupt Enable
 | 
			
		||||
	TIMSK1_OCIE1A = 0x2 // Timer/Counter1 Output Compare A Interrupt Enable
 | 
			
		||||
	TIMSK1_TOIE1  = 0x1 // Timer/Counter1 Overflow Interrupt Enable
 | 
			
		||||
 | 
			
		||||
	// TIFR1: Timer/Counter Interrupt Flag register
 | 
			
		||||
	TIFR1_ICF1  = 0x8 // Timer/Counter 1 Input Capture Flag
 | 
			
		||||
	TIFR1_OCF1B = 0x4 // Timer/Counter1 Output Compare Flag B
 | 
			
		||||
	TIFR1_OCF1A = 0x2 // Timer/Counter1 Output Compare Flag A
 | 
			
		||||
	TIFR1_TOV1  = 0x1 // Timer/Counter1 Overflow Flag
 | 
			
		||||
 | 
			
		||||
	// TCCR0B: Timer/Counter0 Control Register B
 | 
			
		||||
	TCCR0B_CS02 = 0x4 // Clock Select0 bit 2
 | 
			
		||||
	TCCR0B_CS01 = 0x2 // Clock Select0 bit 1
 | 
			
		||||
	TCCR0B_CS00 = 0x1 // Clock Select0 bit 0
 | 
			
		||||
 | 
			
		||||
	// TCCR0A: Timer/Counter 0 Control Register A
 | 
			
		||||
	TCCR0A_TCW0  = 0x80 // Timer/Counter Width
 | 
			
		||||
	TCCR0A_ICEN0 = 0x40 // Input Capture Mode Enable
 | 
			
		||||
	TCCR0A_ICNC0 = 0x20 // Input Capture Noise Canceler
 | 
			
		||||
	TCCR0A_ICES0 = 0x10 // Input Capture Edge Select
 | 
			
		||||
	TCCR0A_ICS0  = 0x8  // Input Capture Select
 | 
			
		||||
	TCCR0A_WGM00 = 0x1  // Waveform Generation Mode
 | 
			
		||||
 | 
			
		||||
	// TCNT0L: Timer Counter 0 Bytes
 | 
			
		||||
 | 
			
		||||
	// TCNT0H: Timer Counter 0 Bytes
 | 
			
		||||
	TCNT0_TCNT0 = 0xffff // Timer Counter 0 bits
 | 
			
		||||
 | 
			
		||||
	// OCR0A: Output Compare Register 0A
 | 
			
		||||
	OCR0A_OCR0A = 0xff // Output Compare 0 A bits
 | 
			
		||||
 | 
			
		||||
	// OCR0B: Output Compare Register B
 | 
			
		||||
	OCR0B_OCR0B = 0xff // Output Compare 0 B bits
 | 
			
		||||
 | 
			
		||||
	// TIMSK0: Timer/Counter Interrupt Mask Register
 | 
			
		||||
	TIMSK0_ICIE0  = 0x8 // Timer/Counter n Input Capture Interrupt Enable
 | 
			
		||||
	TIMSK0_OCIE0B = 0x4 // Timer/Counter0 Output Compare B Interrupt Enable
 | 
			
		||||
	TIMSK0_OCIE0A = 0x2 // Timer/Counter0 Output Compare A Interrupt Enable
 | 
			
		||||
	TIMSK0_TOIE0  = 0x1 // Timer/Counter0 Overflow Interrupt Enable
 | 
			
		||||
 | 
			
		||||
	// TIFR0: Timer/Counter Interrupt Flag register
 | 
			
		||||
	TIFR0_ICF0  = 0x8 // Timer/Counter 0 Input Capture Flag
 | 
			
		||||
	TIFR0_OCF0B = 0x4 // Timer/Counter0 Output Compare Flag B
 | 
			
		||||
	TIFR0_OCF0A = 0x2 // Timer/Counter0 Output Compare Flag A
 | 
			
		||||
	TIFR0_TOV0  = 0x1 // Timer/Counter0 Overflow Flag
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
// Bitfields for CELL_BALANCING: Cell Balancing
 | 
			
		||||
const (
 | 
			
		||||
	// CBCR: Cell Balancing Control Register
 | 
			
		||||
	CBCR_CBE = 0xf // Cell Balancing Enables
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
// Bitfields for BATTERY_PROTECTION: Battery Protection
 | 
			
		||||
const (
 | 
			
		||||
	// BPPLR: Battery Protection Parameter Lock Register
 | 
			
		||||
	BPPLR_BPPLE = 0x2 // Battery Protection Parameter Lock Enable
 | 
			
		||||
	BPPLR_BPPL  = 0x1 // Battery Protection Parameter Lock
 | 
			
		||||
 | 
			
		||||
	// BPCR: Battery Protection Control Register
 | 
			
		||||
	BPCR_EPID = 0x20 // External Protection Input Disable
 | 
			
		||||
	BPCR_SCD  = 0x10 // Short Circuit Protection Disabled
 | 
			
		||||
	BPCR_DOCD = 0x8  // Discharge Over-current Protection Disabled
 | 
			
		||||
	BPCR_COCD = 0x4  // Charge Over-current Protection Disabled
 | 
			
		||||
	BPCR_DHCD = 0x2  // Discharge High-current Protection Disable
 | 
			
		||||
	BPCR_CHCD = 0x1  // Charge High-current Protection Disable
 | 
			
		||||
 | 
			
		||||
	// BPHCTR: Battery Protection Short-current Timing Register
 | 
			
		||||
	BPHCTR_HCPT = 0x3f // Battery Protection Short-current Timing bits
 | 
			
		||||
 | 
			
		||||
	// BPOCTR: Battery Protection Over-current Timing Register
 | 
			
		||||
	BPOCTR_OCPT = 0x3f // Battery Protection Over-current Timing bits
 | 
			
		||||
 | 
			
		||||
	// BPSCTR: Battery Protection Short-current Timing Register
 | 
			
		||||
	BPSCTR_SCPT = 0x7f // Battery Protection Short-current Timing bits
 | 
			
		||||
 | 
			
		||||
	// BPCHCD: Battery Protection Charge-High-current Detection Level Register
 | 
			
		||||
	BPCHCD_CHCDL = 0xff // Battery Protection Charge-High-current Detection Level bits
 | 
			
		||||
 | 
			
		||||
	// BPDHCD: Battery Protection Discharge-High-current Detection Level Register
 | 
			
		||||
	BPDHCD_DHCDL = 0xff // Battery Protection Discharge-High-current Detection Level bits
 | 
			
		||||
 | 
			
		||||
	// BPCOCD: Battery Protection Charge-Over-current Detection Level Register
 | 
			
		||||
	BPCOCD_COCDL = 0xff // Battery Protection Charge-Over-current Detection Level bits
 | 
			
		||||
 | 
			
		||||
	// BPDOCD: Battery Protection Discharge-Over-current Detection Level Register
 | 
			
		||||
	BPDOCD_DOCDL = 0xff // Battery Protection Discharge-Over-current Detection Level bits
 | 
			
		||||
 | 
			
		||||
	// BPSCD: Battery Protection Short-Circuit Detection Level Register
 | 
			
		||||
	BPSCD_SCDL = 0xff // Battery Protection Short-Circuit Detection Level Register bits
 | 
			
		||||
 | 
			
		||||
	// BPIFR: Battery Protection Interrupt Flag Register
 | 
			
		||||
	BPIFR_SCIF  = 0x10 // Short-circuit Protection Activated Interrupt Flag
 | 
			
		||||
	BPIFR_DOCIF = 0x8  // Discharge Over-current Protection Activated Interrupt Flag
 | 
			
		||||
	BPIFR_COCIF = 0x4  // Charge Over-current Protection Activated Interrupt Flag
 | 
			
		||||
	BPIFR_DHCIF = 0x2  // Disharge High-current Protection Activated Interrupt
 | 
			
		||||
	BPIFR_CHCIF = 0x1  // Charge High-current Protection Activated Interrupt
 | 
			
		||||
 | 
			
		||||
	// BPIMSK: Battery Protection Interrupt Mask Register
 | 
			
		||||
	BPIMSK_SCIE  = 0x10 // Short-circuit Protection Activated Interrupt Enable
 | 
			
		||||
	BPIMSK_DOCIE = 0x8  // Discharge Over-current Protection Activated Interrupt Enable
 | 
			
		||||
	BPIMSK_COCIE = 0x4  // Charge Over-current Protection Activated Interrupt Enable
 | 
			
		||||
	BPIMSK_DHCIE = 0x2  // Discharger High-current Protection Activated Interrupt
 | 
			
		||||
	BPIMSK_CHCIE = 0x1  // Charger High-current Protection Activated Interrupt
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
// Bitfields for CHARGER_DETECT: Charger Detect
 | 
			
		||||
const (
 | 
			
		||||
	// CHGDCSR: Charger Detect Control and Status Register
 | 
			
		||||
	CHGDCSR_BATTPVL = 0x10 // BATT Pin Voltage Level
 | 
			
		||||
	CHGDCSR_CHGDISC = 0xc  // Charger Detect Interrupt Sense Control
 | 
			
		||||
	CHGDCSR_CHGDIF  = 0x2  // Charger Detect Interrupt Flag
 | 
			
		||||
	CHGDCSR_CHGDIE  = 0x1  // Charger Detect Interrupt Enable
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
// Bitfields for VOLTAGE_REGULATOR: Voltage Regulator
 | 
			
		||||
const (
 | 
			
		||||
	// ROCR: Regulator Operating Condition Register
 | 
			
		||||
	ROCR_ROCS   = 0x80 // ROC Status
 | 
			
		||||
	ROCR_ROCD   = 0x10 // ROC Disable
 | 
			
		||||
	ROCR_ROCWIF = 0x2  // ROC Warning Interrupt Flag
 | 
			
		||||
	ROCR_ROCWIE = 0x1  // ROC Warning Interrupt Enable
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
// Bitfields for BANDGAP: Bandgap
 | 
			
		||||
const (
 | 
			
		||||
	// BGCSR: Bandgap Control and Status Register
 | 
			
		||||
	BGCSR_BGD     = 0x20 // Bandgap Disable
 | 
			
		||||
	BGCSR_BGSCDE  = 0x10 // Bandgap Short Circuit Detection Enabled
 | 
			
		||||
	BGCSR_BGSCDIF = 0x2  // Bandgap Short Circuit Detection Interrupt Flag
 | 
			
		||||
	BGCSR_BGSCDIE = 0x1  // Bandgap Short Circuit Detection Interrupt Enable
 | 
			
		||||
 | 
			
		||||
	// BGCRR: Bandgap Calibration of Resistor Ladder
 | 
			
		||||
	BGCRR_BGCR = 0xff // Bandgap Calibration of Resistor Ladder Bits
 | 
			
		||||
 | 
			
		||||
	// BGCCR: Bandgap Calibration Register
 | 
			
		||||
	BGCCR_BGCC = 0x3f // BG Calibration of PTAT Current Bits
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
// Bitfields for CPU: CPU Registers
 | 
			
		||||
const (
 | 
			
		||||
	// SREG: Status Register
 | 
			
		||||
	SREG_I = 0x80 // Global Interrupt Enable
 | 
			
		||||
	SREG_T = 0x40 // Bit Copy Storage
 | 
			
		||||
	SREG_H = 0x20 // Half Carry Flag
 | 
			
		||||
	SREG_S = 0x10 // Sign Bit
 | 
			
		||||
	SREG_V = 0x8  // Two's Complement Overflow Flag
 | 
			
		||||
	SREG_N = 0x4  // Negative Flag
 | 
			
		||||
	SREG_Z = 0x2  // Zero Flag
 | 
			
		||||
	SREG_C = 0x1  // Carry Flag
 | 
			
		||||
 | 
			
		||||
	// MCUCR: MCU Control Register
 | 
			
		||||
	MCUCR_CKOE  = 0x20 // Clock Output Enable
 | 
			
		||||
	MCUCR_PUD   = 0x10 // Pull-up disable
 | 
			
		||||
	MCUCR_IVSEL = 0x2  // Interrupt Vector Select
 | 
			
		||||
	MCUCR_IVCE  = 0x1  // Interrupt Vector Change Enable
 | 
			
		||||
 | 
			
		||||
	// MCUSR: MCU Status Register
 | 
			
		||||
	MCUSR_OCDRF = 0x10 // OCD Reset Flag
 | 
			
		||||
	MCUSR_WDRF  = 0x8  // Watchdog Reset Flag
 | 
			
		||||
	MCUSR_BODRF = 0x4  // Brown-out Reset Flag
 | 
			
		||||
	MCUSR_EXTRF = 0x2  // External Reset Flag
 | 
			
		||||
	MCUSR_PORF  = 0x1  // Power-on reset flag
 | 
			
		||||
 | 
			
		||||
	// FOSCCAL: Fast Oscillator Calibration Value
 | 
			
		||||
	FOSCCAL_FCAL = 0xff // Fast Oscillator Calibration Value
 | 
			
		||||
 | 
			
		||||
	// OSICSR: Oscillator Sampling Interface Control and Status Register
 | 
			
		||||
	OSICSR_OSISEL0 = 0x10 // Oscillator Sampling Interface Select 0
 | 
			
		||||
	OSICSR_OSIST   = 0x2  // Oscillator Sampling Interface Status
 | 
			
		||||
	OSICSR_OSIEN   = 0x1  // Oscillator Sampling Interface Enable
 | 
			
		||||
 | 
			
		||||
	// SMCR: Sleep Mode Control Register
 | 
			
		||||
	SMCR_SM = 0xe // Sleep Mode Select bits
 | 
			
		||||
	SMCR_SE = 0x1 // Sleep Enable
 | 
			
		||||
 | 
			
		||||
	// GPIOR2: General Purpose IO Register 2
 | 
			
		||||
	GPIOR2_GPIOR2 = 0xff // General Purpose IO bits
 | 
			
		||||
 | 
			
		||||
	// GPIOR1: General Purpose IO Register 1
 | 
			
		||||
	GPIOR1_GPIOR1 = 0xff // General Purpose IO bits
 | 
			
		||||
 | 
			
		||||
	// GPIOR0: General Purpose IO Register 0
 | 
			
		||||
	GPIOR0_GPIOR0 = 0xff // General Purpose IO bits
 | 
			
		||||
 | 
			
		||||
	// DIDR0: Digital Input Disable Register
 | 
			
		||||
	DIDR0_PA1DID = 0x2 // When this bit is written logic one, the digital input buffer of the corresponding V_ADC pin is disabled.
 | 
			
		||||
	DIDR0_PA0DID = 0x1 // When this bit is written logic one, the digital input buffer of the corresponding V_ADC pin is disabled.
 | 
			
		||||
 | 
			
		||||
	// PRR0: Power Reduction Register 0
 | 
			
		||||
	PRR0_PRTWI  = 0x40 // Power Reduction TWI
 | 
			
		||||
	PRR0_PRVRM  = 0x20 // Power Reduction Voltage Regulator Monitor
 | 
			
		||||
	PRR0_PRSPI  = 0x8  // Power reduction SPI
 | 
			
		||||
	PRR0_PRTIM1 = 0x4  // Power Reduction Timer/Counter1
 | 
			
		||||
	PRR0_PRTIM0 = 0x2  // Power Reduction Timer/Counter0
 | 
			
		||||
	PRR0_PRVADC = 0x1  // Power Reduction V-ADC
 | 
			
		||||
 | 
			
		||||
	// CLKPR: Clock Prescale Register
 | 
			
		||||
	CLKPR_CLKPCE = 0x80 // Clock Prescaler Change Enable
 | 
			
		||||
	CLKPR_CLKPS  = 0x3  // Clock Prescaler Select Bits
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
// Bitfields for BOOT_LOAD: Bootloader
 | 
			
		||||
const (
 | 
			
		||||
	// SPMCSR: Store Program Memory Control and Status Register
 | 
			
		||||
	SPMCSR_SPMIE  = 0x80 // SPM Interrupt Enable
 | 
			
		||||
	SPMCSR_RWWSB  = 0x40 // Read-While-Write Section Busy
 | 
			
		||||
	SPMCSR_SIGRD  = 0x20 // Signature Row Read
 | 
			
		||||
	SPMCSR_RWWSRE = 0x10 // Read-While-Write Section Read Enable
 | 
			
		||||
	SPMCSR_LBSET  = 0x8  // Lock Bit Set
 | 
			
		||||
	SPMCSR_PGWRT  = 0x4  // Page Write
 | 
			
		||||
	SPMCSR_PGERS  = 0x2  // Page Erase
 | 
			
		||||
	SPMCSR_SPMEN  = 0x1  // Store Program Memory Enable
 | 
			
		||||
)
 | 
			
		||||
							
								
								
									
										6
									
								
								src/device/avr/atmega16hvbrevb.ld
									
										
									
									
									
										Обычный файл
									
								
							
							
						
						
									
										6
									
								
								src/device/avr/atmega16hvbrevb.ld
									
										
									
									
									
										Обычный файл
									
								
							| 
						 | 
				
			
			@ -0,0 +1,6 @@
 | 
			
		|||
/* Automatically generated file. DO NOT EDIT. */
 | 
			
		||||
/* Generated by gen-device.py from ATmega16HVBrevB.atdf, see http://packs.download.atmel.com/ */
 | 
			
		||||
 | 
			
		||||
__flash_size = 0x4000;
 | 
			
		||||
__ram_size   = 0x400;
 | 
			
		||||
__num_isrs   = 29;
 | 
			
		||||
							
								
								
									
										1163
									
								
								src/device/avr/atmega16m1.go
									
										
									
									
									
										Обычный файл
									
								
							
							
						
						
									
										1163
									
								
								src/device/avr/atmega16m1.go
									
										
									
									
									
										Обычный файл
									
								
							
										
											
												Различия файлов не показаны, т.к. их слишком много
												Показать различия
											
										
									
								
							
							
								
								
									
										6
									
								
								src/device/avr/atmega16m1.ld
									
										
									
									
									
										Обычный файл
									
								
							
							
						
						
									
										6
									
								
								src/device/avr/atmega16m1.ld
									
										
									
									
									
										Обычный файл
									
								
							| 
						 | 
				
			
			@ -0,0 +1,6 @@
 | 
			
		|||
/* Automatically generated file. DO NOT EDIT. */
 | 
			
		||||
/* Generated by gen-device.py from ATmega16M1.atdf, see http://packs.download.atmel.com/ */
 | 
			
		||||
 | 
			
		||||
__flash_size = 0x4000;
 | 
			
		||||
__ram_size   = 0x400;
 | 
			
		||||
__num_isrs   = 31;
 | 
			
		||||
							
								
								
									
										842
									
								
								src/device/avr/atmega16u2.go
									
										
									
									
									
										Обычный файл
									
								
							
							
						
						
									
										842
									
								
								src/device/avr/atmega16u2.go
									
										
									
									
									
										Обычный файл
									
								
							| 
						 | 
				
			
			@ -0,0 +1,842 @@
 | 
			
		|||
// Automatically generated file. DO NOT EDIT.
 | 
			
		||||
// Generated by gen-device.py from ATmega16U2.atdf, see http://packs.download.atmel.com/
 | 
			
		||||
 | 
			
		||||
// +build avr,atmega16u2
 | 
			
		||||
 | 
			
		||||
// Device information for the ATmega16U2.
 | 
			
		||||
//
 | 
			
		||||
package avr
 | 
			
		||||
 | 
			
		||||
// Magic type name for the compiler.
 | 
			
		||||
type __reg uint8
 | 
			
		||||
 | 
			
		||||
// Export this magic type name.
 | 
			
		||||
type RegValue = __reg
 | 
			
		||||
 | 
			
		||||
// Some information about this device.
 | 
			
		||||
const (
 | 
			
		||||
	DEVICE = "ATmega16U2"
 | 
			
		||||
	ARCH   = "AVR8"
 | 
			
		||||
	FAMILY = "megaAVR"
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
// Interrupts
 | 
			
		||||
const (
 | 
			
		||||
	IRQ_RESET        = 0  // External Pin,Power-on Reset,Brown-out Reset,Watchdog Reset,and JTAG AVR Reset. See Datasheet.
 | 
			
		||||
	IRQ_INT0         = 1  // External Interrupt Request 0
 | 
			
		||||
	IRQ_INT1         = 2  // External Interrupt Request 1
 | 
			
		||||
	IRQ_INT2         = 3  // External Interrupt Request 2
 | 
			
		||||
	IRQ_INT3         = 4  // External Interrupt Request 3
 | 
			
		||||
	IRQ_INT4         = 5  // External Interrupt Request 4
 | 
			
		||||
	IRQ_INT5         = 6  // External Interrupt Request 5
 | 
			
		||||
	IRQ_INT6         = 7  // External Interrupt Request 6
 | 
			
		||||
	IRQ_INT7         = 8  // External Interrupt Request 7
 | 
			
		||||
	IRQ_PCINT0       = 9  // Pin Change Interrupt Request 0
 | 
			
		||||
	IRQ_PCINT1       = 10 // Pin Change Interrupt Request 1
 | 
			
		||||
	IRQ_USB_GEN      = 11 // USB General Interrupt Request
 | 
			
		||||
	IRQ_USB_COM      = 12 // USB Endpoint/Pipe Interrupt Communication Request
 | 
			
		||||
	IRQ_WDT          = 13 // Watchdog Time-out Interrupt
 | 
			
		||||
	IRQ_TIMER1_CAPT  = 14 // Timer/Counter2 Capture Event
 | 
			
		||||
	IRQ_TIMER1_COMPA = 15 // Timer/Counter2 Compare Match B
 | 
			
		||||
	IRQ_TIMER1_COMPB = 16 // Timer/Counter2 Compare Match B
 | 
			
		||||
	IRQ_TIMER1_COMPC = 17 // Timer/Counter2 Compare Match C
 | 
			
		||||
	IRQ_TIMER1_OVF   = 18 // Timer/Counter1 Overflow
 | 
			
		||||
	IRQ_TIMER0_COMPA = 19 // Timer/Counter0 Compare Match A
 | 
			
		||||
	IRQ_TIMER0_COMPB = 20 // Timer/Counter0 Compare Match B
 | 
			
		||||
	IRQ_TIMER0_OVF   = 21 // Timer/Counter0 Overflow
 | 
			
		||||
	IRQ_SPI_STC      = 22 // SPI Serial Transfer Complete
 | 
			
		||||
	IRQ_USART1_RX    = 23 // USART1, Rx Complete
 | 
			
		||||
	IRQ_USART1_UDRE  = 24 // USART1 Data register Empty
 | 
			
		||||
	IRQ_USART1_TX    = 25 // USART1, Tx Complete
 | 
			
		||||
	IRQ_ANALOG_COMP  = 26 // Analog Comparator
 | 
			
		||||
	IRQ_EE_READY     = 27 // EEPROM Ready
 | 
			
		||||
	IRQ_SPM_READY    = 28 // Store Program Memory Read
 | 
			
		||||
	IRQ_max          = 28 // Highest interrupt number on this device.
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
// Peripherals
 | 
			
		||||
var (
 | 
			
		||||
	// Fuses
 | 
			
		||||
	FUSE = struct {
 | 
			
		||||
		EXTENDED __reg
 | 
			
		||||
		HIGH     __reg
 | 
			
		||||
		LOW      __reg
 | 
			
		||||
	}{
 | 
			
		||||
		EXTENDED: 0x2,
 | 
			
		||||
		HIGH:     0x1,
 | 
			
		||||
		LOW:      0x0,
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	// Lockbits
 | 
			
		||||
	LOCKBIT = struct {
 | 
			
		||||
		LOCKBIT __reg
 | 
			
		||||
	}{
 | 
			
		||||
		LOCKBIT: 0x0,
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	// I/O Port
 | 
			
		||||
	PORT = struct {
 | 
			
		||||
		PORTB __reg
 | 
			
		||||
		DDRB  __reg
 | 
			
		||||
		PINB  __reg
 | 
			
		||||
		PORTD __reg
 | 
			
		||||
		DDRD  __reg
 | 
			
		||||
		PIND  __reg
 | 
			
		||||
		PORTC __reg
 | 
			
		||||
		DDRC  __reg
 | 
			
		||||
		PINC  __reg
 | 
			
		||||
	}{
 | 
			
		||||
		PORTB: 0x25, // Port B Data Register
 | 
			
		||||
		DDRB:  0x24, // Port B Data Direction Register
 | 
			
		||||
		PINB:  0x23, // Port B Input Pins
 | 
			
		||||
		PORTD: 0x2b, // Port D Data Register
 | 
			
		||||
		DDRD:  0x2a, // Port D Data Direction Register
 | 
			
		||||
		PIND:  0x29, // Port D Input Pins
 | 
			
		||||
		PORTC: 0x28, // Port C Data Register
 | 
			
		||||
		DDRC:  0x27, // Port C Data Direction Register
 | 
			
		||||
		PINC:  0x26, // Port C Input Pins
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	// Serial Peripheral Interface
 | 
			
		||||
	SPI = struct {
 | 
			
		||||
		SPCR __reg
 | 
			
		||||
		SPSR __reg
 | 
			
		||||
		SPDR __reg
 | 
			
		||||
	}{
 | 
			
		||||
		SPCR: 0x4c, // SPI Control Register
 | 
			
		||||
		SPSR: 0x4d, // SPI Status Register
 | 
			
		||||
		SPDR: 0x4e, // SPI Data Register
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	// Bootloader
 | 
			
		||||
	BOOT_LOAD = struct {
 | 
			
		||||
		SPMCSR __reg
 | 
			
		||||
	}{
 | 
			
		||||
		SPMCSR: 0x57, // Store Program Memory Control Register
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	// EEPROM
 | 
			
		||||
	EEPROM = struct {
 | 
			
		||||
		EEARL __reg
 | 
			
		||||
		EEARH __reg
 | 
			
		||||
		EEDR  __reg
 | 
			
		||||
		EECR  __reg
 | 
			
		||||
	}{
 | 
			
		||||
		EEARL: 0x41, // EEPROM Address Register Low Bytes
 | 
			
		||||
		EEARH: 0x41, // EEPROM Address Register Low Bytes
 | 
			
		||||
		EEDR:  0x40, // EEPROM Data Register
 | 
			
		||||
		EECR:  0x3f, // EEPROM Control Register
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	// Timer/Counter, 8-bit
 | 
			
		||||
	TC8 = struct {
 | 
			
		||||
		OCR0B  __reg
 | 
			
		||||
		OCR0A  __reg
 | 
			
		||||
		TCNT0  __reg
 | 
			
		||||
		TCCR0B __reg
 | 
			
		||||
		TCCR0A __reg
 | 
			
		||||
		TIMSK0 __reg
 | 
			
		||||
		TIFR0  __reg
 | 
			
		||||
		GTCCR  __reg
 | 
			
		||||
	}{
 | 
			
		||||
		OCR0B:  0x48, // Timer/Counter0 Output Compare Register
 | 
			
		||||
		OCR0A:  0x47, // Timer/Counter0 Output Compare Register
 | 
			
		||||
		TCNT0:  0x46, // Timer/Counter0
 | 
			
		||||
		TCCR0B: 0x45, // Timer/Counter Control Register B
 | 
			
		||||
		TCCR0A: 0x44, // Timer/Counter  Control Register A
 | 
			
		||||
		TIMSK0: 0x6e, // Timer/Counter0 Interrupt Mask Register
 | 
			
		||||
		TIFR0:  0x35, // Timer/Counter0 Interrupt Flag register
 | 
			
		||||
		GTCCR:  0x43, // General Timer/Counter Control Register
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	// Timer/Counter, 16-bit
 | 
			
		||||
	TC16 = struct {
 | 
			
		||||
		TCCR1A __reg
 | 
			
		||||
		TCCR1B __reg
 | 
			
		||||
		TCCR1C __reg
 | 
			
		||||
		TCNT1L __reg
 | 
			
		||||
		TCNT1H __reg
 | 
			
		||||
		OCR1AL __reg
 | 
			
		||||
		OCR1AH __reg
 | 
			
		||||
		OCR1BL __reg
 | 
			
		||||
		OCR1BH __reg
 | 
			
		||||
		OCR1CL __reg
 | 
			
		||||
		OCR1CH __reg
 | 
			
		||||
		ICR1L  __reg
 | 
			
		||||
		ICR1H  __reg
 | 
			
		||||
		TIMSK1 __reg
 | 
			
		||||
		TIFR1  __reg
 | 
			
		||||
	}{
 | 
			
		||||
		TCCR1A: 0x80, // Timer/Counter1 Control Register A
 | 
			
		||||
		TCCR1B: 0x81, // Timer/Counter1 Control Register B
 | 
			
		||||
		TCCR1C: 0x82, // Timer/Counter 1 Control Register C
 | 
			
		||||
		TCNT1L: 0x84, // Timer/Counter1 Bytes
 | 
			
		||||
		TCNT1H: 0x84, // Timer/Counter1 Bytes
 | 
			
		||||
		OCR1AL: 0x88, // Timer/Counter1 Output Compare Register A Bytes
 | 
			
		||||
		OCR1AH: 0x88, // Timer/Counter1 Output Compare Register A Bytes
 | 
			
		||||
		OCR1BL: 0x8a, // Timer/Counter1 Output Compare Register B Bytes
 | 
			
		||||
		OCR1BH: 0x8a, // Timer/Counter1 Output Compare Register B Bytes
 | 
			
		||||
		OCR1CL: 0x8c, // Timer/Counter1 Output Compare Register C Bytes
 | 
			
		||||
		OCR1CH: 0x8c, // Timer/Counter1 Output Compare Register C Bytes
 | 
			
		||||
		ICR1L:  0x86, // Timer/Counter1 Input Capture Register Bytes
 | 
			
		||||
		ICR1H:  0x86, // Timer/Counter1 Input Capture Register Bytes
 | 
			
		||||
		TIMSK1: 0x6f, // Timer/Counter1 Interrupt Mask Register
 | 
			
		||||
		TIFR1:  0x36, // Timer/Counter1 Interrupt Flag register
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	// Phase Locked Loop
 | 
			
		||||
	PLL = struct {
 | 
			
		||||
		PLLCSR __reg
 | 
			
		||||
	}{
 | 
			
		||||
		PLLCSR: 0x49, // PLL Status and Control register
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	// USB Device Registers
 | 
			
		||||
	USB_DEVICE = struct {
 | 
			
		||||
		UPOE    __reg
 | 
			
		||||
		UEINT   __reg
 | 
			
		||||
		UEBCLX  __reg
 | 
			
		||||
		UEDATX  __reg
 | 
			
		||||
		UEIENX  __reg
 | 
			
		||||
		UESTA1X __reg
 | 
			
		||||
		UESTA0X __reg
 | 
			
		||||
		UECFG1X __reg
 | 
			
		||||
		UECFG0X __reg
 | 
			
		||||
		UECONX  __reg
 | 
			
		||||
		UERST   __reg
 | 
			
		||||
		UENUM   __reg
 | 
			
		||||
		UEINTX  __reg
 | 
			
		||||
		UDMFN   __reg
 | 
			
		||||
		UDFNUML __reg
 | 
			
		||||
		UDFNUMH __reg
 | 
			
		||||
		UDADDR  __reg
 | 
			
		||||
		UDIEN   __reg
 | 
			
		||||
		UDINT   __reg
 | 
			
		||||
		UDCON   __reg
 | 
			
		||||
		USBCON  __reg
 | 
			
		||||
		REGCR   __reg
 | 
			
		||||
	}{
 | 
			
		||||
		UPOE:    0xfb, // USB Software Output Enable register
 | 
			
		||||
		UEINT:   0xf4, // USB Endpoint Number Interrupt Register
 | 
			
		||||
		UEBCLX:  0xf2, // USB Endpoint Byte Count Register
 | 
			
		||||
		UEDATX:  0xf1, // USB Data Endpoint
 | 
			
		||||
		UEIENX:  0xf0, // USB Endpoint Interrupt Enable Register
 | 
			
		||||
		UESTA1X: 0xef, // USB Endpoint Status 1 Register
 | 
			
		||||
		UESTA0X: 0xee, // USB Endpoint Status 0 Register
 | 
			
		||||
		UECFG1X: 0xed, // USB Endpoint Configuration 1 Register
 | 
			
		||||
		UECFG0X: 0xec, // USB Endpoint Configuration 0 Register
 | 
			
		||||
		UECONX:  0xeb, // USB Endpoint Control Register
 | 
			
		||||
		UERST:   0xea, // USB Endpoint Reset Register
 | 
			
		||||
		UENUM:   0xe9, // USB Endpoint Number
 | 
			
		||||
		UEINTX:  0xe8, // USB Endpoint Interrupt Register
 | 
			
		||||
		UDMFN:   0xe6, // USB Device Micro Frame Number
 | 
			
		||||
		UDFNUML: 0xe4, // USB Device Frame Number High Register
 | 
			
		||||
		UDFNUMH: 0xe4, // USB Device Frame Number High Register
 | 
			
		||||
		UDADDR:  0xe3, // USB Device Address Register
 | 
			
		||||
		UDIEN:   0xe2, // USB Device Interrupt Enable Register
 | 
			
		||||
		UDINT:   0xe1, // USB Device Interrupt Register
 | 
			
		||||
		UDCON:   0xe0, // USB Device Control Registers
 | 
			
		||||
		USBCON:  0xd8, // USB General Control Register
 | 
			
		||||
		REGCR:   0x63, // Regulator Control Register
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	// CPU Registers
 | 
			
		||||
	CPU = struct {
 | 
			
		||||
		SREG    __reg
 | 
			
		||||
		SPL     __reg
 | 
			
		||||
		SPH     __reg
 | 
			
		||||
		MCUCR   __reg
 | 
			
		||||
		MCUSR   __reg
 | 
			
		||||
		OSCCAL  __reg
 | 
			
		||||
		CLKPR   __reg
 | 
			
		||||
		SMCR    __reg
 | 
			
		||||
		EIND    __reg
 | 
			
		||||
		GPIOR2  __reg
 | 
			
		||||
		GPIOR1  __reg
 | 
			
		||||
		GPIOR0  __reg
 | 
			
		||||
		PRR1    __reg
 | 
			
		||||
		PRR0    __reg
 | 
			
		||||
		CLKSTA  __reg
 | 
			
		||||
		CLKSEL1 __reg
 | 
			
		||||
		CLKSEL0 __reg
 | 
			
		||||
		DWDR    __reg
 | 
			
		||||
	}{
 | 
			
		||||
		SREG:    0x5f, // Status Register
 | 
			
		||||
		SPL:     0x5d, // Stack Pointer
 | 
			
		||||
		SPH:     0x5d, // Stack Pointer
 | 
			
		||||
		MCUCR:   0x55, // MCU Control Register
 | 
			
		||||
		MCUSR:   0x54, // MCU Status Register
 | 
			
		||||
		OSCCAL:  0x66, // Oscillator Calibration Value
 | 
			
		||||
		CLKPR:   0x61,
 | 
			
		||||
		SMCR:    0x53, // Sleep Mode Control Register
 | 
			
		||||
		EIND:    0x5c, // Extended Indirect Register
 | 
			
		||||
		GPIOR2:  0x4b, // General Purpose IO Register 2
 | 
			
		||||
		GPIOR1:  0x4a, // General Purpose IO Register 1
 | 
			
		||||
		GPIOR0:  0x3e, // General Purpose IO Register 0
 | 
			
		||||
		PRR1:    0x65, // Power Reduction Register1
 | 
			
		||||
		PRR0:    0x64, // Power Reduction Register0
 | 
			
		||||
		CLKSTA:  0xd2,
 | 
			
		||||
		CLKSEL1: 0xd1,
 | 
			
		||||
		CLKSEL0: 0xd0,
 | 
			
		||||
		DWDR:    0x51, // debugWire communication register
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	// External Interrupts
 | 
			
		||||
	EXINT = struct {
 | 
			
		||||
		EICRA  __reg
 | 
			
		||||
		EICRB  __reg
 | 
			
		||||
		EIMSK  __reg
 | 
			
		||||
		EIFR   __reg
 | 
			
		||||
		PCMSK0 __reg
 | 
			
		||||
		PCMSK1 __reg
 | 
			
		||||
		PCIFR  __reg
 | 
			
		||||
		PCICR  __reg
 | 
			
		||||
	}{
 | 
			
		||||
		EICRA:  0x69, // External Interrupt Control Register A
 | 
			
		||||
		EICRB:  0x6a, // External Interrupt Control Register B
 | 
			
		||||
		EIMSK:  0x3d, // External Interrupt Mask Register
 | 
			
		||||
		EIFR:   0x3c, // External Interrupt Flag Register
 | 
			
		||||
		PCMSK0: 0x6b, // Pin Change Mask Register 0
 | 
			
		||||
		PCMSK1: 0x6c, // Pin Change Mask Register 1
 | 
			
		||||
		PCIFR:  0x3b, // Pin Change Interrupt Flag Register
 | 
			
		||||
		PCICR:  0x68, // Pin Change Interrupt Control Register
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	// USART
 | 
			
		||||
	USART = struct {
 | 
			
		||||
		UDR1   __reg
 | 
			
		||||
		UCSR1A __reg
 | 
			
		||||
		UCSR1B __reg
 | 
			
		||||
		UCSR1C __reg
 | 
			
		||||
		UCSR1D __reg
 | 
			
		||||
		UBRR1L __reg
 | 
			
		||||
		UBRR1H __reg
 | 
			
		||||
	}{
 | 
			
		||||
		UDR1:   0xce, // USART I/O Data Register
 | 
			
		||||
		UCSR1A: 0xc8, // USART Control and Status Register A
 | 
			
		||||
		UCSR1B: 0xc9, // USART Control and Status Register B
 | 
			
		||||
		UCSR1C: 0xca, // USART Control and Status Register C
 | 
			
		||||
		UCSR1D: 0xcb, // USART Control and Status Register D
 | 
			
		||||
		UBRR1L: 0xcc, // USART Baud Rate Register Bytes
 | 
			
		||||
		UBRR1H: 0xcc, // USART Baud Rate Register Bytes
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	// Watchdog Timer
 | 
			
		||||
	WDT = struct {
 | 
			
		||||
		WDTCSR __reg
 | 
			
		||||
		WDTCKD __reg
 | 
			
		||||
	}{
 | 
			
		||||
		WDTCSR: 0x60, // Watchdog Timer Control Register
 | 
			
		||||
		WDTCKD: 0x62, // Watchdog Timer Clock Divider
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	// Analog Comparator
 | 
			
		||||
	AC = struct {
 | 
			
		||||
		ACSR  __reg
 | 
			
		||||
		ACMUX __reg
 | 
			
		||||
		DIDR1 __reg
 | 
			
		||||
	}{
 | 
			
		||||
		ACSR:  0x50, // Analog Comparator Control And Status Register
 | 
			
		||||
		ACMUX: 0x7d, // Analog Comparator Input Multiplexer
 | 
			
		||||
		DIDR1: 0x7f,
 | 
			
		||||
	}
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
// Bitfields for FUSE: Fuses
 | 
			
		||||
const (
 | 
			
		||||
	// EXTENDED
 | 
			
		||||
	EXTENDED_BODLEVEL = 0x7 // Brown-out Detector trigger level
 | 
			
		||||
	EXTENDED_HWBE     = 0x8 // Hardware Boot Enable
 | 
			
		||||
 | 
			
		||||
	// HIGH
 | 
			
		||||
	HIGH_DWEN     = 0x80 // Debug Wire enable
 | 
			
		||||
	HIGH_RSTDISBL = 0x40 // Reset Disabled (Enable PC6 as i/o pin)
 | 
			
		||||
	HIGH_SPIEN    = 0x20 // Serial program downloading (SPI) enabled
 | 
			
		||||
	HIGH_WDTON    = 0x10 // Watchdog timer always on
 | 
			
		||||
	HIGH_EESAVE   = 0x8  // Preserve EEPROM through the Chip Erase cycle
 | 
			
		||||
	HIGH_BOOTSZ   = 0x6  // Select Boot Size
 | 
			
		||||
	HIGH_BOOTRST  = 0x1  // Boot Reset vector Enabled
 | 
			
		||||
 | 
			
		||||
	// LOW
 | 
			
		||||
	LOW_CKDIV8    = 0x80 // Divide clock by 8 internally
 | 
			
		||||
	LOW_CKOUT     = 0x40 // Clock output on PORTC7
 | 
			
		||||
	LOW_SUT_CKSEL = 0x3f // Select Clock Source
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
// Bitfields for LOCKBIT: Lockbits
 | 
			
		||||
const (
 | 
			
		||||
	// LOCKBIT
 | 
			
		||||
	LOCKBIT_LB   = 0x3  // Memory Lock
 | 
			
		||||
	LOCKBIT_BLB0 = 0xc  // Boot Loader Protection Mode
 | 
			
		||||
	LOCKBIT_BLB1 = 0x30 // Boot Loader Protection Mode
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
// Bitfields for PORT: I/O Port
 | 
			
		||||
const (
 | 
			
		||||
	// PORTC: Port C Data Register
 | 
			
		||||
	PORTC_PORTC = 0xf0 // Port C Data Register bits
 | 
			
		||||
	PORTC_PORTC = 0x7  // Port C Data Register bits
 | 
			
		||||
 | 
			
		||||
	// DDRC: Port C Data Direction Register
 | 
			
		||||
	DDRC_DDC = 0xf0 // Port C Data Direction Register bits
 | 
			
		||||
	DDRC_DDC = 0x7  // Port C Data Direction Register bits
 | 
			
		||||
 | 
			
		||||
	// PINC: Port C Input Pins
 | 
			
		||||
	PINC_PINC = 0xf0 // Port C Input Pins bits
 | 
			
		||||
	PINC_PINC = 0x7  // Port C Input Pins bits
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
// Bitfields for SPI: Serial Peripheral Interface
 | 
			
		||||
const (
 | 
			
		||||
	// SPCR: SPI Control Register
 | 
			
		||||
	SPCR_SPIE = 0x80 // SPI Interrupt Enable
 | 
			
		||||
	SPCR_SPE  = 0x40 // SPI Enable
 | 
			
		||||
	SPCR_DORD = 0x20 // Data Order
 | 
			
		||||
	SPCR_MSTR = 0x10 // Master/Slave Select
 | 
			
		||||
	SPCR_CPOL = 0x8  // Clock polarity
 | 
			
		||||
	SPCR_CPHA = 0x4  // Clock Phase
 | 
			
		||||
	SPCR_SPR  = 0x3  // SPI Clock Rate Selects
 | 
			
		||||
 | 
			
		||||
	// SPSR: SPI Status Register
 | 
			
		||||
	SPSR_SPIF  = 0x80 // SPI Interrupt Flag
 | 
			
		||||
	SPSR_WCOL  = 0x40 // Write Collision Flag
 | 
			
		||||
	SPSR_SPI2X = 0x1  // Double SPI Speed Bit
 | 
			
		||||
 | 
			
		||||
	// SPDR: SPI Data Register
 | 
			
		||||
	SPDR_SPDR = 0xff // SPI Data bits
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
// Bitfields for BOOT_LOAD: Bootloader
 | 
			
		||||
const (
 | 
			
		||||
	// SPMCSR: Store Program Memory Control Register
 | 
			
		||||
	SPMCSR_SPMIE  = 0x80 // SPM Interrupt Enable
 | 
			
		||||
	SPMCSR_RWWSB  = 0x40 // Read While Write Section Busy
 | 
			
		||||
	SPMCSR_SIGRD  = 0x20 // Signature Row Read
 | 
			
		||||
	SPMCSR_RWWSRE = 0x10 // Read While Write section read enable
 | 
			
		||||
	SPMCSR_BLBSET = 0x8  // Boot Lock Bit Set
 | 
			
		||||
	SPMCSR_PGWRT  = 0x4  // Page Write
 | 
			
		||||
	SPMCSR_PGERS  = 0x2  // Page Erase
 | 
			
		||||
	SPMCSR_SPMEN  = 0x1  // Store Program Memory Enable
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
// Bitfields for EEPROM: EEPROM
 | 
			
		||||
const (
 | 
			
		||||
	// EEARL: EEPROM Address Register Low Bytes
 | 
			
		||||
 | 
			
		||||
	// EEARH: EEPROM Address Register Low Bytes
 | 
			
		||||
	EEAR_EEAR = 0xfff // EEPROM Address bits
 | 
			
		||||
 | 
			
		||||
	// EEDR: EEPROM Data Register
 | 
			
		||||
	EEDR_EEDR = 0xff // EEPROM Data bits
 | 
			
		||||
 | 
			
		||||
	// EECR: EEPROM Control Register
 | 
			
		||||
	EECR_EEPM  = 0x30 // EEPROM Programming Mode Bits
 | 
			
		||||
	EECR_EERIE = 0x8  // EEPROM Ready Interrupt Enable
 | 
			
		||||
	EECR_EEMPE = 0x4  // EEPROM Master Write Enable
 | 
			
		||||
	EECR_EEPE  = 0x2  // EEPROM Write Enable
 | 
			
		||||
	EECR_EERE  = 0x1  // EEPROM Read Enable
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
// Bitfields for TC8: Timer/Counter, 8-bit
 | 
			
		||||
const (
 | 
			
		||||
	// OCR0B: Timer/Counter0 Output Compare Register
 | 
			
		||||
	OCR0B_OCR0B = 0xff // Timer/Counter0 Output Compare B bits
 | 
			
		||||
 | 
			
		||||
	// OCR0A: Timer/Counter0 Output Compare Register
 | 
			
		||||
	OCR0A_OCR0A = 0xff // Timer/Counter0 Output Compare A bits
 | 
			
		||||
 | 
			
		||||
	// TCNT0: Timer/Counter0
 | 
			
		||||
	TCNT0_TCNT0 = 0xff // Timer/Counter0 bits
 | 
			
		||||
 | 
			
		||||
	// TCCR0B: Timer/Counter Control Register B
 | 
			
		||||
	TCCR0B_FOC0A = 0x80 // Force Output Compare A
 | 
			
		||||
	TCCR0B_FOC0B = 0x40 // Force Output Compare B
 | 
			
		||||
	TCCR0B_WGM02 = 0x8
 | 
			
		||||
	TCCR0B_CS0   = 0x7 // Clock Select
 | 
			
		||||
 | 
			
		||||
	// TCCR0A: Timer/Counter  Control Register A
 | 
			
		||||
	TCCR0A_COM0A = 0xc0 // Compare Output Mode, Phase Correct PWM Mode
 | 
			
		||||
	TCCR0A_COM0B = 0x30 // Compare Output Mode, Fast PWm
 | 
			
		||||
	TCCR0A_WGM0  = 0x3  // Waveform Generation Mode
 | 
			
		||||
 | 
			
		||||
	// TIMSK0: Timer/Counter0 Interrupt Mask Register
 | 
			
		||||
	TIMSK0_OCIE0B = 0x4 // Timer/Counter0 Output Compare Match B Interrupt Enable
 | 
			
		||||
	TIMSK0_OCIE0A = 0x2 // Timer/Counter0 Output Compare Match A Interrupt Enable
 | 
			
		||||
	TIMSK0_TOIE0  = 0x1 // Timer/Counter0 Overflow Interrupt Enable
 | 
			
		||||
 | 
			
		||||
	// TIFR0: Timer/Counter0 Interrupt Flag register
 | 
			
		||||
	TIFR0_OCF0B = 0x4 // Timer/Counter0 Output Compare Flag 0B
 | 
			
		||||
	TIFR0_OCF0A = 0x2 // Timer/Counter0 Output Compare Flag 0A
 | 
			
		||||
	TIFR0_TOV0  = 0x1 // Timer/Counter0 Overflow Flag
 | 
			
		||||
 | 
			
		||||
	// GTCCR: General Timer/Counter Control Register
 | 
			
		||||
	GTCCR_TSM     = 0x80 // Timer/Counter Synchronization Mode
 | 
			
		||||
	GTCCR_PSRSYNC = 0x1  // Prescaler Reset Timer/Counter1 and Timer/Counter0
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
// Bitfields for TC16: Timer/Counter, 16-bit
 | 
			
		||||
const (
 | 
			
		||||
	// TCCR1A: Timer/Counter1 Control Register A
 | 
			
		||||
	TCCR1A_COM1A = 0xc0 // Compare Output Mode 1A, bits
 | 
			
		||||
	TCCR1A_COM1B = 0x30 // Compare Output Mode 1B, bits
 | 
			
		||||
	TCCR1A_COM1C = 0xc  // Compare Output Mode 1C, bits
 | 
			
		||||
	TCCR1A_WGM1  = 0x3  // Waveform Generation Mode
 | 
			
		||||
 | 
			
		||||
	// TCCR1B: Timer/Counter1 Control Register B
 | 
			
		||||
	TCCR1B_ICNC1 = 0x80 // Input Capture 1 Noise Canceler
 | 
			
		||||
	TCCR1B_ICES1 = 0x40 // Input Capture 1 Edge Select
 | 
			
		||||
	TCCR1B_WGM1  = 0x18 // Waveform Generation Mode
 | 
			
		||||
	TCCR1B_CS1   = 0x7  // Prescaler source of Timer/Counter 1
 | 
			
		||||
 | 
			
		||||
	// TCCR1C: Timer/Counter 1 Control Register C
 | 
			
		||||
	TCCR1C_FOC1A = 0x80 // Force Output Compare 1A
 | 
			
		||||
	TCCR1C_FOC1B = 0x40 // Force Output Compare 1B
 | 
			
		||||
	TCCR1C_FOC1C = 0x20 // Force Output Compare 1C
 | 
			
		||||
 | 
			
		||||
	// TCNT1L: Timer/Counter1 Bytes
 | 
			
		||||
 | 
			
		||||
	// TCNT1H: Timer/Counter1 Bytes
 | 
			
		||||
	TCNT1_TCNT1 = 0xffff // Timer/Counter1 bits
 | 
			
		||||
 | 
			
		||||
	// OCR1AL: Timer/Counter1 Output Compare Register A Bytes
 | 
			
		||||
 | 
			
		||||
	// OCR1AH: Timer/Counter1 Output Compare Register A Bytes
 | 
			
		||||
	OCR1A_OCR1A = 0xffff // Timer/Counter1 Output Compare A bits
 | 
			
		||||
 | 
			
		||||
	// OCR1BL: Timer/Counter1 Output Compare Register B Bytes
 | 
			
		||||
 | 
			
		||||
	// OCR1BH: Timer/Counter1 Output Compare Register B Bytes
 | 
			
		||||
	OCR1B_OCR1B = 0xffff // Timer/Counter1 Output Compare B bits
 | 
			
		||||
 | 
			
		||||
	// OCR1CL: Timer/Counter1 Output Compare Register C Bytes
 | 
			
		||||
 | 
			
		||||
	// OCR1CH: Timer/Counter1 Output Compare Register C Bytes
 | 
			
		||||
	OCR1C_OCR1C = 0xffff // Timer/Counter1 Output Compare C bits
 | 
			
		||||
 | 
			
		||||
	// ICR1L: Timer/Counter1 Input Capture Register Bytes
 | 
			
		||||
 | 
			
		||||
	// ICR1H: Timer/Counter1 Input Capture Register Bytes
 | 
			
		||||
	ICR1_ICR1 = 0xffff // Timer/Counter1 Input Capture bits
 | 
			
		||||
 | 
			
		||||
	// TIMSK1: Timer/Counter1 Interrupt Mask Register
 | 
			
		||||
	TIMSK1_ICIE1  = 0x20 // Timer/Counter1 Input Capture Interrupt Enable
 | 
			
		||||
	TIMSK1_OCIE1C = 0x8  // Timer/Counter1 Output Compare C Match Interrupt Enable
 | 
			
		||||
	TIMSK1_OCIE1B = 0x4  // Timer/Counter1 Output Compare B Match Interrupt Enable
 | 
			
		||||
	TIMSK1_OCIE1A = 0x2  // Timer/Counter1 Output Compare A Match Interrupt Enable
 | 
			
		||||
	TIMSK1_TOIE1  = 0x1  // Timer/Counter1 Overflow Interrupt Enable
 | 
			
		||||
 | 
			
		||||
	// TIFR1: Timer/Counter1 Interrupt Flag register
 | 
			
		||||
	TIFR1_ICF1  = 0x20 // Input Capture Flag 1
 | 
			
		||||
	TIFR1_OCF1C = 0x8  // Output Compare Flag 1C
 | 
			
		||||
	TIFR1_OCF1B = 0x4  // Output Compare Flag 1B
 | 
			
		||||
	TIFR1_OCF1A = 0x2  // Output Compare Flag 1A
 | 
			
		||||
	TIFR1_TOV1  = 0x1  // Timer/Counter1 Overflow Flag
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
// Bitfields for PLL: Phase Locked Loop
 | 
			
		||||
const (
 | 
			
		||||
	// PLLCSR: PLL Status and Control register
 | 
			
		||||
	PLLCSR_PLLP  = 0x1c // PLL prescaler Bits
 | 
			
		||||
	PLLCSR_PLLE  = 0x2  // PLL Enable Bit
 | 
			
		||||
	PLLCSR_PLOCK = 0x1  // PLL Lock Status Bit
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
// Bitfields for USB_DEVICE: USB Device Registers
 | 
			
		||||
const (
 | 
			
		||||
	// UPOE: USB Software Output Enable register
 | 
			
		||||
	UPOE_UPWE  = 0xc0 // USB Buffers Direct Drive enable configuration
 | 
			
		||||
	UPOE_UPDRV = 0x30 // USB direct drive values
 | 
			
		||||
	UPOE_DPI   = 0x2  // D+ Input value
 | 
			
		||||
	UPOE_DMI   = 0x1  // D- Input value
 | 
			
		||||
 | 
			
		||||
	// UEINT: USB Endpoint Number Interrupt Register
 | 
			
		||||
	UEINT_EPINT = 0x1f // Byte Count bits
 | 
			
		||||
 | 
			
		||||
	// UEBCLX: USB Endpoint Byte Count Register
 | 
			
		||||
	UEBCLX_BYCT = 0xff // Byte Count bits
 | 
			
		||||
 | 
			
		||||
	// UEDATX: USB Data Endpoint
 | 
			
		||||
	UEDATX_DAT = 0xff // Data bits
 | 
			
		||||
 | 
			
		||||
	// UEIENX: USB Endpoint Interrupt Enable Register
 | 
			
		||||
	UEIENX_FLERRE   = 0x80 // Flow Error Interrupt Enable Flag
 | 
			
		||||
	UEIENX_NAKINE   = 0x40 // NAK IN Interrupt Enable Bit
 | 
			
		||||
	UEIENX_NAKOUTE  = 0x10 // NAK OUT Interrupt Enable Bit
 | 
			
		||||
	UEIENX_RXSTPE   = 0x8  // Received SETUP Interrupt Enable Flag
 | 
			
		||||
	UEIENX_RXOUTE   = 0x4  // Received OUT Data Interrupt Enable Flag
 | 
			
		||||
	UEIENX_STALLEDE = 0x2  // Stalled Interrupt Enable Flag
 | 
			
		||||
	UEIENX_TXINE    = 0x1  // Transmitter Ready Interrupt Enable Flag
 | 
			
		||||
 | 
			
		||||
	// UESTA1X: USB Endpoint Status 1 Register
 | 
			
		||||
	UESTA1X_CTRLDIR = 0x4 // Control Direction
 | 
			
		||||
	UESTA1X_CURRBK  = 0x3 // Current Bank
 | 
			
		||||
 | 
			
		||||
	// UESTA0X: USB Endpoint Status 0 Register
 | 
			
		||||
	UESTA0X_CFGOK   = 0x80 // Configuration Status Flag
 | 
			
		||||
	UESTA0X_OVERFI  = 0x40 // Overflow Error Interrupt Flag
 | 
			
		||||
	UESTA0X_UNDERFI = 0x20 // Underflow Error Interrupt Flag
 | 
			
		||||
	UESTA0X_DTSEQ   = 0xc  // Data Toggle Sequencing Flag
 | 
			
		||||
	UESTA0X_NBUSYBK = 0x3  // Busy Bank Flag
 | 
			
		||||
 | 
			
		||||
	// UECFG1X: USB Endpoint Configuration 1 Register
 | 
			
		||||
	UECFG1X_EPSIZE = 0x70 // Endpoint Size Bits
 | 
			
		||||
	UECFG1X_EPBK   = 0xc  // Endpoint Bank Bits
 | 
			
		||||
	UECFG1X_ALLOC  = 0x2  // Endpoint Allocation Bit
 | 
			
		||||
 | 
			
		||||
	// UECFG0X: USB Endpoint Configuration 0 Register
 | 
			
		||||
	UECFG0X_EPTYPE = 0xc0 // Endpoint Type Bits
 | 
			
		||||
	UECFG0X_EPDIR  = 0x1  // Endpoint Direction Bit
 | 
			
		||||
 | 
			
		||||
	// UECONX: USB Endpoint Control Register
 | 
			
		||||
	UECONX_STALLRQ  = 0x20 // STALL Request Handshake Bit
 | 
			
		||||
	UECONX_STALLRQC = 0x10 // STALL Request Clear Handshake Bit
 | 
			
		||||
	UECONX_RSTDT    = 0x8  // Reset Data Toggle Bit
 | 
			
		||||
	UECONX_EPEN     = 0x1  // Endpoint Enable Bit
 | 
			
		||||
 | 
			
		||||
	// UERST: USB Endpoint Reset Register
 | 
			
		||||
	UERST_EPRST = 0x1f // Endpoint FIFO Reset Bits
 | 
			
		||||
 | 
			
		||||
	// UENUM: USB Endpoint Number
 | 
			
		||||
	UENUM_EPNUM = 0x7 // Endpoint Number bits
 | 
			
		||||
 | 
			
		||||
	// UEINTX: USB Endpoint Interrupt Register
 | 
			
		||||
	UEINTX_FIFOCON  = 0x80 // FIFO Control Bit
 | 
			
		||||
	UEINTX_NAKINI   = 0x40 // NAK IN Received Interrupt Flag
 | 
			
		||||
	UEINTX_RWAL     = 0x20 // Read/Write Allowed Flag
 | 
			
		||||
	UEINTX_NAKOUTI  = 0x10 // NAK OUT Received Interrupt Flag
 | 
			
		||||
	UEINTX_RXSTPI   = 0x8  // Received SETUP Interrupt Flag
 | 
			
		||||
	UEINTX_RXOUTI   = 0x4  // Received OUT Data Interrupt Flag
 | 
			
		||||
	UEINTX_STALLEDI = 0x2  // STALLEDI Interrupt Flag
 | 
			
		||||
	UEINTX_TXINI    = 0x1  // Transmitter Ready Interrupt Flag
 | 
			
		||||
 | 
			
		||||
	// UDMFN: USB Device Micro Frame Number
 | 
			
		||||
	UDMFN_FNCERR = 0x10 // Frame Number CRC Error Flag
 | 
			
		||||
 | 
			
		||||
	// UDFNUML: USB Device Frame Number High Register
 | 
			
		||||
 | 
			
		||||
	// UDFNUMH: USB Device Frame Number High Register
 | 
			
		||||
	UDFNUM_FNUM = 0x7ff // Frame Number Upper Flag
 | 
			
		||||
 | 
			
		||||
	// UDADDR: USB Device Address Register
 | 
			
		||||
	UDADDR_ADDEN = 0x80 // Address Enable Bit
 | 
			
		||||
	UDADDR_UADD  = 0x7f // USB Address Bits
 | 
			
		||||
 | 
			
		||||
	// UDIEN: USB Device Interrupt Enable Register
 | 
			
		||||
	UDIEN_UPRSME  = 0x40 // Upstream Resume Interrupt Enable Bit
 | 
			
		||||
	UDIEN_EORSME  = 0x20 // End Of Resume Interrupt Enable Bit
 | 
			
		||||
	UDIEN_WAKEUPE = 0x10 // Wake-up CPU Interrupt Enable Bit
 | 
			
		||||
	UDIEN_EORSTE  = 0x8  // End Of Reset Interrupt Enable Bit
 | 
			
		||||
	UDIEN_SOFE    = 0x4  // Start Of Frame Interrupt Enable Bit
 | 
			
		||||
	UDIEN_SUSPE   = 0x1  // Suspend Interrupt Enable Bit
 | 
			
		||||
 | 
			
		||||
	// UDINT: USB Device Interrupt Register
 | 
			
		||||
	UDINT_UPRSMI  = 0x40 // Upstream Resume Interrupt Flag
 | 
			
		||||
	UDINT_EORSMI  = 0x20 // End Of Resume Interrupt Flag
 | 
			
		||||
	UDINT_WAKEUPI = 0x10 // Wake-up CPU Interrupt Flag
 | 
			
		||||
	UDINT_EORSTI  = 0x8  // End Of Reset Interrupt Flag
 | 
			
		||||
	UDINT_SOFI    = 0x4  // Start Of Frame Interrupt Flag
 | 
			
		||||
	UDINT_SUSPI   = 0x1  // Suspend Interrupt Flag
 | 
			
		||||
 | 
			
		||||
	// UDCON: USB Device Control Registers
 | 
			
		||||
	UDCON_RSTCPU = 0x4 // USB Reset CPU Bit
 | 
			
		||||
	UDCON_RMWKUP = 0x2 // Remote Wake-up Bit
 | 
			
		||||
	UDCON_DETACH = 0x1 // Detach Bit
 | 
			
		||||
 | 
			
		||||
	// USBCON: USB General Control Register
 | 
			
		||||
	USBCON_USBE   = 0x80 // USB macro Enable Bit
 | 
			
		||||
	USBCON_FRZCLK = 0x20 // Freeze USB Clock Bit
 | 
			
		||||
 | 
			
		||||
	// REGCR: Regulator Control Register
 | 
			
		||||
	REGCR_REGDIS = 0x1 // Regulator Disable
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
// Bitfields for CPU: CPU Registers
 | 
			
		||||
const (
 | 
			
		||||
	// SREG: Status Register
 | 
			
		||||
	SREG_I = 0x80 // Global Interrupt Enable
 | 
			
		||||
	SREG_T = 0x40 // Bit Copy Storage
 | 
			
		||||
	SREG_H = 0x20 // Half Carry Flag
 | 
			
		||||
	SREG_S = 0x10 // Sign Bit
 | 
			
		||||
	SREG_V = 0x8  // Two's Complement Overflow Flag
 | 
			
		||||
	SREG_N = 0x4  // Negative Flag
 | 
			
		||||
	SREG_Z = 0x2  // Zero Flag
 | 
			
		||||
	SREG_C = 0x1  // Carry Flag
 | 
			
		||||
 | 
			
		||||
	// MCUCR: MCU Control Register
 | 
			
		||||
	MCUCR_PUD   = 0x10 // Pull-up disable
 | 
			
		||||
	MCUCR_IVSEL = 0x2  // Interrupt Vector Select
 | 
			
		||||
	MCUCR_IVCE  = 0x1  // Interrupt Vector Change Enable
 | 
			
		||||
 | 
			
		||||
	// MCUSR: MCU Status Register
 | 
			
		||||
	MCUSR_USBRF = 0x20 // USB reset flag
 | 
			
		||||
	MCUSR_WDRF  = 0x8  // Watchdog Reset Flag
 | 
			
		||||
	MCUSR_BORF  = 0x4  // Brown-out Reset Flag
 | 
			
		||||
	MCUSR_EXTRF = 0x2  // External Reset Flag
 | 
			
		||||
	MCUSR_PORF  = 0x1  // Power-on reset flag
 | 
			
		||||
 | 
			
		||||
	// OSCCAL: Oscillator Calibration Value
 | 
			
		||||
	OSCCAL_OSCCAL = 0xff // Oscillator Calibration
 | 
			
		||||
 | 
			
		||||
	// CLKPR
 | 
			
		||||
	CLKPR_CLKPCE = 0x80
 | 
			
		||||
	CLKPR_CLKPS  = 0xf
 | 
			
		||||
 | 
			
		||||
	// SMCR: Sleep Mode Control Register
 | 
			
		||||
	SMCR_SM = 0xe // Sleep Mode Select bits
 | 
			
		||||
	SMCR_SE = 0x1 // Sleep Enable
 | 
			
		||||
 | 
			
		||||
	// GPIOR2: General Purpose IO Register 2
 | 
			
		||||
	GPIOR2_GPIOR = 0xff // General Purpose IO Register 2 bis
 | 
			
		||||
 | 
			
		||||
	// GPIOR1: General Purpose IO Register 1
 | 
			
		||||
	GPIOR1_GPIOR = 0xff // General Purpose IO Register 1 bis
 | 
			
		||||
 | 
			
		||||
	// GPIOR0: General Purpose IO Register 0
 | 
			
		||||
	GPIOR0_GPIOR07 = 0x80 // General Purpose IO Register 0 bit 7
 | 
			
		||||
	GPIOR0_GPIOR06 = 0x40 // General Purpose IO Register 0 bit 6
 | 
			
		||||
	GPIOR0_GPIOR05 = 0x20 // General Purpose IO Register 0 bit 5
 | 
			
		||||
	GPIOR0_GPIOR04 = 0x10 // General Purpose IO Register 0 bit 4
 | 
			
		||||
	GPIOR0_GPIOR03 = 0x8  // General Purpose IO Register 0 bit 3
 | 
			
		||||
	GPIOR0_GPIOR02 = 0x4  // General Purpose IO Register 0 bit 2
 | 
			
		||||
	GPIOR0_GPIOR01 = 0x2  // General Purpose IO Register 0 bit 1
 | 
			
		||||
	GPIOR0_GPIOR00 = 0x1  // General Purpose IO Register 0 bit 0
 | 
			
		||||
 | 
			
		||||
	// PRR1: Power Reduction Register1
 | 
			
		||||
	PRR1_PRUSB    = 0x80 // Power Reduction USB
 | 
			
		||||
	PRR1_PRUSART1 = 0x1  // Power Reduction USART1
 | 
			
		||||
 | 
			
		||||
	// PRR0: Power Reduction Register0
 | 
			
		||||
	PRR0_PRTIM0 = 0x20 // Power Reduction Timer/Counter0
 | 
			
		||||
	PRR0_PRTIM1 = 0x8  // Power Reduction Timer/Counter1
 | 
			
		||||
	PRR0_PRSPI  = 0x4  // Power Reduction Serial Peripheral Interface
 | 
			
		||||
 | 
			
		||||
	// CLKSTA
 | 
			
		||||
	CLKSTA_RCON  = 0x2
 | 
			
		||||
	CLKSTA_EXTON = 0x1
 | 
			
		||||
 | 
			
		||||
	// CLKSEL1
 | 
			
		||||
	CLKSEL1_RCCKSEL = 0xf0
 | 
			
		||||
	CLKSEL1_EXCKSEL = 0xf
 | 
			
		||||
 | 
			
		||||
	// CLKSEL0
 | 
			
		||||
	CLKSEL0_RCSUT = 0xc0
 | 
			
		||||
	CLKSEL0_EXSUT = 0x30
 | 
			
		||||
	CLKSEL0_RCE   = 0x8
 | 
			
		||||
	CLKSEL0_EXTE  = 0x4
 | 
			
		||||
	CLKSEL0_CLKS  = 0x1
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
// Bitfields for EXINT: External Interrupts
 | 
			
		||||
const (
 | 
			
		||||
	// EICRA: External Interrupt Control Register A
 | 
			
		||||
	EICRA_ISC3 = 0xc0 // External Interrupt Sense Control Bit
 | 
			
		||||
	EICRA_ISC2 = 0x30 // External Interrupt Sense Control Bit
 | 
			
		||||
	EICRA_ISC1 = 0xc  // External Interrupt Sense Control Bit
 | 
			
		||||
	EICRA_ISC0 = 0x3  // External Interrupt Sense Control Bit
 | 
			
		||||
 | 
			
		||||
	// EICRB: External Interrupt Control Register B
 | 
			
		||||
	EICRB_ISC7 = 0xc0 // External Interrupt 7-4 Sense Control Bit
 | 
			
		||||
	EICRB_ISC6 = 0x30 // External Interrupt 7-4 Sense Control Bit
 | 
			
		||||
	EICRB_ISC5 = 0xc  // External Interrupt 7-4 Sense Control Bit
 | 
			
		||||
	EICRB_ISC4 = 0x3  // External Interrupt 7-4 Sense Control Bit
 | 
			
		||||
 | 
			
		||||
	// EIMSK: External Interrupt Mask Register
 | 
			
		||||
	EIMSK_INT = 0xff // External Interrupt Request 7 Enable
 | 
			
		||||
 | 
			
		||||
	// EIFR: External Interrupt Flag Register
 | 
			
		||||
	EIFR_INTF = 0xff // External Interrupt Flags
 | 
			
		||||
 | 
			
		||||
	// PCMSK0: Pin Change Mask Register 0
 | 
			
		||||
	PCMSK0_PCINT = 0xff // Pin Change Enable Masks
 | 
			
		||||
 | 
			
		||||
	// PCMSK1: Pin Change Mask Register 1
 | 
			
		||||
	PCMSK1_PCINT = 0x1f
 | 
			
		||||
 | 
			
		||||
	// PCIFR: Pin Change Interrupt Flag Register
 | 
			
		||||
	PCIFR_PCIF = 0x3 // Pin Change Interrupt Flags
 | 
			
		||||
 | 
			
		||||
	// PCICR: Pin Change Interrupt Control Register
 | 
			
		||||
	PCICR_PCIE = 0x3 // Pin Change Interrupt Enables
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
// Bitfields for USART: USART
 | 
			
		||||
const (
 | 
			
		||||
	// UDR1: USART I/O Data Register
 | 
			
		||||
	UDR1_UDR1 = 0xff // USART I/O Data bits
 | 
			
		||||
 | 
			
		||||
	// UCSR1A: USART Control and Status Register A
 | 
			
		||||
	UCSR1A_RXC1  = 0x80 // USART Receive Complete
 | 
			
		||||
	UCSR1A_TXC1  = 0x40 // USART Transmitt Complete
 | 
			
		||||
	UCSR1A_UDRE1 = 0x20 // USART Data Register Empty
 | 
			
		||||
	UCSR1A_FE1   = 0x10 // Framing Error
 | 
			
		||||
	UCSR1A_DOR1  = 0x8  // Data overRun
 | 
			
		||||
	UCSR1A_UPE1  = 0x4  // Parity Error
 | 
			
		||||
	UCSR1A_U2X1  = 0x2  // Double the USART transmission speed
 | 
			
		||||
	UCSR1A_MPCM1 = 0x1  // Multi-processor Communication Mode
 | 
			
		||||
 | 
			
		||||
	// UCSR1B: USART Control and Status Register B
 | 
			
		||||
	UCSR1B_RXCIE1 = 0x80 // RX Complete Interrupt Enable
 | 
			
		||||
	UCSR1B_TXCIE1 = 0x40 // TX Complete Interrupt Enable
 | 
			
		||||
	UCSR1B_UDRIE1 = 0x20 // USART Data register Empty Interrupt Enable
 | 
			
		||||
	UCSR1B_RXEN1  = 0x10 // Receiver Enable
 | 
			
		||||
	UCSR1B_TXEN1  = 0x8  // Transmitter Enable
 | 
			
		||||
	UCSR1B_UCSZ12 = 0x4  // Character Size
 | 
			
		||||
	UCSR1B_RXB81  = 0x2  // Receive Data Bit 8
 | 
			
		||||
	UCSR1B_TXB81  = 0x1  // Transmit Data Bit 8
 | 
			
		||||
 | 
			
		||||
	// UCSR1C: USART Control and Status Register C
 | 
			
		||||
	UCSR1C_UMSEL1 = 0xc0 // USART Mode Select
 | 
			
		||||
	UCSR1C_UPM1   = 0x30 // Parity Mode Bits
 | 
			
		||||
	UCSR1C_USBS1  = 0x8  // Stop Bit Select
 | 
			
		||||
	UCSR1C_UCSZ1  = 0x6  // Character Size
 | 
			
		||||
	UCSR1C_UCPOL1 = 0x1  // Clock Polarity
 | 
			
		||||
 | 
			
		||||
	// UCSR1D: USART Control and Status Register D
 | 
			
		||||
	UCSR1D_CTSEN = 0x2 // CTS Enable
 | 
			
		||||
	UCSR1D_RTSEN = 0x1 // RTS Enable
 | 
			
		||||
 | 
			
		||||
	// UBRR1L: USART Baud Rate Register Bytes
 | 
			
		||||
 | 
			
		||||
	// UBRR1H: USART Baud Rate Register Bytes
 | 
			
		||||
	UBRR1_UBRR1 = 0xfff // USART Baud Rate bits
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
// Bitfields for WDT: Watchdog Timer
 | 
			
		||||
const (
 | 
			
		||||
	// WDTCSR: Watchdog Timer Control Register
 | 
			
		||||
	WDTCSR_WDIF = 0x80 // Watchdog Timeout Interrupt Flag
 | 
			
		||||
	WDTCSR_WDIE = 0x40 // Watchdog Timeout Interrupt Enable
 | 
			
		||||
	WDTCSR_WDP  = 0x27 // Watchdog Timer Prescaler Bits
 | 
			
		||||
	WDTCSR_WDCE = 0x10 // Watchdog Change Enable
 | 
			
		||||
	WDTCSR_WDE  = 0x8  // Watch Dog Enable
 | 
			
		||||
 | 
			
		||||
	// WDTCKD: Watchdog Timer Clock Divider
 | 
			
		||||
	WDTCKD_WDEWIF = 0x8 // Watchdog Early Warning Interrupt Flag
 | 
			
		||||
	WDTCKD_WDEWIE = 0x4 // Watchdog Early Warning Interrupt Enable
 | 
			
		||||
	WDTCKD_WCLKD  = 0x3 // Watchdog Timer Clock Dividers
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
// Bitfields for AC: Analog Comparator
 | 
			
		||||
const (
 | 
			
		||||
	// ACSR: Analog Comparator Control And Status Register
 | 
			
		||||
	ACSR_ACD  = 0x80 // Analog Comparator Disable
 | 
			
		||||
	ACSR_ACBG = 0x40 // Analog Comparator Bandgap Select
 | 
			
		||||
	ACSR_ACO  = 0x20 // Analog Compare Output
 | 
			
		||||
	ACSR_ACI  = 0x10 // Analog Comparator Interrupt Flag
 | 
			
		||||
	ACSR_ACIE = 0x8  // Analog Comparator Interrupt Enable
 | 
			
		||||
	ACSR_ACIC = 0x4  // Analog Comparator Input Capture Enable
 | 
			
		||||
	ACSR_ACIS = 0x3  // Analog Comparator Interrupt Mode Select bits
 | 
			
		||||
 | 
			
		||||
	// ACMUX: Analog Comparator Input Multiplexer
 | 
			
		||||
	ACMUX_CMUX = 0x7 // Analog Comparator Selection Bits
 | 
			
		||||
 | 
			
		||||
	// DIDR1
 | 
			
		||||
	DIDR1_AIN7D = 0x80 // AIN7 Digital Input Disable
 | 
			
		||||
	DIDR1_AIN6D = 0x40 // AIN6 Digital Input Disable
 | 
			
		||||
	DIDR1_AIN5D = 0x20 // AIN5 Digital Input Disable
 | 
			
		||||
	DIDR1_AIN4D = 0x10 // AIN4 Digital Input Disable
 | 
			
		||||
	DIDR1_AIN3D = 0x8  // AIN3 Digital Input Disable
 | 
			
		||||
	DIDR1_AIN2D = 0x4  // AIN2 Digital Input Disable
 | 
			
		||||
	DIDR1_AIN1D = 0x2  // AIN1 Digital Input Disable
 | 
			
		||||
	DIDR1_AIN0D = 0x1  // AIN0 Digital Input Disable
 | 
			
		||||
)
 | 
			
		||||
							
								
								
									
										6
									
								
								src/device/avr/atmega16u2.ld
									
										
									
									
									
										Обычный файл
									
								
							
							
						
						
									
										6
									
								
								src/device/avr/atmega16u2.ld
									
										
									
									
									
										Обычный файл
									
								
							| 
						 | 
				
			
			@ -0,0 +1,6 @@
 | 
			
		|||
/* Automatically generated file. DO NOT EDIT. */
 | 
			
		||||
/* Generated by gen-device.py from ATmega16U2.atdf, see http://packs.download.atmel.com/ */
 | 
			
		||||
 | 
			
		||||
__flash_size = 0x4000;
 | 
			
		||||
__ram_size   = 0x200;
 | 
			
		||||
__num_isrs   = 29;
 | 
			
		||||
							
								
								
									
										1137
									
								
								src/device/avr/atmega16u4.go
									
										
									
									
									
										Обычный файл
									
								
							
							
						
						
									
										1137
									
								
								src/device/avr/atmega16u4.go
									
										
									
									
									
										Обычный файл
									
								
							
										
											
												Различия файлов не показаны, т.к. их слишком много
												Показать различия
											
										
									
								
							
							
								
								
									
										6
									
								
								src/device/avr/atmega16u4.ld
									
										
									
									
									
										Обычный файл
									
								
							
							
						
						
									
										6
									
								
								src/device/avr/atmega16u4.ld
									
										
									
									
									
										Обычный файл
									
								
							| 
						 | 
				
			
			@ -0,0 +1,6 @@
 | 
			
		|||
/* Automatically generated file. DO NOT EDIT. */
 | 
			
		||||
/* Generated by gen-device.py from ATmega16U4.atdf, see http://packs.download.atmel.com/ */
 | 
			
		||||
 | 
			
		||||
__flash_size = 0x4000;
 | 
			
		||||
__ram_size   = 0x500;
 | 
			
		||||
__num_isrs   = 43;
 | 
			
		||||
Показаны не все изменённые файлы, т.к. их слишком много Показать больше
		Загрузка…
	
	Создание таблицы
		
		Сослаться в новой задаче