嵌入式开发者社区

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

作者: wapdasta    时间: 2018-11-7 13:28
标题: MCASP自环配置。
我项目上用OMAPL138的板子MCASP的引脚都是链接的FPGA,所以在FPGA这端设置的MCASP自环。把axr0接收到的通过axr1发回去。
部分代码如下
input mcasp_afsx,
( t, \( c0 o* k8 s. Binput mcasp_ahclkx,# _  A0 L2 i2 J/ {! I
input mcasp_aclkx,# V  ]) C$ y1 `% Z+ Z% q. V
input axr0,8 D+ }) v7 d- S! D" l/ V: z
! F5 j' X: w! F
output mcasp_afsr,
" Y0 _" B+ ~: Q+ a$ [output mcasp_ahclkr,( g  `/ {$ U8 D* [2 U2 J
output mcasp_aclkr,
/ f3 M& `! ~6 Z1 x7 \5 _6 moutput axr1,$ m2 F4 z! v3 m  z  w/ Z" e
assign mcasp_afsr = mcasp_afsx;6 Y: ?% J) {6 M! R
assign mcasp_aclkr = mcasp_aclkx;
- }6 p( M! W; O4 @5 Nassign mcasp_ahclkr = mcasp_ahclkx;5 `* f; f, ], x$ j
assign axr1 = axr0;

! g0 j+ B+ Z" P( q1 A  I  r  U: h
: e9 ]5 _- }4 A4 v3 w( J
在OMAPL138这端,通过axr0接口发固定的数,axr1接收。
在配置MACASP的时候,发送全部取内部时钟,接收全部取外部时钟。
一直循环发送,但是接收不到。在FPGA端也没有看到时钟和信号的波形。
部分代码如下,关于edma3的部分未做变化。
4 t* x$ U) g) F" i
static void McASPI2SConfigure(void)
& `% Q$ a; s; v% t+ c7 U& U{% }; u+ ]$ j8 k( V6 }; e) y, `9 ^
McASPRxReset(SOC_MCASP_0_CTRL_REGS);+ V* e2 ?' c) G% S
McASPTxReset(SOC_MCASP_0_CTRL_REGS);
/* Enable the FIFOs for DMA transfer */5 W+ x6 N$ J4 D1 ~1 ]% `+ d
McASPReadFifoEnable(SOC_MCASP_0_FIFO_REGS, 1, 1);
  a" c+ H" z$ a9 U2 ]McASPWriteFifoEnable(SOC_MCASP_0_FIFO_REGS, 1, 1);
