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

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

?? pmp_rtc_driver.c

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

	// 如果是在開發(fā)板上, 還需要將日期時間設(shè)置到 RTC 中
	tmp_time.Hour		= pTimeAttr->tm_hour;
	tmp_time.Minute		= pTimeAttr->tm_min;
	tmp_time.Second		= pTimeAttr->tm_sec;

	tmp_date.Year		= pTimeAttr->tm_year;
	tmp_date.Month		= pTimeAttr->tm_mon;
	tmp_date.Day		= pTimeAttr->tm_mday;
	tmp_date.Week		= WeekDay;

	SPMP_RTC_SetDataFormat( DATA_FORMAT_HEX );

	// 將數(shù)據(jù)設(shè)定到RTC 中去
	SPMP_RTC_SetY_M_D_W( &tmp_date );
	SPMP_RTC_SetH_M_S( &tmp_time );
#endif

	return APP_DRV_OK;	
}

/************************************************************************/
/*			獲取 RTC 的時間信息
  input:	pTimt_t		[in]	時間信息的指針
  output:	0 成功, 非0值失敗
  func:
			獲取 時分秒信息
  note:
			使用文件系統(tǒng)的時間
			根據(jù)設(shè)定的數(shù)據(jù)格式,進行數(shù)據(jù)的輸出
                                                                        */
/************************************************************************/
UINT16 SPMP_RTC_GetH_M_S( Time_Attr_t * pTime_t, UINT16 DataFormat )
{
	// 判斷輸入?yún)?shù)是否合法
	if (NULL == pTime_t) {
		ERROR_REPORT;
		return APP_DRV_ERR;
	}

	// 獲得當前的時間值
	tmrNowTimeGet( pTime_t );

	// 判斷是否需要進行數(shù)據(jù)格式的轉(zhuǎn)換
	if ( DATA_FORMAT_BCD == DataFormat ) 
	{
		pTime_t ->tm_hour = ValueHEX_2_BCD( pTime_t ->tm_hour );
		pTime_t ->tm_min = ValueHEX_2_BCD( pTime_t ->tm_min );
		pTime_t ->tm_sec = ValueHEX_2_BCD( pTime_t ->tm_sec );
	}

	// 返回成功
	return APP_DRV_OK;
}

/************************************************************************/
/*	獲取 年月日 星期
  input:	
			pDate_t		[in]	日期的指針
  output:
			0 成功, 非0值失敗
  func:
			獲取日期信息
  note:
			使用文件系統(tǒng)的時間,防止有2套時間存在
			根據(jù)設(shè)定的數(shù)據(jù)格式,進行數(shù)據(jù)的輸出
                                                                        */
/************************************************************************/
UINT16 SPMP_RTC_GetY_M_D_W( Time_Attr_t * pTime_t, UINT16 *pWeek, UINT16 DataFormat )
{
	struct RTCdate_t tmp_date;
	
	// 判斷輸入?yún)?shù)是否合法	
	if ( (NULL == pTime_t ) || ( NULL == pWeek)  ) 
	{
		ERROR_REPORT;
		return APP_DRV_ERR;
	}

	*pWeek = 0x00;

#ifndef EVB_SN_V10
	tmrNowTimeGet( pTime_t );	// 首先獲得 FS time
	// 如果輸出的數(shù)據(jù)是 BCD 格式,進行數(shù)據(jù)格式的轉(zhuǎn)換
	if ( DATA_FORMAT_BCD == DataFormat ) 
	{
		pTime_t ->tm_year	= ValueHEX_2_BCD( pTime_t ->tm_year );
		pTime_t ->tm_mon	= ValueHEX_2_BCD( pTime_t ->tm_mon );
		pTime_t ->tm_mday	= ValueHEX_2_BCD( pTime_t ->tm_mday );
	}

#else 
	
	SPMP_RTC_SetDataFormat( DataFormat );

	// 獲取 RTC 的日期值
	SPMP_RTC_GetNowY_M_D_W( &tmp_date );

	*pWeek	= tmp_date.Week;
	pTime_t ->tm_year	= tmp_date.Year ;
	pTime_t ->tm_mon	= tmp_date.Month ;
	pTime_t ->tm_mday	= tmp_date.Day ;

#endif

	return APP_DRV_OK;	// 返回成功	
}

