From 2ac0ccb27b4954563d313a193cc599979a7c77a1 Mon Sep 17 00:00:00 2001 From: Mark VanderVoord Date: Mon, 4 Jan 2016 20:00:32 -0500 Subject: [PATCH] fixed white space --- docs/license.txt | 4 +- examples/temp_sensor/gcc.yml | 86 +- examples/temp_sensor/iar_v4.yml | 182 +- examples/temp_sensor/iar_v5.yml | 160 +- examples/temp_sensor/rakefile.rb | 64 +- examples/temp_sensor/rakefile_helper.rb | 540 +- examples/temp_sensor/src/AT91SAM7X256.h | 5112 ++++++++--------- examples/temp_sensor/src/AdcConductor.c | 84 +- examples/temp_sensor/src/AdcConductor.h | 22 +- examples/temp_sensor/src/AdcHardware.c | 54 +- examples/temp_sensor/src/AdcHardware.h | 18 +- .../temp_sensor/src/AdcHardwareConfigurator.c | 36 +- .../temp_sensor/src/AdcHardwareConfigurator.h | 20 +- examples/temp_sensor/src/AdcModel.c | 66 +- examples/temp_sensor/src/AdcModel.h | 26 +- .../temp_sensor/src/AdcTemperatureSensor.c | 102 +- .../temp_sensor/src/AdcTemperatureSensor.h | 20 +- examples/temp_sensor/src/Executor.c | 50 +- examples/temp_sensor/src/Executor.h | 18 +- examples/temp_sensor/src/IntrinsicsWrapper.c | 36 +- examples/temp_sensor/src/IntrinsicsWrapper.h | 14 +- examples/temp_sensor/src/Main.c | 92 +- examples/temp_sensor/src/Main.h | 14 +- examples/temp_sensor/src/Model.c | 20 +- examples/temp_sensor/src/Model.h | 16 +- examples/temp_sensor/src/ModelConfig.h | 14 +- examples/temp_sensor/src/TaskScheduler.c | 144 +- examples/temp_sensor/src/TaskScheduler.h | 22 +- .../temp_sensor/src/TemperatureCalculator.c | 54 +- .../temp_sensor/src/TemperatureCalculator.h | 12 +- examples/temp_sensor/src/TemperatureFilter.c | 78 +- examples/temp_sensor/src/TemperatureFilter.h | 20 +- examples/temp_sensor/src/TimerConductor.c | 30 +- examples/temp_sensor/src/TimerConductor.h | 18 +- examples/temp_sensor/src/TimerConfigurator.c | 102 +- examples/temp_sensor/src/TimerConfigurator.h | 30 +- examples/temp_sensor/src/TimerHardware.c | 30 +- examples/temp_sensor/src/TimerHardware.h | 16 +- .../src/TimerInterruptConfigurator.c | 110 +- .../src/TimerInterruptConfigurator.h | 26 +- .../temp_sensor/src/TimerInterruptHandler.c | 50 +- .../temp_sensor/src/TimerInterruptHandler.h | 20 +- examples/temp_sensor/src/TimerModel.c | 18 +- examples/temp_sensor/src/TimerModel.h | 16 +- examples/temp_sensor/src/Types.h | 206 +- .../src/UsartBaudRateRegisterCalculator.c | 36 +- .../src/UsartBaudRateRegisterCalculator.h | 12 +- examples/temp_sensor/src/UsartConductor.c | 42 +- examples/temp_sensor/src/UsartConductor.h | 14 +- examples/temp_sensor/src/UsartConfigurator.c | 78 +- examples/temp_sensor/src/UsartConfigurator.h | 26 +- examples/temp_sensor/src/UsartHardware.c | 44 +- examples/temp_sensor/src/UsartHardware.h | 18 +- examples/temp_sensor/src/UsartModel.c | 68 +- examples/temp_sensor/src/UsartModel.h | 20 +- examples/temp_sensor/src/UsartPutChar.c | 32 +- examples/temp_sensor/src/UsartPutChar.h | 16 +- .../src/UsartTransmitBufferStatus.c | 14 +- .../src/UsartTransmitBufferStatus.h | 16 +- examples/temp_sensor/test/TestAdcConductor.c | 242 +- examples/temp_sensor/test/TestAdcHardware.c | 88 +- .../test/TestAdcHardwareConfigurator.c | 86 +- examples/temp_sensor/test/TestAdcModel.c | 66 +- .../test/TestAdcTemperatureSensor.c | 94 +- examples/temp_sensor/test/TestExecutor.c | 72 +- examples/temp_sensor/test/TestMain.c | 48 +- examples/temp_sensor/test/TestModel.c | 40 +- examples/temp_sensor/test/TestTaskScheduler.c | 208 +- .../test/TestTemperatureCalculator.c | 66 +- .../temp_sensor/test/TestTemperatureFilter.c | 138 +- .../temp_sensor/test/TestTimerConductor.c | 64 +- .../temp_sensor/test/TestTimerConfigurator.c | 224 +- examples/temp_sensor/test/TestTimerHardware.c | 52 +- .../test/TestTimerInterruptConfigurator.c | 156 +- .../test/TestTimerInterruptHandler.c | 132 +- examples/temp_sensor/test/TestTimerModel.c | 36 +- .../TestUsartBaudRateRegisterCalculator.c | 42 +- .../temp_sensor/test/TestUsartConductor.c | 80 +- .../temp_sensor/test/TestUsartConfigurator.c | 154 +- examples/temp_sensor/test/TestUsartHardware.c | 74 +- examples/temp_sensor/test/TestUsartModel.c | 72 +- examples/temp_sensor/test/TestUsartPutChar.c | 86 +- .../test/TestUsartTransmitBufferStatus.c | 44 +- lib/cmock_config.rb | 268 +- lib/cmock_file_writer.rb | 80 +- lib/cmock_generator_plugin_array.rb | 126 +- lib/cmock_generator_plugin_callback.rb | 156 +- lib/cmock_generator_plugin_expect_any_args.rb | 136 +- test/c/TestCMockCDynamic_Runner.c | 72 +- test/c/TestCMockC_Runner.c | 78 +- test/system/systest_generator.rb | 388 +- test/test_helper.rb | 94 +- test/unit/cmock_config_test.rb | 236 +- test/unit/cmock_file_writer_test.rb | 54 +- .../unit/cmock_generator_plugin_array_test.rb | 266 +- .../cmock_generator_plugin_callback_test.rb | 378 +- ...k_generator_plugin_expect_any_args_test.rb | 162 +- test/unit/cmock_header_parser_test.rb | 2762 ++++----- test/unit/cmock_plugin_manager_test.rb | 190 +- test/unit/cmock_unityhelper_parser_test.rb | 446 +- 100 files changed, 8282 insertions(+), 8282 deletions(-) diff --git a/docs/license.txt b/docs/license.txt index 1c1d824..98167e4 100644 --- a/docs/license.txt +++ b/docs/license.txt @@ -1,5 +1,5 @@ -Copyright (c) 2007-14 Mike Karlesky, Mark VanderVoord, Greg Williams - +Copyright (c) 2007-14 Mike Karlesky, Mark VanderVoord, Greg Williams + Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights diff --git a/examples/temp_sensor/gcc.yml b/examples/temp_sensor/gcc.yml index d3f08db..081cfa0 100644 --- a/examples/temp_sensor/gcc.yml +++ b/examples/temp_sensor/gcc.yml @@ -1,43 +1,43 @@ -compiler: - path: gcc - source_path: 'src/' - unit_tests_path: &unit_tests_path 'test/' - build_path: &build_path 'build/' - options: - - -c - includes: - prefix: '-I' - items: - - 'src/' - - '../src/' - - '../vendor/unity/src/' - - '../vendor/unity/examples/example_3/helper/' - - 'mocks/' - - *unit_tests_path - defines: - prefix: '-D' - items: - - __monitor - object_files: - prefix: '-o' - extension: '.o' - destination: *build_path -linker: - path: gcc - options: - - -lm - includes: - prefix: '-I' - object_files: - path: *build_path - extension: '.o' - bin_files: - prefix: '-o' - extension: '.exe' - destination: *build_path -:cmock: - :plugins: [] - :includes: - - Types.h - -colour: true +compiler: + path: gcc + source_path: 'src/' + unit_tests_path: &unit_tests_path 'test/' + build_path: &build_path 'build/' + options: + - -c + includes: + prefix: '-I' + items: + - 'src/' + - '../src/' + - '../vendor/unity/src/' + - '../vendor/unity/examples/example_3/helper/' + - 'mocks/' + - *unit_tests_path + defines: + prefix: '-D' + items: + - __monitor + object_files: + prefix: '-o' + extension: '.o' + destination: *build_path +linker: + path: gcc + options: + - -lm + includes: + prefix: '-I' + object_files: + path: *build_path + extension: '.o' + bin_files: + prefix: '-o' + extension: '.exe' + destination: *build_path +:cmock: + :plugins: [] + :includes: + - Types.h + +colour: true diff --git a/examples/temp_sensor/iar_v4.yml b/examples/temp_sensor/iar_v4.yml index a61a38a..79f00b7 100644 --- a/examples/temp_sensor/iar_v4.yml +++ b/examples/temp_sensor/iar_v4.yml @@ -1,91 +1,91 @@ -tools_root: &tools_root 'C:\Program Files\IAR Systems\Embedded Workbench 4.0 Kickstart\' -compiler: - path: [*tools_root, 'arm\bin\iccarm.exe'] - source_path: 'src\' - unit_tests_path: &unit_tests_path 'test\' - build_path: &build_path 'build\' - options: - - --dlib_config - - [*tools_root, 'arm\lib\dl4tptinl8n.h'] - - -z3 - - --no_cse - - --no_unroll - - --no_inline - - --no_code_motion - - --no_tbaa - - --no_clustering - - --no_scheduling - - --debug - - --cpu_mode thumb - - --endian little - - --cpu ARM7TDMI - - --stack_align 4 - - --interwork - - -e - - --silent - - --warnings_are_errors - - --fpu None - - --diag_suppress Pa050 - includes: - prefix: '-I' - items: - - 'src/' - - '../src/' - - '../vendor/unity/src/' - - '../vendor/unity/examples/example_3/helper/' - - 'mocks/' - - [*tools_root, 'arm\inc\'] - - *unit_tests_path - defines: - prefix: '-D' - items: - object_files: - prefix: '-o' - extension: '.r79' - destination: *build_path -linker: - path: [*tools_root, 'common\bin\xlink.exe'] - options: - - -rt - - [*tools_root, 'arm\lib\dl4tptinl8n.r79'] - - -D_L_EXTMEM_START=0 - - -D_L_EXTMEM_SIZE=0 - - -D_L_HEAP_SIZE=120 - - -D_L_STACK_SIZE=32 - - -e_small_write=_formatted_write - - -s - - __program_start - - -f - - [*tools_root, '\arm\config\lnkarm.xcl'] - includes: - prefix: '-I' - items: - - [*tools_root, 'arm\config\'] - - [*tools_root, 'arm\lib\'] - object_files: - path: *build_path - extension: '.r79' - bin_files: - prefix: '-o' - extension: '.d79' - destination: *build_path -simulator: - path: [*tools_root, 'common\bin\CSpyBat.exe'] - pre_support: - - --silent - - [*tools_root, 'arm\bin\armproc.dll'] - - [*tools_root, 'arm\bin\armsim.dll'] - post_support: - - --plugin - - [*tools_root, 'arm\bin\armbat.dll'] - - --backend - - -B - - -p - - [*tools_root, 'arm\config\ioat91sam7X256.ddf'] - - -d - - sim -:cmock: - :plugins: [] - :includes: - - Types.h - +tools_root: &tools_root 'C:\Program Files\IAR Systems\Embedded Workbench 4.0 Kickstart\' +compiler: + path: [*tools_root, 'arm\bin\iccarm.exe'] + source_path: 'src\' + unit_tests_path: &unit_tests_path 'test\' + build_path: &build_path 'build\' + options: + - --dlib_config + - [*tools_root, 'arm\lib\dl4tptinl8n.h'] + - -z3 + - --no_cse + - --no_unroll + - --no_inline + - --no_code_motion + - --no_tbaa + - --no_clustering + - --no_scheduling + - --debug + - --cpu_mode thumb + - --endian little + - --cpu ARM7TDMI + - --stack_align 4 + - --interwork + - -e + - --silent + - --warnings_are_errors + - --fpu None + - --diag_suppress Pa050 + includes: + prefix: '-I' + items: + - 'src/' + - '../src/' + - '../vendor/unity/src/' + - '../vendor/unity/examples/example_3/helper/' + - 'mocks/' + - [*tools_root, 'arm\inc\'] + - *unit_tests_path + defines: + prefix: '-D' + items: + object_files: + prefix: '-o' + extension: '.r79' + destination: *build_path +linker: + path: [*tools_root, 'common\bin\xlink.exe'] + options: + - -rt + - [*tools_root, 'arm\lib\dl4tptinl8n.r79'] + - -D_L_EXTMEM_START=0 + - -D_L_EXTMEM_SIZE=0 + - -D_L_HEAP_SIZE=120 + - -D_L_STACK_SIZE=32 + - -e_small_write=_formatted_write + - -s + - __program_start + - -f + - [*tools_root, '\arm\config\lnkarm.xcl'] + includes: + prefix: '-I' + items: + - [*tools_root, 'arm\config\'] + - [*tools_root, 'arm\lib\'] + object_files: + path: *build_path + extension: '.r79' + bin_files: + prefix: '-o' + extension: '.d79' + destination: *build_path +simulator: + path: [*tools_root, 'common\bin\CSpyBat.exe'] + pre_support: + - --silent + - [*tools_root, 'arm\bin\armproc.dll'] + - [*tools_root, 'arm\bin\armsim.dll'] + post_support: + - --plugin + - [*tools_root, 'arm\bin\armbat.dll'] + - --backend + - -B + - -p + - [*tools_root, 'arm\config\ioat91sam7X256.ddf'] + - -d + - sim +:cmock: + :plugins: [] + :includes: + - Types.h + diff --git a/examples/temp_sensor/iar_v5.yml b/examples/temp_sensor/iar_v5.yml index fb3bd16..a1fe3cb 100644 --- a/examples/temp_sensor/iar_v5.yml +++ b/examples/temp_sensor/iar_v5.yml @@ -1,80 +1,80 @@ -tools_root: &tools_root 'C:\Program Files\IAR Systems\Embedded Workbench 5.3\' -compiler: - path: [*tools_root, 'arm\bin\iccarm.exe'] - source_path: 'src\' - unit_tests_path: &unit_tests_path 'test\' - build_path: &build_path 'build\' - options: - - --dlib_config - - [*tools_root, 'arm\inc\DLib_Config_Normal.h'] - - --no_cse - - --no_unroll - - --no_inline - - --no_code_motion - - --no_tbaa - - --no_clustering - - --no_scheduling - - --debug - - --cpu_mode thumb - - --endian=little - - --cpu=ARM7TDMI - - --interwork - - --warnings_are_errors - - --fpu=None - - --diag_suppress=Pa050 - - --diag_suppress=Pe111 - - -e - - -On - includes: - prefix: '-I' - items: - - 'src/' - - '../src/' - - '../vendor/unity/src/' - - '../vendor/unity/examples/example_3/helper/' - - 'mocks/' - - [*tools_root, 'arm\inc\'] - - *unit_tests_path - defines: - prefix: '-D' - items: - object_files: - prefix: '-o' - extension: '.r79' - destination: *build_path -linker: - path: [*tools_root, 'arm\bin\ilinkarm.exe'] - options: - - --redirect _Printf=_PrintfLarge - - --redirect _Scanf=_ScanfSmall - - --semihosting - - --entry __iar_program_start - - --config - - [*tools_root, 'arm\config\generic.icf'] - object_files: - path: *build_path - extension: '.o' - bin_files: - prefix: '-o' - extension: '.out' - destination: *build_path -simulator: - path: [*tools_root, 'common\bin\CSpyBat.exe'] - pre_support: - - --silent - - [*tools_root, 'arm\bin\armproc.dll'] - - [*tools_root, 'arm\bin\armsim.dll'] - post_support: - - --plugin - - [*tools_root, 'arm\bin\armbat.dll'] - - --backend - - -B - - -p - - [*tools_root, 'arm\config\debugger\atmel\ioat91sam7X256.ddf'] - - -d - - sim -:cmock: - :plugins: [] - :includes: - - Types.h - +tools_root: &tools_root 'C:\Program Files\IAR Systems\Embedded Workbench 5.3\' +compiler: + path: [*tools_root, 'arm\bin\iccarm.exe'] + source_path: 'src\' + unit_tests_path: &unit_tests_path 'test\' + build_path: &build_path 'build\' + options: + - --dlib_config + - [*tools_root, 'arm\inc\DLib_Config_Normal.h'] + - --no_cse + - --no_unroll + - --no_inline + - --no_code_motion + - --no_tbaa + - --no_clustering + - --no_scheduling + - --debug + - --cpu_mode thumb + - --endian=little + - --cpu=ARM7TDMI + - --interwork + - --warnings_are_errors + - --fpu=None + - --diag_suppress=Pa050 + - --diag_suppress=Pe111 + - -e + - -On + includes: + prefix: '-I' + items: + - 'src/' + - '../src/' + - '../vendor/unity/src/' + - '../vendor/unity/examples/example_3/helper/' + - 'mocks/' + - [*tools_root, 'arm\inc\'] + - *unit_tests_path + defines: + prefix: '-D' + items: + object_files: + prefix: '-o' + extension: '.r79' + destination: *build_path +linker: + path: [*tools_root, 'arm\bin\ilinkarm.exe'] + options: + - --redirect _Printf=_PrintfLarge + - --redirect _Scanf=_ScanfSmall + - --semihosting + - --entry __iar_program_start + - --config + - [*tools_root, 'arm\config\generic.icf'] + object_files: + path: *build_path + extension: '.o' + bin_files: + prefix: '-o' + extension: '.out' + destination: *build_path +simulator: + path: [*tools_root, 'common\bin\CSpyBat.exe'] + pre_support: + - --silent + - [*tools_root, 'arm\bin\armproc.dll'] + - [*tools_root, 'arm\bin\armsim.dll'] + post_support: + - --plugin + - [*tools_root, 'arm\bin\armbat.dll'] + - --backend + - -B + - -p + - [*tools_root, 'arm\config\debugger\atmel\ioat91sam7X256.ddf'] + - -d + - sim +:cmock: + :plugins: [] + :includes: + - Types.h + diff --git a/examples/temp_sensor/rakefile.rb b/examples/temp_sensor/rakefile.rb index 47bac8a..0c6a7ca 100644 --- a/examples/temp_sensor/rakefile.rb +++ b/examples/temp_sensor/rakefile.rb @@ -1,32 +1,32 @@ -HERE = File.expand_path(File.dirname(__FILE__)) + '/' - -require 'rake' -require 'rake/clean' -require 'rake/testtask' -require './rakefile_helper' - -include RakefileHelpers - -# Load default configuration, for now -DEFAULT_CONFIG_FILE = 'gcc.yml' -configure_toolchain(DEFAULT_CONFIG_FILE) - -task :unit do - run_tests(get_unit_test_files) -end - -desc "Generate test summary" -task :summary do - report_summary -end - -desc "Build and test Unity" -task :all => [:clean, :unit, :summary] -task :default => [:clobber, :all] -task :ci => [:default] -task :cruise => [:default] - -desc "Load configuration" -task :config, :config_file do |t, args| - configure_toolchain(args[:config_file]) -end +HERE = File.expand_path(File.dirname(__FILE__)) + '/' + +require 'rake' +require 'rake/clean' +require 'rake/testtask' +require './rakefile_helper' + +include RakefileHelpers + +# Load default configuration, for now +DEFAULT_CONFIG_FILE = 'gcc.yml' +configure_toolchain(DEFAULT_CONFIG_FILE) + +task :unit do + run_tests(get_unit_test_files) +end + +desc "Generate test summary" +task :summary do + report_summary +end + +desc "Build and test Unity" +task :all => [:clean, :unit, :summary] +task :default => [:clobber, :all] +task :ci => [:default] +task :cruise => [:default] + +desc "Load configuration" +task :config, :config_file do |t, args| + configure_toolchain(args[:config_file]) +end diff --git a/examples/temp_sensor/rakefile_helper.rb b/examples/temp_sensor/rakefile_helper.rb index dfee555..7874251 100644 --- a/examples/temp_sensor/rakefile_helper.rb +++ b/examples/temp_sensor/rakefile_helper.rb @@ -1,270 +1,270 @@ -require 'yaml' -require 'fileutils' -require '../vendor/unity/auto/unity_test_summary' -require '../vendor/unity/auto/generate_test_runner' -require '../vendor/unity/auto/colour_reporter' - -module RakefileHelpers - - C_EXTENSION = '.c' - - def load_configuration(config_file) - $cfg_file = config_file - $cfg = YAML.load(File.read($cfg_file)) - $colour_output = false unless $cfg['colour'] - end - - def configure_clean - CLEAN.include($cfg['compiler']['build_path'] + '*.*') unless $cfg['compiler']['build_path'].nil? - end - - def configure_toolchain(config_file=DEFAULT_CONFIG_FILE) - config_file += '.yml' unless config_file =~ /\.yml$/ - load_configuration(config_file) - configure_clean - end - - def get_unit_test_files - path = $cfg['compiler']['unit_tests_path'] + 'Test*' + C_EXTENSION - path.gsub!(/\\/, '/') - FileList.new(path) - end - - def get_local_include_dirs - include_dirs = $cfg['compiler']['includes']['items'].dup - include_dirs.delete_if {|dir| dir.is_a?(Array)} - return include_dirs - end - - def extract_headers(filename) - includes = [] - lines = File.readlines(filename) - lines.each do |line| - m = line.match(/^\s*#include\s+\"\s*(.+\.[hH])\s*\"/) - if not m.nil? - includes << m[1] - end - end - return includes - end - - def find_source_file(header, paths) - paths.each do |dir| - src_file = dir + header.ext(C_EXTENSION) - if (File.exists?(src_file)) - return src_file - end - end - return nil - end - - def tackit(strings) - case(strings) - when Array - "\"#{strings.join}\"" - when /^-/ - strings - when /\s/ - "\"#{strings}\"" - else - strings - end - end - - def squash(prefix, items) - result = '' - items.each { |item| result += " #{prefix}#{tackit(item)}" } - return result - end - - def build_compiler_fields - command = tackit($cfg['compiler']['path']) - if $cfg['compiler']['defines']['items'].nil? - defines = '' - else - defines = squash($cfg['compiler']['defines']['prefix'], $cfg['compiler']['defines']['items']) - end - options = squash('', $cfg['compiler']['options']) - includes = squash($cfg['compiler']['includes']['prefix'], $cfg['compiler']['includes']['items']) - includes = includes.gsub(/\\ /, ' ').gsub(/\\\"/, '"').gsub(/\\$/, '') # Remove trailing slashes (for IAR) - return {:command => command, :defines => defines, :options => options, :includes => includes} - end - - def compile(file, defines=[]) - compiler = build_compiler_fields - cmd_str = "#{compiler[:command]}#{compiler[:defines]}#{compiler[:options]}#{compiler[:includes]} #{file} " + - "#{$cfg['compiler']['object_files']['prefix']}#{$cfg['compiler']['object_files']['destination']}" - obj_file = "#{File.basename(file, C_EXTENSION)}#{$cfg['compiler']['object_files']['extension']}" - execute(cmd_str + obj_file) - return obj_file - end - - def build_linker_fields - command = tackit($cfg['linker']['path']) - if $cfg['linker']['options'].nil? - options = '' - else - options = squash('', $cfg['linker']['options']) - end - if ($cfg['linker']['includes'].nil? || $cfg['linker']['includes']['items'].nil?) - includes = '' - else - includes = squash($cfg['linker']['includes']['prefix'], $cfg['linker']['includes']['items']) - end - includes = includes.gsub(/\\ /, ' ').gsub(/\\\"/, '"').gsub(/\\$/, '') # Remove trailing slashes (for IAR) - return {:command => command, :options => options, :includes => includes} - end - - def link_it(exe_name, obj_list) - linker = build_linker_fields - cmd_str = "#{linker[:command]}#{linker[:includes]} " + - (obj_list.map{|obj|"#{$cfg['linker']['object_files']['path']}#{obj} "}).join + - $cfg['linker']['bin_files']['prefix'] + ' ' + - $cfg['linker']['bin_files']['destination'] + - exe_name + $cfg['linker']['bin_files']['extension'] + " #{linker[:options]}" - execute(cmd_str) - end - - def build_simulator_fields - return nil if $cfg['simulator'].nil? - if $cfg['simulator']['path'].nil? - command = '' - else - command = (tackit($cfg['simulator']['path']) + ' ') - end - if $cfg['simulator']['pre_support'].nil? - pre_support = '' - else - pre_support = squash('', $cfg['simulator']['pre_support']) - end - if $cfg['simulator']['post_support'].nil? - post_support = '' - else - post_support = squash('', $cfg['simulator']['post_support']) - end - return {:command => command, :pre_support => pre_support, :post_support => post_support} - end - - def execute(command_string, verbose=true) - report command_string - output = `#{command_string}`.chomp - report(output) if (verbose && !output.nil? && (output.length > 0)) - if $?.exitstatus != 0 - raise "Command failed. (Returned #{$?.exitstatus})" - end - return output - end - - def report_summary - summary = UnityTestSummary.new - summary.set_root_path(HERE) - results_glob = "#{$cfg['compiler']['build_path']}*.test*" - results_glob.gsub!(/\\/, '/') - results = Dir[results_glob] - summary.set_targets(results) - report summary.run - raise "There were failures" if (summary.failures > 0) - end - - def run_tests(test_files) - - report 'Running system tests...' - - # Tack on TEST define for compiling unit tests - load_configuration($cfg_file) - test_defines = ['TEST'] - $cfg['compiler']['defines']['items'] = [] if $cfg['compiler']['defines']['items'].nil? - $cfg['compiler']['defines']['items'] << 'TEST' - - include_dirs = get_local_include_dirs - - # Build and execute each unit test - test_files.each do |test| - obj_list = [] - - # Detect dependencies and build required required modules - header_list = extract_headers(test) + ['cmock.h'] - header_list.each do |header| - - #create mocks if needed - if (header =~ /Mock/) - require "../lib/cmock.rb" - @cmock ||= CMock.new($cfg_file) - @cmock.setup_mocks([$cfg['compiler']['source_path']+header.gsub('Mock','')]) - end - - end - - #compile all mocks - header_list.each do |header| - #compile source file header if it exists - src_file = find_source_file(header, include_dirs) - if !src_file.nil? - obj_list << compile(src_file, test_defines) - end - end - - # Build the test runner (generate if configured to do so) - test_base = File.basename(test, C_EXTENSION) - runner_name = test_base + '_Runner.c' - if $cfg['compiler']['runner_path'].nil? - runner_path = $cfg['compiler']['build_path'] + runner_name - test_gen = UnityTestRunnerGenerator.new($cfg_file) - test_gen.run(test, runner_path) - else - runner_path = $cfg['compiler']['runner_path'] + runner_name - end - - obj_list << compile(runner_path, test_defines) - - # Build the test module - obj_list << compile(test, test_defines) - - # Link the test executable - link_it(test_base, obj_list) - - # Execute unit test and generate results file - simulator = build_simulator_fields - executable = $cfg['linker']['bin_files']['destination'] + test_base + $cfg['linker']['bin_files']['extension'] - if simulator.nil? - cmd_str = executable - else - cmd_str = "#{simulator[:command]} #{simulator[:pre_support]} #{executable} #{simulator[:post_support]}" - end - output = execute(cmd_str) - test_results = $cfg['compiler']['build_path'] + test_base - if output.match(/OK$/m).nil? - test_results += '.testfail' - else - test_results += '.testpass' - end - File.open(test_results, 'w') { |f| f.print output } - end - end - - def build_application(main) - - report "Building application..." - - obj_list = [] - load_configuration($cfg_file) - main_path = $cfg['compiler']['source_path'] + main + C_EXTENSION - - # Detect dependencies and build required required modules - include_dirs = get_local_include_dirs - extract_headers(main_path).each do |header| - src_file = find_source_file(header, include_dirs) - if !src_file.nil? - obj_list << compile(src_file) - end - end - - # Build the main source file - main_base = File.basename(main_path, C_EXTENSION) - obj_list << compile(main_path) - - # Create the executable - link_it(main_base, obj_list) - end - -end +require 'yaml' +require 'fileutils' +require '../vendor/unity/auto/unity_test_summary' +require '../vendor/unity/auto/generate_test_runner' +require '../vendor/unity/auto/colour_reporter' + +module RakefileHelpers + + C_EXTENSION = '.c' + + def load_configuration(config_file) + $cfg_file = config_file + $cfg = YAML.load(File.read($cfg_file)) + $colour_output = false unless $cfg['colour'] + end + + def configure_clean + CLEAN.include($cfg['compiler']['build_path'] + '*.*') unless $cfg['compiler']['build_path'].nil? + end + + def configure_toolchain(config_file=DEFAULT_CONFIG_FILE) + config_file += '.yml' unless config_file =~ /\.yml$/ + load_configuration(config_file) + configure_clean + end + + def get_unit_test_files + path = $cfg['compiler']['unit_tests_path'] + 'Test*' + C_EXTENSION + path.gsub!(/\\/, '/') + FileList.new(path) + end + + def get_local_include_dirs + include_dirs = $cfg['compiler']['includes']['items'].dup + include_dirs.delete_if {|dir| dir.is_a?(Array)} + return include_dirs + end + + def extract_headers(filename) + includes = [] + lines = File.readlines(filename) + lines.each do |line| + m = line.match(/^\s*#include\s+\"\s*(.+\.[hH])\s*\"/) + if not m.nil? + includes << m[1] + end + end + return includes + end + + def find_source_file(header, paths) + paths.each do |dir| + src_file = dir + header.ext(C_EXTENSION) + if (File.exists?(src_file)) + return src_file + end + end + return nil + end + + def tackit(strings) + case(strings) + when Array + "\"#{strings.join}\"" + when /^-/ + strings + when /\s/ + "\"#{strings}\"" + else + strings + end + end + + def squash(prefix, items) + result = '' + items.each { |item| result += " #{prefix}#{tackit(item)}" } + return result + end + + def build_compiler_fields + command = tackit($cfg['compiler']['path']) + if $cfg['compiler']['defines']['items'].nil? + defines = '' + else + defines = squash($cfg['compiler']['defines']['prefix'], $cfg['compiler']['defines']['items']) + end + options = squash('', $cfg['compiler']['options']) + includes = squash($cfg['compiler']['includes']['prefix'], $cfg['compiler']['includes']['items']) + includes = includes.gsub(/\\ /, ' ').gsub(/\\\"/, '"').gsub(/\\$/, '') # Remove trailing slashes (for IAR) + return {:command => command, :defines => defines, :options => options, :includes => includes} + end + + def compile(file, defines=[]) + compiler = build_compiler_fields + cmd_str = "#{compiler[:command]}#{compiler[:defines]}#{compiler[:options]}#{compiler[:includes]} #{file} " + + "#{$cfg['compiler']['object_files']['prefix']}#{$cfg['compiler']['object_files']['destination']}" + obj_file = "#{File.basename(file, C_EXTENSION)}#{$cfg['compiler']['object_files']['extension']}" + execute(cmd_str + obj_file) + return obj_file + end + + def build_linker_fields + command = tackit($cfg['linker']['path']) + if $cfg['linker']['options'].nil? + options = '' + else + options = squash('', $cfg['linker']['options']) + end + if ($cfg['linker']['includes'].nil? || $cfg['linker']['includes']['items'].nil?) + includes = '' + else + includes = squash($cfg['linker']['includes']['prefix'], $cfg['linker']['includes']['items']) + end + includes = includes.gsub(/\\ /, ' ').gsub(/\\\"/, '"').gsub(/\\$/, '') # Remove trailing slashes (for IAR) + return {:command => command, :options => options, :includes => includes} + end + + def link_it(exe_name, obj_list) + linker = build_linker_fields + cmd_str = "#{linker[:command]}#{linker[:includes]} " + + (obj_list.map{|obj|"#{$cfg['linker']['object_files']['path']}#{obj} "}).join + + $cfg['linker']['bin_files']['prefix'] + ' ' + + $cfg['linker']['bin_files']['destination'] + + exe_name + $cfg['linker']['bin_files']['extension'] + " #{linker[:options]}" + execute(cmd_str) + end + + def build_simulator_fields + return nil if $cfg['simulator'].nil? + if $cfg['simulator']['path'].nil? + command = '' + else + command = (tackit($cfg['simulator']['path']) + ' ') + end + if $cfg['simulator']['pre_support'].nil? + pre_support = '' + else + pre_support = squash('', $cfg['simulator']['pre_support']) + end + if $cfg['simulator']['post_support'].nil? + post_support = '' + else + post_support = squash('', $cfg['simulator']['post_support']) + end + return {:command => command, :pre_support => pre_support, :post_support => post_support} + end + + def execute(command_string, verbose=true) + report command_string + output = `#{command_string}`.chomp + report(output) if (verbose && !output.nil? && (output.length > 0)) + if $?.exitstatus != 0 + raise "Command failed. (Returned #{$?.exitstatus})" + end + return output + end + + def report_summary + summary = UnityTestSummary.new + summary.set_root_path(HERE) + results_glob = "#{$cfg['compiler']['build_path']}*.test*" + results_glob.gsub!(/\\/, '/') + results = Dir[results_glob] + summary.set_targets(results) + report summary.run + raise "There were failures" if (summary.failures > 0) + end + + def run_tests(test_files) + + report 'Running system tests...' + + # Tack on TEST define for compiling unit tests + load_configuration($cfg_file) + test_defines = ['TEST'] + $cfg['compiler']['defines']['items'] = [] if $cfg['compiler']['defines']['items'].nil? + $cfg['compiler']['defines']['items'] << 'TEST' + + include_dirs = get_local_include_dirs + + # Build and execute each unit test + test_files.each do |test| + obj_list = [] + + # Detect dependencies and build required required modules + header_list = extract_headers(test) + ['cmock.h'] + header_list.each do |header| + + #create mocks if needed + if (header =~ /Mock/) + require "../lib/cmock.rb" + @cmock ||= CMock.new($cfg_file) + @cmock.setup_mocks([$cfg['compiler']['source_path']+header.gsub('Mock','')]) + end + + end + + #compile all mocks + header_list.each do |header| + #compile source file header if it exists + src_file = find_source_file(header, include_dirs) + if !src_file.nil? + obj_list << compile(src_file, test_defines) + end + end + + # Build the test runner (generate if configured to do so) + test_base = File.basename(test, C_EXTENSION) + runner_name = test_base + '_Runner.c' + if $cfg['compiler']['runner_path'].nil? + runner_path = $cfg['compiler']['build_path'] + runner_name + test_gen = UnityTestRunnerGenerator.new($cfg_file) + test_gen.run(test, runner_path) + else + runner_path = $cfg['compiler']['runner_path'] + runner_name + end + + obj_list << compile(runner_path, test_defines) + + # Build the test module + obj_list << compile(test, test_defines) + + # Link the test executable + link_it(test_base, obj_list) + + # Execute unit test and generate results file + simulator = build_simulator_fields + executable = $cfg['linker']['bin_files']['destination'] + test_base + $cfg['linker']['bin_files']['extension'] + if simulator.nil? + cmd_str = executable + else + cmd_str = "#{simulator[:command]} #{simulator[:pre_support]} #{executable} #{simulator[:post_support]}" + end + output = execute(cmd_str) + test_results = $cfg['compiler']['build_path'] + test_base + if output.match(/OK$/m).nil? + test_results += '.testfail' + else + test_results += '.testpass' + end + File.open(test_results, 'w') { |f| f.print output } + end + end + + def build_application(main) + + report "Building application..." + + obj_list = [] + load_configuration($cfg_file) + main_path = $cfg['compiler']['source_path'] + main + C_EXTENSION + + # Detect dependencies and build required required modules + include_dirs = get_local_include_dirs + extract_headers(main_path).each do |header| + src_file = find_source_file(header, include_dirs) + if !src_file.nil? + obj_list << compile(src_file) + end + end + + # Build the main source file + main_base = File.basename(main_path, C_EXTENSION) + obj_list << compile(main_path) + + # Create the executable + link_it(main_base, obj_list) + end + +end diff --git a/examples/temp_sensor/src/AT91SAM7X256.h b/examples/temp_sensor/src/AT91SAM7X256.h index a09e2f3..baa0313 100644 --- a/examples/temp_sensor/src/AT91SAM7X256.h +++ b/examples/temp_sensor/src/AT91SAM7X256.h @@ -1,2556 +1,2556 @@ -// ---------------------------------------------------------------------------- -// ATMEL Microcontroller Software Support - ROUSSET - -// ---------------------------------------------------------------------------- -// DISCLAIMER: THIS SOFTWARE IS PROVIDED BY ATMEL "AS IS" AND ANY EXPRESS OR -// IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF -// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT ARE -// 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. -// ---------------------------------------------------------------------------- -// File Name : AT91SAM7X256.h -// Object : AT91SAM7X256 definitions -// Generated : AT91 SW Application Group 01/16/2006 (16:36:21) -// -// CVS Reference : /AT91SAM7X256.pl/1.15/Wed Nov 2 13:56:49 2005// -// CVS Reference : /SYS_SAM7X.pl/1.3/Tue Feb 1 17:01:43 2005// -// CVS Reference : /MC_SAM7X.pl/1.2/Fri May 20 14:13:04 2005// -// CVS Reference : /PMC_SAM7X.pl/1.4/Tue Feb 8 13:58:10 2005// -// CVS Reference : /RSTC_SAM7X.pl/1.2/Wed Jul 13 14:57:50 2005// -// CVS Reference : /UDP_SAM7X.pl/1.1/Tue May 10 11:35:35 2005// -// CVS Reference : /PWM_SAM7X.pl/1.1/Tue May 10 11:53:07 2005// -// CVS Reference : /AIC_6075B.pl/1.3/Fri May 20 14:01:30 2005// -// CVS Reference : /PIO_6057A.pl/1.2/Thu Feb 3 10:18:28 2005// -// CVS Reference : /RTTC_6081A.pl/1.2/Tue Nov 9 14:43:58 2004// -// CVS Reference : /PITC_6079A.pl/1.2/Tue Nov 9 14:43:56 2004// -// CVS Reference : /WDTC_6080A.pl/1.3/Tue Nov 9 14:44:00 2004// -// CVS Reference : /VREG_6085B.pl/1.1/Tue Feb 1 16:05:48 2005// -// CVS Reference : /PDC_6074C.pl/1.2/Thu Feb 3 08:48:54 2005// -// CVS Reference : /DBGU_6059D.pl/1.1/Mon Jan 31 13:15:32 2005// -// CVS Reference : /SPI_6088D.pl/1.3/Fri May 20 14:08:59 2005// -// CVS Reference : /US_6089C.pl/1.1/Mon Jul 12 18:23:26 2004// -// CVS Reference : /SSC_6078B.pl/1.1/Wed Jul 13 15:19:19 2005// -// CVS Reference : /TWI_6061A.pl/1.1/Tue Jul 13 07:38:06 2004// -// CVS Reference : /TC_6082A.pl/1.7/Fri Mar 11 12:52:17 2005// -// CVS Reference : /CAN_6019B.pl/1.1/Tue Mar 8 12:42:22 2005// -// CVS Reference : /EMACB_6119A.pl/1.6/Wed Jul 13 15:05:35 2005// -// CVS Reference : /ADC_6051C.pl/1.1/Fri Oct 17 09:12:38 2003// -// ---------------------------------------------------------------------------- - -#ifndef AT91SAM7X256_H -#define AT91SAM7X256_H - -typedef volatile unsigned int AT91_REG;// Hardware register definition - -// ***************************************************************************** -// SOFTWARE API DEFINITION FOR System Peripherals -// ***************************************************************************** -typedef struct _AT91S_SYS { - AT91_REG AIC_SMR[32]; // Source Mode Register - AT91_REG AIC_SVR[32]; // Source Vector Register - AT91_REG AIC_IVR; // IRQ Vector Register - AT91_REG AIC_FVR; // FIQ Vector Register - AT91_REG AIC_ISR; // Interrupt Status Register - AT91_REG AIC_IPR; // Interrupt Pending Register - AT91_REG AIC_IMR; // Interrupt Mask Register - AT91_REG AIC_CISR; // Core Interrupt Status Register - AT91_REG Reserved0[2]; // - AT91_REG AIC_IECR; // Interrupt Enable Command Register - AT91_REG AIC_IDCR; // Interrupt Disable Command Register - AT91_REG AIC_ICCR; // Interrupt Clear Command Register - AT91_REG AIC_ISCR; // Interrupt Set Command Register - AT91_REG AIC_EOICR; // End of Interrupt Command Register - AT91_REG AIC_SPU; // Spurious Vector Register - AT91_REG AIC_DCR; // Debug Control Register (Protect) - AT91_REG Reserved1[1]; // - AT91_REG AIC_FFER; // Fast Forcing Enable Register - AT91_REG AIC_FFDR; // Fast Forcing Disable Register - AT91_REG AIC_FFSR; // Fast Forcing Status Register - AT91_REG Reserved2[45]; // - AT91_REG DBGU_CR; // Control Register - AT91_REG DBGU_MR; // Mode Register - AT91_REG DBGU_IER; // Interrupt Enable Register - AT91_REG DBGU_IDR; // Interrupt Disable Register - AT91_REG DBGU_IMR; // Interrupt Mask Register - AT91_REG DBGU_CSR; // Channel Status Register - AT91_REG DBGU_RHR; // Receiver Holding Register - AT91_REG DBGU_THR; // Transmitter Holding Register - AT91_REG DBGU_BRGR; // Baud Rate Generator Register - AT91_REG Reserved3[7]; // - AT91_REG DBGU_CIDR; // Chip ID Register - AT91_REG DBGU_EXID; // Chip ID Extension Register - AT91_REG DBGU_FNTR; // Force NTRST Register - AT91_REG Reserved4[45]; // - AT91_REG DBGU_RPR; // Receive Pointer Register - AT91_REG DBGU_RCR; // Receive Counter Register - AT91_REG DBGU_TPR; // Transmit Pointer Register - AT91_REG DBGU_TCR; // Transmit Counter Register - AT91_REG DBGU_RNPR; // Receive Next Pointer Register - AT91_REG DBGU_RNCR; // Receive Next Counter Register - AT91_REG DBGU_TNPR; // Transmit Next Pointer Register - AT91_REG DBGU_TNCR; // Transmit Next Counter Register - AT91_REG DBGU_PTCR; // PDC Transfer Control Register - AT91_REG DBGU_PTSR; // PDC Transfer Status Register - AT91_REG Reserved5[54]; // - AT91_REG PIOA_PER; // PIO Enable Register - AT91_REG PIOA_PDR; // PIO Disable Register - AT91_REG PIOA_PSR; // PIO Status Register - AT91_REG Reserved6[1]; // - AT91_REG PIOA_OER; // Output Enable Register - AT91_REG PIOA_ODR; // Output Disable Registerr - AT91_REG PIOA_OSR; // Output Status Register - AT91_REG Reserved7[1]; // - AT91_REG PIOA_IFER; // Input Filter Enable Register - AT91_REG PIOA_IFDR; // Input Filter Disable Register - AT91_REG PIOA_IFSR; // Input Filter Status Register - AT91_REG Reserved8[1]; // - AT91_REG PIOA_SODR; // Set Output Data Register - AT91_REG PIOA_CODR; // Clear Output Data Register - AT91_REG PIOA_ODSR; // Output Data Status Register - AT91_REG PIOA_PDSR; // Pin Data Status Register - AT91_REG PIOA_IER; // Interrupt Enable Register - AT91_REG PIOA_IDR; // Interrupt Disable Register - AT91_REG PIOA_IMR; // Interrupt Mask Register - AT91_REG PIOA_ISR; // Interrupt Status Register - AT91_REG PIOA_MDER; // Multi-driver Enable Register - AT91_REG PIOA_MDDR; // Multi-driver Disable Register - AT91_REG PIOA_MDSR; // Multi-driver Status Register - AT91_REG Reserved9[1]; // - AT91_REG PIOA_PPUDR; // Pull-up Disable Register - AT91_REG PIOA_PPUER; // Pull-up Enable Register - AT91_REG PIOA_PPUSR; // Pull-up Status Register - AT91_REG Reserved10[1]; // - AT91_REG PIOA_ASR; // Select A Register - AT91_REG PIOA_BSR; // Select B Register - AT91_REG PIOA_ABSR; // AB Select Status Register - AT91_REG Reserved11[9]; // - AT91_REG PIOA_OWER; // Output Write Enable Register - AT91_REG PIOA_OWDR; // Output Write Disable Register - AT91_REG PIOA_OWSR; // Output Write Status Register - AT91_REG Reserved12[85]; // - AT91_REG PIOB_PER; // PIO Enable Register - AT91_REG PIOB_PDR; // PIO Disable Register - AT91_REG PIOB_PSR; // PIO Status Register - AT91_REG Reserved13[1]; // - AT91_REG PIOB_OER; // Output Enable Register - AT91_REG PIOB_ODR; // Output Disable Registerr - AT91_REG PIOB_OSR; // Output Status Register - AT91_REG Reserved14[1]; // - AT91_REG PIOB_IFER; // Input Filter Enable Register - AT91_REG PIOB_IFDR; // Input Filter Disable Register - AT91_REG PIOB_IFSR; // Input Filter Status Register - AT91_REG Reserved15[1]; // - AT91_REG PIOB_SODR; // Set Output Data Register - AT91_REG PIOB_CODR; // Clear Output Data Register - AT91_REG PIOB_ODSR; // Output Data Status Register - AT91_REG PIOB_PDSR; // Pin Data Status Register - AT91_REG PIOB_IER; // Interrupt Enable Register - AT91_REG PIOB_IDR; // Interrupt Disable Register - AT91_REG PIOB_IMR; // Interrupt Mask Register - AT91_REG PIOB_ISR; // Interrupt Status Register - AT91_REG PIOB_MDER; // Multi-driver Enable Register - AT91_REG PIOB_MDDR; // Multi-driver Disable Register - AT91_REG PIOB_MDSR; // Multi-driver Status Register - AT91_REG Reserved16[1]; // - AT91_REG PIOB_PPUDR; // Pull-up Disable Register - AT91_REG PIOB_PPUER; // Pull-up Enable Register - AT91_REG PIOB_PPUSR; // Pull-up Status Register - AT91_REG Reserved17[1]; // - AT91_REG PIOB_ASR; // Select A Register - AT91_REG PIOB_BSR; // Select B Register - AT91_REG PIOB_ABSR; // AB Select Status Register - AT91_REG Reserved18[9]; // - AT91_REG PIOB_OWER; // Output Write Enable Register - AT91_REG PIOB_OWDR; // Output Write Disable Register - AT91_REG PIOB_OWSR; // Output Write Status Register - AT91_REG Reserved19[341]; // - AT91_REG PMC_SCER; // System Clock Enable Register - AT91_REG PMC_SCDR; // System Clock Disable Register - AT91_REG PMC_SCSR; // System Clock Status Register - AT91_REG Reserved20[1]; // - AT91_REG PMC_PCER; // Peripheral Clock Enable Register - AT91_REG PMC_PCDR; // Peripheral Clock Disable Register - AT91_REG PMC_PCSR; // Peripheral Clock Status Register - AT91_REG Reserved21[1]; // - AT91_REG PMC_MOR; // Main Oscillator Register - AT91_REG PMC_MCFR; // Main Clock Frequency Register - AT91_REG Reserved22[1]; // - AT91_REG PMC_PLLR; // PLL Register - AT91_REG PMC_MCKR; // Master Clock Register - AT91_REG Reserved23[3]; // - AT91_REG PMC_PCKR[4]; // Programmable Clock Register - AT91_REG Reserved24[4]; // - AT91_REG PMC_IER; // Interrupt Enable Register - AT91_REG PMC_IDR; // Interrupt Disable Register - AT91_REG PMC_SR; // Status Register - AT91_REG PMC_IMR; // Interrupt Mask Register - AT91_REG Reserved25[36]; // - AT91_REG RSTC_RCR; // Reset Control Register - AT91_REG RSTC_RSR; // Reset Status Register - AT91_REG RSTC_RMR; // Reset Mode Register - AT91_REG Reserved26[5]; // - AT91_REG RTTC_RTMR; // Real-time Mode Register - AT91_REG RTTC_RTAR; // Real-time Alarm Register - AT91_REG RTTC_RTVR; // Real-time Value Register - AT91_REG RTTC_RTSR; // Real-time Status Register - AT91_REG PITC_PIMR; // Period Interval Mode Register - AT91_REG PITC_PISR; // Period Interval Status Register - AT91_REG PITC_PIVR; // Period Interval Value Register - AT91_REG PITC_PIIR; // Period Interval Image Register - AT91_REG WDTC_WDCR; // Watchdog Control Register - AT91_REG WDTC_WDMR; // Watchdog Mode Register - AT91_REG WDTC_WDSR; // Watchdog Status Register - AT91_REG Reserved27[5]; // - AT91_REG VREG_MR; // Voltage Regulator Mode Register -} AT91S_SYS, *AT91PS_SYS; - - -// ***************************************************************************** -// SOFTWARE API DEFINITION FOR Advanced Interrupt Controller -// ***************************************************************************** -typedef struct _AT91S_AIC { - AT91_REG AIC_SMR[32]; // Source Mode Register - AT91_REG AIC_SVR[32]; // Source Vector Register - AT91_REG AIC_IVR; // IRQ Vector Register - AT91_REG AIC_FVR; // FIQ Vector Register - AT91_REG AIC_ISR; // Interrupt Status Register - AT91_REG AIC_IPR; // Interrupt Pending Register - AT91_REG AIC_IMR; // Interrupt Mask Register - AT91_REG AIC_CISR; // Core Interrupt Status Register - AT91_REG Reserved0[2]; // - AT91_REG AIC_IECR; // Interrupt Enable Command Register - AT91_REG AIC_IDCR; // Interrupt Disable Command Register - AT91_REG AIC_ICCR; // Interrupt Clear Command Register - AT91_REG AIC_ISCR; // Interrupt Set Command Register - AT91_REG AIC_EOICR; // End of Interrupt Command Register - AT91_REG AIC_SPU; // Spurious Vector Register - AT91_REG AIC_DCR; // Debug Control Register (Protect) - AT91_REG Reserved1[1]; // - AT91_REG AIC_FFER; // Fast Forcing Enable Register - AT91_REG AIC_FFDR; // Fast Forcing Disable Register - AT91_REG AIC_FFSR; // Fast Forcing Status Register -} AT91S_AIC, *AT91PS_AIC; - -// -------- AIC_SMR : (AIC Offset: 0x0) Control Register -------- -#define AT91C_AIC_PRIOR ((unsigned int) 0x7 << 0) // (AIC) Priority Level -#define AT91C_AIC_PRIOR_LOWEST ((unsigned int) 0x0) // (AIC) Lowest priority level -#define AT91C_AIC_PRIOR_HIGHEST ((unsigned int) 0x7) // (AIC) Highest priority level -#define AT91C_AIC_SRCTYPE ((unsigned int) 0x3 << 5) // (AIC) Interrupt Source Type -#define AT91C_AIC_SRCTYPE_EXT_LOW_LEVEL ((unsigned int) 0x0 << 5) // (AIC) External Sources Code Label Low-level Sensitive -#define AT91C_AIC_SRCTYPE_INT_HIGH_LEVEL ((unsigned int) 0x0 << 5) // (AIC) Internal Sources Code Label High-level Sensitive -#define AT91C_AIC_SRCTYPE_INT_POSITIVE_EDGE ((unsigned int) 0x1 << 5) // (AIC) Internal Sources Code Label Positive Edge triggered -#define AT91C_AIC_SRCTYPE_EXT_NEGATIVE_EDGE ((unsigned int) 0x1 << 5) // (AIC) External Sources Code Label Negative Edge triggered -#define AT91C_AIC_SRCTYPE_HIGH_LEVEL ((unsigned int) 0x2 << 5) // (AIC) Internal Or External Sources Code Label High-level Sensitive -#define AT91C_AIC_SRCTYPE_POSITIVE_EDGE ((unsigned int) 0x3 << 5) // (AIC) Internal Or External Sources Code Label Positive Edge triggered -// -------- AIC_CISR : (AIC Offset: 0x114) AIC Core Interrupt Status Register -------- -#define AT91C_AIC_NFIQ ((unsigned int) 0x1 << 0) // (AIC) NFIQ Status -#define AT91C_AIC_NIRQ ((unsigned int) 0x1 << 1) // (AIC) NIRQ Status -// -------- AIC_DCR : (AIC Offset: 0x138) AIC Debug Control Register (Protect) -------- -#define AT91C_AIC_DCR_PROT ((unsigned int) 0x1 << 0) // (AIC) Protection Mode -#define AT91C_AIC_DCR_GMSK ((unsigned int) 0x1 << 1) // (AIC) General Mask - -// ***************************************************************************** -// SOFTWARE API DEFINITION FOR Peripheral DMA Controller -// ***************************************************************************** -typedef struct _AT91S_PDC { - AT91_REG PDC_RPR; // Receive Pointer Register - AT91_REG PDC_RCR; // Receive Counter Register - AT91_REG PDC_TPR; // Transmit Pointer Register - AT91_REG PDC_TCR; // Transmit Counter Register - AT91_REG PDC_RNPR; // Receive Next Pointer Register - AT91_REG PDC_RNCR; // Receive Next Counter Register - AT91_REG PDC_TNPR; // Transmit Next Pointer Register - AT91_REG PDC_TNCR; // Transmit Next Counter Register - AT91_REG PDC_PTCR; // PDC Transfer Control Register - AT91_REG PDC_PTSR; // PDC Transfer Status Register -} AT91S_PDC, *AT91PS_PDC; - -// -------- PDC_PTCR : (PDC Offset: 0x20) PDC Transfer Control Register -------- -#define AT91C_PDC_RXTEN ((unsigned int) 0x1 << 0) // (PDC) Receiver Transfer Enable -#define AT91C_PDC_RXTDIS ((unsigned int) 0x1 << 1) // (PDC) Receiver Transfer Disable -#define AT91C_PDC_TXTEN ((unsigned int) 0x1 << 8) // (PDC) Transmitter Transfer Enable -#define AT91C_PDC_TXTDIS ((unsigned int) 0x1 << 9) // (PDC) Transmitter Transfer Disable -// -------- PDC_PTSR : (PDC Offset: 0x24) PDC Transfer Status Register -------- - -// ***************************************************************************** -// SOFTWARE API DEFINITION FOR Debug Unit -// ***************************************************************************** -typedef struct _AT91S_DBGU { - AT91_REG DBGU_CR; // Control Register - AT91_REG DBGU_MR; // Mode Register - AT91_REG DBGU_IER; // Interrupt Enable Register - AT91_REG DBGU_IDR; // Interrupt Disable Register - AT91_REG DBGU_IMR; // Interrupt Mask Register - AT91_REG DBGU_CSR; // Channel Status Register - AT91_REG DBGU_RHR; // Receiver Holding Register - AT91_REG DBGU_THR; // Transmitter Holding Register - AT91_REG DBGU_BRGR; // Baud Rate Generator Register - AT91_REG Reserved0[7]; // - AT91_REG DBGU_CIDR; // Chip ID Register - AT91_REG DBGU_EXID; // Chip ID Extension Register - AT91_REG DBGU_FNTR; // Force NTRST Register - AT91_REG Reserved1[45]; // - AT91_REG DBGU_RPR; // Receive Pointer Register - AT91_REG DBGU_RCR; // Receive Counter Register - AT91_REG DBGU_TPR; // Transmit Pointer Register - AT91_REG DBGU_TCR; // Transmit Counter Register - AT91_REG DBGU_RNPR; // Receive Next Pointer Register - AT91_REG DBGU_RNCR; // Receive Next Counter Register - AT91_REG DBGU_TNPR; // Transmit Next Pointer Register - AT91_REG DBGU_TNCR; // Transmit Next Counter Register - AT91_REG DBGU_PTCR; // PDC Transfer Control Register - AT91_REG DBGU_PTSR; // PDC Transfer Status Register -} AT91S_DBGU, *AT91PS_DBGU; - -// -------- DBGU_CR : (DBGU Offset: 0x0) Debug Unit Control Register -------- -#define AT91C_US_RSTRX ((unsigned int) 0x1 << 2) // (DBGU) Reset Receiver -#define AT91C_US_RSTTX ((unsigned int) 0x1 << 3) // (DBGU) Reset Transmitter -#define AT91C_US_RXEN ((unsigned int) 0x1 << 4) // (DBGU) Receiver Enable -#define AT91C_US_RXDIS ((unsigned int) 0x1 << 5) // (DBGU) Receiver Disable -#define AT91C_US_TXEN ((unsigned int) 0x1 << 6) // (DBGU) Transmitter Enable -#define AT91C_US_TXDIS ((unsigned int) 0x1 << 7) // (DBGU) Transmitter Disable -#define AT91C_US_RSTSTA ((unsigned int) 0x1 << 8) // (DBGU) Reset Status Bits -// -------- DBGU_MR : (DBGU Offset: 0x4) Debug Unit Mode Register -------- -#define AT91C_US_PAR ((unsigned int) 0x7 << 9) // (DBGU) Parity type -#define AT91C_US_PAR_EVEN ((unsigned int) 0x0 << 9) // (DBGU) Even Parity -#define AT91C_US_PAR_ODD ((unsigned int) 0x1 << 9) // (DBGU) Odd Parity -#define AT91C_US_PAR_SPACE ((unsigned int) 0x2 << 9) // (DBGU) Parity forced to 0 (Space) -#define AT91C_US_PAR_MARK ((unsigned int) 0x3 << 9) // (DBGU) Parity forced to 1 (Mark) -#define AT91C_US_PAR_NONE ((unsigned int) 0x4 << 9) // (DBGU) No Parity -#define AT91C_US_PAR_MULTI_DROP ((unsigned int) 0x6 << 9) // (DBGU) Multi-drop mode -#define AT91C_US_CHMODE ((unsigned int) 0x3 << 14) // (DBGU) Channel Mode -#define AT91C_US_CHMODE_NORMAL ((unsigned int) 0x0 << 14) // (DBGU) Normal Mode: The USART channel operates as an RX/TX USART. -#define AT91C_US_CHMODE_AUTO ((unsigned int) 0x1 << 14) // (DBGU) Automatic Echo: Receiver Data Input is connected to the TXD pin. -#define AT91C_US_CHMODE_LOCAL ((unsigned int) 0x2 << 14) // (DBGU) Local Loopback: Transmitter Output Signal is connected to Receiver Input Signal. -#define AT91C_US_CHMODE_REMOTE ((unsigned int) 0x3 << 14) // (DBGU) Remote Loopback: RXD pin is internally connected to TXD pin. -// -------- DBGU_IER : (DBGU Offset: 0x8) Debug Unit Interrupt Enable Register -------- -#define AT91C_US_RXRDY ((unsigned int) 0x1 << 0) // (DBGU) RXRDY Interrupt -#define AT91C_US_TXRDY ((unsigned int) 0x1 << 1) // (DBGU) TXRDY Interrupt -#define AT91C_US_ENDRX ((unsigned int) 0x1 << 3) // (DBGU) End of Receive Transfer Interrupt -#define AT91C_US_ENDTX ((unsigned int) 0x1 << 4) // (DBGU) End of Transmit Interrupt -#define AT91C_US_OVRE ((unsigned int) 0x1 << 5) // (DBGU) Overrun Interrupt -#define AT91C_US_FRAME ((unsigned int) 0x1 << 6) // (DBGU) Framing Error Interrupt -#define AT91C_US_PARE ((unsigned int) 0x1 << 7) // (DBGU) Parity Error Interrupt -#define AT91C_US_TXEMPTY ((unsigned int) 0x1 << 9) // (DBGU) TXEMPTY Interrupt -#define AT91C_US_TXBUFE ((unsigned int) 0x1 << 11) // (DBGU) TXBUFE Interrupt -#define AT91C_US_RXBUFF ((unsigned int) 0x1 << 12) // (DBGU) RXBUFF Interrupt -#define AT91C_US_COMM_TX ((unsigned int) 0x1 << 30) // (DBGU) COMM_TX Interrupt -#define AT91C_US_COMM_RX ((unsigned int) 0x1 << 31) // (DBGU) COMM_RX Interrupt -// -------- DBGU_IDR : (DBGU Offset: 0xc) Debug Unit Interrupt Disable Register -------- -// -------- DBGU_IMR : (DBGU Offset: 0x10) Debug Unit Interrupt Mask Register -------- -// -------- DBGU_CSR : (DBGU Offset: 0x14) Debug Unit Channel Status Register -------- -// -------- DBGU_FNTR : (DBGU Offset: 0x48) Debug Unit FORCE_NTRST Register -------- -#define AT91C_US_FORCE_NTRST ((unsigned int) 0x1 << 0) // (DBGU) Force NTRST in JTAG - -// ***************************************************************************** -// SOFTWARE API DEFINITION FOR Parallel Input Output Controler -// ***************************************************************************** -typedef struct _AT91S_PIO { - AT91_REG PIO_PER; // PIO Enable Register - AT91_REG PIO_PDR; // PIO Disable Register - AT91_REG PIO_PSR; // PIO Status Register - AT91_REG Reserved0[1]; // - AT91_REG PIO_OER; // Output Enable Register - AT91_REG PIO_ODR; // Output Disable Registerr - AT91_REG PIO_OSR; // Output Status Register - AT91_REG Reserved1[1]; // - AT91_REG PIO_IFER; // Input Filter Enable Register - AT91_REG PIO_IFDR; // Input Filter Disable Register - AT91_REG PIO_IFSR; // Input Filter Status Register - AT91_REG Reserved2[1]; // - AT91_REG PIO_SODR; // Set Output Data Register - AT91_REG PIO_CODR; // Clear Output Data Register - AT91_REG PIO_ODSR; // Output Data Status Register - AT91_REG PIO_PDSR; // Pin Data Status Register - AT91_REG PIO_IER; // Interrupt Enable Register - AT91_REG PIO_IDR; // Interrupt Disable Register - AT91_REG PIO_IMR; // Interrupt Mask Register - AT91_REG PIO_ISR; // Interrupt Status Register - AT91_REG PIO_MDER; // Multi-driver Enable Register - AT91_REG PIO_MDDR; // Multi-driver Disable Register - AT91_REG PIO_MDSR; // Multi-driver Status Register - AT91_REG Reserved3[1]; // - AT91_REG PIO_PPUDR; // Pull-up Disable Register - AT91_REG PIO_PPUER; // Pull-up Enable Register - AT91_REG PIO_PPUSR; // Pull-up Status Register - AT91_REG Reserved4[1]; // - AT91_REG PIO_ASR; // Select A Register - AT91_REG PIO_BSR; // Select B Register - AT91_REG PIO_ABSR; // AB Select Status Register - AT91_REG Reserved5[9]; // - AT91_REG PIO_OWER; // Output Write Enable Register - AT91_REG PIO_OWDR; // Output Write Disable Register - AT91_REG PIO_OWSR; // Output Write Status Register -} AT91S_PIO, *AT91PS_PIO; - - -// ***************************************************************************** -// SOFTWARE API DEFINITION FOR Clock Generator Controler -// ***************************************************************************** -typedef struct _AT91S_CKGR { - AT91_REG CKGR_MOR; // Main Oscillator Register - AT91_REG CKGR_MCFR; // Main Clock Frequency Register - AT91_REG Reserved0[1]; // - AT91_REG CKGR_PLLR; // PLL Register -} AT91S_CKGR, *AT91PS_CKGR; - -// -------- CKGR_MOR : (CKGR Offset: 0x0) Main Oscillator Register -------- -#define AT91C_CKGR_MOSCEN ((unsigned int) 0x1 << 0) // (CKGR) Main Oscillator Enable -#define AT91C_CKGR_OSCBYPASS ((unsigned int) 0x1 << 1) // (CKGR) Main Oscillator Bypass -#define AT91C_CKGR_OSCOUNT ((unsigned int) 0xFF << 8) // (CKGR) Main Oscillator Start-up Time -// -------- CKGR_MCFR : (CKGR Offset: 0x4) Main Clock Frequency Register -------- -#define AT91C_CKGR_MAINF ((unsigned int) 0xFFFF << 0) // (CKGR) Main Clock Frequency -#define AT91C_CKGR_MAINRDY ((unsigned int) 0x1 << 16) // (CKGR) Main Clock Ready -// -------- CKGR_PLLR : (CKGR Offset: 0xc) PLL B Register -------- -#define AT91C_CKGR_DIV ((unsigned int) 0xFF << 0) // (CKGR) Divider Selected -#define AT91C_CKGR_DIV_0 ((unsigned int) 0x0) // (CKGR) Divider output is 0 -#define AT91C_CKGR_DIV_BYPASS ((unsigned int) 0x1) // (CKGR) Divider is bypassed -#define AT91C_CKGR_PLLCOUNT ((unsigned int) 0x3F << 8) // (CKGR) PLL Counter -#define AT91C_CKGR_OUT ((unsigned int) 0x3 << 14) // (CKGR) PLL Output Frequency Range -#define AT91C_CKGR_OUT_0 ((unsigned int) 0x0 << 14) // (CKGR) Please refer to the PLL datasheet -#define AT91C_CKGR_OUT_1 ((unsigned int) 0x1 << 14) // (CKGR) Please refer to the PLL datasheet -#define AT91C_CKGR_OUT_2 ((unsigned int) 0x2 << 14) // (CKGR) Please refer to the PLL datasheet -#define AT91C_CKGR_OUT_3 ((unsigned int) 0x3 << 14) // (CKGR) Please refer to the PLL datasheet -#define AT91C_CKGR_MUL ((unsigned int) 0x7FF << 16) // (CKGR) PLL Multiplier -#define AT91C_CKGR_USBDIV ((unsigned int) 0x3 << 28) // (CKGR) Divider for USB Clocks -#define AT91C_CKGR_USBDIV_0 ((unsigned int) 0x0 << 28) // (CKGR) Divider output is PLL clock output -#define AT91C_CKGR_USBDIV_1 ((unsigned int) 0x1 << 28) // (CKGR) Divider output is PLL clock output divided by 2 -#define AT91C_CKGR_USBDIV_2 ((unsigned int) 0x2 << 28) // (CKGR) Divider output is PLL clock output divided by 4 - -// ***************************************************************************** -// SOFTWARE API DEFINITION FOR Power Management Controler -// ***************************************************************************** -typedef struct _AT91S_PMC { - AT91_REG PMC_SCER; // System Clock Enable Register - AT91_REG PMC_SCDR; // System Clock Disable Register - AT91_REG PMC_SCSR; // System Clock Status Register - AT91_REG Reserved0[1]; // - AT91_REG PMC_PCER; // Peripheral Clock Enable Register - AT91_REG PMC_PCDR; // Peripheral Clock Disable Register - AT91_REG PMC_PCSR; // Peripheral Clock Status Register - AT91_REG Reserved1[1]; // - AT91_REG PMC_MOR; // Main Oscillator Register - AT91_REG PMC_MCFR; // Main Clock Frequency Register - AT91_REG Reserved2[1]; // - AT91_REG PMC_PLLR; // PLL Register - AT91_REG PMC_MCKR; // Master Clock Register - AT91_REG Reserved3[3]; // - AT91_REG PMC_PCKR[4]; // Programmable Clock Register - AT91_REG Reserved4[4]; // - AT91_REG PMC_IER; // Interrupt Enable Register - AT91_REG PMC_IDR; // Interrupt Disable Register - AT91_REG PMC_SR; // Status Register - AT91_REG PMC_IMR; // Interrupt Mask Register -} AT91S_PMC, *AT91PS_PMC; - -// -------- PMC_SCER : (PMC Offset: 0x0) System Clock Enable Register -------- -#define AT91C_PMC_PCK ((unsigned int) 0x1 << 0) // (PMC) Processor Clock -#define AT91C_PMC_UDP ((unsigned int) 0x1 << 7) // (PMC) USB Device Port Clock -#define AT91C_PMC_PCK0 ((unsigned int) 0x1 << 8) // (PMC) Programmable Clock Output -#define AT91C_PMC_PCK1 ((unsigned int) 0x1 << 9) // (PMC) Programmable Clock Output -#define AT91C_PMC_PCK2 ((unsigned int) 0x1 << 10) // (PMC) Programmable Clock Output -#define AT91C_PMC_PCK3 ((unsigned int) 0x1 << 11) // (PMC) Programmable Clock Output -// -------- PMC_SCDR : (PMC Offset: 0x4) System Clock Disable Register -------- -// -------- PMC_SCSR : (PMC Offset: 0x8) System Clock Status Register -------- -// -------- CKGR_MOR : (PMC Offset: 0x20) Main Oscillator Register -------- -// -------- CKGR_MCFR : (PMC Offset: 0x24) Main Clock Frequency Register -------- -// -------- CKGR_PLLR : (PMC Offset: 0x2c) PLL B Register -------- -// -------- PMC_MCKR : (PMC Offset: 0x30) Master Clock Register -------- -#define AT91C_PMC_CSS ((unsigned int) 0x3 << 0) // (PMC) Programmable Clock Selection -#define AT91C_PMC_CSS_SLOW_CLK ((unsigned int) 0x0) // (PMC) Slow Clock is selected -#define AT91C_PMC_CSS_MAIN_CLK ((unsigned int) 0x1) // (PMC) Main Clock is selected -#define AT91C_PMC_CSS_PLL_CLK ((unsigned int) 0x3) // (PMC) Clock from PLL is selected -#define AT91C_PMC_PRES ((unsigned int) 0x7 << 2) // (PMC) Programmable Clock Prescaler -#define AT91C_PMC_PRES_CLK ((unsigned int) 0x0 << 2) // (PMC) Selected clock -#define AT91C_PMC_PRES_CLK_2 ((unsigned int) 0x1 << 2) // (PMC) Selected clock divided by 2 -#define AT91C_PMC_PRES_CLK_4 ((unsigned int) 0x2 << 2) // (PMC) Selected clock divided by 4 -#define AT91C_PMC_PRES_CLK_8 ((unsigned int) 0x3 << 2) // (PMC) Selected clock divided by 8 -#define AT91C_PMC_PRES_CLK_16 ((unsigned int) 0x4 << 2) // (PMC) Selected clock divided by 16 -#define AT91C_PMC_PRES_CLK_32 ((unsigned int) 0x5 << 2) // (PMC) Selected clock divided by 32 -#define AT91C_PMC_PRES_CLK_64 ((unsigned int) 0x6 << 2) // (PMC) Selected clock divided by 64 -// -------- PMC_PCKR : (PMC Offset: 0x40) Programmable Clock Register -------- -// -------- PMC_IER : (PMC Offset: 0x60) PMC Interrupt Enable Register -------- -#define AT91C_PMC_MOSCS ((unsigned int) 0x1 << 0) // (PMC) MOSC Status/Enable/Disable/Mask -#define AT91C_PMC_LOCK ((unsigned int) 0x1 << 2) // (PMC) PLL Status/Enable/Disable/Mask -#define AT91C_PMC_MCKRDY ((unsigned int) 0x1 << 3) // (PMC) MCK_RDY Status/Enable/Disable/Mask -#define AT91C_PMC_PCK0RDY ((unsigned int) 0x1 << 8) // (PMC) PCK0_RDY Status/Enable/Disable/Mask -#define AT91C_PMC_PCK1RDY ((unsigned int) 0x1 << 9) // (PMC) PCK1_RDY Status/Enable/Disable/Mask -#define AT91C_PMC_PCK2RDY ((unsigned int) 0x1 << 10) // (PMC) PCK2_RDY Status/Enable/Disable/Mask -#define AT91C_PMC_PCK3RDY ((unsigned int) 0x1 << 11) // (PMC) PCK3_RDY Status/Enable/Disable/Mask -// -------- PMC_IDR : (PMC Offset: 0x64) PMC Interrupt Disable Register -------- -// -------- PMC_SR : (PMC Offset: 0x68) PMC Status Register -------- -// -------- PMC_IMR : (PMC Offset: 0x6c) PMC Interrupt Mask Register -------- - -// ***************************************************************************** -// SOFTWARE API DEFINITION FOR Reset Controller Interface -// ***************************************************************************** -typedef struct _AT91S_RSTC { - AT91_REG RSTC_RCR; // Reset Control Register - AT91_REG RSTC_RSR; // Reset Status Register - AT91_REG RSTC_RMR; // Reset Mode Register -} AT91S_RSTC, *AT91PS_RSTC; - -// -------- RSTC_RCR : (RSTC Offset: 0x0) Reset Control Register -------- -#define AT91C_RSTC_PROCRST ((unsigned int) 0x1 << 0) // (RSTC) Processor Reset -#define AT91C_RSTC_PERRST ((unsigned int) 0x1 << 2) // (RSTC) Peripheral Reset -#define AT91C_RSTC_EXTRST ((unsigned int) 0x1 << 3) // (RSTC) External Reset -#define AT91C_RSTC_KEY ((unsigned int) 0xFF << 24) // (RSTC) Password -// -------- RSTC_RSR : (RSTC Offset: 0x4) Reset Status Register -------- -#define AT91C_RSTC_URSTS ((unsigned int) 0x1 << 0) // (RSTC) User Reset Status -#define AT91C_RSTC_BODSTS ((unsigned int) 0x1 << 1) // (RSTC) Brownout Detection Status -#define AT91C_RSTC_RSTTYP ((unsigned int) 0x7 << 8) // (RSTC) Reset Type -#define AT91C_RSTC_RSTTYP_POWERUP ((unsigned int) 0x0 << 8) // (RSTC) Power-up Reset. VDDCORE rising. -#define AT91C_RSTC_RSTTYP_WAKEUP ((unsigned int) 0x1 << 8) // (RSTC) WakeUp Reset. VDDCORE rising. -#define AT91C_RSTC_RSTTYP_WATCHDOG ((unsigned int) 0x2 << 8) // (RSTC) Watchdog Reset. Watchdog overflow occured. -#define AT91C_RSTC_RSTTYP_SOFTWARE ((unsigned int) 0x3 << 8) // (RSTC) Software Reset. Processor reset required by the software. -#define AT91C_RSTC_RSTTYP_USER ((unsigned int) 0x4 << 8) // (RSTC) User Reset. NRST pin detected low. -#define AT91C_RSTC_RSTTYP_BROWNOUT ((unsigned int) 0x5 << 8) // (RSTC) Brownout Reset occured. -#define AT91C_RSTC_NRSTL ((unsigned int) 0x1 << 16) // (RSTC) NRST pin level -#define AT91C_RSTC_SRCMP ((unsigned int) 0x1 << 17) // (RSTC) Software Reset Command in Progress. -// -------- RSTC_RMR : (RSTC Offset: 0x8) Reset Mode Register -------- -#define AT91C_RSTC_URSTEN ((unsigned int) 0x1 << 0) // (RSTC) User Reset Enable -#define AT91C_RSTC_URSTIEN ((unsigned int) 0x1 << 4) // (RSTC) User Reset Interrupt Enable -#define AT91C_RSTC_ERSTL ((unsigned int) 0xF << 8) // (RSTC) User Reset Length -#define AT91C_RSTC_BODIEN ((unsigned int) 0x1 << 16) // (RSTC) Brownout Detection Interrupt Enable - -// ***************************************************************************** -// SOFTWARE API DEFINITION FOR Real Time Timer Controller Interface -// ***************************************************************************** -typedef struct _AT91S_RTTC { - AT91_REG RTTC_RTMR; // Real-time Mode Register - AT91_REG RTTC_RTAR; // Real-time Alarm Register - AT91_REG RTTC_RTVR; // Real-time Value Register - AT91_REG RTTC_RTSR; // Real-time Status Register -} AT91S_RTTC, *AT91PS_RTTC; - -// -------- RTTC_RTMR : (RTTC Offset: 0x0) Real-time Mode Register -------- -#define AT91C_RTTC_RTPRES ((unsigned int) 0xFFFF << 0) // (RTTC) Real-time Timer Prescaler Value -#define AT91C_RTTC_ALMIEN ((unsigned int) 0x1 << 16) // (RTTC) Alarm Interrupt Enable -#define AT91C_RTTC_RTTINCIEN ((unsigned int) 0x1 << 17) // (RTTC) Real Time Timer Increment Interrupt Enable -#define AT91C_RTTC_RTTRST ((unsigned int) 0x1 << 18) // (RTTC) Real Time Timer Restart -// -------- RTTC_RTAR : (RTTC Offset: 0x4) Real-time Alarm Register -------- -#define AT91C_RTTC_ALMV ((unsigned int) 0x0 << 0) // (RTTC) Alarm Value -// -------- RTTC_RTVR : (RTTC Offset: 0x8) Current Real-time Value Register -------- -#define AT91C_RTTC_CRTV ((unsigned int) 0x0 << 0) // (RTTC) Current Real-time Value -// -------- RTTC_RTSR : (RTTC Offset: 0xc) Real-time Status Register -------- -#define AT91C_RTTC_ALMS ((unsigned int) 0x1 << 0) // (RTTC) Real-time Alarm Status -#define AT91C_RTTC_RTTINC ((unsigned int) 0x1 << 1) // (RTTC) Real-time Timer Increment - -// ***************************************************************************** -// SOFTWARE API DEFINITION FOR Periodic Interval Timer Controller Interface -// ***************************************************************************** -typedef struct _AT91S_PITC { - AT91_REG PITC_PIMR; // Period Interval Mode Register - AT91_REG PITC_PISR; // Period Interval Status Register - AT91_REG PITC_PIVR; // Period Interval Value Register - AT91_REG PITC_PIIR; // Period Interval Image Register -} AT91S_PITC, *AT91PS_PITC; - -// -------- PITC_PIMR : (PITC Offset: 0x0) Periodic Interval Mode Register -------- -#define AT91C_PITC_PIV ((unsigned int) 0xFFFFF << 0) // (PITC) Periodic Interval Value -#define AT91C_PITC_PITEN ((unsigned int) 0x1 << 24) // (PITC) Periodic Interval Timer Enabled -#define AT91C_PITC_PITIEN ((unsigned int) 0x1 << 25) // (PITC) Periodic Interval Timer Interrupt Enable -// -------- PITC_PISR : (PITC Offset: 0x4) Periodic Interval Status Register -------- -#define AT91C_PITC_PITS ((unsigned int) 0x1 << 0) // (PITC) Periodic Interval Timer Status -// -------- PITC_PIVR : (PITC Offset: 0x8) Periodic Interval Value Register -------- -#define AT91C_PITC_CPIV ((unsigned int) 0xFFFFF << 0) // (PITC) Current Periodic Interval Value -#define AT91C_PITC_PICNT ((unsigned int) 0xFFF << 20) // (PITC) Periodic Interval Counter -// -------- PITC_PIIR : (PITC Offset: 0xc) Periodic Interval Image Register -------- - -// ***************************************************************************** -// SOFTWARE API DEFINITION FOR Watchdog Timer Controller Interface -// ***************************************************************************** -typedef struct _AT91S_WDTC { - AT91_REG WDTC_WDCR; // Watchdog Control Register - AT91_REG WDTC_WDMR; // Watchdog Mode Register - AT91_REG WDTC_WDSR; // Watchdog Status Register -} AT91S_WDTC, *AT91PS_WDTC; - -// -------- WDTC_WDCR : (WDTC Offset: 0x0) Periodic Interval Image Register -------- -#define AT91C_WDTC_WDRSTT ((unsigned int) 0x1 << 0) // (WDTC) Watchdog Restart -#define AT91C_WDTC_KEY ((unsigned int) 0xFF << 24) // (WDTC) Watchdog KEY Password -// -------- WDTC_WDMR : (WDTC Offset: 0x4) Watchdog Mode Register -------- -#define AT91C_WDTC_WDV ((unsigned int) 0xFFF << 0) // (WDTC) Watchdog Timer Restart -#define AT91C_WDTC_WDFIEN ((unsigned int) 0x1 << 12) // (WDTC) Watchdog Fault Interrupt Enable -#define AT91C_WDTC_WDRSTEN ((unsigned int) 0x1 << 13) // (WDTC) Watchdog Reset Enable -#define AT91C_WDTC_WDRPROC ((unsigned int) 0x1 << 14) // (WDTC) Watchdog Timer Restart -#define AT91C_WDTC_WDDIS ((unsigned int) 0x1 << 15) // (WDTC) Watchdog Disable -#define AT91C_WDTC_WDD ((unsigned int) 0xFFF << 16) // (WDTC) Watchdog Delta Value -#define AT91C_WDTC_WDDBGHLT ((unsigned int) 0x1 << 28) // (WDTC) Watchdog Debug Halt -#define AT91C_WDTC_WDIDLEHLT ((unsigned int) 0x1 << 29) // (WDTC) Watchdog Idle Halt -// -------- WDTC_WDSR : (WDTC Offset: 0x8) Watchdog Status Register -------- -#define AT91C_WDTC_WDUNF ((unsigned int) 0x1 << 0) // (WDTC) Watchdog Underflow -#define AT91C_WDTC_WDERR ((unsigned int) 0x1 << 1) // (WDTC) Watchdog Error - -// ***************************************************************************** -// SOFTWARE API DEFINITION FOR Voltage Regulator Mode Controller Interface -// ***************************************************************************** -typedef struct _AT91S_VREG { - AT91_REG VREG_MR; // Voltage Regulator Mode Register -} AT91S_VREG, *AT91PS_VREG; - -// -------- VREG_MR : (VREG Offset: 0x0) Voltage Regulator Mode Register -------- -#define AT91C_VREG_PSTDBY ((unsigned int) 0x1 << 0) // (VREG) Voltage Regulator Power Standby Mode - -// ***************************************************************************** -// SOFTWARE API DEFINITION FOR Memory Controller Interface -// ***************************************************************************** -typedef struct _AT91S_MC { - AT91_REG MC_RCR; // MC Remap Control Register - AT91_REG MC_ASR; // MC Abort Status Register - AT91_REG MC_AASR; // MC Abort Address Status Register - AT91_REG Reserved0[21]; // - AT91_REG MC_FMR; // MC Flash Mode Register - AT91_REG MC_FCR; // MC Flash Command Register - AT91_REG MC_FSR; // MC Flash Status Register -} AT91S_MC, *AT91PS_MC; - -// -------- MC_RCR : (MC Offset: 0x0) MC Remap Control Register -------- -#define AT91C_MC_RCB ((unsigned int) 0x1 << 0) // (MC) Remap Command Bit -// -------- MC_ASR : (MC Offset: 0x4) MC Abort Status Register -------- -#define AT91C_MC_UNDADD ((unsigned int) 0x1 << 0) // (MC) Undefined Addess Abort Status -#define AT91C_MC_MISADD ((unsigned int) 0x1 << 1) // (MC) Misaligned Addess Abort Status -#define AT91C_MC_ABTSZ ((unsigned int) 0x3 << 8) // (MC) Abort Size Status -#define AT91C_MC_ABTSZ_BYTE ((unsigned int) 0x0 << 8) // (MC) Byte -#define AT91C_MC_ABTSZ_HWORD ((unsigned int) 0x1 << 8) // (MC) Half-word -#define AT91C_MC_ABTSZ_WORD ((unsigned int) 0x2 << 8) // (MC) Word -#define AT91C_MC_ABTTYP ((unsigned int) 0x3 << 10) // (MC) Abort Type Status -#define AT91C_MC_ABTTYP_DATAR ((unsigned int) 0x0 << 10) // (MC) Data Read -#define AT91C_MC_ABTTYP_DATAW ((unsigned int) 0x1 << 10) // (MC) Data Write -#define AT91C_MC_ABTTYP_FETCH ((unsigned int) 0x2 << 10) // (MC) Code Fetch -#define AT91C_MC_MST0 ((unsigned int) 0x1 << 16) // (MC) Master 0 Abort Source -#define AT91C_MC_MST1 ((unsigned int) 0x1 << 17) // (MC) Master 1 Abort Source -#define AT91C_MC_SVMST0 ((unsigned int) 0x1 << 24) // (MC) Saved Master 0 Abort Source -#define AT91C_MC_SVMST1 ((unsigned int) 0x1 << 25) // (MC) Saved Master 1 Abort Source -// -------- MC_FMR : (MC Offset: 0x60) MC Flash Mode Register -------- -#define AT91C_MC_FRDY ((unsigned int) 0x1 << 0) // (MC) Flash Ready -#define AT91C_MC_LOCKE ((unsigned int) 0x1 << 2) // (MC) Lock Error -#define AT91C_MC_PROGE ((unsigned int) 0x1 << 3) // (MC) Programming Error -#define AT91C_MC_NEBP ((unsigned int) 0x1 << 7) // (MC) No Erase Before Programming -#define AT91C_MC_FWS ((unsigned int) 0x3 << 8) // (MC) Flash Wait State -#define AT91C_MC_FWS_0FWS ((unsigned int) 0x0 << 8) // (MC) 1 cycle for Read, 2 for Write operations -#define AT91C_MC_FWS_1FWS ((unsigned int) 0x1 << 8) // (MC) 2 cycles for Read, 3 for Write operations -#define AT91C_MC_FWS_2FWS ((unsigned int) 0x2 << 8) // (MC) 3 cycles for Read, 4 for Write operations -#define AT91C_MC_FWS_3FWS ((unsigned int) 0x3 << 8) // (MC) 4 cycles for Read, 4 for Write operations -#define AT91C_MC_FMCN ((unsigned int) 0xFF << 16) // (MC) Flash Microsecond Cycle Number -// -------- MC_FCR : (MC Offset: 0x64) MC Flash Command Register -------- -#define AT91C_MC_FCMD ((unsigned int) 0xF << 0) // (MC) Flash Command -#define AT91C_MC_FCMD_START_PROG ((unsigned int) 0x1) // (MC) Starts the programming of th epage specified by PAGEN. -#define AT91C_MC_FCMD_LOCK ((unsigned int) 0x2) // (MC) Starts a lock sequence of the sector defined by the bits 4 to 7 of the field PAGEN. -#define AT91C_MC_FCMD_PROG_AND_LOCK ((unsigned int) 0x3) // (MC) The lock sequence automatically happens after the programming sequence is completed. -#define AT91C_MC_FCMD_UNLOCK ((unsigned int) 0x4) // (MC) Starts an unlock sequence of the sector defined by the bits 4 to 7 of the field PAGEN. -#define AT91C_MC_FCMD_ERASE_ALL ((unsigned int) 0x8) // (MC) Starts the erase of the entire flash.If at least a page is locked, the command is cancelled. -#define AT91C_MC_FCMD_SET_GP_NVM ((unsigned int) 0xB) // (MC) Set General Purpose NVM bits. -#define AT91C_MC_FCMD_CLR_GP_NVM ((unsigned int) 0xD) // (MC) Clear General Purpose NVM bits. -#define AT91C_MC_FCMD_SET_SECURITY ((unsigned int) 0xF) // (MC) Set Security Bit. -#define AT91C_MC_PAGEN ((unsigned int) 0x3FF << 8) // (MC) Page Number -#define AT91C_MC_KEY ((unsigned int) 0xFF << 24) // (MC) Writing Protect Key -// -------- MC_FSR : (MC Offset: 0x68) MC Flash Command Register -------- -#define AT91C_MC_SECURITY ((unsigned int) 0x1 << 4) // (MC) Security Bit Status -#define AT91C_MC_GPNVM0 ((unsigned int) 0x1 << 8) // (MC) Sector 0 Lock Status -#define AT91C_MC_GPNVM1 ((unsigned int) 0x1 << 9) // (MC) Sector 1 Lock Status -#define AT91C_MC_GPNVM2 ((unsigned int) 0x1 << 10) // (MC) Sector 2 Lock Status -#define AT91C_MC_GPNVM3 ((unsigned int) 0x1 << 11) // (MC) Sector 3 Lock Status -#define AT91C_MC_GPNVM4 ((unsigned int) 0x1 << 12) // (MC) Sector 4 Lock Status -#define AT91C_MC_GPNVM5 ((unsigned int) 0x1 << 13) // (MC) Sector 5 Lock Status -#define AT91C_MC_GPNVM6 ((unsigned int) 0x1 << 14) // (MC) Sector 6 Lock Status -#define AT91C_MC_GPNVM7 ((unsigned int) 0x1 << 15) // (MC) Sector 7 Lock Status -#define AT91C_MC_LOCKS0 ((unsigned int) 0x1 << 16) // (MC) Sector 0 Lock Status -#define AT91C_MC_LOCKS1 ((unsigned int) 0x1 << 17) // (MC) Sector 1 Lock Status -#define AT91C_MC_LOCKS2 ((unsigned int) 0x1 << 18) // (MC) Sector 2 Lock Status -#define AT91C_MC_LOCKS3 ((unsigned int) 0x1 << 19) // (MC) Sector 3 Lock Status -#define AT91C_MC_LOCKS4 ((unsigned int) 0x1 << 20) // (MC) Sector 4 Lock Status -#define AT91C_MC_LOCKS5 ((unsigned int) 0x1 << 21) // (MC) Sector 5 Lock Status -#define AT91C_MC_LOCKS6 ((unsigned int) 0x1 << 22) // (MC) Sector 6 Lock Status -#define AT91C_MC_LOCKS7 ((unsigned int) 0x1 << 23) // (MC) Sector 7 Lock Status -#define AT91C_MC_LOCKS8 ((unsigned int) 0x1 << 24) // (MC) Sector 8 Lock Status -#define AT91C_MC_LOCKS9 ((unsigned int) 0x1 << 25) // (MC) Sector 9 Lock Status -#define AT91C_MC_LOCKS10 ((unsigned int) 0x1 << 26) // (MC) Sector 10 Lock Status -#define AT91C_MC_LOCKS11 ((unsigned int) 0x1 << 27) // (MC) Sector 11 Lock Status -#define AT91C_MC_LOCKS12 ((unsigned int) 0x1 << 28) // (MC) Sector 12 Lock Status -#define AT91C_MC_LOCKS13 ((unsigned int) 0x1 << 29) // (MC) Sector 13 Lock Status -#define AT91C_MC_LOCKS14 ((unsigned int) 0x1 << 30) // (MC) Sector 14 Lock Status -#define AT91C_MC_LOCKS15 ((unsigned int) 0x1 << 31) // (MC) Sector 15 Lock Status - -// ***************************************************************************** -// SOFTWARE API DEFINITION FOR Serial Parallel Interface -// ***************************************************************************** -typedef struct _AT91S_SPI { - AT91_REG SPI_CR; // Control Register - AT91_REG SPI_MR; // Mode Register - AT91_REG SPI_RDR; // Receive Data Register - AT91_REG SPI_TDR; // Transmit Data Register - AT91_REG SPI_SR; // Status Register - AT91_REG SPI_IER; // Interrupt Enable Register - AT91_REG SPI_IDR; // Interrupt Disable Register - AT91_REG SPI_IMR; // Interrupt Mask Register - AT91_REG Reserved0[4]; // - AT91_REG SPI_CSR[4]; // Chip Select Register - AT91_REG Reserved1[48]; // - AT91_REG SPI_RPR; // Receive Pointer Register - AT91_REG SPI_RCR; // Receive Counter Register - AT91_REG SPI_TPR; // Transmit Pointer Register - AT91_REG SPI_TCR; // Transmit Counter Register - AT91_REG SPI_RNPR; // Receive Next Pointer Register - AT91_REG SPI_RNCR; // Receive Next Counter Register - AT91_REG SPI_TNPR; // Transmit Next Pointer Register - AT91_REG SPI_TNCR; // Transmit Next Counter Register - AT91_REG SPI_PTCR; // PDC Transfer Control Register - AT91_REG SPI_PTSR; // PDC Transfer Status Register -} AT91S_SPI, *AT91PS_SPI; - -// -------- SPI_CR : (SPI Offset: 0x0) SPI Control Register -------- -#define AT91C_SPI_SPIEN ((unsigned int) 0x1 << 0) // (SPI) SPI Enable -#define AT91C_SPI_SPIDIS ((unsigned int) 0x1 << 1) // (SPI) SPI Disable -#define AT91C_SPI_SWRST ((unsigned int) 0x1 << 7) // (SPI) SPI Software reset -#define AT91C_SPI_LASTXFER ((unsigned int) 0x1 << 24) // (SPI) SPI Last Transfer -// -------- SPI_MR : (SPI Offset: 0x4) SPI Mode Register -------- -#define AT91C_SPI_MSTR ((unsigned int) 0x1 << 0) // (SPI) Master/Slave Mode -#define AT91C_SPI_PS ((unsigned int) 0x1 << 1) // (SPI) Peripheral Select -#define AT91C_SPI_PS_FIXED ((unsigned int) 0x0 << 1) // (SPI) Fixed Peripheral Select -#define AT91C_SPI_PS_VARIABLE ((unsigned int) 0x1 << 1) // (SPI) Variable Peripheral Select -#define AT91C_SPI_PCSDEC ((unsigned int) 0x1 << 2) // (SPI) Chip Select Decode -#define AT91C_SPI_FDIV ((unsigned int) 0x1 << 3) // (SPI) Clock Selection -#define AT91C_SPI_MODFDIS ((unsigned int) 0x1 << 4) // (SPI) Mode Fault Detection -#define AT91C_SPI_LLB ((unsigned int) 0x1 << 7) // (SPI) Clock Selection -#define AT91C_SPI_PCS ((unsigned int) 0xF << 16) // (SPI) Peripheral Chip Select -#define AT91C_SPI_DLYBCS ((unsigned int) 0xFF << 24) // (SPI) Delay Between Chip Selects -// -------- SPI_RDR : (SPI Offset: 0x8) Receive Data Register -------- -#define AT91C_SPI_RD ((unsigned int) 0xFFFF << 0) // (SPI) Receive Data -#define AT91C_SPI_RPCS ((unsigned int) 0xF << 16) // (SPI) Peripheral Chip Select Status -// -------- SPI_TDR : (SPI Offset: 0xc) Transmit Data Register -------- -#define AT91C_SPI_TD ((unsigned int) 0xFFFF << 0) // (SPI) Transmit Data -#define AT91C_SPI_TPCS ((unsigned int) 0xF << 16) // (SPI) Peripheral Chip Select Status -// -------- SPI_SR : (SPI Offset: 0x10) Status Register -------- -#define AT91C_SPI_RDRF ((unsigned int) 0x1 << 0) // (SPI) Receive Data Register Full -#define AT91C_SPI_TDRE ((unsigned int) 0x1 << 1) // (SPI) Transmit Data Register Empty -#define AT91C_SPI_MODF ((unsigned int) 0x1 << 2) // (SPI) Mode Fault Error -#define AT91C_SPI_OVRES ((unsigned int) 0x1 << 3) // (SPI) Overrun Error Status -#define AT91C_SPI_ENDRX ((unsigned int) 0x1 << 4) // (SPI) End of Receiver Transfer -#define AT91C_SPI_ENDTX ((unsigned int) 0x1 << 5) // (SPI) End of Receiver Transfer -#define AT91C_SPI_RXBUFF ((unsigned int) 0x1 << 6) // (SPI) RXBUFF Interrupt -#define AT91C_SPI_TXBUFE ((unsigned int) 0x1 << 7) // (SPI) TXBUFE Interrupt -#define AT91C_SPI_NSSR ((unsigned int) 0x1 << 8) // (SPI) NSSR Interrupt -#define AT91C_SPI_TXEMPTY ((unsigned int) 0x1 << 9) // (SPI) TXEMPTY Interrupt -#define AT91C_SPI_SPIENS ((unsigned int) 0x1 << 16) // (SPI) Enable Status -// -------- SPI_IER : (SPI Offset: 0x14) Interrupt Enable Register -------- -// -------- SPI_IDR : (SPI Offset: 0x18) Interrupt Disable Register -------- -// -------- SPI_IMR : (SPI Offset: 0x1c) Interrupt Mask Register -------- -// -------- SPI_CSR : (SPI Offset: 0x30) Chip Select Register -------- -#define AT91C_SPI_CPOL ((unsigned int) 0x1 << 0) // (SPI) Clock Polarity -#define AT91C_SPI_NCPHA ((unsigned int) 0x1 << 1) // (SPI) Clock Phase -#define AT91C_SPI_CSAAT ((unsigned int) 0x1 << 3) // (SPI) Chip Select Active After Transfer -#define AT91C_SPI_BITS ((unsigned int) 0xF << 4) // (SPI) Bits Per Transfer -#define AT91C_SPI_BITS_8 ((unsigned int) 0x0 << 4) // (SPI) 8 Bits Per transfer -#define AT91C_SPI_BITS_9 ((unsigned int) 0x1 << 4) // (SPI) 9 Bits Per transfer -#define AT91C_SPI_BITS_10 ((unsigned int) 0x2 << 4) // (SPI) 10 Bits Per transfer -#define AT91C_SPI_BITS_11 ((unsigned int) 0x3 << 4) // (SPI) 11 Bits Per transfer -#define AT91C_SPI_BITS_12 ((unsigned int) 0x4 << 4) // (SPI) 12 Bits Per transfer -#define AT91C_SPI_BITS_13 ((unsigned int) 0x5 << 4) // (SPI) 13 Bits Per transfer -#define AT91C_SPI_BITS_14 ((unsigned int) 0x6 << 4) // (SPI) 14 Bits Per transfer -#define AT91C_SPI_BITS_15 ((unsigned int) 0x7 << 4) // (SPI) 15 Bits Per transfer -#define AT91C_SPI_BITS_16 ((unsigned int) 0x8 << 4) // (SPI) 16 Bits Per transfer -#define AT91C_SPI_SCBR ((unsigned int) 0xFF << 8) // (SPI) Serial Clock Baud Rate -#define AT91C_SPI_DLYBS ((unsigned int) 0xFF << 16) // (SPI) Delay Before SPCK -#define AT91C_SPI_DLYBCT ((unsigned int) 0xFF << 24) // (SPI) Delay Between Consecutive Transfers - -// ***************************************************************************** -// SOFTWARE API DEFINITION FOR Usart -// ***************************************************************************** -typedef struct _AT91S_USART { - AT91_REG US_CR; // Control Register - AT91_REG US_MR; // Mode Register - AT91_REG US_IER; // Interrupt Enable Register - AT91_REG US_IDR; // Interrupt Disable Register - AT91_REG US_IMR; // Interrupt Mask Register - AT91_REG US_CSR; // Channel Status Register - AT91_REG US_RHR; // Receiver Holding Register - AT91_REG US_THR; // Transmitter Holding Register - AT91_REG US_BRGR; // Baud Rate Generator Register - AT91_REG US_RTOR; // Receiver Time-out Register - AT91_REG US_TTGR; // Transmitter Time-guard Register - AT91_REG Reserved0[5]; // - AT91_REG US_FIDI; // FI_DI_Ratio Register - AT91_REG US_NER; // Nb Errors Register - AT91_REG Reserved1[1]; // - AT91_REG US_IF; // IRDA_FILTER Register - AT91_REG Reserved2[44]; // - AT91_REG US_RPR; // Receive Pointer Register - AT91_REG US_RCR; // Receive Counter Register - AT91_REG US_TPR; // Transmit Pointer Register - AT91_REG US_TCR; // Transmit Counter Register - AT91_REG US_RNPR; // Receive Next Pointer Register - AT91_REG US_RNCR; // Receive Next Counter Register - AT91_REG US_TNPR; // Transmit Next Pointer Register - AT91_REG US_TNCR; // Transmit Next Counter Register - AT91_REG US_PTCR; // PDC Transfer Control Register - AT91_REG US_PTSR; // PDC Transfer Status Register -} AT91S_USART, *AT91PS_USART; - -// -------- US_CR : (USART Offset: 0x0) Debug Unit Control Register -------- -#define AT91C_US_STTBRK ((unsigned int) 0x1 << 9) // (USART) Start Break -#define AT91C_US_STPBRK ((unsigned int) 0x1 << 10) // (USART) Stop Break -#define AT91C_US_STTTO ((unsigned int) 0x1 << 11) // (USART) Start Time-out -#define AT91C_US_SENDA ((unsigned int) 0x1 << 12) // (USART) Send Address -#define AT91C_US_RSTIT ((unsigned int) 0x1 << 13) // (USART) Reset Iterations -#define AT91C_US_RSTNACK ((unsigned int) 0x1 << 14) // (USART) Reset Non Acknowledge -#define AT91C_US_RETTO ((unsigned int) 0x1 << 15) // (USART) Rearm Time-out -#define AT91C_US_DTREN ((unsigned int) 0x1 << 16) // (USART) Data Terminal ready Enable -#define AT91C_US_DTRDIS ((unsigned int) 0x1 << 17) // (USART) Data Terminal ready Disable -#define AT91C_US_RTSEN ((unsigned int) 0x1 << 18) // (USART) Request to Send enable -#define AT91C_US_RTSDIS ((unsigned int) 0x1 << 19) // (USART) Request to Send Disable -// -------- US_MR : (USART Offset: 0x4) Debug Unit Mode Register -------- -#define AT91C_US_USMODE ((unsigned int) 0xF << 0) // (USART) Usart mode -#define AT91C_US_USMODE_NORMAL ((unsigned int) 0x0) // (USART) Normal -#define AT91C_US_USMODE_RS485 ((unsigned int) 0x1) // (USART) RS485 -#define AT91C_US_USMODE_HWHSH ((unsigned int) 0x2) // (USART) Hardware Handshaking -#define AT91C_US_USMODE_MODEM ((unsigned int) 0x3) // (USART) Modem -#define AT91C_US_USMODE_ISO7816_0 ((unsigned int) 0x4) // (USART) ISO7816 protocol: T = 0 -#define AT91C_US_USMODE_ISO7816_1 ((unsigned int) 0x6) // (USART) ISO7816 protocol: T = 1 -#define AT91C_US_USMODE_IRDA ((unsigned int) 0x8) // (USART) IrDA -#define AT91C_US_USMODE_SWHSH ((unsigned int) 0xC) // (USART) Software Handshaking -#define AT91C_US_CLKS ((unsigned int) 0x3 << 4) // (USART) Clock Selection (Baud Rate generator Input Clock -#define AT91C_US_CLKS_CLOCK ((unsigned int) 0x0 << 4) // (USART) Clock -#define AT91C_US_CLKS_FDIV1 ((unsigned int) 0x1 << 4) // (USART) fdiv1 -#define AT91C_US_CLKS_SLOW ((unsigned int) 0x2 << 4) // (USART) slow_clock (ARM) -#define AT91C_US_CLKS_EXT ((unsigned int) 0x3 << 4) // (USART) External (SCK) -#define AT91C_US_CHRL ((unsigned int) 0x3 << 6) // (USART) Clock Selection (Baud Rate generator Input Clock -#define AT91C_US_CHRL_5_BITS ((unsigned int) 0x0 << 6) // (USART) Character Length: 5 bits -#define AT91C_US_CHRL_6_BITS ((unsigned int) 0x1 << 6) // (USART) Character Length: 6 bits -#define AT91C_US_CHRL_7_BITS ((unsigned int) 0x2 << 6) // (USART) Character Length: 7 bits -#define AT91C_US_CHRL_8_BITS ((unsigned int) 0x3 << 6) // (USART) Character Length: 8 bits -#define AT91C_US_SYNC ((unsigned int) 0x1 << 8) // (USART) Synchronous Mode Select -#define AT91C_US_NBSTOP ((unsigned int) 0x3 << 12) // (USART) Number of Stop bits -#define AT91C_US_NBSTOP_1_BIT ((unsigned int) 0x0 << 12) // (USART) 1 stop bit -#define AT91C_US_NBSTOP_15_BIT ((unsigned int) 0x1 << 12) // (USART) Asynchronous (SYNC=0) 2 stop bits Synchronous (SYNC=1) 2 stop bits -#define AT91C_US_NBSTOP_2_BIT ((unsigned int) 0x2 << 12) // (USART) 2 stop bits -#define AT91C_US_MSBF ((unsigned int) 0x1 << 16) // (USART) Bit Order -#define AT91C_US_MODE9 ((unsigned int) 0x1 << 17) // (USART) 9-bit Character length -#define AT91C_US_CKLO ((unsigned int) 0x1 << 18) // (USART) Clock Output Select -#define AT91C_US_OVER ((unsigned int) 0x1 << 19) // (USART) Over Sampling Mode -#define AT91C_US_INACK ((unsigned int) 0x1 << 20) // (USART) Inhibit Non Acknowledge -#define AT91C_US_DSNACK ((unsigned int) 0x1 << 21) // (USART) Disable Successive NACK -#define AT91C_US_MAX_ITER ((unsigned int) 0x1 << 24) // (USART) Number of Repetitions -#define AT91C_US_FILTER ((unsigned int) 0x1 << 28) // (USART) Receive Line Filter -// -------- US_IER : (USART Offset: 0x8) Debug Unit Interrupt Enable Register -------- -#define AT91C_US_RXBRK ((unsigned int) 0x1 << 2) // (USART) Break Received/End of Break -#define AT91C_US_TIMEOUT ((unsigned int) 0x1 << 8) // (USART) Receiver Time-out -#define AT91C_US_ITERATION ((unsigned int) 0x1 << 10) // (USART) Max number of Repetitions Reached -#define AT91C_US_NACK ((unsigned int) 0x1 << 13) // (USART) Non Acknowledge -#define AT91C_US_RIIC ((unsigned int) 0x1 << 16) // (USART) Ring INdicator Input Change Flag -#define AT91C_US_DSRIC ((unsigned int) 0x1 << 17) // (USART) Data Set Ready Input Change Flag -#define AT91C_US_DCDIC ((unsigned int) 0x1 << 18) // (USART) Data Carrier Flag -#define AT91C_US_CTSIC ((unsigned int) 0x1 << 19) // (USART) Clear To Send Input Change Flag -// -------- US_IDR : (USART Offset: 0xc) Debug Unit Interrupt Disable Register -------- -// -------- US_IMR : (USART Offset: 0x10) Debug Unit Interrupt Mask Register -------- -// -------- US_CSR : (USART Offset: 0x14) Debug Unit Channel Status Register -------- -#define AT91C_US_RI ((unsigned int) 0x1 << 20) // (USART) Image of RI Input -#define AT91C_US_DSR ((unsigned int) 0x1 << 21) // (USART) Image of DSR Input -#define AT91C_US_DCD ((unsigned int) 0x1 << 22) // (USART) Image of DCD Input -#define AT91C_US_CTS ((unsigned int) 0x1 << 23) // (USART) Image of CTS Input - -// ***************************************************************************** -// SOFTWARE API DEFINITION FOR Synchronous Serial Controller Interface -// ***************************************************************************** -typedef struct _AT91S_SSC { - AT91_REG SSC_CR; // Control Register - AT91_REG SSC_CMR; // Clock Mode Register - AT91_REG Reserved0[2]; // - AT91_REG SSC_RCMR; // Receive Clock ModeRegister - AT91_REG SSC_RFMR; // Receive Frame Mode Register - AT91_REG SSC_TCMR; // Transmit Clock Mode Register - AT91_REG SSC_TFMR; // Transmit Frame Mode Register - AT91_REG SSC_RHR; // Receive Holding Register - AT91_REG SSC_THR; // Transmit Holding Register - AT91_REG Reserved1[2]; // - AT91_REG SSC_RSHR; // Receive Sync Holding Register - AT91_REG SSC_TSHR; // Transmit Sync Holding Register - AT91_REG Reserved2[2]; // - AT91_REG SSC_SR; // Status Register - AT91_REG SSC_IER; // Interrupt Enable Register - AT91_REG SSC_IDR; // Interrupt Disable Register - AT91_REG SSC_IMR; // Interrupt Mask Register - AT91_REG Reserved3[44]; // - AT91_REG SSC_RPR; // Receive Pointer Register - AT91_REG SSC_RCR; // Receive Counter Register - AT91_REG SSC_TPR; // Transmit Pointer Register - AT91_REG SSC_TCR; // Transmit Counter Register - AT91_REG SSC_RNPR; // Receive Next Pointer Register - AT91_REG SSC_RNCR; // Receive Next Counter Register - AT91_REG SSC_TNPR; // Transmit Next Pointer Register - AT91_REG SSC_TNCR; // Transmit Next Counter Register - AT91_REG SSC_PTCR; // PDC Transfer Control Register - AT91_REG SSC_PTSR; // PDC Transfer Status Register -} AT91S_SSC, *AT91PS_SSC; - -// -------- SSC_CR : (SSC Offset: 0x0) SSC Control Register -------- -#define AT91C_SSC_RXEN ((unsigned int) 0x1 << 0) // (SSC) Receive Enable -#define AT91C_SSC_RXDIS ((unsigned int) 0x1 << 1) // (SSC) Receive Disable -#define AT91C_SSC_TXEN ((unsigned int) 0x1 << 8) // (SSC) Transmit Enable -#define AT91C_SSC_TXDIS ((unsigned int) 0x1 << 9) // (SSC) Transmit Disable -#define AT91C_SSC_SWRST ((unsigned int) 0x1 << 15) // (SSC) Software Reset -// -------- SSC_RCMR : (SSC Offset: 0x10) SSC Receive Clock Mode Register -------- -#define AT91C_SSC_CKS ((unsigned int) 0x3 << 0) // (SSC) Receive/Transmit Clock Selection -#define AT91C_SSC_CKS_DIV ((unsigned int) 0x0) // (SSC) Divided Clock -#define AT91C_SSC_CKS_TK ((unsigned int) 0x1) // (SSC) TK Clock signal -#define AT91C_SSC_CKS_RK ((unsigned int) 0x2) // (SSC) RK pin -#define AT91C_SSC_CKO ((unsigned int) 0x7 << 2) // (SSC) Receive/Transmit Clock Output Mode Selection -#define AT91C_SSC_CKO_NONE ((unsigned int) 0x0 << 2) // (SSC) Receive/Transmit Clock Output Mode: None RK pin: Input-only -#define AT91C_SSC_CKO_CONTINOUS ((unsigned int) 0x1 << 2) // (SSC) Continuous Receive/Transmit Clock RK pin: Output -#define AT91C_SSC_CKO_DATA_TX ((unsigned int) 0x2 << 2) // (SSC) Receive/Transmit Clock only during data transfers RK pin: Output -#define AT91C_SSC_CKI ((unsigned int) 0x1 << 5) // (SSC) Receive/Transmit Clock Inversion -#define AT91C_SSC_CKG ((unsigned int) 0x3 << 6) // (SSC) Receive/Transmit Clock Gating Selection -#define AT91C_SSC_CKG_NONE ((unsigned int) 0x0 << 6) // (SSC) Receive/Transmit Clock Gating: None, continuous clock -#define AT91C_SSC_CKG_LOW ((unsigned int) 0x1 << 6) // (SSC) Receive/Transmit Clock enabled only if RF Low -#define AT91C_SSC_CKG_HIGH ((unsigned int) 0x2 << 6) // (SSC) Receive/Transmit Clock enabled only if RF High -#define AT91C_SSC_START ((unsigned int) 0xF << 8) // (SSC) Receive/Transmit Start Selection -#define AT91C_SSC_START_CONTINOUS ((unsigned int) 0x0 << 8) // (SSC) Continuous, as soon as the receiver is enabled, and immediately after the end of transfer of the previous data. -#define AT91C_SSC_START_TX ((unsigned int) 0x1 << 8) // (SSC) Transmit/Receive start -#define AT91C_SSC_START_LOW_RF ((unsigned int) 0x2 << 8) // (SSC) Detection of a low level on RF input -#define AT91C_SSC_START_HIGH_RF ((unsigned int) 0x3 << 8) // (SSC) Detection of a high level on RF input -#define AT91C_SSC_START_FALL_RF ((unsigned int) 0x4 << 8) // (SSC) Detection of a falling edge on RF input -#define AT91C_SSC_START_RISE_RF ((unsigned int) 0x5 << 8) // (SSC) Detection of a rising edge on RF input -#define AT91C_SSC_START_LEVEL_RF ((unsigned int) 0x6 << 8) // (SSC) Detection of any level change on RF input -#define AT91C_SSC_START_EDGE_RF ((unsigned int) 0x7 << 8) // (SSC) Detection of any edge on RF input -#define AT91C_SSC_START_0 ((unsigned int) 0x8 << 8) // (SSC) Compare 0 -#define AT91C_SSC_STOP ((unsigned int) 0x1 << 12) // (SSC) Receive Stop Selection -#define AT91C_SSC_STTDLY ((unsigned int) 0xFF << 16) // (SSC) Receive/Transmit Start Delay -#define AT91C_SSC_PERIOD ((unsigned int) 0xFF << 24) // (SSC) Receive/Transmit Period Divider Selection -// -------- SSC_RFMR : (SSC Offset: 0x14) SSC Receive Frame Mode Register -------- -#define AT91C_SSC_DATLEN ((unsigned int) 0x1F << 0) // (SSC) Data Length -#define AT91C_SSC_LOOP ((unsigned int) 0x1 << 5) // (SSC) Loop Mode -#define AT91C_SSC_MSBF ((unsigned int) 0x1 << 7) // (SSC) Most Significant Bit First -#define AT91C_SSC_DATNB ((unsigned int) 0xF << 8) // (SSC) Data Number per Frame -#define AT91C_SSC_FSLEN ((unsigned int) 0xF << 16) // (SSC) Receive/Transmit Frame Sync length -#define AT91C_SSC_FSOS ((unsigned int) 0x7 << 20) // (SSC) Receive/Transmit Frame Sync Output Selection -#define AT91C_SSC_FSOS_NONE ((unsigned int) 0x0 << 20) // (SSC) Selected Receive/Transmit Frame Sync Signal: None RK pin Input-only -#define AT91C_SSC_FSOS_NEGATIVE ((unsigned int) 0x1 << 20) // (SSC) Selected Receive/Transmit Frame Sync Signal: Negative Pulse -#define AT91C_SSC_FSOS_POSITIVE ((unsigned int) 0x2 << 20) // (SSC) Selected Receive/Transmit Frame Sync Signal: Positive Pulse -#define AT91C_SSC_FSOS_LOW ((unsigned int) 0x3 << 20) // (SSC) Selected Receive/Transmit Frame Sync Signal: Driver Low during data transfer -#define AT91C_SSC_FSOS_HIGH ((unsigned int) 0x4 << 20) // (SSC) Selected Receive/Transmit Frame Sync Signal: Driver High during data transfer -#define AT91C_SSC_FSOS_TOGGLE ((unsigned int) 0x5 << 20) // (SSC) Selected Receive/Transmit Frame Sync Signal: Toggling at each start of data transfer -#define AT91C_SSC_FSEDGE ((unsigned int) 0x1 << 24) // (SSC) Frame Sync Edge Detection -// -------- SSC_TCMR : (SSC Offset: 0x18) SSC Transmit Clock Mode Register -------- -// -------- SSC_TFMR : (SSC Offset: 0x1c) SSC Transmit Frame Mode Register -------- -#define AT91C_SSC_DATDEF ((unsigned int) 0x1 << 5) // (SSC) Data Default Value -#define AT91C_SSC_FSDEN ((unsigned int) 0x1 << 23) // (SSC) Frame Sync Data Enable -// -------- SSC_SR : (SSC Offset: 0x40) SSC Status Register -------- -#define AT91C_SSC_TXRDY ((unsigned int) 0x1 << 0) // (SSC) Transmit Ready -#define AT91C_SSC_TXEMPTY ((unsigned int) 0x1 << 1) // (SSC) Transmit Empty -#define AT91C_SSC_ENDTX ((unsigned int) 0x1 << 2) // (SSC) End Of Transmission -#define AT91C_SSC_TXBUFE ((unsigned int) 0x1 << 3) // (SSC) Transmit Buffer Empty -#define AT91C_SSC_RXRDY ((unsigned int) 0x1 << 4) // (SSC) Receive Ready -#define AT91C_SSC_OVRUN ((unsigned int) 0x1 << 5) // (SSC) Receive Overrun -#define AT91C_SSC_ENDRX ((unsigned int) 0x1 << 6) // (SSC) End of Reception -#define AT91C_SSC_RXBUFF ((unsigned int) 0x1 << 7) // (SSC) Receive Buffer Full -#define AT91C_SSC_CP0 ((unsigned int) 0x1 << 8) // (SSC) Compare 0 -#define AT91C_SSC_CP1 ((unsigned int) 0x1 << 9) // (SSC) Compare 1 -#define AT91C_SSC_TXSYN ((unsigned int) 0x1 << 10) // (SSC) Transmit Sync -#define AT91C_SSC_RXSYN ((unsigned int) 0x1 << 11) // (SSC) Receive Sync -#define AT91C_SSC_TXENA ((unsigned int) 0x1 << 16) // (SSC) Transmit Enable -#define AT91C_SSC_RXENA ((unsigned int) 0x1 << 17) // (SSC) Receive Enable -// -------- SSC_IER : (SSC Offset: 0x44) SSC Interrupt Enable Register -------- -// -------- SSC_IDR : (SSC Offset: 0x48) SSC Interrupt Disable Register -------- -// -------- SSC_IMR : (SSC Offset: 0x4c) SSC Interrupt Mask Register -------- - -// ***************************************************************************** -// SOFTWARE API DEFINITION FOR Two-wire Interface -// ***************************************************************************** -typedef struct _AT91S_TWI { - AT91_REG TWI_CR; // Control Register - AT91_REG TWI_MMR; // Master Mode Register - AT91_REG Reserved0[1]; // - AT91_REG TWI_IADR; // Internal Address Register - AT91_REG TWI_CWGR; // Clock Waveform Generator Register - AT91_REG Reserved1[3]; // - AT91_REG TWI_SR; // Status Register - AT91_REG TWI_IER; // Interrupt Enable Register - AT91_REG TWI_IDR; // Interrupt Disable Register - AT91_REG TWI_IMR; // Interrupt Mask Register - AT91_REG TWI_RHR; // Receive Holding Register - AT91_REG TWI_THR; // Transmit Holding Register -} AT91S_TWI, *AT91PS_TWI; - -// -------- TWI_CR : (TWI Offset: 0x0) TWI Control Register -------- -#define AT91C_TWI_START ((unsigned int) 0x1 << 0) // (TWI) Send a START Condition -#define AT91C_TWI_STOP ((unsigned int) 0x1 << 1) // (TWI) Send a STOP Condition -#define AT91C_TWI_MSEN ((unsigned int) 0x1 << 2) // (TWI) TWI Master Transfer Enabled -#define AT91C_TWI_MSDIS ((unsigned int) 0x1 << 3) // (TWI) TWI Master Transfer Disabled -#define AT91C_TWI_SWRST ((unsigned int) 0x1 << 7) // (TWI) Software Reset -// -------- TWI_MMR : (TWI Offset: 0x4) TWI Master Mode Register -------- -#define AT91C_TWI_IADRSZ ((unsigned int) 0x3 << 8) // (TWI) Internal Device Address Size -#define AT91C_TWI_IADRSZ_NO ((unsigned int) 0x0 << 8) // (TWI) No internal device address -#define AT91C_TWI_IADRSZ_1_BYTE ((unsigned int) 0x1 << 8) // (TWI) One-byte internal device address -#define AT91C_TWI_IADRSZ_2_BYTE ((unsigned int) 0x2 << 8) // (TWI) Two-byte internal device address -#define AT91C_TWI_IADRSZ_3_BYTE ((unsigned int) 0x3 << 8) // (TWI) Three-byte internal device address -#define AT91C_TWI_MREAD ((unsigned int) 0x1 << 12) // (TWI) Master Read Direction -#define AT91C_TWI_DADR ((unsigned int) 0x7F << 16) // (TWI) Device Address -// -------- TWI_CWGR : (TWI Offset: 0x10) TWI Clock Waveform Generator Register -------- -#define AT91C_TWI_CLDIV ((unsigned int) 0xFF << 0) // (TWI) Clock Low Divider -#define AT91C_TWI_CHDIV ((unsigned int) 0xFF << 8) // (TWI) Clock High Divider -#define AT91C_TWI_CKDIV ((unsigned int) 0x7 << 16) // (TWI) Clock Divider -// -------- TWI_SR : (TWI Offset: 0x20) TWI Status Register -------- -#define AT91C_TWI_TXCOMP ((unsigned int) 0x1 << 0) // (TWI) Transmission Completed -#define AT91C_TWI_RXRDY ((unsigned int) 0x1 << 1) // (TWI) Receive holding register ReaDY -#define AT91C_TWI_TXRDY ((unsigned int) 0x1 << 2) // (TWI) Transmit holding register ReaDY -#define AT91C_TWI_OVRE ((unsigned int) 0x1 << 6) // (TWI) Overrun Error -#define AT91C_TWI_UNRE ((unsigned int) 0x1 << 7) // (TWI) Underrun Error -#define AT91C_TWI_NACK ((unsigned int) 0x1 << 8) // (TWI) Not Acknowledged -// -------- TWI_IER : (TWI Offset: 0x24) TWI Interrupt Enable Register -------- -// -------- TWI_IDR : (TWI Offset: 0x28) TWI Interrupt Disable Register -------- -// -------- TWI_IMR : (TWI Offset: 0x2c) TWI Interrupt Mask Register -------- - -// ***************************************************************************** -// SOFTWARE API DEFINITION FOR PWMC Channel Interface -// ***************************************************************************** -typedef struct _AT91S_PWMC_CH { - AT91_REG PWMC_CMR; // Channel Mode Register - AT91_REG PWMC_CDTYR; // Channel Duty Cycle Register - AT91_REG PWMC_CPRDR; // Channel Period Register - AT91_REG PWMC_CCNTR; // Channel Counter Register - AT91_REG PWMC_CUPDR; // Channel Update Register - AT91_REG PWMC_Reserved[3]; // Reserved -} AT91S_PWMC_CH, *AT91PS_PWMC_CH; - -// -------- PWMC_CMR : (PWMC_CH Offset: 0x0) PWMC Channel Mode Register -------- -#define AT91C_PWMC_CPRE ((unsigned int) 0xF << 0) // (PWMC_CH) Channel Pre-scaler : PWMC_CLKx -#define AT91C_PWMC_CPRE_MCK ((unsigned int) 0x0) // (PWMC_CH) -#define AT91C_PWMC_CPRE_MCKA ((unsigned int) 0xB) // (PWMC_CH) -#define AT91C_PWMC_CPRE_MCKB ((unsigned int) 0xC) // (PWMC_CH) -#define AT91C_PWMC_CALG ((unsigned int) 0x1 << 8) // (PWMC_CH) Channel Alignment -#define AT91C_PWMC_CPOL ((unsigned int) 0x1 << 9) // (PWMC_CH) Channel Polarity -#define AT91C_PWMC_CPD ((unsigned int) 0x1 << 10) // (PWMC_CH) Channel Update Period -// -------- PWMC_CDTYR : (PWMC_CH Offset: 0x4) PWMC Channel Duty Cycle Register -------- -#define AT91C_PWMC_CDTY ((unsigned int) 0x0 << 0) // (PWMC_CH) Channel Duty Cycle -// -------- PWMC_CPRDR : (PWMC_CH Offset: 0x8) PWMC Channel Period Register -------- -#define AT91C_PWMC_CPRD ((unsigned int) 0x0 << 0) // (PWMC_CH) Channel Period -// -------- PWMC_CCNTR : (PWMC_CH Offset: 0xc) PWMC Channel Counter Register -------- -#define AT91C_PWMC_CCNT ((unsigned int) 0x0 << 0) // (PWMC_CH) Channel Counter -// -------- PWMC_CUPDR : (PWMC_CH Offset: 0x10) PWMC Channel Update Register -------- -#define AT91C_PWMC_CUPD ((unsigned int) 0x0 << 0) // (PWMC_CH) Channel Update - -// ***************************************************************************** -// SOFTWARE API DEFINITION FOR Pulse Width Modulation Controller Interface -// ***************************************************************************** -typedef struct _AT91S_PWMC { - AT91_REG PWMC_MR; // PWMC Mode Register - AT91_REG PWMC_ENA; // PWMC Enable Register - AT91_REG PWMC_DIS; // PWMC Disable Register - AT91_REG PWMC_SR; // PWMC Status Register - AT91_REG PWMC_IER; // PWMC Interrupt Enable Register - AT91_REG PWMC_IDR; // PWMC Interrupt Disable Register - AT91_REG PWMC_IMR; // PWMC Interrupt Mask Register - AT91_REG PWMC_ISR; // PWMC Interrupt Status Register - AT91_REG Reserved0[55]; // - AT91_REG PWMC_VR; // PWMC Version Register - AT91_REG Reserved1[64]; // - AT91S_PWMC_CH PWMC_CH[4]; // PWMC Channel -} AT91S_PWMC, *AT91PS_PWMC; - -// -------- PWMC_MR : (PWMC Offset: 0x0) PWMC Mode Register -------- -#define AT91C_PWMC_DIVA ((unsigned int) 0xFF << 0) // (PWMC) CLKA divide factor. -#define AT91C_PWMC_PREA ((unsigned int) 0xF << 8) // (PWMC) Divider Input Clock Prescaler A -#define AT91C_PWMC_PREA_MCK ((unsigned int) 0x0 << 8) // (PWMC) -#define AT91C_PWMC_DIVB ((unsigned int) 0xFF << 16) // (PWMC) CLKB divide factor. -#define AT91C_PWMC_PREB ((unsigned int) 0xF << 24) // (PWMC) Divider Input Clock Prescaler B -#define AT91C_PWMC_PREB_MCK ((unsigned int) 0x0 << 24) // (PWMC) -// -------- PWMC_ENA : (PWMC Offset: 0x4) PWMC Enable Register -------- -#define AT91C_PWMC_CHID0 ((unsigned int) 0x1 << 0) // (PWMC) Channel ID 0 -#define AT91C_PWMC_CHID1 ((unsigned int) 0x1 << 1) // (PWMC) Channel ID 1 -#define AT91C_PWMC_CHID2 ((unsigned int) 0x1 << 2) // (PWMC) Channel ID 2 -#define AT91C_PWMC_CHID3 ((unsigned int) 0x1 << 3) // (PWMC) Channel ID 3 -// -------- PWMC_DIS : (PWMC Offset: 0x8) PWMC Disable Register -------- -// -------- PWMC_SR : (PWMC Offset: 0xc) PWMC Status Register -------- -// -------- PWMC_IER : (PWMC Offset: 0x10) PWMC Interrupt Enable Register -------- -// -------- PWMC_IDR : (PWMC Offset: 0x14) PWMC Interrupt Disable Register -------- -// -------- PWMC_IMR : (PWMC Offset: 0x18) PWMC Interrupt Mask Register -------- -// -------- PWMC_ISR : (PWMC Offset: 0x1c) PWMC Interrupt Status Register -------- - -// ***************************************************************************** -// SOFTWARE API DEFINITION FOR USB Device Interface -// ***************************************************************************** -typedef struct _AT91S_UDP { - AT91_REG UDP_NUM; // Frame Number Register - AT91_REG UDP_GLBSTATE; // Global State Register - AT91_REG UDP_FADDR; // Function Address Register - AT91_REG Reserved0[1]; // - AT91_REG UDP_IER; // Interrupt Enable Register - AT91_REG UDP_IDR; // Interrupt Disable Register - AT91_REG UDP_IMR; // Interrupt Mask Register - AT91_REG UDP_ISR; // Interrupt Status Register - AT91_REG UDP_ICR; // Interrupt Clear Register - AT91_REG Reserved1[1]; // - AT91_REG UDP_RSTEP; // Reset Endpoint Register - AT91_REG Reserved2[1]; // - AT91_REG UDP_CSR[6]; // Endpoint Control and Status Register - AT91_REG Reserved3[2]; // - AT91_REG UDP_FDR[6]; // Endpoint FIFO Data Register - AT91_REG Reserved4[3]; // - AT91_REG UDP_TXVC; // Transceiver Control Register -} AT91S_UDP, *AT91PS_UDP; - -// -------- UDP_FRM_NUM : (UDP Offset: 0x0) USB Frame Number Register -------- -#define AT91C_UDP_FRM_NUM ((unsigned int) 0x7FF << 0) // (UDP) Frame Number as Defined in the Packet Field Formats -#define AT91C_UDP_FRM_ERR ((unsigned int) 0x1 << 16) // (UDP) Frame Error -#define AT91C_UDP_FRM_OK ((unsigned int) 0x1 << 17) // (UDP) Frame OK -// -------- UDP_GLB_STATE : (UDP Offset: 0x4) USB Global State Register -------- -#define AT91C_UDP_FADDEN ((unsigned int) 0x1 << 0) // (UDP) Function Address Enable -#define AT91C_UDP_CONFG ((unsigned int) 0x1 << 1) // (UDP) Configured -#define AT91C_UDP_ESR ((unsigned int) 0x1 << 2) // (UDP) Enable Send Resume -#define AT91C_UDP_RSMINPR ((unsigned int) 0x1 << 3) // (UDP) A Resume Has Been Sent to the Host -#define AT91C_UDP_RMWUPE ((unsigned int) 0x1 << 4) // (UDP) Remote Wake Up Enable -// -------- UDP_FADDR : (UDP Offset: 0x8) USB Function Address Register -------- -#define AT91C_UDP_FADD ((unsigned int) 0xFF << 0) // (UDP) Function Address Value -#define AT91C_UDP_FEN ((unsigned int) 0x1 << 8) // (UDP) Function Enable -// -------- UDP_IER : (UDP Offset: 0x10) USB Interrupt Enable Register -------- -#define AT91C_UDP_EPINT0 ((unsigned int) 0x1 << 0) // (UDP) Endpoint 0 Interrupt -#define AT91C_UDP_EPINT1 ((unsigned int) 0x1 << 1) // (UDP) Endpoint 0 Interrupt -#define AT91C_UDP_EPINT2 ((unsigned int) 0x1 << 2) // (UDP) Endpoint 2 Interrupt -#define AT91C_UDP_EPINT3 ((unsigned int) 0x1 << 3) // (UDP) Endpoint 3 Interrupt -#define AT91C_UDP_EPINT4 ((unsigned int) 0x1 << 4) // (UDP) Endpoint 4 Interrupt -#define AT91C_UDP_EPINT5 ((unsigned int) 0x1 << 5) // (UDP) Endpoint 5 Interrupt -#define AT91C_UDP_RXSUSP ((unsigned int) 0x1 << 8) // (UDP) USB Suspend Interrupt -#define AT91C_UDP_RXRSM ((unsigned int) 0x1 << 9) // (UDP) USB Resume Interrupt -#define AT91C_UDP_EXTRSM ((unsigned int) 0x1 << 10) // (UDP) USB External Resume Interrupt -#define AT91C_UDP_SOFINT ((unsigned int) 0x1 << 11) // (UDP) USB Start Of frame Interrupt -#define AT91C_UDP_WAKEUP ((unsigned int) 0x1 << 13) // (UDP) USB Resume Interrupt -// -------- UDP_IDR : (UDP Offset: 0x14) USB Interrupt Disable Register -------- -// -------- UDP_IMR : (UDP Offset: 0x18) USB Interrupt Mask Register -------- -// -------- UDP_ISR : (UDP Offset: 0x1c) USB Interrupt Status Register -------- -#define AT91C_UDP_ENDBUSRES ((unsigned int) 0x1 << 12) // (UDP) USB End Of Bus Reset Interrupt -// -------- UDP_ICR : (UDP Offset: 0x20) USB Interrupt Clear Register -------- -// -------- UDP_RST_EP : (UDP Offset: 0x28) USB Reset Endpoint Register -------- -#define AT91C_UDP_EP0 ((unsigned int) 0x1 << 0) // (UDP) Reset Endpoint 0 -#define AT91C_UDP_EP1 ((unsigned int) 0x1 << 1) // (UDP) Reset Endpoint 1 -#define AT91C_UDP_EP2 ((unsigned int) 0x1 << 2) // (UDP) Reset Endpoint 2 -#define AT91C_UDP_EP3 ((unsigned int) 0x1 << 3) // (UDP) Reset Endpoint 3 -#define AT91C_UDP_EP4 ((unsigned int) 0x1 << 4) // (UDP) Reset Endpoint 4 -#define AT91C_UDP_EP5 ((unsigned int) 0x1 << 5) // (UDP) Reset Endpoint 5 -// -------- UDP_CSR : (UDP Offset: 0x30) USB Endpoint Control and Status Register -------- -#define AT91C_UDP_TXCOMP ((unsigned int) 0x1 << 0) // (UDP) Generates an IN packet with data previously written in the DPR -#define AT91C_UDP_RX_DATA_BK0 ((unsigned int) 0x1 << 1) // (UDP) Receive Data Bank 0 -#define AT91C_UDP_RXSETUP ((unsigned int) 0x1 << 2) // (UDP) Sends STALL to the Host (Control endpoints) -#define AT91C_UDP_ISOERROR ((unsigned int) 0x1 << 3) // (UDP) Isochronous error (Isochronous endpoints) -#define AT91C_UDP_TXPKTRDY ((unsigned int) 0x1 << 4) // (UDP) Transmit Packet Ready -#define AT91C_UDP_FORCESTALL ((unsigned int) 0x1 << 5) // (UDP) Force Stall (used by Control, Bulk and Isochronous endpoints). -#define AT91C_UDP_RX_DATA_BK1 ((unsigned int) 0x1 << 6) // (UDP) Receive Data Bank 1 (only used by endpoints with ping-pong attributes). -#define AT91C_UDP_DIR ((unsigned int) 0x1 << 7) // (UDP) Transfer Direction -#define AT91C_UDP_EPTYPE ((unsigned int) 0x7 << 8) // (UDP) Endpoint type -#define AT91C_UDP_EPTYPE_CTRL ((unsigned int) 0x0 << 8) // (UDP) Control -#define AT91C_UDP_EPTYPE_ISO_OUT ((unsigned int) 0x1 << 8) // (UDP) Isochronous OUT -#define AT91C_UDP_EPTYPE_BULK_OUT ((unsigned int) 0x2 << 8) // (UDP) Bulk OUT -#define AT91C_UDP_EPTYPE_INT_OUT ((unsigned int) 0x3 << 8) // (UDP) Interrupt OUT -#define AT91C_UDP_EPTYPE_ISO_IN ((unsigned int) 0x5 << 8) // (UDP) Isochronous IN -#define AT91C_UDP_EPTYPE_BULK_IN ((unsigned int) 0x6 << 8) // (UDP) Bulk IN -#define AT91C_UDP_EPTYPE_INT_IN ((unsigned int) 0x7 << 8) // (UDP) Interrupt IN -#define AT91C_UDP_DTGLE ((unsigned int) 0x1 << 11) // (UDP) Data Toggle -#define AT91C_UDP_EPEDS ((unsigned int) 0x1 << 15) // (UDP) Endpoint Enable Disable -#define AT91C_UDP_RXBYTECNT ((unsigned int) 0x7FF << 16) // (UDP) Number Of Bytes Available in the FIFO -// -------- UDP_TXVC : (UDP Offset: 0x74) Transceiver Control Register -------- -#define AT91C_UDP_TXVDIS ((unsigned int) 0x1 << 8) // (UDP) -#define AT91C_UDP_PUON ((unsigned int) 0x1 << 9) // (UDP) Pull-up ON - -// ***************************************************************************** -// SOFTWARE API DEFINITION FOR Timer Counter Channel Interface -// ***************************************************************************** -typedef struct _AT91S_TC { - AT91_REG TC_CCR; // Channel Control Register - AT91_REG TC_CMR; // Channel Mode Register (Capture Mode / Waveform Mode) - AT91_REG Reserved0[2]; // - AT91_REG TC_CV; // Counter Value - AT91_REG TC_RA; // Register A - AT91_REG TC_RB; // Register B - AT91_REG TC_RC; // Register C - AT91_REG TC_SR; // Status Register - AT91_REG TC_IER; // Interrupt Enable Register - AT91_REG TC_IDR; // Interrupt Disable Register - AT91_REG TC_IMR; // Interrupt Mask Register -} AT91S_TC, *AT91PS_TC; - -// -------- TC_CCR : (TC Offset: 0x0) TC Channel Control Register -------- -#define AT91C_TC_CLKEN ((unsigned int) 0x1 << 0) // (TC) Counter Clock Enable Command -#define AT91C_TC_CLKDIS ((unsigned int) 0x1 << 1) // (TC) Counter Clock Disable Command -#define AT91C_TC_SWTRG ((unsigned int) 0x1 << 2) // (TC) Software Trigger Command -// -------- TC_CMR : (TC Offset: 0x4) TC Channel Mode Register: Capture Mode / Waveform Mode -------- -#define AT91C_TC_CLKS ((unsigned int) 0x7 << 0) // (TC) Clock Selection -#define AT91C_TC_CLKS_TIMER_DIV1_CLOCK ((unsigned int) 0x0) // (TC) Clock selected: TIMER_DIV1_CLOCK -#define AT91C_TC_CLKS_TIMER_DIV2_CLOCK ((unsigned int) 0x1) // (TC) Clock selected: TIMER_DIV2_CLOCK -#define AT91C_TC_CLKS_TIMER_DIV3_CLOCK ((unsigned int) 0x2) // (TC) Clock selected: TIMER_DIV3_CLOCK -#define AT91C_TC_CLKS_TIMER_DIV4_CLOCK ((unsigned int) 0x3) // (TC) Clock selected: TIMER_DIV4_CLOCK -#define AT91C_TC_CLKS_TIMER_DIV5_CLOCK ((unsigned int) 0x4) // (TC) Clock selected: TIMER_DIV5_CLOCK -#define AT91C_TC_CLKS_XC0 ((unsigned int) 0x5) // (TC) Clock selected: XC0 -#define AT91C_TC_CLKS_XC1 ((unsigned int) 0x6) // (TC) Clock selected: XC1 -#define AT91C_TC_CLKS_XC2 ((unsigned int) 0x7) // (TC) Clock selected: XC2 -#define AT91C_TC_CLKI ((unsigned int) 0x1 << 3) // (TC) Clock Invert -#define AT91C_TC_BURST ((unsigned int) 0x3 << 4) // (TC) Burst Signal Selection -#define AT91C_TC_BURST_NONE ((unsigned int) 0x0 << 4) // (TC) The clock is not gated by an external signal -#define AT91C_TC_BURST_XC0 ((unsigned int) 0x1 << 4) // (TC) XC0 is ANDed with the selected clock -#define AT91C_TC_BURST_XC1 ((unsigned int) 0x2 << 4) // (TC) XC1 is ANDed with the selected clock -#define AT91C_TC_BURST_XC2 ((unsigned int) 0x3 << 4) // (TC) XC2 is ANDed with the selected clock -#define AT91C_TC_CPCSTOP ((unsigned int) 0x1 << 6) // (TC) Counter Clock Stopped with RC Compare -#define AT91C_TC_LDBSTOP ((unsigned int) 0x1 << 6) // (TC) Counter Clock Stopped with RB Loading -#define AT91C_TC_LDBDIS ((unsigned int) 0x1 << 7) // (TC) Counter Clock Disabled with RB Loading -#define AT91C_TC_CPCDIS ((unsigned int) 0x1 << 7) // (TC) Counter Clock Disable with RC Compare -#define AT91C_TC_ETRGEDG ((unsigned int) 0x3 << 8) // (TC) External Trigger Edge Selection -#define AT91C_TC_ETRGEDG_NONE ((unsigned int) 0x0 << 8) // (TC) Edge: None -#define AT91C_TC_ETRGEDG_RISING ((unsigned int) 0x1 << 8) // (TC) Edge: rising edge -#define AT91C_TC_ETRGEDG_FALLING ((unsigned int) 0x2 << 8) // (TC) Edge: falling edge -#define AT91C_TC_ETRGEDG_BOTH ((unsigned int) 0x3 << 8) // (TC) Edge: each edge -#define AT91C_TC_EEVTEDG ((unsigned int) 0x3 << 8) // (TC) External Event Edge Selection -#define AT91C_TC_EEVTEDG_NONE ((unsigned int) 0x0 << 8) // (TC) Edge: None -#define AT91C_TC_EEVTEDG_RISING ((unsigned int) 0x1 << 8) // (TC) Edge: rising edge -#define AT91C_TC_EEVTEDG_FALLING ((unsigned int) 0x2 << 8) // (TC) Edge: falling edge -#define AT91C_TC_EEVTEDG_BOTH ((unsigned int) 0x3 << 8) // (TC) Edge: each edge -#define AT91C_TC_ABETRG ((unsigned int) 0x1 << 10) // (TC) TIOA or TIOB External Trigger Selection -#define AT91C_TC_EEVT ((unsigned int) 0x3 << 10) // (TC) External Event Selection -#define AT91C_TC_EEVT_TIOB ((unsigned int) 0x0 << 10) // (TC) Signal selected as external event: TIOB TIOB direction: input -#define AT91C_TC_EEVT_XC0 ((unsigned int) 0x1 << 10) // (TC) Signal selected as external event: XC0 TIOB direction: output -#define AT91C_TC_EEVT_XC1 ((unsigned int) 0x2 << 10) // (TC) Signal selected as external event: XC1 TIOB direction: output -#define AT91C_TC_EEVT_XC2 ((unsigned int) 0x3 << 10) // (TC) Signal selected as external event: XC2 TIOB direction: output -#define AT91C_TC_ENETRG ((unsigned int) 0x1 << 12) // (TC) External Event Trigger enable -#define AT91C_TC_WAVESEL ((unsigned int) 0x3 << 13) // (TC) Waveform Selection -#define AT91C_TC_WAVESEL_UP ((unsigned int) 0x0 << 13) // (TC) UP mode without atomatic trigger on RC Compare -#define AT91C_TC_WAVESEL_UPDOWN ((unsigned int) 0x1 << 13) // (TC) UPDOWN mode without automatic trigger on RC Compare -#define AT91C_TC_WAVESEL_UP_AUTO ((unsigned int) 0x2 << 13) // (TC) UP mode with automatic trigger on RC Compare -#define AT91C_TC_WAVESEL_UPDOWN_AUTO ((unsigned int) 0x3 << 13) // (TC) UPDOWN mode with automatic trigger on RC Compare -#define AT91C_TC_CPCTRG ((unsigned int) 0x1 << 14) // (TC) RC Compare Trigger Enable -#define AT91C_TC_WAVE ((unsigned int) 0x1 << 15) // (TC) -#define AT91C_TC_LDRA ((unsigned int) 0x3 << 16) // (TC) RA Loading Selection -#define AT91C_TC_LDRA_NONE ((unsigned int) 0x0 << 16) // (TC) Edge: None -#define AT91C_TC_LDRA_RISING ((unsigned int) 0x1 << 16) // (TC) Edge: rising edge of TIOA -#define AT91C_TC_LDRA_FALLING ((unsigned int) 0x2 << 16) // (TC) Edge: falling edge of TIOA -#define AT91C_TC_LDRA_BOTH ((unsigned int) 0x3 << 16) // (TC) Edge: each edge of TIOA -#define AT91C_TC_ACPA ((unsigned int) 0x3 << 16) // (TC) RA Compare Effect on TIOA -#define AT91C_TC_ACPA_NONE ((unsigned int) 0x0 << 16) // (TC) Effect: none -#define AT91C_TC_ACPA_SET ((unsigned int) 0x1 << 16) // (TC) Effect: set -#define AT91C_TC_ACPA_CLEAR ((unsigned int) 0x2 << 16) // (TC) Effect: clear -#define AT91C_TC_ACPA_TOGGLE ((unsigned int) 0x3 << 16) // (TC) Effect: toggle -#define AT91C_TC_LDRB ((unsigned int) 0x3 << 18) // (TC) RB Loading Selection -#define AT91C_TC_LDRB_NONE ((unsigned int) 0x0 << 18) // (TC) Edge: None -#define AT91C_TC_LDRB_RISING ((unsigned int) 0x1 << 18) // (TC) Edge: rising edge of TIOA -#define AT91C_TC_LDRB_FALLING ((unsigned int) 0x2 << 18) // (TC) Edge: falling edge of TIOA -#define AT91C_TC_LDRB_BOTH ((unsigned int) 0x3 << 18) // (TC) Edge: each edge of TIOA -#define AT91C_TC_ACPC ((unsigned int) 0x3 << 18) // (TC) RC Compare Effect on TIOA -#define AT91C_TC_ACPC_NONE ((unsigned int) 0x0 << 18) // (TC) Effect: none -#define AT91C_TC_ACPC_SET ((unsigned int) 0x1 << 18) // (TC) Effect: set -#define AT91C_TC_ACPC_CLEAR ((unsigned int) 0x2 << 18) // (TC) Effect: clear -#define AT91C_TC_ACPC_TOGGLE ((unsigned int) 0x3 << 18) // (TC) Effect: toggle -#define AT91C_TC_AEEVT ((unsigned int) 0x3 << 20) // (TC) External Event Effect on TIOA -#define AT91C_TC_AEEVT_NONE ((unsigned int) 0x0 << 20) // (TC) Effect: none -#define AT91C_TC_AEEVT_SET ((unsigned int) 0x1 << 20) // (TC) Effect: set -#define AT91C_TC_AEEVT_CLEAR ((unsigned int) 0x2 << 20) // (TC) Effect: clear -#define AT91C_TC_AEEVT_TOGGLE ((unsigned int) 0x3 << 20) // (TC) Effect: toggle -#define AT91C_TC_ASWTRG ((unsigned int) 0x3 << 22) // (TC) Software Trigger Effect on TIOA -#define AT91C_TC_ASWTRG_NONE ((unsigned int) 0x0 << 22) // (TC) Effect: none -#define AT91C_TC_ASWTRG_SET ((unsigned int) 0x1 << 22) // (TC) Effect: set -#define AT91C_TC_ASWTRG_CLEAR ((unsigned int) 0x2 << 22) // (TC) Effect: clear -#define AT91C_TC_ASWTRG_TOGGLE ((unsigned int) 0x3 << 22) // (TC) Effect: toggle -#define AT91C_TC_BCPB ((unsigned int) 0x3 << 24) // (TC) RB Compare Effect on TIOB -#define AT91C_TC_BCPB_NONE ((unsigned int) 0x0 << 24) // (TC) Effect: none -#define AT91C_TC_BCPB_SET ((unsigned int) 0x1 << 24) // (TC) Effect: set -#define AT91C_TC_BCPB_CLEAR ((unsigned int) 0x2 << 24) // (TC) Effect: clear -#define AT91C_TC_BCPB_TOGGLE ((unsigned int) 0x3 << 24) // (TC) Effect: toggle -#define AT91C_TC_BCPC ((unsigned int) 0x3 << 26) // (TC) RC Compare Effect on TIOB -#define AT91C_TC_BCPC_NONE ((unsigned int) 0x0 << 26) // (TC) Effect: none -#define AT91C_TC_BCPC_SET ((unsigned int) 0x1 << 26) // (TC) Effect: set -#define AT91C_TC_BCPC_CLEAR ((unsigned int) 0x2 << 26) // (TC) Effect: clear -#define AT91C_TC_BCPC_TOGGLE ((unsigned int) 0x3 << 26) // (TC) Effect: toggle -#define AT91C_TC_BEEVT ((unsigned int) 0x3 << 28) // (TC) External Event Effect on TIOB -#define AT91C_TC_BEEVT_NONE ((unsigned int) 0x0 << 28) // (TC) Effect: none -#define AT91C_TC_BEEVT_SET ((unsigned int) 0x1 << 28) // (TC) Effect: set -#define AT91C_TC_BEEVT_CLEAR ((unsigned int) 0x2 << 28) // (TC) Effect: clear -#define AT91C_TC_BEEVT_TOGGLE ((unsigned int) 0x3 << 28) // (TC) Effect: toggle -#define AT91C_TC_BSWTRG ((unsigned int) 0x3 << 30) // (TC) Software Trigger Effect on TIOB -#define AT91C_TC_BSWTRG_NONE ((unsigned int) 0x0 << 30) // (TC) Effect: none -#define AT91C_TC_BSWTRG_SET ((unsigned int) 0x1 << 30) // (TC) Effect: set -#define AT91C_TC_BSWTRG_CLEAR ((unsigned int) 0x2 << 30) // (TC) Effect: clear -#define AT91C_TC_BSWTRG_TOGGLE ((unsigned int) 0x3 << 30) // (TC) Effect: toggle -// -------- TC_SR : (TC Offset: 0x20) TC Channel Status Register -------- -#define AT91C_TC_COVFS ((unsigned int) 0x1 << 0) // (TC) Counter Overflow -#define AT91C_TC_LOVRS ((unsigned int) 0x1 << 1) // (TC) Load Overrun -#define AT91C_TC_CPAS ((unsigned int) 0x1 << 2) // (TC) RA Compare -#define AT91C_TC_CPBS ((unsigned int) 0x1 << 3) // (TC) RB Compare -#define AT91C_TC_CPCS ((unsigned int) 0x1 << 4) // (TC) RC Compare -#define AT91C_TC_LDRAS ((unsigned int) 0x1 << 5) // (TC) RA Loading -#define AT91C_TC_LDRBS ((unsigned int) 0x1 << 6) // (TC) RB Loading -#define AT91C_TC_ETRGS ((unsigned int) 0x1 << 7) // (TC) External Trigger -#define AT91C_TC_CLKSTA ((unsigned int) 0x1 << 16) // (TC) Clock Enabling -#define AT91C_TC_MTIOA ((unsigned int) 0x1 << 17) // (TC) TIOA Mirror -#define AT91C_TC_MTIOB ((unsigned int) 0x1 << 18) // (TC) TIOA Mirror -// -------- TC_IER : (TC Offset: 0x24) TC Channel Interrupt Enable Register -------- -// -------- TC_IDR : (TC Offset: 0x28) TC Channel Interrupt Disable Register -------- -// -------- TC_IMR : (TC Offset: 0x2c) TC Channel Interrupt Mask Register -------- - -// ***************************************************************************** -// SOFTWARE API DEFINITION FOR Timer Counter Interface -// ***************************************************************************** -typedef struct _AT91S_TCB { - AT91S_TC TCB_TC0; // TC Channel 0 - AT91_REG Reserved0[4]; // - AT91S_TC TCB_TC1; // TC Channel 1 - AT91_REG Reserved1[4]; // - AT91S_TC TCB_TC2; // TC Channel 2 - AT91_REG Reserved2[4]; // - AT91_REG TCB_BCR; // TC Block Control Register - AT91_REG TCB_BMR; // TC Block Mode Register -} AT91S_TCB, *AT91PS_TCB; - -// -------- TCB_BCR : (TCB Offset: 0xc0) TC Block Control Register -------- -#define AT91C_TCB_SYNC ((unsigned int) 0x1 << 0) // (TCB) Synchro Command -// -------- TCB_BMR : (TCB Offset: 0xc4) TC Block Mode Register -------- -#define AT91C_TCB_TC0XC0S ((unsigned int) 0x3 << 0) // (TCB) External Clock Signal 0 Selection -#define AT91C_TCB_TC0XC0S_TCLK0 ((unsigned int) 0x0) // (TCB) TCLK0 connected to XC0 -#define AT91C_TCB_TC0XC0S_NONE ((unsigned int) 0x1) // (TCB) None signal connected to XC0 -#define AT91C_TCB_TC0XC0S_TIOA1 ((unsigned int) 0x2) // (TCB) TIOA1 connected to XC0 -#define AT91C_TCB_TC0XC0S_TIOA2 ((unsigned int) 0x3) // (TCB) TIOA2 connected to XC0 -#define AT91C_TCB_TC1XC1S ((unsigned int) 0x3 << 2) // (TCB) External Clock Signal 1 Selection -#define AT91C_TCB_TC1XC1S_TCLK1 ((unsigned int) 0x0 << 2) // (TCB) TCLK1 connected to XC1 -#define AT91C_TCB_TC1XC1S_NONE ((unsigned int) 0x1 << 2) // (TCB) None signal connected to XC1 -#define AT91C_TCB_TC1XC1S_TIOA0 ((unsigned int) 0x2 << 2) // (TCB) TIOA0 connected to XC1 -#define AT91C_TCB_TC1XC1S_TIOA2 ((unsigned int) 0x3 << 2) // (TCB) TIOA2 connected to XC1 -#define AT91C_TCB_TC2XC2S ((unsigned int) 0x3 << 4) // (TCB) External Clock Signal 2 Selection -#define AT91C_TCB_TC2XC2S_TCLK2 ((unsigned int) 0x0 << 4) // (TCB) TCLK2 connected to XC2 -#define AT91C_TCB_TC2XC2S_NONE ((unsigned int) 0x1 << 4) // (TCB) None signal connected to XC2 -#define AT91C_TCB_TC2XC2S_TIOA0 ((unsigned int) 0x2 << 4) // (TCB) TIOA0 connected to XC2 -#define AT91C_TCB_TC2XC2S_TIOA1 ((unsigned int) 0x3 << 4) // (TCB) TIOA2 connected to XC2 - -// ***************************************************************************** -// SOFTWARE API DEFINITION FOR Control Area Network MailBox Interface -// ***************************************************************************** -typedef struct _AT91S_CAN_MB { - AT91_REG CAN_MB_MMR; // MailBox Mode Register - AT91_REG CAN_MB_MAM; // MailBox Acceptance Mask Register - AT91_REG CAN_MB_MID; // MailBox ID Register - AT91_REG CAN_MB_MFID; // MailBox Family ID Register - AT91_REG CAN_MB_MSR; // MailBox Status Register - AT91_REG CAN_MB_MDL; // MailBox Data Low Register - AT91_REG CAN_MB_MDH; // MailBox Data High Register - AT91_REG CAN_MB_MCR; // MailBox Control Register -} AT91S_CAN_MB, *AT91PS_CAN_MB; - -// -------- CAN_MMR : (CAN_MB Offset: 0x0) CAN Message Mode Register -------- -#define AT91C_CAN_MTIMEMARK ((unsigned int) 0xFFFF << 0) // (CAN_MB) Mailbox Timemark -#define AT91C_CAN_PRIOR ((unsigned int) 0xF << 16) // (CAN_MB) Mailbox Priority -#define AT91C_CAN_MOT ((unsigned int) 0x7 << 24) // (CAN_MB) Mailbox Object Type -#define AT91C_CAN_MOT_DIS ((unsigned int) 0x0 << 24) // (CAN_MB) -#define AT91C_CAN_MOT_RX ((unsigned int) 0x1 << 24) // (CAN_MB) -#define AT91C_CAN_MOT_RXOVERWRITE ((unsigned int) 0x2 << 24) // (CAN_MB) -#define AT91C_CAN_MOT_TX ((unsigned int) 0x3 << 24) // (CAN_MB) -#define AT91C_CAN_MOT_CONSUMER ((unsigned int) 0x4 << 24) // (CAN_MB) -#define AT91C_CAN_MOT_PRODUCER ((unsigned int) 0x5 << 24) // (CAN_MB) -// -------- CAN_MAM : (CAN_MB Offset: 0x4) CAN Message Acceptance Mask Register -------- -#define AT91C_CAN_MIDvB ((unsigned int) 0x3FFFF << 0) // (CAN_MB) Complementary bits for identifier in extended mode -#define AT91C_CAN_MIDvA ((unsigned int) 0x7FF << 18) // (CAN_MB) Identifier for standard frame mode -#define AT91C_CAN_MIDE ((unsigned int) 0x1 << 29) // (CAN_MB) Identifier Version -// -------- CAN_MID : (CAN_MB Offset: 0x8) CAN Message ID Register -------- -// -------- CAN_MFID : (CAN_MB Offset: 0xc) CAN Message Family ID Register -------- -// -------- CAN_MSR : (CAN_MB Offset: 0x10) CAN Message Status Register -------- -#define AT91C_CAN_MTIMESTAMP ((unsigned int) 0xFFFF << 0) // (CAN_MB) Timer Value -#define AT91C_CAN_MDLC ((unsigned int) 0xF << 16) // (CAN_MB) Mailbox Data Length Code -#define AT91C_CAN_MRTR ((unsigned int) 0x1 << 20) // (CAN_MB) Mailbox Remote Transmission Request -#define AT91C_CAN_MABT ((unsigned int) 0x1 << 22) // (CAN_MB) Mailbox Message Abort -#define AT91C_CAN_MRDY ((unsigned int) 0x1 << 23) // (CAN_MB) Mailbox Ready -#define AT91C_CAN_MMI ((unsigned int) 0x1 << 24) // (CAN_MB) Mailbox Message Ignored -// -------- CAN_MDL : (CAN_MB Offset: 0x14) CAN Message Data Low Register -------- -// -------- CAN_MDH : (CAN_MB Offset: 0x18) CAN Message Data High Register -------- -// -------- CAN_MCR : (CAN_MB Offset: 0x1c) CAN Message Control Register -------- -#define AT91C_CAN_MACR ((unsigned int) 0x1 << 22) // (CAN_MB) Abort Request for Mailbox -#define AT91C_CAN_MTCR ((unsigned int) 0x1 << 23) // (CAN_MB) Mailbox Transfer Command - -// ***************************************************************************** -// SOFTWARE API DEFINITION FOR Control Area Network Interface -// ***************************************************************************** -typedef struct _AT91S_CAN { - AT91_REG CAN_MR; // Mode Register - AT91_REG CAN_IER; // Interrupt Enable Register - AT91_REG CAN_IDR; // Interrupt Disable Register - AT91_REG CAN_IMR; // Interrupt Mask Register - AT91_REG CAN_SR; // Status Register - AT91_REG CAN_BR; // Baudrate Register - AT91_REG CAN_TIM; // Timer Register - AT91_REG CAN_TIMESTP; // Time Stamp Register - AT91_REG CAN_ECR; // Error Counter Register - AT91_REG CAN_TCR; // Transfer Command Register - AT91_REG CAN_ACR; // Abort Command Register - AT91_REG Reserved0[52]; // - AT91_REG CAN_VR; // Version Register - AT91_REG Reserved1[64]; // - AT91S_CAN_MB CAN_MB0; // CAN Mailbox 0 - AT91S_CAN_MB CAN_MB1; // CAN Mailbox 1 - AT91S_CAN_MB CAN_MB2; // CAN Mailbox 2 - AT91S_CAN_MB CAN_MB3; // CAN Mailbox 3 - AT91S_CAN_MB CAN_MB4; // CAN Mailbox 4 - AT91S_CAN_MB CAN_MB5; // CAN Mailbox 5 - AT91S_CAN_MB CAN_MB6; // CAN Mailbox 6 - AT91S_CAN_MB CAN_MB7; // CAN Mailbox 7 - AT91S_CAN_MB CAN_MB8; // CAN Mailbox 8 - AT91S_CAN_MB CAN_MB9; // CAN Mailbox 9 - AT91S_CAN_MB CAN_MB10; // CAN Mailbox 10 - AT91S_CAN_MB CAN_MB11; // CAN Mailbox 11 - AT91S_CAN_MB CAN_MB12; // CAN Mailbox 12 - AT91S_CAN_MB CAN_MB13; // CAN Mailbox 13 - AT91S_CAN_MB CAN_MB14; // CAN Mailbox 14 - AT91S_CAN_MB CAN_MB15; // CAN Mailbox 15 -} AT91S_CAN, *AT91PS_CAN; - -// -------- CAN_MR : (CAN Offset: 0x0) CAN Mode Register -------- -#define AT91C_CAN_CANEN ((unsigned int) 0x1 << 0) // (CAN) CAN Controller Enable -#define AT91C_CAN_LPM ((unsigned int) 0x1 << 1) // (CAN) Disable/Enable Low Power Mode -#define AT91C_CAN_ABM ((unsigned int) 0x1 << 2) // (CAN) Disable/Enable Autobaud/Listen Mode -#define AT91C_CAN_OVL ((unsigned int) 0x1 << 3) // (CAN) Disable/Enable Overload Frame -#define AT91C_CAN_TEOF ((unsigned int) 0x1 << 4) // (CAN) Time Stamp messages at each end of Frame -#define AT91C_CAN_TTM ((unsigned int) 0x1 << 5) // (CAN) Disable/Enable Time Trigger Mode -#define AT91C_CAN_TIMFRZ ((unsigned int) 0x1 << 6) // (CAN) Enable Timer Freeze -#define AT91C_CAN_DRPT ((unsigned int) 0x1 << 7) // (CAN) Disable Repeat -// -------- CAN_IER : (CAN Offset: 0x4) CAN Interrupt Enable Register -------- -#define AT91C_CAN_MB0 ((unsigned int) 0x1 << 0) // (CAN) Mailbox 0 Flag -#define AT91C_CAN_MB1 ((unsigned int) 0x1 << 1) // (CAN) Mailbox 1 Flag -#define AT91C_CAN_MB2 ((unsigned int) 0x1 << 2) // (CAN) Mailbox 2 Flag -#define AT91C_CAN_MB3 ((unsigned int) 0x1 << 3) // (CAN) Mailbox 3 Flag -#define AT91C_CAN_MB4 ((unsigned int) 0x1 << 4) // (CAN) Mailbox 4 Flag -#define AT91C_CAN_MB5 ((unsigned int) 0x1 << 5) // (CAN) Mailbox 5 Flag -#define AT91C_CAN_MB6 ((unsigned int) 0x1 << 6) // (CAN) Mailbox 6 Flag -#define AT91C_CAN_MB7 ((unsigned int) 0x1 << 7) // (CAN) Mailbox 7 Flag -#define AT91C_CAN_MB8 ((unsigned int) 0x1 << 8) // (CAN) Mailbox 8 Flag -#define AT91C_CAN_MB9 ((unsigned int) 0x1 << 9) // (CAN) Mailbox 9 Flag -#define AT91C_CAN_MB10 ((unsigned int) 0x1 << 10) // (CAN) Mailbox 10 Flag -#define AT91C_CAN_MB11 ((unsigned int) 0x1 << 11) // (CAN) Mailbox 11 Flag -#define AT91C_CAN_MB12 ((unsigned int) 0x1 << 12) // (CAN) Mailbox 12 Flag -#define AT91C_CAN_MB13 ((unsigned int) 0x1 << 13) // (CAN) Mailbox 13 Flag -#define AT91C_CAN_MB14 ((unsigned int) 0x1 << 14) // (CAN) Mailbox 14 Flag -#define AT91C_CAN_MB15 ((unsigned int) 0x1 << 15) // (CAN) Mailbox 15 Flag -#define AT91C_CAN_ERRA ((unsigned int) 0x1 << 16) // (CAN) Error Active Mode Flag -#define AT91C_CAN_WARN ((unsigned int) 0x1 << 17) // (CAN) Warning Limit Flag -#define AT91C_CAN_ERRP ((unsigned int) 0x1 << 18) // (CAN) Error Passive Mode Flag -#define AT91C_CAN_BOFF ((unsigned int) 0x1 << 19) // (CAN) Bus Off Mode Flag -#define AT91C_CAN_SLEEP ((unsigned int) 0x1 << 20) // (CAN) Sleep Flag -#define AT91C_CAN_WAKEUP ((unsigned int) 0x1 << 21) // (CAN) Wakeup Flag -#define AT91C_CAN_TOVF ((unsigned int) 0x1 << 22) // (CAN) Timer Overflow Flag -#define AT91C_CAN_TSTP ((unsigned int) 0x1 << 23) // (CAN) Timestamp Flag -#define AT91C_CAN_CERR ((unsigned int) 0x1 << 24) // (CAN) CRC Error -#define AT91C_CAN_SERR ((unsigned int) 0x1 << 25) // (CAN) Stuffing Error -#define AT91C_CAN_AERR ((unsigned int) 0x1 << 26) // (CAN) Acknowledgment Error -#define AT91C_CAN_FERR ((unsigned int) 0x1 << 27) // (CAN) Form Error -#define AT91C_CAN_BERR ((unsigned int) 0x1 << 28) // (CAN) Bit Error -// -------- CAN_IDR : (CAN Offset: 0x8) CAN Interrupt Disable Register -------- -// -------- CAN_IMR : (CAN Offset: 0xc) CAN Interrupt Mask Register -------- -// -------- CAN_SR : (CAN Offset: 0x10) CAN Status Register -------- -#define AT91C_CAN_RBSY ((unsigned int) 0x1 << 29) // (CAN) Receiver Busy -#define AT91C_CAN_TBSY ((unsigned int) 0x1 << 30) // (CAN) Transmitter Busy -#define AT91C_CAN_OVLY ((unsigned int) 0x1 << 31) // (CAN) Overload Busy -// -------- CAN_BR : (CAN Offset: 0x14) CAN Baudrate Register -------- -#define AT91C_CAN_PHASE2 ((unsigned int) 0x7 << 0) // (CAN) Phase 2 segment -#define AT91C_CAN_PHASE1 ((unsigned int) 0x7 << 4) // (CAN) Phase 1 segment -#define AT91C_CAN_PROPAG ((unsigned int) 0x7 << 8) // (CAN) Programmation time segment -#define AT91C_CAN_SYNC ((unsigned int) 0x3 << 12) // (CAN) Re-synchronization jump width segment -#define AT91C_CAN_BRP ((unsigned int) 0x7F << 16) // (CAN) Baudrate Prescaler -#define AT91C_CAN_SMP ((unsigned int) 0x1 << 24) // (CAN) Sampling mode -// -------- CAN_TIM : (CAN Offset: 0x18) CAN Timer Register -------- -#define AT91C_CAN_TIMER ((unsigned int) 0xFFFF << 0) // (CAN) Timer field -// -------- CAN_TIMESTP : (CAN Offset: 0x1c) CAN Timestamp Register -------- -// -------- CAN_ECR : (CAN Offset: 0x20) CAN Error Counter Register -------- -#define AT91C_CAN_REC ((unsigned int) 0xFF << 0) // (CAN) Receive Error Counter -#define AT91C_CAN_TEC ((unsigned int) 0xFF << 16) // (CAN) Transmit Error Counter -// -------- CAN_TCR : (CAN Offset: 0x24) CAN Transfer Command Register -------- -#define AT91C_CAN_TIMRST ((unsigned int) 0x1 << 31) // (CAN) Timer Reset Field -// -------- CAN_ACR : (CAN Offset: 0x28) CAN Abort Command Register -------- - -// ***************************************************************************** -// SOFTWARE API DEFINITION FOR Ethernet MAC 10/100 -// ***************************************************************************** -typedef struct _AT91S_EMAC { - AT91_REG EMAC_NCR; // Network Control Register - AT91_REG EMAC_NCFGR; // Network Configuration Register - AT91_REG EMAC_NSR; // Network Status Register - AT91_REG Reserved0[2]; // - AT91_REG EMAC_TSR; // Transmit Status Register - AT91_REG EMAC_RBQP; // Receive Buffer Queue Pointer - AT91_REG EMAC_TBQP; // Transmit Buffer Queue Pointer - AT91_REG EMAC_RSR; // Receive Status Register - AT91_REG EMAC_ISR; // Interrupt Status Register - AT91_REG EMAC_IER; // Interrupt Enable Register - AT91_REG EMAC_IDR; // Interrupt Disable Register - AT91_REG EMAC_IMR; // Interrupt Mask Register - AT91_REG EMAC_MAN; // PHY Maintenance Register - AT91_REG EMAC_PTR; // Pause Time Register - AT91_REG EMAC_PFR; // Pause Frames received Register - AT91_REG EMAC_FTO; // Frames Transmitted OK Register - AT91_REG EMAC_SCF; // Single Collision Frame Register - AT91_REG EMAC_MCF; // Multiple Collision Frame Register - AT91_REG EMAC_FRO; // Frames Received OK Register - AT91_REG EMAC_FCSE; // Frame Check Sequence Error Register - AT91_REG EMAC_ALE; // Alignment Error Register - AT91_REG EMAC_DTF; // Deferred Transmission Frame Register - AT91_REG EMAC_LCOL; // Late Collision Register - AT91_REG EMAC_ECOL; // Excessive Collision Register - AT91_REG EMAC_TUND; // Transmit Underrun Error Register - AT91_REG EMAC_CSE; // Carrier Sense Error Register - AT91_REG EMAC_RRE; // Receive Ressource Error Register - AT91_REG EMAC_ROV; // Receive Overrun Errors Register - AT91_REG EMAC_RSE; // Receive Symbol Errors Register - AT91_REG EMAC_ELE; // Excessive Length Errors Register - AT91_REG EMAC_RJA; // Receive Jabbers Register - AT91_REG EMAC_USF; // Undersize Frames Register - AT91_REG EMAC_STE; // SQE Test Error Register - AT91_REG EMAC_RLE; // Receive Length Field Mismatch Register - AT91_REG EMAC_TPF; // Transmitted Pause Frames Register - AT91_REG EMAC_HRB; // Hash Address Bottom[31:0] - AT91_REG EMAC_HRT; // Hash Address Top[63:32] - AT91_REG EMAC_SA1L; // Specific Address 1 Bottom, First 4 bytes - AT91_REG EMAC_SA1H; // Specific Address 1 Top, Last 2 bytes - AT91_REG EMAC_SA2L; // Specific Address 2 Bottom, First 4 bytes - AT91_REG EMAC_SA2H; // Specific Address 2 Top, Last 2 bytes - AT91_REG EMAC_SA3L; // Specific Address 3 Bottom, First 4 bytes - AT91_REG EMAC_SA3H; // Specific Address 3 Top, Last 2 bytes - AT91_REG EMAC_SA4L; // Specific Address 4 Bottom, First 4 bytes - AT91_REG EMAC_SA4H; // Specific Address 4 Top, Last 2 bytes - AT91_REG EMAC_TID; // Type ID Checking Register - AT91_REG EMAC_TPQ; // Transmit Pause Quantum Register - AT91_REG EMAC_USRIO; // USER Input/Output Register - AT91_REG EMAC_WOL; // Wake On LAN Register - AT91_REG Reserved1[13]; // - AT91_REG EMAC_REV; // Revision Register -} AT91S_EMAC, *AT91PS_EMAC; - -// -------- EMAC_NCR : (EMAC Offset: 0x0) -------- -#define AT91C_EMAC_LB ((unsigned int) 0x1 << 0) // (EMAC) Loopback. Optional. When set, loopback signal is at high level. -#define AT91C_EMAC_LLB ((unsigned int) 0x1 << 1) // (EMAC) Loopback local. -#define AT91C_EMAC_RE ((unsigned int) 0x1 << 2) // (EMAC) Receive enable. -#define AT91C_EMAC_TE ((unsigned int) 0x1 << 3) // (EMAC) Transmit enable. -#define AT91C_EMAC_MPE ((unsigned int) 0x1 << 4) // (EMAC) Management port enable. -#define AT91C_EMAC_CLRSTAT ((unsigned int) 0x1 << 5) // (EMAC) Clear statistics registers. -#define AT91C_EMAC_INCSTAT ((unsigned int) 0x1 << 6) // (EMAC) Increment statistics registers. -#define AT91C_EMAC_WESTAT ((unsigned int) 0x1 << 7) // (EMAC) Write enable for statistics registers. -#define AT91C_EMAC_BP ((unsigned int) 0x1 << 8) // (EMAC) Back pressure. -#define AT91C_EMAC_TSTART ((unsigned int) 0x1 << 9) // (EMAC) Start Transmission. -#define AT91C_EMAC_THALT ((unsigned int) 0x1 << 10) // (EMAC) Transmission Halt. -#define AT91C_EMAC_TPFR ((unsigned int) 0x1 << 11) // (EMAC) Transmit pause frame -#define AT91C_EMAC_TZQ ((unsigned int) 0x1 << 12) // (EMAC) Transmit zero quantum pause frame -// -------- EMAC_NCFGR : (EMAC Offset: 0x4) Network Configuration Register -------- -#define AT91C_EMAC_SPD ((unsigned int) 0x1 << 0) // (EMAC) Speed. -#define AT91C_EMAC_FD ((unsigned int) 0x1 << 1) // (EMAC) Full duplex. -#define AT91C_EMAC_JFRAME ((unsigned int) 0x1 << 3) // (EMAC) Jumbo Frames. -#define AT91C_EMAC_CAF ((unsigned int) 0x1 << 4) // (EMAC) Copy all frames. -#define AT91C_EMAC_NBC ((unsigned int) 0x1 << 5) // (EMAC) No broadcast. -#define AT91C_EMAC_MTI ((unsigned int) 0x1 << 6) // (EMAC) Multicast hash event enable -#define AT91C_EMAC_UNI ((unsigned int) 0x1 << 7) // (EMAC) Unicast hash enable. -#define AT91C_EMAC_BIG ((unsigned int) 0x1 << 8) // (EMAC) Receive 1522 bytes. -#define AT91C_EMAC_EAE ((unsigned int) 0x1 << 9) // (EMAC) External address match enable. -#define AT91C_EMAC_CLK ((unsigned int) 0x3 << 10) // (EMAC) -#define AT91C_EMAC_CLK_HCLK_8 ((unsigned int) 0x0 << 10) // (EMAC) HCLK divided by 8 -#define AT91C_EMAC_CLK_HCLK_16 ((unsigned int) 0x1 << 10) // (EMAC) HCLK divided by 16 -#define AT91C_EMAC_CLK_HCLK_32 ((unsigned int) 0x2 << 10) // (EMAC) HCLK divided by 32 -#define AT91C_EMAC_CLK_HCLK_64 ((unsigned int) 0x3 << 10) // (EMAC) HCLK divided by 64 -#define AT91C_EMAC_RTY ((unsigned int) 0x1 << 12) // (EMAC) -#define AT91C_EMAC_PAE ((unsigned int) 0x1 << 13) // (EMAC) -#define AT91C_EMAC_RBOF ((unsigned int) 0x3 << 14) // (EMAC) -#define AT91C_EMAC_RBOF_OFFSET_0 ((unsigned int) 0x0 << 14) // (EMAC) no offset from start of receive buffer -#define AT91C_EMAC_RBOF_OFFSET_1 ((unsigned int) 0x1 << 14) // (EMAC) one byte offset from start of receive buffer -#define AT91C_EMAC_RBOF_OFFSET_2 ((unsigned int) 0x2 << 14) // (EMAC) two bytes offset from start of receive buffer -#define AT91C_EMAC_RBOF_OFFSET_3 ((unsigned int) 0x3 << 14) // (EMAC) three bytes offset from start of receive buffer -#define AT91C_EMAC_RLCE ((unsigned int) 0x1 << 16) // (EMAC) Receive Length field Checking Enable -#define AT91C_EMAC_DRFCS ((unsigned int) 0x1 << 17) // (EMAC) Discard Receive FCS -#define AT91C_EMAC_EFRHD ((unsigned int) 0x1 << 18) // (EMAC) -#define AT91C_EMAC_IRXFCS ((unsigned int) 0x1 << 19) // (EMAC) Ignore RX FCS -// -------- EMAC_NSR : (EMAC Offset: 0x8) Network Status Register -------- -#define AT91C_EMAC_LINKR ((unsigned int) 0x1 << 0) // (EMAC) -#define AT91C_EMAC_MDIO ((unsigned int) 0x1 << 1) // (EMAC) -#define AT91C_EMAC_IDLE ((unsigned int) 0x1 << 2) // (EMAC) -// -------- EMAC_TSR : (EMAC Offset: 0x14) Transmit Status Register -------- -#define AT91C_EMAC_UBR ((unsigned int) 0x1 << 0) // (EMAC) -#define AT91C_EMAC_COL ((unsigned int) 0x1 << 1) // (EMAC) -#define AT91C_EMAC_RLES ((unsigned int) 0x1 << 2) // (EMAC) -#define AT91C_EMAC_TGO ((unsigned int) 0x1 << 3) // (EMAC) Transmit Go -#define AT91C_EMAC_BEX ((unsigned int) 0x1 << 4) // (EMAC) Buffers exhausted mid frame -#define AT91C_EMAC_COMP ((unsigned int) 0x1 << 5) // (EMAC) -#define AT91C_EMAC_UND ((unsigned int) 0x1 << 6) // (EMAC) -// -------- EMAC_RSR : (EMAC Offset: 0x20) Receive Status Register -------- -#define AT91C_EMAC_BNA ((unsigned int) 0x1 << 0) // (EMAC) -#define AT91C_EMAC_REC ((unsigned int) 0x1 << 1) // (EMAC) -#define AT91C_EMAC_OVR ((unsigned int) 0x1 << 2) // (EMAC) -// -------- EMAC_ISR : (EMAC Offset: 0x24) Interrupt Status Register -------- -#define AT91C_EMAC_MFD ((unsigned int) 0x1 << 0) // (EMAC) -#define AT91C_EMAC_RCOMP ((unsigned int) 0x1 << 1) // (EMAC) -#define AT91C_EMAC_RXUBR ((unsigned int) 0x1 << 2) // (EMAC) -#define AT91C_EMAC_TXUBR ((unsigned int) 0x1 << 3) // (EMAC) -#define AT91C_EMAC_TUNDR ((unsigned int) 0x1 << 4) // (EMAC) -#define AT91C_EMAC_RLEX ((unsigned int) 0x1 << 5) // (EMAC) -#define AT91C_EMAC_TXERR ((unsigned int) 0x1 << 6) // (EMAC) -#define AT91C_EMAC_TCOMP ((unsigned int) 0x1 << 7) // (EMAC) -#define AT91C_EMAC_LINK ((unsigned int) 0x1 << 9) // (EMAC) -#define AT91C_EMAC_ROVR ((unsigned int) 0x1 << 10) // (EMAC) -#define AT91C_EMAC_HRESP ((unsigned int) 0x1 << 11) // (EMAC) -#define AT91C_EMAC_PFRE ((unsigned int) 0x1 << 12) // (EMAC) -#define AT91C_EMAC_PTZ ((unsigned int) 0x1 << 13) // (EMAC) -// -------- EMAC_IER : (EMAC Offset: 0x28) Interrupt Enable Register -------- -// -------- EMAC_IDR : (EMAC Offset: 0x2c) Interrupt Disable Register -------- -// -------- EMAC_IMR : (EMAC Offset: 0x30) Interrupt Mask Register -------- -// -------- EMAC_MAN : (EMAC Offset: 0x34) PHY Maintenance Register -------- -#define AT91C_EMAC_DATA ((unsigned int) 0xFFFF << 0) // (EMAC) -#define AT91C_EMAC_CODE ((unsigned int) 0x3 << 16) // (EMAC) -#define AT91C_EMAC_REGA ((unsigned int) 0x1F << 18) // (EMAC) -#define AT91C_EMAC_PHYA ((unsigned int) 0x1F << 23) // (EMAC) -#define AT91C_EMAC_RW ((unsigned int) 0x3 << 28) // (EMAC) -#define AT91C_EMAC_SOF ((unsigned int) 0x3 << 30) // (EMAC) -// -------- EMAC_USRIO : (EMAC Offset: 0xc0) USER Input Output Register -------- -#define AT91C_EMAC_RMII ((unsigned int) 0x1 << 0) // (EMAC) Reduce MII -#define AT91C_EMAC_CLKEN ((unsigned int) 0x1 << 1) // (EMAC) Clock Enable -// -------- EMAC_WOL : (EMAC Offset: 0xc4) Wake On LAN Register -------- -#define AT91C_EMAC_IP ((unsigned int) 0xFFFF << 0) // (EMAC) ARP request IP address -#define AT91C_EMAC_MAG ((unsigned int) 0x1 << 16) // (EMAC) Magic packet event enable -#define AT91C_EMAC_ARP ((unsigned int) 0x1 << 17) // (EMAC) ARP request event enable -#define AT91C_EMAC_SA1 ((unsigned int) 0x1 << 18) // (EMAC) Specific address register 1 event enable -// -------- EMAC_REV : (EMAC Offset: 0xfc) Revision Register -------- -#define AT91C_EMAC_REVREF ((unsigned int) 0xFFFF << 0) // (EMAC) -#define AT91C_EMAC_PARTREF ((unsigned int) 0xFFFF << 16) // (EMAC) - -// ***************************************************************************** -// SOFTWARE API DEFINITION FOR Analog to Digital Convertor -// ***************************************************************************** -typedef struct _AT91S_ADC { - AT91_REG ADC_CR; // ADC Control Register - AT91_REG ADC_MR; // ADC Mode Register - AT91_REG Reserved0[2]; // - AT91_REG ADC_CHER; // ADC Channel Enable Register - AT91_REG ADC_CHDR; // ADC Channel Disable Register - AT91_REG ADC_CHSR; // ADC Channel Status Register - AT91_REG ADC_SR; // ADC Status Register - AT91_REG ADC_LCDR; // ADC Last Converted Data Register - AT91_REG ADC_IER; // ADC Interrupt Enable Register - AT91_REG ADC_IDR; // ADC Interrupt Disable Register - AT91_REG ADC_IMR; // ADC Interrupt Mask Register - AT91_REG ADC_CDR0; // ADC Channel Data Register 0 - AT91_REG ADC_CDR1; // ADC Channel Data Register 1 - AT91_REG ADC_CDR2; // ADC Channel Data Register 2 - AT91_REG ADC_CDR3; // ADC Channel Data Register 3 - AT91_REG ADC_CDR4; // ADC Channel Data Register 4 - AT91_REG ADC_CDR5; // ADC Channel Data Register 5 - AT91_REG ADC_CDR6; // ADC Channel Data Register 6 - AT91_REG ADC_CDR7; // ADC Channel Data Register 7 - AT91_REG Reserved1[44]; // - AT91_REG ADC_RPR; // Receive Pointer Register - AT91_REG ADC_RCR; // Receive Counter Register - AT91_REG ADC_TPR; // Transmit Pointer Register - AT91_REG ADC_TCR; // Transmit Counter Register - AT91_REG ADC_RNPR; // Receive Next Pointer Register - AT91_REG ADC_RNCR; // Receive Next Counter Register - AT91_REG ADC_TNPR; // Transmit Next Pointer Register - AT91_REG ADC_TNCR; // Transmit Next Counter Register - AT91_REG ADC_PTCR; // PDC Transfer Control Register - AT91_REG ADC_PTSR; // PDC Transfer Status Register -} AT91S_ADC, *AT91PS_ADC; - -// -------- ADC_CR : (ADC Offset: 0x0) ADC Control Register -------- -#define AT91C_ADC_SWRST ((unsigned int) 0x1 << 0) // (ADC) Software Reset -#define AT91C_ADC_START ((unsigned int) 0x1 << 1) // (ADC) Start Conversion -// -------- ADC_MR : (ADC Offset: 0x4) ADC Mode Register -------- -#define AT91C_ADC_TRGEN ((unsigned int) 0x1 << 0) // (ADC) Trigger Enable -#define AT91C_ADC_TRGEN_DIS ((unsigned int) 0x0) // (ADC) Hradware triggers are disabled. Starting a conversion is only possible by software -#define AT91C_ADC_TRGEN_EN ((unsigned int) 0x1) // (ADC) Hardware trigger selected by TRGSEL field is enabled. -#define AT91C_ADC_TRGSEL ((unsigned int) 0x7 << 1) // (ADC) Trigger Selection -#define AT91C_ADC_TRGSEL_TIOA0 ((unsigned int) 0x0 << 1) // (ADC) Selected TRGSEL = TIAO0 -#define AT91C_ADC_TRGSEL_TIOA1 ((unsigned int) 0x1 << 1) // (ADC) Selected TRGSEL = TIAO1 -#define AT91C_ADC_TRGSEL_TIOA2 ((unsigned int) 0x2 << 1) // (ADC) Selected TRGSEL = TIAO2 -#define AT91C_ADC_TRGSEL_TIOA3 ((unsigned int) 0x3 << 1) // (ADC) Selected TRGSEL = TIAO3 -#define AT91C_ADC_TRGSEL_TIOA4 ((unsigned int) 0x4 << 1) // (ADC) Selected TRGSEL = TIAO4 -#define AT91C_ADC_TRGSEL_TIOA5 ((unsigned int) 0x5 << 1) // (ADC) Selected TRGSEL = TIAO5 -#define AT91C_ADC_TRGSEL_EXT ((unsigned int) 0x6 << 1) // (ADC) Selected TRGSEL = External Trigger -#define AT91C_ADC_LOWRES ((unsigned int) 0x1 << 4) // (ADC) Resolution. -#define AT91C_ADC_LOWRES_10_BIT ((unsigned int) 0x0 << 4) // (ADC) 10-bit resolution -#define AT91C_ADC_LOWRES_8_BIT ((unsigned int) 0x1 << 4) // (ADC) 8-bit resolution -#define AT91C_ADC_SLEEP ((unsigned int) 0x1 << 5) // (ADC) Sleep Mode -#define AT91C_ADC_SLEEP_NORMAL_MODE ((unsigned int) 0x0 << 5) // (ADC) Normal Mode -#define AT91C_ADC_SLEEP_MODE ((unsigned int) 0x1 << 5) // (ADC) Sleep Mode -#define AT91C_ADC_PRESCAL ((unsigned int) 0x3F << 8) // (ADC) Prescaler rate selection -#define AT91C_ADC_STARTUP ((unsigned int) 0x1F << 16) // (ADC) Startup Time -#define AT91C_ADC_SHTIM ((unsigned int) 0xF << 24) // (ADC) Sample & Hold Time -// -------- ADC_CHER : (ADC Offset: 0x10) ADC Channel Enable Register -------- -#define AT91C_ADC_CH0 ((unsigned int) 0x1 << 0) // (ADC) Channel 0 -#define AT91C_ADC_CH1 ((unsigned int) 0x1 << 1) // (ADC) Channel 1 -#define AT91C_ADC_CH2 ((unsigned int) 0x1 << 2) // (ADC) Channel 2 -#define AT91C_ADC_CH3 ((unsigned int) 0x1 << 3) // (ADC) Channel 3 -#define AT91C_ADC_CH4 ((unsigned int) 0x1 << 4) // (ADC) Channel 4 -#define AT91C_ADC_CH5 ((unsigned int) 0x1 << 5) // (ADC) Channel 5 -#define AT91C_ADC_CH6 ((unsigned int) 0x1 << 6) // (ADC) Channel 6 -#define AT91C_ADC_CH7 ((unsigned int) 0x1 << 7) // (ADC) Channel 7 -// -------- ADC_CHDR : (ADC Offset: 0x14) ADC Channel Disable Register -------- -// -------- ADC_CHSR : (ADC Offset: 0x18) ADC Channel Status Register -------- -// -------- ADC_SR : (ADC Offset: 0x1c) ADC Status Register -------- -#define AT91C_ADC_EOC0 ((unsigned int) 0x1 << 0) // (ADC) End of Conversion -#define AT91C_ADC_EOC1 ((unsigned int) 0x1 << 1) // (ADC) End of Conversion -#define AT91C_ADC_EOC2 ((unsigned int) 0x1 << 2) // (ADC) End of Conversion -#define AT91C_ADC_EOC3 ((unsigned int) 0x1 << 3) // (ADC) End of Conversion -#define AT91C_ADC_EOC4 ((unsigned int) 0x1 << 4) // (ADC) End of Conversion -#define AT91C_ADC_EOC5 ((unsigned int) 0x1 << 5) // (ADC) End of Conversion -#define AT91C_ADC_EOC6 ((unsigned int) 0x1 << 6) // (ADC) End of Conversion -#define AT91C_ADC_EOC7 ((unsigned int) 0x1 << 7) // (ADC) End of Conversion -#define AT91C_ADC_OVRE0 ((unsigned int) 0x1 << 8) // (ADC) Overrun Error -#define AT91C_ADC_OVRE1 ((unsigned int) 0x1 << 9) // (ADC) Overrun Error -#define AT91C_ADC_OVRE2 ((unsigned int) 0x1 << 10) // (ADC) Overrun Error -#define AT91C_ADC_OVRE3 ((unsigned int) 0x1 << 11) // (ADC) Overrun Error -#define AT91C_ADC_OVRE4 ((unsigned int) 0x1 << 12) // (ADC) Overrun Error -#define AT91C_ADC_OVRE5 ((unsigned int) 0x1 << 13) // (ADC) Overrun Error -#define AT91C_ADC_OVRE6 ((unsigned int) 0x1 << 14) // (ADC) Overrun Error -#define AT91C_ADC_OVRE7 ((unsigned int) 0x1 << 15) // (ADC) Overrun Error -#define AT91C_ADC_DRDY ((unsigned int) 0x1 << 16) // (ADC) Data Ready -#define AT91C_ADC_GOVRE ((unsigned int) 0x1 << 17) // (ADC) General Overrun -#define AT91C_ADC_ENDRX ((unsigned int) 0x1 << 18) // (ADC) End of Receiver Transfer -#define AT91C_ADC_RXBUFF ((unsigned int) 0x1 << 19) // (ADC) RXBUFF Interrupt -// -------- ADC_LCDR : (ADC Offset: 0x20) ADC Last Converted Data Register -------- -#define AT91C_ADC_LDATA ((unsigned int) 0x3FF << 0) // (ADC) Last Data Converted -// -------- ADC_IER : (ADC Offset: 0x24) ADC Interrupt Enable Register -------- -// -------- ADC_IDR : (ADC Offset: 0x28) ADC Interrupt Disable Register -------- -// -------- ADC_IMR : (ADC Offset: 0x2c) ADC Interrupt Mask Register -------- -// -------- ADC_CDR0 : (ADC Offset: 0x30) ADC Channel Data Register 0 -------- -#define AT91C_ADC_DATA ((unsigned int) 0x3FF << 0) // (ADC) Converted Data -// -------- ADC_CDR1 : (ADC Offset: 0x34) ADC Channel Data Register 1 -------- -// -------- ADC_CDR2 : (ADC Offset: 0x38) ADC Channel Data Register 2 -------- -// -------- ADC_CDR3 : (ADC Offset: 0x3c) ADC Channel Data Register 3 -------- -// -------- ADC_CDR4 : (ADC Offset: 0x40) ADC Channel Data Register 4 -------- -// -------- ADC_CDR5 : (ADC Offset: 0x44) ADC Channel Data Register 5 -------- -// -------- ADC_CDR6 : (ADC Offset: 0x48) ADC Channel Data Register 6 -------- -// -------- ADC_CDR7 : (ADC Offset: 0x4c) ADC Channel Data Register 7 -------- - -// ***************************************************************************** -// REGISTER ADDRESS DEFINITION FOR AT91SAM7X256 -// ***************************************************************************** -// ========== Register definition for SYS peripheral ========== -// ========== Register definition for AIC peripheral ========== -#define AT91C_AIC_ICCR ((AT91_REG *) 0xFFFFF128) // (AIC) Interrupt Clear Command Register -#define AT91C_AIC_IECR ((AT91_REG *) 0xFFFFF120) // (AIC) Interrupt Enable Command Register -#define AT91C_AIC_SMR ((AT91_REG *) 0xFFFFF000) // (AIC) Source Mode Register -#define AT91C_AIC_ISCR ((AT91_REG *) 0xFFFFF12C) // (AIC) Interrupt Set Command Register -#define AT91C_AIC_EOICR ((AT91_REG *) 0xFFFFF130) // (AIC) End of Interrupt Command Register -#define AT91C_AIC_DCR ((AT91_REG *) 0xFFFFF138) // (AIC) Debug Control Register (Protect) -#define AT91C_AIC_FFER ((AT91_REG *) 0xFFFFF140) // (AIC) Fast Forcing Enable Register -#define AT91C_AIC_SVR ((AT91_REG *) 0xFFFFF080) // (AIC) Source Vector Register -#define AT91C_AIC_SPU ((AT91_REG *) 0xFFFFF134) // (AIC) Spurious Vector Register -#define AT91C_AIC_FFDR ((AT91_REG *) 0xFFFFF144) // (AIC) Fast Forcing Disable Register -#define AT91C_AIC_FVR ((AT91_REG *) 0xFFFFF104) // (AIC) FIQ Vector Register -#define AT91C_AIC_FFSR ((AT91_REG *) 0xFFFFF148) // (AIC) Fast Forcing Status Register -#define AT91C_AIC_IMR ((AT91_REG *) 0xFFFFF110) // (AIC) Interrupt Mask Register -#define AT91C_AIC_ISR ((AT91_REG *) 0xFFFFF108) // (AIC) Interrupt Status Register -#define AT91C_AIC_IVR ((AT91_REG *) 0xFFFFF100) // (AIC) IRQ Vector Register -#define AT91C_AIC_IDCR ((AT91_REG *) 0xFFFFF124) // (AIC) Interrupt Disable Command Register -#define AT91C_AIC_CISR ((AT91_REG *) 0xFFFFF114) // (AIC) Core Interrupt Status Register -#define AT91C_AIC_IPR ((AT91_REG *) 0xFFFFF10C) // (AIC) Interrupt Pending Register -// ========== Register definition for PDC_DBGU peripheral ========== -#define AT91C_DBGU_TNCR ((AT91_REG *) 0xFFFFF31C) // (PDC_DBGU) Transmit Next Counter Register -#define AT91C_DBGU_RNCR ((AT91_REG *) 0xFFFFF314) // (PDC_DBGU) Receive Next Counter Register -#define AT91C_DBGU_PTCR ((AT91_REG *) 0xFFFFF320) // (PDC_DBGU) PDC Transfer Control Register -#define AT91C_DBGU_PTSR ((AT91_REG *) 0xFFFFF324) // (PDC_DBGU) PDC Transfer Status Register -#define AT91C_DBGU_RCR ((AT91_REG *) 0xFFFFF304) // (PDC_DBGU) Receive Counter Register -#define AT91C_DBGU_TCR ((AT91_REG *) 0xFFFFF30C) // (PDC_DBGU) Transmit Counter Register -#define AT91C_DBGU_RPR ((AT91_REG *) 0xFFFFF300) // (PDC_DBGU) Receive Pointer Register -#define AT91C_DBGU_TPR ((AT91_REG *) 0xFFFFF308) // (PDC_DBGU) Transmit Pointer Register -#define AT91C_DBGU_RNPR ((AT91_REG *) 0xFFFFF310) // (PDC_DBGU) Receive Next Pointer Register -#define AT91C_DBGU_TNPR ((AT91_REG *) 0xFFFFF318) // (PDC_DBGU) Transmit Next Pointer Register -// ========== Register definition for DBGU peripheral ========== -#define AT91C_DBGU_EXID ((AT91_REG *) 0xFFFFF244) // (DBGU) Chip ID Extension Register -#define AT91C_DBGU_THR ((AT91_REG *) 0xFFFFF21C) // (DBGU) Transmitter Holding Register -#define AT91C_DBGU_CSR ((AT91_REG *) 0xFFFFF214) // (DBGU) Channel Status Register -#define AT91C_DBGU_IDR ((AT91_REG *) 0xFFFFF20C) // (DBGU) Interrupt Disable Register -#define AT91C_DBGU_MR ((AT91_REG *) 0xFFFFF204) // (DBGU) Mode Register -#define AT91C_DBGU_FNTR ((AT91_REG *) 0xFFFFF248) // (DBGU) Force NTRST Register -#define AT91C_DBGU_CIDR ((AT91_REG *) 0xFFFFF240) // (DBGU) Chip ID Register -#define AT91C_DBGU_BRGR ((AT91_REG *) 0xFFFFF220) // (DBGU) Baud Rate Generator Register -#define AT91C_DBGU_RHR ((AT91_REG *) 0xFFFFF218) // (DBGU) Receiver Holding Register -#define AT91C_DBGU_IMR ((AT91_REG *) 0xFFFFF210) // (DBGU) Interrupt Mask Register -#define AT91C_DBGU_IER ((AT91_REG *) 0xFFFFF208) // (DBGU) Interrupt Enable Register -#define AT91C_DBGU_CR ((AT91_REG *) 0xFFFFF200) // (DBGU) Control Register -// ========== Register definition for PIOA peripheral ========== -#define AT91C_PIOA_IMR ((AT91_REG *) 0xFFFFF448) // (PIOA) Interrupt Mask Register -#define AT91C_PIOA_IER ((AT91_REG *) 0xFFFFF440) // (PIOA) Interrupt Enable Register -#define AT91C_PIOA_OWDR ((AT91_REG *) 0xFFFFF4A4) // (PIOA) Output Write Disable Register -#define AT91C_PIOA_ISR ((AT91_REG *) 0xFFFFF44C) // (PIOA) Interrupt Status Register -#define AT91C_PIOA_PPUDR ((AT91_REG *) 0xFFFFF460) // (PIOA) Pull-up Disable Register -#define AT91C_PIOA_MDSR ((AT91_REG *) 0xFFFFF458) // (PIOA) Multi-driver Status Register -#define AT91C_PIOA_MDER ((AT91_REG *) 0xFFFFF450) // (PIOA) Multi-driver Enable Register -#define AT91C_PIOA_PER ((AT91_REG *) 0xFFFFF400) // (PIOA) PIO Enable Register -#define AT91C_PIOA_PSR ((AT91_REG *) 0xFFFFF408) // (PIOA) PIO Status Register -#define AT91C_PIOA_OER ((AT91_REG *) 0xFFFFF410) // (PIOA) Output Enable Register -#define AT91C_PIOA_BSR ((AT91_REG *) 0xFFFFF474) // (PIOA) Select B Register -#define AT91C_PIOA_PPUER ((AT91_REG *) 0xFFFFF464) // (PIOA) Pull-up Enable Register -#define AT91C_PIOA_MDDR ((AT91_REG *) 0xFFFFF454) // (PIOA) Multi-driver Disable Register -#define AT91C_PIOA_PDR ((AT91_REG *) 0xFFFFF404) // (PIOA) PIO Disable Register -#define AT91C_PIOA_ODR ((AT91_REG *) 0xFFFFF414) // (PIOA) Output Disable Registerr -#define AT91C_PIOA_IFDR ((AT91_REG *) 0xFFFFF424) // (PIOA) Input Filter Disable Register -#define AT91C_PIOA_ABSR ((AT91_REG *) 0xFFFFF478) // (PIOA) AB Select Status Register -#define AT91C_PIOA_ASR ((AT91_REG *) 0xFFFFF470) // (PIOA) Select A Register -#define AT91C_PIOA_PPUSR ((AT91_REG *) 0xFFFFF468) // (PIOA) Pull-up Status Register -#define AT91C_PIOA_ODSR ((AT91_REG *) 0xFFFFF438) // (PIOA) Output Data Status Register -#define AT91C_PIOA_SODR ((AT91_REG *) 0xFFFFF430) // (PIOA) Set Output Data Register -#define AT91C_PIOA_IFSR ((AT91_REG *) 0xFFFFF428) // (PIOA) Input Filter Status Register -#define AT91C_PIOA_IFER ((AT91_REG *) 0xFFFFF420) // (PIOA) Input Filter Enable Register -#define AT91C_PIOA_OSR ((AT91_REG *) 0xFFFFF418) // (PIOA) Output Status Register -#define AT91C_PIOA_IDR ((AT91_REG *) 0xFFFFF444) // (PIOA) Interrupt Disable Register -#define AT91C_PIOA_PDSR ((AT91_REG *) 0xFFFFF43C) // (PIOA) Pin Data Status Register -#define AT91C_PIOA_CODR ((AT91_REG *) 0xFFFFF434) // (PIOA) Clear Output Data Register -#define AT91C_PIOA_OWSR ((AT91_REG *) 0xFFFFF4A8) // (PIOA) Output Write Status Register -#define AT91C_PIOA_OWER ((AT91_REG *) 0xFFFFF4A0) // (PIOA) Output Write Enable Register -// ========== Register definition for PIOB peripheral ========== -#define AT91C_PIOB_OWSR ((AT91_REG *) 0xFFFFF6A8) // (PIOB) Output Write Status Register -#define AT91C_PIOB_PPUSR ((AT91_REG *) 0xFFFFF668) // (PIOB) Pull-up Status Register -#define AT91C_PIOB_PPUDR ((AT91_REG *) 0xFFFFF660) // (PIOB) Pull-up Disable Register -#define AT91C_PIOB_MDSR ((AT91_REG *) 0xFFFFF658) // (PIOB) Multi-driver Status Register -#define AT91C_PIOB_MDER ((AT91_REG *) 0xFFFFF650) // (PIOB) Multi-driver Enable Register -#define AT91C_PIOB_IMR ((AT91_REG *) 0xFFFFF648) // (PIOB) Interrupt Mask Register -#define AT91C_PIOB_OSR ((AT91_REG *) 0xFFFFF618) // (PIOB) Output Status Register -#define AT91C_PIOB_OER ((AT91_REG *) 0xFFFFF610) // (PIOB) Output Enable Register -#define AT91C_PIOB_PSR ((AT91_REG *) 0xFFFFF608) // (PIOB) PIO Status Register -#define AT91C_PIOB_PER ((AT91_REG *) 0xFFFFF600) // (PIOB) PIO Enable Register -#define AT91C_PIOB_BSR ((AT91_REG *) 0xFFFFF674) // (PIOB) Select B Register -#define AT91C_PIOB_PPUER ((AT91_REG *) 0xFFFFF664) // (PIOB) Pull-up Enable Register -#define AT91C_PIOB_IFDR ((AT91_REG *) 0xFFFFF624) // (PIOB) Input Filter Disable Register -#define AT91C_PIOB_ODR ((AT91_REG *) 0xFFFFF614) // (PIOB) Output Disable Registerr -#define AT91C_PIOB_ABSR ((AT91_REG *) 0xFFFFF678) // (PIOB) AB Select Status Register -#define AT91C_PIOB_ASR ((AT91_REG *) 0xFFFFF670) // (PIOB) Select A Register -#define AT91C_PIOB_IFER ((AT91_REG *) 0xFFFFF620) // (PIOB) Input Filter Enable Register -#define AT91C_PIOB_IFSR ((AT91_REG *) 0xFFFFF628) // (PIOB) Input Filter Status Register -#define AT91C_PIOB_SODR ((AT91_REG *) 0xFFFFF630) // (PIOB) Set Output Data Register -#define AT91C_PIOB_ODSR ((AT91_REG *) 0xFFFFF638) // (PIOB) Output Data Status Register -#define AT91C_PIOB_CODR ((AT91_REG *) 0xFFFFF634) // (PIOB) Clear Output Data Register -#define AT91C_PIOB_PDSR ((AT91_REG *) 0xFFFFF63C) // (PIOB) Pin Data Status Register -#define AT91C_PIOB_OWER ((AT91_REG *) 0xFFFFF6A0) // (PIOB) Output Write Enable Register -#define AT91C_PIOB_IER ((AT91_REG *) 0xFFFFF640) // (PIOB) Interrupt Enable Register -#define AT91C_PIOB_OWDR ((AT91_REG *) 0xFFFFF6A4) // (PIOB) Output Write Disable Register -#define AT91C_PIOB_MDDR ((AT91_REG *) 0xFFFFF654) // (PIOB) Multi-driver Disable Register -#define AT91C_PIOB_ISR ((AT91_REG *) 0xFFFFF64C) // (PIOB) Interrupt Status Register -#define AT91C_PIOB_IDR ((AT91_REG *) 0xFFFFF644) // (PIOB) Interrupt Disable Register -#define AT91C_PIOB_PDR ((AT91_REG *) 0xFFFFF604) // (PIOB) PIO Disable Register -// ========== Register definition for CKGR peripheral ========== -#define AT91C_CKGR_PLLR ((AT91_REG *) 0xFFFFFC2C) // (CKGR) PLL Register -#define AT91C_CKGR_MCFR ((AT91_REG *) 0xFFFFFC24) // (CKGR) Main Clock Frequency Register -#define AT91C_CKGR_MOR ((AT91_REG *) 0xFFFFFC20) // (CKGR) Main Oscillator Register -// ========== Register definition for PMC peripheral ========== -#define AT91C_PMC_SCSR ((AT91_REG *) 0xFFFFFC08) // (PMC) System Clock Status Register -#define AT91C_PMC_SCER ((AT91_REG *) 0xFFFFFC00) // (PMC) System Clock Enable Register -#define AT91C_PMC_IMR ((AT91_REG *) 0xFFFFFC6C) // (PMC) Interrupt Mask Register -#define AT91C_PMC_IDR ((AT91_REG *) 0xFFFFFC64) // (PMC) Interrupt Disable Register -#define AT91C_PMC_PCDR ((AT91_REG *) 0xFFFFFC14) // (PMC) Peripheral Clock Disable Register -#define AT91C_PMC_SCDR ((AT91_REG *) 0xFFFFFC04) // (PMC) System Clock Disable Register -#define AT91C_PMC_SR ((AT91_REG *) 0xFFFFFC68) // (PMC) Status Register -#define AT91C_PMC_IER ((AT91_REG *) 0xFFFFFC60) // (PMC) Interrupt Enable Register -#define AT91C_PMC_MCKR ((AT91_REG *) 0xFFFFFC30) // (PMC) Master Clock Register -#define AT91C_PMC_MOR ((AT91_REG *) 0xFFFFFC20) // (PMC) Main Oscillator Register -#define AT91C_PMC_PCER ((AT91_REG *) 0xFFFFFC10) // (PMC) Peripheral Clock Enable Register -#define AT91C_PMC_PCSR ((AT91_REG *) 0xFFFFFC18) // (PMC) Peripheral Clock Status Register -#define AT91C_PMC_PLLR ((AT91_REG *) 0xFFFFFC2C) // (PMC) PLL Register -#define AT91C_PMC_MCFR ((AT91_REG *) 0xFFFFFC24) // (PMC) Main Clock Frequency Register -#define AT91C_PMC_PCKR ((AT91_REG *) 0xFFFFFC40) // (PMC) Programmable Clock Register -// ========== Register definition for RSTC peripheral ========== -#define AT91C_RSTC_RSR ((AT91_REG *) 0xFFFFFD04) // (RSTC) Reset Status Register -#define AT91C_RSTC_RMR ((AT91_REG *) 0xFFFFFD08) // (RSTC) Reset Mode Register -#define AT91C_RSTC_RCR ((AT91_REG *) 0xFFFFFD00) // (RSTC) Reset Control Register -// ========== Register definition for RTTC peripheral ========== -#define AT91C_RTTC_RTSR ((AT91_REG *) 0xFFFFFD2C) // (RTTC) Real-time Status Register -#define AT91C_RTTC_RTAR ((AT91_REG *) 0xFFFFFD24) // (RTTC) Real-time Alarm Register -#define AT91C_RTTC_RTVR ((AT91_REG *) 0xFFFFFD28) // (RTTC) Real-time Value Register -#define AT91C_RTTC_RTMR ((AT91_REG *) 0xFFFFFD20) // (RTTC) Real-time Mode Register -// ========== Register definition for PITC peripheral ========== -#define AT91C_PITC_PIIR ((AT91_REG *) 0xFFFFFD3C) // (PITC) Period Interval Image Register -#define AT91C_PITC_PISR ((AT91_REG *) 0xFFFFFD34) // (PITC) Period Interval Status Register -#define AT91C_PITC_PIVR ((AT91_REG *) 0xFFFFFD38) // (PITC) Period Interval Value Register -#define AT91C_PITC_PIMR ((AT91_REG *) 0xFFFFFD30) // (PITC) Period Interval Mode Register -// ========== Register definition for WDTC peripheral ========== -#define AT91C_WDTC_WDMR ((AT91_REG *) 0xFFFFFD44) // (WDTC) Watchdog Mode Register -#define AT91C_WDTC_WDSR ((AT91_REG *) 0xFFFFFD48) // (WDTC) Watchdog Status Register -#define AT91C_WDTC_WDCR ((AT91_REG *) 0xFFFFFD40) // (WDTC) Watchdog Control Register -// ========== Register definition for VREG peripheral ========== -#define AT91C_VREG_MR ((AT91_REG *) 0xFFFFFD60) // (VREG) Voltage Regulator Mode Register -// ========== Register definition for MC peripheral ========== -#define AT91C_MC_FCR ((AT91_REG *) 0xFFFFFF64) // (MC) MC Flash Command Register -#define AT91C_MC_ASR ((AT91_REG *) 0xFFFFFF04) // (MC) MC Abort Status Register -#define AT91C_MC_FSR ((AT91_REG *) 0xFFFFFF68) // (MC) MC Flash Status Register -#define AT91C_MC_FMR ((AT91_REG *) 0xFFFFFF60) // (MC) MC Flash Mode Register -#define AT91C_MC_AASR ((AT91_REG *) 0xFFFFFF08) // (MC) MC Abort Address Status Register -#define AT91C_MC_RCR ((AT91_REG *) 0xFFFFFF00) // (MC) MC Remap Control Register -// ========== Register definition for PDC_SPI1 peripheral ========== -#define AT91C_SPI1_RNPR ((AT91_REG *) 0xFFFE4110) // (PDC_SPI1) Receive Next Pointer Register -#define AT91C_SPI1_TPR ((AT91_REG *) 0xFFFE4108) // (PDC_SPI1) Transmit Pointer Register -#define AT91C_SPI1_RPR ((AT91_REG *) 0xFFFE4100) // (PDC_SPI1) Receive Pointer Register -#define AT91C_SPI1_PTSR ((AT91_REG *) 0xFFFE4124) // (PDC_SPI1) PDC Transfer Status Register -#define AT91C_SPI1_RCR ((AT91_REG *) 0xFFFE4104) // (PDC_SPI1) Receive Counter Register -#define AT91C_SPI1_TCR ((AT91_REG *) 0xFFFE410C) // (PDC_SPI1) Transmit Counter Register -#define AT91C_SPI1_RNCR ((AT91_REG *) 0xFFFE4114) // (PDC_SPI1) Receive Next Counter Register -#define AT91C_SPI1_TNCR ((AT91_REG *) 0xFFFE411C) // (PDC_SPI1) Transmit Next Counter Register -#define AT91C_SPI1_TNPR ((AT91_REG *) 0xFFFE4118) // (PDC_SPI1) Transmit Next Pointer Register -#define AT91C_SPI1_PTCR ((AT91_REG *) 0xFFFE4120) // (PDC_SPI1) PDC Transfer Control Register -// ========== Register definition for SPI1 peripheral ========== -#define AT91C_SPI1_CSR ((AT91_REG *) 0xFFFE4030) // (SPI1) Chip Select Register -#define AT91C_SPI1_IDR ((AT91_REG *) 0xFFFE4018) // (SPI1) Interrupt Disable Register -#define AT91C_SPI1_SR ((AT91_REG *) 0xFFFE4010) // (SPI1) Status Register -#define AT91C_SPI1_RDR ((AT91_REG *) 0xFFFE4008) // (SPI1) Receive Data Register -#define AT91C_SPI1_CR ((AT91_REG *) 0xFFFE4000) // (SPI1) Control Register -#define AT91C_SPI1_IMR ((AT91_REG *) 0xFFFE401C) // (SPI1) Interrupt Mask Register -#define AT91C_SPI1_IER ((AT91_REG *) 0xFFFE4014) // (SPI1) Interrupt Enable Register -#define AT91C_SPI1_TDR ((AT91_REG *) 0xFFFE400C) // (SPI1) Transmit Data Register -#define AT91C_SPI1_MR ((AT91_REG *) 0xFFFE4004) // (SPI1) Mode Register -// ========== Register definition for PDC_SPI0 peripheral ========== -#define AT91C_SPI0_PTCR ((AT91_REG *) 0xFFFE0120) // (PDC_SPI0) PDC Transfer Control Register -#define AT91C_SPI0_TNPR ((AT91_REG *) 0xFFFE0118) // (PDC_SPI0) Transmit Next Pointer Register -#define AT91C_SPI0_RNPR ((AT91_REG *) 0xFFFE0110) // (PDC_SPI0) Receive Next Pointer Register -#define AT91C_SPI0_TPR ((AT91_REG *) 0xFFFE0108) // (PDC_SPI0) Transmit Pointer Register -#define AT91C_SPI0_RPR ((AT91_REG *) 0xFFFE0100) // (PDC_SPI0) Receive Pointer Register -#define AT91C_SPI0_PTSR ((AT91_REG *) 0xFFFE0124) // (PDC_SPI0) PDC Transfer Status Register -#define AT91C_SPI0_TNCR ((AT91_REG *) 0xFFFE011C) // (PDC_SPI0) Transmit Next Counter Register -#define AT91C_SPI0_RNCR ((AT91_REG *) 0xFFFE0114) // (PDC_SPI0) Receive Next Counter Register -#define AT91C_SPI0_TCR ((AT91_REG *) 0xFFFE010C) // (PDC_SPI0) Transmit Counter Register -#define AT91C_SPI0_RCR ((AT91_REG *) 0xFFFE0104) // (PDC_SPI0) Receive Counter Register -// ========== Register definition for SPI0 peripheral ========== -#define AT91C_SPI0_CSR ((AT91_REG *) 0xFFFE0030) // (SPI0) Chip Select Register -#define AT91C_SPI0_IDR ((AT91_REG *) 0xFFFE0018) // (SPI0) Interrupt Disable Register -#define AT91C_SPI0_SR ((AT91_REG *) 0xFFFE0010) // (SPI0) Status Register -#define AT91C_SPI0_RDR ((AT91_REG *) 0xFFFE0008) // (SPI0) Receive Data Register -#define AT91C_SPI0_CR ((AT91_REG *) 0xFFFE0000) // (SPI0) Control Register -#define AT91C_SPI0_IMR ((AT91_REG *) 0xFFFE001C) // (SPI0) Interrupt Mask Register -#define AT91C_SPI0_IER ((AT91_REG *) 0xFFFE0014) // (SPI0) Interrupt Enable Register -#define AT91C_SPI0_TDR ((AT91_REG *) 0xFFFE000C) // (SPI0) Transmit Data Register -#define AT91C_SPI0_MR ((AT91_REG *) 0xFFFE0004) // (SPI0) Mode Register -// ========== Register definition for PDC_US1 peripheral ========== -#define AT91C_US1_PTSR ((AT91_REG *) 0xFFFC4124) // (PDC_US1) PDC Transfer Status Register -#define AT91C_US1_TNCR ((AT91_REG *) 0xFFFC411C) // (PDC_US1) Transmit Next Counter Register -#define AT91C_US1_RNCR ((AT91_REG *) 0xFFFC4114) // (PDC_US1) Receive Next Counter Register -#define AT91C_US1_TCR ((AT91_REG *) 0xFFFC410C) // (PDC_US1) Transmit Counter Register -#define AT91C_US1_RCR ((AT91_REG *) 0xFFFC4104) // (PDC_US1) Receive Counter Register -#define AT91C_US1_PTCR ((AT91_REG *) 0xFFFC4120) // (PDC_US1) PDC Transfer Control Register -#define AT91C_US1_TNPR ((AT91_REG *) 0xFFFC4118) // (PDC_US1) Transmit Next Pointer Register -#define AT91C_US1_RNPR ((AT91_REG *) 0xFFFC4110) // (PDC_US1) Receive Next Pointer Register -#define AT91C_US1_TPR ((AT91_REG *) 0xFFFC4108) // (PDC_US1) Transmit Pointer Register -#define AT91C_US1_RPR ((AT91_REG *) 0xFFFC4100) // (PDC_US1) Receive Pointer Register -// ========== Register definition for US1 peripheral ========== -#define AT91C_US1_RHR ((AT91_REG *) 0xFFFC4018) // (US1) Receiver Holding Register -#define AT91C_US1_IMR ((AT91_REG *) 0xFFFC4010) // (US1) Interrupt Mask Register -#define AT91C_US1_IER ((AT91_REG *) 0xFFFC4008) // (US1) Interrupt Enable Register -#define AT91C_US1_CR ((AT91_REG *) 0xFFFC4000) // (US1) Control Register -#define AT91C_US1_RTOR ((AT91_REG *) 0xFFFC4024) // (US1) Receiver Time-out Register -#define AT91C_US1_THR ((AT91_REG *) 0xFFFC401C) // (US1) Transmitter Holding Register -#define AT91C_US1_CSR ((AT91_REG *) 0xFFFC4014) // (US1) Channel Status Register -#define AT91C_US1_IDR ((AT91_REG *) 0xFFFC400C) // (US1) Interrupt Disable Register -#define AT91C_US1_FIDI ((AT91_REG *) 0xFFFC4040) // (US1) FI_DI_Ratio Register -#define AT91C_US1_BRGR ((AT91_REG *) 0xFFFC4020) // (US1) Baud Rate Generator Register -#define AT91C_US1_TTGR ((AT91_REG *) 0xFFFC4028) // (US1) Transmitter Time-guard Register -#define AT91C_US1_IF ((AT91_REG *) 0xFFFC404C) // (US1) IRDA_FILTER Register -#define AT91C_US1_NER ((AT91_REG *) 0xFFFC4044) // (US1) Nb Errors Register -#define AT91C_US1_MR ((AT91_REG *) 0xFFFC4004) // (US1) Mode Register -// ========== Register definition for PDC_US0 peripheral ========== -#define AT91C_US0_PTCR ((AT91_REG *) 0xFFFC0120) // (PDC_US0) PDC Transfer Control Register -#define AT91C_US0_TNPR ((AT91_REG *) 0xFFFC0118) // (PDC_US0) Transmit Next Pointer Register -#define AT91C_US0_RNPR ((AT91_REG *) 0xFFFC0110) // (PDC_US0) Receive Next Pointer Register -#define AT91C_US0_TPR ((AT91_REG *) 0xFFFC0108) // (PDC_US0) Transmit Pointer Register -#define AT91C_US0_RPR ((AT91_REG *) 0xFFFC0100) // (PDC_US0) Receive Pointer Register -#define AT91C_US0_PTSR ((AT91_REG *) 0xFFFC0124) // (PDC_US0) PDC Transfer Status Register -#define AT91C_US0_TNCR ((AT91_REG *) 0xFFFC011C) // (PDC_US0) Transmit Next Counter Register -#define AT91C_US0_RNCR ((AT91_REG *) 0xFFFC0114) // (PDC_US0) Receive Next Counter Register -#define AT91C_US0_TCR ((AT91_REG *) 0xFFFC010C) // (PDC_US0) Transmit Counter Register -#define AT91C_US0_RCR ((AT91_REG *) 0xFFFC0104) // (PDC_US0) Receive Counter Register -// ========== Register definition for US0 peripheral ========== -#define AT91C_US0_TTGR ((AT91_REG *) 0xFFFC0028) // (US0) Transmitter Time-guard Register -#define AT91C_US0_BRGR ((AT91_REG *) 0xFFFC0020) // (US0) Baud Rate Generator Register -#define AT91C_US0_RHR ((AT91_REG *) 0xFFFC0018) // (US0) Receiver Holding Register -#define AT91C_US0_IMR ((AT91_REG *) 0xFFFC0010) // (US0) Interrupt Mask Register -#define AT91C_US0_NER ((AT91_REG *) 0xFFFC0044) // (US0) Nb Errors Register -#define AT91C_US0_RTOR ((AT91_REG *) 0xFFFC0024) // (US0) Receiver Time-out Register -#define AT91C_US0_FIDI ((AT91_REG *) 0xFFFC0040) // (US0) FI_DI_Ratio Register -#define AT91C_US0_CR ((AT91_REG *) 0xFFFC0000) // (US0) Control Register -#define AT91C_US0_IER ((AT91_REG *) 0xFFFC0008) // (US0) Interrupt Enable Register -#define AT91C_US0_IF ((AT91_REG *) 0xFFFC004C) // (US0) IRDA_FILTER Register -#define AT91C_US0_MR ((AT91_REG *) 0xFFFC0004) // (US0) Mode Register -#define AT91C_US0_IDR ((AT91_REG *) 0xFFFC000C) // (US0) Interrupt Disable Register -#define AT91C_US0_CSR ((AT91_REG *) 0xFFFC0014) // (US0) Channel Status Register -#define AT91C_US0_THR ((AT91_REG *) 0xFFFC001C) // (US0) Transmitter Holding Register -// ========== Register definition for PDC_SSC peripheral ========== -#define AT91C_SSC_PTCR ((AT91_REG *) 0xFFFD4120) // (PDC_SSC) PDC Transfer Control Register -#define AT91C_SSC_TNPR ((AT91_REG *) 0xFFFD4118) // (PDC_SSC) Transmit Next Pointer Register -#define AT91C_SSC_RNPR ((AT91_REG *) 0xFFFD4110) // (PDC_SSC) Receive Next Pointer Register -#define AT91C_SSC_TPR ((AT91_REG *) 0xFFFD4108) // (PDC_SSC) Transmit Pointer Register -#define AT91C_SSC_RPR ((AT91_REG *) 0xFFFD4100) // (PDC_SSC) Receive Pointer Register -#define AT91C_SSC_PTSR ((AT91_REG *) 0xFFFD4124) // (PDC_SSC) PDC Transfer Status Register -#define AT91C_SSC_TNCR ((AT91_REG *) 0xFFFD411C) // (PDC_SSC) Transmit Next Counter Register -#define AT91C_SSC_RNCR ((AT91_REG *) 0xFFFD4114) // (PDC_SSC) Receive Next Counter Register -#define AT91C_SSC_TCR ((AT91_REG *) 0xFFFD410C) // (PDC_SSC) Transmit Counter Register -#define AT91C_SSC_RCR ((AT91_REG *) 0xFFFD4104) // (PDC_SSC) Receive Counter Register -// ========== Register definition for SSC peripheral ========== -#define AT91C_SSC_RFMR ((AT91_REG *) 0xFFFD4014) // (SSC) Receive Frame Mode Register -#define AT91C_SSC_CMR ((AT91_REG *) 0xFFFD4004) // (SSC) Clock Mode Register -#define AT91C_SSC_IDR ((AT91_REG *) 0xFFFD4048) // (SSC) Interrupt Disable Register -#define AT91C_SSC_SR ((AT91_REG *) 0xFFFD4040) // (SSC) Status Register -#define AT91C_SSC_RSHR ((AT91_REG *) 0xFFFD4030) // (SSC) Receive Sync Holding Register -#define AT91C_SSC_RHR ((AT91_REG *) 0xFFFD4020) // (SSC) Receive Holding Register -#define AT91C_SSC_TCMR ((AT91_REG *) 0xFFFD4018) // (SSC) Transmit Clock Mode Register -#define AT91C_SSC_RCMR ((AT91_REG *) 0xFFFD4010) // (SSC) Receive Clock ModeRegister -#define AT91C_SSC_CR ((AT91_REG *) 0xFFFD4000) // (SSC) Control Register -#define AT91C_SSC_IMR ((AT91_REG *) 0xFFFD404C) // (SSC) Interrupt Mask Register -#define AT91C_SSC_IER ((AT91_REG *) 0xFFFD4044) // (SSC) Interrupt Enable Register -#define AT91C_SSC_TSHR ((AT91_REG *) 0xFFFD4034) // (SSC) Transmit Sync Holding Register -#define AT91C_SSC_THR ((AT91_REG *) 0xFFFD4024) // (SSC) Transmit Holding Register -#define AT91C_SSC_TFMR ((AT91_REG *) 0xFFFD401C) // (SSC) Transmit Frame Mode Register -// ========== Register definition for TWI peripheral ========== -#define AT91C_TWI_RHR ((AT91_REG *) 0xFFFB8030) // (TWI) Receive Holding Register -#define AT91C_TWI_IDR ((AT91_REG *) 0xFFFB8028) // (TWI) Interrupt Disable Register -#define AT91C_TWI_SR ((AT91_REG *) 0xFFFB8020) // (TWI) Status Register -#define AT91C_TWI_CWGR ((AT91_REG *) 0xFFFB8010) // (TWI) Clock Waveform Generator Register -#define AT91C_TWI_CR ((AT91_REG *) 0xFFFB8000) // (TWI) Control Register -#define AT91C_TWI_THR ((AT91_REG *) 0xFFFB8034) // (TWI) Transmit Holding Register -#define AT91C_TWI_IMR ((AT91_REG *) 0xFFFB802C) // (TWI) Interrupt Mask Register -#define AT91C_TWI_IER ((AT91_REG *) 0xFFFB8024) // (TWI) Interrupt Enable Register -#define AT91C_TWI_IADR ((AT91_REG *) 0xFFFB800C) // (TWI) Internal Address Register -#define AT91C_TWI_MMR ((AT91_REG *) 0xFFFB8004) // (TWI) Master Mode Register -// ========== Register definition for PWMC_CH3 peripheral ========== -#define AT91C_PWMC_CH3_CUPDR ((AT91_REG *) 0xFFFCC270) // (PWMC_CH3) Channel Update Register -#define AT91C_PWMC_CH3_CPRDR ((AT91_REG *) 0xFFFCC268) // (PWMC_CH3) Channel Period Register -#define AT91C_PWMC_CH3_CMR ((AT91_REG *) 0xFFFCC260) // (PWMC_CH3) Channel Mode Register -#define AT91C_PWMC_CH3_Reserved ((AT91_REG *) 0xFFFCC274) // (PWMC_CH3) Reserved -#define AT91C_PWMC_CH3_CCNTR ((AT91_REG *) 0xFFFCC26C) // (PWMC_CH3) Channel Counter Register -#define AT91C_PWMC_CH3_CDTYR ((AT91_REG *) 0xFFFCC264) // (PWMC_CH3) Channel Duty Cycle Register -// ========== Register definition for PWMC_CH2 peripheral ========== -#define AT91C_PWMC_CH2_CUPDR ((AT91_REG *) 0xFFFCC250) // (PWMC_CH2) Channel Update Register -#define AT91C_PWMC_CH2_CPRDR ((AT91_REG *) 0xFFFCC248) // (PWMC_CH2) Channel Period Register -#define AT91C_PWMC_CH2_CMR ((AT91_REG *) 0xFFFCC240) // (PWMC_CH2) Channel Mode Register -#define AT91C_PWMC_CH2_Reserved ((AT91_REG *) 0xFFFCC254) // (PWMC_CH2) Reserved -#define AT91C_PWMC_CH2_CCNTR ((AT91_REG *) 0xFFFCC24C) // (PWMC_CH2) Channel Counter Register -#define AT91C_PWMC_CH2_CDTYR ((AT91_REG *) 0xFFFCC244) // (PWMC_CH2) Channel Duty Cycle Register -// ========== Register definition for PWMC_CH1 peripheral ========== -#define AT91C_PWMC_CH1_CUPDR ((AT91_REG *) 0xFFFCC230) // (PWMC_CH1) Channel Update Register -#define AT91C_PWMC_CH1_CPRDR ((AT91_REG *) 0xFFFCC228) // (PWMC_CH1) Channel Period Register -#define AT91C_PWMC_CH1_CMR ((AT91_REG *) 0xFFFCC220) // (PWMC_CH1) Channel Mode Register -#define AT91C_PWMC_CH1_Reserved ((AT91_REG *) 0xFFFCC234) // (PWMC_CH1) Reserved -#define AT91C_PWMC_CH1_CCNTR ((AT91_REG *) 0xFFFCC22C) // (PWMC_CH1) Channel Counter Register -#define AT91C_PWMC_CH1_CDTYR ((AT91_REG *) 0xFFFCC224) // (PWMC_CH1) Channel Duty Cycle Register -// ========== Register definition for PWMC_CH0 peripheral ========== -#define AT91C_PWMC_CH0_CUPDR ((AT91_REG *) 0xFFFCC210) // (PWMC_CH0) Channel Update Register -#define AT91C_PWMC_CH0_CPRDR ((AT91_REG *) 0xFFFCC208) // (PWMC_CH0) Channel Period Register -#define AT91C_PWMC_CH0_CMR ((AT91_REG *) 0xFFFCC200) // (PWMC_CH0) Channel Mode Register -#define AT91C_PWMC_CH0_Reserved ((AT91_REG *) 0xFFFCC214) // (PWMC_CH0) Reserved -#define AT91C_PWMC_CH0_CCNTR ((AT91_REG *) 0xFFFCC20C) // (PWMC_CH0) Channel Counter Register -#define AT91C_PWMC_CH0_CDTYR ((AT91_REG *) 0xFFFCC204) // (PWMC_CH0) Channel Duty Cycle Register -// ========== Register definition for PWMC peripheral ========== -#define AT91C_PWMC_VR ((AT91_REG *) 0xFFFCC0FC) // (PWMC) PWMC Version Register -#define AT91C_PWMC_ISR ((AT91_REG *) 0xFFFCC01C) // (PWMC) PWMC Interrupt Status Register -#define AT91C_PWMC_IDR ((AT91_REG *) 0xFFFCC014) // (PWMC) PWMC Interrupt Disable Register -#define AT91C_PWMC_SR ((AT91_REG *) 0xFFFCC00C) // (PWMC) PWMC Status Register -#define AT91C_PWMC_ENA ((AT91_REG *) 0xFFFCC004) // (PWMC) PWMC Enable Register -#define AT91C_PWMC_IMR ((AT91_REG *) 0xFFFCC018) // (PWMC) PWMC Interrupt Mask Register -#define AT91C_PWMC_MR ((AT91_REG *) 0xFFFCC000) // (PWMC) PWMC Mode Register -#define AT91C_PWMC_DIS ((AT91_REG *) 0xFFFCC008) // (PWMC) PWMC Disable Register -#define AT91C_PWMC_IER ((AT91_REG *) 0xFFFCC010) // (PWMC) PWMC Interrupt Enable Register -// ========== Register definition for UDP peripheral ========== -#define AT91C_UDP_TXVC ((AT91_REG *) 0xFFFB0074) // (UDP) Transceiver Control Register -#define AT91C_UDP_ISR ((AT91_REG *) 0xFFFB001C) // (UDP) Interrupt Status Register -#define AT91C_UDP_IDR ((AT91_REG *) 0xFFFB0014) // (UDP) Interrupt Disable Register -#define AT91C_UDP_CSR ((AT91_REG *) 0xFFFB0030) // (UDP) Endpoint Control and Status Register -#define AT91C_UDP_RSTEP ((AT91_REG *) 0xFFFB0028) // (UDP) Reset Endpoint Register -#define AT91C_UDP_ICR ((AT91_REG *) 0xFFFB0020) // (UDP) Interrupt Clear Register -#define AT91C_UDP_GLBSTATE ((AT91_REG *) 0xFFFB0004) // (UDP) Global State Register -#define AT91C_UDP_NUM ((AT91_REG *) 0xFFFB0000) // (UDP) Frame Number Register -#define AT91C_UDP_FADDR ((AT91_REG *) 0xFFFB0008) // (UDP) Function Address Register -#define AT91C_UDP_IER ((AT91_REG *) 0xFFFB0010) // (UDP) Interrupt Enable Register -#define AT91C_UDP_IMR ((AT91_REG *) 0xFFFB0018) // (UDP) Interrupt Mask Register -#define AT91C_UDP_FDR ((AT91_REG *) 0xFFFB0050) // (UDP) Endpoint FIFO Data Register -// ========== Register definition for TC0 peripheral ========== -#define AT91C_TC0_IMR ((AT91_REG *) 0xFFFA002C) // (TC0) Interrupt Mask Register -#define AT91C_TC0_IER ((AT91_REG *) 0xFFFA0024) // (TC0) Interrupt Enable Register -#define AT91C_TC0_RC ((AT91_REG *) 0xFFFA001C) // (TC0) Register C -#define AT91C_TC0_RA ((AT91_REG *) 0xFFFA0014) // (TC0) Register A -#define AT91C_TC0_CMR ((AT91_REG *) 0xFFFA0004) // (TC0) Channel Mode Register (Capture Mode / Waveform Mode) -#define AT91C_TC0_IDR ((AT91_REG *) 0xFFFA0028) // (TC0) Interrupt Disable Register -#define AT91C_TC0_SR ((AT91_REG *) 0xFFFA0020) // (TC0) Status Register -#define AT91C_TC0_RB ((AT91_REG *) 0xFFFA0018) // (TC0) Register B -#define AT91C_TC0_CV ((AT91_REG *) 0xFFFA0010) // (TC0) Counter Value -#define AT91C_TC0_CCR ((AT91_REG *) 0xFFFA0000) // (TC0) Channel Control Register -// ========== Register definition for TC1 peripheral ========== -#define AT91C_TC1_IMR ((AT91_REG *) 0xFFFA006C) // (TC1) Interrupt Mask Register -#define AT91C_TC1_IER ((AT91_REG *) 0xFFFA0064) // (TC1) Interrupt Enable Register -#define AT91C_TC1_RC ((AT91_REG *) 0xFFFA005C) // (TC1) Register C -#define AT91C_TC1_RA ((AT91_REG *) 0xFFFA0054) // (TC1) Register A -#define AT91C_TC1_CMR ((AT91_REG *) 0xFFFA0044) // (TC1) Channel Mode Register (Capture Mode / Waveform Mode) -#define AT91C_TC1_IDR ((AT91_REG *) 0xFFFA0068) // (TC1) Interrupt Disable Register -#define AT91C_TC1_SR ((AT91_REG *) 0xFFFA0060) // (TC1) Status Register -#define AT91C_TC1_RB ((AT91_REG *) 0xFFFA0058) // (TC1) Register B -#define AT91C_TC1_CV ((AT91_REG *) 0xFFFA0050) // (TC1) Counter Value -#define AT91C_TC1_CCR ((AT91_REG *) 0xFFFA0040) // (TC1) Channel Control Register -// ========== Register definition for TC2 peripheral ========== -#define AT91C_TC2_IMR ((AT91_REG *) 0xFFFA00AC) // (TC2) Interrupt Mask Register -#define AT91C_TC2_IER ((AT91_REG *) 0xFFFA00A4) // (TC2) Interrupt Enable Register -#define AT91C_TC2_RC ((AT91_REG *) 0xFFFA009C) // (TC2) Register C -#define AT91C_TC2_RA ((AT91_REG *) 0xFFFA0094) // (TC2) Register A -#define AT91C_TC2_CMR ((AT91_REG *) 0xFFFA0084) // (TC2) Channel Mode Register (Capture Mode / Waveform Mode) -#define AT91C_TC2_IDR ((AT91_REG *) 0xFFFA00A8) // (TC2) Interrupt Disable Register -#define AT91C_TC2_SR ((AT91_REG *) 0xFFFA00A0) // (TC2) Status Register -#define AT91C_TC2_RB ((AT91_REG *) 0xFFFA0098) // (TC2) Register B -#define AT91C_TC2_CV ((AT91_REG *) 0xFFFA0090) // (TC2) Counter Value -#define AT91C_TC2_CCR ((AT91_REG *) 0xFFFA0080) // (TC2) Channel Control Register -// ========== Register definition for TCB peripheral ========== -#define AT91C_TCB_BMR ((AT91_REG *) 0xFFFA00C4) // (TCB) TC Block Mode Register -#define AT91C_TCB_BCR ((AT91_REG *) 0xFFFA00C0) // (TCB) TC Block Control Register -// ========== Register definition for CAN_MB0 peripheral ========== -#define AT91C_CAN_MB0_MCR ((AT91_REG *) 0xFFFD021C) // (CAN_MB0) MailBox Control Register -#define AT91C_CAN_MB0_MDL ((AT91_REG *) 0xFFFD0214) // (CAN_MB0) MailBox Data Low Register -#define AT91C_CAN_MB0_MFID ((AT91_REG *) 0xFFFD020C) // (CAN_MB0) MailBox Family ID Register -#define AT91C_CAN_MB0_MAM ((AT91_REG *) 0xFFFD0204) // (CAN_MB0) MailBox Acceptance Mask Register -#define AT91C_CAN_MB0_MDH ((AT91_REG *) 0xFFFD0218) // (CAN_MB0) MailBox Data High Register -#define AT91C_CAN_MB0_MSR ((AT91_REG *) 0xFFFD0210) // (CAN_MB0) MailBox Status Register -#define AT91C_CAN_MB0_MID ((AT91_REG *) 0xFFFD0208) // (CAN_MB0) MailBox ID Register -#define AT91C_CAN_MB0_MMR ((AT91_REG *) 0xFFFD0200) // (CAN_MB0) MailBox Mode Register -// ========== Register definition for CAN_MB1 peripheral ========== -#define AT91C_CAN_MB1_MCR ((AT91_REG *) 0xFFFD023C) // (CAN_MB1) MailBox Control Register -#define AT91C_CAN_MB1_MDL ((AT91_REG *) 0xFFFD0234) // (CAN_MB1) MailBox Data Low Register -#define AT91C_CAN_MB1_MFID ((AT91_REG *) 0xFFFD022C) // (CAN_MB1) MailBox Family ID Register -#define AT91C_CAN_MB1_MAM ((AT91_REG *) 0xFFFD0224) // (CAN_MB1) MailBox Acceptance Mask Register -#define AT91C_CAN_MB1_MDH ((AT91_REG *) 0xFFFD0238) // (CAN_MB1) MailBox Data High Register -#define AT91C_CAN_MB1_MSR ((AT91_REG *) 0xFFFD0230) // (CAN_MB1) MailBox Status Register -#define AT91C_CAN_MB1_MID ((AT91_REG *) 0xFFFD0228) // (CAN_MB1) MailBox ID Register -#define AT91C_CAN_MB1_MMR ((AT91_REG *) 0xFFFD0220) // (CAN_MB1) MailBox Mode Register -// ========== Register definition for CAN_MB2 peripheral ========== -#define AT91C_CAN_MB2_MCR ((AT91_REG *) 0xFFFD025C) // (CAN_MB2) MailBox Control Register -#define AT91C_CAN_MB2_MDL ((AT91_REG *) 0xFFFD0254) // (CAN_MB2) MailBox Data Low Register -#define AT91C_CAN_MB2_MFID ((AT91_REG *) 0xFFFD024C) // (CAN_MB2) MailBox Family ID Register -#define AT91C_CAN_MB2_MAM ((AT91_REG *) 0xFFFD0244) // (CAN_MB2) MailBox Acceptance Mask Register -#define AT91C_CAN_MB2_MDH ((AT91_REG *) 0xFFFD0258) // (CAN_MB2) MailBox Data High Register -#define AT91C_CAN_MB2_MSR ((AT91_REG *) 0xFFFD0250) // (CAN_MB2) MailBox Status Register -#define AT91C_CAN_MB2_MID ((AT91_REG *) 0xFFFD0248) // (CAN_MB2) MailBox ID Register -#define AT91C_CAN_MB2_MMR ((AT91_REG *) 0xFFFD0240) // (CAN_MB2) MailBox Mode Register -// ========== Register definition for CAN_MB3 peripheral ========== -#define AT91C_CAN_MB3_MCR ((AT91_REG *) 0xFFFD027C) // (CAN_MB3) MailBox Control Register -#define AT91C_CAN_MB3_MDL ((AT91_REG *) 0xFFFD0274) // (CAN_MB3) MailBox Data Low Register -#define AT91C_CAN_MB3_MFID ((AT91_REG *) 0xFFFD026C) // (CAN_MB3) MailBox Family ID Register -#define AT91C_CAN_MB3_MAM ((AT91_REG *) 0xFFFD0264) // (CAN_MB3) MailBox Acceptance Mask Register -#define AT91C_CAN_MB3_MDH ((AT91_REG *) 0xFFFD0278) // (CAN_MB3) MailBox Data High Register -#define AT91C_CAN_MB3_MSR ((AT91_REG *) 0xFFFD0270) // (CAN_MB3) MailBox Status Register -#define AT91C_CAN_MB3_MID ((AT91_REG *) 0xFFFD0268) // (CAN_MB3) MailBox ID Register -#define AT91C_CAN_MB3_MMR ((AT91_REG *) 0xFFFD0260) // (CAN_MB3) MailBox Mode Register -// ========== Register definition for CAN_MB4 peripheral ========== -#define AT91C_CAN_MB4_MCR ((AT91_REG *) 0xFFFD029C) // (CAN_MB4) MailBox Control Register -#define AT91C_CAN_MB4_MDL ((AT91_REG *) 0xFFFD0294) // (CAN_MB4) MailBox Data Low Register -#define AT91C_CAN_MB4_MFID ((AT91_REG *) 0xFFFD028C) // (CAN_MB4) MailBox Family ID Register -#define AT91C_CAN_MB4_MAM ((AT91_REG *) 0xFFFD0284) // (CAN_MB4) MailBox Acceptance Mask Register -#define AT91C_CAN_MB4_MDH ((AT91_REG *) 0xFFFD0298) // (CAN_MB4) MailBox Data High Register -#define AT91C_CAN_MB4_MSR ((AT91_REG *) 0xFFFD0290) // (CAN_MB4) MailBox Status Register -#define AT91C_CAN_MB4_MID ((AT91_REG *) 0xFFFD0288) // (CAN_MB4) MailBox ID Register -#define AT91C_CAN_MB4_MMR ((AT91_REG *) 0xFFFD0280) // (CAN_MB4) MailBox Mode Register -// ========== Register definition for CAN_MB5 peripheral ========== -#define AT91C_CAN_MB5_MCR ((AT91_REG *) 0xFFFD02BC) // (CAN_MB5) MailBox Control Register -#define AT91C_CAN_MB5_MDL ((AT91_REG *) 0xFFFD02B4) // (CAN_MB5) MailBox Data Low Register -#define AT91C_CAN_MB5_MFID ((AT91_REG *) 0xFFFD02AC) // (CAN_MB5) MailBox Family ID Register -#define AT91C_CAN_MB5_MAM ((AT91_REG *) 0xFFFD02A4) // (CAN_MB5) MailBox Acceptance Mask Register -#define AT91C_CAN_MB5_MDH ((AT91_REG *) 0xFFFD02B8) // (CAN_MB5) MailBox Data High Register -#define AT91C_CAN_MB5_MSR ((AT91_REG *) 0xFFFD02B0) // (CAN_MB5) MailBox Status Register -#define AT91C_CAN_MB5_MID ((AT91_REG *) 0xFFFD02A8) // (CAN_MB5) MailBox ID Register -#define AT91C_CAN_MB5_MMR ((AT91_REG *) 0xFFFD02A0) // (CAN_MB5) MailBox Mode Register -// ========== Register definition for CAN_MB6 peripheral ========== -#define AT91C_CAN_MB6_MAM ((AT91_REG *) 0xFFFD02C4) // (CAN_MB6) MailBox Acceptance Mask Register -#define AT91C_CAN_MB6_MDH ((AT91_REG *) 0xFFFD02D8) // (CAN_MB6) MailBox Data High Register -#define AT91C_CAN_MB6_MSR ((AT91_REG *) 0xFFFD02D0) // (CAN_MB6) MailBox Status Register -#define AT91C_CAN_MB6_MID ((AT91_REG *) 0xFFFD02C8) // (CAN_MB6) MailBox ID Register -#define AT91C_CAN_MB6_MMR ((AT91_REG *) 0xFFFD02C0) // (CAN_MB6) MailBox Mode Register -#define AT91C_CAN_MB6_MCR ((AT91_REG *) 0xFFFD02DC) // (CAN_MB6) MailBox Control Register -#define AT91C_CAN_MB6_MDL ((AT91_REG *) 0xFFFD02D4) // (CAN_MB6) MailBox Data Low Register -#define AT91C_CAN_MB6_MFID ((AT91_REG *) 0xFFFD02CC) // (CAN_MB6) MailBox Family ID Register -// ========== Register definition for CAN_MB7 peripheral ========== -#define AT91C_CAN_MB7_MDH ((AT91_REG *) 0xFFFD02F8) // (CAN_MB7) MailBox Data High Register -#define AT91C_CAN_MB7_MSR ((AT91_REG *) 0xFFFD02F0) // (CAN_MB7) MailBox Status Register -#define AT91C_CAN_MB7_MID ((AT91_REG *) 0xFFFD02E8) // (CAN_MB7) MailBox ID Register -#define AT91C_CAN_MB7_MMR ((AT91_REG *) 0xFFFD02E0) // (CAN_MB7) MailBox Mode Register -#define AT91C_CAN_MB7_MCR ((AT91_REG *) 0xFFFD02FC) // (CAN_MB7) MailBox Control Register -#define AT91C_CAN_MB7_MDL ((AT91_REG *) 0xFFFD02F4) // (CAN_MB7) MailBox Data Low Register -#define AT91C_CAN_MB7_MFID ((AT91_REG *) 0xFFFD02EC) // (CAN_MB7) MailBox Family ID Register -#define AT91C_CAN_MB7_MAM ((AT91_REG *) 0xFFFD02E4) // (CAN_MB7) MailBox Acceptance Mask Register -// ========== Register definition for CAN peripheral ========== -#define AT91C_CAN_IMR ((AT91_REG *) 0xFFFD000C) // (CAN) Interrupt Mask Register -#define AT91C_CAN_IER ((AT91_REG *) 0xFFFD0004) // (CAN) Interrupt Enable Register -#define AT91C_CAN_ECR ((AT91_REG *) 0xFFFD0020) // (CAN) Error Counter Register -#define AT91C_CAN_TIM ((AT91_REG *) 0xFFFD0018) // (CAN) Timer Register -#define AT91C_CAN_SR ((AT91_REG *) 0xFFFD0010) // (CAN) Status Register -#define AT91C_CAN_IDR ((AT91_REG *) 0xFFFD0008) // (CAN) Interrupt Disable Register -#define AT91C_CAN_MR ((AT91_REG *) 0xFFFD0000) // (CAN) Mode Register -#define AT91C_CAN_BR ((AT91_REG *) 0xFFFD0014) // (CAN) Baudrate Register -#define AT91C_CAN_TIMESTP ((AT91_REG *) 0xFFFD001C) // (CAN) Time Stamp Register -#define AT91C_CAN_TCR ((AT91_REG *) 0xFFFD0024) // (CAN) Transfer Command Register -#define AT91C_CAN_ACR ((AT91_REG *) 0xFFFD0028) // (CAN) Abort Command Register -#define AT91C_CAN_VR ((AT91_REG *) 0xFFFD00FC) // (CAN) Version Register -// ========== Register definition for EMAC peripheral ========== -#define AT91C_EMAC_TID ((AT91_REG *) 0xFFFDC0B8) // (EMAC) Type ID Checking Register -#define AT91C_EMAC_SA3L ((AT91_REG *) 0xFFFDC0A8) // (EMAC) Specific Address 3 Bottom, First 4 bytes -#define AT91C_EMAC_STE ((AT91_REG *) 0xFFFDC084) // (EMAC) SQE Test Error Register -#define AT91C_EMAC_RSE ((AT91_REG *) 0xFFFDC074) // (EMAC) Receive Symbol Errors Register -#define AT91C_EMAC_IDR ((AT91_REG *) 0xFFFDC02C) // (EMAC) Interrupt Disable Register -#define AT91C_EMAC_TBQP ((AT91_REG *) 0xFFFDC01C) // (EMAC) Transmit Buffer Queue Pointer -#define AT91C_EMAC_TPQ ((AT91_REG *) 0xFFFDC0BC) // (EMAC) Transmit Pause Quantum Register -#define AT91C_EMAC_SA1L ((AT91_REG *) 0xFFFDC098) // (EMAC) Specific Address 1 Bottom, First 4 bytes -#define AT91C_EMAC_RLE ((AT91_REG *) 0xFFFDC088) // (EMAC) Receive Length Field Mismatch Register -#define AT91C_EMAC_IMR ((AT91_REG *) 0xFFFDC030) // (EMAC) Interrupt Mask Register -#define AT91C_EMAC_SA1H ((AT91_REG *) 0xFFFDC09C) // (EMAC) Specific Address 1 Top, Last 2 bytes -#define AT91C_EMAC_PFR ((AT91_REG *) 0xFFFDC03C) // (EMAC) Pause Frames received Register -#define AT91C_EMAC_FCSE ((AT91_REG *) 0xFFFDC050) // (EMAC) Frame Check Sequence Error Register -#define AT91C_EMAC_FTO ((AT91_REG *) 0xFFFDC040) // (EMAC) Frames Transmitted OK Register -#define AT91C_EMAC_TUND ((AT91_REG *) 0xFFFDC064) // (EMAC) Transmit Underrun Error Register -#define AT91C_EMAC_ALE ((AT91_REG *) 0xFFFDC054) // (EMAC) Alignment Error Register -#define AT91C_EMAC_SCF ((AT91_REG *) 0xFFFDC044) // (EMAC) Single Collision Frame Register -#define AT91C_EMAC_SA3H ((AT91_REG *) 0xFFFDC0AC) // (EMAC) Specific Address 3 Top, Last 2 bytes -#define AT91C_EMAC_ELE ((AT91_REG *) 0xFFFDC078) // (EMAC) Excessive Length Errors Register -#define AT91C_EMAC_CSE ((AT91_REG *) 0xFFFDC068) // (EMAC) Carrier Sense Error Register -#define AT91C_EMAC_DTF ((AT91_REG *) 0xFFFDC058) // (EMAC) Deferred Transmission Frame Register -#define AT91C_EMAC_RSR ((AT91_REG *) 0xFFFDC020) // (EMAC) Receive Status Register -#define AT91C_EMAC_USRIO ((AT91_REG *) 0xFFFDC0C0) // (EMAC) USER Input/Output Register -#define AT91C_EMAC_SA4L ((AT91_REG *) 0xFFFDC0B0) // (EMAC) Specific Address 4 Bottom, First 4 bytes -#define AT91C_EMAC_RRE ((AT91_REG *) 0xFFFDC06C) // (EMAC) Receive Ressource Error Register -#define AT91C_EMAC_RJA ((AT91_REG *) 0xFFFDC07C) // (EMAC) Receive Jabbers Register -#define AT91C_EMAC_TPF ((AT91_REG *) 0xFFFDC08C) // (EMAC) Transmitted Pause Frames Register -#define AT91C_EMAC_ISR ((AT91_REG *) 0xFFFDC024) // (EMAC) Interrupt Status Register -#define AT91C_EMAC_MAN ((AT91_REG *) 0xFFFDC034) // (EMAC) PHY Maintenance Register -#define AT91C_EMAC_WOL ((AT91_REG *) 0xFFFDC0C4) // (EMAC) Wake On LAN Register -#define AT91C_EMAC_USF ((AT91_REG *) 0xFFFDC080) // (EMAC) Undersize Frames Register -#define AT91C_EMAC_HRB ((AT91_REG *) 0xFFFDC090) // (EMAC) Hash Address Bottom[31:0] -#define AT91C_EMAC_PTR ((AT91_REG *) 0xFFFDC038) // (EMAC) Pause Time Register -#define AT91C_EMAC_HRT ((AT91_REG *) 0xFFFDC094) // (EMAC) Hash Address Top[63:32] -#define AT91C_EMAC_REV ((AT91_REG *) 0xFFFDC0FC) // (EMAC) Revision Register -#define AT91C_EMAC_MCF ((AT91_REG *) 0xFFFDC048) // (EMAC) Multiple Collision Frame Register -#define AT91C_EMAC_SA2L ((AT91_REG *) 0xFFFDC0A0) // (EMAC) Specific Address 2 Bottom, First 4 bytes -#define AT91C_EMAC_NCR ((AT91_REG *) 0xFFFDC000) // (EMAC) Network Control Register -#define AT91C_EMAC_FRO ((AT91_REG *) 0xFFFDC04C) // (EMAC) Frames Received OK Register -#define AT91C_EMAC_LCOL ((AT91_REG *) 0xFFFDC05C) // (EMAC) Late Collision Register -#define AT91C_EMAC_SA4H ((AT91_REG *) 0xFFFDC0B4) // (EMAC) Specific Address 4 Top, Last 2 bytes -#define AT91C_EMAC_NCFGR ((AT91_REG *) 0xFFFDC004) // (EMAC) Network Configuration Register -#define AT91C_EMAC_TSR ((AT91_REG *) 0xFFFDC014) // (EMAC) Transmit Status Register -#define AT91C_EMAC_SA2H ((AT91_REG *) 0xFFFDC0A4) // (EMAC) Specific Address 2 Top, Last 2 bytes -#define AT91C_EMAC_ECOL ((AT91_REG *) 0xFFFDC060) // (EMAC) Excessive Collision Register -#define AT91C_EMAC_ROV ((AT91_REG *) 0xFFFDC070) // (EMAC) Receive Overrun Errors Register -#define AT91C_EMAC_NSR ((AT91_REG *) 0xFFFDC008) // (EMAC) Network Status Register -#define AT91C_EMAC_RBQP ((AT91_REG *) 0xFFFDC018) // (EMAC) Receive Buffer Queue Pointer -#define AT91C_EMAC_IER ((AT91_REG *) 0xFFFDC028) // (EMAC) Interrupt Enable Register -// ========== Register definition for PDC_ADC peripheral ========== -#define AT91C_ADC_PTCR ((AT91_REG *) 0xFFFD8120) // (PDC_ADC) PDC Transfer Control Register -#define AT91C_ADC_TNPR ((AT91_REG *) 0xFFFD8118) // (PDC_ADC) Transmit Next Pointer Register -#define AT91C_ADC_RNPR ((AT91_REG *) 0xFFFD8110) // (PDC_ADC) Receive Next Pointer Register -#define AT91C_ADC_TPR ((AT91_REG *) 0xFFFD8108) // (PDC_ADC) Transmit Pointer Register -#define AT91C_ADC_RPR ((AT91_REG *) 0xFFFD8100) // (PDC_ADC) Receive Pointer Register -#define AT91C_ADC_PTSR ((AT91_REG *) 0xFFFD8124) // (PDC_ADC) PDC Transfer Status Register -#define AT91C_ADC_TNCR ((AT91_REG *) 0xFFFD811C) // (PDC_ADC) Transmit Next Counter Register -#define AT91C_ADC_RNCR ((AT91_REG *) 0xFFFD8114) // (PDC_ADC) Receive Next Counter Register -#define AT91C_ADC_TCR ((AT91_REG *) 0xFFFD810C) // (PDC_ADC) Transmit Counter Register -#define AT91C_ADC_RCR ((AT91_REG *) 0xFFFD8104) // (PDC_ADC) Receive Counter Register -// ========== Register definition for ADC peripheral ========== -#define AT91C_ADC_IMR ((AT91_REG *) 0xFFFD802C) // (ADC) ADC Interrupt Mask Register -#define AT91C_ADC_CDR4 ((AT91_REG *) 0xFFFD8040) // (ADC) ADC Channel Data Register 4 -#define AT91C_ADC_CDR2 ((AT91_REG *) 0xFFFD8038) // (ADC) ADC Channel Data Register 2 -#define AT91C_ADC_CDR0 ((AT91_REG *) 0xFFFD8030) // (ADC) ADC Channel Data Register 0 -#define AT91C_ADC_CDR7 ((AT91_REG *) 0xFFFD804C) // (ADC) ADC Channel Data Register 7 -#define AT91C_ADC_CDR1 ((AT91_REG *) 0xFFFD8034) // (ADC) ADC Channel Data Register 1 -#define AT91C_ADC_CDR3 ((AT91_REG *) 0xFFFD803C) // (ADC) ADC Channel Data Register 3 -#define AT91C_ADC_CDR5 ((AT91_REG *) 0xFFFD8044) // (ADC) ADC Channel Data Register 5 -#define AT91C_ADC_MR ((AT91_REG *) 0xFFFD8004) // (ADC) ADC Mode Register -#define AT91C_ADC_CDR6 ((AT91_REG *) 0xFFFD8048) // (ADC) ADC Channel Data Register 6 -#define AT91C_ADC_CR ((AT91_REG *) 0xFFFD8000) // (ADC) ADC Control Register -#define AT91C_ADC_CHER ((AT91_REG *) 0xFFFD8010) // (ADC) ADC Channel Enable Register -#define AT91C_ADC_CHSR ((AT91_REG *) 0xFFFD8018) // (ADC) ADC Channel Status Register -#define AT91C_ADC_IER ((AT91_REG *) 0xFFFD8024) // (ADC) ADC Interrupt Enable Register -#define AT91C_ADC_SR ((AT91_REG *) 0xFFFD801C) // (ADC) ADC Status Register -#define AT91C_ADC_CHDR ((AT91_REG *) 0xFFFD8014) // (ADC) ADC Channel Disable Register -#define AT91C_ADC_IDR ((AT91_REG *) 0xFFFD8028) // (ADC) ADC Interrupt Disable Register -#define AT91C_ADC_LCDR ((AT91_REG *) 0xFFFD8020) // (ADC) ADC Last Converted Data Register - -// ***************************************************************************** -// PIO DEFINITIONS FOR AT91SAM7X256 -// ***************************************************************************** -#define AT91C_PIO_PA0 ((unsigned int) 1 << 0) // Pin Controlled by PA0 -#define AT91C_PA0_RXD0 ((unsigned int) AT91C_PIO_PA0) // USART 0 Receive Data -#define AT91C_PIO_PA1 ((unsigned int) 1 << 1) // Pin Controlled by PA1 -#define AT91C_PA1_TXD0 ((unsigned int) AT91C_PIO_PA1) // USART 0 Transmit Data -#define AT91C_PIO_PA10 ((unsigned int) 1 << 10) // Pin Controlled by PA10 -#define AT91C_PA10_TWD ((unsigned int) AT91C_PIO_PA10) // TWI Two-wire Serial Data -#define AT91C_PIO_PA11 ((unsigned int) 1 << 11) // Pin Controlled by PA11 -#define AT91C_PA11_TWCK ((unsigned int) AT91C_PIO_PA11) // TWI Two-wire Serial Clock -#define AT91C_PIO_PA12 ((unsigned int) 1 << 12) // Pin Controlled by PA12 -#define AT91C_PA12_SPI0_NPCS0 ((unsigned int) AT91C_PIO_PA12) // SPI 0 Peripheral Chip Select 0 -#define AT91C_PIO_PA13 ((unsigned int) 1 << 13) // Pin Controlled by PA13 -#define AT91C_PA13_SPI0_NPCS1 ((unsigned int) AT91C_PIO_PA13) // SPI 0 Peripheral Chip Select 1 -#define AT91C_PA13_PCK1 ((unsigned int) AT91C_PIO_PA13) // PMC Programmable Clock Output 1 -#define AT91C_PIO_PA14 ((unsigned int) 1 << 14) // Pin Controlled by PA14 -#define AT91C_PA14_SPI0_NPCS2 ((unsigned int) AT91C_PIO_PA14) // SPI 0 Peripheral Chip Select 2 -#define AT91C_PA14_IRQ1 ((unsigned int) AT91C_PIO_PA14) // External Interrupt 1 -#define AT91C_PIO_PA15 ((unsigned int) 1 << 15) // Pin Controlled by PA15 -#define AT91C_PA15_SPI0_NPCS3 ((unsigned int) AT91C_PIO_PA15) // SPI 0 Peripheral Chip Select 3 -#define AT91C_PA15_TCLK2 ((unsigned int) AT91C_PIO_PA15) // Timer Counter 2 external clock input -#define AT91C_PIO_PA16 ((unsigned int) 1 << 16) // Pin Controlled by PA16 -#define AT91C_PA16_SPI0_MISO ((unsigned int) AT91C_PIO_PA16) // SPI 0 Master In Slave -#define AT91C_PIO_PA17 ((unsigned int) 1 << 17) // Pin Controlled by PA17 -#define AT91C_PA17_SPI0_MOSI ((unsigned int) AT91C_PIO_PA17) // SPI 0 Master Out Slave -#define AT91C_PIO_PA18 ((unsigned int) 1 << 18) // Pin Controlled by PA18 -#define AT91C_PA18_SPI0_SPCK ((unsigned int) AT91C_PIO_PA18) // SPI 0 Serial Clock -#define AT91C_PIO_PA19 ((unsigned int) 1 << 19) // Pin Controlled by PA19 -#define AT91C_PA19_CANRX ((unsigned int) AT91C_PIO_PA19) // CAN Receive -#define AT91C_PIO_PA2 ((unsigned int) 1 << 2) // Pin Controlled by PA2 -#define AT91C_PA2_SCK0 ((unsigned int) AT91C_PIO_PA2) // USART 0 Serial Clock -#define AT91C_PA2_SPI1_NPCS1 ((unsigned int) AT91C_PIO_PA2) // SPI 1 Peripheral Chip Select 1 -#define AT91C_PIO_PA20 ((unsigned int) 1 << 20) // Pin Controlled by PA20 -#define AT91C_PA20_CANTX ((unsigned int) AT91C_PIO_PA20) // CAN Transmit -#define AT91C_PIO_PA21 ((unsigned int) 1 << 21) // Pin Controlled by PA21 -#define AT91C_PA21_TF ((unsigned int) AT91C_PIO_PA21) // SSC Transmit Frame Sync -#define AT91C_PA21_SPI1_NPCS0 ((unsigned int) AT91C_PIO_PA21) // SPI 1 Peripheral Chip Select 0 -#define AT91C_PIO_PA22 ((unsigned int) 1 << 22) // Pin Controlled by PA22 -#define AT91C_PA22_TK ((unsigned int) AT91C_PIO_PA22) // SSC Transmit Clock -#define AT91C_PA22_SPI1_SPCK ((unsigned int) AT91C_PIO_PA22) // SPI 1 Serial Clock -#define AT91C_PIO_PA23 ((unsigned int) 1 << 23) // Pin Controlled by PA23 -#define AT91C_PA23_TD ((unsigned int) AT91C_PIO_PA23) // SSC Transmit data -#define AT91C_PA23_SPI1_MOSI ((unsigned int) AT91C_PIO_PA23) // SPI 1 Master Out Slave -#define AT91C_PIO_PA24 ((unsigned int) 1 << 24) // Pin Controlled by PA24 -#define AT91C_PA24_RD ((unsigned int) AT91C_PIO_PA24) // SSC Receive Data -#define AT91C_PA24_SPI1_MISO ((unsigned int) AT91C_PIO_PA24) // SPI 1 Master In Slave -#define AT91C_PIO_PA25 ((unsigned int) 1 << 25) // Pin Controlled by PA25 -#define AT91C_PA25_RK ((unsigned int) AT91C_PIO_PA25) // SSC Receive Clock -#define AT91C_PA25_SPI1_NPCS1 ((unsigned int) AT91C_PIO_PA25) // SPI 1 Peripheral Chip Select 1 -#define AT91C_PIO_PA26 ((unsigned int) 1 << 26) // Pin Controlled by PA26 -#define AT91C_PA26_RF ((unsigned int) AT91C_PIO_PA26) // SSC Receive Frame Sync -#define AT91C_PA26_SPI1_NPCS2 ((unsigned int) AT91C_PIO_PA26) // SPI 1 Peripheral Chip Select 2 -#define AT91C_PIO_PA27 ((unsigned int) 1 << 27) // Pin Controlled by PA27 -#define AT91C_PA27_DRXD ((unsigned int) AT91C_PIO_PA27) // DBGU Debug Receive Data -#define AT91C_PA27_PCK3 ((unsigned int) AT91C_PIO_PA27) // PMC Programmable Clock Output 3 -#define AT91C_PIO_PA28 ((unsigned int) 1 << 28) // Pin Controlled by PA28 -#define AT91C_PA28_DTXD ((unsigned int) AT91C_PIO_PA28) // DBGU Debug Transmit Data -#define AT91C_PIO_PA29 ((unsigned int) 1 << 29) // Pin Controlled by PA29 -#define AT91C_PA29_FIQ ((unsigned int) AT91C_PIO_PA29) // AIC Fast Interrupt Input -#define AT91C_PA29_SPI1_NPCS3 ((unsigned int) AT91C_PIO_PA29) // SPI 1 Peripheral Chip Select 3 -#define AT91C_PIO_PA3 ((unsigned int) 1 << 3) // Pin Controlled by PA3 -#define AT91C_PA3_RTS0 ((unsigned int) AT91C_PIO_PA3) // USART 0 Ready To Send -#define AT91C_PA3_SPI1_NPCS2 ((unsigned int) AT91C_PIO_PA3) // SPI 1 Peripheral Chip Select 2 -#define AT91C_PIO_PA30 ((unsigned int) 1 << 30) // Pin Controlled by PA30 -#define AT91C_PA30_IRQ0 ((unsigned int) AT91C_PIO_PA30) // External Interrupt 0 -#define AT91C_PA30_PCK2 ((unsigned int) AT91C_PIO_PA30) // PMC Programmable Clock Output 2 -#define AT91C_PIO_PA4 ((unsigned int) 1 << 4) // Pin Controlled by PA4 -#define AT91C_PA4_CTS0 ((unsigned int) AT91C_PIO_PA4) // USART 0 Clear To Send -#define AT91C_PA4_SPI1_NPCS3 ((unsigned int) AT91C_PIO_PA4) // SPI 1 Peripheral Chip Select 3 -#define AT91C_PIO_PA5 ((unsigned int) 1 << 5) // Pin Controlled by PA5 -#define AT91C_PA5_RXD1 ((unsigned int) AT91C_PIO_PA5) // USART 1 Receive Data -#define AT91C_PIO_PA6 ((unsigned int) 1 << 6) // Pin Controlled by PA6 -#define AT91C_PA6_TXD1 ((unsigned int) AT91C_PIO_PA6) // USART 1 Transmit Data -#define AT91C_PIO_PA7 ((unsigned int) 1 << 7) // Pin Controlled by PA7 -#define AT91C_PA7_SCK1 ((unsigned int) AT91C_PIO_PA7) // USART 1 Serial Clock -#define AT91C_PA7_SPI0_NPCS1 ((unsigned int) AT91C_PIO_PA7) // SPI 0 Peripheral Chip Select 1 -#define AT91C_PIO_PA8 ((unsigned int) 1 << 8) // Pin Controlled by PA8 -#define AT91C_PA8_RTS1 ((unsigned int) AT91C_PIO_PA8) // USART 1 Ready To Send -#define AT91C_PA8_SPI0_NPCS2 ((unsigned int) AT91C_PIO_PA8) // SPI 0 Peripheral Chip Select 2 -#define AT91C_PIO_PA9 ((unsigned int) 1 << 9) // Pin Controlled by PA9 -#define AT91C_PA9_CTS1 ((unsigned int) AT91C_PIO_PA9) // USART 1 Clear To Send -#define AT91C_PA9_SPI0_NPCS3 ((unsigned int) AT91C_PIO_PA9) // SPI 0 Peripheral Chip Select 3 -#define AT91C_PIO_PB0 ((unsigned int) 1 << 0) // Pin Controlled by PB0 -#define AT91C_PB0_ETXCK_EREFCK ((unsigned int) AT91C_PIO_PB0) // Ethernet MAC Transmit Clock/Reference Clock -#define AT91C_PB0_PCK0 ((unsigned int) AT91C_PIO_PB0) // PMC Programmable Clock Output 0 -#define AT91C_PIO_PB1 ((unsigned int) 1 << 1) // Pin Controlled by PB1 -#define AT91C_PB1_ETXEN ((unsigned int) AT91C_PIO_PB1) // Ethernet MAC Transmit Enable -#define AT91C_PIO_PB10 ((unsigned int) 1 << 10) // Pin Controlled by PB10 -#define AT91C_PB10_ETX2 ((unsigned int) AT91C_PIO_PB10) // Ethernet MAC Transmit Data 2 -#define AT91C_PB10_SPI1_NPCS1 ((unsigned int) AT91C_PIO_PB10) // SPI 1 Peripheral Chip Select 1 -#define AT91C_PIO_PB11 ((unsigned int) 1 << 11) // Pin Controlled by PB11 -#define AT91C_PB11_ETX3 ((unsigned int) AT91C_PIO_PB11) // Ethernet MAC Transmit Data 3 -#define AT91C_PB11_SPI1_NPCS2 ((unsigned int) AT91C_PIO_PB11) // SPI 1 Peripheral Chip Select 2 -#define AT91C_PIO_PB12 ((unsigned int) 1 << 12) // Pin Controlled by PB12 -#define AT91C_PB12_ETXER ((unsigned int) AT91C_PIO_PB12) // Ethernet MAC Transmikt Coding Error -#define AT91C_PB12_TCLK0 ((unsigned int) AT91C_PIO_PB12) // Timer Counter 0 external clock input -#define AT91C_PIO_PB13 ((unsigned int) 1 << 13) // Pin Controlled by PB13 -#define AT91C_PB13_ERX2 ((unsigned int) AT91C_PIO_PB13) // Ethernet MAC Receive Data 2 -#define AT91C_PB13_SPI0_NPCS1 ((unsigned int) AT91C_PIO_PB13) // SPI 0 Peripheral Chip Select 1 -#define AT91C_PIO_PB14 ((unsigned int) 1 << 14) // Pin Controlled by PB14 -#define AT91C_PB14_ERX3 ((unsigned int) AT91C_PIO_PB14) // Ethernet MAC Receive Data 3 -#define AT91C_PB14_SPI0_NPCS2 ((unsigned int) AT91C_PIO_PB14) // SPI 0 Peripheral Chip Select 2 -#define AT91C_PIO_PB15 ((unsigned int) 1 << 15) // Pin Controlled by PB15 -#define AT91C_PB15_ERXDV_ECRSDV ((unsigned int) AT91C_PIO_PB15) // Ethernet MAC Receive Data Valid -#define AT91C_PIO_PB16 ((unsigned int) 1 << 16) // Pin Controlled by PB16 -#define AT91C_PB16_ECOL ((unsigned int) AT91C_PIO_PB16) // Ethernet MAC Collision Detected -#define AT91C_PB16_SPI1_NPCS3 ((unsigned int) AT91C_PIO_PB16) // SPI 1 Peripheral Chip Select 3 -#define AT91C_PIO_PB17 ((unsigned int) 1 << 17) // Pin Controlled by PB17 -#define AT91C_PB17_ERXCK ((unsigned int) AT91C_PIO_PB17) // Ethernet MAC Receive Clock -#define AT91C_PB17_SPI0_NPCS3 ((unsigned int) AT91C_PIO_PB17) // SPI 0 Peripheral Chip Select 3 -#define AT91C_PIO_PB18 ((unsigned int) 1 << 18) // Pin Controlled by PB18 -#define AT91C_PB18_EF100 ((unsigned int) AT91C_PIO_PB18) // Ethernet MAC Force 100 Mbits/sec -#define AT91C_PB18_ADTRG ((unsigned int) AT91C_PIO_PB18) // ADC External Trigger -#define AT91C_PIO_PB19 ((unsigned int) 1 << 19) // Pin Controlled by PB19 -#define AT91C_PB19_PWM0 ((unsigned int) AT91C_PIO_PB19) // PWM Channel 0 -#define AT91C_PB19_TCLK1 ((unsigned int) AT91C_PIO_PB19) // Timer Counter 1 external clock input -#define AT91C_PIO_PB2 ((unsigned int) 1 << 2) // Pin Controlled by PB2 -#define AT91C_PB2_ETX0 ((unsigned int) AT91C_PIO_PB2) // Ethernet MAC Transmit Data 0 -#define AT91C_PIO_PB20 ((unsigned int) 1 << 20) // Pin Controlled by PB20 -#define AT91C_PB20_PWM1 ((unsigned int) AT91C_PIO_PB20) // PWM Channel 1 -#define AT91C_PB20_PCK0 ((unsigned int) AT91C_PIO_PB20) // PMC Programmable Clock Output 0 -#define AT91C_PIO_PB21 ((unsigned int) 1 << 21) // Pin Controlled by PB21 -#define AT91C_PB21_PWM2 ((unsigned int) AT91C_PIO_PB21) // PWM Channel 2 -#define AT91C_PB21_PCK1 ((unsigned int) AT91C_PIO_PB21) // PMC Programmable Clock Output 1 -#define AT91C_PIO_PB22 ((unsigned int) 1 << 22) // Pin Controlled by PB22 -#define AT91C_PB22_PWM3 ((unsigned int) AT91C_PIO_PB22) // PWM Channel 3 -#define AT91C_PB22_PCK2 ((unsigned int) AT91C_PIO_PB22) // PMC Programmable Clock Output 2 -#define AT91C_PIO_PB23 ((unsigned int) 1 << 23) // Pin Controlled by PB23 -#define AT91C_PB23_TIOA0 ((unsigned int) AT91C_PIO_PB23) // Timer Counter 0 Multipurpose Timer I/O Pin A -#define AT91C_PB23_DCD1 ((unsigned int) AT91C_PIO_PB23) // USART 1 Data Carrier Detect -#define AT91C_PIO_PB24 ((unsigned int) 1 << 24) // Pin Controlled by PB24 -#define AT91C_PB24_TIOB0 ((unsigned int) AT91C_PIO_PB24) // Timer Counter 0 Multipurpose Timer I/O Pin B -#define AT91C_PB24_DSR1 ((unsigned int) AT91C_PIO_PB24) // USART 1 Data Set ready -#define AT91C_PIO_PB25 ((unsigned int) 1 << 25) // Pin Controlled by PB25 -#define AT91C_PB25_TIOA1 ((unsigned int) AT91C_PIO_PB25) // Timer Counter 1 Multipurpose Timer I/O Pin A -#define AT91C_PB25_DTR1 ((unsigned int) AT91C_PIO_PB25) // USART 1 Data Terminal ready -#define AT91C_PIO_PB26 ((unsigned int) 1 << 26) // Pin Controlled by PB26 -#define AT91C_PB26_TIOB1 ((unsigned int) AT91C_PIO_PB26) // Timer Counter 1 Multipurpose Timer I/O Pin B -#define AT91C_PB26_RI1 ((unsigned int) AT91C_PIO_PB26) // USART 1 Ring Indicator -#define AT91C_PIO_PB27 ((unsigned int) 1 << 27) // Pin Controlled by PB27 -#define AT91C_PB27_TIOA2 ((unsigned int) AT91C_PIO_PB27) // Timer Counter 2 Multipurpose Timer I/O Pin A -#define AT91C_PB27_PWM0 ((unsigned int) AT91C_PIO_PB27) // PWM Channel 0 -#define AT91C_PIO_PB28 ((unsigned int) 1 << 28) // Pin Controlled by PB28 -#define AT91C_PB28_TIOB2 ((unsigned int) AT91C_PIO_PB28) // Timer Counter 2 Multipurpose Timer I/O Pin B -#define AT91C_PB28_PWM1 ((unsigned int) AT91C_PIO_PB28) // PWM Channel 1 -#define AT91C_PIO_PB29 ((unsigned int) 1 << 29) // Pin Controlled by PB29 -#define AT91C_PB29_PCK1 ((unsigned int) AT91C_PIO_PB29) // PMC Programmable Clock Output 1 -#define AT91C_PB29_PWM2 ((unsigned int) AT91C_PIO_PB29) // PWM Channel 2 -#define AT91C_PIO_PB3 ((unsigned int) 1 << 3) // Pin Controlled by PB3 -#define AT91C_PB3_ETX1 ((unsigned int) AT91C_PIO_PB3) // Ethernet MAC Transmit Data 1 -#define AT91C_PIO_PB30 ((unsigned int) 1 << 30) // Pin Controlled by PB30 -#define AT91C_PB30_PCK2 ((unsigned int) AT91C_PIO_PB30) // PMC Programmable Clock Output 2 -#define AT91C_PB30_PWM3 ((unsigned int) AT91C_PIO_PB30) // PWM Channel 3 -#define AT91C_PIO_PB4 ((unsigned int) 1 << 4) // Pin Controlled by PB4 -#define AT91C_PB4_ECRS ((unsigned int) AT91C_PIO_PB4) // Ethernet MAC Carrier Sense/Carrier Sense and Data Valid -#define AT91C_PIO_PB5 ((unsigned int) 1 << 5) // Pin Controlled by PB5 -#define AT91C_PB5_ERX0 ((unsigned int) AT91C_PIO_PB5) // Ethernet MAC Receive Data 0 -#define AT91C_PIO_PB6 ((unsigned int) 1 << 6) // Pin Controlled by PB6 -#define AT91C_PB6_ERX1 ((unsigned int) AT91C_PIO_PB6) // Ethernet MAC Receive Data 1 -#define AT91C_PIO_PB7 ((unsigned int) 1 << 7) // Pin Controlled by PB7 -#define AT91C_PB7_ERXER ((unsigned int) AT91C_PIO_PB7) // Ethernet MAC Receive Error -#define AT91C_PIO_PB8 ((unsigned int) 1 << 8) // Pin Controlled by PB8 -#define AT91C_PB8_EMDC ((unsigned int) AT91C_PIO_PB8) // Ethernet MAC Management Data Clock -#define AT91C_PIO_PB9 ((unsigned int) 1 << 9) // Pin Controlled by PB9 -#define AT91C_PB9_EMDIO ((unsigned int) AT91C_PIO_PB9) // Ethernet MAC Management Data Input/Output - -// ***************************************************************************** -// PERIPHERAL ID DEFINITIONS FOR AT91SAM7X256 -// ***************************************************************************** -#define AT91C_ID_FIQ ((unsigned int) 0) // Advanced Interrupt Controller (FIQ) -#define AT91C_ID_SYS ((unsigned int) 1) // System Peripheral -#define AT91C_ID_PIOA ((unsigned int) 2) // Parallel IO Controller A -#define AT91C_ID_PIOB ((unsigned int) 3) // Parallel IO Controller B -#define AT91C_ID_SPI0 ((unsigned int) 4) // Serial Peripheral Interface 0 -#define AT91C_ID_SPI1 ((unsigned int) 5) // Serial Peripheral Interface 1 -#define AT91C_ID_US0 ((unsigned int) 6) // USART 0 -#define AT91C_ID_US1 ((unsigned int) 7) // USART 1 -#define AT91C_ID_SSC ((unsigned int) 8) // Serial Synchronous Controller -#define AT91C_ID_TWI ((unsigned int) 9) // Two-Wire Interface -#define AT91C_ID_PWMC ((unsigned int) 10) // PWM Controller -#define AT91C_ID_UDP ((unsigned int) 11) // USB Device Port -#define AT91C_ID_TC0 ((unsigned int) 12) // Timer Counter 0 -#define AT91C_ID_TC1 ((unsigned int) 13) // Timer Counter 1 -#define AT91C_ID_TC2 ((unsigned int) 14) // Timer Counter 2 -#define AT91C_ID_CAN ((unsigned int) 15) // Control Area Network Controller -#define AT91C_ID_EMAC ((unsigned int) 16) // Ethernet MAC -#define AT91C_ID_ADC ((unsigned int) 17) // Analog-to-Digital Converter -#define AT91C_ID_18_Reserved ((unsigned int) 18) // Reserved -#define AT91C_ID_19_Reserved ((unsigned int) 19) // Reserved -#define AT91C_ID_20_Reserved ((unsigned int) 20) // Reserved -#define AT91C_ID_21_Reserved ((unsigned int) 21) // Reserved -#define AT91C_ID_22_Reserved ((unsigned int) 22) // Reserved -#define AT91C_ID_23_Reserved ((unsigned int) 23) // Reserved -#define AT91C_ID_24_Reserved ((unsigned int) 24) // Reserved -#define AT91C_ID_25_Reserved ((unsigned int) 25) // Reserved -#define AT91C_ID_26_Reserved ((unsigned int) 26) // Reserved -#define AT91C_ID_27_Reserved ((unsigned int) 27) // Reserved -#define AT91C_ID_28_Reserved ((unsigned int) 28) // Reserved -#define AT91C_ID_29_Reserved ((unsigned int) 29) // Reserved -#define AT91C_ID_IRQ0 ((unsigned int) 30) // Advanced Interrupt Controller (IRQ0) -#define AT91C_ID_IRQ1 ((unsigned int) 31) // Advanced Interrupt Controller (IRQ1) -#define AT91C_ALL_INT ((unsigned int) 0xC003FFFF) // ALL VALID INTERRUPTS - -// ***************************************************************************** -// BASE ADDRESS DEFINITIONS FOR AT91SAM7X256 -// ***************************************************************************** - -#ifdef TEST - -extern AT91S_AIC AicPeripheral; -extern AT91S_PIO PioAPeripheral; -extern AT91S_PIO PioBPeripheral; -extern AT91S_PMC PmcPeripheral; -extern AT91S_USART Usart0Peripheral; -extern AT91S_TC TimerCounter0Peripheral; -extern AT91S_ADC AdcPeripheral; - -#define AIC_ADDR &AicPeripheral -#define PIOA_ADDR &PioAPeripheral -#define PIOB_ADDR &PioBPeripheral -#define PMC_ADDR &PmcPeripheral -#define US0_ADDR &Usart0Peripheral -#define TC0_ADDR &TimerCounter0Peripheral -#define ADC_ADDR &AdcPeripheral - -#else - -#define AIC_ADDR 0xFFFFF000 -#define PIOA_ADDR 0xFFFFF400 -#define PIOB_ADDR 0xFFFFF600 -#define PMC_ADDR 0xFFFFFC00 -#define US0_ADDR 0xFFFC0000 -#define TC0_ADDR 0xFFFA0000 -#define ADC_ADDR 0xFFFD8000 - -#endif // TEST - -#define AT91C_BASE_SYS ((AT91PS_SYS) 0xFFFFF000) // (SYS) Base Address -#define AT91C_BASE_AIC ((AT91PS_AIC) AIC_ADDR) // (AIC) Base Address -#define AT91C_BASE_PDC_DBGU ((AT91PS_PDC) 0xFFFFF300) // (PDC_DBGU) Base Address -#define AT91C_BASE_DBGU ((AT91PS_DBGU) 0xFFFFF200) // (DBGU) Base Address -#define AT91C_BASE_PIOA ((AT91PS_PIO) PIOA_ADDR) // (PIOA) Base Address -#define AT91C_BASE_PIOB ((AT91PS_PIO) PIOB_ADDR) // (PIOB) Base Address -#define AT91C_BASE_PMC ((AT91PS_PMC) PMC_ADDR) // (PMC) Base Address -#define AT91C_BASE_CKGR ((AT91PS_CKGR) 0xFFFFFC20) // (CKGR) Base Address -#define AT91C_BASE_RSTC ((AT91PS_RSTC) 0xFFFFFD00) // (RSTC) Base Address -#define AT91C_BASE_RTTC ((AT91PS_RTTC) 0xFFFFFD20) // (RTTC) Base Address -#define AT91C_BASE_PITC ((AT91PS_PITC) 0xFFFFFD30) // (PITC) Base Address -#define AT91C_BASE_WDTC ((AT91PS_WDTC) 0xFFFFFD40) // (WDTC) Base Address -#define AT91C_BASE_VREG ((AT91PS_VREG) 0xFFFFFD60) // (VREG) Base Address -#define AT91C_BASE_MC ((AT91PS_MC) 0xFFFFFF00) // (MC) Base Address -#define AT91C_BASE_PDC_SPI1 ((AT91PS_PDC) 0xFFFE4100) // (PDC_SPI1) Base Address -#define AT91C_BASE_SPI1 ((AT91PS_SPI) 0xFFFE4000) // (SPI1) Base Address -#define AT91C_BASE_PDC_SPI0 ((AT91PS_PDC) 0xFFFE0100) // (PDC_SPI0) Base Address -#define AT91C_BASE_SPI0 ((AT91PS_SPI) 0xFFFE0000) // (SPI0) Base Address -#define AT91C_BASE_PDC_US1 ((AT91PS_PDC) 0xFFFC4100) // (PDC_US1) Base Address -#define AT91C_BASE_US1 ((AT91PS_USART) 0xFFFC4000) // (US1) Base Address -#define AT91C_BASE_PDC_US0 ((AT91PS_PDC) 0xFFFC0100) // (PDC_US0) Base Address -#define AT91C_BASE_US0 ((AT91PS_USART) US0_ADDR) // (US0) Base Address -#define AT91C_BASE_PDC_SSC ((AT91PS_PDC) 0xFFFD4100) // (PDC_SSC) Base Address -#define AT91C_BASE_SSC ((AT91PS_SSC) 0xFFFD4000) // (SSC) Base Address -#define AT91C_BASE_TWI ((AT91PS_TWI) 0xFFFB8000) // (TWI) Base Address -#define AT91C_BASE_PWMC_CH3 ((AT91PS_PWMC_CH) 0xFFFCC260) // (PWMC_CH3) Base Address -#define AT91C_BASE_PWMC_CH2 ((AT91PS_PWMC_CH) 0xFFFCC240) // (PWMC_CH2) Base Address -#define AT91C_BASE_PWMC_CH1 ((AT91PS_PWMC_CH) 0xFFFCC220) // (PWMC_CH1) Base Address -#define AT91C_BASE_PWMC_CH0 ((AT91PS_PWMC_CH) 0xFFFCC200) // (PWMC_CH0) Base Address -#define AT91C_BASE_PWMC ((AT91PS_PWMC) 0xFFFCC000) // (PWMC) Base Address -#define AT91C_BASE_UDP ((AT91PS_UDP) 0xFFFB0000) // (UDP) Base Address -#define AT91C_BASE_TC0 ((AT91PS_TC) TC0_ADDR) // (TC0) Base Address -#define AT91C_BASE_TC1 ((AT91PS_TC) 0xFFFA0040) // (TC1) Base Address -#define AT91C_BASE_TC2 ((AT91PS_TC) 0xFFFA0080) // (TC2) Base Address -#define AT91C_BASE_TCB ((AT91PS_TCB) 0xFFFA0000) // (TCB) Base Address -#define AT91C_BASE_CAN_MB0 ((AT91PS_CAN_MB) 0xFFFD0200) // (CAN_MB0) Base Address -#define AT91C_BASE_CAN_MB1 ((AT91PS_CAN_MB) 0xFFFD0220) // (CAN_MB1) Base Address -#define AT91C_BASE_CAN_MB2 ((AT91PS_CAN_MB) 0xFFFD0240) // (CAN_MB2) Base Address -#define AT91C_BASE_CAN_MB3 ((AT91PS_CAN_MB) 0xFFFD0260) // (CAN_MB3) Base Address -#define AT91C_BASE_CAN_MB4 ((AT91PS_CAN_MB) 0xFFFD0280) // (CAN_MB4) Base Address -#define AT91C_BASE_CAN_MB5 ((AT91PS_CAN_MB) 0xFFFD02A0) // (CAN_MB5) Base Address -#define AT91C_BASE_CAN_MB6 ((AT91PS_CAN_MB) 0xFFFD02C0) // (CAN_MB6) Base Address -#define AT91C_BASE_CAN_MB7 ((AT91PS_CAN_MB) 0xFFFD02E0) // (CAN_MB7) Base Address -#define AT91C_BASE_CAN ((AT91PS_CAN) 0xFFFD0000) // (CAN) Base Address -#define AT91C_BASE_ADC ((AT91PS_ADC) ADC_ADDR) // (ADC) Base Address -#define AT91C_BASE_EMAC ((AT91PS_EMAC) 0xFFFDC000) // (EMAC) Base Address -#define AT91C_BASE_PDC_ADC ((AT91PS_PDC) 0xFFFD8100) // (PDC_ADC) Base Address - -// ***************************************************************************** -// MEMORY MAPPING DEFINITIONS FOR AT91SAM7X256 -// ***************************************************************************** -// ISRAM -#define AT91C_ISRAM ((char *) 0x00200000) // Internal SRAM base address -#define AT91C_ISRAM_SIZE ((unsigned int) 0x00010000) // Internal SRAM size in byte (64 Kbytes) -// IFLASH -#define AT91C_IFLASH ((char *) 0x00100000) // Internal FLASH base address -#define AT91C_IFLASH_SIZE ((unsigned int) 0x00040000) // Internal FLASH size in byte (256 Kbytes) -#define AT91C_IFLASH_PAGE_SIZE ((unsigned int) 256) // Internal FLASH Page Size: 256 bytes -#define AT91C_IFLASH_LOCK_REGION_SIZE ((unsigned int) 16384) // Internal FLASH Lock Region Size: 16 Kbytes -#define AT91C_IFLASH_NB_OF_PAGES ((unsigned int) 1024) // Internal FLASH Number of Pages: 1024 bytes -#define AT91C_IFLASH_NB_OF_LOCK_BITS ((unsigned int) 16) // Internal FLASH Number of Lock Bits: 16 bytes - -#endif +// ---------------------------------------------------------------------------- +// ATMEL Microcontroller Software Support - ROUSSET - +// ---------------------------------------------------------------------------- +// DISCLAIMER: THIS SOFTWARE IS PROVIDED BY ATMEL "AS IS" AND ANY EXPRESS OR +// IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF +// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT ARE +// 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. +// ---------------------------------------------------------------------------- +// File Name : AT91SAM7X256.h +// Object : AT91SAM7X256 definitions +// Generated : AT91 SW Application Group 01/16/2006 (16:36:21) +// +// CVS Reference : /AT91SAM7X256.pl/1.15/Wed Nov 2 13:56:49 2005// +// CVS Reference : /SYS_SAM7X.pl/1.3/Tue Feb 1 17:01:43 2005// +// CVS Reference : /MC_SAM7X.pl/1.2/Fri May 20 14:13:04 2005// +// CVS Reference : /PMC_SAM7X.pl/1.4/Tue Feb 8 13:58:10 2005// +// CVS Reference : /RSTC_SAM7X.pl/1.2/Wed Jul 13 14:57:50 2005// +// CVS Reference : /UDP_SAM7X.pl/1.1/Tue May 10 11:35:35 2005// +// CVS Reference : /PWM_SAM7X.pl/1.1/Tue May 10 11:53:07 2005// +// CVS Reference : /AIC_6075B.pl/1.3/Fri May 20 14:01:30 2005// +// CVS Reference : /PIO_6057A.pl/1.2/Thu Feb 3 10:18:28 2005// +// CVS Reference : /RTTC_6081A.pl/1.2/Tue Nov 9 14:43:58 2004// +// CVS Reference : /PITC_6079A.pl/1.2/Tue Nov 9 14:43:56 2004// +// CVS Reference : /WDTC_6080A.pl/1.3/Tue Nov 9 14:44:00 2004// +// CVS Reference : /VREG_6085B.pl/1.1/Tue Feb 1 16:05:48 2005// +// CVS Reference : /PDC_6074C.pl/1.2/Thu Feb 3 08:48:54 2005// +// CVS Reference : /DBGU_6059D.pl/1.1/Mon Jan 31 13:15:32 2005// +// CVS Reference : /SPI_6088D.pl/1.3/Fri May 20 14:08:59 2005// +// CVS Reference : /US_6089C.pl/1.1/Mon Jul 12 18:23:26 2004// +// CVS Reference : /SSC_6078B.pl/1.1/Wed Jul 13 15:19:19 2005// +// CVS Reference : /TWI_6061A.pl/1.1/Tue Jul 13 07:38:06 2004// +// CVS Reference : /TC_6082A.pl/1.7/Fri Mar 11 12:52:17 2005// +// CVS Reference : /CAN_6019B.pl/1.1/Tue Mar 8 12:42:22 2005// +// CVS Reference : /EMACB_6119A.pl/1.6/Wed Jul 13 15:05:35 2005// +// CVS Reference : /ADC_6051C.pl/1.1/Fri Oct 17 09:12:38 2003// +// ---------------------------------------------------------------------------- + +#ifndef AT91SAM7X256_H +#define AT91SAM7X256_H + +typedef volatile unsigned int AT91_REG;// Hardware register definition + +// ***************************************************************************** +// SOFTWARE API DEFINITION FOR System Peripherals +// ***************************************************************************** +typedef struct _AT91S_SYS { + AT91_REG AIC_SMR[32]; // Source Mode Register + AT91_REG AIC_SVR[32]; // Source Vector Register + AT91_REG AIC_IVR; // IRQ Vector Register + AT91_REG AIC_FVR; // FIQ Vector Register + AT91_REG AIC_ISR; // Interrupt Status Register + AT91_REG AIC_IPR; // Interrupt Pending Register + AT91_REG AIC_IMR; // Interrupt Mask Register + AT91_REG AIC_CISR; // Core Interrupt Status Register + AT91_REG Reserved0[2]; // + AT91_REG AIC_IECR; // Interrupt Enable Command Register + AT91_REG AIC_IDCR; // Interrupt Disable Command Register + AT91_REG AIC_ICCR; // Interrupt Clear Command Register + AT91_REG AIC_ISCR; // Interrupt Set Command Register + AT91_REG AIC_EOICR; // End of Interrupt Command Register + AT91_REG AIC_SPU; // Spurious Vector Register + AT91_REG AIC_DCR; // Debug Control Register (Protect) + AT91_REG Reserved1[1]; // + AT91_REG AIC_FFER; // Fast Forcing Enable Register + AT91_REG AIC_FFDR; // Fast Forcing Disable Register + AT91_REG AIC_FFSR; // Fast Forcing Status Register + AT91_REG Reserved2[45]; // + AT91_REG DBGU_CR; // Control Register + AT91_REG DBGU_MR; // Mode Register + AT91_REG DBGU_IER; // Interrupt Enable Register + AT91_REG DBGU_IDR; // Interrupt Disable Register + AT91_REG DBGU_IMR; // Interrupt Mask Register + AT91_REG DBGU_CSR; // Channel Status Register + AT91_REG DBGU_RHR; // Receiver Holding Register + AT91_REG DBGU_THR; // Transmitter Holding Register + AT91_REG DBGU_BRGR; // Baud Rate Generator Register + AT91_REG Reserved3[7]; // + AT91_REG DBGU_CIDR; // Chip ID Register + AT91_REG DBGU_EXID; // Chip ID Extension Register + AT91_REG DBGU_FNTR; // Force NTRST Register + AT91_REG Reserved4[45]; // + AT91_REG DBGU_RPR; // Receive Pointer Register + AT91_REG DBGU_RCR; // Receive Counter Register + AT91_REG DBGU_TPR; // Transmit Pointer Register + AT91_REG DBGU_TCR; // Transmit Counter Register + AT91_REG DBGU_RNPR; // Receive Next Pointer Register + AT91_REG DBGU_RNCR; // Receive Next Counter Register + AT91_REG DBGU_TNPR; // Transmit Next Pointer Register + AT91_REG DBGU_TNCR; // Transmit Next Counter Register + AT91_REG DBGU_PTCR; // PDC Transfer Control Register + AT91_REG DBGU_PTSR; // PDC Transfer Status Register + AT91_REG Reserved5[54]; // + AT91_REG PIOA_PER; // PIO Enable Register + AT91_REG PIOA_PDR; // PIO Disable Register + AT91_REG PIOA_PSR; // PIO Status Register + AT91_REG Reserved6[1]; // + AT91_REG PIOA_OER; // Output Enable Register + AT91_REG PIOA_ODR; // Output Disable Registerr + AT91_REG PIOA_OSR; // Output Status Register + AT91_REG Reserved7[1]; // + AT91_REG PIOA_IFER; // Input Filter Enable Register + AT91_REG PIOA_IFDR; // Input Filter Disable Register + AT91_REG PIOA_IFSR; // Input Filter Status Register + AT91_REG Reserved8[1]; // + AT91_REG PIOA_SODR; // Set Output Data Register + AT91_REG PIOA_CODR; // Clear Output Data Register + AT91_REG PIOA_ODSR; // Output Data Status Register + AT91_REG PIOA_PDSR; // Pin Data Status Register + AT91_REG PIOA_IER; // Interrupt Enable Register + AT91_REG PIOA_IDR; // Interrupt Disable Register + AT91_REG PIOA_IMR; // Interrupt Mask Register + AT91_REG PIOA_ISR; // Interrupt Status Register + AT91_REG PIOA_MDER; // Multi-driver Enable Register + AT91_REG PIOA_MDDR; // Multi-driver Disable Register + AT91_REG PIOA_MDSR; // Multi-driver Status Register + AT91_REG Reserved9[1]; // + AT91_REG PIOA_PPUDR; // Pull-up Disable Register + AT91_REG PIOA_PPUER; // Pull-up Enable Register + AT91_REG PIOA_PPUSR; // Pull-up Status Register + AT91_REG Reserved10[1]; // + AT91_REG PIOA_ASR; // Select A Register + AT91_REG PIOA_BSR; // Select B Register + AT91_REG PIOA_ABSR; // AB Select Status Register + AT91_REG Reserved11[9]; // + AT91_REG PIOA_OWER; // Output Write Enable Register + AT91_REG PIOA_OWDR; // Output Write Disable Register + AT91_REG PIOA_OWSR; // Output Write Status Register + AT91_REG Reserved12[85]; // + AT91_REG PIOB_PER; // PIO Enable Register + AT91_REG PIOB_PDR; // PIO Disable Register + AT91_REG PIOB_PSR; // PIO Status Register + AT91_REG Reserved13[1]; // + AT91_REG PIOB_OER; // Output Enable Register + AT91_REG PIOB_ODR; // Output Disable Registerr + AT91_REG PIOB_OSR; // Output Status Register + AT91_REG Reserved14[1]; // + AT91_REG PIOB_IFER; // Input Filter Enable Register + AT91_REG PIOB_IFDR; // Input Filter Disable Register + AT91_REG PIOB_IFSR; // Input Filter Status Register + AT91_REG Reserved15[1]; // + AT91_REG PIOB_SODR; // Set Output Data Register + AT91_REG PIOB_CODR; // Clear Output Data Register + AT91_REG PIOB_ODSR; // Output Data Status Register + AT91_REG PIOB_PDSR; // Pin Data Status Register + AT91_REG PIOB_IER; // Interrupt Enable Register + AT91_REG PIOB_IDR; // Interrupt Disable Register + AT91_REG PIOB_IMR; // Interrupt Mask Register + AT91_REG PIOB_ISR; // Interrupt Status Register + AT91_REG PIOB_MDER; // Multi-driver Enable Register + AT91_REG PIOB_MDDR; // Multi-driver Disable Register + AT91_REG PIOB_MDSR; // Multi-driver Status Register + AT91_REG Reserved16[1]; // + AT91_REG PIOB_PPUDR; // Pull-up Disable Register + AT91_REG PIOB_PPUER; // Pull-up Enable Register + AT91_REG PIOB_PPUSR; // Pull-up Status Register + AT91_REG Reserved17[1]; // + AT91_REG PIOB_ASR; // Select A Register + AT91_REG PIOB_BSR; // Select B Register + AT91_REG PIOB_ABSR; // AB Select Status Register + AT91_REG Reserved18[9]; // + AT91_REG PIOB_OWER; // Output Write Enable Register + AT91_REG PIOB_OWDR; // Output Write Disable Register + AT91_REG PIOB_OWSR; // Output Write Status Register + AT91_REG Reserved19[341]; // + AT91_REG PMC_SCER; // System Clock Enable Register + AT91_REG PMC_SCDR; // System Clock Disable Register + AT91_REG PMC_SCSR; // System Clock Status Register + AT91_REG Reserved20[1]; // + AT91_REG PMC_PCER; // Peripheral Clock Enable Register + AT91_REG PMC_PCDR; // Peripheral Clock Disable Register + AT91_REG PMC_PCSR; // Peripheral Clock Status Register + AT91_REG Reserved21[1]; // + AT91_REG PMC_MOR; // Main Oscillator Register + AT91_REG PMC_MCFR; // Main Clock Frequency Register + AT91_REG Reserved22[1]; // + AT91_REG PMC_PLLR; // PLL Register + AT91_REG PMC_MCKR; // Master Clock Register + AT91_REG Reserved23[3]; // + AT91_REG PMC_PCKR[4]; // Programmable Clock Register + AT91_REG Reserved24[4]; // + AT91_REG PMC_IER; // Interrupt Enable Register + AT91_REG PMC_IDR; // Interrupt Disable Register + AT91_REG PMC_SR; // Status Register + AT91_REG PMC_IMR; // Interrupt Mask Register + AT91_REG Reserved25[36]; // + AT91_REG RSTC_RCR; // Reset Control Register + AT91_REG RSTC_RSR; // Reset Status Register + AT91_REG RSTC_RMR; // Reset Mode Register + AT91_REG Reserved26[5]; // + AT91_REG RTTC_RTMR; // Real-time Mode Register + AT91_REG RTTC_RTAR; // Real-time Alarm Register + AT91_REG RTTC_RTVR; // Real-time Value Register + AT91_REG RTTC_RTSR; // Real-time Status Register + AT91_REG PITC_PIMR; // Period Interval Mode Register + AT91_REG PITC_PISR; // Period Interval Status Register + AT91_REG PITC_PIVR; // Period Interval Value Register + AT91_REG PITC_PIIR; // Period Interval Image Register + AT91_REG WDTC_WDCR; // Watchdog Control Register + AT91_REG WDTC_WDMR; // Watchdog Mode Register + AT91_REG WDTC_WDSR; // Watchdog Status Register + AT91_REG Reserved27[5]; // + AT91_REG VREG_MR; // Voltage Regulator Mode Register +} AT91S_SYS, *AT91PS_SYS; + + +// ***************************************************************************** +// SOFTWARE API DEFINITION FOR Advanced Interrupt Controller +// ***************************************************************************** +typedef struct _AT91S_AIC { + AT91_REG AIC_SMR[32]; // Source Mode Register + AT91_REG AIC_SVR[32]; // Source Vector Register + AT91_REG AIC_IVR; // IRQ Vector Register + AT91_REG AIC_FVR; // FIQ Vector Register + AT91_REG AIC_ISR; // Interrupt Status Register + AT91_REG AIC_IPR; // Interrupt Pending Register + AT91_REG AIC_IMR; // Interrupt Mask Register + AT91_REG AIC_CISR; // Core Interrupt Status Register + AT91_REG Reserved0[2]; // + AT91_REG AIC_IECR; // Interrupt Enable Command Register + AT91_REG AIC_IDCR; // Interrupt Disable Command Register + AT91_REG AIC_ICCR; // Interrupt Clear Command Register + AT91_REG AIC_ISCR; // Interrupt Set Command Register + AT91_REG AIC_EOICR; // End of Interrupt Command Register + AT91_REG AIC_SPU; // Spurious Vector Register + AT91_REG AIC_DCR; // Debug Control Register (Protect) + AT91_REG Reserved1[1]; // + AT91_REG AIC_FFER; // Fast Forcing Enable Register + AT91_REG AIC_FFDR; // Fast Forcing Disable Register + AT91_REG AIC_FFSR; // Fast Forcing Status Register +} AT91S_AIC, *AT91PS_AIC; + +// -------- AIC_SMR : (AIC Offset: 0x0) Control Register -------- +#define AT91C_AIC_PRIOR ((unsigned int) 0x7 << 0) // (AIC) Priority Level +#define AT91C_AIC_PRIOR_LOWEST ((unsigned int) 0x0) // (AIC) Lowest priority level +#define AT91C_AIC_PRIOR_HIGHEST ((unsigned int) 0x7) // (AIC) Highest priority level +#define AT91C_AIC_SRCTYPE ((unsigned int) 0x3 << 5) // (AIC) Interrupt Source Type +#define AT91C_AIC_SRCTYPE_EXT_LOW_LEVEL ((unsigned int) 0x0 << 5) // (AIC) External Sources Code Label Low-level Sensitive +#define AT91C_AIC_SRCTYPE_INT_HIGH_LEVEL ((unsigned int) 0x0 << 5) // (AIC) Internal Sources Code Label High-level Sensitive +#define AT91C_AIC_SRCTYPE_INT_POSITIVE_EDGE ((unsigned int) 0x1 << 5) // (AIC) Internal Sources Code Label Positive Edge triggered +#define AT91C_AIC_SRCTYPE_EXT_NEGATIVE_EDGE ((unsigned int) 0x1 << 5) // (AIC) External Sources Code Label Negative Edge triggered +#define AT91C_AIC_SRCTYPE_HIGH_LEVEL ((unsigned int) 0x2 << 5) // (AIC) Internal Or External Sources Code Label High-level Sensitive +#define AT91C_AIC_SRCTYPE_POSITIVE_EDGE ((unsigned int) 0x3 << 5) // (AIC) Internal Or External Sources Code Label Positive Edge triggered +// -------- AIC_CISR : (AIC Offset: 0x114) AIC Core Interrupt Status Register -------- +#define AT91C_AIC_NFIQ ((unsigned int) 0x1 << 0) // (AIC) NFIQ Status +#define AT91C_AIC_NIRQ ((unsigned int) 0x1 << 1) // (AIC) NIRQ Status +// -------- AIC_DCR : (AIC Offset: 0x138) AIC Debug Control Register (Protect) -------- +#define AT91C_AIC_DCR_PROT ((unsigned int) 0x1 << 0) // (AIC) Protection Mode +#define AT91C_AIC_DCR_GMSK ((unsigned int) 0x1 << 1) // (AIC) General Mask + +// ***************************************************************************** +// SOFTWARE API DEFINITION FOR Peripheral DMA Controller +// ***************************************************************************** +typedef struct _AT91S_PDC { + AT91_REG PDC_RPR; // Receive Pointer Register + AT91_REG PDC_RCR; // Receive Counter Register + AT91_REG PDC_TPR; // Transmit Pointer Register + AT91_REG PDC_TCR; // Transmit Counter Register + AT91_REG PDC_RNPR; // Receive Next Pointer Register + AT91_REG PDC_RNCR; // Receive Next Counter Register + AT91_REG PDC_TNPR; // Transmit Next Pointer Register + AT91_REG PDC_TNCR; // Transmit Next Counter Register + AT91_REG PDC_PTCR; // PDC Transfer Control Register + AT91_REG PDC_PTSR; // PDC Transfer Status Register +} AT91S_PDC, *AT91PS_PDC; + +// -------- PDC_PTCR : (PDC Offset: 0x20) PDC Transfer Control Register -------- +#define AT91C_PDC_RXTEN ((unsigned int) 0x1 << 0) // (PDC) Receiver Transfer Enable +#define AT91C_PDC_RXTDIS ((unsigned int) 0x1 << 1) // (PDC) Receiver Transfer Disable +#define AT91C_PDC_TXTEN ((unsigned int) 0x1 << 8) // (PDC) Transmitter Transfer Enable +#define AT91C_PDC_TXTDIS ((unsigned int) 0x1 << 9) // (PDC) Transmitter Transfer Disable +// -------- PDC_PTSR : (PDC Offset: 0x24) PDC Transfer Status Register -------- + +// ***************************************************************************** +// SOFTWARE API DEFINITION FOR Debug Unit +// ***************************************************************************** +typedef struct _AT91S_DBGU { + AT91_REG DBGU_CR; // Control Register + AT91_REG DBGU_MR; // Mode Register + AT91_REG DBGU_IER; // Interrupt Enable Register + AT91_REG DBGU_IDR; // Interrupt Disable Register + AT91_REG DBGU_IMR; // Interrupt Mask Register + AT91_REG DBGU_CSR; // Channel Status Register + AT91_REG DBGU_RHR; // Receiver Holding Register + AT91_REG DBGU_THR; // Transmitter Holding Register + AT91_REG DBGU_BRGR; // Baud Rate Generator Register + AT91_REG Reserved0[7]; // + AT91_REG DBGU_CIDR; // Chip ID Register + AT91_REG DBGU_EXID; // Chip ID Extension Register + AT91_REG DBGU_FNTR; // Force NTRST Register + AT91_REG Reserved1[45]; // + AT91_REG DBGU_RPR; // Receive Pointer Register + AT91_REG DBGU_RCR; // Receive Counter Register + AT91_REG DBGU_TPR; // Transmit Pointer Register + AT91_REG DBGU_TCR; // Transmit Counter Register + AT91_REG DBGU_RNPR; // Receive Next Pointer Register + AT91_REG DBGU_RNCR; // Receive Next Counter Register + AT91_REG DBGU_TNPR; // Transmit Next Pointer Register + AT91_REG DBGU_TNCR; // Transmit Next Counter Register + AT91_REG DBGU_PTCR; // PDC Transfer Control Register + AT91_REG DBGU_PTSR; // PDC Transfer Status Register +} AT91S_DBGU, *AT91PS_DBGU; + +// -------- DBGU_CR : (DBGU Offset: 0x0) Debug Unit Control Register -------- +#define AT91C_US_RSTRX ((unsigned int) 0x1 << 2) // (DBGU) Reset Receiver +#define AT91C_US_RSTTX ((unsigned int) 0x1 << 3) // (DBGU) Reset Transmitter +#define AT91C_US_RXEN ((unsigned int) 0x1 << 4) // (DBGU) Receiver Enable +#define AT91C_US_RXDIS ((unsigned int) 0x1 << 5) // (DBGU) Receiver Disable +#define AT91C_US_TXEN ((unsigned int) 0x1 << 6) // (DBGU) Transmitter Enable +#define AT91C_US_TXDIS ((unsigned int) 0x1 << 7) // (DBGU) Transmitter Disable +#define AT91C_US_RSTSTA ((unsigned int) 0x1 << 8) // (DBGU) Reset Status Bits +// -------- DBGU_MR : (DBGU Offset: 0x4) Debug Unit Mode Register -------- +#define AT91C_US_PAR ((unsigned int) 0x7 << 9) // (DBGU) Parity type +#define AT91C_US_PAR_EVEN ((unsigned int) 0x0 << 9) // (DBGU) Even Parity +#define AT91C_US_PAR_ODD ((unsigned int) 0x1 << 9) // (DBGU) Odd Parity +#define AT91C_US_PAR_SPACE ((unsigned int) 0x2 << 9) // (DBGU) Parity forced to 0 (Space) +#define AT91C_US_PAR_MARK ((unsigned int) 0x3 << 9) // (DBGU) Parity forced to 1 (Mark) +#define AT91C_US_PAR_NONE ((unsigned int) 0x4 << 9) // (DBGU) No Parity +#define AT91C_US_PAR_MULTI_DROP ((unsigned int) 0x6 << 9) // (DBGU) Multi-drop mode +#define AT91C_US_CHMODE ((unsigned int) 0x3 << 14) // (DBGU) Channel Mode +#define AT91C_US_CHMODE_NORMAL ((unsigned int) 0x0 << 14) // (DBGU) Normal Mode: The USART channel operates as an RX/TX USART. +#define AT91C_US_CHMODE_AUTO ((unsigned int) 0x1 << 14) // (DBGU) Automatic Echo: Receiver Data Input is connected to the TXD pin. +#define AT91C_US_CHMODE_LOCAL ((unsigned int) 0x2 << 14) // (DBGU) Local Loopback: Transmitter Output Signal is connected to Receiver Input Signal. +#define AT91C_US_CHMODE_REMOTE ((unsigned int) 0x3 << 14) // (DBGU) Remote Loopback: RXD pin is internally connected to TXD pin. +// -------- DBGU_IER : (DBGU Offset: 0x8) Debug Unit Interrupt Enable Register -------- +#define AT91C_US_RXRDY ((unsigned int) 0x1 << 0) // (DBGU) RXRDY Interrupt +#define AT91C_US_TXRDY ((unsigned int) 0x1 << 1) // (DBGU) TXRDY Interrupt +#define AT91C_US_ENDRX ((unsigned int) 0x1 << 3) // (DBGU) End of Receive Transfer Interrupt +#define AT91C_US_ENDTX ((unsigned int) 0x1 << 4) // (DBGU) End of Transmit Interrupt +#define AT91C_US_OVRE ((unsigned int) 0x1 << 5) // (DBGU) Overrun Interrupt +#define AT91C_US_FRAME ((unsigned int) 0x1 << 6) // (DBGU) Framing Error Interrupt +#define AT91C_US_PARE ((unsigned int) 0x1 << 7) // (DBGU) Parity Error Interrupt +#define AT91C_US_TXEMPTY ((unsigned int) 0x1 << 9) // (DBGU) TXEMPTY Interrupt +#define AT91C_US_TXBUFE ((unsigned int) 0x1 << 11) // (DBGU) TXBUFE Interrupt +#define AT91C_US_RXBUFF ((unsigned int) 0x1 << 12) // (DBGU) RXBUFF Interrupt +#define AT91C_US_COMM_TX ((unsigned int) 0x1 << 30) // (DBGU) COMM_TX Interrupt +#define AT91C_US_COMM_RX ((unsigned int) 0x1 << 31) // (DBGU) COMM_RX Interrupt +// -------- DBGU_IDR : (DBGU Offset: 0xc) Debug Unit Interrupt Disable Register -------- +// -------- DBGU_IMR : (DBGU Offset: 0x10) Debug Unit Interrupt Mask Register -------- +// -------- DBGU_CSR : (DBGU Offset: 0x14) Debug Unit Channel Status Register -------- +// -------- DBGU_FNTR : (DBGU Offset: 0x48) Debug Unit FORCE_NTRST Register -------- +#define AT91C_US_FORCE_NTRST ((unsigned int) 0x1 << 0) // (DBGU) Force NTRST in JTAG + +// ***************************************************************************** +// SOFTWARE API DEFINITION FOR Parallel Input Output Controler +// ***************************************************************************** +typedef struct _AT91S_PIO { + AT91_REG PIO_PER; // PIO Enable Register + AT91_REG PIO_PDR; // PIO Disable Register + AT91_REG PIO_PSR; // PIO Status Register + AT91_REG Reserved0[1]; // + AT91_REG PIO_OER; // Output Enable Register + AT91_REG PIO_ODR; // Output Disable Registerr + AT91_REG PIO_OSR; // Output Status Register + AT91_REG Reserved1[1]; // + AT91_REG PIO_IFER; // Input Filter Enable Register + AT91_REG PIO_IFDR; // Input Filter Disable Register + AT91_REG PIO_IFSR; // Input Filter Status Register + AT91_REG Reserved2[1]; // + AT91_REG PIO_SODR; // Set Output Data Register + AT91_REG PIO_CODR; // Clear Output Data Register + AT91_REG PIO_ODSR; // Output Data Status Register + AT91_REG PIO_PDSR; // Pin Data Status Register + AT91_REG PIO_IER; // Interrupt Enable Register + AT91_REG PIO_IDR; // Interrupt Disable Register + AT91_REG PIO_IMR; // Interrupt Mask Register + AT91_REG PIO_ISR; // Interrupt Status Register + AT91_REG PIO_MDER; // Multi-driver Enable Register + AT91_REG PIO_MDDR; // Multi-driver Disable Register + AT91_REG PIO_MDSR; // Multi-driver Status Register + AT91_REG Reserved3[1]; // + AT91_REG PIO_PPUDR; // Pull-up Disable Register + AT91_REG PIO_PPUER; // Pull-up Enable Register + AT91_REG PIO_PPUSR; // Pull-up Status Register + AT91_REG Reserved4[1]; // + AT91_REG PIO_ASR; // Select A Register + AT91_REG PIO_BSR; // Select B Register + AT91_REG PIO_ABSR; // AB Select Status Register + AT91_REG Reserved5[9]; // + AT91_REG PIO_OWER; // Output Write Enable Register + AT91_REG PIO_OWDR; // Output Write Disable Register + AT91_REG PIO_OWSR; // Output Write Status Register +} AT91S_PIO, *AT91PS_PIO; + + +// ***************************************************************************** +// SOFTWARE API DEFINITION FOR Clock Generator Controler +// ***************************************************************************** +typedef struct _AT91S_CKGR { + AT91_REG CKGR_MOR; // Main Oscillator Register + AT91_REG CKGR_MCFR; // Main Clock Frequency Register + AT91_REG Reserved0[1]; // + AT91_REG CKGR_PLLR; // PLL Register +} AT91S_CKGR, *AT91PS_CKGR; + +// -------- CKGR_MOR : (CKGR Offset: 0x0) Main Oscillator Register -------- +#define AT91C_CKGR_MOSCEN ((unsigned int) 0x1 << 0) // (CKGR) Main Oscillator Enable +#define AT91C_CKGR_OSCBYPASS ((unsigned int) 0x1 << 1) // (CKGR) Main Oscillator Bypass +#define AT91C_CKGR_OSCOUNT ((unsigned int) 0xFF << 8) // (CKGR) Main Oscillator Start-up Time +// -------- CKGR_MCFR : (CKGR Offset: 0x4) Main Clock Frequency Register -------- +#define AT91C_CKGR_MAINF ((unsigned int) 0xFFFF << 0) // (CKGR) Main Clock Frequency +#define AT91C_CKGR_MAINRDY ((unsigned int) 0x1 << 16) // (CKGR) Main Clock Ready +// -------- CKGR_PLLR : (CKGR Offset: 0xc) PLL B Register -------- +#define AT91C_CKGR_DIV ((unsigned int) 0xFF << 0) // (CKGR) Divider Selected +#define AT91C_CKGR_DIV_0 ((unsigned int) 0x0) // (CKGR) Divider output is 0 +#define AT91C_CKGR_DIV_BYPASS ((unsigned int) 0x1) // (CKGR) Divider is bypassed +#define AT91C_CKGR_PLLCOUNT ((unsigned int) 0x3F << 8) // (CKGR) PLL Counter +#define AT91C_CKGR_OUT ((unsigned int) 0x3 << 14) // (CKGR) PLL Output Frequency Range +#define AT91C_CKGR_OUT_0 ((unsigned int) 0x0 << 14) // (CKGR) Please refer to the PLL datasheet +#define AT91C_CKGR_OUT_1 ((unsigned int) 0x1 << 14) // (CKGR) Please refer to the PLL datasheet +#define AT91C_CKGR_OUT_2 ((unsigned int) 0x2 << 14) // (CKGR) Please refer to the PLL datasheet +#define AT91C_CKGR_OUT_3 ((unsigned int) 0x3 << 14) // (CKGR) Please refer to the PLL datasheet +#define AT91C_CKGR_MUL ((unsigned int) 0x7FF << 16) // (CKGR) PLL Multiplier +#define AT91C_CKGR_USBDIV ((unsigned int) 0x3 << 28) // (CKGR) Divider for USB Clocks +#define AT91C_CKGR_USBDIV_0 ((unsigned int) 0x0 << 28) // (CKGR) Divider output is PLL clock output +#define AT91C_CKGR_USBDIV_1 ((unsigned int) 0x1 << 28) // (CKGR) Divider output is PLL clock output divided by 2 +#define AT91C_CKGR_USBDIV_2 ((unsigned int) 0x2 << 28) // (CKGR) Divider output is PLL clock output divided by 4 + +// ***************************************************************************** +// SOFTWARE API DEFINITION FOR Power Management Controler +// ***************************************************************************** +typedef struct _AT91S_PMC { + AT91_REG PMC_SCER; // System Clock Enable Register + AT91_REG PMC_SCDR; // System Clock Disable Register + AT91_REG PMC_SCSR; // System Clock Status Register + AT91_REG Reserved0[1]; // + AT91_REG PMC_PCER; // Peripheral Clock Enable Register + AT91_REG PMC_PCDR; // Peripheral Clock Disable Register + AT91_REG PMC_PCSR; // Peripheral Clock Status Register + AT91_REG Reserved1[1]; // + AT91_REG PMC_MOR; // Main Oscillator Register + AT91_REG PMC_MCFR; // Main Clock Frequency Register + AT91_REG Reserved2[1]; // + AT91_REG PMC_PLLR; // PLL Register + AT91_REG PMC_MCKR; // Master Clock Register + AT91_REG Reserved3[3]; // + AT91_REG PMC_PCKR[4]; // Programmable Clock Register + AT91_REG Reserved4[4]; // + AT91_REG PMC_IER; // Interrupt Enable Register + AT91_REG PMC_IDR; // Interrupt Disable Register + AT91_REG PMC_SR; // Status Register + AT91_REG PMC_IMR; // Interrupt Mask Register +} AT91S_PMC, *AT91PS_PMC; + +// -------- PMC_SCER : (PMC Offset: 0x0) System Clock Enable Register -------- +#define AT91C_PMC_PCK ((unsigned int) 0x1 << 0) // (PMC) Processor Clock +#define AT91C_PMC_UDP ((unsigned int) 0x1 << 7) // (PMC) USB Device Port Clock +#define AT91C_PMC_PCK0 ((unsigned int) 0x1 << 8) // (PMC) Programmable Clock Output +#define AT91C_PMC_PCK1 ((unsigned int) 0x1 << 9) // (PMC) Programmable Clock Output +#define AT91C_PMC_PCK2 ((unsigned int) 0x1 << 10) // (PMC) Programmable Clock Output +#define AT91C_PMC_PCK3 ((unsigned int) 0x1 << 11) // (PMC) Programmable Clock Output +// -------- PMC_SCDR : (PMC Offset: 0x4) System Clock Disable Register -------- +// -------- PMC_SCSR : (PMC Offset: 0x8) System Clock Status Register -------- +// -------- CKGR_MOR : (PMC Offset: 0x20) Main Oscillator Register -------- +// -------- CKGR_MCFR : (PMC Offset: 0x24) Main Clock Frequency Register -------- +// -------- CKGR_PLLR : (PMC Offset: 0x2c) PLL B Register -------- +// -------- PMC_MCKR : (PMC Offset: 0x30) Master Clock Register -------- +#define AT91C_PMC_CSS ((unsigned int) 0x3 << 0) // (PMC) Programmable Clock Selection +#define AT91C_PMC_CSS_SLOW_CLK ((unsigned int) 0x0) // (PMC) Slow Clock is selected +#define AT91C_PMC_CSS_MAIN_CLK ((unsigned int) 0x1) // (PMC) Main Clock is selected +#define AT91C_PMC_CSS_PLL_CLK ((unsigned int) 0x3) // (PMC) Clock from PLL is selected +#define AT91C_PMC_PRES ((unsigned int) 0x7 << 2) // (PMC) Programmable Clock Prescaler +#define AT91C_PMC_PRES_CLK ((unsigned int) 0x0 << 2) // (PMC) Selected clock +#define AT91C_PMC_PRES_CLK_2 ((unsigned int) 0x1 << 2) // (PMC) Selected clock divided by 2 +#define AT91C_PMC_PRES_CLK_4 ((unsigned int) 0x2 << 2) // (PMC) Selected clock divided by 4 +#define AT91C_PMC_PRES_CLK_8 ((unsigned int) 0x3 << 2) // (PMC) Selected clock divided by 8 +#define AT91C_PMC_PRES_CLK_16 ((unsigned int) 0x4 << 2) // (PMC) Selected clock divided by 16 +#define AT91C_PMC_PRES_CLK_32 ((unsigned int) 0x5 << 2) // (PMC) Selected clock divided by 32 +#define AT91C_PMC_PRES_CLK_64 ((unsigned int) 0x6 << 2) // (PMC) Selected clock divided by 64 +// -------- PMC_PCKR : (PMC Offset: 0x40) Programmable Clock Register -------- +// -------- PMC_IER : (PMC Offset: 0x60) PMC Interrupt Enable Register -------- +#define AT91C_PMC_MOSCS ((unsigned int) 0x1 << 0) // (PMC) MOSC Status/Enable/Disable/Mask +#define AT91C_PMC_LOCK ((unsigned int) 0x1 << 2) // (PMC) PLL Status/Enable/Disable/Mask +#define AT91C_PMC_MCKRDY ((unsigned int) 0x1 << 3) // (PMC) MCK_RDY Status/Enable/Disable/Mask +#define AT91C_PMC_PCK0RDY ((unsigned int) 0x1 << 8) // (PMC) PCK0_RDY Status/Enable/Disable/Mask +#define AT91C_PMC_PCK1RDY ((unsigned int) 0x1 << 9) // (PMC) PCK1_RDY Status/Enable/Disable/Mask +#define AT91C_PMC_PCK2RDY ((unsigned int) 0x1 << 10) // (PMC) PCK2_RDY Status/Enable/Disable/Mask +#define AT91C_PMC_PCK3RDY ((unsigned int) 0x1 << 11) // (PMC) PCK3_RDY Status/Enable/Disable/Mask +// -------- PMC_IDR : (PMC Offset: 0x64) PMC Interrupt Disable Register -------- +// -------- PMC_SR : (PMC Offset: 0x68) PMC Status Register -------- +// -------- PMC_IMR : (PMC Offset: 0x6c) PMC Interrupt Mask Register -------- + +// ***************************************************************************** +// SOFTWARE API DEFINITION FOR Reset Controller Interface +// ***************************************************************************** +typedef struct _AT91S_RSTC { + AT91_REG RSTC_RCR; // Reset Control Register + AT91_REG RSTC_RSR; // Reset Status Register + AT91_REG RSTC_RMR; // Reset Mode Register +} AT91S_RSTC, *AT91PS_RSTC; + +// -------- RSTC_RCR : (RSTC Offset: 0x0) Reset Control Register -------- +#define AT91C_RSTC_PROCRST ((unsigned int) 0x1 << 0) // (RSTC) Processor Reset +#define AT91C_RSTC_PERRST ((unsigned int) 0x1 << 2) // (RSTC) Peripheral Reset +#define AT91C_RSTC_EXTRST ((unsigned int) 0x1 << 3) // (RSTC) External Reset +#define AT91C_RSTC_KEY ((unsigned int) 0xFF << 24) // (RSTC) Password +// -------- RSTC_RSR : (RSTC Offset: 0x4) Reset Status Register -------- +#define AT91C_RSTC_URSTS ((unsigned int) 0x1 << 0) // (RSTC) User Reset Status +#define AT91C_RSTC_BODSTS ((unsigned int) 0x1 << 1) // (RSTC) Brownout Detection Status +#define AT91C_RSTC_RSTTYP ((unsigned int) 0x7 << 8) // (RSTC) Reset Type +#define AT91C_RSTC_RSTTYP_POWERUP ((unsigned int) 0x0 << 8) // (RSTC) Power-up Reset. VDDCORE rising. +#define AT91C_RSTC_RSTTYP_WAKEUP ((unsigned int) 0x1 << 8) // (RSTC) WakeUp Reset. VDDCORE rising. +#define AT91C_RSTC_RSTTYP_WATCHDOG ((unsigned int) 0x2 << 8) // (RSTC) Watchdog Reset. Watchdog overflow occured. +#define AT91C_RSTC_RSTTYP_SOFTWARE ((unsigned int) 0x3 << 8) // (RSTC) Software Reset. Processor reset required by the software. +#define AT91C_RSTC_RSTTYP_USER ((unsigned int) 0x4 << 8) // (RSTC) User Reset. NRST pin detected low. +#define AT91C_RSTC_RSTTYP_BROWNOUT ((unsigned int) 0x5 << 8) // (RSTC) Brownout Reset occured. +#define AT91C_RSTC_NRSTL ((unsigned int) 0x1 << 16) // (RSTC) NRST pin level +#define AT91C_RSTC_SRCMP ((unsigned int) 0x1 << 17) // (RSTC) Software Reset Command in Progress. +// -------- RSTC_RMR : (RSTC Offset: 0x8) Reset Mode Register -------- +#define AT91C_RSTC_URSTEN ((unsigned int) 0x1 << 0) // (RSTC) User Reset Enable +#define AT91C_RSTC_URSTIEN ((unsigned int) 0x1 << 4) // (RSTC) User Reset Interrupt Enable +#define AT91C_RSTC_ERSTL ((unsigned int) 0xF << 8) // (RSTC) User Reset Length +#define AT91C_RSTC_BODIEN ((unsigned int) 0x1 << 16) // (RSTC) Brownout Detection Interrupt Enable + +// ***************************************************************************** +// SOFTWARE API DEFINITION FOR Real Time Timer Controller Interface +// ***************************************************************************** +typedef struct _AT91S_RTTC { + AT91_REG RTTC_RTMR; // Real-time Mode Register + AT91_REG RTTC_RTAR; // Real-time Alarm Register + AT91_REG RTTC_RTVR; // Real-time Value Register + AT91_REG RTTC_RTSR; // Real-time Status Register +} AT91S_RTTC, *AT91PS_RTTC; + +// -------- RTTC_RTMR : (RTTC Offset: 0x0) Real-time Mode Register -------- +#define AT91C_RTTC_RTPRES ((unsigned int) 0xFFFF << 0) // (RTTC) Real-time Timer Prescaler Value +#define AT91C_RTTC_ALMIEN ((unsigned int) 0x1 << 16) // (RTTC) Alarm Interrupt Enable +#define AT91C_RTTC_RTTINCIEN ((unsigned int) 0x1 << 17) // (RTTC) Real Time Timer Increment Interrupt Enable +#define AT91C_RTTC_RTTRST ((unsigned int) 0x1 << 18) // (RTTC) Real Time Timer Restart +// -------- RTTC_RTAR : (RTTC Offset: 0x4) Real-time Alarm Register -------- +#define AT91C_RTTC_ALMV ((unsigned int) 0x0 << 0) // (RTTC) Alarm Value +// -------- RTTC_RTVR : (RTTC Offset: 0x8) Current Real-time Value Register -------- +#define AT91C_RTTC_CRTV ((unsigned int) 0x0 << 0) // (RTTC) Current Real-time Value +// -------- RTTC_RTSR : (RTTC Offset: 0xc) Real-time Status Register -------- +#define AT91C_RTTC_ALMS ((unsigned int) 0x1 << 0) // (RTTC) Real-time Alarm Status +#define AT91C_RTTC_RTTINC ((unsigned int) 0x1 << 1) // (RTTC) Real-time Timer Increment + +// ***************************************************************************** +// SOFTWARE API DEFINITION FOR Periodic Interval Timer Controller Interface +// ***************************************************************************** +typedef struct _AT91S_PITC { + AT91_REG PITC_PIMR; // Period Interval Mode Register + AT91_REG PITC_PISR; // Period Interval Status Register + AT91_REG PITC_PIVR; // Period Interval Value Register + AT91_REG PITC_PIIR; // Period Interval Image Register +} AT91S_PITC, *AT91PS_PITC; + +// -------- PITC_PIMR : (PITC Offset: 0x0) Periodic Interval Mode Register -------- +#define AT91C_PITC_PIV ((unsigned int) 0xFFFFF << 0) // (PITC) Periodic Interval Value +#define AT91C_PITC_PITEN ((unsigned int) 0x1 << 24) // (PITC) Periodic Interval Timer Enabled +#define AT91C_PITC_PITIEN ((unsigned int) 0x1 << 25) // (PITC) Periodic Interval Timer Interrupt Enable +// -------- PITC_PISR : (PITC Offset: 0x4) Periodic Interval Status Register -------- +#define AT91C_PITC_PITS ((unsigned int) 0x1 << 0) // (PITC) Periodic Interval Timer Status +// -------- PITC_PIVR : (PITC Offset: 0x8) Periodic Interval Value Register -------- +#define AT91C_PITC_CPIV ((unsigned int) 0xFFFFF << 0) // (PITC) Current Periodic Interval Value +#define AT91C_PITC_PICNT ((unsigned int) 0xFFF << 20) // (PITC) Periodic Interval Counter +// -------- PITC_PIIR : (PITC Offset: 0xc) Periodic Interval Image Register -------- + +// ***************************************************************************** +// SOFTWARE API DEFINITION FOR Watchdog Timer Controller Interface +// ***************************************************************************** +typedef struct _AT91S_WDTC { + AT91_REG WDTC_WDCR; // Watchdog Control Register + AT91_REG WDTC_WDMR; // Watchdog Mode Register + AT91_REG WDTC_WDSR; // Watchdog Status Register +} AT91S_WDTC, *AT91PS_WDTC; + +// -------- WDTC_WDCR : (WDTC Offset: 0x0) Periodic Interval Image Register -------- +#define AT91C_WDTC_WDRSTT ((unsigned int) 0x1 << 0) // (WDTC) Watchdog Restart +#define AT91C_WDTC_KEY ((unsigned int) 0xFF << 24) // (WDTC) Watchdog KEY Password +// -------- WDTC_WDMR : (WDTC Offset: 0x4) Watchdog Mode Register -------- +#define AT91C_WDTC_WDV ((unsigned int) 0xFFF << 0) // (WDTC) Watchdog Timer Restart +#define AT91C_WDTC_WDFIEN ((unsigned int) 0x1 << 12) // (WDTC) Watchdog Fault Interrupt Enable +#define AT91C_WDTC_WDRSTEN ((unsigned int) 0x1 << 13) // (WDTC) Watchdog Reset Enable +#define AT91C_WDTC_WDRPROC ((unsigned int) 0x1 << 14) // (WDTC) Watchdog Timer Restart +#define AT91C_WDTC_WDDIS ((unsigned int) 0x1 << 15) // (WDTC) Watchdog Disable +#define AT91C_WDTC_WDD ((unsigned int) 0xFFF << 16) // (WDTC) Watchdog Delta Value +#define AT91C_WDTC_WDDBGHLT ((unsigned int) 0x1 << 28) // (WDTC) Watchdog Debug Halt +#define AT91C_WDTC_WDIDLEHLT ((unsigned int) 0x1 << 29) // (WDTC) Watchdog Idle Halt +// -------- WDTC_WDSR : (WDTC Offset: 0x8) Watchdog Status Register -------- +#define AT91C_WDTC_WDUNF ((unsigned int) 0x1 << 0) // (WDTC) Watchdog Underflow +#define AT91C_WDTC_WDERR ((unsigned int) 0x1 << 1) // (WDTC) Watchdog Error + +// ***************************************************************************** +// SOFTWARE API DEFINITION FOR Voltage Regulator Mode Controller Interface +// ***************************************************************************** +typedef struct _AT91S_VREG { + AT91_REG VREG_MR; // Voltage Regulator Mode Register +} AT91S_VREG, *AT91PS_VREG; + +// -------- VREG_MR : (VREG Offset: 0x0) Voltage Regulator Mode Register -------- +#define AT91C_VREG_PSTDBY ((unsigned int) 0x1 << 0) // (VREG) Voltage Regulator Power Standby Mode + +// ***************************************************************************** +// SOFTWARE API DEFINITION FOR Memory Controller Interface +// ***************************************************************************** +typedef struct _AT91S_MC { + AT91_REG MC_RCR; // MC Remap Control Register + AT91_REG MC_ASR; // MC Abort Status Register + AT91_REG MC_AASR; // MC Abort Address Status Register + AT91_REG Reserved0[21]; // + AT91_REG MC_FMR; // MC Flash Mode Register + AT91_REG MC_FCR; // MC Flash Command Register + AT91_REG MC_FSR; // MC Flash Status Register +} AT91S_MC, *AT91PS_MC; + +// -------- MC_RCR : (MC Offset: 0x0) MC Remap Control Register -------- +#define AT91C_MC_RCB ((unsigned int) 0x1 << 0) // (MC) Remap Command Bit +// -------- MC_ASR : (MC Offset: 0x4) MC Abort Status Register -------- +#define AT91C_MC_UNDADD ((unsigned int) 0x1 << 0) // (MC) Undefined Addess Abort Status +#define AT91C_MC_MISADD ((unsigned int) 0x1 << 1) // (MC) Misaligned Addess Abort Status +#define AT91C_MC_ABTSZ ((unsigned int) 0x3 << 8) // (MC) Abort Size Status +#define AT91C_MC_ABTSZ_BYTE ((unsigned int) 0x0 << 8) // (MC) Byte +#define AT91C_MC_ABTSZ_HWORD ((unsigned int) 0x1 << 8) // (MC) Half-word +#define AT91C_MC_ABTSZ_WORD ((unsigned int) 0x2 << 8) // (MC) Word +#define AT91C_MC_ABTTYP ((unsigned int) 0x3 << 10) // (MC) Abort Type Status +#define AT91C_MC_ABTTYP_DATAR ((unsigned int) 0x0 << 10) // (MC) Data Read +#define AT91C_MC_ABTTYP_DATAW ((unsigned int) 0x1 << 10) // (MC) Data Write +#define AT91C_MC_ABTTYP_FETCH ((unsigned int) 0x2 << 10) // (MC) Code Fetch +#define AT91C_MC_MST0 ((unsigned int) 0x1 << 16) // (MC) Master 0 Abort Source +#define AT91C_MC_MST1 ((unsigned int) 0x1 << 17) // (MC) Master 1 Abort Source +#define AT91C_MC_SVMST0 ((unsigned int) 0x1 << 24) // (MC) Saved Master 0 Abort Source +#define AT91C_MC_SVMST1 ((unsigned int) 0x1 << 25) // (MC) Saved Master 1 Abort Source +// -------- MC_FMR : (MC Offset: 0x60) MC Flash Mode Register -------- +#define AT91C_MC_FRDY ((unsigned int) 0x1 << 0) // (MC) Flash Ready +#define AT91C_MC_LOCKE ((unsigned int) 0x1 << 2) // (MC) Lock Error +#define AT91C_MC_PROGE ((unsigned int) 0x1 << 3) // (MC) Programming Error +#define AT91C_MC_NEBP ((unsigned int) 0x1 << 7) // (MC) No Erase Before Programming +#define AT91C_MC_FWS ((unsigned int) 0x3 << 8) // (MC) Flash Wait State +#define AT91C_MC_FWS_0FWS ((unsigned int) 0x0 << 8) // (MC) 1 cycle for Read, 2 for Write operations +#define AT91C_MC_FWS_1FWS ((unsigned int) 0x1 << 8) // (MC) 2 cycles for Read, 3 for Write operations +#define AT91C_MC_FWS_2FWS ((unsigned int) 0x2 << 8) // (MC) 3 cycles for Read, 4 for Write operations +#define AT91C_MC_FWS_3FWS ((unsigned int) 0x3 << 8) // (MC) 4 cycles for Read, 4 for Write operations +#define AT91C_MC_FMCN ((unsigned int) 0xFF << 16) // (MC) Flash Microsecond Cycle Number +// -------- MC_FCR : (MC Offset: 0x64) MC Flash Command Register -------- +#define AT91C_MC_FCMD ((unsigned int) 0xF << 0) // (MC) Flash Command +#define AT91C_MC_FCMD_START_PROG ((unsigned int) 0x1) // (MC) Starts the programming of th epage specified by PAGEN. +#define AT91C_MC_FCMD_LOCK ((unsigned int) 0x2) // (MC) Starts a lock sequence of the sector defined by the bits 4 to 7 of the field PAGEN. +#define AT91C_MC_FCMD_PROG_AND_LOCK ((unsigned int) 0x3) // (MC) The lock sequence automatically happens after the programming sequence is completed. +#define AT91C_MC_FCMD_UNLOCK ((unsigned int) 0x4) // (MC) Starts an unlock sequence of the sector defined by the bits 4 to 7 of the field PAGEN. +#define AT91C_MC_FCMD_ERASE_ALL ((unsigned int) 0x8) // (MC) Starts the erase of the entire flash.If at least a page is locked, the command is cancelled. +#define AT91C_MC_FCMD_SET_GP_NVM ((unsigned int) 0xB) // (MC) Set General Purpose NVM bits. +#define AT91C_MC_FCMD_CLR_GP_NVM ((unsigned int) 0xD) // (MC) Clear General Purpose NVM bits. +#define AT91C_MC_FCMD_SET_SECURITY ((unsigned int) 0xF) // (MC) Set Security Bit. +#define AT91C_MC_PAGEN ((unsigned int) 0x3FF << 8) // (MC) Page Number +#define AT91C_MC_KEY ((unsigned int) 0xFF << 24) // (MC) Writing Protect Key +// -------- MC_FSR : (MC Offset: 0x68) MC Flash Command Register -------- +#define AT91C_MC_SECURITY ((unsigned int) 0x1 << 4) // (MC) Security Bit Status +#define AT91C_MC_GPNVM0 ((unsigned int) 0x1 << 8) // (MC) Sector 0 Lock Status +#define AT91C_MC_GPNVM1 ((unsigned int) 0x1 << 9) // (MC) Sector 1 Lock Status +#define AT91C_MC_GPNVM2 ((unsigned int) 0x1 << 10) // (MC) Sector 2 Lock Status +#define AT91C_MC_GPNVM3 ((unsigned int) 0x1 << 11) // (MC) Sector 3 Lock Status +#define AT91C_MC_GPNVM4 ((unsigned int) 0x1 << 12) // (MC) Sector 4 Lock Status +#define AT91C_MC_GPNVM5 ((unsigned int) 0x1 << 13) // (MC) Sector 5 Lock Status +#define AT91C_MC_GPNVM6 ((unsigned int) 0x1 << 14) // (MC) Sector 6 Lock Status +#define AT91C_MC_GPNVM7 ((unsigned int) 0x1 << 15) // (MC) Sector 7 Lock Status +#define AT91C_MC_LOCKS0 ((unsigned int) 0x1 << 16) // (MC) Sector 0 Lock Status +#define AT91C_MC_LOCKS1 ((unsigned int) 0x1 << 17) // (MC) Sector 1 Lock Status +#define AT91C_MC_LOCKS2 ((unsigned int) 0x1 << 18) // (MC) Sector 2 Lock Status +#define AT91C_MC_LOCKS3 ((unsigned int) 0x1 << 19) // (MC) Sector 3 Lock Status +#define AT91C_MC_LOCKS4 ((unsigned int) 0x1 << 20) // (MC) Sector 4 Lock Status +#define AT91C_MC_LOCKS5 ((unsigned int) 0x1 << 21) // (MC) Sector 5 Lock Status +#define AT91C_MC_LOCKS6 ((unsigned int) 0x1 << 22) // (MC) Sector 6 Lock Status +#define AT91C_MC_LOCKS7 ((unsigned int) 0x1 << 23) // (MC) Sector 7 Lock Status +#define AT91C_MC_LOCKS8 ((unsigned int) 0x1 << 24) // (MC) Sector 8 Lock Status +#define AT91C_MC_LOCKS9 ((unsigned int) 0x1 << 25) // (MC) Sector 9 Lock Status +#define AT91C_MC_LOCKS10 ((unsigned int) 0x1 << 26) // (MC) Sector 10 Lock Status +#define AT91C_MC_LOCKS11 ((unsigned int) 0x1 << 27) // (MC) Sector 11 Lock Status +#define AT91C_MC_LOCKS12 ((unsigned int) 0x1 << 28) // (MC) Sector 12 Lock Status +#define AT91C_MC_LOCKS13 ((unsigned int) 0x1 << 29) // (MC) Sector 13 Lock Status +#define AT91C_MC_LOCKS14 ((unsigned int) 0x1 << 30) // (MC) Sector 14 Lock Status +#define AT91C_MC_LOCKS15 ((unsigned int) 0x1 << 31) // (MC) Sector 15 Lock Status + +// ***************************************************************************** +// SOFTWARE API DEFINITION FOR Serial Parallel Interface +// ***************************************************************************** +typedef struct _AT91S_SPI { + AT91_REG SPI_CR; // Control Register + AT91_REG SPI_MR; // Mode Register + AT91_REG SPI_RDR; // Receive Data Register + AT91_REG SPI_TDR; // Transmit Data Register + AT91_REG SPI_SR; // Status Register + AT91_REG SPI_IER; // Interrupt Enable Register + AT91_REG SPI_IDR; // Interrupt Disable Register + AT91_REG SPI_IMR; // Interrupt Mask Register + AT91_REG Reserved0[4]; // + AT91_REG SPI_CSR[4]; // Chip Select Register + AT91_REG Reserved1[48]; // + AT91_REG SPI_RPR; // Receive Pointer Register + AT91_REG SPI_RCR; // Receive Counter Register + AT91_REG SPI_TPR; // Transmit Pointer Register + AT91_REG SPI_TCR; // Transmit Counter Register + AT91_REG SPI_RNPR; // Receive Next Pointer Register + AT91_REG SPI_RNCR; // Receive Next Counter Register + AT91_REG SPI_TNPR; // Transmit Next Pointer Register + AT91_REG SPI_TNCR; // Transmit Next Counter Register + AT91_REG SPI_PTCR; // PDC Transfer Control Register + AT91_REG SPI_PTSR; // PDC Transfer Status Register +} AT91S_SPI, *AT91PS_SPI; + +// -------- SPI_CR : (SPI Offset: 0x0) SPI Control Register -------- +#define AT91C_SPI_SPIEN ((unsigned int) 0x1 << 0) // (SPI) SPI Enable +#define AT91C_SPI_SPIDIS ((unsigned int) 0x1 << 1) // (SPI) SPI Disable +#define AT91C_SPI_SWRST ((unsigned int) 0x1 << 7) // (SPI) SPI Software reset +#define AT91C_SPI_LASTXFER ((unsigned int) 0x1 << 24) // (SPI) SPI Last Transfer +// -------- SPI_MR : (SPI Offset: 0x4) SPI Mode Register -------- +#define AT91C_SPI_MSTR ((unsigned int) 0x1 << 0) // (SPI) Master/Slave Mode +#define AT91C_SPI_PS ((unsigned int) 0x1 << 1) // (SPI) Peripheral Select +#define AT91C_SPI_PS_FIXED ((unsigned int) 0x0 << 1) // (SPI) Fixed Peripheral Select +#define AT91C_SPI_PS_VARIABLE ((unsigned int) 0x1 << 1) // (SPI) Variable Peripheral Select +#define AT91C_SPI_PCSDEC ((unsigned int) 0x1 << 2) // (SPI) Chip Select Decode +#define AT91C_SPI_FDIV ((unsigned int) 0x1 << 3) // (SPI) Clock Selection +#define AT91C_SPI_MODFDIS ((unsigned int) 0x1 << 4) // (SPI) Mode Fault Detection +#define AT91C_SPI_LLB ((unsigned int) 0x1 << 7) // (SPI) Clock Selection +#define AT91C_SPI_PCS ((unsigned int) 0xF << 16) // (SPI) Peripheral Chip Select +#define AT91C_SPI_DLYBCS ((unsigned int) 0xFF << 24) // (SPI) Delay Between Chip Selects +// -------- SPI_RDR : (SPI Offset: 0x8) Receive Data Register -------- +#define AT91C_SPI_RD ((unsigned int) 0xFFFF << 0) // (SPI) Receive Data +#define AT91C_SPI_RPCS ((unsigned int) 0xF << 16) // (SPI) Peripheral Chip Select Status +// -------- SPI_TDR : (SPI Offset: 0xc) Transmit Data Register -------- +#define AT91C_SPI_TD ((unsigned int) 0xFFFF << 0) // (SPI) Transmit Data +#define AT91C_SPI_TPCS ((unsigned int) 0xF << 16) // (SPI) Peripheral Chip Select Status +// -------- SPI_SR : (SPI Offset: 0x10) Status Register -------- +#define AT91C_SPI_RDRF ((unsigned int) 0x1 << 0) // (SPI) Receive Data Register Full +#define AT91C_SPI_TDRE ((unsigned int) 0x1 << 1) // (SPI) Transmit Data Register Empty +#define AT91C_SPI_MODF ((unsigned int) 0x1 << 2) // (SPI) Mode Fault Error +#define AT91C_SPI_OVRES ((unsigned int) 0x1 << 3) // (SPI) Overrun Error Status +#define AT91C_SPI_ENDRX ((unsigned int) 0x1 << 4) // (SPI) End of Receiver Transfer +#define AT91C_SPI_ENDTX ((unsigned int) 0x1 << 5) // (SPI) End of Receiver Transfer +#define AT91C_SPI_RXBUFF ((unsigned int) 0x1 << 6) // (SPI) RXBUFF Interrupt +#define AT91C_SPI_TXBUFE ((unsigned int) 0x1 << 7) // (SPI) TXBUFE Interrupt +#define AT91C_SPI_NSSR ((unsigned int) 0x1 << 8) // (SPI) NSSR Interrupt +#define AT91C_SPI_TXEMPTY ((unsigned int) 0x1 << 9) // (SPI) TXEMPTY Interrupt +#define AT91C_SPI_SPIENS ((unsigned int) 0x1 << 16) // (SPI) Enable Status +// -------- SPI_IER : (SPI Offset: 0x14) Interrupt Enable Register -------- +// -------- SPI_IDR : (SPI Offset: 0x18) Interrupt Disable Register -------- +// -------- SPI_IMR : (SPI Offset: 0x1c) Interrupt Mask Register -------- +// -------- SPI_CSR : (SPI Offset: 0x30) Chip Select Register -------- +#define AT91C_SPI_CPOL ((unsigned int) 0x1 << 0) // (SPI) Clock Polarity +#define AT91C_SPI_NCPHA ((unsigned int) 0x1 << 1) // (SPI) Clock Phase +#define AT91C_SPI_CSAAT ((unsigned int) 0x1 << 3) // (SPI) Chip Select Active After Transfer +#define AT91C_SPI_BITS ((unsigned int) 0xF << 4) // (SPI) Bits Per Transfer +#define AT91C_SPI_BITS_8 ((unsigned int) 0x0 << 4) // (SPI) 8 Bits Per transfer +#define AT91C_SPI_BITS_9 ((unsigned int) 0x1 << 4) // (SPI) 9 Bits Per transfer +#define AT91C_SPI_BITS_10 ((unsigned int) 0x2 << 4) // (SPI) 10 Bits Per transfer +#define AT91C_SPI_BITS_11 ((unsigned int) 0x3 << 4) // (SPI) 11 Bits Per transfer +#define AT91C_SPI_BITS_12 ((unsigned int) 0x4 << 4) // (SPI) 12 Bits Per transfer +#define AT91C_SPI_BITS_13 ((unsigned int) 0x5 << 4) // (SPI) 13 Bits Per transfer +#define AT91C_SPI_BITS_14 ((unsigned int) 0x6 << 4) // (SPI) 14 Bits Per transfer +#define AT91C_SPI_BITS_15 ((unsigned int) 0x7 << 4) // (SPI) 15 Bits Per transfer +#define AT91C_SPI_BITS_16 ((unsigned int) 0x8 << 4) // (SPI) 16 Bits Per transfer +#define AT91C_SPI_SCBR ((unsigned int) 0xFF << 8) // (SPI) Serial Clock Baud Rate +#define AT91C_SPI_DLYBS ((unsigned int) 0xFF << 16) // (SPI) Delay Before SPCK +#define AT91C_SPI_DLYBCT ((unsigned int) 0xFF << 24) // (SPI) Delay Between Consecutive Transfers + +// ***************************************************************************** +// SOFTWARE API DEFINITION FOR Usart +// ***************************************************************************** +typedef struct _AT91S_USART { + AT91_REG US_CR; // Control Register + AT91_REG US_MR; // Mode Register + AT91_REG US_IER; // Interrupt Enable Register + AT91_REG US_IDR; // Interrupt Disable Register + AT91_REG US_IMR; // Interrupt Mask Register + AT91_REG US_CSR; // Channel Status Register + AT91_REG US_RHR; // Receiver Holding Register + AT91_REG US_THR; // Transmitter Holding Register + AT91_REG US_BRGR; // Baud Rate Generator Register + AT91_REG US_RTOR; // Receiver Time-out Register + AT91_REG US_TTGR; // Transmitter Time-guard Register + AT91_REG Reserved0[5]; // + AT91_REG US_FIDI; // FI_DI_Ratio Register + AT91_REG US_NER; // Nb Errors Register + AT91_REG Reserved1[1]; // + AT91_REG US_IF; // IRDA_FILTER Register + AT91_REG Reserved2[44]; // + AT91_REG US_RPR; // Receive Pointer Register + AT91_REG US_RCR; // Receive Counter Register + AT91_REG US_TPR; // Transmit Pointer Register + AT91_REG US_TCR; // Transmit Counter Register + AT91_REG US_RNPR; // Receive Next Pointer Register + AT91_REG US_RNCR; // Receive Next Counter Register + AT91_REG US_TNPR; // Transmit Next Pointer Register + AT91_REG US_TNCR; // Transmit Next Counter Register + AT91_REG US_PTCR; // PDC Transfer Control Register + AT91_REG US_PTSR; // PDC Transfer Status Register +} AT91S_USART, *AT91PS_USART; + +// -------- US_CR : (USART Offset: 0x0) Debug Unit Control Register -------- +#define AT91C_US_STTBRK ((unsigned int) 0x1 << 9) // (USART) Start Break +#define AT91C_US_STPBRK ((unsigned int) 0x1 << 10) // (USART) Stop Break +#define AT91C_US_STTTO ((unsigned int) 0x1 << 11) // (USART) Start Time-out +#define AT91C_US_SENDA ((unsigned int) 0x1 << 12) // (USART) Send Address +#define AT91C_US_RSTIT ((unsigned int) 0x1 << 13) // (USART) Reset Iterations +#define AT91C_US_RSTNACK ((unsigned int) 0x1 << 14) // (USART) Reset Non Acknowledge +#define AT91C_US_RETTO ((unsigned int) 0x1 << 15) // (USART) Rearm Time-out +#define AT91C_US_DTREN ((unsigned int) 0x1 << 16) // (USART) Data Terminal ready Enable +#define AT91C_US_DTRDIS ((unsigned int) 0x1 << 17) // (USART) Data Terminal ready Disable +#define AT91C_US_RTSEN ((unsigned int) 0x1 << 18) // (USART) Request to Send enable +#define AT91C_US_RTSDIS ((unsigned int) 0x1 << 19) // (USART) Request to Send Disable +// -------- US_MR : (USART Offset: 0x4) Debug Unit Mode Register -------- +#define AT91C_US_USMODE ((unsigned int) 0xF << 0) // (USART) Usart mode +#define AT91C_US_USMODE_NORMAL ((unsigned int) 0x0) // (USART) Normal +#define AT91C_US_USMODE_RS485 ((unsigned int) 0x1) // (USART) RS485 +#define AT91C_US_USMODE_HWHSH ((unsigned int) 0x2) // (USART) Hardware Handshaking +#define AT91C_US_USMODE_MODEM ((unsigned int) 0x3) // (USART) Modem +#define AT91C_US_USMODE_ISO7816_0 ((unsigned int) 0x4) // (USART) ISO7816 protocol: T = 0 +#define AT91C_US_USMODE_ISO7816_1 ((unsigned int) 0x6) // (USART) ISO7816 protocol: T = 1 +#define AT91C_US_USMODE_IRDA ((unsigned int) 0x8) // (USART) IrDA +#define AT91C_US_USMODE_SWHSH ((unsigned int) 0xC) // (USART) Software Handshaking +#define AT91C_US_CLKS ((unsigned int) 0x3 << 4) // (USART) Clock Selection (Baud Rate generator Input Clock +#define AT91C_US_CLKS_CLOCK ((unsigned int) 0x0 << 4) // (USART) Clock +#define AT91C_US_CLKS_FDIV1 ((unsigned int) 0x1 << 4) // (USART) fdiv1 +#define AT91C_US_CLKS_SLOW ((unsigned int) 0x2 << 4) // (USART) slow_clock (ARM) +#define AT91C_US_CLKS_EXT ((unsigned int) 0x3 << 4) // (USART) External (SCK) +#define AT91C_US_CHRL ((unsigned int) 0x3 << 6) // (USART) Clock Selection (Baud Rate generator Input Clock +#define AT91C_US_CHRL_5_BITS ((unsigned int) 0x0 << 6) // (USART) Character Length: 5 bits +#define AT91C_US_CHRL_6_BITS ((unsigned int) 0x1 << 6) // (USART) Character Length: 6 bits +#define AT91C_US_CHRL_7_BITS ((unsigned int) 0x2 << 6) // (USART) Character Length: 7 bits +#define AT91C_US_CHRL_8_BITS ((unsigned int) 0x3 << 6) // (USART) Character Length: 8 bits +#define AT91C_US_SYNC ((unsigned int) 0x1 << 8) // (USART) Synchronous Mode Select +#define AT91C_US_NBSTOP ((unsigned int) 0x3 << 12) // (USART) Number of Stop bits +#define AT91C_US_NBSTOP_1_BIT ((unsigned int) 0x0 << 12) // (USART) 1 stop bit +#define AT91C_US_NBSTOP_15_BIT ((unsigned int) 0x1 << 12) // (USART) Asynchronous (SYNC=0) 2 stop bits Synchronous (SYNC=1) 2 stop bits +#define AT91C_US_NBSTOP_2_BIT ((unsigned int) 0x2 << 12) // (USART) 2 stop bits +#define AT91C_US_MSBF ((unsigned int) 0x1 << 16) // (USART) Bit Order +#define AT91C_US_MODE9 ((unsigned int) 0x1 << 17) // (USART) 9-bit Character length +#define AT91C_US_CKLO ((unsigned int) 0x1 << 18) // (USART) Clock Output Select +#define AT91C_US_OVER ((unsigned int) 0x1 << 19) // (USART) Over Sampling Mode +#define AT91C_US_INACK ((unsigned int) 0x1 << 20) // (USART) Inhibit Non Acknowledge +#define AT91C_US_DSNACK ((unsigned int) 0x1 << 21) // (USART) Disable Successive NACK +#define AT91C_US_MAX_ITER ((unsigned int) 0x1 << 24) // (USART) Number of Repetitions +#define AT91C_US_FILTER ((unsigned int) 0x1 << 28) // (USART) Receive Line Filter +// -------- US_IER : (USART Offset: 0x8) Debug Unit Interrupt Enable Register -------- +#define AT91C_US_RXBRK ((unsigned int) 0x1 << 2) // (USART) Break Received/End of Break +#define AT91C_US_TIMEOUT ((unsigned int) 0x1 << 8) // (USART) Receiver Time-out +#define AT91C_US_ITERATION ((unsigned int) 0x1 << 10) // (USART) Max number of Repetitions Reached +#define AT91C_US_NACK ((unsigned int) 0x1 << 13) // (USART) Non Acknowledge +#define AT91C_US_RIIC ((unsigned int) 0x1 << 16) // (USART) Ring INdicator Input Change Flag +#define AT91C_US_DSRIC ((unsigned int) 0x1 << 17) // (USART) Data Set Ready Input Change Flag +#define AT91C_US_DCDIC ((unsigned int) 0x1 << 18) // (USART) Data Carrier Flag +#define AT91C_US_CTSIC ((unsigned int) 0x1 << 19) // (USART) Clear To Send Input Change Flag +// -------- US_IDR : (USART Offset: 0xc) Debug Unit Interrupt Disable Register -------- +// -------- US_IMR : (USART Offset: 0x10) Debug Unit Interrupt Mask Register -------- +// -------- US_CSR : (USART Offset: 0x14) Debug Unit Channel Status Register -------- +#define AT91C_US_RI ((unsigned int) 0x1 << 20) // (USART) Image of RI Input +#define AT91C_US_DSR ((unsigned int) 0x1 << 21) // (USART) Image of DSR Input +#define AT91C_US_DCD ((unsigned int) 0x1 << 22) // (USART) Image of DCD Input +#define AT91C_US_CTS ((unsigned int) 0x1 << 23) // (USART) Image of CTS Input + +// ***************************************************************************** +// SOFTWARE API DEFINITION FOR Synchronous Serial Controller Interface +// ***************************************************************************** +typedef struct _AT91S_SSC { + AT91_REG SSC_CR; // Control Register + AT91_REG SSC_CMR; // Clock Mode Register + AT91_REG Reserved0[2]; // + AT91_REG SSC_RCMR; // Receive Clock ModeRegister + AT91_REG SSC_RFMR; // Receive Frame Mode Register + AT91_REG SSC_TCMR; // Transmit Clock Mode Register + AT91_REG SSC_TFMR; // Transmit Frame Mode Register + AT91_REG SSC_RHR; // Receive Holding Register + AT91_REG SSC_THR; // Transmit Holding Register + AT91_REG Reserved1[2]; // + AT91_REG SSC_RSHR; // Receive Sync Holding Register + AT91_REG SSC_TSHR; // Transmit Sync Holding Register + AT91_REG Reserved2[2]; // + AT91_REG SSC_SR; // Status Register + AT91_REG SSC_IER; // Interrupt Enable Register + AT91_REG SSC_IDR; // Interrupt Disable Register + AT91_REG SSC_IMR; // Interrupt Mask Register + AT91_REG Reserved3[44]; // + AT91_REG SSC_RPR; // Receive Pointer Register + AT91_REG SSC_RCR; // Receive Counter Register + AT91_REG SSC_TPR; // Transmit Pointer Register + AT91_REG SSC_TCR; // Transmit Counter Register + AT91_REG SSC_RNPR; // Receive Next Pointer Register + AT91_REG SSC_RNCR; // Receive Next Counter Register + AT91_REG SSC_TNPR; // Transmit Next Pointer Register + AT91_REG SSC_TNCR; // Transmit Next Counter Register + AT91_REG SSC_PTCR; // PDC Transfer Control Register + AT91_REG SSC_PTSR; // PDC Transfer Status Register +} AT91S_SSC, *AT91PS_SSC; + +// -------- SSC_CR : (SSC Offset: 0x0) SSC Control Register -------- +#define AT91C_SSC_RXEN ((unsigned int) 0x1 << 0) // (SSC) Receive Enable +#define AT91C_SSC_RXDIS ((unsigned int) 0x1 << 1) // (SSC) Receive Disable +#define AT91C_SSC_TXEN ((unsigned int) 0x1 << 8) // (SSC) Transmit Enable +#define AT91C_SSC_TXDIS ((unsigned int) 0x1 << 9) // (SSC) Transmit Disable +#define AT91C_SSC_SWRST ((unsigned int) 0x1 << 15) // (SSC) Software Reset +// -------- SSC_RCMR : (SSC Offset: 0x10) SSC Receive Clock Mode Register -------- +#define AT91C_SSC_CKS ((unsigned int) 0x3 << 0) // (SSC) Receive/Transmit Clock Selection +#define AT91C_SSC_CKS_DIV ((unsigned int) 0x0) // (SSC) Divided Clock +#define AT91C_SSC_CKS_TK ((unsigned int) 0x1) // (SSC) TK Clock signal +#define AT91C_SSC_CKS_RK ((unsigned int) 0x2) // (SSC) RK pin +#define AT91C_SSC_CKO ((unsigned int) 0x7 << 2) // (SSC) Receive/Transmit Clock Output Mode Selection +#define AT91C_SSC_CKO_NONE ((unsigned int) 0x0 << 2) // (SSC) Receive/Transmit Clock Output Mode: None RK pin: Input-only +#define AT91C_SSC_CKO_CONTINOUS ((unsigned int) 0x1 << 2) // (SSC) Continuous Receive/Transmit Clock RK pin: Output +#define AT91C_SSC_CKO_DATA_TX ((unsigned int) 0x2 << 2) // (SSC) Receive/Transmit Clock only during data transfers RK pin: Output +#define AT91C_SSC_CKI ((unsigned int) 0x1 << 5) // (SSC) Receive/Transmit Clock Inversion +#define AT91C_SSC_CKG ((unsigned int) 0x3 << 6) // (SSC) Receive/Transmit Clock Gating Selection +#define AT91C_SSC_CKG_NONE ((unsigned int) 0x0 << 6) // (SSC) Receive/Transmit Clock Gating: None, continuous clock +#define AT91C_SSC_CKG_LOW ((unsigned int) 0x1 << 6) // (SSC) Receive/Transmit Clock enabled only if RF Low +#define AT91C_SSC_CKG_HIGH ((unsigned int) 0x2 << 6) // (SSC) Receive/Transmit Clock enabled only if RF High +#define AT91C_SSC_START ((unsigned int) 0xF << 8) // (SSC) Receive/Transmit Start Selection +#define AT91C_SSC_START_CONTINOUS ((unsigned int) 0x0 << 8) // (SSC) Continuous, as soon as the receiver is enabled, and immediately after the end of transfer of the previous data. +#define AT91C_SSC_START_TX ((unsigned int) 0x1 << 8) // (SSC) Transmit/Receive start +#define AT91C_SSC_START_LOW_RF ((unsigned int) 0x2 << 8) // (SSC) Detection of a low level on RF input +#define AT91C_SSC_START_HIGH_RF ((unsigned int) 0x3 << 8) // (SSC) Detection of a high level on RF input +#define AT91C_SSC_START_FALL_RF ((unsigned int) 0x4 << 8) // (SSC) Detection of a falling edge on RF input +#define AT91C_SSC_START_RISE_RF ((unsigned int) 0x5 << 8) // (SSC) Detection of a rising edge on RF input +#define AT91C_SSC_START_LEVEL_RF ((unsigned int) 0x6 << 8) // (SSC) Detection of any level change on RF input +#define AT91C_SSC_START_EDGE_RF ((unsigned int) 0x7 << 8) // (SSC) Detection of any edge on RF input +#define AT91C_SSC_START_0 ((unsigned int) 0x8 << 8) // (SSC) Compare 0 +#define AT91C_SSC_STOP ((unsigned int) 0x1 << 12) // (SSC) Receive Stop Selection +#define AT91C_SSC_STTDLY ((unsigned int) 0xFF << 16) // (SSC) Receive/Transmit Start Delay +#define AT91C_SSC_PERIOD ((unsigned int) 0xFF << 24) // (SSC) Receive/Transmit Period Divider Selection +// -------- SSC_RFMR : (SSC Offset: 0x14) SSC Receive Frame Mode Register -------- +#define AT91C_SSC_DATLEN ((unsigned int) 0x1F << 0) // (SSC) Data Length +#define AT91C_SSC_LOOP ((unsigned int) 0x1 << 5) // (SSC) Loop Mode +#define AT91C_SSC_MSBF ((unsigned int) 0x1 << 7) // (SSC) Most Significant Bit First +#define AT91C_SSC_DATNB ((unsigned int) 0xF << 8) // (SSC) Data Number per Frame +#define AT91C_SSC_FSLEN ((unsigned int) 0xF << 16) // (SSC) Receive/Transmit Frame Sync length +#define AT91C_SSC_FSOS ((unsigned int) 0x7 << 20) // (SSC) Receive/Transmit Frame Sync Output Selection +#define AT91C_SSC_FSOS_NONE ((unsigned int) 0x0 << 20) // (SSC) Selected Receive/Transmit Frame Sync Signal: None RK pin Input-only +#define AT91C_SSC_FSOS_NEGATIVE ((unsigned int) 0x1 << 20) // (SSC) Selected Receive/Transmit Frame Sync Signal: Negative Pulse +#define AT91C_SSC_FSOS_POSITIVE ((unsigned int) 0x2 << 20) // (SSC) Selected Receive/Transmit Frame Sync Signal: Positive Pulse +#define AT91C_SSC_FSOS_LOW ((unsigned int) 0x3 << 20) // (SSC) Selected Receive/Transmit Frame Sync Signal: Driver Low during data transfer +#define AT91C_SSC_FSOS_HIGH ((unsigned int) 0x4 << 20) // (SSC) Selected Receive/Transmit Frame Sync Signal: Driver High during data transfer +#define AT91C_SSC_FSOS_TOGGLE ((unsigned int) 0x5 << 20) // (SSC) Selected Receive/Transmit Frame Sync Signal: Toggling at each start of data transfer +#define AT91C_SSC_FSEDGE ((unsigned int) 0x1 << 24) // (SSC) Frame Sync Edge Detection +// -------- SSC_TCMR : (SSC Offset: 0x18) SSC Transmit Clock Mode Register -------- +// -------- SSC_TFMR : (SSC Offset: 0x1c) SSC Transmit Frame Mode Register -------- +#define AT91C_SSC_DATDEF ((unsigned int) 0x1 << 5) // (SSC) Data Default Value +#define AT91C_SSC_FSDEN ((unsigned int) 0x1 << 23) // (SSC) Frame Sync Data Enable +// -------- SSC_SR : (SSC Offset: 0x40) SSC Status Register -------- +#define AT91C_SSC_TXRDY ((unsigned int) 0x1 << 0) // (SSC) Transmit Ready +#define AT91C_SSC_TXEMPTY ((unsigned int) 0x1 << 1) // (SSC) Transmit Empty +#define AT91C_SSC_ENDTX ((unsigned int) 0x1 << 2) // (SSC) End Of Transmission +#define AT91C_SSC_TXBUFE ((unsigned int) 0x1 << 3) // (SSC) Transmit Buffer Empty +#define AT91C_SSC_RXRDY ((unsigned int) 0x1 << 4) // (SSC) Receive Ready +#define AT91C_SSC_OVRUN ((unsigned int) 0x1 << 5) // (SSC) Receive Overrun +#define AT91C_SSC_ENDRX ((unsigned int) 0x1 << 6) // (SSC) End of Reception +#define AT91C_SSC_RXBUFF ((unsigned int) 0x1 << 7) // (SSC) Receive Buffer Full +#define AT91C_SSC_CP0 ((unsigned int) 0x1 << 8) // (SSC) Compare 0 +#define AT91C_SSC_CP1 ((unsigned int) 0x1 << 9) // (SSC) Compare 1 +#define AT91C_SSC_TXSYN ((unsigned int) 0x1 << 10) // (SSC) Transmit Sync +#define AT91C_SSC_RXSYN ((unsigned int) 0x1 << 11) // (SSC) Receive Sync +#define AT91C_SSC_TXENA ((unsigned int) 0x1 << 16) // (SSC) Transmit Enable +#define AT91C_SSC_RXENA ((unsigned int) 0x1 << 17) // (SSC) Receive Enable +// -------- SSC_IER : (SSC Offset: 0x44) SSC Interrupt Enable Register -------- +// -------- SSC_IDR : (SSC Offset: 0x48) SSC Interrupt Disable Register -------- +// -------- SSC_IMR : (SSC Offset: 0x4c) SSC Interrupt Mask Register -------- + +// ***************************************************************************** +// SOFTWARE API DEFINITION FOR Two-wire Interface +// ***************************************************************************** +typedef struct _AT91S_TWI { + AT91_REG TWI_CR; // Control Register + AT91_REG TWI_MMR; // Master Mode Register + AT91_REG Reserved0[1]; // + AT91_REG TWI_IADR; // Internal Address Register + AT91_REG TWI_CWGR; // Clock Waveform Generator Register + AT91_REG Reserved1[3]; // + AT91_REG TWI_SR; // Status Register + AT91_REG TWI_IER; // Interrupt Enable Register + AT91_REG TWI_IDR; // Interrupt Disable Register + AT91_REG TWI_IMR; // Interrupt Mask Register + AT91_REG TWI_RHR; // Receive Holding Register + AT91_REG TWI_THR; // Transmit Holding Register +} AT91S_TWI, *AT91PS_TWI; + +// -------- TWI_CR : (TWI Offset: 0x0) TWI Control Register -------- +#define AT91C_TWI_START ((unsigned int) 0x1 << 0) // (TWI) Send a START Condition +#define AT91C_TWI_STOP ((unsigned int) 0x1 << 1) // (TWI) Send a STOP Condition +#define AT91C_TWI_MSEN ((unsigned int) 0x1 << 2) // (TWI) TWI Master Transfer Enabled +#define AT91C_TWI_MSDIS ((unsigned int) 0x1 << 3) // (TWI) TWI Master Transfer Disabled +#define AT91C_TWI_SWRST ((unsigned int) 0x1 << 7) // (TWI) Software Reset +// -------- TWI_MMR : (TWI Offset: 0x4) TWI Master Mode Register -------- +#define AT91C_TWI_IADRSZ ((unsigned int) 0x3 << 8) // (TWI) Internal Device Address Size +#define AT91C_TWI_IADRSZ_NO ((unsigned int) 0x0 << 8) // (TWI) No internal device address +#define AT91C_TWI_IADRSZ_1_BYTE ((unsigned int) 0x1 << 8) // (TWI) One-byte internal device address +#define AT91C_TWI_IADRSZ_2_BYTE ((unsigned int) 0x2 << 8) // (TWI) Two-byte internal device address +#define AT91C_TWI_IADRSZ_3_BYTE ((unsigned int) 0x3 << 8) // (TWI) Three-byte internal device address +#define AT91C_TWI_MREAD ((unsigned int) 0x1 << 12) // (TWI) Master Read Direction +#define AT91C_TWI_DADR ((unsigned int) 0x7F << 16) // (TWI) Device Address +// -------- TWI_CWGR : (TWI Offset: 0x10) TWI Clock Waveform Generator Register -------- +#define AT91C_TWI_CLDIV ((unsigned int) 0xFF << 0) // (TWI) Clock Low Divider +#define AT91C_TWI_CHDIV ((unsigned int) 0xFF << 8) // (TWI) Clock High Divider +#define AT91C_TWI_CKDIV ((unsigned int) 0x7 << 16) // (TWI) Clock Divider +// -------- TWI_SR : (TWI Offset: 0x20) TWI Status Register -------- +#define AT91C_TWI_TXCOMP ((unsigned int) 0x1 << 0) // (TWI) Transmission Completed +#define AT91C_TWI_RXRDY ((unsigned int) 0x1 << 1) // (TWI) Receive holding register ReaDY +#define AT91C_TWI_TXRDY ((unsigned int) 0x1 << 2) // (TWI) Transmit holding register ReaDY +#define AT91C_TWI_OVRE ((unsigned int) 0x1 << 6) // (TWI) Overrun Error +#define AT91C_TWI_UNRE ((unsigned int) 0x1 << 7) // (TWI) Underrun Error +#define AT91C_TWI_NACK ((unsigned int) 0x1 << 8) // (TWI) Not Acknowledged +// -------- TWI_IER : (TWI Offset: 0x24) TWI Interrupt Enable Register -------- +// -------- TWI_IDR : (TWI Offset: 0x28) TWI Interrupt Disable Register -------- +// -------- TWI_IMR : (TWI Offset: 0x2c) TWI Interrupt Mask Register -------- + +// ***************************************************************************** +// SOFTWARE API DEFINITION FOR PWMC Channel Interface +// ***************************************************************************** +typedef struct _AT91S_PWMC_CH { + AT91_REG PWMC_CMR; // Channel Mode Register + AT91_REG PWMC_CDTYR; // Channel Duty Cycle Register + AT91_REG PWMC_CPRDR; // Channel Period Register + AT91_REG PWMC_CCNTR; // Channel Counter Register + AT91_REG PWMC_CUPDR; // Channel Update Register + AT91_REG PWMC_Reserved[3]; // Reserved +} AT91S_PWMC_CH, *AT91PS_PWMC_CH; + +// -------- PWMC_CMR : (PWMC_CH Offset: 0x0) PWMC Channel Mode Register -------- +#define AT91C_PWMC_CPRE ((unsigned int) 0xF << 0) // (PWMC_CH) Channel Pre-scaler : PWMC_CLKx +#define AT91C_PWMC_CPRE_MCK ((unsigned int) 0x0) // (PWMC_CH) +#define AT91C_PWMC_CPRE_MCKA ((unsigned int) 0xB) // (PWMC_CH) +#define AT91C_PWMC_CPRE_MCKB ((unsigned int) 0xC) // (PWMC_CH) +#define AT91C_PWMC_CALG ((unsigned int) 0x1 << 8) // (PWMC_CH) Channel Alignment +#define AT91C_PWMC_CPOL ((unsigned int) 0x1 << 9) // (PWMC_CH) Channel Polarity +#define AT91C_PWMC_CPD ((unsigned int) 0x1 << 10) // (PWMC_CH) Channel Update Period +// -------- PWMC_CDTYR : (PWMC_CH Offset: 0x4) PWMC Channel Duty Cycle Register -------- +#define AT91C_PWMC_CDTY ((unsigned int) 0x0 << 0) // (PWMC_CH) Channel Duty Cycle +// -------- PWMC_CPRDR : (PWMC_CH Offset: 0x8) PWMC Channel Period Register -------- +#define AT91C_PWMC_CPRD ((unsigned int) 0x0 << 0) // (PWMC_CH) Channel Period +// -------- PWMC_CCNTR : (PWMC_CH Offset: 0xc) PWMC Channel Counter Register -------- +#define AT91C_PWMC_CCNT ((unsigned int) 0x0 << 0) // (PWMC_CH) Channel Counter +// -------- PWMC_CUPDR : (PWMC_CH Offset: 0x10) PWMC Channel Update Register -------- +#define AT91C_PWMC_CUPD ((unsigned int) 0x0 << 0) // (PWMC_CH) Channel Update + +// ***************************************************************************** +// SOFTWARE API DEFINITION FOR Pulse Width Modulation Controller Interface +// ***************************************************************************** +typedef struct _AT91S_PWMC { + AT91_REG PWMC_MR; // PWMC Mode Register + AT91_REG PWMC_ENA; // PWMC Enable Register + AT91_REG PWMC_DIS; // PWMC Disable Register + AT91_REG PWMC_SR; // PWMC Status Register + AT91_REG PWMC_IER; // PWMC Interrupt Enable Register + AT91_REG PWMC_IDR; // PWMC Interrupt Disable Register + AT91_REG PWMC_IMR; // PWMC Interrupt Mask Register + AT91_REG PWMC_ISR; // PWMC Interrupt Status Register + AT91_REG Reserved0[55]; // + AT91_REG PWMC_VR; // PWMC Version Register + AT91_REG Reserved1[64]; // + AT91S_PWMC_CH PWMC_CH[4]; // PWMC Channel +} AT91S_PWMC, *AT91PS_PWMC; + +// -------- PWMC_MR : (PWMC Offset: 0x0) PWMC Mode Register -------- +#define AT91C_PWMC_DIVA ((unsigned int) 0xFF << 0) // (PWMC) CLKA divide factor. +#define AT91C_PWMC_PREA ((unsigned int) 0xF << 8) // (PWMC) Divider Input Clock Prescaler A +#define AT91C_PWMC_PREA_MCK ((unsigned int) 0x0 << 8) // (PWMC) +#define AT91C_PWMC_DIVB ((unsigned int) 0xFF << 16) // (PWMC) CLKB divide factor. +#define AT91C_PWMC_PREB ((unsigned int) 0xF << 24) // (PWMC) Divider Input Clock Prescaler B +#define AT91C_PWMC_PREB_MCK ((unsigned int) 0x0 << 24) // (PWMC) +// -------- PWMC_ENA : (PWMC Offset: 0x4) PWMC Enable Register -------- +#define AT91C_PWMC_CHID0 ((unsigned int) 0x1 << 0) // (PWMC) Channel ID 0 +#define AT91C_PWMC_CHID1 ((unsigned int) 0x1 << 1) // (PWMC) Channel ID 1 +#define AT91C_PWMC_CHID2 ((unsigned int) 0x1 << 2) // (PWMC) Channel ID 2 +#define AT91C_PWMC_CHID3 ((unsigned int) 0x1 << 3) // (PWMC) Channel ID 3 +// -------- PWMC_DIS : (PWMC Offset: 0x8) PWMC Disable Register -------- +// -------- PWMC_SR : (PWMC Offset: 0xc) PWMC Status Register -------- +// -------- PWMC_IER : (PWMC Offset: 0x10) PWMC Interrupt Enable Register -------- +// -------- PWMC_IDR : (PWMC Offset: 0x14) PWMC Interrupt Disable Register -------- +// -------- PWMC_IMR : (PWMC Offset: 0x18) PWMC Interrupt Mask Register -------- +// -------- PWMC_ISR : (PWMC Offset: 0x1c) PWMC Interrupt Status Register -------- + +// ***************************************************************************** +// SOFTWARE API DEFINITION FOR USB Device Interface +// ***************************************************************************** +typedef struct _AT91S_UDP { + AT91_REG UDP_NUM; // Frame Number Register + AT91_REG UDP_GLBSTATE; // Global State Register + AT91_REG UDP_FADDR; // Function Address Register + AT91_REG Reserved0[1]; // + AT91_REG UDP_IER; // Interrupt Enable Register + AT91_REG UDP_IDR; // Interrupt Disable Register + AT91_REG UDP_IMR; // Interrupt Mask Register + AT91_REG UDP_ISR; // Interrupt Status Register + AT91_REG UDP_ICR; // Interrupt Clear Register + AT91_REG Reserved1[1]; // + AT91_REG UDP_RSTEP; // Reset Endpoint Register + AT91_REG Reserved2[1]; // + AT91_REG UDP_CSR[6]; // Endpoint Control and Status Register + AT91_REG Reserved3[2]; // + AT91_REG UDP_FDR[6]; // Endpoint FIFO Data Register + AT91_REG Reserved4[3]; // + AT91_REG UDP_TXVC; // Transceiver Control Register +} AT91S_UDP, *AT91PS_UDP; + +// -------- UDP_FRM_NUM : (UDP Offset: 0x0) USB Frame Number Register -------- +#define AT91C_UDP_FRM_NUM ((unsigned int) 0x7FF << 0) // (UDP) Frame Number as Defined in the Packet Field Formats +#define AT91C_UDP_FRM_ERR ((unsigned int) 0x1 << 16) // (UDP) Frame Error +#define AT91C_UDP_FRM_OK ((unsigned int) 0x1 << 17) // (UDP) Frame OK +// -------- UDP_GLB_STATE : (UDP Offset: 0x4) USB Global State Register -------- +#define AT91C_UDP_FADDEN ((unsigned int) 0x1 << 0) // (UDP) Function Address Enable +#define AT91C_UDP_CONFG ((unsigned int) 0x1 << 1) // (UDP) Configured +#define AT91C_UDP_ESR ((unsigned int) 0x1 << 2) // (UDP) Enable Send Resume +#define AT91C_UDP_RSMINPR ((unsigned int) 0x1 << 3) // (UDP) A Resume Has Been Sent to the Host +#define AT91C_UDP_RMWUPE ((unsigned int) 0x1 << 4) // (UDP) Remote Wake Up Enable +// -------- UDP_FADDR : (UDP Offset: 0x8) USB Function Address Register -------- +#define AT91C_UDP_FADD ((unsigned int) 0xFF << 0) // (UDP) Function Address Value +#define AT91C_UDP_FEN ((unsigned int) 0x1 << 8) // (UDP) Function Enable +// -------- UDP_IER : (UDP Offset: 0x10) USB Interrupt Enable Register -------- +#define AT91C_UDP_EPINT0 ((unsigned int) 0x1 << 0) // (UDP) Endpoint 0 Interrupt +#define AT91C_UDP_EPINT1 ((unsigned int) 0x1 << 1) // (UDP) Endpoint 0 Interrupt +#define AT91C_UDP_EPINT2 ((unsigned int) 0x1 << 2) // (UDP) Endpoint 2 Interrupt +#define AT91C_UDP_EPINT3 ((unsigned int) 0x1 << 3) // (UDP) Endpoint 3 Interrupt +#define AT91C_UDP_EPINT4 ((unsigned int) 0x1 << 4) // (UDP) Endpoint 4 Interrupt +#define AT91C_UDP_EPINT5 ((unsigned int) 0x1 << 5) // (UDP) Endpoint 5 Interrupt +#define AT91C_UDP_RXSUSP ((unsigned int) 0x1 << 8) // (UDP) USB Suspend Interrupt +#define AT91C_UDP_RXRSM ((unsigned int) 0x1 << 9) // (UDP) USB Resume Interrupt +#define AT91C_UDP_EXTRSM ((unsigned int) 0x1 << 10) // (UDP) USB External Resume Interrupt +#define AT91C_UDP_SOFINT ((unsigned int) 0x1 << 11) // (UDP) USB Start Of frame Interrupt +#define AT91C_UDP_WAKEUP ((unsigned int) 0x1 << 13) // (UDP) USB Resume Interrupt +// -------- UDP_IDR : (UDP Offset: 0x14) USB Interrupt Disable Register -------- +// -------- UDP_IMR : (UDP Offset: 0x18) USB Interrupt Mask Register -------- +// -------- UDP_ISR : (UDP Offset: 0x1c) USB Interrupt Status Register -------- +#define AT91C_UDP_ENDBUSRES ((unsigned int) 0x1 << 12) // (UDP) USB End Of Bus Reset Interrupt +// -------- UDP_ICR : (UDP Offset: 0x20) USB Interrupt Clear Register -------- +// -------- UDP_RST_EP : (UDP Offset: 0x28) USB Reset Endpoint Register -------- +#define AT91C_UDP_EP0 ((unsigned int) 0x1 << 0) // (UDP) Reset Endpoint 0 +#define AT91C_UDP_EP1 ((unsigned int) 0x1 << 1) // (UDP) Reset Endpoint 1 +#define AT91C_UDP_EP2 ((unsigned int) 0x1 << 2) // (UDP) Reset Endpoint 2 +#define AT91C_UDP_EP3 ((unsigned int) 0x1 << 3) // (UDP) Reset Endpoint 3 +#define AT91C_UDP_EP4 ((unsigned int) 0x1 << 4) // (UDP) Reset Endpoint 4 +#define AT91C_UDP_EP5 ((unsigned int) 0x1 << 5) // (UDP) Reset Endpoint 5 +// -------- UDP_CSR : (UDP Offset: 0x30) USB Endpoint Control and Status Register -------- +#define AT91C_UDP_TXCOMP ((unsigned int) 0x1 << 0) // (UDP) Generates an IN packet with data previously written in the DPR +#define AT91C_UDP_RX_DATA_BK0 ((unsigned int) 0x1 << 1) // (UDP) Receive Data Bank 0 +#define AT91C_UDP_RXSETUP ((unsigned int) 0x1 << 2) // (UDP) Sends STALL to the Host (Control endpoints) +#define AT91C_UDP_ISOERROR ((unsigned int) 0x1 << 3) // (UDP) Isochronous error (Isochronous endpoints) +#define AT91C_UDP_TXPKTRDY ((unsigned int) 0x1 << 4) // (UDP) Transmit Packet Ready +#define AT91C_UDP_FORCESTALL ((unsigned int) 0x1 << 5) // (UDP) Force Stall (used by Control, Bulk and Isochronous endpoints). +#define AT91C_UDP_RX_DATA_BK1 ((unsigned int) 0x1 << 6) // (UDP) Receive Data Bank 1 (only used by endpoints with ping-pong attributes). +#define AT91C_UDP_DIR ((unsigned int) 0x1 << 7) // (UDP) Transfer Direction +#define AT91C_UDP_EPTYPE ((unsigned int) 0x7 << 8) // (UDP) Endpoint type +#define AT91C_UDP_EPTYPE_CTRL ((unsigned int) 0x0 << 8) // (UDP) Control +#define AT91C_UDP_EPTYPE_ISO_OUT ((unsigned int) 0x1 << 8) // (UDP) Isochronous OUT +#define AT91C_UDP_EPTYPE_BULK_OUT ((unsigned int) 0x2 << 8) // (UDP) Bulk OUT +#define AT91C_UDP_EPTYPE_INT_OUT ((unsigned int) 0x3 << 8) // (UDP) Interrupt OUT +#define AT91C_UDP_EPTYPE_ISO_IN ((unsigned int) 0x5 << 8) // (UDP) Isochronous IN +#define AT91C_UDP_EPTYPE_BULK_IN ((unsigned int) 0x6 << 8) // (UDP) Bulk IN +#define AT91C_UDP_EPTYPE_INT_IN ((unsigned int) 0x7 << 8) // (UDP) Interrupt IN +#define AT91C_UDP_DTGLE ((unsigned int) 0x1 << 11) // (UDP) Data Toggle +#define AT91C_UDP_EPEDS ((unsigned int) 0x1 << 15) // (UDP) Endpoint Enable Disable +#define AT91C_UDP_RXBYTECNT ((unsigned int) 0x7FF << 16) // (UDP) Number Of Bytes Available in the FIFO +// -------- UDP_TXVC : (UDP Offset: 0x74) Transceiver Control Register -------- +#define AT91C_UDP_TXVDIS ((unsigned int) 0x1 << 8) // (UDP) +#define AT91C_UDP_PUON ((unsigned int) 0x1 << 9) // (UDP) Pull-up ON + +// ***************************************************************************** +// SOFTWARE API DEFINITION FOR Timer Counter Channel Interface +// ***************************************************************************** +typedef struct _AT91S_TC { + AT91_REG TC_CCR; // Channel Control Register + AT91_REG TC_CMR; // Channel Mode Register (Capture Mode / Waveform Mode) + AT91_REG Reserved0[2]; // + AT91_REG TC_CV; // Counter Value + AT91_REG TC_RA; // Register A + AT91_REG TC_RB; // Register B + AT91_REG TC_RC; // Register C + AT91_REG TC_SR; // Status Register + AT91_REG TC_IER; // Interrupt Enable Register + AT91_REG TC_IDR; // Interrupt Disable Register + AT91_REG TC_IMR; // Interrupt Mask Register +} AT91S_TC, *AT91PS_TC; + +// -------- TC_CCR : (TC Offset: 0x0) TC Channel Control Register -------- +#define AT91C_TC_CLKEN ((unsigned int) 0x1 << 0) // (TC) Counter Clock Enable Command +#define AT91C_TC_CLKDIS ((unsigned int) 0x1 << 1) // (TC) Counter Clock Disable Command +#define AT91C_TC_SWTRG ((unsigned int) 0x1 << 2) // (TC) Software Trigger Command +// -------- TC_CMR : (TC Offset: 0x4) TC Channel Mode Register: Capture Mode / Waveform Mode -------- +#define AT91C_TC_CLKS ((unsigned int) 0x7 << 0) // (TC) Clock Selection +#define AT91C_TC_CLKS_TIMER_DIV1_CLOCK ((unsigned int) 0x0) // (TC) Clock selected: TIMER_DIV1_CLOCK +#define AT91C_TC_CLKS_TIMER_DIV2_CLOCK ((unsigned int) 0x1) // (TC) Clock selected: TIMER_DIV2_CLOCK +#define AT91C_TC_CLKS_TIMER_DIV3_CLOCK ((unsigned int) 0x2) // (TC) Clock selected: TIMER_DIV3_CLOCK +#define AT91C_TC_CLKS_TIMER_DIV4_CLOCK ((unsigned int) 0x3) // (TC) Clock selected: TIMER_DIV4_CLOCK +#define AT91C_TC_CLKS_TIMER_DIV5_CLOCK ((unsigned int) 0x4) // (TC) Clock selected: TIMER_DIV5_CLOCK +#define AT91C_TC_CLKS_XC0 ((unsigned int) 0x5) // (TC) Clock selected: XC0 +#define AT91C_TC_CLKS_XC1 ((unsigned int) 0x6) // (TC) Clock selected: XC1 +#define AT91C_TC_CLKS_XC2 ((unsigned int) 0x7) // (TC) Clock selected: XC2 +#define AT91C_TC_CLKI ((unsigned int) 0x1 << 3) // (TC) Clock Invert +#define AT91C_TC_BURST ((unsigned int) 0x3 << 4) // (TC) Burst Signal Selection +#define AT91C_TC_BURST_NONE ((unsigned int) 0x0 << 4) // (TC) The clock is not gated by an external signal +#define AT91C_TC_BURST_XC0 ((unsigned int) 0x1 << 4) // (TC) XC0 is ANDed with the selected clock +#define AT91C_TC_BURST_XC1 ((unsigned int) 0x2 << 4) // (TC) XC1 is ANDed with the selected clock +#define AT91C_TC_BURST_XC2 ((unsigned int) 0x3 << 4) // (TC) XC2 is ANDed with the selected clock +#define AT91C_TC_CPCSTOP ((unsigned int) 0x1 << 6) // (TC) Counter Clock Stopped with RC Compare +#define AT91C_TC_LDBSTOP ((unsigned int) 0x1 << 6) // (TC) Counter Clock Stopped with RB Loading +#define AT91C_TC_LDBDIS ((unsigned int) 0x1 << 7) // (TC) Counter Clock Disabled with RB Loading +#define AT91C_TC_CPCDIS ((unsigned int) 0x1 << 7) // (TC) Counter Clock Disable with RC Compare +#define AT91C_TC_ETRGEDG ((unsigned int) 0x3 << 8) // (TC) External Trigger Edge Selection +#define AT91C_TC_ETRGEDG_NONE ((unsigned int) 0x0 << 8) // (TC) Edge: None +#define AT91C_TC_ETRGEDG_RISING ((unsigned int) 0x1 << 8) // (TC) Edge: rising edge +#define AT91C_TC_ETRGEDG_FALLING ((unsigned int) 0x2 << 8) // (TC) Edge: falling edge +#define AT91C_TC_ETRGEDG_BOTH ((unsigned int) 0x3 << 8) // (TC) Edge: each edge +#define AT91C_TC_EEVTEDG ((unsigned int) 0x3 << 8) // (TC) External Event Edge Selection +#define AT91C_TC_EEVTEDG_NONE ((unsigned int) 0x0 << 8) // (TC) Edge: None +#define AT91C_TC_EEVTEDG_RISING ((unsigned int) 0x1 << 8) // (TC) Edge: rising edge +#define AT91C_TC_EEVTEDG_FALLING ((unsigned int) 0x2 << 8) // (TC) Edge: falling edge +#define AT91C_TC_EEVTEDG_BOTH ((unsigned int) 0x3 << 8) // (TC) Edge: each edge +#define AT91C_TC_ABETRG ((unsigned int) 0x1 << 10) // (TC) TIOA or TIOB External Trigger Selection +#define AT91C_TC_EEVT ((unsigned int) 0x3 << 10) // (TC) External Event Selection +#define AT91C_TC_EEVT_TIOB ((unsigned int) 0x0 << 10) // (TC) Signal selected as external event: TIOB TIOB direction: input +#define AT91C_TC_EEVT_XC0 ((unsigned int) 0x1 << 10) // (TC) Signal selected as external event: XC0 TIOB direction: output +#define AT91C_TC_EEVT_XC1 ((unsigned int) 0x2 << 10) // (TC) Signal selected as external event: XC1 TIOB direction: output +#define AT91C_TC_EEVT_XC2 ((unsigned int) 0x3 << 10) // (TC) Signal selected as external event: XC2 TIOB direction: output +#define AT91C_TC_ENETRG ((unsigned int) 0x1 << 12) // (TC) External Event Trigger enable +#define AT91C_TC_WAVESEL ((unsigned int) 0x3 << 13) // (TC) Waveform Selection +#define AT91C_TC_WAVESEL_UP ((unsigned int) 0x0 << 13) // (TC) UP mode without atomatic trigger on RC Compare +#define AT91C_TC_WAVESEL_UPDOWN ((unsigned int) 0x1 << 13) // (TC) UPDOWN mode without automatic trigger on RC Compare +#define AT91C_TC_WAVESEL_UP_AUTO ((unsigned int) 0x2 << 13) // (TC) UP mode with automatic trigger on RC Compare +#define AT91C_TC_WAVESEL_UPDOWN_AUTO ((unsigned int) 0x3 << 13) // (TC) UPDOWN mode with automatic trigger on RC Compare +#define AT91C_TC_CPCTRG ((unsigned int) 0x1 << 14) // (TC) RC Compare Trigger Enable +#define AT91C_TC_WAVE ((unsigned int) 0x1 << 15) // (TC) +#define AT91C_TC_LDRA ((unsigned int) 0x3 << 16) // (TC) RA Loading Selection +#define AT91C_TC_LDRA_NONE ((unsigned int) 0x0 << 16) // (TC) Edge: None +#define AT91C_TC_LDRA_RISING ((unsigned int) 0x1 << 16) // (TC) Edge: rising edge of TIOA +#define AT91C_TC_LDRA_FALLING ((unsigned int) 0x2 << 16) // (TC) Edge: falling edge of TIOA +#define AT91C_TC_LDRA_BOTH ((unsigned int) 0x3 << 16) // (TC) Edge: each edge of TIOA +#define AT91C_TC_ACPA ((unsigned int) 0x3 << 16) // (TC) RA Compare Effect on TIOA +#define AT91C_TC_ACPA_NONE ((unsigned int) 0x0 << 16) // (TC) Effect: none +#define AT91C_TC_ACPA_SET ((unsigned int) 0x1 << 16) // (TC) Effect: set +#define AT91C_TC_ACPA_CLEAR ((unsigned int) 0x2 << 16) // (TC) Effect: clear +#define AT91C_TC_ACPA_TOGGLE ((unsigned int) 0x3 << 16) // (TC) Effect: toggle +#define AT91C_TC_LDRB ((unsigned int) 0x3 << 18) // (TC) RB Loading Selection +#define AT91C_TC_LDRB_NONE ((unsigned int) 0x0 << 18) // (TC) Edge: None +#define AT91C_TC_LDRB_RISING ((unsigned int) 0x1 << 18) // (TC) Edge: rising edge of TIOA +#define AT91C_TC_LDRB_FALLING ((unsigned int) 0x2 << 18) // (TC) Edge: falling edge of TIOA +#define AT91C_TC_LDRB_BOTH ((unsigned int) 0x3 << 18) // (TC) Edge: each edge of TIOA +#define AT91C_TC_ACPC ((unsigned int) 0x3 << 18) // (TC) RC Compare Effect on TIOA +#define AT91C_TC_ACPC_NONE ((unsigned int) 0x0 << 18) // (TC) Effect: none +#define AT91C_TC_ACPC_SET ((unsigned int) 0x1 << 18) // (TC) Effect: set +#define AT91C_TC_ACPC_CLEAR ((unsigned int) 0x2 << 18) // (TC) Effect: clear +#define AT91C_TC_ACPC_TOGGLE ((unsigned int) 0x3 << 18) // (TC) Effect: toggle +#define AT91C_TC_AEEVT ((unsigned int) 0x3 << 20) // (TC) External Event Effect on TIOA +#define AT91C_TC_AEEVT_NONE ((unsigned int) 0x0 << 20) // (TC) Effect: none +#define AT91C_TC_AEEVT_SET ((unsigned int) 0x1 << 20) // (TC) Effect: set +#define AT91C_TC_AEEVT_CLEAR ((unsigned int) 0x2 << 20) // (TC) Effect: clear +#define AT91C_TC_AEEVT_TOGGLE ((unsigned int) 0x3 << 20) // (TC) Effect: toggle +#define AT91C_TC_ASWTRG ((unsigned int) 0x3 << 22) // (TC) Software Trigger Effect on TIOA +#define AT91C_TC_ASWTRG_NONE ((unsigned int) 0x0 << 22) // (TC) Effect: none +#define AT91C_TC_ASWTRG_SET ((unsigned int) 0x1 << 22) // (TC) Effect: set +#define AT91C_TC_ASWTRG_CLEAR ((unsigned int) 0x2 << 22) // (TC) Effect: clear +#define AT91C_TC_ASWTRG_TOGGLE ((unsigned int) 0x3 << 22) // (TC) Effect: toggle +#define AT91C_TC_BCPB ((unsigned int) 0x3 << 24) // (TC) RB Compare Effect on TIOB +#define AT91C_TC_BCPB_NONE ((unsigned int) 0x0 << 24) // (TC) Effect: none +#define AT91C_TC_BCPB_SET ((unsigned int) 0x1 << 24) // (TC) Effect: set +#define AT91C_TC_BCPB_CLEAR ((unsigned int) 0x2 << 24) // (TC) Effect: clear +#define AT91C_TC_BCPB_TOGGLE ((unsigned int) 0x3 << 24) // (TC) Effect: toggle +#define AT91C_TC_BCPC ((unsigned int) 0x3 << 26) // (TC) RC Compare Effect on TIOB +#define AT91C_TC_BCPC_NONE ((unsigned int) 0x0 << 26) // (TC) Effect: none +#define AT91C_TC_BCPC_SET ((unsigned int) 0x1 << 26) // (TC) Effect: set +#define AT91C_TC_BCPC_CLEAR ((unsigned int) 0x2 << 26) // (TC) Effect: clear +#define AT91C_TC_BCPC_TOGGLE ((unsigned int) 0x3 << 26) // (TC) Effect: toggle +#define AT91C_TC_BEEVT ((unsigned int) 0x3 << 28) // (TC) External Event Effect on TIOB +#define AT91C_TC_BEEVT_NONE ((unsigned int) 0x0 << 28) // (TC) Effect: none +#define AT91C_TC_BEEVT_SET ((unsigned int) 0x1 << 28) // (TC) Effect: set +#define AT91C_TC_BEEVT_CLEAR ((unsigned int) 0x2 << 28) // (TC) Effect: clear +#define AT91C_TC_BEEVT_TOGGLE ((unsigned int) 0x3 << 28) // (TC) Effect: toggle +#define AT91C_TC_BSWTRG ((unsigned int) 0x3 << 30) // (TC) Software Trigger Effect on TIOB +#define AT91C_TC_BSWTRG_NONE ((unsigned int) 0x0 << 30) // (TC) Effect: none +#define AT91C_TC_BSWTRG_SET ((unsigned int) 0x1 << 30) // (TC) Effect: set +#define AT91C_TC_BSWTRG_CLEAR ((unsigned int) 0x2 << 30) // (TC) Effect: clear +#define AT91C_TC_BSWTRG_TOGGLE ((unsigned int) 0x3 << 30) // (TC) Effect: toggle +// -------- TC_SR : (TC Offset: 0x20) TC Channel Status Register -------- +#define AT91C_TC_COVFS ((unsigned int) 0x1 << 0) // (TC) Counter Overflow +#define AT91C_TC_LOVRS ((unsigned int) 0x1 << 1) // (TC) Load Overrun +#define AT91C_TC_CPAS ((unsigned int) 0x1 << 2) // (TC) RA Compare +#define AT91C_TC_CPBS ((unsigned int) 0x1 << 3) // (TC) RB Compare +#define AT91C_TC_CPCS ((unsigned int) 0x1 << 4) // (TC) RC Compare +#define AT91C_TC_LDRAS ((unsigned int) 0x1 << 5) // (TC) RA Loading +#define AT91C_TC_LDRBS ((unsigned int) 0x1 << 6) // (TC) RB Loading +#define AT91C_TC_ETRGS ((unsigned int) 0x1 << 7) // (TC) External Trigger +#define AT91C_TC_CLKSTA ((unsigned int) 0x1 << 16) // (TC) Clock Enabling +#define AT91C_TC_MTIOA ((unsigned int) 0x1 << 17) // (TC) TIOA Mirror +#define AT91C_TC_MTIOB ((unsigned int) 0x1 << 18) // (TC) TIOA Mirror +// -------- TC_IER : (TC Offset: 0x24) TC Channel Interrupt Enable Register -------- +// -------- TC_IDR : (TC Offset: 0x28) TC Channel Interrupt Disable Register -------- +// -------- TC_IMR : (TC Offset: 0x2c) TC Channel Interrupt Mask Register -------- + +// ***************************************************************************** +// SOFTWARE API DEFINITION FOR Timer Counter Interface +// ***************************************************************************** +typedef struct _AT91S_TCB { + AT91S_TC TCB_TC0; // TC Channel 0 + AT91_REG Reserved0[4]; // + AT91S_TC TCB_TC1; // TC Channel 1 + AT91_REG Reserved1[4]; // + AT91S_TC TCB_TC2; // TC Channel 2 + AT91_REG Reserved2[4]; // + AT91_REG TCB_BCR; // TC Block Control Register + AT91_REG TCB_BMR; // TC Block Mode Register +} AT91S_TCB, *AT91PS_TCB; + +// -------- TCB_BCR : (TCB Offset: 0xc0) TC Block Control Register -------- +#define AT91C_TCB_SYNC ((unsigned int) 0x1 << 0) // (TCB) Synchro Command +// -------- TCB_BMR : (TCB Offset: 0xc4) TC Block Mode Register -------- +#define AT91C_TCB_TC0XC0S ((unsigned int) 0x3 << 0) // (TCB) External Clock Signal 0 Selection +#define AT91C_TCB_TC0XC0S_TCLK0 ((unsigned int) 0x0) // (TCB) TCLK0 connected to XC0 +#define AT91C_TCB_TC0XC0S_NONE ((unsigned int) 0x1) // (TCB) None signal connected to XC0 +#define AT91C_TCB_TC0XC0S_TIOA1 ((unsigned int) 0x2) // (TCB) TIOA1 connected to XC0 +#define AT91C_TCB_TC0XC0S_TIOA2 ((unsigned int) 0x3) // (TCB) TIOA2 connected to XC0 +#define AT91C_TCB_TC1XC1S ((unsigned int) 0x3 << 2) // (TCB) External Clock Signal 1 Selection +#define AT91C_TCB_TC1XC1S_TCLK1 ((unsigned int) 0x0 << 2) // (TCB) TCLK1 connected to XC1 +#define AT91C_TCB_TC1XC1S_NONE ((unsigned int) 0x1 << 2) // (TCB) None signal connected to XC1 +#define AT91C_TCB_TC1XC1S_TIOA0 ((unsigned int) 0x2 << 2) // (TCB) TIOA0 connected to XC1 +#define AT91C_TCB_TC1XC1S_TIOA2 ((unsigned int) 0x3 << 2) // (TCB) TIOA2 connected to XC1 +#define AT91C_TCB_TC2XC2S ((unsigned int) 0x3 << 4) // (TCB) External Clock Signal 2 Selection +#define AT91C_TCB_TC2XC2S_TCLK2 ((unsigned int) 0x0 << 4) // (TCB) TCLK2 connected to XC2 +#define AT91C_TCB_TC2XC2S_NONE ((unsigned int) 0x1 << 4) // (TCB) None signal connected to XC2 +#define AT91C_TCB_TC2XC2S_TIOA0 ((unsigned int) 0x2 << 4) // (TCB) TIOA0 connected to XC2 +#define AT91C_TCB_TC2XC2S_TIOA1 ((unsigned int) 0x3 << 4) // (TCB) TIOA2 connected to XC2 + +// ***************************************************************************** +// SOFTWARE API DEFINITION FOR Control Area Network MailBox Interface +// ***************************************************************************** +typedef struct _AT91S_CAN_MB { + AT91_REG CAN_MB_MMR; // MailBox Mode Register + AT91_REG CAN_MB_MAM; // MailBox Acceptance Mask Register + AT91_REG CAN_MB_MID; // MailBox ID Register + AT91_REG CAN_MB_MFID; // MailBox Family ID Register + AT91_REG CAN_MB_MSR; // MailBox Status Register + AT91_REG CAN_MB_MDL; // MailBox Data Low Register + AT91_REG CAN_MB_MDH; // MailBox Data High Register + AT91_REG CAN_MB_MCR; // MailBox Control Register +} AT91S_CAN_MB, *AT91PS_CAN_MB; + +// -------- CAN_MMR : (CAN_MB Offset: 0x0) CAN Message Mode Register -------- +#define AT91C_CAN_MTIMEMARK ((unsigned int) 0xFFFF << 0) // (CAN_MB) Mailbox Timemark +#define AT91C_CAN_PRIOR ((unsigned int) 0xF << 16) // (CAN_MB) Mailbox Priority +#define AT91C_CAN_MOT ((unsigned int) 0x7 << 24) // (CAN_MB) Mailbox Object Type +#define AT91C_CAN_MOT_DIS ((unsigned int) 0x0 << 24) // (CAN_MB) +#define AT91C_CAN_MOT_RX ((unsigned int) 0x1 << 24) // (CAN_MB) +#define AT91C_CAN_MOT_RXOVERWRITE ((unsigned int) 0x2 << 24) // (CAN_MB) +#define AT91C_CAN_MOT_TX ((unsigned int) 0x3 << 24) // (CAN_MB) +#define AT91C_CAN_MOT_CONSUMER ((unsigned int) 0x4 << 24) // (CAN_MB) +#define AT91C_CAN_MOT_PRODUCER ((unsigned int) 0x5 << 24) // (CAN_MB) +// -------- CAN_MAM : (CAN_MB Offset: 0x4) CAN Message Acceptance Mask Register -------- +#define AT91C_CAN_MIDvB ((unsigned int) 0x3FFFF << 0) // (CAN_MB) Complementary bits for identifier in extended mode +#define AT91C_CAN_MIDvA ((unsigned int) 0x7FF << 18) // (CAN_MB) Identifier for standard frame mode +#define AT91C_CAN_MIDE ((unsigned int) 0x1 << 29) // (CAN_MB) Identifier Version +// -------- CAN_MID : (CAN_MB Offset: 0x8) CAN Message ID Register -------- +// -------- CAN_MFID : (CAN_MB Offset: 0xc) CAN Message Family ID Register -------- +// -------- CAN_MSR : (CAN_MB Offset: 0x10) CAN Message Status Register -------- +#define AT91C_CAN_MTIMESTAMP ((unsigned int) 0xFFFF << 0) // (CAN_MB) Timer Value +#define AT91C_CAN_MDLC ((unsigned int) 0xF << 16) // (CAN_MB) Mailbox Data Length Code +#define AT91C_CAN_MRTR ((unsigned int) 0x1 << 20) // (CAN_MB) Mailbox Remote Transmission Request +#define AT91C_CAN_MABT ((unsigned int) 0x1 << 22) // (CAN_MB) Mailbox Message Abort +#define AT91C_CAN_MRDY ((unsigned int) 0x1 << 23) // (CAN_MB) Mailbox Ready +#define AT91C_CAN_MMI ((unsigned int) 0x1 << 24) // (CAN_MB) Mailbox Message Ignored +// -------- CAN_MDL : (CAN_MB Offset: 0x14) CAN Message Data Low Register -------- +// -------- CAN_MDH : (CAN_MB Offset: 0x18) CAN Message Data High Register -------- +// -------- CAN_MCR : (CAN_MB Offset: 0x1c) CAN Message Control Register -------- +#define AT91C_CAN_MACR ((unsigned int) 0x1 << 22) // (CAN_MB) Abort Request for Mailbox +#define AT91C_CAN_MTCR ((unsigned int) 0x1 << 23) // (CAN_MB) Mailbox Transfer Command + +// ***************************************************************************** +// SOFTWARE API DEFINITION FOR Control Area Network Interface +// ***************************************************************************** +typedef struct _AT91S_CAN { + AT91_REG CAN_MR; // Mode Register + AT91_REG CAN_IER; // Interrupt Enable Register + AT91_REG CAN_IDR; // Interrupt Disable Register + AT91_REG CAN_IMR; // Interrupt Mask Register + AT91_REG CAN_SR; // Status Register + AT91_REG CAN_BR; // Baudrate Register + AT91_REG CAN_TIM; // Timer Register + AT91_REG CAN_TIMESTP; // Time Stamp Register + AT91_REG CAN_ECR; // Error Counter Register + AT91_REG CAN_TCR; // Transfer Command Register + AT91_REG CAN_ACR; // Abort Command Register + AT91_REG Reserved0[52]; // + AT91_REG CAN_VR; // Version Register + AT91_REG Reserved1[64]; // + AT91S_CAN_MB CAN_MB0; // CAN Mailbox 0 + AT91S_CAN_MB CAN_MB1; // CAN Mailbox 1 + AT91S_CAN_MB CAN_MB2; // CAN Mailbox 2 + AT91S_CAN_MB CAN_MB3; // CAN Mailbox 3 + AT91S_CAN_MB CAN_MB4; // CAN Mailbox 4 + AT91S_CAN_MB CAN_MB5; // CAN Mailbox 5 + AT91S_CAN_MB CAN_MB6; // CAN Mailbox 6 + AT91S_CAN_MB CAN_MB7; // CAN Mailbox 7 + AT91S_CAN_MB CAN_MB8; // CAN Mailbox 8 + AT91S_CAN_MB CAN_MB9; // CAN Mailbox 9 + AT91S_CAN_MB CAN_MB10; // CAN Mailbox 10 + AT91S_CAN_MB CAN_MB11; // CAN Mailbox 11 + AT91S_CAN_MB CAN_MB12; // CAN Mailbox 12 + AT91S_CAN_MB CAN_MB13; // CAN Mailbox 13 + AT91S_CAN_MB CAN_MB14; // CAN Mailbox 14 + AT91S_CAN_MB CAN_MB15; // CAN Mailbox 15 +} AT91S_CAN, *AT91PS_CAN; + +// -------- CAN_MR : (CAN Offset: 0x0) CAN Mode Register -------- +#define AT91C_CAN_CANEN ((unsigned int) 0x1 << 0) // (CAN) CAN Controller Enable +#define AT91C_CAN_LPM ((unsigned int) 0x1 << 1) // (CAN) Disable/Enable Low Power Mode +#define AT91C_CAN_ABM ((unsigned int) 0x1 << 2) // (CAN) Disable/Enable Autobaud/Listen Mode +#define AT91C_CAN_OVL ((unsigned int) 0x1 << 3) // (CAN) Disable/Enable Overload Frame +#define AT91C_CAN_TEOF ((unsigned int) 0x1 << 4) // (CAN) Time Stamp messages at each end of Frame +#define AT91C_CAN_TTM ((unsigned int) 0x1 << 5) // (CAN) Disable/Enable Time Trigger Mode +#define AT91C_CAN_TIMFRZ ((unsigned int) 0x1 << 6) // (CAN) Enable Timer Freeze +#define AT91C_CAN_DRPT ((unsigned int) 0x1 << 7) // (CAN) Disable Repeat +// -------- CAN_IER : (CAN Offset: 0x4) CAN Interrupt Enable Register -------- +#define AT91C_CAN_MB0 ((unsigned int) 0x1 << 0) // (CAN) Mailbox 0 Flag +#define AT91C_CAN_MB1 ((unsigned int) 0x1 << 1) // (CAN) Mailbox 1 Flag +#define AT91C_CAN_MB2 ((unsigned int) 0x1 << 2) // (CAN) Mailbox 2 Flag +#define AT91C_CAN_MB3 ((unsigned int) 0x1 << 3) // (CAN) Mailbox 3 Flag +#define AT91C_CAN_MB4 ((unsigned int) 0x1 << 4) // (CAN) Mailbox 4 Flag +#define AT91C_CAN_MB5 ((unsigned int) 0x1 << 5) // (CAN) Mailbox 5 Flag +#define AT91C_CAN_MB6 ((unsigned int) 0x1 << 6) // (CAN) Mailbox 6 Flag +#define AT91C_CAN_MB7 ((unsigned int) 0x1 << 7) // (CAN) Mailbox 7 Flag +#define AT91C_CAN_MB8 ((unsigned int) 0x1 << 8) // (CAN) Mailbox 8 Flag +#define AT91C_CAN_MB9 ((unsigned int) 0x1 << 9) // (CAN) Mailbox 9 Flag +#define AT91C_CAN_MB10 ((unsigned int) 0x1 << 10) // (CAN) Mailbox 10 Flag +#define AT91C_CAN_MB11 ((unsigned int) 0x1 << 11) // (CAN) Mailbox 11 Flag +#define AT91C_CAN_MB12 ((unsigned int) 0x1 << 12) // (CAN) Mailbox 12 Flag +#define AT91C_CAN_MB13 ((unsigned int) 0x1 << 13) // (CAN) Mailbox 13 Flag +#define AT91C_CAN_MB14 ((unsigned int) 0x1 << 14) // (CAN) Mailbox 14 Flag +#define AT91C_CAN_MB15 ((unsigned int) 0x1 << 15) // (CAN) Mailbox 15 Flag +#define AT91C_CAN_ERRA ((unsigned int) 0x1 << 16) // (CAN) Error Active Mode Flag +#define AT91C_CAN_WARN ((unsigned int) 0x1 << 17) // (CAN) Warning Limit Flag +#define AT91C_CAN_ERRP ((unsigned int) 0x1 << 18) // (CAN) Error Passive Mode Flag +#define AT91C_CAN_BOFF ((unsigned int) 0x1 << 19) // (CAN) Bus Off Mode Flag +#define AT91C_CAN_SLEEP ((unsigned int) 0x1 << 20) // (CAN) Sleep Flag +#define AT91C_CAN_WAKEUP ((unsigned int) 0x1 << 21) // (CAN) Wakeup Flag +#define AT91C_CAN_TOVF ((unsigned int) 0x1 << 22) // (CAN) Timer Overflow Flag +#define AT91C_CAN_TSTP ((unsigned int) 0x1 << 23) // (CAN) Timestamp Flag +#define AT91C_CAN_CERR ((unsigned int) 0x1 << 24) // (CAN) CRC Error +#define AT91C_CAN_SERR ((unsigned int) 0x1 << 25) // (CAN) Stuffing Error +#define AT91C_CAN_AERR ((unsigned int) 0x1 << 26) // (CAN) Acknowledgment Error +#define AT91C_CAN_FERR ((unsigned int) 0x1 << 27) // (CAN) Form Error +#define AT91C_CAN_BERR ((unsigned int) 0x1 << 28) // (CAN) Bit Error +// -------- CAN_IDR : (CAN Offset: 0x8) CAN Interrupt Disable Register -------- +// -------- CAN_IMR : (CAN Offset: 0xc) CAN Interrupt Mask Register -------- +// -------- CAN_SR : (CAN Offset: 0x10) CAN Status Register -------- +#define AT91C_CAN_RBSY ((unsigned int) 0x1 << 29) // (CAN) Receiver Busy +#define AT91C_CAN_TBSY ((unsigned int) 0x1 << 30) // (CAN) Transmitter Busy +#define AT91C_CAN_OVLY ((unsigned int) 0x1 << 31) // (CAN) Overload Busy +// -------- CAN_BR : (CAN Offset: 0x14) CAN Baudrate Register -------- +#define AT91C_CAN_PHASE2 ((unsigned int) 0x7 << 0) // (CAN) Phase 2 segment +#define AT91C_CAN_PHASE1 ((unsigned int) 0x7 << 4) // (CAN) Phase 1 segment +#define AT91C_CAN_PROPAG ((unsigned int) 0x7 << 8) // (CAN) Programmation time segment +#define AT91C_CAN_SYNC ((unsigned int) 0x3 << 12) // (CAN) Re-synchronization jump width segment +#define AT91C_CAN_BRP ((unsigned int) 0x7F << 16) // (CAN) Baudrate Prescaler +#define AT91C_CAN_SMP ((unsigned int) 0x1 << 24) // (CAN) Sampling mode +// -------- CAN_TIM : (CAN Offset: 0x18) CAN Timer Register -------- +#define AT91C_CAN_TIMER ((unsigned int) 0xFFFF << 0) // (CAN) Timer field +// -------- CAN_TIMESTP : (CAN Offset: 0x1c) CAN Timestamp Register -------- +// -------- CAN_ECR : (CAN Offset: 0x20) CAN Error Counter Register -------- +#define AT91C_CAN_REC ((unsigned int) 0xFF << 0) // (CAN) Receive Error Counter +#define AT91C_CAN_TEC ((unsigned int) 0xFF << 16) // (CAN) Transmit Error Counter +// -------- CAN_TCR : (CAN Offset: 0x24) CAN Transfer Command Register -------- +#define AT91C_CAN_TIMRST ((unsigned int) 0x1 << 31) // (CAN) Timer Reset Field +// -------- CAN_ACR : (CAN Offset: 0x28) CAN Abort Command Register -------- + +// ***************************************************************************** +// SOFTWARE API DEFINITION FOR Ethernet MAC 10/100 +// ***************************************************************************** +typedef struct _AT91S_EMAC { + AT91_REG EMAC_NCR; // Network Control Register + AT91_REG EMAC_NCFGR; // Network Configuration Register + AT91_REG EMAC_NSR; // Network Status Register + AT91_REG Reserved0[2]; // + AT91_REG EMAC_TSR; // Transmit Status Register + AT91_REG EMAC_RBQP; // Receive Buffer Queue Pointer + AT91_REG EMAC_TBQP; // Transmit Buffer Queue Pointer + AT91_REG EMAC_RSR; // Receive Status Register + AT91_REG EMAC_ISR; // Interrupt Status Register + AT91_REG EMAC_IER; // Interrupt Enable Register + AT91_REG EMAC_IDR; // Interrupt Disable Register + AT91_REG EMAC_IMR; // Interrupt Mask Register + AT91_REG EMAC_MAN; // PHY Maintenance Register + AT91_REG EMAC_PTR; // Pause Time Register + AT91_REG EMAC_PFR; // Pause Frames received Register + AT91_REG EMAC_FTO; // Frames Transmitted OK Register + AT91_REG EMAC_SCF; // Single Collision Frame Register + AT91_REG EMAC_MCF; // Multiple Collision Frame Register + AT91_REG EMAC_FRO; // Frames Received OK Register + AT91_REG EMAC_FCSE; // Frame Check Sequence Error Register + AT91_REG EMAC_ALE; // Alignment Error Register + AT91_REG EMAC_DTF; // Deferred Transmission Frame Register + AT91_REG EMAC_LCOL; // Late Collision Register + AT91_REG EMAC_ECOL; // Excessive Collision Register + AT91_REG EMAC_TUND; // Transmit Underrun Error Register + AT91_REG EMAC_CSE; // Carrier Sense Error Register + AT91_REG EMAC_RRE; // Receive Ressource Error Register + AT91_REG EMAC_ROV; // Receive Overrun Errors Register + AT91_REG EMAC_RSE; // Receive Symbol Errors Register + AT91_REG EMAC_ELE; // Excessive Length Errors Register + AT91_REG EMAC_RJA; // Receive Jabbers Register + AT91_REG EMAC_USF; // Undersize Frames Register + AT91_REG EMAC_STE; // SQE Test Error Register + AT91_REG EMAC_RLE; // Receive Length Field Mismatch Register + AT91_REG EMAC_TPF; // Transmitted Pause Frames Register + AT91_REG EMAC_HRB; // Hash Address Bottom[31:0] + AT91_REG EMAC_HRT; // Hash Address Top[63:32] + AT91_REG EMAC_SA1L; // Specific Address 1 Bottom, First 4 bytes + AT91_REG EMAC_SA1H; // Specific Address 1 Top, Last 2 bytes + AT91_REG EMAC_SA2L; // Specific Address 2 Bottom, First 4 bytes + AT91_REG EMAC_SA2H; // Specific Address 2 Top, Last 2 bytes + AT91_REG EMAC_SA3L; // Specific Address 3 Bottom, First 4 bytes + AT91_REG EMAC_SA3H; // Specific Address 3 Top, Last 2 bytes + AT91_REG EMAC_SA4L; // Specific Address 4 Bottom, First 4 bytes + AT91_REG EMAC_SA4H; // Specific Address 4 Top, Last 2 bytes + AT91_REG EMAC_TID; // Type ID Checking Register + AT91_REG EMAC_TPQ; // Transmit Pause Quantum Register + AT91_REG EMAC_USRIO; // USER Input/Output Register + AT91_REG EMAC_WOL; // Wake On LAN Register + AT91_REG Reserved1[13]; // + AT91_REG EMAC_REV; // Revision Register +} AT91S_EMAC, *AT91PS_EMAC; + +// -------- EMAC_NCR : (EMAC Offset: 0x0) -------- +#define AT91C_EMAC_LB ((unsigned int) 0x1 << 0) // (EMAC) Loopback. Optional. When set, loopback signal is at high level. +#define AT91C_EMAC_LLB ((unsigned int) 0x1 << 1) // (EMAC) Loopback local. +#define AT91C_EMAC_RE ((unsigned int) 0x1 << 2) // (EMAC) Receive enable. +#define AT91C_EMAC_TE ((unsigned int) 0x1 << 3) // (EMAC) Transmit enable. +#define AT91C_EMAC_MPE ((unsigned int) 0x1 << 4) // (EMAC) Management port enable. +#define AT91C_EMAC_CLRSTAT ((unsigned int) 0x1 << 5) // (EMAC) Clear statistics registers. +#define AT91C_EMAC_INCSTAT ((unsigned int) 0x1 << 6) // (EMAC) Increment statistics registers. +#define AT91C_EMAC_WESTAT ((unsigned int) 0x1 << 7) // (EMAC) Write enable for statistics registers. +#define AT91C_EMAC_BP ((unsigned int) 0x1 << 8) // (EMAC) Back pressure. +#define AT91C_EMAC_TSTART ((unsigned int) 0x1 << 9) // (EMAC) Start Transmission. +#define AT91C_EMAC_THALT ((unsigned int) 0x1 << 10) // (EMAC) Transmission Halt. +#define AT91C_EMAC_TPFR ((unsigned int) 0x1 << 11) // (EMAC) Transmit pause frame +#define AT91C_EMAC_TZQ ((unsigned int) 0x1 << 12) // (EMAC) Transmit zero quantum pause frame +// -------- EMAC_NCFGR : (EMAC Offset: 0x4) Network Configuration Register -------- +#define AT91C_EMAC_SPD ((unsigned int) 0x1 << 0) // (EMAC) Speed. +#define AT91C_EMAC_FD ((unsigned int) 0x1 << 1) // (EMAC) Full duplex. +#define AT91C_EMAC_JFRAME ((unsigned int) 0x1 << 3) // (EMAC) Jumbo Frames. +#define AT91C_EMAC_CAF ((unsigned int) 0x1 << 4) // (EMAC) Copy all frames. +#define AT91C_EMAC_NBC ((unsigned int) 0x1 << 5) // (EMAC) No broadcast. +#define AT91C_EMAC_MTI ((unsigned int) 0x1 << 6) // (EMAC) Multicast hash event enable +#define AT91C_EMAC_UNI ((unsigned int) 0x1 << 7) // (EMAC) Unicast hash enable. +#define AT91C_EMAC_BIG ((unsigned int) 0x1 << 8) // (EMAC) Receive 1522 bytes. +#define AT91C_EMAC_EAE ((unsigned int) 0x1 << 9) // (EMAC) External address match enable. +#define AT91C_EMAC_CLK ((unsigned int) 0x3 << 10) // (EMAC) +#define AT91C_EMAC_CLK_HCLK_8 ((unsigned int) 0x0 << 10) // (EMAC) HCLK divided by 8 +#define AT91C_EMAC_CLK_HCLK_16 ((unsigned int) 0x1 << 10) // (EMAC) HCLK divided by 16 +#define AT91C_EMAC_CLK_HCLK_32 ((unsigned int) 0x2 << 10) // (EMAC) HCLK divided by 32 +#define AT91C_EMAC_CLK_HCLK_64 ((unsigned int) 0x3 << 10) // (EMAC) HCLK divided by 64 +#define AT91C_EMAC_RTY ((unsigned int) 0x1 << 12) // (EMAC) +#define AT91C_EMAC_PAE ((unsigned int) 0x1 << 13) // (EMAC) +#define AT91C_EMAC_RBOF ((unsigned int) 0x3 << 14) // (EMAC) +#define AT91C_EMAC_RBOF_OFFSET_0 ((unsigned int) 0x0 << 14) // (EMAC) no offset from start of receive buffer +#define AT91C_EMAC_RBOF_OFFSET_1 ((unsigned int) 0x1 << 14) // (EMAC) one byte offset from start of receive buffer +#define AT91C_EMAC_RBOF_OFFSET_2 ((unsigned int) 0x2 << 14) // (EMAC) two bytes offset from start of receive buffer +#define AT91C_EMAC_RBOF_OFFSET_3 ((unsigned int) 0x3 << 14) // (EMAC) three bytes offset from start of receive buffer +#define AT91C_EMAC_RLCE ((unsigned int) 0x1 << 16) // (EMAC) Receive Length field Checking Enable +#define AT91C_EMAC_DRFCS ((unsigned int) 0x1 << 17) // (EMAC) Discard Receive FCS +#define AT91C_EMAC_EFRHD ((unsigned int) 0x1 << 18) // (EMAC) +#define AT91C_EMAC_IRXFCS ((unsigned int) 0x1 << 19) // (EMAC) Ignore RX FCS +// -------- EMAC_NSR : (EMAC Offset: 0x8) Network Status Register -------- +#define AT91C_EMAC_LINKR ((unsigned int) 0x1 << 0) // (EMAC) +#define AT91C_EMAC_MDIO ((unsigned int) 0x1 << 1) // (EMAC) +#define AT91C_EMAC_IDLE ((unsigned int) 0x1 << 2) // (EMAC) +// -------- EMAC_TSR : (EMAC Offset: 0x14) Transmit Status Register -------- +#define AT91C_EMAC_UBR ((unsigned int) 0x1 << 0) // (EMAC) +#define AT91C_EMAC_COL ((unsigned int) 0x1 << 1) // (EMAC) +#define AT91C_EMAC_RLES ((unsigned int) 0x1 << 2) // (EMAC) +#define AT91C_EMAC_TGO ((unsigned int) 0x1 << 3) // (EMAC) Transmit Go +#define AT91C_EMAC_BEX ((unsigned int) 0x1 << 4) // (EMAC) Buffers exhausted mid frame +#define AT91C_EMAC_COMP ((unsigned int) 0x1 << 5) // (EMAC) +#define AT91C_EMAC_UND ((unsigned int) 0x1 << 6) // (EMAC) +// -------- EMAC_RSR : (EMAC Offset: 0x20) Receive Status Register -------- +#define AT91C_EMAC_BNA ((unsigned int) 0x1 << 0) // (EMAC) +#define AT91C_EMAC_REC ((unsigned int) 0x1 << 1) // (EMAC) +#define AT91C_EMAC_OVR ((unsigned int) 0x1 << 2) // (EMAC) +// -------- EMAC_ISR : (EMAC Offset: 0x24) Interrupt Status Register -------- +#define AT91C_EMAC_MFD ((unsigned int) 0x1 << 0) // (EMAC) +#define AT91C_EMAC_RCOMP ((unsigned int) 0x1 << 1) // (EMAC) +#define AT91C_EMAC_RXUBR ((unsigned int) 0x1 << 2) // (EMAC) +#define AT91C_EMAC_TXUBR ((unsigned int) 0x1 << 3) // (EMAC) +#define AT91C_EMAC_TUNDR ((unsigned int) 0x1 << 4) // (EMAC) +#define AT91C_EMAC_RLEX ((unsigned int) 0x1 << 5) // (EMAC) +#define AT91C_EMAC_TXERR ((unsigned int) 0x1 << 6) // (EMAC) +#define AT91C_EMAC_TCOMP ((unsigned int) 0x1 << 7) // (EMAC) +#define AT91C_EMAC_LINK ((unsigned int) 0x1 << 9) // (EMAC) +#define AT91C_EMAC_ROVR ((unsigned int) 0x1 << 10) // (EMAC) +#define AT91C_EMAC_HRESP ((unsigned int) 0x1 << 11) // (EMAC) +#define AT91C_EMAC_PFRE ((unsigned int) 0x1 << 12) // (EMAC) +#define AT91C_EMAC_PTZ ((unsigned int) 0x1 << 13) // (EMAC) +// -------- EMAC_IER : (EMAC Offset: 0x28) Interrupt Enable Register -------- +// -------- EMAC_IDR : (EMAC Offset: 0x2c) Interrupt Disable Register -------- +// -------- EMAC_IMR : (EMAC Offset: 0x30) Interrupt Mask Register -------- +// -------- EMAC_MAN : (EMAC Offset: 0x34) PHY Maintenance Register -------- +#define AT91C_EMAC_DATA ((unsigned int) 0xFFFF << 0) // (EMAC) +#define AT91C_EMAC_CODE ((unsigned int) 0x3 << 16) // (EMAC) +#define AT91C_EMAC_REGA ((unsigned int) 0x1F << 18) // (EMAC) +#define AT91C_EMAC_PHYA ((unsigned int) 0x1F << 23) // (EMAC) +#define AT91C_EMAC_RW ((unsigned int) 0x3 << 28) // (EMAC) +#define AT91C_EMAC_SOF ((unsigned int) 0x3 << 30) // (EMAC) +// -------- EMAC_USRIO : (EMAC Offset: 0xc0) USER Input Output Register -------- +#define AT91C_EMAC_RMII ((unsigned int) 0x1 << 0) // (EMAC) Reduce MII +#define AT91C_EMAC_CLKEN ((unsigned int) 0x1 << 1) // (EMAC) Clock Enable +// -------- EMAC_WOL : (EMAC Offset: 0xc4) Wake On LAN Register -------- +#define AT91C_EMAC_IP ((unsigned int) 0xFFFF << 0) // (EMAC) ARP request IP address +#define AT91C_EMAC_MAG ((unsigned int) 0x1 << 16) // (EMAC) Magic packet event enable +#define AT91C_EMAC_ARP ((unsigned int) 0x1 << 17) // (EMAC) ARP request event enable +#define AT91C_EMAC_SA1 ((unsigned int) 0x1 << 18) // (EMAC) Specific address register 1 event enable +// -------- EMAC_REV : (EMAC Offset: 0xfc) Revision Register -------- +#define AT91C_EMAC_REVREF ((unsigned int) 0xFFFF << 0) // (EMAC) +#define AT91C_EMAC_PARTREF ((unsigned int) 0xFFFF << 16) // (EMAC) + +// ***************************************************************************** +// SOFTWARE API DEFINITION FOR Analog to Digital Convertor +// ***************************************************************************** +typedef struct _AT91S_ADC { + AT91_REG ADC_CR; // ADC Control Register + AT91_REG ADC_MR; // ADC Mode Register + AT91_REG Reserved0[2]; // + AT91_REG ADC_CHER; // ADC Channel Enable Register + AT91_REG ADC_CHDR; // ADC Channel Disable Register + AT91_REG ADC_CHSR; // ADC Channel Status Register + AT91_REG ADC_SR; // ADC Status Register + AT91_REG ADC_LCDR; // ADC Last Converted Data Register + AT91_REG ADC_IER; // ADC Interrupt Enable Register + AT91_REG ADC_IDR; // ADC Interrupt Disable Register + AT91_REG ADC_IMR; // ADC Interrupt Mask Register + AT91_REG ADC_CDR0; // ADC Channel Data Register 0 + AT91_REG ADC_CDR1; // ADC Channel Data Register 1 + AT91_REG ADC_CDR2; // ADC Channel Data Register 2 + AT91_REG ADC_CDR3; // ADC Channel Data Register 3 + AT91_REG ADC_CDR4; // ADC Channel Data Register 4 + AT91_REG ADC_CDR5; // ADC Channel Data Register 5 + AT91_REG ADC_CDR6; // ADC Channel Data Register 6 + AT91_REG ADC_CDR7; // ADC Channel Data Register 7 + AT91_REG Reserved1[44]; // + AT91_REG ADC_RPR; // Receive Pointer Register + AT91_REG ADC_RCR; // Receive Counter Register + AT91_REG ADC_TPR; // Transmit Pointer Register + AT91_REG ADC_TCR; // Transmit Counter Register + AT91_REG ADC_RNPR; // Receive Next Pointer Register + AT91_REG ADC_RNCR; // Receive Next Counter Register + AT91_REG ADC_TNPR; // Transmit Next Pointer Register + AT91_REG ADC_TNCR; // Transmit Next Counter Register + AT91_REG ADC_PTCR; // PDC Transfer Control Register + AT91_REG ADC_PTSR; // PDC Transfer Status Register +} AT91S_ADC, *AT91PS_ADC; + +// -------- ADC_CR : (ADC Offset: 0x0) ADC Control Register -------- +#define AT91C_ADC_SWRST ((unsigned int) 0x1 << 0) // (ADC) Software Reset +#define AT91C_ADC_START ((unsigned int) 0x1 << 1) // (ADC) Start Conversion +// -------- ADC_MR : (ADC Offset: 0x4) ADC Mode Register -------- +#define AT91C_ADC_TRGEN ((unsigned int) 0x1 << 0) // (ADC) Trigger Enable +#define AT91C_ADC_TRGEN_DIS ((unsigned int) 0x0) // (ADC) Hradware triggers are disabled. Starting a conversion is only possible by software +#define AT91C_ADC_TRGEN_EN ((unsigned int) 0x1) // (ADC) Hardware trigger selected by TRGSEL field is enabled. +#define AT91C_ADC_TRGSEL ((unsigned int) 0x7 << 1) // (ADC) Trigger Selection +#define AT91C_ADC_TRGSEL_TIOA0 ((unsigned int) 0x0 << 1) // (ADC) Selected TRGSEL = TIAO0 +#define AT91C_ADC_TRGSEL_TIOA1 ((unsigned int) 0x1 << 1) // (ADC) Selected TRGSEL = TIAO1 +#define AT91C_ADC_TRGSEL_TIOA2 ((unsigned int) 0x2 << 1) // (ADC) Selected TRGSEL = TIAO2 +#define AT91C_ADC_TRGSEL_TIOA3 ((unsigned int) 0x3 << 1) // (ADC) Selected TRGSEL = TIAO3 +#define AT91C_ADC_TRGSEL_TIOA4 ((unsigned int) 0x4 << 1) // (ADC) Selected TRGSEL = TIAO4 +#define AT91C_ADC_TRGSEL_TIOA5 ((unsigned int) 0x5 << 1) // (ADC) Selected TRGSEL = TIAO5 +#define AT91C_ADC_TRGSEL_EXT ((unsigned int) 0x6 << 1) // (ADC) Selected TRGSEL = External Trigger +#define AT91C_ADC_LOWRES ((unsigned int) 0x1 << 4) // (ADC) Resolution. +#define AT91C_ADC_LOWRES_10_BIT ((unsigned int) 0x0 << 4) // (ADC) 10-bit resolution +#define AT91C_ADC_LOWRES_8_BIT ((unsigned int) 0x1 << 4) // (ADC) 8-bit resolution +#define AT91C_ADC_SLEEP ((unsigned int) 0x1 << 5) // (ADC) Sleep Mode +#define AT91C_ADC_SLEEP_NORMAL_MODE ((unsigned int) 0x0 << 5) // (ADC) Normal Mode +#define AT91C_ADC_SLEEP_MODE ((unsigned int) 0x1 << 5) // (ADC) Sleep Mode +#define AT91C_ADC_PRESCAL ((unsigned int) 0x3F << 8) // (ADC) Prescaler rate selection +#define AT91C_ADC_STARTUP ((unsigned int) 0x1F << 16) // (ADC) Startup Time +#define AT91C_ADC_SHTIM ((unsigned int) 0xF << 24) // (ADC) Sample & Hold Time +// -------- ADC_CHER : (ADC Offset: 0x10) ADC Channel Enable Register -------- +#define AT91C_ADC_CH0 ((unsigned int) 0x1 << 0) // (ADC) Channel 0 +#define AT91C_ADC_CH1 ((unsigned int) 0x1 << 1) // (ADC) Channel 1 +#define AT91C_ADC_CH2 ((unsigned int) 0x1 << 2) // (ADC) Channel 2 +#define AT91C_ADC_CH3 ((unsigned int) 0x1 << 3) // (ADC) Channel 3 +#define AT91C_ADC_CH4 ((unsigned int) 0x1 << 4) // (ADC) Channel 4 +#define AT91C_ADC_CH5 ((unsigned int) 0x1 << 5) // (ADC) Channel 5 +#define AT91C_ADC_CH6 ((unsigned int) 0x1 << 6) // (ADC) Channel 6 +#define AT91C_ADC_CH7 ((unsigned int) 0x1 << 7) // (ADC) Channel 7 +// -------- ADC_CHDR : (ADC Offset: 0x14) ADC Channel Disable Register -------- +// -------- ADC_CHSR : (ADC Offset: 0x18) ADC Channel Status Register -------- +// -------- ADC_SR : (ADC Offset: 0x1c) ADC Status Register -------- +#define AT91C_ADC_EOC0 ((unsigned int) 0x1 << 0) // (ADC) End of Conversion +#define AT91C_ADC_EOC1 ((unsigned int) 0x1 << 1) // (ADC) End of Conversion +#define AT91C_ADC_EOC2 ((unsigned int) 0x1 << 2) // (ADC) End of Conversion +#define AT91C_ADC_EOC3 ((unsigned int) 0x1 << 3) // (ADC) End of Conversion +#define AT91C_ADC_EOC4 ((unsigned int) 0x1 << 4) // (ADC) End of Conversion +#define AT91C_ADC_EOC5 ((unsigned int) 0x1 << 5) // (ADC) End of Conversion +#define AT91C_ADC_EOC6 ((unsigned int) 0x1 << 6) // (ADC) End of Conversion +#define AT91C_ADC_EOC7 ((unsigned int) 0x1 << 7) // (ADC) End of Conversion +#define AT91C_ADC_OVRE0 ((unsigned int) 0x1 << 8) // (ADC) Overrun Error +#define AT91C_ADC_OVRE1 ((unsigned int) 0x1 << 9) // (ADC) Overrun Error +#define AT91C_ADC_OVRE2 ((unsigned int) 0x1 << 10) // (ADC) Overrun Error +#define AT91C_ADC_OVRE3 ((unsigned int) 0x1 << 11) // (ADC) Overrun Error +#define AT91C_ADC_OVRE4 ((unsigned int) 0x1 << 12) // (ADC) Overrun Error +#define AT91C_ADC_OVRE5 ((unsigned int) 0x1 << 13) // (ADC) Overrun Error +#define AT91C_ADC_OVRE6 ((unsigned int) 0x1 << 14) // (ADC) Overrun Error +#define AT91C_ADC_OVRE7 ((unsigned int) 0x1 << 15) // (ADC) Overrun Error +#define AT91C_ADC_DRDY ((unsigned int) 0x1 << 16) // (ADC) Data Ready +#define AT91C_ADC_GOVRE ((unsigned int) 0x1 << 17) // (ADC) General Overrun +#define AT91C_ADC_ENDRX ((unsigned int) 0x1 << 18) // (ADC) End of Receiver Transfer +#define AT91C_ADC_RXBUFF ((unsigned int) 0x1 << 19) // (ADC) RXBUFF Interrupt +// -------- ADC_LCDR : (ADC Offset: 0x20) ADC Last Converted Data Register -------- +#define AT91C_ADC_LDATA ((unsigned int) 0x3FF << 0) // (ADC) Last Data Converted +// -------- ADC_IER : (ADC Offset: 0x24) ADC Interrupt Enable Register -------- +// -------- ADC_IDR : (ADC Offset: 0x28) ADC Interrupt Disable Register -------- +// -------- ADC_IMR : (ADC Offset: 0x2c) ADC Interrupt Mask Register -------- +// -------- ADC_CDR0 : (ADC Offset: 0x30) ADC Channel Data Register 0 -------- +#define AT91C_ADC_DATA ((unsigned int) 0x3FF << 0) // (ADC) Converted Data +// -------- ADC_CDR1 : (ADC Offset: 0x34) ADC Channel Data Register 1 -------- +// -------- ADC_CDR2 : (ADC Offset: 0x38) ADC Channel Data Register 2 -------- +// -------- ADC_CDR3 : (ADC Offset: 0x3c) ADC Channel Data Register 3 -------- +// -------- ADC_CDR4 : (ADC Offset: 0x40) ADC Channel Data Register 4 -------- +// -------- ADC_CDR5 : (ADC Offset: 0x44) ADC Channel Data Register 5 -------- +// -------- ADC_CDR6 : (ADC Offset: 0x48) ADC Channel Data Register 6 -------- +// -------- ADC_CDR7 : (ADC Offset: 0x4c) ADC Channel Data Register 7 -------- + +// ***************************************************************************** +// REGISTER ADDRESS DEFINITION FOR AT91SAM7X256 +// ***************************************************************************** +// ========== Register definition for SYS peripheral ========== +// ========== Register definition for AIC peripheral ========== +#define AT91C_AIC_ICCR ((AT91_REG *) 0xFFFFF128) // (AIC) Interrupt Clear Command Register +#define AT91C_AIC_IECR ((AT91_REG *) 0xFFFFF120) // (AIC) Interrupt Enable Command Register +#define AT91C_AIC_SMR ((AT91_REG *) 0xFFFFF000) // (AIC) Source Mode Register +#define AT91C_AIC_ISCR ((AT91_REG *) 0xFFFFF12C) // (AIC) Interrupt Set Command Register +#define AT91C_AIC_EOICR ((AT91_REG *) 0xFFFFF130) // (AIC) End of Interrupt Command Register +#define AT91C_AIC_DCR ((AT91_REG *) 0xFFFFF138) // (AIC) Debug Control Register (Protect) +#define AT91C_AIC_FFER ((AT91_REG *) 0xFFFFF140) // (AIC) Fast Forcing Enable Register +#define AT91C_AIC_SVR ((AT91_REG *) 0xFFFFF080) // (AIC) Source Vector Register +#define AT91C_AIC_SPU ((AT91_REG *) 0xFFFFF134) // (AIC) Spurious Vector Register +#define AT91C_AIC_FFDR ((AT91_REG *) 0xFFFFF144) // (AIC) Fast Forcing Disable Register +#define AT91C_AIC_FVR ((AT91_REG *) 0xFFFFF104) // (AIC) FIQ Vector Register +#define AT91C_AIC_FFSR ((AT91_REG *) 0xFFFFF148) // (AIC) Fast Forcing Status Register +#define AT91C_AIC_IMR ((AT91_REG *) 0xFFFFF110) // (AIC) Interrupt Mask Register +#define AT91C_AIC_ISR ((AT91_REG *) 0xFFFFF108) // (AIC) Interrupt Status Register +#define AT91C_AIC_IVR ((AT91_REG *) 0xFFFFF100) // (AIC) IRQ Vector Register +#define AT91C_AIC_IDCR ((AT91_REG *) 0xFFFFF124) // (AIC) Interrupt Disable Command Register +#define AT91C_AIC_CISR ((AT91_REG *) 0xFFFFF114) // (AIC) Core Interrupt Status Register +#define AT91C_AIC_IPR ((AT91_REG *) 0xFFFFF10C) // (AIC) Interrupt Pending Register +// ========== Register definition for PDC_DBGU peripheral ========== +#define AT91C_DBGU_TNCR ((AT91_REG *) 0xFFFFF31C) // (PDC_DBGU) Transmit Next Counter Register +#define AT91C_DBGU_RNCR ((AT91_REG *) 0xFFFFF314) // (PDC_DBGU) Receive Next Counter Register +#define AT91C_DBGU_PTCR ((AT91_REG *) 0xFFFFF320) // (PDC_DBGU) PDC Transfer Control Register +#define AT91C_DBGU_PTSR ((AT91_REG *) 0xFFFFF324) // (PDC_DBGU) PDC Transfer Status Register +#define AT91C_DBGU_RCR ((AT91_REG *) 0xFFFFF304) // (PDC_DBGU) Receive Counter Register +#define AT91C_DBGU_TCR ((AT91_REG *) 0xFFFFF30C) // (PDC_DBGU) Transmit Counter Register +#define AT91C_DBGU_RPR ((AT91_REG *) 0xFFFFF300) // (PDC_DBGU) Receive Pointer Register +#define AT91C_DBGU_TPR ((AT91_REG *) 0xFFFFF308) // (PDC_DBGU) Transmit Pointer Register +#define AT91C_DBGU_RNPR ((AT91_REG *) 0xFFFFF310) // (PDC_DBGU) Receive Next Pointer Register +#define AT91C_DBGU_TNPR ((AT91_REG *) 0xFFFFF318) // (PDC_DBGU) Transmit Next Pointer Register +// ========== Register definition for DBGU peripheral ========== +#define AT91C_DBGU_EXID ((AT91_REG *) 0xFFFFF244) // (DBGU) Chip ID Extension Register +#define AT91C_DBGU_THR ((AT91_REG *) 0xFFFFF21C) // (DBGU) Transmitter Holding Register +#define AT91C_DBGU_CSR ((AT91_REG *) 0xFFFFF214) // (DBGU) Channel Status Register +#define AT91C_DBGU_IDR ((AT91_REG *) 0xFFFFF20C) // (DBGU) Interrupt Disable Register +#define AT91C_DBGU_MR ((AT91_REG *) 0xFFFFF204) // (DBGU) Mode Register +#define AT91C_DBGU_FNTR ((AT91_REG *) 0xFFFFF248) // (DBGU) Force NTRST Register +#define AT91C_DBGU_CIDR ((AT91_REG *) 0xFFFFF240) // (DBGU) Chip ID Register +#define AT91C_DBGU_BRGR ((AT91_REG *) 0xFFFFF220) // (DBGU) Baud Rate Generator Register +#define AT91C_DBGU_RHR ((AT91_REG *) 0xFFFFF218) // (DBGU) Receiver Holding Register +#define AT91C_DBGU_IMR ((AT91_REG *) 0xFFFFF210) // (DBGU) Interrupt Mask Register +#define AT91C_DBGU_IER ((AT91_REG *) 0xFFFFF208) // (DBGU) Interrupt Enable Register +#define AT91C_DBGU_CR ((AT91_REG *) 0xFFFFF200) // (DBGU) Control Register +// ========== Register definition for PIOA peripheral ========== +#define AT91C_PIOA_IMR ((AT91_REG *) 0xFFFFF448) // (PIOA) Interrupt Mask Register +#define AT91C_PIOA_IER ((AT91_REG *) 0xFFFFF440) // (PIOA) Interrupt Enable Register +#define AT91C_PIOA_OWDR ((AT91_REG *) 0xFFFFF4A4) // (PIOA) Output Write Disable Register +#define AT91C_PIOA_ISR ((AT91_REG *) 0xFFFFF44C) // (PIOA) Interrupt Status Register +#define AT91C_PIOA_PPUDR ((AT91_REG *) 0xFFFFF460) // (PIOA) Pull-up Disable Register +#define AT91C_PIOA_MDSR ((AT91_REG *) 0xFFFFF458) // (PIOA) Multi-driver Status Register +#define AT91C_PIOA_MDER ((AT91_REG *) 0xFFFFF450) // (PIOA) Multi-driver Enable Register +#define AT91C_PIOA_PER ((AT91_REG *) 0xFFFFF400) // (PIOA) PIO Enable Register +#define AT91C_PIOA_PSR ((AT91_REG *) 0xFFFFF408) // (PIOA) PIO Status Register +#define AT91C_PIOA_OER ((AT91_REG *) 0xFFFFF410) // (PIOA) Output Enable Register +#define AT91C_PIOA_BSR ((AT91_REG *) 0xFFFFF474) // (PIOA) Select B Register +#define AT91C_PIOA_PPUER ((AT91_REG *) 0xFFFFF464) // (PIOA) Pull-up Enable Register +#define AT91C_PIOA_MDDR ((AT91_REG *) 0xFFFFF454) // (PIOA) Multi-driver Disable Register +#define AT91C_PIOA_PDR ((AT91_REG *) 0xFFFFF404) // (PIOA) PIO Disable Register +#define AT91C_PIOA_ODR ((AT91_REG *) 0xFFFFF414) // (PIOA) Output Disable Registerr +#define AT91C_PIOA_IFDR ((AT91_REG *) 0xFFFFF424) // (PIOA) Input Filter Disable Register +#define AT91C_PIOA_ABSR ((AT91_REG *) 0xFFFFF478) // (PIOA) AB Select Status Register +#define AT91C_PIOA_ASR ((AT91_REG *) 0xFFFFF470) // (PIOA) Select A Register +#define AT91C_PIOA_PPUSR ((AT91_REG *) 0xFFFFF468) // (PIOA) Pull-up Status Register +#define AT91C_PIOA_ODSR ((AT91_REG *) 0xFFFFF438) // (PIOA) Output Data Status Register +#define AT91C_PIOA_SODR ((AT91_REG *) 0xFFFFF430) // (PIOA) Set Output Data Register +#define AT91C_PIOA_IFSR ((AT91_REG *) 0xFFFFF428) // (PIOA) Input Filter Status Register +#define AT91C_PIOA_IFER ((AT91_REG *) 0xFFFFF420) // (PIOA) Input Filter Enable Register +#define AT91C_PIOA_OSR ((AT91_REG *) 0xFFFFF418) // (PIOA) Output Status Register +#define AT91C_PIOA_IDR ((AT91_REG *) 0xFFFFF444) // (PIOA) Interrupt Disable Register +#define AT91C_PIOA_PDSR ((AT91_REG *) 0xFFFFF43C) // (PIOA) Pin Data Status Register +#define AT91C_PIOA_CODR ((AT91_REG *) 0xFFFFF434) // (PIOA) Clear Output Data Register +#define AT91C_PIOA_OWSR ((AT91_REG *) 0xFFFFF4A8) // (PIOA) Output Write Status Register +#define AT91C_PIOA_OWER ((AT91_REG *) 0xFFFFF4A0) // (PIOA) Output Write Enable Register +// ========== Register definition for PIOB peripheral ========== +#define AT91C_PIOB_OWSR ((AT91_REG *) 0xFFFFF6A8) // (PIOB) Output Write Status Register +#define AT91C_PIOB_PPUSR ((AT91_REG *) 0xFFFFF668) // (PIOB) Pull-up Status Register +#define AT91C_PIOB_PPUDR ((AT91_REG *) 0xFFFFF660) // (PIOB) Pull-up Disable Register +#define AT91C_PIOB_MDSR ((AT91_REG *) 0xFFFFF658) // (PIOB) Multi-driver Status Register +#define AT91C_PIOB_MDER ((AT91_REG *) 0xFFFFF650) // (PIOB) Multi-driver Enable Register +#define AT91C_PIOB_IMR ((AT91_REG *) 0xFFFFF648) // (PIOB) Interrupt Mask Register +#define AT91C_PIOB_OSR ((AT91_REG *) 0xFFFFF618) // (PIOB) Output Status Register +#define AT91C_PIOB_OER ((AT91_REG *) 0xFFFFF610) // (PIOB) Output Enable Register +#define AT91C_PIOB_PSR ((AT91_REG *) 0xFFFFF608) // (PIOB) PIO Status Register +#define AT91C_PIOB_PER ((AT91_REG *) 0xFFFFF600) // (PIOB) PIO Enable Register +#define AT91C_PIOB_BSR ((AT91_REG *) 0xFFFFF674) // (PIOB) Select B Register +#define AT91C_PIOB_PPUER ((AT91_REG *) 0xFFFFF664) // (PIOB) Pull-up Enable Register +#define AT91C_PIOB_IFDR ((AT91_REG *) 0xFFFFF624) // (PIOB) Input Filter Disable Register +#define AT91C_PIOB_ODR ((AT91_REG *) 0xFFFFF614) // (PIOB) Output Disable Registerr +#define AT91C_PIOB_ABSR ((AT91_REG *) 0xFFFFF678) // (PIOB) AB Select Status Register +#define AT91C_PIOB_ASR ((AT91_REG *) 0xFFFFF670) // (PIOB) Select A Register +#define AT91C_PIOB_IFER ((AT91_REG *) 0xFFFFF620) // (PIOB) Input Filter Enable Register +#define AT91C_PIOB_IFSR ((AT91_REG *) 0xFFFFF628) // (PIOB) Input Filter Status Register +#define AT91C_PIOB_SODR ((AT91_REG *) 0xFFFFF630) // (PIOB) Set Output Data Register +#define AT91C_PIOB_ODSR ((AT91_REG *) 0xFFFFF638) // (PIOB) Output Data Status Register +#define AT91C_PIOB_CODR ((AT91_REG *) 0xFFFFF634) // (PIOB) Clear Output Data Register +#define AT91C_PIOB_PDSR ((AT91_REG *) 0xFFFFF63C) // (PIOB) Pin Data Status Register +#define AT91C_PIOB_OWER ((AT91_REG *) 0xFFFFF6A0) // (PIOB) Output Write Enable Register +#define AT91C_PIOB_IER ((AT91_REG *) 0xFFFFF640) // (PIOB) Interrupt Enable Register +#define AT91C_PIOB_OWDR ((AT91_REG *) 0xFFFFF6A4) // (PIOB) Output Write Disable Register +#define AT91C_PIOB_MDDR ((AT91_REG *) 0xFFFFF654) // (PIOB) Multi-driver Disable Register +#define AT91C_PIOB_ISR ((AT91_REG *) 0xFFFFF64C) // (PIOB) Interrupt Status Register +#define AT91C_PIOB_IDR ((AT91_REG *) 0xFFFFF644) // (PIOB) Interrupt Disable Register +#define AT91C_PIOB_PDR ((AT91_REG *) 0xFFFFF604) // (PIOB) PIO Disable Register +// ========== Register definition for CKGR peripheral ========== +#define AT91C_CKGR_PLLR ((AT91_REG *) 0xFFFFFC2C) // (CKGR) PLL Register +#define AT91C_CKGR_MCFR ((AT91_REG *) 0xFFFFFC24) // (CKGR) Main Clock Frequency Register +#define AT91C_CKGR_MOR ((AT91_REG *) 0xFFFFFC20) // (CKGR) Main Oscillator Register +// ========== Register definition for PMC peripheral ========== +#define AT91C_PMC_SCSR ((AT91_REG *) 0xFFFFFC08) // (PMC) System Clock Status Register +#define AT91C_PMC_SCER ((AT91_REG *) 0xFFFFFC00) // (PMC) System Clock Enable Register +#define AT91C_PMC_IMR ((AT91_REG *) 0xFFFFFC6C) // (PMC) Interrupt Mask Register +#define AT91C_PMC_IDR ((AT91_REG *) 0xFFFFFC64) // (PMC) Interrupt Disable Register +#define AT91C_PMC_PCDR ((AT91_REG *) 0xFFFFFC14) // (PMC) Peripheral Clock Disable Register +#define AT91C_PMC_SCDR ((AT91_REG *) 0xFFFFFC04) // (PMC) System Clock Disable Register +#define AT91C_PMC_SR ((AT91_REG *) 0xFFFFFC68) // (PMC) Status Register +#define AT91C_PMC_IER ((AT91_REG *) 0xFFFFFC60) // (PMC) Interrupt Enable Register +#define AT91C_PMC_MCKR ((AT91_REG *) 0xFFFFFC30) // (PMC) Master Clock Register +#define AT91C_PMC_MOR ((AT91_REG *) 0xFFFFFC20) // (PMC) Main Oscillator Register +#define AT91C_PMC_PCER ((AT91_REG *) 0xFFFFFC10) // (PMC) Peripheral Clock Enable Register +#define AT91C_PMC_PCSR ((AT91_REG *) 0xFFFFFC18) // (PMC) Peripheral Clock Status Register +#define AT91C_PMC_PLLR ((AT91_REG *) 0xFFFFFC2C) // (PMC) PLL Register +#define AT91C_PMC_MCFR ((AT91_REG *) 0xFFFFFC24) // (PMC) Main Clock Frequency Register +#define AT91C_PMC_PCKR ((AT91_REG *) 0xFFFFFC40) // (PMC) Programmable Clock Register +// ========== Register definition for RSTC peripheral ========== +#define AT91C_RSTC_RSR ((AT91_REG *) 0xFFFFFD04) // (RSTC) Reset Status Register +#define AT91C_RSTC_RMR ((AT91_REG *) 0xFFFFFD08) // (RSTC) Reset Mode Register +#define AT91C_RSTC_RCR ((AT91_REG *) 0xFFFFFD00) // (RSTC) Reset Control Register +// ========== Register definition for RTTC peripheral ========== +#define AT91C_RTTC_RTSR ((AT91_REG *) 0xFFFFFD2C) // (RTTC) Real-time Status Register +#define AT91C_RTTC_RTAR ((AT91_REG *) 0xFFFFFD24) // (RTTC) Real-time Alarm Register +#define AT91C_RTTC_RTVR ((AT91_REG *) 0xFFFFFD28) // (RTTC) Real-time Value Register +#define AT91C_RTTC_RTMR ((AT91_REG *) 0xFFFFFD20) // (RTTC) Real-time Mode Register +// ========== Register definition for PITC peripheral ========== +#define AT91C_PITC_PIIR ((AT91_REG *) 0xFFFFFD3C) // (PITC) Period Interval Image Register +#define AT91C_PITC_PISR ((AT91_REG *) 0xFFFFFD34) // (PITC) Period Interval Status Register +#define AT91C_PITC_PIVR ((AT91_REG *) 0xFFFFFD38) // (PITC) Period Interval Value Register +#define AT91C_PITC_PIMR ((AT91_REG *) 0xFFFFFD30) // (PITC) Period Interval Mode Register +// ========== Register definition for WDTC peripheral ========== +#define AT91C_WDTC_WDMR ((AT91_REG *) 0xFFFFFD44) // (WDTC) Watchdog Mode Register +#define AT91C_WDTC_WDSR ((AT91_REG *) 0xFFFFFD48) // (WDTC) Watchdog Status Register +#define AT91C_WDTC_WDCR ((AT91_REG *) 0xFFFFFD40) // (WDTC) Watchdog Control Register +// ========== Register definition for VREG peripheral ========== +#define AT91C_VREG_MR ((AT91_REG *) 0xFFFFFD60) // (VREG) Voltage Regulator Mode Register +// ========== Register definition for MC peripheral ========== +#define AT91C_MC_FCR ((AT91_REG *) 0xFFFFFF64) // (MC) MC Flash Command Register +#define AT91C_MC_ASR ((AT91_REG *) 0xFFFFFF04) // (MC) MC Abort Status Register +#define AT91C_MC_FSR ((AT91_REG *) 0xFFFFFF68) // (MC) MC Flash Status Register +#define AT91C_MC_FMR ((AT91_REG *) 0xFFFFFF60) // (MC) MC Flash Mode Register +#define AT91C_MC_AASR ((AT91_REG *) 0xFFFFFF08) // (MC) MC Abort Address Status Register +#define AT91C_MC_RCR ((AT91_REG *) 0xFFFFFF00) // (MC) MC Remap Control Register +// ========== Register definition for PDC_SPI1 peripheral ========== +#define AT91C_SPI1_RNPR ((AT91_REG *) 0xFFFE4110) // (PDC_SPI1) Receive Next Pointer Register +#define AT91C_SPI1_TPR ((AT91_REG *) 0xFFFE4108) // (PDC_SPI1) Transmit Pointer Register +#define AT91C_SPI1_RPR ((AT91_REG *) 0xFFFE4100) // (PDC_SPI1) Receive Pointer Register +#define AT91C_SPI1_PTSR ((AT91_REG *) 0xFFFE4124) // (PDC_SPI1) PDC Transfer Status Register +#define AT91C_SPI1_RCR ((AT91_REG *) 0xFFFE4104) // (PDC_SPI1) Receive Counter Register +#define AT91C_SPI1_TCR ((AT91_REG *) 0xFFFE410C) // (PDC_SPI1) Transmit Counter Register +#define AT91C_SPI1_RNCR ((AT91_REG *) 0xFFFE4114) // (PDC_SPI1) Receive Next Counter Register +#define AT91C_SPI1_TNCR ((AT91_REG *) 0xFFFE411C) // (PDC_SPI1) Transmit Next Counter Register +#define AT91C_SPI1_TNPR ((AT91_REG *) 0xFFFE4118) // (PDC_SPI1) Transmit Next Pointer Register +#define AT91C_SPI1_PTCR ((AT91_REG *) 0xFFFE4120) // (PDC_SPI1) PDC Transfer Control Register +// ========== Register definition for SPI1 peripheral ========== +#define AT91C_SPI1_CSR ((AT91_REG *) 0xFFFE4030) // (SPI1) Chip Select Register +#define AT91C_SPI1_IDR ((AT91_REG *) 0xFFFE4018) // (SPI1) Interrupt Disable Register +#define AT91C_SPI1_SR ((AT91_REG *) 0xFFFE4010) // (SPI1) Status Register +#define AT91C_SPI1_RDR ((AT91_REG *) 0xFFFE4008) // (SPI1) Receive Data Register +#define AT91C_SPI1_CR ((AT91_REG *) 0xFFFE4000) // (SPI1) Control Register +#define AT91C_SPI1_IMR ((AT91_REG *) 0xFFFE401C) // (SPI1) Interrupt Mask Register +#define AT91C_SPI1_IER ((AT91_REG *) 0xFFFE4014) // (SPI1) Interrupt Enable Register +#define AT91C_SPI1_TDR ((AT91_REG *) 0xFFFE400C) // (SPI1) Transmit Data Register +#define AT91C_SPI1_MR ((AT91_REG *) 0xFFFE4004) // (SPI1) Mode Register +// ========== Register definition for PDC_SPI0 peripheral ========== +#define AT91C_SPI0_PTCR ((AT91_REG *) 0xFFFE0120) // (PDC_SPI0) PDC Transfer Control Register +#define AT91C_SPI0_TNPR ((AT91_REG *) 0xFFFE0118) // (PDC_SPI0) Transmit Next Pointer Register +#define AT91C_SPI0_RNPR ((AT91_REG *) 0xFFFE0110) // (PDC_SPI0) Receive Next Pointer Register +#define AT91C_SPI0_TPR ((AT91_REG *) 0xFFFE0108) // (PDC_SPI0) Transmit Pointer Register +#define AT91C_SPI0_RPR ((AT91_REG *) 0xFFFE0100) // (PDC_SPI0) Receive Pointer Register +#define AT91C_SPI0_PTSR ((AT91_REG *) 0xFFFE0124) // (PDC_SPI0) PDC Transfer Status Register +#define AT91C_SPI0_TNCR ((AT91_REG *) 0xFFFE011C) // (PDC_SPI0) Transmit Next Counter Register +#define AT91C_SPI0_RNCR ((AT91_REG *) 0xFFFE0114) // (PDC_SPI0) Receive Next Counter Register +#define AT91C_SPI0_TCR ((AT91_REG *) 0xFFFE010C) // (PDC_SPI0) Transmit Counter Register +#define AT91C_SPI0_RCR ((AT91_REG *) 0xFFFE0104) // (PDC_SPI0) Receive Counter Register +// ========== Register definition for SPI0 peripheral ========== +#define AT91C_SPI0_CSR ((AT91_REG *) 0xFFFE0030) // (SPI0) Chip Select Register +#define AT91C_SPI0_IDR ((AT91_REG *) 0xFFFE0018) // (SPI0) Interrupt Disable Register +#define AT91C_SPI0_SR ((AT91_REG *) 0xFFFE0010) // (SPI0) Status Register +#define AT91C_SPI0_RDR ((AT91_REG *) 0xFFFE0008) // (SPI0) Receive Data Register +#define AT91C_SPI0_CR ((AT91_REG *) 0xFFFE0000) // (SPI0) Control Register +#define AT91C_SPI0_IMR ((AT91_REG *) 0xFFFE001C) // (SPI0) Interrupt Mask Register +#define AT91C_SPI0_IER ((AT91_REG *) 0xFFFE0014) // (SPI0) Interrupt Enable Register +#define AT91C_SPI0_TDR ((AT91_REG *) 0xFFFE000C) // (SPI0) Transmit Data Register +#define AT91C_SPI0_MR ((AT91_REG *) 0xFFFE0004) // (SPI0) Mode Register +// ========== Register definition for PDC_US1 peripheral ========== +#define AT91C_US1_PTSR ((AT91_REG *) 0xFFFC4124) // (PDC_US1) PDC Transfer Status Register +#define AT91C_US1_TNCR ((AT91_REG *) 0xFFFC411C) // (PDC_US1) Transmit Next Counter Register +#define AT91C_US1_RNCR ((AT91_REG *) 0xFFFC4114) // (PDC_US1) Receive Next Counter Register +#define AT91C_US1_TCR ((AT91_REG *) 0xFFFC410C) // (PDC_US1) Transmit Counter Register +#define AT91C_US1_RCR ((AT91_REG *) 0xFFFC4104) // (PDC_US1) Receive Counter Register +#define AT91C_US1_PTCR ((AT91_REG *) 0xFFFC4120) // (PDC_US1) PDC Transfer Control Register +#define AT91C_US1_TNPR ((AT91_REG *) 0xFFFC4118) // (PDC_US1) Transmit Next Pointer Register +#define AT91C_US1_RNPR ((AT91_REG *) 0xFFFC4110) // (PDC_US1) Receive Next Pointer Register +#define AT91C_US1_TPR ((AT91_REG *) 0xFFFC4108) // (PDC_US1) Transmit Pointer Register +#define AT91C_US1_RPR ((AT91_REG *) 0xFFFC4100) // (PDC_US1) Receive Pointer Register +// ========== Register definition for US1 peripheral ========== +#define AT91C_US1_RHR ((AT91_REG *) 0xFFFC4018) // (US1) Receiver Holding Register +#define AT91C_US1_IMR ((AT91_REG *) 0xFFFC4010) // (US1) Interrupt Mask Register +#define AT91C_US1_IER ((AT91_REG *) 0xFFFC4008) // (US1) Interrupt Enable Register +#define AT91C_US1_CR ((AT91_REG *) 0xFFFC4000) // (US1) Control Register +#define AT91C_US1_RTOR ((AT91_REG *) 0xFFFC4024) // (US1) Receiver Time-out Register +#define AT91C_US1_THR ((AT91_REG *) 0xFFFC401C) // (US1) Transmitter Holding Register +#define AT91C_US1_CSR ((AT91_REG *) 0xFFFC4014) // (US1) Channel Status Register +#define AT91C_US1_IDR ((AT91_REG *) 0xFFFC400C) // (US1) Interrupt Disable Register +#define AT91C_US1_FIDI ((AT91_REG *) 0xFFFC4040) // (US1) FI_DI_Ratio Register +#define AT91C_US1_BRGR ((AT91_REG *) 0xFFFC4020) // (US1) Baud Rate Generator Register +#define AT91C_US1_TTGR ((AT91_REG *) 0xFFFC4028) // (US1) Transmitter Time-guard Register +#define AT91C_US1_IF ((AT91_REG *) 0xFFFC404C) // (US1) IRDA_FILTER Register +#define AT91C_US1_NER ((AT91_REG *) 0xFFFC4044) // (US1) Nb Errors Register +#define AT91C_US1_MR ((AT91_REG *) 0xFFFC4004) // (US1) Mode Register +// ========== Register definition for PDC_US0 peripheral ========== +#define AT91C_US0_PTCR ((AT91_REG *) 0xFFFC0120) // (PDC_US0) PDC Transfer Control Register +#define AT91C_US0_TNPR ((AT91_REG *) 0xFFFC0118) // (PDC_US0) Transmit Next Pointer Register +#define AT91C_US0_RNPR ((AT91_REG *) 0xFFFC0110) // (PDC_US0) Receive Next Pointer Register +#define AT91C_US0_TPR ((AT91_REG *) 0xFFFC0108) // (PDC_US0) Transmit Pointer Register +#define AT91C_US0_RPR ((AT91_REG *) 0xFFFC0100) // (PDC_US0) Receive Pointer Register +#define AT91C_US0_PTSR ((AT91_REG *) 0xFFFC0124) // (PDC_US0) PDC Transfer Status Register +#define AT91C_US0_TNCR ((AT91_REG *) 0xFFFC011C) // (PDC_US0) Transmit Next Counter Register +#define AT91C_US0_RNCR ((AT91_REG *) 0xFFFC0114) // (PDC_US0) Receive Next Counter Register +#define AT91C_US0_TCR ((AT91_REG *) 0xFFFC010C) // (PDC_US0) Transmit Counter Register +#define AT91C_US0_RCR ((AT91_REG *) 0xFFFC0104) // (PDC_US0) Receive Counter Register +// ========== Register definition for US0 peripheral ========== +#define AT91C_US0_TTGR ((AT91_REG *) 0xFFFC0028) // (US0) Transmitter Time-guard Register +#define AT91C_US0_BRGR ((AT91_REG *) 0xFFFC0020) // (US0) Baud Rate Generator Register +#define AT91C_US0_RHR ((AT91_REG *) 0xFFFC0018) // (US0) Receiver Holding Register +#define AT91C_US0_IMR ((AT91_REG *) 0xFFFC0010) // (US0) Interrupt Mask Register +#define AT91C_US0_NER ((AT91_REG *) 0xFFFC0044) // (US0) Nb Errors Register +#define AT91C_US0_RTOR ((AT91_REG *) 0xFFFC0024) // (US0) Receiver Time-out Register +#define AT91C_US0_FIDI ((AT91_REG *) 0xFFFC0040) // (US0) FI_DI_Ratio Register +#define AT91C_US0_CR ((AT91_REG *) 0xFFFC0000) // (US0) Control Register +#define AT91C_US0_IER ((AT91_REG *) 0xFFFC0008) // (US0) Interrupt Enable Register +#define AT91C_US0_IF ((AT91_REG *) 0xFFFC004C) // (US0) IRDA_FILTER Register +#define AT91C_US0_MR ((AT91_REG *) 0xFFFC0004) // (US0) Mode Register +#define AT91C_US0_IDR ((AT91_REG *) 0xFFFC000C) // (US0) Interrupt Disable Register +#define AT91C_US0_CSR ((AT91_REG *) 0xFFFC0014) // (US0) Channel Status Register +#define AT91C_US0_THR ((AT91_REG *) 0xFFFC001C) // (US0) Transmitter Holding Register +// ========== Register definition for PDC_SSC peripheral ========== +#define AT91C_SSC_PTCR ((AT91_REG *) 0xFFFD4120) // (PDC_SSC) PDC Transfer Control Register +#define AT91C_SSC_TNPR ((AT91_REG *) 0xFFFD4118) // (PDC_SSC) Transmit Next Pointer Register +#define AT91C_SSC_RNPR ((AT91_REG *) 0xFFFD4110) // (PDC_SSC) Receive Next Pointer Register +#define AT91C_SSC_TPR ((AT91_REG *) 0xFFFD4108) // (PDC_SSC) Transmit Pointer Register +#define AT91C_SSC_RPR ((AT91_REG *) 0xFFFD4100) // (PDC_SSC) Receive Pointer Register +#define AT91C_SSC_PTSR ((AT91_REG *) 0xFFFD4124) // (PDC_SSC) PDC Transfer Status Register +#define AT91C_SSC_TNCR ((AT91_REG *) 0xFFFD411C) // (PDC_SSC) Transmit Next Counter Register +#define AT91C_SSC_RNCR ((AT91_REG *) 0xFFFD4114) // (PDC_SSC) Receive Next Counter Register +#define AT91C_SSC_TCR ((AT91_REG *) 0xFFFD410C) // (PDC_SSC) Transmit Counter Register +#define AT91C_SSC_RCR ((AT91_REG *) 0xFFFD4104) // (PDC_SSC) Receive Counter Register +// ========== Register definition for SSC peripheral ========== +#define AT91C_SSC_RFMR ((AT91_REG *) 0xFFFD4014) // (SSC) Receive Frame Mode Register +#define AT91C_SSC_CMR ((AT91_REG *) 0xFFFD4004) // (SSC) Clock Mode Register +#define AT91C_SSC_IDR ((AT91_REG *) 0xFFFD4048) // (SSC) Interrupt Disable Register +#define AT91C_SSC_SR ((AT91_REG *) 0xFFFD4040) // (SSC) Status Register +#define AT91C_SSC_RSHR ((AT91_REG *) 0xFFFD4030) // (SSC) Receive Sync Holding Register +#define AT91C_SSC_RHR ((AT91_REG *) 0xFFFD4020) // (SSC) Receive Holding Register +#define AT91C_SSC_TCMR ((AT91_REG *) 0xFFFD4018) // (SSC) Transmit Clock Mode Register +#define AT91C_SSC_RCMR ((AT91_REG *) 0xFFFD4010) // (SSC) Receive Clock ModeRegister +#define AT91C_SSC_CR ((AT91_REG *) 0xFFFD4000) // (SSC) Control Register +#define AT91C_SSC_IMR ((AT91_REG *) 0xFFFD404C) // (SSC) Interrupt Mask Register +#define AT91C_SSC_IER ((AT91_REG *) 0xFFFD4044) // (SSC) Interrupt Enable Register +#define AT91C_SSC_TSHR ((AT91_REG *) 0xFFFD4034) // (SSC) Transmit Sync Holding Register +#define AT91C_SSC_THR ((AT91_REG *) 0xFFFD4024) // (SSC) Transmit Holding Register +#define AT91C_SSC_TFMR ((AT91_REG *) 0xFFFD401C) // (SSC) Transmit Frame Mode Register +// ========== Register definition for TWI peripheral ========== +#define AT91C_TWI_RHR ((AT91_REG *) 0xFFFB8030) // (TWI) Receive Holding Register +#define AT91C_TWI_IDR ((AT91_REG *) 0xFFFB8028) // (TWI) Interrupt Disable Register +#define AT91C_TWI_SR ((AT91_REG *) 0xFFFB8020) // (TWI) Status Register +#define AT91C_TWI_CWGR ((AT91_REG *) 0xFFFB8010) // (TWI) Clock Waveform Generator Register +#define AT91C_TWI_CR ((AT91_REG *) 0xFFFB8000) // (TWI) Control Register +#define AT91C_TWI_THR ((AT91_REG *) 0xFFFB8034) // (TWI) Transmit Holding Register +#define AT91C_TWI_IMR ((AT91_REG *) 0xFFFB802C) // (TWI) Interrupt Mask Register +#define AT91C_TWI_IER ((AT91_REG *) 0xFFFB8024) // (TWI) Interrupt Enable Register +#define AT91C_TWI_IADR ((AT91_REG *) 0xFFFB800C) // (TWI) Internal Address Register +#define AT91C_TWI_MMR ((AT91_REG *) 0xFFFB8004) // (TWI) Master Mode Register +// ========== Register definition for PWMC_CH3 peripheral ========== +#define AT91C_PWMC_CH3_CUPDR ((AT91_REG *) 0xFFFCC270) // (PWMC_CH3) Channel Update Register +#define AT91C_PWMC_CH3_CPRDR ((AT91_REG *) 0xFFFCC268) // (PWMC_CH3) Channel Period Register +#define AT91C_PWMC_CH3_CMR ((AT91_REG *) 0xFFFCC260) // (PWMC_CH3) Channel Mode Register +#define AT91C_PWMC_CH3_Reserved ((AT91_REG *) 0xFFFCC274) // (PWMC_CH3) Reserved +#define AT91C_PWMC_CH3_CCNTR ((AT91_REG *) 0xFFFCC26C) // (PWMC_CH3) Channel Counter Register +#define AT91C_PWMC_CH3_CDTYR ((AT91_REG *) 0xFFFCC264) // (PWMC_CH3) Channel Duty Cycle Register +// ========== Register definition for PWMC_CH2 peripheral ========== +#define AT91C_PWMC_CH2_CUPDR ((AT91_REG *) 0xFFFCC250) // (PWMC_CH2) Channel Update Register +#define AT91C_PWMC_CH2_CPRDR ((AT91_REG *) 0xFFFCC248) // (PWMC_CH2) Channel Period Register +#define AT91C_PWMC_CH2_CMR ((AT91_REG *) 0xFFFCC240) // (PWMC_CH2) Channel Mode Register +#define AT91C_PWMC_CH2_Reserved ((AT91_REG *) 0xFFFCC254) // (PWMC_CH2) Reserved +#define AT91C_PWMC_CH2_CCNTR ((AT91_REG *) 0xFFFCC24C) // (PWMC_CH2) Channel Counter Register +#define AT91C_PWMC_CH2_CDTYR ((AT91_REG *) 0xFFFCC244) // (PWMC_CH2) Channel Duty Cycle Register +// ========== Register definition for PWMC_CH1 peripheral ========== +#define AT91C_PWMC_CH1_CUPDR ((AT91_REG *) 0xFFFCC230) // (PWMC_CH1) Channel Update Register +#define AT91C_PWMC_CH1_CPRDR ((AT91_REG *) 0xFFFCC228) // (PWMC_CH1) Channel Period Register +#define AT91C_PWMC_CH1_CMR ((AT91_REG *) 0xFFFCC220) // (PWMC_CH1) Channel Mode Register +#define AT91C_PWMC_CH1_Reserved ((AT91_REG *) 0xFFFCC234) // (PWMC_CH1) Reserved +#define AT91C_PWMC_CH1_CCNTR ((AT91_REG *) 0xFFFCC22C) // (PWMC_CH1) Channel Counter Register +#define AT91C_PWMC_CH1_CDTYR ((AT91_REG *) 0xFFFCC224) // (PWMC_CH1) Channel Duty Cycle Register +// ========== Register definition for PWMC_CH0 peripheral ========== +#define AT91C_PWMC_CH0_CUPDR ((AT91_REG *) 0xFFFCC210) // (PWMC_CH0) Channel Update Register +#define AT91C_PWMC_CH0_CPRDR ((AT91_REG *) 0xFFFCC208) // (PWMC_CH0) Channel Period Register +#define AT91C_PWMC_CH0_CMR ((AT91_REG *) 0xFFFCC200) // (PWMC_CH0) Channel Mode Register +#define AT91C_PWMC_CH0_Reserved ((AT91_REG *) 0xFFFCC214) // (PWMC_CH0) Reserved +#define AT91C_PWMC_CH0_CCNTR ((AT91_REG *) 0xFFFCC20C) // (PWMC_CH0) Channel Counter Register +#define AT91C_PWMC_CH0_CDTYR ((AT91_REG *) 0xFFFCC204) // (PWMC_CH0) Channel Duty Cycle Register +// ========== Register definition for PWMC peripheral ========== +#define AT91C_PWMC_VR ((AT91_REG *) 0xFFFCC0FC) // (PWMC) PWMC Version Register +#define AT91C_PWMC_ISR ((AT91_REG *) 0xFFFCC01C) // (PWMC) PWMC Interrupt Status Register +#define AT91C_PWMC_IDR ((AT91_REG *) 0xFFFCC014) // (PWMC) PWMC Interrupt Disable Register +#define AT91C_PWMC_SR ((AT91_REG *) 0xFFFCC00C) // (PWMC) PWMC Status Register +#define AT91C_PWMC_ENA ((AT91_REG *) 0xFFFCC004) // (PWMC) PWMC Enable Register +#define AT91C_PWMC_IMR ((AT91_REG *) 0xFFFCC018) // (PWMC) PWMC Interrupt Mask Register +#define AT91C_PWMC_MR ((AT91_REG *) 0xFFFCC000) // (PWMC) PWMC Mode Register +#define AT91C_PWMC_DIS ((AT91_REG *) 0xFFFCC008) // (PWMC) PWMC Disable Register +#define AT91C_PWMC_IER ((AT91_REG *) 0xFFFCC010) // (PWMC) PWMC Interrupt Enable Register +// ========== Register definition for UDP peripheral ========== +#define AT91C_UDP_TXVC ((AT91_REG *) 0xFFFB0074) // (UDP) Transceiver Control Register +#define AT91C_UDP_ISR ((AT91_REG *) 0xFFFB001C) // (UDP) Interrupt Status Register +#define AT91C_UDP_IDR ((AT91_REG *) 0xFFFB0014) // (UDP) Interrupt Disable Register +#define AT91C_UDP_CSR ((AT91_REG *) 0xFFFB0030) // (UDP) Endpoint Control and Status Register +#define AT91C_UDP_RSTEP ((AT91_REG *) 0xFFFB0028) // (UDP) Reset Endpoint Register +#define AT91C_UDP_ICR ((AT91_REG *) 0xFFFB0020) // (UDP) Interrupt Clear Register +#define AT91C_UDP_GLBSTATE ((AT91_REG *) 0xFFFB0004) // (UDP) Global State Register +#define AT91C_UDP_NUM ((AT91_REG *) 0xFFFB0000) // (UDP) Frame Number Register +#define AT91C_UDP_FADDR ((AT91_REG *) 0xFFFB0008) // (UDP) Function Address Register +#define AT91C_UDP_IER ((AT91_REG *) 0xFFFB0010) // (UDP) Interrupt Enable Register +#define AT91C_UDP_IMR ((AT91_REG *) 0xFFFB0018) // (UDP) Interrupt Mask Register +#define AT91C_UDP_FDR ((AT91_REG *) 0xFFFB0050) // (UDP) Endpoint FIFO Data Register +// ========== Register definition for TC0 peripheral ========== +#define AT91C_TC0_IMR ((AT91_REG *) 0xFFFA002C) // (TC0) Interrupt Mask Register +#define AT91C_TC0_IER ((AT91_REG *) 0xFFFA0024) // (TC0) Interrupt Enable Register +#define AT91C_TC0_RC ((AT91_REG *) 0xFFFA001C) // (TC0) Register C +#define AT91C_TC0_RA ((AT91_REG *) 0xFFFA0014) // (TC0) Register A +#define AT91C_TC0_CMR ((AT91_REG *) 0xFFFA0004) // (TC0) Channel Mode Register (Capture Mode / Waveform Mode) +#define AT91C_TC0_IDR ((AT91_REG *) 0xFFFA0028) // (TC0) Interrupt Disable Register +#define AT91C_TC0_SR ((AT91_REG *) 0xFFFA0020) // (TC0) Status Register +#define AT91C_TC0_RB ((AT91_REG *) 0xFFFA0018) // (TC0) Register B +#define AT91C_TC0_CV ((AT91_REG *) 0xFFFA0010) // (TC0) Counter Value +#define AT91C_TC0_CCR ((AT91_REG *) 0xFFFA0000) // (TC0) Channel Control Register +// ========== Register definition for TC1 peripheral ========== +#define AT91C_TC1_IMR ((AT91_REG *) 0xFFFA006C) // (TC1) Interrupt Mask Register +#define AT91C_TC1_IER ((AT91_REG *) 0xFFFA0064) // (TC1) Interrupt Enable Register +#define AT91C_TC1_RC ((AT91_REG *) 0xFFFA005C) // (TC1) Register C +#define AT91C_TC1_RA ((AT91_REG *) 0xFFFA0054) // (TC1) Register A +#define AT91C_TC1_CMR ((AT91_REG *) 0xFFFA0044) // (TC1) Channel Mode Register (Capture Mode / Waveform Mode) +#define AT91C_TC1_IDR ((AT91_REG *) 0xFFFA0068) // (TC1) Interrupt Disable Register +#define AT91C_TC1_SR ((AT91_REG *) 0xFFFA0060) // (TC1) Status Register +#define AT91C_TC1_RB ((AT91_REG *) 0xFFFA0058) // (TC1) Register B +#define AT91C_TC1_CV ((AT91_REG *) 0xFFFA0050) // (TC1) Counter Value +#define AT91C_TC1_CCR ((AT91_REG *) 0xFFFA0040) // (TC1) Channel Control Register +// ========== Register definition for TC2 peripheral ========== +#define AT91C_TC2_IMR ((AT91_REG *) 0xFFFA00AC) // (TC2) Interrupt Mask Register +#define AT91C_TC2_IER ((AT91_REG *) 0xFFFA00A4) // (TC2) Interrupt Enable Register +#define AT91C_TC2_RC ((AT91_REG *) 0xFFFA009C) // (TC2) Register C +#define AT91C_TC2_RA ((AT91_REG *) 0xFFFA0094) // (TC2) Register A +#define AT91C_TC2_CMR ((AT91_REG *) 0xFFFA0084) // (TC2) Channel Mode Register (Capture Mode / Waveform Mode) +#define AT91C_TC2_IDR ((AT91_REG *) 0xFFFA00A8) // (TC2) Interrupt Disable Register +#define AT91C_TC2_SR ((AT91_REG *) 0xFFFA00A0) // (TC2) Status Register +#define AT91C_TC2_RB ((AT91_REG *) 0xFFFA0098) // (TC2) Register B +#define AT91C_TC2_CV ((AT91_REG *) 0xFFFA0090) // (TC2) Counter Value +#define AT91C_TC2_CCR ((AT91_REG *) 0xFFFA0080) // (TC2) Channel Control Register +// ========== Register definition for TCB peripheral ========== +#define AT91C_TCB_BMR ((AT91_REG *) 0xFFFA00C4) // (TCB) TC Block Mode Register +#define AT91C_TCB_BCR ((AT91_REG *) 0xFFFA00C0) // (TCB) TC Block Control Register +// ========== Register definition for CAN_MB0 peripheral ========== +#define AT91C_CAN_MB0_MCR ((AT91_REG *) 0xFFFD021C) // (CAN_MB0) MailBox Control Register +#define AT91C_CAN_MB0_MDL ((AT91_REG *) 0xFFFD0214) // (CAN_MB0) MailBox Data Low Register +#define AT91C_CAN_MB0_MFID ((AT91_REG *) 0xFFFD020C) // (CAN_MB0) MailBox Family ID Register +#define AT91C_CAN_MB0_MAM ((AT91_REG *) 0xFFFD0204) // (CAN_MB0) MailBox Acceptance Mask Register +#define AT91C_CAN_MB0_MDH ((AT91_REG *) 0xFFFD0218) // (CAN_MB0) MailBox Data High Register +#define AT91C_CAN_MB0_MSR ((AT91_REG *) 0xFFFD0210) // (CAN_MB0) MailBox Status Register +#define AT91C_CAN_MB0_MID ((AT91_REG *) 0xFFFD0208) // (CAN_MB0) MailBox ID Register +#define AT91C_CAN_MB0_MMR ((AT91_REG *) 0xFFFD0200) // (CAN_MB0) MailBox Mode Register +// ========== Register definition for CAN_MB1 peripheral ========== +#define AT91C_CAN_MB1_MCR ((AT91_REG *) 0xFFFD023C) // (CAN_MB1) MailBox Control Register +#define AT91C_CAN_MB1_MDL ((AT91_REG *) 0xFFFD0234) // (CAN_MB1) MailBox Data Low Register +#define AT91C_CAN_MB1_MFID ((AT91_REG *) 0xFFFD022C) // (CAN_MB1) MailBox Family ID Register +#define AT91C_CAN_MB1_MAM ((AT91_REG *) 0xFFFD0224) // (CAN_MB1) MailBox Acceptance Mask Register +#define AT91C_CAN_MB1_MDH ((AT91_REG *) 0xFFFD0238) // (CAN_MB1) MailBox Data High Register +#define AT91C_CAN_MB1_MSR ((AT91_REG *) 0xFFFD0230) // (CAN_MB1) MailBox Status Register +#define AT91C_CAN_MB1_MID ((AT91_REG *) 0xFFFD0228) // (CAN_MB1) MailBox ID Register +#define AT91C_CAN_MB1_MMR ((AT91_REG *) 0xFFFD0220) // (CAN_MB1) MailBox Mode Register +// ========== Register definition for CAN_MB2 peripheral ========== +#define AT91C_CAN_MB2_MCR ((AT91_REG *) 0xFFFD025C) // (CAN_MB2) MailBox Control Register +#define AT91C_CAN_MB2_MDL ((AT91_REG *) 0xFFFD0254) // (CAN_MB2) MailBox Data Low Register +#define AT91C_CAN_MB2_MFID ((AT91_REG *) 0xFFFD024C) // (CAN_MB2) MailBox Family ID Register +#define AT91C_CAN_MB2_MAM ((AT91_REG *) 0xFFFD0244) // (CAN_MB2) MailBox Acceptance Mask Register +#define AT91C_CAN_MB2_MDH ((AT91_REG *) 0xFFFD0258) // (CAN_MB2) MailBox Data High Register +#define AT91C_CAN_MB2_MSR ((AT91_REG *) 0xFFFD0250) // (CAN_MB2) MailBox Status Register +#define AT91C_CAN_MB2_MID ((AT91_REG *) 0xFFFD0248) // (CAN_MB2) MailBox ID Register +#define AT91C_CAN_MB2_MMR ((AT91_REG *) 0xFFFD0240) // (CAN_MB2) MailBox Mode Register +// ========== Register definition for CAN_MB3 peripheral ========== +#define AT91C_CAN_MB3_MCR ((AT91_REG *) 0xFFFD027C) // (CAN_MB3) MailBox Control Register +#define AT91C_CAN_MB3_MDL ((AT91_REG *) 0xFFFD0274) // (CAN_MB3) MailBox Data Low Register +#define AT91C_CAN_MB3_MFID ((AT91_REG *) 0xFFFD026C) // (CAN_MB3) MailBox Family ID Register +#define AT91C_CAN_MB3_MAM ((AT91_REG *) 0xFFFD0264) // (CAN_MB3) MailBox Acceptance Mask Register +#define AT91C_CAN_MB3_MDH ((AT91_REG *) 0xFFFD0278) // (CAN_MB3) MailBox Data High Register +#define AT91C_CAN_MB3_MSR ((AT91_REG *) 0xFFFD0270) // (CAN_MB3) MailBox Status Register +#define AT91C_CAN_MB3_MID ((AT91_REG *) 0xFFFD0268) // (CAN_MB3) MailBox ID Register +#define AT91C_CAN_MB3_MMR ((AT91_REG *) 0xFFFD0260) // (CAN_MB3) MailBox Mode Register +// ========== Register definition for CAN_MB4 peripheral ========== +#define AT91C_CAN_MB4_MCR ((AT91_REG *) 0xFFFD029C) // (CAN_MB4) MailBox Control Register +#define AT91C_CAN_MB4_MDL ((AT91_REG *) 0xFFFD0294) // (CAN_MB4) MailBox Data Low Register +#define AT91C_CAN_MB4_MFID ((AT91_REG *) 0xFFFD028C) // (CAN_MB4) MailBox Family ID Register +#define AT91C_CAN_MB4_MAM ((AT91_REG *) 0xFFFD0284) // (CAN_MB4) MailBox Acceptance Mask Register +#define AT91C_CAN_MB4_MDH ((AT91_REG *) 0xFFFD0298) // (CAN_MB4) MailBox Data High Register +#define AT91C_CAN_MB4_MSR ((AT91_REG *) 0xFFFD0290) // (CAN_MB4) MailBox Status Register +#define AT91C_CAN_MB4_MID ((AT91_REG *) 0xFFFD0288) // (CAN_MB4) MailBox ID Register +#define AT91C_CAN_MB4_MMR ((AT91_REG *) 0xFFFD0280) // (CAN_MB4) MailBox Mode Register +// ========== Register definition for CAN_MB5 peripheral ========== +#define AT91C_CAN_MB5_MCR ((AT91_REG *) 0xFFFD02BC) // (CAN_MB5) MailBox Control Register +#define AT91C_CAN_MB5_MDL ((AT91_REG *) 0xFFFD02B4) // (CAN_MB5) MailBox Data Low Register +#define AT91C_CAN_MB5_MFID ((AT91_REG *) 0xFFFD02AC) // (CAN_MB5) MailBox Family ID Register +#define AT91C_CAN_MB5_MAM ((AT91_REG *) 0xFFFD02A4) // (CAN_MB5) MailBox Acceptance Mask Register +#define AT91C_CAN_MB5_MDH ((AT91_REG *) 0xFFFD02B8) // (CAN_MB5) MailBox Data High Register +#define AT91C_CAN_MB5_MSR ((AT91_REG *) 0xFFFD02B0) // (CAN_MB5) MailBox Status Register +#define AT91C_CAN_MB5_MID ((AT91_REG *) 0xFFFD02A8) // (CAN_MB5) MailBox ID Register +#define AT91C_CAN_MB5_MMR ((AT91_REG *) 0xFFFD02A0) // (CAN_MB5) MailBox Mode Register +// ========== Register definition for CAN_MB6 peripheral ========== +#define AT91C_CAN_MB6_MAM ((AT91_REG *) 0xFFFD02C4) // (CAN_MB6) MailBox Acceptance Mask Register +#define AT91C_CAN_MB6_MDH ((AT91_REG *) 0xFFFD02D8) // (CAN_MB6) MailBox Data High Register +#define AT91C_CAN_MB6_MSR ((AT91_REG *) 0xFFFD02D0) // (CAN_MB6) MailBox Status Register +#define AT91C_CAN_MB6_MID ((AT91_REG *) 0xFFFD02C8) // (CAN_MB6) MailBox ID Register +#define AT91C_CAN_MB6_MMR ((AT91_REG *) 0xFFFD02C0) // (CAN_MB6) MailBox Mode Register +#define AT91C_CAN_MB6_MCR ((AT91_REG *) 0xFFFD02DC) // (CAN_MB6) MailBox Control Register +#define AT91C_CAN_MB6_MDL ((AT91_REG *) 0xFFFD02D4) // (CAN_MB6) MailBox Data Low Register +#define AT91C_CAN_MB6_MFID ((AT91_REG *) 0xFFFD02CC) // (CAN_MB6) MailBox Family ID Register +// ========== Register definition for CAN_MB7 peripheral ========== +#define AT91C_CAN_MB7_MDH ((AT91_REG *) 0xFFFD02F8) // (CAN_MB7) MailBox Data High Register +#define AT91C_CAN_MB7_MSR ((AT91_REG *) 0xFFFD02F0) // (CAN_MB7) MailBox Status Register +#define AT91C_CAN_MB7_MID ((AT91_REG *) 0xFFFD02E8) // (CAN_MB7) MailBox ID Register +#define AT91C_CAN_MB7_MMR ((AT91_REG *) 0xFFFD02E0) // (CAN_MB7) MailBox Mode Register +#define AT91C_CAN_MB7_MCR ((AT91_REG *) 0xFFFD02FC) // (CAN_MB7) MailBox Control Register +#define AT91C_CAN_MB7_MDL ((AT91_REG *) 0xFFFD02F4) // (CAN_MB7) MailBox Data Low Register +#define AT91C_CAN_MB7_MFID ((AT91_REG *) 0xFFFD02EC) // (CAN_MB7) MailBox Family ID Register +#define AT91C_CAN_MB7_MAM ((AT91_REG *) 0xFFFD02E4) // (CAN_MB7) MailBox Acceptance Mask Register +// ========== Register definition for CAN peripheral ========== +#define AT91C_CAN_IMR ((AT91_REG *) 0xFFFD000C) // (CAN) Interrupt Mask Register +#define AT91C_CAN_IER ((AT91_REG *) 0xFFFD0004) // (CAN) Interrupt Enable Register +#define AT91C_CAN_ECR ((AT91_REG *) 0xFFFD0020) // (CAN) Error Counter Register +#define AT91C_CAN_TIM ((AT91_REG *) 0xFFFD0018) // (CAN) Timer Register +#define AT91C_CAN_SR ((AT91_REG *) 0xFFFD0010) // (CAN) Status Register +#define AT91C_CAN_IDR ((AT91_REG *) 0xFFFD0008) // (CAN) Interrupt Disable Register +#define AT91C_CAN_MR ((AT91_REG *) 0xFFFD0000) // (CAN) Mode Register +#define AT91C_CAN_BR ((AT91_REG *) 0xFFFD0014) // (CAN) Baudrate Register +#define AT91C_CAN_TIMESTP ((AT91_REG *) 0xFFFD001C) // (CAN) Time Stamp Register +#define AT91C_CAN_TCR ((AT91_REG *) 0xFFFD0024) // (CAN) Transfer Command Register +#define AT91C_CAN_ACR ((AT91_REG *) 0xFFFD0028) // (CAN) Abort Command Register +#define AT91C_CAN_VR ((AT91_REG *) 0xFFFD00FC) // (CAN) Version Register +// ========== Register definition for EMAC peripheral ========== +#define AT91C_EMAC_TID ((AT91_REG *) 0xFFFDC0B8) // (EMAC) Type ID Checking Register +#define AT91C_EMAC_SA3L ((AT91_REG *) 0xFFFDC0A8) // (EMAC) Specific Address 3 Bottom, First 4 bytes +#define AT91C_EMAC_STE ((AT91_REG *) 0xFFFDC084) // (EMAC) SQE Test Error Register +#define AT91C_EMAC_RSE ((AT91_REG *) 0xFFFDC074) // (EMAC) Receive Symbol Errors Register +#define AT91C_EMAC_IDR ((AT91_REG *) 0xFFFDC02C) // (EMAC) Interrupt Disable Register +#define AT91C_EMAC_TBQP ((AT91_REG *) 0xFFFDC01C) // (EMAC) Transmit Buffer Queue Pointer +#define AT91C_EMAC_TPQ ((AT91_REG *) 0xFFFDC0BC) // (EMAC) Transmit Pause Quantum Register +#define AT91C_EMAC_SA1L ((AT91_REG *) 0xFFFDC098) // (EMAC) Specific Address 1 Bottom, First 4 bytes +#define AT91C_EMAC_RLE ((AT91_REG *) 0xFFFDC088) // (EMAC) Receive Length Field Mismatch Register +#define AT91C_EMAC_IMR ((AT91_REG *) 0xFFFDC030) // (EMAC) Interrupt Mask Register +#define AT91C_EMAC_SA1H ((AT91_REG *) 0xFFFDC09C) // (EMAC) Specific Address 1 Top, Last 2 bytes +#define AT91C_EMAC_PFR ((AT91_REG *) 0xFFFDC03C) // (EMAC) Pause Frames received Register +#define AT91C_EMAC_FCSE ((AT91_REG *) 0xFFFDC050) // (EMAC) Frame Check Sequence Error Register +#define AT91C_EMAC_FTO ((AT91_REG *) 0xFFFDC040) // (EMAC) Frames Transmitted OK Register +#define AT91C_EMAC_TUND ((AT91_REG *) 0xFFFDC064) // (EMAC) Transmit Underrun Error Register +#define AT91C_EMAC_ALE ((AT91_REG *) 0xFFFDC054) // (EMAC) Alignment Error Register +#define AT91C_EMAC_SCF ((AT91_REG *) 0xFFFDC044) // (EMAC) Single Collision Frame Register +#define AT91C_EMAC_SA3H ((AT91_REG *) 0xFFFDC0AC) // (EMAC) Specific Address 3 Top, Last 2 bytes +#define AT91C_EMAC_ELE ((AT91_REG *) 0xFFFDC078) // (EMAC) Excessive Length Errors Register +#define AT91C_EMAC_CSE ((AT91_REG *) 0xFFFDC068) // (EMAC) Carrier Sense Error Register +#define AT91C_EMAC_DTF ((AT91_REG *) 0xFFFDC058) // (EMAC) Deferred Transmission Frame Register +#define AT91C_EMAC_RSR ((AT91_REG *) 0xFFFDC020) // (EMAC) Receive Status Register +#define AT91C_EMAC_USRIO ((AT91_REG *) 0xFFFDC0C0) // (EMAC) USER Input/Output Register +#define AT91C_EMAC_SA4L ((AT91_REG *) 0xFFFDC0B0) // (EMAC) Specific Address 4 Bottom, First 4 bytes +#define AT91C_EMAC_RRE ((AT91_REG *) 0xFFFDC06C) // (EMAC) Receive Ressource Error Register +#define AT91C_EMAC_RJA ((AT91_REG *) 0xFFFDC07C) // (EMAC) Receive Jabbers Register +#define AT91C_EMAC_TPF ((AT91_REG *) 0xFFFDC08C) // (EMAC) Transmitted Pause Frames Register +#define AT91C_EMAC_ISR ((AT91_REG *) 0xFFFDC024) // (EMAC) Interrupt Status Register +#define AT91C_EMAC_MAN ((AT91_REG *) 0xFFFDC034) // (EMAC) PHY Maintenance Register +#define AT91C_EMAC_WOL ((AT91_REG *) 0xFFFDC0C4) // (EMAC) Wake On LAN Register +#define AT91C_EMAC_USF ((AT91_REG *) 0xFFFDC080) // (EMAC) Undersize Frames Register +#define AT91C_EMAC_HRB ((AT91_REG *) 0xFFFDC090) // (EMAC) Hash Address Bottom[31:0] +#define AT91C_EMAC_PTR ((AT91_REG *) 0xFFFDC038) // (EMAC) Pause Time Register +#define AT91C_EMAC_HRT ((AT91_REG *) 0xFFFDC094) // (EMAC) Hash Address Top[63:32] +#define AT91C_EMAC_REV ((AT91_REG *) 0xFFFDC0FC) // (EMAC) Revision Register +#define AT91C_EMAC_MCF ((AT91_REG *) 0xFFFDC048) // (EMAC) Multiple Collision Frame Register +#define AT91C_EMAC_SA2L ((AT91_REG *) 0xFFFDC0A0) // (EMAC) Specific Address 2 Bottom, First 4 bytes +#define AT91C_EMAC_NCR ((AT91_REG *) 0xFFFDC000) // (EMAC) Network Control Register +#define AT91C_EMAC_FRO ((AT91_REG *) 0xFFFDC04C) // (EMAC) Frames Received OK Register +#define AT91C_EMAC_LCOL ((AT91_REG *) 0xFFFDC05C) // (EMAC) Late Collision Register +#define AT91C_EMAC_SA4H ((AT91_REG *) 0xFFFDC0B4) // (EMAC) Specific Address 4 Top, Last 2 bytes +#define AT91C_EMAC_NCFGR ((AT91_REG *) 0xFFFDC004) // (EMAC) Network Configuration Register +#define AT91C_EMAC_TSR ((AT91_REG *) 0xFFFDC014) // (EMAC) Transmit Status Register +#define AT91C_EMAC_SA2H ((AT91_REG *) 0xFFFDC0A4) // (EMAC) Specific Address 2 Top, Last 2 bytes +#define AT91C_EMAC_ECOL ((AT91_REG *) 0xFFFDC060) // (EMAC) Excessive Collision Register +#define AT91C_EMAC_ROV ((AT91_REG *) 0xFFFDC070) // (EMAC) Receive Overrun Errors Register +#define AT91C_EMAC_NSR ((AT91_REG *) 0xFFFDC008) // (EMAC) Network Status Register +#define AT91C_EMAC_RBQP ((AT91_REG *) 0xFFFDC018) // (EMAC) Receive Buffer Queue Pointer +#define AT91C_EMAC_IER ((AT91_REG *) 0xFFFDC028) // (EMAC) Interrupt Enable Register +// ========== Register definition for PDC_ADC peripheral ========== +#define AT91C_ADC_PTCR ((AT91_REG *) 0xFFFD8120) // (PDC_ADC) PDC Transfer Control Register +#define AT91C_ADC_TNPR ((AT91_REG *) 0xFFFD8118) // (PDC_ADC) Transmit Next Pointer Register +#define AT91C_ADC_RNPR ((AT91_REG *) 0xFFFD8110) // (PDC_ADC) Receive Next Pointer Register +#define AT91C_ADC_TPR ((AT91_REG *) 0xFFFD8108) // (PDC_ADC) Transmit Pointer Register +#define AT91C_ADC_RPR ((AT91_REG *) 0xFFFD8100) // (PDC_ADC) Receive Pointer Register +#define AT91C_ADC_PTSR ((AT91_REG *) 0xFFFD8124) // (PDC_ADC) PDC Transfer Status Register +#define AT91C_ADC_TNCR ((AT91_REG *) 0xFFFD811C) // (PDC_ADC) Transmit Next Counter Register +#define AT91C_ADC_RNCR ((AT91_REG *) 0xFFFD8114) // (PDC_ADC) Receive Next Counter Register +#define AT91C_ADC_TCR ((AT91_REG *) 0xFFFD810C) // (PDC_ADC) Transmit Counter Register +#define AT91C_ADC_RCR ((AT91_REG *) 0xFFFD8104) // (PDC_ADC) Receive Counter Register +// ========== Register definition for ADC peripheral ========== +#define AT91C_ADC_IMR ((AT91_REG *) 0xFFFD802C) // (ADC) ADC Interrupt Mask Register +#define AT91C_ADC_CDR4 ((AT91_REG *) 0xFFFD8040) // (ADC) ADC Channel Data Register 4 +#define AT91C_ADC_CDR2 ((AT91_REG *) 0xFFFD8038) // (ADC) ADC Channel Data Register 2 +#define AT91C_ADC_CDR0 ((AT91_REG *) 0xFFFD8030) // (ADC) ADC Channel Data Register 0 +#define AT91C_ADC_CDR7 ((AT91_REG *) 0xFFFD804C) // (ADC) ADC Channel Data Register 7 +#define AT91C_ADC_CDR1 ((AT91_REG *) 0xFFFD8034) // (ADC) ADC Channel Data Register 1 +#define AT91C_ADC_CDR3 ((AT91_REG *) 0xFFFD803C) // (ADC) ADC Channel Data Register 3 +#define AT91C_ADC_CDR5 ((AT91_REG *) 0xFFFD8044) // (ADC) ADC Channel Data Register 5 +#define AT91C_ADC_MR ((AT91_REG *) 0xFFFD8004) // (ADC) ADC Mode Register +#define AT91C_ADC_CDR6 ((AT91_REG *) 0xFFFD8048) // (ADC) ADC Channel Data Register 6 +#define AT91C_ADC_CR ((AT91_REG *) 0xFFFD8000) // (ADC) ADC Control Register +#define AT91C_ADC_CHER ((AT91_REG *) 0xFFFD8010) // (ADC) ADC Channel Enable Register +#define AT91C_ADC_CHSR ((AT91_REG *) 0xFFFD8018) // (ADC) ADC Channel Status Register +#define AT91C_ADC_IER ((AT91_REG *) 0xFFFD8024) // (ADC) ADC Interrupt Enable Register +#define AT91C_ADC_SR ((AT91_REG *) 0xFFFD801C) // (ADC) ADC Status Register +#define AT91C_ADC_CHDR ((AT91_REG *) 0xFFFD8014) // (ADC) ADC Channel Disable Register +#define AT91C_ADC_IDR ((AT91_REG *) 0xFFFD8028) // (ADC) ADC Interrupt Disable Register +#define AT91C_ADC_LCDR ((AT91_REG *) 0xFFFD8020) // (ADC) ADC Last Converted Data Register + +// ***************************************************************************** +// PIO DEFINITIONS FOR AT91SAM7X256 +// ***************************************************************************** +#define AT91C_PIO_PA0 ((unsigned int) 1 << 0) // Pin Controlled by PA0 +#define AT91C_PA0_RXD0 ((unsigned int) AT91C_PIO_PA0) // USART 0 Receive Data +#define AT91C_PIO_PA1 ((unsigned int) 1 << 1) // Pin Controlled by PA1 +#define AT91C_PA1_TXD0 ((unsigned int) AT91C_PIO_PA1) // USART 0 Transmit Data +#define AT91C_PIO_PA10 ((unsigned int) 1 << 10) // Pin Controlled by PA10 +#define AT91C_PA10_TWD ((unsigned int) AT91C_PIO_PA10) // TWI Two-wire Serial Data +#define AT91C_PIO_PA11 ((unsigned int) 1 << 11) // Pin Controlled by PA11 +#define AT91C_PA11_TWCK ((unsigned int) AT91C_PIO_PA11) // TWI Two-wire Serial Clock +#define AT91C_PIO_PA12 ((unsigned int) 1 << 12) // Pin Controlled by PA12 +#define AT91C_PA12_SPI0_NPCS0 ((unsigned int) AT91C_PIO_PA12) // SPI 0 Peripheral Chip Select 0 +#define AT91C_PIO_PA13 ((unsigned int) 1 << 13) // Pin Controlled by PA13 +#define AT91C_PA13_SPI0_NPCS1 ((unsigned int) AT91C_PIO_PA13) // SPI 0 Peripheral Chip Select 1 +#define AT91C_PA13_PCK1 ((unsigned int) AT91C_PIO_PA13) // PMC Programmable Clock Output 1 +#define AT91C_PIO_PA14 ((unsigned int) 1 << 14) // Pin Controlled by PA14 +#define AT91C_PA14_SPI0_NPCS2 ((unsigned int) AT91C_PIO_PA14) // SPI 0 Peripheral Chip Select 2 +#define AT91C_PA14_IRQ1 ((unsigned int) AT91C_PIO_PA14) // External Interrupt 1 +#define AT91C_PIO_PA15 ((unsigned int) 1 << 15) // Pin Controlled by PA15 +#define AT91C_PA15_SPI0_NPCS3 ((unsigned int) AT91C_PIO_PA15) // SPI 0 Peripheral Chip Select 3 +#define AT91C_PA15_TCLK2 ((unsigned int) AT91C_PIO_PA15) // Timer Counter 2 external clock input +#define AT91C_PIO_PA16 ((unsigned int) 1 << 16) // Pin Controlled by PA16 +#define AT91C_PA16_SPI0_MISO ((unsigned int) AT91C_PIO_PA16) // SPI 0 Master In Slave +#define AT91C_PIO_PA17 ((unsigned int) 1 << 17) // Pin Controlled by PA17 +#define AT91C_PA17_SPI0_MOSI ((unsigned int) AT91C_PIO_PA17) // SPI 0 Master Out Slave +#define AT91C_PIO_PA18 ((unsigned int) 1 << 18) // Pin Controlled by PA18 +#define AT91C_PA18_SPI0_SPCK ((unsigned int) AT91C_PIO_PA18) // SPI 0 Serial Clock +#define AT91C_PIO_PA19 ((unsigned int) 1 << 19) // Pin Controlled by PA19 +#define AT91C_PA19_CANRX ((unsigned int) AT91C_PIO_PA19) // CAN Receive +#define AT91C_PIO_PA2 ((unsigned int) 1 << 2) // Pin Controlled by PA2 +#define AT91C_PA2_SCK0 ((unsigned int) AT91C_PIO_PA2) // USART 0 Serial Clock +#define AT91C_PA2_SPI1_NPCS1 ((unsigned int) AT91C_PIO_PA2) // SPI 1 Peripheral Chip Select 1 +#define AT91C_PIO_PA20 ((unsigned int) 1 << 20) // Pin Controlled by PA20 +#define AT91C_PA20_CANTX ((unsigned int) AT91C_PIO_PA20) // CAN Transmit +#define AT91C_PIO_PA21 ((unsigned int) 1 << 21) // Pin Controlled by PA21 +#define AT91C_PA21_TF ((unsigned int) AT91C_PIO_PA21) // SSC Transmit Frame Sync +#define AT91C_PA21_SPI1_NPCS0 ((unsigned int) AT91C_PIO_PA21) // SPI 1 Peripheral Chip Select 0 +#define AT91C_PIO_PA22 ((unsigned int) 1 << 22) // Pin Controlled by PA22 +#define AT91C_PA22_TK ((unsigned int) AT91C_PIO_PA22) // SSC Transmit Clock +#define AT91C_PA22_SPI1_SPCK ((unsigned int) AT91C_PIO_PA22) // SPI 1 Serial Clock +#define AT91C_PIO_PA23 ((unsigned int) 1 << 23) // Pin Controlled by PA23 +#define AT91C_PA23_TD ((unsigned int) AT91C_PIO_PA23) // SSC Transmit data +#define AT91C_PA23_SPI1_MOSI ((unsigned int) AT91C_PIO_PA23) // SPI 1 Master Out Slave +#define AT91C_PIO_PA24 ((unsigned int) 1 << 24) // Pin Controlled by PA24 +#define AT91C_PA24_RD ((unsigned int) AT91C_PIO_PA24) // SSC Receive Data +#define AT91C_PA24_SPI1_MISO ((unsigned int) AT91C_PIO_PA24) // SPI 1 Master In Slave +#define AT91C_PIO_PA25 ((unsigned int) 1 << 25) // Pin Controlled by PA25 +#define AT91C_PA25_RK ((unsigned int) AT91C_PIO_PA25) // SSC Receive Clock +#define AT91C_PA25_SPI1_NPCS1 ((unsigned int) AT91C_PIO_PA25) // SPI 1 Peripheral Chip Select 1 +#define AT91C_PIO_PA26 ((unsigned int) 1 << 26) // Pin Controlled by PA26 +#define AT91C_PA26_RF ((unsigned int) AT91C_PIO_PA26) // SSC Receive Frame Sync +#define AT91C_PA26_SPI1_NPCS2 ((unsigned int) AT91C_PIO_PA26) // SPI 1 Peripheral Chip Select 2 +#define AT91C_PIO_PA27 ((unsigned int) 1 << 27) // Pin Controlled by PA27 +#define AT91C_PA27_DRXD ((unsigned int) AT91C_PIO_PA27) // DBGU Debug Receive Data +#define AT91C_PA27_PCK3 ((unsigned int) AT91C_PIO_PA27) // PMC Programmable Clock Output 3 +#define AT91C_PIO_PA28 ((unsigned int) 1 << 28) // Pin Controlled by PA28 +#define AT91C_PA28_DTXD ((unsigned int) AT91C_PIO_PA28) // DBGU Debug Transmit Data +#define AT91C_PIO_PA29 ((unsigned int) 1 << 29) // Pin Controlled by PA29 +#define AT91C_PA29_FIQ ((unsigned int) AT91C_PIO_PA29) // AIC Fast Interrupt Input +#define AT91C_PA29_SPI1_NPCS3 ((unsigned int) AT91C_PIO_PA29) // SPI 1 Peripheral Chip Select 3 +#define AT91C_PIO_PA3 ((unsigned int) 1 << 3) // Pin Controlled by PA3 +#define AT91C_PA3_RTS0 ((unsigned int) AT91C_PIO_PA3) // USART 0 Ready To Send +#define AT91C_PA3_SPI1_NPCS2 ((unsigned int) AT91C_PIO_PA3) // SPI 1 Peripheral Chip Select 2 +#define AT91C_PIO_PA30 ((unsigned int) 1 << 30) // Pin Controlled by PA30 +#define AT91C_PA30_IRQ0 ((unsigned int) AT91C_PIO_PA30) // External Interrupt 0 +#define AT91C_PA30_PCK2 ((unsigned int) AT91C_PIO_PA30) // PMC Programmable Clock Output 2 +#define AT91C_PIO_PA4 ((unsigned int) 1 << 4) // Pin Controlled by PA4 +#define AT91C_PA4_CTS0 ((unsigned int) AT91C_PIO_PA4) // USART 0 Clear To Send +#define AT91C_PA4_SPI1_NPCS3 ((unsigned int) AT91C_PIO_PA4) // SPI 1 Peripheral Chip Select 3 +#define AT91C_PIO_PA5 ((unsigned int) 1 << 5) // Pin Controlled by PA5 +#define AT91C_PA5_RXD1 ((unsigned int) AT91C_PIO_PA5) // USART 1 Receive Data +#define AT91C_PIO_PA6 ((unsigned int) 1 << 6) // Pin Controlled by PA6 +#define AT91C_PA6_TXD1 ((unsigned int) AT91C_PIO_PA6) // USART 1 Transmit Data +#define AT91C_PIO_PA7 ((unsigned int) 1 << 7) // Pin Controlled by PA7 +#define AT91C_PA7_SCK1 ((unsigned int) AT91C_PIO_PA7) // USART 1 Serial Clock +#define AT91C_PA7_SPI0_NPCS1 ((unsigned int) AT91C_PIO_PA7) // SPI 0 Peripheral Chip Select 1 +#define AT91C_PIO_PA8 ((unsigned int) 1 << 8) // Pin Controlled by PA8 +#define AT91C_PA8_RTS1 ((unsigned int) AT91C_PIO_PA8) // USART 1 Ready To Send +#define AT91C_PA8_SPI0_NPCS2 ((unsigned int) AT91C_PIO_PA8) // SPI 0 Peripheral Chip Select 2 +#define AT91C_PIO_PA9 ((unsigned int) 1 << 9) // Pin Controlled by PA9 +#define AT91C_PA9_CTS1 ((unsigned int) AT91C_PIO_PA9) // USART 1 Clear To Send +#define AT91C_PA9_SPI0_NPCS3 ((unsigned int) AT91C_PIO_PA9) // SPI 0 Peripheral Chip Select 3 +#define AT91C_PIO_PB0 ((unsigned int) 1 << 0) // Pin Controlled by PB0 +#define AT91C_PB0_ETXCK_EREFCK ((unsigned int) AT91C_PIO_PB0) // Ethernet MAC Transmit Clock/Reference Clock +#define AT91C_PB0_PCK0 ((unsigned int) AT91C_PIO_PB0) // PMC Programmable Clock Output 0 +#define AT91C_PIO_PB1 ((unsigned int) 1 << 1) // Pin Controlled by PB1 +#define AT91C_PB1_ETXEN ((unsigned int) AT91C_PIO_PB1) // Ethernet MAC Transmit Enable +#define AT91C_PIO_PB10 ((unsigned int) 1 << 10) // Pin Controlled by PB10 +#define AT91C_PB10_ETX2 ((unsigned int) AT91C_PIO_PB10) // Ethernet MAC Transmit Data 2 +#define AT91C_PB10_SPI1_NPCS1 ((unsigned int) AT91C_PIO_PB10) // SPI 1 Peripheral Chip Select 1 +#define AT91C_PIO_PB11 ((unsigned int) 1 << 11) // Pin Controlled by PB11 +#define AT91C_PB11_ETX3 ((unsigned int) AT91C_PIO_PB11) // Ethernet MAC Transmit Data 3 +#define AT91C_PB11_SPI1_NPCS2 ((unsigned int) AT91C_PIO_PB11) // SPI 1 Peripheral Chip Select 2 +#define AT91C_PIO_PB12 ((unsigned int) 1 << 12) // Pin Controlled by PB12 +#define AT91C_PB12_ETXER ((unsigned int) AT91C_PIO_PB12) // Ethernet MAC Transmikt Coding Error +#define AT91C_PB12_TCLK0 ((unsigned int) AT91C_PIO_PB12) // Timer Counter 0 external clock input +#define AT91C_PIO_PB13 ((unsigned int) 1 << 13) // Pin Controlled by PB13 +#define AT91C_PB13_ERX2 ((unsigned int) AT91C_PIO_PB13) // Ethernet MAC Receive Data 2 +#define AT91C_PB13_SPI0_NPCS1 ((unsigned int) AT91C_PIO_PB13) // SPI 0 Peripheral Chip Select 1 +#define AT91C_PIO_PB14 ((unsigned int) 1 << 14) // Pin Controlled by PB14 +#define AT91C_PB14_ERX3 ((unsigned int) AT91C_PIO_PB14) // Ethernet MAC Receive Data 3 +#define AT91C_PB14_SPI0_NPCS2 ((unsigned int) AT91C_PIO_PB14) // SPI 0 Peripheral Chip Select 2 +#define AT91C_PIO_PB15 ((unsigned int) 1 << 15) // Pin Controlled by PB15 +#define AT91C_PB15_ERXDV_ECRSDV ((unsigned int) AT91C_PIO_PB15) // Ethernet MAC Receive Data Valid +#define AT91C_PIO_PB16 ((unsigned int) 1 << 16) // Pin Controlled by PB16 +#define AT91C_PB16_ECOL ((unsigned int) AT91C_PIO_PB16) // Ethernet MAC Collision Detected +#define AT91C_PB16_SPI1_NPCS3 ((unsigned int) AT91C_PIO_PB16) // SPI 1 Peripheral Chip Select 3 +#define AT91C_PIO_PB17 ((unsigned int) 1 << 17) // Pin Controlled by PB17 +#define AT91C_PB17_ERXCK ((unsigned int) AT91C_PIO_PB17) // Ethernet MAC Receive Clock +#define AT91C_PB17_SPI0_NPCS3 ((unsigned int) AT91C_PIO_PB17) // SPI 0 Peripheral Chip Select 3 +#define AT91C_PIO_PB18 ((unsigned int) 1 << 18) // Pin Controlled by PB18 +#define AT91C_PB18_EF100 ((unsigned int) AT91C_PIO_PB18) // Ethernet MAC Force 100 Mbits/sec +#define AT91C_PB18_ADTRG ((unsigned int) AT91C_PIO_PB18) // ADC External Trigger +#define AT91C_PIO_PB19 ((unsigned int) 1 << 19) // Pin Controlled by PB19 +#define AT91C_PB19_PWM0 ((unsigned int) AT91C_PIO_PB19) // PWM Channel 0 +#define AT91C_PB19_TCLK1 ((unsigned int) AT91C_PIO_PB19) // Timer Counter 1 external clock input +#define AT91C_PIO_PB2 ((unsigned int) 1 << 2) // Pin Controlled by PB2 +#define AT91C_PB2_ETX0 ((unsigned int) AT91C_PIO_PB2) // Ethernet MAC Transmit Data 0 +#define AT91C_PIO_PB20 ((unsigned int) 1 << 20) // Pin Controlled by PB20 +#define AT91C_PB20_PWM1 ((unsigned int) AT91C_PIO_PB20) // PWM Channel 1 +#define AT91C_PB20_PCK0 ((unsigned int) AT91C_PIO_PB20) // PMC Programmable Clock Output 0 +#define AT91C_PIO_PB21 ((unsigned int) 1 << 21) // Pin Controlled by PB21 +#define AT91C_PB21_PWM2 ((unsigned int) AT91C_PIO_PB21) // PWM Channel 2 +#define AT91C_PB21_PCK1 ((unsigned int) AT91C_PIO_PB21) // PMC Programmable Clock Output 1 +#define AT91C_PIO_PB22 ((unsigned int) 1 << 22) // Pin Controlled by PB22 +#define AT91C_PB22_PWM3 ((unsigned int) AT91C_PIO_PB22) // PWM Channel 3 +#define AT91C_PB22_PCK2 ((unsigned int) AT91C_PIO_PB22) // PMC Programmable Clock Output 2 +#define AT91C_PIO_PB23 ((unsigned int) 1 << 23) // Pin Controlled by PB23 +#define AT91C_PB23_TIOA0 ((unsigned int) AT91C_PIO_PB23) // Timer Counter 0 Multipurpose Timer I/O Pin A +#define AT91C_PB23_DCD1 ((unsigned int) AT91C_PIO_PB23) // USART 1 Data Carrier Detect +#define AT91C_PIO_PB24 ((unsigned int) 1 << 24) // Pin Controlled by PB24 +#define AT91C_PB24_TIOB0 ((unsigned int) AT91C_PIO_PB24) // Timer Counter 0 Multipurpose Timer I/O Pin B +#define AT91C_PB24_DSR1 ((unsigned int) AT91C_PIO_PB24) // USART 1 Data Set ready +#define AT91C_PIO_PB25 ((unsigned int) 1 << 25) // Pin Controlled by PB25 +#define AT91C_PB25_TIOA1 ((unsigned int) AT91C_PIO_PB25) // Timer Counter 1 Multipurpose Timer I/O Pin A +#define AT91C_PB25_DTR1 ((unsigned int) AT91C_PIO_PB25) // USART 1 Data Terminal ready +#define AT91C_PIO_PB26 ((unsigned int) 1 << 26) // Pin Controlled by PB26 +#define AT91C_PB26_TIOB1 ((unsigned int) AT91C_PIO_PB26) // Timer Counter 1 Multipurpose Timer I/O Pin B +#define AT91C_PB26_RI1 ((unsigned int) AT91C_PIO_PB26) // USART 1 Ring Indicator +#define AT91C_PIO_PB27 ((unsigned int) 1 << 27) // Pin Controlled by PB27 +#define AT91C_PB27_TIOA2 ((unsigned int) AT91C_PIO_PB27) // Timer Counter 2 Multipurpose Timer I/O Pin A +#define AT91C_PB27_PWM0 ((unsigned int) AT91C_PIO_PB27) // PWM Channel 0 +#define AT91C_PIO_PB28 ((unsigned int) 1 << 28) // Pin Controlled by PB28 +#define AT91C_PB28_TIOB2 ((unsigned int) AT91C_PIO_PB28) // Timer Counter 2 Multipurpose Timer I/O Pin B +#define AT91C_PB28_PWM1 ((unsigned int) AT91C_PIO_PB28) // PWM Channel 1 +#define AT91C_PIO_PB29 ((unsigned int) 1 << 29) // Pin Controlled by PB29 +#define AT91C_PB29_PCK1 ((unsigned int) AT91C_PIO_PB29) // PMC Programmable Clock Output 1 +#define AT91C_PB29_PWM2 ((unsigned int) AT91C_PIO_PB29) // PWM Channel 2 +#define AT91C_PIO_PB3 ((unsigned int) 1 << 3) // Pin Controlled by PB3 +#define AT91C_PB3_ETX1 ((unsigned int) AT91C_PIO_PB3) // Ethernet MAC Transmit Data 1 +#define AT91C_PIO_PB30 ((unsigned int) 1 << 30) // Pin Controlled by PB30 +#define AT91C_PB30_PCK2 ((unsigned int) AT91C_PIO_PB30) // PMC Programmable Clock Output 2 +#define AT91C_PB30_PWM3 ((unsigned int) AT91C_PIO_PB30) // PWM Channel 3 +#define AT91C_PIO_PB4 ((unsigned int) 1 << 4) // Pin Controlled by PB4 +#define AT91C_PB4_ECRS ((unsigned int) AT91C_PIO_PB4) // Ethernet MAC Carrier Sense/Carrier Sense and Data Valid +#define AT91C_PIO_PB5 ((unsigned int) 1 << 5) // Pin Controlled by PB5 +#define AT91C_PB5_ERX0 ((unsigned int) AT91C_PIO_PB5) // Ethernet MAC Receive Data 0 +#define AT91C_PIO_PB6 ((unsigned int) 1 << 6) // Pin Controlled by PB6 +#define AT91C_PB6_ERX1 ((unsigned int) AT91C_PIO_PB6) // Ethernet MAC Receive Data 1 +#define AT91C_PIO_PB7 ((unsigned int) 1 << 7) // Pin Controlled by PB7 +#define AT91C_PB7_ERXER ((unsigned int) AT91C_PIO_PB7) // Ethernet MAC Receive Error +#define AT91C_PIO_PB8 ((unsigned int) 1 << 8) // Pin Controlled by PB8 +#define AT91C_PB8_EMDC ((unsigned int) AT91C_PIO_PB8) // Ethernet MAC Management Data Clock +#define AT91C_PIO_PB9 ((unsigned int) 1 << 9) // Pin Controlled by PB9 +#define AT91C_PB9_EMDIO ((unsigned int) AT91C_PIO_PB9) // Ethernet MAC Management Data Input/Output + +// ***************************************************************************** +// PERIPHERAL ID DEFINITIONS FOR AT91SAM7X256 +// ***************************************************************************** +#define AT91C_ID_FIQ ((unsigned int) 0) // Advanced Interrupt Controller (FIQ) +#define AT91C_ID_SYS ((unsigned int) 1) // System Peripheral +#define AT91C_ID_PIOA ((unsigned int) 2) // Parallel IO Controller A +#define AT91C_ID_PIOB ((unsigned int) 3) // Parallel IO Controller B +#define AT91C_ID_SPI0 ((unsigned int) 4) // Serial Peripheral Interface 0 +#define AT91C_ID_SPI1 ((unsigned int) 5) // Serial Peripheral Interface 1 +#define AT91C_ID_US0 ((unsigned int) 6) // USART 0 +#define AT91C_ID_US1 ((unsigned int) 7) // USART 1 +#define AT91C_ID_SSC ((unsigned int) 8) // Serial Synchronous Controller +#define AT91C_ID_TWI ((unsigned int) 9) // Two-Wire Interface +#define AT91C_ID_PWMC ((unsigned int) 10) // PWM Controller +#define AT91C_ID_UDP ((unsigned int) 11) // USB Device Port +#define AT91C_ID_TC0 ((unsigned int) 12) // Timer Counter 0 +#define AT91C_ID_TC1 ((unsigned int) 13) // Timer Counter 1 +#define AT91C_ID_TC2 ((unsigned int) 14) // Timer Counter 2 +#define AT91C_ID_CAN ((unsigned int) 15) // Control Area Network Controller +#define AT91C_ID_EMAC ((unsigned int) 16) // Ethernet MAC +#define AT91C_ID_ADC ((unsigned int) 17) // Analog-to-Digital Converter +#define AT91C_ID_18_Reserved ((unsigned int) 18) // Reserved +#define AT91C_ID_19_Reserved ((unsigned int) 19) // Reserved +#define AT91C_ID_20_Reserved ((unsigned int) 20) // Reserved +#define AT91C_ID_21_Reserved ((unsigned int) 21) // Reserved +#define AT91C_ID_22_Reserved ((unsigned int) 22) // Reserved +#define AT91C_ID_23_Reserved ((unsigned int) 23) // Reserved +#define AT91C_ID_24_Reserved ((unsigned int) 24) // Reserved +#define AT91C_ID_25_Reserved ((unsigned int) 25) // Reserved +#define AT91C_ID_26_Reserved ((unsigned int) 26) // Reserved +#define AT91C_ID_27_Reserved ((unsigned int) 27) // Reserved +#define AT91C_ID_28_Reserved ((unsigned int) 28) // Reserved +#define AT91C_ID_29_Reserved ((unsigned int) 29) // Reserved +#define AT91C_ID_IRQ0 ((unsigned int) 30) // Advanced Interrupt Controller (IRQ0) +#define AT91C_ID_IRQ1 ((unsigned int) 31) // Advanced Interrupt Controller (IRQ1) +#define AT91C_ALL_INT ((unsigned int) 0xC003FFFF) // ALL VALID INTERRUPTS + +// ***************************************************************************** +// BASE ADDRESS DEFINITIONS FOR AT91SAM7X256 +// ***************************************************************************** + +#ifdef TEST + +extern AT91S_AIC AicPeripheral; +extern AT91S_PIO PioAPeripheral; +extern AT91S_PIO PioBPeripheral; +extern AT91S_PMC PmcPeripheral; +extern AT91S_USART Usart0Peripheral; +extern AT91S_TC TimerCounter0Peripheral; +extern AT91S_ADC AdcPeripheral; + +#define AIC_ADDR &AicPeripheral +#define PIOA_ADDR &PioAPeripheral +#define PIOB_ADDR &PioBPeripheral +#define PMC_ADDR &PmcPeripheral +#define US0_ADDR &Usart0Peripheral +#define TC0_ADDR &TimerCounter0Peripheral +#define ADC_ADDR &AdcPeripheral + +#else + +#define AIC_ADDR 0xFFFFF000 +#define PIOA_ADDR 0xFFFFF400 +#define PIOB_ADDR 0xFFFFF600 +#define PMC_ADDR 0xFFFFFC00 +#define US0_ADDR 0xFFFC0000 +#define TC0_ADDR 0xFFFA0000 +#define ADC_ADDR 0xFFFD8000 + +#endif // TEST + +#define AT91C_BASE_SYS ((AT91PS_SYS) 0xFFFFF000) // (SYS) Base Address +#define AT91C_BASE_AIC ((AT91PS_AIC) AIC_ADDR) // (AIC) Base Address +#define AT91C_BASE_PDC_DBGU ((AT91PS_PDC) 0xFFFFF300) // (PDC_DBGU) Base Address +#define AT91C_BASE_DBGU ((AT91PS_DBGU) 0xFFFFF200) // (DBGU) Base Address +#define AT91C_BASE_PIOA ((AT91PS_PIO) PIOA_ADDR) // (PIOA) Base Address +#define AT91C_BASE_PIOB ((AT91PS_PIO) PIOB_ADDR) // (PIOB) Base Address +#define AT91C_BASE_PMC ((AT91PS_PMC) PMC_ADDR) // (PMC) Base Address +#define AT91C_BASE_CKGR ((AT91PS_CKGR) 0xFFFFFC20) // (CKGR) Base Address +#define AT91C_BASE_RSTC ((AT91PS_RSTC) 0xFFFFFD00) // (RSTC) Base Address +#define AT91C_BASE_RTTC ((AT91PS_RTTC) 0xFFFFFD20) // (RTTC) Base Address +#define AT91C_BASE_PITC ((AT91PS_PITC) 0xFFFFFD30) // (PITC) Base Address +#define AT91C_BASE_WDTC ((AT91PS_WDTC) 0xFFFFFD40) // (WDTC) Base Address +#define AT91C_BASE_VREG ((AT91PS_VREG) 0xFFFFFD60) // (VREG) Base Address +#define AT91C_BASE_MC ((AT91PS_MC) 0xFFFFFF00) // (MC) Base Address +#define AT91C_BASE_PDC_SPI1 ((AT91PS_PDC) 0xFFFE4100) // (PDC_SPI1) Base Address +#define AT91C_BASE_SPI1 ((AT91PS_SPI) 0xFFFE4000) // (SPI1) Base Address +#define AT91C_BASE_PDC_SPI0 ((AT91PS_PDC) 0xFFFE0100) // (PDC_SPI0) Base Address +#define AT91C_BASE_SPI0 ((AT91PS_SPI) 0xFFFE0000) // (SPI0) Base Address +#define AT91C_BASE_PDC_US1 ((AT91PS_PDC) 0xFFFC4100) // (PDC_US1) Base Address +#define AT91C_BASE_US1 ((AT91PS_USART) 0xFFFC4000) // (US1) Base Address +#define AT91C_BASE_PDC_US0 ((AT91PS_PDC) 0xFFFC0100) // (PDC_US0) Base Address +#define AT91C_BASE_US0 ((AT91PS_USART) US0_ADDR) // (US0) Base Address +#define AT91C_BASE_PDC_SSC ((AT91PS_PDC) 0xFFFD4100) // (PDC_SSC) Base Address +#define AT91C_BASE_SSC ((AT91PS_SSC) 0xFFFD4000) // (SSC) Base Address +#define AT91C_BASE_TWI ((AT91PS_TWI) 0xFFFB8000) // (TWI) Base Address +#define AT91C_BASE_PWMC_CH3 ((AT91PS_PWMC_CH) 0xFFFCC260) // (PWMC_CH3) Base Address +#define AT91C_BASE_PWMC_CH2 ((AT91PS_PWMC_CH) 0xFFFCC240) // (PWMC_CH2) Base Address +#define AT91C_BASE_PWMC_CH1 ((AT91PS_PWMC_CH) 0xFFFCC220) // (PWMC_CH1) Base Address +#define AT91C_BASE_PWMC_CH0 ((AT91PS_PWMC_CH) 0xFFFCC200) // (PWMC_CH0) Base Address +#define AT91C_BASE_PWMC ((AT91PS_PWMC) 0xFFFCC000) // (PWMC) Base Address +#define AT91C_BASE_UDP ((AT91PS_UDP) 0xFFFB0000) // (UDP) Base Address +#define AT91C_BASE_TC0 ((AT91PS_TC) TC0_ADDR) // (TC0) Base Address +#define AT91C_BASE_TC1 ((AT91PS_TC) 0xFFFA0040) // (TC1) Base Address +#define AT91C_BASE_TC2 ((AT91PS_TC) 0xFFFA0080) // (TC2) Base Address +#define AT91C_BASE_TCB ((AT91PS_TCB) 0xFFFA0000) // (TCB) Base Address +#define AT91C_BASE_CAN_MB0 ((AT91PS_CAN_MB) 0xFFFD0200) // (CAN_MB0) Base Address +#define AT91C_BASE_CAN_MB1 ((AT91PS_CAN_MB) 0xFFFD0220) // (CAN_MB1) Base Address +#define AT91C_BASE_CAN_MB2 ((AT91PS_CAN_MB) 0xFFFD0240) // (CAN_MB2) Base Address +#define AT91C_BASE_CAN_MB3 ((AT91PS_CAN_MB) 0xFFFD0260) // (CAN_MB3) Base Address +#define AT91C_BASE_CAN_MB4 ((AT91PS_CAN_MB) 0xFFFD0280) // (CAN_MB4) Base Address +#define AT91C_BASE_CAN_MB5 ((AT91PS_CAN_MB) 0xFFFD02A0) // (CAN_MB5) Base Address +#define AT91C_BASE_CAN_MB6 ((AT91PS_CAN_MB) 0xFFFD02C0) // (CAN_MB6) Base Address +#define AT91C_BASE_CAN_MB7 ((AT91PS_CAN_MB) 0xFFFD02E0) // (CAN_MB7) Base Address +#define AT91C_BASE_CAN ((AT91PS_CAN) 0xFFFD0000) // (CAN) Base Address +#define AT91C_BASE_ADC ((AT91PS_ADC) ADC_ADDR) // (ADC) Base Address +#define AT91C_BASE_EMAC ((AT91PS_EMAC) 0xFFFDC000) // (EMAC) Base Address +#define AT91C_BASE_PDC_ADC ((AT91PS_PDC) 0xFFFD8100) // (PDC_ADC) Base Address + +// ***************************************************************************** +// MEMORY MAPPING DEFINITIONS FOR AT91SAM7X256 +// ***************************************************************************** +// ISRAM +#define AT91C_ISRAM ((char *) 0x00200000) // Internal SRAM base address +#define AT91C_ISRAM_SIZE ((unsigned int) 0x00010000) // Internal SRAM size in byte (64 Kbytes) +// IFLASH +#define AT91C_IFLASH ((char *) 0x00100000) // Internal FLASH base address +#define AT91C_IFLASH_SIZE ((unsigned int) 0x00040000) // Internal FLASH size in byte (256 Kbytes) +#define AT91C_IFLASH_PAGE_SIZE ((unsigned int) 256) // Internal FLASH Page Size: 256 bytes +#define AT91C_IFLASH_LOCK_REGION_SIZE ((unsigned int) 16384) // Internal FLASH Lock Region Size: 16 Kbytes +#define AT91C_IFLASH_NB_OF_PAGES ((unsigned int) 1024) // Internal FLASH Number of Pages: 1024 bytes +#define AT91C_IFLASH_NB_OF_LOCK_BITS ((unsigned int) 16) // Internal FLASH Number of Lock Bits: 16 bytes + +#endif diff --git a/examples/temp_sensor/src/AdcConductor.c b/examples/temp_sensor/src/AdcConductor.c index 0fbf0cd..28d9d20 100644 --- a/examples/temp_sensor/src/AdcConductor.c +++ b/examples/temp_sensor/src/AdcConductor.c @@ -1,42 +1,42 @@ -#include "Types.h" -#include "AdcConductor.h" -#include "AdcModel.h" -#include "AdcHardware.h" - -void AdcConductor_Init(void) -{ - AdcHardware_Init(); -} - -void AdcConductor_Run(void) -{ - if (AdcModel_DoGetSample() && AdcHardware_GetSampleComplete()) - { - AdcModel_ProcessInput(AdcHardware_GetSample()); - AdcHardware_StartConversion(); - } -} - -bool AdcConductor_JustHereToTest(void) -{ - EXAMPLE_STRUCT_T ExampleStruct; - ExampleStruct.x = 5; - ExampleStruct.y = 7; - - return AdcModel_DoNothingExceptTestASpecialType(ExampleStruct); -} - -bool AdcConductor_AlsoHereToTest(void) -{ - EXAMPLE_STRUCT_T example = AdcModel_DoNothingExceptReturnASpecialType(); - - return ((example.x == 99) && (example.y == 1)); -} - -bool AdcConductor_YetAnotherTest(void) -{ - uint32 example = 3; - - return AdModel_DoNothingExceptTestPointers(&example); -} - +#include "Types.h" +#include "AdcConductor.h" +#include "AdcModel.h" +#include "AdcHardware.h" + +void AdcConductor_Init(void) +{ + AdcHardware_Init(); +} + +void AdcConductor_Run(void) +{ + if (AdcModel_DoGetSample() && AdcHardware_GetSampleComplete()) + { + AdcModel_ProcessInput(AdcHardware_GetSample()); + AdcHardware_StartConversion(); + } +} + +bool AdcConductor_JustHereToTest(void) +{ + EXAMPLE_STRUCT_T ExampleStruct; + ExampleStruct.x = 5; + ExampleStruct.y = 7; + + return AdcModel_DoNothingExceptTestASpecialType(ExampleStruct); +} + +bool AdcConductor_AlsoHereToTest(void) +{ + EXAMPLE_STRUCT_T example = AdcModel_DoNothingExceptReturnASpecialType(); + + return ((example.x == 99) && (example.y == 1)); +} + +bool AdcConductor_YetAnotherTest(void) +{ + uint32 example = 3; + + return AdModel_DoNothingExceptTestPointers(&example); +} + diff --git a/examples/temp_sensor/src/AdcConductor.h b/examples/temp_sensor/src/AdcConductor.h index 99f0717..4280da3 100644 --- a/examples/temp_sensor/src/AdcConductor.h +++ b/examples/temp_sensor/src/AdcConductor.h @@ -1,11 +1,11 @@ -#ifndef _ADCCONDUCTOR_H -#define _ADCCONDUCTOR_H - -void AdcConductor_Init(void); -void AdcConductor_Run(void); - -bool AdcConductor_JustHereToTest(void); -bool AdcConductor_AlsoHereToTest(void); -bool AdcConductor_YetAnotherTest(void); - -#endif // _ADCCONDUCTOR_H +#ifndef _ADCCONDUCTOR_H +#define _ADCCONDUCTOR_H + +void AdcConductor_Init(void); +void AdcConductor_Run(void); + +bool AdcConductor_JustHereToTest(void); +bool AdcConductor_AlsoHereToTest(void); +bool AdcConductor_YetAnotherTest(void); + +#endif // _ADCCONDUCTOR_H diff --git a/examples/temp_sensor/src/AdcHardware.c b/examples/temp_sensor/src/AdcHardware.c index 083f1f9..9807641 100644 --- a/examples/temp_sensor/src/AdcHardware.c +++ b/examples/temp_sensor/src/AdcHardware.c @@ -1,27 +1,27 @@ -#include "Types.h" -#include "AdcHardware.h" -#include "AdcHardwareConfigurator.h" -#include "AdcTemperatureSensor.h" - -void AdcHardware_Init(void) -{ - Adc_Reset(); - Adc_ConfigureMode(); - Adc_EnableTemperatureChannel(); - Adc_StartTemperatureSensorConversion(); -} - -void AdcHardware_StartConversion(void) -{ - Adc_StartTemperatureSensorConversion(); -} - -bool AdcHardware_GetSampleComplete(void) -{ - return Adc_TemperatureSensorSampleReady(); -} - -uint16 AdcHardware_GetSample(void) -{ - return Adc_ReadTemperatureSensor(); -} +#include "Types.h" +#include "AdcHardware.h" +#include "AdcHardwareConfigurator.h" +#include "AdcTemperatureSensor.h" + +void AdcHardware_Init(void) +{ + Adc_Reset(); + Adc_ConfigureMode(); + Adc_EnableTemperatureChannel(); + Adc_StartTemperatureSensorConversion(); +} + +void AdcHardware_StartConversion(void) +{ + Adc_StartTemperatureSensorConversion(); +} + +bool AdcHardware_GetSampleComplete(void) +{ + return Adc_TemperatureSensorSampleReady(); +} + +uint16 AdcHardware_GetSample(void) +{ + return Adc_ReadTemperatureSensor(); +} diff --git a/examples/temp_sensor/src/AdcHardware.h b/examples/temp_sensor/src/AdcHardware.h index d2cb2bd..3209a4c 100644 --- a/examples/temp_sensor/src/AdcHardware.h +++ b/examples/temp_sensor/src/AdcHardware.h @@ -1,9 +1,9 @@ -#ifndef _ADCHARDWARE_H -#define _ADCHARDWARE_H - -void AdcHardware_Init(void); -void AdcHardware_StartConversion(void); -bool AdcHardware_GetSampleComplete(void); -uint16 AdcHardware_GetSample(void); - -#endif // _ADCHARDWARE_H +#ifndef _ADCHARDWARE_H +#define _ADCHARDWARE_H + +void AdcHardware_Init(void); +void AdcHardware_StartConversion(void); +bool AdcHardware_GetSampleComplete(void); +uint16 AdcHardware_GetSample(void); + +#endif // _ADCHARDWARE_H diff --git a/examples/temp_sensor/src/AdcHardwareConfigurator.c b/examples/temp_sensor/src/AdcHardwareConfigurator.c index ff53dd5..f7e08a2 100644 --- a/examples/temp_sensor/src/AdcHardwareConfigurator.c +++ b/examples/temp_sensor/src/AdcHardwareConfigurator.c @@ -1,18 +1,18 @@ -#include "Types.h" -#include "AdcHardwareConfigurator.h" -#include "ModelConfig.h" - -void Adc_Reset(void) -{ - AT91C_BASE_ADC->ADC_CR = AT91C_ADC_SWRST; -} - -void Adc_ConfigureMode(void) -{ - AT91C_BASE_ADC->ADC_MR = (((uint32)11) << 8) | (((uint32)4) << 16); -} - -void Adc_EnableTemperatureChannel(void) -{ - AT91C_BASE_ADC->ADC_CHER = 0x10; -} +#include "Types.h" +#include "AdcHardwareConfigurator.h" +#include "ModelConfig.h" + +void Adc_Reset(void) +{ + AT91C_BASE_ADC->ADC_CR = AT91C_ADC_SWRST; +} + +void Adc_ConfigureMode(void) +{ + AT91C_BASE_ADC->ADC_MR = (((uint32)11) << 8) | (((uint32)4) << 16); +} + +void Adc_EnableTemperatureChannel(void) +{ + AT91C_BASE_ADC->ADC_CHER = 0x10; +} diff --git a/examples/temp_sensor/src/AdcHardwareConfigurator.h b/examples/temp_sensor/src/AdcHardwareConfigurator.h index d062e73..78b9e9f 100644 --- a/examples/temp_sensor/src/AdcHardwareConfigurator.h +++ b/examples/temp_sensor/src/AdcHardwareConfigurator.h @@ -1,10 +1,10 @@ -#ifndef _ADCHARDWARECONFIGURATOR_H -#define _ADCHARDWARECONFIGURATOR_H - -#include "Types.h" - -void Adc_Reset(void); -void Adc_ConfigureMode(void); -void Adc_EnableTemperatureChannel(void); - -#endif // _ADCHARDWARECONFIGURATOR_H +#ifndef _ADCHARDWARECONFIGURATOR_H +#define _ADCHARDWARECONFIGURATOR_H + +#include "Types.h" + +void Adc_Reset(void); +void Adc_ConfigureMode(void); +void Adc_EnableTemperatureChannel(void); + +#endif // _ADCHARDWARECONFIGURATOR_H diff --git a/examples/temp_sensor/src/AdcModel.c b/examples/temp_sensor/src/AdcModel.c index b5b47f3..ad9111d 100644 --- a/examples/temp_sensor/src/AdcModel.c +++ b/examples/temp_sensor/src/AdcModel.c @@ -1,33 +1,33 @@ -#include "AdcModel.h" -#include "TaskScheduler.h" -#include "TemperatureCalculator.h" -#include "TemperatureFilter.h" - -bool AdcModel_DoGetSample(void) -{ - return TaskScheduler_DoAdc(); -} - -void AdcModel_ProcessInput(uint16 millivolts) -{ - TemperatureFilter_ProcessInput(TemperatureCalculator_Calculate(millivolts)); -} - -bool AdcModel_DoNothingExceptTestASpecialType(EXAMPLE_STRUCT_T ExampleStruct) -{ - //This doesn't really do anything. it's only here to make sure I can compare a struct. - return FALSE; -} -bool AdModel_DoNothingExceptTestPointers(uint32* pExample) -{ - //This doesn't really do anything. it's only here to make sure I can compare a pointer value. - return FALSE; -} - -EXAMPLE_STRUCT_T AdcModel_DoNothingExceptReturnASpecialType(void) -{ - EXAMPLE_STRUCT_T example; //again, this just is here to test that I can return a struct - example.x = 99; - example.y = 1; - return example; -} +#include "AdcModel.h" +#include "TaskScheduler.h" +#include "TemperatureCalculator.h" +#include "TemperatureFilter.h" + +bool AdcModel_DoGetSample(void) +{ + return TaskScheduler_DoAdc(); +} + +void AdcModel_ProcessInput(uint16 millivolts) +{ + TemperatureFilter_ProcessInput(TemperatureCalculator_Calculate(millivolts)); +} + +bool AdcModel_DoNothingExceptTestASpecialType(EXAMPLE_STRUCT_T ExampleStruct) +{ + //This doesn't really do anything. it's only here to make sure I can compare a struct. + return FALSE; +} +bool AdModel_DoNothingExceptTestPointers(uint32* pExample) +{ + //This doesn't really do anything. it's only here to make sure I can compare a pointer value. + return FALSE; +} + +EXAMPLE_STRUCT_T AdcModel_DoNothingExceptReturnASpecialType(void) +{ + EXAMPLE_STRUCT_T example; //again, this just is here to test that I can return a struct + example.x = 99; + example.y = 1; + return example; +} diff --git a/examples/temp_sensor/src/AdcModel.h b/examples/temp_sensor/src/AdcModel.h index 61f270b..6b871fd 100644 --- a/examples/temp_sensor/src/AdcModel.h +++ b/examples/temp_sensor/src/AdcModel.h @@ -1,13 +1,13 @@ -#ifndef _ADCMODEL_H -#define _ADCMODEL_H - -#include "Types.h" - -bool AdcModel_DoGetSample(void); -void AdcModel_ProcessInput(uint16 millivolts); - -bool AdcModel_DoNothingExceptTestASpecialType(EXAMPLE_STRUCT_T ExampleStruct); -bool AdModel_DoNothingExceptTestPointers(uint32* pExample); -EXAMPLE_STRUCT_T AdcModel_DoNothingExceptReturnASpecialType(void); - -#endif // _ADCMODEL_H +#ifndef _ADCMODEL_H +#define _ADCMODEL_H + +#include "Types.h" + +bool AdcModel_DoGetSample(void); +void AdcModel_ProcessInput(uint16 millivolts); + +bool AdcModel_DoNothingExceptTestASpecialType(EXAMPLE_STRUCT_T ExampleStruct); +bool AdModel_DoNothingExceptTestPointers(uint32* pExample); +EXAMPLE_STRUCT_T AdcModel_DoNothingExceptReturnASpecialType(void); + +#endif // _ADCMODEL_H diff --git a/examples/temp_sensor/src/AdcTemperatureSensor.c b/examples/temp_sensor/src/AdcTemperatureSensor.c index ae3465c..b2a3f2c 100644 --- a/examples/temp_sensor/src/AdcTemperatureSensor.c +++ b/examples/temp_sensor/src/AdcTemperatureSensor.c @@ -1,51 +1,51 @@ -#include "Types.h" -#include "AdcTemperatureSensor.h" - -static inline uint32 ConvertAdcCountsToPicovolts(uint32 counts); -static inline uint16 ConvertPicovoltsToMillivolts(uint32 picovolts); - -// -// PUBLIC METHODS -// - -void Adc_StartTemperatureSensorConversion(void) -{ - AT91C_BASE_ADC->ADC_CR = AT91C_ADC_START; -} - -bool Adc_TemperatureSensorSampleReady(void) -{ - return ((AT91C_BASE_ADC->ADC_SR & AT91C_ADC_EOC4) == AT91C_ADC_EOC4); -} - -uint16 Adc_ReadTemperatureSensor(void) -{ - uint32 picovolts = ConvertAdcCountsToPicovolts(AT91C_BASE_ADC->ADC_CDR4); - return ConvertPicovoltsToMillivolts(picovolts); -} - -// -// PRIVATE HELPERS -// - -static inline uint32 ConvertAdcCountsToPicovolts(uint32 counts) -{ - // ADC bit weight at 10-bit resolution with 3.0V reference = 2.9296875 mV/LSB - uint32 picovoltsPerAdcCount = 2929688; - - // Shift decimal point by 6 places to preserve accuracy in fixed-point math - return counts * picovoltsPerAdcCount; -} - -static inline uint16 ConvertPicovoltsToMillivolts(uint32 picovolts) -{ - const uint32 halfMillivoltInPicovolts = 500000; - const uint32 picovoltsPerMillivolt = 1000000; - - // Add 0.5 mV to result so that truncation yields properly rounded result - picovolts += halfMillivoltInPicovolts; - - // Divide appropriately to convert to millivolts - return (uint16)(picovolts / picovoltsPerMillivolt); -} - +#include "Types.h" +#include "AdcTemperatureSensor.h" + +static inline uint32 ConvertAdcCountsToPicovolts(uint32 counts); +static inline uint16 ConvertPicovoltsToMillivolts(uint32 picovolts); + +// +// PUBLIC METHODS +// + +void Adc_StartTemperatureSensorConversion(void) +{ + AT91C_BASE_ADC->ADC_CR = AT91C_ADC_START; +} + +bool Adc_TemperatureSensorSampleReady(void) +{ + return ((AT91C_BASE_ADC->ADC_SR & AT91C_ADC_EOC4) == AT91C_ADC_EOC4); +} + +uint16 Adc_ReadTemperatureSensor(void) +{ + uint32 picovolts = ConvertAdcCountsToPicovolts(AT91C_BASE_ADC->ADC_CDR4); + return ConvertPicovoltsToMillivolts(picovolts); +} + +// +// PRIVATE HELPERS +// + +static inline uint32 ConvertAdcCountsToPicovolts(uint32 counts) +{ + // ADC bit weight at 10-bit resolution with 3.0V reference = 2.9296875 mV/LSB + uint32 picovoltsPerAdcCount = 2929688; + + // Shift decimal point by 6 places to preserve accuracy in fixed-point math + return counts * picovoltsPerAdcCount; +} + +static inline uint16 ConvertPicovoltsToMillivolts(uint32 picovolts) +{ + const uint32 halfMillivoltInPicovolts = 500000; + const uint32 picovoltsPerMillivolt = 1000000; + + // Add 0.5 mV to result so that truncation yields properly rounded result + picovolts += halfMillivoltInPicovolts; + + // Divide appropriately to convert to millivolts + return (uint16)(picovolts / picovoltsPerMillivolt); +} + diff --git a/examples/temp_sensor/src/AdcTemperatureSensor.h b/examples/temp_sensor/src/AdcTemperatureSensor.h index 97accaa..bf2cc5b 100644 --- a/examples/temp_sensor/src/AdcTemperatureSensor.h +++ b/examples/temp_sensor/src/AdcTemperatureSensor.h @@ -1,10 +1,10 @@ -#ifndef _ADCTEMPERATURESENSOR_H -#define _ADCTEMPERATURESENSOR_H - -#include "Types.h" - -void Adc_StartTemperatureSensorConversion(void); -bool Adc_TemperatureSensorSampleReady(void); -uint16 Adc_ReadTemperatureSensor(void); - -#endif // _ADCTEMPERATURESENSOR_H +#ifndef _ADCTEMPERATURESENSOR_H +#define _ADCTEMPERATURESENSOR_H + +#include "Types.h" + +void Adc_StartTemperatureSensorConversion(void); +bool Adc_TemperatureSensorSampleReady(void); +uint16 Adc_ReadTemperatureSensor(void); + +#endif // _ADCTEMPERATURESENSOR_H diff --git a/examples/temp_sensor/src/Executor.c b/examples/temp_sensor/src/Executor.c index fd53f27..7e45c3e 100644 --- a/examples/temp_sensor/src/Executor.c +++ b/examples/temp_sensor/src/Executor.c @@ -1,25 +1,25 @@ -#include "Types.h" -#include "Executor.h" -#include "Model.h" -#include "UsartConductor.h" -#include "TimerConductor.h" -#include "AdcConductor.h" -#include "IntrinsicsWrapper.h" - - -void Executor_Init(void) -{ - Model_Init(); - UsartConductor_Init(); - AdcConductor_Init(); - TimerConductor_Init(); - Interrupt_Enable(); -} - -bool Executor_Run(void) -{ - UsartConductor_Run(); - TimerConductor_Run(); - AdcConductor_Run(); - return TRUE; -} +#include "Types.h" +#include "Executor.h" +#include "Model.h" +#include "UsartConductor.h" +#include "TimerConductor.h" +#include "AdcConductor.h" +#include "IntrinsicsWrapper.h" + + +void Executor_Init(void) +{ + Model_Init(); + UsartConductor_Init(); + AdcConductor_Init(); + TimerConductor_Init(); + Interrupt_Enable(); +} + +bool Executor_Run(void) +{ + UsartConductor_Run(); + TimerConductor_Run(); + AdcConductor_Run(); + return TRUE; +} diff --git a/examples/temp_sensor/src/Executor.h b/examples/temp_sensor/src/Executor.h index 5af90ee..51a61a9 100644 --- a/examples/temp_sensor/src/Executor.h +++ b/examples/temp_sensor/src/Executor.h @@ -1,9 +1,9 @@ -#ifndef _EXECUTOR_H -#define _EXECUTOR_H - -#include "Types.h" - -void Executor_Init(void); -bool Executor_Run(void); - -#endif // _EXECUTOR_H +#ifndef _EXECUTOR_H +#define _EXECUTOR_H + +#include "Types.h" + +void Executor_Init(void); +bool Executor_Run(void); + +#endif // _EXECUTOR_H diff --git a/examples/temp_sensor/src/IntrinsicsWrapper.c b/examples/temp_sensor/src/IntrinsicsWrapper.c index 5c6767e..8b082ae 100644 --- a/examples/temp_sensor/src/IntrinsicsWrapper.c +++ b/examples/temp_sensor/src/IntrinsicsWrapper.c @@ -1,18 +1,18 @@ -#include "IntrinsicsWrapper.h" -#ifdef __ICCARM__ -#include -#endif - -void Interrupt_Enable(void) -{ -#ifdef __ICCARM__ - __enable_interrupt(); -#endif -} - -void Interrupt_Disable(void) -{ -#ifdef __ICCARM__ - __disable_interrupt(); -#endif -} +#include "IntrinsicsWrapper.h" +#ifdef __ICCARM__ +#include +#endif + +void Interrupt_Enable(void) +{ +#ifdef __ICCARM__ + __enable_interrupt(); +#endif +} + +void Interrupt_Disable(void) +{ +#ifdef __ICCARM__ + __disable_interrupt(); +#endif +} diff --git a/examples/temp_sensor/src/IntrinsicsWrapper.h b/examples/temp_sensor/src/IntrinsicsWrapper.h index 322de31..9273317 100644 --- a/examples/temp_sensor/src/IntrinsicsWrapper.h +++ b/examples/temp_sensor/src/IntrinsicsWrapper.h @@ -1,7 +1,7 @@ -#ifndef _INTRINSICS_WRAPPER_H -#define _INTRINSICS_WRAPPER_H - -void Interrupt_Enable(void); -void Interrupt_Disable(void); - -#endif // _INTRINSICS_WRAPPER_H +#ifndef _INTRINSICS_WRAPPER_H +#define _INTRINSICS_WRAPPER_H + +void Interrupt_Enable(void); +void Interrupt_Disable(void); + +#endif // _INTRINSICS_WRAPPER_H diff --git a/examples/temp_sensor/src/Main.c b/examples/temp_sensor/src/Main.c index b81a528..a784f47 100644 --- a/examples/temp_sensor/src/Main.c +++ b/examples/temp_sensor/src/Main.c @@ -1,46 +1,46 @@ -#include "Types.h" - -#include "IntrinsicsWrapper.h" -#include "Executor.h" - -#include "Model.h" -#include "TaskScheduler.h" -#include "TemperatureCalculator.h" -#include "TemperatureFilter.h" - -#include "UsartConductor.h" -#include "UsartHardware.h" -#include "UsartConfigurator.h" -#include "UsartPutChar.h" -#include "UsartModel.h" -#include "UsartBaudRateRegisterCalculator.h" -#include "UsartTransmitBufferStatus.h" - -#include "TimerConductor.h" -#include "TimerHardware.h" -#include "TimerConfigurator.h" -#include "TimerInterruptConfigurator.h" -#include "TimerInterruptHandler.h" -#include "TimerModel.h" - -#include "AdcConductor.h" -#include "AdcHardware.h" -#include "AdcHardwareConfigurator.h" -#include "AdcTemperatureSensor.h" -#include "AdcModel.h" - -int AppMain(void) -{ - Executor_Init(); - - while(Executor_Run()); - - return 0; -} - -#ifndef TEST -int main(void) -{ - return AppMain(); -} -#endif // TEST +#include "Types.h" + +#include "IntrinsicsWrapper.h" +#include "Executor.h" + +#include "Model.h" +#include "TaskScheduler.h" +#include "TemperatureCalculator.h" +#include "TemperatureFilter.h" + +#include "UsartConductor.h" +#include "UsartHardware.h" +#include "UsartConfigurator.h" +#include "UsartPutChar.h" +#include "UsartModel.h" +#include "UsartBaudRateRegisterCalculator.h" +#include "UsartTransmitBufferStatus.h" + +#include "TimerConductor.h" +#include "TimerHardware.h" +#include "TimerConfigurator.h" +#include "TimerInterruptConfigurator.h" +#include "TimerInterruptHandler.h" +#include "TimerModel.h" + +#include "AdcConductor.h" +#include "AdcHardware.h" +#include "AdcHardwareConfigurator.h" +#include "AdcTemperatureSensor.h" +#include "AdcModel.h" + +int AppMain(void) +{ + Executor_Init(); + + while(Executor_Run()); + + return 0; +} + +#ifndef TEST +int main(void) +{ + return AppMain(); +} +#endif // TEST diff --git a/examples/temp_sensor/src/Main.h b/examples/temp_sensor/src/Main.h index 9b84875..6cbe5f4 100644 --- a/examples/temp_sensor/src/Main.h +++ b/examples/temp_sensor/src/Main.h @@ -1,7 +1,7 @@ -#ifndef _MAIN_H_ -#define _MAIN_H_ - -int AppMain(void); -int main(void); - -#endif // _MAIN_H_ +#ifndef _MAIN_H_ +#define _MAIN_H_ + +int AppMain(void); +int main(void); + +#endif // _MAIN_H_ diff --git a/examples/temp_sensor/src/Model.c b/examples/temp_sensor/src/Model.c index da990d3..5b34c40 100644 --- a/examples/temp_sensor/src/Model.c +++ b/examples/temp_sensor/src/Model.c @@ -1,10 +1,10 @@ -#include "Model.h" -#include "TaskScheduler.h" -#include "TemperatureFilter.h" - -void Model_Init(void) -{ - TaskScheduler_Init(); - TemperatureFilter_Init(); -} - +#include "Model.h" +#include "TaskScheduler.h" +#include "TemperatureFilter.h" + +void Model_Init(void) +{ + TaskScheduler_Init(); + TemperatureFilter_Init(); +} + diff --git a/examples/temp_sensor/src/Model.h b/examples/temp_sensor/src/Model.h index cccbc78..d130938 100644 --- a/examples/temp_sensor/src/Model.h +++ b/examples/temp_sensor/src/Model.h @@ -1,8 +1,8 @@ -#ifndef _MODEL_H -#define _MODEL_H - -#include "Types.h" - -void Model_Init(void); - -#endif // _MODEL_H +#ifndef _MODEL_H +#define _MODEL_H + +#include "Types.h" + +void Model_Init(void); + +#endif // _MODEL_H diff --git a/examples/temp_sensor/src/ModelConfig.h b/examples/temp_sensor/src/ModelConfig.h index 9e54550..edc8e8d 100644 --- a/examples/temp_sensor/src/ModelConfig.h +++ b/examples/temp_sensor/src/ModelConfig.h @@ -1,7 +1,7 @@ -#ifndef _MODELCONFIG_H -#define _MODELCONFIG_H - -#define MASTER_CLOCK 48054857 // Master Clock -#define USART0_BAUDRATE 115200 // USART Baudrate - -#endif // _MODELCONFIG_H +#ifndef _MODELCONFIG_H +#define _MODELCONFIG_H + +#define MASTER_CLOCK 48054857 // Master Clock +#define USART0_BAUDRATE 115200 // USART Baudrate + +#endif // _MODELCONFIG_H diff --git a/examples/temp_sensor/src/TaskScheduler.c b/examples/temp_sensor/src/TaskScheduler.c index 34e39dc..bcc0e64 100644 --- a/examples/temp_sensor/src/TaskScheduler.c +++ b/examples/temp_sensor/src/TaskScheduler.c @@ -1,72 +1,72 @@ -#include "Types.h" -#include "TaskScheduler.h" - -typedef struct _Task -{ - bool doIt; - uint32 period; - uint32 startTime; -} Task; - -typedef struct _TaskSchedulerInstance -{ - Task usart; - Task adc; -} TaskSchedulerInstance; - -static TaskSchedulerInstance this; - -void TaskScheduler_Init(void) -{ - this.usart.doIt = FALSE; - this.usart.startTime = 0; - - //The correct period - this.usart.period = 1000; - - this.adc.doIt = FALSE; - this.adc.startTime = 0; - this.adc.period = 100; -} - -void TaskScheduler_Update(uint32 time) -{ - if ((time - this.usart.startTime) >= this.usart.period) - { - this.usart.doIt = TRUE; - this.usart.startTime = time - (time % this.usart.period); - } - - if ((time - this.adc.startTime) >= this.adc.period) - { - this.adc.doIt = TRUE; - this.adc.startTime = time - (time % this.adc.period); - } -} - -bool TaskScheduler_DoUsart(void) -{ - bool doIt = FALSE; - - if (this.usart.doIt) - { - doIt = TRUE; - this.usart.doIt = FALSE; - } - - return doIt; -} - -bool TaskScheduler_DoAdc(void) -{ - bool doIt = FALSE; - - if (this.adc.doIt) - { - doIt = TRUE; - this.adc.doIt = FALSE; - } - - return doIt; -} - +#include "Types.h" +#include "TaskScheduler.h" + +typedef struct _Task +{ + bool doIt; + uint32 period; + uint32 startTime; +} Task; + +typedef struct _TaskSchedulerInstance +{ + Task usart; + Task adc; +} TaskSchedulerInstance; + +static TaskSchedulerInstance this; + +void TaskScheduler_Init(void) +{ + this.usart.doIt = FALSE; + this.usart.startTime = 0; + + //The correct period + this.usart.period = 1000; + + this.adc.doIt = FALSE; + this.adc.startTime = 0; + this.adc.period = 100; +} + +void TaskScheduler_Update(uint32 time) +{ + if ((time - this.usart.startTime) >= this.usart.period) + { + this.usart.doIt = TRUE; + this.usart.startTime = time - (time % this.usart.period); + } + + if ((time - this.adc.startTime) >= this.adc.period) + { + this.adc.doIt = TRUE; + this.adc.startTime = time - (time % this.adc.period); + } +} + +bool TaskScheduler_DoUsart(void) +{ + bool doIt = FALSE; + + if (this.usart.doIt) + { + doIt = TRUE; + this.usart.doIt = FALSE; + } + + return doIt; +} + +bool TaskScheduler_DoAdc(void) +{ + bool doIt = FALSE; + + if (this.adc.doIt) + { + doIt = TRUE; + this.adc.doIt = FALSE; + } + + return doIt; +} + diff --git a/examples/temp_sensor/src/TaskScheduler.h b/examples/temp_sensor/src/TaskScheduler.h index 78743b9..cc58342 100644 --- a/examples/temp_sensor/src/TaskScheduler.h +++ b/examples/temp_sensor/src/TaskScheduler.h @@ -1,11 +1,11 @@ -#ifndef _TASKSCHEDULER_H -#define _TASKSCHEDULER_H - -#include "Types.h" - -void TaskScheduler_Init(void); -void TaskScheduler_Update(uint32 time); -bool TaskScheduler_DoUsart(void); -bool TaskScheduler_DoAdc(void); - -#endif // _TASKSCHEDULER_H +#ifndef _TASKSCHEDULER_H +#define _TASKSCHEDULER_H + +#include "Types.h" + +void TaskScheduler_Init(void); +void TaskScheduler_Update(uint32 time); +bool TaskScheduler_DoUsart(void); +bool TaskScheduler_DoAdc(void); + +#endif // _TASKSCHEDULER_H diff --git a/examples/temp_sensor/src/TemperatureCalculator.c b/examples/temp_sensor/src/TemperatureCalculator.c index ff07846..04cec59 100644 --- a/examples/temp_sensor/src/TemperatureCalculator.c +++ b/examples/temp_sensor/src/TemperatureCalculator.c @@ -1,27 +1,27 @@ -#include "Types.h" -#include "TemperatureCalculator.h" -#include - -#ifndef logl -#define logl log -#endif - -float TemperatureCalculator_Calculate(uint16 millivolts) -{ - const double supply_voltage = 3.0; - const double series_resistance = 5000; - const double coefficient_A = 316589.698; - const double coefficient_B = -0.1382009; - double sensor_voltage = ((double)millivolts / 1000); - double resistance; - - if (millivolts == 0) - { - return -INFINITY; - } - - // Series resistor is 5k Ohms; Reference voltage is 3.0V - // R(t) = A * e^(B*t); R is resistance of thermisor; t is temperature in C - resistance = ((supply_voltage * series_resistance) / sensor_voltage) - series_resistance; - return (float)(logl(resistance / coefficient_A) / coefficient_B); -} +#include "Types.h" +#include "TemperatureCalculator.h" +#include + +#ifndef logl +#define logl log +#endif + +float TemperatureCalculator_Calculate(uint16 millivolts) +{ + const double supply_voltage = 3.0; + const double series_resistance = 5000; + const double coefficient_A = 316589.698; + const double coefficient_B = -0.1382009; + double sensor_voltage = ((double)millivolts / 1000); + double resistance; + + if (millivolts == 0) + { + return -INFINITY; + } + + // Series resistor is 5k Ohms; Reference voltage is 3.0V + // R(t) = A * e^(B*t); R is resistance of thermisor; t is temperature in C + resistance = ((supply_voltage * series_resistance) / sensor_voltage) - series_resistance; + return (float)(logl(resistance / coefficient_A) / coefficient_B); +} diff --git a/examples/temp_sensor/src/TemperatureCalculator.h b/examples/temp_sensor/src/TemperatureCalculator.h index 6b56d11..b606c2d 100644 --- a/examples/temp_sensor/src/TemperatureCalculator.h +++ b/examples/temp_sensor/src/TemperatureCalculator.h @@ -1,6 +1,6 @@ -#ifndef _TEMPERATURECALCULATOR_H -#define _TEMPERATURECALCULATOR_H - -float TemperatureCalculator_Calculate(uint16 millivolts); - -#endif // _TEMPERATURECALCULATOR_H +#ifndef _TEMPERATURECALCULATOR_H +#define _TEMPERATURECALCULATOR_H + +float TemperatureCalculator_Calculate(uint16 millivolts); + +#endif // _TEMPERATURECALCULATOR_H diff --git a/examples/temp_sensor/src/TemperatureFilter.c b/examples/temp_sensor/src/TemperatureFilter.c index 8d9dc70..02fc045 100644 --- a/examples/temp_sensor/src/TemperatureFilter.c +++ b/examples/temp_sensor/src/TemperatureFilter.c @@ -1,39 +1,39 @@ -#include "Types.h" -#include "TemperatureFilter.h" -#include - -static bool initialized; -static float temperatureInCelcius; - -void TemperatureFilter_Init(void) -{ - initialized = FALSE; - temperatureInCelcius = -INFINITY; -} - -float TemperatureFilter_GetTemperatureInCelcius(void) -{ - return temperatureInCelcius; -} - -void TemperatureFilter_ProcessInput(float temperature) -{ - if (!initialized) - { - temperatureInCelcius = temperature; - initialized = TRUE; - } - else - { - if (temperature == +INFINITY || - temperature == -INFINITY || - temperature == +NAN || - temperature == -NAN) - { - initialized = FALSE; - temperature = -INFINITY; - } - - temperatureInCelcius = (temperatureInCelcius * 0.75f) + (temperature * 0.25); - } -} +#include "Types.h" +#include "TemperatureFilter.h" +#include + +static bool initialized; +static float temperatureInCelcius; + +void TemperatureFilter_Init(void) +{ + initialized = FALSE; + temperatureInCelcius = -INFINITY; +} + +float TemperatureFilter_GetTemperatureInCelcius(void) +{ + return temperatureInCelcius; +} + +void TemperatureFilter_ProcessInput(float temperature) +{ + if (!initialized) + { + temperatureInCelcius = temperature; + initialized = TRUE; + } + else + { + if (temperature == +INFINITY || + temperature == -INFINITY || + temperature == +NAN || + temperature == -NAN) + { + initialized = FALSE; + temperature = -INFINITY; + } + + temperatureInCelcius = (temperatureInCelcius * 0.75f) + (temperature * 0.25); + } +} diff --git a/examples/temp_sensor/src/TemperatureFilter.h b/examples/temp_sensor/src/TemperatureFilter.h index 9aedce4..31413f4 100644 --- a/examples/temp_sensor/src/TemperatureFilter.h +++ b/examples/temp_sensor/src/TemperatureFilter.h @@ -1,10 +1,10 @@ -#ifndef _TEMPERATUREFILTER_H -#define _TEMPERATUREFILTER_H - -#include "Types.h" - -void TemperatureFilter_Init(void); -float TemperatureFilter_GetTemperatureInCelcius(void); -void TemperatureFilter_ProcessInput(float temperature); - -#endif // _TEMPERATUREFILTER_H +#ifndef _TEMPERATUREFILTER_H +#define _TEMPERATUREFILTER_H + +#include "Types.h" + +void TemperatureFilter_Init(void); +float TemperatureFilter_GetTemperatureInCelcius(void); +void TemperatureFilter_ProcessInput(float temperature); + +#endif // _TEMPERATUREFILTER_H diff --git a/examples/temp_sensor/src/TimerConductor.c b/examples/temp_sensor/src/TimerConductor.c index cd7ec13..569b489 100644 --- a/examples/temp_sensor/src/TimerConductor.c +++ b/examples/temp_sensor/src/TimerConductor.c @@ -1,15 +1,15 @@ -#include "Types.h" -#include "TimerConductor.h" -#include "TimerModel.h" -#include "TimerHardware.h" -#include "TimerInterruptHandler.h" - -void TimerConductor_Init(void) -{ - TimerHardware_Init(); -} - -void TimerConductor_Run(void) -{ - TimerModel_UpdateTime(Timer_GetSystemTime()); -} +#include "Types.h" +#include "TimerConductor.h" +#include "TimerModel.h" +#include "TimerHardware.h" +#include "TimerInterruptHandler.h" + +void TimerConductor_Init(void) +{ + TimerHardware_Init(); +} + +void TimerConductor_Run(void) +{ + TimerModel_UpdateTime(Timer_GetSystemTime()); +} diff --git a/examples/temp_sensor/src/TimerConductor.h b/examples/temp_sensor/src/TimerConductor.h index 2712697..7cd4109 100644 --- a/examples/temp_sensor/src/TimerConductor.h +++ b/examples/temp_sensor/src/TimerConductor.h @@ -1,9 +1,9 @@ -#ifndef _TIMERCONDUCTOR_H -#define _TIMERCONDUCTOR_H - -#include "Types.h" - -void TimerConductor_Init(void); -void TimerConductor_Run(void); - -#endif // _TIMERCONDUCTOR_H +#ifndef _TIMERCONDUCTOR_H +#define _TIMERCONDUCTOR_H + +#include "Types.h" + +void TimerConductor_Init(void); +void TimerConductor_Run(void); + +#endif // _TIMERCONDUCTOR_H diff --git a/examples/temp_sensor/src/TimerConfigurator.c b/examples/temp_sensor/src/TimerConfigurator.c index 380332f..996cede 100644 --- a/examples/temp_sensor/src/TimerConfigurator.c +++ b/examples/temp_sensor/src/TimerConfigurator.c @@ -1,51 +1,51 @@ -#include "Types.h" -#include "TimerConfigurator.h" -#include "TimerInterruptConfigurator.h" - -void Timer_EnablePeripheralClocks(void) -{ - AT91C_BASE_PMC->PMC_PCER = TIMER0_CLOCK_ENABLE | PIOB_CLOCK_ENABLE; -} - -void Timer_Reset(void) -{ - uint32 dummy; - AT91C_BASE_TC0->TC_CCR = AT91C_TC_CLKDIS; - AT91C_BASE_TC0->TC_IDR = 0xffffffff; - dummy = AT91C_BASE_TC0->TC_SR; - dummy = dummy; -} - -void Timer_ConfigureMode(void) -{ - AT91C_BASE_TC0->TC_CMR = 0x000CC004; // ACPC=toggle TIOA on RC compare; mode=WAVE; WAVE_SEL=UP w/auto-trigger on RC compare; clock=MCK/1024 -} - -void Timer_ConfigurePeriod(void) -{ - AT91C_BASE_TC0->TC_RC = 469; // 10ms period for timer clock source of MCK/1024 with MCK=48054857 -} - -void Timer_EnableOutputPin(void) -{ - AT91C_BASE_PIOB->PIO_PDR = TIOA0_PIN_MASK; -} - -void Timer_Enable(void) -{ - AT91C_BASE_TC0->TC_CCR = AT91C_TC_CLKEN; -} - -void Timer_ConfigureInterruptHandler(void) -{ - Timer_DisableInterrupt(); - Timer_ResetSystemTime(); - Timer_ConfigureInterrupt(); - Timer_EnableInterrupt(); -} - -void Timer_Start(void) -{ - AT91C_BASE_TC0->TC_CCR = AT91C_TC_SWTRG; -} - +#include "Types.h" +#include "TimerConfigurator.h" +#include "TimerInterruptConfigurator.h" + +void Timer_EnablePeripheralClocks(void) +{ + AT91C_BASE_PMC->PMC_PCER = TIMER0_CLOCK_ENABLE | PIOB_CLOCK_ENABLE; +} + +void Timer_Reset(void) +{ + uint32 dummy; + AT91C_BASE_TC0->TC_CCR = AT91C_TC_CLKDIS; + AT91C_BASE_TC0->TC_IDR = 0xffffffff; + dummy = AT91C_BASE_TC0->TC_SR; + dummy = dummy; +} + +void Timer_ConfigureMode(void) +{ + AT91C_BASE_TC0->TC_CMR = 0x000CC004; // ACPC=toggle TIOA on RC compare; mode=WAVE; WAVE_SEL=UP w/auto-trigger on RC compare; clock=MCK/1024 +} + +void Timer_ConfigurePeriod(void) +{ + AT91C_BASE_TC0->TC_RC = 469; // 10ms period for timer clock source of MCK/1024 with MCK=48054857 +} + +void Timer_EnableOutputPin(void) +{ + AT91C_BASE_PIOB->PIO_PDR = TIOA0_PIN_MASK; +} + +void Timer_Enable(void) +{ + AT91C_BASE_TC0->TC_CCR = AT91C_TC_CLKEN; +} + +void Timer_ConfigureInterruptHandler(void) +{ + Timer_DisableInterrupt(); + Timer_ResetSystemTime(); + Timer_ConfigureInterrupt(); + Timer_EnableInterrupt(); +} + +void Timer_Start(void) +{ + AT91C_BASE_TC0->TC_CCR = AT91C_TC_SWTRG; +} + diff --git a/examples/temp_sensor/src/TimerConfigurator.h b/examples/temp_sensor/src/TimerConfigurator.h index 4e845b7..d078c54 100644 --- a/examples/temp_sensor/src/TimerConfigurator.h +++ b/examples/temp_sensor/src/TimerConfigurator.h @@ -1,15 +1,15 @@ -#ifndef _TIMERCONFIGURATOR_H -#define _TIMERCONFIGURATOR_H - -#include "Types.h" - -void Timer_EnablePeripheralClocks(void); -void Timer_Reset(void); -void Timer_ConfigureMode(void); -void Timer_ConfigurePeriod(void); -void Timer_EnableOutputPin(void); -void Timer_Enable(void); -void Timer_ConfigureInterruptHandler(void); -void Timer_Start(void); - -#endif // _TIMERCONFIGURATOR_H +#ifndef _TIMERCONFIGURATOR_H +#define _TIMERCONFIGURATOR_H + +#include "Types.h" + +void Timer_EnablePeripheralClocks(void); +void Timer_Reset(void); +void Timer_ConfigureMode(void); +void Timer_ConfigurePeriod(void); +void Timer_EnableOutputPin(void); +void Timer_Enable(void); +void Timer_ConfigureInterruptHandler(void); +void Timer_Start(void); + +#endif // _TIMERCONFIGURATOR_H diff --git a/examples/temp_sensor/src/TimerHardware.c b/examples/temp_sensor/src/TimerHardware.c index e8b4703..d5e983f 100644 --- a/examples/temp_sensor/src/TimerHardware.c +++ b/examples/temp_sensor/src/TimerHardware.c @@ -1,15 +1,15 @@ -#include "Types.h" -#include "TimerHardware.h" -#include "TimerConfigurator.h" - -void TimerHardware_Init(void) -{ - Timer_EnablePeripheralClocks(); - Timer_Reset(); - Timer_ConfigureMode(); - Timer_ConfigurePeriod(); - Timer_EnableOutputPin(); - Timer_Enable(); - Timer_ConfigureInterruptHandler(); - Timer_Start(); -} +#include "Types.h" +#include "TimerHardware.h" +#include "TimerConfigurator.h" + +void TimerHardware_Init(void) +{ + Timer_EnablePeripheralClocks(); + Timer_Reset(); + Timer_ConfigureMode(); + Timer_ConfigurePeriod(); + Timer_EnableOutputPin(); + Timer_Enable(); + Timer_ConfigureInterruptHandler(); + Timer_Start(); +} diff --git a/examples/temp_sensor/src/TimerHardware.h b/examples/temp_sensor/src/TimerHardware.h index 363df55..92fa287 100644 --- a/examples/temp_sensor/src/TimerHardware.h +++ b/examples/temp_sensor/src/TimerHardware.h @@ -1,8 +1,8 @@ -#ifndef _TIMERHARDWARE_H -#define _TIMERHARDWARE_H - -#include "Types.h" - -void TimerHardware_Init(void); - -#endif // _TIMERHARDWARE_H +#ifndef _TIMERHARDWARE_H +#define _TIMERHARDWARE_H + +#include "Types.h" + +void TimerHardware_Init(void); + +#endif // _TIMERHARDWARE_H diff --git a/examples/temp_sensor/src/TimerInterruptConfigurator.c b/examples/temp_sensor/src/TimerInterruptConfigurator.c index dcb8c85..fe603ef 100644 --- a/examples/temp_sensor/src/TimerInterruptConfigurator.c +++ b/examples/temp_sensor/src/TimerInterruptConfigurator.c @@ -1,55 +1,55 @@ -#include "Types.h" -#include "TimerInterruptConfigurator.h" -#include "TimerInterruptHandler.h" - -static inline void SetInterruptHandler(void); -static inline void ConfigureInterruptSourceModeRegister(void); -static inline void ClearInterrupt(void); -static inline void EnableCompareInterruptForRegisterC(void); - -void Timer_DisableInterrupt(void) -{ - AT91C_BASE_AIC->AIC_IDCR = TIMER0_ID_MASK; -} - -void Timer_ResetSystemTime(void) -{ - Timer_SetSystemTime(0); -} - -void Timer_ConfigureInterrupt(void) -{ - SetInterruptHandler(); - ConfigureInterruptSourceModeRegister(); - ClearInterrupt(); - EnableCompareInterruptForRegisterC(); -} - -void Timer_EnableInterrupt(void) -{ - AT91C_BASE_AIC->AIC_IECR = TIMER0_ID_MASK; -} - -// -// Helpers -// - -static inline void SetInterruptHandler(void) -{ - AT91C_BASE_AIC->AIC_SVR[AT91C_ID_TC0] = (uint32)Timer_InterruptHandler; -} - -static inline void ConfigureInterruptSourceModeRegister(void) -{ - AT91C_BASE_AIC->AIC_SMR[AT91C_ID_TC0] = 1; -} - -static inline void ClearInterrupt(void) -{ - AT91C_BASE_AIC->AIC_ICCR = TIMER0_ID_MASK; -} - -static inline void EnableCompareInterruptForRegisterC(void) -{ - AT91C_BASE_TC0->TC_IER = AT91C_TC_CPCS; -} +#include "Types.h" +#include "TimerInterruptConfigurator.h" +#include "TimerInterruptHandler.h" + +static inline void SetInterruptHandler(void); +static inline void ConfigureInterruptSourceModeRegister(void); +static inline void ClearInterrupt(void); +static inline void EnableCompareInterruptForRegisterC(void); + +void Timer_DisableInterrupt(void) +{ + AT91C_BASE_AIC->AIC_IDCR = TIMER0_ID_MASK; +} + +void Timer_ResetSystemTime(void) +{ + Timer_SetSystemTime(0); +} + +void Timer_ConfigureInterrupt(void) +{ + SetInterruptHandler(); + ConfigureInterruptSourceModeRegister(); + ClearInterrupt(); + EnableCompareInterruptForRegisterC(); +} + +void Timer_EnableInterrupt(void) +{ + AT91C_BASE_AIC->AIC_IECR = TIMER0_ID_MASK; +} + +// +// Helpers +// + +static inline void SetInterruptHandler(void) +{ + AT91C_BASE_AIC->AIC_SVR[AT91C_ID_TC0] = (uint32)Timer_InterruptHandler; +} + +static inline void ConfigureInterruptSourceModeRegister(void) +{ + AT91C_BASE_AIC->AIC_SMR[AT91C_ID_TC0] = 1; +} + +static inline void ClearInterrupt(void) +{ + AT91C_BASE_AIC->AIC_ICCR = TIMER0_ID_MASK; +} + +static inline void EnableCompareInterruptForRegisterC(void) +{ + AT91C_BASE_TC0->TC_IER = AT91C_TC_CPCS; +} diff --git a/examples/temp_sensor/src/TimerInterruptConfigurator.h b/examples/temp_sensor/src/TimerInterruptConfigurator.h index f639366..bdf6471 100644 --- a/examples/temp_sensor/src/TimerInterruptConfigurator.h +++ b/examples/temp_sensor/src/TimerInterruptConfigurator.h @@ -1,13 +1,13 @@ -#ifndef _TIMERINTERRUPTCONFIGURATOR_H -#define _TIMERINTERRUPTCONFIGURATOR_H - -#include "Types.h" - -#define TIMER0_ID_MASK (((uint32)0x1) << AT91C_ID_TC0) - -void Timer_DisableInterrupt(void); -void Timer_ResetSystemTime(void); -void Timer_ConfigureInterrupt(void); -void Timer_EnableInterrupt(void); - -#endif // _TIMERINTERRUPTCONFIGURATOR_H +#ifndef _TIMERINTERRUPTCONFIGURATOR_H +#define _TIMERINTERRUPTCONFIGURATOR_H + +#include "Types.h" + +#define TIMER0_ID_MASK (((uint32)0x1) << AT91C_ID_TC0) + +void Timer_DisableInterrupt(void); +void Timer_ResetSystemTime(void); +void Timer_ConfigureInterrupt(void); +void Timer_EnableInterrupt(void); + +#endif // _TIMERINTERRUPTCONFIGURATOR_H diff --git a/examples/temp_sensor/src/TimerInterruptHandler.c b/examples/temp_sensor/src/TimerInterruptHandler.c index 368f2ea..ebb543d 100644 --- a/examples/temp_sensor/src/TimerInterruptHandler.c +++ b/examples/temp_sensor/src/TimerInterruptHandler.c @@ -1,25 +1,25 @@ -#include "Types.h" -#include "TimerInterruptHandler.h" -#include "TimerInterruptConfigurator.h" - -static uint32 systemTime; - -void Timer_SetSystemTime(uint32 time) -{ - systemTime = time; -} - -uint32 Timer_GetSystemTime(void) -{ - return systemTime; -} - -void Timer_InterruptHandler(void) -{ - uint32 status = AT91C_BASE_TC0->TC_SR; - if (status & AT91C_TC_CPCS) - { - systemTime += 10; - } -} - +#include "Types.h" +#include "TimerInterruptHandler.h" +#include "TimerInterruptConfigurator.h" + +static uint32 systemTime; + +void Timer_SetSystemTime(uint32 time) +{ + systemTime = time; +} + +uint32 Timer_GetSystemTime(void) +{ + return systemTime; +} + +void Timer_InterruptHandler(void) +{ + uint32 status = AT91C_BASE_TC0->TC_SR; + if (status & AT91C_TC_CPCS) + { + systemTime += 10; + } +} + diff --git a/examples/temp_sensor/src/TimerInterruptHandler.h b/examples/temp_sensor/src/TimerInterruptHandler.h index 1d4fda9..29c0413 100644 --- a/examples/temp_sensor/src/TimerInterruptHandler.h +++ b/examples/temp_sensor/src/TimerInterruptHandler.h @@ -1,10 +1,10 @@ -#ifndef _TIMERINTERRUPTHANDLER_H -#define _TIMERINTERRUPTHANDLER_H - -#include "Types.h" - -void Timer_SetSystemTime(uint32 time); -uint32 Timer_GetSystemTime(void); -void Timer_InterruptHandler(void); - -#endif // _TIMERINTERRUPTHANDLER_H +#ifndef _TIMERINTERRUPTHANDLER_H +#define _TIMERINTERRUPTHANDLER_H + +#include "Types.h" + +void Timer_SetSystemTime(uint32 time); +uint32 Timer_GetSystemTime(void); +void Timer_InterruptHandler(void); + +#endif // _TIMERINTERRUPTHANDLER_H diff --git a/examples/temp_sensor/src/TimerModel.c b/examples/temp_sensor/src/TimerModel.c index dc2c0c6..fcc9db9 100644 --- a/examples/temp_sensor/src/TimerModel.c +++ b/examples/temp_sensor/src/TimerModel.c @@ -1,9 +1,9 @@ -#include "Types.h" -#include "TimerModel.h" -#include "TaskScheduler.h" - -void TimerModel_UpdateTime(uint32 systemTime) -{ - TaskScheduler_Update(systemTime); -} - +#include "Types.h" +#include "TimerModel.h" +#include "TaskScheduler.h" + +void TimerModel_UpdateTime(uint32 systemTime) +{ + TaskScheduler_Update(systemTime); +} + diff --git a/examples/temp_sensor/src/TimerModel.h b/examples/temp_sensor/src/TimerModel.h index 9bdbe93..54be21a 100644 --- a/examples/temp_sensor/src/TimerModel.h +++ b/examples/temp_sensor/src/TimerModel.h @@ -1,8 +1,8 @@ -#ifndef _TIMERMODEL_H -#define _TIMERMODEL_H - -#include "Types.h" - -void TimerModel_UpdateTime(uint32 systemTime); - -#endif // _TIMERMODEL_H +#ifndef _TIMERMODEL_H +#define _TIMERMODEL_H + +#include "Types.h" + +void TimerModel_UpdateTime(uint32 systemTime); + +#endif // _TIMERMODEL_H diff --git a/examples/temp_sensor/src/Types.h b/examples/temp_sensor/src/Types.h index 2e5c2e6..6a0f824 100644 --- a/examples/temp_sensor/src/Types.h +++ b/examples/temp_sensor/src/Types.h @@ -1,103 +1,103 @@ -#ifndef _MYTYPES_H_ -#define _MYTYPES_H_ - -#include "AT91SAM7X256.h" -#include - -#ifndef __monitor -#define __monitor -#endif - -// Peripheral Helper Definitions -#define USART0_CLOCK_ENABLE (AT91C_ID_US0) -#define USART0_TX_PIN (AT91C_PA1_TXD0) -#define TIMER0_CLOCK_ENABLE (((uint32)0x1) << AT91C_ID_TC0) -#define PIOA_CLOCK_ENABLE (((uint32)0x1) << AT91C_ID_PIOA) -#define PIOB_CLOCK_ENABLE (((uint32)0x1) << AT91C_ID_PIOB) -#define TIOA0_PIN_MASK (((uint32)0x1) << 23) // Timer/Counter Output Pin - -// Application Type Definitions -typedef unsigned int uint32; -typedef int int32; -typedef unsigned short uint16; -typedef short int16; -typedef unsigned char uint8; -typedef char int8; -typedef char bool; - -// Application Special Value Definitions -#ifndef TRUE -#define TRUE (1) -#endif -#ifndef FALSE -#define FALSE (0) -#endif -#ifndef NULL -#define NULL (0) -#endif // NULL -#define DONT_CARE (0) - -#ifndef INFINITY -#define INFINITY (1.0 / 0.0) -#endif - -#ifndef NAN -#define NAN (0.0 / 0.0) -#endif - -// MIN/MAX Definitions for Standard Types -#ifndef INT8_MAX -#define INT8_MAX 127 -#endif - -#ifndef INT8_MIN -#define INT8_MIN (-128) -#endif - -#ifndef UINT8_MAX -#define UINT8_MAX 0xFFU -#endif - -#ifndef UINT8_MIN -#define UINT8_MIN 0x00U -#endif - -#ifndef INT16_MAX -#define INT16_MAX 32767 -#endif - -#ifndef INT16_MIN -#define INT16_MIN (-32768) -#endif - -#ifndef UINT16_MAX -#define UINT16_MAX 0xFFFFU -#endif - -#ifndef UINT16_MIN -#define UINT16_MIN 0x0000U -#endif - -#ifndef INT32_MAX -#define INT32_MAX 0x7FFFFFFF -#endif - -#ifndef INT32_MIN -#define INT32_MIN (-INT32_MAX - 1) -#endif - -#ifndef UINT32_MAX -#define UINT32_MAX 0xFFFFFFFFU -#endif - -#ifndef UINT32_MIN -#define UINT32_MIN 0x00000000U -#endif - -typedef struct _EXAMPLE_STRUCT_T -{ - int x; - int y; -} EXAMPLE_STRUCT_T; - -#endif // _MYTYPES_H_ +#ifndef _MYTYPES_H_ +#define _MYTYPES_H_ + +#include "AT91SAM7X256.h" +#include + +#ifndef __monitor +#define __monitor +#endif + +// Peripheral Helper Definitions +#define USART0_CLOCK_ENABLE (AT91C_ID_US0) +#define USART0_TX_PIN (AT91C_PA1_TXD0) +#define TIMER0_CLOCK_ENABLE (((uint32)0x1) << AT91C_ID_TC0) +#define PIOA_CLOCK_ENABLE (((uint32)0x1) << AT91C_ID_PIOA) +#define PIOB_CLOCK_ENABLE (((uint32)0x1) << AT91C_ID_PIOB) +#define TIOA0_PIN_MASK (((uint32)0x1) << 23) // Timer/Counter Output Pin + +// Application Type Definitions +typedef unsigned int uint32; +typedef int int32; +typedef unsigned short uint16; +typedef short int16; +typedef unsigned char uint8; +typedef char int8; +typedef char bool; + +// Application Special Value Definitions +#ifndef TRUE +#define TRUE (1) +#endif +#ifndef FALSE +#define FALSE (0) +#endif +#ifndef NULL +#define NULL (0) +#endif // NULL +#define DONT_CARE (0) + +#ifndef INFINITY +#define INFINITY (1.0 / 0.0) +#endif + +#ifndef NAN +#define NAN (0.0 / 0.0) +#endif + +// MIN/MAX Definitions for Standard Types +#ifndef INT8_MAX +#define INT8_MAX 127 +#endif + +#ifndef INT8_MIN +#define INT8_MIN (-128) +#endif + +#ifndef UINT8_MAX +#define UINT8_MAX 0xFFU +#endif + +#ifndef UINT8_MIN +#define UINT8_MIN 0x00U +#endif + +#ifndef INT16_MAX +#define INT16_MAX 32767 +#endif + +#ifndef INT16_MIN +#define INT16_MIN (-32768) +#endif + +#ifndef UINT16_MAX +#define UINT16_MAX 0xFFFFU +#endif + +#ifndef UINT16_MIN +#define UINT16_MIN 0x0000U +#endif + +#ifndef INT32_MAX +#define INT32_MAX 0x7FFFFFFF +#endif + +#ifndef INT32_MIN +#define INT32_MIN (-INT32_MAX - 1) +#endif + +#ifndef UINT32_MAX +#define UINT32_MAX 0xFFFFFFFFU +#endif + +#ifndef UINT32_MIN +#define UINT32_MIN 0x00000000U +#endif + +typedef struct _EXAMPLE_STRUCT_T +{ + int x; + int y; +} EXAMPLE_STRUCT_T; + +#endif // _MYTYPES_H_ diff --git a/examples/temp_sensor/src/UsartBaudRateRegisterCalculator.c b/examples/temp_sensor/src/UsartBaudRateRegisterCalculator.c index 84dffa9..f4ad147 100644 --- a/examples/temp_sensor/src/UsartBaudRateRegisterCalculator.c +++ b/examples/temp_sensor/src/UsartBaudRateRegisterCalculator.c @@ -1,18 +1,18 @@ -#include "Types.h" -#include "UsartBaudRateRegisterCalculator.h" - -uint8 UsartModel_CalculateBaudRateRegisterSetting(uint32 masterClock, uint32 baudRate) -{ - uint32 registerSetting = ((masterClock * 10) / (baudRate * 16)); - - if ((registerSetting % 10) >= 5) - { - registerSetting = (registerSetting / 10) + 1; - } - else - { - registerSetting /= 10; - } - - return (uint8)registerSetting; -} +#include "Types.h" +#include "UsartBaudRateRegisterCalculator.h" + +uint8 UsartModel_CalculateBaudRateRegisterSetting(uint32 masterClock, uint32 baudRate) +{ + uint32 registerSetting = ((masterClock * 10) / (baudRate * 16)); + + if ((registerSetting % 10) >= 5) + { + registerSetting = (registerSetting / 10) + 1; + } + else + { + registerSetting /= 10; + } + + return (uint8)registerSetting; +} diff --git a/examples/temp_sensor/src/UsartBaudRateRegisterCalculator.h b/examples/temp_sensor/src/UsartBaudRateRegisterCalculator.h index 8a53d74..50e9048 100644 --- a/examples/temp_sensor/src/UsartBaudRateRegisterCalculator.h +++ b/examples/temp_sensor/src/UsartBaudRateRegisterCalculator.h @@ -1,6 +1,6 @@ -#ifndef _USARTBAUDRATEREGISTERCALCULATOR_H -#define _USARTBAUDRATEREGISTERCALCULATOR_H - -uint8 UsartModel_CalculateBaudRateRegisterSetting(uint32 masterClock, uint32 baudRate); - -#endif // _USARTBAUDRATEREGISTERCALCULATOR_H +#ifndef _USARTBAUDRATEREGISTERCALCULATOR_H +#define _USARTBAUDRATEREGISTERCALCULATOR_H + +uint8 UsartModel_CalculateBaudRateRegisterSetting(uint32 masterClock, uint32 baudRate); + +#endif // _USARTBAUDRATEREGISTERCALCULATOR_H diff --git a/examples/temp_sensor/src/UsartConductor.c b/examples/temp_sensor/src/UsartConductor.c index 1bf6df4..3eeec3c 100644 --- a/examples/temp_sensor/src/UsartConductor.c +++ b/examples/temp_sensor/src/UsartConductor.c @@ -1,21 +1,21 @@ -#include "Types.h" -#include "UsartConductor.h" -#include "UsartHardware.h" -#include "UsartModel.h" -#include "TaskScheduler.h" - -void UsartConductor_Init(void) -{ - UsartHardware_Init(UsartModel_GetBaudRateRegisterSetting()); - UsartHardware_TransmitString(UsartModel_GetWakeupMessage()); -} - -void UsartConductor_Run(void) -{ - char* temp; - if (TaskScheduler_DoUsart()) - { - temp = UsartModel_GetFormattedTemperature(); - UsartHardware_TransmitString(temp); - } -} +#include "Types.h" +#include "UsartConductor.h" +#include "UsartHardware.h" +#include "UsartModel.h" +#include "TaskScheduler.h" + +void UsartConductor_Init(void) +{ + UsartHardware_Init(UsartModel_GetBaudRateRegisterSetting()); + UsartHardware_TransmitString(UsartModel_GetWakeupMessage()); +} + +void UsartConductor_Run(void) +{ + char* temp; + if (TaskScheduler_DoUsart()) + { + temp = UsartModel_GetFormattedTemperature(); + UsartHardware_TransmitString(temp); + } +} diff --git a/examples/temp_sensor/src/UsartConductor.h b/examples/temp_sensor/src/UsartConductor.h index 1289ea1..f420736 100644 --- a/examples/temp_sensor/src/UsartConductor.h +++ b/examples/temp_sensor/src/UsartConductor.h @@ -1,7 +1,7 @@ -#ifndef _USARTCONDUCTOR_H -#define _USARTCONDUCTOR_H - -void UsartConductor_Init(void); -void UsartConductor_Run(void); - -#endif // _USARTCONDUCTOR_H +#ifndef _USARTCONDUCTOR_H +#define _USARTCONDUCTOR_H + +void UsartConductor_Init(void); +void UsartConductor_Run(void); + +#endif // _USARTCONDUCTOR_H diff --git a/examples/temp_sensor/src/UsartConfigurator.c b/examples/temp_sensor/src/UsartConfigurator.c index 775bc82..b8c2cdc 100644 --- a/examples/temp_sensor/src/UsartConfigurator.c +++ b/examples/temp_sensor/src/UsartConfigurator.c @@ -1,39 +1,39 @@ -#include "Types.h" -#include "UsartConfigurator.h" - -void Usart_ConfigureUsartIO(void) -{ - AT91C_BASE_PIOA->PIO_ASR = USART0_TX_PIN; - AT91C_BASE_PIOA->PIO_BSR = 0; - AT91C_BASE_PIOA->PIO_PDR = USART0_TX_PIN; -} - -void Usart_EnablePeripheralClock(void) -{ - AT91C_BASE_PMC->PMC_PCER = ((uint32)1) << USART0_CLOCK_ENABLE; -} - -void Usart_Reset(void) -{ - AT91C_BASE_US0->US_IDR = 0xffffffff; - AT91C_BASE_US0->US_CR = AT91C_US_RSTRX | AT91C_US_RSTTX | AT91C_US_RXDIS | AT91C_US_TXDIS; -} - -void Usart_ConfigureMode(void) -{ - AT91C_BASE_US0->US_MR = AT91C_US_USMODE_NORMAL | - AT91C_US_NBSTOP_1_BIT | - AT91C_US_PAR_NONE | - AT91C_US_CHRL_8_BITS | - AT91C_US_CLKS_CLOCK; -} - -void Usart_SetBaudRateRegister(uint8 baudRateRegisterSetting) -{ - AT91C_BASE_US0->US_BRGR = baudRateRegisterSetting; -} - -void Usart_Enable(void) -{ - AT91C_BASE_US0->US_CR = AT91C_US_TXEN; -} +#include "Types.h" +#include "UsartConfigurator.h" + +void Usart_ConfigureUsartIO(void) +{ + AT91C_BASE_PIOA->PIO_ASR = USART0_TX_PIN; + AT91C_BASE_PIOA->PIO_BSR = 0; + AT91C_BASE_PIOA->PIO_PDR = USART0_TX_PIN; +} + +void Usart_EnablePeripheralClock(void) +{ + AT91C_BASE_PMC->PMC_PCER = ((uint32)1) << USART0_CLOCK_ENABLE; +} + +void Usart_Reset(void) +{ + AT91C_BASE_US0->US_IDR = 0xffffffff; + AT91C_BASE_US0->US_CR = AT91C_US_RSTRX | AT91C_US_RSTTX | AT91C_US_RXDIS | AT91C_US_TXDIS; +} + +void Usart_ConfigureMode(void) +{ + AT91C_BASE_US0->US_MR = AT91C_US_USMODE_NORMAL | + AT91C_US_NBSTOP_1_BIT | + AT91C_US_PAR_NONE | + AT91C_US_CHRL_8_BITS | + AT91C_US_CLKS_CLOCK; +} + +void Usart_SetBaudRateRegister(uint8 baudRateRegisterSetting) +{ + AT91C_BASE_US0->US_BRGR = baudRateRegisterSetting; +} + +void Usart_Enable(void) +{ + AT91C_BASE_US0->US_CR = AT91C_US_TXEN; +} diff --git a/examples/temp_sensor/src/UsartConfigurator.h b/examples/temp_sensor/src/UsartConfigurator.h index a644932..02bede2 100644 --- a/examples/temp_sensor/src/UsartConfigurator.h +++ b/examples/temp_sensor/src/UsartConfigurator.h @@ -1,13 +1,13 @@ -#ifndef _USARTCONFIGURATOR_H -#define _USARTCONFIGURATOR_H - -#include "Types.h" - -void Usart_ConfigureUsartIO(void); -void Usart_EnablePeripheralClock(void); -void Usart_Reset(void); -void Usart_ConfigureMode(void); -void Usart_SetBaudRateRegister(uint8 baudRateRegisterSetting); -void Usart_Enable(void); - -#endif // _USARTCONFIGURATOR_H +#ifndef _USARTCONFIGURATOR_H +#define _USARTCONFIGURATOR_H + +#include "Types.h" + +void Usart_ConfigureUsartIO(void); +void Usart_EnablePeripheralClock(void); +void Usart_Reset(void); +void Usart_ConfigureMode(void); +void Usart_SetBaudRateRegister(uint8 baudRateRegisterSetting); +void Usart_Enable(void); + +#endif // _USARTCONFIGURATOR_H diff --git a/examples/temp_sensor/src/UsartHardware.c b/examples/temp_sensor/src/UsartHardware.c index 0fc88b8..e37c2c6 100644 --- a/examples/temp_sensor/src/UsartHardware.c +++ b/examples/temp_sensor/src/UsartHardware.c @@ -1,22 +1,22 @@ -#include "Types.h" -#include "UsartHardware.h" -#include "UsartConfigurator.h" -#include "UsartPutChar.h" - -void UsartHardware_Init(uint8 baudRateRegisterSetting) -{ - Usart_ConfigureUsartIO(); - Usart_EnablePeripheralClock(); - Usart_Reset(); - Usart_ConfigureMode(); - Usart_SetBaudRateRegister(baudRateRegisterSetting); - Usart_Enable(); -} - -void UsartHardware_TransmitString(char* data) -{ - while(*data != NULL) - { - Usart_PutChar(*data++); - } -} +#include "Types.h" +#include "UsartHardware.h" +#include "UsartConfigurator.h" +#include "UsartPutChar.h" + +void UsartHardware_Init(uint8 baudRateRegisterSetting) +{ + Usart_ConfigureUsartIO(); + Usart_EnablePeripheralClock(); + Usart_Reset(); + Usart_ConfigureMode(); + Usart_SetBaudRateRegister(baudRateRegisterSetting); + Usart_Enable(); +} + +void UsartHardware_TransmitString(char* data) +{ + while(*data != NULL) + { + Usart_PutChar(*data++); + } +} diff --git a/examples/temp_sensor/src/UsartHardware.h b/examples/temp_sensor/src/UsartHardware.h index 3261c82..041e280 100644 --- a/examples/temp_sensor/src/UsartHardware.h +++ b/examples/temp_sensor/src/UsartHardware.h @@ -1,9 +1,9 @@ -#ifndef _USARTHARDWARE_H -#define _USARTHARDWARE_H - -#include "Types.h" - -void UsartHardware_Init(uint8 baudRateRegisterSetting); -void UsartHardware_TransmitString(char* data); - -#endif // _USARTHARDWARE_H +#ifndef _USARTHARDWARE_H +#define _USARTHARDWARE_H + +#include "Types.h" + +void UsartHardware_Init(uint8 baudRateRegisterSetting); +void UsartHardware_TransmitString(char* data); + +#endif // _USARTHARDWARE_H diff --git a/examples/temp_sensor/src/UsartModel.c b/examples/temp_sensor/src/UsartModel.c index 65a154e..d722a2f 100644 --- a/examples/temp_sensor/src/UsartModel.c +++ b/examples/temp_sensor/src/UsartModel.c @@ -1,34 +1,34 @@ -#include "Types.h" -#include "UsartModel.h" -#include "ModelConfig.h" -#include "UsartBaudRateRegisterCalculator.h" -#include "TemperatureFilter.h" -#include -#include - -char formattedTemperature[32]; -char* wakeup = "It's Awesome Time!\n"; - -uint8 UsartModel_GetBaudRateRegisterSetting(void) -{ - return UsartModel_CalculateBaudRateRegisterSetting(MASTER_CLOCK, USART0_BAUDRATE); -} - -char* UsartModel_GetFormattedTemperature(void) -{ - float temperature = TemperatureFilter_GetTemperatureInCelcius(); - if (temperature == -INFINITY) - { - sprintf(formattedTemperature, "%s", "Temperature sensor failure!\n"); - } - else - { - sprintf(formattedTemperature, "%.1f C\n", temperature); - } - return formattedTemperature; -} - -char* UsartModel_GetWakeupMessage(void) -{ - return wakeup; -} +#include "Types.h" +#include "UsartModel.h" +#include "ModelConfig.h" +#include "UsartBaudRateRegisterCalculator.h" +#include "TemperatureFilter.h" +#include +#include + +char formattedTemperature[32]; +char* wakeup = "It's Awesome Time!\n"; + +uint8 UsartModel_GetBaudRateRegisterSetting(void) +{ + return UsartModel_CalculateBaudRateRegisterSetting(MASTER_CLOCK, USART0_BAUDRATE); +} + +char* UsartModel_GetFormattedTemperature(void) +{ + float temperature = TemperatureFilter_GetTemperatureInCelcius(); + if (temperature == -INFINITY) + { + sprintf(formattedTemperature, "%s", "Temperature sensor failure!\n"); + } + else + { + sprintf(formattedTemperature, "%.1f C\n", temperature); + } + return formattedTemperature; +} + +char* UsartModel_GetWakeupMessage(void) +{ + return wakeup; +} diff --git a/examples/temp_sensor/src/UsartModel.h b/examples/temp_sensor/src/UsartModel.h index 724f548..7d94854 100644 --- a/examples/temp_sensor/src/UsartModel.h +++ b/examples/temp_sensor/src/UsartModel.h @@ -1,10 +1,10 @@ -#ifndef _USARTMODEL_H -#define _USARTMODEL_H - -#include "Types.h" - -uint8 UsartModel_GetBaudRateRegisterSetting(void); -char* UsartModel_GetFormattedTemperature(void); -char* UsartModel_GetWakeupMessage(void); - -#endif // _USARTMODEL_H +#ifndef _USARTMODEL_H +#define _USARTMODEL_H + +#include "Types.h" + +uint8 UsartModel_GetBaudRateRegisterSetting(void); +char* UsartModel_GetFormattedTemperature(void); +char* UsartModel_GetWakeupMessage(void); + +#endif // _USARTMODEL_H diff --git a/examples/temp_sensor/src/UsartPutChar.c b/examples/temp_sensor/src/UsartPutChar.c index 42ea848..9e3ce2c 100644 --- a/examples/temp_sensor/src/UsartPutChar.c +++ b/examples/temp_sensor/src/UsartPutChar.c @@ -1,16 +1,16 @@ -#include "Types.h" -#include "UsartPutChar.h" -#include "UsartTransmitBufferStatus.h" -#ifdef SIMULATE -#include -#endif - -void Usart_PutChar(char data) -{ - while(!Usart_ReadyToTransmit()); -#ifdef SIMULATE - printf("%c", data); -#else - AT91C_BASE_US0->US_THR = data; -#endif -} +#include "Types.h" +#include "UsartPutChar.h" +#include "UsartTransmitBufferStatus.h" +#ifdef SIMULATE +#include +#endif + +void Usart_PutChar(char data) +{ + while(!Usart_ReadyToTransmit()); +#ifdef SIMULATE + printf("%c", data); +#else + AT91C_BASE_US0->US_THR = data; +#endif +} diff --git a/examples/temp_sensor/src/UsartPutChar.h b/examples/temp_sensor/src/UsartPutChar.h index 7bf780e..924446a 100644 --- a/examples/temp_sensor/src/UsartPutChar.h +++ b/examples/temp_sensor/src/UsartPutChar.h @@ -1,8 +1,8 @@ -#ifndef _USARTPUT_HAR_H -#define _USARTPUT_HAR_H - -#include "Types.h" - -void Usart_PutChar(char data); - -#endif // _USARTPUT_HAR_H +#ifndef _USARTPUT_HAR_H +#define _USARTPUT_HAR_H + +#include "Types.h" + +void Usart_PutChar(char data); + +#endif // _USARTPUT_HAR_H diff --git a/examples/temp_sensor/src/UsartTransmitBufferStatus.c b/examples/temp_sensor/src/UsartTransmitBufferStatus.c index 7c4eb71..914b2e1 100644 --- a/examples/temp_sensor/src/UsartTransmitBufferStatus.c +++ b/examples/temp_sensor/src/UsartTransmitBufferStatus.c @@ -1,7 +1,7 @@ -#include "Types.h" -#include "UsartTransmitBufferStatus.h" - -bool Usart_ReadyToTransmit(void) -{ - return (AT91C_BASE_US0->US_CSR & AT91C_US_TXRDY) > 0; -} +#include "Types.h" +#include "UsartTransmitBufferStatus.h" + +bool Usart_ReadyToTransmit(void) +{ + return (AT91C_BASE_US0->US_CSR & AT91C_US_TXRDY) > 0; +} diff --git a/examples/temp_sensor/src/UsartTransmitBufferStatus.h b/examples/temp_sensor/src/UsartTransmitBufferStatus.h index f523ea2..b5925ba 100644 --- a/examples/temp_sensor/src/UsartTransmitBufferStatus.h +++ b/examples/temp_sensor/src/UsartTransmitBufferStatus.h @@ -1,8 +1,8 @@ -#ifndef _USARTTRANSMITBUFFERSTATUS_H -#define _USARTTRANSMITBUFFERSTATUS_H - -#include "Types.h" - -bool Usart_ReadyToTransmit(void); - -#endif // _USARTTRANSMITBUFFERSTATUS_H +#ifndef _USARTTRANSMITBUFFERSTATUS_H +#define _USARTTRANSMITBUFFERSTATUS_H + +#include "Types.h" + +bool Usart_ReadyToTransmit(void); + +#endif // _USARTTRANSMITBUFFERSTATUS_H diff --git a/examples/temp_sensor/test/TestAdcConductor.c b/examples/temp_sensor/test/TestAdcConductor.c index f9efb01..a15d7d1 100644 --- a/examples/temp_sensor/test/TestAdcConductor.c +++ b/examples/temp_sensor/test/TestAdcConductor.c @@ -1,121 +1,121 @@ -#include "unity.h" -#include "UnityHelper.h" -#include "Types.h" -#include "Types.h" -#include "AdcConductor.h" -#include "MockAdcModel.h" -#include "MockAdcHardware.h" - -void setUp(void) -{ -} - -void tearDown(void) -{ -} - -void testInitShouldCallHardwareInit(void) -{ - AdcHardware_Init_Expect(); - AdcConductor_Init(); -} - -void testRunShouldNotDoAnythingIfItIsNotTime(void) -{ - AdcModel_DoGetSample_ExpectAndReturn(FALSE); - - AdcConductor_Run(); -} - -void testRunShouldNotPassAdcResultToModelIfSampleIsNotComplete(void) -{ - AdcModel_DoGetSample_ExpectAndReturn(TRUE); - AdcHardware_GetSampleComplete_ExpectAndReturn(FALSE); - - AdcConductor_Run(); -} - -void testRunShouldGetLatestSampleFromAdcAndPassItToModelAndStartNewConversionWhenItIsTime(void) -{ - AdcModel_DoGetSample_ExpectAndReturn(TRUE); - AdcHardware_GetSampleComplete_ExpectAndReturn(TRUE); - AdcHardware_GetSample_ExpectAndReturn(293U); - AdcModel_ProcessInput_Expect(293U); - AdcHardware_StartConversion_Expect(); - - AdcConductor_Run(); -} - -void testJustHereToTest_Should_ProperlyPassAStructAndVerifyIt(void) -{ - EXAMPLE_STRUCT_T TestStruct; - TestStruct.x = 5; - TestStruct.y = 7; - - AdcModel_DoNothingExceptTestASpecialType_ExpectAndReturn(TestStruct, TRUE); - - TEST_ASSERT_TRUE(AdcConductor_JustHereToTest()); -} - -//void testJustHereToTest_Should_FailThisTestIfYouUncommentXIsBecauseItsWrong(void) -//{ -// EXAMPLE_STRUCT_T TestStruct; -// TestStruct.x = 6; -// TestStruct.y = 7; -// -// AdcModel_DoNothingExceptTestASpecialType_ExpectAndReturn(TestStruct, TRUE); -// -// TEST_ASSERT_TRUE(AdcConductor_JustHereToTest()); -//} -// -//void testJustHereToTest_Should_FailThisTestIfYouUncommentYIsBecauseItsWrong(void) -//{ -// EXAMPLE_STRUCT_T TestStruct; -// TestStruct.x = 5; -// TestStruct.y = 8; -// -// AdcModel_DoNothingExceptTestASpecialType_ExpectAndReturn(TestStruct, TRUE); -// -// TEST_ASSERT_TRUE(AdcConductor_JustHereToTest()); -//} - -void test_AdcConductor_AlsoHereToTest_Should_ProperlyReturnAStructAsExpected1(void) -{ - EXAMPLE_STRUCT_T TestStruct; - TestStruct.x = 99; - TestStruct.y = 1; - - AdcModel_DoNothingExceptReturnASpecialType_ExpectAndReturn(TestStruct); - - TEST_ASSERT_TRUE(AdcConductor_AlsoHereToTest()); -} - -void test_AdcConductor_AlsoHereToTest_Should_ProperlyReturnAStructAsExpected2(void) -{ - EXAMPLE_STRUCT_T TestStruct; - TestStruct.x = 98; - TestStruct.y = 1; - - AdcModel_DoNothingExceptReturnASpecialType_ExpectAndReturn(TestStruct); - - TEST_ASSERT_FALSE(AdcConductor_AlsoHereToTest()); -} - -void test_AdcConductor_YetAnotherTest_Should_VerifyThatPointersToStructsAreTestable(void) -{ - uint32 TestNum = 3; - - AdModel_DoNothingExceptTestPointers_ExpectAndReturn(&TestNum, TRUE); - - TEST_ASSERT_TRUE(AdcConductor_YetAnotherTest()); -} - -//void test_AdcConductor_YetAnotherTest_Should_FailIfYouUncommentThisTestBecauseTheValuePointedToIsWrong(void) -//{ -// uint32 TestNum = 7; -// -// AdModel_DoNothingExceptTestPointers_ExpectAndReturn(&TestNum, FALSE); -// -// TEST_ASSERT_FALSE(AdcConductor_YetAnotherTest()); -//} - +#include "unity.h" +#include "UnityHelper.h" +#include "Types.h" +#include "Types.h" +#include "AdcConductor.h" +#include "MockAdcModel.h" +#include "MockAdcHardware.h" + +void setUp(void) +{ +} + +void tearDown(void) +{ +} + +void testInitShouldCallHardwareInit(void) +{ + AdcHardware_Init_Expect(); + AdcConductor_Init(); +} + +void testRunShouldNotDoAnythingIfItIsNotTime(void) +{ + AdcModel_DoGetSample_ExpectAndReturn(FALSE); + + AdcConductor_Run(); +} + +void testRunShouldNotPassAdcResultToModelIfSampleIsNotComplete(void) +{ + AdcModel_DoGetSample_ExpectAndReturn(TRUE); + AdcHardware_GetSampleComplete_ExpectAndReturn(FALSE); + + AdcConductor_Run(); +} + +void testRunShouldGetLatestSampleFromAdcAndPassItToModelAndStartNewConversionWhenItIsTime(void) +{ + AdcModel_DoGetSample_ExpectAndReturn(TRUE); + AdcHardware_GetSampleComplete_ExpectAndReturn(TRUE); + AdcHardware_GetSample_ExpectAndReturn(293U); + AdcModel_ProcessInput_Expect(293U); + AdcHardware_StartConversion_Expect(); + + AdcConductor_Run(); +} + +void testJustHereToTest_Should_ProperlyPassAStructAndVerifyIt(void) +{ + EXAMPLE_STRUCT_T TestStruct; + TestStruct.x = 5; + TestStruct.y = 7; + + AdcModel_DoNothingExceptTestASpecialType_ExpectAndReturn(TestStruct, TRUE); + + TEST_ASSERT_TRUE(AdcConductor_JustHereToTest()); +} + +//void testJustHereToTest_Should_FailThisTestIfYouUncommentXIsBecauseItsWrong(void) +//{ +// EXAMPLE_STRUCT_T TestStruct; +// TestStruct.x = 6; +// TestStruct.y = 7; +// +// AdcModel_DoNothingExceptTestASpecialType_ExpectAndReturn(TestStruct, TRUE); +// +// TEST_ASSERT_TRUE(AdcConductor_JustHereToTest()); +//} +// +//void testJustHereToTest_Should_FailThisTestIfYouUncommentYIsBecauseItsWrong(void) +//{ +// EXAMPLE_STRUCT_T TestStruct; +// TestStruct.x = 5; +// TestStruct.y = 8; +// +// AdcModel_DoNothingExceptTestASpecialType_ExpectAndReturn(TestStruct, TRUE); +// +// TEST_ASSERT_TRUE(AdcConductor_JustHereToTest()); +//} + +void test_AdcConductor_AlsoHereToTest_Should_ProperlyReturnAStructAsExpected1(void) +{ + EXAMPLE_STRUCT_T TestStruct; + TestStruct.x = 99; + TestStruct.y = 1; + + AdcModel_DoNothingExceptReturnASpecialType_ExpectAndReturn(TestStruct); + + TEST_ASSERT_TRUE(AdcConductor_AlsoHereToTest()); +} + +void test_AdcConductor_AlsoHereToTest_Should_ProperlyReturnAStructAsExpected2(void) +{ + EXAMPLE_STRUCT_T TestStruct; + TestStruct.x = 98; + TestStruct.y = 1; + + AdcModel_DoNothingExceptReturnASpecialType_ExpectAndReturn(TestStruct); + + TEST_ASSERT_FALSE(AdcConductor_AlsoHereToTest()); +} + +void test_AdcConductor_YetAnotherTest_Should_VerifyThatPointersToStructsAreTestable(void) +{ + uint32 TestNum = 3; + + AdModel_DoNothingExceptTestPointers_ExpectAndReturn(&TestNum, TRUE); + + TEST_ASSERT_TRUE(AdcConductor_YetAnotherTest()); +} + +//void test_AdcConductor_YetAnotherTest_Should_FailIfYouUncommentThisTestBecauseTheValuePointedToIsWrong(void) +//{ +// uint32 TestNum = 7; +// +// AdModel_DoNothingExceptTestPointers_ExpectAndReturn(&TestNum, FALSE); +// +// TEST_ASSERT_FALSE(AdcConductor_YetAnotherTest()); +//} + diff --git a/examples/temp_sensor/test/TestAdcHardware.c b/examples/temp_sensor/test/TestAdcHardware.c index 78e1450..7aabaa7 100644 --- a/examples/temp_sensor/test/TestAdcHardware.c +++ b/examples/temp_sensor/test/TestAdcHardware.c @@ -1,44 +1,44 @@ -#include "unity.h" -#include "Types.h" -#include "AdcHardware.h" -#include "MockAdcHardwareConfigurator.h" -#include "MockAdcTemperatureSensor.h" - -void setUp(void) -{ -} - -void tearDown(void) -{ -} - -void testInitShouldDelegateToConfiguratorAndTemperatureSensor(void) -{ - Adc_Reset_Expect(); - Adc_ConfigureMode_Expect(); - Adc_EnableTemperatureChannel_Expect(); - Adc_StartTemperatureSensorConversion_Expect(); - - AdcHardware_Init(); -} - -void testGetSampleCompleteShouldReturn_FALSE_WhenTemperatureSensorSampleReadyReturns_FALSE(void) -{ - Adc_TemperatureSensorSampleReady_ExpectAndReturn(FALSE); - TEST_ASSERT(!AdcHardware_GetSampleComplete()); -} - -void testGetSampleCompleteShouldReturn_TRUE_WhenTemperatureSensorSampleReadyReturns_TRUE(void) -{ - Adc_TemperatureSensorSampleReady_ExpectAndReturn(TRUE); - TEST_ASSERT(AdcHardware_GetSampleComplete()); -} - -void testGetSampleShouldDelegateToAdcTemperatureSensor(void) -{ - uint16 sample; - Adc_ReadTemperatureSensor_ExpectAndReturn(847); - - sample = AdcHardware_GetSample(); - TEST_ASSERT_EQUAL(847, sample); -} +#include "unity.h" +#include "Types.h" +#include "AdcHardware.h" +#include "MockAdcHardwareConfigurator.h" +#include "MockAdcTemperatureSensor.h" + +void setUp(void) +{ +} + +void tearDown(void) +{ +} + +void testInitShouldDelegateToConfiguratorAndTemperatureSensor(void) +{ + Adc_Reset_Expect(); + Adc_ConfigureMode_Expect(); + Adc_EnableTemperatureChannel_Expect(); + Adc_StartTemperatureSensorConversion_Expect(); + + AdcHardware_Init(); +} + +void testGetSampleCompleteShouldReturn_FALSE_WhenTemperatureSensorSampleReadyReturns_FALSE(void) +{ + Adc_TemperatureSensorSampleReady_ExpectAndReturn(FALSE); + TEST_ASSERT(!AdcHardware_GetSampleComplete()); +} + +void testGetSampleCompleteShouldReturn_TRUE_WhenTemperatureSensorSampleReadyReturns_TRUE(void) +{ + Adc_TemperatureSensorSampleReady_ExpectAndReturn(TRUE); + TEST_ASSERT(AdcHardware_GetSampleComplete()); +} + +void testGetSampleShouldDelegateToAdcTemperatureSensor(void) +{ + uint16 sample; + Adc_ReadTemperatureSensor_ExpectAndReturn(847); + + sample = AdcHardware_GetSample(); + TEST_ASSERT_EQUAL(847, sample); +} diff --git a/examples/temp_sensor/test/TestAdcHardwareConfigurator.c b/examples/temp_sensor/test/TestAdcHardwareConfigurator.c index 772df8b..c1feceb 100644 --- a/examples/temp_sensor/test/TestAdcHardwareConfigurator.c +++ b/examples/temp_sensor/test/TestAdcHardwareConfigurator.c @@ -1,43 +1,43 @@ -#include "unity.h" -#include "Types.h" -#include "AdcHardwareConfigurator.h" -#include "AT91SAM7X256.h" -#include "ModelConfig.h" - -AT91S_ADC AdcPeripheral; - -void setUp(void) -{ - -} - -void tearDown(void) -{ -} - -void testResetShouldResetTheAdcConverterPeripheral(void) -{ - AT91C_BASE_ADC->ADC_CR = 0; - Adc_Reset(); - TEST_ASSERT_EQUAL(AT91C_ADC_SWRST, AT91C_BASE_ADC->ADC_CR); -} - -void testConfigureModeShouldSetAdcModeRegisterAppropriately(void) -{ - uint32 prescaler = (MASTER_CLOCK / (2 * 2000000)) - 1; // 5MHz ADC clock - - AT91C_BASE_ADC->ADC_MR = 0; - - Adc_ConfigureMode(); - - TEST_ASSERT_EQUAL(prescaler, (AT91C_BASE_ADC->ADC_MR & AT91C_ADC_PRESCAL) >> 8); -} - -void testEnableTemperatureChannelShouldEnableTheAppropriateAdcInput(void) -{ - AT91C_BASE_ADC->ADC_CHER = 0; - - Adc_EnableTemperatureChannel(); - - TEST_ASSERT_EQUAL(0x1 << 4, AT91C_BASE_ADC->ADC_CHER); -} +#include "unity.h" +#include "Types.h" +#include "AdcHardwareConfigurator.h" +#include "AT91SAM7X256.h" +#include "ModelConfig.h" + +AT91S_ADC AdcPeripheral; + +void setUp(void) +{ + +} + +void tearDown(void) +{ +} + +void testResetShouldResetTheAdcConverterPeripheral(void) +{ + AT91C_BASE_ADC->ADC_CR = 0; + Adc_Reset(); + TEST_ASSERT_EQUAL(AT91C_ADC_SWRST, AT91C_BASE_ADC->ADC_CR); +} + +void testConfigureModeShouldSetAdcModeRegisterAppropriately(void) +{ + uint32 prescaler = (MASTER_CLOCK / (2 * 2000000)) - 1; // 5MHz ADC clock + + AT91C_BASE_ADC->ADC_MR = 0; + + Adc_ConfigureMode(); + + TEST_ASSERT_EQUAL(prescaler, (AT91C_BASE_ADC->ADC_MR & AT91C_ADC_PRESCAL) >> 8); +} + +void testEnableTemperatureChannelShouldEnableTheAppropriateAdcInput(void) +{ + AT91C_BASE_ADC->ADC_CHER = 0; + + Adc_EnableTemperatureChannel(); + + TEST_ASSERT_EQUAL(0x1 << 4, AT91C_BASE_ADC->ADC_CHER); +} diff --git a/examples/temp_sensor/test/TestAdcModel.c b/examples/temp_sensor/test/TestAdcModel.c index 887957c..f1dcb4a 100644 --- a/examples/temp_sensor/test/TestAdcModel.c +++ b/examples/temp_sensor/test/TestAdcModel.c @@ -1,33 +1,33 @@ -#include "unity.h" -#include "Types.h" -#include "AdcModel.h" -#include "MockTaskScheduler.h" -#include "MockTemperatureCalculator.h" -#include "MockTemperatureFilter.h" - -void setUp(void) -{ -} - -void tearDown(void) -{ -} - -void testDoGetSampleShouldReturn_FALSE_WhenTaskSchedulerReturns_FALSE(void) -{ - TaskScheduler_DoAdc_ExpectAndReturn(FALSE); - TEST_ASSERT_EQUAL(FALSE, AdcModel_DoGetSample()); -} - -void testDoGetSampleShouldReturn_TRUE_WhenTaskSchedulerReturns_TRUE(void) -{ - TaskScheduler_DoAdc_ExpectAndReturn(TRUE); - TEST_ASSERT_EQUAL(TRUE, AdcModel_DoGetSample()); -} - -void testProcessInputShouldDelegateToTemperatureCalculatorAndPassResultToFilter(void) -{ - TemperatureCalculator_Calculate_ExpectAndReturn(21473, 23.5f); - TemperatureFilter_ProcessInput_Expect(23.5f); - AdcModel_ProcessInput(21473); -} +#include "unity.h" +#include "Types.h" +#include "AdcModel.h" +#include "MockTaskScheduler.h" +#include "MockTemperatureCalculator.h" +#include "MockTemperatureFilter.h" + +void setUp(void) +{ +} + +void tearDown(void) +{ +} + +void testDoGetSampleShouldReturn_FALSE_WhenTaskSchedulerReturns_FALSE(void) +{ + TaskScheduler_DoAdc_ExpectAndReturn(FALSE); + TEST_ASSERT_EQUAL(FALSE, AdcModel_DoGetSample()); +} + +void testDoGetSampleShouldReturn_TRUE_WhenTaskSchedulerReturns_TRUE(void) +{ + TaskScheduler_DoAdc_ExpectAndReturn(TRUE); + TEST_ASSERT_EQUAL(TRUE, AdcModel_DoGetSample()); +} + +void testProcessInputShouldDelegateToTemperatureCalculatorAndPassResultToFilter(void) +{ + TemperatureCalculator_Calculate_ExpectAndReturn(21473, 23.5f); + TemperatureFilter_ProcessInput_Expect(23.5f); + AdcModel_ProcessInput(21473); +} diff --git a/examples/temp_sensor/test/TestAdcTemperatureSensor.c b/examples/temp_sensor/test/TestAdcTemperatureSensor.c index 0d8b108..0be339f 100644 --- a/examples/temp_sensor/test/TestAdcTemperatureSensor.c +++ b/examples/temp_sensor/test/TestAdcTemperatureSensor.c @@ -1,47 +1,47 @@ -#include "unity.h" -#include "Types.h" -#include "AdcTemperatureSensor.h" -#include "AT91SAM7X256.h" - -AT91S_ADC AdcPeripheral; - -void setUp(void) -{ -} - -void tearDown(void) -{ -} - -void testShouldStartTemperatureSensorConversionWhenTriggered(void) -{ - AT91C_BASE_ADC->ADC_CR = 0; - Adc_StartTemperatureSensorConversion(); - TEST_ASSERT_EQUAL(AT91C_ADC_START, AT91C_BASE_ADC->ADC_CR); -} - -void testTemperatureSensorSampleReadyShouldReturnChannelConversionCompletionStatus(void) -{ - AT91C_BASE_ADC->ADC_SR = 0; - TEST_ASSERT_EQUAL(FALSE, Adc_TemperatureSensorSampleReady()); - AT91C_BASE_ADC->ADC_SR = ~AT91C_ADC_EOC4; - TEST_ASSERT_EQUAL(FALSE, Adc_TemperatureSensorSampleReady()); - AT91C_BASE_ADC->ADC_SR = AT91C_ADC_EOC4; - TEST_ASSERT_EQUAL(TRUE, Adc_TemperatureSensorSampleReady()); - AT91C_BASE_ADC->ADC_SR = 0xffffffff; - TEST_ASSERT_EQUAL(TRUE, Adc_TemperatureSensorSampleReady()); -} - -void testReadTemperatureSensorShouldFetchAndTranslateLatestReadingToMillivolts(void) -{ - uint16 result; - - // ADC bit weight at 10-bit resolution with 3.0V reference = 2.9296875 mV/LSB - AT91C_BASE_ADC->ADC_CDR4 = 138; - result = Adc_ReadTemperatureSensor(); - TEST_ASSERT_EQUAL(404, result); - - AT91C_BASE_ADC->ADC_CDR4 = 854; - result = Adc_ReadTemperatureSensor(); - TEST_ASSERT_EQUAL(2502, result); -} +#include "unity.h" +#include "Types.h" +#include "AdcTemperatureSensor.h" +#include "AT91SAM7X256.h" + +AT91S_ADC AdcPeripheral; + +void setUp(void) +{ +} + +void tearDown(void) +{ +} + +void testShouldStartTemperatureSensorConversionWhenTriggered(void) +{ + AT91C_BASE_ADC->ADC_CR = 0; + Adc_StartTemperatureSensorConversion(); + TEST_ASSERT_EQUAL(AT91C_ADC_START, AT91C_BASE_ADC->ADC_CR); +} + +void testTemperatureSensorSampleReadyShouldReturnChannelConversionCompletionStatus(void) +{ + AT91C_BASE_ADC->ADC_SR = 0; + TEST_ASSERT_EQUAL(FALSE, Adc_TemperatureSensorSampleReady()); + AT91C_BASE_ADC->ADC_SR = ~AT91C_ADC_EOC4; + TEST_ASSERT_EQUAL(FALSE, Adc_TemperatureSensorSampleReady()); + AT91C_BASE_ADC->ADC_SR = AT91C_ADC_EOC4; + TEST_ASSERT_EQUAL(TRUE, Adc_TemperatureSensorSampleReady()); + AT91C_BASE_ADC->ADC_SR = 0xffffffff; + TEST_ASSERT_EQUAL(TRUE, Adc_TemperatureSensorSampleReady()); +} + +void testReadTemperatureSensorShouldFetchAndTranslateLatestReadingToMillivolts(void) +{ + uint16 result; + + // ADC bit weight at 10-bit resolution with 3.0V reference = 2.9296875 mV/LSB + AT91C_BASE_ADC->ADC_CDR4 = 138; + result = Adc_ReadTemperatureSensor(); + TEST_ASSERT_EQUAL(404, result); + + AT91C_BASE_ADC->ADC_CDR4 = 854; + result = Adc_ReadTemperatureSensor(); + TEST_ASSERT_EQUAL(2502, result); +} diff --git a/examples/temp_sensor/test/TestExecutor.c b/examples/temp_sensor/test/TestExecutor.c index df9cd6b..8e48326 100644 --- a/examples/temp_sensor/test/TestExecutor.c +++ b/examples/temp_sensor/test/TestExecutor.c @@ -1,36 +1,36 @@ -#include "unity.h" -#include "Types.h" -#include "Executor.h" -#include "MockModel.h" -#include "MockUsartConductor.h" -#include "MockAdcConductor.h" -#include "MockTimerConductor.h" -#include "MockIntrinsicsWrapper.h" - -void setUp(void) -{ -} - -void tearDown(void) -{ -} - -void testInitShouldCallInitOfAllConductorsAndTheModel(void) -{ - Model_Init_Expect(); - UsartConductor_Init_Expect(); - AdcConductor_Init_Expect(); - TimerConductor_Init_Expect(); - Interrupt_Enable_Expect(); - - Executor_Init(); -} - -void testRunShouldCallRunForEachConductorAndReturnTrueAlways(void) -{ - UsartConductor_Run_Expect(); - TimerConductor_Run_Expect(); - AdcConductor_Run_Expect(); - - TEST_ASSERT_EQUAL(TRUE, Executor_Run()); -} +#include "unity.h" +#include "Types.h" +#include "Executor.h" +#include "MockModel.h" +#include "MockUsartConductor.h" +#include "MockAdcConductor.h" +#include "MockTimerConductor.h" +#include "MockIntrinsicsWrapper.h" + +void setUp(void) +{ +} + +void tearDown(void) +{ +} + +void testInitShouldCallInitOfAllConductorsAndTheModel(void) +{ + Model_Init_Expect(); + UsartConductor_Init_Expect(); + AdcConductor_Init_Expect(); + TimerConductor_Init_Expect(); + Interrupt_Enable_Expect(); + + Executor_Init(); +} + +void testRunShouldCallRunForEachConductorAndReturnTrueAlways(void) +{ + UsartConductor_Run_Expect(); + TimerConductor_Run_Expect(); + AdcConductor_Run_Expect(); + + TEST_ASSERT_EQUAL(TRUE, Executor_Run()); +} diff --git a/examples/temp_sensor/test/TestMain.c b/examples/temp_sensor/test/TestMain.c index 48eb48c..baf3382 100644 --- a/examples/temp_sensor/test/TestMain.c +++ b/examples/temp_sensor/test/TestMain.c @@ -1,24 +1,24 @@ -#include "unity.h" -#include "Types.h" -#include "MockExecutor.h" -#include "Main.h" - -void setUp(void) -{ -} - -void tearDown(void) -{ -} - -void testMainShouldCallExecutorInitAndContinueToCallExecutorRunUntilHalted(void) -{ - Executor_Init_Expect(); - Executor_Run_ExpectAndReturn(TRUE); - Executor_Run_ExpectAndReturn(TRUE); - Executor_Run_ExpectAndReturn(TRUE); - Executor_Run_ExpectAndReturn(TRUE); - Executor_Run_ExpectAndReturn(FALSE); - - AppMain(); -} +#include "unity.h" +#include "Types.h" +#include "MockExecutor.h" +#include "Main.h" + +void setUp(void) +{ +} + +void tearDown(void) +{ +} + +void testMainShouldCallExecutorInitAndContinueToCallExecutorRunUntilHalted(void) +{ + Executor_Init_Expect(); + Executor_Run_ExpectAndReturn(TRUE); + Executor_Run_ExpectAndReturn(TRUE); + Executor_Run_ExpectAndReturn(TRUE); + Executor_Run_ExpectAndReturn(TRUE); + Executor_Run_ExpectAndReturn(FALSE); + + AppMain(); +} diff --git a/examples/temp_sensor/test/TestModel.c b/examples/temp_sensor/test/TestModel.c index 03aa028..59dda1d 100644 --- a/examples/temp_sensor/test/TestModel.c +++ b/examples/temp_sensor/test/TestModel.c @@ -1,20 +1,20 @@ -#include "unity.h" -#include "Types.h" -#include "Model.h" -#include "MockTaskScheduler.h" -#include "MockTemperatureFilter.h" - -void setUp(void) -{ -} - -void tearDown(void) -{ -} - -void testInitShouldCallSchedulerAndTemperatureFilterInit(void) -{ - TaskScheduler_Init_Expect(); - TemperatureFilter_Init_Expect(); - Model_Init(); -} +#include "unity.h" +#include "Types.h" +#include "Model.h" +#include "MockTaskScheduler.h" +#include "MockTemperatureFilter.h" + +void setUp(void) +{ +} + +void tearDown(void) +{ +} + +void testInitShouldCallSchedulerAndTemperatureFilterInit(void) +{ + TaskScheduler_Init_Expect(); + TemperatureFilter_Init_Expect(); + Model_Init(); +} diff --git a/examples/temp_sensor/test/TestTaskScheduler.c b/examples/temp_sensor/test/TestTaskScheduler.c index 83c2cb8..29d1edf 100644 --- a/examples/temp_sensor/test/TestTaskScheduler.c +++ b/examples/temp_sensor/test/TestTaskScheduler.c @@ -1,104 +1,104 @@ -#include "unity.h" -#include "Types.h" -#include "TaskScheduler.h" - -void setUp(void) -{ - TaskScheduler_Init(); -} - -void tearDown(void) -{ -} - -void testShouldScheduleUsartTaskAfter1000ms(void) -{ - TEST_ASSERT_EQUAL(FALSE, TaskScheduler_DoUsart()); - - TaskScheduler_Update(999); - TEST_ASSERT_EQUAL(FALSE, TaskScheduler_DoUsart()); - - TaskScheduler_Update(1000); - TEST_ASSERT_EQUAL(TRUE, TaskScheduler_DoUsart()); -} - -void testShouldClearUsartDoFlagAfterReported(void) -{ - TEST_ASSERT_EQUAL(FALSE, TaskScheduler_DoUsart()); - TaskScheduler_Update(1000); - TEST_ASSERT_EQUAL(TRUE, TaskScheduler_DoUsart()); - TEST_ASSERT_EQUAL(FALSE, TaskScheduler_DoUsart()); -} - -void testShouldScheduleUsartTaskEvery1000ms(void) -{ - TEST_ASSERT_EQUAL(FALSE, TaskScheduler_DoUsart()); - - TaskScheduler_Update(1300); - TEST_ASSERT_EQUAL(TRUE, TaskScheduler_DoUsart()); - - TaskScheduler_Update(2000); - TEST_ASSERT_EQUAL(TRUE, TaskScheduler_DoUsart()); - - TaskScheduler_Update(3100); - TEST_ASSERT_EQUAL(TRUE, TaskScheduler_DoUsart()); -} - -void testShouldScheduleUsartTaskOnlyOncePerPeriod(void) -{ - TEST_ASSERT_EQUAL(FALSE, TaskScheduler_DoUsart()); - TaskScheduler_Update(1000); - TEST_ASSERT_EQUAL(TRUE, TaskScheduler_DoUsart()); - TaskScheduler_Update(1001); - TEST_ASSERT_EQUAL(FALSE, TaskScheduler_DoUsart()); - TaskScheduler_Update(1999); - TEST_ASSERT_EQUAL(FALSE, TaskScheduler_DoUsart()); - TaskScheduler_Update(2000); - TEST_ASSERT_EQUAL(TRUE, TaskScheduler_DoUsart()); -} - -void testShouldScheduleAdcTaskAfter100ms(void) -{ - TEST_ASSERT_EQUAL(FALSE, TaskScheduler_DoAdc()); - - TaskScheduler_Update(99); - TEST_ASSERT_EQUAL(FALSE, TaskScheduler_DoAdc()); - - TaskScheduler_Update(100); - TEST_ASSERT_EQUAL(TRUE, TaskScheduler_DoAdc()); -} - -void testShouldClearAdcDoFlagAfterReported(void) -{ - TEST_ASSERT_EQUAL(FALSE, TaskScheduler_DoAdc()); - TaskScheduler_Update(100); - TEST_ASSERT_EQUAL(TRUE, TaskScheduler_DoAdc()); - TEST_ASSERT_EQUAL(FALSE, TaskScheduler_DoAdc()); -} - -void testShouldScheduleAdcTaskEvery100ms(void) -{ - TEST_ASSERT_EQUAL(FALSE, TaskScheduler_DoAdc()); - - TaskScheduler_Update(121); - TEST_ASSERT_EQUAL(TRUE, TaskScheduler_DoAdc()); - - TaskScheduler_Update(200); - TEST_ASSERT_EQUAL(TRUE, TaskScheduler_DoAdc()); - - TaskScheduler_Update(356); - TEST_ASSERT_EQUAL(TRUE, TaskScheduler_DoAdc()); -} - -void testShouldScheduleAdcTaskOnlyOncePerPeriod(void) -{ - TEST_ASSERT_EQUAL(FALSE, TaskScheduler_DoAdc()); - TaskScheduler_Update(100); - TEST_ASSERT_EQUAL(TRUE, TaskScheduler_DoAdc()); - TaskScheduler_Update(101); - TEST_ASSERT_EQUAL(FALSE, TaskScheduler_DoAdc()); - TaskScheduler_Update(199); - TEST_ASSERT_EQUAL(FALSE, TaskScheduler_DoAdc()); - TaskScheduler_Update(200); - TEST_ASSERT_EQUAL(TRUE, TaskScheduler_DoAdc()); -} +#include "unity.h" +#include "Types.h" +#include "TaskScheduler.h" + +void setUp(void) +{ + TaskScheduler_Init(); +} + +void tearDown(void) +{ +} + +void testShouldScheduleUsartTaskAfter1000ms(void) +{ + TEST_ASSERT_EQUAL(FALSE, TaskScheduler_DoUsart()); + + TaskScheduler_Update(999); + TEST_ASSERT_EQUAL(FALSE, TaskScheduler_DoUsart()); + + TaskScheduler_Update(1000); + TEST_ASSERT_EQUAL(TRUE, TaskScheduler_DoUsart()); +} + +void testShouldClearUsartDoFlagAfterReported(void) +{ + TEST_ASSERT_EQUAL(FALSE, TaskScheduler_DoUsart()); + TaskScheduler_Update(1000); + TEST_ASSERT_EQUAL(TRUE, TaskScheduler_DoUsart()); + TEST_ASSERT_EQUAL(FALSE, TaskScheduler_DoUsart()); +} + +void testShouldScheduleUsartTaskEvery1000ms(void) +{ + TEST_ASSERT_EQUAL(FALSE, TaskScheduler_DoUsart()); + + TaskScheduler_Update(1300); + TEST_ASSERT_EQUAL(TRUE, TaskScheduler_DoUsart()); + + TaskScheduler_Update(2000); + TEST_ASSERT_EQUAL(TRUE, TaskScheduler_DoUsart()); + + TaskScheduler_Update(3100); + TEST_ASSERT_EQUAL(TRUE, TaskScheduler_DoUsart()); +} + +void testShouldScheduleUsartTaskOnlyOncePerPeriod(void) +{ + TEST_ASSERT_EQUAL(FALSE, TaskScheduler_DoUsart()); + TaskScheduler_Update(1000); + TEST_ASSERT_EQUAL(TRUE, TaskScheduler_DoUsart()); + TaskScheduler_Update(1001); + TEST_ASSERT_EQUAL(FALSE, TaskScheduler_DoUsart()); + TaskScheduler_Update(1999); + TEST_ASSERT_EQUAL(FALSE, TaskScheduler_DoUsart()); + TaskScheduler_Update(2000); + TEST_ASSERT_EQUAL(TRUE, TaskScheduler_DoUsart()); +} + +void testShouldScheduleAdcTaskAfter100ms(void) +{ + TEST_ASSERT_EQUAL(FALSE, TaskScheduler_DoAdc()); + + TaskScheduler_Update(99); + TEST_ASSERT_EQUAL(FALSE, TaskScheduler_DoAdc()); + + TaskScheduler_Update(100); + TEST_ASSERT_EQUAL(TRUE, TaskScheduler_DoAdc()); +} + +void testShouldClearAdcDoFlagAfterReported(void) +{ + TEST_ASSERT_EQUAL(FALSE, TaskScheduler_DoAdc()); + TaskScheduler_Update(100); + TEST_ASSERT_EQUAL(TRUE, TaskScheduler_DoAdc()); + TEST_ASSERT_EQUAL(FALSE, TaskScheduler_DoAdc()); +} + +void testShouldScheduleAdcTaskEvery100ms(void) +{ + TEST_ASSERT_EQUAL(FALSE, TaskScheduler_DoAdc()); + + TaskScheduler_Update(121); + TEST_ASSERT_EQUAL(TRUE, TaskScheduler_DoAdc()); + + TaskScheduler_Update(200); + TEST_ASSERT_EQUAL(TRUE, TaskScheduler_DoAdc()); + + TaskScheduler_Update(356); + TEST_ASSERT_EQUAL(TRUE, TaskScheduler_DoAdc()); +} + +void testShouldScheduleAdcTaskOnlyOncePerPeriod(void) +{ + TEST_ASSERT_EQUAL(FALSE, TaskScheduler_DoAdc()); + TaskScheduler_Update(100); + TEST_ASSERT_EQUAL(TRUE, TaskScheduler_DoAdc()); + TaskScheduler_Update(101); + TEST_ASSERT_EQUAL(FALSE, TaskScheduler_DoAdc()); + TaskScheduler_Update(199); + TEST_ASSERT_EQUAL(FALSE, TaskScheduler_DoAdc()); + TaskScheduler_Update(200); + TEST_ASSERT_EQUAL(TRUE, TaskScheduler_DoAdc()); +} diff --git a/examples/temp_sensor/test/TestTemperatureCalculator.c b/examples/temp_sensor/test/TestTemperatureCalculator.c index b85b4f8..dbb7dea 100644 --- a/examples/temp_sensor/test/TestTemperatureCalculator.c +++ b/examples/temp_sensor/test/TestTemperatureCalculator.c @@ -1,33 +1,33 @@ -#include "unity.h" -#include "Types.h" -#include "TemperatureCalculator.h" -#include - -void setUp(void) -{ -} - -void tearDown(void) -{ -} - -void testTemperatureCalculatorShouldCalculateTemperatureFromMillivolts(void) -{ - float result; - - // Series resistor is 5k Ohms; Reference voltage is 3.0V - // R(t) = A * e^(B*t); R is resistance of thermisor; t is temperature in C - result = TemperatureCalculator_Calculate(1000); - TEST_ASSERT_FLOAT_WITHIN(0.01f, 25.0f, result); - - result = TemperatureCalculator_Calculate(2985); - TEST_ASSERT_FLOAT_WITHIN(0.01f, 68.317f, result); - - result = TemperatureCalculator_Calculate(3); - TEST_ASSERT_FLOAT_WITHIN(0.01f, -19.96f, result); -} - -void testShouldReturnNegativeInfinityWhen_0_millivoltsInput(void) -{ - TEST_ASSERT_FLOAT_WITHIN(0.0000001f, -INFINITY, TemperatureCalculator_Calculate(0)); -} +#include "unity.h" +#include "Types.h" +#include "TemperatureCalculator.h" +#include + +void setUp(void) +{ +} + +void tearDown(void) +{ +} + +void testTemperatureCalculatorShouldCalculateTemperatureFromMillivolts(void) +{ + float result; + + // Series resistor is 5k Ohms; Reference voltage is 3.0V + // R(t) = A * e^(B*t); R is resistance of thermisor; t is temperature in C + result = TemperatureCalculator_Calculate(1000); + TEST_ASSERT_FLOAT_WITHIN(0.01f, 25.0f, result); + + result = TemperatureCalculator_Calculate(2985); + TEST_ASSERT_FLOAT_WITHIN(0.01f, 68.317f, result); + + result = TemperatureCalculator_Calculate(3); + TEST_ASSERT_FLOAT_WITHIN(0.01f, -19.96f, result); +} + +void testShouldReturnNegativeInfinityWhen_0_millivoltsInput(void) +{ + TEST_ASSERT_FLOAT_WITHIN(0.0000001f, -INFINITY, TemperatureCalculator_Calculate(0)); +} diff --git a/examples/temp_sensor/test/TestTemperatureFilter.c b/examples/temp_sensor/test/TestTemperatureFilter.c index ace33a9..58fb178 100644 --- a/examples/temp_sensor/test/TestTemperatureFilter.c +++ b/examples/temp_sensor/test/TestTemperatureFilter.c @@ -1,69 +1,69 @@ -#include "unity.h" -#include "Types.h" -#include "TemperatureFilter.h" -#include - -void setUp(void) -{ - TemperatureFilter_Init(); -} - -void tearDown(void) -{ -} - -void testShouldInitializeTemeratureToInvalidValue(void) -{ - TemperatureFilter_Init(); - TEST_ASSERT_FLOAT_WITHIN(0.0001f, -INFINITY, TemperatureFilter_GetTemperatureInCelcius()); -} - -void testShouldInitializeTemperatureAfterCallToInit(void) -{ - TemperatureFilter_Init(); - TemperatureFilter_ProcessInput(17.8f); - TEST_ASSERT_FLOAT_WITHIN(0.0001f, 17.8f, TemperatureFilter_GetTemperatureInCelcius()); - - TemperatureFilter_Init(); - TemperatureFilter_ProcessInput(32.6f); - TEST_ASSERT_FLOAT_WITHIN(0.0001f, 32.6f, TemperatureFilter_GetTemperatureInCelcius()); -} - -void setValueAndVerifyResponse(float input, float response) -{ - float actual; - TemperatureFilter_ProcessInput(input); - actual = TemperatureFilter_GetTemperatureInCelcius(); - TEST_ASSERT_FLOAT_WITHIN(0.0001f, response, actual); -} - -void testShouldWeightEachSubsequentValueBy25PercentAfterInitialValue(void) -{ - TemperatureFilter_Init(); - setValueAndVerifyResponse(0.0f, 0.0f); - setValueAndVerifyResponse(10.0f, 2.5f); - setValueAndVerifyResponse(10.0f, 4.375f); - setValueAndVerifyResponse(10.0f, 5.78125f); - - TemperatureFilter_Init(); - setValueAndVerifyResponse(100.0f, 100.0f); - setValueAndVerifyResponse(0.0f, 75.0f); - setValueAndVerifyResponse(0.0f, 56.25f); - setValueAndVerifyResponse(0.0f, 42.1875f); -} - -void setInvalidTemperatureAndVerifyReinitialized(float invalidTemperature) -{ - TemperatureFilter_Init(); - setValueAndVerifyResponse(100.0f, 100.0f); - setValueAndVerifyResponse(invalidTemperature, -INFINITY); - setValueAndVerifyResponse(14.3f, 14.3f); -} - -void testShouldResetAverageIfPassedInfinityOrInvalidValue(void) -{ - setInvalidTemperatureAndVerifyReinitialized(-INFINITY); - setInvalidTemperatureAndVerifyReinitialized(+INFINITY); - setInvalidTemperatureAndVerifyReinitialized(+NAN); - setInvalidTemperatureAndVerifyReinitialized(-NAN); -} +#include "unity.h" +#include "Types.h" +#include "TemperatureFilter.h" +#include + +void setUp(void) +{ + TemperatureFilter_Init(); +} + +void tearDown(void) +{ +} + +void testShouldInitializeTemeratureToInvalidValue(void) +{ + TemperatureFilter_Init(); + TEST_ASSERT_FLOAT_WITHIN(0.0001f, -INFINITY, TemperatureFilter_GetTemperatureInCelcius()); +} + +void testShouldInitializeTemperatureAfterCallToInit(void) +{ + TemperatureFilter_Init(); + TemperatureFilter_ProcessInput(17.8f); + TEST_ASSERT_FLOAT_WITHIN(0.0001f, 17.8f, TemperatureFilter_GetTemperatureInCelcius()); + + TemperatureFilter_Init(); + TemperatureFilter_ProcessInput(32.6f); + TEST_ASSERT_FLOAT_WITHIN(0.0001f, 32.6f, TemperatureFilter_GetTemperatureInCelcius()); +} + +void setValueAndVerifyResponse(float input, float response) +{ + float actual; + TemperatureFilter_ProcessInput(input); + actual = TemperatureFilter_GetTemperatureInCelcius(); + TEST_ASSERT_FLOAT_WITHIN(0.0001f, response, actual); +} + +void testShouldWeightEachSubsequentValueBy25PercentAfterInitialValue(void) +{ + TemperatureFilter_Init(); + setValueAndVerifyResponse(0.0f, 0.0f); + setValueAndVerifyResponse(10.0f, 2.5f); + setValueAndVerifyResponse(10.0f, 4.375f); + setValueAndVerifyResponse(10.0f, 5.78125f); + + TemperatureFilter_Init(); + setValueAndVerifyResponse(100.0f, 100.0f); + setValueAndVerifyResponse(0.0f, 75.0f); + setValueAndVerifyResponse(0.0f, 56.25f); + setValueAndVerifyResponse(0.0f, 42.1875f); +} + +void setInvalidTemperatureAndVerifyReinitialized(float invalidTemperature) +{ + TemperatureFilter_Init(); + setValueAndVerifyResponse(100.0f, 100.0f); + setValueAndVerifyResponse(invalidTemperature, -INFINITY); + setValueAndVerifyResponse(14.3f, 14.3f); +} + +void testShouldResetAverageIfPassedInfinityOrInvalidValue(void) +{ + setInvalidTemperatureAndVerifyReinitialized(-INFINITY); + setInvalidTemperatureAndVerifyReinitialized(+INFINITY); + setInvalidTemperatureAndVerifyReinitialized(+NAN); + setInvalidTemperatureAndVerifyReinitialized(-NAN); +} diff --git a/examples/temp_sensor/test/TestTimerConductor.c b/examples/temp_sensor/test/TestTimerConductor.c index 8d9cbfd..8064a8c 100644 --- a/examples/temp_sensor/test/TestTimerConductor.c +++ b/examples/temp_sensor/test/TestTimerConductor.c @@ -1,32 +1,32 @@ -#include "unity.h" -#include "Types.h" -#include "TimerConductor.h" -#include "MockTimerHardware.h" -#include "MockTimerModel.h" -#include "MockTimerInterruptHandler.h" - -void setUp(void) -{ -} - -void tearDown(void) -{ -} - -void testInitShouldCallHardwareInit(void) -{ - TimerHardware_Init_Expect(); - - TimerConductor_Init(); -} - -void testRunShouldGetSystemTimeAndPassOnToModelForEventScheduling(void) -{ - Timer_GetSystemTime_ExpectAndReturn(1230); - TimerModel_UpdateTime_Expect(1230); - TimerConductor_Run(); - - Timer_GetSystemTime_ExpectAndReturn(837460); - TimerModel_UpdateTime_Expect(837460); - TimerConductor_Run(); -} +#include "unity.h" +#include "Types.h" +#include "TimerConductor.h" +#include "MockTimerHardware.h" +#include "MockTimerModel.h" +#include "MockTimerInterruptHandler.h" + +void setUp(void) +{ +} + +void tearDown(void) +{ +} + +void testInitShouldCallHardwareInit(void) +{ + TimerHardware_Init_Expect(); + + TimerConductor_Init(); +} + +void testRunShouldGetSystemTimeAndPassOnToModelForEventScheduling(void) +{ + Timer_GetSystemTime_ExpectAndReturn(1230); + TimerModel_UpdateTime_Expect(1230); + TimerConductor_Run(); + + Timer_GetSystemTime_ExpectAndReturn(837460); + TimerModel_UpdateTime_Expect(837460); + TimerConductor_Run(); +} diff --git a/examples/temp_sensor/test/TestTimerConfigurator.c b/examples/temp_sensor/test/TestTimerConfigurator.c index 045e663..5c7d4e0 100644 --- a/examples/temp_sensor/test/TestTimerConfigurator.c +++ b/examples/temp_sensor/test/TestTimerConfigurator.c @@ -1,112 +1,112 @@ -#include "unity.h" -#include "Types.h" -#include "TimerConfigurator.h" -#include "AT91SAM7X256.h" -#include "MockTimerInterruptConfigurator.h" - -AT91S_PMC PmcPeripheral; -AT91S_TC TimerCounter0Peripheral; -AT91S_PIO PioBPeripheral; - -void setUp(void) -{ -} - -void tearDown(void) -{ -} - -void testEnablePeripheralClocksShouldEnableClockToTimer0Peripheral(void) -{ - AT91C_BASE_PMC->PMC_PCER = 0; - Timer_EnablePeripheralClocks(); - TEST_ASSERT_EQUAL( - TIMER0_CLOCK_ENABLE, - AT91C_BASE_PMC->PMC_PCER & TIMER0_CLOCK_ENABLE); -} - -void testEnablePeripheralClocksShouldEnableClockToPIOBPeripheral(void) -{ - AT91C_BASE_PMC->PMC_PCER = 0; - Timer_EnablePeripheralClocks(); - TEST_ASSERT_EQUAL( - PIOB_CLOCK_ENABLE, - AT91C_BASE_PMC->PMC_PCER & PIOB_CLOCK_ENABLE); -} - -void testResetShouldSetTimer0ClockDisableBit_DisableTimer0Interrupts_ClearStatusRegister(void) -{ - AT91C_BASE_TC0->TC_CCR = 0; - AT91C_BASE_TC0->TC_IDR = 0; - AT91C_BASE_TC0->TC_SR = 0xFFFFFFFF; - Timer_Reset(); - TEST_ASSERT_EQUAL(0x00000002, AT91C_BASE_TC0->TC_CCR); - TEST_ASSERT_EQUAL(0xffffffff, AT91C_BASE_TC0->TC_IDR); - // CANNOT BE VERIFIED!! TEST_ASSERT_EQUAL(0X00000000, AT91C_BASE_TC0->TC_SR); -} - -void testEnableOutputPinShouldEnable_TIOA0_DigitalOutput(void) -{ - AT91C_BASE_PIOB->PIO_PDR = 0; - Timer_EnableOutputPin(); - TEST_ASSERT_EQUAL(TIOA0_PIN_MASK, AT91C_BASE_PIOB->PIO_PDR); -} - -void testConfigureModeShouldConfigureTimer0ClockSourceForMasterClockDividedBy1024(void) -{ - AT91C_BASE_TC0->TC_CMR = 0; - Timer_ConfigureMode(); - TEST_ASSERT_EQUAL(0x00000004, AT91C_BASE_TC0->TC_CMR & 0x00000007); -} - -void testConfigureModeShouldConfigureTimer0ForWaveGeneration(void) -{ - AT91C_BASE_TC0->TC_CMR = 0; - Timer_ConfigureMode(); - TEST_ASSERT_EQUAL(0x00008000, AT91C_BASE_TC0->TC_CMR & 0x00008000); -} - -void testConfigureModeShouldConfigureTimer0ForUpModeWithAutomaticTriggerOnRCCompare(void) -{ - AT91C_BASE_TC0->TC_CMR = 0; - Timer_ConfigureMode(); - TEST_ASSERT_EQUAL(0x00004000, AT91C_BASE_TC0->TC_CMR & 0x00006000); -} - -void testConfigureModeShouldConfigureTimer0ToToggleTIOAOnRCCompare(void) -{ - AT91C_BASE_TC0->TC_CMR = 0; - Timer_ConfigureMode(); - TEST_ASSERT_EQUAL(0x000C0000, AT91C_BASE_TC0->TC_CMR & 0x000C0000); -} - -void testConfigurePeriodShouldConfigureRegisterCFor10msInterval(void) -{ - AT91C_BASE_TC0->TC_RC = 0; - Timer_ConfigurePeriod(); - TEST_ASSERT_EQUAL(469, AT91C_BASE_TC0->TC_RC); -} - -void testEnableShouldSetEnableFlagForTimer0(void) -{ - AT91C_BASE_TC0->TC_CCR = 0; - Timer_Enable(); - TEST_ASSERT_EQUAL_INT(1, AT91C_BASE_TC0->TC_CCR); -} - -void testConfigureInterruptHandler(void) -{ - Timer_DisableInterrupt_Expect(); - Timer_ResetSystemTime_Expect(); - Timer_ConfigureInterrupt_Expect(); - Timer_EnableInterrupt_Expect(); - - Timer_ConfigureInterruptHandler(); -} - -void testStartShouldSetSoftwareTriggerFlag(void) -{ - AT91C_BASE_TC0->TC_CCR = 0; - Timer_Start(); - TEST_ASSERT_EQUAL(0x04, AT91C_BASE_TC0->TC_CCR); -} +#include "unity.h" +#include "Types.h" +#include "TimerConfigurator.h" +#include "AT91SAM7X256.h" +#include "MockTimerInterruptConfigurator.h" + +AT91S_PMC PmcPeripheral; +AT91S_TC TimerCounter0Peripheral; +AT91S_PIO PioBPeripheral; + +void setUp(void) +{ +} + +void tearDown(void) +{ +} + +void testEnablePeripheralClocksShouldEnableClockToTimer0Peripheral(void) +{ + AT91C_BASE_PMC->PMC_PCER = 0; + Timer_EnablePeripheralClocks(); + TEST_ASSERT_EQUAL( + TIMER0_CLOCK_ENABLE, + AT91C_BASE_PMC->PMC_PCER & TIMER0_CLOCK_ENABLE); +} + +void testEnablePeripheralClocksShouldEnableClockToPIOBPeripheral(void) +{ + AT91C_BASE_PMC->PMC_PCER = 0; + Timer_EnablePeripheralClocks(); + TEST_ASSERT_EQUAL( + PIOB_CLOCK_ENABLE, + AT91C_BASE_PMC->PMC_PCER & PIOB_CLOCK_ENABLE); +} + +void testResetShouldSetTimer0ClockDisableBit_DisableTimer0Interrupts_ClearStatusRegister(void) +{ + AT91C_BASE_TC0->TC_CCR = 0; + AT91C_BASE_TC0->TC_IDR = 0; + AT91C_BASE_TC0->TC_SR = 0xFFFFFFFF; + Timer_Reset(); + TEST_ASSERT_EQUAL(0x00000002, AT91C_BASE_TC0->TC_CCR); + TEST_ASSERT_EQUAL(0xffffffff, AT91C_BASE_TC0->TC_IDR); + // CANNOT BE VERIFIED!! TEST_ASSERT_EQUAL(0X00000000, AT91C_BASE_TC0->TC_SR); +} + +void testEnableOutputPinShouldEnable_TIOA0_DigitalOutput(void) +{ + AT91C_BASE_PIOB->PIO_PDR = 0; + Timer_EnableOutputPin(); + TEST_ASSERT_EQUAL(TIOA0_PIN_MASK, AT91C_BASE_PIOB->PIO_PDR); +} + +void testConfigureModeShouldConfigureTimer0ClockSourceForMasterClockDividedBy1024(void) +{ + AT91C_BASE_TC0->TC_CMR = 0; + Timer_ConfigureMode(); + TEST_ASSERT_EQUAL(0x00000004, AT91C_BASE_TC0->TC_CMR & 0x00000007); +} + +void testConfigureModeShouldConfigureTimer0ForWaveGeneration(void) +{ + AT91C_BASE_TC0->TC_CMR = 0; + Timer_ConfigureMode(); + TEST_ASSERT_EQUAL(0x00008000, AT91C_BASE_TC0->TC_CMR & 0x00008000); +} + +void testConfigureModeShouldConfigureTimer0ForUpModeWithAutomaticTriggerOnRCCompare(void) +{ + AT91C_BASE_TC0->TC_CMR = 0; + Timer_ConfigureMode(); + TEST_ASSERT_EQUAL(0x00004000, AT91C_BASE_TC0->TC_CMR & 0x00006000); +} + +void testConfigureModeShouldConfigureTimer0ToToggleTIOAOnRCCompare(void) +{ + AT91C_BASE_TC0->TC_CMR = 0; + Timer_ConfigureMode(); + TEST_ASSERT_EQUAL(0x000C0000, AT91C_BASE_TC0->TC_CMR & 0x000C0000); +} + +void testConfigurePeriodShouldConfigureRegisterCFor10msInterval(void) +{ + AT91C_BASE_TC0->TC_RC = 0; + Timer_ConfigurePeriod(); + TEST_ASSERT_EQUAL(469, AT91C_BASE_TC0->TC_RC); +} + +void testEnableShouldSetEnableFlagForTimer0(void) +{ + AT91C_BASE_TC0->TC_CCR = 0; + Timer_Enable(); + TEST_ASSERT_EQUAL_INT(1, AT91C_BASE_TC0->TC_CCR); +} + +void testConfigureInterruptHandler(void) +{ + Timer_DisableInterrupt_Expect(); + Timer_ResetSystemTime_Expect(); + Timer_ConfigureInterrupt_Expect(); + Timer_EnableInterrupt_Expect(); + + Timer_ConfigureInterruptHandler(); +} + +void testStartShouldSetSoftwareTriggerFlag(void) +{ + AT91C_BASE_TC0->TC_CCR = 0; + Timer_Start(); + TEST_ASSERT_EQUAL(0x04, AT91C_BASE_TC0->TC_CCR); +} diff --git a/examples/temp_sensor/test/TestTimerHardware.c b/examples/temp_sensor/test/TestTimerHardware.c index fb22f9f..16339d0 100644 --- a/examples/temp_sensor/test/TestTimerHardware.c +++ b/examples/temp_sensor/test/TestTimerHardware.c @@ -1,26 +1,26 @@ -#include "unity.h" -#include "Types.h" -#include "TimerHardware.h" -#include "MockTimerConfigurator.h" - -void setUp(void) -{ -} - -void tearDown(void) -{ -} - -void testInitShouldDelegateAppropriatelyToConfigurator(void) -{ - Timer_EnablePeripheralClocks_Expect(); - Timer_Reset_Expect(); - Timer_ConfigureMode_Expect(); - Timer_ConfigurePeriod_Expect(); - Timer_EnableOutputPin_Expect(); - Timer_Enable_Expect(); - Timer_ConfigureInterruptHandler_Expect(); - Timer_Start_Expect(); - - TimerHardware_Init(); -} +#include "unity.h" +#include "Types.h" +#include "TimerHardware.h" +#include "MockTimerConfigurator.h" + +void setUp(void) +{ +} + +void tearDown(void) +{ +} + +void testInitShouldDelegateAppropriatelyToConfigurator(void) +{ + Timer_EnablePeripheralClocks_Expect(); + Timer_Reset_Expect(); + Timer_ConfigureMode_Expect(); + Timer_ConfigurePeriod_Expect(); + Timer_EnableOutputPin_Expect(); + Timer_Enable_Expect(); + Timer_ConfigureInterruptHandler_Expect(); + Timer_Start_Expect(); + + TimerHardware_Init(); +} diff --git a/examples/temp_sensor/test/TestTimerInterruptConfigurator.c b/examples/temp_sensor/test/TestTimerInterruptConfigurator.c index 8d98278..13c35f4 100644 --- a/examples/temp_sensor/test/TestTimerInterruptConfigurator.c +++ b/examples/temp_sensor/test/TestTimerInterruptConfigurator.c @@ -1,78 +1,78 @@ -#include "unity.h" -#include "Types.h" -#include "TimerInterruptConfigurator.h" -#include "MockTimerInterruptHandler.h" -#include "AT91SAM7X256.h" - -AT91S_AIC AicPeripheral; -AT91S_TC TimerCounter0Peripheral; - -void setUp(void) -{ -} - -void tearDown(void) -{ -} - -void test_TIMER0_ID_MASK_ShouldBeCorrect(void) -{ - TEST_ASSERT_EQUAL(((uint32)0x1) << AT91C_ID_TC0, TIMER0_ID_MASK); -} - -void testDisableInterruptDisablesTimer0InterruptInTheInterruptController(void) -{ - AT91C_BASE_AIC->AIC_IDCR = 0; - Timer_DisableInterrupt(); - TEST_ASSERT_EQUAL(TIMER0_ID_MASK, AT91C_BASE_AIC->AIC_IDCR); -} - -void testResetSystemTimeDelegatesTo_Timer_SetSystemTime_Appropriately(void) -{ - Timer_SetSystemTime_Expect(0); - Timer_ResetSystemTime(); -} - -void testConfigureInterruptShouldSetInterruptHandlerAppropriately(void) -{ - AT91C_BASE_AIC->AIC_SVR[AT91C_ID_TC0] = (uint32)NULL; - Timer_ConfigureInterrupt(); - TEST_ASSERT_EQUAL((uint32)Timer_InterruptHandler, AT91C_BASE_AIC->AIC_SVR[AT91C_ID_TC0]); -} - -void testConfigureInterruptShouldSetInterruptLevelInSourceModeRegisterAppropriately(void) -{ - AT91C_BASE_AIC->AIC_SMR[AT91C_ID_TC0] = 0; - Timer_ConfigureInterrupt(); - TEST_ASSERT_EQUAL( - AT91C_AIC_SRCTYPE_INT_HIGH_LEVEL, - AT91C_BASE_AIC->AIC_SMR[AT91C_ID_TC0] & 0x00000060); -} - -void testConfigureInterruptShouldSetInterruptPriorityInSourceModeRegisterAppropriately(void) -{ - AT91C_BASE_AIC->AIC_SMR[AT91C_ID_TC0] = 0; - Timer_ConfigureInterrupt(); - TEST_ASSERT_EQUAL(1, AT91C_BASE_AIC->AIC_SMR[AT91C_ID_TC0] & 0x00000007); -} - -void testConfigureInterruptShouldClearTimer0InterruptOnTheInterruptController(void) -{ - AT91C_BASE_AIC->AIC_ICCR = 0; - Timer_ConfigureInterrupt(); - TEST_ASSERT_EQUAL(TIMER0_ID_MASK, AT91C_BASE_AIC->AIC_ICCR); -} - -void testConfigureInterruptShouldEnableCompareInterruptForRegisterC(void) -{ - AT91C_BASE_TC0->TC_IER = 0; - Timer_ConfigureInterrupt(); - TEST_ASSERT_EQUAL(AT91C_TC_CPCS, AT91C_BASE_TC0->TC_IER); -} - -void testEnableInterruptShouldEnableTimer0InterruptsInInterruptCotroller(void) -{ - AT91C_BASE_AIC->AIC_IECR = 0; - Timer_EnableInterrupt(); - TEST_ASSERT_EQUAL(TIMER0_ID_MASK, AT91C_BASE_AIC->AIC_IECR); -} +#include "unity.h" +#include "Types.h" +#include "TimerInterruptConfigurator.h" +#include "MockTimerInterruptHandler.h" +#include "AT91SAM7X256.h" + +AT91S_AIC AicPeripheral; +AT91S_TC TimerCounter0Peripheral; + +void setUp(void) +{ +} + +void tearDown(void) +{ +} + +void test_TIMER0_ID_MASK_ShouldBeCorrect(void) +{ + TEST_ASSERT_EQUAL(((uint32)0x1) << AT91C_ID_TC0, TIMER0_ID_MASK); +} + +void testDisableInterruptDisablesTimer0InterruptInTheInterruptController(void) +{ + AT91C_BASE_AIC->AIC_IDCR = 0; + Timer_DisableInterrupt(); + TEST_ASSERT_EQUAL(TIMER0_ID_MASK, AT91C_BASE_AIC->AIC_IDCR); +} + +void testResetSystemTimeDelegatesTo_Timer_SetSystemTime_Appropriately(void) +{ + Timer_SetSystemTime_Expect(0); + Timer_ResetSystemTime(); +} + +void testConfigureInterruptShouldSetInterruptHandlerAppropriately(void) +{ + AT91C_BASE_AIC->AIC_SVR[AT91C_ID_TC0] = (uint32)NULL; + Timer_ConfigureInterrupt(); + TEST_ASSERT_EQUAL((uint32)Timer_InterruptHandler, AT91C_BASE_AIC->AIC_SVR[AT91C_ID_TC0]); +} + +void testConfigureInterruptShouldSetInterruptLevelInSourceModeRegisterAppropriately(void) +{ + AT91C_BASE_AIC->AIC_SMR[AT91C_ID_TC0] = 0; + Timer_ConfigureInterrupt(); + TEST_ASSERT_EQUAL( + AT91C_AIC_SRCTYPE_INT_HIGH_LEVEL, + AT91C_BASE_AIC->AIC_SMR[AT91C_ID_TC0] & 0x00000060); +} + +void testConfigureInterruptShouldSetInterruptPriorityInSourceModeRegisterAppropriately(void) +{ + AT91C_BASE_AIC->AIC_SMR[AT91C_ID_TC0] = 0; + Timer_ConfigureInterrupt(); + TEST_ASSERT_EQUAL(1, AT91C_BASE_AIC->AIC_SMR[AT91C_ID_TC0] & 0x00000007); +} + +void testConfigureInterruptShouldClearTimer0InterruptOnTheInterruptController(void) +{ + AT91C_BASE_AIC->AIC_ICCR = 0; + Timer_ConfigureInterrupt(); + TEST_ASSERT_EQUAL(TIMER0_ID_MASK, AT91C_BASE_AIC->AIC_ICCR); +} + +void testConfigureInterruptShouldEnableCompareInterruptForRegisterC(void) +{ + AT91C_BASE_TC0->TC_IER = 0; + Timer_ConfigureInterrupt(); + TEST_ASSERT_EQUAL(AT91C_TC_CPCS, AT91C_BASE_TC0->TC_IER); +} + +void testEnableInterruptShouldEnableTimer0InterruptsInInterruptCotroller(void) +{ + AT91C_BASE_AIC->AIC_IECR = 0; + Timer_EnableInterrupt(); + TEST_ASSERT_EQUAL(TIMER0_ID_MASK, AT91C_BASE_AIC->AIC_IECR); +} diff --git a/examples/temp_sensor/test/TestTimerInterruptHandler.c b/examples/temp_sensor/test/TestTimerInterruptHandler.c index 397fced..8e2e64e 100644 --- a/examples/temp_sensor/test/TestTimerInterruptHandler.c +++ b/examples/temp_sensor/test/TestTimerInterruptHandler.c @@ -1,66 +1,66 @@ -#include "unity.h" -#include "Types.h" -#include "TimerInterruptHandler.h" -#include "AT91SAM7X256.h" - -AT91S_TC TimerCounter0Peripheral; - -void setUp(void) -{ -} - -void tearDown(void) -{ -} - -void testSetAndGetSystemTime(void) -{ - Timer_SetSystemTime(0); - TEST_ASSERT_EQUAL(0, Timer_GetSystemTime()); - - Timer_SetSystemTime(129837); - TEST_ASSERT_EQUAL(129837, Timer_GetSystemTime()); - - Timer_SetSystemTime(UINT32_MAX); - TEST_ASSERT_EQUAL(UINT32_MAX, Timer_GetSystemTime()); -} - -void testInterruptHandlerShouldIncrementSystemTimeOnlyIfStatusHasCompareRegisterCOverflowBitSet(void) -{ - Timer_SetSystemTime(0); - AT91C_BASE_TC0->TC_SR = 0; - Timer_InterruptHandler(); - TEST_ASSERT_EQUAL(0, Timer_GetSystemTime()); - - Timer_SetSystemTime(0); - AT91C_BASE_TC0->TC_SR = ~AT91C_TC_CPCS; - Timer_InterruptHandler(); - TEST_ASSERT_EQUAL(0, Timer_GetSystemTime()); - - Timer_SetSystemTime(0); - AT91C_BASE_TC0->TC_SR = AT91C_TC_CPCS; - Timer_InterruptHandler(); - TEST_ASSERT(Timer_GetSystemTime() > 0); - - Timer_SetSystemTime(0); - AT91C_BASE_TC0->TC_SR = 0xffffffff; - Timer_InterruptHandler(); - TEST_ASSERT(Timer_GetSystemTime() > 0); -} - -void testInterruptHandlerShouldIncrementSystemTimerBy_10(void) -{ - Timer_SetSystemTime(0); - AT91C_BASE_TC0->TC_SR = AT91C_TC_CPCS; - Timer_InterruptHandler(); - TEST_ASSERT_EQUAL(10, Timer_GetSystemTime()); - - AT91C_BASE_TC0->TC_SR = AT91C_TC_CPCS; - Timer_InterruptHandler(); - TEST_ASSERT_EQUAL(20, Timer_GetSystemTime()); - - Timer_SetSystemTime(39426857); - AT91C_BASE_TC0->TC_SR = AT91C_TC_CPCS; - Timer_InterruptHandler(); - TEST_ASSERT_EQUAL(39426867, Timer_GetSystemTime()); -} +#include "unity.h" +#include "Types.h" +#include "TimerInterruptHandler.h" +#include "AT91SAM7X256.h" + +AT91S_TC TimerCounter0Peripheral; + +void setUp(void) +{ +} + +void tearDown(void) +{ +} + +void testSetAndGetSystemTime(void) +{ + Timer_SetSystemTime(0); + TEST_ASSERT_EQUAL(0, Timer_GetSystemTime()); + + Timer_SetSystemTime(129837); + TEST_ASSERT_EQUAL(129837, Timer_GetSystemTime()); + + Timer_SetSystemTime(UINT32_MAX); + TEST_ASSERT_EQUAL(UINT32_MAX, Timer_GetSystemTime()); +} + +void testInterruptHandlerShouldIncrementSystemTimeOnlyIfStatusHasCompareRegisterCOverflowBitSet(void) +{ + Timer_SetSystemTime(0); + AT91C_BASE_TC0->TC_SR = 0; + Timer_InterruptHandler(); + TEST_ASSERT_EQUAL(0, Timer_GetSystemTime()); + + Timer_SetSystemTime(0); + AT91C_BASE_TC0->TC_SR = ~AT91C_TC_CPCS; + Timer_InterruptHandler(); + TEST_ASSERT_EQUAL(0, Timer_GetSystemTime()); + + Timer_SetSystemTime(0); + AT91C_BASE_TC0->TC_SR = AT91C_TC_CPCS; + Timer_InterruptHandler(); + TEST_ASSERT(Timer_GetSystemTime() > 0); + + Timer_SetSystemTime(0); + AT91C_BASE_TC0->TC_SR = 0xffffffff; + Timer_InterruptHandler(); + TEST_ASSERT(Timer_GetSystemTime() > 0); +} + +void testInterruptHandlerShouldIncrementSystemTimerBy_10(void) +{ + Timer_SetSystemTime(0); + AT91C_BASE_TC0->TC_SR = AT91C_TC_CPCS; + Timer_InterruptHandler(); + TEST_ASSERT_EQUAL(10, Timer_GetSystemTime()); + + AT91C_BASE_TC0->TC_SR = AT91C_TC_CPCS; + Timer_InterruptHandler(); + TEST_ASSERT_EQUAL(20, Timer_GetSystemTime()); + + Timer_SetSystemTime(39426857); + AT91C_BASE_TC0->TC_SR = AT91C_TC_CPCS; + Timer_InterruptHandler(); + TEST_ASSERT_EQUAL(39426867, Timer_GetSystemTime()); +} diff --git a/examples/temp_sensor/test/TestTimerModel.c b/examples/temp_sensor/test/TestTimerModel.c index 3099f30..e92a96a 100644 --- a/examples/temp_sensor/test/TestTimerModel.c +++ b/examples/temp_sensor/test/TestTimerModel.c @@ -1,18 +1,18 @@ -#include "unity.h" -#include "Types.h" -#include "TimerModel.h" -#include "MockTaskScheduler.h" - -void setUp(void) -{ -} - -void tearDown(void) -{ -} - -void testUpdateTimeShouldDelegateToTaskScheduler(void) -{ - TaskScheduler_Update_Expect(19387L); - TimerModel_UpdateTime(19387L); -} +#include "unity.h" +#include "Types.h" +#include "TimerModel.h" +#include "MockTaskScheduler.h" + +void setUp(void) +{ +} + +void tearDown(void) +{ +} + +void testUpdateTimeShouldDelegateToTaskScheduler(void) +{ + TaskScheduler_Update_Expect(19387L); + TimerModel_UpdateTime(19387L); +} diff --git a/examples/temp_sensor/test/TestUsartBaudRateRegisterCalculator.c b/examples/temp_sensor/test/TestUsartBaudRateRegisterCalculator.c index d1cb4b5..08dc045 100644 --- a/examples/temp_sensor/test/TestUsartBaudRateRegisterCalculator.c +++ b/examples/temp_sensor/test/TestUsartBaudRateRegisterCalculator.c @@ -1,21 +1,21 @@ -#include "unity.h" -#include "Types.h" -#include "UsartBaudRateRegisterCalculator.h" - -void setUp(void) -{ -} - -void tearDown(void) -{ -} - -void testCalculateBaudRateRegisterSettingShouldCalculateRegisterSettingAppropriately(void) -{ - // BaudRate = MCK / (CD x 16) - per datasheet section 30.6.1.2 "Baud Rate Calculation Example" - TEST_ASSERT_EQUAL(26, UsartModel_CalculateBaudRateRegisterSetting(48000000, 115200)); - TEST_ASSERT_EQUAL(6, UsartModel_CalculateBaudRateRegisterSetting(3686400, 38400)); - TEST_ASSERT_EQUAL(23, UsartModel_CalculateBaudRateRegisterSetting(14318180, 38400)); - TEST_ASSERT_EQUAL(20, UsartModel_CalculateBaudRateRegisterSetting(12000000, 38400)); - TEST_ASSERT_EQUAL(13, UsartModel_CalculateBaudRateRegisterSetting(12000000, 56800)); -} +#include "unity.h" +#include "Types.h" +#include "UsartBaudRateRegisterCalculator.h" + +void setUp(void) +{ +} + +void tearDown(void) +{ +} + +void testCalculateBaudRateRegisterSettingShouldCalculateRegisterSettingAppropriately(void) +{ + // BaudRate = MCK / (CD x 16) - per datasheet section 30.6.1.2 "Baud Rate Calculation Example" + TEST_ASSERT_EQUAL(26, UsartModel_CalculateBaudRateRegisterSetting(48000000, 115200)); + TEST_ASSERT_EQUAL(6, UsartModel_CalculateBaudRateRegisterSetting(3686400, 38400)); + TEST_ASSERT_EQUAL(23, UsartModel_CalculateBaudRateRegisterSetting(14318180, 38400)); + TEST_ASSERT_EQUAL(20, UsartModel_CalculateBaudRateRegisterSetting(12000000, 38400)); + TEST_ASSERT_EQUAL(13, UsartModel_CalculateBaudRateRegisterSetting(12000000, 56800)); +} diff --git a/examples/temp_sensor/test/TestUsartConductor.c b/examples/temp_sensor/test/TestUsartConductor.c index 7552d9f..fd6de6e 100644 --- a/examples/temp_sensor/test/TestUsartConductor.c +++ b/examples/temp_sensor/test/TestUsartConductor.c @@ -1,40 +1,40 @@ -#include "unity.h" -#include "Types.h" -#include "UsartConductor.h" -#include "MockUsartModel.h" -#include "MockUsartHardware.h" -#include "MockTaskScheduler.h" - -void setUp(void) -{ -} - -void tearDown(void) -{ -} - -void testShouldInitializeHardwareWhenInitCalled(void) -{ - UsartModel_GetBaudRateRegisterSetting_ExpectAndReturn(4); - UsartModel_GetWakeupMessage_ExpectAndReturn("Hey there!"); - UsartHardware_TransmitString_Expect("Hey there!"); - UsartHardware_Init_Expect(4); - - UsartConductor_Init(); -} - -void testRunShouldNotDoAnythingIfSchedulerSaysItIsNotTimeYet(void) -{ - TaskScheduler_DoUsart_ExpectAndReturn(FALSE); - - UsartConductor_Run(); -} - -void testRunShouldGetCurrentTemperatureAndTransmitIfSchedulerSaysItIsTime(void) -{ - TaskScheduler_DoUsart_ExpectAndReturn(TRUE); - UsartModel_GetFormattedTemperature_ExpectAndReturn("hey there"); - UsartHardware_TransmitString_Expect("hey there"); - - UsartConductor_Run(); -} +#include "unity.h" +#include "Types.h" +#include "UsartConductor.h" +#include "MockUsartModel.h" +#include "MockUsartHardware.h" +#include "MockTaskScheduler.h" + +void setUp(void) +{ +} + +void tearDown(void) +{ +} + +void testShouldInitializeHardwareWhenInitCalled(void) +{ + UsartModel_GetBaudRateRegisterSetting_ExpectAndReturn(4); + UsartModel_GetWakeupMessage_ExpectAndReturn("Hey there!"); + UsartHardware_TransmitString_Expect("Hey there!"); + UsartHardware_Init_Expect(4); + + UsartConductor_Init(); +} + +void testRunShouldNotDoAnythingIfSchedulerSaysItIsNotTimeYet(void) +{ + TaskScheduler_DoUsart_ExpectAndReturn(FALSE); + + UsartConductor_Run(); +} + +void testRunShouldGetCurrentTemperatureAndTransmitIfSchedulerSaysItIsTime(void) +{ + TaskScheduler_DoUsart_ExpectAndReturn(TRUE); + UsartModel_GetFormattedTemperature_ExpectAndReturn("hey there"); + UsartHardware_TransmitString_Expect("hey there"); + + UsartConductor_Run(); +} diff --git a/examples/temp_sensor/test/TestUsartConfigurator.c b/examples/temp_sensor/test/TestUsartConfigurator.c index 885f6b5..b23029e 100644 --- a/examples/temp_sensor/test/TestUsartConfigurator.c +++ b/examples/temp_sensor/test/TestUsartConfigurator.c @@ -1,77 +1,77 @@ -#include "unity.h" -#include "Types.h" -#include "UsartConfigurator.h" - -AT91S_PIO PioAPeripheral; -AT91S_PMC PmcPeripheral; -AT91S_USART Usart0Peripheral; - -void setUp(void) -{ -} - -void tearDown(void) -{ -} - -void testConfigureUsartIOShouldConfigureUsartTxPinfForPeripheralIO(void) -{ - AT91C_BASE_PIOA->PIO_ASR = 0; - AT91C_BASE_PIOA->PIO_BSR = 0xffffffff; - AT91C_BASE_PIOA->PIO_PDR = 0; - Usart_ConfigureUsartIO(); - TEST_ASSERT_EQUAL(USART0_TX_PIN, AT91C_BASE_PIOA->PIO_ASR); - TEST_ASSERT_EQUAL(0, AT91C_BASE_PIOA->PIO_BSR); - TEST_ASSERT_EQUAL(USART0_TX_PIN, AT91C_BASE_PIOA->PIO_PDR); -} - -void testEnablePeripheralClockShouldEnableClockToUsartPeripheral(void) -{ - AT91C_BASE_PMC->PMC_PCER = 0; - Usart_EnablePeripheralClock(); - TEST_ASSERT_EQUAL(((uint32)1) << USART0_CLOCK_ENABLE, AT91C_BASE_PMC->PMC_PCER); -} - -void testResetShouldDisableAllUsartInterrupts(void) -{ - AT91C_BASE_US0->US_IDR = 0; - Usart_Reset(); - TEST_ASSERT_EQUAL(0xffffffff, AT91C_BASE_US0->US_IDR); -} - -void testResetShouldResetUsartTransmitterAndReceiver(void) -{ - AT91C_BASE_US0->US_CR = 0; - Usart_Reset(); - TEST_ASSERT_EQUAL(AT91C_US_RSTRX | AT91C_US_RSTTX | AT91C_US_RXDIS | AT91C_US_TXDIS, AT91C_BASE_US0->US_CR); -} - -void testConfigureModeShouldSetUsartModeToAsynchronous(void) -{ - uint32 asyncMode = (AT91C_US_USMODE_NORMAL | - AT91C_US_NBSTOP_1_BIT | - AT91C_US_PAR_NONE | - AT91C_US_CHRL_8_BITS | - AT91C_US_CLKS_CLOCK); - - AT91C_BASE_US0->US_MR = ~asyncMode; - Usart_ConfigureMode(); - TEST_ASSERT_EQUAL(asyncMode, AT91C_BASE_US0->US_MR); -} - -void testSetBaudRateRegisterShouldSetUsartBaudRateRegisterToValuePassedAsParameter(void) -{ - AT91C_BASE_US0->US_BRGR = 0; - Usart_SetBaudRateRegister(3); - TEST_ASSERT_EQUAL(3, AT91C_BASE_US0->US_BRGR); - Usart_SetBaudRateRegister(251); - TEST_ASSERT_EQUAL(251, AT91C_BASE_US0->US_BRGR); -} - - -void testEnableShouldEnableUsart0Transmitter(void) -{ - AT91C_BASE_US0->US_CR = 0; - Usart_Enable(); - TEST_ASSERT_EQUAL(AT91C_US_TXEN, AT91C_BASE_US0->US_CR); -} +#include "unity.h" +#include "Types.h" +#include "UsartConfigurator.h" + +AT91S_PIO PioAPeripheral; +AT91S_PMC PmcPeripheral; +AT91S_USART Usart0Peripheral; + +void setUp(void) +{ +} + +void tearDown(void) +{ +} + +void testConfigureUsartIOShouldConfigureUsartTxPinfForPeripheralIO(void) +{ + AT91C_BASE_PIOA->PIO_ASR = 0; + AT91C_BASE_PIOA->PIO_BSR = 0xffffffff; + AT91C_BASE_PIOA->PIO_PDR = 0; + Usart_ConfigureUsartIO(); + TEST_ASSERT_EQUAL(USART0_TX_PIN, AT91C_BASE_PIOA->PIO_ASR); + TEST_ASSERT_EQUAL(0, AT91C_BASE_PIOA->PIO_BSR); + TEST_ASSERT_EQUAL(USART0_TX_PIN, AT91C_BASE_PIOA->PIO_PDR); +} + +void testEnablePeripheralClockShouldEnableClockToUsartPeripheral(void) +{ + AT91C_BASE_PMC->PMC_PCER = 0; + Usart_EnablePeripheralClock(); + TEST_ASSERT_EQUAL(((uint32)1) << USART0_CLOCK_ENABLE, AT91C_BASE_PMC->PMC_PCER); +} + +void testResetShouldDisableAllUsartInterrupts(void) +{ + AT91C_BASE_US0->US_IDR = 0; + Usart_Reset(); + TEST_ASSERT_EQUAL(0xffffffff, AT91C_BASE_US0->US_IDR); +} + +void testResetShouldResetUsartTransmitterAndReceiver(void) +{ + AT91C_BASE_US0->US_CR = 0; + Usart_Reset(); + TEST_ASSERT_EQUAL(AT91C_US_RSTRX | AT91C_US_RSTTX | AT91C_US_RXDIS | AT91C_US_TXDIS, AT91C_BASE_US0->US_CR); +} + +void testConfigureModeShouldSetUsartModeToAsynchronous(void) +{ + uint32 asyncMode = (AT91C_US_USMODE_NORMAL | + AT91C_US_NBSTOP_1_BIT | + AT91C_US_PAR_NONE | + AT91C_US_CHRL_8_BITS | + AT91C_US_CLKS_CLOCK); + + AT91C_BASE_US0->US_MR = ~asyncMode; + Usart_ConfigureMode(); + TEST_ASSERT_EQUAL(asyncMode, AT91C_BASE_US0->US_MR); +} + +void testSetBaudRateRegisterShouldSetUsartBaudRateRegisterToValuePassedAsParameter(void) +{ + AT91C_BASE_US0->US_BRGR = 0; + Usart_SetBaudRateRegister(3); + TEST_ASSERT_EQUAL(3, AT91C_BASE_US0->US_BRGR); + Usart_SetBaudRateRegister(251); + TEST_ASSERT_EQUAL(251, AT91C_BASE_US0->US_BRGR); +} + + +void testEnableShouldEnableUsart0Transmitter(void) +{ + AT91C_BASE_US0->US_CR = 0; + Usart_Enable(); + TEST_ASSERT_EQUAL(AT91C_US_TXEN, AT91C_BASE_US0->US_CR); +} diff --git a/examples/temp_sensor/test/TestUsartHardware.c b/examples/temp_sensor/test/TestUsartHardware.c index 6668b38..b4a0d0c 100644 --- a/examples/temp_sensor/test/TestUsartHardware.c +++ b/examples/temp_sensor/test/TestUsartHardware.c @@ -1,37 +1,37 @@ -#include "unity.h" -#include "Types.h" -#include "UsartHardware.h" -#include "AT91SAM7X256.h" -#include "MockUsartConfigurator.h" -#include "MockUsartPutChar.h" - -void setUp(void) -{ -} - -void tearDown(void) -{ -} - -void testInitShouldConfigureUsartPeripheralByCallingConfiguratorAppropriately(void) -{ - Usart_ConfigureUsartIO_Expect(); - Usart_EnablePeripheralClock_Expect(); - Usart_Reset_Expect(); - Usart_ConfigureMode_Expect(); - Usart_SetBaudRateRegister_Expect(73); - Usart_Enable_Expect(); - - UsartHardware_Init(73); -} - -void testTransmitStringShouldSendDesiredStringOutUsingUsart(void) -{ - Usart_PutChar_Expect('h'); - Usart_PutChar_Expect('e'); - Usart_PutChar_Expect('l'); - Usart_PutChar_Expect('l'); - Usart_PutChar_Expect('o'); - - UsartHardware_TransmitString("hello"); -} +#include "unity.h" +#include "Types.h" +#include "UsartHardware.h" +#include "AT91SAM7X256.h" +#include "MockUsartConfigurator.h" +#include "MockUsartPutChar.h" + +void setUp(void) +{ +} + +void tearDown(void) +{ +} + +void testInitShouldConfigureUsartPeripheralByCallingConfiguratorAppropriately(void) +{ + Usart_ConfigureUsartIO_Expect(); + Usart_EnablePeripheralClock_Expect(); + Usart_Reset_Expect(); + Usart_ConfigureMode_Expect(); + Usart_SetBaudRateRegister_Expect(73); + Usart_Enable_Expect(); + + UsartHardware_Init(73); +} + +void testTransmitStringShouldSendDesiredStringOutUsingUsart(void) +{ + Usart_PutChar_Expect('h'); + Usart_PutChar_Expect('e'); + Usart_PutChar_Expect('l'); + Usart_PutChar_Expect('l'); + Usart_PutChar_Expect('o'); + + UsartHardware_TransmitString("hello"); +} diff --git a/examples/temp_sensor/test/TestUsartModel.c b/examples/temp_sensor/test/TestUsartModel.c index c5ba555..6ab23bc 100644 --- a/examples/temp_sensor/test/TestUsartModel.c +++ b/examples/temp_sensor/test/TestUsartModel.c @@ -1,39 +1,39 @@ -#include "unity.h" -#include "Types.h" -#include "UsartModel.h" -#include "ModelConfig.h" -#include "MockTemperatureFilter.h" -#include "MockUsartBaudRateRegisterCalculator.h" -#include - -void setUp(void) -{ -} - -void tearDown(void) -{ -} - -void testGetBaudRateRegisterSettingShouldReturnAppropriateBaudRateRegisterSetting(void) -{ - uint8 dummyRegisterSetting = 17; - UsartModel_CalculateBaudRateRegisterSetting_ExpectAndReturn(MASTER_CLOCK, USART0_BAUDRATE, dummyRegisterSetting); - - TEST_ASSERT_EQUAL(dummyRegisterSetting, UsartModel_GetBaudRateRegisterSetting()); -} - -void testGetFormattedTemperatureFormatsTemperatureFromCalculatorAppropriately(void) -{ - TemperatureFilter_GetTemperatureInCelcius_ExpectAndReturn(25.0f); - TEST_ASSERT_EQUAL_STRING("25.0 C\n", UsartModel_GetFormattedTemperature()); -} - -void testShouldReturnErrorMessageUponInvalidTemperatureValue(void) -{ - TemperatureFilter_GetTemperatureInCelcius_ExpectAndReturn(-INFINITY); - TEST_ASSERT_EQUAL_STRING("Temperature sensor failure!\n", UsartModel_GetFormattedTemperature()); -} - +#include "unity.h" +#include "Types.h" +#include "UsartModel.h" +#include "ModelConfig.h" +#include "MockTemperatureFilter.h" +#include "MockUsartBaudRateRegisterCalculator.h" +#include + +void setUp(void) +{ +} + +void tearDown(void) +{ +} + +void testGetBaudRateRegisterSettingShouldReturnAppropriateBaudRateRegisterSetting(void) +{ + uint8 dummyRegisterSetting = 17; + UsartModel_CalculateBaudRateRegisterSetting_ExpectAndReturn(MASTER_CLOCK, USART0_BAUDRATE, dummyRegisterSetting); + + TEST_ASSERT_EQUAL(dummyRegisterSetting, UsartModel_GetBaudRateRegisterSetting()); +} + +void testGetFormattedTemperatureFormatsTemperatureFromCalculatorAppropriately(void) +{ + TemperatureFilter_GetTemperatureInCelcius_ExpectAndReturn(25.0f); + TEST_ASSERT_EQUAL_STRING("25.0 C\n", UsartModel_GetFormattedTemperature()); +} + +void testShouldReturnErrorMessageUponInvalidTemperatureValue(void) +{ + TemperatureFilter_GetTemperatureInCelcius_ExpectAndReturn(-INFINITY); + TEST_ASSERT_EQUAL_STRING("Temperature sensor failure!\n", UsartModel_GetFormattedTemperature()); +} + void testShouldReturnWakeupMessage(void) { TEST_ASSERT_EQUAL_STRING("It's Awesome Time!\n", UsartModel_GetWakeupMessage()); diff --git a/examples/temp_sensor/test/TestUsartPutChar.c b/examples/temp_sensor/test/TestUsartPutChar.c index 4e2e463..766a889 100644 --- a/examples/temp_sensor/test/TestUsartPutChar.c +++ b/examples/temp_sensor/test/TestUsartPutChar.c @@ -1,43 +1,43 @@ -#include "unity.h" -#include "Types.h" -#include "UsartPutChar.h" -#include "MockUsartTransmitBufferStatus.h" - -AT91S_USART Usart0Peripheral; - -void setUp(void) -{ -} - -void tearDown(void) -{ -} - -void testPutCharShouldWriteDesiredCharacterToUsartTransmitBuffer(void) -{ - AT91C_BASE_US0->US_THR = 0; - - Usart_ReadyToTransmit_ExpectAndReturn(TRUE); - Usart_PutChar('x'); - TEST_ASSERT_EQUAL('x', AT91C_BASE_US0->US_THR); - - Usart_ReadyToTransmit_ExpectAndReturn(TRUE); - Usart_PutChar('1'); - TEST_ASSERT_EQUAL('1', AT91C_BASE_US0->US_THR); - - Usart_ReadyToTransmit_ExpectAndReturn(TRUE); - Usart_PutChar(':'); - TEST_ASSERT_EQUAL(':', AT91C_BASE_US0->US_THR); -} - -void testPutCharShouldWaitUntilReadyToTransmitBeforeLoadingTransmitBufffer(void) -{ - AT91C_BASE_US0->US_THR = 0; - - Usart_ReadyToTransmit_ExpectAndReturn(FALSE); - Usart_ReadyToTransmit_ExpectAndReturn(FALSE); - Usart_ReadyToTransmit_ExpectAndReturn(FALSE); - Usart_ReadyToTransmit_ExpectAndReturn(TRUE); - Usart_PutChar('x'); - TEST_ASSERT_EQUAL('x', AT91C_BASE_US0->US_THR); -} +#include "unity.h" +#include "Types.h" +#include "UsartPutChar.h" +#include "MockUsartTransmitBufferStatus.h" + +AT91S_USART Usart0Peripheral; + +void setUp(void) +{ +} + +void tearDown(void) +{ +} + +void testPutCharShouldWriteDesiredCharacterToUsartTransmitBuffer(void) +{ + AT91C_BASE_US0->US_THR = 0; + + Usart_ReadyToTransmit_ExpectAndReturn(TRUE); + Usart_PutChar('x'); + TEST_ASSERT_EQUAL('x', AT91C_BASE_US0->US_THR); + + Usart_ReadyToTransmit_ExpectAndReturn(TRUE); + Usart_PutChar('1'); + TEST_ASSERT_EQUAL('1', AT91C_BASE_US0->US_THR); + + Usart_ReadyToTransmit_ExpectAndReturn(TRUE); + Usart_PutChar(':'); + TEST_ASSERT_EQUAL(':', AT91C_BASE_US0->US_THR); +} + +void testPutCharShouldWaitUntilReadyToTransmitBeforeLoadingTransmitBufffer(void) +{ + AT91C_BASE_US0->US_THR = 0; + + Usart_ReadyToTransmit_ExpectAndReturn(FALSE); + Usart_ReadyToTransmit_ExpectAndReturn(FALSE); + Usart_ReadyToTransmit_ExpectAndReturn(FALSE); + Usart_ReadyToTransmit_ExpectAndReturn(TRUE); + Usart_PutChar('x'); + TEST_ASSERT_EQUAL('x', AT91C_BASE_US0->US_THR); +} diff --git a/examples/temp_sensor/test/TestUsartTransmitBufferStatus.c b/examples/temp_sensor/test/TestUsartTransmitBufferStatus.c index 1896917..c06084f 100644 --- a/examples/temp_sensor/test/TestUsartTransmitBufferStatus.c +++ b/examples/temp_sensor/test/TestUsartTransmitBufferStatus.c @@ -1,22 +1,22 @@ -#include "unity.h" -#include "Types.h" -#include "UsartTransmitBufferStatus.h" - -AT91S_USART Usart0Peripheral; - -void setUp(void) -{ -} - -void tearDown(void) -{ -} - -void testReadyToTransmitShouldReturnStatusPerTransmitBufferReadyStatus(void) -{ - AT91C_BASE_US0->US_CSR = 0; - TEST_ASSERT(!Usart_ReadyToTransmit()); - - AT91C_BASE_US0->US_CSR = AT91C_US_TXRDY; - TEST_ASSERT(Usart_ReadyToTransmit()); -} +#include "unity.h" +#include "Types.h" +#include "UsartTransmitBufferStatus.h" + +AT91S_USART Usart0Peripheral; + +void setUp(void) +{ +} + +void tearDown(void) +{ +} + +void testReadyToTransmitShouldReturnStatusPerTransmitBufferReadyStatus(void) +{ + AT91C_BASE_US0->US_CSR = 0; + TEST_ASSERT(!Usart_ReadyToTransmit()); + + AT91C_BASE_US0->US_CSR = AT91C_US_TXRDY; + TEST_ASSERT(Usart_ReadyToTransmit()); +} diff --git a/lib/cmock_config.rb b/lib/cmock_config.rb index 715f601..9e2637b 100644 --- a/lib/cmock_config.rb +++ b/lib/cmock_config.rb @@ -1,134 +1,134 @@ -# ========================================== -# CMock Project - Automatic Mock Generation for C -# Copyright (c) 2007 Mike Karlesky, Mark VanderVoord, Greg Williams -# [Released under MIT License. Please refer to license.txt for details] -# ========================================== - -class CMockConfig - - CMockDefaultOptions = - { - :framework => :unity, - :mock_path => 'mocks', - :mock_prefix => 'Mock', - :subdir => nil, - :plugins => [], - :strippables => ['(?:__attribute__\s*\(+.*?\)+)'], - :attributes => ['__ramfunc', '__irq', '__fiq', 'register', 'extern'], - :c_calling_conventions => ['__stdcall', '__cdecl', '__fastcall'], - :enforce_strict_ordering => false, - :unity_helper_path => false, - :treat_as => {}, - :treat_as_void => [], - :memcmp_if_unknown => true, - :when_no_prototypes => :warn, #the options being :ignore, :warn, or :error - :when_ptr => :compare_data, #the options being :compare_ptr, :compare_data, or :smart - :verbosity => 2, #the options being 0 errors only, 1 warnings and errors, 2 normal info, 3 verbose - :treat_externs => :exclude, #the options being :include or :exclude - :callback_include_count => true, - :callback_after_arg_check => false, - :includes => nil, - :includes_h_pre_orig_header => nil, - :includes_h_post_orig_header => nil, - :includes_c_pre_header => nil, - :includes_c_post_header => nil, - :orig_header_include_fmt => "#include \"%s\"", - } - - def initialize(options=nil) - case(options) - when NilClass then options = CMockDefaultOptions.clone - when String then options = CMockDefaultOptions.clone.merge(load_config_file_from_yaml(options)) - when Hash then options = CMockDefaultOptions.clone.merge(options) - else raise "If you specify arguments, it should be a filename or a hash of options" - end - - #do some quick type verification - [:plugins, :attributes, :treat_as_void].each do |opt| - unless (options[opt].class == Array) - options[opt] = [] - puts "WARNING: :#{opt.to_s} should be an array." unless (options[:verbosity] < 1) - end - end - [:includes, :includes_h_pre_orig_header, :includes_h_post_orig_header, :includes_c_pre_header, :includes_c_post_header].each do |opt| - unless (options[opt].nil? or (options[opt].class == Array)) - options[opt] = [] - puts "WARNING: :#{opt.to_s} should be an array." unless (options[:verbosity] < 1) - end - end - options[:unity_helper_path] ||= options[:unity_helper] - options[:plugins].compact! - options[:plugins].map! {|p| p.to_sym} - @options = options - - treat_as_map = standard_treat_as_map()#.clone - treat_as_map.merge!(@options[:treat_as]) - @options[:treat_as] = treat_as_map - - @options.each_key { |key| eval("def #{key.to_s}() return @options[:#{key.to_s}] end") } - end - - def load_config_file_from_yaml yaml_filename - self.class.load_config_file_from_yaml yaml_filename - end - - def self.load_config_file_from_yaml yaml_filename - require 'yaml' - require 'fileutils' - YAML.load_file(yaml_filename)[:cmock] - end - - def set_path(path) - @src_path = path - end - - def load_unity_helper - return File.new(@options[:unity_helper_path]).read if (@options[:unity_helper_path]) - return nil - end - - def standard_treat_as_map - { - 'int' => 'INT', - 'char' => 'INT8', - 'short' => 'INT16', - 'long' => 'INT', - 'int8' => 'INT8', - 'int16' => 'INT16', - 'int32' => 'INT', - 'int8_t' => 'INT8', - 'int16_t' => 'INT16', - 'int32_t' => 'INT', - 'INT8_T' => 'INT8', - 'INT16_T' => 'INT16', - 'INT32_T' => 'INT', - 'bool' => 'INT', - 'bool_t' => 'INT', - 'BOOL' => 'INT', - 'BOOL_T' => 'INT', - 'unsigned int' => 'HEX32', - 'unsigned long' => 'HEX32', - 'uint32' => 'HEX32', - 'uint32_t' => 'HEX32', - 'UINT32' => 'HEX32', - 'UINT32_T' => 'HEX32', - 'void*' => 'HEX8_ARRAY', - 'unsigned short' => 'HEX16', - 'uint16' => 'HEX16', - 'uint16_t' => 'HEX16', - 'UINT16' => 'HEX16', - 'UINT16_T' => 'HEX16', - 'unsigned char' => 'HEX8', - 'uint8' => 'HEX8', - 'uint8_t' => 'HEX8', - 'UINT8' => 'HEX8', - 'UINT8_T' => 'HEX8', - 'char*' => 'STRING', - 'pCHAR' => 'STRING', - 'cstring' => 'STRING', - 'CSTRING' => 'STRING', - 'float' => 'FLOAT', - 'double' => 'FLOAT' - } - end -end +# ========================================== +# CMock Project - Automatic Mock Generation for C +# Copyright (c) 2007 Mike Karlesky, Mark VanderVoord, Greg Williams +# [Released under MIT License. Please refer to license.txt for details] +# ========================================== + +class CMockConfig + + CMockDefaultOptions = + { + :framework => :unity, + :mock_path => 'mocks', + :mock_prefix => 'Mock', + :subdir => nil, + :plugins => [], + :strippables => ['(?:__attribute__\s*\(+.*?\)+)'], + :attributes => ['__ramfunc', '__irq', '__fiq', 'register', 'extern'], + :c_calling_conventions => ['__stdcall', '__cdecl', '__fastcall'], + :enforce_strict_ordering => false, + :unity_helper_path => false, + :treat_as => {}, + :treat_as_void => [], + :memcmp_if_unknown => true, + :when_no_prototypes => :warn, #the options being :ignore, :warn, or :error + :when_ptr => :compare_data, #the options being :compare_ptr, :compare_data, or :smart + :verbosity => 2, #the options being 0 errors only, 1 warnings and errors, 2 normal info, 3 verbose + :treat_externs => :exclude, #the options being :include or :exclude + :callback_include_count => true, + :callback_after_arg_check => false, + :includes => nil, + :includes_h_pre_orig_header => nil, + :includes_h_post_orig_header => nil, + :includes_c_pre_header => nil, + :includes_c_post_header => nil, + :orig_header_include_fmt => "#include \"%s\"", + } + + def initialize(options=nil) + case(options) + when NilClass then options = CMockDefaultOptions.clone + when String then options = CMockDefaultOptions.clone.merge(load_config_file_from_yaml(options)) + when Hash then options = CMockDefaultOptions.clone.merge(options) + else raise "If you specify arguments, it should be a filename or a hash of options" + end + + #do some quick type verification + [:plugins, :attributes, :treat_as_void].each do |opt| + unless (options[opt].class == Array) + options[opt] = [] + puts "WARNING: :#{opt.to_s} should be an array." unless (options[:verbosity] < 1) + end + end + [:includes, :includes_h_pre_orig_header, :includes_h_post_orig_header, :includes_c_pre_header, :includes_c_post_header].each do |opt| + unless (options[opt].nil? or (options[opt].class == Array)) + options[opt] = [] + puts "WARNING: :#{opt.to_s} should be an array." unless (options[:verbosity] < 1) + end + end + options[:unity_helper_path] ||= options[:unity_helper] + options[:plugins].compact! + options[:plugins].map! {|p| p.to_sym} + @options = options + + treat_as_map = standard_treat_as_map()#.clone + treat_as_map.merge!(@options[:treat_as]) + @options[:treat_as] = treat_as_map + + @options.each_key { |key| eval("def #{key.to_s}() return @options[:#{key.to_s}] end") } + end + + def load_config_file_from_yaml yaml_filename + self.class.load_config_file_from_yaml yaml_filename + end + + def self.load_config_file_from_yaml yaml_filename + require 'yaml' + require 'fileutils' + YAML.load_file(yaml_filename)[:cmock] + end + + def set_path(path) + @src_path = path + end + + def load_unity_helper + return File.new(@options[:unity_helper_path]).read if (@options[:unity_helper_path]) + return nil + end + + def standard_treat_as_map + { + 'int' => 'INT', + 'char' => 'INT8', + 'short' => 'INT16', + 'long' => 'INT', + 'int8' => 'INT8', + 'int16' => 'INT16', + 'int32' => 'INT', + 'int8_t' => 'INT8', + 'int16_t' => 'INT16', + 'int32_t' => 'INT', + 'INT8_T' => 'INT8', + 'INT16_T' => 'INT16', + 'INT32_T' => 'INT', + 'bool' => 'INT', + 'bool_t' => 'INT', + 'BOOL' => 'INT', + 'BOOL_T' => 'INT', + 'unsigned int' => 'HEX32', + 'unsigned long' => 'HEX32', + 'uint32' => 'HEX32', + 'uint32_t' => 'HEX32', + 'UINT32' => 'HEX32', + 'UINT32_T' => 'HEX32', + 'void*' => 'HEX8_ARRAY', + 'unsigned short' => 'HEX16', + 'uint16' => 'HEX16', + 'uint16_t' => 'HEX16', + 'UINT16' => 'HEX16', + 'UINT16_T' => 'HEX16', + 'unsigned char' => 'HEX8', + 'uint8' => 'HEX8', + 'uint8_t' => 'HEX8', + 'UINT8' => 'HEX8', + 'UINT8_T' => 'HEX8', + 'char*' => 'STRING', + 'pCHAR' => 'STRING', + 'cstring' => 'STRING', + 'CSTRING' => 'STRING', + 'float' => 'FLOAT', + 'double' => 'FLOAT' + } + end +end diff --git a/lib/cmock_file_writer.rb b/lib/cmock_file_writer.rb index 66dae03..867d539 100644 --- a/lib/cmock_file_writer.rb +++ b/lib/cmock_file_writer.rb @@ -1,40 +1,40 @@ -# ========================================== -# CMock Project - Automatic Mock Generation for C -# Copyright (c) 2007 Mike Karlesky, Mark VanderVoord, Greg Williams -# [Released under MIT License. Please refer to license.txt for details] -# ========================================== - -class CMockFileWriter - - attr_reader :config - - def initialize(config) - @config = config - end - - def create_subdir(subdir) - if subdir && !Dir.exists?("#{@config.mock_path}/#{subdir+'/' if subdir}") - require 'fileutils' - FileUtils.mkdir_p "#{@config.mock_path}/#{subdir+'/' if subdir}" - end - end - - def create_file(filename, subdir) - raise "Where's the block of data to create?" unless block_given? - full_file_name_temp = "#{@config.mock_path}/#{subdir+'/' if subdir}#{filename}.new" - full_file_name_done = "#{@config.mock_path}/#{subdir+'/' if subdir}#{filename}" - File.open(full_file_name_temp, 'w') do |file| - yield(file, filename) - end - update_file(full_file_name_done, full_file_name_temp) - end - - private ################################### - - def update_file(dest, src) - require 'fileutils' - FileUtils.rm(dest) if (File.exist?(dest)) - FileUtils.cp(src, dest) - FileUtils.rm(src) - end -end +# ========================================== +# CMock Project - Automatic Mock Generation for C +# Copyright (c) 2007 Mike Karlesky, Mark VanderVoord, Greg Williams +# [Released under MIT License. Please refer to license.txt for details] +# ========================================== + +class CMockFileWriter + + attr_reader :config + + def initialize(config) + @config = config + end + + def create_subdir(subdir) + if subdir && !Dir.exists?("#{@config.mock_path}/#{subdir+'/' if subdir}") + require 'fileutils' + FileUtils.mkdir_p "#{@config.mock_path}/#{subdir+'/' if subdir}" + end + end + + def create_file(filename, subdir) + raise "Where's the block of data to create?" unless block_given? + full_file_name_temp = "#{@config.mock_path}/#{subdir+'/' if subdir}#{filename}.new" + full_file_name_done = "#{@config.mock_path}/#{subdir+'/' if subdir}#{filename}" + File.open(full_file_name_temp, 'w') do |file| + yield(file, filename) + end + update_file(full_file_name_done, full_file_name_temp) + end + + private ################################### + + def update_file(dest, src) + require 'fileutils' + FileUtils.rm(dest) if (File.exist?(dest)) + FileUtils.cp(src, dest) + FileUtils.rm(src) + end +end diff --git a/lib/cmock_generator_plugin_array.rb b/lib/cmock_generator_plugin_array.rb index d1cda43..480c1df 100644 --- a/lib/cmock_generator_plugin_array.rb +++ b/lib/cmock_generator_plugin_array.rb @@ -1,63 +1,63 @@ -# ========================================== -# CMock Project - Automatic Mock Generation for C -# Copyright (c) 2007 Mike Karlesky, Mark VanderVoord, Greg Williams -# [Released under MIT License. Please refer to license.txt for details] -# ========================================== - -class CMockGeneratorPluginArray - - attr_reader :priority - attr_accessor :config, :utils, :unity_helper, :ordered - def initialize(config, utils) - @config = config - @ptr_handling = @config.when_ptr - @ordered = @config.enforce_strict_ordering - @utils = utils - @unity_helper = @utils.helpers[:unity_helper] - @priority = 8 - end - - def instance_typedefs(function) - function[:args].inject("") do |all, arg| - (arg[:ptr?]) ? all + " int Expected_#{arg[:name]}_Depth;\n" : all - end - end - - def mock_function_declarations(function) - return nil unless function[:contains_ptr?] - args_call = function[:args].map{|m| m[:ptr?] ? "#{m[:name]}, #{m[:name]}_Depth" : "#{m[:name]}"}.join(', ') - args_string = function[:args].map do |m| - const_str = m[:const?] ? 'const ' : '' - m[:ptr?] ? "#{const_str}#{m[:type]} #{m[:name]}, int #{m[:name]}_Depth" : "#{const_str}#{m[:type]} #{m[:name]}" - end.join(', ') - if (function[:return][:void?]) - return "#define #{function[:name]}_ExpectWithArray(#{args_call}) #{function[:name]}_CMockExpectWithArray(__LINE__, #{args_call})\n" + - "void #{function[:name]}_CMockExpectWithArray(UNITY_LINE_TYPE cmock_line, #{args_string});\n" - else - return "#define #{function[:name]}_ExpectWithArrayAndReturn(#{args_call}, cmock_retval) #{function[:name]}_CMockExpectWithArrayAndReturn(__LINE__, #{args_call}, cmock_retval)\n" + - "void #{function[:name]}_CMockExpectWithArrayAndReturn(UNITY_LINE_TYPE cmock_line, #{args_string}, #{function[:return][:str]});\n" - end - end - - def mock_interfaces(function) - return nil unless function[:contains_ptr?] - lines = [] - func_name = function[:name] - args_string = function[:args].map do |m| - const_str = m[:const?] ? 'const ' : '' - m[:ptr?] ? "#{const_str}#{m[:type]} #{m[:name]}, int #{m[:name]}_Depth" : "#{const_str}#{m[:type]} #{m[:name]}" - end.join(', ') - call_string = function[:args].map{|m| m[:ptr?] ? "#{m[:name]}, #{m[:name]}_Depth" : m[:name]}.join(', ') - if (function[:return][:void?]) - lines << "void #{func_name}_CMockExpectWithArray(UNITY_LINE_TYPE cmock_line, #{args_string})\n" - else - lines << "void #{func_name}_CMockExpectWithArrayAndReturn(UNITY_LINE_TYPE cmock_line, #{args_string}, #{function[:return][:str]})\n" - end - lines << "{\n" - lines << @utils.code_add_base_expectation(func_name) - lines << " CMockExpectParameters_#{func_name}(cmock_call_instance, #{call_string});\n" - lines << " cmock_call_instance->ReturnVal = cmock_to_return;\n" unless (function[:return][:void?]) - lines << "}\n\n" - end - -end +# ========================================== +# CMock Project - Automatic Mock Generation for C +# Copyright (c) 2007 Mike Karlesky, Mark VanderVoord, Greg Williams +# [Released under MIT License. Please refer to license.txt for details] +# ========================================== + +class CMockGeneratorPluginArray + + attr_reader :priority + attr_accessor :config, :utils, :unity_helper, :ordered + def initialize(config, utils) + @config = config + @ptr_handling = @config.when_ptr + @ordered = @config.enforce_strict_ordering + @utils = utils + @unity_helper = @utils.helpers[:unity_helper] + @priority = 8 + end + + def instance_typedefs(function) + function[:args].inject("") do |all, arg| + (arg[:ptr?]) ? all + " int Expected_#{arg[:name]}_Depth;\n" : all + end + end + + def mock_function_declarations(function) + return nil unless function[:contains_ptr?] + args_call = function[:args].map{|m| m[:ptr?] ? "#{m[:name]}, #{m[:name]}_Depth" : "#{m[:name]}"}.join(', ') + args_string = function[:args].map do |m| + const_str = m[:const?] ? 'const ' : '' + m[:ptr?] ? "#{const_str}#{m[:type]} #{m[:name]}, int #{m[:name]}_Depth" : "#{const_str}#{m[:type]} #{m[:name]}" + end.join(', ') + if (function[:return][:void?]) + return "#define #{function[:name]}_ExpectWithArray(#{args_call}) #{function[:name]}_CMockExpectWithArray(__LINE__, #{args_call})\n" + + "void #{function[:name]}_CMockExpectWithArray(UNITY_LINE_TYPE cmock_line, #{args_string});\n" + else + return "#define #{function[:name]}_ExpectWithArrayAndReturn(#{args_call}, cmock_retval) #{function[:name]}_CMockExpectWithArrayAndReturn(__LINE__, #{args_call}, cmock_retval)\n" + + "void #{function[:name]}_CMockExpectWithArrayAndReturn(UNITY_LINE_TYPE cmock_line, #{args_string}, #{function[:return][:str]});\n" + end + end + + def mock_interfaces(function) + return nil unless function[:contains_ptr?] + lines = [] + func_name = function[:name] + args_string = function[:args].map do |m| + const_str = m[:const?] ? 'const ' : '' + m[:ptr?] ? "#{const_str}#{m[:type]} #{m[:name]}, int #{m[:name]}_Depth" : "#{const_str}#{m[:type]} #{m[:name]}" + end.join(', ') + call_string = function[:args].map{|m| m[:ptr?] ? "#{m[:name]}, #{m[:name]}_Depth" : m[:name]}.join(', ') + if (function[:return][:void?]) + lines << "void #{func_name}_CMockExpectWithArray(UNITY_LINE_TYPE cmock_line, #{args_string})\n" + else + lines << "void #{func_name}_CMockExpectWithArrayAndReturn(UNITY_LINE_TYPE cmock_line, #{args_string}, #{function[:return][:str]})\n" + end + lines << "{\n" + lines << @utils.code_add_base_expectation(func_name) + lines << " CMockExpectParameters_#{func_name}(cmock_call_instance, #{call_string});\n" + lines << " cmock_call_instance->ReturnVal = cmock_to_return;\n" unless (function[:return][:void?]) + lines << "}\n\n" + end + +end diff --git a/lib/cmock_generator_plugin_callback.rb b/lib/cmock_generator_plugin_callback.rb index 9caacd2..3a41ac0 100644 --- a/lib/cmock_generator_plugin_callback.rb +++ b/lib/cmock_generator_plugin_callback.rb @@ -1,78 +1,78 @@ -# ========================================== -# CMock Project - Automatic Mock Generation for C -# Copyright (c) 2007 Mike Karlesky, Mark VanderVoord, Greg Williams -# [Released under MIT License. Please refer to license.txt for details] -# ========================================== - -class CMockGeneratorPluginCallback - - attr_accessor :include_count - attr_reader :priority - attr_reader :config, :utils - - def initialize(config, utils) - @config = config - @utils = utils - @priority = 6 - - @include_count = @config.callback_include_count - if (@config.callback_after_arg_check) - alias :mock_implementation :mock_implementation_for_callbacks - alias :mock_implementation_precheck :nothing - else - alias :mock_implementation_precheck :mock_implementation_for_callbacks - alias :mock_implementation :nothing - end - end - - def instance_structure(function) - func_name = function[:name] - " CMOCK_#{func_name}_CALLBACK #{func_name}_CallbackFunctionPointer;\n" + - " int #{func_name}_CallbackCalls;\n" - end - - def mock_function_declarations(function) - func_name = function[:name] - return_type = function[:return][:const?] ? "const #{function[:return][:type]}" : function[:return][:type] - style = (@include_count ? 1 : 0) | (function[:args].empty? ? 0 : 2) - styles = [ "void", "int cmock_num_calls", function[:args_string], "#{function[:args_string]}, int cmock_num_calls" ] - "typedef #{return_type} (* CMOCK_#{func_name}_CALLBACK)(#{styles[style]});\nvoid #{func_name}_StubWithCallback(CMOCK_#{func_name}_CALLBACK Callback);\n" - end - - def mock_implementation_for_callbacks(function) - func_name = function[:name] - style = (@include_count ? 1 : 0) | (function[:args].empty? ? 0 : 2) | (function[:return][:void?] ? 0 : 4) - " if (Mock.#{func_name}_CallbackFunctionPointer != NULL)\n {\n" + - case(style) - when 0 then " Mock.#{func_name}_CallbackFunctionPointer();\n return;\n }\n" - when 1 then " Mock.#{func_name}_CallbackFunctionPointer(Mock.#{func_name}_CallbackCalls++);\n return;\n }\n" - when 2 then " Mock.#{func_name}_CallbackFunctionPointer(#{function[:args].map{|m| m[:name]}.join(', ')});\n return;\n }\n" - when 3 then " Mock.#{func_name}_CallbackFunctionPointer(#{function[:args].map{|m| m[:name]}.join(', ')}, Mock.#{func_name}_CallbackCalls++);\n return;\n }\n" - when 4 then " return Mock.#{func_name}_CallbackFunctionPointer();\n }\n" - when 5 then " return Mock.#{func_name}_CallbackFunctionPointer(Mock.#{func_name}_CallbackCalls++);\n }\n" - when 6 then " return Mock.#{func_name}_CallbackFunctionPointer(#{function[:args].map{|m| m[:name]}.join(', ')});\n }\n" - when 7 then " return Mock.#{func_name}_CallbackFunctionPointer(#{function[:args].map{|m| m[:name]}.join(', ')}, Mock.#{func_name}_CallbackCalls++);\n }\n" - end - end - - def nothing(function) - return "" - end - - def mock_interfaces(function) - func_name = function[:name] - "void #{func_name}_StubWithCallback(CMOCK_#{func_name}_CALLBACK Callback)\n{\n" + - " Mock.#{func_name}_CallbackFunctionPointer = Callback;\n}\n\n" - end - - def mock_destroy(function) - " Mock.#{function[:name]}_CallbackFunctionPointer = NULL;\n" + - " Mock.#{function[:name]}_CallbackCalls = 0;\n" - end - - def mock_verify(function) - func_name = function[:name] - " if (Mock.#{func_name}_CallbackFunctionPointer != NULL)\n Mock.#{func_name}_CallInstance = CMOCK_GUTS_NONE;\n" - end - -end +# ========================================== +# CMock Project - Automatic Mock Generation for C +# Copyright (c) 2007 Mike Karlesky, Mark VanderVoord, Greg Williams +# [Released under MIT License. Please refer to license.txt for details] +# ========================================== + +class CMockGeneratorPluginCallback + + attr_accessor :include_count + attr_reader :priority + attr_reader :config, :utils + + def initialize(config, utils) + @config = config + @utils = utils + @priority = 6 + + @include_count = @config.callback_include_count + if (@config.callback_after_arg_check) + alias :mock_implementation :mock_implementation_for_callbacks + alias :mock_implementation_precheck :nothing + else + alias :mock_implementation_precheck :mock_implementation_for_callbacks + alias :mock_implementation :nothing + end + end + + def instance_structure(function) + func_name = function[:name] + " CMOCK_#{func_name}_CALLBACK #{func_name}_CallbackFunctionPointer;\n" + + " int #{func_name}_CallbackCalls;\n" + end + + def mock_function_declarations(function) + func_name = function[:name] + return_type = function[:return][:const?] ? "const #{function[:return][:type]}" : function[:return][:type] + style = (@include_count ? 1 : 0) | (function[:args].empty? ? 0 : 2) + styles = [ "void", "int cmock_num_calls", function[:args_string], "#{function[:args_string]}, int cmock_num_calls" ] + "typedef #{return_type} (* CMOCK_#{func_name}_CALLBACK)(#{styles[style]});\nvoid #{func_name}_StubWithCallback(CMOCK_#{func_name}_CALLBACK Callback);\n" + end + + def mock_implementation_for_callbacks(function) + func_name = function[:name] + style = (@include_count ? 1 : 0) | (function[:args].empty? ? 0 : 2) | (function[:return][:void?] ? 0 : 4) + " if (Mock.#{func_name}_CallbackFunctionPointer != NULL)\n {\n" + + case(style) + when 0 then " Mock.#{func_name}_CallbackFunctionPointer();\n return;\n }\n" + when 1 then " Mock.#{func_name}_CallbackFunctionPointer(Mock.#{func_name}_CallbackCalls++);\n return;\n }\n" + when 2 then " Mock.#{func_name}_CallbackFunctionPointer(#{function[:args].map{|m| m[:name]}.join(', ')});\n return;\n }\n" + when 3 then " Mock.#{func_name}_CallbackFunctionPointer(#{function[:args].map{|m| m[:name]}.join(', ')}, Mock.#{func_name}_CallbackCalls++);\n return;\n }\n" + when 4 then " return Mock.#{func_name}_CallbackFunctionPointer();\n }\n" + when 5 then " return Mock.#{func_name}_CallbackFunctionPointer(Mock.#{func_name}_CallbackCalls++);\n }\n" + when 6 then " return Mock.#{func_name}_CallbackFunctionPointer(#{function[:args].map{|m| m[:name]}.join(', ')});\n }\n" + when 7 then " return Mock.#{func_name}_CallbackFunctionPointer(#{function[:args].map{|m| m[:name]}.join(', ')}, Mock.#{func_name}_CallbackCalls++);\n }\n" + end + end + + def nothing(function) + return "" + end + + def mock_interfaces(function) + func_name = function[:name] + "void #{func_name}_StubWithCallback(CMOCK_#{func_name}_CALLBACK Callback)\n{\n" + + " Mock.#{func_name}_CallbackFunctionPointer = Callback;\n}\n\n" + end + + def mock_destroy(function) + " Mock.#{function[:name]}_CallbackFunctionPointer = NULL;\n" + + " Mock.#{function[:name]}_CallbackCalls = 0;\n" + end + + def mock_verify(function) + func_name = function[:name] + " if (Mock.#{func_name}_CallbackFunctionPointer != NULL)\n Mock.#{func_name}_CallInstance = CMOCK_GUTS_NONE;\n" + end + +end diff --git a/lib/cmock_generator_plugin_expect_any_args.rb b/lib/cmock_generator_plugin_expect_any_args.rb index 0704527..11be7d3 100644 --- a/lib/cmock_generator_plugin_expect_any_args.rb +++ b/lib/cmock_generator_plugin_expect_any_args.rb @@ -1,68 +1,68 @@ -# ========================================== -# CMock Project - Automatic Mock Generation for C -# Copyright (c) 2007 Mike Karlesky, Mark VanderVoord, Greg Williams -# [Released under MIT License. Please refer to license.txt for details] -# ========================================== - -class CMockGeneratorPluginExpectAnyArgs - - attr_reader :priority - attr_reader :config, :utils - - def initialize(config, utils) - @config = config - @utils = utils - @priority = 3 - end - - def instance_structure(function) - if (function[:return][:void?]) || (@config.plugins.include? :ignore) - "" - else - " #{function[:return][:type]} #{function[:name]}_FinalReturn;\n" - end - end - - def instance_typedefs(function) - " CMOCK_ARG_MODE IgnoreMode;\n" - end - - def mock_function_declarations(function) - - if (function[:return][:void?]) - return "#define #{function[:name]}_ExpectAnyArgs() #{function[:name]}_CMockExpectAnyArgs(__LINE__)\n" + - "void #{function[:name]}_CMockExpectAnyArgs(UNITY_LINE_TYPE cmock_line);\n" - else - return "#define #{function[:name]}_ExpectAnyArgsAndReturn(cmock_retval) #{function[:name]}_CMockExpectAnyArgsAndReturn(__LINE__, cmock_retval)\n" + - "void #{function[:name]}_CMockExpectAnyArgsAndReturn(UNITY_LINE_TYPE cmock_line, #{function[:return][:str]});\n" - end - end - - def mock_implementation(function) - lines = " if (cmock_call_instance->IgnoreMode == CMOCK_ARG_NONE)\n {\n" - if (function[:return][:void?]) - lines << " return;\n }\n" - else - retval = function[:return].merge( { :name => "cmock_call_instance->ReturnVal"} ) - lines << " " + @utils.code_assign_argument_quickly("Mock.#{function[:name]}_FinalReturn", retval) unless (retval[:void?]) - return_type = function[:return][:const?] ? "(const #{function[:return][:type]})" : ((function[:return][:type] =~ /cmock/) ? "(#{function[:return][:type]})" : '') - lines << " return #{return_type}cmock_call_instance->ReturnVal;\n }\n" - end - lines - end - - def mock_interfaces(function) - lines = "" - if (function[:return][:void?]) - lines << "void #{function[:name]}_CMockExpectAnyArgs(UNITY_LINE_TYPE cmock_line)\n{\n" - else - lines << "void #{function[:name]}_CMockExpectAnyArgsAndReturn(UNITY_LINE_TYPE cmock_line, #{function[:return][:str]})\n{\n" - end - lines << @utils.code_add_base_expectation(function[:name], true) - unless (function[:return][:void?]) - lines << " cmock_call_instance->ReturnVal = cmock_to_return;\n" - end - lines << " cmock_call_instance->IgnoreMode = CMOCK_ARG_NONE;\n" - lines << "}\n\n" - end -end +# ========================================== +# CMock Project - Automatic Mock Generation for C +# Copyright (c) 2007 Mike Karlesky, Mark VanderVoord, Greg Williams +# [Released under MIT License. Please refer to license.txt for details] +# ========================================== + +class CMockGeneratorPluginExpectAnyArgs + + attr_reader :priority + attr_reader :config, :utils + + def initialize(config, utils) + @config = config + @utils = utils + @priority = 3 + end + + def instance_structure(function) + if (function[:return][:void?]) || (@config.plugins.include? :ignore) + "" + else + " #{function[:return][:type]} #{function[:name]}_FinalReturn;\n" + end + end + + def instance_typedefs(function) + " CMOCK_ARG_MODE IgnoreMode;\n" + end + + def mock_function_declarations(function) + + if (function[:return][:void?]) + return "#define #{function[:name]}_ExpectAnyArgs() #{function[:name]}_CMockExpectAnyArgs(__LINE__)\n" + + "void #{function[:name]}_CMockExpectAnyArgs(UNITY_LINE_TYPE cmock_line);\n" + else + return "#define #{function[:name]}_ExpectAnyArgsAndReturn(cmock_retval) #{function[:name]}_CMockExpectAnyArgsAndReturn(__LINE__, cmock_retval)\n" + + "void #{function[:name]}_CMockExpectAnyArgsAndReturn(UNITY_LINE_TYPE cmock_line, #{function[:return][:str]});\n" + end + end + + def mock_implementation(function) + lines = " if (cmock_call_instance->IgnoreMode == CMOCK_ARG_NONE)\n {\n" + if (function[:return][:void?]) + lines << " return;\n }\n" + else + retval = function[:return].merge( { :name => "cmock_call_instance->ReturnVal"} ) + lines << " " + @utils.code_assign_argument_quickly("Mock.#{function[:name]}_FinalReturn", retval) unless (retval[:void?]) + return_type = function[:return][:const?] ? "(const #{function[:return][:type]})" : ((function[:return][:type] =~ /cmock/) ? "(#{function[:return][:type]})" : '') + lines << " return #{return_type}cmock_call_instance->ReturnVal;\n }\n" + end + lines + end + + def mock_interfaces(function) + lines = "" + if (function[:return][:void?]) + lines << "void #{function[:name]}_CMockExpectAnyArgs(UNITY_LINE_TYPE cmock_line)\n{\n" + else + lines << "void #{function[:name]}_CMockExpectAnyArgsAndReturn(UNITY_LINE_TYPE cmock_line, #{function[:return][:str]})\n{\n" + end + lines << @utils.code_add_base_expectation(function[:name], true) + unless (function[:return][:void?]) + lines << " cmock_call_instance->ReturnVal = cmock_to_return;\n" + end + lines << " cmock_call_instance->IgnoreMode = CMOCK_ARG_NONE;\n" + lines << "}\n\n" + end +end diff --git a/test/c/TestCMockCDynamic_Runner.c b/test/c/TestCMockCDynamic_Runner.c index 8cc92b8..d686080 100644 --- a/test/c/TestCMockCDynamic_Runner.c +++ b/test/c/TestCMockCDynamic_Runner.c @@ -1,36 +1,36 @@ -/* ========================================== - CMock Project - Automatic Mock Generation for C - Copyright (c) 2007 Mike Karlesky, Mark VanderVoord, Greg Williams - [Released under MIT License. Please refer to license.txt for details] -========================================== */ - -#include "unity.h" -#include "cmock.h" -#include -#include - -extern void setUp(void); -extern void tearDown(void); - -extern void test_MemNewWillReturnNullIfGivenIllegalSizes(void); -extern void test_MemNewWillNowSupportSizesGreaterThanTheDefinesCMockSize(void); -extern void test_MemChainWillReturnNullAndDoNothingIfGivenIllegalInformation(void); -extern void test_MemNextWillReturnNullIfGivenABadRoot(void); -extern void test_ThatWeCanClaimAndChainAFewElementsTogether(void); -extern void test_ThatWeCanAskForAllSortsOfSizes(void); - -int main(void) -{ - UnityBegin("TestCMockDynamic.c"); - - RUN_TEST(test_MemNewWillReturnNullIfGivenIllegalSizes, 26); - RUN_TEST(test_MemNewWillNowSupportSizesGreaterThanTheDefinesCMockSize, 35); - RUN_TEST(test_MemChainWillReturnNullAndDoNothingIfGivenIllegalInformation, 45); - RUN_TEST(test_MemNextWillReturnNullIfGivenABadRoot, 59); - RUN_TEST(test_ThatWeCanClaimAndChainAFewElementsTogether, 70); - RUN_TEST(test_ThatWeCanAskForAllSortsOfSizes, 152); - - UnityEnd(); - CMock_Guts_MemFreeFinal(); - return 0; -} +/* ========================================== + CMock Project - Automatic Mock Generation for C + Copyright (c) 2007 Mike Karlesky, Mark VanderVoord, Greg Williams + [Released under MIT License. Please refer to license.txt for details] +========================================== */ + +#include "unity.h" +#include "cmock.h" +#include +#include + +extern void setUp(void); +extern void tearDown(void); + +extern void test_MemNewWillReturnNullIfGivenIllegalSizes(void); +extern void test_MemNewWillNowSupportSizesGreaterThanTheDefinesCMockSize(void); +extern void test_MemChainWillReturnNullAndDoNothingIfGivenIllegalInformation(void); +extern void test_MemNextWillReturnNullIfGivenABadRoot(void); +extern void test_ThatWeCanClaimAndChainAFewElementsTogether(void); +extern void test_ThatWeCanAskForAllSortsOfSizes(void); + +int main(void) +{ + UnityBegin("TestCMockDynamic.c"); + + RUN_TEST(test_MemNewWillReturnNullIfGivenIllegalSizes, 26); + RUN_TEST(test_MemNewWillNowSupportSizesGreaterThanTheDefinesCMockSize, 35); + RUN_TEST(test_MemChainWillReturnNullAndDoNothingIfGivenIllegalInformation, 45); + RUN_TEST(test_MemNextWillReturnNullIfGivenABadRoot, 59); + RUN_TEST(test_ThatWeCanClaimAndChainAFewElementsTogether, 70); + RUN_TEST(test_ThatWeCanAskForAllSortsOfSizes, 152); + + UnityEnd(); + CMock_Guts_MemFreeFinal(); + return 0; +} diff --git a/test/c/TestCMockC_Runner.c b/test/c/TestCMockC_Runner.c index 0891632..ede1ab4 100644 --- a/test/c/TestCMockC_Runner.c +++ b/test/c/TestCMockC_Runner.c @@ -1,39 +1,39 @@ -/* ========================================== - CMock Project - Automatic Mock Generation for C - Copyright (c) 2007 Mike Karlesky, Mark VanderVoord, Greg Williams - [Released under MIT License. Please refer to license.txt for details] -========================================== */ - -#include "unity.h" -#include -#include - -extern void setUp(void); -extern void tearDown(void); - -extern void test_MemNewWillReturnNullIfGivenIllegalSizes(void); -extern void test_MemChainWillReturnNullAndDoNothingIfGivenIllegalInformation(void); -extern void test_MemNextWillReturnNullIfGivenABadRoot(void); -extern void test_ThatWeCanClaimAndChainAFewElementsTogether(void); -extern void test_MemEndOfChain(void); -extern void test_ThatCMockStopsReturningMoreDataWhenItRunsOutOfMemory(void); -extern void test_ThatCMockStopsReturningMoreDataWhenAskForMoreThanItHasLeftEvenIfNotAtExactEnd(void); -extern void test_ThatWeCanAskForAllSortsOfSizes(void); - -int main(void) -{ - Unity.TestFile = "TestCMock.c"; - UnityBegin(Unity.TestFile); - - RUN_TEST(test_MemNewWillReturnNullIfGivenIllegalSizes, 21); - RUN_TEST(test_MemChainWillReturnNullAndDoNothingIfGivenIllegalInformation, 32); - RUN_TEST(test_MemNextWillReturnNullIfGivenABadRoot, 46); - RUN_TEST(test_ThatWeCanClaimAndChainAFewElementsTogether, 57); - RUN_TEST(test_MemEndOfChain, 282); - RUN_TEST(test_ThatCMockStopsReturningMoreDataWhenItRunsOutOfMemory, 139); - RUN_TEST(test_ThatCMockStopsReturningMoreDataWhenAskForMoreThanItHasLeftEvenIfNotAtExactEnd, 185); - RUN_TEST(test_ThatWeCanAskForAllSortsOfSizes, 233); - - UnityEnd(); - return 0; -} +/* ========================================== + CMock Project - Automatic Mock Generation for C + Copyright (c) 2007 Mike Karlesky, Mark VanderVoord, Greg Williams + [Released under MIT License. Please refer to license.txt for details] +========================================== */ + +#include "unity.h" +#include +#include + +extern void setUp(void); +extern void tearDown(void); + +extern void test_MemNewWillReturnNullIfGivenIllegalSizes(void); +extern void test_MemChainWillReturnNullAndDoNothingIfGivenIllegalInformation(void); +extern void test_MemNextWillReturnNullIfGivenABadRoot(void); +extern void test_ThatWeCanClaimAndChainAFewElementsTogether(void); +extern void test_MemEndOfChain(void); +extern void test_ThatCMockStopsReturningMoreDataWhenItRunsOutOfMemory(void); +extern void test_ThatCMockStopsReturningMoreDataWhenAskForMoreThanItHasLeftEvenIfNotAtExactEnd(void); +extern void test_ThatWeCanAskForAllSortsOfSizes(void); + +int main(void) +{ + Unity.TestFile = "TestCMock.c"; + UnityBegin(Unity.TestFile); + + RUN_TEST(test_MemNewWillReturnNullIfGivenIllegalSizes, 21); + RUN_TEST(test_MemChainWillReturnNullAndDoNothingIfGivenIllegalInformation, 32); + RUN_TEST(test_MemNextWillReturnNullIfGivenABadRoot, 46); + RUN_TEST(test_ThatWeCanClaimAndChainAFewElementsTogether, 57); + RUN_TEST(test_MemEndOfChain, 282); + RUN_TEST(test_ThatCMockStopsReturningMoreDataWhenItRunsOutOfMemory, 139); + RUN_TEST(test_ThatCMockStopsReturningMoreDataWhenAskForMoreThanItHasLeftEvenIfNotAtExactEnd, 185); + RUN_TEST(test_ThatWeCanAskForAllSortsOfSizes, 233); + + UnityEnd(); + return 0; +} diff --git a/test/system/systest_generator.rb b/test/system/systest_generator.rb index adf14df..3d63b31 100644 --- a/test/system/systest_generator.rb +++ b/test/system/systest_generator.rb @@ -1,194 +1,194 @@ -# ========================================== -# CMock Project - Automatic Mock Generation for C -# Copyright (c) 2007 Mike Karlesky, Mark VanderVoord, Greg Williams -# [Released under MIT License. Please refer to license.txt for details] -# ========================================== - -require 'yaml' - -SYS_TEST_GEN_ROOT = File.expand_path( File.dirname( __FILE__ ) ) + '/' -GENERATED_PATH = SYS_TEST_GEN_ROOT + 'generated/' -BUILD_PATH = SYS_TEST_GEN_ROOT + 'build/' -CASES_PATH = SYS_TEST_GEN_ROOT + 'cases/' - -TYPES_H = 'types.h' -UNITY_H = 'unity.h' -CMOCK_H = 'cmock.h' -UNITY_HELPER_H = 'unity_helper.h' -UNITY_HELPER_C = 'unity_helper.c' -MOCKABLE_H = 'mockable.h' - -YAML_EXTENSION = '.yml' -TEST_PREFIX = 'test_' -MOCK_PREFIX = 'mock_' -H_EXTENSION = '.h' -C_EXTENSION = '.c' - - -class SystemTestGenerator - - def generate_files(test_cases) - test_cases.each do |filename| - yaml_hash = YAML.load_file(filename) - - name = File.basename(filename, YAML_EXTENSION) - namix = "#{name}_" - - generate_cmock_config(yaml_hash, namix) - generate_code(yaml_hash, namix, name) - end - end - - private - - def generate_cmock_config(yaml_hash, namix) - cmock_yaml = yaml_hash.clone - cmock_yaml.delete(:systest) - cmock = cmock_yaml[:cmock] - - cmock[:mock_path] = GENERATED_PATH - cmock[:includes] = (cmock[:includes] || []) + [namix + TYPES_H] - cmock[:mock_prefix] = MOCK_PREFIX - if not yaml_hash[:systest][:unity_helper].nil? - cmock[:includes] << namix + UNITY_HELPER_H - cmock[:unity_helper_path] = GENERATED_PATH + namix + UNITY_HELPER_H - end - - File.open(GENERATED_PATH + namix + 'cmock' + YAML_EXTENSION, 'w') do |out| - YAML.dump(cmock_yaml, out) - end - end - - def generate_code(yaml_hash, namix, name) - generate_types_file(yaml_hash, namix) - generate_mockable_file(yaml_hash, namix) - generate_unity_helper_files(yaml_hash, namix) - - generate_test_file(yaml_hash, namix, name) - generate_source_file(yaml_hash, namix, name) - end - - def generate_types_file(yaml_hash, namix) - types = yaml_hash[:systest][:types] - return if types.nil? - - write_header_file(GENERATED_PATH + namix + TYPES_H, namix.upcase + 'TYPES_H') do |out| - out.puts(types) - end - end - - def generate_mockable_file(yaml_hash, namix) - mockable = yaml_hash[:systest][:mockable] - return if mockable.nil? - - write_header_file(GENERATED_PATH + namix + MOCKABLE_H, namix.upcase + 'MOCKABLE_H', [namix + TYPES_H]) do |out| - out.puts(mockable) - end - end - - def generate_unity_helper_files(yaml_hash, namix) - unity_helper = yaml_hash[:systest][:unity_helper] - return if unity_helper.nil? - - write_header_file(GENERATED_PATH + namix + UNITY_HELPER_H, namix.upcase + 'UNITY_HELPER_H', [namix + TYPES_H]) do |out| - out.puts(unity_helper[:header]) - end - - write_source_file(GENERATED_PATH + namix + UNITY_HELPER_C, ["unity.h", namix + UNITY_HELPER_H]) do |out| - out.puts(unity_helper[:code]) - end - end - - def generate_test_file(yaml_hash, namix, name) - tests = yaml_hash[:systest][:tests] - return if tests.nil? - - includes = [UNITY_H, CMOCK_H] - includes << (namix + UNITY_HELPER_H) if not yaml_hash[:systest][:unity_helper].nil? - includes << [MOCK_PREFIX + namix + MOCKABLE_H] - includes << [name + H_EXTENSION] - - write_source_file(GENERATED_PATH + TEST_PREFIX + name + C_EXTENSION, includes.flatten) do |out| - out.puts(tests[:common]) - out.puts('') - - tests[:units].each_with_index do |test, index| - out.puts('// should ' + test[:should]) - out.puts(test[:code].gsub!(/test\(\)/, "void test#{index+1}(void)")) - out.puts('') - end - end - end - - def generate_source_file(yaml_hash, namix, name) - source = yaml_hash[:systest][:source] - return if source.nil? - - header_file = name + H_EXTENSION - - includes = yaml_hash[:systest][:types].nil? ? [] : [(namix + TYPES_H)] - - write_header_file(GENERATED_PATH + header_file, name.upcase, includes) do |out| - out.puts(source[:header]) - end - - includes = [] - includes << (namix + TYPES_H) if not yaml_hash[:systest][:types].nil? - includes << (namix + MOCKABLE_H) if not yaml_hash[:systest][:mockable].nil? - includes << header_file - - write_source_file(GENERATED_PATH + name + C_EXTENSION, includes.flatten) do |out| - out.puts(source[:code]) - end - end - - def write_header_file(filename, upcase_name, include_list=[]) - File.open(filename, 'w') do |out| - out.puts("#ifndef _#{upcase_name}") - out.puts("#define _#{upcase_name}") - out.puts('') - include_list.each do |include| - out.puts("#include \"#{include}\"") - end - out.puts('') - out.puts("#if defined(__GNUC__) && !defined(__ICC)") - out.puts("#if !defined(__clang__)") - out.puts("#pragma GCC diagnostic ignored \"-Wpragmas\"") - out.puts("#endif") - out.puts('#pragma GCC diagnostic ignored "-Wunknown-pragmas"') - out.puts('#pragma GCC diagnostic ignored "-Wduplicate-decl-specifier"') - out.puts("#endif") - out.puts('') - yield(out) - out.puts('') - out.puts("#endif // _#{upcase_name}") - out.puts('') - end - end - - def write_source_file(filename, include_list=[]) - File.open(filename, 'w') do |out| - include_list.each do |include| - out.puts("#include \"#{include}\"") - end - out.puts('') - out.puts("#if defined(__GNUC__) && !defined(__ICC)") - out.puts("#if !defined(__clang__)") - out.puts("#pragma GCC diagnostic ignored \"-Wpragmas\"") - out.puts("#endif") - out.puts('#pragma GCC diagnostic ignored "-Wunknown-pragmas"') - out.puts('#pragma GCC diagnostic ignored "-Wduplicate-decl-specifier"') - out.puts("#endif") - out.puts('') - yield(out) - out.puts('') - end - end - -end - - -if ($0 == __FILE__) - SystemTestGenerator.new.generate_files(Dir[CASES_PATH + "*#{YAML_EXTENSION}"]) -end - +# ========================================== +# CMock Project - Automatic Mock Generation for C +# Copyright (c) 2007 Mike Karlesky, Mark VanderVoord, Greg Williams +# [Released under MIT License. Please refer to license.txt for details] +# ========================================== + +require 'yaml' + +SYS_TEST_GEN_ROOT = File.expand_path( File.dirname( __FILE__ ) ) + '/' +GENERATED_PATH = SYS_TEST_GEN_ROOT + 'generated/' +BUILD_PATH = SYS_TEST_GEN_ROOT + 'build/' +CASES_PATH = SYS_TEST_GEN_ROOT + 'cases/' + +TYPES_H = 'types.h' +UNITY_H = 'unity.h' +CMOCK_H = 'cmock.h' +UNITY_HELPER_H = 'unity_helper.h' +UNITY_HELPER_C = 'unity_helper.c' +MOCKABLE_H = 'mockable.h' + +YAML_EXTENSION = '.yml' +TEST_PREFIX = 'test_' +MOCK_PREFIX = 'mock_' +H_EXTENSION = '.h' +C_EXTENSION = '.c' + + +class SystemTestGenerator + + def generate_files(test_cases) + test_cases.each do |filename| + yaml_hash = YAML.load_file(filename) + + name = File.basename(filename, YAML_EXTENSION) + namix = "#{name}_" + + generate_cmock_config(yaml_hash, namix) + generate_code(yaml_hash, namix, name) + end + end + + private + + def generate_cmock_config(yaml_hash, namix) + cmock_yaml = yaml_hash.clone + cmock_yaml.delete(:systest) + cmock = cmock_yaml[:cmock] + + cmock[:mock_path] = GENERATED_PATH + cmock[:includes] = (cmock[:includes] || []) + [namix + TYPES_H] + cmock[:mock_prefix] = MOCK_PREFIX + if not yaml_hash[:systest][:unity_helper].nil? + cmock[:includes] << namix + UNITY_HELPER_H + cmock[:unity_helper_path] = GENERATED_PATH + namix + UNITY_HELPER_H + end + + File.open(GENERATED_PATH + namix + 'cmock' + YAML_EXTENSION, 'w') do |out| + YAML.dump(cmock_yaml, out) + end + end + + def generate_code(yaml_hash, namix, name) + generate_types_file(yaml_hash, namix) + generate_mockable_file(yaml_hash, namix) + generate_unity_helper_files(yaml_hash, namix) + + generate_test_file(yaml_hash, namix, name) + generate_source_file(yaml_hash, namix, name) + end + + def generate_types_file(yaml_hash, namix) + types = yaml_hash[:systest][:types] + return if types.nil? + + write_header_file(GENERATED_PATH + namix + TYPES_H, namix.upcase + 'TYPES_H') do |out| + out.puts(types) + end + end + + def generate_mockable_file(yaml_hash, namix) + mockable = yaml_hash[:systest][:mockable] + return if mockable.nil? + + write_header_file(GENERATED_PATH + namix + MOCKABLE_H, namix.upcase + 'MOCKABLE_H', [namix + TYPES_H]) do |out| + out.puts(mockable) + end + end + + def generate_unity_helper_files(yaml_hash, namix) + unity_helper = yaml_hash[:systest][:unity_helper] + return if unity_helper.nil? + + write_header_file(GENERATED_PATH + namix + UNITY_HELPER_H, namix.upcase + 'UNITY_HELPER_H', [namix + TYPES_H]) do |out| + out.puts(unity_helper[:header]) + end + + write_source_file(GENERATED_PATH + namix + UNITY_HELPER_C, ["unity.h", namix + UNITY_HELPER_H]) do |out| + out.puts(unity_helper[:code]) + end + end + + def generate_test_file(yaml_hash, namix, name) + tests = yaml_hash[:systest][:tests] + return if tests.nil? + + includes = [UNITY_H, CMOCK_H] + includes << (namix + UNITY_HELPER_H) if not yaml_hash[:systest][:unity_helper].nil? + includes << [MOCK_PREFIX + namix + MOCKABLE_H] + includes << [name + H_EXTENSION] + + write_source_file(GENERATED_PATH + TEST_PREFIX + name + C_EXTENSION, includes.flatten) do |out| + out.puts(tests[:common]) + out.puts('') + + tests[:units].each_with_index do |test, index| + out.puts('// should ' + test[:should]) + out.puts(test[:code].gsub!(/test\(\)/, "void test#{index+1}(void)")) + out.puts('') + end + end + end + + def generate_source_file(yaml_hash, namix, name) + source = yaml_hash[:systest][:source] + return if source.nil? + + header_file = name + H_EXTENSION + + includes = yaml_hash[:systest][:types].nil? ? [] : [(namix + TYPES_H)] + + write_header_file(GENERATED_PATH + header_file, name.upcase, includes) do |out| + out.puts(source[:header]) + end + + includes = [] + includes << (namix + TYPES_H) if not yaml_hash[:systest][:types].nil? + includes << (namix + MOCKABLE_H) if not yaml_hash[:systest][:mockable].nil? + includes << header_file + + write_source_file(GENERATED_PATH + name + C_EXTENSION, includes.flatten) do |out| + out.puts(source[:code]) + end + end + + def write_header_file(filename, upcase_name, include_list=[]) + File.open(filename, 'w') do |out| + out.puts("#ifndef _#{upcase_name}") + out.puts("#define _#{upcase_name}") + out.puts('') + include_list.each do |include| + out.puts("#include \"#{include}\"") + end + out.puts('') + out.puts("#if defined(__GNUC__) && !defined(__ICC)") + out.puts("#if !defined(__clang__)") + out.puts("#pragma GCC diagnostic ignored \"-Wpragmas\"") + out.puts("#endif") + out.puts('#pragma GCC diagnostic ignored "-Wunknown-pragmas"') + out.puts('#pragma GCC diagnostic ignored "-Wduplicate-decl-specifier"') + out.puts("#endif") + out.puts('') + yield(out) + out.puts('') + out.puts("#endif // _#{upcase_name}") + out.puts('') + end + end + + def write_source_file(filename, include_list=[]) + File.open(filename, 'w') do |out| + include_list.each do |include| + out.puts("#include \"#{include}\"") + end + out.puts('') + out.puts("#if defined(__GNUC__) && !defined(__ICC)") + out.puts("#if !defined(__clang__)") + out.puts("#pragma GCC diagnostic ignored \"-Wpragmas\"") + out.puts("#endif") + out.puts('#pragma GCC diagnostic ignored "-Wunknown-pragmas"') + out.puts('#pragma GCC diagnostic ignored "-Wduplicate-decl-specifier"') + out.puts("#endif") + out.puts('') + yield(out) + out.puts('') + end + end + +end + + +if ($0 == __FILE__) + SystemTestGenerator.new.generate_files(Dir[CASES_PATH + "*#{YAML_EXTENSION}"]) +end + diff --git a/test/test_helper.rb b/test/test_helper.rb index 4fed5bd..8df9b5c 100644 --- a/test/test_helper.rb +++ b/test/test_helper.rb @@ -1,47 +1,47 @@ -# ========================================== -# CMock Project - Automatic Mock Generation for C -# Copyright (c) 2007 Mike Karlesky, Mark VanderVoord, Greg Williams -# [Released under MIT License. Please refer to license.txt for details] -# ========================================== - - -require 'minitest/autorun' - -def create_mocks(*mocks) - mocks.each do |mock| - eval "@#{mock} = Minitest::Mock.new" - end -end - -def create_stub(funcs) - stub = Class.new - #if (RUBY_VERSION.split('.')[0].to_i >= 2) - # funcs.each_pair {|k,v| stub.define_singleton_method(k) {|*unused| return v } } - #else - blob = "class << stub\n" - funcs.each_pair {|k,v| blob += "def #{k.to_s}(unused=nil)\n #{v.inspect}\nend\n" } - blob += "end" - eval blob - #end - stub -end - -def test_return - { - :int => {:type => "int", :name => 'cmock_to_return', :ptr? => false, :const? => false, :void? => false, :str => 'int cmock_to_return'}, - :int_ptr => {:type => "int*", :name => 'cmock_to_return', :ptr? => true, :const? => false, :void? => false, :str => 'int* cmock_to_return'}, - :void => {:type => "void", :name => 'cmock_to_return', :ptr? => false, :const? => false, :void? => true, :str => 'void cmock_to_return'}, - :string => {:type => "char*", :name => 'cmock_to_return', :ptr? => false, :const? => true, :void? => false, :str => 'const char* cmock_to_return'}, - } -end - -def test_arg - { - :int => {:type => "int", :name => 'MyInt', :ptr? => false, :const? => false}, - :int_ptr => {:type => "int*", :name => 'MyIntPtr', :ptr? => true, :const? => false}, - :mytype => {:type => "MY_TYPE", :name => 'MyMyType', :ptr? => false, :const? => true}, - :mytype_ptr => {:type => "MY_TYPE*", :name => 'MyMyTypePtr', :ptr? => true, :const? => false}, - :string => {:type => "char*", :name => 'MyStr', :ptr? => false, :const? => true}, - } -end - +# ========================================== +# CMock Project - Automatic Mock Generation for C +# Copyright (c) 2007 Mike Karlesky, Mark VanderVoord, Greg Williams +# [Released under MIT License. Please refer to license.txt for details] +# ========================================== + + +require 'minitest/autorun' + +def create_mocks(*mocks) + mocks.each do |mock| + eval "@#{mock} = Minitest::Mock.new" + end +end + +def create_stub(funcs) + stub = Class.new + #if (RUBY_VERSION.split('.')[0].to_i >= 2) + # funcs.each_pair {|k,v| stub.define_singleton_method(k) {|*unused| return v } } + #else + blob = "class << stub\n" + funcs.each_pair {|k,v| blob += "def #{k.to_s}(unused=nil)\n #{v.inspect}\nend\n" } + blob += "end" + eval blob + #end + stub +end + +def test_return + { + :int => {:type => "int", :name => 'cmock_to_return', :ptr? => false, :const? => false, :void? => false, :str => 'int cmock_to_return'}, + :int_ptr => {:type => "int*", :name => 'cmock_to_return', :ptr? => true, :const? => false, :void? => false, :str => 'int* cmock_to_return'}, + :void => {:type => "void", :name => 'cmock_to_return', :ptr? => false, :const? => false, :void? => true, :str => 'void cmock_to_return'}, + :string => {:type => "char*", :name => 'cmock_to_return', :ptr? => false, :const? => true, :void? => false, :str => 'const char* cmock_to_return'}, + } +end + +def test_arg + { + :int => {:type => "int", :name => 'MyInt', :ptr? => false, :const? => false}, + :int_ptr => {:type => "int*", :name => 'MyIntPtr', :ptr? => true, :const? => false}, + :mytype => {:type => "MY_TYPE", :name => 'MyMyType', :ptr? => false, :const? => true}, + :mytype_ptr => {:type => "MY_TYPE*", :name => 'MyMyTypePtr', :ptr? => true, :const? => false}, + :string => {:type => "char*", :name => 'MyStr', :ptr? => false, :const? => true}, + } +end + diff --git a/test/unit/cmock_config_test.rb b/test/unit/cmock_config_test.rb index 7bcb538..f087481 100644 --- a/test/unit/cmock_config_test.rb +++ b/test/unit/cmock_config_test.rb @@ -1,118 +1,118 @@ -# ========================================== -# CMock Project - Automatic Mock Generation for C -# Copyright (c) 2007 Mike Karlesky, Mark VanderVoord, Greg Williams -# [Released under MIT License. Please refer to license.txt for details] -# ========================================== - - -require File.expand_path(File.dirname(__FILE__)) + "/../test_helper" -require 'cmock_config' - - -describe CMockConfig, "Verify CMockConfig Module" do - - it "use default settings when no parameters are specified" do - config = CMockConfig.new - assert_equal(CMockConfig::CMockDefaultOptions[:mock_path], config.mock_path) - assert_equal(CMockConfig::CMockDefaultOptions[:includes], config.includes) - assert_equal(CMockConfig::CMockDefaultOptions[:attributes], config.attributes) - assert_equal(CMockConfig::CMockDefaultOptions[:plugins], config.plugins) - assert_equal(CMockConfig::CMockDefaultOptions[:treat_externs], config.treat_externs) - end - - it "replace only options specified in a hash" do - test_includes = ['hello'] - test_attributes = ['blah', 'bleh'] - config = CMockConfig.new(:includes => test_includes, :attributes => test_attributes) - assert_equal(CMockConfig::CMockDefaultOptions[:mock_path], config.mock_path) - assert_equal(test_includes, config.includes) - assert_equal(test_attributes, config.attributes) - assert_equal(CMockConfig::CMockDefaultOptions[:plugins], config.plugins) - assert_equal(CMockConfig::CMockDefaultOptions[:treat_externs], config.treat_externs) - end - - it "replace only options specified in a yaml file" do - test_plugins = [:soda, :pizza] - config = CMockConfig.new("#{File.expand_path(File.dirname(__FILE__))}/cmock_config_test.yml") - assert_equal(CMockConfig::CMockDefaultOptions[:mock_path], config.mock_path) - assert_equal(CMockConfig::CMockDefaultOptions[:includes], config.includes) - assert_equal(test_plugins, config.plugins) - assert_equal(:include, config.treat_externs) - end - - it "populate treat_as map with internal standard_treat_as_map defaults, redefine defaults, and add custom values" do - - user_treat_as1 = { - 'BOOL' => 'UINT8', # redefine standard default - 'unsigned long' => 'INT', # redefine standard default - 'U8' => 'UINT8', # custom value - 'U16' => 'UINT16' # custom value - } - user_treat_as2 = { - 'BOOL' => 'INT16', # redefine standard default - 'U16' => 'HEX16' # custom value - } - - config1 = CMockConfig.new({:treat_as => user_treat_as1}) - config2 = CMockConfig.new({:treat_as => user_treat_as2}) - - # ----- USER SET 1 - # standard defaults - assert_equal('INT', config1.treat_as['BOOL_T']) - assert_equal('HEX32', config1.treat_as['unsigned int']) - assert_equal('HEX8_ARRAY',config1.treat_as['void*']) - assert_equal('STRING', config1.treat_as['CSTRING']) - assert_equal('STRING', config1.treat_as['char*']) - assert_equal('HEX8', config1.treat_as['unsigned char']) - assert_equal('INT', config1.treat_as['long']) - assert_equal('INT16', config1.treat_as['short']) - - # overrides - assert_equal('UINT8', config1.treat_as['BOOL']) - assert_equal('INT', config1.treat_as['unsigned long']) - - # added custom values - assert_equal('UINT8', config1.treat_as['U8']) - assert_equal('UINT16', config1.treat_as['U16']) - - # standard_treat_as_map: unchanged - assert_equal('INT', config1.standard_treat_as_map['BOOL']) - assert_equal('HEX32', config1.standard_treat_as_map['unsigned long']) - assert_equal('STRING', config1.standard_treat_as_map['char*']) - - # ----- USER SET 2 - # standard defaults - assert_equal('INT', config2.treat_as['BOOL_T']) - assert_equal('HEX32', config2.treat_as['unsigned int']) - assert_equal('HEX8_ARRAY',config2.treat_as['void*']) - assert_equal('STRING', config2.treat_as['CSTRING']) - assert_equal('STRING', config2.treat_as['char*']) - assert_equal('HEX8', config2.treat_as['unsigned char']) - assert_equal('INT', config2.treat_as['long']) - assert_equal('INT16', config2.treat_as['short']) - assert_equal('HEX32', config2.treat_as['unsigned long']) - - # overrides - assert_equal('INT16', config2.treat_as['BOOL']) - - # added custom values - assert_equal('HEX16', config2.treat_as['U16']) - - # standard_treat_as_map: unchanged - assert_equal('INT', config2.standard_treat_as_map['BOOL']) - assert_equal('HEX32', config2.standard_treat_as_map['unsigned long']) - assert_equal('STRING', config2.standard_treat_as_map['char*']) - end - - it "standard treat_as map should be incorruptable" do - config = CMockConfig.new({}) - - assert_equal('INT', config.standard_treat_as_map['BOOL_T']) - - local = config.standard_treat_as_map - local['BOOL_T'] = "U8" - - assert_equal('INT', config.standard_treat_as_map['BOOL_T']) - end - -end +# ========================================== +# CMock Project - Automatic Mock Generation for C +# Copyright (c) 2007 Mike Karlesky, Mark VanderVoord, Greg Williams +# [Released under MIT License. Please refer to license.txt for details] +# ========================================== + + +require File.expand_path(File.dirname(__FILE__)) + "/../test_helper" +require 'cmock_config' + + +describe CMockConfig, "Verify CMockConfig Module" do + + it "use default settings when no parameters are specified" do + config = CMockConfig.new + assert_equal(CMockConfig::CMockDefaultOptions[:mock_path], config.mock_path) + assert_equal(CMockConfig::CMockDefaultOptions[:includes], config.includes) + assert_equal(CMockConfig::CMockDefaultOptions[:attributes], config.attributes) + assert_equal(CMockConfig::CMockDefaultOptions[:plugins], config.plugins) + assert_equal(CMockConfig::CMockDefaultOptions[:treat_externs], config.treat_externs) + end + + it "replace only options specified in a hash" do + test_includes = ['hello'] + test_attributes = ['blah', 'bleh'] + config = CMockConfig.new(:includes => test_includes, :attributes => test_attributes) + assert_equal(CMockConfig::CMockDefaultOptions[:mock_path], config.mock_path) + assert_equal(test_includes, config.includes) + assert_equal(test_attributes, config.attributes) + assert_equal(CMockConfig::CMockDefaultOptions[:plugins], config.plugins) + assert_equal(CMockConfig::CMockDefaultOptions[:treat_externs], config.treat_externs) + end + + it "replace only options specified in a yaml file" do + test_plugins = [:soda, :pizza] + config = CMockConfig.new("#{File.expand_path(File.dirname(__FILE__))}/cmock_config_test.yml") + assert_equal(CMockConfig::CMockDefaultOptions[:mock_path], config.mock_path) + assert_equal(CMockConfig::CMockDefaultOptions[:includes], config.includes) + assert_equal(test_plugins, config.plugins) + assert_equal(:include, config.treat_externs) + end + + it "populate treat_as map with internal standard_treat_as_map defaults, redefine defaults, and add custom values" do + + user_treat_as1 = { + 'BOOL' => 'UINT8', # redefine standard default + 'unsigned long' => 'INT', # redefine standard default + 'U8' => 'UINT8', # custom value + 'U16' => 'UINT16' # custom value + } + user_treat_as2 = { + 'BOOL' => 'INT16', # redefine standard default + 'U16' => 'HEX16' # custom value + } + + config1 = CMockConfig.new({:treat_as => user_treat_as1}) + config2 = CMockConfig.new({:treat_as => user_treat_as2}) + + # ----- USER SET 1 + # standard defaults + assert_equal('INT', config1.treat_as['BOOL_T']) + assert_equal('HEX32', config1.treat_as['unsigned int']) + assert_equal('HEX8_ARRAY',config1.treat_as['void*']) + assert_equal('STRING', config1.treat_as['CSTRING']) + assert_equal('STRING', config1.treat_as['char*']) + assert_equal('HEX8', config1.treat_as['unsigned char']) + assert_equal('INT', config1.treat_as['long']) + assert_equal('INT16', config1.treat_as['short']) + + # overrides + assert_equal('UINT8', config1.treat_as['BOOL']) + assert_equal('INT', config1.treat_as['unsigned long']) + + # added custom values + assert_equal('UINT8', config1.treat_as['U8']) + assert_equal('UINT16', config1.treat_as['U16']) + + # standard_treat_as_map: unchanged + assert_equal('INT', config1.standard_treat_as_map['BOOL']) + assert_equal('HEX32', config1.standard_treat_as_map['unsigned long']) + assert_equal('STRING', config1.standard_treat_as_map['char*']) + + # ----- USER SET 2 + # standard defaults + assert_equal('INT', config2.treat_as['BOOL_T']) + assert_equal('HEX32', config2.treat_as['unsigned int']) + assert_equal('HEX8_ARRAY',config2.treat_as['void*']) + assert_equal('STRING', config2.treat_as['CSTRING']) + assert_equal('STRING', config2.treat_as['char*']) + assert_equal('HEX8', config2.treat_as['unsigned char']) + assert_equal('INT', config2.treat_as['long']) + assert_equal('INT16', config2.treat_as['short']) + assert_equal('HEX32', config2.treat_as['unsigned long']) + + # overrides + assert_equal('INT16', config2.treat_as['BOOL']) + + # added custom values + assert_equal('HEX16', config2.treat_as['U16']) + + # standard_treat_as_map: unchanged + assert_equal('INT', config2.standard_treat_as_map['BOOL']) + assert_equal('HEX32', config2.standard_treat_as_map['unsigned long']) + assert_equal('STRING', config2.standard_treat_as_map['char*']) + end + + it "standard treat_as map should be incorruptable" do + config = CMockConfig.new({}) + + assert_equal('INT', config.standard_treat_as_map['BOOL_T']) + + local = config.standard_treat_as_map + local['BOOL_T'] = "U8" + + assert_equal('INT', config.standard_treat_as_map['BOOL_T']) + end + +end diff --git a/test/unit/cmock_file_writer_test.rb b/test/unit/cmock_file_writer_test.rb index 31c51b3..c657380 100644 --- a/test/unit/cmock_file_writer_test.rb +++ b/test/unit/cmock_file_writer_test.rb @@ -1,27 +1,27 @@ -# ========================================== -# CMock Project - Automatic Mock Generation for C -# Copyright (c) 2007 Mike Karlesky, Mark VanderVoord, Greg Williams -# [Released under MIT License. Please refer to license.txt for details] -# ========================================== - -require File.expand_path(File.dirname(__FILE__)) + "/../test_helper" -require 'cmock_file_writer' - -describe CMockFileWriter, "Verify CMockFileWriter Module" do - - before do - create_mocks :config - @cmock_file_writer = CMockFileWriter.new(@config) - end - - after do - end - - it "complain if a block was not specified when calling create" do - begin - @cmock_file_writer.create_file("test.txt") - assert false, "Should Have Thrown An Error When Calling Without A Block" - rescue - end - end -end +# ========================================== +# CMock Project - Automatic Mock Generation for C +# Copyright (c) 2007 Mike Karlesky, Mark VanderVoord, Greg Williams +# [Released under MIT License. Please refer to license.txt for details] +# ========================================== + +require File.expand_path(File.dirname(__FILE__)) + "/../test_helper" +require 'cmock_file_writer' + +describe CMockFileWriter, "Verify CMockFileWriter Module" do + + before do + create_mocks :config + @cmock_file_writer = CMockFileWriter.new(@config) + end + + after do + end + + it "complain if a block was not specified when calling create" do + begin + @cmock_file_writer.create_file("test.txt") + assert false, "Should Have Thrown An Error When Calling Without A Block" + rescue + end + end +end diff --git a/test/unit/cmock_generator_plugin_array_test.rb b/test/unit/cmock_generator_plugin_array_test.rb index 17ac954..77af1b2 100644 --- a/test/unit/cmock_generator_plugin_array_test.rb +++ b/test/unit/cmock_generator_plugin_array_test.rb @@ -1,133 +1,133 @@ -# ========================================== -# CMock Project - Automatic Mock Generation for C -# Copyright (c) 2007 Mike Karlesky, Mark VanderVoord, Greg Williams -# [Released under MIT License. Please refer to license.txt for details] -# ========================================== - -require File.expand_path(File.dirname(__FILE__)) + "/../test_helper" -require 'cmock_generator_plugin_array' - -describe CMockGeneratorPluginArray, "Verify CMockPGeneratorluginArray Module" do - before do - create_mocks :utils - - #no strict ordering - @config = create_stub( - :when_ptr => :compare_data, - :enforce_strict_ordering => false, - :respond_to? => true ) - - @utils = create_stub( - :helpers => {}, - :code_add_base_expectation => "mock_retval_0" - ) - - @cmock_generator_plugin_array = CMockGeneratorPluginArray.new(@config, @utils) - end - - after do - end - - it "have set up internal priority" do - assert_equal(nil, @cmock_generator_plugin_array.unity_helper) - assert_equal(8, @cmock_generator_plugin_array.priority) - end - - it "not include any additional include files" do - assert(!@cmock_generator_plugin_array.respond_to?(:include_files)) - end - - it "not add to typedef structure for functions of style 'int* func(void)'" do - function = {:name => "Oak", :args => [], :return => test_return[:int_ptr]} - returned = @cmock_generator_plugin_array.instance_typedefs(function) - assert_equal("", returned) - end - - it "add to tyepdef structure mock needs of functions of style 'void func(int chicken, int* pork)'" do - function = {:name => "Cedar", :args => [{ :name => "chicken", :type => "int", :ptr? => false}, { :name => "pork", :type => "int*", :ptr? => true}], :return => test_return[:void]} - expected = " int Expected_pork_Depth;\n" - returned = @cmock_generator_plugin_array.instance_typedefs(function) - assert_equal(expected, returned) - end - - it "not add an additional mock interface for functions not containing pointers" do - function = {:name => "Maple", :args_string => "int blah", :return => test_return[:string], :contains_ptr? => false} - returned = @cmock_generator_plugin_array.mock_function_declarations(function) - assert_nil(returned) - end - - it "add another mock function declaration for functions of style 'void func(int* tofu)'" do - function = {:name => "Pine", - :args => [{ :type => "int*", - :name => "tofu", - :ptr? => true, - }], - :return => test_return[:void], - :contains_ptr? => true } - - expected = "#define #{function[:name]}_ExpectWithArray(tofu, tofu_Depth) #{function[:name]}_CMockExpectWithArray(__LINE__, tofu, tofu_Depth)\n" + - "void #{function[:name]}_CMockExpectWithArray(UNITY_LINE_TYPE cmock_line, int* tofu, int tofu_Depth);\n" - returned = @cmock_generator_plugin_array.mock_function_declarations(function) - assert_equal(expected, returned) - end - - it "add another mock function declaration for functions of style 'const char* func(int* tofu)'" do - function = {:name => "Pine", - :args => [{ :type => "int*", - :name => "tofu", - :ptr? => true, - }], - :return => test_return[:string], - :contains_ptr? => true } - - expected = "#define #{function[:name]}_ExpectWithArrayAndReturn(tofu, tofu_Depth, cmock_retval) #{function[:name]}_CMockExpectWithArrayAndReturn(__LINE__, tofu, tofu_Depth, cmock_retval)\n" + - "void #{function[:name]}_CMockExpectWithArrayAndReturn(UNITY_LINE_TYPE cmock_line, int* tofu, int tofu_Depth, const char* cmock_to_return);\n" - returned = @cmock_generator_plugin_array.mock_function_declarations(function) - assert_equal(expected, returned) - end - - it "add another mock function declaration for functions of style 'const char* func(const int* tofu)'" do - function = {:name => "Pine", - :args => [{ :type => "int*", - :name => "tofu", - :ptr? => true, - :const? => true, - }], - :return => test_return[:string], - :contains_ptr? => true } - - expected = "#define #{function[:name]}_ExpectWithArrayAndReturn(tofu, tofu_Depth, cmock_retval) #{function[:name]}_CMockExpectWithArrayAndReturn(__LINE__, tofu, tofu_Depth, cmock_retval)\n" + - "void #{function[:name]}_CMockExpectWithArrayAndReturn(UNITY_LINE_TYPE cmock_line, const int* tofu, int tofu_Depth, const char* cmock_to_return);\n" - returned = @cmock_generator_plugin_array.mock_function_declarations(function) - assert_equal(expected, returned) - end - - it "not have a mock function implementation" do - assert(!@cmock_generator_plugin_array.respond_to?(:mock_implementation)) - end - - it "not have a mock interfaces for functions of style 'int* func(void)'" do - function = {:name => "Pear", :args => [], :args_string => "void", :return => test_return[:int_ptr]} - returned = @cmock_generator_plugin_array.mock_interfaces(function) - assert_nil(returned) - end - - it "add mock interfaces for functions of style 'int* func(int* pescado, int pes)'" do - function = {:name => "Lemon", - :args => [{ :type => "int*", :name => "pescado", :ptr? => true}, { :type => "int", :name => "pes", :ptr? => false}], - :args_string => "int* pescado, int pes", - :return => test_return[:int_ptr], - :contains_ptr? => true } - - expected = ["void Lemon_CMockExpectWithArrayAndReturn(UNITY_LINE_TYPE cmock_line, int* pescado, int pescado_Depth, int pes, int* cmock_to_return)\n", - "{\n", - "mock_retval_0", - " CMockExpectParameters_Lemon(cmock_call_instance, pescado, pescado_Depth, pes);\n", - " cmock_call_instance->ReturnVal = cmock_to_return;\n", - "}\n\n" - ].join - returned = @cmock_generator_plugin_array.mock_interfaces(function).join - assert_equal(expected, returned) - end - -end +# ========================================== +# CMock Project - Automatic Mock Generation for C +# Copyright (c) 2007 Mike Karlesky, Mark VanderVoord, Greg Williams +# [Released under MIT License. Please refer to license.txt for details] +# ========================================== + +require File.expand_path(File.dirname(__FILE__)) + "/../test_helper" +require 'cmock_generator_plugin_array' + +describe CMockGeneratorPluginArray, "Verify CMockPGeneratorluginArray Module" do + before do + create_mocks :utils + + #no strict ordering + @config = create_stub( + :when_ptr => :compare_data, + :enforce_strict_ordering => false, + :respond_to? => true ) + + @utils = create_stub( + :helpers => {}, + :code_add_base_expectation => "mock_retval_0" + ) + + @cmock_generator_plugin_array = CMockGeneratorPluginArray.new(@config, @utils) + end + + after do + end + + it "have set up internal priority" do + assert_equal(nil, @cmock_generator_plugin_array.unity_helper) + assert_equal(8, @cmock_generator_plugin_array.priority) + end + + it "not include any additional include files" do + assert(!@cmock_generator_plugin_array.respond_to?(:include_files)) + end + + it "not add to typedef structure for functions of style 'int* func(void)'" do + function = {:name => "Oak", :args => [], :return => test_return[:int_ptr]} + returned = @cmock_generator_plugin_array.instance_typedefs(function) + assert_equal("", returned) + end + + it "add to tyepdef structure mock needs of functions of style 'void func(int chicken, int* pork)'" do + function = {:name => "Cedar", :args => [{ :name => "chicken", :type => "int", :ptr? => false}, { :name => "pork", :type => "int*", :ptr? => true}], :return => test_return[:void]} + expected = " int Expected_pork_Depth;\n" + returned = @cmock_generator_plugin_array.instance_typedefs(function) + assert_equal(expected, returned) + end + + it "not add an additional mock interface for functions not containing pointers" do + function = {:name => "Maple", :args_string => "int blah", :return => test_return[:string], :contains_ptr? => false} + returned = @cmock_generator_plugin_array.mock_function_declarations(function) + assert_nil(returned) + end + + it "add another mock function declaration for functions of style 'void func(int* tofu)'" do + function = {:name => "Pine", + :args => [{ :type => "int*", + :name => "tofu", + :ptr? => true, + }], + :return => test_return[:void], + :contains_ptr? => true } + + expected = "#define #{function[:name]}_ExpectWithArray(tofu, tofu_Depth) #{function[:name]}_CMockExpectWithArray(__LINE__, tofu, tofu_Depth)\n" + + "void #{function[:name]}_CMockExpectWithArray(UNITY_LINE_TYPE cmock_line, int* tofu, int tofu_Depth);\n" + returned = @cmock_generator_plugin_array.mock_function_declarations(function) + assert_equal(expected, returned) + end + + it "add another mock function declaration for functions of style 'const char* func(int* tofu)'" do + function = {:name => "Pine", + :args => [{ :type => "int*", + :name => "tofu", + :ptr? => true, + }], + :return => test_return[:string], + :contains_ptr? => true } + + expected = "#define #{function[:name]}_ExpectWithArrayAndReturn(tofu, tofu_Depth, cmock_retval) #{function[:name]}_CMockExpectWithArrayAndReturn(__LINE__, tofu, tofu_Depth, cmock_retval)\n" + + "void #{function[:name]}_CMockExpectWithArrayAndReturn(UNITY_LINE_TYPE cmock_line, int* tofu, int tofu_Depth, const char* cmock_to_return);\n" + returned = @cmock_generator_plugin_array.mock_function_declarations(function) + assert_equal(expected, returned) + end + + it "add another mock function declaration for functions of style 'const char* func(const int* tofu)'" do + function = {:name => "Pine", + :args => [{ :type => "int*", + :name => "tofu", + :ptr? => true, + :const? => true, + }], + :return => test_return[:string], + :contains_ptr? => true } + + expected = "#define #{function[:name]}_ExpectWithArrayAndReturn(tofu, tofu_Depth, cmock_retval) #{function[:name]}_CMockExpectWithArrayAndReturn(__LINE__, tofu, tofu_Depth, cmock_retval)\n" + + "void #{function[:name]}_CMockExpectWithArrayAndReturn(UNITY_LINE_TYPE cmock_line, const int* tofu, int tofu_Depth, const char* cmock_to_return);\n" + returned = @cmock_generator_plugin_array.mock_function_declarations(function) + assert_equal(expected, returned) + end + + it "not have a mock function implementation" do + assert(!@cmock_generator_plugin_array.respond_to?(:mock_implementation)) + end + + it "not have a mock interfaces for functions of style 'int* func(void)'" do + function = {:name => "Pear", :args => [], :args_string => "void", :return => test_return[:int_ptr]} + returned = @cmock_generator_plugin_array.mock_interfaces(function) + assert_nil(returned) + end + + it "add mock interfaces for functions of style 'int* func(int* pescado, int pes)'" do + function = {:name => "Lemon", + :args => [{ :type => "int*", :name => "pescado", :ptr? => true}, { :type => "int", :name => "pes", :ptr? => false}], + :args_string => "int* pescado, int pes", + :return => test_return[:int_ptr], + :contains_ptr? => true } + + expected = ["void Lemon_CMockExpectWithArrayAndReturn(UNITY_LINE_TYPE cmock_line, int* pescado, int pescado_Depth, int pes, int* cmock_to_return)\n", + "{\n", + "mock_retval_0", + " CMockExpectParameters_Lemon(cmock_call_instance, pescado, pescado_Depth, pes);\n", + " cmock_call_instance->ReturnVal = cmock_to_return;\n", + "}\n\n" + ].join + returned = @cmock_generator_plugin_array.mock_interfaces(function).join + assert_equal(expected, returned) + end + +end diff --git a/test/unit/cmock_generator_plugin_callback_test.rb b/test/unit/cmock_generator_plugin_callback_test.rb index c060e85..7934fe6 100644 --- a/test/unit/cmock_generator_plugin_callback_test.rb +++ b/test/unit/cmock_generator_plugin_callback_test.rb @@ -1,189 +1,189 @@ -# ========================================== -# CMock Project - Automatic Mock Generation for C -# Copyright (c) 2007 Mike Karlesky, Mark VanderVoord, Greg Williams -# [Released under MIT License. Please refer to license.txt for details] -# ========================================== - -require File.expand_path(File.dirname(__FILE__)) + "/../test_helper" -require 'cmock_generator_plugin_callback' - -describe CMockGeneratorPluginCallback, "Verify CMockGeneratorPluginCallback Module" do - - before do - create_mocks :config, :utils - - @config.expect :callback_include_count, true - @config.expect :callback_after_arg_check, false - - @cmock_generator_plugin_callback = CMockGeneratorPluginCallback.new(@config, @utils) - end - - after do - end - - it "have set up internal priority" do - assert_equal(6, @cmock_generator_plugin_callback.priority) - end - - it "not include any additional include files" do - assert(!@cmock_generator_plugin_callback.respond_to?(:include_files)) - end - - it "add to instance structure" do - function = {:name => "Oak", :args => [:type => "int*", :name => "blah", :ptr? => true], :return => test_return[:int_ptr]} - expected = " CMOCK_Oak_CALLBACK Oak_CallbackFunctionPointer;\n" + - " int Oak_CallbackCalls;\n" - returned = @cmock_generator_plugin_callback.instance_structure(function) - assert_equal(expected, returned) - end - - it "add mock function declaration for function without arguments" do - function = {:name => "Maple", :args_string => "void", :args => [], :return => test_return[:void]} - expected = [ "typedef void (* CMOCK_Maple_CALLBACK)(int cmock_num_calls);\n", - "void Maple_StubWithCallback(CMOCK_Maple_CALLBACK Callback);\n" ].join - returned = @cmock_generator_plugin_callback.mock_function_declarations(function) - assert_equal(expected, returned) - end - - it "add mock function declaration for function without arguments when count is also turned off" do - function = {:name => "Maple", :args_string => "void", :args => [], :return => test_return[:void]} - expected = [ "typedef void (* CMOCK_Maple_CALLBACK)(void);\n", - "void Maple_StubWithCallback(CMOCK_Maple_CALLBACK Callback);\n" ].join - @cmock_generator_plugin_callback.include_count = false - returned = @cmock_generator_plugin_callback.mock_function_declarations(function) - assert_equal(expected, returned) - end - - it "add mock function declaration for function with arguments" do - function = {:name => "Maple", :args_string => "int* tofu", :args => [1], :return => test_return[:void]} - expected = [ "typedef void (* CMOCK_Maple_CALLBACK)(int* tofu, int cmock_num_calls);\n", - "void Maple_StubWithCallback(CMOCK_Maple_CALLBACK Callback);\n" ].join - returned = @cmock_generator_plugin_callback.mock_function_declarations(function) - assert_equal(expected, returned) - end - - it "add mock function declaration for function with return values" do - function = {:name => "Maple", :args_string => "int* tofu", :args => [1], :return => test_return[:string]} - expected = [ "typedef const char* (* CMOCK_Maple_CALLBACK)(int* tofu, int cmock_num_calls);\n", - "void Maple_StubWithCallback(CMOCK_Maple_CALLBACK Callback);\n" ].join - returned = @cmock_generator_plugin_callback.mock_function_declarations(function) - assert_equal(expected, returned) - end - - it "add mock function declaration for function with return values and count is turned off" do - function = {:name => "Maple", :args_string => "int* tofu", :args => [1], :return => test_return[:string]} - expected = [ "typedef const char* (* CMOCK_Maple_CALLBACK)(int* tofu);\n", - "void Maple_StubWithCallback(CMOCK_Maple_CALLBACK Callback);\n" ].join - @cmock_generator_plugin_callback.include_count = false - returned = @cmock_generator_plugin_callback.mock_function_declarations(function) - assert_equal(expected, returned) - end - - it "add mock function implementation for functions of style 'void func(void)'" do - function = {:name => "Apple", :args => [], :args_string => "void", :return => test_return[:void]} - expected = [" if (Mock.Apple_CallbackFunctionPointer != NULL)\n", - " {\n", - " Mock.Apple_CallbackFunctionPointer(Mock.Apple_CallbackCalls++);\n", - " return;\n", - " }\n" - ].join - returned = @cmock_generator_plugin_callback.mock_implementation_precheck(function) - assert_equal(expected, returned) - end - - it "add mock function implementation for functions of style 'void func(void)' when count turned off" do - function = {:name => "Apple", :args => [], :args_string => "void", :return => test_return[:void]} - expected = [" if (Mock.Apple_CallbackFunctionPointer != NULL)\n", - " {\n", - " Mock.Apple_CallbackFunctionPointer();\n", - " return;\n", - " }\n" - ].join - @cmock_generator_plugin_callback.include_count = false - returned = @cmock_generator_plugin_callback.mock_implementation_precheck(function) - assert_equal(expected, returned) - end - - it "add mock function implementation for functions of style 'int func(void)'" do - function = {:name => "Apple", :args => [], :args_string => "void", :return => test_return[:int]} - expected = [" if (Mock.Apple_CallbackFunctionPointer != NULL)\n", - " {\n", - " return Mock.Apple_CallbackFunctionPointer(Mock.Apple_CallbackCalls++);\n", - " }\n" - ].join - returned = @cmock_generator_plugin_callback.mock_implementation_precheck(function) - assert_equal(expected, returned) - end - - it "add mock function implementation for functions of style 'void func(int* steak, uint8_t flag)'" do - function = {:name => "Apple", - :args => [ { :type => 'int*', :name => 'steak', :ptr? => true}, - { :type => 'uint8_t', :name => 'flag', :ptr? => false} ], - :args_string => "int* steak, uint8_t flag", - :return=> test_return[:void]} - expected = [" if (Mock.Apple_CallbackFunctionPointer != NULL)\n", - " {\n", - " Mock.Apple_CallbackFunctionPointer(steak, flag, Mock.Apple_CallbackCalls++);\n", - " return;\n", - " }\n" - ].join - returned = @cmock_generator_plugin_callback.mock_implementation_precheck(function) - assert_equal(expected, returned) - end - - it "add mock function implementation for functions of style 'void func(int* steak, uint8_t flag)' when count turned off" do - function = {:name => "Apple", - :args => [ { :type => 'int*', :name => 'steak', :ptr? => true}, - { :type => 'uint8_t', :name => 'flag', :ptr? => false} ], - :args_string => "int* steak, uint8_t flag", - :return=> test_return[:void]} - expected = [" if (Mock.Apple_CallbackFunctionPointer != NULL)\n", - " {\n", - " Mock.Apple_CallbackFunctionPointer(steak, flag);\n", - " return;\n", - " }\n" - ].join - @cmock_generator_plugin_callback.include_count = false - returned = @cmock_generator_plugin_callback.mock_implementation_precheck(function) - assert_equal(expected, returned) - end - - it "add mock function implementation for functions of style 'int16_t func(int* steak, uint8_t flag)'" do - function = {:name => "Apple", - :args => [ { :type => 'int*', :name => 'steak', :ptr? => true}, - { :type => 'uint8_t', :name => 'flag', :ptr? => false} ], - :args_string => "int* steak, uint8_t flag", - :return => test_return[:int]} - expected = [" if (Mock.Apple_CallbackFunctionPointer != NULL)\n", - " {\n", - " return Mock.Apple_CallbackFunctionPointer(steak, flag, Mock.Apple_CallbackCalls++);\n", - " }\n" - ].join - returned = @cmock_generator_plugin_callback.mock_implementation_precheck(function) - assert_equal(expected, returned) - end - - it "add mock interfaces for functions " do - function = {:name => "Lemon", - :args => [{ :type => "char*", :name => "pescado"}], - :args_string => "char* pescado", - :return => test_return[:int] - } - - expected = ["void Lemon_StubWithCallback(CMOCK_Lemon_CALLBACK Callback)\n", - "{\n", - " Mock.Lemon_CallbackFunctionPointer = Callback;\n", - "}\n\n" - ].join - returned = @cmock_generator_plugin_callback.mock_interfaces(function) - assert_equal(expected, returned) - end - - it "add mock destroy for functions" do - function = {:name => "Peach", :args => [], :return => test_return[:void] } - expected = " Mock.Peach_CallbackFunctionPointer = NULL;\n" + - " Mock.Peach_CallbackCalls = 0;\n" - returned = @cmock_generator_plugin_callback.mock_destroy(function) - assert_equal(expected, returned) - end -end +# ========================================== +# CMock Project - Automatic Mock Generation for C +# Copyright (c) 2007 Mike Karlesky, Mark VanderVoord, Greg Williams +# [Released under MIT License. Please refer to license.txt for details] +# ========================================== + +require File.expand_path(File.dirname(__FILE__)) + "/../test_helper" +require 'cmock_generator_plugin_callback' + +describe CMockGeneratorPluginCallback, "Verify CMockGeneratorPluginCallback Module" do + + before do + create_mocks :config, :utils + + @config.expect :callback_include_count, true + @config.expect :callback_after_arg_check, false + + @cmock_generator_plugin_callback = CMockGeneratorPluginCallback.new(@config, @utils) + end + + after do + end + + it "have set up internal priority" do + assert_equal(6, @cmock_generator_plugin_callback.priority) + end + + it "not include any additional include files" do + assert(!@cmock_generator_plugin_callback.respond_to?(:include_files)) + end + + it "add to instance structure" do + function = {:name => "Oak", :args => [:type => "int*", :name => "blah", :ptr? => true], :return => test_return[:int_ptr]} + expected = " CMOCK_Oak_CALLBACK Oak_CallbackFunctionPointer;\n" + + " int Oak_CallbackCalls;\n" + returned = @cmock_generator_plugin_callback.instance_structure(function) + assert_equal(expected, returned) + end + + it "add mock function declaration for function without arguments" do + function = {:name => "Maple", :args_string => "void", :args => [], :return => test_return[:void]} + expected = [ "typedef void (* CMOCK_Maple_CALLBACK)(int cmock_num_calls);\n", + "void Maple_StubWithCallback(CMOCK_Maple_CALLBACK Callback);\n" ].join + returned = @cmock_generator_plugin_callback.mock_function_declarations(function) + assert_equal(expected, returned) + end + + it "add mock function declaration for function without arguments when count is also turned off" do + function = {:name => "Maple", :args_string => "void", :args => [], :return => test_return[:void]} + expected = [ "typedef void (* CMOCK_Maple_CALLBACK)(void);\n", + "void Maple_StubWithCallback(CMOCK_Maple_CALLBACK Callback);\n" ].join + @cmock_generator_plugin_callback.include_count = false + returned = @cmock_generator_plugin_callback.mock_function_declarations(function) + assert_equal(expected, returned) + end + + it "add mock function declaration for function with arguments" do + function = {:name => "Maple", :args_string => "int* tofu", :args => [1], :return => test_return[:void]} + expected = [ "typedef void (* CMOCK_Maple_CALLBACK)(int* tofu, int cmock_num_calls);\n", + "void Maple_StubWithCallback(CMOCK_Maple_CALLBACK Callback);\n" ].join + returned = @cmock_generator_plugin_callback.mock_function_declarations(function) + assert_equal(expected, returned) + end + + it "add mock function declaration for function with return values" do + function = {:name => "Maple", :args_string => "int* tofu", :args => [1], :return => test_return[:string]} + expected = [ "typedef const char* (* CMOCK_Maple_CALLBACK)(int* tofu, int cmock_num_calls);\n", + "void Maple_StubWithCallback(CMOCK_Maple_CALLBACK Callback);\n" ].join + returned = @cmock_generator_plugin_callback.mock_function_declarations(function) + assert_equal(expected, returned) + end + + it "add mock function declaration for function with return values and count is turned off" do + function = {:name => "Maple", :args_string => "int* tofu", :args => [1], :return => test_return[:string]} + expected = [ "typedef const char* (* CMOCK_Maple_CALLBACK)(int* tofu);\n", + "void Maple_StubWithCallback(CMOCK_Maple_CALLBACK Callback);\n" ].join + @cmock_generator_plugin_callback.include_count = false + returned = @cmock_generator_plugin_callback.mock_function_declarations(function) + assert_equal(expected, returned) + end + + it "add mock function implementation for functions of style 'void func(void)'" do + function = {:name => "Apple", :args => [], :args_string => "void", :return => test_return[:void]} + expected = [" if (Mock.Apple_CallbackFunctionPointer != NULL)\n", + " {\n", + " Mock.Apple_CallbackFunctionPointer(Mock.Apple_CallbackCalls++);\n", + " return;\n", + " }\n" + ].join + returned = @cmock_generator_plugin_callback.mock_implementation_precheck(function) + assert_equal(expected, returned) + end + + it "add mock function implementation for functions of style 'void func(void)' when count turned off" do + function = {:name => "Apple", :args => [], :args_string => "void", :return => test_return[:void]} + expected = [" if (Mock.Apple_CallbackFunctionPointer != NULL)\n", + " {\n", + " Mock.Apple_CallbackFunctionPointer();\n", + " return;\n", + " }\n" + ].join + @cmock_generator_plugin_callback.include_count = false + returned = @cmock_generator_plugin_callback.mock_implementation_precheck(function) + assert_equal(expected, returned) + end + + it "add mock function implementation for functions of style 'int func(void)'" do + function = {:name => "Apple", :args => [], :args_string => "void", :return => test_return[:int]} + expected = [" if (Mock.Apple_CallbackFunctionPointer != NULL)\n", + " {\n", + " return Mock.Apple_CallbackFunctionPointer(Mock.Apple_CallbackCalls++);\n", + " }\n" + ].join + returned = @cmock_generator_plugin_callback.mock_implementation_precheck(function) + assert_equal(expected, returned) + end + + it "add mock function implementation for functions of style 'void func(int* steak, uint8_t flag)'" do + function = {:name => "Apple", + :args => [ { :type => 'int*', :name => 'steak', :ptr? => true}, + { :type => 'uint8_t', :name => 'flag', :ptr? => false} ], + :args_string => "int* steak, uint8_t flag", + :return=> test_return[:void]} + expected = [" if (Mock.Apple_CallbackFunctionPointer != NULL)\n", + " {\n", + " Mock.Apple_CallbackFunctionPointer(steak, flag, Mock.Apple_CallbackCalls++);\n", + " return;\n", + " }\n" + ].join + returned = @cmock_generator_plugin_callback.mock_implementation_precheck(function) + assert_equal(expected, returned) + end + + it "add mock function implementation for functions of style 'void func(int* steak, uint8_t flag)' when count turned off" do + function = {:name => "Apple", + :args => [ { :type => 'int*', :name => 'steak', :ptr? => true}, + { :type => 'uint8_t', :name => 'flag', :ptr? => false} ], + :args_string => "int* steak, uint8_t flag", + :return=> test_return[:void]} + expected = [" if (Mock.Apple_CallbackFunctionPointer != NULL)\n", + " {\n", + " Mock.Apple_CallbackFunctionPointer(steak, flag);\n", + " return;\n", + " }\n" + ].join + @cmock_generator_plugin_callback.include_count = false + returned = @cmock_generator_plugin_callback.mock_implementation_precheck(function) + assert_equal(expected, returned) + end + + it "add mock function implementation for functions of style 'int16_t func(int* steak, uint8_t flag)'" do + function = {:name => "Apple", + :args => [ { :type => 'int*', :name => 'steak', :ptr? => true}, + { :type => 'uint8_t', :name => 'flag', :ptr? => false} ], + :args_string => "int* steak, uint8_t flag", + :return => test_return[:int]} + expected = [" if (Mock.Apple_CallbackFunctionPointer != NULL)\n", + " {\n", + " return Mock.Apple_CallbackFunctionPointer(steak, flag, Mock.Apple_CallbackCalls++);\n", + " }\n" + ].join + returned = @cmock_generator_plugin_callback.mock_implementation_precheck(function) + assert_equal(expected, returned) + end + + it "add mock interfaces for functions " do + function = {:name => "Lemon", + :args => [{ :type => "char*", :name => "pescado"}], + :args_string => "char* pescado", + :return => test_return[:int] + } + + expected = ["void Lemon_StubWithCallback(CMOCK_Lemon_CALLBACK Callback)\n", + "{\n", + " Mock.Lemon_CallbackFunctionPointer = Callback;\n", + "}\n\n" + ].join + returned = @cmock_generator_plugin_callback.mock_interfaces(function) + assert_equal(expected, returned) + end + + it "add mock destroy for functions" do + function = {:name => "Peach", :args => [], :return => test_return[:void] } + expected = " Mock.Peach_CallbackFunctionPointer = NULL;\n" + + " Mock.Peach_CallbackCalls = 0;\n" + returned = @cmock_generator_plugin_callback.mock_destroy(function) + assert_equal(expected, returned) + end +end diff --git a/test/unit/cmock_generator_plugin_expect_any_args_test.rb b/test/unit/cmock_generator_plugin_expect_any_args_test.rb index 35944fd..08432ed 100644 --- a/test/unit/cmock_generator_plugin_expect_any_args_test.rb +++ b/test/unit/cmock_generator_plugin_expect_any_args_test.rb @@ -1,81 +1,81 @@ -# ========================================== -# CMock Project - Automatic Mock Generation for C -# Copyright (c) 2007 Mike Karlesky, Mark VanderVoord, Greg Williams -# [Released under MIT License. Please refer to license.txt for details] -# ========================================== - -require File.expand_path(File.dirname(__FILE__)) + "/../test_helper" -require 'cmock_generator_plugin_expect_any_args.rb' - -describe CMockGeneratorPluginExpectAnyArgs, "Verify CMockGeneratorPluginExpectAnyArgs Module" do - - before do - create_mocks :config, :utils - @config = create_stub(:respond_to? => true) - @cmock_generator_plugin_expect_any_args = CMockGeneratorPluginExpectAnyArgs.new(@config, @utils) - end - - after do - end - - it "have set up internal priority" do - assert_equal(3, @cmock_generator_plugin_expect_any_args.priority) - end - - it "not have any additional include file requirements" do - assert(!@cmock_generator_plugin_expect_any_args.respond_to?(:include_files)) - end - - it "handle function declarations for functions without return values" do - function = {:name => "Mold", :args_string => "void", :return => test_return[:void]} - expected = "#define Mold_ExpectAnyArgs() Mold_CMockExpectAnyArgs(__LINE__)\nvoid Mold_CMockExpectAnyArgs(UNITY_LINE_TYPE cmock_line);\n" - returned = @cmock_generator_plugin_expect_any_args.mock_function_declarations(function) - assert_equal(expected, returned) - end - - it "handle function declarations for functions that returns something" do - function = {:name => "Fungus", :args_string => "void", :return => test_return[:string]} - expected = "#define Fungus_ExpectAnyArgsAndReturn(cmock_retval) Fungus_CMockExpectAnyArgsAndReturn(__LINE__, cmock_retval)\n"+ - "void Fungus_CMockExpectAnyArgsAndReturn(UNITY_LINE_TYPE cmock_line, const char* cmock_to_return);\n" - returned = @cmock_generator_plugin_expect_any_args.mock_function_declarations(function) - assert_equal(expected, returned) - end - - it "add required code to implementation with void function" do - function = {:name => "Mold", :args_string => "void", :return => test_return[:void]} - expected = [" if (cmock_call_instance->IgnoreMode == CMOCK_ARG_NONE)\n", - " {\n", - " return;\n", - " }\n" - ].join - returned = @cmock_generator_plugin_expect_any_args.mock_implementation(function) - assert_equal(expected, returned) - end - - it "add required code to implementation with return functions" do - function = {:name => "Fungus", :args_string => "void", :return => test_return[:int]} - retval = test_return[:int].merge({ :name => "cmock_call_instance->ReturnVal"}) - @utils.expect :code_assign_argument_quickly, ' mock_retval_0', ["Mock.Fungus_FinalReturn", retval] - expected = [" if (cmock_call_instance->IgnoreMode == CMOCK_ARG_NONE)\n", - " {\n", - " mock_retval_0", - " return cmock_call_instance->ReturnVal;\n", - " }\n" - ].join - returned = @cmock_generator_plugin_expect_any_args.mock_implementation(function) - assert_equal(expected, returned) - end - - it "add a new mock interface for ignoring when function had no return value" do - function = {:name => "Slime", :args => [], :args_string => "void", :return => test_return[:void]} - expected = ["void Slime_CMockExpectAnyArgs(UNITY_LINE_TYPE cmock_line)\n", - "{\n", - "mock_return_1", - " cmock_call_instance->IgnoreMode = CMOCK_ARG_NONE;\n", - "}\n\n" - ].join - @utils.expect :code_add_base_expectation, "mock_return_1", ["Slime", true] - returned = @cmock_generator_plugin_expect_any_args.mock_interfaces(function) - assert_equal(expected, returned) - end -end +# ========================================== +# CMock Project - Automatic Mock Generation for C +# Copyright (c) 2007 Mike Karlesky, Mark VanderVoord, Greg Williams +# [Released under MIT License. Please refer to license.txt for details] +# ========================================== + +require File.expand_path(File.dirname(__FILE__)) + "/../test_helper" +require 'cmock_generator_plugin_expect_any_args.rb' + +describe CMockGeneratorPluginExpectAnyArgs, "Verify CMockGeneratorPluginExpectAnyArgs Module" do + + before do + create_mocks :config, :utils + @config = create_stub(:respond_to? => true) + @cmock_generator_plugin_expect_any_args = CMockGeneratorPluginExpectAnyArgs.new(@config, @utils) + end + + after do + end + + it "have set up internal priority" do + assert_equal(3, @cmock_generator_plugin_expect_any_args.priority) + end + + it "not have any additional include file requirements" do + assert(!@cmock_generator_plugin_expect_any_args.respond_to?(:include_files)) + end + + it "handle function declarations for functions without return values" do + function = {:name => "Mold", :args_string => "void", :return => test_return[:void]} + expected = "#define Mold_ExpectAnyArgs() Mold_CMockExpectAnyArgs(__LINE__)\nvoid Mold_CMockExpectAnyArgs(UNITY_LINE_TYPE cmock_line);\n" + returned = @cmock_generator_plugin_expect_any_args.mock_function_declarations(function) + assert_equal(expected, returned) + end + + it "handle function declarations for functions that returns something" do + function = {:name => "Fungus", :args_string => "void", :return => test_return[:string]} + expected = "#define Fungus_ExpectAnyArgsAndReturn(cmock_retval) Fungus_CMockExpectAnyArgsAndReturn(__LINE__, cmock_retval)\n"+ + "void Fungus_CMockExpectAnyArgsAndReturn(UNITY_LINE_TYPE cmock_line, const char* cmock_to_return);\n" + returned = @cmock_generator_plugin_expect_any_args.mock_function_declarations(function) + assert_equal(expected, returned) + end + + it "add required code to implementation with void function" do + function = {:name => "Mold", :args_string => "void", :return => test_return[:void]} + expected = [" if (cmock_call_instance->IgnoreMode == CMOCK_ARG_NONE)\n", + " {\n", + " return;\n", + " }\n" + ].join + returned = @cmock_generator_plugin_expect_any_args.mock_implementation(function) + assert_equal(expected, returned) + end + + it "add required code to implementation with return functions" do + function = {:name => "Fungus", :args_string => "void", :return => test_return[:int]} + retval = test_return[:int].merge({ :name => "cmock_call_instance->ReturnVal"}) + @utils.expect :code_assign_argument_quickly, ' mock_retval_0', ["Mock.Fungus_FinalReturn", retval] + expected = [" if (cmock_call_instance->IgnoreMode == CMOCK_ARG_NONE)\n", + " {\n", + " mock_retval_0", + " return cmock_call_instance->ReturnVal;\n", + " }\n" + ].join + returned = @cmock_generator_plugin_expect_any_args.mock_implementation(function) + assert_equal(expected, returned) + end + + it "add a new mock interface for ignoring when function had no return value" do + function = {:name => "Slime", :args => [], :args_string => "void", :return => test_return[:void]} + expected = ["void Slime_CMockExpectAnyArgs(UNITY_LINE_TYPE cmock_line)\n", + "{\n", + "mock_return_1", + " cmock_call_instance->IgnoreMode = CMOCK_ARG_NONE;\n", + "}\n\n" + ].join + @utils.expect :code_add_base_expectation, "mock_return_1", ["Slime", true] + returned = @cmock_generator_plugin_expect_any_args.mock_interfaces(function) + assert_equal(expected, returned) + end +end diff --git a/test/unit/cmock_header_parser_test.rb b/test/unit/cmock_header_parser_test.rb index 743fc47..6d39560 100644 --- a/test/unit/cmock_header_parser_test.rb +++ b/test/unit/cmock_header_parser_test.rb @@ -1,1381 +1,1381 @@ -# ========================================== -# CMock Project - Automatic Mock Generation for C -# Copyright (c) 2007 Mike Karlesky, Mark VanderVoord, Greg Williams -# [Released under MIT License. Please refer to license.txt for details] -# ========================================== - -$ThisIsOnlyATest = true -$QUICK_RUBY_VERSION = RUBY_VERSION.split('.').inject(0){|vv,v| vv * 100 + v.to_i } - -require File.expand_path(File.dirname(__FILE__)) + "/../test_helper" -require 'cmock_header_parser' - -describe CMockHeaderParser, "Verify CMockHeaderParser Module" do - - before do - create_mocks :config - @test_name = 'test_file.h' - @config.expect :strippables, ["STRIPPABLE"] - @config.expect :attributes, ['__ramfunc', 'funky_attrib', 'SQLITE_API'] - @config.expect :c_calling_conventions, ['__stdcall'] - @config.expect :treat_as_void, ['MY_FUNKY_VOID'] - @config.expect :treat_as, { "BANJOS" => "INT", "TUBAS" => "HEX16"} - @config.expect :when_no_prototypes, :error - @config.expect :verbosity, 1 - @config.expect :treat_externs, :exclude - - @parser = CMockHeaderParser.new(@config) - end - - after do - end - - it "create and initialize variables to defaults appropriately" do - assert_equal([], @parser.funcs) - assert_equal(['const', '__ramfunc', 'funky_attrib', 'SQLITE_API'], @parser.c_attributes) - assert_equal(['void','MY_FUNKY_VOID'], @parser.treat_as_void) - end - - it "strip out line comments" do - source = - " abcd;\n" + - "// hello;\n" + - "who // is you\n" - - expected = - [ - "abcd", - "who" - ] - - assert_equal(expected, @parser.import_source(source).map!{|s|s.strip}) - end - - it "remove block comments" do - source = - " no_comments;\n" + - "// basic_line_comment;\n" + - "/* basic_block_comment;*/\n" + - "pre_block; /* start_of_block_comment;\n" + - "// embedded_line_comment_in_block_comment; */\n" + - "// /* commented_out_block_comment_line\n" + - "shown_because_block_comment_invalid_from_line_comment;\n" + - "// */\n" + - "//* shorter_commented_out_block_comment_line; \n" + - "shown_because_block_comment_invalid_from_shorter_line_comment;\n" + - "/*/\n" + - "not_shown_because_line_above_started_comment;\n" + - "//*/\n" + - "/* \n" + - "not_shown_because_block_comment_started_this_time;\n" + - "/*/\n" + - "shown_because_line_above_ended_comment_this_time;\n" + - "//*/\n" - - expected = - [ - "no_comments", - "pre_block", - "shown_because_block_comment_invalid_from_line_comment", - "shown_because_block_comment_invalid_from_shorter_line_comment", - "shown_because_line_above_ended_comment_this_time" - ] - - assert_equal(expected, @parser.import_source(source).map!{|s|s.strip}) - end - - it "remove strippables from the beginning or end of function declarations" do - source = - "void* my_calloc(size_t, size_t) STRIPPABLE;\n" + - "void\n" + - " my_realloc(void*, size_t) STRIPPABLE;\n" + - "extern int\n" + - " my_printf (void *my_object, const char *my_format, ...)\n" + - " STRIPPABLE;\n" + - " void STRIPPABLE universal_handler ();\n" - - expected = - [ - "void* my_calloc(size_t, size_t)", - "void my_realloc(void*, size_t)", - "void universal_handler()" - ] - - assert_equal(expected, @parser.import_source(source)) - end - - it "remove gcc's function __attribute__'s" do - source = - "void* my_calloc(size_t, size_t) __attribute__((alloc_size(1,2)));\n" + - "void\n" + - " my_realloc(void*, size_t) __attribute__((alloc_size(2)));\n" + - "extern int\n" + - " my_printf (void *my_object, const char *my_format, ...)\n" + - " __attribute__ ((format (printf, 2, 3)));\n" + - " void __attribute__ ((interrupt)) universal_handler ();\n" - - expected = - [ - "void* my_calloc(size_t, size_t)", - "void my_realloc(void*, size_t)", - "void universal_handler()" - ] - - assert_equal(expected, @parser.import_source(source)) - end - - it "remove preprocessor directives" do - source = - "#when stuff_happens\n" + - "#ifdef _TEST\n" + - "#pragma stack_switch" - - expected = [] - - assert_equal(expected, @parser.import_source(source)) - end - - - it "remove assembler pragma sections" do - source = - " #pragma\tasm\n" + - " .foo\n" + - " lda %m\n" + - " nop\n" + - "# pragma endasm \n" + - "foo" - - expected = ["foo"] - - assert_equal(expected, @parser.import_source(source)) - end - - - it "smush lines together that contain continuation characters" do - source = - "hoo hah \\\n" + - "when \\ \n" - - expected = - [ - "hoo hah when" - ] - - assert_equal(expected, @parser.import_source(source).map!{|s|s.strip}) - end - - - it "remove C macro definitions" do - source = - "#define this is the first line\\\n" + - "and the second\\\n" + - "and the third that should be removed\n" + - "but I'm here\n" - - expected = ["but I'm here"] - - assert_equal(expected, @parser.import_source(source)) - end - - - it "remove typedef statements" do - source = - "typedef uint32 (unsigned int);\n" + - "const typedef int INT;\n" + - "int notatypedef;\n" + - "int typedef_isnt_me;\n" + - " typedef who cares what really comes here \n" + # exercise multiline typedef - " continuation;\n" + - "this should remain!;\n" + - "typedef blah bleh;\n" + - "typedef struct shell_command_struct {\n" + - " char_ptr COMMAND;\n" + - " int_32 (*SHELL_FUNC)(int_32 argc);\n" + - "} SHELL_COMMAND_STRUCT, * SHELL_COMMAND_PTR;\n" + - "typedef struct shell_command_struct {\n" + - " char_ptr COMMAND;\n" + - " int_32 (*SHELL_FUNC)(int_32 argc, char_ptr argv[]);\n" + - "} SHELL_COMMAND_STRUCT, * SHELL_COMMAND_PTR;\n" + - "typedef struct shell_command_struct {\n" + - " char_ptr COMMAND;\n" + - " int_32 (*SHELL_FUNC)(int_32 argc);\n" + - "};\n" - - expected = - [ - "int notatypedef", - "int typedef_isnt_me", - "this should remain!" - ] - - assert_equal(expected, @parser.import_source(source).map!{|s|s.strip}) - end - - - it "remove enum statements" do - source = - "enum _NamedEnum {\n" + - " THING1 = (0x0001),\n" + - " THING2 = (0x0001 << 5),\n" + - "}ListOValues;\n\n" + - "don't delete me!!\n" + - " modifier_str enum _NamedEnum {THING1 = (0x0001), THING2 = (0x0001 << 5)} ListOValues;\n\n" + - "typedef enum {\n" + - " THING1,\n" + - " THING2,\n" + - "} Thinger;\n" + - "or me!!\n" - - assert_equal(["don't delete me!! or me!!"], @parser.import_source(source).map!{|s|s.strip}) - end - - - it "remove union statements" do - source = - "union _NamedDoohicky {\n" + - " unsigned int a;\n" + - " char b;\n" + - "} Doohicky;\n\n" + - "I want to live!!\n" + - "some_modifier union { unsigned int a; char b;} Whatever;\n" + - "typedef union {\n" + - " unsigned int a;\n" + - " char b;\n" + - "} Whatever;\n" + - "me too!!\n" - - assert_equal(["I want to live!! me too!!"], @parser.import_source(source).map!{|s|s.strip}) - end - - - it "remove struct statements" do - source = - "struct _NamedStruct1 {\n" + - " unsigned int a;\n" + - " signed long int b;\n" + - "} Thing ;\n\n" + - "extern struct ForwardDeclared_t TestDataType1;\n" + - "void foo(void);\n" + - "struct\n"+ - " MultilineForwardDeclared_t\n" + - " TestDataType2;\n" + - "struct THINGER foo(void);\n" + - "typedef struct {\n" + - " unsigned int a;\n" + - " signed char b;\n" + - "}Thinger;\n" + - "I want to live!!\n" - - assert_equal(["void foo(void)", "struct THINGER foo(void)", "I want to live!!"], - @parser.import_source(source).map!{|s|s.strip}) - end - - it "remove externed and inline functions" do - source = - " extern uint32 foobar(unsigned int);\n" + - "uint32 extern_name_func(unsigned int);\n" + - "uint32 funcinline(unsigned int);\n" + - "extern void bar(unsigned int);\n" + - "inline void bar(unsigned int);\n" + - "extern\n" + - "void kinda_ugly_on_the_next_line(unsigned int);\n" - - expected = - [ - "uint32 extern_name_func(unsigned int)", - "uint32 funcinline(unsigned int)" - ] - - assert_equal(expected, @parser.import_source(source).map!{|s|s.strip}) - end - - it "remove function definitions but keep function declarations" do - source = - "uint32 func_with_decl_a(unsigned int);\n" + - "uint32 func_with_decl_a(unsigned int a) { return a; }\n" + - "uint32 func_with_decl_b(unsigned int);\n" + - "uint32 func_with_decl_b(unsigned int a)\n" + - "{\n" + - " bar((unsigned int) a);\n" + - " stripme(a);\n" + - "}\n" - - expected = - [ - "uint32 func_with_decl_a(unsigned int)", - "uint32 func_with_decl_a", #okay. it's not going to be interpretted as another function - "uint32 func_with_decl_b(unsigned int)", - "uint32 func_with_decl_b", #okay. it's not going to be interpretted as another function - ] - - assert_equal(expected, @parser.import_source(source).map!{|s|s.strip}) - end - - it "remove a fully defined inline function" do - source = - "inline void foo(unsigned int a) { oranges = a; }\n" + - "inline void bar(unsigned int a) { apples = a; };\n" + - "inline void bar(unsigned int a)\n" + - "{" + - " bananas = a;\n" + - "}" - - # ensure it's expected type of exception - assert_raises RuntimeError do - @parser.parse("module", source) - end - - assert_equal([], @parser.funcs) - - # verify exception message - begin - @parser.parse("module", source) - rescue RuntimeError => e - assert_equal("ERROR: No function prototypes found!", e.message) - end - end - - it "remove a fully defined inline function that is multiple lines" do - source = - "inline void bar(unsigned int a)\n" + - "{" + - " bananas = a;\n" + - " grapes = a;\n" + - " apples(bananas, grapes);\n" + - "}" - - # ensure it's expected type of exception - assert_raises RuntimeError do - @parser.parse("module", source) - end - - assert_equal([], @parser.funcs) - - # verify exception message - begin - @parser.parse("module", source) - rescue RuntimeError => e - assert_equal("ERROR: No function prototypes found!", e.message) - end - end - - it "remove just inline functions if externs to be included" do - source = - " extern uint32 foobar(unsigned int);\n" + - "uint32 extern_name_func(unsigned int);\n" + - "uint32 funcinline(unsigned int);\n" + - "extern void bar(unsigned int);\n" + - "inline void bar(unsigned int);\n" + - "extern\n" + - "void kinda_ugly_on_the_next_line(unsigned int);\n" - - expected = - [ "extern uint32 foobar(unsigned int)", - "uint32 extern_name_func(unsigned int)", - "uint32 funcinline(unsigned int)", - "extern void bar(unsigned int)", - "extern void kinda_ugly_on_the_next_line(unsigned int)" - ] - - @parser.treat_externs = :include - assert_equal(expected, @parser.import_source(source).map!{|s|s.strip}) - end - - - it "remove defines" do - source = - "#define whatever you feel like defining\n" + - "void hello(void);\n" + - "#DEFINE I JUST DON'T CARE\n" + - "#deFINE\n" + - "#define get_foo() \\\n ((Thing)foo.bar)" # exercise multiline define - - expected = - [ - "void hello(void)", - ] - - assert_equal(expected, @parser.import_source(source).map!{|s|s.strip}) - end - - - it "remove keywords that would keep things from going smoothly in the future" do - source = - "const int TheMatrix(register int Trinity, unsigned int *restrict Neo)" - - expected = - [ - "const int TheMatrix(int Trinity, unsigned int * Neo)", - ] - - assert_equal(expected, @parser.import_source(source).map!{|s|s.strip}) - end - - - # some code actually typedef's void even though it's not ANSI C and is, frankly, weird - # since cmock treats void specially, we can't let void be obfuscated - it "handle odd case of typedef'd void returned" do - source = "MY_FUNKY_VOID FunkyVoidReturned(int a)" - expected = { :var_arg=>nil, - :name=>"FunkyVoidReturned", - :return=>{ :type => "void", - :name => 'cmock_to_return', - :ptr? => false, - :const? => false, - :str => "void cmock_to_return", - :void? => true - }, - :modifier=>"", - :contains_ptr? => false, - :args=>[{:type=>"int", :name=>"a", :ptr? => false, :const? => false}], - :args_string=>"int a", - :args_call=>"a"} - assert_equal(expected, @parser.parse_declaration(source)) - end - - it "handle odd case of typedef'd void as arg" do - source = "int FunkyVoidAsArg(MY_FUNKY_VOID)" - expected = { :var_arg=>nil, - :name=>"FunkyVoidAsArg", - :return=>{ :type => "int", - :name => 'cmock_to_return', - :ptr? => false, - :const? => false, - :str => "int cmock_to_return", - :void? => false - }, - :modifier=>"", - :contains_ptr? => false, - :args=>[], - :args_string=>"void", - :args_call=>"" } - assert_equal(expected, @parser.parse_declaration(source)) - end - - it "handle odd case of typedef'd void as arg pointer" do - source = "char FunkyVoidPointer(MY_FUNKY_VOID* bluh)" - expected = { :var_arg=>nil, - :name=>"FunkyVoidPointer", - :return=>{ :type => "char", - :name => 'cmock_to_return', - :ptr? => false, - :const? => false, - :str => "char cmock_to_return", - :void? => false - }, - :modifier=>"", - :contains_ptr? => true, - :args=>[{:type=>"MY_FUNKY_VOID*", :name=>"bluh", :ptr? => true, :const? => false}], - :args_string=>"MY_FUNKY_VOID* bluh", - :args_call=>"bluh" } - assert_equal(expected, @parser.parse_declaration(source)) - end - - - it "strip default values from function parameter lists" do - source = - "void Foo(int a = 57, float b=37.52, char c= 'd', char* e=\"junk\");\n" - - expected = - [ - "void Foo(int a, float b, char c, char* e)" - ] - - assert_equal(expected, @parser.import_source(source).map!{|s|s.strip}) - end - - - it "raise upon empty file" do - source = '' - - # ensure it's expected type of exception - assert_raises RuntimeError do - @parser.parse("module", source) - end - - assert_equal([], @parser.funcs) - - # verify exception message - begin - @parser.parse("module", source) - rescue RuntimeError => e - assert_equal("ERROR: No function prototypes found!", e.message) - end - end - - it "clean up module names that contain spaces, dashes, and such" do - source = 'void meh(int (*func)(int));' - - retval = @parser.parse("C:\Ugly Module-Name", source) - assert (retval[:typedefs][0] =~ /CUglyModuleName/) - end - - it "raise upon no function prototypes found in file" do - source = - "typedef void SILLY_VOID_TYPE1;\n" + - "typedef (void) SILLY_VOID_TYPE2 ;\n" + - "typedef ( void ) (*FUNCPTR)(void);\n\n" + - "#define get_foo() \\\n ((Thing)foo.bar)" - - # ensure it's expected type of exception - assert_raises(RuntimeError) do - @parser.parse("module", source) - end - - assert_equal([], @parser.funcs) - - # verify exception message - begin - @parser.parse("module", source) - rescue RuntimeError => e - assert_equal("ERROR: No function prototypes found!", e.message) - end - end - - - it "raise upon prototype parsing failure" do - source = "void (int, )" - - # ensure it's expected type of exception - assert_raises(RuntimeError) do - @parser.parse("module", source) - end - - # verify exception message - begin - @parser.parse("module", source) - rescue RuntimeError => e - assert(e.message.include?("Failed Parsing Declaration Prototype!")) - end - end - - it "extract and return function declarations with retval and args" do - - source = "int Foo(int a, unsigned int b)" - expected = { :var_arg=>nil, - :name=>"Foo", - :return=>{ :type => "int", - :name => 'cmock_to_return', - :ptr? => false, - :const? => false, - :str => "int cmock_to_return", - :void? => false - }, - :modifier=>"", - :contains_ptr? => false, - :args=>[ {:type=>"int", :name=>"a", :ptr? => false, :const? => false}, - {:type=>"unsigned int", :name=>"b", :ptr? => false, :const? => false} - ], - :args_string=>"int a, unsigned int b", - :args_call=>"a, b" } - assert_equal(expected, @parser.parse_declaration(source)) - end - - it "extract and return function declarations with no retval" do - - source = "void FunkyChicken( uint la, int de, bool da)" - expected = { :var_arg=>nil, - :return=>{ :type => "void", - :name => 'cmock_to_return', - :ptr? => false, - :const? => false, - :str => "void cmock_to_return", - :void? => true - }, - :name=>"FunkyChicken", - :modifier=>"", - :contains_ptr? => false, - :args=>[ {:type=>"uint", :name=>"la", :ptr? => false, :const? => false}, - {:type=>"int", :name=>"de", :ptr? => false, :const? => false}, - {:type=>"bool", :name=>"da", :ptr? => false, :const? => false} - ], - :args_string=>"uint la, int de, bool da", - :args_call=>"la, de, da" } - assert_equal(expected, @parser.parse_declaration(source)) - end - - it "extract and return function declarations with implied voids" do - - source = "void tat()" - expected = { :var_arg=>nil, - :return=>{ :type => "void", - :name => 'cmock_to_return', - :ptr? => false, - :const? => false, - :str => "void cmock_to_return", - :void? => true - }, - :name=>"tat", - :modifier=>"", - :contains_ptr? => false, - :args=>[ ], - :args_string=>"void", - :args_call=>"" } - assert_equal(expected, @parser.parse_declaration(source)) - end - - it "extract modifiers properly" do - - source = "const int TheMatrix(int Trinity, unsigned int * Neo)" - expected = { :var_arg=>nil, - :return=>{ :type => "int", - :name => 'cmock_to_return', - :ptr? => false, - :const? => true, - :str => "int cmock_to_return", - :void? => false - }, - :name=>"TheMatrix", - :modifier=>"const", - :contains_ptr? => true, - :args=>[ {:type=>"int", :name=>"Trinity", :ptr? => false, :const? => false}, - {:type=>"unsigned int*", :name=>"Neo", :ptr? => true, :const? => false} - ], - :args_string=>"int Trinity, unsigned int* Neo", - :args_call=>"Trinity, Neo" } - assert_equal(expected, @parser.parse_declaration(source)) - end - - it "extract c calling conventions properly" do - - source = "const int __stdcall TheMatrix(int Trinity, unsigned int * Neo)" - expected = { :var_arg=>nil, - :return=>{ :type => "int", - :name => 'cmock_to_return', - :ptr? => false, - :const? => true, - :str => "int cmock_to_return", - :void? => false - }, - :name=>"TheMatrix", - :modifier=>"const", - :c_calling_convention=>"__stdcall", - :contains_ptr? => true, - :args=>[ {:type=>"int", :name=>"Trinity", :ptr? => false, :const? => false}, - {:type=>"unsigned int*", :name=>"Neo", :ptr? => true, :const? => false} - ], - :args_string=>"int Trinity, unsigned int* Neo", - :args_call=>"Trinity, Neo" } - assert_equal(expected, @parser.parse_declaration(source)) - end - - it "fully parse multiple prototypes" do - - source = "const int TheMatrix(int Trinity, unsigned int * Neo);\n" + - "int Morpheus(int, unsigned int*);\n" - - expected = [{ :var_arg=>nil, - :return=> { :type => "int", - :name => 'cmock_to_return', - :ptr? => false, - :const? => true, - :str => "int cmock_to_return", - :void? => false - }, - :name=>"TheMatrix", - :modifier=>"const", - :contains_ptr? => true, - :args=>[ {:type=>"int", :name=>"Trinity", :ptr? => false, :const? => false}, - {:type=>"unsigned int*", :name=>"Neo", :ptr? => true, :const? => false} - ], - :args_string=>"int Trinity, unsigned int* Neo", - :args_call=>"Trinity, Neo" }, - { :var_arg=>nil, - :return=> { :type => "int", - :name => 'cmock_to_return', - :ptr? => false, - :const? => false, - :str => "int cmock_to_return", - :void? => false - }, - :name=>"Morpheus", - :modifier=>"", - :contains_ptr? => true, - :args=>[ {:type=>"int", :name=>"cmock_arg1", :ptr? => false, :const? => false}, - {:type=>"unsigned int*", :name=>"cmock_arg2", :ptr? => true, :const? => false} - ], - :args_string=>"int cmock_arg1, unsigned int* cmock_arg2", - :args_call=>"cmock_arg1, cmock_arg2" - }] - assert_equal(expected, @parser.parse("module", source)[:functions]) - end - - it "not extract for mocking multiply defined prototypes" do - - source = "const int TheMatrix(int Trinity, unsigned int * Neo);\n" + - "const int TheMatrix(int, unsigned int*);\n" - - expected = [{ :var_arg=>nil, - :name=>"TheMatrix", - :return=> { :type => "int", - :name => 'cmock_to_return', - :ptr? => false, - :const? => true, - :str => "int cmock_to_return", - :void? => false - }, - :modifier=>"const", - :contains_ptr? => true, - :args=>[ {:type=>"int", :name=>"Trinity", :ptr? => false, :const? => false}, - {:type=>"unsigned int*", :name=>"Neo", :ptr? => true, :const? => false} - ], - :args_string=>"int Trinity, unsigned int* Neo", - :args_call=>"Trinity, Neo" - }] - assert_equal(expected, @parser.parse("module", source)[:functions]) - end - - it "properly detect typedef'd variants of void and use those" do - - source = "typedef (void) FUNKY_VOID_T;\n" + - "typedef void CHUNKY_VOID_T;\n" + - "FUNKY_VOID_T DrHorrible(int SingAlong);\n" + - "int CaptainHammer(CHUNKY_VOID_T);\n" - - expected = [{ :var_arg=>nil, - :name=>"DrHorrible", - :return => { :type => "void", - :name => 'cmock_to_return', - :ptr? => false, - :const? => false, - :str => "void cmock_to_return", - :void? => true - }, - :modifier=>"", - :contains_ptr? => false, - :args=>[ {:type=>"int", :name=>"SingAlong", :ptr? => false, :const? => false} ], - :args_string=>"int SingAlong", - :args_call=>"SingAlong" - }, - { :var_arg=>nil, - :return=> { :type => "int", - :name => 'cmock_to_return', - :ptr? => false, - :const? => false, - :str => "int cmock_to_return", - :void? => false - }, - :name=>"CaptainHammer", - :modifier=>"", - :contains_ptr? => false, - :args=>[ ], - :args_string=>"void", - :args_call=>"" - }] - assert_equal(expected, @parser.parse("module", source)[:functions]) - end - - it "be ok with structs inside of function declarations" do - - source = "int DrHorrible(struct SingAlong Blog);\n" + - "void Penny(struct const _KeepYourHeadUp_ * const BillyBuddy);\n" + - "struct TheseArentTheHammer CaptainHammer(void);\n" - - expected = [{ :var_arg=>nil, - :return =>{ :type => "int", - :name => 'cmock_to_return', - :ptr? => false, - :const? => false, - :str => "int cmock_to_return", - :void? => false - }, - :name=>"DrHorrible", - :modifier=>"", - :contains_ptr? => false, - :args=>[ {:type=>"struct SingAlong", :name=>"Blog", :ptr? => false, :const? => false} ], - :args_string=>"struct SingAlong Blog", - :args_call=>"Blog" - }, - { :var_arg=>nil, - :return=> { :type => "void", - :name => 'cmock_to_return', - :ptr? => false, - :const? => false, - :str => "void cmock_to_return", - :void? => true - }, - :name=>"Penny", - :modifier=>"", - :contains_ptr? => true, - :args=>[ {:type=>"struct _KeepYourHeadUp_*", :name=>"BillyBuddy", :ptr? => true, :const? => true} ], - :args_string=>"struct const _KeepYourHeadUp_* const BillyBuddy", - :args_call=>"BillyBuddy" - }, - { :var_arg=>nil, - :return=> { :type => "struct TheseArentTheHammer", - :name => 'cmock_to_return', - :ptr? => false, - :const? => false, - :str => "struct TheseArentTheHammer cmock_to_return", - :void? => false - }, - :name=>"CaptainHammer", - :modifier=>"", - :contains_ptr? => false, - :args=>[ ], - :args_string=>"void", - :args_call=>"" - }] - assert_equal(expected, @parser.parse("module", source)[:functions]) - end - - it "extract functions containing unions with union specifier" do - source = "void OrangePeel(union STARS_AND_STRIPES * a, union AFL_CIO b)" - expected = [{ :var_arg=>nil, - :return=>{ :type => "void", - :name => 'cmock_to_return', - :ptr? => false, - :const? => false, - :str => "void cmock_to_return", - :void? => true - }, - :name=>"OrangePeel", - :modifier=>"", - :contains_ptr? => true, - :args=>[ {:type=>"union STARS_AND_STRIPES*", :name=>"a", :ptr? => true, :const? => false}, - {:type=>"union AFL_CIO", :name=>"b", :ptr? => false, :const? => false} - ], - :args_string=>"union STARS_AND_STRIPES* a, union AFL_CIO b", - :args_call=>"a, b" }] - result = @parser.parse("module", source) - assert_equal(expected, result[:functions]) - end - - it "not be thwarted by variables named with primitive types as part of the name" do - source = "void ApplePeel(const unsigned int const_param, int int_param, int integer, char character, int* const constant)" - expected = [{ :var_arg=>nil, - :return=>{ :type => "void", - :name => 'cmock_to_return', - :ptr? => false, - :const? => false, - :str => "void cmock_to_return", - :void? => true - }, - :name=>"ApplePeel", - :modifier=>"", - :contains_ptr? => true, - :args=>[ {:type=> "unsigned int", :name=>"const_param", :ptr? => false, :const? => true}, - {:type=>"int", :name=>"int_param", :ptr? => false, :const? => false}, - {:type=>"int", :name=>"integer", :ptr? => false, :const? => false}, - {:type=>"char", :name=>"character", :ptr? => false, :const? => false}, - {:type=>"int*", :name=>"constant", :ptr? => true, :const? => true} - ], - :args_string=>"const unsigned int const_param, int int_param, int integer, char character, int* const constant", - :args_call=>"const_param, int_param, integer, character, constant" }] - result = @parser.parse("module", source) - assert_equal(expected, result[:functions]) - end - - it "not be thwarted by custom types named similarly to primitive types" do - source = "void LemonPeel(integer param, character thing, longint * junk, constant value, int32_t const number)" - expected = [{:var_arg=>nil, - :return=>{ :type => "void", - :name => 'cmock_to_return', - :ptr? => false, - :const? => false, - :str => "void cmock_to_return", - :void? => true - }, - :name=>"LemonPeel", - :modifier=>"", - :contains_ptr? => true, - :args=>[ {:type=>"integer", :name=>"param", :ptr? => false, :const? => false}, - {:type=>"character", :name=>"thing", :ptr? => false, :const? => false}, - {:type=>"longint*", :name=>"junk", :ptr? => true, :const? => false}, - {:type=>"constant", :name=>"value", :ptr? => false, :const? => false}, - {:type=>"int32_t", :name=>"number", :ptr? => false, :const? => true} - ], - :args_string=>"integer param, character thing, longint* junk, constant value, int32_t const number", - :args_call=>"param, thing, junk, value, number" }] - result = @parser.parse("module", source) - assert_equal(expected, result[:functions]) - end - - it "handle some of those chains of C name specifiers naturally" do - source = "void CoinOperated(signed char abc, const unsigned long int xyz_123, unsigned int const abc_123, long long arm_of_the_law)" - expected = [{:var_arg=>nil, - :return=>{ :type => "void", - :name => 'cmock_to_return', - :ptr? => false, - :const? => false, - :str => "void cmock_to_return", - :void? => true - }, - :name=>"CoinOperated", - :modifier=>"", - :contains_ptr? => false, - :args=>[ {:type=>"signed char", :name=>"abc", :ptr? => false, :const? => false}, - {:type=>"unsigned long int", :name=>"xyz_123", :ptr? => false, :const? => true}, - {:type=>"unsigned int", :name=>"abc_123", :ptr? => false, :const? => true}, - {:type=>"long long", :name=>"arm_of_the_law", :ptr? => false, :const? => false} - ], - :args_string=>"signed char abc, const unsigned long int xyz_123, unsigned int const abc_123, long long arm_of_the_law", - :args_call=>"abc, xyz_123, abc_123, arm_of_the_law" }] - result = @parser.parse("module", source) - assert_equal(expected, result[:functions]) - end - - it "handle custom types of various formats" do - source = "void CardOperated(CUSTOM_TYPE abc, CUSTOM_TYPE* xyz_123, CUSTOM_TYPE const abcxyz, struct CUSTOM_TYPE const * const abc123)" - expected = [{:var_arg=>nil, - :return=>{ :type => "void", - :name => 'cmock_to_return', - :ptr? => false, - :const? => false, - :str => "void cmock_to_return", - :void? => true - }, - :name=>"CardOperated", - :modifier=>"", - :contains_ptr? => true, - :args=>[ {:type=>"CUSTOM_TYPE", :name=>"abc", :ptr? => false, :const? => false}, - {:type=>"CUSTOM_TYPE*", :name=>"xyz_123", :ptr? => true, :const? => false}, - {:type=>"CUSTOM_TYPE", :name=>"abcxyz", :ptr? => false, :const? => true}, - {:type=>"struct CUSTOM_TYPE const*", :name=>"abc123", :ptr? => true, :const? => true} - ], - :args_string=>"CUSTOM_TYPE abc, CUSTOM_TYPE* xyz_123, CUSTOM_TYPE const abcxyz, struct CUSTOM_TYPE const* const abc123", - :args_call=>"abc, xyz_123, abcxyz, abc123" }] - result = @parser.parse("module", source) - assert_equal(expected, result[:functions]) - end - - it "handle arrays and treat them as pointers" do - source = "void KeyOperated(CUSTOM_TYPE thing1[], int thing2 [ ], char thing3 [][2 ][ 3], int* thing4[4])" - expected = [{:var_arg=>nil, - :return=>{ :type => "void", - :name => 'cmock_to_return', - :ptr? => false, - :const? => false, - :str => "void cmock_to_return", - :void? => true - }, - :name=>"KeyOperated", - :modifier=>"", - :contains_ptr? => true, - :args=>[ {:type=>"CUSTOM_TYPE*", :name=>"thing1", :ptr? => true, :const? => false}, - {:type=>"int*", :name=>"thing2", :ptr? => true, :const? => false}, - {:type=>"char*", :name=>"thing3", :ptr? => false, :const? => false}, #THIS one will likely change in the future when we improve multidimensional array support - {:type=>"int**", :name=>"thing4", :ptr? => true, :const? => false} #THIS one will likely change in the future when we improve multidimensional array support - ], - :args_string=>"CUSTOM_TYPE* thing1, int* thing2, char* thing3, int** thing4", - :args_call=>"thing1, thing2, thing3, thing4" }] - result = @parser.parse("module", source) - assert_equal(expected, result[:functions]) - end - - it "give a reasonable guess when dealing with weird combinations of custom types and modifiers" do - source = "void Cheese(unsigned CUSTOM_TYPE abc, unsigned xyz, CUSTOM_TYPE1 CUSTOM_TYPE2 pdq)" - expected = [{:var_arg=>nil, - :return=>{ :type => "void", - :name => 'cmock_to_return', - :ptr? => false, - :const? => false, - :str => "void cmock_to_return", - :void? => true - }, - :name=>"Cheese", - :modifier=>"", - :contains_ptr? => false, - :args=>[ {:type=>"unsigned CUSTOM_TYPE", :name=>"abc", :ptr? => false, :const? => false}, - {:type=>"unsigned", :name=>"xyz", :ptr? => false, :const? => false}, - {:type=>"CUSTOM_TYPE1 CUSTOM_TYPE2", :name=>"pdq", :ptr? => false, :const? => false} - ], - :args_string=>"unsigned CUSTOM_TYPE abc, unsigned xyz, CUSTOM_TYPE1 CUSTOM_TYPE2 pdq", - :args_call=>"abc, xyz, pdq" }] - result = @parser.parse("module", source) - assert_equal(expected, result[:functions]) - end - - it "extract functions containing a function pointer" do - source = "void FunkyTurkey(unsigned int (*func_ptr)(int, char))" - expected = [{ :var_arg=>nil, - :return=>{ :type => "void", - :name => 'cmock_to_return', - :ptr? => false, - :const? => false, - :str => "void cmock_to_return", - :void? => true - }, - :name=>"FunkyTurkey", - :modifier=>"", - :contains_ptr? => false, - :args=>[ {:type=>"cmock_module_func_ptr1", :name=>"func_ptr", :ptr? => false, :const? => false} - ], - :args_string=>"cmock_module_func_ptr1 func_ptr", - :args_call=>"func_ptr" }] - typedefs = ["typedef unsigned int(*cmock_module_func_ptr1)(int, char);"] - result = @parser.parse("module", source) - assert_equal(expected, result[:functions]) - assert_equal(typedefs, result[:typedefs]) - end - - it "extract functions containing a function pointer with a void" do - source = "void FunkyTurkey(void (*func_ptr)(void))" - expected = [{ :var_arg=>nil, - :return=>{ :type => "void", - :name => 'cmock_to_return', - :ptr? => false, - :const? => false, - :str => "void cmock_to_return", - :void? => true - }, - :name=>"FunkyTurkey", - :modifier=>"", - :contains_ptr? => false, - :args=>[ {:type=>"cmock_module_func_ptr1", :name=>"func_ptr", :ptr? => false, :const? => false} - ], - :args_string=>"cmock_module_func_ptr1 func_ptr", - :args_call=>"func_ptr" }] - typedefs = ["typedef void(*cmock_module_func_ptr1)(void);"] - result = @parser.parse("module", source) - assert_equal(expected, result[:functions]) - assert_equal(typedefs, result[:typedefs]) - end - - it "extract functions containing a function pointer with an implied void" do - source = "void FunkyTurkey(unsigned int (*func_ptr)())" - expected = [{ :var_arg=>nil, - :return=>{ :type => "void", - :name => 'cmock_to_return', - :ptr? => false, - :const? => false, - :str => "void cmock_to_return", - :void? => true - }, - :name=>"FunkyTurkey", - :modifier=>"", - :contains_ptr? => false, - :args=>[ {:type=>"cmock_module_func_ptr1", :name=>"func_ptr", :ptr? => false, :const? => false} - ], - :args_string=>"cmock_module_func_ptr1 func_ptr", - :args_call=>"func_ptr" }] - typedefs = ["typedef unsigned int(*cmock_module_func_ptr1)();"] - result = @parser.parse("module", source) - assert_equal(expected, result[:functions]) - assert_equal(typedefs, result[:typedefs]) - end - - it "extract functions containing a constant function pointer and a pointer in the nested arg list" do - source = "void FunkyChicken(unsigned int (* const func_ptr)(unsigned long int * , char))" - expected = [{ :var_arg=>nil, - :return=>{ :type => "void", - :name => 'cmock_to_return', - :ptr? => false, - :const? => false, - :str => "void cmock_to_return", - :void? => true - }, - :name=>"FunkyChicken", - :modifier=>"", - :contains_ptr? => false, - :args=>[ {:type=>"cmock_module_func_ptr1", :name=>"func_ptr", :ptr? => false, :const? => true} - ], - :args_string=>"cmock_module_func_ptr1 const func_ptr", - :args_call=>"func_ptr" }] - typedefs = ["typedef unsigned int(*cmock_module_func_ptr1)(unsigned long int* , char);"] - result = @parser.parse("module", source) - assert_equal(expected, result[:functions]) - assert_equal(typedefs, result[:typedefs]) - end - - # it "extract functions containing a function pointer taking a vararg" do - # source = "void FunkyParrot(unsigned int (*func_ptr)(int, char, ...))" - # expected = [{ :var_arg=>nil, - # :return=>{ :type => "void", - # :name => 'cmock_to_return', - # :ptr? => false, - # :const? => false, - # :str => "void cmock_to_return", - # :void? => true - # }, - # :name=>"FunkyParrot", - # :modifier=>"", - # :contains_ptr? => false, - # :args=>[ {:type=>"cmock_module_func_ptr1", :name=>"func_ptr", :ptr? => false, :const? => false} - # ], - # :args_string=>"cmock_module_func_ptr1 func_ptr", - # :args_call=>"func_ptr" }] - # typedefs = ["typedef unsigned int(*cmock_module_func_ptr1)(int, char, ...);"] - # result = @parser.parse("module", source) - # assert_equal(expected, result[:functions]) - # assert_equal(typedefs, result[:typedefs]) - # end - - it "extract functions containing a function pointer with extra parenthesis and two sets" do - source = "void FunkyBudgie(int (((* func_ptr1)(int, char))), void (*func_ptr2)(void))" - expected = [{ :var_arg=>nil, - :return=>{ :type => "void", - :name => 'cmock_to_return', - :ptr? => false, - :const? => false, - :str => "void cmock_to_return", - :void? => true - }, - :name=>"FunkyBudgie", - :modifier=>"", - :contains_ptr? => false, - :args=>[ {:type=>"cmock_module_func_ptr1", :name=>"func_ptr1", :ptr? => false, :const? => false}, - {:type=>"cmock_module_func_ptr2", :name=>"func_ptr2", :ptr? => false, :const? => false} - ], - :args_string=>"cmock_module_func_ptr1 func_ptr1, cmock_module_func_ptr2 func_ptr2", - :args_call=>"func_ptr1, func_ptr2" }] - typedefs = ["typedef int(*cmock_module_func_ptr1)(int, char);", "typedef void(*cmock_module_func_ptr2)(void);"] - result = @parser.parse("module", source) - assert_equal(expected, result[:functions]) - assert_equal(typedefs, result[:typedefs]) - end - - it "extract functions containing a function pointers, structs and other things" do - source = "struct mytype *FunkyRobin(uint16_t num1, uint16_t num2, void (*func_ptr1)(uint16_t num3, struct mytype2 *s));" - expected = [{ :var_arg=>nil, - :return=>{ :type => "struct mytype*", - :name => 'cmock_to_return', - :ptr? => true, - :const? => false, - :str => "struct mytype* cmock_to_return", - :void? => false - }, - :name=>"FunkyRobin", - :modifier=>"", - :contains_ptr? => false, - :args=>[ {:type=>"uint16_t", :name=>"num1", :ptr? => false, :const? => false}, - {:type=>"uint16_t", :name=>"num2", :ptr? => false, :const? => false}, - {:type=>"cmock_module_func_ptr1", :name=>"func_ptr1", :ptr? => false, :const? => false} - ], - :args_string=>"uint16_t num1, uint16_t num2, cmock_module_func_ptr1 func_ptr1", - :args_call=>"num1, num2, func_ptr1" }] - typedefs = ["typedef void(*cmock_module_func_ptr1)(uint16_t num3, struct mytype2* s);"] - result = @parser.parse("module", source) - assert_equal(expected, result[:functions]) - assert_equal(typedefs, result[:typedefs]) - end - - it "extract functions containing an anonymous function pointer" do - source = "void FunkyFowl(unsigned int (* const)(int, char))" - expected = [{ :var_arg=>nil, - :return=>{ :type => "void", - :name => 'cmock_to_return', - :ptr? => false, - :const? => false, - :str => "void cmock_to_return", - :void? => true - }, - :name=>"FunkyFowl", - :modifier=>"", - :contains_ptr? => false, - :args=>[ {:type=>"cmock_module_func_ptr1", :name=>"cmock_arg1", :ptr? => false, :const? => true} - ], - :args_string=>"cmock_module_func_ptr1 const cmock_arg1", - :args_call=>"cmock_arg1" }] - typedefs = ["typedef unsigned int(*cmock_module_func_ptr1)(int, char);"] - result = @parser.parse("module", source) - assert_equal(expected, result[:functions]) - assert_equal(typedefs, result[:typedefs]) - end - - it "extract functions returning a function pointer" do - source = "unsigned short (*FunkyPidgeon( const char op_code ))( int, long int )" - expected = [{ :var_arg=>nil, - :return=>{ :type => "cmock_module_func_ptr1", - :name => 'cmock_to_return', - :ptr? => false, - :const? => false, - :str => "cmock_module_func_ptr1 cmock_to_return", - :void? => false - }, - :name=>"FunkyPidgeon", - :modifier=>"", - :contains_ptr? => false, - :args=>[ {:type=>"char", :name=>"op_code", :ptr? => false, :const? => true} - ], - :args_string=>"const char op_code", - :args_call=>"op_code" }] - typedefs = ["typedef unsigned short(*cmock_module_func_ptr1)( int, long int );"] - result = @parser.parse("module", source) - assert_equal(expected, result[:functions]) - assert_equal(typedefs, result[:typedefs]) - end - - it "extract functions returning a function pointer with implied void" do - source = "unsigned short (*FunkyTweetie())()" - expected = [{ :var_arg=>nil, - :return=>{ :type => "cmock_module_func_ptr1", - :name => 'cmock_to_return', - :ptr? => false, - :const? => false, - :str => "cmock_module_func_ptr1 cmock_to_return", - :void? => false - }, - :name=>"FunkyTweetie", - :modifier=>"", - :contains_ptr? => false, - :args=>[], - :args_string=>"void", - :args_call=>"" }] - typedefs = ["typedef unsigned short(*cmock_module_func_ptr1)();"] - result = @parser.parse("module", source) - assert_equal(expected, result[:functions]) - assert_equal(typedefs, result[:typedefs]) - end - - it "extract functions returning a function pointer where everything is a void" do - source = "void (* FunkySeaGull(void))(void)" - expected = [{ :var_arg=>nil, - :return=>{ :type => "cmock_module_func_ptr1", - :name => 'cmock_to_return', - :ptr? => false, - :const? => false, - :str => "cmock_module_func_ptr1 cmock_to_return", - :void? => false - }, - :name=>"FunkySeaGull", - :modifier=>"", - :contains_ptr? => false, - :args=>[], - :args_string=>"void", - :args_call=>"" }] - typedefs = ["typedef void(*cmock_module_func_ptr1)(void);"] - result = @parser.parse("module", source) - assert_equal(expected, result[:functions]) - assert_equal(typedefs, result[:typedefs]) - end - - it "extract functions returning a function pointer with some pointer nonsense" do - source = "unsigned int * (* FunkyMacaw(double* foo, THING *bar))(unsigned int)" - expected = [{ :var_arg=>nil, - :return=>{ :type => "cmock_module_func_ptr1", - :name => 'cmock_to_return', - :ptr? => false, - :const? => false, - :str => "cmock_module_func_ptr1 cmock_to_return", - :void? => false - }, - :name=>"FunkyMacaw", - :modifier=>"", - :contains_ptr? => true, - :args=>[ {:type=>"double*", :name=>"foo", :ptr? => true, :const? => false}, - {:type=>"THING*", :name=>"bar", :ptr? => true, :const? => false} - ], - :args_string=>"double* foo, THING* bar", - :args_call=>"foo, bar" }] - typedefs = ["typedef unsigned int *(*cmock_module_func_ptr1)(unsigned int);"] - result = @parser.parse("module", source) - assert_equal(expected, result[:functions]) - assert_equal(typedefs, result[:typedefs]) - end - - it "extract this SQLite3 function with an anonymous function pointer arg (regression test)" do - source = "SQLITE_API int sqlite3_bind_text(sqlite3_stmt*, int, const char*, int n, void(*)(void*))" - expected = [{ :var_arg=>nil, - :return=>{ :type => "int", - :name => "cmock_to_return", - :ptr? => false, - :const? => false, - :str => "int cmock_to_return", - :void? => false - }, - :name=>"sqlite3_bind_text", - :modifier=>"SQLITE_API", - :contains_ptr? => true, - :args=>[ {:type=>"sqlite3_stmt*", :name=>"cmock_arg2", :ptr? => true, :const? => false}, - {:type=>"int", :name=>"cmock_arg3", :ptr? => false, :const? => false}, - {:type=>"char*", :name=>"cmock_arg4", :ptr? => false, :const? => true}, - {:type=>"int", :name=>"n", :ptr? => false, :const? => false}, - {:type=>"cmock_module_func_ptr1", :name=>"cmock_arg1", :ptr? => false, :const? => false} - ], - :args_string=>"sqlite3_stmt* cmock_arg2, int cmock_arg3, const char* cmock_arg4, int n, cmock_module_func_ptr1 cmock_arg1", - :args_call=>"cmock_arg2, cmock_arg3, cmock_arg4, n, cmock_arg1" }] - typedefs = ["typedef void(*cmock_module_func_ptr1)(void*);"] - result = @parser.parse("module", source) - assert_equal(expected, result[:functions]) - assert_equal(typedefs, result[:typedefs]) - end - - it "extract functions with varargs" do - source = "int XFiles(int Scully, int Mulder, ...);\n" - expected = [{ :var_arg=>"...", - :return=> { :type => "int", - :name => 'cmock_to_return', - :ptr? => false, - :const? => false, - :str => "int cmock_to_return", - :void? => false - }, - :name=>"XFiles", - :modifier=>"", - :contains_ptr? => false, - :args=>[ {:type=>"int", :name=>"Scully", :ptr? => false, :const? => false}, - {:type=>"int", :name=>"Mulder", :ptr? => false, :const? => false} - ], - :args_string=>"int Scully, int Mulder", - :args_call=>"Scully, Mulder" - }] - assert_equal(expected, @parser.parse("module", source)[:functions]) - end - - it "extract functions with void pointers" do - source = "void* MoreSillySongs(void* stuff);\n" - expected = [{ :var_arg=>nil, - :return=> { :type => "void*", - :name => 'cmock_to_return', - :ptr? => true, - :const? => false, - :str => "void* cmock_to_return", - :void? => false - }, - :name=>"MoreSillySongs", - :modifier=>"", - :contains_ptr? => true, - :args=>[ {:type=>"void*", :name=>"stuff", :ptr? => true, :const? => false} - ], - :args_string=>"void* stuff", - :args_call=>"stuff" - }] - assert_equal(expected, @parser.parse("module", source)[:functions]) - end - - it "extract functions with strippable confusing junk like gcc attributes" do - source = "int LaverneAndShirley(int Lenny, int Squiggy) __attribute__((weak)) __attribute__ ((deprecated));\n" - expected = [{ :var_arg=>nil, - :return=> { :type => "int", - :name => 'cmock_to_return', - :ptr? => false, - :const? => false, - :str => "int cmock_to_return", - :void? => false - }, - :name=>"LaverneAndShirley", - :modifier=>"", - :contains_ptr? => false, - :args=>[ {:type=>"int", :name=>"Lenny", :ptr? => false, :const? => false}, - {:type=>"int", :name=>"Squiggy", :ptr? => false, :const? => false} - ], - :args_string=>"int Lenny, int Squiggy", - :args_call=>"Lenny, Squiggy" - }] - assert_equal(expected, @parser.parse("module", source)[:functions]) - end - - it "extract functions with strippable confusing junk like gcc attributes with parenthesis" do - source = "int TheCosbyShow(int Cliff, int Claire) __attribute__((weak, alias (\"__f\"));\n" - expected = [{ :var_arg=>nil, - :return=> { :type => "int", - :name => 'cmock_to_return', - :ptr? => false, - :const? => false, - :str => "int cmock_to_return", - :void? => false - }, - :name=>"TheCosbyShow", - :modifier=>"", - :contains_ptr? => false, - :args=>[ {:type=>"int", :name=>"Cliff", :ptr? => false, :const? => false}, - {:type=>"int", :name=>"Claire", :ptr? => false, :const? => false} - ], - :args_string=>"int Cliff, int Claire", - :args_call=>"Cliff, Claire" - }] - assert_equal(expected, @parser.parse("module", source)[:functions]) - end - -end +# ========================================== +# CMock Project - Automatic Mock Generation for C +# Copyright (c) 2007 Mike Karlesky, Mark VanderVoord, Greg Williams +# [Released under MIT License. Please refer to license.txt for details] +# ========================================== + +$ThisIsOnlyATest = true +$QUICK_RUBY_VERSION = RUBY_VERSION.split('.').inject(0){|vv,v| vv * 100 + v.to_i } + +require File.expand_path(File.dirname(__FILE__)) + "/../test_helper" +require 'cmock_header_parser' + +describe CMockHeaderParser, "Verify CMockHeaderParser Module" do + + before do + create_mocks :config + @test_name = 'test_file.h' + @config.expect :strippables, ["STRIPPABLE"] + @config.expect :attributes, ['__ramfunc', 'funky_attrib', 'SQLITE_API'] + @config.expect :c_calling_conventions, ['__stdcall'] + @config.expect :treat_as_void, ['MY_FUNKY_VOID'] + @config.expect :treat_as, { "BANJOS" => "INT", "TUBAS" => "HEX16"} + @config.expect :when_no_prototypes, :error + @config.expect :verbosity, 1 + @config.expect :treat_externs, :exclude + + @parser = CMockHeaderParser.new(@config) + end + + after do + end + + it "create and initialize variables to defaults appropriately" do + assert_equal([], @parser.funcs) + assert_equal(['const', '__ramfunc', 'funky_attrib', 'SQLITE_API'], @parser.c_attributes) + assert_equal(['void','MY_FUNKY_VOID'], @parser.treat_as_void) + end + + it "strip out line comments" do + source = + " abcd;\n" + + "// hello;\n" + + "who // is you\n" + + expected = + [ + "abcd", + "who" + ] + + assert_equal(expected, @parser.import_source(source).map!{|s|s.strip}) + end + + it "remove block comments" do + source = + " no_comments;\n" + + "// basic_line_comment;\n" + + "/* basic_block_comment;*/\n" + + "pre_block; /* start_of_block_comment;\n" + + "// embedded_line_comment_in_block_comment; */\n" + + "// /* commented_out_block_comment_line\n" + + "shown_because_block_comment_invalid_from_line_comment;\n" + + "// */\n" + + "//* shorter_commented_out_block_comment_line; \n" + + "shown_because_block_comment_invalid_from_shorter_line_comment;\n" + + "/*/\n" + + "not_shown_because_line_above_started_comment;\n" + + "//*/\n" + + "/* \n" + + "not_shown_because_block_comment_started_this_time;\n" + + "/*/\n" + + "shown_because_line_above_ended_comment_this_time;\n" + + "//*/\n" + + expected = + [ + "no_comments", + "pre_block", + "shown_because_block_comment_invalid_from_line_comment", + "shown_because_block_comment_invalid_from_shorter_line_comment", + "shown_because_line_above_ended_comment_this_time" + ] + + assert_equal(expected, @parser.import_source(source).map!{|s|s.strip}) + end + + it "remove strippables from the beginning or end of function declarations" do + source = + "void* my_calloc(size_t, size_t) STRIPPABLE;\n" + + "void\n" + + " my_realloc(void*, size_t) STRIPPABLE;\n" + + "extern int\n" + + " my_printf (void *my_object, const char *my_format, ...)\n" + + " STRIPPABLE;\n" + + " void STRIPPABLE universal_handler ();\n" + + expected = + [ + "void* my_calloc(size_t, size_t)", + "void my_realloc(void*, size_t)", + "void universal_handler()" + ] + + assert_equal(expected, @parser.import_source(source)) + end + + it "remove gcc's function __attribute__'s" do + source = + "void* my_calloc(size_t, size_t) __attribute__((alloc_size(1,2)));\n" + + "void\n" + + " my_realloc(void*, size_t) __attribute__((alloc_size(2)));\n" + + "extern int\n" + + " my_printf (void *my_object, const char *my_format, ...)\n" + + " __attribute__ ((format (printf, 2, 3)));\n" + + " void __attribute__ ((interrupt)) universal_handler ();\n" + + expected = + [ + "void* my_calloc(size_t, size_t)", + "void my_realloc(void*, size_t)", + "void universal_handler()" + ] + + assert_equal(expected, @parser.import_source(source)) + end + + it "remove preprocessor directives" do + source = + "#when stuff_happens\n" + + "#ifdef _TEST\n" + + "#pragma stack_switch" + + expected = [] + + assert_equal(expected, @parser.import_source(source)) + end + + + it "remove assembler pragma sections" do + source = + " #pragma\tasm\n" + + " .foo\n" + + " lda %m\n" + + " nop\n" + + "# pragma endasm \n" + + "foo" + + expected = ["foo"] + + assert_equal(expected, @parser.import_source(source)) + end + + + it "smush lines together that contain continuation characters" do + source = + "hoo hah \\\n" + + "when \\ \n" + + expected = + [ + "hoo hah when" + ] + + assert_equal(expected, @parser.import_source(source).map!{|s|s.strip}) + end + + + it "remove C macro definitions" do + source = + "#define this is the first line\\\n" + + "and the second\\\n" + + "and the third that should be removed\n" + + "but I'm here\n" + + expected = ["but I'm here"] + + assert_equal(expected, @parser.import_source(source)) + end + + + it "remove typedef statements" do + source = + "typedef uint32 (unsigned int);\n" + + "const typedef int INT;\n" + + "int notatypedef;\n" + + "int typedef_isnt_me;\n" + + " typedef who cares what really comes here \n" + # exercise multiline typedef + " continuation;\n" + + "this should remain!;\n" + + "typedef blah bleh;\n" + + "typedef struct shell_command_struct {\n" + + " char_ptr COMMAND;\n" + + " int_32 (*SHELL_FUNC)(int_32 argc);\n" + + "} SHELL_COMMAND_STRUCT, * SHELL_COMMAND_PTR;\n" + + "typedef struct shell_command_struct {\n" + + " char_ptr COMMAND;\n" + + " int_32 (*SHELL_FUNC)(int_32 argc, char_ptr argv[]);\n" + + "} SHELL_COMMAND_STRUCT, * SHELL_COMMAND_PTR;\n" + + "typedef struct shell_command_struct {\n" + + " char_ptr COMMAND;\n" + + " int_32 (*SHELL_FUNC)(int_32 argc);\n" + + "};\n" + + expected = + [ + "int notatypedef", + "int typedef_isnt_me", + "this should remain!" + ] + + assert_equal(expected, @parser.import_source(source).map!{|s|s.strip}) + end + + + it "remove enum statements" do + source = + "enum _NamedEnum {\n" + + " THING1 = (0x0001),\n" + + " THING2 = (0x0001 << 5),\n" + + "}ListOValues;\n\n" + + "don't delete me!!\n" + + " modifier_str enum _NamedEnum {THING1 = (0x0001), THING2 = (0x0001 << 5)} ListOValues;\n\n" + + "typedef enum {\n" + + " THING1,\n" + + " THING2,\n" + + "} Thinger;\n" + + "or me!!\n" + + assert_equal(["don't delete me!! or me!!"], @parser.import_source(source).map!{|s|s.strip}) + end + + + it "remove union statements" do + source = + "union _NamedDoohicky {\n" + + " unsigned int a;\n" + + " char b;\n" + + "} Doohicky;\n\n" + + "I want to live!!\n" + + "some_modifier union { unsigned int a; char b;} Whatever;\n" + + "typedef union {\n" + + " unsigned int a;\n" + + " char b;\n" + + "} Whatever;\n" + + "me too!!\n" + + assert_equal(["I want to live!! me too!!"], @parser.import_source(source).map!{|s|s.strip}) + end + + + it "remove struct statements" do + source = + "struct _NamedStruct1 {\n" + + " unsigned int a;\n" + + " signed long int b;\n" + + "} Thing ;\n\n" + + "extern struct ForwardDeclared_t TestDataType1;\n" + + "void foo(void);\n" + + "struct\n"+ + " MultilineForwardDeclared_t\n" + + " TestDataType2;\n" + + "struct THINGER foo(void);\n" + + "typedef struct {\n" + + " unsigned int a;\n" + + " signed char b;\n" + + "}Thinger;\n" + + "I want to live!!\n" + + assert_equal(["void foo(void)", "struct THINGER foo(void)", "I want to live!!"], + @parser.import_source(source).map!{|s|s.strip}) + end + + it "remove externed and inline functions" do + source = + " extern uint32 foobar(unsigned int);\n" + + "uint32 extern_name_func(unsigned int);\n" + + "uint32 funcinline(unsigned int);\n" + + "extern void bar(unsigned int);\n" + + "inline void bar(unsigned int);\n" + + "extern\n" + + "void kinda_ugly_on_the_next_line(unsigned int);\n" + + expected = + [ + "uint32 extern_name_func(unsigned int)", + "uint32 funcinline(unsigned int)" + ] + + assert_equal(expected, @parser.import_source(source).map!{|s|s.strip}) + end + + it "remove function definitions but keep function declarations" do + source = + "uint32 func_with_decl_a(unsigned int);\n" + + "uint32 func_with_decl_a(unsigned int a) { return a; }\n" + + "uint32 func_with_decl_b(unsigned int);\n" + + "uint32 func_with_decl_b(unsigned int a)\n" + + "{\n" + + " bar((unsigned int) a);\n" + + " stripme(a);\n" + + "}\n" + + expected = + [ + "uint32 func_with_decl_a(unsigned int)", + "uint32 func_with_decl_a", #okay. it's not going to be interpretted as another function + "uint32 func_with_decl_b(unsigned int)", + "uint32 func_with_decl_b", #okay. it's not going to be interpretted as another function + ] + + assert_equal(expected, @parser.import_source(source).map!{|s|s.strip}) + end + + it "remove a fully defined inline function" do + source = + "inline void foo(unsigned int a) { oranges = a; }\n" + + "inline void bar(unsigned int a) { apples = a; };\n" + + "inline void bar(unsigned int a)\n" + + "{" + + " bananas = a;\n" + + "}" + + # ensure it's expected type of exception + assert_raises RuntimeError do + @parser.parse("module", source) + end + + assert_equal([], @parser.funcs) + + # verify exception message + begin + @parser.parse("module", source) + rescue RuntimeError => e + assert_equal("ERROR: No function prototypes found!", e.message) + end + end + + it "remove a fully defined inline function that is multiple lines" do + source = + "inline void bar(unsigned int a)\n" + + "{" + + " bananas = a;\n" + + " grapes = a;\n" + + " apples(bananas, grapes);\n" + + "}" + + # ensure it's expected type of exception + assert_raises RuntimeError do + @parser.parse("module", source) + end + + assert_equal([], @parser.funcs) + + # verify exception message + begin + @parser.parse("module", source) + rescue RuntimeError => e + assert_equal("ERROR: No function prototypes found!", e.message) + end + end + + it "remove just inline functions if externs to be included" do + source = + " extern uint32 foobar(unsigned int);\n" + + "uint32 extern_name_func(unsigned int);\n" + + "uint32 funcinline(unsigned int);\n" + + "extern void bar(unsigned int);\n" + + "inline void bar(unsigned int);\n" + + "extern\n" + + "void kinda_ugly_on_the_next_line(unsigned int);\n" + + expected = + [ "extern uint32 foobar(unsigned int)", + "uint32 extern_name_func(unsigned int)", + "uint32 funcinline(unsigned int)", + "extern void bar(unsigned int)", + "extern void kinda_ugly_on_the_next_line(unsigned int)" + ] + + @parser.treat_externs = :include + assert_equal(expected, @parser.import_source(source).map!{|s|s.strip}) + end + + + it "remove defines" do + source = + "#define whatever you feel like defining\n" + + "void hello(void);\n" + + "#DEFINE I JUST DON'T CARE\n" + + "#deFINE\n" + + "#define get_foo() \\\n ((Thing)foo.bar)" # exercise multiline define + + expected = + [ + "void hello(void)", + ] + + assert_equal(expected, @parser.import_source(source).map!{|s|s.strip}) + end + + + it "remove keywords that would keep things from going smoothly in the future" do + source = + "const int TheMatrix(register int Trinity, unsigned int *restrict Neo)" + + expected = + [ + "const int TheMatrix(int Trinity, unsigned int * Neo)", + ] + + assert_equal(expected, @parser.import_source(source).map!{|s|s.strip}) + end + + + # some code actually typedef's void even though it's not ANSI C and is, frankly, weird + # since cmock treats void specially, we can't let void be obfuscated + it "handle odd case of typedef'd void returned" do + source = "MY_FUNKY_VOID FunkyVoidReturned(int a)" + expected = { :var_arg=>nil, + :name=>"FunkyVoidReturned", + :return=>{ :type => "void", + :name => 'cmock_to_return', + :ptr? => false, + :const? => false, + :str => "void cmock_to_return", + :void? => true + }, + :modifier=>"", + :contains_ptr? => false, + :args=>[{:type=>"int", :name=>"a", :ptr? => false, :const? => false}], + :args_string=>"int a", + :args_call=>"a"} + assert_equal(expected, @parser.parse_declaration(source)) + end + + it "handle odd case of typedef'd void as arg" do + source = "int FunkyVoidAsArg(MY_FUNKY_VOID)" + expected = { :var_arg=>nil, + :name=>"FunkyVoidAsArg", + :return=>{ :type => "int", + :name => 'cmock_to_return', + :ptr? => false, + :const? => false, + :str => "int cmock_to_return", + :void? => false + }, + :modifier=>"", + :contains_ptr? => false, + :args=>[], + :args_string=>"void", + :args_call=>"" } + assert_equal(expected, @parser.parse_declaration(source)) + end + + it "handle odd case of typedef'd void as arg pointer" do + source = "char FunkyVoidPointer(MY_FUNKY_VOID* bluh)" + expected = { :var_arg=>nil, + :name=>"FunkyVoidPointer", + :return=>{ :type => "char", + :name => 'cmock_to_return', + :ptr? => false, + :const? => false, + :str => "char cmock_to_return", + :void? => false + }, + :modifier=>"", + :contains_ptr? => true, + :args=>[{:type=>"MY_FUNKY_VOID*", :name=>"bluh", :ptr? => true, :const? => false}], + :args_string=>"MY_FUNKY_VOID* bluh", + :args_call=>"bluh" } + assert_equal(expected, @parser.parse_declaration(source)) + end + + + it "strip default values from function parameter lists" do + source = + "void Foo(int a = 57, float b=37.52, char c= 'd', char* e=\"junk\");\n" + + expected = + [ + "void Foo(int a, float b, char c, char* e)" + ] + + assert_equal(expected, @parser.import_source(source).map!{|s|s.strip}) + end + + + it "raise upon empty file" do + source = '' + + # ensure it's expected type of exception + assert_raises RuntimeError do + @parser.parse("module", source) + end + + assert_equal([], @parser.funcs) + + # verify exception message + begin + @parser.parse("module", source) + rescue RuntimeError => e + assert_equal("ERROR: No function prototypes found!", e.message) + end + end + + it "clean up module names that contain spaces, dashes, and such" do + source = 'void meh(int (*func)(int));' + + retval = @parser.parse("C:\Ugly Module-Name", source) + assert (retval[:typedefs][0] =~ /CUglyModuleName/) + end + + it "raise upon no function prototypes found in file" do + source = + "typedef void SILLY_VOID_TYPE1;\n" + + "typedef (void) SILLY_VOID_TYPE2 ;\n" + + "typedef ( void ) (*FUNCPTR)(void);\n\n" + + "#define get_foo() \\\n ((Thing)foo.bar)" + + # ensure it's expected type of exception + assert_raises(RuntimeError) do + @parser.parse("module", source) + end + + assert_equal([], @parser.funcs) + + # verify exception message + begin + @parser.parse("module", source) + rescue RuntimeError => e + assert_equal("ERROR: No function prototypes found!", e.message) + end + end + + + it "raise upon prototype parsing failure" do + source = "void (int, )" + + # ensure it's expected type of exception + assert_raises(RuntimeError) do + @parser.parse("module", source) + end + + # verify exception message + begin + @parser.parse("module", source) + rescue RuntimeError => e + assert(e.message.include?("Failed Parsing Declaration Prototype!")) + end + end + + it "extract and return function declarations with retval and args" do + + source = "int Foo(int a, unsigned int b)" + expected = { :var_arg=>nil, + :name=>"Foo", + :return=>{ :type => "int", + :name => 'cmock_to_return', + :ptr? => false, + :const? => false, + :str => "int cmock_to_return", + :void? => false + }, + :modifier=>"", + :contains_ptr? => false, + :args=>[ {:type=>"int", :name=>"a", :ptr? => false, :const? => false}, + {:type=>"unsigned int", :name=>"b", :ptr? => false, :const? => false} + ], + :args_string=>"int a, unsigned int b", + :args_call=>"a, b" } + assert_equal(expected, @parser.parse_declaration(source)) + end + + it "extract and return function declarations with no retval" do + + source = "void FunkyChicken( uint la, int de, bool da)" + expected = { :var_arg=>nil, + :return=>{ :type => "void", + :name => 'cmock_to_return', + :ptr? => false, + :const? => false, + :str => "void cmock_to_return", + :void? => true + }, + :name=>"FunkyChicken", + :modifier=>"", + :contains_ptr? => false, + :args=>[ {:type=>"uint", :name=>"la", :ptr? => false, :const? => false}, + {:type=>"int", :name=>"de", :ptr? => false, :const? => false}, + {:type=>"bool", :name=>"da", :ptr? => false, :const? => false} + ], + :args_string=>"uint la, int de, bool da", + :args_call=>"la, de, da" } + assert_equal(expected, @parser.parse_declaration(source)) + end + + it "extract and return function declarations with implied voids" do + + source = "void tat()" + expected = { :var_arg=>nil, + :return=>{ :type => "void", + :name => 'cmock_to_return', + :ptr? => false, + :const? => false, + :str => "void cmock_to_return", + :void? => true + }, + :name=>"tat", + :modifier=>"", + :contains_ptr? => false, + :args=>[ ], + :args_string=>"void", + :args_call=>"" } + assert_equal(expected, @parser.parse_declaration(source)) + end + + it "extract modifiers properly" do + + source = "const int TheMatrix(int Trinity, unsigned int * Neo)" + expected = { :var_arg=>nil, + :return=>{ :type => "int", + :name => 'cmock_to_return', + :ptr? => false, + :const? => true, + :str => "int cmock_to_return", + :void? => false + }, + :name=>"TheMatrix", + :modifier=>"const", + :contains_ptr? => true, + :args=>[ {:type=>"int", :name=>"Trinity", :ptr? => false, :const? => false}, + {:type=>"unsigned int*", :name=>"Neo", :ptr? => true, :const? => false} + ], + :args_string=>"int Trinity, unsigned int* Neo", + :args_call=>"Trinity, Neo" } + assert_equal(expected, @parser.parse_declaration(source)) + end + + it "extract c calling conventions properly" do + + source = "const int __stdcall TheMatrix(int Trinity, unsigned int * Neo)" + expected = { :var_arg=>nil, + :return=>{ :type => "int", + :name => 'cmock_to_return', + :ptr? => false, + :const? => true, + :str => "int cmock_to_return", + :void? => false + }, + :name=>"TheMatrix", + :modifier=>"const", + :c_calling_convention=>"__stdcall", + :contains_ptr? => true, + :args=>[ {:type=>"int", :name=>"Trinity", :ptr? => false, :const? => false}, + {:type=>"unsigned int*", :name=>"Neo", :ptr? => true, :const? => false} + ], + :args_string=>"int Trinity, unsigned int* Neo", + :args_call=>"Trinity, Neo" } + assert_equal(expected, @parser.parse_declaration(source)) + end + + it "fully parse multiple prototypes" do + + source = "const int TheMatrix(int Trinity, unsigned int * Neo);\n" + + "int Morpheus(int, unsigned int*);\n" + + expected = [{ :var_arg=>nil, + :return=> { :type => "int", + :name => 'cmock_to_return', + :ptr? => false, + :const? => true, + :str => "int cmock_to_return", + :void? => false + }, + :name=>"TheMatrix", + :modifier=>"const", + :contains_ptr? => true, + :args=>[ {:type=>"int", :name=>"Trinity", :ptr? => false, :const? => false}, + {:type=>"unsigned int*", :name=>"Neo", :ptr? => true, :const? => false} + ], + :args_string=>"int Trinity, unsigned int* Neo", + :args_call=>"Trinity, Neo" }, + { :var_arg=>nil, + :return=> { :type => "int", + :name => 'cmock_to_return', + :ptr? => false, + :const? => false, + :str => "int cmock_to_return", + :void? => false + }, + :name=>"Morpheus", + :modifier=>"", + :contains_ptr? => true, + :args=>[ {:type=>"int", :name=>"cmock_arg1", :ptr? => false, :const? => false}, + {:type=>"unsigned int*", :name=>"cmock_arg2", :ptr? => true, :const? => false} + ], + :args_string=>"int cmock_arg1, unsigned int* cmock_arg2", + :args_call=>"cmock_arg1, cmock_arg2" + }] + assert_equal(expected, @parser.parse("module", source)[:functions]) + end + + it "not extract for mocking multiply defined prototypes" do + + source = "const int TheMatrix(int Trinity, unsigned int * Neo);\n" + + "const int TheMatrix(int, unsigned int*);\n" + + expected = [{ :var_arg=>nil, + :name=>"TheMatrix", + :return=> { :type => "int", + :name => 'cmock_to_return', + :ptr? => false, + :const? => true, + :str => "int cmock_to_return", + :void? => false + }, + :modifier=>"const", + :contains_ptr? => true, + :args=>[ {:type=>"int", :name=>"Trinity", :ptr? => false, :const? => false}, + {:type=>"unsigned int*", :name=>"Neo", :ptr? => true, :const? => false} + ], + :args_string=>"int Trinity, unsigned int* Neo", + :args_call=>"Trinity, Neo" + }] + assert_equal(expected, @parser.parse("module", source)[:functions]) + end + + it "properly detect typedef'd variants of void and use those" do + + source = "typedef (void) FUNKY_VOID_T;\n" + + "typedef void CHUNKY_VOID_T;\n" + + "FUNKY_VOID_T DrHorrible(int SingAlong);\n" + + "int CaptainHammer(CHUNKY_VOID_T);\n" + + expected = [{ :var_arg=>nil, + :name=>"DrHorrible", + :return => { :type => "void", + :name => 'cmock_to_return', + :ptr? => false, + :const? => false, + :str => "void cmock_to_return", + :void? => true + }, + :modifier=>"", + :contains_ptr? => false, + :args=>[ {:type=>"int", :name=>"SingAlong", :ptr? => false, :const? => false} ], + :args_string=>"int SingAlong", + :args_call=>"SingAlong" + }, + { :var_arg=>nil, + :return=> { :type => "int", + :name => 'cmock_to_return', + :ptr? => false, + :const? => false, + :str => "int cmock_to_return", + :void? => false + }, + :name=>"CaptainHammer", + :modifier=>"", + :contains_ptr? => false, + :args=>[ ], + :args_string=>"void", + :args_call=>"" + }] + assert_equal(expected, @parser.parse("module", source)[:functions]) + end + + it "be ok with structs inside of function declarations" do + + source = "int DrHorrible(struct SingAlong Blog);\n" + + "void Penny(struct const _KeepYourHeadUp_ * const BillyBuddy);\n" + + "struct TheseArentTheHammer CaptainHammer(void);\n" + + expected = [{ :var_arg=>nil, + :return =>{ :type => "int", + :name => 'cmock_to_return', + :ptr? => false, + :const? => false, + :str => "int cmock_to_return", + :void? => false + }, + :name=>"DrHorrible", + :modifier=>"", + :contains_ptr? => false, + :args=>[ {:type=>"struct SingAlong", :name=>"Blog", :ptr? => false, :const? => false} ], + :args_string=>"struct SingAlong Blog", + :args_call=>"Blog" + }, + { :var_arg=>nil, + :return=> { :type => "void", + :name => 'cmock_to_return', + :ptr? => false, + :const? => false, + :str => "void cmock_to_return", + :void? => true + }, + :name=>"Penny", + :modifier=>"", + :contains_ptr? => true, + :args=>[ {:type=>"struct _KeepYourHeadUp_*", :name=>"BillyBuddy", :ptr? => true, :const? => true} ], + :args_string=>"struct const _KeepYourHeadUp_* const BillyBuddy", + :args_call=>"BillyBuddy" + }, + { :var_arg=>nil, + :return=> { :type => "struct TheseArentTheHammer", + :name => 'cmock_to_return', + :ptr? => false, + :const? => false, + :str => "struct TheseArentTheHammer cmock_to_return", + :void? => false + }, + :name=>"CaptainHammer", + :modifier=>"", + :contains_ptr? => false, + :args=>[ ], + :args_string=>"void", + :args_call=>"" + }] + assert_equal(expected, @parser.parse("module", source)[:functions]) + end + + it "extract functions containing unions with union specifier" do + source = "void OrangePeel(union STARS_AND_STRIPES * a, union AFL_CIO b)" + expected = [{ :var_arg=>nil, + :return=>{ :type => "void", + :name => 'cmock_to_return', + :ptr? => false, + :const? => false, + :str => "void cmock_to_return", + :void? => true + }, + :name=>"OrangePeel", + :modifier=>"", + :contains_ptr? => true, + :args=>[ {:type=>"union STARS_AND_STRIPES*", :name=>"a", :ptr? => true, :const? => false}, + {:type=>"union AFL_CIO", :name=>"b", :ptr? => false, :const? => false} + ], + :args_string=>"union STARS_AND_STRIPES* a, union AFL_CIO b", + :args_call=>"a, b" }] + result = @parser.parse("module", source) + assert_equal(expected, result[:functions]) + end + + it "not be thwarted by variables named with primitive types as part of the name" do + source = "void ApplePeel(const unsigned int const_param, int int_param, int integer, char character, int* const constant)" + expected = [{ :var_arg=>nil, + :return=>{ :type => "void", + :name => 'cmock_to_return', + :ptr? => false, + :const? => false, + :str => "void cmock_to_return", + :void? => true + }, + :name=>"ApplePeel", + :modifier=>"", + :contains_ptr? => true, + :args=>[ {:type=> "unsigned int", :name=>"const_param", :ptr? => false, :const? => true}, + {:type=>"int", :name=>"int_param", :ptr? => false, :const? => false}, + {:type=>"int", :name=>"integer", :ptr? => false, :const? => false}, + {:type=>"char", :name=>"character", :ptr? => false, :const? => false}, + {:type=>"int*", :name=>"constant", :ptr? => true, :const? => true} + ], + :args_string=>"const unsigned int const_param, int int_param, int integer, char character, int* const constant", + :args_call=>"const_param, int_param, integer, character, constant" }] + result = @parser.parse("module", source) + assert_equal(expected, result[:functions]) + end + + it "not be thwarted by custom types named similarly to primitive types" do + source = "void LemonPeel(integer param, character thing, longint * junk, constant value, int32_t const number)" + expected = [{:var_arg=>nil, + :return=>{ :type => "void", + :name => 'cmock_to_return', + :ptr? => false, + :const? => false, + :str => "void cmock_to_return", + :void? => true + }, + :name=>"LemonPeel", + :modifier=>"", + :contains_ptr? => true, + :args=>[ {:type=>"integer", :name=>"param", :ptr? => false, :const? => false}, + {:type=>"character", :name=>"thing", :ptr? => false, :const? => false}, + {:type=>"longint*", :name=>"junk", :ptr? => true, :const? => false}, + {:type=>"constant", :name=>"value", :ptr? => false, :const? => false}, + {:type=>"int32_t", :name=>"number", :ptr? => false, :const? => true} + ], + :args_string=>"integer param, character thing, longint* junk, constant value, int32_t const number", + :args_call=>"param, thing, junk, value, number" }] + result = @parser.parse("module", source) + assert_equal(expected, result[:functions]) + end + + it "handle some of those chains of C name specifiers naturally" do + source = "void CoinOperated(signed char abc, const unsigned long int xyz_123, unsigned int const abc_123, long long arm_of_the_law)" + expected = [{:var_arg=>nil, + :return=>{ :type => "void", + :name => 'cmock_to_return', + :ptr? => false, + :const? => false, + :str => "void cmock_to_return", + :void? => true + }, + :name=>"CoinOperated", + :modifier=>"", + :contains_ptr? => false, + :args=>[ {:type=>"signed char", :name=>"abc", :ptr? => false, :const? => false}, + {:type=>"unsigned long int", :name=>"xyz_123", :ptr? => false, :const? => true}, + {:type=>"unsigned int", :name=>"abc_123", :ptr? => false, :const? => true}, + {:type=>"long long", :name=>"arm_of_the_law", :ptr? => false, :const? => false} + ], + :args_string=>"signed char abc, const unsigned long int xyz_123, unsigned int const abc_123, long long arm_of_the_law", + :args_call=>"abc, xyz_123, abc_123, arm_of_the_law" }] + result = @parser.parse("module", source) + assert_equal(expected, result[:functions]) + end + + it "handle custom types of various formats" do + source = "void CardOperated(CUSTOM_TYPE abc, CUSTOM_TYPE* xyz_123, CUSTOM_TYPE const abcxyz, struct CUSTOM_TYPE const * const abc123)" + expected = [{:var_arg=>nil, + :return=>{ :type => "void", + :name => 'cmock_to_return', + :ptr? => false, + :const? => false, + :str => "void cmock_to_return", + :void? => true + }, + :name=>"CardOperated", + :modifier=>"", + :contains_ptr? => true, + :args=>[ {:type=>"CUSTOM_TYPE", :name=>"abc", :ptr? => false, :const? => false}, + {:type=>"CUSTOM_TYPE*", :name=>"xyz_123", :ptr? => true, :const? => false}, + {:type=>"CUSTOM_TYPE", :name=>"abcxyz", :ptr? => false, :const? => true}, + {:type=>"struct CUSTOM_TYPE const*", :name=>"abc123", :ptr? => true, :const? => true} + ], + :args_string=>"CUSTOM_TYPE abc, CUSTOM_TYPE* xyz_123, CUSTOM_TYPE const abcxyz, struct CUSTOM_TYPE const* const abc123", + :args_call=>"abc, xyz_123, abcxyz, abc123" }] + result = @parser.parse("module", source) + assert_equal(expected, result[:functions]) + end + + it "handle arrays and treat them as pointers" do + source = "void KeyOperated(CUSTOM_TYPE thing1[], int thing2 [ ], char thing3 [][2 ][ 3], int* thing4[4])" + expected = [{:var_arg=>nil, + :return=>{ :type => "void", + :name => 'cmock_to_return', + :ptr? => false, + :const? => false, + :str => "void cmock_to_return", + :void? => true + }, + :name=>"KeyOperated", + :modifier=>"", + :contains_ptr? => true, + :args=>[ {:type=>"CUSTOM_TYPE*", :name=>"thing1", :ptr? => true, :const? => false}, + {:type=>"int*", :name=>"thing2", :ptr? => true, :const? => false}, + {:type=>"char*", :name=>"thing3", :ptr? => false, :const? => false}, #THIS one will likely change in the future when we improve multidimensional array support + {:type=>"int**", :name=>"thing4", :ptr? => true, :const? => false} #THIS one will likely change in the future when we improve multidimensional array support + ], + :args_string=>"CUSTOM_TYPE* thing1, int* thing2, char* thing3, int** thing4", + :args_call=>"thing1, thing2, thing3, thing4" }] + result = @parser.parse("module", source) + assert_equal(expected, result[:functions]) + end + + it "give a reasonable guess when dealing with weird combinations of custom types and modifiers" do + source = "void Cheese(unsigned CUSTOM_TYPE abc, unsigned xyz, CUSTOM_TYPE1 CUSTOM_TYPE2 pdq)" + expected = [{:var_arg=>nil, + :return=>{ :type => "void", + :name => 'cmock_to_return', + :ptr? => false, + :const? => false, + :str => "void cmock_to_return", + :void? => true + }, + :name=>"Cheese", + :modifier=>"", + :contains_ptr? => false, + :args=>[ {:type=>"unsigned CUSTOM_TYPE", :name=>"abc", :ptr? => false, :const? => false}, + {:type=>"unsigned", :name=>"xyz", :ptr? => false, :const? => false}, + {:type=>"CUSTOM_TYPE1 CUSTOM_TYPE2", :name=>"pdq", :ptr? => false, :const? => false} + ], + :args_string=>"unsigned CUSTOM_TYPE abc, unsigned xyz, CUSTOM_TYPE1 CUSTOM_TYPE2 pdq", + :args_call=>"abc, xyz, pdq" }] + result = @parser.parse("module", source) + assert_equal(expected, result[:functions]) + end + + it "extract functions containing a function pointer" do + source = "void FunkyTurkey(unsigned int (*func_ptr)(int, char))" + expected = [{ :var_arg=>nil, + :return=>{ :type => "void", + :name => 'cmock_to_return', + :ptr? => false, + :const? => false, + :str => "void cmock_to_return", + :void? => true + }, + :name=>"FunkyTurkey", + :modifier=>"", + :contains_ptr? => false, + :args=>[ {:type=>"cmock_module_func_ptr1", :name=>"func_ptr", :ptr? => false, :const? => false} + ], + :args_string=>"cmock_module_func_ptr1 func_ptr", + :args_call=>"func_ptr" }] + typedefs = ["typedef unsigned int(*cmock_module_func_ptr1)(int, char);"] + result = @parser.parse("module", source) + assert_equal(expected, result[:functions]) + assert_equal(typedefs, result[:typedefs]) + end + + it "extract functions containing a function pointer with a void" do + source = "void FunkyTurkey(void (*func_ptr)(void))" + expected = [{ :var_arg=>nil, + :return=>{ :type => "void", + :name => 'cmock_to_return', + :ptr? => false, + :const? => false, + :str => "void cmock_to_return", + :void? => true + }, + :name=>"FunkyTurkey", + :modifier=>"", + :contains_ptr? => false, + :args=>[ {:type=>"cmock_module_func_ptr1", :name=>"func_ptr", :ptr? => false, :const? => false} + ], + :args_string=>"cmock_module_func_ptr1 func_ptr", + :args_call=>"func_ptr" }] + typedefs = ["typedef void(*cmock_module_func_ptr1)(void);"] + result = @parser.parse("module", source) + assert_equal(expected, result[:functions]) + assert_equal(typedefs, result[:typedefs]) + end + + it "extract functions containing a function pointer with an implied void" do + source = "void FunkyTurkey(unsigned int (*func_ptr)())" + expected = [{ :var_arg=>nil, + :return=>{ :type => "void", + :name => 'cmock_to_return', + :ptr? => false, + :const? => false, + :str => "void cmock_to_return", + :void? => true + }, + :name=>"FunkyTurkey", + :modifier=>"", + :contains_ptr? => false, + :args=>[ {:type=>"cmock_module_func_ptr1", :name=>"func_ptr", :ptr? => false, :const? => false} + ], + :args_string=>"cmock_module_func_ptr1 func_ptr", + :args_call=>"func_ptr" }] + typedefs = ["typedef unsigned int(*cmock_module_func_ptr1)();"] + result = @parser.parse("module", source) + assert_equal(expected, result[:functions]) + assert_equal(typedefs, result[:typedefs]) + end + + it "extract functions containing a constant function pointer and a pointer in the nested arg list" do + source = "void FunkyChicken(unsigned int (* const func_ptr)(unsigned long int * , char))" + expected = [{ :var_arg=>nil, + :return=>{ :type => "void", + :name => 'cmock_to_return', + :ptr? => false, + :const? => false, + :str => "void cmock_to_return", + :void? => true + }, + :name=>"FunkyChicken", + :modifier=>"", + :contains_ptr? => false, + :args=>[ {:type=>"cmock_module_func_ptr1", :name=>"func_ptr", :ptr? => false, :const? => true} + ], + :args_string=>"cmock_module_func_ptr1 const func_ptr", + :args_call=>"func_ptr" }] + typedefs = ["typedef unsigned int(*cmock_module_func_ptr1)(unsigned long int* , char);"] + result = @parser.parse("module", source) + assert_equal(expected, result[:functions]) + assert_equal(typedefs, result[:typedefs]) + end + + # it "extract functions containing a function pointer taking a vararg" do + # source = "void FunkyParrot(unsigned int (*func_ptr)(int, char, ...))" + # expected = [{ :var_arg=>nil, + # :return=>{ :type => "void", + # :name => 'cmock_to_return', + # :ptr? => false, + # :const? => false, + # :str => "void cmock_to_return", + # :void? => true + # }, + # :name=>"FunkyParrot", + # :modifier=>"", + # :contains_ptr? => false, + # :args=>[ {:type=>"cmock_module_func_ptr1", :name=>"func_ptr", :ptr? => false, :const? => false} + # ], + # :args_string=>"cmock_module_func_ptr1 func_ptr", + # :args_call=>"func_ptr" }] + # typedefs = ["typedef unsigned int(*cmock_module_func_ptr1)(int, char, ...);"] + # result = @parser.parse("module", source) + # assert_equal(expected, result[:functions]) + # assert_equal(typedefs, result[:typedefs]) + # end + + it "extract functions containing a function pointer with extra parenthesis and two sets" do + source = "void FunkyBudgie(int (((* func_ptr1)(int, char))), void (*func_ptr2)(void))" + expected = [{ :var_arg=>nil, + :return=>{ :type => "void", + :name => 'cmock_to_return', + :ptr? => false, + :const? => false, + :str => "void cmock_to_return", + :void? => true + }, + :name=>"FunkyBudgie", + :modifier=>"", + :contains_ptr? => false, + :args=>[ {:type=>"cmock_module_func_ptr1", :name=>"func_ptr1", :ptr? => false, :const? => false}, + {:type=>"cmock_module_func_ptr2", :name=>"func_ptr2", :ptr? => false, :const? => false} + ], + :args_string=>"cmock_module_func_ptr1 func_ptr1, cmock_module_func_ptr2 func_ptr2", + :args_call=>"func_ptr1, func_ptr2" }] + typedefs = ["typedef int(*cmock_module_func_ptr1)(int, char);", "typedef void(*cmock_module_func_ptr2)(void);"] + result = @parser.parse("module", source) + assert_equal(expected, result[:functions]) + assert_equal(typedefs, result[:typedefs]) + end + + it "extract functions containing a function pointers, structs and other things" do + source = "struct mytype *FunkyRobin(uint16_t num1, uint16_t num2, void (*func_ptr1)(uint16_t num3, struct mytype2 *s));" + expected = [{ :var_arg=>nil, + :return=>{ :type => "struct mytype*", + :name => 'cmock_to_return', + :ptr? => true, + :const? => false, + :str => "struct mytype* cmock_to_return", + :void? => false + }, + :name=>"FunkyRobin", + :modifier=>"", + :contains_ptr? => false, + :args=>[ {:type=>"uint16_t", :name=>"num1", :ptr? => false, :const? => false}, + {:type=>"uint16_t", :name=>"num2", :ptr? => false, :const? => false}, + {:type=>"cmock_module_func_ptr1", :name=>"func_ptr1", :ptr? => false, :const? => false} + ], + :args_string=>"uint16_t num1, uint16_t num2, cmock_module_func_ptr1 func_ptr1", + :args_call=>"num1, num2, func_ptr1" }] + typedefs = ["typedef void(*cmock_module_func_ptr1)(uint16_t num3, struct mytype2* s);"] + result = @parser.parse("module", source) + assert_equal(expected, result[:functions]) + assert_equal(typedefs, result[:typedefs]) + end + + it "extract functions containing an anonymous function pointer" do + source = "void FunkyFowl(unsigned int (* const)(int, char))" + expected = [{ :var_arg=>nil, + :return=>{ :type => "void", + :name => 'cmock_to_return', + :ptr? => false, + :const? => false, + :str => "void cmock_to_return", + :void? => true + }, + :name=>"FunkyFowl", + :modifier=>"", + :contains_ptr? => false, + :args=>[ {:type=>"cmock_module_func_ptr1", :name=>"cmock_arg1", :ptr? => false, :const? => true} + ], + :args_string=>"cmock_module_func_ptr1 const cmock_arg1", + :args_call=>"cmock_arg1" }] + typedefs = ["typedef unsigned int(*cmock_module_func_ptr1)(int, char);"] + result = @parser.parse("module", source) + assert_equal(expected, result[:functions]) + assert_equal(typedefs, result[:typedefs]) + end + + it "extract functions returning a function pointer" do + source = "unsigned short (*FunkyPidgeon( const char op_code ))( int, long int )" + expected = [{ :var_arg=>nil, + :return=>{ :type => "cmock_module_func_ptr1", + :name => 'cmock_to_return', + :ptr? => false, + :const? => false, + :str => "cmock_module_func_ptr1 cmock_to_return", + :void? => false + }, + :name=>"FunkyPidgeon", + :modifier=>"", + :contains_ptr? => false, + :args=>[ {:type=>"char", :name=>"op_code", :ptr? => false, :const? => true} + ], + :args_string=>"const char op_code", + :args_call=>"op_code" }] + typedefs = ["typedef unsigned short(*cmock_module_func_ptr1)( int, long int );"] + result = @parser.parse("module", source) + assert_equal(expected, result[:functions]) + assert_equal(typedefs, result[:typedefs]) + end + + it "extract functions returning a function pointer with implied void" do + source = "unsigned short (*FunkyTweetie())()" + expected = [{ :var_arg=>nil, + :return=>{ :type => "cmock_module_func_ptr1", + :name => 'cmock_to_return', + :ptr? => false, + :const? => false, + :str => "cmock_module_func_ptr1 cmock_to_return", + :void? => false + }, + :name=>"FunkyTweetie", + :modifier=>"", + :contains_ptr? => false, + :args=>[], + :args_string=>"void", + :args_call=>"" }] + typedefs = ["typedef unsigned short(*cmock_module_func_ptr1)();"] + result = @parser.parse("module", source) + assert_equal(expected, result[:functions]) + assert_equal(typedefs, result[:typedefs]) + end + + it "extract functions returning a function pointer where everything is a void" do + source = "void (* FunkySeaGull(void))(void)" + expected = [{ :var_arg=>nil, + :return=>{ :type => "cmock_module_func_ptr1", + :name => 'cmock_to_return', + :ptr? => false, + :const? => false, + :str => "cmock_module_func_ptr1 cmock_to_return", + :void? => false + }, + :name=>"FunkySeaGull", + :modifier=>"", + :contains_ptr? => false, + :args=>[], + :args_string=>"void", + :args_call=>"" }] + typedefs = ["typedef void(*cmock_module_func_ptr1)(void);"] + result = @parser.parse("module", source) + assert_equal(expected, result[:functions]) + assert_equal(typedefs, result[:typedefs]) + end + + it "extract functions returning a function pointer with some pointer nonsense" do + source = "unsigned int * (* FunkyMacaw(double* foo, THING *bar))(unsigned int)" + expected = [{ :var_arg=>nil, + :return=>{ :type => "cmock_module_func_ptr1", + :name => 'cmock_to_return', + :ptr? => false, + :const? => false, + :str => "cmock_module_func_ptr1 cmock_to_return", + :void? => false + }, + :name=>"FunkyMacaw", + :modifier=>"", + :contains_ptr? => true, + :args=>[ {:type=>"double*", :name=>"foo", :ptr? => true, :const? => false}, + {:type=>"THING*", :name=>"bar", :ptr? => true, :const? => false} + ], + :args_string=>"double* foo, THING* bar", + :args_call=>"foo, bar" }] + typedefs = ["typedef unsigned int *(*cmock_module_func_ptr1)(unsigned int);"] + result = @parser.parse("module", source) + assert_equal(expected, result[:functions]) + assert_equal(typedefs, result[:typedefs]) + end + + it "extract this SQLite3 function with an anonymous function pointer arg (regression test)" do + source = "SQLITE_API int sqlite3_bind_text(sqlite3_stmt*, int, const char*, int n, void(*)(void*))" + expected = [{ :var_arg=>nil, + :return=>{ :type => "int", + :name => "cmock_to_return", + :ptr? => false, + :const? => false, + :str => "int cmock_to_return", + :void? => false + }, + :name=>"sqlite3_bind_text", + :modifier=>"SQLITE_API", + :contains_ptr? => true, + :args=>[ {:type=>"sqlite3_stmt*", :name=>"cmock_arg2", :ptr? => true, :const? => false}, + {:type=>"int", :name=>"cmock_arg3", :ptr? => false, :const? => false}, + {:type=>"char*", :name=>"cmock_arg4", :ptr? => false, :const? => true}, + {:type=>"int", :name=>"n", :ptr? => false, :const? => false}, + {:type=>"cmock_module_func_ptr1", :name=>"cmock_arg1", :ptr? => false, :const? => false} + ], + :args_string=>"sqlite3_stmt* cmock_arg2, int cmock_arg3, const char* cmock_arg4, int n, cmock_module_func_ptr1 cmock_arg1", + :args_call=>"cmock_arg2, cmock_arg3, cmock_arg4, n, cmock_arg1" }] + typedefs = ["typedef void(*cmock_module_func_ptr1)(void*);"] + result = @parser.parse("module", source) + assert_equal(expected, result[:functions]) + assert_equal(typedefs, result[:typedefs]) + end + + it "extract functions with varargs" do + source = "int XFiles(int Scully, int Mulder, ...);\n" + expected = [{ :var_arg=>"...", + :return=> { :type => "int", + :name => 'cmock_to_return', + :ptr? => false, + :const? => false, + :str => "int cmock_to_return", + :void? => false + }, + :name=>"XFiles", + :modifier=>"", + :contains_ptr? => false, + :args=>[ {:type=>"int", :name=>"Scully", :ptr? => false, :const? => false}, + {:type=>"int", :name=>"Mulder", :ptr? => false, :const? => false} + ], + :args_string=>"int Scully, int Mulder", + :args_call=>"Scully, Mulder" + }] + assert_equal(expected, @parser.parse("module", source)[:functions]) + end + + it "extract functions with void pointers" do + source = "void* MoreSillySongs(void* stuff);\n" + expected = [{ :var_arg=>nil, + :return=> { :type => "void*", + :name => 'cmock_to_return', + :ptr? => true, + :const? => false, + :str => "void* cmock_to_return", + :void? => false + }, + :name=>"MoreSillySongs", + :modifier=>"", + :contains_ptr? => true, + :args=>[ {:type=>"void*", :name=>"stuff", :ptr? => true, :const? => false} + ], + :args_string=>"void* stuff", + :args_call=>"stuff" + }] + assert_equal(expected, @parser.parse("module", source)[:functions]) + end + + it "extract functions with strippable confusing junk like gcc attributes" do + source = "int LaverneAndShirley(int Lenny, int Squiggy) __attribute__((weak)) __attribute__ ((deprecated));\n" + expected = [{ :var_arg=>nil, + :return=> { :type => "int", + :name => 'cmock_to_return', + :ptr? => false, + :const? => false, + :str => "int cmock_to_return", + :void? => false + }, + :name=>"LaverneAndShirley", + :modifier=>"", + :contains_ptr? => false, + :args=>[ {:type=>"int", :name=>"Lenny", :ptr? => false, :const? => false}, + {:type=>"int", :name=>"Squiggy", :ptr? => false, :const? => false} + ], + :args_string=>"int Lenny, int Squiggy", + :args_call=>"Lenny, Squiggy" + }] + assert_equal(expected, @parser.parse("module", source)[:functions]) + end + + it "extract functions with strippable confusing junk like gcc attributes with parenthesis" do + source = "int TheCosbyShow(int Cliff, int Claire) __attribute__((weak, alias (\"__f\"));\n" + expected = [{ :var_arg=>nil, + :return=> { :type => "int", + :name => 'cmock_to_return', + :ptr? => false, + :const? => false, + :str => "int cmock_to_return", + :void? => false + }, + :name=>"TheCosbyShow", + :modifier=>"", + :contains_ptr? => false, + :args=>[ {:type=>"int", :name=>"Cliff", :ptr? => false, :const? => false}, + {:type=>"int", :name=>"Claire", :ptr? => false, :const? => false} + ], + :args_string=>"int Cliff, int Claire", + :args_call=>"Cliff, Claire" + }] + assert_equal(expected, @parser.parse("module", source)[:functions]) + end + +end diff --git a/test/unit/cmock_plugin_manager_test.rb b/test/unit/cmock_plugin_manager_test.rb index c6891bb..a079f1d 100644 --- a/test/unit/cmock_plugin_manager_test.rb +++ b/test/unit/cmock_plugin_manager_test.rb @@ -1,95 +1,95 @@ -# ========================================== -# CMock Project - Automatic Mock Generation for C -# Copyright (c) 2007 Mike Karlesky, Mark VanderVoord, Greg Williams -# [Released under MIT License. Please refer to license.txt for details] -# ========================================== - -require File.expand_path(File.dirname(__FILE__)) + "/../test_helper" -require 'cmock_plugin_manager' -require 'cmock_generator_plugin_expect' -require 'cmock_generator_plugin_ignore' -require 'cmock_generator_plugin_cexception' - -describe CMockPluginManager, "Verify CMockPluginManager Module" do - - before do - create_mocks :utils, :pluginA, :pluginB - @config = create_stub( - :respond_to => true, - :when_ptr => :compare_data, - :enforce_strict_ordering => false, - :ignore => :args_and_calls - ) - - #if (RUBY_VERSION.split('.')[0].to_i >= 2) - # @config.define_singleton_method( :plugins ){ @plugins || [] } - # @config.define_singleton_method( :plugins= ){ |val| @plugins = val } - #else - eval "class << @config\ndef plugins\n@plugins||[]\nend\ndef plugins=(val)\n@plugins=val\nend\nend\n" - #end - end - - after do - end - - it "return all plugins by default" do - @config.plugins = ['cexception','ignore'] - @utils.expect :helpers, {} - - @cmock_plugins = CMockPluginManager.new(@config, @utils) - - test_plugins = @cmock_plugins.plugins - contained = { :expect => false, :ignore => false, :cexception => false } - test_plugins.each do |plugin| - contained[:expect] = true if plugin.instance_of?(CMockGeneratorPluginExpect) - contained[:ignore] = true if plugin.instance_of?(CMockGeneratorPluginIgnore) - contained[:cexception] = true if plugin.instance_of?(CMockGeneratorPluginCexception) - end - assert_equal(true, contained[:expect]) - assert_equal(true, contained[:ignore]) - assert_equal(true, contained[:cexception]) - end - - it "return restricted plugins based on config" do - @utils.expect :helpers, {} - - @cmock_plugins = CMockPluginManager.new(@config, @utils) - - test_plugins = @cmock_plugins.plugins - contained = { :expect => false, :ignore => false, :cexception => false } - test_plugins.each do |plugin| - contained[:expect] = true if plugin.instance_of?(CMockGeneratorPluginExpect) - contained[:ignore] = true if plugin.instance_of?(CMockGeneratorPluginIgnore) - contained[:cexception] = true if plugin.instance_of?(CMockGeneratorPluginCexception) - end - assert_equal(true, contained[:expect]) - assert_equal(false,contained[:ignore]) - assert_equal(false,contained[:cexception]) - end - - it "run a desired method over each plugin requested and return the results" do - @utils.expect :helpers, {} - @cmock_plugins = CMockPluginManager.new(@config, @utils) - - @pluginA = create_stub(:test_method => ["This Is An Awesome Test-"]) - @pluginB = create_stub(:test_method => ["And This is Part 2-","Of An Awesome Test"]) - @cmock_plugins.plugins = [@pluginA, @pluginB] - - expected = "This Is An Awesome Test-And This is Part 2-Of An Awesome Test" - output = @cmock_plugins.run(:test_method) - assert_equal(expected, output) - end - - it "run a desired method and arg list over each plugin requested and return the results" do - @utils.expect :helpers, {} - @cmock_plugins = CMockPluginManager.new(@config, @utils) - - @pluginA = create_stub(:test_method => ["This Is An Awesome Test-"]) - @pluginB = create_stub(:test_method => ["And This is Part 2-","Of An Awesome Test"]) - @cmock_plugins.plugins = [@pluginA, @pluginB] - - expected = "This Is An Awesome Test-And This is Part 2-Of An Awesome Test" - output = @cmock_plugins.run(:test_method, "chickenpotpie") - assert_equal(expected, output) - end -end +# ========================================== +# CMock Project - Automatic Mock Generation for C +# Copyright (c) 2007 Mike Karlesky, Mark VanderVoord, Greg Williams +# [Released under MIT License. Please refer to license.txt for details] +# ========================================== + +require File.expand_path(File.dirname(__FILE__)) + "/../test_helper" +require 'cmock_plugin_manager' +require 'cmock_generator_plugin_expect' +require 'cmock_generator_plugin_ignore' +require 'cmock_generator_plugin_cexception' + +describe CMockPluginManager, "Verify CMockPluginManager Module" do + + before do + create_mocks :utils, :pluginA, :pluginB + @config = create_stub( + :respond_to => true, + :when_ptr => :compare_data, + :enforce_strict_ordering => false, + :ignore => :args_and_calls + ) + + #if (RUBY_VERSION.split('.')[0].to_i >= 2) + # @config.define_singleton_method( :plugins ){ @plugins || [] } + # @config.define_singleton_method( :plugins= ){ |val| @plugins = val } + #else + eval "class << @config\ndef plugins\n@plugins||[]\nend\ndef plugins=(val)\n@plugins=val\nend\nend\n" + #end + end + + after do + end + + it "return all plugins by default" do + @config.plugins = ['cexception','ignore'] + @utils.expect :helpers, {} + + @cmock_plugins = CMockPluginManager.new(@config, @utils) + + test_plugins = @cmock_plugins.plugins + contained = { :expect => false, :ignore => false, :cexception => false } + test_plugins.each do |plugin| + contained[:expect] = true if plugin.instance_of?(CMockGeneratorPluginExpect) + contained[:ignore] = true if plugin.instance_of?(CMockGeneratorPluginIgnore) + contained[:cexception] = true if plugin.instance_of?(CMockGeneratorPluginCexception) + end + assert_equal(true, contained[:expect]) + assert_equal(true, contained[:ignore]) + assert_equal(true, contained[:cexception]) + end + + it "return restricted plugins based on config" do + @utils.expect :helpers, {} + + @cmock_plugins = CMockPluginManager.new(@config, @utils) + + test_plugins = @cmock_plugins.plugins + contained = { :expect => false, :ignore => false, :cexception => false } + test_plugins.each do |plugin| + contained[:expect] = true if plugin.instance_of?(CMockGeneratorPluginExpect) + contained[:ignore] = true if plugin.instance_of?(CMockGeneratorPluginIgnore) + contained[:cexception] = true if plugin.instance_of?(CMockGeneratorPluginCexception) + end + assert_equal(true, contained[:expect]) + assert_equal(false,contained[:ignore]) + assert_equal(false,contained[:cexception]) + end + + it "run a desired method over each plugin requested and return the results" do + @utils.expect :helpers, {} + @cmock_plugins = CMockPluginManager.new(@config, @utils) + + @pluginA = create_stub(:test_method => ["This Is An Awesome Test-"]) + @pluginB = create_stub(:test_method => ["And This is Part 2-","Of An Awesome Test"]) + @cmock_plugins.plugins = [@pluginA, @pluginB] + + expected = "This Is An Awesome Test-And This is Part 2-Of An Awesome Test" + output = @cmock_plugins.run(:test_method) + assert_equal(expected, output) + end + + it "run a desired method and arg list over each plugin requested and return the results" do + @utils.expect :helpers, {} + @cmock_plugins = CMockPluginManager.new(@config, @utils) + + @pluginA = create_stub(:test_method => ["This Is An Awesome Test-"]) + @pluginB = create_stub(:test_method => ["And This is Part 2-","Of An Awesome Test"]) + @cmock_plugins.plugins = [@pluginA, @pluginB] + + expected = "This Is An Awesome Test-And This is Part 2-Of An Awesome Test" + output = @cmock_plugins.run(:test_method, "chickenpotpie") + assert_equal(expected, output) + end +end diff --git a/test/unit/cmock_unityhelper_parser_test.rb b/test/unit/cmock_unityhelper_parser_test.rb index c925fb5..a2f1d8c 100644 --- a/test/unit/cmock_unityhelper_parser_test.rb +++ b/test/unit/cmock_unityhelper_parser_test.rb @@ -1,223 +1,223 @@ -# ========================================== -# CMock Project - Automatic Mock Generation for C -# Copyright (c) 2007 Mike Karlesky, Mark VanderVoord, Greg Williams -# [Released under MIT License. Please refer to license.txt for details] -# ========================================== - -require File.expand_path(File.dirname(__FILE__)) + "/../test_helper" -require 'cmock_unityhelper_parser' - -describe CMockUnityHelperParser, "Verify CMockUnityHelperParser Module" do - - before do - create_mocks :config - end - - after do - end - - it "ignore lines that are commented out" do - source = - " abcd;\n" + - "// #define UNITY_TEST_ASSERT_EQUAL_CHICKENS(a,b,line,msg) {...};\n" + - "or maybe // #define UNITY_TEST_ASSERT_EQUAL_CHICKENS(a,b,line,msg) {...};\n\n" - @config.expect :plugins, [] #not :array - @config.expect :treat_as, {} - @config.expect :load_unity_helper, source - @parser = CMockUnityHelperParser.new(@config) - expected = {} - - assert_equal(expected, @parser.c_types) - end - - it "ignore stuff in block comments" do - source = - " abcd; /*\n" + - "#define UNITY_TEST_ASSERT_EQUAL_CHICKENS(a,b,line,msg) {...};\n" + - "#define UNITY_TEST_ASSERT_EQUAL_CHICKENS(a,b,line,msg) {...};\n */\n" - @config.expect :plugins, [] #not :array - @config.expect :treat_as, {} - @config.expect :load_unity_helper, source - @parser = CMockUnityHelperParser.new(@config) - expected = {} - - assert_equal(expected, @parser.c_types) - end - - it "notice equal helpers in the proper form and ignore others" do - source = - "abcd;\n" + - "#define UNITY_TEST_ASSERT_EQUAL_TURKEYS_T(a,b,line,msg) {...};\n" + - "abcd;\n" + - "#define UNITY_TEST_ASSERT_EQUAL_WRONG_NUM_ARGS(a,b,c,d,e) {...};\n" + - "#define UNITY_TEST_ASSERT_WRONG_NAME_EQUAL(a,b,c,d) {...};\n" + - "#define UNITY_TEST_ASSERT_EQUAL_unsigned_funky_rabbits(a,b,c,d) {...};\n" + - "abcd;\n" - @config.expect :plugins, [] #not :array - @config.expect :treat_as, {} - @config.expect :load_unity_helper, source - @parser = CMockUnityHelperParser.new(@config) - expected = { - 'TURKEYS_T' => "UNITY_TEST_ASSERT_EQUAL_TURKEYS_T", - 'unsigned_funky_rabbits' => "UNITY_TEST_ASSERT_EQUAL_unsigned_funky_rabbits" - } - - assert_equal(expected, @parser.c_types) - end - - it "notice equal helpers that contain arrays" do - source = - "abcd;\n" + - "#define UNITY_TEST_ASSERT_EQUAL_TURKEYS_ARRAY(a,b,c,d,e) {...};\n" + - "abcd;\n" + - "#define UNITY_TEST_ASSERT_EQUAL_WRONG_NUM_ARGS_ARRAY(a,b,c,d,e,f) {...};\n" + - "#define UNITY_TEST_ASSERT_WRONG_NAME_EQUAL_ARRAY(a,b,c,d,e) {...};\n" + - "#define UNITY_TEST_ASSERT_EQUAL_unsigned_funky_rabbits_ARRAY(a,b,c,d,e) {...};\n" + - "abcd;\n" - @config.expect :plugins, [] #not :array - @config.expect :treat_as, {} - @config.expect :load_unity_helper, source - @parser = CMockUnityHelperParser.new(@config) - expected = { - 'TURKEYS*' => "UNITY_TEST_ASSERT_EQUAL_TURKEYS_ARRAY", - 'unsigned_funky_rabbits*' => "UNITY_TEST_ASSERT_EQUAL_unsigned_funky_rabbits_ARRAY" - } - - assert_equal(expected, @parser.c_types) - end - - it "pull in the standard set of helpers and add them to my list" do - pairs = { - "UINT" => "HEX32", - "unsigned long" => "HEX64", - } - expected = { - "UINT" => "UNITY_TEST_ASSERT_EQUAL_HEX32", - "unsigned_long" => "UNITY_TEST_ASSERT_EQUAL_HEX64", - "UINT*" => "UNITY_TEST_ASSERT_EQUAL_HEX32_ARRAY", - "unsigned_long*"=> "UNITY_TEST_ASSERT_EQUAL_HEX64_ARRAY", - } - @config.expect :plugins, [] #not :array - @config.expect :treat_as, pairs - @config.expect :load_unity_helper, nil - @parser = CMockUnityHelperParser.new(@config) - - assert_equal(expected, @parser.c_types) - end - - it "pull in the user specified set of helpers and add them to my list" do - pairs = { - "char*" => "STRING", - "unsigned int" => "HEX32", - } - expected = { - "char*" => "UNITY_TEST_ASSERT_EQUAL_STRING", - "unsigned_int" => "UNITY_TEST_ASSERT_EQUAL_HEX32", - "char**" => "UNITY_TEST_ASSERT_EQUAL_STRING_ARRAY", - "unsigned_int*" => "UNITY_TEST_ASSERT_EQUAL_HEX32_ARRAY", - } - @config.expect :plugins, [] #not :array - @config.expect :treat_as, pairs - @config.expect :load_unity_helper, nil - @parser = CMockUnityHelperParser.new(@config) - - assert_equal(expected, @parser.c_types) - end - - it "be able to fetch helpers on my list" do - @config.expect :plugins, [] #not :array - @config.expect :treat_as, {} - @config.expect :load_unity_helper, "" - @parser = CMockUnityHelperParser.new(@config) - @parser.c_types = { - 'UINT8' => "UNITY_TEST_ASSERT_EQUAL_UINT8", - 'UINT16*' => "UNITY_TEST_ASSERT_EQUAL_UINT16_ARRAY", - 'SPINACH' => "UNITY_TEST_ASSERT_EQUAL_SPINACH", - 'LONG_LONG' => "UNITY_TEST_ASSERT_EQUAL_LONG_LONG" - } - - [["UINT8","UINT8"], - ["UINT16*","UINT16_ARRAY"], - ["const SPINACH","SPINACH"], - ["LONG LONG","LONG_LONG"] ].each do |ctype, exptype| - assert_equal(["UNITY_TEST_ASSERT_EQUAL_#{exptype}",''], @parser.get_helper(ctype)) - end - end - - it "return memory comparison when asked to fetch helper of types not on my list" do - @config.expect :plugins, [] #not :array - @config.expect :treat_as, {} - @config.expect :load_unity_helper, "" - @parser = CMockUnityHelperParser.new(@config) - @parser.c_types = { - 'UINT8' => "UNITY_TEST_ASSERT_EQUAL_UINT8", - 'UINT16*' => "UNITY_TEST_ASSERT_EQUAL_UINT16_ARRAY", - 'SPINACH' => "UNITY_TEST_ASSERT_EQUAL_SPINACH", - } - - ["UINT32","SPINACH_T","SALAD","PINEAPPLE"].each do |ctype| - @config.expect :memcmp_if_unknown, true - assert_equal(["UNITY_TEST_ASSERT_EQUAL_MEMORY",'&'], @parser.get_helper(ctype)) - end - end - - it "return memory array comparison when asked to fetch helper of types not on my list" do - @config.expect :plugins, [:array] - @config.expect :treat_as, {} - @config.expect :load_unity_helper, "" - @parser = CMockUnityHelperParser.new(@config) - @parser.c_types = { - 'UINT8' => "UNITY_TEST_ASSERT_EQUAL_UINT8", - 'UINT16*' => "UNITY_TEST_ASSERT_EQUAL_UINT16_ARRAY", - 'SPINACH' => "UNITY_TEST_ASSERT_EQUAL_SPINACH", - } - - ["UINT32*","SPINACH_T*"].each do |ctype| - @config.expect :memcmp_if_unknown, true - assert_equal(["UNITY_TEST_ASSERT_EQUAL_MEMORY_ARRAY",''], @parser.get_helper(ctype)) - end - end - - it "return the array handler if we cannot find the normal handler" do - @config.expect :plugins, [] #not :array - @config.expect :treat_as, {} - @config.expect :load_unity_helper, "" - @parser = CMockUnityHelperParser.new(@config) - @parser.c_types = { - 'UINT8' => "UNITY_TEST_ASSERT_EQUAL_UINT8", - 'UINT16*' => "UNITY_TEST_ASSERT_EQUAL_UINT16_ARRAY", - 'SPINACH' => "UNITY_TEST_ASSERT_EQUAL_SPINACH", - } - - assert_equal(["UNITY_TEST_ASSERT_EQUAL_UINT16_ARRAY",'&'], @parser.get_helper("UINT16")) - end - - it "return the normal handler if we cannot find the array handler" do - @config.expect :plugins, [] #not :array - @config.expect :treat_as, {} - @config.expect :load_unity_helper, "" - @parser = CMockUnityHelperParser.new(@config) - @parser.c_types = { - 'UINT8' => "UNITY_TEST_ASSERT_EQUAL_UINT8", - 'UINT16' => "UNITY_TEST_ASSERT_EQUAL_UINT16", - 'SPINACH' => "UNITY_TEST_ASSERT_EQUAL_SPINACH", - } - - assert_equal(["UNITY_TEST_ASSERT_EQUAL_UINT8",'*'], @parser.get_helper("UINT8*")) - end - - it "raise error when asked to fetch helper of type not on my list and not allowed to mem check" do - @config.expect :plugins, [] #not :array - @config.expect :treat_as, {} - @config.expect :load_unity_helper, "" - @config.expect :memcmp_if_unknown, false - @parser = CMockUnityHelperParser.new(@config) - @parser.c_types = { - 'UINT8' => "UNITY_TEST_ASSERT_EQUAL_UINT8", - 'UINT32*' => "UNITY_TEST_ASSERT_EQUAL_UINT32_ARRAY", - 'SPINACH' => "UNITY_TEST_ASSERT_EQUAL_SPINACH", - } - - assert_raises (RuntimeError) { @parser.get_helper("UINT16") } - end -end +# ========================================== +# CMock Project - Automatic Mock Generation for C +# Copyright (c) 2007 Mike Karlesky, Mark VanderVoord, Greg Williams +# [Released under MIT License. Please refer to license.txt for details] +# ========================================== + +require File.expand_path(File.dirname(__FILE__)) + "/../test_helper" +require 'cmock_unityhelper_parser' + +describe CMockUnityHelperParser, "Verify CMockUnityHelperParser Module" do + + before do + create_mocks :config + end + + after do + end + + it "ignore lines that are commented out" do + source = + " abcd;\n" + + "// #define UNITY_TEST_ASSERT_EQUAL_CHICKENS(a,b,line,msg) {...};\n" + + "or maybe // #define UNITY_TEST_ASSERT_EQUAL_CHICKENS(a,b,line,msg) {...};\n\n" + @config.expect :plugins, [] #not :array + @config.expect :treat_as, {} + @config.expect :load_unity_helper, source + @parser = CMockUnityHelperParser.new(@config) + expected = {} + + assert_equal(expected, @parser.c_types) + end + + it "ignore stuff in block comments" do + source = + " abcd; /*\n" + + "#define UNITY_TEST_ASSERT_EQUAL_CHICKENS(a,b,line,msg) {...};\n" + + "#define UNITY_TEST_ASSERT_EQUAL_CHICKENS(a,b,line,msg) {...};\n */\n" + @config.expect :plugins, [] #not :array + @config.expect :treat_as, {} + @config.expect :load_unity_helper, source + @parser = CMockUnityHelperParser.new(@config) + expected = {} + + assert_equal(expected, @parser.c_types) + end + + it "notice equal helpers in the proper form and ignore others" do + source = + "abcd;\n" + + "#define UNITY_TEST_ASSERT_EQUAL_TURKEYS_T(a,b,line,msg) {...};\n" + + "abcd;\n" + + "#define UNITY_TEST_ASSERT_EQUAL_WRONG_NUM_ARGS(a,b,c,d,e) {...};\n" + + "#define UNITY_TEST_ASSERT_WRONG_NAME_EQUAL(a,b,c,d) {...};\n" + + "#define UNITY_TEST_ASSERT_EQUAL_unsigned_funky_rabbits(a,b,c,d) {...};\n" + + "abcd;\n" + @config.expect :plugins, [] #not :array + @config.expect :treat_as, {} + @config.expect :load_unity_helper, source + @parser = CMockUnityHelperParser.new(@config) + expected = { + 'TURKEYS_T' => "UNITY_TEST_ASSERT_EQUAL_TURKEYS_T", + 'unsigned_funky_rabbits' => "UNITY_TEST_ASSERT_EQUAL_unsigned_funky_rabbits" + } + + assert_equal(expected, @parser.c_types) + end + + it "notice equal helpers that contain arrays" do + source = + "abcd;\n" + + "#define UNITY_TEST_ASSERT_EQUAL_TURKEYS_ARRAY(a,b,c,d,e) {...};\n" + + "abcd;\n" + + "#define UNITY_TEST_ASSERT_EQUAL_WRONG_NUM_ARGS_ARRAY(a,b,c,d,e,f) {...};\n" + + "#define UNITY_TEST_ASSERT_WRONG_NAME_EQUAL_ARRAY(a,b,c,d,e) {...};\n" + + "#define UNITY_TEST_ASSERT_EQUAL_unsigned_funky_rabbits_ARRAY(a,b,c,d,e) {...};\n" + + "abcd;\n" + @config.expect :plugins, [] #not :array + @config.expect :treat_as, {} + @config.expect :load_unity_helper, source + @parser = CMockUnityHelperParser.new(@config) + expected = { + 'TURKEYS*' => "UNITY_TEST_ASSERT_EQUAL_TURKEYS_ARRAY", + 'unsigned_funky_rabbits*' => "UNITY_TEST_ASSERT_EQUAL_unsigned_funky_rabbits_ARRAY" + } + + assert_equal(expected, @parser.c_types) + end + + it "pull in the standard set of helpers and add them to my list" do + pairs = { + "UINT" => "HEX32", + "unsigned long" => "HEX64", + } + expected = { + "UINT" => "UNITY_TEST_ASSERT_EQUAL_HEX32", + "unsigned_long" => "UNITY_TEST_ASSERT_EQUAL_HEX64", + "UINT*" => "UNITY_TEST_ASSERT_EQUAL_HEX32_ARRAY", + "unsigned_long*"=> "UNITY_TEST_ASSERT_EQUAL_HEX64_ARRAY", + } + @config.expect :plugins, [] #not :array + @config.expect :treat_as, pairs + @config.expect :load_unity_helper, nil + @parser = CMockUnityHelperParser.new(@config) + + assert_equal(expected, @parser.c_types) + end + + it "pull in the user specified set of helpers and add them to my list" do + pairs = { + "char*" => "STRING", + "unsigned int" => "HEX32", + } + expected = { + "char*" => "UNITY_TEST_ASSERT_EQUAL_STRING", + "unsigned_int" => "UNITY_TEST_ASSERT_EQUAL_HEX32", + "char**" => "UNITY_TEST_ASSERT_EQUAL_STRING_ARRAY", + "unsigned_int*" => "UNITY_TEST_ASSERT_EQUAL_HEX32_ARRAY", + } + @config.expect :plugins, [] #not :array + @config.expect :treat_as, pairs + @config.expect :load_unity_helper, nil + @parser = CMockUnityHelperParser.new(@config) + + assert_equal(expected, @parser.c_types) + end + + it "be able to fetch helpers on my list" do + @config.expect :plugins, [] #not :array + @config.expect :treat_as, {} + @config.expect :load_unity_helper, "" + @parser = CMockUnityHelperParser.new(@config) + @parser.c_types = { + 'UINT8' => "UNITY_TEST_ASSERT_EQUAL_UINT8", + 'UINT16*' => "UNITY_TEST_ASSERT_EQUAL_UINT16_ARRAY", + 'SPINACH' => "UNITY_TEST_ASSERT_EQUAL_SPINACH", + 'LONG_LONG' => "UNITY_TEST_ASSERT_EQUAL_LONG_LONG" + } + + [["UINT8","UINT8"], + ["UINT16*","UINT16_ARRAY"], + ["const SPINACH","SPINACH"], + ["LONG LONG","LONG_LONG"] ].each do |ctype, exptype| + assert_equal(["UNITY_TEST_ASSERT_EQUAL_#{exptype}",''], @parser.get_helper(ctype)) + end + end + + it "return memory comparison when asked to fetch helper of types not on my list" do + @config.expect :plugins, [] #not :array + @config.expect :treat_as, {} + @config.expect :load_unity_helper, "" + @parser = CMockUnityHelperParser.new(@config) + @parser.c_types = { + 'UINT8' => "UNITY_TEST_ASSERT_EQUAL_UINT8", + 'UINT16*' => "UNITY_TEST_ASSERT_EQUAL_UINT16_ARRAY", + 'SPINACH' => "UNITY_TEST_ASSERT_EQUAL_SPINACH", + } + + ["UINT32","SPINACH_T","SALAD","PINEAPPLE"].each do |ctype| + @config.expect :memcmp_if_unknown, true + assert_equal(["UNITY_TEST_ASSERT_EQUAL_MEMORY",'&'], @parser.get_helper(ctype)) + end + end + + it "return memory array comparison when asked to fetch helper of types not on my list" do + @config.expect :plugins, [:array] + @config.expect :treat_as, {} + @config.expect :load_unity_helper, "" + @parser = CMockUnityHelperParser.new(@config) + @parser.c_types = { + 'UINT8' => "UNITY_TEST_ASSERT_EQUAL_UINT8", + 'UINT16*' => "UNITY_TEST_ASSERT_EQUAL_UINT16_ARRAY", + 'SPINACH' => "UNITY_TEST_ASSERT_EQUAL_SPINACH", + } + + ["UINT32*","SPINACH_T*"].each do |ctype| + @config.expect :memcmp_if_unknown, true + assert_equal(["UNITY_TEST_ASSERT_EQUAL_MEMORY_ARRAY",''], @parser.get_helper(ctype)) + end + end + + it "return the array handler if we cannot find the normal handler" do + @config.expect :plugins, [] #not :array + @config.expect :treat_as, {} + @config.expect :load_unity_helper, "" + @parser = CMockUnityHelperParser.new(@config) + @parser.c_types = { + 'UINT8' => "UNITY_TEST_ASSERT_EQUAL_UINT8", + 'UINT16*' => "UNITY_TEST_ASSERT_EQUAL_UINT16_ARRAY", + 'SPINACH' => "UNITY_TEST_ASSERT_EQUAL_SPINACH", + } + + assert_equal(["UNITY_TEST_ASSERT_EQUAL_UINT16_ARRAY",'&'], @parser.get_helper("UINT16")) + end + + it "return the normal handler if we cannot find the array handler" do + @config.expect :plugins, [] #not :array + @config.expect :treat_as, {} + @config.expect :load_unity_helper, "" + @parser = CMockUnityHelperParser.new(@config) + @parser.c_types = { + 'UINT8' => "UNITY_TEST_ASSERT_EQUAL_UINT8", + 'UINT16' => "UNITY_TEST_ASSERT_EQUAL_UINT16", + 'SPINACH' => "UNITY_TEST_ASSERT_EQUAL_SPINACH", + } + + assert_equal(["UNITY_TEST_ASSERT_EQUAL_UINT8",'*'], @parser.get_helper("UINT8*")) + end + + it "raise error when asked to fetch helper of type not on my list and not allowed to mem check" do + @config.expect :plugins, [] #not :array + @config.expect :treat_as, {} + @config.expect :load_unity_helper, "" + @config.expect :memcmp_if_unknown, false + @parser = CMockUnityHelperParser.new(@config) + @parser.c_types = { + 'UINT8' => "UNITY_TEST_ASSERT_EQUAL_UINT8", + 'UINT32*' => "UNITY_TEST_ASSERT_EQUAL_UINT32_ARRAY", + 'SPINACH' => "UNITY_TEST_ASSERT_EQUAL_SPINACH", + } + + assert_raises (RuntimeError) { @parser.get_helper("UINT16") } + end +end