;; ;; spreadspace pic utils ;; ;; ;; Copyright (C) 2011 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_OFF & _PWRTE_OFF & _WDT_OFF & _XT_OSC ;; __config _CONFIG2, _BOR21V & _WRT_256 ;; ------------------------------------- ;; DEFINES #define BOOTPIN PORTC,7 USERVECT EQU H'100' ISRVECT EQU USERVECT + H'4' FSS EQU 8 E_OK EQU 0 E_INV_CMD EQU 1 E_BAD_CSUM EQU 2 E_NOT_IMPL EQU 3 E_FLASH_WERR EQU 4 E_ADDR_INVALID EQU 5 E_ADDR_PROHIB EQU 6 CMD_IDENTIFY EQU 'i' CMD_BOOT EQU 'b' CMD_RESET EQU 'r' CMD_R_FLASH EQU 'f' CMD_W_FLASH EQU 'F' CMD_R_EEPROM EQU 'e' CMD_W_EEPROM EQU 'E' CMD_R_CONFIG EQU 'c' CMD_W_CONFIG EQU 'C' ;; ------------------------------------- ;; Boot test org 0 btfsc BOOTPIN goto USERVECT goto boot ;; ------------------------------------- ;; goto user ISR org 4 isr goto ISRVECT ;; ------------------------------------- ;; Bootloader (Subroutines) uart_tx_byte btfss PIR1,TXIF goto uart_tx_byte movwf TXREG return ;; ------------------------------------- ;; Bootloader (init) boot ;; bank 3 bsf STATUS,RP0 bsf STATUS,RP1 ;; movlw b'00001000' ; TX non-inverted, 16bit Baudrate, no auto baud detect movlw b'00011000' ; TX inverted, 16bit Baudrate, no auto baud detect movwf BAUDCTL ;; bank 1 bcf STATUS,RP1 movlw b'00100100' ; Baudrate = High Speed, async mode, transmit enabled, 8bit movwf TXSTA movlw .34 ; Baudrate = 57600 (@ 8MHz) -> -0,79 % Error ;; movlw .51 ; Baudrate = 38400 (@ 8MHz) -> -0,002 % Error ;; movlw .103 ; Baudrate = 19200 (@ 8MHz) -> 0,16 % Error movwf SPBRG clrf SPBRGH ;; bank 0 bcf STATUS,RP0 movlw b'10010000' ; enable Serial Port, 8bit, enable continues receive, disable address detection movwf RCSTA wait_cmd btfsc PIR1,RCIF goto uart_rx_byte btfss RCSTA,OERR goto uart_rx_oe goto wait_cmd uart_rx_oe bcf RCSTA,CREN bsf RCSTA,CREN goto wait_cmd uart_rx_byte btfsc RCSTA,FERR goto uart_rx_fe movf RCREG,w ; TODO: check parity?? movwf TMP ; TODO: move to input string ;; TODO: check if command is finished and jump ;; to 'exec_cmd' return uart_rx_fe movf RCREG,w goto wait_cmd exec_cmd ;; TODO: execute received command goto USERVECT ;; ------------------------------------- ;; dummy user code org USERVECT goto USERVECT ;; ------------------------------------- ;; END end