嵌入式开发者社区

标题: MCASP自环配置。 [打印本页]

作者: wapdasta    时间: 2018-11-7 13:28
标题: MCASP自环配置。
我项目上用OMAPL138的板子MCASP的引脚都是链接的FPGA,所以在FPGA这端设置的MCASP自环。把axr0接收到的通过axr1发回去。
部分代码如下
input mcasp_afsx,
& c7 j: U4 r$ P& p' M5 t( Dinput mcasp_ahclkx,6 s. Z8 r: a* ], S7 T; X) C
input mcasp_aclkx,( R; @% `: c, @& ?
input axr0,' n. A- }. [+ E
( s. w: C7 P9 g5 A/ Y5 ]3 p6 M
output mcasp_afsr,8 u' i- j  v% c
output mcasp_ahclkr,4 g- [3 j4 `$ m) L2 c% z  w
output mcasp_aclkr,
" X% N7 `% Z6 D" Y& H7 E( toutput axr1,1 |# p  P5 ^1 P" A! p
assign mcasp_afsr = mcasp_afsx;
$ S; F$ o9 p" S9 j2 H+ @# x0 m( d$ massign mcasp_aclkr = mcasp_aclkx;( s  k4 L: M- a" m
assign mcasp_ahclkr = mcasp_ahclkx;
0 m; l% O! Y) i, t/ e6 rassign axr1 = axr0;

