AnsweredAssumed Answered

32-Bit I2S TCR5.FBT

Question asked by SCOTT THOMPSON on Jan 27, 2014
Latest reply on Jan 27, 2014 by martynhunt

The K70 reference manual states for TCR5.FBT (first-bit transmitted):

12–8

FBT

First bit shifted

Configures the bit index for the first bit transmitted for each word in the frame. If configured for MSB First,

the index of the next bit transmitted is one less than the current bit transmitted. If configured for LSB First,

the index of the next bit transmitted is one more than the current bit transmitted. The value written should

be greater than or equal to the word width when configured for MSB First. The value written should be

less than or equal to 31-word width when configured for LSB First.

 

I am using 32-bit I2S words and data_bits is 32.  The sai_int_ksai.c driver that I'm using (MQX v4.0.x) shows

i2s_ptr->TCR5 |= I2S_TCR5_FBT(data_bits);

 

Yet this field is only 5-bits wide.  As such, when using 32-bit words, my output from my amplifier looks like a square wave (not good!).  Yet, if I change this value to be

i2s_ptr->TCR5 |= I2S_TCR5_FBT(data_bits-1);

 

My audio is output correctly (from what I can tell, there's other issues that I'm tracking down).  Well, at least it's a symmetrical sine wave but loaded with glitches and seems noisy for some reason.

 

Further down in sai_int_ksai.c is the equivalent receive channel RCR5.FBT which is listed as (data_bits-1).

 

How does one honour the reference manual's description for this register that indicates that "The value written should be greater than or equal to the word width when configured for MSB First" when I'm outputting a 32-bit word with 32-bit data?

 

Thanks,

Scott

Outcomes