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

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

?? pccard.c

?? 三星 s3c6400測試代碼
?? C
?? 第 1 頁 / 共 3 頁
字號:
/**************************************************************************************
* 
*	Project Name : S3C6400 Validation
*
*	Copyright 2006 by Samsung Electronics, Inc.
*	All rights reserved.
*
*	Project Description :
*		This software is only for validating functions of the S3C6400.
*		Anybody can use this software without our permission.
*  
*--------------------------------------------------------------------------------------
* 
*	File Name : pccard.c
*  
*	File Description : This file implements the driver functions for CF Controller and PCCARD mode on it.
*
*	Author : Sunil,Roe
*	Dept. : AP Development Team
*	Created Date : 2007/1/17
*	Version : 0.1 
* 
*	History
*	- Created(Sunil,Roe 2007/1/17)
*   
**************************************************************************************/

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <ctype.h>

#include "def.h"
#include "option.h"
#include "library.h"
#include "sfr6400.h"
#include "system.h"
#include "intc.h"
#include "gpio.h"
#include "sysc.h"

#include "timer.h"
#include "cf.h"
#include "pccard.h"


#define DBG_PCCARD 0

#ifdef DBG_PCCARD
#define DbgPccard(x) printf x
#else
#define DbgPccard(x) 0;
#endif


// PC card SFR base
#define PCCARD_SFR_BASE	CFCON_BASE+0x1820

// PC Card Memory map
#define PCCARD_ATT_BASE	CFCON_BASE					// refer to attribute memory region
#define PCCARD_IO_BASE		CFCON_BASE+0x800  			// refer to IO region
#define PCCARD_MEM_BASE	CFCON_BASE+0x1000 			// refer to common memory region

#define PCCARD_MEM_MODE		0
#define PCCARD_IO_MODE1		1
#define PCCARD_IO_MODE2		2
#define PCCARD_IO_MODE3		3




/*=========================================================================
 *        	             I/O configuration address
 *=========================================================================
 */

#define PCCARD_ATT_CONFIG_BASE		(PCCARD_ATT_BASE + 0x200)
#define PCCARD_ATT_CONFIG_OPTION		(PCCARD_ATT_CONFIG_BASE)
#define PCCARD_ATT_CONFIG_STATUS		(PCCARD_ATT_CONFIG_BASE + 0x2)
#define PCCARD_ATT_CONFIG_REPLACE	(PCCARD_ATT_CONFIG_BASE + 0x4)
#define PCCARD_ATT_CONFIG_SOCKET		(PCCARD_ATT_CONFIG_BASE + 0x6)

#define PCCARD(__n) 				( ( volatile oPCCARD_REGS * ) ( g_paPCCARDSFRBase[__n] ) )
#define PCCARD_ATTR(__n) 		( ( volatile oPCCARDATT_REGS * ) ( g_paPCCARDATTBase[__n] ) )
#define PCCARD_TASKFILE(__n) 	( ( volatile oPCCARDTAKSFILE_REGS * ) ( g_paPCCARDTaskFileBase[__n] ) )

typedef struct tag_PCCARD_REGS
{
	u32 rrPCCARD_CFG;		// PCCARD configuration & status register
	u32 rrPCCARD_INT;		// PCCARD interrupt mask & source register
	u32 rrPCCARD_ATTR;		// PCCARD attribute memory area operation timing config register
	u32 rrPCCARD_IO;		// PCCARD attribute memory area operation timing config register
	u32 rrPCCARD_COMM;		// PCCARD attribute memory area operation timing config register
} 
oPCCARD_REGS;

typedef struct tag_PCCARDATT_REGS
{
	u16 rPCCARD_CONFIG_OPTION;		// PCCARD configuration option register (offset : 0x0)
	u16 rPCCARD_CONFIG_STATUS;		// PCCARD configuration status register (offset : 0x2)
	u16 rPCCARD_CONFIG_REPLACE;		// PCCARD pin replacement register (offset : 0x4)
	u16 rPCCARD_CONFIG_SOCKET;		// PCCARD socket copy register (offset : 0x6)
} 
oPCCARDATT_REGS;

