嵌入式开发者社区

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

作者: wapdasta    时间: 2018-11-7 13:28
标题: MCASP自环配置。
我项目上用OMAPL138的板子MCASP的引脚都是链接的FPGA,所以在FPGA这端设置的MCASP自环。把axr0接收到的通过axr1发回去。
部分代码如下
input mcasp_afsx,
5 E7 x. Y) E: H; ginput mcasp_ahclkx,
- |7 F0 Z" L  K. B, J# jinput mcasp_aclkx,
* Z+ p) A" P) A; o, Qinput axr0,( p+ A* `  `  ?

: P# q+ \6 `" O6 ^7 z) loutput mcasp_afsr,# i+ ?* x' N& E2 s' q
output mcasp_ahclkr,4 {2 s: M! H$ v9 ~1 L' y9 _8 \
output mcasp_aclkr,
  Y! T# a+ v* {. M7 Boutput axr1,
9 G- c& \  D- o. h% _7 k
assign mcasp_afsr = mcasp_afsx;
3 h* Z; \9 }' k; \assign mcasp_aclkr = mcasp_aclkx;
: S7 }' _% a9 ^! I% f& w1 F6 fassign mcasp_ahclkr = mcasp_ahclkx;
( R" x5 F: B2 c8 hassign axr1 = axr0;

: j' H# I+ M% U) @0 j5 z# w8 v" b% H' D# f) Y+ c
在OMAPL138这端,通过axr0接口发固定的数,axr1接收。
在配置MACASP的时候,发送全部取内部时钟,接收全部取外部时钟。
一直循环发送,但是接收不到。在FPGA端也没有看到时钟和信号的波形。
部分代码如下,关于edma3的部分未做变化。

- l: Z8 {5 m, O8 _' H  g
static void McASPI2SConfigure(void)8 n7 |5 K+ `+ s/ c) n! J. U$ r
{
! Y8 ^% Q; ~; |. U# ~McASPRxReset(SOC_MCASP_0_CTRL_REGS);
; c* T. C6 r, h2 L( YMcASPTxReset(SOC_MCASP_0_CTRL_REGS);
/* Enable the FIFOs for DMA transfer */
6 k3 F% V2 }# yMcASPReadFifoEnable(SOC_MCASP_0_FIFO_REGS, 1, 1);, k$ ~8 R3 D, ~. O1 J0 k
McASPWriteFifoEnable(SOC_MCASP_0_FIFO_REGS, 1, 1);
/* Set I2S format in the transmitter/receiver format units */1 _$ {: G8 [, ~0 u9 U
McASPRxFmtI2SSet(SOC_MCASP_0_CTRL_REGS, WORD_SIZE, SLOT_SIZE,8 K, m/ g9 s  f) I
MCASP_RX_MODE_DMA);
. J, Z% ~, L0 ^7 }' g- t- i. i3 `McASPTxFmtI2SSet(SOC_MCASP_0_CTRL_REGS, WORD_SIZE, SLOT_SIZE,: S3 s3 h7 x9 A* j+ n* e: E* u3 h
MCASP_TX_MODE_DMA);
/* Configure the frame sync. I2S shall work in TDM format with 2 slots */
; P3 d2 W* ^5 j7 c) HMcASPRxFrameSyncCfg(SOC_MCASP_0_CTRL_REGS, 2, MCASP_RX_FS_WIDTH_WORD, 1 c8 v1 c" S+ p
MCASP_RX_FS_EXT_BEGIN_ON_FALL_EDGE);- {& I3 c2 B4 z5 U
McASPTxFrameSyncCfg(SOC_MCASP_0_CTRL_REGS, 2, MCASP_TX_FS_WIDTH_WORD, / ]' S" o. R; U, Z* u
MCASP_TX_FS_INT_BEGIN_ON_RIS_EDGE);
/* configure the clock for receiver */
- v; b4 \& U& sMcASPRxClkCfg(SOC_MCASP_0_CTRL_REGS, MCASP_RX_CLK_EXTERNAL, 0, 0);
2 m6 R5 X# `6 I* H+ DMcASPRxClkPolaritySet(SOC_MCASP_0_CTRL_REGS, MCASP_RX_CLK_POL_RIS_EDGE); & a' c1 D. |4 B* |' d5 K
McASPRxClkCheckConfig(SOC_MCASP_0_CTRL_REGS, MCASP_RX_CLKCHCK_DIV32,
& q/ s7 C/ _3 [0x00, 0xFF);
/* configure the clock for transmitter */+ I( Z# E- l4 v$ R% c$ ^
McASPTxClkCfg(SOC_MCASP_0_CTRL_REGS, MCASP_TX_CLK_INTERNAL, 11, 1);8 E. J+ \$ L, ]+ f  Y: p/ h# L
McASPTxClkPolaritySet(SOC_MCASP_0_CTRL_REGS, MCASP_TX_CLK_POL_FALL_EDGE);
7 z/ D. \, J, R0 _; }& G( |2 CMcASPTxClkCheckConfig(SOC_MCASP_0_CTRL_REGS, MCASP_TX_CLKCHCK_DIV32,7 c0 p6 l8 W" K
0x00, 0xFF);1 N5 s, S( U* r- g$ ?

5 y4 G$ `4 K( @: c1 h/* Enable synchronization of RX and TX sections */ 2 O- ~5 @- ]1 I/ _5 `
McASPTxRxClkSyncEnable(SOC_MCASP_0_CTRL_REGS);
/* Enable the transmitter/receiver slots. I2S uses 2 slots */! y0 d# D' V2 |5 I. \
McASPRxTimeSlotSet(SOC_MCASP_0_CTRL_REGS, I2S_SLOTS);
0 S+ Q) ~5 I3 wMcASPTxTimeSlotSet(SOC_MCASP_0_CTRL_REGS, I2S_SLOTS);
/*5 t9 }" U  Z$ U  m6 B1 r& v
** Set the serializers, Currently only one serializer is set as
8 Q8 }+ ]0 \7 M! L* {0 @** transmitter and one serializer as receiver.
$ X( i9 K, n. `6 {# K*/( X) A5 G2 I; y& j
McASPSerializerRxSet(SOC_MCASP_0_CTRL_REGS, MCASP_XSER_RX);: I* ]& S/ u1 h: e. H
McASPSerializerTxSet(SOC_MCASP_0_CTRL_REGS, MCASP_XSER_TX);
/*
. g0 F& K) l' {' l** Configure the McASP pins
3 d/ M' U6 d* Z" O** Input - Frame Sync, Clock and Serializer Rx# h% }7 N4 ?2 \, n
** Output - Serializer Tx is connected to the input of the codec
7 L$ p  Y3 J) i8 X- m2 C$ o*/: Q8 y! ?. w# j; Z5 N( L  Y- P
McASPPinMcASPSet(SOC_MCASP_0_CTRL_REGS, 0xFFFFFFFF);! c9 E  G" ~; ^
McASPPinDirOutputSet(SOC_MCASP_0_CTRL_REGS,MCASP_PIN_AXR(MCASP_XSER_TX));5 X* [- L6 H6 B3 U; J' O; x# [- ]" ?
McASPPinDirInputSet(SOC_MCASP_0_CTRL_REGS, MCASP_PIN_AFSX4 v; t1 `. c# V0 m1 e3 B
| MCASP_PIN_ACLKX! i; b% x0 B5 R6 A$ s1 j! q
| MCASP_PIN_AHCLKX
& c$ o. b! l0 X% H+ N( y| MCASP_PIN_AXR(MCASP_XSER_RX));
/* Enable error interrupts for McASP */
- O3 A$ A; N$ k5 f; \McASPTxIntEnable(SOC_MCASP_0_CTRL_REGS, MCASP_TX_DMAERROR   b( H+ \  Y, \9 k
| MCASP_TX_CLKFAIL
. \& l; M  C- Q| MCASP_TX_SYNCERROR2 I$ M: ?/ {5 x& P/ Y7 g
| MCASP_TX_UNDERRUN);
McASPRxIntEnable(SOC_MCASP_0_CTRL_REGS, MCASP_RX_DMAERROR + c+ [; P. \7 o3 o5 f. K
| MCASP_RX_CLKFAIL
( \6 l# ]$ L* Z; _| MCASP_RX_SYNCERROR
2 G2 y  b/ ?8 B$ L. G1 m: V6 c| MCASP_RX_OVERRUN);  f* b% t. r( Z- G# c& b
}
static void I2SDataTxRxActivate(void)
0 }% j5 S! B8 ^& }2 @9 z{% I1 U5 g5 z% {, L, t$ h
/* Start the clocks */
; b- n. D0 w6 c+ A& k! bMcASPRxClkStart(SOC_MCASP_0_CTRL_REGS, MCASP_RX_CLK_EXTERNAL);
& {% S& o# P1 [7 H* N9 r; tMcASPTxClkStart(SOC_MCASP_0_CTRL_REGS, MCASP_TX_CLK_INTERNAL);
/* Enable EDMA for the transfer */
& D5 U$ |5 b, Z; r/ b9 pEDMA3EnableTransfer(SOC_EDMA30CC_0_REGS, EDMA3_CHA_MCASP0_RX,
! z6 G& D6 ?+ v5 m8 O/ tEDMA3_TRIG_MODE_EVENT);
: r2 N3 I* ?9 ]1 A* Z  |EDMA3EnableTransfer(SOC_EDMA30CC_0_REGS, + u) i8 l/ K& [+ s* ?
EDMA3_CHA_MCASP0_TX, EDMA3_TRIG_MODE_EVENT);
/* Activate the serializers */
3 I, A& ?% d) \" Y/ \* c2 dMcASPRxSerActivate(SOC_MCASP_0_CTRL_REGS);
7 w3 {3 N7 h; x( P$ X& HMcASPTxSerActivate(SOC_MCASP_0_CTRL_REGS);
/* make sure that the XDATA bit is cleared to zero */
4 h2 Z; h8 [+ @- j/ Ywhile(McASPTxStatusGet(SOC_MCASP_0_CTRL_REGS) & MCASP_TX_STAT_DATAREADY);
/* Activate the state machines */3 r3 C* A9 ^% l% p% I
McASPRxEnable(SOC_MCASP_0_CTRL_REGS);' ~8 H7 P7 X* H! {7 ^+ w/ t
McASPTxEnable(SOC_MCASP_0_CTRL_REGS);$ I1 _0 u. W  g: A$ ^7 [/ D9 X
}

, N4 S4 o0 C. \5 y( \  G. m
请问:问题出在哪了,时钟按照这样配是否有错。
另外我看XDATA一直是0,接收的rxbuf0,1,2里有一般全是FFFF一半全是0.
- q$ l2 c5 E: Z- b( ?- d





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