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

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

?? ata_if.c

?? 使用AVR單片機(jī)控制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, 

?? 快捷鍵說明

復(fù)制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
日本久久电影网| 成a人片国产精品| 欧美日韩午夜影院| 亚洲午夜精品久久久久久久久| 91丨porny丨首页| 一区二区高清免费观看影视大全 | 色综合久久九月婷婷色综合| 亚洲欧美福利一区二区| 91福利在线观看| 秋霞国产午夜精品免费视频| 制服丝袜日韩国产| 99久久综合狠狠综合久久| 欧美日韩三级在线| 美日韩黄色大片| 国产视频亚洲色图| 日本va欧美va精品| 精品久久免费看| 北岛玲一区二区三区四区| 久久久久国产成人精品亚洲午夜| 国产福利91精品| 亚洲综合色成人| 精品国产一区二区三区忘忧草 | 欧美一区二区三区色| 国产在线麻豆精品观看| 国产精品毛片大码女人| 欧美人体做爰大胆视频| 国产精品99久久久久久宅男| 亚洲影院理伦片| 久久夜色精品国产噜噜av| 色94色欧美sute亚洲线路一ni| 日本成人在线看| 亚洲视频免费观看| 欧美一个色资源| 91亚洲国产成人精品一区二区三 | 日韩电影一区二区三区四区| 国产日韩精品一区| 欧美日韩精品一区二区三区四区 | 欧美aaaaaa午夜精品| 国产精品区一区二区三区| 69堂成人精品免费视频| 成人看片黄a免费看在线| 天堂一区二区在线| 一区在线观看免费| 精品国产乱码91久久久久久网站| 91老师国产黑色丝袜在线| 久久99九九99精品| 五月天婷婷综合| 亚洲天堂网中文字| 国产欧美一区二区三区在线看蜜臀| 91麻豆精品国产自产在线观看一区| 99综合影院在线| 国产精品99久久久| 免费在线观看日韩欧美| 亚洲国产日韩一级| 亚洲欧美在线另类| 国产欧美精品区一区二区三区| 欧美疯狂性受xxxxx喷水图片| 91麻豆产精品久久久久久| 成人午夜精品在线| 国产成人午夜电影网| 麻豆成人久久精品二区三区小说| 中文字幕一区二区三区不卡 | 3atv一区二区三区| av成人免费在线| 日韩免费观看高清完整版在线观看| 91麻豆免费视频| 99麻豆久久久国产精品免费| 懂色av一区二区三区免费看| 韩日欧美一区二区三区| 男女男精品视频网| 日产国产欧美视频一区精品| 亚洲午夜久久久久久久久久久 | 在线视频一区二区三| 国产精品高清亚洲| 欧美精品一区二区三区高清aⅴ | 免费在线观看一区| 蜜桃一区二区三区在线观看| 亚洲一区二区中文在线| 亚洲精品v日韩精品| 亚洲素人一区二区| 亚洲精品写真福利| 亚洲精品国产一区二区三区四区在线| 国产精品久久久久影视| 中文字幕一区二区三区视频| 中文字幕日韩一区| 夜夜精品视频一区二区| 亚洲一区成人在线| 午夜天堂影视香蕉久久| 亚洲一二三区在线观看| 亚洲欧美国产毛片在线| 国产午夜三级一区二区三| 久久综合久久久久88| 久久久久久久久久美女| 国产精品少妇自拍| 一区二区三区四区蜜桃| 亚洲不卡在线观看| 久久精品国产第一区二区三区| 精品亚洲porn| 国产一区二区三区在线观看免费 | 亚洲主播在线观看| 首页综合国产亚洲丝袜| 美国三级日本三级久久99| 国产一区二区影院| 成人av在线看| 欧美日韩黄色一区二区| 欧美成人精品1314www| 国产三区在线成人av| 亚洲免费观看高清完整版在线 | 日日噜噜夜夜狠狠视频欧美人| 日本女优在线视频一区二区| 国产在线不卡一卡二卡三卡四卡| 成人免费视频caoporn| 欧美中文字幕不卡| 2021国产精品久久精品| 亚洲精品乱码久久久久| 精品一区二区精品| 91免费看视频| 欧美精品一区二区三区在线| 亚洲精品成人悠悠色影视| 免费人成黄页网站在线一区二区| 国产.欧美.日韩| 91精品综合久久久久久| 国产精品每日更新| 日韩av在线免费观看不卡| 成人午夜精品一区二区三区| 欧美一区二区三区免费视频| 国产精品每日更新在线播放网址| 全国精品久久少妇| 色婷婷综合在线| 国产丝袜在线精品| 日韩成人免费电影| 色婷婷激情一区二区三区| 精品国产精品一区二区夜夜嗨| 亚洲九九爱视频| 国产.欧美.日韩| 日韩欧美一区二区视频| 一级精品视频在线观看宜春院| 国产成人午夜片在线观看高清观看| 欧美日韩情趣电影| 亚洲免费观看高清完整版在线| 国产福利一区二区三区视频| 欧美三级乱人伦电影| 一区二区中文字幕在线| 黑人精品欧美一区二区蜜桃 | 国产激情精品久久久第一区二区| 在线电影国产精品| 一区二区三区四区蜜桃| 99在线视频精品| 欧美激情在线免费观看| 久久精品国产99久久6| 91精品中文字幕一区二区三区| 一区二区三区毛片| 97久久精品人人做人人爽| 久久精品视频一区二区三区| 久久99久久精品| 日韩欧美中文一区二区| 肉丝袜脚交视频一区二区| 欧美亚洲一区二区在线观看| 亚洲欧美日韩一区二区 | 欧美视频一区二区在线观看| 亚洲欧美另类图片小说| 成人av综合在线| 中文字幕一区二区三区av| 99久久免费精品| 国产精品久久久久久久岛一牛影视 | 久久久久久久国产精品影院| 狠狠狠色丁香婷婷综合久久五月| 日韩免费在线观看| 蜜桃一区二区三区在线| 欧美成人性福生活免费看| 久久精品国产久精国产爱| 欧美电影免费观看高清完整版在线 | 成人免费视频视频| 亚洲欧洲性图库| 91丨porny丨国产入口| 一区二区在线观看视频 | eeuss鲁片一区二区三区| 国产精品毛片久久久久久久| 97精品视频在线观看自产线路二| 亚洲欧洲精品一区二区三区不卡 | 午夜欧美电影在线观看| 欧美一区二区啪啪| 美女mm1313爽爽久久久蜜臀| 久久嫩草精品久久久精品一| 国产成人精品影视| 亚洲欧洲日产国产综合网| 色激情天天射综合网| 亚洲国产精品一区二区久久 | 成人在线综合网站| 亚洲欧美成aⅴ人在线观看 | 97久久超碰精品国产| 亚洲国产精品一区二区www| 91精品国产手机| 国产a久久麻豆| 亚洲综合一二区| 91精品国产欧美一区二区| 国产一区在线视频| 一区二区欧美精品| 日韩一区二区电影在线| 成人福利视频网站|