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

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

?? pmp_rtc_driver.c

?? 嵌入式系統下的文件管理處理,和基本圖片jpg格式處理原代碼
?? C
?? 第 1 頁 / 共 3 頁
字號:

	// 將地址數據進行作藝的動作 
	data = Addr << 1;
	// 如果不是進行數據的寫動作, 最低位進行置位的動作
	if (Flag != FLAG_WRITE_DATA ) {
		data |= 0x01;
	}

	// output one byte 
	i2c_byte_send( data );

	// return 
	return;
}


/************************************************************************/
/*	初始化 HOST interface 

  input:
  output:
  func:		diable host interface 
                                                                        */
/************************************************************************/
static void host_interface_disable( void )
{
	UINT8	data;	
	UINT32	reg_addr;

	// disable host interface 
	data = 0x00;
	reg_addr = REG_HOST_INTERFACE_ENABLE;

	WRITE8(reg_addr++, data);
	WRITE8(reg_addr++, data);
	WRITE8(reg_addr++, data);
	WRITE8(reg_addr, data);
	
	return;
}

/************************************************************************/
/*	輸入一個寄存器地址和位數值,將該位置 進行置位、復位

  input:
			RegAddr		[in]	UINT32	32位的寄存器地址值
			BitOffset	[in]	UINT8	0 ~ 7
			Flag		[in]	UINT8	0 或者 非0值
  output:
			void 
  func:
                                                                        */
/************************************************************************/
static void set_register(UINT32 RegAddr, UINT8 BitOffset, UINT8 Flag)
{
	UINT8 j;
	UINT8 data;	

	// read data from register
	data = READ8( RegAddr );
	// 獲得數據因子
	j = 1 << BitOffset;	

	// 如果是"0", 進行清0 的動作
	if (!Flag) {
		j = ~j;
		data &= j;
	}
	else{
		data |= j;
	}	

	// 將數據寫回寄存器
	WRITE8( RegAddr, data );

	return;
}


/************************************************************************/
/* 使用I2C 接收一字節的數據
  input:	
			pdata	[out]
  output:
  func:
  note:
                                                                        */
/************************************************************************/
static void i2c_byte_receive( UINT8 *pdata )
{
	UINT8 i,data;

	data = 0x00;

	// disable SDA output
	set_register( REG_HGPIO_OUTPUT_ENABLE, I2C_SDA_BIT, 0);
	// set SDA as input
	set_register(REG_HGPIO_INPUT_ENABLE, I2C_SDA_BIT, 1);

	// input one byte from SDA
	for(i=0x00; i<0x08; i++){
		// output low level 
		scl_output_bit( LOW_LEVEL );
		i2c_delay( I2C_NORMAL_DELAY );
		
		// low 2 high
		scl_output_bit( HIGH_LEVEL );
		i2c_delay( I2C_NORMAL_DELAY );
		
		data <<= 1;	
		// read one bit 
		data |= sda_input_bit();
	}

	// scl change 2 low
	scl_output_bit( LOW_LEVEL );
	// SDA change 2 OUTPUT HIGH stat 
	sda_output_bit( HIGH_LEVEL );

	// save erceived data to input pointer
	*pdata = data;

	return ;
}

/************************************************************************/
/* 使用 I2C 發送一字節的數據
  input:
			data	[in] 將要通過 SDA 串行輸出的數據
  output:
			void 
  func:
			發送8bit 數據, 數據的順序是 MSB 先輸出, LSB 后輸出
			發送完 8 bit 數據后, 發送一個 CLK 等待 SLAVE 的回應信號

                                                                        */
/************************************************************************/
static void i2c_byte_send( UINT8 data)
{
	UINT8 i,j;

	j =0x80;

	// 將一字節的數據,串行輸出到 SDA 上 
	for(i=0x00; i<0x08; i++)
	{
		// clk low 
		scl_output_bit( LOW_LEVEL );
		// sda output
		sda_output_bit( data&j );

		i2c_delay( I2C_NORMAL_DELAY);

		// clk high
		scl_output_bit( HIGH_LEVEL );
		i2c_delay( I2C_NORMAL_DELAY );		
		j >>= 1;
	}

	// clk low 
	scl_output_bit( LOW_LEVEL );

	// 將 SDA 設置位輸入的狀態
	set_register( REG_HGPIO_OUTPUT_ENABLE, I2C_SDA_BIT, 0);		// disable output 
	set_register( REG_HGPIO_INPUT_ENABLE, I2C_SDA_BIT, 1);		// enable input

	// ack clk
	i2c_delay( I2C_NORMAL_DELAY );		
	scl_output_bit( HIGH_LEVEL );

	i2c_delay( I2C_NORMAL_DELAY );		
	scl_output_bit( LOW_LEVEL );

	return;
}

