Pokračujem ďalej, a samozrejme ďalšie problémy. Tentokrát externý ADC MAX11254 na SPI rozhraní nereaguje. Najlepšie by mi bolo odchytiť na LA komunikáciu, ale toľko šťastia na vybavenie nemám. Je v tomto kóde vidno nejakú chybu?
Kód: Vybrať všetko
void Spi_Init()
{
SPI0_CTRLB = SPI_SSD_bm;
SPI0_CTRLA = SPI_MASTER_bm | SPI_ENABLE_bm;
}
void Spi_Transmit(uint8_t csbline, uint8_t *data, uint8_t len)
{
if(csbline)
PORTC_OUTCLR = 0x80;
else
PORTC_OUTCLR = 0x40;
for(uint8_t i = 0;i < len;i++,data++)
{
SPI0_DATA = *data;
while(!(SPI0_INTFLAGS & SPI_IF_bm));
uint8_t dummy = SPI0_DATA;
}
if(csbline)
PORTC_OUTSET = 0x80;
else
PORTC_OUTSET = 0x40;
}
void Spi_TransmitReceive(uint8_t csbline, uint8_t *data, uint8_t lentx, uint8_t lenrx)
{
uint8_t *rxdata = data;
if(csbline)
PORTC_OUTCLR = 0x80;
else
PORTC_OUTCLR = 0x40;
for(uint8_t i = 0;i < lentx;i++,data++)
{
SPI0_DATA = *data;
while(!(SPI0_INTFLAGS & SPI_IF_bm));
uint8_t dummy = SPI0_DATA;
}
for(uint8_t i = 0;i < lenrx;i++,rxdata++)
{
SPI0_DATA = 0;
while(!(SPI0_INTFLAGS & SPI_IF_bm));
*rxdata = SPI0_DATA;
}
if(csbline)
PORTC_OUTSET = 0x80;
else
PORTC_OUTSET = 0x40;
}
Kód: Vybrať všetko
Adc_SetReg8(0,ADC_REG_CTRL1,ADC_CTRL1_UB_UNIPOLAR | ADC_CTRL1_SCYCLE);
Adc_SetReg8(0,ADC_REG_CTRL2,ADC_CTRL2_EXTCLK | ADC_CTRL2_CSSEN | ADC_CTRL2_LDOEN | ADC_CTRL2_PGAEN | ADC_CTRL2_PGA_64);
Adc_SetReg8(0,ADC_REG_CTRL3,ADC_CTRL3_SYNCMODE | ADC_CTRL3_NOSYSG | ADC_CTRL3_NOSYSO | ADC_CTRL3_NOSCG | ADC_CTRL3_NOSCO);
Adc_SetReg8(0,ADC_REG_GPIOCTRL,0);
Adc_SetReg24(0,ADC_REG_CHMAP0,((ADC_CHMAP_CHEN | ADC_CHMAP_ORD_1) << ADC_CHMAP0_CH0_Pos) | ((ADC_CHMAP_CHEN | ADC_CHMAP_ORD_2) << ADC_CHMAP0_CH1_Pos) | ((ADC_CHMAP_CHEN | ADC_CHMAP_ORD_3) << ADC_CHMAP0_CH2_Pos));
Adc_SetReg24(0,ADC_REG_CHMAP1,((ADC_CHMAP_CHEN | ADC_CHMAP_ORD_4) << ADC_CHMAP1_CH3_Pos) | ((ADC_CHMAP_CHEN | ADC_CHMAP_ORD_5) << ADC_CHMAP1_CH4_Pos));
Adc_SetReg8(0,ADC_REG_SEQ,ADC_SEQ_MODE2);
Adc_SetReg8(1,ADC_REG_CTRL1,ADC_CTRL1_UB_UNIPOLAR | ADC_CTRL1_SCYCLE);
Adc_SetReg8(1,ADC_REG_CTRL2,ADC_CTRL2_EXTCLK | ADC_CTRL2_CSSEN | ADC_CTRL2_LDOEN | ADC_CTRL2_PGAEN | ADC_CTRL2_PGA_64);
Adc_SetReg8(1,ADC_REG_CTRL3,ADC_CTRL3_SYNCMODE | ADC_CTRL3_NOSYSG | ADC_CTRL3_NOSYSO | ADC_CTRL3_NOSCG | ADC_CTRL3_NOSCO);
Adc_SetReg8(1,ADC_REG_GPIOCTRL,0);
Adc_SetReg24(1,ADC_REG_CHMAP0,((ADC_CHMAP_CHEN | ADC_CHMAP_ORD_1) << ADC_CHMAP0_CH0_Pos) | ((ADC_CHMAP_CHEN | ADC_CHMAP_ORD_2) << ADC_CHMAP0_CH1_Pos) | ((ADC_CHMAP_CHEN | ADC_CHMAP_ORD_3) << ADC_CHMAP0_CH2_Pos));
Adc_SetReg24(1,ADC_REG_CHMAP1,((ADC_CHMAP_CHEN | ADC_CHMAP_ORD_4) << ADC_CHMAP1_CH3_Pos) | ((ADC_CHMAP_CHEN | ADC_CHMAP_ORD_5) << ADC_CHMAP1_CH4_Pos));
Adc_SetReg8(1,ADC_REG_SEQ,ADC_SEQ_MODE2);