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

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

?? zlg500commu.c

?? SmartARM2400系列開(kāi)發(fā)板全套資料
?? C
字號(hào):
#include <string.h>
#include "zlg500Commu.h"
#include "UART0.h"
#include "zlg500.h"

// zlg500模塊的I2C地址
#define I2C_ADDR	0xB2


// 通信幀各字段在幀內(nèi)的位置(以字節(jié)為單位)
enum FrameFieldPosition
{
	FFP_FRAME_LEN	= 0,	// 整個(gè)幀數(shù)據(jù)的總長(zhǎng)度
	FFP_CMD_TYPE	= 1,	// 命令類型,與幀號(hào)位于同一字節(jié),占用低4位
	FFP_SEQ			= 1,	// 幀號(hào),與命令類型位于同一字節(jié),占用高4位
	FFP_CMD_CODE	= 2,	// 命令碼,主機(jī)發(fā)送時(shí)為命令字段
	FFP_STATUS		= 2,	// 狀態(tài)碼,從機(jī)回應(yīng)幀為狀態(tài)字段
	FFP_INFO_LEN	= 3,	// 信息長(zhǎng)度
	FFP_INFO		= 4,	// 信息
	FFP_BCC			= 4,	// 校驗(yàn)碼,當(dāng)幀內(nèi)沒(méi)有信息字段時(shí)的位置
	FFP_FRAME_END	= 5		// 幀結(jié)束,當(dāng)幀內(nèi)沒(méi)有信息字段時(shí)的位置
};
#define PROTOCOL_LEN	6	// 除信息字段外幀協(xié)議各部分的總長(zhǎng)度

#define STX     0x20	// 開(kāi)始符
#define ETX     0x03	// 結(jié)束符
#define ACK		0x06	// 應(yīng)答
#define NAK		0x15	// 無(wú)應(yīng)答


static uint8 g_SEQ = 0;	// 幀號(hào)


// 設(shè)置波特率
static uint8 SetBaudrate()
{
	int i, j;
	uint8 nData;

	for (i = 0; i < 3; i++)
	{
		// 發(fā)送一個(gè)開(kāi)始符,隔至少60us后再發(fā)送一個(gè),最后看是否能
		// 接收到應(yīng)答字符,如能模塊的波特率即同步成功,否則失敗。
		nData = STX;
		UART0_Send(&nData, 1);
				
		for (j = 2000; j > 0; j--);	// 延時(shí)至少60us
		
		UART0_Send(&nData, 1);
		
		if (UART0_Receive(&nData, sizeof(nData)) != 0 || nData == ACK)
		{
			return TRUE;
		}
		else
		{
			continue;
		}
	}
	
	return FALSE;
}

// 計(jì)算校驗(yàn)碼,對(duì)各數(shù)據(jù)異或,最后取反
uint8 CheckSum(const void *pData, uint8 nDataLen)
{
	const uint8 *_pData = (const uint8 *) pData;
	
	uint8 nCheckSum = 0;	// 校驗(yàn)碼
	while (nDataLen-- > 0)
	{
		nCheckSum ^= *_pData++;
	}
	
	return ~nCheckSum;
}

// 初始化與ZLG500模塊的通信
uint8 ZLG500_COM_Init(void)
{
	// 初始化UART通信
	UART0_Init(BAUDRATE, UART_DEFAULT_CFG);
	
	// 設(shè)置ZLG500模塊的波特率
	return SetBaudrate();
}

// 發(fā)送數(shù)據(jù)到ZLG500模塊
BOOL ZLG500_COM_Send(uint8 nCommType, uint8 nCommCode, const void *pInfo, uint8 nInfoLen)
{
	uint8 SendBuf[40];	// 發(fā)送緩沖區(qū)
	
	if (nInfoLen + PROTOCOL_LEN > sizeof(SendBuf))
	{
		return FALSE;
	}

	// 幀號(hào)在0~15范圍內(nèi)循環(huán)加1
	if (++g_SEQ > 15)
	{
		g_SEQ = 0;
	}
	
	// 組裝數(shù)據(jù)
	SendBuf[FFP_FRAME_LEN]	= nInfoLen + PROTOCOL_LEN;								// 幀長(zhǎng)
	SendBuf[FFP_SEQ]		= (g_SEQ << 4) | nCommType;								// 幀號(hào)(高4位)/ 命令類型(低4位)
	SendBuf[FFP_CMD_CODE]	= nCommCode;											// 命令碼
	SendBuf[FFP_INFO_LEN]	= nInfoLen;												// 信息長(zhǎng)度
	memcpy(&SendBuf[FFP_INFO], pInfo, nInfoLen);									// 信息
	SendBuf[FFP_BCC + nInfoLen] = CheckSum(SendBuf, SendBuf[FFP_FRAME_LEN] - 2);	// 校驗(yàn)碼
	SendBuf[FFP_FRAME_END + nInfoLen] = ETX;
	
	// 發(fā)送數(shù)據(jù)
	UART0_Send(SendBuf, SendBuf[FFP_FRAME_LEN]);
	
	return TRUE;
}

