嵌入式开发者社区

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

作者: wapdasta    时间: 2018-11-7 13:28
标题: MCASP自环配置。
我项目上用OMAPL138的板子MCASP的引脚都是链接的FPGA,所以在FPGA这端设置的MCASP自环。把axr0接收到的通过axr1发回去。
部分代码如下
input mcasp_afsx,
8 K+ m# V; z" j  Q( _' w$ @9 cinput mcasp_ahclkx,- }) m+ B" n2 ~  C9 [
input mcasp_aclkx,# |) [' y! K" w$ Y
input axr0,
/ y& F0 O9 w; ?" \; R, w; s
/ I* P3 p2 J7 w- ?/ z( xoutput mcasp_afsr,. k0 d9 D( h- k/ d* o
output mcasp_ahclkr,
8 Y  k2 a3 D/ f( h$ N: _$ W3 H8 Joutput mcasp_aclkr,
  K. G9 W* Q' r- g1 i3 o5 qoutput axr1,
$ \9 A* b/ S1 v% r3 w
assign mcasp_afsr = mcasp_afsx;! D4 Y: i9 U5 b, r1 g
assign mcasp_aclkr = mcasp_aclkx;
& n4 Y6 f7 g/ Z4 L8 k1 c* Lassign mcasp_ahclkr = mcasp_ahclkx;
, |0 X1 [# k/ R  ^assign axr1 = axr0;

/ S% i: f2 \3 J$ b5 ]; [9 O4 K9 M- l& ~
在OMAPL138这端,通过axr0接口发固定的数,axr1接收。
在配置MACASP的时候,发送全部取内部时钟,接收全部取外部时钟。
一直循环发送,但是接收不到。在FPGA端也没有看到时钟和信号的波形。
部分代码如下,关于edma3的部分未做变化。

& r* N+ h0 p# e1 @1 l4 a# _: M4 y
static void McASPI2SConfigure(void)
- W- I5 V# l9 Z1 b! g% f- j+ N{
3 B2 H. C  Z) |& R  D4 LMcASPRxReset(SOC_MCASP_0_CTRL_REGS);
& B' i# k7 K* jMcASPTxReset(SOC_MCASP_0_CTRL_REGS);
/* Enable the FIFOs for DMA transfer */
) b2 B! x( m3 ^% Y7 r7 g% ?7 vMcASPReadFifoEnable(SOC_MCASP_0_FIFO_REGS, 1, 1);* V/ n2 i# m) B' Z' P
McASPWriteFifoEnable(SOC_MCASP_0_FIFO_REGS, 1, 1);
/* Set I2S format in the transmitter/receiver format units */
  `9 n( |5 U2 Y* ], W$ bMcASPRxFmtI2SSet(SOC_MCASP_0_CTRL_REGS, WORD_SIZE, SLOT_SIZE,
) l9 U* C6 L# ?" n: b* qMCASP_RX_MODE_DMA);" |* p' s8 U, v
McASPTxFmtI2SSet(SOC_MCASP_0_CTRL_REGS, WORD_SIZE, SLOT_SIZE,
) g# B2 G+ ~% N6 a( O5 UMCASP_TX_MODE_DMA);
/* Configure the frame sync. I2S shall work in TDM format with 2 slots */
1 {" |. c  a& l0 t) sMcASPRxFrameSyncCfg(SOC_MCASP_0_CTRL_REGS, 2, MCASP_RX_FS_WIDTH_WORD,
: q9 {3 c7 P/ P- p  ^! B7 hMCASP_RX_FS_EXT_BEGIN_ON_FALL_EDGE);
; H: V5 c2 P. l0 WMcASPTxFrameSyncCfg(SOC_MCASP_0_CTRL_REGS, 2, MCASP_TX_FS_WIDTH_WORD, 1 a# S1 V( _- Y* ]( h; P; I
MCASP_TX_FS_INT_BEGIN_ON_RIS_EDGE);
/* configure the clock for receiver */
* e/ ^+ x1 X3 B! U' t' EMcASPRxClkCfg(SOC_MCASP_0_CTRL_REGS, MCASP_RX_CLK_EXTERNAL, 0, 0);
% B( f; y( ?( {3 |8 [McASPRxClkPolaritySet(SOC_MCASP_0_CTRL_REGS, MCASP_RX_CLK_POL_RIS_EDGE);
/ {9 n0 W: W: vMcASPRxClkCheckConfig(SOC_MCASP_0_CTRL_REGS, MCASP_RX_CLKCHCK_DIV32,7 Q9 R) m' [( t( ^# B
0x00, 0xFF);
/* configure the clock for transmitter */" j8 k6 `# |% P$ W
McASPTxClkCfg(SOC_MCASP_0_CTRL_REGS, MCASP_TX_CLK_INTERNAL, 11, 1);, _! e; q! S8 o; D
McASPTxClkPolaritySet(SOC_MCASP_0_CTRL_REGS, MCASP_TX_CLK_POL_FALL_EDGE);
# d; U1 C4 }' D+ ZMcASPTxClkCheckConfig(SOC_MCASP_0_CTRL_REGS, MCASP_TX_CLKCHCK_DIV32,
( z: O3 N9 n5 X7 S( E9 y0x00, 0xFF);- i6 r0 E& c% q7 \; C
/ x  k; \1 Y# i7 S% W
/* Enable synchronization of RX and TX sections */
; g7 U" x2 S8 D1 }" I' y9 b8 f) fMcASPTxRxClkSyncEnable(SOC_MCASP_0_CTRL_REGS);
/* Enable the transmitter/receiver slots. I2S uses 2 slots */
1 a( ?' A( h/ u1 _& p3 [" LMcASPRxTimeSlotSet(SOC_MCASP_0_CTRL_REGS, I2S_SLOTS);
/ Y/ O( X1 @5 ?7 i2 v; U( [+ ^McASPTxTimeSlotSet(SOC_MCASP_0_CTRL_REGS, I2S_SLOTS);
/*3 u1 Q& M2 ?/ m, Z
** Set the serializers, Currently only one serializer is set as; l% b% O8 [, g  y$ H- P$ b
** transmitter and one serializer as receiver.
) f3 w5 U7 b/ S0 n5 r*/
8 c, |  }7 x5 ^6 p$ z2 N4 ?' @McASPSerializerRxSet(SOC_MCASP_0_CTRL_REGS, MCASP_XSER_RX);# _! u) C9 U1 a" M1 L
McASPSerializerTxSet(SOC_MCASP_0_CTRL_REGS, MCASP_XSER_TX);
/*7 b$ i) O1 B) T: ~
** Configure the McASP pins
* S7 \# @# i& Y/ T7 z3 ?) D3 h** Input - Frame Sync, Clock and Serializer Rx8 T* o5 j  {& R/ u7 u$ s, T1 A
** Output - Serializer Tx is connected to the input of the codec 9 V( i! e/ ?1 T. `1 F* T1 A
*/8 L# Y7 X' [# Z" m- F
McASPPinMcASPSet(SOC_MCASP_0_CTRL_REGS, 0xFFFFFFFF);0 Y. j. e6 O, V2 A
McASPPinDirOutputSet(SOC_MCASP_0_CTRL_REGS,MCASP_PIN_AXR(MCASP_XSER_TX));) J" b! }, U4 J/ A
McASPPinDirInputSet(SOC_MCASP_0_CTRL_REGS, MCASP_PIN_AFSX4 @6 T, ~7 x: D! R3 n9 J" a' @! u
| MCASP_PIN_ACLKX
' m$ d4 \6 D2 M. X7 j4 i| MCASP_PIN_AHCLKX
: ~9 ?. s  F, P  j6 g% B| MCASP_PIN_AXR(MCASP_XSER_RX));
/* Enable error interrupts for McASP */
" ?( C/ r: v9 K+ c5 E7 v( Y" KMcASPTxIntEnable(SOC_MCASP_0_CTRL_REGS, MCASP_TX_DMAERROR
3 X! i" j/ z7 k# U6 p! d| MCASP_TX_CLKFAIL
0 i$ O5 ?" d2 D, c& ]| MCASP_TX_SYNCERROR' L' Y5 r) B! h# f: C( K
| MCASP_TX_UNDERRUN);
McASPRxIntEnable(SOC_MCASP_0_CTRL_REGS, MCASP_RX_DMAERROR
  a. q$ m% ^  U! V% b| MCASP_RX_CLKFAIL$ e8 f# d. L# q+ V8 e& {8 n6 G
| MCASP_RX_SYNCERROR & B) Y, y# z9 D/ W( c
| MCASP_RX_OVERRUN);
1 ]# e6 }5 u" l# H8 |& I}
static void I2SDataTxRxActivate(void)% t5 G- i6 w) Q: ?
{  W. z5 ?' J& ~5 ?1 n
/* Start the clocks */
+ M; o6 a+ W: q, s. |% tMcASPRxClkStart(SOC_MCASP_0_CTRL_REGS, MCASP_RX_CLK_EXTERNAL);5 f' C1 W& o5 ^6 Q/ y3 h
McASPTxClkStart(SOC_MCASP_0_CTRL_REGS, MCASP_TX_CLK_INTERNAL);
/* Enable EDMA for the transfer */5 i( U6 q, S  L; e+ V5 N8 C
EDMA3EnableTransfer(SOC_EDMA30CC_0_REGS, EDMA3_CHA_MCASP0_RX,
+ ~7 X$ I1 o9 `0 r  GEDMA3_TRIG_MODE_EVENT);
/ S: n2 _9 f5 p* ?+ xEDMA3EnableTransfer(SOC_EDMA30CC_0_REGS, , U; o2 `& a( x+ b
EDMA3_CHA_MCASP0_TX, EDMA3_TRIG_MODE_EVENT);
/* Activate the serializers */
# O, a3 |7 T# Z' `' XMcASPRxSerActivate(SOC_MCASP_0_CTRL_REGS);
2 E9 w( [0 g, R- \& V$ aMcASPTxSerActivate(SOC_MCASP_0_CTRL_REGS);
/* make sure that the XDATA bit is cleared to zero *// k4 t4 }2 {, {# F# _
while(McASPTxStatusGet(SOC_MCASP_0_CTRL_REGS) & MCASP_TX_STAT_DATAREADY);
/* Activate the state machines */) L1 h- G, {6 b4 L
McASPRxEnable(SOC_MCASP_0_CTRL_REGS);; F9 d, H# M  f2 ?
McASPTxEnable(SOC_MCASP_0_CTRL_REGS);
1 _$ [4 Y) x2 y) @! e6 t" J1 M7 r}

3 {" K. U$ s* }0 \* m/ y( V
请问:问题出在哪了,时钟按照这样配是否有错。
另外我看XDATA一直是0,接收的rxbuf0,1,2里有一般全是FFFF一半全是0.

" e6 V6 `' X) u9 W0 D4 C! _  h# `




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