嵌入式开发者社区

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

作者: wapdasta    时间: 2018-11-7 13:28
标题: MCASP自环配置。
我项目上用OMAPL138的板子MCASP的引脚都是链接的FPGA,所以在FPGA这端设置的MCASP自环。把axr0接收到的通过axr1发回去。
部分代码如下
input mcasp_afsx,
$ R) a8 i5 k% F& x# y1 {$ rinput mcasp_ahclkx,: s+ W+ e3 U8 H# ~/ r
input mcasp_aclkx,
& o1 e7 \$ E1 v) K, D! N2 C1 w+ ]5 finput axr0,
$ p  L; _* t- Z+ Q
: M: @2 |# E' u4 X4 J, M6 `" coutput mcasp_afsr,6 S1 E7 h. ~  f" Y8 \3 x4 ?
output mcasp_ahclkr,
! d3 h$ E5 k& D$ \/ Noutput mcasp_aclkr,
2 J4 S0 x* i1 }4 w- Poutput axr1,7 y3 `( B% U$ C( b) x9 i3 f; u
assign mcasp_afsr = mcasp_afsx;
2 p; c" g& y- n0 B( q2 X; sassign mcasp_aclkr = mcasp_aclkx;
" T: i* z$ v) v; `& L0 m- Sassign mcasp_ahclkr = mcasp_ahclkx;
, q1 O$ H' h4 t  u5 Wassign axr1 = axr0;

