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

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

?? i2c_test.c

?? LPCEB2000-S的I2C控制程序
?? C
字號:
#define	LPCEB2000_I

/*********************************************************************************************
* File:	i2c_test.c
* Author:	Embest w.h.xie
* Desc:	test I2C bus read and write
* History:	
*********************************************************************************************/

/*------------------------------------------------------------------------------------------*/
/*								include files												*/
/*------------------------------------------------------------------------------------------*/

#include	"target.h"

/*------------------------------------------------------------------------------------------*/
/*									define 													*/
/*------------------------------------------------------------------------------------------*/

#define	FOSC	10000000
#define	FCCLK	40000000
#define	Fpclk	10000000

#define	CAT24WC02	0xA0										// 24WC02 address

/*------------------------------------------------------------------------------------------*/
/*								local function declare										*/
/*------------------------------------------------------------------------------------------*/

__irq void irq_i2c(void);									// I2C interrupt

/*------------------------------------------------------------------------------------------*/
/*	 							global variable define										*/
/*------------------------------------------------------------------------------------------*/

uint8  ucI2CAdd;												// 
uint8  ucI2CRamAdd;												// RAM read and write address
uint8  ucI2CNum;												// I2C read and write Num
uint8  *ucI2CBuf;												// I2C work pointer
uint8  ucReadBuf[8];											// read data buf
uint8  ucWriteBuf[8];											// write data buf
uint8  ucI2CEnd;												// end sign
uint8  ucI2CAddEn;												// work enabled sign

/*********************************************************************************************
* name:		time_dly
* func:		display code
* para:		dly			--in, delay value
* ret:		none
* modify:
* comment:		
*********************************************************************************************/
void  time_dly(uint32  dly)
{  
	uint32  i;

	for(; dly>0; dly--) 
		for(i=0; i<500; i++);
}

/*********************************************************************************************
* name:		sys_init
* func:		init the sys
* para:		none
* ret:		none
* modify:
* comment:		
*********************************************************************************************/
void  sys_init()
{
	// allow PLL
	PLLCON = 1;
	VPBDIV = PLL_VPBDIV;
	PLLCFG = PLL_CFG;

	PLLFEED = 0xaa;
	PLLFEED = 0x55;
	while((PLLSTAT & (1 << 10)) == 0);
	PLLCON = 3;
	PLLFEED = 0xaa;
	PLLFEED = 0x55;

	// set MAM 2 CCLK
	MAMCR   = 0;
	MAMTIM  = MAM_TIM;
	MAMCR   = 2;

	// init all interrupt
	VICIntEnClr = 0xffffffff;
	VICVectAddr = 0;
	VICIntSelect = 0;
}

