Repository for testing ADF code of COM_TMTC_SIMPLE

Dependencies:   mbed-rtos mbed

Fork of COM_MNG_TMTC_SIMPLE by Shreesha S

Revision:
4:e37674541504
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/adf2.h	Thu Dec 24 18:38:12 2015 +0000
@@ -0,0 +1,380 @@
+//without reset feature , with state checks.
+#include<iostream>
+#include"mbed.h"
+#define ADF_IRQ PTA14
+#define SPI_MOSI PTE1
+#define SPI_MISO PTE3
+#define SPI_CLK PTE2
+#define SPI_CS_ADF PTA15
+//Serial gPC( USBTX, USBRX );
+//gPC.baud(1200);
+InterruptIn IRQ(ADF_IRQ);
+Ticker ticker;
+//SPI spi(PTE1, PTE3, PTE2); 
+//DigitalOut gCS_ADF(SPI_CS_ADF);
+unsigned int Adf_data_counter=0;
+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 stop_transmission=false;
+bool sent_tmfrom_SDcard;
+bool loop_on;
+bool ADF_off;
+bool buffer_state;
+uint8_t signal = 0x00;
+uint8_t 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,0x10,0x10,0xC4,0x14,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x04,0x00,0x00,0x00,0x00,0x00};
+uint8_t Adf_data[100]={};       //Data to be transmitted
+//uint8_t buffer_112[112];
+//int initialise_card();
+//int disk_initialize();
+
+
+//void transmitdata(){       // copy the data to be transmitted to bufer_112
+//    for(int i=0;i<112;i++){
+//        buffer_112[i]=Adf_data[Adf_data_counter];
+//        if(100==Adf_data_counter){
+//            Adf_data_counter++;
+//            stop_transmission= true;
+//            break;  
+//        }
+//     }   
+//}
+
+#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 START_ADDRESS 0x020;
+#define MISO_PIN PTE3
+/**************Defining Counter Limits**************/
+#define THRS 20
+#define STATE_ERR_THRS 20
+#define PHY_OFF_EXEC_TIME 300
+#define PHY_ON_EXEC_TIME 300
+#define PHY_TX_EXEC_TIME 600
+/******DEFINING COMMANDS*********/
+#define CMD_HW_RESET 0xC8
+#define CMD_PHY_ON 0xB1
+#define CMD_PHY_OFF 0xB0
+#define CMD_PHY_TX 0xB5
+#define CMD_CONFIG_DEV 0xBB
+
+#define check_status {\
+    unsigned char stat=0;\
+    gCS_ADF=0;\
+    spi.write(0xFF);\
+    stat = spi.write(0xFF);\
+    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++){\
+        check_status;\
+        if(status == 0xB1){\
+            return_this = 0;\
+            break;\
+        }\
+        else if(cmd_err_cnt>THRS||spi_err_cnt>THRS){\
+            return_this = 1;\
+            break;\
+        }\
+        else if(state_err_cnt>STATE_ERR_THRS){\
+            return_this = 1;\
+            break;\
+        }\
+        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++;\
+        }\
+    }\
+}
+
+
+
+
+#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;\
+     }\
+}
+
+bool hardware_reset(int bcn_call){
+    for(int i= 0; i < 20 ; 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);
+                if(!temp_return){
+                    return 0;
+                }
+                count++;
+            }
+            else{
+                wait_us(50);
+                miso_err_cnt++;
+            }
+        }
+    }
+    return 1;
+}
+//for reseting the transmission call assert function after b5 and b1. after b1 assert_phi_on and after b5 assert_phi_tx. 
+//----------------------------------------------------------------------------
+
+# 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;\
+    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);\
+    gCS_ADF=1;\
+    gCS_ADF=0;\
+    spi.write(0x09);\
+    spi.write(0x37);\
+    spi.write(0xE0);\
+    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;\
+}
+
+
+#define write_data {\
+    gCS_ADF=0;\
+    spi.write(0x0B);\
+    spi.write(0x36);\
+    spi.write(0xFF);\
+    gCS_ADF=1;\
+    gCS_ADF=0;\
+    if(buffer_state && last_buffer==false){\
+        spi.write(0x18);\
+        spi.write(0x20);\
+        for(unsigned char i=0; i<112;i++){\
+            spi.write(buffer_112[i]);\
+        }\
+    }\
+    else if(last_buffer==false)\
+    {\
+        spi.write(0x18);\
+        spi.write(0x90);\
+        for(unsigned char i=0; i<112;i++){\
+            spi.write(buffer_112[i]);\
+        }\
+    }\
+    if(last_buffer)\
+    {\
+     for(unsigned char i=0; i<112;i++){\
+            spi.write(buffer_112[i]);\
+        }\
+        ADF_off = true;\
+        gPC.puts("adf_off\r\n");\
+    }\
+    gCS_ADF=1;\
+    buffer_state = !buffer_state;\
+}
+//void send_tm_from_SD_card(){
+//    }
+//
+void check(){   
+    if(IRQ){
+        if(!ADF_off){
+                write_data;
+                ADF_off=true;    
+            }
+            else{
+                write_data;
+                snd_tm.transmit_data(buffer_112,&last_buffer);
+            }
+         }
+         else{
+            ticker.detach();
+            gCS_ADF=0;
+            spi.write(0xB1);
+            gCS_ADF=1;
+            gPC.puts("transmission done\r\n");
+            loop_on=false;  
+         }   
+    }
+
+//
+//#define send_data {\
+//    gCS_ADF=0;\
+//    spi.write(0xBB);\
+//    gCS_ADF=1;\
+//    gCS_ADF=0;\
+//    spi.write(0xFF);\
+//    spi.write(0xFF);\
+//    gCS_ADF=1;\
+//    if(sent_tmfrom_SDcard){\
+//        send_tm_from_SD_card();\
+//    }else{\
+//        transmitdata();\
+//    }\
+//    write_data;\
+//    if(sent_tmfrom_SDcard){\
+//        send_tm_from_SD_card();\
+//    }else{\
+//        transmitdata();\
+//    }\
+//    write_data;\
+//    if(sent_tmfrom_SDcard){\
+//        send_tm_from_SD_card();\
+//    }else{\
+//        transmitdata();\
+//    }\
+//    gCS_ADF=0;\
+//    spi.write(0xB1);\
+//    gCS_ADF=1;\
+//    wait_us(300);\
+//    gCS_ADF=0;\
+//    spi.write(0xFF);\
+//    spi.write(0xFF);\
+//    gCS_ADF=1;\
+//    gCS_ADF=0;\
+//    spi.write(0xB5);\
+//    gCS_ADF=1;\
+//    wait_us(300);\
+//    gCS_ADF=0;\
+//    spi.write(0xFF);\
+//    spi.write(0xFF);\
+//    gCS_ADF=1;\
+//    ticker.attach_us(&check,32000);\
+//}
+
+#define send_data {\
+    gCS_ADF=0;\
+    spi.write(0xBB);\
+    gCS_ADF=1;\
+    gCS_ADF=0;\
+    spi.write(0xFF);\
+    spi.write(0xFF);\
+    gCS_ADF=1;\
+    if(sent_tmfrom_SDcard){\
+    }\
+    else{\
+        snd_tm.transmit_data(buffer_112,&last_buffer);\
+    }\
+    write_data;\
+    if(sent_tmfrom_SDcard){\
+    }else{\
+        snd_tm.transmit_data(buffer_112,&last_buffer);\
+    }\
+    write_data;\
+    if(sent_tmfrom_SDcard){\
+    }else{\
+        snd_tm.transmit_data(buffer_112,&last_buffer);\
+    }\
+    gCS_ADF=0;\
+    spi.write(0xB1);\
+    gCS_ADF=1;\
+    wait_us(300);\
+    gCS_ADF=0;\
+    spi.write(0xFF);\
+    spi.write(0xFF);\
+    gCS_ADF=1;\
+    gCS_ADF=0;\
+    spi.write(0xB5);\
+    gCS_ADF=1;\
+    wait_us(300);\
+    gCS_ADF=0;\
+    spi.write(0xFF);\
+    spi.write(0xFF);\
+    gCS_ADF=1;\
+    ticker.attach_us(&check,32000);\
+}
+
+void adf_not_SDcard(){
+    buffer_state = true;
+    last_buffer = false;
+    loop_on = true;
+    ADF_off = false;
+    sent_tmfrom_SDcard = false;
+   
+ //   signal = COM_MNG_TMTC_SIGNAL_ADF_NSD;
+    initial_adf_check;
+    initiate;
+    send_data;
+    
+//    gPC.puts("Inside adf transmission\r\n");
+//    ADF_non_responsive_timeout.attach(&ADF_non_responsive_fun, 10);
+
+}
\ No newline at end of file