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

📄 uart.s

📁 CS5532的驱动程序
💻 S
📖 第 1 页 / 共 3 页
字号:
; 			case PARAM_RESET_POLARITY:			//区分51和AVR用的,1表示AVR 0表示AT89C
; 				if(resetPolarity != msg_buffer[2])
; 				{
; 					resetPolarity = msg_buffer[2];
; 					EEPROMwrite(EEP_RESET_POLARITY,resetPolarity);				
; 				}
; 				break;
; 			case PARAM_CONTROLLER_INIT:
; 				paramControllerInit = msg_buffer[2];
; 				break;
; 			case PARAM_VADJUST:
; 				vAdjust = msg_buffer[2];
; 				EEPROMwrite(EEP_VOL_ADJUST,vAdjust);
; 				break;
; 			case PARAM_VTARGET:
; 				vTarget = msg_buffer[2]; 
; 				EEPROMwrite(EEP_VOL_TARGET,vTarget);
; 				asm("jmp 0x17FF");
; 				break;	
; 			default:break; 		
; 		}
; 		num_bytes = 2;
; 		msg_buffer[0] = CMD_SET_PARAMETER;
; 		msg_buffer[1] = STATUS_CMD_OK;
; 	}
; 	//命令CMD_GET_PARAMETER
; 	else if(cmd==CMD_GET_PARAMETER)
; 	{
; 		switch(msg_buffer[1])
; 		{
; 			case PARAM_BUILD_NUMBER_LOW:
; 				tmp = CONFIG_PARAM_BUILD_NUMBER_LOW;
; 				break;
; 			case PARAM_BUILD_NUMBER_HIGH:
; 				tmp = CONFIG_PARAM_BUILD_NUMBER_HIGH;
; 				break;
; 			case PARAM_HW_VER:
; 				tmp = CONFIG_PARAM_HW_VER;
; 				break;
; 			case PARAM_SW_MAJOR:
; 				tmp = CONFIG_PARAM_SW_MAJOR;
; 				break;
; 			case PARAM_SW_MINOR:
; 				tmp = CONFIG_PARAM_SW_MINOR;
; 				break;
; 			case PARAM_SCK_DURATION:
; 				tmp = clockSpeed;
; 				break;
; 			case PARAM_RESET_POLARITY:
; 				tmp = resetPolarity;
; 				break;
; 			case PARAM_CONTROLLER_INIT:
; 				tmp = paramControllerInit;
; 				break;
; 			case PARAM_VTARGET:				//目标电压
; 				tmp = vTarget;
; 				break;	
; 			case PARAM_VADJUST:
; 				tmp = vAdjust;				//参考电压
; 				break;
; 			case PARAM_TOPCARD_DETECT:
; 				tmp = TOP_CARD_STK520;
; 				break;	
; 		}
; 		num_bytes = 3;
; 		msg_buffer[0] = CMD_GET_PARAMETER;
; 		msg_buffer[1] = STATUS_CMD_OK;
; 		msg_buffer[2] = tmp;
; 	}
; 	//命令CMD_OSCCAL
; 	else if(cmd==CMD_OSCCAL)
; 	{
; 		num_bytes = 2;
; 		msg_buffer[0] = CMD_OSCCAL;
; 		msg_buffer[1] = STATUS_CMD_OK;
; 	}	
; 	//命令CMD_LOAD_ADDRESS
; 	else if(cmd==CMD_LOAD_ADDRESS)
; 	{
; 		address =  ((unsigned long)msg_buffer[1])<<24;
; 		address |= ((unsigned long)msg_buffer[2])<<16;
; 		address |= ((unsigned long)msg_buffer[3])<<8;
; 		address |= ((unsigned long)msg_buffer[4]);
; 		num_bytes = 2;
; 		msg_buffer[0] = CMD_LOAD_ADDRESS;
; 		msg_buffer[1] = STATUS_CMD_OK;
; 	}
; 	//命令CMD_FIRMWARE_UPGRADE
; 	else if(cmd==CMD_FIRMWARE_UPGRADE)
; 	{
; 		num_bytes = 2;
; 		msg_buffer[0] = CMD_FIRMWARE_UPGRADE;
; 		//msg_buffer[1] = STATUS_CMD_OK;
; 		msg_buffer[1] = STATUS_CMD_FAILED;
; 		asm("jmp 0x17FF");
; 		//进入Firmware upgrade模式
; 	}
; 	//命令CMD_ENTER_PROGMODE_ISP
; 	else if(cmd == CMD_ENTER_PROGMODE_ISP)
; 	{
; 		prgMode=1;
; 		spiEnable();
; 		msDelay(msg_buffer[2]);	
; 		LED_ON2;
; 		for(i=0;i<msg_buffer[4];i++)
; 		{
; 			SPIWrite(msg_buffer[8]);
; 			msDelay(msg_buffer[5]);
; 			SPIWrite(msg_buffer[9]);
; 			msDelay(msg_buffer[5]);
; 			if(msg_buffer[7]==3)		//AVR
; 			{
; 				tmp=SPIWrite(msg_buffer[10]);
; 				msDelay(msg_buffer[5]);				
; 				SPIWrite(msg_buffer[11]);
; 				msDelay(msg_buffer[5]);				
; 			}
; 			else				//AT89S
; 			{
; 				SPIWrite(msg_buffer[10]);
; 				msDelay(msg_buffer[5]);				
; 				tmp=SPIWrite(msg_buffer[11]);
; 				msDelay(msg_buffer[5]);
; 			}
; 			if((tmp==msg_buffer[6])||(msg_buffer[7]==0))
; 			{
; 				i=0xFF;
; 				LED_OFF2;
; 				break;
; 			}
; 			else
; 			{
; 				spiEnable();
; 				msDelay(msg_buffer[2]);	
; 			}
; 		}
; 		num_bytes = 2;
; 		msg_buffer[0] = CMD_ENTER_PROGMODE_ISP;
; 		if(i==0xFF)
; 		{			
; 			msg_buffer[1] = STATUS_CMD_OK;			
; 		}
; 		else
; 		{			
; 			msg_buffer[1] = STATUS_CMD_FAILED;
; 		}		
; 	}
; 	//命令 CMD_LEAVE_PROGMODE_ISP
; 	else if(cmd==CMD_LEAVE_PROGMODE_ISP)
; 	{
; 		prgMode=0;		
; 		spiDisable();
; 		num_bytes = 2;
; 		msg_buffer[0] = CMD_LEAVE_PROGMODE_ISP;
; 		msg_buffer[1] = STATUS_CMD_OK;		
; 	}
; 	//命令CMD_CHIP_ERASE_ISP
; 	else if(cmd==CMD_CHIP_ERASE_ISP)
; 	{
; 		universalComm(msg_buffer[3],msg_buffer[4],msg_buffer[5],msg_buffer[6]);	
; 		//Newer AVR's seems to have a busy bit
; 		//cant test this because I don't have any of these new chips
; 		if(msg_buffer[2]==0)
; 		{
; 			msDelay(msg_buffer[1]);
; 		}
; 		else 	//if(msg_buffer[2]==1)
; 		{
; 			while(universalComm(0xF0,0x00,0x00,0x00)&1);
; 		}		
; 		num_bytes = 2;
; 		msg_buffer[0] = CMD_CHIP_ERASE_ISP;
; 		msg_buffer[1] = STATUS_CMD_OK;			
; 	}
; 	//命令CMD_PROGRAM_FLASH_ISP
; 	else if(cmd==CMD_PROGRAM_FLASH_ISP)
; 	{
; 		block_size = ((unsigned int)msg_buffer[1])<<8;
; 		block_size |= msg_buffer[2];
; 		mode = msg_buffer[3];
; 		LED_FLASH2;
; 		//如果是字写模式
; 		if((mode&1) == 0)
; 		{	
; 			for(i=0;i<block_size;i++)
; 			{	
; 				//If we have an uneven byte programm the
; 				//high byte			
; 				if(i&1)
; 				{
; 					SPIWrite(msg_buffer[5]|(1<<3));
; 				}
; 				else
; 				{
; 					SPIWrite(msg_buffer[5]);
; 				}
; 				SPIWrite16(address);
; 				SPIWrite(msg_buffer[i+10]);
; 				//Check if we can do polling
; 				if(msg_buffer[8]!=msg_buffer[i+10])
; 				{
; 					polling_address = address&0xFFFF;
; 				}
; 				//If not switch the mode hard waiting
; 				else
; 				{
; 					mode = (mode&(~0x0E)) | 0x02;
; 				}
; 				//Different polling methods
; 				//Hard waiting
; 				if((mode&0x0E) == 0x02)
; 				{
; 					msDelay(msg_buffer[4]);
; 				}
; 				//Data polling
; 				else if((mode&0x0E) == 0x04)
; 				{
; 					do{
; 						//If we have an uneven byte read the
; 						//high byte			
; 						if(i&1)
; 						{
; 							SPIWrite(msg_buffer[7]|(1<<3));
; 						}
; 						else
; 						{
; 							SPIWrite(msg_buffer[7]);
; 						}						
; 						SPIWrite16(polling_address);
; 						tmp=SPIWrite(0x00);
; 					}while(tmp==msg_buffer[8]);
; 				}
; 				//RDY/BSY polling
; 				else if((mode&0x0E) == 0x08)
; 				{
; 					while(universalComm(0xF0,0x00,0x00,0x00)&1);
; 				}
; 				//If something was not correct with the given mode do
; 				//hard waiting. Should never reach this point
; 				else
; 				{
; 					msDelay(msg_buffer[4]);					
; 				}		
; 				//increment (word) address only when we have an uneven (byte) address
; 				if(i&1) address++;
; 			}			
; 		}
; 		//Page Mode
; 		else
; 		{
; 			for(i=0;i<block_size;i++)
; 			{
; 				//If we have an uneven(奇数) byte programm the
; 				//high byte			
; 				if(i&1)
; 				{
; 					SPIWrite(msg_buffer[5]|(1<<3));  	//高字节
; 				}
; 				else
; 				{
; 					SPIWrite(msg_buffer[5]);		//低字节
; 				}
; 				SPIWrite16(address);
; 				SPIWrite(msg_buffer[i+10]);
; 				//Check if we can do polling//用于数据轮寻,随意找一个地址
; 				if(msg_buffer[8]!=msg_buffer[i+10])
; 				{
; 					//We have to check if we have an uneven byte. 
; 					//Set the polling address to a byte address
; 					//so that we can poll the right location
; 					polling_address = (address&0xFFFF)*2;
; 					if(i&1) polling_address++;
; 				}
; 				
; 				//increment (word) address only when we have an uneven (byte) address
; 				if(i&1) address++;
; 			}
; 			//If this page is complete the bit 7 of mode will be set and we programm the page
; 			if(mode&0x80)  //页编程,并且选择等待的方式
; 			{
; 				SPIWrite(msg_buffer[6]);	
; 				SPIWrite16(start_address);
; 				SPIWrite(0x00);
; 				//If we have no valid polling address switch to simple wait mode
; 				if(polling_address==0)
; 				{
; 					mode = (mode&(~0x70)) | 0x10;
; 				}
; 				//Different polling methods
; 				//Hard waiting
; 				if((mode&0x70) == 0x10)
; 				{
; 					msDelay(msg_buffer[4]);
; 				}
; 				//Data polling
; 				else if((mode&0x70) == 0x20)
; 				{
; 					do{
; 						//If we have an uneven byte read the
; 						//high byte			
; 						if(polling_address%2)
; 						{
; 							SPIWrite(msg_buffer[7]|(1<<3));
; 						}
; 						else
; 						{
; 							SPIWrite(msg_buffer[7]);
; 						}
; 						SPIWrite16(polling_address/2);
; 						tmp=SPIWrite(0x00);
; 					}while(tmp==msg_buffer[8]);
; 				}
; 				//RDY/BSY polling
; 				else if((mode&0x70) == 0x40)
; 				{
; 					while(universalComm(0xF0,0x00,0x00,0x00)&1);
; 				}
; 				//If something was not correct with the given mode do
; 				//hard waiting. Should never reach this point
; 				else
; 				{
; 					msDelay(msg_buffer[4]);					
; 				}
; 			}
; 		}
; 		num_bytes = 2;
; 		msg_buffer[0] = CMD_PROGRAM_FLASH_ISP;
; 	}
; 	//命令CMD_READ_FLASH_ISP
; 	else if(cmd==CMD_READ_FLASH_ISP)
; 	{
; 		LED_FLASH2;	
; 		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
; 			if(i&1)
; 			{
; 				SPIWrite(tmp|(1<<3));
; 			}
; 			else
; 			{
; 				SPIWrite(tmp);
; 			}
; 			
; 			SPIWrite16(address&0xFFFF);
; 			msg_buffer[i+2] = SPIWrite(0);
; 			//increment (word) address only when we have an uneven (byte) address
; 			if(i&1) address++;
; 		}
; 		
; 		num_bytes = block_size+3;
; 		msg_buffer[0] = CMD_READ_FLASH_ISP;
; 		msg_buffer[1] = STATUS_CMD_OK;
; 		msg_buffer[block_size+2] = STATUS_CMD_OK;
; 	}
; 	//命令CMD_PROGRAM_EEPROM_ISP
; 	else if(cmd==CMD_PROGRAM_EEPROM_ISP)
; 	{
; 		block_size = ((unsigned int)msg_buffer[1])<<8;
; 		block_size |= msg_buffer[2];
; 		mode = msg_buffer[3];
; 		
; 		//Byte Mode
; 		if((mode&1) == 0)
; 		{		
; 			for(i=0;i<block_size;i++)
; 			{	
; 				LED_FLASH2;	
; 				SPIWrite(msg_buffer[5]);								
; 				SPIWrite16(address&0xFFFF);
; 				SPIWrite(msg_buffer[i+10]);
; 				
; 				//Check if we can do polling
; 				if((msg_buffer[i+10]!=msg_buffer[8])&&(msg_buffer[i+10]!=msg_buffer[9]))
; 				{
; 					polling_address = address&0xFFFF;
; 				}
; 				//If not switch the mode hard waiting
; 				else
; 				{
; 					mode = (mode&(~0x0E)) | 0x02;
; 				}
; 				
; 				//Different polling methods
; 				//Hard waiting
; 				if((mode&0x0E) == 0x02)
; 				{
; 					msDelay(msg_buffer[4]);
; 				}
; 				//Data polling
; 				else if((mode&0x0E) == 0x04)
; 				{
; 					do{
; 						SPIWrite(msg_buffer[7]);
; 						SPIWrite16(polling_address);
; 						tmp=SPIWrite(0x00);
; 					}while((tmp==msg_buffer[8])||(tmp==msg_buffer[9]));
; 				}
; 				//RDY/BSY polling
; 				else if((mode&0x0E) == 0x08)
; 				{
; 					while(universalComm(0xF0,0x00,0x00,0x00)&1);
; 					//while(spi_transfer_32(0xF0000000)&1);
; 				}
; 				//If something was not correct with the given mode do
; 				//hard waiting. Should never reach this point
; 				else
; 				{
; 					msDelay(msg_buffer[4]);					
; 				}
; 				
; 				//increment address
; 				address++;
; 			}			
; 		}
; 		//Page Mode
; 		else
; 		{
; 			
; 			for(i=0;i<block_size;i++)
; 			{
; 				LED_FLASH2;
; 				SPIWrite(msg_buffer[5]);
; 				SPIWrite16(address&0xFFFF);
; 				SPIWrite(msg_buffer[i+10]);
; 				//Check if we can do polling
; 				if((msg_buffer[i+10]!=msg_buffer[8])&&(msg_buffer[i+10]!=msg_buffer[9]))
; 				{
; 					polling_address = address&0xFFFF;
; 				}
; 				
; 				//increment (word) address only when we have an uneven (byte) address
; 				address++;
; 			}
; 			
; 			//If this page is complete the bit 7 of mode will be set and we programm the page
; 			if(mode&0x80)
; 			{
; 				SPIWrite(msg_buffer[6]);						
; 				SPIWrite16(start_address&0xFFFF);
; 				SPIWrite(0);
; 				
; 				//If we have no valid polling address switch to simple wait mode
; 				if(polling_address==0)
; 				{
; 					mode = (mode&(~0x70)) | 0x10;
; 				}
; 				
; 				//Different polling methods
; 				//Hard waiting
; 				if((mode&0x70) == 0x10)
; 				{
; 					msDelay(msg_buffer[4]);
; 				}
; 				//Data polling
; 				else if((mode&0x70) == 0x20)
; 				{
; 					do{
; 						//If we have an uneven byte read the
; 						//high byte			
; 						if(i&1)
; 						{
; 							SPIWrite(msg_buffer[7]|(1<<3));
; 						}
; 						else
; 						{
; 							SPIWrite(msg_buffer[7]);
; 						}
; 						SPIWrite16(polling_address);
; 						tmp=SPIWrite(0x00);
; 					}while(tmp==msg_buffer[8]);
; 				}
; 				//RDY/BSY polling
; 				else if((mode&0x70) == 0x40)
; 				{
; 					while(universalComm(0xF0,0x00,0x00,0x00)&1);
; 				}
; 				//If something was not correct with the given mode do
; 				//hard waiting. Should never reach this point
; 				else
; 				{
; 					msDelay(msg_buffer[4]);					
; 				}
; 			}
; 		}
; 		
; 		num_bytes = 2;
; 		msg_buffer[0] = CMD_PROGRAM_EEPROM_ISP;
; 		msg_buffer[1] = STATUS_CMD_OK;
; 	}
; 	//命令CMD_READ_EEPROM_ISP
; 	else if(cmd==CMD_READ_EEPROM_ISP)

⌨️ 快捷键说明

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