嵌入式开发者社区

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

作者: wapdasta    时间: 2018-11-7 13:28
标题: MCASP自环配置。
我项目上用OMAPL138的板子MCASP的引脚都是链接的FPGA,所以在FPGA这端设置的MCASP自环。把axr0接收到的通过axr1发回去。
部分代码如下
input mcasp_afsx,2 o, l- w  @, a. s" \
input mcasp_ahclkx,/ K+ x( b' l2 m- {% u2 D
input mcasp_aclkx,
# E* n( ~( W1 m' uinput axr0,
8 F! r5 s0 c, Z7 V3 v7 \3 W
8 |' \: d2 m  v$ @* o) ?' H7 eoutput mcasp_afsr,2 s$ c; O9 ?9 p/ G% e( H  Z  C! u" l
output mcasp_ahclkr,! q# R" I" ?( R
output mcasp_aclkr,1 p$ j# d/ i  Q
output axr1,
, S, y1 a& j( q. a3 ]$ g) U
assign mcasp_afsr = mcasp_afsx;; V+ F6 z0 C, m7 h
assign mcasp_aclkr = mcasp_aclkx;
& q+ }. R0 |$ a( Hassign mcasp_ahclkr = mcasp_ahclkx;
! i  {8 F0 `9 ^  Dassign axr1 = axr0;

$ Q4 t0 a, z/ Y# Q; @
9 A3 M* p8 k3 t6 s, n% p, J- |
在OMAPL138这端,通过axr0接口发固定的数,axr1接收。
在配置MACASP的时候,发送全部取内部时钟,接收全部取外部时钟。
一直循环发送,但是接收不到。在FPGA端也没有看到时钟和信号的波形。
部分代码如下,关于edma3的部分未做变化。
! H! G/ P, z* X, y$ @  ^3 H0 h
static void McASPI2SConfigure(void)8 v- m7 u6 F8 S  G
{3 r* K, V' v2 m( I
McASPRxReset(SOC_MCASP_0_CTRL_REGS);. V9 ~9 b, |( X
McASPTxReset(SOC_MCASP_0_CTRL_REGS);
/* Enable the FIFOs for DMA transfer */7 n- W" r% y5 v) Z1 ?
McASPReadFifoEnable(SOC_MCASP_0_FIFO_REGS, 1, 1);* N4 A  F( F5 [# ~- ?3 g, [* u+ m; H* G
McASPWriteFifoEnable(SOC_MCASP_0_FIFO_REGS, 1, 1);
/* Set I2S format in the transmitter/receiver format units */
/ C" N: M8 |: R( J7 I/ E; [7 p6 s  u$ YMcASPRxFmtI2SSet(SOC_MCASP_0_CTRL_REGS, WORD_SIZE, SLOT_SIZE,
. L3 I% Q. P& A! {  KMCASP_RX_MODE_DMA);
& k) L' q0 Z/ \/ z5 LMcASPTxFmtI2SSet(SOC_MCASP_0_CTRL_REGS, WORD_SIZE, SLOT_SIZE,! C# y+ s. }0 F2 O; [  x& v$ Y
MCASP_TX_MODE_DMA);
/* Configure the frame sync. I2S shall work in TDM format with 2 slots */
" M/ `( |7 c$ j& }1 _9 [McASPRxFrameSyncCfg(SOC_MCASP_0_CTRL_REGS, 2, MCASP_RX_FS_WIDTH_WORD,
3 g/ M, C  i& F, @) w! GMCASP_RX_FS_EXT_BEGIN_ON_FALL_EDGE);, h3 _, L7 U+ K
McASPTxFrameSyncCfg(SOC_MCASP_0_CTRL_REGS, 2, MCASP_TX_FS_WIDTH_WORD, ! Q0 H6 C/ i, Y8 m8 w
MCASP_TX_FS_INT_BEGIN_ON_RIS_EDGE);
/* configure the clock for receiver */  K4 z9 p+ v6 g, k. i& j
McASPRxClkCfg(SOC_MCASP_0_CTRL_REGS, MCASP_RX_CLK_EXTERNAL, 0, 0);
6 y: F2 @" p; n+ A7 ?McASPRxClkPolaritySet(SOC_MCASP_0_CTRL_REGS, MCASP_RX_CLK_POL_RIS_EDGE); . k. w; M- K& d- c- `
McASPRxClkCheckConfig(SOC_MCASP_0_CTRL_REGS, MCASP_RX_CLKCHCK_DIV32,/ m$ h, T9 V. \. f
0x00, 0xFF);
/* configure the clock for transmitter */+ o, N! ?7 b! m
McASPTxClkCfg(SOC_MCASP_0_CTRL_REGS, MCASP_TX_CLK_INTERNAL, 11, 1);
, o1 f) p3 D- J; K2 u1 L2 yMcASPTxClkPolaritySet(SOC_MCASP_0_CTRL_REGS, MCASP_TX_CLK_POL_FALL_EDGE);
+ e- w5 O7 g* v) X; aMcASPTxClkCheckConfig(SOC_MCASP_0_CTRL_REGS, MCASP_TX_CLKCHCK_DIV32,9 F; e# X6 Z- o# G& T
0x00, 0xFF);
1 H1 O# Q# p% n# I1 @$ x. s& N. H0 |& n$ E: Y* q$ }$ T5 s# d
/* Enable synchronization of RX and TX sections */
# L6 C" Z  w' w. Y3 gMcASPTxRxClkSyncEnable(SOC_MCASP_0_CTRL_REGS);
/* Enable the transmitter/receiver slots. I2S uses 2 slots */! `$ F5 I9 q$ @2 H3 I) p
McASPRxTimeSlotSet(SOC_MCASP_0_CTRL_REGS, I2S_SLOTS);
9 m' k# |+ Y; lMcASPTxTimeSlotSet(SOC_MCASP_0_CTRL_REGS, I2S_SLOTS);
/*
! [* Z% e  w2 G& x( X2 a3 X** Set the serializers, Currently only one serializer is set as: I! }4 s% ]- ?. E) {" j
** transmitter and one serializer as receiver.' |! f" G* U2 V7 ]3 p9 E8 @
*/6 `% l5 k4 k* T. L7 \, x
McASPSerializerRxSet(SOC_MCASP_0_CTRL_REGS, MCASP_XSER_RX);
( j- R" i% O5 b, I! \9 dMcASPSerializerTxSet(SOC_MCASP_0_CTRL_REGS, MCASP_XSER_TX);
/*  m, y: c" |9 ^; K8 X  ^3 M
** Configure the McASP pins
5 O$ J8 q# K# |6 O8 x) f7 m% p** Input - Frame Sync, Clock and Serializer Rx* t1 q0 [) S1 L; T3 n4 l% ~4 _: d
** Output - Serializer Tx is connected to the input of the codec * Q) a, [, X2 c7 l* p
*/
0 ]/ t" \! L- G/ ]+ B( ]; ZMcASPPinMcASPSet(SOC_MCASP_0_CTRL_REGS, 0xFFFFFFFF);0 Q' F+ R$ G% M! P" V" I3 ?
McASPPinDirOutputSet(SOC_MCASP_0_CTRL_REGS,MCASP_PIN_AXR(MCASP_XSER_TX));4 x3 U# x1 A* g* d7 G% T
McASPPinDirInputSet(SOC_MCASP_0_CTRL_REGS, MCASP_PIN_AFSX5 ^8 v) v5 `0 X3 R
| MCASP_PIN_ACLKX& s, M: G! j' o- |0 X" G, S
| MCASP_PIN_AHCLKX$ R% M1 F+ U7 J( t5 p
| MCASP_PIN_AXR(MCASP_XSER_RX));
/* Enable error interrupts for McASP */
0 J) O/ H( f, n; AMcASPTxIntEnable(SOC_MCASP_0_CTRL_REGS, MCASP_TX_DMAERROR & i% o" D% U( P  k0 v( c
| MCASP_TX_CLKFAIL 8 Q$ M7 H  Q# o7 }! c5 w
| MCASP_TX_SYNCERROR
* j. C8 Q) A* b2 X2 ]3 v| MCASP_TX_UNDERRUN);
McASPRxIntEnable(SOC_MCASP_0_CTRL_REGS, MCASP_RX_DMAERROR
, q, W) C$ o% W6 Y| MCASP_RX_CLKFAIL
; J$ t. E3 @; d1 z$ m* K| MCASP_RX_SYNCERROR ) H% c$ i$ l  W% o. w8 b
| MCASP_RX_OVERRUN);
# y  k" R0 X6 g2 L/ g}
static void I2SDataTxRxActivate(void)8 a1 t3 w/ V2 W0 N
{( M: t$ t+ E, \$ X
/* Start the clocks */4 m1 R+ Q: S  P. ?3 i' F, a' J
McASPRxClkStart(SOC_MCASP_0_CTRL_REGS, MCASP_RX_CLK_EXTERNAL);% x7 D% z0 L( C
McASPTxClkStart(SOC_MCASP_0_CTRL_REGS, MCASP_TX_CLK_INTERNAL);
/* Enable EDMA for the transfer */6 O" z7 s+ m: F( e  Y5 z
EDMA3EnableTransfer(SOC_EDMA30CC_0_REGS, EDMA3_CHA_MCASP0_RX,0 F* K5 u6 C2 _* q2 y- L& \0 g
EDMA3_TRIG_MODE_EVENT);
  l/ ]8 e& e/ A' h+ ^+ R6 NEDMA3EnableTransfer(SOC_EDMA30CC_0_REGS, 9 V$ ~2 B0 ]9 T
EDMA3_CHA_MCASP0_TX, EDMA3_TRIG_MODE_EVENT);
/* Activate the serializers */
1 d' w+ e& ?1 `& ]1 }2 r- SMcASPRxSerActivate(SOC_MCASP_0_CTRL_REGS);$ a/ Q$ I, G/ U( R7 U. A' i  s
McASPTxSerActivate(SOC_MCASP_0_CTRL_REGS);
/* make sure that the XDATA bit is cleared to zero */
2 i% _; c2 ^- F7 Bwhile(McASPTxStatusGet(SOC_MCASP_0_CTRL_REGS) & MCASP_TX_STAT_DATAREADY);
/* Activate the state machines */
, L- y8 O( U8 k* u+ i8 G' KMcASPRxEnable(SOC_MCASP_0_CTRL_REGS);/ m- m5 A% \# D5 P# k5 {
McASPTxEnable(SOC_MCASP_0_CTRL_REGS);
$ {- `% m7 e9 N& P+ D1 M}

) m. t' M, w' T
请问:问题出在哪了,时钟按照这样配是否有错。
另外我看XDATA一直是0,接收的rxbuf0,1,2里有一般全是FFFF一半全是0.

' z, q4 P$ W6 {# M$ r




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