18. SD卡音乐播放

您所在的位置:网站首页 电脑如何源码输出音频文件格式 18. SD卡音乐播放

18. SD卡音乐播放

2024-07-13 15:22:23| 来源: 网络整理| 查看: 265

18.2.3. 程序设计¶

硬件资源介绍完毕,我们开始实验工程的程序设计。在本小节,我们采用先整体概括,再局部说明的方式对实验工程的各个模块进行讲解。

18.2.3.1. 整体说明¶

根据实验目标可知,实现音乐播放首先需要有SD卡控制模块将SD内存储的音乐读取出来,同时还需要一个控制音频数据播放的模块,当然音乐要想播放出来WM8978控制模块也必不可少。因为SD卡的控制时钟sys_clk与WM8978的控制时钟audio_bclk的频率是不一样的,所以这里我们需要调用一个fifo 来实现跨时钟域的数据传输。完整的模块框图如图 68‑6所示。

图 68‑6 SD卡音乐播放工程整体框图

由图 68‑6所示:其中的sd_ctrl模快与wm8978_ctrl模块在前面章节都有讲解,clk_gen与fifo_data为调用的IP核,sd_play_ctrl模块为SD卡音乐播放控制模块。下面对工程各模块的功能描述做个说明,如表格 68‑2所示。

表格 68‑2 audio_sd_play工程模块简介

模块名称

功能描述

clk_gen

时钟生成模块

fifo_data

fifo数据缓存模块

sd_ctrl

SD卡控制模块

WM8978_ctrl

WM8978音频控制模块

sd_play_ctrl

SD卡音乐播放控制模块

audio_sd_play

音乐播放顶层模块

下面对各模块做详细介绍。

18.2.3.2. 时钟生成模块¶

该模块通过调用PLL IP核来实现,总共输出3个时钟,频率分别为12MHz时钟、50MHz时钟、50MHz(相位偏移90°)。其中12MHz时钟作为wm8978的主时钟,50MHz作为系统时钟,50MHz(相位偏移90°)作为SD卡输入工作时钟。

调用IP核的方法在IP核章节已经做了详细介绍,我们只需按照调用步骤生成这四个时钟即可,在此就不再过多介绍。

18.2.3.3. FIFO数据缓存模块¶

该模块同样通过调用FIFO IP核来实现,由于SD卡的工作时钟与WM8978的工作时钟频率不一致,所以调用时我们需要选择不同时钟进行读写,同时输出fifo内剩余数据量信号以及fifo清空信号。这里我们把fifo的数据位宽设置为16bit,深度设置为1024。具体的调用步骤可参考IP核章节fifo的调用方法。

18.2.3.4. SD卡控制模块¶

我们通过该模块进行对SD卡内的的音乐数据进行读取,该模块在《SD卡数据读写控制》章节已经有了详细的讲解,模块框图如下所示:

图 68‑7 SD卡控制模块框图

因为我们只需要从里面读出音乐,所以我们只需控制其读端口信号即可。该模块我们直接调用即可,不明白的读者可先回到《SD卡数据读写控制》章节进行学习。

18.2.3.5. WM8978音频控制模块¶

模块框图

图 68‑8 WM8978音频控制模块框图

该模块与《WM8978录音与回放》章节模块几乎是一样的,不同的是寄存器的配置,其余模块是相同的。我们只需更改寄存器配置模块的代码即可,下面给出寄存器的配置模块参考代码,如代码清单 68‑1所示。

代码清单 68‑1 SD卡音乐播放WM8978寄存器配置模块参考代码(i2c_reg_cfg.v)

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92module i2c_reg_cfg ( input wire i2c_clk , //系统时钟,由i2c模块传入 input wire sys_rst_n , //系统复位,低有效 input wire cfg_end , //单个寄存器配置完成 output reg cfg_start , //单个寄存器配置触发信号 output wire [15:0] cfg_data , //寄存器地址7bit+数据9bit output reg cfg_done //寄存器配置完成 ); //// //\* Parameter and Internal Signal \// //// //parameter define parameter REG_NUM = 6'd15 ; //总共需要配置的寄存器个数 parameter CNT_WAIT_MAX = 10'd1000 ; //上电等待1ms后开始配置寄存器 parameter LOUT1VOL = 6'd30 ; //耳机左声道音量设置(0~63) parameter ROUT1VOL = 6'd30 ; //耳机右声道音量设置(0~63) parameter SPK_LOUT2VOL = 6'd50 ; //扬声器左声道音量设置(0~63) parameter SPK_ROUT2VOL = 6'd50 ; //扬声器右声道音量设置(0~63) //wire define wire [15:0] cfg_data_reg[REG_NUM-1:0]; //寄存器配置数据暂存 //reg define reg [9:0] cnt_wait ; //寄存器配置上电等待计数器 reg [5:0] reg_num ; //配置寄存器个数 //// //\* Main Code \// //// //cnt_wait:寄存器配置等待计数器 always@(posedge i2c_clk or negedge sys_rst_n) if(sys_rst_n == 1'b0) cnt_wait


【本文地址】

公司简介

联系我们

今日新闻


点击排行

实验室常用的仪器、试剂和
说到实验室常用到的东西,主要就分为仪器、试剂和耗
不用再找了,全球10大实验
01、赛默飞世尔科技(热电)Thermo Fisher Scientif
三代水柜的量产巅峰T-72坦
作者:寞寒最近,西边闹腾挺大,本来小寞以为忙完这
通风柜跟实验室通风系统有
说到通风柜跟实验室通风,不少人都纠结二者到底是不
集消毒杀菌、烘干收纳为一
厨房是家里细菌较多的地方,潮湿的环境、没有完全密
实验室设备之全钢实验台如
全钢实验台是实验室家具中较为重要的家具之一,很多

推荐新闻


图片新闻

实验室药品柜的特性有哪些
实验室药品柜是实验室家具的重要组成部分之一,主要
小学科学实验中有哪些教学
计算机 计算器 一般 打孔器 打气筒 仪器车 显微镜
实验室各种仪器原理动图讲
1.紫外分光光谱UV分析原理:吸收紫外光能量,引起分
高中化学常见仪器及实验装
1、可加热仪器:2、计量仪器:(1)仪器A的名称:量
微生物操作主要设备和器具
今天盘点一下微生物操作主要设备和器具,别嫌我啰嗦
浅谈通风柜使用基本常识
 众所周知,通风柜功能中最主要的就是排气功能。在

专题文章

    CopyRight 2018-2019 实验室设备网 版权所有 win10的实时保护怎么永久关闭