嵌入式开发者社区

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

作者: wapdasta    时间: 2018-11-7 13:28
标题: MCASP自环配置。
我项目上用OMAPL138的板子MCASP的引脚都是链接的FPGA,所以在FPGA这端设置的MCASP自环。把axr0接收到的通过axr1发回去。
部分代码如下
input mcasp_afsx,0 c, y6 O6 i8 |5 E& H
input mcasp_ahclkx,$ e1 g' m2 P' a+ m; a5 K- c! b5 w
input mcasp_aclkx,
4 a0 q7 v. b3 U, m8 binput axr0,7 u" x. m8 U9 I" Y( g0 F
) }* y# Q3 X: T' d4 z! u7 l
output mcasp_afsr,4 l2 p* B: d# h8 |+ A3 b
output mcasp_ahclkr,
5 D( d8 h# ~6 I& y8 `output mcasp_aclkr,
8 Q  x& t4 X6 s; d0 Noutput axr1,0 C, m! H( P+ N, q
assign mcasp_afsr = mcasp_afsx;$ G" p/ F' l% ^0 X$ }/ ^0 d
assign mcasp_aclkr = mcasp_aclkx;
  l0 O5 T! M% }; S6 m. r- @, Bassign mcasp_ahclkr = mcasp_ahclkx;
/ s" g7 h+ @) C6 I' ]' E2 J: x  Xassign axr1 = axr0;

% M( V# _5 k) I2 H) q* H6 Z: ?+ q# {# F8 x! N4 s
在OMAPL138这端,通过axr0接口发固定的数,axr1接收。
在配置MACASP的时候,发送全部取内部时钟,接收全部取外部时钟。
一直循环发送,但是接收不到。在FPGA端也没有看到时钟和信号的波形。
部分代码如下,关于edma3的部分未做变化。
8 _( ~: Q  j. x4 K
static void McASPI2SConfigure(void)
1 x# [. ^* m, r8 H8 z9 C4 ^{
" z+ e+ N; a& B$ I! j1 IMcASPRxReset(SOC_MCASP_0_CTRL_REGS);( _- i+ j! G$ a- g% f
McASPTxReset(SOC_MCASP_0_CTRL_REGS);
/* Enable the FIFOs for DMA transfer */' q# [) j/ K8 A( F2 @5 D% h
McASPReadFifoEnable(SOC_MCASP_0_FIFO_REGS, 1, 1);$ d- a' y. o6 X, s7 a3 \! \  x1 N
McASPWriteFifoEnable(SOC_MCASP_0_FIFO_REGS, 1, 1);
/* Set I2S format in the transmitter/receiver format units */
8 }  B! q6 t/ M- H8 }9 n! T* G- s2 [McASPRxFmtI2SSet(SOC_MCASP_0_CTRL_REGS, WORD_SIZE, SLOT_SIZE,
* l8 t6 D# Y8 H/ `MCASP_RX_MODE_DMA);
$ L7 V  J/ c. |0 n7 R3 O) VMcASPTxFmtI2SSet(SOC_MCASP_0_CTRL_REGS, WORD_SIZE, SLOT_SIZE,- ^+ r5 L6 w9 }, t* Z+ E) q# u: B& _
MCASP_TX_MODE_DMA);
/* Configure the frame sync. I2S shall work in TDM format with 2 slots */
" {+ h: u3 ]0 x- u( L* b0 K+ [& q! TMcASPRxFrameSyncCfg(SOC_MCASP_0_CTRL_REGS, 2, MCASP_RX_FS_WIDTH_WORD,
2 c  }0 O6 x& n! P7 `9 j1 y% GMCASP_RX_FS_EXT_BEGIN_ON_FALL_EDGE);
; b  q8 i( X% B) j2 m7 `3 [- HMcASPTxFrameSyncCfg(SOC_MCASP_0_CTRL_REGS, 2, MCASP_TX_FS_WIDTH_WORD, + u$ g( t2 J+ D# g2 ^4 R
MCASP_TX_FS_INT_BEGIN_ON_RIS_EDGE);
/* configure the clock for receiver */! H( q' y' A* a& X% Z- g& Z
McASPRxClkCfg(SOC_MCASP_0_CTRL_REGS, MCASP_RX_CLK_EXTERNAL, 0, 0);
1 O# W7 |- p6 IMcASPRxClkPolaritySet(SOC_MCASP_0_CTRL_REGS, MCASP_RX_CLK_POL_RIS_EDGE);
) f) l1 {! V4 T7 u2 KMcASPRxClkCheckConfig(SOC_MCASP_0_CTRL_REGS, MCASP_RX_CLKCHCK_DIV32,
, a: Y. b; \0 j7 n0x00, 0xFF);
/* configure the clock for transmitter */
$ u; E% g/ E9 _* Q+ F; cMcASPTxClkCfg(SOC_MCASP_0_CTRL_REGS, MCASP_TX_CLK_INTERNAL, 11, 1);
8 y* o8 _% G5 [% Q! U7 t. ZMcASPTxClkPolaritySet(SOC_MCASP_0_CTRL_REGS, MCASP_TX_CLK_POL_FALL_EDGE); + w/ W: a2 f+ @( m5 _$ c
McASPTxClkCheckConfig(SOC_MCASP_0_CTRL_REGS, MCASP_TX_CLKCHCK_DIV32,
3 S- q: W1 G9 N: S% u0x00, 0xFF);- K8 K  y/ b" C9 D$ g

* X* X3 C4 A( X/* Enable synchronization of RX and TX sections */ + Q6 B/ z+ c% m, q
McASPTxRxClkSyncEnable(SOC_MCASP_0_CTRL_REGS);
/* Enable the transmitter/receiver slots. I2S uses 2 slots */
7 o6 c$ j3 U- A1 B1 p# m5 s4 SMcASPRxTimeSlotSet(SOC_MCASP_0_CTRL_REGS, I2S_SLOTS);' d: a. h7 l8 ^6 r: A" l" ~
McASPTxTimeSlotSet(SOC_MCASP_0_CTRL_REGS, I2S_SLOTS);
/*
% e" T" x, f) X# C& S% U- Q** Set the serializers, Currently only one serializer is set as
- ?+ ~/ l, j0 z0 s9 ]: \1 y$ z** transmitter and one serializer as receiver.
7 W  c7 j- k" c) S# ~*/
$ V) ^' I, H8 _5 [McASPSerializerRxSet(SOC_MCASP_0_CTRL_REGS, MCASP_XSER_RX);
' T% m% C2 H* _McASPSerializerTxSet(SOC_MCASP_0_CTRL_REGS, MCASP_XSER_TX);
/*
  l! l+ A7 |2 d: c' |/ y, ~** Configure the McASP pins " Q+ Y0 C- c% x  i) c/ F' y
** Input - Frame Sync, Clock and Serializer Rx) e  X6 A! J6 k+ S! \- \* }
** Output - Serializer Tx is connected to the input of the codec 2 N& W; S$ _/ N  \" b
*/
: K; F* Q. R5 z+ h( f. G" W$ d: q) AMcASPPinMcASPSet(SOC_MCASP_0_CTRL_REGS, 0xFFFFFFFF);$ [- c+ g8 O; z' B4 P+ s, u% Q" r8 R
McASPPinDirOutputSet(SOC_MCASP_0_CTRL_REGS,MCASP_PIN_AXR(MCASP_XSER_TX));2 Z* C/ ~- ~( N5 [3 z  z: `# [
McASPPinDirInputSet(SOC_MCASP_0_CTRL_REGS, MCASP_PIN_AFSX. y2 r& w$ H- F8 o9 @& z9 O+ U
| MCASP_PIN_ACLKX0 E! s- n7 W6 o" x5 _0 W2 k. z3 f
| MCASP_PIN_AHCLKX2 I: A" k$ p  m0 R( @8 J* E! q
| MCASP_PIN_AXR(MCASP_XSER_RX));
/* Enable error interrupts for McASP */2 y" {: n- w0 K* d% q  _: _
McASPTxIntEnable(SOC_MCASP_0_CTRL_REGS, MCASP_TX_DMAERROR
6 T% u# A. o: C9 K4 ^| MCASP_TX_CLKFAIL & n3 G& N* {( j& K# u
| MCASP_TX_SYNCERROR
* K* T8 N  ]6 J/ f" V| MCASP_TX_UNDERRUN);
McASPRxIntEnable(SOC_MCASP_0_CTRL_REGS, MCASP_RX_DMAERROR 3 h& ^& E1 M) _* @& {( \7 @
| MCASP_RX_CLKFAIL. `8 X. z8 q8 Z) n9 C
| MCASP_RX_SYNCERROR
( [: w0 w& \  a| MCASP_RX_OVERRUN);
9 `& ?+ A; C/ G4 k6 p}
static void I2SDataTxRxActivate(void)
' a* s# K" |2 I8 e. L{
2 i- @2 Y# s/ g/ F* |/* Start the clocks */
9 s6 [3 A" C# i! L' y6 o) K! ~McASPRxClkStart(SOC_MCASP_0_CTRL_REGS, MCASP_RX_CLK_EXTERNAL);  y7 {/ D; U7 [3 `! J0 u# {
McASPTxClkStart(SOC_MCASP_0_CTRL_REGS, MCASP_TX_CLK_INTERNAL);
/* Enable EDMA for the transfer */
9 m3 s) h5 X' o. ]! G) MEDMA3EnableTransfer(SOC_EDMA30CC_0_REGS, EDMA3_CHA_MCASP0_RX,
+ ~! v& L! t2 q# n! ]0 \! j; h; b8 ?EDMA3_TRIG_MODE_EVENT);
+ G# C1 T! h* REDMA3EnableTransfer(SOC_EDMA30CC_0_REGS,
& r3 N5 Z3 i! a3 O# k+ T# JEDMA3_CHA_MCASP0_TX, EDMA3_TRIG_MODE_EVENT);
/* Activate the serializers */
6 ~7 c6 x" A+ |: ]9 G1 gMcASPRxSerActivate(SOC_MCASP_0_CTRL_REGS);* _( t2 V- v# S) s+ h, O- X
McASPTxSerActivate(SOC_MCASP_0_CTRL_REGS);
/* make sure that the XDATA bit is cleared to zero *// @0 O" j0 E/ D0 X2 t/ b: J
while(McASPTxStatusGet(SOC_MCASP_0_CTRL_REGS) & MCASP_TX_STAT_DATAREADY);
/* Activate the state machines */
, O- M7 v. r8 Z6 F2 c: f' RMcASPRxEnable(SOC_MCASP_0_CTRL_REGS);
: W  }& W" t* [" A) j8 YMcASPTxEnable(SOC_MCASP_0_CTRL_REGS);
2 v$ u& Z* q+ a, k' f' u}

2 j) ?# p! q. G  i
请问:问题出在哪了,时钟按照这样配是否有错。
另外我看XDATA一直是0,接收的rxbuf0,1,2里有一般全是FFFF一半全是0.

: l) g% {5 O/ I




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