嵌入式开发者社区

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

作者: wapdasta    时间: 2018-11-7 13:28
标题: MCASP自环配置。
我项目上用OMAPL138的板子MCASP的引脚都是链接的FPGA,所以在FPGA这端设置的MCASP自环。把axr0接收到的通过axr1发回去。
部分代码如下
input mcasp_afsx,* D4 ]! I) Q& n0 e
input mcasp_ahclkx,
0 q" C5 {5 _7 P/ I% i+ Iinput mcasp_aclkx,) O& P- x4 M: B+ ?& m+ c5 A4 i& \
input axr0,
* u0 K0 a2 S9 z2 C5 O" t
" Y6 ~: l2 z2 routput mcasp_afsr,
+ B- t) X" l/ o0 Houtput mcasp_ahclkr,6 y- A# J4 a% d* X' C! p3 B
output mcasp_aclkr,, _9 O- E! L# Z! ]9 |1 m" i" R
output axr1,
4 D) ~/ @7 q8 q9 f2 ^0 T
assign mcasp_afsr = mcasp_afsx;" ?* J/ s4 w) [8 E, }3 }
assign mcasp_aclkr = mcasp_aclkx;$ ~, V) j/ H4 Y( V, S+ C: v
assign mcasp_ahclkr = mcasp_ahclkx;
; T* D0 o$ q) ]; R3 iassign axr1 = axr0;
& R+ q6 z) E  I1 @
# Z0 h/ d) }# W# Q8 |/ u& S
在OMAPL138这端,通过axr0接口发固定的数,axr1接收。
在配置MACASP的时候,发送全部取内部时钟,接收全部取外部时钟。
一直循环发送,但是接收不到。在FPGA端也没有看到时钟和信号的波形。
部分代码如下,关于edma3的部分未做变化。

7 N4 F5 J% @$ |! ?, K" T* {
static void McASPI2SConfigure(void)0 [! B( E/ e) i6 L0 m
{2 t9 a9 w3 s, T. Y& c  T
McASPRxReset(SOC_MCASP_0_CTRL_REGS);+ ]/ a: W4 @; s1 _/ S
McASPTxReset(SOC_MCASP_0_CTRL_REGS);
/* Enable the FIFOs for DMA transfer */
, u5 n/ ?2 l1 x" R( s5 ZMcASPReadFifoEnable(SOC_MCASP_0_FIFO_REGS, 1, 1);
6 n+ y1 c: T1 P) y# L1 i! R! T$ J& S* vMcASPWriteFifoEnable(SOC_MCASP_0_FIFO_REGS, 1, 1);
/* Set I2S format in the transmitter/receiver format units */
2 S- n  Y6 B$ r. V9 r! IMcASPRxFmtI2SSet(SOC_MCASP_0_CTRL_REGS, WORD_SIZE, SLOT_SIZE,
0 P5 N  z( T: I: lMCASP_RX_MODE_DMA);3 v4 R& t6 H) x" n" g3 ~& x
McASPTxFmtI2SSet(SOC_MCASP_0_CTRL_REGS, WORD_SIZE, SLOT_SIZE,
, F$ o& z/ o6 [  U  _2 h. TMCASP_TX_MODE_DMA);
/* Configure the frame sync. I2S shall work in TDM format with 2 slots */' i2 A2 w- o' Z3 v- H: p
McASPRxFrameSyncCfg(SOC_MCASP_0_CTRL_REGS, 2, MCASP_RX_FS_WIDTH_WORD, 3 e% z. ?7 u4 Y- y: J
MCASP_RX_FS_EXT_BEGIN_ON_FALL_EDGE);
3 F, R: C! C$ q2 U6 ~7 RMcASPTxFrameSyncCfg(SOC_MCASP_0_CTRL_REGS, 2, MCASP_TX_FS_WIDTH_WORD, 0 T, Y, x8 |3 B# A
MCASP_TX_FS_INT_BEGIN_ON_RIS_EDGE);
/* configure the clock for receiver */, ], `' T$ V( e; @' Q5 p
McASPRxClkCfg(SOC_MCASP_0_CTRL_REGS, MCASP_RX_CLK_EXTERNAL, 0, 0);5 n9 D& A& R1 M' W6 W: t
McASPRxClkPolaritySet(SOC_MCASP_0_CTRL_REGS, MCASP_RX_CLK_POL_RIS_EDGE); % D) Q  c" J8 D
McASPRxClkCheckConfig(SOC_MCASP_0_CTRL_REGS, MCASP_RX_CLKCHCK_DIV32,
- q! P; Q1 Z" y- q" _  a) x0 q0x00, 0xFF);
/* configure the clock for transmitter */
  k, i- E$ H6 @" L9 v* `6 MMcASPTxClkCfg(SOC_MCASP_0_CTRL_REGS, MCASP_TX_CLK_INTERNAL, 11, 1);& M' g7 @# v, K- W7 `: J  W  ^! O
