;; ;; 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=16F1847 include "p16f1847.inc" __config _CONFIG1, _FOSC_INTOSC & _WDTE_OFF & _PWRTE_OFF & _MCLRE_ON & _CP_OFF & _CPD_OFF & _BOREN_OFF & _CLKOUTEN_OFF & _IESO_OFF & _FCMEN_OFF __config _CONFIG2, _WRT_BOOT & _PLLEN_OFF & _STVREN_OFF & _BORV_LO & _LVP_OFF ;; ------------------------------------- ;; DEFINES (chip/com specific) #define INTPIN PORTB,3 ; use this for com-spi USERVECT EQU H'200' ISRVECT EQU USERVECT + H'4' FLASH_BOUNDARY EQU b'00011111' ; flash write boundary is at 32 bytes boundaries CONFIG_OFFSET EQU H'07' VERSION_MAJ EQU .1 VERSION_MIN EQU .0 NAME_0 EQU '9' NAME_1 EQU '4' NAME_2 EQU '7' DEVID_L EQU H'82' DEVID_H EQU H'14' FLASH_SIZE_L EQU H'00' FLASH_SIZE_H EQU H'20' ; 0x2000 -> 8192 Words of Flash FSS EQU .32 ; there 32 write latches 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 #define HOOK_CMD_RESET cmd_reset #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_r_config #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 goto preinit endm ;; for compatibility with older MCUs #define FSR FSR0L #define INDF INDF0 ;; ------------------------------------- ;; DEFINES (defines) #include "generic-defines.inc" ;; ------------------------------------- ;; Bootloader init #include "generic-init.inc" preinit movlb .3 ;; bcf ANSELB,ANSB1 ; use this for com-uart bcf ANSELB,ANSB5 ; use this for com-spi movlb .0 ;; btfsc PORTB,1 ; use this for com-uart btfsc PORTB,5 ; use this for com-spi goto USERVECT goto com_init ;; ------------------------------------- ;; Bootloader (com specific subroutines and init) ;; #include "com-16f1847-uart.inc" #include "com-16f1847-spi.inc" ;; ------------------------------------- ;; Bootloader (generic init/body) #include "generic-mainloop.inc" ;; ------------------------------------- ;; chip specific commands #include "cmds-16f1847.inc" ;; ------------------------------------- ;; ------------------------------------- ;; dummy user code org USERVECT goto USERVECT ;; ------------------------------------- ;; END end