嵌入式开发者社区

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

作者: wapdasta    时间: 2018-11-7 13:28
标题: MCASP自环配置。
我项目上用OMAPL138的板子MCASP的引脚都是链接的FPGA,所以在FPGA这端设置的MCASP自环。把axr0接收到的通过axr1发回去。
部分代码如下
input mcasp_afsx,3 Z$ _/ }2 u: G4 p0 e! n! a
input mcasp_ahclkx,
8 ~9 z: m1 g" m% vinput mcasp_aclkx,
1 W" {% E+ S) N. x; hinput axr0,
0 M8 C# f9 _9 Q# u1 ^
" o. L/ m4 o3 h5 ]5 Uoutput mcasp_afsr,
! ~7 a% j* U  x9 E# Boutput mcasp_ahclkr,) }& D% E( l* P1 @
output mcasp_aclkr,/ m- `0 [- A9 l/ o4 ]
output axr1,
( S2 }* y+ V6 o! l$ v0 S" }
assign mcasp_afsr = mcasp_afsx;
/ Z- O% F% w1 |) passign mcasp_aclkr = mcasp_aclkx;
) Z' q/ |! `( ~assign mcasp_ahclkr = mcasp_ahclkx;
$ t( e2 y9 \+ W( L7 ]: h7 o6 tassign axr1 = axr0;
, j# }. q  k3 D

: c3 {) a! W% @$ v+ O5 T2 [
在OMAPL138这端,通过axr0接口发固定的数,axr1接收。
在配置MACASP的时候,发送全部取内部时钟,接收全部取外部时钟。
一直循环发送,但是接收不到。在FPGA端也没有看到时钟和信号的波形。
部分代码如下,关于edma3的部分未做变化。
% `3 u  P5 G% M& D
static void McASPI2SConfigure(void)/ V9 ]. O% b. T0 x/ m0 K5 z
{: _7 b8 ^, E# L: c8 P0 z
McASPRxReset(SOC_MCASP_0_CTRL_REGS);1 n; f& |7 t- i' f" l. [/ U
McASPTxReset(SOC_MCASP_0_CTRL_REGS);
/* Enable the FIFOs for DMA transfer */
" l! l. x8 d9 p" ]8 ]1 n4 SMcASPReadFifoEnable(SOC_MCASP_0_FIFO_REGS, 1, 1);8 g- m. y& M6 R) W5 r$ H
McASPWriteFifoEnable(SOC_MCASP_0_FIFO_REGS, 1, 1);
/* Set I2S format in the transmitter/receiver format units */
, t# F- z. A& e3 o2 u3 i  Z+ S5 }3 D! WMcASPRxFmtI2SSet(SOC_MCASP_0_CTRL_REGS, WORD_SIZE, SLOT_SIZE,
$ \5 Z. L3 y3 F, ?8 LMCASP_RX_MODE_DMA);
" s' O0 D8 I, b; g/ _1 g1 IMcASPTxFmtI2SSet(SOC_MCASP_0_CTRL_REGS, WORD_SIZE, SLOT_SIZE,
$ M9 B+ M  d- H; G! W3 @MCASP_TX_MODE_DMA);
/* Configure the frame sync. I2S shall work in TDM format with 2 slots */1 I5 @1 e8 s4 Y: X
McASPRxFrameSyncCfg(SOC_MCASP_0_CTRL_REGS, 2, MCASP_RX_FS_WIDTH_WORD, + p# n4 X$ C& J: \7 J
MCASP_RX_FS_EXT_BEGIN_ON_FALL_EDGE);
9 l6 n: _# \4 E- sMcASPTxFrameSyncCfg(SOC_MCASP_0_CTRL_REGS, 2, MCASP_TX_FS_WIDTH_WORD,
$ t+ W1 J; Y$ ]MCASP_TX_FS_INT_BEGIN_ON_RIS_EDGE);
/* configure the clock for receiver */
( R" I+ q! h) Y1 n0 eMcASPRxClkCfg(SOC_MCASP_0_CTRL_REGS, MCASP_RX_CLK_EXTERNAL, 0, 0);  f. W% z- f+ A/ T5 s9 n
McASPRxClkPolaritySet(SOC_MCASP_0_CTRL_REGS, MCASP_RX_CLK_POL_RIS_EDGE); 5 I& n7 M$ g3 M  p
McASPRxClkCheckConfig(SOC_MCASP_0_CTRL_REGS, MCASP_RX_CLKCHCK_DIV32,* c; c% v+ L. q! X( o0 i9 [
0x00, 0xFF);
/* configure the clock for transmitter */2 f" F  l1 Y) |
McASPTxClkCfg(SOC_MCASP_0_CTRL_REGS, MCASP_TX_CLK_INTERNAL, 11, 1);. Z. v; g  d& E& t+ B1 b: [$ Y. Q
McASPTxClkPolaritySet(SOC_MCASP_0_CTRL_REGS, MCASP_TX_CLK_POL_FALL_EDGE);
% D2 _) f3 R' |8 F& G6 ~+ KMcASPTxClkCheckConfig(SOC_MCASP_0_CTRL_REGS, MCASP_TX_CLKCHCK_DIV32,
0 }9 v# Y* m6 Z4 g& c' e6 p  |, c0x00, 0xFF);! c4 j' I8 Y4 r4 q' y/ u: ^

: ^, [) W& g# z+ v/* Enable synchronization of RX and TX sections */
$ D2 y7 L( l5 R; S5 w9 e( a! o! Q. O, ZMcASPTxRxClkSyncEnable(SOC_MCASP_0_CTRL_REGS);
/* Enable the transmitter/receiver slots. I2S uses 2 slots */" G( F) q% w1 [6 H/ K
McASPRxTimeSlotSet(SOC_MCASP_0_CTRL_REGS, I2S_SLOTS);. B& o' H9 C& ]
McASPTxTimeSlotSet(SOC_MCASP_0_CTRL_REGS, I2S_SLOTS);
/*
- I. P& K8 H; J** Set the serializers, Currently only one serializer is set as; y+ Q; A& t# O0 [0 w6 c
** transmitter and one serializer as receiver.
3 n3 X3 J3 e' h*/
3 b5 O* H: Y$ H! K: F! ]McASPSerializerRxSet(SOC_MCASP_0_CTRL_REGS, MCASP_XSER_RX);
4 X6 `: K6 R  j8 _. JMcASPSerializerTxSet(SOC_MCASP_0_CTRL_REGS, MCASP_XSER_TX);
/*
' F8 M  ?" d$ k' ]2 C** Configure the McASP pins ( z' h  _: j) N: o0 k
** Input - Frame Sync, Clock and Serializer Rx
  j: T; v) A5 k1 {# Z, F' r** Output - Serializer Tx is connected to the input of the codec 6 h! m9 r$ W1 B% y' `) y
*// H& r0 A5 G. c3 B
McASPPinMcASPSet(SOC_MCASP_0_CTRL_REGS, 0xFFFFFFFF);$ P6 ~  u9 a8 e5 I" \  g* L
McASPPinDirOutputSet(SOC_MCASP_0_CTRL_REGS,MCASP_PIN_AXR(MCASP_XSER_TX));- y8 Y0 E+ f) r* o! B- @- t
McASPPinDirInputSet(SOC_MCASP_0_CTRL_REGS, MCASP_PIN_AFSX0 s9 y- U1 C# A3 J0 C
| MCASP_PIN_ACLKX
6 f& D8 Q/ M5 {5 l. R| MCASP_PIN_AHCLKX4 F& n) n* E$ N4 l
| MCASP_PIN_AXR(MCASP_XSER_RX));
/* Enable error interrupts for McASP */
) c2 @. q3 D1 O# k2 IMcASPTxIntEnable(SOC_MCASP_0_CTRL_REGS, MCASP_TX_DMAERROR
; s& X0 O+ z/ [| MCASP_TX_CLKFAIL
# f, s2 P: a! M) r# t| MCASP_TX_SYNCERROR
( U1 R& U6 w+ x| MCASP_TX_UNDERRUN);
McASPRxIntEnable(SOC_MCASP_0_CTRL_REGS, MCASP_RX_DMAERROR * |) m: ~) |4 i. `" @& `2 @( q
| MCASP_RX_CLKFAIL
8 V6 d$ s9 u. y( u' s| MCASP_RX_SYNCERROR
; Z$ k2 K/ e  o- M| MCASP_RX_OVERRUN);: l1 P1 T% J  Z4 |+ J. D2 j1 {+ i
}
static void I2SDataTxRxActivate(void), K- _# |2 B5 o9 ~+ J& |+ R  a+ k
{
% u1 d! g+ F- T- ]/* Start the clocks */8 J$ K* ]" q4 [/ e$ g' F+ B8 e4 c# E
McASPRxClkStart(SOC_MCASP_0_CTRL_REGS, MCASP_RX_CLK_EXTERNAL);) m3 P# B& }& F# i$ U' ~
McASPTxClkStart(SOC_MCASP_0_CTRL_REGS, MCASP_TX_CLK_INTERNAL);
/* Enable EDMA for the transfer */
0 u0 R, S+ {5 x" M! q* gEDMA3EnableTransfer(SOC_EDMA30CC_0_REGS, EDMA3_CHA_MCASP0_RX,
6 ~! X- Q5 S! P' N! eEDMA3_TRIG_MODE_EVENT);
. E5 _4 j1 j, r# x& q& Q" W- AEDMA3EnableTransfer(SOC_EDMA30CC_0_REGS,
+ r5 C6 i$ t& n- x+ P/ G. T' qEDMA3_CHA_MCASP0_TX, EDMA3_TRIG_MODE_EVENT);
/* Activate the serializers */
3 U0 r( b! m; [- O# k! uMcASPRxSerActivate(SOC_MCASP_0_CTRL_REGS);) F3 T! S3 s8 c, N, {
McASPTxSerActivate(SOC_MCASP_0_CTRL_REGS);
/* make sure that the XDATA bit is cleared to zero */
5 z0 i& @4 L7 }, l6 fwhile(McASPTxStatusGet(SOC_MCASP_0_CTRL_REGS) & MCASP_TX_STAT_DATAREADY);
/* Activate the state machines */  p0 [6 |8 D$ K2 R
McASPRxEnable(SOC_MCASP_0_CTRL_REGS);7 g. a: m  l9 m- k! N- ]9 d
McASPTxEnable(SOC_MCASP_0_CTRL_REGS);- p5 E/ }. s% y. Z0 F
}

* d+ b: }: w9 |9 w- x1 n
请问:问题出在哪了,时钟按照这样配是否有错。
另外我看XDATA一直是0,接收的rxbuf0,1,2里有一般全是FFFF一半全是0.

  I* s1 W4 l2 ^! p9 j




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