嵌入式开发者社区

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

作者: wapdasta    时间: 2018-11-7 13:28
标题: MCASP自环配置。
我项目上用OMAPL138的板子MCASP的引脚都是链接的FPGA,所以在FPGA这端设置的MCASP自环。把axr0接收到的通过axr1发回去。
部分代码如下
input mcasp_afsx,
% C2 y& v$ _! Q# S" p: hinput mcasp_ahclkx,
) ?# c$ v5 A+ H3 iinput mcasp_aclkx,* G+ W" w3 O4 F3 l
input axr0,* L3 s5 Z; p+ e. I2 O1 [
9 f; M6 G! [( F# R7 x2 T* b  O2 Y
output mcasp_afsr,- Z9 l* c& S0 S
output mcasp_ahclkr,# I+ I' ~2 z  _0 Q! S& Z
output mcasp_aclkr,. E9 @9 Q& z" i1 B4 x& @$ j' D" i
output axr1,
4 ~8 d7 T* |6 U6 x& I0 h% F
assign mcasp_afsr = mcasp_afsx;& e0 X6 m# q8 K" q5 ?
assign mcasp_aclkr = mcasp_aclkx;9 L' n( Q& t$ c9 P. i5 q- K
assign mcasp_ahclkr = mcasp_ahclkx;
0 P7 [9 k; U5 i/ `assign axr1 = axr0;
# @# O1 ?8 t7 L6 `4 g/ G9 l

. K) z9 f7 W1 P8 }4 Q
在OMAPL138这端,通过axr0接口发固定的数,axr1接收。
在配置MACASP的时候,发送全部取内部时钟,接收全部取外部时钟。
一直循环发送,但是接收不到。在FPGA端也没有看到时钟和信号的波形。
部分代码如下,关于edma3的部分未做变化。
- u" r' ]% w# [5 e6 X5 I: g9 F
static void McASPI2SConfigure(void)7 ^, L* t: v; X/ r' j
{
8 h" ~# w; V) q9 R* x: ^. b- PMcASPRxReset(SOC_MCASP_0_CTRL_REGS);. z& g+ U+ r3 b0 a8 P
McASPTxReset(SOC_MCASP_0_CTRL_REGS);
/* Enable the FIFOs for DMA transfer */
6 y4 k/ P8 s3 @McASPReadFifoEnable(SOC_MCASP_0_FIFO_REGS, 1, 1);, j2 U$ O% m. ?- S1 L# P/ |
McASPWriteFifoEnable(SOC_MCASP_0_FIFO_REGS, 1, 1);
/* Set I2S format in the transmitter/receiver format units */
8 t8 B0 D7 Z' gMcASPRxFmtI2SSet(SOC_MCASP_0_CTRL_REGS, WORD_SIZE, SLOT_SIZE,
5 W+ [  M# z/ I% U5 R6 RMCASP_RX_MODE_DMA);
0 s6 J& R; v9 U2 DMcASPTxFmtI2SSet(SOC_MCASP_0_CTRL_REGS, WORD_SIZE, SLOT_SIZE,: B: U7 _/ O, R
MCASP_TX_MODE_DMA);
/* Configure the frame sync. I2S shall work in TDM format with 2 slots */
$ B9 Q. w* ]& q; v& C* s" i& h( }1 `% @McASPRxFrameSyncCfg(SOC_MCASP_0_CTRL_REGS, 2, MCASP_RX_FS_WIDTH_WORD,
( b2 ^0 f& @1 [& T2 G2 a; qMCASP_RX_FS_EXT_BEGIN_ON_FALL_EDGE);2 s  E+ x. ~/ n: s/ d
McASPTxFrameSyncCfg(SOC_MCASP_0_CTRL_REGS, 2, MCASP_TX_FS_WIDTH_WORD, ) J( y' p6 |3 c2 D8 U& e9 X) P
MCASP_TX_FS_INT_BEGIN_ON_RIS_EDGE);
/* configure the clock for receiver */
0 g+ o/ X& C( [' O5 ?( N" k; D( Z! PMcASPRxClkCfg(SOC_MCASP_0_CTRL_REGS, MCASP_RX_CLK_EXTERNAL, 0, 0);
) [7 M) n( ~5 s6 y( D1 C* aMcASPRxClkPolaritySet(SOC_MCASP_0_CTRL_REGS, MCASP_RX_CLK_POL_RIS_EDGE);
2 X) S3 @" j" l& e" E, KMcASPRxClkCheckConfig(SOC_MCASP_0_CTRL_REGS, MCASP_RX_CLKCHCK_DIV32,& ^) z) R" K* U" @4 q  v
0x00, 0xFF);
/* configure the clock for transmitter */" b4 Q3 }: G6 {/ \
McASPTxClkCfg(SOC_MCASP_0_CTRL_REGS, MCASP_TX_CLK_INTERNAL, 11, 1);
; Q7 h" V( f2 t0 T' @. W& AMcASPTxClkPolaritySet(SOC_MCASP_0_CTRL_REGS, MCASP_TX_CLK_POL_FALL_EDGE);
9 Z/ v( L% e8 V- f+ Y* fMcASPTxClkCheckConfig(SOC_MCASP_0_CTRL_REGS, MCASP_TX_CLKCHCK_DIV32,3 N( ~# x% Q7 S1 |) V0 {% [, r# ^
0x00, 0xFF);
* P: A6 j0 f3 z1 h; g# ]5 L8 Y/ i6 i( X# O, r  o
/* Enable synchronization of RX and TX sections */
$ V, Z* `8 d3 [: _# o* ~  b0 n5 iMcASPTxRxClkSyncEnable(SOC_MCASP_0_CTRL_REGS);
/* Enable the transmitter/receiver slots. I2S uses 2 slots */% A2 U4 E. C$ A, f; [4 N" D" m
McASPRxTimeSlotSet(SOC_MCASP_0_CTRL_REGS, I2S_SLOTS);% D! r1 ]7 ?5 H& N: V
McASPTxTimeSlotSet(SOC_MCASP_0_CTRL_REGS, I2S_SLOTS);
/*
! G. {! q. u# c! [9 n' P** Set the serializers, Currently only one serializer is set as; L! m9 _9 n* O# L$ A" c* H0 }2 y
** transmitter and one serializer as receiver.  w( M/ }+ b0 D  h( r) E! a
*/
. s8 L0 ?2 t' O" C' IMcASPSerializerRxSet(SOC_MCASP_0_CTRL_REGS, MCASP_XSER_RX);
' y5 P. m6 }5 X6 w0 S  IMcASPSerializerTxSet(SOC_MCASP_0_CTRL_REGS, MCASP_XSER_TX);
/*
% k2 A) }; ~' [0 n+ h) T3 D** Configure the McASP pins
. R: ~/ [5 L% i/ k1 g! f** Input - Frame Sync, Clock and Serializer Rx
8 x$ |5 C! z. z9 @2 b) F9 V** Output - Serializer Tx is connected to the input of the codec 3 u% D9 U# h4 _& j
*/- {+ _) E6 [5 A& k# H1 _0 c
McASPPinMcASPSet(SOC_MCASP_0_CTRL_REGS, 0xFFFFFFFF);+ G6 D! L4 w' e/ K
McASPPinDirOutputSet(SOC_MCASP_0_CTRL_REGS,MCASP_PIN_AXR(MCASP_XSER_TX));% R9 f( E- i& ~6 }
McASPPinDirInputSet(SOC_MCASP_0_CTRL_REGS, MCASP_PIN_AFSX/ o: U  d% T9 b: r" N
| MCASP_PIN_ACLKX
8 H3 }0 ~, t4 q  e. G" M' s0 j( t| MCASP_PIN_AHCLKX
8 _9 H( `$ y5 t) @* D- m7 O| MCASP_PIN_AXR(MCASP_XSER_RX));
/* Enable error interrupts for McASP */9 }8 p  H2 I8 B8 U5 q- c" ]- M5 c1 \
McASPTxIntEnable(SOC_MCASP_0_CTRL_REGS, MCASP_TX_DMAERROR
: V3 ^, k  O; w: ]6 Z" R' I| MCASP_TX_CLKFAIL
0 F; m% I, L5 y. {! Y0 v  F; w: A| MCASP_TX_SYNCERROR
" @! k8 A- a, f: d& Q" u| MCASP_TX_UNDERRUN);
McASPRxIntEnable(SOC_MCASP_0_CTRL_REGS, MCASP_RX_DMAERROR
* J5 t# s: T% }| MCASP_RX_CLKFAIL/ M  |+ e2 r$ r. a2 m
| MCASP_RX_SYNCERROR / r9 j7 |2 S+ o# i7 Z) v: i
| MCASP_RX_OVERRUN);
, X+ i5 p9 B# d' Z: A}
static void I2SDataTxRxActivate(void): \' X4 n( F: p2 s& g9 X
{
. h/ L/ \7 Z$ Y& F' R/* Start the clocks */4 C1 `6 T( m" x; k) P9 n5 j
McASPRxClkStart(SOC_MCASP_0_CTRL_REGS, MCASP_RX_CLK_EXTERNAL);; o& t1 c/ Q5 z1 }' X
McASPTxClkStart(SOC_MCASP_0_CTRL_REGS, MCASP_TX_CLK_INTERNAL);
/* Enable EDMA for the transfer */: g8 U- ~' L* C
EDMA3EnableTransfer(SOC_EDMA30CC_0_REGS, EDMA3_CHA_MCASP0_RX,* U* p# E4 F5 D& J  D! x8 |
EDMA3_TRIG_MODE_EVENT);  J1 n  ^4 q, C  k4 W1 {! q
EDMA3EnableTransfer(SOC_EDMA30CC_0_REGS, 5 r9 S  \$ U1 O# z
EDMA3_CHA_MCASP0_TX, EDMA3_TRIG_MODE_EVENT);
/* Activate the serializers */* J+ L4 w. b% \6 b, X3 t2 N
McASPRxSerActivate(SOC_MCASP_0_CTRL_REGS);4 T+ H$ i/ D  M' J2 r; j9 M7 f
McASPTxSerActivate(SOC_MCASP_0_CTRL_REGS);
/* make sure that the XDATA bit is cleared to zero */
, S& i9 M' R( G7 R3 L; I) _' Wwhile(McASPTxStatusGet(SOC_MCASP_0_CTRL_REGS) & MCASP_TX_STAT_DATAREADY);
/* Activate the state machines */6 K8 ]( n8 Z' H: r7 ~! l7 k
McASPRxEnable(SOC_MCASP_0_CTRL_REGS);
# v  ?2 E0 F. y4 L0 ?McASPTxEnable(SOC_MCASP_0_CTRL_REGS);
& Z# h% r, t1 M5 c, p}
2 G8 r2 n& a# y7 i* A$ D
请问:问题出在哪了,时钟按照这样配是否有错。
另外我看XDATA一直是0,接收的rxbuf0,1,2里有一般全是FFFF一半全是0.

$ ]/ }* |. [' ^$ Z8 ?! l




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