嵌入式开发者社区

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

作者: wapdasta    时间: 2018-11-7 13:28
标题: MCASP自环配置。
我项目上用OMAPL138的板子MCASP的引脚都是链接的FPGA,所以在FPGA这端设置的MCASP自环。把axr0接收到的通过axr1发回去。
部分代码如下
input mcasp_afsx,% S9 j% T8 b3 h
input mcasp_ahclkx,% A3 |, ^' g! L! F# e
input mcasp_aclkx,7 [/ E. {9 c# }& l9 P! R; [* r
input axr0,' {5 r: D9 v$ n# E8 k

* X) [7 o, I' Houtput mcasp_afsr,
  i2 Z( r6 e) T% N4 \2 Koutput mcasp_ahclkr,
/ D; z- \1 [, joutput mcasp_aclkr,
2 L" a. O  i2 D- ~output axr1,
8 W+ ?' V, T0 s0 I2 ]
assign mcasp_afsr = mcasp_afsx;
& |: O$ G6 f) P! K/ Sassign mcasp_aclkr = mcasp_aclkx;
+ Q9 p7 s! \, A7 E, o9 ?assign mcasp_ahclkr = mcasp_ahclkx;
( g% U4 e8 y7 B8 G5 Q$ A2 Yassign axr1 = axr0;

2 N' j% }4 F5 N- w! A# J" B, h( e" m) B. @
在OMAPL138这端,通过axr0接口发固定的数,axr1接收。
在配置MACASP的时候,发送全部取内部时钟,接收全部取外部时钟。
一直循环发送,但是接收不到。在FPGA端也没有看到时钟和信号的波形。
部分代码如下,关于edma3的部分未做变化。

+ ~" p: K) C; H% c
static void McASPI2SConfigure(void). I9 V, h; t) Z
{! q+ w( r" }' A6 n2 x9 T% c
McASPRxReset(SOC_MCASP_0_CTRL_REGS);- q7 o, N; `" k' r* e8 V( {, ~1 Q+ X
McASPTxReset(SOC_MCASP_0_CTRL_REGS);
/* Enable the FIFOs for DMA transfer */8 w- _  m# u; a+ \3 C
McASPReadFifoEnable(SOC_MCASP_0_FIFO_REGS, 1, 1);
7 _" c7 K- {3 K5 oMcASPWriteFifoEnable(SOC_MCASP_0_FIFO_REGS, 1, 1);
/* Set I2S format in the transmitter/receiver format units */8 I  M! W6 R" c. d% J
McASPRxFmtI2SSet(SOC_MCASP_0_CTRL_REGS, WORD_SIZE, SLOT_SIZE,1 M6 ~, h& K' a
MCASP_RX_MODE_DMA);" ?5 n8 x* _; e6 d; H9 i8 x4 p9 j
McASPTxFmtI2SSet(SOC_MCASP_0_CTRL_REGS, WORD_SIZE, SLOT_SIZE,& N- b  r% e6 u/ B" A% g! d
MCASP_TX_MODE_DMA);
/* Configure the frame sync. I2S shall work in TDM format with 2 slots */
- L$ l5 F1 w' P# y2 [McASPRxFrameSyncCfg(SOC_MCASP_0_CTRL_REGS, 2, MCASP_RX_FS_WIDTH_WORD, / y9 S, l1 v" F* }9 Z
MCASP_RX_FS_EXT_BEGIN_ON_FALL_EDGE);9 `7 v: N1 j& D
McASPTxFrameSyncCfg(SOC_MCASP_0_CTRL_REGS, 2, MCASP_TX_FS_WIDTH_WORD,
2 |. ~2 K& {2 a6 m7 V* CMCASP_TX_FS_INT_BEGIN_ON_RIS_EDGE);
/* configure the clock for receiver */1 z4 t, S3 I0 V
McASPRxClkCfg(SOC_MCASP_0_CTRL_REGS, MCASP_RX_CLK_EXTERNAL, 0, 0);) y! }" D$ E9 r4 H7 W4 Z+ }: c
McASPRxClkPolaritySet(SOC_MCASP_0_CTRL_REGS, MCASP_RX_CLK_POL_RIS_EDGE); ; E2 T+ f4 _; ]" C
McASPRxClkCheckConfig(SOC_MCASP_0_CTRL_REGS, MCASP_RX_CLKCHCK_DIV32,1 v9 k$ _9 c  h3 V  }* i
0x00, 0xFF);
/* configure the clock for transmitter */
: d, s: _; h9 b, z' X6 EMcASPTxClkCfg(SOC_MCASP_0_CTRL_REGS, MCASP_TX_CLK_INTERNAL, 11, 1);9 d8 g/ u: ?, |4 a- ^' o5 X
McASPTxClkPolaritySet(SOC_MCASP_0_CTRL_REGS, MCASP_TX_CLK_POL_FALL_EDGE);   U2 d3 D0 j6 ]# M" m, ^: P9 S
McASPTxClkCheckConfig(SOC_MCASP_0_CTRL_REGS, MCASP_TX_CLKCHCK_DIV32,( Z+ l# `) ~7 u3 L  g0 H2 f1 ~
0x00, 0xFF);
) K5 Q" t3 R3 b1 P* p3 P0 S6 s* o9 B/ l9 V; s
/* Enable synchronization of RX and TX sections */ 2 J0 ?1 C8 X) f4 ]2 a0 G
McASPTxRxClkSyncEnable(SOC_MCASP_0_CTRL_REGS);
/* Enable the transmitter/receiver slots. I2S uses 2 slots */
; i4 I7 d, s0 |/ i% y- GMcASPRxTimeSlotSet(SOC_MCASP_0_CTRL_REGS, I2S_SLOTS);7 M4 `" i' \; X3 b, J# Z
McASPTxTimeSlotSet(SOC_MCASP_0_CTRL_REGS, I2S_SLOTS);
/*
4 i6 W# x2 m% l0 L5 G9 Y, {8 B+ E** Set the serializers, Currently only one serializer is set as- _+ r: R+ j- w: k+ U+ |
** transmitter and one serializer as receiver.; x% _+ [, `0 \5 `6 j$ d" P
*/4 {( q* m/ K+ o- C  A2 N, t
McASPSerializerRxSet(SOC_MCASP_0_CTRL_REGS, MCASP_XSER_RX);
/ V" z3 G8 t3 L7 Z1 C9 ?! JMcASPSerializerTxSet(SOC_MCASP_0_CTRL_REGS, MCASP_XSER_TX);
/*! v  o7 @8 p, N9 u: J4 y9 @( Q! t
** Configure the McASP pins ! ~/ q9 R5 c. n: t
** Input - Frame Sync, Clock and Serializer Rx
. C5 J3 K* r  Z- h( |** Output - Serializer Tx is connected to the input of the codec
0 b2 ~+ C" O$ \/ f*/
, x: `5 I; s" X* _McASPPinMcASPSet(SOC_MCASP_0_CTRL_REGS, 0xFFFFFFFF);
$ k7 m- m- `% z: ?9 uMcASPPinDirOutputSet(SOC_MCASP_0_CTRL_REGS,MCASP_PIN_AXR(MCASP_XSER_TX));
4 ^1 x# e: C1 B* FMcASPPinDirInputSet(SOC_MCASP_0_CTRL_REGS, MCASP_PIN_AFSX
5 [) L1 a5 L% g5 ~2 M, s/ e| MCASP_PIN_ACLKX
6 x! t0 d, B3 B# S| MCASP_PIN_AHCLKX
: p2 X4 s& @) Z| MCASP_PIN_AXR(MCASP_XSER_RX));
/* Enable error interrupts for McASP */
% A6 L- U* k5 \+ g7 nMcASPTxIntEnable(SOC_MCASP_0_CTRL_REGS, MCASP_TX_DMAERROR & K4 ^3 d. Q3 j7 O" l+ A( l
| MCASP_TX_CLKFAIL : E8 e9 _! F- s+ F& v3 o. ?  j
| MCASP_TX_SYNCERROR6 p4 \9 R! h' s: l
| MCASP_TX_UNDERRUN);
McASPRxIntEnable(SOC_MCASP_0_CTRL_REGS, MCASP_RX_DMAERROR 2 r3 b) o+ S1 _
| MCASP_RX_CLKFAIL2 D" F! k) e! p! }
| MCASP_RX_SYNCERROR
# ?6 N9 s& ~' y7 `4 y% Z+ [% r| MCASP_RX_OVERRUN);. s: J5 O2 g. {0 v9 m
}
static void I2SDataTxRxActivate(void)
- F  i  b/ j8 ~: s6 W3 A  ]9 q1 m{" W. P9 T8 o  O3 @/ T
/* Start the clocks */4 h1 g, L5 B# v; f* \
McASPRxClkStart(SOC_MCASP_0_CTRL_REGS, MCASP_RX_CLK_EXTERNAL);
4 c% L# ?% a& H1 u6 B( l5 S& mMcASPTxClkStart(SOC_MCASP_0_CTRL_REGS, MCASP_TX_CLK_INTERNAL);
/* Enable EDMA for the transfer */7 C" m/ X8 q2 ~( \% B
EDMA3EnableTransfer(SOC_EDMA30CC_0_REGS, EDMA3_CHA_MCASP0_RX,
+ @" a) ]( c2 }. J/ b4 aEDMA3_TRIG_MODE_EVENT);# K/ X% x* S: ]' n) ^
EDMA3EnableTransfer(SOC_EDMA30CC_0_REGS,
2 X7 v; f; R! J' N8 O+ }EDMA3_CHA_MCASP0_TX, EDMA3_TRIG_MODE_EVENT);
/* Activate the serializers */
0 T# M0 H+ e+ j- CMcASPRxSerActivate(SOC_MCASP_0_CTRL_REGS);$ {! c0 j' N" F9 k. K1 O8 ~2 I! N
McASPTxSerActivate(SOC_MCASP_0_CTRL_REGS);
/* make sure that the XDATA bit is cleared to zero */
; T$ [- ?, Y  @! Zwhile(McASPTxStatusGet(SOC_MCASP_0_CTRL_REGS) & MCASP_TX_STAT_DATAREADY);
/* Activate the state machines */0 S/ ^& O% c. d8 r/ H
McASPRxEnable(SOC_MCASP_0_CTRL_REGS);7 G7 i) s/ C# Z# f) m4 r, Y
McASPTxEnable(SOC_MCASP_0_CTRL_REGS);: _( |4 `$ f. n& c; P
}
+ _3 Z6 j5 q, z5 E
请问:问题出在哪了,时钟按照这样配是否有错。
另外我看XDATA一直是0,接收的rxbuf0,1,2里有一般全是FFFF一半全是0.

) z* @  I7 v' O% d& h




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