嵌入式开发者社区

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

作者: wapdasta    时间: 2018-11-7 13:28
标题: MCASP自环配置。
我项目上用OMAPL138的板子MCASP的引脚都是链接的FPGA,所以在FPGA这端设置的MCASP自环。把axr0接收到的通过axr1发回去。
部分代码如下
input mcasp_afsx,
2 J' H( P+ B9 E6 C3 G. e. I& Winput mcasp_ahclkx,
; ~0 J& @2 v# @: t, cinput mcasp_aclkx,6 f  |/ P# M3 H1 R- K
input axr0,
/ d3 I1 U7 B& o  Q% t1 u$ J; ~! X% r* B! c' Z3 U; @3 F
output mcasp_afsr,* _$ Q; V& g% c
output mcasp_ahclkr,
2 R, C( h3 Q6 c. Youtput mcasp_aclkr,5 @3 w: z4 j2 o- ^+ Y7 h
output axr1,
! L  Y/ b/ `4 C8 V# ^* p
assign mcasp_afsr = mcasp_afsx;, N3 V. @, @% v. H% T7 b
assign mcasp_aclkr = mcasp_aclkx;
; s# D) e: p6 Massign mcasp_ahclkr = mcasp_ahclkx;
/ ^/ n. y, x. H7 T, H) U$ m) u* Gassign axr1 = axr0;

% h3 X- B$ ~( z3 @  V
, H0 i. u- s8 H8 B) y9 z
在OMAPL138这端,通过axr0接口发固定的数,axr1接收。
在配置MACASP的时候,发送全部取内部时钟,接收全部取外部时钟。
一直循环发送,但是接收不到。在FPGA端也没有看到时钟和信号的波形。
部分代码如下,关于edma3的部分未做变化。
3 B1 L* h5 A3 p% ~0 L
static void McASPI2SConfigure(void)
  r; D2 d  o, K' f{9 h; H1 {! r# Q8 H
McASPRxReset(SOC_MCASP_0_CTRL_REGS);
+ o; V$ N, n( G% T0 DMcASPTxReset(SOC_MCASP_0_CTRL_REGS);
/* Enable the FIFOs for DMA transfer */
- q' s# R/ K* y5 \# D5 _McASPReadFifoEnable(SOC_MCASP_0_FIFO_REGS, 1, 1);- ?1 u' \" c7 `) W( M" o
McASPWriteFifoEnable(SOC_MCASP_0_FIFO_REGS, 1, 1);
/* Set I2S format in the transmitter/receiver format units */
6 c. X% X' L* A3 s+ jMcASPRxFmtI2SSet(SOC_MCASP_0_CTRL_REGS, WORD_SIZE, SLOT_SIZE,% D6 v7 l1 J) m1 w. F' R
MCASP_RX_MODE_DMA);2 X& c3 [7 k6 L2 Q! \3 h8 B/ y
McASPTxFmtI2SSet(SOC_MCASP_0_CTRL_REGS, WORD_SIZE, SLOT_SIZE,
" C! D! d- d. w9 CMCASP_TX_MODE_DMA);
/* Configure the frame sync. I2S shall work in TDM format with 2 slots */: W2 b) u+ ]1 P( [+ X6 ~
McASPRxFrameSyncCfg(SOC_MCASP_0_CTRL_REGS, 2, MCASP_RX_FS_WIDTH_WORD,
0 ]' K# K2 T! Z- s2 e% E- i+ TMCASP_RX_FS_EXT_BEGIN_ON_FALL_EDGE);
6 j$ }% D/ c7 }- X* i" m& JMcASPTxFrameSyncCfg(SOC_MCASP_0_CTRL_REGS, 2, MCASP_TX_FS_WIDTH_WORD, 7 D0 i: }" t7 @3 [# W
MCASP_TX_FS_INT_BEGIN_ON_RIS_EDGE);
/* configure the clock for receiver */
# y/ |3 l" c. c; @2 T' P5 NMcASPRxClkCfg(SOC_MCASP_0_CTRL_REGS, MCASP_RX_CLK_EXTERNAL, 0, 0);
  E+ ]7 w* m$ K% X' VMcASPRxClkPolaritySet(SOC_MCASP_0_CTRL_REGS, MCASP_RX_CLK_POL_RIS_EDGE); 8 ~8 X; t$ g, M2 \2 c- z
McASPRxClkCheckConfig(SOC_MCASP_0_CTRL_REGS, MCASP_RX_CLKCHCK_DIV32,( V2 [2 }( i% P! P  c
0x00, 0xFF);
/* configure the clock for transmitter */  h0 e' q' o% l: N" ]
McASPTxClkCfg(SOC_MCASP_0_CTRL_REGS, MCASP_TX_CLK_INTERNAL, 11, 1);
" C# u# n- R1 _$ n- tMcASPTxClkPolaritySet(SOC_MCASP_0_CTRL_REGS, MCASP_TX_CLK_POL_FALL_EDGE); 8 e5 O( E( \2 a7 h( U
McASPTxClkCheckConfig(SOC_MCASP_0_CTRL_REGS, MCASP_TX_CLKCHCK_DIV32,! W* p7 F+ R- u6 B" q) J
0x00, 0xFF);
( a2 i3 c/ p2 u" M! B. D7 }. y, K7 V% t" ^+ i- B* }
/* Enable synchronization of RX and TX sections */
8 u6 ^: F1 w% d( [, fMcASPTxRxClkSyncEnable(SOC_MCASP_0_CTRL_REGS);
/* Enable the transmitter/receiver slots. I2S uses 2 slots */
/ Z3 e' Q/ P2 ?3 _  Q$ iMcASPRxTimeSlotSet(SOC_MCASP_0_CTRL_REGS, I2S_SLOTS);
- @" Z: ^3 Z6 O% l! w) k8 LMcASPTxTimeSlotSet(SOC_MCASP_0_CTRL_REGS, I2S_SLOTS);
/*
( ~6 f1 k' ]$ ^+ i3 v& Y$ T** Set the serializers, Currently only one serializer is set as
1 @5 D$ G; M# i1 Q* N( ]** transmitter and one serializer as receiver.  j1 Y. k7 k) I6 s- G" r
*/
& c: W6 o/ g0 ^% u* P  RMcASPSerializerRxSet(SOC_MCASP_0_CTRL_REGS, MCASP_XSER_RX);7 r: {  P+ W3 d" N) O
McASPSerializerTxSet(SOC_MCASP_0_CTRL_REGS, MCASP_XSER_TX);
/*6 l  L; ?+ K9 V; ^! G2 c. p
** Configure the McASP pins + ]+ l' _" ?4 l6 t8 P  Q3 N
** Input - Frame Sync, Clock and Serializer Rx
: }& b% ^1 A6 }1 F- r* [** Output - Serializer Tx is connected to the input of the codec % P( g$ u0 s" q. P# k
*/
. r6 E% c- V! Y% f: I/ u1 ]McASPPinMcASPSet(SOC_MCASP_0_CTRL_REGS, 0xFFFFFFFF);1 r( t, m3 a, ?5 ^( M
McASPPinDirOutputSet(SOC_MCASP_0_CTRL_REGS,MCASP_PIN_AXR(MCASP_XSER_TX));9 o, h6 q$ L; U3 A' L8 y
McASPPinDirInputSet(SOC_MCASP_0_CTRL_REGS, MCASP_PIN_AFSX9 _2 [$ }3 t/ Q' a; y# `& o. ^
| MCASP_PIN_ACLKX1 H( y$ y+ {! ~" h6 w5 d# N
| MCASP_PIN_AHCLKX. v4 z! ?3 x4 a0 C/ `! g
| MCASP_PIN_AXR(MCASP_XSER_RX));
/* Enable error interrupts for McASP */
4 m0 b$ ~/ n( mMcASPTxIntEnable(SOC_MCASP_0_CTRL_REGS, MCASP_TX_DMAERROR 4 i" X  X# G7 t, T' N* Z
| MCASP_TX_CLKFAIL   Y, s5 a$ d% l2 {  P, m) l
| MCASP_TX_SYNCERROR
; ]* V$ U3 }' U) m% u. N2 }| MCASP_TX_UNDERRUN);
McASPRxIntEnable(SOC_MCASP_0_CTRL_REGS, MCASP_RX_DMAERROR ' j+ i1 P' I. }
| MCASP_RX_CLKFAIL+ R  W) y2 z+ ~6 E) R8 G- k  t1 T
| MCASP_RX_SYNCERROR
: q( ]: {% j" D5 d+ `6 H| MCASP_RX_OVERRUN);
2 S, d. G* e  Z% e}
static void I2SDataTxRxActivate(void)
* ]" x+ y2 d  F$ j+ a9 |" [; y7 [{
* [8 `& h1 f9 q5 [1 l, U/* Start the clocks */( I& G1 k# B- p# t1 |
McASPRxClkStart(SOC_MCASP_0_CTRL_REGS, MCASP_RX_CLK_EXTERNAL);6 {1 b. ?" M3 P: _+ O# k# u1 S: Z
McASPTxClkStart(SOC_MCASP_0_CTRL_REGS, MCASP_TX_CLK_INTERNAL);
/* Enable EDMA for the transfer */
2 J, g/ o$ j% C/ D% T/ {! dEDMA3EnableTransfer(SOC_EDMA30CC_0_REGS, EDMA3_CHA_MCASP0_RX,7 f' |3 F, f8 L
EDMA3_TRIG_MODE_EVENT);
: p2 W. H1 k& QEDMA3EnableTransfer(SOC_EDMA30CC_0_REGS, - e. w2 B3 t/ e0 p
EDMA3_CHA_MCASP0_TX, EDMA3_TRIG_MODE_EVENT);
/* Activate the serializers */
1 ^# z; W; V& b; ~: jMcASPRxSerActivate(SOC_MCASP_0_CTRL_REGS);$ l7 P' G$ Z% P( E0 J/ n( Q4 v
McASPTxSerActivate(SOC_MCASP_0_CTRL_REGS);
/* make sure that the XDATA bit is cleared to zero */( a4 O5 g; Q0 E/ A  ~
while(McASPTxStatusGet(SOC_MCASP_0_CTRL_REGS) & MCASP_TX_STAT_DATAREADY);
/* Activate the state machines */
% O6 f3 x( v9 rMcASPRxEnable(SOC_MCASP_0_CTRL_REGS);
6 X# i1 O& H) q: Z( \. ^5 KMcASPTxEnable(SOC_MCASP_0_CTRL_REGS);
6 |0 \% P- }9 g, a}

/ N3 D, ]& [) I2 O
请问:问题出在哪了,时钟按照这样配是否有错。
另外我看XDATA一直是0,接收的rxbuf0,1,2里有一般全是FFFF一半全是0.
" R! g1 P! G& c2 o) V





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