嵌入式开发者社区

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

作者: wapdasta    时间: 2018-11-7 13:28
标题: MCASP自环配置。
我项目上用OMAPL138的板子MCASP的引脚都是链接的FPGA,所以在FPGA这端设置的MCASP自环。把axr0接收到的通过axr1发回去。
部分代码如下
input mcasp_afsx,
0 M2 i' c7 ^# {% j: w% N) ]5 Hinput mcasp_ahclkx,
( ~: _2 A8 L4 s7 x( Vinput mcasp_aclkx,  H+ c& S/ Q! d
input axr0,
+ n7 i6 J% K' ^6 P" P1 f( l  d0 Y8 ?( y6 I
output mcasp_afsr,) ]! l2 Z. u# y' s' V; i
output mcasp_ahclkr,# I2 F" [4 \9 g4 i5 S; m+ `
output mcasp_aclkr,9 C0 \* i3 H" p* |( y! [. l0 d7 T% W
output axr1,! O5 j$ q8 Y) {' D
assign mcasp_afsr = mcasp_afsx;
& N0 _3 V( V$ g: z8 Q) Gassign mcasp_aclkr = mcasp_aclkx;& a+ c/ b% c' _9 \: v& h
assign mcasp_ahclkr = mcasp_ahclkx;
9 Z- e$ o8 h$ E- j: W$ n5 tassign axr1 = axr0;
: o8 Q/ v6 v9 E5 n

7 E* L& H! P! J
在OMAPL138这端,通过axr0接口发固定的数,axr1接收。
在配置MACASP的时候,发送全部取内部时钟,接收全部取外部时钟。
一直循环发送,但是接收不到。在FPGA端也没有看到时钟和信号的波形。
部分代码如下,关于edma3的部分未做变化。

8 ]9 u5 a* n* l8 g
static void McASPI2SConfigure(void)
- k" i5 X3 ]- M" m2 k) P. |{9 r9 V" ^& U& H# q
McASPRxReset(SOC_MCASP_0_CTRL_REGS);& A; m% K3 ]# I# W  _
McASPTxReset(SOC_MCASP_0_CTRL_REGS);
/* Enable the FIFOs for DMA transfer */" v# H: j' g$ q7 n" d/ x
McASPReadFifoEnable(SOC_MCASP_0_FIFO_REGS, 1, 1);3 P; |& a/ T+ I3 B; P3 t
McASPWriteFifoEnable(SOC_MCASP_0_FIFO_REGS, 1, 1);
/* Set I2S format in the transmitter/receiver format units */+ E% `/ l; _- ~1 F
McASPRxFmtI2SSet(SOC_MCASP_0_CTRL_REGS, WORD_SIZE, SLOT_SIZE,
3 [; m; r9 }' B) _3 l0 ?. W7 E: T7 s& uMCASP_RX_MODE_DMA);
( F- S: K8 T9 Z, R: E: hMcASPTxFmtI2SSet(SOC_MCASP_0_CTRL_REGS, WORD_SIZE, SLOT_SIZE,) c$ w' A6 S+ ]+ b2 _
MCASP_TX_MODE_DMA);
/* Configure the frame sync. I2S shall work in TDM format with 2 slots */6 s  D, W& @6 o3 M3 i$ S3 }! [
McASPRxFrameSyncCfg(SOC_MCASP_0_CTRL_REGS, 2, MCASP_RX_FS_WIDTH_WORD, & _. B% x7 u! q" |
MCASP_RX_FS_EXT_BEGIN_ON_FALL_EDGE);
; f6 U+ ^9 `+ |+ f0 I0 AMcASPTxFrameSyncCfg(SOC_MCASP_0_CTRL_REGS, 2, MCASP_TX_FS_WIDTH_WORD,
9 V. D2 G& F. p4 ]7 `" \: A& OMCASP_TX_FS_INT_BEGIN_ON_RIS_EDGE);
/* configure the clock for receiver */
2 J0 d* p) T8 v2 E, [, N& M! |% M& ?McASPRxClkCfg(SOC_MCASP_0_CTRL_REGS, MCASP_RX_CLK_EXTERNAL, 0, 0);1 q8 E9 |) f/ D# s( F
McASPRxClkPolaritySet(SOC_MCASP_0_CTRL_REGS, MCASP_RX_CLK_POL_RIS_EDGE);
' I) @$ M6 h9 j) x3 o0 z: p: P7 Q+ ?McASPRxClkCheckConfig(SOC_MCASP_0_CTRL_REGS, MCASP_RX_CLKCHCK_DIV32,
- _2 r: t. U* h0 @) F1 M0x00, 0xFF);
/* configure the clock for transmitter */# b# p) x$ d9 i
McASPTxClkCfg(SOC_MCASP_0_CTRL_REGS, MCASP_TX_CLK_INTERNAL, 11, 1);
/ p; O. o+ f, W) k) p" X$ o2 cMcASPTxClkPolaritySet(SOC_MCASP_0_CTRL_REGS, MCASP_TX_CLK_POL_FALL_EDGE); 0 v; O( F4 y5 ]
McASPTxClkCheckConfig(SOC_MCASP_0_CTRL_REGS, MCASP_TX_CLKCHCK_DIV32,
/ u' _) g4 m8 B2 P9 S0x00, 0xFF);5 Q9 [! R( J1 E) c: `
9 m! J  I. E3 _7 ?, h, w8 D* x
/* Enable synchronization of RX and TX sections */
# A4 S$ P0 }# C% f: P, x1 i+ _+ SMcASPTxRxClkSyncEnable(SOC_MCASP_0_CTRL_REGS);
/* Enable the transmitter/receiver slots. I2S uses 2 slots */
) Z$ n# v  V  D1 e4 v9 yMcASPRxTimeSlotSet(SOC_MCASP_0_CTRL_REGS, I2S_SLOTS);
+ D9 R' s* @: {6 Z( P; F  xMcASPTxTimeSlotSet(SOC_MCASP_0_CTRL_REGS, I2S_SLOTS);
/*$ x: R' e/ M# U/ J; l; P
** Set the serializers, Currently only one serializer is set as" U9 _: x) z* O
** transmitter and one serializer as receiver.
9 t6 O8 a! M) i0 F: K*/6 \$ W, H/ l$ Y9 F
McASPSerializerRxSet(SOC_MCASP_0_CTRL_REGS, MCASP_XSER_RX);" ]; {' \1 k5 V1 Y
McASPSerializerTxSet(SOC_MCASP_0_CTRL_REGS, MCASP_XSER_TX);
/*
; t5 u. Q$ O! y! j( d# M) [** Configure the McASP pins
  l( a. ]/ L& g** Input - Frame Sync, Clock and Serializer Rx
( _' u$ J$ _( T$ J$ e  I) n, |# |** Output - Serializer Tx is connected to the input of the codec ) Q8 k; W! D; [$ s: }
*/! ]; \: n5 W( U
McASPPinMcASPSet(SOC_MCASP_0_CTRL_REGS, 0xFFFFFFFF);
( |9 x- g6 h; h8 @, R  oMcASPPinDirOutputSet(SOC_MCASP_0_CTRL_REGS,MCASP_PIN_AXR(MCASP_XSER_TX));) _$ A: A" u5 c5 `9 Z1 ?
McASPPinDirInputSet(SOC_MCASP_0_CTRL_REGS, MCASP_PIN_AFSX; x1 x* I" _" m* J
| MCASP_PIN_ACLKX0 G6 ]' ^* f( ~$ o
| MCASP_PIN_AHCLKX$ `: N* j" \& g( A3 @6 r
| MCASP_PIN_AXR(MCASP_XSER_RX));
/* Enable error interrupts for McASP */% f" w, ]: h3 Y5 }4 J+ F0 d
McASPTxIntEnable(SOC_MCASP_0_CTRL_REGS, MCASP_TX_DMAERROR 1 c& f, K0 \* C, _7 ?2 L
| MCASP_TX_CLKFAIL
+ g3 S  A+ g8 |! L" @, e4 Y| MCASP_TX_SYNCERROR) A4 o4 [) Q! c5 w0 x1 w
| MCASP_TX_UNDERRUN);
McASPRxIntEnable(SOC_MCASP_0_CTRL_REGS, MCASP_RX_DMAERROR
/ p1 U  @) s/ h# {| MCASP_RX_CLKFAIL) l5 W3 d! N$ @. W% p0 T" q" o" \
| MCASP_RX_SYNCERROR
4 M9 Q+ X4 b8 ]/ g8 U| MCASP_RX_OVERRUN);0 ]8 i5 ?: z9 i4 e. U- E( A
}
static void I2SDataTxRxActivate(void)) G! l6 z' u( q, G
{
+ s; s3 I4 e0 b: h* m* p/* Start the clocks */( D6 f* D' F. E$ N6 [' s7 F" Y
McASPRxClkStart(SOC_MCASP_0_CTRL_REGS, MCASP_RX_CLK_EXTERNAL);+ z: M! d% x- J; [. @5 S+ {
McASPTxClkStart(SOC_MCASP_0_CTRL_REGS, MCASP_TX_CLK_INTERNAL);
/* Enable EDMA for the transfer */
* _9 V; v; ]; DEDMA3EnableTransfer(SOC_EDMA30CC_0_REGS, EDMA3_CHA_MCASP0_RX,
5 R9 Q; \9 P! n9 dEDMA3_TRIG_MODE_EVENT);! [' J+ q! q, U: k* _4 W9 ^! N7 J7 F' K
EDMA3EnableTransfer(SOC_EDMA30CC_0_REGS, 9 |" @2 L. W, s& m4 x
EDMA3_CHA_MCASP0_TX, EDMA3_TRIG_MODE_EVENT);
/* Activate the serializers */
: V5 ]: Q  J+ ^McASPRxSerActivate(SOC_MCASP_0_CTRL_REGS);* y8 C- Q- C3 M8 ?
McASPTxSerActivate(SOC_MCASP_0_CTRL_REGS);
/* make sure that the XDATA bit is cleared to zero */
+ }6 G: f; N- swhile(McASPTxStatusGet(SOC_MCASP_0_CTRL_REGS) & MCASP_TX_STAT_DATAREADY);
/* Activate the state machines */- {% g- }$ U$ U! P; R8 W
McASPRxEnable(SOC_MCASP_0_CTRL_REGS);
; D* g; s6 X/ W- _$ yMcASPTxEnable(SOC_MCASP_0_CTRL_REGS);9 E3 y/ K) B/ `& o2 S
}

. {+ ]3 P: l/ A
请问:问题出在哪了,时钟按照这样配是否有错。
另外我看XDATA一直是0,接收的rxbuf0,1,2里有一般全是FFFF一半全是0.

4 W4 I3 \) g& Y3 J3 x$ K0 W9 i, X& Y




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