Aug 19, 2019
05:38 AM
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
Aug 19, 2019
05:38 AM
Hi,
During standby configuration it is said to copy redundancy data
(5.4 Preparation before to enter Stand-by mode page 211 user manual).
My code is :
The problem is that , I'm always getting trap. I turned off cpu and safety ENDINIT functions.
I saw in debugger that this reserved_data pointers are not null.
They are valid datas.
I use Tc222L
How to solve this problem ?
During standby configuration it is said to copy redundancy data
(5.4 Preparation before to enter Stand-by mode page 211 user manual).
My code is :
#define RESERVED_DATA_START_POINTER 0xD0002000
uint32* reserved_data = (uint32*)RESERVED_DATA_START_POINTER;
for(uint8 i = 0 ; i < WORD_SIZE; i++){
if(reserved_data != 0xFFFFFFFF
&& reserved_data != 0x0 ){
uint32* reserved_data_pointer = (uint32*)reserved_data;
reserved_data = *reserved_data_pointer; //here trap happens
The problem is that , I'm always getting trap. I turned off cpu and safety ENDINIT functions.
I saw in debugger that this reserved_data pointers are not null.
They are valid datas.
I use Tc222L
How to solve this problem ?
- Tags:
- IFX
8 Replies
Aug 20, 2019
01:36 AM
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
Aug 20, 2019
01:36 AM
It would help if you would provide the name of the device you are using. Most probably the RAM where you are trying to copy something in is:
- protected by MPU or SPROT
- is unitialized
-you are accessign nonexistant memory
- protected by MPU or SPROT
- is unitialized
-you are accessign nonexistant memory
Aug 20, 2019
03:53 AM
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
Aug 20, 2019
03:53 AM
I use TC222L
Aug 20, 2019
04:30 AM
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
Aug 20, 2019
04:30 AM
I can see that this address should be valid since it addresses locally the DSPR of CPU0. Did you check which trap handler is called (=trap class) and the Trap Identification Number (in D15)?
Aug 20, 2019
05:07 AM
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
Aug 20, 2019
05:07 AM
how can i check it ?
Aug 20, 2019
06:03 AM
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
Aug 20, 2019
06:03 AM
When the trap occurs the SW should go to the trap handler and break there (__debug instruction).
From the trap handler that is called you know the trap class. Corresponding Trap ID can be read from CPU register D15.
Details can be found in the TriCore architecture Manual.
From the trap handler that is called you know the trap class. Corresponding Trap ID can be read from CPU register D15.
Details can be found in the TriCore architecture Manual.
Aug 21, 2019
02:15 AM
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
Aug 21, 2019
02:15 AM
ok I've go it:
trap class 4
TIN number 2
in tc1.6 architecture manual I found it's DSE - data Access synchronus Error.
But i still cannot figure out why this error occur if this address is proper.
trap class 4
TIN number 2
in tc1.6 architecture manual I found it's DSE - data Access synchronus Error.
But i still cannot figure out why this error occur if this address is proper.
Aug 26, 2019
05:29 AM
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
Aug 26, 2019
05:29 AM
I think the problem is this line:
uint32* reserved_data_pointer = (uint32*)reserved_data;
here you set the pointer reserved_data_pointer to the content of reserved_data and then the reserved_data_pointer is set to an invalid address and the next line traps.
I am not sure what you will do but change the line to:
uint32* reserved_data_pointer = (uint32*)&reserved_data;
Maybe this solve the problem.
uint32* reserved_data_pointer = (uint32*)reserved_data;
here you set the pointer reserved_data_pointer to the content of reserved_data and then the reserved_data_pointer is set to an invalid address and the next line traps.
I am not sure what you will do but change the line to:
uint32* reserved_data_pointer = (uint32*)&reserved_data;
Maybe this solve the problem.
Aug 28, 2019
01:23 AM
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
Aug 28, 2019
01:23 AM
[HTML]During stand-by mode preparation, the user software must do the following:
• read sequentially 16 words from the “reserved area” in CPU0_DSPR starting at
address D000’2000H
• for any word check either it equals FFFF FFFFH or zero
– if yes - skip it and go to the next reserved location
– if no
- use this word as 32-bit address, read the data from that address and store this
data back into the same reserved location
- go to the next reserved location[/HTML]
here is said to use readed data as address so, I assume, reserved_data is an address itself.
uint32* reserved_data_pointer = (uint32*)&reserved_data;
and then reserved_data = *reserved_data_pointer.
Will has no effect, it's writing the same value again.
• read sequentially 16 words from the “reserved area” in CPU0_DSPR starting at
address D000’2000H
• for any word check either it equals FFFF FFFFH or zero
– if yes - skip it and go to the next reserved location
– if no
- use this word as 32-bit address, read the data from that address and store this
data back into the same reserved location
- go to the next reserved location[/HTML]
here is said to use readed data as address so, I assume, reserved_data is an address itself.
uint32* reserved_data_pointer = (uint32*)&reserved_data;
and then reserved_data = *reserved_data_pointer.
Will has no effect, it's writing the same value again.
This widget could not be displayed.