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

📄 sio.s

📁 ATMEGA128的PCF8536驱动程序
💻 S
📖 第 1 页 / 共 2 页
字号:
	.dbline 240
; 	RTbuf->T_disabled=1;
	ldi R24,1
	movw R30,R16
	subi R30,49  ; addi 207
	sbci R31,255
	std z+0,R24
	.dbline -2
L40:
	.dbline 0 ; func end
	ret
	.dbsym r RTbuf 16 pS[.1]
	.dbend
	.dbfunc e Rbuf_empty _Rbuf_empty fc
;          RTbuf -> R16,R17
	.even
_Rbuf_empty::
	xcall push_gset1
	.dbline -1
	.dbline 252
; 	}
; /*********************************************************************************************************
; ** 函数名称: Rbuf_empty
; ** 功能描述: 接收缓冲区判空
; ** 输 入: 
; ** 输出	 :  TRUE 空 FALSE 非空
; ** 全局变量: 无
; ** 调用模块: 
; ** 说明:
; ** 注意:
; ********************************************************************************************************/
; unsigned char Rbuf_empty(siocirqueue *RTbuf){
	.dbline 253
; 	return RTbuf->R_count==0;
	movw R30,R16
	ldd R2,z+2
	tst R2
	brne L42
	ldi R20,1
	ldi R21,0
	xjmp L43
L42:
	clr R20
	clr R21
L43:
	mov R16,R20
	.dbline -2
L41:
	xcall pop_gset1
	.dbline 0 ; func end
	ret
	.dbsym r RTbuf 16 pS[.1]
	.dbend
	.dbfunc e Tbuf_full _Tbuf_full fc
;          RTbuf -> R16,R17
	.even
_Tbuf_full::
	xcall push_gset1
	.dbline -1
	.dbline 291
; 	}
; /*********************************************************************************************************
; ** 函数名称: Tbuf_empty
; ** 功能描述: 发送缓冲区判空
; ** 输 入: 
; ** 输出	 :  TRUE 空 FALSE 非空
; ** 全局变量: 无
; ** 调用模块: 
; ** 说明:
; ** 注意:
; ********************************************************************************************************
; unsigned char Tbuf_empty(void){
; 	return RTbuf->T_count==0;
; 	}
; /*********************************************************************************************************
; ** 函数名称: Rbuf_full
; ** 功能描述: 接收缓冲区判满
; ** 输 入: 
; ** 输出	 :  TRUE 满 FALSE 非满
; ** 全局变量: 无
; ** 调用模块: 
; ** 说明:
; ** 注意:
; ********************************************************************************************************
; unsigned char Rbuf_full (void){
; 	return RTbuf->R_count==RBUF_SIZE;
; 	}
; /*********************************************************************************************************
; ** 函数名称: Tbuf_full
; ** 功能描述: 发送缓冲区判满
; ** 输 入: 
; ** 输出	 :  TRUE 满 FALSE 非满
; ** 全局变量: 无
; ** 调用模块: 
; ** 说明:
; ** 注意:
; ********************************************************************************************************/
; unsigned char Tbuf_full(siocirqueue *RTbuf){
	.dbline 292
; 	return RTbuf->T_count==TBUF_SIZE;
	movw R30,R16
	subi R30,150  ; addi 106
	sbci R31,255
	ldd R24,z+0
	cpi R24,100
	brne L45
	ldi R20,1
	ldi R21,0
	xjmp L46
L45:
	clr R20
	clr R21
L46:
	mov R16,R20
	.dbline -2
L44:
	xcall pop_gset1
	.dbline 0 ; func end
	ret
	.dbsym r RTbuf 16 pS[.1]
	.dbend
	.dbfunc e Tbuf_putchar _Tbuf_putchar fV
;          RTbuf -> R20,R21
;              x -> R22
	.even
_Tbuf_putchar::
	xcall push_gset2
	movw R20,R18
	mov R22,R16
	.dbline -1
	.dbline 323
; 	}
; /*********************************************************************************************************
; ** 函数名称: Rbuf_putchar
; ** 功能描述: 把一个字符放入接收缓冲区
; ** 输 入: 
; ** 输出	 :  
; ** 全局变量: 无
; ** 调用模块: 
; ** 说明:
; ** 注意:
; ********************************************************************************************************
; void  Rbuf_putchar (unsigned char x){
; 	if(!Rbuf_full()){
; 		REV_DIS();
; 		RTbuf->R_count++;
; 		RTbuf->R_buf[RTbuf->R_rear]=x;
; 		RTbuf->R_rear=(RTbuf->R_rear+1) % RBUF_SIZE;
; 		REV_EN();
; 	}
; }
; /*********************************************************************************************************
; ** 函数名称: Tbuf_putchar
; ** 功能描述: 把一个字符放入发送缓冲区
; ** 输 入: 
; ** 输出	 :  
; ** 全局变量: 无
; ** 调用模块: 
; ** 说明:
; ** 注意:
; ********************************************************************************************************/
; void Tbuf_putchar(unsigned char x,siocirqueue *RTbuf){
	.dbline 324
; 	if(!Tbuf_full(RTbuf)){
	movw R16,R20
	xcall _Tbuf_full
	tst R16
	breq X1
	xjmp L48
X1:
	.dbline 324
	.dbline 325
; 		TXC_DIS();
	.dbline 325
	cbi 0xa,6
	.dbline 325
	.dbline 325
	.dbline 326
; 		if (RTbuf->T_disabled)
	movw R30,R20
	subi R30,49  ; addi 207
	sbci R31,255
	ldd R2,z+0
	tst R2
	breq L50
	.dbline 327
; 			{
	.dbline 328
; 			UDR0=x;
	out 0xc,R22
	.dbline 329
; 			RTbuf->T_disabled=0;
	clr R2
	movw R30,R20
	subi R30,49  ; addi 207
	sbci R31,255
	std z+0,R2
	.dbline 330
; 			}
	xjmp L51
L50:
	.dbline 332
; 		else
; 			{
	.dbline 333
; 			RTbuf->T_count++;
	movw R24,R20
	subi R24,150  ; offset = 106
	sbci R25,255
	movw R30,R24
	ldd R24,z+0
	subi R24,255    ; addi 1
	std z+0,R24
	.dbline 334
; 			RTbuf->T_buf[RTbuf->T_rear]=x;
	movw R24,R20
	subi R24,149  ; offset = 107
	sbci R25,255
	movw R30,R20
	subi R30,151  ; addi 105
	sbci R31,255
	ldd R30,z+0
	clr R31
	add R30,R24
	adc R31,R25
	std z+0,R22
	.dbline 335
; 			RTbuf->T_rear=(RTbuf->T_rear+1) % TBUF_SIZE;
	movw R24,R20
	subi R24,151  ; offset = 105
	sbci R25,255
	movw R2,R24
	ldi R17,100
	movw R30,R24
	ldd R16,z+0
	subi R16,255    ; addi 1
	xcall mod8u
	movw R30,R2
	std z+0,R16
	.dbline 336
; 			}
L51:
	.dbline 337
	.dbline 337
	sbi 0xa,6
	.dbline 337
	.dbline 337
	.dbline 338
L48:
	.dbline -2
L47:
	xcall pop_gset2
	.dbline 0 ; func end
	ret
	.dbsym r RTbuf 20 pS[.1]
	.dbsym r x 22 c
	.dbend
	.dbfunc e Rbuf_getchar _Rbuf_getchar fc
;          Btemp -> R20
;          RTbuf -> R22,R23
	.even
_Rbuf_getchar::
	xcall push_gset2
	movw R22,R16
	.dbline -1
	.dbline 376
; 		TXC_EN();
; 	}
; }
; /*********************************************************************************************************
; ** 函数名称: Rbuf_getstring
; ** 功能描述: 从接收缓冲区返回当前子串指针
; ** 输 入: 
; ** 输出	 :  当前子串指针
; ** 全局变量: 无
; ** 调用模块: 
; ** 说明:
; ** 注意:
; ********************************************************************************************************
; unsigned char * Rbuf_getstring(void){
; 	return (RTbuf->R_buf[RTbuf->R_front]);
; }
; /*********************************************************************************************************
; ** 函数名称: Tbuf_getstring
; ** 功能描述: 从发送缓冲区返回当前子串指针
; ** 输 入: 
; ** 输出	 :  当前子串指针
; ** 全局变量: 无
; ** 调用模块: 
; ** 说明:
; ** 注意:
; ********************************************************************************************************
; unsigned char * Tbuf_getstring(void){
; 	return (RTbuf->T_buf[RTbuf->T_front]);
; }
; /*********************************************************************************************************
; ** 函数名称: Rbuf_putchar
; ** 功能描述: 从接收缓冲区读一个字符
; ** 输 入: 
; ** 输出	 :  读字符
; ** 全局变量: 无
; ** 调用模块: 
; ** 说明:
; ** 注意:
; ********************************************************************************************************/
; unsigned char Rbuf_getchar(siocirqueue *RTbuf){
	.dbline 377
; 	unsigned char Btemp=0;
	clr R20
	.dbline 378
; 	if (!Rbuf_empty(RTbuf)){
	movw R16,R22
	xcall _Rbuf_empty
	tst R16
	brne L53
	.dbline 378
	.dbline 379
; 		Btemp=RTbuf->R_buf[RTbuf->R_front];
	movw R24,R22
	adiw R24,4
	movw R30,R22
	ldd R30,z+0
	clr R31
	add R30,R24
	adc R31,R25
	ldd R20,z+0
	.dbline 380
; 		REV_DIS();
	.dbline 380
	cbi 0xa,7
	.dbline 380
	.dbline 380
	.dbline 381
; 		RTbuf->R_count--;
	movw R24,R22
	adiw R24,2
	movw R30,R24
	ldd R24,z+0
	subi R24,1
	std z+0,R24
	.dbline 382
; 		RTbuf->R_front=(RTbuf->R_front+1) % RBUF_SIZE;
	ldi R17,100
	movw R30,R22
	ldd R16,z+0
	subi R16,255    ; addi 1
	xcall mod8u
	movw R30,R22
	std z+0,R16
	.dbline 383
; 		REV_EN();
	sbi 0xa,7
	.dbline 384
; 		}
L53:
	.dbline 385
; 	return (Btemp);
	mov R16,R20
	.dbline -2
L52:
	xcall pop_gset2
	.dbline 0 ; func end
	ret
	.dbsym r Btemp 20 c
	.dbsym r RTbuf 22 pS[.1]
	.dbend
	.area vector(rom, abs)
	.org 72
	jmp _uart0_rx_isr
	.area text(rom, con, rel)
	.dbfile D:\avrvi\AVRVi_m128_Starter_Kit\PCF8563_USART\source\lib\sio.c
	.dbfunc e uart0_rx_isr _uart0_rx_isr fV
;           data -> R22
;         status -> R10
;          RTbuf -> R20,R21
	.even
_uart0_rx_isr::
	st -y,R2
	st -y,R3
	st -y,R16
	st -y,R17
	st -y,R24
	st -y,R25
	st -y,R30
	st -y,R31
	in R2,0x3f
	st -y,R2
	xcall push_gset3
	.dbline -1
	.dbline 417
; 	
; }
; /*********************************************************************************************************
; ** 函数名称: Tbuf_getchar
; ** 功能描述: 从发送缓冲区读一个字符
; ** 输 入: 
; ** 输出	 :  读字符
; ** 全局变量: 无
; ** 调用模块: 
; ** 说明:
; ** 注意:
; ********************************************************************************************************
; unsigned char Tbuf_getchar(void){
; 	unsigned char Btemp;
; 	if (!Tbuf_empty()){
; 		Btemp=RTbuf->T_buf[RTbuf->T_front];
; 		TXC_DIS();
; 		RTbuf->T_count--;
; 		RTbuf->T_front=(RTbuf->T_front+1) % TBUF_SIZE;
; 		TXC_EN();
; 		return (Btemp);
; 	}
; }
; */
; 
; /******************************* 中断处理函数 ***************************
; * 功能:完成数据得的接收和发送
; ***********************************************************************/
; #if USEUART0
; #pragma interrupt_handler uart0_rx_isr:iv_USART0_RXC 
; void uart0_rx_isr(void)
; {
	.dbline 420
;  unsigned char status,data;
;  siocirqueue *RTbuf;
;  RTbuf=&RTbuf_UART0;
	ldi R20,<_RTbuf_UART0
	ldi R21,>_RTbuf_UART0
	.dbline 422
; // CLI();
;  status=UCSR0A;
	in R10,0xb
	.dbline 423
;  data=UDR0;
	in R22,0xc
	.dbline 425
;  //WDR(); //喂狗
;  if((status & (FRAMING_ERROR | DATA_OVERRUN))==0)
	mov R24,R10
	andi R24,24
	breq X2
	xjmp L56
X2:
	.dbline 426
;  	{
	.dbline 427
; 	if(RTbuf->R_count<RBUF_SIZE){
	movw R30,R20
	ldd R24,z+2
	cpi R24,100
	brlo X3
	xjmp L58
X3:
	.dbline 427
	.dbline 428
; 		RTbuf->R_count++;
	movw R24,R20
	adiw R24,2
	movw R30,R24
	ldd R24,z+0
	subi R24,255    ; addi 1
	std z+0,R24
	.dbline 429
; 		RTbuf->R_buf[RTbuf->R_rear]=data;
	movw R24,R20
	adiw R24,4
	movw R30,R20
	ldd R30,z+1
	clr R31
	add R30,R24
	adc R31,R25
	std z+0,R22
	.dbline 430
; 		RTbuf->R_rear=(RTbuf->R_rear+1) % RBUF_SIZE;
	movw R24,R20
	adiw R24,1
	movw R2,R24
	ldi R17,100
	movw R30,R24
	ldd R16,z+0
	subi R16,255    ; addi 1
	xcall mod8u
	movw R30,R2
	std z+0,R16
	.dbline 431
; 		}
	xjmp L59
L58:
	.dbline 433
; 	else 
; 	   {
	.dbline 434
; 	   RTbuf->R_overflow=1;
	ldi R24,1
	movw R30,R20
	std z+3,R24
	.dbline 435
; 	   }
L59:
	.dbline 436
L56:
	.dbline -2
L55:
	xcall pop_gset3
	ld R2,y+
	out 0x3f,R2
	ld R31,y+
	ld R30,y+
	ld R25,y+
	ld R24,y+
	ld R17,y+
	ld R16,y+
	ld R3,y+
	ld R2,y+
	.dbline 0 ; func end
	reti
	.dbsym r data 22 c
	.dbsym r status 10 c
	.dbsym r RTbuf 20 pS[.1]
	.dbend
	.area vector(rom, abs)
	.org 80
	jmp _uart0_tx_isr
	.area text(rom, con, rel)
	.dbfile D:\avrvi\AVRVi_m128_Starter_Kit\PCF8563_USART\source\lib\sio.c
	.dbfunc e uart0_tx_isr _uart0_tx_isr fV
;          RTbuf -> R20,R21
	.even
_uart0_tx_isr::
	st -y,R2
	st -y,R3
	st -y,R16
	st -y,R17
	st -y,R24
	st -y,R25
	st -y,R30
	st -y,R31
	in R2,0x3f
	st -y,R2
	xcall push_gset1
	.dbline -1
	.dbline 442
; 	}
; //SEI();
; }
; 	
; #pragma interrupt_handler uart0_tx_isr: iv_USART0_TXC
; void uart0_tx_isr(void)
; {
	.dbline 446
; //CLI();
;  siocirqueue *RTbuf;
;  //WDR(); //喂狗
;  RTbuf=&RTbuf_UART0;
	ldi R20,<_RTbuf_UART0
	ldi R21,>_RTbuf_UART0
	.dbline 447
;  if (RTbuf->T_count>0){
	clr R2
	movw R30,R20
	subi R30,150  ; addi 106
	sbci R31,255
	ldd R3,z+0
	cp R2,R3
	brlo X4
	xjmp L61
X4:
	.dbline 447
	.dbline 448
; 	UDR0=RTbuf->T_buf[RTbuf->T_front];
	movw R24,R20
	subi R24,149  ; offset = 107
	sbci R25,255
	movw R30,R20
	subi R30,152  ; addi 104
	sbci R31,255
	ldd R30,z+0
	clr R31
	add R30,R24
	adc R31,R25
	ldd R2,z+0
	out 0xc,R2
	.dbline 449
; 	RTbuf->T_count--;
	movw R24,R20
	subi R24,150  ; offset = 106
	sbci R25,255
	movw R30,R24
	ldd R24,z+0
	subi R24,1
	std z+0,R24
	.dbline 450
; 	RTbuf->T_front=(RTbuf->T_front+1) % TBUF_SIZE;
	movw R24,R20
	subi R24,152  ; offset = 104
	sbci R25,255
	movw R2,R24
	ldi R17,100
	movw R30,R24
	ldd R16,z+0
	subi R16,255    ; addi 1
	xcall mod8u
	movw R30,R2
	std z+0,R16
	.dbline 451
; 	}
	xjmp L62
L61:
	.dbline 452
	ldi R24,1
	movw R30,R20
	subi R30,49  ; addi 207
	sbci R31,255
	std z+0,R24
L62:
	.dbline -2
L60:
	xcall pop_gset1
	ld R2,y+
	out 0x3f,R2
	ld R31,y+
	ld R30,y+
	ld R25,y+
	ld R24,y+
	ld R17,y+
	ld R16,y+
	ld R3,y+
	ld R2,y+
	.dbline 0 ; func end
	reti
	.dbsym r RTbuf 20 pS[.1]
	.dbend
	.area bss(ram, con, rel)
	.dbfile D:\avrvi\AVRVi_m128_Starter_Kit\PCF8563_USART\source\lib\sio.c
_RTbuf_UART0::
	.blkb 208
	.dbsym e RTbuf_UART0 _RTbuf_UART0 S[.1]

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -