From 4bbc74adb49299e103859e58ce1c5dc405a4341b Mon Sep 17 00:00:00 2001 From: Mika Tuupola Date: Wed, 19 Oct 2011 22:16:27 +0300 Subject: [PATCH] Add shifting example of two daisy chained 74HC165 PISO registers. --- 74hc165_shiftin/74hc165_daisy.png | Bin 0 -> 123980 bytes 74hc165_shiftin/Makefile | 501 ++++++++++++++++++++++++++ 74hc165_shiftin/digital.h | 29 ++ 74hc165_shiftin/main.c | 104 ++++++ 74hc165_shiftin/main.h | 3 + 74hc165_shiftin/pins.h | 567 ++++++++++++++++++++++++++++++ 74hc165_shiftin/uart.h | 12 + 74hc165_shiftin/uart_async.c | 102 ++++++ 8 files changed, 1318 insertions(+) create mode 100644 74hc165_shiftin/74hc165_daisy.png create mode 100644 74hc165_shiftin/Makefile create mode 100644 74hc165_shiftin/digital.h create mode 100644 74hc165_shiftin/main.c create mode 100644 74hc165_shiftin/main.h create mode 100644 74hc165_shiftin/pins.h create mode 100644 74hc165_shiftin/uart.h create mode 100644 74hc165_shiftin/uart_async.c diff --git a/74hc165_shiftin/74hc165_daisy.png b/74hc165_shiftin/74hc165_daisy.png new file mode 100644 index 0000000000000000000000000000000000000000..9ed248c73717eacb6599d3d702237431f92ef046 GIT binary patch literal 123980 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 literal 0 HcmV?d00001 diff --git a/74hc165_shiftin/Makefile b/74hc165_shiftin/Makefile new file mode 100644 index 0000000..02e1a76 --- /dev/null +++ b/74hc165_shiftin/Makefile @@ -0,0 +1,501 @@ +# ---------------------------------------------------------------------------- +# Makefile based on WinAVR Makefile Template written by Eric B. Weddington, +# Jörg Wunsch, et al. +# +# Adjust F_CPU below to the clock frequency in Mhz of your AVR target +# +# Adjust the size of the uart receive and transmit ringbuffer in bytes using +# defines -DUART_RX_BUFFER_SIZE=128 and -DUART_TX_BUFFER_SIZE=128 in the +# CDEF section below +# +#---------------------------------------------------------------------------- +# On command line: +# +# make all = Make software. +# +# make clean = Clean out built project files. +# +# make coff = Convert ELF to AVR COFF. +# +# make extcoff = Convert ELF to AVR Extended COFF. +# +# make program = Download the hex file to the device, using avrdude. +# Please customize the avrdude settings below first! +# +# make debug = Start either simulavr or avarice as specified for debugging, +# with avr-gdb or avr-insight as the front end for debugging. +# +# make filename.s = Just compile filename.c into the assembler code only. +# +# make filename.i = Create a preprocessed source file for use in submitting +# bug reports to the GCC project. +# +# To rebuild project do "make clean" then "make all". +#---------------------------------------------------------------------------- + + +# MCU name +MCU = atmega328p + +# Processor frequency. +# This will define a symbol, F_CPU, in all source code files equal to the +# processor frequency. You can then use this symbol in your source code to +# calculate timings. Do NOT tack on a 'UL' at the end, this will be done +# automatically to create a 32-bit value in your source code. +F_CPU = 16000000 + +# Output format. (can be srec, ihex, binary) +FORMAT = ihex + +# Target file name (without extension). +TARGET = main + +# List C source files here. (C dependencies are automatically generated.) +SRC = $(TARGET).c uart_async.c + +# List Assembler source files here. +# Make them always end in a capital .S. Files ending in a lowercase .s +# will not be considered source files but generated files (assembler +# output from the compiler), and will be deleted upon "make clean"! +# Even though the DOS/Win* filesystem matches both .s and .S the same, +# it will preserve the spelling of the filenames, and gcc itself does +# care about how the name is spelled on its command-line. +ASRC = + + +# Optimization level, can be [0, 1, 2, 3, s]. +# 0 = turn off optimization. s = optimize for size. +# (Note: 3 is not always the best optimization level. See avr-libc FAQ.) +OPT = s + + +# Debugging format. +# Native formats for AVR-GCC's -g are dwarf-2 [default] or stabs. +# AVR Studio 4.10 requires dwarf-2. +# AVR [Extended] COFF format requires stabs, plus an avr-objcopy run. +DEBUG = dwarf-2 + + +# List any extra directories to look for include files here. +# Each directory must be seperated by a space. +# Use forward slashes for directory separators. +# For a directory that has spaces, enclose it in quotes. +EXTRAINCDIRS = + + +# Compiler flag to set the C Standard level. +# c89 = "ANSI" C +# gnu89 = c89 plus GCC extensions +# c99 = ISO C99 standard (not yet fully implemented) +# gnu99 = c99 plus GCC extensions +CSTANDARD = -std=gnu99 + + +# Place -D or -U options here +CDEFS = -DF_CPU=$(F_CPU)UL + +# uncomment and adapt these line if you want different UART library buffer size +#CDEFS += -DUART_RX_BUFFER_SIZE=128 +#CDEFS += -DUART_TX_BUFFER_SIZE=128 + + +# Place -I options here +CINCS = + + + +#---------------- Compiler Options ---------------- +# -g*: generate debugging information +# -O*: optimization level +# -f...: tuning, see GCC manual and avr-libc documentation +# -Wall...: warning level +# -Wa,...: tell GCC to pass this to the assembler. +# -adhlns...: create assembler listing +CFLAGS = -g$(DEBUG) +CFLAGS += $(CDEFS) $(CINCS) +CFLAGS += -O$(OPT) +CFLAGS += -funsigned-char -funsigned-bitfields -fpack-struct -fshort-enums +CFLAGS += -Wall -Wstrict-prototypes +CFLAGS += -Wa,-adhlns=$(<:.c=.lst) +CFLAGS += $(patsubst %,-I%,$(EXTRAINCDIRS)) +CFLAGS += $(CSTANDARD) + + +#---------------- Assembler Options ---------------- +# -Wa,...: tell GCC to pass this to the assembler. +# -ahlms: create listing +# -gstabs: have the assembler create line number information; note that +# for use in COFF files, additional information about filenames +# and function names needs to be present in the assembler source +# files -- see avr-libc docs [FIXME: not yet described there] +ASFLAGS = -Wa,-adhlns=$(<:.S=.lst),-gstabs + + +#---------------- Library Options ---------------- +# Minimalistic printf version +PRINTF_LIB_MIN = -Wl,-u,vfprintf -lprintf_min + +# Floating point printf version (requires MATH_LIB = -lm below) +PRINTF_LIB_FLOAT = -Wl,-u,vfprintf -lprintf_flt + +# If this is left blank, then it will use the Standard printf version. +PRINTF_LIB = +#PRINTF_LIB = $(PRINTF_LIB_MIN) +#PRINTF_LIB = $(PRINTF_LIB_FLOAT) + + +# Minimalistic scanf version +SCANF_LIB_MIN = -Wl,-u,vfscanf -lscanf_min + +# Floating point + %[ scanf version (requires MATH_LIB = -lm below) +SCANF_LIB_FLOAT = -Wl,-u,vfscanf -lscanf_flt + +# If this is left blank, then it will use the Standard scanf version. +SCANF_LIB = +#SCANF_LIB = $(SCANF_LIB_MIN) +#SCANF_LIB = $(SCANF_LIB_FLOAT) + + +MATH_LIB = -lm + + + +#---------------- External Memory Options ---------------- + +# 64 KB of external RAM, starting after internal RAM (ATmega128!), +# used for variables (.data/.bss) and heap (malloc()). +#EXTMEMOPTS = -Wl,-Tdata=0x801100,--defsym=__heap_end=0x80ffff + +# 64 KB of external RAM, starting after internal RAM (ATmega128!), +# only used for heap (malloc()). +#EXTMEMOPTS = -Wl,--defsym=__heap_start=0x801100,--defsym=__heap_end=0x80ffff + +EXTMEMOPTS = + + + +#---------------- Linker Options ---------------- +# -Wl,...: tell GCC to pass this to linker. +# -Map: create map file +# --cref: add cross reference to map file +LDFLAGS = -Wl,-Map=$(TARGET).map,--cref +LDFLAGS += $(EXTMEMOPTS) +LDFLAGS += $(PRINTF_LIB) $(SCANF_LIB) $(MATH_LIB) + + + +#---------------- Programming Options (avrdude) ---------------- + +# Programming hardware: alf avr910 avrisp bascom bsd +# dt006 pavr picoweb pony-stk200 sp12 stk200 stk500 +# +# Type: avrdude -c ? +# to get a full listing. +# +AVRDUDE_PROGRAMMER = arduino + +# com1 = serial port. Use lpt1 to connect to parallel port. +AVRDUDE_PORT = /dev/tty.usb* # programmer connected to serial device + +AVRDUDE_WRITE_FLASH = -U flash:w:$(TARGET).hex +#AVRDUDE_WRITE_EEPROM = -U eeprom:w:$(TARGET).eep + + +# Uncomment the following if you want avrdude's erase cycle counter. +# Note that this counter needs to be initialized first using -Yn, +# see avrdude manual. +#AVRDUDE_ERASE_COUNTER = -y + +# Uncomment the following if you do /not/ wish a verification to be +# performed after programming the device. +#AVRDUDE_NO_VERIFY = -V + +# Increase verbosity level. Please use this when submitting bug +# reports about avrdude. See +# to submit bug reports. +#AVRDUDE_VERBOSE = -v -v + +AVRDUDE_FLAGS = -p $(MCU) -P $(AVRDUDE_PORT) -c $(AVRDUDE_PROGRAMMER) -b 57600 +AVRDUDE_FLAGS += $(AVRDUDE_NO_VERIFY) +AVRDUDE_FLAGS += $(AVRDUDE_VERBOSE) +AVRDUDE_FLAGS += $(AVRDUDE_ERASE_COUNTER) + + + +#---------------- Debugging Options ---------------- + +# For simulavr only - target MCU frequency. +DEBUG_MFREQ = $(F_CPU) + +# Set the DEBUG_UI to either gdb or insight. +# DEBUG_UI = gdb +DEBUG_UI = insight + +# Set the debugging back-end to either avarice, simulavr. +DEBUG_BACKEND = avarice +#DEBUG_BACKEND = simulavr + +# GDB Init Filename. +GDBINIT_FILE = __avr_gdbinit + +# When using avarice settings for the JTAG +JTAG_DEV = /dev/com1 + +# Debugging port used to communicate between GDB / avarice / simulavr. +DEBUG_PORT = 4242 + +# Debugging host used to communicate between GDB / avarice / simulavr, normally +# just set to localhost unless doing some sort of crazy debugging when +# avarice is running on a different computer. +DEBUG_HOST = localhost + + + +#============================================================================ + + +# Define programs and commands. +SHELL = sh +CC = avr-gcc +OBJCOPY = avr-objcopy +OBJDUMP = avr-objdump +SIZE = avr-size +NM = avr-nm +AVRDUDE = avrdude +REMOVE = rm -f +COPY = cp +WINSHELL = cmd + + +# Define Messages +# English +MSG_ERRORS_NONE = Errors: none +MSG_BEGIN = -------- begin -------- +MSG_END = -------- end -------- +MSG_SIZE_BEFORE = Size before: +MSG_SIZE_AFTER = Size after: +MSG_COFF = Converting to AVR COFF: +MSG_EXTENDED_COFF = Converting to AVR Extended COFF: +MSG_FLASH = Creating load file for Flash: +MSG_EEPROM = Creating load file for EEPROM: +MSG_EXTENDED_LISTING = Creating Extended Listing: +MSG_SYMBOL_TABLE = Creating Symbol Table: +MSG_LINKING = Linking: +MSG_COMPILING = Compiling: +MSG_ASSEMBLING = Assembling: +MSG_CLEANING = Cleaning project: + + + + +# Define all object files. +OBJ = $(SRC:.c=.o) $(ASRC:.S=.o) + +# Define all listing files. +LST = $(SRC:.c=.lst) $(ASRC:.S=.lst) + + +# Compiler flags to generate dependency files. +GENDEPFLAGS = -MD -MP -MF .dep/$(@F).d + + +# Combine all necessary flags and optional flags. +# Add target processor to flags. +ALL_CFLAGS = -mmcu=$(MCU) -I. $(CFLAGS) $(GENDEPFLAGS) +ALL_ASFLAGS = -mmcu=$(MCU) -I. -x assembler-with-cpp $(ASFLAGS) + + + + + +# Default target. +all: begin gccversion sizebefore build sizeafter end + +build: elf hex eep lss sym + +elf: $(TARGET).elf +hex: $(TARGET).hex +eep: $(TARGET).eep +lss: $(TARGET).lss +sym: $(TARGET).sym + + + +# Eye candy. +# AVR Studio 3.x does not check make's exit code but relies on +# the following magic strings to be generated by the compile job. +begin: + @echo + @echo $(MSG_BEGIN) + +end: + @echo $(MSG_END) + @echo + + +# Display size of file. +HEXSIZE = $(SIZE) --target=$(FORMAT) $(TARGET).hex +ELFSIZE = $(SIZE) -A $(TARGET).elf +AVRMEM = avr-mem.sh $(TARGET).elf $(MCU) + +sizebefore: + @if test -f $(TARGET).elf; then echo; echo $(MSG_SIZE_BEFORE); $(ELFSIZE); \ + $(AVRMEM) 2>/dev/null; echo; fi + +sizeafter: + @if test -f $(TARGET).elf; then echo; echo $(MSG_SIZE_AFTER); $(ELFSIZE); \ + $(AVRMEM) 2>/dev/null; echo; fi + + + +# Display compiler version information. +gccversion : + @$(CC) --version + + + +# Program the device. +program: $(TARGET).hex $(TARGET).eep + $(AVRDUDE) $(AVRDUDE_FLAGS) $(AVRDUDE_WRITE_FLASH) $(AVRDUDE_WRITE_EEPROM) + + +# Generate avr-gdb config/init file which does the following: +# define the reset signal, load the target file, connect to target, and set +# a breakpoint at main(). +gdb-config: + @$(REMOVE) $(GDBINIT_FILE) + @echo define reset >> $(GDBINIT_FILE) + @echo SIGNAL SIGHUP >> $(GDBINIT_FILE) + @echo end >> $(GDBINIT_FILE) + @echo file $(TARGET).elf >> $(GDBINIT_FILE) + @echo target remote $(DEBUG_HOST):$(DEBUG_PORT) >> $(GDBINIT_FILE) +ifeq ($(DEBUG_BACKEND),simulavr) + @echo load >> $(GDBINIT_FILE) +endif + @echo break main >> $(GDBINIT_FILE) + +debug: gdb-config $(TARGET).elf +ifeq ($(DEBUG_BACKEND), avarice) + @echo Starting AVaRICE - Press enter when "waiting to connect" message displays. + @$(WINSHELL) /c start avarice --jtag $(JTAG_DEV) --erase --program --file \ + $(TARGET).elf $(DEBUG_HOST):$(DEBUG_PORT) + @$(WINSHELL) /c pause + +else + @$(WINSHELL) /c start simulavr --gdbserver --device $(MCU) --clock-freq \ + $(DEBUG_MFREQ) --port $(DEBUG_PORT) +endif + @$(WINSHELL) /c start avr-$(DEBUG_UI) --command=$(GDBINIT_FILE) + + + + +# Convert ELF to COFF for use in debugging / simulating in AVR Studio or VMLAB. +COFFCONVERT=$(OBJCOPY) --debugging \ +--change-section-address .data-0x800000 \ +--change-section-address .bss-0x800000 \ +--change-section-address .noinit-0x800000 \ +--change-section-address .eeprom-0x810000 + + +coff: $(TARGET).elf + @echo + @echo $(MSG_COFF) $(TARGET).cof + $(COFFCONVERT) -O coff-avr $< $(TARGET).cof + + +extcoff: $(TARGET).elf + @echo + @echo $(MSG_EXTENDED_COFF) $(TARGET).cof + $(COFFCONVERT) -O coff-ext-avr $< $(TARGET).cof + + + +# Create final output files (.hex, .eep) from ELF output file. +%.hex: %.elf + @echo + @echo $(MSG_FLASH) $@ + $(OBJCOPY) -O $(FORMAT) -R .eeprom $< $@ + +%.eep: %.elf + @echo + @echo $(MSG_EEPROM) $@ + -$(OBJCOPY) -j .eeprom --set-section-flags=.eeprom="alloc,load" \ + --change-section-lma .eeprom=0 -O $(FORMAT) $< $@ + +# Create extended listing file from ELF output file. +%.lss: %.elf + @echo + @echo $(MSG_EXTENDED_LISTING) $@ + $(OBJDUMP) -h -S $< > $@ + +# Create a symbol table from ELF output file. +%.sym: %.elf + @echo + @echo $(MSG_SYMBOL_TABLE) $@ + $(NM) -n $< > $@ + + + +# Link: create ELF output file from object files. +.SECONDARY : $(TARGET).elf +.PRECIOUS : $(OBJ) +%.elf: $(OBJ) + @echo + @echo $(MSG_LINKING) $@ + $(CC) $(ALL_CFLAGS) $^ --output $@ $(LDFLAGS) + + +# Compile: create object files from C source files. +%.o : %.c + @echo + @echo $(MSG_COMPILING) $< + $(CC) -c $(ALL_CFLAGS) $< -o $@ + + +# Compile: create assembler files from C source files. +%.s : %.c + $(CC) -S $(ALL_CFLAGS) $< -o $@ + + +# Assemble: create object files from assembler source files. +%.o : %.S + @echo + @echo $(MSG_ASSEMBLING) $< + $(CC) -c $(ALL_ASFLAGS) $< -o $@ + +# Create preprocessed source for use in sending a bug report. +%.i : %.c + $(CC) -E -mmcu=$(MCU) -I. $(CFLAGS) $< -o $@ + + +# Target: clean project. +clean: begin clean_list end + +clean_list : + @echo + @echo $(MSG_CLEANING) + $(REMOVE) $(TARGET).hex + $(REMOVE) $(TARGET).eep + $(REMOVE) $(TARGET).cof + $(REMOVE) $(TARGET).elf + $(REMOVE) $(TARGET).map + $(REMOVE) $(TARGET).sym + $(REMOVE) $(TARGET).lss + $(REMOVE) $(OBJ) + $(REMOVE) $(LST) + $(REMOVE) $(SRC:.c=.s) + $(REMOVE) $(SRC:.c=.d) + $(REMOVE) .dep/* + + + +# Include the dependency files. +-include $(shell mkdir .dep 2>/dev/null) $(wildcard .dep/*) + + +# Listing of phony targets. +.PHONY : all begin finish end sizebefore sizeafter gccversion \ +build elf hex eep lss sym coff extcoff \ +clean clean_list program debug gdb-config + diff --git a/74hc165_shiftin/digital.h b/74hc165_shiftin/digital.h new file mode 100644 index 0000000..a76620c --- /dev/null +++ b/74hc165_shiftin/digital.h @@ -0,0 +1,29 @@ +/* + * digital.h + * + * Lightweight macro implementation of Arduino style pin numbering + * for AVR microprocessors. Because only thing I want to use from + * Arduino libraries is the pin numbering scheme. + * + * This file taken 99% from the excellent ArduinoLite project by + * Shikai Chen . Some minor changes to suite my personal + * coding taste. + * + * http://code.google.com/p/arduino-lite/ + * http://www.csksoft.net/ + * + * Copyright (c) 2010-2011 Shikai Chen + * + * Licensed under the LGPL 2.1 license: + * http://www.opensource.org/licenses/lgpl-2.1.php + */ + +#ifndef DIGITAL_H +#define DIGITAL_H +#include "pins.h" + +#define digital_read(pin) EXPAND_WRAPPER(_D_READ, ARDUINOPIN_TO_PORTID(pin), ARDUINOPIN_TO_PORTMSK(pin) ) +#define digital_read_raw(pin) EXPAND_WRAPPER(_D_READ_RAW, ARDUINOPIN_TO_PORTID(pin), ARDUINOPIN_TO_PORTMSK(pin) ) +#define digital_write(pin, val) D_WRITE_##val(pin) + +#endif /* DIGITAL_H */ \ No newline at end of file diff --git a/74hc165_shiftin/main.c b/74hc165_shiftin/main.c new file mode 100644 index 0000000..4754d99 --- /dev/null +++ b/74hc165_shiftin/main.c @@ -0,0 +1,104 @@ +/* + * Code to read in data from two daisychained 74HC165 PISO shift registers. + * + * The SN74HC165 is an 8-bit parallel-load shift register that, when clocked, + * shift the data toward a serial (QH) output. Parallel-in access to each + * stage is provided by eight individual direct data (A−H) inputs that are + * enabled by a low level at the shift/load (SH/LD) input. The SN74HC165 also + * features a clock-inhibit (CLK INH) function and a complementary serial (QH) + * output. + * + * Clocking is accomplished by a low-to-high transition of the clock (CLK) + * input while SH/LD is held high and CLK INH is held low. The functions of + * CLK and CLK INH are interchangeable. Since a low CLK and a low-to-high + * transition of CLK INH also accomplish clocking, CLK INH should be changed + * to the high level only while CLK is high. Parallel loading is inhibited + * when SH/LD is held high. While SH/LD is low, the parallel inputs to the + * register are enabled independently of the levels of the CLK, CLK INH, or + * serial (SER) input + * + * http://www.datasheetcatalog.org/datasheet2/8/0ue9fx650zw5716zs9zch6ks5uwy.pdf + * + * To compile and upload run: make clean; make; make program; + * + * Copyright 2011 Mika Tuupola + * + * Licensed under the MIT license: + * http://www.opensource.org/licenses/mit-license.php + * + */ + +#include +#include +#include +#include +#include +#include + +#include "main.h" +#include "uart.h" +#include "pins.h" +#include "digital.h" + +#define LATCH 8 /* sh/ld */ +#define CLOCK 12 /* clk */ +#define DATA 13 /* qh */ + +static void init(void) { + pin_mode(LATCH, OUTPUT); + pin_mode(CLOCK, OUTPUT); + pin_mode(DATA, INPUT); +} + +int shiftin(void) { + uint8_t byte = 0; + uint8_t pin_value; + + for(int i=0; i<8; i++) { + pin_value = digital_read(DATA); + byte |= (pin_value << ((8 - 1) - i)); + printf("%d = %d \n", ((8 - 1) - i), pin_value); + + /* Pulse clock input (CP) LOW-HIGH to read next bit. */ + digital_write(CLOCK, LOW); + //_delay_ms(10); + digital_write(CLOCK, HIGH); + } + return byte; +} + + +int main(void) { + + init(); + uart_init(); + stdout = &uart_output; + stdin = &uart_input; + + uint8_t register_value; + + while (1) { + + /* Read in parallel input by setting SH/LD low. */ + digital_write(LATCH, LOW); + //_delay_ms(10); + + /* Freeze data by setting SH/LD high. When SH/LD is high data enters */ + /* to reqisters from SER input and shifts one place to the right */ + /* (Q0 -> Q1 -> Q2, etc.) with each positive-going clock transition. */ + digital_write(LATCH, HIGH); + + /* Read in first 74HC165 data. */ + register_value = shiftin(); + printf("%d \n", register_value); + + /* Read in second 74HC165 data. */ + register_value = shiftin(); + printf("%d \n", register_value); + + _delay_ms(2000); + + } + return 0; + +} diff --git a/74hc165_shiftin/main.h b/74hc165_shiftin/main.h new file mode 100644 index 0000000..d93f813 --- /dev/null +++ b/74hc165_shiftin/main.h @@ -0,0 +1,3 @@ +static void init(void); +int shiftin(void); +int main(void); diff --git a/74hc165_shiftin/pins.h b/74hc165_shiftin/pins.h new file mode 100644 index 0000000..e1afd6a --- /dev/null +++ b/74hc165_shiftin/pins.h @@ -0,0 +1,567 @@ +/* + * pins.h + * + * Lightweight macro implementation of Arduino style pin numbering + * for AVR microprocessors. Because only thing I want to use from + * Arduino libraries is the pin numbering scheme. + * + * This file taken 99% from the excellent ArduinoLite project by + * Shikai Chen . Some minor changes to suite my personal + * coding taste. + * + * http://code.google.com/p/arduino-lite/ + * http://www.csksoft.net/ + * + * Copyright (c) 2010-2011 Shikai Chen + * + * Licensed under the LGPL 2.1 license: + * http://www.opensource.org/licenses/lgpl-2.1.php + */ + +#ifndef PINS_H +#define PINS_H + + +#define HIGH 0x1 +#define LOW 0x0 + +#define INPUT 0x0 +#define OUTPUT 0x1 + +#define ENABLE 0x1 +#define DISABLE 0x0 + +#define ARDUINOPIN_TO_TIMERID(x) TIMER_AT_PIN_##x +#define ARDUINOPIN_TO_TCCRID(x) TCCR_AT_PIN_##x + +#define ARDUINOPIN_TO_PORTID(x) PORT_AT_PIN_##x +#define ARDUINOPIN_TO_PORTMSK(x) PORTMSK_AT_PIN_##x + +#define PORTID_TO_DIR_REG(x) DIR_REG_AT_##x +#define PORTID_TO_OUTPUT_REG(x) OUTPUT_REG_AT_##x +#define PORTID_TO_INPUT_REG(x) INPUT_REG_AT_##x + +#if defined(__AVR_ATmega1280__) + +#define PORT_AT_PIN_0 PortE // PE 0 ** 0 ** USART0_RX +#define PORT_AT_PIN_1 PortE // PE 1 ** 1 ** USART0_TX +#define PORT_AT_PIN_2 PortE // PE 4 ** 2 ** PWM2 +#define PORT_AT_PIN_3 PortE // PE 5 ** 3 ** PWM3 +#define PORT_AT_PIN_4 PortG // PG 5 ** 4 ** PWM4 +#define PORT_AT_PIN_5 PortE // PE 3 ** 5 ** PWM5 +#define PORT_AT_PIN_6 PortH // PH 3 ** 6 ** PWM6 +#define PORT_AT_PIN_7 PortH // PH 4 ** 7 ** PWM7 +#define PORT_AT_PIN_8 PortH // PH 5 ** 8 ** PWM8 +#define PORT_AT_PIN_9 PortH // PH 6 ** 9 ** PWM9 +#define PORT_AT_PIN_10 PortB // PB 4 ** 10 ** PWM10 +#define PORT_AT_PIN_11 PortB // PB 5 ** 11 ** PWM11 +#define PORT_AT_PIN_12 PortB // PB 6 ** 12 ** PWM12 +#define PORT_AT_PIN_13 PortB // PB 7 ** 13 ** PWM13 +#define PORT_AT_PIN_14 PortJ // PJ 1 ** 14 ** USART3_TX +#define PORT_AT_PIN_15 PortJ // PJ 0 ** 15 ** USART3_RX +#define PORT_AT_PIN_16 PortH // PH 1 ** 16 ** USART2_TX +#define PORT_AT_PIN_17 PortH // PH 0 ** 17 ** USART2_RX +#define PORT_AT_PIN_18 PortD // PD 3 ** 18 ** USART1_TX +#define PORT_AT_PIN_19 PortD // PD 2 ** 19 ** USART1_RX +#define PORT_AT_PIN_20 PortD // PD 1 ** 20 ** I2C_SDA +#define PORT_AT_PIN_21 PortD // PD 0 ** 21 ** I2C_SCL +#define PORT_AT_PIN_22 PortA // PA 0 ** 22 ** D22 +#define PORT_AT_PIN_23 PortA // PA 1 ** 23 ** D23 +#define PORT_AT_PIN_24 PortA // PA 2 ** 24 ** D24 +#define PORT_AT_PIN_25 PortA // PA 3 ** 25 ** D25 +#define PORT_AT_PIN_26 PortA // PA 4 ** 26 ** D26 +#define PORT_AT_PIN_27 PortA // PA 5 ** 27 ** D27 +#define PORT_AT_PIN_28 PortA // PA 6 ** 28 ** D28 +#define PORT_AT_PIN_29 PortA // PA 7 ** 29 ** D29 +#define PORT_AT_PIN_30 PortC // PC 7 ** 30 ** D30 +#define PORT_AT_PIN_31 PortC // PC 6 ** 31 ** D31 +#define PORT_AT_PIN_32 PortC // PC 5 ** 32 ** D32 +#define PORT_AT_PIN_33 PortC // PC 4 ** 33 ** D33 +#define PORT_AT_PIN_34 PortC // PC 3 ** 34 ** D34 +#define PORT_AT_PIN_35 PortC // PC 2 ** 35 ** D35 +#define PORT_AT_PIN_36 PortC // PC 1 ** 36 ** D36 +#define PORT_AT_PIN_37 PortC // PC 0 ** 37 ** D37 +#define PORT_AT_PIN_38 PortD // PD 7 ** 38 ** D38 +#define PORT_AT_PIN_39 PortG // PG 2 ** 39 ** D39 +#define PORT_AT_PIN_40 PortG // PG 1 ** 40 ** D40 +#define PORT_AT_PIN_41 PortG // PG 0 ** 41 ** D41 +#define PORT_AT_PIN_42 PortL // PL 7 ** 42 ** D42 +#define PORT_AT_PIN_43 PortL // PL 6 ** 43 ** D43 +#define PORT_AT_PIN_44 PortL // PL 5 ** 44 ** D44 +#define PORT_AT_PIN_45 PortL // PL 4 ** 45 ** D45 +#define PORT_AT_PIN_46 PortL // PL 3 ** 46 ** D46 +#define PORT_AT_PIN_47 PortL // PL 2 ** 47 ** D47 +#define PORT_AT_PIN_48 PortL // PL 1 ** 48 ** D48 +#define PORT_AT_PIN_49 PortL // PL 0 ** 49 ** D49 +#define PORT_AT_PIN_50 PortB // PB 3 ** 50 ** SPI_MISO +#define PORT_AT_PIN_51 PortB // PB 2 ** 51 ** SPI_MOSI +#define PORT_AT_PIN_52 PortB // PB 1 ** 52 ** SPI_SCK +#define PORT_AT_PIN_53 PortB // PB 0 ** 53 ** SPI_SS +#define PORT_AT_PIN_54 PortF // PF 0 ** 54 ** A0 +#define PORT_AT_PIN_55 PortF // PF 1 ** 55 ** A1 +#define PORT_AT_PIN_56 PortF // PF 2 ** 56 ** A2 +#define PORT_AT_PIN_57 PortF // PF 3 ** 57 ** A3 +#define PORT_AT_PIN_58 PortF // PF 4 ** 58 ** A4 +#define PORT_AT_PIN_59 PortF // PF 5 ** 59 ** A5 +#define PORT_AT_PIN_60 PortF // PF 6 ** 60 ** A6 +#define PORT_AT_PIN_61 PortF // PF 7 ** 61 ** A7 +#define PORT_AT_PIN_62 PortK // PK 0 ** 62 ** A8 +#define PORT_AT_PIN_63 PortK // PK 1 ** 63 ** A9 +#define PORT_AT_PIN_64 PortK // PK 2 ** 64 ** A10 +#define PORT_AT_PIN_65 PortK // PK 3 ** 65 ** A11 +#define PORT_AT_PIN_66 PortK // PK 4 ** 66 ** A12 +#define PORT_AT_PIN_67 PortK // PK 5 ** 67 ** A13 +#define PORT_AT_PIN_68 PortK // PK 6 ** 68 ** A14 +#define PORT_AT_PIN_69 PortK // PK 7 ** 69 ** A15 + +#define PORTMSK_AT_PIN_0 _BV( 0 ) // PE 0 ** 0 ** USART0_RX +#define PORTMSK_AT_PIN_1 _BV( 1 ) // PE 1 ** 1 ** USART0_TX +#define PORTMSK_AT_PIN_2 _BV( 4 ) // PE 4 ** 2 ** PWM2 +#define PORTMSK_AT_PIN_3 _BV( 5 ) // PE 5 ** 3 ** PWM3 +#define PORTMSK_AT_PIN_4 _BV( 5 ) // PG 5 ** 4 ** PWM4 +#define PORTMSK_AT_PIN_5 _BV( 3 ) // PE 3 ** 5 ** PWM5 +#define PORTMSK_AT_PIN_6 _BV( 3 ) // PH 3 ** 6 ** PWM6 +#define PORTMSK_AT_PIN_7 _BV( 4 ) // PH 4 ** 7 ** PWM7 +#define PORTMSK_AT_PIN_8 _BV( 5 ) // PH 5 ** 8 ** PWM8 +#define PORTMSK_AT_PIN_9 _BV( 6 ) // PH 6 ** 9 ** PWM9 +#define PORTMSK_AT_PIN_10 _BV( 4 ) // PB 4 ** 10 ** PWM10 +#define PORTMSK_AT_PIN_11 _BV( 5 ) // PB 5 ** 11 ** PWM11 +#define PORTMSK_AT_PIN_12 _BV( 6 ) // PB 6 ** 12 ** PWM12 +#define PORTMSK_AT_PIN_13 _BV( 7 ) // PB 7 ** 13 ** PWM13 +#define PORTMSK_AT_PIN_14 _BV( 1 ) // PJ 1 ** 14 ** USART3_TX +#define PORTMSK_AT_PIN_15 _BV( 0 ) // PJ 0 ** 15 ** USART3_RX +#define PORTMSK_AT_PIN_16 _BV( 1 ) // PH 1 ** 16 ** USART2_TX +#define PORTMSK_AT_PIN_17 _BV( 0 ) // PH 0 ** 17 ** USART2_RX +#define PORTMSK_AT_PIN_18 _BV( 3 ) // PD 3 ** 18 ** USART1_TX +#define PORTMSK_AT_PIN_19 _BV( 2 ) // PD 2 ** 19 ** USART1_RX +#define PORTMSK_AT_PIN_20 _BV( 1 ) // PD 1 ** 20 ** I2C_SDA +#define PORTMSK_AT_PIN_21 _BV( 0 ) // PD 0 ** 21 ** I2C_SCL +#define PORTMSK_AT_PIN_22 _BV( 0 ) // PA 0 ** 22 ** D22 +#define PORTMSK_AT_PIN_23 _BV( 1 ) // PA 1 ** 23 ** D23 +#define PORTMSK_AT_PIN_24 _BV( 2 ) // PA 2 ** 24 ** D24 +#define PORTMSK_AT_PIN_25 _BV( 3 ) // PA 3 ** 25 ** D25 +#define PORTMSK_AT_PIN_26 _BV( 4 ) // PA 4 ** 26 ** D26 +#define PORTMSK_AT_PIN_27 _BV( 5 ) // PA 5 ** 27 ** D27 +#define PORTMSK_AT_PIN_28 _BV( 6 ) // PA 6 ** 28 ** D28 +#define PORTMSK_AT_PIN_29 _BV( 7 ) // PA 7 ** 29 ** D29 +#define PORTMSK_AT_PIN_30 _BV( 7 ) // PC 7 ** 30 ** D30 +#define PORTMSK_AT_PIN_31 _BV( 6 ) // PC 6 ** 31 ** D31 +#define PORTMSK_AT_PIN_32 _BV( 5 ) // PC 5 ** 32 ** D32 +#define PORTMSK_AT_PIN_33 _BV( 4 ) // PC 4 ** 33 ** D33 +#define PORTMSK_AT_PIN_34 _BV( 3 ) // PC 3 ** 34 ** D34 +#define PORTMSK_AT_PIN_35 _BV( 2 ) // PC 2 ** 35 ** D35 +#define PORTMSK_AT_PIN_36 _BV( 1 ) // PC 1 ** 36 ** D36 +#define PORTMSK_AT_PIN_37 _BV( 0 ) // PC 0 ** 37 ** D37 +#define PORTMSK_AT_PIN_38 _BV( 7 ) // PD 7 ** 38 ** D38 +#define PORTMSK_AT_PIN_39 _BV( 2 ) // PG 2 ** 39 ** D39 +#define PORTMSK_AT_PIN_40 _BV( 1 ) // PG 1 ** 40 ** D40 +#define PORTMSK_AT_PIN_41 _BV( 0 ) // PG 0 ** 41 ** D41 +#define PORTMSK_AT_PIN_42 _BV( 7 ) // PL 7 ** 42 ** D42 +#define PORTMSK_AT_PIN_43 _BV( 6 ) // PL 6 ** 43 ** D43 +#define PORTMSK_AT_PIN_44 _BV( 5 ) // PL 5 ** 44 ** D44 +#define PORTMSK_AT_PIN_45 _BV( 4 ) // PL 4 ** 45 ** D45 +#define PORTMSK_AT_PIN_46 _BV( 3 ) // PL 3 ** 46 ** D46 +#define PORTMSK_AT_PIN_47 _BV( 2 ) // PL 2 ** 47 ** D47 +#define PORTMSK_AT_PIN_48 _BV( 1 ) // PL 1 ** 48 ** D48 +#define PORTMSK_AT_PIN_49 _BV( 0 ) // PL 0 ** 49 ** D49 +#define PORTMSK_AT_PIN_50 _BV( 3 ) // PB 3 ** 50 ** SPI_MISO +#define PORTMSK_AT_PIN_51 _BV( 2 ) // PB 2 ** 51 ** SPI_MOSI +#define PORTMSK_AT_PIN_52 _BV( 1 ) // PB 1 ** 52 ** SPI_SCK +#define PORTMSK_AT_PIN_53 _BV( 0 ) // PB 0 ** 53 ** SPI_SS +#define PORTMSK_AT_PIN_54 _BV( 0 ) // PF 0 ** 54 ** A0 +#define PORTMSK_AT_PIN_55 _BV( 1 ) // PF 1 ** 55 ** A1 +#define PORTMSK_AT_PIN_56 _BV( 2 ) // PF 2 ** 56 ** A2 +#define PORTMSK_AT_PIN_57 _BV( 3 ) // PF 3 ** 57 ** A3 +#define PORTMSK_AT_PIN_58 _BV( 4 ) // PF 4 ** 58 ** A4 +#define PORTMSK_AT_PIN_59 _BV( 5 ) // PF 5 ** 59 ** A5 +#define PORTMSK_AT_PIN_60 _BV( 6 ) // PF 6 ** 60 ** A6 +#define PORTMSK_AT_PIN_61 _BV( 7 ) // PF 7 ** 61 ** A7 +#define PORTMSK_AT_PIN_62 _BV( 0 ) // PK 0 ** 62 ** A8 +#define PORTMSK_AT_PIN_63 _BV( 1 ) // PK 1 ** 63 ** A9 +#define PORTMSK_AT_PIN_64 _BV( 2 ) // PK 2 ** 64 ** A10 +#define PORTMSK_AT_PIN_65 _BV( 3 ) // PK 3 ** 65 ** A11 +#define PORTMSK_AT_PIN_66 _BV( 4 ) // PK 4 ** 66 ** A12 +#define PORTMSK_AT_PIN_67 _BV( 5 ) // PK 5 ** 67 ** A13 +#define PORTMSK_AT_PIN_68 _BV( 6 ) // PK 6 ** 68 ** A14 +#define PORTMSK_AT_PIN_69 _BV( 7 ) // PK 7 ** 69 ** A15 + +////////////Arduino pin to Timer Regs mapping +#define TIMER_AT_PIN_2 3B +#define TCCR_AT_PIN_2 TCCR3A + +#define TIMER_AT_PIN_3 3C +#define TCCR_AT_PIN_3 TCCR3A + +#define TIMER_AT_PIN_4 0B +#define TCCR_AT_PIN_4 TCCR0A + +#define TIMER_AT_PIN_5 3A +#define TCCR_AT_PIN_5 TCCR3A + +#define TIMER_AT_PIN_6 4A +#define TCCR_AT_PIN_6 TCCR4A + +#define TIMER_AT_PIN_7 4B +#define TCCR_AT_PIN_7 TCCR4A + +#define TIMER_AT_PIN_8 4C +#define TCCR_AT_PIN_8 TCCR4A + +#define TIMER_AT_PIN_9 2B +#define TCCR_AT_PIN_9 TCCR2A + +#define TIMER_AT_PIN_10 2A +#define TCCR_AT_PIN_10 TCCR2A + +#define TIMER_AT_PIN_11 1A +#define TCCR_AT_PIN_11 TCCR1A + +#define TIMER_AT_PIN_12 1B +#define TCCR_AT_PIN_12 TCCR1A + +#define TIMER_AT_PIN_13 0A +#define TCCR_AT_PIN_13 TCCR0A + +#define TIMER_AT_PIN_44 5C +#define TCCR_AT_PIN_44 TCCR5A + +#define TIMER_AT_PIN_45 5B +#define TCCR_AT_PIN_45 TCCR5A + +#define TIMER_AT_PIN_46 5A +#define TCCR_AT_PIN_46 TCCR5A + + +////////////PORT to DDRX mapping +#define DIR_REG_AT_PortA DDRA +#define DIR_REG_AT_PortB DDRB +#define DIR_REG_AT_PortC DDRC +#define DIR_REG_AT_PortD DDRD +#define DIR_REG_AT_PortE DDRE +#define DIR_REG_AT_PortF DDRF +#define DIR_REG_AT_PortG DDRG +#define DIR_REG_AT_PortH DDRH + +#define DIR_REG_AT_PortJ DDRJ +#define DIR_REG_AT_PortK DDRK +#define DIR_REG_AT_PortL DDRL + +////////////PORT to PORTX mapping +#define OUTPUT_REG_AT_PortA PORTA +#define OUTPUT_REG_AT_PortB PORTB +#define OUTPUT_REG_AT_PortC PORTC +#define OUTPUT_REG_AT_PortD PORTD +#define OUTPUT_REG_AT_PortE PORTE +#define OUTPUT_REG_AT_PortF PORTF +#define OUTPUT_REG_AT_PortG PORTG +#define OUTPUT_REG_AT_PortH PORTH + +#define OUTPUT_REG_AT_PortJ PORTJ +#define OUTPUT_REG_AT_PortK PORTK +#define OUTPUT_REG_AT_PortL PORTL + +////////////PORT to PINX(input regs) mapping +#define INPUT_REG_AT_PortA PINA +#define INPUT_REG_AT_PortB PINB +#define INPUT_REG_AT_PortC PINC +#define INPUT_REG_AT_PortD PIND +#define INPUT_REG_AT_PortE PINE +#define INPUT_REG_AT_PortF PINF +#define INPUT_REG_AT_PortG PING +#define INPUT_REG_AT_PortH PINH + +#define INPUT_REG_AT_PortJ PINJ +#define INPUT_REG_AT_PortK PINK +#define INPUT_REG_AT_PortL PINL + +#else /* not __AVR_ATmega1280__ */ + +#if defined(__AVR_ATtiny2313__) +//no PortC on tiny2313 +//Pin[0-6] -> PortD[0-6] +#define PORT_AT_PIN_0 PortD /* 0 */ +#define PORT_AT_PIN_1 PortD +#define PORT_AT_PIN_2 PortD +#define PORT_AT_PIN_3 PortD +#define PORT_AT_PIN_4 PortD +#define PORT_AT_PIN_5 PortD +#define PORT_AT_PIN_6 PortD + +//Pin[7-14] -> PortB[0-7] +#define PORT_AT_PIN_7 PortB +#define PORT_AT_PIN_8 PortB /* 8 */ +#define PORT_AT_PIN_9 PortB +#define PORT_AT_PIN_10 PortB +#define PORT_AT_PIN_11 PortB +#define PORT_AT_PIN_12 PortB +#define PORT_AT_PIN_13 PortB +#define PORT_AT_PIN_14 PortB + +#elif defined(__AVR_ATtiny26__) + +//Pin[0-6] -> PortD[0-6] +#define PORT_AT_PIN_0 PortB /* 0 */ +#define PORT_AT_PIN_1 PortB +#define PORT_AT_PIN_2 PortB +#define PORT_AT_PIN_3 PortB +#define PORT_AT_PIN_4 PortB +#define PORT_AT_PIN_5 PortB +#define PORT_AT_PIN_6 PortB + + +//D[7-13] and A[0-9] share the same pins on Attiny26 +#define PORT_AT_PIN_7 PortA /* 0 */ +#define PORT_AT_PIN_8 PortA +#define PORT_AT_PIN_9 PortA +#define PORT_AT_PIN_10 PortA +#define PORT_AT_PIN_11 PortA +#define PORT_AT_PIN_12 PortA +#define PORT_AT_PIN_13 PortA + +#else // Atmega8 / Atmegax8 +#define PORT_AT_PIN_0 PortD /* 0 */ +#define PORT_AT_PIN_1 PortD +#define PORT_AT_PIN_2 PortD +#define PORT_AT_PIN_3 PortD +#define PORT_AT_PIN_4 PortD +#define PORT_AT_PIN_5 PortD +#define PORT_AT_PIN_6 PortD +#define PORT_AT_PIN_7 PortD +#define PORT_AT_PIN_8 PortB /* 8 */ +#define PORT_AT_PIN_9 PortB +#define PORT_AT_PIN_10 PortB +#define PORT_AT_PIN_11 PortB +#define PORT_AT_PIN_12 PortB +#define PORT_AT_PIN_13 PortB +#define PORT_AT_PIN_14 PortC /* 14 */ +#define PORT_AT_PIN_15 PortC +#define PORT_AT_PIN_16 PortC +#define PORT_AT_PIN_17 PortC +#define PORT_AT_PIN_18 PortC +#define PORT_AT_PIN_19 PortC + +#define PORT_AT_PIN_20 PortB +#define PORT_AT_PIN_21 PortB +#endif + + +#if defined(__AVR_ATtiny2313__) +#define PORTMSK_AT_PIN_0 _BV(0) +#define PORTMSK_AT_PIN_1 _BV(1) +#define PORTMSK_AT_PIN_2 _BV(2) +#define PORTMSK_AT_PIN_3 _BV(3) +#define PORTMSK_AT_PIN_4 _BV(4) +#define PORTMSK_AT_PIN_5 _BV(5) +#define PORTMSK_AT_PIN_6 _BV(6) +#define PORTMSK_AT_PIN_7 _BV(0) +#define PORTMSK_AT_PIN_8 _BV(1) +#define PORTMSK_AT_PIN_9 _BV(2) +#define PORTMSK_AT_PIN_10 _BV(3) +#define PORTMSK_AT_PIN_11 _BV(4) +#define PORTMSK_AT_PIN_12 _BV(5) +#define PORTMSK_AT_PIN_13 _BV(6) +#define PORTMSK_AT_PIN_14 _BV(7) + +#elif defined(__AVR_ATtiny26__) + +#define PORTMSK_AT_PIN_0 _BV(0) +#define PORTMSK_AT_PIN_1 _BV(1) +#define PORTMSK_AT_PIN_2 _BV(2) +#define PORTMSK_AT_PIN_3 _BV(3) +#define PORTMSK_AT_PIN_4 _BV(4) +#define PORTMSK_AT_PIN_5 _BV(5) +#define PORTMSK_AT_PIN_6 _BV(6) +#define PORTMSK_AT_PIN_7 _BV(0) +#define PORTMSK_AT_PIN_8 _BV(1) +#define PORTMSK_AT_PIN_9 _BV(2) +#define PORTMSK_AT_PIN_10 _BV(3) +#define PORTMSK_AT_PIN_11 _BV(4) +#define PORTMSK_AT_PIN_12 _BV(5) +#define PORTMSK_AT_PIN_13 _BV(6) + +#else //Atmega8/ Atmegax8 +#define PORTMSK_AT_PIN_0 _BV(0) /* 0 port D */ +#define PORTMSK_AT_PIN_1 _BV(1) +#define PORTMSK_AT_PIN_2 _BV(2) +#define PORTMSK_AT_PIN_3 _BV(3) +#define PORTMSK_AT_PIN_4 _BV(4) +#define PORTMSK_AT_PIN_5 _BV(5) +#define PORTMSK_AT_PIN_6 _BV(6) +#define PORTMSK_AT_PIN_7 _BV(7) +#define PORTMSK_AT_PIN_8 _BV(0) /* 8 port B */ +#define PORTMSK_AT_PIN_9 _BV(1) +#define PORTMSK_AT_PIN_10 _BV(2) +#define PORTMSK_AT_PIN_11 _BV(3) +#define PORTMSK_AT_PIN_12 _BV(4) +#define PORTMSK_AT_PIN_13 _BV(5) +#define PORTMSK_AT_PIN_14 _BV(0) /* 14 port C */ +#define PORTMSK_AT_PIN_15 _BV(1) +#define PORTMSK_AT_PIN_16 _BV(2) +#define PORTMSK_AT_PIN_17 _BV(3) +#define PORTMSK_AT_PIN_18 _BV(4) +#define PORTMSK_AT_PIN_19 _BV(5) + +#define PORTMSK_AT_PIN_20 _BV(6) +#define PORTMSK_AT_PIN_21 _BV(7) +#endif +////////////PORT to DDRX mapping +#define DIR_REG_AT_PortA DDRA + +#define DIR_REG_AT_PortB DDRB + +#if defined(__AVR_ATtiny2313__) +//no PortC on tiny2313 +#else +#define DIR_REG_AT_PortC DDRC +#endif + +#define DIR_REG_AT_PortD DDRD + +////////////PORT to PORTX mapping +#define OUTPUT_REG_AT_PortA PORTA +#define OUTPUT_REG_AT_PortB PORTB + +#if defined(__AVR_ATtiny2313__) +//no PortC on tiny2313 +#else +#define OUTPUT_REG_AT_PortC PORTC +#endif + +#define OUTPUT_REG_AT_PortD PORTD + +////////////PORT to PINX(input regs) mapping +#define INPUT_REG_AT_PortA PINA + +#define INPUT_REG_AT_PortB PINB + +#if defined(__AVR_ATtiny2313__) +//no PortC on tiny2313 +#else +#define INPUT_REG_AT_PortC PINC +#endif + +#define INPUT_REG_AT_PortD PIND + + +#if defined(__AVR_ATtiny2313__) + +#define TIMER_AT_PIN_5 0B +#define TCCR_AT_PIN_5 TCCR0A + +#define TIMER_AT_PIN_9 0A +#define TCCR_AT_PIN_9 TCCR0A + +#define TIMER_AT_PIN_10 1A +#define TCCR_AT_PIN_10 TCCR1A + +#define TIMER_AT_PIN_11 1B +#define TCCR_AT_PIN_11 TCCR1A + +#elif defined(__AVR_ATtiny26__) +/* +#define TIMER_AT_PIN_0 1A +#define TCCR_AT_PIN_0 TCCR1A +*/ +#define TIMER_AT_PIN_1 1A +#define TCCR_AT_PIN_1 TCCR1A +/* +#define TIMER_AT_PIN_2 1B +#define TCCR_AT_PIN_2 TCCR1A +*/ +#define TIMER_AT_PIN_3 1B +#define TCCR_AT_PIN_3 TCCR1A + +#else + +#if !defined(__AVR_ATmega8__) //for Atmega48/88/168/328 +#define TIMER_AT_PIN_3 2B +#define TCCR_AT_PIN_3 TCCR2A + +#define TIMER_AT_PIN_5 0B +#define TCCR_AT_PIN_5 TCCR0A + +#define TIMER_AT_PIN_6 0A +#define TCCR_AT_PIN_6 TCCR0A +#endif + +#define TIMER_AT_PIN_9 1A +#define TCCR_AT_PIN_9 TCCR1A + +#define TIMER_AT_PIN_10 1B +#define TCCR_AT_PIN_10 TCCR1A + +#if defined(__AVR_ATmega8__) +#define TIMER_AT_PIN_11 2 +#define TCCR_AT_PIN_11 TCCR2 +#else //for Atmega48/88/168/328 +#define TIMER_AT_PIN_11 2A +#define TCCR_AT_PIN_11 TCCR2A +#endif + +#endif + +#endif + + + +#define MERGE_TO_FUNC(prefix, id) prefix##_##id +#define EXPAND_WRAPPER( NEXTLEVEL, ...) NEXTLEVEL( __VA_ARGS__ ) + + + +#define _PWM_SET(id, val) \ + do{ \ + OCR##id = val; \ + } \ + while(0) + +#define _PWM_ENABLE(TCCR, id) sbi(TCCR, COM##id##1) +#define _PWM_DISABLE(TCCR, id) cbi(TCCR, COM##id##1) + +#define _SET_OUTPUT(port_id, msk) PORTID_TO_DIR_REG(port_id) |= (msk) +#define _SET_INTPUT(port_id, msk) PORTID_TO_DIR_REG(port_id) &= ~(msk) + +#define _D_WRITE_HIGH(port_id, msk) PORTID_TO_OUTPUT_REG(port_id) |= (msk) +#define _D_WRITE_LOW(port_id, msk) PORTID_TO_OUTPUT_REG(port_id) &= ~(msk) + +#define _D_READ_RAW(port_id, msk) ((PORTID_TO_INPUT_REG(port_id)) & (msk)) +#define _D_READ(port_id, msk) (((PORTID_TO_INPUT_REG(port_id)) & (msk)) != 0 ? 1 : 0) + +#define _D_TOGGLE(port_id, msk) PORTID_TO_OUTPUT_REG(port_id) ^= (msk) +/* + * + * NOTICE: for pins at timer0A/0B, + * if the duty cycle to be set equals to zero, using the following code: + * DIGITAL_WRITE(pin, LOW); + * -- or -- + * digitalWrite(pin, LOW); + * The caller should make sure the current pin has been set to OUTPUT mode first + */ + +#define SET_1(pin) SET_OUTPUT(pin) +#define SET_0(pin) SET_INPUT(pin) + +#define SET_0x1(pin) SET_OUTPUT(pin) +#define SET_0x0(pin) SET_INPUT(pin) + +#define D_WRITE_HIGH(pin) EXPAND_WRAPPER(_D_WRITE_HIGH, ARDUINOPIN_TO_PORTID(pin), ARDUINOPIN_TO_PORTMSK(pin) ) +#define D_WRITE_LOW(pin) EXPAND_WRAPPER(_D_WRITE_LOW, ARDUINOPIN_TO_PORTID(pin), ARDUINOPIN_TO_PORTMSK(pin) ) + +#define D_WRITE_1(pin) D_WRITE_HIGH(pin) +#define D_WRITE_0(pin) D_WRITE_LOW(pin) + +#define D_WRITE_0x1(pin) D_WRITE_HIGH(pin) +#define D_WRITE_0x0(pin) D_WRITE_LOW(pin) + +#define D_WRITE_ENABLE(pin) D_WRITE_HIGH(pin) +#define D_WRITE_DISABLE(pin) D_WRITE_LOW(pin) + +#define SET_OUTPUT(pin) EXPAND_WRAPPER(_SET_OUTPUT, ARDUINOPIN_TO_PORTID(pin), ARDUINOPIN_TO_PORTMSK(pin) ) +#define SET_INPUT(pin) EXPAND_WRAPPER(_SET_INTPUT, ARDUINOPIN_TO_PORTID(pin), ARDUINOPIN_TO_PORTMSK(pin) ) + +#define pin_mode(pin, mode) SET_##mode(pin) +#define pin_pullup(pin, val) D_WRITE_##val(pin) +#define pin_toggle(pin) EXPAND_WRAPPER(_D_TOGGLE, ARDUINOPIN_TO_PORTID(pin), ARDUINOPIN_TO_PORTMSK(pin) ) + + +#endif /* PINS_H */ diff --git a/74hc165_shiftin/uart.h b/74hc165_shiftin/uart.h new file mode 100644 index 0000000..20ed356 --- /dev/null +++ b/74hc165_shiftin/uart.h @@ -0,0 +1,12 @@ +int uart_putchar(char c, FILE *stream); +int uart_getchar(FILE *stream); + +void uart_init(void); + +struct rx_ring; +struct tx_ring; + +/* http://www.ermicro.com/blog/?p=325 */ + +FILE uart_output = FDEV_SETUP_STREAM(uart_putchar, NULL, _FDEV_SETUP_WRITE); +FILE uart_input = FDEV_SETUP_STREAM(NULL, uart_getchar, _FDEV_SETUP_READ); diff --git a/74hc165_shiftin/uart_async.c b/74hc165_shiftin/uart_async.c new file mode 100644 index 0000000..e56fa46 --- /dev/null +++ b/74hc165_shiftin/uart_async.c @@ -0,0 +1,102 @@ +/* Based on Atmel Application Note AVR 306 */ + +#include +#include +#include + +#ifndef BAUD +#define BAUD 9600 +#endif +#include + +#ifndef UART_RX_BUFFER_SIZE +#define UART_RX_BUFFER_SIZE 32 +#endif + +#ifndef UART_TX_BUFFER_SIZE +#define UART_TX_BUFFER_SIZE 256 +#endif + +struct tx_ring { + int buffer[UART_TX_BUFFER_SIZE]; + int start; + int end; +}; + +struct rx_ring { + int buffer[UART_RX_BUFFER_SIZE]; + int start; + int end; +}; + +static struct tx_ring tx_buffer; +static struct rx_ring rx_buffer; + +/* http://www.cs.mun.ca/~rod/Winter2007/4723/notes/serial/serial.html */ + +void uart_init(void) { + + tx_buffer.start = 0; + tx_buffer.end = 0; + + rx_buffer.start = 0; + rx_buffer.end = 0; + + UBRR0H = UBRRH_VALUE; + UBRR0L = UBRRL_VALUE; + + UCSR0C = _BV(UCSZ01) | _BV(UCSZ00); /* 8-bit data */ + UCSR0B = _BV(RXEN0) | _BV(TXEN0); /* Enable RX and TX */ + + sei(); +} + +int uart_putchar(char c, FILE *stream) { + if (c == '\n') { + uart_putchar('\r', stream); + } + + int write_pointer = (tx_buffer.end + 1) % UART_TX_BUFFER_SIZE; + + if (write_pointer != tx_buffer.start){ + tx_buffer.buffer[tx_buffer.end] = c; + tx_buffer.end = write_pointer; + + /* Data available. Enable the transmit interrupt for serial port 0. */ + UCSR0B |= _BV(UDRIE0); + } + + return 0; +} + +int uart_getchar(FILE *stream) { + int read_pointer = (rx_buffer.start + 1) % UART_RX_BUFFER_SIZE; + + rx_buffer.start = read_pointer; + return rx_buffer.buffer[read_pointer]; +} + +ISR(USART_RX_vect) { + int write_pointer = (rx_buffer.end + 1) % UART_RX_BUFFER_SIZE; + + /* Add next byte to ringbuffer if it has space available. */ + if (write_pointer != rx_buffer.start){ + rx_buffer.buffer[rx_buffer.end] = UDR0; + rx_buffer.end = write_pointer; + } +} + +ISR(USART_UDRE_vect){ + int read_pointer = (tx_buffer.start + 1) % UART_TX_BUFFER_SIZE; + + /* Transmit next byte if data available in ringbuffer. */ + if (read_pointer != tx_buffer.end) { + UDR0 = tx_buffer.buffer[read_pointer]; + tx_buffer.start = read_pointer; + } else { + /* Nothing to send. Disable the transmit interrupt for serial port 0. */ + UCSR0B &= ~_BV(UDRIE0); + } +} + +