基于 DSP-dMAX 的嵌入式 FIFO 数据传输系统设计
基地址和空间大小用于规划出一段内存空间,该内存空间用于FIFO设备,并被FIFO设备保护起来,使得其他设备和程序不能访问该空间。为了便于操作方便,空间大小一般为2的整数次幂,但不做要求。具体到C6727B型号的DSP,空间大小最大为1M个元素,元素大小可以是8位、16位或者32位数据,不能为其他类型的数据。基地址可以为内存空间的任何一个地址,同样为了操作方便,一般为空间大小的边界点。例如,8个元素的FIFO,其基地址一般为XXXXX000b,也就是地址的低3位为0,基地址就肯定为8的整数次。同样,64个元素的FIFO,其低6位为0。基地址和空间大小的特殊要求避免访问时的地址跨越多页问题,可以提高FIFO的访问速度。
空标志和满标志用于表示FIFO的存储状态。读指针和写指针用于表示读写的当前地址。错误标志表示对FIFO的错误操作。当FIFO处于满标志情况下仍然写FIFO,或者FIFO处于空标志情况下仍然读FIFO,FIFO都将终止当前操作,并将错误标志置位。
FIFO的写操作只有一种工作方式,即每次写一个新的数据,写指针加1,直到写满。而FIFO读操作有两种工作方式,分别为标准操作和多阶延迟(Multi-tap Delay Transfer)操作。标准操作和写操作一样。多阶延迟操作一般用于滤波处理,当需要对输入信号进行滤波处理时候,每次希望从FIFO读取一段窗口的数据,进行滤波处理,数据窗口仍然只移动一个数据。在标准操作情况下,如果读取一段窗口的数据,FIFO则将该段窗口的数据全部弹出。多阶延迟操作则只弹出一个数据。该操作方法对语音或者AD采样数据的平滑、FIR等滤波非常适用。需要注意的是,多阶延迟操作的数据窗大小需要设置,如果FIFO存储的数据个数小于数据窗,FIFO则终止当前操作,并给出错误标志。
系统硬件结构
C6727B和其他DSP有一个较大的区别,就是C6727B不再提供专门的外部中断引脚,而是采用GPIO引脚和dMAX配合使用,通过寄存器的设置将GPIO引脚配置成外部中断引脚。本文为了实现FIFO的实时操作,一旦外设向FIFO写入数据,即发出中断信号到DSP的CPU,通知CPU读取数据。为此,需要使用1个外部中断引脚,将C6727B的音频串口的AXR[8]配置成通用的GPIO引脚,并在dMAX中设置成中断引脚。此时需要将音频串口的CONFIGMACSP0寄存器设置为0x0001,如图3所示。此时音频串口不能再作为普通的音频口使用,而是配置成IO接口。
图3 中断功能设置框图
从图3中可以看出,配置好音频串口后,一旦AXR[8]引脚有上升沿到,则McASP0激活dMAX的事件26,向CPU发送内部中断13。McASP的与中断相关的寄存器配置是实现以上方案的重点。使用PFUNC寄存器将其配置成通用IO引脚;PDIR寄存器控制IO引脚的方向;如果是输出引脚则由POUT引脚输出高低电平,如果是输入引脚,则由PDIN寄存器读出该引脚的状态;此外,可以使用PDCLR和PSET寄存器清除或者设置输出引脚的状态。
评论