嵌入式开发者社区

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

作者: wapdasta    时间: 2018-11-7 13:28
标题: MCASP自环配置。
我项目上用OMAPL138的板子MCASP的引脚都是链接的FPGA,所以在FPGA这端设置的MCASP自环。把axr0接收到的通过axr1发回去。
部分代码如下
input mcasp_afsx,- ?3 T  r8 H8 ], B+ b: _
input mcasp_ahclkx,
$ ?$ r" q! G. o5 {input mcasp_aclkx,- c7 A! H+ F8 B, G% d
input axr0,
/ P" _# V) F- V( D, Q0 A8 Z# k) ]. n  x- [* ^( u
output mcasp_afsr,/ Y4 }1 M2 L2 c3 x$ p2 t2 ^) U
output mcasp_ahclkr,
6 k0 _, X0 [; p1 e9 v5 V" koutput mcasp_aclkr,
. q. `0 _* B) I. e7 Eoutput axr1,. H. ]! p, a1 Q. F' x/ s: Z, d( l
assign mcasp_afsr = mcasp_afsx;
! z. w- t, x0 zassign mcasp_aclkr = mcasp_aclkx;$ G4 [' ?2 V4 D5 j1 }3 U
assign mcasp_ahclkr = mcasp_ahclkx;% o) L5 M* }0 k5 A5 d! |* {
assign axr1 = axr0;

/ `; c+ N" }) ?( F+ Y7 L
7 d+ A9 S/ }! b
在OMAPL138这端,通过axr0接口发固定的数,axr1接收。
在配置MACASP的时候,发送全部取内部时钟,接收全部取外部时钟。
一直循环发送,但是接收不到。在FPGA端也没有看到时钟和信号的波形。
部分代码如下,关于edma3的部分未做变化。

