嵌入式开发者社区

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

作者: wapdasta    时间: 2018-11-7 13:28
标题: MCASP自环配置。
我项目上用OMAPL138的板子MCASP的引脚都是链接的FPGA,所以在FPGA这端设置的MCASP自环。把axr0接收到的通过axr1发回去。
部分代码如下
input mcasp_afsx,4 V5 K  m' D% B; [7 q, K2 D
input mcasp_ahclkx,# {2 U6 e  L! c1 Z2 k) j
input mcasp_aclkx,
2 c/ E0 n( Z& S& i9 {* t( g7 binput axr0,
1 Y2 t8 E8 k6 n( {0 O& w; D# [' z" N8 T+ d" w( ?. v
output mcasp_afsr,
$ ^' s' {+ r( r5 u% h: r0 poutput mcasp_ahclkr,# }* J5 w/ y5 {- {& S
output mcasp_aclkr,, G1 j! P% h" ~8 f4 g
output axr1,6 c( l/ j! t; X8 b+ I  E
assign mcasp_afsr = mcasp_afsx;% s% {3 }/ n8 u7 G0 e
assign mcasp_aclkr = mcasp_aclkx;. ]. {" m( }! u
assign mcasp_ahclkr = mcasp_ahclkx;# I  V: \% ~: [6 ?$ {- F1 d
assign axr1 = axr0;

6 J+ s6 y3 j( x2 J2 Y
3 p9 \4 o: i( J) C
在OMAPL138这端,通过axr0接口发固定的数,axr1接收。
在配置MACASP的时候,发送全部取内部时钟,接收全部取外部时钟。
一直循环发送,但是接收不到。在FPGA端也没有看到时钟和信号的波形。
部分代码如下,关于edma3的部分未做变化。
; i& [5 O1 ~- M- H% B* b4 r; R
static void McASPI2SConfigure(void)
' Z7 w. O! d  T) x8 _5 {& }{  O9 e/ A# ]9 v8 R8 O3 U
McASPRxReset(SOC_MCASP_0_CTRL_REGS);7 T( m. n: d# A  c3 ?# _
McASPTxReset(SOC_MCASP_0_CTRL_REGS);
/* Enable the FIFOs for DMA transfer */
- Y' {7 r3 V) o) c) g8 d2 M( {2 `McASPReadFifoEnable(SOC_MCASP_0_FIFO_REGS, 1, 1);0 x  L" D5 n+ J! r+ `: k
McASPWriteFifoEnable(SOC_MCASP_0_FIFO_REGS, 1, 1);
/* Set I2S format in the transmitter/receiver format units */. p1 S; Q* g8 f, K6 }
McASPRxFmtI2SSet(SOC_MCASP_0_CTRL_REGS, WORD_SIZE, SLOT_SIZE,5 a( i( V2 H, w& y% u& h8 Y$ K6 m6 N
MCASP_RX_MODE_DMA);& |4 J1 P" g' }' m: T
McASPTxFmtI2SSet(SOC_MCASP_0_CTRL_REGS, WORD_SIZE, SLOT_SIZE,
6 X4 T0 |% s; T( t, ?% dMCASP_TX_MODE_DMA);
/* Configure the frame sync. I2S shall work in TDM format with 2 slots */
5 W& E7 E  n; c" H1 Y8 D/ U9 kMcASPRxFrameSyncCfg(SOC_MCASP_0_CTRL_REGS, 2, MCASP_RX_FS_WIDTH_WORD, . f7 R) d% E. C* M1 a- c( f
MCASP_RX_FS_EXT_BEGIN_ON_FALL_EDGE);& Z6 X" x% m( D( X
McASPTxFrameSyncCfg(SOC_MCASP_0_CTRL_REGS, 2, MCASP_TX_FS_WIDTH_WORD,
/ X* j3 Q8 u5 K3 k4 \( xMCASP_TX_FS_INT_BEGIN_ON_RIS_EDGE);
/* configure the clock for receiver */: q1 p% j8 B8 q1 F7 E4 |6 M6 ]
McASPRxClkCfg(SOC_MCASP_0_CTRL_REGS, MCASP_RX_CLK_EXTERNAL, 0, 0);: b# P: [1 T$ T7 a. f" E! I
McASPRxClkPolaritySet(SOC_MCASP_0_CTRL_REGS, MCASP_RX_CLK_POL_RIS_EDGE); ( U4 L7 `* y: k- v2 T
McASPRxClkCheckConfig(SOC_MCASP_0_CTRL_REGS, MCASP_RX_CLKCHCK_DIV32,
" T/ K3 |: S; Z4 D3 p5 C0x00, 0xFF);
/* configure the clock for transmitter */: |: v; ~/ d! ^: u9 g7 I) h5 I; j0 `
McASPTxClkCfg(SOC_MCASP_0_CTRL_REGS, MCASP_TX_CLK_INTERNAL, 11, 1);! Z7 i0 J' ~) h  ?" U
McASPTxClkPolaritySet(SOC_MCASP_0_CTRL_REGS, MCASP_TX_CLK_POL_FALL_EDGE);
# h0 t' j/ P/ j- qMcASPTxClkCheckConfig(SOC_MCASP_0_CTRL_REGS, MCASP_TX_CLKCHCK_DIV32,5 {% f) `( ?! s) A0 ]& h" J" P
0x00, 0xFF);
- x8 s2 }1 e  }% T4 R( A* c8 R' Q2 W
/* Enable synchronization of RX and TX sections */ 0 D& v% R1 P# J) e7 r
McASPTxRxClkSyncEnable(SOC_MCASP_0_CTRL_REGS);
/* Enable the transmitter/receiver slots. I2S uses 2 slots */
5 J  c& s  A# e: @- e3 z- R+ ^' VMcASPRxTimeSlotSet(SOC_MCASP_0_CTRL_REGS, I2S_SLOTS);5 l9 s+ I2 h. ?: L" I( p
McASPTxTimeSlotSet(SOC_MCASP_0_CTRL_REGS, I2S_SLOTS);
/*$ U, S4 O4 s' {- \  {1 i0 \7 ]$ \
** Set the serializers, Currently only one serializer is set as: e2 t% B* Y& W' g$ F+ l. j6 J
** transmitter and one serializer as receiver.
. F" R: @- U. ?. P4 d1 n3 Q1 K, D*/
4 G  [' I1 H; k/ B& ], L4 WMcASPSerializerRxSet(SOC_MCASP_0_CTRL_REGS, MCASP_XSER_RX);
" M# F* V, J; xMcASPSerializerTxSet(SOC_MCASP_0_CTRL_REGS, MCASP_XSER_TX);
/*  p  G6 |3 D. c) b: K
** Configure the McASP pins
0 ^8 s# U, [) W7 R) x** Input - Frame Sync, Clock and Serializer Rx' D+ c/ k7 F) N+ n2 ^
** Output - Serializer Tx is connected to the input of the codec , i  a0 M, F, M0 d- n7 R" t$ }* R
*/* O4 f/ F5 n* q3 F# q! Q" B
McASPPinMcASPSet(SOC_MCASP_0_CTRL_REGS, 0xFFFFFFFF);
6 A5 }2 J' ~9 b5 z3 JMcASPPinDirOutputSet(SOC_MCASP_0_CTRL_REGS,MCASP_PIN_AXR(MCASP_XSER_TX));
- H8 u+ w( H' D. ^McASPPinDirInputSet(SOC_MCASP_0_CTRL_REGS, MCASP_PIN_AFSX
  w2 f4 L  w+ A3 D  Z4 c| MCASP_PIN_ACLKX  S& h. c4 [9 T. h
| MCASP_PIN_AHCLKX+ B( [3 ~' p( h* m" y
| MCASP_PIN_AXR(MCASP_XSER_RX));
/* Enable error interrupts for McASP */7 o& c' |- X2 P- W+ s6 @: _; s! z$ A
McASPTxIntEnable(SOC_MCASP_0_CTRL_REGS, MCASP_TX_DMAERROR ( [# W/ X' |3 [( U* d+ X* B
| MCASP_TX_CLKFAIL
7 ?# q$ A( t; b| MCASP_TX_SYNCERROR
: k# E0 c( r- v/ A  x+ m| MCASP_TX_UNDERRUN);
McASPRxIntEnable(SOC_MCASP_0_CTRL_REGS, MCASP_RX_DMAERROR 3 |4 c& l6 _& `9 g8 {( U* _! f
| MCASP_RX_CLKFAIL
! w: k" L+ G8 j: m* @4 v| MCASP_RX_SYNCERROR
3 A' Y" Q9 R& `8 ^! O  [| MCASP_RX_OVERRUN);' o( m5 D; l; E6 }  p8 f. t) G4 q
}
static void I2SDataTxRxActivate(void); f% M: Y1 a% W1 J' [. G/ \) v4 ^
{3 U, b8 T+ \& L$ K5 |% g& }1 @
/* Start the clocks */
4 R( g9 o0 {4 \6 g4 _McASPRxClkStart(SOC_MCASP_0_CTRL_REGS, MCASP_RX_CLK_EXTERNAL);
4 A. _4 ^3 X. DMcASPTxClkStart(SOC_MCASP_0_CTRL_REGS, MCASP_TX_CLK_INTERNAL);
/* Enable EDMA for the transfer */' M1 }) o8 m. C# d0 Y# U# s1 \& ?' U
EDMA3EnableTransfer(SOC_EDMA30CC_0_REGS, EDMA3_CHA_MCASP0_RX,
/ D7 M" Q2 Y$ S  j, U9 ]! @( z; @6 wEDMA3_TRIG_MODE_EVENT);
4 j8 k/ O, A4 X& }EDMA3EnableTransfer(SOC_EDMA30CC_0_REGS,
- h: ^5 T+ x! z* l( r& `EDMA3_CHA_MCASP0_TX, EDMA3_TRIG_MODE_EVENT);
/* Activate the serializers */: O, ^: Q& Y( s# Y- o9 a
McASPRxSerActivate(SOC_MCASP_0_CTRL_REGS);
. z) c0 H( y7 m) fMcASPTxSerActivate(SOC_MCASP_0_CTRL_REGS);
/* make sure that the XDATA bit is cleared to zero */
7 w" p- y$ Z% qwhile(McASPTxStatusGet(SOC_MCASP_0_CTRL_REGS) & MCASP_TX_STAT_DATAREADY);
/* Activate the state machines */5 \1 }; m% |0 p' J. u. i
McASPRxEnable(SOC_MCASP_0_CTRL_REGS);7 C) B  I: T/ t; S% D
McASPTxEnable(SOC_MCASP_0_CTRL_REGS);
& ?& F" }5 X  U9 ^; x}

' {9 b2 R6 _2 n+ g2 H
请问:问题出在哪了,时钟按照这样配是否有错。
另外我看XDATA一直是0,接收的rxbuf0,1,2里有一般全是FFFF一半全是0.
0 l0 \6 r, E- Y3 r5 m* V





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