嵌入式开发者社区

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

作者: wapdasta    时间: 2018-11-7 13:28
标题: MCASP自环配置。
我项目上用OMAPL138的板子MCASP的引脚都是链接的FPGA,所以在FPGA这端设置的MCASP自环。把axr0接收到的通过axr1发回去。
部分代码如下
input mcasp_afsx,
# r' Q- A% @& w/ ]input mcasp_ahclkx,, A0 T# p) o% o$ ^' o- O
input mcasp_aclkx,
4 Q" u, U8 ^, |) W& h- rinput axr0,  ~/ @2 T0 Y) {: u
6 H3 A2 ?: `( ^% k7 P
output mcasp_afsr,5 c' P) y; S7 V/ a" ^
output mcasp_ahclkr,+ t5 s* d" ^- {" N1 \
output mcasp_aclkr,
$ d1 T6 U0 N2 X4 z9 p, ?8 d- ioutput axr1,
0 ~  O' s& d4 ~# T% h( {9 c, w  R
assign mcasp_afsr = mcasp_afsx;
/ b- K2 @9 R" v% d$ }assign mcasp_aclkr = mcasp_aclkx;0 f* T: c+ m+ a0 O
assign mcasp_ahclkr = mcasp_ahclkx;
% Z) m( r6 ~9 s- V) ^: eassign axr1 = axr0;

; c. R3 ]1 `; t
4 t, F/ U! Q! X! j7 E2 M
在OMAPL138这端,通过axr0接口发固定的数,axr1接收。
在配置MACASP的时候,发送全部取内部时钟,接收全部取外部时钟。
一直循环发送,但是接收不到。在FPGA端也没有看到时钟和信号的波形。
部分代码如下,关于edma3的部分未做变化。
' L9 _% g  O% p7 r# S4 a
static void McASPI2SConfigure(void)+ m( D2 ^3 V3 p0 ]$ g3 ?
{
( y. ^/ Q6 X8 r0 z1 z9 ^McASPRxReset(SOC_MCASP_0_CTRL_REGS);
. K& `0 ~* \/ D/ c3 }6 k0 }McASPTxReset(SOC_MCASP_0_CTRL_REGS);
/* Enable the FIFOs for DMA transfer */! V: W' x( o: Q& p- t! U$ s# I% j  `$ B
McASPReadFifoEnable(SOC_MCASP_0_FIFO_REGS, 1, 1);
- x' @5 K: K4 F' t# }7 NMcASPWriteFifoEnable(SOC_MCASP_0_FIFO_REGS, 1, 1);
/* Set I2S format in the transmitter/receiver format units */
7 x% b" N) a. F8 u% n& b; FMcASPRxFmtI2SSet(SOC_MCASP_0_CTRL_REGS, WORD_SIZE, SLOT_SIZE,3 v3 W% l9 i& I
MCASP_RX_MODE_DMA);- {1 f6 f$ `. x) W
McASPTxFmtI2SSet(SOC_MCASP_0_CTRL_REGS, WORD_SIZE, SLOT_SIZE,% K! i% t5 y! a4 [4 N  J6 x/ M
MCASP_TX_MODE_DMA);
/* Configure the frame sync. I2S shall work in TDM format with 2 slots */5 |& t4 l3 f1 Z  g' J8 I; N
McASPRxFrameSyncCfg(SOC_MCASP_0_CTRL_REGS, 2, MCASP_RX_FS_WIDTH_WORD, 3 k# I' u/ M1 S  \0 |6 d& N
MCASP_RX_FS_EXT_BEGIN_ON_FALL_EDGE);! z" Y% g5 ^$ j; y! o* _% ~
McASPTxFrameSyncCfg(SOC_MCASP_0_CTRL_REGS, 2, MCASP_TX_FS_WIDTH_WORD,
( |: m: T9 K/ U% _7 `1 _MCASP_TX_FS_INT_BEGIN_ON_RIS_EDGE);
/* configure the clock for receiver */* P) ?; O$ m" h# |  P& ], y, l& \
McASPRxClkCfg(SOC_MCASP_0_CTRL_REGS, MCASP_RX_CLK_EXTERNAL, 0, 0);
  s8 C0 M& a4 H* OMcASPRxClkPolaritySet(SOC_MCASP_0_CTRL_REGS, MCASP_RX_CLK_POL_RIS_EDGE); $ q) X5 h  N" J1 W) W+ v0 T
