火柴棍

 找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
热搜: 活动 交友 discuz
火柴棍 门户 博客 ESP8266 查看内容

ESP8266分析官方的MP3例程v1.0

2020-6-20 23:31| 发布者: admin| 查看: 216| 评论: 0|原作者: 火柴棍

摘要: 一、主程序初始化SPI RAM FIFO,如果开了宏定义FAKE_SPI_BUFF,则此函数无实际作用,否则初始化HSPI口,连接SPI RAM;创建wifi连接任务,将路由器的SSID和password编译在程序中;wifi连接任务建立读取网络音频码流的 ...

一、主程序

  1. 初始化SPI RAM FIFO,如果开了宏定义FAKE_SPI_BUFF,则此函数无实际作用,否则初始化HSPI口,连接SPI RAM;
  2. 创建wifi连接任务,将路由器的SSID和password编译在程序中;
  3. wifi连接任务建立读取网络音频码流的任务;
  4. 网络音频码流读取任务与音频服务器建立HTTP连接;
  5. 读取服务器返回的数据,每次最多读取64字节;
  6. 将读取到的数据写入SPI RAM FIFO,如果没有外部SPI RAM,就放在内部FIFO;
  7. 判断MAD任务是否建立,且SPI RAM FIFO中剩余的空间长度小于FIFO总尺寸的一半;
  8. 满足7中的条件,则建立MP3码流解码任务,将任务建立标志置位,否则不做操作;
  9. 判断网络音频码流读取次数是否是256的整数倍,如果是,则打印SPI RAM FIFO已填充的长度…;
  10. 回到第五步。

二、SPI RAM FIFO操作

  1. 初始化Spi Ram Fifo,spiRamFifoInit()
  2. 读取位置记录)
  3. 写入位置记录)
  4. 填充的数据记录)
  5. 写入数据时剩余空间不足计数)
  6. 读取数据时剩余数据不足计数)
  7. 创建一个fifo能读的二值信号量
  8. 创建一个fifo能写的二值信号量
  9. 创建一个互斥信号量,用于对变量操作的保护
  10. 配置SPI RAM的硬件模块
  11. 返回SPI RAM测试的结果
  12. 写入Spi Ram Fifo,spiRamFifoWrite(char *buff, int len)

首先判断待写入的数据长度是否大于SPI一次能操作的长度,如果是,则将写入的长度改为一次性能操作的长度,分包写入;

判断需要写入的数据长度是否大于fifo当前写入位置到fifo末尾的长度,如果是,则将写入的长度改为fifo当前写入位置到fifo末尾的长度,分包写入;

获取对fifo的操作的权限;

判读fifo剩余空间是否小于待写入的长度,如果是,则将fifoOvfCnt++,归还fifo的操作权限,等待能写的信号量;否则将数据写入fifo,归还fifo的操作权限,发送能读取的信号量。

  1. 读取Spi Ram Fifo,spiRamFifoRead(char *buff, int len)

首先判断待读取的数据长度是否大于SPI一次能操作的长度,如果是,则将读取的长度改为一次性能操作的长度,分包读取;

判断需要读取的数据长度是否大于fifo当前读取位置到fifo末尾的长度,如果是,则将读取的长度改为fifo当前读取位置到fifo末尾的长度,分包读取;

获取对fifo的操作的权限;

判断fifo里的数据长度是否小于需要读取的长度,如果是,则将fifoUdrCnt++,归还fifo的操作权限,继续判断,如果当前fifo里的数据长度低于fifo的水位线标志,则等待一个能读取的信号量;否则从fifo中读出数据,归还fifo的操作权限,送能写入的信号量。

  1. 获取fifo中当前剩余的数据长度,int spiRamFifoFill()

获取fifo的操作权限;

将fifoFill赋值给返回值;

归还fifo的操作权限;

返回获取值。

  1. 获取fifo中当前剩余空间长度,int spiRamFifoFree()

调用spiRamFifoFill()获取当前剩余数据长度;

返回SPIRAMSIZE减去fifo当前剩余数据长度的值。


ESP8266_MP3_DECODER-master.zip


路过

雷人

握手

鲜花

鸡蛋

最新评论

QQ|Archiver|手机版|小黑屋|火柴棍 ( 蜀ICP备16031705号-1 )

GMT+8, 2023-2-1 12:58 , Processed in 0.155871 second(s), 15 queries .

Powered by Discuz! X3.4

Copyright © 2001-2020, Tencent Cloud.

返回顶部