Esempio n. 1
0
void
SpiDeviceTest::testMultipleTransmissions()
{
	test::Transmission transmissions[] = {
		test::Transmission(4, RX_DATA(1,2,3,4), TX_DATA(4,3,2,1)),
		test::Transmission(2, RX_DATA(5, 6), TX_DATA(100, 101)),
	};
	
	test::SpiDevice device;
	device.start(transmissions, ARRAY_SIZE(transmissions), __LINE__, false);
	
	TEST_ASSERT_FALSE(device.isSuccessful());
	
	device.select();
	TEST_ASSERT_EQUALS(device.write(1), 4);
	TEST_ASSERT_EQUALS(device.write(2), 3);
	TEST_ASSERT_EQUALS(device.write(3), 2);
	TEST_ASSERT_EQUALS(device.write(4), 1);
	device.deselect();
	
	device.select();
	TEST_ASSERT_EQUALS(device.write(5), 100);
	TEST_ASSERT_EQUALS(device.write(6), 101);
	device.deselect();
	
	TEST_ASSERT_TRUE(device.isSuccessful());
}
Esempio n. 2
0
// ----------------------------------------------------------------------------
void
Ad7280aTest::testSoftwareReset()
{
	test::Transmission transmissionsInitialize[] = {
		test::Transmission(4, RX_DATA(0x01,0xD2,0xB4,0x12), TX_DATA(0x00,0x00,0x00,0x00)),
		test::Transmission(4, RX_DATA(0x01,0xC2,0xB6,0xE2), TX_DATA(0x00,0x00,0x00,0x00)),
	};
	
	device.start(transmissionsInitialize, ARRAY_SIZE(transmissionsInitialize), __LINE__);
	
	Ad7280a::softwareReset();
	
	device.finish();
}
Esempio n. 3
0
// ----------------------------------------------------------------------------
void
Ad7280aTest::testAllChannelRead()
{
	test::Transmission transmissionsInitialize[] = {
		test::Transmission(4, RX_DATA(0x03,0x80,0x11,0xCA), TX_DATA(0x00,0x00,0x00,0x00)),
		test::Transmission(4, RX_DATA(0x01,0xB5,0x14,0xEA), TX_DATA(0x00,0x00,0x00,0x00)),
		
		test::Transmission(4, RX_DATA(0xF8,0x00,0x03,0x0A), TX_DATA(0x00,0x03,0x27,0x24)),
		test::Transmission(4, RX_DATA(0xF8,0x00,0x03,0x0A), TX_DATA(0x00,0x86,0x47,0x34)),
		test::Transmission(4, RX_DATA(0xF8,0x00,0x03,0x0A), TX_DATA(0x01,0x09,0x67,0x84)),
		test::Transmission(4, RX_DATA(0xF8,0x00,0x03,0x0A), TX_DATA(0x01,0x8C,0x87,0x14)),
		test::Transmission(4, RX_DATA(0xF8,0x00,0x03,0x0A), TX_DATA(0x02,0x0F,0xA5,0xEC)),
		test::Transmission(4, RX_DATA(0xF8,0x00,0x03,0x0A), TX_DATA(0x02,0x92,0xC6,0x74)),
	};
	
	device.start(transmissionsInitialize, ARRAY_SIZE(transmissionsInitialize), __LINE__);
	
	uint16_t values[6];
	TEST_ASSERT_TRUE(Ad7280a::readAllChannels(values));
	
	TEST_ASSERT_EQUALS(values[0], 100);
	TEST_ASSERT_EQUALS(values[1], 200);
	TEST_ASSERT_EQUALS(values[2], 300);
	TEST_ASSERT_EQUALS(values[3], 400);
	TEST_ASSERT_EQUALS(values[4], 500);
	TEST_ASSERT_EQUALS(values[5], 600);
	
	device.finish();
}
Esempio n. 4
0
int serial_getchar(void)
{
    unsigned int Status;
    unsigned int Ch;

	Ch=0;
    //Ch = lib_support_getchar();
    if (Ch == 0)
    {
#if defined(SEMIHOSTED)
	// Use the debugger if the ports are the same
	if (HOST_COMPORT == OS_COMPORT)
	    Ch = (int)SWI_READC();
	else
#endif
	{	    
		do
		{
			Status = GET_STATUS(OS_COMPORT);
	    }
	    while (!RX_DATA(Status));	// wait until ready

	    Ch = GET_CHAR(OS_COMPORT);
	}
    }
    return ((int)Ch);
}				
Esempio n. 5
0
static int cyg_hal_plf_serial_isr(void *__ch_data, int* __ctrlc, CYG_ADDRWORD __vector, CYG_ADDRWORD __data)
{
  int                   res       = 0;
  channel_data_t*       chan      = (channel_data_t*)__ch_data;
  volatile cyg_uint32*  pulBase   = chan->pulBase;
  char                  c;
  cyg_uint32            status;
  CYGARC_HAL_SAVE_GP();

  cyg_drv_interrupt_acknowledge(chan->isr_vector);

  *__ctrlc = 0;
  status = pulBase[REL_Adr_uartfr / sizeof(cyg_uint32)];

  if(RX_DATA(status)) 
  {
    c = (cyg_uint8)(pulBase[REL_Adr_uartdr / sizeof(cyg_uint32)] & 0xFF);

    if( cyg_hal_is_break( &c , 1 ) )
      *__ctrlc = 1;

    res = CYG_ISR_HANDLED;
  }

  CYGARC_HAL_RESTORE_GP();
  return res;
}
Esempio n. 6
0
// ----------------------------------------------------------------------------
void
Ad7280aTest::testChainSetup()
{
	test::Transmission transmissionsInitialize[] = {
		test::Transmission(4, RX_DATA(0x01,0xD2,0xB4,0x12), TX_DATA(0x00,0x00,0x00,0x00)),
		test::Transmission(4, RX_DATA(0x01,0xC2,0xB6,0xE2), TX_DATA(0x00,0x00,0x00,0x00)),
		test::Transmission(4, RX_DATA(0x03,0x87,0x16,0xCA), TX_DATA(0x00,0x00,0x00,0x00)),
		test::Transmission(4, RX_DATA(0xF8,0x00,0x03,0x0A), TX_DATA(0x11,0xC2,0x65,0xDC)),
	};
	
	device.start(transmissionsInitialize, ARRAY_SIZE(transmissionsInitialize), __LINE__);
	
	TEST_ASSERT_TRUE(Ad7280a::chainSetup());
	
	device.finish();
}
Esempio n. 7
0
static int
cyg_hal_plf_serial_isr(void *__ch_data, int* __ctrlc, 
                       CYG_ADDRWORD __vector, CYG_ADDRWORD __data)
{
    int res = 0;
    channel_data_t* chan = (channel_data_t*)__ch_data;
    char c;
    cyg_uint32 status;
    CYGARC_HAL_SAVE_GP();

    cyg_drv_interrupt_acknowledge(chan->isr_vector);

    *__ctrlc = 0;
    status = GET_STATUS(chan->base);

    if ( RX_DATA(status) ) {
        c = GET_CHAR(chan->base);

        if( cyg_hal_is_break( &c , 1 ) )
            *__ctrlc = 1;

        res = CYG_ISR_HANDLED;
    }

    CYGARC_HAL_RESTORE_GP();
    return res;
}
Esempio n. 8
0
// ----------------------------------------------------------------------------
void
Ad7280aTest::testSelftest()
{
	test::Transmission transmissionsInitialize[] = {
		test::Transmission(4, RX_DATA(0x01,0xC2,0xB6,0xE2), TX_DATA(0x00,0x00,0x00,0x00)),
		test::Transmission(4, RX_DATA(0x01,0xB9,0x11,0x92), TX_DATA(0x00,0x00,0x00,0x00)),
		test::Transmission(4, RX_DATA(0x03,0x86,0x17,0xCA), TX_DATA(0x00,0x00,0x00,0x00)),
		
		// Read the self-test conversion result (value = 980)
		test::Transmission(4, RX_DATA(0xF8,0x00,0x03,0x0A), TX_DATA(0x00,0x1E,0xA5,0x90)),
	};
	
	device.start(transmissionsInitialize, ARRAY_SIZE(transmissionsInitialize), __LINE__);
	
	TEST_ASSERT_TRUE(Ad7280a::performSelftest());
	
	device.finish();
}
Esempio n. 9
0
// ----------------------------------------------------------------------------
void
Ad7280aTest::testChannelRead()
{
	test::Transmission transmissionsInitialize[] = {
		test::Transmission(4, RX_DATA(0x01,0xA6,0x15,0x1A), TX_DATA(0x00,0x00,0x00,0x00)),
		test::Transmission(4, RX_DATA(0x01,0xA1,0x02,0x0A), TX_DATA(0x00,0x00,0x00,0x00)),
		test::Transmission(4, RX_DATA(0x03,0x80,0x61,0xBA), TX_DATA(0x00,0x00,0x00,0x00)),
		
		test::Transmission(4, RX_DATA(0xF8,0x00,0x03,0x0A), TX_DATA(0x01,0x91,0x2D,0x88)),
	};
	
	device.start(transmissionsInitialize, ARRAY_SIZE(transmissionsInitialize), __LINE__);
	
	uint16_t value;
	TEST_ASSERT_TRUE(Ad7280a::readChannel(0, xpcc::ad7280a::CELL_VOLTAGE_4, &value));
	
	TEST_ASSERT_EQUALS(value, 549);
	
	device.finish();
}
Esempio n. 10
0
// ----------------------------------------------------------------------------
void
Ad7280aTest::testBalancer()
{
	test::Transmission transmissionsInitialize[] = {
		test::Transmission(4, RX_DATA(0x02,0x81,0x83,0xC2), TX_DATA(0x00,0x00,0x00,0x00)),
	};
	
	device.start(transmissionsInitialize, ARRAY_SIZE(transmissionsInitialize), __LINE__);
	
	Ad7280a::enableBalancer(0, xpcc::ad7280a::CB1 | xpcc::ad7280a::CB2);
	
	device.finish();
}
Esempio n. 11
0
static cyg_bool
cyg_hal_plf_serial_getc_nonblock(void* __ch_data, cyg_uint8* ch)
{
    cyg_uint8* base = ((channel_data_t*)__ch_data)->base;
    cyg_uint32 status ;
    long timeout = 100;  // A long time...

    do {
      status = GET_STATUS(base);
      if (--timeout == 0) return false ; 
    } while (!RX_DATA(status));	// wait until ready

    *ch = GET_CHAR(base);

    return true;
}
Esempio n. 12
0
static cyg_bool cyg_hal_plf_serial_getc_nonblock(void* __ch_data, cyg_uint8* ch)
{
  volatile cyg_uint32*  pulBase = ((channel_data_t*)__ch_data)->pulBase;
  cyg_uint32  status ;
  long timeout = 100;  // A long time...

  do 
  {
    status = pulBase[REL_Adr_uartfr / sizeof(cyg_uint32)];
    if (--timeout == 0) 
      return false ; 
  } while (!RX_DATA(status));	// wait until ready

  *ch = (cyg_uint8)(pulBase[REL_Adr_uartdr / sizeof(cyg_uint32)] & 0xFF);

  return true;
}
Esempio n. 13
0
int serial_kbhit(void)
{
    unsigned int Status;

#if defined(SEMIHOSTED)

    // If the ports are the same, have to use the debugger and we
    // can't tell if there is a character available
    if (HOST_COMPORT == OS_COMPORT)
    {
	return (1);
    }

#endif
    //lib_flush_buffer();
    Status = GET_STATUS(0xFFF80000);
    if (!RX_DATA(Status))
	return (0);
    else
	return (1);
}
Esempio n. 14
0
void
SpiDeviceTest::testSingleTransmission()
{
	test::Transmission transmissions[] = {
		test::Transmission(4, RX_DATA(1,2,3,4), TX_DATA(4,3,2,1)),
	};
	
	test::SpiDevice device;
	device.start(transmissions, ARRAY_SIZE(transmissions), __LINE__, false);
	
	TEST_ASSERT_FALSE(device.isSuccessful());
	
	device.select();
	TEST_ASSERT_EQUALS(device.write(1), 4);
	TEST_ASSERT_EQUALS(device.write(2), 3);
	TEST_ASSERT_EQUALS(device.write(3), 2);
	TEST_ASSERT_EQUALS(device.write(4), 1);
	device.deselect();
	
	TEST_ASSERT_TRUE(device.isSuccessful());
	
	device.select();
	device.deselect();
	
	TEST_ASSERT_FALSE(device.isSuccessful());
	
	// Restart transmission
	device.start(transmissions, ARRAY_SIZE(transmissions), __LINE__, false);
	device.select();
	TEST_ASSERT_EQUALS(device.write(1), 4);
	TEST_ASSERT_EQUALS(device.write(2), 3);
	TEST_ASSERT_EQUALS(device.write(3), 2);
	TEST_ASSERT_EQUALS(device.write(4), 1);
	TEST_ASSERT_EQUALS(device.write(5), 0xff);		// one byte to much
	device.deselect();
	
	TEST_ASSERT_FALSE(device.isSuccessful());
}