📄 uart.s
字号:
; {
; block_size = ((unsigned int)msg_buffer[1])<<8;
; block_size |= msg_buffer[2];
; tmp = msg_buffer[3];
;
; for(i=0;i<block_size;i++)
; {
; //Select Low or High-Byte
; SPIWrite(tmp);
; SPIWrite16(address&0xFFFF);
; msg_buffer[i+2] = SPIWrite(0);
; //increment address
; address++;
; }
; num_bytes = block_size+3;
; msg_buffer[0] = CMD_READ_EEPROM_ISP;
; msg_buffer[1] = STATUS_CMD_OK;
; msg_buffer[block_size+2] = STATUS_CMD_OK;
; }
;
; //命令CMD_PROGRAM_FUSE_ISP
; else if(cmd==CMD_PROGRAM_FUSE_ISP)
; {
; universalComm(msg_buffer[1],msg_buffer[2],msg_buffer[3],msg_buffer[4]);
; num_bytes = 3;
; msg_buffer[0] = CMD_PROGRAM_FUSE_ISP;
; msg_buffer[1] = STATUS_CMD_OK;
; msg_buffer[2] = STATUS_CMD_OK;
; }
;
; //命令CMD_READ_FUSE_ISP
; else if(cmd==CMD_READ_FUSE_ISP)
; {
; tmp = SPIWrite(msg_buffer[2]);
; if(msg_buffer[1] == 1) msg_buffer[2] = tmp;
; tmp = SPIWrite(msg_buffer[3]);
; if(msg_buffer[1] == 2) msg_buffer[2] = tmp;
; tmp = SPIWrite(msg_buffer[4]);
; if(msg_buffer[1] == 3) msg_buffer[2] = tmp;
; tmp = SPIWrite(msg_buffer[5]);
; if(msg_buffer[1] == 4) msg_buffer[2] = tmp;
; num_bytes = 4;
; msg_buffer[0] = CMD_READ_FUSE_ISP;
; msg_buffer[1] = STATUS_CMD_OK;
; msg_buffer[3] = STATUS_CMD_OK;
; }
;
; //命令CMD_PROGRAM_LOCK_ISP
; else if(cmd==CMD_PROGRAM_LOCK_ISP)
; {
; universalComm(msg_buffer[1],msg_buffer[2],msg_buffer[3],msg_buffer[4]);
;
; num_bytes = 3;
; msg_buffer[0] = CMD_PROGRAM_LOCK_ISP;
; msg_buffer[1] = STATUS_CMD_OK;
; msg_buffer[2] = STATUS_CMD_OK;
; }
; //命令CMD_READ_LOCK_ISP
; else if(cmd==CMD_READ_LOCK_ISP)
; {
; tmp = SPIWrite(msg_buffer[2]);
; if(msg_buffer[1] == 1) msg_buffer[2] = tmp;
; tmp = SPIWrite(msg_buffer[3]);
; if(msg_buffer[1] == 2) msg_buffer[2] = tmp;
; tmp = SPIWrite(msg_buffer[4]);
; if(msg_buffer[1] == 3) msg_buffer[2] = tmp;
; tmp = SPIWrite(msg_buffer[5]);
; if(msg_buffer[1] == 4) msg_buffer[2] = tmp;
; num_bytes = 4;
; msg_buffer[0] = CMD_READ_LOCK_ISP;
; msg_buffer[1] = STATUS_CMD_OK;
; msg_buffer[3] = STATUS_CMD_OK;
; }
;
; //命令CMD_READ_SIGNATURE_ISP
; else if(cmd==CMD_READ_SIGNATURE_ISP)
; {
; tmp = SPIWrite(msg_buffer[2]);
; if(msg_buffer[1] == 1) msg_buffer[2] = tmp;
; tmp = SPIWrite(msg_buffer[3]);
; if(msg_buffer[1] == 2) msg_buffer[2] = tmp;
; tmp = SPIWrite(msg_buffer[4]);
; if(msg_buffer[1] == 3) msg_buffer[2] = tmp;
; tmp = SPIWrite(msg_buffer[5]);
; if(msg_buffer[1] == 4) msg_buffer[2] = tmp;
; num_bytes = 4;
; msg_buffer[0] = CMD_READ_SIGNATURE_ISP;
; msg_buffer[1] = STATUS_CMD_OK;
; msg_buffer[3] = STATUS_CMD_OK;
; }
;
; //命令CMD_READ_OSCCAL_ISP
; else if(cmd==CMD_READ_OSCCAL_ISP)
; {
; tmp = SPIWrite(msg_buffer[2]);
; if(msg_buffer[1] == 1) msg_buffer[2] = tmp;
; tmp = SPIWrite(msg_buffer[3]);
; if(msg_buffer[1] == 2) msg_buffer[2] = tmp;
; tmp = SPIWrite(msg_buffer[4]);
; if(msg_buffer[1] == 3) msg_buffer[2] = tmp;
; tmp = SPIWrite(msg_buffer[5]);
; if(msg_buffer[1] == 4) msg_buffer[2] = tmp;
; num_bytes = 4;
; msg_buffer[0] = CMD_READ_OSCCAL_ISP;
; msg_buffer[1] = STATUS_CMD_OK;
; msg_buffer[3] = STATUS_CMD_OK;
; }
; else
; {
; num_bytes = 1;
; msg_buffer[0] = STATUS_CMD_UNKNOWN;
; }
; //传送缓冲区数据
; if(num_bytes>0)
; {
; putChar(MESSAGE_START);
; checkSum=MESSAGE_START;
; putChar(seqNum);
; checkSum^=seqNum;
; tmp=(num_bytes&0xFF00)>>8;
; putChar(tmp);
; checkSum^=tmp;
; tmp=num_bytes&0x00FF;
; putChar(tmp);
; checkSum^=tmp;
; putChar(TOKEN);
; checkSum^=TOKEN;
; for(i=0;i<num_bytes;i++)
; {
; putChar(msg_buffer[i]);
; checkSum^=msg_buffer[i];
; }
; putChar(checkSum);
; checkSum=0x00;
; }
;
; }
; */
;
;
; /**********************************************************************
; functionName:void rx_pkg_process(void)
; description:串口接收包处理
; **********************************************************************/
; void rx_pkg_process(void)
; {
.dbline 844
; uint16 i;
; uint08 cmd;
;
; cmd = uart_tx_buf[0];
lds R20,_uart_tx_buf
.dbline 846
;
; if(msg_end_flag)
lds R2,_msg_end_flag
tst R2
breq L22
.dbline 847
; {
.dbline 848
; msg_end_flag=0;
clr R2
sts _msg_end_flag,R2
.dbline 850
;
; for(i=0;i<uart_rx_counter;i++)
clr R20
clr R21
xjmp L27
L24:
.dbline 851
.dbline 852
ldi R24,<_uart_rx_buf
ldi R25,>_uart_rx_buf
movw R30,R20
add R30,R24
adc R31,R25
ldd R16,z+0
xcall _put_char
.dbline 853
L25:
.dbline 850
subi R20,255 ; offset = 1
sbci R21,255
L27:
.dbline 850
lds R2,_uart_rx_counter
clr R3
cp R20,R2
cpc R21,R3
brlo L24
.dbline 865
L22:
.dbline -2
L21:
xcall pop_gset1
.dbline 0 ; func end
ret
.dbsym r cmd 20 c
.dbsym r i 20 i
.dbend
.area vector(rom, abs)
.org 52
jmp _uart0_tx_isr
.area text(rom, con, rel)
.dbfile G:\CS5532\firmware\uart.c
.dbfunc e uart0_tx_isr _uart0_tx_isr fV
.even
_uart0_tx_isr::
st -y,R2
st -y,R24
st -y,R25
st -y,R30
st -y,R31
in R2,0x3f
st -y,R2
.dbline -1
.dbline 874
; {
; put_char(uart_rx_buf[i]);
; }
; /*switch(cmd)
; {
; case 0:
; {
; break;
; }
; default:
; {
; break;
; }
; }*/
; }
; }
;
; /**********************************************************************
; functionName:void uart0_tx_isr(void)
; description:串口发送中断函数
; **********************************************************************/
; #pragma interrupt_handler uart0_tx_isr:14
; void uart0_tx_isr(void)
; {
.dbline 875
; uart_tx_counter--;
lds R24,_uart_tx_counter
subi R24,1
sts _uart_tx_counter,R24
.dbline 876
; if(uart_tx_counter) //如果还没有发送完成
tst R24
breq L29
.dbline 877
; {
.dbline 878
; UDR=uart_tx_buf[uart_tx_rd_ptr];
ldi R24,<_uart_tx_buf
ldi R25,>_uart_tx_buf
lds R30,_uart_tx_rd_ptr
clr R31
add R30,R24
adc R31,R25
ldd R2,z+0
out 0xc,R2
.dbline 879
; uart_tx_rd_ptr++;
lds R24,_uart_tx_rd_ptr
subi R24,255 ; addi 1
sts _uart_tx_rd_ptr,R24
.dbline 880
; if(uart_tx_rd_ptr==UART_BUF_SIZE)uart_tx_rd_ptr=0;
cpi R24,20
brne L30
.dbline 880
clr R2
sts _uart_tx_rd_ptr,R2
.dbline 881
; }
xjmp L30
L29:
.dbline 883
.dbline 884
cbi 0xa,6
.dbline 886
L30:
.dbline -2
L28:
ld R2,y+
out 0x3f,R2
ld R31,y+
ld R30,y+
ld R25,y+
ld R24,y+
ld R2,y+
.dbline 0 ; func end
reti
.dbend
.dbfunc e put_char _put_char fc
; uart_data -> R16
.even
_put_char::
.dbline -1
.dbline 895
; else
; {
; UCSRB&=~BIT(TXCIE); //发送结束中断不使能
; //UART_TX_LED;
; }
; }
;
;
; /**********************************************************************
; functionName:uint08 write_uart(uint08 uart_data)
; description:写串口数据
; **********************************************************************/
; uint08 put_char(uint08 uart_data)
; {
.dbline 896
; if(uart_tx_counter==UART_BUF_SIZE)
lds R24,_uart_tx_counter
cpi R24,20
brne L34
.dbline 897
; {
.dbline 898
; return(UART_FALSE); //表示串口缓冲器溢出
clr R16
xjmp L33
L34:
.dbline 900
; }
; uart_tx_buf[uart_tx_wr_ptr]=uart_data;
ldi R24,<_uart_tx_buf
ldi R25,>_uart_tx_buf
lds R30,_uart_tx_wr_ptr
clr R31
add R30,R24
adc R31,R25
std z+0,R16
.dbline 901
; uart_tx_wr_ptr++;
lds R24,_uart_tx_wr_ptr
subi R24,255 ; addi 1
sts _uart_tx_wr_ptr,R24
.dbline 902
; if(uart_tx_wr_ptr>=UART_BUF_SIZE)uart_tx_wr_ptr=0;
cpi R24,20
brlo L36
.dbline 902
clr R2
sts _uart_tx_wr_ptr,R2
L36:
.dbline 903
; uart_tx_counter++;
lds R24,_uart_tx_counter
subi R24,255 ; addi 1
sts _uart_tx_counter,R24
.dbline 904
; if(uart_tx_counter==1)
cpi R24,1
brne L38
.dbline 905
; {
.dbline 906
; UDR=uart_tx_buf[uart_tx_rd_ptr];
ldi R24,<_uart_tx_buf
ldi R25,>_uart_tx_buf
lds R30,_uart_tx_rd_ptr
clr R31
add R30,R24
adc R31,R25
ldd R2,z+0
out 0xc,R2
.dbline 907
; uart_tx_rd_ptr++;
lds R24,_uart_tx_rd_ptr
subi R24,255 ; addi 1
sts _uart_tx_rd_ptr,R24
.dbline 908
; if(uart_tx_rd_ptr==UART_BUF_SIZE)uart_tx_rd_ptr=0;
cpi R24,20
brne L40
.dbline 908
clr R2
sts _uart_tx_rd_ptr,R2
L40:
.dbline 909
; UCSRB|=BIT(TXCIE); //发送结束中断使能
sbi 0xa,6
.dbline 910
; }
L38:
.dbline 911
; return(UART_TURE);
ldi R16,255
.dbline -2
L33:
.dbline 0 ; func end
ret
.dbsym r uart_data 16 c
.dbend
.dbfunc e put_chars _put_chars fc
; sentData -> R20,R21
.even
_put_chars::
xcall push_gset1
movw R20,R16
.dbline -1
.dbline 920
; }
;
;
; /**********************************************************************
; functionName:putChars(BYTE *sentData)
; description:通过串口发送数据字符串
; **********************************************************************/
; uint08 put_chars(uint08 *sentData)
; {
xjmp L44
L43:
.dbline 922
; while(*sentData)
; {
.dbline 923
; if(put_char(*sentData)==UART_FALSE)
movw R30,R20
ldd R16,z+0
xcall _put_char
tst R16
brne L46
.dbline 924
; return(UART_FALSE);
clr R16
xjmp L42
L46:
.dbline 925
subi R20,255 ; offset = 1
sbci R21,255
.dbline 927
L44:
.dbline 921
movw R30,R20
ldd R2,z+0
tst R2
brne L43
.dbline 928
; sentData++;
;
; }
; return(UART_TURE);
ldi R16,255
.dbline -2
L42:
xcall pop_gset1
.dbline 0 ; func end
ret
.dbsym r sentData 20 pc
.dbend
.area bss(ram, con, rel)
.dbfile G:\CS5532\firmware\uart.c
_msg_size::
.blkb 2
.dbsym e msg_size _msg_size i
_msg_end_flag::
.blkb 1
.dbsym e msg_end_flag _msg_end_flag c
_rx_stu_mac::
.blkb 1
.dbsym e rx_stu_mac _rx_stu_mac c
_check_sum::
.blkb 1
.dbsym e check_sum _check_sum c
_seq_number::
.blkb 1
.dbsym e seq_number _seq_number c
_uart_rx_buf::
.blkb 20
.dbsym e uart_rx_buf _uart_rx_buf A[20:20]c
_uart_tx_counter::
.blkb 1
.dbsym e uart_tx_counter _uart_tx_counter c
_uart_rx_counter::
.blkb 1
.dbsym e uart_rx_counter _uart_rx_counter c
_uart_tx_rd_ptr::
.blkb 1
.dbsym e uart_tx_rd_ptr _uart_tx_rd_ptr c
_uart_tx_wr_ptr::
.blkb 1
.dbsym e uart_tx_wr_ptr _uart_tx_wr_ptr c
_uart_tx_buf::
.blkb 20
.dbsym e uart_tx_buf _uart_tx_buf A[20:20]c
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -