嵌入式开发者社区

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

作者: wapdasta    时间: 2018-11-7 13:28
标题: MCASP自环配置。
我项目上用OMAPL138的板子MCASP的引脚都是链接的FPGA,所以在FPGA这端设置的MCASP自环。把axr0接收到的通过axr1发回去。
部分代码如下
input mcasp_afsx,
8 V7 W( v. H* e2 X) pinput mcasp_ahclkx,
. [4 r+ o/ n% k  y+ \' d& F+ Vinput mcasp_aclkx,
8 Q: Q0 x: y- ]input axr0,( P7 i4 ]1 e& E$ T
8 y4 O5 u. @1 z0 {' [. F  J
output mcasp_afsr,$ \" d; l. p6 X) Q2 P5 k7 N9 Z$ |
output mcasp_ahclkr,+ g. p+ ?$ `  L+ `
output mcasp_aclkr,% o( m8 X8 S& U( H7 w2 N. ]! V
output axr1,
1 S$ O5 O1 U5 F8 j2 w/ ]6 x% C
assign mcasp_afsr = mcasp_afsx;
' a1 q1 N' ~3 H1 Eassign mcasp_aclkr = mcasp_aclkx;% E# ]4 t) Y; |  H
assign mcasp_ahclkr = mcasp_ahclkx;
) D; h; p# v' l/ |/ S7 i, Vassign axr1 = axr0;

