嵌入式开发者社区

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

作者: wapdasta    时间: 2018-11-7 13:28
标题: MCASP自环配置。
我项目上用OMAPL138的板子MCASP的引脚都是链接的FPGA,所以在FPGA这端设置的MCASP自环。把axr0接收到的通过axr1发回去。
部分代码如下
input mcasp_afsx,1 ?( Y- K+ T$ q1 c( d# a( j
input mcasp_ahclkx,
3 O! S4 W7 l# V' o/ L  c8 cinput mcasp_aclkx,
; f+ o* h/ M: x, ^' \5 cinput axr0,4 `2 z  k' E+ Q

4 F" W# D* v: J" L7 V0 N7 Zoutput mcasp_afsr,8 Q$ t) B6 D/ A* ^5 \6 {2 g; u
output mcasp_ahclkr," j9 y+ ~- X; J6 u
output mcasp_aclkr,
* v0 L4 J" n* c/ e" r) L3 k+ coutput axr1,
- G% a! \7 I* q$ h, K* J
assign mcasp_afsr = mcasp_afsx;
1 F( f4 \; w5 f) h8 D. kassign mcasp_aclkr = mcasp_aclkx;0 C  U. N+ P( Y3 h4 v4 \' |; G
assign mcasp_ahclkr = mcasp_ahclkx;
; _$ G5 @0 s9 s. y+ @5 q" cassign axr1 = axr0;
' |; D) g6 m' U! V8 N

0 E* t2 c3 L, Z0 m
在OMAPL138这端,通过axr0接口发固定的数,axr1接收。
在配置MACASP的时候,发送全部取内部时钟,接收全部取外部时钟。
一直循环发送,但是接收不到。在FPGA端也没有看到时钟和信号的波形。
部分代码如下,关于edma3的部分未做变化。
/ q5 X* ]2 j8 Q- E" A
static void McASPI2SConfigure(void)
5 \6 X7 G2 B" [5 N4 B{1 M; u: q" w" i6 E
McASPRxReset(SOC_MCASP_0_CTRL_REGS);
- q# {/ @, Q1 c3 {McASPTxReset(SOC_MCASP_0_CTRL_REGS);
/* Enable the FIFOs for DMA transfer */- k, W% n2 Q5 T, b1 ^+ \
McASPReadFifoEnable(SOC_MCASP_0_FIFO_REGS, 1, 1);
+ Z7 l: \0 W" a) q! ~McASPWriteFifoEnable(SOC_MCASP_0_FIFO_REGS, 1, 1);
/* Set I2S format in the transmitter/receiver format units */, J9 ^7 r* }/ ~' G3 D" b2 \
McASPRxFmtI2SSet(SOC_MCASP_0_CTRL_REGS, WORD_SIZE, SLOT_SIZE,
; e! D2 m, t9 J, c3 ?/ q, `4 Z" c7 QMCASP_RX_MODE_DMA);- K$ x8 Z1 p6 K, Q% Z: j: ?
McASPTxFmtI2SSet(SOC_MCASP_0_CTRL_REGS, WORD_SIZE, SLOT_SIZE,9 N" y6 k8 _0 s
MCASP_TX_MODE_DMA);
/* Configure the frame sync. I2S shall work in TDM format with 2 slots */$ c" n4 S' j0 E. L! ^# T- E
McASPRxFrameSyncCfg(SOC_MCASP_0_CTRL_REGS, 2, MCASP_RX_FS_WIDTH_WORD, : J, y0 T' Y  e; Q# C6 l
MCASP_RX_FS_EXT_BEGIN_ON_FALL_EDGE);
/ Q( F* f. J2 u1 ]3 }8 AMcASPTxFrameSyncCfg(SOC_MCASP_0_CTRL_REGS, 2, MCASP_TX_FS_WIDTH_WORD, ; C  L, r/ Q3 n. ^, A2 i7 o2 a+ V
MCASP_TX_FS_INT_BEGIN_ON_RIS_EDGE);
/* configure the clock for receiver */+ i7 K4 l) L. h' |( @2 @
McASPRxClkCfg(SOC_MCASP_0_CTRL_REGS, MCASP_RX_CLK_EXTERNAL, 0, 0);
) {% B9 v7 [7 l- MMcASPRxClkPolaritySet(SOC_MCASP_0_CTRL_REGS, MCASP_RX_CLK_POL_RIS_EDGE); " L$ Z6 d; [, D, x3 G
McASPRxClkCheckConfig(SOC_MCASP_0_CTRL_REGS, MCASP_RX_CLKCHCK_DIV32,
( @! q' s2 _- W/ L$ s$ J/ }/ l0x00, 0xFF);
/* configure the clock for transmitter */: R* R, d& a- x( A
McASPTxClkCfg(SOC_MCASP_0_CTRL_REGS, MCASP_TX_CLK_INTERNAL, 11, 1);& Q2 N4 ?# o3 V/ z; k8 M% f* R/ v' a
McASPTxClkPolaritySet(SOC_MCASP_0_CTRL_REGS, MCASP_TX_CLK_POL_FALL_EDGE);
: T" Q. ]/ T; o4 n* LMcASPTxClkCheckConfig(SOC_MCASP_0_CTRL_REGS, MCASP_TX_CLKCHCK_DIV32,  k# E; m8 J% ?. b$ X" R
0x00, 0xFF);
* t) q$ k' `. O
* T# S7 r2 G) \+ q/* Enable synchronization of RX and TX sections */ 7 L* w5 q% E& |2 P' J) i; z
McASPTxRxClkSyncEnable(SOC_MCASP_0_CTRL_REGS);
/* Enable the transmitter/receiver slots. I2S uses 2 slots */
  S7 s3 Y/ \. r; d6 tMcASPRxTimeSlotSet(SOC_MCASP_0_CTRL_REGS, I2S_SLOTS);
) k0 o" E$ d4 C6 L5 \McASPTxTimeSlotSet(SOC_MCASP_0_CTRL_REGS, I2S_SLOTS);
/*
, w6 q* n7 R8 f1 o- s** Set the serializers, Currently only one serializer is set as
/ J$ i6 C- C8 O+ @** transmitter and one serializer as receiver.
; h0 Y) J0 s7 @/ s+ H% z*/
; d0 B; S6 w. ?7 T1 D- }McASPSerializerRxSet(SOC_MCASP_0_CTRL_REGS, MCASP_XSER_RX);! R" ~5 `3 r! r& z" }+ q9 n: U
McASPSerializerTxSet(SOC_MCASP_0_CTRL_REGS, MCASP_XSER_TX);
/*
% h, `$ i6 |4 e; i1 h+ O** Configure the McASP pins
/ q" j; F* E; T** Input - Frame Sync, Clock and Serializer Rx
: D% u) G7 Z7 m: x! @9 Y' Y% Q: N** Output - Serializer Tx is connected to the input of the codec
; l+ U# m  b# Q* G*/% \% T" p& F" U& Q5 a% L
McASPPinMcASPSet(SOC_MCASP_0_CTRL_REGS, 0xFFFFFFFF);
! o5 E, ^1 h: S( l3 T! rMcASPPinDirOutputSet(SOC_MCASP_0_CTRL_REGS,MCASP_PIN_AXR(MCASP_XSER_TX));
4 [  N& B  J3 e5 IMcASPPinDirInputSet(SOC_MCASP_0_CTRL_REGS, MCASP_PIN_AFSX
. `3 f$ n- O# t* a| MCASP_PIN_ACLKX9 w% D9 q2 R( n" W8 Y2 D
| MCASP_PIN_AHCLKX& d; I# X* E5 w# n! `3 H" f9 L" \
| MCASP_PIN_AXR(MCASP_XSER_RX));
/* Enable error interrupts for McASP *// ~5 V$ X; n4 Z0 `. {5 S/ Z. y
McASPTxIntEnable(SOC_MCASP_0_CTRL_REGS, MCASP_TX_DMAERROR
2 x6 o9 @+ _% t# F1 b| MCASP_TX_CLKFAIL
, O+ D, x/ e) W+ r3 s| MCASP_TX_SYNCERROR
3 r" J% K% }! u( B4 \| MCASP_TX_UNDERRUN);
McASPRxIntEnable(SOC_MCASP_0_CTRL_REGS, MCASP_RX_DMAERROR
$ l3 R9 T$ p' ]| MCASP_RX_CLKFAIL  N8 q& @0 |# y
| MCASP_RX_SYNCERROR " B' k* E2 @7 H1 n8 f
| MCASP_RX_OVERRUN);
: J1 X+ Q6 K" s! r) T! s}
static void I2SDataTxRxActivate(void)
2 b) l& I8 l% L8 {; U* l{
# {' k* o( ]4 p9 R" q$ b/* Start the clocks */
3 W% J9 N$ b; b! g/ X' Z& r  y0 \McASPRxClkStart(SOC_MCASP_0_CTRL_REGS, MCASP_RX_CLK_EXTERNAL);% ?8 u  f& }+ ^( j& w
McASPTxClkStart(SOC_MCASP_0_CTRL_REGS, MCASP_TX_CLK_INTERNAL);
/* Enable EDMA for the transfer */
0 ~3 _- z" ~+ R# hEDMA3EnableTransfer(SOC_EDMA30CC_0_REGS, EDMA3_CHA_MCASP0_RX,
1 D6 D; i3 W5 {EDMA3_TRIG_MODE_EVENT);+ q3 _( j- u4 U" V( g
EDMA3EnableTransfer(SOC_EDMA30CC_0_REGS,
1 b5 q* r; `1 Y9 ~6 jEDMA3_CHA_MCASP0_TX, EDMA3_TRIG_MODE_EVENT);
/* Activate the serializers */
" X3 v( T1 N0 r! g' |McASPRxSerActivate(SOC_MCASP_0_CTRL_REGS);
, g2 f3 @( ?7 x7 N: G: X; M9 LMcASPTxSerActivate(SOC_MCASP_0_CTRL_REGS);
/* make sure that the XDATA bit is cleared to zero */- a# V* w2 _9 x7 E, p+ C6 Z7 `
while(McASPTxStatusGet(SOC_MCASP_0_CTRL_REGS) & MCASP_TX_STAT_DATAREADY);
/* Activate the state machines */. h% W  h. y' p3 x
McASPRxEnable(SOC_MCASP_0_CTRL_REGS);4 A6 j2 _  y  e8 c
McASPTxEnable(SOC_MCASP_0_CTRL_REGS);0 m) s% u3 z- L5 W) n
}
' b% r( O, w" R4 H) {" p- o
请问:问题出在哪了,时钟按照这样配是否有错。
另外我看XDATA一直是0,接收的rxbuf0,1,2里有一般全是FFFF一半全是0.

' g0 J5 r7 z& k  y




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