嵌入式开发者社区

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

作者: wapdasta    时间: 2018-11-7 13:28
标题: MCASP自环配置。
我项目上用OMAPL138的板子MCASP的引脚都是链接的FPGA,所以在FPGA这端设置的MCASP自环。把axr0接收到的通过axr1发回去。
部分代码如下
input mcasp_afsx,
- V6 _% b. U7 _' M9 X2 N$ Dinput mcasp_ahclkx,
; w0 _2 D+ q, X2 `) k! Uinput mcasp_aclkx,
; g+ W1 h0 T! X1 D) j) x' Q% Uinput axr0,
$ s9 z; c' }' h
$ g) i! {# i1 y$ V: Foutput mcasp_afsr,
% `$ l) }0 o- `' j4 a% k# ?output mcasp_ahclkr,6 z% U5 d( C: C1 s0 T+ X
output mcasp_aclkr,
7 u; D; s* r( Q) Voutput axr1,
9 S. v+ i, [: t2 W" A0 h
assign mcasp_afsr = mcasp_afsx;
/ |" h# \3 z2 t9 T6 u2 G4 `7 V7 Zassign mcasp_aclkr = mcasp_aclkx;
3 W- t8 |  V5 ~' ~- wassign mcasp_ahclkr = mcasp_ahclkx;
3 Y. X3 t* U: d9 @, c* Fassign axr1 = axr0;

7 d) P$ `: {3 W5 f# @$ j
* E9 H% ]7 G- X7 D9 }8 b% E
在OMAPL138这端,通过axr0接口发固定的数,axr1接收。
在配置MACASP的时候,发送全部取内部时钟,接收全部取外部时钟。
一直循环发送,但是接收不到。在FPGA端也没有看到时钟和信号的波形。
部分代码如下,关于edma3的部分未做变化。

, w# G. q& W  R& M
static void McASPI2SConfigure(void)2 }, R6 |. ]4 G+ |* `. i
{  b; B+ a  ]- b4 t4 ^7 c
McASPRxReset(SOC_MCASP_0_CTRL_REGS);
! R) D1 C' O, {McASPTxReset(SOC_MCASP_0_CTRL_REGS);
/* Enable the FIFOs for DMA transfer */
" |% w* k, o3 E! V' z5 [& ~McASPReadFifoEnable(SOC_MCASP_0_FIFO_REGS, 1, 1);* s' Q1 ?" X; ?: m- D
McASPWriteFifoEnable(SOC_MCASP_0_FIFO_REGS, 1, 1);
/* Set I2S format in the transmitter/receiver format units */
# l6 V" T+ O8 i* W2 f( TMcASPRxFmtI2SSet(SOC_MCASP_0_CTRL_REGS, WORD_SIZE, SLOT_SIZE,% J2 F( ~1 B, ?5 V: E4 G$ T+ y( U! h
MCASP_RX_MODE_DMA);- z+ I, W8 z9 T+ h8 i
McASPTxFmtI2SSet(SOC_MCASP_0_CTRL_REGS, WORD_SIZE, SLOT_SIZE,
- [/ i6 y+ w: a1 k3 YMCASP_TX_MODE_DMA);
/* Configure the frame sync. I2S shall work in TDM format with 2 slots */
' y* k* H% D( H( Y. GMcASPRxFrameSyncCfg(SOC_MCASP_0_CTRL_REGS, 2, MCASP_RX_FS_WIDTH_WORD,
( O# }4 e% f8 `. P; m; z8 H) HMCASP_RX_FS_EXT_BEGIN_ON_FALL_EDGE);) p8 a5 N9 K$ H5 n( _& }
McASPTxFrameSyncCfg(SOC_MCASP_0_CTRL_REGS, 2, MCASP_TX_FS_WIDTH_WORD, , @6 Y7 A7 e1 F1 F4 M
MCASP_TX_FS_INT_BEGIN_ON_RIS_EDGE);
/* configure the clock for receiver */
7 D8 L) M% I' g0 g2 NMcASPRxClkCfg(SOC_MCASP_0_CTRL_REGS, MCASP_RX_CLK_EXTERNAL, 0, 0);
! M" {& q! B% t- ?1 u4 O; E. F* V5 FMcASPRxClkPolaritySet(SOC_MCASP_0_CTRL_REGS, MCASP_RX_CLK_POL_RIS_EDGE); $ C+ N1 A) W' @+ C2 _5 c7 j0 \+ h
McASPRxClkCheckConfig(SOC_MCASP_0_CTRL_REGS, MCASP_RX_CLKCHCK_DIV32,
! l: ]6 w. p* U# h1 G" r0x00, 0xFF);
/* configure the clock for transmitter *// k4 ^# _- g! B+ N
McASPTxClkCfg(SOC_MCASP_0_CTRL_REGS, MCASP_TX_CLK_INTERNAL, 11, 1);* k, V- R5 y8 K# ]0 j: k% L
McASPTxClkPolaritySet(SOC_MCASP_0_CTRL_REGS, MCASP_TX_CLK_POL_FALL_EDGE); - ]& I- d" U- A' R5 g
McASPTxClkCheckConfig(SOC_MCASP_0_CTRL_REGS, MCASP_TX_CLKCHCK_DIV32,9 B2 I$ d. Z2 z9 V9 B1 h* A* ~
0x00, 0xFF);
! j5 V7 Y5 e- [. d' c8 N3 b9 f/ K. b5 l+ [9 ]) e9 `! Y) W
/* Enable synchronization of RX and TX sections */
1 P  U' }; H3 ~6 G$ J! [4 ^, yMcASPTxRxClkSyncEnable(SOC_MCASP_0_CTRL_REGS);
/* Enable the transmitter/receiver slots. I2S uses 2 slots */
& F, K& m* Y# K' @  `& }0 [$ e* ]McASPRxTimeSlotSet(SOC_MCASP_0_CTRL_REGS, I2S_SLOTS);3 B6 q* y3 ?8 k, y& i) G& B
McASPTxTimeSlotSet(SOC_MCASP_0_CTRL_REGS, I2S_SLOTS);
/*
0 C0 X% l6 C: \* T' f( ?4 e+ P+ t** Set the serializers, Currently only one serializer is set as7 t3 R1 Y) Z& G% V. P" D
** transmitter and one serializer as receiver.( P  p" }: T) J: [9 k- o
*/0 \" ^% U& k/ M: H, X; C& ^
McASPSerializerRxSet(SOC_MCASP_0_CTRL_REGS, MCASP_XSER_RX);
  N9 p  s3 p) k* v* s. B* f# V3 lMcASPSerializerTxSet(SOC_MCASP_0_CTRL_REGS, MCASP_XSER_TX);
