嵌入式开发者社区

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

作者: wapdasta    时间: 2018-11-7 13:28
标题: MCASP自环配置。
我项目上用OMAPL138的板子MCASP的引脚都是链接的FPGA,所以在FPGA这端设置的MCASP自环。把axr0接收到的通过axr1发回去。
部分代码如下
input mcasp_afsx,$ k8 I! k* I  j
input mcasp_ahclkx,
; z+ h  `3 ?8 X+ i# ]( Linput mcasp_aclkx,1 m1 y9 a4 W+ j, Y9 ?
input axr0,
" P/ ^/ k) V) [# s: c+ K0 z# S) T6 Y$ I
output mcasp_afsr,
0 |& @5 k" n! p  ~2 Ooutput mcasp_ahclkr,
4 t; o. Y* \) Z4 `5 Foutput mcasp_aclkr,
! w0 R  M0 h! o8 ooutput axr1,# X8 m0 c# G- a9 t9 r: w
assign mcasp_afsr = mcasp_afsx;
% f! ]; m3 J/ n3 c/ K$ Bassign mcasp_aclkr = mcasp_aclkx;+ o8 D* N3 d. A% I/ A' j
assign mcasp_ahclkr = mcasp_ahclkx;# B# |3 |. }' ]9 N
assign axr1 = axr0;

$ W$ K# w- A+ [  F  ~# B9 f: ?
) {0 A& ?8 t8 ]$ ]* n3 t" d
在OMAPL138这端,通过axr0接口发固定的数,axr1接收。
在配置MACASP的时候,发送全部取内部时钟,接收全部取外部时钟。
一直循环发送,但是接收不到。在FPGA端也没有看到时钟和信号的波形。
部分代码如下,关于edma3的部分未做变化。

