Hello
I'm trying to generate a sinewave with 1khz of frequency and send it to output audio line.
DAC is configurated to 48 kHz, so the sample rate i am using is 48kHz. I create LUT with that samples and i'm sending the samples to the output line.
I already tried sending from my PC to line in a 1khz sine wave and then directing it to line out and all went good. The values are more or less similar to the samples that I have but when i try to generate the sine samples in a C program and then output them to line out the sound is completely wrong.
The function that i used is this one:
void audio_stream(){
//u32 in_left, in_right;
int i,j=0;
int size=96000; // 96000 amostras para ter 2 segundos de som
u32 audio,aux[48];//,audio2;
printf("Inicializando a LUT
");
for(i=0;i<48;i++){
aux[i]=((sin(((2*M_PI)/(48))*(i))*pow(2,24))+pow(2,24)-1)/2;
//printf("Iteracao= %d AUX= %d
",i,aux[i]);
}
printf("--------------------
");
printf("LUT Criada!
");
while (!XUartPs_IsReceiveData(UART_BASEADDR)){
// Read audio input from codec
//in_left = Xil_In32(I2S_DATA_RX_L_REG);
//in_right = Xil_In32(I2S_DATA_RX_R_REG);
// Write audio output to codec
audio=(u32)aux[j%48];
Xil_Out32(I2S_DATA_TX_L_REG, audio);
j++;
//2880000
if(j>=size){
//printf("j= %d
",j);
menu();
}
//printf("audio= %lx aux= %d
",audio,aux);
//printf("right= %d",in_right);
//Xil_Out32(I2S_DATA_TX_L_REG, audio);
//Xil_Out32(I2S_DATA_TX_R_REG, (u32)audio);//
}
/* If input from the terminal is 'q', then return to menu.
* Else, continue streaming. */
if(XUartPs_ReadReg(UART_BASEADDR, XUARTPS_FIFO_OFFSET) == 'q') menu();
else audio_stream();
} // audio_stream()
What i'm doing wrong? Is this method impossible to implement? Or i'm forgoting something?
Thanks for the help
Joao