Here are a few hints which I figured out myself while writing a Windows driver. Setting up the Environment Install Visual Studio 2019 Community Edition, select C++ workload Install Windows Driver Kit (WDK) This tutorial explains how to provision the target computer for kernel mode debugging. Here is the summary: […]
Harald Rosenfeldt
tl;dr : If you are an angry Windows alien using Linux, you will need these commands. I assume it is just as frustrating for a Linux user to use Windows and vice versa. I am a Windows user who has to use Linux occasionally. I am no stranger to the command […]
Well, here is the short story: RF Spectrum Analyzers display the result in dBm, whereas noise specifications are often given in nV/sqrt(Hz). So, all we need is a conversion between those units, right? If you just want the answer, here it is: RF Power Noise Density [dBm] [nV/sqrt(Hz)] -80 223 […]
In a previous post, we added an AXI timer to create a periodic interrupt. In this tutorial we are going to add support for the OLED screen to the WAV player project. This makes it a fully self-contained application which can be used without a PC. In this tutorial we […]
In a previous post, we added GPIOs to our WAV player to enable a simple user interface. In that example we triggered an interrupt whenever a key was pressed. However, I found it hard to debounce the keypad as we would have to somehow disable new interrupts for a while […]
In the post ZYNQ: Read a WAV File from SD-Card and Play it on the Audio Codec we started using the SD card. Everything worked fine as long as I didn’t change the SD cards. I found that it is related to the fact that I was switching between a regular (ancient) […]
In a previous post, we made a simple WAV file player which feeds the DMA controller from an interrupt routine. Currently the player is controller through the terminal connected to the UART. The Zedboard has LEDs and buttons which we can use as user interface. So let’s create a simple […]
It happened to me a few times that the Xilinx SDK did not properly update the Board Support Package (BSP). In fact, I found that the BSP is corrupt in some way. But luckily, it is easy to rebuild it. The symptom xparameters.h does not contain the necessary macros for […]
In a previous post, we made a simple WAV file player which loads the WAV file completely into RAM and plays it from there. That is not ideal for a few reasons. First of all loading a 300MByte WAV file from SD card takes a few seconds. Furthermore, we are […]
It happened to me when I wanted to read from SD card while being in an interrupt handler. Whenever I read something from the SD card, the local variables of main() got destroyed. The root cause: There was a stack overflow of the IRQ Stack which then “leaked” into the […]
In a previous post, we made a simple WAV file player. That demo used a fixed sampling rate of 39kHz which resulted from simply dividing the 100MHz system clock. Now let’s use the standard audio sampling rates of 44.1kHz or 48kHz. In order to achieve this, we need to use […]
If you debug a standalone C- or C++ application, by default you can’t step into the Board Support Package (BSP) code. Here is how you enable debugging for the BSP sources: Turn optimizations off (-O0) and turn on the debug information (-g3). Right-click on the BSP project and click “Board […]
I often want to read a single character from the UART or stdin. By default getchar() buffers all input until a RETURN character occurs. Here are two ways to handle this: You can turn off the buffering on the stdin stream: Or you just don’t use getchar() at all. Use […]
Suppose, you wrote your C- or C++ standalone application using the Xilinx SDK. Now you want to write it to an SD-card and boot from the SD-card. Here is how it’s done: Make sure that your board-support package has the FAT File System drivers included: Create the First Level Bootloader […]
When exporting the hardware to the Xilinx SDK (I am using 2017.2), the SDK automatically updates the system wrapper. Unfortunately it messes up the UART settings most of the time. Sometimes it does not compile anymore, sometimes it compiles but there is no output in Tera Term. The solution is […]
I stumbled across Jerobeam Fenderson’s YouTube channel a while ago and I was fascinated by his work. He probably creating the field of “Oscilloscope Music”. Before, there were just Lissajous curves. In a nutshell, you connect the left and right channel of your audio source to an oscilloscope while playing it […]
I thought it would be nice to play audio files as a demonstration. So, let’s read WAV files from an SD-card and send them to the audio codec. In this tutorial we learn: How to access the SD card slot. How to increase the heap size. How to parse a […]
Now it is going to pay off that we are using an AXI interface on our I2S transmitter. We can now exchange the FIFO with a DMA controller. DMA stand for “Direct Memory Access”. The DMA controller can move data from the main memory to the AXI stream interface without […]
The previous tutorial showed how to use an I2S IP core to send audio data to the ADAU1761 codec of the Zedboard. We used a polling loop to keep the FIFO filled. In this tutorial we will connect the interrupt output of the FIFO to the ZYNQ fabric and have […]
Can’t figure out why you can’t use cos, sin or pow functions in a Xilinx SDK project? I found it surprisingly obscure as well. A solution is described here. Here are some screenshots: