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

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

?? ata_if.c

?? procyon改進版 mp3 方案
?? C
?? 第 1 頁 / 共 2 頁
字號:

//*****************************************************************
//
// File Name	: 'ata_if.c'
// Title			: IDE-ATA interface driver
// Author		: Pascal Stang
// Date			: 11/22/2000
// Version		: 0.1
// Target MCU	: ATmega103
// Editor Tabs	: 4
//
//*****************************************************************


#ifndef WIN32
	#include <io.h>
	#include <interrupt.h>
	#include <signal.h>
	#include <progmem.h>
#endif
#include "global.h"
#include "systimer.h"
#include "uart.h"

#include "ata_if.h"


//#define DEBUG_ATA	1

 
//----------------------------------------------------------------------------
// Select address and CS signals
//
// addressing bits
// 35 DA0	A0	0x01	Address Line 0
// 33 DA1	A1	0x02	Address Line 1
// 36 DA2	A2	0x04	Address Line 2
//
// chip selects
// 37 CS0	A3 0x08	Command Block Select
// 38 CS1	A4	0x10	Control Block Select
//
//
//----------------------------------------------------------------------------

struct
{
	u16 cyls;
	u08 heads;
	u08 sectors;
} ataDiskParam;


void ataInit(void)
{
	// initialize disk parameters
	ataDiskParam.cyls = ATA_DISKPARM_CLYS;
	ataDiskParam.heads = ATA_DISKPARM_HEADS;
	ataDiskParam.sectors = ATA_DISKPARM_SECTORS;
}

void ataDiskErr(void)
{
	unsigned char b;

	b = ataReadByte(ATA_REG_ERROR);	
	uartPrintStr("ATA Error: "); 
	uartPrintfu08(b); 
	uartPrintStr("\r\n");

/*	
	EOL();
	b = ReadBYTE(CMD,1);	
	PRINT("Error Reg : "); UART_Printfu08(b); EOL();
	b = ReadBYTE(CMD,2);
	PRINT("Sector Cnt: "); UART_Printfu08(b); EOL();
	b = ReadBYTE(CMD,3);
	PRINT("Sector Nbr: "); UART_Printfu08(b); EOL();
	b = ReadBYTE(CMD,4);
	PRINT("Cylindr Lo: "); UART_Printfu08(b); EOL();
	b = ReadBYTE(CMD,5);
	PRINT("Cylindr Hi: "); UART_Printfu08(b); EOL();
	b = ReadBYTE(CMD,6);
	PRINT("Device/Hd : "); UART_Printfu08(b); EOL();
	b = ReadBYTE(CMD,7);
	PRINT("Status    : "); UART_Printfu08(b); EOL();
*/
}


void ataPrintSector( u08 *Buffer)
{
	u08 i;
	u16 j;
	u08 *buf;
	u08 s;

	buf = Buffer;
	
	// print the low order address indicies
	uartPrintStr("     00 01 02 03 04 05 06 07 08 09 0A 0B 0C 0D 0E 0F  0123456789ABCDEF\r\n");
	uartPrintStr("     -----------------------------------------------  ---- ASCII -----\r\n");
	
	// print the data
	for(j=0; j<0x20; j++)
	{
		// print the high order address index for this line
		uartPrintfu16(j<<4);
		uartPrintStr(" ");

		// print the hex data
		for(i=0; i<0x10; i++)
		{
			uartPrintfu08(buf[(j<<4)+i]);
			uartPrintStr(" ");
		}
		
		// leave some space
		uartPrintStr(" ");

		// print the ascii data
		for(i=0; i<0x10; i++)
		{
			s = buf[(j<<4)+i]; 
			// make sure character is printable
			if(s >= 0x20)
			{
				uartPrintChar(s);
			}
			else
			{
				uartPrintChar(0x20);
			}

		}
		uartPrintStr("\r\n");
	}
}

