嵌入式开发者社区

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

作者: wapdasta    时间: 2018-11-7 13:28
标题: MCASP自环配置。
我项目上用OMAPL138的板子MCASP的引脚都是链接的FPGA,所以在FPGA这端设置的MCASP自环。把axr0接收到的通过axr1发回去。
部分代码如下
input mcasp_afsx,3 h* ^' K8 c/ d0 x
input mcasp_ahclkx,! Z3 [; `2 m0 L2 }! g
input mcasp_aclkx,2 l1 @9 y: y% T
input axr0,
% h$ z' H7 E% e8 q) p
% g9 V- E9 h, Y* \/ q) _output mcasp_afsr,
5 m' j& G' `% g3 C' v& Voutput mcasp_ahclkr,4 u2 B) G, i+ L8 g
output mcasp_aclkr,/ o+ R8 \  _' R$ N3 K+ j6 _
output axr1,
" u  i2 B1 J% N( X* y6 Y
assign mcasp_afsr = mcasp_afsx;
% e" R5 d: F. Y  K/ {; }7 H. passign mcasp_aclkr = mcasp_aclkx;
8 ?7 f3 S0 j/ L+ Y5 }7 e. y" fassign mcasp_ahclkr = mcasp_ahclkx;5 l% h3 D, W: t3 i
assign axr1 = axr0;

