嵌入式开发者社区

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

作者: wapdasta    时间: 2018-11-7 13:28
标题: MCASP自环配置。
我项目上用OMAPL138的板子MCASP的引脚都是链接的FPGA,所以在FPGA这端设置的MCASP自环。把axr0接收到的通过axr1发回去。
部分代码如下
input mcasp_afsx,
! t6 x2 k: ?8 A7 Finput mcasp_ahclkx,
) X& R) V5 _; }0 X& R% |! S1 R7 Uinput mcasp_aclkx,
" X7 Z  q; W/ v; B! \  }7 F& {( h1 |input axr0,
) \( ~. _9 P5 P. [1 y& j/ U# v8 v% f* h# o- q3 o. U  N* M0 y
output mcasp_afsr,! Y( Z$ P7 B" p, }9 g
output mcasp_ahclkr,: c0 e) \2 I4 H$ }
output mcasp_aclkr,
5 |& T" h3 `& Joutput axr1,
; i1 X1 N  Q, ~6 C+ O( e5 u8 G
assign mcasp_afsr = mcasp_afsx;1 k, B7 v. E) J" B
assign mcasp_aclkr = mcasp_aclkx;
$ _" [, \6 i  t. [" B) S1 {- E4 ~* z0 iassign mcasp_ahclkr = mcasp_ahclkx;
5 T( D6 b7 a9 v: c  iassign axr1 = axr0;
1 i; n' s7 D' f% y# k
: x' ~! `6 |/ j/ d
在OMAPL138这端,通过axr0接口发固定的数,axr1接收。
在配置MACASP的时候,发送全部取内部时钟,接收全部取外部时钟。
一直循环发送,但是接收不到。在FPGA端也没有看到时钟和信号的波形。
部分代码如下,关于edma3的部分未做变化。

# H5 \: @: b. P  e5 {; u9 |5 N
static void McASPI2SConfigure(void); A% l" }$ }8 Z
{" @6 I4 A# K' u/ Z: F
McASPRxReset(SOC_MCASP_0_CTRL_REGS);
) I# {8 w/ B* |7 }McASPTxReset(SOC_MCASP_0_CTRL_REGS);
/* Enable the FIFOs for DMA transfer */$ h( H$ s! G0 X* t( t& n" |
McASPReadFifoEnable(SOC_MCASP_0_FIFO_REGS, 1, 1);; g" v  p: o7 A! A( Q, W
McASPWriteFifoEnable(SOC_MCASP_0_FIFO_REGS, 1, 1);
/* Set I2S format in the transmitter/receiver format units */
' x4 h0 J* a0 LMcASPRxFmtI2SSet(SOC_MCASP_0_CTRL_REGS, WORD_SIZE, SLOT_SIZE,
- L1 B8 T0 S6 G. Q. zMCASP_RX_MODE_DMA);
8 B2 l) K  Q! I9 p$ Z. K6 O' xMcASPTxFmtI2SSet(SOC_MCASP_0_CTRL_REGS, WORD_SIZE, SLOT_SIZE,1 |# |/ W$ j" I/ W9 m, Y( B
MCASP_TX_MODE_DMA);
/* Configure the frame sync. I2S shall work in TDM format with 2 slots */4 @5 A) {+ @2 ~0 J4 }. D$ R2 R
McASPRxFrameSyncCfg(SOC_MCASP_0_CTRL_REGS, 2, MCASP_RX_FS_WIDTH_WORD,
3 H' \4 {7 e( y& t4 u* }& YMCASP_RX_FS_EXT_BEGIN_ON_FALL_EDGE);
; p3 ?  R5 u! ?1 o& AMcASPTxFrameSyncCfg(SOC_MCASP_0_CTRL_REGS, 2, MCASP_TX_FS_WIDTH_WORD,
2 x. A& \- F5 R7 s, d* CMCASP_TX_FS_INT_BEGIN_ON_RIS_EDGE);
/* configure the clock for receiver */
! ]$ d! a7 p" tMcASPRxClkCfg(SOC_MCASP_0_CTRL_REGS, MCASP_RX_CLK_EXTERNAL, 0, 0);: F6 }5 r0 c+ R  ^6 A  C" B
McASPRxClkPolaritySet(SOC_MCASP_0_CTRL_REGS, MCASP_RX_CLK_POL_RIS_EDGE); : o9 V* u8 d$ v/ N
McASPRxClkCheckConfig(SOC_MCASP_0_CTRL_REGS, MCASP_RX_CLKCHCK_DIV32,
: F2 B- T7 M2 j' v2 o; ^, q0x00, 0xFF);
/* configure the clock for transmitter */
) d/ M1 S9 n0 UMcASPTxClkCfg(SOC_MCASP_0_CTRL_REGS, MCASP_TX_CLK_INTERNAL, 11, 1);  q( X7 |5 o  C
McASPTxClkPolaritySet(SOC_MCASP_0_CTRL_REGS, MCASP_TX_CLK_POL_FALL_EDGE); . n9 `" b; @& y) ?
McASPTxClkCheckConfig(SOC_MCASP_0_CTRL_REGS, MCASP_TX_CLKCHCK_DIV32,' i. U& w0 k; }) M3 D1 _
0x00, 0xFF);
3 r" a/ h, p: @- N6 d! Y7 r, l0 }: N% w9 w
/* Enable synchronization of RX and TX sections */ . n  Q' u8 X* `8 _
McASPTxRxClkSyncEnable(SOC_MCASP_0_CTRL_REGS);
/* Enable the transmitter/receiver slots. I2S uses 2 slots */
) K' t3 ^1 c- L+ i8 eMcASPRxTimeSlotSet(SOC_MCASP_0_CTRL_REGS, I2S_SLOTS);: d% S7 ?' S, q% V% h
McASPTxTimeSlotSet(SOC_MCASP_0_CTRL_REGS, I2S_SLOTS);
/*' {! m7 X# ?; M) g
** Set the serializers, Currently only one serializer is set as- p3 ?0 K( c6 V  r  L
** transmitter and one serializer as receiver.
( d# w5 Y$ o3 O) z# t*/$ i8 \/ l  t! g5 {' u9 P% R
McASPSerializerRxSet(SOC_MCASP_0_CTRL_REGS, MCASP_XSER_RX);% M  C2 [! Q" f- W. j+ x/ z4 H1 {9 R2 Y
McASPSerializerTxSet(SOC_MCASP_0_CTRL_REGS, MCASP_XSER_TX);
/*( g, Y  S- i) a* h% Q, B; m9 {% z
** Configure the McASP pins 6 m1 E0 \7 M. \* G
** Input - Frame Sync, Clock and Serializer Rx
/ a  y$ g/ H; {% j, d8 m! u** Output - Serializer Tx is connected to the input of the codec 7 Z& j, q% K- h, g$ j& s0 B
*/& `- p. E; k1 E+ }
McASPPinMcASPSet(SOC_MCASP_0_CTRL_REGS, 0xFFFFFFFF);
+ A9 h+ z. e: D) q0 d9 dMcASPPinDirOutputSet(SOC_MCASP_0_CTRL_REGS,MCASP_PIN_AXR(MCASP_XSER_TX));
* |. ], E1 Y' U# t0 E8 RMcASPPinDirInputSet(SOC_MCASP_0_CTRL_REGS, MCASP_PIN_AFSX7 _" G% u! D) P" s+ Y5 \7 B
| MCASP_PIN_ACLKX: ^: |1 g* @$ r) _2 a
| MCASP_PIN_AHCLKX
( u0 U/ }" N' N0 _& S| MCASP_PIN_AXR(MCASP_XSER_RX));
/* Enable error interrupts for McASP */
- C2 f; h% F6 d; |0 ?: fMcASPTxIntEnable(SOC_MCASP_0_CTRL_REGS, MCASP_TX_DMAERROR * u8 H! Q5 U& v) g, Q5 q
| MCASP_TX_CLKFAIL
% D! s2 }# C6 d+ K6 i8 T- }| MCASP_TX_SYNCERROR
0 V2 ~3 [! T7 ]| MCASP_TX_UNDERRUN);
McASPRxIntEnable(SOC_MCASP_0_CTRL_REGS, MCASP_RX_DMAERROR
* h/ m3 D) O: H9 F/ i8 || MCASP_RX_CLKFAIL
# ^! A* w7 k2 |7 t% |% e| MCASP_RX_SYNCERROR
# i* l( w* {$ R8 x: ^| MCASP_RX_OVERRUN);
) O6 T9 y! d. A3 D/ x" a5 u6 P}
static void I2SDataTxRxActivate(void)
3 O* P+ w/ r$ i* B- Y# t{
" W; U+ z* C( D/* Start the clocks */
; y+ W$ o7 R6 z% M% x9 Z% U7 oMcASPRxClkStart(SOC_MCASP_0_CTRL_REGS, MCASP_RX_CLK_EXTERNAL);
# k9 d) ^& L3 MMcASPTxClkStart(SOC_MCASP_0_CTRL_REGS, MCASP_TX_CLK_INTERNAL);
/* Enable EDMA for the transfer */
0 n* ]' S8 R+ |* c' [EDMA3EnableTransfer(SOC_EDMA30CC_0_REGS, EDMA3_CHA_MCASP0_RX,0 i' y! ?% f) C: J
EDMA3_TRIG_MODE_EVENT);
9 B* x( z1 k3 Q1 B' @* @EDMA3EnableTransfer(SOC_EDMA30CC_0_REGS, 9 o$ u+ Y; |) v* r7 {# j
EDMA3_CHA_MCASP0_TX, EDMA3_TRIG_MODE_EVENT);
/* Activate the serializers */; Z/ S8 }  }+ B9 D
McASPRxSerActivate(SOC_MCASP_0_CTRL_REGS);
% I2 _9 h) I( t, _/ Y) D( DMcASPTxSerActivate(SOC_MCASP_0_CTRL_REGS);
/* make sure that the XDATA bit is cleared to zero */
8 R6 `" d8 Y9 N4 }. q* fwhile(McASPTxStatusGet(SOC_MCASP_0_CTRL_REGS) & MCASP_TX_STAT_DATAREADY);
/* Activate the state machines */
( c/ @" M0 Z. i9 _9 n4 C& kMcASPRxEnable(SOC_MCASP_0_CTRL_REGS);% z1 I9 m" \/ s6 T
McASPTxEnable(SOC_MCASP_0_CTRL_REGS);* N; D3 [: g+ r- G& {2 u1 b! t
}
( u# s) N3 }$ h5 L3 e! m9 V
请问:问题出在哪了,时钟按照这样配是否有错。
另外我看XDATA一直是0,接收的rxbuf0,1,2里有一般全是FFFF一半全是0.

& J- @5 b  ?8 S  P7 p




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