/*
 *	i2c_delay
 */
static void i2c_delay( UINT8 delay )
{
	UINT16 i;
	for(i=0x00; i<delay; i++);
	return;
}

/*
 *	i2c_start
 */
static void i2c_start( void )
{


	scl_output_bit( HIGH_LEVEL );
	sda_output_bit( HIGH_LEVEL );

	i2c_delay( I2C_NORMAL_DELAY );
	
	sda_output_bit( LOW_LEVEL );

 set_register(REG_HGPIO_OUTPUT_VALUE, 4, LOW_LEVEL);
	

	i2c_delay( I2C_NORMAL_DELAY );	
	scl_output_bit(LOW_LEVEL);

	i2c_delay( I2C_NORMAL_DELAY );	
	

 set_register(REG_HGPIO_OUTPUT_VALUE, 4, HIGH_LEVEL);
	

	return;
}

/*
 *	i2c_stop
 */
static void i2c_stop( void )
{
	sda_output_bit( LOW_LEVEL );
	scl_output_bit( LOW_LEVEL );

	i2c_delay( I2C_NORMAL_DELAY );

	scl_output_bit( HIGH_LEVEL );

	i2c_delay( I2C_NORMAL_DELAY );
	
	sda_output_bit( HIGH_LEVEL );	
	
	return;
}

/*
 *	SCL output one bit
 */

static void scl_output_bit( UINT8 data )
{
	// output one bit 	
	set_register(REG_HGPIO_OUTPUT_VALUE, I2C_SCL_BIT, data);
}

/*
 *	SDA output one bit 
 */
static void sda_output_bit( UINT8 data )
{
	// set SDA as output 
	set_register(REG_HGPIO_INPUT_ENABLE, I2C_SDA_BIT, 0);
	set_register(REG_HGPIO_OUTPUT_ENABLE, I2C_SDA_BIT, 1);

	// output one bit 	
	set_register(REG_HGPIO_OUTPUT_VALUE, I2C_SDA_BIT, data);
	return;
}

/************************************************************************/
/*	從 SDA 上讀取 1 bit 的數據
  input:
			void 
  output:
			0 或者 1
  func:
                                                                        */
/************************************************************************/
static UINT8 sda_input_bit( void )
{
	UINT8 data;

	// read HOST GPIO interface 
	data = READ8( REG_HGPIO_INPUT_VALUE);

	// test I2C_SDA
	if (data & (1<<I2C_SDA_BIT) ) {
		return 1;
	}

	return 0;
}

/************************************************************************/
/*	從 slave 讀取數據時,對slave 進行 回應
  input:

  output:
  func:
		在SCL上輸出一個時鐘信號,在SDA 輸出一個回應信號
                                                                        */
/************************************************************************/
static void i2c_read_ack( UINT8 AckSignal )
{
	sda_output_bit( AckSignal );
	i2c_delay(I2C_NORMAL_DELAY);
	scl_output_bit( HIGH_LEVEL );

	i2c_delay(I2C_NORMAL_DELAY);
	scl_output_bit( LOW_LEVEL );

	// 將數據線 從輸出狀態 轉變為 輸入狀態
	set_register(REG_HGPIO_OUTPUT_ENABLE, I2C_SDA_BIT, 0);
	set_register(REG_HGPIO_INPUT_ENABLE, I2C_SDA_BIT, 1);

	return;
}

/************************************************************************/
/*	獲取數據格式
  input:
			void
  output:
  func:	
			返回數據的格式
                                                                        */
/************************************************************************/
static UINT16 get_data_format( void )
{
	return rtc_data_format;
}

/************************************************************************/
/*	將 BCD 的數據轉換為 HEX 
  input:
			pBCD	[in]	BCD數據的存放地址
			pHex	[out]	Hex數據的存放地址
			len		[in]	數據的長度
  output:
			將輸入的BCD數據轉換為HEX數據
  func:
		
                                                                        */
/************************************************************************/
static UINT16 bcd_2_hex(UINT8 *pBCD, UINT8 *pHex, UINT8 len)
{
	UINT8 i;
	
	for(i=0x00; i<len; i++)
	{
		pHex[i] = ((pBCD[i] & 0xf0)>>4 )*10 + (pBCD[i] & 0x0f);
	}
}

/************************************************************************/
/*	將 HEX 的數據轉換為 BCD 
  input:
			pHex	[in]	Hex數據的存放地址  
			pBCD	[out]	BCD數據的存放地址
			len		[in]	數據的長度
  output:
			將輸入的BCD數據轉換為HEX數據
  func:
                                                                        */