& I: ~  ~6 n7 A$ ]
# M$ |8 m' C$ ^0 m# F5 S% A- X
在OMAPL138这端,通过axr0接口发固定的数,axr1接收。
在配置MACASP的时候,发送全部取内部时钟,接收全部取外部时钟。
一直循环发送,但是接收不到。在FPGA端也没有看到时钟和信号的波形。
部分代码如下,关于edma3的部分未做变化。
0 z- s2 P+ t/ I) H& d
static void McASPI2SConfigure(void)
6 U, s( F, f2 I6 b8 j% T& y{
- U; k  K- p: Z! N9 B3 mMcASPRxReset(SOC_MCASP_0_CTRL_REGS);
8 I: B4 T8 Q9 j! \  P( hMcASPTxReset(SOC_MCASP_0_CTRL_REGS);
/* Enable the FIFOs for DMA transfer */% r8 f" s( W* s6 L& I: B
McASPReadFifoEnable(SOC_MCASP_0_FIFO_REGS, 1, 1);5 M7 M- [5 v  }# V/ F5 @1 k/ ?0 r
McASPWriteFifoEnable(SOC_MCASP_0_FIFO_REGS, 1, 1);
/* Set I2S format in the transmitter/receiver format units */
8 ?; A' [; A6 `2 ^" q9 n- mMcASPRxFmtI2SSet(SOC_MCASP_0_CTRL_REGS, WORD_SIZE, SLOT_SIZE,8 O# ~. x' a# i7 T
MCASP_RX_MODE_DMA);, k) A* [& Z8 N/ w. k2 ]
McASPTxFmtI2SSet(SOC_MCASP_0_CTRL_REGS, WORD_SIZE, SLOT_SIZE,; p# P/ C- t" C
MCASP_TX_MODE_DMA);
/* Configure the frame sync. I2S shall work in TDM format with 2 slots */
7 X; ^$ t# w8 I3 z1 Z- V! g$ }McASPRxFrameSyncCfg(SOC_MCASP_0_CTRL_REGS, 2, MCASP_RX_FS_WIDTH_WORD, 0 Q; p1 L; [4 d9 j5 |. O! U
MCASP_RX_FS_EXT_BEGIN_ON_FALL_EDGE);
' G* q, I$ k, y' X8 o; y3 oMcASPTxFrameSyncCfg(SOC_MCASP_0_CTRL_REGS, 2, MCASP_TX_FS_WIDTH_WORD,
6 Z8 n) c9 M1 J+ H* f+ CMCASP_TX_FS_INT_BEGIN_ON_RIS_EDGE);
/* configure the clock for receiver */7 c7 v/ @+ G2 v$ \0 R$ J/ o
McASPRxClkCfg(SOC_MCASP_0_CTRL_REGS, MCASP_RX_CLK_EXTERNAL, 0, 0);4 t5 j; n6 [0 q( H: L0 ?2 t+ c( {
McASPRxClkPolaritySet(SOC_MCASP_0_CTRL_REGS, MCASP_RX_CLK_POL_RIS_EDGE);
& C" ]1 r! U3 w' NMcASPRxClkCheckConfig(SOC_MCASP_0_CTRL_REGS, MCASP_RX_CLKCHCK_DIV32,
  k' }7 L5 m; S0x00, 0xFF);
/* configure the clock for transmitter */+ ~. Q' X; x' V! x) O
McASPTxClkCfg(SOC_MCASP_0_CTRL_REGS, MCASP_TX_CLK_INTERNAL, 11, 1);
$ t9 F& Q. q1 u' MMcASPTxClkPolaritySet(SOC_MCASP_0_CTRL_REGS, MCASP_TX_CLK_POL_FALL_EDGE);
* o8 z# O( ^4 j+ TMcASPTxClkCheckConfig(SOC_MCASP_0_CTRL_REGS, MCASP_TX_CLKCHCK_DIV32,# o$ q' _, \. H  Y/ s% Q
0x00, 0xFF);
8 z0 Y3 ~5 s* `) w$ q3 L# ^! G& ~9 O, p8 G2 B0 ]0 y3 m/ K
/* Enable synchronization of RX and TX sections */
3 g  J4 {; I' jMcASPTxRxClkSyncEnable(SOC_MCASP_0_CTRL_REGS);
/* Enable the transmitter/receiver slots. I2S uses 2 slots */
2 m' M- F  {9 F& g" uMcASPRxTimeSlotSet(SOC_MCASP_0_CTRL_REGS, I2S_SLOTS);1 H3 E7 u2 m4 ]/ h+ |: {/ h3 r
McASPTxTimeSlotSet(SOC_MCASP_0_CTRL_REGS, I2S_SLOTS);
/*, f3 R) T1 n9 \1 R, z, O
** Set the serializers, Currently only one serializer is set as9 P! |9 C# n- F5 t; \( Y& j
** transmitter and one serializer as receiver.
) z# ?, q3 q* e3 o$ Y. ~- X+ B*/% l. J* z' k+ P
McASPSerializerRxSet(SOC_MCASP_0_CTRL_REGS, MCASP_XSER_RX);
% A( A7 D1 Z, H: HMcASPSerializerTxSet(SOC_MCASP_0_CTRL_REGS, MCASP_XSER_TX);
/*
2 D  I# a. x6 a8 U- ~. f4 S/ Y3 `** Configure the McASP pins 8 }0 [) D: m( W. j' f$ N
** Input - Frame Sync, Clock and Serializer Rx# a; a5 D  C& U: W6 v9 i  T; f
** Output - Serializer Tx is connected to the input of the codec 4 T: {6 A! N1 v8 s5 w! @2 q
*/
/ T( ~+ d, u2 C' {/ `( SMcASPPinMcASPSet(SOC_MCASP_0_CTRL_REGS, 0xFFFFFFFF);
+ l& `* s. h9 {. B/ |McASPPinDirOutputSet(SOC_MCASP_0_CTRL_REGS,MCASP_PIN_AXR(MCASP_XSER_TX));* \3 T9 E) e/ ?$ z+ k
McASPPinDirInputSet(SOC_MCASP_0_CTRL_REGS, MCASP_PIN_AFSX
) z# [, x6 }$ M+ N; n5 J| MCASP_PIN_ACLKX, S6 O( T4 U" n; |$ l. ]
| MCASP_PIN_AHCLKX3 U: v+ X1 I9 V" l# C& a; Q, a
| MCASP_PIN_AXR(MCASP_XSER_RX));
/* Enable error interrupts for McASP */
7 U) p7 O8 \* Z; C8 i2 rMcASPTxIntEnable(SOC_MCASP_0_CTRL_REGS, MCASP_TX_DMAERROR
; f" x! c; G' ]| MCASP_TX_CLKFAIL & c, {9 S' ]) x1 M. }
| MCASP_TX_SYNCERROR
/ O/ [9 s  H, l5 e+ a7 G3 E| MCASP_TX_UNDERRUN);
McASPRxIntEnable(SOC_MCASP_0_CTRL_REGS, MCASP_RX_DMAERROR
8 D7 U8 w8 b; c7 _, C| MCASP_RX_CLKFAIL
# I$ m8 u: G& p/ ], a| MCASP_RX_SYNCERROR ! L! K% r) N1 i" v
| MCASP_RX_OVERRUN);+ s/ v* \7 x* l
}
static void I2SDataTxRxActivate(void)
+ P9 ^6 M+ L3 u+ Z- {3 b4 {{9 u6 j; I2 ]' G+ o$ s7 t. ?
/* Start the clocks */; H" P4 g, s, X
McASPRxClkStart(SOC_MCASP_0_CTRL_REGS, MCASP_RX_CLK_EXTERNAL);) V9 B; s% s& O$ B6 |
McASPTxClkStart(SOC_MCASP_0_CTRL_REGS, MCASP_TX_CLK_INTERNAL);
/* Enable EDMA for the transfer */7 Y9 L, N" F+ i1 J
EDMA3EnableTransfer(SOC_EDMA30CC_0_REGS, EDMA3_CHA_MCASP0_RX,; E; d% z9 I: O. j
EDMA3_TRIG_MODE_EVENT);; b( N  v9 v( m3 C% z; H
EDMA3EnableTransfer(SOC_EDMA30CC_0_REGS,
: x; a9 P8 @+ ?. A- ZEDMA3_CHA_MCASP0_TX, EDMA3_TRIG_MODE_EVENT);
/* Activate the serializers */
& C" v0 `, B5 a- SMcASPRxSerActivate(SOC_MCASP_0_CTRL_REGS);% Z2 p& I1 t" ~% C9 Q
McASPTxSerActivate(SOC_MCASP_0_CTRL_REGS);
/* make sure that the XDATA bit is cleared to zero */
9 ?  y8 ~; K" G. q( Cwhile(McASPTxStatusGet(SOC_MCASP_0_CTRL_REGS) & MCASP_TX_STAT_DATAREADY);
/* Activate the state machines */3 N( Q; H% S( U) W$ e
McASPRxEnable(SOC_MCASP_0_CTRL_REGS);6 b$ m$ E/ U8 p) c8 c5 T
McASPTxEnable(SOC_MCASP_0_CTRL_REGS);
" B4 H7 U9 |% e}

5 j/ h- n# d' A+ B7 G/ |! d1 m2 I
请问:问题出在哪了,时钟按照这样配是否有错。
另外我看XDATA一直是0,接收的rxbuf0,1,2里有一般全是FFFF一半全是0.
  S- ^+ j7 {1 [. T+ o9 w





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