嵌入式开发者社区

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

作者: wapdasta    时间: 2018-11-7 13:28
标题: MCASP自环配置。
我项目上用OMAPL138的板子MCASP的引脚都是链接的FPGA,所以在FPGA这端设置的MCASP自环。把axr0接收到的通过axr1发回去。
部分代码如下
input mcasp_afsx,  q6 J1 X6 D# j3 \8 z3 I, e. q
input mcasp_ahclkx,
2 o2 D6 ~# y' n) z" P3 Linput mcasp_aclkx,
3 O7 t: k& w- |- D1 xinput axr0,
; E+ Z) _! G( P, L' p) @* b  v1 W" S! j
output mcasp_afsr,
, w+ y6 p+ k# t( a% Moutput mcasp_ahclkr,
* G4 V/ |, Q2 Q  L+ `! `+ y) Coutput mcasp_aclkr,
4 I; E9 R; M9 T8 |) w, s: L* |output axr1,
" K4 l) S( i& K- C0 S5 ^) O$ z& [3 d9 c
assign mcasp_afsr = mcasp_afsx;5 e% d6 }( S0 f- C3 l$ \& H( c# `
assign mcasp_aclkr = mcasp_aclkx;# I6 ?2 E9 w* a% [+ p; |; \
assign mcasp_ahclkr = mcasp_ahclkx;1 b3 K' G  E1 [9 x2 F" @  z0 k
assign axr1 = axr0;

, J- U0 y2 X- R% M8 f! j+ ~# n- v$ E8 U$ n5 q/ g" g+ r
在OMAPL138这端,通过axr0接口发固定的数,axr1接收。
在配置MACASP的时候,发送全部取内部时钟,接收全部取外部时钟。
一直循环发送,但是接收不到。在FPGA端也没有看到时钟和信号的波形。
部分代码如下,关于edma3的部分未做变化。
6 _2 k! v" A" w; {" K$ M8 s
static void McASPI2SConfigure(void)' [6 Q) H& |' N. B: X1 M8 D, M
{" k: I( {! M& u( \9 X
McASPRxReset(SOC_MCASP_0_CTRL_REGS);
) `3 w7 L; X. Z. J7 x1 U, sMcASPTxReset(SOC_MCASP_0_CTRL_REGS);
/* Enable the FIFOs for DMA transfer */
8 b% A* A4 C" K; }3 a% HMcASPReadFifoEnable(SOC_MCASP_0_FIFO_REGS, 1, 1);1 Z3 @* y9 F  v2 _# J6 ]
McASPWriteFifoEnable(SOC_MCASP_0_FIFO_REGS, 1, 1);
/* Set I2S format in the transmitter/receiver format units */
- h* J& r4 _: y8 M% x5 aMcASPRxFmtI2SSet(SOC_MCASP_0_CTRL_REGS, WORD_SIZE, SLOT_SIZE,! B- E* J  q" ~
MCASP_RX_MODE_DMA);
" s! M6 N3 Y$ E2 I8 ^6 L) f7 \4 ZMcASPTxFmtI2SSet(SOC_MCASP_0_CTRL_REGS, WORD_SIZE, SLOT_SIZE,* W4 d: p: g  c% m
MCASP_TX_MODE_DMA);
/* Configure the frame sync. I2S shall work in TDM format with 2 slots */3 R. g* n! v$ ]/ p
McASPRxFrameSyncCfg(SOC_MCASP_0_CTRL_REGS, 2, MCASP_RX_FS_WIDTH_WORD,
) ~% |7 q1 z; f" g/ W' ^, `" M, \( gMCASP_RX_FS_EXT_BEGIN_ON_FALL_EDGE);
0 r, N( P# S- s7 d# n% ?McASPTxFrameSyncCfg(SOC_MCASP_0_CTRL_REGS, 2, MCASP_TX_FS_WIDTH_WORD,
* q3 H$ L7 s2 K9 }' c7 d) [MCASP_TX_FS_INT_BEGIN_ON_RIS_EDGE);
/* configure the clock for receiver */
6 A; y2 S1 Z9 M; C: h  ~7 E7 r. Z0 _McASPRxClkCfg(SOC_MCASP_0_CTRL_REGS, MCASP_RX_CLK_EXTERNAL, 0, 0);
. r) G& l" R4 @! A  r* \McASPRxClkPolaritySet(SOC_MCASP_0_CTRL_REGS, MCASP_RX_CLK_POL_RIS_EDGE);
: p* C/ U* i+ W' @1 cMcASPRxClkCheckConfig(SOC_MCASP_0_CTRL_REGS, MCASP_RX_CLKCHCK_DIV32,
% ~" F) n9 g8 ?% y$ c. y. `  u" s) V  U0x00, 0xFF);
/* configure the clock for transmitter */1 y0 c4 `( Z0 w1 w0 i0 }( ]; X: I
McASPTxClkCfg(SOC_MCASP_0_CTRL_REGS, MCASP_TX_CLK_INTERNAL, 11, 1);
  `- K& F1 z, m  s% D8 k: XMcASPTxClkPolaritySet(SOC_MCASP_0_CTRL_REGS, MCASP_TX_CLK_POL_FALL_EDGE); & F% l3 f! Z) v8 N4 f4 g
