intermediate work
This commit is contained in:
parent
e9cdb6216e
commit
e27aefec5e
|
|
@ -138,7 +138,7 @@ OUTPUT_FILE_DEP:= ./makedep.mk
|
|||
./%.o: .././%.c
|
||||
@echo Building file: $<
|
||||
@echo Invoking: AVR/GNU C Compiler : (AVR_8_bit_GNU_Toolchain_3.4.0_663) 4.6.2
|
||||
$(QUOTE)C:\Program Files (x86)\Atmel\Atmel Studio 6.0\extensions\Atmel\AVRGCC\3.4.0.65\AVRToolchain\bin\avr-gcc.exe$(QUOTE) -funsigned-char -funsigned-bitfields -O1 -ffunction-sections -fpack-struct -fshort-enums -c -std=gnu99 -save-temps -MD -MP -MF "$(@:%.o=%.d)" -MT"$(@:%.o=%.d)" -MT"$(@:%.o=%.o)" -mmcu=atmega1284p -o"$@" "$<"
|
||||
$(QUOTE)C:\Program Files (x86)\Atmel\Atmel Studio 6.0\extensions\Atmel\AVRGCC\3.4.0.65\AVRToolchain\bin\avr-gcc.exe$(QUOTE) -funsigned-char -funsigned-bitfields -O1 -ffunction-sections -fpack-struct -fshort-enums -c -save-temps -MD -MP -MF "$(@:%.o=%.d)" -MT"$(@:%.o=%.d)" -MT"$(@:%.o=%.o)" -mmcu=atmega1284p -o"$@" "$<"
|
||||
@echo Finished building: $<
|
||||
|
||||
|
||||
|
|
|
|||
|
|
@ -54,6 +54,7 @@
|
|||
<avrgcc.compiler.optimization.PrepareFunctionsForGarbageCollection>True</avrgcc.compiler.optimization.PrepareFunctionsForGarbageCollection>
|
||||
<avrgcc.compiler.optimization.PackStructureMembers>True</avrgcc.compiler.optimization.PackStructureMembers>
|
||||
<avrgcc.compiler.optimization.AllocateBytesNeededForEnum>True</avrgcc.compiler.optimization.AllocateBytesNeededForEnum>
|
||||
<avrgcc.compiler.miscellaneous.OtherFlags />
|
||||
<avrgcc.compiler.miscellaneous.DoNotDeleteTemporaryFiles>True</avrgcc.compiler.miscellaneous.DoNotDeleteTemporaryFiles>
|
||||
<avrgcc.linker.libraries.Libraries>
|
||||
<ListValues>
|
||||
|
|
|
|||
|
|
@ -26,7 +26,7 @@
|
|||
*/
|
||||
|
||||
/*
|
||||
* $Id: wdc_config.h,v 1.17 2012/06/16 19:34:39 olivleh1 Exp $
|
||||
* $Id: wdc_config.h,v 1.18 2012/06/16 23:41:42 olivleh1 Exp $
|
||||
*/
|
||||
|
||||
|
||||
|
|
@ -121,7 +121,7 @@
|
|||
#define MMC_MULTIBLOCK 1
|
||||
|
||||
#define MEASURE_DISK_PERFORMANCE 1
|
||||
#undef MEASURE_DISK_PERFORMANCE
|
||||
//#undef MEASURE_DISK_PERFORMANCE
|
||||
|
||||
#define DEBUG 1
|
||||
|
||||
|
|
|
|||
|
|
@ -26,7 +26,7 @@
|
|||
*/
|
||||
|
||||
/*
|
||||
* $Id: wdc_drv_mmc.c,v 1.18 2012/06/13 20:17:45 olivleh1 Exp $
|
||||
* $Id: wdc_drv_mmc.c,v 1.19 2012/06/16 23:41:42 olivleh1 Exp $
|
||||
*/
|
||||
|
||||
#include <avr/io.h>
|
||||
|
|
@ -270,6 +270,7 @@ uint8_t mmc_cmd ( uint8_t *cmd )
|
|||
uint8_t tmp = 0x80;
|
||||
uint8_t i = 10;
|
||||
uint8_t cmd0 = cmd[0];
|
||||
uint8_t a;
|
||||
#ifdef SPI_CRC
|
||||
/* Calculate CRC and framing bits */
|
||||
cmd[0] = ( cmd[0] | ( 1 << 6 ) ) & 0x7F;
|
||||
|
|
@ -277,7 +278,7 @@ uint8_t mmc_cmd ( uint8_t *cmd )
|
|||
#endif
|
||||
|
||||
/* send command */
|
||||
for ( uint8_t a = 0; a < 0x06; a++ ) {
|
||||
for ( a = 0; a < 0x06; a++ ) {
|
||||
xmit_byte ( *cmd++ );
|
||||
wait_till_send_done();
|
||||
}
|
||||
|
|
|
|||
|
|
@ -26,7 +26,7 @@
|
|||
*/
|
||||
|
||||
/*
|
||||
* $Id: wdc_drv_pata.c,v 1.7 2012/06/16 19:34:39 olivleh1 Exp $
|
||||
* $Id: wdc_drv_pata.c,v 1.8 2012/06/16 23:41:42 olivleh1 Exp $
|
||||
*/
|
||||
|
||||
#include "wdc_config.h"
|
||||
|
|
@ -51,22 +51,24 @@ void pata_read_bytes ( uint8_t *buffer, uint16_t bytes );
|
|||
|
||||
|
||||
/*
|
||||
* +----- CS0
|
||||
* |+---- CS1
|
||||
* ||+--- DA0
|
||||
* |||+-- DA1
|
||||
* ||||+- DA2
|
||||
* ||||| */
|
||||
#define PATA_R_STATUS_REGISTER 0x0F /* 0b01111 */
|
||||
#define PATA_W_COMMAND_REGISTER 0x0F /* 0b01111 */
|
||||
#define PATA_W_DEVICE_CONTROL_REGISTER 0x0B /* 0b01011 */
|
||||
* +----- CS0
|
||||
* |+---- CS1
|
||||
* ||+--- DA0
|
||||
* |||+-- DA1
|
||||
* ||||+- DA2
|
||||
* ||||| */
|
||||
#define PATA_W_DEVICE_CONTROL_REGISTER 0x0B /* 0b10011 */
|
||||
#define PATA_R_STATUS_REGISTER 0x0F /* 0b01111 */
|
||||
#define PATA_R_ALTERNATE_STATUS_REGISTER 0x0B /* 0b10011 */
|
||||
#define PATA_W_FEATURE_REGISTER 0x0C /* 0b01100 */
|
||||
#define PATA_W_COMMAND_REGISTER 0x0F /* 0b01111 */
|
||||
|
||||
#define PATA_RW_DATA_REGISTER 0x08 /* 0b01000 */
|
||||
#define PATA_RW_SECTOR_COUNT_REGISTER 0b00001010
|
||||
#define PATA_RW_SECTOR_NUMBER_REGISTER 0b00001110
|
||||
#define PATA_RW_CYLINDER_LOW_REGISTER 0b00001001
|
||||
#define PATA_RW_CYLINDER_HIGH_REGISTER 0b00001101
|
||||
#define PATA_RW_DEVICE_HEAD_REGISTER 0b00001011
|
||||
#define PATA_RW_DATA_REGISTER 0x08 /* 0b01000 */
|
||||
#define PATA_RW_SECTOR_COUNT_REGISTER 0x0A /* 0b01010 */
|
||||
#define PATA_RW_SECTOR_NUMBER_REGISTER 0x0E /* 0b01110 */
|
||||
#define PATA_RW_CYLINDER_LOW_REGISTER 0x09 /* 0b01001 */
|
||||
#define PATA_RW_CYLINDER_HIGH_REGISTER 0x0D /* 0b01101 */
|
||||
#define PATA_RW_DEVICE_HEAD_REGISTER 0x0B /* 0b01011 */
|
||||
|
||||
#define ata_ctl_high() ata_cs0_disable();ata_cs1_disable();ata_da0_disable();ata_da1_disable();ata_da2_disable();
|
||||
|
||||
|
|
@ -112,6 +114,7 @@ void pata_set_lowbyte ( uint8_t byte )
|
|||
enable_rdwrtoata();
|
||||
nop();
|
||||
nop();
|
||||
nop();
|
||||
disable_rdwrtoata();
|
||||
}
|
||||
|
||||
|
|
@ -132,6 +135,7 @@ uint8_t pata_get_lowbyte ()
|
|||
enable_rdwrtoata();
|
||||
nop();
|
||||
nop();
|
||||
nop();
|
||||
byte = port_data_get();
|
||||
disable_rdwrtoata();
|
||||
|
||||
|
|
@ -145,6 +149,7 @@ uint8_t pata_get_highbyte ()
|
|||
enable_atalatch();
|
||||
nop();
|
||||
nop();
|
||||
nop();
|
||||
byte = port_data_get();
|
||||
disable_atalatch();
|
||||
|
||||
|
|
@ -216,7 +221,7 @@ void pata_write_bytes ( uint8_t *buffer, uint16_t bytes )
|
|||
|
||||
set_io_register ( PATA_RW_DATA_REGISTER );
|
||||
ata_wr_enable();
|
||||
|
||||
|
||||
for ( i = 0; i < PATA_BLOCKLEN / 2; i++ ) {
|
||||
pata_set_highbyte ( buffer[a + 1] );
|
||||
pata_set_lowbyte ( buffer[a] );
|
||||
|
|
@ -268,7 +273,7 @@ void ata_identify()
|
|||
}
|
||||
uart_putc ( '\n' );
|
||||
uart_puts_p ( PSTR ( "Model number: " ) );
|
||||
for ( uint8_t i = 27; i <= 46; i++ ) {
|
||||
for ( i = 27; i <= 46; i++ ) {
|
||||
uart_putc ( word[i] >> 8 );
|
||||
uart_putc ( word[i] & 0x00FF );
|
||||
}
|
||||
|
|
@ -296,9 +301,12 @@ void ata_identify()
|
|||
* Public functions
|
||||
*/
|
||||
|
||||
uint8_t data2_buffer[4096];
|
||||
uint8_t data2_buffer[512];
|
||||
//uint8_t data3_buffer[512];
|
||||
|
||||
uint8_t pata_init ()
|
||||
{
|
||||
uint16_t a;
|
||||
|
||||
// is needed for some disks (for example Maxtor 6L080J4)
|
||||
_delay_ms ( 200 );
|
||||
|
|
@ -307,17 +315,28 @@ uint8_t pata_init ()
|
|||
while ( ( !pata_rdy() ) & pata_bsy() );
|
||||
|
||||
/*set drive 0 to LBA mode*/
|
||||
write_io_register ( PATA_W_DEVICE_CONTROL_REGISTER, ATA_LBA_DRIVE_0 );
|
||||
write_io_register ( PATA_RW_DEVICE_HEAD_REGISTER, ATA_LBA_DRIVE_0 );
|
||||
while ( ( !pata_rdy() ) & pata_bsy() );
|
||||
|
||||
/*
|
||||
write_io_register ( PATA_W_FEATURE_REGISTER, 3 );
|
||||
write_io_register ( PATA_RW_SECTOR_COUNT_REGISTER, 1 );
|
||||
write_io_register ( PATA_W_COMMAND_REGISTER, CMD_SET_FEATURES );
|
||||
while ( pata_bsy() );
|
||||
*/
|
||||
|
||||
/*recalibrate*/
|
||||
write_io_register ( PATA_W_COMMAND_REGISTER, CMD_RECALIBRATE );
|
||||
while ( pata_bsy() );
|
||||
|
||||
uart_puts_p ( PSTR ( "disk is now ready\n" ) );
|
||||
|
||||
ata_identify();
|
||||
// ata_identify();
|
||||
|
||||
pata_read_block(0,data2_buffer);
|
||||
for ( a = 0 ; a < 512 ; a++ )
|
||||
uart_putc_hex ( data2_buffer[a] );
|
||||
while(1);
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
|
@ -333,6 +352,7 @@ uint8_t pata_write_block ( uint32_t addr, uint8_t *buffer )
|
|||
|
||||
uint8_t pata_read_multiblock ( uint32_t addr, uint8_t *buffer, uint8_t numblocks )
|
||||
{
|
||||
|
||||
write_io_register ( PATA_RW_SECTOR_COUNT_REGISTER, numblocks );
|
||||
|
||||
write_io_register ( PATA_RW_SECTOR_NUMBER_REGISTER, ( uint8_t ) addr );
|
||||
|
|
@ -344,6 +364,9 @@ uint8_t pata_read_multiblock ( uint32_t addr, uint8_t *buffer, uint8_t numblocks
|
|||
|
||||
pata_read_bytes ( buffer, numblocks * PATA_BLOCKLEN );
|
||||
|
||||
read_io_register ( PATA_R_ALTERNATE_STATUS_REGISTER );
|
||||
read_io_register ( PATA_R_STATUS_REGISTER );
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
|
@ -360,5 +383,11 @@ uint8_t pata_write_multiblock ( uint32_t addr, uint8_t *buffer, uint8_t numblock
|
|||
|
||||
pata_write_bytes ( buffer, numblocks * PATA_BLOCKLEN );
|
||||
|
||||
/* wait until drive completed write */
|
||||
while(pata_bsy());
|
||||
|
||||
read_io_register ( PATA_R_ALTERNATE_STATUS_REGISTER );
|
||||
read_io_register ( PATA_R_STATUS_REGISTER );
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
|
@ -26,7 +26,7 @@
|
|||
*/
|
||||
|
||||
/*
|
||||
* $Id: wdc_if_disk_perf.c,v 1.6 2012/06/16 19:34:39 olivleh1 Exp $
|
||||
* $Id: wdc_if_disk_perf.c,v 1.7 2012/06/16 23:41:42 olivleh1 Exp $
|
||||
*/
|
||||
|
||||
#include <avr/io.h>
|
||||
|
|
@ -109,7 +109,7 @@ void test_write512(uint8_t numblocks, uint8_t nr_of_tests)
|
|||
|
||||
uart_puts_p ( PSTR ( "Test Write 5000 512B-Blocks with Singleblock-Write (512B Blocksize):" ) );
|
||||
uart_putc ( '\n' );
|
||||
memset ( &data_buffer[0], 0xCC, WDC_BLOCKLEN * numblocks );
|
||||
memset ( &data_buffer[0], 0x11, WDC_BLOCKLEN * numblocks );
|
||||
for ( i8 = 0; i8 < nr_of_tests; i8++ ) {
|
||||
blockno = BLOCKNO;
|
||||
for ( starttime = overflow; blockno < ( BLOCKNO + 5000 ); blockno++ ) {
|
||||
|
|
@ -131,6 +131,7 @@ void test_read512(uint8_t numblocks, uint8_t nr_of_tests)
|
|||
uint32_t starttime;
|
||||
uint32_t blockno = 0;
|
||||
uint8_t i8, errorcode;
|
||||
uint16_t a;
|
||||
|
||||
uart_puts_p ( PSTR ( "Test Read 5000 512B-Blocks with Singleblock-Read (512B Blocksize):" ) );
|
||||
uart_putc ( '\n' );
|
||||
|
|
@ -139,6 +140,11 @@ void test_read512(uint8_t numblocks, uint8_t nr_of_tests)
|
|||
blockno = BLOCKNO;
|
||||
for ( starttime = overflow; blockno < ( BLOCKNO + 5000 ); blockno++ ) {
|
||||
errorcode = wdc_read_sector ( blockno, data_buffer );
|
||||
|
||||
for ( a = 0 ; a < 512 ; a++ )
|
||||
uart_putc_hex ( data_buffer[a] );
|
||||
uart_putc ( '\n' );
|
||||
|
||||
if ( errorcode ) {
|
||||
break;
|
||||
}
|
||||
|
|
@ -166,7 +172,7 @@ void measure_performance()
|
|||
uart_puts_p ( PSTR ( "Timer is initialized with a Prescaler 8" ) );
|
||||
uart_putc ( '\n' );
|
||||
|
||||
test_write512(numblocks,nr_of_tests);
|
||||
// test_write512(numblocks,nr_of_tests);
|
||||
test_read512(numblocks,nr_of_tests);
|
||||
test_write512(numblocks,nr_of_tests);
|
||||
test_read4k(numblocks,nr_of_tests);
|
||||
|
|
|
|||
Loading…
Reference in New Issue