⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 uart.s

📁 CS5532的驱动程序
💻 S
📖 第 1 页 / 共 3 页
字号:
; 	{
; 		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 + -