. v  o- h1 h) S0 G3 _$ p0 N+ t  |6 O( b
在OMAPL138这端,通过axr0接口发固定的数,axr1接收。
在配置MACASP的时候,发送全部取内部时钟,接收全部取外部时钟。
一直循环发送,但是接收不到。在FPGA端也没有看到时钟和信号的波形。
部分代码如下,关于edma3的部分未做变化。
, W2 |9 b# z) F5 s
static void McASPI2SConfigure(void)
) _$ Z5 S! L3 Y) w{  z) T) @7 o% u2 E/ T
McASPRxReset(SOC_MCASP_0_CTRL_REGS);
) F, J2 G3 I1 l5 fMcASPTxReset(SOC_MCASP_0_CTRL_REGS);
/* Enable the FIFOs for DMA transfer */) }+ Q- X8 h7 K0 ]2 E" n
McASPReadFifoEnable(SOC_MCASP_0_FIFO_REGS, 1, 1);* ^9 }  \, U  R& p- P7 z. f
McASPWriteFifoEnable(SOC_MCASP_0_FIFO_REGS, 1, 1);
/* Set I2S format in the transmitter/receiver format units */. A2 ^8 ?2 r* j& @7 x
McASPRxFmtI2SSet(SOC_MCASP_0_CTRL_REGS, WORD_SIZE, SLOT_SIZE,+ z  o5 U/ b3 O6 [3 J5 h
MCASP_RX_MODE_DMA);
* L; y, D+ w- l3 TMcASPTxFmtI2SSet(SOC_MCASP_0_CTRL_REGS, WORD_SIZE, SLOT_SIZE,% ?! r- l- b# C3 ?- p  k5 k  q- B
MCASP_TX_MODE_DMA);
/* Configure the frame sync. I2S shall work in TDM format with 2 slots */
3 j, Z2 `3 }, T$ sMcASPRxFrameSyncCfg(SOC_MCASP_0_CTRL_REGS, 2, MCASP_RX_FS_WIDTH_WORD, - ?3 `' ]% T: S
MCASP_RX_FS_EXT_BEGIN_ON_FALL_EDGE);* h+ F3 C1 \- t% h% f% n
McASPTxFrameSyncCfg(SOC_MCASP_0_CTRL_REGS, 2, MCASP_TX_FS_WIDTH_WORD,
& K! d  K0 m% h& c0 ^MCASP_TX_FS_INT_BEGIN_ON_RIS_EDGE);
/* configure the clock for receiver */- d) K& q+ i0 E1 a
McASPRxClkCfg(SOC_MCASP_0_CTRL_REGS, MCASP_RX_CLK_EXTERNAL, 0, 0);$ H7 l* N% w$ k2 p
McASPRxClkPolaritySet(SOC_MCASP_0_CTRL_REGS, MCASP_RX_CLK_POL_RIS_EDGE);
' C1 i9 s  s! c  J# h- S0 H( f; uMcASPRxClkCheckConfig(SOC_MCASP_0_CTRL_REGS, MCASP_RX_CLKCHCK_DIV32,; s1 N3 ~/ s. U' E/ j* }. f
0x00, 0xFF);
/* configure the clock for transmitter */, ]( M. Y& \3 h7 r2 B' S" ?/ \! `
McASPTxClkCfg(SOC_MCASP_0_CTRL_REGS, MCASP_TX_CLK_INTERNAL, 11, 1);' M" y' \$ i0 |+ x' t, l, x
McASPTxClkPolaritySet(SOC_MCASP_0_CTRL_REGS, MCASP_TX_CLK_POL_FALL_EDGE);
: V" C/ [: x; S, H0 VMcASPTxClkCheckConfig(SOC_MCASP_0_CTRL_REGS, MCASP_TX_CLKCHCK_DIV32,
! e7 n8 N) k% @  k9 P' |" i0 |0x00, 0xFF);! N, f, C' ?. D+ s0 |) ^2 Q( {
( G* y* w  F* |% G, G
/* Enable synchronization of RX and TX sections */
9 |5 }* y1 e) {: H) e; B6 DMcASPTxRxClkSyncEnable(SOC_MCASP_0_CTRL_REGS);
/* Enable the transmitter/receiver slots. I2S uses 2 slots */
7 Z7 ^3 g, d- wMcASPRxTimeSlotSet(SOC_MCASP_0_CTRL_REGS, I2S_SLOTS);
. {( ]! [. l9 J6 o( [3 z) ~. iMcASPTxTimeSlotSet(SOC_MCASP_0_CTRL_REGS, I2S_SLOTS);
/*
' s) g9 _4 l4 L3 U+ U! G** Set the serializers, Currently only one serializer is set as
7 {2 _0 W- k$ c% a, \$ C) h8 a** transmitter and one serializer as receiver.
3 X5 w" ]+ s/ ]) @- |0 ~*/; f9 p# |8 }0 ^7 O) E5 O
McASPSerializerRxSet(SOC_MCASP_0_CTRL_REGS, MCASP_XSER_RX);
2 h: O. Y6 Q* t- z+ nMcASPSerializerTxSet(SOC_MCASP_0_CTRL_REGS, MCASP_XSER_TX);
/*5 N. C: n9 o2 v4 g" m# a5 m% _
** Configure the McASP pins
* L9 d0 _: _4 ]** Input - Frame Sync, Clock and Serializer Rx! H3 y. l. c; P  T3 P
** Output - Serializer Tx is connected to the input of the codec
' t, D4 g4 K# N0 V% s*/& C7 D$ s3 A2 Z* r; O
McASPPinMcASPSet(SOC_MCASP_0_CTRL_REGS, 0xFFFFFFFF);
1 t6 C2 P* Q8 I6 JMcASPPinDirOutputSet(SOC_MCASP_0_CTRL_REGS,MCASP_PIN_AXR(MCASP_XSER_TX));) [9 u+ D9 b. K! E( Q/ p9 }) Y; n
McASPPinDirInputSet(SOC_MCASP_0_CTRL_REGS, MCASP_PIN_AFSX
: f( h4 y3 g9 g) L  q! x( w8 F; w| MCASP_PIN_ACLKX
& K) Q$ h! |/ M0 [; }! U4 b* W- I| MCASP_PIN_AHCLKX1 R7 d. X& }: l
| MCASP_PIN_AXR(MCASP_XSER_RX));
/* Enable error interrupts for McASP */
8 Q$ ~7 ?3 B6 A  K* WMcASPTxIntEnable(SOC_MCASP_0_CTRL_REGS, MCASP_TX_DMAERROR # W1 B" t: w/ M
| MCASP_TX_CLKFAIL
7 R: y/ l) _1 ~6 P! [6 t3 e| MCASP_TX_SYNCERROR3 P" w$ p8 {$ U$ x$ H
| MCASP_TX_UNDERRUN);
McASPRxIntEnable(SOC_MCASP_0_CTRL_REGS, MCASP_RX_DMAERROR
- _/ O1 s; Y) n( h4 p$ D| MCASP_RX_CLKFAIL
: a5 H, j" N1 W1 {| MCASP_RX_SYNCERROR
+ j! h! D1 H5 F| MCASP_RX_OVERRUN);' u, G: a5 j4 {0 U$ j% _) a2 P
}
static void I2SDataTxRxActivate(void)
3 S; ]1 r" I3 \; j5 h, y{
1 O3 B" y3 c2 s* u6 F7 y4 _/* Start the clocks */
) Q+ \0 K5 [5 [/ w* IMcASPRxClkStart(SOC_MCASP_0_CTRL_REGS, MCASP_RX_CLK_EXTERNAL);4 ^  V: ]8 H/ @; @9 k7 N
McASPTxClkStart(SOC_MCASP_0_CTRL_REGS, MCASP_TX_CLK_INTERNAL);
/* Enable EDMA for the transfer */! X' G# l. z/ W" @7 _
EDMA3EnableTransfer(SOC_EDMA30CC_0_REGS, EDMA3_CHA_MCASP0_RX,
2 C' ?2 W8 J6 |' F, I& r8 l3 R+ OEDMA3_TRIG_MODE_EVENT);
  d, o, Y0 c$ O. @0 eEDMA3EnableTransfer(SOC_EDMA30CC_0_REGS, 5 b% l8 p. e; b) g
EDMA3_CHA_MCASP0_TX, EDMA3_TRIG_MODE_EVENT);
/* Activate the serializers */
- y  \, e! M, D: O0 s9 I$ ]9 |6 ~McASPRxSerActivate(SOC_MCASP_0_CTRL_REGS);; |, r; J8 H4 h9 T( X, t% z
McASPTxSerActivate(SOC_MCASP_0_CTRL_REGS);
/* make sure that the XDATA bit is cleared to zero */
! H* O: U: W) G5 {5 ^6 F: Hwhile(McASPTxStatusGet(SOC_MCASP_0_CTRL_REGS) & MCASP_TX_STAT_DATAREADY);
/* Activate the state machines */
8 r. O  O/ U) d! H) L: M" O) gMcASPRxEnable(SOC_MCASP_0_CTRL_REGS);2 \3 C& y5 p# `4 P% e  s. m  _4 z: `
McASPTxEnable(SOC_MCASP_0_CTRL_REGS);
) N- l. f, }0 j. ]1 ?" C}
/ k) {! v# L* ^2 r* M, t8 n
请问:问题出在哪了,时钟按照这样配是否有错。
另外我看XDATA一直是0,接收的rxbuf0,1,2里有一般全是FFFF一半全是0.

: z* e5 L) `5 C% S




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