* V2 P0 m  ]8 e5 k9 m7 x' j
static void McASPI2SConfigure(void)
: B+ ]9 R  H+ T5 a# t' D{
+ m( |: a- E8 A! r( z( {3 [  j) T2 AMcASPRxReset(SOC_MCASP_0_CTRL_REGS);
4 o; {/ F; P" [McASPTxReset(SOC_MCASP_0_CTRL_REGS);
/* Enable the FIFOs for DMA transfer */
. y' ]4 h6 P: I# wMcASPReadFifoEnable(SOC_MCASP_0_FIFO_REGS, 1, 1);# {' f/ y; Q' c
McASPWriteFifoEnable(SOC_MCASP_0_FIFO_REGS, 1, 1);
/* Set I2S format in the transmitter/receiver format units */! O1 v( @  I$ y$ S; |
McASPRxFmtI2SSet(SOC_MCASP_0_CTRL_REGS, WORD_SIZE, SLOT_SIZE,2 H- o4 Z) T1 I, a, `7 W/ H/ n
MCASP_RX_MODE_DMA);
7 S( m/ x6 ~! M4 E. rMcASPTxFmtI2SSet(SOC_MCASP_0_CTRL_REGS, WORD_SIZE, SLOT_SIZE,- L0 ?! K  F; [$ G/ y( v7 q3 a
MCASP_TX_MODE_DMA);
/* Configure the frame sync. I2S shall work in TDM format with 2 slots */
" Q7 B" i% ~% ], E1 EMcASPRxFrameSyncCfg(SOC_MCASP_0_CTRL_REGS, 2, MCASP_RX_FS_WIDTH_WORD,
  N+ z. E; S7 q' `; y8 aMCASP_RX_FS_EXT_BEGIN_ON_FALL_EDGE);! [* t2 j% B) `- Z6 Z: Q* V
McASPTxFrameSyncCfg(SOC_MCASP_0_CTRL_REGS, 2, MCASP_TX_FS_WIDTH_WORD,
% c  @; h) B& N! a  O9 NMCASP_TX_FS_INT_BEGIN_ON_RIS_EDGE);
/* configure the clock for receiver */4 f6 t- E. B6 @, O& ?
McASPRxClkCfg(SOC_MCASP_0_CTRL_REGS, MCASP_RX_CLK_EXTERNAL, 0, 0);2 J2 `. s7 v8 t
McASPRxClkPolaritySet(SOC_MCASP_0_CTRL_REGS, MCASP_RX_CLK_POL_RIS_EDGE); , d3 h6 e. u0 S+ P
McASPRxClkCheckConfig(SOC_MCASP_0_CTRL_REGS, MCASP_RX_CLKCHCK_DIV32,
; v1 h& w+ E) z6 |1 `0x00, 0xFF);
/* configure the clock for transmitter */- v+ }# N  D0 @# ?4 R
McASPTxClkCfg(SOC_MCASP_0_CTRL_REGS, MCASP_TX_CLK_INTERNAL, 11, 1);
% P  I" I( e, \: u! AMcASPTxClkPolaritySet(SOC_MCASP_0_CTRL_REGS, MCASP_TX_CLK_POL_FALL_EDGE); & x. j' l' c# X* L
McASPTxClkCheckConfig(SOC_MCASP_0_CTRL_REGS, MCASP_TX_CLKCHCK_DIV32,
) F# G5 f3 c& O- g$ `" i0x00, 0xFF);0 k+ }. Z) B8 C+ `6 C$ g

4 V, ?% t& s& [* Y7 z- p! u/* Enable synchronization of RX and TX sections */ 7 [. L# l1 D* c* B* b
McASPTxRxClkSyncEnable(SOC_MCASP_0_CTRL_REGS);
/* Enable the transmitter/receiver slots. I2S uses 2 slots */; R) X: U# d7 N; {$ Y
McASPRxTimeSlotSet(SOC_MCASP_0_CTRL_REGS, I2S_SLOTS);
4 @! d, R" N! c  }McASPTxTimeSlotSet(SOC_MCASP_0_CTRL_REGS, I2S_SLOTS);
/*
5 {7 j# Q% K$ A- e/ @- N3 g2 G6 W** Set the serializers, Currently only one serializer is set as. J) B' U: A( Y3 w
** transmitter and one serializer as receiver.
/ O# ?  ?0 J! s$ k8 F' _5 z*/
  x2 z: q" x; j3 l8 m* D$ I* uMcASPSerializerRxSet(SOC_MCASP_0_CTRL_REGS, MCASP_XSER_RX);+ f% ?, x' w2 q" P3 n
McASPSerializerTxSet(SOC_MCASP_0_CTRL_REGS, MCASP_XSER_TX);
/*1 s; V0 K/ g  w+ ^' T! y$ v( o
** Configure the McASP pins
* @% b% B  n. Z  ~& O! p** Input - Frame Sync, Clock and Serializer Rx" f) Q# L) R3 o& v
** Output - Serializer Tx is connected to the input of the codec
; \+ j! _4 w8 x3 o# f$ D7 x*/( l1 ~. Q4 U8 e# B
McASPPinMcASPSet(SOC_MCASP_0_CTRL_REGS, 0xFFFFFFFF);! k) r4 A$ U/ o, T8 D
McASPPinDirOutputSet(SOC_MCASP_0_CTRL_REGS,MCASP_PIN_AXR(MCASP_XSER_TX));
* p0 t+ E) [+ F  z( c3 C& O/ U- {McASPPinDirInputSet(SOC_MCASP_0_CTRL_REGS, MCASP_PIN_AFSX
4 p6 o8 M  ^$ v- B| MCASP_PIN_ACLKX
2 j& p7 N' V& ?2 T* U* D* Z6 I0 w| MCASP_PIN_AHCLKX
, j3 D8 j7 P- a4 e: A8 O+ J! ?| MCASP_PIN_AXR(MCASP_XSER_RX));
/* Enable error interrupts for McASP */
6 x1 B6 e6 w1 ]McASPTxIntEnable(SOC_MCASP_0_CTRL_REGS, MCASP_TX_DMAERROR   v) {0 c9 ~. l6 V. h! r
| MCASP_TX_CLKFAIL - J* v' D$ a5 z( Q# j6 Y
| MCASP_TX_SYNCERROR
5 W7 N( [3 q# W( k1 t( Z| MCASP_TX_UNDERRUN);
McASPRxIntEnable(SOC_MCASP_0_CTRL_REGS, MCASP_RX_DMAERROR
5 J# N! A* f# U/ C5 d' ]| MCASP_RX_CLKFAIL) f; g4 K* G* h
| MCASP_RX_SYNCERROR ( P: C3 I4 ~/ a8 P
| MCASP_RX_OVERRUN);
: S# p5 m1 g4 B7 S}
static void I2SDataTxRxActivate(void)  G* ?7 E' c# G9 K
{
# j0 d: H4 k4 O- ^/* Start the clocks */
+ c9 T1 j& p& y( yMcASPRxClkStart(SOC_MCASP_0_CTRL_REGS, MCASP_RX_CLK_EXTERNAL);% \. p# R& W. b3 m+ ]% E
McASPTxClkStart(SOC_MCASP_0_CTRL_REGS, MCASP_TX_CLK_INTERNAL);
/* Enable EDMA for the transfer */" s4 l9 M1 \5 A1 Q+ u2 y. d- m% |; a
EDMA3EnableTransfer(SOC_EDMA30CC_0_REGS, EDMA3_CHA_MCASP0_RX,
0 H* q+ o, A0 f0 z" r; Q8 Y/ wEDMA3_TRIG_MODE_EVENT);
' B1 o+ m1 _& b8 t, D: @% QEDMA3EnableTransfer(SOC_EDMA30CC_0_REGS,
  e, [- h2 T( X4 C3 v9 a6 DEDMA3_CHA_MCASP0_TX, EDMA3_TRIG_MODE_EVENT);
/* Activate the serializers */
0 d- w6 z4 K  q+ Q8 }; u& p/ P+ u- UMcASPRxSerActivate(SOC_MCASP_0_CTRL_REGS);
! O/ x  L8 Y* r' S; OMcASPTxSerActivate(SOC_MCASP_0_CTRL_REGS);
/* make sure that the XDATA bit is cleared to zero */2 Z9 j9 N+ N) S8 I8 T8 O  Z
while(McASPTxStatusGet(SOC_MCASP_0_CTRL_REGS) & MCASP_TX_STAT_DATAREADY);
/* Activate the state machines */: e4 X/ D' l4 L# }! r/ u
McASPRxEnable(SOC_MCASP_0_CTRL_REGS);
0 \7 V! f) B. p9 k0 j. BMcASPTxEnable(SOC_MCASP_0_CTRL_REGS);
9 ?- j$ V0 y- [- [5 O}

* Y* o7 |7 O" r% G( r
请问:问题出在哪了,时钟按照这样配是否有错。
另外我看XDATA一直是0,接收的rxbuf0,1,2里有一般全是FFFF一半全是0.

& T9 Y1 Y( x, ^; f' ^




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