嵌入式开发者社区

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

作者: wapdasta    时间: 2018-11-7 13:28
标题: MCASP自环配置。
我项目上用OMAPL138的板子MCASP的引脚都是链接的FPGA,所以在FPGA这端设置的MCASP自环。把axr0接收到的通过axr1发回去。
部分代码如下
input mcasp_afsx," Z3 P7 S+ f+ ]; ~$ v! V
input mcasp_ahclkx,
0 z2 o' b8 r* B3 ?5 Cinput mcasp_aclkx," O; q1 s' w/ }; [9 l( W6 L7 q
input axr0,: H) G5 ~0 c/ q; W

# _, q7 M6 Y4 ~+ \4 uoutput mcasp_afsr,2 ]8 Y" y& @5 N: M6 b; o
output mcasp_ahclkr,
7 l( E- n9 g) B3 U4 @% n5 f( ioutput mcasp_aclkr,
! {  S; [# H, u8 O* N' g* {output axr1,
& K/ H7 O; J( M+ N1 g" F- e
assign mcasp_afsr = mcasp_afsx;% `( O" u' D  W9 [
assign mcasp_aclkr = mcasp_aclkx;
2 F) [! H1 B4 t9 Fassign mcasp_ahclkr = mcasp_ahclkx;6 d- T0 s0 W. ^( v  ~
assign axr1 = axr0;

+ \% `# v8 ^0 i/ C
  Z; y6 T8 R# j! M" X! P4 I0 r3 O
在OMAPL138这端,通过axr0接口发固定的数,axr1接收。
在配置MACASP的时候,发送全部取内部时钟,接收全部取外部时钟。
一直循环发送,但是接收不到。在FPGA端也没有看到时钟和信号的波形。
部分代码如下,关于edma3的部分未做变化。
* O* p% O& ]% ~5 V
static void McASPI2SConfigure(void)
6 i7 R0 c$ s. q* I7 e4 h{. c' F' T9 Z' c+ f, b) A. ]
McASPRxReset(SOC_MCASP_0_CTRL_REGS);
: K7 m% Z( q1 D& A( F0 P+ l) NMcASPTxReset(SOC_MCASP_0_CTRL_REGS);
/* Enable the FIFOs for DMA transfer */' C7 P$ M2 U' h. H/ ]
McASPReadFifoEnable(SOC_MCASP_0_FIFO_REGS, 1, 1);
6 G% d! n0 N+ Y# y- hMcASPWriteFifoEnable(SOC_MCASP_0_FIFO_REGS, 1, 1);
/* Set I2S format in the transmitter/receiver format units */
9 j/ `; ~2 `4 EMcASPRxFmtI2SSet(SOC_MCASP_0_CTRL_REGS, WORD_SIZE, SLOT_SIZE,
" l7 r0 N& j  [% s( v  k: x, U% AMCASP_RX_MODE_DMA);$ z, y* U, l, I* j9 b: j
McASPTxFmtI2SSet(SOC_MCASP_0_CTRL_REGS, WORD_SIZE, SLOT_SIZE,+ d6 `, d$ S# ], {) f+ z
MCASP_TX_MODE_DMA);
/* Configure the frame sync. I2S shall work in TDM format with 2 slots */
" V$ Y% s7 D1 @; T0 e3 ~McASPRxFrameSyncCfg(SOC_MCASP_0_CTRL_REGS, 2, MCASP_RX_FS_WIDTH_WORD,
& e! G6 y& s4 B; G, |3 y4 Y: KMCASP_RX_FS_EXT_BEGIN_ON_FALL_EDGE);! Y" v) a" }% K- B5 D' X
McASPTxFrameSyncCfg(SOC_MCASP_0_CTRL_REGS, 2, MCASP_TX_FS_WIDTH_WORD,
" E$ |. @; y8 QMCASP_TX_FS_INT_BEGIN_ON_RIS_EDGE);
/* configure the clock for receiver */
& g( f6 R" J4 o$ e: FMcASPRxClkCfg(SOC_MCASP_0_CTRL_REGS, MCASP_RX_CLK_EXTERNAL, 0, 0);
5 E! t" i6 F' i- W% V1 PMcASPRxClkPolaritySet(SOC_MCASP_0_CTRL_REGS, MCASP_RX_CLK_POL_RIS_EDGE); 3 @8 t5 q# l/ N% K. A& ?
McASPRxClkCheckConfig(SOC_MCASP_0_CTRL_REGS, MCASP_RX_CLKCHCK_DIV32,- K  w' l1 M- f- E3 ]' j. p: Z6 [
0x00, 0xFF);
/* configure the clock for transmitter */
, t4 {% V; U" QMcASPTxClkCfg(SOC_MCASP_0_CTRL_REGS, MCASP_TX_CLK_INTERNAL, 11, 1);
2 J; i; e; [0 b( tMcASPTxClkPolaritySet(SOC_MCASP_0_CTRL_REGS, MCASP_TX_CLK_POL_FALL_EDGE); ) o+ g8 z$ g" S( e, [: B
McASPTxClkCheckConfig(SOC_MCASP_0_CTRL_REGS, MCASP_TX_CLKCHCK_DIV32,
" _! z4 s3 B, S0 \3 s: s0x00, 0xFF);
# c: U( {4 ^0 i3 d
' p+ v* B: i5 ^- {, N7 v- H/* Enable synchronization of RX and TX sections */
) x( c! Q' `8 U0 c) @McASPTxRxClkSyncEnable(SOC_MCASP_0_CTRL_REGS);
/* Enable the transmitter/receiver slots. I2S uses 2 slots */
1 Y6 K, W# S" E+ Y% h4 HMcASPRxTimeSlotSet(SOC_MCASP_0_CTRL_REGS, I2S_SLOTS);  T* u3 o9 L  \; G: J9 ]! p
McASPTxTimeSlotSet(SOC_MCASP_0_CTRL_REGS, I2S_SLOTS);
/*
. @  s" Q/ l4 {** Set the serializers, Currently only one serializer is set as
' v, x' y8 C5 h: ]** transmitter and one serializer as receiver.
7 M$ Z2 N; [1 \7 U2 S*/6 u9 Q3 ^- Q/ U! ?
McASPSerializerRxSet(SOC_MCASP_0_CTRL_REGS, MCASP_XSER_RX);
: [8 f# @6 b% |. [4 Y" k! xMcASPSerializerTxSet(SOC_MCASP_0_CTRL_REGS, MCASP_XSER_TX);
/*
! ^5 R4 Q- ?4 D' i5 R& W+ R$ {7 Y4 v** Configure the McASP pins
5 T5 C9 D' Z* U4 a0 Q4 s** Input - Frame Sync, Clock and Serializer Rx. C" L0 \- v! d# e6 e
** Output - Serializer Tx is connected to the input of the codec ! t! s8 c0 [/ Z
*/4 k; C4 d3 P, g8 o
McASPPinMcASPSet(SOC_MCASP_0_CTRL_REGS, 0xFFFFFFFF);
4 Q3 Z- i0 P7 g/ @% g4 k5 LMcASPPinDirOutputSet(SOC_MCASP_0_CTRL_REGS,MCASP_PIN_AXR(MCASP_XSER_TX));  B4 c+ z- l- ^  u5 @
McASPPinDirInputSet(SOC_MCASP_0_CTRL_REGS, MCASP_PIN_AFSX7 L$ d' f' H9 Q0 e
| MCASP_PIN_ACLKX
: D" a2 |2 U7 R$ J5 H| MCASP_PIN_AHCLKX2 u7 q4 ^; J' p5 q
| MCASP_PIN_AXR(MCASP_XSER_RX));
/* Enable error interrupts for McASP */  x2 B  P4 E; P  r/ _+ N
McASPTxIntEnable(SOC_MCASP_0_CTRL_REGS, MCASP_TX_DMAERROR
, M0 @; y3 |' p3 U/ ~& y# Z| MCASP_TX_CLKFAIL / f* `, H; S( R6 F$ n2 U/ ~, C
| MCASP_TX_SYNCERROR. e" W  X% b4 q! N) F  ]- T' ?7 u
| MCASP_TX_UNDERRUN);
McASPRxIntEnable(SOC_MCASP_0_CTRL_REGS, MCASP_RX_DMAERROR
& Q* p8 n& J6 || MCASP_RX_CLKFAIL9 u7 ~+ k! p/ ]  J% S; {
| MCASP_RX_SYNCERROR : @" E& {0 X3 o8 a& p& h4 i5 @5 m% j
| MCASP_RX_OVERRUN);
# w5 ~% _0 s+ R4 \: \}
static void I2SDataTxRxActivate(void)
  }: l# b+ c( n0 y$ y7 r  [5 c& A{
7 v; Y8 h* p# H4 j/* Start the clocks */- {1 G; @2 ^: P' v8 ?: h4 Y1 q2 V
McASPRxClkStart(SOC_MCASP_0_CTRL_REGS, MCASP_RX_CLK_EXTERNAL);1 D' E9 d- i; z0 h
McASPTxClkStart(SOC_MCASP_0_CTRL_REGS, MCASP_TX_CLK_INTERNAL);
/* Enable EDMA for the transfer */( n& i& m+ B# e+ x
EDMA3EnableTransfer(SOC_EDMA30CC_0_REGS, EDMA3_CHA_MCASP0_RX,
! Z. V7 r# n% X. y1 `: [9 eEDMA3_TRIG_MODE_EVENT);
0 a0 h  k4 ~& R" \0 A3 zEDMA3EnableTransfer(SOC_EDMA30CC_0_REGS, $ M" M8 A* q, X+ E, D) g
EDMA3_CHA_MCASP0_TX, EDMA3_TRIG_MODE_EVENT);
/* Activate the serializers */" y- \# x" d! C+ V  C
McASPRxSerActivate(SOC_MCASP_0_CTRL_REGS);
6 L# e: W$ V0 F4 r& A# ]McASPTxSerActivate(SOC_MCASP_0_CTRL_REGS);
/* make sure that the XDATA bit is cleared to zero */
9 T- t0 A# |" q7 y4 _- C! wwhile(McASPTxStatusGet(SOC_MCASP_0_CTRL_REGS) & MCASP_TX_STAT_DATAREADY);
/* Activate the state machines */) f" c( \! i0 y7 r5 S( k
McASPRxEnable(SOC_MCASP_0_CTRL_REGS);
6 S% D% D# A. E1 gMcASPTxEnable(SOC_MCASP_0_CTRL_REGS);
$ W9 r: c7 x) c}

) x; F. c5 x$ Z  S* j. f* S
请问:问题出在哪了,时钟按照这样配是否有错。
另外我看XDATA一直是0,接收的rxbuf0,1,2里有一般全是FFFF一半全是0.
) `2 \4 c& U# \! l5 i  C& V





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