嵌入式开发者社区

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

作者: wapdasta    时间: 2018-11-7 13:28
标题: MCASP自环配置。
我项目上用OMAPL138的板子MCASP的引脚都是链接的FPGA,所以在FPGA这端设置的MCASP自环。把axr0接收到的通过axr1发回去。
部分代码如下
input mcasp_afsx,  o- F. `# |2 p, w  [
input mcasp_ahclkx,
1 c( j- [9 i1 j3 i' v- ]+ tinput mcasp_aclkx,( t) `0 v; K, t  L- M- t5 ?: h
input axr0,
  c! t* Z" g+ E* m* E
# t2 y7 S9 Q3 U3 _/ q# x7 Boutput mcasp_afsr,2 |9 X; |4 W( \6 y3 q
output mcasp_ahclkr,5 R4 S0 G3 Y7 ~  r% A, ]
output mcasp_aclkr,. b( D/ _6 q8 j
output axr1,
" C+ p/ y7 O. z' U- w5 D
assign mcasp_afsr = mcasp_afsx;
" y% G0 W0 k8 Q4 W7 Jassign mcasp_aclkr = mcasp_aclkx;
4 T# ~7 D5 f4 ^- a' n8 passign mcasp_ahclkr = mcasp_ahclkx;
/ V* s2 J! ~5 R2 V6 |, Massign axr1 = axr0;

+ A9 B) g. q& b3 F$ v% a
1 C9 Z& P7 f: w) P6 k8 M* @9 V) A
在OMAPL138这端,通过axr0接口发固定的数,axr1接收。
在配置MACASP的时候,发送全部取内部时钟,接收全部取外部时钟。
一直循环发送,但是接收不到。在FPGA端也没有看到时钟和信号的波形。
部分代码如下,关于edma3的部分未做变化。

