UPGRADE YOUR BROWSER

We have detected your current browser version is not the latest one. Xilinx.com uses the latest web technologies to bring you the best online experience possible. Please upgrade to a Xilinx.com supported browser:Chrome, Firefox, Internet Explorer 11, Safari. Thank you!

cancel
Showing results for 
Search instead for 
Did you mean: 
4,147 Views
Registered: ‎10-09-2013

Random Data Abort Exception occurs when accessing ZYNQ PL

We have a firm bitstream design that works well with registers defined at 0x8000_0000 and up.  My PS application contains many routines that access our defined PL registers.  At random times a Data Abort Exception will occur with the offending address provided as one of the PL registers.  The problem is that the routines that accesses the PL register aren't passing any data between routines, i.e. the data is constant as are the addresses so the possibility of a bad address or unaligned access is slim to none.

 

For example, a UART contained in the PL is accessed by several 32 bit registers mapped to 0x8000_1000, 0x8000_1004 and 0x8000_1008. The code in the PS defines pointers of 

 

long * reg_1000 = (long *) 0x8000_1000;

long * reg_1004 = (long *) 0x8000_1004;

long * reg_1008 = (long *) 0x8000_1008;

 

Reading or writing the registers in the code using the pointers works just fine...90% of the time.  Sometimes executing the program on the PS causes the Data Abort Exception out of the blue and I've run out of ideas to figure why or how to prevent this.  Any clues?

0 Kudos