CodeWarrior 0x200 Exception.

cancel
Showing results for 
Search instead for 
Did you mean: 

CodeWarrior 0x200 Exception.

1,234 Views
ricklei
Contributor I
I got a 0x200 exception from CodeWarrior during debuging my code. I found some reason from this forum which is the address is not accessible. However in my case, I can read the data from the address and the data is correct. But I can't write the data.
 
My case is as follows:
 
I am using a MPC855T and ISP1582. The USB chip is connected to chip select 5.
And the configuration is:
CS5_BR5:          .equ     0x0E000801
CS5_OR5:          .equ     0xFFFF8940
 
So the base address is 0x0E000000.
 
I try to write an unlock value to the register of ISP1582 following the chip's datasheet. The register's address is 0x7C.
The code is: 
 
*(volatile u16 *)(ISP158Xbase + reg) = value; ( here reg = 0x7C )
 
Then I got the 0x200 exception.
 
The interesting thing is that I can read the ID, 0x158230, from the chip. The address is 0x70.
The code is: 
 
u32 val = *(volatile u16 *)(ISP158Xbase + reg);
val |= ((*(volatile u16 *)(ISP158Xbase + reg + 2)) << 16); ( here reg = 0x70 )
 
 
Is there anyboy that know why the 0x200 exception happens?
 
Thanks a lot!
Labels (1)
0 Kudos
1 Reply

83 Views
genuap
NXP Employee
NXP Employee
0x200 is a machine check exception.

Do you have any other ORx / BRx entries that are colliding with the ones for CS5?

Do you have the MMU enabled, which could be causing some issues with address translation (potentially)?

CS5_BR5:          .equ     0x0E000801
CS5_OR5:          .equ     0xFFFF8940

Your address mask is 0xFFFF8, which means the address range is from 0x0e00_0000 to 0x0xe00_7FFF.

Why don't you try relaxing the timing too! Set OR5 to 0xFFFF89F6
0 Kudos