嵌入式开发者社区

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

作者: wapdasta    时间: 2018-11-7 13:28
标题: MCASP自环配置。
我项目上用OMAPL138的板子MCASP的引脚都是链接的FPGA,所以在FPGA这端设置的MCASP自环。把axr0接收到的通过axr1发回去。
部分代码如下
input mcasp_afsx,
7 S) H; f. l4 s" d% Sinput mcasp_ahclkx,
  N1 ^$ Z9 v+ |input mcasp_aclkx,
9 n+ |/ g, U2 I  a3 P, Hinput axr0,8 B2 D* e; L" B9 @$ _2 K/ e. O
9 S3 `* C7 s, K# B  G3 }
output mcasp_afsr,
6 m! J/ R6 M" x9 h4 g% I) r" |output mcasp_ahclkr,% |, ~! [$ c2 ?' |! e1 J3 x
output mcasp_aclkr,
' l3 f1 l% G1 T' S" E& k6 s4 ]output axr1,, }$ @( @' r* \
assign mcasp_afsr = mcasp_afsx;$ b* z7 @5 u+ A. f( l
assign mcasp_aclkr = mcasp_aclkx;
1 u# ~( z: D+ M& j6 r/ Cassign mcasp_ahclkr = mcasp_ahclkx;) e# v$ ?) |- A0 d
assign axr1 = axr0;
3 u& J  X+ h1 C

' {' L/ x5 n/ X4 r. F: p. G# ^
在OMAPL138这端,通过axr0接口发固定的数,axr1接收。
在配置MACASP的时候,发送全部取内部时钟,接收全部取外部时钟。
一直循环发送,但是接收不到。在FPGA端也没有看到时钟和信号的波形。
部分代码如下,关于edma3的部分未做变化。
# J$ R( y; d: g6 p0 l' n8 H
static void McASPI2SConfigure(void): r) I; e7 e* w; ?
{
3 A1 l7 k" k7 u8 ~" D+ MMcASPRxReset(SOC_MCASP_0_CTRL_REGS);
. \8 x& p2 _. t; jMcASPTxReset(SOC_MCASP_0_CTRL_REGS);
/* Enable the FIFOs for DMA transfer */1 \4 S  G, S+ I1 r: |" G
McASPReadFifoEnable(SOC_MCASP_0_FIFO_REGS, 1, 1);
7 ^9 F0 ]6 f$ z4 g. MMcASPWriteFifoEnable(SOC_MCASP_0_FIFO_REGS, 1, 1);
/* Set I2S format in the transmitter/receiver format units */9 B+ n) E3 {0 C& M8 x
McASPRxFmtI2SSet(SOC_MCASP_0_CTRL_REGS, WORD_SIZE, SLOT_SIZE,' S- K/ s: B) b- F) S. o0 f8 S0 y
MCASP_RX_MODE_DMA);
; |# r: v! ?' J  k/ {( PMcASPTxFmtI2SSet(SOC_MCASP_0_CTRL_REGS, WORD_SIZE, SLOT_SIZE,5 _2 y, o/ Q4 \! Y( Y9 C  Y3 i* ~
MCASP_TX_MODE_DMA);
/* Configure the frame sync. I2S shall work in TDM format with 2 slots */( Y% V- K0 [' _) T9 |  i% y
McASPRxFrameSyncCfg(SOC_MCASP_0_CTRL_REGS, 2, MCASP_RX_FS_WIDTH_WORD,
. T% Y4 ^# c& [4 u- U  gMCASP_RX_FS_EXT_BEGIN_ON_FALL_EDGE);; {$ Y5 C5 w  Q; h+ x. G
McASPTxFrameSyncCfg(SOC_MCASP_0_CTRL_REGS, 2, MCASP_TX_FS_WIDTH_WORD,
8 Q3 _' P8 P" xMCASP_TX_FS_INT_BEGIN_ON_RIS_EDGE);
/* configure the clock for receiver */
+ ^0 l  j+ G3 T8 S, sMcASPRxClkCfg(SOC_MCASP_0_CTRL_REGS, MCASP_RX_CLK_EXTERNAL, 0, 0);
3 W! t6 \( U% G7 q- @McASPRxClkPolaritySet(SOC_MCASP_0_CTRL_REGS, MCASP_RX_CLK_POL_RIS_EDGE); ' j* q4 U' u. x, [: L
McASPRxClkCheckConfig(SOC_MCASP_0_CTRL_REGS, MCASP_RX_CLKCHCK_DIV32," w3 E7 n) s$ t
0x00, 0xFF);
/* configure the clock for transmitter */
* T/ E4 U1 ]  j0 k- V8 l0 x0 uMcASPTxClkCfg(SOC_MCASP_0_CTRL_REGS, MCASP_TX_CLK_INTERNAL, 11, 1);
' {4 @' I5 r6 u' Y/ B# PMcASPTxClkPolaritySet(SOC_MCASP_0_CTRL_REGS, MCASP_TX_CLK_POL_FALL_EDGE); * `' j% }, p! a+ o( D1 t- o# w
McASPTxClkCheckConfig(SOC_MCASP_0_CTRL_REGS, MCASP_TX_CLKCHCK_DIV32,7 E' m  Z, a0 I9 ?
0x00, 0xFF);, m2 R3 r0 m2 z$ Q

