TI中文支持网
TI专业的中文技术问题搜集分享网站

TLV320ADC3140: STM32H7使用I2S如何采样TLV320ADC3140的32位数据

Part Number:TLV320ADC3140

我现在遇到了个问题,我TLV320ADC3140设置的4通道,I2S-32bit数据传输格式,我STM32H7单片机这边也是设置的32位采样,但是我这边采样到的数据一个32位数据里面却是通道一和通道二的数据且两个通道的数据都是16位的。下面我展示一下我的配置。
TLV320ADC3140:配置如下:

tlv320adc3140_write(ADC3140_ADDRESS, PAGE_CFG_ADDRESS, PAGE_CFG_PAGE_0);tlv320adc3140_write(ADC3140_ADDRESS, SLEEP_CFG, 0x81);tlv320adc3140_write(ADC3140_ADDRESS, IN_CH_EN, 0xF0);tlv320adc3140_write(ADC3140_ADDRESS, ASI_OUT_CH_EN, 0xF0);tlv320adc3140_write(ADC3140_ADDRESS, PWR_CFG, 0xF4);tlv320adc3140_write(ADC3140_ADDRESS, ASI_CFG0, 0x40);tlv320adc3140_write(ADC3140_ADDRESS, CH1_CFG0, 0x90);tlv320adc3140_write(ADC3140_ADDRESS, CH1_CFG1, 0x00);tlv320adc3140_write(ADC3140_ADDRESS, CH2_CFG0, 0x90);tlv320adc3140_write(ADC3140_ADDRESS, CH2_CFG1, 0x00);tlv320adc3140_write(ADC3140_ADDRESS, CH3_CFG0, 0x90);tlv320adc3140_write(ADC3140_ADDRESS, CH3_CFG1, 0x00);tlv320adc3140_write(ADC3140_ADDRESS, CH4_CFG0, 0x90);tlv320adc3140_write(ADC3140_ADDRESS, CH4_CFG1, 0x00);tlv320adc3140_write(ADC3140_ADDRESS, ASI_CH1, 0x00);tlv320adc3140_write(ADC3140_ADDRESS, ASI_CH2, 0x01);tlv320adc3140_write(ADC3140_ADDRESS, ASI_CH3, 0x20);tlv320adc3140_write(ADC3140_ADDRESS, ASI_CH4, 0x21);

STM32H7的I2S配置代码如下:

hi2s2.Instance = SPI2;hi2s2.Init.Mode = I2S_MODE_MASTER_RX;hi2s2.Init.Standard = I2S_STANDARD_PHILIPS;hi2s2.Init.DataFormat = I2S_DATAFORMAT_32B;hi2s2.Init.MCLKOutput = I2S_MCLKOUTPUT_DISABLE;hi2s2.Init.AudioFreq = I2S_AUDIOFREQ_32K;hi2s2.Init.CPOL = I2S_CPOL_LOW;hi2s2.Init.FirstBit = I2S_FIRSTBIT_MSB;hi2s2.Init.WSInversion = I2S_WS_INVERSION_DISABLE;hi2s2.Init.Data24BitAlignment = I2S_DATA_24BIT_ALIGNMENT_RIGHT;hi2s2.Init.MasterKeepIOState = I2S_MASTER_KEEP_IO_STATE_ENABLE;

我调用STM32官方的HAL库函数

if (HAL_I2S_Receive(&hi2s2, (uint16_t *)i2s2_receive_data, BUFFER_SIZE, 1000) == HAL_OK){for (i = 0; i < BUFFER_SIZE; i++){if ((i + 0) % 2 == 0)// 通道1/2// printf("%d\r\n", (int16_t)(i2s2_receive_data[i] >> 16)); // 通道1printf("%d\r\n",(int16_t)(i2s2_receive_data[i]));//通道2// if((i+1)%2==0)//通道3/4// printf("%d\r\n",(int16_t)(i2s2_receive_data[i]>>16));//通道3// printf("%d\r\n",(int16_t)(i2s2_receive_data[i]));//通道4}}

HAL_I2S_Receive这个函数我测试过了,是可以接收完整的32位数据,只是传参的时候要强转为16位格式。
在我处理接收数据时,想要获取到通道一和通道二的数据时,必须要强转为16位数据才是我想要的数据,但是我在ADC中设置的是32位。我不使用强转16位数据时,得到的只有通道一和通道三的数据,通道二和通道四的数据都是0。
下面的数据处理代码就没有通道二和通道四的值

if (HAL_I2S_Receive(&hi2s2, (uint16_t*)i2s2_receive_data, BUFFER_SIZE, 1000) == HAL_OK){for (i = 0; i < BUFFER_SIZE; i++){if ((i+4) % 4 == 0) // 通道1
				printf("%d\r\n",(i2s2_receive_data[i]));// if ((i + 3) % 4 == 0) // 通道2//printf("%d\r\n", (i2s2_receive_data[i]));// if ((i + 2) % 4 == 0) // 通道3//printf("%d\r\n", (int32_t)(i2s2_receive_data[i]));// if ((i + 1) % 4 == 0) // 通道4//printf("%d\r\n", (int32_t)(i2s2_receive_data[i]));}}

****按配置来讲,通道一到通道四的数据都应该是32位按顺序依次存放在数组中,但是我按照上面这种处理方式只有一三通道有值,二四通道没值。

我想要的是我能获取到每个通道都是32位的数据,我在ADC配置中通道一和通道二分别是左槽的0和1.通道三和通道四分别是右槽的0和1,,可不可以帮我看一下是我哪里的配置有问题吗,怎么解决上述问题

TRANSLATE with x
English

Arabic Hebrew Polish
Bulgarian Hindi Portuguese
Catalan Hmong Daw Romanian
Chinese Simplified Hungarian Russian
Chinese Traditional Indonesian Slovak
Czech Italian Slovenian
Danish Japanese Spanish
Dutch Klingon Swedish
English Korean Thai
Estonian Latvian Turkish
Finnish Lithuanian Ukrainian
French Malay Urdu
German Maltese Vietnamese
Greek Norwegian Welsh
Haitian Creole Persian
TRANSLATE with

COPY THE URL BELOW

Back
EMBED THE SNIPPET BELOW IN YOUR SITE

Enable collaborative features and customize widget: Bing Webmaster Portal
Back
c yh:

定义的数组如下:int32_t i2s2_receive_data[1024];

,

Links:

您好,

已经收到了您的案例,调查需要些时间,感谢您的耐心等待。

TRANSLATE with x

English

Arabic
Hebrew
Polish

Bulgarian
Hindi
Portuguese

Catalan
Hmong Daw
Romanian

Chinese Simplified
Hungarian
Russian

Chinese Traditional
Indonesian
Slovak

Czech
Italian
Slovenian

Danish
Japanese
Spanish

Dutch
Klingon
Swedish

English
Korean
Thai

Estonian
Latvian
Turkish

Finnish
Lithuanian
Ukrainian

French
Malay
Urdu

German
Maltese
Vietnamese

Greek
Norwegian
Welsh

Haitian Creole
Persian

TRANSLATE with

COPY THE URL BELOW

Back

EMBED THE SNIPPET BELOW IN YOUR SITE

Enable collaborative features and customize widget: Bing Webmaster Portal
Back

,

c yh:

您好,大概什么时候可以回复我

,

Links:

您好,

您能否在范围内确认SDOUT线路上可以看到来自所有4个ADC通道的数据?

TRANSLATE with x

English

Arabic
Hebrew
Polish

Bulgarian
Hindi
Portuguese

Catalan
Hmong Daw
Romanian

Chinese Simplified
Hungarian
Russian

Chinese Traditional
Indonesian
Slovak

Czech
Italian
Slovenian

Danish
Japanese
Spanish

Dutch
Klingon
Swedish

English
Korean
Thai

Estonian
Latvian
Turkish

Finnish
Lithuanian
Ukrainian

French
Malay
Urdu

German
Maltese
Vietnamese

Greek
Norwegian
Welsh

Haitian Creole
Persian

TRANSLATE with

COPY THE URL BELOW

Back

EMBED THE SNIPPET BELOW IN YOUR SITE

Enable collaborative features and customize widget: Bing Webmaster Portal
Back

,

c yh:

您好,我没听明白你是什么意思。不过针对于下面这种数据处理格式

if (HAL_I2S_Receive(&hi2s2, (uint16_t *)i2s2_receive_data, BUFFER_SIZE, 1000) == HAL_OK){for (i = 0; i < BUFFER_SIZE; i++){if ((i + 0) % 2 == 0)// 通道1/2// printf("%d\r\n", (int16_t)(i2s2_receive_data[i] >> 16)); // 通道1printf("%d\r\n",(int16_t)(i2s2_receive_data[i]));//通道2// if((i+1)%2==0)//通道3/4// printf("%d\r\n",(int16_t)(i2s2_receive_data[i]>>16));//通道3// printf("%d\r\n",(int16_t)(i2s2_receive_data[i]));//通道4}}

我能够确认是四个通道的数据,就比如我通道一对应的采集x方向数据,通道二对应的是采集y方向的数据,当我移动x方向时 printf("%d\r\n", (int16_t)(i2s2_receive_data[i] >> 16)); // 通道1。通道一的数据会跟着变化当我移动y方向时  printf("%d\r\n",(int16_t)(i2s2_receive_data[i]));//通道2。通道二的数据会变化

,

Links:

Lakshmi的含义是使用示波器测量ADC的所有4个通道是否都处于活动状态。 这可避免任何软件错误,并验证ADC是否正确输出。 您可以通过测量BCLK,FSYNC和DOUT线路并计数所有4*32=128位都在切换来进行测量。

TRANSLATE with x

English

Arabic
Hebrew
Polish

Bulgarian
Hindi
Portuguese

Catalan
Hmong Daw
Romanian

Chinese Simplified
Hungarian
Russian

Chinese Traditional
Indonesian
Slovak

Czech
Italian
Slovenian

Danish
Japanese
Spanish

Dutch
Klingon
Swedish

English
Korean
Thai

Estonian
Latvian
Turkish

Finnish
Lithuanian
Ukrainian

French
Malay
Urdu

German
Maltese
Vietnamese

Greek
Norwegian
Welsh

Haitian Creole
Persian

TRANSLATE with

COPY THE URL BELOW

Back

EMBED THE SNIPPET BELOW IN YOUR SITE

Enable collaborative features and customize widget: Bing Webmaster Portal
Back

赞(0)
未经允许不得转载:TI中文支持网 » TLV320ADC3140: STM32H7使用I2S如何采样TLV320ADC3140的32位数据
分享到: 更多 (0)