7 [/ o% c2 \, A) t9 A; d2 s
static void McASPI2SConfigure(void)
2 \6 R  y/ `, @, I  C: @5 t' j3 x{3 ~1 z: y- e  ~, s1 B7 A; k
McASPRxReset(SOC_MCASP_0_CTRL_REGS);
8 p3 T/ Y0 I, k* d" _1 qMcASPTxReset(SOC_MCASP_0_CTRL_REGS);
/* Enable the FIFOs for DMA transfer */3 K2 \4 R$ |  {" {) j3 e3 i
McASPReadFifoEnable(SOC_MCASP_0_FIFO_REGS, 1, 1);& a0 _: m' w4 M- A/ m
McASPWriteFifoEnable(SOC_MCASP_0_FIFO_REGS, 1, 1);
/* Set I2S format in the transmitter/receiver format units */
8 g# q+ _( y0 [McASPRxFmtI2SSet(SOC_MCASP_0_CTRL_REGS, WORD_SIZE, SLOT_SIZE,. D4 `  ^# c& |+ D3 b
MCASP_RX_MODE_DMA);
6 c: ~! v3 a  H) F  WMcASPTxFmtI2SSet(SOC_MCASP_0_CTRL_REGS, WORD_SIZE, SLOT_SIZE,
% k; n( J, G2 O+ UMCASP_TX_MODE_DMA);
/* Configure the frame sync. I2S shall work in TDM format with 2 slots */
7 t$ Z# f* l( N/ o4 |: P9 U' J# ^1 oMcASPRxFrameSyncCfg(SOC_MCASP_0_CTRL_REGS, 2, MCASP_RX_FS_WIDTH_WORD, 6 \# @  o' h# f8 p, O
MCASP_RX_FS_EXT_BEGIN_ON_FALL_EDGE);( a4 A+ Y' {+ G3 y9 `* ?
McASPTxFrameSyncCfg(SOC_MCASP_0_CTRL_REGS, 2, MCASP_TX_FS_WIDTH_WORD,
- z0 D, S; @: w. hMCASP_TX_FS_INT_BEGIN_ON_RIS_EDGE);
/* configure the clock for receiver */( n2 q8 f" o0 ?4 E' j! s. D% ]" I4 I
McASPRxClkCfg(SOC_MCASP_0_CTRL_REGS, MCASP_RX_CLK_EXTERNAL, 0, 0);
& G- P0 c0 f) J$ X5 IMcASPRxClkPolaritySet(SOC_MCASP_0_CTRL_REGS, MCASP_RX_CLK_POL_RIS_EDGE);
  l; v9 A( P. q6 wMcASPRxClkCheckConfig(SOC_MCASP_0_CTRL_REGS, MCASP_RX_CLKCHCK_DIV32,
/ q' E2 E. X4 X0x00, 0xFF);
/* configure the clock for transmitter */* I, d" D* y7 P& Y
McASPTxClkCfg(SOC_MCASP_0_CTRL_REGS, MCASP_TX_CLK_INTERNAL, 11, 1);/ W6 \$ }+ n2 R" Z8 |
McASPTxClkPolaritySet(SOC_MCASP_0_CTRL_REGS, MCASP_TX_CLK_POL_FALL_EDGE); * K6 A" J& _$ ?; R8 p+ ?
McASPTxClkCheckConfig(SOC_MCASP_0_CTRL_REGS, MCASP_TX_CLKCHCK_DIV32,& ?) \* L9 C7 D, n8 Y+ P
0x00, 0xFF);& B4 ^# [% @1 C1 W

7 Y- ~7 F$ c2 L( B* }/* Enable synchronization of RX and TX sections */
& G5 ?7 b( }& q" uMcASPTxRxClkSyncEnable(SOC_MCASP_0_CTRL_REGS);
/* Enable the transmitter/receiver slots. I2S uses 2 slots */% n2 l7 M8 n3 r/ M- g% B+ E
McASPRxTimeSlotSet(SOC_MCASP_0_CTRL_REGS, I2S_SLOTS);
; C5 I5 W  r) QMcASPTxTimeSlotSet(SOC_MCASP_0_CTRL_REGS, I2S_SLOTS);
/*
9 d1 n9 }. R2 p4 l; b( R** Set the serializers, Currently only one serializer is set as6 `4 ?3 r' ~% f' ~+ {2 m9 ]; V; V# x
** transmitter and one serializer as receiver.' V( e3 ^0 Y2 D5 P; }
*/
9 K3 M" ^; h2 ~( v' U1 xMcASPSerializerRxSet(SOC_MCASP_0_CTRL_REGS, MCASP_XSER_RX);* d; G- P" d$ h( E: e
McASPSerializerTxSet(SOC_MCASP_0_CTRL_REGS, MCASP_XSER_TX);
/*
' f$ R' @4 F& k& I+ [" r' k** Configure the McASP pins
# f& r& w# D$ q0 P4 h8 d7 B** Input - Frame Sync, Clock and Serializer Rx3 {; c: z' R" Z; c& F9 c9 ^" `0 b; H
** Output - Serializer Tx is connected to the input of the codec
) ~" `- C( q" j& F*/
: q9 y" d' L/ H& ~McASPPinMcASPSet(SOC_MCASP_0_CTRL_REGS, 0xFFFFFFFF);
, r% u6 ]% E' F! L0 l9 HMcASPPinDirOutputSet(SOC_MCASP_0_CTRL_REGS,MCASP_PIN_AXR(MCASP_XSER_TX));2 d* C2 n4 U0 @: G* [4 s$ g
McASPPinDirInputSet(SOC_MCASP_0_CTRL_REGS, MCASP_PIN_AFSX5 Z2 M+ O- L8 l6 Y9 [2 y2 ], P+ [
| MCASP_PIN_ACLKX5 x4 X( R. w! S, G1 I9 U9 T2 l: {
| MCASP_PIN_AHCLKX5 b7 J' c+ {8 b" l* [* N% F
| MCASP_PIN_AXR(MCASP_XSER_RX));
/* Enable error interrupts for McASP */9 K) v5 \3 d# o5 A* G- ^! i
McASPTxIntEnable(SOC_MCASP_0_CTRL_REGS, MCASP_TX_DMAERROR ! K5 d% k/ U+ y! \' g
| MCASP_TX_CLKFAIL
2 a0 H6 J# ?1 H* j) Q9 c" \| MCASP_TX_SYNCERROR+ Q+ b. M/ g3 F3 E+ p8 p- d
| MCASP_TX_UNDERRUN);
McASPRxIntEnable(SOC_MCASP_0_CTRL_REGS, MCASP_RX_DMAERROR 9 U6 t8 \' x- b9 R1 `5 Z% z! ^" O
| MCASP_RX_CLKFAIL
' j0 i: k: L* w1 m' m7 ^8 U5 O  s| MCASP_RX_SYNCERROR
' d6 K: }' u# z( u| MCASP_RX_OVERRUN);
8 p6 z# S1 ?. g; L}
static void I2SDataTxRxActivate(void)! }: Y* C; |+ A: X7 Z8 M
{
; t. b3 H2 ?6 V! b; G2 M! A! i/* Start the clocks */
" c4 A- E4 S5 |* q1 B4 P$ w* M# zMcASPRxClkStart(SOC_MCASP_0_CTRL_REGS, MCASP_RX_CLK_EXTERNAL);
9 ~3 a" {& Q( T# q; N2 g6 PMcASPTxClkStart(SOC_MCASP_0_CTRL_REGS, MCASP_TX_CLK_INTERNAL);
/* Enable EDMA for the transfer */7 t9 f1 R5 R' W1 `5 `+ _
EDMA3EnableTransfer(SOC_EDMA30CC_0_REGS, EDMA3_CHA_MCASP0_RX,3 u+ w. ^- j* @0 K- `! {+ b
EDMA3_TRIG_MODE_EVENT);( r2 n6 U' u. s* T/ K9 ]. z
EDMA3EnableTransfer(SOC_EDMA30CC_0_REGS,
& C* s7 q' e( N- y$ U) fEDMA3_CHA_MCASP0_TX, EDMA3_TRIG_MODE_EVENT);
/* Activate the serializers */
: X* [6 P* w0 Y* o* XMcASPRxSerActivate(SOC_MCASP_0_CTRL_REGS);' ~5 \, {  a2 h1 S  q" d, E
McASPTxSerActivate(SOC_MCASP_0_CTRL_REGS);
/* make sure that the XDATA bit is cleared to zero */( r! P9 Y! B0 q/ Y! }  B+ y4 j$ M
while(McASPTxStatusGet(SOC_MCASP_0_CTRL_REGS) & MCASP_TX_STAT_DATAREADY);
/* Activate the state machines */
9 x1 s8 }7 ], d/ B, vMcASPRxEnable(SOC_MCASP_0_CTRL_REGS);. D0 n8 g1 s0 p& q3 b) x
McASPTxEnable(SOC_MCASP_0_CTRL_REGS);
8 R0 D# ]' W2 G. g1 Z: F}

* ~* w  }1 ]/ h4 q. _
请问:问题出在哪了,时钟按照这样配是否有错。
另外我看XDATA一直是0,接收的rxbuf0,1,2里有一般全是FFFF一半全是0.
- ^. H  F* r  Q4 w. \





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