亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? uart.c

?? CS5532的驅動程序
?? C
?? 第 1 頁 / 共 2 頁
字號:
/****************************************Copyright (c)**************************************************
**                               	GaodeTailin
**                                   
**                                 
** 文   件   名: uart.c
** 最后修改日期: 2007-9-19 12:56
** 描        述: rs232通訊函數
** 版	     本: V1.0
** 主  控  芯 片:M8 晶振頻率:4.00, 波特率9600
** IDE:ICCAVR 6.31
**********************************************************************************************************/
#include <iom8v.h>
#include <macros.h>

#include "DEFINE.H"
#include "UART.H"
#include "COMMAND.H"


uint08 uart_tx_buf[UART_BUF_SIZE];			//發送緩沖
uint08 uart_tx_wr_ptr,uart_tx_rd_ptr;		
uint08 uart_rx_counter,uart_tx_counter;
uint08 uart_rx_buf[UART_BUF_SIZE];			//接收緩沖,相當于消息體
uint08 seq_number;					//順序數
uint08 check_sum;					//和校驗
uint08 rx_stu_mac;					//接收狀態機
uint08 msg_end_flag;					//消息體結束標志
uint16 msg_size;					//消息尺寸


/**********************************************************************
functionName:void uart_init(void)
description:uart初始化
**********************************************************************/	
void uart_init(void)
{
	SET_BIT(DDRD,PD1);	//IO初始化	
	CLR_BIT(DDRD,PD0);	//IO初始化

	UCSRB = 0x00; 		
 	UCSRA = 0x00;
 	UCSRC = 0x86;
	UBRRL = BAUD9600; 			//set baud rate lo
 	UBRRH = 0x00; 				//set baud rate hi
 	UCSRB = 0x98;				//使用中斷
	uart_tx_wr_ptr=uart_tx_rd_ptr=0;
	//uart_rx_wr_ptr=uart_rx_rd_ptr=0;
	uart_rx_counter=uart_tx_counter=0;
	msg_end_flag=0;				//表示沒有接收到數據
	rx_stu_mac=ST_START;
}




/**********************************************************************
functionName:void uart0_rx_isr(void)
description:串口接受中斷函數
**********************************************************************/
#pragma interrupt_handler uart0_rx_isr:12
void uart0_rx_isr(void)
{
 	uint08 uart_data;
 	uart_data=UDR;
 	switch(rx_stu_mac)
 	{
 		case ST_START:
 		{
 			if(uart_data==MESSAGE_START)
			{
				rx_stu_mac = ST_GET_SEQ_NUM;	
				check_sum = MESSAGE_START;
			}
 			break;
 		}
 		case ST_GET_SEQ_NUM:
 		{
 			seq_number = uart_data;
			check_sum ^= uart_data; 
			rx_stu_mac = ST_MSG_SIZE_H;
 			break;
 		}
 		case ST_MSG_SIZE_H:
 		{
 			msg_size = uart_data;
			msg_size <<=8;
			check_sum ^= uart_data;
			rx_stu_mac = ST_MSG_SIZE_L;
 			break;
 		}
 		case ST_MSG_SIZE_L:
 		{
 			msg_size |= uart_data;
			check_sum ^= uart_data;
			rx_stu_mac = ST_GET_TOKEN;	
 			break;
 		}
 		case ST_GET_TOKEN:
 		{
 			if(uart_data==TOKEN)
			{
				check_sum ^= uart_data;
				rx_stu_mac = ST_GET_DATA;
				uart_rx_counter=0;
			}
			else
			{
				rx_stu_mac = ST_START;
			}
 			break;
 		}
 		case ST_GET_DATA:
 		{
 			uart_rx_buf[uart_rx_counter++]=uart_data;
			check_sum ^= uart_data;
			if(uart_rx_counter==msg_size)
			{
				rx_stu_mac = ST_GET_CHECK;
			}
 			break;
 		}
 		case ST_GET_CHECK:
 		{
 			if(uart_data == check_sum)
			{
				msg_end_flag=1;
			}		
			rx_stu_mac = ST_START;
 			break;
 		}
 		default:
 		{
 			rx_stu_mac=ST_START;
 			break;
 		}
 	}
}




