嵌入式开发者社区

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

作者: wapdasta    时间: 2018-11-7 13:28
标题: MCASP自环配置。
我项目上用OMAPL138的板子MCASP的引脚都是链接的FPGA,所以在FPGA这端设置的MCASP自环。把axr0接收到的通过axr1发回去。
部分代码如下
input mcasp_afsx,% m3 v$ q: ?$ n/ }2 C
input mcasp_ahclkx,2 R* i- y) S6 c/ W0 F4 A
input mcasp_aclkx,% r3 X4 q( R1 q7 ~
input axr0,
- y, G8 \$ o4 Y3 p) C# k- g6 v& M1 G$ U. ]/ T9 W
output mcasp_afsr,
" q8 i3 A% F$ Q6 ]& w6 {output mcasp_ahclkr,# b1 w# n6 W; m* w- w9 ]
output mcasp_aclkr,
- |3 q, g! T$ _! ?# Y+ x0 s( A7 }output axr1,
4 k; q. e$ I" P* y
assign mcasp_afsr = mcasp_afsx;
3 _# }6 q: H& T1 F$ @# m; \  W6 cassign mcasp_aclkr = mcasp_aclkx;6 ~; ~9 x" ?- E: M$ `
assign mcasp_ahclkr = mcasp_ahclkx;8 f+ d2 ?: N8 ~, i/ @( e
assign axr1 = axr0;
) T) M! n5 [6 y$ i$ i6 A) ]