typedef struct tag_PCCARDTAKSFILE_REGS
{
	u8 rPCCARD_DATA;		// TaskFile Register : Data register
	u8 rPCCARD_FEATURE;	// TaskFile Register : Feature register
	u8 rPCCARD_SECTOR;		// TaskFile Register : Sector count register
	u8 rPCCARD_LOWLBA;		// TaskFile Register : Sector Number register
	u8 rPCCARD_MIDLBA;		// TaskFile Register : Cylinder low register
	u8 rPCCARD_HIGHLBA;	// TaskFile Register : Cylinder high register
	u8 rPCCARD_DEVICE;		// TaskFile Register : Drive head register
	u8 rPCCARD_STATUS;		// TaskFile Register : Status register
	u8 rPCCARD_COMMAND;	// TaskFile Register : Command register
} 
oPCCARDTAKSFILE_REGS;
 
// define global variables
static void *				g_paPCCARDSFRBase[PCCARD_CONNUM];
static void *				g_paPCCARDATTBase[PCCARD_CONNUM];
static void *				g_paPCCARDTaskFileBase[PCCARD_CONNUM];
extern volatile PCCARD_oInform	g_oaPCCARDInform[];
extern u8 				g_ucPCCardConNum;

//=========================================================================
//					          	          PCCARD Controller AREA
//=========================================================================
/*---------------------------------- Init Functions  ---------------------------------*/
//////////
// Function Name : PCCARD_Init
// Function Description : This function initializes a certain PCCARD Controller.
// Input : 	ucCon - PCCARD Controller Number 
// Output : 	TRUE 	- Memory Device is reset
//			FALSE	- Memory Device is not reset because of ERROR
// Version : v0.1
bool	PCCARD_Init(u8 ucCon)
{
	u32 uSFRBaseAddress;			// for PCCARD Controller Base Register
//	u32 uTaskFileBaseAddress;		// for Task File Base Register
	u32 uATTConfigBaseAddress;		// for Attribute memory Base register

	Assert( (ucCon == PCCARD_CON0) );

	if(ucCon == PCCARD_CON0)
	{
		uSFRBaseAddress			= PCCARD_SFR_BASE;
		uATTConfigBaseAddress	= PCCARD_ATT_CONFIG_BASE;
//		g_oaPCMInform[ucCon].ucDMANum		= NUM_DMA0;
//		g_oaPCMInform[ucCon].ucDMACon 		= DMA0;
//		g_oaPCMInform[ucCon].ucDMATxSrc		= DMA0_PCM0_TX;
//		g_oaPCMInform[ucCon].ucDMARxSrc		= DMA0_PCM0_RX;
	}
	else
	{
		return FALSE;
	}

	// EBI Setup for CF controller	
	CF_SetEBI(INDIRECT_MODE);

	PCCARD_SetSFRBaseAddr(ucCon, uSFRBaseAddress);
//	PCCARD_SetTaskFileBaseAddr(ucCon, uTaskFileBaseAddress);
	PCCARD_SetAttConfigBaseAddr(ucCon, uATTConfigBaseAddress);
	// Initialize PCM Buffer
	PCCARD_InitBuffer(ucCon);
	PCCARD_InitPort(ucCon);
	
	return TRUE;	
}

//////////
// Function Name : PCCARD_InitBuffer
// Function Description : This function initializes buffers used by PCM Controller.
// Input : 	ucCon - PCCARD Controller Number 
// Output : 	NONE
// Version : v0.1
void PCCARD_InitBuffer(u8 ucCon)
{
	g_oaPCCARDInform[ucCon].puPCCARDWriteBuf = (u32*) CF_WRITE_BUF;
	g_oaPCCARDInform[ucCon].puPCCARDReadBuf = (u32*) (CF_WRITE_BUF + 0x400000); 
}

