From f7dc5cdbfd6db4eebaa872474f36a474acf7ec88 Mon Sep 17 00:00:00 2001 From: Christian Pointner Date: Thu, 11 Jul 2013 01:16:48 +0000 Subject: added inital support for 16f1847 git-svn-id: https://svn.spreadspace.org/pic/trunk@75 a09c6847-51d9-44de-8ef2-e725cf50f3c7 --- bootloader/cmds-16f1847.inc | 121 ++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 121 insertions(+) create mode 100644 bootloader/cmds-16f1847.inc (limited to 'bootloader/cmds-16f1847.inc') diff --git a/bootloader/cmds-16f1847.inc b/bootloader/cmds-16f1847.inc new file mode 100644 index 0000000..2e6d7e4 --- /dev/null +++ b/bootloader/cmds-16f1847.inc @@ -0,0 +1,121 @@ + ;; + ;; 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 . + ;; + + ;; flash read -------- +cmd_r_flash +;; movlw FSS ; initialize EEADR:EEADRH and FSR +;; movwf cnt +;; movlw b'01011000' +;; movwf STATUS +;; movlw combuff + .2 +;; movwf FSR +;; movf INDF,w +;; movwf EEADR +;; incf FSR,f +;; movf INDF,w +;; movwf EEADRH +;; read_flash_segment_loop +;; bsf STATUS,RP0 ; perform the actual read +;; bsf EECON1,EEPGD +;; bsf EECON1,RD +;; nop +;; nop +;; bcf STATUS,RP0 +;; movf EEDAT,w ; load code word from EEDAT:EEDATH to combuff +;; movwf INDF +;; incf FSR,f +;; movf EEDATH,w +;; movwf INDF +;; incf FSR,f +;; incfsz EEADR,f ; increment flash address +;; goto read_flash_segment_next +;; incf EEADRH,f +g;; read_flash_segment_next +;; decfsz cnt,f +;; goto read_flash_segment_loop +;; bcf STATUS,RP1 +;; clrf combuff + .2 ; = E_OK +;; movlw .1 + .2*FSS ; bytes to send +;; call send_answer + movlw E_NOT_IMPL + call ack_cmd + goto wait_new_cmd + + ;; flash write -------- +cmd_w_flash +;; movf combuff + .3,f ; if addr[15:8] == 0 -> boot loader section +;; btfsc STATUS,Z +;; goto address_prohibited +;; movlw FLASH_BOUNDARY ; addr on boundary? +;; andwf combuff + .2,w +;; btfss STATUS,Z +;; goto address_invalid +;; movlw FSS ; initialize EEADR:EEADRH and FSR +;; movwf cnt +;; movlw b'01011000' +;; movwf STATUS +;; movlw combuff + .2 +;; movwf FSR +;; movf INDF,w +;; movwf EEADR +;; incf FSR,f +;; movf INDF,w +;; movwf EEADRH + +;; write_flash_segment_loop +;; incf FSR,f ; load code word into EEDAT:EEDATH +;; movf INDF,w +;; movwf EEDAT +;; incf FSR,f +;; movf INDF,w +;; movwf EEDATH + +;; bsf STATUS,RP0 ; now start the acutal write sequence +;; bsf EECON1,EEPGD +;; bsf EECON1,WREN +;; movlw H'55' +;; movwf EECON2 +;; movlw H'AA' +;; movwf EECON2 +;; bsf EECON1,WR +;; nop +;; nop +;; bcf EECON1,WREN +;; bcf STATUS,RP0 +;; incfsz EEADR,f ; increment flash address +;; goto write_flash_segment_next +;; incf EEADRH,f +;; write_flash_segment_next +;; decfsz cnt,f +;; goto write_flash_segment_loop +;; bsf STATUS,RP0 +;; clrw ; check if a write error occured +;; btfsc EECON1,WRERR +;; movlw E_FLASH_WERR +;; bcf STATUS,RP1 +;; bcf STATUS,RP0 +;; movwf combuff + .2 ; = E_OK +;; movlw .1 ; bytes to send +;; call send_answer + movlw E_NOT_IMPL + call ack_cmd + goto wait_new_cmd -- cgit v1.2.3