嵌入式开发者社区

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

作者: wapdasta    时间: 2018-11-7 13:28
标题: MCASP自环配置。
我项目上用OMAPL138的板子MCASP的引脚都是链接的FPGA,所以在FPGA这端设置的MCASP自环。把axr0接收到的通过axr1发回去。
部分代码如下
input mcasp_afsx,
$ |5 |1 X( i0 w8 Z! M; finput mcasp_ahclkx,
3 }  ^6 \( {1 `8 o% }input mcasp_aclkx,
# _. ]  l- N( b  Z1 k  `input axr0,
$ c+ |! z$ Q  ?. ~6 W* A) g& [8 P6 d2 X4 Z5 r; K# ]) }/ X+ J
output mcasp_afsr,
+ v! u7 e& i6 {8 `- }+ C+ {output mcasp_ahclkr,
% k$ Z( b3 E" E/ |* F4 W% Koutput mcasp_aclkr,( X( X, L# i+ e7 A9 B9 w  Y  X
output axr1,( S5 P+ H- m- x1 e
assign mcasp_afsr = mcasp_afsx;
5 k) N3 `0 o( A' passign mcasp_aclkr = mcasp_aclkx;7 G8 |2 n# }5 @7 q) Z
assign mcasp_ahclkr = mcasp_ahclkx;
7 p! Q" Q7 f$ B1 v3 yassign axr1 = axr0;

/ n' h7 n0 K6 |! \) C' x2 v% W6 u3 f- b# P7 k- H
在OMAPL138这端,通过axr0接口发固定的数,axr1接收。
在配置MACASP的时候,发送全部取内部时钟,接收全部取外部时钟。
一直循环发送,但是接收不到。在FPGA端也没有看到时钟和信号的波形。
部分代码如下,关于edma3的部分未做变化。
( d/ l7 f0 w7 [; O
static void McASPI2SConfigure(void)/ {& R9 w8 ~8 t# I$ F  h' R: M
{! r: n; g7 X: ^" X# ?1 F& v
McASPRxReset(SOC_MCASP_0_CTRL_REGS);
  P3 C- a+ }" |4 sMcASPTxReset(SOC_MCASP_0_CTRL_REGS);
/* Enable the FIFOs for DMA transfer */
% {; ~' l0 D% ?) LMcASPReadFifoEnable(SOC_MCASP_0_FIFO_REGS, 1, 1);
: i1 [# S/ T  N6 lMcASPWriteFifoEnable(SOC_MCASP_0_FIFO_REGS, 1, 1);
/* Set I2S format in the transmitter/receiver format units */
$ M8 j3 A9 Y4 w' E0 IMcASPRxFmtI2SSet(SOC_MCASP_0_CTRL_REGS, WORD_SIZE, SLOT_SIZE,2 `0 R, q5 `, `1 {7 _6 k
MCASP_RX_MODE_DMA);0 T6 s: N8 I6 D2 I9 R& c9 t  V
McASPTxFmtI2SSet(SOC_MCASP_0_CTRL_REGS, WORD_SIZE, SLOT_SIZE,
, p% {( v# b( T8 I" Z  cMCASP_TX_MODE_DMA);
/* Configure the frame sync. I2S shall work in TDM format with 2 slots */
6 h. v. b+ W2 t& P6 G& \$ hMcASPRxFrameSyncCfg(SOC_MCASP_0_CTRL_REGS, 2, MCASP_RX_FS_WIDTH_WORD, 5 K7 C" O1 n$ m6 [( r! X
MCASP_RX_FS_EXT_BEGIN_ON_FALL_EDGE);/ k4 A3 \/ V1 |7 v, m' A0 a1 k" P
McASPTxFrameSyncCfg(SOC_MCASP_0_CTRL_REGS, 2, MCASP_TX_FS_WIDTH_WORD,
! V, }; e: p* ]MCASP_TX_FS_INT_BEGIN_ON_RIS_EDGE);
/* configure the clock for receiver */
" C' P! q7 z8 O' @3 r1 ]8 JMcASPRxClkCfg(SOC_MCASP_0_CTRL_REGS, MCASP_RX_CLK_EXTERNAL, 0, 0);# d) q) ?4 l; k+ l6 L1 U
McASPRxClkPolaritySet(SOC_MCASP_0_CTRL_REGS, MCASP_RX_CLK_POL_RIS_EDGE);
/ w; A+ c' Y* `9 \/ `' g! NMcASPRxClkCheckConfig(SOC_MCASP_0_CTRL_REGS, MCASP_RX_CLKCHCK_DIV32,# D4 z# ^# ?! Q  ?/ P! Z
0x00, 0xFF);
/* configure the clock for transmitter */
; c+ y9 N: w+ OMcASPTxClkCfg(SOC_MCASP_0_CTRL_REGS, MCASP_TX_CLK_INTERNAL, 11, 1);
! B5 c( t+ D; SMcASPTxClkPolaritySet(SOC_MCASP_0_CTRL_REGS, MCASP_TX_CLK_POL_FALL_EDGE); 6 y4 K5 P- f. v' ]( V, F9 j
McASPTxClkCheckConfig(SOC_MCASP_0_CTRL_REGS, MCASP_TX_CLKCHCK_DIV32,) f  J1 Q$ l2 j. ]2 ~
0x00, 0xFF);6 Z9 ?* H2 A5 B! z% ?; Y0 k

/ F% N1 h0 k; p0 L. w! F5 A& a, _/* Enable synchronization of RX and TX sections */ " X8 |, b0 L' H3 U
McASPTxRxClkSyncEnable(SOC_MCASP_0_CTRL_REGS);
/* Enable the transmitter/receiver slots. I2S uses 2 slots */; z4 [  K, b7 d; S% ]" a7 Y
McASPRxTimeSlotSet(SOC_MCASP_0_CTRL_REGS, I2S_SLOTS);& n3 T8 ?3 `0 O' u; J% P! w" W! c& e
McASPTxTimeSlotSet(SOC_MCASP_0_CTRL_REGS, I2S_SLOTS);
/*6 Y8 ~7 J! e( ?" F" v2 B  Q: @
** Set the serializers, Currently only one serializer is set as# {2 m4 Y: R1 ]- M; u9 B! h
** transmitter and one serializer as receiver.# o4 n2 `9 S% A% C; [$ b
*/" I2 W% X' @& M- w  e7 K+ z
McASPSerializerRxSet(SOC_MCASP_0_CTRL_REGS, MCASP_XSER_RX);
2 u$ G* S8 K2 X/ eMcASPSerializerTxSet(SOC_MCASP_0_CTRL_REGS, MCASP_XSER_TX);
/*; r" y  ~% _6 j6 l
** Configure the McASP pins
4 y8 t' C$ X. g1 C- A** Input - Frame Sync, Clock and Serializer Rx
6 h9 N) o/ c$ J" _** Output - Serializer Tx is connected to the input of the codec ' m' e/ s* H- e) ^* g8 W0 x
*/* e) K3 I* I) f1 i
McASPPinMcASPSet(SOC_MCASP_0_CTRL_REGS, 0xFFFFFFFF);
1 A# D, a- Y: c1 e" dMcASPPinDirOutputSet(SOC_MCASP_0_CTRL_REGS,MCASP_PIN_AXR(MCASP_XSER_TX));6 F7 \. Y  O( X" _5 K5 H
McASPPinDirInputSet(SOC_MCASP_0_CTRL_REGS, MCASP_PIN_AFSX
9 L* r7 i3 o5 t8 l| MCASP_PIN_ACLKX
) S0 u) h% m& a, e& Y' J| MCASP_PIN_AHCLKX. K) L4 z2 c& E8 k
| MCASP_PIN_AXR(MCASP_XSER_RX));
/* Enable error interrupts for McASP */1 E2 v2 i" ~/ \' K4 N5 l
McASPTxIntEnable(SOC_MCASP_0_CTRL_REGS, MCASP_TX_DMAERROR
8 n: X, C0 `& e4 K& g$ @| MCASP_TX_CLKFAIL
/ p) H) |  K' j! n| MCASP_TX_SYNCERROR
" }2 D. Y& Z5 m1 Q1 S9 k| MCASP_TX_UNDERRUN);
McASPRxIntEnable(SOC_MCASP_0_CTRL_REGS, MCASP_RX_DMAERROR , w$ m) o( S/ o- S. @! D1 I
| MCASP_RX_CLKFAIL( I- h: `8 j% g
| MCASP_RX_SYNCERROR
4 m, e2 K/ t5 X! u; |# {# k! {| MCASP_RX_OVERRUN);
! H! Q, d( s' _& g3 i: z}
static void I2SDataTxRxActivate(void)
1 n' h( [7 d+ u{
' _0 T. Z. @$ H/* Start the clocks *// B& [7 j! n- k! b
McASPRxClkStart(SOC_MCASP_0_CTRL_REGS, MCASP_RX_CLK_EXTERNAL);$ U4 n2 G4 ]6 V: E- D& [
McASPTxClkStart(SOC_MCASP_0_CTRL_REGS, MCASP_TX_CLK_INTERNAL);
/* Enable EDMA for the transfer */
, B- _0 n; ]# X9 l0 |* E5 @3 @$ VEDMA3EnableTransfer(SOC_EDMA30CC_0_REGS, EDMA3_CHA_MCASP0_RX,
/ c. V: Q- P" h* F$ J/ N: IEDMA3_TRIG_MODE_EVENT);- ?  c$ U* c" a" w
EDMA3EnableTransfer(SOC_EDMA30CC_0_REGS,
; e: l% D# y1 l8 n' Q' YEDMA3_CHA_MCASP0_TX, EDMA3_TRIG_MODE_EVENT);
/* Activate the serializers */
& B5 N3 X' M( A7 I; r7 l/ xMcASPRxSerActivate(SOC_MCASP_0_CTRL_REGS);; V) T1 b+ W7 J2 g* g& q# q7 Y: g/ f
McASPTxSerActivate(SOC_MCASP_0_CTRL_REGS);
/* make sure that the XDATA bit is cleared to zero */1 v3 ~1 o" T* o4 W% v
while(McASPTxStatusGet(SOC_MCASP_0_CTRL_REGS) & MCASP_TX_STAT_DATAREADY);
/* Activate the state machines */; X' g$ u0 ?2 M
McASPRxEnable(SOC_MCASP_0_CTRL_REGS);
$ H# @6 @% F  t4 TMcASPTxEnable(SOC_MCASP_0_CTRL_REGS);
4 f% j- d) W+ o' {, T' h$ T5 D}
+ p8 v/ [3 F9 E, _* d# z
请问:问题出在哪了,时钟按照这样配是否有错。
另外我看XDATA一直是0,接收的rxbuf0,1,2里有一般全是FFFF一半全是0.
2 P4 q( H( u5 ?/ Y- @, W  j) u! j4 a" v





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