嵌入式开发者社区

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

作者: wapdasta    时间: 2018-11-7 13:28
标题: MCASP自环配置。
我项目上用OMAPL138的板子MCASP的引脚都是链接的FPGA,所以在FPGA这端设置的MCASP自环。把axr0接收到的通过axr1发回去。
部分代码如下
input mcasp_afsx,) ]7 ?  m" [7 j) ^; H! q9 p
input mcasp_ahclkx,, D6 ]) W* K. M8 t$ }* ^. @9 f
input mcasp_aclkx,
3 B+ [* S; d# x3 f$ t0 S: L: E) ginput axr0,
8 j6 @' g) d3 G& `$ o5 P
& c) ?9 y' v% f% k) B6 ?4 b9 koutput mcasp_afsr,) H" E7 V! |0 H" f! \
output mcasp_ahclkr,
4 d; u7 `) n* [; v- I! `. eoutput mcasp_aclkr,
5 b+ S8 j. i7 U( T( m* X6 `% zoutput axr1,- n2 y5 L- c* w( O6 W8 b' Q* d
assign mcasp_afsr = mcasp_afsx;
! S$ X$ X. N# m9 xassign mcasp_aclkr = mcasp_aclkx;% y, S% n: u. r( @- l4 T
assign mcasp_ahclkr = mcasp_ahclkx;
% }7 n: o7 Q; i  F% s9 Z7 ~; U6 lassign axr1 = axr0;

5 i6 p, y: k) {2 u" f, A
* z" A+ m( s% \% d# l4 Z: C2 }+ d
在OMAPL138这端,通过axr0接口发固定的数,axr1接收。
在配置MACASP的时候,发送全部取内部时钟,接收全部取外部时钟。
一直循环发送,但是接收不到。在FPGA端也没有看到时钟和信号的波形。
部分代码如下,关于edma3的部分未做变化。
6 d9 \4 ]6 X! A& m/ ~
static void McASPI2SConfigure(void)9 L3 t7 j8 E: [3 u' r0 ]# [) m1 }
{
6 b7 f  }2 B' y, eMcASPRxReset(SOC_MCASP_0_CTRL_REGS);; L/ O( S1 n1 f( K
McASPTxReset(SOC_MCASP_0_CTRL_REGS);
/* Enable the FIFOs for DMA transfer */
$ j! ?: Y# W1 _' U4 P7 n; p2 oMcASPReadFifoEnable(SOC_MCASP_0_FIFO_REGS, 1, 1);
! c# T- y3 Y$ KMcASPWriteFifoEnable(SOC_MCASP_0_FIFO_REGS, 1, 1);
/* Set I2S format in the transmitter/receiver format units */7 E$ b) B1 n: y( R! g% h4 d5 h( n
McASPRxFmtI2SSet(SOC_MCASP_0_CTRL_REGS, WORD_SIZE, SLOT_SIZE,
+ L, S+ [' {& r9 NMCASP_RX_MODE_DMA);5 [0 Q3 u4 ^6 A1 E5 R4 m
McASPTxFmtI2SSet(SOC_MCASP_0_CTRL_REGS, WORD_SIZE, SLOT_SIZE,
) ^4 Q9 H5 D& S- A- FMCASP_TX_MODE_DMA);
/* Configure the frame sync. I2S shall work in TDM format with 2 slots */
7 z! w. S  B- Z) N% ~2 FMcASPRxFrameSyncCfg(SOC_MCASP_0_CTRL_REGS, 2, MCASP_RX_FS_WIDTH_WORD, 9 u$ L2 C: C* V# C
MCASP_RX_FS_EXT_BEGIN_ON_FALL_EDGE);
, u# [' }& B2 Z3 B) M4 rMcASPTxFrameSyncCfg(SOC_MCASP_0_CTRL_REGS, 2, MCASP_TX_FS_WIDTH_WORD, 7 K  ]* ?6 a% S& \; t8 A
MCASP_TX_FS_INT_BEGIN_ON_RIS_EDGE);
/* configure the clock for receiver */2 d0 V# O0 Z; _/ ?7 U! m! w8 T% S
McASPRxClkCfg(SOC_MCASP_0_CTRL_REGS, MCASP_RX_CLK_EXTERNAL, 0, 0);1 o* V# ~* X2 ^: D9 Z
McASPRxClkPolaritySet(SOC_MCASP_0_CTRL_REGS, MCASP_RX_CLK_POL_RIS_EDGE);
. k- O  a, `! R; S$ U3 VMcASPRxClkCheckConfig(SOC_MCASP_0_CTRL_REGS, MCASP_RX_CLKCHCK_DIV32,; ?! o0 E4 K5 d
0x00, 0xFF);
/* configure the clock for transmitter */; \5 @7 \0 i; K" I6 `& M
McASPTxClkCfg(SOC_MCASP_0_CTRL_REGS, MCASP_TX_CLK_INTERNAL, 11, 1);
6 D7 ~4 P5 r* uMcASPTxClkPolaritySet(SOC_MCASP_0_CTRL_REGS, MCASP_TX_CLK_POL_FALL_EDGE);
" T) k5 b& }' V( ?9 N7 XMcASPTxClkCheckConfig(SOC_MCASP_0_CTRL_REGS, MCASP_TX_CLKCHCK_DIV32,
1 C$ D8 k1 Y, T" B0x00, 0xFF);9 k$ j* n  P. p, u
/ ]' y9 V2 p( E& l* Z
/* Enable synchronization of RX and TX sections */ ( Z! a+ H# @" ~) f* x/ ?
McASPTxRxClkSyncEnable(SOC_MCASP_0_CTRL_REGS);
/* Enable the transmitter/receiver slots. I2S uses 2 slots */
4 p! s8 w4 ~4 C' z- ?, zMcASPRxTimeSlotSet(SOC_MCASP_0_CTRL_REGS, I2S_SLOTS);
' q" s6 Z0 E0 l: o- c, dMcASPTxTimeSlotSet(SOC_MCASP_0_CTRL_REGS, I2S_SLOTS);
/** ^% m- |9 ^7 A- H& G4 n& z9 _; F
** Set the serializers, Currently only one serializer is set as
, z3 r' R0 [2 D& o5 W% s** transmitter and one serializer as receiver.1 U( `" y6 P4 Y9 z1 d
*/
7 q6 p: ~1 F$ F% W- \: u) UMcASPSerializerRxSet(SOC_MCASP_0_CTRL_REGS, MCASP_XSER_RX);: Q& H7 b, c8 Q5 m! Y
McASPSerializerTxSet(SOC_MCASP_0_CTRL_REGS, MCASP_XSER_TX);
/*
. s  q. d5 Y8 S** Configure the McASP pins
) I8 }  |* x0 r! {, M. ~  j  g** Input - Frame Sync, Clock and Serializer Rx
0 g  Y' [( k; B6 T' p** Output - Serializer Tx is connected to the input of the codec 8 e" Y& a5 n5 s, t7 k( c$ ^* C
*/
! }. c- T0 [/ m& P- n9 I6 zMcASPPinMcASPSet(SOC_MCASP_0_CTRL_REGS, 0xFFFFFFFF);% W  Q) F% `' X# J: o3 @
McASPPinDirOutputSet(SOC_MCASP_0_CTRL_REGS,MCASP_PIN_AXR(MCASP_XSER_TX));
: X9 _" U& U; |0 S/ kMcASPPinDirInputSet(SOC_MCASP_0_CTRL_REGS, MCASP_PIN_AFSX( u3 V% M" F% b4 f1 R2 g6 ?% H
| MCASP_PIN_ACLKX4 X( o! s! u1 F3 E
| MCASP_PIN_AHCLKX
0 e) q2 u! H+ ?/ ^| MCASP_PIN_AXR(MCASP_XSER_RX));
/* Enable error interrupts for McASP */! x6 G- M0 X" c) ]
McASPTxIntEnable(SOC_MCASP_0_CTRL_REGS, MCASP_TX_DMAERROR
: a1 K1 ?  C5 {$ U# a| MCASP_TX_CLKFAIL / I# |" U- {" R9 N- g
| MCASP_TX_SYNCERROR7 P) D7 `5 L$ m, J# K# U
| MCASP_TX_UNDERRUN);
McASPRxIntEnable(SOC_MCASP_0_CTRL_REGS, MCASP_RX_DMAERROR
# ]; `4 X( v4 ]' h  r| MCASP_RX_CLKFAIL. }4 {2 w: X  y. V; B& m# D/ h
| MCASP_RX_SYNCERROR
  |2 z4 m# r! J; T! Z| MCASP_RX_OVERRUN);
1 |/ E# c6 p1 c: n& a! F}
static void I2SDataTxRxActivate(void)$ p* C6 g4 L4 H9 D$ B
{: R! @# }  a) N7 h+ @8 o! k' h) {" R
/* Start the clocks */' X0 U+ b5 ^8 `) \+ Z
McASPRxClkStart(SOC_MCASP_0_CTRL_REGS, MCASP_RX_CLK_EXTERNAL);0 m3 H! c) C4 E! N
McASPTxClkStart(SOC_MCASP_0_CTRL_REGS, MCASP_TX_CLK_INTERNAL);
/* Enable EDMA for the transfer *// B1 x+ d+ O0 K, ^" M! t& q
EDMA3EnableTransfer(SOC_EDMA30CC_0_REGS, EDMA3_CHA_MCASP0_RX,, d1 E: J2 f9 q. h
EDMA3_TRIG_MODE_EVENT);
! l1 o4 @. P1 Q- ?8 |: S- f4 UEDMA3EnableTransfer(SOC_EDMA30CC_0_REGS, / J  O- W! k. f: }# s# G2 E" L
EDMA3_CHA_MCASP0_TX, EDMA3_TRIG_MODE_EVENT);
/* Activate the serializers */  b4 S5 Y7 D: F) E* p
McASPRxSerActivate(SOC_MCASP_0_CTRL_REGS);9 q' A7 n  s! F* e0 u% s: E1 ?) Y' W) q
McASPTxSerActivate(SOC_MCASP_0_CTRL_REGS);
/* make sure that the XDATA bit is cleared to zero */
. j9 \# X4 l! F0 L* I) ewhile(McASPTxStatusGet(SOC_MCASP_0_CTRL_REGS) & MCASP_TX_STAT_DATAREADY);
/* Activate the state machines */
$ w' i- b9 j( {/ x+ l' n2 d1 Y  f, T' SMcASPRxEnable(SOC_MCASP_0_CTRL_REGS);
8 v4 W$ W! _& v1 BMcASPTxEnable(SOC_MCASP_0_CTRL_REGS);
0 o! f. ?# j( a}
! L: p4 w1 x. Z6 x- I
请问:问题出在哪了,时钟按照这样配是否有错。
另外我看XDATA一直是0,接收的rxbuf0,1,2里有一般全是FFFF一半全是0.

5 u/ p5 q) Z5 _  U* r" `* i




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