嵌入式开发者社区

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

作者: wapdasta    时间: 2018-11-7 13:28
标题: MCASP自环配置。
我项目上用OMAPL138的板子MCASP的引脚都是链接的FPGA,所以在FPGA这端设置的MCASP自环。把axr0接收到的通过axr1发回去。
部分代码如下
input mcasp_afsx,
1 Z. Q( P' R) {input mcasp_ahclkx,
1 V' E3 A" M  m6 T( finput mcasp_aclkx,0 a. H0 D1 S$ u, U3 I* j/ L
input axr0,  V# D4 E+ y$ J& ?1 Z2 v5 I
" U2 p7 y+ K; n
output mcasp_afsr,3 Q. d; B( z, _- U2 k( q: f% \
output mcasp_ahclkr,  x* o; A2 ^, Q' P
output mcasp_aclkr,0 q( {) @$ n3 F
output axr1,0 _+ l* ]) n  W( E3 d
assign mcasp_afsr = mcasp_afsx;0 p4 V9 Q, R# c' h
assign mcasp_aclkr = mcasp_aclkx;
6 i9 S- K; m9 h; Sassign mcasp_ahclkr = mcasp_ahclkx;9 z8 e% o( ~' d3 x# i) C  b& M4 i
assign axr1 = axr0;

, B# W5 R' G, L0 ^  T  k. F: |) _/ A# L/ W1 A. q4 S4 o( E, c
在OMAPL138这端,通过axr0接口发固定的数,axr1接收。
在配置MACASP的时候,发送全部取内部时钟,接收全部取外部时钟。
一直循环发送,但是接收不到。在FPGA端也没有看到时钟和信号的波形。
部分代码如下,关于edma3的部分未做变化。

+ q0 w  X9 ]7 b/ B& F( L
static void McASPI2SConfigure(void)
4 @0 e8 c' {" r' ]1 B" [. k{
: S' Y4 S/ x/ u/ ^1 r9 f" fMcASPRxReset(SOC_MCASP_0_CTRL_REGS);4 [3 ]( L7 D8 A* i& c
McASPTxReset(SOC_MCASP_0_CTRL_REGS);
/* Enable the FIFOs for DMA transfer */
1 Z$ R4 R3 J0 q- rMcASPReadFifoEnable(SOC_MCASP_0_FIFO_REGS, 1, 1);2 Q$ J) d. M7 a7 A0 P9 d) b
McASPWriteFifoEnable(SOC_MCASP_0_FIFO_REGS, 1, 1);
/* Set I2S format in the transmitter/receiver format units */: x  j/ S' r9 ^
McASPRxFmtI2SSet(SOC_MCASP_0_CTRL_REGS, WORD_SIZE, SLOT_SIZE,# j0 x: w& S( q8 u7 N
MCASP_RX_MODE_DMA);  i7 h7 m7 A# k$ z( m4 n
McASPTxFmtI2SSet(SOC_MCASP_0_CTRL_REGS, WORD_SIZE, SLOT_SIZE,
# M8 X  P& m4 p/ e6 s- ]MCASP_TX_MODE_DMA);
/* Configure the frame sync. I2S shall work in TDM format with 2 slots */% d5 Q2 M3 |4 k0 K
McASPRxFrameSyncCfg(SOC_MCASP_0_CTRL_REGS, 2, MCASP_RX_FS_WIDTH_WORD, " G; E1 q- n+ T9 F5 T4 t+ y
MCASP_RX_FS_EXT_BEGIN_ON_FALL_EDGE);
* |1 X" o2 Q2 ~3 ^# b+ cMcASPTxFrameSyncCfg(SOC_MCASP_0_CTRL_REGS, 2, MCASP_TX_FS_WIDTH_WORD,
8 z  [2 E/ Z9 J0 U/ I! a; i* X) oMCASP_TX_FS_INT_BEGIN_ON_RIS_EDGE);
/* configure the clock for receiver */; ]5 F! ?1 R+ ]0 o9 B5 [
McASPRxClkCfg(SOC_MCASP_0_CTRL_REGS, MCASP_RX_CLK_EXTERNAL, 0, 0);
, n6 b. s1 |' ?# l0 j( I+ IMcASPRxClkPolaritySet(SOC_MCASP_0_CTRL_REGS, MCASP_RX_CLK_POL_RIS_EDGE);
/ m2 w7 k8 ^/ C+ `  u# U# ?- IMcASPRxClkCheckConfig(SOC_MCASP_0_CTRL_REGS, MCASP_RX_CLKCHCK_DIV32,
0 A+ ?. E$ l3 E0x00, 0xFF);
/* configure the clock for transmitter */  P# q" A! ]( E+ t$ x+ u
McASPTxClkCfg(SOC_MCASP_0_CTRL_REGS, MCASP_TX_CLK_INTERNAL, 11, 1);6 c3 t$ ]/ D5 i' q& c1 @8 k
McASPTxClkPolaritySet(SOC_MCASP_0_CTRL_REGS, MCASP_TX_CLK_POL_FALL_EDGE);
2 {( Q' H; |! w5 T. N# O; }5 jMcASPTxClkCheckConfig(SOC_MCASP_0_CTRL_REGS, MCASP_TX_CLKCHCK_DIV32,( }9 z/ d& {3 U3 ~- s
0x00, 0xFF);
; ^5 T% t: t) H6 @
6 x$ \  ~2 f  V' H  K$ g/* Enable synchronization of RX and TX sections */
$ K. Y& N" S7 l: [) e) ]" h* `McASPTxRxClkSyncEnable(SOC_MCASP_0_CTRL_REGS);
/* Enable the transmitter/receiver slots. I2S uses 2 slots */- M! N( S6 r8 G, O
McASPRxTimeSlotSet(SOC_MCASP_0_CTRL_REGS, I2S_SLOTS);
: ?4 j9 U( E: DMcASPTxTimeSlotSet(SOC_MCASP_0_CTRL_REGS, I2S_SLOTS);
/*
; T# X2 W7 f3 m9 D/ }** Set the serializers, Currently only one serializer is set as
1 s" w3 X6 Q- ?** transmitter and one serializer as receiver.
' k, K2 e2 d; k/ L4 E& }, `/ Y*/
& H) f, m3 n4 `) c/ AMcASPSerializerRxSet(SOC_MCASP_0_CTRL_REGS, MCASP_XSER_RX);
8 E5 m( P  T/ y2 v5 V6 XMcASPSerializerTxSet(SOC_MCASP_0_CTRL_REGS, MCASP_XSER_TX);
/*
- g& n" O- k9 t* L' W6 A9 u4 z** Configure the McASP pins
  s, w" ~0 Q4 [9 ~( H2 ]** Input - Frame Sync, Clock and Serializer Rx* i# E+ m* h" J
** Output - Serializer Tx is connected to the input of the codec % d/ g3 m8 x; k4 A! m: ^! Y
*/
- K! E6 P5 d  Z2 TMcASPPinMcASPSet(SOC_MCASP_0_CTRL_REGS, 0xFFFFFFFF);
' g1 }. A0 y9 ?% F2 V8 j) LMcASPPinDirOutputSet(SOC_MCASP_0_CTRL_REGS,MCASP_PIN_AXR(MCASP_XSER_TX));3 [, o8 T9 K1 X
McASPPinDirInputSet(SOC_MCASP_0_CTRL_REGS, MCASP_PIN_AFSX; J- b0 s: J# o- e" w5 J
| MCASP_PIN_ACLKX
" O4 k( e8 K7 M% L| MCASP_PIN_AHCLKX# ]+ w$ v- s* V2 U/ [5 V
| MCASP_PIN_AXR(MCASP_XSER_RX));
/* Enable error interrupts for McASP */
3 B7 W" t: Q. T0 P1 y, m& ?McASPTxIntEnable(SOC_MCASP_0_CTRL_REGS, MCASP_TX_DMAERROR
8 N3 \* O9 g: T| MCASP_TX_CLKFAIL
' ]! x0 O: _0 r| MCASP_TX_SYNCERROR
+ v2 M; X& a6 U| MCASP_TX_UNDERRUN);
McASPRxIntEnable(SOC_MCASP_0_CTRL_REGS, MCASP_RX_DMAERROR
) O/ E7 P$ [$ Z9 |7 S, G| MCASP_RX_CLKFAIL( ]; X' t! M5 z: t. @! ]
| MCASP_RX_SYNCERROR / T: m) [7 s9 T! m* M3 R
| MCASP_RX_OVERRUN);  k: d. p* @: B
}
static void I2SDataTxRxActivate(void)) k% G' O" c9 s5 i
{1 q: J. u5 R5 M2 B- r7 B
/* Start the clocks */
+ R  H* A9 X2 E. zMcASPRxClkStart(SOC_MCASP_0_CTRL_REGS, MCASP_RX_CLK_EXTERNAL);
6 L5 P8 z2 n6 [3 L( s3 u" |6 iMcASPTxClkStart(SOC_MCASP_0_CTRL_REGS, MCASP_TX_CLK_INTERNAL);
/* Enable EDMA for the transfer */
( R, K3 K5 v4 `6 K# f* QEDMA3EnableTransfer(SOC_EDMA30CC_0_REGS, EDMA3_CHA_MCASP0_RX,9 I7 e9 q8 P; X2 X
EDMA3_TRIG_MODE_EVENT);: @7 d, E& q' `! |, i  F! F$ O6 T
EDMA3EnableTransfer(SOC_EDMA30CC_0_REGS, / Y+ A8 X6 N# {
EDMA3_CHA_MCASP0_TX, EDMA3_TRIG_MODE_EVENT);
/* Activate the serializers */
7 r0 w4 H# a! @  V8 tMcASPRxSerActivate(SOC_MCASP_0_CTRL_REGS);
! n  t1 T2 S: [McASPTxSerActivate(SOC_MCASP_0_CTRL_REGS);
/* make sure that the XDATA bit is cleared to zero */) U9 b3 L' _5 T! y; @9 u$ C9 G% V  t
while(McASPTxStatusGet(SOC_MCASP_0_CTRL_REGS) & MCASP_TX_STAT_DATAREADY);
/* Activate the state machines */( F2 y9 K$ O0 u3 |
McASPRxEnable(SOC_MCASP_0_CTRL_REGS);% y- _6 p7 K9 i1 f+ U8 |. |
McASPTxEnable(SOC_MCASP_0_CTRL_REGS);
! L$ Y+ q- u3 r3 E0 P$ w}

  C) h, y2 ~5 A2 o, _9 V* d
请问:问题出在哪了,时钟按照这样配是否有错。
另外我看XDATA一直是0,接收的rxbuf0,1,2里有一般全是FFFF一半全是0.

+ \6 \- H' c) }" X1 k




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