/*. U0 i- `( F7 [( D  v+ ~; `9 W
** Configure the McASP pins 1 k  u0 x' b' h8 _, N/ c
** Input - Frame Sync, Clock and Serializer Rx
% h6 _  Y; ?2 Q** Output - Serializer Tx is connected to the input of the codec
0 }3 l0 \9 [+ f1 [, K* t*/  ]; {& b) k" t) E# S. \1 F4 U
McASPPinMcASPSet(SOC_MCASP_0_CTRL_REGS, 0xFFFFFFFF);
! N9 \4 v6 ?$ H3 hMcASPPinDirOutputSet(SOC_MCASP_0_CTRL_REGS,MCASP_PIN_AXR(MCASP_XSER_TX));
% F, K. |# G! p" t3 H1 @McASPPinDirInputSet(SOC_MCASP_0_CTRL_REGS, MCASP_PIN_AFSX* v  S! x6 N8 X/ ~' K: A/ ^# ]
| MCASP_PIN_ACLKX
6 G2 v7 ^7 p) M| MCASP_PIN_AHCLKX, J  m8 m# n9 n5 X7 \- N# |
| MCASP_PIN_AXR(MCASP_XSER_RX));
/* Enable error interrupts for McASP */% W" g" j/ o5 M- F
McASPTxIntEnable(SOC_MCASP_0_CTRL_REGS, MCASP_TX_DMAERROR
# c' J/ @5 S; {! _  J! B- t" u| MCASP_TX_CLKFAIL 3 x+ ^9 G/ u0 n0 Y9 _
| MCASP_TX_SYNCERROR. b* w3 E; ~/ [0 M) Y% u1 `, K
| MCASP_TX_UNDERRUN);
McASPRxIntEnable(SOC_MCASP_0_CTRL_REGS, MCASP_RX_DMAERROR
* P' N. [3 \( m* d4 S  q- }1 Q6 c| MCASP_RX_CLKFAIL7 q& }$ _7 k$ J* T8 g3 L% \2 O
| MCASP_RX_SYNCERROR
3 n: F2 C. d5 j% C' k/ n  Z| MCASP_RX_OVERRUN);
( H0 h! V0 @8 m# {( q, U}
static void I2SDataTxRxActivate(void)
. a' ]/ Z. C: D! o{
  d* B1 m8 R3 g/* Start the clocks */
3 D% L! s9 s( t6 k" X3 ]' r6 C4 U/ s! ?McASPRxClkStart(SOC_MCASP_0_CTRL_REGS, MCASP_RX_CLK_EXTERNAL);
( r; G# k# l+ p  ]McASPTxClkStart(SOC_MCASP_0_CTRL_REGS, MCASP_TX_CLK_INTERNAL);
/* Enable EDMA for the transfer */
0 ]) O: ]1 T/ R/ {0 a& s3 `- R2 ~EDMA3EnableTransfer(SOC_EDMA30CC_0_REGS, EDMA3_CHA_MCASP0_RX,
% U" y$ w1 q6 ^( X2 W+ d: MEDMA3_TRIG_MODE_EVENT);' ^% J6 n$ u7 |2 F$ ?: J1 v
EDMA3EnableTransfer(SOC_EDMA30CC_0_REGS,
& x7 c7 p" [! J% ^. d. T8 Y' sEDMA3_CHA_MCASP0_TX, EDMA3_TRIG_MODE_EVENT);
/* Activate the serializers */; b2 C' O0 p9 i! P
McASPRxSerActivate(SOC_MCASP_0_CTRL_REGS);+ A! ~0 S- c* B* e
McASPTxSerActivate(SOC_MCASP_0_CTRL_REGS);
/* make sure that the XDATA bit is cleared to zero */: p) g+ R6 f, ^) j8 a! g
while(McASPTxStatusGet(SOC_MCASP_0_CTRL_REGS) & MCASP_TX_STAT_DATAREADY);
/* Activate the state machines */
2 _) A  M# W! R# q: [# YMcASPRxEnable(SOC_MCASP_0_CTRL_REGS);) B4 Y  I  F$ b, P- s/ ~$ I
McASPTxEnable(SOC_MCASP_0_CTRL_REGS);$ h! i% I( X' j( |2 j" n2 m  ~
}
7 `, N3 A# y  o; H7 N' B! t+ U
请问:问题出在哪了,时钟按照这样配是否有错。
另外我看XDATA一直是0,接收的rxbuf0,1,2里有一般全是FFFF一半全是0.

$ T; w) I  V. e% L0 b4 e/ W- w




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