Hello,
I am currently working on a project using the Virtex II Pro and I am having some trouble with the ac97 codec. I am trying to create a program where I can simply record with a mic at a push of the UP button, and have it output through AMP-OUT with a pair of headphones connected when the DOWN button is pressed. As far as my understanding goes, to record something through the mic you must use the command XAC97_ReadFifo(XPAR_AUDIO_CODEC_BASEADDR), and to play it back the command XAC97_WriteFifo(XPAR_AUDIO_CODEC_BASEADDR). I currently have the following source code:
#define BTN_RIGHT 0x0001
#define BTN_LEFT 0x0002
#define BTN_DOWN 0x0004
#define BTN_UP 0x0008
#define BTN_CENTER 0x0010
#define SAMPLE Xuint32
#define SAMPLE_SIZE 200000
#include "xparameters.h"
#include "stdio.h"
#include "xbasic_types.h"
#include "xgpio.h"
#include "gpio_header.h"
#include "xio.h"
#include "xac97_l.h"
#include "xutil.h"
void checkmic(void);
//====================================================
XGpio push;
int main (void) {
XGpio_Initialize(&push, XPAR_PUSHBUTTONS_5BIT_DEVICE_ID);
XGpio_SetDataDirection(&push, 1, 0x0000001F);
xupv2p_ac97_init(); //Initalizing AC97
while(1){
checkmic();
}
}
//=====================================================
void checkmic(void){
int i, sampleCnt=0;
SAMPLE sample[SAMPLE_SIZE];
Xuint32 recorded;
Xuint32 pressed = 0;
pressed = XGpio_DiscreteRead(&push, 1);
if (~pressed & BTN_UP){
XAC97_EnableInput(XPAR_AUDIO_CODEC_BASEADDR, AC97_MIC_INPUT);
XAC97_WriteReg(XPAR_AUDIO_CODEC_BASEADDR, AC97_MicVol, AC97_VOL_MAX);
print("-- recording --\r\n");
while(sampleCnt < SAMPLE_SIZE)
{
sample[sampleCnt] = XAC97_ReadFifo(XPAR_AUDIO_CODEC_BASEADDR);
sampleCnt++;
}
sample[sampleCnt] = recorded;
print("-- done --\r\n");
XAC97_DisableInput(XPAR_AUDIO_CODEC_BASEADDR, AC97_MIC_INPUT);
}
if (~pressed & BTN_DOWN){
print("--Playing sample -\r\n");
for(i=0; i< SAMPLE_SIZE; i++){
XAC97_WriteFifo(XPAR_AUDIO_CODEC_BASEADDR, recorded);
}
print("--done--\r\n");
}
}
I am currently able to record, but when I press the DOWN button to playback the recorded data I am just getting noise from the headphones. Could someone please give me a push in the right direction where I am a newbie at this and still learning with FPGA's. Thank you in advance.
I am currently working on a project using the Virtex II Pro and I am having some trouble with the ac97 codec. I am trying to create a program where I can simply record with a mic at a push of the UP button, and have it output through AMP-OUT with a pair of headphones connected when the DOWN button is pressed. As far as my understanding goes, to record something through the mic you must use the command XAC97_ReadFifo(XPAR_AUDIO_CODEC_BASEADDR), and to play it back the command XAC97_WriteFifo(XPAR_AUDIO_CODEC_BASEADDR). I currently have the following source code:
#define BTN_RIGHT 0x0001
#define BTN_LEFT 0x0002
#define BTN_DOWN 0x0004
#define BTN_UP 0x0008
#define BTN_CENTER 0x0010
#define SAMPLE Xuint32
#define SAMPLE_SIZE 200000
#include "xparameters.h"
#include "stdio.h"
#include "xbasic_types.h"
#include "xgpio.h"
#include "gpio_header.h"
#include "xio.h"
#include "xac97_l.h"
#include "xutil.h"
void checkmic(void);
//====================================================
XGpio push;
int main (void) {
XGpio_Initialize(&push, XPAR_PUSHBUTTONS_5BIT_DEVICE_ID);
XGpio_SetDataDirection(&push, 1, 0x0000001F);
xupv2p_ac97_init(); //Initalizing AC97
while(1){
checkmic();
}
}
//=====================================================
void checkmic(void){
int i, sampleCnt=0;
SAMPLE sample[SAMPLE_SIZE];
Xuint32 recorded;
Xuint32 pressed = 0;
pressed = XGpio_DiscreteRead(&push, 1);
if (~pressed & BTN_UP){
XAC97_EnableInput(XPAR_AUDIO_CODEC_BASEADDR, AC97_MIC_INPUT);
XAC97_WriteReg(XPAR_AUDIO_CODEC_BASEADDR, AC97_MicVol, AC97_VOL_MAX);
print("-- recording --\r\n");
while(sampleCnt < SAMPLE_SIZE)
{
sample[sampleCnt] = XAC97_ReadFifo(XPAR_AUDIO_CODEC_BASEADDR);
sampleCnt++;
}
sample[sampleCnt] = recorded;
print("-- done --\r\n");
XAC97_DisableInput(XPAR_AUDIO_CODEC_BASEADDR, AC97_MIC_INPUT);
}
if (~pressed & BTN_DOWN){
print("--Playing sample -\r\n");
for(i=0; i< SAMPLE_SIZE; i++){
XAC97_WriteFifo(XPAR_AUDIO_CODEC_BASEADDR, recorded);
}
print("--done--\r\n");
}
}
I am currently able to record, but when I press the DOWN button to playback the recorded data I am just getting noise from the headphones. Could someone please give me a push in the right direction where I am a newbie at this and still learning with FPGA's. Thank you in advance.