嵌入式开发者社区

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

作者: wapdasta    时间: 2018-11-7 13:28
标题: MCASP自环配置。
我项目上用OMAPL138的板子MCASP的引脚都是链接的FPGA,所以在FPGA这端设置的MCASP自环。把axr0接收到的通过axr1发回去。
部分代码如下
input mcasp_afsx,6 t9 v# a5 g# A8 N
input mcasp_ahclkx,2 W3 @5 o$ J5 [4 [* H  F/ q+ t6 O
input mcasp_aclkx,
  C, Q* r. B( b# E+ Z# |7 l, dinput axr0,
& P* d% Q2 _1 [" l7 y
0 n/ d4 h9 h# G1 {# foutput mcasp_afsr,
) I. r9 w  h6 D. z! V0 Q: n7 Routput mcasp_ahclkr,
" \2 W/ f' v- |) K' P) t: V& goutput mcasp_aclkr,
& t6 L1 O4 j) T( X0 ?  S: `output axr1,
8 i  e2 O4 K* R; X& g  p$ M
assign mcasp_afsr = mcasp_afsx;
6 s, R! D% i6 ?  n- _assign mcasp_aclkr = mcasp_aclkx;6 u. Y0 m. s8 h7 ^8 d
assign mcasp_ahclkr = mcasp_ahclkx;6 d- ~5 a* @  o1 h
assign axr1 = axr0;
0 `/ A! C% y6 Q# T6 R0 B

5 t; N) X* w6 {2 @9 e
在OMAPL138这端,通过axr0接口发固定的数,axr1接收。
在配置MACASP的时候,发送全部取内部时钟,接收全部取外部时钟。
一直循环发送,但是接收不到。在FPGA端也没有看到时钟和信号的波形。
部分代码如下,关于edma3的部分未做变化。

0 J. `& @7 X4 s; ?
static void McASPI2SConfigure(void)- ^1 P$ I1 n  E; `# [% r2 p
{
2 T; c8 h/ q6 |5 Z; N% R7 Y, U0 [: \McASPRxReset(SOC_MCASP_0_CTRL_REGS);
1 g7 @0 `. _# ]: \; Y% q$ u2 fMcASPTxReset(SOC_MCASP_0_CTRL_REGS);
/* Enable the FIFOs for DMA transfer */1 K2 T8 A+ i% g: G' w
McASPReadFifoEnable(SOC_MCASP_0_FIFO_REGS, 1, 1);2 J  S- U9 c1 H8 m7 G5 X+ O
McASPWriteFifoEnable(SOC_MCASP_0_FIFO_REGS, 1, 1);
/* Set I2S format in the transmitter/receiver format units */
) x. O) E# O2 V+ l1 G! q, f# cMcASPRxFmtI2SSet(SOC_MCASP_0_CTRL_REGS, WORD_SIZE, SLOT_SIZE,3 ]/ ]$ w3 Q9 ^/ R6 F, {
MCASP_RX_MODE_DMA);. S, d' [7 N7 R
McASPTxFmtI2SSet(SOC_MCASP_0_CTRL_REGS, WORD_SIZE, SLOT_SIZE,2 n, J- m8 C8 ~4 j! C+ ?
MCASP_TX_MODE_DMA);
/* Configure the frame sync. I2S shall work in TDM format with 2 slots */5 _8 S/ w( H4 @0 _! ^8 j
McASPRxFrameSyncCfg(SOC_MCASP_0_CTRL_REGS, 2, MCASP_RX_FS_WIDTH_WORD, 0 E; {5 S- U6 [. {
MCASP_RX_FS_EXT_BEGIN_ON_FALL_EDGE);/ x! w, z$ t/ L, I$ Q7 O' e& |0 I+ m
McASPTxFrameSyncCfg(SOC_MCASP_0_CTRL_REGS, 2, MCASP_TX_FS_WIDTH_WORD,
5 ^( X3 X0 L) q. O* `MCASP_TX_FS_INT_BEGIN_ON_RIS_EDGE);
/* configure the clock for receiver */
) t& t* H& J! V; S! G* {) bMcASPRxClkCfg(SOC_MCASP_0_CTRL_REGS, MCASP_RX_CLK_EXTERNAL, 0, 0);& n0 C' h9 D6 @' C6 g. Y2 Q
McASPRxClkPolaritySet(SOC_MCASP_0_CTRL_REGS, MCASP_RX_CLK_POL_RIS_EDGE);
! z5 c0 R) \6 S8 V8 @& ~! i  h5 T. t4 mMcASPRxClkCheckConfig(SOC_MCASP_0_CTRL_REGS, MCASP_RX_CLKCHCK_DIV32,- p/ ~0 u( z. a" |1 r
0x00, 0xFF);
/* configure the clock for transmitter */
" j5 V/ Q7 H0 `( y: H1 m& b2 QMcASPTxClkCfg(SOC_MCASP_0_CTRL_REGS, MCASP_TX_CLK_INTERNAL, 11, 1);' m3 s& L, @& E* o
McASPTxClkPolaritySet(SOC_MCASP_0_CTRL_REGS, MCASP_TX_CLK_POL_FALL_EDGE);
( K3 W$ O! q! `McASPTxClkCheckConfig(SOC_MCASP_0_CTRL_REGS, MCASP_TX_CLKCHCK_DIV32,% _0 D  _& M3 J$ g! W0 P! U
0x00, 0xFF);
) G$ r, @; M/ W& L$ [) ~  F
8 ?, W! K1 f: W" c- U+ s/* Enable synchronization of RX and TX sections */
! d# c+ U) A5 _# ~4 O2 b3 bMcASPTxRxClkSyncEnable(SOC_MCASP_0_CTRL_REGS);
/* Enable the transmitter/receiver slots. I2S uses 2 slots */
! L4 f; x2 G) n9 M" KMcASPRxTimeSlotSet(SOC_MCASP_0_CTRL_REGS, I2S_SLOTS);
( c/ a- P' {, t7 n% T) Y! q9 j; \" [McASPTxTimeSlotSet(SOC_MCASP_0_CTRL_REGS, I2S_SLOTS);
/*
+ U) \) W; J  B** Set the serializers, Currently only one serializer is set as
4 U* r  E6 K) k' C- f** transmitter and one serializer as receiver.$ g! r1 e4 @, Y; o
*/* H# Q! p: C2 y, ~! P
McASPSerializerRxSet(SOC_MCASP_0_CTRL_REGS, MCASP_XSER_RX);2 D9 R  ]( M6 x0 W& G4 W5 s$ P
McASPSerializerTxSet(SOC_MCASP_0_CTRL_REGS, MCASP_XSER_TX);
/*
, X$ s- G1 w3 ?1 F' |. h6 I. @0 q** Configure the McASP pins
2 W0 a4 a9 m  [" d" l3 H** Input - Frame Sync, Clock and Serializer Rx
2 Y- B) i: R% V9 L& k2 ?1 J: Y** Output - Serializer Tx is connected to the input of the codec
" o% o7 @& T% h  T* O$ J*/. W8 n* l8 D7 k3 [" ]" t
McASPPinMcASPSet(SOC_MCASP_0_CTRL_REGS, 0xFFFFFFFF);( Z( o0 W% q$ _
McASPPinDirOutputSet(SOC_MCASP_0_CTRL_REGS,MCASP_PIN_AXR(MCASP_XSER_TX));- y, N" o7 i6 X' H; ]) b' D* U3 J
McASPPinDirInputSet(SOC_MCASP_0_CTRL_REGS, MCASP_PIN_AFSX# {; x% j5 Q9 Y* d  Z1 ?
| MCASP_PIN_ACLKX
0 ]1 `; \, O' B: u( a  i9 s( j, L+ @| MCASP_PIN_AHCLKX
/ k% g$ I3 p/ n, i) }| MCASP_PIN_AXR(MCASP_XSER_RX));
/* Enable error interrupts for McASP */* v0 S- u# V2 D; B( Z
McASPTxIntEnable(SOC_MCASP_0_CTRL_REGS, MCASP_TX_DMAERROR 6 F  G* L. \! ~# @
| MCASP_TX_CLKFAIL
4 O( |6 Q4 [$ u% D# F! C; e| MCASP_TX_SYNCERROR# s6 P- c+ F8 c6 q6 @2 w
| MCASP_TX_UNDERRUN);
McASPRxIntEnable(SOC_MCASP_0_CTRL_REGS, MCASP_RX_DMAERROR , H5 R* m& O' r8 p3 K3 d! F$ ]7 I
| MCASP_RX_CLKFAIL! P# c3 P0 J$ a/ X4 t
| MCASP_RX_SYNCERROR
7 }2 B: K% ]! W4 }& S3 z" c; ^| MCASP_RX_OVERRUN);
$ {2 B- k8 Z  @4 y) C* e; _, x: R" H6 V}
static void I2SDataTxRxActivate(void)
$ w: F! |- o. ^5 n{1 U. W/ A1 d0 X% S' j2 |  J- \
/* Start the clocks */$ e) {$ ?: D/ L5 T  @6 |+ m  C
McASPRxClkStart(SOC_MCASP_0_CTRL_REGS, MCASP_RX_CLK_EXTERNAL);
) ~1 K/ n; H! d2 _0 X0 J1 |+ n- M( ^! p2 aMcASPTxClkStart(SOC_MCASP_0_CTRL_REGS, MCASP_TX_CLK_INTERNAL);
/* Enable EDMA for the transfer */
3 u5 w8 G3 k3 O7 j- n% X) REDMA3EnableTransfer(SOC_EDMA30CC_0_REGS, EDMA3_CHA_MCASP0_RX,) a: r$ L6 c$ {9 X! u2 A
EDMA3_TRIG_MODE_EVENT);: |  ^7 y2 o1 N* N( z, i* Q
EDMA3EnableTransfer(SOC_EDMA30CC_0_REGS, ) p4 o1 V6 R, q" q; i; Y
EDMA3_CHA_MCASP0_TX, EDMA3_TRIG_MODE_EVENT);
/* Activate the serializers */
4 {' c% u/ R6 s; L' I* [McASPRxSerActivate(SOC_MCASP_0_CTRL_REGS);' V) L8 b! a+ P# x) P
McASPTxSerActivate(SOC_MCASP_0_CTRL_REGS);
/* make sure that the XDATA bit is cleared to zero */! h$ p; k& o9 ], X) @3 Y7 p
while(McASPTxStatusGet(SOC_MCASP_0_CTRL_REGS) & MCASP_TX_STAT_DATAREADY);
/* Activate the state machines */
. C, e3 H: u) {* qMcASPRxEnable(SOC_MCASP_0_CTRL_REGS);. ^1 }% s0 m) h4 Y
McASPTxEnable(SOC_MCASP_0_CTRL_REGS);
, X" \" b3 d* Z7 e}
: s0 T+ R2 i) _6 ~
请问:问题出在哪了,时钟按照这样配是否有错。
另外我看XDATA一直是0,接收的rxbuf0,1,2里有一般全是FFFF一半全是0.

! B: d% `: j' `  |; `




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