嵌入式开发者社区

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

作者: wapdasta    时间: 2018-11-7 13:28
标题: MCASP自环配置。
我项目上用OMAPL138的板子MCASP的引脚都是链接的FPGA,所以在FPGA这端设置的MCASP自环。把axr0接收到的通过axr1发回去。
部分代码如下
input mcasp_afsx,4 A6 a3 }3 t0 r5 J7 a/ _
input mcasp_ahclkx,
8 O: h* G. D! H( n/ f6 @- ]input mcasp_aclkx,5 O# O7 ?% ~6 _0 c: |$ T
input axr0,. U, K% j0 Z0 b

; e& }  e/ h( o5 s7 coutput mcasp_afsr,
* w! q7 ]" W: m( ~output mcasp_ahclkr,
( S, O: u3 }- _1 b7 W; |5 Qoutput mcasp_aclkr,. g% X1 ?5 R1 w' [  o3 `( k
output axr1,3 |4 ?# X+ U+ u9 c  {; u' s
assign mcasp_afsr = mcasp_afsx;& q5 y. X3 J# D# k& }- {
assign mcasp_aclkr = mcasp_aclkx;
1 @2 l" P2 u  t0 G1 xassign mcasp_ahclkr = mcasp_ahclkx;
5 g( a- _3 O- Z$ oassign axr1 = axr0;

3 t5 }. k& n  h$ C- T) }3 d" M# x4 k; V% z8 s% P, s+ X
在OMAPL138这端,通过axr0接口发固定的数,axr1接收。
在配置MACASP的时候,发送全部取内部时钟,接收全部取外部时钟。
一直循环发送,但是接收不到。在FPGA端也没有看到时钟和信号的波形。
部分代码如下,关于edma3的部分未做变化。
- A& _, K8 w* K* X2 @+ ^* d3 [0 y1 h/ h
static void McASPI2SConfigure(void)! j5 ^4 _; y/ n! Y: m8 f4 y
{+ X& q) V) o, U( _* K; Y
McASPRxReset(SOC_MCASP_0_CTRL_REGS);
' b0 V. k, c# L5 ~. CMcASPTxReset(SOC_MCASP_0_CTRL_REGS);
/* Enable the FIFOs for DMA transfer */
# V( n+ Q9 ^. K6 {. o1 Y4 T& [; bMcASPReadFifoEnable(SOC_MCASP_0_FIFO_REGS, 1, 1);
0 q; \! M' P# p6 n' [7 F0 }McASPWriteFifoEnable(SOC_MCASP_0_FIFO_REGS, 1, 1);
/* Set I2S format in the transmitter/receiver format units */+ \7 W! q: Y8 o0 x+ a2 r" H
McASPRxFmtI2SSet(SOC_MCASP_0_CTRL_REGS, WORD_SIZE, SLOT_SIZE,
& w! e+ ?1 c5 O- ^9 z" @! `MCASP_RX_MODE_DMA);4 W. J, T2 ^6 h% ?8 ^7 i* x
McASPTxFmtI2SSet(SOC_MCASP_0_CTRL_REGS, WORD_SIZE, SLOT_SIZE,
8 j. S/ s3 a5 c" I. @/ [6 tMCASP_TX_MODE_DMA);
/* Configure the frame sync. I2S shall work in TDM format with 2 slots */
' b0 b# ?6 z/ W; X, X4 @1 P( v( |McASPRxFrameSyncCfg(SOC_MCASP_0_CTRL_REGS, 2, MCASP_RX_FS_WIDTH_WORD, 0 p% @$ [  t+ O
MCASP_RX_FS_EXT_BEGIN_ON_FALL_EDGE);$ I) c1 k* S: A# Q
McASPTxFrameSyncCfg(SOC_MCASP_0_CTRL_REGS, 2, MCASP_TX_FS_WIDTH_WORD, ! f# G/ ~! o1 X) ]
MCASP_TX_FS_INT_BEGIN_ON_RIS_EDGE);
/* configure the clock for receiver */4 z  U8 u3 R* F' C5 q$ n$ ^6 o
McASPRxClkCfg(SOC_MCASP_0_CTRL_REGS, MCASP_RX_CLK_EXTERNAL, 0, 0);1 J; o1 V% ?; l! O+ W3 Y
McASPRxClkPolaritySet(SOC_MCASP_0_CTRL_REGS, MCASP_RX_CLK_POL_RIS_EDGE);
) R/ [6 k3 Z: L' cMcASPRxClkCheckConfig(SOC_MCASP_0_CTRL_REGS, MCASP_RX_CLKCHCK_DIV32,& r; U  U! D  E1 q+ \, b8 W
0x00, 0xFF);
/* configure the clock for transmitter */
9 ~+ f2 X& J& s8 R  p  UMcASPTxClkCfg(SOC_MCASP_0_CTRL_REGS, MCASP_TX_CLK_INTERNAL, 11, 1);
% f$ K' f0 ?8 z: NMcASPTxClkPolaritySet(SOC_MCASP_0_CTRL_REGS, MCASP_TX_CLK_POL_FALL_EDGE); 4 o0 I! K5 H% u7 g  z' [+ ~4 ~2 r
McASPTxClkCheckConfig(SOC_MCASP_0_CTRL_REGS, MCASP_TX_CLKCHCK_DIV32,
7 k# g1 y6 t8 L: D0x00, 0xFF);
- \; y3 r6 ~! t; s( i( Z7 g8 h6 z, a5 n2 w
/* Enable synchronization of RX and TX sections */ 1 z9 h" C. v9 z4 R
McASPTxRxClkSyncEnable(SOC_MCASP_0_CTRL_REGS);
/* Enable the transmitter/receiver slots. I2S uses 2 slots */# k! J( f% D/ h: Q% d2 N
McASPRxTimeSlotSet(SOC_MCASP_0_CTRL_REGS, I2S_SLOTS);
/ u& Q( m8 e" |, H; Q* {McASPTxTimeSlotSet(SOC_MCASP_0_CTRL_REGS, I2S_SLOTS);
/*
+ i: K' ~1 E- D** Set the serializers, Currently only one serializer is set as
: ~; C" D" N: {) c9 U** transmitter and one serializer as receiver.
0 ?$ x- m1 I; L% G; K' G  W*/! U" ]& Y; v$ H( k( }
McASPSerializerRxSet(SOC_MCASP_0_CTRL_REGS, MCASP_XSER_RX);
) o0 e. E9 k) @McASPSerializerTxSet(SOC_MCASP_0_CTRL_REGS, MCASP_XSER_TX);
/*
/ z9 C: K7 {) Q** Configure the McASP pins ) K4 T" K) D! k' g* {- y" e# D0 E7 M
** Input - Frame Sync, Clock and Serializer Rx- M% X7 y2 b6 z2 z+ _) y
** Output - Serializer Tx is connected to the input of the codec $ ^. N/ a* p3 q6 b
*/
4 \4 j4 N' l, v9 e: e( q: u  B8 VMcASPPinMcASPSet(SOC_MCASP_0_CTRL_REGS, 0xFFFFFFFF);
. v+ ^* l9 P" g: cMcASPPinDirOutputSet(SOC_MCASP_0_CTRL_REGS,MCASP_PIN_AXR(MCASP_XSER_TX));) S) h# y7 H- U1 p
McASPPinDirInputSet(SOC_MCASP_0_CTRL_REGS, MCASP_PIN_AFSX+ Q& }3 j4 v& k4 W  w4 ]  N
| MCASP_PIN_ACLKX
( K) C& M1 X& q# I$ a| MCASP_PIN_AHCLKX
7 ]! s6 ?" o. |6 p. F0 p$ @| MCASP_PIN_AXR(MCASP_XSER_RX));
/* Enable error interrupts for McASP */
( w- x) `) [3 b, I7 dMcASPTxIntEnable(SOC_MCASP_0_CTRL_REGS, MCASP_TX_DMAERROR 0 ^5 }: R. D% h: I
| MCASP_TX_CLKFAIL / m) l; j$ S  b
| MCASP_TX_SYNCERROR
1 F3 d# J( L6 m| MCASP_TX_UNDERRUN);
McASPRxIntEnable(SOC_MCASP_0_CTRL_REGS, MCASP_RX_DMAERROR
8 r# w# J) H2 j1 F9 b| MCASP_RX_CLKFAIL
2 c' D- M( G7 P+ s. S| MCASP_RX_SYNCERROR ) c* y6 _2 z4 a- c4 M+ w
| MCASP_RX_OVERRUN);
- t) i2 ?; I/ n, j( W}
static void I2SDataTxRxActivate(void)+ B, @0 T. o3 d' [: {, z
{
6 Q5 ?! ?5 @! F/* Start the clocks */% A: G, \2 L9 h* m
McASPRxClkStart(SOC_MCASP_0_CTRL_REGS, MCASP_RX_CLK_EXTERNAL);
. l2 I9 u" ~9 A8 G6 d- kMcASPTxClkStart(SOC_MCASP_0_CTRL_REGS, MCASP_TX_CLK_INTERNAL);
/* Enable EDMA for the transfer */
1 a$ H( m6 V7 TEDMA3EnableTransfer(SOC_EDMA30CC_0_REGS, EDMA3_CHA_MCASP0_RX,
! F2 w4 _3 K! L& {: L( h% jEDMA3_TRIG_MODE_EVENT);& q- \0 ~: s: {7 P& C; G; t
EDMA3EnableTransfer(SOC_EDMA30CC_0_REGS,
2 I" K5 ]( R) GEDMA3_CHA_MCASP0_TX, EDMA3_TRIG_MODE_EVENT);
/* Activate the serializers */8 z" [4 q9 q3 z& n! W0 W
McASPRxSerActivate(SOC_MCASP_0_CTRL_REGS);$ ]. g5 L" f0 t7 V) Y5 j% \7 P
McASPTxSerActivate(SOC_MCASP_0_CTRL_REGS);
/* make sure that the XDATA bit is cleared to zero */$ V: D$ s+ v8 \- X$ e
while(McASPTxStatusGet(SOC_MCASP_0_CTRL_REGS) & MCASP_TX_STAT_DATAREADY);
/* Activate the state machines */* L; W3 T) {* G1 p4 h
McASPRxEnable(SOC_MCASP_0_CTRL_REGS);
* o; U( h9 }2 h7 s9 oMcASPTxEnable(SOC_MCASP_0_CTRL_REGS);: E* |& W( D# Z6 h- N
}

! o5 f8 f; Z, F$ o. Y( }) g
请问:问题出在哪了,时钟按照这样配是否有错。
另外我看XDATA一直是0,接收的rxbuf0,1,2里有一般全是FFFF一半全是0.

5 O$ K( l6 J  q! \




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