嵌入式开发者社区

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

作者: wapdasta    时间: 2018-11-7 13:28
标题: MCASP自环配置。
我项目上用OMAPL138的板子MCASP的引脚都是链接的FPGA,所以在FPGA这端设置的MCASP自环。把axr0接收到的通过axr1发回去。
部分代码如下
input mcasp_afsx,
, \9 \  h& M+ h5 Vinput mcasp_ahclkx,
3 [* W- W& Q' G  }2 K4 w+ yinput mcasp_aclkx,
- L; w3 U$ F& rinput axr0,5 p6 b3 O) I2 u

8 k2 c8 D) w2 b3 foutput mcasp_afsr,
( j; B4 P6 `4 H2 c9 qoutput mcasp_ahclkr,- u' L/ ~: W7 O# T
output mcasp_aclkr,8 f! o7 E4 V& y  u8 u% d
output axr1,7 O5 c' Z: ?0 {+ u' o5 @6 y
assign mcasp_afsr = mcasp_afsx;: v- E* `" U  _9 z
assign mcasp_aclkr = mcasp_aclkx;
0 J5 ~0 r$ I1 ~- G. dassign mcasp_ahclkr = mcasp_ahclkx;, R7 I* i0 i7 q) c' ^  i1 P7 t1 ~
assign axr1 = axr0;
& K5 J* m  y* P+ d' }8 S3 e; q" ?) Y
- Q- j2 h4 {: p7 f; C3 W
在OMAPL138这端,通过axr0接口发固定的数,axr1接收。
在配置MACASP的时候,发送全部取内部时钟,接收全部取外部时钟。
一直循环发送,但是接收不到。在FPGA端也没有看到时钟和信号的波形。
部分代码如下,关于edma3的部分未做变化。
4 U1 I9 ^# ]- b2 I& o& L
static void McASPI2SConfigure(void)
" H" v; D! l- W" F3 Z  ]/ P7 D+ s{
3 m( L1 ?" U, Q# wMcASPRxReset(SOC_MCASP_0_CTRL_REGS);8 N2 e# ~4 Y* C# h( N
McASPTxReset(SOC_MCASP_0_CTRL_REGS);
/* Enable the FIFOs for DMA transfer */) R& U* ]: G# H+ C- |" v
McASPReadFifoEnable(SOC_MCASP_0_FIFO_REGS, 1, 1);
: E/ i' [3 Z  P1 gMcASPWriteFifoEnable(SOC_MCASP_0_FIFO_REGS, 1, 1);
/* Set I2S format in the transmitter/receiver format units */+ W, h$ ?8 ]( H9 h) T/ e5 b
McASPRxFmtI2SSet(SOC_MCASP_0_CTRL_REGS, WORD_SIZE, SLOT_SIZE,
: u, u7 M" i( Y; G6 wMCASP_RX_MODE_DMA);- U) F( Y" n6 s5 R$ g% J
McASPTxFmtI2SSet(SOC_MCASP_0_CTRL_REGS, WORD_SIZE, SLOT_SIZE,
0 Z1 p( ]2 d) A( aMCASP_TX_MODE_DMA);
/* Configure the frame sync. I2S shall work in TDM format with 2 slots */7 p9 c" o! _6 P* R" Y# e, g
McASPRxFrameSyncCfg(SOC_MCASP_0_CTRL_REGS, 2, MCASP_RX_FS_WIDTH_WORD, 9 E% L' ]3 g; F9 Q2 z( @9 M: i$ y) q
MCASP_RX_FS_EXT_BEGIN_ON_FALL_EDGE);
  C: F6 y0 |; N8 @. y8 J3 M% h" fMcASPTxFrameSyncCfg(SOC_MCASP_0_CTRL_REGS, 2, MCASP_TX_FS_WIDTH_WORD, $ y/ a4 ]6 v8 s0 ~
MCASP_TX_FS_INT_BEGIN_ON_RIS_EDGE);
/* configure the clock for receiver */# b1 K4 [  E# X& `9 k/ z
McASPRxClkCfg(SOC_MCASP_0_CTRL_REGS, MCASP_RX_CLK_EXTERNAL, 0, 0);
* P% J8 h! s! J0 q3 s) ZMcASPRxClkPolaritySet(SOC_MCASP_0_CTRL_REGS, MCASP_RX_CLK_POL_RIS_EDGE); 2 W* N1 I' _- A7 v5 M- n2 y- N2 p
McASPRxClkCheckConfig(SOC_MCASP_0_CTRL_REGS, MCASP_RX_CLKCHCK_DIV32,4 c# ~- ~( x3 ^
0x00, 0xFF);
/* configure the clock for transmitter */
$ m+ g) l+ _' `( b5 D' M+ SMcASPTxClkCfg(SOC_MCASP_0_CTRL_REGS, MCASP_TX_CLK_INTERNAL, 11, 1);9 M7 q, C- q0 \" p/ f# m
McASPTxClkPolaritySet(SOC_MCASP_0_CTRL_REGS, MCASP_TX_CLK_POL_FALL_EDGE);
2 `$ c& t0 x; n5 ^, w# D8 ^2 uMcASPTxClkCheckConfig(SOC_MCASP_0_CTRL_REGS, MCASP_TX_CLKCHCK_DIV32,( r0 U- \5 F- E( P
0x00, 0xFF);
5 s# D" f# t, V' p' P! ~9 @7 J( Q, z; B" J8 Q
/* Enable synchronization of RX and TX sections */ 6 u& X$ T$ q! q2 Y7 j9 H+ b
McASPTxRxClkSyncEnable(SOC_MCASP_0_CTRL_REGS);
/* Enable the transmitter/receiver slots. I2S uses 2 slots */
, R; ^$ Z+ D: u0 i, X* j$ K; QMcASPRxTimeSlotSet(SOC_MCASP_0_CTRL_REGS, I2S_SLOTS);
! `- f  L& a/ n5 yMcASPTxTimeSlotSet(SOC_MCASP_0_CTRL_REGS, I2S_SLOTS);
/*& K. g: U/ m1 }- I+ x9 a
** Set the serializers, Currently only one serializer is set as3 u, r* M2 v# N% s& Y1 M. @
** transmitter and one serializer as receiver.5 Q" u7 ^& Y+ X$ k2 z/ h! u
*/
. m+ s2 S$ Q/ s9 f# [  H1 FMcASPSerializerRxSet(SOC_MCASP_0_CTRL_REGS, MCASP_XSER_RX);8 j1 H6 J! @# C7 [% c! S& P
McASPSerializerTxSet(SOC_MCASP_0_CTRL_REGS, MCASP_XSER_TX);
/*  e" k- u# }2 f. T# F$ |5 C! G# Y
** Configure the McASP pins 5 i+ h& L# i9 Z6 y9 y* g1 I5 z
** Input - Frame Sync, Clock and Serializer Rx% @8 o' W7 h4 I3 m/ g
** Output - Serializer Tx is connected to the input of the codec 2 s$ z7 p! w1 R* _
*/
7 w. k* U/ {' s9 [7 _  _' p. ^McASPPinMcASPSet(SOC_MCASP_0_CTRL_REGS, 0xFFFFFFFF);
0 Z2 O: _, s# Z; _2 j4 D0 _6 p/ oMcASPPinDirOutputSet(SOC_MCASP_0_CTRL_REGS,MCASP_PIN_AXR(MCASP_XSER_TX));# r* h6 b! r6 [
McASPPinDirInputSet(SOC_MCASP_0_CTRL_REGS, MCASP_PIN_AFSX+ r" p# T7 U7 ?4 P" y8 t
| MCASP_PIN_ACLKX
! F$ O  ~. Y+ }; o% D2 |, X' ?| MCASP_PIN_AHCLKX/ A3 B, h6 {1 M! o# @# R
| MCASP_PIN_AXR(MCASP_XSER_RX));
/* Enable error interrupts for McASP */
" O8 S9 l1 u3 jMcASPTxIntEnable(SOC_MCASP_0_CTRL_REGS, MCASP_TX_DMAERROR
, c( y1 w5 }' k  d3 S' F' q5 v) [| MCASP_TX_CLKFAIL
2 j! u  {. }/ L1 a2 N# p: H| MCASP_TX_SYNCERROR
6 ?& i% [! G& m7 A1 R& m0 K| MCASP_TX_UNDERRUN);
McASPRxIntEnable(SOC_MCASP_0_CTRL_REGS, MCASP_RX_DMAERROR 8 ^% K7 `* v( h8 Y( g: H: p# a
| MCASP_RX_CLKFAIL
/ }0 z+ r# m) k) o+ R| MCASP_RX_SYNCERROR 7 k9 _6 `( W& P; x3 Z
| MCASP_RX_OVERRUN);: t6 O& D9 L6 \2 R4 r; ~* x& u. O
}
static void I2SDataTxRxActivate(void)$ Q! o- u) @: d$ B6 v2 v6 u& c
{
9 X, E  o, d1 y$ F: J9 }6 H  s/* Start the clocks */. `) q0 H/ H6 p9 x( r, i
McASPRxClkStart(SOC_MCASP_0_CTRL_REGS, MCASP_RX_CLK_EXTERNAL);
: U1 h" E8 q* G/ s- bMcASPTxClkStart(SOC_MCASP_0_CTRL_REGS, MCASP_TX_CLK_INTERNAL);
/* Enable EDMA for the transfer */
" r( e! a* h3 g' WEDMA3EnableTransfer(SOC_EDMA30CC_0_REGS, EDMA3_CHA_MCASP0_RX,
8 I4 k6 j' T1 S, C4 W8 s9 y4 L5 F* SEDMA3_TRIG_MODE_EVENT);
4 v1 w  r4 A( f* G5 {( O/ DEDMA3EnableTransfer(SOC_EDMA30CC_0_REGS,
6 h3 U6 d. Y& {! s6 u/ {EDMA3_CHA_MCASP0_TX, EDMA3_TRIG_MODE_EVENT);
/* Activate the serializers */
$ I/ Q* \! a" U, o* q) PMcASPRxSerActivate(SOC_MCASP_0_CTRL_REGS);% Q- b, g" N- P" Y& H. y3 `1 m
McASPTxSerActivate(SOC_MCASP_0_CTRL_REGS);
/* make sure that the XDATA bit is cleared to zero */
1 L; f) ]7 k. T0 p  vwhile(McASPTxStatusGet(SOC_MCASP_0_CTRL_REGS) & MCASP_TX_STAT_DATAREADY);
/* Activate the state machines */; q; K1 Q0 W$ E( l3 G( v3 Q
McASPRxEnable(SOC_MCASP_0_CTRL_REGS);( E! u! E2 w/ I2 F, p+ {) }
McASPTxEnable(SOC_MCASP_0_CTRL_REGS);
5 _" M- y, B+ R" p8 X2 ?# _}

" f. _8 A9 z6 H9 @( }! F- i
请问:问题出在哪了,时钟按照这样配是否有错。
另外我看XDATA一直是0,接收的rxbuf0,1,2里有一般全是FFFF一半全是0.

2 D" t" K2 g& l0 n$ s' y




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