硬汉嵌入式论坛

 找回密码
 立即注册
查看: 1014|回复: 3
收起左侧

[SAI/I2S] H743 和H7B0 的I2S 是完全一样的吗?

[复制链接]

26

主题

23

回帖

101

积分

初级会员

积分
101
发表于 2022-3-8 11:15:27 | 显示全部楼层 |阅读模式
网上H743的代码很多,找了个I2S的代码,想移植到H7B0上,不知有多大难度。水平有限,没有深究代码的本事。
都用HAL库,如果I2S相关的寄存器都是一样的,只要改下引脚,这个会。好像还跟DMA相关,跟中断相关。想想都怕。
回复

使用道具 举报

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
106685
QQ
发表于 2022-3-8 11:25:33 | 显示全部楼层
简单,跟SPI一样,整音频,用H7的SAI更好,兼容I2S。
回复

使用道具 举报

26

主题

23

回帖

101

积分

初级会员

积分
101
 楼主| 发表于 2022-3-18 20:06:17 | 显示全部楼层
I2S 驱动WM8978 , 将某 H743开发板 的例程 移植到H7B0上,大有进展。  基本上改改相关引脚配置,WM8978就能动作了。 DMA缓冲区收到了变化的数据。
新的问题又来了,我这样建立了两个缓冲区,交替接受音频数据。
__attribute__ ((at(0x38000000))) uint16_t buffer0[0x100];  /* 数据缓存区0 */
__attribute__ ((at(0x38000200))) uint16_t buffer1[0x100];  /* 数据缓存区1 */
在DMA中断回调函数中,如果啥也不做,仿真的时候,KEIL 的WATCH窗口可以看到  buffer0[0x100]   buffer1[0x100] 中的数据再交替更新,很正常的样子。
但是,如果在DMA中断回调函数中,有代码企图从数据缓冲区中把数据读出,DMA中断还能进,但buffer0[0x100]   buffer1[0x100]  中的数据就不再变化了。

真是奇了怪了。难道DMA缓冲区数据不能读,那要它何用? 还是我这缓冲区放的地址不对?
回复

使用道具 举报

26

主题

23

回帖

101

积分

初级会员

积分
101
 楼主| 发表于 2022-3-19 12:30:27 | 显示全部楼层
sean4194304 发表于 2022-3-18 20:06
I2S 驱动WM8978 , 将某 H743开发板 的例程 移植到H7B0上,大有进展。  基本上改改相关引脚配置,WM8978就能 ...

问题有了答案, D-Cache 若的祸。在 MPU 要设置相关存储区 为 MPU_ACCESS_SHAREABLE。
回复

使用道具 举报

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

本版积分规则

QQ|小黑屋|Archiver|手机版|硬汉嵌入式论坛

GMT+8, 2024-4-29 23:42 , Processed in 0.165585 second(s), 25 queries .

Powered by Discuz! X3.4 Licensed

Copyright © 2001-2023, Tencent Cloud.

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