OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 5807|回复: 10

24位I2S。。。不懂。。。求大神解答。。。

[复制链接]

5

主题

27

帖子

0

精华

初级会员

Rank: 2

积分
83
金钱
83
注册时间
2014-8-20
在线时间
7 小时
发表于 2014-10-20 15:18:11 | 显示全部楼层 |阅读模式
5金钱
I2S可以配置为16位、24位和32位
我想使用24位的
I2S的发送函数应该为void SPI_I2S_SendData(SPI_TypeDef* SPIx, uint16_t Data)
data是16位的啊。。。。
这就不能用这个库函数了。。。
那应该怎么用呢。。。?
连续俩次发送16位?后八位手动补齐?
求大神解答。。。。

最佳答案

查看完整内容[请看2#楼]

用IIS,肯定要用DMA。。。 否则太难过了。 24位要填充为32位,才可以。你得程序上填充才行。
我只想往前走,不停地往前走
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165540
金钱
165540
注册时间
2010-12-1
在线时间
2117 小时
发表于 2014-10-20 15:18:12 | 显示全部楼层
用IIS,肯定要用DMA。。。
否则太难过了。
24位要填充为32位,才可以。你得程序上填充才行。
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复

使用道具 举报

5

主题

27

帖子

0

精华

初级会员

Rank: 2

积分
83
金钱
83
注册时间
2014-8-20
在线时间
7 小时
 楼主| 发表于 2014-10-20 16:02:59 | 显示全部楼层



刚刚注意到底下这行字。。。。
那就是写两次I2S才发送一次数据对么?
我只想往前走,不停地往前走
回复

使用道具 举报

5

主题

27

帖子

0

精华

初级会员

Rank: 2

积分
83
金钱
83
注册时间
2014-8-20
在线时间
7 小时
 楼主| 发表于 2014-10-20 16:21:57 | 显示全部楼层
有哪位大神写过I2S的发送函数麻烦给讲讲~~~~
我只想往前走,不停地往前走
回复

使用道具 举报

5

主题

27

帖子

0

精华

初级会员

Rank: 2

积分
83
金钱
83
注册时间
2014-8-20
在线时间
7 小时
 楼主| 发表于 2014-10-20 17:36:01 | 显示全部楼层
 回复【4楼】 正点原子 :
---------------------------------
原子哥的教程里MP3这一章也没有用DMA啊?用的SPI一个字节一个字节传的。。。。
我也想像MP3教程里那样一次提出3个字节再补成32位通过I2S传出去~~~~~

我刚写完I2S的发送函数,不知道对不对~~~~
//I2S发送函数
//参数:L_Data:左声道数据
//      R_Data: 右声道数据
//返回值:0:发送成功
//        1: 发送失败
u8 I2S3_WriteData(u32 L_Data,u32 R_Data)
{
u8 retry=0;
/*发送左声道数据*/
if (SPI_I2S_GetFlagStatus(SPI3,I2S_FLAG_CHSIDE) == RESET)
{
   while (SPI_I2S_GetFlagStatus(SPI3, SPI_I2S_FLAG_TXE) == RESET) //检查指定的SPI标志位设置与否:发送缓存空标志位
{
   retry++;
   if(retry>200)return 1;
}  
   SPI_I2S_SendData(SPI3, L_Data>>16); //通过外设SPIx发送一个数据
retry=0;
while (SPI_I2S_GetFlagStatus(SPI3, SPI_I2S_FLAG_TXE) == RESET)
{
   retry++;
if(retry>200)return 1;
}
   SPI_I2S_SendData(SPI3, L_Data); //通过外设SPIx发送一个数据
}
else return 1;
retry=0;
/*发送右声道数据*/
if(SPI_I2S_GetFlagStatus(SPI3,I2S_FLAG_CHSIDE) == SET)
{
   while (SPI_I2S_GetFlagStatus(SPI3, SPI_I2S_FLAG_TXE) == RESET) //检查指定的SPI标志位设置与否:发送缓存空标志位
{
   retry++;
   if(retry>200)return 1;
}  
   SPI_I2S_SendData(SPI3, R_Data>>16); //通过外设SPIx发送一个数据
retry=0;
while (SPI_I2S_GetFlagStatus(SPI3, SPI_I2S_FLAG_TXE) == RESET)
{
   retry++;
if(retry>200)return 1;
}
   SPI_I2S_SendData(SPI3, R_Data); //通过外设SPIx发送一个数据
}
else return 1;

return 0;
}

PS:32位数据在程序外补完
我只想往前走,不停地往前走
回复

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165540
金钱
165540
注册时间
2010-12-1
在线时间
2117 小时
发表于 2014-10-20 19:48:55 | 显示全部楼层
回复【5楼】神的兄弟:
---------------------------------
我们的MP3用的是VS1053解码,不需要IIS,所以。。。。
你如果是IIS直接接DAC芯片,那就必须保证IIS送数据的速度,否则就会断流。
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复

使用道具 举报

5

主题

27

帖子

0

精华

初级会员

Rank: 2

积分
83
金钱
83
注册时间
2014-8-20
在线时间
7 小时
 楼主| 发表于 2014-10-21 17:20:32 | 显示全部楼层
 回复【6楼】 正点原子 :
---------------------------------
好吧~~~谢谢原子哥讲解~~~~我先试着做一做~~要是出现断流我再把程序优化一下主频提高点~~~~应该是没问题的~~~
我只想往前走,不停地往前走
回复

使用道具 举报

5

主题

27

帖子

0

精华

初级会员

Rank: 2

积分
83
金钱
83
注册时间
2014-8-20
在线时间
7 小时
 楼主| 发表于 2014-10-21 18:51:39 | 显示全部楼层
 回复【6楼】 正点原子 :
---------------------------------
要是还是有断流我再整DMA~~~~
我只想往前走,不停地往前走
回复

使用道具 举报

5

主题

27

帖子

0

精华

初级会员

Rank: 2

积分
83
金钱
83
注册时间
2014-8-20
在线时间
7 小时
 楼主| 发表于 2014-10-27 21:52:33 | 显示全部楼层
 回复【6楼】 正点原子 :
---------------------------------
原子哥,我最后还是用DMA做出来的。。。。

直接用I2S发送函数我好想配置有点问题。。。半天没整出来,然后我就用DMA来做了。。。。

我想问原子哥在配置SPI的时候,配置函数里最后使能完SPI后,发了一组0xFF无效数据,在配置I2S时有必要发这么一组无效数据吗?

还有,为了输出标准时序,我打算换掉8M晶振,上8.192M的标准晶振,还是9倍频,和8M时除了延时函数所有的配置都一样,这样主频会达到73.728M,我想STM32在主频限制上应该会留有余量,超个1M多应该没问题,麻烦原子哥稍微讲解一下~~~~~谢谢~~~~~
我只想往前走,不停地往前走
回复

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165540
金钱
165540
注册时间
2010-12-1
在线时间
2117 小时
发表于 2014-10-27 23:28:52 | 显示全部楼层
回复【9楼】神的兄弟:
---------------------------------
没必要发送0XFF,发不发其实都不影响IIS通信。
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复

使用道具 举报

5

主题

27

帖子

0

精华

初级会员

Rank: 2

积分
83
金钱
83
注册时间
2014-8-20
在线时间
7 小时
 楼主| 发表于 2014-10-28 16:25:36 | 显示全部楼层
回复【10楼】正点原子:
---------------------------------
好吧~~~谢谢原子哥~~~
我只想往前走,不停地往前走
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2025-6-30 06:36

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

快速回复 返回顶部 返回列表