嵌入式开发者社区

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

作者: wapdasta    时间: 2018-11-7 13:28
标题: MCASP自环配置。
我项目上用OMAPL138的板子MCASP的引脚都是链接的FPGA,所以在FPGA这端设置的MCASP自环。把axr0接收到的通过axr1发回去。
部分代码如下
input mcasp_afsx,9 E5 W, o. ]  B, W* U: }
input mcasp_ahclkx,. k' t& _) Z' K
input mcasp_aclkx,4 X& A( Q/ {# f& b: l
input axr0,( O' ]4 Y7 |9 H* R
2 K* i8 Z1 g( |1 G- ?
output mcasp_afsr,
; {6 h3 u9 W# A& v8 o5 coutput mcasp_ahclkr,9 c5 }- `2 |- Q% \
output mcasp_aclkr,
$ Y6 h2 F3 B$ [/ X% Doutput axr1,5 w, r/ f/ e5 O, R. D9 n
assign mcasp_afsr = mcasp_afsx;
4 j1 |& X$ |6 q3 B* g$ Fassign mcasp_aclkr = mcasp_aclkx;
( b8 x5 |# X% |1 P; r* Hassign mcasp_ahclkr = mcasp_ahclkx;( d) l( M: D; Y/ r
assign axr1 = axr0;
: Y5 ~8 x, @% H& n- l$ n

! ?3 E; ^. c, Q7 j( m5 s& }' w
在OMAPL138这端,通过axr0接口发固定的数,axr1接收。
在配置MACASP的时候,发送全部取内部时钟,接收全部取外部时钟。
一直循环发送,但是接收不到。在FPGA端也没有看到时钟和信号的波形。
部分代码如下,关于edma3的部分未做变化。

3 U9 Q! y: I- H. K+ j
static void McASPI2SConfigure(void)/ i4 Z! D# n* \% o% o, j
{
$ Q  \/ _8 \' _3 [McASPRxReset(SOC_MCASP_0_CTRL_REGS);* {4 w" X- k. j. m, Y
McASPTxReset(SOC_MCASP_0_CTRL_REGS);
/* Enable the FIFOs for DMA transfer */
; `, e* J- m0 vMcASPReadFifoEnable(SOC_MCASP_0_FIFO_REGS, 1, 1);
8 i9 _, u0 R5 ?/ _8 H4 vMcASPWriteFifoEnable(SOC_MCASP_0_FIFO_REGS, 1, 1);
/* Set I2S format in the transmitter/receiver format units */
4 `% s3 `: O% l" G" z7 E, RMcASPRxFmtI2SSet(SOC_MCASP_0_CTRL_REGS, WORD_SIZE, SLOT_SIZE,' b) H* Z, G8 P8 v) X+ `0 Q
MCASP_RX_MODE_DMA);
! r% z$ M" }+ ~- {- {$ Y" M# [5 cMcASPTxFmtI2SSet(SOC_MCASP_0_CTRL_REGS, WORD_SIZE, SLOT_SIZE,; q& z/ P" A  i3 h
MCASP_TX_MODE_DMA);
/* Configure the frame sync. I2S shall work in TDM format with 2 slots */
6 t4 d1 U5 U7 F8 d! fMcASPRxFrameSyncCfg(SOC_MCASP_0_CTRL_REGS, 2, MCASP_RX_FS_WIDTH_WORD, 4 I/ P7 R' W# E; M& n; ?7 u) X7 O
MCASP_RX_FS_EXT_BEGIN_ON_FALL_EDGE);
* U) @/ u' u0 I6 K" }. V) cMcASPTxFrameSyncCfg(SOC_MCASP_0_CTRL_REGS, 2, MCASP_TX_FS_WIDTH_WORD,
7 V; |& Q' Y6 bMCASP_TX_FS_INT_BEGIN_ON_RIS_EDGE);
/* configure the clock for receiver */6 w0 m/ O! N9 _6 w
McASPRxClkCfg(SOC_MCASP_0_CTRL_REGS, MCASP_RX_CLK_EXTERNAL, 0, 0);
( _- D7 N# s$ @- kMcASPRxClkPolaritySet(SOC_MCASP_0_CTRL_REGS, MCASP_RX_CLK_POL_RIS_EDGE);
& [# o  J: [, e# J1 y+ EMcASPRxClkCheckConfig(SOC_MCASP_0_CTRL_REGS, MCASP_RX_CLKCHCK_DIV32,! D/ p3 m6 \1 |8 L" Q6 f! E
0x00, 0xFF);
/* configure the clock for transmitter */
' o' n* F- d& f; ~; r9 iMcASPTxClkCfg(SOC_MCASP_0_CTRL_REGS, MCASP_TX_CLK_INTERNAL, 11, 1);
. q3 U! c  \; [% R8 t* A8 BMcASPTxClkPolaritySet(SOC_MCASP_0_CTRL_REGS, MCASP_TX_CLK_POL_FALL_EDGE);
- H' u4 d2 f7 y3 }3 g. @# bMcASPTxClkCheckConfig(SOC_MCASP_0_CTRL_REGS, MCASP_TX_CLKCHCK_DIV32,
, c4 f/ r% S* I/ N7 F7 G% B0x00, 0xFF);- Y2 S( q+ b3 C8 ^; Q3 o4 B4 p0 i
: z# i0 J0 [: k" d7 J6 w3 O
/* Enable synchronization of RX and TX sections */
; Q4 _; L4 k/ K3 k9 q3 f1 IMcASPTxRxClkSyncEnable(SOC_MCASP_0_CTRL_REGS);
/* Enable the transmitter/receiver slots. I2S uses 2 slots */8 a& V: v# f8 [
McASPRxTimeSlotSet(SOC_MCASP_0_CTRL_REGS, I2S_SLOTS);
$ g+ \+ ^. u/ ?7 i! _) p% _9 Z* jMcASPTxTimeSlotSet(SOC_MCASP_0_CTRL_REGS, I2S_SLOTS);
/*
+ Z6 ~6 U* y0 r7 @** Set the serializers, Currently only one serializer is set as) W$ c/ s) J  c- J
** transmitter and one serializer as receiver.
, d0 S  {6 W* W* D! v5 v/ _*/, ^' O% p8 Q$ @: m: k) ^7 q( _, r
McASPSerializerRxSet(SOC_MCASP_0_CTRL_REGS, MCASP_XSER_RX);1 _8 A' _  ?( L( J* r
McASPSerializerTxSet(SOC_MCASP_0_CTRL_REGS, MCASP_XSER_TX);
/*
, ^' X1 E& O* [8 m! v) D7 |** Configure the McASP pins + J; ]" l1 P" r6 U& E2 ~5 @
** Input - Frame Sync, Clock and Serializer Rx
$ L. U$ w! h( {# V2 B** Output - Serializer Tx is connected to the input of the codec
- E9 B+ a) m8 w) Z6 k5 F0 X*/4 j0 L# w1 Y, w1 i9 [$ `' X1 ?$ Q
McASPPinMcASPSet(SOC_MCASP_0_CTRL_REGS, 0xFFFFFFFF);# e) F# z$ u6 s0 `' ^9 I. [& L, Z
McASPPinDirOutputSet(SOC_MCASP_0_CTRL_REGS,MCASP_PIN_AXR(MCASP_XSER_TX));- S' L" e. B0 {9 l- d; U. K) K$ P! f
McASPPinDirInputSet(SOC_MCASP_0_CTRL_REGS, MCASP_PIN_AFSX: ~1 p5 v5 f5 N- J4 L) }
| MCASP_PIN_ACLKX: r" F, D" N  w0 {1 G
| MCASP_PIN_AHCLKX
) z5 a" k* j8 J( p8 ?9 m, n| MCASP_PIN_AXR(MCASP_XSER_RX));
/* Enable error interrupts for McASP */
, \# b8 R: F# ?- n4 V0 NMcASPTxIntEnable(SOC_MCASP_0_CTRL_REGS, MCASP_TX_DMAERROR
+ u; V# j/ p% U/ w+ r| MCASP_TX_CLKFAIL
+ z  V3 [+ s* u# m, g| MCASP_TX_SYNCERROR
; W* a# {/ T9 B8 [| MCASP_TX_UNDERRUN);
McASPRxIntEnable(SOC_MCASP_0_CTRL_REGS, MCASP_RX_DMAERROR $ E$ t* `4 a8 D) t$ O
| MCASP_RX_CLKFAIL- ?' \# C2 _9 }- M' \- Q+ A  ]
| MCASP_RX_SYNCERROR " |, ~7 Y5 s4 c, T5 @; g
| MCASP_RX_OVERRUN);
, O% k- e0 f& _: T2 q% ]4 ~}
static void I2SDataTxRxActivate(void), z1 y& ?' G0 d$ \
{; x: S- X- y4 F  ?; @
/* Start the clocks */- V5 B' }1 w) b4 J6 u# y
McASPRxClkStart(SOC_MCASP_0_CTRL_REGS, MCASP_RX_CLK_EXTERNAL);" D3 q7 i4 E( z! _' z0 {: f) X
McASPTxClkStart(SOC_MCASP_0_CTRL_REGS, MCASP_TX_CLK_INTERNAL);
/* Enable EDMA for the transfer */* W& Q  }. O+ z2 X, ~
EDMA3EnableTransfer(SOC_EDMA30CC_0_REGS, EDMA3_CHA_MCASP0_RX,
3 ?) l8 `4 B# Q) K2 ?" N. hEDMA3_TRIG_MODE_EVENT);
" k- B2 M, w1 E$ C$ [EDMA3EnableTransfer(SOC_EDMA30CC_0_REGS,
8 o7 L8 k$ [( bEDMA3_CHA_MCASP0_TX, EDMA3_TRIG_MODE_EVENT);
/* Activate the serializers */# `5 N$ d/ g8 G2 H' B9 T& q$ C2 h7 l* S
McASPRxSerActivate(SOC_MCASP_0_CTRL_REGS);
3 l  G. i9 L6 x1 B6 g* uMcASPTxSerActivate(SOC_MCASP_0_CTRL_REGS);
/* make sure that the XDATA bit is cleared to zero */
" t& U- R  C3 C+ Lwhile(McASPTxStatusGet(SOC_MCASP_0_CTRL_REGS) & MCASP_TX_STAT_DATAREADY);
/* Activate the state machines */4 {6 G5 L; O" m9 L
McASPRxEnable(SOC_MCASP_0_CTRL_REGS);
4 O( j* p5 ~* Q& m1 h: S4 KMcASPTxEnable(SOC_MCASP_0_CTRL_REGS);
: f" d" t  M6 [}

- m- ~, x: }2 i! G2 m' S7 E. x
请问:问题出在哪了,时钟按照这样配是否有错。
另外我看XDATA一直是0,接收的rxbuf0,1,2里有一般全是FFFF一半全是0.
8 S2 }/ ?8 O! n  v4 S5 ?





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