McASPTxClkCheckConfig(SOC_MCASP_0_CTRL_REGS, MCASP_TX_CLKCHCK_DIV32,8 |. [4 t$ t3 r
0x00, 0xFF);
3 U1 g# X( R& {) H' h4 Y& w  P3 J) N3 r
/* Enable synchronization of RX and TX sections */ # a; W" g' O' \2 F% I, a8 ~
McASPTxRxClkSyncEnable(SOC_MCASP_0_CTRL_REGS);
/* Enable the transmitter/receiver slots. I2S uses 2 slots */
3 P  p8 r# E/ Q2 j1 ~, ZMcASPRxTimeSlotSet(SOC_MCASP_0_CTRL_REGS, I2S_SLOTS);& L1 T$ N1 _9 S9 J6 c6 x
McASPTxTimeSlotSet(SOC_MCASP_0_CTRL_REGS, I2S_SLOTS);
/*& R9 G) ]3 h9 E* F! u9 M$ ?) z: t
** Set the serializers, Currently only one serializer is set as
# n. r* ]7 z- A; }' v$ b, j) D: Y' ~** transmitter and one serializer as receiver.4 U! ?0 e' A, B5 T0 y: j0 [
*/# J* D6 l4 C) r
McASPSerializerRxSet(SOC_MCASP_0_CTRL_REGS, MCASP_XSER_RX);  {$ t: d7 w3 K/ I
McASPSerializerTxSet(SOC_MCASP_0_CTRL_REGS, MCASP_XSER_TX);
/*
+ E$ h; H. n9 y8 S** Configure the McASP pins ! b- Z4 `: S6 }/ s
** Input - Frame Sync, Clock and Serializer Rx+ ^7 _* J& }$ u4 W$ A+ G
** Output - Serializer Tx is connected to the input of the codec
2 k* ?3 _  \0 m) t& E! V3 n*/4 m* B# `) w, b8 O8 u3 v' V8 V) r8 F
McASPPinMcASPSet(SOC_MCASP_0_CTRL_REGS, 0xFFFFFFFF);; e0 [' B% Y9 q. `0 ^& v
McASPPinDirOutputSet(SOC_MCASP_0_CTRL_REGS,MCASP_PIN_AXR(MCASP_XSER_TX));' T. y2 l7 C6 H; P; g
McASPPinDirInputSet(SOC_MCASP_0_CTRL_REGS, MCASP_PIN_AFSX
6 o1 x. X. m( N. U( k# o3 s| MCASP_PIN_ACLKX! I# m% B! q. q' L- u
| MCASP_PIN_AHCLKX
. D9 e$ p, V1 d% q, v" Y| MCASP_PIN_AXR(MCASP_XSER_RX));
/* Enable error interrupts for McASP */
1 u6 @2 Q8 U! kMcASPTxIntEnable(SOC_MCASP_0_CTRL_REGS, MCASP_TX_DMAERROR ; y( O* j! G- M1 j# V% y9 @
| MCASP_TX_CLKFAIL
; z; r$ O* e3 k| MCASP_TX_SYNCERROR0 k; o" q7 o' ^6 _! W
| MCASP_TX_UNDERRUN);
McASPRxIntEnable(SOC_MCASP_0_CTRL_REGS, MCASP_RX_DMAERROR
+ I2 H( g* n' u1 C| MCASP_RX_CLKFAIL6 D5 Z2 Y. _$ r6 L- `
| MCASP_RX_SYNCERROR
+ l4 `4 f" E, P, |2 M| MCASP_RX_OVERRUN);7 ~% {/ F8 G" C0 K
}
static void I2SDataTxRxActivate(void)0 r6 l4 k( ?' p5 B) ^3 S
{: ~9 |4 R% E0 q% u
/* Start the clocks */
) t: f/ [( y7 W: qMcASPRxClkStart(SOC_MCASP_0_CTRL_REGS, MCASP_RX_CLK_EXTERNAL);0 W3 I6 ?6 ~! S2 U; a
McASPTxClkStart(SOC_MCASP_0_CTRL_REGS, MCASP_TX_CLK_INTERNAL);
/* Enable EDMA for the transfer */, u2 i& ^- p5 t) k
EDMA3EnableTransfer(SOC_EDMA30CC_0_REGS, EDMA3_CHA_MCASP0_RX,9 |& T& N$ X% l% O  c1 A8 I
EDMA3_TRIG_MODE_EVENT);
9 U% m! O# I& VEDMA3EnableTransfer(SOC_EDMA30CC_0_REGS,
. @* ^2 R/ p: T! c6 mEDMA3_CHA_MCASP0_TX, EDMA3_TRIG_MODE_EVENT);
/* Activate the serializers */- f% |% I: j% \5 P
McASPRxSerActivate(SOC_MCASP_0_CTRL_REGS);" B5 q! w  f2 D! Q+ E4 z! v
McASPTxSerActivate(SOC_MCASP_0_CTRL_REGS);
/* make sure that the XDATA bit is cleared to zero */
! q9 [4 E; L* b# \3 o4 o4 G9 a. ]2 [while(McASPTxStatusGet(SOC_MCASP_0_CTRL_REGS) & MCASP_TX_STAT_DATAREADY);
/* Activate the state machines */
$ M. e1 M7 k4 L; zMcASPRxEnable(SOC_MCASP_0_CTRL_REGS);
$ e8 d! Q- n6 nMcASPTxEnable(SOC_MCASP_0_CTRL_REGS);' g1 X) y0 J- n. q1 p+ O' \
}
. _- Z' k3 h! c% m/ e6 _5 ~3 Q0 G
请问:问题出在哪了,时钟按照这样配是否有错。
另外我看XDATA一直是0,接收的rxbuf0,1,2里有一般全是FFFF一半全是0.

, {% y  [0 g% L  Z; b8 G. Q) v




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