📄 initiator_test.c
字号:
/*************************************************************************************
// Program Name : Initator_test.c *
//
// Function : Main program
//
// Date : Dec 14, 2001
//
// Written by : Thao Tran
//
//*************************************************************************************
//************************************************************************************
// VARIABLES
//************************************************************************************/
#define GLB
#include <stdio.h>
#include <conio.h>
#include <sys\types.h>
#include <sys\timeb.h>
#include <time.h>
#include <stdlib.h>
#include <string.h>
#include <dos.h>
#include "fas466defs.h"
#include "fas466regs.h"
#include "fas466globalvars.h"
void main ()
{
// Setup test and variables
unsigned long Starting_Address = 0x200;
unsigned long Channel1Address = Starting_Address;
unsigned long Channel1Reload = Starting_Address;
unsigned long Channel0Address = Starting_Address;
unsigned long Channel0Reload = Starting_Address;
unsigned char REQ_ACK_off = 0x2;
unsigned char LVD_Mode = 1;
unsigned short MaxBufferSize = 0x3f0;
unsigned long Channel_Limit = (((MaxBufferSize + 0x3) * 0x208) - 0x4) + Starting_Address;
unsigned short tempval;
unsigned short choice;
ExpCmdCmptStat = 0;
VerifyError = 0;
MemVerifyError = 0;
LoopCount = 1;
Wide = 0;
BlockSize = 0x200;
BlockCnt = 1;
InitRegisterSizeArray();
printf("/////////////////////////////\n");
printf("// FAS466 Initiator Test\n");
printf("/////////////////////////////\n");
// Initialize chip
printf(" reset chip\n");
chipreset();
printf(" CHIP VERSION # %X \n", RegRead (0x32));
printf(" BASE PORT ADDRESS %X \n", IsaBaseAdr);
//Sleep (50);
RegWrite(MP_Chip_Config, 0x1B);
BitMask(MP_Gen_PurposeIO_Config, Enable_Last_Block_Output, set);
RegWrite(DI_Configuration, 0);
RegWrite(MC_Address_Pointer, 0x1A);
RegWrite(MC_Internal_Register_Access, 0x70);
tempval = IsaRead((unsigned short) EVAL_CONFIG);
IsaWrite((unsigned short) EVAL_CONFIG, (unsigned short) (tempval | EnableDMA));
RegWrite(DI_Configuration,(DMA_Enable | DMA_Parity_Generation | DMA_Parity_Check));
RegWrite(SC_SCSI_Arbitration_Configuration, (SC_Arbitration_ID0 | SC_SCSI_Test_Mode_Enable));
if (LVD_Mode == 1)
RegWrite(SC_SCSI_Pad_Configuration1 , SC_LVD_Pad_Mode);
else
RegWrite(SC_SCSI_Pad_Configuration1 , 0);
RegWrite(SC_Error_Interrupt_Status , 0x20);
RegWrite(SC_Command_Interrupt_Status , 0);
RegWrite(SC_SCSI_Pad_Configuration2, 0);
RegWrite(SC_Error_Interrupt_Status , 0x40);
//scsi bus reset
BitMask(SC_SCSI_Control ,SC_RST, set);
BitMask(SC_SCSI_Control, SC_RST, reset);
printf("\n Press a key to continue......\n");
gets(str);
RegWrite(SC_SCSI_Arbitration_Configuration , SC_Arbitration_ID7) ; // my ID 7
RegWrite(SC_Selection_Configuration1 , SC_Selection_ID0) ; //target ID 0
do {
printf ("\n ");
printf ("\n*************************** MAIN MENU ************************");
printf ("\n 0. EXIT ");//
printf ("\n 1. SCSI BUS RESET "); ////
printf ("\n 2. TEST UNIT READY ");
printf ("\n 3. WRITE(6) 33. WRITE LOOP");
printf ("\n 5. READ(6) 55. READ LOOP");
printf ("\n 7. WRITE / READ (6) ");
printf ("\n 8. DISPLAY READ BUFFER");
printf ("\n 9. FILL WRITE BUFFER ");
printf ("\n12. WIDE SYNCH NEGOTIATION");
printf ("\n17. LBA, BLOCK COUNT %x ",lba_val); //
printf ("%x ", BlockCnt);
printf ("\n18. OTHER COMMANDS .. ");
printf ("\n TRANSFER PERIOD FACTOR: %d", xfer_period_factor);
printf ("\n REQ/ACK OFFSET (Hex) %x", req_ack_offset);
if (xfer_width == 1)
{printf ("\n TRANSFER WIDTH: 16-Bit Wide");}
else
{printf ("\n TRANSFER WIDTH: 8-Bit Narrow");}
if (LVD_Mode == 1)
printf ("\n LINE MODE: LVD");
else
printf ("\n LINE MODE: SE");
printf ("\n Enter Selection : ");
//gets(choice);
scanf("%d", &choice);
switch (choice)
{
case 0x0: //Select to exit program
printf ("\n Exit Menu");
goto enddd;
break;
case 0x1: //Select to Reset SCSI Bus
printf ("\nIssue SCSI Bus Reset"); //SCSI BUS RESET
BitMask ( SC_SCSI_Arbitration_Configuration , SC_SCSI_Test_Mode_Enable , set); //Enable Access To SCSI Control
BitMask ( SC_SCSI_Control , SC_RST , set); //Assert RST signal
BitMask ( SC_SCSI_Control , SC_RST , reset); //Deassert RST Signal
BitMask ( SC_SCSI_Arbitration_Configuration , SC_SCSI_Test_Mode_Enable , reset); //Enable Access To SCSI Control
RegWrite (SC_Selection_Configuration1 , SC_Selection_ID0);
RegWrite (SC_Command, SC_CMD_Flush_FIFO);
RegWrite (SC_Error_Interrupt_Status, 0xFF);
Wait (30);
break;
case 0x2: //Select to issue TEST UNIT READY command
printf ("\nIssue TEST UNIT READY Command");
Initiator_Mode_tur();
break;
case 0x3: //Select to issue TEST UNIT READY command
printf ("\n Issue WRITE Command");
Initiator_Mode_wr();
break;
case 33: //Select to issue TEST UNIT READY command
do {
printf ("\n Issue WRITE Command");
Initiator_Mode_wr();
}
while (!_kbhit());
break;
case 0x5: //Select to issue TEST UNIT READY command
printf ("\n Issue READ Command");
Initiator_Mode_rd();
break;
case 55: //Select to issue TEST UNIT READY command
do {
printf ("\n Issue READ Command");
Initiator_Mode_rd();
}
while (!_kbhit());
break;
case 0x7: //Select to issue TEST UNIT READY command
printf ("\nIssue WRITE / READ Command");
Initiator_Mode_wr_rd();
break;
case 0x8: //Select to issue TEST UNIT READY command
printf ("\n SRAM Buffer Data :");
Initiator_Read_buffer();
break;
case 0x9: //Select to issue TEST UNIT READY command
printf ("\nFill buffer SRAM ");
Initiator_Fill_buffer();
break;
case 17:
printf ("LBA Number:"); //Get LBA
scanf("%d", &lba_val);
printf ("Transfer Length:"); //Get Transfer Length
scanf("%d", &BlockCnt);
break;
case 12: //Select to Negotiate FAST-80 DT, IU and issue TEST UNIT READY
printf ("\n Negotiate Wide Synch Mode");
printf ("\nTransfer Period Factor 10-12-25-50 :");
scanf ("%d", &xfer_period_factor); //Get Transfer Length
printf ("\nREQ/ACK Offset (0-127): ");
scanf ("%d", &req_ack_offset); //Get REQ/ACK Offset
printf ("\nTransfer Width Exponent? 1=16-Bit 0=8-Bit" );
scanf ("%d", &xfer_width); //Get Transfer Width
Initiator_Negotiate_sw();
break;
case 18: //Select to Negotiate FAST-80 DT, IU and issue TEST UNIT READY
printf ("\n 1. Request Sense Data");
printf ("\n 2. Mode Select command");
printf ("\n Enter selection ");
scanf ("%d", &choice); //
if (choice == 1)
Initiator_Mode_req_sen ();
if (choice == 2)
Initiator_Mode_mode_select();
break;
default:
printf ("\n Re-enter your selection. ");
enddd:
printf(" EXIT \n");
}
} while (choice != 0);
} // main
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -