嵌入式开发者社区

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

作者: wapdasta    时间: 2018-11-7 13:28
标题: MCASP自环配置。
我项目上用OMAPL138的板子MCASP的引脚都是链接的FPGA,所以在FPGA这端设置的MCASP自环。把axr0接收到的通过axr1发回去。
部分代码如下
input mcasp_afsx,6 Y" N! k) K" X5 m/ V
input mcasp_ahclkx,
! A) `/ L$ T* Dinput mcasp_aclkx,. C6 b0 C( @9 R  x
input axr0,  q+ f  ]0 x! K9 b0 p) ?$ E5 A; X

* Y. V( k1 H0 e  ~8 E2 Goutput mcasp_afsr,
" J6 f- j* U. t% _: coutput mcasp_ahclkr,2 ~' ?- Y/ X8 P" z  s4 p; l7 ?) C
output mcasp_aclkr,9 J# o3 [+ ]5 m& O6 R
output axr1,# V" D" L/ [' {5 \' I1 A
assign mcasp_afsr = mcasp_afsx;; i: w! x/ W. @% K9 S
assign mcasp_aclkr = mcasp_aclkx;
, v( T: ~/ n) O- l- W! \% \' {5 massign mcasp_ahclkr = mcasp_ahclkx;# L" i0 N- q1 B4 g$ j
assign axr1 = axr0;
$ K. N: g1 b( F- u1 B# c* r) g
+ @. ?  y' ^+ y$ F7 T1 M
在OMAPL138这端,通过axr0接口发固定的数,axr1接收。
在配置MACASP的时候,发送全部取内部时钟,接收全部取外部时钟。
一直循环发送,但是接收不到。在FPGA端也没有看到时钟和信号的波形。
部分代码如下,关于edma3的部分未做变化。
% k% [. ^5 }  T
static void McASPI2SConfigure(void)
" h+ f, b7 c' ~, k) A! I9 n{  G7 b6 s$ H2 l. W# l1 @
McASPRxReset(SOC_MCASP_0_CTRL_REGS);
0 Q1 k' Y1 ^( s: a- a/ H5 x% A3 d0 rMcASPTxReset(SOC_MCASP_0_CTRL_REGS);
/* Enable the FIFOs for DMA transfer */
  J6 ]5 {% P# Z4 C7 j6 C3 Y, L/ [+ KMcASPReadFifoEnable(SOC_MCASP_0_FIFO_REGS, 1, 1);2 a: N  a7 i; f
McASPWriteFifoEnable(SOC_MCASP_0_FIFO_REGS, 1, 1);
/* Set I2S format in the transmitter/receiver format units */
6 x$ P& _0 E; p5 [McASPRxFmtI2SSet(SOC_MCASP_0_CTRL_REGS, WORD_SIZE, SLOT_SIZE,
  _8 J% t4 [3 C, A/ a9 k4 ]& yMCASP_RX_MODE_DMA);& H: a; i1 ]  y
McASPTxFmtI2SSet(SOC_MCASP_0_CTRL_REGS, WORD_SIZE, SLOT_SIZE,6 |: I: z) _5 `# }' t
MCASP_TX_MODE_DMA);
/* Configure the frame sync. I2S shall work in TDM format with 2 slots */
2 t2 i+ @, L+ P  d0 T; m) @McASPRxFrameSyncCfg(SOC_MCASP_0_CTRL_REGS, 2, MCASP_RX_FS_WIDTH_WORD,
' V; E4 `/ [, C7 H. v' l/ pMCASP_RX_FS_EXT_BEGIN_ON_FALL_EDGE);, {/ @4 U& M5 M
McASPTxFrameSyncCfg(SOC_MCASP_0_CTRL_REGS, 2, MCASP_TX_FS_WIDTH_WORD,
. q3 C) [2 ^# d1 TMCASP_TX_FS_INT_BEGIN_ON_RIS_EDGE);
/* configure the clock for receiver */
6 x4 Z7 O8 Y1 t# w4 Q4 c, YMcASPRxClkCfg(SOC_MCASP_0_CTRL_REGS, MCASP_RX_CLK_EXTERNAL, 0, 0);' ?" X* k& P  m7 f3 j. f" ?4 a
McASPRxClkPolaritySet(SOC_MCASP_0_CTRL_REGS, MCASP_RX_CLK_POL_RIS_EDGE); % a. _7 M1 L0 e! F( s
McASPRxClkCheckConfig(SOC_MCASP_0_CTRL_REGS, MCASP_RX_CLKCHCK_DIV32,1 Y3 Z5 c7 E6 P+ I' n" P
0x00, 0xFF);
/* configure the clock for transmitter */
- @4 r: I" T- m8 `; `/ O( iMcASPTxClkCfg(SOC_MCASP_0_CTRL_REGS, MCASP_TX_CLK_INTERNAL, 11, 1);
( X; G! f' G4 SMcASPTxClkPolaritySet(SOC_MCASP_0_CTRL_REGS, MCASP_TX_CLK_POL_FALL_EDGE);
: f6 R. u9 U+ m/ o5 gMcASPTxClkCheckConfig(SOC_MCASP_0_CTRL_REGS, MCASP_TX_CLKCHCK_DIV32,9 Z" H/ N7 b+ @2 P1 u! |- b+ A3 Y
0x00, 0xFF);
5 G% @. @4 m) u5 U
0 \* g* |: u$ X+ [/* Enable synchronization of RX and TX sections */ % B' c/ n2 [# m3 T- ?- R+ L
McASPTxRxClkSyncEnable(SOC_MCASP_0_CTRL_REGS);
/* Enable the transmitter/receiver slots. I2S uses 2 slots */
& d, k: P7 E4 g/ U2 M  DMcASPRxTimeSlotSet(SOC_MCASP_0_CTRL_REGS, I2S_SLOTS);: Q+ d5 W' k) t1 y+ {5 [# f
McASPTxTimeSlotSet(SOC_MCASP_0_CTRL_REGS, I2S_SLOTS);
/*
) z$ ^: a6 ^, {7 @  ~* T** Set the serializers, Currently only one serializer is set as8 L- ~) e/ S4 E. J
** transmitter and one serializer as receiver.
0 K, a! R( D( K/ x! J$ C7 F8 t* G*/
3 O, h8 `7 R6 k1 Q- M" n" FMcASPSerializerRxSet(SOC_MCASP_0_CTRL_REGS, MCASP_XSER_RX);
- y! W, i' \% Z. j4 OMcASPSerializerTxSet(SOC_MCASP_0_CTRL_REGS, MCASP_XSER_TX);
/*
6 M0 t5 f0 c7 F- L** Configure the McASP pins
- H5 U. i% j- Z( Y4 M6 q1 z0 |** Input - Frame Sync, Clock and Serializer Rx
  B6 X8 ^5 f) B# V( a, ]* v# k, C3 _** Output - Serializer Tx is connected to the input of the codec
) ^, Z+ M, g0 i0 v$ @8 ^*/' @; @+ Z( I# I- d
McASPPinMcASPSet(SOC_MCASP_0_CTRL_REGS, 0xFFFFFFFF);
9 W2 Q: F# T3 e3 |$ j$ f' aMcASPPinDirOutputSet(SOC_MCASP_0_CTRL_REGS,MCASP_PIN_AXR(MCASP_XSER_TX));
4 `6 Q7 ^% S3 ]: M( aMcASPPinDirInputSet(SOC_MCASP_0_CTRL_REGS, MCASP_PIN_AFSX
6 {( M& |9 x: k2 X+ q" L* D| MCASP_PIN_ACLKX; i7 g$ ^6 {& o0 _6 T
| MCASP_PIN_AHCLKX
7 M7 N% \, b' a: I9 l| MCASP_PIN_AXR(MCASP_XSER_RX));
/* Enable error interrupts for McASP *// Z  \/ S0 _6 Q. D  T. B. f& @# m
McASPTxIntEnable(SOC_MCASP_0_CTRL_REGS, MCASP_TX_DMAERROR ! m' Y( i7 w: D& ?3 d
| MCASP_TX_CLKFAIL 2 t+ e  N; W6 o
| MCASP_TX_SYNCERROR; G: H. h  ?+ K* f, o% t: ~; |' c
| MCASP_TX_UNDERRUN);
McASPRxIntEnable(SOC_MCASP_0_CTRL_REGS, MCASP_RX_DMAERROR
8 u, K" i) f! V| MCASP_RX_CLKFAIL$ g) q" X% \. l0 f# A2 H
| MCASP_RX_SYNCERROR 6 V3 `+ u( P4 n$ \2 w. \0 _( G2 D
| MCASP_RX_OVERRUN);
( l) z) P! g8 t}
static void I2SDataTxRxActivate(void)# U( }1 K' E  B/ G! f
{" d  z! K$ R' ~: k9 a
/* Start the clocks */6 L( k3 i5 ~  Z
McASPRxClkStart(SOC_MCASP_0_CTRL_REGS, MCASP_RX_CLK_EXTERNAL);
" s' U8 x+ }* [- _1 o  j' }McASPTxClkStart(SOC_MCASP_0_CTRL_REGS, MCASP_TX_CLK_INTERNAL);
/* Enable EDMA for the transfer */
$ ~9 q) W& O$ t" a+ z( |EDMA3EnableTransfer(SOC_EDMA30CC_0_REGS, EDMA3_CHA_MCASP0_RX,* q& a, _9 X& j& W+ ^) o
EDMA3_TRIG_MODE_EVENT);
% q# ]9 \6 J9 p8 Z' N* ?+ OEDMA3EnableTransfer(SOC_EDMA30CC_0_REGS, ! I* Z  {6 ^: q9 x4 j4 M
EDMA3_CHA_MCASP0_TX, EDMA3_TRIG_MODE_EVENT);
/* Activate the serializers */
4 @# I9 a( N# J1 f6 XMcASPRxSerActivate(SOC_MCASP_0_CTRL_REGS);2 D9 a  c: ^- D; k/ v5 H2 \5 _( D
McASPTxSerActivate(SOC_MCASP_0_CTRL_REGS);
/* make sure that the XDATA bit is cleared to zero */( }0 O3 N9 @: g, ~
while(McASPTxStatusGet(SOC_MCASP_0_CTRL_REGS) & MCASP_TX_STAT_DATAREADY);
/* Activate the state machines */
. Z  G# C& m; K% g' H/ c; {1 KMcASPRxEnable(SOC_MCASP_0_CTRL_REGS);
, s5 m$ O) A4 f5 k8 O( g# Q9 ZMcASPTxEnable(SOC_MCASP_0_CTRL_REGS);0 C) ^2 a7 q4 e7 o% _* Z6 ~
}
  u* H% H3 ~- Y$ G0 z  N
请问:问题出在哪了,时钟按照这样配是否有错。
另外我看XDATA一直是0,接收的rxbuf0,1,2里有一般全是FFFF一半全是0.

9 w4 b8 t& f( ~9 ]8 Y7 P# G




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