/************************************************************************/
static UINT16 hex_2_bcd(UINT8 *pHex, UINT8 *pBCD, UINT8 len)
{
	UINT8 i;

	// 將Hex 數據轉換為 BCD
	for(i=0x00; i<len; i++)
	{
		pBCD[i] = ((pHex[i]/10) << 0x04) | (pHex[i]%10);
	}

	return 0x00;
}




/************************************************************************/
/*		輸入一個 BCD 編碼值, 將該值轉換為 HEX 編碼
  input:
			bcd		[in]	
  output:
			轉換后的HEX 值
  func:
  note:
                                                                        */
/************************************************************************/
static UINT16 ValueBCD_2_HEX( UINT16 bcd )
{
	UINT16 data;

	data = 	((bcd&0xf00) >>8)*100 + ((bcd &0xf0)>>4)*10 + (bcd&0x0f);

	return data;
}

/************************************************************************/
/*		輸入一個 HEX 編碼值, 將該值轉換為 BCD 編碼
  input:
			hex		[in]	
  output:
			BCD 的編碼值
  func:
  note:
                                                                        */
/************************************************************************/
static UINT16 ValueHEX_2_BCD( UINT16 hex )
{
	UINT16 i;

	i = ( (hex%100)/10 )<<4 | (hex%10);

	if ( hex<100 ) 
	{
		return i;
	}

	i |= ((hex%1000)/100 )<<8;

	if ( hex < 1000)
	{
		return i;
	}

	i |= ((hex%10000)/1000 )<<12;

	return i;
}

/************************************************************************/
/*			
			編譯中報出的沒有用到的程序
                                                                        */
/************************************************************************/

#if				0x0000

/************************************************************************/
/*	獲取 RTC 的時間信息
  input:
			pTimt_t		[in]	時間信息的指針
  output:
			0 成功, 非0值失敗
  func:
			獲取時間信息
  note:
			根據設定的數據格式,進行數據的輸出
                                                                        */
/************************************************************************/
static UINT16 SPMP_RTC_GetNowH_M_S( struct RTCtime_t * pTime_t )
{
	UINT8 buf[0x10];

	// 判斷輸入參數是否合法
	if (NULL == pTime_t) 
	{
		ERROR_REPORT;	
		return APP_DRV_ERR;
	}

	// 讀RTC 的時間信息
	read_RTC_addr(RTC_ADDR_SECOND, 0x03, buf);
	// 如果數據格式是 HEX, 需要進行數據的轉換
	if (DATA_FORMAT_HEX == get_data_format() ) 
	{
		// 將輸入的BCD 數據轉換為 HEX
		bcd_2_hex( buf, buf, 0x03);			
	}

	// 直接進行數據的賦值
	pTime_t->Hour	= buf[2];
	pTime_t->Minute	= buf[1];
	pTime_t->Second	= buf[0];

	// 返回成功
	return APP_DRV_OK;
}