// 從ZLG500模塊接收數(shù)據(jù)
BOOL ZLG500_COM_Receive(uint8 *pCommType, uint8 *pStatus, void *pInfoBuf, uint8 nBufSize, uint8 *pRecvInfoLen)
{
	uint8 ReceiveBuf[40];		// 接收緩沖區(qū)
	
	// 接收數(shù)據(jù)
	uint32 nRecvLen = UART0_Receive(ReceiveBuf, sizeof(ReceiveBuf));
	
	// 檢驗(yàn)各字段的合法性
	// 檢驗(yàn)總數(shù)據(jù)長(zhǎng)度
	if (nRecvLen < PROTOCOL_LEN)
	{
		return FALSE;
	}
	
	// 檢驗(yàn)幀數(shù)據(jù)長(zhǎng)度
	if (ReceiveBuf[FFP_FRAME_LEN] != nRecvLen)
	{
		return FALSE;
	}
	
	// 檢驗(yàn)幀信息長(zhǎng)度
	if (ReceiveBuf[FFP_INFO_LEN] != nRecvLen - PROTOCOL_LEN)
	{
		return FALSE;
	}
	
	// 檢驗(yàn)幀結(jié)束符
	if (ReceiveBuf[nRecvLen - 1] != ETX)
	{
		return FALSE;
	}
	
	// 檢驗(yàn)幀號(hào)
	if ((ReceiveBuf[FFP_SEQ] >> 4) != g_SEQ)
	{
		return FALSE;
	}
	
	// 檢驗(yàn)校驗(yàn)碼
	if (ReceiveBuf[FFP_BCC + ReceiveBuf[FFP_INFO_LEN]] != CheckSum(ReceiveBuf, ReceiveBuf[FFP_FRAME_LEN] - 2))
	{
		return FALSE;
	}
	
	// 檢驗(yàn)信息緩沖區(qū)是否足夠大
	if (nBufSize < ReceiveBuf[FFP_INFO_LEN])
	{
		return FALSE;
	}
	
	// 解裝數(shù)據(jù)
	*pCommType	= ReceiveBuf[FFP_CMD_TYPE] & 0x0F;							// 命令類型
	*pStatus	= ReceiveBuf[FFP_CMD_CODE];									// 狀態(tài)碼
	memcpy(pInfoBuf, &ReceiveBuf[FFP_INFO], ReceiveBuf[FFP_INFO_LEN]);		// 信息
	*pRecvInfoLen = ReceiveBuf[FFP_INFO_LEN];								// 信息長(zhǎng)度
	
	return TRUE;
}

//	發(fā)送命令并接收回應(yīng),此函數(shù)是ZLG500_COM_Send()和ZLG500_COM_Receive()兩函數(shù)的結(jié)合。
uint8 ZLG500_COM_SendReceive(uint8 nCommType, uint8 nCommCode, 
							 const void *pSendInfo, uint8 nSendInfoLen, 
							 void *pRecvInfoBuf, uint8 nRecvInfoBufLen)
{
	uint8 bResult;
	uint8 nStatus;
	uint8 nReceiveLen;
	
	ZLG500_COM_Send(nCommType, nCommCode, pSendInfo, nSendInfoLen);	
	bResult = ZLG500_COM_Receive(&nCommType, &nStatus, pRecvInfoBuf, nRecvInfoBufLen, &nReceiveLen);
	if (!bResult)
	{
		return COMM_ERR;
	}
	else
	{
		return nStatus;
	}
}

?? 快捷鍵說(shuō)明

