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

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關(guān)于我們
? 蟲蟲下載站

?? obj_svcxmodem.c

?? 該源碼是AT91RM9200處理器的loader文件
?? C
字號:
//*----------------------------------------------------------------------------//*      ATMEL Microcontroller Software Support  -  ROUSSET  -//*----------------------------------------------------------------------------//* The software is delivered "AS IS" without warranty or condition of any//* kind, either express, implied or statutory. This includes without//* limitation any warranty or condition with respect to merchantability or//* fitness for any particular purpose, or against the infringements of//* intellectual property rights of others.//*----------------------------------------------------------------------------//* File Name           : obj_svcxmodem.c//* Object              : Send and receive funtions for USB device peripheral//*//* 1.0 20/06/01 	    : ODi Creation//*----------------------------------------------------------------------------#include "services/obj_buffer.h"#include "services/obj_svcxmodem.h"#include "periph/usart2/lib_usart2.h"#define CRC16POLY   0x1021              /* CRC 16  polynom *///*----------------------------------------------------------------------------//* Function Name       : XmCheckHeader//* Object              : Compute the CRC//* Input Parameters    : <ptr>  char pointer//*                       <count> nb of char//* Output Parameters   : crc value//*----------------------------------------------------------------------------char AT91F_SvcXmodemCheckHeader(unsigned char currentPacket, char *packet){	// Check that bloc number and bloc checksum are OK	if ( (packet[0] + packet[1]) != 0xff )		return 0;	// Check that this is a sequential block number	if ( packet[0] != currentPacket )		return 0;	return 1;}//*----------------------------------------------------------------------------//* Function Name       : AT91F_SvcXmodemCheckCrc//* Object              : Compute the CRC//* Input Parameters    : <ptr>  char pointer//*                       <count> nb of char//* Output Parameters   : crc value//*----------------------------------------------------------------------------unsigned short AT91F_SvcXmodemGetCrc(char *ptr, unsigned int count){    unsigned short crc, cmpt;    crc = 0;    //* For  all char    while (count--)    {        crc = crc ^ (int) *ptr++ << 8;        //* For All bit        for (cmpt = 0; cmpt < 8; cmpt++)        {            if (crc & 0x8000)                crc = crc << 1 ^ CRC16POLY;            else                crc = crc << 1;        }//* end bit    }//* Frame end    return (crc & 0xFFFF);}//*----------------------------------------------------------------------------//* Function Name       : AT91F_SvcXmodemCheckData//* Object              : check the data frame, increment the address if OK//* Input Parameters    : pointer to XmData//* Output Parameters   : 1 OK, 0 not OK//*----------------------------------------------------------------------------char AT91F_SvcXmodemCheckData(AT91PS_SvcXmodem pSvcXmodem){	unsigned short crc;	char         *pData   = pSvcXmodem->pData;	unsigned int dataSize = pSvcXmodem->dataSize;	crc = pSvcXmodem->GetCrc(pData, dataSize);	if ( (pData[dataSize]   == (unsigned char)(crc >> 8)) &&	     (pData[dataSize+1] == (unsigned char)(crc)) )	{		pSvcXmodem->pData += dataSize;		return 1;	}	else		return 0;}//*----------------------------------------------------------------------------//* Function Name       : OpenUdpService()//* Object              ://* Input Parameters    ://* Output Parameters   : none//*----------------------------------------------------------------------------AT91PS_SvcComm AT91F_OpenSvcXmodem(	AT91PS_SvcXmodem pSvcXmodem,	AT91PS_USART2    pUsart,	AT91PS_CtlTempo  pCtlTempo){	AT91PS_SvcComm pSvcComm = &(pSvcXmodem->parent);	// Init AT91S_CommSvc base structure	// Init AT91PS_SvcComm methods	pSvcComm->Reset        = (AT91PF_SvcCommReset)   0;	pSvcComm->StartTx      = AT91F_SvcXmodemStartTx;	pSvcComm->StartRx      = AT91F_SvcXmodemStartRx;	pSvcComm->StopTx       = AT91F_SvcXmodemStopTx;	pSvcComm->StopRx       = AT91F_SvcXmodemStopRx;	pSvcComm->TxReady      = AT91F_SvcXmodemTxReady;	pSvcComm->RxReady      = AT91F_SvcXmodemRxReady;	// Init AT91PS_SvcComm data	pSvcComm->pChild       = (void *) pSvcXmodem;	pSvcComm->pBuffer      = (AT91PS_Buffer) 0;	// Init AT91PS_SvcXmodem methods	pSvcXmodem->ReadHandler  = AT91F_SvcXmodemReadHandler;	pSvcXmodem->WriteHandler = AT91F_SvcXmodemWriteHandler;	pSvcXmodem->GetCrc       = AT91F_SvcXmodemGetCrc;	pSvcXmodem->CheckHeader  = AT91F_SvcXmodemCheckHeader;	pSvcXmodem->CheckData    = AT91F_SvcXmodemCheckData;	// Init AT91PS_SvcXmodem data	pSvcXmodem->pUsart = pUsart;	// Attach the tempo to a tempo controler	pCtlTempo->CtlTempoCreate(pCtlTempo, &(pSvcXmodem->tempo));	return pSvcComm;}//*----------------------------------------------------------------------------//* Function Name       : AT91F_SvcXmodemRead()//* Object              : Receive an XMODEM file with the USART, update the//*                       linked buffer structure//* Input Parameters    : AT91PS_SvcXmodem, AT91PS_USART2->US_CSR//* Output Parameters   : none//*----------------------------------------------------------------------------AT91S_SvcCommStatus AT91F_SvcXmodemReadHandler(AT91PS_SvcXmodem pSvcXmodem, unsigned int csr){	AT91PS_USART2      pUsart  = pSvcXmodem->pUsart;	AT91PS_Buffer      pBuffer = (AT91PS_Buffer) pSvcXmodem->parent.pBuffer;	char *pData;	unsigned int bufSize;	char c;	if ( (csr & US_RXRDY) ) {		// Stop sending 'C'		pSvcXmodem->tempo.Stop(&(pSvcXmodem->tempo));		pSvcXmodem->isPacketDesc = 1;		pBuffer->GetRdBuffer(pBuffer, &pData, &bufSize);		pSvcXmodem->pData    = pData;		c = at91_usart2_getChar(pUsart);		switch (c) {			case AT91C_XMODEM_STX:				pSvcXmodem->dataSize = AT91C_XMODEM_DATA_SIZE_STX;				at91_usart2_receive_frame (					pUsart,					pSvcXmodem->packetDesc, AT91C_XMODEM_PACKET_SIZE,					pData, AT91C_XMODEM_DATA_SIZE_STX + AT91C_XMODEM_CRC_SIZE);				break;			case AT91C_XMODEM_SOH:				pSvcXmodem->dataSize = AT91C_XMODEM_DATA_SIZE_SOH;				at91_usart2_receive_frame (					pUsart,					pSvcXmodem->packetDesc, AT91C_XMODEM_PACKET_SIZE,					pData, AT91C_XMODEM_DATA_SIZE_SOH + AT91C_XMODEM_CRC_SIZE);				break;			case AT91C_XMODEM_EOT:				at91_usart2_sendChar(pUsart, AT91C_XMODEM_ACK);				at91_usart2_usidr(pUsart, US_RXRDY | US_ENDRX | US_RXBUFF);												if ( (pSvcXmodem->packetId == 1) || bufSize)					pBuffer->FillRdBuffer(pBuffer, bufSize);				pSvcXmodem->eot = 1;				return AT91C_COMMSVC_SUCCESS;			default:				at91_usart2_receive_frame (					pUsart,					pData, AT91C_XMODEM_PACKET_SIZE + AT91C_XMODEM_DATA_SIZE_SOH + AT91C_XMODEM_CRC_SIZE,					0, 0);				at91_usart2_sendChar(pUsart, AT91C_XMODEM_ACK);				break;		}		at91_usart2_usidr(pUsart, US_RXRDY);		at91_usart2_usier(pUsart, US_ENDRX);	}	else if ( (csr & US_ENDRX) || (csr & US_RXBUFF) ) {		if (pSvcXmodem->isPacketDesc) {			pSvcXmodem->packetStatus = pSvcXmodem->CheckHeader(pSvcXmodem->packetId, pSvcXmodem->packetDesc);			pSvcXmodem->isPacketDesc = 0;			at91_usart2_usidr(pUsart, US_ENDRX);			at91_usart2_usier(pUsart, US_RXBUFF);		}		else {			if (pSvcXmodem->packetStatus && pSvcXmodem->CheckData(pSvcXmodem)) {				pBuffer->FillRdBuffer(pBuffer, pSvcXmodem->dataSize);				at91_usart2_sendChar(pUsart, AT91C_XMODEM_ACK);				++(pSvcXmodem->packetId);			}			else				at91_usart2_sendChar(pUsart, AT91C_XMODEM_NAK);			at91_usart2_usidr(pUsart, US_ENDRX | US_RXBUFF);			at91_usart2_usier(pUsart, US_RXRDY);		}	}	return AT91C_COMMSVC_SUCCESS;}//*----------------------------------------------------------------------------//* Function Name       : AT91F_SvcXmodemWrite()//* Object              : Receive an XMODEM file with the USART, update the//*                       linked buffer structure//* Input Parameters    : AT91PS_SvcXmodem, AT91PS_USART2->US_CSR//* Output Parameters   : none//*----------------------------------------------------------------------------AT91S_SvcCommStatus AT91F_SvcXmodemWriteHandler(AT91PS_SvcXmodem pSvcXmodem, unsigned int csr){	AT91PS_USART2      pUsart  = pSvcXmodem->pUsart;	AT91PS_Buffer      pBuffer = (AT91PS_Buffer) pSvcXmodem->parent.pBuffer;	char const *pData;	unsigned int bufSize;	unsigned short crc;	if ( (csr & US_RXRDY) ) {		pBuffer->GetWrBuffer(pBuffer, &pData, &bufSize);		switch ( at91_usart2_getChar(pUsart) ) {		case 'C':			pSvcXmodem->packetId = 1; // Current packet			if (bufSize == 0)				pBuffer->EmptyWrBuffer(pBuffer, 0);			break;		case AT91C_XMODEM_ACK:			// Previous block has been received correctly			if ( !(pSvcXmodem->eot) ) {				pBuffer->EmptyWrBuffer(pBuffer, AT91C_XMODEM_DATA_SIZE_SOH);				bufSize = 0;			}			++(pSvcXmodem->packetId);			break;		case AT91C_XMODEM_NAK:			// Previous block must be resent			break;		default:			break;		}		if (bufSize == 0) {			at91_usart2_usidr(pUsart, US_ENDRX | US_ENDTX | US_TXRDY);			at91_usart2_sendChar(pUsart, AT91C_XMODEM_EOT);			pSvcXmodem->eot = 1;		}		else {			pSvcXmodem->pData = (char *) pData;			pSvcXmodem->eot           = 0;			at91_usart2_sendChar(pUsart, AT91C_XMODEM_SOH);			at91_usart2_usier(pUsart, US_TXRDY);		}	}	else if ( (csr & US_TXRDY) ) {		pSvcXmodem->packetDesc[0] = pSvcXmodem->packetId;		pSvcXmodem->packetDesc[1] = ~(pSvcXmodem->packetId);		at91_usart2_send_frame (			pUsart,			pSvcXmodem->packetDesc, AT91C_XMODEM_PACKET_SIZE,			pSvcXmodem->pData,      AT91C_XMODEM_DATA_SIZE_SOH);		at91_usart2_usidr(pUsart, US_TXRDY);		at91_usart2_usier(pUsart, US_ENDTX);	}	else if ( (csr & US_ENDTX) ) {		crc = pSvcXmodem->GetCrc(pSvcXmodem->pData, AT91C_XMODEM_DATA_SIZE_SOH);		crc = ((crc & 0xff00) >> 8) | ((crc & 0x00ff) << 8 );		at91_usart2_send_frame (			pUsart,			(char *) &crc, AT91C_XMODEM_CRC_SIZE,			(char *) 0,0);		at91_usart2_usidr(pUsart, US_ENDTX);	}	return AT91C_COMMSVC_SUCCESS;}//*----------------------------------------------------------------------------//* Function Name       : AT91F_SvcUdpStartTx()//* Object              ://* Input Parameters    : AT91PS_SvcComm//* Output Parameters   : none//*----------------------------------------------------------------------------AT91S_SvcCommStatus AT91F_SvcXmodemStartTx(AT91PS_SvcComm pSvcComm){	AT91PS_SvcXmodem   pSvcXmodem = (AT91PS_SvcXmodem) pSvcComm->pChild;	AT91PS_USART2      pUsart     = pSvcXmodem->pUsart;	pSvcXmodem->Handler = pSvcXmodem->WriteHandler;	at91_usart2_usier(pUsart, US_RXRDY);	return AT91C_COMMSVC_SUCCESS;}//*----------------------------------------------------------------------------//* Function Name       : AT91F_SvcUdpStoptTx()//* Object              ://* Input Parameters    : AT91PS_SvcComm//* Output Parameters   : none//*----------------------------------------------------------------------------AT91S_SvcCommStatus AT91F_SvcXmodemStopTx(AT91PS_SvcComm pSvcComm){	return AT91C_COMMSVC_SUCCESS;}//*----------------------------------------------------------------------------//* Function Name       : AT91F_SvcXmodemSendC()//* Object              ://* Input Parameters    : AT91PS_SvcComm//* Output Parameters   : none//*----------------------------------------------------------------------------void AT91F_SvcXmodemSendC(AT91S_TempoStatus status, void *pVoid){		AT91PS_USART2 pUsart = (AT91PS_USART2) pVoid;		at91_usart2_sendChar(pUsart, 'C');}//*----------------------------------------------------------------------------//* Function Name       : AT91F_SvcXmodemStartRx()//* Object              ://* Input Parameters    : AT91PS_SvcComm//* Output Parameters   : none//*----------------------------------------------------------------------------AT91S_SvcCommStatus AT91F_SvcXmodemStartRx(AT91PS_SvcComm pSvcComm){	AT91PS_SvcXmodem   pSvcXmodem = (AT91PS_SvcXmodem) pSvcComm->pChild;	AT91PS_USART2      pUsart     = pSvcXmodem->pUsart;	pSvcXmodem->Handler = pSvcXmodem->ReadHandler;	pSvcXmodem->packetId     = 1; // Current packet	pSvcXmodem->eot          = 0; // end of transmition	pSvcXmodem->isPacketDesc = 0;	at91_usart2_usier(pUsart, US_RXRDY);	at91_usart2_usidr(pUsart, US_ENDRX | US_ENDTX | US_TXRDY);		pSvcXmodem->tempo.Start(&(pSvcXmodem->tempo), 1000, 1000, AT91F_SvcXmodemSendC, pUsart);//	pSvcXmodem->tempo.Start(&(pSvcXmodem->tempo), 5, 5, AT91F_SvcXmodemSendC, pUsart);	return AT91C_COMMSVC_SUCCESS;}//*----------------------------------------------------------------------------//* Function Name       : AT91F_SvcUdpStoptRx()//* Object              ://* Input Parameters    : AT91PS_SvcComm//* Output Parameters   : none//*----------------------------------------------------------------------------AT91S_SvcCommStatus AT91F_SvcXmodemStopRx(AT91PS_SvcComm pSvcComm){	return AT91C_COMMSVC_SUCCESS;}//*----------------------------------------------------------------------------//* Function Name       : AT91F_UdpTxReady()//* Object              : Return the status of the USB//* Input Parameters    ://* Output Parameters   : none//*----------------------------------------------------------------------------char AT91F_SvcXmodemTxReady(AT91PS_SvcComm pSvcComm){	AT91PS_SvcXmodem   pSvcXmodem = (AT91PS_SvcXmodem) pSvcComm->pChild;	AT91PS_USART2      pUsart     = pSvcXmodem->pUsart;	return (AT91F_US_CSR(pUsart) & US_TXRDY);}//*----------------------------------------------------------------------------//* Function Name       : AT91F_UdpRxReady()//* Object              : Return the status of the USB//* Input Parameters    ://* Output Parameters   : none//*----------------------------------------------------------------------------char AT91F_SvcXmodemRxReady(AT91PS_SvcComm pSvcComm){	AT91PS_SvcXmodem   pSvcXmodem = (AT91PS_SvcXmodem) pSvcComm->pChild;	AT91PS_USART2      pUsart     = pSvcXmodem->pUsart;	return (AT91F_US_CSR(pUsart) & US_RXRDY);}

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
欧美精品一区二区三| 久久久夜色精品亚洲| 欧美日韩小视频| 日韩欧美一二三区| 国产精品护士白丝一区av| 亚洲免费观看高清完整版在线观看熊| 亚洲成人激情自拍| 国产精品亚洲午夜一区二区三区| 色综合天天综合色综合av| 26uuu精品一区二区在线观看| 亚洲国产成人tv| 国产不卡视频在线观看| 日韩一区二区三区四区| 一区二区三区四区精品在线视频| 国产伦精品一区二区三区在线观看| 精品视频一区 二区 三区| 亚洲欧洲另类国产综合| 久草热8精品视频在线观看| 欧美三级日韩三级| 亚洲欧美怡红院| 国产成人aaa| 久久久不卡网国产精品二区| 日本最新不卡在线| 欧美老肥妇做.爰bbww视频| 亚洲美女一区二区三区| 97精品电影院| 日韩理论片网站| 成人国产精品免费观看视频| 久久精品一区蜜桃臀影院| 麻豆91精品视频| 欧美成人一区二区三区片免费| 免费xxxx性欧美18vr| 91精品国产一区二区三区| 日韩精品国产欧美| 欧美喷水一区二区| 性欧美疯狂xxxxbbbb| 欧美挠脚心视频网站| 日欧美一区二区| 欧美一级片在线看| 精品一区二区三区在线播放| 69av一区二区三区| 欧美a级一区二区| 亚洲精品一区二区三区福利| 国模套图日韩精品一区二区 | 五月天国产精品| 欧美美女一区二区| 奇米一区二区三区av| 欧美sm美女调教| 粉嫩av亚洲一区二区图片| 中文字幕在线一区免费| 色素色在线综合| 五月婷婷综合在线| 精品日韩99亚洲| a亚洲天堂av| 亚洲一本大道在线| 91精品国产综合久久久久久| 激情国产一区二区| 国产精品欧美综合在线| 91麻豆视频网站| 日韩高清欧美激情| 久久精品男人的天堂| 白白色 亚洲乱淫| 午夜激情一区二区三区| 精品盗摄一区二区三区| 99精品视频在线观看| 天天av天天翘天天综合网色鬼国产 | 国产99一区视频免费| 亚洲欧洲精品一区二区三区不卡| 欧美在线观看一二区| 麻豆久久久久久| 亚洲精品综合在线| 日韩三级视频中文字幕| 99综合电影在线视频| 视频一区欧美日韩| 国产精品人成在线观看免费| 欧美日韩精品一区二区三区| 成人免费毛片高清视频| 日韩综合在线视频| 亚洲视频精选在线| 精品日产卡一卡二卡麻豆| 91国偷自产一区二区开放时间| 极品少妇一区二区三区精品视频| 亚洲摸摸操操av| 久久久久国产精品麻豆| 欧美日韩亚洲综合在线| 成人深夜视频在线观看| 青青草视频一区| 亚洲一区二区三区免费视频| 国产欧美精品一区| 欧美一区二区免费视频| 91片黄在线观看| 国产69精品一区二区亚洲孕妇| 舔着乳尖日韩一区| 亚洲男同性恋视频| 久久久久久久久久美女| 欧美一区午夜视频在线观看| 日本丰满少妇一区二区三区| 国产传媒一区在线| 国内精品嫩模私拍在线| 日本免费新一区视频| 亚洲国产日韩a在线播放性色| 国产精品成人一区二区艾草| 国产亚洲欧美一级| 日韩三级av在线播放| 欧美老女人在线| 麻豆精品一二三| 亚洲理论在线观看| 亚洲特黄一级片| 国产精品麻豆一区二区 | 紧缚捆绑精品一区二区| 日韩高清在线一区| 亚洲成av人片www| 亚洲伊人伊色伊影伊综合网| 亚洲人成7777| 中文字幕视频一区二区三区久| 欧美激情一区三区| 久久九九国产精品| 欧美激情一区在线| 国产精品每日更新| 中文字幕亚洲一区二区av在线| 成人欧美一区二区三区在线播放| 亚洲欧美中日韩| 亚洲欧美韩国综合色| 一区二区三区在线观看视频| 亚洲一二三四在线| 日韩精品1区2区3区| 日本午夜精品视频在线观看| 久久精品国产久精国产爱| 久久精品免费观看| 国产一区二区看久久| 国产精品亚洲成人| 成人黄色片在线观看| 91香蕉视频mp4| 欧美日韩一区二区电影| 欧美一区二区三区啪啪| www亚洲一区| 国产精品美女久久久久aⅴ国产馆| 亚洲视频 欧洲视频| 亚洲成人在线网站| 久久国产免费看| 不卡的av在线| 欧美少妇性性性| 精品欧美一区二区久久| 国产精品三级久久久久三级| 亚洲免费在线观看视频| 婷婷亚洲久悠悠色悠在线播放| 激情五月婷婷综合| 99re亚洲国产精品| 欧美日韩一区二区三区四区五区 | 欧美一级生活片| 亚洲国产高清在线| 亚洲一二三四区不卡| 国产真实精品久久二三区| 99久久综合99久久综合网站| 欧美一区永久视频免费观看| 亚洲国产精品99久久久久久久久| 亚洲综合成人网| 国产乱妇无码大片在线观看| 欧洲亚洲精品在线| 精品毛片乱码1区2区3区| 中文字幕在线播放不卡一区| 喷水一区二区三区| 色综合久久66| 国产亚洲精品福利| 首页亚洲欧美制服丝腿| eeuss鲁片一区二区三区在线观看| 欧美日本高清视频在线观看| 亚洲欧美一区二区视频| 久久福利视频一区二区| 欧美日韩免费观看一区二区三区 | 日韩免费视频一区| 国产精品国产自产拍在线| 老司机精品视频导航| 欧美影院一区二区三区| 中文字幕一区二区三| 狠狠狠色丁香婷婷综合激情| 欧美美女视频在线观看| 亚洲欧美另类久久久精品| 国产福利一区二区三区| 日韩片之四级片| 丝袜美腿亚洲一区| 91久久精品一区二区| 国产欧美日本一区视频| 久久国产夜色精品鲁鲁99| 欧美日韩成人综合在线一区二区 | 国产精品美女久久久久aⅴ国产馆| 老司机午夜精品| 欧美一区二区三区男人的天堂| 亚洲一区二区三区四区中文字幕| av成人老司机| 国产精品日日摸夜夜摸av| 国产精品资源网| 精品国偷自产国产一区| 全国精品久久少妇| 欧美精品久久一区二区三区| 亚洲成人免费视| 精品视频一区二区三区免费| 亚洲高清免费观看 | 亚洲一区二区三区四区五区中文| 91免费版在线|