嵌入式开发者社区

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

作者: wapdasta    时间: 2018-11-7 13:28
标题: MCASP自环配置。
我项目上用OMAPL138的板子MCASP的引脚都是链接的FPGA,所以在FPGA这端设置的MCASP自环。把axr0接收到的通过axr1发回去。
部分代码如下
input mcasp_afsx," F) v6 v2 C) v" z
input mcasp_ahclkx,
- G# _- n2 Z4 {input mcasp_aclkx,
4 \* z3 W/ b% f. [, b/ yinput axr0,6 k: d0 [" s3 |* q3 O' q) w6 D4 h
0 P3 F& c: V: k  w5 C: S& y+ B
output mcasp_afsr,
  p& \. L  J( M- foutput mcasp_ahclkr,
* i0 Q( w; h* R+ u1 f% }output mcasp_aclkr,
9 X3 u  L, d% o5 `output axr1,
% o2 ]* ^" H; L0 M
assign mcasp_afsr = mcasp_afsx;
; w% w! Q9 \8 V! P5 N7 ^: Kassign mcasp_aclkr = mcasp_aclkx;
0 ^$ d; G% v7 X/ g+ uassign mcasp_ahclkr = mcasp_ahclkx;
1 N' z- C+ y1 {. d! }assign axr1 = axr0;

/ C" j: U. K/ J+ a4 z" F" d1 ~. s% U4 S  h' F- v0 C* T" Q
在OMAPL138这端,通过axr0接口发固定的数,axr1接收。
在配置MACASP的时候,发送全部取内部时钟,接收全部取外部时钟。
一直循环发送,但是接收不到。在FPGA端也没有看到时钟和信号的波形。
部分代码如下,关于edma3的部分未做变化。
2 G5 `5 W0 R) L, W( m
static void McASPI2SConfigure(void)
2 _/ ?) H0 G& E. l8 c3 N{2 A0 a" F$ y4 c! Y5 D9 r( Y1 C
McASPRxReset(SOC_MCASP_0_CTRL_REGS);  o* R0 A4 d1 [6 [9 C! w, ~5 ]
McASPTxReset(SOC_MCASP_0_CTRL_REGS);
/* Enable the FIFOs for DMA transfer */
5 y! \1 [4 P3 X& s9 G% C/ Y! c! SMcASPReadFifoEnable(SOC_MCASP_0_FIFO_REGS, 1, 1);& Y' `4 @9 ?0 c9 T6 O
McASPWriteFifoEnable(SOC_MCASP_0_FIFO_REGS, 1, 1);
/* Set I2S format in the transmitter/receiver format units */
; z* b" ?! h- m: K* jMcASPRxFmtI2SSet(SOC_MCASP_0_CTRL_REGS, WORD_SIZE, SLOT_SIZE,/ k% S6 y* s7 @' s; T
MCASP_RX_MODE_DMA);
" H( a' L! P& b0 xMcASPTxFmtI2SSet(SOC_MCASP_0_CTRL_REGS, WORD_SIZE, SLOT_SIZE,
, q; J+ `% [" Q) AMCASP_TX_MODE_DMA);
/* Configure the frame sync. I2S shall work in TDM format with 2 slots */
9 ~3 n- _9 @" rMcASPRxFrameSyncCfg(SOC_MCASP_0_CTRL_REGS, 2, MCASP_RX_FS_WIDTH_WORD,
' m4 {3 R  f7 v* G0 a- z0 r9 NMCASP_RX_FS_EXT_BEGIN_ON_FALL_EDGE);" }  d' i! H2 d$ {/ M* I7 B! |
McASPTxFrameSyncCfg(SOC_MCASP_0_CTRL_REGS, 2, MCASP_TX_FS_WIDTH_WORD,
, F+ [/ V  `6 k1 SMCASP_TX_FS_INT_BEGIN_ON_RIS_EDGE);
/* configure the clock for receiver */
3 {  m( V) u) kMcASPRxClkCfg(SOC_MCASP_0_CTRL_REGS, MCASP_RX_CLK_EXTERNAL, 0, 0);
; [' v% r9 z' xMcASPRxClkPolaritySet(SOC_MCASP_0_CTRL_REGS, MCASP_RX_CLK_POL_RIS_EDGE);
8 s4 o, a! `: J, }McASPRxClkCheckConfig(SOC_MCASP_0_CTRL_REGS, MCASP_RX_CLKCHCK_DIV32,
: D4 Q, G6 {3 l( |' x( k6 F0x00, 0xFF);
/* configure the clock for transmitter */
  @# Y$ c. P- @8 kMcASPTxClkCfg(SOC_MCASP_0_CTRL_REGS, MCASP_TX_CLK_INTERNAL, 11, 1);
; Q5 F  ~7 @- V6 q+ R, fMcASPTxClkPolaritySet(SOC_MCASP_0_CTRL_REGS, MCASP_TX_CLK_POL_FALL_EDGE); 2 X8 b& Z! V4 H3 f/ c- S
McASPTxClkCheckConfig(SOC_MCASP_0_CTRL_REGS, MCASP_TX_CLKCHCK_DIV32,
' H+ p. f3 c; r- ?* ]  V0x00, 0xFF);+ x0 `" Z& r) Q0 B# _  M" s9 U
' |4 @$ h! Q# g$ e+ J
/* Enable synchronization of RX and TX sections */ $ W  F- C+ x; s( K+ x0 Y
McASPTxRxClkSyncEnable(SOC_MCASP_0_CTRL_REGS);
/* Enable the transmitter/receiver slots. I2S uses 2 slots */
/ l5 y3 A5 B/ YMcASPRxTimeSlotSet(SOC_MCASP_0_CTRL_REGS, I2S_SLOTS);3 E0 s. K2 H, e3 q- ?& D
McASPTxTimeSlotSet(SOC_MCASP_0_CTRL_REGS, I2S_SLOTS);
/*
( S: F9 |7 u. }' S! ]) A7 f** Set the serializers, Currently only one serializer is set as
$ _& i: c" Q5 f( G/ f** transmitter and one serializer as receiver.
; ~- c0 F7 H/ P( G- {' S3 b*/4 O& E, c: u" j7 [
McASPSerializerRxSet(SOC_MCASP_0_CTRL_REGS, MCASP_XSER_RX);2 y  U, e1 z" V( ]
McASPSerializerTxSet(SOC_MCASP_0_CTRL_REGS, MCASP_XSER_TX);
/*
% |5 D) P9 s+ a8 k# S** Configure the McASP pins $ D' p! ^  E3 F. Y
** Input - Frame Sync, Clock and Serializer Rx7 l. U) F0 C! o# p
** Output - Serializer Tx is connected to the input of the codec # w# v8 y0 k  \: ]
*/' p9 o% I6 Y- Z
McASPPinMcASPSet(SOC_MCASP_0_CTRL_REGS, 0xFFFFFFFF);; I% Z: k# q) q9 \
McASPPinDirOutputSet(SOC_MCASP_0_CTRL_REGS,MCASP_PIN_AXR(MCASP_XSER_TX));) e& W! s5 G; l0 f
McASPPinDirInputSet(SOC_MCASP_0_CTRL_REGS, MCASP_PIN_AFSX
  Q! [- h+ l0 f- G2 ]5 N8 l; A& O9 _| MCASP_PIN_ACLKX
& P: L( |# X( h+ ?| MCASP_PIN_AHCLKX
2 [; L9 A* t/ a| MCASP_PIN_AXR(MCASP_XSER_RX));
/* Enable error interrupts for McASP */
* ]7 z' j' ]5 Y/ m2 |4 z# bMcASPTxIntEnable(SOC_MCASP_0_CTRL_REGS, MCASP_TX_DMAERROR
+ H: R. I: h/ v! y" L: O| MCASP_TX_CLKFAIL
2 x$ P$ G& |5 M  [, S* @  D| MCASP_TX_SYNCERROR) N0 f3 E9 G1 D+ A
| MCASP_TX_UNDERRUN);
McASPRxIntEnable(SOC_MCASP_0_CTRL_REGS, MCASP_RX_DMAERROR / {3 M8 U2 b+ o+ j2 ]; }) A6 v
| MCASP_RX_CLKFAIL
( k$ n8 l1 i% _# i9 l| MCASP_RX_SYNCERROR ( N' \2 ^( {/ u+ d4 W4 B, E0 P2 v) N
| MCASP_RX_OVERRUN);& F/ A; L& B  z" a1 U& h
}
static void I2SDataTxRxActivate(void)
- Y# f$ v9 A" C5 \. [, L: l4 j: K{
* f, G) o3 H" A8 R) J' T/* Start the clocks */
7 d9 s3 b* [4 v1 JMcASPRxClkStart(SOC_MCASP_0_CTRL_REGS, MCASP_RX_CLK_EXTERNAL);& f1 @5 W1 _8 \
McASPTxClkStart(SOC_MCASP_0_CTRL_REGS, MCASP_TX_CLK_INTERNAL);
/* Enable EDMA for the transfer */1 v/ y; Q: W6 v8 F
EDMA3EnableTransfer(SOC_EDMA30CC_0_REGS, EDMA3_CHA_MCASP0_RX,# d( N; e" D: }& h4 f' D  u5 _
EDMA3_TRIG_MODE_EVENT);6 v3 Z( _7 M: g5 f2 c+ ~. d2 ~" F
EDMA3EnableTransfer(SOC_EDMA30CC_0_REGS,
9 i+ Z2 u% r1 d1 V' i5 D7 M8 PEDMA3_CHA_MCASP0_TX, EDMA3_TRIG_MODE_EVENT);
/* Activate the serializers */  t: ]8 H" y0 Z$ W
McASPRxSerActivate(SOC_MCASP_0_CTRL_REGS);7 z* K. s# D/ Y5 r+ L( `
McASPTxSerActivate(SOC_MCASP_0_CTRL_REGS);
/* make sure that the XDATA bit is cleared to zero */1 c. R+ \' e4 F& }
while(McASPTxStatusGet(SOC_MCASP_0_CTRL_REGS) & MCASP_TX_STAT_DATAREADY);
/* Activate the state machines */
- T$ Y1 h8 h, i1 }% u0 fMcASPRxEnable(SOC_MCASP_0_CTRL_REGS);
" ~# F; G% d! X' jMcASPTxEnable(SOC_MCASP_0_CTRL_REGS);
6 }( X0 ~1 h* u" c4 i7 l/ E% D6 _}
/ ^9 i3 m* c3 b- D3 p
请问:问题出在哪了,时钟按照这样配是否有错。
另外我看XDATA一直是0,接收的rxbuf0,1,2里有一般全是FFFF一半全是0.

# ], q5 v- i( V2 Z




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