2 G8 M$ u8 @: t
# s4 ~% b4 I* m" x& F' S2 @! [
在OMAPL138这端,通过axr0接口发固定的数,axr1接收。
在配置MACASP的时候,发送全部取内部时钟,接收全部取外部时钟。
一直循环发送,但是接收不到。在FPGA端也没有看到时钟和信号的波形。
部分代码如下,关于edma3的部分未做变化。
( p2 t$ R5 }, ^8 `" s8 j4 [
static void McASPI2SConfigure(void)
  c% N/ @0 X1 z& Q3 [9 j{0 O  L) Q% h; Z
McASPRxReset(SOC_MCASP_0_CTRL_REGS);
8 z( T/ l" b" O; A  E% |# RMcASPTxReset(SOC_MCASP_0_CTRL_REGS);
/* Enable the FIFOs for DMA transfer */% d& P$ I: `; d
McASPReadFifoEnable(SOC_MCASP_0_FIFO_REGS, 1, 1);) T- N2 T' {0 R9 ]7 G& e$ b6 Y
McASPWriteFifoEnable(SOC_MCASP_0_FIFO_REGS, 1, 1);
/* Set I2S format in the transmitter/receiver format units */
1 @! A3 V$ p* xMcASPRxFmtI2SSet(SOC_MCASP_0_CTRL_REGS, WORD_SIZE, SLOT_SIZE,& X5 y7 c! t) K( c, p
MCASP_RX_MODE_DMA);, m1 e, G9 u1 Z# {0 J1 o
McASPTxFmtI2SSet(SOC_MCASP_0_CTRL_REGS, WORD_SIZE, SLOT_SIZE,
4 ^( m) V. t# P6 YMCASP_TX_MODE_DMA);
/* Configure the frame sync. I2S shall work in TDM format with 2 slots */
3 s. [0 `& e( Q8 R7 p) \! eMcASPRxFrameSyncCfg(SOC_MCASP_0_CTRL_REGS, 2, MCASP_RX_FS_WIDTH_WORD,
2 k3 ?% L; }, x! {+ Y5 H) YMCASP_RX_FS_EXT_BEGIN_ON_FALL_EDGE);
5 }* a# l# m3 }. k2 ]McASPTxFrameSyncCfg(SOC_MCASP_0_CTRL_REGS, 2, MCASP_TX_FS_WIDTH_WORD,
- s2 P( Z' r9 i8 NMCASP_TX_FS_INT_BEGIN_ON_RIS_EDGE);
/* configure the clock for receiver */% h# W8 \5 L0 n/ N
McASPRxClkCfg(SOC_MCASP_0_CTRL_REGS, MCASP_RX_CLK_EXTERNAL, 0, 0);
4 m3 V9 g. J: [6 _+ l2 p4 y- `McASPRxClkPolaritySet(SOC_MCASP_0_CTRL_REGS, MCASP_RX_CLK_POL_RIS_EDGE);
' P0 m& i% Z! S! M% c& z- m2 M8 WMcASPRxClkCheckConfig(SOC_MCASP_0_CTRL_REGS, MCASP_RX_CLKCHCK_DIV32,- p9 b8 A* l1 d4 M6 l
0x00, 0xFF);
/* configure the clock for transmitter */
2 o- Q1 N: H4 n0 ^McASPTxClkCfg(SOC_MCASP_0_CTRL_REGS, MCASP_TX_CLK_INTERNAL, 11, 1);/ f$ P! w2 ~+ e! G+ g/ ?# N; a
McASPTxClkPolaritySet(SOC_MCASP_0_CTRL_REGS, MCASP_TX_CLK_POL_FALL_EDGE); # }9 y$ f7 d( b( u  x! W5 \( Q* u
McASPTxClkCheckConfig(SOC_MCASP_0_CTRL_REGS, MCASP_TX_CLKCHCK_DIV32,: }3 {9 h2 _; Y0 J8 [8 n1 f
0x00, 0xFF);
$ h; q6 a1 ^8 d, A8 J8 e. ~9 N7 j( K& G3 G* \7 i* Y& q" X
/* Enable synchronization of RX and TX sections */ : z2 e. G$ @1 o7 t) _3 f, K, ?
McASPTxRxClkSyncEnable(SOC_MCASP_0_CTRL_REGS);
/* Enable the transmitter/receiver slots. I2S uses 2 slots */0 i8 H; @, Q& c3 j' g$ r3 T6 y8 G
McASPRxTimeSlotSet(SOC_MCASP_0_CTRL_REGS, I2S_SLOTS);. A; |8 b1 B0 V) g2 D+ I4 E
McASPTxTimeSlotSet(SOC_MCASP_0_CTRL_REGS, I2S_SLOTS);
/*! @% d  g. Q8 w4 w+ p6 c
** Set the serializers, Currently only one serializer is set as
- V- y7 l) f3 u! M8 |** transmitter and one serializer as receiver.
5 a  f# u3 Z$ M*/4 N) q  S6 X: }( v
McASPSerializerRxSet(SOC_MCASP_0_CTRL_REGS, MCASP_XSER_RX);9 J/ R& c" l6 N7 P
McASPSerializerTxSet(SOC_MCASP_0_CTRL_REGS, MCASP_XSER_TX);
/*4 _! S0 F5 c% D0 s0 N0 y! a7 d+ [
** Configure the McASP pins
) P1 }" V- [$ V8 R! k  t' Q** Input - Frame Sync, Clock and Serializer Rx& `7 Q5 c: G- N+ |/ \( H- x
** Output - Serializer Tx is connected to the input of the codec " H$ S% x+ V# @! |4 P0 X/ K7 r
*/" \3 Y3 C5 C" ?2 H( U
McASPPinMcASPSet(SOC_MCASP_0_CTRL_REGS, 0xFFFFFFFF);
% a; m" @9 ^- j8 p7 \McASPPinDirOutputSet(SOC_MCASP_0_CTRL_REGS,MCASP_PIN_AXR(MCASP_XSER_TX));6 I2 F2 ?/ ~" [/ ?( k0 V
McASPPinDirInputSet(SOC_MCASP_0_CTRL_REGS, MCASP_PIN_AFSX
5 ?' c1 s  j$ w! N  S. {9 b8 y5 k| MCASP_PIN_ACLKX/ c- t# G. Z6 v6 T( z9 U/ H
| MCASP_PIN_AHCLKX0 \& ?: n. s$ c% B- a' O4 \. _
| MCASP_PIN_AXR(MCASP_XSER_RX));
/* Enable error interrupts for McASP */0 M5 d3 v0 M# E- z" \4 k* ]7 y
McASPTxIntEnable(SOC_MCASP_0_CTRL_REGS, MCASP_TX_DMAERROR
+ |; K3 H  t# q9 Y, k% g$ b| MCASP_TX_CLKFAIL 0 z" X7 Q2 F2 ~8 t/ f1 \
| MCASP_TX_SYNCERROR+ c7 Q) W# r' I
| MCASP_TX_UNDERRUN);
McASPRxIntEnable(SOC_MCASP_0_CTRL_REGS, MCASP_RX_DMAERROR # R# l) i1 S7 _4 b
| MCASP_RX_CLKFAIL$ W, u( t# `. a! m7 q
| MCASP_RX_SYNCERROR ' J1 @, }( n, }8 V8 n
| MCASP_RX_OVERRUN);* p2 H; J( x: A
}
static void I2SDataTxRxActivate(void)- ?- q1 v! }' [3 O3 B5 L
{' z  c: w/ V5 O
/* Start the clocks */& i) K: Z& \. k, c% q
McASPRxClkStart(SOC_MCASP_0_CTRL_REGS, MCASP_RX_CLK_EXTERNAL);
, o& j! g7 k  A6 o/ [McASPTxClkStart(SOC_MCASP_0_CTRL_REGS, MCASP_TX_CLK_INTERNAL);
/* Enable EDMA for the transfer */
& h# J# Q- Z* ~2 z$ f! J6 rEDMA3EnableTransfer(SOC_EDMA30CC_0_REGS, EDMA3_CHA_MCASP0_RX,
5 x! |5 q3 Q8 e/ hEDMA3_TRIG_MODE_EVENT);8 ]& h; \, Z; Z, T. h6 G+ Q$ C
EDMA3EnableTransfer(SOC_EDMA30CC_0_REGS,
+ W" y9 L8 k6 b; ^EDMA3_CHA_MCASP0_TX, EDMA3_TRIG_MODE_EVENT);
/* Activate the serializers */& B5 _! ?/ z" @" O3 b& b8 A
McASPRxSerActivate(SOC_MCASP_0_CTRL_REGS);4 ?+ K/ t7 G; k1 k' _3 @7 d6 k: {2 W/ b
McASPTxSerActivate(SOC_MCASP_0_CTRL_REGS);
/* make sure that the XDATA bit is cleared to zero */
( m5 z/ j* J# D7 @while(McASPTxStatusGet(SOC_MCASP_0_CTRL_REGS) & MCASP_TX_STAT_DATAREADY);
/* Activate the state machines */
# v, A0 z2 P, n3 ]! X5 C; PMcASPRxEnable(SOC_MCASP_0_CTRL_REGS);% R$ D% y* v% N% m3 a7 @$ M% X
McASPTxEnable(SOC_MCASP_0_CTRL_REGS);
* e" V5 y1 P* N/ s' F}

" w2 e% Y: O/ j9 k5 I3 i& h
请问:问题出在哪了,时钟按照这样配是否有错。
另外我看XDATA一直是0,接收的rxbuf0,1,2里有一般全是FFFF一半全是0.
6 ?* K4 u4 b$ U4 c# |- ~





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