嵌入式开发者社区

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

作者: wapdasta    时间: 2018-11-7 13:28
标题: MCASP自环配置。
我项目上用OMAPL138的板子MCASP的引脚都是链接的FPGA,所以在FPGA这端设置的MCASP自环。把axr0接收到的通过axr1发回去。
部分代码如下
input mcasp_afsx,
) L- c/ U7 {  Q3 Z. E* x& Dinput mcasp_ahclkx,# i( k5 I8 B. Z$ w
input mcasp_aclkx,+ X" o$ D0 m' V1 ?/ x  E/ t
input axr0,
! j" r! @" Q9 E$ t& C* I) @
2 u* n' A5 C# }: ]0 D; zoutput mcasp_afsr,& e4 t# y6 Y4 z; u
output mcasp_ahclkr,
' ~" x0 p* d2 `: b' Aoutput mcasp_aclkr,# I* P: u2 V5 J, L* I- \
output axr1,
0 w: c1 M7 t2 y( w: A, X
assign mcasp_afsr = mcasp_afsx;
( I; B" M& f% lassign mcasp_aclkr = mcasp_aclkx;( q" k. {- b' O: m, g9 W, U5 N" l
assign mcasp_ahclkr = mcasp_ahclkx;6 t7 Q: @$ s2 w* D! N/ p. f$ K: V
assign axr1 = axr0;
' X  h0 @+ v! }/ P3 g" l7 v
# n! V& z* l: v# u
在OMAPL138这端,通过axr0接口发固定的数,axr1接收。
在配置MACASP的时候,发送全部取内部时钟,接收全部取外部时钟。
一直循环发送,但是接收不到。在FPGA端也没有看到时钟和信号的波形。
部分代码如下,关于edma3的部分未做变化。

: k" `2 P, K9 }
static void McASPI2SConfigure(void)& s) S) L0 Z# z/ |3 z" f
{
" J) ?8 v! e3 C8 f. b3 Z  D: NMcASPRxReset(SOC_MCASP_0_CTRL_REGS);: `/ D# W2 ^9 L. ^. x
McASPTxReset(SOC_MCASP_0_CTRL_REGS);
/* Enable the FIFOs for DMA transfer */7 p: h4 u: c6 H5 f: g
McASPReadFifoEnable(SOC_MCASP_0_FIFO_REGS, 1, 1);6 g9 |4 |. G) b0 f8 m
McASPWriteFifoEnable(SOC_MCASP_0_FIFO_REGS, 1, 1);
/* Set I2S format in the transmitter/receiver format units */
  `' u! M0 b2 d9 C. z; jMcASPRxFmtI2SSet(SOC_MCASP_0_CTRL_REGS, WORD_SIZE, SLOT_SIZE,
/ u  _: r  s" [8 m, mMCASP_RX_MODE_DMA);7 L, l: B$ E% p* r+ |) E: P  c, y. Y! C
McASPTxFmtI2SSet(SOC_MCASP_0_CTRL_REGS, WORD_SIZE, SLOT_SIZE,9 c8 g2 o3 E7 j1 Q  l; B  n
MCASP_TX_MODE_DMA);
/* Configure the frame sync. I2S shall work in TDM format with 2 slots */
- E9 N  }+ v' l9 w9 B/ j0 |McASPRxFrameSyncCfg(SOC_MCASP_0_CTRL_REGS, 2, MCASP_RX_FS_WIDTH_WORD,
5 G1 W* m- d9 n: F3 d8 P2 R7 [MCASP_RX_FS_EXT_BEGIN_ON_FALL_EDGE);
- h  J5 {2 t9 _McASPTxFrameSyncCfg(SOC_MCASP_0_CTRL_REGS, 2, MCASP_TX_FS_WIDTH_WORD, 5 Y- V, Z7 Q) J! z
MCASP_TX_FS_INT_BEGIN_ON_RIS_EDGE);
/* configure the clock for receiver */
. O" N6 {+ b. i; I1 F6 HMcASPRxClkCfg(SOC_MCASP_0_CTRL_REGS, MCASP_RX_CLK_EXTERNAL, 0, 0);
  ]& j5 ?0 r, F6 M; ?McASPRxClkPolaritySet(SOC_MCASP_0_CTRL_REGS, MCASP_RX_CLK_POL_RIS_EDGE);
9 a, a6 A& u% WMcASPRxClkCheckConfig(SOC_MCASP_0_CTRL_REGS, MCASP_RX_CLKCHCK_DIV32,
: R" k, ^( g; x7 w! d0x00, 0xFF);
/* configure the clock for transmitter */
9 A2 U$ d. q) U6 H' q6 u5 q7 |McASPTxClkCfg(SOC_MCASP_0_CTRL_REGS, MCASP_TX_CLK_INTERNAL, 11, 1);
7 Q5 r$ U7 H- I; M6 hMcASPTxClkPolaritySet(SOC_MCASP_0_CTRL_REGS, MCASP_TX_CLK_POL_FALL_EDGE);
, {6 m- x7 x) D' p1 e4 P( mMcASPTxClkCheckConfig(SOC_MCASP_0_CTRL_REGS, MCASP_TX_CLKCHCK_DIV32,
( w% z/ i* c! ]) q: w0x00, 0xFF);3 |( G: T& Y/ c- t/ r/ T
4 s9 g  H& e& z3 Z- N* g6 s
/* Enable synchronization of RX and TX sections */
7 T8 O7 a$ Z  I8 C# t) eMcASPTxRxClkSyncEnable(SOC_MCASP_0_CTRL_REGS);
/* Enable the transmitter/receiver slots. I2S uses 2 slots */
- j3 `) V0 {" e+ X" s4 g1 OMcASPRxTimeSlotSet(SOC_MCASP_0_CTRL_REGS, I2S_SLOTS);* J* y5 `9 e) }9 v2 c: A: m* z2 G
McASPTxTimeSlotSet(SOC_MCASP_0_CTRL_REGS, I2S_SLOTS);
/*
! u7 |) e9 s* q9 E** Set the serializers, Currently only one serializer is set as! q# g  x( F/ F* F/ r
** transmitter and one serializer as receiver.
5 e$ ?0 N0 h9 p: [. q) D*/- ^6 H6 {+ Z9 D% R  q# Y1 B6 c& k
McASPSerializerRxSet(SOC_MCASP_0_CTRL_REGS, MCASP_XSER_RX);, Q+ w, {4 c* J4 t: |7 f2 j
McASPSerializerTxSet(SOC_MCASP_0_CTRL_REGS, MCASP_XSER_TX);
/*
! n: _2 G7 u8 G** Configure the McASP pins 4 w% Y) ?: I2 @) l) z
** Input - Frame Sync, Clock and Serializer Rx
1 }6 u! n; Z# E  h** Output - Serializer Tx is connected to the input of the codec $ V* k2 s% @( F" L6 r) ^! h
*/  x' F/ b% o, u' z+ J$ W" p; `3 U
McASPPinMcASPSet(SOC_MCASP_0_CTRL_REGS, 0xFFFFFFFF);
8 |; X. n: n2 l. LMcASPPinDirOutputSet(SOC_MCASP_0_CTRL_REGS,MCASP_PIN_AXR(MCASP_XSER_TX));
5 T5 Y5 o$ [  Y; @  EMcASPPinDirInputSet(SOC_MCASP_0_CTRL_REGS, MCASP_PIN_AFSX
4 p4 R8 B$ {" ^& M2 K) ]- A| MCASP_PIN_ACLKX# P& E% e9 {, [% x. `2 Q4 m
| MCASP_PIN_AHCLKX
1 d+ `- K4 y6 q0 q$ j1 n| MCASP_PIN_AXR(MCASP_XSER_RX));
/* Enable error interrupts for McASP */
  u1 j- G1 A* s  RMcASPTxIntEnable(SOC_MCASP_0_CTRL_REGS, MCASP_TX_DMAERROR 1 G. O& I- q' \3 f  Y7 Y
| MCASP_TX_CLKFAIL
! \& T: F0 ?* c% p3 b1 K* w| MCASP_TX_SYNCERROR  @$ \+ r/ p; W
| MCASP_TX_UNDERRUN);
McASPRxIntEnable(SOC_MCASP_0_CTRL_REGS, MCASP_RX_DMAERROR
+ C/ _1 f/ U9 D* ?| MCASP_RX_CLKFAIL( U% N' |( O- E1 {( p! P2 t: j
| MCASP_RX_SYNCERROR 0 o) \/ F+ [- p, L4 l: n8 L
| MCASP_RX_OVERRUN);. \' t: t6 l4 `3 X/ y* m
}
static void I2SDataTxRxActivate(void)
7 \. y( F* Y7 K3 A0 L- `{
& a' X8 H4 z0 k7 }! j/ `/* Start the clocks */5 ^% \7 V& R- F* L3 x8 [
McASPRxClkStart(SOC_MCASP_0_CTRL_REGS, MCASP_RX_CLK_EXTERNAL);
8 P8 R4 c0 g3 `3 \6 H* CMcASPTxClkStart(SOC_MCASP_0_CTRL_REGS, MCASP_TX_CLK_INTERNAL);
/* Enable EDMA for the transfer */( @: w# K( A' y3 R
EDMA3EnableTransfer(SOC_EDMA30CC_0_REGS, EDMA3_CHA_MCASP0_RX," L, S. y/ g9 t3 h1 X$ K2 I% c! u- O  u
EDMA3_TRIG_MODE_EVENT);
  Z* g0 [2 r# [$ y7 WEDMA3EnableTransfer(SOC_EDMA30CC_0_REGS,
& i  u3 @$ F( \2 bEDMA3_CHA_MCASP0_TX, EDMA3_TRIG_MODE_EVENT);
/* Activate the serializers */) c* F. m$ Y) n1 N; _6 s2 n
McASPRxSerActivate(SOC_MCASP_0_CTRL_REGS);
6 N; p" _( m/ r: _( eMcASPTxSerActivate(SOC_MCASP_0_CTRL_REGS);
/* make sure that the XDATA bit is cleared to zero */; [; v- O. V, `- V8 a5 H2 N
while(McASPTxStatusGet(SOC_MCASP_0_CTRL_REGS) & MCASP_TX_STAT_DATAREADY);
/* Activate the state machines */9 R6 }: {# m# L, Q# F- y
McASPRxEnable(SOC_MCASP_0_CTRL_REGS);
$ L& P  j' m! U" X- QMcASPTxEnable(SOC_MCASP_0_CTRL_REGS);8 `' K, L" h; G# \' z' t' R
}

5 G, \0 y8 t/ b- m, D
请问:问题出在哪了,时钟按照这样配是否有错。
另外我看XDATA一直是0,接收的rxbuf0,1,2里有一般全是FFFF一半全是0.
3 l* X/ v2 g# h$ c





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