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

📄 comm.lst

📁 cs5460a做功率表用 cs5460a做功率表用 cs5460a做功率表
💻 LST
📖 第 1 页 / 共 2 页
字号:
 353 0144 F894      		cli
 354               	/* #NOAPP */
 355 0146 8091 0000 		lds r24,Os_Enter_Sum
 356 014a 8F5F      		subi r24,lo8(-(1))
 357 014c 8093 0000 		sts Os_Enter_Sum,r24
  99:task/Comm.c   ****    if (OSQQuery(&UartTxEvent) == OS_Q_NO_EMPTY)   //OSQQuery;异常处理
 359               	.LM18:
 360 0150 80E0      		ldi r24,lo8(UartTxEvent)
 361 0152 90E0      		ldi r25,hi8(UartTxEvent)
 362 0154 00D0      		rcall OSQQuery
 363 0156 8330      		cpi r24,lo8(3)
 364 0158 11F4      		brne .L9
 100:task/Comm.c   ****       {	 
 101:task/Comm.c   ****    	   UCSRB |= (1 << UDRIE);		              //UDRIE:数据寄存器空中断使能
 366               	.LM19:
 367 015a 559A      		sbi 42-0x20,5
 368 015c 03C0      		rjmp .L10
 369               	.L9:
 102:task/Comm.c   ****        }
 103:task/Comm.c   ****    else 
 104:task/Comm.c   ****       {
 105:task/Comm.c   ****    	  fTx_done = 1;
 371               	.LM20:
 372 015e 81E0      		ldi r24,lo8(1)
 373 0160 8093 0000 		sts fTx_done,r24
 374               	.L10:
 106:task/Comm.c   ****        }
 107:task/Comm.c   ****    OS_OPEN_INT();   
 376               	.LM21:
 377 0164 8091 0000 		lds r24,Os_Enter_Sum
 378 0168 8150      		subi r24,lo8(-(-1))
 379 016a 8093 0000 		sts Os_Enter_Sum,r24
 380 016e 8091 0000 		lds r24,Os_Enter_Sum
 381 0172 8823      		tst r24
 382 0174 09F4      		brne .L8
 383               	/* #APP */
 384 0176 7894      		sei
 385               	/* #NOAPP */
 386               	.L8:
 387               	/* epilogue: frame size=0 */
 388 0178 FF91      		pop r31
 389 017a EF91      		pop r30
 390 017c BF91      		pop r27
 391 017e AF91      		pop r26
 392 0180 9F91      		pop r25
 393 0182 8F91      		pop r24
 394 0184 7F91      		pop r23
 395 0186 6F91      		pop r22
 396 0188 5F91      		pop r21
 397 018a 4F91      		pop r20
 398 018c 3F91      		pop r19
 399 018e 2F91      		pop r18
 400 0190 0F90      		pop __tmp_reg__
 401 0192 0FBE      		out __SREG__,__tmp_reg__
 402 0194 0F90      		pop __tmp_reg__
 403 0196 1F90      		pop __zero_reg__
 404 0198 1895      		reti
 405               	/* epilogue end (size=17) */
 406               	/* function __vector_13 size 62 (28) */
 408               	.Lscope2:
 411               	.global	sendbuf
 413               	sendbuf:
 108:task/Comm.c   **** } 
 109:task/Comm.c   **** //----------------------------------------
 110:task/Comm.c   **** /************************************************
 111:task/Comm.c   **** 函 数 名:sendbuf
 112:task/Comm.c   **** 功能说明:将要发送的数据传输到发送缓存中
 113:task/Comm.c   **** *************************************************/
 114:task/Comm.c   **** void	sendbuf(uchar temp)
 115:task/Comm.c   **** {    
 415               	.LM22:
 416               	/* prologue: frame size=0 */
 417               	/* prologue end (size=0) */
 116:task/Comm.c   ****    if ((OSQPost(&UartTxEvent,temp) != OS_Q_FULL) && fTx_done)
 419               	.LM23:
 420 019a 682F      		mov r22,r24
 421 019c 80E0      		ldi r24,lo8(UartTxEvent)
 422 019e 90E0      		ldi r25,hi8(UartTxEvent)
 423 01a0 00D0      		rcall OSQPost
 424 01a2 8230      		cpi r24,lo8(2)
 425 01a4 39F0      		breq .L12
 427               	.LM24:
 428 01a6 8091 0000 		lds r24,fTx_done
 429 01aa 8823      		tst r24
 430 01ac 19F0      		breq .L12
 117:task/Comm.c   ****    {   			
 118:task/Comm.c   **** 		fTx_done = 0;      //完成则重新开始             
 432               	.LM25:
 433 01ae 1092 0000 		sts fTx_done,__zero_reg__
 119:task/Comm.c   ****         UCSRB |= (1 << UDRIE);   //UDRIE:数据寄存器空中断使能         
 435               	.LM26:
 436 01b2 559A      		sbi 42-0x20,5
 437               	.L12:
 438 01b4 0895      		ret
 439               	/* epilogue: frame size=0 */
 440               	/* epilogue: noreturn */
 441               	/* epilogue end (size=0) */
 442               	/* function sendbuf size 14 (14) */
 444               	.Lscope3:
 448               	.global	CRC16fromByte
 450               	CRC16fromByte:
 120:task/Comm.c   ****    }        
 121:task/Comm.c   **** }
 122:task/Comm.c   **** 
 123:task/Comm.c   **** //sendbuf:将要发送的数据传输到发送缓存中
 124:task/Comm.c   **** //设置发送数据的条件
 125:task/Comm.c   **** 
 126:task/Comm.c   **** /************************************************
 127:task/Comm.c   **** 函 数 名:processmsg
 128:task/Comm.c   **** 功能说明:逐一处理接受缓冲区的字符
 129:task/Comm.c   **** *************************************************/
 130:task/Comm.c   **** void	Process_Msg(void)
 131:task/Comm.c   **** {
 132:task/Comm.c   ****     uchar i;
 133:task/Comm.c   ****     uchar temp = 0;   
 134:task/Comm.c   ****     static uint CRC16;
 135:task/Comm.c   ****     static uchar MsgNum = 0;      
 136:task/Comm.c   ****    
 137:task/Comm.c   ****     static struct Msg_Type
 138:task/Comm.c   ****     {
 139:task/Comm.c   ****         uchar Addr;		   //地址
 140:task/Comm.c   ****         uchar FunID;	   //命令码
 141:task/Comm.c   ****         uchar Data_AddrH;  //地址高位
 142:task/Comm.c   ****         uchar Data_AddrL;  //地址低位
 143:task/Comm.c   ****         uchar DataLenH;	   //数据长度高位
 144:task/Comm.c   ****         uchar DataLenL;    //数据长度低位   
 145:task/Comm.c   ****     }MsgBuf;    
 146:task/Comm.c   ****      
 147:task/Comm.c   **** 	if (OSQAccept(&UartReEvent,&temp) == OS_Q_OK) 
 148:task/Comm.c   **** 	   {     
 149:task/Comm.c   **** 	    if (fRx_start) 
 150:task/Comm.c   **** 		 {
 151:task/Comm.c   ****             fRx_start = 0;          
 152:task/Comm.c   ****             MsgNum = 0;         //包头同步  
 153:task/Comm.c   ****           }
 154:task/Comm.c   ****              
 155:task/Comm.c   ****         switch (MsgNum)
 156:task/Comm.c   ****          {
 157:task/Comm.c   ****           case 0:		  
 158:task/Comm.c   ****             if (temp == AddrVal)    //通信地址 ,当地址与本身的地址相同时
 159:task/Comm.c   ****             {
 160:task/Comm.c   ****                 MsgBuf.Addr = temp;	//结构体
 161:task/Comm.c   ****                 CRC16 = CRC16fromByte(temp,0xffff);
 162:task/Comm.c   ****                 MsgNum++; 
 163:task/Comm.c   ****             }
 164:task/Comm.c   ****             break;
 165:task/Comm.c   **** 
 166:task/Comm.c   ****           case 1:
 167:task/Comm.c   ****             if (temp == 0x03 || temp == 0x04)   //功能码,
 168:task/Comm.c   ****             {
 169:task/Comm.c   ****                MsgBuf.FunID = temp;                             
 170:task/Comm.c   ****                CRC16 = CRC16fromByte(temp,CRC16);
 171:task/Comm.c   ****                MsgNum++;
 172:task/Comm.c   ****             }
 173:task/Comm.c   ****             else
 174:task/Comm.c   ****             {
 175:task/Comm.c   ****                 MsgNum = 0;		 
 176:task/Comm.c   ****             }
 177:task/Comm.c   ****             break;
 178:task/Comm.c   **** 
 179:task/Comm.c   ****            case 2:                         
 180:task/Comm.c   ****             MsgBuf.Data_AddrH = temp;     //数据地址高位                       
 181:task/Comm.c   ****             CRC16 = CRC16fromByte(temp,CRC16); 
 182:task/Comm.c   ****             MsgNum++;
 183:task/Comm.c   ****             break;
 184:task/Comm.c   **** 
 185:task/Comm.c   ****            case 3:    
 186:task/Comm.c   ****             MsgBuf.Data_AddrL = temp;     //数据地址低位                       
 187:task/Comm.c   ****             CRC16 = CRC16fromByte(temp,CRC16);
 188:task/Comm.c   ****             MsgNum++; 
 189:task/Comm.c   ****             break;
 190:task/Comm.c   **** 
 191:task/Comm.c   ****            case 4:                           
 192:task/Comm.c   ****             MsgBuf.DataLenH = temp;       //数据长度高位            
 193:task/Comm.c   ****             CRC16 = CRC16fromByte(temp,CRC16);
 194:task/Comm.c   ****             MsgNum++;
 195:task/Comm.c   ****             break;
 196:task/Comm.c   **** 
 197:task/Comm.c   ****            case 5:                        
 198:task/Comm.c   ****             MsgBuf.DataLenL = temp;         //数据长度低位            
 199:task/Comm.c   ****             CRC16 = CRC16fromByte(temp,CRC16);
 200:task/Comm.c   ****             MsgNum++;
 201:task/Comm.c   ****             break;
 202:task/Comm.c   **** 
 203:task/Comm.c   ****            case 6:
 204:task/Comm.c   ****             if (((uchar *)&CRC16)[LOW_BYTE] == temp) //CRC校验值低位
 205:task/Comm.c   ****             {
 206:task/Comm.c   ****                 MsgNum++;						   
 207:task/Comm.c   ****             }
 208:task/Comm.c   ****             else
 209:task/Comm.c   ****             {
 210:task/Comm.c   ****                 MsgNum = 0;
 211:task/Comm.c   ****             }
 212:task/Comm.c   ****             break;
 213:task/Comm.c   **** 
 214:task/Comm.c   ****            case 7:      
 215:task/Comm.c   ****             if (((uchar *)&CRC16)[HIGH_BYTE] == temp)  //CRC校验值高位
 216:task/Comm.c   ****             {              
 217:task/Comm.c   ****                sendbuf(MsgBuf.Addr);               //通信地址
 218:task/Comm.c   ****                CRC16 = CRC16fromByte(MsgBuf.Addr,0xffff);              
 219:task/Comm.c   ****                   
 220:task/Comm.c   ****                sendbuf(MsgBuf.FunID);              //功能码
 221:task/Comm.c   ****                CRC16 = CRC16fromByte(MsgBuf.FunID,CRC16);
 222:task/Comm.c   ****                               				      //数据长度
 223:task/Comm.c   ****                MsgBuf.DataLenL <<= 1;          //数据字节数,发过来的是字数 ,回的是字节数          
 224:task/Comm.c   ****                sendbuf(MsgBuf.DataLenL);
 225:task/Comm.c   ****                CRC16 = CRC16fromByte(MsgBuf.DataLenL,CRC16);//CRC校验值
 226:task/Comm.c   ****               
 227:task/Comm.c   ****                for (i=0; i<MsgBuf.DataLenL; i++)
 228:task/Comm.c   ****                {
 229:task/Comm.c   ****                   sendbuf(ValTab(MsgBuf.Data_AddrL)); 
 230:task/Comm.c   ****                   CRC16 =  CRC16fromByte(ValTab(MsgBuf.Data_AddrL),CRC16);
 231:task/Comm.c   ****                   MsgBuf.Data_AddrL++;
 232:task/Comm.c   ****                 }
 233:task/Comm.c   ****                 sendbuf(((uchar *)&CRC16)[LOW_BYTE]);  //发送CRC校验值                
 234:task/Comm.c   ****                 sendbuf(((uchar *)&CRC16)[HIGH_BYTE]);                            
 235:task/Comm.c   ****              }
 236:task/Comm.c   ****              MsgNum = 0;            
 237:task/Comm.c   ****              break;
 238:task/Comm.c   ****                       
 239:task/Comm.c   ****            default:
 240:task/Comm.c   ****            MsgNum = 0;
 241:task/Comm.c   ****            break;
 242:task/Comm.c   ****         }
 243:task/Comm.c   ****      }            
 244:task/Comm.c   ****  }
 245:task/Comm.c   ****  
 246:task/Comm.c   **** //-------------------------------------------------
 247:task/Comm.c   **** /************************************************
 248:task/Comm.c   **** 函 数 名:UART_Init
 249:task/Comm.c   **** 功能说明:串行口初始化
 250:task/Comm.c   **** *************************************************/
 251:task/Comm.c   **** void UART_Init(void)
 252:task/Comm.c   **** {
 253:task/Comm.c   **** 	  OS_Q  *pq;
 254:task/Comm.c   **** 	  
 255:task/Comm.c   **** 	Baud_Init(BaudAndData);
 256:task/Comm.c   **** 	UCSRA = 0;
 257:task/Comm.c   ****     UCSRB |= (1 << RXCIE)|(1 << TXCIE)|(1 << RXEN)|(1 << TXEN);  //允许发送和接收
 258:task/Comm.c   ****     UCSRC |= (1 << URSEL)|(1 << UCSZ1)|(1 << UCSZ0);             //8位数据位+1位停止位  
 259:task/Comm.c   **** 
 260:task/Comm.c   ****     pq = OSQCreat(&UartReEvent,UartReBuf,UART_BUF_SIZE - 1);
 261:task/Comm.c   ****     UartReEvent = *pq;
 262:task/Comm.c   ****     pq = OSQCreat(&UartTxEvent,UartTxBuf,UART_BUF_SIZE - 1);
 263:task/Comm.c   ****     UartTxEvent = *pq; 
 264:task/Comm.c   ****     
 265:task/Comm.c   **** 	fTx_done = 1;
 266:task/Comm.c   ****     fRx_start = 0;    
 267:task/Comm.c   **** }
 268:task/Comm.c   **** 
 269:task/Comm.c   **** 
 270:task/Comm.c   **** /*************************************************************************************
 271:task/Comm.c   **** **功 能  描 述:单个字节CRC16校验
 272:task/Comm.c   **** **输出:2个字节的CRC校验值
 273:task/Comm.c   **** *************************************************************************************/
 274:task/Comm.c   **** uint CRC16fromByte(uchar Byte, uint crc16)
 275:task/Comm.c   **** {
 452               	.LM27:
 453               	/* prologue: frame size=0 */
 454               	/* prologue end (size=0) */
 276:task/Comm.c   **** 	uchar j;
 277:task/Comm.c   ****     uchar CY;
 278:task/Comm.c   **** 
 279:task/Comm.c   **** 	crc16 ^= Byte;
 456               	.LM28:
 457 01b6 9927      		clr r25
 458 01b8 6827      		eor r22,r24
 459 01ba 7927      		eor r23,r25
 280:task/Comm.c   **** 	for(j=8; j>0; j--)
 461               	.LM29:
 462 01bc 98E0      		ldi r25,lo8(8)
 463 01be 21E0      		ldi r18,lo8(-24575)
 464 01c0 30EA      		ldi r19,hi8(-24575)
 465               	.L19:
 281:task/Comm.c   **** 	{
 282:task/Comm.c   **** 		CY = crc16;
 467               	.LM30:
 468 01c2 862F      		mov r24,r22
 283:task/Comm.c   ****         CY &= (1 << 0);
 284:task/Comm.c   ****         crc16 >>= 1;
 285:task/Comm.c   **** 		crc16 &= 0x7fff;
 470               	.LM31:
 471 01c4 7695      		lsr r23
 472 01c6 6795      		ror r22
 286:task/Comm.c   **** 		if(CY)
 474               	.LM32:
 475 01c8 80FF      		sbrs r24,0
 476 01ca 02C0      		rjmp .L17
 287:task/Comm.c   **** 		{
 288:task/Comm.c   **** 			crc16 ^= 0xa001;
 478               	.LM33:
 479 01cc 6227      		eor r22,r18
 480 01ce 7327      		eor r23,r19
 481               	.L17:
 483               	.LM34:
 484 01d0 9150      		subi r25,lo8(-(-1))
 485 01d2 B9F7      		brne .L19
 289:task/Comm.c   **** 		}
 290:task/Comm.c   **** 	}
 291:task/Comm.c   ****     
 292:task/Comm.c   **** 	return crc16;
 293:task/Comm.c   **** }
 487               	.LM35:
 488 01d4 CB01      		movw r24,r22
 489               	/* epilogue: frame size=0 */
 490 01d6 0895      		ret
 491               	/* epilogue end (size=1) */
 492               	/* function CRC16fromByte size 18 (17) */
 498               	.Lscope4:
 501               	.global	ValTab
 503               	ValTab:
 294:task/Comm.c   **** /************************************************
 295:task/Comm.c   **** 函 数 名:initi_serial
 296:task/Comm.c   **** 功能说明:串行口初始化
 297:task/Comm.c   **** *************************************************/
 298:task/Comm.c   **** uchar   ValTab(uint8 com_data_index)
 299:task/Comm.c   **** {
 505               	.LM36:
 506               	/* prologue: frame size=0 */
 507               	/* prologue end (size=0) */
 300:task/Comm.c   ****     uint8 *pReadComData;
 301:task/Comm.c   ****     												   //FUN_DATA_ADDR_FIRST  0x30
 302:task/Comm.c   ****     if (com_data_index >= FUN_DATA_ADDR_FIRST)		  //VAL_ADDR_MAX          0x0b
 509               	.LM37:
 510 01d8 8033      		cpi r24,lo8(48)
 511 01da 08F0      		brlo .L23
 303:task/Comm.c   ****        {
 304:task/Comm.c   ****         com_data_index = com_data_index - FUN_DATA_ADDR_FIRST + VAL_ADDR_MAX + 1; //超出范围则读不

⌨️ 快捷键说明

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