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

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

?? eeprom.c

?? arm9處理器
?? C
字號:
/*
 create by hzh, to support wr/rd parameters to/from eeprom
*/
#include "def.h"
#include "2440addr.h"
#include "2440lib.h"

#define	SLV_ADDR_24C02	0xa0//定義EEPROM的地址
//#define	SLV_ADDR_CAMERA	0x5a//定義CAMERA的地址,OV9650的寫地址應該是0x60,讀地址應該是0x61,有問題,feipeng
#define	SLV_ADDR_CAMERA_WRITE 0x60//feipeng
#define	SLV_ADDR_CAMERA_READ 0x61//feipeng
void mdelay(int ms);

static volatile int iic_ints;

static void __irq IicInt(void)//中斷服務子函數,feipeng
{
	ClearPending(BIT_IIC);//清中斷未決位,feipeng
	iic_ints++;//?
}

static int iic_wr(U8 data, U8 cnt)//寫IIC總線,feipeng
{
	int i, c;

	for(i=0; i<20; i++);
	
	if(cnt)
		rIICDS = data;//寫數據
		
	rIICCON &= ~0x10;		//Resume IIC operation to send

	i = 3;	//3ms
	//while(!(rIICCON&0x10)&&i--) mdelay(1);
	c = iic_ints;//只有發生中斷時,iic_ints才改變,feipeng
	
	while(iic_ints==c&&i--)//延時3ms 
		mdelay(1);
	//rIICCON &= ~0x10;
	
	if(!i)
		return -1;

	return (rIICSTAT&1)?-1:0;//收到ACK返回-1.未收到ACK返回0,feipeng
}

static int iic_rd(U8 *pBuf)
{
	int i, c;
	
	for(i=0; i<20; i++);
	
	rIICCON &= ~0x10;		//Resumes IIC operation to receive
	i = 3;	//3ms
	//while(!(rIICCON&0x10)&&i--) mdelay(1);
	c = iic_ints;
	while(iic_ints==c&i--) mdelay(1);
	
	if(i) {
		*pBuf = rIICDS;
		return 0;
	}
	
	return -1;
}

static int seek_iic_device(U8 slvAddr)
{
	int i;
	U8 d;
	
	i = 200;				//200ms
	while(i--) 
	{
		rIICDS   = slvAddr;
		
		//IICSTAT	Mode select		Busy stat/Start_Stop Condition		Serial output		Arbitration stat flag		Addr_as_slave stat flag		Addr zero stat flag		Last_receive bit stat flag
		//				10					1									1					0						0							0						0						
		//STAT		Master Rx			Start 							Enable Rx/Tx
		rIICSTAT = 0xb0;	//read mode
		
		if(!iic_wr(0, 0)) 
		{
			iic_rd(&d);
			break;
		}
		mdelay(1);
	}
	
	//IICSTAT	Mode select		Busy stat/Start_Stop Condition		Serial output		Arbitration stat flag		Addr_as_slave stat flag		Addr zero stat flag		Last_receive bit stat flag
	//				10					0									1					0						0							0						0						
	//STAT		Master Rx				Stop 						Enable Rx/Tx
	rIICSTAT = 0x90;
	
	rIICCON &= ~0x10;		//Resume IIC operation to send stop
	mdelay(1);

	return (i>=0)?0:-1;
}

//8 bits register address only
static int write_eeprom(U8 slvAddr, U8 addr, U8 data)//IIC 寫從屬設備,feipeng
{
	int i;
	U8 ch[3];
	
	ch[1] = addr;
	ch[2] = data;
	
	rIICDS   = slvAddr;//寫從屬地址,feipeng
	
	
	
	//IICSTAT	Mode select		Busy stat/Start_Stop Condition		Serial output		Arbitration stat flag		Addr_as_slave stat flag		Addr zero stat flag		Last_receive bit stat flag
	//				11					1									1					0						0							0						0						
	//STAT		Master Tx			Start 							Enable Rx/Tx
	rIICSTAT = 0xf0;		//MasTx,Start//發送開始,feipeng
	
	for(i=0; i<3; i++)
		if(iic_wr(ch[i], i))
			break;
	
	//IICSTAT	Mode select		Busy stat/Start_Stop Condition		Serial output		Arbitration stat flag		Addr_as_slave stat flag		Addr zero stat flag		Last_receive bit stat flag
	//				11					0									1					0						0							0						0						
	//STAT		Master Tx				Stop 						Enable Rx/Tx		
	rIICSTAT = 0xd0;		//Stop MasTx condition//發送停止,feipeng
	
	
	
	
	
	rIICCON &= ~0x10;		//Resume IIC operation to send stop
	mdelay(1);
	
	if(i<3)
		return -1;
		
	return seek_iic_device(slvAddr);
}