8 f# r& ]% {# }
在OMAPL138这端,通过axr0接口发固定的数,axr1接收。
在配置MACASP的时候,发送全部取内部时钟,接收全部取外部时钟。
一直循环发送,但是接收不到。在FPGA端也没有看到时钟和信号的波形。
部分代码如下,关于edma3的部分未做变化。
  G2 r4 L) D( s/ Z6 B
static void McASPI2SConfigure(void)
4 Z- m. z2 v4 u! t{* k' K" c3 l0 l0 S$ O4 g2 Y) E
McASPRxReset(SOC_MCASP_0_CTRL_REGS);" B% [, ?! [) A* F* L9 K
McASPTxReset(SOC_MCASP_0_CTRL_REGS);
/* Enable the FIFOs for DMA transfer */9 S* a' q6 @4 K" p
McASPReadFifoEnable(SOC_MCASP_0_FIFO_REGS, 1, 1);$ s& ?2 N5 S' A% W3 }1 K; D! p
McASPWriteFifoEnable(SOC_MCASP_0_FIFO_REGS, 1, 1);
/* Set I2S format in the transmitter/receiver format units */. T2 V- M% Z& Q+ d/ \
McASPRxFmtI2SSet(SOC_MCASP_0_CTRL_REGS, WORD_SIZE, SLOT_SIZE,! j% s% Z+ U9 ]+ b* b& T
MCASP_RX_MODE_DMA);
# @; ^  _, J- m2 m7 C  K* @, N1 k% lMcASPTxFmtI2SSet(SOC_MCASP_0_CTRL_REGS, WORD_SIZE, SLOT_SIZE,6 ^9 T& V: R- W8 Q( T( J. N% }
MCASP_TX_MODE_DMA);
/* Configure the frame sync. I2S shall work in TDM format with 2 slots */3 v8 }& u7 O, O* w* i! R. J% s
McASPRxFrameSyncCfg(SOC_MCASP_0_CTRL_REGS, 2, MCASP_RX_FS_WIDTH_WORD, : g# l) L& \, P- z$ E
MCASP_RX_FS_EXT_BEGIN_ON_FALL_EDGE);
" D9 e/ o+ W, V) T' [( }' QMcASPTxFrameSyncCfg(SOC_MCASP_0_CTRL_REGS, 2, MCASP_TX_FS_WIDTH_WORD, ( l' l3 }7 @; U$ r2 Y' |# x2 V
MCASP_TX_FS_INT_BEGIN_ON_RIS_EDGE);
/* configure the clock for receiver */1 W. O; K" |& p9 }- T' a/ Z
McASPRxClkCfg(SOC_MCASP_0_CTRL_REGS, MCASP_RX_CLK_EXTERNAL, 0, 0);
/ v" b6 O1 C, V1 f8 U- r# A. CMcASPRxClkPolaritySet(SOC_MCASP_0_CTRL_REGS, MCASP_RX_CLK_POL_RIS_EDGE);
/ V3 \7 v5 i# k' BMcASPRxClkCheckConfig(SOC_MCASP_0_CTRL_REGS, MCASP_RX_CLKCHCK_DIV32,
: X* ]  p# ?6 f6 ?- [" F0x00, 0xFF);
/* configure the clock for transmitter */+ \. ~4 x* O- m& k9 R! [, f
McASPTxClkCfg(SOC_MCASP_0_CTRL_REGS, MCASP_TX_CLK_INTERNAL, 11, 1);# Z5 p+ T, O  b. j2 y& d( v
McASPTxClkPolaritySet(SOC_MCASP_0_CTRL_REGS, MCASP_TX_CLK_POL_FALL_EDGE); 8 C- y% ?6 Q5 I% _' K
McASPTxClkCheckConfig(SOC_MCASP_0_CTRL_REGS, MCASP_TX_CLKCHCK_DIV32,: O/ s' V" |; \
0x00, 0xFF);
6 h2 I; b& d5 Z! ]  P: _3 @8 G; g7 d
" `2 R& \3 v: C, B7 X$ j2 G9 Q/* Enable synchronization of RX and TX sections */
0 j6 c. D9 o5 T: f5 ?  oMcASPTxRxClkSyncEnable(SOC_MCASP_0_CTRL_REGS);
/* Enable the transmitter/receiver slots. I2S uses 2 slots */+ g9 s( {, ~% o* D4 F! C0 ]' |
McASPRxTimeSlotSet(SOC_MCASP_0_CTRL_REGS, I2S_SLOTS);- `& l9 r# L. Y8 Q4 X; e8 v& [
McASPTxTimeSlotSet(SOC_MCASP_0_CTRL_REGS, I2S_SLOTS);
/*+ N" y2 {, W, C9 g& b' x$ j5 R- o( A
** Set the serializers, Currently only one serializer is set as# o, u& p( _1 K/ g
** transmitter and one serializer as receiver.
  c& \3 y( @$ A' Z' O3 n. \" V1 ~*/
* }! t! r( M, n5 f1 C/ qMcASPSerializerRxSet(SOC_MCASP_0_CTRL_REGS, MCASP_XSER_RX);
# N( f" o6 R3 X4 ]0 Q$ i* `" n* A0 o& G' SMcASPSerializerTxSet(SOC_MCASP_0_CTRL_REGS, MCASP_XSER_TX);
/*/ O9 f8 N) P0 P' O# V7 ~, Q
** Configure the McASP pins
/ {% p9 {  m$ B** Input - Frame Sync, Clock and Serializer Rx
2 c' F, `% E& k/ Y** Output - Serializer Tx is connected to the input of the codec 1 z, c) w: I' F  t
*/; T* }* M) q1 j+ C* l& G
McASPPinMcASPSet(SOC_MCASP_0_CTRL_REGS, 0xFFFFFFFF);. i+ r7 E1 X9 S, I2 F2 L0 v
McASPPinDirOutputSet(SOC_MCASP_0_CTRL_REGS,MCASP_PIN_AXR(MCASP_XSER_TX));
- i8 d! z" M3 j7 `: I! |McASPPinDirInputSet(SOC_MCASP_0_CTRL_REGS, MCASP_PIN_AFSX
5 W  ^' W5 h' S4 [' ]| MCASP_PIN_ACLKX4 e9 a- C5 l4 o. j$ a8 U  J' `
| MCASP_PIN_AHCLKX
( ^" k3 Y, f0 Z4 K" K! L# @5 Q# Z| MCASP_PIN_AXR(MCASP_XSER_RX));
/* Enable error interrupts for McASP */
1 a3 p5 N# h6 H' A8 M& a' CMcASPTxIntEnable(SOC_MCASP_0_CTRL_REGS, MCASP_TX_DMAERROR
* g- f2 Z3 Z0 L1 ^: K% \| MCASP_TX_CLKFAIL # y; o1 L7 ^0 W* j0 K
| MCASP_TX_SYNCERROR
$ `2 N; @5 w) ~/ L- X8 C6 _| MCASP_TX_UNDERRUN);
McASPRxIntEnable(SOC_MCASP_0_CTRL_REGS, MCASP_RX_DMAERROR
' u  G# D' W8 ], u3 a1 z| MCASP_RX_CLKFAIL
6 U! u/ g4 s& g6 X| MCASP_RX_SYNCERROR # I# Z) q+ [1 ^9 b# y
| MCASP_RX_OVERRUN);
, F5 `9 O0 y' V% b3 A}
static void I2SDataTxRxActivate(void)
8 h; `6 p& M3 y( B{
6 U& u* B* O2 L/* Start the clocks */
! S1 h6 s6 h; z) f, q" p+ dMcASPRxClkStart(SOC_MCASP_0_CTRL_REGS, MCASP_RX_CLK_EXTERNAL);
/ l' Y, M- C$ eMcASPTxClkStart(SOC_MCASP_0_CTRL_REGS, MCASP_TX_CLK_INTERNAL);
/* Enable EDMA for the transfer */
& Y5 b( d7 W& |' O5 fEDMA3EnableTransfer(SOC_EDMA30CC_0_REGS, EDMA3_CHA_MCASP0_RX,+ s3 z4 b% L& v4 k, p( n; {
EDMA3_TRIG_MODE_EVENT);1 F6 ?& @: t8 Z9 X3 l& [' |
EDMA3EnableTransfer(SOC_EDMA30CC_0_REGS, 7 S( W/ A- M9 l1 M( C. w
EDMA3_CHA_MCASP0_TX, EDMA3_TRIG_MODE_EVENT);
/* Activate the serializers */1 s, p: m0 L& g/ M# q7 t
McASPRxSerActivate(SOC_MCASP_0_CTRL_REGS);
& ]6 ]' a0 t$ h4 n' \- VMcASPTxSerActivate(SOC_MCASP_0_CTRL_REGS);
/* make sure that the XDATA bit is cleared to zero */  D7 N. v2 ~! ^( u0 r7 J
while(McASPTxStatusGet(SOC_MCASP_0_CTRL_REGS) & MCASP_TX_STAT_DATAREADY);
/* Activate the state machines */
# ~3 k( h( s# C' cMcASPRxEnable(SOC_MCASP_0_CTRL_REGS);
# Y- b' @- X) @* GMcASPTxEnable(SOC_MCASP_0_CTRL_REGS);6 Y% p8 N9 u& |. }* P3 K
}

# @) {" ]! ^" |2 r
请问:问题出在哪了,时钟按照这样配是否有错。
另外我看XDATA一直是0,接收的rxbuf0,1,2里有一般全是FFFF一半全是0.
/ n* Z- z; e5 P3 R1 n( q7 C





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