McASPTxClkPolaritySet(SOC_MCASP_0_CTRL_REGS, MCASP_TX_CLK_POL_FALL_EDGE); / W8 c6 w3 w& l6 [" ^1 I
McASPTxClkCheckConfig(SOC_MCASP_0_CTRL_REGS, MCASP_TX_CLKCHCK_DIV32,
6 ^# g: u( w( Z4 F) k) B: C0x00, 0xFF);$ ?' A. p3 X- _  u

$ b: O  \4 f) c/* Enable synchronization of RX and TX sections */
/ I/ e0 F" t9 kMcASPTxRxClkSyncEnable(SOC_MCASP_0_CTRL_REGS);
/* Enable the transmitter/receiver slots. I2S uses 2 slots */
0 Q% f. `0 Z/ b: w( d! fMcASPRxTimeSlotSet(SOC_MCASP_0_CTRL_REGS, I2S_SLOTS);
4 \" D/ `/ [/ k+ |: n4 dMcASPTxTimeSlotSet(SOC_MCASP_0_CTRL_REGS, I2S_SLOTS);
/*& o  A( A1 M" C1 {1 \& O/ t
** Set the serializers, Currently only one serializer is set as
- R7 c( F- @- ^* t/ B** transmitter and one serializer as receiver.
" y  K/ `3 p- K# J6 P*/
2 g- j. w# v$ L8 x/ N: lMcASPSerializerRxSet(SOC_MCASP_0_CTRL_REGS, MCASP_XSER_RX);. n2 }1 n4 ]( c/ f$ l1 Y: B7 H
McASPSerializerTxSet(SOC_MCASP_0_CTRL_REGS, MCASP_XSER_TX);
/*
! ^9 r4 s/ E: C9 C7 a3 L** Configure the McASP pins / `0 x/ y3 r/ H2 E
** Input - Frame Sync, Clock and Serializer Rx
) X: b4 I. L- R; O9 e, G** Output - Serializer Tx is connected to the input of the codec ; H8 b0 d2 r4 _
*/) x! Q' w, Y0 b* ^8 X/ k
McASPPinMcASPSet(SOC_MCASP_0_CTRL_REGS, 0xFFFFFFFF);
, ?7 g' {: [9 g8 U, f: D* nMcASPPinDirOutputSet(SOC_MCASP_0_CTRL_REGS,MCASP_PIN_AXR(MCASP_XSER_TX));8 b" t' L; \+ F/ ]8 V$ Z% e5 e& P! u
McASPPinDirInputSet(SOC_MCASP_0_CTRL_REGS, MCASP_PIN_AFSX! W  _5 l: c/ m  @- V8 \
| MCASP_PIN_ACLKX% B# m5 b1 R/ M% o* g
| MCASP_PIN_AHCLKX
4 T+ v  _( q. K0 Y! W4 C| MCASP_PIN_AXR(MCASP_XSER_RX));
/* Enable error interrupts for McASP */9 m* X9 a+ T- t% j9 P% c) U) M
McASPTxIntEnable(SOC_MCASP_0_CTRL_REGS, MCASP_TX_DMAERROR 1 z. O5 N- G* f6 R: Y) t
| MCASP_TX_CLKFAIL
4 e" g5 j! {; K| MCASP_TX_SYNCERROR. u* c7 h2 Q+ j9 j1 a; y4 X1 F6 g
| MCASP_TX_UNDERRUN);
McASPRxIntEnable(SOC_MCASP_0_CTRL_REGS, MCASP_RX_DMAERROR ' F1 h# _1 W! W2 }! c" [% K% U
| MCASP_RX_CLKFAIL) @& t3 n6 d3 h6 b6 L$ a
| MCASP_RX_SYNCERROR ( S2 b" g) ?0 B+ V& W
| MCASP_RX_OVERRUN);' \9 \) f9 T1 w' T+ g( M
}
static void I2SDataTxRxActivate(void)
. Z5 l1 y# r) E% \{% U$ A+ {1 a9 L, K* E/ f& x4 y
/* Start the clocks */
* o, V; e, L, |+ U) o3 VMcASPRxClkStart(SOC_MCASP_0_CTRL_REGS, MCASP_RX_CLK_EXTERNAL);
# f" \8 Q9 F" b3 E# m  e- j; W& bMcASPTxClkStart(SOC_MCASP_0_CTRL_REGS, MCASP_TX_CLK_INTERNAL);
/* Enable EDMA for the transfer */0 b( J% ~7 N# F2 s3 p% i7 h' q
EDMA3EnableTransfer(SOC_EDMA30CC_0_REGS, EDMA3_CHA_MCASP0_RX,' ~' ~9 r  n( y
EDMA3_TRIG_MODE_EVENT);
7 G" b+ j" {) o6 }* B" j" ]8 TEDMA3EnableTransfer(SOC_EDMA30CC_0_REGS, $ a* b7 n9 ?5 M  ~; n( p) Q
EDMA3_CHA_MCASP0_TX, EDMA3_TRIG_MODE_EVENT);
/* Activate the serializers */0 z2 d' ?$ |9 D* `; J" h
McASPRxSerActivate(SOC_MCASP_0_CTRL_REGS);
! `) k5 Y8 x7 a7 ZMcASPTxSerActivate(SOC_MCASP_0_CTRL_REGS);
/* make sure that the XDATA bit is cleared to zero */
! }* k* O+ O1 f( p- K& M0 c4 s  g7 Cwhile(McASPTxStatusGet(SOC_MCASP_0_CTRL_REGS) & MCASP_TX_STAT_DATAREADY);
/* Activate the state machines */* V5 g0 A9 G6 G+ c9 ^1 Y, ]9 m
McASPRxEnable(SOC_MCASP_0_CTRL_REGS);
5 u% t* P0 D3 L) `8 I% L! HMcASPTxEnable(SOC_MCASP_0_CTRL_REGS);: B% l! b1 `) J2 e: z
}
- _9 c! {" m( H7 F
请问:问题出在哪了,时钟按照这样配是否有错。
另外我看XDATA一直是0,接收的rxbuf0,1,2里有一般全是FFFF一半全是0.
0 o. x: C% }6 p7 U. b! I: F0 A# |





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