Правильно вы выразились - "дурацкие". Мои исходники основываются на
datasheet. Возмущаюсь и удивляюсь увиденному в ардуиновских. Мой
код пишет и читает регистры, вычитывает значения(картинка тут
была), но коэффициент усиления не переключается даже при смене PGA в ADCON. void ADC_RegW( uint8_t reg, uint8_t val)
{
UINT8 reg_a;
reg_a = ((reg & 0x0F) | 0x50);
SPIx->TRX0 = reg_a; // first byte (command)
SPIx->TRX1 = 0x00; // number of REGs
SPIx->TRX2 = val; // Third byte (value)
SPIx_seqLen(3);
SPIx->Cntrl |= (1<<0);// Start transfer
wait_clk( 3*T_BYTE+T_TAU(8) ); // t10 interval
wait_clk( 0*T_BYTE+T_TAU(4) );
}
uint8_t ADC_RegR( uint8_t reg)
{
// ADC_select0();
UINT8 reg_a;
reg_a = ((reg & 0x0F) | 0x10);
SPIx->TRX0 = reg_a; // first byte
SPIx->TRX1 = 0x00; // second
SPIx_seqLen(2); // two transactions
SPIx->Cntrl |= 1<<0; // Start transfer
// Wait 2*trx+t6
wait_clk( 2*T_BYTE+T_TAU(50) );
// receiving transfer
SPIx->TRX0 = 0x00;
SPIx_seqLen(1);
SPIx->TRX0 = 0x00; // Hold Low level
SPIx->Cntrl |= 1<<0; // Start transfer
wait_clk( T_BYTE+T_TAU(8) );
// ADC_release0();
return( SPIx->TRX0 );
}