嵌入式开发者社区

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

作者: wapdasta    时间: 2018-11-7 13:28
标题: MCASP自环配置。
我项目上用OMAPL138的板子MCASP的引脚都是链接的FPGA,所以在FPGA这端设置的MCASP自环。把axr0接收到的通过axr1发回去。
部分代码如下
input mcasp_afsx," t) q2 c6 v! Y" d4 n( V
input mcasp_ahclkx,
/ {/ G9 x* P+ p# K1 x4 Oinput mcasp_aclkx,
7 l( D5 i, ~! t( N6 A  K* ~input axr0,% M/ f$ v" C4 k& z: l/ r2 P6 a
4 P, \4 q3 V0 t$ ^
output mcasp_afsr,9 g, p6 X2 ]  T1 }
output mcasp_ahclkr,' B# b( ?+ v) _0 E( Q- o
output mcasp_aclkr,2 E- o% U) P+ ~/ G3 w/ s% Q" U
output axr1,: X% ~9 G: k; b$ y; A6 S- [
assign mcasp_afsr = mcasp_afsx;
/ l+ D1 t& l8 g5 Z/ ?assign mcasp_aclkr = mcasp_aclkx;( L. Z) v. {6 c4 E8 o
assign mcasp_ahclkr = mcasp_ahclkx;
- e# V! I/ W8 i  o& z6 r! q3 hassign axr1 = axr0;
' v8 v, N6 A5 K+ }$ Z) O9 I3 f

. l- d: F$ n/ P1 J
在OMAPL138这端,通过axr0接口发固定的数,axr1接收。
在配置MACASP的时候,发送全部取内部时钟,接收全部取外部时钟。
一直循环发送,但是接收不到。在FPGA端也没有看到时钟和信号的波形。
部分代码如下,关于edma3的部分未做变化。

: I/ H& h: z- H! v/ \
static void McASPI2SConfigure(void)
0 g- \6 X  @: i$ M; Z0 X9 W{
! z6 m" A( D6 I- }# `& sMcASPRxReset(SOC_MCASP_0_CTRL_REGS);
0 ?+ ], D% d* b7 Z+ i* F1 rMcASPTxReset(SOC_MCASP_0_CTRL_REGS);
/* Enable the FIFOs for DMA transfer */8 f5 s5 X+ H: L4 U3 x
McASPReadFifoEnable(SOC_MCASP_0_FIFO_REGS, 1, 1);
% m; v+ m4 `. b5 g5 i" EMcASPWriteFifoEnable(SOC_MCASP_0_FIFO_REGS, 1, 1);
/* Set I2S format in the transmitter/receiver format units */7 h3 ~4 u, o3 O- }+ \. R
McASPRxFmtI2SSet(SOC_MCASP_0_CTRL_REGS, WORD_SIZE, SLOT_SIZE,! T- C+ k& d- a$ C
MCASP_RX_MODE_DMA);/ F) ?3 i! T# ?/ n6 S; G7 ~' m, x: {
McASPTxFmtI2SSet(SOC_MCASP_0_CTRL_REGS, WORD_SIZE, SLOT_SIZE,' z8 Y  L# @8 F0 E! b( W0 ?
MCASP_TX_MODE_DMA);
/* Configure the frame sync. I2S shall work in TDM format with 2 slots */1 n, ]+ W5 y5 p' q( S6 R4 o
McASPRxFrameSyncCfg(SOC_MCASP_0_CTRL_REGS, 2, MCASP_RX_FS_WIDTH_WORD,
" w" @6 Y) O! {6 p* b8 Q: j  MMCASP_RX_FS_EXT_BEGIN_ON_FALL_EDGE);
4 `  W" j: j) l1 fMcASPTxFrameSyncCfg(SOC_MCASP_0_CTRL_REGS, 2, MCASP_TX_FS_WIDTH_WORD,
: g; U* T9 u: \% _8 eMCASP_TX_FS_INT_BEGIN_ON_RIS_EDGE);
/* configure the clock for receiver */
$ G* x; ~% k8 g  D6 HMcASPRxClkCfg(SOC_MCASP_0_CTRL_REGS, MCASP_RX_CLK_EXTERNAL, 0, 0);# s; x6 h  s  D2 F% ~
McASPRxClkPolaritySet(SOC_MCASP_0_CTRL_REGS, MCASP_RX_CLK_POL_RIS_EDGE); " N" H) @6 Y5 J' r
McASPRxClkCheckConfig(SOC_MCASP_0_CTRL_REGS, MCASP_RX_CLKCHCK_DIV32,% V8 J$ \3 r  f: }. m
0x00, 0xFF);
/* configure the clock for transmitter */4 d1 c$ T* X" J) k, s: X
McASPTxClkCfg(SOC_MCASP_0_CTRL_REGS, MCASP_TX_CLK_INTERNAL, 11, 1);
( N. ^% S; y  Z% U3 e1 SMcASPTxClkPolaritySet(SOC_MCASP_0_CTRL_REGS, MCASP_TX_CLK_POL_FALL_EDGE);
, s1 ~+ _) b, `# }& |& xMcASPTxClkCheckConfig(SOC_MCASP_0_CTRL_REGS, MCASP_TX_CLKCHCK_DIV32,7 b. M, ]- H) F3 [
0x00, 0xFF);
" f+ M# `; g0 V: }0 f6 p( j4 g
/* Enable synchronization of RX and TX sections */ / e. r5 d/ Y4 ?/ e
McASPTxRxClkSyncEnable(SOC_MCASP_0_CTRL_REGS);
/* Enable the transmitter/receiver slots. I2S uses 2 slots */
8 `( ?$ I0 k! a6 P+ F% T0 PMcASPRxTimeSlotSet(SOC_MCASP_0_CTRL_REGS, I2S_SLOTS);
  m" g: @4 o: t3 ~# jMcASPTxTimeSlotSet(SOC_MCASP_0_CTRL_REGS, I2S_SLOTS);
/*
; o! ^+ B) ]: S9 n2 f** Set the serializers, Currently only one serializer is set as
8 ~) T- K7 ]& h** transmitter and one serializer as receiver.
4 F" P" {7 y* }" y8 l& l*/
8 N! O9 ]( C+ ~- X' H) z# }McASPSerializerRxSet(SOC_MCASP_0_CTRL_REGS, MCASP_XSER_RX);9 l( |  N0 ]" D% D4 R# ^' K) c
McASPSerializerTxSet(SOC_MCASP_0_CTRL_REGS, MCASP_XSER_TX);
/*
# C* b2 S# h; z6 M2 a/ _& a7 R** Configure the McASP pins   ~3 t1 T( B$ W( h- ?3 ^7 W
** Input - Frame Sync, Clock and Serializer Rx
$ J9 q$ P/ W5 _" S; ~2 G( R7 E** Output - Serializer Tx is connected to the input of the codec 3 S; t) {6 m$ Q4 A3 w# q( d
*/% v. }0 M" m$ ^! ~# `9 e5 y
McASPPinMcASPSet(SOC_MCASP_0_CTRL_REGS, 0xFFFFFFFF);7 ~! \' Y2 C; {0 J0 O7 n
McASPPinDirOutputSet(SOC_MCASP_0_CTRL_REGS,MCASP_PIN_AXR(MCASP_XSER_TX));
$ \  T! g% l8 e+ vMcASPPinDirInputSet(SOC_MCASP_0_CTRL_REGS, MCASP_PIN_AFSX
- P* I% u9 ~9 Y) F+ _' a| MCASP_PIN_ACLKX
, I4 X' f/ s, O( G| MCASP_PIN_AHCLKX
! y; |- `, l# t, I| MCASP_PIN_AXR(MCASP_XSER_RX));
/* Enable error interrupts for McASP */, c5 K/ H0 g" P9 Y: U
McASPTxIntEnable(SOC_MCASP_0_CTRL_REGS, MCASP_TX_DMAERROR & L) F" \# a8 A! m- \* _1 c* w
| MCASP_TX_CLKFAIL / g  r; M5 ]  I1 T5 X0 p2 ]
| MCASP_TX_SYNCERROR
1 ?' A. q. n6 p; C1 u| MCASP_TX_UNDERRUN);
McASPRxIntEnable(SOC_MCASP_0_CTRL_REGS, MCASP_RX_DMAERROR 9 p& Z4 F3 W* ~1 n4 _  }1 V0 g; ^5 T
| MCASP_RX_CLKFAIL4 p" |/ j$ `: z. s4 D6 |
| MCASP_RX_SYNCERROR
& D8 o3 O8 C3 w, A; G9 i| MCASP_RX_OVERRUN);/ H) m' e9 a. p% r
}
static void I2SDataTxRxActivate(void)
- h6 o) y$ O. q2 P! q4 G{* T1 K' ]! F' E5 M7 b$ W
/* Start the clocks */
" n1 v* Y% C5 R' d: `McASPRxClkStart(SOC_MCASP_0_CTRL_REGS, MCASP_RX_CLK_EXTERNAL);/ {0 k, _8 C0 a. x9 F
McASPTxClkStart(SOC_MCASP_0_CTRL_REGS, MCASP_TX_CLK_INTERNAL);
/* Enable EDMA for the transfer */
* b2 k, n" h- x- b( E! a: C: G) VEDMA3EnableTransfer(SOC_EDMA30CC_0_REGS, EDMA3_CHA_MCASP0_RX,
3 `- w" X! D, g. K) P( R6 VEDMA3_TRIG_MODE_EVENT);% M: v' v8 ^" v! G8 }- O, d
EDMA3EnableTransfer(SOC_EDMA30CC_0_REGS, : O9 _0 L* i: @
EDMA3_CHA_MCASP0_TX, EDMA3_TRIG_MODE_EVENT);
/* Activate the serializers */
: Q0 o4 i2 T& q3 ~: d! ~McASPRxSerActivate(SOC_MCASP_0_CTRL_REGS);* x! V0 \& v+ C7 y9 a/ p; ]
McASPTxSerActivate(SOC_MCASP_0_CTRL_REGS);
/* make sure that the XDATA bit is cleared to zero */
6 ^0 }" e1 b0 d/ }1 r" z) L! vwhile(McASPTxStatusGet(SOC_MCASP_0_CTRL_REGS) & MCASP_TX_STAT_DATAREADY);
/* Activate the state machines */0 i% P7 }) {4 q! ^5 ]7 k6 i; S
McASPRxEnable(SOC_MCASP_0_CTRL_REGS);! e2 N; S8 `! L( W6 S# B
McASPTxEnable(SOC_MCASP_0_CTRL_REGS);7 k) [9 I9 w5 M& l* _
}

: n8 N4 c6 p3 k- S; ~
请问:问题出在哪了,时钟按照这样配是否有错。
另外我看XDATA一直是0,接收的rxbuf0,1,2里有一般全是FFFF一半全是0.
' J9 R" M; a; a3 o





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