Kevin, try creating upper-half driver (i.e. pwmaudio providing OSS like /dev/dsp with ioctl interface to set sample format and sampling frequency) that would be common for all platforms and lower-half implementation that would leverage platform specific hardware features that you need. When successful other folks may add lower-half to other MCUs :-) Tomek
On Mon, Feb 24, 2025 at 11:02 PM Kevin Witteveen <kevinwit1...@gmail.com> wrote: > > Thank you for responding! > > That is a great suggestion and i will be looking into it. > However, I have a concern about receiving a PWM interface. For PWM audio to > work, the PWM interface must give a hardware address to its compare > register. > I haven't seen that the PWM interface is providing one. > This address is required because we need DMA with a pacing timer to provide > samples to the PWM hardware address at a fixed sample rate. > If DMA is not used, it is going to be very hard to have a consistent sample > rate. Or even impossible. > > -- DMA PWM -- > [ Samplerate timer ]\ > [ Sample memory ] ------> [ DMA ] --------> [ PWM compare register (not > provided) ] > > I suppose a solution would be to give the audio device a pointer to one > directly without PWM interface. > Example pseudo code: audio_device = register( *pwm_compare_ptr, bitdepth, > dma_driver *dma ); > > However, looking into the pacing timer, that might be even arch specific as > well. > > I hope someone has more knowledge about this. > > Kind regards, > Kevin > > Op ma 24 feb 2025 om 18:37 schreef Tiago Medicci Serrano < > tiago.medi...@gmail.com>: > > > Hi! > > > > Tiago, since you are the audio guy, what do you think? Is it possible to > > > create the "fake" audio codec that works with PWM and DMA the way I'm > > > suggesting? > > > > > > Yes, the audio subsystem is created in layers. It wouldn't be a codec by > > itself (like PCM), but still can be understood as an *audio decoder > > driver*. > > Take `cs4344` audio decoder driver as an example. It receives a low-level > > I2S interface peripheral to be bound to the audio codec driver at > > `cs4344_initialize` > > < > > https://github.com/apache/incubator-nuttx/blob/4ef01d98d526361b9348646dd1fd09f3faff88c0/boards/xtensa/esp32s3/common/src/esp32s3_cs4344.c#L112 > > >. > > After initialization, the PCM audio codec is created using this audio codec > > at `pcm_decode_initialize` > > < > > https://github.com/apache/incubator-nuttx/blob/4ef01d98d526361b9348646dd1fd09f3faff88c0/boards/xtensa/esp32s3/common/src/esp32s3_cs4344.c#L125 > > >. > > Instead of the `cs4344` audio interface, there would be a "generic PWM > > audio codec" that received a PWM interface from the device and that > > generates the signal to be sent to the PWM peripheral. All the > > required translation (from PCM, for instance) would be done in this driver. > > > > Best regards, > > > > Em dom., 23 de fev. de 2025 às 07:10, Alan C. Assis <acas...@gmail.com> > > escreveu: > > > > > Hi Kevin, > > > > > > I think it is possible to create a generic audio using PWM and DMA, but > > it > > > will require two halves design (like many drivers in NuttX). > > > > > > The top half will implement the high end driver to be present like an > > > audio codec to the application (this way we don't need to modify existing > > > applications), and the bottom half will be responsible for setting up the > > > DMA channel to use with the PWM. > > > > > > Create a board only solution like you are thinking will work for your > > > board, but if in the future you move to another arch you will need to > > > reimplement it again and probably the way you are going to implement it > > the > > > existing applications cannot be used. > > > > > > Tiago, since you are the audio guy, what do you think? Is it possible to > > > create the "fake" audio codec that works with PWM and DMA the way I'm > > > suggesting? > > > > > > BR, > > > > > > Alan > > > > > > On Sun, Feb 23, 2025 at 6:59 AM Kevin Witteveen <kevinwit1...@gmail.com> > > > wrote: > > > > > >> Well that's unfortunate. It feels that this kind of system will not fit > > in > > >> this OS without a bit of hacking. > > >> I think I will implement this at board logic. Use DMAC.h device and > > >> directly use it on the PWM register addresses after initializing them > > the > > >> proper way using the PWM.h device. > > >> Maybe it's possible to add this as a source file to the common RP2040 > > >> board > > >> directory for everyone to enjoy. > > >> > > >> About the I2S... yeah i think i will go for that next time. I am a > > little > > >> stuck with what I have on my PCB right now. > > >> > > >> Op zo 23 feb. 2025 02:20 schreef Tomek CEDRO <to...@cedro.info>: > > >> > > >> > Many people think about this but no solid implementation so far.. have > > >> > you consider I2S audio codec? > > >> > Tomek > > >> > > > >> > > > >> > On Sun, Feb 23, 2025 at 12:07 AM Kevin Witteveen < > > >> kevinwit1...@gmail.com> > > >> > wrote: > > >> > > > > >> > > Thanks, however I'm specifically looking for audio. For example, > > >> music, > > >> > > samples, etc. A tone is not enough for what I'm looking for. > > >> > > Or did I miss something and the audio_tone is actually more than > > just > > >> a > > >> > > tone? > > >> > > > > >> > > Op za 22 feb 2025 om 22:05 schreef TimH <t...@jti.uk.com.invalid>: > > >> > > > > >> > > > CONFIG_AUDIO_TONE? > > >> > > > > > >> > > > Not sure if that’s exactly what you’re after but could be? > > >> > > > > > >> > > > > On 22 Feb 2025, at 17:12, Kevin Witteveen < > > kevinwit1...@gmail.com > > >> > > > >> > > > wrote: > > >> > > > > > > >> > > > > Hi nuttx, > > >> > > > > > > >> > > > > I need an audio device that can generate sound using PWM on the > > >> > RP2040. > > >> > > > It > > >> > > > > appears nothing already exists for this. > > >> > > > > What would be a good way to implement this? > > >> > > > > > > >> > > > > My previous implementation outside NuttX was to use DMA to feed > > >> > samples > > >> > > > > into a PWM register. Relatively simple. > > >> > > > > However, in NuttX i now need to combine the PWM implementation > > >> with > > >> > the > > >> > > > > DMAC implementation. This is where I'm not sure how to "connect > > >> them > > >> > > > > together" on a proper "nuttx" way. > > >> > > > > Then also have it show up as an audio device. > > >> > > > > > > >> > > > > in case you wonder about the concept PWM audio. It is a common > > >> way to > > >> > > > > generate audio. It is how class-D amplifiers work. This is > > because > > >> > the > > >> > > > duty > > >> > > > > cycle of PWM when filtered becomes an analog signal. A very > > cheap > > >> > way to > > >> > > > > implement audio in systems. > > >> > > > > > > >> > > > > Are there any examples of projects out there that did this with > > >> > Nuttx? > > >> > > > > Or are there any people that have an idea how to take this > > project > > >> > on? > > >> > > > > Where do i begin? Where would i implement this? Board? > > >> Architecture? > > >> > > > > > > >> > > > > I would appreciate any help > > >> > > > > > >> > > > > > >> > > > >> > > > >> > > > >> > -- > > >> > CeDeROM, SQ7MHZ, http://www.tomek.cedro.info > > >> > > > >> > > > > > -- CeDeROM, SQ7MHZ, http://www.tomek.cedro.info