/************************************************************************/
/*	初始化CPU與RTC相連接的I/O 的功能和狀態(tài),將 
  input:
			void 
  output:
			void 
  func:
			初始化 HOST_GPIO2 HOST_GPIO3  
  note:
                                                                        */
/************************************************************************/
void SPMP_RTC_InterfaceInitial( void )
{
	UINT8 i;

	// disable HOST interafce	
	host_interface_disable();

	// initial I2C SCL
	// disable	pull	
	set_register(REG_HGPIO_PULL_ENABLE, I2C_SCL_BIT, 0);	
	// disable	input
	set_register(REG_HGPIO_INPUT_ENABLE, I2C_SCL_BIT, 0);
	// enable	output
	set_register(REG_HGPIO_OUTPUT_ENABLE, I2C_SCL_BIT, 1);
	// output	high
	set_register(REG_HGPIO_OUTPUT_VALUE, I2C_SCL_BIT, 1);

	// initial I2C SDA 
	// disable pull
	set_register(REG_HGPIO_PULL_ENABLE, I2C_SDA_BIT, 0);
	// disbale input
	set_register(REG_HGPIO_INPUT_ENABLE, I2C_SDA_BIT, 0);
	// enable output
	set_register(REG_HGPIO_OUTPUT_ENABLE, I2C_SDA_BIT,1);
	// output	high	
	set_register(REG_HGPIO_OUTPUT_VALUE, I2C_SDA_BIT, 1);

	// 讀取控制寄存器信息
	read_RTC_addr(RTC_ADDR_CTL2, 0x01, &i);

	if ( !(i& (HOUR_12_24_BIT)) ) 
	{
		// 將RTC 小時模式設(shè)置為 24小時制式
		i |= HOUR_12_24_BIT;
		write_RTC_addr( RTC_ADDR_CTL2, 0x01, &i );
	}

	// disable 32K output
	SPMP_RTC_Set32KOut( 0x00 );
	
	return;
}

/************************************************************************/
/*	 設(shè)定輸出的數(shù)據(jù)的格式

  input:
			DataFormat	[in]	數(shù)據(jù)的格式
								DATA_FORMAT_BCD	
								DATA_FORMAT_HEX
  output:
			0 成功, 非0值失敗
  func:
			設(shè)置數(shù)據(jù)的格式
  note:
			默認采用 BCD 的模式
                                                                        */
/************************************************************************/
static UINT16 SPMP_RTC_SetDataFormat( UINT16 DataFormat )
{
	rtc_data_format = DATA_FORMAT_BCD;

	// 判斷輸入的參數(shù)是否合法, 非法直接返回
	if ( DataFormat > DATA_FORMAT_HEX ) {
		return APP_DRV_ERR;
	}

	rtc_data_format = DataFormat;

	// 返回成功
	return APP_DRV_OK;
}




/************************************************************************/
/*	獲取 RTC 的日期信息
  input:
			pDate_t		[in]	日期的指針
  output:
			0 成功, 非0值失敗
  func:
			獲取日期信息
  note:
			根據(jù)設(shè)定的數(shù)據(jù)格式,進行數(shù)據(jù)的輸出
                                                                        */
/************************************************************************/
static UINT16 SPMP_RTC_GetNowY_M_D_W( struct RTCdate_t *pDate_t )
{
	UINT8 buf[0x04];

	// 判斷輸入?yún)?shù)是否合法
	if (NULL == pDate_t) {
		ERROR_OUTPUT(("get date err!\r\n"));
		return APP_DRV_ERR;
	}

	// 讀RTC 的日期信息
	read_RTC_addr(RTC_ADDR_WEEK, 0x04, buf);

	// 如果數(shù)據(jù)格式是 HEX, 需要進行數(shù)據(jù)的轉(zhuǎn)換
	if (DATA_FORMAT_HEX == get_data_format() ) 
	{
		// 將輸入的BCD 數(shù)據(jù)轉(zhuǎn)換為 HEX
		bcd_2_hex( buf, buf, sizeof(buf));			
	}

	pDate_t ->Week	= (UINT16) buf[0];
	pDate_t ->Day	= (UINT16) buf[1];
	pDate_t ->Month = (UINT16) buf[2];

	if (DATA_FORMAT_HEX == get_data_format() ) {
		pDate_t ->Year = buf[3] + BASE_YEAR_HEX;		
	}
	else{
		pDate_t ->Year = (UINT16)BASE_YEAR_BCD | buf[3];
	}	

	// 返回成功
	return APP_DRV_OK;	
}

/************************************************************************/
/*	設(shè)定時間
  input:
			pTime_t		[in]	時間的指針	
  output:
			0 成功, 非0值失敗
  func:
			進行時間的設(shè)定
  note:
			根據(jù)設(shè)定的數(shù)據(jù)格式,進行數(shù)據(jù)的輸出
                                                                        */
/************************************************************************/
static UINT16 SPMP_RTC_SetH_M_S( struct RTCtime_t *pTime_t )
{
	UINT8 buf[0x10];

	// 判斷輸入?yún)?shù)是否合法
	if (NULL == pTime_t) {
		ERROR_OUTPUT(("set time err1!\r\n"));
		return APP_DRV_ERR;		
	}

	// 按照 RTC 中存放的位置進行
	buf[0] = (UINT8) pTime_t ->Second;
	buf[1] = (UINT8) pTime_t ->Minute;
	buf[2] = (UINT8) pTime_t ->Hour;

	// 如果是HEX 模式, 需要進行格式轉(zhuǎn)換
	if ( DATA_FORMAT_HEX == get_data_format() ) 
	{
		hex_2_bcd(buf, buf, 0x03);
	}

	// 判斷輸入的時間值是否合法
	if ( (buf[0] >0x59) 
		|| (buf[1]>0x59) 
		|| (buf[2] >0x23) ) 
	{
		ERROR_REPORT;
		return APP_DRV_ERR;				
	}

	// 將檢查后的數(shù)據(jù)寫入到RTC中
	write_RTC_addr( RTC_ADDR_SECOND, 0x03, buf );

	// 返回成功
	return APP_DRV_OK;
}

/************************************************************************/
/*	設(shè)置 年月日星期
  input:
			pDate_t	[in]	日期的時間指針
  output:
			0 成功, 非0值失敗  
  func:
			進行日期星期的設(shè)置
                                                                        */
/************************************************************************/
static UINT16 SPMP_RTC_SetY_M_D_W( struct RTCdate_t *pDate_t )
{
	UINT8 buf[0x10];
	
	// 判斷輸入?yún)?shù)是否合法
	if (NULL == pDate_t) {
		ERROR_OUTPUT(("set date err1!\r\n"));
		return APP_DRV_ERR;		
	}
	
	buf[0]	= (UINT8) pDate_t ->Week;
	buf[1]	= (UINT8) pDate_t ->Day;
	buf[2]	= (UINT8) pDate_t ->Month;

	// 如果是HEX 模式, 需要進行格式轉(zhuǎn)換
	if ( DATA_FORMAT_HEX == get_data_format() ) 
	{
		buf[3] = (UINT8) (pDate_t->Year - BASE_YEAR_HEX);
	}
	else
	{
		buf[3] = (UINT8) (pDate_t->Year & 0xff);
	}

	// 如果是HEX 模式, 需要進行格式轉(zhuǎn)換
	if ( DATA_FORMAT_HEX == get_data_format() ) 
	{
		hex_2_bcd(buf, buf, 0x04);
	}

	// 判斷輸入的時間值是否合法
	if ( (buf[0] >0x07) || (buf[1]>0x31) 
		|| (buf[2] >0x12) || (buf[2] >0x99)) 
	{
		ERROR_REPORT;
		return APP_DRV_ERR;				
	}

	// 將檢查后的數(shù)據(jù)寫入到RTC中
	write_RTC_addr( RTC_ADDR_WEEK, 0x04, buf );

	// 返回成功
	return APP_DRV_OK;
}

