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: 
Highlighted
Visitor matthijsbos
Visitor
8,580 Views
Registered: ‎05-06-2015

Bug+Solution for Microblaze MCS I/O Module UART Interrupt driver

Hi everyone,

 

As part of my bachelor thesis project at the university of Amsterdam, I'm currently trying to build a system using the Microblaze MCS IP core running on a Spartan 3E starter kit board. I'm running the latest version of ISE 14.7.

 

I've been trying to get the MCS' UART working in order to receive serial data from the PC, handling interrupts when a new byte is received. It seems that I've stumbled upon what appears to be a bug in the I/O module driver.

 

I was trying to run the following code on the Microblaze such that it would respond to a byte received from the PC: https://gist.github.com/matthijsbos/49600e747182216ea355#file-uart_test

 

However, the handler function would not fire. I spent some time figuring out why it would not run and I found the source of the problem to be in the XIOModule_Uart_InterruptHandler() function, contained in:

C:\Xilinx\14.7\ISE_DS\EDK\sw\XilinxProcessorIPLib\drivers\iomodule_v1_04_a\src\xiomodule_uart_intr.c

 

And still appears to exist in the latest version of the driver that comes with SDK 2015.1:

C:\Xilinx\SDK\2015.1\data\embeddedsw\XilinxProcessorIPLib\drivers\iomodule_v2_1\src\xiomodule_uart_intr.c

 

It appears that the function reads the wrong I/O module register in order to check whether the interrupt was caused by a receive or transmit interrupt, so an interrupt handler is never called. A solution is provided in:

https://gist.github.com/matthijsbos/49600e747182216ea355#file-xiomodule_uart_intr-c-xiomodule_uart_interrupthandler

 

In order to fix this, modify the line in XIOModule_Uart_InterruptHandler() in the sdk directory and recreate your board support packages to get I/O Module uart interrupts working.

4 Replies
Xilinx Employee
Xilinx Employee
8,503 Views
Registered: ‎10-08-2010

Re: Bug+Solution for Microblaze MCS I/O Module UART Interrupt driver

Thank you for debugging and reporting this issue. I have created an internal change request to correct the iomodule driver code in the next tool release.

0 Kudos
Contributor
Contributor
7,817 Views
Registered: ‎06-18-2013

Re: Bug+Solution for Microblaze MCS I/O Module UART Interrupt driver

Hey guys!

 

Is this issue solved in 2015.3?

 

Cheers!

0 Kudos
Moderator
Moderator
7,796 Views
Registered: ‎07-31-2012

Re: Bug+Solution for Microblaze MCS I/O Module UART Interrupt driver

Hi,

 

We will check it and get back to you if it works in 2015.3.

 

Regards

Praveen


-------------------------------------------------------------------------
Don’t forget to reply, kudo, and accept as solution.
-------------------------------------------------------------------------
0 Kudos
Xilinx Employee
Xilinx Employee
7,780 Views
Registered: ‎10-08-2010

Re: Bug+Solution for Microblaze MCS I/O Module UART Interrupt driver

Yes, the issue appears to be solved in Vivado 2015.3. The I/O Module driver version 2.2 has been modified to read the status register instead of the IPR in the UART interrupt handler.

0 Kudos