您的位置 首页 软件

S3C2440-IIS放音

S3C2440A的Inter-ICSound(IIS)总线接口作为一个编解码接口连接外部816位立体声音频解码IC用于迷你碟机和可携式应用。IIS总线接口支持IIS

S3C2440A的Inter-IC Sound(IIS)总线接口作为一个编解码接口衔接外部8/16位立体声音频解码IC用于迷你碟机和可携式运用。IIS总线接口支撑IIS总线数据格局和MSB-justified数据格局。该接口对FIFO的拜访采用了DMA形式替代了中止。它能够在同一时间承受和发送数据。S3C2440一共有5个引脚用于IIS:IISDO,IISDI,IISSCLK,IISLRCK和CDCLK。前两个信号用于数字音频信号的输入输出,别的3个引脚都与音频信号的频率有关,可见要用好IIS,就要把信号频率设置正确。IISSCLK为串行时钟,每一个时钟信号传送一位音频信号,因而IISSCLK的频率=声道数*采样频率*采样位数,如采样频率为44.1kHz,采样的位数为16位,声道数2个(左,右两个声道),则IISSCLK的频率=32fs=1411.2kHz。IISLRCK为帧时钟,用于切换左右声道,如IISLRCK为高电平表明正在传输的是左声道数据,为低表明传输的是右声道数据。因而IISLRCK的频率应该正好等于采样频率。因为IIS只担任数字音频信号的传输,而要真实完结音频信号的放录还需要额定的处理芯片(在这里咱们运用UDA1341),CDCLK为该芯片供给体系同步时钟,即编解码时钟,首要用于音频的A/D,D/A采样时的采样时钟,一般CDCLK为256fs或384fs。UDA1341运用L3接口,经过L3接口能够完结UDA1341和S3C2440操控信息的传递。L3指3根线,L3DATA(数据线,用于传输数据),L3MODE(形式线,用于挑选形式),L3CLOCK(时钟线,用于传输时钟)。先传输地址形式数据,再传输数据形式数据。L3MODE为低时是地址形式,L3MODE为高时是数据传输形式。L3DATA和L3CLOCK相互作用,完结8位数据的传输,传输的次序是先低位数据,再高位数据。地址形式用于挑选设备和界说方针寄存器,在这种形式下,8位数据的意义是:高6位是设备地址(UDA1341的地址为000101),低两位是后边数据形式的类型(00:DATA0,01:DATA1,10:STATUS)。

下面这个程序完结从WAV音频文件中提取出数组。

#include <stdio.h>
#include<stdlib.h>
#include <string.h>
#include <memory.h>
int main(){
FILE *stream, *fp;
unsigned char *music;
char ch[5];
int start, end, num, t, i, j, r;
if(((stream = fopen(“D:\music.wav”,”rb”)) == NULL) || ((fp = fopen(“D:\music.h”,”wb+”)) == NULL)){
printf(“%s”,”cannot open output file.”);
return 1;
}
fseek(stream,0,SEEK_SET);
start = ftell(stream); //取得文件的开端地址
fseek(stream,0,SEEK_END);
end = ftell(stream); //取得文件的完毕地址
fseek(stream,0,SEEK_SET);
music = (unsigned char *)malloc(end-start); //动态分配一个buffer
fwrite(“unsigned char music[“,1,20,fp);
fwrite(“]={“,1,3,fp);
fwrite(“”, 2, 1, fp);
num = (end – start – 0x2c) / 16; //m每行16个
t = (end – start – 0x2c) % 16;
fread(music, 1, end – start, stream);
for(i = 0; i < num; i++){
for(j = 0; j < 16; j++){
memset(ch,0,5);
r = (int)music[i*16+j+0x2c]; //从0x2c开端是音频数据
r &= 0xff;
sprintf(ch,”0x%02x”,r); //先转化成必定格局
fwrite(ch,sizeof(ch),1,fp);
fwrite(“,”,1,1,fp);
}
fwrite(“”,1,2,fp);
}
for(i = 0; i < t; i++){
memset(ch,0,5);
r = (int)music[i*16+j+0x2c];
r &= 0xff;
sprintf(ch,”0x%02x”,r);
fwrite(ch,sizeof(ch),1,fp);
if(i != t-1)
fwrite(“,”,1,1,fp);
}
fwrite(“};”,1,2,fp);
fclose(stream);
fclose(fp);
system(“pause”);
return 0;
}

声明:本文内容来自网络转载或用户投稿,文章版权归原作者和原出处所有。文中观点,不代表本站立场。若有侵权请联系本站删除(kf@86ic.com)https://www.86ic.net/qianrushi/ruanjian/254739.html

为您推荐

联系我们

联系我们

在线咨询: QQ交谈

邮箱: kf@86ic.com

关注微信
微信扫一扫关注我们

微信扫一扫关注我们

返回顶部