嵌入式开发者社区

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

作者: wapdasta    时间: 2018-11-7 13:28
标题: MCASP自环配置。
我项目上用OMAPL138的板子MCASP的引脚都是链接的FPGA,所以在FPGA这端设置的MCASP自环。把axr0接收到的通过axr1发回去。
部分代码如下
input mcasp_afsx,
3 F6 X% D: S5 v7 j" ~& K4 V6 binput mcasp_ahclkx,
' B  c! e/ n6 `$ ]1 ?; S  }input mcasp_aclkx,# M! f: m# k( y
input axr0,7 m, I, Y, D6 c. P
, v% J' g8 u! H8 V2 [( {8 x
output mcasp_afsr,0 m- u$ C" q9 v0 \8 A$ S( b/ r
output mcasp_ahclkr,; o) t8 m9 x- ~' b4 S
output mcasp_aclkr,
2 r5 s3 d! A) S  [& d6 I( q& l) q/ Uoutput axr1,5 V* n5 t/ L7 v! M( C
assign mcasp_afsr = mcasp_afsx;/ p" ?8 w- \! }( h8 m
assign mcasp_aclkr = mcasp_aclkx;
% D/ B( m# e; l/ z  m5 I) Rassign mcasp_ahclkr = mcasp_ahclkx;8 M' t3 P; W# i  c7 f) ^4 Z
assign axr1 = axr0;

/ Y+ p9 J  [( M5 G% K& i
  I9 {2 x. P' k9 D" `
在OMAPL138这端,通过axr0接口发固定的数,axr1接收。
在配置MACASP的时候,发送全部取内部时钟,接收全部取外部时钟。
一直循环发送,但是接收不到。在FPGA端也没有看到时钟和信号的波形。
部分代码如下,关于edma3的部分未做变化。

6 C$ p- S) R& n# C/ {4 z* F8 g1 {
static void McASPI2SConfigure(void)6 n% u) F6 Z0 x9 E; c/ z
{
* @5 e4 d0 R* V4 O0 N2 aMcASPRxReset(SOC_MCASP_0_CTRL_REGS);. a% K+ V  y. D' X
McASPTxReset(SOC_MCASP_0_CTRL_REGS);
/* Enable the FIFOs for DMA transfer */* v5 q3 ], M7 g2 ?& O, _
McASPReadFifoEnable(SOC_MCASP_0_FIFO_REGS, 1, 1);/ X3 f' k* _5 }  e2 ]- k3 Y$ t: _
McASPWriteFifoEnable(SOC_MCASP_0_FIFO_REGS, 1, 1);
/* Set I2S format in the transmitter/receiver format units */$ V% N6 F# ^, C5 H% u1 w
McASPRxFmtI2SSet(SOC_MCASP_0_CTRL_REGS, WORD_SIZE, SLOT_SIZE,
2 a: N* A1 R% BMCASP_RX_MODE_DMA);
; \! g4 n- q" CMcASPTxFmtI2SSet(SOC_MCASP_0_CTRL_REGS, WORD_SIZE, SLOT_SIZE,+ g  V5 g: [4 r" x2 \9 j
MCASP_TX_MODE_DMA);
/* Configure the frame sync. I2S shall work in TDM format with 2 slots */
$ Z) J6 R. {$ a: fMcASPRxFrameSyncCfg(SOC_MCASP_0_CTRL_REGS, 2, MCASP_RX_FS_WIDTH_WORD, ! G$ G* a" q& {, ^2 T" f
MCASP_RX_FS_EXT_BEGIN_ON_FALL_EDGE);
$ Q* C, D+ K$ y$ `; S; @McASPTxFrameSyncCfg(SOC_MCASP_0_CTRL_REGS, 2, MCASP_TX_FS_WIDTH_WORD, : s, o7 Z0 O) I. c, b' W
MCASP_TX_FS_INT_BEGIN_ON_RIS_EDGE);
/* configure the clock for receiver */
: E6 a! _7 R4 U" N% ^; G- cMcASPRxClkCfg(SOC_MCASP_0_CTRL_REGS, MCASP_RX_CLK_EXTERNAL, 0, 0);8 O( h8 @2 B1 o; e
McASPRxClkPolaritySet(SOC_MCASP_0_CTRL_REGS, MCASP_RX_CLK_POL_RIS_EDGE);
+ W. F) ^8 p% @8 BMcASPRxClkCheckConfig(SOC_MCASP_0_CTRL_REGS, MCASP_RX_CLKCHCK_DIV32,
1 y1 x0 p! }+ l; Z0x00, 0xFF);
/* configure the clock for transmitter */# |! J1 i/ T- S; p
McASPTxClkCfg(SOC_MCASP_0_CTRL_REGS, MCASP_TX_CLK_INTERNAL, 11, 1);$ o! V! F& M/ h) Y" g- Q' B$ X# I
McASPTxClkPolaritySet(SOC_MCASP_0_CTRL_REGS, MCASP_TX_CLK_POL_FALL_EDGE); / e. }5 _0 R# h; U; q" T7 C
McASPTxClkCheckConfig(SOC_MCASP_0_CTRL_REGS, MCASP_TX_CLKCHCK_DIV32,
$ X; `& W' M' Q( K) j0x00, 0xFF);( w4 I1 o2 t: m6 e7 x

( |8 q" d1 L3 ]. r/* Enable synchronization of RX and TX sections */
4 V1 X) u7 W: i( p: f! x9 _McASPTxRxClkSyncEnable(SOC_MCASP_0_CTRL_REGS);
/* Enable the transmitter/receiver slots. I2S uses 2 slots */. a! t) n* ^8 ^8 A  Y5 i& e
McASPRxTimeSlotSet(SOC_MCASP_0_CTRL_REGS, I2S_SLOTS);3 M8 Z2 d) M  k. ]2 W
McASPTxTimeSlotSet(SOC_MCASP_0_CTRL_REGS, I2S_SLOTS);
/*& z* y6 T) b8 q) i9 l
** Set the serializers, Currently only one serializer is set as
4 i& z4 {2 m2 ~4 S0 {** transmitter and one serializer as receiver.
  G9 B% A2 d# y8 O; ^$ h0 S# V1 L*/, A5 ^& _! R2 `. j! h' Z8 b
McASPSerializerRxSet(SOC_MCASP_0_CTRL_REGS, MCASP_XSER_RX);
  {2 a- G9 G3 ?5 yMcASPSerializerTxSet(SOC_MCASP_0_CTRL_REGS, MCASP_XSER_TX);
/*4 z# q" ~9 f( E/ ?& u: g: o; ^
** Configure the McASP pins . a. c: Z( b8 {# M- f* X
** Input - Frame Sync, Clock and Serializer Rx
$ Y" h; n, r/ m( B8 h) x. J** Output - Serializer Tx is connected to the input of the codec
! ?, i7 E3 W! k0 h*/
, U0 `7 ^7 d' E0 e% j. q9 UMcASPPinMcASPSet(SOC_MCASP_0_CTRL_REGS, 0xFFFFFFFF);# X: |  U' d8 R. A
McASPPinDirOutputSet(SOC_MCASP_0_CTRL_REGS,MCASP_PIN_AXR(MCASP_XSER_TX));) C' ^! ~9 V* @1 y2 |: R
McASPPinDirInputSet(SOC_MCASP_0_CTRL_REGS, MCASP_PIN_AFSX1 I+ {' W0 E9 Q3 w6 O7 n1 {
| MCASP_PIN_ACLKX* {. v' h4 b" E7 h$ g
| MCASP_PIN_AHCLKX
8 I5 M: H3 |) L: ~3 Z. L| MCASP_PIN_AXR(MCASP_XSER_RX));
/* Enable error interrupts for McASP */- h: W6 e' @! \+ ~2 e# l) g
McASPTxIntEnable(SOC_MCASP_0_CTRL_REGS, MCASP_TX_DMAERROR
0 c, v- W' g3 l/ z$ {  Y5 [- ?9 i| MCASP_TX_CLKFAIL 0 u( s- ]) O" |( x2 I: U. L
| MCASP_TX_SYNCERROR" l( A8 ]  W$ n6 a3 |
| MCASP_TX_UNDERRUN);
McASPRxIntEnable(SOC_MCASP_0_CTRL_REGS, MCASP_RX_DMAERROR % A' G& y% Z1 ?9 r+ R
| MCASP_RX_CLKFAIL
2 {# [, ~" k& ]! D| MCASP_RX_SYNCERROR 7 C! u8 C2 f/ _& U
| MCASP_RX_OVERRUN);8 d& b- [3 c9 `, ^
}
static void I2SDataTxRxActivate(void)
( t9 G/ f# B7 w6 A{( |* z$ L" f3 p( f
/* Start the clocks */8 x( w4 I* p1 j5 X
McASPRxClkStart(SOC_MCASP_0_CTRL_REGS, MCASP_RX_CLK_EXTERNAL);& `, X$ l8 m5 [" v3 Q1 k
McASPTxClkStart(SOC_MCASP_0_CTRL_REGS, MCASP_TX_CLK_INTERNAL);
/* Enable EDMA for the transfer */2 {7 K, ^; R; O; F5 k1 n% I3 ]
EDMA3EnableTransfer(SOC_EDMA30CC_0_REGS, EDMA3_CHA_MCASP0_RX,
- n$ N. ?3 f/ S+ a" \2 OEDMA3_TRIG_MODE_EVENT);. A8 x; F6 G$ H  S6 I
EDMA3EnableTransfer(SOC_EDMA30CC_0_REGS,
) q( Q( T9 j; m- s! j! t" QEDMA3_CHA_MCASP0_TX, EDMA3_TRIG_MODE_EVENT);
/* Activate the serializers */
0 o" s+ R+ A: w  k8 lMcASPRxSerActivate(SOC_MCASP_0_CTRL_REGS);9 u8 m' T: J( ]9 h; F! @
McASPTxSerActivate(SOC_MCASP_0_CTRL_REGS);
/* make sure that the XDATA bit is cleared to zero */! [( A" u7 U- z/ V4 M7 J
while(McASPTxStatusGet(SOC_MCASP_0_CTRL_REGS) & MCASP_TX_STAT_DATAREADY);
/* Activate the state machines */
7 y' t* W6 Q7 ^4 o: H! Z( Z" eMcASPRxEnable(SOC_MCASP_0_CTRL_REGS);" \/ k: h, J/ M
McASPTxEnable(SOC_MCASP_0_CTRL_REGS);1 }# V9 {  v  L5 _2 V, S$ }% {
}
. b3 S# ~* R4 r
请问:问题出在哪了,时钟按照这样配是否有错。
另外我看XDATA一直是0,接收的rxbuf0,1,2里有一般全是FFFF一半全是0.
6 o& s5 X8 O" s& n





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