Removed outdated AVR32 demo.
parent
d09fcd3abe
commit
1b2d31eac4
@ -1,618 +0,0 @@
|
||||
# Hey Emacs, this is a -*- makefile -*-
|
||||
|
||||
# Goals available on make command line:
|
||||
#
|
||||
# [all] Default goal: build the project.
|
||||
# clean Clean up the project.
|
||||
# rebuild Rebuild the project.
|
||||
# ccversion Display CC version information.
|
||||
# cppfiles file.i Generate preprocessed files from C source files.
|
||||
# asfiles file.x Generate preprocessed assembler files from C and assembler source files.
|
||||
# objfiles file.o Generate object files from C and assembler source files.
|
||||
# a file.a Archive: create A output file from object files.
|
||||
# elf file.elf Link: create ELF output file from object files.
|
||||
# lss file.lss Create extended listing from target output file.
|
||||
# sym file.sym Create symbol table from target output file.
|
||||
# hex file.hex Create Intel HEX image from ELF output file.
|
||||
# bin file.bin Create binary image from ELF output file.
|
||||
# sizes Display target size information.
|
||||
# isp Use ISP instead of JTAGICE mkII when programming.
|
||||
# cpuinfo Get CPU information.
|
||||
# halt Stop CPU execution.
|
||||
# chiperase Perform a JTAG Chip Erase command.
|
||||
# erase Perform a flash chip erase.
|
||||
# program Program MCU memory from ELF output file.
|
||||
# secureflash Protect chip by setting security bit.
|
||||
# reset Reset MCU.
|
||||
# debug Open a debug connection with the MCU.
|
||||
# run Start CPU execution.
|
||||
# readregs Read CPU registers.
|
||||
# doc Build the documentation.
|
||||
# cleandoc Clean up the documentation.
|
||||
# rebuilddoc Rebuild the documentation.
|
||||
# verbose Display main executed commands.
|
||||
|
||||
# Copyright (c) 2007, Atmel Corporation All rights reserved.
|
||||
#
|
||||
# Redistribution and use in source and binary forms, with or without
|
||||
# modification, are permitted provided that the following conditions are met:
|
||||
#
|
||||
# 1. Redistributions of source code must retain the above copyright notice, this
|
||||
# list of conditions and the following disclaimer.
|
||||
#
|
||||
# 2. Redistributions in binary form must reproduce the above copyright notice,
|
||||
# this list of conditions and the following disclaimer in the documentation and/
|
||||
# or other materials provided with the distribution.
|
||||
#
|
||||
# 3. The name of ATMEL may not be used to endorse or promote products derived
|
||||
# from this software without specific prior written permission.
|
||||
#
|
||||
# THIS SOFTWARE IS PROVIDED BY ATMEL ``AS IS'' AND ANY EXPRESS OR IMPLIED
|
||||
# WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
|
||||
# MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE EXPRESSLY AND
|
||||
# SPECIFICALLY DISCLAIMED. IN NO EVENT SHALL ATMEL BE LIABLE FOR ANY DIRECT,
|
||||
# INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
|
||||
# BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
|
||||
# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
|
||||
# OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
|
||||
# NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
|
||||
# EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||
|
||||
|
||||
# ** ** ** *** ** ** ** ** ** ** ** ** ** ** **
|
||||
# ENVIRONMENT SETTINGS
|
||||
# ** ** ** *** ** ** ** ** ** ** ** ** ** ** **
|
||||
|
||||
FirstWord = $(if $(1),$(word 1,$(1)))
|
||||
LastWord = $(if $(1),$(word $(words $(1)),$(1)))
|
||||
|
||||
MAKE = make
|
||||
MAKECFG = config.mk
|
||||
TGTTYPE = $(suffix $(TARGET))
|
||||
|
||||
RM = rm -Rf
|
||||
|
||||
AR = avr32-ar
|
||||
ARFLAGS = rcs
|
||||
|
||||
CPP = $(CC) -E
|
||||
CPPFLAGS = -march=$(ARCH) -mpart=$(PART) $(WARNINGS) $(DEFS) \
|
||||
$(PLATFORM_INC_PATH:%=-I%) $(INC_PATH:%=-I%) $(CPP_EXTRA_FLAGS)
|
||||
DPNDFILES = $(CSRCS:.c=.d) $(ASSRCS:.S=.d)
|
||||
CPPFILES = $(CSRCS:.c=.i)
|
||||
|
||||
CC = avr32-gcc
|
||||
CFLAGS = $(DEBUG) $(OPTIMIZATION) $(C_EXTRA_FLAGS) \
|
||||
$(PLATFORM_INC_PATH:%=-Wa,-I%) $(INC_PATH:%=-Wa,-I%) $(AS_EXTRA_FLAGS)
|
||||
ASFILES = $(CSRCS:.c=.x) $(ASSRCS:.S=.x)
|
||||
|
||||
AS = avr32-as
|
||||
ASFLAGS = $(DEBUG) \
|
||||
$(PLATFORM_INC_PATH:%=-Wa,-I%) $(INC_PATH:%=-Wa,-I%) $(AS_EXTRA_FLAGS)
|
||||
OBJFILES = $(CSRCS:.c=.o) $(ASSRCS:.S=.o)
|
||||
|
||||
LD = avr32-ld
|
||||
LDFLAGS = -march=$(ARCH) -mpart=$(PART) \
|
||||
$(LIB_PATH:%=-L%) $(LINKER_SCRIPT:%=-T%) $(LD_EXTRA_FLAGS)
|
||||
LOADLIBES =
|
||||
LDLIBS = $(LIBS:%=-l%)
|
||||
|
||||
OBJDUMP = avr32-objdump
|
||||
LSS = $(TARGET:$(TGTTYPE)=.lss)
|
||||
|
||||
NM = avr32-nm
|
||||
SYM = $(TARGET:$(TGTTYPE)=.sym)
|
||||
|
||||
OBJCOPY = avr32-objcopy
|
||||
HEX = $(TARGET:$(TGTTYPE)=.hex)
|
||||
BIN = $(TARGET:$(TGTTYPE)=.bin)
|
||||
|
||||
SIZE = avr32-size
|
||||
|
||||
SLEEP = sleep
|
||||
SLEEPUSB = 9
|
||||
|
||||
PROGRAM = avr32program
|
||||
|
||||
ISP = batchisp
|
||||
ISPFLAGS = -device at32$(PART) -hardware usb -operation
|
||||
|
||||
DBGPROXY = avr32gdbproxy
|
||||
|
||||
DOCGEN = doxygen
|
||||
|
||||
|
||||
# ** ** ** *** ** ** ** ** ** ** ** ** ** ** **
|
||||
# MESSAGES
|
||||
# ** ** ** *** ** ** ** ** ** ** ** ** ** ** **
|
||||
|
||||
ERR_TARGET_TYPE = Target type not supported: `$(TGTTYPE)'
|
||||
MSG_CLEANING = Cleaning project.
|
||||
MSG_PREPROCESSING = Preprocessing \`$<\' to \`$@\'.
|
||||
MSG_COMPILING = Compiling \`$<\' to \`$@\'.
|
||||
MSG_ASSEMBLING = Assembling \`$<\' to \`$@\'.
|
||||
MSG_ARCHIVING = Archiving to \`$@\'.
|
||||
MSG_LINKING = Linking to \`$@\'.
|
||||
MSG_EXTENDED_LISTING = Creating extended listing to \`$@\'.
|
||||
MSG_SYMBOL_TABLE = Creating symbol table to \`$@\'.
|
||||
MSG_IHEX_IMAGE = Creating Intel HEX image to \`$@\'.
|
||||
MSG_BINARY_IMAGE = Creating binary image to \`$@\'.
|
||||
MSG_GETTING_CPU_INFO = Getting CPU information.
|
||||
MSG_HALTING = Stopping CPU execution.
|
||||
MSG_ERASING_CHIP = Performing a JTAG Chip Erase command.
|
||||
MSG_ERASING = Performing a flash chip erase.
|
||||
MSG_PROGRAMMING = Programming MCU memory from \`$(TARGET)\'.
|
||||
MSG_SECURING_FLASH = Protecting chip by setting security bit.
|
||||
MSG_RESETTING = Resetting MCU.
|
||||
MSG_DEBUGGING = Opening debug connection with MCU.
|
||||
MSG_RUNNING = Starting CPU execution.
|
||||
MSG_READING_CPU_REGS = Reading CPU registers.
|
||||
MSG_CLEANING_DOC = Cleaning documentation.
|
||||
MSG_GENERATING_DOC = Generating documentation to \`$(DOC_PATH)\'.
|
||||
|
||||
|
||||
# ** ** ** *** ** ** ** ** ** ** ** ** ** ** **
|
||||
# MAKE RULES
|
||||
# ** ** ** *** ** ** ** ** ** ** ** ** ** ** **
|
||||
|
||||
# Include the make configuration file.
|
||||
include $(MAKECFG)
|
||||
|
||||
# ** ** TOP-LEVEL RULES ** **
|
||||
|
||||
# Default goal: build the project.
|
||||
ifeq ($(TGTTYPE),.a)
|
||||
.PHONY: all
|
||||
all: ccversion a lss sym sizes
|
||||
else
|
||||
ifeq ($(TGTTYPE),.elf)
|
||||
.PHONY: all
|
||||
all: ccversion elf lss sym hex bin sizes
|
||||
else
|
||||
$(error $(ERR_TARGET_TYPE))
|
||||
endif
|
||||
endif
|
||||
|
||||
# Clean up the project.
|
||||
.PHONY: clean
|
||||
clean:
|
||||
@echo $(MSG_CLEANING)
|
||||
-$(VERBOSE_CMD)$(RM) $(BIN)
|
||||
-$(VERBOSE_CMD)$(RM) $(HEX)
|
||||
-$(VERBOSE_CMD)$(RM) $(SYM)
|
||||
-$(VERBOSE_CMD)$(RM) $(LSS)
|
||||
-$(VERBOSE_CMD)$(RM) $(TARGET)
|
||||
-$(VERBOSE_CMD)$(RM) $(OBJFILES)
|
||||
-$(VERBOSE_CMD)$(RM) $(ASFILES)
|
||||
-$(VERBOSE_CMD)$(RM) $(CPPFILES)
|
||||
-$(VERBOSE_CMD)$(RM) $(DPNDFILES)
|
||||
$(VERBOSE_NL)
|
||||
|
||||
# Rebuild the project.
|
||||
.PHONY: rebuild
|
||||
rebuild: clean all
|
||||
|
||||
# Display CC version information.
|
||||
.PHONY: ccversion
|
||||
ccversion:
|
||||
@echo
|
||||
@echo
|
||||
@$(CC) --version
|
||||
|
||||
# Generate preprocessed files from C source files.
|
||||
.PHONY: cppfiles
|
||||
cppfiles: $(CPPFILES)
|
||||
|
||||
# Generate preprocessed assembler files from C and assembler source files.
|
||||
.PHONY: asfiles
|
||||
asfiles: $(ASFILES)
|
||||
|
||||
# Generate object files from C and assembler source files.
|
||||
.PHONY: objfiles
|
||||
objfiles: $(OBJFILES)
|
||||
|
||||
ifeq ($(TGTTYPE),.a)
|
||||
# Archive: create A output file from object files.
|
||||
.PHONY: a
|
||||
a: $(TARGET)
|
||||
else
|
||||
ifeq ($(TGTTYPE),.elf)
|
||||
# Link: create ELF output file from object files.
|
||||
.PHONY: elf
|
||||
elf: $(TARGET)
|
||||
endif
|
||||
endif
|
||||
|
||||
# Create extended listing from target output file.
|
||||
.PHONY: lss
|
||||
lss: $(LSS)
|
||||
|
||||
# Create symbol table from target output file.
|
||||
.PHONY: sym
|
||||
sym: $(SYM)
|
||||
|
||||
ifeq ($(TGTTYPE),.elf)
|
||||
|
||||
# Create Intel HEX image from ELF output file.
|
||||
.PHONY: hex
|
||||
hex: $(HEX)
|
||||
|
||||
# Create binary image from ELF output file.
|
||||
.PHONY: bin
|
||||
bin: $(BIN)
|
||||
|
||||
endif
|
||||
|
||||
# Display target size information.
|
||||
.PHONY: sizes
|
||||
sizes: $(TARGET)
|
||||
@echo
|
||||
@echo
|
||||
ifeq ($(TGTTYPE),.a)
|
||||
@$(SIZE) -Bxt $<
|
||||
else
|
||||
ifeq ($(TGTTYPE),.elf)
|
||||
@$(SIZE) -Ax $<
|
||||
@$(SIZE) -Bx $<
|
||||
endif
|
||||
endif
|
||||
@echo
|
||||
@echo
|
||||
|
||||
ifeq ($(TGTTYPE),.elf)
|
||||
|
||||
# Use ISP instead of JTAGICE mkII when programming.
|
||||
.PHONY: isp
|
||||
ifeq ($(filter-out isp verbose,$(MAKECMDGOALS)),)
|
||||
isp: all
|
||||
else
|
||||
isp:
|
||||
@:
|
||||
endif
|
||||
|
||||
ifeq ($(findstring isp,$(MAKECMDGOALS)),)
|
||||
|
||||
# Get CPU information.
|
||||
.PHONY: cpuinfo
|
||||
cpuinfo:
|
||||
@echo
|
||||
@echo $(MSG_GETTING_CPU_INFO)
|
||||
$(VERBOSE_CMD)$(PROGRAM) cpuinfo
|
||||
ifneq ($(call LastWord,$(filter cpuinfo chiperase erase program secureflash reset debug run readregs,$(MAKECMDGOALS))),cpuinfo)
|
||||
@$(SLEEP) $(SLEEPUSB)
|
||||
else
|
||||
@echo
|
||||
endif
|
||||
|
||||
# Stop CPU execution.
|
||||
.PHONY: halt
|
||||
halt:
|
||||
ifeq ($(filter cpuinfo chiperase erase program secureflash reset run readregs,$(MAKECMDGOALS)),)
|
||||
@echo
|
||||
@echo $(MSG_HALTING)
|
||||
$(VERBOSE_CMD)$(PROGRAM) halt
|
||||
ifneq ($(call LastWord,$(filter halt debug,$(MAKECMDGOALS))),halt)
|
||||
@$(SLEEP) $(SLEEPUSB)
|
||||
else
|
||||
@echo
|
||||
endif
|
||||
else
|
||||
@:
|
||||
endif
|
||||
|
||||
# Perform a JTAG Chip Erase command.
|
||||
.PHONY: chiperase
|
||||
chiperase:
|
||||
@echo
|
||||
@echo $(MSG_ERASING_CHIP)
|
||||
$(VERBOSE_CMD)$(PROGRAM) chiperase
|
||||
ifneq ($(call LastWord,$(filter cpuinfo chiperase program secureflash reset debug run readregs,$(MAKECMDGOALS))),chiperase)
|
||||
@$(SLEEP) $(SLEEPUSB)
|
||||
else
|
||||
@echo
|
||||
endif
|
||||
|
||||
# Perform a flash chip erase.
|
||||
.PHONY: erase
|
||||
erase:
|
||||
ifeq ($(filter chiperase program,$(MAKECMDGOALS)),)
|
||||
@echo
|
||||
@echo $(MSG_ERASING)
|
||||
$(VERBOSE_CMD)$(PROGRAM) erase $(FLASH:%=-f%)
|
||||
ifneq ($(call LastWord,$(filter cpuinfo erase secureflash reset debug run readregs,$(MAKECMDGOALS))),erase)
|
||||
@$(SLEEP) $(SLEEPUSB)
|
||||
else
|
||||
@echo
|
||||
endif
|
||||
else
|
||||
@:
|
||||
endif
|
||||
|
||||
# Program MCU memory from ELF output file.
|
||||
.PHONY: program
|
||||
program: all
|
||||
@echo
|
||||
@echo $(MSG_PROGRAMMING)
|
||||
$(VERBOSE_CMD)$(PROGRAM) program $(FLASH:%=-f%) $(PROG_CLOCK:%=-c%) -e -v -R $(if $(findstring run,$(MAKECMDGOALS)),-r) $(TARGET)
|
||||
ifneq ($(call LastWord,$(filter cpuinfo chiperase program secureflash debug readregs,$(MAKECMDGOALS))),program)
|
||||
@$(SLEEP) $(SLEEPUSB)
|
||||
else
|
||||
@echo
|
||||
endif
|
||||
|
||||
# Protect chip by setting security bit.
|
||||
.PHONY: secureflash
|
||||
secureflash:
|
||||
@echo
|
||||
@echo $(MSG_SECURING_FLASH)
|
||||
$(VERBOSE_CMD)$(PROGRAM) secureflash
|
||||
ifneq ($(call LastWord,$(filter cpuinfo chiperase erase program secureflash reset debug run readregs,$(MAKECMDGOALS))),secureflash)
|
||||
@$(SLEEP) $(SLEEPUSB)
|
||||
else
|
||||
@echo
|
||||
endif
|
||||
|
||||
# Reset MCU.
|
||||
.PHONY: reset
|
||||
reset:
|
||||
ifeq ($(filter program run,$(MAKECMDGOALS)),)
|
||||
@echo
|
||||
@echo $(MSG_RESETTING)
|
||||
$(VERBOSE_CMD)$(PROGRAM) reset
|
||||
ifneq ($(call LastWord,$(filter cpuinfo chiperase erase secureflash reset debug readregs,$(MAKECMDGOALS))),reset)
|
||||
@$(SLEEP) $(SLEEPUSB)
|
||||
else
|
||||
@echo
|
||||
endif
|
||||
else
|
||||
@:
|
||||
endif
|
||||
|
||||
# Open a debug connection with the MCU.
|
||||
.PHONY: debug
|
||||
debug:
|
||||
@echo
|
||||
@echo $(MSG_DEBUGGING)
|
||||
$(VERBOSE_CMD)$(DBGPROXY) $(FLASH:%=-f%)
|
||||
ifneq ($(call LastWord,$(filter cpuinfo halt chiperase erase program secureflash reset debug run readregs,$(MAKECMDGOALS))),debug)
|
||||
@$(SLEEP) $(SLEEPUSB)
|
||||
else
|
||||
@echo
|
||||
endif
|
||||
|
||||
# Start CPU execution.
|
||||
.PHONY: run
|
||||
run:
|
||||
ifeq ($(findstring program,$(MAKECMDGOALS)),)
|
||||
@echo
|
||||
@echo $(MSG_RUNNING)
|
||||
$(VERBOSE_CMD)$(PROGRAM) run $(if $(findstring reset,$(MAKECMDGOALS)),-R)
|
||||
ifneq ($(call LastWord,$(filter cpuinfo chiperase erase secureflash debug run readregs,$(MAKECMDGOALS))),run)
|
||||
@$(SLEEP) $(SLEEPUSB)
|
||||
else
|
||||
@echo
|
||||
endif
|
||||
else
|
||||
@:
|
||||
endif
|
||||
|
||||
# Read CPU registers.
|
||||
.PHONY: readregs
|
||||
readregs:
|
||||
@echo
|
||||
@echo $(MSG_READING_CPU_REGS)
|
||||
$(VERBOSE_CMD)$(PROGRAM) readregs
|
||||
ifneq ($(call LastWord,$(filter cpuinfo chiperase erase program secureflash reset debug run readregs,$(MAKECMDGOALS))),readregs)
|
||||
@$(SLEEP) $(SLEEPUSB)
|
||||
else
|
||||
@echo
|
||||
endif
|
||||
|
||||
else
|
||||
|
||||
# Perform a flash chip erase.
|
||||
.PHONY: erase
|
||||
erase:
|
||||
ifeq ($(findstring program,$(MAKECMDGOALS)),)
|
||||
@echo
|
||||
@echo $(MSG_ERASING)
|
||||
$(VERBOSE_CMD)$(ISP) $(ISPFLAGS) erase f memory flash blankcheck
|
||||
ifeq ($(call LastWord,$(filter erase secureflash debug run,$(MAKECMDGOALS))),erase)
|
||||
@echo
|
||||
endif
|
||||
else
|
||||
@:
|
||||
endif
|
||||
|
||||
# Program MCU memory from ELF output file.
|
||||
.PHONY: program
|
||||
program: all
|
||||
@echo
|
||||
@echo $(MSG_PROGRAMMING)
|
||||
$(VERBOSE_CMD)$(ISP) $(ISPFLAGS) erase f memory flash blankcheck loadbuffer $(TARGET) program verify $(if $(findstring run,$(MAKECMDGOALS)),$(if $(findstring secureflash,$(MAKECMDGOALS)),,start $(if $(findstring reset,$(MAKECMDGOALS)),,no)reset 0))
|
||||
ifeq ($(call LastWord,$(filter program secureflash debug,$(MAKECMDGOALS))),program)
|
||||
@echo
|
||||
endif
|
||||
|
||||
# Protect chip by setting security bit.
|
||||
.PHONY: secureflash
|
||||
secureflash:
|
||||
@echo
|
||||
@echo $(MSG_SECURING_FLASH)
|
||||
$(VERBOSE_CMD)$(ISP) $(ISPFLAGS) memory security addrange 0x0 0x0 fillbuffer 0x01 program $(if $(findstring run,$(MAKECMDGOALS)),start $(if $(findstring reset,$(MAKECMDGOALS)),,no)reset 0)
|
||||
ifeq ($(call LastWord,$(filter erase program secureflash debug,$(MAKECMDGOALS))),secureflash)
|
||||
@echo
|
||||
endif
|
||||
|
||||
# Reset MCU.
|
||||
.PHONY: reset
|
||||
reset:
|
||||
@:
|
||||
|
||||
# Open a debug connection with the MCU.
|
||||
.PHONY: debug
|
||||
debug:
|
||||
@echo
|
||||
@echo $(MSG_DEBUGGING)
|
||||
$(VERBOSE_CMD)$(DBGPROXY) $(FLASH:%=-f%)
|
||||
ifeq ($(call LastWord,$(filter erase program secureflash debug run,$(MAKECMDGOALS))),debug)
|
||||
@echo
|
||||
endif
|
||||
|
||||
# Start CPU execution.
|
||||
.PHONY: run
|
||||
run:
|
||||
ifeq ($(filter program secureflash,$(MAKECMDGOALS)),)
|
||||
@echo
|
||||
@echo $(MSG_RUNNING)
|
||||
$(VERBOSE_CMD)$(ISP) $(ISPFLAGS) start $(if $(findstring reset,$(MAKECMDGOALS)),,no)reset 0
|
||||
ifeq ($(call LastWord,$(filter erase debug run,$(MAKECMDGOALS))),run)
|
||||
@echo
|
||||
endif
|
||||
else
|
||||
@:
|
||||
endif
|
||||
|
||||
endif
|
||||
|
||||
endif
|
||||
|
||||
# Build the documentation.
|
||||
.PHONY: doc
|
||||
doc:
|
||||
@echo
|
||||
@echo $(MSG_GENERATING_DOC)
|
||||
$(VERBOSE_CMD)cd $(dir $(DOC_CFG)) && $(DOCGEN) $(notdir $(DOC_CFG))
|
||||
@echo
|
||||
|
||||
# Clean up the documentation.
|
||||
.PHONY: cleandoc
|
||||
cleandoc:
|
||||
@echo $(MSG_CLEANING_DOC)
|
||||
-$(VERBOSE_CMD)$(RM) $(DOC_PATH)
|
||||
$(VERBOSE_NL)
|
||||
|
||||
# Rebuild the documentation.
|
||||
.PHONY: rebuilddoc
|
||||
rebuilddoc: cleandoc doc
|
||||
|
||||
# Display main executed commands.
|
||||
.PHONY: verbose
|
||||
ifeq ($(filter-out isp verbose,$(MAKECMDGOALS)),)
|
||||
verbose: all
|
||||
else
|
||||
verbose:
|
||||
@:
|
||||
endif
|
||||
ifneq ($(findstring verbose,$(MAKECMDGOALS)),)
|
||||
# Prefix displaying the following command if and only if verbose is a goal.
|
||||
VERBOSE_CMD =
|
||||
# New line displayed if and only if verbose is a goal.
|
||||
VERBOSE_NL = @echo
|
||||
else
|
||||
VERBOSE_CMD = @
|
||||
VERBOSE_NL =
|
||||
endif
|
||||
|
||||
# ** ** COMPILATION RULES ** **
|
||||
|
||||
# Include silently the dependency files.
|
||||
-include $(DPNDFILES)
|
||||
|
||||
# The dependency files are not built alone but along with first generation files.
|
||||
$(DPNDFILES):
|
||||
|
||||
# First generation files depend on make files.
|
||||
$(CPPFILES) $(ASFILES) $(OBJFILES): Makefile $(MAKECFG)
|
||||
|
||||
ifeq ($(TGTTYPE),.elf)
|
||||
# Files resulting from linking depend on linker script.
|
||||
$(TARGET): $(LINKER_SCRIPT)
|
||||
endif
|
||||
|
||||
# Preprocess: create preprocessed files from C source files.
|
||||
%.i: %.c %.d
|
||||
@echo $(MSG_PREPROCESSING)
|
||||
$(VERBOSE_CMD)$(CPP) $(CPPFLAGS) -MD -MP -MT '$*.i $*.x $*.o' -o $@ $<
|
||||
@touch $*.d
|
||||
@touch $@
|
||||
$(VERBOSE_NL)
|
||||
|
||||
# Preprocess & compile: create assembler files from C source files.
|
||||
%.x: %.c %.d
|
||||
@echo $(MSG_COMPILING)
|
||||
$(VERBOSE_CMD)$(CC) -S $(CPPFLAGS) -MD -MP -MT '$*.i $*.o' $(CFLAGS) -o $@ $<
|
||||
@touch $*.d
|
||||
@touch $@
|
||||
$(VERBOSE_NL)
|
||||
|
||||
# Preprocess: create preprocessed files from assembler source files.
|
||||
%.x: %.S %.d
|
||||
@echo $(MSG_PREPROCESSING)
|
||||
$(VERBOSE_CMD)$(CPP) $(CPPFLAGS) -MD -MP -MT '$*.x $*.o' -o $@ $<
|
||||
@touch $*.d
|
||||
@touch $@
|
||||
$(VERBOSE_NL)
|
||||
|
||||
# Preprocess, compile & assemble: create object files from C source files.
|
||||
%.o: %.c %.d
|
||||
@echo $(MSG_COMPILING)
|
||||
$(VERBOSE_CMD)$(CC) -c $(CPPFLAGS) -MD -MP -MT '$*.i $*.x' $(CFLAGS) -o $@ $<
|
||||
@touch $*.d
|
||||
@touch $@
|
||||
$(VERBOSE_NL)
|
||||
|
||||
# Preprocess & assemble: create object files from assembler source files.
|
||||
%.o: %.S %.d
|
||||
@echo $(MSG_ASSEMBLING)
|
||||
$(VERBOSE_CMD)$(CC) -c $(CPPFLAGS) -MD -MP -MT '$*.x' $(ASFLAGS) -o $@ $<
|
||||
@touch $*.d
|
||||
@touch $@
|
||||
$(VERBOSE_NL)
|
||||
|
||||
.PRECIOUS: $(OBJFILES)
|
||||
ifeq ($(TGTTYPE),.a)
|
||||
# Archive: create A output file from object files.
|
||||
.SECONDARY: $(TARGET)
|
||||
$(TARGET): $(OBJFILES)
|
||||
@echo $(MSG_ARCHIVING)
|
||||
$(VERBOSE_CMD)$(AR) $(ARFLAGS) $@ $(filter %.o,$+)
|
||||
$(VERBOSE_NL)
|
||||
else
|
||||
ifeq ($(TGTTYPE),.elf)
|
||||
# Link: create ELF output file from object files.
|
||||
.SECONDARY: $(TARGET)
|
||||
$(TARGET): $(OBJFILES)
|
||||
@echo $(MSG_LINKING)
|
||||
$(VERBOSE_CMD)$(CC) $(LDFLAGS) $(filter %.o,$+) $(LOADLIBES) $(LDLIBS) -o $@
|
||||
$(VERBOSE_NL)
|
||||
endif
|
||||
endif
|
||||
|
||||
# Create extended listing from target output file.
|
||||
$(LSS): $(TARGET)
|
||||
@echo $(MSG_EXTENDED_LISTING)
|
||||
$(VERBOSE_CMD)$(OBJDUMP) -h -S $< > $@
|
||||
$(VERBOSE_NL)
|
||||
|
||||
# Create symbol table from target output file.
|
||||
$(SYM): $(TARGET)
|
||||
@echo $(MSG_SYMBOL_TABLE)
|
||||
$(VERBOSE_CMD)$(NM) -n $< > $@
|
||||
$(VERBOSE_NL)
|
||||
|
||||
ifeq ($(TGTTYPE),.elf)
|
||||
|
||||
# Create Intel HEX image from ELF output file.
|
||||
$(HEX): $(TARGET)
|
||||
@echo $(MSG_IHEX_IMAGE)
|
||||
$(VERBOSE_CMD)$(OBJCOPY) -O ihex $< $@
|
||||
$(VERBOSE_NL)
|
||||
|
||||
# Create binary image from ELF output file.
|
||||
$(BIN): $(TARGET)
|
||||
@echo $(MSG_BINARY_IMAGE)
|
||||
$(VERBOSE_CMD)$(OBJCOPY) -O binary $< $@
|
||||
$(VERBOSE_NL)
|
||||
|
||||
endif
|
@ -1,150 +0,0 @@
|
||||
# Hey Emacs, this is a -*- makefile -*-
|
||||
|
||||
# The purpose of this file is to define the build configuration variables used
|
||||
# by the generic Makefile. See Makefile header for further information.
|
||||
|
||||
# Copyright (c) 2007, Atmel Corporation All rights reserved.
|
||||
#
|
||||
# Redistribution and use in source and binary forms, with or without
|
||||
# modification, are permitted provided that the following conditions are met:
|
||||
#
|
||||
# 1. Redistributions of source code must retain the above copyright notice, this
|
||||
# list of conditions and the following disclaimer.
|
||||
#
|
||||
# 2. Redistributions in binary form must reproduce the above copyright notice,
|
||||
# this list of conditions and the following disclaimer in the documentation and/
|
||||
# or other materials provided with the distribution.
|
||||
#
|
||||
# 3. The name of ATMEL may not be used to endorse or promote products derived
|
||||
# from this software without specific prior written permission.
|
||||
#
|
||||
# THIS SOFTWARE IS PROVIDED BY ATMEL ``AS IS'' AND ANY EXPRESS OR IMPLIED
|
||||
# WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
|
||||
# MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE EXPRESSLY AND
|
||||
# SPECIFICALLY DISCLAIMED. IN NO EVENT SHALL ATMEL BE LIABLE FOR ANY DIRECT,
|
||||
# INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
|
||||
# BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
|
||||
# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
|
||||
# OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
|
||||
# NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
|
||||
# EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||
|
||||
|
||||
# Base paths
|
||||
PRJ_PATH = ../..
|
||||
APPS_PATH = $(PRJ_PATH)/APPLICATIONS
|
||||
BRDS_PATH = $(PRJ_PATH)/BOARDS
|
||||
COMP_PATH = $(PRJ_PATH)/COMPONENTS
|
||||
DRVR_PATH = $(PRJ_PATH)/DRIVERS
|
||||
SERV_PATH = $(PRJ_PATH)/SERVICES
|
||||
UTIL_PATH = $(PRJ_PATH)/UTILS
|
||||
|
||||
# CPU architecture: {ap|uc}
|
||||
ARCH = uc
|
||||
|
||||
# Part: {none|ap7xxx|uc3xxxxx}
|
||||
PART = uc3a0512
|
||||
|
||||
# Flash memories: [{cfi|internal}@address,size]...
|
||||
FLASH = internal@0x80000000,512Kb
|
||||
|
||||
# Clock source to use when programming: [{xtal|extclk|int}]
|
||||
PROG_CLOCK = xtal
|
||||
|
||||
# Device/Platform/Board include path
|
||||
PLATFORM_INC_PATH = \
|
||||
$(BRDS_PATH)/
|
||||
|
||||
# Target name: {*.a|*.elf}
|
||||
TARGET = $(PART)-rtosdemo.elf
|
||||
|
||||
# Definitions: [-D name[=definition]...] [-U name...]
|
||||
# Things that might be added to DEFS:
|
||||
# BOARD Board used: {EVKxxxx}
|
||||
# EXT_BOARD Extension board used (if any): {EXTxxxx}
|
||||
DEFS = -D BOARD=EVK1100
|
||||
|
||||
# Include path
|
||||
INC_PATH = \
|
||||
$(UTIL_PATH)/ \
|
||||
$(UTIL_PATH)/PREPROCESSOR/ \
|
||||
$(SERV_PATH)/USB/CLASS/DFU/EXAMPLES/ISP/BOOT/ \
|
||||
$(DRVR_PATH)/INTC/ \
|
||||
$(DRVR_PATH)/PM/ \
|
||||
$(DRVR_PATH)/GPIO/ \
|
||||
$(DRVR_PATH)/TC/ \
|
||||
../../../../Source/portable/GCC/AVR32_UC3/ \
|
||||
../../../../Source/include/ \
|
||||
../../../Common/include/ \
|
||||
../../
|
||||
|
||||
# C source files
|
||||
CSRCS = \
|
||||
$(BRDS_PATH)/EVK1100/led.c \
|
||||
$(DRVR_PATH)/INTC/intc.c \
|
||||
$(DRVR_PATH)/PM/pm.c \
|
||||
$(DRVR_PATH)/GPIO/gpio.c \
|
||||
$(DRVR_PATH)/TC/tc.c \
|
||||
../../../../Source/portable/GCC/AVR32_UC3/port.c \
|
||||
../../../../Source/portable/MemMang/heap_3.c \
|
||||
../../../../Source/list.c \
|
||||
../../../../Source/queue.c \
|
||||
../../../../Source/tasks.c \
|
||||
../../../Common/Minimal/BlockQ.c \
|
||||
../../../Common/Minimal/comtest.c \
|
||||
../../../Common/Minimal/death.c \
|
||||
../../../Common/Minimal/dynamic.c \
|
||||
../../../Common/Minimal/flash.c \
|
||||
../../../Common/Minimal/flop.c \
|
||||
../../../Common/Minimal/integer.c \
|
||||
../../../Common/Minimal/PollQ.c \
|
||||
../../../Common/Minimal/semtest.c \
|
||||
../../ParTest/ParTest.c \
|
||||
../../serial/serial.c \
|
||||
../../main.c
|
||||
|
||||
# Assembler source files
|
||||
ASSRCS = \
|
||||
$(SERV_PATH)/USB/CLASS/DFU/EXAMPLES/ISP/BOOT/trampoline.S \
|
||||
../../../../Source/portable/GCC/AVR32_UC3/exception.S
|
||||
|
||||
# Library path
|
||||
LIB_PATH =
|
||||
|
||||
# Libraries to link with the project
|
||||
LIBS =
|
||||
|
||||
# Linker script file if any
|
||||
LINKER_SCRIPT = $(UTIL_PATH)/LINKER_SCRIPTS/AT32UC3A/0512/GCC/link_uc3a0512.lds
|
||||
|
||||
# Options to request or suppress warnings: [-fsyntax-only] [-pedantic[-errors]] [-w] [-Wwarning...]
|
||||
# For further details, refer to the chapter "GCC Command Options" of the GCC manual.
|
||||
WARNINGS = -Wall
|
||||
|
||||
# Options for debugging: [-g]...
|
||||
# For further details, refer to the chapter "GCC Command Options" of the GCC manual.
|
||||
DEBUG = -g
|
||||
|
||||
# Options that control optimization: [-O[0|1|2|3|s]]...
|
||||
# For further details, refer to the chapter "GCC Command Options" of the GCC manual.
|
||||
OPTIMIZATION = -O0 -ffunction-sections -fdata-sections
|
||||
|
||||
# Extra flags to use when preprocessing
|
||||
CPP_EXTRA_FLAGS =
|
||||
|
||||
# Extra flags to use when compiling
|
||||
C_EXTRA_FLAGS =
|
||||
|
||||
# Extra flags to use when assembling
|
||||
AS_EXTRA_FLAGS =
|
||||
|
||||
# Extra flags to use when linking
|
||||
LD_EXTRA_FLAGS = -Wl,--gc-sections -Wl,-e,_trampoline
|
||||
|
||||
# Documentation path
|
||||
DOC_PATH = \
|
||||
../../DOC/
|
||||
|
||||
# Documentation configuration file
|
||||
DOC_CFG = \
|
||||
../doxyfile.doxygen
|
@ -1,29 +0,0 @@
|
||||
target extended-remote :1024
|
||||
symbol uc3a0512-rtosdemo.elf
|
||||
|
||||
b _handle_Unrecoverable_Exception
|
||||
b _handle_TLB_Multiple_Hit
|
||||
b _handle_Bus_Error_Data_Fetch
|
||||
b _handle_Bus_Error_Instruction_Fetch
|
||||
b _handle_NMI
|
||||
b _handle_Instruction_Address
|
||||
b _handle_ITLB_Protection
|
||||
b _handle_Breakpoint
|
||||
b _handle_Illegal_Opcode
|
||||
b _handle_Unimplemented_Instruction
|
||||
b _handle_Privilege_Violation
|
||||
b _handle_Floating_Point
|
||||
b _handle_Coprocessor_Absent
|
||||
b _handle_Data_Address_Read
|
||||
b _handle_Data_Address_Write
|
||||
b _handle_DTLB_Protection_Read
|
||||
b _handle_DTLB_Protection_Write
|
||||
b _handle_DTLB_Modified
|
||||
b _handle_ITLB_Miss
|
||||
b _handle_DTLB_Miss_Read
|
||||
b _handle_DTLB_Miss_Write
|
||||
|
||||
define current_task
|
||||
printf "Task name: %s\n", ((tskTCB *)pxCurrentTCB)->pcTaskName
|
||||
printf "pxTopOfStack: %x\n", ((tskTCB *)pxCurrentTCB)->pxTopOfStack
|
||||
end
|
@ -1,29 +0,0 @@
|
||||
target extended-remote :4711
|
||||
symbol uc3a0512-rtosdemo.elf
|
||||
|
||||
b _handle_Unrecoverable_Exception
|
||||
b _handle_TLB_Multiple_Hit
|
||||
b _handle_Bus_Error_Data_Fetch
|
||||
b _handle_Bus_Error_Instruction_Fetch
|
||||
b _handle_NMI
|
||||
b _handle_Instruction_Address
|
||||
b _handle_ITLB_Protection
|
||||
b _handle_Breakpoint
|
||||
b _handle_Illegal_Opcode
|
||||
b _handle_Unimplemented_Instruction
|
||||
b _handle_Privilege_Violation
|
||||
b _handle_Floating_Point
|
||||
b _handle_Coprocessor_Absent
|
||||
b _handle_Data_Address_Read
|
||||
b _handle_Data_Address_Write
|
||||
b _handle_DTLB_Protection_Read
|
||||
b _handle_DTLB_Protection_Write
|
||||
b _handle_DTLB_Modified
|
||||
b _handle_ITLB_Miss
|
||||
b _handle_DTLB_Miss_Read
|
||||
b _handle_DTLB_Miss_Write
|
||||
|
||||
define current_task
|
||||
printf "Task name: %s\n", ((tskTCB *)pxCurrentTCB)->pcTaskName
|
||||
printf "pxTopOfStack: %x\n", ((tskTCB *)pxCurrentTCB)->pxTopOfStack
|
||||
end
|
@ -1,27 +0,0 @@
|
||||
This is an internal working file generated by the Source Browser.
|
||||
20:15 21s
|
||||
C:\E\Dev\FreeRTOS\Releases\Code\V4.5.0\Demo\AVR32_UC3\AT32UC3A\IAR\Debug\Obj\BlockQ.pbi
|
||||
C:\E\Dev\FreeRTOS\Releases\Code\V4.5.0\Demo\AVR32_UC3\AT32UC3A\IAR\Debug\Obj\ParTest.pbi
|
||||
C:\E\Dev\FreeRTOS\Releases\Code\V4.5.0\Demo\AVR32_UC3\AT32UC3A\IAR\Debug\Obj\PollQ.pbi
|
||||
C:\E\Dev\FreeRTOS\Releases\Code\V4.5.0\Demo\AVR32_UC3\AT32UC3A\IAR\Debug\Obj\comtest.pbi
|
||||
C:\E\Dev\FreeRTOS\Releases\Code\V4.5.0\Demo\AVR32_UC3\AT32UC3A\IAR\Debug\Obj\death.pbi
|
||||
C:\E\Dev\FreeRTOS\Releases\Code\V4.5.0\Demo\AVR32_UC3\AT32UC3A\IAR\Debug\Obj\dynamic.pbi
|
||||
C:\E\Dev\FreeRTOS\Releases\Code\V4.5.0\Demo\AVR32_UC3\AT32UC3A\IAR\Debug\Obj\flash.pbi
|
||||
C:\E\Dev\FreeRTOS\Releases\Code\V4.5.0\Demo\AVR32_UC3\AT32UC3A\IAR\Debug\Obj\flop.pbi
|
||||
C:\E\Dev\FreeRTOS\Releases\Code\V4.5.0\Demo\AVR32_UC3\AT32UC3A\IAR\Debug\Obj\gpio.pbi
|
||||
C:\E\Dev\FreeRTOS\Releases\Code\V4.5.0\Demo\AVR32_UC3\AT32UC3A\IAR\Debug\Obj\heap_3.pbi
|
||||
C:\E\Dev\FreeRTOS\Releases\Code\V4.5.0\Demo\AVR32_UC3\AT32UC3A\IAR\Debug\Obj\intc.pbi
|
||||
C:\E\Dev\FreeRTOS\Releases\Code\V4.5.0\Demo\AVR32_UC3\AT32UC3A\IAR\Debug\Obj\integer.pbi
|
||||
C:\E\Dev\FreeRTOS\Releases\Code\V4.5.0\Demo\AVR32_UC3\AT32UC3A\IAR\Debug\Obj\led.pbi
|
||||
C:\E\Dev\FreeRTOS\Releases\Code\V4.5.0\Demo\AVR32_UC3\AT32UC3A\IAR\Debug\Obj\list.pbi
|
||||
C:\E\Dev\FreeRTOS\Releases\Code\V4.5.0\Demo\AVR32_UC3\AT32UC3A\IAR\Debug\Obj\main.pbi
|
||||
C:\E\Dev\FreeRTOS\Releases\Code\V4.5.0\Demo\AVR32_UC3\AT32UC3A\IAR\Debug\Obj\pm.pbi
|
||||
C:\E\Dev\FreeRTOS\Releases\Code\V4.5.0\Demo\AVR32_UC3\AT32UC3A\IAR\Debug\Obj\port.pbi
|
||||
C:\E\Dev\FreeRTOS\Releases\Code\V4.5.0\Demo\AVR32_UC3\AT32UC3A\IAR\Debug\Obj\queue.pbi
|
||||
C:\E\Dev\FreeRTOS\Releases\Code\V4.5.0\Demo\AVR32_UC3\AT32UC3A\IAR\Debug\Obj\read.pbi
|
||||
C:\E\Dev\FreeRTOS\Releases\Code\V4.5.0\Demo\AVR32_UC3\AT32UC3A\IAR\Debug\Obj\semtest.pbi
|
||||
C:\E\Dev\FreeRTOS\Releases\Code\V4.5.0\Demo\AVR32_UC3\AT32UC3A\IAR\Debug\Obj\serial.pbi
|
||||
C:\E\Dev\FreeRTOS\Releases\Code\V4.5.0\Demo\AVR32_UC3\AT32UC3A\IAR\Debug\Obj\tasks.pbi
|
||||
C:\E\Dev\FreeRTOS\Releases\Code\V4.5.0\Demo\AVR32_UC3\AT32UC3A\IAR\Debug\Obj\tc.pbi
|
||||
C:\E\Dev\FreeRTOS\Releases\Code\V4.5.0\Demo\AVR32_UC3\AT32UC3A\IAR\Debug\Obj\usart.pbi
|
||||
C:\E\Dev\FreeRTOS\Releases\Code\V4.5.0\Demo\AVR32_UC3\AT32UC3A\IAR\Debug\Obj\write.pbi
|
@ -1,373 +0,0 @@
|
||||
<?xml version="1.0" encoding="iso-8859-1"?>
|
||||
|
||||
<project>
|
||||
<fileVersion>1</fileVersion>
|
||||
<configuration>
|
||||
<name>Debug</name>
|
||||
<toolchain>
|
||||
<name>AVR32</name>
|
||||
</toolchain>
|
||||
<debug>1</debug>
|
||||
<settings>
|
||||
<name>C-SPY</name>
|
||||
<archiveVersion>2</archiveVersion>
|
||||
<data>
|
||||
<version>0</version>
|
||||
<wantNonLocal>1</wantNonLocal>
|
||||
<debug>1</debug>
|
||||
<option>
|
||||
<name>CMandatory</name>
|
||||
<state>1</state>
|
||||
</option>
|
||||
<option>
|
||||
<name>CInput</name>
|
||||
<state>1</state>
|
||||
</option>
|
||||
<option>
|
||||
<name>CCore</name>
|
||||
<state>0</state>
|
||||
</option>
|
||||
<option>
|
||||
<name>CRunToEnable</name>
|
||||
<state>1</state>
|
||||
</option>
|
||||
<option>
|
||||
<name>CRunToName</name>
|
||||
<state>main</state>
|
||||
</option>
|
||||
<option>
|
||||
<name>CMacOverride</name>
|
||||
<state>0</state>
|
||||
</option>
|
||||
<option>
|
||||
<name>CMacFile</name>
|
||||
<state></state>
|
||||
</option>
|
||||
<option>
|
||||
<name>DynDriver</name>
|
||||
<state>JTAGICEMKIIAVR32</state>
|
||||
</option>
|
||||
<option>
|
||||
<name>DDFOverride</name>
|
||||
<state>0</state>
|
||||
</option>
|
||||
<option>
|
||||
<name>DDFFile</name>
|
||||
<state>$TOOLKIT_DIR$\config\iouc3a0512.ddf</state>
|
||||
</option>
|
||||
<option>
|
||||
<name>DebuggerUseUbrofResetVector</name>
|
||||
<state>0</state>
|
||||
</option>
|
||||
<option>
|
||||
<name>IExtraOptionsCheck</name>
|
||||
<state>0</state>
|
||||
</option>
|
||||
<option>
|
||||
<name>IExtraOptions</name>
|
||||
<state></state>
|
||||
</option>
|
||||
</data>
|
||||
</settings>
|
||||
<settings>
|
||||
<name>JTAGICEMKIIAVR32</name>
|
||||
<archiveVersion>3</archiveVersion>
|
||||
<data>
|
||||
<version>1</version>
|
||||
<wantNonLocal>1</wantNonLocal>
|
||||
<debug>1</debug>
|
||||
<option>
|
||||
<name>CJtagIceMkIIMandatory</name>
|
||||
<state>1</state>
|
||||
</option>
|
||||
<option>
|
||||
<name>CJtagIceMkIIPeripherals</name>
|
||||
<state>0</state>
|
||||
</option>
|
||||
<option>
|
||||
<name>CJtagIceMkIIReset</name>
|
||||
<state>0</state>
|
||||
</option>
|
||||
<option>
|
||||
<name>CJtagIceMkIISWBreakpoints</name>
|
||||
<state>0</state>
|
||||
</option>
|
||||
<option>
|
||||
<name>CJtagIceMkIISuppressDownload</name>
|
||||
<state>0</state>
|
||||
</option>
|
||||
<option>
|
||||
<name>CJtagIceMkIIVerifyDownload</name>
|
||||
<state>0</state>
|
||||
</option>
|
||||
<option>
|
||||
<name>CJTagIceMkIICommunicationLogging</name>
|
||||
<state>0</state>
|
||||
</option>
|
||||
<option>
|
||||
<name>CJtagIceMkIICommLogFile</name>
|
||||
<state></state>
|
||||
</option>
|
||||
<option>
|
||||
<name>CJtagIceMkIIConnectionRage</name>
|
||||
<version>0</version>
|
||||
<state>2</state>
|
||||
</option>
|
||||
<option>
|
||||
<name>CJtagIceMkIIConnectionPort</name>
|
||||
<version>0</version>
|
||||
<state>0</state>
|
||||
</option>
|
||||
<option>
|
||||
<name>CJtagIceMkIIJtagFrequence</name>
|
||||
<version>0</version>
|
||||
<state>8</state>
|
||||
</option>
|
||||
<option>
|
||||
<name>CJtagIceMkIIDaisyChain</name>
|
||||
<state>0</state>
|
||||
</option>
|
||||
<option>
|
||||
<name>CJtagIceMkIIDaisyChainBeforeDevices</name>
|
||||
<state>0</state>
|
||||
</option>
|
||||
<option>
|
||||
<name>CJtagIceMkIIDaisyChainBeforeBits</name>
|
||||
<state>0</state>
|
||||
</option>
|
||||
<option>
|
||||
<name>CJtagIceMkIIDaisyChainAfterDevices</name>
|
||||
<state>0</state>
|
||||
</option>
|
||||
<option>
|
||||
<name>CJtagIceMkIIDaisyChainAfterBits</name>
|
||||
<state>0</state>
|
||||
</option>
|
||||
<option>
|
||||
<name>FlashLoaders</name>
|
||||
<state></state>
|
||||
</option>
|
||||
<option>
|
||||
<name>UseFlashLoader</name>
|
||||
<state>0</state>
|
||||
</option>
|
||||
</data>
|
||||
</settings>
|
||||
<settings>
|
||||
<name>SIMAVR32</name>
|
||||
<archiveVersion>2</archiveVersion>
|
||||
<data>
|
||||
<version>0</version>
|
||||
<wantNonLocal>1</wantNonLocal>
|
||||
<debug>1</debug>
|
||||
<option>
|
||||
<name>CSimMandatory</name>
|
||||
<state>1</state>
|
||||
</option>
|
||||
</data>
|
||||
</settings>
|
||||
<debuggerPlugins>
|
||||
<plugin>
|
||||
<file>$EW_DIR$\common\plugins\CodeCoverage\CodeCoverage.ENU.ewplugin</file>
|
||||
<loadFlag>1</loadFlag>
|
||||
</plugin>
|
||||
<plugin>
|
||||
<file>$EW_DIR$\common\plugins\Orti\Orti.ENU.ewplugin</file>
|
||||
<loadFlag>0</loadFlag>
|
||||
</plugin>
|
||||
<plugin>
|
||||
<file>$EW_DIR$\common\plugins\Profiling\Profiling.ENU.ewplugin</file>
|
||||
<loadFlag>1</loadFlag>
|
||||
</plugin>
|
||||
<plugin>
|
||||
<file>$EW_DIR$\common\plugins\Stack\Stack.ENU.ewplugin</file>
|
||||
<loadFlag>1</loadFlag>
|
||||
</plugin>
|
||||
</debuggerPlugins>
|
||||
</configuration>
|
||||
<configuration>
|
||||
<name>Release</name>
|
||||
<toolchain>
|
||||
<name>AVR32</name>
|
||||
</toolchain>
|
||||
<debug>0</debug>
|
||||
<settings>
|
||||
<name>C-SPY</name>
|
||||
<archiveVersion>2</archiveVersion>
|
||||
<data>
|
||||
<version>0</version>
|
||||
<wantNonLocal>1</wantNonLocal>
|
||||
<debug>0</debug>
|
||||
<option>
|
||||
<name>CMandatory</name>
|
||||
<state>1</state>
|
||||
</option>
|
||||
<option>
|
||||
<name>CInput</name>
|
||||
<state>1</state>
|
||||
</option>
|
||||
<option>
|
||||
<name>CCore</name>
|
||||
<state>0</state>
|
||||
</option>
|
||||
<option>
|
||||
<name>CRunToEnable</name>
|
||||
<state>1</state>
|
||||
</option>
|
||||
<option>
|
||||
<name>CRunToName</name>
|
||||
<state>main</state>
|
||||
</option>
|
||||
<option>
|
||||
<name>CMacOverride</name>
|
||||
<state>0</state>
|
||||
</option>
|
||||
<option>
|
||||
<name>CMacFile</name>
|
||||
<state></state>
|
||||
</option>
|
||||
<option>
|
||||
<name>DynDriver</name>
|
||||
<state>JTAGICEMKIIAVR32</state>
|
||||
</option>
|
||||
<option>
|
||||
<name>DDFOverride</name>
|
||||
<state>0</state>
|
||||
</option>
|
||||
<option>
|
||||
<name>DDFFile</name>
|
||||
<state>$TOOLKIT_DIR$\config\iouc3a0512.ddf</state>
|
||||
</option>
|
||||
<option>
|
||||
<name>DebuggerUseUbrofResetVector</name>
|
||||
<state>0</state>
|
||||
</option>
|
||||
<option>
|
||||
<name>IExtraOptionsCheck</name>
|
||||
<state>0</state>
|
||||
</option>
|
||||
<option>
|
||||
<name>IExtraOptions</name>
|
||||
<state></state>
|
||||
</option>
|
||||
</data>
|
||||
</settings>
|
||||
<settings>
|
||||
<name>JTAGICEMKIIAVR32</name>
|
||||
<archiveVersion>3</archiveVersion>
|
||||
<data>
|
||||
<version>1</version>
|
||||
<wantNonLocal>1</wantNonLocal>
|
||||
<debug>0</debug>
|
||||
<option>
|
||||
<name>CJtagIceMkIIMandatory</name>
|
||||
<state>1</state>
|
||||
</option>
|
||||
<option>
|
||||
<name>CJtagIceMkIIPeripherals</name>
|
||||
<state>0</state>
|
||||
</option>
|
||||
<option>
|
||||
<name>CJtagIceMkIIReset</name>
|
||||
<state>0</state>
|
||||
</option>
|
||||
<option>
|
||||
<name>CJtagIceMkIISWBreakpoints</name>
|
||||
<state>0</state>
|
||||
</option>
|
||||
<option>
|
||||
<name>CJtagIceMkIISuppressDownload</name>
|
||||
<state>0</state>
|
||||
</option>
|
||||
<option>
|
||||
<name>CJtagIceMkIIVerifyDownload</name>
|
||||
<state>0</state>
|
||||
</option>
|
||||
<option>
|
||||
<name>CJTagIceMkIICommunicationLogging</name>
|
||||
<state>0</state>
|
||||
</option>
|
||||
<option>
|
||||
<name>CJtagIceMkIICommLogFile</name>
|
||||
<state></state>
|
||||
</option>
|
||||
<option>
|
||||
<name>CJtagIceMkIIConnectionRage</name>
|
||||
<version>0</version>
|
||||
<state>2</state>
|
||||
</option>
|
||||
<option>
|
||||
<name>CJtagIceMkIIConnectionPort</name>
|
||||
<version>0</version>
|
||||
<state>0</state>
|
||||
</option>
|
||||
<option>
|
||||
<name>CJtagIceMkIIJtagFrequence</name>
|
||||
<version>0</version>
|
||||
<state>8</state>
|
||||
</option>
|
||||
<option>
|
||||
<name>CJtagIceMkIIDaisyChain</name>
|
||||
<state>0</state>
|
||||
</option>
|
||||
<option>
|
||||
<name>CJtagIceMkIIDaisyChainBeforeDevices</name>
|
||||
<state>0</state>
|
||||
</option>
|
||||
<option>
|
||||
<name>CJtagIceMkIIDaisyChainBeforeBits</name>
|
||||
<state>0</state>
|
||||
</option>
|
||||
<option>
|
||||
<name>CJtagIceMkIIDaisyChainAfterDevices</name>
|
||||
<state>0</state>
|
||||
</option>
|
||||
<option>
|
||||
<name>CJtagIceMkIIDaisyChainAfterBits</name>
|
||||
<state>0</state>
|
||||
</option>
|
||||
<option>
|
||||
<name>FlashLoaders</name>
|
||||
<state></state>
|
||||
</option>
|
||||
<option>
|
||||
<name>UseFlashLoader</name>
|
||||
<state>0</state>
|
||||
</option>
|
||||
</data>
|
||||
</settings>
|
||||
<settings>
|
||||
<name>SIMAVR32</name>
|
||||
<archiveVersion>2</archiveVersion>
|
||||
<data>
|
||||
<version>0</version>
|
||||
<wantNonLocal>1</wantNonLocal>
|
||||
<debug>0</debug>
|
||||
<option>
|
||||
<name>CSimMandatory</name>
|
||||
<state>1</state>
|
||||
</option>
|
||||
</data>
|
||||
</settings>
|
||||
<debuggerPlugins>
|
||||
<plugin>
|
||||
<file>$EW_DIR$\common\plugins\CodeCoverage\CodeCoverage.ENU.ewplugin</file>
|
||||
<loadFlag>1</loadFlag>
|
||||
</plugin>
|
||||
<plugin>
|
||||
<file>$EW_DIR$\common\plugins\Orti\Orti.ENU.ewplugin</file>
|
||||
<loadFlag>0</loadFlag>
|
||||
</plugin>
|
||||
<plugin>
|
||||
<file>$EW_DIR$\common\plugins\Profiling\Profiling.ENU.ewplugin</file>
|
||||
<loadFlag>1</loadFlag>
|
||||
</plugin>
|
||||
<plugin>
|
||||
<file>$EW_DIR$\common\plugins\Stack\Stack.ENU.ewplugin</file>
|
||||
<loadFlag>1</loadFlag>
|
||||
</plugin>
|
||||
</debuggerPlugins>
|
||||
</configuration>
|
||||
</project>
|
||||
|
||||
|
File diff suppressed because it is too large
Load Diff
@ -1,10 +0,0 @@
|
||||
<?xml version="1.0" encoding="iso-8859-1"?>
|
||||
|
||||
<workspace>
|
||||
<project>
|
||||
<path>$WS_DIR$\rtosdemo.ewp</path>
|
||||
</project>
|
||||
<batchBuild/>
|
||||
</workspace>
|
||||
|
||||
|
@ -1,32 +0,0 @@
|
||||
@REM This bat file has been generated by the IAR Embeddded Workbench
|
||||
@REM C-SPY interactive debugger,as an aid to preparing a command
|
||||
@REM line for running the cspybat command line utility with the
|
||||
@REM appropriate settings.
|
||||
@REM
|
||||
@REM After making some adjustments to this file, you can launch cspybat
|
||||
@REM by typing the name of this file followed by the name of the debug
|
||||
@REM file (usually an ubrof file). Note that this file is generated
|
||||
@REM every time a new debug session is initialized, so you may want to
|
||||
@REM move or rename the file before making changes.
|
||||
@REM
|
||||
@REM Note: some command line arguments cannot be properly generated
|
||||
@REM by this process. Specifically, the plugin which is responsible
|
||||
@REM for the Terminal I/O window (and other C runtime functionality)
|
||||
@REM comes in a special version for cspybat, and the name of that
|
||||
@REM plugin dll is not known when generating this file. It resides in
|
||||
@REM the $TOOLKIT_DIR$\bin folder and is usually called XXXbat.dll or
|
||||
@REM XXXlibsupportbat.dll, where XXX is the name of the corresponding
|
||||
@REM tool chain. Replace the '<libsupport_plugin>' parameter
|
||||
@REM below with the appropriate file name. Other plugins loaded by
|
||||
@REM C-SPY are usually not needed by, or will not work in, cspybat
|
||||
@REM but they are listed at the end of this file for reference.
|
||||
|
||||
|
||||
"C:\Devtools\IAR Systems\Embedded Workbench 4.0\common\bin\cspybat" "C:\Devtools\IAR Systems\Embedded Workbench 4.0\avr32\bin\avr32proc.dll" "C:\Devtools\IAR Systems\Embedded Workbench 4.0\avr32\bin\avr32jtagicemkII.dll" %1 --plugin "C:\Devtools\IAR Systems\Embedded Workbench 4.0\avr32\bin\<libsupport_plugin>" --backend -B "--core" "avr32a" "--avr32_simd_instructions" "disabled" "--avr32_dsp_instructions" "enabled" "--avr32_rmw_instructions" "enabled" "-p" "C:\Devtools\IAR Systems\Embedded Workbench 4.0\avr32\config\iouc3a0512.ddf" "-d" "jtagicemkII" "--drv_communication" "USB" "--jtagice_clock" "100000"
|
||||
|
||||
|
||||
@REM Loaded plugins:
|
||||
@REM avr32LibSupport.dll
|
||||
@REM C:\Devtools\IAR Systems\Embedded Workbench 4.0\common\plugins\CodeCoverage\CodeCoverage.dll
|
||||
@REM C:\Devtools\IAR Systems\Embedded Workbench 4.0\common\plugins\Profiling\Profiling.dll
|
||||
@REM C:\Devtools\IAR Systems\Embedded Workbench 4.0\common\plugins\stack\stack.dll
|
@ -1,5 +0,0 @@
|
||||
<?xml version="1.0" encoding="iso-8859-1"?>
|
||||
|
||||
<Project/>
|
||||
|
||||
|
@ -1,5 +0,0 @@
|
||||
[Breakpoints]
|
||||
Count=0
|
||||
[TraceHelper]
|
||||
Enabled=0
|
||||
ShowSource=1
|
@ -1,97 +0,0 @@
|
||||
<?xml version="1.0" encoding="iso-8859-1"?>
|
||||
|
||||
<Workspace>
|
||||
<ConfigDictionary>
|
||||
<CurrentConfigs>
|
||||
<Project>rtosdemo/Debug</Project>
|
||||
</CurrentConfigs>
|
||||
</ConfigDictionary>
|
||||
<Desktop>
|
||||
<Static>
|
||||
<Workspace>
|
||||
<ColumnWidths>
|
||||
<Column0>124</Column0>
|
||||
<Column1>27</Column1>
|
||||
<Column2>27</Column2>
|
||||
<Column3>27</Column3>
|
||||
</ColumnWidths>
|
||||
</Workspace>
|
||||
</Static>
|
||||
<Windows>
|
||||
<Wnd0>
|
||||
<Tabs>
|
||||
<Tab>
|
||||
<Identity>TabID-27032-1807</Identity>
|
||||
<TabName>Workspace</TabName>
|
||||
<Factory>Workspace</Factory>
|
||||
<Session>
|
||||
<NodeDict>
|
||||
<ExpandedNode>rtosdemo</ExpandedNode>
|
||||
</NodeDict>
|
||||
</Session>
|
||||
</Tab>
|
||||
</Tabs>
|
||||
<SelectedTab>0</SelectedTab>
|
||||
</Wnd0>
|
||||
</Windows>
|
||||
<Editor>
|
||||
<Pane/>
|
||||
<ActivePane>0</ActivePane>
|
||||
<Sizes>
|
||||
<Pane>
|
||||
<X>1000000</X>
|
||||
<Y>1000000</Y>
|
||||
</Pane>
|
||||
</Sizes>
|
||||
<SplitMode>1</SplitMode>
|
||||
</Editor>
|
||||
<Positions>
|
||||
<Top>
|
||||
<Row0>
|
||||
<Sizes>
|
||||
<Toolbar-008ecdd0>
|
||||
<key>iaridepm1</key>
|
||||
</Toolbar-008ecdd0>
|
||||
</Sizes>
|
||||
</Row0>
|
||||
</Top>
|
||||
<Left>
|
||||
<Row0>
|
||||
<Sizes>
|
||||
<Wnd0>
|
||||
<Rect>
|
||||
<Top>-2</Top>
|
||||
<Left>-2</Left>
|
||||
<Bottom>938</Bottom>
|
||||
<Right>198</Right>
|
||||
<x>-2</x>
|
||||
<y>-2</y>
|
||||
<xscreen>200</xscreen>
|
||||
<yscreen>200</yscreen>
|
||||
<sizeHorzCX>142857</sizeHorzCX>
|
||||
<sizeHorzCY>203666</sizeHorzCY>
|
||||
<sizeVertCX>142857</sizeVertCX>
|
||||
<sizeVertCY>957230</sizeVertCY>
|
||||
</Rect>
|
||||
</Wnd0>
|
||||
</Sizes>
|
||||
</Row0>
|
||||
</Left>
|
||||
<Right>
|
||||
<Row0>
|
||||
<Sizes/>
|
||||
</Row0>
|
||||
</Right>
|
||||
<Bottom>
|
||||
<Row0>
|
||||
<Sizes/>
|
||||
</Row0>
|
||||
</Bottom>
|
||||
<Float>
|
||||
<Sizes/>
|
||||
</Float>
|
||||
</Positions>
|
||||
</Desktop>
|
||||
</Workspace>
|
||||
|
||||
|
@ -1,232 +0,0 @@
|
||||
# Doxyfile 1.4.7
|
||||
|
||||
#---------------------------------------------------------------------------
|
||||
# Project related configuration options
|
||||
#---------------------------------------------------------------------------
|
||||
PROJECT_NAME = "AVR32 UC3 - FreeRTOS Real Time Kernel"
|
||||
PROJECT_NUMBER =
|
||||
OUTPUT_DIRECTORY = ../DOC
|
||||
CREATE_SUBDIRS = NO
|
||||
OUTPUT_LANGUAGE = English
|
||||
USE_WINDOWS_ENCODING = YES
|
||||
BRIEF_MEMBER_DESC = YES
|
||||
REPEAT_BRIEF = YES
|
||||
ABBREVIATE_BRIEF =
|
||||
ALWAYS_DETAILED_SEC = NO
|
||||
INLINE_INHERITED_MEMB = NO
|
||||
FULL_PATH_NAMES = NO
|
||||
STRIP_FROM_PATH =
|
||||
STRIP_FROM_INC_PATH =
|
||||
SHORT_NAMES = NO
|
||||
JAVADOC_AUTOBRIEF = YES
|
||||
MULTILINE_CPP_IS_BRIEF = NO
|
||||
DETAILS_AT_TOP = YES
|
||||
INHERIT_DOCS = YES
|
||||
SEPARATE_MEMBER_PAGES = NO
|
||||
TAB_SIZE = 4
|
||||
ALIASES =
|
||||
OPTIMIZE_OUTPUT_FOR_C = YES
|
||||
OPTIMIZE_OUTPUT_JAVA = NO
|
||||
BUILTIN_STL_SUPPORT = NO
|
||||
DISTRIBUTE_GROUP_DOC = NO
|
||||
SUBGROUPING = YES
|
||||
#---------------------------------------------------------------------------
|
||||
# Build related configuration options
|
||||
#---------------------------------------------------------------------------
|
||||
EXTRACT_ALL = YES
|
||||
EXTRACT_PRIVATE = NO
|
||||
EXTRACT_STATIC = YES
|
||||
EXTRACT_LOCAL_CLASSES = YES
|
||||
EXTRACT_LOCAL_METHODS = NO
|
||||
HIDE_UNDOC_MEMBERS = NO
|
||||
HIDE_UNDOC_CLASSES = NO
|
||||
HIDE_FRIEND_COMPOUNDS = NO
|
||||
HIDE_IN_BODY_DOCS = NO
|
||||
INTERNAL_DOCS = YES
|
||||
CASE_SENSE_NAMES = YES
|
||||
HIDE_SCOPE_NAMES = NO
|
||||
SHOW_INCLUDE_FILES = YES
|
||||
INLINE_INFO = YES
|
||||
SORT_MEMBER_DOCS = YES
|
||||
SORT_BRIEF_DOCS = YES
|
||||
SORT_BY_SCOPE_NAME = NO
|
||||
GENERATE_TODOLIST = YES
|
||||
GENERATE_TESTLIST = YES
|
||||
GENERATE_BUGLIST = YES
|
||||
GENERATE_DEPRECATEDLIST= YES
|
||||
ENABLED_SECTIONS =
|
||||
MAX_INITIALIZER_LINES = 30
|
||||
SHOW_USED_FILES = NO
|
||||
SHOW_DIRECTORIES = NO
|
||||
FILE_VERSION_FILTER =
|
||||
#---------------------------------------------------------------------------
|
||||
# configuration options related to warning and progress messages
|
||||
#---------------------------------------------------------------------------
|
||||
QUIET = YES
|
||||
WARNINGS = YES
|
||||
WARN_IF_UNDOCUMENTED = YES
|
||||
WARN_IF_DOC_ERROR = YES
|
||||
WARN_NO_PARAMDOC = NO
|
||||
WARN_FORMAT = "$file:$line: $text"
|
||||
WARN_LOGFILE =
|
||||
#---------------------------------------------------------------------------
|
||||
# configuration options related to the input files
|
||||
#---------------------------------------------------------------------------
|
||||
INPUT = ./../ ./../../../Source ./../../Common/include ./../../Common/Minimal
|
||||
FILE_PATTERNS = *.c \
|
||||
*.h \
|
||||
*.S
|
||||
RECURSIVE = YES
|
||||
EXCLUDE =
|
||||
EXCLUDE_SYMLINKS = NO
|
||||
EXCLUDE_PATTERNS =
|
||||
EXAMPLE_PATH =
|
||||
EXAMPLE_PATTERNS =
|
||||
EXAMPLE_RECURSIVE = NO
|
||||
IMAGE_PATH = ./../
|
||||
INPUT_FILTER =
|
||||
FILTER_PATTERNS =
|
||||
FILTER_SOURCE_FILES = NO
|
||||
#---------------------------------------------------------------------------
|
||||
# configuration options related to source browsing
|
||||
#---------------------------------------------------------------------------
|
||||
SOURCE_BROWSER = YES
|
||||
INLINE_SOURCES = YES
|
||||
STRIP_CODE_COMMENTS = YES
|
||||
REFERENCED_BY_RELATION = YES
|
||||
REFERENCES_RELATION = YES
|
||||
REFERENCES_LINK_SOURCE = YES
|
||||
USE_HTAGS = NO
|
||||
VERBATIM_HEADERS = YES
|
||||
#---------------------------------------------------------------------------
|
||||
# configuration options related to the alphabetical class index
|
||||
#---------------------------------------------------------------------------
|
||||
ALPHABETICAL_INDEX = NO
|
||||
COLS_IN_ALPHA_INDEX = 5
|
||||
IGNORE_PREFIX =
|
||||
#---------------------------------------------------------------------------
|
||||
# configuration options related to the HTML output
|
||||
#---------------------------------------------------------------------------
|
||||
GENERATE_HTML = YES
|
||||
HTML_OUTPUT =
|
||||
HTML_FILE_EXTENSION = .html
|
||||
HTML_HEADER =
|
||||
HTML_FOOTER =
|
||||
HTML_STYLESHEET =
|
||||
HTML_ALIGN_MEMBERS = YES
|
||||
GENERATE_HTMLHELP = NO
|
||||
CHM_FILE =
|
||||
HHC_LOCATION =
|
||||
GENERATE_CHI = NO
|
||||
BINARY_TOC = NO
|
||||
TOC_EXPAND = NO
|
||||
DISABLE_INDEX = NO
|
||||
ENUM_VALUES_PER_LINE = 4
|
||||
GENERATE_TREEVIEW = YES
|
||||
TREEVIEW_WIDTH = 250
|
||||
#---------------------------------------------------------------------------
|
||||
# configuration options related to the LaTeX output
|
||||
#---------------------------------------------------------------------------
|
||||
GENERATE_LATEX = NO
|
||||
LATEX_OUTPUT = latex
|
||||
LATEX_CMD_NAME = latex
|
||||
MAKEINDEX_CMD_NAME = makeindex
|
||||
COMPACT_LATEX = NO
|
||||
PAPER_TYPE = a4wide
|
||||
EXTRA_PACKAGES =
|
||||
LATEX_HEADER =
|
||||
PDF_HYPERLINKS = NO
|
||||
USE_PDFLATEX = NO
|
||||
LATEX_BATCHMODE = NO
|
||||
LATEX_HIDE_INDICES = NO
|
||||
#---------------------------------------------------------------------------
|
||||
# configuration options related to the RTF output
|
||||
#---------------------------------------------------------------------------
|
||||
GENERATE_RTF = NO
|
||||
RTF_OUTPUT = RTF
|
||||
COMPACT_RTF = NO
|
||||
RTF_HYPERLINKS = YES
|
||||
RTF_STYLESHEET_FILE =
|
||||
RTF_EXTENSIONS_FILE =
|
||||
#---------------------------------------------------------------------------
|
||||
# configuration options related to the man page output
|
||||
#---------------------------------------------------------------------------
|
||||
GENERATE_MAN = NO
|
||||
MAN_OUTPUT = man
|
||||
MAN_EXTENSION = .3
|
||||
MAN_LINKS = NO
|
||||
#---------------------------------------------------------------------------
|
||||
# configuration options related to the XML output
|
||||
#---------------------------------------------------------------------------
|
||||
GENERATE_XML = NO
|
||||
XML_OUTPUT = xml
|
||||
XML_SCHEMA =
|
||||
XML_DTD =
|
||||
XML_PROGRAMLISTING = YES
|
||||
#---------------------------------------------------------------------------
|
||||
# configuration options for the AutoGen Definitions output
|
||||
#---------------------------------------------------------------------------
|
||||
GENERATE_AUTOGEN_DEF = NO
|
||||
#---------------------------------------------------------------------------
|
||||
# configuration options related to the Perl module output
|
||||
#---------------------------------------------------------------------------
|
||||
GENERATE_PERLMOD = NO
|
||||
PERLMOD_LATEX = NO
|
||||
PERLMOD_PRETTY = YES
|
||||
PERLMOD_MAKEVAR_PREFIX =
|
||||
#---------------------------------------------------------------------------
|
||||
# Configuration options related to the preprocessor
|
||||
#---------------------------------------------------------------------------
|
||||
ENABLE_PREPROCESSING = YES
|
||||
MACRO_EXPANSION = YES
|
||||
EXPAND_ONLY_PREDEF = YES
|
||||
SEARCH_INCLUDES = YES
|
||||
INCLUDE_PATH = ../../../../../BOARDS/
|
||||
INCLUDE_FILE_PATTERNS =
|
||||
PREDEFINED = __GNUC__=4 \
|
||||
__attribute__()= \
|
||||
__AVR32__=1 \
|
||||
__AVR32_UC3A0512__=1 \
|
||||
__AVR32_ABI_COMPILER__ \
|
||||
BOARD=EVK1100
|
||||
EXPAND_AS_DEFINED =
|
||||
SKIP_FUNCTION_MACROS = YES
|
||||
#---------------------------------------------------------------------------
|
||||
# Configuration::additions related to external references
|
||||
#---------------------------------------------------------------------------
|
||||
TAGFILES =
|
||||
GENERATE_TAGFILE =
|
||||
ALLEXTERNALS = NO
|
||||
EXTERNAL_GROUPS = YES
|
||||
PERL_PATH = /usr/bin/perl
|
||||
#---------------------------------------------------------------------------
|
||||
# Configuration options related to the dot tool
|
||||
#---------------------------------------------------------------------------
|
||||
CLASS_DIAGRAMS = NO
|
||||
HIDE_UNDOC_RELATIONS = YES
|
||||
HAVE_DOT = NO
|
||||
CLASS_GRAPH = NO
|
||||
COLLABORATION_GRAPH = NO
|
||||
GROUP_GRAPHS = NO
|
||||
UML_LOOK = YES
|
||||
TEMPLATE_RELATIONS = YES
|
||||
INCLUDE_GRAPH = NO
|
||||
INCLUDED_BY_GRAPH = NO
|
||||
CALL_GRAPH = NO
|
||||
CALLER_GRAPH = NO
|
||||
GRAPHICAL_HIERARCHY = NO
|
||||
DIRECTORY_GRAPH = NO
|
||||
DOT_IMAGE_FORMAT = png
|
||||
DOT_PATH =
|
||||
DOTFILE_DIRS =
|
||||
MAX_DOT_GRAPH_WIDTH = 1024
|
||||
MAX_DOT_GRAPH_HEIGHT = 1024
|
||||
MAX_DOT_GRAPH_DEPTH = 0
|
||||
DOT_TRANSPARENT = NO
|
||||
DOT_MULTI_TARGETS = NO
|
||||
GENERATE_LEGEND = YES
|
||||
DOT_CLEANUP = YES
|
||||
#---------------------------------------------------------------------------
|
||||
# Configuration::additions related to the search engine
|
||||
#---------------------------------------------------------------------------
|
||||
SEARCHENGINE = NO
|
@ -1,618 +0,0 @@
|
||||
# Hey Emacs, this is a -*- makefile -*-
|
||||
|
||||
# Goals available on make command line:
|
||||
#
|
||||
# [all] Default goal: build the project.
|
||||
# clean Clean up the project.
|
||||
# rebuild Rebuild the project.
|
||||
# ccversion Display CC version information.
|
||||
# cppfiles file.i Generate preprocessed files from C source files.
|
||||
# asfiles file.x Generate preprocessed assembler files from C and assembler source files.
|
||||
# objfiles file.o Generate object files from C and assembler source files.
|
||||
# a file.a Archive: create A output file from object files.
|
||||
# elf file.elf Link: create ELF output file from object files.
|
||||
# lss file.lss Create extended listing from target output file.
|
||||
# sym file.sym Create symbol table from target output file.
|
||||
# hex file.hex Create Intel HEX image from ELF output file.
|
||||
# bin file.bin Create binary image from ELF output file.
|
||||
# sizes Display target size information.
|
||||
# isp Use ISP instead of JTAGICE mkII when programming.
|
||||
# cpuinfo Get CPU information.
|
||||
# halt Stop CPU execution.
|
||||
# chiperase Perform a JTAG Chip Erase command.
|
||||
# erase Perform a flash chip erase.
|
||||
# program Program MCU memory from ELF output file.
|
||||
# secureflash Protect chip by setting security bit.
|
||||
# reset Reset MCU.
|
||||
# debug Open a debug connection with the MCU.
|
||||
# run Start CPU execution.
|
||||
# readregs Read CPU registers.
|
||||
# doc Build the documentation.
|
||||
# cleandoc Clean up the documentation.
|
||||
# rebuilddoc Rebuild the documentation.
|
||||
# verbose Display main executed commands.
|
||||
|
||||
# Copyright (c) 2007, Atmel Corporation All rights reserved.
|
||||
#
|
||||
# Redistribution and use in source and binary forms, with or without
|
||||
# modification, are permitted provided that the following conditions are met:
|
||||
#
|
||||
# 1. Redistributions of source code must retain the above copyright notice, this
|
||||
# list of conditions and the following disclaimer.
|
||||
#
|
||||
# 2. Redistributions in binary form must reproduce the above copyright notice,
|
||||
# this list of conditions and the following disclaimer in the documentation and/
|
||||
# or other materials provided with the distribution.
|
||||
#
|
||||
# 3. The name of ATMEL may not be used to endorse or promote products derived
|
||||
# from this software without specific prior written permission.
|
||||
#
|
||||
# THIS SOFTWARE IS PROVIDED BY ATMEL ``AS IS'' AND ANY EXPRESS OR IMPLIED
|
||||
# WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
|
||||
# MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE EXPRESSLY AND
|
||||
# SPECIFICALLY DISCLAIMED. IN NO EVENT SHALL ATMEL BE LIABLE FOR ANY DIRECT,
|
||||
# INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
|
||||
# BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
|
||||
# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
|
||||
# OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
|
||||
# NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
|
||||
# EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||
|
||||
|
||||
# ** ** ** *** ** ** ** ** ** ** ** ** ** ** **
|
||||
# ENVIRONMENT SETTINGS
|
||||
# ** ** ** *** ** ** ** ** ** ** ** ** ** ** **
|
||||
|
||||
FirstWord = $(if $(1),$(word 1,$(1)))
|
||||
LastWord = $(if $(1),$(word $(words $(1)),$(1)))
|
||||
|
||||
MAKE = make
|
||||
MAKECFG = config.mk
|
||||
TGTTYPE = $(suffix $(TARGET))
|
||||
|
||||
RM = rm -Rf
|
||||
|
||||
AR = avr32-ar
|
||||
ARFLAGS = rcs
|
||||
|
||||
CPP = $(CC) -E
|
||||
CPPFLAGS = -march=$(ARCH) -mpart=$(PART) $(WARNINGS) $(DEFS) \
|
||||
$(PLATFORM_INC_PATH:%=-I%) $(INC_PATH:%=-I%) $(CPP_EXTRA_FLAGS)
|
||||
DPNDFILES = $(CSRCS:.c=.d) $(ASSRCS:.S=.d)
|
||||
CPPFILES = $(CSRCS:.c=.i)
|
||||
|
||||
CC = avr32-gcc
|
||||
CFLAGS = $(DEBUG) $(OPTIMIZATION) $(C_EXTRA_FLAGS) \
|
||||
$(PLATFORM_INC_PATH:%=-Wa,-I%) $(INC_PATH:%=-Wa,-I%) $(AS_EXTRA_FLAGS)
|
||||
ASFILES = $(CSRCS:.c=.x) $(ASSRCS:.S=.x)
|
||||
|
||||
AS = avr32-as
|
||||
ASFLAGS = $(DEBUG) \
|
||||
$(PLATFORM_INC_PATH:%=-Wa,-I%) $(INC_PATH:%=-Wa,-I%) $(AS_EXTRA_FLAGS)
|
||||
OBJFILES = $(CSRCS:.c=.o) $(ASSRCS:.S=.o)
|
||||
|
||||
LD = avr32-ld
|
||||
LDFLAGS = -march=$(ARCH) -mpart=$(PART) \
|
||||
$(LIB_PATH:%=-L%) $(LINKER_SCRIPT:%=-T%) $(LD_EXTRA_FLAGS)
|
||||
LOADLIBES =
|
||||
LDLIBS = $(LIBS:%=-l%)
|
||||
|
||||
OBJDUMP = avr32-objdump
|
||||
LSS = $(TARGET:$(TGTTYPE)=.lss)
|
||||
|
||||
NM = avr32-nm
|
||||
SYM = $(TARGET:$(TGTTYPE)=.sym)
|
||||
|
||||
OBJCOPY = avr32-objcopy
|
||||
HEX = $(TARGET:$(TGTTYPE)=.hex)
|
||||
BIN = $(TARGET:$(TGTTYPE)=.bin)
|
||||
|
||||
SIZE = avr32-size
|
||||
|
||||
SLEEP = sleep
|
||||
SLEEPUSB = 9
|
||||
|
||||
PROGRAM = avr32program
|
||||
|
||||
ISP = batchisp
|
||||
ISPFLAGS = -device at32$(PART) -hardware usb -operation
|
||||
|
||||
DBGPROXY = avr32gdbproxy
|
||||
|
||||
DOCGEN = doxygen
|
||||
|
||||
|
||||
# ** ** ** *** ** ** ** ** ** ** ** ** ** ** **
|
||||
# MESSAGES
|
||||
# ** ** ** *** ** ** ** ** ** ** ** ** ** ** **
|
||||
|
||||
ERR_TARGET_TYPE = Target type not supported: `$(TGTTYPE)'
|
||||
MSG_CLEANING = Cleaning project.
|
||||
MSG_PREPROCESSING = Preprocessing \`$<\' to \`$@\'.
|
||||
MSG_COMPILING = Compiling \`$<\' to \`$@\'.
|
||||
MSG_ASSEMBLING = Assembling \`$<\' to \`$@\'.
|
||||
MSG_ARCHIVING = Archiving to \`$@\'.
|
||||
MSG_LINKING = Linking to \`$@\'.
|
||||
MSG_EXTENDED_LISTING = Creating extended listing to \`$@\'.
|
||||
MSG_SYMBOL_TABLE = Creating symbol table to \`$@\'.
|
||||
MSG_IHEX_IMAGE = Creating Intel HEX image to \`$@\'.
|
||||
MSG_BINARY_IMAGE = Creating binary image to \`$@\'.
|
||||
MSG_GETTING_CPU_INFO = Getting CPU information.
|
||||
MSG_HALTING = Stopping CPU execution.
|
||||
MSG_ERASING_CHIP = Performing a JTAG Chip Erase command.
|
||||
MSG_ERASING = Performing a flash chip erase.
|
||||
MSG_PROGRAMMING = Programming MCU memory from \`$(TARGET)\'.
|
||||
MSG_SECURING_FLASH = Protecting chip by setting security bit.
|
||||
MSG_RESETTING = Resetting MCU.
|
||||
MSG_DEBUGGING = Opening debug connection with MCU.
|
||||
MSG_RUNNING = Starting CPU execution.
|
||||
MSG_READING_CPU_REGS = Reading CPU registers.
|
||||
MSG_CLEANING_DOC = Cleaning documentation.
|
||||
MSG_GENERATING_DOC = Generating documentation to \`$(DOC_PATH)\'.
|
||||
|
||||
|
||||
# ** ** ** *** ** ** ** ** ** ** ** ** ** ** **
|
||||
# MAKE RULES
|
||||
# ** ** ** *** ** ** ** ** ** ** ** ** ** ** **
|
||||
|
||||
# Include the make configuration file.
|
||||
include $(MAKECFG)
|
||||
|
||||
# ** ** TOP-LEVEL RULES ** **
|
||||
|
||||
# Default goal: build the project.
|
||||
ifeq ($(TGTTYPE),.a)
|
||||
.PHONY: all
|
||||
all: ccversion a lss sym sizes
|
||||
else
|
||||
ifeq ($(TGTTYPE),.elf)
|
||||
.PHONY: all
|
||||
all: ccversion elf lss sym hex bin sizes
|
||||
else
|
||||
$(error $(ERR_TARGET_TYPE))
|
||||
endif
|
||||
endif
|
||||
|
||||
# Clean up the project.
|
||||
.PHONY: clean
|
||||
clean:
|
||||
@echo $(MSG_CLEANING)
|
||||
-$(VERBOSE_CMD)$(RM) $(BIN)
|
||||
-$(VERBOSE_CMD)$(RM) $(HEX)
|
||||
-$(VERBOSE_CMD)$(RM) $(SYM)
|
||||
-$(VERBOSE_CMD)$(RM) $(LSS)
|
||||
-$(VERBOSE_CMD)$(RM) $(TARGET)
|
||||
-$(VERBOSE_CMD)$(RM) $(OBJFILES)
|
||||
-$(VERBOSE_CMD)$(RM) $(ASFILES)
|
||||
-$(VERBOSE_CMD)$(RM) $(CPPFILES)
|
||||
-$(VERBOSE_CMD)$(RM) $(DPNDFILES)
|
||||
$(VERBOSE_NL)
|
||||
|
||||
# Rebuild the project.
|
||||
.PHONY: rebuild
|
||||
rebuild: clean all
|
||||
|
||||
# Display CC version information.
|
||||
.PHONY: ccversion
|
||||
ccversion:
|
||||
@echo
|
||||
@echo
|
||||
@$(CC) --version
|
||||
|
||||
# Generate preprocessed files from C source files.
|
||||
.PHONY: cppfiles
|
||||
cppfiles: $(CPPFILES)
|
||||
|
||||
# Generate preprocessed assembler files from C and assembler source files.
|
||||
.PHONY: asfiles
|
||||
asfiles: $(ASFILES)
|
||||
|
||||
# Generate object files from C and assembler source files.
|
||||
.PHONY: objfiles
|
||||
objfiles: $(OBJFILES)
|
||||
|
||||
ifeq ($(TGTTYPE),.a)
|
||||
# Archive: create A output file from object files.
|
||||
.PHONY: a
|
||||
a: $(TARGET)
|
||||
else
|
||||
ifeq ($(TGTTYPE),.elf)
|
||||
# Link: create ELF output file from object files.
|
||||
.PHONY: elf
|
||||
elf: $(TARGET)
|
||||
endif
|
||||
endif
|
||||
|
||||
# Create extended listing from target output file.
|
||||
.PHONY: lss
|
||||
lss: $(LSS)
|
||||
|
||||
# Create symbol table from target output file.
|
||||
.PHONY: sym
|
||||
sym: $(SYM)
|
||||
|
||||
ifeq ($(TGTTYPE),.elf)
|
||||
|
||||
# Create Intel HEX image from ELF output file.
|
||||
.PHONY: hex
|
||||
hex: $(HEX)
|
||||
|
||||
# Create binary image from ELF output file.
|
||||
.PHONY: bin
|
||||
bin: $(BIN)
|
||||
|
||||
endif
|
||||
|
||||
# Display target size information.
|
||||
.PHONY: sizes
|
||||
sizes: $(TARGET)
|
||||
@echo
|
||||
@echo
|
||||
ifeq ($(TGTTYPE),.a)
|
||||
@$(SIZE) -Bxt $<
|
||||
else
|
||||
ifeq ($(TGTTYPE),.elf)
|
||||
@$(SIZE) -Ax $<
|
||||
@$(SIZE) -Bx $<
|
||||
endif
|
||||
endif
|
||||
@echo
|
||||
@echo
|
||||
|
||||
ifeq ($(TGTTYPE),.elf)
|
||||
|
||||
# Use ISP instead of JTAGICE mkII when programming.
|
||||
.PHONY: isp
|
||||
ifeq ($(filter-out isp verbose,$(MAKECMDGOALS)),)
|
||||
isp: all
|
||||
else
|
||||
isp:
|
||||
@:
|
||||
endif
|
||||
|
||||
ifeq ($(findstring isp,$(MAKECMDGOALS)),)
|
||||
|
||||
# Get CPU information.
|
||||
.PHONY: cpuinfo
|
||||
cpuinfo:
|
||||
@echo
|
||||
@echo $(MSG_GETTING_CPU_INFO)
|
||||
$(VERBOSE_CMD)$(PROGRAM) cpuinfo
|
||||
ifneq ($(call LastWord,$(filter cpuinfo chiperase erase program secureflash reset debug run readregs,$(MAKECMDGOALS))),cpuinfo)
|
||||
@$(SLEEP) $(SLEEPUSB)
|
||||
else
|
||||
@echo
|
||||
endif
|
||||
|
||||
# Stop CPU execution.
|
||||
.PHONY: halt
|
||||
halt:
|
||||
ifeq ($(filter cpuinfo chiperase erase program secureflash reset run readregs,$(MAKECMDGOALS)),)
|
||||
@echo
|
||||
@echo $(MSG_HALTING)
|
||||
$(VERBOSE_CMD)$(PROGRAM) halt
|
||||
ifneq ($(call LastWord,$(filter halt debug,$(MAKECMDGOALS))),halt)
|
||||
@$(SLEEP) $(SLEEPUSB)
|
||||
else
|
||||
@echo
|
||||
endif
|
||||
else
|
||||
@:
|
||||
endif
|
||||
|
||||
# Perform a JTAG Chip Erase command.
|
||||
.PHONY: chiperase
|
||||
chiperase:
|
||||
@echo
|
||||
@echo $(MSG_ERASING_CHIP)
|
||||
$(VERBOSE_CMD)$(PROGRAM) chiperase
|
||||
ifneq ($(call LastWord,$(filter cpuinfo chiperase program secureflash reset debug run readregs,$(MAKECMDGOALS))),chiperase)
|
||||
@$(SLEEP) $(SLEEPUSB)
|
||||
else
|
||||
@echo
|
||||
endif
|
||||
|
||||
# Perform a flash chip erase.
|
||||
.PHONY: erase
|
||||
erase:
|
||||
ifeq ($(filter chiperase program,$(MAKECMDGOALS)),)
|
||||
@echo
|
||||
@echo $(MSG_ERASING)
|
||||
$(VERBOSE_CMD)$(PROGRAM) erase $(FLASH:%=-f%)
|
||||
ifneq ($(call LastWord,$(filter cpuinfo erase secureflash reset debug run readregs,$(MAKECMDGOALS))),erase)
|
||||
@$(SLEEP) $(SLEEPUSB)
|
||||
else
|
||||
@echo
|
||||
endif
|
||||
else
|
||||
@:
|
||||
endif
|
||||
|
||||
# Program MCU memory from ELF output file.
|
||||
.PHONY: program
|
||||
program: all
|
||||
@echo
|
||||
@echo $(MSG_PROGRAMMING)
|
||||
$(VERBOSE_CMD)$(PROGRAM) program $(FLASH:%=-f%) $(PROG_CLOCK:%=-c%) -e -v -R $(if $(findstring run,$(MAKECMDGOALS)),-r) $(TARGET)
|
||||
ifneq ($(call LastWord,$(filter cpuinfo chiperase program secureflash debug readregs,$(MAKECMDGOALS))),program)
|
||||
@$(SLEEP) $(SLEEPUSB)
|
||||
else
|
||||
@echo
|
||||
endif
|
||||
|
||||
# Protect chip by setting security bit.
|
||||
.PHONY: secureflash
|
||||
secureflash:
|
||||
@echo
|
||||
@echo $(MSG_SECURING_FLASH)
|
||||
$(VERBOSE_CMD)$(PROGRAM) secureflash
|
||||
ifneq ($(call LastWord,$(filter cpuinfo chiperase erase program secureflash reset debug run readregs,$(MAKECMDGOALS))),secureflash)
|
||||
@$(SLEEP) $(SLEEPUSB)
|
||||
else
|
||||
@echo
|
||||
endif
|
||||
|
||||
# Reset MCU.
|
||||
.PHONY: reset
|
||||
reset:
|
||||
ifeq ($(filter program run,$(MAKECMDGOALS)),)
|
||||
@echo
|
||||
@echo $(MSG_RESETTING)
|
||||
$(VERBOSE_CMD)$(PROGRAM) reset
|
||||
ifneq ($(call LastWord,$(filter cpuinfo chiperase erase secureflash reset debug readregs,$(MAKECMDGOALS))),reset)
|
||||
@$(SLEEP) $(SLEEPUSB)
|
||||
else
|
||||
@echo
|
||||
endif
|
||||
else
|
||||
@:
|
||||
endif
|
||||
|
||||
# Open a debug connection with the MCU.
|
||||
.PHONY: debug
|
||||
debug:
|
||||
@echo
|
||||
@echo $(MSG_DEBUGGING)
|
||||
$(VERBOSE_CMD)$(DBGPROXY) $(FLASH:%=-f%)
|
||||
ifneq ($(call LastWord,$(filter cpuinfo halt chiperase erase program secureflash reset debug run readregs,$(MAKECMDGOALS))),debug)
|
||||
@$(SLEEP) $(SLEEPUSB)
|
||||
else
|
||||
@echo
|
||||
endif
|
||||
|
||||
# Start CPU execution.
|
||||
.PHONY: run
|
||||
run:
|
||||
ifeq ($(findstring program,$(MAKECMDGOALS)),)
|
||||
@echo
|
||||
@echo $(MSG_RUNNING)
|
||||
$(VERBOSE_CMD)$(PROGRAM) run $(if $(findstring reset,$(MAKECMDGOALS)),-R)
|
||||
ifneq ($(call LastWord,$(filter cpuinfo chiperase erase secureflash debug run readregs,$(MAKECMDGOALS))),run)
|
||||
@$(SLEEP) $(SLEEPUSB)
|
||||
else
|
||||
@echo
|
||||
endif
|
||||
else
|
||||
@:
|
||||
endif
|
||||
|
||||
# Read CPU registers.
|
||||
.PHONY: readregs
|
||||
readregs:
|
||||
@echo
|
||||
@echo $(MSG_READING_CPU_REGS)
|
||||
$(VERBOSE_CMD)$(PROGRAM) readregs
|
||||
ifneq ($(call LastWord,$(filter cpuinfo chiperase erase program secureflash reset debug run readregs,$(MAKECMDGOALS))),readregs)
|
||||
@$(SLEEP) $(SLEEPUSB)
|
||||
else
|
||||
@echo
|
||||
endif
|
||||
|
||||
else
|
||||
|
||||
# Perform a flash chip erase.
|
||||
.PHONY: erase
|
||||
erase:
|
||||
ifeq ($(findstring program,$(MAKECMDGOALS)),)
|
||||
@echo
|
||||
@echo $(MSG_ERASING)
|
||||
$(VERBOSE_CMD)$(ISP) $(ISPFLAGS) erase f memory flash blankcheck
|
||||
ifeq ($(call LastWord,$(filter erase secureflash debug run,$(MAKECMDGOALS))),erase)
|
||||
@echo
|
||||
endif
|
||||
else
|
||||
@:
|
||||
endif
|
||||
|
||||
# Program MCU memory from ELF output file.
|
||||
.PHONY: program
|
||||
program: all
|
||||
@echo
|
||||
@echo $(MSG_PROGRAMMING)
|
||||
$(VERBOSE_CMD)$(ISP) $(ISPFLAGS) erase f memory flash blankcheck loadbuffer $(TARGET) program verify $(if $(findstring run,$(MAKECMDGOALS)),$(if $(findstring secureflash,$(MAKECMDGOALS)),,start $(if $(findstring reset,$(MAKECMDGOALS)),,no)reset 0))
|
||||
ifeq ($(call LastWord,$(filter program secureflash debug,$(MAKECMDGOALS))),program)
|
||||
@echo
|
||||
endif
|
||||
|
||||
# Protect chip by setting security bit.
|
||||
.PHONY: secureflash
|
||||
secureflash:
|
||||
@echo
|
||||
@echo $(MSG_SECURING_FLASH)
|
||||
$(VERBOSE_CMD)$(ISP) $(ISPFLAGS) memory security addrange 0x0 0x0 fillbuffer 0x01 program $(if $(findstring run,$(MAKECMDGOALS)),start $(if $(findstring reset,$(MAKECMDGOALS)),,no)reset 0)
|
||||
ifeq ($(call LastWord,$(filter erase program secureflash debug,$(MAKECMDGOALS))),secureflash)
|
||||
@echo
|
||||
endif
|
||||
|
||||
# Reset MCU.
|
||||
.PHONY: reset
|
||||
reset:
|
||||
@:
|
||||
|
||||
# Open a debug connection with the MCU.
|
||||
.PHONY: debug
|
||||
debug:
|
||||
@echo
|
||||
@echo $(MSG_DEBUGGING)
|
||||
$(VERBOSE_CMD)$(DBGPROXY) $(FLASH:%=-f%)
|
||||
ifeq ($(call LastWord,$(filter erase program secureflash debug run,$(MAKECMDGOALS))),debug)
|
||||
@echo
|
||||
endif
|
||||
|
||||
# Start CPU execution.
|
||||
.PHONY: run
|
||||
run:
|
||||
ifeq ($(filter program secureflash,$(MAKECMDGOALS)),)
|
||||
@echo
|
||||
@echo $(MSG_RUNNING)
|
||||
$(VERBOSE_CMD)$(ISP) $(ISPFLAGS) start $(if $(findstring reset,$(MAKECMDGOALS)),,no)reset 0
|
||||
ifeq ($(call LastWord,$(filter erase debug run,$(MAKECMDGOALS))),run)
|
||||
@echo
|
||||
endif
|
||||
else
|
||||
@:
|
||||
endif
|
||||
|
||||
endif
|
||||
|
||||
endif
|
||||
|
||||
# Build the documentation.
|
||||
.PHONY: doc
|
||||
doc:
|
||||
@echo
|
||||
@echo $(MSG_GENERATING_DOC)
|
||||
$(VERBOSE_CMD)cd $(dir $(DOC_CFG)) && $(DOCGEN) $(notdir $(DOC_CFG))
|
||||
@echo
|
||||
|
||||
# Clean up the documentation.
|
||||
.PHONY: cleandoc
|
||||
cleandoc:
|
||||
@echo $(MSG_CLEANING_DOC)
|
||||
-$(VERBOSE_CMD)$(RM) $(DOC_PATH)
|
||||
$(VERBOSE_NL)
|
||||
|
||||
# Rebuild the documentation.
|
||||
.PHONY: rebuilddoc
|
||||
rebuilddoc: cleandoc doc
|
||||
|
||||
# Display main executed commands.
|
||||
.PHONY: verbose
|
||||
ifeq ($(filter-out isp verbose,$(MAKECMDGOALS)),)
|
||||
verbose: all
|
||||
else
|
||||
verbose:
|
||||
@:
|
||||
endif
|
||||
ifneq ($(findstring verbose,$(MAKECMDGOALS)),)
|
||||
# Prefix displaying the following command if and only if verbose is a goal.
|
||||
VERBOSE_CMD =
|
||||
# New line displayed if and only if verbose is a goal.
|
||||
VERBOSE_NL = @echo
|
||||
else
|
||||
VERBOSE_CMD = @
|
||||
VERBOSE_NL =
|
||||
endif
|
||||
|
||||
# ** ** COMPILATION RULES ** **
|
||||
|
||||
# Include silently the dependency files.
|
||||
-include $(DPNDFILES)
|
||||
|
||||
# The dependency files are not built alone but along with first generation files.
|
||||
$(DPNDFILES):
|
||||
|
||||
# First generation files depend on make files.
|
||||
$(CPPFILES) $(ASFILES) $(OBJFILES): Makefile $(MAKECFG)
|
||||
|
||||
ifeq ($(TGTTYPE),.elf)
|
||||
# Files resulting from linking depend on linker script.
|
||||
$(TARGET): $(LINKER_SCRIPT)
|
||||
endif
|
||||
|
||||
# Preprocess: create preprocessed files from C source files.
|
||||
%.i: %.c %.d
|
||||
@echo $(MSG_PREPROCESSING)
|
||||
$(VERBOSE_CMD)$(CPP) $(CPPFLAGS) -MD -MP -MT '$*.i $*.x $*.o' -o $@ $<
|
||||
@touch $*.d
|
||||
@touch $@
|
||||
$(VERBOSE_NL)
|
||||
|
||||
# Preprocess & compile: create assembler files from C source files.
|
||||
%.x: %.c %.d
|
||||
@echo $(MSG_COMPILING)
|
||||
$(VERBOSE_CMD)$(CC) -S $(CPPFLAGS) -MD -MP -MT '$*.i $*.o' $(CFLAGS) -o $@ $<
|
||||
@touch $*.d
|
||||
@touch $@
|
||||
$(VERBOSE_NL)
|
||||
|
||||
# Preprocess: create preprocessed files from assembler source files.
|
||||
%.x: %.S %.d
|
||||
@echo $(MSG_PREPROCESSING)
|
||||
$(VERBOSE_CMD)$(CPP) $(CPPFLAGS) -MD -MP -MT '$*.x $*.o' -o $@ $<
|
||||
@touch $*.d
|
||||
@touch $@
|
||||
$(VERBOSE_NL)
|
||||
|
||||
# Preprocess, compile & assemble: create object files from C source files.
|
||||
%.o: %.c %.d
|
||||
@echo $(MSG_COMPILING)
|
||||
$(VERBOSE_CMD)$(CC) -c $(CPPFLAGS) -MD -MP -MT '$*.i $*.x' $(CFLAGS) -o $@ $<
|
||||
@touch $*.d
|
||||
@touch $@
|
||||
$(VERBOSE_NL)
|
||||
|
||||
# Preprocess & assemble: create object files from assembler source files.
|
||||
%.o: %.S %.d
|
||||
@echo $(MSG_ASSEMBLING)
|
||||
$(VERBOSE_CMD)$(CC) -c $(CPPFLAGS) -MD -MP -MT '$*.x' $(ASFLAGS) -o $@ $<
|
||||
@touch $*.d
|
||||
@touch $@
|
||||
$(VERBOSE_NL)
|
||||
|
||||
.PRECIOUS: $(OBJFILES)
|
||||
ifeq ($(TGTTYPE),.a)
|
||||
# Archive: create A output file from object files.
|
||||
.SECONDARY: $(TARGET)
|
||||
$(TARGET): $(OBJFILES)
|
||||
@echo $(MSG_ARCHIVING)
|
||||
$(VERBOSE_CMD)$(AR) $(ARFLAGS) $@ $(filter %.o,$+)
|
||||
$(VERBOSE_NL)
|
||||
else
|
||||
ifeq ($(TGTTYPE),.elf)
|
||||
# Link: create ELF output file from object files.
|
||||
.SECONDARY: $(TARGET)
|
||||
$(TARGET): $(OBJFILES)
|
||||
@echo $(MSG_LINKING)
|
||||
$(VERBOSE_CMD)$(CC) $(LDFLAGS) $(filter %.o,$+) $(LOADLIBES) $(LDLIBS) -o $@
|
||||
$(VERBOSE_NL)
|
||||
endif
|
||||
endif
|
||||
|
||||
# Create extended listing from target output file.
|
||||
$(LSS): $(TARGET)
|
||||
@echo $(MSG_EXTENDED_LISTING)
|
||||
$(VERBOSE_CMD)$(OBJDUMP) -h -S $< > $@
|
||||
$(VERBOSE_NL)
|
||||
|
||||
# Create symbol table from target output file.
|
||||
$(SYM): $(TARGET)
|
||||
@echo $(MSG_SYMBOL_TABLE)
|
||||
$(VERBOSE_CMD)$(NM) -n $< > $@
|
||||
$(VERBOSE_NL)
|
||||
|
||||
ifeq ($(TGTTYPE),.elf)
|
||||
|
||||
# Create Intel HEX image from ELF output file.
|
||||
$(HEX): $(TARGET)
|
||||
@echo $(MSG_IHEX_IMAGE)
|
||||
$(VERBOSE_CMD)$(OBJCOPY) -O ihex $< $@
|
||||
$(VERBOSE_NL)
|
||||
|
||||
# Create binary image from ELF output file.
|
||||
$(BIN): $(TARGET)
|
||||
@echo $(MSG_BINARY_IMAGE)
|
||||
$(VERBOSE_CMD)$(OBJCOPY) -O binary $< $@
|
||||
$(VERBOSE_NL)
|
||||
|
||||
endif
|
@ -1,150 +0,0 @@
|
||||
# Hey Emacs, this is a -*- makefile -*-
|
||||
|
||||
# The purpose of this file is to define the build configuration variables used
|
||||
# by the generic Makefile. See Makefile header for further information.
|
||||
|
||||
# Copyright (c) 2007, Atmel Corporation All rights reserved.
|
||||
#
|
||||
# Redistribution and use in source and binary forms, with or without
|
||||
# modification, are permitted provided that the following conditions are met:
|
||||
#
|
||||
# 1. Redistributions of source code must retain the above copyright notice, this
|
||||
# list of conditions and the following disclaimer.
|
||||
#
|
||||
# 2. Redistributions in binary form must reproduce the above copyright notice,
|
||||
# this list of conditions and the following disclaimer in the documentation and/
|
||||
# or other materials provided with the distribution.
|
||||
#
|
||||
# 3. The name of ATMEL may not be used to endorse or promote products derived
|
||||
# from this software without specific prior written permission.
|
||||
#
|
||||
# THIS SOFTWARE IS PROVIDED BY ATMEL ``AS IS'' AND ANY EXPRESS OR IMPLIED
|
||||
# WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
|
||||
# MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE EXPRESSLY AND
|
||||
# SPECIFICALLY DISCLAIMED. IN NO EVENT SHALL ATMEL BE LIABLE FOR ANY DIRECT,
|
||||
# INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
|
||||
# BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
|
||||
# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
|
||||
# OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
|
||||
# NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
|
||||
# EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||
|
||||
|
||||
# Base paths
|
||||
PRJ_PATH = ../..
|
||||
APPS_PATH = $(PRJ_PATH)/APPLICATIONS
|
||||
BRDS_PATH = $(PRJ_PATH)/BOARDS
|
||||
COMP_PATH = $(PRJ_PATH)/COMPONENTS
|
||||
DRVR_PATH = $(PRJ_PATH)/DRIVERS
|
||||
SERV_PATH = $(PRJ_PATH)/SERVICES
|
||||
UTIL_PATH = $(PRJ_PATH)/UTILS
|
||||
|
||||
# CPU architecture: {ap|uc}
|
||||
ARCH = uc
|
||||
|
||||
# Part: {none|ap7xxx|uc3xxxxx}
|
||||
PART = uc3b0256
|
||||
|
||||
# Flash memories: [{cfi|internal}@address,size]...
|
||||
FLASH = internal@0x80000000,256Kb
|
||||
|
||||
# Clock source to use when programming: [{xtal|extclk|int}]
|
||||
PROG_CLOCK = xtal
|
||||
|
||||
# Device/Platform/Board include path
|
||||
PLATFORM_INC_PATH = \
|
||||
$(BRDS_PATH)/
|
||||
|
||||
# Target name: {*.a|*.elf}
|
||||
TARGET = $(PART)-rtosdemo.elf
|
||||
|
||||
# Definitions: [-D name[=definition]...] [-U name...]
|
||||
# Things that might be added to DEFS:
|
||||
# BOARD Board used: {EVKxxxx}
|
||||
# EXT_BOARD Extension board used (if any): {EXTxxxx}
|
||||
DEFS = -D BOARD=EVK1101
|
||||
|
||||
# Include path
|
||||
INC_PATH = \
|
||||
$(UTIL_PATH)/ \
|
||||
$(UTIL_PATH)/PREPROCESSOR/ \
|
||||
$(SERV_PATH)/USB/CLASS/DFU/EXAMPLES/ISP/BOOT/ \
|
||||
$(DRVR_PATH)/INTC/ \
|
||||
$(DRVR_PATH)/PM/ \
|
||||
$(DRVR_PATH)/GPIO/ \
|
||||
$(DRVR_PATH)/TC/ \
|
||||
../../../../Source/portable/GCC/AVR32_UC3/ \
|
||||
../../../../Source/include/ \
|
||||
../../../Common/include/ \
|
||||
../../
|
||||
|
||||
# C source files
|
||||
CSRCS = \
|
||||
$(BRDS_PATH)/EVK1101/led.c \
|
||||
$(DRVR_PATH)/INTC/intc.c \
|
||||
$(DRVR_PATH)/PM/pm.c \
|
||||
$(DRVR_PATH)/GPIO/gpio.c \
|
||||
$(DRVR_PATH)/TC/tc.c \
|
||||
../../../../Source/portable/GCC/AVR32_UC3/port.c \
|
||||
../../../../Source/portable/MemMang/heap_3.c \
|
||||
../../../../Source/list.c \
|
||||
../../../../Source/queue.c \
|
||||
../../../../Source/tasks.c \
|
||||
../../../Common/Minimal/BlockQ.c \
|
||||
../../../Common/Minimal/comtest.c \
|
||||
../../../Common/Minimal/death.c \
|
||||
../../../Common/Minimal/dynamic.c \
|
||||
../../../Common/Minimal/flash.c \
|
||||
../../../Common/Minimal/flop.c \
|
||||
../../../Common/Minimal/integer.c \
|
||||
../../../Common/Minimal/PollQ.c \
|
||||
../../../Common/Minimal/semtest.c \
|
||||
../../ParTest/ParTest.c \
|
||||
../../serial/serial.c \
|
||||
../../main.c
|
||||
|
||||
# Assembler source files
|
||||
ASSRCS = \
|
||||
$(SERV_PATH)/USB/CLASS/DFU/EXAMPLES/ISP/BOOT/trampoline.S \
|
||||
../../../../Source/portable/GCC/AVR32_UC3/exception.S
|
||||
|
||||
# Library path
|
||||
LIB_PATH =
|
||||
|
||||
# Libraries to link with the project
|
||||
LIBS =
|
||||
|
||||
# Linker script file if any
|
||||
LINKER_SCRIPT = $(UTIL_PATH)/LINKER_SCRIPTS/AT32UC3B/0256/GCC/link_uc3b0256.lds
|
||||
|
||||
# Options to request or suppress warnings: [-fsyntax-only] [-pedantic[-errors]] [-w] [-Wwarning...]
|
||||
# For further details, refer to the chapter "GCC Command Options" of the GCC manual.
|
||||
WARNINGS = -Wall
|
||||
|
||||
# Options for debugging: [-g]...
|
||||
# For further details, refer to the chapter "GCC Command Options" of the GCC manual.
|
||||
DEBUG = -g
|
||||
|
||||
# Options that control optimization: [-O[0|1|2|3|s]]...
|
||||
# For further details, refer to the chapter "GCC Command Options" of the GCC manual.
|
||||
OPTIMIZATION = -O0 -ffunction-sections -fdata-sections
|
||||
|
||||
# Extra flags to use when preprocessing
|
||||
CPP_EXTRA_FLAGS =
|
||||
|
||||
# Extra flags to use when compiling
|
||||
C_EXTRA_FLAGS =
|
||||
|
||||
# Extra flags to use when assembling
|
||||
AS_EXTRA_FLAGS =
|
||||
|
||||
# Extra flags to use when linking
|
||||
LD_EXTRA_FLAGS = -Wl,--gc-sections -Wl,-e,_trampoline
|
||||
|
||||
# Documentation path
|
||||
DOC_PATH = \
|
||||
../../DOC/
|
||||
|
||||
# Documentation configuration file
|
||||
DOC_CFG = \
|
||||
../doxyfile.doxygen
|
@ -1,29 +0,0 @@
|
||||
target extended-remote :4711
|
||||
symbol uc3b0256-rtosdemo.elf
|
||||
|
||||
b _handle_Unrecoverable_Exception
|
||||
b _handle_TLB_Multiple_Hit
|
||||
b _handle_Bus_Error_Data_Fetch
|
||||
b _handle_Bus_Error_Instruction_Fetch
|
||||
b _handle_NMI
|
||||
b _handle_Instruction_Address
|
||||
b _handle_ITLB_Protection
|
||||
b _handle_Breakpoint
|
||||
b _handle_Illegal_Opcode
|
||||
b _handle_Unimplemented_Instruction
|
||||
b _handle_Privilege_Violation
|
||||
b _handle_Floating_Point
|
||||
b _handle_Coprocessor_Absent
|
||||
b _handle_Data_Address_Read
|
||||
b _handle_Data_Address_Write
|
||||
b _handle_DTLB_Protection_Read
|
||||
b _handle_DTLB_Protection_Write
|
||||
b _handle_DTLB_Modified
|
||||
b _handle_ITLB_Miss
|
||||
b _handle_DTLB_Miss_Read
|
||||
b _handle_DTLB_Miss_Write
|
||||
|
||||
define current_task
|
||||
printf "Task name: %s\n", ((tskTCB *)pxCurrentTCB)->pcTaskName
|
||||
printf "pxTopOfStack: %x\n", ((tskTCB *)pxCurrentTCB)->pxTopOfStack
|
||||
end
|
@ -1,232 +0,0 @@
|
||||
# Doxyfile 1.4.7
|
||||
|
||||
#---------------------------------------------------------------------------
|
||||
# Project related configuration options
|
||||
#---------------------------------------------------------------------------
|
||||
PROJECT_NAME = "AVR32 UC3 - FreeRTOS Real Time Kernel"
|
||||
PROJECT_NUMBER =
|
||||
OUTPUT_DIRECTORY = ../DOC
|
||||
CREATE_SUBDIRS = NO
|
||||
OUTPUT_LANGUAGE = English
|
||||
USE_WINDOWS_ENCODING = YES
|
||||
BRIEF_MEMBER_DESC = YES
|
||||
REPEAT_BRIEF = YES
|
||||
ABBREVIATE_BRIEF =
|
||||
ALWAYS_DETAILED_SEC = NO
|
||||
INLINE_INHERITED_MEMB = NO
|
||||
FULL_PATH_NAMES = NO
|
||||
STRIP_FROM_PATH =
|
||||
STRIP_FROM_INC_PATH =
|
||||
SHORT_NAMES = NO
|
||||
JAVADOC_AUTOBRIEF = YES
|
||||
MULTILINE_CPP_IS_BRIEF = NO
|
||||
DETAILS_AT_TOP = YES
|
||||
INHERIT_DOCS = YES
|
||||
SEPARATE_MEMBER_PAGES = NO
|
||||
TAB_SIZE = 4
|
||||
ALIASES =
|
||||
OPTIMIZE_OUTPUT_FOR_C = YES
|
||||
OPTIMIZE_OUTPUT_JAVA = NO
|
||||
BUILTIN_STL_SUPPORT = NO
|
||||
DISTRIBUTE_GROUP_DOC = NO
|
||||
SUBGROUPING = YES
|
||||
#---------------------------------------------------------------------------
|
||||
# Build related configuration options
|
||||
#---------------------------------------------------------------------------
|
||||
EXTRACT_ALL = YES
|
||||
EXTRACT_PRIVATE = NO
|
||||
EXTRACT_STATIC = YES
|
||||
EXTRACT_LOCAL_CLASSES = YES
|
||||
EXTRACT_LOCAL_METHODS = NO
|
||||
HIDE_UNDOC_MEMBERS = NO
|
||||
HIDE_UNDOC_CLASSES = NO
|
||||
HIDE_FRIEND_COMPOUNDS = NO
|
||||
HIDE_IN_BODY_DOCS = NO
|
||||
INTERNAL_DOCS = YES
|
||||
CASE_SENSE_NAMES = YES
|
||||
HIDE_SCOPE_NAMES = NO
|
||||
SHOW_INCLUDE_FILES = YES
|
||||
INLINE_INFO = YES
|
||||
SORT_MEMBER_DOCS = YES
|
||||
SORT_BRIEF_DOCS = YES
|
||||
SORT_BY_SCOPE_NAME = NO
|
||||
GENERATE_TODOLIST = YES
|
||||
GENERATE_TESTLIST = YES
|
||||
GENERATE_BUGLIST = YES
|
||||
GENERATE_DEPRECATEDLIST= YES
|
||||
ENABLED_SECTIONS =
|
||||
MAX_INITIALIZER_LINES = 30
|
||||
SHOW_USED_FILES = NO
|
||||
SHOW_DIRECTORIES = NO
|
||||
FILE_VERSION_FILTER =
|
||||
#---------------------------------------------------------------------------
|
||||
# configuration options related to warning and progress messages
|
||||
#---------------------------------------------------------------------------
|
||||
QUIET = YES
|
||||
WARNINGS = YES
|
||||
WARN_IF_UNDOCUMENTED = YES
|
||||
WARN_IF_DOC_ERROR = YES
|
||||
WARN_NO_PARAMDOC = NO
|
||||
WARN_FORMAT = "$file:$line: $text"
|
||||
WARN_LOGFILE =
|
||||
#---------------------------------------------------------------------------
|
||||
# configuration options related to the input files
|
||||
#---------------------------------------------------------------------------
|
||||
INPUT = ./../ ./../../../Source ./../../Common/include ./../../Common/Minimal
|
||||
FILE_PATTERNS = *.c \
|
||||
*.h \
|
||||
*.S
|
||||
RECURSIVE = YES
|
||||
EXCLUDE =
|
||||
EXCLUDE_SYMLINKS = NO
|
||||
EXCLUDE_PATTERNS =
|
||||
EXAMPLE_PATH =
|
||||
EXAMPLE_PATTERNS =
|
||||
EXAMPLE_RECURSIVE = NO
|
||||
IMAGE_PATH = ./../
|
||||
INPUT_FILTER =
|
||||
FILTER_PATTERNS =
|
||||
FILTER_SOURCE_FILES = NO
|
||||
#---------------------------------------------------------------------------
|
||||
# configuration options related to source browsing
|
||||
#---------------------------------------------------------------------------
|
||||
SOURCE_BROWSER = YES
|
||||
INLINE_SOURCES = YES
|
||||
STRIP_CODE_COMMENTS = YES
|
||||
REFERENCED_BY_RELATION = YES
|
||||
REFERENCES_RELATION = YES
|
||||
REFERENCES_LINK_SOURCE = YES
|
||||
USE_HTAGS = NO
|
||||
VERBATIM_HEADERS = YES
|
||||
#---------------------------------------------------------------------------
|
||||
# configuration options related to the alphabetical class index
|
||||
#---------------------------------------------------------------------------
|
||||
ALPHABETICAL_INDEX = NO
|
||||
COLS_IN_ALPHA_INDEX = 5
|
||||
IGNORE_PREFIX =
|
||||
#---------------------------------------------------------------------------
|
||||
# configuration options related to the HTML output
|
||||
#---------------------------------------------------------------------------
|
||||
GENERATE_HTML = YES
|
||||
HTML_OUTPUT =
|
||||
HTML_FILE_EXTENSION = .html
|
||||
HTML_HEADER =
|
||||
HTML_FOOTER =
|
||||
HTML_STYLESHEET =
|
||||
HTML_ALIGN_MEMBERS = YES
|
||||
GENERATE_HTMLHELP = NO
|
||||
CHM_FILE =
|
||||
HHC_LOCATION =
|
||||
GENERATE_CHI = NO
|
||||
BINARY_TOC = NO
|
||||
TOC_EXPAND = NO
|
||||
DISABLE_INDEX = NO
|
||||
ENUM_VALUES_PER_LINE = 4
|
||||
GENERATE_TREEVIEW = YES
|
||||
TREEVIEW_WIDTH = 250
|
||||
#---------------------------------------------------------------------------
|
||||
# configuration options related to the LaTeX output
|
||||
#---------------------------------------------------------------------------
|
||||
GENERATE_LATEX = NO
|
||||
LATEX_OUTPUT = latex
|
||||
LATEX_CMD_NAME = latex
|
||||
MAKEINDEX_CMD_NAME = makeindex
|
||||
COMPACT_LATEX = NO
|
||||
PAPER_TYPE = a4wide
|
||||
EXTRA_PACKAGES =
|
||||
LATEX_HEADER =
|
||||
PDF_HYPERLINKS = NO
|
||||
USE_PDFLATEX = NO
|
||||
LATEX_BATCHMODE = NO
|
||||
LATEX_HIDE_INDICES = NO
|
||||
#---------------------------------------------------------------------------
|
||||
# configuration options related to the RTF output
|
||||
#---------------------------------------------------------------------------
|
||||
GENERATE_RTF = NO
|
||||
RTF_OUTPUT = RTF
|
||||
COMPACT_RTF = NO
|
||||
RTF_HYPERLINKS = YES
|
||||
RTF_STYLESHEET_FILE =
|
||||
RTF_EXTENSIONS_FILE =
|
||||
#---------------------------------------------------------------------------
|
||||
# configuration options related to the man page output
|
||||
#---------------------------------------------------------------------------
|
||||
GENERATE_MAN = NO
|
||||
MAN_OUTPUT = man
|
||||
MAN_EXTENSION = .3
|
||||
MAN_LINKS = NO
|
||||
#---------------------------------------------------------------------------
|
||||
# configuration options related to the XML output
|
||||
#---------------------------------------------------------------------------
|
||||
GENERATE_XML = NO
|
||||
XML_OUTPUT = xml
|
||||
XML_SCHEMA =
|
||||
XML_DTD =
|
||||
XML_PROGRAMLISTING = YES
|
||||
#---------------------------------------------------------------------------
|
||||
# configuration options for the AutoGen Definitions output
|
||||
#---------------------------------------------------------------------------
|
||||
GENERATE_AUTOGEN_DEF = NO
|
||||
#---------------------------------------------------------------------------
|
||||
# configuration options related to the Perl module output
|
||||
#---------------------------------------------------------------------------
|
||||
GENERATE_PERLMOD = NO
|
||||
PERLMOD_LATEX = NO
|
||||
PERLMOD_PRETTY = YES
|
||||
PERLMOD_MAKEVAR_PREFIX =
|
||||
#---------------------------------------------------------------------------
|
||||
# Configuration options related to the preprocessor
|
||||
#---------------------------------------------------------------------------
|
||||
ENABLE_PREPROCESSING = YES
|
||||
MACRO_EXPANSION = YES
|
||||
EXPAND_ONLY_PREDEF = YES
|
||||
SEARCH_INCLUDES = YES
|
||||
INCLUDE_PATH = ../../../../../BOARDS/
|
||||
INCLUDE_FILE_PATTERNS =
|
||||
PREDEFINED = __GNUC__=4 \
|
||||
__attribute__()= \
|
||||
__AVR32__=1 \
|
||||
__AVR32_UC3B0256__=1 \
|
||||
__AVR32_ABI_COMPILER__ \
|
||||
BOARD=EVK1101
|
||||
EXPAND_AS_DEFINED =
|
||||
SKIP_FUNCTION_MACROS = YES
|
||||
#---------------------------------------------------------------------------
|
||||
# Configuration::additions related to external references
|
||||
#---------------------------------------------------------------------------
|
||||
TAGFILES =
|
||||
GENERATE_TAGFILE =
|
||||
ALLEXTERNALS = NO
|
||||
EXTERNAL_GROUPS = YES
|
||||
PERL_PATH = /usr/bin/perl
|
||||
#---------------------------------------------------------------------------
|
||||
# Configuration options related to the dot tool
|
||||
#---------------------------------------------------------------------------
|
||||
CLASS_DIAGRAMS = NO
|
||||
HIDE_UNDOC_RELATIONS = YES
|
||||
HAVE_DOT = NO
|
||||
CLASS_GRAPH = NO
|
||||
COLLABORATION_GRAPH = NO
|
||||
GROUP_GRAPHS = NO
|
||||
UML_LOOK = YES
|
||||
TEMPLATE_RELATIONS = YES
|
||||
INCLUDE_GRAPH = NO
|
||||
INCLUDED_BY_GRAPH = NO
|
||||
CALL_GRAPH = NO
|
||||
CALLER_GRAPH = NO
|
||||
GRAPHICAL_HIERARCHY = NO
|
||||
DIRECTORY_GRAPH = NO
|
||||
DOT_IMAGE_FORMAT = png
|
||||
DOT_PATH =
|
||||
DOTFILE_DIRS =
|
||||
MAX_DOT_GRAPH_WIDTH = 1024
|
||||
MAX_DOT_GRAPH_HEIGHT = 1024
|
||||
MAX_DOT_GRAPH_DEPTH = 0
|
||||
DOT_TRANSPARENT = NO
|
||||
DOT_MULTI_TARGETS = NO
|
||||
GENERATE_LEGEND = YES
|
||||
DOT_CLEANUP = YES
|
||||
#---------------------------------------------------------------------------
|
||||
# Configuration::additions related to the search engine
|
||||
#---------------------------------------------------------------------------
|
||||
SEARCHENGINE = NO
|
@ -1,260 +0,0 @@
|
||||
/*This file has been prepared for Doxygen automatic documentation generation.*/
|
||||
/*! \file *********************************************************************
|
||||
*
|
||||
* \brief GPIO driver for AVR32 UC3.
|
||||
*
|
||||
* This file defines a useful set of functions for the GPIO.
|
||||
*
|
||||
* - Compiler: IAR EWAVR32 and GNU GCC for AVR32
|
||||
* - Supported devices: All AVR32 devices with a GPIO module can be used.
|
||||
* - AppNote:
|
||||
*
|
||||
* \author Atmel Corporation: http://www.atmel.com \n
|
||||
* Support and FAQ: http://support.atmel.no/
|
||||
*
|
||||
*****************************************************************************/
|
||||
|
||||
/* Copyright (c) 2007, Atmel Corporation All rights reserved.
|
||||
*
|
||||
* Redistribution and use in source and binary forms, with or without
|
||||
* modification, are permitted provided that the following conditions are met:
|
||||
*
|
||||
* 1. Redistributions of source code must retain the above copyright notice,
|
||||
* this list of conditions and the following disclaimer.
|
||||
*
|
||||
* 2. Redistributions in binary form must reproduce the above copyright notice,
|
||||
* this list of conditions and the following disclaimer in the documentation
|
||||
* and/or other materials provided with the distribution.
|
||||
*
|
||||
* 3. The name of ATMEL may not be used to endorse or promote products derived
|
||||
* from this software without specific prior written permission.
|
||||
*
|
||||
* THIS SOFTWARE IS PROVIDED BY ATMEL ``AS IS'' AND ANY EXPRESS OR IMPLIED
|
||||
* WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
|
||||
* MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE EXPRESSLY AND
|
||||
* SPECIFICALLY DISCLAIMED. IN NO EVENT SHALL ATMEL BE LIABLE FOR ANY DIRECT,
|
||||
* INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
|
||||
* (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
|
||||
* LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
|
||||
* ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
|
||||
* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
|
||||
* THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||
*/
|
||||
|
||||
|
||||
#include "gpio.h"
|
||||
|
||||
|
||||
//! GPIO module instance.
|
||||
#define GPIO AVR32_GPIO
|
||||
|
||||
|
||||
int gpio_enable_module(const gpio_map_t gpiomap, unsigned int size)
|
||||
{
|
||||
int status = GPIO_SUCCESS;
|
||||
unsigned int i;
|
||||
|
||||
for (i = 0; i < size; i++)
|
||||
{
|
||||
status |= gpio_enable_module_pin(gpiomap->pin, gpiomap->function);
|
||||
gpiomap++;
|
||||
}
|
||||
|
||||
return status;
|
||||
}
|
||||
|
||||
|
||||
int gpio_enable_module_pin(unsigned int pin, unsigned int function)
|
||||
{
|
||||
volatile avr32_gpio_port_t *gpio_port = &GPIO.port[pin >> 5];
|
||||
|
||||
// Enable the correct function.
|
||||
switch (function)
|
||||
{
|
||||
case 0: // A function.
|
||||
gpio_port->pmr0c = 1 << (pin & 0x1F);
|
||||
gpio_port->pmr1c = 1 << (pin & 0x1F);
|
||||
break;
|
||||
|
||||
case 1: // B function.
|
||||
gpio_port->pmr0s = 1 << (pin & 0x1F);
|
||||
gpio_port->pmr1c = 1 << (pin & 0x1F);
|
||||
break;
|
||||
|
||||
case 2: // C function.
|
||||
gpio_port->pmr0c = 1 << (pin & 0x1F);
|
||||
gpio_port->pmr1s = 1 << (pin & 0x1F);
|
||||
break;
|
||||
|
||||
default:
|
||||
return GPIO_INVALID_ARGUMENT;
|
||||
}
|
||||
|
||||
// Disable GPIO control.
|
||||
gpio_port->gperc = 1 << (pin & 0x1F);
|
||||
|
||||
return GPIO_SUCCESS;
|
||||
}
|
||||
|
||||
|
||||
void gpio_enable_gpio(const gpio_map_t gpiomap, unsigned int size)
|
||||
{
|
||||
unsigned int i;
|
||||
|
||||
for (i = 0; i < size; i++)
|
||||
{
|
||||
gpio_enable_gpio_pin(gpiomap->pin);
|
||||
gpiomap++;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
void gpio_enable_gpio_pin(unsigned int pin)
|
||||
{
|
||||
volatile avr32_gpio_port_t *gpio_port = &GPIO.port[pin >> 5];
|
||||
gpio_port->oderc = 1 << (pin & 0x1F);
|
||||
gpio_port->gpers = 1 << (pin & 0x1F);
|
||||
}
|
||||
|
||||
|
||||
void gpio_enable_pin_open_drain(unsigned int pin)
|
||||
{
|
||||
volatile avr32_gpio_port_t *gpio_port = &GPIO.port[pin >> 5];
|
||||
gpio_port->odmers = 1 << (pin & 0x1F);
|
||||
}
|
||||
|
||||
|
||||
void gpio_disable_pin_open_drain(unsigned int pin)
|
||||
{
|
||||
volatile avr32_gpio_port_t *gpio_port = &GPIO.port[pin >> 5];
|
||||
gpio_port->odmerc = 1 << (pin & 0x1F);
|
||||
}
|
||||
|
||||
|
||||
void gpio_enable_pin_pull_up(unsigned int pin)
|
||||
{
|
||||
volatile avr32_gpio_port_t *gpio_port = &GPIO.port[pin >> 5];
|
||||
gpio_port->puers = 1 << (pin & 0x1F);
|
||||
}
|
||||
|
||||
|
||||
void gpio_disable_pin_pull_up(unsigned int pin)
|
||||
{
|
||||
volatile avr32_gpio_port_t *gpio_port = &GPIO.port[pin >> 5];
|
||||
gpio_port->puerc = 1 << (pin & 0x1F);
|
||||
}
|
||||
|
||||
|
||||
int gpio_get_pin_value(unsigned int pin)
|
||||
{
|
||||
volatile avr32_gpio_port_t *gpio_port = &GPIO.port[pin >> 5];
|
||||
return (gpio_port->pvr >> (pin & 0x1F)) & 1;
|
||||
}
|
||||
|
||||
|
||||
int gpio_get_gpio_pin_output_value(unsigned int pin)
|
||||
{
|
||||
volatile avr32_gpio_port_t *gpio_port = &GPIO.port[pin >> 5];
|
||||
return (gpio_port->ovr >> (pin & 0x1F)) & 1;
|
||||
}
|
||||
|
||||
|
||||
void gpio_set_gpio_pin(unsigned int pin)
|
||||
{
|
||||
volatile avr32_gpio_port_t *gpio_port = &GPIO.port[pin >> 5];
|
||||
|
||||
gpio_port->ovrs = 1 << (pin & 0x1F); // Value to be driven on the I/O line: 1.
|
||||
gpio_port->oders = 1 << (pin & 0x1F); // The GPIO output driver is enabled for that pin.
|
||||
gpio_port->gpers = 1 << (pin & 0x1F); // The GPIO module controls that pin.
|
||||
}
|
||||
|
||||
|
||||
void gpio_clr_gpio_pin(unsigned int pin)
|
||||
{
|
||||
volatile avr32_gpio_port_t *gpio_port = &GPIO.port[pin >> 5];
|
||||
|
||||
gpio_port->ovrc = 1 << (pin & 0x1F); // Value to be driven on the I/O line: 0.
|
||||
gpio_port->oders = 1 << (pin & 0x1F); // The GPIO output driver is enabled for that pin.
|
||||
gpio_port->gpers = 1 << (pin & 0x1F); // The GPIO module controls that pin.
|
||||
}
|
||||
|
||||
|
||||
void gpio_tgl_gpio_pin(unsigned int pin)
|
||||
{
|
||||
volatile avr32_gpio_port_t *gpio_port = &GPIO.port[pin >> 5];
|
||||
|
||||
gpio_port->ovrt = 1 << (pin & 0x1F); // Toggle the I/O line.
|
||||
gpio_port->oders = 1 << (pin & 0x1F); // The GPIO output driver is enabled for that pin.
|
||||
gpio_port->gpers = 1 << (pin & 0x1F); // The GPIO module controls that pin.
|
||||
}
|
||||
|
||||
|
||||
void gpio_enable_pin_glitch_filter(unsigned int pin)
|
||||
{
|
||||
volatile avr32_gpio_port_t *gpio_port = &GPIO.port[pin >> 5];
|
||||
gpio_port->gfers = 1 << (pin & 0x1F);
|
||||
}
|
||||
|
||||
|
||||
void gpio_disable_pin_glitch_filter(unsigned int pin)
|
||||
{
|
||||
volatile avr32_gpio_port_t *gpio_port = &GPIO.port[pin >> 5];
|
||||
gpio_port->gferc = 1 << (pin & 0x1F);
|
||||
}
|
||||
|
||||
|
||||
int gpio_enable_pin_interrupt(unsigned int pin, unsigned int mode)
|
||||
{
|
||||
volatile avr32_gpio_port_t *gpio_port = &GPIO.port[pin >> 5];
|
||||
|
||||
// Enable the glitch filter.
|
||||
gpio_port->gfers = 1 << (pin & 0x1F);
|
||||
|
||||
// Configure the edge detector.
|
||||
switch (mode)
|
||||
{
|
||||
case GPIO_PIN_CHANGE:
|
||||
gpio_port->imr0c = 1 << (pin & 0x1F);
|
||||
gpio_port->imr1c = 1 << (pin & 0x1F);
|
||||
break;
|
||||
|
||||
case GPIO_RISING_EDGE:
|
||||
gpio_port->imr0s = 1 << (pin & 0x1F);
|
||||
gpio_port->imr1c = 1 << (pin & 0x1F);
|
||||
break;
|
||||
|
||||
case GPIO_FALLING_EDGE:
|
||||
gpio_port->imr0c = 1 << (pin & 0x1F);
|
||||
gpio_port->imr1s = 1 << (pin & 0x1F);
|
||||
break;
|
||||
|
||||
default:
|
||||
return GPIO_INVALID_ARGUMENT;
|
||||
}
|
||||
|
||||
// Enable interrupt.
|
||||
gpio_port->iers = 1 << (pin & 0x1F);
|
||||
|
||||
return GPIO_SUCCESS;
|
||||
}
|
||||
|
||||
|
||||
void gpio_disable_pin_interrupt(unsigned int pin)
|
||||
{
|
||||
volatile avr32_gpio_port_t *gpio_port = &GPIO.port[pin >> 5];
|
||||
gpio_port->ierc = 1 << (pin & 0x1F);
|
||||
}
|
||||
|
||||
|
||||
int gpio_get_pin_interrupt_flag(unsigned int pin)
|
||||
{
|
||||
volatile avr32_gpio_port_t *gpio_port = &GPIO.port[pin >> 5];
|
||||
return (gpio_port->ifr >> (pin & 0x1F)) & 1;
|
||||
}
|
||||
|
||||
|
||||
void gpio_clear_pin_interrupt_flag(unsigned int pin)
|
||||
{
|
||||
volatile avr32_gpio_port_t *gpio_port = &GPIO.port[pin >> 5];
|
||||
gpio_port->ifrc = 1 << (pin & 0x1F);
|
||||
}
|
@ -1,230 +0,0 @@
|
||||
/*This file has been prepared for Doxygen automatic documentation generation.*/
|
||||
/*! \file *********************************************************************
|
||||
*
|
||||
* \brief GPIO header for AVR32 UC3.
|
||||
*
|
||||
* This file contains basic GPIO driver functions.
|
||||
*
|
||||
* - Compiler: IAR EWAVR32 and GNU GCC for AVR32
|
||||
* - Supported devices: All AVR32 devices with a GPIO module can be used.
|
||||
* - AppNote:
|
||||
*
|
||||
* \author Atmel Corporation: http://www.atmel.com \n
|
||||
* Support and FAQ: http://support.atmel.no/
|
||||
*
|
||||
*****************************************************************************/
|
||||
|
||||
/* Copyright (c) 2007, Atmel Corporation All rights reserved.
|
||||
*
|
||||
* Redistribution and use in source and binary forms, with or without
|
||||
* modification, are permitted provided that the following conditions are met:
|
||||
*
|
||||
* 1. Redistributions of source code must retain the above copyright notice,
|
||||
* this list of conditions and the following disclaimer.
|
||||
*
|
||||
* 2. Redistributions in binary form must reproduce the above copyright notice,
|
||||
* this list of conditions and the following disclaimer in the documentation
|
||||
* and/or other materials provided with the distribution.
|
||||
*
|
||||
* 3. The name of ATMEL may not be used to endorse or promote products derived
|
||||
* from this software without specific prior written permission.
|
||||
*
|
||||
* THIS SOFTWARE IS PROVIDED BY ATMEL ``AS IS'' AND ANY EXPRESS OR IMPLIED
|
||||
* WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
|
||||
* MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE EXPRESSLY AND
|
||||
* SPECIFICALLY DISCLAIMED. IN NO EVENT SHALL ATMEL BE LIABLE FOR ANY DIRECT,
|
||||
* INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
|
||||
* (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
|
||||
* LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
|
||||
* ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
|
||||
* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
|
||||
* THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||
*/
|
||||
|
||||
|
||||
#ifndef _GPIO_H_
|
||||
#define _GPIO_H_
|
||||
|
||||
#include <avr32/io.h>
|
||||
|
||||
|
||||
/*! \name Return Values of the GPIO API
|
||||
*/
|
||||
//! @{
|
||||
#define GPIO_SUCCESS 0 //!< Function successfully completed.
|
||||
#define GPIO_INVALID_ARGUMENT 1 //!< Input parameters are out of range.
|
||||
//! @}
|
||||
|
||||
|
||||
/*! \name Interrupt Trigger Modes
|
||||
*/
|
||||
//! @{
|
||||
#define GPIO_PIN_CHANGE 0 //!< Interrupt triggered upon pin change.
|
||||
#define GPIO_RISING_EDGE 1 //!< Interrupt triggered upon rising edge.
|
||||
#define GPIO_FALLING_EDGE 2 //!< Interrupt triggered upon falling edge.
|
||||
//! @}
|
||||
|
||||
|
||||
//! A type definition of pins and modules connectivity.
|
||||
typedef struct
|
||||
{
|
||||
unsigned char pin; //!< Module pin.
|
||||
unsigned char function; //!< Module function.
|
||||
} gpio_map_t[];
|
||||
|
||||
|
||||
/*! \brief Enables specific module modes for a set of pins.
|
||||
*
|
||||
* \param gpiomap The pin map.
|
||||
* \param size The number of pins in \a gpiomap.
|
||||
*
|
||||
* \return \ref GPIO_SUCCESS or \ref GPIO_INVALID_ARGUMENT.
|
||||
*/
|
||||
extern int gpio_enable_module(const gpio_map_t gpiomap, unsigned int size);
|
||||
|
||||
/*! \brief Enables a specific module mode for a pin.
|
||||
*
|
||||
* \param pin The pin number.\n
|
||||
* Refer to the product header file `uc3x.h' (where x is the part
|
||||
* number; e.g. x = a0512) for module pins. E.g., to enable a PWM
|
||||
* channel output, the pin number can be AVR32_PWM_PWM_3_PIN for PWM
|
||||
* channel 3.
|
||||
* \param function The pin function.\n
|
||||
* Refer to the product header file `uc3x.h' (where x is the
|
||||
* part number; e.g. x = a0512) for module pin functions. E.g.,
|
||||
* to enable a PWM channel output, the pin function can be
|
||||
* AVR32_PWM_PWM_3_FUNCTION for PWM channel 3.
|
||||
*
|
||||
* \return \ref GPIO_SUCCESS or \ref GPIO_INVALID_ARGUMENT.
|
||||
*/
|
||||
extern int gpio_enable_module_pin(unsigned int pin, unsigned int function);
|
||||
|
||||
/*! \brief Enables the GPIO mode of a set of pins.
|
||||
*
|
||||
* \param gpiomap The pin map.
|
||||
* \param size The number of pins in \a gpiomap.
|
||||
*/
|
||||
extern void gpio_enable_gpio(const gpio_map_t gpiomap, unsigned int size);
|
||||
|
||||
/*! \brief Enables the GPIO mode of a pin.
|
||||
*
|
||||
* \param pin The pin number.\n
|
||||
* Refer to the product header file `uc3x.h' (where x is the part
|
||||
* number; e.g. x = a0512) for pin definitions. E.g., to enable the
|
||||
* GPIO mode of PX21, AVR32_PIN_PX21 can be used. Module pins such as
|
||||
* AVR32_PWM_PWM_3_PIN for PWM channel 3 can also be used to release
|
||||
* module pins for GPIO.
|
||||
*/
|
||||
extern void gpio_enable_gpio_pin(unsigned int pin);
|
||||
|
||||
/*! \brief Enables the open-drain mode of a pin.
|
||||
*
|
||||
* \param pin The pin number.
|
||||
*/
|
||||
extern void gpio_enable_pin_open_drain(unsigned int pin);
|
||||
|
||||
/*! \brief Disables the open-drain mode of a pin.
|
||||
*
|
||||
* \param pin The pin number.
|
||||
*/
|
||||
extern void gpio_disable_pin_open_drain(unsigned int pin);
|
||||
|
||||
/*! \brief Enables the pull-up resistor of a pin.
|
||||
*
|
||||
* \param pin The pin number.
|
||||
*/
|
||||
extern void gpio_enable_pin_pull_up(unsigned int pin);
|
||||
|
||||
/*! \brief Disables the pull-up resistor of a pin.
|
||||
*
|
||||
* \param pin The pin number.
|
||||
*/
|
||||
extern void gpio_disable_pin_pull_up(unsigned int pin);
|
||||
|
||||
/*! \brief Returns the value of a pin.
|
||||
*
|
||||
* \param pin The pin number.
|
||||
*
|
||||
* \return The pin value.
|
||||
*/
|
||||
extern int gpio_get_pin_value(unsigned int pin);
|
||||
|
||||
/*! \brief Returns the output value set for a GPIO pin.
|
||||
*
|
||||
* \param pin The pin number.
|
||||
*
|
||||
* \return The pin output value.
|
||||
*/
|
||||
extern int gpio_get_gpio_pin_output_value(unsigned int pin);
|
||||
|
||||
/*! \brief Drives a GPIO pin to 1.
|
||||
*
|
||||
* \param pin The pin number.
|
||||
*/
|
||||
extern void gpio_set_gpio_pin(unsigned int pin);
|
||||
|
||||
/*! \brief Drives a GPIO pin to 0.
|
||||
*
|
||||
* \param pin The pin number.
|
||||
*/
|
||||
extern void gpio_clr_gpio_pin(unsigned int pin);
|
||||
|
||||
/*! \brief Toggles a GPIO pin.
|
||||
*
|
||||
* \param pin The pin number.
|
||||
*/
|
||||
extern void gpio_tgl_gpio_pin(unsigned int pin);
|
||||
|
||||
/*! \brief Enables the glitch filter of a pin.
|
||||
*
|
||||
* When the glitch filter is enabled, a glitch with duration of less than 1
|
||||
* clock cycle is automatically rejected, while a pulse with duration of 2 clock
|
||||
* cycles or more is accepted. For pulse durations between 1 clock cycle and 2
|
||||
* clock cycles, the pulse may or may not be taken into account, depending on
|
||||
* the precise timing of its occurrence. Thus for a pulse to be guaranteed
|
||||
* visible it must exceed 2 clock cycles, whereas for a glitch to be reliably
|
||||
* filtered out, its duration must not exceed 1 clock cycle. The filter
|
||||
* introduces 2 clock cycles latency.
|
||||
*
|
||||
* \param pin The pin number.
|
||||
*/
|
||||
extern void gpio_enable_pin_glitch_filter(unsigned int pin);
|
||||
|
||||
/*! \brief Disables the glitch filter of a pin.
|
||||
*
|
||||
* \param pin The pin number.
|
||||
*/
|
||||
extern void gpio_disable_pin_glitch_filter(unsigned int pin);
|
||||
|
||||
/*! \brief Enables the interrupt of a pin with the specified settings.
|
||||
*
|
||||
* \param pin The pin number.
|
||||
* \param mode The trigger mode (\ref GPIO_PIN_CHANGE, \ref GPIO_RISING_EDGE or
|
||||
* \ref GPIO_FALLING_EDGE).
|
||||
*
|
||||
* \return \ref GPIO_SUCCESS or \ref GPIO_INVALID_ARGUMENT.
|
||||
*/
|
||||
extern int gpio_enable_pin_interrupt(unsigned int pin, unsigned int mode);
|
||||
|
||||
/*! \brief Disables the interrupt of a pin.
|
||||
*
|
||||
* \param pin The pin number.
|
||||
*/
|
||||
extern void gpio_disable_pin_interrupt(unsigned int pin);
|
||||
|
||||
/*! \brief Gets the interrupt flag of a pin.
|
||||
*
|
||||
* \param pin The pin number.
|
||||
*
|
||||
* \return The pin interrupt flag.
|
||||
*/
|
||||
extern int gpio_get_pin_interrupt_flag(unsigned int pin);
|
||||
|
||||
/*! \brief Clears the interrupt flag of a pin.
|
||||
*
|
||||
* \param pin The pin number.
|
||||
*/
|
||||
extern void gpio_clear_pin_interrupt_flag(unsigned int pin);
|
||||
|
||||
|
||||
#endif // _GPIO_H_
|
@ -1,200 +0,0 @@
|
||||
/*This file is prepared for Doxygen automatic documentation generation.*/
|
||||
/*! \file *********************************************************************
|
||||
*
|
||||
* \brief INTC driver for AVR32 UC3.
|
||||
*
|
||||
* AVR32 Interrupt Controller driver module.
|
||||
*
|
||||
* - Compiler: IAR EWAVR32 and GNU GCC for AVR32
|
||||
* - Supported devices: All AVR32 devices with an INTC module can be used.
|
||||
* - AppNote:
|
||||
*
|
||||
* \author Atmel Corporation: http://www.atmel.com \n
|
||||
* Support and FAQ: http://support.atmel.no/
|
||||
*
|
||||
******************************************************************************/
|
||||
|
||||
/* Copyright (c) 2007, Atmel Corporation All rights reserved.
|
||||
*
|
||||
* Redistribution and use in source and binary forms, with or without
|
||||
* modification, are permitted provided that the following conditions are met:
|
||||
*
|
||||
* 1. Redistributions of source code must retain the above copyright notice,
|
||||
* this list of conditions and the following disclaimer.
|
||||
*
|
||||
* 2. Redistributions in binary form must reproduce the above copyright notice,
|
||||
* this list of conditions and the following disclaimer in the documentation
|
||||
* and/or other materials provided with the distribution.
|
||||
*
|
||||
* 3. The name of ATMEL may not be used to endorse or promote products derived
|
||||
* from this software without specific prior written permission.
|
||||
*
|
||||
* THIS SOFTWARE IS PROVIDED BY ATMEL ``AS IS'' AND ANY EXPRESS OR IMPLIED
|
||||
* WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
|
||||
* MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE EXPRESSLY AND
|
||||
* SPECIFICALLY DISCLAIMED. IN NO EVENT SHALL ATMEL BE LIABLE FOR ANY DIRECT,
|
||||
* INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
|
||||
* (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
|
||||
* LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
|
||||
* ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
|
||||
* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
|
||||
* THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||
*/
|
||||
|
||||
|
||||
#include <avr32/io.h>
|
||||
#include "compiler.h"
|
||||
#include "preprocessor.h"
|
||||
#include "intc.h"
|
||||
|
||||
|
||||
//! Values to store in the interrupt priority registers for the various interrupt priority levels.
|
||||
extern const unsigned int ipr_val[AVR32_INTC_NUM_INT_LEVELS];
|
||||
|
||||
//! Creates a table of interrupt line handlers per interrupt group in order to optimize RAM space.
|
||||
//! Each line handler table contains a set of pointers to interrupt handlers.
|
||||
#if __GNUC__
|
||||
#define DECL_INT_LINE_HANDLER_TABLE(GRP, unused) \
|
||||
static volatile __int_handler _int_line_handler_table_##GRP[Max(AVR32_INTC_NUM_IRQS_PER_GRP##GRP, 1)];
|
||||
#elif __ICCAVR32__
|
||||
#define DECL_INT_LINE_HANDLER_TABLE(GRP, unused) \
|
||||
static volatile __no_init __int_handler _int_line_handler_table_##GRP[Max(AVR32_INTC_NUM_IRQS_PER_GRP##GRP, 1)];
|
||||
#endif
|
||||
MREPEAT(AVR32_INTC_NUM_INT_GRPS, DECL_INT_LINE_HANDLER_TABLE, ~);
|
||||
#undef DECL_INT_LINE_HANDLER_TABLE
|
||||
|
||||
//! Table containing for each interrupt group the number of interrupt request
|
||||
//! lines and a pointer to the table of interrupt line handlers.
|
||||
static const struct
|
||||
{
|
||||
unsigned int num_irqs;
|
||||
volatile __int_handler *_int_line_handler_table;
|
||||
} _int_handler_table[AVR32_INTC_NUM_INT_GRPS] =
|
||||
{
|
||||
#define INSERT_INT_LINE_HANDLER_TABLE(GRP, unused) \
|
||||
{AVR32_INTC_NUM_IRQS_PER_GRP##GRP, _int_line_handler_table_##GRP},
|
||||
MREPEAT(AVR32_INTC_NUM_INT_GRPS, INSERT_INT_LINE_HANDLER_TABLE, ~)
|
||||
#undef INSERT_INT_LINE_HANDLER_TABLE
|
||||
};
|
||||
|
||||
|
||||
/*! \brief Default interrupt handler.
|
||||
*
|
||||
* \note Taken and adapted from Newlib.
|
||||
*/
|
||||
#if __GNUC__
|
||||
__attribute__((__interrupt__))
|
||||
#elif __ICCAVR32__
|
||||
__interrupt
|
||||
#endif
|
||||
static void _unhandled_interrupt(void)
|
||||
{
|
||||
// Catch unregistered interrupts.
|
||||
while (TRUE);
|
||||
}
|
||||
|
||||
|
||||
/*! \brief Gets the interrupt handler of the current event at the \a int_lev
|
||||
* interrupt priority level (called from exception.S).
|
||||
*
|
||||
* \param int_lev Interrupt priority level to handle.
|
||||
*
|
||||
* \return Interrupt handler to execute.
|
||||
*
|
||||
* \note Taken and adapted from Newlib.
|
||||
*/
|
||||
__int_handler _get_interrupt_handler(unsigned int int_lev)
|
||||
{
|
||||
// ICR3 is mapped first, ICR0 last.
|
||||
// Code in exception.S puts int_lev in R12 which is used by AVR32-GCC to pass
|
||||
// a single argument to a function.
|
||||
unsigned int int_grp = (&AVR32_INTC.icr3)[INT3 - int_lev];
|
||||
unsigned int int_req = AVR32_INTC.irr[int_grp];
|
||||
|
||||
// As an interrupt may disappear while it is being fetched by the CPU
|
||||
// (spurious interrupt caused by a delayed response from an MCU peripheral to
|
||||
// an interrupt flag clear or interrupt disable instruction), check if there
|
||||
// are remaining interrupt lines to process.
|
||||
// If a spurious interrupt occurs, the status register (SR) contains an
|
||||
// execution mode and interrupt level masks corresponding to a level 0
|
||||
// interrupt, whatever the interrupt priority level causing the spurious
|
||||
// event. This behavior has been chosen because a spurious interrupt has not
|
||||
// to be a priority one and because it may not cause any trouble to other
|
||||
// interrupts.
|
||||
// However, these spurious interrupts place the hardware in an unstable state
|
||||
// and could give problems in other/future versions of the CPU, so the
|
||||
// software has to be written so that they never occur. The only safe way of
|
||||
// achieving this is to always clear or disable peripheral interrupts with the
|
||||
// following sequence:
|
||||
// 1: Mask the interrupt in the CPU by setting GM (or IxM) in SR.
|
||||
// 2: Perform the bus access to the peripheral register that clears or
|
||||
// disables the interrupt.
|
||||
// 3: Wait until the interrupt has actually been cleared or disabled by the
|
||||
// peripheral. This is usually performed by reading from a register in the
|
||||
// same peripheral (it DOES NOT have to be the same register that was
|
||||
// accessed in step 2, but it MUST be in the same peripheral), what takes
|
||||
// bus system latencies into account, but peripheral internal latencies
|
||||
// (generally 0 cycle) also have to be considered.
|
||||
// 4: Unmask the interrupt in the CPU by clearing GM (or IxM) in SR.
|
||||
// Note that steps 1 and 4 are useless inside interrupt handlers as the
|
||||
// corresponding interrupt level is automatically masked by IxM (unless IxM is
|
||||
// explicitly cleared by the software).
|
||||
//
|
||||
// Get the right IRQ handler.
|
||||
//
|
||||
// If several interrupt lines are active in the group, the interrupt line with
|
||||
// the highest number is selected. This is to be coherent with the
|
||||
// prioritization of interrupt groups performed by the hardware interrupt
|
||||
// controller.
|
||||
//
|
||||
// If no handler has been registered for the pending interrupt,
|
||||
// _unhandled_interrupt will be selected thanks to the initialization of
|
||||
// _int_line_handler_table_x by INTC_init_interrupts.
|
||||
//
|
||||
// exception.S will provide the interrupt handler with a clean interrupt stack
|
||||
// frame, with nothing more pushed onto the stack. The interrupt handler must
|
||||
// manage the `rete' instruction, what can be done thanks to pure assembly,
|
||||
// inline assembly or the `__attribute__((__interrupt__))' C function
|
||||
// attribute.
|
||||
return (int_req) ? _int_handler_table[int_grp]._int_line_handler_table[32 - clz(int_req) - 1] : NULL;
|
||||
}
|
||||
|
||||
|
||||
void INTC_init_interrupts(void)
|
||||
{
|
||||
unsigned int int_grp, int_req;
|
||||
|
||||
// For all interrupt groups,
|
||||
for (int_grp = 0; int_grp < AVR32_INTC_NUM_INT_GRPS; int_grp++)
|
||||
{
|
||||
// For all interrupt request lines of each group,
|
||||
for (int_req = 0; int_req < _int_handler_table[int_grp].num_irqs; int_req++)
|
||||
{
|
||||
// Assign _unhandled_interrupt as default interrupt handler.
|
||||
_int_handler_table[int_grp]._int_line_handler_table[int_req] = &_unhandled_interrupt;
|
||||
}
|
||||
|
||||
// Set the interrupt group priority register to its default value.
|
||||
// By default, all interrupt groups are linked to the interrupt priority
|
||||
// level 0 and to the interrupt vector _int0.
|
||||
AVR32_INTC.ipr[int_grp] = ipr_val[INT0];
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
void INTC_register_interrupt(__int_handler handler, unsigned int irq, unsigned int int_lev)
|
||||
{
|
||||
// Determine the group of the IRQ.
|
||||
unsigned int int_grp = irq / AVR32_INTC_MAX_NUM_IRQS_PER_GRP;
|
||||
|
||||
// Store in _int_line_handler_table_x the pointer to the interrupt handler, so
|
||||
// that _get_interrupt_handler can retrieve it when the interrupt is vectored.
|
||||
_int_handler_table[int_grp]._int_line_handler_table[irq % AVR32_INTC_MAX_NUM_IRQS_PER_GRP] = handler;
|
||||
|
||||
// Program the corresponding IPRX register to set the interrupt priority level
|
||||
// and the interrupt vector offset that will be fetched by the core interrupt
|
||||
// system.
|
||||
// NOTE: The _intx functions are intermediate assembly functions between the
|
||||
// core interrupt system and the user interrupt handler.
|
||||
AVR32_INTC.ipr[int_grp] = ipr_val[int_lev & (AVR32_INTC_IPR0_INTLEV_MASK >> AVR32_INTC_IPR0_INTLEV_OFFSET)];
|
||||
}
|
@ -1,104 +0,0 @@
|
||||
/*This file is prepared for Doxygen automatic documentation generation.*/
|
||||
/*! \file *********************************************************************
|
||||
*
|
||||
* \brief INTC driver for AVR32 UC3.
|
||||
*
|
||||
* AVR32 Interrupt Controller driver module.
|
||||
*
|
||||
* - Compiler: IAR EWAVR32 and GNU GCC for AVR32
|
||||
* - Supported devices: All AVR32 devices with an INTC module can be used.
|
||||
* - AppNote:
|
||||
*
|
||||
* \author Atmel Corporation: http://www.atmel.com \n
|
||||
* Support and FAQ: http://support.atmel.no/
|
||||
*
|
||||
******************************************************************************/
|
||||
|
||||
/* Copyright (c) 2007, Atmel Corporation All rights reserved.
|
||||
*
|
||||
* Redistribution and use in source and binary forms, with or without
|
||||
* modification, are permitted provided that the following conditions are met:
|
||||
*
|
||||
* 1. Redistributions of source code must retain the above copyright notice,
|
||||
* this list of conditions and the following disclaimer.
|
||||
*
|
||||
* 2. Redistributions in binary form must reproduce the above copyright notice,
|
||||
* this list of conditions and the following disclaimer in the documentation
|
||||
* and/or other materials provided with the distribution.
|
||||
*
|
||||
* 3. The name of ATMEL may not be used to endorse or promote products derived
|
||||
* from this software without specific prior written permission.
|
||||
*
|
||||
* THIS SOFTWARE IS PROVIDED BY ATMEL ``AS IS'' AND ANY EXPRESS OR IMPLIED
|
||||
* WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
|
||||
* MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE EXPRESSLY AND
|
||||
* SPECIFICALLY DISCLAIMED. IN NO EVENT SHALL ATMEL BE LIABLE FOR ANY DIRECT,
|
||||
* INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
|
||||
* (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
|
||||
* LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
|
||||
* ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
|
||||
* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
|
||||
* THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||
*/
|
||||
|
||||
|
||||
#ifndef _INTC_H_
|
||||
#define _INTC_H_
|
||||
|
||||
#include "compiler.h"
|
||||
|
||||
|
||||
//! Maximal number of interrupt request lines per group.
|
||||
#define AVR32_INTC_MAX_NUM_IRQS_PER_GRP 32
|
||||
|
||||
//! Number of interrupt priority levels.
|
||||
#define AVR32_INTC_NUM_INT_LEVELS (1 << AVR32_INTC_IPR0_INTLEV_SIZE)
|
||||
|
||||
/*! \name Interrupt Priority Levels
|
||||
*/
|
||||
//! @{
|
||||
#define INT0 0 //!< Lowest interrupt priority level.
|
||||
#define INT1 1
|
||||
#define INT2 2
|
||||
#define INT3 3 //!< Highest interrupt priority level.
|
||||
//! @}
|
||||
|
||||
|
||||
#ifdef __AVR32_ABI_COMPILER__ // Automatically defined when compiling for AVR32, not when assembling.
|
||||
|
||||
//! Pointer to interrupt handler.
|
||||
#if __GNUC__
|
||||
typedef void (*__int_handler)(void);
|
||||
#elif __ICCAVR32__
|
||||
typedef void (__interrupt *__int_handler)(void);
|
||||
#endif
|
||||
|
||||
|
||||
/*! \brief Initializes the hardware interrupt controller driver.
|
||||
*
|
||||
* \note Taken and adapted from Newlib.
|
||||
*/
|
||||
extern void INTC_init_interrupts(void);
|
||||
|
||||
/*! \brief Registers an interrupt handler.
|
||||
*
|
||||
* \param handler Interrupt handler to register.
|
||||
* \param irq IRQ of the interrupt handler to register.
|
||||
* \param int_lev Interrupt priority level to assign to the group of this IRQ.
|
||||
*
|
||||
* \warning The interrupt handler must manage the `rete' instruction, what can
|
||||
* be done thanks to pure assembly, inline assembly or the
|
||||
* `__attribute__((__interrupt__))' C function attribute.
|
||||
*
|
||||
* \warning If several interrupt handlers of a same group are registered with
|
||||
* different priority levels, only the latest priority level set will
|
||||
* be effective.
|
||||
*
|
||||
* \note Taken and adapted from Newlib.
|
||||
*/
|
||||
extern void INTC_register_interrupt(__int_handler handler, unsigned int irq, unsigned int int_lev);
|
||||
|
||||
#endif // __AVR32_ABI_COMPILER__
|
||||
|
||||
|
||||
#endif // _INTC_H_
|
@ -1,510 +0,0 @@
|
||||
/*This file has been prepared for Doxygen automatic documentation generation.*/
|
||||
/*! \file *********************************************************************
|
||||
*
|
||||
* \brief Power Manager driver.
|
||||
*
|
||||
*
|
||||
* - Compiler: IAR EWAVR32 and GNU GCC for AVR32
|
||||
* - Supported devices: All AVR32 devices.
|
||||
* - AppNote:
|
||||
*
|
||||
* \author Atmel Corporation: http://www.atmel.com \n
|
||||
* Support and FAQ: http://support.atmel.no/
|
||||
*
|
||||
*****************************************************************************/
|
||||
|
||||
/* Copyright (c) 2007, Atmel Corporation All rights reserved.
|
||||
*
|
||||
* Redistribution and use in source and binary forms, with or without
|
||||
* modification, are permitted provided that the following conditions are met:
|
||||
*
|
||||
* 1. Redistributions of source code must retain the above copyright notice,
|
||||
* this list of conditions and the following disclaimer.
|
||||
*
|
||||
* 2. Redistributions in binary form must reproduce the above copyright notice,
|
||||
* this list of conditions and the following disclaimer in the documentation
|
||||
* and/or other materials provided with the distribution.
|
||||
*
|
||||
* 3. The name of ATMEL may not be used to endorse or promote products derived
|
||||
* from this software without specific prior written permission.
|
||||
*
|
||||
* THIS SOFTWARE IS PROVIDED BY ATMEL ``AS IS'' AND ANY EXPRESS OR IMPLIED
|
||||
* WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
|
||||
* MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE EXPRESSLY AND
|
||||
* SPECIFICALLY DISCLAIMED. IN NO EVENT SHALL ATMEL BE LIABLE FOR ANY DIRECT,
|
||||
* INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
|
||||
* (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
|
||||
* LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
|
||||
* ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
|
||||
* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
|
||||
* THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||
*/
|
||||
|
||||
|
||||
#include "pm.h"
|
||||
|
||||
|
||||
/*! \name PM Writable Bit-Field Registers
|
||||
*/
|
||||
//! @{
|
||||
|
||||
typedef union
|
||||
{
|
||||
unsigned long mcctrl;
|
||||
avr32_pm_mcctrl_t MCCTRL;
|
||||
} u_avr32_pm_mcctrl_t;
|
||||
|
||||
typedef union
|
||||
{
|
||||
unsigned long cksel;
|
||||
avr32_pm_cksel_t CKSEL;
|
||||
} u_avr32_pm_cksel_t;
|
||||
|
||||
typedef union
|
||||
{
|
||||
unsigned long pll;
|
||||
avr32_pm_pll_t PLL;
|
||||
} u_avr32_pm_pll_t;
|
||||
|
||||
typedef union
|
||||
{
|
||||
unsigned long oscctrl0;
|
||||
avr32_pm_oscctrl0_t OSCCTRL0;
|
||||
} u_avr32_pm_oscctrl0_t;
|
||||
|
||||
typedef union
|
||||
{
|
||||
unsigned long oscctrl1;
|
||||
avr32_pm_oscctrl1_t OSCCTRL1;
|
||||
} u_avr32_pm_oscctrl1_t;
|
||||
|
||||
typedef union
|
||||
{
|
||||
unsigned long oscctrl32;
|
||||
avr32_pm_oscctrl32_t OSCCTRL32;
|
||||
} u_avr32_pm_oscctrl32_t;
|
||||
|
||||
typedef union
|
||||
{
|
||||
unsigned long ier;
|
||||
avr32_pm_ier_t IER;
|
||||
} u_avr32_pm_ier_t;
|
||||
|
||||
typedef union
|
||||
{
|
||||
unsigned long idr;
|
||||
avr32_pm_idr_t IDR;
|
||||
} u_avr32_pm_idr_t;
|
||||
|
||||
typedef union
|
||||
{
|
||||
unsigned long icr;
|
||||
avr32_pm_icr_t ICR;
|
||||
} u_avr32_pm_icr_t;
|
||||
|
||||
typedef union
|
||||
{
|
||||
unsigned long gcctrl;
|
||||
avr32_pm_gcctrl_t GCCTRL;
|
||||
} u_avr32_pm_gcctrl_t;
|
||||
|
||||
typedef union
|
||||
{
|
||||
unsigned long rccr;
|
||||
avr32_pm_rccr_t RCCR;
|
||||
} u_avr32_pm_rccr_t;
|
||||
|
||||
typedef union
|
||||
{
|
||||
unsigned long bgcr;
|
||||
avr32_pm_bgcr_t BGCR;
|
||||
} u_avr32_pm_bgcr_t;
|
||||
|
||||
typedef union
|
||||
{
|
||||
unsigned long vregcr;
|
||||
avr32_pm_vregcr_t VREGCR;
|
||||
} u_avr32_pm_vregcr_t;
|
||||
|
||||
typedef union
|
||||
{
|
||||
unsigned long bod;
|
||||
avr32_pm_bod_t BOD;
|
||||
} u_avr32_pm_bod_t;
|
||||
|
||||
//! @}
|
||||
|
||||
|
||||
/*! \brief Sets the mode of the oscillator 0.
|
||||
*
|
||||
* \param pm Base address of the Power Manager (i.e. &AVR32_PM).
|
||||
* \param mode Oscillator 0 mode (i.e. AVR32_PM_OSCCTRL0_MODE_x).
|
||||
*/
|
||||
static void pm_set_osc0_mode(volatile avr32_pm_t *pm, unsigned int mode)
|
||||
{
|
||||
// Read
|
||||
u_avr32_pm_oscctrl0_t u_avr32_pm_oscctrl0 = {pm->oscctrl0};
|
||||
// Modify
|
||||
u_avr32_pm_oscctrl0.OSCCTRL0.mode = mode;
|
||||
// Write
|
||||
pm->oscctrl0 = u_avr32_pm_oscctrl0.oscctrl0;
|
||||
}
|
||||
|
||||
|
||||
void pm_enable_osc0_ext_clock(volatile avr32_pm_t *pm)
|
||||
{
|
||||
pm_set_osc0_mode(pm, AVR32_PM_OSCCTRL0_MODE_EXT_CLOCK);
|
||||
}
|
||||
|
||||
|
||||
void pm_enable_osc0_crystal(volatile avr32_pm_t *pm, unsigned int fosc0)
|
||||
{
|
||||
pm_set_osc0_mode(pm, (fosc0 < 8000000) ? AVR32_PM_OSCCTRL0_MODE_CRYSTAL_G2 :
|
||||
AVR32_PM_OSCCTRL0_MODE_CRYSTAL_G3);
|
||||
}
|
||||
|
||||
|
||||
void pm_enable_clk0(volatile avr32_pm_t *pm, unsigned int startup)
|
||||
{
|
||||
pm_enable_clk0_no_wait(pm, startup);
|
||||
pm_wait_for_clk0_ready(pm);
|
||||
}
|
||||
|
||||
|
||||
void pm_disable_clk0(volatile avr32_pm_t *pm)
|
||||
{
|
||||
pm->mcctrl &= ~AVR32_PM_MCCTRL_OSC0EN_MASK;
|
||||
}
|
||||
|
||||
|
||||
void pm_enable_clk0_no_wait(volatile avr32_pm_t *pm, unsigned int startup)
|
||||
{
|
||||
// Read register
|
||||
u_avr32_pm_oscctrl0_t u_avr32_pm_oscctrl0 = {pm->oscctrl0};
|
||||
// Modify
|
||||
u_avr32_pm_oscctrl0.OSCCTRL0.startup = startup;
|
||||
// Write back
|
||||
pm->oscctrl0 = u_avr32_pm_oscctrl0.oscctrl0;
|
||||
|
||||
pm->mcctrl |= AVR32_PM_MCCTRL_OSC0EN_MASK;
|
||||
}
|
||||
|
||||
|
||||
void pm_wait_for_clk0_ready(volatile avr32_pm_t *pm)
|
||||
{
|
||||
while (!(pm->poscsr & AVR32_PM_POSCSR_OSC0RDY_MASK));
|
||||
}
|
||||
|
||||
|
||||
/*! \brief Sets the mode of the oscillator 1.
|
||||
*
|
||||
* \param pm Base address of the Power Manager (i.e. &AVR32_PM).
|
||||
* \param mode Oscillator 1 mode (i.e. AVR32_PM_OSCCTRL1_MODE_x).
|
||||
*/
|
||||
static void pm_set_osc1_mode(volatile avr32_pm_t *pm, unsigned int mode)
|
||||
{
|
||||
// Read
|
||||
u_avr32_pm_oscctrl1_t u_avr32_pm_oscctrl1 = {pm->oscctrl1};
|
||||
// Modify
|
||||
u_avr32_pm_oscctrl1.OSCCTRL1.mode = mode;
|
||||
// Write
|
||||
pm->oscctrl1 = u_avr32_pm_oscctrl1.oscctrl1;
|
||||
}
|
||||
|
||||
|
||||
void pm_enable_osc1_ext_clock(volatile avr32_pm_t *pm)
|
||||
{
|
||||
pm_set_osc1_mode(pm, AVR32_PM_OSCCTRL1_MODE_EXT_CLOCK);
|
||||
}
|
||||
|
||||
|
||||
void pm_enable_osc1_crystal(volatile avr32_pm_t *pm, unsigned int fosc1)
|
||||
{
|
||||
pm_set_osc1_mode(pm, (fosc1 < 8000000) ? AVR32_PM_OSCCTRL1_MODE_CRYSTAL_G2 :
|
||||
AVR32_PM_OSCCTRL1_MODE_CRYSTAL_G3);
|
||||
}
|
||||
|
||||
|
||||
void pm_enable_clk1(volatile avr32_pm_t *pm, unsigned int startup)
|
||||
{
|
||||
pm_enable_clk1_no_wait(pm, startup);
|
||||
pm_wait_for_clk1_ready(pm);
|
||||
}
|
||||
|
||||
|
||||
void pm_disable_clk1(volatile avr32_pm_t *pm)
|
||||
{
|
||||
pm->mcctrl &= ~AVR32_PM_MCCTRL_OSC1EN_MASK;
|
||||
}
|
||||
|
||||
|
||||
void pm_enable_clk1_no_wait(volatile avr32_pm_t *pm, unsigned int startup)
|
||||
{
|
||||
// Read register
|
||||
u_avr32_pm_oscctrl1_t u_avr32_pm_oscctrl1 = {pm->oscctrl1};
|
||||
// Modify
|
||||
u_avr32_pm_oscctrl1.OSCCTRL1.startup = startup;
|
||||
// Write back
|
||||
pm->oscctrl1 = u_avr32_pm_oscctrl1.oscctrl1;
|
||||
|
||||
pm->mcctrl |= AVR32_PM_MCCTRL_OSC1EN_MASK;
|
||||
}
|
||||
|
||||
|
||||
void pm_wait_for_clk1_ready(volatile avr32_pm_t *pm)
|
||||
{
|
||||
while (!(pm->poscsr & AVR32_PM_POSCSR_OSC1RDY_MASK));
|
||||
}
|
||||
|
||||
|
||||
/*! \brief Sets the mode of the 32-kHz oscillator.
|
||||
*
|
||||
* \param pm Base address of the Power Manager (i.e. &AVR32_PM).
|
||||
* \param mode 32-kHz oscillator mode (i.e. AVR32_PM_OSCCTRL32_MODE_x).
|
||||
*/
|
||||
static void pm_set_osc32_mode(volatile avr32_pm_t *pm, unsigned int mode)
|
||||
{
|
||||
// Read
|
||||
u_avr32_pm_oscctrl32_t u_avr32_pm_oscctrl32 = {pm->oscctrl32};
|
||||
// Modify
|
||||
u_avr32_pm_oscctrl32.OSCCTRL32.mode = mode;
|
||||
// Write
|
||||
pm->oscctrl32 = u_avr32_pm_oscctrl32.oscctrl32;
|
||||
}
|
||||
|
||||
|
||||
void pm_enable_osc32_ext_clock(volatile avr32_pm_t *pm)
|
||||
{
|
||||
pm_set_osc32_mode(pm, AVR32_PM_OSCCTRL32_MODE_EXT_CLOCK);
|
||||
}
|
||||
|
||||
|
||||
void pm_enable_osc32_crystal(volatile avr32_pm_t *pm)
|
||||
{
|
||||
pm_set_osc32_mode(pm, AVR32_PM_OSCCTRL32_MODE_CRYSTAL);
|
||||
}
|
||||
|
||||
|
||||
void pm_enable_clk32(volatile avr32_pm_t *pm, unsigned int startup)
|
||||
{
|
||||
pm_enable_clk32_no_wait(pm, startup);
|
||||
pm_wait_for_clk32_ready(pm);
|
||||
}
|
||||
|
||||
|
||||
void pm_disable_clk32(volatile avr32_pm_t *pm)
|
||||
{
|
||||
pm->oscctrl32 &= ~AVR32_PM_OSCCTRL32_OSC32EN_MASK;
|
||||
}
|
||||
|
||||
|
||||
void pm_enable_clk32_no_wait(volatile avr32_pm_t *pm, unsigned int startup)
|
||||
{
|
||||
// Read register
|
||||
u_avr32_pm_oscctrl32_t u_avr32_pm_oscctrl32 = {pm->oscctrl32};
|
||||
// Modify
|
||||
u_avr32_pm_oscctrl32.OSCCTRL32.osc32en = 1;
|
||||
u_avr32_pm_oscctrl32.OSCCTRL32.startup = startup;
|
||||
// Write back
|
||||
pm->oscctrl32 = u_avr32_pm_oscctrl32.oscctrl32;
|
||||
}
|
||||
|
||||
|
||||
void pm_wait_for_clk32_ready(volatile avr32_pm_t *pm)
|
||||
{
|
||||
while (!(pm->poscsr & AVR32_PM_POSCSR_OSC32RDY_MASK));
|
||||
}
|
||||
|
||||
|
||||
void pm_cksel(volatile avr32_pm_t *pm,
|
||||
unsigned int pbadiv,
|
||||
unsigned int pbasel,
|
||||
unsigned int pbbdiv,
|
||||
unsigned int pbbsel,
|
||||
unsigned int hsbdiv,
|
||||
unsigned int hsbsel)
|
||||
{
|
||||
u_avr32_pm_cksel_t u_avr32_pm_cksel = {0};
|
||||
|
||||
u_avr32_pm_cksel.CKSEL.cpusel = hsbsel;
|
||||
u_avr32_pm_cksel.CKSEL.cpudiv = hsbdiv;
|
||||
u_avr32_pm_cksel.CKSEL.hsbsel = hsbsel;
|
||||
u_avr32_pm_cksel.CKSEL.hsbdiv = hsbdiv;
|
||||
u_avr32_pm_cksel.CKSEL.pbasel = pbasel;
|
||||
u_avr32_pm_cksel.CKSEL.pbadiv = pbadiv;
|
||||
u_avr32_pm_cksel.CKSEL.pbbsel = pbbsel;
|
||||
u_avr32_pm_cksel.CKSEL.pbbdiv = pbbdiv;
|
||||
|
||||
pm->cksel = u_avr32_pm_cksel.cksel;
|
||||
|
||||
// Wait for ckrdy bit and then clear it
|
||||
while (!(pm->poscsr & AVR32_PM_POSCSR_CKRDY_MASK));
|
||||
}
|
||||
|
||||
|
||||
void pm_gc_setup(volatile avr32_pm_t *pm,
|
||||
unsigned int gc,
|
||||
unsigned int osc_or_pll, // Use Osc (=0) or PLL (=1)
|
||||
unsigned int pll_osc, // Sel Osc0/PLL0 or Osc1/PLL1
|
||||
unsigned int diven,
|
||||
unsigned int div)
|
||||
{
|
||||
u_avr32_pm_gcctrl_t u_avr32_pm_gcctrl = {0};
|
||||
|
||||
u_avr32_pm_gcctrl.GCCTRL.oscsel = pll_osc;
|
||||
u_avr32_pm_gcctrl.GCCTRL.pllsel = osc_or_pll;
|
||||
u_avr32_pm_gcctrl.GCCTRL.diven = diven;
|
||||
u_avr32_pm_gcctrl.GCCTRL.div = div;
|
||||
|
||||
pm->gcctrl[gc] = u_avr32_pm_gcctrl.gcctrl;
|
||||
}
|
||||
|
||||
|
||||
void pm_gc_enable(volatile avr32_pm_t *pm,
|
||||
unsigned int gc)
|
||||
{
|
||||
pm->gcctrl[gc] |= AVR32_PM_GCCTRL_CEN_MASK;
|
||||
}
|
||||
|
||||
|
||||
void pm_gc_disable(volatile avr32_pm_t *pm,
|
||||
unsigned int gc)
|
||||
{
|
||||
pm->gcctrl[gc] &= ~AVR32_PM_GCCTRL_CEN_MASK;
|
||||
}
|
||||
|
||||
|
||||
void pm_pll_setup(volatile avr32_pm_t *pm,
|
||||
unsigned int pll,
|
||||
unsigned int mul,
|
||||
unsigned int div,
|
||||
unsigned int osc,
|
||||
unsigned int lockcount)
|
||||
{
|
||||
u_avr32_pm_pll_t u_avr32_pm_pll = {0};
|
||||
|
||||
u_avr32_pm_pll.PLL.pllosc = osc;
|
||||
u_avr32_pm_pll.PLL.plldiv = div;
|
||||
u_avr32_pm_pll.PLL.pllmul = mul;
|
||||
u_avr32_pm_pll.PLL.pllcount = lockcount;
|
||||
|
||||
pm->pll[pll] = u_avr32_pm_pll.pll;
|
||||
}
|
||||
|
||||
|
||||
void pm_pll_set_option(volatile avr32_pm_t *pm,
|
||||
unsigned int pll,
|
||||
unsigned int pll_freq,
|
||||
unsigned int pll_div2,
|
||||
unsigned int pll_wbwdisable)
|
||||
{
|
||||
u_avr32_pm_pll_t u_avr32_pm_pll = {pm->pll[pll]};
|
||||
u_avr32_pm_pll.PLL.pllopt = pll_freq | (pll_div2 << 1) | (pll_wbwdisable << 2);
|
||||
pm->pll[pll] = u_avr32_pm_pll.pll;
|
||||
}
|
||||
|
||||
|
||||
unsigned int pm_pll_get_option(volatile avr32_pm_t *pm,
|
||||
unsigned int pll)
|
||||
{
|
||||
return (pm->pll[pll] & AVR32_PM_PLLOPT_MASK) >> AVR32_PM_PLLOPT_OFFSET;
|
||||
}
|
||||
|
||||
|
||||
void pm_pll_enable(volatile avr32_pm_t *pm,
|
||||
unsigned int pll)
|
||||
{
|
||||
pm->pll[pll] |= AVR32_PM_PLLEN_MASK;
|
||||
}
|
||||
|
||||
|
||||
void pm_pll_disable(volatile avr32_pm_t *pm,
|
||||
unsigned int pll)
|
||||
{
|
||||
pm->pll[pll] &= ~AVR32_PM_PLLEN_MASK;
|
||||
}
|
||||
|
||||
|
||||
void pm_wait_for_pll0_locked(volatile avr32_pm_t *pm)
|
||||
{
|
||||
while (!(pm->poscsr & AVR32_PM_POSCSR_LOCK0_MASK));
|
||||
|
||||
// Bypass the lock signal of the PLL
|
||||
pm->pll[0] |= AVR32_PM_PLL0_PLLBPL_MASK;
|
||||
}
|
||||
|
||||
|
||||
void pm_wait_for_pll1_locked(volatile avr32_pm_t *pm)
|
||||
{
|
||||
while (!(pm->poscsr & AVR32_PM_POSCSR_LOCK1_MASK));
|
||||
|
||||
// Bypass the lock signal of the PLL
|
||||
pm->pll[1] |= AVR32_PM_PLL1_PLLBPL_MASK;
|
||||
}
|
||||
|
||||
|
||||
void pm_switch_to_clock(volatile avr32_pm_t *pm, unsigned long clock)
|
||||
{
|
||||
// Read
|
||||
u_avr32_pm_mcctrl_t u_avr32_pm_mcctrl = {pm->mcctrl};
|
||||
// Modify
|
||||
u_avr32_pm_mcctrl.MCCTRL.mcsel = clock;
|
||||
// Write back
|
||||
pm->mcctrl = u_avr32_pm_mcctrl.mcctrl;
|
||||
}
|
||||
|
||||
|
||||
void pm_switch_to_osc0(volatile avr32_pm_t *pm, unsigned int fosc0, unsigned int startup)
|
||||
{
|
||||
pm_enable_osc0_crystal(pm, fosc0); // Enable the Osc0 in crystal mode
|
||||
pm_enable_clk0(pm, startup); // Crystal startup time - This parameter is critical and depends on the characteristics of the crystal
|
||||
pm_switch_to_clock(pm, AVR32_PM_MCSEL_OSC0); // Then switch main clock to Osc0
|
||||
}
|
||||
|
||||
|
||||
void pm_bod_enable_irq(volatile avr32_pm_t *pm)
|
||||
{
|
||||
pm->ier = AVR32_PM_IER_BODDET_MASK;
|
||||
}
|
||||
|
||||
|
||||
void pm_bod_disable_irq(volatile avr32_pm_t *pm)
|
||||
{
|
||||
pm->idr = AVR32_PM_IDR_BODDET_MASK;
|
||||
}
|
||||
|
||||
|
||||
void pm_bod_clear_irq(volatile avr32_pm_t *pm)
|
||||
{
|
||||
pm->icr = AVR32_PM_ICR_BODDET_MASK;
|
||||
}
|
||||
|
||||
|
||||
unsigned long pm_bod_get_irq_status(volatile avr32_pm_t *pm)
|
||||
{
|
||||
return ((pm->isr & AVR32_PM_ISR_BODDET_MASK) != 0);
|
||||
}
|
||||
|
||||
|
||||
unsigned long pm_bod_get_irq_enable_bit(volatile avr32_pm_t *pm)
|
||||
{
|
||||
return ((pm->imr & AVR32_PM_IMR_BODDET_MASK) != 0);
|
||||
}
|
||||
|
||||
|
||||
unsigned long pm_bod_get_level(volatile avr32_pm_t *pm)
|
||||
{
|
||||
return (pm->bod & AVR32_PM_BOD_LEVEL_MASK) >> AVR32_PM_BOD_LEVEL_OFFSET;
|
||||
}
|
||||
|
||||
|
||||
void pm_write_gplp(volatile avr32_pm_t *pm,unsigned long gplp, unsigned long value)
|
||||
{
|
||||
pm->gplp[gplp] = value;
|
||||
}
|
||||
|
||||
|
||||
unsigned long pm_read_gplp(volatile avr32_pm_t *pm,unsigned long gplp)
|
||||
{
|
||||
return pm->gplp[gplp];
|
||||
}
|
@ -1,335 +0,0 @@
|
||||
/*This file has been prepared for Doxygen automatic documentation generation.*/
|
||||
/*! \file *********************************************************************
|
||||
*
|
||||
* \brief Power Manager driver.
|
||||
*
|
||||
*
|
||||
* - Compiler: IAR EWAVR32 and GNU GCC for AVR32
|
||||
* - Supported devices: All AVR32 devices.
|
||||
* - AppNote:
|
||||
*
|
||||
* \author Atmel Corporation: http://www.atmel.com \n
|
||||
* Support and FAQ: http://support.atmel.no/
|
||||
*
|
||||
*****************************************************************************/
|
||||
|
||||
/* Copyright (c) 2007, Atmel Corporation All rights reserved.
|
||||
*
|
||||
* Redistribution and use in source and binary forms, with or without
|
||||
* modification, are permitted provided that the following conditions are met:
|
||||
*
|
||||
* 1. Redistributions of source code must retain the above copyright notice,
|
||||
* this list of conditions and the following disclaimer.
|
||||
*
|
||||
* 2. Redistributions in binary form must reproduce the above copyright notice,
|
||||
* this list of conditions and the following disclaimer in the documentation
|
||||
* and/or other materials provided with the distribution.
|
||||
*
|
||||
* 3. The name of ATMEL may not be used to endorse or promote products derived
|
||||
* from this software without specific prior written permission.
|
||||
*
|
||||
* THIS SOFTWARE IS PROVIDED BY ATMEL ``AS IS'' AND ANY EXPRESS OR IMPLIED
|
||||
* WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
|
||||
* MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE EXPRESSLY AND
|
||||
* SPECIFICALLY DISCLAIMED. IN NO EVENT SHALL ATMEL BE LIABLE FOR ANY DIRECT,
|
||||
* INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
|
||||
* (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
|
||||
* LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
|
||||
* ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
|
||||
* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
|
||||
* THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||
*/
|
||||
|
||||
|
||||
#ifndef _PM_H_
|
||||
#define _PM_H_
|
||||
|
||||
#include <avr32/io.h>
|
||||
#include "compiler.h"
|
||||
#include "preprocessor.h"
|
||||
|
||||
|
||||
/*! \brief Sets the MCU in the specified sleep mode.
|
||||
*
|
||||
* \param mode Sleep mode:
|
||||
* \arg \c AVR32_PM_SMODE_IDLE: Idle;
|
||||
* \arg \c AVR32_PM_SMODE_FROZEN: Frozen;
|
||||
* \arg \c AVR32_PM_SMODE_STANDBY: Standby;
|
||||
* \arg \c AVR32_PM_SMODE_STOP: Stop;
|
||||
* \arg \c AVR32_PM_SMODE_SHUTDOWN: Shutdown (DeepStop);
|
||||
* \arg \c AVR32_PM_SMODE_STATIC: Static.
|
||||
*/
|
||||
#define SLEEP(mode) {__asm__ __volatile__ ("sleep "STRINGZ(mode));}
|
||||
|
||||
|
||||
/*! \brief Gets the MCU reset cause.
|
||||
*
|
||||
* \param pm Base address of the Power Manager instance (i.e. &AVR32_PM).
|
||||
*
|
||||
* \return The MCU reset cause which can be masked with the
|
||||
* \c AVR32_PM_RCAUSE_x_MASK bit-masks to isolate specific causes.
|
||||
*/
|
||||
#if __GNUC__
|
||||
__attribute__((__always_inline__))
|
||||
#endif
|
||||
extern __inline__ unsigned int pm_get_reset_cause(volatile avr32_pm_t *pm)
|
||||
{
|
||||
return pm->rcause;
|
||||
}
|
||||
|
||||
|
||||
/*!
|
||||
* \brief This function will enable the external clock mode of the oscillator 0.
|
||||
* \param pm Base address of the Power Manager (i.e. &AVR32_PM)
|
||||
*/
|
||||
extern void pm_enable_osc0_ext_clock(volatile avr32_pm_t *pm);
|
||||
|
||||
|
||||
/*!
|
||||
* \brief This function will enable the crystal mode of the oscillator 0.
|
||||
* \param pm Base address of the Power Manager (i.e. &AVR32_PM)
|
||||
* \param fosc0 Oscillator 0 crystal frequency (Hz)
|
||||
*/
|
||||
extern void pm_enable_osc0_crystal(volatile avr32_pm_t *pm, unsigned int fosc0);
|
||||
|
||||
|
||||
/*!
|
||||
* \brief This function will enable the oscillator 0 to be used with a startup time.
|
||||
* \param pm Base address of the Power Manager (i.e. &AVR32_PM)
|
||||
* \param startup Clock 0 startup time. Time is expressed in term of RCOsc periods (3-bit value)
|
||||
*/
|
||||
extern void pm_enable_clk0(volatile avr32_pm_t *pm, unsigned int startup);
|
||||
|
||||
|
||||
/*!
|
||||
* \brief This function will disable the oscillator 0.
|
||||
* \param pm Base address of the Power Manager (i.e. &AVR32_PM)
|
||||
*/
|
||||
extern void pm_disable_clk0(volatile avr32_pm_t *pm);
|
||||
|
||||
|
||||
/*!
|
||||
* \brief This function will enable the oscillator 0 to be used with no startup time.
|
||||
* \param pm Base address of the Power Manager (i.e. &AVR32_PM)
|
||||
* \param startup Clock 0 startup time. Time is expressed in term of RCOsc periods (3-bit value) but not checked.
|
||||
*/
|
||||
extern void pm_enable_clk0_no_wait(volatile avr32_pm_t *pm, unsigned int startup);
|
||||
|
||||
|
||||
/*!
|
||||
* \brief This function will wait until the Osc0 clock is ready.
|
||||
* \param pm Base address of the Power Manager (i.e. &AVR32_PM)
|
||||
*/
|
||||
extern void pm_wait_for_clk0_ready(volatile avr32_pm_t *pm);
|
||||
|
||||
|
||||
/*!
|
||||
* \brief This function will enable the external clock mode of the oscillator 1.
|
||||
* \param pm Base address of the Power Manager (i.e. &AVR32_PM)
|
||||
*/
|
||||
extern void pm_enable_osc1_ext_clock(volatile avr32_pm_t *pm);
|
||||
|
||||
|
||||
/*!
|
||||
* \brief This function will enable the crystal mode of the oscillator 1.
|
||||
* \param pm Base address of the Power Manager (i.e. &AVR32_PM)
|
||||
* \param fosc1 Oscillator 1 crystal frequency (Hz)
|
||||
*/
|
||||
extern void pm_enable_osc1_crystal(volatile avr32_pm_t *pm, unsigned int fosc1);
|
||||
|
||||
|
||||
/*!
|
||||
* \brief This function will enable the oscillator 1 to be used with a startup time.
|
||||
* \param pm Base address of the Power Manager (i.e. &AVR32_PM)
|
||||
* \param startup Clock 1 startup time. Time is expressed in term of RCOsc periods (3-bit value)
|
||||
*/
|
||||
extern void pm_enable_clk1(volatile avr32_pm_t *pm, unsigned int startup);
|
||||
|
||||
|
||||
/*!
|
||||
* \brief This function will disable the oscillator 1.
|
||||
* \param pm Base address of the Power Manager (i.e. &AVR32_PM)
|
||||
*/
|
||||
extern void pm_disable_clk1(volatile avr32_pm_t *pm);
|
||||
|
||||
|
||||
/*!
|
||||
* \brief This function will enable the oscillator 1 to be used with no startup time.
|
||||
* \param pm Base address of the Power Manager (i.e. &AVR32_PM)
|
||||
* \param startup Clock 1 startup time. Time is expressed in term of RCOsc periods (3-bit value) but not checked.
|
||||
*/
|
||||
extern void pm_enable_clk1_no_wait(volatile avr32_pm_t *pm, unsigned int startup);
|
||||
|
||||
|
||||
/*!
|
||||
* \brief This function will wait until the Osc1 clock is ready.
|
||||
* \param pm Base address of the Power Manager (i.e. &AVR32_PM)
|
||||
*/
|
||||
extern void pm_wait_for_clk1_ready(volatile avr32_pm_t *pm);
|
||||
|
||||
|
||||
/*!
|
||||
* \brief This function will enable the external clock mode of the 32-kHz oscillator.
|
||||
* \param pm Base address of the Power Manager (i.e. &AVR32_PM)
|
||||
*/
|
||||
extern void pm_enable_osc32_ext_clock(volatile avr32_pm_t *pm);
|
||||
|
||||
|
||||
/*!
|
||||
* \brief This function will enable the crystal mode of the 32-kHz oscillator.
|
||||
* \param pm Base address of the Power Manager (i.e. &AVR32_PM)
|
||||
*/
|
||||
extern void pm_enable_osc32_crystal(volatile avr32_pm_t *pm);
|
||||
|
||||
|
||||
/*!
|
||||
* \brief This function will enable the oscillator 32 to be used with a startup time.
|
||||
* \param pm Base address of the Power Manager (i.e. &AVR32_PM)
|
||||
* \param startup Clock 32 kHz startup time. Time is expressed in term of RCOsc periods (3-bit value)
|
||||
*/
|
||||
extern void pm_enable_clk32(volatile avr32_pm_t *pm, unsigned int startup);
|
||||
|
||||
|
||||
/*!
|
||||
* \brief This function will disable the oscillator 32.
|
||||
* \param pm Base address of the Power Manager (i.e. &AVR32_PM)
|
||||
*/
|
||||
extern void pm_disable_clk32(volatile avr32_pm_t *pm);
|
||||
|
||||
|
||||
/*!
|
||||
* \brief This function will enable the oscillator 32 to be used with no startup time.
|
||||
* \param pm Base address of the Power Manager (i.e. &AVR32_PM)
|
||||
* \param startup Clock 32 kHz startup time. Time is expressed in term of RCOsc periods (3-bit value) but not checked.
|
||||
*/
|
||||
extern void pm_enable_clk32_no_wait(volatile avr32_pm_t *pm, unsigned int startup);
|
||||
|
||||
|
||||
/*!
|
||||
* \brief This function will wait until the osc32 clock is ready.
|
||||
* \param pm Base address of the Power Manager (i.e. &AVR32_PM)
|
||||
*/
|
||||
extern void pm_wait_for_clk32_ready(volatile avr32_pm_t *pm);
|
||||
|
||||
|
||||
/*!
|
||||
* \brief This function will select all the power manager clocks.
|
||||
* \param pm Base address of the Power Manager (i.e. &AVR32_PM)
|
||||
* \param pbadiv Peripheral Bus A clock divisor enable
|
||||
* \param pbasel Peripheral Bus A select
|
||||
* \param pbbdiv Peripheral Bus B clock divisor enable
|
||||
* \param pbbsel Peripheral Bus B select
|
||||
* \param hsbdiv High Speed Bus clock divisor enable (CPU clock = HSB clock)
|
||||
* \param hsbsel High Speed Bus select (CPU clock = HSB clock )
|
||||
*/
|
||||
extern void pm_cksel(volatile avr32_pm_t *pm, unsigned int pbadiv, unsigned int pbasel, unsigned int pbbdiv, unsigned int pbbsel, unsigned int hsbdiv, unsigned int hsbsel);
|
||||
|
||||
|
||||
/*!
|
||||
* \brief This function will setup a generic clock.
|
||||
* \param pm Base address of the Power Manager (i.e. &AVR32_PM)
|
||||
* \param gc generic clock number (0 for gc0...)
|
||||
* \param osc_or_pll Use OSC (=0) or PLL (=1)
|
||||
* \param pll_osc Select Osc0/PLL0 or Osc1/PLL1
|
||||
* \param diven Generic clock divisor enable
|
||||
* \param div Generic clock divisor
|
||||
*/
|
||||
extern void pm_gc_setup(volatile avr32_pm_t *pm, unsigned int gc, unsigned int osc_or_pll, unsigned int pll_osc, unsigned int diven, unsigned int div);
|
||||
|
||||
|
||||
/*!
|
||||
* \brief This function will enable a generic clock.
|
||||
* \param pm Base address of the Power Manager (i.e. &AVR32_PM)
|
||||
* \param gc generic clock number (0 for gc0...)
|
||||
*/
|
||||
extern void pm_gc_enable(volatile avr32_pm_t *pm, unsigned int gc);
|
||||
|
||||
|
||||
/*!
|
||||
* \brief This function will disable a generic clock.
|
||||
* \param pm Base address of the Power Manager (i.e. &AVR32_PM)
|
||||
* \param gc generic clock number (0 for gc0...)
|
||||
*/
|
||||
extern void pm_gc_disable(volatile avr32_pm_t *pm, unsigned int gc);
|
||||
|
||||
|
||||
/*!
|
||||
* \brief This function will setup a PLL.
|
||||
* \param pm Base address of the Power Manager (i.e. &AVR32_PM)
|
||||
* \param pll PLL number(0 for PLL0, 1 for PLL1)
|
||||
* \param mul PLL MUL in the PLL formula
|
||||
* \param div PLL DIV in the PLL formula
|
||||
* \param osc OSC number (0 for osc0, 1 for osc1)
|
||||
* \param lockcount PLL lockount
|
||||
*/
|
||||
extern void pm_pll_setup(volatile avr32_pm_t *pm, unsigned int pll, unsigned int mul, unsigned int div, unsigned int osc, unsigned int lockcount);
|
||||
|
||||
|
||||
/*!
|
||||
* \brief This function will set a PLL option.
|
||||
* \param pm Base address of the Power Manager (i.e. &AVR32_PM)
|
||||
* \param pll PLL number(0 for PLL0, 1 for PLL1)
|
||||
* \param pll_freq Set to 1 for VCO frequency range 80-180MHz, set to 0 for VCO frequency range 160-240Mhz.
|
||||
* \param pll_div2 Divide the PLL output frequency by 2 (this settings does not change the FVCO value)
|
||||
* \param pll_wbwdisable 1 Disable the Wide-Bandith Mode (Wide-Bandwith mode allow a faster startup time and out-of-lock time). 0 to enable the Wide-Bandith Mode.
|
||||
*/
|
||||
extern void pm_pll_set_option(volatile avr32_pm_t *pm, unsigned int pll, unsigned int pll_freq, unsigned int pll_div2, unsigned int pll_wbwdisable);
|
||||
|
||||
|
||||
/*!
|
||||
* \brief This function will get a PLL option.
|
||||
* \param pm Base address of the Power Manager (i.e. &AVR32_PM)
|
||||
* \param pll PLL number(0 for PLL0, 1 for PLL1)
|
||||
* \return Option
|
||||
*/
|
||||
extern unsigned int pm_pll_get_option(volatile avr32_pm_t *pm, unsigned int pll);
|
||||
|
||||
|
||||
/*!
|
||||
* \brief This function will enable a PLL.
|
||||
* \param pm Base address of the Power Manager (i.e. &AVR32_PM)
|
||||
* \param pll PLL number(0 for PLL0, 1 for PLL1)
|
||||
*/
|
||||
extern void pm_pll_enable(volatile avr32_pm_t *pm, unsigned int pll);
|
||||
|
||||
|
||||
/*!
|
||||
* \brief This function will disable a PLL.
|
||||
* \param pm Base address of the Power Manager (i.e. &AVR32_PM)
|
||||
* \param pll PLL number(0 for PLL0, 1 for PLL1)
|
||||
*/
|
||||
extern void pm_pll_disable(volatile avr32_pm_t *pm, unsigned int pll);
|
||||
|
||||
|
||||
/*!
|
||||
* \brief This function will wait for PLL0 locked
|
||||
* \param pm Base address of the Power Manager (i.e. &AVR32_PM)
|
||||
*/
|
||||
extern void pm_wait_for_pll0_locked(volatile avr32_pm_t *pm);
|
||||
|
||||
|
||||
/*!
|
||||
* \brief This function will wait for PLL1 locked
|
||||
* \param pm Base address of the Power Manager (i.e. &AVR32_PM)
|
||||
*/
|
||||
extern void pm_wait_for_pll1_locked(volatile avr32_pm_t *pm);
|
||||
|
||||
|
||||
/*!
|
||||
* \brief This function will switch the power manager main clock.
|
||||
* \param pm Base address of the Power Manager (i.e. &AVR32_PM)
|
||||
* \param clock Clock to be switched on. AVR32_PM_MCSEL_SLOW for RCOsc, AVR32_PM_MCSEL_OSC0 for Osc0, AVR32_PM_MCSEL_PLL0 for PLL0.
|
||||
*/
|
||||
extern void pm_switch_to_clock(volatile avr32_pm_t *pm, unsigned long clock);
|
||||
|
||||
|
||||
/*!
|
||||
* \brief Switch main clock to clock Osc0 (crystal mode)
|
||||
* \param pm Base address of the Power Manager (i.e. &AVR32_PM)
|
||||
* \param fosc0 Oscillator 0 crystal frequency (Hz)
|
||||
* \param startup Crystal 0 startup time. Time is expressed in term of RCOsc periods (3-bit value)
|
||||
*/
|
||||
extern void pm_switch_to_osc0(volatile avr32_pm_t *pm, unsigned int fosc0, unsigned int startup);
|
||||
|
||||
|
||||
#endif // _PM_H_
|
@ -1,292 +0,0 @@
|
||||
/*This file is prepared for Doxygen automatic documentation generation.*/
|
||||
/*! \file *********************************************************************
|
||||
*
|
||||
* \brief TC driver for AVR32 UC3.
|
||||
*
|
||||
* AVR32 Timer/Counter driver module.
|
||||
*
|
||||
* - Compiler: IAR EWAVR32 and GNU GCC for AVR32
|
||||
* - Supported devices: All AVR32 devices with a TC module can be used.
|
||||
* - AppNote:
|
||||
*
|
||||
* \author Atmel Corporation: http://www.atmel.com \n
|
||||
* Support and FAQ: http://support.atmel.no/
|
||||
*
|
||||
******************************************************************************/
|
||||
|
||||
/* Copyright (c) 2007, Atmel Corporation All rights reserved.
|
||||
*
|
||||
* Redistribution and use in source and binary forms, with or without
|
||||
* modification, are permitted provided that the following conditions are met:
|
||||
*
|
||||
* 1. Redistributions of source code must retain the above copyright notice,
|
||||
* this list of conditions and the following disclaimer.
|
||||
*
|
||||
* 2. Redistributions in binary form must reproduce the above copyright notice,
|
||||
* this list of conditions and the following disclaimer in the documentation
|
||||
* and/or other materials provided with the distribution.
|
||||
*
|
||||
* 3. The name of ATMEL may not be used to endorse or promote products derived
|
||||
* from this software without specific prior written permission.
|
||||
*
|
||||
* THIS SOFTWARE IS PROVIDED BY ATMEL ``AS IS'' AND ANY EXPRESS OR IMPLIED
|
||||
* WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
|
||||
* MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE EXPRESSLY AND
|
||||
* SPECIFICALLY DISCLAIMED. IN NO EVENT SHALL ATMEL BE LIABLE FOR ANY DIRECT,
|
||||
* INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
|
||||
* (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
|
||||
* LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
|
||||
* ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
|
||||
* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
|
||||
* THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||
*/
|
||||
|
||||
|
||||
#include <avr32/io.h>
|
||||
#include "compiler.h"
|
||||
#include "tc.h"
|
||||
|
||||
|
||||
int tc_get_interrupt_settings(volatile avr32_tc_t *tc, unsigned int channel)
|
||||
{
|
||||
// Check for valid input.
|
||||
if (channel >= TC_NUMBER_OF_CHANNELS)
|
||||
return TC_INVALID_ARGUMENT;
|
||||
|
||||
return tc->channel[channel].imr;
|
||||
}
|
||||
|
||||
|
||||
int tc_configure_interrupts(volatile avr32_tc_t *tc, unsigned int channel, const tc_interrupt_t *bitfield)
|
||||
{
|
||||
// Check for valid input.
|
||||
if (channel >= TC_NUMBER_OF_CHANNELS)
|
||||
return TC_INVALID_ARGUMENT;
|
||||
|
||||
// Enable the appropriate interrupts.
|
||||
tc->channel[channel].ier = bitfield->etrgs << AVR32_TC_ETRGS_OFFSET |
|
||||
bitfield->ldrbs << AVR32_TC_LDRBS_OFFSET |
|
||||
bitfield->ldras << AVR32_TC_LDRAS_OFFSET |
|
||||
bitfield->cpcs << AVR32_TC_CPCS_OFFSET |
|
||||
bitfield->cpbs << AVR32_TC_CPBS_OFFSET |
|
||||
bitfield->cpas << AVR32_TC_CPAS_OFFSET |
|
||||
bitfield->lovrs << AVR32_TC_LOVRS_OFFSET |
|
||||
bitfield->covfs << AVR32_TC_COVFS_OFFSET;
|
||||
|
||||
// Disable the appropriate interrupts.
|
||||
tc->channel[channel].idr = (~bitfield->etrgs & 1) << AVR32_TC_ETRGS_OFFSET |
|
||||
(~bitfield->ldrbs & 1) << AVR32_TC_LDRBS_OFFSET |
|
||||
(~bitfield->ldras & 1) << AVR32_TC_LDRAS_OFFSET |
|
||||
(~bitfield->cpcs & 1) << AVR32_TC_CPCS_OFFSET |
|
||||
(~bitfield->cpbs & 1) << AVR32_TC_CPBS_OFFSET |
|
||||
(~bitfield->cpas & 1) << AVR32_TC_CPAS_OFFSET |
|
||||
(~bitfield->lovrs & 1) << AVR32_TC_LOVRS_OFFSET |
|
||||
(~bitfield->covfs & 1) << AVR32_TC_COVFS_OFFSET;
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
||||
int tc_select_external_clock(volatile avr32_tc_t *tc, unsigned int channel, unsigned int ext_clk_sig_src)
|
||||
{
|
||||
// Check for valid input.
|
||||
if (channel >= TC_NUMBER_OF_CHANNELS || ext_clk_sig_src >= 1 << AVR32_TC_BMR_TC0XC0S_SIZE)
|
||||
return TC_INVALID_ARGUMENT;
|
||||
|
||||
// Clear bit-field and set the correct behavior.
|
||||
tc->bmr = (tc->bmr & ~(AVR32_TC_BMR_TC0XC0S_MASK << (channel * AVR32_TC_BMR_TC0XC0S_SIZE))) |
|
||||
(ext_clk_sig_src << (channel * AVR32_TC_BMR_TC0XC0S_SIZE));
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
||||
int tc_init_capture(volatile avr32_tc_t *tc, const tc_capture_opt_t *opt)
|
||||
{
|
||||
// Check for valid input.
|
||||
if (opt->channel >= TC_NUMBER_OF_CHANNELS)
|
||||
return TC_INVALID_ARGUMENT;
|
||||
|
||||
// MEASURE SIGNALS: Capture operating mode.
|
||||
tc->channel[opt->channel].cmr = opt->ldrb << AVR32_TC_LDRB_OFFSET |
|
||||
opt->ldra << AVR32_TC_LDRA_OFFSET |
|
||||
0 << AVR32_TC_WAVE_OFFSET |
|
||||
opt->cpctrg << AVR32_TC_CPCTRG_OFFSET |
|
||||
opt->abetrg << AVR32_TC_ABETRG_OFFSET |
|
||||
opt->etrgedg << AVR32_TC_ETRGEDG_OFFSET|
|
||||
opt->ldbdis << AVR32_TC_LDBDIS_OFFSET |
|
||||
opt->ldbstop << AVR32_TC_LDBSTOP_OFFSET |
|
||||
opt->burst << AVR32_TC_BURST_OFFSET |
|
||||
opt->clki << AVR32_TC_CLKI_OFFSET |
|
||||
opt->tcclks << AVR32_TC_TCCLKS_OFFSET;
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
||||
int tc_init_waveform(volatile avr32_tc_t *tc, const tc_waveform_opt_t *opt)
|
||||
{
|
||||
// Check for valid input.
|
||||
if (opt->channel >= TC_NUMBER_OF_CHANNELS)
|
||||
return TC_INVALID_ARGUMENT;
|
||||
|
||||
// GENERATE SIGNALS: Waveform operating mode.
|
||||
tc->channel[opt->channel].cmr = opt->bswtrg << AVR32_TC_BSWTRG_OFFSET |
|
||||
opt->beevt << AVR32_TC_BEEVT_OFFSET |
|
||||
opt->bcpc << AVR32_TC_BCPC_OFFSET |
|
||||
opt->bcpb << AVR32_TC_BCPB_OFFSET |
|
||||
opt->aswtrg << AVR32_TC_ASWTRG_OFFSET |
|
||||
opt->aeevt << AVR32_TC_AEEVT_OFFSET |
|
||||
opt->acpc << AVR32_TC_ACPC_OFFSET |
|
||||
opt->acpa << AVR32_TC_ACPA_OFFSET |
|
||||
1 << AVR32_TC_WAVE_OFFSET |
|
||||
opt->wavsel << AVR32_TC_WAVSEL_OFFSET |
|
||||
opt->enetrg << AVR32_TC_ENETRG_OFFSET |
|
||||
opt->eevt << AVR32_TC_EEVT_OFFSET |
|
||||
opt->eevtedg << AVR32_TC_EEVTEDG_OFFSET |
|
||||
opt->cpcdis << AVR32_TC_CPCDIS_OFFSET |
|
||||
opt->cpcstop << AVR32_TC_CPCSTOP_OFFSET |
|
||||
opt->burst << AVR32_TC_BURST_OFFSET |
|
||||
opt->clki << AVR32_TC_CLKI_OFFSET |
|
||||
opt->tcclks << AVR32_TC_TCCLKS_OFFSET;
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
||||
int tc_start(volatile avr32_tc_t *tc, unsigned int channel)
|
||||
{
|
||||
// Check for valid input.
|
||||
if (channel >= TC_NUMBER_OF_CHANNELS)
|
||||
return TC_INVALID_ARGUMENT;
|
||||
|
||||
// Enable, reset and start the selected timer/counter channel.
|
||||
tc->channel[channel].ccr = AVR32_TC_SWTRG_MASK | AVR32_TC_CLKEN_MASK;
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
||||
int tc_stop(volatile avr32_tc_t *tc, unsigned int channel)
|
||||
{
|
||||
// Check for valid input.
|
||||
if (channel >= TC_NUMBER_OF_CHANNELS)
|
||||
return TC_INVALID_ARGUMENT;
|
||||
|
||||
// Disable the selected timer/counter channel.
|
||||
tc->channel[channel].ccr = AVR32_TC_CLKDIS_MASK;
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
||||
int tc_software_trigger(volatile avr32_tc_t *tc, unsigned int channel)
|
||||
{
|
||||
// Check for valid input.
|
||||
if (channel >= TC_NUMBER_OF_CHANNELS)
|
||||
return TC_INVALID_ARGUMENT;
|
||||
|
||||
// Reset the selected timer/counter channel.
|
||||
tc->channel[channel].ccr = AVR32_TC_SWTRG_MASK;
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
||||
void tc_sync_trigger(volatile avr32_tc_t *tc)
|
||||
{
|
||||
// Reset all channels of the selected timer/counter.
|
||||
tc->bcr = AVR32_TC_BCR_SYNC_MASK;
|
||||
}
|
||||
|
||||
|
||||
int tc_read_sr(volatile avr32_tc_t *tc, unsigned int channel)
|
||||
{
|
||||
// Check for valid input.
|
||||
if (channel >= TC_NUMBER_OF_CHANNELS)
|
||||
return TC_INVALID_ARGUMENT;
|
||||
|
||||
return tc->channel[channel].sr;
|
||||
}
|
||||
|
||||
|
||||
int tc_read_tc(volatile avr32_tc_t *tc, unsigned int channel)
|
||||
{
|
||||
// Check for valid input.
|
||||
if (channel >= TC_NUMBER_OF_CHANNELS)
|
||||
return TC_INVALID_ARGUMENT;
|
||||
|
||||
return Rd_bitfield(tc->channel[channel].cv, AVR32_TC_CV_MASK);
|
||||
}
|
||||
|
||||
|
||||
int tc_read_ra(volatile avr32_tc_t *tc, unsigned int channel)
|
||||
{
|
||||
// Check for valid input.
|
||||
if (channel >= TC_NUMBER_OF_CHANNELS)
|
||||
return TC_INVALID_ARGUMENT;
|
||||
|
||||
return Rd_bitfield(tc->channel[channel].ra, AVR32_TC_RA_MASK);
|
||||
}
|
||||
|
||||
|
||||
int tc_read_rb(volatile avr32_tc_t *tc, unsigned int channel)
|
||||
{
|
||||
// Check for valid input.
|
||||
if (channel >= TC_NUMBER_OF_CHANNELS)
|
||||
return TC_INVALID_ARGUMENT;
|
||||
|
||||
return Rd_bitfield(tc->channel[channel].rb, AVR32_TC_RB_MASK);
|
||||
}
|
||||
|
||||
|
||||
int tc_read_rc(volatile avr32_tc_t *tc, unsigned int channel)
|
||||
{
|
||||
// Check for valid input.
|
||||
if (channel >= TC_NUMBER_OF_CHANNELS)
|
||||
return TC_INVALID_ARGUMENT;
|
||||
|
||||
return Rd_bitfield(tc->channel[channel].rc, AVR32_TC_RC_MASK);
|
||||
}
|
||||
|
||||
|
||||
int tc_write_ra(volatile avr32_tc_t *tc, unsigned int channel, unsigned short value)
|
||||
{
|
||||
// Check for valid input.
|
||||
if (channel >= TC_NUMBER_OF_CHANNELS)
|
||||
return TC_INVALID_ARGUMENT;
|
||||
|
||||
// This function is only available in WAVEFORM mode.
|
||||
if (Tst_bits(tc->channel[channel].cmr, AVR32_TC_WAVE_MASK))
|
||||
Wr_bitfield(tc->channel[channel].ra, AVR32_TC_RA_MASK, value);
|
||||
|
||||
return value;
|
||||
}
|
||||
|
||||
|
||||
int tc_write_rb(volatile avr32_tc_t *tc, unsigned int channel, unsigned short value)
|
||||
{
|
||||
// Check for valid input.
|
||||
if (channel >= TC_NUMBER_OF_CHANNELS)
|
||||
return TC_INVALID_ARGUMENT;
|
||||
|
||||
// This function is only available in WAVEFORM mode.
|
||||
if (Tst_bits(tc->channel[channel].cmr, AVR32_TC_WAVE_MASK))
|
||||
Wr_bitfield(tc->channel[channel].rb, AVR32_TC_RB_MASK, value);
|
||||
|
||||
return value;
|
||||
}
|
||||
|
||||
|
||||
int tc_write_rc(volatile avr32_tc_t *tc, unsigned int channel, unsigned short value)
|
||||
{
|
||||
// Check for valid input.
|
||||
if (channel >= TC_NUMBER_OF_CHANNELS)
|
||||
return TC_INVALID_ARGUMENT;
|
||||
|
||||
// This function is only available in WAVEFORM mode.
|
||||
if (Tst_bits(tc->channel[channel].cmr, AVR32_TC_WAVE_MASK))
|
||||
Wr_bitfield(tc->channel[channel].rc, AVR32_TC_RC_MASK, value);
|
||||
|
||||
return value;
|
||||
}
|
@ -1,580 +0,0 @@
|
||||
/*This file is prepared for Doxygen automatic documentation generation.*/
|
||||
/*! \file *********************************************************************
|
||||
*
|
||||
* \brief Timer/Counter driver for AVR32 UC3.
|
||||
*
|
||||
* AVR32 Timer/Counter driver module.
|
||||
*
|
||||
* - Compiler: IAR EWAVR32 and GNU GCC for AVR32
|
||||
* - Supported devices: All AVR32 devices with a TC module can be used.
|
||||
* - AppNote:
|
||||
*
|
||||
* \author Atmel Corporation: http://www.atmel.com \n
|
||||
* Support and FAQ: http://support.atmel.no/
|
||||
*
|
||||
******************************************************************************/
|
||||
|
||||
/* Copyright (c) 2007, Atmel Corporation All rights reserved.
|
||||
*
|
||||
* Redistribution and use in source and binary forms, with or without
|
||||
* modification, are permitted provided that the following conditions are met:
|
||||
*
|
||||
* 1. Redistributions of source code must retain the above copyright notice,
|
||||
* this list of conditions and the following disclaimer.
|
||||
*
|
||||
* 2. Redistributions in binary form must reproduce the above copyright notice,
|
||||
* this list of conditions and the following disclaimer in the documentation
|
||||
* and/or other materials provided with the distribution.
|
||||
*
|
||||
* 3. The name of ATMEL may not be used to endorse or promote products derived
|
||||
* from this software without specific prior written permission.
|
||||
*
|
||||
* THIS SOFTWARE IS PROVIDED BY ATMEL ``AS IS'' AND ANY EXPRESS OR IMPLIED
|
||||
* WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
|
||||
* MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE EXPRESSLY AND
|
||||
* SPECIFICALLY DISCLAIMED. IN NO EVENT SHALL ATMEL BE LIABLE FOR ANY DIRECT,
|
||||
* INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
|
||||
* (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
|
||||
* LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
|
||||
* ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
|
||||
* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
|
||||
* THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||
*/
|
||||
|
||||
|
||||
#ifndef _TC_H_
|
||||
#define _TC_H_
|
||||
|
||||
#include <avr32/io.h>
|
||||
|
||||
|
||||
//! TC driver functions return value in case of invalid argument(s).
|
||||
#define TC_INVALID_ARGUMENT (-1)
|
||||
|
||||
//! Number of timer/counter channels.
|
||||
#define TC_NUMBER_OF_CHANNELS (sizeof(((avr32_tc_t *)0)->channel) / sizeof(avr32_tc_channel_t))
|
||||
|
||||
/*! \name External Clock Signal 0 Selection
|
||||
*/
|
||||
//! @{
|
||||
#define TC_CH0_EXT_CLK0_SRC_TCLK0 AVR32_TC_TC0XC0S_TCLK0
|
||||
#define TC_CH0_EXT_CLK0_SRC_NO_CLK AVR32_TC_TC0XC0S_NO_CLK
|
||||
#define TC_CH0_EXT_CLK0_SRC_TIOA1 AVR32_TC_TC0XC0S_TIOA1
|
||||
#define TC_CH0_EXT_CLK0_SRC_TIOA2 AVR32_TC_TC0XC0S_TIOA2
|
||||
//! @}
|
||||
|
||||
/*! \name External Clock Signal 1 Selection
|
||||
*/
|
||||
//! @{
|
||||
#define TC_CH1_EXT_CLK1_SRC_TCLK1 AVR32_TC_TC1XC1S_TCLK1
|
||||
#define TC_CH1_EXT_CLK1_SRC_NO_CLK AVR32_TC_TC1XC1S_NO_CLK
|
||||
#define TC_CH1_EXT_CLK1_SRC_TIOA0 AVR32_TC_TC1XC1S_TIOA0
|
||||
#define TC_CH1_EXT_CLK1_SRC_TIOA2 AVR32_TC_TC1XC1S_TIOA2
|
||||
//! @}
|
||||
|
||||
/*! \name External Clock Signal 2 Selection
|
||||
*/
|
||||
//! @{
|
||||
#define TC_CH2_EXT_CLK2_SRC_TCLK2 AVR32_TC_TC2XC2S_TCLK2
|
||||
#define TC_CH2_EXT_CLK2_SRC_NO_CLK AVR32_TC_TC2XC2S_NO_CLK
|
||||
#define TC_CH2_EXT_CLK2_SRC_TIOA0 AVR32_TC_TC2XC2S_TIOA0
|
||||
#define TC_CH2_EXT_CLK2_SRC_TIOA1 AVR32_TC_TC2XC2S_TIOA1
|
||||
//! @}
|
||||
|
||||
/*! \name Event/Trigger Actions on Output
|
||||
*/
|
||||
//! @{
|
||||
#define TC_EVT_EFFECT_NOOP AVR32_TC_NONE
|
||||
#define TC_EVT_EFFECT_SET AVR32_TC_SET
|
||||
#define TC_EVT_EFFECT_CLEAR AVR32_TC_CLEAR
|
||||
#define TC_EVT_EFFECT_TOGGLE AVR32_TC_TOGGLE
|
||||
//! @}
|
||||
|
||||
/*! \name RC Compare Trigger Enable
|
||||
*/
|
||||
//! @{
|
||||
#define TC_NO_TRIGGER_COMPARE_RC 0
|
||||
#define TC_TRIGGER_COMPARE_RC 1
|
||||
//! @}
|
||||
|
||||
/*! \name Waveform Selection
|
||||
*/
|
||||
//! @{
|
||||
#define TC_WAVEFORM_SEL_UP_MODE AVR32_TC_WAVSEL_UP_NO_AUTO
|
||||
#define TC_WAVEFORM_SEL_UP_MODE_RC_TRIGGER AVR32_TC_WAVSEL_UP_AUTO
|
||||
#define TC_WAVEFORM_SEL_UPDOWN_MODE AVR32_TC_WAVSEL_UPDOWN_NO_AUTO
|
||||
#define TC_WAVEFORM_SEL_UPDOWN_MODE_RC_TRIGGER AVR32_TC_WAVSEL_UPDOWN_AUTO
|
||||
//! @}
|
||||
|
||||
/*! \name TIOA or TIOB External Trigger Selection
|
||||
*/
|
||||
//! @{
|
||||
#define TC_EXT_TRIG_SEL_TIOA 1
|
||||
#define TC_EXT_TRIG_SEL_TIOB 0
|
||||
//! @}
|
||||
|
||||
/*! \name External Event Selection
|
||||
*/
|
||||
//! @{
|
||||
#define TC_EXT_EVENT_SEL_TIOB_INPUT AVR32_TC_EEVT_TIOB_INPUT
|
||||
#define TC_EXT_EVENT_SEL_XC0_OUTPUT AVR32_TC_EEVT_XC0_OUTPUT
|
||||
#define TC_EXT_EVENT_SEL_XC1_OUTPUT AVR32_TC_EEVT_XC1_OUTPUT
|
||||
#define TC_EXT_EVENT_SEL_XC2_OUTPUT AVR32_TC_EEVT_XC2_OUTPUT
|
||||
//! @}
|
||||
|
||||
/*! \name Edge Selection
|
||||
*/
|
||||
//! @{
|
||||
#define TC_SEL_NO_EDGE AVR32_TC_EEVTEDG_NO_EDGE
|
||||
#define TC_SEL_RISING_EDGE AVR32_TC_EEVTEDG_POS_EDGE
|
||||
#define TC_SEL_FALLING_EDGE AVR32_TC_EEVTEDG_NEG_EDGE
|
||||
#define TC_SEL_EACH_EDGE AVR32_TC_EEVTEDG_BOTH_EDGES
|
||||
//! @}
|
||||
|
||||
/*! \name Burst Signal Selection
|
||||
*/
|
||||
//! @{
|
||||
#define TC_BURST_NOT_GATED AVR32_TC_BURST_NOT_GATED
|
||||
#define TC_BURST_CLK_AND_XC0 AVR32_TC_BURST_CLK_AND_XC0
|
||||
#define TC_BURST_CLK_AND_XC1 AVR32_TC_BURST_CLK_AND_XC1
|
||||
#define TC_BURST_CLK_AND_XC2 AVR32_TC_BURST_CLK_AND_XC2
|
||||
//! @}
|
||||
|
||||
/*! \name Clock Invert
|
||||
*/
|
||||
//! @{
|
||||
#define TC_CLOCK_RISING_EDGE 0
|
||||
#define TC_CLOCK_FALLING_EDGE 1
|
||||
//! @}
|
||||
|
||||
/*! \name Clock Selection
|
||||
*/
|
||||
//! @{
|
||||
#define TC_CLOCK_SOURCE_TC1 AVR32_TC_TCCLKS_TIMER_DIV1_CLOCK
|
||||
#define TC_CLOCK_SOURCE_TC2 AVR32_TC_TCCLKS_TIMER_DIV2_CLOCK
|
||||
#define TC_CLOCK_SOURCE_TC3 AVR32_TC_TCCLKS_TIMER_DIV3_CLOCK
|
||||
#define TC_CLOCK_SOURCE_TC4 AVR32_TC_TCCLKS_TIMER_DIV4_CLOCK
|
||||
#define TC_CLOCK_SOURCE_TC5 AVR32_TC_TCCLKS_TIMER_DIV5_CLOCK
|
||||
#define TC_CLOCK_SOURCE_XC0 AVR32_TC_TCCLKS_XC0
|
||||
#define TC_CLOCK_SOURCE_XC1 AVR32_TC_TCCLKS_XC1
|
||||
#define TC_CLOCK_SOURCE_XC2 AVR32_TC_TCCLKS_XC2
|
||||
//! @}
|
||||
|
||||
|
||||
//! Timer/counter interrupts.
|
||||
typedef struct
|
||||
{
|
||||
unsigned int :24;
|
||||
|
||||
//! External trigger interrupt.
|
||||
unsigned int etrgs : 1;
|
||||
|
||||
//! RB load interrupt.
|
||||
unsigned int ldrbs : 1;
|
||||
|
||||
//! RA load interrupt.
|
||||
unsigned int ldras : 1;
|
||||
|
||||
//! RC compare interrupt.
|
||||
unsigned int cpcs : 1;
|
||||
|
||||
//! RB compare interrupt.
|
||||
unsigned int cpbs : 1;
|
||||
|
||||
//! RA compare interrupt.
|
||||
unsigned int cpas : 1;
|
||||
|
||||
//! Load overrun interrupt.
|
||||
unsigned int lovrs : 1;
|
||||
|
||||
//! Counter overflow interrupt.
|
||||
unsigned int covfs : 1;
|
||||
} tc_interrupt_t;
|
||||
|
||||
//! Parameters when initializing a timer/counter in capture mode.
|
||||
typedef struct
|
||||
{
|
||||
//! Channel to initialize.
|
||||
unsigned int channel ;
|
||||
|
||||
unsigned int :12;
|
||||
|
||||
//! RB loading selection:\n
|
||||
//! - \ref TC_SEL_NO_EDGE;\n
|
||||
//! - \ref TC_SEL_RISING_EDGE;\n
|
||||
//! - \ref TC_SEL_FALLING_EDGE;\n
|
||||
//! - \ref TC_SEL_EACH_EDGE.
|
||||
unsigned int ldrb : 2;
|
||||
|
||||
//! RA loading selection:\n
|
||||
//! - \ref TC_SEL_NO_EDGE;\n
|
||||
//! - \ref TC_SEL_RISING_EDGE;\n
|
||||
//! - \ref TC_SEL_FALLING_EDGE;\n
|
||||
//! - \ref TC_SEL_EACH_EDGE.
|
||||
unsigned int ldra : 2;
|
||||
|
||||
unsigned int : 1;
|
||||
|
||||
//! RC compare trigger enable:\n
|
||||
//! - \ref TC_NO_TRIGGER_COMPARE_RC;\n
|
||||
//! - \ref TC_TRIGGER_COMPARE_RC.
|
||||
unsigned int cpctrg : 1;
|
||||
|
||||
unsigned int : 3;
|
||||
|
||||
//! TIOA or TIOB external trigger selection:\n
|
||||
//! - \ref TC_EXT_TRIG_SEL_TIOA;\n
|
||||
//! - \ref TC_EXT_TRIG_SEL_TIOB.
|
||||
unsigned int abetrg : 1;
|
||||
|
||||
//! External trigger edge selection:\n
|
||||
//! - \ref TC_SEL_NO_EDGE;\n
|
||||
//! - \ref TC_SEL_RISING_EDGE;\n
|
||||
//! - \ref TC_SEL_FALLING_EDGE;\n
|
||||
//! - \ref TC_SEL_EACH_EDGE.
|
||||
unsigned int etrgedg : 2;
|
||||
|
||||
//! Counter clock disable with RB loading:\n
|
||||
//! - \c FALSE;\n
|
||||
//! - \c TRUE.
|
||||
unsigned int ldbdis : 1;
|
||||
|
||||
//! Counter clock stopped with RB loading:\n
|
||||
//! - \c FALSE;\n
|
||||
//! - \c TRUE.
|
||||
unsigned int ldbstop : 1;
|
||||
|
||||
//! Burst signal selection:\n
|
||||
//! - \ref TC_BURST_NOT_GATED;\n
|
||||
//! - \ref TC_BURST_CLK_AND_XC0;\n
|
||||
//! - \ref TC_BURST_CLK_AND_XC1;\n
|
||||
//! - \ref TC_BURST_CLK_AND_XC2.
|
||||
unsigned int burst : 2;
|
||||
|
||||
//! Clock invert:\n
|
||||
//! - \ref TC_CLOCK_RISING_EDGE;\n
|
||||
//! - \ref TC_CLOCK_FALLING_EDGE.
|
||||
unsigned int clki : 1;
|
||||
|
||||
//! Clock selection:\n
|
||||
//! - \ref TC_CLOCK_SOURCE_TC1;\n
|
||||
//! - \ref TC_CLOCK_SOURCE_TC2;\n
|
||||
//! - \ref TC_CLOCK_SOURCE_TC3;\n
|
||||
//! - \ref TC_CLOCK_SOURCE_TC4;\n
|
||||
//! - \ref TC_CLOCK_SOURCE_TC5;\n
|
||||
//! - \ref TC_CLOCK_SOURCE_XC0;\n
|
||||
//! - \ref TC_CLOCK_SOURCE_XC1;\n
|
||||
//! - \ref TC_CLOCK_SOURCE_XC2.
|
||||
unsigned int tcclks : 3;
|
||||
} tc_capture_opt_t;
|
||||
|
||||
//! Parameters when initializing a timer/counter in waveform mode.
|
||||
typedef struct
|
||||
{
|
||||
//! Channel to initialize.
|
||||
unsigned int channel ;
|
||||
|
||||
//! Software trigger effect on TIOB:\n
|
||||
//! - \ref TC_EVT_EFFECT_NOOP;\n
|
||||
//! - \ref TC_EVT_EFFECT_SET;\n
|
||||
//! - \ref TC_EVT_EFFECT_CLEAR;\n
|
||||
//! - \ref TC_EVT_EFFECT_TOGGLE.
|
||||
unsigned int bswtrg : 2;
|
||||
|
||||
//! External event effect on TIOB:\n
|
||||
//! - \ref TC_EVT_EFFECT_NOOP;\n
|
||||
//! - \ref TC_EVT_EFFECT_SET;\n
|
||||
//! - \ref TC_EVT_EFFECT_CLEAR;\n
|
||||
//! - \ref TC_EVT_EFFECT_TOGGLE.
|
||||
unsigned int beevt : 2;
|
||||
|
||||
//! RC compare effect on TIOB:\n
|
||||
//! - \ref TC_EVT_EFFECT_NOOP;\n
|
||||
//! - \ref TC_EVT_EFFECT_SET;\n
|
||||
//! - \ref TC_EVT_EFFECT_CLEAR;\n
|
||||
//! - \ref TC_EVT_EFFECT_TOGGLE.
|
||||
unsigned int bcpc : 2;
|
||||
|
||||
//! RB compare effect on TIOB:\n
|
||||
//! - \ref TC_EVT_EFFECT_NOOP;\n
|
||||
//! - \ref TC_EVT_EFFECT_SET;\n
|
||||
//! - \ref TC_EVT_EFFECT_CLEAR;\n
|
||||
//! - \ref TC_EVT_EFFECT_TOGGLE.
|
||||
unsigned int bcpb : 2;
|
||||
|
||||
//! Software trigger effect on TIOA:\n
|
||||
//! - \ref TC_EVT_EFFECT_NOOP;\n
|
||||
//! - \ref TC_EVT_EFFECT_SET;\n
|
||||
//! - \ref TC_EVT_EFFECT_CLEAR;\n
|
||||
//! - \ref TC_EVT_EFFECT_TOGGLE.
|
||||
unsigned int aswtrg : 2;
|
||||
|
||||
//! External event effect on TIOA:\n
|
||||
//! - \ref TC_EVT_EFFECT_NOOP;\n
|
||||
//! - \ref TC_EVT_EFFECT_SET;\n
|
||||
//! - \ref TC_EVT_EFFECT_CLEAR;\n
|
||||
//! - \ref TC_EVT_EFFECT_TOGGLE.
|
||||
unsigned int aeevt : 2;
|
||||
|
||||
//! RC compare effect on TIOA:\n
|
||||
//! - \ref TC_EVT_EFFECT_NOOP;\n
|
||||
//! - \ref TC_EVT_EFFECT_SET;\n
|
||||
//! - \ref TC_EVT_EFFECT_CLEAR;\n
|
||||
//! - \ref TC_EVT_EFFECT_TOGGLE.
|
||||
unsigned int acpc : 2;
|
||||
|
||||
//! RA compare effect on TIOA:\n
|
||||
//! - \ref TC_EVT_EFFECT_NOOP;\n
|
||||
//! - \ref TC_EVT_EFFECT_SET;\n
|
||||
//! - \ref TC_EVT_EFFECT_CLEAR;\n
|
||||
//! - \ref TC_EVT_EFFECT_TOGGLE.
|
||||
unsigned int acpa : 2;
|
||||
|
||||
unsigned int : 1;
|
||||
|
||||
//! Waveform selection:\n
|
||||
//! - \ref TC_WAVEFORM_SEL_UP_MODE;\n
|
||||
//! - \ref TC_WAVEFORM_SEL_UP_MODE_RC_TRIGGER;\n
|
||||
//! - \ref TC_WAVEFORM_SEL_UPDOWN_MODE;\n
|
||||
//! - \ref TC_WAVEFORM_SEL_UPDOWN_MODE_RC_TRIGGER.
|
||||
unsigned int wavsel : 2;
|
||||
|
||||
//! External event trigger enable:\n
|
||||
//! - \c FALSE;\n
|
||||
//! - \c TRUE.
|
||||
unsigned int enetrg : 1;
|
||||
|
||||
//! External event selection:\n
|
||||
//! - \ref TC_EXT_EVENT_SEL_TIOB_INPUT;\n
|
||||
//! - \ref TC_EXT_EVENT_SEL_XC0_OUTPUT;\n
|
||||
//! - \ref TC_EXT_EVENT_SEL_XC1_OUTPUT;\n
|
||||
//! - \ref TC_EXT_EVENT_SEL_XC2_OUTPUT.
|
||||
unsigned int eevt : 2;
|
||||
|
||||
//! External event edge selection:\n
|
||||
//! - \ref TC_SEL_NO_EDGE;\n
|
||||
//! - \ref TC_SEL_RISING_EDGE;\n
|
||||
//! - \ref TC_SEL_FALLING_EDGE;\n
|
||||
//! - \ref TC_SEL_EACH_EDGE.
|
||||
unsigned int eevtedg : 2;
|
||||
|
||||
//! Counter clock disable with RC compare:\n
|
||||
//! - \c FALSE;\n
|
||||
//! - \c TRUE.
|
||||
unsigned int cpcdis : 1;
|
||||
|
||||
//! Counter clock stopped with RC compare:\n
|
||||
//! - \c FALSE;\n
|
||||
//! - \c TRUE.
|
||||
unsigned int cpcstop : 1;
|
||||
|
||||
//! Burst signal selection:\n
|
||||
//! - \ref TC_BURST_NOT_GATED;\n
|
||||
//! - \ref TC_BURST_CLK_AND_XC0;\n
|
||||
//! - \ref TC_BURST_CLK_AND_XC1;\n
|
||||
//! - \ref TC_BURST_CLK_AND_XC2.
|
||||
unsigned int burst : 2;
|
||||
|
||||
//! Clock invert:\n
|
||||
//! - \ref TC_CLOCK_RISING_EDGE;\n
|
||||
//! - \ref TC_CLOCK_FALLING_EDGE.
|
||||
unsigned int clki : 1;
|
||||
|
||||
//! Clock selection:\n
|
||||
//! - \ref TC_CLOCK_SOURCE_TC1;\n
|
||||
//! - \ref TC_CLOCK_SOURCE_TC2;\n
|
||||
//! - \ref TC_CLOCK_SOURCE_TC3;\n
|
||||
//! - \ref TC_CLOCK_SOURCE_TC4;\n
|
||||
//! - \ref TC_CLOCK_SOURCE_TC5;\n
|
||||
//! - \ref TC_CLOCK_SOURCE_XC0;\n
|
||||
//! - \ref TC_CLOCK_SOURCE_XC1;\n
|
||||
//! - \ref TC_CLOCK_SOURCE_XC2.
|
||||
unsigned int tcclks : 3;
|
||||
} tc_waveform_opt_t;
|
||||
|
||||
|
||||
/*! \brief Reads timer/counter interrupt settings.
|
||||
*
|
||||
* \param tc Pointer to the TC instance to access.
|
||||
* \param channel The TC instance channel to access.
|
||||
*
|
||||
* \retval >=0 The interrupt enable configuration organized according to \ref tc_interrupt_t.
|
||||
* \retval TC_INVALID_ARGUMENT Invalid argument(s).
|
||||
*/
|
||||
extern int tc_get_interrupt_settings(volatile avr32_tc_t *tc, unsigned int channel);
|
||||
|
||||
/*! \brief Enables various timer/counter interrupts.
|
||||
*
|
||||
* \param tc Pointer to the TC instance to access.
|
||||
* \param channel The TC instance channel to access.
|
||||
* \param bitfield The interrupt enable configuration.
|
||||
*
|
||||
* \retval 0 Success.
|
||||
* \retval TC_INVALID_ARGUMENT Invalid argument(s).
|
||||
*/
|
||||
extern int tc_configure_interrupts(volatile avr32_tc_t *tc, unsigned int channel, const tc_interrupt_t *bitfield);
|
||||
|
||||
/*! \brief Selects which external clock to use and how to configure it.
|
||||
*
|
||||
* \param tc Pointer to the TC instance to access.
|
||||
* \param channel The TC instance channel to access.
|
||||
* \param ext_clk_sig_src External clock signal selection:
|
||||
* \arg \c TC_CH0_EXT_CLK0_SRC_TCLK0;
|
||||
* \arg \c TC_CH0_EXT_CLK0_SRC_NO_CLK;
|
||||
* \arg \c TC_CH0_EXT_CLK0_SRC_TIOA1;
|
||||
* \arg \c TC_CH0_EXT_CLK0_SRC_TIOA2;
|
||||
* \arg \c TC_CH1_EXT_CLK1_SRC_TCLK1;
|
||||
* \arg \c TC_CH1_EXT_CLK1_SRC_NO_CLK;
|
||||
* \arg \c TC_CH1_EXT_CLK1_SRC_TIOA0;
|
||||
* \arg \c TC_CH1_EXT_CLK1_SRC_TIOA2;
|
||||
* \arg \c TC_CH2_EXT_CLK2_SRC_TCLK2;
|
||||
* \arg \c TC_CH2_EXT_CLK2_SRC_NO_CLK;
|
||||
* \arg \c TC_CH2_EXT_CLK2_SRC_TIOA0;
|
||||
* \arg \c TC_CH2_EXT_CLK2_SRC_TIOA1.
|
||||
*
|
||||
* \retval 0 Success.
|
||||
* \retval TC_INVALID_ARGUMENT Invalid argument(s).
|
||||
*/
|
||||
extern int tc_select_external_clock(volatile avr32_tc_t *tc, unsigned int channel, unsigned int ext_clk_sig_src);
|
||||
|
||||
/*! \brief Sets options for timer/counter capture initialization.
|
||||
*
|
||||
* \param tc Pointer to the TC instance to access.
|
||||
* \param opt Options for capture mode.
|
||||
*
|
||||
* \retval 0 Success.
|
||||
* \retval TC_INVALID_ARGUMENT Invalid argument(s).
|
||||
*/
|
||||
extern int tc_init_capture(volatile avr32_tc_t *tc, const tc_capture_opt_t *opt);
|
||||
|
||||
/*! \brief Sets options for timer/counter waveform initialization.
|
||||
*
|
||||
* \param tc Pointer to the TC instance to access.
|
||||
* \param opt Options for waveform generation.
|
||||
*
|
||||
* \retval 0 Success.
|
||||
* \retval TC_INVALID_ARGUMENT Invalid argument(s).
|
||||
*/
|
||||
extern int tc_init_waveform(volatile avr32_tc_t *tc, const tc_waveform_opt_t *opt);
|
||||
|
||||
/*! \brief Starts a timer/counter.
|
||||
*
|
||||
* \param tc Pointer to the TC instance to access.
|
||||
* \param channel The TC instance channel to access.
|
||||
*
|
||||
* \retval 0 Success.
|
||||
* \retval TC_INVALID_ARGUMENT Invalid argument(s).
|
||||
*/
|
||||
extern int tc_start(volatile avr32_tc_t *tc, unsigned int channel);
|
||||
|
||||
/*! \brief Stops a timer/counter.
|
||||
*
|
||||
* \param tc Pointer to the TC instance to access.
|
||||
* \param channel The TC instance channel to access.
|
||||
*
|
||||
* \retval 0 Success.
|
||||
* \retval TC_INVALID_ARGUMENT Invalid argument(s).
|
||||
*/
|
||||
extern int tc_stop(volatile avr32_tc_t *tc, unsigned int channel);
|
||||
|
||||
/*! \brief Performs a software trigger: the counter is reset and the clock is started.
|
||||
*
|
||||
* \param tc Pointer to the TC instance to access.
|
||||
* \param channel The TC instance channel to access.
|
||||
*
|
||||
* \retval 0 Success.
|
||||
* \retval TC_INVALID_ARGUMENT Invalid argument(s).
|
||||
*/
|
||||
extern int tc_software_trigger(volatile avr32_tc_t *tc, unsigned int channel);
|
||||
|
||||
/*! \brief Asserts a SYNC signal to generate a software trigger and reset all channels.
|
||||
*
|
||||
* \param tc Pointer to the TC instance to access.
|
||||
*/
|
||||
extern void tc_sync_trigger(volatile avr32_tc_t *tc);
|
||||
|
||||
/*! \brief Reads the status register.
|
||||
*
|
||||
* \param tc Pointer to the TC instance to access.
|
||||
* \param channel The TC instance channel to access.
|
||||
*
|
||||
* \retval >=0 Status register value.
|
||||
* \retval TC_INVALID_ARGUMENT Invalid argument(s).
|
||||
*/
|
||||
extern int tc_read_sr(volatile avr32_tc_t *tc, unsigned int channel);
|
||||
|
||||
/*! \brief Reads the channel's TC counter and returns the value.
|
||||
*
|
||||
* \param tc Pointer to the TC instance to access.
|
||||
* \param channel The TC instance channel to access.
|
||||
*
|
||||
* \retval >=0 TC counter value.
|
||||
* \retval TC_INVALID_ARGUMENT Invalid argument(s).
|
||||
*/
|
||||
extern int tc_read_tc(volatile avr32_tc_t *tc, unsigned int channel);
|
||||
|
||||
/*! \brief Reads the channel's RA register and returns the value.
|
||||
*
|
||||
* \param tc Pointer to the TC instance to access.
|
||||
* \param channel The TC instance channel to access.
|
||||
*
|
||||
* \retval >=0 RA register value.
|
||||
* \retval TC_INVALID_ARGUMENT Invalid argument(s).
|
||||
*/
|
||||
extern int tc_read_ra(volatile avr32_tc_t *tc, unsigned int channel);
|
||||
|
||||
/*! \brief Reads the channel's RB register and returns the value.
|
||||
*
|
||||
* \param tc Pointer to the TC instance to access.
|
||||
* \param channel The TC instance channel to access.
|
||||
*
|
||||
* \retval >=0 RB register value.
|
||||
* \retval TC_INVALID_ARGUMENT Invalid argument(s).
|
||||
*/
|
||||
extern int tc_read_rb(volatile avr32_tc_t *tc, unsigned int channel);
|
||||
|
||||
/*! \brief Reads the channel's RC register and returns the value.
|
||||
*
|
||||
* \param tc Pointer to the TC instance to access.
|
||||
* \param channel The TC instance channel to access.
|
||||
*
|
||||
* \retval >=0 RC register value.
|
||||
* \retval TC_INVALID_ARGUMENT Invalid argument(s).
|
||||
*/
|
||||
extern int tc_read_rc(volatile avr32_tc_t *tc, unsigned int channel);
|
||||
|
||||
/*! \brief Writes a value to the channel's RA register.
|
||||
*
|
||||
* \param tc Pointer to the TC instance to access.
|
||||
* \param channel The TC instance channel to access.
|
||||
* \param value Value to write to the RA register.
|
||||
*
|
||||
* \retval >=0 Written value.
|
||||
* \retval TC_INVALID_ARGUMENT Invalid argument(s).
|
||||
*/
|
||||
extern int tc_write_ra(volatile avr32_tc_t *tc, unsigned int channel, unsigned short value);
|
||||
|
||||
/*! \brief Writes a value to the channel's RB register.
|
||||
*
|
||||
* \param tc Pointer to the TC instance to access.
|
||||
* \param channel The TC instance channel to access.
|
||||
* \param value Value to write to the RB register.
|
||||
*
|
||||
* \retval >=0 Written value.
|
||||
* \retval TC_INVALID_ARGUMENT Invalid argument(s).
|
||||
*/
|
||||
extern int tc_write_rb(volatile avr32_tc_t *tc, unsigned int channel, unsigned short value);
|
||||
|
||||
/*! \brief Writes a value to the channel's RC register.
|
||||
*
|
||||
* \param tc Pointer to the TC instance to access.
|
||||
* \param channel The TC instance channel to access.
|
||||
* \param value Value to write to the RC register.
|
||||
*
|
||||
* \retval >=0 Written value.
|
||||
* \retval TC_INVALID_ARGUMENT Invalid argument(s).
|
||||
*/
|
||||
extern int tc_write_rc(volatile avr32_tc_t *tc, unsigned int channel, unsigned short value);
|
||||
|
||||
|
||||
#endif // _TC_H_
|
@ -1,448 +0,0 @@
|
||||
/*This file is prepared for Doxygen automatic documentation generation.*/
|
||||
/*! \file *********************************************************************
|
||||
*
|
||||
* \brief USART driver for AVR32 UC3.
|
||||
*
|
||||
* This file contains basic functions for the AVR32 USART, with support for all
|
||||
* modes, settings and clock speeds.
|
||||
*
|
||||
* - Compiler: IAR EWAVR32 and GNU GCC for AVR32
|
||||
* - Supported devices: All AVR32 devices with a USART module can be used.
|
||||
* - AppNote:
|
||||
*
|
||||
* \author Atmel Corporation: http://www.atmel.com \n
|
||||
* Support and FAQ: http://support.atmel.no/
|
||||
*
|
||||
******************************************************************************/
|
||||
|
||||
/* Copyright (c) 2007, Atmel Corporation All rights reserved.
|
||||
*
|
||||
* Redistribution and use in source and binary forms, with or without
|
||||
* modification, are permitted provided that the following conditions are met:
|
||||
*
|
||||
* 1. Redistributions of source code must retain the above copyright notice,
|
||||
* this list of conditions and the following disclaimer.
|
||||
*
|
||||
* 2. Redistributions in binary form must reproduce the above copyright notice,
|
||||
* this list of conditions and the following disclaimer in the documentation
|
||||
* and/or other materials provided with the distribution.
|
||||
*
|
||||
* 3. The name of ATMEL may not be used to endorse or promote products derived
|
||||
* from this software without specific prior written permission.
|
||||
*
|
||||
* THIS SOFTWARE IS PROVIDED BY ATMEL ``AS IS'' AND ANY EXPRESS OR IMPLIED
|
||||
* WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
|
||||
* MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE EXPRESSLY AND
|
||||
* SPECIFICALLY DISCLAIMED. IN NO EVENT SHALL ATMEL BE LIABLE FOR ANY DIRECT,
|
||||
* INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
|
||||
* (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
|
||||
* LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
|
||||
* ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
|
||||
* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
|
||||
* THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||
*/
|
||||
|
||||
|
||||
#include "usart.h"
|
||||
|
||||
|
||||
//------------------------------------------------------------------------------
|
||||
/*! \name Private Functions
|
||||
*/
|
||||
//! @{
|
||||
|
||||
|
||||
/*! \brief Checks if the USART is in multidrop mode.
|
||||
*
|
||||
* \param usart Base address of the USART instance.
|
||||
*
|
||||
* \return \c 1 if the USART is in multidrop mode, otherwise \c 0.
|
||||
*/
|
||||
#if __GNUC__
|
||||
__attribute__((__always_inline__))
|
||||
#endif
|
||||
static __inline__ int usart_mode_is_multidrop(volatile avr32_usart_t *usart)
|
||||
{
|
||||
return ((usart->mr >> AVR32_USART_MR_PAR_OFFSET) & AVR32_USART_MR_PAR_MULTI) == AVR32_USART_MR_PAR_MULTI;
|
||||
}
|
||||
|
||||
|
||||
/*! \brief Calculates a clock divider (\e CD) that gets the USART as close to a
|
||||
* wanted baudrate as possible.
|
||||
*
|
||||
* \todo manage the FP fractal part to avoid big errors
|
||||
*
|
||||
* Baudrate calculation:
|
||||
* \f$ baudrate = \frac{Selected Clock}{16 \times CD} \f$ with 16x oversampling or
|
||||
* \f$ baudrate = \frac{Selected Clock}{8 \times CD} \f$ with 8x oversampling or
|
||||
* \f$ baudrate = \frac{Selected Clock}{CD} \f$ with SYNC bit set to allow high speed.
|
||||
*
|
||||
* \param usart Base address of the USART instance.
|
||||
* \param baudrate Wanted baudrate.
|
||||
* \param pba_hz USART module input clock frequency (PBA clock, Hz).
|
||||
*
|
||||
* \retval USART_SUCCESS Baudrate successfully initialized.
|
||||
* \retval USART_INVALID_INPUT Wanted baudrate is impossible with given clock speed.
|
||||
*/
|
||||
|
||||
static int usart_set_baudrate(volatile avr32_usart_t *usart, unsigned int baudrate, long pba_hz)
|
||||
{
|
||||
// Clock divider.
|
||||
int cd;
|
||||
|
||||
// Baudrate calculation.
|
||||
if (baudrate < pba_hz / 16)
|
||||
{
|
||||
// Use 16x oversampling, clear SYNC bit.
|
||||
usart->mr &=~ (AVR32_USART_MR_OVER_MASK | AVR32_USART_MR_SYNC_MASK);
|
||||
cd = (pba_hz + 8 * baudrate) / (16 * baudrate);
|
||||
|
||||
if ((cd >65535)) return USART_INVALID_INPUT;
|
||||
}
|
||||
else if (baudrate < pba_hz / 8)
|
||||
{
|
||||
// Use 8x oversampling.
|
||||
usart->mr |= AVR32_USART_MR_OVER_MASK;
|
||||
// clear SYNC bit
|
||||
usart->mr &=~ AVR32_USART_MR_SYNC_MASK;
|
||||
|
||||
cd = (pba_hz + 4 * baudrate) / (8 * baudrate);
|
||||
|
||||
if ((cd < 1)||(cd >65535)) return USART_INVALID_INPUT;
|
||||
}
|
||||
else
|
||||
{
|
||||
// set SYNC to 1
|
||||
usart->mr |= AVR32_USART_MR_SYNC_MASK;
|
||||
// use PBA/BaudRate
|
||||
cd = (pba_hz / baudrate);
|
||||
}
|
||||
usart->brgr = cd << AVR32_USART_BRGR_CD_OFFSET;
|
||||
|
||||
return USART_SUCCESS;
|
||||
}
|
||||
|
||||
//! @}
|
||||
|
||||
|
||||
//------------------------------------------------------------------------------
|
||||
/*! \name Initialization Functions
|
||||
*/
|
||||
//! @{
|
||||
|
||||
|
||||
void usart_reset(volatile avr32_usart_t *usart)
|
||||
{
|
||||
// Disable all USART interrupts.
|
||||
// Interrupts needed should be set explicitly on every reset.
|
||||
usart->idr = 0xFFFFFFFF;
|
||||
|
||||
// Reset mode and other registers that could cause unpredictable behavior after reset.
|
||||
usart->mr = 0;
|
||||
usart->rtor = 0;
|
||||
usart->ttgr = 0;
|
||||
|
||||
// Shutdown TX and RX (will be re-enabled when setup has successfully completed),
|
||||
// reset status bits and turn off DTR and RTS.
|
||||
usart->cr = AVR32_USART_CR_RSTRX_MASK |
|
||||
AVR32_USART_CR_RSTTX_MASK |
|
||||
AVR32_USART_CR_RSTSTA_MASK |
|
||||
AVR32_USART_CR_RSTIT_MASK |
|
||||
AVR32_USART_CR_RSTNACK_MASK |
|
||||
AVR32_USART_CR_DTRDIS_MASK |
|
||||
AVR32_USART_CR_RTSDIS_MASK;
|
||||
}
|
||||
|
||||
|
||||
int usart_init_rs232(volatile avr32_usart_t *usart, const usart_options_t *opt, long pba_hz)
|
||||
{
|
||||
// Reset the USART and shutdown TX and RX.
|
||||
usart_reset(usart);
|
||||
|
||||
// Check input values.
|
||||
if (!opt) // Null pointer.
|
||||
return USART_INVALID_INPUT;
|
||||
if (opt->charlength < 5 || opt->charlength > 9 ||
|
||||
opt->paritytype > 7 ||
|
||||
opt->stopbits > 2 + 255 ||
|
||||
opt->channelmode > 3)
|
||||
return USART_INVALID_INPUT;
|
||||
|
||||
if (usart_set_baudrate(usart, opt->baudrate, pba_hz) == USART_INVALID_INPUT)
|
||||
return USART_INVALID_INPUT;
|
||||
|
||||
if (opt->charlength == 9)
|
||||
{
|
||||
// Character length set to 9 bits. MODE9 dominates CHRL.
|
||||
usart->mr |= AVR32_USART_MR_MODE9_MASK;
|
||||
}
|
||||
else
|
||||
{
|
||||
// CHRL gives the character length (- 5) when MODE9 = 0.
|
||||
usart->mr |= (opt->charlength - 5) << AVR32_USART_MR_CHRL_OFFSET;
|
||||
}
|
||||
|
||||
usart->mr |= (opt->channelmode << AVR32_USART_MR_CHMODE_OFFSET) |
|
||||
(opt->paritytype << AVR32_USART_MR_PAR_OFFSET);
|
||||
|
||||
if (opt->stopbits > USART_2_STOPBITS)
|
||||
{
|
||||
// Set two stop bits
|
||||
usart->mr |= AVR32_USART_MR_NBSTOP_2 << AVR32_USART_MR_NBSTOP_OFFSET;
|
||||
// and a timeguard period gives the rest.
|
||||
usart->ttgr = opt->stopbits - USART_2_STOPBITS;
|
||||
}
|
||||
else
|
||||
// Insert 1, 1.5 or 2 stop bits.
|
||||
usart->mr |= opt->stopbits << AVR32_USART_MR_NBSTOP_OFFSET;
|
||||
|
||||
// Setup complete; enable communication.
|
||||
// Enable input and output.
|
||||
usart->cr |= AVR32_USART_CR_TXEN_MASK |
|
||||
AVR32_USART_CR_RXEN_MASK;
|
||||
|
||||
return USART_SUCCESS;
|
||||
}
|
||||
|
||||
|
||||
int usart_init_hw_handshaking(volatile avr32_usart_t *usart, const usart_options_t *opt, long pba_hz)
|
||||
{
|
||||
// First: Setup standard RS232.
|
||||
if (usart_init_rs232(usart, opt, pba_hz) == USART_INVALID_INPUT)
|
||||
return USART_INVALID_INPUT;
|
||||
|
||||
// Clear previous mode.
|
||||
usart->mr &= ~AVR32_USART_MR_MODE_MASK;
|
||||
// Hardware handshaking.
|
||||
usart->mr |= USART_MODE_HW_HSH << AVR32_USART_MR_MODE_OFFSET;
|
||||
|
||||
return USART_SUCCESS;
|
||||
}
|
||||
|
||||
|
||||
int usart_init_IrDA(volatile avr32_usart_t *usart, const usart_options_t *opt,
|
||||
long pba_hz, unsigned char irda_filter)
|
||||
{
|
||||
// First: Setup standard RS232.
|
||||
if (usart_init_rs232(usart, opt, pba_hz) == USART_INVALID_INPUT)
|
||||
return USART_INVALID_INPUT;
|
||||
|
||||
// Set IrDA counter.
|
||||
usart->ifr = irda_filter;
|
||||
|
||||
// Activate "low-pass filtering" of input.
|
||||
usart->mr |= AVR32_USART_MR_FILTER_MASK;
|
||||
|
||||
return USART_SUCCESS;
|
||||
}
|
||||
|
||||
|
||||
int usart_init_modem(volatile avr32_usart_t *usart, const usart_options_t *opt, long pba_hz)
|
||||
{
|
||||
// First: Setup standard RS232.
|
||||
if (usart_init_rs232(usart, opt, pba_hz) == USART_INVALID_INPUT)
|
||||
return USART_INVALID_INPUT;
|
||||
|
||||
// Clear previous mode.
|
||||
usart->mr &= ~AVR32_USART_MR_MODE_MASK;
|
||||
// Set modem mode.
|
||||
usart->mr |= USART_MODE_MODEM << AVR32_USART_MR_MODE_OFFSET;
|
||||
|
||||
return USART_SUCCESS;
|
||||
}
|
||||
|
||||
|
||||
int usart_init_rs485(volatile avr32_usart_t *usart, const usart_options_t *opt, long pba_hz)
|
||||
{
|
||||
// First: Setup standard RS232.
|
||||
if (usart_init_rs232(usart, opt, pba_hz) == USART_INVALID_INPUT)
|
||||
return USART_INVALID_INPUT;
|
||||
|
||||
// Clear previous mode.
|
||||
usart->mr &= ~AVR32_USART_MR_MODE_MASK;
|
||||
// Set RS485 mode.
|
||||
usart->mr |= USART_MODE_RS485 << AVR32_USART_MR_MODE_OFFSET;
|
||||
|
||||
return USART_SUCCESS;
|
||||
}
|
||||
|
||||
|
||||
int usart_init_iso7816(volatile avr32_usart_t *usart, const iso7816_options_t *opt, int t, long pba_hz)
|
||||
{
|
||||
// Reset the USART and shutdown TX and RX.
|
||||
usart_reset(usart);
|
||||
|
||||
// Check input values.
|
||||
if (!opt) // Null pointer.
|
||||
return USART_INVALID_INPUT;
|
||||
|
||||
if (t == 0)
|
||||
{
|
||||
// Set USART mode to ISO7816, T=0.
|
||||
// The T=0 protocol always uses 2 stop bits.
|
||||
usart->mr = (USART_MODE_ISO7816_T0 << AVR32_USART_MR_MODE_OFFSET) |
|
||||
(AVR32_USART_MR_NBSTOP_2 << AVR32_USART_MR_NBSTOP_OFFSET) |
|
||||
(opt->bit_order << AVR32_USART_MR_MSBF_OFFSET); // Allow MSBF in T=0.
|
||||
}
|
||||
else if (t == 1)
|
||||
{
|
||||
// Only LSB first in the T=1 protocol.
|
||||
// max_iterations field is only used in T=0 mode.
|
||||
if (opt->bit_order != 0 ||
|
||||
opt->max_iterations != 0)
|
||||
return USART_INVALID_INPUT;
|
||||
// Set USART mode to ISO7816, T=1.
|
||||
// The T=1 protocol always uses 1 stop bit.
|
||||
usart->mr = (USART_MODE_ISO7816_T1 << AVR32_USART_MR_MODE_OFFSET) |
|
||||
(AVR32_USART_MR_NBSTOP_1 << AVR32_USART_MR_NBSTOP_OFFSET);
|
||||
}
|
||||
else
|
||||
return USART_INVALID_INPUT;
|
||||
|
||||
if (usart_set_baudrate(usart, opt->iso7816_hz, pba_hz) == USART_INVALID_INPUT)
|
||||
return USART_INVALID_INPUT;
|
||||
|
||||
// Set FIDI register: bit rate = selected clock/FI_DI_ratio/16.
|
||||
usart->fidi = opt->fidi_ratio;
|
||||
// Set ISO7816 spesific options in the MODE register.
|
||||
usart->mr |= (opt->inhibit_nack << AVR32_USART_MR_INACK_OFFSET) |
|
||||
(opt->dis_suc_nack << AVR32_USART_MR_DSNACK_OFFSET) |
|
||||
(opt->max_iterations << AVR32_USART_MR_MAX_ITERATION_OFFSET) |
|
||||
AVR32_USART_MR_CLKO_MASK; // Enable clock output.
|
||||
|
||||
// Setup complete; enable input.
|
||||
// Leave TX disabled for now.
|
||||
usart->cr |= AVR32_USART_CR_RXEN_MASK;
|
||||
|
||||
return USART_SUCCESS;
|
||||
}
|
||||
//! @}
|
||||
|
||||
|
||||
//------------------------------------------------------------------------------
|
||||
/*! \name Transmit/Receive Functions
|
||||
*/
|
||||
//! @{
|
||||
|
||||
|
||||
int usart_send_address(volatile avr32_usart_t *usart, int address)
|
||||
{
|
||||
// Check if USART is in multidrop / RS485 mode.
|
||||
if (!usart_mode_is_multidrop(usart)) return USART_MODE_FAULT;
|
||||
|
||||
// Prepare to send an address.
|
||||
usart->cr |= AVR32_USART_CR_SENDA_MASK;
|
||||
|
||||
// Write the address to TX.
|
||||
usart_bw_write_char(usart, address);
|
||||
|
||||
return USART_SUCCESS;
|
||||
}
|
||||
|
||||
|
||||
int usart_write_char(volatile avr32_usart_t *usart, int c)
|
||||
{
|
||||
if (usart->csr & AVR32_USART_CSR_TXRDY_MASK)
|
||||
{
|
||||
usart->thr = c;
|
||||
return USART_SUCCESS;
|
||||
}
|
||||
else
|
||||
return USART_TX_BUSY;
|
||||
}
|
||||
|
||||
|
||||
int usart_putchar(volatile avr32_usart_t *usart, int c)
|
||||
{
|
||||
int timeout = USART_DEFAULT_TIMEOUT;
|
||||
|
||||
if (c == '\n')
|
||||
{
|
||||
do
|
||||
{
|
||||
if (!timeout--) return USART_FAILURE;
|
||||
} while (usart_write_char(usart, '\r') != USART_SUCCESS);
|
||||
|
||||
timeout = USART_DEFAULT_TIMEOUT;
|
||||
}
|
||||
|
||||
do
|
||||
{
|
||||
if (!timeout--) return USART_FAILURE;
|
||||
} while (usart_write_char(usart, c) != USART_SUCCESS);
|
||||
|
||||
return USART_SUCCESS;
|
||||
}
|
||||
|
||||
|
||||
int usart_read_char(volatile avr32_usart_t *usart, int *c)
|
||||
{
|
||||
// Check for errors: frame, parity and overrun. In RS485 mode, a parity error
|
||||
// would mean that an address char has been received.
|
||||
if (usart->csr & (AVR32_USART_CSR_OVRE_MASK |
|
||||
AVR32_USART_CSR_FRAME_MASK |
|
||||
AVR32_USART_CSR_PARE_MASK))
|
||||
return USART_RX_ERROR;
|
||||
|
||||
// No error; if we really did receive a char, read it and return SUCCESS.
|
||||
if (usart->csr & AVR32_USART_CSR_RXRDY_MASK)
|
||||
{
|
||||
*c = (unsigned short)usart->rhr;
|
||||
return USART_SUCCESS;
|
||||
}
|
||||
else
|
||||
return USART_RX_EMPTY;
|
||||
}
|
||||
|
||||
|
||||
int usart_getchar(volatile avr32_usart_t *usart)
|
||||
{
|
||||
int c, ret;
|
||||
|
||||
while ((ret = usart_read_char(usart, &c)) == USART_RX_EMPTY);
|
||||
|
||||
if (ret == USART_RX_ERROR)
|
||||
return USART_FAILURE;
|
||||
|
||||
return c;
|
||||
}
|
||||
|
||||
|
||||
void usart_write_line(volatile avr32_usart_t *usart, const char *string)
|
||||
{
|
||||
while (*string != '\0')
|
||||
usart_putchar(usart, *string++);
|
||||
}
|
||||
|
||||
|
||||
int usart_get_echo_line(volatile avr32_usart_t *usart)
|
||||
{
|
||||
int rx_char;
|
||||
int retval = USART_SUCCESS;
|
||||
|
||||
while (1)
|
||||
{
|
||||
rx_char = usart_getchar(usart);
|
||||
if (rx_char == USART_FAILURE)
|
||||
{
|
||||
usart_write_line(usart, "Error!!!\n");
|
||||
break;
|
||||
}
|
||||
if (rx_char == '\x03')
|
||||
{
|
||||
retval = USART_FAILURE;
|
||||
break;
|
||||
}
|
||||
usart_putchar(usart, rx_char);
|
||||
if (rx_char == '\r')
|
||||
{
|
||||
usart_putchar(usart, '\n');
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
return retval;
|
||||
}
|
||||
|
||||
|
||||
//! @}
|
@ -1,475 +0,0 @@
|
||||
/*This file is prepared for Doxygen automatic documentation generation.*/
|
||||
/*! \file *********************************************************************
|
||||
*
|
||||
* \brief USART driver for AVR32 UC3.
|
||||
*
|
||||
* This file contains basic functions for the AVR32 USART, with support for all
|
||||
* modes, settings and clock speeds.
|
||||
*
|
||||
* - Compiler: IAR EWAVR32 and GNU GCC for AVR32
|
||||
* - Supported devices: All AVR32 devices with a USART module can be used.
|
||||
* - AppNote:
|
||||
*
|
||||
* \author Atmel Corporation: http://www.atmel.com \n
|
||||
* Support and FAQ: http://support.atmel.no/
|
||||
*
|
||||
******************************************************************************/
|
||||
|
||||
/* Copyright (c) 2007, Atmel Corporation All rights reserved.
|
||||
*
|
||||
* Redistribution and use in source and binary forms, with or without
|
||||
* modification, are permitted provided that the following conditions are met:
|
||||
*
|
||||
* 1. Redistributions of source code must retain the above copyright notice,
|
||||
* this list of conditions and the following disclaimer.
|
||||
*
|
||||
* 2. Redistributions in binary form must reproduce the above copyright notice,
|
||||
* this list of conditions and the following disclaimer in the documentation
|
||||
* and/or other materials provided with the distribution.
|
||||
*
|
||||
* 3. The name of ATMEL may not be used to endorse or promote products derived
|
||||
* from this software without specific prior written permission.
|
||||
*
|
||||
* THIS SOFTWARE IS PROVIDED BY ATMEL ``AS IS'' AND ANY EXPRESS OR IMPLIED
|
||||
* WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
|
||||
* MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE EXPRESSLY AND
|
||||
* SPECIFICALLY DISCLAIMED. IN NO EVENT SHALL ATMEL BE LIABLE FOR ANY DIRECT,
|
||||
* INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
|
||||
* (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
|
||||
* LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
|
||||
* ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
|
||||
* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
|
||||
* THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||
*/
|
||||
|
||||
|
||||
#ifndef _USART_H_
|
||||
#define _USART_H_
|
||||
|
||||
#include <avr32/io.h>
|
||||
#include "compiler.h"
|
||||
|
||||
|
||||
/*! \name Return Values
|
||||
*/
|
||||
//! @{
|
||||
#define USART_SUCCESS 0 //!< Successful completion.
|
||||
#define USART_FAILURE -1 //!< Failure because of some unspecified reason.
|
||||
#define USART_INVALID_INPUT 1 //!< Input value out of range.
|
||||
#define USART_INVALID_ARGUMENT -1 //!< Argument value out of range.
|
||||
#define USART_TX_BUSY 2 //!< Transmitter was busy.
|
||||
#define USART_RX_EMPTY 3 //!< Nothing was received.
|
||||
#define USART_RX_ERROR 4 //!< Transmission error occurred.
|
||||
#define USART_MODE_FAULT 5 //!< USART not in the appropriate mode.
|
||||
//! @}
|
||||
|
||||
//! Default time-out value (number of attempts).
|
||||
#define USART_DEFAULT_TIMEOUT 10000
|
||||
|
||||
/*! \name Parity Settings
|
||||
*/
|
||||
//! @{
|
||||
#define USART_EVEN_PARITY AVR32_USART_MR_PAR_EVEN //!< Use even parity on character transmission.
|
||||
#define USART_ODD_PARITY AVR32_USART_MR_PAR_ODD //!< Use odd parity on character transmission.
|
||||
#define USART_SPACE_PARITY AVR32_USART_MR_PAR_SPACE //!< Use a space as parity bit.
|
||||
#define USART_MARK_PARITY AVR32_USART_MR_PAR_MARK //!< Use a mark as parity bit.
|
||||
#define USART_NO_PARITY AVR32_USART_MR_PAR_NONE //!< Don't use a parity bit.
|
||||
#define USART_MULTIDROP_PARITY AVR32_USART_MR_PAR_MULTI //!< Parity bit is used to flag address characters.
|
||||
//! @}
|
||||
|
||||
/*! \name Operating Modes
|
||||
*/
|
||||
//! @{
|
||||
#define USART_MODE_NORMAL AVR32_USART_MR_MODE_NORMAL //!< Normal RS232 mode.
|
||||
#define USART_MODE_RS485 AVR32_USART_MR_MODE_RS485 //!< RS485 mode.
|
||||
#define USART_MODE_HW_HSH AVR32_USART_MR_MODE_HARDWARE //!< RS232 mode with hardware handshaking.
|
||||
#define USART_MODE_MODEM AVR32_USART_MR_MODE_MODEM //!< Modem mode.
|
||||
#define USART_MODE_ISO7816_T0 AVR32_USART_MR_MODE_ISO7816_T0 //!< ISO7816, T = 0 mode.
|
||||
#define USART_MODE_ISO7816_T1 AVR32_USART_MR_MODE_ISO7816_T1 //!< ISO7816, T = 1 mode.
|
||||
#define USART_MODE_IRDA AVR32_USART_MR_MODE_IRDA //!< IrDA mode.
|
||||
#define USART_MODE_SW_HSH AVR32_USART_MR_MODE_SOFTWARE //!< RS232 mode with software handshaking.
|
||||
//! @}
|
||||
|
||||
|
||||
/*! \name Channel Modes
|
||||
*/
|
||||
//! @{
|
||||
#define USART_NORMAL_CHMODE AVR32_USART_MR_CHMODE_NORMAL //!< Normal communication.
|
||||
#define USART_AUTO_ECHO AVR32_USART_MR_CHMODE_ECHO //!< Echo data.
|
||||
#define USART_LOCAL_LOOPBACK AVR32_USART_MR_CHMODE_LOCAL_LOOP //!< Local loopback.
|
||||
#define USART_REMOTE_LOOPBACK AVR32_USART_MR_CHMODE_REMOTE_LOOP //!< Remote loopback.
|
||||
//! @}
|
||||
|
||||
/*! \name Stop Bits Settings
|
||||
*/
|
||||
//! @{
|
||||
#define USART_1_STOPBIT AVR32_USART_MR_NBSTOP_1 //!< Use 1 stop bit.
|
||||
#define USART_1_5_STOPBITS AVR32_USART_MR_NBSTOP_1_5 //!< Use 1.5 stop bits.
|
||||
#define USART_2_STOPBITS AVR32_USART_MR_NBSTOP_2 //!< Use 2 stop bits (for more, just give the number of bits).
|
||||
//! @}
|
||||
|
||||
|
||||
//! Input parameters when initializing RS232 and similar modes.
|
||||
typedef struct
|
||||
{
|
||||
//! Set baudrate of the USART.
|
||||
unsigned long baudrate;
|
||||
|
||||
//! Number of bits to transmit as a character (5 to 9).
|
||||
unsigned char charlength;
|
||||
|
||||
//! How to calculate the parity bit: \ref USART_EVEN_PARITY, \ref USART_ODD_PARITY,
|
||||
//! \ref USART_SPACE_PARITY, \ref USART_MARK_PARITY, \ref USART_NO_PARITY or
|
||||
//! \ref USART_MULTIDROP_PARITY.
|
||||
unsigned char paritytype;
|
||||
|
||||
//! Number of stop bits between two characters: \ref USART_1_STOPBIT,
|
||||
//! \ref USART_1_5_STOPBITS, \ref USART_2_STOPBITS or any number from 3 to 257
|
||||
//! which will result in a time guard period of that length between characters.
|
||||
unsigned short stopbits;
|
||||
|
||||
//! Run the channel in testmode: \ref USART_NORMAL_CHMODE, \ref USART_AUTO_ECHO,
|
||||
//! \ref USART_LOCAL_LOOPBACK or \ref USART_REMOTE_LOOPBACK.
|
||||
unsigned char channelmode;
|
||||
} usart_options_t;
|
||||
|
||||
//! Input parameters when initializing ISO7816 modes.
|
||||
typedef struct
|
||||
{
|
||||
//! Set the frequency of the ISO7816 clock.
|
||||
unsigned long iso7816_hz;
|
||||
|
||||
//! The number of ISO7816 clock ticks in every bit period (1 to 2047, 0 = disable clock).
|
||||
//! Bit rate = \ref iso7816_hz / \ref fidi_ratio.
|
||||
unsigned short fidi_ratio;
|
||||
|
||||
//! Inhibit Non Acknowledge:\n
|
||||
//! - 0: the NACK is generated;\n
|
||||
//! - 1: the NACK is not generated.
|
||||
//!
|
||||
//! \note This bit will be used only in ISO7816 mode, protocol T = 0 receiver.
|
||||
int inhibit_nack;
|
||||
|
||||
//! Disable successive NACKs.
|
||||
//! Successive parity errors are counted up to the value in the \ref max_iterations field.
|
||||
//! These parity errors generate a NACK on the ISO line. As soon as this value is reached,
|
||||
//! no addititional NACK is sent on the ISO line. The ITERATION flag is asserted.
|
||||
int dis_suc_nack;
|
||||
|
||||
//! Max number of repetitions (0 to 7).
|
||||
unsigned char max_iterations;
|
||||
|
||||
//! Bit order in transmitted characters:\n
|
||||
//! - 0: LSB first;\n
|
||||
//! - 1: MSB first.
|
||||
int bit_order;
|
||||
} iso7816_options_t;
|
||||
|
||||
//! Input parameters when initializing ISO7816 modes.
|
||||
typedef struct
|
||||
{
|
||||
//! Set the frequency of the SPI clock.
|
||||
unsigned long baudrate;
|
||||
|
||||
//! Number of bits to transmit as a character (5 to 9).
|
||||
unsigned char charlength;
|
||||
|
||||
//! Run the channel in testmode: \ref USART_NORMAL_CHMODE, \ref USART_AUTO_ECHO,
|
||||
//! \ref USART_LOCAL_LOOPBACK or \ref USART_REMOTE_LOOPBACK.
|
||||
unsigned char channelmode;
|
||||
|
||||
//! Which SPI mode to use when transmitting.
|
||||
unsigned char spimode;
|
||||
} usart_spi_options_t;
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
//------------------------------------------------------------------------------
|
||||
/*! \name Initialization Functions
|
||||
*/
|
||||
//! @{
|
||||
|
||||
/*! \brief Resets the USART and disables TX and RX.
|
||||
*
|
||||
* \param usart Base address of the USART instance.
|
||||
*/
|
||||
extern void usart_reset(volatile avr32_usart_t *usart);
|
||||
|
||||
/*! \brief Sets up the USART to use the standard RS232 protocol.
|
||||
*
|
||||
* \param usart Base address of the USART instance.
|
||||
* \param opt Options needed to set up RS232 communication (see \ref usart_options_t).
|
||||
* \param pba_hz USART module input clock frequency (PBA clock, Hz).
|
||||
*
|
||||
* \retval USART_SUCCESS Mode successfully initialized.
|
||||
* \retval USART_INVALID_INPUT One or more of the arguments is out of valid range.
|
||||
*/
|
||||
extern int usart_init_rs232(volatile avr32_usart_t *usart, const usart_options_t *opt, long pba_hz);
|
||||
|
||||
/*! \brief Sets up the USART to use hardware handshaking.
|
||||
*
|
||||
* \param usart Base address of the USART instance.
|
||||
* \param opt Options needed to set up RS232 communication (see \ref usart_options_t).
|
||||
* \param pba_hz USART module input clock frequency (PBA clock, Hz).
|
||||
*
|
||||
* \retval USART_SUCCESS Mode successfully initialized.
|
||||
* \retval USART_INVALID_INPUT One or more of the arguments is out of valid range.
|
||||
*
|
||||
* \note \ref usart_init_rs232 does not need to be invoked before this function.
|
||||
*/
|
||||
extern int usart_init_hw_handshaking(volatile avr32_usart_t *usart, const usart_options_t *opt, long pba_hz);
|
||||
|
||||
/*! \brief Sets up the USART to use the IrDA protocol.
|
||||
*
|
||||
* \param usart Base address of the USART instance.
|
||||
* \param opt Options needed to set up RS232 communication (see \ref usart_options_t).
|
||||
* \param pba_hz USART module input clock frequency (PBA clock, Hz).
|
||||
* \param irda_filter Counter used to distinguish received ones from zeros.
|
||||
*
|
||||
* \retval USART_SUCCESS Mode successfully initialized.
|
||||
* \retval USART_INVALID_INPUT One or more of the arguments is out of valid range.
|
||||
*/
|
||||
extern int usart_init_IrDA(volatile avr32_usart_t *usart, const usart_options_t *opt,
|
||||
long pba_hz, unsigned char irda_filter);
|
||||
|
||||
/*! \brief Sets up the USART to use the modem protocol, activating dedicated inputs/outputs.
|
||||
*
|
||||
* \param usart Base address of the USART instance.
|
||||
* \param opt Options needed to set up RS232 communication (see \ref usart_options_t).
|
||||
* \param pba_hz USART module input clock frequency (PBA clock, Hz).
|
||||
*
|
||||
* \retval USART_SUCCESS Mode successfully initialized.
|
||||
* \retval USART_INVALID_INPUT One or more of the arguments is out of valid range.
|
||||
*/
|
||||
extern int usart_init_modem(volatile avr32_usart_t *usart, const usart_options_t *opt, long pba_hz);
|
||||
|
||||
/*! \brief Sets up the USART to use the RS485 protocol.
|
||||
*
|
||||
* \param usart Base address of the USART instance.
|
||||
* \param opt Options needed to set up RS232 communication (see \ref usart_options_t).
|
||||
* \param pba_hz USART module input clock frequency (PBA clock, Hz).
|
||||
*
|
||||
* \retval USART_SUCCESS Mode successfully initialized.
|
||||
* \retval USART_INVALID_INPUT One or more of the arguments is out of valid range.
|
||||
*/
|
||||
extern int usart_init_rs485(volatile avr32_usart_t *usart, const usart_options_t *opt, long pba_hz);
|
||||
|
||||
/*! \brief Sets up the USART to use the ISO7816 T=0 or T=1 smartcard protocols.
|
||||
*
|
||||
* \param usart Base address of the USART instance.
|
||||
* \param opt Options needed to set up ISO7816 communication (see \ref iso7816_options_t).
|
||||
* \param t ISO7816 mode to use (T=0 or T=1).
|
||||
* \param pba_hz USART module input clock frequency (PBA clock, Hz).
|
||||
*
|
||||
* \retval USART_SUCCESS Mode successfully initialized.
|
||||
* \retval USART_INVALID_INPUT One or more of the arguments is out of valid range.
|
||||
*/
|
||||
extern int usart_init_iso7816(volatile avr32_usart_t *usart, const iso7816_options_t *opt, int t, long pba_hz);
|
||||
|
||||
/*! \brief Sets up the USART to use the SPI mode as master.
|
||||
*
|
||||
* \param usart Base address of the USART instance.
|
||||
* \param opt Options needed to set up SPI mode (see \ref usart_spi_options_t).
|
||||
* \param pba_hz USART module input clock frequency (PBA clock, Hz).
|
||||
*
|
||||
* \retval USART_SUCCESS Mode successfully initialized.
|
||||
* \retval USART_INVALID_INPUT One or more of the arguments is out of valid range.
|
||||
*/
|
||||
extern int usart_init_spi_master(volatile avr32_usart_t *usart, const usart_spi_options_t *opt, long pba_hz);
|
||||
|
||||
|
||||
/*! \brief Sets up the USART to use the SPI mode as slave.
|
||||
*
|
||||
* \param usart Base address of the USART instance.
|
||||
* \param opt Options needed to set up SPI mode (see \ref usart_spi_options_t).
|
||||
* \param pba_hz USART module input clock frequency (PBA clock, Hz).
|
||||
*
|
||||
* \retval USART_SUCCESS Mode successfully initialized.
|
||||
* \retval USART_INVALID_INPUT One or more of the arguments is out of valid range.
|
||||
*/
|
||||
extern int usart_init_spi_slave(volatile avr32_usart_t *usart, const usart_spi_options_t *opt, long pba_hz);
|
||||
|
||||
//! @}
|
||||
|
||||
//------------------------------------------------------------------------------
|
||||
/*! \brief Selects slave chip.
|
||||
*
|
||||
* \param usart Base address of the USART instance.
|
||||
*
|
||||
* \return Status.
|
||||
* \retval USART_SUCCESS Success.
|
||||
*/
|
||||
extern int usart_spi_selectChip(volatile avr32_usart_t *usart);
|
||||
|
||||
/*! \brief Unselects slave chip.
|
||||
*
|
||||
* \param usart Base address of the USART instance.
|
||||
*
|
||||
* \return Status.
|
||||
* \retval USART_SUCCESS Success.
|
||||
* \retval USART_FAILURE Time out.
|
||||
*/
|
||||
extern int usart_spi_unselectChip(volatile avr32_usart_t *usart);
|
||||
|
||||
//------------------------------------------------------------------------------
|
||||
/*! \name Read and Reset Error Status Bits
|
||||
*/
|
||||
//! @{
|
||||
|
||||
/*! \brief Resets the error status.
|
||||
*
|
||||
* This function resets the status bits indicating that a parity error,
|
||||
* framing error or overrun has occurred. The RXBRK bit, indicating
|
||||
* a start/end of break condition on the RX line, is also reset.
|
||||
*
|
||||
* \param usart Base address of the USART instance.
|
||||
*/
|
||||
#if __GNUC__
|
||||
__attribute__((__always_inline__))
|
||||
#endif
|
||||
extern __inline__ void usart_reset_status(volatile avr32_usart_t *usart)
|
||||
{
|
||||
usart->cr |= AVR32_USART_CR_RSTSTA_MASK;
|
||||
}
|
||||
|
||||
/*! \brief Checks if a parity error has occurred since last status reset.
|
||||
*
|
||||
* \param usart Base address of the USART instance.
|
||||
*
|
||||
* \return \c 1 if a parity error has been detected, otherwise \c 0.
|
||||
*/
|
||||
#if __GNUC__
|
||||
__attribute__((__always_inline__))
|
||||
#endif
|
||||
extern __inline__ int usart_parity_error(volatile avr32_usart_t *usart)
|
||||
{
|
||||
return (usart->csr & AVR32_USART_CSR_PARE_MASK) != 0;
|
||||
}
|
||||
|
||||
/*! \brief Checks if a framing error has occurred since last status reset.
|
||||
*
|
||||
* \param usart Base address of the USART instance.
|
||||
*
|
||||
* \return \c 1 if a framing error has been detected, otherwise \c 0.
|
||||
*/
|
||||
#if __GNUC__
|
||||
__attribute__((__always_inline__))
|
||||
#endif
|
||||
extern __inline__ int usart_framing_error(volatile avr32_usart_t *usart)
|
||||
{
|
||||
return (usart->csr & AVR32_USART_CSR_FRAME_MASK) != 0;
|
||||
}
|
||||
|
||||
/*! \brief Checks if an overrun error has occurred since last status reset.
|
||||
*
|
||||
* \param usart Base address of the USART instance.
|
||||
*
|
||||
* \return \c 1 if a overrun error has been detected, otherwise \c 0.
|
||||
*/
|
||||
#if __GNUC__
|
||||
__attribute__((__always_inline__))
|
||||
#endif
|
||||
extern __inline__ int usart_overrun_error(volatile avr32_usart_t *usart)
|
||||
{
|
||||
return (usart->csr & AVR32_USART_CSR_OVRE_MASK) != 0;
|
||||
}
|
||||
|
||||
//! @}
|
||||
|
||||
|
||||
//------------------------------------------------------------------------------
|
||||
/*! \name Transmit/Receive Functions
|
||||
*/
|
||||
//! @{
|
||||
|
||||
/*! \brief Addresses a receiver.
|
||||
*
|
||||
* While in RS485 mode, receivers only accept data addressed to them.
|
||||
* A packet/char with the address tag set has to precede any data.
|
||||
* This function is used to address a receiver. This receiver should read
|
||||
* all the following data, until an address packet addresses another receiver.
|
||||
*
|
||||
* \param usart Base address of the USART instance.
|
||||
* \param address Address of the target device.
|
||||
*
|
||||
* \retval USART_SUCCESS Address successfully sent (if current mode is RS485).
|
||||
* \retval USART_MODE_FAULT Wrong operating mode.
|
||||
*/
|
||||
extern int usart_send_address(volatile avr32_usart_t *usart, int address);
|
||||
|
||||
/*! \brief Writes the given character to the TX buffer if the transmitter is ready.
|
||||
*
|
||||
* \param usart Base address of the USART instance.
|
||||
* \param c The character (up to 9 bits) to transmit.
|
||||
*
|
||||
* \retval USART_SUCCESS The transmitter was ready.
|
||||
* \retval USART_TX_BUSY The transmitter was busy.
|
||||
*/
|
||||
extern int usart_write_char(volatile avr32_usart_t *usart, int c);
|
||||
|
||||
/*! \brief An active wait writing a character to the USART.
|
||||
*
|
||||
* \param usart Base address of the USART instance.
|
||||
* \param c The character (up to 9 bits) to transmit.
|
||||
*/
|
||||
#if __GNUC__
|
||||
__attribute__((__always_inline__))
|
||||
#endif
|
||||
extern __inline__ void usart_bw_write_char(volatile avr32_usart_t *usart, int c)
|
||||
{
|
||||
while (usart_write_char(usart, c) != USART_SUCCESS);
|
||||
}
|
||||
|
||||
/*! \brief Sends a character with the USART.
|
||||
*
|
||||
* \param usart Base address of the USART instance.
|
||||
* \param c Character to write.
|
||||
*
|
||||
* \retval USART_SUCCESS The character was written.
|
||||
* \retval USART_FAILURE The function timed out before the USART transmitter became ready to send.
|
||||
*/
|
||||
extern int usart_putchar(volatile avr32_usart_t *usart, int c);
|
||||
|
||||
/*! \brief Checks the RX buffer for a received character, and stores it at the
|
||||
* given memory location.
|
||||
*
|
||||
* \param usart Base address of the USART instance.
|
||||
* \param c Pointer to the where the read character should be stored
|
||||
* (must be at least short in order to accept 9-bit characters).
|
||||
*
|
||||
* \retval USART_SUCCESS The character was read successfully.
|
||||
* \retval USART_RX_EMPTY The RX buffer was empty.
|
||||
* \retval USART_RX_ERROR An error was deteceted.
|
||||
*/
|
||||
extern int usart_read_char(volatile avr32_usart_t *usart, int *c);
|
||||
|
||||
/*! \brief Waits until a character is received, and returns it.
|
||||
*
|
||||
* \param usart Base address of the USART instance.
|
||||
*
|
||||
* \return The received character, or \ref USART_FAILURE upon error.
|
||||
*/
|
||||
extern int usart_getchar(volatile avr32_usart_t *usart);
|
||||
|
||||
/*! \brief Writes one character string to the USART.
|
||||
*
|
||||
* \param usart Base address of the USART instance.
|
||||
* \param string String to be written.
|
||||
*/
|
||||
extern void usart_write_line(volatile avr32_usart_t *usart, const char *string);
|
||||
|
||||
/*! \brief Gets and echoes characters until end of line.
|
||||
*
|
||||
* \param usart Base address of the USART instance.
|
||||
*
|
||||
* \retval USART_SUCCESS Success.
|
||||
* \retval USART_FAILURE ETX character received.
|
||||
*/
|
||||
extern int usart_get_echo_line(volatile avr32_usart_t *usart);
|
||||
|
||||
//! @}
|
||||
|
||||
|
||||
#endif // _USART_H_
|
Loading…
Reference in New Issue