/*********************************************************************************************
* 名稱:		irq_i2c(void)
* 功能:		I2C中斷服務程序
* 參數:		無
* 返回:		無
* 修改:		
* 注釋:		
*********************************************************************************************/
__irq void  irq_i2c(void)
{  uint8  sta;

	sta = I2C_I2STAT;											// read state
	switch(sta) {
	  case  0x08:
			if (ucI2CAddEn == 1)
				I2C_I2DAT = ucI2CAdd & 0xFE;					// send slave address + read sign
			else
				I2C_I2DAT = ucI2CAdd;							// send slave address
			I2C_I2CONCLR = 0x28;								// SI=0
			break;
			
	  case  0x10:
			I2C_I2DAT = ucI2CAdd;								// reset, send slave address
			I2C_I2CONCLR = 0x28;								// SI=0
			break;
	
	  case  0x18:
			if (ucI2CAddEn == 0) {
				if(ucI2CNum>0) {
				  I2C_I2DAT = *ucI2CBuf++;						// send data
				  I2C_I2CONCLR = 0x28; 
				  ucI2CNum--;
				} else {
				  I2C_I2CONSET = 0x10;							// send finish, 
				  I2C_I2CONCLR = 0x28;
				  ucI2CEnd = 1;									// set end sign
				}
				break;
			}
			if (ucI2CAddEn == 1) {
				I2C_I2DAT = ucI2CRamAdd;						// send work address
			}
			if (ucI2CAddEn == 2) {
				I2C_I2DAT = ucI2CRamAdd;						// send work address
				ucI2CAddEn = 0;									// clear sign
			}
			I2C_I2CONCLR = 0x28;								// SI=0 , clear interrupt sign
			break;
			
	  case  0x28:
			if (ucI2CAddEn == 0) {
				if (ucI2CNum>0) {
					I2C_I2DAT = *ucI2CBuf++;					// send work address
					ucI2CNum--;
				} else {
					I2C_I2CONSET = 0x10;						// send finish
					ucI2CEnd = 1; 
				}
				I2C_I2CONCLR = 0x28;							// SI=0 , clear interrupt sign
			}
			if (ucI2CAddEn == 1) {								// read appoint address
				I2C_I2CONSET = 0x20;
				I2C_I2CONCLR = 0x08;
				ucI2CAddEn	= 0;								// appoint address dispose finish
			}
			break;
	
	
	  case  0x20:
	  case  0x30:
	  case  0x38:												// bus error
			I2C_I2CONCLR = 0x28;
			ucI2CEnd = 0xFF;
			break;
	
	
	  case  0x40:												// already send sla+r and recive the ack
			if(1==ucI2CNum) {									// send no ack when last byte
				I2C_I2CONCLR = 0x2C;
			} else {											// recive and send ack
				I2C_I2CONSET = 0x04;
				I2C_I2CONCLR = 0x28;
			} 
			break;
			
	  case  0x50:
			*ucI2CBuf++ = I2C_I2DAT;							// read data
			ucI2CNum--;
			if (1==ucI2CNum) {
				I2C_I2CONCLR = 0x2C;
			} else {
				I2C_I2CONSET = 0x04;
				I2C_I2CONCLR = 0x28;
			}
			break;
	  
	  case  0x58:
			*ucI2CBuf++ = I2C_I2DAT;							// read last byte data
			I2C_I2CONSET = 0x10;								// bus end
			I2C_I2CONCLR = 0x28;
			ucI2CEnd = 1; 
			break;
	  
	  case  0x48:
			I2C_I2CONCLR = 0x28;								// bus error
			ucI2CEnd = 0xFF; 
			break;
			
	  default: 
			break;
	}
	

	VICVectAddr = 0x00;											// interrupt finish
}

/*********************************************************************************************
* name:		i2c_init
* func:		init the I2C bus
* para:		none
* ret:		none
* modify:
* comment:		
*********************************************************************************************/
void  i2c_init(void)
{
	PINSEL0 = (PINSEL0&0xFFFFFF0F) | 0x50;						// I2C open

	I2C_I2SCLH	= 200;											// set I2C clock
	I2C_I2SCLL	= 200;
	I2C_I2CONCLR = 0x2C;
	I2C_I2CONSET = 0x40;										// set Master Mode

	// set I2C interrupt 
	VICIntSelect = 0x00000000;
	VICVectCntl0 = 0x29;
	VICVectAddr0 = (int)irq_i2c;
	VICIntEnable = 0x0200;
}

/*********************************************************************************************
* name:		I2C_sendstr
* func:		I2C send str
* para:		sla		--	in,	slave address
*			add		--	in,	data address
* ret:		none
* modify:
* comment:		
*********************************************************************************************/
uint8  I2C_sendstr(uint8 sla, uint8 add)
{
	// setup basic parameter 
	ucI2CAdd	= sla;
	ucI2CNum	= 8;
	ucI2CRamAdd = add;
	ucI2CBuf	= ucWriteBuf;
	ucI2CEnd	= 0;
	ucI2CAddEn  = 2;

	// set master Mode, startup bus
	I2C_I2CONCLR = 0x2C;
	I2C_I2CONSET = 0x60;

	// wait work finish
	while(0==ucI2CEnd);
	if(1==ucI2CEnd) return(1);
	 else return(0);
}

/*********************************************************************************************
* name:		I2C_rcvstr
* func:		I2C receive str
* para:		sla		--	in,	slave address
*			add		--	in,	data address
* ret:		none
* modify:
* comment:		
*********************************************************************************************/
uint8  I2C_rcvstr(uint8 sla, uint8 add)
{
	// setup basic parameter 
	ucI2CAdd	= sla + 1;
	ucI2CNum	= 8;
	ucI2CRamAdd = add;
	ucI2CBuf	= ucReadBuf;
	ucI2CEnd	= 0;
	ucI2CAddEn  = 1;

	// set master Mode, startup bus
	I2C_I2CONCLR = 0x2C;
	I2C_I2CONSET = 0x60;

	// wait work finish
	while(0==ucI2CEnd);
	if(1==ucI2CEnd) return(1);
	 else return(0);
}