//8 bits register address only
static int read_eeprom(U8 slvAddr, U8 addr, U8 *pBuf)
{
	int i;
	U8 ch[2];
	
	ch[1] = addr;
	
	rIICDS   = slvAddr;
	rIICSTAT = 0xf0;		//MasTx,Start
	for(i=0; i<2; i++)
		if(iic_wr(ch[i], i))
			break;
	if(i<2) {
		rIICSTAT = 0xd0;	//Stop MasTx condition
		rIICCON &= ~0x10;	//Resume IIC operation to send stop
		mdelay(1);
		return -1;
	}

	rIICDS   = slvAddr;
	rIICSTAT = 0xb0;		//Master Rx,Start
	if(!iic_wr(0, 0))		//wait ack
		i = iic_rd(pBuf);
	rIICSTAT = 0x90;		//Stop MaxRx condition
	rIICCON &= ~0x10;		//Resume IIC operation to send stop
	mdelay(1);
	
	return i;
}

static void init_iic_op(void)//初始化IIC操作,feipeng   
{
	rCLKCON |= 1<<16;//control PCLK into IIC block,feipeng
	
	rGPEUP  |= 0xc000;                  //Pull-up disable?有意義嗎?feipeng
	rGPECON &= ~0xf0000000;				//GPE14\GPE15作為輸入,feipeng
	rGPECON |= 0xa0000000;              //GPE15:IICSDA , GPE14:IICSCL 
	
	//Enable ACK, Prescaler IICCLK=PCLK/16, Enable interrupt, Transmit clock value Tx clock=IICCLK/16
	// If PCLK 50.7MHz, IICCLK = 3.17MHz, Tx Clock = 0.198MHz
	//rIICCON = (1<<7) | (1<<6) | (1<<5) | (0);	//IICCLK=PCLK/512=97K
	
	//just read one byte, don't enable ack!
	rIICCON = (0<<7) | (1<<6) | (1<<5) | (0);	//IICCLK=PCLK/512=97K
	//  disable ack  iicclk=1/512pclk Tx/Rx interrupt enable
	rIICSTAT = 0x10;                    //IIC bus data output enable(Rx/Tx),serial output enable,feipeng//從屬接收模式
	rIICADD  = 0x10;                    //2410 slave address = [7:1]serial output enable時,按datasheet,rIICADD不能寫?,feipeng//2440作為從屬設備的地址
	
	pISR_IIC = (unsigned)IicInt;//中斷向量關聯中斷子函數,feipeng,注意,只用函數名,不帶()
	EnableIrq(BIT_IIC);//中斷使能,feipeng
}

static void end_iic_op(void)
{
//	rCLKCON &= ~(1<<16);
	DisableIrq(BIT_IIC);
}

int write_24c02(U8 *pBuf)
{
	int i;
	
	init_iic_op();
	
	for(i=0; i<256; i++) {
		//if(seek_iic_device(SLV_ADDR_24C02))
		//	break;
		if(write_eeprom(SLV_ADDR_24C02, i, pBuf[i]))
			break;
	}
	
	end_iic_op();
	
	Uart_Printf("Write EEPROM %s!\n", (i<256)?"Fail":"Success");
	
	return i<256;
}

int read_24c02(U8 *pBuf)
{
	int i;
	
	init_iic_op();
	
	for(i=0; i<256; i++) {
		if(read_eeprom(SLV_ADDR_24C02, i, pBuf+i))
			break;
	}
	
	end_iic_op();
	
	Uart_Printf("Read EEPROM %s!\n", (i<256)?"Fail":"Success");

	return i<256;
}

