Important changes to repositories hosted on mbed.com
Mbed hosted mercurial repositories are deprecated and are due to be permanently deleted in July 2026.
To keep a copy of this software download the repository Zip archive or clone locally using Mercurial.
It is also possible to export all your personal repositories from the account settings page.
Dependencies: mbed mbed-rtos SimpleDMA FreescaleIAP eeprom
Fork of CDMS_CODE_FM_28JAN2017 by
Diff: adf.h
- Revision:
- 241:410c9cdd4f6e
- Parent:
- 237:12061b714e47
- Child:
- 242:4a78c173060b
--- a/adf.h Thu Jul 07 18:43:12 2016 +0000
+++ b/adf.h Fri Jul 08 06:50:21 2016 +0000
@@ -8,28 +8,37 @@
bool finish_write_data;
uint8_t signal = 0x00;
unsigned char bbram_buffer[66]={0x19,0x00,0x60,0x00,0x00,0x00,0x00,0x00,0x00,0x33,0x00,0xF4,0xC2,0x10,0xC0,0x00,0x30,0x31,0x07,0x00,0x01,0x00,0x7F,0x00,0x0B,0x37,0x00,0x00,0x40,0x0C,0x00,0x05,0x00,0x00,0x18,0x12,0x34,0x56,0x20,0x10,0xC4,0x14,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x70,0xE0,0x00,0x10,0x04,0x00,0x00,0x00,0x00,0x00};
+bool data_irq_err=0;
+bool data_err= false;
+unsigned char temp_byte=0x00;
+unsigned char data_err1[112];
+unsigned char data_err_cnt=0;
+unsigned int byte_count =0;
+#define DATA_ERR_THRS 20
+bool rolling_buffer_settings_error=true;
+bool bbram_write_success=true;
+int bbram_err_cnt=0;
+int rbp_err_cnt=0;
+bool reset_flag=false;
+#define RBP_THRS 4
+bool quit_configuration=false;
+bool power_reset_flag=false;
+unsigned int power_reset_count=0;
+bool Configuration_done=false;
+#define HW_THRS 2
//int initialise_card();
//int disk_initialize();
-
-#define bbram_write {\
- SPI_mutex.lock();\
- gCS_ADF=0;\
- spi.write(0xB0);\
- wait_us(300);\
- gCS_ADF=1;\
- gCS_ADF=0;\
- for(int i=0;i<66;i++){\
- spi.write(bbram_buffer[i]);\
- }\
- gCS_ADF=1;\
- SPI_mutex.unlock();\
-}
//------------------------------------------------------------------------
// state checking functions
//bool assrt_phy_off( int, int, int);
//bool assrt_phy_on( int,int,int);
//bool assrt_phy_tx(int,int,int);
+
+#define TRANSMIT_LEN_1 0xFF
+#define TRANSMIT_LEN_2 0xFF
+/***/
+Timer T;
#define START_ADDRESS 0x020;
#define MISO_PIN PTE3
@@ -45,7 +54,105 @@
#define CMD_PHY_OFF 0xB0
#define CMD_PHY_TX 0xB5
#define CMD_CONFIG_DEV 0xBB
+/**STATES**/
+//=======================
+#define PHY_OFF 0xB1
+#define PHY_ON 0xB2
+#define PHY_TX 0xB4
+#define BUSY 0x00
+//===================================================
+
+unsigned int Adf_data_counter=0;
+unsigned char status =0;
+unsigned int cmd_err_cnt=0;
+unsigned int data_length;
+unsigned int state_err_cnt=0;
+unsigned int miso_err_cnt=0;
+unsigned int hw_reset_err_cnt=0;
+unsigned int counter =0;
+bool temp_return = 0;
+bool bcn_flag=0;
+bool bbram_flag=0;
+
+bool stop_transmission=false;
+
+#define reset_flags {\
+finish_write_data = false;\
+buffer_state = true;\
+last_buffer = false;\
+loop_on = true;\
+ADF_off = false;\
+buffer_state = true;\
+loop_on = true;\
+ADF_off = false;\
+sent_tmfrom_SDcard = false;\
+Adf_data_counter=0;\
+status =0;\
+cmd_err_cnt=0;\
+data_length;\
+state_err_cnt=0;\
+miso_err_cnt=0;\
+hw_reset_err_cnt=0;\
+counter =0;\
+bcn_flag=0;\
+bbram_flag=0;\
+stop_transmission=false;\
+ }
+
+
+int err_arr[64];
+bool bbram_err=false;
+int err_idx=-1;
+int err[64];
+#define bbram_check gCS_ADF=0;\
+ for(int i=0;i<64;i++){\
+ err_arr[i]=0;\
+ }\
+ for(int i=0;i<64;i++){\
+ err[i]=0;\
+ }\
+ bbram_err=false;\
+ gCS_ADF=0;\
+ spi.write(0x39);\
+ spi.write(0x00);\
+ spi.write(0xFF);\
+ for(int i=0;i<64;i++){\
+ err_arr[i]=spi.write(0xFF);\
+ if(err_arr[i]!=bbram_buffer[i+2]){\
+ err[i]=1;\
+ bbram_err=true;\
+ }\
+ }\
+ gCS_ADF=1;\
+ if(!bbram_err)\
+ gPC.printf("BBRAM verified \r\n");\
+ else\
+ gPC.printf("BBRAM error \r\n");\
+
+bool tx_loop=1;
+
+#define PRNT_ONCE {\
+ gPC.printf("%d %d lol_ what?\r\n",segment_len,EOS_len);\
+ }
+
+#define bbram_write {\
+ gCS_ADF=0;\
+ spi.write(0xB0);\
+ wait_us(300);\
+ gCS_ADF=1;\
+ gCS_ADF=0;\
+ for(int i=0;i<66;i++){\
+ spi.write(bbram_buffer[i]);\
+ }\
+ gCS_ADF=1;\
+}
+//------------------------------------------------------------------------
+// state checking functions
+//bool assrt_phy_off( int, int, int);
+//bool assrt_phy_on( int,int,int);
+//bool assrt_phy_tx(int,int,int);
+
#define check_status {\
unsigned char stat=0;\
gCS_ADF=0;\
@@ -54,97 +161,106 @@
gCS_ADF=1;\
status = stat;\
}
-
-// all three arguments are int
-#define assrt_phy_off(return_this) {\
- int cmd_err_cnt = 0;\
- int spi_err_cnt = 0;\
- int state_err_cnt = 0;\
- for(int i = 0 ; i < 40 ;i++){\
+
+/*CMD_VAR*/
+bool cmd_bit=true;
+bool cmd_err_flag=false;
+unsigned char command = 0x00;
+#define CMD(command) {\
+ cmd_err_cnt=0;\
+ cmd_err_flag=false;\
+ while(cmd_err_cnt<3) {\
check_status;\
- if(status == 0xB1){\
- return_this = 0;\
+ cmd_bit=status&0x20;\
+ if(cmd_bit) {\
+ gCS_ADF=0;\
+ spi.write(command);\
+ gCS_ADF=1;\
break;\
- }\
- else if(cmd_err_cnt>THRS||spi_err_cnt>THRS){\
- return_this = 1;\
- break;\
+ } else {\
+ wait_us(5);\
+ cmd_err_cnt++;\
}\
- else if(state_err_cnt>STATE_ERR_THRS){\
- return_this = 1;\
- break;\
+ }\
+ if(cmd_err_cnt==3) {\
+ cmd_err_flag=true;\
+ }\
+}\
+// all three arguments are int\
+#define assrt_phy_off {\
+ int state_err_cnt = 0;\
+ CMD(CMD_PHY_OFF);\
+ if(cmd_err_flag){\
+ temp_return=1;\
}\
- else if( (status & 0xA0) == 0xA0 ){\
- gCS_ADF=0;\
- spi.write(CMD_PHY_OFF);\
- gCS_ADF=1;\
- wait_us(PHY_OFF_EXEC_TIME);\
- state_err_cnt++;\
- }\
- else if(status&0x80==0x00){\
- wait_ms(5);\
- spi_err_cnt++;\
- }\
- else {\
- wait_ms(1);\
- cmd_err_cnt++;\
+ else{\
+ for(int i = 0 ; i < 40 ;i++){\
+ CMD(CMD_PHY_OFF);\
+ check_status;\
+ if(status == PHY_OFF){\
+ temp_return = 0;\
+ break;\
+ }\
+ else if(state_err_cnt>THRS){\
+ temp_return = 1;\
+ break;\
+ }\
+ else {\
+ wait_ms(1);\
+ }\
}\
}\
}
-
-
-#define initial_adf_check {\
- spi.write(CMD_PHY_OFF);\
- int tempReturn = 0;\
- bool flag = false;\
- while( hw_reset_err_cnt < 2 ){\
- assrt_phy_off( tempReturn);\
- if( !tempReturn ){\
- bbram_write;\
- bbram_flag=1;\
- flag = true;\
- break;\
- }\
- else{\
- hardware_reset(0);\
- hw_reset_err_cnt++;\
- gPC.puts("Resetting hardware\r\n");\
- }\
- }\
- if( flag == false ){\
- gPC.puts("Seems to be SPI problem\r\n");\
- }\
- assrt_phy_off(tempReturn);\
- if(!bbram_flag){\
- bcn_flag=1;\
- }\
-}
-
-unsigned char status =0;
-unsigned int cmd_err_cnt=0;
-unsigned int state_err_cnt=0;
-unsigned int miso_err_cnt=0;
-unsigned int hw_reset_err_cnt=0;
-bool bcn_flag=0;
-bool bbram_flag=0;
-
-bool hardware_reset(int bcn_call){
- for(int i= 0; i < 20 ; i++){
+
+
+bool hardware_reset(int bcn_call)
+{
+ for(int i= 0; i < 2 ; i++) {
gCS_ADF=0;
spi.write(CMD_HW_RESET);
gCS_ADF=1;
wait_ms(2);// Typically 1 ms
int count=0;
- int temp_return = 0;
- while(count<10 && miso_err_cnt<10){
- if(MISO_PIN){
- assrt_phy_off(temp_return);
+ temp_return = 0;
+ while(count<10 && miso_err_cnt<10) {
+ if(MISO_PIN) {
+// assrt_phy_off;
+/*asseert_phyoff Starts**/
+{\
+ int state_err_cnt = 0;\
+ CMD(CMD_PHY_OFF);\
+ if(cmd_err_flag){\
+ temp_return=1;\
+ }\
+ else{\
+ for(int i = 0 ; i < 40 ;i++){\
+ CMD(CMD_PHY_OFF);\
+ check_status;\
+ if(status == PHY_OFF){\
+ temp_return = 0;\
+ break;\
+ }\
+ else if(state_err_cnt>THRS){\
+ temp_return = 1;\
+ break;\
+ }\
+ else {\
+ wait_ms(1);\
+ }\
+ }\
+ }\
+}\
+/*Assert_phy_off_ends*/
+
+
+
+
+
if(!temp_return){
return 0;
}
count++;
- }
- else{
+ } else {
wait_us(50);
miso_err_cnt++;
}
@@ -152,46 +268,161 @@
}
return 1;
}
-
-//for reseting the transmission call assert function after b5 and b1. after b1 assert_phi_on and after b5 assert_phi_tx.
+//for reseting the transmission call assert function after b5 and b1. after b1 assert_phi_on and after b5 assert_phi_tx.
//----------------------------------------------------------------------------
-
-# define initiate {\
- SPI_mutex.lock();\
+unsigned char temp;
+bool reg_err;
+int reg_err_cnt;
+#define REG_ERR_THRS 5
+#define reg_check(addr1,addr2,reg_val){\
+ gCS_ADF=0;\
+ reg_err=false;\
+ spi.write(addr1);\
+ spi.write(addr2);\
+ spi.write(0xFF);\
+ temp = spi.write(0xFF);\
+ if(temp==reg_val)\
+ reg_err = false;\
+ else\
+ reg_err=true;\
+ gCS_ADF=1;\
+}
+
+#define initiate {\
gCS_ADF=0;\
spi.write(0xFF);\
spi.write(0xFF);\
gCS_ADF=1;\
- gCS_ADF=0;\
- spi.write(0x08);\
- spi.write(0x14);\
- spi.write(0xFF);\
- gCS_ADF=1;\
+ reg_err=true;\
+ for(reg_err_cnt=0;reg_err_cnt<REG_ERR_THRS && reg_err;reg_err_cnt++){\
+ gCS_ADF=0;\
+ spi.write(0x08);\
+ spi.write(0x14);\
+ spi.write(TRANSMIT_LEN_1);\
+ gCS_ADF=1;\
+ reg_check(0x28,0x14,TRANSMIT_LEN_1);\
+ }\
+ if(reg_err)\
+ gPC.printf("Reg_err_ignored %x \r\n",(int)temp);\
+ else\
+ gPC.printf("reg written successful %x \r\n",(int)temp);\
+ reg_err=true;\
+ for(reg_err_cnt=0;reg_err_cnt<REG_ERR_THRS && reg_err;reg_err_cnt++){\
+ gCS_ADF=0;\
+ spi.write(0x08);\
+ spi.write(0x15);\
+ spi.write(TRANSMIT_LEN_2);\
+ gCS_ADF=1;\
+ reg_check(0x28,0x15,TRANSMIT_LEN_2);\
+ }\
+ if(reg_err)\
+ gPC.printf("Reg_err_ignored %x \r\n",(int)temp);\
+ else\
+ gPC.printf("reg written successful %x \r\n",(int)temp);\
+}\
+#define write_data {\
+ counter++;\
gCS_ADF=0;\
- spi.write(0x08);\
- spi.write(0x15);\
- spi.write(0xFF);\
- gCS_ADF=1;\
- gCS_ADF=0;\
- spi.write(0x09);\
- spi.write(0x24);\
- spi.write(0x20);\
+ spi.write(0x0B);\
+ spi.write(0x36);\
+ spi.write(0xFF);\
gCS_ADF=1;\
- gCS_ADF=0;\
- spi.write(0x09);\
- spi.write(0x37);\
- spi.write(0xE0);\
+ data_err_cnt=0;\
+ data_err=true;\
+ while(data_err && (data_err_cnt<DATA_ERR_THRS)){\
+ gCS_ADF=0;\
+ if(buffer_state){\
+ spi.write(0x18);\
+ spi.write(0x20);\
+ for(unsigned char i=0; i<112;i++){\
+ if(bypass_adf)\
+ gPC.putc(buffer_112[i]);\
+ else\
+ spi.write(buffer_112[i]);\
+ /*gPC.printf("0x%X,",spi.write(buffer_112[i]));*/\
+ }\
+ }\
+ else{\
+ spi.write(0x18);\
+ spi.write(0x90);\
+ for(unsigned char i=0; i<112;i++){\
+ if(bypass_adf)\
+ gPC.putc(buffer_112[i]);\
+ else\
+ spi.write(buffer_112[i]);\
+ /*gPC.printf("0x%X,",spi.write(buffer_112[i]));*/\
+ }\
+ }\
+ gCS_ADF=1;\
+ wait_us(5);\
+ data_err=false;\
+ gCS_ADF=0;\
+ spi.write(0x38);\
+ if(buffer_state){\
+ spi.write(0x20);\
+ }\
+ else{\
+ spi.write(0x90);\
+ }\
+ spi.write(0xFF);\
+ for(unsigned char i=0; i<112;i++){\
+ temp_byte=spi.write(0xFF);\
+ if(buffer_112[i]!=temp_byte){\
+ data_err1[i]=1;\
+ data_err=true;\
+ }\
+ }\
gCS_ADF=1;\
- gCS_ADF=0;\
- spi.write(0x09);\
- spi.write(0x36);\
- spi.write(0x70);\
- gCS_ADF=1;\
- gCS_ADF=0;\
- spi.write(0x09);\
- spi.write(0x39);\
- spi.write(0x10);\
- gCS_ADF=1;\
+ /*SPI_mutex.unlock();*/\
+ if(data_err==false){\
+ buffer_state = !buffer_state;\
+ }\
+ data_err_cnt++;\
+ if(last_buffer){\
+ finish_write_data = true;\
+ /*gPC.puts("adf_off\r\n");*/\
+ }\
+ }\
+}
+
+#define check {\
+ check_status; //remove me\
+ gPC.printf("I 0x%X\r\n",(int)status);//Remove me\
+ if(IRQ || bypass_adf){\
+ gPC.printf("det\r\n");\
+ // if(1){\
+ if(!ADF_off) {\
+ // gCOM_MNG_TMTC_THREAD->signal_set(signal);\
+ if(finish_write_data) {\
+ write_data;\
+ ADF_off=true;\
+ } else {\
+ write_data;\
+ if(sent_tmfrom_SDcard)\
+ send_tm_from_SD_card_fun();\
+ else snd_tm.transmit_data(buffer_112,&last_buffer);\
+ }\
+ } else {\
+ wait_ms(20);\
+// ticker.detach();\
+ gCS_ADF=0;\
+ spi.write(0xB1);\
+ gCS_ADF=1;\
+ gPC.puts("transmission done\r\n");\
+// cout<<counter<<endl;\
+ loop_on=false;\
+ }\
+ }\
+ else{\
+ if(T.read_us()>98000){\
+ data_irq_err=true;\
+ CMD(CMD_PHY_ON);\
+ gPC.printf("Data_error_detected");\
+ }\
+ }\
+}
+
+#define send_data {\
gCS_ADF=0;\
spi.write(0xBB);\
gCS_ADF=1;\
@@ -199,58 +430,7 @@
spi.write(0xFF);\
spi.write(0xFF);\
gCS_ADF=1;\
- SPI_mutex.unlock();\
-}
-
-#define write_data {\
- SPI_mutex.lock();\
- gCS_ADF=0;\
- spi.write(0x0B);\
- spi.write(0x36);\
- spi.write(0xFF);\
- gCS_ADF=1;\
- gCS_ADF=0;\
- if(buffer_state){\
- spi.write(0x18);\
- spi.write(0x20);\
- for(unsigned char i=0; i<112;i++){\
- if(bypass_adf)\
- gPC.putc(buffer_112[i]);\
- else\
- spi.write(buffer_112[i]);\
- /*gPC.printf("%02X",buffer_112[i])*/;\
- }\
- }\
- else{\
- spi.write(0x18);\
- spi.write(0x90);\
- for(unsigned char i=0; i<112;i++){\
- if(bypass_adf)\
- gPC.putc(buffer_112[i]);\
- else\
- spi.write(buffer_112[i]);\
- /*gPC.printf("%02X",buffer_112[i])*/;\
- }\
- }\
- gCS_ADF=1;\
- SPI_mutex.unlock();\
- buffer_state = !buffer_state;\
- if(last_buffer){\
- finish_write_data = true;\
- /*gPC.puts("adf_off\r\n");*/\
- }\
-}
-
-/*
-void check(){
- if(IRQ){
- gCOM_MNG_TMTC_THREAD->signal_set(signal);
- }
-}*/
-
-
-#define send_data {\
-if(sent_tmfrom_SDcard){\
+ if(sent_tmfrom_SDcard){\
send_tm_from_SD_card_fun();\
}else{\
snd_tm.transmit_data(buffer_112,&last_buffer);\
@@ -267,7 +447,6 @@
}else{\
snd_tm.transmit_data(buffer_112,&last_buffer);\
}\
- SPI_mutex.lock();\
gCS_ADF=0;\
spi.write(0xB1);\
gCS_ADF=1;\
@@ -284,53 +463,112 @@
spi.write(0xFF);\
spi.write(0xFF);\
gCS_ADF=1;\
- SPI_mutex.unlock();\
- /*ticker.attach_us(&check,32000);*/\
}
-
+
+#define initial_adf_check {\
+ bool Configuration_Done=false;\
+ quit_configuration=false;\
+ bool reset_flag1 = 0;\
+ bool flag = false;\
+ while((hw_reset_err_cnt<HW_THRS)&&(quit_configuration==false)){\
+ while((bbram_err_cnt<2)&&(quit_configuration==false)){\
+ /*assrt_phy_off;*/\
+ /*Assrt_phy_off Begin*/\
+ {\
+ int state_err_cnt = 0;\
+ CMD(CMD_PHY_OFF);\
+ if(cmd_err_flag){\
+ temp_return=1;\
+ }\
+ else{\
+ for(int i = 0 ; i < 40 ;i++){\
+ CMD(CMD_PHY_OFF);\
+ check_status;\
+ if(status == PHY_OFF){\
+ temp_return = 0;\
+ break;\
+ }\
+ else if(state_err_cnt>THRS){\
+ temp_return = 1;\
+ break;\
+ }\
+ else {\
+ wait_ms(1);\
+ }\
+ }\
+ }\
+}\
+ /*Assrt_phy_off end*/\
+ reset_flag1=temp_return;\
+ if(!reset_flag1){\
+ bbram_write;\
+ while((rbp_err_cnt<RBP_THRS)&&(quit_configuration==false)){\
+ bbram_check;\
+ if(bbram_err==0){\
+ bbram_write_success=true;\
+ bbram_err_cnt=0;\
+ initiate;\
+ if(reg_err){\
+ rbp_err_cnt++;\
+ }\
+ else{\
+ rbp_err_cnt=0;\
+ gPC.printf("NO Reg err\r\n");\
+ CMD(CMD_CONFIG_DEV);\
+ if(cmd_err_flag){\
+ reset_flag=1;\
+ gPC.printf("CMD ERR\r\n");\
+ }\
+ else{\
+ reset_flag=0;\
+ gPC.printf("NO CMD ERR CONFIG_DONE\r\n");\
+ quit_configuration=true;\
+ }\
+ }\
+ }\
+ else{\
+ bbram_write_success=false;\
+ bbram_err_cnt++;\
+ break;\
+ }\
+ }\
+ }\
+ else{\
+ break;\
+ }\
+ }\
+ if(reset_flag1){\
+ hardware_reset(0);\
+ hw_reset_err_cnt++;\
+ gPC.puts("Resetting hardware\r\n");\
+ }\
+ }\
+ if(hw_reset_err_cnt==HW_THRS){\
+ power_reset_flag=1;\
+ power_reset_count++;\
+ }\
+ else{\
+ Configuration_Done=true;\
+ gPC.printf("Configuration_Done\n");\
+ }\
+}
+
#define configure_adf {\
- finish_write_data = false;\
- buffer_state = true;\
- last_buffer = false;\
- loop_on = true;\
- ADF_off = false;\
+ reset_flags;\
initial_adf_check;\
- gPC.puts("initial adf check\r\n");\
- initiate;\
- gPC.puts("adf configured\r\n");\
- /*gLEDR = !gLEDR;*/\
+ gPC.puts("Config_part done\r\n");\
}
#define transmit_adf {\
configure_adf;\
- if(sent_tmfrom_SDcard)\
- signal = COM_MNG_TMTC_SIGNAL_ADF_SD;\
- else signal = COM_MNG_TMTC_SIGNAL_ADF_NSD;\
send_data;\
+ CMD(CMD_PHY_TX);\
+ wait_us(2000);\
while(loop_on){\
- wait_ms(COM_TX_TICKER_LIMIT);\
- if(IRQ || bypass_adf){\
- if(finish_write_data){\
- if(ADF_off){\
- SPI_mutex.lock();\
- gCS_ADF=0;\
- spi.write(0xB1);\
- gCS_ADF=1;\
- SPI_mutex.unlock();\
- loop_on = false;\
- gPC.puts("Transmission done\r\n");\
- gLEDR = 1;\
- }\
- else{\
- ADF_off = true;\
- }\
- }else{\
- gLEDG = !gLEDG;\
- write_data;\
- if(sent_tmfrom_SDcard)\
- send_tm_from_SD_card_fun();\
- else snd_tm.transmit_data(buffer_112,&last_buffer);\
- }\
+ wait_us(20);\
+ check;\
+ if(data_irq_err){\
+ break;\
}\
}\
/*gPC.puts("after while loop\r\n");*/\
