嵌入式开发者社区

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

作者: wapdasta    时间: 2018-11-7 13:28
标题: MCASP自环配置。
我项目上用OMAPL138的板子MCASP的引脚都是链接的FPGA,所以在FPGA这端设置的MCASP自环。把axr0接收到的通过axr1发回去。
部分代码如下
input mcasp_afsx,
* s- `* @7 H0 k) L- Xinput mcasp_ahclkx,
6 |. @- z3 T  a6 n2 O& }input mcasp_aclkx,
6 O/ n  D4 A2 rinput axr0,
2 o3 j: O7 |+ V6 A
3 X/ E7 e9 o, _# o0 s  Q: loutput mcasp_afsr,1 x- M- W5 ~# r! M8 i7 p" ?7 K! p
output mcasp_ahclkr,5 J! |; g" u7 D2 d  I% M
output mcasp_aclkr,; D& g/ m: P' e1 K+ K+ J! |
output axr1,
8 }8 W; h" a" }* s6 W8 {5 e* k) k
assign mcasp_afsr = mcasp_afsx;* b7 }9 g5 G: i/ j0 I/ j
assign mcasp_aclkr = mcasp_aclkx;
+ x7 [! Q: d( Q- A- j3 I4 M+ }) Jassign mcasp_ahclkr = mcasp_ahclkx;' @$ V% t( Q! o  U  B/ V3 |* N8 p
assign axr1 = axr0;

, P: \! ]( g, r7 @/ K" J; g) i# k$ L( q, ]) H7 W/ i4 ~$ f* t
在OMAPL138这端,通过axr0接口发固定的数,axr1接收。
在配置MACASP的时候,发送全部取内部时钟,接收全部取外部时钟。
一直循环发送,但是接收不到。在FPGA端也没有看到时钟和信号的波形。
部分代码如下,关于edma3的部分未做变化。
, g2 k% L5 S- s# G6 x# M
static void McASPI2SConfigure(void)8 U' q7 Q4 b% h* b# a
{% S5 u$ e5 Q; B
McASPRxReset(SOC_MCASP_0_CTRL_REGS);
# i8 I; |+ \" L" EMcASPTxReset(SOC_MCASP_0_CTRL_REGS);
/* Enable the FIFOs for DMA transfer */9 |8 e( M9 T" C
McASPReadFifoEnable(SOC_MCASP_0_FIFO_REGS, 1, 1);0 `8 `8 _1 V) P9 }
McASPWriteFifoEnable(SOC_MCASP_0_FIFO_REGS, 1, 1);
/* Set I2S format in the transmitter/receiver format units */3 L+ C: R( B3 r2 {
McASPRxFmtI2SSet(SOC_MCASP_0_CTRL_REGS, WORD_SIZE, SLOT_SIZE,; X0 o6 D+ U$ n3 |
MCASP_RX_MODE_DMA);+ d, \! v  ^$ T$ U0 s1 X
McASPTxFmtI2SSet(SOC_MCASP_0_CTRL_REGS, WORD_SIZE, SLOT_SIZE,. H6 a3 F9 L7 x& |7 c& V
MCASP_TX_MODE_DMA);
/* Configure the frame sync. I2S shall work in TDM format with 2 slots */" L+ s9 ?8 l8 ]2 ]! G
McASPRxFrameSyncCfg(SOC_MCASP_0_CTRL_REGS, 2, MCASP_RX_FS_WIDTH_WORD, 3 O. s$ m* X: B6 A$ O3 H  y
MCASP_RX_FS_EXT_BEGIN_ON_FALL_EDGE);
$ \. K) j# C' r; O* kMcASPTxFrameSyncCfg(SOC_MCASP_0_CTRL_REGS, 2, MCASP_TX_FS_WIDTH_WORD, : b2 d2 c( ?6 T' O( s
MCASP_TX_FS_INT_BEGIN_ON_RIS_EDGE);
/* configure the clock for receiver */9 H; B) a- B  B, |1 D# J, B
McASPRxClkCfg(SOC_MCASP_0_CTRL_REGS, MCASP_RX_CLK_EXTERNAL, 0, 0);
& ?) E( w& `2 h% ~# UMcASPRxClkPolaritySet(SOC_MCASP_0_CTRL_REGS, MCASP_RX_CLK_POL_RIS_EDGE); 6 V+ X9 R& a/ h, x
McASPRxClkCheckConfig(SOC_MCASP_0_CTRL_REGS, MCASP_RX_CLKCHCK_DIV32,  `, r8 E% g1 X" ]" o
0x00, 0xFF);
/* configure the clock for transmitter */
3 e2 g$ }" w" Y6 Y% }0 Z5 W# NMcASPTxClkCfg(SOC_MCASP_0_CTRL_REGS, MCASP_TX_CLK_INTERNAL, 11, 1);
9 A, h6 {2 G- H4 i8 K8 DMcASPTxClkPolaritySet(SOC_MCASP_0_CTRL_REGS, MCASP_TX_CLK_POL_FALL_EDGE); : v& T5 i+ j* p8 w  z4 e) g
McASPTxClkCheckConfig(SOC_MCASP_0_CTRL_REGS, MCASP_TX_CLKCHCK_DIV32,9 t  D. D! _9 O
0x00, 0xFF);
4 W+ b5 |/ m( J
8 v! n: c, ?" r5 z1 |4 y7 E4 \/* Enable synchronization of RX and TX sections */ 9 a* }3 ^5 S; F
McASPTxRxClkSyncEnable(SOC_MCASP_0_CTRL_REGS);
/* Enable the transmitter/receiver slots. I2S uses 2 slots */" f2 _0 B( C: Q
McASPRxTimeSlotSet(SOC_MCASP_0_CTRL_REGS, I2S_SLOTS);$ p2 W! h0 j9 D+ ~% }
McASPTxTimeSlotSet(SOC_MCASP_0_CTRL_REGS, I2S_SLOTS);
/** m2 J9 K0 q, P  u+ U- x
** Set the serializers, Currently only one serializer is set as
$ l0 b) ]. B$ n' r# R** transmitter and one serializer as receiver.
! V3 ]/ Y% [/ f' x  [$ p8 u*/
$ T' U2 h* \3 g6 K2 iMcASPSerializerRxSet(SOC_MCASP_0_CTRL_REGS, MCASP_XSER_RX);6 }3 I  J5 I- _5 x8 w
McASPSerializerTxSet(SOC_MCASP_0_CTRL_REGS, MCASP_XSER_TX);
/*
4 t6 D6 @( k; x! H2 b0 s$ \! }1 A** Configure the McASP pins
! d7 v" K  L( ?: n' [% s1 `7 L** Input - Frame Sync, Clock and Serializer Rx- l$ D6 M( c0 v( k# z3 F& ~! N
** Output - Serializer Tx is connected to the input of the codec ) D, W2 Q8 `2 H$ F) h
*/
$ j% q2 t9 m, e; OMcASPPinMcASPSet(SOC_MCASP_0_CTRL_REGS, 0xFFFFFFFF);
! f4 p' r" ~+ b* EMcASPPinDirOutputSet(SOC_MCASP_0_CTRL_REGS,MCASP_PIN_AXR(MCASP_XSER_TX));% P+ H7 W; O, r9 b8 [3 w( W
McASPPinDirInputSet(SOC_MCASP_0_CTRL_REGS, MCASP_PIN_AFSX: F1 E" d) X5 Q- n  y+ z
| MCASP_PIN_ACLKX
5 ?0 q+ _( l* Y| MCASP_PIN_AHCLKX3 @" V1 u3 s9 m; Q
| MCASP_PIN_AXR(MCASP_XSER_RX));
/* Enable error interrupts for McASP */
! J, i( P+ w, W" i9 b! }McASPTxIntEnable(SOC_MCASP_0_CTRL_REGS, MCASP_TX_DMAERROR / P: W7 l$ a* p( _
| MCASP_TX_CLKFAIL / F# `1 Q. k. r8 J& A0 @
| MCASP_TX_SYNCERROR' X, @: y  d# i! Q- Q
| MCASP_TX_UNDERRUN);
McASPRxIntEnable(SOC_MCASP_0_CTRL_REGS, MCASP_RX_DMAERROR
+ X0 L9 b* m  E| MCASP_RX_CLKFAIL
9 D  a% {" o, ^# x4 L2 p0 I! m| MCASP_RX_SYNCERROR
; ]. Z. M6 n6 o( f| MCASP_RX_OVERRUN);
) F2 r7 B+ ?8 y% E, W/ V$ s; |}
static void I2SDataTxRxActivate(void)" I- g( q$ P9 b; j4 x$ y& @4 x
{
7 C" q8 ]7 J5 f- d: B% d/* Start the clocks */5 J  N) ^, a6 G: L
McASPRxClkStart(SOC_MCASP_0_CTRL_REGS, MCASP_RX_CLK_EXTERNAL);
  J9 g$ A! B$ N* ^( CMcASPTxClkStart(SOC_MCASP_0_CTRL_REGS, MCASP_TX_CLK_INTERNAL);
/* Enable EDMA for the transfer */8 V' n% J+ |9 o. E2 l4 N' u
EDMA3EnableTransfer(SOC_EDMA30CC_0_REGS, EDMA3_CHA_MCASP0_RX,
8 p& n, s6 |- o: DEDMA3_TRIG_MODE_EVENT);* G8 L$ U/ J0 W0 q/ e- o2 G
EDMA3EnableTransfer(SOC_EDMA30CC_0_REGS, 7 _. g* Q$ i5 \
EDMA3_CHA_MCASP0_TX, EDMA3_TRIG_MODE_EVENT);
/* Activate the serializers */
, E& I. |( O0 [0 {/ QMcASPRxSerActivate(SOC_MCASP_0_CTRL_REGS);
% X6 ]8 R; y/ B4 `4 |McASPTxSerActivate(SOC_MCASP_0_CTRL_REGS);
/* make sure that the XDATA bit is cleared to zero */
, N! ~: f* t% x! C: N8 t7 l. Wwhile(McASPTxStatusGet(SOC_MCASP_0_CTRL_REGS) & MCASP_TX_STAT_DATAREADY);
/* Activate the state machines */9 g$ c* ~' g/ K" m5 ~7 P! p
McASPRxEnable(SOC_MCASP_0_CTRL_REGS);4 x4 P) o1 Y: Q  B/ O6 h) O
McASPTxEnable(SOC_MCASP_0_CTRL_REGS);
  r& b7 \7 l  v9 X& L+ i! m$ V}
: _: P0 o( J0 g9 ~9 o( C8 O
请问:问题出在哪了,时钟按照这样配是否有错。
另外我看XDATA一直是0,接收的rxbuf0,1,2里有一般全是FFFF一半全是0.
0 t7 M2 d4 y- p' e. z# H





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