嵌入式开发者社区

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

作者: wapdasta    时间: 2018-11-7 13:28
标题: MCASP自环配置。
我项目上用OMAPL138的板子MCASP的引脚都是链接的FPGA,所以在FPGA这端设置的MCASP自环。把axr0接收到的通过axr1发回去。
部分代码如下
input mcasp_afsx,
4 e3 U( t# H4 F/ e  minput mcasp_ahclkx,) i! ~- W9 v$ s3 T( q3 }2 f0 U2 f
input mcasp_aclkx,' Z1 V' K2 O. N
input axr0,
5 Y2 J' T/ I7 a' b' u% d
0 z, ^+ z" ~3 T4 J' o5 h: soutput mcasp_afsr,* G) a( l' U. ~
output mcasp_ahclkr,
2 j) M6 y1 n* r4 Qoutput mcasp_aclkr,
6 t) l, c  N) L4 E  |. Noutput axr1,
' L$ a2 E  j( E
assign mcasp_afsr = mcasp_afsx;
6 [+ [; v; \* W4 d  F9 Yassign mcasp_aclkr = mcasp_aclkx;
+ l. O& j$ u3 i( S0 O  v+ |) c7 Uassign mcasp_ahclkr = mcasp_ahclkx;. F' G; {% ]& G3 k; h8 h; d$ R" X
assign axr1 = axr0;

9 x9 R( M* G) J! u2 @6 U+ H, \
4 L4 J% F% E/ i# {- m  p6 z$ f7 X
在OMAPL138这端,通过axr0接口发固定的数,axr1接收。
在配置MACASP的时候,发送全部取内部时钟,接收全部取外部时钟。
一直循环发送,但是接收不到。在FPGA端也没有看到时钟和信号的波形。
部分代码如下,关于edma3的部分未做变化。

7 T3 ~8 R$ K  Q1 Z- \
static void McASPI2SConfigure(void)8 l" C7 M( ]9 T& j2 h
{
( [6 e/ i* V! I% r- M+ k# F5 PMcASPRxReset(SOC_MCASP_0_CTRL_REGS);* W2 w* d+ x1 n8 g( r
McASPTxReset(SOC_MCASP_0_CTRL_REGS);
/* Enable the FIFOs for DMA transfer */4 p! H, m; Z. g8 Z* ]0 [! T9 _
McASPReadFifoEnable(SOC_MCASP_0_FIFO_REGS, 1, 1);
- C/ p* i  w# F$ }+ R) t. c$ gMcASPWriteFifoEnable(SOC_MCASP_0_FIFO_REGS, 1, 1);
/* Set I2S format in the transmitter/receiver format units */
2 Y; N+ R" }: V% f/ ~' q1 ZMcASPRxFmtI2SSet(SOC_MCASP_0_CTRL_REGS, WORD_SIZE, SLOT_SIZE,
3 ]$ ]: j7 d: G6 kMCASP_RX_MODE_DMA);0 X' V' t2 K& A3 @% h5 }# ]+ H# f
McASPTxFmtI2SSet(SOC_MCASP_0_CTRL_REGS, WORD_SIZE, SLOT_SIZE,
3 L2 c8 ]. j* @MCASP_TX_MODE_DMA);
/* Configure the frame sync. I2S shall work in TDM format with 2 slots */6 ~7 k7 c% _# \3 Q! k, z; s
McASPRxFrameSyncCfg(SOC_MCASP_0_CTRL_REGS, 2, MCASP_RX_FS_WIDTH_WORD,
" C. ~8 f( ^6 `MCASP_RX_FS_EXT_BEGIN_ON_FALL_EDGE);
6 l) n% w* S; b* h5 c: }McASPTxFrameSyncCfg(SOC_MCASP_0_CTRL_REGS, 2, MCASP_TX_FS_WIDTH_WORD,
! W! c/ A" f2 C, }) r3 I1 uMCASP_TX_FS_INT_BEGIN_ON_RIS_EDGE);
/* configure the clock for receiver */& b, Z* a" g  P4 ]1 X& {1 H& P! i
McASPRxClkCfg(SOC_MCASP_0_CTRL_REGS, MCASP_RX_CLK_EXTERNAL, 0, 0);
% C7 m# l( x- |. Q1 eMcASPRxClkPolaritySet(SOC_MCASP_0_CTRL_REGS, MCASP_RX_CLK_POL_RIS_EDGE); / F0 t: Z: r9 F% O+ L
McASPRxClkCheckConfig(SOC_MCASP_0_CTRL_REGS, MCASP_RX_CLKCHCK_DIV32,( D) B7 q, e4 }: Z& ?4 c/ ~% \
0x00, 0xFF);
/* configure the clock for transmitter */" P( ^" t: h% W% K
McASPTxClkCfg(SOC_MCASP_0_CTRL_REGS, MCASP_TX_CLK_INTERNAL, 11, 1);. R& }% D9 @, ?
McASPTxClkPolaritySet(SOC_MCASP_0_CTRL_REGS, MCASP_TX_CLK_POL_FALL_EDGE); 4 F: K' C& J/ I- k* _
McASPTxClkCheckConfig(SOC_MCASP_0_CTRL_REGS, MCASP_TX_CLKCHCK_DIV32,
7 c( g& X! j4 W  v0 o0x00, 0xFF);; `( x* }, `* d7 S' B
1 {! @$ q2 ^; w3 [" S' l
/* Enable synchronization of RX and TX sections */
, h, n% d$ p2 Q) kMcASPTxRxClkSyncEnable(SOC_MCASP_0_CTRL_REGS);
/* Enable the transmitter/receiver slots. I2S uses 2 slots */
% D; |9 N6 A) @0 q4 r" oMcASPRxTimeSlotSet(SOC_MCASP_0_CTRL_REGS, I2S_SLOTS);
; L  h% Z9 L$ l- I! L9 ]/ GMcASPTxTimeSlotSet(SOC_MCASP_0_CTRL_REGS, I2S_SLOTS);
/*$ \. `3 d  ~( `* Z
** Set the serializers, Currently only one serializer is set as
2 m7 }% ]: s1 }$ ?** transmitter and one serializer as receiver.
+ W. x3 B4 I* W  U' Y*/
& {: h2 x7 J) C3 I5 rMcASPSerializerRxSet(SOC_MCASP_0_CTRL_REGS, MCASP_XSER_RX);/ W" K' W8 k& c% m
McASPSerializerTxSet(SOC_MCASP_0_CTRL_REGS, MCASP_XSER_TX);
/*3 Q, E  b7 I: }
** Configure the McASP pins $ S" t. Y: q- ^; U
** Input - Frame Sync, Clock and Serializer Rx
% U4 ]9 T1 j1 f' h8 J) }4 M( ?** Output - Serializer Tx is connected to the input of the codec
8 \$ W5 @% {, F9 ?0 W- u8 X% k*/+ v2 D4 t' W2 S, J; C" Q+ l1 j
McASPPinMcASPSet(SOC_MCASP_0_CTRL_REGS, 0xFFFFFFFF);- D, {9 K; b) P5 v
McASPPinDirOutputSet(SOC_MCASP_0_CTRL_REGS,MCASP_PIN_AXR(MCASP_XSER_TX));9 v4 S7 m! ^- D, V/ Q5 k* b1 ~2 v3 e* k
McASPPinDirInputSet(SOC_MCASP_0_CTRL_REGS, MCASP_PIN_AFSX: G6 i* a% t6 a5 c7 g
| MCASP_PIN_ACLKX  t0 P  M& ]* z9 I$ N
| MCASP_PIN_AHCLKX
9 T$ l: U# V1 @8 i3 [: C0 \| MCASP_PIN_AXR(MCASP_XSER_RX));
/* Enable error interrupts for McASP */; W7 I. `- `: ^1 I# e9 ~
McASPTxIntEnable(SOC_MCASP_0_CTRL_REGS, MCASP_TX_DMAERROR
) l( X8 @9 W; W" C  \| MCASP_TX_CLKFAIL
  C. I5 I7 u) _( S! C) h8 c| MCASP_TX_SYNCERROR, v; \* u' \' q8 u0 @6 s
