Hallo,
ich möchte mit einem STM32F401C-Disco Board einen I2S Audiostream
erzeugen. Allerdings gibt es beim Output (TX) einen Bitfehler. Der
Audiostream ist um ein Bit Verschoben (siehe Abbildung). Ich habe
versucht eine 1 zu senden (uint16_t) und bekomme am Output eine 32768.
Ich nutze die Coocox IDE und die darin zur Verfügung gestellten
Funktionen für die I2S Schnittstelle.
1 | // configure I2S port
|
2 | SPI_I2S_DeInit(CODEC_I2S);
|
3 | I2S_InitType.I2S_AudioFreq = I2S_AudioFreq_8k;
|
4 | I2S_InitType.I2S_MCLKOutput = I2S_MCLKOutput_Enable;
|
5 | I2S_InitType.I2S_DataFormat = I2S_DataFormat_16b;
|
6 | I2S_InitType.I2S_Mode = I2S_Mode_MasterTx;
|
7 | I2S_InitType.I2S_Standard = I2S_Standard_Phillips;
|
8 | I2S_InitType.I2S_CPOL = I2S_CPOL_Low;
|
9 |
|
10 | I2S_Init(SPI3, &I2S_InitType);
|
Senden mit Interrupt:
1 | void SPI3_IRQHandler(void)
|
2 | {
|
3 | /* Check the interrupt source */
|
4 | if (SPI_I2S_GetITStatus(SPI3, SPI_I2S_IT_TXE) == SET) //SPI_I2S_IT_TXE
|
5 | {
|
6 | SPI_I2S_SendData(SPI3, 1);
|
7 | }
|
8 | }
|
Hat jemand eine Idee wo dieser Fehler her kommt und wie man ihn beheben
kann?
Vielen Dank!
Tom