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

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

?? main.c

?? 用單片機控制硬盤的源代碼
?? C
?? 第 1 頁 / 共 2 頁
字號:
/*****************************************************
WinAVR
項目 : 硬盤控制
版本 : 0.1
日期 : 2005-1-9
作者 : 金方劍


芯片                : ATmega16L
時鐘                : 8.000000 MHz
*****************************************************/
#include <avr/io.h>
#include <avr/iom16.h>
#include <avr/interrupt.h>
#include <avr/signal.h>

#include <avr/pgmspace.h>
#include <avr/eeprom.h>
//******************************************************************************
#define byte						unsigned char
#define uint						unsigned int
#define	ulong						unsigned long
#define nop()						__asm__ __volatile__ ("nop" ::)
#define wdr()						__asm__ __volatile__ ("wdr" ::)
#define Set_Bit(val, bitn)			(val |=(1<<(bitn)))//設置某一位
#define Clr_Bit(val, bitn)			(val&=~(1<<(bitn)))//清除某一位
#define Get_Bit(val, bitn)			(val &(1<<(bitn)))//讀取某一位
//******************************************************************************
//線路連接定義。如電路有變直接修改就可以了
#define WDataL 						PORTA
#define WDataH 						PORTB
#define RDataL 						PINA
#define RDataH 	   					PINB
#define CS0	   	   					PC0
#define CS1	   			 			PC1
#define DA0	   	   					PD5
#define DA1	   	   					PD6
#define DA2	   	   					PD7
#define Read						PC6
#define Write 						PC7
#define Rst							PD4
//******************************************************************************
//ATA命令
// CB_ERR ERROR REGISTER BITS 
#define ATA_ER_BBK					0x80    // ATA bad block
#define ATA_ER_UNC					0x40    // ATA uncorrected error
#define ATA_ER_MC					0x20    // ATA media change
#define ATA_ER_IDNF					0x10    // ATA id not found
#define ATA_ER_MCR					0x08    // ATA media change request
#define ATA_ER_ABRT					0x04    // ATA command aborted
#define ATA_ER_NTK0					0x02    // ATA track 0 not found
#define ATA_ER_NDAM					0x01    // ATA address mark not found
// CB_DH bits 7-4 OF THE DEVICE/HEAD REGISTER
#define ATA_DH_DEV0					0xE0    // select device 0 LBA MODE
#define ATA_DH_DEV1					0xF0    // select device 1 LBA MODE
//ATA commands (from ATA-3),
#define CMD_CFA_ERASE_SECTORS            0xC0
#define CMD_CFA_REQUEST_EXT_ERR_CODE     0x03
#define CMD_CFA_TRANSLATE_SECTOR         0x87
#define CMD_CFA_WRITE_MULTIPLE_WO_ERASE  0xCD
#define CMD_CFA_WRITE_SECTORS_WO_ERASE   0x38
#define CMD_CHECK_POWER_MODE1            0xE5
#define CMD_CHECK_POWER_MODE2            0x98
#define CMD_DEVICE_RESET                 0x08
#define CMD_EXECUTE_DEVICE_DIAGNOSTIC    0x90
#define CMD_FLUSH_CACHE                  0xE7
#define CMD_FORMAT_TRACK                 0x50
#define CMD_IDENTIFY_DEVICE              0xEC
#define CMD_IDENTIFY_DEVICE_PACKET       0xA1
#define CMD_IDENTIFY_PACKET_DEVICE       0xA1
#define CMD_IDLE1                        0xE3
#define CMD_IDLE2                        0x97
#define CMD_IDLE_IMMEDIATE1              0xE1
#define CMD_IDLE_IMMEDIATE2              0x95
#define CMD_INITIALIZE_DRIVE_PARAMETERS  0x91
#define CMD_INITIALIZE_DEVICE_PARAMETERS 0x91
#define CMD_NOP                          0x00
#define CMD_PACKET                       0xA0
#define CMD_READ_BUFFER                  0xE4
#define CMD_READ_DMA                     0xC8
#define CMD_READ_DMA_QUEUED              0xC7
#define CMD_READ_MULTIPLE                0xC4
#define CMD_READ_SECTORS                 0x20
#define CMD_READ_VERIFY_SECTORS          0x40
#define CMD_RECALIBRATE                  0x10
#define CMD_SEEK                         0x70
#define CMD_SET_FEATURES                 0xEF
#define CMD_SET_MULTIPLE_MODE            0xC6
#define CMD_SLEEP1                       0xE6
#define CMD_SLEEP2                       0x99
#define CMD_STANDBY1                     0xE2
#define CMD_STANDBY2                     0x96
#define CMD_STANDBY_IMMEDIATE1           0xE0
#define CMD_STANDBY_IMMEDIATE2           0x94
#define CMD_WRITE_BUFFER                 0xE8
#define CMD_WRITE_DMA                    0xCA
#define CMD_WRITE_DMA_QUEUED             0xCC
#define CMD_WRITE_MULTIPLE               0xC5
#define CMD_WRITE_SECTORS                0x30
#define CMD_WRITE_VERIFY                 0x3C
//******************************************************************************
//硬盤狀態寄存器地址定義
#define _Data 							0x0
#define _Err_Features 					0x1
#define _SecCount 						0x2
#define _SecNum 						0x3
#define _CylinderL 						0x4
#define _CylinderH 						0x5
#define _DeviceAndHead 					0x6
#define _Status_AND_Command				0x7
//******************************************************************************
/************************************************************
* D7   D6   D5   D4   D3   D2    D1   D0                    *
 BSY  DRDY DWF  DSC  DRQ  CORR  IDX  ERR                    *
BSY:驅動器忙;                                             *
DRDY:驅動器準備好;                                        *
DWF:驅動器寫失敗;                                         *
DSC:尋道結束;                                              *
DRQ:請求服務,驅動器希望通過數據寄存器與CPU交換一字節數據	*
CORR:當可以糾正的讀錯誤發生時,該位置1,數據傳輸將繼續進行 *
IDX:收到綜引信號;                                         *
ERR:命令執行出錯。                                         *
*************************************************************/
#define BSY	 						((HDstate&0x80)==0x80)
#define DRDY						((HDstate&0x40)==0x40)
#define DWF							((HDstate&0x20)==0x20)
#define DSC							((HDstate&0x10)==0x10)
#define DRQ							((HDstate&0x08)==0x08)
#define CORR						((HDstate&0x04)==0x04)
#define IDX							((HDstate&0x02)==0x02)
#define ERR							((HDstate&0x01)==0x01)
//******************************************************************************
//主工程的函數
//int		main(void);
void	delay_ms(uint ms);//毫秒級定時
void	delay_us(uint us);//微秒級定時
//******************************************************************************
//ATA的函數
void HDinit(void);//硬盤初始化
byte ReadReg(byte byAddr);//讀寄存器
void WriteReg(byte byAddr,byte byData);//寫寄存器
byte WaitBSY(void);//等待BSY信號
byte WaitDRQ(void);//等待DRQ信號
void RegAddrChangePhysics(byte byRegAddr);//把寄存器地址轉化為物理接口
void Read_HD_ID(void);//讀硬盤ID
void HDStop(void);//讓硬盤休眠(停轉)
void HDRunningActivation(void);//激活硬盤(轉動)
void LBA(unsigned long lba);//LBA尋址
void ReadData(void);//讀硬盤數據寄存器內容
void WriteData(byte byDataL,byte byDataH);//寫硬盤數據寄存器內容
void ReadSectorData(ulong lSectorAdd);//讀一個扇區的數據
void WriteSectorData(ulong lSectorAdd);//寫一個扇區的數據
void WriteCHS(uint iCylinder,byte byHead,byte bySector,byte byReadcount);//硬盤尋址
byte ReversalData(byte byReversal);//顛倒數據,0位換到7位,7位換到0位
//******************************************************************************
byte	uartdata=0;
byte	HDDATAL,HDDATAH;						//低字節,高字節
byte	HDstate;								//硬盤狀態
byte	HDSectorDATA[512];						//硬盤扇區數據
//******************************************************************************
//UART接收中斷
SIGNAL(SIG_UART_RECV)
{
	uartdata=UDR;//調試用的,不用管它
	nop();
	UDR=uartdata;
}
//******************************************************************************
int main(void)
{
ulong t1=0;
cli();
//SP=0x45f;	//WinAVR已經初始化堆棧
DDRC=0xc3;
PORTD=1<<PD0|1<<PD1;
DDRD=0xfe;
UCSRA=1<<U2X;
UCSRB=1<<RXCIE|1<<RXEN|1<<TXEN;
UBRRL=105;   //f0/9615/8+1,9615
delay_ms(10);
Clr_Bit(PORTD,Rst);  //硬盤復位
delay_ms(40);
Set_Bit(PORTD,Rst);
delay_ms(10);
HDinit();
//Read_HD_ID();
sei();
	while(1)
	{
		switch(uartdata)
		{
			case 2:
				Read_HD_ID();
				uartdata=0;
				break;
			case 3:
				ReadSectorData(t1);
				nop();
				UDR=uartdata;
				uartdata=0;
				break;
			case 4:
				WriteSectorData(t1);
				nop();
				UDR=uartdata;
				uartdata=0;
				break;
			case 5:
				HDStop();
				UDR=uartdata;
				uartdata=0;
				break;
			case 6:
				HDRunningActivation();
				UDR=uartdata;
				uartdata=0;
				break;

		}
		wdr();
	}
}
/************************************************************
*函數名稱:delay_ms(uint ms)									*
*用途:延時													*
************************************************************/
void delay_ms(uint ms)//亂延時的,可能不準
{
	uint i,j;
	for(j=0;j<ms;j++)
	{
		for(i=0;i<1140;i++)
			wdr();
	}
}
/************************************************************
*函數名稱:delay_us(uint us)									*
*用途:延時													*
************************************************************/
void delay_us(uint us)//亂延時的,可能不準
{
	int j;
	for (j=0;j<us;j++) 
	{
		wdr();
		nop();
		nop();
		nop();
		nop();
		nop();
		nop();
		nop();
		nop();
	}
}
/************************************************************
*函數名稱:void HDinit(void)									*
*用途:硬盤初始化											*
************************************************************/ 
void HDinit(void)
{
	Set_Bit(PORTC,Write);
	Set_Bit(PORTC,Read);
	Clr_Bit(PORTC,CS0);
	Set_Bit(PORTC,CS1);
	WriteReg(_DeviceAndHead,0xa0);
	do
	{
		WriteReg(_DeviceAndHead,0xa0);
		HDstate=ReadReg(_Status_AND_Command);       
	}while((!DRDY)||BSY);
	WriteReg(_DeviceAndHead,0x40);
	WriteReg(_SecCount,60);
	WriteReg(_Status_AND_Command,CMD_INITIALIZE_DRIVE_PARAMETERS);//0x91
	WaitBSY();
	WriteReg(_Status_AND_Command,CMD_RECALIBRATE);//0x10
	WaitBSY();
}
/************************************************************
*函數名稱:byte ReadReg(byte byAddr)							*
*用途:讀寄存器												*
************************************************************/ 
byte ReadReg(byte byAddr)

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
色哟哟一区二区在线观看| 国产精品免费网站在线观看| 国产三级欧美三级日产三级99| 国产精品国产三级国产| 香蕉加勒比综合久久| 国产很黄免费观看久久| 在线不卡一区二区| 自拍偷拍国产亚洲| 国产99久久精品| 777欧美精品| 艳妇臀荡乳欲伦亚洲一区| 成人中文字幕合集| 精品国产乱码久久久久久牛牛| 亚洲国产视频直播| 91视视频在线观看入口直接观看www| 欧美精品一区二区久久婷婷| 五月天网站亚洲| 欧洲国产伦久久久久久久| 国产精品进线69影院| 成人永久看片免费视频天堂| 精品福利在线导航| 久久疯狂做爰流白浆xx| 欧美卡1卡2卡| 天堂影院一区二区| 欧美在线你懂的| 亚洲国产你懂的| 色天使色偷偷av一区二区| 国产精品高潮呻吟| aa级大片欧美| 亚洲靠逼com| 在线观看日产精品| 亚洲超碰精品一区二区| 欧美巨大另类极品videosbest | 国产日韩av一区| 国产一区在线不卡| 久久久午夜精品| 国产精品 日产精品 欧美精品| 欧美电影免费观看完整版| 免费精品视频最新在线| 欧美大片在线观看一区二区| 激情丁香综合五月| 国产精品色呦呦| 91蜜桃网址入口| 亚洲在线一区二区三区| 欧美三级日韩在线| 日韩高清一区二区| 精品久久久久久亚洲综合网| 国产成人精品亚洲午夜麻豆| 亚洲品质自拍视频| 在线成人午夜影院| 国模一区二区三区白浆| 国产精品国产a级| 欧美日韩高清一区二区不卡| 精品一区二区三区免费播放| 国产精品久久夜| 欧美亚洲国产一区二区三区va| 青青青伊人色综合久久| 久久一日本道色综合| 91免费版在线| 老司机精品视频线观看86 | 亚洲精品欧美在线| 日韩欧美电影在线| 成人小视频在线观看| 亚洲已满18点击进入久久| 日韩欧美一级特黄在线播放| 成人激情综合网站| 日日摸夜夜添夜夜添精品视频| 久久综合五月天婷婷伊人| 色哟哟亚洲精品| 激情欧美日韩一区二区| 亚洲乱码国产乱码精品精小说| 日韩一区二区三区电影| 成人av综合一区| 欧美a级理论片| 综合久久久久久久| 精品国产百合女同互慰| 欧美丝袜丝nylons| 久久99国内精品| 亚洲成人动漫在线免费观看| 国产亚洲欧美一级| 日韩一区二区三免费高清| 一本大道久久a久久综合| 看片的网站亚洲| 亚洲国产视频网站| 中文在线资源观看网站视频免费不卡 | 91豆麻精品91久久久久久| 国产精品99久久久久久有的能看 | 国产一区二区不卡| 亚洲福利一二三区| 亚洲欧美在线aaa| 精品黑人一区二区三区久久| 欧美日韩三级在线| 色综合久久精品| 成人动漫一区二区三区| 精品一区二区三区的国产在线播放 | 欧美激情一区二区在线| 精品少妇一区二区三区视频免付费| 在线观看日韩av先锋影音电影院| 丁香天五香天堂综合| 国精产品一区一区三区mba桃花| 日日夜夜免费精品| 午夜视频在线观看一区二区| 亚洲激情在线播放| 中文字幕一区二区三区蜜月| 中国色在线观看另类| 久久久噜噜噜久久中文字幕色伊伊| 欧美精品色一区二区三区| 欧美天堂一区二区三区| 91女人视频在线观看| caoporn国产精品| 成人深夜福利app| 国产成人免费视频一区| 国产成人精品亚洲日本在线桃色| 国产毛片精品国产一区二区三区| 国产综合久久久久久鬼色 | 国产精品美女久久久久久久| 国产网站一区二区| 国产精品视频线看| 国产精品蜜臀在线观看| 亚洲欧美在线另类| 亚洲一区日韩精品中文字幕| 亚洲综合一区在线| 亚洲第一狼人社区| 日韩av电影天堂| 九九精品一区二区| 国产一区二区三区电影在线观看 | 在线观看视频一区二区欧美日韩| 欧美亚男人的天堂| 日韩午夜精品电影| 精品福利一区二区三区| 国产精品水嫩水嫩| 一区二区三区在线免费观看| 午夜欧美视频在线观看| 美女尤物国产一区| 国产白丝精品91爽爽久久| 99久精品国产| 欧美体内she精高潮| 日韩欧美不卡在线观看视频| 国产欧美一区二区三区在线看蜜臀| 国产精品三级av| 亚洲h动漫在线| 国产精品亚洲午夜一区二区三区| 成人精品亚洲人成在线| 欧美日韩国产欧美日美国产精品| 日韩一级免费一区| 国产精品久久久久久久蜜臀| 性久久久久久久| 国产一区二区剧情av在线| 色爱区综合激月婷婷| 欧美一级国产精品| 亚洲欧洲国产专区| 日韩高清欧美激情| 成人午夜精品一区二区三区| 欧美在线观看视频一区二区三区| 欧美一级黄色录像| 亚洲六月丁香色婷婷综合久久| 久久99精品国产.久久久久| 色婷婷综合久久久中文字幕| 日韩午夜在线播放| 国产一区二区三区久久悠悠色av| 99在线视频精品| 日韩欧美一区电影| 一区二区三区精品久久久| 国产一区二区视频在线播放| 精品视频色一区| 中文字幕乱码亚洲精品一区| 美女网站一区二区| 91极品视觉盛宴| 中文字幕欧美区| 狠狠久久亚洲欧美| 欧美日韩精品欧美日韩精品一综合| 国产欧美日韩精品一区| 精品一区二区三区在线播放视频| 欧美在线不卡一区| 中文一区在线播放| 狠狠色狠狠色合久久伊人| 欧美日韩免费观看一区三区| 国产精品久久久久久久久免费樱桃 | 成人免费在线视频| 国产乱码精品一区二区三| 欧美一级免费观看| 亚洲 欧美综合在线网络| a级精品国产片在线观看| 久久久青草青青国产亚洲免观| 美女视频网站黄色亚洲| 欧美精品在欧美一区二区少妇| 一区二区三区四区蜜桃| 99久久99久久精品国产片果冻| 国产亚洲欧美日韩在线一区| 国产原创一区二区三区| 日韩欧美二区三区| 久久成人麻豆午夜电影| 欧美丰满美乳xxx高潮www| 亚洲综合av网| 精品污污网站免费看| 亚洲高清免费观看| 在线电影院国产精品| 日韩电影在线观看电影| 7777精品伊人久久久大香线蕉经典版下载 | 日韩精品电影一区亚洲|