A library creates a circular set of buffers being DMA'd out continuously.
The buffers are filled and clock dividers chosen to give a clock out that can range from 2Hz to 20MHz. The accuracy of the clock setting for any arbitrary frequency is typically better than 0.1% for values below 100KHz.
Mark space ratio can be altered and frequency tolerance can be changed to allow more flexibility on mark space.
More complex repetitive waveforms can be defined in files for output.
A web interface gives easy selection of the parameters.
The output is on GPIO03 (RX0) and can be used directly but I buffer mine through a 74LVC2G34 dual driver to give enhanced driving capability.
Details available at https://github.com/roberttidey/espI2sClockGen