在线时间828 小时
UID3079326
注册时间2015-2-11
NXP金币12
TA的每日心情 | 郁闷 2022-4-4 11:28 |
---|
签到天数: 351 天 [LV.8]以坛为家I
金牌会员
- 积分
- 5740
- 最后登录
- 2022-4-4
|
本帖最后由 wambob 于 2017-7-8 10:51 编辑
先前已经学了一点DMIC系统,虽然能跑自带的例程,但是修改SDK例程,总是播放不出音乐。
简单的流程就是dmic----->LPC54114----->WM8904。
1. 首先就是dmic的认识,这个数字传感器没什么好说的。使用I2C总线读取数据。
DMIC学习
使用了LPC54114的两个接口中的PDM0 接口,与PIO1_15和PIO_16管脚连接。
初始化化代码,看例程吧,SDK的函数转来转去,指针、回调,真正是考查C语言的掌握程度了。
2. 其次是WM8904
先看看框图 ,引脚功能必须知道是什么意思。
---左边是麦克风接口,可以就数字也可以接驻极体话筒。
---右边两路输出,下边几个管脚要注意了。这个器件的集成度很高,外围器件很少。
---SCL 和SDA脚,读写wm8904寄存器,配置工作模式。
---ADCDAT,模数转换数据输出
---DACDAT , 数模转换数据输入
上面两个之一,作为 I2S总线的串行SDA 读或写数据到WM8904。
---BCLK位时钟,和I2S的串行SCL相连,每一个SCL脉冲,发送一个SDA位。
---LRCLK帧时钟,切换左右声道。
---MCLK 主时钟,同步wm8904系统。
时钟之间的关系,看I2S总线协议有详细解说。
3.作为主控,LPC54114控制着这两个器件的初始化和工作模式。
SDK提供了模块例程,但是该写后有的不正常。
SDK中提供了读取WM8904所有寄存器的值。
寄存器数组:
- static const uint8_t allRegisters[] =
- {
- 0x00, 0x04, 0x05, 0x06, 0x07, 0x0A, 0x0C, 0x0E, 0x0F, 0x12, 0x14, 0x15, 0x16, 0x18, 0x19, 0x1A, 0x1B,
- 0x1E, 0x1F, 0x20, 0x21, 0x24, 0x25, 0x26, 0x27, 0x28, 0x29, 0x2A, 0x2B, 0x2C, 0x2D, 0x2E, 0x2F, 0x39,
- 0x3A, 0x3B, 0x3C, 0x3D, 0x43, 0x44, 0x45, 0x47, 0x48, 0x49, 0x4A, 0x4B, 0x4C, 0x4D, 0x5A, 0x5E, 0x62,
- 0x68, 0x6C, 0x6D, 0x6E, 0x6F, 0x70, 0x74, 0x75, 0x76, 0x77, 0x78, 0x79, 0x7A, 0x7B, 0x7C, 0x7E, 0x7F,
- 0x80, 0x81, 0x82, 0x86, 0x87, 0x88, 0x89, 0x8A, 0x8B, 0x8C, 0x8D, 0x8E, 0x8F, 0x90, 0x91, 0x92, 0x93,
- 0x94, 0x95, 0x96, 0x97, 0x98, 0x99, 0x9A, 0x9B, 0x9C, 0x9D, 0xC6, 0xF7, 0xF8
- };
复制代码 读取并打印寄存器值函数
- status_t WM8904_PrintRegisters(wm8904_handle_t *handle)
复制代码
对照wm8904可以了解寄存器的功能。
使用SDK的例程I2S调试wm8904,都没声音。I2C初始化成功了,但I2S出了问题?(终于找到问题了)
|
|