McASPRxClkCheckConfig(SOC_MCASP_0_CTRL_REGS, MCASP_RX_CLKCHCK_DIV32,
# I+ o7 |2 p1 N7 t  B0x00, 0xFF);
/* configure the clock for transmitter */' v9 P" \5 P& u' ^
McASPTxClkCfg(SOC_MCASP_0_CTRL_REGS, MCASP_TX_CLK_INTERNAL, 11, 1);  C  W& `" l) E7 E9 S+ P
McASPTxClkPolaritySet(SOC_MCASP_0_CTRL_REGS, MCASP_TX_CLK_POL_FALL_EDGE);
+ K, |5 S8 w% |8 s5 z6 |McASPTxClkCheckConfig(SOC_MCASP_0_CTRL_REGS, MCASP_TX_CLKCHCK_DIV32,
" g5 q1 G1 b5 p; Z6 H+ t; K0x00, 0xFF);
% V/ x" w& p. }9 b4 s( P. p+ k. G+ @& E5 h, q
/* Enable synchronization of RX and TX sections */
2 }5 U2 B/ c( pMcASPTxRxClkSyncEnable(SOC_MCASP_0_CTRL_REGS);
/* Enable the transmitter/receiver slots. I2S uses 2 slots */
1 n) I0 ?4 i4 l, T8 h8 yMcASPRxTimeSlotSet(SOC_MCASP_0_CTRL_REGS, I2S_SLOTS);
  I! Y" A' n  s+ xMcASPTxTimeSlotSet(SOC_MCASP_0_CTRL_REGS, I2S_SLOTS);
/*1 d! [  X+ n/ d$ R0 ?( n
** Set the serializers, Currently only one serializer is set as  O; p- W% @4 x3 ]8 m
** transmitter and one serializer as receiver.
% G; |7 u7 W6 H- l" K*/
  e4 |: V5 x- g$ R0 ?' M! W, NMcASPSerializerRxSet(SOC_MCASP_0_CTRL_REGS, MCASP_XSER_RX);
& n: V: V' x/ N8 z( S- q4 L8 qMcASPSerializerTxSet(SOC_MCASP_0_CTRL_REGS, MCASP_XSER_TX);
/*
1 @: R' S3 |4 ]; }. V* s** Configure the McASP pins
0 h/ ~1 G5 M" i6 M3 ]** Input - Frame Sync, Clock and Serializer Rx
+ C% z6 t8 h* Z) ?( G9 |8 D** Output - Serializer Tx is connected to the input of the codec
' M9 j3 T8 W1 i5 ]; q' }  V) P*/
+ D9 V$ D7 _/ J+ X) J2 x- XMcASPPinMcASPSet(SOC_MCASP_0_CTRL_REGS, 0xFFFFFFFF);( w, E1 \" K/ v/ v  u( _) m5 ?
McASPPinDirOutputSet(SOC_MCASP_0_CTRL_REGS,MCASP_PIN_AXR(MCASP_XSER_TX));
" W; X0 q; L, M7 ZMcASPPinDirInputSet(SOC_MCASP_0_CTRL_REGS, MCASP_PIN_AFSX: |2 L8 c3 n$ {" d: e
| MCASP_PIN_ACLKX* A9 D/ Q6 |/ p' P! ^, h. @
| MCASP_PIN_AHCLKX
) S$ O: B' v6 u3 s1 e( X| MCASP_PIN_AXR(MCASP_XSER_RX));
/* Enable error interrupts for McASP */- f# P% j. U2 X
McASPTxIntEnable(SOC_MCASP_0_CTRL_REGS, MCASP_TX_DMAERROR + X& G4 C+ f7 k9 `+ e
| MCASP_TX_CLKFAIL
: F+ O, x; E( W' k/ A9 v| MCASP_TX_SYNCERROR8 ~% ~, k/ Q! f; A5 v2 o
| MCASP_TX_UNDERRUN);
McASPRxIntEnable(SOC_MCASP_0_CTRL_REGS, MCASP_RX_DMAERROR & p, j( Z4 S2 r1 ^: y
| MCASP_RX_CLKFAIL
' }7 P: L4 t* J( C- t* n| MCASP_RX_SYNCERROR : R$ S3 x! _$ i( B- F$ c  G; d
| MCASP_RX_OVERRUN);3 t) }$ B' Y8 ?+ L& J
}
static void I2SDataTxRxActivate(void)
, ?  h. ~$ }: G( Y* c  K+ X{
$ G; T, J8 n3 B* e2 r9 ?/* Start the clocks */5 @# @) T: K9 W7 L$ b2 g6 o
McASPRxClkStart(SOC_MCASP_0_CTRL_REGS, MCASP_RX_CLK_EXTERNAL);. m3 H) r0 b8 D1 L6 @
McASPTxClkStart(SOC_MCASP_0_CTRL_REGS, MCASP_TX_CLK_INTERNAL);
/* Enable EDMA for the transfer */
( E. [0 D# t9 u. ?/ jEDMA3EnableTransfer(SOC_EDMA30CC_0_REGS, EDMA3_CHA_MCASP0_RX,
3 R" s  m# C0 Y+ s' XEDMA3_TRIG_MODE_EVENT);+ ^" `9 ]/ @6 L, f
EDMA3EnableTransfer(SOC_EDMA30CC_0_REGS,
* v$ k+ i1 r. d. O+ n: @, w1 f6 XEDMA3_CHA_MCASP0_TX, EDMA3_TRIG_MODE_EVENT);
/* Activate the serializers */
$ a$ n$ N! t6 o! R$ U' y" pMcASPRxSerActivate(SOC_MCASP_0_CTRL_REGS);2 D1 ^( x/ M/ C( h* Q) [
McASPTxSerActivate(SOC_MCASP_0_CTRL_REGS);
/* make sure that the XDATA bit is cleared to zero */9 f" n& `6 y' M/ w% c
while(McASPTxStatusGet(SOC_MCASP_0_CTRL_REGS) & MCASP_TX_STAT_DATAREADY);
/* Activate the state machines */# o, F/ K) Y- s4 B" l$ v2 Z; I* x
McASPRxEnable(SOC_MCASP_0_CTRL_REGS);
$ g1 M) }5 q: n; s1 z3 J) f" s/ RMcASPTxEnable(SOC_MCASP_0_CTRL_REGS);
" v6 C- ]( n( Y. \* S$ N}
: l' Y  k' l! m. `
请问:问题出在哪了,时钟按照这样配是否有错。
另外我看XDATA一直是0,接收的rxbuf0,1,2里有一般全是FFFF一半全是0.
$ l2 P, n! `% e. D, ~





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