嵌入式开发者社区

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

作者: wapdasta    时间: 2018-11-7 13:28
标题: MCASP自环配置。
我项目上用OMAPL138的板子MCASP的引脚都是链接的FPGA,所以在FPGA这端设置的MCASP自环。把axr0接收到的通过axr1发回去。
部分代码如下
input mcasp_afsx,
) P( B4 F3 c8 w6 y; n! X3 jinput mcasp_ahclkx,; l/ D3 Y/ Q! C: t
input mcasp_aclkx,
3 g2 n5 T/ Z) f! N% S* P$ y; einput axr0,
5 k: P/ ]3 ]1 F' `- d" u0 x( ?, Z0 i
7 p3 r% v5 p6 u3 y9 Woutput mcasp_afsr,! G  ^7 P. X9 H' @
output mcasp_ahclkr,
; r' V" R) E% Noutput mcasp_aclkr,
7 b% s* E) u; X  N2 ^' e4 `; Xoutput axr1,% c1 _  K& A  N/ ^
assign mcasp_afsr = mcasp_afsx;5 w& d7 E- O9 P
assign mcasp_aclkr = mcasp_aclkx;
3 D  S4 \5 `8 ~0 _: _" w# O6 hassign mcasp_ahclkr = mcasp_ahclkx;/ P7 Y) M/ [; H7 g: n3 h
assign axr1 = axr0;

* ~/ V: I3 t9 U4 u/ d' z# R) i! ~" s" q2 U% @, s# g' _( J: l
在OMAPL138这端,通过axr0接口发固定的数,axr1接收。
在配置MACASP的时候,发送全部取内部时钟,接收全部取外部时钟。
一直循环发送,但是接收不到。在FPGA端也没有看到时钟和信号的波形。
部分代码如下,关于edma3的部分未做变化。
- {( [9 C5 e& R6 B5 B, R0 ~8 ?: n
static void McASPI2SConfigure(void)5 D" _1 V* ]8 G0 G
{
9 D9 G" G( q1 S( s  x" |/ \+ s* cMcASPRxReset(SOC_MCASP_0_CTRL_REGS);  ^  ?; g  U2 p9 h6 B  Q
McASPTxReset(SOC_MCASP_0_CTRL_REGS);
/* Enable the FIFOs for DMA transfer */5 v7 x/ |2 S$ B+ M! |! X
McASPReadFifoEnable(SOC_MCASP_0_FIFO_REGS, 1, 1);
0 I- M: ?7 f/ n: Y+ sMcASPWriteFifoEnable(SOC_MCASP_0_FIFO_REGS, 1, 1);
/* Set I2S format in the transmitter/receiver format units */
/ b' z! D" F7 J" VMcASPRxFmtI2SSet(SOC_MCASP_0_CTRL_REGS, WORD_SIZE, SLOT_SIZE,4 q, M9 Z: w( r$ U. Y8 d# e) x
MCASP_RX_MODE_DMA);+ _, [+ v4 D7 `1 J* q. [
McASPTxFmtI2SSet(SOC_MCASP_0_CTRL_REGS, WORD_SIZE, SLOT_SIZE,
6 a' M0 S6 n) n+ C3 v* gMCASP_TX_MODE_DMA);
/* Configure the frame sync. I2S shall work in TDM format with 2 slots */9 ]0 W' q( g! ?8 q1 ]& y7 N9 h) i
McASPRxFrameSyncCfg(SOC_MCASP_0_CTRL_REGS, 2, MCASP_RX_FS_WIDTH_WORD,
# A& \5 y1 ?" F8 G+ f* KMCASP_RX_FS_EXT_BEGIN_ON_FALL_EDGE);
/ j7 r% B$ @. n8 i+ h* I: c6 ^McASPTxFrameSyncCfg(SOC_MCASP_0_CTRL_REGS, 2, MCASP_TX_FS_WIDTH_WORD,
$ C; G* }& n) j1 P$ o( x3 ?2 S6 d* v* m1 |MCASP_TX_FS_INT_BEGIN_ON_RIS_EDGE);
/* configure the clock for receiver */9 A/ b0 ?* N" p
McASPRxClkCfg(SOC_MCASP_0_CTRL_REGS, MCASP_RX_CLK_EXTERNAL, 0, 0);/ x1 l7 \, M. I5 F1 q* u, B
McASPRxClkPolaritySet(SOC_MCASP_0_CTRL_REGS, MCASP_RX_CLK_POL_RIS_EDGE);
" {/ T5 U, @% L2 KMcASPRxClkCheckConfig(SOC_MCASP_0_CTRL_REGS, MCASP_RX_CLKCHCK_DIV32,0 B3 x9 w1 X6 V6 e1 p- x. D
0x00, 0xFF);
/* configure the clock for transmitter */
# D, i5 z# Z# G5 L7 YMcASPTxClkCfg(SOC_MCASP_0_CTRL_REGS, MCASP_TX_CLK_INTERNAL, 11, 1);
4 [8 n) Y& ]0 Z- I1 W3 e) s$ b! QMcASPTxClkPolaritySet(SOC_MCASP_0_CTRL_REGS, MCASP_TX_CLK_POL_FALL_EDGE); 7 x* s8 T4 ]5 I) B1 g. H
McASPTxClkCheckConfig(SOC_MCASP_0_CTRL_REGS, MCASP_TX_CLKCHCK_DIV32,2 M' [* w2 y6 ?2 T2 {
0x00, 0xFF);1 J* \2 C/ s* C  O
$ u3 J  q0 D$ M
/* Enable synchronization of RX and TX sections */
6 \. M4 u5 X3 CMcASPTxRxClkSyncEnable(SOC_MCASP_0_CTRL_REGS);
/* Enable the transmitter/receiver slots. I2S uses 2 slots */6 T- |) z1 O- }( a/ r5 J8 m+ f
McASPRxTimeSlotSet(SOC_MCASP_0_CTRL_REGS, I2S_SLOTS);9 l2 N& h( ~+ v; u# L3 b& k
McASPTxTimeSlotSet(SOC_MCASP_0_CTRL_REGS, I2S_SLOTS);
/*1 m0 Q! z; b# l- _1 g
** Set the serializers, Currently only one serializer is set as
+ o, u9 M9 Q2 n, p** transmitter and one serializer as receiver.
# F+ K; y- l2 P5 i* m*/
; h* V. Q8 \4 W4 N; XMcASPSerializerRxSet(SOC_MCASP_0_CTRL_REGS, MCASP_XSER_RX);
+ p4 ^0 w/ J2 ]( Y$ b7 AMcASPSerializerTxSet(SOC_MCASP_0_CTRL_REGS, MCASP_XSER_TX);
/*% x9 Q0 Q3 I* J
** Configure the McASP pins
6 X- _% _. F8 o% o* J** Input - Frame Sync, Clock and Serializer Rx
! F% X( [9 |3 p0 u7 E7 l0 I$ N** Output - Serializer Tx is connected to the input of the codec
1 z; k) y7 g" ?. D1 ?  t" v" o*/$ p# B/ x$ x: L+ u. v( G/ v
McASPPinMcASPSet(SOC_MCASP_0_CTRL_REGS, 0xFFFFFFFF);$ t2 `# }; t0 |
McASPPinDirOutputSet(SOC_MCASP_0_CTRL_REGS,MCASP_PIN_AXR(MCASP_XSER_TX));  b+ E) h  X1 c" u- _: q
McASPPinDirInputSet(SOC_MCASP_0_CTRL_REGS, MCASP_PIN_AFSX  I- p/ ~6 G2 t: m
| MCASP_PIN_ACLKX$ U) n! @$ O4 [; }  @2 A# I0 n
| MCASP_PIN_AHCLKX
$ ~; I$ Z. ?% E- K6 X/ i3 N| MCASP_PIN_AXR(MCASP_XSER_RX));
/* Enable error interrupts for McASP */8 B9 l  m+ @: }
McASPTxIntEnable(SOC_MCASP_0_CTRL_REGS, MCASP_TX_DMAERROR
2 p" e" w, a& P6 c6 t6 I| MCASP_TX_CLKFAIL
9 N: Q/ `1 r! V; u) r& P0 y| MCASP_TX_SYNCERROR( [# _1 W  O# U/ A# M. g  ^
| MCASP_TX_UNDERRUN);
McASPRxIntEnable(SOC_MCASP_0_CTRL_REGS, MCASP_RX_DMAERROR 4 y- a2 X" Z% K/ y5 l) {
| MCASP_RX_CLKFAIL
: m" L$ l5 k- g4 V' S| MCASP_RX_SYNCERROR
9 S4 i. c2 q, `" c6 U9 _! g; R| MCASP_RX_OVERRUN);
0 s9 s7 i: X. M7 k}
static void I2SDataTxRxActivate(void)
" ]- T' _* E# i) R' Q{: A5 C5 i; l9 m# o8 b
/* Start the clocks */
! X* V* ^8 ~5 B4 B& vMcASPRxClkStart(SOC_MCASP_0_CTRL_REGS, MCASP_RX_CLK_EXTERNAL);! l5 S: J6 ]  S4 A
McASPTxClkStart(SOC_MCASP_0_CTRL_REGS, MCASP_TX_CLK_INTERNAL);
/* Enable EDMA for the transfer */
6 X! y! I6 v2 O% U/ P! T. WEDMA3EnableTransfer(SOC_EDMA30CC_0_REGS, EDMA3_CHA_MCASP0_RX,
+ k$ f. ~/ M) A7 k  yEDMA3_TRIG_MODE_EVENT);
# l9 J. x8 Y6 DEDMA3EnableTransfer(SOC_EDMA30CC_0_REGS, , X$ Y9 a, d/ ]8 ^+ V% M
EDMA3_CHA_MCASP0_TX, EDMA3_TRIG_MODE_EVENT);
/* Activate the serializers */
5 }# k- r1 G8 d3 r" K/ tMcASPRxSerActivate(SOC_MCASP_0_CTRL_REGS);' f1 W5 l9 c0 M2 v$ `; k
McASPTxSerActivate(SOC_MCASP_0_CTRL_REGS);
/* make sure that the XDATA bit is cleared to zero */4 ?8 F! Q& j6 ?' c7 M+ O% h
while(McASPTxStatusGet(SOC_MCASP_0_CTRL_REGS) & MCASP_TX_STAT_DATAREADY);
/* Activate the state machines */% {1 h$ s' V" m. P/ ]7 B$ x. L
McASPRxEnable(SOC_MCASP_0_CTRL_REGS);/ K0 ?' |- U: C# s
McASPTxEnable(SOC_MCASP_0_CTRL_REGS);
" Q% v0 _& n( M+ T) a# ]}
( O2 R- _7 L' }% v; _% \
请问:问题出在哪了,时钟按照这样配是否有错。
另外我看XDATA一直是0,接收的rxbuf0,1,2里有一般全是FFFF一半全是0.

2 N$ K$ Q7 V& t  Z/ \




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