int find_camera(void)
{
	int ret = -2;
	U8 d[256];
	
	rGPGCON &= ~(3<<24);//GPG12作為輸入,feipeng
	rGPGCON |= 1<<24;//GPG12作為輸出,feipeng
	rGPGUP  &= ~(1<<12);//GPG12內部上拉禁用,feipeng
	rGPGDAT |= 1<<12;//GPG12輸出1,feipeng
	
	rGPJCON = 0x1aaaaaa;//GPJ口為作為Cam口,但GPJ12作為輸出,連接CAMRESET,用于復位, 不是0x2aaaaaa?feipeng
	rGPJUP  = 0;//內部上拉禁用,feipeng
	
	//以下四句復位camera,上升沿,feipeng
	rGPJDAT = 0;//GPJ12輸出0,feipeng
	mdelay(10);//延時10ms,函數沒看,feipeng
	rGPJDAT = 1<<12;//GPJ12輸出1,feipeng
	mdelay(10);//延時10ms,函數沒看,feipeng
	
	init_iic_op();//IIC總線初始化操作,IIC中斷使能,關聯中斷向量
	
	if(!write_eeprom(SLV_ADDR_CAMERA_WRITE, 0xec, 0)) //三個參數依次為從屬設備參數,內部地址,數據,改了
	{
		int i, a;
		
		ret = -1;
		a = 0xb0;
		for(i=0; i<4; i++)
			if(read_eeprom(SLV_ADDR_CAMERA_READ, a+i, d+i))//feipeng,SLV_ADDR_CAMERA到SLV_ADDR_CAMERA_READ
				break;
		if(i>=4)
			ret = 0;
		
	//	Uart_Printf("i = %d\n", i);
	//	for(i=0; i<256; i++)
	//		Uart_Printf("%c%02x", (i%16)?' ':'\n', d[i]);
	}
	
	end_iic_op();

	switch(ret)	{
	case -2:
		Uart_Printf("Fail to write camera IIC!\n");
		break;
	case -1:
		Uart_Printf("Fail to read camera IIC!\n");
		break;
	case 0:
		Uart_Printf("Read camera ID is 0x%04x, ", (d[0]<<8)|d[1]);
		Uart_Printf("chip version is 0x%04x\n", (d[2]<<8)|d[3]);
		break;
	default:
		break;
	}
		
	return ret;
}

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
亚洲国产精品天堂| 久久久美女毛片| 日韩网站在线看片你懂的| 欧美成人一区二区三区在线观看| 久久久蜜桃精品| 亚洲视频电影在线| 美日韩一区二区三区| 成人免费看黄yyy456| 欧美日韩在线精品一区二区三区激情| 日韩亚洲欧美在线| 国产精品午夜在线观看| 亚洲制服欧美中文字幕中文字幕| 久久99精品久久久久久久久久久久| 成人国产精品视频| 91精品国产免费久久综合| 国产亚洲欧洲一区高清在线观看| 亚洲精选视频在线| 韩国午夜理伦三级不卡影院| 色94色欧美sute亚洲13| 日韩精品一区二区三区视频播放| 国产精品久久久久久久久搜平片| 日韩中文字幕91| 不卡一二三区首页| 精品捆绑美女sm三区| 亚洲欧美日韩国产综合在线| 激情图片小说一区| 欧美精品在线视频| 国产精品高潮呻吟| 捆绑调教美女网站视频一区| 色综合久久中文综合久久牛| 久久久久久免费毛片精品| 亚洲成人自拍偷拍| 99国产精品久久久久久久久久| 精品免费日韩av| 亚洲狠狠爱一区二区三区| 成年人午夜久久久| 久久婷婷成人综合色| 午夜精品久久久久久久蜜桃app| 成人av在线资源| 日韩精品中文字幕在线不卡尤物 | 久久66热re国产| 日本韩国欧美三级| 国产欧美1区2区3区| 奇米影视在线99精品| 一本色道久久综合亚洲aⅴ蜜桃 | 国产精品亚洲视频| 日韩精品在线网站| 婷婷开心久久网| 一本一道久久a久久精品综合蜜臀| 久久精品视频一区二区| 裸体歌舞表演一区二区| 91精品视频网| 亚洲成人av一区二区三区| 94-欧美-setu| 国产精品成人一区二区艾草 | 日本一区二区成人| 精品一区免费av| 欧美一级黄色片| 午夜精品一区二区三区三上悠亚| 91网站视频在线观看| 国产精品乱码人人做人人爱| 国产精品一区二区无线| 欧美一区二区三区思思人| 亚洲国产精品一区二区久久| 在线观看日韩国产| 夜夜夜精品看看| 色天天综合色天天久久| 亚洲欧美自拍偷拍色图| 不卡一区二区在线| 综合分类小说区另类春色亚洲小说欧美| 国产a区久久久| 国产三级精品三级在线专区| 国产成人丝袜美腿| 国产日韩影视精品| 波多野结衣中文字幕一区| 国产精品久久久久精k8| 成人av网址在线观看| 国产精品的网站| 一本色道a无线码一区v| 一区二区三区免费| 欧美中文字幕亚洲一区二区va在线 | 亚洲线精品一区二区三区八戒| 欧洲一区二区av| 亚洲福利视频导航| 日韩一区二区三区电影| 国产真实乱子伦精品视频| 国产欧美日韩精品一区| 91亚洲精品久久久蜜桃| 一区二区三区在线视频观看58| 欧美视频精品在线| 日韩 欧美一区二区三区| 日韩午夜激情视频| 国产精品一区2区| 国产精品久久久久久户外露出 | 亚洲欧美日韩小说| 欧美三区在线观看| 久久国产精品72免费观看| 久久人人超碰精品| 91免费国产在线观看| 亚洲午夜视频在线| 日韩欧美一区二区久久婷婷| 国产xxx精品视频大全| 一区二区三区自拍| 精品日韩在线一区| 99久久99久久精品免费观看 | 日韩一区二区精品葵司在线| 国产原创一区二区| 一区二区中文字幕在线| 欧美精品在线观看播放| 国产电影一区在线| 亚洲一区免费观看| 久久综合狠狠综合久久激情| 99麻豆久久久国产精品免费| 天堂成人国产精品一区| 国产亚洲欧美在线| 欧美亚洲一区三区| 国产一区在线观看视频| 一区二区国产盗摄色噜噜| 日韩精品一区二区三区四区视频| av电影在线观看不卡| 日韩国产精品大片| 国产日韩av一区| 欧美调教femdomvk| 国产在线一区观看| 亚洲成av人片一区二区三区| 国产午夜一区二区三区| 国产精品美女久久久久久| 欧美日韩国产一级二级| 国产99精品视频| 日韩专区一卡二卡| 中文字幕五月欧美| 精品国产制服丝袜高跟| 欧美在线免费播放| 成人小视频免费在线观看| 日韩不卡一区二区| 亚洲人123区| 久久久亚洲高清| 欧美日韩高清一区二区| 不卡视频一二三四| 国产一区二区三区观看| 亚洲国产aⅴ天堂久久| 国产精品久久久久久亚洲伦| 欧美成人aa大片| 欧美在线影院一区二区| 国产69精品久久777的优势| 麻豆精品一区二区综合av| 亚洲午夜免费电影| 亚洲国产精品t66y| 精品日韩99亚洲| 在线成人小视频| 在线视频亚洲一区| 成人app网站| 国产91精品入口| 韩国精品在线观看| 日本不卡一区二区三区| 亚洲综合在线免费观看| 中文字幕中文在线不卡住| 久久无码av三级| 日韩视频永久免费| 欧美肥妇bbw| 欧美性色综合网| 91在线精品一区二区| 国产不卡视频一区| 国产精品99久久久久久久vr| 精品在线免费观看| 美女视频黄免费的久久| 视频一区中文字幕| 亚洲第一会所有码转帖| 亚洲午夜电影在线| 一区二区三区中文字幕电影| 亚洲欧美色一区| 亚洲三级在线免费| 亚洲欧美电影院| 自拍av一区二区三区| 亚洲欧美影音先锋| 亚洲女女做受ⅹxx高潮| 国产精品成人午夜| 成人欧美一区二区三区| 国产精品对白交换视频| 国产精品国产成人国产三级| 国产精品二三区| 亚洲天堂成人在线观看| 中文字幕一区二区三区视频| 综合激情成人伊人| 亚洲精品老司机| 夜夜亚洲天天久久| 亚洲一区二区高清| 亚洲成av人片| 日韩高清在线观看| 毛片一区二区三区| 精品一区二区久久久| 国产伦精品一区二区三区免费迷| 国产福利91精品一区二区三区| 粉嫩一区二区三区性色av| 成人黄色在线看| 色婷婷久久久久swag精品| 欧美三级在线视频| 日韩一区二区免费视频| 久久久91精品国产一区二区精品| 国产无一区二区|