stm8loader add exec
This commit is contained in:
2
Makefile
2
Makefile
@@ -42,7 +42,7 @@ CFLAGS += --stack-auto --noinduction --use-non-free
|
|||||||
LDFLAGS = -m$(ARCH) -l$(ARCH) --out-fmt-ihx
|
LDFLAGS = -m$(ARCH) -l$(ARCH) --out-fmt-ihx
|
||||||
|
|
||||||
OPTION_BOOT := 0x480D
|
OPTION_BOOT := 0x480D
|
||||||
RAM_BOOT := 0x0232
|
RAM_BOOT := 0x023E
|
||||||
OPTFLAGS = -Wl-bOPTION=0x4800 -Wl-bOPTION_BOOT=$(OPTION_BOOT)
|
OPTFLAGS = -Wl-bOPTION=0x4800 -Wl-bOPTION_BOOT=$(OPTION_BOOT)
|
||||||
B2FLAGS = -Wl-bRAM_BOOT=$(RAM_BOOT)
|
B2FLAGS = -Wl-bRAM_BOOT=$(RAM_BOOT)
|
||||||
|
|
||||||
|
|||||||
Binary file not shown.
@@ -96,15 +96,15 @@ _main_loop:
|
|||||||
|
|
||||||
_invalid_cmd_error:
|
_invalid_cmd_error:
|
||||||
; 未知命令,发送错误响应
|
; 未知命令,发送错误响应
|
||||||
mov tx_state, #ERR_INVCMD
|
ld A, #ERR_INVCMD
|
||||||
|
_ack_then_back:
|
||||||
call send_ack_state_response
|
call send_ack_state_response
|
||||||
jra _main_loop
|
jra _main_loop
|
||||||
|
|
||||||
_checksum_error:
|
_checksum_error:
|
||||||
; 校验和错误响应
|
; 校验和错误响应
|
||||||
mov tx_state, #ERR_CHECKSUM
|
ld A, #ERR_CHECKSUM
|
||||||
call send_ack_state_response
|
jra _ack_then_back
|
||||||
jra _main_loop
|
|
||||||
|
|
||||||
_cmd_read:
|
_cmd_read:
|
||||||
; 读取内存命令
|
; 读取内存命令
|
||||||
@@ -127,7 +127,8 @@ _cmd_exec:
|
|||||||
ld A, #0x81 ; ret code
|
ld A, #0x81 ; ret code
|
||||||
ld (X), A ; X point to checksum already
|
ld (X), A ; X point to checksum already
|
||||||
call rx_buffer
|
call rx_buffer
|
||||||
jra _main_loop
|
ld A, #SUCCESS_CODE
|
||||||
|
jra _ack_then_back
|
||||||
|
|
||||||
receive_frame:
|
receive_frame:
|
||||||
; 初始化接收状态
|
; 初始化接收状态
|
||||||
@@ -204,12 +205,18 @@ _verify_loop:
|
|||||||
ret
|
ret
|
||||||
|
|
||||||
send_response_pkg:
|
send_response_pkg:
|
||||||
clr calc_checksum
|
; set header
|
||||||
ldw X, #tx_buffer
|
ldw X, #tx_buffer
|
||||||
|
ld A, #ACK_HEADER
|
||||||
|
ld (X), A
|
||||||
|
|
||||||
|
; tx_data_length += 5
|
||||||
ld A, tx_data_length
|
ld A, tx_data_length
|
||||||
add A, #5
|
add A, #5
|
||||||
ld temp_var1, A
|
ld temp_var1, A
|
||||||
|
|
||||||
; send data
|
; send data
|
||||||
|
clr calc_checksum
|
||||||
_send_loop:
|
_send_loop:
|
||||||
ld A, (X)
|
ld A, (X)
|
||||||
ld UART1_DR, A
|
ld UART1_DR, A
|
||||||
@@ -222,49 +229,39 @@ _wait_tx1:
|
|||||||
incw X
|
incw X
|
||||||
dec temp_var1
|
dec temp_var1
|
||||||
jrne _send_loop
|
jrne _send_loop
|
||||||
|
|
||||||
; send checksum
|
; send checksum
|
||||||
ld A, calc_checksum
|
ld A, calc_checksum
|
||||||
ld UART1_DR, A
|
ld UART1_DR, A
|
||||||
_wait_tx2:
|
_wait_tx2:
|
||||||
btjf UART1_SR, #7, _wait_tx2
|
btjf UART1_SR, #7, _wait_tx2
|
||||||
|
|
||||||
; finish
|
; finish
|
||||||
ret
|
ret
|
||||||
|
|
||||||
; 发送应答状态帧
|
; 发送应答状态帧
|
||||||
send_ack_state_response:
|
send_ack_state_response:
|
||||||
; set header
|
; set data
|
||||||
ldw X, #tx_buffer
|
ldw X, #tx_buffer+5
|
||||||
ld A, #ACK_HEADER
|
|
||||||
ld (X), A
|
ld (X), A
|
||||||
|
|
||||||
; set length
|
; set length
|
||||||
addw X, #4
|
decw X
|
||||||
ld A, #1
|
ld A, #1
|
||||||
ld (X), A
|
ld (X), A
|
||||||
ld tx_data_length, A
|
ld tx_data_length, A
|
||||||
|
|
||||||
; set data
|
|
||||||
incw X
|
|
||||||
ld A, tx_state
|
|
||||||
ld (X), A
|
|
||||||
|
|
||||||
callr send_response_pkg
|
callr send_response_pkg
|
||||||
ret
|
ret
|
||||||
|
|
||||||
; 发送应答数据帧
|
; 发送应答数据帧
|
||||||
send_ack_data_response:
|
send_ack_data_response:
|
||||||
; set header
|
|
||||||
ldw X, #tx_buffer
|
|
||||||
ld A, #ACK_HEADER
|
|
||||||
ld (X), A
|
|
||||||
|
|
||||||
; set length
|
; set length
|
||||||
addw X, #4
|
ldw X, #tx_buffer+4
|
||||||
ld A, tx_data_length
|
ld A, tx_data_length
|
||||||
ld (X), A
|
ld (X), A
|
||||||
|
|
||||||
; already set data
|
; already set data
|
||||||
|
|
||||||
callr send_response_pkg
|
callr send_response_pkg
|
||||||
ret
|
ret
|
||||||
|
|
||||||
@@ -333,6 +330,7 @@ _mem_write:
|
|||||||
incw Y
|
incw Y
|
||||||
dec temp_var1
|
dec temp_var1
|
||||||
jrne _mem_write
|
jrne _mem_write
|
||||||
|
ld A, #SUCCESS_CODE
|
||||||
callr send_ack_state_response
|
callr send_ack_state_response
|
||||||
ret
|
ret
|
||||||
|
|
||||||
@@ -378,6 +376,7 @@ _write_end:
|
|||||||
mov FLASH_NCR2, #0xFF
|
mov FLASH_NCR2, #0xFF
|
||||||
; lock FLASH/DATA
|
; lock FLASH/DATA
|
||||||
callr lock_flash
|
callr lock_flash
|
||||||
|
ld A, tx_state
|
||||||
call send_ack_state_response
|
call send_ack_state_response
|
||||||
ret
|
ret
|
||||||
|
|
||||||
|
|||||||
File diff suppressed because it is too large
Load Diff
Reference in New Issue
Block a user