嵌入式开发者社区

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

作者: wapdasta    时间: 2018-11-7 13:28
标题: MCASP自环配置。
我项目上用OMAPL138的板子MCASP的引脚都是链接的FPGA,所以在FPGA这端设置的MCASP自环。把axr0接收到的通过axr1发回去。
部分代码如下
input mcasp_afsx,
, D1 ]6 Q" p  @7 X( N/ Hinput mcasp_ahclkx,
* N* A9 K( L* ^$ a% A: Finput mcasp_aclkx,1 y- h1 Q3 X/ g1 k: i/ s! R& _
input axr0,3 U3 S4 X% f, f' X
/ O$ [! v( f0 |/ H, _# L/ p
output mcasp_afsr,' P2 \0 Q+ X- y. U3 I$ M! u
output mcasp_ahclkr,* G8 _; w* r4 Q$ z) X$ W
output mcasp_aclkr,8 @- m  B! Z$ \/ l  N& x- ]
output axr1,( @/ y1 l: l  P1 |4 n1 Q
assign mcasp_afsr = mcasp_afsx;
2 T1 r: k9 g; ^. {7 t# Y8 d, p' @  |4 aassign mcasp_aclkr = mcasp_aclkx;4 x) ?! }. O( z; |4 n2 z! f7 K
assign mcasp_ahclkr = mcasp_ahclkx;
- ], W; Z, ?8 X% s/ q) l2 Eassign axr1 = axr0;

! |" r6 `, ^! S* H9 w/ s
# q7 M6 U! A& I" y$ |' t, `( a; \
在OMAPL138这端,通过axr0接口发固定的数,axr1接收。
在配置MACASP的时候,发送全部取内部时钟,接收全部取外部时钟。
一直循环发送,但是接收不到。在FPGA端也没有看到时钟和信号的波形。
部分代码如下,关于edma3的部分未做变化。

( U0 p. P+ H( S, i0 K5 o
static void McASPI2SConfigure(void)
! X! q+ I6 ^: q, w1 \{, G& k4 @4 `1 z; R
McASPRxReset(SOC_MCASP_0_CTRL_REGS);
! D5 h6 p* ~8 C, dMcASPTxReset(SOC_MCASP_0_CTRL_REGS);
/* Enable the FIFOs for DMA transfer */
, q, F' m$ K# EMcASPReadFifoEnable(SOC_MCASP_0_FIFO_REGS, 1, 1);. z' r" ~  O" f
McASPWriteFifoEnable(SOC_MCASP_0_FIFO_REGS, 1, 1);
/* Set I2S format in the transmitter/receiver format units */
( o$ x% Q$ K/ `/ k+ X# m$ FMcASPRxFmtI2SSet(SOC_MCASP_0_CTRL_REGS, WORD_SIZE, SLOT_SIZE,
, m7 b" D) b" `& O% ^% E9 bMCASP_RX_MODE_DMA);+ x) a* N* Y4 r" I1 M; o
McASPTxFmtI2SSet(SOC_MCASP_0_CTRL_REGS, WORD_SIZE, SLOT_SIZE,# |/ F% \$ p' G" j1 R
MCASP_TX_MODE_DMA);
/* Configure the frame sync. I2S shall work in TDM format with 2 slots */
* t+ }3 z$ `- TMcASPRxFrameSyncCfg(SOC_MCASP_0_CTRL_REGS, 2, MCASP_RX_FS_WIDTH_WORD,
0 P# F5 D" P& U! i' M* s! RMCASP_RX_FS_EXT_BEGIN_ON_FALL_EDGE);$ I# U, l4 A# I* f4 w! D; ?' b1 T
McASPTxFrameSyncCfg(SOC_MCASP_0_CTRL_REGS, 2, MCASP_TX_FS_WIDTH_WORD, 8 Z# ^2 I$ m$ Y) l  Z
MCASP_TX_FS_INT_BEGIN_ON_RIS_EDGE);
/* configure the clock for receiver */4 P/ x2 r3 E( O" q0 D
McASPRxClkCfg(SOC_MCASP_0_CTRL_REGS, MCASP_RX_CLK_EXTERNAL, 0, 0);4 S6 W3 f* u, h: _6 e# K6 V
McASPRxClkPolaritySet(SOC_MCASP_0_CTRL_REGS, MCASP_RX_CLK_POL_RIS_EDGE); ! H% ^; Q0 \: j0 N1 _8 \9 G
McASPRxClkCheckConfig(SOC_MCASP_0_CTRL_REGS, MCASP_RX_CLKCHCK_DIV32,4 E! y8 M$ \8 y) [# m: X
0x00, 0xFF);
/* configure the clock for transmitter */0 P  A5 x4 k& A9 O5 F
McASPTxClkCfg(SOC_MCASP_0_CTRL_REGS, MCASP_TX_CLK_INTERNAL, 11, 1);6 ]# O! O5 i* x4 T6 [! f5 T! e
McASPTxClkPolaritySet(SOC_MCASP_0_CTRL_REGS, MCASP_TX_CLK_POL_FALL_EDGE);
0 R$ \! l: G( T' b2 q# |: D! PMcASPTxClkCheckConfig(SOC_MCASP_0_CTRL_REGS, MCASP_TX_CLKCHCK_DIV32,
% x# g9 |8 z$ ~/ X/ O) }6 Y0x00, 0xFF);
; k0 ]8 G) B8 [/ L' [
7 J/ [. n: Z6 W9 u7 `9 X3 I3 r/* Enable synchronization of RX and TX sections */ - X4 X# j) N3 M0 k4 D
McASPTxRxClkSyncEnable(SOC_MCASP_0_CTRL_REGS);
/* Enable the transmitter/receiver slots. I2S uses 2 slots */* B; V5 j! ~% ^, Y* m2 h
McASPRxTimeSlotSet(SOC_MCASP_0_CTRL_REGS, I2S_SLOTS);
( J" e7 A: ^, n2 p/ e; EMcASPTxTimeSlotSet(SOC_MCASP_0_CTRL_REGS, I2S_SLOTS);
/*
1 ?5 B) P: A; J" i# L6 b# `** Set the serializers, Currently only one serializer is set as5 \7 a+ X! f3 g1 z
** transmitter and one serializer as receiver.
, [- M5 H  B3 B* R5 h*/
: l' u: H. t4 y3 a* t: g: w& SMcASPSerializerRxSet(SOC_MCASP_0_CTRL_REGS, MCASP_XSER_RX);
* p3 `/ d1 `) M9 R0 m5 y* u4 cMcASPSerializerTxSet(SOC_MCASP_0_CTRL_REGS, MCASP_XSER_TX);
/*
: f! Y+ x2 j- b7 U% L** Configure the McASP pins . F* m! j; Z! _3 h
** Input - Frame Sync, Clock and Serializer Rx* M$ n0 |" I! |3 I8 W9 L
** Output - Serializer Tx is connected to the input of the codec 4 c& w; ~5 Z, C% ~
*/
: F% M+ k2 {. }; i0 C: ^McASPPinMcASPSet(SOC_MCASP_0_CTRL_REGS, 0xFFFFFFFF);
1 B% d% O* H, I; l( lMcASPPinDirOutputSet(SOC_MCASP_0_CTRL_REGS,MCASP_PIN_AXR(MCASP_XSER_TX));
9 E0 U& J+ E& }9 t  KMcASPPinDirInputSet(SOC_MCASP_0_CTRL_REGS, MCASP_PIN_AFSX: o9 W9 ?1 C" i# X7 f
| MCASP_PIN_ACLKX, e( F& V/ \3 H/ i" A& \% r6 U6 S
| MCASP_PIN_AHCLKX8 a% ^$ g* D. R+ p3 i: S
| MCASP_PIN_AXR(MCASP_XSER_RX));
/* Enable error interrupts for McASP */0 g5 Z" M8 Y# ~* R/ D
McASPTxIntEnable(SOC_MCASP_0_CTRL_REGS, MCASP_TX_DMAERROR 5 }& }" N2 X% j+ o1 }2 Q, N
| MCASP_TX_CLKFAIL , K. b. l& O( H& U3 f
| MCASP_TX_SYNCERROR
: C# E* n; M0 k! c& N, y+ c4 G| MCASP_TX_UNDERRUN);
McASPRxIntEnable(SOC_MCASP_0_CTRL_REGS, MCASP_RX_DMAERROR
: j. |6 Z, U5 z0 U7 p| MCASP_RX_CLKFAIL/ B: a! D& d0 N/ o
| MCASP_RX_SYNCERROR
+ ^$ J+ R+ h3 i2 c' D- Z| MCASP_RX_OVERRUN);
! ]1 \+ X' J8 b2 L7 M}
static void I2SDataTxRxActivate(void)& p- |, B9 P, o4 S
{' u3 h& ~& f# e  L1 R
/* Start the clocks */
; A0 E! G% P  j& g# v/ A& e& z/ rMcASPRxClkStart(SOC_MCASP_0_CTRL_REGS, MCASP_RX_CLK_EXTERNAL);
( ]% G; C9 l. m. G! Q. N, mMcASPTxClkStart(SOC_MCASP_0_CTRL_REGS, MCASP_TX_CLK_INTERNAL);
/* Enable EDMA for the transfer */) Z3 b2 J( X6 W/ w& N! P
EDMA3EnableTransfer(SOC_EDMA30CC_0_REGS, EDMA3_CHA_MCASP0_RX,; x5 ~/ I% o6 e8 J
EDMA3_TRIG_MODE_EVENT);+ z! ]3 Q5 |$ o; D; G5 O$ L
EDMA3EnableTransfer(SOC_EDMA30CC_0_REGS, : |6 V% H; w! n/ N# g  L4 j
EDMA3_CHA_MCASP0_TX, EDMA3_TRIG_MODE_EVENT);
/* Activate the serializers */, j  f8 ?5 g% U' {! a1 s. o
McASPRxSerActivate(SOC_MCASP_0_CTRL_REGS);
# O3 Q$ t, ~" j- C- R7 m) ^9 TMcASPTxSerActivate(SOC_MCASP_0_CTRL_REGS);
/* make sure that the XDATA bit is cleared to zero */" `3 ^& R7 m7 Q$ H2 q
while(McASPTxStatusGet(SOC_MCASP_0_CTRL_REGS) & MCASP_TX_STAT_DATAREADY);
/* Activate the state machines */
: X& v% F/ J2 s, UMcASPRxEnable(SOC_MCASP_0_CTRL_REGS);
! s8 r2 O. f! Y9 u1 {% O4 WMcASPTxEnable(SOC_MCASP_0_CTRL_REGS);
" p/ Q8 Z8 X( t; ~}

; Q5 w' ^  g0 ~( H- c
请问:问题出在哪了,时钟按照这样配是否有错。
另外我看XDATA一直是0,接收的rxbuf0,1,2里有一般全是FFFF一半全是0.

+ [3 ?1 ~1 C" P1 o+ K7 c+ d




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