嵌入式开发者社区

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

作者: wapdasta    时间: 2018-11-7 13:28
标题: MCASP自环配置。
我项目上用OMAPL138的板子MCASP的引脚都是链接的FPGA,所以在FPGA这端设置的MCASP自环。把axr0接收到的通过axr1发回去。
部分代码如下
input mcasp_afsx,
1 `- ]+ k" }/ `( f  |  D- oinput mcasp_ahclkx,4 ^3 D( X$ E, ]1 ^( L9 E
input mcasp_aclkx,
  u; d1 m) f  y  H) {input axr0,/ n/ p9 Z3 Z) y1 \$ U, j
9 i9 I9 N( {- N. n! L! h# T
output mcasp_afsr,
! N6 H  |5 G+ ^: Y2 l0 Z% soutput mcasp_ahclkr,5 N" W5 L, x* L6 `, N
output mcasp_aclkr,
9 s/ l# R6 X7 |, W, Ooutput axr1,
! E: B& ^, z7 q: {* s
assign mcasp_afsr = mcasp_afsx;
/ p9 g. A7 p* s: D$ Eassign mcasp_aclkr = mcasp_aclkx;
2 m& E3 Y  m/ _7 B8 @1 t: Kassign mcasp_ahclkr = mcasp_ahclkx;- ~1 w$ L' S9 j8 G3 T+ K, V
assign axr1 = axr0;
8 k, f7 y4 p/ K0 I, l0 y6 X

: e5 X: K/ O- {$ ?' }0 X
在OMAPL138这端,通过axr0接口发固定的数,axr1接收。
在配置MACASP的时候,发送全部取内部时钟,接收全部取外部时钟。
一直循环发送,但是接收不到。在FPGA端也没有看到时钟和信号的波形。
部分代码如下,关于edma3的部分未做变化。

) w6 y: q7 t7 J
static void McASPI2SConfigure(void)6 u/ i, L2 T1 j8 f7 H
{2 `/ p" ]' Z* c9 H4 `4 N
McASPRxReset(SOC_MCASP_0_CTRL_REGS);# X+ ^1 v1 N$ A$ x
McASPTxReset(SOC_MCASP_0_CTRL_REGS);
/* Enable the FIFOs for DMA transfer */; X& }  N; K1 |5 ?4 C
McASPReadFifoEnable(SOC_MCASP_0_FIFO_REGS, 1, 1);2 s) K' E* O% t/ a7 c' S9 P
McASPWriteFifoEnable(SOC_MCASP_0_FIFO_REGS, 1, 1);
/* Set I2S format in the transmitter/receiver format units */
& |4 |- J4 {% S  l! B3 k* WMcASPRxFmtI2SSet(SOC_MCASP_0_CTRL_REGS, WORD_SIZE, SLOT_SIZE,
0 v3 ?. `% j  g4 h. E4 N2 w2 QMCASP_RX_MODE_DMA);
5 B) t2 d: ]" n1 E  TMcASPTxFmtI2SSet(SOC_MCASP_0_CTRL_REGS, WORD_SIZE, SLOT_SIZE,
% b$ z' U8 ?3 g* ]" V1 Q: s; @MCASP_TX_MODE_DMA);
/* Configure the frame sync. I2S shall work in TDM format with 2 slots */
3 h( N- e9 ^7 [4 s: AMcASPRxFrameSyncCfg(SOC_MCASP_0_CTRL_REGS, 2, MCASP_RX_FS_WIDTH_WORD,
. q. |+ b+ v0 e/ Y+ FMCASP_RX_FS_EXT_BEGIN_ON_FALL_EDGE);/ ^# D; k/ A4 K5 S
McASPTxFrameSyncCfg(SOC_MCASP_0_CTRL_REGS, 2, MCASP_TX_FS_WIDTH_WORD, 1 P3 W0 n0 i+ v* Q* x
MCASP_TX_FS_INT_BEGIN_ON_RIS_EDGE);
/* configure the clock for receiver */8 Q7 p( ]& ^( |8 \8 m: O
McASPRxClkCfg(SOC_MCASP_0_CTRL_REGS, MCASP_RX_CLK_EXTERNAL, 0, 0);
4 z, {; Z+ i5 ?5 mMcASPRxClkPolaritySet(SOC_MCASP_0_CTRL_REGS, MCASP_RX_CLK_POL_RIS_EDGE); " c9 [' l4 H. \% @
McASPRxClkCheckConfig(SOC_MCASP_0_CTRL_REGS, MCASP_RX_CLKCHCK_DIV32,) ?7 c% t5 ]1 h2 C6 l6 T  t; D
0x00, 0xFF);
/* configure the clock for transmitter */
! d( V, r3 V) N5 s4 JMcASPTxClkCfg(SOC_MCASP_0_CTRL_REGS, MCASP_TX_CLK_INTERNAL, 11, 1);
; G* |+ \& z/ c) P4 ^- R, V- C1 BMcASPTxClkPolaritySet(SOC_MCASP_0_CTRL_REGS, MCASP_TX_CLK_POL_FALL_EDGE);
4 K; p8 |+ ]6 X: c$ H+ c! @4 oMcASPTxClkCheckConfig(SOC_MCASP_0_CTRL_REGS, MCASP_TX_CLKCHCK_DIV32,
7 C7 J1 \7 H8 L, H( M. @/ D' j0x00, 0xFF);
: X$ u9 N$ s/ ?% W2 F7 B1 \# g& e
, g0 H% v. l* d8 b, N* w/* Enable synchronization of RX and TX sections */
" q: u- C$ g6 ]/ T- wMcASPTxRxClkSyncEnable(SOC_MCASP_0_CTRL_REGS);
/* Enable the transmitter/receiver slots. I2S uses 2 slots */
- f' e1 ^) u# ~McASPRxTimeSlotSet(SOC_MCASP_0_CTRL_REGS, I2S_SLOTS);
( T, }, y5 ^5 w  ]% ~% GMcASPTxTimeSlotSet(SOC_MCASP_0_CTRL_REGS, I2S_SLOTS);
/*
% L. f5 z) W1 A" x! ]* e** Set the serializers, Currently only one serializer is set as
5 n, B0 B6 s2 q4 B' }! V3 s** transmitter and one serializer as receiver.
' \3 b4 A# k6 a& g! a8 M8 l" j$ y3 ^*/8 W5 S9 _- m! \. i- ~5 x/ \8 Q! k
McASPSerializerRxSet(SOC_MCASP_0_CTRL_REGS, MCASP_XSER_RX);* _: P: R& M/ Q4 O
McASPSerializerTxSet(SOC_MCASP_0_CTRL_REGS, MCASP_XSER_TX);
/*
7 Q  L; a% I8 u  w" z** Configure the McASP pins   |, O& {# X0 L$ |, T- a8 e0 g) {0 y
** Input - Frame Sync, Clock and Serializer Rx- t' i3 |( ?) I( L
** Output - Serializer Tx is connected to the input of the codec . Q$ v7 A) E0 @3 L, n) r
*/
0 U2 |& n' ]5 W) I1 uMcASPPinMcASPSet(SOC_MCASP_0_CTRL_REGS, 0xFFFFFFFF);
: I2 S$ V! c  H5 m) CMcASPPinDirOutputSet(SOC_MCASP_0_CTRL_REGS,MCASP_PIN_AXR(MCASP_XSER_TX));! I) q  H# U* s$ g1 N0 x
McASPPinDirInputSet(SOC_MCASP_0_CTRL_REGS, MCASP_PIN_AFSX" E$ x7 {8 D0 U8 n  J! D
| MCASP_PIN_ACLKX
* }! P) @- w. W: [$ h| MCASP_PIN_AHCLKX1 u/ ]! X" d. P3 m0 W# Y
| MCASP_PIN_AXR(MCASP_XSER_RX));
/* Enable error interrupts for McASP */
6 E+ k1 X/ O7 Q1 r- ZMcASPTxIntEnable(SOC_MCASP_0_CTRL_REGS, MCASP_TX_DMAERROR 4 o# x$ _5 Z5 u. K
| MCASP_TX_CLKFAIL 2 I4 j- u4 y  n; L
| MCASP_TX_SYNCERROR
% }' d7 i& @' M6 H6 I) p| MCASP_TX_UNDERRUN);
McASPRxIntEnable(SOC_MCASP_0_CTRL_REGS, MCASP_RX_DMAERROR
% \% t: t9 a6 i# z6 f1 a$ G3 b- s| MCASP_RX_CLKFAIL
' ~8 i! k8 r0 _/ h6 D; k# E* f! R( L| MCASP_RX_SYNCERROR - w7 ?* v2 x5 D) l5 i
| MCASP_RX_OVERRUN);
2 Y6 j3 l) ?- y# @9 E- \$ {3 P}
static void I2SDataTxRxActivate(void)) P2 p7 \: C5 l5 I, |
{1 V: b  G! V& [9 _- y3 l
/* Start the clocks */
% r" j: c- [* ]: ^  R6 r/ V# u7 [McASPRxClkStart(SOC_MCASP_0_CTRL_REGS, MCASP_RX_CLK_EXTERNAL);. M7 D1 l" {- R; x" G& I
McASPTxClkStart(SOC_MCASP_0_CTRL_REGS, MCASP_TX_CLK_INTERNAL);
/* Enable EDMA for the transfer */
/ M% ^6 V1 ]8 b) [EDMA3EnableTransfer(SOC_EDMA30CC_0_REGS, EDMA3_CHA_MCASP0_RX,+ n0 q  p) s1 r+ O' h$ j3 Y
EDMA3_TRIG_MODE_EVENT);
9 g7 _9 w+ E  U$ D9 z# {EDMA3EnableTransfer(SOC_EDMA30CC_0_REGS, # \- k# h2 j! ^6 x; i3 Q
EDMA3_CHA_MCASP0_TX, EDMA3_TRIG_MODE_EVENT);
/* Activate the serializers */3 T1 [$ h( s" t/ x/ \. F; o3 O
McASPRxSerActivate(SOC_MCASP_0_CTRL_REGS);
: a5 J7 ~8 P; \( bMcASPTxSerActivate(SOC_MCASP_0_CTRL_REGS);
/* make sure that the XDATA bit is cleared to zero */
) n. r% L) v& ?( D4 N; rwhile(McASPTxStatusGet(SOC_MCASP_0_CTRL_REGS) & MCASP_TX_STAT_DATAREADY);
/* Activate the state machines */
+ c, p( t( ?$ C6 o7 G; xMcASPRxEnable(SOC_MCASP_0_CTRL_REGS);! l+ h! o# G# h
McASPTxEnable(SOC_MCASP_0_CTRL_REGS);0 q9 D/ k; D* |  D$ e
}
$ x. z5 G! z+ }5 u$ ~
请问:问题出在哪了,时钟按照这样配是否有错。
另外我看XDATA一直是0,接收的rxbuf0,1,2里有一般全是FFFF一半全是0.

( j- v' \0 u2 a5 C1 b7 \




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