8 o/ V( o, Y* v0 U$ u/ c3 w3 G/* Enable synchronization of RX and TX sections */ ; @% `' e; c1 J9 W0 \# @0 n8 }6 u% L5 K
McASPTxRxClkSyncEnable(SOC_MCASP_0_CTRL_REGS);
/* Enable the transmitter/receiver slots. I2S uses 2 slots */3 _8 ^" K5 A% m+ {8 Q
McASPRxTimeSlotSet(SOC_MCASP_0_CTRL_REGS, I2S_SLOTS);! Q3 U4 _  N/ m" A
McASPTxTimeSlotSet(SOC_MCASP_0_CTRL_REGS, I2S_SLOTS);
/*! y- k; |8 r& C" w* A9 N* g
** Set the serializers, Currently only one serializer is set as
; f3 s5 w, y( O2 z5 o% P** transmitter and one serializer as receiver.0 I  @" N( p7 x! M5 D- U$ Q
*/
  b$ p5 R; }- i" `McASPSerializerRxSet(SOC_MCASP_0_CTRL_REGS, MCASP_XSER_RX);
( X% m, V2 \% l, `McASPSerializerTxSet(SOC_MCASP_0_CTRL_REGS, MCASP_XSER_TX);
/*. Q  g) d- B, r7 Z$ w9 w
** Configure the McASP pins - M, \6 @# y: F4 V6 ]* r7 _
** Input - Frame Sync, Clock and Serializer Rx- L* C# d; |9 i+ A6 b; Q4 H
** Output - Serializer Tx is connected to the input of the codec
9 a0 m: a" ~  I) T- S  r*/
8 l3 x/ [* s/ I" g0 @5 AMcASPPinMcASPSet(SOC_MCASP_0_CTRL_REGS, 0xFFFFFFFF);
# n& a/ r0 N" H; M8 A% EMcASPPinDirOutputSet(SOC_MCASP_0_CTRL_REGS,MCASP_PIN_AXR(MCASP_XSER_TX));
) ]+ y. D8 \4 ]$ _) z( F1 L+ fMcASPPinDirInputSet(SOC_MCASP_0_CTRL_REGS, MCASP_PIN_AFSX
/ x- j, e- A/ }. |9 U4 M( z| MCASP_PIN_ACLKX$ E( k0 u9 e/ k; d6 U) S' @* n, _
| MCASP_PIN_AHCLKX  M" \; f+ q" P8 h  c& P
| MCASP_PIN_AXR(MCASP_XSER_RX));
/* Enable error interrupts for McASP */
' B3 S; d' F1 V4 k9 Z' h* q. fMcASPTxIntEnable(SOC_MCASP_0_CTRL_REGS, MCASP_TX_DMAERROR
, z% M& b- q2 _9 P5 g. m| MCASP_TX_CLKFAIL & Q& |" n/ F& f1 ]: q
| MCASP_TX_SYNCERROR
9 t, D" m: S& M/ E, d4 }) n| MCASP_TX_UNDERRUN);
McASPRxIntEnable(SOC_MCASP_0_CTRL_REGS, MCASP_RX_DMAERROR
$ \- T' V) M* A6 H* k| MCASP_RX_CLKFAIL1 h; b. N7 m2 L2 q( B8 n
| MCASP_RX_SYNCERROR
# G) `" G. O, u* U/ J5 V| MCASP_RX_OVERRUN);& W7 N3 l1 c7 z) K. V" b& M  G" l
}
static void I2SDataTxRxActivate(void)
$ b  r) p! V& _6 u( n{
# V4 I8 F3 R+ S, A" n/* Start the clocks */
2 g3 _. ~# q& e  ~: OMcASPRxClkStart(SOC_MCASP_0_CTRL_REGS, MCASP_RX_CLK_EXTERNAL);
3 _4 ^2 {5 t' W" |McASPTxClkStart(SOC_MCASP_0_CTRL_REGS, MCASP_TX_CLK_INTERNAL);
/* Enable EDMA for the transfer */3 S% o; l5 N/ r, e
EDMA3EnableTransfer(SOC_EDMA30CC_0_REGS, EDMA3_CHA_MCASP0_RX,6 h( b& h' Z0 A& U7 M
EDMA3_TRIG_MODE_EVENT);
; Z2 K4 M& Q6 l/ I: F1 w* ]EDMA3EnableTransfer(SOC_EDMA30CC_0_REGS,
# Q* O( Z+ f5 T* n# i! VEDMA3_CHA_MCASP0_TX, EDMA3_TRIG_MODE_EVENT);
/* Activate the serializers */9 h$ v) Z6 \5 j
McASPRxSerActivate(SOC_MCASP_0_CTRL_REGS);
) ^  Z. o( ?3 u& d( \" }8 uMcASPTxSerActivate(SOC_MCASP_0_CTRL_REGS);
/* make sure that the XDATA bit is cleared to zero */7 E# b' S- U$ S& u
while(McASPTxStatusGet(SOC_MCASP_0_CTRL_REGS) & MCASP_TX_STAT_DATAREADY);
/* Activate the state machines */9 V. ?. n- `) I  Y8 N' j' a
McASPRxEnable(SOC_MCASP_0_CTRL_REGS);4 t0 Y$ G7 a5 L! j9 V
McASPTxEnable(SOC_MCASP_0_CTRL_REGS);% N" E" g5 _( `, N5 e
}
3 u* ]$ Q, w! F5 {; f
请问:问题出在哪了,时钟按照这样配是否有错。
另外我看XDATA一直是0,接收的rxbuf0,1,2里有一般全是FFFF一半全是0.

8 w. z+ N* }& }( E" a9 _) D1 N




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