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.
First of all I'm using STR735
The start-up code enters the Supervisor Mode, sets up the stack pointer followed by the User Mode seting up the stack pointer; then jumps to main.
Im my application I need to disable interrupts during critical memcpy's and also during Maxim 1-wire communication. This is a lengthy process in user mode but quit straight forward in supervisor mode.
My question is WHY the start-up code is entering user mode for my single user embedded processor? If I comment out switching to User Mode, what issues would I encounter? I am not using any OS.
Barry
I originally disabled it that way. But there is a problem in the ST ARM. Extra interrupts were being asserted in both the timer and external interrupts. When the interrupt returned from being serviced an extra interrupt was being asserted. For the external interrupt this was occurring approximately 0.8 percent of the time. It was approximately the same for the timer interrupts.
Disabling the function call to perform the EIC enable/disable resolved the problem. The ST Engineer inform me that there is a problem disabling interrupts in the EIC and suggest that I perform it in the CPSR.
If you really want to you should be able to run in Supervisor Mode (Or System mode, which I beleive the STR73X has)
There should be no problem with this if you are not user the Real-Time library. If you use the Real_Time Library, you may just use tsk_lock() and tsk_unlock() (which will disable the EIC from an SWI routine)