From 02e24f0f533fe904c3a5275c4060c10c38d7c17a Mon Sep 17 00:00:00 2001 From: Ján Sučan Date: Wed, 10 May 2017 15:13:29 +0200 Subject: Uvodny commit, subory su rovnake ako na CD prilozenom k vytlacenemu texu bakalarskej prace, naviac je pridany len subor LICENCIA --- firmware/include/COMMON.INC | 30 +++++++ firmware/include/SHELL.INC | 51 +++++++++++ firmware/include/SUBROUTINES.INC | 177 +++++++++++++++++++++++++++++++++++++++ 3 files changed, 258 insertions(+) create mode 100755 firmware/include/COMMON.INC create mode 100755 firmware/include/SHELL.INC create mode 100755 firmware/include/SUBROUTINES.INC (limited to 'firmware/include') diff --git a/firmware/include/COMMON.INC b/firmware/include/COMMON.INC new file mode 100755 index 0000000..fbad655 --- /dev/null +++ b/firmware/include/COMMON.INC @@ -0,0 +1,30 @@ +IDMANUF DEFR 0F07Eh +IDCHIP DEFR 0F07Ch +XPERCON EQU 0F024h + +FW2BASE EQU 0E000h ; 0F600h 0E000h +FW2END EQU 0E7FFh ; 0F9FFh 0E7FFh +FW2DATA EQU (FW2END + 1 - 42) + +FW1BASE EQU 0FA40h + +STACK_TOP EQU 0FC00h +STACK_BOTTOM EQU (STACK_TOP - 256d) ; 256 bytes + +REGBANK0 EQU STACK_TOP +REGBANK1 EQU (REGBANK0 + 32d) + +CMD_PING EQU 00h +CMD_ERASE_BLOCKS EQU 01h +CMD_READ EQU 02h +CMD_WRITE EQU 03h +CMD_IDENTIFY EQU 04h +CMD_ERASE_CHIP EQU 05h + +SHELL_ACK EQU 0ABh + +RET_SERIAL_OVERRUN EQU 20h +RET_BAD_ECHO EQU 21h +RET_ERASE_ERROR EQU 30h +RET_WRITE_ERROR EQU 31h + diff --git a/firmware/include/SHELL.INC b/firmware/include/SHELL.INC new file mode 100755 index 0000000..f951a7f --- /dev/null +++ b/firmware/include/SHELL.INC @@ -0,0 +1,51 @@ +CMDLOOP: + ; Receive command safely, EXCEPT zero word + CALL REC_BYTE + CMP R14,#0 + JMPR CC_NE,CMDLOOP_ERROR + CMP R15,#CMD_PING + JMPR CC_NE,CMDLOOP_NO_PING + ; Respond to ping + MOV R15,#SHELL_ACK + CALL SEND_BYTE + JMP CMDLOOP +CMDLOOP_NO_PING: + MOV R13,#SEND_BYTE + MOV R12,#REC_BYTE + CALL ACK_DATA + CMP R14,#0 + JMPR CC_EQ,CMDLOOP_OK +CMDLOOP_ERROR: + MOV R15,R14 + CALL SEND_BYTE + JMP CMDLOOP +CMDLOOP_OK: + PUSH R15 + MOV R15,#0 + CALL SEND_BYTE ; Send zero byte + POP R15 ; Restore command number + + CMP R15,#CMD_ERASE_BLOCKS + JMPR CC_NE,CMDLOOP_1 + CALL ERASE_BLOCKS + JMP CMDLOOP +CMDLOOP_1: + CMP R15,#CMD_READ + JMPR CC_NE,CMDLOOP_2 + CALL READ + JMP CMDLOOP +CMDLOOP_2: + CMP R15,#CMD_WRITE + JMPR CC_NE,CMDLOOP_3 + CALL WRITE + JMP CMDLOOP +CMDLOOP_3: + CMP R15,#CMD_IDENTIFY + JMPR CC_NE,CMDLOOP_4 + CALL IDENTIFY + JMP CMDLOOP +CMDLOOP_4: + CMP R15,#CMD_ERASE_CHIP + JMPR CC_NE,CMDLOOP + CALL ERASE_CHIP + JMP CMDLOOP diff --git a/firmware/include/SUBROUTINES.INC b/firmware/include/SUBROUTINES.INC new file mode 100755 index 0000000..65d5f55 --- /dev/null +++ b/firmware/include/SUBROUTINES.INC @@ -0,0 +1,177 @@ +IDENTIFY PROC NEAR + MOV R15,IDMANUF + CALL SEND + MOV R15,IDCHIP + CALL SEND + RET +IDENTIFY ENDP + + +; Vstup: R8:R7 global counter, R10 block counter +; Vystup: R14 navratovy kod (0 pokracuje sa, 1 ukoncit spracovanie) +CHECK_COUNT PROC NEAR + ; Defaultny navratovy kod je "pokracovat" + MOV R14,#0 + ; Dekrementujeme globalny citac + SUB R7,#2 + SUBC R8,#0 + CMP R8,#0 + JMPR CC_NE,CHECK_COUNT_BLOCK + CMP R7,#0 + JMPR CC_NE,CHECK_COUNT_BLOCK + ; Uspesne koncime, mame precitany potrebny pocet bajtov + MOV R14,#1 + JMP CHECK_RET_SEND +CHECK_COUNT_BLOCK: + ; Dekrementujeme citac 1024 bajtoveho bloku + SUB R10,#2 + CMP R10,#0 + JMPR CC_NE,CHECK_RET +CHECK_RET_SEND: + ; Odosleme nulu + MOV R15,#0 + CALL SEND + ; Resetujeme citac 1024 bajtoveho bloku + MOV R10,#1024 + ; Posleme hodnotu globalneho citaca + MOV R15,R7 + CALL SEND + MOV R15,R8 + CALL SEND +CHECK_RET: + RET +CHECK_COUNT ENDP + +;------------------------------------------------------------------------------- +; Safe receive +;------------------------------------------------------------------------------- +; !! Posiela do PC kod chyby +REC_SAFE PROC NEAR + ; Vystup: R14 navratovy kod, R15 data (slovo) + CALL REC + CMP R14,#0 + JMPR CC_NE,REC_SAFE_RETURN_NO_SEND + CALL ACK_WORD + ; Send result of safe receiving +REC_SAFE_RETURN: + PUSH R15 + MOV R15,R14 + CALL SEND + POP R15 +REC_SAFE_RETURN_NO_SEND: + RET +REC_SAFE ENDP + + +REC_DWORD_SAFE PROC NEAR + ; Vystup: R14 navratovy kod, R8:R7 data (dvojslovo) + PUSH R15 + CALL REC_SAFE + CMP R14,#0 + JMPR CC_NE,REC_DWORD_ERROR + MOV R7,R15 + CALL REC_SAFE + CMP R14,#0 + JMPR CC_NE,REC_DWORD_ERROR + MOV R8,R15 +REC_DWORD_ERROR: + POP R15 + RET +REC_DWORD_SAFE ENDP + + +ACK_WORD PROC NEAR + PUSH R12 + PUSH R13 + MOV R13,#SEND + MOV R12,#REC + CALL ACK_DATA + POP R13 + POP R12 + RET +ACK_WORD ENDP + + +ACK_DATA PROC NEAR + ; Vstup: R15 data (slovo), R13 (pointer na SEND), R12 (pointer na REC) + ; Vystup: R14 navratovy kod, R15 data (slovo) + PUSH R0 + PUSH R15 + MOV R14,#RET_BAD_ECHO + MOV R0,R15 + CALL [R13] ; SEND + CALL [R12] ; RECEIVE + ; Serial buffer overrun? + CMP R14,#0 + JMPR CC_NE,ACK_DATA_RETURN ; Return code is already in R14 + ; Good echo from PC? + CMP R15,R0 + JMPR CC_NE,ACK_DATA_RETURN ; Return code is already in R14 + ; Everything is OK + MOV R14,#0 +ACK_DATA_RETURN: + POP R15 + POP R0 + RET +ACK_DATA ENDP + +;------------------------------------------------------------------------------- +; Send and receive +;------------------------------------------------------------------------------- +SEND PROC NEAR + ; Posle slovo. + ; Vstup: R15 + ; Zachovava: R15 + PUSH R15 + CALL SEND_BYTE + SHR R15,#8 + CALL SEND_BYTE + POP R15 + RET +SEND ENDP + + +SEND_BYTE PROC NEAR + ; Posle nizsi bajt zo slova. + ; Vstup: R15 + ; Zachovava: R15 +SEND_BYTE_1: + JNB S0TIC.7,SEND_BYTE_1 + BCLR S0TIC.7 + MOV S0TBUF,R15 ; bity 9 az 15 su nevyznamne + RET +SEND_BYTE ENDP + + +REC PROC NEAR + ; Vystup: R15 data, R14 navratovy kod + PUSH R0 + CALL REC_BYTE ; Receive low byte + CMP R14,#0 + JMPR CC_NE,REC_OK + MOV R0,R15 ; high byte bude vzdy 0 + CALL REC_BYTE + SHL R15,#8 + OR R15,R0 +REC_OK: + POP R0 + RET +REC ENDP + + +REC_BYTE PROC NEAR + ; Vystup: R15 data (low byte), R14 navratovy kod +REC_BYTE_1: + JNB S0RIC.7,REC_BYTE_1 + JB S0CON.10,REC_BYTE_ERR + MOV R15,S0RBUF ; nevyznamne bity pre dany operacny rezim serioveho rozhrania budu precitane ako 0 + BCLR S0RIC.7 + ; Successfully received word + MOV R14,#0 + JMP REC_BYTE_OK +REC_BYTE_ERR: + BCLR S0CON.10 + MOV R14,#RET_SERIAL_OVERRUN +REC_BYTE_OK: + RET +REC_BYTE ENDP -- cgit v1.2.3