嵌入式开发者社区

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

作者: wapdasta    时间: 2018-11-7 13:28
标题: MCASP自环配置。
我项目上用OMAPL138的板子MCASP的引脚都是链接的FPGA,所以在FPGA这端设置的MCASP自环。把axr0接收到的通过axr1发回去。
部分代码如下
input mcasp_afsx,
5 r1 B$ s# d. `% g7 M4 e& b# L% jinput mcasp_ahclkx,
: l$ Z8 M, z; _input mcasp_aclkx," d- N# k& _1 o! A
input axr0,
! z7 e5 \' a) ]; j5 Q
* H$ O6 k1 g+ _% n  T7 @output mcasp_afsr,
* X3 C8 ~5 d* [; foutput mcasp_ahclkr,7 t- P, M. [" r8 O+ I
output mcasp_aclkr,
" w0 l/ ?4 d. ?% ~8 Z% {( r3 o6 T. toutput axr1,
4 K- e9 {7 @! @- H: v
assign mcasp_afsr = mcasp_afsx;2 s" I5 {8 I" M# T# }6 ^
assign mcasp_aclkr = mcasp_aclkx;( W6 K& \( ]) Q) `, z7 C, I
assign mcasp_ahclkr = mcasp_ahclkx;
) k# c3 _; k6 r/ ]  }1 Y% cassign axr1 = axr0;

# b# O. I, c1 _' K: n: ^/ M
" q$ Q. i& _  D) K. y) g
在OMAPL138这端,通过axr0接口发固定的数,axr1接收。
在配置MACASP的时候,发送全部取内部时钟,接收全部取外部时钟。
一直循环发送,但是接收不到。在FPGA端也没有看到时钟和信号的波形。
部分代码如下,关于edma3的部分未做变化。
- b' \9 K% h- ^: X' t0 _7 ?# z
static void McASPI2SConfigure(void). S& h; Y) c9 {- T& v- j3 B
{
5 D3 s6 i( Z/ b! QMcASPRxReset(SOC_MCASP_0_CTRL_REGS);1 z+ m8 ?' k" k4 I/ k5 y
McASPTxReset(SOC_MCASP_0_CTRL_REGS);
/* Enable the FIFOs for DMA transfer */; t, ]7 B$ ?. g7 k/ z
McASPReadFifoEnable(SOC_MCASP_0_FIFO_REGS, 1, 1);8 N3 P$ C+ \6 S  z3 u2 T+ _+ O! b- b
McASPWriteFifoEnable(SOC_MCASP_0_FIFO_REGS, 1, 1);
/* Set I2S format in the transmitter/receiver format units */
2 I' B" U# O  l$ U' P' X8 [McASPRxFmtI2SSet(SOC_MCASP_0_CTRL_REGS, WORD_SIZE, SLOT_SIZE,
; R7 V3 j' B3 \! s/ jMCASP_RX_MODE_DMA);
2 P/ j( @6 m8 [$ @: ]; EMcASPTxFmtI2SSet(SOC_MCASP_0_CTRL_REGS, WORD_SIZE, SLOT_SIZE,
5 L1 y& Q6 a6 z3 C! bMCASP_TX_MODE_DMA);
/* Configure the frame sync. I2S shall work in TDM format with 2 slots */
$ W, P7 v# S/ S. [0 [$ X9 vMcASPRxFrameSyncCfg(SOC_MCASP_0_CTRL_REGS, 2, MCASP_RX_FS_WIDTH_WORD,
& k. z0 ^% b$ ?/ VMCASP_RX_FS_EXT_BEGIN_ON_FALL_EDGE);; B; V$ X7 {# c* x2 Z# x5 D4 q: E
McASPTxFrameSyncCfg(SOC_MCASP_0_CTRL_REGS, 2, MCASP_TX_FS_WIDTH_WORD,
5 Z  d3 u: T) c# i" xMCASP_TX_FS_INT_BEGIN_ON_RIS_EDGE);
/* configure the clock for receiver */. X& G$ m. m7 r% t
McASPRxClkCfg(SOC_MCASP_0_CTRL_REGS, MCASP_RX_CLK_EXTERNAL, 0, 0);: u1 b. F& Q9 @6 `; @' v
McASPRxClkPolaritySet(SOC_MCASP_0_CTRL_REGS, MCASP_RX_CLK_POL_RIS_EDGE); + \: C9 [  k: a$ V+ h4 s; }
McASPRxClkCheckConfig(SOC_MCASP_0_CTRL_REGS, MCASP_RX_CLKCHCK_DIV32,9 L* u+ z- d9 ]
0x00, 0xFF);
/* configure the clock for transmitter */5 y6 T' d! q  x  V3 o/ j! O
McASPTxClkCfg(SOC_MCASP_0_CTRL_REGS, MCASP_TX_CLK_INTERNAL, 11, 1);
! ]: N( h5 c5 kMcASPTxClkPolaritySet(SOC_MCASP_0_CTRL_REGS, MCASP_TX_CLK_POL_FALL_EDGE);
. L( r2 B/ h, }/ C; v' {& i( WMcASPTxClkCheckConfig(SOC_MCASP_0_CTRL_REGS, MCASP_TX_CLKCHCK_DIV32,
; ]% v( T4 _) }0x00, 0xFF);
2 B. Z3 B7 \  F( O9 N& M0 I! n) Q- \( f
/* Enable synchronization of RX and TX sections */ 4 ]- q: R8 V% b. t) s$ T3 A
McASPTxRxClkSyncEnable(SOC_MCASP_0_CTRL_REGS);
/* Enable the transmitter/receiver slots. I2S uses 2 slots */
/ x* X5 V3 j# d2 e5 H9 `McASPRxTimeSlotSet(SOC_MCASP_0_CTRL_REGS, I2S_SLOTS);
* ]4 M+ `, Y7 ^+ O$ H; p% J+ YMcASPTxTimeSlotSet(SOC_MCASP_0_CTRL_REGS, I2S_SLOTS);
/*
% d% J6 a5 i! p8 Z7 L1 Z& j** Set the serializers, Currently only one serializer is set as* W% h+ m2 ]* [) a
** transmitter and one serializer as receiver.9 Z9 ]4 X7 o% [9 p4 `! n) a
*/
5 {5 a  l, k) p3 \* `McASPSerializerRxSet(SOC_MCASP_0_CTRL_REGS, MCASP_XSER_RX);% N9 ?& k3 U  ^4 @
McASPSerializerTxSet(SOC_MCASP_0_CTRL_REGS, MCASP_XSER_TX);
/*. \/ Y; m9 n, U3 U2 i5 Q1 b
** Configure the McASP pins
. o) c! t# e& I& J7 ]/ X2 ^7 M3 ^** Input - Frame Sync, Clock and Serializer Rx& ]0 k3 T8 L4 s7 r0 F3 a9 W3 `( S$ \; G
** Output - Serializer Tx is connected to the input of the codec 2 `, v% J' P/ q# q1 a
*/  M: a  L6 ^2 X7 u! Z2 x! }* |
McASPPinMcASPSet(SOC_MCASP_0_CTRL_REGS, 0xFFFFFFFF);
& D8 q2 }$ a/ e; p4 }: b5 g, A( eMcASPPinDirOutputSet(SOC_MCASP_0_CTRL_REGS,MCASP_PIN_AXR(MCASP_XSER_TX));
' C! A, t! X; x$ [! XMcASPPinDirInputSet(SOC_MCASP_0_CTRL_REGS, MCASP_PIN_AFSX
. k6 u8 x1 d  W. ^" b) g| MCASP_PIN_ACLKX! P# d9 m6 ^9 t2 M0 P1 |, X
| MCASP_PIN_AHCLKX
. Z9 a2 W( F$ x7 p: H* E| MCASP_PIN_AXR(MCASP_XSER_RX));
/* Enable error interrupts for McASP */% l+ a( _  x# ?7 h
McASPTxIntEnable(SOC_MCASP_0_CTRL_REGS, MCASP_TX_DMAERROR
7 z( v, D$ h& F/ Q0 D  z8 u% ~+ ?| MCASP_TX_CLKFAIL
0 F1 ^6 S/ L% O5 c8 y' _/ a| MCASP_TX_SYNCERROR
$ r  l: [3 W# \3 f7 B& a| MCASP_TX_UNDERRUN);
McASPRxIntEnable(SOC_MCASP_0_CTRL_REGS, MCASP_RX_DMAERROR 8 t7 I- a* }( q  B3 `) r( w
| MCASP_RX_CLKFAIL
" p* n" A9 B& _/ x" l& c| MCASP_RX_SYNCERROR % b' `! B. W5 c! v, H
| MCASP_RX_OVERRUN);
( Z; x' Q0 J) f4 |" s8 |}
static void I2SDataTxRxActivate(void)
- I6 h6 }8 [' I" x( D{
$ O% p" ]! r$ D! Z4 m/* Start the clocks */
- D% d: n) M; r+ W) R; tMcASPRxClkStart(SOC_MCASP_0_CTRL_REGS, MCASP_RX_CLK_EXTERNAL);
" A# r% `9 I0 s3 z/ P, Q" IMcASPTxClkStart(SOC_MCASP_0_CTRL_REGS, MCASP_TX_CLK_INTERNAL);
/* Enable EDMA for the transfer */
, F( V  A' U/ ^+ BEDMA3EnableTransfer(SOC_EDMA30CC_0_REGS, EDMA3_CHA_MCASP0_RX,
8 J7 C2 S' R. E! U$ REDMA3_TRIG_MODE_EVENT);, ~* G. N+ t6 d/ \" h# L; y
EDMA3EnableTransfer(SOC_EDMA30CC_0_REGS,
8 |& Z' M$ i) Z& WEDMA3_CHA_MCASP0_TX, EDMA3_TRIG_MODE_EVENT);
/* Activate the serializers */
. c% ?2 P" Z" `8 KMcASPRxSerActivate(SOC_MCASP_0_CTRL_REGS);9 t& h& g/ M3 H' _' R7 B
McASPTxSerActivate(SOC_MCASP_0_CTRL_REGS);
/* make sure that the XDATA bit is cleared to zero */# S3 l7 X1 q% V* b8 T, o7 {: T0 o/ L
while(McASPTxStatusGet(SOC_MCASP_0_CTRL_REGS) & MCASP_TX_STAT_DATAREADY);
/* Activate the state machines */( Y3 g8 C6 U7 |, T
McASPRxEnable(SOC_MCASP_0_CTRL_REGS);
1 X8 C* R, ~. TMcASPTxEnable(SOC_MCASP_0_CTRL_REGS);" F+ j' s  C; n2 x, d7 h
}

  M7 N9 {4 [. U7 ?- Y2 v6 w: x2 n: d
请问:问题出在哪了,时钟按照这样配是否有错。
另外我看XDATA一直是0,接收的rxbuf0,1,2里有一般全是FFFF一半全是0.
9 S0 g' Q& i2 T) B% n9 p+ A6 r





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