Chinaunix首页 | 论坛 | 博客
  • 博客访问: 965675
  • 博文数量: 175
  • 博客积分: 2788
  • 博客等级: 少校
  • 技术积分: 2060
  • 用 户 组: 普通用户
  • 注册时间: 2008-07-25 12:25
个人简介

知之者不如好之,好之者不如乐之

文章分类

全部博文(175)

文章存档

2016年(1)

2015年(20)

2014年(8)

2013年(68)

2012年(16)

2011年(35)

2010年(1)

2008年(26)

分类: 其他平台

2015-01-01 11:41:50

原文:

I2S的时钟设可以基于系统时钟或者PLL3的输出,使用PLL3可以利用PLL3MUL进行更多的调节

由于主板设计音频模块需要MCK主时钟的输出,根据参考手册中的公式,可以反向计算I2SDIV和PLL3MUL值的组合,以达到更精确的目的

参考手册中的16位数据公式与实际芯片不符,参考32位公式,更正为
FS = I2SxCLK / [(16*2)*((2*I2SDIV)+ODD)*4)]
I2SDIV = (I2SxCLK / FS*(16*2*4) - ODD) / 2

I2SxCLK 是PLL3的输出时钟

PLL3MUL为16x,I2SDIV为6,ODD为1时,FS输出为最近似48000Hz的48077Hz

rcc->cfgr2 |= 0x0003E744; // I2S2=PLL3 PLL3=16x PREDIV1SRC=PLL2 PLL2MUL=x9 PREDIV2=/5 PREDEV1=/5
spi2->i2spr = 0x0306; // 48000khz mck=1 odd=0 div=0x02

I2S的16位设置为SPI输出双字节为一个声道的一帧,左右声道互相交替

while ((spi2->sr & 0x2)==0x0);
spi2->dr = lch[ii];
while ((spi2->sr & 0x2)==0x0);
spi2->dr = rch[ii];

标准音频率为440Hz,数据缓冲的帧数为48000/440=111

生成4种波形
正弦波 waveform_gen_sine
三角波 waveform_gen_triangle
锯齿波 waveform_gen_sawtooth
直方波 waveform_gen_square

词条有波形的试音,可以用于验证程序结果
阅读(5669) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~