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

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

?? ata.c

?? Cirrus Logic EP7312處理器部分控制程序。
?? C
?? 第 1 頁 / 共 2 頁
字號:
//****************************************************************************
//
// ATA.C - Routines read and write data to an ATAPI device.  
//
// Copyright (c) 2001 Cirrus Logic, Inc.
//
//****************************************************************************
#include "ep7312.h"
#include "lib7312.h"
#include "ata.h"

//
// see ATASimpleRegPacket()
//
unsigned char reg_atapi_reg_fr;  
unsigned char reg_atapi_reg_sc;  
unsigned char reg_atapi_reg_sn;  
unsigned char reg_atapi_reg_dh;  

//
// Global defines
//
REGCMDINFO reg_cmd_info;

//****************************************************************************
//                                                                         
//  Function Name: ATAInitializeInterface
//
//  Function Description: Initializes the EP7312 to perform accesses to the 
//                        ATA interface.
//
//****************************************************************************
void ATAInitializeInterface(void)
{
   unsigned long * volatile ulRegister = (unsigned long *)(HwBaseAddress + 
                                                           HwMemConfig2);
   
   //
   // Clear out the value of chip select 5 (bits 8-15) in the MemConfigReg2.
   //
   *ulRegister &= 0xFFFF00FF;

   //
   // Configure the EP7312's chip select for 8-bit bus width, 1 wait state for
   // random accesses, and 0 wait states for sequential accesses. 
   //
   *ulRegister |= 0x0000BE00;
}
 
//****************************************************************************
//                                                                   
//  Function Name: ATAReadCommandRegister	
//
//  Function Description: Reads an 8-bit value from an ATA command register.
//
//***************************************************************************
unsigned char ATAReadCommandRegister(unsigned char ucRegister)
{
   unsigned char * volatile pucRegister = (unsigned char *)(ATACommandBaseAddress +
                                                ucRegister);
   unsigned char ucData;   

   // 
   // Read and the return the contents of the register.
   //
   ucData = *pucRegister;

   //
   // SerialSendString("\rRead command register ");
   //
   return(ucData);
}

//***************************************************************************
// 
//  Function Name: ATAWriteCommandRegister
//
//  Function Description: Writes an 8-bit value to an ATA command register.
//
//***************************************************************************
void ATAWriteCommandRegister(unsigned char ucRegister, unsigned char ucData)
{
 
   unsigned char * volatile pucRegister = (unsigned char *)(ATACommandBaseAddress + 
                                                  ucRegister);

   // 
   // Write to the register.
   //
   *pucRegister = ucData;

   return;
}

//***************************************************************************
//   
//  Function Name: ATAReadControlRegister	
//
//  Function Description: Reads an 8-bit value from an ATA control register.
//
//***************************************************************************
unsigned char ATAReadControlRegister(unsigned char ucRegister)
{
   unsigned char * volatile pucRegister = (unsigned char *)(ATAControlBaseAddress +
                                                ucRegister);
   unsigned char ucData;

   // 
   // Read and the return the contents of the register.
   //
   ucData = *pucRegister;

   return(ucData);
}

//***************************************************************************
// 
//  Function Name: ATAWriteControlRegister
//	
//  Function Description: Writes an 8-bit value to an ATA control register.
//	
//***************************************************************************
void ATAWriteControlRegister(unsigned char ucRegister, unsigned char ucData)
{
   unsigned char * volatile pucRegister = (unsigned char *)(ATAControlBaseAddress + 
                                                  ucRegister);

   // 
   // Write to the register.
   //
   *pucRegister = ucData;

   return;
}

