嵌入式开发者社区

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

作者: wapdasta    时间: 2018-11-7 13:28
标题: MCASP自环配置。
我项目上用OMAPL138的板子MCASP的引脚都是链接的FPGA,所以在FPGA这端设置的MCASP自环。把axr0接收到的通过axr1发回去。
部分代码如下
input mcasp_afsx,
  b, l5 i0 `/ K) [0 n+ u. uinput mcasp_ahclkx,- ?; F3 N7 L* U" Y& H; o
input mcasp_aclkx,) }5 p5 f# w: ^2 n
input axr0,
+ [9 \. K& K) S
# @. T3 j6 [3 t5 |7 Poutput mcasp_afsr,
+ O& E! s+ x/ Y0 ~9 Routput mcasp_ahclkr,( C5 `! J% [# L" ^: C
output mcasp_aclkr,5 _7 ~7 e* @( D8 ]0 K$ W" ?! e; I
output axr1,
0 }7 d1 @( {$ Y2 p
assign mcasp_afsr = mcasp_afsx;
  p- ~) Y: @) v% A6 X8 k& s0 _assign mcasp_aclkr = mcasp_aclkx;
- P5 I  W: d5 e/ v/ ?3 zassign mcasp_ahclkr = mcasp_ahclkx;5 I* J) S$ J: r; J
assign axr1 = axr0;

