;; ;; spreadspace pic utils ;; ;; ;; Copyright (C) 2011-2013 Christian Pointner ;; ;; This file is part of spreadspace pic utils. ;; ;; spreadspace pic utils 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, either version 3 of the License, or ;; any later version. ;; ;; spreadspace pic utils 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 spreadspace pic utils. If not, see . ;; ;; ------------------------------------- ;; PREAMBLE LIST p=16F887 include "p16f887.inc" __config _CONFIG1, _DEBUG_OFF & _LVP_OFF & _FCMEN_OFF & _IESO_OFF & _BOR_OFF & _CPD_OFF & _CP_OFF & _MCLRE_ON & _PWRTE_OFF & _WDT_OFF & _INTOSC __config _CONFIG2, _BOR21V & _WRT_256 ;; ------------------------------------- ;; DEFINES (chip/com specific) ;; #define BOOTPIN PORTC,7 ; use this for com-uart #define BOOTPIN PORTA,5 ; use this for com-spi #define INTPIN PORTA,4 ; use this for com-spi USERVECT EQU H'100' ISRVECT EQU USERVECT + H'4' FLASH_BOUNDARY EQU b'00001111' ; flash write boundary is at 16 bytes boundaries VERSION_MAJ EQU .1 VERSION_MIN EQU .0 NAME_0 EQU '8' NAME_1 EQU '8' NAME_2 EQU '7' DEVID_L EQU H'82' DEVID_H EQU H'20' FLASH_SIZE_L EQU H'00' FLASH_SIZE_H EQU H'20' ; 0x2000 -> 8192 Words of Flash FSS EQU .16 ; writing is done 8 words at a time but 16 words get erased EEPROM_SIZE_L EQU H'00' EEPROM_SIZE_H EQU H'01' ; 0x0100 -> 256 Bytes of EEPROM MESS EQU .64 ; this limit is because of to combuff size and single byte len field for messages CFG EQU .2 ; anyway this is not read or writable for this chip #define HOOK_CMD_RESET cmd_not_impl #define HOOK_CMD_R_FLASH cmd_r_flash #define HOOK_CMD_W_FLASH cmd_w_flash #define HOOK_CMD_R_EEPROM cmd_not_impl #define HOOK_CMD_W_EEPROM cmd_not_impl #define HOOK_CMD_R_CONFIG cmd_not_impl #define HOOK_CMD_W_CONFIG cmd_not_impl ;; Variables combuff EQU H'0020' current_cmdlen EQU H'0070' csum EQU H'0071' flags EQU H'007D' cnt EQU H'007F' ;; Boot Macro ;; bootmacro macro ; use this for com-uart ;; btfsc BOOTPIN ;; goto USERVECT ;; goto com_init ;; endm bootmacro macro ; use this for com-spi bsf STATUS,RP0 bsf STATUS,RP1 bcf ANSEL,ANS4 ; RA5/SS as digital input -> BOOTPIN goto com_init endm ;; ------------------------------------- ;; DEFINES (defines) #include "generic-defines.inc" ;; ------------------------------------- ;; Bootloader init #include "generic-init.inc" ;; ------------------------------------- ;; Bootloader (com specific subroutines and init) ;; #include "com-16f887-uart.inc" #include "com-16f887-spi.inc" ;; ------------------------------------- ;; Bootloader (generic init/body) #include "generic-mainloop.inc" ;; ------------------------------------- ;; chip specific commands #include "cmds-16f887.inc" ;; ------------------------------------- ;; ------------------------------------- ;; dummy user code org USERVECT goto USERVECT ;; ------------------------------------- ;; END end