From 5515a8a2d64de420bd4cb413f263190425b097d8 Mon Sep 17 00:00:00 2001 From: Christian Pointner Date: Wed, 3 Jul 2013 00:34:54 +0000 Subject: added some constants and first version for serial send,recv routines git-svn-id: https://svn.spreadspace.org/pic/trunk@24 a09c6847-51d9-44de-8ef2-e725cf50f3c7 --- bootloader/bootloader.asm | 104 ++++++++++++++++++++++++++++++++++++++++------ 1 file changed, 91 insertions(+), 13 deletions(-) (limited to 'bootloader/bootloader.asm') diff --git a/bootloader/bootloader.asm b/bootloader/bootloader.asm index eacc30b..c99f337 100644 --- a/bootloader/bootloader.asm +++ b/bootloader/bootloader.asm @@ -29,32 +29,110 @@ ;; ------------------------------------- ;; DEFINES -#define BOOTPIN PORTC,7 -USERVECT EQU H'100' -ISRVECT EQU USERVECT + H'4' +#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 - org 4 + org 0 + btfsc BOOTPIN + goto USERVECT + goto boot ;; ------------------------------------- ;; goto user ISR + org 4 isr - goto ISRVECT + goto ISRVECT ;; ------------------------------------- - ;; Bootloader + ;; Bootloader (Subroutines) +uart_tx_byte + btfss PIR1,TXIF + goto uart_tx_byte + movwf TXREG + return + + ;; ------------------------------------- + ;; Bootloader (init) boot - goto USERVECT + ;; 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 + org USERVECT + goto USERVECT ;; ------------------------------------- ;; END -- cgit v1.2.3