嵌入式开发者社区

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

作者: wapdasta    时间: 2018-11-7 13:28
标题: MCASP自环配置。
我项目上用OMAPL138的板子MCASP的引脚都是链接的FPGA,所以在FPGA这端设置的MCASP自环。把axr0接收到的通过axr1发回去。
部分代码如下
input mcasp_afsx,( _' H, J( \+ H- E+ y( l5 O
input mcasp_ahclkx,
. V+ [. t6 J: B1 e& uinput mcasp_aclkx,2 ^: b3 E" F. E; r
input axr0,
% B' x8 Z2 j; F) _7 I
& `6 e' e6 T( \/ ^output mcasp_afsr,
5 X3 D4 ?- @; O. P3 Routput mcasp_ahclkr,
9 Z, g( p( F" q* P* Ooutput mcasp_aclkr,
+ a! N: [2 T8 x- c# Moutput axr1,
6 G1 U# R6 s# p- [
assign mcasp_afsr = mcasp_afsx;5 l4 Q8 W/ W1 O7 W/ U
assign mcasp_aclkr = mcasp_aclkx;
, N$ T$ F" y$ r5 S) I, u; \3 passign mcasp_ahclkr = mcasp_ahclkx;
5 Y! `  J. G# Y- x  bassign axr1 = axr0;
7 X- j0 @/ M0 z" y0 n6 |" F+ J! e
( M. f: w9 w4 \: l/ f
在OMAPL138这端,通过axr0接口发固定的数,axr1接收。
在配置MACASP的时候,发送全部取内部时钟,接收全部取外部时钟。
一直循环发送,但是接收不到。在FPGA端也没有看到时钟和信号的波形。
部分代码如下,关于edma3的部分未做变化。
7 I2 G5 X) w. m; A  ?
static void McASPI2SConfigure(void)
4 r* p( O* G! s3 i5 X4 j{( _$ @) U8 d  O  A: d& d
McASPRxReset(SOC_MCASP_0_CTRL_REGS);7 T& G& G" W/ g0 R
McASPTxReset(SOC_MCASP_0_CTRL_REGS);
/* Enable the FIFOs for DMA transfer */% `( Q$ m* u* ~. X! Y/ e- \
McASPReadFifoEnable(SOC_MCASP_0_FIFO_REGS, 1, 1);
1 l  u3 I/ q' L# G3 b% E/ m2 A  eMcASPWriteFifoEnable(SOC_MCASP_0_FIFO_REGS, 1, 1);
/* Set I2S format in the transmitter/receiver format units */
( H5 ~  O9 s& |McASPRxFmtI2SSet(SOC_MCASP_0_CTRL_REGS, WORD_SIZE, SLOT_SIZE,  t0 U5 T, T. b
MCASP_RX_MODE_DMA);
& j( `6 j4 ^9 F  mMcASPTxFmtI2SSet(SOC_MCASP_0_CTRL_REGS, WORD_SIZE, SLOT_SIZE," C/ p3 ?6 h8 e" z5 x
MCASP_TX_MODE_DMA);
/* Configure the frame sync. I2S shall work in TDM format with 2 slots */3 ]4 l7 w# K3 p  d5 W
McASPRxFrameSyncCfg(SOC_MCASP_0_CTRL_REGS, 2, MCASP_RX_FS_WIDTH_WORD,
, I9 L5 R" V$ U* OMCASP_RX_FS_EXT_BEGIN_ON_FALL_EDGE);' k# L, N/ |% `/ o* L% Q
McASPTxFrameSyncCfg(SOC_MCASP_0_CTRL_REGS, 2, MCASP_TX_FS_WIDTH_WORD,
& I* d8 ]8 v" M* b; X" {MCASP_TX_FS_INT_BEGIN_ON_RIS_EDGE);
/* configure the clock for receiver */$ t$ v9 A# h  d" y' O0 G8 ?
McASPRxClkCfg(SOC_MCASP_0_CTRL_REGS, MCASP_RX_CLK_EXTERNAL, 0, 0);
' x) @, G' b5 h  s  L1 fMcASPRxClkPolaritySet(SOC_MCASP_0_CTRL_REGS, MCASP_RX_CLK_POL_RIS_EDGE); & E- P0 ~8 N! C1 S* z: B& i4 s9 k
McASPRxClkCheckConfig(SOC_MCASP_0_CTRL_REGS, MCASP_RX_CLKCHCK_DIV32,6 Z5 y7 B" v. g1 G$ T7 [; b
0x00, 0xFF);
/* configure the clock for transmitter */* f8 m) y7 g$ E# `, c9 M* t* P
McASPTxClkCfg(SOC_MCASP_0_CTRL_REGS, MCASP_TX_CLK_INTERNAL, 11, 1);& F# {) |+ ^/ p( m9 D: w
McASPTxClkPolaritySet(SOC_MCASP_0_CTRL_REGS, MCASP_TX_CLK_POL_FALL_EDGE);
- M3 `3 o/ p& \3 J- {McASPTxClkCheckConfig(SOC_MCASP_0_CTRL_REGS, MCASP_TX_CLKCHCK_DIV32,
6 c7 b* u3 H6 G1 n* g0x00, 0xFF);
" Y+ v0 M5 W. W$ s! ^2 k+ P% u: L6 E4 v0 R' J9 K+ g2 L+ W
/* Enable synchronization of RX and TX sections */
4 a" J/ j: b7 p* Q$ m: qMcASPTxRxClkSyncEnable(SOC_MCASP_0_CTRL_REGS);
/* Enable the transmitter/receiver slots. I2S uses 2 slots */
- y" W8 A; y# v, |+ h0 H) \% S: u2 rMcASPRxTimeSlotSet(SOC_MCASP_0_CTRL_REGS, I2S_SLOTS);
0 U' f) i+ Z* W  l2 vMcASPTxTimeSlotSet(SOC_MCASP_0_CTRL_REGS, I2S_SLOTS);
/*  Q% }# g5 Z! l7 y$ N. N
** Set the serializers, Currently only one serializer is set as
6 S: O' ?% @1 P) H* A1 W8 B8 a; `** transmitter and one serializer as receiver.$ q8 O/ x; [* y* S* h8 F, @: S
*/% P$ ~7 z0 F% d  y5 s+ p
McASPSerializerRxSet(SOC_MCASP_0_CTRL_REGS, MCASP_XSER_RX);% U" e9 R8 r8 M1 q8 q! p4 f
McASPSerializerTxSet(SOC_MCASP_0_CTRL_REGS, MCASP_XSER_TX);
/*
( J+ y1 l$ o% ~7 p6 m** Configure the McASP pins
6 e9 K; x/ {  P** Input - Frame Sync, Clock and Serializer Rx
8 r2 G2 Z7 ], Q3 P8 }+ r+ A** Output - Serializer Tx is connected to the input of the codec ' Y8 N: |) ~3 B: ^6 Z
*/
7 |, B; D- t6 R! j6 ]. LMcASPPinMcASPSet(SOC_MCASP_0_CTRL_REGS, 0xFFFFFFFF);
# c; [" K9 m* z# r* m1 C2 o8 @McASPPinDirOutputSet(SOC_MCASP_0_CTRL_REGS,MCASP_PIN_AXR(MCASP_XSER_TX));/ Y3 R& w# X2 Q" Q( k
McASPPinDirInputSet(SOC_MCASP_0_CTRL_REGS, MCASP_PIN_AFSX
5 t0 d4 d& [# W, {| MCASP_PIN_ACLKX. U  ]+ E( n; j# p
| MCASP_PIN_AHCLKX
7 `, p( z+ k  k# o. u| MCASP_PIN_AXR(MCASP_XSER_RX));
/* Enable error interrupts for McASP */1 n2 A0 J5 m' X- Z  d6 F. L
McASPTxIntEnable(SOC_MCASP_0_CTRL_REGS, MCASP_TX_DMAERROR 1 d7 F8 c3 x# D* ]
| MCASP_TX_CLKFAIL
8 {) H" M. Y3 M! K9 W; G| MCASP_TX_SYNCERROR
  w6 Y' F: c& V6 F( j( L% i4 P) j9 U| MCASP_TX_UNDERRUN);
McASPRxIntEnable(SOC_MCASP_0_CTRL_REGS, MCASP_RX_DMAERROR - V# _* `5 B/ e; H+ O7 I8 H3 W# A. v* J$ q
| MCASP_RX_CLKFAIL4 c% H9 W8 g9 H  f- o4 R+ u
| MCASP_RX_SYNCERROR 9 ]) g% ?+ P; F- w/ ]* b& Z
| MCASP_RX_OVERRUN);
: U% o5 ]8 z: x9 X3 K}
static void I2SDataTxRxActivate(void)
. W4 g5 L' Q9 N' d' r{8 q# Y2 d: l7 f4 c
/* Start the clocks */: i& V2 p! [$ J
McASPRxClkStart(SOC_MCASP_0_CTRL_REGS, MCASP_RX_CLK_EXTERNAL);
& D! m7 T& Y; e' L& M, MMcASPTxClkStart(SOC_MCASP_0_CTRL_REGS, MCASP_TX_CLK_INTERNAL);
/* Enable EDMA for the transfer */3 I2 s. W( r, ?( A
EDMA3EnableTransfer(SOC_EDMA30CC_0_REGS, EDMA3_CHA_MCASP0_RX,3 j$ R  I& Y: Q$ l$ S: v$ e& C# k
EDMA3_TRIG_MODE_EVENT);% ^. C' e1 {0 Q) b, H' {
EDMA3EnableTransfer(SOC_EDMA30CC_0_REGS,
5 c8 w- _9 |9 [6 O1 ZEDMA3_CHA_MCASP0_TX, EDMA3_TRIG_MODE_EVENT);
/* Activate the serializers */
% x  f& V1 d6 J& T. gMcASPRxSerActivate(SOC_MCASP_0_CTRL_REGS);
% o( J6 J" C" p: X  GMcASPTxSerActivate(SOC_MCASP_0_CTRL_REGS);
/* make sure that the XDATA bit is cleared to zero */
: p5 m+ M( P9 r+ L! v! t, n1 m, \while(McASPTxStatusGet(SOC_MCASP_0_CTRL_REGS) & MCASP_TX_STAT_DATAREADY);
/* Activate the state machines */) T! V  c) Y* f" P" R
McASPRxEnable(SOC_MCASP_0_CTRL_REGS);
: l9 }3 A& L1 k$ Z# \! b2 oMcASPTxEnable(SOC_MCASP_0_CTRL_REGS);5 k! H* D* J/ H* y: k( N
}

1 I: N0 a& p0 N$ S3 b
请问:问题出在哪了,时钟按照这样配是否有错。
另外我看XDATA一直是0,接收的rxbuf0,1,2里有一般全是FFFF一半全是0.
' P" U8 L5 Z4 \6 P% G7 m, D





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