//////////
// Function Name : PCCARD_InitPort
// Function Description : 
//   This function Initialize ports as PCCARD.
// Input : ucCon - PCCARD Controller Number 
// Output : NONE
// Version : v0.1 
void PCCARD_InitPort(u8 ucCon)
{
	// GPIO_M[5] (XhiINTR) should be output low in order to connect Xm0OEata to nOE_CF signal.
	// (refer to the unit TS5A3159_SPDT(U613) in SMDK6400 Rev0.1's schematic page 7)
	GPIO_SetFunctionEach(eGPIO_M, eGPIO_5, 1);	// set XhiINTR/GPM5 as output
	GPIO_SetDataEach(eGPIO_M, eGPIO_5 , 0); 		//GPM[5] -> Low	
	
	switch(ucCon)
	{
		case PCCARD_CON0 :
			//--- CF controller - PC card mode setting ---//
			// Output pad disable, Card power off, PC card mode
			CF_SetMUXReg(eCF_MUX_OUTPUT_DISABLE, eCF_MUX_CARDPWR_OFF, eCF_MUX_MODE_PCCARD);
			DelayfrTimer(micro, 100);	// 100us delay
			// Output pad enable, Card power off, PC card mode
			CF_SetMUXReg(eCF_MUX_OUTPUT_ENABLE, eCF_MUX_CARDPWR_OFF, eCF_MUX_MODE_PCCARD);
			DelayfrTimer(micro, 100);	// 100us delay
			// Card Power on (PC Card mode)
			CF_SetMUXReg(eCF_MUX_OUTPUT_ENABLE, eCF_MUX_CARDPWR_ON, eCF_MUX_MODE_PCCARD);

			// wait for at least 20ms (SanDisk: 25ms, MicroDrive: 125ms, Hagiwara: )
			// No other method available.
			DelayfrTimer(milli, 125);	// 125ms delay
			break;
		default :
			break;
	}

}

//////////
// Function Name : PCCARD_ReturnPort
// Function Description : 
//   This function Initialize ports as default GPIO(input).
// Input : ucCon - PCCARD Controller Number 
// Output : NONE
// Version : v0.1 
void PCCARD_ReturnPort(u8 ucCon)
{
	switch(ucCon)
	{
		case PCCARD_CON0 :
//			GPIO_SetFunctionAll(eGPIO_D, 0x0, 0x0);
			break;
		default :
			break;
	}
	CF_SetMUXReg(eCF_MUX_OUTPUT_DISABLE, eCF_MUX_CARDPWR_OFF, eCF_MUX_MODE_PCCARD);

	// GPIO_M[5] (XhiINTR) should be output high in order to connect VDD_SMEM to nOE_CF signal, 
	// because Xm0OEata would be zero if the state of CF card is a TrueIDE mode.
	// So, in order to avoid making low state input of glue logic, nOE_CF should be connected to VDD_SMEM.	
	// (refer to the unit SN74AUC2G08(U607) in SMDK6400 Rev0.1's schematic page 7)
	GPIO_SetFunctionEach(eGPIO_M, eGPIO_5, 1);	// set XhiINTR/GPM5 as output
	GPIO_SetDataEach(eGPIO_M, eGPIO_5 , 1); 		//GPM[5] -> High	
	
}

/*---------------------------------- APIs of PCCARD_CNFG&STATUS Registers ---------------------------------*/
//////////
// Function Name : PCCARD_SetConfig
// Function Description : This function sets up PCCARD Control Register.
// Input : 	ucCon - PCCARD Controller Number
//			ePccardWidth - 8bit/16bit selection
// Output : 	NONE
// Version : v0.1
void PCCARD_SetConfig(u8 ucCon, ePCCARD_WIDTH ePccardWidth)
{
	u32		uRegValue = 0;

	uRegValue = PCCARD_GetRegValue(ucCon, ePCCARD_CNFG_STATUS);
	uRegValue = uRegValue & ~(0x1f<< 8 ) | (0<< 12) | (1<<11) | (ePccardWidth<<10) | (ePccardWidth<<9) | (ePccardWidth<<8);		

	PCCARD_SetRegValue(ucCon, ePCCARD_CNFG_STATUS, uRegValue);		

}

