嵌入式开发者社区

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

作者: wapdasta    时间: 2018-11-7 13:28
标题: MCASP自环配置。
我项目上用OMAPL138的板子MCASP的引脚都是链接的FPGA,所以在FPGA这端设置的MCASP自环。把axr0接收到的通过axr1发回去。
部分代码如下
input mcasp_afsx,# x- @$ _0 |  h, `' r( M& q
input mcasp_ahclkx,
  b$ Z# E: v4 winput mcasp_aclkx,
" C) @" t3 t; k( ]& q, ^! ~1 W: }input axr0,6 \9 d+ y# w$ c* t

+ T4 h" Q# K1 ?4 a/ boutput mcasp_afsr,5 x) ?0 [7 w  p3 V
output mcasp_ahclkr,
$ H/ K0 f& e& Goutput mcasp_aclkr,
) r( ?# i! ?( H4 E/ Foutput axr1,
+ M1 V4 P6 w7 n1 [: u- f
assign mcasp_afsr = mcasp_afsx;( }) V; K2 v5 Z; {* G3 C
assign mcasp_aclkr = mcasp_aclkx;
/ f, n9 {2 A4 b( ?6 l! E' ?9 X! ?4 @assign mcasp_ahclkr = mcasp_ahclkx;
- [9 b, f4 U3 b; Aassign axr1 = axr0;
* n' k! R8 ?1 \% q7 F8 H9 L- Y' [
6 Q+ f' Z+ ~6 b0 a# }
在OMAPL138这端,通过axr0接口发固定的数,axr1接收。
在配置MACASP的时候,发送全部取内部时钟,接收全部取外部时钟。
一直循环发送,但是接收不到。在FPGA端也没有看到时钟和信号的波形。
部分代码如下,关于edma3的部分未做变化。
1 y; [9 T9 n- o" F% W
static void McASPI2SConfigure(void)* ?9 s% c/ Z1 m5 q* V
{0 u  Z: R9 c5 A, W3 D8 X) W
McASPRxReset(SOC_MCASP_0_CTRL_REGS);( d" W6 Q4 L, [) T- G
McASPTxReset(SOC_MCASP_0_CTRL_REGS);
/* Enable the FIFOs for DMA transfer */
# ?, I/ \! Q: U# p9 D7 \( a1 YMcASPReadFifoEnable(SOC_MCASP_0_FIFO_REGS, 1, 1);
) m' V. F. I0 |, ]McASPWriteFifoEnable(SOC_MCASP_0_FIFO_REGS, 1, 1);
/* Set I2S format in the transmitter/receiver format units */6 `6 \/ P' W/ s; O7 I5 f) v3 w; l8 ~
McASPRxFmtI2SSet(SOC_MCASP_0_CTRL_REGS, WORD_SIZE, SLOT_SIZE,% }  j5 [+ b" M) }& m5 Q  P" }
MCASP_RX_MODE_DMA);; O7 d2 v6 G# P1 k
McASPTxFmtI2SSet(SOC_MCASP_0_CTRL_REGS, WORD_SIZE, SLOT_SIZE,- v" Y3 a, d+ X' l* l$ a
MCASP_TX_MODE_DMA);
/* Configure the frame sync. I2S shall work in TDM format with 2 slots */& o4 S" Y0 t: j; X
McASPRxFrameSyncCfg(SOC_MCASP_0_CTRL_REGS, 2, MCASP_RX_FS_WIDTH_WORD,
: Z2 h: L" t5 F/ h( ^+ CMCASP_RX_FS_EXT_BEGIN_ON_FALL_EDGE);
8 \+ }: z" w/ HMcASPTxFrameSyncCfg(SOC_MCASP_0_CTRL_REGS, 2, MCASP_TX_FS_WIDTH_WORD, 3 {' J# b; }2 k/ i% _
MCASP_TX_FS_INT_BEGIN_ON_RIS_EDGE);
/* configure the clock for receiver */# e* m/ R* t! M8 L( x% d  Z/ S
McASPRxClkCfg(SOC_MCASP_0_CTRL_REGS, MCASP_RX_CLK_EXTERNAL, 0, 0);$ w& \  D8 C# j2 ?, b( C
McASPRxClkPolaritySet(SOC_MCASP_0_CTRL_REGS, MCASP_RX_CLK_POL_RIS_EDGE);
# H7 N' c- l) P+ q) }) N; [& }+ }8 \McASPRxClkCheckConfig(SOC_MCASP_0_CTRL_REGS, MCASP_RX_CLKCHCK_DIV32,
; B; g* ^& u1 m7 F7 @) ~: d3 ~0x00, 0xFF);
/* configure the clock for transmitter */; ]5 m) c; R* {9 Z
McASPTxClkCfg(SOC_MCASP_0_CTRL_REGS, MCASP_TX_CLK_INTERNAL, 11, 1);" ^' @7 T+ _& O* F9 Q) e" _
McASPTxClkPolaritySet(SOC_MCASP_0_CTRL_REGS, MCASP_TX_CLK_POL_FALL_EDGE);
; l- q' H% g0 y1 V  y. }4 _McASPTxClkCheckConfig(SOC_MCASP_0_CTRL_REGS, MCASP_TX_CLKCHCK_DIV32,
' E, _7 V/ _+ N0x00, 0xFF);
% A7 O" q9 q6 _, |& N  ]$ y+ f; \/ d. {, J0 ^% \8 `
/* Enable synchronization of RX and TX sections */ 7 [+ x+ Z4 D6 J
McASPTxRxClkSyncEnable(SOC_MCASP_0_CTRL_REGS);
/* Enable the transmitter/receiver slots. I2S uses 2 slots */
6 B. B; O& r; s  `# h6 kMcASPRxTimeSlotSet(SOC_MCASP_0_CTRL_REGS, I2S_SLOTS);) p" [6 j1 \2 V: \1 ~
McASPTxTimeSlotSet(SOC_MCASP_0_CTRL_REGS, I2S_SLOTS);
/*
9 y) j( ~2 A' f1 L** Set the serializers, Currently only one serializer is set as$ E: W. E5 Y- i, z8 T1 `
** transmitter and one serializer as receiver.% b8 ^5 s; R8 c4 ], u
*/& g8 J& W) ~4 C6 a
McASPSerializerRxSet(SOC_MCASP_0_CTRL_REGS, MCASP_XSER_RX);0 j, f3 I. a0 u1 E" b2 k" ~0 p
McASPSerializerTxSet(SOC_MCASP_0_CTRL_REGS, MCASP_XSER_TX);
/*
' H& h# R  n6 @* [# _$ p; B  ]** Configure the McASP pins
" c8 a5 @+ M0 z7 }* }** Input - Frame Sync, Clock and Serializer Rx
6 J- r; B6 I, s  N' @1 O( E# R** Output - Serializer Tx is connected to the input of the codec
5 J+ R) _, M* v3 D/ C9 [1 l*/
& ~" d3 g/ T: F  g' U9 r) `* W9 d1 XMcASPPinMcASPSet(SOC_MCASP_0_CTRL_REGS, 0xFFFFFFFF);
3 a& b4 G, |3 _$ c3 CMcASPPinDirOutputSet(SOC_MCASP_0_CTRL_REGS,MCASP_PIN_AXR(MCASP_XSER_TX));% Z% v- s7 {& Z' y
McASPPinDirInputSet(SOC_MCASP_0_CTRL_REGS, MCASP_PIN_AFSX
/ Y: n$ U. G0 ]3 L$ v- m| MCASP_PIN_ACLKX
* v+ y3 k5 G- i" _* N  J+ E" h2 {0 ?  ^| MCASP_PIN_AHCLKX
+ G& z- e" @  t9 ~| MCASP_PIN_AXR(MCASP_XSER_RX));
/* Enable error interrupts for McASP */4 _" P7 v) x& Q( ~
McASPTxIntEnable(SOC_MCASP_0_CTRL_REGS, MCASP_TX_DMAERROR
  @6 [; \: n8 A; g0 Q; S# V9 L| MCASP_TX_CLKFAIL
) W' g  b4 g* Z3 d/ f( M| MCASP_TX_SYNCERROR
' o$ N  v! J5 \  T& s! q- V" d; ^| MCASP_TX_UNDERRUN);
McASPRxIntEnable(SOC_MCASP_0_CTRL_REGS, MCASP_RX_DMAERROR 5 f+ F7 c# _! R0 p3 Q
| MCASP_RX_CLKFAIL: `0 r  E  p% `
| MCASP_RX_SYNCERROR
( B4 g& D, ~: x| MCASP_RX_OVERRUN);3 x" |+ I; {9 p$ N! B& Y
}
static void I2SDataTxRxActivate(void)) G! G. M4 m( E/ ~6 W, X8 k/ z
{% p" M* B6 J, |* m( a6 `7 q
/* Start the clocks */
) J0 a7 c, P2 W' ]" k* q) zMcASPRxClkStart(SOC_MCASP_0_CTRL_REGS, MCASP_RX_CLK_EXTERNAL);
  e! T. U+ `5 z7 L4 ?0 hMcASPTxClkStart(SOC_MCASP_0_CTRL_REGS, MCASP_TX_CLK_INTERNAL);
/* Enable EDMA for the transfer */, ]( p3 v/ o& J4 s! P
EDMA3EnableTransfer(SOC_EDMA30CC_0_REGS, EDMA3_CHA_MCASP0_RX,
  }+ [0 Y" o7 o1 A" F" }$ N' YEDMA3_TRIG_MODE_EVENT);. ~3 F2 L9 Y9 w
EDMA3EnableTransfer(SOC_EDMA30CC_0_REGS,
( m( u9 z8 |7 V( NEDMA3_CHA_MCASP0_TX, EDMA3_TRIG_MODE_EVENT);
/* Activate the serializers */
3 L: b2 |4 }6 b" lMcASPRxSerActivate(SOC_MCASP_0_CTRL_REGS);
9 z6 r' {: I2 [" OMcASPTxSerActivate(SOC_MCASP_0_CTRL_REGS);
/* make sure that the XDATA bit is cleared to zero */8 V7 }9 w$ o9 p) G
while(McASPTxStatusGet(SOC_MCASP_0_CTRL_REGS) & MCASP_TX_STAT_DATAREADY);
/* Activate the state machines */
5 ?$ e# S/ M7 J5 c$ p3 vMcASPRxEnable(SOC_MCASP_0_CTRL_REGS);* h& R, ?3 y* ], t* ]
McASPTxEnable(SOC_MCASP_0_CTRL_REGS);& \6 D! x$ F* v
}

+ e: z3 Q- n- Z1 C4 {: H
请问:问题出在哪了,时钟按照这样配是否有错。
另外我看XDATA一直是0,接收的rxbuf0,1,2里有一般全是FFFF一半全是0.
1 n- H% r. B6 r: d





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