復(fù)制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號(hào) Ctrl + =
減小字號(hào) Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
国产女主播一区| 日本vs亚洲vs韩国一区三区| 欧美mv日韩mv亚洲| 欧美在线影院一区二区| 91亚洲国产成人精品一区二区三 | 国产情人综合久久777777| 欧美精品日韩一区| 91精品国产综合久久久久久久 | 国产精品免费看片| 国产精品白丝在线| 亚洲色图.com| 亚洲国产综合人成综合网站| 亚洲一区在线观看免费| 午夜日韩在线观看| 免费观看日韩电影| 国产精品综合二区| 99国产精品99久久久久久| 99re热这里只有精品免费视频 | 麻豆成人91精品二区三区| 麻豆精品在线播放| 国产福利91精品一区| 白白色 亚洲乱淫| 欧美在线色视频| 精品国产乱码久久久久久蜜臀| 久久色.com| 日韩美女久久久| 日韩精品电影一区亚洲| 国产精品夜夜嗨| 91影视在线播放| 欧美日韩国产色站一区二区三区| 91麻豆精品国产综合久久久久久 | 欧美一区二区三区在线电影| 日韩一区二区免费在线电影| 国产日韩欧美高清| 亚洲 欧美综合在线网络| 麻豆精品一区二区av白丝在线| 丁香啪啪综合成人亚洲小说| 在线国产亚洲欧美| 久久亚洲综合色| 亚洲444eee在线观看| 成人久久18免费网站麻豆 | 欧美日韩国产小视频| 欧美一卡2卡三卡4卡5免费| 日本一区二区在线不卡| 日韩国产精品大片| 91美女在线观看| 精品免费一区二区三区| 亚洲精品国产成人久久av盗摄| 裸体歌舞表演一区二区| 91视频观看视频| 久久精品一二三| 欧美aaaaaa午夜精品| 91成人看片片| 中文字幕一区av| 国产精品一区二区久激情瑜伽| 国产精品99久久久久久有的能看| 一本在线高清不卡dvd| 久久久另类综合| 欧美日韩亚洲丝袜制服| 91社区在线播放| 国产精品不卡视频| 国产成人在线看| 久久精品国产99| 国产一区二区三区黄视频| jizzjizzjizz欧美| 欧美福利视频导航| 正在播放一区二区| 国产成人午夜视频| 亚洲国产精品一区二区www| 欧美日韩国产一级| 成人性生交大合| 婷婷丁香激情综合| 国产日韩精品视频一区| 欧美色中文字幕| 国产91在线|亚洲| 亚洲不卡一区二区三区| 国产午夜亚洲精品理论片色戒 | 91麻豆精品91久久久久久清纯| 激情久久久久久久久久久久久久久久| 国产精品久久久久桃色tv| 欧美日韩国产在线观看| 成人免费毛片高清视频| 日本三级韩国三级欧美三级| 《视频一区视频二区| 久久视频一区二区| 日韩一区和二区| 欧洲国内综合视频| 成人白浆超碰人人人人| 精品在线观看免费| 亚洲成av人片在线观看| 中文字幕亚洲在| 亚洲国产精品av| 精品国产伦一区二区三区免费| 99久久久精品免费观看国产蜜| 久久99国产精品久久99 | 国产精品天天摸av网| 欧美一区二区高清| 欧美三级日韩三级国产三级| 成人av影视在线观看| 国产精品亚洲午夜一区二区三区| 午夜精品福利久久久| 一区二区三区在线播| 高清国产一区二区三区| 国产在线日韩欧美| 亚洲国产另类av| 亚洲特黄一级片| 午夜精品福利一区二区三区av | 懂色av一区二区三区免费看| 日本va欧美va欧美va精品| 亚洲第一会所有码转帖| 亚洲精品一二三区| 亚洲乱码日产精品bd| 中文字幕在线免费不卡| 国产精品第四页| 国产精品二三区| 亚洲色图欧洲色图婷婷| 亚洲人精品一区| 一区二区三区欧美久久| 亚洲精品v日韩精品| 亚洲一区二区三区在线看| 亚洲一区在线观看免费| 婷婷开心激情综合| 日本不卡视频在线观看| 老司机一区二区| 国产麻豆91精品| 成人国产电影网| 在线免费不卡电影| 91精品国产一区二区人妖| 日韩一区二区三区四区| 精品va天堂亚洲国产| 国产欧美日韩麻豆91| 中文字幕日韩精品一区| 亚洲一区二区视频| 五月天久久比比资源色| 久久机这里只有精品| 国产suv一区二区三区88区| 岛国精品一区二区| 欧美私模裸体表演在线观看| 51精品秘密在线观看| 2017欧美狠狠色| 亚洲欧美综合色| 午夜电影网一区| 国产精品99久久久| av电影一区二区| 欧美老年两性高潮| 久久综合九色综合97婷婷女人| 久久久精品一品道一区| 亚洲国产成人私人影院tom| 亚洲综合免费观看高清在线观看| 免费观看30秒视频久久| 不卡的av在线播放| 欧美精品vⅰdeose4hd| 国产三级一区二区三区| 一区二区成人在线观看| 国内外成人在线| 在线看国产一区二区| 精品国精品自拍自在线| 亚洲综合区在线| 成人午夜免费视频| 91麻豆精品91久久久久久清纯 | 精品免费日韩av| 亚洲综合丝袜美腿| 国产精品91xxx| 欧美日韩亚洲综合在线| 久久一日本道色综合| 成人在线一区二区三区| 欧美一级淫片007| 成人av免费观看| 8v天堂国产在线一区二区| 国产精品入口麻豆九色| 免费在线成人网| 欧美主播一区二区三区| 欧美极品少妇xxxxⅹ高跟鞋 | 欧美午夜精品久久久久久孕妇| 精品日韩一区二区三区| 亚洲综合成人在线| 不卡影院免费观看| 久久亚区不卡日本| 免费久久精品视频| 欧美绝品在线观看成人午夜影视| 国产精品午夜久久| 国产精品自拍一区| 欧美成人精品高清在线播放| 午夜激情一区二区三区| 欧美中文字幕一区| 亚洲精品水蜜桃| 99re热这里只有精品视频| 中文字幕国产精品一区二区| 久久99精品久久久久久久久久久久| 日本精品一区二区三区四区的功能| 久久久久久免费网| 精品制服美女丁香| 日韩一区二区三区在线观看 | 91精品一区二区三区久久久久久| 亚洲视频免费看| 91亚洲资源网| 亚洲乱码日产精品bd| 欧洲精品一区二区三区在线观看| 亚洲精品中文在线观看| 色视频一区二区|