/*---------------------------------- APIs of PCCARD_INTMSK&SRC Registers ---------------------------------*/
//////////
// Function Name : PCCARD_ResetCard
// Function Description : This function resets CF Card in PCCARD mode.
// Input : 	ucCon 		- PCCARD Controller Number
//			ucResetFlag	- RESET/NORESET
// Output : 	NONE
// Version : v0.1
void PCCARD_ResetCard(u8 ucCon, u8 ucResetFlag)
{
	u32		uRegValue = 0;

	uRegValue = PCCARD_GetRegValue(ucCon, ePCCARD_CNFG_STATUS);
	uRegValue = uRegValue & ~(0x1<< 13 ) | (ucResetFlag<<13);		

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
精品一区二区三区在线观看| 99久久综合狠狠综合久久| 中文字幕欧美激情一区| 欧美日韩国产小视频在线观看| 国产一区三区三区| 五月天网站亚洲| 国产精品国产三级国产aⅴ入口 | 麻豆精品精品国产自在97香蕉| 国产精品不卡视频| 久久久久久电影| 中文字幕中文字幕一区二区| 欧美精品一区二区三区一线天视频| 欧美偷拍一区二区| 色综合天天综合在线视频| 国产在线精品一区在线观看麻豆| 午夜精品爽啪视频| 亚洲另类中文字| 国产日产精品一区| 久久久久久久综合狠狠综合| 日韩一区二区在线观看视频播放| 欧美色视频在线| 91麻豆文化传媒在线观看| 国产成人av一区| 国产剧情一区二区| 国产成人在线影院| 国产成人亚洲综合色影视| 久久国产精品第一页| 轻轻草成人在线| 五月天激情小说综合| 午夜a成v人精品| 亚洲bdsm女犯bdsm网站| 亚洲国产日产av| 亚洲成人动漫一区| 视频在线观看一区二区三区| 亚洲狠狠爱一区二区三区| 亚洲一区二区三区四区在线观看 | 国产亚洲欧美一级| 久久久久久久久久久久久女国产乱| 91精品国产乱| 日韩三级精品电影久久久| 日韩欧美综合在线| 精品理论电影在线观看| 精品国产乱码久久久久久久| 久久久久久久一区| 中文av一区特黄| 亚洲欧美中日韩| 一区二区三区色| 亚洲aaa精品| 久久国内精品自在自线400部| 韩日欧美一区二区三区| 国产精品一区二区在线看| 成人不卡免费av| 色乱码一区二区三区88| 欧美日韩综合在线免费观看| 日韩亚洲欧美中文三级| 2欧美一区二区三区在线观看视频| 久久久久九九视频| 亚洲同性同志一二三专区| 亚洲国产精品综合小说图片区| 日韩成人av影视| 国产成人激情av| 一本久久精品一区二区| 欧美欧美午夜aⅴ在线观看| 精品毛片乱码1区2区3区| 国产精品色哟哟网站| 夜夜操天天操亚洲| 久久66热re国产| 99久久免费精品| 成人免费小视频| 亚洲无线码一区二区三区| 蜜桃av一区二区| 成人动漫在线一区| 91精品国产高清一区二区三区| 久久久久久久一区| 亚洲无线码一区二区三区| 国产一区二三区好的| 一本大道av伊人久久综合| 日韩欧美黄色影院| 一色桃子久久精品亚洲| 日韩制服丝袜av| 国产成人精品午夜视频免费| 欧美午夜不卡在线观看免费| 久久免费看少妇高潮| 亚洲一区二区在线观看视频| 国产一级精品在线| 欧美私模裸体表演在线观看| 久久蜜臀中文字幕| 亚洲成人自拍偷拍| yourporn久久国产精品| 欧美成人精品高清在线播放| 亚洲日本在线看| 国产资源精品在线观看| 欧美三级中文字| 国产精品污网站| 美女视频网站黄色亚洲| 一本大道av伊人久久综合| 欧美精品一区二区三区高清aⅴ | 欧美日韩成人一区二区| 国产精品高清亚洲| 久久er精品视频| 欧美午夜精品久久久久久超碰 | 亚洲男人天堂一区| 国产乱码精品一区二区三区忘忧草 | 捆绑紧缚一区二区三区视频| 色999日韩国产欧美一区二区| 久久精品在这里| 蜜芽一区二区三区| 欧美三片在线视频观看| 亚洲免费观看高清完整版在线| 国产成人三级在线观看| 精品免费一区二区三区| 日韩精品电影在线| 欧美视频一区在线观看| 一区二区三区四区在线| av不卡在线播放| 欧美国产日韩在线观看| 国产一区二区三区综合| 日韩精品一区在线| 日本不卡的三区四区五区| 欧美三级在线播放| 亚洲一区二区三区视频在线播放| 不卡一区中文字幕| 国产精品毛片a∨一区二区三区| 国产美女精品在线| 久久久一区二区| 九九热在线视频观看这里只有精品| 在线播放中文一区| 视频一区在线视频| 91精品国产综合久久精品麻豆 | 激情成人午夜视频| 精品国产一二三| 蜜臀av性久久久久蜜臀av麻豆 | 亚洲欧美日韩在线不卡| 99久久夜色精品国产网站| 国产精品高清亚洲| 色婷婷综合激情| 一区二区三区中文字幕电影 | 亚洲成人激情av| 欧美精品v国产精品v日韩精品| 婷婷国产在线综合| 欧美久久一区二区| 免费成人在线播放| 亚洲精品一线二线三线无人区| 国产精品亚洲一区二区三区在线| 久久久久97国产精华液好用吗| 国产裸体歌舞团一区二区| 欧美极品xxx| 97精品国产露脸对白| 亚洲夂夂婷婷色拍ww47| 555夜色666亚洲国产免| 久久精品国产秦先生| 国产午夜精品一区二区| 99在线精品观看| 亚洲va欧美va人人爽午夜| 欧美一区二区精品在线| 国产在线不卡视频| 亚洲视频1区2区| 欧美精品自拍偷拍动漫精品| 久久成人综合网| 国产精品成人一区二区艾草| 欧美日韩专区在线| 精品一区二区国语对白| 国产精品国产三级国产aⅴ中文 | 日韩精品一区国产麻豆| 成人性视频网站| 亚洲成人777| 久久精品一二三| 日本精品视频一区二区三区| 日本不卡高清视频| 国产精品的网站| 欧美伦理电影网| 国产91丝袜在线播放0| 亚洲精品国产a| www激情久久| 91久久精品一区二区三| 久久福利资源站| 亚洲色图清纯唯美| 日韩欧美亚洲一区二区| 91片在线免费观看| 韩国av一区二区三区在线观看| 亚洲青青青在线视频| 日韩欧美一区二区在线视频| 91在线观看污| 国产乱子轮精品视频| 亚洲国产精品一区二区久久恐怖片| 欧美精品一区男女天堂| 欧美三级电影网站| 成人黄动漫网站免费app| 日韩av电影免费观看高清完整版在线观看| 国产欧美1区2区3区| 制服丝袜亚洲播放| 色婷婷亚洲精品| 国产一区二区三区av电影 | 国产一区二区三区综合| 午夜国产精品一区| 亚洲色大成网站www久久九九| 精品久久久久久久久久久久久久久久久 | 色综合天天综合在线视频| 麻豆精品视频在线观看免费| 一区二区理论电影在线观看|