嵌入式开发者社区

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

作者: wapdasta    时间: 2018-11-7 13:28
标题: MCASP自环配置。
我项目上用OMAPL138的板子MCASP的引脚都是链接的FPGA,所以在FPGA这端设置的MCASP自环。把axr0接收到的通过axr1发回去。
部分代码如下
input mcasp_afsx,
* m1 U) D+ m& |5 a' k$ }* \/ Tinput mcasp_ahclkx,
! f2 V" e! G# o% l& T) ?" F! ?input mcasp_aclkx,; A9 {* R6 t$ f* W
input axr0,# S* h3 F# T" D1 {7 m

9 s' i5 O  l3 s1 Moutput mcasp_afsr,% P7 ~: b7 e& N4 S. @4 z. ~
output mcasp_ahclkr,
5 C" A8 K- T8 l2 @" E" A: aoutput mcasp_aclkr,% v7 Z( i7 ?" W, T1 y) u2 W
output axr1,! ]# Y1 M! b/ d: w  X- C
assign mcasp_afsr = mcasp_afsx;
( X8 q, K) b# W) F# D' Massign mcasp_aclkr = mcasp_aclkx;! C# \7 t; h: l, T3 D: A$ y& p" C
assign mcasp_ahclkr = mcasp_ahclkx;6 d% w0 F8 {, _7 E) G6 }
assign axr1 = axr0;

  z7 J% a# U- t/ z4 y. k) P2 a# B9 U
; R6 B# }: n) {9 k: X5 ]
在OMAPL138这端,通过axr0接口发固定的数,axr1接收。
在配置MACASP的时候,发送全部取内部时钟,接收全部取外部时钟。
一直循环发送,但是接收不到。在FPGA端也没有看到时钟和信号的波形。
部分代码如下,关于edma3的部分未做变化。

% K1 n$ \0 G0 ^9 D" N& w, m
static void McASPI2SConfigure(void)
4 ]3 V* ]" R8 R: ^" ?1 t6 g{
, a* \+ l9 H/ B& P0 w9 QMcASPRxReset(SOC_MCASP_0_CTRL_REGS);, _7 i. t/ Z* ^$ b4 B$ s
McASPTxReset(SOC_MCASP_0_CTRL_REGS);
/* Enable the FIFOs for DMA transfer */0 N$ W- ~3 r, t) Y. i) h1 j( m
McASPReadFifoEnable(SOC_MCASP_0_FIFO_REGS, 1, 1);
. M5 w* u# c) _5 vMcASPWriteFifoEnable(SOC_MCASP_0_FIFO_REGS, 1, 1);
/* Set I2S format in the transmitter/receiver format units */
. e: N! [8 y9 d' R! O& UMcASPRxFmtI2SSet(SOC_MCASP_0_CTRL_REGS, WORD_SIZE, SLOT_SIZE,9 a4 Z- k% |* B: t) o, k2 |
MCASP_RX_MODE_DMA);0 w$ ?6 z7 B$ I0 {% ^2 w, f
McASPTxFmtI2SSet(SOC_MCASP_0_CTRL_REGS, WORD_SIZE, SLOT_SIZE,2 }8 z( v/ F5 _+ z0 Z0 o: R
MCASP_TX_MODE_DMA);
/* Configure the frame sync. I2S shall work in TDM format with 2 slots */2 z7 F* z  q. b; J0 ?2 ~
McASPRxFrameSyncCfg(SOC_MCASP_0_CTRL_REGS, 2, MCASP_RX_FS_WIDTH_WORD,
) U# Y* a% }2 lMCASP_RX_FS_EXT_BEGIN_ON_FALL_EDGE);5 _* P; u7 L$ i2 ?+ J) e# q
McASPTxFrameSyncCfg(SOC_MCASP_0_CTRL_REGS, 2, MCASP_TX_FS_WIDTH_WORD, 1 i7 A- }/ d; ?/ {* {+ N9 l4 [
MCASP_TX_FS_INT_BEGIN_ON_RIS_EDGE);
/* configure the clock for receiver */" ?; n0 f6 U1 U$ w/ J: X3 M
McASPRxClkCfg(SOC_MCASP_0_CTRL_REGS, MCASP_RX_CLK_EXTERNAL, 0, 0);
6 q( ?% g! i" n, o7 J" zMcASPRxClkPolaritySet(SOC_MCASP_0_CTRL_REGS, MCASP_RX_CLK_POL_RIS_EDGE);
8 }2 \+ P" e( a1 zMcASPRxClkCheckConfig(SOC_MCASP_0_CTRL_REGS, MCASP_RX_CLKCHCK_DIV32,
+ u6 {, x4 f5 f0x00, 0xFF);
/* configure the clock for transmitter */
( w- S* C5 I6 p/ sMcASPTxClkCfg(SOC_MCASP_0_CTRL_REGS, MCASP_TX_CLK_INTERNAL, 11, 1);
' e7 j" \9 B( ^: Z$ E( ^) k' aMcASPTxClkPolaritySet(SOC_MCASP_0_CTRL_REGS, MCASP_TX_CLK_POL_FALL_EDGE); ( y4 ^& q) Z- d  _- g
McASPTxClkCheckConfig(SOC_MCASP_0_CTRL_REGS, MCASP_TX_CLKCHCK_DIV32,+ R. t/ w6 q- Z4 ]" D2 _# T6 a
0x00, 0xFF);
1 {  _; D) |* ~+ t7 o2 r+ W4 x" G( u5 K( d& p
/* Enable synchronization of RX and TX sections */
  ^& K2 d! \: S# ^% ]McASPTxRxClkSyncEnable(SOC_MCASP_0_CTRL_REGS);
/* Enable the transmitter/receiver slots. I2S uses 2 slots */
* y8 ?) N& t* }+ N" i; J8 w# y, F8 b, d( UMcASPRxTimeSlotSet(SOC_MCASP_0_CTRL_REGS, I2S_SLOTS);+ q( c/ c. T* |! K; E
McASPTxTimeSlotSet(SOC_MCASP_0_CTRL_REGS, I2S_SLOTS);
/*; M" |- _1 ]" N; y, f' a3 |2 W4 }" `
** Set the serializers, Currently only one serializer is set as
3 b4 ^. I8 q" J8 |- z5 n) O** transmitter and one serializer as receiver.
9 O/ _7 M: h) R; `*/% e, o0 X7 I, M6 _
McASPSerializerRxSet(SOC_MCASP_0_CTRL_REGS, MCASP_XSER_RX);
3 @* a$ j4 @, `- _: ~McASPSerializerTxSet(SOC_MCASP_0_CTRL_REGS, MCASP_XSER_TX);
/*
) P* ~: d+ v# f6 V& `) r2 c** Configure the McASP pins 8 B6 E# K8 p( S2 Y4 Y* |+ \
** Input - Frame Sync, Clock and Serializer Rx
5 _. C; Z2 Q, \5 W( o0 e** Output - Serializer Tx is connected to the input of the codec 7 L# R: y$ p7 O  i
*/
0 S; ~% T: s, f& B8 \McASPPinMcASPSet(SOC_MCASP_0_CTRL_REGS, 0xFFFFFFFF);
, b9 _3 y8 g" f- o' p3 a1 ?McASPPinDirOutputSet(SOC_MCASP_0_CTRL_REGS,MCASP_PIN_AXR(MCASP_XSER_TX));4 X+ e3 _( Q" a; n2 e
McASPPinDirInputSet(SOC_MCASP_0_CTRL_REGS, MCASP_PIN_AFSX0 }% }1 d  m9 J" t( a
| MCASP_PIN_ACLKX' `* ~% M4 U1 N$ d$ N
| MCASP_PIN_AHCLKX6 ~/ H) O* i+ z7 K7 B
| MCASP_PIN_AXR(MCASP_XSER_RX));
/* Enable error interrupts for McASP */
, L7 d! A1 s4 V0 }( w' g1 ]McASPTxIntEnable(SOC_MCASP_0_CTRL_REGS, MCASP_TX_DMAERROR
, L+ M5 P( U: A6 i& E| MCASP_TX_CLKFAIL + I- [( h2 ?+ t0 X0 Z& s( x
| MCASP_TX_SYNCERROR
! M( L) P6 D% C* ^) f| MCASP_TX_UNDERRUN);
McASPRxIntEnable(SOC_MCASP_0_CTRL_REGS, MCASP_RX_DMAERROR
% ^7 g6 B3 G& z/ o, Y" \| MCASP_RX_CLKFAIL
% v9 k, o* M9 i: c, S| MCASP_RX_SYNCERROR
9 Y5 d5 i" x1 u0 [% J6 ^| MCASP_RX_OVERRUN);! i' ], S+ _$ L- s' S7 b
}
static void I2SDataTxRxActivate(void)3 ]) b" e! r2 S9 [
{
* I( U& g) U0 ^9 E: l. W( f+ E/* Start the clocks */
$ w; Y3 `0 u- L0 |McASPRxClkStart(SOC_MCASP_0_CTRL_REGS, MCASP_RX_CLK_EXTERNAL);4 P+ c: k% V# z
McASPTxClkStart(SOC_MCASP_0_CTRL_REGS, MCASP_TX_CLK_INTERNAL);
/* Enable EDMA for the transfer */
- s1 d1 h. W$ d7 X3 H0 OEDMA3EnableTransfer(SOC_EDMA30CC_0_REGS, EDMA3_CHA_MCASP0_RX,
9 t& d5 h6 \8 P. DEDMA3_TRIG_MODE_EVENT);0 d0 ~0 p& ~8 N; u9 y
EDMA3EnableTransfer(SOC_EDMA30CC_0_REGS,
, l: _$ d/ v& lEDMA3_CHA_MCASP0_TX, EDMA3_TRIG_MODE_EVENT);
/* Activate the serializers */
8 n, ~/ }6 R- V1 }+ |$ rMcASPRxSerActivate(SOC_MCASP_0_CTRL_REGS);1 Z" M9 ?4 H, q$ d( j$ ?" d' U4 i
McASPTxSerActivate(SOC_MCASP_0_CTRL_REGS);
/* make sure that the XDATA bit is cleared to zero */
8 ^3 \6 M6 u$ W4 r+ q  Ewhile(McASPTxStatusGet(SOC_MCASP_0_CTRL_REGS) & MCASP_TX_STAT_DATAREADY);
/* Activate the state machines */, _# I# y1 Y  Z5 N6 M
McASPRxEnable(SOC_MCASP_0_CTRL_REGS);* |+ b6 N) q8 k7 E4 m( c3 ~7 u
McASPTxEnable(SOC_MCASP_0_CTRL_REGS);% P0 G. ~" O9 _% N% K  n8 D; j5 f
}

' d9 F! P& \4 U2 `9 U- ]5 y, g
请问:问题出在哪了,时钟按照这样配是否有错。
另外我看XDATA一直是0,接收的rxbuf0,1,2里有一般全是FFFF一半全是0.
6 j% \, [! G' G+ B) J





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