/************************************************************************/
/*	輸入一個RTC的內(nèi)部地址, 數(shù)據(jù)長度,源數(shù)據(jù)的指針, 進行數(shù)據(jù)的寫入動作 

  input:
			rtc_internal_add	[in]	RTC 模塊的內(nèi)部地址
			len					[in]	需要讀取的數(shù)據(jù)的字節(jié)總數(shù)
			pbuf				[in]	指針 存放讀到的數(shù)據(jù)
  output:
			0 成功, 非0值失敗
  func:
			制定RTC的內(nèi)部地址和長度,進行數(shù)據(jù)的讀取
                                                                        */
/************************************************************************/
static UINT16 write_RTC_addr(UINT8 rtc_internal_add, UINT8 len, UINT8 *pbuf)
{
	UINT8 i;

	// 判斷輸入?yún)?shù)是否正常
	if ((rtc_internal_add > RTC_INTERNAL_ADDR_MAX)
		|| !len
		|| (NULL == pbuf)) 
	{
		ERROR_OUTPUT(("wr rtc err!\r\n"));
		return APP_DRV_ERR;
	}

	//  Start 	
	i2c_start();
	//  Send RTC address
	send_rtc_addr(I2C_RTC_ADDR, FLAG_WRITE_DATA);

	// send start addr and transmission mode	
	i = rtc_internal_add;
	i <<= 0x04;					// address high 4 bit
	i |= RTC_WRITE_MODE_0;		// 0th mode of transmission
	i2c_byte_send( i );				

	// 進行數(shù)據(jù)的寫入過程	
	for(i=0x00; i<len; i++)
	{
		i2c_byte_send(pbuf[i]);
	}

	// Stop
	i2c_stop();

	return APP_DRV_OK;
}

/************************************************************************/
/*	輸入一個RTC的內(nèi)部地址, 和想要讀取的數(shù)據(jù)的長度, 
	將數(shù)據(jù)保存到數(shù)據(jù)的地址指針保存的地方

  input:
			rtc_internal_add	[in]	RTC 模塊的內(nèi)部地址
			len					[in]	需要讀取的數(shù)據(jù)的字節(jié)總數(shù)
			pbuf				[out]	指針 存放讀到的數(shù)據(jù)

  output:
			0 成功, 非0值失敗
  func:
			制定RTC的內(nèi)部地址和長度,進行數(shù)據(jù)的讀取
                                                                        */
/************************************************************************/
static UINT16 read_RTC_addr(UINT8 rtc_internal_add, UINT8 len, UINT8 *pbuf)
{
	UINT8 i,ack;
	UINT8 *ptemp;

	// 判斷輸入?yún)?shù)是否正常
	if ((rtc_internal_add > RTC_INTERNAL_ADDR_MAX)
		|| !len
		|| (NULL == pbuf)) 
	{
		ERROR_OUTPUT(("rd rtc err!\r\n"));
		return APP_DRV_ERR;
	}

	
	//  Start 	
	i2c_start();

	//  Send RTC address
	send_rtc_addr(I2C_RTC_ADDR, FLAG_WRITE_DATA );

	// send start addr and transmission mode	
	i = rtc_internal_add;
	i <<= 0x04;					// address high 4 bit
	i |= RTC_READ_MODE_4;		// 4th mode of transmission
	i2c_byte_send( i );				

	ptemp = pbuf;
	// read data	
	for(i=0x00; i<len; i++)
	{
		i2c_byte_receive(ptemp+i);	// read one byte data

		ack = LOW_LEVEL;		
		if (i == (len -1))
		{
			ack = HIGH_LEVEL;
		}	

		i2c_read_ack(ack);
	}

	// i2c stop
	i2c_stop();

	// return OK!
	return APP_DRV_OK;
}

