|
在设置McASP过程中遇到一个难解的问题。在XFMT和RFMT寄存器中有XBUSEL和RBUSEL,它们为0时通过dMAX port来访问McASP XRBUF,为1时通过peripheral configuration bus address来访问XRBUF。
简 单地说,如果XBUSEL和RBUSEL为0,则所有的XRBUF寄存器共享一个访问地址,例如C6727的McASP0的这个地址为 0x54000000。如果XBUSEL和RBUSEL为1则通过相应的寄存器XBUFn和RBUFn来访问。也就说每个XRBUF都有一个单独的访问地 址。采用dMAX port访问McASP有个好处,McASP会自动地遍历所有激活的serializers。例如如果DMA需要从serializers 0,4,5,7获取数据,则只需要设置0,4,5,7为输入并激活它们,那么DMA只从地址0x54000000复制,也可以同时获得 serializers 0,4,5,7的数据。这样,dMAX的源地址或者目标地址就可以保持不变了。
这次移植C6713的程序到C6727 时,却怎么也不能通过dMAX port来输入或输出数据,此问题困扰多日,最终没有解决,只好把XBUSEL和RBUSEL设置为1,然后通过相应的寄存器来传递数据了。幸好这次最多 只用到2个输入和一个输出,就算修改dMAX的源地址也不困难。但终究留下些小小的遗憾,真希望日后有机会把这个问题弄明白。
|