Hi
This is my first hands on the SAI interface, here is my code
extern ARM_DRIVER_SAI Driver_SAI0;
ARM_DRIVER_SAI *SAI_drv=&Driver_SAI0;
void mySAI_callback(uint32_t event)
{
int x=0;
switch (event)
{
case ARM_SAI_EVENT_SEND_COMPLETE:
/* Success: Wakeup Thread */
x=0;
__breakpoint(0);
break;
case ARM_SAI_EVENT_TX_UNDERFLOW:
/* Success: Wakeup Thread */
//__breakpoint(0);
x=1;
break;
case ARM_SAI_EVENT_RECEIVE_COMPLETE:
/* Success: Wakeup Thread */
//__breakpoint(0);
x=2;
break;
case ARM_SAI_EVENT_FRAME_ERROR:
/* Success: Wakeup Thread */
//__breakpoint(0);
x=3;
break;
case ARM_SAI_EVENT_RX_OVERFLOW:
/* Success: Wakeup Thread */
//__breakpoint(0);
x=4;
break;
}
SAI_drv->Send(wave_data,64);
}
void main (void)
{
SAI_drv->Initialize(mySAI_callback);
SAI_drv->PowerControl(ARM_POWER_FULL);
// configure Transmitter to Asynchronous Master: I2S Protocol, 16-bit data, 16kHz Audio frequency
SAI_drv->Control(ARM_SAI_CONFIGURE_TX |
ARM_SAI_MODE_MASTER |
ARM_SAI_ASYNCHRONOUS |
ARM_SAI_PROTOCOL_I2S |
ARM_SAI_DATA_SIZE(16), 0, 16000);
// enable Transmitter
SAI_drv->Control(ARM_SAI_CONTROL_TX, 1, 0);
SAI_drv->Send(wave_data,64);
while(1)
{
}
}
the problem is that after calling SAI_drv->Control(ARM_SAI_CONTROL_TX, 1, 0); the callback would get called with the ARM_SAI_EVENT_TX_UNDERFLOW, no matter how I do the things, I wanted to know do you have any idea what's going on wrong? the callback would not be called any more for continuous data transfer