/************************************************************************/
/* 發(fā)送 RTC 的設(shè)備地址
  input:
			RTCAddr	[in]	RTC的設(shè)備地址
			RWFlag	[in]	數(shù)據(jù)的讀寫標志
							0 表示進行數(shù)據(jù)的寫入動作
							1 表示進行數(shù)據(jù)的讀出動作
  output:
			void 
  func:
                                                                        */
/************************************************************************/
static void send_rtc_addr(UINT8 Addr, UINT8 Flag)
{
	UINT8 data;

?? 快捷鍵說明

復(fù)制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
亚洲乱码日产精品bd| 欧美精品粉嫩高潮一区二区| 欧美一区二区三区在线看| 一区二区三区日韩欧美| 色婷婷精品久久二区二区蜜臂av| 国产精品久久夜| 96av麻豆蜜桃一区二区| 亚洲欧美激情在线| 欧美在线一区二区三区| 午夜精品福利在线| 欧美电视剧在线看免费| 美女精品一区二区| 日韩一区二区三区三四区视频在线观看| 日韩综合在线视频| 精品美女被调教视频大全网站| 国产一区二区三区四| 国产欧美精品在线观看| 日本精品一区二区三区高清 | 白白色亚洲国产精品| 亚洲啪啪综合av一区二区三区| 色综合咪咪久久| 午夜一区二区三区在线观看| 日韩欧美国产综合| 99麻豆久久久国产精品免费| 亚洲激情在线播放| 日韩女优av电影在线观看| 成人毛片视频在线观看| 亚洲一区自拍偷拍| 欧美精品一区二区三区高清aⅴ | 欧美在线视频你懂得| 亚洲成人一区二区在线观看| 精品国产乱子伦一区| av电影在线观看完整版一区二区| 亚洲不卡av一区二区三区| 久久在线观看免费| 在线观看一区不卡| 国产综合久久久久久鬼色| 亚洲欧美日韩国产综合在线| 欧美电视剧免费观看| 一本大道久久a久久综合婷婷| 日韩精品高清不卡| 国产精品久久久久久久久免费桃花 | 自拍偷在线精品自拍偷无码专区| 欧亚洲嫩模精品一区三区| 久久不见久久见中文字幕免费| 亚洲欧美在线视频观看| 日韩精品一区二区三区视频在线观看 | 亚洲一区二区3| 久久综合色婷婷| 精品视频一区三区九区| 成+人+亚洲+综合天堂| 久久99国产精品免费网站| 亚洲国产欧美另类丝袜| 中文字幕一区二区三区av| 日韩欧美激情四射| 91精品国产综合久久香蕉麻豆| 91在线视频官网| 国产在线一区观看| 蜜桃视频第一区免费观看| 亚洲午夜在线视频| 国产精品的网站| 精品国产一区二区三区不卡| 欧美色图在线观看| 色综合天天视频在线观看| 国产精品亚洲专一区二区三区 | 国产精品久久久久久亚洲毛片| 精品人伦一区二区色婷婷| 欧美精品一二三| 日本电影欧美片| 成人激情小说乱人伦| 国产一区二区三区电影在线观看| 日韩不卡一区二区| 视频一区二区中文字幕| 亚洲观看高清完整版在线观看| 亚洲欧洲精品天堂一级| 中文字幕欧美三区| 久久久一区二区| 国产欧美日韩三区| 欧美经典一区二区| 欧美激情在线一区二区| 国产午夜精品久久久久久久| 久久久噜噜噜久久中文字幕色伊伊| 日韩一区和二区| 日韩精品一区在线观看| 精品日韩一区二区三区| 久久久久综合网| 国产女人18毛片水真多成人如厕 | 不卡av在线免费观看| 国产福利一区二区三区视频 | 天堂影院一区二区| 亚洲二区在线观看| 日日噜噜夜夜狠狠视频欧美人| 亚洲成人资源网| 亚洲动漫第一页| 五月婷婷久久丁香| 裸体一区二区三区| 国产在线播精品第三| 成人午夜碰碰视频| 91极品美女在线| 制服丝袜成人动漫| 久久婷婷国产综合精品青草| 国产欧美一区二区精品久导航| 成人欧美一区二区三区视频网页| 曰韩精品一区二区| 免费在线视频一区| 大尺度一区二区| 欧美亚洲国产怡红院影院| 制服丝袜亚洲播放| 亚洲国产精品二十页| 一区二区在线观看免费视频播放| 亚洲一本大道在线| 国产精品伊人色| 日本韩国一区二区三区视频| 欧美精品久久久久久久多人混战| 精品sm捆绑视频| 亚洲男人的天堂在线观看| 日本成人在线电影网| 国产在线精品免费av| 91老师国产黑色丝袜在线| 欧美精选午夜久久久乱码6080| 久久久精品免费网站| 亚洲欧美日韩国产手机在线| 日韩成人一区二区| 国产黄色精品网站| 欧美三级蜜桃2在线观看| 精品国产乱码久久久久久牛牛 | 欧美午夜电影一区| 欧美精品一区二区三区在线播放| 亚洲精品午夜久久久| 国产九色精品成人porny | 国产欧美日产一区| 亚洲大型综合色站| 成人精品免费看| 日韩亚洲欧美成人一区| 国产精品久久久久天堂| 麻豆精品新av中文字幕| 在线免费亚洲电影| 亚洲国产精品高清| 美女网站色91| 欧美写真视频网站| 国产精品久久久久永久免费观看 | 国产亚洲欧洲997久久综合| 亚洲午夜av在线| av动漫一区二区| 国产欧美精品一区aⅴ影院| 图片区小说区区亚洲影院| 99久久久精品| 久久久久青草大香线综合精品| 天天综合日日夜夜精品| 91蜜桃网址入口| 国产欧美精品一区二区色综合 | 亚洲成在线观看| 91麻豆成人久久精品二区三区| 久久久久久久久97黄色工厂| 奇米色777欧美一区二区| 欧洲一区二区三区在线| 亚洲视频一区在线| www.性欧美| 中文字幕av一区二区三区| 国产一区二区三区最好精华液| 欧美疯狂性受xxxxx喷水图片| 一区二区三区中文字幕在线观看| k8久久久一区二区三区| 欧美激情中文字幕| 粗大黑人巨茎大战欧美成人| 精品国产免费一区二区三区四区| 免费久久99精品国产| 欧美精品v国产精品v日韩精品| 亚洲成人福利片| 欧美区视频在线观看| 亚洲国产va精品久久久不卡综合| 欧美午夜不卡在线观看免费| 亚洲一区二区三区四区的| 欧美伊人久久大香线蕉综合69| 伊人色综合久久天天人手人婷| 91免费小视频| 亚洲一区二区3| 91精品婷婷国产综合久久竹菊| 日韩成人一级大片| 精品成人a区在线观看| 国产福利一区在线| 国产精品美女视频| 色综合久久综合网欧美综合网| 一区二区三区色| 5566中文字幕一区二区电影| 久久丁香综合五月国产三级网站| 日韩免费看的电影| 国产成人精品aa毛片| 17c精品麻豆一区二区免费| 一本一道综合狠狠老| 亚洲午夜日本在线观看| 欧美精品日韩精品| 国模娜娜一区二区三区| 国产精品久久综合| 精品视频999| 麻豆国产精品777777在线| 国产三级欧美三级| 色综合av在线| 精品一区二区三区在线观看| 欧美韩国日本一区|