/* Set I2S format in the transmitter/receiver format units */
/ Y/ x) V5 z6 H! lMcASPRxFmtI2SSet(SOC_MCASP_0_CTRL_REGS, WORD_SIZE, SLOT_SIZE,7 ]) R% N; K3 g+ @) B/ A" L& Y. a
MCASP_RX_MODE_DMA);9 H$ g6 B) ^# A! C& A- }. a! G
McASPTxFmtI2SSet(SOC_MCASP_0_CTRL_REGS, WORD_SIZE, SLOT_SIZE,, q& W2 K# v! p  N3 k% e, _4 O" G
MCASP_TX_MODE_DMA);
/* Configure the frame sync. I2S shall work in TDM format with 2 slots */  ]7 s  Q' y; W( X& [
McASPRxFrameSyncCfg(SOC_MCASP_0_CTRL_REGS, 2, MCASP_RX_FS_WIDTH_WORD,
' m& o3 [% }4 s* K  p8 r4 s9 XMCASP_RX_FS_EXT_BEGIN_ON_FALL_EDGE);" d7 y8 @7 o; k/ p) }
McASPTxFrameSyncCfg(SOC_MCASP_0_CTRL_REGS, 2, MCASP_TX_FS_WIDTH_WORD,
+ y9 H% h4 x& I6 JMCASP_TX_FS_INT_BEGIN_ON_RIS_EDGE);
/* configure the clock for receiver */
) h) y( A8 P* S8 S  g. eMcASPRxClkCfg(SOC_MCASP_0_CTRL_REGS, MCASP_RX_CLK_EXTERNAL, 0, 0);
! G) h5 h8 \/ D" }& [3 dMcASPRxClkPolaritySet(SOC_MCASP_0_CTRL_REGS, MCASP_RX_CLK_POL_RIS_EDGE); . M. s& y6 o2 ?
McASPRxClkCheckConfig(SOC_MCASP_0_CTRL_REGS, MCASP_RX_CLKCHCK_DIV32,
# B9 ?. ], s8 K1 [1 k0x00, 0xFF);
/* configure the clock for transmitter */3 w( l& y& z' M  b7 c  p9 K
McASPTxClkCfg(SOC_MCASP_0_CTRL_REGS, MCASP_TX_CLK_INTERNAL, 11, 1);
& B7 x9 l) w8 q4 B3 KMcASPTxClkPolaritySet(SOC_MCASP_0_CTRL_REGS, MCASP_TX_CLK_POL_FALL_EDGE); + u- E+ B* F0 P, D5 T* Y( J
McASPTxClkCheckConfig(SOC_MCASP_0_CTRL_REGS, MCASP_TX_CLKCHCK_DIV32,
1 f. j' Y. H  c1 r' ~2 l5 A9 n# Q0x00, 0xFF);
1 v  R; s2 Q$ Y6 x9 m- b/ A8 ]8 q
9 u: Z) }; W" ~2 n/* Enable synchronization of RX and TX sections */
: q' n' f& _+ p! ZMcASPTxRxClkSyncEnable(SOC_MCASP_0_CTRL_REGS);
/* Enable the transmitter/receiver slots. I2S uses 2 slots */
' r$ |2 B& @- H; b" E+ fMcASPRxTimeSlotSet(SOC_MCASP_0_CTRL_REGS, I2S_SLOTS);
; v8 W' R& _0 D1 @McASPTxTimeSlotSet(SOC_MCASP_0_CTRL_REGS, I2S_SLOTS);
/*8 ]3 Y0 Z2 z) o9 l6 e; i& B# D
** Set the serializers, Currently only one serializer is set as
. }1 P+ c( ^& R& ^( F** transmitter and one serializer as receiver.
+ U9 N) {* P" t' j# F. y*/
* a4 J$ P# N; ^" ^) G, Q1 aMcASPSerializerRxSet(SOC_MCASP_0_CTRL_REGS, MCASP_XSER_RX);" b  o4 u# u5 a2 N) }* I
McASPSerializerTxSet(SOC_MCASP_0_CTRL_REGS, MCASP_XSER_TX);
/*  K. d% |; u$ {; d5 M7 G
** Configure the McASP pins / c& k# K8 }( r
** Input - Frame Sync, Clock and Serializer Rx
* ?  t% u; S  e8 E** Output - Serializer Tx is connected to the input of the codec 0 H- |5 R6 q- G" D5 j( K1 I
*/4 f& w* |9 r2 F+ s# `, e) {
McASPPinMcASPSet(SOC_MCASP_0_CTRL_REGS, 0xFFFFFFFF);  s, `% h/ F9 A* d3 M$ {, X$ b
McASPPinDirOutputSet(SOC_MCASP_0_CTRL_REGS,MCASP_PIN_AXR(MCASP_XSER_TX));# M9 {) M! H' F& p: l+ u/ u% W. s( x- a
McASPPinDirInputSet(SOC_MCASP_0_CTRL_REGS, MCASP_PIN_AFSX, a, ^7 G( x  G, _% ]- L; h% n! Y" ]
| MCASP_PIN_ACLKX* s, }* Y* [6 Y3 h+ `
| MCASP_PIN_AHCLKX& O% d* n+ Y/ J2 Q
| MCASP_PIN_AXR(MCASP_XSER_RX));
/* Enable error interrupts for McASP */; N+ f* \( z; R4 M
McASPTxIntEnable(SOC_MCASP_0_CTRL_REGS, MCASP_TX_DMAERROR   H) |) ~! `6 ]; L8 b1 V3 U
| MCASP_TX_CLKFAIL
- F1 J" D8 W4 Q- ^5 W9 j2 L| MCASP_TX_SYNCERROR, D# y+ K& H' T3 d( _0 N
| MCASP_TX_UNDERRUN);
McASPRxIntEnable(SOC_MCASP_0_CTRL_REGS, MCASP_RX_DMAERROR * J( w" a0 e) F, O  e2 q
| MCASP_RX_CLKFAIL* q7 ~# w7 P, f% Y, G! {1 J# ?
| MCASP_RX_SYNCERROR
/ a2 x7 Z4 [& Z  ~1 r! h| MCASP_RX_OVERRUN);' W5 B# b. D' a( c( S/ f# T
}
static void I2SDataTxRxActivate(void)0 n# Z' T* b/ Z* W
{, _# m6 f, W2 f5 S" ]; J
/* Start the clocks */
" R9 m1 L8 W4 S, |2 U/ NMcASPRxClkStart(SOC_MCASP_0_CTRL_REGS, MCASP_RX_CLK_EXTERNAL);6 ]( ^1 ~1 W6 s( d
McASPTxClkStart(SOC_MCASP_0_CTRL_REGS, MCASP_TX_CLK_INTERNAL);
/* Enable EDMA for the transfer */
, n" c3 d0 n$ KEDMA3EnableTransfer(SOC_EDMA30CC_0_REGS, EDMA3_CHA_MCASP0_RX,! V7 t: r3 @. E6 r
EDMA3_TRIG_MODE_EVENT);1 D; W5 i+ R& n6 U" `
EDMA3EnableTransfer(SOC_EDMA30CC_0_REGS,
4 G  I! W! @6 ]. MEDMA3_CHA_MCASP0_TX, EDMA3_TRIG_MODE_EVENT);
/* Activate the serializers */
4 [8 E8 c' Q1 I0 x- t# S) XMcASPRxSerActivate(SOC_MCASP_0_CTRL_REGS);
; u! ^1 |0 l" y9 ?* ]McASPTxSerActivate(SOC_MCASP_0_CTRL_REGS);
/* make sure that the XDATA bit is cleared to zero */
' v2 }; t' Y4 X0 `% t8 xwhile(McASPTxStatusGet(SOC_MCASP_0_CTRL_REGS) & MCASP_TX_STAT_DATAREADY);
/* Activate the state machines */
& W% ^; |( X: l  m6 ~  HMcASPRxEnable(SOC_MCASP_0_CTRL_REGS);/ m, A% _- e' I( {  y
McASPTxEnable(SOC_MCASP_0_CTRL_REGS);
/ ]5 b/ c' {# v}

  y) U' w2 r" X
请问:问题出在哪了,时钟按照这样配是否有错。
另外我看XDATA一直是0,接收的rxbuf0,1,2里有一般全是FFFF一半全是0.

/ o' Z: z2 h. E




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