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

📄 hwg.lss

📁 AVRMEG32编写的一个项目代码,里面包含一般应用的模块.
💻 LSS
📖 第 1 页 / 共 5 页
字号:
    1836:	94 e0       	ldi	r25, 0x04	; 4
    1838:	0e 94 ed 0d 	call	0x1bda <bufferGetFromFront>
    183c:	0e 94 bf 0b 	call	0x177e <uartSendByte>
    1840:	08 95       	ret

00001842 <uartSendBuffer>:
}

// transmit nBytes from buffer out the uart
u08 uartSendBuffer(char *buffer, u16 nBytes)
{
    1842:	df 92       	push	r13
    1844:	ef 92       	push	r14
    1846:	ff 92       	push	r15
    1848:	0f 93       	push	r16
    184a:	1f 93       	push	r17
    184c:	cf 93       	push	r28
    184e:	df 93       	push	r29
    1850:	ec 01       	movw	r28, r24
	register u08 first;
	register u16 i;

	// check if there's space (and that we have any bytes to send at all)
	if((uartTxBuffer.datalength + nBytes < uartTxBuffer.size) && nBytes)
    1852:	80 91 26 04 	lds	r24, 0x0426
    1856:	90 91 27 04 	lds	r25, 0x0427
    185a:	86 0f       	add	r24, r22
    185c:	97 1f       	adc	r25, r23
    185e:	20 91 24 04 	lds	r18, 0x0424
    1862:	30 91 25 04 	lds	r19, 0x0425
    1866:	82 17       	cp	r24, r18
    1868:	93 07       	cpc	r25, r19
    186a:	f8 f4       	brcc	.+62     	; 0x18aa <uartSendBuffer+0x68>
    186c:	61 15       	cp	r22, r1
    186e:	71 05       	cpc	r23, r1
    1870:	e1 f0       	breq	.+56     	; 0x18aa <uartSendBuffer+0x68>
	{
		// grab first character
		first = *buffer++;
    1872:	d9 90       	ld	r13, Y+
		// copy user buffer to uart transmit buffer
		for(i = 0; i < nBytes-1; i++)
    1874:	00 e0       	ldi	r16, 0x00	; 0
    1876:	10 e0       	ldi	r17, 0x00	; 0
    1878:	7b 01       	movw	r14, r22
    187a:	08 94       	sec
    187c:	e1 08       	sbc	r14, r1
    187e:	f1 08       	sbc	r15, r1
    1880:	0e 15       	cp	r16, r14
    1882:	1f 05       	cpc	r17, r15
    1884:	48 f4       	brcc	.+18     	; 0x1898 <uartSendBuffer+0x56>
		{
			// put data bytes at end of buffer
			bufferAddToEnd(&uartTxBuffer, *buffer++);
    1886:	89 91       	ld	r24, Y+
    1888:	68 2f       	mov	r22, r24
    188a:	82 e2       	ldi	r24, 0x22	; 34
    188c:	94 e0       	ldi	r25, 0x04	; 4
    188e:	0e 94 46 0e 	call	0x1c8c <bufferAddToEnd>
    1892:	0f 5f       	subi	r16, 0xFF	; 255
    1894:	1f 4f       	sbci	r17, 0xFF	; 255
    1896:	f4 cf       	rjmp	.-24     	; 0x1880 <uartSendBuffer+0x3e>
		}

		// send the first byte to get things going by interrupts
		uartBufferedTx = TRUE;
    1898:	8f ef       	ldi	r24, 0xFF	; 255
    189a:	80 93 21 04 	sts	0x0421, r24
		uartSendByte(first);
    189e:	8d 2d       	mov	r24, r13
    18a0:	0e 94 bf 0b 	call	0x177e <uartSendByte>
		// return success
		return TRUE;
    18a4:	8f ef       	ldi	r24, 0xFF	; 255
    18a6:	90 e0       	ldi	r25, 0x00	; 0
    18a8:	02 c0       	rjmp	.+4      	; 0x18ae <uartSendBuffer+0x6c>
	}
	else
	{
		// return failure
		return FALSE;
    18aa:	80 e0       	ldi	r24, 0x00	; 0
    18ac:	90 e0       	ldi	r25, 0x00	; 0
    18ae:	df 91       	pop	r29
    18b0:	cf 91       	pop	r28
    18b2:	1f 91       	pop	r17
    18b4:	0f 91       	pop	r16
    18b6:	ff 90       	pop	r15
    18b8:	ef 90       	pop	r14
    18ba:	df 90       	pop	r13
    18bc:	08 95       	ret

000018be <__vector_15>:
	}
}