/*void packageProcess(uint08 seqNum) 
{
	uint08 cmd;
	uint08 tmp=0;
	uint08 tmp2=0;
	uint08 tmp3=0;
	uint08 mode;
	uint16 block_size;
	uint16 i;
	uint16 tmp16;
	uint16 num_bytes=0;
	uint32 polling_address=0;
	uint32 start_address = address;
	cmd = msg_buffer[0];
	
	//命令CMD_SIGN_ON
	if(cmd==CMD_SIGN_ON)
	{
		num_bytes = 11;
		msg_buffer[0] = CMD_SIGN_ON;
		msg_buffer[1] = STATUS_CMD_OK;
		msg_buffer[2] = 8;
		memcpy(msg_buffer+3,"STK500_2",8);
	}
	//命令CMD_SET_PARAMETER
	else if(cmd==CMD_SET_PARAMETER)
	{
		switch(msg_buffer[1])
		{
			case PARAM_SCK_DURATION:
				
				if((msg_buffer[2]) >= 1  ) clockSpeed=SPI_SPEED_2MHZ;
				if((msg_buffer[2]) >= 2  ) clockSpeed=SPI_SPEED_1MHZ;
				if((msg_buffer[2]) >= 4  ) clockSpeed=SPI_SPEED_500KHZ;
				if((msg_buffer[2]) >= 8  ) clockSpeed=SPI_SPEED_250KHZ;
				if((msg_buffer[2]) >= 16 ) clockSpeed=SPI_SPEED_125KHZ;
				if((msg_buffer[2]) >= 32 ) clockSpeed=SPI_SPEED_62KHZ;
				if(EEPROMread(EEP_SCK_DURATION)!=clockSpeed) 
				EEPROMwrite(EEP_SCK_DURATION,clockSpeed);
				//spi_set_speed(clock_speed);		//因為我這里不用硬件SPI 
				break;
			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

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
成人激情文学综合网| 久久草av在线| 久久久91精品国产一区二区三区| 国产综合色在线| 亚洲精品国产第一综合99久久 | 91在线看国产| 激情丁香综合五月| 亚洲va国产va欧美va观看| 国产日韩欧美精品一区| 欧美日韩不卡在线| 91在线高清观看| 成人av在线播放网站| 麻豆精品视频在线观看| 性欧美疯狂xxxxbbbb| 亚洲图片激情小说| 中文字幕欧美激情| 国产视频在线观看一区二区三区| 欧美成人一区二区三区| 欧美日产在线观看| 欧美日韩成人一区二区| 在线精品观看国产| 在线精品亚洲一区二区不卡| 99re视频这里只有精品| www.亚洲国产| 欧洲国内综合视频| 色综合天天性综合| 欧美在线观看视频在线| 欧洲一区在线观看| 欧美久久免费观看| 欧美一区二区国产| 国产午夜亚洲精品不卡| 国产午夜亚洲精品午夜鲁丝片| 久久久久九九视频| 亚洲天堂中文字幕| 亚洲一级电影视频| 日本v片在线高清不卡在线观看| 奇米一区二区三区| 激情文学综合插| eeuss鲁片一区二区三区在线观看| 春色校园综合激情亚洲| 欧美午夜精品电影| 精品对白一区国产伦| 中文字幕一区二区三区视频| 一区二区成人在线| 极品少妇xxxx偷拍精品少妇| 中文字幕欧美国产| 欧美精品久久天天躁| 欧美肥大bbwbbw高潮| 日韩免费看的电影| 亚洲精品国产精品乱码不99| 久久激情综合网| 欧美私人免费视频| 中文字幕免费在线观看视频一区| 夜夜亚洲天天久久| 国产精品一区二区不卡| 91福利国产成人精品照片| 精品国产sm最大网站免费看| 一区二区三区在线观看视频| 激情六月婷婷久久| 欧美日韩一级视频| 亚洲免费高清视频在线| 国产乱码精品1区2区3区| 欧美人与禽zozo性伦| 亚洲精品欧美二区三区中文字幕| 国产精品1024| 国产欧美日韩另类一区| 久久精品国产999大香线蕉| 欧美日韩视频不卡| 亚洲一区二区视频| 在线观看一区二区精品视频| 精品国产电影一区二区| 日韩高清国产一区在线| 欧美精三区欧美精三区| 一区二区免费视频| 欧美影院一区二区| 亚洲电影一级片| 日韩三级伦理片妻子的秘密按摩| 午夜影院在线观看欧美| 欧美日韩三级一区| 蜜臀va亚洲va欧美va天堂| 精品三级av在线| 美女久久久精品| 久久精子c满五个校花| 成人综合在线网站| 亚洲综合一区二区| 欧美日韩成人一区二区| 激情综合一区二区三区| 国产三级欧美三级日产三级99 | 99久久精品免费精品国产| 亚洲欧美区自拍先锋| 日本丰满少妇一区二区三区| 五月综合激情日本mⅴ| 久久精品亚洲一区二区三区浴池| 粉嫩嫩av羞羞动漫久久久| 亚洲色图自拍偷拍美腿丝袜制服诱惑麻豆| 不卡的av电影在线观看| 亚洲成人久久影院| 久久综合九色综合97婷婷女人 | 欧美激情一区二区三区| 欧美羞羞免费网站| 国产91在线|亚洲| 亚洲成人tv网| 国产日韩欧美精品电影三级在线| 91麻豆国产精品久久| 日本欧美加勒比视频| 亚洲精品视频在线| 欧美精品在线视频| 91首页免费视频| 国产精品一区二区久激情瑜伽| 亚洲成人综合视频| 亚洲视频一区二区在线| 一本久久精品一区二区| 国产一区91精品张津瑜| 蜜臀av性久久久久蜜臀aⅴ| 亚洲欧洲制服丝袜| 国产女同性恋一区二区| 日韩欧美你懂的| 欧美一区午夜视频在线观看 | 国产99久久久国产精品潘金 | 久久久噜噜噜久噜久久综合| 欧美久久久一区| 欧美日韩综合一区| 在线观看日韩电影| 在线看不卡av| 欧美日韩高清一区二区不卡| 欧美日韩视频在线第一区| 欧洲亚洲精品在线| 欧美中文字幕一区| 欧美久久久影院| 91精品久久久久久久99蜜桃| 欧美一区二区三区公司| 日韩一区二区电影在线| 久久亚洲精品小早川怜子| 日韩一卡二卡三卡四卡| 国产婷婷一区二区| 中文字幕中文字幕一区二区| 一区二区不卡在线视频 午夜欧美不卡在| 国产精品美女久久久久aⅴ国产馆 国产精品美女久久久久av爽李琼 国产精品美女久久久久高潮 | 欧美一卡在线观看| 国产午夜精品一区二区三区嫩草| 久久伊99综合婷婷久久伊| 国产日韩欧美亚洲| 亚洲午夜久久久久久久久电影网| 国产乱码精品一区二区三区忘忧草| 久久一日本道色综合| 欧美一区二区三区在线观看视频| 欧洲人成人精品| 欧美高清激情brazzers| 国产亚洲1区2区3区| 亚洲午夜视频在线观看| 国产原创一区二区三区| 日本久久电影网| 久久久精品日韩欧美| 亚洲午夜激情av| 国产成人无遮挡在线视频| 91黄色免费版| 国产精品乱子久久久久| 亚洲一级电影视频| 福利91精品一区二区三区| 欧美日韩卡一卡二| 亚洲情趣在线观看| 精品中文av资源站在线观看| 97精品电影院| 日本黄色一区二区| 国产欧美一区二区三区网站 | 亚洲一区二区视频在线观看| 成人免费高清视频在线观看| 精品成人a区在线观看| 午夜精品福利在线| 在线观看视频一区二区| 亚洲男人的天堂av| 91天堂素人约啪| 亚洲人成网站精品片在线观看| 国产高清精品网站| 久久久电影一区二区三区| 久久国产福利国产秒拍| 日韩欧美国产午夜精品| 久久精品国产亚洲高清剧情介绍| 51精品视频一区二区三区| 日本午夜一本久久久综合| 欧美人妇做爰xxxⅹ性高电影| 亚洲国产欧美在线| 777午夜精品视频在线播放| 五月天激情综合| 欧美一区二区久久久| 极品美女销魂一区二区三区免费| 欧美一二三四区在线| 韩国精品主播一区二区在线观看| 91蝌蚪porny成人天涯| 亚洲国产日韩一级| 日韩欧美久久一区| 成人午夜激情视频| 亚洲精品videosex极品| 欧美午夜片在线观看| 看电视剧不卡顿的网站| 久久先锋影音av| 成人av第一页| 日本中文字幕一区二区有限公司| 久久精品亚洲精品国产欧美kt∨| jlzzjlzz亚洲女人18|