/***************************************************************** / ANALOG INPUT 8254 COUNTER 1 & 2 TIMING */ static void STX104_AI_Timing_8254_Set( int board, long time_interval_ns ) { long high_count; long low_count; unsigned int octet; STX104_Set_Bank( board, 0 ); /* assumes 10MHz clock (i.e. no 1MHz jumper) */ low_count = 10L; /* 1 microsecond intervals */ high_count = time_interval_ns / 1000; while ( high_count > 65536L ) { high_count = high_count >> 1; low_count = low_count << 1; } while ( high_count < 2L ) { high_count = high_count << 1; low_count = low_count >> 1; } #ifdef STX104_DEBUG_MODE fprintf( stdout, "low_count=%ld, high_count=%ld\n",low_count,high_count); fprintf( stdout, "Actual Interval (uSec) = %ld\n",time_interval_ns); #endif /* set counter/timer 2 */ outportb( stx104_base_address[board] + STX104_CT_CONFIGURATION, 0xB4 ); octet = ((unsigned int) high_count) & 0x00FF; outp( stx104_base_address[board] + STX104_CT2_DATA, octet ); #ifdef STX104_DEBUG_MODE fprintf( stdout, "CT2 LB=%u\n",octet ); #endif octet = ((unsigned int) high_count) >> 8; outp( stx104_base_address[board] + STX104_CT2_DATA, octet ); #ifdef STX104_DEBUG_MODE fprintf( stdout, "CT2 HB=%u\n",octet ); #endif /* set counter/timer 1 */ outportb( stx104_base_address[board] + STX104_CT_CONFIGURATION, 0x74 ); octet = ((unsigned int) low_count) & 0x00FF; outp( stx104_base_address[board] + STX104_CT1_DATA, octet ); #ifdef STX104_DEBUG_MODE fprintf( stdout, "CT1 LB=%u\n",octet ); #endif octet = ((unsigned int) low_count) >> 8; outp( stx104_base_address[board] + STX104_CT1_DATA, octet ); #ifdef STX104_DEBUG_MODE fprintf( stdout, "CT1 HB=%u\n",octet ); #endif }