|
|||||||||||
| 技術(shù)交流 | 電路欣賞 | 工控天地 | 數(shù)字廣電 | 通信技術(shù) | 電源技術(shù) | 測(cè)控之家 | EMC技術(shù) | ARM技術(shù) | EDA技術(shù) | PCB技術(shù) | 嵌入式系統(tǒng) 驅(qū)動(dòng)編程 | 集成電路 | 器件替換 | 模擬技術(shù) | 新手園地 | 單 片 機(jī) | DSP技術(shù) | MCU技術(shù) | IC 設(shè)計(jì) | IC 產(chǎn)業(yè) | CAN-bus/DeviceNe |
有誰(shuí)做過AVR控制硬盤的,請(qǐng)看過來(lái)! |
| 作者:酸葡萄 欄目:單片機(jī) |
有誰(shuí)做過AVR控制硬盤的,請(qǐng)看過來(lái)! 電路圖是ZIPAMP的電路圖,我想為它寫個(gè)程序來(lái)練練自已.請(qǐng)幫忙! 主要部分圖如下,也可以下載PDF文件! 現(xiàn)在看看我寫的程序:這是我根據(jù)一個(gè)網(wǎng)上下載的源代碼再配合ZIPAMP電路圖改的, 用winavr寫的!請(qǐng)幫忙! 謝了! //------------------------------------------------------------------- // SELECT address and CS signals // // addressing bits // DA0 A0 0x01 Address LINE 0 // DA1 A1 0x02 Address LINE 1 // DA2 A2 0x04 Address LINE 2 // // chip SELECTs // CS0 A3 0x08 Command Block SELECT // CS1 A4 0x10 CONTROL Block SELECT // // 鎖存 PD4 0 鎖存 //------------------------------------------------------------------- void SetAddress(u08 cs, u08 adr) { outp(0xff,DDRC); //設(shè)PORTC為輸出 sbi(DDRD,4); //設(shè)PD4為輸出 sbi(PORTD,4); //輸出1 if (cs==CTRL) { PORTC = adr+0x08; // SELECT A4 low -> CS1 -> CTRL } else { PORTC = adr+0x10; // SELECT A3 low -> CS0 -> CMD } asm volatile ("nop"); //延時(shí)少少 sbi(DDRD,4); //輸出 cbi(PORTD,4); //PD4為0 鎖存 } //-------------------------------------------------------------------- // Read data BYTE from Drive //-------------------------------------------------------------------- u08 ReadBYTE(u08 cs, u08 adr) { u08 tmp; SetAddress(cs,adr); outp(0x00, DDRA); // PORT A as input outp(0x00, DDRC); // PORT C as input sbi(DDRB,1); cbi(PORTB, 1); // set DIOR lo asm volatile ("nop"); // allow pin change tmp = inp(PINA); // read byte sbi(PORTB, 1); // set DIOR hi sbi(MCUCR, SRE); // enable RAM return tmp; } //------------------------------------------------------------------- // Write data BYTE to Drive //------------------------------------------------------------------- void WriteBYTE(u08 cs, u08 adr, u08 dat) { SetAddress(cs,adr); outp(0xff, DDRA); // PORT A as OUTPUT outp(0xff, DDRC); // PORT C as OUTPUT asm volatile ("nop"); // allow pin change sbi(DDRB,0); // set OUTPUT cbi(PORTB, 0); // set DIOW lo asm volatile ("nop"); // allow pin change outp(dat, PORTA); // write byte sbi(PORTB, 0); // set DIOW hi } 于是我在MAIN函數(shù)里試著讀寫 main() { IO_init(); LED(2); //我自個(gè)加個(gè)LED,作為指示,亮一下 WriteBYTE(CMD, 6, 0xA0); // chs mode, drive 0 while((ReadBYTE(CMD,7)&0xc0)!=0x40); //等待busy清0,ready置1 LED(5); //亮五下 } 我發(fā)現(xiàn)燈亮了2下之后就開始不亮了. 說(shuō)明程序死在while((ReadBYTE(CMD,7)&0xc0)!=0x40); 大家看看我的程序那里錯(cuò)了. 另:我的硬件是好的,為我的ZIPAMP硬盤MP3可以放歌. 謝謝!!! 謝謝!!! http://www.21icsearch.com/buzi/upimage/upfile/200497944510.pdf |
| 2樓: | >>參與討論 |
| 作者: Asnake 于 2004/9/7 15:21:00 發(fā)布:
硬盤要RST的說(shuō) 我沒作過,估計(jì)的 |
|
| 3樓: | >>參與討論 |
| 作者: 酸葡萄 于 2004/9/7 17:22:00 發(fā)布:
我也有試RST的,但沒有作用. 我有試用PD3連接硬盤1腳, cbi(PORTD,3); //0 sbi(DDRD,3) //輸出 delay(400); sbi(PORTD,3); //0 sbi(DDRD,3) //輸出 delay(1000); 但結(jié)果還是一樣! |
|
| 4樓: | >>參與討論 |
| 作者: 酸葡萄 于 2004/9/8 8:17:00 發(fā)布:
沒人知道嗎? |
|
| 5樓: | >>參與討論 |
| 作者: 酸葡萄 于 2004/9/8 13:59:00 發(fā)布:
幫忙! |
|
| 6樓: | >>參與討論 |
| 作者: 酸葡萄 于 2004/9/9 9:33:00 發(fā)布:
5555555555555555555555555 |
|
|
|
| 免費(fèi)注冊(cè)為維庫(kù)電子開發(fā)網(wǎng)會(huì)員,參與電子工程師社區(qū)討論,點(diǎn)此進(jìn)入 |
Copyright © 1998-2006 udpf.com.cn 浙ICP證030469號(hào) |