基于DSP的OFDM系统的设计
发送端
1. BPSK编码和插入数据(数据个数由56变为64个)
2. 作N=64的IFFT变换,将频域的数据变到时域。
3. 加入循环前缀(数据个数由64个变为80个),防止多径延迟。
4. 通过DMA将数据送到Mcbsp发给FPGA。
接收端
5. 由Mcbsp接到数据通过DMA存入数据空间(此时数据应该与第四步结束时相同)。
6. 去掉循环前缀(数据个数又由80个变为64个,此时数据应该与第三步结束时相同)
7. 作64点FFT变换(此时结果应该与第一步结束时相同)
8. 去掉插入的数据,反映射(数据个数由64个变为56个,此时结果应该与第一步开始时相同)并解码。
2.3 DSP串口的接发配置和DMA的设置
系统实现关键在FFT的实现和DSP串口的接发配置和DMA的设置。这里详细说明串口和DMA的设计方法。
系统用Mcbsp1发送数据,用Mcbsp2来接收数据,为了不占用过多的CPU资源,用DMA的4通道来传送数据给串口,用5通道来接收数据。对于DMA和Mcbsp的使用主要是寄存器的配置问题,在这些配置当中可以对工作模式等一系列东西进行设置。现分别介绍如下:
对于Mcbsp来说,接收和发送可以配置在一起,采用了DSP自身带有的CSL库函数,它对寄存器的配置是通过结构体来定义的,可以方便的修改成自己所需要的模式。
在进行将DSP片内数据地址赋DMA中的地址时要注意,DMA中数据是以byte为单位存储的,存储的最小数据单位上byte,而片内存储区间是以word为单位的,所以将地址交过去时,要将地址右依、移1位。如:
srcAddrHi = (Uint16)(((Uint32)(dmaXmtConfig.dmacssal)) >> 15) & 0xFFFFu;
srcAddrLo = (Uint16)(((Uint32)(dmaXmtConfig.dmacssal)) << 1) & 0xFFFFu;
dstAddrHi = (Uint16)(((Uint32)(dmaXmtConfig.dmacdsal)) >> 15) &0xFFFFu;
dstAddrLo = (Uint16)(((Uint32)(dmaXmtConfig.dmacdsal)) << 1) & 0xFFFFu;