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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

查看: 8721|回复: 0
打印 上一主题 下一主题

[未解决] MCASP自环配置。

[复制链接]

6

主题

12

帖子

1212

积分

金牌会员

Rank: 6Rank: 6

积分
1212
跳转到指定楼层
楼主
发表于 2018-11-7 13:28:07 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
我项目上用OMAPL138的板子MCASP的引脚都是链接的FPGA,所以在FPGA这端设置的MCASP自环。把axr0接收到的通过axr1发回去。
部分代码如下
input mcasp_afsx,) Q* i: M; }, x
input mcasp_ahclkx,# g2 ]& i3 P2 x' g% h5 ]
input mcasp_aclkx,% ]- k+ g$ L7 [; b, ~$ Y% r4 H
input axr0,
0 t1 V% z; K1 [5 M  |) w2 e
8 i4 |6 B9 A" y! r$ Y( v+ Aoutput mcasp_afsr,8 X  @1 E! ^% B- {
output mcasp_ahclkr,
$ m9 Q# d5 T7 X$ o/ U! qoutput mcasp_aclkr,
+ O8 }6 B/ P6 `. u/ J% _7 {+ l) Uoutput axr1,2 _! @0 u0 V3 \$ v
assign mcasp_afsr = mcasp_afsx;9 M, A! U5 r/ H2 |
assign mcasp_aclkr = mcasp_aclkx;. o# z, Z/ P- M% r, y* m
assign mcasp_ahclkr = mcasp_ahclkx;$ Q! b' g* h  m
assign axr1 = axr0;

2 K3 ~& F: ?7 \+ ^  h0 r+ {& }) w$ R
在OMAPL138这端,通过axr0接口发固定的数,axr1接收。
在配置MACASP的时候,发送全部取内部时钟,接收全部取外部时钟。
一直循环发送,但是接收不到。在FPGA端也没有看到时钟和信号的波形。
部分代码如下,关于edma3的部分未做变化。

# J! L( v: F6 t6 Y  T
static void McASPI2SConfigure(void)7 T7 _- N) @2 z( M3 S3 Y4 X
{: |+ Y2 Q/ F# P6 e/ x
McASPRxReset(SOC_MCASP_0_CTRL_REGS);
# B5 D! H. t$ h$ U  V) X7 V6 Q' N7 S/ EMcASPTxReset(SOC_MCASP_0_CTRL_REGS);
/* Enable the FIFOs for DMA transfer */
# E0 M1 t' b; E  g, Q' CMcASPReadFifoEnable(SOC_MCASP_0_FIFO_REGS, 1, 1);$ g3 [' ?$ s) H4 e/ P9 x
McASPWriteFifoEnable(SOC_MCASP_0_FIFO_REGS, 1, 1);
/* Set I2S format in the transmitter/receiver format units */4 K1 U; p+ O2 ^/ M- r: t3 v
McASPRxFmtI2SSet(SOC_MCASP_0_CTRL_REGS, WORD_SIZE, SLOT_SIZE,7 {" u" T$ D  ]$ z+ x
MCASP_RX_MODE_DMA);
+ q! X8 K' X' T* a$ lMcASPTxFmtI2SSet(SOC_MCASP_0_CTRL_REGS, WORD_SIZE, SLOT_SIZE,+ K" q* u! C+ c
MCASP_TX_MODE_DMA);
/* Configure the frame sync. I2S shall work in TDM format with 2 slots */2 j7 r: F% {+ }2 l7 x1 k  E
McASPRxFrameSyncCfg(SOC_MCASP_0_CTRL_REGS, 2, MCASP_RX_FS_WIDTH_WORD, 4 n2 {4 r) ]1 n4 M' e
MCASP_RX_FS_EXT_BEGIN_ON_FALL_EDGE);
  j  K* P8 L3 m: x, VMcASPTxFrameSyncCfg(SOC_MCASP_0_CTRL_REGS, 2, MCASP_TX_FS_WIDTH_WORD, + O+ W6 \+ x2 J3 z+ M
MCASP_TX_FS_INT_BEGIN_ON_RIS_EDGE);
/* configure the clock for receiver */3 Z+ M& l( n* e
McASPRxClkCfg(SOC_MCASP_0_CTRL_REGS, MCASP_RX_CLK_EXTERNAL, 0, 0);0 e' C# A3 ^2 u5 n
McASPRxClkPolaritySet(SOC_MCASP_0_CTRL_REGS, MCASP_RX_CLK_POL_RIS_EDGE);
5 o% l5 M, o! c) j' U! o& @McASPRxClkCheckConfig(SOC_MCASP_0_CTRL_REGS, MCASP_RX_CLKCHCK_DIV32,1 I* L8 S. m  l/ v& P
0x00, 0xFF);
/* configure the clock for transmitter */
4 ^( n! ]2 W% I9 Q  U4 [" IMcASPTxClkCfg(SOC_MCASP_0_CTRL_REGS, MCASP_TX_CLK_INTERNAL, 11, 1);
  v! F' q* S  h5 ]McASPTxClkPolaritySet(SOC_MCASP_0_CTRL_REGS, MCASP_TX_CLK_POL_FALL_EDGE);
6 K, y" w4 m8 F. N6 J) v/ fMcASPTxClkCheckConfig(SOC_MCASP_0_CTRL_REGS, MCASP_TX_CLKCHCK_DIV32,
' J8 i- n8 S7 X, U" a5 W+ p8 G0x00, 0xFF);5 f# r9 R5 J& v
7 j9 Q& [  \( c+ e* p' X
/* Enable synchronization of RX and TX sections */
/ Y9 h$ }/ r# B" Y9 WMcASPTxRxClkSyncEnable(SOC_MCASP_0_CTRL_REGS);
/* Enable the transmitter/receiver slots. I2S uses 2 slots */
# `8 e8 C5 o* I( s9 g. V) TMcASPRxTimeSlotSet(SOC_MCASP_0_CTRL_REGS, I2S_SLOTS);7 F- m) X: N( N6 U+ J7 X1 f
McASPTxTimeSlotSet(SOC_MCASP_0_CTRL_REGS, I2S_SLOTS);
/*
  A: l6 s+ o1 w" d# ~** Set the serializers, Currently only one serializer is set as! l9 r+ p, E: v7 j0 F+ X
** transmitter and one serializer as receiver.' Y2 o6 f- `" e
*/4 ]. V: {7 [2 ^! T% J9 c
McASPSerializerRxSet(SOC_MCASP_0_CTRL_REGS, MCASP_XSER_RX);
5 C# X$ M. [+ \; j8 V( c1 ~McASPSerializerTxSet(SOC_MCASP_0_CTRL_REGS, MCASP_XSER_TX);
/*# T! ?5 M6 W( R2 O2 Q
** Configure the McASP pins # ]  _& S% V! i+ L5 L, P) J
** Input - Frame Sync, Clock and Serializer Rx* a2 j' N0 d9 F% l
** Output - Serializer Tx is connected to the input of the codec
1 g" ~) P, s# M! G/ L*/
: J8 a$ _0 B% |8 d  Y: p4 }  xMcASPPinMcASPSet(SOC_MCASP_0_CTRL_REGS, 0xFFFFFFFF);
, ?9 Y. T7 ?% ZMcASPPinDirOutputSet(SOC_MCASP_0_CTRL_REGS,MCASP_PIN_AXR(MCASP_XSER_TX));6 s1 \1 n9 G( {0 T- D) f+ z% L, H
McASPPinDirInputSet(SOC_MCASP_0_CTRL_REGS, MCASP_PIN_AFSX
8 g1 }3 `7 Y5 Z( Z2 l( K1 Y| MCASP_PIN_ACLKX6 V2 J  i, w) N( ^
| MCASP_PIN_AHCLKX% }; O5 ]+ g/ F" r
| MCASP_PIN_AXR(MCASP_XSER_RX));
/* Enable error interrupts for McASP */# p4 m3 n3 O9 l6 R' ]
McASPTxIntEnable(SOC_MCASP_0_CTRL_REGS, MCASP_TX_DMAERROR
, s* a0 u" L9 }| MCASP_TX_CLKFAIL $ G- K2 t/ I% D- N4 |5 C
| MCASP_TX_SYNCERROR
, O8 e! Q- P1 U+ O6 S" G' G$ G| MCASP_TX_UNDERRUN);
McASPRxIntEnable(SOC_MCASP_0_CTRL_REGS, MCASP_RX_DMAERROR 6 }  t- a5 h  ^
| MCASP_RX_CLKFAIL
* z8 Z+ O* _9 E7 S( k| MCASP_RX_SYNCERROR
6 j' e# x% Y" p) U/ U| MCASP_RX_OVERRUN);
' [4 o+ a4 X8 Z2 C}
static void I2SDataTxRxActivate(void)  {9 b. f. @" k; x, L
{2 t3 T4 l  ?: A3 c2 u4 {
/* Start the clocks */$ Z7 h2 o& t1 x3 g- J' X. v9 @
McASPRxClkStart(SOC_MCASP_0_CTRL_REGS, MCASP_RX_CLK_EXTERNAL);, x. i" |) ^* s0 K+ B* x
McASPTxClkStart(SOC_MCASP_0_CTRL_REGS, MCASP_TX_CLK_INTERNAL);
/* Enable EDMA for the transfer */
. W0 \! k2 B7 |4 ]% y, l" f( fEDMA3EnableTransfer(SOC_EDMA30CC_0_REGS, EDMA3_CHA_MCASP0_RX,& u3 Y* l6 D4 Q$ E
EDMA3_TRIG_MODE_EVENT);
0 C  h# g0 ~" @! X5 u$ _( OEDMA3EnableTransfer(SOC_EDMA30CC_0_REGS,
& P) Y5 V+ G% h% OEDMA3_CHA_MCASP0_TX, EDMA3_TRIG_MODE_EVENT);
/* Activate the serializers */. K& v# X, ^8 L$ J' \( |+ ?8 [/ e
McASPRxSerActivate(SOC_MCASP_0_CTRL_REGS);) m: {8 C, w6 X# A- P
McASPTxSerActivate(SOC_MCASP_0_CTRL_REGS);
/* make sure that the XDATA bit is cleared to zero */
2 e$ }6 W) s: F; Mwhile(McASPTxStatusGet(SOC_MCASP_0_CTRL_REGS) & MCASP_TX_STAT_DATAREADY);
/* Activate the state machines */5 f; U3 J: G$ X  ^4 v/ j. a
McASPRxEnable(SOC_MCASP_0_CTRL_REGS);% ?" X( z# c8 Q& v
McASPTxEnable(SOC_MCASP_0_CTRL_REGS);5 `5 d, p* p1 V. X! l& b
}

% n8 o# j6 c# n+ l8 n" u
请问:问题出在哪了,时钟按照这样配是否有错。
另外我看XDATA一直是0,接收的rxbuf0,1,2里有一般全是FFFF一半全是0.
0 i, U7 P0 ?" `/ ~
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖
回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-12-3 02:54 , Processed in 0.044144 second(s), 24 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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