//***************************************************************************
// 
//  Function Name: ATAReadDataRegister
//	
//  Function Description: Reads 16-bit values from the ATA data register.
//
//***************************************************************************
unsigned long ATAReadDataRegister(unsigned short *pusBuffer, unsigned long ulCount)
{
   unsigned short * volatile pusRegister = (unsigned short *)(ATACommandBaseAddress + 
                                                  DATAREGISTER);
   unsigned long * volatile pulRegister = (unsigned long *)(HwBaseAddress +
                                                HwMemConfig2);
   unsigned long ulTempCount = 0;
   unsigned short winzips_temp = 0;		
   unsigned short status;			
   unsigned long ulTemp;

   //
   // Save the configuration for the ATA interface's chip select.
   //
   ulTemp = *pulRegister;
 
   // 
   // Read in the number of words specified by the ulCount parameter.
   //

   //
   // Wait for the DRQ bit in the ATA Status register to be set.
   //
   while(!(ATAReadCommandRegister(STATUSREGISTER) & ATADRQ));
 
   //
   // Configure the ATA interface's chip select to perform 16-bit accesses. 
   //
   *pulRegister &= 0xfffffcff;
   *pulRegister |= 0x00000100;

   while((ulTempCount<ulCount) && (ATAReadCommandRegister(STATUSREGISTER) & ATADRQ))
   {
       // 
       // Read in the data and increment the pointer.
       //
       *pusBuffer = *pusRegister;
       winzips_temp = *pusBuffer;
       pusBuffer++;

       //
       // Increment the count.
       //
       ulTempCount++;

       status = ATAReadCommandRegister(STATUSREGISTER);
      
   }

   //
   // Restore the chip select configuration.
   //
   *pulRegister = ulTemp;

   status = ATAReadCommandRegister(STATUSREGISTER);
   return(ulTempCount);
} 

//***************************************************************************
//   
//  Function Name: ATAWriteDataRegister
//	
//  Function Description: Writes 16-bit values to the ATA data register. 
//
//***************************************************************************
unsigned long ATAWriteDataRegister(unsigned short *pusBuffer, unsigned long ulCount)
{
   unsigned short * volatile pusRegister = (unsigned short *)(ATACommandBaseAddress + 
                                                  DATAREGISTER);
   unsigned long * volatile pulRegister = (unsigned long *)(HwBaseAddress +
                                                HwMemConfig2);
   unsigned long ulTempCount = 0;
   unsigned long ulTemp;
   unsigned short temp = 0;		

 
   //
   //Save the configuration for the ATA interface's chip select.
   //
   ulTemp = *pulRegister;
 
   //
   // Read in the number of words specified by the ulCount parameter.
   //

   //
   // Wait for the DRQ bit in the ATA Status register to be set.
   //
   while(!(ATAReadCommandRegister(STATUSREGISTER) & ATADRQ));
 
   //
   // Configure the ATA interface's chip select to perform 16-bit accesses. 
   //
   *pulRegister &= 0xfffffcff;
   *pulRegister |= 0x00000100;

   //
   // (ATAReadCommandRegister(STATUSREGISTER) & ATADRQ))
   //
   while (ulTempCount<ulCount) 
   {
      
       //
       // Read in the data and increment the pointer.
       //
       temp = *pusBuffer;
       *pusRegister = *pusBuffer;				
       pusBuffer++;

       //
       // Increment the count.
       //
       ulTempCount++;

   }

   //
   // Restore the chip select configuration.
   //
   *pulRegister = ulTemp;

   return(ulTempCount);
}

//***************************************************************************
//  
//  Function Name: ATASelectDevice	
//
//  Function Description: Must be called before any command is issued.
//
//***************************************************************************
void ATASelectDevice (int DeviceNumber)
{
   // 
   // Wait until BSY=0 and DRQ=0
   //
   while(ATAReadCommandRegister(STATUSREGISTER) & (ATABSY | ATADRQ));

   if(DeviceNumber == 0)
	ATAWriteCommandRegister(DEVICEHEADREGISTER, DEVICEHEAD_DEV0);
   else
	ATAWriteCommandRegister(DEVICEHEADREGISTER, DEVICEHEAD_DEV1);

   // 
   // Wait until BSY=0 and DRQ=0
   //
   while(ATAReadCommandRegister(STATUSREGISTER) & (ATABSY | ATADRQ));

return;
}

//*********************************************************************
// 
// Function Name: ATASoftReset
// 
// Function Description: Function perform an ATA soft reset sequence. 
// 
//*********************************************************************

