So, 2010 has arrived. Time for a little status update on my multi-effect project for the BeagleBoard.
Well – I still don’t have sound output, but I have made some significant steps:
- I got the DSP working!
That does not sound like much, but it is a key component for my software-architecture. Getting everything working smoothly wasn’t that hard, but there have been some nice and unexpected pitfalls on the road. I may later write about some of the things that will go ẃrong on the first try if you want to run DSP code on the OMAP3530.
- I can now talk to the TWL4030 codec via I2C.
That has been an unexpected task as well. My assumption was that I could simply use the I2C driver and talk to the chip from Linux user-space. Unfortunately it was not that easy. Long story short: A bunch of drivers is blocking the I2C bus to the TWL4030, so you can’t just send the I2C commands without confusing the existing drivers. However, the drivers expose an interface to the kernel, so all it took was to write a kernel-module that exposes the interface to the user-space.
- I got the EDMA3 controller on the DSP working as well.
The EDMA3 peripheral on the OMAP3530 is exactly the same as on the DaVinci family. I’ve already worked with this DMA, so that part was easy.
And why all the hassle?
My plan is to move the entire sound output code to the DSP-side of the OMAP. That’ll way I can do all sound processing on a system without any operation system. The good realtime capabilities of the DspBios and the performance of the DSP will allow me to do my sound processing with minimal latency. I estimated that 2ms latency will be no problem, but we’ll see where I end up.
Compile a kernel with all McBSP and sound support disabled. Then write a McBSP driver for the DSP and do some noise 🙂