嵌入式开发者社区

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

作者: wapdasta    时间: 2018-11-7 13:28
标题: MCASP自环配置。
我项目上用OMAPL138的板子MCASP的引脚都是链接的FPGA,所以在FPGA这端设置的MCASP自环。把axr0接收到的通过axr1发回去。
部分代码如下
input mcasp_afsx,# z+ e9 G! E7 n7 W4 b1 I- \9 u
input mcasp_ahclkx,; @/ J6 S3 J0 b* ?# ~/ H
input mcasp_aclkx,0 x, g5 ~' b1 |; q
input axr0,8 k# S, @$ U7 U

% c# M( B) g. [) |: w+ v) Doutput mcasp_afsr,8 b) z1 ^: f* s. R0 ~6 r
output mcasp_ahclkr,* u# J0 U9 _, n% o. B
output mcasp_aclkr,
3 l3 O8 {# q1 w8 i% V5 Youtput axr1,
' p( Q, M9 t6 h9 t
assign mcasp_afsr = mcasp_afsx;$ i* a* [9 z- d& e
assign mcasp_aclkr = mcasp_aclkx;) T( B9 T6 @  ~$ F3 }% N( @
assign mcasp_ahclkr = mcasp_ahclkx;
0 m+ G+ G' @/ _7 |9 J. D' q/ H3 _assign axr1 = axr0;

0 J2 T/ o; P# n0 w6 S2 K& b; r! d' X8 D- s
在OMAPL138这端,通过axr0接口发固定的数,axr1接收。
在配置MACASP的时候,发送全部取内部时钟,接收全部取外部时钟。
一直循环发送,但是接收不到。在FPGA端也没有看到时钟和信号的波形。
部分代码如下,关于edma3的部分未做变化。
! A, Y2 E% y  k* Y# d
static void McASPI2SConfigure(void)
# n/ D% h, z4 b! M4 x7 |{
& m- Y* ?; ^( }/ ?McASPRxReset(SOC_MCASP_0_CTRL_REGS);+ T. o5 A/ |* u; n' t: B* \2 n
McASPTxReset(SOC_MCASP_0_CTRL_REGS);
/* Enable the FIFOs for DMA transfer */
! u6 A: {1 L! D! G- C/ P0 n) R* wMcASPReadFifoEnable(SOC_MCASP_0_FIFO_REGS, 1, 1);' j! B/ m. n4 `) w, n" W0 e7 T* ?
McASPWriteFifoEnable(SOC_MCASP_0_FIFO_REGS, 1, 1);
/* Set I2S format in the transmitter/receiver format units */
, s' X4 K( B' ?" k' PMcASPRxFmtI2SSet(SOC_MCASP_0_CTRL_REGS, WORD_SIZE, SLOT_SIZE,
5 v1 b% u$ H* a# f4 w* QMCASP_RX_MODE_DMA);) _% r# T( P: r. `( `  v( B, ~
McASPTxFmtI2SSet(SOC_MCASP_0_CTRL_REGS, WORD_SIZE, SLOT_SIZE,, g- s+ {+ y9 @0 f; {: d7 p, R; @
MCASP_TX_MODE_DMA);
/* Configure the frame sync. I2S shall work in TDM format with 2 slots *// s, f4 v: I1 {/ {  p
McASPRxFrameSyncCfg(SOC_MCASP_0_CTRL_REGS, 2, MCASP_RX_FS_WIDTH_WORD, 4 e# d4 @( [( F8 {/ f
MCASP_RX_FS_EXT_BEGIN_ON_FALL_EDGE);& _; }- |$ k& b6 F8 [: F8 F
McASPTxFrameSyncCfg(SOC_MCASP_0_CTRL_REGS, 2, MCASP_TX_FS_WIDTH_WORD,
0 t8 v5 X. K1 S* `, v5 ~MCASP_TX_FS_INT_BEGIN_ON_RIS_EDGE);
/* configure the clock for receiver *// S/ y0 Y* k1 a/ ]( Z) X( }
McASPRxClkCfg(SOC_MCASP_0_CTRL_REGS, MCASP_RX_CLK_EXTERNAL, 0, 0);
% e- ^" m0 L( Z# R) RMcASPRxClkPolaritySet(SOC_MCASP_0_CTRL_REGS, MCASP_RX_CLK_POL_RIS_EDGE);
3 m- j2 E; y) m1 |& B3 g! gMcASPRxClkCheckConfig(SOC_MCASP_0_CTRL_REGS, MCASP_RX_CLKCHCK_DIV32,
- y, e+ Z5 T; `5 l+ d0x00, 0xFF);
/* configure the clock for transmitter */; H* ~1 v0 E3 X9 X/ [
McASPTxClkCfg(SOC_MCASP_0_CTRL_REGS, MCASP_TX_CLK_INTERNAL, 11, 1);5 P/ j+ D; G/ x; m& ~# S
McASPTxClkPolaritySet(SOC_MCASP_0_CTRL_REGS, MCASP_TX_CLK_POL_FALL_EDGE); " L" B. B6 W5 U, R/ y5 }
McASPTxClkCheckConfig(SOC_MCASP_0_CTRL_REGS, MCASP_TX_CLKCHCK_DIV32,
: q% Q2 @9 x) V& N9 j* H0x00, 0xFF);
3 g- l& l3 w# {& Z1 A: d# q* }( S& Y# }9 g3 j
/* Enable synchronization of RX and TX sections */ 3 }* F" |$ ~3 G" q' ~1 x% b: k! m8 T
McASPTxRxClkSyncEnable(SOC_MCASP_0_CTRL_REGS);
/* Enable the transmitter/receiver slots. I2S uses 2 slots */
; z9 k# K0 [7 @+ s$ v$ h0 tMcASPRxTimeSlotSet(SOC_MCASP_0_CTRL_REGS, I2S_SLOTS);" [- k# A" ]- x' r
McASPTxTimeSlotSet(SOC_MCASP_0_CTRL_REGS, I2S_SLOTS);
/*
" i! ^8 j2 L6 a# _$ |** Set the serializers, Currently only one serializer is set as1 k0 e! s1 l4 W
** transmitter and one serializer as receiver.4 N* e% R* U! }" g
*/
" r8 o4 w* V, t- E4 PMcASPSerializerRxSet(SOC_MCASP_0_CTRL_REGS, MCASP_XSER_RX);
6 M& @+ f$ k# C4 TMcASPSerializerTxSet(SOC_MCASP_0_CTRL_REGS, MCASP_XSER_TX);
/*
' f! p; h7 i1 o8 B  N! [** Configure the McASP pins 9 y; [- w% j7 _' O
** Input - Frame Sync, Clock and Serializer Rx
+ r# U7 V: |( V3 q' Z1 p+ V** Output - Serializer Tx is connected to the input of the codec
( H9 H" q  g' E- N1 k. E- I- T) p! E*/
* m- v* [& T9 q: @" O/ `7 Y* nMcASPPinMcASPSet(SOC_MCASP_0_CTRL_REGS, 0xFFFFFFFF);( I1 U+ e  c, a
McASPPinDirOutputSet(SOC_MCASP_0_CTRL_REGS,MCASP_PIN_AXR(MCASP_XSER_TX));% s7 v/ {1 L' s" \: z& ^6 L2 \3 D+ Q& Y
McASPPinDirInputSet(SOC_MCASP_0_CTRL_REGS, MCASP_PIN_AFSX. g6 K$ e! s; ~3 g1 O3 x
| MCASP_PIN_ACLKX; b, h  n5 W/ z. ^, b: A
| MCASP_PIN_AHCLKX8 ?5 O, U' j& k: Z; o
| MCASP_PIN_AXR(MCASP_XSER_RX));
/* Enable error interrupts for McASP */% O0 v) k0 K! [# m9 B6 A
McASPTxIntEnable(SOC_MCASP_0_CTRL_REGS, MCASP_TX_DMAERROR ) M( I% l- e! y
| MCASP_TX_CLKFAIL
: J- q% F$ w& f0 L4 a| MCASP_TX_SYNCERROR
5 G: L/ ]5 Y, k7 m4 b5 o| MCASP_TX_UNDERRUN);
McASPRxIntEnable(SOC_MCASP_0_CTRL_REGS, MCASP_RX_DMAERROR
+ k* p$ x  L0 D0 r/ P+ ^* z| MCASP_RX_CLKFAIL
8 F3 q* `+ B% O, G* e- ~) k, \| MCASP_RX_SYNCERROR : A6 c; n9 J. a: ?1 z( G  B+ E0 I  }* U
| MCASP_RX_OVERRUN);( P8 X0 u+ p5 I. B' w# l: a
}
static void I2SDataTxRxActivate(void)1 \- j  z: s8 Q" m# v$ _+ F# H0 G" i
{9 R$ G+ u5 W0 b* O& q3 ]
/* Start the clocks */7 U; X" |$ ?' p0 T+ ^; {  \6 C8 Q( M- ?
McASPRxClkStart(SOC_MCASP_0_CTRL_REGS, MCASP_RX_CLK_EXTERNAL);
! L/ E0 ^4 @7 L) O8 s6 O6 HMcASPTxClkStart(SOC_MCASP_0_CTRL_REGS, MCASP_TX_CLK_INTERNAL);
/* Enable EDMA for the transfer */
, \$ l0 n5 |" ?- E% o  z; x  l/ wEDMA3EnableTransfer(SOC_EDMA30CC_0_REGS, EDMA3_CHA_MCASP0_RX,
2 R; X' A* L+ d& Q& x2 b0 H& DEDMA3_TRIG_MODE_EVENT);4 \  a% t% {$ ]# h. S% z
EDMA3EnableTransfer(SOC_EDMA30CC_0_REGS,
0 b5 D/ b6 g+ I& ~4 e9 YEDMA3_CHA_MCASP0_TX, EDMA3_TRIG_MODE_EVENT);
/* Activate the serializers */
- T# X( g5 f8 ~$ n) W, sMcASPRxSerActivate(SOC_MCASP_0_CTRL_REGS);8 @$ r! a$ Z7 M- f$ r
McASPTxSerActivate(SOC_MCASP_0_CTRL_REGS);
/* make sure that the XDATA bit is cleared to zero */- m, S( ?6 Z) B3 @
while(McASPTxStatusGet(SOC_MCASP_0_CTRL_REGS) & MCASP_TX_STAT_DATAREADY);
/* Activate the state machines */
$ [1 o* T! R1 G! U  V7 SMcASPRxEnable(SOC_MCASP_0_CTRL_REGS);
3 }1 d* H. D' Z, `McASPTxEnable(SOC_MCASP_0_CTRL_REGS);' B/ ^4 Y, s8 R1 ^" X& _& C# Z; p
}

2 z4 N4 f; p% v
请问:问题出在哪了,时钟按照这样配是否有错。
另外我看XDATA一直是0,接收的rxbuf0,1,2里有一般全是FFFF一半全是0.
" }  X, v) J2 Y/ Z: T0 o





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