嵌入式开发者社区

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

作者: wapdasta    时间: 2018-11-7 13:28
标题: MCASP自环配置。
我项目上用OMAPL138的板子MCASP的引脚都是链接的FPGA,所以在FPGA这端设置的MCASP自环。把axr0接收到的通过axr1发回去。
部分代码如下
input mcasp_afsx,. Y. E$ _9 [2 q: |- m
input mcasp_ahclkx,
) l+ M2 X$ O) W2 jinput mcasp_aclkx,
+ m( o; p! f6 d, Jinput axr0,9 F; ^3 S6 G, c

5 B" C# o5 j8 A+ e! m, P" E% \1 r7 Foutput mcasp_afsr,3 e, f9 u9 D- G
output mcasp_ahclkr,
9 u' H! r5 ~1 H- D/ d* y( `output mcasp_aclkr,+ w6 n  i- ]) G7 }0 m
output axr1,
& |5 P' T- }, B
assign mcasp_afsr = mcasp_afsx;
: `: U& }, N8 E( c- Kassign mcasp_aclkr = mcasp_aclkx;
  C/ Q& `* I2 V# @assign mcasp_ahclkr = mcasp_ahclkx;) R3 E" f1 K5 Z5 L# \
assign axr1 = axr0;

% N3 v  d3 H- W' o# b
4 e- q* B- N9 i4 ^1 e; m* a% A
在OMAPL138这端,通过axr0接口发固定的数,axr1接收。
在配置MACASP的时候,发送全部取内部时钟,接收全部取外部时钟。
一直循环发送,但是接收不到。在FPGA端也没有看到时钟和信号的波形。
部分代码如下,关于edma3的部分未做变化。
- o# h( B0 Z  a7 \) ]4 {
static void McASPI2SConfigure(void)8 _* K: c* l) [. x% j% b( ~
{
$ T  D" M" `' aMcASPRxReset(SOC_MCASP_0_CTRL_REGS);2 O: I; |( j4 E  M) K  U
McASPTxReset(SOC_MCASP_0_CTRL_REGS);
/* Enable the FIFOs for DMA transfer */
/ x4 E0 c; `/ `; y: Q$ g' a& QMcASPReadFifoEnable(SOC_MCASP_0_FIFO_REGS, 1, 1);
- J. i& u  ]/ XMcASPWriteFifoEnable(SOC_MCASP_0_FIFO_REGS, 1, 1);
/* Set I2S format in the transmitter/receiver format units */
; K6 p4 n& U  J; j1 `' VMcASPRxFmtI2SSet(SOC_MCASP_0_CTRL_REGS, WORD_SIZE, SLOT_SIZE,9 \* R3 _  E1 }( S
MCASP_RX_MODE_DMA);' g; g" m3 T9 N  |
McASPTxFmtI2SSet(SOC_MCASP_0_CTRL_REGS, WORD_SIZE, SLOT_SIZE,
2 F7 }8 F- v& y3 j3 SMCASP_TX_MODE_DMA);
/* Configure the frame sync. I2S shall work in TDM format with 2 slots */
/ I2 O3 i' c% z/ y1 s4 hMcASPRxFrameSyncCfg(SOC_MCASP_0_CTRL_REGS, 2, MCASP_RX_FS_WIDTH_WORD,
8 F) l: g7 i* aMCASP_RX_FS_EXT_BEGIN_ON_FALL_EDGE);/ R8 i9 ~2 m  l2 L
McASPTxFrameSyncCfg(SOC_MCASP_0_CTRL_REGS, 2, MCASP_TX_FS_WIDTH_WORD,
8 @/ b" f9 j5 H! HMCASP_TX_FS_INT_BEGIN_ON_RIS_EDGE);
/* configure the clock for receiver */
; Q$ L( _' a" a7 NMcASPRxClkCfg(SOC_MCASP_0_CTRL_REGS, MCASP_RX_CLK_EXTERNAL, 0, 0);
$ S% |+ P/ {! G* iMcASPRxClkPolaritySet(SOC_MCASP_0_CTRL_REGS, MCASP_RX_CLK_POL_RIS_EDGE);
& l; ]8 l& U* X% vMcASPRxClkCheckConfig(SOC_MCASP_0_CTRL_REGS, MCASP_RX_CLKCHCK_DIV32,
5 A2 ~) j  @- g" T; b0x00, 0xFF);
/* configure the clock for transmitter */# O. X% }% ~3 x4 ?$ C1 N
McASPTxClkCfg(SOC_MCASP_0_CTRL_REGS, MCASP_TX_CLK_INTERNAL, 11, 1);
" l& ^/ E! u1 r% h! QMcASPTxClkPolaritySet(SOC_MCASP_0_CTRL_REGS, MCASP_TX_CLK_POL_FALL_EDGE);
0 |; u3 M% G3 h$ u8 c: c2 K% vMcASPTxClkCheckConfig(SOC_MCASP_0_CTRL_REGS, MCASP_TX_CLKCHCK_DIV32,
, n* T' }( t+ o- x0x00, 0xFF);
- a% q, ]& V- J7 N/ U% r- A+ ]) ]3 l% I  q! o
/* Enable synchronization of RX and TX sections */ 3 o6 H% N) l7 e+ c7 Y" h# ^
McASPTxRxClkSyncEnable(SOC_MCASP_0_CTRL_REGS);
/* Enable the transmitter/receiver slots. I2S uses 2 slots */. M/ T/ _3 }& v5 O* \  S; W. f
McASPRxTimeSlotSet(SOC_MCASP_0_CTRL_REGS, I2S_SLOTS);" p" O# d+ S7 U  M! K9 B
McASPTxTimeSlotSet(SOC_MCASP_0_CTRL_REGS, I2S_SLOTS);
/*3 h; D! y4 M# D( {0 I* F6 X2 k
** Set the serializers, Currently only one serializer is set as0 _0 w' q! u: l; Y! d! }
** transmitter and one serializer as receiver.( s4 }3 W4 c' W1 Z* X6 _' a
*/
- v  N% P7 H2 m8 u9 Y; f2 kMcASPSerializerRxSet(SOC_MCASP_0_CTRL_REGS, MCASP_XSER_RX);0 D0 i. |, a4 j
McASPSerializerTxSet(SOC_MCASP_0_CTRL_REGS, MCASP_XSER_TX);
/*" Y5 s# w' x8 P5 g( b
** Configure the McASP pins 1 H4 x1 R3 g! z
** Input - Frame Sync, Clock and Serializer Rx
6 e- z! E3 J8 I% i: ~** Output - Serializer Tx is connected to the input of the codec 7 v7 b. T7 f$ M9 `) Y% G
*/
. Z/ v6 Z  z6 {# Q1 r* W2 H- TMcASPPinMcASPSet(SOC_MCASP_0_CTRL_REGS, 0xFFFFFFFF);, f6 K1 f% I6 `! O. h
McASPPinDirOutputSet(SOC_MCASP_0_CTRL_REGS,MCASP_PIN_AXR(MCASP_XSER_TX));
! Z% ~' e) V" R) L2 t- U/ X& ZMcASPPinDirInputSet(SOC_MCASP_0_CTRL_REGS, MCASP_PIN_AFSX
! l, C6 W2 W3 L) i| MCASP_PIN_ACLKX
, `: U; G1 X. N. B( x" p* z| MCASP_PIN_AHCLKX+ s, I: D) B5 @7 b
| MCASP_PIN_AXR(MCASP_XSER_RX));
/* Enable error interrupts for McASP */
+ r. F/ `$ m9 J' @McASPTxIntEnable(SOC_MCASP_0_CTRL_REGS, MCASP_TX_DMAERROR : F- E! F0 a1 V: n9 Z0 t% s
| MCASP_TX_CLKFAIL ) L, J7 U4 u' d
| MCASP_TX_SYNCERROR
0 w6 o- U( k  S) g6 ~& e7 X" H| MCASP_TX_UNDERRUN);
McASPRxIntEnable(SOC_MCASP_0_CTRL_REGS, MCASP_RX_DMAERROR
7 {+ N, w, s5 v2 v7 d| MCASP_RX_CLKFAIL* k, |. l& H0 `; O- ]; }
| MCASP_RX_SYNCERROR
1 u3 D! ?" `% _. v. s3 p| MCASP_RX_OVERRUN);& T, {" w1 O* J( K# u; G2 e. k& [8 m
}
static void I2SDataTxRxActivate(void)
: e6 |1 J3 n9 m( q2 k5 p1 I5 e{
( g2 b/ ]9 }9 _5 U/* Start the clocks */4 {2 s- B& @' w. B5 M7 y- X
McASPRxClkStart(SOC_MCASP_0_CTRL_REGS, MCASP_RX_CLK_EXTERNAL);
. }' k$ l! ~. d- fMcASPTxClkStart(SOC_MCASP_0_CTRL_REGS, MCASP_TX_CLK_INTERNAL);
/* Enable EDMA for the transfer */2 F8 j8 X0 @0 Z3 U- R7 E
EDMA3EnableTransfer(SOC_EDMA30CC_0_REGS, EDMA3_CHA_MCASP0_RX,- L! V" U1 N* l; j+ |' t) p
EDMA3_TRIG_MODE_EVENT);5 M9 a7 l7 p' O5 L8 i. `
EDMA3EnableTransfer(SOC_EDMA30CC_0_REGS,
; R2 _& L9 A* y3 O6 w& fEDMA3_CHA_MCASP0_TX, EDMA3_TRIG_MODE_EVENT);
/* Activate the serializers */
6 j! O  P  P+ g  S7 ZMcASPRxSerActivate(SOC_MCASP_0_CTRL_REGS);' B/ C: \% }/ p' q" c' T
McASPTxSerActivate(SOC_MCASP_0_CTRL_REGS);
/* make sure that the XDATA bit is cleared to zero */
  P. j2 Q3 Y) }% c  H. f$ gwhile(McASPTxStatusGet(SOC_MCASP_0_CTRL_REGS) & MCASP_TX_STAT_DATAREADY);
/* Activate the state machines */
3 m: H& e9 p  R$ t, V/ eMcASPRxEnable(SOC_MCASP_0_CTRL_REGS);
7 N9 `+ M8 u( iMcASPTxEnable(SOC_MCASP_0_CTRL_REGS);+ C7 r- d% v& f3 {7 b. _
}

  {, B# ?& ?8 o4 L3 K7 Q" _5 g
请问:问题出在哪了,时钟按照这样配是否有错。
另外我看XDATA一直是0,接收的rxbuf0,1,2里有一般全是FFFF一半全是0.

6 I9 [1 c/ t" L




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