Debug vs. Smartpins while programming SPI interface [Solved]
Hello everyone,
I am working on a multipurpose SPI implementation using Smartpins and Streamer + assembly language.
As I am making many mistakes and searching for errors a lot of the time, I started using the debug function of the Propeller 2.
Doing so, I have stumbled across something, which I cannot really explain:
If I activate the debug function in the Propeller tool (even if I don't use debug statements in my code), the smartpins and streamer seem to stop working. If I deactivate the function, they work normally without any further changes to my code:
With debug enabled:
Without debug enabled:
Is there maybe an explanation for this behaviour?
I couldn't really find something in the Spin2 Manual and I also tried to search the forum, but without success.
I have attached the corresponding code to this post. However, please keep in mind that it is still a work in progress, not optimized in terms of code size and performance and could contain some flaws.
For hardware debugging purposes I also used the LED matrix and control board from the P2-ES Eval Board Accessory Set together with the libraries P2ES Control and P2ES Matrix from JonnyMac.
Links below:
https://github.com/parallaxinc/propeller/tree/master/libraries/community/p2/All/jm_p2es_control
https://github.com/parallaxinc/propeller/tree/master/libraries/community/p2/All/jm_p2es_matrix
Comments
Please link
jm_p2-es_control.spin2
andjm_p2-es_matrix.spin2
Hello evanh,
thanks for your reply. I added the according links to my original post.
Turns out those files weren't needed since those routines weren't being called anyway.![:) :)](https://forums.parallax.com/resources/emoji/smile.png)
Well, compiling in Flexspin it don't work either way ...
Looking at the setup() routine, on a hunch I added a
waitms(10)
after thecoginit()
and it now works using Flexspin - You've got a race timing issue. Debug must be affecting the timing around coginit()'s.EDIT: PS:
change_clk()
would already be waiting before the Pasm cog has started. The launchee Cog takes a short while to load up. Meanwhile the launcher Cog is free to continue.Thank you very much, evanh.
It now works also with debug enabled and I would never have found this race condition all by my own.
I didn't delve any deeper myself but it would be a good exercise for you to nut out if there is a cleaner solution than just adding a pause there. Often an extra state variable is needed, so is debatable as to which solution is cleaner. Maybe it's a case of just improving how the
operation
variable gets used. Adding an extra case to that would be clean.