嵌入式开发者社区

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

作者: wapdasta    时间: 2018-11-7 13:28
标题: MCASP自环配置。
我项目上用OMAPL138的板子MCASP的引脚都是链接的FPGA,所以在FPGA这端设置的MCASP自环。把axr0接收到的通过axr1发回去。
部分代码如下
input mcasp_afsx,- U' c3 ?% G0 S& G* n( \" r6 z
input mcasp_ahclkx,
/ h8 n5 G4 i8 L) i) W& Einput mcasp_aclkx,
& Q4 y+ O/ L7 R; Ainput axr0,, V0 w. y' p6 b) Y8 S* x

, Z/ D3 Z/ Q. z1 ~output mcasp_afsr," x( H% A# c( k5 }
output mcasp_ahclkr,
, v8 G* L- z3 P2 o; Poutput mcasp_aclkr,3 j$ c' L" ^8 n' Q! T- f
output axr1,7 f$ Z& ?2 k/ c. f
assign mcasp_afsr = mcasp_afsx;/ F4 W6 _8 [, h5 V, H! Y! k0 L$ P
assign mcasp_aclkr = mcasp_aclkx;
4 k; Z; u0 P" a, X% s' \0 ^+ sassign mcasp_ahclkr = mcasp_ahclkx;
% z' y9 v" K6 Z+ }# lassign axr1 = axr0;
4 B" s6 D; _+ j: A5 q: G
# }) |5 d2 Z: z9 q; k0 c
在OMAPL138这端,通过axr0接口发固定的数,axr1接收。
在配置MACASP的时候,发送全部取内部时钟,接收全部取外部时钟。
一直循环发送,但是接收不到。在FPGA端也没有看到时钟和信号的波形。
部分代码如下,关于edma3的部分未做变化。
: C, H" X( Z* ?! N% Y. p% @
static void McASPI2SConfigure(void)
' E0 \9 ?8 n. H5 h- s/ y{. u6 R& p) Q# C) Q
McASPRxReset(SOC_MCASP_0_CTRL_REGS);
/ |& e( @9 x9 {. j& ZMcASPTxReset(SOC_MCASP_0_CTRL_REGS);
/* Enable the FIFOs for DMA transfer */
1 |) i* |2 P( P0 m/ l6 |' \/ VMcASPReadFifoEnable(SOC_MCASP_0_FIFO_REGS, 1, 1);: E) z: Z$ A/ O
McASPWriteFifoEnable(SOC_MCASP_0_FIFO_REGS, 1, 1);
/* Set I2S format in the transmitter/receiver format units */
6 _- W) v4 h' P8 iMcASPRxFmtI2SSet(SOC_MCASP_0_CTRL_REGS, WORD_SIZE, SLOT_SIZE,1 Y7 I# c) N9 P* A5 B
MCASP_RX_MODE_DMA);
  |  ^5 n! s$ G0 X8 WMcASPTxFmtI2SSet(SOC_MCASP_0_CTRL_REGS, WORD_SIZE, SLOT_SIZE,
) w6 T- D6 |0 J- L1 CMCASP_TX_MODE_DMA);
/* Configure the frame sync. I2S shall work in TDM format with 2 slots */! i3 }* p0 \7 b# I" o! y! N
McASPRxFrameSyncCfg(SOC_MCASP_0_CTRL_REGS, 2, MCASP_RX_FS_WIDTH_WORD, : u- d) n' Y. _# q! n, R, r$ b8 X
MCASP_RX_FS_EXT_BEGIN_ON_FALL_EDGE);, {$ Z- ]  S8 [/ @2 d
McASPTxFrameSyncCfg(SOC_MCASP_0_CTRL_REGS, 2, MCASP_TX_FS_WIDTH_WORD, 6 a* R1 w6 o' V/ S8 c8 I
MCASP_TX_FS_INT_BEGIN_ON_RIS_EDGE);
/* configure the clock for receiver */4 N8 Q2 R( z( R
McASPRxClkCfg(SOC_MCASP_0_CTRL_REGS, MCASP_RX_CLK_EXTERNAL, 0, 0);
8 l$ i6 }  C" cMcASPRxClkPolaritySet(SOC_MCASP_0_CTRL_REGS, MCASP_RX_CLK_POL_RIS_EDGE);   d4 y" z2 g/ m, e  O
McASPRxClkCheckConfig(SOC_MCASP_0_CTRL_REGS, MCASP_RX_CLKCHCK_DIV32,
* }+ s, ?+ F2 r" s. }0x00, 0xFF);
/* configure the clock for transmitter */
/ |) u9 U6 t( q/ B* l2 @McASPTxClkCfg(SOC_MCASP_0_CTRL_REGS, MCASP_TX_CLK_INTERNAL, 11, 1);
2 f6 ], ?9 J5 e  D, JMcASPTxClkPolaritySet(SOC_MCASP_0_CTRL_REGS, MCASP_TX_CLK_POL_FALL_EDGE);
* p( @/ ?0 S4 h% i! K( N( X! w  sMcASPTxClkCheckConfig(SOC_MCASP_0_CTRL_REGS, MCASP_TX_CLKCHCK_DIV32,/ S7 C4 h6 i% }" G
0x00, 0xFF);
. ~8 Y+ F5 g$ m1 P0 Y+ |' y* B. C1 K6 @. H* O' m: X5 [$ t
/* Enable synchronization of RX and TX sections */ 1 {. ~+ Q  S& N
McASPTxRxClkSyncEnable(SOC_MCASP_0_CTRL_REGS);
/* Enable the transmitter/receiver slots. I2S uses 2 slots */1 E" c3 q5 S& ]' X9 ?+ h' b9 i1 V
McASPRxTimeSlotSet(SOC_MCASP_0_CTRL_REGS, I2S_SLOTS);3 ~7 k: `+ U1 s( C" t, x
McASPTxTimeSlotSet(SOC_MCASP_0_CTRL_REGS, I2S_SLOTS);
/*' C) C# D9 _( j0 ~6 |1 g
** Set the serializers, Currently only one serializer is set as
2 H* M& n: l; i3 S- s9 q. N# }** transmitter and one serializer as receiver.
1 G( ^3 O  |: K0 `*/
, ?3 f8 n) X2 _% j( |4 ~3 A% V/ yMcASPSerializerRxSet(SOC_MCASP_0_CTRL_REGS, MCASP_XSER_RX);
( V+ ~8 ]$ d& A% t+ ~McASPSerializerTxSet(SOC_MCASP_0_CTRL_REGS, MCASP_XSER_TX);
/*; o9 e' W: U7 V" P7 _
** Configure the McASP pins
7 e5 q- A' d3 B: O/ Y/ W** Input - Frame Sync, Clock and Serializer Rx
; j2 U5 y, k. b, X( o** Output - Serializer Tx is connected to the input of the codec 6 I; ^, c: p5 e! [( h5 ~% W; i
*/
) F7 k0 s4 s& V7 o) x) D8 iMcASPPinMcASPSet(SOC_MCASP_0_CTRL_REGS, 0xFFFFFFFF);# L6 s& l" }4 Y& k- ?$ H/ x7 T/ p
McASPPinDirOutputSet(SOC_MCASP_0_CTRL_REGS,MCASP_PIN_AXR(MCASP_XSER_TX));
, A  \; A! v/ X' k! X5 zMcASPPinDirInputSet(SOC_MCASP_0_CTRL_REGS, MCASP_PIN_AFSX! q0 m3 N* T1 d1 J1 A- g/ Z
| MCASP_PIN_ACLKX
9 Y& F# \% Q3 O- |% K& k6 a| MCASP_PIN_AHCLKX
( I$ S6 s, K2 C: x| MCASP_PIN_AXR(MCASP_XSER_RX));
/* Enable error interrupts for McASP */
( G: H/ C2 `' W$ f9 K, B8 p3 Z/ o7 YMcASPTxIntEnable(SOC_MCASP_0_CTRL_REGS, MCASP_TX_DMAERROR
# C4 l/ w* G5 p. [1 y, J| MCASP_TX_CLKFAIL
1 J; q. }  V) f8 A# V| MCASP_TX_SYNCERROR
# f8 n% L3 v% y% X0 L& q| MCASP_TX_UNDERRUN);
McASPRxIntEnable(SOC_MCASP_0_CTRL_REGS, MCASP_RX_DMAERROR
$ T% p0 B5 Q4 S$ [| MCASP_RX_CLKFAIL, }" h7 o: z( {. B
| MCASP_RX_SYNCERROR
# E! U! o" k7 L% X, |8 j0 t| MCASP_RX_OVERRUN);
  G- z: h& n0 O) d) T}
static void I2SDataTxRxActivate(void)3 b+ @7 u; Y* p8 v$ y! S$ ]" a
{, O: Y, _* J% Z! U' e/ _$ ^
/* Start the clocks */
$ ~( o! i3 q  a* |( cMcASPRxClkStart(SOC_MCASP_0_CTRL_REGS, MCASP_RX_CLK_EXTERNAL);' u" S  n4 m+ W' ^0 V  I2 q) y
McASPTxClkStart(SOC_MCASP_0_CTRL_REGS, MCASP_TX_CLK_INTERNAL);
/* Enable EDMA for the transfer */
; D4 n& t8 ]; w: L4 W" D8 `0 \; o8 x3 xEDMA3EnableTransfer(SOC_EDMA30CC_0_REGS, EDMA3_CHA_MCASP0_RX,- V/ ^! L! W5 T! ~( J3 i+ V
EDMA3_TRIG_MODE_EVENT);5 {' V6 _2 a3 {
EDMA3EnableTransfer(SOC_EDMA30CC_0_REGS, " Q) O# c& {% w5 p5 t! y  {
EDMA3_CHA_MCASP0_TX, EDMA3_TRIG_MODE_EVENT);
/* Activate the serializers */: r/ [' D+ k: ]9 R# x2 [
McASPRxSerActivate(SOC_MCASP_0_CTRL_REGS);
: r: C- j; ]; G& dMcASPTxSerActivate(SOC_MCASP_0_CTRL_REGS);
/* make sure that the XDATA bit is cleared to zero */0 d. T4 I" f( M, G6 k/ r
while(McASPTxStatusGet(SOC_MCASP_0_CTRL_REGS) & MCASP_TX_STAT_DATAREADY);
/* Activate the state machines */* W' k$ {+ ^& F" v! q
McASPRxEnable(SOC_MCASP_0_CTRL_REGS);! v) ?3 T% {' G: ]
McASPTxEnable(SOC_MCASP_0_CTRL_REGS);5 c% \0 V$ ?( m( @
}
( W# J  c( i/ O8 v7 G/ [* J" L) C( {9 B
请问:问题出在哪了,时钟按照这样配是否有错。
另外我看XDATA一直是0,接收的rxbuf0,1,2里有一般全是FFFF一半全是0.

! y) j& A5 {+ R7 M




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