test code for SPI communications with any board

Dependencies:   mbed-dev

Revision:
1:aa253b5f5b65
Parent:
0:76c761d3caf1
Child:
2:32f69175c78e
--- a/main.cpp	Sat Mar 20 18:38:51 2021 +0000
+++ b/main.cpp	Thu Mar 25 19:32:21 2021 +0000
@@ -1,4 +1,6 @@
 
+//counter for misc purposes
+int counter3 = 0;
                                                                                     //GO THROUGH AND RE-CHECK ALL THE VARIABLES, STRUCT NAMES, SIZES, BUFFERS + ETC!!!
                                                                                     //ALSO GO THROUGH THE COMMENTS TO SEE IF THEY NEED CHANGING
 
@@ -191,11 +193,11 @@
     pack_cmd(&q21_can, q1_control.h); 
     pack_cmd(&q31_can, q1_control.k); 
     pack_cmd(&q12_can, q2_control.a); 
-    pack_cmd(&k22_can, q2_control.h); 
-    pack_cmd(&k32_can, q2_control.k); 
+    pack_cmd(&q22_can, q2_control.h); 
+    pack_cmd(&q32_can, q2_control.k); 
     pack_cmd(&q13_can, q3_control.a); 
-    pack_cmd(&k23_can, q3_control.h); 
-    pack_cmd(&k33_can, q3_control.k); 
+    pack_cmd(&q23_can, q3_control.h); 
+    pack_cmd(&q33_can, q3_control.k); 
     
     }
 void WriteAll(){
@@ -227,7 +229,7 @@
     PackAll();
 
     if(counter>100){
-        printf("%.3f %.3f %.3f   %.3f %.3f %.3f   %.3f %.3f %.3f\n\r", q1_state.a.p, q1_state.h.p, q1_state.k.p, q2_state.a.p, q2_state.h.p, q_state.k.p, q3_state.a.p, q3_state.h.p, q3_state.k.p);
+        pc.printf("%.3f %.3f %.3f   %.3f %.3f %.3f   %.3f %.3f %.3f\n\r", g1_state.a.p, g1_state.h.p, g1_state.k.p, g2_state.a.p, g2_state.h.p, g2_state.k.p, g3_state.a.p, g3_state.h.p, g3_state.k.p);
         counter = 0 ;
         }
     
@@ -280,7 +282,7 @@
         switch(c){
             case(27):
                 //loop.detach();
-                printf("\n\r exiting motor mode \n\r");
+                pc.printf("\n\r exiting motor mode \n\r");
                 ExitMotorMode(&q11_can);
                 ExitMotorMode(&q21_can);
                 ExitMotorMode(&q31_can);
@@ -293,7 +295,7 @@
                 enabled = 0;
                 break;
             case('m'):
-                printf("\n\r entering motor mode \n\r");
+                pc.printf("\n\r entering motor mode \n\r");
                 EnterMotorMode(&q11_can);
                 EnterMotorMode(&q21_can);
                 EnterMotorMode(&q31_can);
@@ -308,13 +310,13 @@
                 //loop.attach(&sendCMD, .001);
                 break;
             case('s'):
-                printf("\n\r standing \n\r");
+                pc.printf("\n\r standing \n\r");
                 counter2 = 0;
                 is_standing = 1;
                 //stand();
                 break;
             case('z'):
-                printf("\n\r zeroing \n\r");
+                pc.printf("\n\r zeroing \n\r");
                 Zero(&q11_can);
                 Zero(&q21_can);
                 Zero(&q31_can);
@@ -341,13 +343,14 @@
 
 void spi_isr(void)
 {
+    //pc.printf("CS ACTIVE\n");
     GPIOC->ODR |= (1 << 8);
     GPIOC->ODR &= ~(1 << 8);
     int bytecount = 0;
     SPI1->DR = tx_buff[0];
     while(cs == 0) {
         if(SPI1->SR&0x1) {
-            [bytecount] = SPI1->DR;
+            rx_buff[bytecount] = SPI1->DR;
             bytecount++;
             if(bytecount<TX_LEN) {
                 SPI1->DR = tx_buff[bytecount];
@@ -356,17 +359,20 @@
 
     }
     
+    //pc.printf("HERE'S A SPI COMMAND:\n");
     // after reading, save into spi_command
     // should probably check checksum first!
     uint32_t calc_checksum = xor_checksum((uint32_t*)rx_buff,32);
     for(int i = 0; i < CMD_LEN; i++)
     {
         ((uint16_t*)(&spi_command))[i] = rx_buff[i];
+        //pc.printf("BIT %d RECIEVED\n", i);
     }
     
     // run control, which fills in tx_buff for the next iteration
     if(calc_checksum != spi_command.checksum){
-        spi_data.flags[1] = 0xdead;}
+        spi_data.flags[1] = 0xdead;
+        pc.printf("FAILED CHECKSUM\n");}
         
     //test_control();
     //spi_data.q_abad[0] = 12.0f;
@@ -423,7 +429,7 @@
         can2.write(q12_can);
         EnterMotorMode(&q22_can);
         can2.write(q22_can);
-        EnterMotorMode(&q31_can);
+        EnterMotorMode(&q32_can);
         can2.write(q32_can);
         //BUS THREE
         EnterMotorMode(&q13_can);
@@ -432,7 +438,7 @@
         can3.write(q23_can);
         EnterMotorMode(&q33_can);
         can3.write(q33_can);
-        printf("e\n\r");
+        pc.printf("e\n\r");
         return;
     }
     else if((((spi_command.flags[0]&0x1))==0)  && (enabled==1)){
@@ -449,7 +455,7 @@
         can2.write(q12_can);
         ExitMotorMode(&q22_can);
         can2.write(q22_can);
-        ExitMotorMode(&q31_can);
+        ExitMotorMode(&q32_can);
         can2.write(q32_can);
         //BUS THREE
         ExitMotorMode(&q13_can);
@@ -458,7 +464,7 @@
         can3.write(q23_can);
         ExitMotorMode(&q33_can);
         can3.write(q33_can);
-        printf("x\n\r");
+        pc.printf("x\n\r");
         return;
         }
     
@@ -613,14 +619,14 @@
     spi->frequency(12000000);
     spi->reply(0x0);
     cs.fall(&spi_isr);
-    printf("done\n\r");
+    pc.printf("done\n\r");
 }
 
     
 int main() {
     wait(1);
     //led = 1;
-    pc.baud(921600);
+    pc.baud(115200);                                                                //MAYBE CHANGE THIS IF NEEDED
     pc.attach(&serial_isr);
     estop.mode(PullUp);
     //spi.format(16, 0);
@@ -681,20 +687,24 @@
     pack_cmd(&q32_can, q2_control.k);
     pack_cmd(&q33_can, q3_control.k); 
     WriteAll();
+    
+    //just debugging things
+    pc.printf("SETUP VARS ALL DONE\n");
 
 
     // SPI doesn't work if enabled while the CS pin is pulled low
     // Wait for CS to not be low, then enable SPI
     if(!spi_enabled){ 
-        while((spi_enabled==0) && (cs.read() ==0)){wait_us(10);}
+        while((spi_enabled==0) && (cs.read() ==0)){pc.printf("waiting for CS Pin\n"); wait_us(10);}
         init_spi();
         spi_enabled = 1;
+        pc.printf("SPI ENABLED AND READY\n");
         }
         
     //spi_command=set the thing here... 
             
     while(1) {
-        pc.printf("test, of SPINE\r\n");
+        //pc.printf("test, of SPINE\r\n");
         counter++;
         can2.read(rxMsg2);
         unpack_reply(rxMsg2, &g2_state);
@@ -703,6 +713,13 @@
         can3.read(rxMsg3);                    // read message into Rx message storage
         unpack_reply(rxMsg3, &g3_state);
         wait_us(10);
+        
+        //print heatbeat (always will print message 0)
+        if (counter3 == 100000) {                                                 //for debugging purposes
+            pc.printf("HEARTBEAT\n");
+            counter3 = 0;
+        }
+        counter3++;
 
         }
 }
\ No newline at end of file