[资料分享] 关于TMS320C674x--McASP的学习

Aguilera   2017-10-16 22:12 楼主
McASP由发送和接收两部分组成,两部分即可以同步工作也可以分开独立工作,使用不同的时钟源,同步帧和传输模式,可以支持发送和接收的速率不相同。
        使用McASP时应该考虑到事项包括
时钟
数据引脚
数据格式
数据传输
时钟是内部产生还是外部产生的?频率是多少
是多通道音频串行端口McASP还是通用输入/输出口GPIO
是否是内部数字表示整数,Q31分数
内部是CPU还是DMA
时钟极性
是输入口还是输出口
是I2S还是DIT
外部是TDM还是突发
帧同步信号是内部产生的还是外部产生的,频率多少?
数据延迟(0,1或2位)?左对齐还是右对齐
总线是外围配置总线还是dMAX端口
帧同步信号的极性是什么
位序MSB在前还是LSB在前
帧同步信号的宽度为多少
填充(如果要填充,那么怎么进行填充)
发送和接收是同步的还是异步的
单元大小如何?是否循环?是否屏蔽?
       McASP的三种传输模式:突发传输模式,TDM和DIT
       McASP的时钟发生器的时钟源可以源自:
·内部     将内部时钟源通过两个分频器产生时钟;
·外部     直接由ACLKX/R引脚输入;
·混合     一个外部高频时钟输入到McASP的AHCLKX/R一脚,然后被分频器进行分频。
       串行器用来负责将串行数据移入或者移出McASP。
       所有的发送器使用的是同一个数据化格式单元,所以同一时间McASP只能支持一种发送格式。同样,McASP的接收部分,也是一次只支持一种接收格式,并且这种格式对所有接收串行器都适用。然而同一时间,McASP的接收和发送格式可以不相同。
即使McASP引脚被用作串行通道功能(非GPIO),也必须正确设置McASP GPIO寄存器PFUNC和PDIR,确定其功能和方向。不管管脚的功能是什么,PDIN寄存器通常反映了引脚的状态。
       一旦一个时钟引脚被配置为输出,时钟引脚就开始以时钟控制寄存器所定义的频率输出时钟信号,因此必须确保在将引脚设置为输出前对时钟控制寄存器进行正确的配置,这一要求对帧同步信号引脚也同样适用。
       在对GBLCTL进行配置的时候需要进行回读操作,以保证操作的成功。因为发送器和接收器分别以各自的时钟运行,它们一般比DSP芯片内部的总线时钟慢几十到几百倍,因此在DSP向GBLCTL写数据,到McASP真正识别到这一写操作之间需要好多个时钟周期。ACLKX/R输入的时钟信号决定的是McASP数据发送的速率,并不是McASP工作时的时钟频率。
       TDM模式中所有的数据为AXR[n]都是与时钟同步,同时数据传输是连续的,数据单元之间没有延迟,单元N的最后一位后面紧跟着下一单元的第一位。同时帧同步信号可能会相对于第一个单元的第一位有0,1或者2个周期的延迟。
       一般通过DMA端口来访问McASP的XRBUF寄存器,通过DMA端口,DMA/CPU可以仅仅通过一个地址来对所有的串行器服务,也就是CPU/DMA可以通过DMA端口按照升序的顺序循环地对每个被使能的接收/发送通道进行写/读取操作。如有4个通道(1,3,5,6)被使能为接收通道,则读取的时候需要进行4次读取操作,得到的数据分别为通道1,3,5,6的数据。与DMA端口访问不同,通过外围配置总线访问访问XRBUF时,CPU/DMA必须提供每次访问的准确XBUFn或者RBUFn地址。推荐使用DMA端口对McASP进行访问。
       当数据从XBUF移入XRSR时,XDATA被置位,表示可以再次向XBUF写数据,当DSP向所有被配置为发送的串行器写入数据或者向XDATA写入1时,该标志为被清除。当XDATA被置位时,有一个DMA事件和中断会产生。RDATA位与此相似。
       对于McASP来说,DMA事件的产生和CPU中断产生之间是有区别的,DMA事件是在数据准备就绪后自动产生的,不需要对寄存器进行设置,而CPU中断的产生需要将XINTCTL/RINTCTL寄存器中的中断使能。
       编程的时候可以通过增加活跃的时隙数来提高数据的传输速度,不过该方法只是适用于TDM模式,不适于突发模式,在TDM模式下一个帧同步信号会触发多个时隙,而在突发模式下,一个帧同步信号只会触发一个时隙的传输。在更改时隙数的时候既要改X/RTDM(Transmit/Receive TDM Time Slot Register)中激活的时隙,也要改AFSRCTL/AFSXCTL(Receive/Transmit Frame Sync ControlRegister)中的TDM模式的时隙数X/RMOD。
       当发送器发生欠载的时候,XUNDRN标志就会被置位,一旦被置位,XUNDRN会一直保持这一置位状态,直到DSP向XUNDRN写入一个1来清除XUNDRN位。相应的,接收器发生超载的时候,对ROVRN标志位的操作也是一样的。
       数字回环模式(DLB),即发送串行器的输出端连接到了接收串行器的输入端,可以利用此模式来检测McASP的设置是否正确。数字回送模式仅用于TDM模式,不适用于DIT和突发模式。在数字回环模式下发发送器和接收器共用发送器的发送时钟和帧同步信号。
       McASP有两种复位模式,即软件复位和硬件复位,当进行软件复位的时候必须有有效的时钟提供给McASP,而硬件复位可以通过PSC模块实现。
       当CPU向XBUF中写入数据时,则会使得XSTAT寄存器中的XDATA位置位,同时产生一个帧同步信号,将写入的数据发送出去,接收端在接收到帧同步信号时开始接收数据。
McASP触发EDMA的过程:
        当对McASP初始化的过程中,将McASP中相应的串行器带出复位状态后(GBLCTL寄存器中的XSRCLR位从0变到1),会使得传输状态寄存器XSTAT中的XDATA位从0变为1,即表示发送串行器的XBUF中内容为空,需要写入数据,该变化会触发一个EDMA事件(也可以触发中断事件,如果中断使能的话),使得EDMA对XBUF进行写操作,并且每次XBUF的数据被移入XRSR后XDATA都会置位,触发EDMA数据传输,直到EDMA中的计数器达到0。
       若用EDMA来服务与McASP,则每次McASP发送完数据或者接收完数据后便会产生一个EDMA事件,告诉EDMA将数据移入或者移出McASP。当发送McASP所对应的EDMA通道对应的源地址的数据发送完后,则EDMA对于McASP数据发送完后产生的EDMA事件不反映,从而使得McASP进入停止状态。
       程序调试过程中,不能通过McASP的XBUF或者RBUF寄存器来查看数据是否发送或者接收,只能将数据移出该寄存器后再查看,不然直接查看XBUF或者RBUF时,看到的数据都将是0。

回复评论

暂无评论,赶紧抢沙发吧
电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 京公网安备 11010802033920号
    写回复