嵌入式开发者社区

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

作者: wapdasta    时间: 2018-11-7 13:28
标题: MCASP自环配置。
我项目上用OMAPL138的板子MCASP的引脚都是链接的FPGA,所以在FPGA这端设置的MCASP自环。把axr0接收到的通过axr1发回去。
部分代码如下
input mcasp_afsx,9 k* l4 Q9 B7 M# ^9 R: v  p* w
input mcasp_ahclkx,
( \+ M' z" P1 e" J7 }: j/ I. uinput mcasp_aclkx,  v. a; f5 ]  e$ r' v" e* |
input axr0,
& u# ^* Y; o3 F4 _; F0 q2 W' r  D
$ f6 x3 w1 w& M2 }output mcasp_afsr,
4 D# Z! R6 }% U9 L* D! ooutput mcasp_ahclkr,
" e& ?% ^. _) ^7 U' q% uoutput mcasp_aclkr,- @4 _5 ]; L0 @
output axr1,) B# f1 ~$ ]0 s" W5 B1 `
assign mcasp_afsr = mcasp_afsx;
+ k% L8 r& d& E# a1 passign mcasp_aclkr = mcasp_aclkx;
6 {/ t" G' V# y! B; D2 K/ dassign mcasp_ahclkr = mcasp_ahclkx;
; [. a8 ?! o- P0 \assign axr1 = axr0;
5 G+ k7 g) o5 f5 ]
' P0 a0 g- h& q; g! ^
在OMAPL138这端,通过axr0接口发固定的数,axr1接收。
在配置MACASP的时候,发送全部取内部时钟,接收全部取外部时钟。
一直循环发送,但是接收不到。在FPGA端也没有看到时钟和信号的波形。
部分代码如下,关于edma3的部分未做变化。
( s( w- G5 L( M/ o% }( ~
static void McASPI2SConfigure(void)
$ T. c9 }% A# A/ d5 D$ r0 {+ ?{; Z4 g! d" C3 ?( n6 ]
McASPRxReset(SOC_MCASP_0_CTRL_REGS);
2 |1 B( L8 l3 B8 K* C, UMcASPTxReset(SOC_MCASP_0_CTRL_REGS);
/* Enable the FIFOs for DMA transfer */
3 }' N- Z8 B& j1 j/ E, M$ E3 oMcASPReadFifoEnable(SOC_MCASP_0_FIFO_REGS, 1, 1);7 T8 F& C" m; k
McASPWriteFifoEnable(SOC_MCASP_0_FIFO_REGS, 1, 1);
/* Set I2S format in the transmitter/receiver format units */
% i! f6 Z0 w, T9 B/ e2 J7 cMcASPRxFmtI2SSet(SOC_MCASP_0_CTRL_REGS, WORD_SIZE, SLOT_SIZE,
, d2 I# h' V: h+ }0 AMCASP_RX_MODE_DMA);
: _: k9 e9 q( F- n5 o) w5 Q# x4 s) AMcASPTxFmtI2SSet(SOC_MCASP_0_CTRL_REGS, WORD_SIZE, SLOT_SIZE,
( \" G4 y5 E! rMCASP_TX_MODE_DMA);
/* Configure the frame sync. I2S shall work in TDM format with 2 slots */6 P, \) }: n$ z+ q8 {: ^9 q$ s
McASPRxFrameSyncCfg(SOC_MCASP_0_CTRL_REGS, 2, MCASP_RX_FS_WIDTH_WORD, : v/ s6 f( I. D" b0 N4 E! T; f  Q
MCASP_RX_FS_EXT_BEGIN_ON_FALL_EDGE);. [% ]7 _. s2 [9 c+ W
McASPTxFrameSyncCfg(SOC_MCASP_0_CTRL_REGS, 2, MCASP_TX_FS_WIDTH_WORD, ! B9 y3 m. P$ p# W, j0 R
MCASP_TX_FS_INT_BEGIN_ON_RIS_EDGE);
/* configure the clock for receiver */4 o" B: E) P! I7 b' n1 l
McASPRxClkCfg(SOC_MCASP_0_CTRL_REGS, MCASP_RX_CLK_EXTERNAL, 0, 0);
% [% W/ H, l. h2 S( sMcASPRxClkPolaritySet(SOC_MCASP_0_CTRL_REGS, MCASP_RX_CLK_POL_RIS_EDGE); , C4 C- ^6 Y# @. ~, h, o
McASPRxClkCheckConfig(SOC_MCASP_0_CTRL_REGS, MCASP_RX_CLKCHCK_DIV32,% F0 \9 S1 b) F2 m& N; a! K
0x00, 0xFF);
/* configure the clock for transmitter */' c$ _( |# j* g
McASPTxClkCfg(SOC_MCASP_0_CTRL_REGS, MCASP_TX_CLK_INTERNAL, 11, 1);" L: D8 p" L1 r. F
McASPTxClkPolaritySet(SOC_MCASP_0_CTRL_REGS, MCASP_TX_CLK_POL_FALL_EDGE);
# Y  ^' \& v! }; ]5 a) M  ]McASPTxClkCheckConfig(SOC_MCASP_0_CTRL_REGS, MCASP_TX_CLKCHCK_DIV32,; Q( d5 ?% U. v0 ~- V3 B" [
0x00, 0xFF);
# w8 {* M7 A! K) I5 \. B4 k2 |7 T2 m. h5 `1 A; H
/* Enable synchronization of RX and TX sections */
2 ?5 G) a# G: q  q: F) T' c5 EMcASPTxRxClkSyncEnable(SOC_MCASP_0_CTRL_REGS);
/* Enable the transmitter/receiver slots. I2S uses 2 slots */
7 q, h# {$ ~) HMcASPRxTimeSlotSet(SOC_MCASP_0_CTRL_REGS, I2S_SLOTS);
$ Q. o  Y( t$ g) nMcASPTxTimeSlotSet(SOC_MCASP_0_CTRL_REGS, I2S_SLOTS);
/*
7 l0 `9 a# H3 E7 p; ]8 [; S3 Z** Set the serializers, Currently only one serializer is set as
/ p6 t+ G. }: q" K' t  w# R** transmitter and one serializer as receiver.
, m- o6 {* Z9 V* {7 _*/
6 w. O* r  v+ Y/ ?7 tMcASPSerializerRxSet(SOC_MCASP_0_CTRL_REGS, MCASP_XSER_RX);" n6 o" `4 f0 c5 M3 I& @8 A
McASPSerializerTxSet(SOC_MCASP_0_CTRL_REGS, MCASP_XSER_TX);
/*
0 c  @3 A/ g2 j- c+ v4 }** Configure the McASP pins 1 C) U. ~8 g8 Q- r7 W
** Input - Frame Sync, Clock and Serializer Rx8 q8 [: T% N+ Y
** Output - Serializer Tx is connected to the input of the codec 2 U3 M0 p3 A( Q4 v" ~
*/: F& q1 [! d' k' m& h0 v
McASPPinMcASPSet(SOC_MCASP_0_CTRL_REGS, 0xFFFFFFFF);
. }% n0 o8 Z3 }McASPPinDirOutputSet(SOC_MCASP_0_CTRL_REGS,MCASP_PIN_AXR(MCASP_XSER_TX));
6 u6 S2 M$ k% R3 r8 ~& d5 X$ ?McASPPinDirInputSet(SOC_MCASP_0_CTRL_REGS, MCASP_PIN_AFSX
3 H$ L3 c5 f& S$ g& G6 Q| MCASP_PIN_ACLKX; P; }& a& d4 k8 ]- t
| MCASP_PIN_AHCLKX1 L2 r2 ]$ p# I8 d" z/ a: {
| MCASP_PIN_AXR(MCASP_XSER_RX));
/* Enable error interrupts for McASP *// g& Z9 r$ d) \0 J6 M5 {5 t8 ^
McASPTxIntEnable(SOC_MCASP_0_CTRL_REGS, MCASP_TX_DMAERROR ( t) z6 N0 |: g1 l/ X! V) `
| MCASP_TX_CLKFAIL 5 X8 {. v  M- w( ^
| MCASP_TX_SYNCERROR5 X) N& D1 v9 b. s8 b
| MCASP_TX_UNDERRUN);
McASPRxIntEnable(SOC_MCASP_0_CTRL_REGS, MCASP_RX_DMAERROR % T* G! |' j6 u2 n7 T/ X  j! \
| MCASP_RX_CLKFAIL
$ c: O3 i1 k' @/ H6 a| MCASP_RX_SYNCERROR ! r" f) m8 |8 u
| MCASP_RX_OVERRUN);5 B: D8 m: H" Z5 T2 H
}
static void I2SDataTxRxActivate(void)& S* T- G% z9 Z7 E7 ], u
{
+ X1 y! M; p0 V/* Start the clocks */
7 J6 m+ R% _% q1 l1 x0 vMcASPRxClkStart(SOC_MCASP_0_CTRL_REGS, MCASP_RX_CLK_EXTERNAL);% b4 {( n' B/ S4 W( h/ b
McASPTxClkStart(SOC_MCASP_0_CTRL_REGS, MCASP_TX_CLK_INTERNAL);
/* Enable EDMA for the transfer */
) p3 s! N9 x2 gEDMA3EnableTransfer(SOC_EDMA30CC_0_REGS, EDMA3_CHA_MCASP0_RX,; E  e* A0 m* }
EDMA3_TRIG_MODE_EVENT);/ J! ~& X) e. U5 J; c+ U/ Z
EDMA3EnableTransfer(SOC_EDMA30CC_0_REGS,
4 R& _3 g+ g% K0 S* R( u% Q8 P/ t( kEDMA3_CHA_MCASP0_TX, EDMA3_TRIG_MODE_EVENT);
/* Activate the serializers */: x% a0 J; ]) ~. {% z! {' K
McASPRxSerActivate(SOC_MCASP_0_CTRL_REGS);
* @- L( W) j* j1 G1 fMcASPTxSerActivate(SOC_MCASP_0_CTRL_REGS);
/* make sure that the XDATA bit is cleared to zero */
- P% a2 v/ h  P+ jwhile(McASPTxStatusGet(SOC_MCASP_0_CTRL_REGS) & MCASP_TX_STAT_DATAREADY);
/* Activate the state machines */
9 x# j: r/ M+ C( J" IMcASPRxEnable(SOC_MCASP_0_CTRL_REGS);
: Y6 y' i4 b, h9 p( J) R, }0 HMcASPTxEnable(SOC_MCASP_0_CTRL_REGS);
" V5 N% R3 Z; h}
* j. T3 H4 X, O4 L" v
请问:问题出在哪了,时钟按照这样配是否有错。
另外我看XDATA一直是0,接收的rxbuf0,1,2里有一般全是FFFF一半全是0.

' e" \: G9 A* f& u7 f% }




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