嵌入式开发者社区

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

作者: wapdasta    时间: 2018-11-7 13:28
标题: MCASP自环配置。
我项目上用OMAPL138的板子MCASP的引脚都是链接的FPGA,所以在FPGA这端设置的MCASP自环。把axr0接收到的通过axr1发回去。
部分代码如下
input mcasp_afsx,$ w: t% X7 V+ h
input mcasp_ahclkx,. ~) N8 ]( G% ?
input mcasp_aclkx,
6 [; ?; R6 S" b; \input axr0,
+ W, L  \+ |/ V; w! i
) Z/ F9 Q  @$ u6 loutput mcasp_afsr,
9 z- Q# e. ^+ w( @/ `' q2 Eoutput mcasp_ahclkr,0 _0 t+ _# l/ K; d8 l
output mcasp_aclkr,
4 \: _4 L7 g6 F: O) xoutput axr1,5 D; y4 P% i! b2 Z
assign mcasp_afsr = mcasp_afsx;5 ?5 u! \# G. f6 V8 k( m
assign mcasp_aclkr = mcasp_aclkx;6 j6 y# ?- y+ m$ [% U7 A+ _
assign mcasp_ahclkr = mcasp_ahclkx;
0 p5 l1 {) W' |6 R( s* m: `assign axr1 = axr0;
# ^3 V9 ^3 ]. B7 A
7 `- C: y; r6 n" L- t2 o8 k4 y7 P
在OMAPL138这端,通过axr0接口发固定的数,axr1接收。
在配置MACASP的时候,发送全部取内部时钟,接收全部取外部时钟。
一直循环发送,但是接收不到。在FPGA端也没有看到时钟和信号的波形。
部分代码如下,关于edma3的部分未做变化。
& T4 U  j; T' ]" ?% ]6 M  |6 C
static void McASPI2SConfigure(void)
  @6 l5 ?" Z5 E) W/ ?! ?# ~{+ i: `9 x0 h8 y4 n# w
McASPRxReset(SOC_MCASP_0_CTRL_REGS);
9 _8 C$ P% y+ e! Z/ jMcASPTxReset(SOC_MCASP_0_CTRL_REGS);
/* Enable the FIFOs for DMA transfer */5 _) l5 n8 a0 a# X( B# c/ f
McASPReadFifoEnable(SOC_MCASP_0_FIFO_REGS, 1, 1);9 P! d9 ~6 q: w$ ]- a+ P
McASPWriteFifoEnable(SOC_MCASP_0_FIFO_REGS, 1, 1);
/* Set I2S format in the transmitter/receiver format units */
2 c; ?& E- h6 c2 ~2 ~# aMcASPRxFmtI2SSet(SOC_MCASP_0_CTRL_REGS, WORD_SIZE, SLOT_SIZE,5 b6 U$ x6 v* n) W  n, M
MCASP_RX_MODE_DMA);; H9 `7 o5 @4 c, Y! ~: X
McASPTxFmtI2SSet(SOC_MCASP_0_CTRL_REGS, WORD_SIZE, SLOT_SIZE,
1 ?) j1 n: B: n2 V. CMCASP_TX_MODE_DMA);
/* Configure the frame sync. I2S shall work in TDM format with 2 slots */
5 h/ G% E1 R; B8 C: e: O' cMcASPRxFrameSyncCfg(SOC_MCASP_0_CTRL_REGS, 2, MCASP_RX_FS_WIDTH_WORD, * ?+ n. V5 _9 u1 N5 r: ?# t3 p
MCASP_RX_FS_EXT_BEGIN_ON_FALL_EDGE);
7 _; V" c; x# k) N6 D. TMcASPTxFrameSyncCfg(SOC_MCASP_0_CTRL_REGS, 2, MCASP_TX_FS_WIDTH_WORD,
0 y- v1 e, q0 ?1 U/ C% x% ?% FMCASP_TX_FS_INT_BEGIN_ON_RIS_EDGE);
/* configure the clock for receiver */
/ a7 B! M6 o# V  g* {McASPRxClkCfg(SOC_MCASP_0_CTRL_REGS, MCASP_RX_CLK_EXTERNAL, 0, 0);
0 _1 e' y, H6 X$ U8 CMcASPRxClkPolaritySet(SOC_MCASP_0_CTRL_REGS, MCASP_RX_CLK_POL_RIS_EDGE);
8 k" E4 q( S$ Z9 m# G' @McASPRxClkCheckConfig(SOC_MCASP_0_CTRL_REGS, MCASP_RX_CLKCHCK_DIV32,7 `$ l& Q& ]0 ?
0x00, 0xFF);
/* configure the clock for transmitter */
; Y( A* i$ W! z# Z- g6 s. _- F! ~McASPTxClkCfg(SOC_MCASP_0_CTRL_REGS, MCASP_TX_CLK_INTERNAL, 11, 1);5 P" M0 }5 r  `; a5 B* U
McASPTxClkPolaritySet(SOC_MCASP_0_CTRL_REGS, MCASP_TX_CLK_POL_FALL_EDGE); - x" `# n' Z* p( Y- n( ^& g" @
McASPTxClkCheckConfig(SOC_MCASP_0_CTRL_REGS, MCASP_TX_CLKCHCK_DIV32,8 n; j* V  h& q& ~* T
0x00, 0xFF);+ a  i( L1 s5 W' B

, [4 O6 x' B' L0 K  f4 \0 p/* Enable synchronization of RX and TX sections */
4 |. C+ R4 V8 m& Y/ Z$ Z5 {McASPTxRxClkSyncEnable(SOC_MCASP_0_CTRL_REGS);
/* Enable the transmitter/receiver slots. I2S uses 2 slots */3 i: s- F1 b/ r$ z6 Y! j( ?
McASPRxTimeSlotSet(SOC_MCASP_0_CTRL_REGS, I2S_SLOTS);
/ L* H9 E5 w" F) s7 o/ oMcASPTxTimeSlotSet(SOC_MCASP_0_CTRL_REGS, I2S_SLOTS);
/*
8 ?+ g( E8 k4 y! h! W& r. W** Set the serializers, Currently only one serializer is set as
0 ^/ C0 G( v2 a, W** transmitter and one serializer as receiver.; v4 F9 l; b, {. T" Z) E
*/
% g, R/ o" _3 J: U/ w/ L; g7 D* HMcASPSerializerRxSet(SOC_MCASP_0_CTRL_REGS, MCASP_XSER_RX);
' M  k+ J: V7 D! _McASPSerializerTxSet(SOC_MCASP_0_CTRL_REGS, MCASP_XSER_TX);
/*/ u3 ~+ b+ W  W0 ]2 L
** Configure the McASP pins * o; w% ?/ J( d
** Input - Frame Sync, Clock and Serializer Rx; {- R" l( q5 V. r: H
** Output - Serializer Tx is connected to the input of the codec
# z# {* ^2 Y/ ^; j5 K*/
9 v6 A5 D% t. P# `: A, A5 R3 G, S7 [McASPPinMcASPSet(SOC_MCASP_0_CTRL_REGS, 0xFFFFFFFF);" ], S8 a  k) c) c9 C2 g
McASPPinDirOutputSet(SOC_MCASP_0_CTRL_REGS,MCASP_PIN_AXR(MCASP_XSER_TX));  u1 X4 @# n3 `# h' \0 P5 r6 z& E
McASPPinDirInputSet(SOC_MCASP_0_CTRL_REGS, MCASP_PIN_AFSX' n$ Y- T4 t: F  A* j- `
| MCASP_PIN_ACLKX: D1 D& U4 X0 r6 P' G" T9 U3 O+ a
| MCASP_PIN_AHCLKX
  t' Q) p( J  J3 V: x& Z| MCASP_PIN_AXR(MCASP_XSER_RX));
/* Enable error interrupts for McASP */+ q! h) [3 j0 B. ]- I3 O2 ]4 u
McASPTxIntEnable(SOC_MCASP_0_CTRL_REGS, MCASP_TX_DMAERROR
+ K+ F) {! ?+ S2 m( Q2 ~1 `7 n| MCASP_TX_CLKFAIL
% H: c/ q7 I- F- r1 D| MCASP_TX_SYNCERROR( r( \+ @& M" A1 c3 p
| MCASP_TX_UNDERRUN);
McASPRxIntEnable(SOC_MCASP_0_CTRL_REGS, MCASP_RX_DMAERROR
; m! n4 E- \. S  l. A| MCASP_RX_CLKFAIL
0 o* i  ]% L$ W' n1 V- X| MCASP_RX_SYNCERROR 9 N9 j! H* B# r0 S& G! F: Q
| MCASP_RX_OVERRUN);0 K8 c# p! Q) V
}
static void I2SDataTxRxActivate(void)
  N! {2 H$ A- Y' E6 t3 ?! r{% w+ a- c8 X: ~+ P- G% m( G
/* Start the clocks */- k! [9 \8 U4 o6 _
McASPRxClkStart(SOC_MCASP_0_CTRL_REGS, MCASP_RX_CLK_EXTERNAL);# U; G, U- d+ [, P/ r
McASPTxClkStart(SOC_MCASP_0_CTRL_REGS, MCASP_TX_CLK_INTERNAL);
/* Enable EDMA for the transfer */
, i; w$ o" `& m0 g, sEDMA3EnableTransfer(SOC_EDMA30CC_0_REGS, EDMA3_CHA_MCASP0_RX,
, q* [, ?$ g4 X3 y# [EDMA3_TRIG_MODE_EVENT);( m& [& M3 n$ i* f" P# J
EDMA3EnableTransfer(SOC_EDMA30CC_0_REGS,
, H  m5 z+ s$ ]- QEDMA3_CHA_MCASP0_TX, EDMA3_TRIG_MODE_EVENT);
/* Activate the serializers */" U% ]  d5 ]5 ?
McASPRxSerActivate(SOC_MCASP_0_CTRL_REGS);
5 v% D4 i. n7 f  YMcASPTxSerActivate(SOC_MCASP_0_CTRL_REGS);
/* make sure that the XDATA bit is cleared to zero */
, C/ `$ S9 x) u$ ~5 ywhile(McASPTxStatusGet(SOC_MCASP_0_CTRL_REGS) & MCASP_TX_STAT_DATAREADY);
/* Activate the state machines */0 n# P5 y- S% v$ k- ^2 f
McASPRxEnable(SOC_MCASP_0_CTRL_REGS);7 ]* x$ i6 |% u. |. e6 ]) ?2 N
McASPTxEnable(SOC_MCASP_0_CTRL_REGS);  S* X* @! U" ]) S
}
: m' D1 m! _9 J5 G
请问:问题出在哪了,时钟按照这样配是否有错。
另外我看XDATA一直是0,接收的rxbuf0,1,2里有一般全是FFFF一半全是0.

3 s" g- N+ ?0 D; T# U, h




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