Evaluate: MAX1057/MAX1058/MAX1257/MAX1258
MAX1258 Evaluation Kit/Evaluation System
______________________________________________________________________________________ 31
MAX1258 EV kit Listing 2 06/01/04 4
MAX1258EV listing2
(unsigned __int8)(0)
};
unsigned __int8 miso_buf[sizeof(mosi)];
bool result = SPI_Transfer_MISO_Delayed(sizeof(mosi), mosi, miso_buf);
if (result) {
int data16 = (miso_buf[0] * 0x100) + miso_buf[1];
adc_code[index] = data16;
return data16;
}
#if THROW_EXCEPTIONS
throw "SPI_Transfer failed in MAX1258::Read_Data";
#else
return MAX1258_IMPOSSIBLE_DATA_VALUE;
#endif
}
//---------------------------------------------------------------------------
int MAX1258::Read_Data_Trigger_Next_Conversion(int index)
{
if ((index < 0) || (index >=
17)) {
#if THROW_EXCEPTIONS
throw "illegal channel index in MAX1258::Read_Data_Trigger_Next_Conversion";
#else
return MAX1254_IMPOSSIBLE_DATA_VALUE;
#endif
}
const unsigned __int8 mosi[] = {
(unsigned __int8)(0),
(unsigned __int8)(conversion_register)
};
unsigned __int8 miso_buf[sizeof(mosi)];
bool result = SPI_Transfer_MISO_Delayed(sizeof(mosi), mosi, miso_buf);
if (result) {
int data16 = (miso_buf[0] * 0x100) + miso_buf[1];
adc_code[index] = data16;
return data16;
}
#if THROW_EXCEPTIONS
throw "SPI_Transfer failed in MAX1258::Read_Data_Trigger_Next_Conversion";
#else
return MAX1258_IMPOSSIBLE_DATA_VALUE;
#endif
}
//---------------------------------------------------------------------------
bool MAX1258::Read_Multiple_Data_Channels(int count)
{
switch(setup_register & 0x30)
{
case 0x00: // 0100xxxx pin16=CNVST, Int clock, Triggered by CNVST pulse
// Clock mode 00:
// Pulse CNVST pin
// Wait for EOC low
// issue command "R" to read each 16-bit value from the FIFO
//
// Update configuration register value only if necessary.
if (new_conversion_register != conversion_register) {
Write_Conversion(new_conversion_register);
}
// Trigger conversion by pulsing the CNVST pin.
Pulse_MAX1258_CONV();
if (Wait_MAX1258_EOC_Low()) {
for (int index = 0; index < count; index++) {
Read_Data(index);
}
}
return true;
case 0x10: // 0101xxxx pin16=CNVST, Int clock, Triggered by CNVST pulses, custom Tacq
// Clock mode 01:
// For each requested channel,
Listing 2 (Sheet 4 of 14)
Evaluate: MAX1057/MAX1058/MAX1257/MAX1258
MAX1258 Evaluation Kit/Evaluation System
32 ______________________________________________________________________________________
MAX1258 EV kit Listing 2 06/01/04 5
MAX1258EV listing2
// Drive CNVST pin low
// Delay for the acquisition time (run this delay on 68HC16?)
// Drive CNVST pin high
// Wait for EOC low
// issue command "R" to read each 16-bit value from the FIFO
//
// Update configuration register value only if necessary.
if (new_conversion_register != conversion_register) {
Write_Conversion(new_conversion_register);
}
// Trigger conversion by pulsing the CNVST pin for each channel.
for (int index = 0; index < 17; index++) {
if (FIFO_meaning[index] != UNDEFINED)
{
Pulse_MAX1258_CONV(); // TODO: pulse width sets acquisition time for each channel
if (Wait_MAX1258_EOC_Low()) {
Read_Data(index);
}
}
}
return true;
case 0x20: // 0110xxxx pin16=AIN15, Int clock, Triggered by conversion register write
{
// Clock mode 10:
// Write to the converion register 1xxx xxxx using command "Wxx"
// Wait for EOC low
// issue command "R" to read each 16-bit value from the FIFO
//
// Trigger conversion by writing the conversion register.
Write_Conversion(new_conversion_register);
if (Wait_MAX1258_EOC_Low()) {
for (int index = 0; index < count; index++) {
Read_Data(index);
}
}
}
return true;
case 0x30: // 0111xxxx pin16=AIN15, Ext clock, Triggered by conversion register write
// Clock mode 11:
// Write to the converion register 1xxx xxxx using command "Wxx"
// issue command "R" to read 16-bit value
//
// Trigger conversion by writing the conversion register.
Write_Conversion(new_conversion_register);
// Clock mode 11 does not generate an EOC pulse.
Read_Data_Trigger_Next_Conversion(0);
return true;
}
return false; // TODO: this code was optimized into machine language file KIT1258.ASM
// to increase data throughput. Need to convert back to portable C code,
// and probably #ifdef it back to the optimized 68HC16-specific program.
}
//---------------------------------------------------------------------------
void MAX1258::Update_InputPairConfig(void)
{
for (int index = 0; index < 8; index++) {
InputPairConfig[index] = SINGLE_ENDED;
}
if (setup_bipdiff_register & MAX1258_SETUP_BIPDIF0001)
InputPairConfig[0] = BIPOLAR_DIFFERENTIAL;
if (setup_bipdiff_register & MAX1258_SETUP_BIPDIF0203)
InputPairConfig[1] = BIPOLAR_DIFFERENTIAL;
if (setup_bipdiff_register & MAX1258_SETUP_BIPDIF0405)
InputPairConfig[2] = BIPOLAR_DIFFERENTIAL;
if (setup_bipdiff_register & MAX1258_SETUP_BIPDIF0607)
Listing 2 (Sheet 5 of 14)
Evaluate: MAX1057/MAX1058/MAX1257/MAX1258
MAX1258 Evaluation Kit/Evaluation System
______________________________________________________________________________________ 33
MAX1258 EV kit Listing 2 06/01/04 6
MAX1258EV listing2
InputPairConfig[3] = BIPOLAR_DIFFERENTIAL;
if (setup_bipdiff_register & MAX1258_SETUP_BIPDIF0809)
InputPairConfig[4] = BIPOLAR_DIFFERENTIAL;
if (setup_bipdiff_register & MAX1258_SETUP_BIPDIF1011)
InputPairConfig[5] = BIPOLAR_DIFFERENTIAL;
if (setup_bipdiff_register & MAX1258_SETUP_BIPDIF1213)
InputPairConfig[6] = BIPOLAR_DIFFERENTIAL;
if (setup_bipdiff_register & MAX1258_SETUP_BIPDIF1415)
InputPairConfig[7] = BIPOLAR_DIFFERENTIAL;
if (setup_unidiff_register & MAX1258_SETUP_UNIDIF0001)
InputPairConfig[0] = UNIPOLAR_DIFFERENTIAL;
if (setup_unidiff_register & MAX1258_SETUP_UNIDIF0203)
InputPairConfig[1] = UNIPOLAR_DIFFERENTIAL;
if (setup_unidiff_register & MAX1258_SETUP_UNIDIF0405)
InputPairConfig[2] = UNIPOLAR_DIFFERENTIAL;
if (setup_unidiff_register & MAX1258_SETUP_UNIDIF0607)
InputPairConfig[3] = UNIPOLAR_DIFFERENTIAL;
if (setup_unidiff_register & MAX1258_SETUP_UNIDIF0809)
InputPairConfig[4] = UNIPOLAR_DIFFERENTIAL;
if (setup_unidiff_register & MAX1258_SETUP_UNIDIF1011)
InputPairConfig[5] = UNIPOLAR_DIFFERENTIAL;
if (setup_unidiff_register & MAX1258_SETUP_UNIDIF1213)
InputPairConfig[6] = UNIPOLAR_DIFFERENTIAL;
if (setup_unidiff_register & MAX1258_SETUP_UNIDIF1415)
InputPairConfig[7] = UNIPOLAR_DIFFERENTIAL;
}
//---------------------------------------------------------------------------
void MAX1258::Update_FIFO_meaning(void)
{
int conversion_register = new_conversion_register;
for (int index = 0; index < 17; index++) {
FIFO_meaning[index] = UNDEFINED;
}
int channel_field = (conversion_register >> 3) & 0x0F;
int channel_index = channel_field;
int repeat_count = 4;
switch(averaging_register & 0xE3) {
case MAX1258_REPEAT_4: // 001xxx00 4 times
repeat_count = 4;
break;
case MAX1258_REPEAT_8: // 001xxx01 8 times
repeat_count = 8;
break;
case MAX1258_REPEAT_12: // 001xxx10 12 times
repeat_count = 12;
break;
case MAX1258_REPEAT_16: // 001xxx11 16 times
repeat_count = 16;
break;
}
MAX1258_fifo_entry_t meaning =
(MAX1258_fifo_entry_t)(UNIAIN00 + channel_field);
if (InputPairConfig[channel_field / 2] == BIPOLAR_DIFFERENTIAL) {
meaning = (MAX1258_fifo_entry_t)(BIPDIF0001 + channel_field/2);
} else if (InputPairConfig[channel_field / 2] == UNIPOLAR_DIFFERENTIAL) {
meaning = (MAX1258_fifo_entry_t)(UNIDIF0001 + channel_field/2);
}
int index = 0;
switch(conversion_register & MAX1258_ACTION_MASK) {
case MAX1258_CONV_SCAN_00_N:
meaning = UNIAIN00;
channel_index = 0;
while(channel_index <= channel_field) {
int pair_index = channel_index / 2;
if (InputPairConfig[pair_index] == BIPOLAR_DIFFERENTIAL) {
Listing 2 (Sheet 6 of 14)

MAX1258EVKIT

Mfr. #:
Manufacturer:
Maxim Integrated
Description:
Data Conversion IC Development Tools MAX1258 Eval Kit
Lifecycle:
New from this manufacturer.
Delivery:
DHL FedEx Ups TNT EMS
Payment:
T/T Paypal Visa MoneyGram Western Union

Products related to this Datasheet