void ATASoftReset(void)
{
   unsigned long ulIndex;

   //
   // Check for a clear BSY bit in the status register.
   //
   for(ulIndex=0;ulIndex<74000;ulIndex++);
   
   while(ATAReadCommandRegister(STATUSREGISTER) & ATABSY);

   //
   // Perform the reset.
   //
   ATAWriteControlRegister(DEVICECONTROLREGISTER, 0x06);

   for(ulIndex=0;ulIndex<500;ulIndex++);

   ATAWriteControlRegister(DEVICECONTROLREGISTER, 0x02);

   //
   // Wait for the soft reset to complete.
   //
   for(ulIndex=0;ulIndex<74000;ulIndex++);

   while(ATAReadCommandRegister(STATUSREGISTER) & (ATABSY | ATADRDY));
}

//************************************************************************
// 
// Function Name: ATADeviceReset
// 
// Function Description: Function performs an ATA device reset command.
// 
//************************************************************************
void ATADeviceReset(unsigned char ucDevice)
{
   while(ATAReadCommandRegister(STATUSREGISTER) & (ATABSY | ATADRQ));

   //
   // Select the device that is to be reset.
   //
   if(ucDevice == DEVICE0)
      ATAWriteCommandRegister(DEVICEHEADREGISTER, DEVICE0);
   else
      ATAWriteCommandRegister(DEVICEHEADREGISTER, DEVICE1);  
  
   //
   // Write the ATA Device Reset to the Command Register.
   //
   ATAWriteCommandRegister(COMMANDREGISTER, 0x08);
  
   //
   // Wait until the command is complete.
   //
   while(ATAReadCommandRegister(STATUSREGISTER) & ATABSY);
}

//*******************************************************************
//

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
91免费看视频| 欧美国产精品一区二区| 99久久精品国产网站| 国产精品白丝jk白祙喷水网站| 亚洲电影在线免费观看| 日韩理论片一区二区| 一区二区三区四区精品在线视频| 一区二区中文视频| 一区二区三区精品在线观看| 亚洲综合精品自拍| 奇米777欧美一区二区| 日日摸夜夜添夜夜添精品视频| 国产专区欧美精品| 久草精品在线观看| 欧美一区二区三区免费视频| 洋洋成人永久网站入口| 菠萝蜜视频在线观看一区| 日本一区二区三级电影在线观看| 中文字幕精品综合| 在线亚洲高清视频| 精品99一区二区| 91色porny在线视频| 久久99精品国产| 99精品久久99久久久久| 亚洲成人av电影在线| 精品99一区二区| 日本韩国一区二区三区视频| 免费在线看成人av| 亚洲国产精品高清| 欧美日韩亚洲高清一区二区| 视频一区二区三区入口| 欧美午夜精品一区二区三区| 久久综合狠狠综合久久激情| 亚洲女人****多毛耸耸8| 久久国产精品99久久人人澡| 色婷婷一区二区三区四区| 欧美日韩另类国产亚洲欧美一级| 久久香蕉国产线看观看99| 亚洲人成在线播放网站岛国| 国产精品乡下勾搭老头1| 日韩一级免费观看| 亚洲一区二区视频在线| a美女胸又www黄视频久久| 欧美成人a视频| 久久99久国产精品黄毛片色诱| 在线视频你懂得一区二区三区| 中文字幕免费观看一区| 国产黄色精品视频| 精品国内二区三区| 激情亚洲综合在线| 精品国产第一区二区三区观看体验| 图片区小说区区亚洲影院| 色婷婷精品久久二区二区蜜臀av| 一区二区三区在线免费观看| 成人蜜臀av电影| 国产精品入口麻豆九色| 91美女福利视频| 一区二区三区成人在线视频| 综合久久国产九一剧情麻豆| 国产欧美视频在线观看| 91精品国产aⅴ一区二区| 欧美三区在线观看| 国产精品99久| 9191成人精品久久| 视频在线在亚洲| 亚洲免费资源在线播放| 日韩国产一二三区| 精品国产污网站| 成人免费视频一区| 国产主播一区二区| 精品一区二区三区在线视频| 日韩电影在线免费看| 一区二区三区四区国产精品| 中文字幕一区二区三区四区| 国产女主播视频一区二区| 久久久久久久久免费| 欧美午夜精品免费| 狠狠色丁香九九婷婷综合五月| 久久嫩草精品久久久精品一| proumb性欧美在线观看| 日韩黄色一级片| 亚洲欧美在线高清| 久久影音资源网| 欧美日韩久久不卡| 国产成人精品一区二区三区四区| 亚洲va韩国va欧美va| 国产精品萝li| 欧美国产97人人爽人人喊| 欧美日韩成人在线| 欧美中文一区二区三区| 成人免费视频视频在线观看免费 | 精品在线播放午夜| 国产精品久久久久久久久搜平片 | 欧美人狂配大交3d怪物一区| 不卡av电影在线播放| 免费成人在线网站| 久久99久久99精品免视看婷婷 | 亚洲人成小说网站色在线| 91精品国产91久久久久久一区二区| 日韩一区二区在线免费观看| 日本韩国一区二区三区| 91精品国产综合久久久久| 麻豆成人免费电影| 欧美大片拔萝卜| 亚洲精品日日夜夜| 日韩欧美一区中文| 91片黄在线观看| 96av麻豆蜜桃一区二区| 日本久久精品电影| 欧美国产1区2区| 欧美日韩一区二区电影| 亚洲欧美另类小说视频| 欧美日本一区二区三区| 久久婷婷一区二区三区| 亚洲人成小说网站色在线| 日本美女一区二区三区| 国产不卡在线一区| 91福利国产精品| 精品电影一区二区三区| 亚洲欧美色一区| 美女免费视频一区二区| 91在线一区二区三区| 日本亚洲最大的色成网站www| 九九精品视频在线看| 成人免费毛片高清视频| 欧美日韩激情在线| 国产日韩影视精品| 国产日韩欧美高清在线| 亚洲精品国产成人久久av盗摄| 亚洲国产裸拍裸体视频在线观看乱了 | 在线播放日韩导航| 在线观看亚洲专区| 日本欧美在线观看| 亚洲欧洲国产专区| 日韩视频国产视频| 色婷婷综合久色| 国产九九视频一区二区三区| 亚洲国产综合在线| 久久久不卡影院| 精品欧美乱码久久久久久1区2区| 91丨porny丨中文| 国产主播一区二区| 久久不见久久见中文字幕免费| 亚洲综合一二区| 亚洲视频一二区| 国产精品你懂的在线欣赏| 欧美一区二区视频观看视频| 欧美性色欧美a在线播放| 97成人超碰视| 日韩二区三区四区| 91精品国产91久久久久久一区二区| 亚洲欧美日韩国产手机在线 | 国产一区二区三区日韩| 欧美精品在线观看一区二区| 久久99国内精品| 国产丝袜美腿一区二区三区| 在线观看亚洲一区| 国产精品毛片无遮挡高清| 奇米影视一区二区三区| 色综合亚洲欧洲| 在线亚洲+欧美+日本专区| 亚洲一区二区3| 日韩一区二区三区精品视频| 美女视频黄 久久| 国产精品蜜臀av| 欧美亚一区二区| 老司机午夜精品| 国产欧美精品一区二区色综合| 成人黄色国产精品网站大全在线免费观看| 欧美一级片免费看| 在线观看国产日韩| 成人av电影在线网| 精品国内片67194| 国产一区二区在线影院| 国产午夜精品在线观看| 国产成人av一区二区三区在线 | 韩国欧美国产一区| 日韩美女视频在线| 国产原创一区二区三区| 久久精品亚洲一区二区三区浴池| 国产成人在线视频播放| 国产精品久久久久久亚洲伦| 91麻豆免费观看| 亚洲综合精品久久| 日韩一区二区影院| 久久成人免费网站| 欧美一区二区三区免费| 国产毛片精品一区| 国产精品久久久久久久午夜片 | 国产亚洲综合av| 99视频精品免费视频| 一区二区高清视频在线观看| 欧美日韩黄色一区二区| 蜜臀99久久精品久久久久久软件| 久久久精品综合| 色综合天天性综合| 日本女人一区二区三区| 欧美国产成人精品| 欧美日韩日日摸| 国产丶欧美丶日本不卡视频|