嵌入式开发者社区

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

作者: wapdasta    时间: 2018-11-7 13:28
标题: MCASP自环配置。
我项目上用OMAPL138的板子MCASP的引脚都是链接的FPGA,所以在FPGA这端设置的MCASP自环。把axr0接收到的通过axr1发回去。
部分代码如下
input mcasp_afsx,4 H/ P9 o2 F5 j, ?. u4 L$ b
input mcasp_ahclkx,1 Q2 t3 O4 N) t) W
input mcasp_aclkx,/ k- {2 ~2 _2 @
input axr0,
, z+ p  F3 v2 t% u) ]! ~
8 G/ \, U# `1 q4 J$ f2 g& }- a- Ooutput mcasp_afsr,! @( z% r( f0 O# l- `
output mcasp_ahclkr,
& Y  U: {* P: l4 |4 h! woutput mcasp_aclkr,4 j+ x. Y# U# [
output axr1,
+ }- ^  d% p: H: `+ A( s- E
assign mcasp_afsr = mcasp_afsx;, h- _5 a4 f1 f4 H2 N
assign mcasp_aclkr = mcasp_aclkx;
" n' O6 t: T1 y5 g- zassign mcasp_ahclkr = mcasp_ahclkx;
& ?' ]& Z2 |- y9 o8 U; ]6 jassign axr1 = axr0;
2 G# g# o0 m. D5 u6 q+ ]
" G$ s5 T! f* ]4 ^* U) d# J' f
在OMAPL138这端,通过axr0接口发固定的数,axr1接收。
在配置MACASP的时候,发送全部取内部时钟,接收全部取外部时钟。
一直循环发送,但是接收不到。在FPGA端也没有看到时钟和信号的波形。
部分代码如下,关于edma3的部分未做变化。

/ p& }, s/ f3 v8 v. O% e  n7 c
static void McASPI2SConfigure(void)! `2 G3 d1 |  w# O
{7 H; U) f7 J. n$ n1 w4 a
McASPRxReset(SOC_MCASP_0_CTRL_REGS);
- A* b5 l; V3 Y5 nMcASPTxReset(SOC_MCASP_0_CTRL_REGS);
/* Enable the FIFOs for DMA transfer */
1 i$ m6 w& Q/ N+ D4 T) |6 l6 \McASPReadFifoEnable(SOC_MCASP_0_FIFO_REGS, 1, 1);
; O4 C; [+ Q/ S0 p+ _1 W" s. ~% N0 x% BMcASPWriteFifoEnable(SOC_MCASP_0_FIFO_REGS, 1, 1);
/* Set I2S format in the transmitter/receiver format units */
/ f: i; a4 N9 D  e* M7 t, [McASPRxFmtI2SSet(SOC_MCASP_0_CTRL_REGS, WORD_SIZE, SLOT_SIZE,
( A9 h+ f/ d( S3 m1 f" GMCASP_RX_MODE_DMA);
( z8 D9 p' N3 q. C4 T, T0 qMcASPTxFmtI2SSet(SOC_MCASP_0_CTRL_REGS, WORD_SIZE, SLOT_SIZE,  a4 [4 ?3 {4 L8 n6 d. Z, r
MCASP_TX_MODE_DMA);
/* Configure the frame sync. I2S shall work in TDM format with 2 slots */& J  o5 H6 @2 ?' I  k4 d. T
McASPRxFrameSyncCfg(SOC_MCASP_0_CTRL_REGS, 2, MCASP_RX_FS_WIDTH_WORD,
7 g# R; s+ v5 S$ DMCASP_RX_FS_EXT_BEGIN_ON_FALL_EDGE);
4 N$ c/ W& _, d; x2 AMcASPTxFrameSyncCfg(SOC_MCASP_0_CTRL_REGS, 2, MCASP_TX_FS_WIDTH_WORD, 4 z! M3 \7 V5 H! ^
MCASP_TX_FS_INT_BEGIN_ON_RIS_EDGE);
/* configure the clock for receiver */! V0 H, z& A; p5 ~6 h& G8 B
McASPRxClkCfg(SOC_MCASP_0_CTRL_REGS, MCASP_RX_CLK_EXTERNAL, 0, 0);/ |' E2 `% z4 Y; q( h) d7 B
McASPRxClkPolaritySet(SOC_MCASP_0_CTRL_REGS, MCASP_RX_CLK_POL_RIS_EDGE);
6 ~6 T8 e" f+ O* K2 X+ fMcASPRxClkCheckConfig(SOC_MCASP_0_CTRL_REGS, MCASP_RX_CLKCHCK_DIV32,6 D; w9 m5 \8 p2 I) [
0x00, 0xFF);
/* configure the clock for transmitter */( p- r7 t; ^4 S( u0 y
McASPTxClkCfg(SOC_MCASP_0_CTRL_REGS, MCASP_TX_CLK_INTERNAL, 11, 1);) k! Y! k) m% c0 {
McASPTxClkPolaritySet(SOC_MCASP_0_CTRL_REGS, MCASP_TX_CLK_POL_FALL_EDGE);
8 S, i: p$ L" u" c) a1 T5 o2 q3 uMcASPTxClkCheckConfig(SOC_MCASP_0_CTRL_REGS, MCASP_TX_CLKCHCK_DIV32,
: ^9 `8 t! _6 V; {0 o; v0x00, 0xFF);
) v* [2 G" g7 {8 E' s, s) I
2 A% g- q; R* h' [" M* C/* Enable synchronization of RX and TX sections */ 0 g# m/ `- }+ e5 b
McASPTxRxClkSyncEnable(SOC_MCASP_0_CTRL_REGS);
/* Enable the transmitter/receiver slots. I2S uses 2 slots */
$ ~+ [) D# @( Q) r" H$ l, wMcASPRxTimeSlotSet(SOC_MCASP_0_CTRL_REGS, I2S_SLOTS);
- x. Q) W, \; R- }7 _  |2 UMcASPTxTimeSlotSet(SOC_MCASP_0_CTRL_REGS, I2S_SLOTS);
/*
4 P. [% e' ~, l- X' l6 E) t** Set the serializers, Currently only one serializer is set as/ m& Z/ ~! Q/ ~
** transmitter and one serializer as receiver., ~) t7 U. `) I
*/  B+ K" i3 K1 s# n
McASPSerializerRxSet(SOC_MCASP_0_CTRL_REGS, MCASP_XSER_RX);# s3 a5 G2 J' C% r
McASPSerializerTxSet(SOC_MCASP_0_CTRL_REGS, MCASP_XSER_TX);
/*
0 u/ w" r% }& l- `- B** Configure the McASP pins ! a: E5 E. S' m" _  I8 j
** Input - Frame Sync, Clock and Serializer Rx* q) L+ Q6 j' {2 m# p1 O
** Output - Serializer Tx is connected to the input of the codec
6 V2 |( [1 z, t# F*/4 H, I. l. M0 A' t' |* R: f; k
McASPPinMcASPSet(SOC_MCASP_0_CTRL_REGS, 0xFFFFFFFF);3 e, S: P4 C/ A5 E6 V% O* b
McASPPinDirOutputSet(SOC_MCASP_0_CTRL_REGS,MCASP_PIN_AXR(MCASP_XSER_TX));
$ f6 J* G2 h! ~2 `! I, w- Z2 `McASPPinDirInputSet(SOC_MCASP_0_CTRL_REGS, MCASP_PIN_AFSX
# w' Q4 s1 c' P4 r$ t4 I| MCASP_PIN_ACLKX
# O' B' o5 M/ c- r5 [4 }% V* k| MCASP_PIN_AHCLKX7 Y0 q( ]/ `0 D4 T. F  Q
| MCASP_PIN_AXR(MCASP_XSER_RX));
/* Enable error interrupts for McASP */
* }% }* U" Y) N3 E, }% ~1 rMcASPTxIntEnable(SOC_MCASP_0_CTRL_REGS, MCASP_TX_DMAERROR
7 M- f' ]0 i2 c7 _2 T; P| MCASP_TX_CLKFAIL 5 i( I1 }9 ]5 ^% Q& z, J0 J
| MCASP_TX_SYNCERROR7 g* w3 I' V0 X$ }
| MCASP_TX_UNDERRUN);
McASPRxIntEnable(SOC_MCASP_0_CTRL_REGS, MCASP_RX_DMAERROR % @6 \4 V7 ?9 v
| MCASP_RX_CLKFAIL! q% j, P+ M5 A. t. A
| MCASP_RX_SYNCERROR 0 H& a$ ^/ k, R
| MCASP_RX_OVERRUN);& g: Y* W2 T# s
}
static void I2SDataTxRxActivate(void)! D& q+ g( |: Z' t$ Z2 j7 l. R
{* Z% r: h0 O$ _, b
/* Start the clocks */4 ]/ T4 ^( y7 Z9 x* l
McASPRxClkStart(SOC_MCASP_0_CTRL_REGS, MCASP_RX_CLK_EXTERNAL);/ u$ F' h( L( d( g
McASPTxClkStart(SOC_MCASP_0_CTRL_REGS, MCASP_TX_CLK_INTERNAL);
/* Enable EDMA for the transfer */
6 n# k: Z8 z: w+ z6 yEDMA3EnableTransfer(SOC_EDMA30CC_0_REGS, EDMA3_CHA_MCASP0_RX,
8 u: O8 L* M$ Z; B4 pEDMA3_TRIG_MODE_EVENT);2 P5 K3 c" x: q2 S
EDMA3EnableTransfer(SOC_EDMA30CC_0_REGS, - s! J' W' G4 T( w4 P& s
EDMA3_CHA_MCASP0_TX, EDMA3_TRIG_MODE_EVENT);
/* Activate the serializers */
9 k& M6 j* e! _! `/ `* ?  wMcASPRxSerActivate(SOC_MCASP_0_CTRL_REGS);
- q6 o0 J5 r7 Q/ d; EMcASPTxSerActivate(SOC_MCASP_0_CTRL_REGS);
/* make sure that the XDATA bit is cleared to zero */
+ V5 b6 J. P/ {% x7 z1 v# l  Ywhile(McASPTxStatusGet(SOC_MCASP_0_CTRL_REGS) & MCASP_TX_STAT_DATAREADY);
/* Activate the state machines */+ N& `2 ~0 v; W5 q2 J4 @7 Z6 s
McASPRxEnable(SOC_MCASP_0_CTRL_REGS);5 b' V4 {  R8 }8 x: \
McASPTxEnable(SOC_MCASP_0_CTRL_REGS);
; t) W- I* {7 n; P5 w: H9 q# w# ]8 ]}

& S0 N* x9 j1 {+ \$ [/ {  ~7 w
请问:问题出在哪了,时钟按照这样配是否有错。
另外我看XDATA一直是0,接收的rxbuf0,1,2里有一般全是FFFF一半全是0.
& g' a4 W8 s2 K3 S6 z# ~





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