diff --git a/BPv3-bootloader/firmware-v4.5/src/devices.inc b/BPv3-bootloader/firmware-v4.5/devices.inc similarity index 95% rename from BPv3-bootloader/firmware-v4.5/src/devices.inc rename to BPv3-bootloader/firmware-v4.5/devices.inc index 5d2a96d0..f414bde1 100644 --- a/BPv3-bootloader/firmware-v4.5/src/devices.inc +++ b/BPv3-bootloader/firmware-v4.5/devices.inc @@ -1,412 +1,412 @@ -;------------------------------------------------------------------------------ -; -; Title: ds30 loader for PIC24FJ -; -; File description: Device specific constants -; -; Copyright: Copyright © 2009, Mikael Gustafsson -; -; Webpage: http://mrmackey.no-ip.org/elektronik/ds30loader/ -; -; History: 1.0.1 Removed some incorrect include for ga002 and ga004 -; 1.0.0 Removed PIC24FxxKAyyy stuff, se separate fw -; 0.9.1 Added pps equ -; 0.9.0 First version of this file -; -;------------------------------------------------------------------------------ - -;----------------------------------------------------------------------------- -; This file is part of ds30 Loader. -; -; ds30 Loader is free software: you can redistribute it and/or modify -; it under the terms of the GNU General Public License as published by -; the Free Software Foundation. -; -; ds30 Loader is distributed in the hope that it will be useful, -; but WITHOUT ANY WARRANTY; without even the implied warranty of -; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -; GNU General Public License for more details. -; -; You should have received a copy of the GNU General Public License -; along with ds30 Loader. If not, see . -;------------------------------------------------------------------------------ - - -;------------------------------------------------------------------------------ -; Devices PIC24F - 16kB -;------------------------------------------------------------------------------ -.ifdef __24FJ16GA002 - .include "p24FJ" - .equ VALID_DEV, 1 - .equ FLASHSIZE, 0x2C00 - .equ HAS_UART2, 1 - .equ DEVICEID, 206 - .equ HAS_PPS, 1 -.endif - -.ifdef __24FJ16GA004 - .include "p24FJ" - .equ VALID_DEV, 1 - .equ FLASHSIZE, 0x2C00 - .equ HAS_UART2, 1 - .equ DEVICEID, 207 - .equ HAS_PPS, 1 -.endif - - -;------------------------------------------------------------------------------ -; Devices PIC24F - 32kB -;------------------------------------------------------------------------------ -.ifdef __24FJ32GA002 - .equ VALID_DEV, 1 - .equ FLASHSIZE, 0x5800 - .equ HAS_UART2, 1 - .equ DEVICEID, 208 - .equ HAS_PPS, 1 -.endif - -.ifdef __24FJ32GA004 - .equ VALID_DEV, 1 - .equ FLASHSIZE, 0x5800 - .equ HAS_UART2, 1 - .equ DEVICEID, 209 - .equ HAS_PPS, 1 -.endif - - -;------------------------------------------------------------------------------ -; Devices PIC24F - 48kB -;------------------------------------------------------------------------------ -.ifdef __24FJ48GA002 - .equ VALID_DEV, 1 - .equ FLASHSIZE, 0x8400 - .equ HAS_UART2, 1 - .equ DEVICEID, 210 - .equ HAS_PPS, 1 -.endif - -.ifdef __24FJ48GA004 - .equ VALID_DEV, 1 - .equ FLASHSIZE, 0x8400 - .equ HAS_UART2, 1 - .equ DEVICEID, 211 - .equ HAS_PPS, 1 -.endif - - -;------------------------------------------------------------------------------ -; Devices PIC24F - 64kB -;------------------------------------------------------------------------------ -.ifdef __24FJ64GA002 - .equ VALID_DEV, 1 - .equ FLASHSIZE, 0xAC00 - .equ HAS_UART2, 1 - .equ DEVICEID, 212 - .equ HAS_PPS, 1 -.endif - -.ifdef __24FJ64GA004 - .equ VALID_DEV, 1 - .equ FLASHSIZE, 0xAC00 - .equ HAS_UART2, 1 - .equ DEVICEID, 213. - equ HAS_PPS, 1 -.endif - -.ifdef __24FJ64GA006 - .equ VALID_DEV, 1 - .equ FLASHSIZE, 0xAC00 - .equ HAS_UART2, 1 - .equ DEVICEID, 214 -.endif - -.ifdef __24FJ64GA008 - .equ VALID_DEV, 1 - .equ FLASHSIZE, 0xAC00 - .equ HAS_UART2, 1 - .equ DEVICEID, 215 -.endif - -.ifdef __24FJ64GA010 - .equ VALID_DEV, 1 - .equ FLASHSIZE, 0xAC00 - .equ HAS_UART2, 1 - .equ DEVICEID, 216 -.endif - -.ifdef __24FJ64GB106 - .equ VALID_DEV, 1 - .equ FLASHSIZE, 0xAC00 - .equ HAS_UART2, 1 - .equ HAS_UART3, 1 - .equ HAS_UART4, 1 - .equ DEVICEID, 217 - .equ HAS_PPS, 1 -.endif - -.ifdef __24FJ64GB108 - .equ VALID_DEV, 1 - .equ FLASHSIZE, 0xAC00 - .equ HAS_UART2, 1 - .equ DEVICEID, 218 - .equ HAS_UART3, 1 - .equ HAS_UART4, 1 - .equ HAS_PPS, 1 -.endif - -.ifdef __24FJ64GB110 - .equ VALID_DEV, 1 - .equ FLASHSIZE, 0xAC00 - .equ HAS_UART2, 1 - .equ DEVICEID, 219 - .equ HAS_UART3, 1 - .equ HAS_UART4, 1 - .equ HAS_PPS, 1 -.endif - - -;------------------------------------------------------------------------------ -; Devices PIC24F - 96kB -;------------------------------------------------------------------------------ -.ifdef __24FJ96GA006 - .equ VALID_DEV, 1 - .equ FLASHSIZE, 0x10000 - .equ HAS_UART2, 1 - .equ DEVICEID, 220 -.endif - -.ifdef __24FJ96GA008 - .equ VALID_DEV, 1 - .equ FLASHSIZE, 0x10000 - .equ HAS_UART2, 1 - .equ DEVICEID, 221 -.endif - -.ifdef __24FJ96GA010 - .equ VALID_DEV, 1 - .equ FLASHSIZE, 0x10000 - .equ HAS_UART2, 1 - .equ DEVICEID, 222 -.endif - - -;------------------------------------------------------------------------------ -; Devices PIC24F - 128kB -;------------------------------------------------------------------------------ -.ifdef __24FJ128GA006 - .equ VALID_DEV, 1 - .equ FLASHSIZE, 0x15800 - .equ HAS_UART2, 1 - .equ DEVICEID, 223 -.endif - -.ifdef __24FJ128GA008 - .equ VALID_DEV, 1 - .equ FLASHSIZE, 0x15800 - .equ HAS_UART2, 1 - .equ DEVICEID, 224 -.endif - -.ifdef __24FJ128GA010 - .equ VALID_DEV, 1 - .equ FLASHSIZE, 0x15800 - .equ HAS_UART2, 1 - .equ DEVICEID, 225 -.endif - -.ifdef __24FJ128GA106 - .equ VALID_DEV, 1 - .equ FLASHSIZE, 0x15800 - .equ HAS_UART2, 1 - .equ HAS_UART3, 1 - .equ HAS_UART4, 1 - .equ DEVICEID, 226 - .equ HAS_PPS, 1 -.endif - -.ifdef __24FJ128GA108 - .equ VALID_DEV, 1 - .equ FLASHSIZE, 0x15800 - .equ HAS_UART2, 1 - .equ HAS_UART3, 1 - .equ HAS_UART4, 1 - .equ DEVICEID, 227 - .equ HAS_PPS, 1 -.endif - -.ifdef __24FJ128GA110 - .equ VALID_DEV, 1 - .equ FLASHSIZE, 0x15800 - .equ HAS_UART2, 1 - .equ HAS_UART3, 1 - .equ HAS_UART4, 1 - .equ DEVICEID, 228 - .equ HAS_PPS, 1 -.endif - -.ifdef __24FJ128GB106 - .equ VALID_DEV, 1 - .equ FLASHSIZE, 0x15800 - .equ HAS_UART2, 1 - .equ HAS_UART3, 1 - .equ HAS_UART4, 1 - .equ DEVICEID, 229 - .equ HAS_PPS, 1 -.endif - -.ifdef __24FJ128GB108 - .equ VALID_DEV, 1 - .equ FLASHSIZE, 0x15800 - .equ HAS_UART2, 1 - .equ HAS_UART3, 1 - .equ HAS_UART4, 1 - .equ DEVICEID, 230 - .equ HAS_PPS, 1 -.endif - -.ifdef __24FJ128GB110 - .equ VALID_DEV, 1 - .equ FLASHSIZE, 0x15800 - .equ HAS_UART2, 1 - .equ HAS_UART3, 1 - .equ HAS_UART4, 1 - .equ DEVICEID, 231 - .equ HAS_PPS, 1 -.endif - - -;------------------------------------------------------------------------------ -; Devices PIC24F - 192kB -;------------------------------------------------------------------------------ -.ifdef __24FJ192GA106 - .equ VALID_DEV, 1 - .equ FLASHSIZE, 0x20C00 - .equ HAS_UART2, 1 - .equ HAS_UART3, 1 - .equ HAS_UART4, 1 - .equ DEVICEID, 232 - .equ HAS_PPS, 1 -.endif - -.ifdef __24FJ192GA108 - .equ VALID_DEV, 1 - .equ FLASHSIZE, 0x20C00 - .equ HAS_UART2, 1 - .equ HAS_UART3, 1 - .equ HAS_UART4, 1 - .equ DEVICEID, 233 - .equ HAS_PPS, 1 -.endif - -.ifdef __24FJ192GA110 - .equ VALID_DEV, 1 - .equ FLASHSIZE, 0x20C00 - .equ HAS_UART2, 1 - .equ HAS_UART3, 1 - .equ HAS_UART4, 1 - .equ DEVICEID, 234 - .equ HAS_PPS, 1 -.endif - -.ifdef __24FJ192GB106 - .equ VALID_DEV, 1 - .equ FLASHSIZE, 0x20C00 - .equ HAS_UART2, 1 - .equ HAS_UART3, 1 - .equ HAS_UART4, 1 - .equ DEVICEID, 235 - .equ HAS_PPS, 1 -.endif - -.ifdef __24FJ192GB108 - .equ VALID_DEV, 1 - .equ FLASHSIZE, 0x20C00 - .equ HAS_UART2, 1 - .equ HAS_UART3, 1 - .equ HAS_UART4, 1 - .equ DEVICEID, 236 - .equ HAS_PPS, 1 -.endif - -.ifdef __24FJ192GB110 - .equ VALID_DEV, 1 - .equ FLASHSIZE, 0x20C00 - .equ HAS_UART2, 1 - .equ HAS_UART3, 1 - .equ HAS_UART4, 1 - .equ DEVICEID, 237 - .equ HAS_PPS, 1 -.endif - - -;------------------------------------------------------------------------------ -; Devices PIC24F - 256kB -;------------------------------------------------------------------------------ -.ifdef __24FJ256GA106 - .equ VALID_DEV, 1 - .equ FLASHSIZE, 0x2AC00 - .equ HAS_UART2, 1 - .equ HAS_UART3, 1 - .equ HAS_UART4, 1 - .equ DEVICEID, 238 - .equ HAS_PPS, 1 -.endif - -.ifdef __24FJ256GA108 - .equ VALID_DEV, 1 - .equ FLASHSIZE, 0x2AC00 - .equ HAS_UART2, 1 - .equ HAS_UART3, 1 - .equ HAS_UART4, 1 - .equ DEVICEID, 239 - .equ HAS_PPS, 1 -.endif - -.ifdef __24FJ256GA110 - .equ VALID_DEV, 1 - .equ FLASHSIZE, 0x2AC00 - .equ HAS_UART2, 1 - .equ HAS_UART3, 1 - .equ HAS_UART4, 1 - .equ DEVICEID, 240 - .equ HAS_PPS, 1 -.endif - -.ifdef __24FJ256GB106 - .equ VALID_DEV, 1 - .equ FLASHSIZE, 0x2AC00 - .equ HAS_UART2, 1 - .equ HAS_UART3, 1 - .equ HAS_UART4, 1 - .equ DEVICEID, 241 - .equ HAS_PPS, 1 -.endif - -.ifdef __24FJ256GB108 - .equ VALID_DEV, 1 - .equ FLASHSIZE, 0x2AC00 - .equ HAS_UART2, 1 - .equ HAS_UART3, 1 - .equ HAS_UART4, 1 - .equ DEVICEID, 242 - .equ HAS_PPS, 1 -.endif - -.ifdef __24FJ256GB110 - .equ VALID_DEV, 1 - .equ FLASHSIZE, 0x2AC00 - .equ HAS_UART2, 1 - .equ HAS_UART3, 1 - .equ HAS_UART4, 1 - .equ DEVICEID, 243 - .equ HAS_PPS, 1 -.endif - - - -;------------------------------------------------------------------------------ -; -;------------------------------------------------------------------------------ -.ifndef VALID_DEV - .error "Unknown device specified" -.endif +;------------------------------------------------------------------------------ +; +; Title: ds30 loader for PIC24FJ +; +; File description: Device specific constants +; +; Copyright: Copyright © 2009, Mikael Gustafsson +; +; Webpage: http://mrmackey.no-ip.org/elektronik/ds30loader/ +; +; History: 1.0.1 Removed some incorrect include for ga002 and ga004 +; 1.0.0 Removed PIC24FxxKAyyy stuff, se separate fw +; 0.9.1 Added pps equ +; 0.9.0 First version of this file +; +;------------------------------------------------------------------------------ + +;----------------------------------------------------------------------------- +; This file is part of ds30 Loader. +; +; ds30 Loader is free software: you can redistribute it and/or modify +; it under the terms of the GNU General Public License as published by +; the Free Software Foundation. +; +; ds30 Loader is distributed in the hope that it will be useful, +; but WITHOUT ANY WARRANTY; without even the implied warranty of +; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +; GNU General Public License for more details. +; +; You should have received a copy of the GNU General Public License +; along with ds30 Loader. If not, see . +;------------------------------------------------------------------------------ + + +;------------------------------------------------------------------------------ +; Devices PIC24F - 16kB +;------------------------------------------------------------------------------ +.ifdef __24FJ16GA002 + .include "p24FJ" + .equ VALID_DEV, 1 + .equ FLASHSIZE, 0x2C00 + .equ HAS_UART2, 1 + .equ DEVICEID, 206 + .equ HAS_PPS, 1 +.endif + +.ifdef __24FJ16GA004 + .include "p24FJ" + .equ VALID_DEV, 1 + .equ FLASHSIZE, 0x2C00 + .equ HAS_UART2, 1 + .equ DEVICEID, 207 + .equ HAS_PPS, 1 +.endif + + +;------------------------------------------------------------------------------ +; Devices PIC24F - 32kB +;------------------------------------------------------------------------------ +.ifdef __24FJ32GA002 + .equ VALID_DEV, 1 + .equ FLASHSIZE, 0x5800 + .equ HAS_UART2, 1 + .equ DEVICEID, 208 + .equ HAS_PPS, 1 +.endif + +.ifdef __24FJ32GA004 + .equ VALID_DEV, 1 + .equ FLASHSIZE, 0x5800 + .equ HAS_UART2, 1 + .equ DEVICEID, 209 + .equ HAS_PPS, 1 +.endif + + +;------------------------------------------------------------------------------ +; Devices PIC24F - 48kB +;------------------------------------------------------------------------------ +.ifdef __24FJ48GA002 + .equ VALID_DEV, 1 + .equ FLASHSIZE, 0x8400 + .equ HAS_UART2, 1 + .equ DEVICEID, 210 + .equ HAS_PPS, 1 +.endif + +.ifdef __24FJ48GA004 + .equ VALID_DEV, 1 + .equ FLASHSIZE, 0x8400 + .equ HAS_UART2, 1 + .equ DEVICEID, 211 + .equ HAS_PPS, 1 +.endif + + +;------------------------------------------------------------------------------ +; Devices PIC24F - 64kB +;------------------------------------------------------------------------------ +.ifdef __24FJ64GA002 + .equ VALID_DEV, 1 + .equ FLASHSIZE, 0xAC00 + .equ HAS_UART2, 1 + .equ DEVICEID, 212 + .equ HAS_PPS, 1 +.endif + +.ifdef __24FJ64GA004 + .equ VALID_DEV, 1 + .equ FLASHSIZE, 0xAC00 + .equ HAS_UART2, 1 + .equ DEVICEID, 213. + equ HAS_PPS, 1 +.endif + +.ifdef __24FJ64GA006 + .equ VALID_DEV, 1 + .equ FLASHSIZE, 0xAC00 + .equ HAS_UART2, 1 + .equ DEVICEID, 214 +.endif + +.ifdef __24FJ64GA008 + .equ VALID_DEV, 1 + .equ FLASHSIZE, 0xAC00 + .equ HAS_UART2, 1 + .equ DEVICEID, 215 +.endif + +.ifdef __24FJ64GA010 + .equ VALID_DEV, 1 + .equ FLASHSIZE, 0xAC00 + .equ HAS_UART2, 1 + .equ DEVICEID, 216 +.endif + +.ifdef __24FJ64GB106 + .equ VALID_DEV, 1 + .equ FLASHSIZE, 0xAC00 + .equ HAS_UART2, 1 + .equ HAS_UART3, 1 + .equ HAS_UART4, 1 + .equ DEVICEID, 217 + .equ HAS_PPS, 1 +.endif + +.ifdef __24FJ64GB108 + .equ VALID_DEV, 1 + .equ FLASHSIZE, 0xAC00 + .equ HAS_UART2, 1 + .equ DEVICEID, 218 + .equ HAS_UART3, 1 + .equ HAS_UART4, 1 + .equ HAS_PPS, 1 +.endif + +.ifdef __24FJ64GB110 + .equ VALID_DEV, 1 + .equ FLASHSIZE, 0xAC00 + .equ HAS_UART2, 1 + .equ DEVICEID, 219 + .equ HAS_UART3, 1 + .equ HAS_UART4, 1 + .equ HAS_PPS, 1 +.endif + + +;------------------------------------------------------------------------------ +; Devices PIC24F - 96kB +;------------------------------------------------------------------------------ +.ifdef __24FJ96GA006 + .equ VALID_DEV, 1 + .equ FLASHSIZE, 0x10000 + .equ HAS_UART2, 1 + .equ DEVICEID, 220 +.endif + +.ifdef __24FJ96GA008 + .equ VALID_DEV, 1 + .equ FLASHSIZE, 0x10000 + .equ HAS_UART2, 1 + .equ DEVICEID, 221 +.endif + +.ifdef __24FJ96GA010 + .equ VALID_DEV, 1 + .equ FLASHSIZE, 0x10000 + .equ HAS_UART2, 1 + .equ DEVICEID, 222 +.endif + + +;------------------------------------------------------------------------------ +; Devices PIC24F - 128kB +;------------------------------------------------------------------------------ +.ifdef __24FJ128GA006 + .equ VALID_DEV, 1 + .equ FLASHSIZE, 0x15800 + .equ HAS_UART2, 1 + .equ DEVICEID, 223 +.endif + +.ifdef __24FJ128GA008 + .equ VALID_DEV, 1 + .equ FLASHSIZE, 0x15800 + .equ HAS_UART2, 1 + .equ DEVICEID, 224 +.endif + +.ifdef __24FJ128GA010 + .equ VALID_DEV, 1 + .equ FLASHSIZE, 0x15800 + .equ HAS_UART2, 1 + .equ DEVICEID, 225 +.endif + +.ifdef __24FJ128GA106 + .equ VALID_DEV, 1 + .equ FLASHSIZE, 0x15800 + .equ HAS_UART2, 1 + .equ HAS_UART3, 1 + .equ HAS_UART4, 1 + .equ DEVICEID, 226 + .equ HAS_PPS, 1 +.endif + +.ifdef __24FJ128GA108 + .equ VALID_DEV, 1 + .equ FLASHSIZE, 0x15800 + .equ HAS_UART2, 1 + .equ HAS_UART3, 1 + .equ HAS_UART4, 1 + .equ DEVICEID, 227 + .equ HAS_PPS, 1 +.endif + +.ifdef __24FJ128GA110 + .equ VALID_DEV, 1 + .equ FLASHSIZE, 0x15800 + .equ HAS_UART2, 1 + .equ HAS_UART3, 1 + .equ HAS_UART4, 1 + .equ DEVICEID, 228 + .equ HAS_PPS, 1 +.endif + +.ifdef __24FJ128GB106 + .equ VALID_DEV, 1 + .equ FLASHSIZE, 0x15800 + .equ HAS_UART2, 1 + .equ HAS_UART3, 1 + .equ HAS_UART4, 1 + .equ DEVICEID, 229 + .equ HAS_PPS, 1 +.endif + +.ifdef __24FJ128GB108 + .equ VALID_DEV, 1 + .equ FLASHSIZE, 0x15800 + .equ HAS_UART2, 1 + .equ HAS_UART3, 1 + .equ HAS_UART4, 1 + .equ DEVICEID, 230 + .equ HAS_PPS, 1 +.endif + +.ifdef __24FJ128GB110 + .equ VALID_DEV, 1 + .equ FLASHSIZE, 0x15800 + .equ HAS_UART2, 1 + .equ HAS_UART3, 1 + .equ HAS_UART4, 1 + .equ DEVICEID, 231 + .equ HAS_PPS, 1 +.endif + + +;------------------------------------------------------------------------------ +; Devices PIC24F - 192kB +;------------------------------------------------------------------------------ +.ifdef __24FJ192GA106 + .equ VALID_DEV, 1 + .equ FLASHSIZE, 0x20C00 + .equ HAS_UART2, 1 + .equ HAS_UART3, 1 + .equ HAS_UART4, 1 + .equ DEVICEID, 232 + .equ HAS_PPS, 1 +.endif + +.ifdef __24FJ192GA108 + .equ VALID_DEV, 1 + .equ FLASHSIZE, 0x20C00 + .equ HAS_UART2, 1 + .equ HAS_UART3, 1 + .equ HAS_UART4, 1 + .equ DEVICEID, 233 + .equ HAS_PPS, 1 +.endif + +.ifdef __24FJ192GA110 + .equ VALID_DEV, 1 + .equ FLASHSIZE, 0x20C00 + .equ HAS_UART2, 1 + .equ HAS_UART3, 1 + .equ HAS_UART4, 1 + .equ DEVICEID, 234 + .equ HAS_PPS, 1 +.endif + +.ifdef __24FJ192GB106 + .equ VALID_DEV, 1 + .equ FLASHSIZE, 0x20C00 + .equ HAS_UART2, 1 + .equ HAS_UART3, 1 + .equ HAS_UART4, 1 + .equ DEVICEID, 235 + .equ HAS_PPS, 1 +.endif + +.ifdef __24FJ192GB108 + .equ VALID_DEV, 1 + .equ FLASHSIZE, 0x20C00 + .equ HAS_UART2, 1 + .equ HAS_UART3, 1 + .equ HAS_UART4, 1 + .equ DEVICEID, 236 + .equ HAS_PPS, 1 +.endif + +.ifdef __24FJ192GB110 + .equ VALID_DEV, 1 + .equ FLASHSIZE, 0x20C00 + .equ HAS_UART2, 1 + .equ HAS_UART3, 1 + .equ HAS_UART4, 1 + .equ DEVICEID, 237 + .equ HAS_PPS, 1 +.endif + + +;------------------------------------------------------------------------------ +; Devices PIC24F - 256kB +;------------------------------------------------------------------------------ +.ifdef __24FJ256GA106 + .equ VALID_DEV, 1 + .equ FLASHSIZE, 0x2AC00 + .equ HAS_UART2, 1 + .equ HAS_UART3, 1 + .equ HAS_UART4, 1 + .equ DEVICEID, 238 + .equ HAS_PPS, 1 +.endif + +.ifdef __24FJ256GA108 + .equ VALID_DEV, 1 + .equ FLASHSIZE, 0x2AC00 + .equ HAS_UART2, 1 + .equ HAS_UART3, 1 + .equ HAS_UART4, 1 + .equ DEVICEID, 239 + .equ HAS_PPS, 1 +.endif + +.ifdef __24FJ256GA110 + .equ VALID_DEV, 1 + .equ FLASHSIZE, 0x2AC00 + .equ HAS_UART2, 1 + .equ HAS_UART3, 1 + .equ HAS_UART4, 1 + .equ DEVICEID, 240 + .equ HAS_PPS, 1 +.endif + +.ifdef __24FJ256GB106 + .equ VALID_DEV, 1 + .equ FLASHSIZE, 0x2AC00 + .equ HAS_UART2, 1 + .equ HAS_UART3, 1 + .equ HAS_UART4, 1 + .equ DEVICEID, 241 + .equ HAS_PPS, 1 +.endif + +.ifdef __24FJ256GB108 + .equ VALID_DEV, 1 + .equ FLASHSIZE, 0x2AC00 + .equ HAS_UART2, 1 + .equ HAS_UART3, 1 + .equ HAS_UART4, 1 + .equ DEVICEID, 242 + .equ HAS_PPS, 1 +.endif + +.ifdef __24FJ256GB110 + .equ VALID_DEV, 1 + .equ FLASHSIZE, 0x2AC00 + .equ HAS_UART2, 1 + .equ HAS_UART3, 1 + .equ HAS_UART4, 1 + .equ DEVICEID, 243 + .equ HAS_PPS, 1 +.endif + + + +;------------------------------------------------------------------------------ +; +;------------------------------------------------------------------------------ +.ifndef VALID_DEV + .error "Unknown device specified" +.endif diff --git a/BPv3-bootloader/firmware-v4.5/ds30loader.X/nbproject/configurations.xml b/BPv3-bootloader/firmware-v4.5/ds30loader.X/nbproject/configurations.xml new file mode 100644 index 00000000..b21b9d55 --- /dev/null +++ b/BPv3-bootloader/firmware-v4.5/ds30loader.X/nbproject/configurations.xml @@ -0,0 +1,491 @@ + + + + + ../devices.inc + ../settings.inc + + + ../p24FJ64GA002.gld + + + ../ds30loader.s + + + Makefile + + + + .. + ../src + + Makefile + + + + localhost + PIC24FJ64GA002 + + + Simulator + XC16 + 1.26 + 4 + + + + + + + + + + false + false + + + + + false + + false + + false + false + false + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/BPv3-bootloader/firmware-v4.5/ds30loader.X/nbproject/project.xml b/BPv3-bootloader/firmware-v4.5/ds30loader.X/nbproject/project.xml new file mode 100644 index 00000000..ec8501c1 --- /dev/null +++ b/BPv3-bootloader/firmware-v4.5/ds30loader.X/nbproject/project.xml @@ -0,0 +1,17 @@ + + + com.microchip.mplab.nbide.embedded.makeproject + + + ds30loader + 56638f5c-bdc0-4c00-a106-d486861d9a16 + 0 + + + + inc + UTF-8 + + + + diff --git a/BPv3-bootloader/firmware-v4.5/ds30loader.mcp b/BPv3-bootloader/firmware-v4.5/ds30loader.mcp deleted file mode 100644 index 4e472e57..00000000 --- a/BPv3-bootloader/firmware-v4.5/ds30loader.mcp +++ /dev/null @@ -1,61 +0,0 @@ -[HEADER] -magic_cookie={66E99B07-E706-4689-9E80-9B2582898A13} -file_version=1.0 -device=PIC24FJ64GA002 -[PATH_INFO] -BuildDirPolicy=BuildDirIsSourceDir -dir_src= -dir_bin=.\output -dir_tmp=.\output -dir_sin= -dir_inc= -dir_lib= -dir_lkr= -[CAT_FILTERS] -filter_src=*.s -filter_inc=*.inc -filter_obj=*.o -filter_lib=*.a -filter_lkr=*.gld -[CAT_SUBFOLDERS] -subfolder_src= -subfolder_inc= -subfolder_obj= -subfolder_lib= -subfolder_lkr= -[FILE_SUBFOLDERS] -file_000=. -file_001=. -file_002=. -file_003=. -[GENERATED_FILES] -file_000=no -file_001=no -file_002=no -file_003=no -[OTHER_FILES] -file_000=no -file_001=no -file_002=no -file_003=no -[FILE_INFO] -file_000=src\ds30loader.s -file_001=src\settings.inc -file_002=src\devices.inc -file_003=C:\MC30\support\PIC24F\gld\p24FJ64GA002.gld -[SUITE_INFO] -suite_guid={F62E444C-B232-4066-9AB0-A6F4E5261396} -suite_state= -[TOOL_SETTINGS] -TS{7D9C6ECE-785D-44CB-BA22-17BF2E119622}=-g -TS{7DAC9A1D-4C45-45D6-B25A-D117C74E8F5A}=-Map="$(BINDIR_)$(TARGETBASE).map" -o"$(BINDIR_)$(TARGETBASE).$(TARGETSUFFIX)" -TS{509E5861-1E2A-483B-8B6B-CA8DB7F2DD78}= -[INSTRUMENTED_TRACE] -enable=0 -transport=0 -format=0 -[CUSTOM_BUILD] -Pre-Build= -Pre-BuildEnabled=1 -Post-Build= -Post-BuildEnabled=1 diff --git a/BPv3-bootloader/firmware-v4.5/ds30loader.mcw b/BPv3-bootloader/firmware-v4.5/ds30loader.mcw deleted file mode 100644 index 8bb60b3e..00000000 Binary files a/BPv3-bootloader/firmware-v4.5/ds30loader.mcw and /dev/null differ diff --git a/BPv3-bootloader/firmware-v4.5/src/ds30loader.s b/BPv3-bootloader/firmware-v4.5/ds30loader.s similarity index 96% rename from BPv3-bootloader/firmware-v4.5/src/ds30loader.s rename to BPv3-bootloader/firmware-v4.5/ds30loader.s index 81809c00..0231f748 100644 --- a/BPv3-bootloader/firmware-v4.5/src/ds30loader.s +++ b/BPv3-bootloader/firmware-v4.5/ds30loader.s @@ -1,615 +1,615 @@ -;------------------------------------------------------------------------------ -; Title: ds30 loader for PIC24FJ -; Modified for Bus Pirate v2go, v3 -; -; File description: Main firmwarefile -; -; Copyright: Copyright © 2009, Mikael Gustafsson -; -; Version 1.0.2 november 2009 -; -; Webpage: http://mrmackey.no-ip.org/elektronik/ds30loader/ -; -; History: 1.0.2 Erase is now made just before write to increase reliability -; 1.0.1 Fixed baudrate error check -; 1.0.0 Added flash verification -; Removed PIC24FxxKAyyy stuff, se separate fw -; Corrected buffer variable location to .bss -; Buffer is now properly sized -; 0.9.1 Removed initialization of stack limit register -; BRG is rounded instead of truncated -; Removed frc+pll option -; Added pps code -; Added baudrate error check -; 0.9.0 First version released, based on the dsPIC33F version - -;------------------------------------------------------------------------------ - -;----------------------------------------------------------------------------- -; This file is part of ds30 Loader. -; -; ds30 Loader is free software: you can redistribute it and/or modify -; it under the terms of the GNU General Public License as published by -; the Free Software Foundation. -; -; ds30 Loader is distributed in the hope that it will be useful, -; but WITHOUT ANY WARRANTY; without even the implied warranty of -; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -; GNU General Public License for more details. -; -; You should have received a copy of the GNU General Public License -; along with ds30 Loader. If not, see . -;------------------------------------------------------------------------------ - -;------------------------------------------------------------------------------ -; -; USAGE USAGE USAGE USAGE USAGE USAGE USAGE USAGE USAGE USAGE USAGE -; -;------------------------------------------------------------------------------ -; -; -; To use other chip and/or configuration you need to do: -; * Select correct device in MPLAB IDE, menu Configure->Select Device -; * Include correct linker script -; * Search for xxx in settings.inc and check/alter those lines -; * If your device has the PPS(peripheral pin select) feature you need to configure that, template below, search for xxx -; * Put your own code in this file at designated areas, like i/o initialization etc. (optional) -; * No device specific errata workarounds are implemented in the code below -; -; Tabsize used is 4 -; -;------------------------------------------------------------------------------ - - -;------------------------------------------------------------------------------ -; Register usage -;------------------------------------------------------------------------------ - ;.equ MIXED, W0 ;immediate - .equ DOERASE, W1 ;flag indicated erase should be done before next write - .equ WBUFPTR, W2 ;buffer pointer - .equ WCNT, W3 ;loop counter - .equ WADDR2, W4 ;memory pointer - .equ WADDR, W5 ;memory pointer - .equ PPSTEMP1, W6 ;used to restore pps register - .equ PPSTEMP2, W7 ;used to restore pps register - .equ WFWJUMP, W8 ;did we jump here from the firmware? - ;.equ UNUSED, W9 ; - .equ WDEL1, W10 ;delay outer - .equ WDEL2, W11 ;delay inner - ;.equ UNUSED, W12 ; - .equ WCMD, W13 ;command - .equ WCRC, W14 ;checksum - .equ WSTPTR, W15 ;stack pointer - - -;------------------------------------------------------------------------------ -; Includes -;------------------------------------------------------------------------------ - .include "settings.inc" - - -;----------------------------------------------------------------------------- -; UARTs -;------------------------------------------------------------------------------ - .ifndef USE_UART1 - .ifndef USE_UART2 - .ifndef USE_UART3 - .ifndef USE_UART4 - .error "No uart is specified" - .endif - .endif - .endif - .endif - - .ifdef USE_UART1 - .ifdef USE_UART2 - .error "Multiple uarts specified" - .endif - .ifdef USE_UART3 - .error "Multiple uarts specified" - .endif - .ifdef USE_UART4 - .error "Multiple uarts specified" - .endif - - .equ UMODE, U1MODE ;uart mode - .equ USTA, U1STA ;uart status - .equ UBRG, U1BRG ;uart baudrate - .equ UTXREG, U1TXREG ;uart transmit - .equ URXREG, U1RXREG ;uart receive - .equ UIFS, IFS0 ;uart interupt flag sfr - .equ URXIF, U1RXIF ;uart received interupt flag - .equ UTXIF, U1TXIF ;uart transmit interupt flag - .endif - -;------------------------------------------------------------------------------ -; Constants, don´t change -;------------------------------------------------------------------------------ - .equ VERMAJ, 1 /*firmware version major*/ - .equ VERMIN, 0 /*fimrware version minor*/ - .equ VERREV, 2 /*firmware version revision*/ - - .equ HELLO, 0xC1 - .equ OK, 'K' /*erase/write ok*/ - .equ CHECKSUMERR,'N' /*checksum error*/ - .equ VERFAIL, 'V' /*verification failed*/ - .equ BLPROT, 'P' /*bl protection tripped*/ - - - .equ BLDELAY, ( BLTIME * (FCY / 1000) / (65536 * 7) ) /*delay berfore user application is loaded*/ - ;.equ UARTBR, ( (((FCY / BAUDRATE) / 8) - 1) / 2 ) /*baudrate*/ - /* issue 11 in errata for A3, optimal value causes reception to fail */ - /* autocalculate: 0x21, <2.5% error */ - /* working: 0x22, <3% error, same as main firmware */ - .equ UARTBR, 0x22;((FCY/(4*BAUDRATE))-1) - .equ PAGESIZE, 512 /*words*/ - .equ ROWSIZE, 64 /*words*/ -; .equ STARTADDR, ( FLASHSIZE - 2*(PAGESIZE * 2) ) /*place bootloader in 2nd last program page*/ - .equ STARTADDR, ( FLASHSIZE - (2* (PAGESIZE)) ) /*place bootloader in last program page*/ - .equ BLCHECKST, ( STARTADDR - (ROWSIZE) ) /*precalculate the first row write position that would overwrite the bootloader*/ - .equ BLVERSION, 0x0405 ;bootloader version for Bus Pirate firmware (located at last instruction before flash config words) -;------------------------------------------------------------------------------ -; Validate user settings -;------------------------------------------------------------------------------ - ; Internal cycle clock - .if FCY > 16000000 - .error "Fcy specified is out of range" - .endif - - ; Baudrate error - .equ REALBR, ( FCY / (4 * (UARTBR+1)) ) - .equ BAUDERR, ( (1000 * ( BAUDRATE - REALBR)) / BAUDRATE ) - .if ( BAUDERR > 30) || (BAUDERR < -30 ) - .error "Baudrate error is more than 3%. Remove this check or try another baudrate and/or clockspeed." - .endif - - .if BLDELAY<1 - .error "Bootloader delay is 0" - .endif - - -;------------------------------------------------------------------------------ -; Global declarations -;------------------------------------------------------------------------------ - .global __reset ;the label for the first line of code, needed by the linker script - - -;------------------------------------------------------------------------------ -; Uninitialized variables in data memory -;------------------------------------------------------------------------------ - .bss -buffer: .space ( ROWSIZE * 3 + 1/*checksum*/ ) - - -;------------------------------------------------------------------------------ -; Send macro -;------------------------------------------------------------------------------ - .macro SendL char - mov #\char, W0 - mov W0, UTXREG - .endm - -;------------------------------------------------------------------------------ -; variables at the end of the bootloader page -;------------------------------------------------------------------------------ - .section *, code, address(STARTADDR+(PAGESIZE*2)-8) -bljump: bra firmwarejump ;main program jump here to access bootloader -blver: .word BLVERSION ;bootloader major and minor version - - -;------------------------------------------------------------------------------ -; Start of code section in program memory -;------------------------------------------------------------------------------ - .section *, code, address(STARTADDR-4) -usrapp: nopr ;these two instructions will be replaced - nopr ;with a goto to the user app. by the pc program - - -;------------------------------------------------------------------------------ -; Reset vector -;------------------------------------------------------------------------------ - .section *, code, address(STARTADDR) -__reset:mov #__SP_init, WSTPTR ;initalize the Stack Pointer - - -;------------------------------------------------------------------------------ -; User specific entry code go here, see also user exit code section at end of file -;------------------------------------------------------------------------------ - bclr OSCCON, #SOSCEN - bclr CLKDIV, #RCDIV0 ;set clock divider to 0 -waitPLL:btss OSCCON, #LOCK - bra waitPLL ;wait for the PLL to lock - - mov #0xFFFF, W0 ;all pins to digital - mov W0, AD1PCFG - -;jumper check test - ;setup the jumper check - ;enable input on PGx - bclr LATB, #LATB1 ;rb1 low - bset TRISB, #TRISB1 ;rb1 input - bset CNPU1, #CN5PUE ;enable pullups on PGC/CN5/RB1 - ;ground/output on PGx - bclr LATB, #RB0 ;rb0 low - bclr TRISB, #TRISB0 ;rb0 output - ;wait - nop - nop - ;check for jumper - btsc PORTB,#RB1 ;skip next instruction if RB1=0 (jumper) - bra quit ;branch to the user application if RB1=0 - - clr WFWJUMP ;we came from jumper and reset, not firmware jump - - ;---------------------------------------------------------------------- - ; UART pps config - ;---------------------------------------------------------------------- -setup: - .ifdef BUSPIRATEV2 - ; Backup, these are restored in exit code at end of file - ; Changes needs to be done in exit, search for xxx - mov RPINR18, PPSTEMP1 ;xxx - mov RPOR2, PPSTEMP2 ;xxx - - ; Receive, map pin to uart (RP5 on 2/3, RP3 on v1a) - bset RPINR18, #U1RXR0 ;xxx - bclr RPINR18, #U1RXR1 ;xxx - bset RPINR18, #U1RXR2 ;xxx - bclr RPINR18, #U1RXR3 ;xxx - bclr RPINR18, #U1RXR4 ;xxx - - ; Transmit, map uart to pin (RPOR2bits.RP4R = 3 on 2/3, RPOR1bits.RP2R=3 on v1a) - bset RPOR2, #RP4R0 ;xxx - bset RPOR2, #RP4R1 ;xxx - bclr RPOR2, #RP4R2 ;xxx - bclr RPOR2, #RP4R3 ;xxx - bclr RPOR2, #RP4R4 ;xxx - - ;MODE LED on during bootload (A1 on 2/3, B4 on v1a) - bset LATA, #LATA1 ;on - bclr TRISA, #TRISA1 ;output - .endif - - - .ifdef BUSPIRATEV1A - ; Backup, these are restored in exit code at end of file - ; Changes needs to be done in exit, search for xxx - mov RPINR18, PPSTEMP1 ;xxx - mov RPOR1, PPSTEMP2 ;xxx - - ; Receive, map pin to uart (RP5 on 2/3, RP3 on v1a) - bset RPINR18, #U1RXR0 ;xxx - bset RPINR18, #U1RXR1 ;xxx - bclr RPINR18, #U1RXR2 ;xxx - bclr RPINR18, #U1RXR3 ;xxx - bclr RPINR18, #U1RXR4 ;xxx - - ; Transmit, map uart to pin (RPOR2bits.RP4R = 3 on 2/3, RPOR1bits.RP2R=3 on v1a) - bset RPOR1, #RP2R0 ;xxx - bset RPOR1, #RP2R1 ;xxx - bclr RPOR1, #RP2R2 ;xxx - bclr RPOR1, #RP2R3 ;xxx - bclr RPOR1, #RP2R4 ;xxx - - ;MODE LED on during bootload (A1 on 2/3, B4 on v1a) - bset LATB, #LATB4 ;on - bclr TRISB, #TRISB4 ;output - .endif - - -;------------------------------------------------------------------------------ -; Init -;------------------------------------------------------------------------------ - clr DOERASE - - ;UART - mov #UARTBR, W0 ;set - mov W0, UBRG ; baudrate - bset UMODE, #BRGH ;enable BRGH - bset UMODE, #UARTEN ;enable UART - bset USTA, #UTXEN ;enable TX - - -;------------------------------------------------------------------------------ -; Receive hello -;------------------------------------------------------------------------------ - rcall Receive - sub #HELLO, W0 ;check - bra z, helloOK ; prompt - sub #'#', W0 ;check - bra z, exit ; prompt - - SendL 'B' - SendL 'L' - SendL '4' - SendL '+' - bra checkexit - - -;------------------------------------------------------------------------------ -; Send device id and firmware version -;------------------------------------------------------------------------------ -helloOK:SendL DEVICEID - SendL VERMAJ - SendL (VERMIN*16 + VERREV) - - -;------------------------------------------------------------------------------ -; Main -;------------------------------------------------------------------------------ - ; Send ok -Main: SendL OK - - ; Init checksum -main1: clr WCRC - - - ;---------------------------------------------------------------------- - ; Receive address - ;---------------------------------------------------------------------- - ; Upper byte - rcall Receive - mov W0, TBLPAG - ; High byte, use PR1 as temporary sfr - rcall Receive - mov.b WREG, PR1+1 - ; Low byte, use PR1 as temporary sfr - rcall Receive - mov.b WREG, PR1 - ; - mov PR1, WREG - mov W0, WADDR - mov W0, WADDR2 - - - ;---------------------------------------------------------------------- - ; Receive command - ;---------------------------------------------------------------------- - rcall Receive - mov W0, WCMD - - - ;---------------------------------------------------------------------- - ; Receive nr of data bytes that will follow - ;---------------------------------------------------------------------- - rcall Receive - mov W0, WCNT - - - ;---------------------------------------------------------------------- - ; Receive data - ;---------------------------------------------------------------------- - mov #buffer, WBUFPTR -rcvdata: - rcall Receive - mov.b W0, [WBUFPTR++] - dec WCNT, WCNT - bra nz, rcvdata ;last byte received is checksum - - - ;---------------------------------------------------------------------- - ; Check checksum - ;---------------------------------------------------------------------- - cp0.b WCRC - bra z, bladdrchk - SendL CHECKSUMERR - bra main1 - - - - - ;---------------------------------------------------------------------- - ; Check address - ;---------------------------------------------------------------------- - ;check that write and erase range does not overlap the bootloader - ;this is pretty specific to the bootloader being in the last page - ;additional checks are needed if your bootloader is located elsewhere. - ;TBLPAG is always = to 0 on this PIC, no need to verify (check if you have bigger than 64K flash) - - ;check the end address - ;write row size is fixed, any writes at (bootloader start-63) are an error - ;if write end address (W0) is <= bl start address (WCNT) then OK - ;= is ok because we don't DEC after adding, write 10 bytes to 10 = end at 19 -bladdrchk:mov #BLCHECKST, WCNT ;last row write postion that won't overwrite the bootloader - cp WADDR, WCNT ;compare end address, does it overlap? - bra GTU, bladdrerror ;if greater unsigned then error - ;protect the jump instruction - ;check if this is row 0 - ;row 0 ends at 0x3f - ;mov #0x003f, WCNT - cp0 WADDR ;, WCNT ;compare address and end of first row, - bra NZ, ptrinit ;if greater than unsigned, then OK - ;insert the correct jump address - ;4 00 a8 00 00 00 - mov #buffer, WBUFPTR - mov.b #0x04, W0 - mov.b W0, [WBUFPTR++] ;upper byte - mov.b #(0xff & STARTADDR), W0 - mov.b W0, [WBUFPTR++] ;low byte - mov.b #(0xff & (STARTADDR>>8)), W0 - mov.b W0, [WBUFPTR++] ;high byte - mov.b #0x00, W0 - mov.b W0, [WBUFPTR++] ;upper byte - mov.b #(0xff & (STARTADDR>>16)), W0 - mov.b W0, [WBUFPTR++] ;low byte - mov.b #0x00, W0 - mov.b W0, [WBUFPTR++] ;high byte - bra ptrinit ;continue below - - ;handle the address error -bladdrerror:clr DOERASE ;clear, just in case - SendL BLPROT ;send bootloader protection error - bra main1 ; - - ;---------------------------------------------------------------------- - ; Init pointer - ;---------------------------------------------------------------------- -ptrinit:mov #buffer, WBUFPTR - - ;---------------------------------------------------------------------- - ; Check command - ;---------------------------------------------------------------------- - ; Write row 0x00 02 00 - 0x02 AB FA - btsc WCMD, #1 - bra erase - ; Else erase page - mov #0xffff, DOERASE - bra Main - - - ;---------------------------------------------------------------------- - ; Erase page - ;---------------------------------------------------------------------- -erase: btss DOERASE, #0 - bra program - tblwtl WADDR, [WADDR] ;"Set base address of erase block", equivalent to setting nvmadr/u in dsPIC30F? - ; Erase - mov #0x4042, W0 - rcall Write - ; Erase finished - clr DOERASE - - - ;---------------------------------------------------------------------- - ; Write row - ;---------------------------------------------------------------------- -program:mov #ROWSIZE, WCNT - ; Load latches -latlo: tblwth.b [WBUFPTR++], [WADDR] ;upper byte - tblwtl.b [WBUFPTR++], [WADDR++] ;low byte - tblwtl.b [WBUFPTR++], [WADDR++] ;high byte - dec WCNT, WCNT - bra nz, latlo - ; Write flash row - mov #0x4001, W0 - rcall Write - - - ;---------------------------------------------------------------------- - ; Verify row - ;---------------------------------------------------------------------- - mov #ROWSIZE, WCNT - mov #buffer, WBUFPTR - ; Verify upper byte -verrow: tblrdh.b [WADDR2], W0 - cp.b W0, [WBUFPTR++] - bra NZ, vfail - ; Verify low byte - tblrdl.b [WADDR2++], W0 - cp.b W0, [WBUFPTR++] - bra NZ, vfail - ; Verify high byte - tblrdl.b [WADDR2++], W0 - cp.b W0, [WBUFPTR++] - bra NZ, vfail - ; Loop - dec WCNT, WCNT - bra nz, verrow - ; Verify completed without errors - bra Main - - - ;---------------------------------------------------------------------- - ; Verify fail - ;---------------------------------------------------------------------- -vfail: SendL VERFAIL - bra main1 - - -;------------------------------------------------------------------------------ -; Write -;------------------------------------------------------------------------------ -Write: mov W0, NVMCON - mov #0x55, W0 - mov W0, NVMKEY - mov #0xAA, W0 - mov W0, NVMKEY - bset NVMCON, #WR - nop - nop - ; Wait for erase/write to finish -compl: btsc NVMCON, #WR - bra compl - return - - -;------------------------------------------------------------------------------ -; Receive -;------------------------------------------------------------------------------ - ; Init delay -Receive:mov #BLDELAY, WDEL1 - ; Check for received byte -rpt1: clr WDEL2 -rptc: clrwdt ;clear watchdog - btss USTA, #URXDA - bra notrcv - mov URXREG, W0 - add WCRC, W0, WCRC ;add to checksum - return - ; Delay -notrcv: dec WDEL2, WDEL2 - bra nz, rptc - dec WDEL1, WDEL1 - bra nz, rpt1 - ; If we get here, uart receive timed out - mov #__SP_init, WSTPTR ;reinitialize the Stack Pointer - -checkexit: - btss WFWJUMP,#0x00 ; skip next if bit0 is 1 (= jumped from bp) - btss PORTB,#RB1;if we time out and jumper still attached, go to setup - bra setup - -;------------------------------------------------------------------------------ -; Exit point, clean up and load user application -;------------------------------------------------------------------------------ -exit: bclr UIFS, #URXIF ;clear uart received interupt flag - bclr UIFS, #UTXIF ;clear uart transmit interupt flag - bclr USTA, #UTXEN ;disable uart transmit - bclr UMODE, #UARTEN ;disable uart - clr PR1 ;clear PR1 was used as temporary sfr - -;------------------------------------------------------------------------------ -; User specific exit code go here -;------------------------------------------------------------------------------ - .ifdef BUSPIRATEV2 - ;MODE LED off - bclr LATA, #LATA1 ;off - bset TRISA, #TRISA1 ;input - ;restore PPS - mov PPSTEMP1, RPINR18 ;xxx restore - mov PPSTEMP2, RPOR2 ;xxx pps settings - .endif - - .ifdef BUSPIRATEV1A - ;MODE LED off - bclr LATB, #LATB4 ;off - bset TRISB, #TRISB4 ;input - ;restore PPS - mov PPSTEMP1, RPINR18 ;xxx restore - mov PPSTEMP2, RPOR1 ;xxx pps settings - .endif - -quit: ;clean up from jumper test - bclr CNPU1, #CN5PUE ;disable pullups on PGC/CN5/RB1 - bset TRISB, #TRISB0 ;rb0 back to input - mov #0x0000, W0 ;clear pins to analog default - mov W0, AD1PCFG - -;------------------------------------------------------------------------------ -; Load user application -;------------------------------------------------------------------------------ - bra usrapp - -;------------------------------------------------------------------------------ -; firmware jump entry point (kind of like a function because it's never reached from the above code -;------------------------------------------------------------------------------ -firmwarejump: - mov #0xffff, WFWJUMP ;flag that we jumped from firmware - bra setup ;jump to just after jumper check - -;------------------------------------------------------------------------------ -; End of code -;------------------------------------------------------------------------------ - .end - - +;------------------------------------------------------------------------------ +; Title: ds30 loader for PIC24FJ +; Modified for Bus Pirate v2go, v3 +; +; File description: Main firmwarefile +; +; Copyright: Copyright � 2009, Mikael Gustafsson +; +; Version 1.0.2 november 2009 +; +; Webpage: http://mrmackey.no-ip.org/elektronik/ds30loader/ +; +; History: 1.0.2 Erase is now made just before write to increase reliability +; 1.0.1 Fixed baudrate error check +; 1.0.0 Added flash verification +; Removed PIC24FxxKAyyy stuff, se separate fw +; Corrected buffer variable location to .bss +; Buffer is now properly sized +; 0.9.1 Removed initialization of stack limit register +; BRG is rounded instead of truncated +; Removed frc+pll option +; Added pps code +; Added baudrate error check +; 0.9.0 First version released, based on the dsPIC33F version + +;------------------------------------------------------------------------------ + +;----------------------------------------------------------------------------- +; This file is part of ds30 Loader. +; +; ds30 Loader is free software: you can redistribute it and/or modify +; it under the terms of the GNU General Public License as published by +; the Free Software Foundation. +; +; ds30 Loader is distributed in the hope that it will be useful, +; but WITHOUT ANY WARRANTY; without even the implied warranty of +; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +; GNU General Public License for more details. +; +; You should have received a copy of the GNU General Public License +; along with ds30 Loader. If not, see . +;------------------------------------------------------------------------------ + +;------------------------------------------------------------------------------ +; +; USAGE USAGE USAGE USAGE USAGE USAGE USAGE USAGE USAGE USAGE USAGE +; +;------------------------------------------------------------------------------ +; +; +; To use other chip and/or configuration you need to do: +; * Select correct device in MPLAB IDE, menu Configure->Select Device +; * Include correct linker script +; * Search for xxx in settings.inc and check/alter those lines +; * If your device has the PPS(peripheral pin select) feature you need to configure that, template below, search for xxx +; * Put your own code in this file at designated areas, like i/o initialization etc. (optional) +; * No device specific errata workarounds are implemented in the code below +; +; Tabsize used is 4 +; +;------------------------------------------------------------------------------ + + +;------------------------------------------------------------------------------ +; Register usage +;------------------------------------------------------------------------------ + ;.equ MIXED, W0 ;immediate + .equ DOERASE, W1 ;flag indicated erase should be done before next write + .equ WBUFPTR, W2 ;buffer pointer + .equ WCNT, W3 ;loop counter + .equ WADDR2, W4 ;memory pointer + .equ WADDR, W5 ;memory pointer + .equ PPSTEMP1, W6 ;used to restore pps register + .equ PPSTEMP2, W7 ;used to restore pps register + .equ WFWJUMP, W8 ;did we jump here from the firmware? + ;.equ UNUSED, W9 ; + .equ WDEL1, W10 ;delay outer + .equ WDEL2, W11 ;delay inner + ;.equ UNUSED, W12 ; + .equ WCMD, W13 ;command + .equ WCRC, W14 ;checksum + .equ WSTPTR, W15 ;stack pointer + + +;------------------------------------------------------------------------------ +; Includes +;------------------------------------------------------------------------------ + .include "settings.inc" + + +;----------------------------------------------------------------------------- +; UARTs +;------------------------------------------------------------------------------ + .ifndef USE_UART1 + .ifndef USE_UART2 + .ifndef USE_UART3 + .ifndef USE_UART4 + .error "No uart is specified" + .endif + .endif + .endif + .endif + + .ifdef USE_UART1 + .ifdef USE_UART2 + .error "Multiple uarts specified" + .endif + .ifdef USE_UART3 + .error "Multiple uarts specified" + .endif + .ifdef USE_UART4 + .error "Multiple uarts specified" + .endif + + .equ UMODE, U1MODE ;uart mode + .equ USTA, U1STA ;uart status + .equ UBRG, U1BRG ;uart baudrate + .equ UTXREG, U1TXREG ;uart transmit + .equ URXREG, U1RXREG ;uart receive + .equ UIFS, IFS0 ;uart interupt flag sfr + .equ URXIF, U1RXIF ;uart received interupt flag + .equ UTXIF, U1TXIF ;uart transmit interupt flag + .endif + +;------------------------------------------------------------------------------ +; Constants, don�t change +;------------------------------------------------------------------------------ + .equ VERMAJ, 1 /*firmware version major*/ + .equ VERMIN, 0 /*fimrware version minor*/ + .equ VERREV, 2 /*firmware version revision*/ + + .equ HELLO, 0xC1 + .equ OK, 'K' /*erase/write ok*/ + .equ CHECKSUMERR,'N' /*checksum error*/ + .equ VERFAIL, 'V' /*verification failed*/ + .equ BLPROT, 'P' /*bl protection tripped*/ + + + .equ BLDELAY, ( BLTIME * (FCY / 1000) / (65536 * 7) ) /*delay berfore user application is loaded*/ + ;.equ UARTBR, ( (((FCY / BAUDRATE) / 8) - 1) / 2 ) /*baudrate*/ + /* issue 11 in errata for A3, optimal value causes reception to fail */ + /* autocalculate: 0x21, <2.5% error */ + /* working: 0x22, <3% error, same as main firmware */ + .equ UARTBR, 0x22;((FCY/(4*BAUDRATE))-1) + .equ PAGESIZE, 512 /*words*/ + .equ ROWSIZE, 64 /*words*/ +; .equ STARTADDR, ( FLASHSIZE - 2*(PAGESIZE * 2) ) /*place bootloader in 2nd last program page*/ + .equ STARTADDR, ( FLASHSIZE - (2* (PAGESIZE)) ) /*place bootloader in last program page*/ + .equ BLCHECKST, ( STARTADDR - (ROWSIZE) ) /*precalculate the first row write position that would overwrite the bootloader*/ + .equ BLVERSION, 0x0405 ;bootloader version for Bus Pirate firmware (located at last instruction before flash config words) +;------------------------------------------------------------------------------ +; Validate user settings +;------------------------------------------------------------------------------ + ; Internal cycle clock + .if FCY > 16000000 + .error "Fcy specified is out of range" + .endif + + ; Baudrate error + .equ REALBR, ( FCY / (4 * (UARTBR+1)) ) + .equ BAUDERR, ( (1000 * ( BAUDRATE - REALBR)) / BAUDRATE ) + .if ( BAUDERR > 30) || (BAUDERR < -30 ) + .error "Baudrate error is more than 3%. Remove this check or try another baudrate and/or clockspeed." + .endif + + .if BLDELAY<1 + .error "Bootloader delay is 0" + .endif + + +;------------------------------------------------------------------------------ +; Global declarations +;------------------------------------------------------------------------------ + .global __reset ;the label for the first line of code, needed by the linker script + + +;------------------------------------------------------------------------------ +; Uninitialized variables in data memory +;------------------------------------------------------------------------------ + .bss +buffer: .space ( ROWSIZE * 3 + 1/*checksum*/ ) + + +;------------------------------------------------------------------------------ +; Send macro +;------------------------------------------------------------------------------ + .macro SendL char + mov #\char, W0 + mov W0, UTXREG + .endm + +;------------------------------------------------------------------------------ +; variables at the end of the bootloader page +;------------------------------------------------------------------------------ + .section *, code, address(STARTADDR+(PAGESIZE*2)-8) +bljump: bra firmwarejump ;main program jump here to access bootloader +blver: .word BLVERSION ;bootloader major and minor version + + +;------------------------------------------------------------------------------ +; Start of code section in program memory +;------------------------------------------------------------------------------ + .section *, code, address(STARTADDR-4) +usrapp: nopr ;these two instructions will be replaced + nopr ;with a goto to the user app. by the pc program + + +;------------------------------------------------------------------------------ +; Reset vector +;------------------------------------------------------------------------------ + .section *, code, address(STARTADDR) +__reset:mov #__SP_init, WSTPTR ;initalize the Stack Pointer + + +;------------------------------------------------------------------------------ +; User specific entry code go here, see also user exit code section at end of file +;------------------------------------------------------------------------------ + bclr OSCCON, #SOSCEN + bclr CLKDIV, #RCDIV0 ;set clock divider to 0 +waitPLL:btss OSCCON, #LOCK + bra waitPLL ;wait for the PLL to lock + + mov #0xFFFF, W0 ;all pins to digital + mov W0, AD1PCFG + +;jumper check test + ;setup the jumper check + ;enable input on PGx + bclr LATB, #LATB1 ;rb1 low + bset TRISB, #TRISB1 ;rb1 input + bset CNPU1, #CN5PUE ;enable pullups on PGC/CN5/RB1 + ;ground/output on PGx + bclr LATB, #RB0 ;rb0 low + bclr TRISB, #TRISB0 ;rb0 output + ;wait + nop + nop + ;check for jumper + btsc PORTB,#RB1 ;skip next instruction if RB1=0 (jumper) + bra quit ;branch to the user application if RB1=0 + + clr WFWJUMP ;we came from jumper and reset, not firmware jump + + ;---------------------------------------------------------------------- + ; UART pps config + ;---------------------------------------------------------------------- +setup: + .ifdef BUSPIRATEV2 + ; Backup, these are restored in exit code at end of file + ; Changes needs to be done in exit, search for xxx + mov RPINR18, PPSTEMP1 ;xxx + mov RPOR2, PPSTEMP2 ;xxx + + ; Receive, map pin to uart (RP5 on 2/3, RP3 on v1a) + bset RPINR18, #U1RXR0 ;xxx + bclr RPINR18, #U1RXR1 ;xxx + bset RPINR18, #U1RXR2 ;xxx + bclr RPINR18, #U1RXR3 ;xxx + bclr RPINR18, #U1RXR4 ;xxx + + ; Transmit, map uart to pin (RPOR2bits.RP4R = 3 on 2/3, RPOR1bits.RP2R=3 on v1a) + bset RPOR2, #RP4R0 ;xxx + bset RPOR2, #RP4R1 ;xxx + bclr RPOR2, #RP4R2 ;xxx + bclr RPOR2, #RP4R3 ;xxx + bclr RPOR2, #RP4R4 ;xxx + + ;MODE LED on during bootload (A1 on 2/3, B4 on v1a) + bset LATA, #LATA1 ;on + bclr TRISA, #TRISA1 ;output + .endif + + + .ifdef BUSPIRATEV1A + ; Backup, these are restored in exit code at end of file + ; Changes needs to be done in exit, search for xxx + mov RPINR18, PPSTEMP1 ;xxx + mov RPOR1, PPSTEMP2 ;xxx + + ; Receive, map pin to uart (RP5 on 2/3, RP3 on v1a) + bset RPINR18, #U1RXR0 ;xxx + bset RPINR18, #U1RXR1 ;xxx + bclr RPINR18, #U1RXR2 ;xxx + bclr RPINR18, #U1RXR3 ;xxx + bclr RPINR18, #U1RXR4 ;xxx + + ; Transmit, map uart to pin (RPOR2bits.RP4R = 3 on 2/3, RPOR1bits.RP2R=3 on v1a) + bset RPOR1, #RP2R0 ;xxx + bset RPOR1, #RP2R1 ;xxx + bclr RPOR1, #RP2R2 ;xxx + bclr RPOR1, #RP2R3 ;xxx + bclr RPOR1, #RP2R4 ;xxx + + ;MODE LED on during bootload (A1 on 2/3, B4 on v1a) + bset LATB, #LATB4 ;on + bclr TRISB, #TRISB4 ;output + .endif + + +;------------------------------------------------------------------------------ +; Init +;------------------------------------------------------------------------------ + clr DOERASE + + ;UART + mov #UARTBR, W0 ;set + mov W0, UBRG ; baudrate + bset UMODE, #BRGH ;enable BRGH + bset UMODE, #UARTEN ;enable UART + bset USTA, #UTXEN ;enable TX + + +;------------------------------------------------------------------------------ +; Receive hello +;------------------------------------------------------------------------------ + rcall Receive + sub #HELLO, W0 ;check + bra z, helloOK ; prompt + sub #'#', W0 ;check + bra z, exit ; prompt + + SendL 'B' + SendL 'L' + SendL '4' + SendL '+' + bra checkexit + + +;------------------------------------------------------------------------------ +; Send device id and firmware version +;------------------------------------------------------------------------------ +helloOK:SendL DEVICEID + SendL VERMAJ + SendL (VERMIN*16 + VERREV) + + +;------------------------------------------------------------------------------ +; Main +;------------------------------------------------------------------------------ + ; Send ok +Main: SendL OK + + ; Init checksum +main1: clr WCRC + + + ;---------------------------------------------------------------------- + ; Receive address + ;---------------------------------------------------------------------- + ; Upper byte + rcall Receive + mov W0, TBLPAG + ; High byte, use PR1 as temporary sfr + rcall Receive + mov.b WREG, PR1+1 + ; Low byte, use PR1 as temporary sfr + rcall Receive + mov.b WREG, PR1 + ; + mov PR1, WREG + mov W0, WADDR + mov W0, WADDR2 + + + ;---------------------------------------------------------------------- + ; Receive command + ;---------------------------------------------------------------------- + rcall Receive + mov W0, WCMD + + + ;---------------------------------------------------------------------- + ; Receive nr of data bytes that will follow + ;---------------------------------------------------------------------- + rcall Receive + mov W0, WCNT + + + ;---------------------------------------------------------------------- + ; Receive data + ;---------------------------------------------------------------------- + mov #buffer, WBUFPTR +rcvdata: + rcall Receive + mov.b W0, [WBUFPTR++] + dec WCNT, WCNT + bra nz, rcvdata ;last byte received is checksum + + + ;---------------------------------------------------------------------- + ; Check checksum + ;---------------------------------------------------------------------- + cp0.b WCRC + bra z, bladdrchk + SendL CHECKSUMERR + bra main1 + + + + + ;---------------------------------------------------------------------- + ; Check address + ;---------------------------------------------------------------------- + ;check that write and erase range does not overlap the bootloader + ;this is pretty specific to the bootloader being in the last page + ;additional checks are needed if your bootloader is located elsewhere. + ;TBLPAG is always = to 0 on this PIC, no need to verify (check if you have bigger than 64K flash) + + ;check the end address + ;write row size is fixed, any writes at (bootloader start-63) are an error + ;if write end address (W0) is <= bl start address (WCNT) then OK + ;= is ok because we don't DEC after adding, write 10 bytes to 10 = end at 19 +bladdrchk:mov #BLCHECKST, WCNT ;last row write postion that won't overwrite the bootloader + cp WADDR, WCNT ;compare end address, does it overlap? + bra GTU, bladdrerror ;if greater unsigned then error + ;protect the jump instruction + ;check if this is row 0 + ;row 0 ends at 0x3f + ;mov #0x003f, WCNT + cp0 WADDR ;, WCNT ;compare address and end of first row, + bra NZ, ptrinit ;if greater than unsigned, then OK + ;insert the correct jump address + ;4 00 a8 00 00 00 + mov #buffer, WBUFPTR + mov.b #0x04, W0 + mov.b W0, [WBUFPTR++] ;upper byte + mov.b #(0xff & STARTADDR), W0 + mov.b W0, [WBUFPTR++] ;low byte + mov.b #(0xff & (STARTADDR>>8)), W0 + mov.b W0, [WBUFPTR++] ;high byte + mov.b #0x00, W0 + mov.b W0, [WBUFPTR++] ;upper byte + mov.b #(0xff & (STARTADDR>>16)), W0 + mov.b W0, [WBUFPTR++] ;low byte + mov.b #0x00, W0 + mov.b W0, [WBUFPTR++] ;high byte + bra ptrinit ;continue below + + ;handle the address error +bladdrerror:clr DOERASE ;clear, just in case + SendL BLPROT ;send bootloader protection error + bra main1 ; + + ;---------------------------------------------------------------------- + ; Init pointer + ;---------------------------------------------------------------------- +ptrinit:mov #buffer, WBUFPTR + + ;---------------------------------------------------------------------- + ; Check command + ;---------------------------------------------------------------------- + ; Write row 0x00 02 00 - 0x02 AB FA + btsc WCMD, #1 + bra erase + ; Else erase page + mov #0xffff, DOERASE + bra Main + + + ;---------------------------------------------------------------------- + ; Erase page + ;---------------------------------------------------------------------- +erase: btss DOERASE, #0 + bra program + tblwtl WADDR, [WADDR] ;"Set base address of erase block", equivalent to setting nvmadr/u in dsPIC30F? + ; Erase + mov #0x4042, W0 + rcall Write + ; Erase finished + clr DOERASE + + + ;---------------------------------------------------------------------- + ; Write row + ;---------------------------------------------------------------------- +program:mov #ROWSIZE, WCNT + ; Load latches +latlo: tblwth.b [WBUFPTR++], [WADDR] ;upper byte + tblwtl.b [WBUFPTR++], [WADDR++] ;low byte + tblwtl.b [WBUFPTR++], [WADDR++] ;high byte + dec WCNT, WCNT + bra nz, latlo + ; Write flash row + mov #0x4001, W0 + rcall Write + + + ;---------------------------------------------------------------------- + ; Verify row + ;---------------------------------------------------------------------- + mov #ROWSIZE, WCNT + mov #buffer, WBUFPTR + ; Verify upper byte +verrow: tblrdh.b [WADDR2], W0 + cp.b W0, [WBUFPTR++] + bra NZ, vfail + ; Verify low byte + tblrdl.b [WADDR2++], W0 + cp.b W0, [WBUFPTR++] + bra NZ, vfail + ; Verify high byte + tblrdl.b [WADDR2++], W0 + cp.b W0, [WBUFPTR++] + bra NZ, vfail + ; Loop + dec WCNT, WCNT + bra nz, verrow + ; Verify completed without errors + bra Main + + + ;---------------------------------------------------------------------- + ; Verify fail + ;---------------------------------------------------------------------- +vfail: SendL VERFAIL + bra main1 + + +;------------------------------------------------------------------------------ +; Write +;------------------------------------------------------------------------------ +Write: mov W0, NVMCON + mov #0x55, W0 + mov W0, NVMKEY + mov #0xAA, W0 + mov W0, NVMKEY + bset NVMCON, #WR + nop + nop + ; Wait for erase/write to finish +compl: btsc NVMCON, #WR + bra compl + return + + +;------------------------------------------------------------------------------ +; Receive +;------------------------------------------------------------------------------ + ; Init delay +Receive:mov #BLDELAY, WDEL1 + ; Check for received byte +rpt1: clr WDEL2 +rptc: clrwdt ;clear watchdog + btss USTA, #URXDA + bra notrcv + mov URXREG, W0 + add WCRC, W0, WCRC ;add to checksum + return + ; Delay +notrcv: dec WDEL2, WDEL2 + bra nz, rptc + dec WDEL1, WDEL1 + bra nz, rpt1 + ; If we get here, uart receive timed out + mov #__SP_init, WSTPTR ;reinitialize the Stack Pointer + +checkexit: + btss WFWJUMP,#0x00 ; skip next if bit0 is 1 (= jumped from bp) + btss PORTB,#RB1;if we time out and jumper still attached, go to setup + bra setup + +;------------------------------------------------------------------------------ +; Exit point, clean up and load user application +;------------------------------------------------------------------------------ +exit: bclr UIFS, #URXIF ;clear uart received interupt flag + bclr UIFS, #UTXIF ;clear uart transmit interupt flag + bclr USTA, #UTXEN ;disable uart transmit + bclr UMODE, #UARTEN ;disable uart + clr PR1 ;clear PR1 was used as temporary sfr + +;------------------------------------------------------------------------------ +; User specific exit code go here +;------------------------------------------------------------------------------ + .ifdef BUSPIRATEV2 + ;MODE LED off + bclr LATA, #LATA1 ;off + bset TRISA, #TRISA1 ;input + ;restore PPS + mov PPSTEMP1, RPINR18 ;xxx restore + mov PPSTEMP2, RPOR2 ;xxx pps settings + .endif + + .ifdef BUSPIRATEV1A + ;MODE LED off + bclr LATB, #LATB4 ;off + bset TRISB, #TRISB4 ;input + ;restore PPS + mov PPSTEMP1, RPINR18 ;xxx restore + mov PPSTEMP2, RPOR1 ;xxx pps settings + .endif + +quit: ;clean up from jumper test + bclr CNPU1, #CN5PUE ;disable pullups on PGC/CN5/RB1 + bset TRISB, #TRISB0 ;rb0 back to input + mov #0x0000, W0 ;clear pins to analog default + mov W0, AD1PCFG + +;------------------------------------------------------------------------------ +; Load user application +;------------------------------------------------------------------------------ + bra usrapp + +;------------------------------------------------------------------------------ +; firmware jump entry point (kind of like a function because it's never reached from the above code +;------------------------------------------------------------------------------ +firmwarejump: + mov #0xffff, WFWJUMP ;flag that we jumped from firmware + bra setup ;jump to just after jumper check + +;------------------------------------------------------------------------------ +; End of code +;------------------------------------------------------------------------------ + .end + + diff --git a/BPv3-bootloader/firmware-v4.5/p24FJ64GA002.gld b/BPv3-bootloader/firmware-v4.5/p24FJ64GA002.gld new file mode 100644 index 00000000..af3f8cf3 --- /dev/null +++ b/BPv3-bootloader/firmware-v4.5/p24FJ64GA002.gld @@ -0,0 +1,1484 @@ +/* + * Linker script for PIC24FJ64GA002 + * (c) Copyright 2013 Microchip Technology, Inc + * Part support version 1.26.A(19-Feb-2016) + * + * 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. + * + */ + + +OUTPUT_ARCH("24FJ64GA002") +CRT0_STARTUP(crt0_standard.o) +CRT1_STARTUP(crt1_standard.o) + +OPTIONAL(-lpPIC24Fxxx) +OPTIONAL(-lfx) + +/* +** Memory Regions +*/ +MEMORY +{ + data (a!xr) : ORIGIN = 0x800, LENGTH = 0x2000 + reset : ORIGIN = 0x0, LENGTH = 0x4 + ivt : ORIGIN = 0x4, LENGTH = 0xFC + _reserved : ORIGIN = 0x100, LENGTH = 0x4 + aivt : ORIGIN = 0x104, LENGTH = 0xFC + program (xr) : ORIGIN = 0x200, LENGTH = 0xA5FC + CONFIG2 : ORIGIN = 0xABFC, LENGTH = 0x2 + CONFIG1 : ORIGIN = 0xABFE, LENGTH = 0x2 +} + +__CONFIG2 = 0xABFC; +__CONFIG1 = 0xABFE; +__NO_HANDLES = 1; /* Suppress handles on this device */ +__CODE_BASE = 0x200; +__CODE_LENGTH = 0xA5FE; +__IVT_BASE = 0x4; +__AIVT_BASE = 0x104; + +__DATA_BASE = 0x800; +__DATA_LENGTH = 0x2000; + + +/* +** ==================== Section Map ====================== +*/ +SECTIONS +{ + /* + ** ========== Program Memory ========== + */ + + +#if !defined(__CORESIDENT) || defined(__DEFINE_RESET) + /* + ** Reset Instruction + */ + .reset : + { + SHORT(ABSOLUTE(__reset)); + SHORT(0x04); + SHORT((ABSOLUTE(__reset) >> 16) & 0x7F); + SHORT(0); + } >reset +#endif + + + /* + ** Interrupt Vector Tables + ** + ** The primary and alternate tables are loaded + ** here, between sections .reset and .text. + ** Vector table source code appears below. + */ + + + /* + ** User Code and Library Code + ** + ** This section must not be assigned to __CODE_BASE, + ** because CodeGuard(tm) sections may be located there. + ** + ** Note that input sections *(.text) are not mapped here. + ** The best-fit allocator locates them, so that .text + ** may flow around PSV sections as needed. + */ + .text : + { + *(.init); + *(.user_init); + KEEP (*(.handle)); + KEEP (*(.isr*)); + *(.libc) *(.libm) *(.libdsp); /* keep together in this order */ + *(.lib*); + } >program + + + /* + ** User-Defined Section in Program Memory + ** + ** note: can specify an address using + ** the following syntax: + ** + ** usercode 0x1234 : + ** { + ** *(usercode); + ** } >program + */ + usercode : + { + *(usercode); + } >program + + + /* + ** User-Defined Constants in Program Memory + ** + ** For PSV type sections, the Load Memory Address (LMA) + ** should be specified as follows: + ** + ** userconst : AT(0x1234) + ** { + ** *(userconst); + ** } >program + ** + ** Note that mapping PSV sections in linker scripts + ** is not generally recommended. + ** + ** Because of page alignment restrictions, memory is + ** often used more efficiently when PSV sections + ** do not appear in the linker script. + ** + ** For more information on memory allocation, + ** please refer to chapter 10, 'Linker Processing' + ** in the Assembler, Linker manual (DS51317). + */ + + + /* + ** Configuration Words + */ + __CONFIG2 : + { KEEP (*(__CONFIG2.sec*)) } >CONFIG2 + __CONFIG1 : + { KEEP (*(__CONFIG1.sec*)) } >CONFIG1 + + + + + + + /* + ** =========== Data Memory =========== + */ + + + /* + ** ICD Debug Exec + ** + ** This section provides optional storage for + ** the ICD2 debugger. Define a global symbol + ** named __ICD2RAM to enable ICD2. This section + ** must be loaded at data address 0x800. + */ + .icd __DATA_BASE (NOLOAD): + { + . += (DEFINED (__ICD2RAM) ? 0x50 : 0 ); + } > data + + + /* + ** Other sections in data memory are not explicitly mapped. + ** Instead they are allocated according to their section + ** attributes, which is most efficient. + ** + ** If a specific arrangement of sections is required + ** (other than what can be achieved using attributes) + ** additional sections may be defined here. See chapter + ** 10.5 in the MPLAB ASM30/LINK30 User's Guide (DS51317) + ** for more information. + */ + + + /* + ** ========== Debug Info ============== + */ + + .comment 0 : { *(.comment) } + + /* + ** 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) } + .debug_pubnames 0 : { *(.debug_pubnames) } + .debug_ranges 0 : { *(.debug_ranges) } + .debug_aranges 0 : { *(.debug_aranges) } + +} /* SECTIONS */ + +/* +** ================= End of Section Map ================ +*/ + +#if __XC16_VERSION < 1026 +/* +** These definitions are not required for XC16 versions +** later than XC16 v1.25 as the linker defines the addresses. +** +** These definitons will cause a link error on a newer compiler +** +*/ +/* +** Section Map for Interrupt Vector Tables +*/ +SECTIONS +{ + +/* +** Interrupt Vector Table +*/ +.ivt __IVT_BASE : + { + LONG( DEFINED(__ReservedTrap0) ? ABSOLUTE(__ReservedTrap0) : + ABSOLUTE(__DefaultInterrupt)); + LONG( DEFINED(__OscillatorFail) ? ABSOLUTE(__OscillatorFail) : + ABSOLUTE(__DefaultInterrupt)); + LONG( DEFINED(__AddressError) ? ABSOLUTE(__AddressError) : + ABSOLUTE(__DefaultInterrupt)); + LONG( DEFINED(__StackError) ? ABSOLUTE(__StackError) : + ABSOLUTE(__DefaultInterrupt)); + LONG( DEFINED(__MathError) ? ABSOLUTE(__MathError) : + ABSOLUTE(__DefaultInterrupt)); + LONG( DEFINED(__ReservedTrap5) ? ABSOLUTE(__ReservedTrap5) : + ABSOLUTE(__DefaultInterrupt)); + LONG( DEFINED(__ReservedTrap6) ? ABSOLUTE(__ReservedTrap6) : + ABSOLUTE(__DefaultInterrupt)); + LONG( DEFINED(__ReservedTrap7) ? ABSOLUTE(__ReservedTrap7) : + ABSOLUTE(__DefaultInterrupt)); + + LONG( DEFINED(__INT0Interrupt) ? ABSOLUTE(__INT0Interrupt) : + ABSOLUTE(__DefaultInterrupt)); + LONG( DEFINED(__IC1Interrupt) ? ABSOLUTE(__IC1Interrupt) : + ABSOLUTE(__DefaultInterrupt)); + LONG( DEFINED(__OC1Interrupt) ? ABSOLUTE(__OC1Interrupt) : + ABSOLUTE(__DefaultInterrupt)); + LONG( DEFINED(__T1Interrupt) ? ABSOLUTE(__T1Interrupt) : + ABSOLUTE(__DefaultInterrupt)); + LONG( DEFINED(__Interrupt4) ? ABSOLUTE(__Interrupt4) : + ABSOLUTE(__DefaultInterrupt)); + LONG( DEFINED(__IC2Interrupt) ? ABSOLUTE(__IC2Interrupt) : + ABSOLUTE(__DefaultInterrupt)); + LONG( DEFINED(__OC2Interrupt) ? ABSOLUTE(__OC2Interrupt) : + ABSOLUTE(__DefaultInterrupt)); + LONG( DEFINED(__T2Interrupt) ? ABSOLUTE(__T2Interrupt) : + ABSOLUTE(__DefaultInterrupt)); + LONG( DEFINED(__T3Interrupt) ? ABSOLUTE(__T3Interrupt) : + ABSOLUTE(__DefaultInterrupt)); + LONG( DEFINED(__SPI1ErrInterrupt) ? ABSOLUTE(__SPI1ErrInterrupt) : + ABSOLUTE(__DefaultInterrupt)); + LONG( DEFINED(__SPI1Interrupt) ? ABSOLUTE(__SPI1Interrupt) : + ABSOLUTE(__DefaultInterrupt)); + LONG( DEFINED(__U1RXInterrupt) ? ABSOLUTE(__U1RXInterrupt) : + ABSOLUTE(__DefaultInterrupt)); + LONG( DEFINED(__U1TXInterrupt) ? ABSOLUTE(__U1TXInterrupt) : + ABSOLUTE(__DefaultInterrupt)); + LONG( DEFINED(__ADC1Interrupt) ? ABSOLUTE(__ADC1Interrupt) : + ABSOLUTE(__DefaultInterrupt)); + LONG( DEFINED(__Interrupt14) ? ABSOLUTE(__Interrupt14) : + ABSOLUTE(__DefaultInterrupt)); + LONG( DEFINED(__Interrupt15) ? ABSOLUTE(__Interrupt15) : + ABSOLUTE(__DefaultInterrupt)); + LONG( DEFINED(__SI2C1Interrupt) ? ABSOLUTE(__SI2C1Interrupt) : + ABSOLUTE(__DefaultInterrupt)); + LONG( DEFINED(__MI2C1Interrupt) ? ABSOLUTE(__MI2C1Interrupt) : + ABSOLUTE(__DefaultInterrupt)); + LONG( DEFINED(__CompInterrupt) ? ABSOLUTE(__CompInterrupt) : + ABSOLUTE(__DefaultInterrupt)); + LONG( DEFINED(__CNInterrupt) ? ABSOLUTE(__CNInterrupt) : + ABSOLUTE(__DefaultInterrupt)); + LONG( DEFINED(__INT1Interrupt) ? ABSOLUTE(__INT1Interrupt) : + ABSOLUTE(__DefaultInterrupt)); + LONG( DEFINED(__Interrupt21) ? ABSOLUTE(__Interrupt21) : + ABSOLUTE(__DefaultInterrupt)); + LONG( DEFINED(__Interrupt22) ? ABSOLUTE(__Interrupt22) : + ABSOLUTE(__DefaultInterrupt)); + LONG( DEFINED(__Interrupt23) ? ABSOLUTE(__Interrupt23) : + ABSOLUTE(__DefaultInterrupt)); + LONG( DEFINED(__Interrupt24) ? ABSOLUTE(__Interrupt24) : + ABSOLUTE(__DefaultInterrupt)); + LONG( DEFINED(__OC3Interrupt) ? ABSOLUTE(__OC3Interrupt) : + ABSOLUTE(__DefaultInterrupt)); + LONG( DEFINED(__OC4Interrupt) ? ABSOLUTE(__OC4Interrupt) : + ABSOLUTE(__DefaultInterrupt)); + LONG( DEFINED(__T4Interrupt) ? ABSOLUTE(__T4Interrupt) : + ABSOLUTE(__DefaultInterrupt)); + LONG( DEFINED(__T5Interrupt) ? ABSOLUTE(__T5Interrupt) : + ABSOLUTE(__DefaultInterrupt)); + LONG( DEFINED(__INT2Interrupt) ? ABSOLUTE(__INT2Interrupt) : + ABSOLUTE(__DefaultInterrupt)); + LONG( DEFINED(__U2RXInterrupt) ? ABSOLUTE(__U2RXInterrupt) : + ABSOLUTE(__DefaultInterrupt)); + LONG( DEFINED(__U2TXInterrupt) ? ABSOLUTE(__U2TXInterrupt) : + ABSOLUTE(__DefaultInterrupt)); + LONG( DEFINED(__SPI2ErrInterrupt) ? ABSOLUTE(__SPI2ErrInterrupt) : + ABSOLUTE(__DefaultInterrupt)); + LONG( DEFINED(__SPI2Interrupt) ? ABSOLUTE(__SPI2Interrupt) : + ABSOLUTE(__DefaultInterrupt)); + LONG( DEFINED(__Interrupt34) ? ABSOLUTE(__Interrupt34) : + ABSOLUTE(__DefaultInterrupt)); + LONG( DEFINED(__Interrupt35) ? ABSOLUTE(__Interrupt35) : + ABSOLUTE(__DefaultInterrupt)); + LONG( DEFINED(__Interrupt36) ? ABSOLUTE(__Interrupt36) : + ABSOLUTE(__DefaultInterrupt)); + LONG( DEFINED(__IC3Interrupt) ? ABSOLUTE(__IC3Interrupt) : + ABSOLUTE(__DefaultInterrupt)); + LONG( DEFINED(__IC4Interrupt) ? ABSOLUTE(__IC4Interrupt) : + ABSOLUTE(__DefaultInterrupt)); + LONG( DEFINED(__IC5Interrupt) ? ABSOLUTE(__IC5Interrupt) : + ABSOLUTE(__DefaultInterrupt)); + LONG( DEFINED(__Interrupt40) ? ABSOLUTE(__Interrupt40) : + ABSOLUTE(__DefaultInterrupt)); + LONG( DEFINED(__OC5Interrupt) ? ABSOLUTE(__OC5Interrupt) : + ABSOLUTE(__DefaultInterrupt)); + LONG( DEFINED(__Interrupt42) ? ABSOLUTE(__Interrupt42) : + ABSOLUTE(__DefaultInterrupt)); + LONG( DEFINED(__Interrupt43) ? ABSOLUTE(__Interrupt43) : + ABSOLUTE(__DefaultInterrupt)); + LONG( DEFINED(__Interrupt44) ? ABSOLUTE(__Interrupt44) : + ABSOLUTE(__DefaultInterrupt)); + LONG( DEFINED(__PMPInterrupt) ? ABSOLUTE(__PMPInterrupt) : + ABSOLUTE(__DefaultInterrupt)); + LONG( DEFINED(__Interrupt46) ? ABSOLUTE(__Interrupt46) : + ABSOLUTE(__DefaultInterrupt)); + LONG( DEFINED(__Interrupt47) ? ABSOLUTE(__Interrupt47) : + ABSOLUTE(__DefaultInterrupt)); + LONG( DEFINED(__Interrupt48) ? ABSOLUTE(__Interrupt48) : + ABSOLUTE(__DefaultInterrupt)); + LONG( DEFINED(__SI2C2Interrupt) ? ABSOLUTE(__SI2C2Interrupt) : + ABSOLUTE(__DefaultInterrupt)); + LONG( DEFINED(__MI2C2Interrupt) ? ABSOLUTE(__MI2C2Interrupt) : + ABSOLUTE(__DefaultInterrupt)); + LONG( DEFINED(__Interrupt51) ? ABSOLUTE(__Interrupt51) : + ABSOLUTE(__DefaultInterrupt)); + LONG( DEFINED(__Interrupt52) ? ABSOLUTE(__Interrupt52) : + ABSOLUTE(__DefaultInterrupt)); + LONG( DEFINED(__Interrupt53) ? ABSOLUTE(__Interrupt53) : + ABSOLUTE(__DefaultInterrupt)); + LONG( DEFINED(__Interrupt54) ? ABSOLUTE(__Interrupt54) : + ABSOLUTE(__DefaultInterrupt)); + LONG( DEFINED(__Interrupt55) ? ABSOLUTE(__Interrupt55) : + ABSOLUTE(__DefaultInterrupt)); + LONG( DEFINED(__Interrupt56) ? ABSOLUTE(__Interrupt56) : + ABSOLUTE(__DefaultInterrupt)); + LONG( DEFINED(__Interrupt57) ? ABSOLUTE(__Interrupt57) : + ABSOLUTE(__DefaultInterrupt)); + LONG( DEFINED(__Interrupt58) ? ABSOLUTE(__Interrupt58) : + ABSOLUTE(__DefaultInterrupt)); + LONG( DEFINED(__Interrupt59) ? ABSOLUTE(__Interrupt59) : + ABSOLUTE(__DefaultInterrupt)); + LONG( DEFINED(__Interrupt60) ? ABSOLUTE(__Interrupt60) : + ABSOLUTE(__DefaultInterrupt)); + LONG( DEFINED(__Interrupt61) ? ABSOLUTE(__Interrupt61) : + ABSOLUTE(__DefaultInterrupt)); + LONG( DEFINED(__RTCCInterrupt) ? ABSOLUTE(__RTCCInterrupt) : + ABSOLUTE(__DefaultInterrupt)); + LONG( DEFINED(__Interrupt63) ? ABSOLUTE(__Interrupt63) : + ABSOLUTE(__DefaultInterrupt)); + LONG( DEFINED(__Interrupt64) ? ABSOLUTE(__Interrupt64) : + ABSOLUTE(__DefaultInterrupt)); + LONG( DEFINED(__U1ErrInterrupt) ? ABSOLUTE(__U1ErrInterrupt) : + ABSOLUTE(__DefaultInterrupt)); + LONG( DEFINED(__U2ErrInterrupt) ? ABSOLUTE(__U2ErrInterrupt) : + ABSOLUTE(__DefaultInterrupt)); + LONG( DEFINED(__CRCInterrupt) ? ABSOLUTE(__CRCInterrupt) : + ABSOLUTE(__DefaultInterrupt)); + LONG( DEFINED(__Interrupt68) ? ABSOLUTE(__Interrupt68) : + ABSOLUTE(__DefaultInterrupt)); + LONG( DEFINED(__Interrupt69) ? ABSOLUTE(__Interrupt69) : + ABSOLUTE(__DefaultInterrupt)); + LONG( DEFINED(__Interrupt70) ? ABSOLUTE(__Interrupt70) : + ABSOLUTE(__DefaultInterrupt)); + LONG( DEFINED(__Interrupt71) ? ABSOLUTE(__Interrupt71) : + ABSOLUTE(__DefaultInterrupt)); + LONG( DEFINED(__LVDInterrupt) ? ABSOLUTE(__LVDInterrupt) : + ABSOLUTE(__DefaultInterrupt)); + LONG( DEFINED(__Interrupt73) ? ABSOLUTE(__Interrupt73) : + ABSOLUTE(__DefaultInterrupt)); + LONG( DEFINED(__Interrupt74) ? ABSOLUTE(__Interrupt74) : + ABSOLUTE(__DefaultInterrupt)); + LONG( DEFINED(__Interrupt75) ? ABSOLUTE(__Interrupt75) : + ABSOLUTE(__DefaultInterrupt)); + LONG( DEFINED(__Interrupt76) ? ABSOLUTE(__Interrupt76) : + ABSOLUTE(__DefaultInterrupt)); + LONG( DEFINED(__Interrupt77) ? ABSOLUTE(__Interrupt77) : + ABSOLUTE(__DefaultInterrupt)); + LONG( DEFINED(__Interrupt78) ? ABSOLUTE(__Interrupt78) : + ABSOLUTE(__DefaultInterrupt)); + LONG( DEFINED(__Interrupt79) ? ABSOLUTE(__Interrupt79) : + ABSOLUTE(__DefaultInterrupt)); + LONG( DEFINED(__Interrupt80) ? ABSOLUTE(__Interrupt80) : + ABSOLUTE(__DefaultInterrupt)); + LONG( DEFINED(__Interrupt81) ? ABSOLUTE(__Interrupt81) : + ABSOLUTE(__DefaultInterrupt)); + LONG( DEFINED(__Interrupt82) ? ABSOLUTE(__Interrupt82) : + ABSOLUTE(__DefaultInterrupt)); + LONG( DEFINED(__Interrupt83) ? ABSOLUTE(__Interrupt83) : + ABSOLUTE(__DefaultInterrupt)); + LONG( DEFINED(__Interrupt84) ? ABSOLUTE(__Interrupt84) : + ABSOLUTE(__DefaultInterrupt)); + LONG( DEFINED(__Interrupt85) ? ABSOLUTE(__Interrupt85) : + ABSOLUTE(__DefaultInterrupt)); + LONG( DEFINED(__Interrupt86) ? ABSOLUTE(__Interrupt86) : + ABSOLUTE(__DefaultInterrupt)); + LONG( DEFINED(__Interrupt87) ? ABSOLUTE(__Interrupt87) : + ABSOLUTE(__DefaultInterrupt)); + LONG( DEFINED(__Interrupt88) ? ABSOLUTE(__Interrupt88) : + ABSOLUTE(__DefaultInterrupt)); + LONG( DEFINED(__Interrupt89) ? ABSOLUTE(__Interrupt89) : + ABSOLUTE(__DefaultInterrupt)); + LONG( DEFINED(__Interrupt90) ? ABSOLUTE(__Interrupt90) : + ABSOLUTE(__DefaultInterrupt)); + LONG( DEFINED(__Interrupt91) ? ABSOLUTE(__Interrupt91) : + ABSOLUTE(__DefaultInterrupt)); + LONG( DEFINED(__Interrupt92) ? ABSOLUTE(__Interrupt92) : + ABSOLUTE(__DefaultInterrupt)); + LONG( DEFINED(__Interrupt93) ? ABSOLUTE(__Interrupt93) : + ABSOLUTE(__DefaultInterrupt)); + LONG( DEFINED(__Interrupt94) ? ABSOLUTE(__Interrupt94) : + ABSOLUTE(__DefaultInterrupt)); + LONG( DEFINED(__Interrupt95) ? ABSOLUTE(__Interrupt95) : + ABSOLUTE(__DefaultInterrupt)); + LONG( DEFINED(__Interrupt96) ? ABSOLUTE(__Interrupt96) : + ABSOLUTE(__DefaultInterrupt)); + LONG( DEFINED(__Interrupt97) ? ABSOLUTE(__Interrupt97) : + ABSOLUTE(__DefaultInterrupt)); + LONG( DEFINED(__Interrupt98) ? ABSOLUTE(__Interrupt98) : + ABSOLUTE(__DefaultInterrupt)); + LONG( DEFINED(__Interrupt99) ? ABSOLUTE(__Interrupt99) : + ABSOLUTE(__DefaultInterrupt)); + LONG( DEFINED(__Interrupt100) ? ABSOLUTE(__Interrupt100) : + ABSOLUTE(__DefaultInterrupt)); + LONG( DEFINED(__Interrupt101) ? ABSOLUTE(__Interrupt101) : + ABSOLUTE(__DefaultInterrupt)); + LONG( DEFINED(__Interrupt102) ? ABSOLUTE(__Interrupt102) : + ABSOLUTE(__DefaultInterrupt)); + LONG( DEFINED(__Interrupt103) ? ABSOLUTE(__Interrupt103) : + ABSOLUTE(__DefaultInterrupt)); + LONG( DEFINED(__Interrupt104) ? ABSOLUTE(__Interrupt104) : + ABSOLUTE(__DefaultInterrupt)); + LONG( DEFINED(__Interrupt105) ? ABSOLUTE(__Interrupt105) : + ABSOLUTE(__DefaultInterrupt)); + LONG( DEFINED(__Interrupt106) ? ABSOLUTE(__Interrupt106) : + ABSOLUTE(__DefaultInterrupt)); + LONG( DEFINED(__Interrupt107) ? ABSOLUTE(__Interrupt107) : + ABSOLUTE(__DefaultInterrupt)); + LONG( DEFINED(__Interrupt108) ? ABSOLUTE(__Interrupt108) : + ABSOLUTE(__DefaultInterrupt)); + LONG( DEFINED(__Interrupt109) ? ABSOLUTE(__Interrupt109) : + ABSOLUTE(__DefaultInterrupt)); + LONG( DEFINED(__Interrupt110) ? ABSOLUTE(__Interrupt110) : + ABSOLUTE(__DefaultInterrupt)); + LONG( DEFINED(__Interrupt111) ? ABSOLUTE(__Interrupt111) : + ABSOLUTE(__DefaultInterrupt)); + LONG( DEFINED(__Interrupt112) ? ABSOLUTE(__Interrupt112) : + ABSOLUTE(__DefaultInterrupt)); + LONG( DEFINED(__Interrupt113) ? ABSOLUTE(__Interrupt113) : + ABSOLUTE(__DefaultInterrupt)); + LONG( DEFINED(__Interrupt114) ? ABSOLUTE(__Interrupt114) : + ABSOLUTE(__DefaultInterrupt)); + LONG( DEFINED(__Interrupt115) ? ABSOLUTE(__Interrupt115) : + ABSOLUTE(__DefaultInterrupt)); + LONG( DEFINED(__Interrupt116) ? ABSOLUTE(__Interrupt116) : + ABSOLUTE(__DefaultInterrupt)); + LONG( DEFINED(__Interrupt117) ? ABSOLUTE(__Interrupt117) : + ABSOLUTE(__DefaultInterrupt)); + } >ivt + + +/* +** Alternate Interrupt Vector Table +*/ +.aivt __AIVT_BASE : + { + LONG( DEFINED(__AltReservedTrap0) ? ABSOLUTE(__AltReservedTrap0) : + (DEFINED(__ReservedTrap0) ? ABSOLUTE(__ReservedTrap0) : + ABSOLUTE(__DefaultInterrupt))); + LONG( DEFINED(__AltOscillatorFail) ? ABSOLUTE(__AltOscillatorFail) : + (DEFINED(__OscillatorFail) ? ABSOLUTE(__OscillatorFail) : + ABSOLUTE(__DefaultInterrupt))); + LONG( DEFINED(__AltAddressError) ? ABSOLUTE(__AltAddressError) : + (DEFINED(__AddressError) ? ABSOLUTE(__AddressError) : + ABSOLUTE(__DefaultInterrupt))); + LONG( DEFINED(__AltStackError) ? ABSOLUTE(__AltStackError) : + (DEFINED(__StackError) ? ABSOLUTE(__StackError) : + ABSOLUTE(__DefaultInterrupt))); + LONG( DEFINED(__AltMathError) ? ABSOLUTE(__AltMathError) : + (DEFINED(__MathError) ? ABSOLUTE(__MathError) : + ABSOLUTE(__DefaultInterrupt))); + LONG( DEFINED(__AltReservedTrap5) ? ABSOLUTE(__AltReservedTrap5) : + (DEFINED(__ReservedTrap5) ? ABSOLUTE(__ReservedTrap5) : + ABSOLUTE(__DefaultInterrupt))); + LONG( DEFINED(__AltReservedTrap6) ? ABSOLUTE(__AltReservedTrap6) : + (DEFINED(__ReservedTrap6) ? ABSOLUTE(__ReservedTrap6) : + ABSOLUTE(__DefaultInterrupt))); + LONG( DEFINED(__AltReservedTrap7) ? ABSOLUTE(__AltReservedTrap7) : + (DEFINED(__ReservedTrap7) ? ABSOLUTE(__ReservedTrap7) : + ABSOLUTE(__DefaultInterrupt))); + + LONG( DEFINED(__AltINT0Interrupt) ? ABSOLUTE(__AltINT0Interrupt) : + (DEFINED(__INT0Interrupt) ? ABSOLUTE(__INT0Interrupt) : + ABSOLUTE(__DefaultInterrupt))); + LONG( DEFINED(__AltIC1Interrupt) ? ABSOLUTE(__AltIC1Interrupt) : + (DEFINED(__IC1Interrupt) ? ABSOLUTE(__IC1Interrupt) : + ABSOLUTE(__DefaultInterrupt))); + LONG( DEFINED(__AltOC1Interrupt) ? ABSOLUTE(__AltOC1Interrupt) : + (DEFINED(__OC1Interrupt) ? ABSOLUTE(__OC1Interrupt) : + ABSOLUTE(__DefaultInterrupt))); + LONG( DEFINED(__AltT1Interrupt) ? ABSOLUTE(__AltT1Interrupt) : + (DEFINED(__T1Interrupt) ? ABSOLUTE(__T1Interrupt) : + ABSOLUTE(__DefaultInterrupt))); + LONG( DEFINED(__AltInterrupt4) ? ABSOLUTE(__AltInterrupt4) : + (DEFINED(__Interrupt4) ? ABSOLUTE(__Interrupt4) : + ABSOLUTE(__DefaultInterrupt))); + LONG( DEFINED(__AltIC2Interrupt) ? ABSOLUTE(__AltIC2Interrupt) : + (DEFINED(__IC2Interrupt) ? ABSOLUTE(__IC2Interrupt) : + ABSOLUTE(__DefaultInterrupt))); + LONG( DEFINED(__AltOC2Interrupt) ? ABSOLUTE(__AltOC2Interrupt) : + (DEFINED(__OC2Interrupt) ? ABSOLUTE(__OC2Interrupt) : + ABSOLUTE(__DefaultInterrupt))); + LONG( DEFINED(__AltT2Interrupt) ? ABSOLUTE(__AltT2Interrupt) : + (DEFINED(__T2Interrupt) ? ABSOLUTE(__T2Interrupt) : + ABSOLUTE(__DefaultInterrupt))); + LONG( DEFINED(__AltT3Interrupt) ? ABSOLUTE(__AltT3Interrupt) : + (DEFINED(__T3Interrupt) ? ABSOLUTE(__T3Interrupt) : + ABSOLUTE(__DefaultInterrupt))); + LONG( DEFINED(__AltSPI1ErrInterrupt) ? ABSOLUTE(__AltSPI1ErrInterrupt) : + (DEFINED(__SPI1ErrInterrupt) ? ABSOLUTE(__SPI1ErrInterrupt) : + ABSOLUTE(__DefaultInterrupt))); + LONG( DEFINED(__AltSPI1Interrupt) ? ABSOLUTE(__AltSPI1Interrupt) : + (DEFINED(__SPI1Interrupt) ? ABSOLUTE(__SPI1Interrupt) : + ABSOLUTE(__DefaultInterrupt))); + LONG( DEFINED(__AltU1RXInterrupt) ? ABSOLUTE(__AltU1RXInterrupt) : + (DEFINED(__U1RXInterrupt) ? ABSOLUTE(__U1RXInterrupt) : + ABSOLUTE(__DefaultInterrupt))); + LONG( DEFINED(__AltU1TXInterrupt) ? ABSOLUTE(__AltU1TXInterrupt) : + (DEFINED(__U1TXInterrupt) ? ABSOLUTE(__U1TXInterrupt) : + ABSOLUTE(__DefaultInterrupt))); + LONG( DEFINED(__AltADC1Interrupt) ? ABSOLUTE(__AltADC1Interrupt) : + (DEFINED(__ADC1Interrupt) ? ABSOLUTE(__ADC1Interrupt) : + ABSOLUTE(__DefaultInterrupt))); + LONG( DEFINED(__AltInterrupt14) ? ABSOLUTE(__AltInterrupt14) : + (DEFINED(__Interrupt14) ? ABSOLUTE(__Interrupt14) : + ABSOLUTE(__DefaultInterrupt))); + LONG( DEFINED(__AltInterrupt15) ? ABSOLUTE(__AltInterrupt15) : + (DEFINED(__Interrupt15) ? ABSOLUTE(__Interrupt15) : + ABSOLUTE(__DefaultInterrupt))); + LONG( DEFINED(__AltSI2C1Interrupt) ? ABSOLUTE(__AltSI2C1Interrupt) : + (DEFINED(__SI2C1Interrupt) ? ABSOLUTE(__SI2C1Interrupt) : + ABSOLUTE(__DefaultInterrupt))); + LONG( DEFINED(__AltMI2C1Interrupt) ? ABSOLUTE(__AltMI2C1Interrupt) : + (DEFINED(__MI2C1Interrupt) ? ABSOLUTE(__MI2C1Interrupt) : + ABSOLUTE(__DefaultInterrupt))); + LONG( DEFINED(__AltCompInterrupt) ? ABSOLUTE(__AltCompInterrupt) : + (DEFINED(__CompInterrupt) ? ABSOLUTE(__CompInterrupt) : + ABSOLUTE(__DefaultInterrupt))); + LONG( DEFINED(__AltCNInterrupt) ? ABSOLUTE(__AltCNInterrupt) : + (DEFINED(__CNInterrupt) ? ABSOLUTE(__CNInterrupt) : + ABSOLUTE(__DefaultInterrupt))); + LONG( DEFINED(__AltINT1Interrupt) ? ABSOLUTE(__AltINT1Interrupt) : + (DEFINED(__INT1Interrupt) ? ABSOLUTE(__INT1Interrupt) : + ABSOLUTE(__DefaultInterrupt))); + LONG( DEFINED(__AltInterrupt21) ? ABSOLUTE(__AltInterrupt21) : + (DEFINED(__Interrupt21) ? ABSOLUTE(__Interrupt21) : + ABSOLUTE(__DefaultInterrupt))); + LONG( DEFINED(__AltInterrupt22) ? ABSOLUTE(__AltInterrupt22) : + (DEFINED(__Interrupt22) ? ABSOLUTE(__Interrupt22) : + ABSOLUTE(__DefaultInterrupt))); + LONG( DEFINED(__AltInterrupt23) ? ABSOLUTE(__AltInterrupt23) : + (DEFINED(__Interrupt23) ? ABSOLUTE(__Interrupt23) : + ABSOLUTE(__DefaultInterrupt))); + LONG( DEFINED(__AltInterrupt24) ? ABSOLUTE(__AltInterrupt24) : + (DEFINED(__Interrupt24) ? ABSOLUTE(__Interrupt24) : + ABSOLUTE(__DefaultInterrupt))); + LONG( DEFINED(__AltOC3Interrupt) ? ABSOLUTE(__AltOC3Interrupt) : + (DEFINED(__OC3Interrupt) ? ABSOLUTE(__OC3Interrupt) : + ABSOLUTE(__DefaultInterrupt))); + LONG( DEFINED(__AltOC4Interrupt) ? ABSOLUTE(__AltOC4Interrupt) : + (DEFINED(__OC4Interrupt) ? ABSOLUTE(__OC4Interrupt) : + ABSOLUTE(__DefaultInterrupt))); + LONG( DEFINED(__AltT4Interrupt) ? ABSOLUTE(__AltT4Interrupt) : + (DEFINED(__T4Interrupt) ? ABSOLUTE(__T4Interrupt) : + ABSOLUTE(__DefaultInterrupt))); + LONG( DEFINED(__AltT5Interrupt) ? ABSOLUTE(__AltT5Interrupt) : + (DEFINED(__T5Interrupt) ? ABSOLUTE(__T5Interrupt) : + ABSOLUTE(__DefaultInterrupt))); + LONG( DEFINED(__AltINT2Interrupt) ? ABSOLUTE(__AltINT2Interrupt) : + (DEFINED(__INT2Interrupt) ? ABSOLUTE(__INT2Interrupt) : + ABSOLUTE(__DefaultInterrupt))); + LONG( DEFINED(__AltU2RXInterrupt) ? ABSOLUTE(__AltU2RXInterrupt) : + (DEFINED(__U2RXInterrupt) ? ABSOLUTE(__U2RXInterrupt) : + ABSOLUTE(__DefaultInterrupt))); + LONG( DEFINED(__AltU2TXInterrupt) ? ABSOLUTE(__AltU2TXInterrupt) : + (DEFINED(__U2TXInterrupt) ? ABSOLUTE(__U2TXInterrupt) : + ABSOLUTE(__DefaultInterrupt))); + LONG( DEFINED(__AltSPI2ErrInterrupt) ? ABSOLUTE(__AltSPI2ErrInterrupt) : + (DEFINED(__SPI2ErrInterrupt) ? ABSOLUTE(__SPI2ErrInterrupt) : + ABSOLUTE(__DefaultInterrupt))); + LONG( DEFINED(__AltSPI2Interrupt) ? ABSOLUTE(__AltSPI2Interrupt) : + (DEFINED(__SPI2Interrupt) ? ABSOLUTE(__SPI2Interrupt) : + ABSOLUTE(__DefaultInterrupt))); + LONG( DEFINED(__AltInterrupt34) ? ABSOLUTE(__AltInterrupt34) : + (DEFINED(__Interrupt34) ? ABSOLUTE(__Interrupt34) : + ABSOLUTE(__DefaultInterrupt))); + LONG( DEFINED(__AltInterrupt35) ? ABSOLUTE(__AltInterrupt35) : + (DEFINED(__Interrupt35) ? ABSOLUTE(__Interrupt35) : + ABSOLUTE(__DefaultInterrupt))); + LONG( DEFINED(__AltInterrupt36) ? ABSOLUTE(__AltInterrupt36) : + (DEFINED(__Interrupt36) ? ABSOLUTE(__Interrupt36) : + ABSOLUTE(__DefaultInterrupt))); + LONG( DEFINED(__AltIC3Interrupt) ? ABSOLUTE(__AltIC3Interrupt) : + (DEFINED(__IC3Interrupt) ? ABSOLUTE(__IC3Interrupt) : + ABSOLUTE(__DefaultInterrupt))); + LONG( DEFINED(__AltIC4Interrupt) ? ABSOLUTE(__AltIC4Interrupt) : + (DEFINED(__IC4Interrupt) ? ABSOLUTE(__IC4Interrupt) : + ABSOLUTE(__DefaultInterrupt))); + LONG( DEFINED(__AltIC5Interrupt) ? ABSOLUTE(__AltIC5Interrupt) : + (DEFINED(__IC5Interrupt) ? ABSOLUTE(__IC5Interrupt) : + ABSOLUTE(__DefaultInterrupt))); + LONG( DEFINED(__AltInterrupt40) ? ABSOLUTE(__AltInterrupt40) : + (DEFINED(__Interrupt40) ? ABSOLUTE(__Interrupt40) : + ABSOLUTE(__DefaultInterrupt))); + LONG( DEFINED(__AltOC5Interrupt) ? ABSOLUTE(__AltOC5Interrupt) : + (DEFINED(__OC5Interrupt) ? ABSOLUTE(__OC5Interrupt) : + ABSOLUTE(__DefaultInterrupt))); + LONG( DEFINED(__AltInterrupt42) ? ABSOLUTE(__AltInterrupt42) : + (DEFINED(__Interrupt42) ? ABSOLUTE(__Interrupt42) : + ABSOLUTE(__DefaultInterrupt))); + LONG( DEFINED(__AltInterrupt43) ? ABSOLUTE(__AltInterrupt43) : + (DEFINED(__Interrupt43) ? ABSOLUTE(__Interrupt43) : + ABSOLUTE(__DefaultInterrupt))); + LONG( DEFINED(__AltInterrupt44) ? ABSOLUTE(__AltInterrupt44) : + (DEFINED(__Interrupt44) ? ABSOLUTE(__Interrupt44) : + ABSOLUTE(__DefaultInterrupt))); + LONG( DEFINED(__AltPMPInterrupt) ? ABSOLUTE(__AltPMPInterrupt) : + (DEFINED(__PMPInterrupt) ? ABSOLUTE(__PMPInterrupt) : + ABSOLUTE(__DefaultInterrupt))); + LONG( DEFINED(__AltInterrupt46) ? ABSOLUTE(__AltInterrupt46) : + (DEFINED(__Interrupt46) ? ABSOLUTE(__Interrupt46) : + ABSOLUTE(__DefaultInterrupt))); + LONG( DEFINED(__AltInterrupt47) ? ABSOLUTE(__AltInterrupt47) : + (DEFINED(__Interrupt47) ? ABSOLUTE(__Interrupt47) : + ABSOLUTE(__DefaultInterrupt))); + LONG( DEFINED(__AltInterrupt48) ? ABSOLUTE(__AltInterrupt48) : + (DEFINED(__Interrupt48) ? ABSOLUTE(__Interrupt48) : + ABSOLUTE(__DefaultInterrupt))); + LONG( DEFINED(__AltSI2C2Interrupt) ? ABSOLUTE(__AltSI2C2Interrupt) : + (DEFINED(__SI2C2Interrupt) ? ABSOLUTE(__SI2C2Interrupt) : + ABSOLUTE(__DefaultInterrupt))); + LONG( DEFINED(__AltMI2C2Interrupt) ? ABSOLUTE(__AltMI2C2Interrupt) : + (DEFINED(__MI2C2Interrupt) ? ABSOLUTE(__MI2C2Interrupt) : + ABSOLUTE(__DefaultInterrupt))); + LONG( DEFINED(__AltInterrupt51) ? ABSOLUTE(__AltInterrupt51) : + (DEFINED(__Interrupt51) ? ABSOLUTE(__Interrupt51) : + ABSOLUTE(__DefaultInterrupt))); + LONG( DEFINED(__AltInterrupt52) ? ABSOLUTE(__AltInterrupt52) : + (DEFINED(__Interrupt52) ? ABSOLUTE(__Interrupt52) : + ABSOLUTE(__DefaultInterrupt))); + LONG( DEFINED(__AltInterrupt53) ? ABSOLUTE(__AltInterrupt53) : + (DEFINED(__Interrupt53) ? ABSOLUTE(__Interrupt53) : + ABSOLUTE(__DefaultInterrupt))); + LONG( DEFINED(__AltInterrupt54) ? ABSOLUTE(__AltInterrupt54) : + (DEFINED(__Interrupt54) ? ABSOLUTE(__Interrupt54) : + ABSOLUTE(__DefaultInterrupt))); + LONG( DEFINED(__AltInterrupt55) ? ABSOLUTE(__AltInterrupt55) : + (DEFINED(__Interrupt55) ? ABSOLUTE(__Interrupt55) : + ABSOLUTE(__DefaultInterrupt))); + LONG( DEFINED(__AltInterrupt56) ? ABSOLUTE(__AltInterrupt56) : + (DEFINED(__Interrupt56) ? ABSOLUTE(__Interrupt56) : + ABSOLUTE(__DefaultInterrupt))); + LONG( DEFINED(__AltInterrupt57) ? ABSOLUTE(__AltInterrupt57) : + (DEFINED(__Interrupt57) ? ABSOLUTE(__Interrupt57) : + ABSOLUTE(__DefaultInterrupt))); + LONG( DEFINED(__AltInterrupt58) ? ABSOLUTE(__AltInterrupt58) : + (DEFINED(__Interrupt58) ? ABSOLUTE(__Interrupt58) : + ABSOLUTE(__DefaultInterrupt))); + LONG( DEFINED(__AltInterrupt59) ? ABSOLUTE(__AltInterrupt59) : + (DEFINED(__Interrupt59) ? ABSOLUTE(__Interrupt59) : + ABSOLUTE(__DefaultInterrupt))); + LONG( DEFINED(__AltInterrupt60) ? ABSOLUTE(__AltInterrupt60) : + (DEFINED(__Interrupt60) ? ABSOLUTE(__Interrupt60) : + ABSOLUTE(__DefaultInterrupt))); + LONG( DEFINED(__AltInterrupt61) ? ABSOLUTE(__AltInterrupt61) : + (DEFINED(__Interrupt61) ? ABSOLUTE(__Interrupt61) : + ABSOLUTE(__DefaultInterrupt))); + LONG( DEFINED(__AltRTCCInterrupt) ? ABSOLUTE(__AltRTCCInterrupt) : + (DEFINED(__RTCCInterrupt) ? ABSOLUTE(__RTCCInterrupt) : + ABSOLUTE(__DefaultInterrupt))); + LONG( DEFINED(__AltInterrupt63) ? ABSOLUTE(__AltInterrupt63) : + (DEFINED(__Interrupt63) ? ABSOLUTE(__Interrupt63) : + ABSOLUTE(__DefaultInterrupt))); + LONG( DEFINED(__AltInterrupt64) ? ABSOLUTE(__AltInterrupt64) : + (DEFINED(__Interrupt64) ? ABSOLUTE(__Interrupt64) : + ABSOLUTE(__DefaultInterrupt))); + LONG( DEFINED(__AltU1ErrInterrupt) ? ABSOLUTE(__AltU1ErrInterrupt) : + (DEFINED(__U1ErrInterrupt) ? ABSOLUTE(__U1ErrInterrupt) : + ABSOLUTE(__DefaultInterrupt))); + LONG( DEFINED(__AltU2ErrInterrupt) ? ABSOLUTE(__AltU2ErrInterrupt) : + (DEFINED(__U2ErrInterrupt) ? ABSOLUTE(__U2ErrInterrupt) : + ABSOLUTE(__DefaultInterrupt))); + LONG( DEFINED(__AltCRCInterrupt) ? ABSOLUTE(__AltCRCInterrupt) : + (DEFINED(__CRCInterrupt) ? ABSOLUTE(__CRCInterrupt) : + ABSOLUTE(__DefaultInterrupt))); + LONG( DEFINED(__AltInterrupt68) ? ABSOLUTE(__AltInterrupt68) : + (DEFINED(__Interrupt68) ? ABSOLUTE(__Interrupt68) : + ABSOLUTE(__DefaultInterrupt))); + LONG( DEFINED(__AltInterrupt69) ? ABSOLUTE(__AltInterrupt69) : + (DEFINED(__Interrupt69) ? ABSOLUTE(__Interrupt69) : + ABSOLUTE(__DefaultInterrupt))); + LONG( DEFINED(__AltInterrupt70) ? ABSOLUTE(__AltInterrupt70) : + (DEFINED(__Interrupt70) ? ABSOLUTE(__Interrupt70) : + ABSOLUTE(__DefaultInterrupt))); + LONG( DEFINED(__AltInterrupt71) ? ABSOLUTE(__AltInterrupt71) : + (DEFINED(__Interrupt71) ? ABSOLUTE(__Interrupt71) : + ABSOLUTE(__DefaultInterrupt))); + LONG( DEFINED(__AltLVDInterrupt) ? ABSOLUTE(__AltLVDInterrupt) : + (DEFINED(__LVDInterrupt) ? ABSOLUTE(__LVDInterrupt) : + ABSOLUTE(__DefaultInterrupt))); + LONG( DEFINED(__AltInterrupt73) ? ABSOLUTE(__AltInterrupt73) : + (DEFINED(__Interrupt73) ? ABSOLUTE(__Interrupt73) : + ABSOLUTE(__DefaultInterrupt))); + LONG( DEFINED(__AltInterrupt74) ? ABSOLUTE(__AltInterrupt74) : + (DEFINED(__Interrupt74) ? ABSOLUTE(__Interrupt74) : + ABSOLUTE(__DefaultInterrupt))); + LONG( DEFINED(__AltInterrupt75) ? ABSOLUTE(__AltInterrupt75) : + (DEFINED(__Interrupt75) ? ABSOLUTE(__Interrupt75) : + ABSOLUTE(__DefaultInterrupt))); + LONG( DEFINED(__AltInterrupt76) ? ABSOLUTE(__AltInterrupt76) : + (DEFINED(__Interrupt76) ? ABSOLUTE(__Interrupt76) : + ABSOLUTE(__DefaultInterrupt))); + LONG( DEFINED(__AltInterrupt77) ? ABSOLUTE(__AltInterrupt77) : + (DEFINED(__Interrupt77) ? ABSOLUTE(__Interrupt77) : + ABSOLUTE(__DefaultInterrupt))); + LONG( DEFINED(__AltInterrupt78) ? ABSOLUTE(__AltInterrupt78) : + (DEFINED(__Interrupt78) ? ABSOLUTE(__Interrupt78) : + ABSOLUTE(__DefaultInterrupt))); + LONG( DEFINED(__AltInterrupt79) ? ABSOLUTE(__AltInterrupt79) : + (DEFINED(__Interrupt79) ? ABSOLUTE(__Interrupt79) : + ABSOLUTE(__DefaultInterrupt))); + LONG( DEFINED(__AltInterrupt80) ? ABSOLUTE(__AltInterrupt80) : + (DEFINED(__Interrupt80) ? ABSOLUTE(__Interrupt80) : + ABSOLUTE(__DefaultInterrupt))); + LONG( DEFINED(__AltInterrupt81) ? ABSOLUTE(__AltInterrupt81) : + (DEFINED(__Interrupt81) ? ABSOLUTE(__Interrupt81) : + ABSOLUTE(__DefaultInterrupt))); + LONG( DEFINED(__AltInterrupt82) ? ABSOLUTE(__AltInterrupt82) : + (DEFINED(__Interrupt82) ? ABSOLUTE(__Interrupt82) : + ABSOLUTE(__DefaultInterrupt))); + LONG( DEFINED(__AltInterrupt83) ? ABSOLUTE(__AltInterrupt83) : + (DEFINED(__Interrupt83) ? ABSOLUTE(__Interrupt83) : + ABSOLUTE(__DefaultInterrupt))); + LONG( DEFINED(__AltInterrupt84) ? ABSOLUTE(__AltInterrupt84) : + (DEFINED(__Interrupt84) ? ABSOLUTE(__Interrupt84) : + ABSOLUTE(__DefaultInterrupt))); + LONG( DEFINED(__AltInterrupt85) ? ABSOLUTE(__AltInterrupt85) : + (DEFINED(__Interrupt85) ? ABSOLUTE(__Interrupt85) : + ABSOLUTE(__DefaultInterrupt))); + LONG( DEFINED(__AltInterrupt86) ? ABSOLUTE(__AltInterrupt86) : + (DEFINED(__Interrupt86) ? ABSOLUTE(__Interrupt86) : + ABSOLUTE(__DefaultInterrupt))); + LONG( DEFINED(__AltInterrupt87) ? ABSOLUTE(__AltInterrupt87) : + (DEFINED(__Interrupt87) ? ABSOLUTE(__Interrupt87) : + ABSOLUTE(__DefaultInterrupt))); + LONG( DEFINED(__AltInterrupt88) ? ABSOLUTE(__AltInterrupt88) : + (DEFINED(__Interrupt88) ? ABSOLUTE(__Interrupt88) : + ABSOLUTE(__DefaultInterrupt))); + LONG( DEFINED(__AltInterrupt89) ? ABSOLUTE(__AltInterrupt89) : + (DEFINED(__Interrupt89) ? ABSOLUTE(__Interrupt89) : + ABSOLUTE(__DefaultInterrupt))); + LONG( DEFINED(__AltInterrupt90) ? ABSOLUTE(__AltInterrupt90) : + (DEFINED(__Interrupt90) ? ABSOLUTE(__Interrupt90) : + ABSOLUTE(__DefaultInterrupt))); + LONG( DEFINED(__AltInterrupt91) ? ABSOLUTE(__AltInterrupt91) : + (DEFINED(__Interrupt91) ? ABSOLUTE(__Interrupt91) : + ABSOLUTE(__DefaultInterrupt))); + LONG( DEFINED(__AltInterrupt92) ? ABSOLUTE(__AltInterrupt92) : + (DEFINED(__Interrupt92) ? ABSOLUTE(__Interrupt92) : + ABSOLUTE(__DefaultInterrupt))); + LONG( DEFINED(__AltInterrupt93) ? ABSOLUTE(__AltInterrupt93) : + (DEFINED(__Interrupt93) ? ABSOLUTE(__Interrupt93) : + ABSOLUTE(__DefaultInterrupt))); + LONG( DEFINED(__AltInterrupt94) ? ABSOLUTE(__AltInterrupt94) : + (DEFINED(__Interrupt94) ? ABSOLUTE(__Interrupt94) : + ABSOLUTE(__DefaultInterrupt))); + LONG( DEFINED(__AltInterrupt95) ? ABSOLUTE(__AltInterrupt95) : + (DEFINED(__Interrupt95) ? ABSOLUTE(__Interrupt95) : + ABSOLUTE(__DefaultInterrupt))); + LONG( DEFINED(__AltInterrupt96) ? ABSOLUTE(__AltInterrupt96) : + (DEFINED(__Interrupt96) ? ABSOLUTE(__Interrupt96) : + ABSOLUTE(__DefaultInterrupt))); + LONG( DEFINED(__AltInterrupt97) ? ABSOLUTE(__AltInterrupt97) : + (DEFINED(__Interrupt97) ? ABSOLUTE(__Interrupt97) : + ABSOLUTE(__DefaultInterrupt))); + LONG( DEFINED(__AltInterrupt98) ? ABSOLUTE(__AltInterrupt98) : + (DEFINED(__Interrupt98) ? ABSOLUTE(__Interrupt98) : + ABSOLUTE(__DefaultInterrupt))); + LONG( DEFINED(__AltInterrupt99) ? ABSOLUTE(__AltInterrupt99) : + (DEFINED(__Interrupt99) ? ABSOLUTE(__Interrupt99) : + ABSOLUTE(__DefaultInterrupt))); + LONG( DEFINED(__AltInterrupt100) ? ABSOLUTE(__AltInterrupt100) : + (DEFINED(__Interrupt100) ? ABSOLUTE(__Interrupt100) : + ABSOLUTE(__DefaultInterrupt))); + LONG( DEFINED(__AltInterrupt101) ? ABSOLUTE(__AltInterrupt101) : + (DEFINED(__Interrupt101) ? ABSOLUTE(__Interrupt101) : + ABSOLUTE(__DefaultInterrupt))); + LONG( DEFINED(__AltInterrupt102) ? ABSOLUTE(__AltInterrupt102) : + (DEFINED(__Interrupt102) ? ABSOLUTE(__Interrupt102) : + ABSOLUTE(__DefaultInterrupt))); + LONG( DEFINED(__AltInterrupt103) ? ABSOLUTE(__AltInterrupt103) : + (DEFINED(__Interrupt103) ? ABSOLUTE(__Interrupt103) : + ABSOLUTE(__DefaultInterrupt))); + LONG( DEFINED(__AltInterrupt104) ? ABSOLUTE(__AltInterrupt104) : + (DEFINED(__Interrupt104) ? ABSOLUTE(__Interrupt104) : + ABSOLUTE(__DefaultInterrupt))); + LONG( DEFINED(__AltInterrupt105) ? ABSOLUTE(__AltInterrupt105) : + (DEFINED(__Interrupt105) ? ABSOLUTE(__Interrupt105) : + ABSOLUTE(__DefaultInterrupt))); + LONG( DEFINED(__AltInterrupt106) ? ABSOLUTE(__AltInterrupt106) : + (DEFINED(__Interrupt106) ? ABSOLUTE(__Interrupt106) : + ABSOLUTE(__DefaultInterrupt))); + LONG( DEFINED(__AltInterrupt107) ? ABSOLUTE(__AltInterrupt107) : + (DEFINED(__Interrupt107) ? ABSOLUTE(__Interrupt107) : + ABSOLUTE(__DefaultInterrupt))); + LONG( DEFINED(__AltInterrupt108) ? ABSOLUTE(__AltInterrupt108) : + (DEFINED(__Interrupt108) ? ABSOLUTE(__Interrupt108) : + ABSOLUTE(__DefaultInterrupt))); + LONG( DEFINED(__AltInterrupt109) ? ABSOLUTE(__AltInterrupt109) : + (DEFINED(__Interrupt109) ? ABSOLUTE(__Interrupt109) : + ABSOLUTE(__DefaultInterrupt))); + LONG( DEFINED(__AltInterrupt110) ? ABSOLUTE(__AltInterrupt110) : + (DEFINED(__Interrupt110) ? ABSOLUTE(__Interrupt110) : + ABSOLUTE(__DefaultInterrupt))); + LONG( DEFINED(__AltInterrupt111) ? ABSOLUTE(__AltInterrupt111) : + (DEFINED(__Interrupt111) ? ABSOLUTE(__Interrupt111) : + ABSOLUTE(__DefaultInterrupt))); + LONG( DEFINED(__AltInterrupt112) ? ABSOLUTE(__AltInterrupt112) : + (DEFINED(__Interrupt112) ? ABSOLUTE(__Interrupt112) : + ABSOLUTE(__DefaultInterrupt))); + LONG( DEFINED(__AltInterrupt113) ? ABSOLUTE(__AltInterrupt113) : + (DEFINED(__Interrupt113) ? ABSOLUTE(__Interrupt113) : + ABSOLUTE(__DefaultInterrupt))); + LONG( DEFINED(__AltInterrupt114) ? ABSOLUTE(__AltInterrupt114) : + (DEFINED(__Interrupt114) ? ABSOLUTE(__Interrupt114) : + ABSOLUTE(__DefaultInterrupt))); + LONG( DEFINED(__AltInterrupt115) ? ABSOLUTE(__AltInterrupt115) : + (DEFINED(__Interrupt115) ? ABSOLUTE(__Interrupt115) : + ABSOLUTE(__DefaultInterrupt))); + LONG( DEFINED(__AltInterrupt116) ? ABSOLUTE(__AltInterrupt116) : + (DEFINED(__Interrupt116) ? ABSOLUTE(__Interrupt116) : + ABSOLUTE(__DefaultInterrupt))); + LONG( DEFINED(__AltInterrupt117) ? ABSOLUTE(__AltInterrupt117) : + (DEFINED(__Interrupt117) ? ABSOLUTE(__Interrupt117) : + ABSOLUTE(__DefaultInterrupt))); + } >aivt +} /* SECTIONS */ +#endif + + +/* +** ============== Equates for SFR Addresses ============= +*/ + + WREG0 = 0x0; +_WREG0 = 0x0; + WREG1 = 0x2; +_WREG1 = 0x2; + WREG2 = 0x4; +_WREG2 = 0x4; + WREG3 = 0x6; +_WREG3 = 0x6; + WREG4 = 0x8; +_WREG4 = 0x8; + WREG5 = 0xA; +_WREG5 = 0xA; + WREG6 = 0xC; +_WREG6 = 0xC; + WREG7 = 0xE; +_WREG7 = 0xE; + WREG8 = 0x10; +_WREG8 = 0x10; + WREG9 = 0x12; +_WREG9 = 0x12; + WREG10 = 0x14; +_WREG10 = 0x14; + WREG11 = 0x16; +_WREG11 = 0x16; + WREG12 = 0x18; +_WREG12 = 0x18; + WREG13 = 0x1A; +_WREG13 = 0x1A; + WREG14 = 0x1C; +_WREG14 = 0x1C; + WREG15 = 0x1E; +_WREG15 = 0x1E; + SPLIM = 0x20; +_SPLIM = 0x20; + PCL = 0x2E; +_PCL = 0x2E; + PCH = 0x30; +_PCH = 0x30; + TBLPAG = 0x32; +_TBLPAG = 0x32; + PSVPAG = 0x34; +_PSVPAG = 0x34; + RCOUNT = 0x36; +_RCOUNT = 0x36; + SR = 0x42; +_SR = 0x42; +_SRbits = 0x42; + CORCON = 0x44; +_CORCON = 0x44; +_CORCONbits = 0x44; + DISICNT = 0x52; +_DISICNT = 0x52; + CNEN1 = 0x60; +_CNEN1 = 0x60; +_CNEN1bits = 0x60; + CNEN2 = 0x62; +_CNEN2 = 0x62; +_CNEN2bits = 0x62; + CNPU1 = 0x68; +_CNPU1 = 0x68; +_CNPU1bits = 0x68; + CNPU2 = 0x6A; +_CNPU2 = 0x6A; +_CNPU2bits = 0x6A; + INTCON1 = 0x80; +_INTCON1 = 0x80; +_INTCON1bits = 0x80; + INTCON2 = 0x82; +_INTCON2 = 0x82; +_INTCON2bits = 0x82; + IFS0 = 0x84; +_IFS0 = 0x84; +_IFS0bits = 0x84; + IFS1 = 0x86; +_IFS1 = 0x86; +_IFS1bits = 0x86; + IFS2 = 0x88; +_IFS2 = 0x88; +_IFS2bits = 0x88; + IFS3 = 0x8A; +_IFS3 = 0x8A; +_IFS3bits = 0x8A; + IFS4 = 0x8C; +_IFS4 = 0x8C; +_IFS4bits = 0x8C; + IEC0 = 0x94; +_IEC0 = 0x94; +_IEC0bits = 0x94; + IEC1 = 0x96; +_IEC1 = 0x96; +_IEC1bits = 0x96; + IEC2 = 0x98; +_IEC2 = 0x98; +_IEC2bits = 0x98; + IEC3 = 0x9A; +_IEC3 = 0x9A; +_IEC3bits = 0x9A; + IEC4 = 0x9C; +_IEC4 = 0x9C; +_IEC4bits = 0x9C; + IPC0 = 0xA4; +_IPC0 = 0xA4; +_IPC0bits = 0xA4; + IPC1 = 0xA6; +_IPC1 = 0xA6; +_IPC1bits = 0xA6; + IPC2 = 0xA8; +_IPC2 = 0xA8; +_IPC2bits = 0xA8; + IPC3 = 0xAA; +_IPC3 = 0xAA; +_IPC3bits = 0xAA; + IPC4 = 0xAC; +_IPC4 = 0xAC; +_IPC4bits = 0xAC; + IPC5 = 0xAE; +_IPC5 = 0xAE; +_IPC5bits = 0xAE; + IPC6 = 0xB0; +_IPC6 = 0xB0; +_IPC6bits = 0xB0; + IPC7 = 0xB2; +_IPC7 = 0xB2; +_IPC7bits = 0xB2; + IPC8 = 0xB4; +_IPC8 = 0xB4; +_IPC8bits = 0xB4; + IPC9 = 0xB6; +_IPC9 = 0xB6; +_IPC9bits = 0xB6; + IPC10 = 0xB8; +_IPC10 = 0xB8; +_IPC10bits = 0xB8; + IPC11 = 0xBA; +_IPC11 = 0xBA; +_IPC11bits = 0xBA; + IPC12 = 0xBC; +_IPC12 = 0xBC; +_IPC12bits = 0xBC; + IPC15 = 0xC2; +_IPC15 = 0xC2; +_IPC15bits = 0xC2; + IPC16 = 0xC4; +_IPC16 = 0xC4; +_IPC16bits = 0xC4; + IPC18 = 0xC8; +_IPC18 = 0xC8; +_IPC18bits = 0xC8; + TMR1 = 0x100; +_TMR1 = 0x100; + PR1 = 0x102; +_PR1 = 0x102; + T1CON = 0x104; +_T1CON = 0x104; +_T1CONbits = 0x104; + TMR2 = 0x106; +_TMR2 = 0x106; + TMR3HLD = 0x108; +_TMR3HLD = 0x108; + TMR3 = 0x10A; +_TMR3 = 0x10A; + PR2 = 0x10C; +_PR2 = 0x10C; + PR3 = 0x10E; +_PR3 = 0x10E; + T2CON = 0x110; +_T2CON = 0x110; +_T2CONbits = 0x110; + T3CON = 0x112; +_T3CON = 0x112; +_T3CONbits = 0x112; + TMR4 = 0x114; +_TMR4 = 0x114; + TMR5HLD = 0x116; +_TMR5HLD = 0x116; + TMR5 = 0x118; +_TMR5 = 0x118; + PR4 = 0x11A; +_PR4 = 0x11A; + PR5 = 0x11C; +_PR5 = 0x11C; + T4CON = 0x11E; +_T4CON = 0x11E; +_T4CONbits = 0x11E; + T5CON = 0x120; +_T5CON = 0x120; +_T5CONbits = 0x120; + IC1BUF = 0x140; +_IC1BUF = 0x140; + IC1CON = 0x142; +_IC1CON = 0x142; +_IC1CONbits = 0x142; + IC2BUF = 0x144; +_IC2BUF = 0x144; + IC2CON = 0x146; +_IC2CON = 0x146; +_IC2CONbits = 0x146; + IC3BUF = 0x148; +_IC3BUF = 0x148; + IC3CON = 0x14A; +_IC3CON = 0x14A; +_IC3CONbits = 0x14A; + IC4BUF = 0x14C; +_IC4BUF = 0x14C; + IC4CON = 0x14E; +_IC4CON = 0x14E; +_IC4CONbits = 0x14E; + IC5BUF = 0x150; +_IC5BUF = 0x150; + IC5CON = 0x152; +_IC5CON = 0x152; +_IC5CONbits = 0x152; + OC1RS = 0x180; +_OC1RS = 0x180; + OC1R = 0x182; +_OC1R = 0x182; + OC1CON = 0x184; +_OC1CON = 0x184; +_OC1CONbits = 0x184; + OC2RS = 0x186; +_OC2RS = 0x186; + OC2R = 0x188; +_OC2R = 0x188; + OC2CON = 0x18A; +_OC2CON = 0x18A; +_OC2CONbits = 0x18A; + OC3RS = 0x18C; +_OC3RS = 0x18C; + OC3R = 0x18E; +_OC3R = 0x18E; + OC3CON = 0x190; +_OC3CON = 0x190; +_OC3CONbits = 0x190; + OC4RS = 0x192; +_OC4RS = 0x192; + OC4R = 0x194; +_OC4R = 0x194; + OC4CON = 0x196; +_OC4CON = 0x196; +_OC4CONbits = 0x196; + OC5RS = 0x198; +_OC5RS = 0x198; + OC5R = 0x19A; +_OC5R = 0x19A; + OC5CON = 0x19C; +_OC5CON = 0x19C; +_OC5CONbits = 0x19C; + I2C1RCV = 0x200; +_I2C1RCV = 0x200; + I2C1TRN = 0x202; +_I2C1TRN = 0x202; + I2C1BRG = 0x204; +_I2C1BRG = 0x204; + I2C1CON = 0x206; +_I2C1CON = 0x206; +_I2C1CONbits = 0x206; + I2C1STAT = 0x208; +_I2C1STAT = 0x208; +_I2C1STATbits = 0x208; + I2C1ADD = 0x20A; +_I2C1ADD = 0x20A; + I2C1MSK = 0x20C; +_I2C1MSK = 0x20C; + I2C2RCV = 0x210; +_I2C2RCV = 0x210; + I2C2TRN = 0x212; +_I2C2TRN = 0x212; + I2C2BRG = 0x214; +_I2C2BRG = 0x214; + I2C2CON = 0x216; +_I2C2CON = 0x216; +_I2C2CONbits = 0x216; + I2C2STAT = 0x218; +_I2C2STAT = 0x218; +_I2C2STATbits = 0x218; + I2C2ADD = 0x21A; +_I2C2ADD = 0x21A; + I2C2MSK = 0x21C; +_I2C2MSK = 0x21C; + U1MODE = 0x220; +_U1MODE = 0x220; +_U1MODEbits = 0x220; + U1STA = 0x222; +_U1STA = 0x222; +_U1STAbits = 0x222; + U1TXREG = 0x224; +_U1TXREG = 0x224; + U1RXREG = 0x226; +_U1RXREG = 0x226; + U1BRG = 0x228; +_U1BRG = 0x228; + U2MODE = 0x230; +_U2MODE = 0x230; +_U2MODEbits = 0x230; + U2STA = 0x232; +_U2STA = 0x232; +_U2STAbits = 0x232; + U2TXREG = 0x234; +_U2TXREG = 0x234; + U2RXREG = 0x236; +_U2RXREG = 0x236; + U2BRG = 0x238; +_U2BRG = 0x238; + SPI1STAT = 0x240; +_SPI1STAT = 0x240; +_SPI1STATbits = 0x240; + SPI1CON1 = 0x242; +_SPI1CON1 = 0x242; +_SPI1CON1bits = 0x242; + SPI1CON2 = 0x244; +_SPI1CON2 = 0x244; +_SPI1CON2bits = 0x244; + SPI1BUF = 0x248; +_SPI1BUF = 0x248; + SPI2STAT = 0x260; +_SPI2STAT = 0x260; +_SPI2STATbits = 0x260; + SPI2CON1 = 0x262; +_SPI2CON1 = 0x262; +_SPI2CON1bits = 0x262; + SPI2CON2 = 0x264; +_SPI2CON2 = 0x264; +_SPI2CON2bits = 0x264; + SPI2BUF = 0x268; +_SPI2BUF = 0x268; + TRISA = 0x2C0; +_TRISA = 0x2C0; +_TRISAbits = 0x2C0; + PORTA = 0x2C2; +_PORTA = 0x2C2; +_PORTAbits = 0x2C2; + LATA = 0x2C4; +_LATA = 0x2C4; +_LATAbits = 0x2C4; + ODCA = 0x2C6; +_ODCA = 0x2C6; +_ODCAbits = 0x2C6; + TRISB = 0x2C8; +_TRISB = 0x2C8; +_TRISBbits = 0x2C8; + PORTB = 0x2CA; +_PORTB = 0x2CA; +_PORTBbits = 0x2CA; + LATB = 0x2CC; +_LATB = 0x2CC; +_LATBbits = 0x2CC; + ODCB = 0x2CE; +_ODCB = 0x2CE; +_ODCBbits = 0x2CE; + PADCFG1 = 0x2FC; +_PADCFG1 = 0x2FC; +_PADCFG1bits = 0x2FC; + ADC1BUF0 = 0x300; +_ADC1BUF0 = 0x300; + ADC1BUF1 = 0x302; +_ADC1BUF1 = 0x302; + ADC1BUF2 = 0x304; +_ADC1BUF2 = 0x304; + ADC1BUF3 = 0x306; +_ADC1BUF3 = 0x306; + ADC1BUF4 = 0x308; +_ADC1BUF4 = 0x308; + ADC1BUF5 = 0x30A; +_ADC1BUF5 = 0x30A; + ADC1BUF6 = 0x30C; +_ADC1BUF6 = 0x30C; + ADC1BUF7 = 0x30E; +_ADC1BUF7 = 0x30E; + ADC1BUF8 = 0x310; +_ADC1BUF8 = 0x310; + ADC1BUF9 = 0x312; +_ADC1BUF9 = 0x312; + ADC1BUFA = 0x314; +_ADC1BUFA = 0x314; + ADC1BUFB = 0x316; +_ADC1BUFB = 0x316; + ADC1BUFC = 0x318; +_ADC1BUFC = 0x318; + ADC1BUFD = 0x31A; +_ADC1BUFD = 0x31A; + ADC1BUFE = 0x31C; +_ADC1BUFE = 0x31C; + ADC1BUFF = 0x31E; +_ADC1BUFF = 0x31E; + AD1CON1 = 0x320; +_AD1CON1 = 0x320; +_AD1CON1bits = 0x320; + AD1CON2 = 0x322; +_AD1CON2 = 0x322; +_AD1CON2bits = 0x322; + AD1CON3 = 0x324; +_AD1CON3 = 0x324; +_AD1CON3bits = 0x324; + AD1CHS = 0x328; +_AD1CHS = 0x328; +_AD1CHSbits = 0x328; + AD1PCFG = 0x32C; +_AD1PCFG = 0x32C; +_AD1PCFGbits = 0x32C; + AD1CSSL = 0x330; +_AD1CSSL = 0x330; +_AD1CSSLbits = 0x330; + PMCON = 0x600; +_PMCON = 0x600; +_PMCONbits = 0x600; + PMMODE = 0x602; +_PMMODE = 0x602; +_PMMODEbits = 0x602; + PMADDR = 0x604; +_PMADDR = 0x604; +_PMADDRbits = 0x604; + PMDOUT1 = 0x604; +_PMDOUT1 = 0x604; +_PMDOUT1bits = 0x604; + PMDOUT2 = 0x606; +_PMDOUT2 = 0x606; + PMDIN1 = 0x608; +_PMDIN1 = 0x608; + PMDIN2 = 0x60A; +_PMDIN2 = 0x60A; + PMAEN = 0x60C; +_PMAEN = 0x60C; +_PMAENbits = 0x60C; + PMSTAT = 0x60E; +_PMSTAT = 0x60E; +_PMSTATbits = 0x60E; + ALRMVAL = 0x620; +_ALRMVAL = 0x620; + ALCFGRPT = 0x622; +_ALCFGRPT = 0x622; +_ALCFGRPTbits = 0x622; + RTCVAL = 0x624; +_RTCVAL = 0x624; + RCFGCAL = 0x626; +_RCFGCAL = 0x626; +_RCFGCALbits = 0x626; + CMCON = 0x630; +_CMCON = 0x630; +_CMCONbits = 0x630; + CVRCON = 0x632; +_CVRCON = 0x632; +_CVRCONbits = 0x632; + CRCCON = 0x640; +_CRCCON = 0x640; +_CRCCONbits = 0x640; + CRCXOR = 0x642; +_CRCXOR = 0x642; +_CRCXORbits = 0x642; + CRCDAT = 0x644; +_CRCDAT = 0x644; + CRCWDAT = 0x646; +_CRCWDAT = 0x646; + RPINR0 = 0x680; +_RPINR0 = 0x680; +_RPINR0bits = 0x680; + RPINR1 = 0x682; +_RPINR1 = 0x682; +_RPINR1bits = 0x682; + RPINR3 = 0x686; +_RPINR3 = 0x686; +_RPINR3bits = 0x686; + RPINR4 = 0x688; +_RPINR4 = 0x688; +_RPINR4bits = 0x688; + RPINR7 = 0x68E; +_RPINR7 = 0x68E; +_RPINR7bits = 0x68E; + RPINR8 = 0x690; +_RPINR8 = 0x690; +_RPINR8bits = 0x690; + RPINR9 = 0x692; +_RPINR9 = 0x692; +_RPINR9bits = 0x692; + RPINR11 = 0x696; +_RPINR11 = 0x696; +_RPINR11bits = 0x696; + RPINR18 = 0x6A4; +_RPINR18 = 0x6A4; +_RPINR18bits = 0x6A4; + RPINR19 = 0x6A6; +_RPINR19 = 0x6A6; +_RPINR19bits = 0x6A6; + RPINR20 = 0x6A8; +_RPINR20 = 0x6A8; +_RPINR20bits = 0x6A8; + RPINR21 = 0x6AA; +_RPINR21 = 0x6AA; +_RPINR21bits = 0x6AA; + RPINR22 = 0x6AC; +_RPINR22 = 0x6AC; +_RPINR22bits = 0x6AC; + RPINR23 = 0x6AE; +_RPINR23 = 0x6AE; +_RPINR23bits = 0x6AE; + RPOR0 = 0x6C0; +_RPOR0 = 0x6C0; +_RPOR0bits = 0x6C0; + RPOR1 = 0x6C2; +_RPOR1 = 0x6C2; +_RPOR1bits = 0x6C2; + RPOR2 = 0x6C4; +_RPOR2 = 0x6C4; +_RPOR2bits = 0x6C4; + RPOR3 = 0x6C6; +_RPOR3 = 0x6C6; +_RPOR3bits = 0x6C6; + RPOR4 = 0x6C8; +_RPOR4 = 0x6C8; +_RPOR4bits = 0x6C8; + RPOR5 = 0x6CA; +_RPOR5 = 0x6CA; +_RPOR5bits = 0x6CA; + RPOR6 = 0x6CC; +_RPOR6 = 0x6CC; +_RPOR6bits = 0x6CC; + RPOR7 = 0x6CE; +_RPOR7 = 0x6CE; +_RPOR7bits = 0x6CE; + RCON = 0x740; +_RCON = 0x740; +_RCONbits = 0x740; + OSCCON = 0x742; +_OSCCON = 0x742; +_OSCCONbits = 0x742; + OSCCONL = 0x742; +_OSCCONL = 0x742; + OSCCONH = 0x743; +_OSCCONH = 0x743; + CLKDIV = 0x744; +_CLKDIV = 0x744; +_CLKDIVbits = 0x744; + OSCTUN = 0x748; +_OSCTUN = 0x748; +_OSCTUNbits = 0x748; + NVMCON = 0x760; +_NVMCON = 0x760; +_NVMCONbits = 0x760; + NVMKEY = 0x766; +_NVMKEY = 0x766; + PMD1 = 0x770; +_PMD1 = 0x770; +_PMD1bits = 0x770; + PMD2 = 0x772; +_PMD2 = 0x772; +_PMD2bits = 0x772; + PMD3 = 0x774; +_PMD3 = 0x774; +_PMD3bits = 0x774; +/* +** ======= Base Addresses for Various Peripherals and ACC ====== +*/ + + IC1 = 0x140; +_IC1 = 0x140; + IC2 = 0x144; +_IC2 = 0x144; + IC3 = 0x148; +_IC3 = 0x148; + IC4 = 0x14C; +_IC4 = 0x14C; + IC5 = 0x150; +_IC5 = 0x150; + OC1 = 0x180; +_OC1 = 0x180; + OC2 = 0x186; +_OC2 = 0x186; + OC3 = 0x18C; +_OC3 = 0x18C; + OC4 = 0x192; +_OC4 = 0x192; + OC5 = 0x198; +_OC5 = 0x198; + SPI1 = 0x240; +_SPI1 = 0x240; + SPI2 = 0x260; +_SPI2 = 0x260; + UART1 = 0x220; +_UART1 = 0x220; + UART2 = 0x230; +_UART2 = 0x230; diff --git a/BPv3-bootloader/firmware-v4.5/src/settings.inc b/BPv3-bootloader/firmware-v4.5/settings.inc similarity index 96% rename from BPv3-bootloader/firmware-v4.5/src/settings.inc rename to BPv3-bootloader/firmware-v4.5/settings.inc index 8b634422..d453dbc2 100644 --- a/BPv3-bootloader/firmware-v4.5/src/settings.inc +++ b/BPv3-bootloader/firmware-v4.5/settings.inc @@ -1,72 +1,72 @@ -;------------------------------------------------------------------------------ -; -; Title: ds30 loader for PIC24FJ -; -; File description: user settings and configuration bits -; -; Copyright: Copyright © 2009, Mikael Gustafsson -; -; Webpage: http://mrmackey.no-ip.org/elektronik/ds30loader/ -; -; History: 1.0.1 - -; 1.0.0 Removed PIC24FxxKAyyy stuff, se separate fw -; 0.9.1 Only one clock option in this file -; 0.9.0 First version of this file -; -;------------------------------------------------------------------------------ - -;----------------------------------------------------------------------------- -; This file is part of ds30 Loader. -; -; ds30 Loader is free software: you can redistribute it and/or modify -; it under the terms of the GNU General Public License as published by -; the Free Software Foundation. -; -; ds30 Loader is distributed in the hope that it will be useful, -; but WITHOUT ANY WARRANTY; without even the implied warranty of -; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -; GNU General Public License for more details. -; -; You should have received a copy of the GNU General Public License -; along with ds30 Loader. If not, see . -;------------------------------------------------------------------------------ - - -;------------------------------------------------------------------------------ -; Device -;------------------------------------------------------------------------------ - .equ __24FJ64GA002, 1 ;xxx - .equ BUSPIRATEV2, 1 ;use pin config for v2go/v3 - ;.equ BUSPIRATEV1A, 1 ;use pin config for v1a - -;------------------------------------------------------------------------------ -; Includes -;------------------------------------------------------------------------------ - .include "devices.inc" - .include "p24fxxxx.inc" - - -;------------------------------------------------------------------------------ -; User preferences -;------------------------------------------------------------------------------ - .equ FCY, 16000000 ;xxx speed of internal cycle clock[Hz], used to calculate uart brg and delay - .equ BAUDRATE, 115200 ;xxx baudrate - .equ BLTIME, 500 ;xxx time in ms before bootloader loads the user application - .equ USE_UART1, 1 ;xxx uncomment to use uart1 - ;.equ USE_UART2, 1 ;xxx uncomment to use uart2 - ;.equ USE_UART3, 1 ;xxx uncomment to use uart3 - ;.equ USE_UART4, 1 ;xxx uncomment to use uart4 - -;------------------------------------------------------------------------------ -; Configuration bits, these macros can be found at the end of the inc-files located in -; c:\Program files\Microchip\MPLAB ASM30 Suite\Support\dsPIC24x\inc -; -; These can also be set in MPLAB IDE instead, they are found in Configure->Configuration bits... -;------------------------------------------------------------------------------ - ;use identical Bus Pirate config fuses - config __CONFIG2, FNOSC_FRCPLL & OSCIOFNC_ON &POSCMOD_NONE & I2C1SEL_PRI - config __CONFIG1, JTAGEN_OFF & GCP_OFF & GWRP_OFF & COE_OFF & FWDTEN_OFF & ICS_PGx1 - - ;config __CONFIG1, JTAGEN_OFF/*JTAG*/ & GCP_OFF/*code protect*/ & GWRP_OFF/*write protect*/ & BKBUG_OFF/*background debugger*/ & COE_OFF/*clip-on emulation mode*/ & ICS_PGx1/*icd pins select*/ & FWDTEN_OFF/*watchdog timer*/ & WINDIS_OFF/*windowed wdt*/ & FWPSA_PR32/*watchdog prescalar*/ & WDTPS_PS1/*watchdog postscalar*/ - ;config __CONFIG2, IESO_OFF/*two-speed startup*/ & FNOSC_FRC/*oscillator selection*/ & FCKSM_CSDCMD/*clock switching and clock monitor*/ & OSCIOFNC_OFF/*OSC0/RC15 function*/ & POSCMOD_XT/*oscillator selection*/ - ;config __CONFIG3, WPEND_WPSTARTMEM/*write protect range selection*/ & WPCFG_WPCFGDIS/*write protection config page*/ & WPDIS_WPEN/*write protection*/ & WPFP_WPFP8/*Write Protection Flash Page*/ +;------------------------------------------------------------------------------ +; +; Title: ds30 loader for PIC24FJ +; +; File description: user settings and configuration bits +; +; Copyright: Copyright � 2009, Mikael Gustafsson +; +; Webpage: http://mrmackey.no-ip.org/elektronik/ds30loader/ +; +; History: 1.0.1 - +; 1.0.0 Removed PIC24FxxKAyyy stuff, se separate fw +; 0.9.1 Only one clock option in this file +; 0.9.0 First version of this file +; +;------------------------------------------------------------------------------ + +;----------------------------------------------------------------------------- +; This file is part of ds30 Loader. +; +; ds30 Loader is free software: you can redistribute it and/or modify +; it under the terms of the GNU General Public License as published by +; the Free Software Foundation. +; +; ds30 Loader is distributed in the hope that it will be useful, +; but WITHOUT ANY WARRANTY; without even the implied warranty of +; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +; GNU General Public License for more details. +; +; You should have received a copy of the GNU General Public License +; along with ds30 Loader. If not, see . +;------------------------------------------------------------------------------ + + +;------------------------------------------------------------------------------ +; Device +;------------------------------------------------------------------------------ + .equ __24FJ64GA002, 1 ;xxx + .equ BUSPIRATEV2, 1 ;use pin config for v2go/v3 + ;.equ BUSPIRATEV1A, 1 ;use pin config for v1a + +;------------------------------------------------------------------------------ +; Includes +;------------------------------------------------------------------------------ + .include "devices.inc" + .include "p24fxxxx.inc" + + +;------------------------------------------------------------------------------ +; User preferences +;------------------------------------------------------------------------------ + .equ FCY, 16000000 ;xxx speed of internal cycle clock[Hz], used to calculate uart brg and delay + .equ BAUDRATE, 115200 ;xxx baudrate + .equ BLTIME, 500 ;xxx time in ms before bootloader loads the user application + .equ USE_UART1, 1 ;xxx uncomment to use uart1 + ;.equ USE_UART2, 1 ;xxx uncomment to use uart2 + ;.equ USE_UART3, 1 ;xxx uncomment to use uart3 + ;.equ USE_UART4, 1 ;xxx uncomment to use uart4 + +;------------------------------------------------------------------------------ +; Configuration bits, these macros can be found at the end of the inc-files located in +; c:\Program files\Microchip\MPLAB ASM30 Suite\Support\dsPIC24x\inc +; +; These can also be set in MPLAB IDE instead, they are found in Configure->Configuration bits... +;------------------------------------------------------------------------------ + ;use identical Bus Pirate config fuses + config __CONFIG2, FNOSC_FRCPLL & OSCIOFNC_ON &POSCMOD_NONE & I2C1SEL_PRI + config __CONFIG1, JTAGEN_OFF & GCP_OFF & GWRP_OFF & COE_OFF & FWDTEN_OFF & ICS_PGx1 + + ;config __CONFIG1, JTAGEN_OFF/*JTAG*/ & GCP_OFF/*code protect*/ & GWRP_OFF/*write protect*/ & BKBUG_OFF/*background debugger*/ & COE_OFF/*clip-on emulation mode*/ & ICS_PGx1/*icd pins select*/ & FWDTEN_OFF/*watchdog timer*/ & WINDIS_OFF/*windowed wdt*/ & FWPSA_PR32/*watchdog prescalar*/ & WDTPS_PS1/*watchdog postscalar*/ + ;config __CONFIG2, IESO_OFF/*two-speed startup*/ & FNOSC_FRC/*oscillator selection*/ & FCKSM_CSDCMD/*clock switching and clock monitor*/ & OSCIOFNC_OFF/*OSC0/RC15 function*/ & POSCMOD_XT/*oscillator selection*/ + ;config __CONFIG3, WPEND_WPSTARTMEM/*write protect range selection*/ & WPCFG_WPCFGDIS/*write protection config page*/ & WPDIS_WPEN/*write protection*/ & WPFP_WPFP8/*Write Protection Flash Page*/