MCASP自环配置。 - OMAP-L138 - 嵌入式开发者社区 - 51ele.net
设为首页收藏本站

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

查看: 5645|回复: 0

[未解决] MCASP自环配置。

[复制链接]

6

主题

12

帖子

1193

积分

金牌会员

Rank: 6Rank: 6

积分
1193
发表于 2018-11-7 13:28:07 | 显示全部楼层 |阅读模式
我项目上用OMAPL138的板子MCASP的引脚都是链接的FPGA,所以在FPGA这端设置的MCASP自环。把axr0接收到的通过axr1发回去。
部分代码如下
input mcasp_afsx,+ \6 E1 _+ e8 K. p! x1 H( I1 N
input mcasp_ahclkx,
- U6 Y0 l) A. z7 `input mcasp_aclkx,# c! F! k% t  [5 ]% P
input axr0,7 q; M1 B3 u! e

- o" p$ x0 t# Q+ e% d2 Soutput mcasp_afsr,
6 x8 F5 `  p2 [% n5 C: k/ F" c% L# [1 m" Boutput mcasp_ahclkr,
9 P; K5 d( o) w: w4 M* b- T0 z/ {output mcasp_aclkr,) G- E' N3 P2 |' d
output axr1,4 Z& h/ v% r/ e* O3 \. O- F% v
assign mcasp_afsr = mcasp_afsx;# Z4 l) u2 `' \$ a- q( \& x8 Q
assign mcasp_aclkr = mcasp_aclkx;
- Y/ w6 I. I7 D. L# `assign mcasp_ahclkr = mcasp_ahclkx;
! Y9 a5 O$ D/ Y% a% ?assign axr1 = axr0;
1 K, n9 x+ E& G1 X: L* z

  w3 K9 N# [8 M1 Q% c! s
在OMAPL138这端,通过axr0接口发固定的数,axr1接收。
在配置MACASP的时候,发送全部取内部时钟,接收全部取外部时钟。
一直循环发送,但是接收不到。在FPGA端也没有看到时钟和信号的波形。
部分代码如下,关于edma3的部分未做变化。
4 ~9 X7 y0 [5 S8 W5 c: o) ?$ ]
static void McASPI2SConfigure(void)# q" h$ u# T+ M; p
{; B0 i5 ]7 k) q$ j7 Y/ C" m
McASPRxReset(SOC_MCASP_0_CTRL_REGS);4 c& ]/ T9 H) A% l0 S) l  c' u8 x
McASPTxReset(SOC_MCASP_0_CTRL_REGS);
/* Enable the FIFOs for DMA transfer */
/ g: d; V5 n2 l: AMcASPReadFifoEnable(SOC_MCASP_0_FIFO_REGS, 1, 1);
' M- e' O) C8 E! CMcASPWriteFifoEnable(SOC_MCASP_0_FIFO_REGS, 1, 1);
/* Set I2S format in the transmitter/receiver format units */
% [( c9 U) C/ u/ mMcASPRxFmtI2SSet(SOC_MCASP_0_CTRL_REGS, WORD_SIZE, SLOT_SIZE,- U# k1 f# V/ k! ^- p
MCASP_RX_MODE_DMA);- ^- T* ]) H8 G* T
McASPTxFmtI2SSet(SOC_MCASP_0_CTRL_REGS, WORD_SIZE, SLOT_SIZE,9 s+ G+ b5 z6 P) a& f, g5 }0 H
MCASP_TX_MODE_DMA);
/* Configure the frame sync. I2S shall work in TDM format with 2 slots */
4 M3 s$ \. S7 T7 B  eMcASPRxFrameSyncCfg(SOC_MCASP_0_CTRL_REGS, 2, MCASP_RX_FS_WIDTH_WORD, 3 R) r) X- P0 D& W
MCASP_RX_FS_EXT_BEGIN_ON_FALL_EDGE);
0 ~- x* @$ ?: w1 R6 ?. S0 B/ Z! r, B4 @McASPTxFrameSyncCfg(SOC_MCASP_0_CTRL_REGS, 2, MCASP_TX_FS_WIDTH_WORD,
7 r; P& D7 Z! n/ y1 DMCASP_TX_FS_INT_BEGIN_ON_RIS_EDGE);
/* configure the clock for receiver */
7 J$ T6 g" r( tMcASPRxClkCfg(SOC_MCASP_0_CTRL_REGS, MCASP_RX_CLK_EXTERNAL, 0, 0);
3 d9 D- G0 v7 p$ \' n8 fMcASPRxClkPolaritySet(SOC_MCASP_0_CTRL_REGS, MCASP_RX_CLK_POL_RIS_EDGE); 7 N6 I' |% x) g& G% p" T2 y! M' x
McASPRxClkCheckConfig(SOC_MCASP_0_CTRL_REGS, MCASP_RX_CLKCHCK_DIV32,
1 K8 d$ G  A% [9 n3 b, e" m5 @& N  i0x00, 0xFF);
/* configure the clock for transmitter */4 M/ Z& p3 Q! p) M
McASPTxClkCfg(SOC_MCASP_0_CTRL_REGS, MCASP_TX_CLK_INTERNAL, 11, 1);% {5 Z5 O1 i# p& }6 l% y  |
McASPTxClkPolaritySet(SOC_MCASP_0_CTRL_REGS, MCASP_TX_CLK_POL_FALL_EDGE);
1 E2 K  w2 m2 S8 `9 Z. FMcASPTxClkCheckConfig(SOC_MCASP_0_CTRL_REGS, MCASP_TX_CLKCHCK_DIV32,  U5 C5 _8 k; o+ ^: ^8 @
0x00, 0xFF);
7 Z0 d# R; M7 \; O, z
  w- G* H* n( b. ?/* Enable synchronization of RX and TX sections */ 0 s; v7 W( E3 I6 L& ?% S- ?9 Y
McASPTxRxClkSyncEnable(SOC_MCASP_0_CTRL_REGS);
/* Enable the transmitter/receiver slots. I2S uses 2 slots */2 J/ b/ [2 o7 a3 s" O% O, I" C
McASPRxTimeSlotSet(SOC_MCASP_0_CTRL_REGS, I2S_SLOTS);
- k( O! W3 f3 ?/ j$ S8 IMcASPTxTimeSlotSet(SOC_MCASP_0_CTRL_REGS, I2S_SLOTS);
/*: r! H5 a$ t9 t' s
** Set the serializers, Currently only one serializer is set as
; h8 u8 s  j! k! M** transmitter and one serializer as receiver.
) o8 z4 R( f* G7 [*/
& \7 M2 c$ J* Q( H, J7 w: pMcASPSerializerRxSet(SOC_MCASP_0_CTRL_REGS, MCASP_XSER_RX);
. Q0 ?9 z, f1 A8 y5 BMcASPSerializerTxSet(SOC_MCASP_0_CTRL_REGS, MCASP_XSER_TX);
/*6 ?1 j1 X; ^( C9 \2 I3 M% i$ j/ d
** Configure the McASP pins
0 I# D8 l  Y$ c" J** Input - Frame Sync, Clock and Serializer Rx8 l& h+ G4 ~* E
** Output - Serializer Tx is connected to the input of the codec
0 m* p8 d% {0 P% m- V0 |" X*/
3 K9 O' U+ E. D. W" r3 T/ {6 K( cMcASPPinMcASPSet(SOC_MCASP_0_CTRL_REGS, 0xFFFFFFFF);: o1 j" e5 _9 S7 i) I8 B
McASPPinDirOutputSet(SOC_MCASP_0_CTRL_REGS,MCASP_PIN_AXR(MCASP_XSER_TX));
6 N, M. O/ u; \* yMcASPPinDirInputSet(SOC_MCASP_0_CTRL_REGS, MCASP_PIN_AFSX
7 W7 }5 W# U' ?8 V! p" c$ ^; S$ }0 f| MCASP_PIN_ACLKX
' V4 {7 Q2 ^2 ], B4 p' z| MCASP_PIN_AHCLKX
  r& W) [; P) {. N( H| MCASP_PIN_AXR(MCASP_XSER_RX));
/* Enable error interrupts for McASP */. a1 z) F% I, x3 ~6 A4 H
McASPTxIntEnable(SOC_MCASP_0_CTRL_REGS, MCASP_TX_DMAERROR
" P% k' c3 n- ]2 l! A/ A| MCASP_TX_CLKFAIL
$ U* m# I# h/ z. d! i| MCASP_TX_SYNCERROR
: o  l) v+ S5 c$ m| MCASP_TX_UNDERRUN);
McASPRxIntEnable(SOC_MCASP_0_CTRL_REGS, MCASP_RX_DMAERROR % e% M( A! P2 F# f& v. p
| MCASP_RX_CLKFAIL. `6 F- q5 l3 Y
| MCASP_RX_SYNCERROR 1 G3 O# F$ T' e9 [3 h
| MCASP_RX_OVERRUN);
& l1 U! ^; r, a3 B}
static void I2SDataTxRxActivate(void)
* J: W0 J& Q2 u, I& a3 S{7 M/ y" z( \7 p4 U8 P
/* Start the clocks */
! J6 d2 V' S2 q" NMcASPRxClkStart(SOC_MCASP_0_CTRL_REGS, MCASP_RX_CLK_EXTERNAL);8 U8 ^. W8 N+ _
McASPTxClkStart(SOC_MCASP_0_CTRL_REGS, MCASP_TX_CLK_INTERNAL);
/* Enable EDMA for the transfer */# ]8 D9 C4 F$ S! w- x
EDMA3EnableTransfer(SOC_EDMA30CC_0_REGS, EDMA3_CHA_MCASP0_RX,- s- Z2 y6 k/ i8 ~% R
EDMA3_TRIG_MODE_EVENT);
( s/ Y4 n( b$ Y3 S0 D4 z9 A) }EDMA3EnableTransfer(SOC_EDMA30CC_0_REGS,
! K+ d" u. M/ `/ Z7 l# XEDMA3_CHA_MCASP0_TX, EDMA3_TRIG_MODE_EVENT);
/* Activate the serializers */# I6 G7 m+ V" d1 A( A
McASPRxSerActivate(SOC_MCASP_0_CTRL_REGS);. o8 G- P" C# j! H
McASPTxSerActivate(SOC_MCASP_0_CTRL_REGS);
/* make sure that the XDATA bit is cleared to zero */
3 L0 k+ _9 ]$ t5 O# xwhile(McASPTxStatusGet(SOC_MCASP_0_CTRL_REGS) & MCASP_TX_STAT_DATAREADY);
/* Activate the state machines */0 I  t  M% K6 K' j# Z
McASPRxEnable(SOC_MCASP_0_CTRL_REGS);
3 p9 B1 o) y; R4 [McASPTxEnable(SOC_MCASP_0_CTRL_REGS);
, x" C' I- M8 ]: z2 v* B1 n}
' s; h5 r6 K6 ^3 d; C# }
请问:问题出在哪了,时钟按照这样配是否有错。
另外我看XDATA一直是0,接收的rxbuf0,1,2里有一般全是FFFF一半全是0.

6 X% l+ M: h3 q- G' y9 ?
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|手机版|小黑屋|嵌入式开发者社区 ( 粤ICP备15055271号

GMT+8, 2024-3-29 07:06 , Processed in 0.039405 second(s), 25 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

快速回复 返回顶部 返回列表