void ataReadDataBuffer(u08 *Buffer, u16 numBytes)
{
	unsigned int i;

	//sbi(MCUCR, SRW);			// enable RAM waitstate

	// read data from drive
	for (i=0; i<(numBytes/16); i++)
	{
		// optimize by reading 16 bytes in-line before looping
		*Buffer++ = *((volatile unsigned char*) ATA_REG_BASE + ATA_REG_DATAL);
		*Buffer++ = *((volatile unsigned char*) ATA_REG_BASE + ATA_REG_DATAH);
		*Buffer++ = *((volatile unsigned char*) ATA_REG_BASE + ATA_REG_DATAL);
		*Buffer++ = *((volatile unsigned char*) ATA_REG_BASE + ATA_REG_DATAH);
		*Buffer++ = *((volatile unsigned char*) ATA_REG_BASE + ATA_REG_DATAL);
		*Buffer++ = *((volatile unsigned char*) ATA_REG_BASE + ATA_REG_DATAH);
		*Buffer++ = *((volatile unsigned char*) ATA_REG_BASE + ATA_REG_DATAL);
		*Buffer++ = *((volatile unsigned char*) ATA_REG_BASE + ATA_REG_DATAH);
		*Buffer++ = *((volatile unsigned char*) ATA_REG_BASE + ATA_REG_DATAL);
		*Buffer++ = *((volatile unsigned char*) ATA_REG_BASE + ATA_REG_DATAH);
		*Buffer++ = *((volatile unsigned char*) ATA_REG_BASE + ATA_REG_DATAL);
		*Buffer++ = *((volatile unsigned char*) ATA_REG_BASE + ATA_REG_DATAH);
		*Buffer++ = *((volatile unsigned char*) ATA_REG_BASE + ATA_REG_DATAL);
		*Buffer++ = *((volatile unsigned char*) ATA_REG_BASE + ATA_REG_DATAH);
		*Buffer++ = *((volatile unsigned char*) ATA_REG_BASE + ATA_REG_DATAL);
		*Buffer++ = *((volatile unsigned char*) ATA_REG_BASE + ATA_REG_DATAH);
	}
	//cbi(MCUCR, SRW);			// disable RAM waitstate
	
}

void ataWriteDataBuffer(u08 *Buffer, u16 numBytes)
{
	register unsigned char temp;
//	unsigned char temp;
	unsigned int i;

	//sbi(MCUCR, SRW);			// enable RAM waitstate

	// write data to drive
	for (i=0; i<(numBytes/16); i++) 	
	{
		// optimize by writing 16 bytes in-line before looping
		// keep byte order correct by using temp register
		temp = *Buffer++;
		*((volatile unsigned char*) ATA_REG_BASE + ATA_REG_DATAH) = *Buffer++;
		*((volatile unsigned char*) ATA_REG_BASE + ATA_REG_DATAL) = temp;
		temp = *Buffer++;
		*((volatile unsigned char*) ATA_REG_BASE + ATA_REG_DATAH) = *Buffer++;
		*((volatile unsigned char*) ATA_REG_BASE + ATA_REG_DATAL) = temp;
		temp = *Buffer++;
		*((volatile unsigned char*) ATA_REG_BASE + ATA_REG_DATAH) = *Buffer++;
		*((volatile unsigned char*) ATA_REG_BASE + ATA_REG_DATAL) = temp;
		temp = *Buffer++;
		*((volatile unsigned char*) ATA_REG_BASE + ATA_REG_DATAH) = *Buffer++;
		*((volatile unsigned char*) ATA_REG_BASE + ATA_REG_DATAL) = temp;
		temp = *Buffer++;
		*((volatile unsigned char*) ATA_REG_BASE + ATA_REG_DATAH) = *Buffer++;
		*((volatile unsigned char*) ATA_REG_BASE + ATA_REG_DATAL) = temp;
		temp = *Buffer++;
		*((volatile unsigned char*) ATA_REG_BASE + ATA_REG_DATAH) = *Buffer++;
		*((volatile unsigned char*) ATA_REG_BASE + ATA_REG_DATAL) = temp;
		temp = *Buffer++;
		*((volatile unsigned char*) ATA_REG_BASE + ATA_REG_DATAH) = *Buffer++;
		*((volatile unsigned char*) ATA_REG_BASE + ATA_REG_DATAL) = temp;
		temp = *Buffer++;
		*((volatile unsigned char*) ATA_REG_BASE + ATA_REG_DATAH) = *Buffer++;
		*((volatile unsigned char*) ATA_REG_BASE + ATA_REG_DATAL) = temp;
	}
	//cbi(MCUCR, SRW);			// disable RAM waitstate

}

u08 ataStatusWait(u08 mask, u08 waitStatus)
{
	register u08 status;

	delay(100);

	// wait for desired status
	while( ((status = ataReadByte(ATA_REG_CMDSTATUS1)) & mask) == waitStatus );

	return status;
}

