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

📄 uartpacket.lst

📁 adhoc汇聚节点程序源代码(点对多点)——for atmega128
💻 LST
📖 第 1 页 / 共 2 页
字号:
   1               		.file	"uartPacket.c"
   2               		.arch atmega128
   3               	__SREG__ = 0x3f
   4               	__SP_H__ = 0x3e
   5               	__SP_L__ = 0x3d
   6               	__tmp_reg__ = 0
   7               	__zero_reg__ = 1
   8               		.global __do_copy_data
   9               		.global __do_clear_bss
  11               		.text
  12               	.Ltext0:
  71               	.global	uartDebug_init
  73               	uartDebug_init:
   1:uartPacket.c  **** 
   2:uartPacket.c  **** #include "type.h"
   3:uartPacket.c  **** #include "uartPacket.h"
   4:uartPacket.c  **** #include "message.h"
   5:uartPacket.c  **** 
   6:uartPacket.c  **** #define DBG_BUF_LEN 104
   7:uartPacket.c  **** #define UART_IDLE 0
   8:uartPacket.c  **** #define UART_BUSY 1
   9:uartPacket.c  **** 
  10:uartPacket.c  **** char UARTState;
  11:uartPacket.c  **** char dbgBuf[DBG_BUF_LEN];
  12:uartPacket.c  **** uint8_t dbgHead;
  13:uartPacket.c  **** uint8_t dbgTail;
  14:uartPacket.c  **** uint8_t dbgBufCount;
  15:uartPacket.c  **** uint8_t appendByte;
  16:uartPacket.c  **** 
  17:uartPacket.c  **** void uartDebug_init()
  18:uartPacket.c  **** {
  75               	.LM1:
  76               	/* prologue: frame size=0 */
  77               	/* prologue end (size=0) */
  19:uartPacket.c  ****    UARTState = UART_IDLE;
  79               	.LM2:
  80 0000 1092 0000 		sts UARTState,__zero_reg__
  20:uartPacket.c  ****    dbgBufCount = 0;
  82               	.LM3:
  83 0004 1092 0000 		sts dbgBufCount,__zero_reg__
  21:uartPacket.c  **** //   dbgHead = 0;
  22:uartPacket.c  **** //  dbgTail = 0;
  23:uartPacket.c  ****    dbgBuf[0] = 0x7E;
  85               	.LM4:
  86 0008 8EE7      		ldi r24,lo8(126)
  87 000a 8093 0000 		sts dbgBuf,r24
  24:uartPacket.c  ****    dbgBuf[1] = 0x42;
  89               	.LM5:
  90 000e 82E4      		ldi r24,lo8(66)
  91 0010 8093 0000 		sts dbgBuf+1,r24
  25:uartPacket.c  ****    // initialize UART
  26:uartPacket.c  ****     * (volatile unsigned char *)0x90 = 0;		    /* UBRR0H = 0 */
  93               	.LM6:
  94 0014 1092 9000 		sts 144,__zero_reg__
  27:uartPacket.c  **** 	* (volatile unsigned char *)(0x09 + 0x20) = 15;	/* UBRR0L = 15 */	
  96               	.LM7:
  97 0018 8FE0      		ldi r24,lo8(15)
  98 001a 89B9      		out 41-0x20,r24
  28:uartPacket.c  **** 	/* UCSR0A中的U2X0 = 1,即传输速率倍速 */
  29:uartPacket.c  **** 	* (volatile unsigned char *)(0x0B + 0x20) = 1 << 1;	
 100               	.LM8:
 101 001c 82E0      		ldi r24,lo8(2)
 102 001e 8BB9      		out 43-0x20,r24
  30:uartPacket.c  **** 	/* UCSR0C中UCSZ1 = 1,UCSZ0 = 1,即传送或接收字符长为8bit */
  31:uartPacket.c  **** 	* (volatile unsigned char *)0x95 = (1 << 2) | (1 << 1);	
 104               	.LM9:
 105 0020 86E0      		ldi r24,lo8(6)
 106 0022 8093 9500 		sts 149,r24
  32:uartPacket.c  **** 	/* UCSR0B中的RXCIE,TXCIE,RXEN和TXEN都置为1 */
  33:uartPacket.c  ****     * (volatile unsigned char *)(0x0A + 0x20) = (((1 << 7) | (1 << 6)) | (1 << 4)) | (1 << 3);		 
 108               	.LM10:
 109 0026 88ED      		ldi r24,lo8(-40)
 110 0028 8AB9      		out 42-0x20,r24
 111               	/* epilogue: frame size=0 */
 112 002a 0895      		ret
 113               	/* epilogue end (size=1) */
 114               	/* function uartDebug_init size 22 (21) */
 118               	.global	uartDebug_txByte
 120               	uartDebug_txByte:
  34:uartPacket.c  **** }
  35:uartPacket.c  **** 
  36:uartPacket.c  **** void uartDebug_txByte(char byte)
  37:uartPacket.c  **** {
 122               	.LM11:
 123               	/* prologue: frame size=0 */
 124               	/* prologue end (size=0) */
 125               	/* epilogue: frame size=0 */
 126 002c 0895      		ret
 127               	/* epilogue end (size=1) */
 128               	/* function uartDebug_txByte size 1 (0) */
 132               	.global	uartDebug_txPacket
 134               	uartDebug_txPacket:
  38:uartPacket.c  **** /*	if (UARTState == UART_IDLE) { // send byte if UART is idle 
  39:uartPacket.c  ****       UARTState = UART_BUSY;
  40:uartPacket.c  **** 	  * (volatile unsigned char *)(0x0C + 0x20) = byte;		// 将data写入数据寄存器UDR0 
  41:uartPacket.c  **** 	  * (volatile unsigned char *)(0x0B + 0x20) |= 1 << 6;	// 向TXC位写逻辑1,从而清零该位 
  42:uartPacket.c  **** 	}
  43:uartPacket.c  **** 	else
  44:uartPacket.c  **** 	{
  45:uartPacket.c  **** 		if (dbgBufCount < DBG_BUF_LEN) {
  46:uartPacket.c  ****            dbgBuf[dbgTail] = byte;
  47:uartPacket.c  ****            ADVANCE(dbgTail);
  48:uartPacket.c  ****            dbgBufCount++;
  49:uartPacket.c  ****         }
  50:uartPacket.c  **** 	}*/
  51:uartPacket.c  **** }
  52:uartPacket.c  **** 
  53:uartPacket.c  **** void uartDebug_txPacket(OSMACMsgPtr pMsg)
  54:uartPacket.c  **** {
 136               	.LM12:
 137               	/* prologue: frame size=0 */
 138 002e CF93      		push r28
 139 0030 DF93      		push r29
 140               	/* prologue end (size=2) */
 141 0032 EC01      		movw r28,r24
  55:uartPacket.c  **** 	int i;
  56:uartPacket.c  **** 	if (UARTState == UART_IDLE)
 143               	.LM13:
 144 0034 8091 0000 		lds r24,UARTState
 145 0038 8823      		tst r24
 146 003a 09F0      		breq .+2
 147 003c 52C0      		rjmp .L3
  57:uartPacket.c  **** 	{
  58:uartPacket.c  **** 		UARTState = UART_BUSY;
 149               	.LM14:
 150 003e 81E0      		ldi r24,lo8(1)
 151 0040 8093 0000 		sts UARTState,r24
  59:uartPacket.c  **** 		dbgBuf[2] = pMsg->length;// 
 153               	.LM15:
 154 0044 8881      		ld r24,Y
 155 0046 8093 0000 		sts dbgBuf+2,r24
  60:uartPacket.c  **** 		dbgBuf[3] = pMsg->type;
 157               	.LM16:
 158 004a 8981      		ldd r24,Y+1
 159 004c 8093 0000 		sts dbgBuf+3,r24
  61:uartPacket.c  **** 		dbgBuf[4] = pMsg->toAddr;
 161               	.LM17:
 162 0050 8A81      		ldd r24,Y+2
 163 0052 8093 0000 		sts dbgBuf+4,r24
  62:uartPacket.c  **** 		dbgBuf[5] = pMsg->fromAddr;
 165               	.LM18:
 166 0056 8B81      		ldd r24,Y+3
 167 0058 8093 0000 		sts dbgBuf+5,r24
  63:uartPacket.c  **** 		dbgBuf[6] = pMsg->group;
 169               	.LM19:
 170 005c 8C81      		ldd r24,Y+4
 171 005e 8093 0000 		sts dbgBuf+6,r24
  64:uartPacket.c  **** 		for (i = 0; i < pMsg->length-7; i++)
 173               	.LM20:
 174 0062 20E0      		ldi r18,lo8(0)
 175 0064 30E0      		ldi r19,hi8(0)
 176 0066 8881      		ld r24,Y
 177 0068 9927      		clr r25
 178 006a 0797      		sbiw r24,7
 179 006c 2817      		cp r18,r24
 180 006e 3907      		cpc r19,r25
 181 0070 74F4      		brge .L10
 182 0072 A0E0      		ldi r26,lo8(dbgBuf+7)
 183 0074 B0E0      		ldi r27,hi8(dbgBuf+7)
 184 0076 FE01      		movw r30,r28
 185 0078 3596      		adiw r30,5
 186               	.L8:
  65:uartPacket.c  **** 			dbgBuf[7+i] = pMsg->data[i];
 188               	.LM21:
 189 007a 8191      		ld r24,Z+
 190 007c 8D93      		st X+,r24
 192               	.LM22:
 193 007e 2F5F      		subi r18,lo8(-(1))
 194 0080 3F4F      		sbci r19,hi8(-(1))
 195 0082 8881      		ld r24,Y
 196 0084 9927      		clr r25
 197 0086 0797      		sbiw r24,7
 198 0088 2817      		cp r18,r24
 199 008a 3907      		cpc r19,r25
 200 008c B4F3      		brlt .L8
 201               	.L10:
  66:uartPacket.c  **** 		dbgBuf[pMsg->length] = pMsg->crc >> 8 & 0xFF;
 203               	.LM23:
 204 008e 8881      		ld r24,Y
 205 0090 E82F      		mov r30,r24
 206 0092 FF27      		clr r31
 207 0094 E050      		subi r30,lo8(-(dbgBuf))
 208 0096 F040      		sbci r31,hi8(-(dbgBuf))
 209 0098 DE01      		movw r26,r28
 210 009a AE59      		subi r26,lo8(-(98))
 211 009c BF4F      		sbci r27,hi8(-(98))
 212 009e 8D91      		ld r24,X+
 213 00a0 9C91      		ld r25,X
 214 00a2 1197      		sbiw r26,1
 215 00a4 892F      		mov r24,r25
 216 00a6 990F      		lsl r25
 217 00a8 990B      		sbc r25,r25
 218 00aa 8083      		st Z,r24
  67:uartPacket.c  **** 		dbgBuf[1+pMsg->length] = pMsg->crc & 0xFF;
 220               	.LM24:
 221 00ac 8881      		ld r24,Y
 222 00ae E82F      		mov r30,r24
 223 00b0 FF27      		clr r31
 224 00b2 E050      		subi r30,lo8(-(dbgBuf))
 225 00b4 F040      		sbci r31,hi8(-(dbgBuf))
 226 00b6 8C91      		ld r24,X
 227 00b8 8183      		std Z+1,r24
  68:uartPacket.c  **** 		dbgBuf[2+pMsg->length] = 0x7E;
 229               	.LM25:
 230 00ba 8881      		ld r24,Y
 231 00bc E82F      		mov r30,r24
 232 00be FF27      		clr r31
 233 00c0 E050      		subi r30,lo8(-(dbgBuf))
 234 00c2 F040      		sbci r31,hi8(-(dbgBuf))
 235 00c4 8EE7      		ldi r24,lo8(126)
 236 00c6 8283      		std Z+2,r24
  69:uartPacket.c  **** 		* (volatile unsigned char *)(0x0C + 0x20) = dbgBuf[0];	// 将data写入数据寄存器UDR0 
 238               	.LM26:
 239 00c8 8091 0000 		lds r24,dbgBuf
 240 00cc 8CB9      		out 44-0x20,r24
  70:uartPacket.c  **** 	    * (volatile unsigned char *)(0x0B + 0x20) |= 1 << 6;	// 向TXC位写逻辑1,从而清零该位
 242               	.LM27:
 243 00ce 5E9A      		sbi 43-0x20,6
  71:uartPacket.c  **** 		dbgBufCount = 1;
 245               	.LM28:
 246 00d0 81E0      		ldi r24,lo8(1)
 247 00d2 8093 0000 		sts dbgBufCount,r24
  72:uartPacket.c  **** 		dbgTail = 2 + pMsg->length;
 249               	.LM29:

⌨️ 快捷键说明

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