test code for SPI communications with any board
Diff: main.cpp
- 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