| 
	
	|  |  |  
	
		| View previous topic :: View next topic |  
		| Author | Message |  
		| alan 
 
 
 Joined: 12 Nov 2012
 Posts: 358
 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: 19966
 
 
 
			    
 
 | 
			
				|  |  
				|  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: 358
 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: 19966
 
 
 
			    
 
 | 
			
				|  |  
				|  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
 
 |