⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 sd_audio_aic23.c

📁 SD卡和AIC23数字音频输出实验, FreeDev Audio Dsp Board采用了TI公司的TVL320AIC23 1、控制接口使用I2C
💻 C
字号:
/**************************************************************程序说明      :SD卡和AIC23数字音频输出实验类    型      :Nios II作    者      :柳军胜公    司      :杭州自由电子科技            :http://www.freefpga.com电   话       :0571-85084089修    改      :日期时间      :20060905说    明      :            FreeDev Audio Dsp Board采用了TI公司的TVL320AIC23            1、控制接口使用I2C,Quartus中将CS置低(器件地址0011010)。            2、数字音频接口使用了组件FreeDev_aic23,有三种测试和应用              模式,中断结合DMA方式能在NIOS II中采集和发送数据。中断信号              产生于模块中FIFO缓冲区的半满信号,读取数据端口自动清除中断              请求信号。            3、I2C IP 和 FreeDev_aic23 IP分别在Quartus 工程目录中            4、SD卡读写通过SD_DAT0、SD_CLK、SD_CMD三个PIO信号线用软件            控制时序。            5、该范例读SD卡数据,通过DMA将Buffer数据送到FreeDev_aic23的            FIFO中实现数据播放。            6、SD卡中的数据必须是以48K*16bit保存的采样数据。数据可以通过            SD读卡器写入。**************************************************************/#include <stdio.h>#include <system.h>#include <io.h>#include <alt_types.h>#include <sys/alt_irq.h>#include <sys/alt_dma.h>#include "fast_dma.h"#include <altera_avalon_dma_regs.h>#include "basic_io.h"#include "SD_Card.h"#include <math.h>extern void *dma_base;extern int gControl_bits;int main(){  int iRet;  unsigned char ch;  unsigned int vcode,cc;  static int irq_flag=0;    UINT32 j=720;  BYTE Buffer[512]={0};    // 初始化SD卡  SD_card_init();   // 初始化DMA参数  iRet=fast_dma_init(    DMA_BASE,    4,    Buffer,    __IO_CALC_ADDRESS_NATIVE(FREEDEV_AIC23_0_BASE, 0x07),    512,    ALTERA_AVALON_DMA_CONTROL_RCON_MSK|ALTERA_AVALON_DMA_CONTROL_WCON_MSK);     //初始化I2C控制器  init_i2c(FREEDEV_I2C_0_BASE);    //复位音频处理芯片  aic23_reset();    //复位FreeDev_aic23外设  IOWR(FREEDEV_AIC23_0_BASE,0x01,01);  IOWR(FREEDEV_AIC23_0_BASE,0x01,00);    //TLV320AIC23常规工作参数设置 48K采样率  aic23_normal_setup();      //FreeDev_aic接口模块控制切换到DMA模式  //DMA模式说明:FreeDev_aic模块通过TLV320AIC23的串行数字接口接收数据,变换成32BIT左右  //声道数据,经异步FIFO送到Avalone接口端,供Nios II DMA方式读取数据。Nios II输出数据经  //Avalone接口写入FIFO传输到并串转换模块,由TLV320AIC23串行数字接口输出。  IOWR(FREEDEV_AIC23_0_BASE,0x00,0x0201);    printf("程序进入循环DMA,退出需要重起或中断程序\n");  while(1)  {    // 读SD卡数据    SD_read_lba(Buffer,j,1);        // 启动DMA传输    IOWR_ALTERA_AVALON_DMA_LENGTH(dma_base,512);    IOWR_ALTERA_AVALON_DMA_CONTROL(dma_base, gControl_bits|ALTERA_AVALON_DMA_CONTROL_GO_MSK);        // 等待DMA传输完毕    do{      //cc++;      vcode=IORD_ALTERA_AVALON_DMA_STATUS(dma_base);      if((vcode & ALTERA_AVALON_DMA_STATUS_DONE_MSK))        break;       }while(1);             j++;  }      return 0; }

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -