嵌入式开发者社区

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

作者: wapdasta    时间: 2018-11-7 13:28
标题: MCASP自环配置。
我项目上用OMAPL138的板子MCASP的引脚都是链接的FPGA,所以在FPGA这端设置的MCASP自环。把axr0接收到的通过axr1发回去。
部分代码如下
input mcasp_afsx,
' I; C9 O8 h! w9 kinput mcasp_ahclkx,
9 E( z6 z3 V" Iinput mcasp_aclkx,/ N# |0 w# g% T% z% S0 ^2 H2 C8 f
input axr0,6 x) p- {# Q8 V* y, J
( M7 |) n/ r  X
output mcasp_afsr,- u4 H$ C, r2 J% e, H! l) I. x/ u) Q
output mcasp_ahclkr,2 N# _- Y1 v8 ~' x1 e
output mcasp_aclkr,7 _5 ?3 n( I  l+ V* u  i4 w/ b
output axr1,, v8 j) r, H0 F  P' U5 A
assign mcasp_afsr = mcasp_afsx;
% g: T& S3 i0 F/ `assign mcasp_aclkr = mcasp_aclkx;9 ?, l% [9 @* E& [& p
assign mcasp_ahclkr = mcasp_ahclkx;- l9 H7 J0 I- o. k
assign axr1 = axr0;
! ~& u) L! g/ G- t4 B( i
' b# W# h4 l: d' c
在OMAPL138这端,通过axr0接口发固定的数,axr1接收。
在配置MACASP的时候,发送全部取内部时钟,接收全部取外部时钟。
一直循环发送,但是接收不到。在FPGA端也没有看到时钟和信号的波形。
部分代码如下,关于edma3的部分未做变化。
# f$ }- g& v4 T
static void McASPI2SConfigure(void)
' i; v+ N& Z. x! [: _" T! P{3 n2 ^& V* R) L4 t! k
McASPRxReset(SOC_MCASP_0_CTRL_REGS);
' h' L2 }. |) W% {; bMcASPTxReset(SOC_MCASP_0_CTRL_REGS);
/* Enable the FIFOs for DMA transfer */" p9 m& |9 P8 H& b0 f
McASPReadFifoEnable(SOC_MCASP_0_FIFO_REGS, 1, 1);) d8 a, D! F1 `5 _) @
McASPWriteFifoEnable(SOC_MCASP_0_FIFO_REGS, 1, 1);
/* Set I2S format in the transmitter/receiver format units */
6 Z8 |' [6 t- vMcASPRxFmtI2SSet(SOC_MCASP_0_CTRL_REGS, WORD_SIZE, SLOT_SIZE,
- A$ g  e8 V/ @6 h. X" y: V# sMCASP_RX_MODE_DMA);0 r9 \4 }+ a2 `; o) n
McASPTxFmtI2SSet(SOC_MCASP_0_CTRL_REGS, WORD_SIZE, SLOT_SIZE,4 G  ]: C5 z% j, o* @
MCASP_TX_MODE_DMA);
/* Configure the frame sync. I2S shall work in TDM format with 2 slots */
2 C9 d2 e+ q. s& M! [McASPRxFrameSyncCfg(SOC_MCASP_0_CTRL_REGS, 2, MCASP_RX_FS_WIDTH_WORD,
% g' S8 Y1 B) ]7 m( N  g' BMCASP_RX_FS_EXT_BEGIN_ON_FALL_EDGE);
' ?$ J) o; F4 j% i7 LMcASPTxFrameSyncCfg(SOC_MCASP_0_CTRL_REGS, 2, MCASP_TX_FS_WIDTH_WORD,
" Y: a6 Y9 {: h$ Y8 OMCASP_TX_FS_INT_BEGIN_ON_RIS_EDGE);
/* configure the clock for receiver */! W# c& _) ]- j
McASPRxClkCfg(SOC_MCASP_0_CTRL_REGS, MCASP_RX_CLK_EXTERNAL, 0, 0);- A- D  I% Q0 I- ^/ J: }9 h9 B
McASPRxClkPolaritySet(SOC_MCASP_0_CTRL_REGS, MCASP_RX_CLK_POL_RIS_EDGE); / ~" u% W: k! d2 R5 c( J+ ~
McASPRxClkCheckConfig(SOC_MCASP_0_CTRL_REGS, MCASP_RX_CLKCHCK_DIV32,
1 z) h7 Y; q( g" W0x00, 0xFF);
/* configure the clock for transmitter */3 J( z6 W; r" n% |5 F0 k' [/ \) Y
McASPTxClkCfg(SOC_MCASP_0_CTRL_REGS, MCASP_TX_CLK_INTERNAL, 11, 1);
3 A; x9 w  a: {& EMcASPTxClkPolaritySet(SOC_MCASP_0_CTRL_REGS, MCASP_TX_CLK_POL_FALL_EDGE); , E- D5 L5 Y7 B; k) T1 a  m$ T- i
McASPTxClkCheckConfig(SOC_MCASP_0_CTRL_REGS, MCASP_TX_CLKCHCK_DIV32,
6 L/ ]4 d6 j! D- M' T$ _  t# B. d0x00, 0xFF);2 @. S6 r+ e" W8 _, U  w
' w3 Q) W1 F1 O5 h1 a, Q2 W* D
/* Enable synchronization of RX and TX sections */
! D8 ~% B4 e0 h2 g) N/ B0 t* `McASPTxRxClkSyncEnable(SOC_MCASP_0_CTRL_REGS);
/* Enable the transmitter/receiver slots. I2S uses 2 slots */
/ T% x% a. ~7 K. _2 k$ \McASPRxTimeSlotSet(SOC_MCASP_0_CTRL_REGS, I2S_SLOTS);
" r# d; |" }4 C) w+ eMcASPTxTimeSlotSet(SOC_MCASP_0_CTRL_REGS, I2S_SLOTS);
/*
! T$ ?. ]# I0 p3 z: D- L** Set the serializers, Currently only one serializer is set as
  \8 w0 u7 g& j. P6 }# ~: K, x** transmitter and one serializer as receiver.  t1 ]9 {+ H/ T- E: c
*/
, ?, g0 w+ B0 S/ i. XMcASPSerializerRxSet(SOC_MCASP_0_CTRL_REGS, MCASP_XSER_RX);; u+ p* w" Y: E& w0 Q8 p5 x9 J
McASPSerializerTxSet(SOC_MCASP_0_CTRL_REGS, MCASP_XSER_TX);
/*
8 y. k7 ]2 L, c( h# v9 W** Configure the McASP pins 7 E% G: |; a0 C" J3 B+ l$ P# ^
** Input - Frame Sync, Clock and Serializer Rx6 T" o5 o% \$ ~+ M) i. C: F; v' P
** Output - Serializer Tx is connected to the input of the codec
  w1 c3 @8 K8 M- [*/, b3 w2 u! j+ Y/ U+ o- V
McASPPinMcASPSet(SOC_MCASP_0_CTRL_REGS, 0xFFFFFFFF);
1 u) r% t8 R, ^- K, }McASPPinDirOutputSet(SOC_MCASP_0_CTRL_REGS,MCASP_PIN_AXR(MCASP_XSER_TX));& W$ Q: M# \2 N+ p2 J9 i
McASPPinDirInputSet(SOC_MCASP_0_CTRL_REGS, MCASP_PIN_AFSX4 B+ Q  ^& z3 F. }$ U
| MCASP_PIN_ACLKX
# _1 O: F: x% _| MCASP_PIN_AHCLKX7 e. |8 [6 o+ y: l+ w& p
| MCASP_PIN_AXR(MCASP_XSER_RX));
/* Enable error interrupts for McASP */4 `* s% s+ x( J& n( G* W
McASPTxIntEnable(SOC_MCASP_0_CTRL_REGS, MCASP_TX_DMAERROR 3 \6 d7 Y7 Y2 C+ ]; f5 m5 Y
| MCASP_TX_CLKFAIL
- r7 C1 s) k, X9 y| MCASP_TX_SYNCERROR5 P8 Q5 ~0 [/ V, V
| MCASP_TX_UNDERRUN);
McASPRxIntEnable(SOC_MCASP_0_CTRL_REGS, MCASP_RX_DMAERROR ) I! h% D5 t: n) l
| MCASP_RX_CLKFAIL
: {$ t, X1 P) C5 d| MCASP_RX_SYNCERROR
4 m- w5 U7 z1 O! O5 T( g* A- w7 R! v| MCASP_RX_OVERRUN);
$ F6 l+ D7 G, H}
static void I2SDataTxRxActivate(void)+ B8 K0 s" R* k, r' w: u6 c
{
. n4 G1 e( ?. p, z/* Start the clocks */' ^, v7 e" P7 z8 B* X
McASPRxClkStart(SOC_MCASP_0_CTRL_REGS, MCASP_RX_CLK_EXTERNAL);
' ]" m& M% L( l, t( B. pMcASPTxClkStart(SOC_MCASP_0_CTRL_REGS, MCASP_TX_CLK_INTERNAL);
/* Enable EDMA for the transfer */
" l+ o; @9 T8 ^EDMA3EnableTransfer(SOC_EDMA30CC_0_REGS, EDMA3_CHA_MCASP0_RX,
% R1 h& }" U: w9 ?" n! B7 F+ |EDMA3_TRIG_MODE_EVENT);% G) a9 [# q4 H" n& s
EDMA3EnableTransfer(SOC_EDMA30CC_0_REGS,
9 b% {; Z9 ~' d% u/ G: ~EDMA3_CHA_MCASP0_TX, EDMA3_TRIG_MODE_EVENT);
/* Activate the serializers */
' t: ?% K% L/ [$ o) a) t% }6 H6 lMcASPRxSerActivate(SOC_MCASP_0_CTRL_REGS);
; y( L- {3 `1 `% q5 iMcASPTxSerActivate(SOC_MCASP_0_CTRL_REGS);
/* make sure that the XDATA bit is cleared to zero */
# k) j4 v5 u: R; j/ r# Hwhile(McASPTxStatusGet(SOC_MCASP_0_CTRL_REGS) & MCASP_TX_STAT_DATAREADY);
/* Activate the state machines */
5 \! e% J+ e, ^! v) jMcASPRxEnable(SOC_MCASP_0_CTRL_REGS);$ t% B0 ]+ ^9 e. ^* X+ v
McASPTxEnable(SOC_MCASP_0_CTRL_REGS);
  J/ Y. F# R6 n' c2 h}

5 C1 A5 r! W6 I1 V: S
请问:问题出在哪了,时钟按照这样配是否有错。
另外我看XDATA一直是0,接收的rxbuf0,1,2里有一般全是FFFF一半全是0.
# V! S" X8 M4 j





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