/*********************************************************************************************
* name:		Main
* func:		main fun
* para:		none
* ret:		none
* modify:
* comment:	
*********************************************************************************************/
int  main(void)
{
	uint8  i;

	// init GPIO
	PINSEL0 = 0x00000000;
	PINSEL1 = 0x00000000;

	// init beep
	IODIR0  = BEEP_CON;
	IOSET0  = BEEP_CON;

	for (i=0; i<8 ; i++) {
		ucWriteBuf[i] = i * 11;
		ucReadBuf[i]  = i;
	}
	
	sys_init();
	
	i2c_init();

	I2C_sendstr(CAT24WC02, 0x00);
	time_dly(100);												// wait work finish
	I2C_rcvstr(CAT24WC02, 0x00);
	
	for (i=0; i<8; i++) {										// compare
		if (ucReadBuf[i] != ucWriteBuf[i]) break;
	}
	do{
		if (i<8) {												// error
			IOCLR0 = BEEP_CON;
			time_dly(100);
			IOSET0 = BEEP_CON;
			time_dly(100);			
		} else {												// right
			IOCLR0 = BEEP_CON;  
			time_dly(10000000);
			IOSET0 = BEEP_CON;
			time_dly(100);		
		}
	} while(1);
}

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
日韩精品五月天| 日本韩国欧美一区二区三区| 粉嫩aⅴ一区二区三区四区 | 国产精品私人影院| 亚洲r级在线视频| 99精品偷自拍| 国产欧美一区二区在线观看| 亚洲成a天堂v人片| 97精品视频在线观看自产线路二 | 91欧美一区二区| 久久综合色婷婷| 三级欧美韩日大片在线看| caoporen国产精品视频| 久久久www成人免费无遮挡大片| 午夜久久电影网| 色婷婷综合视频在线观看| 国产日韩欧美不卡在线| 极品美女销魂一区二区三区| 欧美日韩一区中文字幕| 一区二区三区在线观看视频| 成人免费视频视频在线观看免费 | 99麻豆久久久国产精品免费| 久久久影视传媒| 久久福利资源站| 日韩视频一区二区在线观看| 亚洲18色成人| 欧美日韩在线免费视频| 亚洲国产欧美日韩另类综合| 91色|porny| 亚洲欧洲精品成人久久奇米网| 国产综合成人久久大片91| 久久综合色之久久综合| 精品午夜一区二区三区在线观看| 日韩视频免费直播| 美女在线视频一区| 精品国产免费人成在线观看| 人人狠狠综合久久亚洲| 日韩精品资源二区在线| 韩国一区二区三区| 国产农村妇女精品| 91农村精品一区二区在线| 亚洲欧美在线视频观看| 91日韩精品一区| 亚洲一区自拍偷拍| 日韩视频免费观看高清在线视频| 久久99蜜桃精品| 国产日产精品一区| 色老汉一区二区三区| 亚洲综合免费观看高清完整版 | 国产福利91精品一区二区三区| 久久久久久免费网| 99视频在线精品| 丝袜美腿亚洲色图| 久久综合色之久久综合| 91在线免费看| 日韩精品三区四区| 久久久久久久久岛国免费| 成人av网址在线| 婷婷开心久久网| 久久久久久9999| 色婷婷av一区二区三区gif | 国产精品久久久久久亚洲毛片 | 91精品国产高清一区二区三区 | 欧美亚洲国产一区二区三区| 日韩不卡在线观看日韩不卡视频| 欧美一级夜夜爽| a亚洲天堂av| 奇米综合一区二区三区精品视频| 久久老女人爱爱| 色噜噜久久综合| 国产在线精品免费av| 亚洲视频在线观看三级| 日韩欧美电影在线| 色综合久久88色综合天天免费| 日日噜噜夜夜狠狠视频欧美人| 国产女人水真多18毛片18精品视频| 色系网站成人免费| 国产精品一区不卡| 天天综合色天天| 日韩理论在线观看| 久久综合狠狠综合久久综合88 | 国产成人在线视频网站| 亚洲国产日日夜夜| 国产精品不卡在线观看| 精品国产制服丝袜高跟| 欧美性受xxxx黑人xyx性爽| 国产精品自在在线| 秋霞成人午夜伦在线观看| 综合av第一页| 久久久久久久久蜜桃| 3d动漫精品啪啪| 色呦呦国产精品| 成人免费视频播放| 九九国产精品视频| 首页亚洲欧美制服丝腿| 亚洲欧美电影院| 国产精品亲子乱子伦xxxx裸| 精品国产精品网麻豆系列 | www.色综合.com| 国产精品一区二区男女羞羞无遮挡 | 成人精品小蝌蚪| 国产一区二区三区免费| 美国三级日本三级久久99| 午夜精品国产更新| 亚洲线精品一区二区三区| 亚洲人成影院在线观看| 国产精品天天看| 国产人久久人人人人爽| 久久久久久影视| 欧美精品一区二区三区一线天视频| 欧美精品国产精品| 欧美二区在线观看| 3751色影院一区二区三区| 欧美另类z0zxhd电影| 欧美日韩精品高清| 欧美精品久久久久久久久老牛影院| 在线观看视频一区| 欧美日韩亚洲高清一区二区| 欧美性猛交xxxxxxxx| 欧美视频一区二区三区在线观看| 一本大道久久a久久精二百| 一本色道a无线码一区v| 91国产成人在线| 欧美美女喷水视频| 欧美精品久久99久久在免费线 | 久久综合色播五月| 国产日韩欧美高清| 国产精品久久久久久久久果冻传媒 | 一区二区三区免费网站| 亚洲一区二区三区四区五区黄 | 国内成人自拍视频| 成人国产免费视频| 91成人在线精品| 在线综合亚洲欧美在线视频| 欧美视频中文字幕| 欧洲精品视频在线观看| 国产精品综合视频| 国产一区二区日韩精品| 国产99久久久精品| 91久久精品一区二区二区| 91精品啪在线观看国产60岁| 精品欧美黑人一区二区三区| 国产欧美一区二区三区网站| 亚洲品质自拍视频网站| 日本三级韩国三级欧美三级| 久久99精品视频| eeuss鲁片一区二区三区在线看 | 国产乱人伦偷精品视频不卡| 成人a级免费电影| 欧美日韩精品综合在线| 精品88久久久久88久久久| 亚洲人成网站影音先锋播放| 婷婷开心久久网| 成人高清免费在线播放| 精品视频在线免费| 亚洲国产精品v| 五月天欧美精品| 成人免费观看视频| 欧美精品v国产精品v日韩精品| 久久婷婷成人综合色| 亚洲成人av中文| 成人黄色综合网站| 91精品国产免费| 亚洲欧美成人一区二区三区| 激情五月婷婷综合| 欧美影片第一页| 国产精品美女久久久久久久久久久 | 欧美日韩免费高清一区色橹橹| 26uuu久久综合| 午夜久久久久久久久久一区二区| 国产成人在线视频免费播放| 欧美色视频在线观看| 国产精品传媒视频| 国产激情精品久久久第一区二区 | 国产一区二区三区免费| 欧美另类久久久品| 一区二区三区久久| gogogo免费视频观看亚洲一| 久久综合九色综合久久久精品综合| 亚洲图片欧美色图| 色综合一区二区| 国产精品污网站| 国产乱人伦精品一区二区在线观看 | 亚洲男人的天堂在线aⅴ视频| 韩国精品在线观看| 日韩视频免费观看高清完整版在线观看 | 一区二区三区在线观看国产| 粉嫩av一区二区三区在线播放| 精品国产自在久精品国产| 日韩精品电影一区亚洲| 欧美视频一区二| 亚洲国产成人高清精品| 色哟哟一区二区| 亚洲黄色性网站| 色综合天天综合色综合av | 亚洲一区二区三区小说| 色先锋aa成人| 亚洲黄色av一区| 91黄色激情网站| 亚洲一区视频在线|