From 79bb1a9932af7bfcdab67e2a1da9d9edcba87f71 Mon Sep 17 00:00:00 2001 From: Camil Staps Date: Mon, 22 Aug 2016 22:28:32 +0200 Subject: old wip --- .../src/system_config/pic32mx695f512h/btl_mx.ld | 798 +++++++++++++++++++++ .../pic32mx695f512h/configuration.xml | 210 ++++++ .../framework/system/clk/src/sys_clk_static.c | 216 ++++++ .../framework/system/clk/sys_clk_static.h | 65 ++ .../framework/system/ports/src/sys_ports_static.c | 81 +++ .../pic32mx695f512h/gfx_hgc_definitions.c | 248 +++++++ .../pic32mx695f512h/gfx_hgc_definitions.h | 219 ++++++ .../pic32mx695f512h/pic32mx695f512h.mhc | 406 +++++++++++ .../system_config/pic32mx695f512h/system_config.h | 238 ++++++ .../pic32mx695f512h/system_definitions.h | 136 ++++ .../pic32mx695f512h/system_exceptions.c | 143 ++++ .../system_config/pic32mx695f512h/system_init.c | 336 +++++++++ .../pic32mx695f512h/system_interrupt.c | 89 +++ .../system_config/pic32mx695f512h/system_tasks.c | 104 +++ 14 files changed, 3289 insertions(+) create mode 100644 firmware/src/system_config/pic32mx695f512h/btl_mx.ld create mode 100644 firmware/src/system_config/pic32mx695f512h/configuration.xml create mode 100644 firmware/src/system_config/pic32mx695f512h/framework/system/clk/src/sys_clk_static.c create mode 100644 firmware/src/system_config/pic32mx695f512h/framework/system/clk/sys_clk_static.h create mode 100644 firmware/src/system_config/pic32mx695f512h/framework/system/ports/src/sys_ports_static.c create mode 100644 firmware/src/system_config/pic32mx695f512h/gfx_hgc_definitions.c create mode 100644 firmware/src/system_config/pic32mx695f512h/gfx_hgc_definitions.h create mode 100644 firmware/src/system_config/pic32mx695f512h/pic32mx695f512h.mhc create mode 100644 firmware/src/system_config/pic32mx695f512h/system_config.h create mode 100644 firmware/src/system_config/pic32mx695f512h/system_definitions.h create mode 100644 firmware/src/system_config/pic32mx695f512h/system_exceptions.c create mode 100644 firmware/src/system_config/pic32mx695f512h/system_init.c create mode 100644 firmware/src/system_config/pic32mx695f512h/system_interrupt.c create mode 100644 firmware/src/system_config/pic32mx695f512h/system_tasks.c (limited to 'firmware/src/system_config/pic32mx695f512h') diff --git a/firmware/src/system_config/pic32mx695f512h/btl_mx.ld b/firmware/src/system_config/pic32mx695f512h/btl_mx.ld new file mode 100644 index 0000000..f41053f --- /dev/null +++ b/firmware/src/system_config/pic32mx695f512h/btl_mx.ld @@ -0,0 +1,798 @@ +/*-------------------------------------------------------------------------- + * MPLAB XC Compiler - PIC32MX695F512H linker script + * Build date : May 01 2015 + * + * Copyright (c) 2015, Microchip Technology Inc. and its subsidiaries ("Microchip") + * All rights reserved. + * + * This software is developed by Microchip Technology Inc. and its + * subsidiaries ("Microchip"). + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are + * met: + * + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above + * copyright notice, this list of conditions and the following + * disclaimer in the documentation and/or other materials provided + * with the distribution. + * 3. Microchip's name may not be used to endorse or promote products + * derived from this software without specific prior written + * permission. + * + * THIS SOFTWARE IS PROVIDED BY MICROCHIP "AS IS" AND ANY EXPRESS OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF + * MERCHANTABILITY AND FITNESS FOR PURPOSE ARE DISCLAIMED. IN NO EVENT + * SHALL MICROCHIP 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) HOWSOEVER 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. + * + */ + +/* Default linker script, for normal executables */ + +/* IMPORTANT: PIC32MX MCUs use two files for the default linker script: + * 1) pic32mx/lib/ldscripts/elf32pic32.x (main linker script) + * 2) pic32mx/lib/proc/32MX695F512H/procdefs.ld (variant-specific fragment) + * + * This file is provided only as a convenience when adding a custom linker script + * to your application. + */ + +OUTPUT_FORMAT("elf32-tradlittlemips") +OUTPUT_ARCH(pic32mx) +ENTRY(_reset) +/* + * Provide for a minimum stack and heap size + * - _min_stack_size - represents the minimum space that must be made + * available for the stack. Can be overridden from + * the command line using the linker's --defsym option. + * - _min_heap_size - represents the minimum space that must be made + * available for the heap. Must be specified on + * the command line using the linker's --defsym option. + */ +EXTERN (_min_stack_size _min_heap_size) +PROVIDE(_min_stack_size = 0x400) ; + +/************************************************************************* + * Processor-specific object file. Contains SFR definitions. + *************************************************************************/ +INPUT("processor.o") + +/************************************************************************* + * Processor-specific peripheral libraries are optional + *************************************************************************/ +OPTIONAL("libmchp_peripheral.a") +OPTIONAL("libmchp_peripheral_32MX695F512H.a") + +/************************************************************************* + * For interrupt vector handling + *************************************************************************/ +PROVIDE(_vector_spacing = 0x00000001); +_ebase_address = 0x9D00E000; + +/************************************************************************* + * Memory Address Equates + * _RESET_ADDR -- Reset Vector + * _BEV_EXCPT_ADDR -- Boot exception Vector + * _DBG_EXCPT_ADDR -- In-circuit Debugging Exception Vector + * _DBG_CODE_ADDR -- In-circuit Debug Executive address + * _DBG_CODE_SIZE -- In-circuit Debug Executive size + * _GEN_EXCPT_ADDR -- General Exception Vector + *************************************************************************/ +_RESET_ADDR = 0x9D00F000; +_BEV_EXCPT_ADDR = 0x9D00F380; +_DBG_EXCPT_ADDR = 0x9D00F480; +_DBG_CODE_ADDR = 0xBFC02000; +_DBG_CODE_SIZE = 0xFF0; +_GEN_EXCPT_ADDR = _ebase_address + 0x180; + +/************************************************************************* + * Memory Regions + * + * Memory regions without attributes cannot be used for orphaned sections. + * Only sections specifically assigned to these regions can be allocated + * into these regions. + * + * The Debug exception vector is located at 0x9FC00480. + * + * The config_
sections are used to locate the config words at + * their absolute addresses. + *************************************************************************/ +MEMORY +{ + kseg0_program_mem (rx) : ORIGIN = 0x9d00F490, LENGTH = 0x70b70 + kseg0_boot_mem : ORIGIN = 0x9d00E000, LENGTH = 0x0 + exception_mem : ORIGIN = 0x9D00E000, LENGTH = 0x200 + config3 : ORIGIN = 0xBFC02FF0, LENGTH = 0x4 + config2 : ORIGIN = 0xBFC02FF4, LENGTH = 0x4 + config1 : ORIGIN = 0xBFC02FF8, LENGTH = 0x4 + config0 : ORIGIN = 0xBFC02FFC, LENGTH = 0x4 + kseg1_boot_mem : ORIGIN = 0x9d00F000, LENGTH = 0x490 + kseg1_data_mem (w!x) : ORIGIN = 0xA0000000, LENGTH = 0x20000 + sfrs : ORIGIN = 0xBF800000, LENGTH = 0x100000 + debug_exec_mem : ORIGIN = 0xBFC02000, LENGTH = 0xFF0 + configsfrs : ORIGIN = 0xBFC02FF0, LENGTH = 0x10 +} + +/************************************************************************* + * Configuration-word sections. Map the config-pragma input sections to + * absolute-address output sections. + *************************************************************************/ +SECTIONS +{ + .config_BFC02FF0 : { + KEEP(*(.config_BFC02FF0)) + } > config3 + .config_BFC02FF4 : { + KEEP(*(.config_BFC02FF4)) + } > config2 + .config_BFC02FF8 : { + KEEP(*(.config_BFC02FF8)) + } > config1 + .config_BFC02FFC : { + KEEP(*(.config_BFC02FFC)) + } > config0 +} +SECTIONS +{ + /* Boot Sections */ + .reset _RESET_ADDR : + { + KEEP(*(.reset)) + KEEP(*(.reset.startup)) + } > kseg1_boot_mem + .bev_excpt _BEV_EXCPT_ADDR : + { + KEEP(*(.bev_handler)) + } > kseg1_boot_mem + /* Debug exception vector */ + .dbg_excpt _DBG_EXCPT_ADDR (NOLOAD) : + { + . += (DEFINED (_DEBUGGER) ? 0x8 : 0x0); + } > kseg1_boot_mem + /* Space reserved for the debug executive */ + .dbg_code _DBG_CODE_ADDR (NOLOAD) : + { + . += (DEFINED (_DEBUGGER) ? _DBG_CODE_SIZE : 0x0); + } > debug_exec_mem + + .app_excpt _GEN_EXCPT_ADDR : + { + KEEP(*(.gen_handler)) + } > exception_mem + + .vector_0 _ebase_address + 0x200 + ((_vector_spacing << 5) * 0) : + { + KEEP(*(.vector_0)) + } > exception_mem + ASSERT (_vector_spacing == 0 || SIZEOF(.vector_0) <= (_vector_spacing << 5), "function at exception vector 0 too large") + .vector_1 _ebase_address + 0x200 + ((_vector_spacing << 5) * 1) : + { + KEEP(*(.vector_1)) + } > exception_mem + ASSERT (_vector_spacing == 0 || SIZEOF(.vector_1) <= (_vector_spacing << 5), "function at exception vector 1 too large") + .vector_2 _ebase_address + 0x200 + ((_vector_spacing << 5) * 2) : + { + KEEP(*(.vector_2)) + } > exception_mem + ASSERT (_vector_spacing == 0 || SIZEOF(.vector_2) <= (_vector_spacing << 5), "function at exception vector 2 too large") + .vector_3 _ebase_address + 0x200 + ((_vector_spacing << 5) * 3) : + { + KEEP(*(.vector_3)) + } > exception_mem + ASSERT (_vector_spacing == 0 || SIZEOF(.vector_3) <= (_vector_spacing << 5), "function at exception vector 3 too large") + .vector_4 _ebase_address + 0x200 + ((_vector_spacing << 5) * 4) : + { + KEEP(*(.vector_4)) + } > exception_mem + ASSERT (_vector_spacing == 0 || SIZEOF(.vector_4) <= (_vector_spacing << 5), "function at exception vector 4 too large") + .vector_5 _ebase_address + 0x200 + ((_vector_spacing << 5) * 5) : + { + KEEP(*(.vector_5)) + } > exception_mem + ASSERT (_vector_spacing == 0 || SIZEOF(.vector_5) <= (_vector_spacing << 5), "function at exception vector 5 too large") + .vector_6 _ebase_address + 0x200 + ((_vector_spacing << 5) * 6) : + { + KEEP(*(.vector_6)) + } > exception_mem + ASSERT (_vector_spacing == 0 || SIZEOF(.vector_6) <= (_vector_spacing << 5), "function at exception vector 6 too large") + .vector_7 _ebase_address + 0x200 + ((_vector_spacing << 5) * 7) : + { + KEEP(*(.vector_7)) + } > exception_mem + ASSERT (_vector_spacing == 0 || SIZEOF(.vector_7) <= (_vector_spacing << 5), "function at exception vector 7 too large") + .vector_8 _ebase_address + 0x200 + ((_vector_spacing << 5) * 8) : + { + KEEP(*(.vector_8)) + } > exception_mem + ASSERT (_vector_spacing == 0 || SIZEOF(.vector_8) <= (_vector_spacing << 5), "function at exception vector 8 too large") + .vector_9 _ebase_address + 0x200 + ((_vector_spacing << 5) * 9) : + { + KEEP(*(.vector_9)) + } > exception_mem + ASSERT (_vector_spacing == 0 || SIZEOF(.vector_9) <= (_vector_spacing << 5), "function at exception vector 9 too large") + .vector_10 _ebase_address + 0x200 + ((_vector_spacing << 5) * 10) : + { + KEEP(*(.vector_10)) + } > exception_mem + ASSERT (_vector_spacing == 0 || SIZEOF(.vector_10) <= (_vector_spacing << 5), "function at exception vector 10 too large") + .vector_11 _ebase_address + 0x200 + ((_vector_spacing << 5) * 11) : + { + KEEP(*(.vector_11)) + } > exception_mem + ASSERT (_vector_spacing == 0 || SIZEOF(.vector_11) <= (_vector_spacing << 5), "function at exception vector 11 too large") + .vector_12 _ebase_address + 0x200 + ((_vector_spacing << 5) * 12) : + { + KEEP(*(.vector_12)) + } > exception_mem + ASSERT (_vector_spacing == 0 || SIZEOF(.vector_12) <= (_vector_spacing << 5), "function at exception vector 12 too large") + .vector_13 _ebase_address + 0x200 + ((_vector_spacing << 5) * 13) : + { + KEEP(*(.vector_13)) + } > exception_mem + ASSERT (_vector_spacing == 0 || SIZEOF(.vector_13) <= (_vector_spacing << 5), "function at exception vector 13 too large") + .vector_14 _ebase_address + 0x200 + ((_vector_spacing << 5) * 14) : + { + KEEP(*(.vector_14)) + } > exception_mem + ASSERT (_vector_spacing == 0 || SIZEOF(.vector_14) <= (_vector_spacing << 5), "function at exception vector 14 too large") + .vector_15 _ebase_address + 0x200 + ((_vector_spacing << 5) * 15) : + { + KEEP(*(.vector_15)) + } > exception_mem + ASSERT (_vector_spacing == 0 || SIZEOF(.vector_15) <= (_vector_spacing << 5), "function at exception vector 15 too large") + .vector_16 _ebase_address + 0x200 + ((_vector_spacing << 5) * 16) : + { + KEEP(*(.vector_16)) + } > exception_mem + ASSERT (_vector_spacing == 0 || SIZEOF(.vector_16) <= (_vector_spacing << 5), "function at exception vector 16 too large") + .vector_17 _ebase_address + 0x200 + ((_vector_spacing << 5) * 17) : + { + KEEP(*(.vector_17)) + } > exception_mem + ASSERT (_vector_spacing == 0 || SIZEOF(.vector_17) <= (_vector_spacing << 5), "function at exception vector 17 too large") + .vector_18 _ebase_address + 0x200 + ((_vector_spacing << 5) * 18) : + { + KEEP(*(.vector_18)) + } > exception_mem + ASSERT (_vector_spacing == 0 || SIZEOF(.vector_18) <= (_vector_spacing << 5), "function at exception vector 18 too large") + .vector_19 _ebase_address + 0x200 + ((_vector_spacing << 5) * 19) : + { + KEEP(*(.vector_19)) + } > exception_mem + ASSERT (_vector_spacing == 0 || SIZEOF(.vector_19) <= (_vector_spacing << 5), "function at exception vector 19 too large") + .vector_20 _ebase_address + 0x200 + ((_vector_spacing << 5) * 20) : + { + KEEP(*(.vector_20)) + } > exception_mem + ASSERT (_vector_spacing == 0 || SIZEOF(.vector_20) <= (_vector_spacing << 5), "function at exception vector 20 too large") + .vector_21 _ebase_address + 0x200 + ((_vector_spacing << 5) * 21) : + { + KEEP(*(.vector_21)) + } > exception_mem + ASSERT (_vector_spacing == 0 || SIZEOF(.vector_21) <= (_vector_spacing << 5), "function at exception vector 21 too large") + .vector_22 _ebase_address + 0x200 + ((_vector_spacing << 5) * 22) : + { + KEEP(*(.vector_22)) + } > exception_mem + ASSERT (_vector_spacing == 0 || SIZEOF(.vector_22) <= (_vector_spacing << 5), "function at exception vector 22 too large") + .vector_23 _ebase_address + 0x200 + ((_vector_spacing << 5) * 23) : + { + KEEP(*(.vector_23)) + } > exception_mem + ASSERT (_vector_spacing == 0 || SIZEOF(.vector_23) <= (_vector_spacing << 5), "function at exception vector 23 too large") + .vector_24 _ebase_address + 0x200 + ((_vector_spacing << 5) * 24) : + { + KEEP(*(.vector_24)) + } > exception_mem + ASSERT (_vector_spacing == 0 || SIZEOF(.vector_24) <= (_vector_spacing << 5), "function at exception vector 24 too large") + .vector_25 _ebase_address + 0x200 + ((_vector_spacing << 5) * 25) : + { + KEEP(*(.vector_25)) + } > exception_mem + ASSERT (_vector_spacing == 0 || SIZEOF(.vector_25) <= (_vector_spacing << 5), "function at exception vector 25 too large") + .vector_26 _ebase_address + 0x200 + ((_vector_spacing << 5) * 26) : + { + KEEP(*(.vector_26)) + } > exception_mem + ASSERT (_vector_spacing == 0 || SIZEOF(.vector_26) <= (_vector_spacing << 5), "function at exception vector 26 too large") + .vector_27 _ebase_address + 0x200 + ((_vector_spacing << 5) * 27) : + { + KEEP(*(.vector_27)) + } > exception_mem + ASSERT (_vector_spacing == 0 || SIZEOF(.vector_27) <= (_vector_spacing << 5), "function at exception vector 27 too large") + .vector_28 _ebase_address + 0x200 + ((_vector_spacing << 5) * 28) : + { + KEEP(*(.vector_28)) + } > exception_mem + ASSERT (_vector_spacing == 0 || SIZEOF(.vector_28) <= (_vector_spacing << 5), "function at exception vector 28 too large") + .vector_29 _ebase_address + 0x200 + ((_vector_spacing << 5) * 29) : + { + KEEP(*(.vector_29)) + } > exception_mem + ASSERT (_vector_spacing == 0 || SIZEOF(.vector_29) <= (_vector_spacing << 5), "function at exception vector 29 too large") + .vector_30 _ebase_address + 0x200 + ((_vector_spacing << 5) * 30) : + { + KEEP(*(.vector_30)) + } > exception_mem + ASSERT (_vector_spacing == 0 || SIZEOF(.vector_30) <= (_vector_spacing << 5), "function at exception vector 30 too large") + .vector_31 _ebase_address + 0x200 + ((_vector_spacing << 5) * 31) : + { + KEEP(*(.vector_31)) + } > exception_mem + ASSERT (_vector_spacing == 0 || SIZEOF(.vector_31) <= (_vector_spacing << 5), "function at exception vector 31 too large") + .vector_32 _ebase_address + 0x200 + ((_vector_spacing << 5) * 32) : + { + KEEP(*(.vector_32)) + } > exception_mem + ASSERT (_vector_spacing == 0 || SIZEOF(.vector_32) <= (_vector_spacing << 5), "function at exception vector 32 too large") + .vector_33 _ebase_address + 0x200 + ((_vector_spacing << 5) * 33) : + { + KEEP(*(.vector_33)) + } > exception_mem + ASSERT (_vector_spacing == 0 || SIZEOF(.vector_33) <= (_vector_spacing << 5), "function at exception vector 33 too large") + .vector_34 _ebase_address + 0x200 + ((_vector_spacing << 5) * 34) : + { + KEEP(*(.vector_34)) + } > exception_mem + ASSERT (_vector_spacing == 0 || SIZEOF(.vector_34) <= (_vector_spacing << 5), "function at exception vector 34 too large") + .vector_35 _ebase_address + 0x200 + ((_vector_spacing << 5) * 35) : + { + KEEP(*(.vector_35)) + } > exception_mem + ASSERT (_vector_spacing == 0 || SIZEOF(.vector_35) <= (_vector_spacing << 5), "function at exception vector 35 too large") + .vector_36 _ebase_address + 0x200 + ((_vector_spacing << 5) * 36) : + { + KEEP(*(.vector_36)) + } > exception_mem + ASSERT (_vector_spacing == 0 || SIZEOF(.vector_36) <= (_vector_spacing << 5), "function at exception vector 36 too large") + .vector_37 _ebase_address + 0x200 + ((_vector_spacing << 5) * 37) : + { + KEEP(*(.vector_37)) + } > exception_mem + ASSERT (_vector_spacing == 0 || SIZEOF(.vector_37) <= (_vector_spacing << 5), "function at exception vector 37 too large") + .vector_38 _ebase_address + 0x200 + ((_vector_spacing << 5) * 38) : + { + KEEP(*(.vector_38)) + } > exception_mem + ASSERT (_vector_spacing == 0 || SIZEOF(.vector_38) <= (_vector_spacing << 5), "function at exception vector 38 too large") + .vector_39 _ebase_address + 0x200 + ((_vector_spacing << 5) * 39) : + { + KEEP(*(.vector_39)) + } > exception_mem + ASSERT (_vector_spacing == 0 || SIZEOF(.vector_39) <= (_vector_spacing << 5), "function at exception vector 39 too large") + .vector_40 _ebase_address + 0x200 + ((_vector_spacing << 5) * 40) : + { + KEEP(*(.vector_40)) + } > exception_mem + ASSERT (_vector_spacing == 0 || SIZEOF(.vector_40) <= (_vector_spacing << 5), "function at exception vector 40 too large") + .vector_41 _ebase_address + 0x200 + ((_vector_spacing << 5) * 41) : + { + KEEP(*(.vector_41)) + } > exception_mem + ASSERT (_vector_spacing == 0 || SIZEOF(.vector_41) <= (_vector_spacing << 5), "function at exception vector 41 too large") + .vector_42 _ebase_address + 0x200 + ((_vector_spacing << 5) * 42) : + { + KEEP(*(.vector_42)) + } > exception_mem + ASSERT (_vector_spacing == 0 || SIZEOF(.vector_42) <= (_vector_spacing << 5), "function at exception vector 42 too large") + .vector_43 _ebase_address + 0x200 + ((_vector_spacing << 5) * 43) : + { + KEEP(*(.vector_43)) + } > exception_mem + ASSERT (_vector_spacing == 0 || SIZEOF(.vector_43) <= (_vector_spacing << 5), "function at exception vector 43 too large") + .vector_44 _ebase_address + 0x200 + ((_vector_spacing << 5) * 44) : + { + KEEP(*(.vector_44)) + } > exception_mem + ASSERT (_vector_spacing == 0 || SIZEOF(.vector_44) <= (_vector_spacing << 5), "function at exception vector 44 too large") + .vector_45 _ebase_address + 0x200 + ((_vector_spacing << 5) * 45) : + { + KEEP(*(.vector_45)) + } > exception_mem + ASSERT (_vector_spacing == 0 || SIZEOF(.vector_45) <= (_vector_spacing << 5), "function at exception vector 45 too large") + .vector_46 _ebase_address + 0x200 + ((_vector_spacing << 5) * 46) : + { + KEEP(*(.vector_46)) + } > exception_mem + ASSERT (_vector_spacing == 0 || SIZEOF(.vector_46) <= (_vector_spacing << 5), "function at exception vector 46 too large") + .vector_47 _ebase_address + 0x200 + ((_vector_spacing << 5) * 47) : + { + KEEP(*(.vector_47)) + } > exception_mem + ASSERT (_vector_spacing == 0 || SIZEOF(.vector_47) <= (_vector_spacing << 5), "function at exception vector 47 too large") + .vector_48 _ebase_address + 0x200 + ((_vector_spacing << 5) * 48) : + { + KEEP(*(.vector_48)) + } > exception_mem + ASSERT (_vector_spacing == 0 || SIZEOF(.vector_48) <= (_vector_spacing << 5), "function at exception vector 48 too large") + .vector_49 _ebase_address + 0x200 + ((_vector_spacing << 5) * 49) : + { + KEEP(*(.vector_49)) + } > exception_mem + ASSERT (_vector_spacing == 0 || SIZEOF(.vector_49) <= (_vector_spacing << 5), "function at exception vector 49 too large") + .vector_50 _ebase_address + 0x200 + ((_vector_spacing << 5) * 50) : + { + KEEP(*(.vector_50)) + } > exception_mem + ASSERT (_vector_spacing == 0 || SIZEOF(.vector_50) <= (_vector_spacing << 5), "function at exception vector 50 too large") + .vector_51 _ebase_address + 0x200 + ((_vector_spacing << 5) * 51) : + { + KEEP(*(.vector_51)) + } > exception_mem + ASSERT (_vector_spacing == 0 || SIZEOF(.vector_51) <= (_vector_spacing << 5), "function at exception vector 51 too large") + .vector_52 _ebase_address + 0x200 + ((_vector_spacing << 5) * 52) : + { + KEEP(*(.vector_52)) + } > exception_mem + ASSERT (_vector_spacing == 0 || SIZEOF(.vector_52) <= (_vector_spacing << 5), "function at exception vector 52 too large") + .vector_53 _ebase_address + 0x200 + ((_vector_spacing << 5) * 53) : + { + KEEP(*(.vector_53)) + } > exception_mem + ASSERT (_vector_spacing == 0 || SIZEOF(.vector_53) <= (_vector_spacing << 5), "function at exception vector 53 too large") + .vector_54 _ebase_address + 0x200 + ((_vector_spacing << 5) * 54) : + { + KEEP(*(.vector_54)) + } > exception_mem + ASSERT (_vector_spacing == 0 || SIZEOF(.vector_54) <= (_vector_spacing << 5), "function at exception vector 54 too large") + .vector_55 _ebase_address + 0x200 + ((_vector_spacing << 5) * 55) : + { + KEEP(*(.vector_55)) + } > exception_mem + ASSERT (_vector_spacing == 0 || SIZEOF(.vector_55) <= (_vector_spacing << 5), "function at exception vector 55 too large") + .vector_56 _ebase_address + 0x200 + ((_vector_spacing << 5) * 56) : + { + KEEP(*(.vector_56)) + } > exception_mem + ASSERT (_vector_spacing == 0 || SIZEOF(.vector_56) <= (_vector_spacing << 5), "function at exception vector 56 too large") + .vector_57 _ebase_address + 0x200 + ((_vector_spacing << 5) * 57) : + { + KEEP(*(.vector_57)) + } > exception_mem + ASSERT (_vector_spacing == 0 || SIZEOF(.vector_57) <= (_vector_spacing << 5), "function at exception vector 57 too large") + .vector_58 _ebase_address + 0x200 + ((_vector_spacing << 5) * 58) : + { + KEEP(*(.vector_58)) + } > exception_mem + ASSERT (_vector_spacing == 0 || SIZEOF(.vector_58) <= (_vector_spacing << 5), "function at exception vector 58 too large") + .vector_59 _ebase_address + 0x200 + ((_vector_spacing << 5) * 59) : + { + KEEP(*(.vector_59)) + } > exception_mem + ASSERT (_vector_spacing == 0 || SIZEOF(.vector_59) <= (_vector_spacing << 5), "function at exception vector 59 too large") + .vector_60 _ebase_address + 0x200 + ((_vector_spacing << 5) * 60) : + { + KEEP(*(.vector_60)) + } > exception_mem + ASSERT (_vector_spacing == 0 || SIZEOF(.vector_60) <= (_vector_spacing << 5), "function at exception vector 60 too large") + .vector_61 _ebase_address + 0x200 + ((_vector_spacing << 5) * 61) : + { + KEEP(*(.vector_61)) + } > exception_mem + ASSERT (_vector_spacing == 0 || SIZEOF(.vector_61) <= (_vector_spacing << 5), "function at exception vector 61 too large") + .vector_62 _ebase_address + 0x200 + ((_vector_spacing << 5) * 62) : + { + KEEP(*(.vector_62)) + } > exception_mem + ASSERT (_vector_spacing == 0 || SIZEOF(.vector_62) <= (_vector_spacing << 5), "function at exception vector 62 too large") + .vector_63 _ebase_address + 0x200 + ((_vector_spacing << 5) * 63) : + { + KEEP(*(.vector_63)) + } > exception_mem + ASSERT (_vector_spacing == 0 || SIZEOF(.vector_63) <= (_vector_spacing << 5), "function at exception vector 63 too large") + + /* The startup code is in the .reset.startup section. + * Keep this here for backwards compatibility with older + * C32 v1.xx releases. + */ + .startup ORIGIN(kseg0_boot_mem) : + { + KEEP(*(.startup)) + } > kseg0_boot_mem + + /* Code Sections - Note that input sections *(.text) and *(.text.*) + * are not mapped here. The best-fit allocator locates them, + * so that .text may flow around absolute sections as needed. + */ + .text : + { + *(.stub .gnu.linkonce.t.*) + KEEP (*(.text.*personality*)) + *(.mips16.fn.*) + *(.mips16.call.*) + *(.gnu.warning) + . = ALIGN(4) ; + } >kseg0_program_mem + /* Global-namespace object initialization */ + .init : + { + KEEP (*crti.o(.init)) + KEEP (*crtbegin.o(.init)) + KEEP (*(EXCLUDE_FILE (*crtend.o *crtend?.o *crtn.o ).init)) + KEEP (*crtend.o(.init)) + KEEP (*crtn.o(.init)) + . = ALIGN(4) ; + } >kseg0_program_mem + .fini : + { + KEEP (*(.fini)) + . = ALIGN(4) ; + } >kseg0_program_mem + .preinit_array : + { + PROVIDE_HIDDEN (__preinit_array_start = .); + KEEP (*(.preinit_array)) + PROVIDE_HIDDEN (__preinit_array_end = .); + . = ALIGN(4) ; + } >kseg0_program_mem + .init_array : + { + PROVIDE_HIDDEN (__init_array_start = .); + KEEP (*(SORT(.init_array.*))) + KEEP (*(.init_array)) + PROVIDE_HIDDEN (__init_array_end = .); + . = ALIGN(4) ; + } >kseg0_program_mem + .fini_array : + { + PROVIDE_HIDDEN (__fini_array_start = .); + KEEP (*(SORT(.fini_array.*))) + KEEP (*(.fini_array)) + PROVIDE_HIDDEN (__fini_array_end = .); + . = ALIGN(4) ; + } >kseg0_program_mem + .ctors : + { + /* XC32 uses crtbegin.o to find the start of + the constructors, so we make sure it is + first. Because this is a wildcard, it + doesn't matter if the user does not + actually link against crtbegin.o; the + linker won't look for a file to match a + wildcard. The wildcard also means that it + doesn't matter which directory crtbegin.o + is in. */ + KEEP (*crtbegin.o(.ctors)) + KEEP (*crtbegin?.o(.ctors)) + /* We don't want to include the .ctor section from + the crtend.o file until after the sorted ctors. + The .ctor section from the crtend file contains the + end of ctors marker and it must be last */ + KEEP (*(EXCLUDE_FILE (*crtend.o *crtend?.o ) .ctors)) + KEEP (*(SORT(.ctors.*))) + KEEP (*(.ctors)) + . = ALIGN(4) ; + } >kseg0_program_mem + .dtors : + { + KEEP (*crtbegin.o(.dtors)) + KEEP (*crtbegin?.o(.dtors)) + KEEP (*(EXCLUDE_FILE (*crtend.o *crtend?.o ) .dtors)) + KEEP (*(SORT(.dtors.*))) + KEEP (*(.dtors)) + . = ALIGN(4) ; + } >kseg0_program_mem + /* Read-only sections */ + .rodata : + { + *( .gnu.linkonce.r.*) + *(.rodata1) + . = ALIGN(4) ; + } >kseg0_program_mem + /* + * Small initialized constant global and static data can be placed in the + * .sdata2 section. This is different from .sdata, which contains small + * initialized non-constant global and static data. + */ + .sdata2 ALIGN(4) : + { + *(.sdata2 .sdata2.* .gnu.linkonce.s2.*) + . = ALIGN(4) ; + } >kseg0_program_mem + /* + * Uninitialized constant global and static data (i.e., variables which will + * always be zero). Again, this is different from .sbss, which contains + * small non-initialized, non-constant global and static data. + */ + .sbss2 ALIGN(4) : + { + *(.sbss2 .sbss2.* .gnu.linkonce.sb2.*) + . = ALIGN(4) ; + } >kseg0_program_mem + .eh_frame_hdr : + { + *(.eh_frame_hdr) + } >kseg0_program_mem + . = ALIGN(4) ; + .eh_frame : ONLY_IF_RO + { + KEEP (*(.eh_frame)) + } >kseg0_program_mem + . = ALIGN(4) ; + .gcc_except_table : ONLY_IF_RO + { + *(.gcc_except_table .gcc_except_table.*) + } >kseg0_program_mem + . = ALIGN(4) ; + .dbg_data (NOLOAD) : + { + . += (DEFINED (_DEBUGGER) ? 0x200 : 0x0); + } >kseg1_data_mem + .jcr : + { + KEEP (*(.jcr)) + . = ALIGN(4) ; + } >kseg1_data_mem + .eh_frame : ONLY_IF_RW + { + KEEP (*(.eh_frame)) + } >kseg1_data_mem + . = ALIGN(4) ; + .gcc_except_table : ONLY_IF_RW + { + *(.gcc_except_table .gcc_except_table.*) + } >kseg1_data_mem + . = ALIGN(4) ; + /* Persistent data - Use the new C 'persistent' attribute instead. */ + .persist : + { + _persist_begin = .; + *(.persist .persist.*) + *(.pbss .pbss.*) + . = ALIGN(4) ; + _persist_end = .; + } >kseg1_data_mem + /* + * Note that input sections named .data* are not mapped here. + * The best-fit allocator locates them, so that they may flow + * around absolute sections as needed. + */ + .data : + { + *( .gnu.linkonce.d.*) + SORT(CONSTRUCTORS) + *(.data1) + . = ALIGN(4) ; + } >kseg1_data_mem + . = .; + _gp = ALIGN(16) + 0x7ff0; + .got ALIGN(4) : + { + *(.got.plt) *(.got) + . = ALIGN(4) ; + } >kseg1_data_mem /* AT>kseg0_program_mem */ + /* + * Note that 'small' data sections are still mapped in the linker + * script. This ensures that they are grouped together for + * gp-relative addressing. Absolute sections are allocated after + * the 'small' data sections so small data cannot flow around them. + */ + /* + * We want the small data sections together, so single-instruction offsets + * can access them all, and initialized data all before uninitialized, so + * we can shorten the on-disk segment size. + */ + .sdata ALIGN(4) : + { + _sdata_begin = . ; + *(.sdata .sdata.* .gnu.linkonce.s.*) + . = ALIGN(4) ; + _sdata_end = . ; + } >kseg1_data_mem + .lit8 : + { + *(.lit8) + } >kseg1_data_mem + .lit4 : + { + *(.lit4) + } >kseg1_data_mem + . = ALIGN (4) ; + _data_end = . ; + _bss_begin = . ; + .sbss ALIGN(4) : + { + _sbss_begin = . ; + *(.dynsbss) + *(.sbss .sbss.* .gnu.linkonce.sb.*) + *(.scommon) + _sbss_end = . ; + . = ALIGN(4) ; + } >kseg1_data_mem + /* + * Align here to ensure that the .bss section occupies space up to + * _end. Align after .bss to ensure correct alignment even if the + * .bss section disappears because there are no input sections. + * + * Note that input sections named .bss* are no longer mapped here. + * The best-fit allocator locates them, so that they may flow + * around absolute sections as needed. + * + */ + .bss : + { + *(.dynbss) + *(COMMON) + /* Align here to ensure that the .bss section occupies space up to + _end. Align after .bss to ensure correct alignment even if the + .bss section disappears because there are no input sections. */ + . = ALIGN(. != 0 ? 4 : 1); + } >kseg1_data_mem + . = ALIGN(4) ; + _end = . ; + _bss_end = . ; + /* + * The heap and stack are best-fit allocated by the linker after other + * data and bss sections have been allocated. + */ + /* + * RAM functions go at the end of our stack and heap allocation. + * Alignment of 2K required by the boundary register (BMXDKPBA). + * + * RAM functions are now allocated by the linker. The linker generates + * _ramfunc_begin and _bmxdkpba_address symbols depending on the + * location of RAM functions. + */ + _bmxdudba_address = LENGTH(kseg1_data_mem) ; + _bmxdupba_address = LENGTH(kseg1_data_mem) ; + /* The .pdr section belongs in the absolute section */ + /DISCARD/ : { *(.pdr) } + .gptab.sdata : { *(.gptab.data) *(.gptab.sdata) } + .gptab.sbss : { *(.gptab.bss) *(.gptab.sbss) } + .mdebug.abi32 : { KEEP(*(.mdebug.abi32)) } + .mdebug.abiN32 : { KEEP(*(.mdebug.abiN32)) } + .mdebug.abi64 : { KEEP(*(.mdebug.abi64)) } + .mdebug.abiO64 : { KEEP(*(.mdebug.abiO64)) } + .mdebug.eabi32 : { KEEP(*(.mdebug.eabi32)) } + .mdebug.eabi64 : { KEEP(*(.mdebug.eabi64)) } + .gcc_compiled_long32 : { KEEP(*(.gcc_compiled_long32)) } + .gcc_compiled_long64 : { KEEP(*(.gcc_compiled_long64)) } + /* Stabs debugging sections. */ + .stab 0 : { *(.stab) } + .stabstr 0 : { *(.stabstr) } + .stab.excl 0 : { *(.stab.excl) } + .stab.exclstr 0 : { *(.stab.exclstr) } + .stab.index 0 : { *(.stab.index) } + .stab.indexstr 0 : { *(.stab.indexstr) } + .comment 0 : { *(.comment) } + /* DWARF debug sections used by MPLAB X for source-level debugging. + Symbols in the DWARF debugging sections are relative to the beginning + of the section so we begin them at 0. */ + /* DWARF 1 */ + .debug 0 : { *(.debug) } + .line 0 : { *(.line) } + /* GNU DWARF 1 extensions */ + .debug_srcinfo 0 : { *(.debug_srcinfo) } + .debug_sfnames 0 : { *(.debug_sfnames) } + /* DWARF 1.1 and DWARF 2 */ + .debug_aranges 0 : { *(.debug_aranges) } + .debug_pubnames 0 : { *(.debug_pubnames) } + /* DWARF 2 */ + .debug_info 0 : { *(.debug_info .gnu.linkonce.wi.*) } + .debug_abbrev 0 : { *(.debug_abbrev) } + .debug_line 0 : { *(.debug_line) } + .debug_frame 0 : { *(.debug_frame) } + .debug_str 0 : { *(.debug_str) } + .debug_loc 0 : { *(.debug_loc) } + .debug_macinfo 0 : { *(.debug_macinfo) } + /* SGI/MIPS DWARF 2 extensions */ + .debug_weaknames 0 : { *(.debug_weaknames) } + .debug_funcnames 0 : { *(.debug_funcnames) } + .debug_typenames 0 : { *(.debug_typenames) } + .debug_varnames 0 : { *(.debug_varnames) } + .debug_pubtypes 0 : { *(.debug_pubtypes) } + .debug_ranges 0 : { *(.debug_ranges) } + /DISCARD/ : { *(.rel.dyn) } + .gnu.attributes 0 : { KEEP (*(.gnu.attributes)) } + /DISCARD/ : { *(.note.GNU-stack) } + /DISCARD/ : { *(.note.GNU-stack) *(.gnu_debuglink) *(.gnu.lto_*) *(.discard) } +} + diff --git a/firmware/src/system_config/pic32mx695f512h/configuration.xml b/firmware/src/system_config/pic32mx695f512h/configuration.xml new file mode 100644 index 0000000..de96ab1 --- /dev/null +++ b/firmware/src/system_config/pic32mx695f512h/configuration.xml @@ -0,0 +1,210 @@ + +
+ uint32_t sysClockHz;
+
+ sysClockHz = SYS_CLK_SystemFrequencyGet ( );
+
+
+ Remarks:
+ */
+
+inline uint32_t SYS_CLK_SystemFrequencyGet ( void )
+{
+ return SYS_CLK_FREQ;
+}
+
+//******************************************************************************
+/* Function:
+ inline uint32_t SYS_CLK_PeripheralFrequencyGet ( CLK_BUSES_PERIPHERAL peripheralBus )
+
+ Summary:
+ Gets the selected clock peripheral bus frequency in Hertz.
+
+ Description:
+ This function gets the selected peripheral bus clock frequency in Hertz.
+
+ Precondition:
+ None.
+
+ Parameters:
+ peripheralBus - Reference clock bus selection. One of the possible value from
+ CLK_BUSES_PERIPHERAL enum. For devices that do not have multiple
+ clock channels for Reference clock, CLK_BUS_PERIPHERAL_1 should be
+ the selection.
+
+ Returns:
+ Clock frequency in Hertz.
+
+ Example:
+
+ unsigned long peripheralClockHz;
+
+ peripheralClockHz = SYS_CLK_PeripheralFrequencyGet ( CLK_BUS_PERIPHERAL_5 );
+
+
+ Remarks:
+ Most of the devices doesn't have multiple Peripheral clock buses. In that case,
+ pass CLK_USB_PERIPHERAL_1 as the bus number.
+ */
+
+inline uint32_t SYS_CLK_PeripheralFrequencyGet ( CLK_BUSES_PERIPHERAL peripheralBus )
+{
+ return SYS_CLK_BUS_PERIPHERAL_1;
+}
+
+
+//******************************************************************************
+/* Function:
+ inline uint32_t SYS_CLK_ReferenceClockFrequencyGet ( CLK_BUSES_REFERENCE referenceBus )
+
+ Summary:
+ Gets the selected Reference clock bus frequency in Hertz.
+
+ Description:
+ This function gets frequency of the selected Reference clock bus in Hertz.
+
+ Precondition:
+ None.
+
+ Parameters:
+ peripheralBus - Reference clock bus selection. One of the possible value from
+ CLK_BUSES_REFERENCE enum. For devices that do not have multiple
+ clock channels for Reference clock, CLK_BUS_REFERENCE_1 should be
+ the selection.
+
+ Returns:
+ Clock frequency in Hz.
+
+ Example:
+
+ unsigned long sysClockOutputHz;
+
+ sysClockOutputHz = SYS_CLK_ReferenceClockFrequencyGet ( CLK_BUS_REFERENCE_3 );
+
+
+ Remarks:
+ */
+
+inline uint32_t SYS_CLK_ReferenceClockFrequencyGet ( CLK_BUSES_REFERENCE referenceBus )
+{
+ return 0;
+}
\ No newline at end of file
diff --git a/firmware/src/system_config/pic32mx695f512h/framework/system/clk/sys_clk_static.h b/firmware/src/system_config/pic32mx695f512h/framework/system/clk/sys_clk_static.h
new file mode 100644
index 0000000..23a0cf5
--- /dev/null
+++ b/firmware/src/system_config/pic32mx695f512h/framework/system/clk/sys_clk_static.h
@@ -0,0 +1,65 @@
+/*******************************************************************************
+ SYS CLK Static Interface Declarations for Clock System Service
+
+ Company:
+ Microchip Technology Inc.
+
+ File Name:
+ sys_clk_static.h
+
+ Summary:
+ SYS CLK interface declarations for the static system service.
+
+ Description:
+ The Clock System Service provides a simple interface to manage the oscillators
+ on Microchip microcontrollers. This file defines the interface
+ Declarations for the SYS CLK system service.
+
+ Remarks:
+ Static interfaces incorporate all system clock configuration settings as
+ determined by the user via the Microchip Harmony Configurator GUI. It provides
+ static version of the routines, eliminating the need for an object ID or
+ object handle.
+
+ Static single-open interfaces also eliminate the need for the open handle.
+*******************************************************************************/
+
+//DOM-IGNORE-BEGIN
+/*******************************************************************************
+Copyright (c) 2014 released Microchip Technology Inc. All rights reserved.
+
+Microchip licenses to you the right to use, modify, copy and distribute
+Software only when embedded on a Microchip microcontroller or digital signal
+controller that is integrated into your product or third party product
+(pursuant to the sublicense terms in the accompanying license agreement).
+
+You should refer to the license agreement accompanying this Software for
+additional information regarding your rights and obligations.
+
+SOFTWARE AND DOCUMENTATION ARE PROVIDED AS IS WITHOUT WARRANTY OF ANY KIND,
+EITHER EXPRESS OR IMPLIED, INCLUDING WITHOUT LIMITATION, ANY WARRANTY OF
+MERCHANTABILITY, TITLE, NON-INFRINGEMENT AND FITNESS FOR A PARTICULAR PURPOSE.
+IN NO EVENT SHALL MICROCHIP OR ITS LICENSORS BE LIABLE OR OBLIGATED UNDER
+CONTRACT, NEGLIGENCE, STRICT LIABILITY, CONTRIBUTION, BREACH OF WARRANTY, OR
+OTHER LEGAL EQUITABLE THEORY ANY DIRECT OR INDIRECT DAMAGES OR EXPENSES
+INCLUDING BUT NOT LIMITED TO ANY INCIDENTAL, SPECIAL, INDIRECT, PUNITIVE OR
+CONSEQUENTIAL DAMAGES, LOST PROFITS OR LOST DATA, COST OF PROCUREMENT OF
+SUBSTITUTE GOODS, TECHNOLOGY, SERVICES, OR ANY CLAIMS BY THIRD PARTIES
+(INCLUDING BUT NOT LIMITED TO ANY DEFENSE THEREOF), OR OTHER SIMILAR COSTS.
+*******************************************************************************/
+//DOM-IGNORE-END
+
+#ifndef _SYS_CLK_STATIC_H
+#define _SYS_CLK_STATIC_H
+
+// *****************************************************************************
+// *****************************************************************************
+// Section: SYS CLK Module Initialization Routine (Static Version)
+// *****************************************************************************
+// *****************************************************************************
+
+#endif // #ifndef _SYS_CLK_STATIC_H
+
+/*******************************************************************************
+ End of File
+*/
diff --git a/firmware/src/system_config/pic32mx695f512h/framework/system/ports/src/sys_ports_static.c b/firmware/src/system_config/pic32mx695f512h/framework/system/ports/src/sys_ports_static.c
new file mode 100644
index 0000000..d84b837
--- /dev/null
+++ b/firmware/src/system_config/pic32mx695f512h/framework/system/ports/src/sys_ports_static.c
@@ -0,0 +1,81 @@
+/*******************************************************************************
+ SYS PORTS Static Functions for PORTS System Service
+
+ Company:
+ Microchip Technology Inc.
+
+ File Name:
+ sys_ports_static.c
+
+ Summary:
+ SYS PORTS static function implementations for the Ports System Service.
+
+ Description:
+ The Ports System Service provides a simple interface to manage the ports
+ on Microchip microcontrollers. This file defines the static implementation for the
+ Ports System Service.
+
+ Remarks:
+ Static functions incorporate all system ports configuration settings as
+ determined by the user via the Microchip Harmony Configurator GUI. It provides
+ static version of the routines, eliminating the need for an object ID or
+ object handle.
+
+*******************************************************************************/
+
+//DOM-IGNORE-BEGIN
+/*******************************************************************************
+Copyright (c) 2013 released Microchip Technology Inc. All rights reserved.
+
+Microchip licenses to you the right to use, modify, copy and distribute
+Software only when embedded on a Microchip microcontroller or digital signal
+controller that is integrated into your product or third party product
+(pursuant to the sublicense terms in the accompanying license agreement).
+
+You should refer to the license agreement accompanying this Software for
+additional information regarding your rights and obligations.
+
+SOFTWARE AND DOCUMENTATION ARE PROVIDED AS IS WITHOUT WARRANTY OF ANY KIND,
+EITHER EXPRESS OR IMPLIED, INCLUDING WITHOUT LIMITATION, ANY WARRANTY OF
+MERCHANTABILITY, TITLE, NON-INFRINGEMENT AND FITNESS FOR A PARTICULAR PURPOSE.
+IN NO EVENT SHALL MICROCHIP OR ITS LICENSORS BE LIABLE OR OBLIGATED UNDER
+CONTRACT, NEGLIGENCE, STRICT LIABILITY, CONTRIBUTION, BREACH OF WARRANTY, OR
+OTHER LEGAL EQUITABLE THEORY ANY DIRECT OR INDIRECT DAMAGES OR EXPENSES
+INCLUDING BUT NOT LIMITED TO ANY INCIDENTAL, SPECIAL, INDIRECT, PUNITIVE OR
+CONSEQUENTIAL DAMAGES, LOST PROFITS OR LOST DATA, COST OF PROCUREMENT OF
+SUBSTITUTE GOODS, TECHNOLOGY, SERVICES, OR ANY CLAIMS BY THIRD PARTIES
+(INCLUDING BUT NOT LIMITED TO ANY DEFENSE THEREOF), OR OTHER SIMILAR COSTS.
+*******************************************************************************/
+//DOM-IGNORE-END
+
+#include "system_config.h"
+#include "peripheral/ports/plib_ports.h"
+#include "peripheral/int/plib_int.h"
+
+
+void SYS_PORTS_Initialize(void)
+{
+ /* AN and CN Pins Initialization */
+ PLIB_PORTS_AnPinsModeSelect(PORTS_ID_0, SYS_PORT_AD1PCFG, PORTS_PIN_MODE_DIGITAL);
+ PLIB_PORTS_CnPinsPullUpEnable(PORTS_ID_0, SYS_PORT_CNPUE);
+ PLIB_PORTS_CnPinsEnable(PORTS_ID_0, SYS_PORT_CNEN);
+ PLIB_PORTS_ChangeNoticeEnable(PORTS_ID_0);
+
+
+
+ /* PORT B Initialization */
+ PLIB_PORTS_OpenDrainEnable(PORTS_ID_0, PORT_CHANNEL_B, SYS_PORT_B_ODC);
+ PLIB_PORTS_Write( PORTS_ID_0, PORT_CHANNEL_B, SYS_PORT_B_LAT);
+ PLIB_PORTS_DirectionOutputSet( PORTS_ID_0, PORT_CHANNEL_B, SYS_PORT_B_TRIS ^ 0xFFFF);
+
+ /* PORT E Initialization */
+ PLIB_PORTS_OpenDrainEnable(PORTS_ID_0, PORT_CHANNEL_E, SYS_PORT_E_ODC);
+ PLIB_PORTS_Write( PORTS_ID_0, PORT_CHANNEL_E, SYS_PORT_E_LAT);
+ PLIB_PORTS_DirectionOutputSet( PORTS_ID_0, PORT_CHANNEL_E, SYS_PORT_E_TRIS ^ 0xFFFF);
+
+}
+
+
+/*******************************************************************************
+ End of File
+*/
diff --git a/firmware/src/system_config/pic32mx695f512h/gfx_hgc_definitions.c b/firmware/src/system_config/pic32mx695f512h/gfx_hgc_definitions.c
new file mode 100644
index 0000000..e3140af
--- /dev/null
+++ b/firmware/src/system_config/pic32mx695f512h/gfx_hgc_definitions.c
@@ -0,0 +1,248 @@
+/*******************************************************************************
+ MPLAB Harmony Graphics Composer Generated Implementation File
+
+ File Name:
+ gfx_hgc_definitions.c
+
+ Summary:
+ Build-time generated implementation from the MPLAB Harmony
+ Graphics Composer.
+
+ Description:
+ Build-time generated implementation from the MPLAB Harmony
+ Graphics Composer.
+
+ Created with MPLAB Harmony Version 1.06
+*******************************************************************************/
+// DOM-IGNORE-BEGIN
+/*******************************************************************************
+Copyright (c) 2013-2014 released Microchip Technology Inc. All rights reserved.
+
+Microchip licenses to you the right to use, modify, copy and distribute
+Software only when embedded on a Microchip microcontroller or digital signal
+controller that is integrated into your product or third party product
+(pursuant to the sublicense terms in the accompanying license agreement).
+
+You should refer to the license agreement accompanying this Software for
+additional information regarding your rights and obligations.
+
+SOFTWARE AND DOCUMENTATION ARE PROVIDED AS IS WITHOUT WARRANTY OF ANY KIND,
+EITHER EXPRESS OR IMPLIED, INCLUDING WITHOUT LIMITATION, ANY WARRANTY OF
+MERCHANTABILITY, TITLE, NON-INFRINGEMENT AND FITNESS FOR A PARTICULAR PURPOSE.
+IN NO EVENT SHALL MICROCHIP OR ITS LICENSORS BE LIABLE OR OBLIGATED UNDER
+CONTRACT, NEGLIGENCE, STRICT LIABILITY, CONTRIBUTION, BREACH OF WARRANTY, OR
+OTHER LEGAL EQUITABLE THEORY ANY DIRECT OR INDIRECT DAMAGES OR EXPENSES
+INCLUDING BUT NOT LIMITED TO ANY INCIDENTAL, SPECIAL, INDIRECT, PUNITIVE OR
+CONSEQUENTIAL DAMAGES, LOST PROFITS OR LOST DATA, COST OF PROCUREMENT OF
+SUBSTITUTE GOODS, TECHNOLOGY, SERVICES, OR ANY CLAIMS BY THIRD PARTIES
+(INCLUDING BUT NOT LIMITED TO ANY DEFENSE THEREOF), OR OTHER SIMILAR COSTS.
+*******************************************************************************/
+// DOM-IGNORE-END
+
+#include "gfx_hgc_definitions.h"
+
+/*** Generated Asset References ***/
+/*** Generated ASCII Text Labels ***/
+/*** HGC Object Global ***/
+HGC_OBJECTS hgcObj;
+static HGC_STATES hgcState;
+
+/******************************************************************************
+ Function:
+ HGC_SCREEN_STATES GFX_HGC_GetScreenState ( void )
+
+ Remarks:
+ This function returns the screen state
+ */
+HGC_SCREEN_STATES GFX_HGC_GetScreenState ( void )
+{
+ return hgcObj.screenState;
+}
+
+
+/******************************************************************************
+ Function:
+ void GFX_HGC_SetScreenState ( HGC_SCREEN_STATES newState )
+
+ Remarks:
+ This function sets the screen state machine to a new state
+ */
+void GFX_HGC_SetScreenState ( HGC_SCREEN_STATES newState )
+{
+ hgcObj.prevRefreshState = hgcObj.screenState;
+ hgcObj.screenState = newState;
+}
+
+
+/******************************************************************************
+ Function:
+ void GFX_HGC_Setup ( void )
+
+ Summary:
+ This function sets up the GOL message callback and draw callbacks.
+ */
+void GFX_HGC_Setup ( void )
+{
+}
+
+/******************************************************************************
+ Function:
+ void GFX_HGC_Tasks (SYS_MODULE_OBJ gfxObject);
+
+ Summary:
+ This function is called in SYS_Tasks. The intent wait until the GFX library
+ is initialized before supplying items to draw
+*/
+void GFX_HGC_Tasks (SYS_MODULE_OBJ gfxObject)
+{
+ switch ( hgcState )
+ {
+ case HGC_STATE_INIT:
+ if (GFX_Status(gfxObject)==SYS_STATUS_READY)
+ {
+ GFX_HGC_Setup();
+ hgcState = HGC_STATE_RUNNING;
+ }
+ break;
+
+ case HGC_STATE_RUNNING:
+ //Drive screen state machine
+ GFX_HGC_DrawScreenTask();
+ break;
+
+ default:
+ break;
+ }
+}
+
+/******************************************************************************
+ Function:
+ void GFX_HGC_DrawScreenTask( void )
+
+ Remarks:
+ Task loop to drive the HGC generated screen state machine for HGC design
+ that has primitives only
+ */
+void GFX_HGC_DrawScreenTask( void )
+{
+ switch (hgcObj.screenState)
+ {
+ case HGC_SCREEN_STATE_INIT:
+ //Draw the primary screen as selected in the Composer
+ GFX_HGC_SetScreenState(HGC_SCREEN_STATE_SETUP_SCREEN_Screen1);
+ break;
+ case HGC_SCREEN_STATE_SETUP_SCREEN_Screen1:
+ GFX_HGC_SetupScreen(Screen1);
+
+ GFX_HGC_SetScreenState(HGC_SCREEN_STATE_PRE_DRAW_PRIMITIVE_SCREEN_Screen1);
+ break;
+ case HGC_SCREEN_STATE_PRE_DRAW_PRIMITIVE_SCREEN_Screen1:
+ GFX_HGC_SetScreenState(HGC_SCREEN_STATE_DRAW_PRIMITIVE_SCREEN_Screen1);
+ break;
+ case HGC_SCREEN_STATE_DRAW_PRIMITIVE_SCREEN_Screen1:
+ GFX_HGC_DrawScreen_Primitives(Screen1);
+ GFX_HGC_SetScreenState(HGC_SCREEN_STATE_POST_DRAW_PRIMITIVE_SCREEN_Screen1);
+ break;
+ case HGC_SCREEN_STATE_POST_DRAW_PRIMITIVE_SCREEN_Screen1:
+ GFX_HGC_SetScreenState(HGC_SCREEN_STATE_DISPLAY_SCREEN_Screen1);
+ break;
+ case HGC_SCREEN_STATE_DISPLAY_SCREEN_Screen1:
+ break;
+ default:
+ break;
+ }
+}
+
+/******************************************************************************
+ Function:
+ void GFX_HGC_SetupScreen( uint8_t screenId )
+
+ Remarks:
+ Clears current screen and starts a fresh screen with its background color
+ */
+void GFX_HGC_SetupScreen(uint8_t screenId)
+{
+ switch (screenId)
+ {
+ case Screen1:
+ GFX_ColorSet(GFX_INDEX_0, GFX_RGBConvert(0x00, 0x00, 0x00));
+ GFX_ScreenClear(GFX_INDEX_0);
+ break;
+ default:
+ break;
+ }
+}
+
+
+/******************************************************************************
+ Function:
+ bool GFX_HGC_ChangeScreen( uint8_t screenId )
+
+ Output:
+ Returns true if a screenId matches an existing screen identifier
+
+ Remarks:
+ Can be called to initiate GFX Library to draw a new screen
+ */
+bool GFX_HGC_ChangeScreen(uint8_t screenId)
+{
+ switch (screenId)
+ {
+ case Screen1:
+ GFX_HGC_SetScreenState(HGC_SCREEN_STATE_SETUP_SCREEN_Screen1);
+ break;
+ default:
+ return false;
+ }
+
+ return true; // release drawing control to GOL
+}
+
+/******************************************************************************
+ Function:
+ bool GFX_HGC_DrawScreen_Primitives( uint8_t screenId )
+
+ Output:
+ Returns true if a screenId matches an existing screen identifier
+
+ Remarks:
+ HGC-specified GFX Primitives are drawn here, grouped by screen.
+ GFX Primitives are drawn after GFX GOL Objects to make sure GFX GOL Objects
+ do not cover GFX Primitives
+ */
+bool GFX_HGC_DrawScreen_Primitives(uint8_t screenId)
+{
+ switch (screenId)
+ {
+ case Screen1:
+ break;
+ default:
+ return true;
+ }
+
+ return true; // release drawing control to GOL
+}
+
+
+/******************************************************************************
+ Function:
+ bool GFX_HGC_DrawItem(int itemId)
+
+ Output:
+ Returns true if a itemId matches an existing item identifier
+
+ Remarks:
+ Every item specified in every screen in HGC is listed in this function
+ */
+bool GFX_HGC_DrawItem(int itemId)
+{
+ switch(itemId)
+ {
+ default:
+ return false; // process by default
+ }
+
+ return true;
+}
+
+
diff --git a/firmware/src/system_config/pic32mx695f512h/gfx_hgc_definitions.h b/firmware/src/system_config/pic32mx695f512h/gfx_hgc_definitions.h
new file mode 100644
index 0000000..268b8f2
--- /dev/null
+++ b/firmware/src/system_config/pic32mx695f512h/gfx_hgc_definitions.h
@@ -0,0 +1,219 @@
+/*******************************************************************************
+ MPLAB Harmony Graphics Composer Generated Definitions Header
+
+ File Name:
+ gfx_hgc_definitions.h
+
+ Summary:
+ Build-time generated definitions header based on output by the MPLAB Harmony
+ Graphics Composer.
+
+ Description:
+ Build-time generated definitions header based on output by the MPLAB Harmony
+ Graphics Composer.
+
+ Created with MPLAB Harmony Version 1.06
+*******************************************************************************/
+
+// DOM-IGNORE-BEGIN
+/*******************************************************************************
+Copyright (c) 2013-2014 released Microchip Technology Inc. All rights reserved.
+
+Microchip licenses to you the right to use, modify, copy and distribute
+Software only when embedded on a Microchip microcontroller or digital signal
+controller that is integrated into your product or third party product
+(pursuant to the sublicense terms in the accompanying license agreement).
+
+You should refer to the license agreement accompanying this Software for
+additional information regarding your rights and obligations.
+
+SOFTWARE AND DOCUMENTATION ARE PROVIDED AS IS WITHOUT WARRANTY OF ANY KIND,
+EITHER EXPRESS OR IMPLIED, INCLUDING WITHOUT LIMITATION, ANY WARRANTY OF
+MERCHANTABILITY, TITLE, NON-INFRINGEMENT AND FITNESS FOR A PARTICULAR PURPOSE.
+IN NO EVENT SHALL MICROCHIP OR ITS LICENSORS BE LIABLE OR OBLIGATED UNDER
+CONTRACT, NEGLIGENCE, STRICT LIABILITY, CONTRIBUTION, BREACH OF WARRANTY, OR
+OTHER LEGAL EQUITABLE THEORY ANY DIRECT OR INDIRECT DAMAGES OR EXPENSES
+INCLUDING BUT NOT LIMITED TO ANY INCIDENTAL, SPECIAL, INDIRECT, PUNITIVE OR
+CONSEQUENTIAL DAMAGES, LOST PROFITS OR LOST DATA, COST OF PROCUREMENT OF
+SUBSTITUTE GOODS, TECHNOLOGY, SERVICES, OR ANY CLAIMS BY THIRD PARTIES
+(INCLUDING BUT NOT LIMITED TO ANY DEFENSE THEREOF), OR OTHER SIMILAR COSTS.
+*******************************************************************************/
+// DOM-IGNORE-END
+
+
+#ifndef _GFX_HGC_DEFINITIONS_H
+#define _GFX_HGC_DEFINITIONS_H
+
+#include "system_config.h"
+#include "system_definitions.h"
+
+// DOM-IGNORE-BEGIN
+#ifdef __cplusplus // Provide C++ Compatibility
+
+extern "C" {
+
+#endif
+// DOM-IGNORE-END
+
+typedef enum
+{
+ HGC_STATE_INIT = 0,
+ HGC_STATE_RUNNING
+} HGC_STATES;
+
+typedef enum
+{
+ HGC_SCREEN_STATE_INIT = 0,
+ HGC_SCREEN_STATE_SETUP_SCREEN_Screen1,
+ HGC_SCREEN_STATE_PRE_DRAW_GOL_SCREEN_Screen1,
+ HGC_SCREEN_STATE_DRAW_GOL_SCREEN_Screen1,
+ HGC_SCREEN_STATE_POST_DRAW_GOL_SCREEN_Screen1,
+ HGC_SCREEN_STATE_PRE_DRAW_PRIMITIVE_SCREEN_Screen1,
+ HGC_SCREEN_STATE_DRAW_PRIMITIVE_SCREEN_Screen1,
+ HGC_SCREEN_STATE_POST_DRAW_PRIMITIVE_SCREEN_Screen1,
+ HGC_SCREEN_STATE_DISPLAY_SCREEN_Screen1,
+
+} HGC_SCREEN_STATES;
+
+/*** Screen IDs ***/
+#define Screen1 0
+
+
+
+// *****************************************************************************
+/* MPLAB Harmony Graphics Composer Objects
+
+ Summary:
+ Structure holding the graphics object handles
+
+ Description:
+ This structure contains the object handles for all graphics objects
+ generated by the Harmony Graphics Composer
+
+ Remarks:
+*/
+
+typedef struct HGC_OBJECTS
+{
+ HGC_SCREEN_STATES screenState; // current state of screen state machine
+ HGC_SCREEN_STATES prevRefreshState; // previous state of screen state machine
+
+ /*** GOL Objects References ***/
+} HGC_OBJECTS;
+
+extern HGC_OBJECTS hgcObj;
+
+/******************************************************************************
+ Function:
+ void GFX_HGC_Setup ( void )
+
+ Summary:
+ This function sets up the GOL message callback and draw callbacks.
+ */
+void GFX_HGC_Setup ( void );
+
+
+/******************************************************************************
+ Function:
+ HGC_SCREEN_STATES GFX_HGC_GetScreenState ( void )
+
+ Remarks:
+ This function returns the screen state
+ */
+HGC_SCREEN_STATES GFX_HGC_GetScreenState ( void );
+
+
+/******************************************************************************
+ Function:
+ void GFX_HGC_SetScreenState ( HGC_SCREEN_STATES newState )
+
+ Remarks:
+ This function sets the screen state machine to a new state
+ */
+void GFX_HGC_SetScreenState ( HGC_SCREEN_STATES newState );
+
+
+/******************************************************************************
+ Function:
+ void GFX_HGC_Tasks (SYS_MODULE_OBJ gfxObject);
+
+ Summary:
+ This function is called in SYS_Tasks. The intent wait until the GFX library
+ is initialized before supplying items to draw
+*/
+void GFX_HGC_Tasks (SYS_MODULE_OBJ gfxObject);
+
+
+/******************************************************************************
+ Function:
+ void GFX_HGC_DrawScreenTask( void )
+
+ Remarks:
+ Task loop to drive the HGC generated screen state machine for HGC design
+ that has GFX_Primitives only
+ */
+void GFX_HGC_DrawScreenTask( void );
+
+
+/******************************************************************************
+ Function:
+ bool GFX_HGC_DrawScreen_Primitives( uint8_t screenId )
+
+ Output:
+ Returns true if a screenId matches an existing screen identifier
+
+ Remarks:
+ HGC-specified GFX Primitives are drawn here, grouped by screen.
+ GFX Primitives are drawn after GFX GOL Objects to make sure GFX GOL Objects
+ do not cover GFX Primitives
+ */
+bool GFX_HGC_DrawScreen_Primitives(uint8_t screenId);
+
+
+/******************************************************************************
+ Function:
+ void GFX_HGC_SetupScreen( uint8_t screenId )
+
+ Remarks:
+ Clears current screen and starts a fresh screen with its background color
+ */
+void GFX_HGC_SetupScreen(uint8_t screenId);
+
+
+/******************************************************************************
+ Function:
+ bool GFX_HGC_ChangeScreen( uint8_t screenId )
+
+ Output:
+ Returns true if a screenId matches an existing screen identifier
+
+ Remarks:
+ Can be called to initiate GFX Library to draw a new screen
+ */
+bool GFX_HGC_ChangeScreen(uint8_t screenId);
+
+
+/******************************************************************************
+ Function:
+ bool GFX_HGC_DrawItem(int itemId)
+
+ Output:
+ Returns true if a itemId matches an existing item identifier
+
+ Remarks:
+ Every item specified in every screen in HGC is listed in this function
+ */
+bool GFX_HGC_DrawItem(int itemId);
+
+
+
+//DOM-IGNORE-BEGIN
+#ifdef __cplusplus
+}
+#endif
+//DOM-IGNORE-END
+
+#endif // _GFX_HGC_DEFINITIONS_H
+/*******************************************************************************
+ End of File
+*/
diff --git a/firmware/src/system_config/pic32mx695f512h/pic32mx695f512h.mhc b/firmware/src/system_config/pic32mx695f512h/pic32mx695f512h.mhc
new file mode 100644
index 0000000..13017a8
--- /dev/null
+++ b/firmware/src/system_config/pic32mx695f512h/pic32mx695f512h.mhc
@@ -0,0 +1,406 @@
+#
+# Configuration generated by Microchip Harmony Configurator (MHC) v1.0.7.9
+# Project name: CText
+# Configuration: pic32mx695f512h
+# Device: PIC32MX695F512H
+# Harmony version: 1.06
+#
+#
+# from $PROJECT_FIRMWARE_DIRECTORY/$PROJECT_NAME.hconfig
+#
+CONFIG_APP_INSTANCES=1
+#
+# from $HARMONY_VERSION_PATH/utilities/mhc/config/app_name_idx.ftl
+#
+CONFIG_APP_MENU_IDX0=y
+CONFIG_APP_NAME_0="app"
+#
+# from $PROJECT_FIRMWARE_DIRECTORY/$PROJECT_NAME.hconfig
+#
+CONFIG_USE_EXCEPTION_HANDLER=y
+CONFIG_EXCEPTION_USE_SYS_DEBUG=y
+CONFIG_EXCEPTION_BREAKPOINT=y
+#
+# from $HARMONY_VERSION_PATH/framework/bluetooth/config/bluetooth.hconfig
+#
+CONFIG_USE_BLUETOOTH_LIBRARIES=n
+#
+# from $HARMONY_VERSION_PATH/framework/bootloader/config/bootloader.hconfig
+#
+CONFIG_USE_BOOTLOADER=y
+CONFIG_CUSTOM_BOOTLOADER_PROGRAM_SPACE=y
+CONFIG_USE_BOOTLOADER_LIBRARY=n
+#
+# from $HARMONY_VERSION_PATH/framework/crypto/config/crypto.hconfig
+#
+CONFIG_USE_CRYPTO_LIB=n
+#
+# from $HARMONY_VERSION_PATH/framework/driver/adc/config/drv_adc.hconfig
+#
+CONFIG_USE_DRV_ADC=n
+#
+# from $HARMONY_VERSION_PATH/framework/driver/camera/config/drv_camera.hconfig
+#
+CONFIG_USE_DRV_CAMERA=n
+#
+# from $HARMONY_VERSION_PATH/framework/driver/cmp/config/drv_cmp.hconfig
+#
+CONFIG_DRV_CVREF_ENABLE=n
+CONFIG_USE_DRV_CMP=n
+#
+# from $HARMONY_VERSION_PATH/framework/driver/encx24j600/config/drv_encx24j600.hconfig
+#
+CONFIG_DRV_ENCX24J600_USE_DRIVER=n
+#
+# from $HARMONY_VERSION_PATH/framework/tcpip/config/tcpip_mac.hconfig
+#
+CONFIG_TCPIP_USE_ETH_MAC=n
+#
+# from $HARMONY_VERSION_PATH/framework/driver/gfx/controller/lcc/config/drv_gfx_lcc.hconfig
+#
+CONFIG_USE_DRV_GFX_LCC=n
+#
+# from $HARMONY_VERSION_PATH/framework/driver/gfx/controller/otm2201a/config/drv_gfx_otm2201a.hconfig
+#
+CONFIG_USE_DRV_GFX_OTM2201A=n
+#
+# from $HARMONY_VERSION_PATH/framework/driver/gfx/controller/ssd1926/config/drv_gfx_ssd1926.hconfig
+#
+CONFIG_USE_DRV_GFX_SSD1926=n
+#
+# from $HARMONY_VERSION_PATH/framework/driver/gfx/controller/ssd1289/config/drv_gfx_ssd1289.hconfig
+#
+CONFIG_USE_DRV_GFX_SSD1289=n
+#
+# from $HARMONY_VERSION_PATH/framework/driver/gfx/controller/s1d13517/config/drv_gfx_s1d13517.hconfig
+#
+CONFIG_USE_DRV_GFX_S1D13517=n
+#
+# from $HARMONY_VERSION_PATH/framework/driver/gfx/controller/tft002/config/drv_gfx_tft002.hconfig
+#
+CONFIG_USE_DRV_GFX_TFT002=n
+#
+# from $HARMONY_VERSION_PATH/framework/driver/gfx/display/config/drv_gfx_display.hconfig
+#
+CONFIG_USE_DRV_GFX_DISPLAY=n
+#
+# from $HARMONY_VERSION_PATH/framework/driver/i2c/config/drv_i2c.hconfig
+#
+CONFIG_USE_DRV_I2C=n
+#
+# from $HARMONY_VERSION_PATH/framework/driver/ic/config/drv_ic.hconfig
+#
+CONFIG_USE_DRV_IC=n
+#
+# from $HARMONY_VERSION_PATH/framework/driver/nvm/config/drv_nvm.hconfig
+#
+CONFIG_USE_DRV_NVM=n
+#
+# from $HARMONY_VERSION_PATH/framework/driver/oc/config/drv_oc.hconfig
+#
+CONFIG_USE_DRV_OC=n
+#
+# from $HARMONY_VERSION_PATH/framework/driver/pmp/config/drv_pmp.hconfig
+#
+CONFIG_USE_DRV_PMP=n
+#
+# from $HARMONY_VERSION_PATH/framework/driver/rtcc/config/drv_rtcc.hconfig
+#
+CONFIG_USE_DRV_RTCC=n
+#
+# from $HARMONY_VERSION_PATH/framework/driver/sample/config/drv_sample.hconfig
+#
+CONFIG_USE_DRV_SAMPLE=n
+#
+# from $HARMONY_VERSION_PATH/framework/driver/sdcard/config/drv_sdcard.hconfig
+#
+CONFIG_USE_DRV_SDCARD=n
+#
+# from $HARMONY_VERSION_PATH/framework/driver/spi/config/drv_spi.hconfig
+#
+CONFIG_DRV_SPI_USE_DRIVER=n
+#
+# from $HARMONY_VERSION_PATH/framework/driver/spi_flash/sst25vf016b/config/drv_sst25vf016b.hconfig
+#
+CONFIG_USE_DRV_SST25VF016B=n
+#
+# from $HARMONY_VERSION_PATH/framework/driver/spi_flash/sst25vf020b/config/drv_sst25vf020b.hconfig
+#
+CONFIG_USE_DRV_SST25VF020B=n
+#
+# from $HARMONY_VERSION_PATH/framework/driver/spi_flash/sst25vf064c/config/drv_sst25vf064c.hconfig
+#
+CONFIG_USE_DRV_SST25VF064C=n
+#
+# from $HARMONY_VERSION_PATH/framework/driver/tmr/config/drv_tmr.hconfig
+#
+CONFIG_USE_DRV_TMR=y
+CONFIG_DRV_TMR_DRIVER_MODE="DYNAMIC"
+CONFIG_DRV_TMR_CLIENTS_NUMBER=1
+CONFIG_DRV_TMR_INTERRUPT_MODE=y
+CONFIG_DRV_TMR_INSTANCES_NUMBER=1
+#
+# from $HARMONY_VERSION_PATH/framework/driver/tmr/config/drv_tmr_idx.ftl
+#
+CONFIG_DRV_TMR_INST_0=y
+CONFIG_DRV_TMR_PERIPHERAL_ID_IDX0="TMR_ID_1"
+CONFIG_DRV_TMR_INTERRUPT_PRIORITY_IDX0="INT_PRIORITY_LEVEL1"
+CONFIG_DRV_TMR_INTERRUPT_SUB_PRIORITY_IDX0="INT_SUBPRIORITY_LEVEL0"
+CONFIG_DRV_TMR_CLOCK_SOURCE_IDX0="DRV_TMR_CLKSOURCE_INTERNAL"
+CONFIG_DRV_TMR_PRESCALE_IDX0="TMR_PRESCALE_VALUE_256"
+CONFIG_DRV_TMR_OPERATION_MODE_IDX0="DRV_TMR_OPERATION_MODE_16_BIT"
+CONFIG_DRV_TMR_ASYNC_WRITE_ENABLE_IDX0=n
+CONFIG_DRV_TMR_POWER_STATE_IDX0="SYS_MODULE_POWER_RUN_FULL"
+#
+# from $HARMONY_VERSION_PATH/framework/driver/touch/adc10bit/config/drv_adc10bit.hconfig
+#
+CONFIG_USE_DRV_TOUCH_ADC10BIT=n
+#
+# from $HARMONY_VERSION_PATH/framework/driver/touch/ar1020/config/drv_ar1020.hconfig
+#
+CONFIG_USE_DRV_TOUCH_AR1020=n
+#
+# from $HARMONY_VERSION_PATH/framework/driver/touch/mtch6301/config/drv_mtch6301.hconfig
+#
+CONFIG_USE_DRV_TOUCH_MTCH6301=n
+#
+# from $HARMONY_VERSION_PATH/framework/driver/usart/config/drv_usart.hconfig
+#
+CONFIG_USE_DRV_USART=n
+#
+# from $HARMONY_VERSION_PATH/framework/driver/wifi/config/drv_wifi.hconfig
+#
+CONFIG_USE_DRV_WIFI=n
+#
+# from $HARMONY_VERSION_PATH/framework/gfx/config/gfx.hconfig
+#
+CONFIG_USE_GFX_STACK=n
+#
+# from $HARMONY_VERSION_PATH/framework/math/dsp/config/dsp.hconfig
+#
+CONFIG_USE_DSP=n
+#
+# from $HARMONY_VERSION_PATH/framework/osal/config/osal.hconfig
+#
+CONFIG_USE_OSAL=y
+#
+# from $HARMONY_VERSION_PATH/framework/peripheral/config/peripheral.hconfig
+#
+CONFIG_PERIPHERAL_LIB=y
+#
+# from $HARMONY_VERSION_PATH/framework/system/clk/config/sys_clk.hconfig
+#
+CONFIG_USE_SYS_CLK=y
+CONFIG_SYS_CLK_MODE="STATIC"
+CONFIG_SYS_CLK_PBDIV0_OVERRIDE=n
+CONFIG_SYS_CLK_PBDIV0_MX="DIV_1"
+CONFIG_SYS_CLK_CONFIG_PRIMARY_XTAL="8000000"
+CONFIG_SYS_CLK_CONFIG_SECONDARY_XTAL=""
+CONFIG_SYS_CLK_FREQ="80000000"
+CONFIG_SYS_CLK_PBCLK_FREQ="80000000"
+CONFIG_SYS_CLK_UPLL_BEFORE_DIV2_FREQ="48000000"
+#
+# from $HARMONY_VERSION_PATH/framework/system/command/config/sys_command.hconfig
+#
+CONFIG_USE_SYS_COMMAND=n
+#
+# from $HARMONY_VERSION_PATH/framework/system/common/config/sys_common.hconfig
+#
+CONFIG_USE_SYS_COMMON=y
+CONFIG_SYS_BUFFER=n
+CONFIG_SYS_QUEUE=n
+#
+# from $HARMONY_VERSION_PATH/framework/system/console/config/sys_console.hconfig
+#
+CONFIG_USE_SYS_CONSOLE=n
+#
+# from $HARMONY_VERSION_PATH/framework/system/debug/config/sys_debug.hconfig
+#
+CONFIG_USE_SYS_DEBUG=n
+#
+# from $HARMONY_VERSION_PATH/framework/system/devcon/config/sys_devcon.hconfig
+#
+CONFIG_USE_SYS_DEVCON=y
+CONFIG_SYS_DEVCON_USE_JTAG=n
+#
+# from $HARMONY_VERSION_PATH/framework/system/dma/config/sys_dma.hconfig
+#
+CONFIG_USE_SYS_DMA=n
+#
+# from $HARMONY_VERSION_PATH/framework/system/fs/config/sys_fs.hconfig
+#
+CONFIG_USE_SYS_FS=n
+#
+# from $HARMONY_VERSION_PATH/framework/system/int/config/sys_int.hconfig
+#
+CONFIG_USE_SYS_INT=y
+CONFIG_USE_EXT_INT=n
+#
+# from $HARMONY_VERSION_PATH/framework/system/msg/config/sys_msg.hconfig
+#
+CONFIG_USE_SYS_MSG=n
+#
+# from $HARMONY_VERSION_PATH/framework/system/ports/config/sys_ports.hconfig
+#
+CONFIG_USE_SYS_PORTS=y
+CONFIG_COMPONENT_PACKAGE="TQFP"
+CONFIG_SYS_PORTS_CN=n
+CONFIG_USE_SYS_PORTS_CN_INTERRUPT=n
+CONFIG_SYS_PORT_ADPCFG=0xffdf
+CONFIG_SYS_PORT_CNEN=0x0
+CONFIG_SYS_PORT_CNPU=0x0
+#
+# from $HARMONY_VERSION_PATH/framework/system/ports/config/sys_ports_idx.ftl
+#
+CONFIG_USE_PORT_B=y
+CONFIG_SYS_PORT_B_TRIS=0x3c20
+CONFIG_SYS_PORT_B_LAT=0x0
+CONFIG_SYS_PORT_B_ODC=0x0
+CONFIG_SYS_PORT_C_TRIS=0xf000
+CONFIG_SYS_PORT_C_LAT=0x0
+CONFIG_SYS_PORT_C_ODC=0x0
+CONFIG_SYS_PORT_D_TRIS=0xfff
+CONFIG_SYS_PORT_D_LAT=0x0
+CONFIG_SYS_PORT_D_ODC=0x0
+CONFIG_USE_PORT_E=y
+CONFIG_SYS_PORT_E_TRIS=0x0
+CONFIG_SYS_PORT_E_LAT=0x0
+CONFIG_SYS_PORT_E_ODC=0x0
+CONFIG_SYS_PORT_F_TRIS=0x3b
+CONFIG_SYS_PORT_F_LAT=0x0
+CONFIG_SYS_PORT_F_ODC=0x0
+CONFIG_SYS_PORT_G_TRIS=0x3cc
+CONFIG_SYS_PORT_G_LAT=0x0
+CONFIG_SYS_PORT_G_ODC=0x0
+#
+# from $HARMONY_VERSION_PATH/framework/system/random/config/sys_random.hconfig
+#
+CONFIG_USE_SYS_RANDOM=n
+#
+# from $HARMONY_VERSION_PATH/framework/system/reset/config/sys_reset.hconfig
+#
+CONFIG_USE_SYS_RESET=n
+#
+# from $HARMONY_VERSION_PATH/framework/system/touch/config/sys_touch.hconfig
+#
+CONFIG_USE_SYS_TOUCH=n
+#
+# from $HARMONY_VERSION_PATH/framework/system/tmr/config/sys_tmr.hconfig
+#
+CONFIG_USE_SYS_TMR=y
+CONFIG_SYS_TMR_POWER_STATE="SYS_MODULE_POWER_RUN_FULL"
+CONFIG_SYS_TMR_DRIVER_INDEX="DRV_TMR_INDEX_0"
+CONFIG_SYS_TMR_MAX_CLIENT_OBJECTS=5
+CONFIG_SYS_TMR_FREQUENCY=1000
+CONFIG_SYS_TMR_FREQUENCY_TOLERANCE=10
+CONFIG_SYS_TMR_UNIT_RESOLUTION=10000
+CONFIG_SYS_TMR_CLIENT_TOLERANCE=10
+CONFIG_SYS_TMR_INTERRUPT_NOTIFICATION=n
+#
+# from $HARMONY_VERSION_PATH/framework/system/wdt/config/sys_wdt.hconfig
+#
+CONFIG_USE_SYS_WDT=n
+#
+# from $HARMONY_VERSION_PATH/framework/tcpip/config/tcpip_stack.hconfig
+#
+CONFIG_USE_TCPIP_STACK=n
+#
+# from $HARMONY_VERSION_PATH/framework/usb/config/usb.hconfig
+#
+CONFIG_USE_USB_STACK=y
+CONFIG_DRV_USB_DRIVER_MODE="DYNAMIC"
+CONFIG_DRV_USB_INTERRUPT_MODE=y
+CONFIG_DRV_USB_DEVICE_SUPPORT=n
+CONFIG_DRV_USB_HOST_SUPPORT=y
+CONFIG_DRV_USB_BETA_SW_HOST_SUPPORT=n
+CONFIG_USB_HOST_SPEED_FS_IDX0="USB_SPEED_FULL"
+CONFIG_USB_HOST_DEVICE_NUMBER=1
+CONFIG_USB_HOST_TPL_ENTRY_NUMBER=1
+CONFIG_USB_HOST_MAX_INTERFACES=5
+CONFIG_USB_HOST_USE_HUB=n
+CONFIG_USB_HOST_USE_CDC=n
+CONFIG_USB_HOST_USE_HID=y
+CONFIG_USB_HOST_USE_MOUSE=n
+CONFIG_USB_HOST_USE_KEYBOARD=y
+CONFIG_USB_HOST_HID_NUMBER_OF_INSTANCES=1
+CONFIG_USB_HOST_HID_INTERRUPT_IN_ENDPOINTS_NUMBER=1
+CONFIG_USB_HID_TOTAL_USAGE_DRIVER_INSTANCES=1
+CONFIG_USB_HID_GLOBAL_PUSH_POP_STACK_SIZE=1
+CONFIG_USB_HOST_USE_AUDIO=n
+CONFIG_USB_HOST_USE_MSD=n
+#
+# from $HARMONY_VERSION_PATH/framework/sample/config/sample_module.hconfig
+#
+CONFIG_USE_SAMPLE_MODULE=n
+#
+# from $HARMONY_VERSION_PATH/framework/test/config/test.hconfig
+#
+CONFIG_USE_TEST_HARNESS=n
+#
+# from $HARMONY_VERSION_PATH/framework/decoder/config/decoder.hconfig
+#
+CONFIG_USE_DECODER=n
+#
+# from $HARMONY_VERSION_PATH/framework/net/pres/config/net_pres.hconfig
+#
+CONFIG_NET_PRES_USE=n
+#
+# from $HARMONY_VERSION_PATH/bsp/config/bsp.hconfig
+#
+CONFIG_USE_BSP=n
+#
+# from $HARMONY_VERSION_PATH/third_party/rtos/config/rtos.hconfig
+#
+CONFIG_USE_3RDPARTY_RTOS=n
+#
+# from $HARMONY_VERSION_PATH/third_party/tcpip/config/wolfssl.hconfig
+#
+CONFIG_USE_3RDPARTY_WOLFSSL=n
+#
+# from $HARMONY_VERSION_PATH/third_party/tcpip/iniche/config/embtcp.hconfig
+#
+CONFIG_IN_EMB_TCPIP_USE_TCP=n
+#
+# from $HARMONY_VERSION_PATH/third_party/tcpip/iniche/config/embdual.hconfig
+#
+CONFIG_IN_EMB_DUAL_USE_TCP=n
+#
+# from $HARMONY_VERSION_PATH/third_party/tcpip/iniche/config/stack.hconfig
+#
+CONFIG_IN_TCPIP=n
+#
+# from $HARMONY_VERSION_PATH/config/harmony.hconfig
+#
+CONFIG_DEVICE_CONFIGURATION=y
+#
+# from $HARMONY_VERSION_PATH/utilities/mhc/config/PIC32MX695F512H.hconfig
+#
+CONFIG_USERID=0xffff
+CONFIG_FSRSSEL="PRIORITY_7"
+CONFIG_FMIIEN="ON"
+CONFIG_FETHIO="ON"
+CONFIG_FUSBIDIO="ON"
+CONFIG_FVBUSONIO="ON"
+CONFIG_FPLLIDIV="DIV_2"
+CONFIG_FPLLMUL="MUL_20"
+CONFIG_UPLLIDIV="DIV_2"
+CONFIG_UPLLEN="OFF"
+CONFIG_FPLLODIV="DIV_1"
+CONFIG_FNOSC="FRCPLL"
+CONFIG_FSOSCEN="ON"
+CONFIG_IESO="OFF"
+CONFIG_POSCMOD="OFF"
+CONFIG_OSCIOFNC="OFF"
+CONFIG_FPBDIV="DIV_1"
+CONFIG_FCKSM="CSDCMD"
+CONFIG_WDTPS="PS1048576"
+CONFIG_FWDTEN="OFF"
+CONFIG_DEBUG="OFF"
+CONFIG_ICESEL="ICS_PGx2"
+CONFIG_PWP="OFF"
+CONFIG_BWP="OFF"
+CONFIG_CP="OFF"
+#
+# from $HARMONY_VERSION_PATH/utilities/mhc/config/project.hconfig
+#
+CONFIG_XC32_HEAP="4096"
diff --git a/firmware/src/system_config/pic32mx695f512h/system_config.h b/firmware/src/system_config/pic32mx695f512h/system_config.h
new file mode 100644
index 0000000..0183686
--- /dev/null
+++ b/firmware/src/system_config/pic32mx695f512h/system_config.h
@@ -0,0 +1,238 @@
+/*******************************************************************************
+ MPLAB Harmony System Configuration Header
+
+ File Name:
+ system_config.h
+
+ Summary:
+ Build-time configuration header for the system defined by this MPLAB Harmony
+ project.
+
+ Description:
+ An MPLAB Project may have multiple configurations. This file defines the
+ build-time options for a single configuration.
+
+ Remarks:
+ This configuration header must not define any prototypes or data
+ definitions (or include any files that do). It only provides macro
+ definitions for build-time configuration options that are not instantiated
+ until used by another MPLAB Harmony module or application.
+
+ Created with MPLAB Harmony Version 1.06
+*******************************************************************************/
+
+// DOM-IGNORE-BEGIN
+/*******************************************************************************
+Copyright (c) 2013-2015 released Microchip Technology Inc. All rights reserved.
+
+Microchip licenses to you the right to use, modify, copy and distribute
+Software only when embedded on a Microchip microcontroller or digital signal
+controller that is integrated into your product or third party product
+(pursuant to the sublicense terms in the accompanying license agreement).
+
+You should refer to the license agreement accompanying this Software for
+additional information regarding your rights and obligations.
+
+SOFTWARE AND DOCUMENTATION ARE PROVIDED AS IS WITHOUT WARRANTY OF ANY KIND,
+EITHER EXPRESS OR IMPLIED, INCLUDING WITHOUT LIMITATION, ANY WARRANTY OF
+MERCHANTABILITY, TITLE, NON-INFRINGEMENT AND FITNESS FOR A PARTICULAR PURPOSE.
+IN NO EVENT SHALL MICROCHIP OR ITS LICENSORS BE LIABLE OR OBLIGATED UNDER
+CONTRACT, NEGLIGENCE, STRICT LIABILITY, CONTRIBUTION, BREACH OF WARRANTY, OR
+OTHER LEGAL EQUITABLE THEORY ANY DIRECT OR INDIRECT DAMAGES OR EXPENSES
+INCLUDING BUT NOT LIMITED TO ANY INCIDENTAL, SPECIAL, INDIRECT, PUNITIVE OR
+CONSEQUENTIAL DAMAGES, LOST PROFITS OR LOST DATA, COST OF PROCUREMENT OF
+SUBSTITUTE GOODS, TECHNOLOGY, SERVICES, OR ANY CLAIMS BY THIRD PARTIES
+(INCLUDING BUT NOT LIMITED TO ANY DEFENSE THEREOF), OR OTHER SIMILAR COSTS.
+*******************************************************************************/
+// DOM-IGNORE-END
+
+#ifndef _SYSTEM_CONFIG_H
+#define _SYSTEM_CONFIG_H
+
+/* This is a temporary workaround for an issue with the peripheral library "Exists"
+ functions that causes superfluous warnings. It "nulls" out the definition of
+ The PLIB function attribute that causes the warning. Once that issue has been
+ resolved, this definition should be removed. */
+#define _PLIB_UNSUPPORTED
+
+
+// *****************************************************************************
+// *****************************************************************************
+// Section: Included Files
+// *****************************************************************************
+// *****************************************************************************
+/* This section Includes other configuration headers necessary to completely
+ define this configuration.
+*/
+
+
+// *****************************************************************************
+// *****************************************************************************
+// Section: System Service Configuration
+// *****************************************************************************
+// *****************************************************************************
+
+// *****************************************************************************
+/* Common System Service Configuration Options
+*/
+#define SYS_VERSION_STR "1.06"
+#define SYS_VERSION 10600
+
+// *****************************************************************************
+/* Clock System Service Configuration Options
+*/
+#define SYS_CLK_FREQ 80000000ul
+#define SYS_CLK_BUS_PERIPHERAL_1 80000000ul
+#define SYS_CLK_UPLL_BEFORE_DIV2_FREQ 48000000ul
+#define SYS_CLK_CONFIG_PRIMARY_XTAL 8000000ul
+#define SYS_CLK_CONFIG_SECONDARY_XTAL 0ul
+
+/*** Interrupt System Service Configuration ***/
+#define SYS_INT true
+
+/*** Ports System Service Configuration ***/
+#define SYS_PORT_AD1PCFG ~0xffff
+#define SYS_PORT_CNPUE 0x0
+#define SYS_PORT_CNEN 0x0
+
+#define SYS_PORT_B_TRIS 0x3c20
+#define SYS_PORT_B_LAT 0x0
+#define SYS_PORT_B_ODC 0x0
+
+#define SYS_PORT_E_TRIS 0x0
+#define SYS_PORT_E_LAT 0x0
+#define SYS_PORT_E_ODC 0x0
+/*** Timer System Service Configuration ***/
+#define SYS_TMR_POWER_STATE SYS_MODULE_POWER_RUN_FULL
+#define SYS_TMR_DRIVER_INDEX DRV_TMR_INDEX_0
+#define SYS_TMR_MAX_CLIENT_OBJECTS 5
+#define SYS_TMR_FREQUENCY 1000
+#define SYS_TMR_FREQUENCY_TOLERANCE 10
+#define SYS_TMR_UNIT_RESOLUTION 10000
+#define SYS_TMR_CLIENT_TOLERANCE 10
+#define SYS_TMR_INTERRUPT_NOTIFICATION false
+
+
+// *****************************************************************************
+// *****************************************************************************
+// Section: Driver Configuration
+// *****************************************************************************
+// *****************************************************************************
+
+/*** Timer Driver Configuration ***/
+#define DRV_TMR_INSTANCES_NUMBER 1
+#define DRV_TMR_CLIENTS_NUMBER 1
+#define DRV_TMR_INTERRUPT_MODE true
+
+/*** Timer Driver 0 Configuration ***/
+#define DRV_TMR_PERIPHERAL_ID_IDX0 TMR_ID_1
+#define DRV_TMR_INTERRUPT_SOURCE_IDX0 INT_SOURCE_TIMER_1
+#define DRV_TMR_INTERRUPT_VECTOR_IDX0 INT_VECTOR_T1
+#define DRV_TMR_ISR_VECTOR_IDX0 _TIMER_1_VECTOR
+#define DRV_TMR_INTERRUPT_PRIORITY_IDX0 INT_PRIORITY_LEVEL1
+#define DRV_TMR_INTERRUPT_SUB_PRIORITY_IDX0 INT_SUBPRIORITY_LEVEL0
+#define DRV_TMR_CLOCK_SOURCE_IDX0 DRV_TMR_CLKSOURCE_INTERNAL
+#define DRV_TMR_PRESCALE_IDX0 TMR_PRESCALE_VALUE_256
+#define DRV_TMR_OPERATION_MODE_IDX0 DRV_TMR_OPERATION_MODE_16_BIT
+#define DRV_TMR_ASYNC_WRITE_ENABLE_IDX0 false
+#define DRV_TMR_POWER_STATE_IDX0 SYS_MODULE_POWER_RUN_FULL
+
+
+
+// *****************************************************************************
+// *****************************************************************************
+// Section: Middleware & Other Library Configuration
+// *****************************************************************************
+// *****************************************************************************
+
+/*** USB Driver Configuration ***/
+
+
+/* Disable Device Support */
+#define DRV_USBFS_DEVICE_SUPPORT false
+
+/* Enables Device Support */
+#define DRV_USBFS_HOST_SUPPORT true
+
+/* Maximum USB driver instances */
+#define DRV_USBFS_INSTANCES_NUMBER 1
+
+
+/* Interrupt mode enabled */
+#define DRV_USBFS_INTERRUPT_MODE true
+
+
+/* Number of Endpoints used */
+#define DRV_USBFS_ENDPOINTS_NUMBER 1
+
+
+
+
+
+
+#define DRV_USBFS_HOST_NAK_LIMIT 2000
+/* Provides Host pipes number */
+#define DRV_USBFS_HOST_PIPES_NUMBER 10
+#define DRV_USBFS_HOST_ATTACH_DEBOUNCE_DURATION 500
+#define DRV_USBFS_HOST_RESET_DURATION 100
+// *****************************************************************************
+// *****************************************************************************
+// Section: USB Device Layer Configuration
+// *****************************************************************************
+// *****************************************************************************
+/* Provides Host pipes number */
+#define USB_HOST_PIPES_NUMBER 10
+/* NAK Limit for Control transfer data stage and Status Stage */
+#define DRV_USB_HOST_NAK_LIMIT 200
+
+// *****************************************************************************
+// *****************************************************************************
+// Section: USB Host Layer Configuration
+// *****************************************************************************
+// **************************************************************************
+
+/* Total number of devices to be supported */
+#define USB_HOST_DEVICES_NUMBER 1
+
+/* Target peripheral list entries */
+#define USB_HOST_TPL_ENTRIES 1
+
+/* Maximum number of configurations supported per device */
+#define USB_HOST_DEVICE_INTERFACES_NUMBER 5
+
+#define USB_HOST_CONTROLLERS_NUMBER 1
+
+#define USB_HOST_TRANSFERS_NUMBER 10
+
+/* Number of Host Layer Clients */
+#define USB_HOST_CLIENTS_NUMBER 1
+
+
+/* Number of HID Client driver instances in the application */
+#define USB_HOST_HID_INSTANCES_NUMBER 1
+
+/* Maximum number of INTERRUPT IN endpoints supported per HID interface */
+#define USB_HOST_HID_INTERRUPT_IN_ENDPOINTS_NUMBER 1
+
+/* Number of total usage driver instances registered with HID client driver */
+#define USB_HOST_HID_USAGE_DRIVER_SUPPORT_NUMBER 1
+
+/* Maximum number PUSH items that can be saved in the Global item queue per field
+ * per HID interface */
+#define USB_HID_GLOBAL_PUSH_POP_STACK_SIZE 1
+
+
+
+
+
+
+
+
+
+
+
+#endif // _SYSTEM_CONFIG_H
+/*******************************************************************************
+ End of File
+*/
+
diff --git a/firmware/src/system_config/pic32mx695f512h/system_definitions.h b/firmware/src/system_config/pic32mx695f512h/system_definitions.h
new file mode 100644
index 0000000..c2d8147
--- /dev/null
+++ b/firmware/src/system_config/pic32mx695f512h/system_definitions.h
@@ -0,0 +1,136 @@
+/*******************************************************************************
+ System Definitions
+
+ File Name:
+ system_definitions.h
+
+ Summary:
+ MPLAB Harmony project system definitions.
+
+ Description:
+ This file contains the system-wide prototypes and definitions for an MPLAB
+ Harmony project.
+ *******************************************************************************/
+
+//DOM-IGNORE-BEGIN
+/*******************************************************************************
+Copyright (c) 2013-2014 released Microchip Technology Inc. All rights reserved.
+
+Microchip licenses to you the right to use, modify, copy and distribute
+Software only when embedded on a Microchip microcontroller or digital signal
+controller that is integrated into your product or third party product
+(pursuant to the sublicense terms in the accompanying license agreement).
+
+You should refer to the license agreement accompanying this Software for
+additional information regarding your rights and obligations.
+
+SOFTWARE AND DOCUMENTATION ARE PROVIDED AS IS WITHOUT WARRANTY OF ANY KIND,
+EITHER EXPRESS OR IMPLIED, INCLUDING WITHOUT LIMITATION, ANY WARRANTY OF
+MERCHANTABILITY, TITLE, NON-INFRINGEMENT AND FITNESS FOR A PARTICULAR PURPOSE.
+IN NO EVENT SHALL MICROCHIP OR ITS LICENSORS BE LIABLE OR OBLIGATED UNDER
+CONTRACT, NEGLIGENCE, STRICT LIABILITY, CONTRIBUTION, BREACH OF WARRANTY, OR
+OTHER LEGAL EQUITABLE THEORY ANY DIRECT OR INDIRECT DAMAGES OR EXPENSES
+INCLUDING BUT NOT LIMITED TO ANY INCIDENTAL, SPECIAL, INDIRECT, PUNITIVE OR
+CONSEQUENTIAL DAMAGES, LOST PROFITS OR LOST DATA, COST OF PROCUREMENT OF
+SUBSTITUTE GOODS, TECHNOLOGY, SERVICES, OR ANY CLAIMS BY THIRD PARTIES
+(INCLUDING BUT NOT LIMITED TO ANY DEFENSE THEREOF), OR OTHER SIMILAR COSTS.
+ *******************************************************************************/
+//DOM-IGNORE-END
+
+#ifndef _SYS_DEFINITIONS_H
+#define _SYS_DEFINITIONS_H
+
+
+// *****************************************************************************
+// *****************************************************************************
+// Section: Included Files
+// *****************************************************************************
+// *****************************************************************************
+
+#include