TTT / Mbed 2 deprecated DDS_Playground

Dependencies:   mbed

Revision:
2:eb558d650b17
Parent:
1:25c850668cef
Child:
3:c2b09e28978a
--- a/main.cpp	Fri Mar 20 20:56:43 2015 +0000
+++ b/main.cpp	Tue Mar 24 22:11:00 2015 +0000
@@ -86,7 +86,7 @@
 #define REG_FREQ1   0x8000
 #define REG_FREQ0   0x4000
 void setFrequencyWord(bool reg, uint32_t frequency) {
-  writeReg(0x2000);
+  writeReg(0x2000);                                                             // sets the PIN/SW D9 pin to high >> FSELECT pin can be used to use either FREQ0 or FREQ1
   writeReg((reg?REG_FREQ1:REG_FREQ0) | (frequency & 0x3FFF));
   writeReg((reg?REG_FREQ1:REG_FREQ0) | ((frequency >> 14) & 0x3FFF));
 }
@@ -138,6 +138,22 @@
     reset(false);
 }
 
+uint8_t Crc8(uint8_t *vptr, int len)
+{
+    uint8_t *data = vptr;
+    unsigned crc = 0;
+    int i, j;
+    for (j = len; j; j--, data++) {
+        crc ^= (*data << 8);
+        for(i = 8; i; i--) {
+            if (crc & 0x8000)
+                crc ^= (0x1070 << 3);
+            crc <<= 1;
+        }
+    }
+    return (uint8_t)(crc >> 8);
+}
+
 /*******************
 MAIN
 *******************/
@@ -165,10 +181,56 @@
     //output calculation
     //fOut = fMCLK / 2^28 * FREQREG = 16e6 / 2^28 * FREQREG
     //FREQREG = fOut * 2^28 / 16e6 = fOut * 16.777216
-    setFrequencyWord(0, 16777216);
-    selectFrequency(0);
+    setFrequencyWord(0, 16777216); //1MHz: bin 0 
+    setFrequencyWord(1, 33554432); //2MHz: bin 1
     
     setSignOutput(SIGN_OUTPUT_MSB);
     //open the DDS output
     SQUARE = 1;
+
+    #define bit_up_time 8 //8 for no logic
+    #define bit_guard_time 8 //8 for no logic
+    #define data_reset_time 16 //16 for no logic
+        
+    //specify the data
+    #define data_len 9 //in bytes, remember to leave the last byte as 0 for the crc
+    uint8_t data[data_len] = {0xAA, 0xFF, 0xD0, 0x59, 0xE4, 0xCC, 0x1A, 0x2A, 0}; //bt mac format: header, type, data ... data, crc (crc should be 0x89 in this case)
+    data[data_len-1] = Crc8(&data[1], data_len-2); //crc includes everything except the header byte
+    uint8_t bytecount = 0, bitcount = 0;
+    int32_t freq = 0;
+    uint8_t freqRegister = 0;
+    
+    __disable_irq(); 
+    while(1) {
+        for (bytecount=0; bytecount<data_len; bytecount++){
+            for(bitcount=0; bitcount<8; bitcount++){
+                if ( (( data[bytecount]>>bitcount ) & 0x01) == 0){ //send binary 0
+                    
+                    selectFrequency(0);
+                    SQUARE = 1;
+                    
+                    wait_ms(bit_up_time);
+                    
+                    SQUARE = 0;
+                    //set_DDS(DDS_MCLK_SLEEP); //THIS CAUSES PROBLEMS - ENVELOPE ON DATA?
+                    wait_ms(bit_guard_time);
+                    
+                } else { //send binary 1
+                    selectFrequency(1);
+                    SQUARE = 1;
+                    
+                    wait_ms(bit_up_time);
+                    
+                    SQUARE = 0;
+                    //set_DDS(DDS_MCLK_SLEEP); //THIS CAUSES PROBLEMS - ENVELOPE ON DATA?
+                    wait_ms(bit_guard_time);
+                }
+            }//end bitcount
+        }//end bytecount
+        
+        wait_ms(data_reset_time); //all the data has been sent, delay for some time to reset
+        
+    }//end while
+    __enable_irq();  
+    
 }