8 u5 a4 R6 w- g% k% F2 U" [6 U( @( o! O8 y& ~0 C& b- N
在OMAPL138这端,通过axr0接口发固定的数,axr1接收。
在配置MACASP的时候,发送全部取内部时钟,接收全部取外部时钟。
一直循环发送,但是接收不到。在FPGA端也没有看到时钟和信号的波形。
部分代码如下,关于edma3的部分未做变化。
7 }# Z2 F( Z! g% |- D% F3 |) n, i; k
static void McASPI2SConfigure(void)
  ^) g/ _0 L* ^' \5 Z6 q' [/ _{1 B0 T; R! K2 \0 I+ A3 J
McASPRxReset(SOC_MCASP_0_CTRL_REGS);
& b$ x3 Z3 I  {& u0 \' D! ^McASPTxReset(SOC_MCASP_0_CTRL_REGS);
/* Enable the FIFOs for DMA transfer */
: `8 S7 h( _3 l# x& b* D+ pMcASPReadFifoEnable(SOC_MCASP_0_FIFO_REGS, 1, 1);
* J$ S, |1 h- w- VMcASPWriteFifoEnable(SOC_MCASP_0_FIFO_REGS, 1, 1);
/* Set I2S format in the transmitter/receiver format units */
. ^+ F5 y; u) O& D( ]( _McASPRxFmtI2SSet(SOC_MCASP_0_CTRL_REGS, WORD_SIZE, SLOT_SIZE,- o. ~* k3 @, H9 E5 R
MCASP_RX_MODE_DMA);0 E; ]2 v0 c/ ?# Q! m" |
McASPTxFmtI2SSet(SOC_MCASP_0_CTRL_REGS, WORD_SIZE, SLOT_SIZE,& k2 I1 x# P$ ~" M% H
MCASP_TX_MODE_DMA);
/* Configure the frame sync. I2S shall work in TDM format with 2 slots */1 o$ x8 t; Q, j% ^& ?0 i
McASPRxFrameSyncCfg(SOC_MCASP_0_CTRL_REGS, 2, MCASP_RX_FS_WIDTH_WORD,
' H* ]" K. y, {3 q% nMCASP_RX_FS_EXT_BEGIN_ON_FALL_EDGE);
0 f7 Z5 W: L! s, d$ {McASPTxFrameSyncCfg(SOC_MCASP_0_CTRL_REGS, 2, MCASP_TX_FS_WIDTH_WORD, $ Q7 F$ i' ]+ B5 F
MCASP_TX_FS_INT_BEGIN_ON_RIS_EDGE);
/* configure the clock for receiver */
& D) q% b$ o! a( c, P' SMcASPRxClkCfg(SOC_MCASP_0_CTRL_REGS, MCASP_RX_CLK_EXTERNAL, 0, 0);
9 P8 _$ _  V! LMcASPRxClkPolaritySet(SOC_MCASP_0_CTRL_REGS, MCASP_RX_CLK_POL_RIS_EDGE);
4 p# d0 a" P; N* b9 W6 L  xMcASPRxClkCheckConfig(SOC_MCASP_0_CTRL_REGS, MCASP_RX_CLKCHCK_DIV32,
9 u) U. R, f- U( M1 w0x00, 0xFF);
/* configure the clock for transmitter */
; N  Y" y9 k# m4 ^1 E7 Q& FMcASPTxClkCfg(SOC_MCASP_0_CTRL_REGS, MCASP_TX_CLK_INTERNAL, 11, 1);$ L+ y! [3 x4 P# l; V  Z
McASPTxClkPolaritySet(SOC_MCASP_0_CTRL_REGS, MCASP_TX_CLK_POL_FALL_EDGE); 8 F4 |1 h" J+ A5 n
McASPTxClkCheckConfig(SOC_MCASP_0_CTRL_REGS, MCASP_TX_CLKCHCK_DIV32,# y6 k" o3 s. M$ Z2 D+ a( @  ~. W
0x00, 0xFF);
( g# f9 a, X  v- E& I0 J$ R8 r+ W* P" H9 @( ]5 N4 O. a" ]! ^
/* Enable synchronization of RX and TX sections */
, s7 v5 K+ ]( _* {McASPTxRxClkSyncEnable(SOC_MCASP_0_CTRL_REGS);
/* Enable the transmitter/receiver slots. I2S uses 2 slots */
' e1 C* _; [8 u* W# x; e! u2 z- ^McASPRxTimeSlotSet(SOC_MCASP_0_CTRL_REGS, I2S_SLOTS);
! x! f0 A% h2 A- u2 l# ]1 MMcASPTxTimeSlotSet(SOC_MCASP_0_CTRL_REGS, I2S_SLOTS);
/*9 f( S* I/ _+ @) U. e  o  S
** Set the serializers, Currently only one serializer is set as+ |, k- U; i4 y5 H' W# q0 a4 }
** transmitter and one serializer as receiver.  d" ~. w" h) t
*/
' K+ L: t: w3 B6 ~; l3 K+ GMcASPSerializerRxSet(SOC_MCASP_0_CTRL_REGS, MCASP_XSER_RX);
5 F# t0 f) B, _) ^, n7 sMcASPSerializerTxSet(SOC_MCASP_0_CTRL_REGS, MCASP_XSER_TX);
/*3 ?0 J5 o2 D# V* I& M
** Configure the McASP pins # m( C& _$ k+ |+ S5 @! E1 C
** Input - Frame Sync, Clock and Serializer Rx* @  G" S# X, F9 `5 }: B
** Output - Serializer Tx is connected to the input of the codec . R* X& @: {) A9 ~
*/6 o1 \: m' q, N
McASPPinMcASPSet(SOC_MCASP_0_CTRL_REGS, 0xFFFFFFFF);0 R: g5 O" V0 h* V& y
McASPPinDirOutputSet(SOC_MCASP_0_CTRL_REGS,MCASP_PIN_AXR(MCASP_XSER_TX));
8 L7 y, y9 x5 Q( X6 B/ ?1 C4 Q, LMcASPPinDirInputSet(SOC_MCASP_0_CTRL_REGS, MCASP_PIN_AFSX6 s4 \% y* C7 V9 V
| MCASP_PIN_ACLKX' d; y3 r. ]; r
| MCASP_PIN_AHCLKX
* {7 ^+ L$ H6 E( x' @| MCASP_PIN_AXR(MCASP_XSER_RX));
/* Enable error interrupts for McASP */
, G3 [  S2 l  g) _9 J  XMcASPTxIntEnable(SOC_MCASP_0_CTRL_REGS, MCASP_TX_DMAERROR 6 F. s6 D$ M3 B
| MCASP_TX_CLKFAIL
, e7 r4 M8 L) `! w+ ]| MCASP_TX_SYNCERROR$ E0 I7 K4 ~, O' z! l( i9 e
| MCASP_TX_UNDERRUN);
McASPRxIntEnable(SOC_MCASP_0_CTRL_REGS, MCASP_RX_DMAERROR 3 q0 D- d' Q2 q- y. p* Z
| MCASP_RX_CLKFAIL! c' U' @# V3 @5 d
| MCASP_RX_SYNCERROR
! H9 N6 {+ C3 V| MCASP_RX_OVERRUN);) q+ r6 H' ^6 s( T' j
}
static void I2SDataTxRxActivate(void)2 E4 e9 ~+ T' J9 }6 g
{( C& Y" F% Y* s) b% C- P5 x' f
/* Start the clocks */- ^5 y, i3 u; E) G: d: q
McASPRxClkStart(SOC_MCASP_0_CTRL_REGS, MCASP_RX_CLK_EXTERNAL);1 G' B: v' F: X3 ^
McASPTxClkStart(SOC_MCASP_0_CTRL_REGS, MCASP_TX_CLK_INTERNAL);
/* Enable EDMA for the transfer */
/ n( @  [4 r3 h4 o2 REDMA3EnableTransfer(SOC_EDMA30CC_0_REGS, EDMA3_CHA_MCASP0_RX,
+ W5 ^2 F  j$ d1 ]EDMA3_TRIG_MODE_EVENT);
7 o7 p0 w9 D2 C& e+ ?! q# {3 m( X1 SEDMA3EnableTransfer(SOC_EDMA30CC_0_REGS,
* \9 i' s- X4 T9 p% _& REDMA3_CHA_MCASP0_TX, EDMA3_TRIG_MODE_EVENT);
/* Activate the serializers */
- ~  A+ n# S+ g3 p* ZMcASPRxSerActivate(SOC_MCASP_0_CTRL_REGS);6 O$ ?+ X# B; Q. a( {- d
McASPTxSerActivate(SOC_MCASP_0_CTRL_REGS);
/* make sure that the XDATA bit is cleared to zero */
. G% X5 L: ?; H! h, xwhile(McASPTxStatusGet(SOC_MCASP_0_CTRL_REGS) & MCASP_TX_STAT_DATAREADY);
/* Activate the state machines */+ [- o% `! R* s. k5 u6 G
McASPRxEnable(SOC_MCASP_0_CTRL_REGS);
1 t! u, h7 V4 Z$ uMcASPTxEnable(SOC_MCASP_0_CTRL_REGS);
, x) A' Q4 _9 V) j" g1 }}

1 m: |! H! E! Z* p0 X
请问:问题出在哪了,时钟按照这样配是否有错。
另外我看XDATA一直是0,接收的rxbuf0,1,2里有一般全是FFFF一半全是0.

0 j( W# ?7 `& S1 ]  I$ H/ \7 L




欢迎光临 嵌入式开发者社区 (https://www.51ele.net/) Powered by Discuz! X3.4