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

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

?? upsd3300_i2c.c

?? 51單片機(jī)I2C源代碼
?? C
?? 第 1 頁 / 共 2 頁
字號(hào):
/*------------------------------------------------------------------------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;

?? 快捷鍵說明

復(fù)制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號(hào) Ctrl + =
減小字號(hào) Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
丰满少妇在线播放bd日韩电影| 91在线播放网址| 91亚洲精华国产精华精华液| 制服丝袜av成人在线看| 久久久久久一级片| 一区二区三区欧美激情| 韩国欧美国产一区| 欧洲国产伦久久久久久久| 久久综合九色综合欧美98| 亚洲第一福利视频在线| 成人激情午夜影院| 日韩欧美国产午夜精品| 一区二区三区成人| 风间由美一区二区av101| 91精品国产91久久综合桃花| 亚洲欧美日韩成人高清在线一区| 久久精品综合网| 青椒成人免费视频| 欧洲色大大久久| 中文字幕一区不卡| 国产一区二区三区最好精华液| 欧美日韩你懂的| 亚洲视频一二区| 国产成人av影院| 欧美大片国产精品| 午夜影视日本亚洲欧洲精品| 91免费看`日韩一区二区| 亚洲乱码一区二区三区在线观看| 欧美日韩精品一区视频| 国产精品大尺度| 国产精品一区二区黑丝| 精品少妇一区二区三区免费观看| 亚洲主播在线观看| 91免费看`日韩一区二区| 中文字幕永久在线不卡| 国产精品1区二区.| 久久亚洲精华国产精华液| 欧美96一区二区免费视频| 欧美日韩国产在线观看| 亚洲视频一二区| 99国产一区二区三精品乱码| 欧美激情一区二区三区在线| 国产精品资源网| 久久综合av免费| 国产专区欧美精品| 精品999在线播放| 精品一区二区在线播放| 精品毛片乱码1区2区3区| 久久电影国产免费久久电影| 91精品国产综合久久国产大片 | 无码av中文一区二区三区桃花岛| 色综合天天综合网天天狠天天| 日韩一区在线免费观看| 91一区在线观看| 中文字幕日本不卡| 91麻豆高清视频| 玉米视频成人免费看| 欧美中文字幕亚洲一区二区va在线| 亚洲天堂精品视频| 91视频你懂的| 亚洲一区二区三区自拍| 欧美日韩一级二级三级| 婷婷中文字幕一区三区| 日韩一卡二卡三卡| 韩国视频一区二区| 欧美激情资源网| 99re66热这里只有精品3直播| 亚洲欧美另类综合偷拍| 欧美亚一区二区| 视频一区二区三区入口| 日韩一区二区三区av| 国产中文字幕一区| 国产精品美女久久久久久久| 色综合久久九月婷婷色综合| 亚洲卡通动漫在线| 欧美日韩国产乱码电影| 久久超碰97中文字幕| 国产欧美一区二区三区在线看蜜臀| 成人黄色av电影| 亚洲激情男女视频| 欧美精品第1页| 麻豆中文一区二区| 久久精品视频一区二区| heyzo一本久久综合| 亚洲欧美欧美一区二区三区| 欧美性大战久久久久久久蜜臀| 秋霞午夜av一区二区三区| 久久免费电影网| 波多野结衣欧美| 最新不卡av在线| 欧美美女一区二区三区| 国产乱淫av一区二区三区| 最好看的中文字幕久久| 91精品国产综合久久久久久久| 国内精品写真在线观看| 中文字幕一区在线| 欧美精品色综合| 国产精品综合久久| 一区二区在线电影| eeuss鲁片一区二区三区在线观看 eeuss鲁片一区二区三区在线看 | 国产欧美一区二区精品婷婷| 色噜噜狠狠色综合中国| 日本不卡一区二区三区高清视频| 久久精品夜色噜噜亚洲a∨| 色www精品视频在线观看| 美女性感视频久久| 日韩美女久久久| 欧美电影免费观看高清完整版在线观看 | 裸体一区二区三区| 国产精品久久久久三级| 欧美精品粉嫩高潮一区二区| 成人小视频免费观看| 天堂久久一区二区三区| 国产丝袜在线精品| 欧美日韩国产小视频| 成人午夜大片免费观看| 日韩**一区毛片| 亚洲欧美日韩国产中文在线| 久久久精品蜜桃| 欧美日韩激情一区二区三区| 国产精品一区在线观看乱码| 久久久亚洲精华液精华液精华液| 欧美影院一区二区| 丁香婷婷深情五月亚洲| 免费精品视频最新在线| 中文字幕一区三区| 国产视频一区不卡| 欧美一区二区网站| 色综合久久88色综合天天6| 国产精品主播直播| 免费一级欧美片在线观看| 国产精品欧美一级免费| 欧美大胆一级视频| 在线看国产一区| 国产精品亚洲第一 | 欧美电影免费观看高清完整版在线| 972aa.com艺术欧美| 国产一区免费电影| 天堂资源在线中文精品| 亚洲视频一区二区在线| 国产精品久久久久影院老司| 久久亚洲一级片| 日韩一二三区视频| 欧美精品 国产精品| 日本电影欧美片| 成人美女在线观看| 亚洲欧洲综合另类| 中文字幕av在线一区二区三区| 日韩欧美三级在线| 在线电影一区二区三区| 欧洲av在线精品| 在线观看www91| 一本大道久久a久久精品综合| 国产在线一区二区综合免费视频| 免费成人深夜小野草| 香蕉成人啪国产精品视频综合网| 亚洲人妖av一区二区| 国产欧美一区二区三区沐欲| 国产香蕉久久精品综合网| 欧美大片在线观看| 精品国产一区二区三区av性色| 欧美一区二区人人喊爽| 91精品国产综合久久精品麻豆| 精品无人区卡一卡二卡三乱码免费卡| 天天免费综合色| 日韩影院在线观看| 日韩不卡一二三区| 日本亚洲免费观看| 蜜桃精品视频在线观看| 久久精品国产亚洲高清剧情介绍| 免费成人在线视频观看| 日本美女一区二区| 久久精品av麻豆的观看方式| 蜜桃精品视频在线观看| 国产综合色视频| 国产麻豆精品久久一二三| 国产美女视频91| 国产传媒一区在线| 亚洲综合一区二区三区| 亚洲成人tv网| 秋霞av亚洲一区二区三| 久久9热精品视频| 国产一区二区伦理| 粉嫩一区二区三区在线看| 成人精品小蝌蚪| 日本久久精品电影| 色婷婷国产精品综合在线观看| 色狠狠av一区二区三区| 欧美日韩视频在线观看一区二区三区| 欧美日韩国产大片| 日韩精品专区在线影院重磅| 久久麻豆一区二区| 中文字幕一区二区三区精华液 | 久久精品国产成人一区二区三区| 韩国三级在线一区| 99riav一区二区三区| 久久综合久久综合久久| 欧美一区二区在线播放| 国产色产综合产在线视频| 亚洲欧洲精品一区二区三区不卡|