251#include "tutti_gli_header.h"
289 uint16_t indirizzo_memoria= *(uint16_t *)
tx_data;
290 uint8_t quale_memoria = (
tx_data[6]>>3) & 3;
291 uint8_t Write_read = (
tx_data[6] >>5) &1;
292 uint8_t canale,quale_canale = (
tx_data[6] & 7) ;
293 uint8_t scheda_su_scheda_giu = ((
tx_data[6]>>7) & 1)*6;
294 uint8_t dati_letti[4],canale_da_usare;
295 #define preamplifier_memory 0
296 #define mainboard_memory 1
297 #define postfronend_memory 2
299 switch (quale_memoria){
300 case preamplifier_memory:
305 canale = quale_canale;
315 case mainboard_memory:
325 case postfronend_memory:
327 canale_da_usare= Canale_EPROM_postmainboard_down;
329 canale_da_usare=Canale_EPROM_postmainboard_up;
342 if(flag_error_verified){
367 indirizzo_memoria = indirizzo_memoria & 0xFFFC;
368 dati_letti[0]= (indirizzo_memoria & 0xFF);
369 indirizzi_I2C |= (indirizzo_memoria & 0x300)>>8 ;
372 I2CBdrv->MasterTransmit (indirizzi_I2C, dati_letti , 1,
false);
373 while (I2CBdrv->GetStatus().busy);
375 I2CBdrv-> MasterReceive (indirizzi_I2C, dati_letti, 4,
false);
376 while (I2CBdrv->GetStatus().busy);
397 uint8_t Indirizzo_I2C_effettivo = (indirizzo_memoria & 0x3FF) >>8 ;
399 uint8_t indirizzo_memoria_8LSB= indirizzo_memoria & 0xFF;
400 uint8_t dati_da_spedire[5];
402 dati_da_spedire[0]=indirizzo_memoria_8LSB;
403 dati_da_spedire[1]=dati_da_scrivere[0];
404 dati_da_spedire[2]=dati_da_scrivere[1];
405 dati_da_spedire[3]=dati_da_scrivere[2];
406 dati_da_spedire[4]=dati_da_scrivere[3];
408 Indirizzo_I2C_effettivo +=
EPROM_address[canale].indirizzo_I2C;
411 I2CBdrv->MasterTransmit (Indirizzo_I2C_effettivo, dati_da_spedire , 5,
false);
412 while (I2CBdrv->GetStatus().busy);
435void EPROM_scrittura_M24C32_64(uint8_t scheda_su_scheda_giu, uint8_t mainboard_postmainboard, uint8_t canale,
short indirizzo_memoria , uint8_t *dati_da_scrivere){
440 uint8_t dati_da_spedire[6], tampone_qui=100, error_I2C;
442 dati_da_spedire[1]=indirizzo_memoria & 0xFF;
443 dati_da_spedire[0]=( indirizzo_memoria >> 8) & 0xFF;
444 dati_da_spedire[2]=dati_da_scrivere[0];
445 dati_da_spedire[3]=dati_da_scrivere[1];
446 dati_da_spedire[4]=dati_da_scrivere[2];
447 dati_da_spedire[5]=dati_da_scrivere[3];
450 if(mainboard_postmainboard == I2C_mainboard){
451 tampone_qui=I2C_mainboard;
453 }
else if (mainboard_postmainboard == I2C_postmainboard){
454 tampone_qui=I2C_postmainboard;
457 if (tampone_qui<100){
459 I2C_mux->MasterTransmit (
EPROM_address[canale].indirizzo_I2C, dati_da_spedire , 6,
false);
460 while (I2C_mux->GetStatus().busy);
484 short indirizzo_memoria , uint8_t *dati_letti){
485 uint8_t tampone_qui=100,error_I2C;
488 dati_letti[1]= (indirizzo_memoria & 0xFF);
489 dati_letti[0]=( (indirizzo_memoria >> 8) & 0xFF);
493 if(mainboard_postmainboard == I2C_mainboard){
494 tampone_qui=I2C_mainboard;
496 }
else if (mainboard_postmainboard == I2C_postmainboard){
497 tampone_qui=I2C_postmainboard;
500 if (tampone_qui<100){
502 I2C_mux->MasterTransmit (
EPROM_address[canale].indirizzo_I2C, dati_letti , 2,
false);
503 while (I2C_mux->GetStatus().busy);
505 I2C_mux-> MasterReceive (
EPROM_address[canale].indirizzo_I2C, dati_letti, 4,
false);
506 while (I2C_mux->GetStatus().busy);
528uint8_t set_1_store_0 , uint8_t startup_1_user_0){
530 uint8_t dati_da_leggere[4],ii_,canale,dati_da_scrivere[]={0,0,0,0},esegui=0;
531 uint16_t memoria_per_trimmer, memoria_per_abilitazione, memoria_per_relay_PGA,memoria_per_detector_trimmer;
532 if(scheda_su_scheda_giu) scheda_su_scheda_giu=6;
534 if( startup_1_user_0){
537 memoria_per_relay_PGA=0;
539 }
else if(startup_1_user_0 ==0){
547 if ((set_1_store_0 ==0) && esegui){
548 for(canale=0;canale<6;canale++){
549 if((canali_da_regolare >> canale) &1 ){
551 memoria_per_abilitazione , dati_da_scrivere);
554 if (memoria_per_relay_PGA){
557 dati_da_scrivere[2]= 0;
558 dati_da_scrivere[3]= 0;
560 memoria_per_relay_PGA , dati_da_scrivere);
561 dati_da_scrivere[0]= 0;
562 dati_da_scrivere[1]= 0;
570 if (set_1_store_0 && esegui){
571 for(canale=0;canale<6;canale++){
572 if((canali_da_regolare >> canale) &1 ){
574 memoria_per_abilitazione , dati_da_leggere);
575 if(*(uint32_t *)dati_da_leggere ==0){
577 memoria_per_trimmer , dati_da_leggere);
578 for(ii_=0;ii_<4;ii_++){
582 if(memoria_per_relay_PGA){
584 memoria_per_relay_PGA , dati_da_leggere);
585 PGA_GAIN_CROSS( scheda_su_scheda_giu, canale, dati_da_leggere[1] );
586 for(ii_=0;ii_<7;ii_++){
587 if( (dati_da_leggere[0] >> ii_) & 1){
592 memoria_per_detector_trimmer , dati_da_leggere);
593 for(ii_=0;ii_<4;ii_++){
622uint32_t voltage_integer ,uint8_t set_1_store_0 ){
624 uint8_t dati_da_leggere[4],ii_,canale,dati_da_scrivere[]={0,0,0,0};
625 uint16_t memoria_per_trimmer, memoria_per_abilitazione, memoria_per_relay_PGA,memoria_per_detector_trimmer;
626 uint8_t valori_per_canale=51;
628 voltage_integer = voltage_integer /1000;
630 if(scheda_su_scheda_giu) scheda_su_scheda_giu=6;
635 if ((set_1_store_0 ==0) ){
636 for(canale=0;canale<6;canale++){
637 if((canali_da_regolare >> canale) &1 ){
638 memoria_per_abilitazione += canale * valori_per_canale;
646 for(canale=0;canale<6;canale++){
647 if((canali_da_regolare >> canale) &1 ){
648 memoria_per_abilitazione += canale * valori_per_canale;
650 memoria_per_abilitazione , dati_da_leggere);
652 for(ii_=0;ii_<4;ii_++){
679 uint8_t dati_da_scrivere[4], iii;
683 for(iii=0;iii<6;iii++){
uint8_t tx_data[8]
Transmission data vector.
volatile uint8_t rx_data[8]
Received data vector.
void PGA_GAIN_CROSS(uint8_t scheda_su_scheda_giu, uint8_t canale, uint8_t PGA_gain_to_set)
Here the 2 digital signals from the trimmer are exploited to set the gain of the input stage of the P...
uint8_t PGA_settled_gain[12]
PGA set gain.
uint8_t detector_Relay_state[12]
The state of the Detector realis is considerede. Note that this is the wanted working condition....
void Relays_driver_set_reset_channel(uint8_t scheda_su_giu, uint8_t numero_canale, uint8_t valore_da_trasmettere)
Setting the state of the detector realis: pre connected to detector or intrnal resistor,...
void Error_imposta_la_istruzione(void)
Function to be located at the end of every instruction to mark the error, if any.
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.
@ I2C_error_EPROM_0
EPROM ch0.
@ error_address_I2C0
Error register A for I2C0.
@ error_address_I2C1
Error register A for I2C1
void I2C_mux_select_ch(uint8_t scheda_su_scheda_giu, uint8_t mainboard_postmainboard, uint8_t canale_da_abilitare)
The I2C mux.
#define I2C_mux_disabilita_tutto
i2C transmission/reception was bad
#define I2C_mux_abilita_2
Enable channel 2.
#define I2C_mux_abilita_1
Enable channel 1.
#define I2C_mux_abilita_3
Enable channel 3.
#define I2C_mux_Scheda_giu
Selection of the I2C1 for lower board (purtroppo \'e contorto)
#define I2C_mux_abilita_0
Enable channel 0.
#define I2C_mux_Scheda_su
Selection of the I2C0 for the upper board (purtroppo \'e contorto)
void EPROM_scrittura_M24C08_16(uint8_t scheda_su_scheda_giu, enum canali_eprom canale, short indirizzo_memoria, uint8_t *dati_da_scrivere)
Wriring the EEPROM.
void EPROM_store_recover_detector_voltage_M24C32_64(uint8_t scheda_su_scheda_giu, uint8_t canali_da_regolare, uint32_t voltage_integer, uint8_t set_1_store_0)
[fun_EPROM_store_recover_state_M24C32_64]
void EPROM_lettura_M24C32_64(uint8_t scheda_su_scheda_giu_, uint8_t mainboard_postmainboard, uint8_t canale, short indirizzo_memoria, uint8_t *dati_letti)
Read from preamplifier and on-board flashes.
void EPROM_scrittura_M24C32_64(uint8_t scheda_su_scheda_giu, uint8_t mainboard_postmainboard, uint8_t canale, short indirizzo_memoria, uint8_t *dati_da_scrivere)
Wriring the EEPROM.
void instr_EPROM_read_write_function(void)
CAN insrtuction to Read from preamplifier, on-board and post frontend board EPROM.
void EPROM_store_recover_state_M24C32_64(uint8_t scheda_su_scheda_giu, uint8_t canali_da_regolare, uint8_t set_1_store_0, uint8_t startup_1_user_0)
Store the system state or recover and apply the system state.
void EPROM_lettura_M24C08_16(uint8_t scheda_su_scheda_giu, enum canali_eprom canale, short indirizzo_memoria, uint8_t *dati_letti)
Read from preamplifier and on-board flashes.
void EPROM_restore_detector_slopes_in_pream(uint8_t scheda_su_scheda_giu, uint8_t canale)
[fun_EPROM_store_recover_detector_voltage_M24C32_64]
const struct address_detector_bias_trimmer_type EPROM_address[9]
This is the structure from which the I2C addressess and the I2C of the preamplifier and frontend boar...
@ Memory_mainboard_det_coa_slope_cali_ON_0_OFF_ff_ch0
slope detector positive trimmer active if zero
@ Memory_mainboard_det_chan_0_0V
fine slope for detector negative trimmer bias
#define EPROM_I2C_addres_memory_ch_pari
I2C address of channle 0, 2 and 4.
canali_eprom
Refer to these definitions for using the channels during eprom R/W.
@ Memory_preamplifier_user_detector_trimmer
detector trimmer content is stored here
@ Memory_preamplifier_startup_offset_trimmer
startup offset trimmer active if zero
@ Memory_preamplifier_user_offset_trimmer_ON_0_OFF_ff
user offset trimmer active if zero
@ Memory_preamplifier_startup_offset_trimmer_ON_0_OFF_ff
startup offset trimmer active if zero
@ Memory_preamplifier_user_offset_trimmer
startup offset trimmer active if zero
@ Memory_detector_coarse_slope_calibration_ON_0_OFF_ff
slope detector positive trimmer active if zero
@ Memory_preamplifier_user_detector_and_gain
detectro setup anf PGA gain at user location
#define EPROM_I2C_addres_memory_ch_dispari
I2C address of channle 1, 3 and 5.
#define EPROM_mainboard_I2C_addres
#define preamplifier_scrivi_il_trimmer
void Aspetta_tanti_ms(int millisecondi)
The timing function.
uint8_t contenuto_trimmer_detector[12][4]
Content of the trimmer for detector bias system.
void detector_scrittura_lettura_trimmer_bias(uint8_t scheda_su_scheda_giu, uint8_t canale, uint8_t trimmer, uint8_t valore, uint8_t scrivi_1_leggi_0)
Setting the value of any trimmer for detector biasing, the contents of the trimmers are stored in the...
uint8_t volatile contenuto_trimmer_preamplifier[12][4]
void preamplifier_scrittura_lettura_trimmer(uint8_t scheda_su_scheda_giu, uint8_t canale, uint8_t trimmer, uint8_t valore, uint8_t scrivi_1_leggi_0)
Setting the value of any trimmer for preamplifier trimmer, the contents of the trimmers are stored in...
Coordinates for the preamplifier and onboard EPROMs.