嵌入式开发者社区

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

作者: wapdasta    时间: 2018-11-7 13:28
标题: MCASP自环配置。
我项目上用OMAPL138的板子MCASP的引脚都是链接的FPGA,所以在FPGA这端设置的MCASP自环。把axr0接收到的通过axr1发回去。
部分代码如下
input mcasp_afsx,
/ ^4 P6 [* {2 R: [input mcasp_ahclkx,4 ?5 D5 {, V" ?! R
input mcasp_aclkx,
' k7 O# }# x" [input axr0,1 e2 e8 O6 O6 z2 U, u

9 |% v- H# {) t; U4 l' soutput mcasp_afsr,
# e( ]$ U! r" u! Joutput mcasp_ahclkr,
& a2 m9 }1 Y, Q! _$ C6 i9 zoutput mcasp_aclkr,( ^$ O1 s$ N; P% m2 j
output axr1,
# [; O/ o, a& g
assign mcasp_afsr = mcasp_afsx;3 k) d, D8 F( a. h) v
assign mcasp_aclkr = mcasp_aclkx;4 B* t- ^5 X& h( h) T- i
assign mcasp_ahclkr = mcasp_ahclkx;
2 l7 o& H2 o* P% j  x+ e/ Lassign axr1 = axr0;
; u5 A7 [% }: _

3 n9 a; t" O3 x
在OMAPL138这端,通过axr0接口发固定的数,axr1接收。
在配置MACASP的时候,发送全部取内部时钟,接收全部取外部时钟。
一直循环发送,但是接收不到。在FPGA端也没有看到时钟和信号的波形。
部分代码如下,关于edma3的部分未做变化。

$ }; ?- q' [2 ~+ S' H+ @" V: s7 z
static void McASPI2SConfigure(void)
: U$ `. W4 J5 Z{7 |$ q8 @  `" Q' f& a& y
McASPRxReset(SOC_MCASP_0_CTRL_REGS);/ h9 l/ P+ r8 u# f: g
McASPTxReset(SOC_MCASP_0_CTRL_REGS);
/* Enable the FIFOs for DMA transfer */
( p7 m$ m4 J4 Z! ~- _+ b4 IMcASPReadFifoEnable(SOC_MCASP_0_FIFO_REGS, 1, 1);! e; l1 @  u/ {" O4 n$ ^: U9 N( Y
McASPWriteFifoEnable(SOC_MCASP_0_FIFO_REGS, 1, 1);
/* Set I2S format in the transmitter/receiver format units */2 d3 H' Z9 _+ o$ G+ g$ C, ]# v
McASPRxFmtI2SSet(SOC_MCASP_0_CTRL_REGS, WORD_SIZE, SLOT_SIZE,
! _# P$ z5 I# G( Y8 z% D/ F4 q- MMCASP_RX_MODE_DMA);
9 @' d& N# e6 ]4 ^9 W6 y8 u. fMcASPTxFmtI2SSet(SOC_MCASP_0_CTRL_REGS, WORD_SIZE, SLOT_SIZE,
* X) }+ `. [6 M- K6 u9 LMCASP_TX_MODE_DMA);
/* Configure the frame sync. I2S shall work in TDM format with 2 slots */0 N3 l8 O; I5 B3 h! K
McASPRxFrameSyncCfg(SOC_MCASP_0_CTRL_REGS, 2, MCASP_RX_FS_WIDTH_WORD,
$ ~. ?( i8 |  s" {MCASP_RX_FS_EXT_BEGIN_ON_FALL_EDGE);
4 v9 ~) g! b# [McASPTxFrameSyncCfg(SOC_MCASP_0_CTRL_REGS, 2, MCASP_TX_FS_WIDTH_WORD,
1 W8 M1 v6 v' O0 x0 pMCASP_TX_FS_INT_BEGIN_ON_RIS_EDGE);
/* configure the clock for receiver */
, W) V8 L) l& m& Z# {) J9 ~McASPRxClkCfg(SOC_MCASP_0_CTRL_REGS, MCASP_RX_CLK_EXTERNAL, 0, 0);
% Z8 c. P- V* f& b7 ~9 {McASPRxClkPolaritySet(SOC_MCASP_0_CTRL_REGS, MCASP_RX_CLK_POL_RIS_EDGE);
% R2 X  f4 |+ B5 q+ u3 aMcASPRxClkCheckConfig(SOC_MCASP_0_CTRL_REGS, MCASP_RX_CLKCHCK_DIV32,# v& B. R( b. z3 l- J
0x00, 0xFF);
/* configure the clock for transmitter */+ v, F9 ?2 A0 O/ `# D
McASPTxClkCfg(SOC_MCASP_0_CTRL_REGS, MCASP_TX_CLK_INTERNAL, 11, 1);' s: n/ V4 p# A) z. i* v* c8 t
McASPTxClkPolaritySet(SOC_MCASP_0_CTRL_REGS, MCASP_TX_CLK_POL_FALL_EDGE); 3 G$ f4 C: S# a
McASPTxClkCheckConfig(SOC_MCASP_0_CTRL_REGS, MCASP_TX_CLKCHCK_DIV32,2 P+ g1 K* n- n/ g* V. a, R- }! t: ~* F
0x00, 0xFF);
, _) N# o0 ~# v
: g9 h9 _/ n6 i! b/* Enable synchronization of RX and TX sections */ 9 h3 K6 f. J. r1 v$ L+ v2 x3 p: o
McASPTxRxClkSyncEnable(SOC_MCASP_0_CTRL_REGS);
/* Enable the transmitter/receiver slots. I2S uses 2 slots */
. g! p  X/ ^: eMcASPRxTimeSlotSet(SOC_MCASP_0_CTRL_REGS, I2S_SLOTS);3 _; s. `' g9 R
McASPTxTimeSlotSet(SOC_MCASP_0_CTRL_REGS, I2S_SLOTS);
/*
1 T' S4 V2 V2 k5 L; V) \** Set the serializers, Currently only one serializer is set as5 f& s4 u3 T: n) Q
** transmitter and one serializer as receiver.
3 S: F2 i6 x+ H9 L4 o: ~) m  F*/
4 x+ a- G& W5 Y0 `$ GMcASPSerializerRxSet(SOC_MCASP_0_CTRL_REGS, MCASP_XSER_RX);  P. ]- f. a  [# Z" D- U7 ]+ P1 O
McASPSerializerTxSet(SOC_MCASP_0_CTRL_REGS, MCASP_XSER_TX);
/*2 @, Q: A7 }5 x+ }2 ?, d  D( v7 Z
** Configure the McASP pins - ~8 |2 H  p6 ]
** Input - Frame Sync, Clock and Serializer Rx4 N; h) M* B& \5 l; I
** Output - Serializer Tx is connected to the input of the codec
/ [" H* M0 S2 X  i5 J, H, c/ S  x*/
5 a" r0 v3 @8 W8 W0 OMcASPPinMcASPSet(SOC_MCASP_0_CTRL_REGS, 0xFFFFFFFF);
5 j) B; v2 ?3 j1 k1 k( @" E" d- uMcASPPinDirOutputSet(SOC_MCASP_0_CTRL_REGS,MCASP_PIN_AXR(MCASP_XSER_TX));2 i( J  g( r2 W) _! ^- D
McASPPinDirInputSet(SOC_MCASP_0_CTRL_REGS, MCASP_PIN_AFSX% V, K# @5 K: G/ W0 O6 b4 r5 i- B& D
| MCASP_PIN_ACLKX$ A# H$ a- F7 E1 R: @  b7 N5 E
| MCASP_PIN_AHCLKX
. I# Y- I3 w* y* P| MCASP_PIN_AXR(MCASP_XSER_RX));
/* Enable error interrupts for McASP */- b4 w6 d7 v2 ?1 {8 }
McASPTxIntEnable(SOC_MCASP_0_CTRL_REGS, MCASP_TX_DMAERROR
1 b7 @% X* p; q2 `7 l; {| MCASP_TX_CLKFAIL 5 o4 O& v* i$ t/ q( j0 O5 ?$ ~: I
| MCASP_TX_SYNCERROR
. b  }; ]- c6 w% U| MCASP_TX_UNDERRUN);
McASPRxIntEnable(SOC_MCASP_0_CTRL_REGS, MCASP_RX_DMAERROR / u& f# _; L+ n1 M
| MCASP_RX_CLKFAIL
' {! F. Y& n; k- {  g" E  m4 y| MCASP_RX_SYNCERROR
: M4 S; }" W; J$ S6 T| MCASP_RX_OVERRUN);
' E: C2 I' Y8 P6 Z}
static void I2SDataTxRxActivate(void)
6 _# {; N6 C* `6 E{, @; F  n  _2 a# h2 Y' Y
/* Start the clocks */! @  P  k7 x  N1 B; E0 x; \
McASPRxClkStart(SOC_MCASP_0_CTRL_REGS, MCASP_RX_CLK_EXTERNAL);
5 x8 J) v9 T6 g& i  k; |McASPTxClkStart(SOC_MCASP_0_CTRL_REGS, MCASP_TX_CLK_INTERNAL);
/* Enable EDMA for the transfer */
& U2 K# p! i: J$ l1 g* ~EDMA3EnableTransfer(SOC_EDMA30CC_0_REGS, EDMA3_CHA_MCASP0_RX,
% c  \' I2 U$ _EDMA3_TRIG_MODE_EVENT);
# _3 {# S, \* P. HEDMA3EnableTransfer(SOC_EDMA30CC_0_REGS, ; \+ U; S) A9 ]+ G- X2 n" ]
EDMA3_CHA_MCASP0_TX, EDMA3_TRIG_MODE_EVENT);
/* Activate the serializers */+ c( N' V- s+ H0 r+ s' }; D
McASPRxSerActivate(SOC_MCASP_0_CTRL_REGS);3 z" W7 }2 j5 h5 e
McASPTxSerActivate(SOC_MCASP_0_CTRL_REGS);
/* make sure that the XDATA bit is cleared to zero */
7 L) C1 V2 B! P5 S/ b- f0 ~% Z- dwhile(McASPTxStatusGet(SOC_MCASP_0_CTRL_REGS) & MCASP_TX_STAT_DATAREADY);
/* Activate the state machines */! S8 C- Z0 ~& F. \- j
McASPRxEnable(SOC_MCASP_0_CTRL_REGS);
5 _; J1 i" a% U8 f% ?' W8 ~* mMcASPTxEnable(SOC_MCASP_0_CTRL_REGS);
7 M0 s) S' U* k4 _6 ]}
4 z6 Y1 G- a! N3 ]8 I
请问:问题出在哪了,时钟按照这样配是否有错。
另外我看XDATA一直是0,接收的rxbuf0,1,2里有一般全是FFFF一半全是0.
2 G) N* H, n1 d





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