# O" e: i. C% ?3 L6 l# P
/ B  z9 U& Y: i6 U2 Z. K
在OMAPL138这端,通过axr0接口发固定的数,axr1接收。
在配置MACASP的时候,发送全部取内部时钟,接收全部取外部时钟。
一直循环发送,但是接收不到。在FPGA端也没有看到时钟和信号的波形。
部分代码如下,关于edma3的部分未做变化。
9 A) W+ I& }1 F* d: Q$ L  |
static void McASPI2SConfigure(void)& n* s+ A0 [5 F& `0 U/ @) G
{2 C2 h0 S9 p7 I7 l" I
McASPRxReset(SOC_MCASP_0_CTRL_REGS);
4 {) u  Q  k5 `% n$ j' nMcASPTxReset(SOC_MCASP_0_CTRL_REGS);
/* Enable the FIFOs for DMA transfer */) L) }( o- e  S  n9 q
McASPReadFifoEnable(SOC_MCASP_0_FIFO_REGS, 1, 1);5 G) k5 I6 I6 D" J2 u" r* K% l  G3 o9 h
McASPWriteFifoEnable(SOC_MCASP_0_FIFO_REGS, 1, 1);
/* Set I2S format in the transmitter/receiver format units */
9 @9 G- l, M7 d- d1 b/ u+ p: dMcASPRxFmtI2SSet(SOC_MCASP_0_CTRL_REGS, WORD_SIZE, SLOT_SIZE,3 b: V; f8 [$ k# V$ `
MCASP_RX_MODE_DMA);
# q' w6 }& N+ }/ TMcASPTxFmtI2SSet(SOC_MCASP_0_CTRL_REGS, WORD_SIZE, SLOT_SIZE,
( c. n/ R1 c0 G0 f+ c! d* G: v5 y: wMCASP_TX_MODE_DMA);
/* Configure the frame sync. I2S shall work in TDM format with 2 slots */
0 h( A0 g8 P; t, cMcASPRxFrameSyncCfg(SOC_MCASP_0_CTRL_REGS, 2, MCASP_RX_FS_WIDTH_WORD,
( \4 l6 ~/ w& h2 a" \) qMCASP_RX_FS_EXT_BEGIN_ON_FALL_EDGE);
: W5 n  L, ^! j: r1 fMcASPTxFrameSyncCfg(SOC_MCASP_0_CTRL_REGS, 2, MCASP_TX_FS_WIDTH_WORD,
# G" x/ N) Q' D& F3 MMCASP_TX_FS_INT_BEGIN_ON_RIS_EDGE);
/* configure the clock for receiver */5 {3 Z- r( p9 n/ D+ U0 }( h
McASPRxClkCfg(SOC_MCASP_0_CTRL_REGS, MCASP_RX_CLK_EXTERNAL, 0, 0);3 f9 y; S# A1 {5 E5 H: h  z9 w
McASPRxClkPolaritySet(SOC_MCASP_0_CTRL_REGS, MCASP_RX_CLK_POL_RIS_EDGE); - m6 F; P/ y  {/ ?. C# d
McASPRxClkCheckConfig(SOC_MCASP_0_CTRL_REGS, MCASP_RX_CLKCHCK_DIV32,
7 z: n. ?( O# N0 v7 o0x00, 0xFF);
/* configure the clock for transmitter */
# o6 `  u4 A0 J8 N* }McASPTxClkCfg(SOC_MCASP_0_CTRL_REGS, MCASP_TX_CLK_INTERNAL, 11, 1);: \, C0 i8 O5 A, G
McASPTxClkPolaritySet(SOC_MCASP_0_CTRL_REGS, MCASP_TX_CLK_POL_FALL_EDGE); 2 j, q7 A' N( T, N2 R7 y
McASPTxClkCheckConfig(SOC_MCASP_0_CTRL_REGS, MCASP_TX_CLKCHCK_DIV32,  x  e% O' F( C7 s! |: p* W5 I
0x00, 0xFF);
# @0 d0 e& D7 v# i& T8 C1 ]9 R" ^5 x+ N8 ]0 O' A* X
/* Enable synchronization of RX and TX sections */
9 W7 H. O8 p% R' c3 Z- [4 K3 E$ i: fMcASPTxRxClkSyncEnable(SOC_MCASP_0_CTRL_REGS);
/* Enable the transmitter/receiver slots. I2S uses 2 slots */6 K- I8 n- U+ P7 h1 t
McASPRxTimeSlotSet(SOC_MCASP_0_CTRL_REGS, I2S_SLOTS);" m; P* \$ g0 h! M4 E1 g
McASPTxTimeSlotSet(SOC_MCASP_0_CTRL_REGS, I2S_SLOTS);
/*. ~; [) d* s3 P& s( ?+ h- `  t9 w( h
** Set the serializers, Currently only one serializer is set as( r) p+ D7 K  C. I3 @
** transmitter and one serializer as receiver.+ c7 S% X, }0 u0 J3 c
*/
& I0 A" R+ W  F9 z1 T! \* o1 xMcASPSerializerRxSet(SOC_MCASP_0_CTRL_REGS, MCASP_XSER_RX);" V5 x; Q5 {9 y5 Y7 B/ T
McASPSerializerTxSet(SOC_MCASP_0_CTRL_REGS, MCASP_XSER_TX);
/*/ Q; P- o$ |1 }
** Configure the McASP pins
& I7 \4 u! U  \7 v: v. D" ~** Input - Frame Sync, Clock and Serializer Rx
; \4 l  c0 ?) V/ g+ J1 s% {5 j/ a** Output - Serializer Tx is connected to the input of the codec : }4 T) u: w8 b5 t+ ]# p' Z0 ?7 K' r
*/
/ u4 {+ G! W1 PMcASPPinMcASPSet(SOC_MCASP_0_CTRL_REGS, 0xFFFFFFFF);9 y7 ]) P0 e8 i
McASPPinDirOutputSet(SOC_MCASP_0_CTRL_REGS,MCASP_PIN_AXR(MCASP_XSER_TX));8 U5 o$ A' [  F4 z
McASPPinDirInputSet(SOC_MCASP_0_CTRL_REGS, MCASP_PIN_AFSX" W8 q1 R* u6 A3 z, t
| MCASP_PIN_ACLKX
6 |7 [8 I, ]+ S' c# V| MCASP_PIN_AHCLKX% X4 @1 l% _  r, o! R
| MCASP_PIN_AXR(MCASP_XSER_RX));
/* Enable error interrupts for McASP */
! d3 d0 y+ d- S: i1 Q/ A  p+ SMcASPTxIntEnable(SOC_MCASP_0_CTRL_REGS, MCASP_TX_DMAERROR - b' A9 e+ X, j
| MCASP_TX_CLKFAIL / n0 I! p% I9 E8 o
| MCASP_TX_SYNCERROR
7 C5 J, R' Z/ t( P/ v| MCASP_TX_UNDERRUN);
McASPRxIntEnable(SOC_MCASP_0_CTRL_REGS, MCASP_RX_DMAERROR
2 }0 j, ]& E7 W8 J1 Y+ E| MCASP_RX_CLKFAIL
, [% H& E- I2 ?: G* E| MCASP_RX_SYNCERROR
0 Z6 C4 x# u* V9 \1 i| MCASP_RX_OVERRUN);$ q2 O3 ~; m/ d# V9 y
}
static void I2SDataTxRxActivate(void)/ ]9 t) v* m" b2 m9 F
{
9 s; s3 k* s- K5 {3 c4 [/* Start the clocks */
- a" U) i! l' R1 F, y; J" hMcASPRxClkStart(SOC_MCASP_0_CTRL_REGS, MCASP_RX_CLK_EXTERNAL);; Y( ]' y3 k5 n
McASPTxClkStart(SOC_MCASP_0_CTRL_REGS, MCASP_TX_CLK_INTERNAL);
/* Enable EDMA for the transfer */
5 E+ `1 {6 ~# S' ^' K; ?$ xEDMA3EnableTransfer(SOC_EDMA30CC_0_REGS, EDMA3_CHA_MCASP0_RX,
! k+ s' P7 g) H: D% A" L4 B6 MEDMA3_TRIG_MODE_EVENT);
; U6 V( G, C8 i- p- O% r3 \EDMA3EnableTransfer(SOC_EDMA30CC_0_REGS, 7 R" K2 w) T/ z# K  K$ \3 H
EDMA3_CHA_MCASP0_TX, EDMA3_TRIG_MODE_EVENT);
/* Activate the serializers */; _# J4 ~; b8 c- B" N) Z% A
McASPRxSerActivate(SOC_MCASP_0_CTRL_REGS);. S1 n1 N  G0 I$ q
McASPTxSerActivate(SOC_MCASP_0_CTRL_REGS);
/* make sure that the XDATA bit is cleared to zero */) C5 I! B* Y) D$ Y
while(McASPTxStatusGet(SOC_MCASP_0_CTRL_REGS) & MCASP_TX_STAT_DATAREADY);
/* Activate the state machines */
9 `- G* m7 [% ^7 G# _/ VMcASPRxEnable(SOC_MCASP_0_CTRL_REGS);
# A/ J: l! w+ {  q: Y( I  aMcASPTxEnable(SOC_MCASP_0_CTRL_REGS);/ }1 ]! v8 C2 H& h% O# b6 B
}

7 G# s" A" \) t3 F# F8 P# {' X
请问:问题出在哪了,时钟按照这样配是否有错。
另外我看XDATA一直是0,接收的rxbuf0,1,2里有一般全是FFFF一半全是0.
" h% v5 ^( U5 O7 d) w0 s& z: I





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