嵌入式开发者社区

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

作者: wapdasta    时间: 2018-11-7 13:28
标题: MCASP自环配置。
我项目上用OMAPL138的板子MCASP的引脚都是链接的FPGA,所以在FPGA这端设置的MCASP自环。把axr0接收到的通过axr1发回去。
部分代码如下
input mcasp_afsx,% K3 z8 y; _; g
input mcasp_ahclkx,% O" M' V% [6 w, d# f, Z9 e
input mcasp_aclkx,
9 c, ?/ p- G& q$ `, ?1 ]$ ^input axr0,
: S( Y2 U! K* E- B5 O% u  T9 z: {# C5 ^0 q0 U
output mcasp_afsr,
" D' g2 q8 R+ Y0 f& noutput mcasp_ahclkr,
2 j' X% U/ |& T$ Xoutput mcasp_aclkr,% m- T, v/ O: G5 u$ j
output axr1,7 e$ R6 i' V5 K4 o6 I# u
assign mcasp_afsr = mcasp_afsx;
8 V2 k* C* O/ d2 l! ~7 [# gassign mcasp_aclkr = mcasp_aclkx;
" Z7 N9 S! h* O9 T4 ]' ~assign mcasp_ahclkr = mcasp_ahclkx;
8 A; A0 C2 l8 o, p; N, y# H& Sassign axr1 = axr0;

" x2 b- i; S6 b- J# ^. }' G* t$ Q2 \7 d  ^
在OMAPL138这端,通过axr0接口发固定的数,axr1接收。
在配置MACASP的时候,发送全部取内部时钟,接收全部取外部时钟。
一直循环发送,但是接收不到。在FPGA端也没有看到时钟和信号的波形。
部分代码如下,关于edma3的部分未做变化。

' c4 B0 o* [9 l, ?* @* n. S
static void McASPI2SConfigure(void)% h6 t# z, A0 |5 @; x3 v! Z+ r
{/ L( ]) D7 J  X+ K
McASPRxReset(SOC_MCASP_0_CTRL_REGS);- h3 L0 P  D3 f* N) _
McASPTxReset(SOC_MCASP_0_CTRL_REGS);
/* Enable the FIFOs for DMA transfer */$ e, q* x8 a; G( P  H
McASPReadFifoEnable(SOC_MCASP_0_FIFO_REGS, 1, 1);
! `) ?- }  X, n+ t9 x9 S+ p9 FMcASPWriteFifoEnable(SOC_MCASP_0_FIFO_REGS, 1, 1);
/* Set I2S format in the transmitter/receiver format units */
2 S, S; a8 e3 o7 N: Y. a9 RMcASPRxFmtI2SSet(SOC_MCASP_0_CTRL_REGS, WORD_SIZE, SLOT_SIZE,5 G7 L! o4 _# j2 l0 T0 [; l9 Q# k
MCASP_RX_MODE_DMA);: D, D9 v5 }  m3 u0 a
McASPTxFmtI2SSet(SOC_MCASP_0_CTRL_REGS, WORD_SIZE, SLOT_SIZE,9 D( u! ]5 J* x- W, ?: ?4 z3 f
MCASP_TX_MODE_DMA);
/* Configure the frame sync. I2S shall work in TDM format with 2 slots */
+ O- x: H8 [0 a, EMcASPRxFrameSyncCfg(SOC_MCASP_0_CTRL_REGS, 2, MCASP_RX_FS_WIDTH_WORD,
5 @0 s7 H" e- J0 {, MMCASP_RX_FS_EXT_BEGIN_ON_FALL_EDGE);, c& j* J% v' C
McASPTxFrameSyncCfg(SOC_MCASP_0_CTRL_REGS, 2, MCASP_TX_FS_WIDTH_WORD, 1 h9 A' g: _, ]7 |
MCASP_TX_FS_INT_BEGIN_ON_RIS_EDGE);
/* configure the clock for receiver */
; x% Y- j. }; V: v9 L/ h8 rMcASPRxClkCfg(SOC_MCASP_0_CTRL_REGS, MCASP_RX_CLK_EXTERNAL, 0, 0);
" o: l7 }1 j" l  |0 M' sMcASPRxClkPolaritySet(SOC_MCASP_0_CTRL_REGS, MCASP_RX_CLK_POL_RIS_EDGE);
' B1 |) W4 i1 v1 {McASPRxClkCheckConfig(SOC_MCASP_0_CTRL_REGS, MCASP_RX_CLKCHCK_DIV32,( S) z* P  D$ k1 |% A  e
0x00, 0xFF);
/* configure the clock for transmitter *// v( ~# n$ r7 J" t% r( F" c, `, b
McASPTxClkCfg(SOC_MCASP_0_CTRL_REGS, MCASP_TX_CLK_INTERNAL, 11, 1);/ c/ r, h2 l9 W" }1 R1 v  _
McASPTxClkPolaritySet(SOC_MCASP_0_CTRL_REGS, MCASP_TX_CLK_POL_FALL_EDGE);
+ W3 S8 E& ^( Q; h5 _; oMcASPTxClkCheckConfig(SOC_MCASP_0_CTRL_REGS, MCASP_TX_CLKCHCK_DIV32,
7 H" h7 a# |# ^# X% D1 S+ K0x00, 0xFF);
, x, g5 a' P6 l1 \; a/ z. q
* y5 |. _& s$ k% D/* Enable synchronization of RX and TX sections */
- P, P' B/ Q1 g7 T5 @3 j: q1 A. ZMcASPTxRxClkSyncEnable(SOC_MCASP_0_CTRL_REGS);
/* Enable the transmitter/receiver slots. I2S uses 2 slots */
; m* l- B" U6 R' pMcASPRxTimeSlotSet(SOC_MCASP_0_CTRL_REGS, I2S_SLOTS);/ [! j, D; A4 s- t  E) R5 H
McASPTxTimeSlotSet(SOC_MCASP_0_CTRL_REGS, I2S_SLOTS);
/*
: ~, u3 l$ S8 N4 w4 |** Set the serializers, Currently only one serializer is set as
/ N% s( `+ o0 d. }** transmitter and one serializer as receiver.
  I! a, u3 h" [4 [*/0 E* j" D$ p7 g, T1 @+ P
McASPSerializerRxSet(SOC_MCASP_0_CTRL_REGS, MCASP_XSER_RX);
8 f+ b9 ^6 I' Y2 _McASPSerializerTxSet(SOC_MCASP_0_CTRL_REGS, MCASP_XSER_TX);
/*
# ^3 m6 M7 F) F. P( _** Configure the McASP pins
' C2 G$ k4 e9 ^** Input - Frame Sync, Clock and Serializer Rx# D9 P  K8 f1 z5 y, x7 B9 d% L! f; u
** Output - Serializer Tx is connected to the input of the codec
- @4 x1 V$ \! O/ V9 `*/
; o- p+ O* @0 n+ G  n! t" C; nMcASPPinMcASPSet(SOC_MCASP_0_CTRL_REGS, 0xFFFFFFFF);
2 a; U3 r% f& pMcASPPinDirOutputSet(SOC_MCASP_0_CTRL_REGS,MCASP_PIN_AXR(MCASP_XSER_TX));
0 s" u; D  ^/ b# hMcASPPinDirInputSet(SOC_MCASP_0_CTRL_REGS, MCASP_PIN_AFSX& i6 s$ c/ L3 S2 u
| MCASP_PIN_ACLKX
( c9 T2 ^- Z, z7 K* I9 P' m| MCASP_PIN_AHCLKX7 `; S$ _3 l) Z# R1 p% m
| MCASP_PIN_AXR(MCASP_XSER_RX));
/* Enable error interrupts for McASP */
  ?3 T8 d' y/ O' b" K# fMcASPTxIntEnable(SOC_MCASP_0_CTRL_REGS, MCASP_TX_DMAERROR 0 v4 [/ ]) n' ~2 V3 q- ?, P7 G
| MCASP_TX_CLKFAIL : U3 [+ {0 G2 h  _- p9 h8 g4 C3 P
| MCASP_TX_SYNCERROR- x/ o2 Y$ j5 c6 }# e+ [$ _
| MCASP_TX_UNDERRUN);
McASPRxIntEnable(SOC_MCASP_0_CTRL_REGS, MCASP_RX_DMAERROR
/ ?% U2 r# k* Q5 I, s& b| MCASP_RX_CLKFAIL
; H  H8 o" P+ {- F  s. z0 I| MCASP_RX_SYNCERROR
4 T7 R$ `; H2 q' U| MCASP_RX_OVERRUN);- c/ A, _0 D% m( u* \- \6 Z2 d& q4 ~
}
static void I2SDataTxRxActivate(void)4 Z  j/ M* v$ k* d5 o) e
{
0 z, D' H3 X8 _+ ~* u/ _/ a/* Start the clocks */% G! [/ s6 a* c, ^+ r4 v) o: i) W
McASPRxClkStart(SOC_MCASP_0_CTRL_REGS, MCASP_RX_CLK_EXTERNAL);. d9 R% r' Q+ c6 V/ V3 ^5 M" \
McASPTxClkStart(SOC_MCASP_0_CTRL_REGS, MCASP_TX_CLK_INTERNAL);
/* Enable EDMA for the transfer */7 L2 i3 x( g1 c
EDMA3EnableTransfer(SOC_EDMA30CC_0_REGS, EDMA3_CHA_MCASP0_RX,2 Q# A; _2 J1 _' X. l& p
EDMA3_TRIG_MODE_EVENT);
4 Y4 B" g! i$ V  l# k, FEDMA3EnableTransfer(SOC_EDMA30CC_0_REGS, $ t. H% v; {3 l' M# L0 g
EDMA3_CHA_MCASP0_TX, EDMA3_TRIG_MODE_EVENT);
/* Activate the serializers */
9 l2 L% Y) W! M! TMcASPRxSerActivate(SOC_MCASP_0_CTRL_REGS);9 S  J+ _# ]( d& q
McASPTxSerActivate(SOC_MCASP_0_CTRL_REGS);
/* make sure that the XDATA bit is cleared to zero */
  C' V/ r  W& Z9 kwhile(McASPTxStatusGet(SOC_MCASP_0_CTRL_REGS) & MCASP_TX_STAT_DATAREADY);
/* Activate the state machines */( V- E' G2 v  j% ~5 r2 f
McASPRxEnable(SOC_MCASP_0_CTRL_REGS);6 ^" k% P/ r5 R* g4 N0 s6 r2 c) ~! ]" J2 o% n
McASPTxEnable(SOC_MCASP_0_CTRL_REGS);
% o3 w  t9 @/ t# }6 ]}

; ]7 u- W1 K; i8 v# Y/ j4 p
请问:问题出在哪了,时钟按照这样配是否有错。
另外我看XDATA一直是0,接收的rxbuf0,1,2里有一般全是FFFF一半全是0.
+ U  O& W* N9 a$ O9 Z7 ^# l





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