You code is running at orders of magnitude slower than it should, going to an F7 might help but you may not need it.
On an F4 running at the same speed, I can get tens of MHZ of data out to a DAC but not using an interrupt for each byte.
1. Please check the actual clock frequency is correct.
2. Try changing from debug to release to see if that speeds things up.
3. You can hand optimise the output routine slightly and mark it as inline, this should speed things up.
Instead of calling with the channel number, just call it with DAC_X_WRITE or DAC_Y_WRITE depending on the channell you want.
inline void DAC_LT1657_Set(const uint8_t Channel_Select_Bit, uint16_t Output)
{
// LOAD LSB
// set up DAC, all control pins high
DAC_CONTROL_PORT->BSRRL = DAC_LDAC | DAC_MSB_CS | DAC_LSB_CS | DAC_X_WRITE | DAC_Y_WRITE;
DAC_CONTROL_PORT->BSRRH = Channel_Select_Bit | DAC_LSB_CS | DAC_DATA_PINS; // clear X select, LSB select and data pins
DAC_CONTROL_PORT->BSRRL = Output & 0x00FF; // set LSB data pins
// LOAD MSB
// set up DAC, all control pins high
DAC_CONTROL_PORT->BSRRL = DAC_LDAC | DAC_MSB_CS | DAC_LSB_CS | DAC_X_WRITE | DAC_Y_WRITE;
DAC_CONTROL_PORT->BSRRH = Channel_Select_Bit | DAC_MSB_CS | DAC_DATA_PINS; // clear X select, LSB select and data pins
DAC_CONTROL_PORT->BSRRL = Output >> 8; // set MSB data pins
asm("nop"); // delay, DAC needs 60nS
asm("nop"); // delay, DAC needs 60nS
// SET DAC OUTPUT
DAC_CONTROL_PORT->BSRRL = DAC_LDAC | DAC_MSB_CS | DAC_LSB_CS | DAC_X_WRITE | DAC_Y_WRITE;
DAC_CONTROL_PORT->BSRRH = DAC_LDAC; // Clear LDAC
asm("nop"); // delay, DAC needs 60nS
asm("nop"); // delay, DAC needs 60nS
asm("nop"); // delay, DAC needs 60nS
asm("nop"); // delay, DAC needs 60nS
asm("nop"); // delay, DAC needs 60nS
asm("nop"); // delay, DAC needs 60nS
DAC_CONTROL_PORT->BSRRL = DAC_LDAC; // Set LDAC
}
Also, please post the actual Timer ISR and also what else is the F4 doing while the timer is firing?
You need to post more code for us to help.