嵌入式开发者社区

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

作者: wapdasta    时间: 2018-11-7 13:28
标题: MCASP自环配置。
我项目上用OMAPL138的板子MCASP的引脚都是链接的FPGA,所以在FPGA这端设置的MCASP自环。把axr0接收到的通过axr1发回去。
部分代码如下
input mcasp_afsx,
, v7 @* d  `0 G: `% _# _input mcasp_ahclkx,/ W$ E9 Q: F  F$ o2 l: p3 ?
input mcasp_aclkx,
' J5 h, }& G$ \; ^% J. pinput axr0,+ I% k2 G/ S0 J* U* a; m

& f" \. T9 e- I& V% K$ s1 Foutput mcasp_afsr,
& e! P9 n+ f: Joutput mcasp_ahclkr,
  h' `" |8 t' l" U) N  B7 d1 _1 E5 Joutput mcasp_aclkr,
7 l7 r; k8 s8 |" I0 aoutput axr1,& z; j5 [' M: R) l- ~
assign mcasp_afsr = mcasp_afsx;
) C. c5 j- N2 r  p- E9 S) Massign mcasp_aclkr = mcasp_aclkx;
) T6 Q8 Q9 D' cassign mcasp_ahclkr = mcasp_ahclkx;& P7 a7 w" c1 t
assign axr1 = axr0;
7 t: f" x& i9 ]& X+ E( J
. d9 `6 \- H9 Q2 F
在OMAPL138这端,通过axr0接口发固定的数,axr1接收。
在配置MACASP的时候,发送全部取内部时钟,接收全部取外部时钟。
一直循环发送,但是接收不到。在FPGA端也没有看到时钟和信号的波形。
部分代码如下,关于edma3的部分未做变化。

* U3 V; b+ ?5 R' \* b) ?
static void McASPI2SConfigure(void)& [+ I3 d0 A( X6 @8 ^8 K7 W0 A
{
5 b" a: A3 f" r0 x1 O+ l/ a! xMcASPRxReset(SOC_MCASP_0_CTRL_REGS);. D" F; K6 I/ p  l
McASPTxReset(SOC_MCASP_0_CTRL_REGS);
/* Enable the FIFOs for DMA transfer */
; m- x9 P- R3 U+ F2 uMcASPReadFifoEnable(SOC_MCASP_0_FIFO_REGS, 1, 1);
& d; E* e" Q6 }McASPWriteFifoEnable(SOC_MCASP_0_FIFO_REGS, 1, 1);
/* Set I2S format in the transmitter/receiver format units */2 e3 G3 t. O0 X/ ]" J5 k
McASPRxFmtI2SSet(SOC_MCASP_0_CTRL_REGS, WORD_SIZE, SLOT_SIZE,
5 E; Q7 `2 \$ ?; WMCASP_RX_MODE_DMA);
0 y+ ?3 G% Z) lMcASPTxFmtI2SSet(SOC_MCASP_0_CTRL_REGS, WORD_SIZE, SLOT_SIZE,
1 z4 l& L0 f# {( t: @6 Q5 qMCASP_TX_MODE_DMA);
/* Configure the frame sync. I2S shall work in TDM format with 2 slots *// C7 o" R! h' Y8 V. H/ n$ Y8 i6 |& Y
McASPRxFrameSyncCfg(SOC_MCASP_0_CTRL_REGS, 2, MCASP_RX_FS_WIDTH_WORD,
: @$ \4 X" J7 n1 P! XMCASP_RX_FS_EXT_BEGIN_ON_FALL_EDGE);% q! [; ~' t3 H- H
McASPTxFrameSyncCfg(SOC_MCASP_0_CTRL_REGS, 2, MCASP_TX_FS_WIDTH_WORD,
: ?- A; J+ k1 A. }2 B' d8 gMCASP_TX_FS_INT_BEGIN_ON_RIS_EDGE);
/* configure the clock for receiver */) T8 w; `7 }# `; |8 ?  }
McASPRxClkCfg(SOC_MCASP_0_CTRL_REGS, MCASP_RX_CLK_EXTERNAL, 0, 0);
6 Z5 X7 z& r6 p  l6 p. @" K3 ZMcASPRxClkPolaritySet(SOC_MCASP_0_CTRL_REGS, MCASP_RX_CLK_POL_RIS_EDGE);
* ~9 V/ w( c; jMcASPRxClkCheckConfig(SOC_MCASP_0_CTRL_REGS, MCASP_RX_CLKCHCK_DIV32,- b: r1 F# ~2 Z. j1 S
0x00, 0xFF);
/* configure the clock for transmitter */
2 ~4 z. Q# ]1 c9 U! o5 p6 z) cMcASPTxClkCfg(SOC_MCASP_0_CTRL_REGS, MCASP_TX_CLK_INTERNAL, 11, 1);
; `5 x+ `0 f- Q: n) f: YMcASPTxClkPolaritySet(SOC_MCASP_0_CTRL_REGS, MCASP_TX_CLK_POL_FALL_EDGE);   `/ e  a) A+ b- m1 c
McASPTxClkCheckConfig(SOC_MCASP_0_CTRL_REGS, MCASP_TX_CLKCHCK_DIV32,
& y' Y6 H1 x( [  x( S6 R0x00, 0xFF);2 f6 E7 Q! S& V
7 B$ l+ a( W" n( c1 q1 c7 M
/* Enable synchronization of RX and TX sections */ - R* \4 L7 H- u/ W, S0 Z
McASPTxRxClkSyncEnable(SOC_MCASP_0_CTRL_REGS);
/* Enable the transmitter/receiver slots. I2S uses 2 slots */' i) |) M. P: [2 x8 c- r9 S) {
McASPRxTimeSlotSet(SOC_MCASP_0_CTRL_REGS, I2S_SLOTS);
2 B  J8 [8 P7 z% V' cMcASPTxTimeSlotSet(SOC_MCASP_0_CTRL_REGS, I2S_SLOTS);
/*0 L: G  X. ]; w
** Set the serializers, Currently only one serializer is set as+ R7 Q: z: `0 T4 U! n
** transmitter and one serializer as receiver.
# h. i( c, @: @( E3 ]*/
7 O/ b- ~7 v) _. L; b1 YMcASPSerializerRxSet(SOC_MCASP_0_CTRL_REGS, MCASP_XSER_RX);
7 X" l  h! S' u9 j% uMcASPSerializerTxSet(SOC_MCASP_0_CTRL_REGS, MCASP_XSER_TX);
/*: K7 g9 F0 M+ ^6 C+ @
** Configure the McASP pins 0 m/ R- x3 m) X) ?* }* e2 P
** Input - Frame Sync, Clock and Serializer Rx
, I$ L+ g7 l- W+ W** Output - Serializer Tx is connected to the input of the codec $ I- l$ x# n8 ^' h
*/4 L- ?. ]; c6 ?" g
McASPPinMcASPSet(SOC_MCASP_0_CTRL_REGS, 0xFFFFFFFF);( K# X  y: j5 }! N* @4 ^# r% y
McASPPinDirOutputSet(SOC_MCASP_0_CTRL_REGS,MCASP_PIN_AXR(MCASP_XSER_TX));- y3 i. p2 Q! S3 m1 `0 G
McASPPinDirInputSet(SOC_MCASP_0_CTRL_REGS, MCASP_PIN_AFSX
, `. |7 P6 N" K6 }# D# E% ?| MCASP_PIN_ACLKX5 }) K* f/ P( V# x, {
| MCASP_PIN_AHCLKX9 J: V# r- b7 o' V. d+ G
| MCASP_PIN_AXR(MCASP_XSER_RX));
/* Enable error interrupts for McASP */
4 o, X# a" W3 I! }McASPTxIntEnable(SOC_MCASP_0_CTRL_REGS, MCASP_TX_DMAERROR
" R7 u1 }& e% c; E1 a| MCASP_TX_CLKFAIL
/ g" G7 L; E- ~9 U8 [8 l3 e| MCASP_TX_SYNCERROR: U$ J1 ^0 Q6 l
| MCASP_TX_UNDERRUN);
McASPRxIntEnable(SOC_MCASP_0_CTRL_REGS, MCASP_RX_DMAERROR
; j+ ~0 Z1 n- Y| MCASP_RX_CLKFAIL
5 |% Z: M- v& d# Y6 A$ F$ I3 C" \# ~| MCASP_RX_SYNCERROR 0 k6 z: n4 b3 }9 I( i
| MCASP_RX_OVERRUN);; p% I& l$ K' j/ V& j3 O
}
static void I2SDataTxRxActivate(void)
$ ?5 `; J. C* }{( _; Y% C6 r9 \7 `( u8 l
/* Start the clocks *// {/ r  ?: i" m/ h9 ~) e( n
McASPRxClkStart(SOC_MCASP_0_CTRL_REGS, MCASP_RX_CLK_EXTERNAL);
/ }* e- {# T' d1 k" CMcASPTxClkStart(SOC_MCASP_0_CTRL_REGS, MCASP_TX_CLK_INTERNAL);
/* Enable EDMA for the transfer */4 P$ e; K' ?6 f+ z
EDMA3EnableTransfer(SOC_EDMA30CC_0_REGS, EDMA3_CHA_MCASP0_RX,; Z( R& R2 h/ n& p/ s3 K9 w" K
EDMA3_TRIG_MODE_EVENT);/ n* J1 d# P, O. _+ m3 p7 q
EDMA3EnableTransfer(SOC_EDMA30CC_0_REGS, 1 Z. Q+ d( s' B3 b4 q8 d3 V) k- x: u
EDMA3_CHA_MCASP0_TX, EDMA3_TRIG_MODE_EVENT);
/* Activate the serializers */
5 ~" `! P% k* s& A% p" nMcASPRxSerActivate(SOC_MCASP_0_CTRL_REGS);
9 i2 K; w: S2 {' r' WMcASPTxSerActivate(SOC_MCASP_0_CTRL_REGS);
/* make sure that the XDATA bit is cleared to zero */  _7 o0 u- M2 [, y! _2 ^# X8 P
while(McASPTxStatusGet(SOC_MCASP_0_CTRL_REGS) & MCASP_TX_STAT_DATAREADY);
/* Activate the state machines */
, E) @  l$ U  V" mMcASPRxEnable(SOC_MCASP_0_CTRL_REGS);$ i$ |7 p) d8 I" |
McASPTxEnable(SOC_MCASP_0_CTRL_REGS);$ |9 A( M1 L0 Y4 [: [% J
}

; ]. Y" U8 w' I
请问:问题出在哪了,时钟按照这样配是否有错。
另外我看XDATA一直是0,接收的rxbuf0,1,2里有一般全是FFFF一半全是0.

$ p$ n% ]) u! U




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