嵌入式开发者社区

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

作者: wapdasta    时间: 2018-11-7 13:28
标题: MCASP自环配置。
我项目上用OMAPL138的板子MCASP的引脚都是链接的FPGA,所以在FPGA这端设置的MCASP自环。把axr0接收到的通过axr1发回去。
部分代码如下
input mcasp_afsx,
+ c% l' R6 S! ^6 Winput mcasp_ahclkx,
. P' _8 q9 Y5 _- Q1 ninput mcasp_aclkx,
6 }. u' Z/ e  }* zinput axr0,
, C4 r7 e& N9 X  J1 O3 k5 x6 R2 N$ l' }
output mcasp_afsr,/ k4 m6 y9 q, |0 D1 f: o* E7 _5 G, b% G
output mcasp_ahclkr,
3 ?: t( H  e9 H4 i1 M$ Routput mcasp_aclkr,
* s/ h1 b" C8 ~6 g, ?output axr1,
0 H# b( R+ i  y7 t
assign mcasp_afsr = mcasp_afsx;( Z' f# u9 E3 L& Z
assign mcasp_aclkr = mcasp_aclkx;6 m0 Q7 n  P3 Z( Z$ {
assign mcasp_ahclkr = mcasp_ahclkx;% ^) }2 L  @" i/ B7 G
assign axr1 = axr0;

% i( C5 w) s& a/ t$ ~/ X! ~2 P$ Q7 z3 y  G9 R! n
在OMAPL138这端,通过axr0接口发固定的数,axr1接收。
在配置MACASP的时候,发送全部取内部时钟,接收全部取外部时钟。
一直循环发送,但是接收不到。在FPGA端也没有看到时钟和信号的波形。
部分代码如下,关于edma3的部分未做变化。
) m6 Z6 j/ U3 \1 T( I# t
static void McASPI2SConfigure(void)  f/ ~6 ^% C$ H6 z0 R  N
{. Y9 {; C0 S4 H3 y
McASPRxReset(SOC_MCASP_0_CTRL_REGS);4 q8 W. z$ R( h/ R
McASPTxReset(SOC_MCASP_0_CTRL_REGS);
/* Enable the FIFOs for DMA transfer */
$ K: W" @* A: A, X/ Y4 ^McASPReadFifoEnable(SOC_MCASP_0_FIFO_REGS, 1, 1);
* [  J! Y: [* Y: S& yMcASPWriteFifoEnable(SOC_MCASP_0_FIFO_REGS, 1, 1);
/* Set I2S format in the transmitter/receiver format units */
; y) }' [! C" J1 \5 T+ ~6 _McASPRxFmtI2SSet(SOC_MCASP_0_CTRL_REGS, WORD_SIZE, SLOT_SIZE,  a( c! l4 k  f- p) U
MCASP_RX_MODE_DMA);
2 C$ L3 S# V, J8 h6 i& }& y6 zMcASPTxFmtI2SSet(SOC_MCASP_0_CTRL_REGS, WORD_SIZE, SLOT_SIZE,2 r; g  n0 k2 h1 m; H5 D7 F! y
MCASP_TX_MODE_DMA);
/* Configure the frame sync. I2S shall work in TDM format with 2 slots */7 O, _6 [8 y5 l6 c
McASPRxFrameSyncCfg(SOC_MCASP_0_CTRL_REGS, 2, MCASP_RX_FS_WIDTH_WORD,
, O8 o5 [4 W1 f8 ]3 sMCASP_RX_FS_EXT_BEGIN_ON_FALL_EDGE);9 e$ j/ r& X/ Y& U% }
McASPTxFrameSyncCfg(SOC_MCASP_0_CTRL_REGS, 2, MCASP_TX_FS_WIDTH_WORD, , z  y1 K$ I5 S/ B+ ^7 @
MCASP_TX_FS_INT_BEGIN_ON_RIS_EDGE);
/* configure the clock for receiver */
8 L+ }4 a3 {/ _2 CMcASPRxClkCfg(SOC_MCASP_0_CTRL_REGS, MCASP_RX_CLK_EXTERNAL, 0, 0);
+ X& k  Y: P. }! b5 }McASPRxClkPolaritySet(SOC_MCASP_0_CTRL_REGS, MCASP_RX_CLK_POL_RIS_EDGE); * h0 a& b2 x2 V
McASPRxClkCheckConfig(SOC_MCASP_0_CTRL_REGS, MCASP_RX_CLKCHCK_DIV32,, E$ E4 t  f/ B# f' ^. g# t" ]) ^! |
0x00, 0xFF);
/* configure the clock for transmitter */
- M9 G* x( t8 C2 H5 tMcASPTxClkCfg(SOC_MCASP_0_CTRL_REGS, MCASP_TX_CLK_INTERNAL, 11, 1);
0 {+ O  G5 P3 E" P: S7 `/ @/ \& k$ gMcASPTxClkPolaritySet(SOC_MCASP_0_CTRL_REGS, MCASP_TX_CLK_POL_FALL_EDGE); 7 C) ~" F7 \2 s
McASPTxClkCheckConfig(SOC_MCASP_0_CTRL_REGS, MCASP_TX_CLKCHCK_DIV32,
* _  P6 A6 x3 }' v; T0x00, 0xFF);+ y5 n" V& m- X, F& m, U
% U$ \  o5 H" t
/* Enable synchronization of RX and TX sections */
4 f; f& I- C$ s/ l# J! s) kMcASPTxRxClkSyncEnable(SOC_MCASP_0_CTRL_REGS);
/* Enable the transmitter/receiver slots. I2S uses 2 slots */
# W' e% f; f( [4 l6 `% J/ s! }' cMcASPRxTimeSlotSet(SOC_MCASP_0_CTRL_REGS, I2S_SLOTS);
. D( R; u, L2 E4 rMcASPTxTimeSlotSet(SOC_MCASP_0_CTRL_REGS, I2S_SLOTS);
/*
1 T1 T0 `9 y, g3 C& A- O** Set the serializers, Currently only one serializer is set as2 \/ [" L" |+ X1 S6 G2 {
** transmitter and one serializer as receiver.
/ X4 E4 P8 |4 L( s7 z*/
& g2 P: @: V; P9 y; ?McASPSerializerRxSet(SOC_MCASP_0_CTRL_REGS, MCASP_XSER_RX);
5 s- d, {9 k. V6 k2 G0 gMcASPSerializerTxSet(SOC_MCASP_0_CTRL_REGS, MCASP_XSER_TX);
/*
( k5 O/ u; F! L** Configure the McASP pins
9 }  q0 B, Y4 U) I0 }* d- W( Q! m** Input - Frame Sync, Clock and Serializer Rx' V2 y9 E0 v2 b& n: J( O* n
** Output - Serializer Tx is connected to the input of the codec 1 n: U" P" t* R0 O8 }7 x2 b- |! l
*/
0 I$ s" K: g0 d( n/ m2 F( v2 m% ~McASPPinMcASPSet(SOC_MCASP_0_CTRL_REGS, 0xFFFFFFFF);2 D$ G! h6 y* b4 J/ r* q7 A3 u! T
McASPPinDirOutputSet(SOC_MCASP_0_CTRL_REGS,MCASP_PIN_AXR(MCASP_XSER_TX));
, L5 ^1 t/ u9 o# H) A( k% n1 K/ ]McASPPinDirInputSet(SOC_MCASP_0_CTRL_REGS, MCASP_PIN_AFSX
4 c0 y7 O5 O1 P& F1 W/ F  H7 u  f) I4 F| MCASP_PIN_ACLKX
( S  }5 y% c# k! d. c8 R5 w0 _| MCASP_PIN_AHCLKX
% s1 v! {3 p: v* J0 X| MCASP_PIN_AXR(MCASP_XSER_RX));
/* Enable error interrupts for McASP */
8 z! z% q" m1 [8 X6 ?0 q9 J+ jMcASPTxIntEnable(SOC_MCASP_0_CTRL_REGS, MCASP_TX_DMAERROR
+ P: f3 u% G/ m6 _| MCASP_TX_CLKFAIL % w1 _0 |$ C  a( j2 W% Y
| MCASP_TX_SYNCERROR
* C5 x* J- G/ L( }' L' h| MCASP_TX_UNDERRUN);
McASPRxIntEnable(SOC_MCASP_0_CTRL_REGS, MCASP_RX_DMAERROR 4 x; {* `1 w. b! u+ D
| MCASP_RX_CLKFAIL, \% h9 R  }. b- v3 }
| MCASP_RX_SYNCERROR
1 J5 H& |5 g2 K5 C. ?! e5 T| MCASP_RX_OVERRUN);
, c1 x4 z) A! t. f; ^" {1 }}
static void I2SDataTxRxActivate(void)4 v8 w2 q: l$ I+ G  B, m
{* J" @7 U) O  P) d8 L1 x4 _# g
/* Start the clocks */9 a% H0 I0 }, z/ n$ z7 I
McASPRxClkStart(SOC_MCASP_0_CTRL_REGS, MCASP_RX_CLK_EXTERNAL);
% B& F3 _8 E9 iMcASPTxClkStart(SOC_MCASP_0_CTRL_REGS, MCASP_TX_CLK_INTERNAL);
/* Enable EDMA for the transfer */
$ m7 n0 v- |) Y- P' uEDMA3EnableTransfer(SOC_EDMA30CC_0_REGS, EDMA3_CHA_MCASP0_RX,
4 p0 D$ w2 w% V% @1 W( XEDMA3_TRIG_MODE_EVENT);6 J6 f1 |8 X# V; X9 E3 z
EDMA3EnableTransfer(SOC_EDMA30CC_0_REGS,
; T8 O" M9 T& G- |+ z7 hEDMA3_CHA_MCASP0_TX, EDMA3_TRIG_MODE_EVENT);
/* Activate the serializers */% w  `7 a) j( e' L
McASPRxSerActivate(SOC_MCASP_0_CTRL_REGS);
' ]! @! o, D! |# }: W& JMcASPTxSerActivate(SOC_MCASP_0_CTRL_REGS);
/* make sure that the XDATA bit is cleared to zero */
* O+ Z) R: d4 n# F  u7 awhile(McASPTxStatusGet(SOC_MCASP_0_CTRL_REGS) & MCASP_TX_STAT_DATAREADY);
/* Activate the state machines */
/ a/ m! A) f; M2 `: p% MMcASPRxEnable(SOC_MCASP_0_CTRL_REGS);
6 @* d1 J5 e1 Y' rMcASPTxEnable(SOC_MCASP_0_CTRL_REGS);
3 J/ t5 f% C/ S2 R, e: N}
% X- V- r3 d  k# ?" V
请问:问题出在哪了,时钟按照这样配是否有错。
另外我看XDATA一直是0,接收的rxbuf0,1,2里有一般全是FFFF一半全是0.

1 ~' a6 x1 G) J  _




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