//----------------------------------------------------------------------------
// Read one sector, identified by drive, head, track and sector
// Returns contents of the Error Register (0x00 is no error detected)
//---------------------------------------------------------------------------- 

unsigned char ataReadSectors(	unsigned char Drive, 
										unsigned char Head, 
										unsigned int Track,
										unsigned char Sector,
										unsigned int numsectors,
										unsigned char *Buffer)
{
  	unsigned char temp;

	// Wait for drive to be ready
	temp = ataStatusWait(ATA_SR_BSY, ATA_SR_BSY);

  	// Prepare parameters...
	ataWriteByte(ATA_REG_HDDEVSEL, 0xA0+(Drive ? 0x10:00)+Head); // CHS mode/Drive/Head
	ataWriteByte(ATA_REG_CYLHI, Track>>8);  		// MSB of track
	ataWriteByte(ATA_REG_CYLLO, Track);     		// LSB of track
  	ataWriteByte(ATA_REG_STARTSEC, Sector);    	// sector
	ataWriteByte(ATA_REG_SECCOUNT, numsectors);	// # of sectors

	// Issue read sector command...
  	ataWriteByte(ATA_REG_CMDSTATUS1, 0x21);

	// Wait for drive to be ready
	temp = ataStatusWait(ATA_SR_BSY, ATA_SR_BSY);

	if (temp & ATA_SR_ERR)
	{
		uartPrintStr("RD ERR\r\n");
		return 1;
	}

	// Wait for drive to request data transfer
	ataStatusWait(ATA_SR_DRQ, 0);

	// read data from drive
	ataReadDataBuffer(Buffer, 512*numsectors);

	// Return the error bit from the status register...
	temp = ataReadByte(ATA_REG_CMDSTATUS1);	// read status register

	return (temp & ATA_SR_ERR) ? 1:0;
}


