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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

[未解决] MCASP自环配置。

[复制链接]

6

主题

12

帖子

1211

积分

金牌会员

Rank: 6Rank: 6

积分
1211
跳转到指定楼层
楼主
发表于 2018-11-7 13:28:07 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
我项目上用OMAPL138的板子MCASP的引脚都是链接的FPGA,所以在FPGA这端设置的MCASP自环。把axr0接收到的通过axr1发回去。
部分代码如下
input mcasp_afsx,
4 g- b& Y  ]' cinput mcasp_ahclkx,
. L4 ?9 X) u( i5 @input mcasp_aclkx,: \9 e" m5 r% n
input axr0,
8 ]! G: M: @* m0 b1 [- ^
- \7 |% w& b' G; x, W) Y  c0 h2 Doutput mcasp_afsr,
) Z9 U( a* W9 D* U( ?( B) f2 Koutput mcasp_ahclkr,: ^: F* {9 r: [* F, F
output mcasp_aclkr,
# F4 `% I/ Y/ E( [output axr1,0 ]9 k5 Z9 q& ~( @( M  v
assign mcasp_afsr = mcasp_afsx;
3 K) B0 U( R$ A: C  Bassign mcasp_aclkr = mcasp_aclkx;7 m/ @3 M) X* `* f/ Q$ \
assign mcasp_ahclkr = mcasp_ahclkx;: V$ L/ [; y. L. V. i( F: }7 |+ N( ~
assign axr1 = axr0;
7 d: o7 A" Z3 g

: a; A" \5 f1 C/ V- X
在OMAPL138这端,通过axr0接口发固定的数,axr1接收。
在配置MACASP的时候,发送全部取内部时钟,接收全部取外部时钟。
一直循环发送,但是接收不到。在FPGA端也没有看到时钟和信号的波形。
部分代码如下,关于edma3的部分未做变化。
8 B' N. |7 |9 p
static void McASPI2SConfigure(void)2 h+ M  o' q- X, K$ V3 e8 h
{
5 F7 s9 ^/ `, h( Y5 XMcASPRxReset(SOC_MCASP_0_CTRL_REGS);& j' ?0 y. i5 C  F; Z& N0 X
McASPTxReset(SOC_MCASP_0_CTRL_REGS);
/* Enable the FIFOs for DMA transfer */
8 x* q& K. z6 X' uMcASPReadFifoEnable(SOC_MCASP_0_FIFO_REGS, 1, 1);) A9 ~  N; T4 [, \: M* _3 b3 p% D
McASPWriteFifoEnable(SOC_MCASP_0_FIFO_REGS, 1, 1);
/* Set I2S format in the transmitter/receiver format units */7 N5 O* g+ W+ b* X: Z
McASPRxFmtI2SSet(SOC_MCASP_0_CTRL_REGS, WORD_SIZE, SLOT_SIZE,+ \( f3 q6 N: o4 ^
MCASP_RX_MODE_DMA);
% g/ v! b; k$ k+ G9 S+ N0 ^. tMcASPTxFmtI2SSet(SOC_MCASP_0_CTRL_REGS, WORD_SIZE, SLOT_SIZE,
- U# h* Q. O' ]# I# ^: I, W- e! eMCASP_TX_MODE_DMA);
/* Configure the frame sync. I2S shall work in TDM format with 2 slots */( ^/ p: z9 g# A. Z
McASPRxFrameSyncCfg(SOC_MCASP_0_CTRL_REGS, 2, MCASP_RX_FS_WIDTH_WORD, - Z5 m! M* a9 l0 b8 P+ d
MCASP_RX_FS_EXT_BEGIN_ON_FALL_EDGE);
+ P/ }7 f& S% ^+ ~McASPTxFrameSyncCfg(SOC_MCASP_0_CTRL_REGS, 2, MCASP_TX_FS_WIDTH_WORD, * h$ n; l: N5 x% z& b
MCASP_TX_FS_INT_BEGIN_ON_RIS_EDGE);
/* configure the clock for receiver */  t+ O% }4 R  W$ C- `1 ?
McASPRxClkCfg(SOC_MCASP_0_CTRL_REGS, MCASP_RX_CLK_EXTERNAL, 0, 0);" k! A* W* q! F) l) M$ F
McASPRxClkPolaritySet(SOC_MCASP_0_CTRL_REGS, MCASP_RX_CLK_POL_RIS_EDGE);
" o& D8 B; x' cMcASPRxClkCheckConfig(SOC_MCASP_0_CTRL_REGS, MCASP_RX_CLKCHCK_DIV32,
8 |4 Y8 `/ L# W  J9 P1 Q, c0x00, 0xFF);
/* configure the clock for transmitter */( U9 N) i2 u1 {$ R( M% @7 t
McASPTxClkCfg(SOC_MCASP_0_CTRL_REGS, MCASP_TX_CLK_INTERNAL, 11, 1);
5 p, s8 I, \, q; {# K1 `McASPTxClkPolaritySet(SOC_MCASP_0_CTRL_REGS, MCASP_TX_CLK_POL_FALL_EDGE);
- v/ k3 I* @! R/ a, MMcASPTxClkCheckConfig(SOC_MCASP_0_CTRL_REGS, MCASP_TX_CLKCHCK_DIV32,
. H$ Y4 _3 g* X- G5 Q7 m0x00, 0xFF);
4 J! Y2 a) \3 K. r( e2 a
, Q+ n* E& S. t" M8 `( S# [9 j1 [( _/* Enable synchronization of RX and TX sections */ 4 S5 g; f% u" n8 K% I
McASPTxRxClkSyncEnable(SOC_MCASP_0_CTRL_REGS);
/* Enable the transmitter/receiver slots. I2S uses 2 slots */
3 p8 ?/ j: h. ]2 s& I3 VMcASPRxTimeSlotSet(SOC_MCASP_0_CTRL_REGS, I2S_SLOTS);4 y; M3 Y/ A  e" Z; F
McASPTxTimeSlotSet(SOC_MCASP_0_CTRL_REGS, I2S_SLOTS);
/*
2 d8 H' R, s0 H1 B0 }! a7 K+ l** Set the serializers, Currently only one serializer is set as
8 J6 R5 f1 ^$ o3 `1 j8 v) M, z** transmitter and one serializer as receiver.
/ t9 z# p: [, H* o: a5 `# t*/
4 m. \3 K; C! \7 N5 v6 EMcASPSerializerRxSet(SOC_MCASP_0_CTRL_REGS, MCASP_XSER_RX);& \  E' P  B! a# `: u7 W
McASPSerializerTxSet(SOC_MCASP_0_CTRL_REGS, MCASP_XSER_TX);
/*
) a( \5 G* [: L. G+ y** Configure the McASP pins
  D# u+ Q5 H2 ]/ n8 l* G, ~** Input - Frame Sync, Clock and Serializer Rx
6 A& V$ V6 A6 [6 N' Y) i# ^** Output - Serializer Tx is connected to the input of the codec
2 y6 j9 p/ l  ?% N*/
* q! N0 V6 t) }McASPPinMcASPSet(SOC_MCASP_0_CTRL_REGS, 0xFFFFFFFF);) F! b# h3 c* x- W% q
McASPPinDirOutputSet(SOC_MCASP_0_CTRL_REGS,MCASP_PIN_AXR(MCASP_XSER_TX));& L9 S: |6 ?. h$ W8 Z
McASPPinDirInputSet(SOC_MCASP_0_CTRL_REGS, MCASP_PIN_AFSX
4 Y5 M  H, o9 B  g| MCASP_PIN_ACLKX
0 }, k- q! I, n, _| MCASP_PIN_AHCLKX
9 M$ I, Y, H/ u9 R| MCASP_PIN_AXR(MCASP_XSER_RX));
/* Enable error interrupts for McASP */
: O4 O* V2 h# K# }McASPTxIntEnable(SOC_MCASP_0_CTRL_REGS, MCASP_TX_DMAERROR
% H5 B4 E+ B+ c| MCASP_TX_CLKFAIL , H0 ?' M$ H) R% R/ s+ P
| MCASP_TX_SYNCERROR
+ j" S) [& G$ |1 @| MCASP_TX_UNDERRUN);
McASPRxIntEnable(SOC_MCASP_0_CTRL_REGS, MCASP_RX_DMAERROR 5 G: P$ n; {7 ]8 W7 a0 N
| MCASP_RX_CLKFAIL) P; z+ W* U! |* @
| MCASP_RX_SYNCERROR
3 p# ], l2 ^* n& I# \| MCASP_RX_OVERRUN);
  b. P: T, u: C2 B8 V}
static void I2SDataTxRxActivate(void)& w9 h' N8 Y" p, G! a* \
{
- v6 {  k3 z" l. ]) B1 E5 j- x/* Start the clocks */
: i) s1 E& M& S7 ~& J1 AMcASPRxClkStart(SOC_MCASP_0_CTRL_REGS, MCASP_RX_CLK_EXTERNAL);: [: G: K/ m7 Q; l  q
McASPTxClkStart(SOC_MCASP_0_CTRL_REGS, MCASP_TX_CLK_INTERNAL);
/* Enable EDMA for the transfer */
/ l: B0 E0 N( pEDMA3EnableTransfer(SOC_EDMA30CC_0_REGS, EDMA3_CHA_MCASP0_RX,
) ]/ T( M2 w8 O8 lEDMA3_TRIG_MODE_EVENT);
$ q. F" u3 H: L8 m' y, _EDMA3EnableTransfer(SOC_EDMA30CC_0_REGS,
' o9 x( D7 w6 bEDMA3_CHA_MCASP0_TX, EDMA3_TRIG_MODE_EVENT);
/* Activate the serializers */
6 ~7 o. P# H+ b. T. H+ xMcASPRxSerActivate(SOC_MCASP_0_CTRL_REGS);% j/ P+ T! _7 }3 w  R
McASPTxSerActivate(SOC_MCASP_0_CTRL_REGS);
/* make sure that the XDATA bit is cleared to zero */' g4 h' D8 p8 |; ]$ J* S0 v
while(McASPTxStatusGet(SOC_MCASP_0_CTRL_REGS) & MCASP_TX_STAT_DATAREADY);
/* Activate the state machines */
8 c& I# H0 h" u& n4 x" h) ^) v2 @McASPRxEnable(SOC_MCASP_0_CTRL_REGS);  N  R4 a: ]5 D; z& U* G
McASPTxEnable(SOC_MCASP_0_CTRL_REGS);
& H2 i# f$ y; |) c}

! r1 u) v( I1 s
请问:问题出在哪了,时钟按照这样配是否有错。
另外我看XDATA一直是0,接收的rxbuf0,1,2里有一般全是FFFF一半全是0.

  M( d4 {6 _- L) j( _
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖
回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-11-23 20:00 , Processed in 0.044184 second(s), 26 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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