嵌入式开发者社区

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

作者: wapdasta    时间: 2018-11-7 13:28
标题: MCASP自环配置。
我项目上用OMAPL138的板子MCASP的引脚都是链接的FPGA,所以在FPGA这端设置的MCASP自环。把axr0接收到的通过axr1发回去。
部分代码如下
input mcasp_afsx,
6 B' y4 r! s4 qinput mcasp_ahclkx,
: |% B* J% e1 u8 d9 |input mcasp_aclkx,. l" g) M; C+ d
input axr0,
; L" U& t& m/ h7 M/ \3 N9 U! J! H( [0 e/ r
output mcasp_afsr,7 G) J5 \( o' @" x+ `2 i3 T1 i) e: {' b
output mcasp_ahclkr,3 ?, ^! n/ O0 R. t0 [& M
output mcasp_aclkr,
! E$ D7 `/ i( U; noutput axr1,+ X9 P* z+ Z* a: X+ _
assign mcasp_afsr = mcasp_afsx;& r* L+ \8 o! u6 P: P" T
assign mcasp_aclkr = mcasp_aclkx;
& [) a0 l! c  @4 }4 H! n9 passign mcasp_ahclkr = mcasp_ahclkx;9 x- j+ `3 r/ F; U3 i5 o4 l
assign axr1 = axr0;
- K! O! e0 l, s0 ^6 [5 [

3 r: o, R# j: c1 `' @( Y
在OMAPL138这端,通过axr0接口发固定的数,axr1接收。
在配置MACASP的时候,发送全部取内部时钟,接收全部取外部时钟。
一直循环发送,但是接收不到。在FPGA端也没有看到时钟和信号的波形。
部分代码如下,关于edma3的部分未做变化。

! m( K+ K8 n* B1 m1 k" u
static void McASPI2SConfigure(void)
& \1 c% |, ~  j3 k{# e" i0 Q! `8 \3 E" O$ Z% F
McASPRxReset(SOC_MCASP_0_CTRL_REGS);" g+ H+ z  {0 B3 {
McASPTxReset(SOC_MCASP_0_CTRL_REGS);
/* Enable the FIFOs for DMA transfer */
6 ~/ k6 F# o/ D/ @/ ^2 o  @  m5 qMcASPReadFifoEnable(SOC_MCASP_0_FIFO_REGS, 1, 1);
: A4 X6 w& [* t, @4 p2 `, J) tMcASPWriteFifoEnable(SOC_MCASP_0_FIFO_REGS, 1, 1);
/* Set I2S format in the transmitter/receiver format units */
( h: I; d- V  e( {0 |1 EMcASPRxFmtI2SSet(SOC_MCASP_0_CTRL_REGS, WORD_SIZE, SLOT_SIZE,
) ~* L: `. {* I% EMCASP_RX_MODE_DMA);
# b4 ?5 X2 n6 z# r8 lMcASPTxFmtI2SSet(SOC_MCASP_0_CTRL_REGS, WORD_SIZE, SLOT_SIZE,1 T5 X5 x  v( M) |
MCASP_TX_MODE_DMA);
/* Configure the frame sync. I2S shall work in TDM format with 2 slots */
  x/ v1 c6 k: S, h- B: Z. nMcASPRxFrameSyncCfg(SOC_MCASP_0_CTRL_REGS, 2, MCASP_RX_FS_WIDTH_WORD, & B6 z8 n% O0 ~5 H: e
MCASP_RX_FS_EXT_BEGIN_ON_FALL_EDGE);
$ J6 M$ t# ?) JMcASPTxFrameSyncCfg(SOC_MCASP_0_CTRL_REGS, 2, MCASP_TX_FS_WIDTH_WORD,
2 k' i. Y0 H" Z' ?# [MCASP_TX_FS_INT_BEGIN_ON_RIS_EDGE);
/* configure the clock for receiver */" z4 l2 l" J' c9 }) I4 m% g* N' p" m, ~
McASPRxClkCfg(SOC_MCASP_0_CTRL_REGS, MCASP_RX_CLK_EXTERNAL, 0, 0);
; k/ I5 l# Z, S7 M& I# F4 T& sMcASPRxClkPolaritySet(SOC_MCASP_0_CTRL_REGS, MCASP_RX_CLK_POL_RIS_EDGE);
/ e7 r6 v' B8 l. M) [McASPRxClkCheckConfig(SOC_MCASP_0_CTRL_REGS, MCASP_RX_CLKCHCK_DIV32,
% p& f' G% `/ J( _0 u$ ^6 w6 P% j0x00, 0xFF);
/* configure the clock for transmitter */
& r  ]  t$ C/ M( z( pMcASPTxClkCfg(SOC_MCASP_0_CTRL_REGS, MCASP_TX_CLK_INTERNAL, 11, 1);
) R% h& y8 [2 @" s8 z/ a2 o  jMcASPTxClkPolaritySet(SOC_MCASP_0_CTRL_REGS, MCASP_TX_CLK_POL_FALL_EDGE); 2 x/ L6 |. x  x" q* ?: a# j
McASPTxClkCheckConfig(SOC_MCASP_0_CTRL_REGS, MCASP_TX_CLKCHCK_DIV32," V- Y* x9 T+ O; o8 _3 m
0x00, 0xFF);- R9 L- ^0 H- ^' g
( J3 ^( a' W, J* w2 \: t" s
/* Enable synchronization of RX and TX sections */ ; V$ F6 z- K9 v" I( S
McASPTxRxClkSyncEnable(SOC_MCASP_0_CTRL_REGS);
/* Enable the transmitter/receiver slots. I2S uses 2 slots */7 g0 z% `. k0 b
McASPRxTimeSlotSet(SOC_MCASP_0_CTRL_REGS, I2S_SLOTS);
/ m" J' E. n8 p! ZMcASPTxTimeSlotSet(SOC_MCASP_0_CTRL_REGS, I2S_SLOTS);
/*9 c( e6 c: s" E6 w
** Set the serializers, Currently only one serializer is set as* B1 a! C7 N* v1 p. x  ~
** transmitter and one serializer as receiver.* q1 k( c7 W( ]! `" i
*/5 p& x' D" C+ u, u( S' d" K' e9 P
McASPSerializerRxSet(SOC_MCASP_0_CTRL_REGS, MCASP_XSER_RX);
7 w, m% \. F! ~. s/ D- IMcASPSerializerTxSet(SOC_MCASP_0_CTRL_REGS, MCASP_XSER_TX);
/*" c# c+ s; E/ j& R) p7 t
** Configure the McASP pins 2 a$ \# J% j- e
** Input - Frame Sync, Clock and Serializer Rx" P) G# ^: t5 B$ P; M/ B5 a& g
** Output - Serializer Tx is connected to the input of the codec
. _" ^/ |% N, f- F; G" y*/+ U' X6 D5 k. |) \+ @# b
McASPPinMcASPSet(SOC_MCASP_0_CTRL_REGS, 0xFFFFFFFF);$ H! i7 t; s2 U$ o  R
McASPPinDirOutputSet(SOC_MCASP_0_CTRL_REGS,MCASP_PIN_AXR(MCASP_XSER_TX));
* r( V# U. H+ b% G% r# U9 T$ ZMcASPPinDirInputSet(SOC_MCASP_0_CTRL_REGS, MCASP_PIN_AFSX
' |1 ?! p% P' M: ~) [| MCASP_PIN_ACLKX6 M' ~( ^# U0 `( |+ Y5 E! _% b
| MCASP_PIN_AHCLKX
" f2 c1 n9 f. M& C: a# d| MCASP_PIN_AXR(MCASP_XSER_RX));
/* Enable error interrupts for McASP */
4 U% Y$ f+ l: ZMcASPTxIntEnable(SOC_MCASP_0_CTRL_REGS, MCASP_TX_DMAERROR 8 V* z9 F# N$ ~9 k# t
| MCASP_TX_CLKFAIL 7 A2 p# ?7 B6 X! I; f
| MCASP_TX_SYNCERROR; A) K( z4 |& x: h. ~" ^% o
| MCASP_TX_UNDERRUN);
McASPRxIntEnable(SOC_MCASP_0_CTRL_REGS, MCASP_RX_DMAERROR 0 Q" I2 t3 A7 ~% c. ~% I
| MCASP_RX_CLKFAIL
( R, i! s: K# j5 S- |! ~| MCASP_RX_SYNCERROR
! x5 F7 |7 q4 O" ^  c( Q| MCASP_RX_OVERRUN);$ E9 C! G7 s' i
}
static void I2SDataTxRxActivate(void)
" u. x9 H7 Q, n* V) C. `* q{
5 a0 j: E  e) ^- H5 N6 K/ K' Q/* Start the clocks */! o3 N; f; m8 A& s+ H7 @
McASPRxClkStart(SOC_MCASP_0_CTRL_REGS, MCASP_RX_CLK_EXTERNAL);
3 x7 H+ x) f- }, E! |+ I1 o8 }McASPTxClkStart(SOC_MCASP_0_CTRL_REGS, MCASP_TX_CLK_INTERNAL);
/* Enable EDMA for the transfer */7 P. s* o: w: G* x4 Y7 i/ S$ E
EDMA3EnableTransfer(SOC_EDMA30CC_0_REGS, EDMA3_CHA_MCASP0_RX,! B1 r: @) T7 m3 }
EDMA3_TRIG_MODE_EVENT);( u+ ?# k- w/ ]7 {% c5 e) Z- h
EDMA3EnableTransfer(SOC_EDMA30CC_0_REGS, 8 b' X1 O+ b/ L- {6 ]/ s" I! p
EDMA3_CHA_MCASP0_TX, EDMA3_TRIG_MODE_EVENT);
/* Activate the serializers */. q0 f% e& ~6 B5 H4 p. u
McASPRxSerActivate(SOC_MCASP_0_CTRL_REGS);
" _* s& A8 S1 [McASPTxSerActivate(SOC_MCASP_0_CTRL_REGS);
/* make sure that the XDATA bit is cleared to zero */9 O7 K+ S% i! |
while(McASPTxStatusGet(SOC_MCASP_0_CTRL_REGS) & MCASP_TX_STAT_DATAREADY);
/* Activate the state machines */
/ d) A1 F  ^( t- p2 q9 a$ fMcASPRxEnable(SOC_MCASP_0_CTRL_REGS);+ b/ `3 J, S' e
McASPTxEnable(SOC_MCASP_0_CTRL_REGS);* e! M5 @  e8 M$ G9 B- q3 d. ^
}
; Q( ~1 ?) t6 g: K/ u
请问:问题出在哪了,时钟按照这样配是否有错。
另外我看XDATA一直是0,接收的rxbuf0,1,2里有一般全是FFFF一半全是0.

( }& M. ^- L8 E" X; ]




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