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

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

?? uart.c

?? CS5532的驅動程序
?? C
?? 第 1 頁 / 共 2 頁
字號:
/****************************************Copyright (c)**************************************************
**                               	
**                                   
**                                 
** 文   件   名: uart.c
** 最后修改日期: 2007-10-8
** 描        述: rs232通訊函數
** 版	     本: V1.0
** 主  控  芯 片:M16 晶振頻率:7.37MHZ, 波特率19200
** IDE:ICCAVR 6.31
**********************************************************************************************************/																							   

#define 	MCU_M16
#define		MCLK737	


#ifdef MCU_M8
#include <iom8v.h> 
#endif

#ifdef MCU_M16
#include <iom16v.h>
#endif

#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)
{
	//IO初始化
	SET_BIT(PORTD,PD0);
	SET_BIT(PORTD,PD1);
	SET_BIT(DDRD,PD1);	
	CLR_BIT(DDRD,PD0);	
	
	//寄存器初始化
	UCSRB = 0x00; 		
 	UCSRA = 0x00;
 	UCSRC = 0x86;
	UBRRL = BAUD19200; 			//設置撥特率
 	UBRRH = 0x00; 				//set baud rate hi
 	UCSRB = 0x98;				//使用中斷
	
	//變量初始化
	uart_tx_wr_ptr=uart_tx_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])
				{

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
精品在线播放午夜| 国产在线精品免费| 亚洲电影在线免费观看| 国产三级久久久| 欧美一区二区免费视频| 一区二区三区四区不卡在线| 亚洲电影你懂得| 婷婷夜色潮精品综合在线| 五月综合激情网| 欧美日韩亚洲综合在线| 欧美日韩和欧美的一区二区| 国产福利一区二区三区| 国产成a人无v码亚洲福利| 欧美va亚洲va| 日韩女优电影在线观看| 中文字幕五月欧美| 亚洲福利视频导航| 成人av在线观| 成人欧美一区二区三区黑人麻豆 | 中文字幕一区二区日韩精品绯色| 亚洲国产高清不卡| 国产一区在线视频| 欧美天堂一区二区三区| 亚洲免费资源在线播放| 激情六月婷婷久久| 国产亚洲视频系列| 日韩国产高清在线| 欧美精品一区二区三区在线 | 精品欧美一区二区三区精品久久| 欧美一区三区四区| 日本亚洲最大的色成网站www| aaa亚洲精品| 亚洲黄色免费网站| 91小视频在线观看| 国产婷婷色一区二区三区在线| 中文字幕日韩一区二区| 国产ts人妖一区二区| 国产在线一区二区| 日韩亚洲欧美一区| 成人黄动漫网站免费app| 国产精品亚洲第一| 亚洲黄色尤物视频| 色婷婷国产精品综合在线观看| 欧美一区二视频| 久久九九99视频| 久久久美女毛片| 日韩av电影免费观看高清完整版 | 不卡的看片网站| 国产精品123| 欧美日本一区二区三区四区| 秋霞午夜鲁丝一区二区老狼| 成人av午夜电影| 一区二区三区四区视频精品免费| 天堂va蜜桃一区二区三区| 日本亚洲免费观看| 欧美日产国产精品| 久久99蜜桃精品| 欧美精品视频www在线观看| 国产一区二区三区观看| 久久久久久97三级| 国产欧美日韩视频在线观看| 欧美色图一区二区三区| 一区二区三区自拍| 久久九九久久九九| 午夜不卡在线视频| 日韩欧美一区二区久久婷婷| 午夜精品久久一牛影视| 日韩一卡二卡三卡国产欧美| 99久久99久久精品国产片果冻 | 色婷婷av一区二区三区之一色屋| 日韩激情中文字幕| 91国在线观看| 天涯成人国产亚洲精品一区av| 最新欧美精品一区二区三区| 国产剧情一区在线| 成人av资源站| 亚洲男人的天堂网| 五月天激情综合网| 日韩手机在线导航| 国产一区二区美女诱惑| 91精品国产色综合久久ai换脸| 国产精品久久久久久户外露出| 天堂在线一区二区| 亚洲va国产va欧美va观看| 日韩精品专区在线影院观看 | 精品一区二区三区影院在线午夜 | 91视频在线观看| 精品国产乱码久久久久久久| 日韩一级片网址| 麻豆久久久久久久| 欧美久久久久免费| 91丝袜美腿高跟国产极品老师| youjizz国产精品| 亚洲成a人片综合在线| 欧美亚洲国产一卡| 中文字幕精品在线不卡| 99久久精品情趣| 亚洲一区二区三区小说| 欧美主播一区二区三区| 成人蜜臀av电影| 欧美韩国日本综合| 欧美精品99久久久**| 国产suv一区二区三区88区| 午夜a成v人精品| 日韩一级片在线观看| 久久精品国产成人一区二区三区 | 久久精品在线观看| 免费的成人av| 亚洲欧美影音先锋| 丁香啪啪综合成人亚洲小说 | 欧美一区二区三区免费大片| 7777精品伊人久久久大香线蕉经典版下载 | 日韩美女视频一区| av电影天堂一区二区在线| 国产精品狼人久久影院观看方式| 26uuu亚洲综合色| 欧美私人免费视频| 欧美精品在线观看播放| 激情综合色综合久久综合| 成人看片黄a免费看在线| 中日韩免费视频中文字幕| 成人短视频下载| 毛片一区二区三区| 另类专区欧美蜜桃臀第一页| 国产日产欧美精品一区二区三区| 久久66热偷产精品| 在线一区二区视频| 26uuu精品一区二区| 色成人在线视频| 日本成人中文字幕在线视频| 精品国产一区二区三区久久影院| 国产喷白浆一区二区三区| 日本伊人精品一区二区三区观看方式 | 在线视频欧美区| 韩国成人在线视频| 日韩国产高清影视| 亚洲激情图片qvod| 精品精品国产高清一毛片一天堂| 精品精品国产高清a毛片牛牛 | 欧美午夜精品一区二区三区| 麻豆精品一区二区综合av| 91精品国产一区二区三区香蕉| 亚洲一区视频在线观看视频| 欧美日韩美女一区二区| 91国偷自产一区二区三区观看| 精品一区二区三区免费观看| 日本aⅴ免费视频一区二区三区| 国产精品538一区二区在线| 一区二区三区日韩欧美| 国产日本一区二区| 国产精品美日韩| 中文字幕乱码一区二区免费| 亚洲国产精品二十页| 中文字幕五月欧美| 日本一区二区三区免费乱视频| 久久女同性恋中文字幕| 亚洲精品在线免费观看视频| 亚洲另类在线一区| 日韩欧美视频在线| 久久久99精品免费观看不卡| 久久色中文字幕| 欧美中文字幕一区| 日韩精品一区二区三区视频在线观看| 日本不卡视频一二三区| www国产成人免费观看视频 深夜成人网| 国产精品成人午夜| 久久99精品一区二区三区 | 国产精品538一区二区在线| 不卡的av网站| 97se亚洲国产综合自在线| 欧美电影免费提供在线观看| 久久久99免费| 青青草国产成人av片免费| 麻豆国产欧美一区二区三区| 色域天天综合网| 午夜av一区二区三区| 自拍偷在线精品自拍偷无码专区| 欧美日韩激情一区二区| 成人av在线一区二区| 视频在线在亚洲| 久久国产尿小便嘘嘘尿| 久久精品国产久精国产爱| 在线欧美日韩精品| 亚洲欧美日韩国产中文在线| 午夜亚洲福利老司机| 中文字幕+乱码+中文字幕一区| 亚洲一区成人在线| 91片黄在线观看| 亚洲三级小视频| 久久国产视频网| 在线观看免费一区| 91麻豆精品国产91久久久久| 成人sese在线| 欧美精品一区二区三区四区| 日本中文在线一区| 99久久久久免费精品国产| 欧美一区二区三区系列电影| 日本一区二区三区视频视频| 亚洲精品国产精华液| 蜜桃av噜噜一区二区三区小说|