⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 initiator_test.c

📁 基于FAS466的SCSI控制器的启动器模式的C源代码。
💻 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 + -