// UART Transmit Complete Interrupt Handler
UART_INTERRUPT_HANDLER(SIG_UART_TRANS)
{
    18be:	1f 92       	push	r1
    18c0:	0f 92       	push	r0
    18c2:	0f b6       	in	r0, 0x3f	; 63
    18c4:	0f 92       	push	r0
    18c6:	11 24       	eor	r1, r1
    18c8:	8f 93       	push	r24
	// check if buffered tx is enabled
/*	if(uartBufferedTx)
	{
		// check if there's data left in the buffer
     	if(uartTxBuffer.datalength)
		{
			// send byte from top of buffer
			outb(UDR, bufferGetFromFront(&uartTxBuffer));
		}
		else
		{
			// no data left
			uartBufferedTx = FALSE;
			// return to ready state
			uartReadyTx = TRUE;
		}
	}
	else
	{*/
		// we're using single-byte tx mode
		// indicate transmit complete, back to ready
		uartReadyTx = TRUE;
    18ca:	8f ef       	ldi	r24, 0xFF	; 255
    18cc:	80 93 18 04 	sts	0x0418, r24
    18d0:	8f 91       	pop	r24
    18d2:	0f 90       	pop	r0
    18d4:	0f be       	out	0x3f, r0	; 63
    18d6:	0f 90       	pop	r0
    18d8:	1f 90       	pop	r1
    18da:	18 95       	reti

000018dc <__vector_13>:
//	}
}

/*
// UART Receive Complete Interrupt Handler
UART_INTERRUPT_HANDLER(SIG_UART_RECV)
{
	u08 c;
	
	// get received char
	c = inb(UDR);

	// if there's a user function to handle this receive event
	if(UartRxFunc)
	{
		// call it and pass the received data
		UartRxFunc(c);
	}
	else
	{
		// otherwise do default processing
		// put received char in buffer
		// check if there's space
		if( !bufferAddToEnd(&uartRxBuffer, c) )
		{
			// no space in buffer
			// count overflow
			uartRxOverflow++;
		}
	}
}
*/
// UART Receive Complete Interrupt Handler
UART_INTERRUPT_HANDLER(SIG_UART_RECV)
{
    18dc:	1f 92       	push	r1
    18de:	0f 92       	push	r0
    18e0:	0f b6       	in	r0, 0x3f	; 63
    18e2:	0f 92       	push	r0
    18e4:	11 24       	eor	r1, r1
    18e6:	2f 93       	push	r18
    18e8:	3f 93       	push	r19
    18ea:	4f 93       	push	r20
    18ec:	5f 93       	push	r21
    18ee:	6f 93       	push	r22
    18f0:	7f 93       	push	r23
    18f2:	8f 93       	push	r24
    18f4:	9f 93       	push	r25
    18f6:	af 93       	push	r26
    18f8:	bf 93       	push	r27
    18fa:	cf 93       	push	r28
    18fc:	ef 93       	push	r30
    18fe:	ff 93       	push	r31
	u08 c;

	// get received char
	c = inb(UDR);
    1900:	cc b1       	in	r28, 0x0c	; 12

    		// put received char in buffer
		// check if there's space
	if( !bufferAddToEnd(&uartRxBuffer, c) )
    1902:	6c 2f       	mov	r22, r28
    1904:	89 e1       	ldi	r24, 0x19	; 25
    1906:	94 e0       	ldi	r25, 0x04	; 4
    1908:	0e 94 46 0e 	call	0x1c8c <bufferAddToEnd>
    190c:	88 23       	and	r24, r24
    190e:	49 f4       	brne	.+18     	; 0x1922 <__vector_13+0x46>
	{
			// no space in buffer
			// count overflow
			uartRxOverflow++;
    1910:	80 91 2a 04 	lds	r24, 0x042A
    1914:	90 91 2b 04 	lds	r25, 0x042B
    1918:	01 96       	adiw	r24, 0x01	; 1
    191a:	90 93 2b 04 	sts	0x042B, r25
    191e:	80 93 2a 04 	sts	0x042A, r24
	}

	// if there's a user function to handle this receive event
	if(UartRxFunc)
    1922:	80 91 8e 02 	lds	r24, 0x028E
    1926:	90 91 8f 02 	lds	r25, 0x028F
    192a:	89 2b       	or	r24, r25
    192c:	31 f0       	breq	.+12     	; 0x193a <__vector_13+0x5e>
	{
		// call it and pass the received data
		UartRxFunc(c);
    192e:	e0 91 8e 02 	lds	r30, 0x028E
    1932:	f0 91 8f 02 	lds	r31, 0x028F
    1936:	8c 2f       	mov	r24, r28
    1938:	09 95       	icall
    193a:	ff 91       	pop	r31
    193c:	ef 91       	pop	r30
    193e:	cf 91       	pop	r28
    1940:	bf 91       	pop	r27
    1942:	af 91       	pop	r26
    1944:	9f 91       	pop	r25
    1946:	8f 91       	pop	r24
    1948:	7f 91       	pop	r23
    194a:	6f 91       	pop	r22
    194c:	5f 91       	pop	r21
    194e:	4f 91       	pop	r20
    1950:	3f 91       	pop	r19
    1952:	2f 91       	pop	r18
    1954:	0f 90       	pop	r0
    1956:	0f be       	out	0x3f, r0	; 63
    1958:	0f 90       	pop	r0
    195a:	1f 90       	pop	r1
    195c:	18 95       	reti

0000195e <a2dSetPrescaler>:

// configure A2D converter clock division (prescaling)
void a2dSetPrescaler(unsigned char prescale)
{
	outb(ADCSRA, ((inb(ADCSRA) & ~ADC_PRESCALE_MASK) | prescale));
    195e:	96 b1       	in	r25, 0x06	; 6
    1960:	98 7f       	andi	r25, 0xF8	; 248
    1962:	98 2b       	or	r25, r24
    1964:	96 b9       	out	0x06, r25	; 6
    1966:	08 95       	ret

00001968 <a2dSetReference>:
}

// configure A2D converter voltage reference
void a2dSetReference(unsigned char ref)
{
	outb(ADMUX, ((inb(ADMUX) & ~ADC_REFERENCE_MASK) | (ref<<6)));
    1968:	27 b1       	in	r18, 0x07	; 7
    196a:	2f 73       	andi	r18, 0x3F	; 63
    196c:	99 27       	eor	r25, r25
    196e:	36 e0       	ldi	r19, 0x06	; 6
    1970:	88 0f       	add	r24, r24
    1972:	99 1f       	adc	r25, r25
    1974:	3a 95       	dec	r19
    1976:	e1 f7       	brne	.-8      	; 0x1970 <a2dSetReference+0x8>
    1978:	28 2b       	or	r18, r24
    197a:	27 b9       	out	0x07, r18	; 7
    197c:	08 95       	ret

0000197e <a2dInit>:
    197e:	37 9a       	sbi	0x06, 7	; 6
    1980:	35 9a       	sbi	0x06, 5	; 6
    1982:	86 e0       	ldi	r24, 0x06	; 6
    1984:	0e 94 af 0c 	call	0x195e <a2dSetPrescaler>
    1988:	80 e0       	ldi	r24, 0x00	; 0
    198a:	0e 94 b4 0c 	call	0x1968 <a2dSetReference>
    198e:	10 92 2c 04 	sts	0x042C, r1
    1992:	08 95       	ret

00001994 <a2dOff>:
    1994:	37 98       	cbi	0x06, 7	; 6
    1996:	08 95       	ret

00001998 <a2dSetChannel>:
}

// sets the a2d input channel
void a2dSetChannel(unsigned char ch)
{
	outb(ADMUX, (inb(ADMUX) & ~ADC_MUX_MASK) | (ch & ADC_MUX_MASK));	// set channel
    1998:	97 b1       	in	r25, 0x07	; 7
    199a:	90 7e       	andi	r25, 0xE0	; 224
    199c:	8f 71       	andi	r24, 0x1F	; 31
    199e:	98 2b       	or	r25, r24
    19a0:	97 b9       	out	0x07, r25	; 7
    19a2:	08 95       	ret

000019a4 <a2dStartConvert>:

⌨️ 快捷键说明

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