We are running a survey to help us improve the experience for all of our members. If you see the survey appear, please take the time to tell us about your experience if you can.
Hello, I am trying to initialise the CAN interface on a C164 - I need to set the XPEN bit, and clear the CAN1DIS bit in the SYSCON register. However, I am using C, and thus C_STARTUP_CODE is loaded into RAM, which contains the EINIT instruction (which locks down access to SYSCON). Therefore, EINIT has already been executed by the time my main() starts, and so I cannot access this register. I'm having trouble interpreting the machine code on the reset vectors too, so I can't just put a JumpToHere, JumpToThere, sequence in. Any help would be much appreciated.
When I open C167S.LIB, I can see the text "C_STARTUP_CODE", so I assume I have to change the source of this file, and then compile it (?) again. If the file START167.A66 is not included in your project, then the default version of it is pulled out of C167S.LIB. Sometimes that will do. But normally you need to copy START167.A66 to your program folder and include it in your project. Then customize it to your liking. It will override the code in C167S.LIB. - mike
By the way, it's all in the manuals: http://www.keil.com/support/man/docs/c166/c166_ap_startupcode.htm There should be copies of the manuals in PDF format in your Keil distribution. - mike
Mike, you're a king among men. SYSCON now reads 0x04, which is great. My CAN messages still aren't being sent or received, but at least I'm one step further. Many thanks, Chris.