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 > >> > > >> > > >