$ o/ ]8 q; b4 ~, M6 k* i
static void McASPI2SConfigure(void)
* i4 F+ V- F0 }  T  J/ k, I/ |{
, R: P7 K' e' X& j9 u1 R3 CMcASPRxReset(SOC_MCASP_0_CTRL_REGS);6 u/ \7 G% j9 s/ u
McASPTxReset(SOC_MCASP_0_CTRL_REGS);
/* Enable the FIFOs for DMA transfer */" @+ p; `+ o$ b+ U- ~
McASPReadFifoEnable(SOC_MCASP_0_FIFO_REGS, 1, 1);3 K* C! @; Y7 h. Z. w$ M1 D- I) G
McASPWriteFifoEnable(SOC_MCASP_0_FIFO_REGS, 1, 1);
/* Set I2S format in the transmitter/receiver format units */
9 ?; ^! u* F) A8 EMcASPRxFmtI2SSet(SOC_MCASP_0_CTRL_REGS, WORD_SIZE, SLOT_SIZE,
5 V" w' u& k" @+ ]& HMCASP_RX_MODE_DMA);
" g$ b$ H% d' L" c) P5 aMcASPTxFmtI2SSet(SOC_MCASP_0_CTRL_REGS, WORD_SIZE, SLOT_SIZE,- E+ k- Y3 d( r" z
MCASP_TX_MODE_DMA);
/* Configure the frame sync. I2S shall work in TDM format with 2 slots */2 p* e+ I( S5 K
McASPRxFrameSyncCfg(SOC_MCASP_0_CTRL_REGS, 2, MCASP_RX_FS_WIDTH_WORD,   P& f* u# S/ g) z
MCASP_RX_FS_EXT_BEGIN_ON_FALL_EDGE);5 m- A3 E3 P- s7 i) p5 B) g
McASPTxFrameSyncCfg(SOC_MCASP_0_CTRL_REGS, 2, MCASP_TX_FS_WIDTH_WORD,   J: E6 w9 v  U2 s$ I7 J
MCASP_TX_FS_INT_BEGIN_ON_RIS_EDGE);
/* configure the clock for receiver */
3 m$ j& @% S5 _5 `0 u( F# p- z! WMcASPRxClkCfg(SOC_MCASP_0_CTRL_REGS, MCASP_RX_CLK_EXTERNAL, 0, 0);9 E1 l  H# J$ e# i1 D; c3 ]
McASPRxClkPolaritySet(SOC_MCASP_0_CTRL_REGS, MCASP_RX_CLK_POL_RIS_EDGE); # e" l$ ~5 `7 G: |* b
McASPRxClkCheckConfig(SOC_MCASP_0_CTRL_REGS, MCASP_RX_CLKCHCK_DIV32,) G$ J7 v8 Q1 Q: s8 j
0x00, 0xFF);
/* configure the clock for transmitter */
. ~; ~$ M2 R9 d7 D1 NMcASPTxClkCfg(SOC_MCASP_0_CTRL_REGS, MCASP_TX_CLK_INTERNAL, 11, 1);
% I9 L5 C+ I  e$ k. o. v7 ~McASPTxClkPolaritySet(SOC_MCASP_0_CTRL_REGS, MCASP_TX_CLK_POL_FALL_EDGE);
5 T1 H& j7 t9 ^McASPTxClkCheckConfig(SOC_MCASP_0_CTRL_REGS, MCASP_TX_CLKCHCK_DIV32,
# J2 k2 \6 X1 e; b( }  [+ U0 V0x00, 0xFF);* G4 A9 |5 Q8 D0 f$ j: K( F. }

4 e$ T4 Q9 U3 W/* Enable synchronization of RX and TX sections */ 2 s7 }3 F$ p" C% O9 L  H
McASPTxRxClkSyncEnable(SOC_MCASP_0_CTRL_REGS);
/* Enable the transmitter/receiver slots. I2S uses 2 slots */4 u2 i+ S7 a2 T5 A" M
McASPRxTimeSlotSet(SOC_MCASP_0_CTRL_REGS, I2S_SLOTS);. r0 y) P/ O& O
McASPTxTimeSlotSet(SOC_MCASP_0_CTRL_REGS, I2S_SLOTS);
/*# |) B/ I* @' N- V- x( K
** Set the serializers, Currently only one serializer is set as3 i! b$ X, j# C% t; l2 ~
** transmitter and one serializer as receiver.
* n" g3 j7 C5 q& q: k* Z*/3 v, E1 p, f$ o& Y- A8 D
McASPSerializerRxSet(SOC_MCASP_0_CTRL_REGS, MCASP_XSER_RX);
' y; n+ Z+ z3 b/ pMcASPSerializerTxSet(SOC_MCASP_0_CTRL_REGS, MCASP_XSER_TX);
/*' q4 q& _, i8 @0 s; H3 ~
** Configure the McASP pins
3 K- ]4 F& b  ^9 r** Input - Frame Sync, Clock and Serializer Rx
8 Q) J) e" I: P** Output - Serializer Tx is connected to the input of the codec 5 [) @& `# K6 I1 j
*/: u2 K' {6 L' I3 s
McASPPinMcASPSet(SOC_MCASP_0_CTRL_REGS, 0xFFFFFFFF);" H6 e9 P/ J) M+ H& Y
McASPPinDirOutputSet(SOC_MCASP_0_CTRL_REGS,MCASP_PIN_AXR(MCASP_XSER_TX));
' q5 [1 x7 a7 F9 q" IMcASPPinDirInputSet(SOC_MCASP_0_CTRL_REGS, MCASP_PIN_AFSX
2 F. T9 x2 R. t1 V$ @| MCASP_PIN_ACLKX
/ a: B- y& W" l/ |+ C, U, Y& g% Z| MCASP_PIN_AHCLKX9 E) \* {) p  J; O; s
| MCASP_PIN_AXR(MCASP_XSER_RX));
/* Enable error interrupts for McASP */
6 S1 U' _- I1 z, ^6 b1 P; c# Y& }McASPTxIntEnable(SOC_MCASP_0_CTRL_REGS, MCASP_TX_DMAERROR . e. t( H: u# e1 m+ |9 C- R
| MCASP_TX_CLKFAIL 3 z; j- x3 R* [1 S- Q
| MCASP_TX_SYNCERROR  X# V1 Q% n/ @; `, {5 b9 J" o+ C6 _
| MCASP_TX_UNDERRUN);
McASPRxIntEnable(SOC_MCASP_0_CTRL_REGS, MCASP_RX_DMAERROR
7 Y+ J' c0 \/ M$ S| MCASP_RX_CLKFAIL
" \9 D8 i8 W. e1 }% @, V| MCASP_RX_SYNCERROR
8 l( I0 }' k: @: [| MCASP_RX_OVERRUN);# ?7 t8 m5 z3 O, O; d  n  V, z
}
static void I2SDataTxRxActivate(void)
! g( R, s$ B, f+ ~/ w- U{
4 [1 {7 I/ \, ~2 ?/ k3 L/* Start the clocks */
: i9 p+ w+ `2 z# iMcASPRxClkStart(SOC_MCASP_0_CTRL_REGS, MCASP_RX_CLK_EXTERNAL);: `2 s& l4 @" X" c/ T
McASPTxClkStart(SOC_MCASP_0_CTRL_REGS, MCASP_TX_CLK_INTERNAL);
/* Enable EDMA for the transfer */- T- p3 n7 C* X" R
EDMA3EnableTransfer(SOC_EDMA30CC_0_REGS, EDMA3_CHA_MCASP0_RX,$ c& @1 ]4 ^3 F# x1 w) Q
EDMA3_TRIG_MODE_EVENT);
( F7 c/ a1 _7 e8 w9 s6 p5 [EDMA3EnableTransfer(SOC_EDMA30CC_0_REGS,
% d& _+ e; ^- W. B% e/ hEDMA3_CHA_MCASP0_TX, EDMA3_TRIG_MODE_EVENT);
/* Activate the serializers */  A& L& v: @2 O
McASPRxSerActivate(SOC_MCASP_0_CTRL_REGS);
! i# D- \" @( V& [6 j) o( fMcASPTxSerActivate(SOC_MCASP_0_CTRL_REGS);
/* make sure that the XDATA bit is cleared to zero */6 l) m) a  I7 p; {3 k" \
while(McASPTxStatusGet(SOC_MCASP_0_CTRL_REGS) & MCASP_TX_STAT_DATAREADY);
/* Activate the state machines */
& m" Y+ O( {" B) vMcASPRxEnable(SOC_MCASP_0_CTRL_REGS);
  r+ L7 n- w- `' ^$ z+ M1 Q" qMcASPTxEnable(SOC_MCASP_0_CTRL_REGS);: N0 i& C, i. r$ z
}

* y# K; G5 e- ~* r* v- W$ e8 Y
请问:问题出在哪了,时钟按照这样配是否有错。
另外我看XDATA一直是0,接收的rxbuf0,1,2里有一般全是FFFF一半全是0.

) b! Y+ v. K+ U




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