#endif

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
亚洲国产欧美在线| 精品国产凹凸成av人网站| 樱花草国产18久久久久| 欧美人妖巨大在线| 国产一区不卡视频| 亚洲激情成人在线| 日韩精品一区二区三区在线观看 | 国产免费成人在线视频| 色美美综合视频| 国产精品1区2区3区在线观看| 国产精品久久免费看| 欧美一区日韩一区| 国产91露脸合集magnet| 一区二区三区日韩| 欧美成人高清电影在线| 成人高清视频在线| 久久97超碰国产精品超碰| 亚洲综合免费观看高清完整版| 精品国产露脸精彩对白| 欧美日韩一级视频| 91麻豆swag| 懂色av一区二区在线播放| 亚洲精品欧美激情| 欧美刺激脚交jootjob| 在线精品亚洲一区二区不卡| 成人精品免费视频| 国产一区二区福利视频| 美女看a上一区| 免费一区二区视频| 亚洲国产sm捆绑调教视频| 亚洲欧洲日韩在线| 日韩欧美一区二区视频| 91精品国产综合久久精品app| 91视频在线观看| 日本福利一区二区| 91在线免费视频观看| 99综合电影在线视频| 成人免费视频一区二区| 色94色欧美sute亚洲13| 欧美激情一区二区三区四区| 97精品国产97久久久久久久久久久久| 欧美一区二区福利在线| 色一情一乱一乱一91av| 欧美人动与zoxxxx乱| 精品国产乱码91久久久久久网站| 国产精品视频你懂的| 午夜电影网亚洲视频| 国产很黄免费观看久久| 欧美日韩在线播放| 久久久精品人体av艺术| 亚洲成人av福利| 成人网男人的天堂| 日韩欧美亚洲国产精品字幕久久久| 国产精品美女一区二区三区| 青青国产91久久久久久| 在线亚洲欧美专区二区| 欧美国产精品一区| 韩国女主播成人在线观看| 欧美精品v国产精品v日韩精品| 欧美韩国日本一区| 国产不卡免费视频| 精品国产伦一区二区三区观看体验| 亚洲一区免费视频| 91视视频在线直接观看在线看网页在线看 | 91精品国产品国语在线不卡| 中文字幕在线观看一区| 国产一区在线看| 日韩一区二区影院| 日韩av成人高清| 欧美精品高清视频| 日韩高清在线不卡| 精品三级在线看| 国产在线看一区| 国产亚洲精品久| av爱爱亚洲一区| 亚洲日本va午夜在线电影| 色综合久久中文字幕综合网| 国产精品女主播av| 色诱视频网站一区| 视频在线在亚洲| 日韩免费看网站| 波多野结衣中文字幕一区二区三区| 欧美国产精品专区| 91激情在线视频| 久久国产麻豆精品| 国产三级一区二区| 欧美性生活影院| 另类小说图片综合网| 国产调教视频一区| 在线视频欧美精品| 国内精品久久久久影院薰衣草| 久久色视频免费观看| 色屁屁一区二区| 国产一区久久久| 亚洲日本青草视频在线怡红院| 色哟哟国产精品免费观看| 奇米精品一区二区三区四区| 久久中文字幕电影| 欧美亚洲一区二区在线观看| 蜜臀久久久99精品久久久久久| 久久无码av三级| 欧美巨大另类极品videosbest| 国产**成人网毛片九色 | 国产一区二区三区高清播放| 亚洲美女电影在线| 91美女在线观看| 亚洲婷婷在线视频| 91麻豆精品国产综合久久久久久| 国产九九视频一区二区三区| 亚洲一区免费视频| 亚洲精品少妇30p| 日本一区二区三区国色天香| 日韩午夜激情免费电影| 在线免费亚洲电影| 色偷偷久久人人79超碰人人澡| 国产乱码精品一区二区三区av| 日韩电影免费一区| 天堂影院一区二区| 香蕉影视欧美成人| 一片黄亚洲嫩模| 亚洲va在线va天堂| 亚洲国产aⅴ成人精品无吗| 亚洲综合丝袜美腿| 亚洲大片一区二区三区| 天天亚洲美女在线视频| 一区二区免费在线| 天天操天天色综合| 美女免费视频一区| 麻豆91在线观看| 国产福利一区在线| 99精品桃花视频在线观看| eeuss鲁片一区二区三区| 91亚洲永久精品| 欧美性大战久久久久久久蜜臀 | 日本精品裸体写真集在线观看| 99热这里都是精品| 欧美日韩综合色| 日韩美女一区二区三区四区| 久久人人爽人人爽| 中文字幕在线不卡国产视频| 亚洲欧美日韩在线| 青青草国产精品97视觉盛宴 | 国产色一区二区| 亚洲在线成人精品| 久久成人久久爱| 99精品1区2区| 日韩免费视频线观看| 自拍偷拍亚洲激情| 久久成人麻豆午夜电影| av一本久道久久综合久久鬼色| 欧美系列一区二区| 久久久久成人黄色影片| 国产在线播放一区二区三区 | 成人h版在线观看| 在线不卡中文字幕播放| 国产精品久久久久国产精品日日| 天堂在线一区二区| 日本精品视频一区二区三区| 久久综合九色欧美综合狠狠| 亚洲综合色视频| 99国产精品久| 国产精品国产三级国产aⅴ无密码 国产精品国产三级国产aⅴ原创 | 午夜精品福利视频网站| 成人动漫一区二区在线| 日韩欧美一区二区三区在线| 一区二区三区在线观看动漫| 丁香六月久久综合狠狠色| 欧美电影免费观看高清完整版| 亚洲愉拍自拍另类高清精品| 成人免费毛片app| 中文字幕av一区 二区| 国产乱码精品一品二品| 久久久久久久久久看片| 麻豆成人av在线| 日韩欧美综合在线| 精品一区二区三区影院在线午夜 | 91精品国产日韩91久久久久久| 中文无字幕一区二区三区| 亚洲狼人国产精品| 97国产精品videossex| 中文字幕五月欧美| 在线亚洲一区二区| 亚洲综合区在线| 91精品国产欧美一区二区18| 日韩精品免费专区| 日韩欧美精品三级| 国产不卡高清在线观看视频| 国产精品国产三级国产| 91麻豆视频网站| 99久久精品国产观看| 亚洲大片精品永久免费| 亚洲精品在线观| 99国产精品视频免费观看| 亚洲综合成人在线视频| 欧美va亚洲va香蕉在线| 成人精品小蝌蚪| 日韩**一区毛片| 中文字幕的久久| 制服丝袜av成人在线看| 成人免费观看av|