嵌入式开发者社区

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

作者: wapdasta    时间: 2018-11-7 13:28
标题: MCASP自环配置。
我项目上用OMAPL138的板子MCASP的引脚都是链接的FPGA,所以在FPGA这端设置的MCASP自环。把axr0接收到的通过axr1发回去。
部分代码如下
input mcasp_afsx,
+ N! x' r2 P7 q9 A( Kinput mcasp_ahclkx,' c4 Y3 ]. H# b& ~+ M0 F; X3 J
input mcasp_aclkx,$ G! u0 |, M3 x* ]1 e9 ~! }- g
input axr0,2 u3 n( o0 Z, I; _4 o( q. g1 A, z

& S: @7 @" D2 P# g& ?( Coutput mcasp_afsr,, x$ }* V, ^5 f
output mcasp_ahclkr,
, J. t+ d3 G2 K+ E! aoutput mcasp_aclkr,
, H7 h9 g, f$ e' m' n" F+ }output axr1,7 l' J5 \9 ^4 e8 O
assign mcasp_afsr = mcasp_afsx;
' n* c) K! a5 t# E% Hassign mcasp_aclkr = mcasp_aclkx;
3 [" G* g% `9 _9 [' y+ w$ gassign mcasp_ahclkr = mcasp_ahclkx;
; D' ^, d& D) A& b. ^6 Y$ _assign axr1 = axr0;

4 z( @9 T2 [  ~: v+ h, }, b4 s* b
在OMAPL138这端,通过axr0接口发固定的数,axr1接收。
在配置MACASP的时候,发送全部取内部时钟,接收全部取外部时钟。
一直循环发送,但是接收不到。在FPGA端也没有看到时钟和信号的波形。
部分代码如下,关于edma3的部分未做变化。

$ Q  J+ l! B5 q! G* q
static void McASPI2SConfigure(void): ?5 q! I3 J+ d% Q+ Q8 m" @( u; z
{: e4 O2 Y" ~4 g  s. ?0 A
McASPRxReset(SOC_MCASP_0_CTRL_REGS);, w+ Q+ i7 W, f1 R
McASPTxReset(SOC_MCASP_0_CTRL_REGS);
/* Enable the FIFOs for DMA transfer */
3 W0 E, r3 C$ X% uMcASPReadFifoEnable(SOC_MCASP_0_FIFO_REGS, 1, 1);) x$ P  I0 W4 V8 \; _+ v5 A
McASPWriteFifoEnable(SOC_MCASP_0_FIFO_REGS, 1, 1);
/* Set I2S format in the transmitter/receiver format units */
# T# [0 ]7 X% k! I" v% [! |2 GMcASPRxFmtI2SSet(SOC_MCASP_0_CTRL_REGS, WORD_SIZE, SLOT_SIZE,
/ r) X! |$ l! {) ]$ _6 AMCASP_RX_MODE_DMA);5 z& D( X" D* z3 _3 u! l# z
McASPTxFmtI2SSet(SOC_MCASP_0_CTRL_REGS, WORD_SIZE, SLOT_SIZE,, f1 i) J: U/ H9 W
MCASP_TX_MODE_DMA);
/* Configure the frame sync. I2S shall work in TDM format with 2 slots */
. [$ m. [: {, lMcASPRxFrameSyncCfg(SOC_MCASP_0_CTRL_REGS, 2, MCASP_RX_FS_WIDTH_WORD, / f. v: j/ U" U4 `+ @3 g
MCASP_RX_FS_EXT_BEGIN_ON_FALL_EDGE);
; T7 i' K) s( U3 G3 YMcASPTxFrameSyncCfg(SOC_MCASP_0_CTRL_REGS, 2, MCASP_TX_FS_WIDTH_WORD, ' ?5 L; _+ G+ @: F5 c* n2 y9 y
MCASP_TX_FS_INT_BEGIN_ON_RIS_EDGE);
/* configure the clock for receiver */9 F& R) o# @( K0 C) V/ V
McASPRxClkCfg(SOC_MCASP_0_CTRL_REGS, MCASP_RX_CLK_EXTERNAL, 0, 0);
# h9 a. h" N) |! G) t& c- k& FMcASPRxClkPolaritySet(SOC_MCASP_0_CTRL_REGS, MCASP_RX_CLK_POL_RIS_EDGE); ! b" G) n. Z$ J: L" H" H# T" d
McASPRxClkCheckConfig(SOC_MCASP_0_CTRL_REGS, MCASP_RX_CLKCHCK_DIV32,8 {/ Z  P1 v! \. s; N. x+ e
0x00, 0xFF);
/* configure the clock for transmitter */, j' n2 k1 Y$ I4 j, M7 o$ x
McASPTxClkCfg(SOC_MCASP_0_CTRL_REGS, MCASP_TX_CLK_INTERNAL, 11, 1);
, h2 @7 F7 t( [3 iMcASPTxClkPolaritySet(SOC_MCASP_0_CTRL_REGS, MCASP_TX_CLK_POL_FALL_EDGE); ! z% j3 g+ L% |( \
McASPTxClkCheckConfig(SOC_MCASP_0_CTRL_REGS, MCASP_TX_CLKCHCK_DIV32,
2 ~/ s, h& a8 C- T9 i3 s/ w0x00, 0xFF);
" m3 m# p; C. C/ n6 X% \2 R$ [' Y$ Q6 X2 \& [
/* Enable synchronization of RX and TX sections */
4 C- l# W* g& S: C( J; P9 [McASPTxRxClkSyncEnable(SOC_MCASP_0_CTRL_REGS);
/* Enable the transmitter/receiver slots. I2S uses 2 slots */
  s, N& U4 z7 a& p+ CMcASPRxTimeSlotSet(SOC_MCASP_0_CTRL_REGS, I2S_SLOTS);
* A( K4 `. f7 ?8 OMcASPTxTimeSlotSet(SOC_MCASP_0_CTRL_REGS, I2S_SLOTS);
/*6 E* D$ G: `& j4 j- ^/ m7 j  s
** Set the serializers, Currently only one serializer is set as
0 {! K* b& i' K: K** transmitter and one serializer as receiver.
+ X0 C( I# c" l& t3 B: ^7 v*/% ^! g6 P2 [, b9 D* m4 v' y1 c& g8 J, R
McASPSerializerRxSet(SOC_MCASP_0_CTRL_REGS, MCASP_XSER_RX);
* C% R: C5 ]/ ~: V+ FMcASPSerializerTxSet(SOC_MCASP_0_CTRL_REGS, MCASP_XSER_TX);
/*$ Z! s! }- N7 S/ z5 V
** Configure the McASP pins / P- S' V  o! s" A
** Input - Frame Sync, Clock and Serializer Rx  c) t, @0 E* ]9 a7 p  a
** Output - Serializer Tx is connected to the input of the codec 6 j& K1 c' j$ m! M( J
*/( l! P) c1 [! `6 z2 H& C, E+ a
McASPPinMcASPSet(SOC_MCASP_0_CTRL_REGS, 0xFFFFFFFF);
7 K' z) b8 ~$ ~$ h/ AMcASPPinDirOutputSet(SOC_MCASP_0_CTRL_REGS,MCASP_PIN_AXR(MCASP_XSER_TX));6 l' ]9 G: |! E# |" E& ?+ F
McASPPinDirInputSet(SOC_MCASP_0_CTRL_REGS, MCASP_PIN_AFSX$ N  T+ E8 F2 u3 W* ~
| MCASP_PIN_ACLKX, _) s5 [; |& Q
| MCASP_PIN_AHCLKX' j. K, o7 z8 `( z1 A3 k6 z$ z5 M* q
| MCASP_PIN_AXR(MCASP_XSER_RX));
/* Enable error interrupts for McASP */, a+ i' m; e  Y, i. n7 S
McASPTxIntEnable(SOC_MCASP_0_CTRL_REGS, MCASP_TX_DMAERROR
+ Q4 Q, L  D3 M5 U$ c  Z& F| MCASP_TX_CLKFAIL
; L0 ?4 z4 z4 y3 K* u( c| MCASP_TX_SYNCERROR, m  d5 s# p0 i" I1 o$ N; Z- g
| MCASP_TX_UNDERRUN);
McASPRxIntEnable(SOC_MCASP_0_CTRL_REGS, MCASP_RX_DMAERROR 3 K$ B/ M" X1 V. D3 ~
| MCASP_RX_CLKFAIL
) n9 U' J& h( o| MCASP_RX_SYNCERROR + A; S  w* \) f4 V8 P4 P5 ?3 @6 `
| MCASP_RX_OVERRUN);8 ]% @' U8 Y, @, L
}
static void I2SDataTxRxActivate(void)* P+ S, p3 X' b+ v  \& J
{. d4 ?! Q, k: _5 A) N; g& ]+ ~6 S
/* Start the clocks */
# O4 o4 n9 Q/ u! KMcASPRxClkStart(SOC_MCASP_0_CTRL_REGS, MCASP_RX_CLK_EXTERNAL);/ q0 P/ ~) `% k
McASPTxClkStart(SOC_MCASP_0_CTRL_REGS, MCASP_TX_CLK_INTERNAL);
/* Enable EDMA for the transfer */
1 S6 o3 v6 n7 s1 n* gEDMA3EnableTransfer(SOC_EDMA30CC_0_REGS, EDMA3_CHA_MCASP0_RX,) b0 Z% Q' C1 u  W
EDMA3_TRIG_MODE_EVENT);
( c& K7 ]' H$ i7 W# r) l* XEDMA3EnableTransfer(SOC_EDMA30CC_0_REGS,
) }+ J# g9 [2 J0 `! O% K  UEDMA3_CHA_MCASP0_TX, EDMA3_TRIG_MODE_EVENT);
/* Activate the serializers */3 x8 A% F5 ^# d: d
McASPRxSerActivate(SOC_MCASP_0_CTRL_REGS);# A0 V0 [8 F# c
McASPTxSerActivate(SOC_MCASP_0_CTRL_REGS);
/* make sure that the XDATA bit is cleared to zero */
4 k8 _1 \, j) A& j. t! Cwhile(McASPTxStatusGet(SOC_MCASP_0_CTRL_REGS) & MCASP_TX_STAT_DATAREADY);
/* Activate the state machines */1 z) d. d. S' f! D* T. `
McASPRxEnable(SOC_MCASP_0_CTRL_REGS);9 f6 r8 N0 ]5 Q: n/ |4 V! w: M
McASPTxEnable(SOC_MCASP_0_CTRL_REGS);' ^# S2 S$ T* B
}
, n6 y1 `1 Y9 E
请问:问题出在哪了,时钟按照这样配是否有错。
另外我看XDATA一直是0,接收的rxbuf0,1,2里有一般全是FFFF一半全是0.

& g+ e8 y3 U  n4 v




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