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

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

?? upsd3300_i2c.c

?? 51單片機I2C源代碼
?? C
?? 第 1 頁 / 共 2 頁
字號:
/*------------------------------------------------------------------------upsd3300_i2c.cVersion:October 15, 2004 Version 2.0 - Comments and include file name updates.May      2004 Version 0.4 - upsd_i2c_init() function further revised.April    2004 Version 0.3 - Comments revised.  upsd_i2c_init() functionupdated. Various other changes made.February 2004 Version 0.2 - Initial ReleaseDependencies:FREQ_OSC (from upsd3300_hardware.h) - used in the calculation thatdetermines the prescaler setting for the I2C bus frequncy.Description:The uPSD I2C device driver is intended to provide a standard interrupt I/Oset of functions for the I2C unit inside the uPSD 3300 MCU.  See thefunctions below for their respective descriptions.Copyright (c) 2004 ST MicroelectronicsThis example demo code is provided as is and has no warranty,implied or otherwise.  You are free to use/modify any of the providedcode at your own risk in your applications with the expressed limitationof liability (see below) so long as your product using the code containsat least one uPSD product (device).LIMITATION OF LIABILITY:   NEITHER STMicroelectronics NOR ITS VENDORS OR AGENTS SHALL BE LIABLE FOR ANY LOSS OF PROFITS, LOSS OF USE, LOSS OF DATA,INTERRUPTION OF BUSINESS, NOR FOR INDIRECT, SPECIAL, INCIDENTAL ORCONSEQUENTIAL DAMAGES OF ANY KIND WHETHER UNDER THIS AGREEMENT OROTHERWISE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGES.-------------------------------------------------------------------------*/#pragma CODE											#include "upsd3300.h"#include "upsd3300_hardware.h"#include "upsd3300_i2c.h"/*-------------------------------------------------------------------------Declaration of local variables-------------------------------------------------------------------------*/unsigned char* i2c_xmit_buf;						// Message transmit buffer address pointerunsigned char* i2c_rcv_buf;							// Message receive buffer address pointerunsigned char dummybyte;							// Dummy byte static unsigned char i2c_data_len,i2c_data_index;	// The length and pointer of data buffer bit i2c_master, i2c_xmitr;							// Callable status flag bits													// Indicate the status of I2C device, Master 													//  or slave, Transmit or receivebit	i2c_slave_addressed;							// Indicate if the slave has been addressedunsigned char i2c_state;   							// The current state of I2C operationunsigned char i2c_sta;								// Used to store the content of register S1STA													//   when I2C device enter into ISR.													// Temporary value of S1STA in ISR.static unsigned int toggle;/*-------------------------------------------------------------------------upsd_i2c_Timeout(operation, Max_time)This function is used to indicate if the current I2C operation timed out.operation 	- unsigned char 				- current I2C operation (I2C_MX/I2C_MR/I2C_SX/I2C_SR).Max_time	- unsigned int				- the wait time.Returns:0:	Did not time out1:	Timed out -------------------------------------------------------------------------*/unsigned char upsd_i2c_Timeout(unsigned char operation,unsigned int Max_time){	toggle=0;	while(i2c_state==operation)	{	  toggle++;	  if(toggle>=Max_time){	  return (1);}	}	return (0);}/*-------------------------------------------------------------------------char upsd_i2c_init (Bus_Freq, Slave_Addr)This function is used to initialize the I2C port including the specified bus frequency and slave address.  This function must be called before using theI2C driver functions.Slave_Addr 	- unsigned char 				- I2C port slave addressBus_Freq	- unsigned int				- I2C bus frequency (KHz).Returns:0:	Initialization successful 1:	Input argument error-------------------------------------------------------------------------*/unsigned char upsd_i2c_init (unsigned int Bus_Freq,					         unsigned char Slave_Addr){    // The following table is mid points of the I2C divisor so that rounding will occur    unsigned int code table[10] = {20,27,45,90,180,360,720,1440,0xffff};    unsigned char prescaler;	unsigned int MCU_Freq_mem, divider, mhz, ns_clk, holdtime, no_clks;	if ((Bus_Freq > 833) || (Bus_Freq < 6))  return (1);    // Bad Requested range    MCU_Freq_mem = (unsigned int) FREQ_OSC;			      	// Caclualte divider needed	MCU_Freq_mem = MCU_Freq_mem >> 1;						// Divide Freq_osc by 2	divider =  MCU_Freq_mem / Bus_Freq;			         prescaler = 0;    while (divider > table[prescaler]) prescaler++;  	// Use table to calc best fit prescaler    if (prescaler > 7) return(1);						// Past max range - bad bus freq	if (prescaler >= 4) prescaler = (prescaler-4)+0x80;	// fix bit positions for S1CON	S1CON = prescaler;					// set I2C prescaler for specified bus freq	P3SFS |= 0xC0;						// Enable P3.7 for SCL, P3.6 for SDA	// Calcualte S1SETUP time based on Bus_Freq and FREQ_OSC    mhz = FREQ_OSC / 1000;  					// get Mhz number - compile time constant	ns_clk = (unsigned int) 1000 / mhz; 		// Calc ns per clock period    if (Bus_Freq <= 100) holdtime = 4000;    	// Use 4us Spec for slow I2C    else if (Bus_Freq <= 400) holdtime = 600;  	// Use 600ns Spec for Fast I2C     else holdtime = 160;                        // Use 160ns Spec for high speec I2C	no_clks = holdtime / ns_clk; 				// Calc the number of clocks needed for hold time    if (no_clks > 127) no_clks = 127;			// Satuarate to max number of clocks	S1SETUP = (unsigned char) no_clks | 0x80;	// set start and stop detection time 	IPA |= 0x02;						// set high priority for I2C interrupt	IEA |= 0x02;						// set I2C interrupt Enable bit	S1ADR = Slave_Addr;					// set up i2c slave address	S1CON |= AA;		     			// set Enable Acknowledge bit		return(0);}/*-------------------------------------------------------------------------upsd_i2c_Master_Xmit (Slave_Addr, Data_Ptr,N)This function is used to transmit a specified amount of data to a slavewhile in Master mode.Slave_Addr 	- unsigned char 				- slave address of I2C device.Data_Ptr	- unsigned char*			- pointer to transimt bufferN			- unsigned char			- the length of data to be transmited 			Returns:I2C_MX_END		4			//Master Mode - transmission completeI2C_TIME_OUT	9			//I2C Timed OutI2C_NACK		13			//I2C NACK (No Acknowledge)I2C_BUSLOST		14			//I2C bus lost-------------------------------------------------------------------------*/unsigned char upsd_i2c_Master_Xmit (unsigned char Slave_Addr, 							unsigned char* Data_Ptr,							unsigned char N){	EA=0;	S1CON|=ENI;	S1DAT = Slave_Addr;					// Transmit I2C slave address	S1CON &= ~STO;						// Clr STO in S1CON	S1CON |= STA;						// Set STA (Send start bit)	S1CON &= ~AA;						// Clr AA in S1CON		i2c_data_index=0;	i2c_state=I2C_MX;					// Set up I2C current state I2C_MX.	i2c_xmit_buf=Data_Ptr;			    // Initialize data point of transmit buffer	i2c_data_len=N;	     				// Initialize length of data to be transmitted	i2c_master = 1;	i2c_xmitr = 1;						// Set up for master transmitter	EA=1;	if(upsd_i2c_Timeout(I2C_MX,10000)==1){		S1CON&=~STA;		S1CON&=~ENI;S1CON|=ENI;		i2c_state=I2C_TIME_OUT;		return (i2c_state);	}					   				// I2C master transmit timed out	else {		return(i2c_state);	} 									// Return I2C current state}									     /*-------------------------------------------------------------------------upsd_i2c_Master_Recv (Slave_Addr,Data_Ptr,N)This function is used to receive a specified length of data from a slave,while in Master mode.Slave_Addr 	- unsigned char 				- slave address of I2C device.Data_Ptr	- unsigned char*			- address pointer of receive bufferN			- unsigned char			- length of the receive data buffer. Returns:I2C_MR_END		8			////Master Mode - reception completeI2C_TIME_OUT	9			//I2C Timed OutI2C_NACK		13			//I2C NACK (No Acknowledge)I2C_BUSLOST		14			//I2C bus lost-------------------------------------------------------------------------*/unsigned char upsd_i2c_Master_Recv (unsigned char Slave_Addr, 							unsigned char* Data_Ptr,							unsigned char N){	EA=0;	S1CON|=ENI;	S1DAT = (Slave_Addr | 0x01);		// Set up I2C address (set R/W bit)	S1CON &= ~STO;						// Clr STO in S1CON	S1CON |= STA;						// Set STA (Send start bit)	S1CON &= ~AA;						// Clr AA in S1CON	i2c_data_index=0;	i2c_state=I2C_MR;	i2c_rcv_buf= Data_Ptr;			    // Initialize address pointer of receive buffer	i2c_data_len=N;	     				// Length of the receive data buffer	i2c_master = 1;	i2c_xmitr = 0;						// Set up for master mode, receive data	EA=1;	if(upsd_i2c_Timeout(I2C_MR,10000)==1){		S1CON&=~STA;		S1CON&=~ENI;S1CON|=ENI;

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
精品对白一区国产伦| 亚洲综合精品自拍| 亚洲精品一二三| 麻豆精品国产传媒mv男同| 成人ar影院免费观看视频| 欧美一区二区播放| 伊人色综合久久天天人手人婷| 免费成人你懂的| 一本大道久久a久久精二百| 久久久久成人黄色影片| 亚洲高清免费在线| 91捆绑美女网站| 久久午夜免费电影| 日本在线不卡视频一二三区| 91丨九色丨黑人外教| 国产亚洲1区2区3区| 日韩高清不卡在线| 欧美亚洲一区二区在线| 一区二区三区蜜桃网| 成人激情图片网| 精品福利一二区| 日韩成人免费电影| 欧美日韩在线精品一区二区三区激情 | 欧美日韩精品一区二区在线播放| 国产欧美日韩在线视频| 国产在线不卡视频| 精品久久久影院| 久久电影网电视剧免费观看| 538在线一区二区精品国产| 亚洲一卡二卡三卡四卡五卡| 在线亚洲人成电影网站色www| 欧美激情在线一区二区| 国产一二三精品| 精品久久国产97色综合| 日本视频免费一区| 欧美性一区二区| 亚洲福中文字幕伊人影院| 欧美日韩一级二级| 偷拍自拍另类欧美| 日韩一级在线观看| 韩国一区二区在线观看| 久久九九全国免费| 国产盗摄视频一区二区三区| 国产精品午夜久久| 成人av网址在线| 一区二区三区免费在线观看| 欧美日韩欧美一区二区| 奇米一区二区三区av| 久久久久久久久久看片| 东方aⅴ免费观看久久av| 国产精品久久久久久久久免费相片 | 亚洲视频一区在线观看| 色婷婷综合五月| 午夜精品久久久久影视| 欧美v日韩v国产v| 成人三级伦理片| 亚洲一区二区三区在线| 这里是久久伊人| 国产麻豆视频精品| 亚洲欧美国产毛片在线| 日韩一级片在线播放| 国产传媒日韩欧美成人| 亚洲免费观看视频| 丁香激情综合国产| 波多野结衣中文字幕一区| 亚洲色图视频免费播放| 欧美精三区欧美精三区| 国产精品一级二级三级| 亚洲午夜国产一区99re久久| 精品福利视频一区二区三区| 一本到高清视频免费精品| 美女网站在线免费欧美精品| 亚洲欧洲另类国产综合| 欧美一二三在线| 91麻豆福利精品推荐| 久久爱www久久做| 亚洲精品成人天堂一二三| 欧美电影免费观看高清完整版在线 | 99riav一区二区三区| 日韩av在线发布| 国产精品毛片久久久久久| 9191久久久久久久久久久| 懂色av一区二区三区蜜臀| 日韩精品久久理论片| 中文字幕免费不卡在线| 69精品人人人人| 99久久婷婷国产综合精品电影 | 欧美一区二区在线看| 粉嫩av亚洲一区二区图片| 奇米一区二区三区| 一区二区三区精品视频| 国产精品久久久一本精品| 精品免费国产二区三区| 欧美男人的天堂一二区| 色综合网站在线| 不卡一区二区三区四区| 精东粉嫩av免费一区二区三区| 亚洲国产精品久久久久婷婷884 | 日韩激情av在线| 亚洲小少妇裸体bbw| 1024亚洲合集| 一区在线观看视频| 国产日韩欧美激情| www成人在线观看| 91精品国产色综合久久ai换脸 | 日韩欧美一级精品久久| 97se亚洲国产综合自在线不卡| 久久免费国产精品| 免费成人你懂的| 五月激情六月综合| 一区二区三区丝袜| 国产精品麻豆欧美日韩ww| 久久久99精品免费观看不卡| 91精品欧美综合在线观看最新| 欧美日韩中字一区| 欧美亚洲综合久久| 欧美偷拍一区二区| 欧美精品一级二级| 欧美精品一二三| 91精品国产综合久久蜜臀| 91麻豆精品国产综合久久久久久| 在线观看不卡一区| 欧美日韩情趣电影| 欧美一级一区二区| 精品免费日韩av| 国产色一区二区| 国产精品电影一区二区三区| 亚洲日穴在线视频| 亚洲国产精品一区二区久久| 亚洲va欧美va人人爽午夜| 奇米精品一区二区三区在线观看一| 日韩中文欧美在线| 精品综合免费视频观看| 国产69精品久久99不卡| 99久久精品99国产精品| 欧美性欧美巨大黑白大战| 欧美变态tickling挠脚心| 欧美成人一区二区| 欧美国产国产综合| 一区二区三区在线观看视频| 日韩精品成人一区二区在线| 激情欧美一区二区三区在线观看| 国产成人av影院| 欧洲日韩一区二区三区| 日韩一级大片在线| 国产精品免费看片| 亚洲一卡二卡三卡四卡无卡久久| 美女mm1313爽爽久久久蜜臀| 成人性生交大片免费看在线播放| 色综合色综合色综合| 91精品欧美久久久久久动漫| 日本一区二区成人在线| 亚洲精品乱码久久久久久久久 | 91小视频在线免费看| 91麻豆精品久久久久蜜臀| 久久久不卡影院| 亚洲午夜三级在线| 国产激情一区二区三区| 欧美在线观看一二区| 精品福利一区二区三区免费视频| 亚洲嫩草精品久久| 国精产品一区一区三区mba桃花 | 国产精品色婷婷| 一区二区三区色| 国产精品综合二区| 欧美综合亚洲图片综合区| 精品国产乱码久久久久久老虎| 亚洲人妖av一区二区| 极品少妇xxxx精品少妇| 欧美午夜精品理论片a级按摩| 日韩女优制服丝袜电影| 亚洲综合无码一区二区| 国产成人综合网站| 3d动漫精品啪啪1区2区免费| 国产精品素人视频| 卡一卡二国产精品| 日本韩国一区二区三区视频| 久久精品夜色噜噜亚洲aⅴ| 日日夜夜精品视频免费| 色婷婷精品久久二区二区蜜臀av| 久久久影视传媒| 精品系列免费在线观看| 欧美顶级少妇做爰| 一区二区三区精品在线| a在线播放不卡| 国产午夜精品在线观看| 奇米影视一区二区三区| 欧美日韩大陆一区二区| 一二三区精品福利视频| 成人综合婷婷国产精品久久| 精品国产伦一区二区三区观看体验 | 国产欧美综合色| 狠狠狠色丁香婷婷综合激情| 日韩一级大片在线观看| 奇米精品一区二区三区在线观看一| 欧洲视频一区二区| 亚洲一区二区在线观看视频 | 国产传媒日韩欧美成人| 久久一留热品黄| 国精产品一区一区三区mba视频|