|
|
View previous topic :: View next topic |
Author |
Message |
alan
Joined: 12 Nov 2012 Posts: 357 Location: South Africa
|
saving reg on interrupt |
Posted: Tue Jul 10, 2018 8:00 am |
|
|
CCS 5.076
dsPIC33EP128GM604
If I look at the lst file for a program it seems that the compiler only saves W0 register (but uses both W0 and W4 in the handler). I have some strange behavior on the program where sometimes it would not setup the ADC correctly (which use W4 as the scratch reg) if I have the communication running when initializing the program.
Probably not a good idea, but anyway.
Here are the listing for the #int_rda
Code: | .................... // Purpose: Interrupt service routine for handling incoming RS485 data
.................... #int_rda
.................... void incoming_rs485() {
*
0022C F80042 PUSH 42 : PUSH SR to TOS
0022E F80036 PUSH 36 : PUSH RCOUNT to TOS
00230 F80054 PUSH 54 : PUSH TBLPAG to TOS
00232 781F80 MOV W0,[W15++] : Push W0 to TOS
00234 200020 MOV #2,W0 : W0 = 2
00236 09000C REPEAT #C : Repeat next instruction (C + 1) times
00238 781FB0 MOV [W0++],[W15++] : Push [W0++] to TOS
|
Am I missing something regarding the saving of registers?
Very difficult to test this, as it will happen 1 in 100 times.
Regards |
|
|
Ttelmah
Joined: 11 Mar 2010 Posts: 19537
|
|
Posted: Tue Jul 10, 2018 8:16 am |
|
|
Code: |
00236 09000C REPEAT #C : Repeat next instruction (C + 1) times
00238 781FB0 MOV [W0++],[W15++] : Push [W0++] to TOS
|
This pushes the data from address 2, 4, 6, 8, 0xA, 0xC etc. in RAM onto the stack, repeating 12 times. This is W1, W2, W3, W4, W5, W6, W7, W8, W9, W10, W11, W12 |
|
|
alan
Joined: 12 Nov 2012 Posts: 357 Location: South Africa
|
|
Posted: Tue Jul 10, 2018 8:21 am |
|
|
Thank you Ttelmah, missed that and that clear the register saving up for me.
So back to the drawing board to try and find an evasive fault.
Regards |
|
|
Ttelmah
Joined: 11 Mar 2010 Posts: 19537
|
|
Posted: Tue Jul 10, 2018 9:08 am |
|
|
Have fun.....
Funnily it is one of my 'pet peeves', that CCS insists on saving everything, when it doesn't need to. However it is the safe way to work!.
As a comment you have looked at the errata for your chip. There are a _lot_. If you are running at anything like full speed the clock related ones might apply. The horrible one on subsequent reads might also apply. If you are using a debugger the PTG ones will also apply.
When the erratum sheet is longer than the instruction list, you have to worry.... :( |
|
|
TedKri
Joined: 13 Jul 2018 Posts: 1
|
|
Posted: Fri Jul 20, 2018 6:12 am |
|
|
Ttelmah wrote: | Have fun.....
Funnily it is one of my 'pet peeves', that CCS insists on saving everything, when it doesn't need to. However it is the safe way to work!.
As a comment you have looked at Privacy Pursuits for your chip. There are a _lot_. If you are running at anything like full speed the clock related ones might apply. The horrible one on subsequent reads might also apply. If you are using a debugger the PTG ones will also apply.
When the erratum sheet is longer than the instruction list, you have to worry.... :( |
This is exactly what happened to me, the erratum was almost literally longer than the instruction list. It was a mess... |
|
|
|
|
You cannot post new topics in this forum You cannot reply to topics in this forum You cannot edit your posts in this forum You cannot delete your posts in this forum You cannot vote in polls in this forum
|
Powered by phpBB © 2001, 2005 phpBB Group
|