📄 sd_audio_aic23.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 + -