Пример #1
0
//checks if voltage is present on VUEXTERN
unsigned char binBBpullVoltage(unsigned char ctrlB)
{
	unsigned char temp=1;
	if(modeConfig.HiZ == 0)
	{
		temp = 0;
	}
	else
	{
   	BP_3V3PU_OFF(); //disable any existing pullup
   	bpDelayMS(2);
   	ADCON();
   	if (bpADC(BP_ADC_VPU) > 0x100)
		{ //is there already an external voltage?
			temp =0;
   	}
   	ADCOFF();
	}
	if(temp)
	{
		if(ctrlB == 0x51){BP_3V3PU_ON();}	//turns on Pull up voltage 3.3v
		else if(ctrlB == 0x52){BP_5VPU_ON();}	//turns on Pull up voltage 5v
		else {BP_3V3PU_OFF();}
	}
	return temp;
}
Пример #2
0
unsigned char eetest(void){
	unsigned char c,l;
	eei2cSetup();
	l=eeGetWP();
	
	eeEnableWrite();

	eeWriteByte(0xFF,0);
	bpDelayMS(10);
	
	eeWriteByte(0x10,0);
	bpDelayMS(10);
	if (eeReadByte(0)==0x10)
		c= 0;					//in selftest 0 = good.
	else
		c= 1;
		
	eeWriteByte(0xFF,0);
	
	BP_EE_WP = l;				//store last WP setting and post it.
	return c;
}
Пример #3
0
//self test, showProgress=1 displays the test results in the terminal, set to 0 for silent mode
//errors are counted in the global errors variable
//returns number of errors
unsigned char selfTest(unsigned char showProgress, unsigned char jumperTest){
//toggle display of test results with show Progress variable
	errors=0;
	if(!showProgress) bpConfig.quiet=1;
	
//instructions (skip pause if no display output)
	if(showProgress && jumperTest){
		//bpPOSTWline("Disconnect any devices");
		//bpPOSTWline("Connect (Vpu to +5V) and (ADC to +3.3V)");
		BPMSG1163;
		BPMSG1251; // //bpPOSTWline("Press a key to start");
		//JTR Not required while(!UART1RXRdy()); //wait for key
		UART1RX();//discard byte
	}

	//bpPOSTWline("Ctrl");
	BPMSG1164;
	BP_AUX0=1;
	BP_AUX0_DIR=0;
	//bpPOSTWstring("AUX");
	BPMSG1165;
	bpTest(BP_AUX0,1);
	BP_AUX0=0;
	BP_AUX0_DIR=1;
				
	BP_LEDMODE=1;
	BP_LEDMODE_DIR=0;	
	//bpPOSTWstring("MODE LED");
	BPMSG1166;
	bpTest(BP_LEDMODE,1);
	BP_LEDMODE=0;
	
	BP_PULLUP_ON();
	//bpPOSTWstring("PULLUP H");
	BPMSG1167;
	bpTest(BP_PULLUP,1);
	BP_PULLUP_OFF();
	//bpPOSTWstring("PULLUP L");
	BPMSG1168;
	bpTest(BP_PULLUP,0);
	
	BP_VREG_ON();
	bpDelayMS(2);//in silent mode there's not enought delay for the power supplied to come on
	//bpPOSTWstring("VREG");
	BPMSG1169;
	bpTest(BP_VREGEN,1);

#if defined (BUSPIRATEV4)
	BPMSG1265; //bpWline("EEPROM");
	BPMSG1266; //bpWstring("SCL");
	bpTest(BP_EE_SCL, 1);
	BPMSG1267; //bpWstring("SDA");
	bpTest(BP_EE_SDA, 1);
	BPMSG1268; //bpWstring("WP");
	bpTest(BP_EE_WP, 1);
	BPMSG1269; //bpWstring("ACK");
    bpTest(eetest(), 0);
#endif

	//ADC check
	//bpPOSTWline("ADC and supply");
	BPMSG1170;
	ADCON(); // turn ADC ON

#if defined (BUSPIRATEV4)
	BPMSG1270; //bpWstring("Vusb");
	bpADCPinTest(BP_ADC_USB,V5L, V5H);

	//bpPOSTWstring("5V");
	BPMSG1171;
	bpADCPinTest(BP_ADC_5V0,V5L, V5H);

	//enable 5v0 pullup and test
	BP_5VPU_ON();
	BPMSG1171; //bpWstring("5V0 VPU");
	bpWstring(" ");
	BPMSG1172; //VPU 
	
	bpDelayMS(2);
	bpADCPinTest(BP_ADC_VPU,V5L, V5H);
	BP_5VPU_OFF();

	//ADC test (3.3 volts)
	if(jumperTest){
		//ADC is connected to 3.3 volts
		//bpPOSTWstring("ADC");
		BPMSG1174;
		bpADCPinTest(BP_ADC_PROBE,V33L, V33H);
	}	

	//bpPOSTWstring("3.3V");
	BPMSG1173;
	bpADCPinTest(BP_ADC_3V3,V33L, V33H);

	//enable 3v3 pullup and test
	BP_3V3PU_ON();
	BPMSG1173; //bpWstring("3V3 VPU");
	bpWstring(" ");
	BPMSG1172; //VPU 
	
	bpDelayMS(2);
	bpADCPinTest(BP_ADC_VPU,V33L, V33H);
	BP_3V3PU_OFF();

#elif defined (BUSPIRATEV3)
	 //v3 test
	//0x030F is 5volts
	//bpPOSTWstring("5V");
	BPMSG1171;
	bpADCPinTest(BP_ADC_5V0,V5L, V5H);
	
	if(jumperTest){
		//Vpullup is connected to 5volts
		//bpPOSTWstring("VPU");
		BPMSG1172;
		bpADCPinTest(BP_ADC_VPU,V5L, V5H);
	}

	//0x0208 is 3.3volts
	//bpPOSTWstring("3.3V");
	BPMSG1173;
	bpADCPinTest(BP_ADC_3V3,V33L, V33H);

	if(jumperTest){
		//ADC is connected to 3.3volts
		//bpPOSTWstring("ADC");
		BPMSG1174;
		bpADCPinTest(BP_ADC_PROBE,V33L, V33H);
	}
#endif

	ADCOFF(); // turn ADC OFF 

//*************
//
//  Test bus pins three ways, also tests on-board pullup resistors:
//	1. normal/high, 2. open collector ground, 3. open collector high.
//
//***************

	//pullup off, pins=output & high, read input, high?
	//bpPOSTWline("Bus high");
	BPMSG1175;
	IODIR&= ~(ALLIO);//output
	IOLAT|=ALLIO; //high	
	bpDelayMS(100);
	bpBusPinsTest(1);

	//pullup on, pins=output & low, read input, low?
	//bpPOSTWline("Bus Hi-Z 0");
	BPMSG1176;
	IOLAT&= ~(ALLIO); //low
	if(jumperTest){
		#if defined	(BUSPIRATEV4)	
		BP_3V3PU_ON();
		#endif
		BP_PULLUP_ON();
	}
	bpDelayMS(100);
	bpBusPinsTest(0);

	if(jumperTest){
	//pullup on, pins=input & low, read input, high?
		//bpPOSTWline("Bus Hi-Z 1");
		BPMSG1177;
		IODIR|=ALLIO;//output
		bpDelayMS(100);
		bpBusPinsTest(1);
		#if defined	(BUSPIRATEV4)	
		BP_3V3PU_OFF();
		#endif
	}

//instructions (skip pause if no display output)
	if(showProgress && jumperTest){
		BP_VREG_ON();
		BP_MODELED_ON();
		//bpPOSTWline("MODE and VREG LEDs should be on! Any key exits.");
		#if defined (BUSPIRATEV4)
			BP_USBLED_ON();
		#endif
		BPMSG1178;
		BPMSG1250;
		//JTR Not required while(!UART1RXRdy());
		UART1RX();
		#ifdef BUSPIRATEV4
			BP_USBLED_OFF();
		#endif
		BP_MODELED_OFF();
		BP_VREG_OFF();
	}

	bpInit();//clean up

	BPMSG1179;
	bpWdec(errors);
	BPMSG1180;
	bpConfig.quiet=0;


	return errors;

}
unsigned int picwrite(unsigned int c)
{	int i;
	int mask;

	mask=0x01;

	if(picmode&PICCMDMSK)				// we got a command
	{	switch(picmode&PICMODEMSK)		// make it future proof
		{	case PICMODE6:	for(i=0; i<6; i++)
							{	bbH(CLK, PICSPEED/4);
								if(c&mask)
								{	bbH(MOSI, PICSPEED/4);
								}
								else
								{	bbL(MOSI, PICSPEED/4);
								}
								bbL(CLK, PICSPEED/4);
								bbL(MOSI, PICSPEED/4);		// both dat and clk low 
								mask<<=1;
							}
							break;
			case PICMODE4:	for(i=0; i<4; i++)
							{	bbH(CLK, PICSPEED/4);
								if(c&mask)
								{	bbH(MOSI, PICSPEED/4);
								}
								else
								{	bbL(MOSI, PICSPEED/4);
								}
								bbL(CLK, PICSPEED/4);
								bbL(MOSI, PICSPEED/4);		// both dat and clk low 
								mask<<=1;
							}
							break;
			default:		//bpWline("unknown");
						BPMSG1078;
							return 0;
		}
		bpDelayMS(piccmddelay);
	}
	else									// send data
	{	switch(picmode&PICMODEMSK)		// make it future proof
		{	case PICMODE6:	bbH(CLK, PICSPEED/4);			// send leading 0
							bbL(MOSI, PICSPEED/4);
							bbL(CLK, PICSPEED/4);
							bbL(CLK, PICSPEED/4);
							for(i=0; i<14; i++)				// 14 bits
							{	bbH(CLK, PICSPEED/4);
								if(c&mask)
								{	bbH(MOSI, PICSPEED/4);
								}
								else
								{	bbL(MOSI, PICSPEED/4);
								}
								bbL(CLK, PICSPEED/4);
								bbL(MOSI, PICSPEED/4);		// both dat and clk low 
								mask<<=1;
							}
							bbH(CLK, PICSPEED/4);			// send trailing 0
							bbL(MOSI, PICSPEED/4);
							bbL(CLK, PICSPEED/4);
							bbL(CLK, PICSPEED/4);
							break;
			case PICMODE4:	for(i=0; i<16; i++)				// does 16 bits at a time
							{	bbH(CLK, PICSPEED/4);
								if(c&mask)
								{	bbH(MOSI, PICSPEED/4);
								}
								else
								{	bbL(MOSI, PICSPEED/4);
								}
								bbL(CLK, PICSPEED/4);
								bbL(MOSI, PICSPEED/4);		// both dat and clk low 
								mask<<=1;
							}
							break;
			default:		//bpWline("unknown");
						BPMSG1078;
							return 0;
		}
	}
	return 0x100; 	// no data to display 
}