| MCASP_TX_UNDERRUN);
McASPRxIntEnable(SOC_MCASP_0_CTRL_REGS, MCASP_RX_DMAERROR / D0 |) }3 x/ K: u
| MCASP_RX_CLKFAIL
- K$ G3 p7 {  M  j| MCASP_RX_SYNCERROR
$ l: {. x6 |5 z: \/ j| MCASP_RX_OVERRUN);
, N! s# w5 a2 I8 `5 z3 z}
static void I2SDataTxRxActivate(void)6 d9 m0 L6 V* h1 P" u2 U
{3 Y. e8 F$ ^' n2 J3 c
/* Start the clocks */
6 o! S6 x9 O3 v2 X" ?McASPRxClkStart(SOC_MCASP_0_CTRL_REGS, MCASP_RX_CLK_EXTERNAL);' i6 x; _5 B, \& e
McASPTxClkStart(SOC_MCASP_0_CTRL_REGS, MCASP_TX_CLK_INTERNAL);
/* Enable EDMA for the transfer */
2 j: W( _7 u; q, Q  i4 ^" |EDMA3EnableTransfer(SOC_EDMA30CC_0_REGS, EDMA3_CHA_MCASP0_RX,
8 |/ E! L" i  s2 cEDMA3_TRIG_MODE_EVENT);7 G- S8 r& D4 E* |& T- Y+ v
EDMA3EnableTransfer(SOC_EDMA30CC_0_REGS,
9 G1 |$ `9 H  x& C/ g- k+ z$ _* VEDMA3_CHA_MCASP0_TX, EDMA3_TRIG_MODE_EVENT);
/* Activate the serializers */1 z- s5 }" E5 E1 H
McASPRxSerActivate(SOC_MCASP_0_CTRL_REGS);
8 W- K; Z  L8 A: }8 W& _McASPTxSerActivate(SOC_MCASP_0_CTRL_REGS);
/* make sure that the XDATA bit is cleared to zero */
; ?& z7 U/ s# s$ c2 K5 k, Q) mwhile(McASPTxStatusGet(SOC_MCASP_0_CTRL_REGS) & MCASP_TX_STAT_DATAREADY);
/* Activate the state machines */, [/ [( z  w  v4 P% E
McASPRxEnable(SOC_MCASP_0_CTRL_REGS);: l$ G0 ?% H  k7 n9 b/ b' V
McASPTxEnable(SOC_MCASP_0_CTRL_REGS);
! _! Q5 J2 j8 v3 v( R3 T8 c+ y}
% U1 H! q. C" q5 l8 k
请问:问题出在哪了,时钟按照这样配是否有错。
另外我看XDATA一直是0,接收的rxbuf0,1,2里有一般全是FFFF一半全是0.

2 f# o& y  g3 S2 W




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