音频模块知识总结

文章介绍了GBK编码中不同点阵大小的概念,如12×12、16×16、24×24,以及它们在不同设备上的应用。此外,还涉及到Unicode到GBK的转换表,硬盘存储的字节和扇区关系,时间戳的定义,ping-pongbuffer在数据传输中的优化作用,以及SAI全双工通信在音频系统中的应用和回调函数的使用方式。
摘要由CSDN通过智能技术生成

1.GBK12、16、24是指什么

  GBK12、GBK16、GBK24是指不同的字体点阵大小,也就是字体的显示大小。在GBK编码中,一个汉字通常是由多个点阵组成的,其中点阵的大小就是字体的点阵大小。具体来说:
  GBK12:指每个汉字由12×12个点阵组成,是最小的点阵大小,显示效果较差,一般用于小屏幕设备或低分辨率的显示器。
  GBK16:指每个汉字由16×16个点阵组成,是比较常见的点阵大小,显示效果较好,适用于大部分的显示设备。
  GBK24:指每个汉字由24×24个点阵组成,是最大的点阵大小,显示效果最好,但占用的存储空间也最大,一般用于高分辨率的显示器或专业的印刷设备。

2.unigbk表

  “unigbk” 一词不是一个标准的术语,可能是指将 Unicode 编码转换为 GBK 编码的转换表。Unicode 是一种国际标准编码,其中包含了世界上几乎所有字符的编码,而 GBK 编码是一种汉字编码,主要用于中文字符的表示。

3.字节和扇区的关系

  字节是存储数据的最小单位,而扇区是硬盘存储的最小单位。一个字节是8位二进制数,可以存储一个字符或一个数字,是计算机存储中的基本单位。在硬盘上,数据被组织成一个个扇区,每个扇区通常包含512个字节(有些现代硬盘可能是4096字节),是硬盘存储的最小单位。当需要读取或写入数据时,操作系统会按照扇区为单位进行操作。

4.时间戳的定义

  “时间戳是指格林威治时间1970年01月01日00时00分00秒(北京时间1970年01月01日08时00分00秒)起至现在的总秒数。通俗的讲, 时间戳是一份能够表示一份数据在一个特定时间点已经存在的完整的可验证的数据。

5.ping-pong buffer structure

  所谓ping-pong buffer,也就是定义两个buffer,当有数据进来的时候,负责写入buffer的进程就寻找第一个没有被占用而且可写的buffer,进行写入,写好之后,将占用flag释放,同时设置一个flag提示此buffer已经可读,然后再接下去找另外一个可写的buffer,写入新的数据。而读入的进程也是一直对buffer状态进行检测,一旦发现没有被占用,而且已经可以被读,就把这个buffer的数据取出来,然后标志为可写。

  pingpong是一种数据缓存的手段,通过pingpong操作可以提高数据传输的效率。在两个模块间交换数据时,上一级处理的结果不能马上被下一级所处理完成,这样上一级必须等待下一级处理完成才可以送新的数据,这样就会对性能产生很大的损失。引入pingpong后我们可以不去等待下一级处理结束,而是将结果保存在pong路的缓存中,pong路的数据准备好的时刻,ping路的数据也处理完毕(下一级),然后无需等待直接处理pong路数据,上一级也无需等待,转而将结果存储在ping路。这样便提高了处理效率。

  pingpang的主要作用就是使用多个低速的数据预处理模块处理高速的输入数据流。这样做可以提高系统的数据吞吐量(如果不使用乒乓的话数据预处理模块会成为设计中限制系统数据吞吐量的瓶颈),同时增加了数据缓冲延迟。

6.SAI的全双工通信

  SAI_A 子模块必须工作在主模式,循环发送 0X0000,以提供 LRCK、SCLK 和 MCLK 等时钟信号,SAI_B 子模块则工作在从模式,读取 ASDDAT输出的数据流(SAI_SD_B),从而实现录音功能。

注:
  LRCK(Left/Right Clock)是用于标识左右声道的时钟信号,SCLK(Serial Clock)是用于传输音频数据的时钟信号,而MCLK(Master Clock)则是主时钟信号,用于驱动整个音频系统的时钟;ASDDAT是指音频数据流(Audio Data)。

7." void (*sai_rx_callback)(u16 data); "的好处

  这段代码声明了一个指向函数的指针变量sai_rx_callback,该函数的返回类型为void,参数列表中包含一个u16类型的参数data。

  这意味着,sai_rx_callback可以指向一个函数,该函数接受一个u16类型的参数并返回void类型。在程序运行时,可以通过调用sai_rx_callback来调用该函数。

//如果有一个名为my_callback的函数,它接受一个u16类型的参数,
//并在函数内部执行某些操作,那么可以将sai_rx_callback指向my_callback函数:
void my_callback(u16 data) {
    // 执行一些操作
}

// 将sai_rx_callback指向my_callback函数
sai_rx_callback = my_callback;

//然后,在程序的其他部分可以通过调用sai_rx_callback来调用my_callback函数,
//并将u16类型的参数传递给它:
u16 my_data = 0x1234;
sai_rx_callback(my_data);
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值