unsigned char ataWriteSectors(	unsigned char Drive, 
											unsigned char Head, 

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
韩国中文字幕2020精品| 色综合久久中文综合久久97| 国产xxx精品视频大全| 99久久婷婷国产综合精品电影| 欧美人妇做爰xxxⅹ性高电影| 26uuu色噜噜精品一区二区| 亚洲精品视频观看| 国产夫妻精品视频| 日韩欧美国产一区在线观看| 一区二区三区日韩欧美| 蜜桃av一区二区在线观看| 91视频国产资源| 国产亚洲一区二区三区在线观看| 午夜国产精品一区| 91亚洲午夜精品久久久久久| 久久蜜桃一区二区| 亚洲狠狠爱一区二区三区| 丰满岳乱妇一区二区三区| 日韩一二在线观看| 亚洲一区在线视频| 91视频观看免费| 国产精品久久久久久久蜜臀 | 色天天综合久久久久综合片| 久久蜜桃香蕉精品一区二区三区| 麻豆精品视频在线观看视频| 欧美日韩精品二区第二页| 亚洲人精品一区| www.亚洲在线| 国产精品美女一区二区三区 | 26uuu色噜噜精品一区二区| 蜜臀av在线播放一区二区三区| 欧美日韩国产a| 亚洲成人激情社区| 欧美日本视频在线| 秋霞电影网一区二区| 日韩视频免费观看高清完整版在线观看 | 亚洲欧洲精品一区二区三区| 成人av在线播放网址| 欧美国产一区在线| 不卡电影免费在线播放一区| 国产精品色在线观看| 91麻豆国产福利精品| 亚洲第一二三四区| 51精品秘密在线观看| 免费久久精品视频| 国产女人18毛片水真多成人如厕| 成人免费毛片片v| 亚洲欧洲制服丝袜| 欧美三级电影一区| 美女脱光内衣内裤视频久久影院| 26uuu另类欧美亚洲曰本| 成人免费观看视频| 亚洲狠狠爱一区二区三区| 日韩午夜在线观看| 成人精品国产一区二区4080| 一区二区三区四区中文字幕| 91麻豆精品久久久久蜜臀| 久久爱www久久做| 国产精品国产自产拍在线| 91色在线porny| 视频一区二区中文字幕| 精品免费国产二区三区 | 久草这里只有精品视频| 国产精品乱码妇女bbbb| 欧美三区在线观看| 男人的j进女人的j一区| 国产欧美综合在线观看第十页| 97国产一区二区| 看片的网站亚洲| 国产精品毛片无遮挡高清| 欧美日韩国产综合一区二区| 国产成人免费视频精品含羞草妖精 | 国产亚洲欧美中文| 欧美亚洲国产一区二区三区va | 亚洲婷婷综合久久一本伊一区| 在线电影院国产精品| 东方aⅴ免费观看久久av| 丝袜国产日韩另类美女| 中日韩av电影| 欧美电视剧在线看免费| 色又黄又爽网站www久久| 国产一区二区三区久久久| 亚洲成人1区2区| 国产精品久久网站| 精品动漫一区二区三区在线观看| 色94色欧美sute亚洲线路一久| 激情综合色综合久久综合| 亚洲成人手机在线| 亚洲视频一二三区| 中文字幕精品综合| 欧美电影精品一区二区| 91精品国产免费| 在线影院国内精品| av综合在线播放| 国产99久久久国产精品潘金| 男女激情视频一区| 天天爽夜夜爽夜夜爽精品视频| 国产精品福利影院| 亚洲国产精品成人综合色在线婷婷| 欧美一卡二卡三卡| 91 com成人网| 777午夜精品免费视频| 色欧美88888久久久久久影院| 成人免费看视频| 成人性视频免费网站| 国产精品99久久久久久似苏梦涵 | 一区二区三区高清在线| 中文字幕一区二区三区av| 中文字幕成人av| 日本一区二区三区电影| 国产午夜亚洲精品羞羞网站| 久久久噜噜噜久噜久久综合| 精品粉嫩超白一线天av| 26uuu国产电影一区二区| 精品久久久影院| 精品日韩在线观看| 久久综合九色综合久久久精品综合| 日韩亚洲欧美综合| 久久久精品黄色| 国产精品三级视频| 国产精品无遮挡| 亚洲欧美综合色| 中文字幕一区二区三区精华液| 亚洲欧美视频一区| 夜夜爽夜夜爽精品视频| 天堂久久久久va久久久久| 日韩精品成人一区二区三区| 秋霞电影网一区二区| 国产精品18久久久久| caoporm超碰国产精品| 在线日韩av片| 欧美一区二区三区视频在线观看| 7777精品伊人久久久大香线蕉经典版下载 | 国产99久久久精品| 色偷偷88欧美精品久久久| 欧美色手机在线观看| 日韩欧美一级片| 日本一区二区三区在线不卡| 亚洲伦理在线免费看| 日韩av网站免费在线| 国产精品一区二区视频| 91丨九色丨尤物| 91麻豆精品国产91久久久| 精品国产sm最大网站| 亚洲欧美偷拍卡通变态| 麻豆专区一区二区三区四区五区| 在线观看中文字幕不卡| 欧美高清dvd| 欧美极品xxx| 亚洲成a天堂v人片| 国产另类ts人妖一区二区| 色婷婷综合久久久久中文一区二区 | 久久午夜羞羞影院免费观看| 亚洲日本一区二区| 久久精品国产亚洲aⅴ| 成人aaaa免费全部观看| 欧美视频第二页| 久久综合久久综合亚洲| 亚洲伦在线观看| 国产综合成人久久大片91| 色狠狠av一区二区三区| 精品国内片67194| 一区二区三区四区乱视频| 精品中文字幕一区二区| 91国偷自产一区二区三区成为亚洲经典| 欧美一区二区黄| 一区二区三区欧美激情| 国产精品99久久久久久似苏梦涵| 欧美日韩高清一区二区三区| 中文字幕不卡的av| 玖玖九九国产精品| 欧美网站大全在线观看| 中文字幕精品一区二区精品绿巨人| 日韩av不卡一区二区| 色94色欧美sute亚洲线路一久| 中国色在线观看另类| 国产综合色精品一区二区三区| 欧美中文字幕一区二区三区 | 蜜臀久久久久久久| 欧美最新大片在线看| 国产精品初高中害羞小美女文| 久久99精品久久久久久动态图| 欧美日韩在线电影| 亚洲精品乱码久久久久久黑人| 成人性色生活片| 精品成人免费观看| 久久69国产一区二区蜜臀| 欧美精品丝袜中出| 一区二区视频免费在线观看| 成人国产精品免费观看视频| 国产亚洲欧美在线| 福利一区在线观看| 国产亚洲美州欧州综合国| 国产精品综合网| 国产日韩一级二级三级| 国产福利一区二区三区视频在线| 精品国产乱码久久久久久久| 日本不卡一区二区| 欧美一区二区三区婷婷月色| 丝袜a∨在线一区二区三区不卡|