CROSS Technical Documentation User Manual and Technical Doc.
INFN Milano Bicocca
Loading...
Searching...
No Matches

◆ ADC_lettura_registro()

uint32_t ADC_lettura_registro ( char  ADC_0_o_1,
uint8_t  up_down,
uint8_t  registro_ch0 
)

This function allows to read a whatver regsiter of the ADC.

Parameters
[in]ADC_0_o_1: which of the 2 ADCs the register is considered
[in]up_down: which of the 2 ADCs to consider
[in]registro_ch0: the address of the register to read. the address is for ch0. If ch1 is selected according to ADC_0_o_1
Returns
ADC_misura_fatta is the voltage measured in microV.
592uint32_t ADC_lettura_registro(char ADC_0_o_1 /*0=ADC0, 1=ADC1*/, uint8_t up_down, uint8_t registro_ch0){
593
594// unsigned long int registro_di_controllo;
595 long int risultato=0;
596 uint8_t byte_da_trasmettere_ricevere=2;
597 if(up_down>1)up_down=1;
598 if( (registro_ch0>=5) && (registro_ch0<=0x18) ) byte_da_trasmettere_ricevere=4;
599
600 uint8_t ii=0,scelta_ADC=ADC_mode_reg_ch0, valore_da_ricevere[4]={0,0,0,0}, registro_lettura=read_from_CH0 ;
601
602 const porta_pin_def *ref_locale, *ref_locale_ADCready;
603
604 if ( up_down == I2C_mux_Scheda_giu){
605 ref_locale =&ADC_Chip_Sel_down;
606 }else{
607 ref_locale =&ADC_Chip_Sel_up;
608 }
609
610 if (registro_ch0 ==0x38){
611 registro_lettura= registro_ch0 +0x40; //il mode register, 0x38 si pu\'o leggere solo sul canale CH0
612 }else{
613 registro_lettura= registro_ch0 + ADC_0_o_1*2 +0x40;
614 }
615
616
617GPIO_PinWrite(ref_locale->porta_num, ref_locale->pin_num, 0); // Viene abbassato il chip selector ADC per la lettura
618
619// SPIdrv->Receive ( &valore_da_trasmettere ,3);
620 uint8_t istruzione[]={registro_lettura,0,0,0};
621 SPIdrv->Transfer (&istruzione, &valore_da_ricevere ,byte_da_trasmettere_ricevere);
622// while( (SPIdrv->GetStatus().busy) ){}
623
624 uint8_t troppa_attesa=0;
625 while( (SPIdrv->GetStatus().busy) && (troppa_attesa <250) ){
627 troppa_attesa++;
628 } //wait end of transmission ;
629 if((troppa_attesa>=250) || (Error_bad_operation)) ERROR_codifica_errore(scheda_su_scheda_giu, error_address_SPI, SPI_error_EVENT_DATA_LOST,1);
630
631GPIO_PinWrite(ref_locale->porta_num, ref_locale->pin_num, 1); // Viene abbassato il chip selector ADC per la lettura
632 if( byte_da_trasmettere_ricevere ==4){
633 risultato = (valore_da_ricevere[1]<<16) + (valore_da_ricevere[2]<<8) + (valore_da_ricevere[3]);
634 }else{
635 risultato = (valore_da_ricevere[1]);
636 }
637return risultato;
638}
uint32_t ADC_lettura_registro(char ADC_0_o_1, uint8_t up_down, uint8_t registro_ch0)
This function allows to read a whatver regsiter of the ADC.
Definition: Adc.c:592
volatile uint32_t Error_bad_operation
exploited to mark the errors
void ERROR_codifica_errore(uint8_t scheda_su_scheda_giu, unsigned char error_addres, unsigned char code_to_shift, uint8_t reset_count_se_0)
If an error is found its flag is codified here.
@ error_address_SPI
Error register for SPI.
@ SPI_error_EVENT_DATA_LOST
This is ARM_SPI_EVENT_DATA_LOST.
const porta_pin_def ADC_Chip_Sel_up
Configuration ADC pin.
Definition: Gpio.c:146
const porta_pin_def ADC_Chip_Sel_down
Configuration ADC pin.
Definition: Gpio.c:149
#define I2C_mux_Scheda_giu
Selection of the I2C1 for lower board (purtroppo \'e contorto)
Definition: I2C_mux.h:16
void Aspetta_tanti_ms(int millisecondi)
The timing function.
Definition: Timer.c:52
Definition: Gpio.h:13

Definition at line 592 of file Adc.c.