嵌入式开发者社区

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

作者: wapdasta    时间: 2018-11-7 13:28
标题: MCASP自环配置。
我项目上用OMAPL138的板子MCASP的引脚都是链接的FPGA,所以在FPGA这端设置的MCASP自环。把axr0接收到的通过axr1发回去。
部分代码如下
input mcasp_afsx,) L' r; D# S9 M, t& [% q5 f5 N7 r
input mcasp_ahclkx,
3 z, O. |2 @- S0 _: Y7 X/ U; A" cinput mcasp_aclkx,- B5 ~/ {: o6 z, k9 W& W$ @
input axr0,; |; y8 p' q8 t' @! C

7 `9 y$ n/ E9 T/ S: y0 C8 `output mcasp_afsr,
8 B8 [2 B' V1 M5 E" e- \output mcasp_ahclkr,/ _3 \+ ]5 F9 f+ P" k4 W3 {
output mcasp_aclkr," ?* r* T) v2 j8 i) G& U. _! [
output axr1,& b( m7 s+ m, e( |! L
assign mcasp_afsr = mcasp_afsx;0 P* h9 H; S& r
assign mcasp_aclkr = mcasp_aclkx;4 w3 J" a  K$ l5 w7 q0 @% T5 F* _
assign mcasp_ahclkr = mcasp_ahclkx;
, A5 ^/ M! O( M& u& G# Oassign axr1 = axr0;
* S3 O* g! v7 ], P
9 u/ z4 U9 x3 v$ o2 L2 W
在OMAPL138这端,通过axr0接口发固定的数,axr1接收。
在配置MACASP的时候,发送全部取内部时钟,接收全部取外部时钟。
一直循环发送,但是接收不到。在FPGA端也没有看到时钟和信号的波形。
部分代码如下,关于edma3的部分未做变化。

1 F8 ^' C. G4 D9 G1 _. ]
static void McASPI2SConfigure(void)
% R1 _# C: \3 d) M{
- U4 c0 I0 Q8 v  QMcASPRxReset(SOC_MCASP_0_CTRL_REGS);
; P" Q/ x% m. U5 nMcASPTxReset(SOC_MCASP_0_CTRL_REGS);
/* Enable the FIFOs for DMA transfer */
+ F, [* p, ~  DMcASPReadFifoEnable(SOC_MCASP_0_FIFO_REGS, 1, 1);* g. W& ~/ j! @5 e' ]- c8 {
McASPWriteFifoEnable(SOC_MCASP_0_FIFO_REGS, 1, 1);
/* Set I2S format in the transmitter/receiver format units */# a; C( C0 ~% ]- O
McASPRxFmtI2SSet(SOC_MCASP_0_CTRL_REGS, WORD_SIZE, SLOT_SIZE,
7 c  n9 X2 x  }/ q, L! M, XMCASP_RX_MODE_DMA);
3 B3 p* `7 t4 F0 ?% C5 q8 UMcASPTxFmtI2SSet(SOC_MCASP_0_CTRL_REGS, WORD_SIZE, SLOT_SIZE,, w3 A0 V/ D) x; @
MCASP_TX_MODE_DMA);
/* Configure the frame sync. I2S shall work in TDM format with 2 slots */
( [7 f4 }5 S5 E0 c: j8 {3 p2 eMcASPRxFrameSyncCfg(SOC_MCASP_0_CTRL_REGS, 2, MCASP_RX_FS_WIDTH_WORD,
  A, D) ]0 Y& ^. S9 @MCASP_RX_FS_EXT_BEGIN_ON_FALL_EDGE);
- |* }( {* H) n, {0 FMcASPTxFrameSyncCfg(SOC_MCASP_0_CTRL_REGS, 2, MCASP_TX_FS_WIDTH_WORD, ' x0 q: {, i" D9 d+ j' [8 F
MCASP_TX_FS_INT_BEGIN_ON_RIS_EDGE);
/* configure the clock for receiver */
' H+ M: l8 y4 [5 kMcASPRxClkCfg(SOC_MCASP_0_CTRL_REGS, MCASP_RX_CLK_EXTERNAL, 0, 0);3 h# b% n2 B% y
McASPRxClkPolaritySet(SOC_MCASP_0_CTRL_REGS, MCASP_RX_CLK_POL_RIS_EDGE); 4 f$ S* A/ x" E7 H0 [$ h
McASPRxClkCheckConfig(SOC_MCASP_0_CTRL_REGS, MCASP_RX_CLKCHCK_DIV32,$ o, D9 A' Z4 L7 {* r" j
0x00, 0xFF);
/* configure the clock for transmitter */
2 z8 _2 Z" p& i9 MMcASPTxClkCfg(SOC_MCASP_0_CTRL_REGS, MCASP_TX_CLK_INTERNAL, 11, 1);* d9 q( n# q' @# U5 @7 g
McASPTxClkPolaritySet(SOC_MCASP_0_CTRL_REGS, MCASP_TX_CLK_POL_FALL_EDGE); ) @0 V' r2 ~7 u
McASPTxClkCheckConfig(SOC_MCASP_0_CTRL_REGS, MCASP_TX_CLKCHCK_DIV32,
4 e% l1 R4 E% n0 ?0x00, 0xFF);
) x! T8 c' [) |" v1 x% |- \3 O( r$ S, N
/* Enable synchronization of RX and TX sections */
7 @; S% L# W+ W( PMcASPTxRxClkSyncEnable(SOC_MCASP_0_CTRL_REGS);
/* Enable the transmitter/receiver slots. I2S uses 2 slots */0 T# L9 Q/ g/ i" ]
McASPRxTimeSlotSet(SOC_MCASP_0_CTRL_REGS, I2S_SLOTS);
/ G7 n0 ~, g" Z( \McASPTxTimeSlotSet(SOC_MCASP_0_CTRL_REGS, I2S_SLOTS);
/*/ c  W% D9 j) V
** Set the serializers, Currently only one serializer is set as
% R0 J0 G% v7 `** transmitter and one serializer as receiver.
1 o$ }+ w% Y0 Y: B*/
: s' G+ ]  z& f; B' R0 OMcASPSerializerRxSet(SOC_MCASP_0_CTRL_REGS, MCASP_XSER_RX);
* _8 p& p' U! |& ~/ f  e  c% mMcASPSerializerTxSet(SOC_MCASP_0_CTRL_REGS, MCASP_XSER_TX);
/*
) e9 i8 P; i6 f! T** Configure the McASP pins
. J) L- E+ w3 ?** Input - Frame Sync, Clock and Serializer Rx  Q$ R, D0 [0 z4 U% ^2 m# z
** Output - Serializer Tx is connected to the input of the codec
& W* ?4 F" Z. Q* y; ?3 [*/6 J5 b- d+ h- F. S# y8 A5 S
McASPPinMcASPSet(SOC_MCASP_0_CTRL_REGS, 0xFFFFFFFF);8 ]; O- P* T. w- e& Z; X4 c& D
McASPPinDirOutputSet(SOC_MCASP_0_CTRL_REGS,MCASP_PIN_AXR(MCASP_XSER_TX));  z' l9 h' @* z% P2 g; y
McASPPinDirInputSet(SOC_MCASP_0_CTRL_REGS, MCASP_PIN_AFSX" `2 w; _$ Z- w" A9 K: J( g
| MCASP_PIN_ACLKX7 l8 E4 `" [7 t) G- N& \1 [
| MCASP_PIN_AHCLKX
! U! ?6 T* t$ ?2 Y9 x. M$ a, V# J| MCASP_PIN_AXR(MCASP_XSER_RX));
/* Enable error interrupts for McASP */
" A& `0 {2 O; g- e3 ~2 MMcASPTxIntEnable(SOC_MCASP_0_CTRL_REGS, MCASP_TX_DMAERROR
7 N: {5 H" N$ ~. u4 X9 y; [7 D5 ^* [0 M| MCASP_TX_CLKFAIL
( ^" `& {; d+ d. S8 z  ^& }| MCASP_TX_SYNCERROR
# Z/ E8 v* Z) n" {- t+ x| MCASP_TX_UNDERRUN);
McASPRxIntEnable(SOC_MCASP_0_CTRL_REGS, MCASP_RX_DMAERROR 1 [$ {: }) H) t& l9 G% H" Y. Q  S
| MCASP_RX_CLKFAIL8 o. W) c# O" ]6 m4 g; l; @" f: d/ u
| MCASP_RX_SYNCERROR
* Z' {- V" K  e+ N| MCASP_RX_OVERRUN);' w- u& p5 e  j& s; c0 M' m
}
static void I2SDataTxRxActivate(void)
( ^, O1 v, w2 @! ]* c{
% ^0 n5 L$ i4 j6 f7 f9 @/* Start the clocks */! w1 U# P$ K/ N. D' [) G
McASPRxClkStart(SOC_MCASP_0_CTRL_REGS, MCASP_RX_CLK_EXTERNAL);
1 o5 {6 v8 }- i0 Y0 [) bMcASPTxClkStart(SOC_MCASP_0_CTRL_REGS, MCASP_TX_CLK_INTERNAL);
/* Enable EDMA for the transfer *// v- _* l; \7 J2 E& Y! F' T: _, a
EDMA3EnableTransfer(SOC_EDMA30CC_0_REGS, EDMA3_CHA_MCASP0_RX,$ V' R6 Z6 T; _! @/ {2 Y/ l
EDMA3_TRIG_MODE_EVENT);
. A" }2 O1 S  Q/ n# F1 R4 QEDMA3EnableTransfer(SOC_EDMA30CC_0_REGS, + ]' [$ a0 H( }. H. T9 Y
EDMA3_CHA_MCASP0_TX, EDMA3_TRIG_MODE_EVENT);
/* Activate the serializers */( w( I% Q6 p. h& E! h' t
McASPRxSerActivate(SOC_MCASP_0_CTRL_REGS);
" C( R6 _* `/ f) z! cMcASPTxSerActivate(SOC_MCASP_0_CTRL_REGS);
/* make sure that the XDATA bit is cleared to zero */
/ _  ]2 \. g! V& O7 [while(McASPTxStatusGet(SOC_MCASP_0_CTRL_REGS) & MCASP_TX_STAT_DATAREADY);
/* Activate the state machines */. C5 J1 p' c# }2 |. o! u
McASPRxEnable(SOC_MCASP_0_CTRL_REGS);4 f/ q' x5 |" l3 }; s0 k+ @" n& ^, \
McASPTxEnable(SOC_MCASP_0_CTRL_REGS);
6 D& Q/ ^4 j: A1 E6 P8 |, Y}
) u; W9 b% V: L2 |8 t) a
请问:问题出在哪了,时钟按照这样配是否有错。
另外我看XDATA一直是0,接收的rxbuf0,1,2里有一般全是FFFF一半全是0.

& n& J. m' k5 M- _: @! [




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