MCASP自环配置。 - OMAP-L138 - 嵌入式开发者社区 - 51ele.net
设为首页收藏本站
点击跳转“创龙科技服务通”

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

[未解决] MCASP自环配置。

[复制链接]

6

主题

12

帖子

1216

积分

金牌会员

Rank: 6Rank: 6

积分
1216
跳转到指定楼层
楼主
发表于 2018-11-7 13:28:07 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
我项目上用OMAPL138的板子MCASP的引脚都是链接的FPGA,所以在FPGA这端设置的MCASP自环。把axr0接收到的通过axr1发回去。
部分代码如下
input mcasp_afsx,
) x: f9 K) K" u# n( V) cinput mcasp_ahclkx,7 P% E) c) X2 Z/ I
input mcasp_aclkx,
" t4 M* w. a! x* G- |) X( Iinput axr0,, \5 |5 Q' u9 K, r5 v
' b+ m7 a" ~% w- R4 V* h
output mcasp_afsr,; V1 T0 n$ X% L0 x
output mcasp_ahclkr,. m9 m$ r/ K1 M/ M. [
output mcasp_aclkr,8 }' S1 R" Q7 p# ?9 A
output axr1,0 @9 A$ X3 G0 \4 [) g3 n
assign mcasp_afsr = mcasp_afsx;3 O# w7 _- m# t, f& N
assign mcasp_aclkr = mcasp_aclkx;
* Q+ r6 z: _# l0 H: Kassign mcasp_ahclkr = mcasp_ahclkx;
) S" d7 K7 J2 Hassign axr1 = axr0;

% C! }( W6 h8 G+ j5 ?( V
: O) N* A( O; c# ?0 F
在OMAPL138这端,通过axr0接口发固定的数,axr1接收。
在配置MACASP的时候,发送全部取内部时钟,接收全部取外部时钟。
一直循环发送,但是接收不到。在FPGA端也没有看到时钟和信号的波形。
部分代码如下,关于edma3的部分未做变化。

# \* M. i+ x$ Z! z6 ^; k: g: w3 D* \
static void McASPI2SConfigure(void)/ f4 M7 J3 k  W
{
2 [# f/ c1 q+ b/ N- u1 sMcASPRxReset(SOC_MCASP_0_CTRL_REGS);, @( `# n8 h& j. Q5 g
McASPTxReset(SOC_MCASP_0_CTRL_REGS);
/* Enable the FIFOs for DMA transfer */
. l& E$ }" x  m( P3 G* c2 dMcASPReadFifoEnable(SOC_MCASP_0_FIFO_REGS, 1, 1);
5 r1 g) d4 j) \; [6 O/ v, kMcASPWriteFifoEnable(SOC_MCASP_0_FIFO_REGS, 1, 1);
/* Set I2S format in the transmitter/receiver format units */  e6 ^. u5 G* l1 L
McASPRxFmtI2SSet(SOC_MCASP_0_CTRL_REGS, WORD_SIZE, SLOT_SIZE,
6 D3 _1 @8 ?* R3 n6 k/ ZMCASP_RX_MODE_DMA);1 I; `, b& j) F& r% @( \6 A
McASPTxFmtI2SSet(SOC_MCASP_0_CTRL_REGS, WORD_SIZE, SLOT_SIZE,
* l0 d9 T* J5 JMCASP_TX_MODE_DMA);
/* Configure the frame sync. I2S shall work in TDM format with 2 slots */
, l" _+ z. s8 A2 ~3 y1 UMcASPRxFrameSyncCfg(SOC_MCASP_0_CTRL_REGS, 2, MCASP_RX_FS_WIDTH_WORD,
8 U" n  q9 }8 R5 q- {MCASP_RX_FS_EXT_BEGIN_ON_FALL_EDGE);
3 z0 Y/ o) i5 j! P; u; i0 MMcASPTxFrameSyncCfg(SOC_MCASP_0_CTRL_REGS, 2, MCASP_TX_FS_WIDTH_WORD, * P3 y! y1 y& J2 C* ^; E
MCASP_TX_FS_INT_BEGIN_ON_RIS_EDGE);
/* configure the clock for receiver */) s+ R) o9 E$ t
McASPRxClkCfg(SOC_MCASP_0_CTRL_REGS, MCASP_RX_CLK_EXTERNAL, 0, 0);
$ V8 @, Y' L$ z6 RMcASPRxClkPolaritySet(SOC_MCASP_0_CTRL_REGS, MCASP_RX_CLK_POL_RIS_EDGE);   }2 b. O% ^# o
McASPRxClkCheckConfig(SOC_MCASP_0_CTRL_REGS, MCASP_RX_CLKCHCK_DIV32,
0 _, r# ~- _0 \8 X0x00, 0xFF);
/* configure the clock for transmitter */& Q7 j9 w) ^  u7 Q
McASPTxClkCfg(SOC_MCASP_0_CTRL_REGS, MCASP_TX_CLK_INTERNAL, 11, 1);/ [! h3 K( o/ H$ _
McASPTxClkPolaritySet(SOC_MCASP_0_CTRL_REGS, MCASP_TX_CLK_POL_FALL_EDGE);
* z7 }, g: b$ m3 ]4 L- \3 P% ?McASPTxClkCheckConfig(SOC_MCASP_0_CTRL_REGS, MCASP_TX_CLKCHCK_DIV32,7 T( t: h6 P6 o5 R, S& |$ A6 m
0x00, 0xFF);
2 p# V% T% |5 u9 @  g* a" I+ g5 |9 w: x  i5 ~
/* Enable synchronization of RX and TX sections */ 0 H/ p; V, Y  l4 q% B. v* F
McASPTxRxClkSyncEnable(SOC_MCASP_0_CTRL_REGS);
/* Enable the transmitter/receiver slots. I2S uses 2 slots */
% ~; J- d) w0 X9 XMcASPRxTimeSlotSet(SOC_MCASP_0_CTRL_REGS, I2S_SLOTS);+ M9 }, @. N) G
McASPTxTimeSlotSet(SOC_MCASP_0_CTRL_REGS, I2S_SLOTS);
/*
( b% J, q8 x" z7 E** Set the serializers, Currently only one serializer is set as: V- A1 z4 I, p. a" x
** transmitter and one serializer as receiver.. Z) z$ j; t" G* A
*/% j+ r# g& ?- U' V
McASPSerializerRxSet(SOC_MCASP_0_CTRL_REGS, MCASP_XSER_RX);
- t/ ^( }' L5 _! s% zMcASPSerializerTxSet(SOC_MCASP_0_CTRL_REGS, MCASP_XSER_TX);
/*$ S5 L( N& u' I
** Configure the McASP pins
5 h1 B6 S. c4 W7 G6 U** Input - Frame Sync, Clock and Serializer Rx
* c2 H! x% j* o% @0 X; o** Output - Serializer Tx is connected to the input of the codec
9 r4 j$ d! `4 g$ A) T5 M*/# _0 _- @' G$ }& j# b* ^, u1 u, T) |1 W1 s5 v
McASPPinMcASPSet(SOC_MCASP_0_CTRL_REGS, 0xFFFFFFFF);
) \5 @2 T4 B- R' m+ KMcASPPinDirOutputSet(SOC_MCASP_0_CTRL_REGS,MCASP_PIN_AXR(MCASP_XSER_TX));& M  W9 e$ {0 E' W4 b; o  ]* }
McASPPinDirInputSet(SOC_MCASP_0_CTRL_REGS, MCASP_PIN_AFSX
! Z* h) W4 x. h1 p9 h9 G| MCASP_PIN_ACLKX3 R* z" u4 [' ^' V% M, |( a- W
| MCASP_PIN_AHCLKX4 C; ]; x7 v2 u: l( N
| MCASP_PIN_AXR(MCASP_XSER_RX));
/* Enable error interrupts for McASP */
, Q; y* K' ]9 q  C. {McASPTxIntEnable(SOC_MCASP_0_CTRL_REGS, MCASP_TX_DMAERROR
1 w0 y. t! g3 N' J4 b1 I| MCASP_TX_CLKFAIL - E* Q0 y' R6 H
| MCASP_TX_SYNCERROR
+ E* n2 x+ u$ ?) x1 \| MCASP_TX_UNDERRUN);
McASPRxIntEnable(SOC_MCASP_0_CTRL_REGS, MCASP_RX_DMAERROR ) T# H' y, c# l. F' N+ m
| MCASP_RX_CLKFAIL0 w8 s! z% U, T& T+ p( T4 ~
| MCASP_RX_SYNCERROR
) Y8 i4 b8 ]+ l| MCASP_RX_OVERRUN);
6 b! r8 }3 @) I! F; p4 `- v, `}
static void I2SDataTxRxActivate(void)
# g/ E& r6 y- s7 L: ^. ^{
& a* S% n3 J; v) v& D/* Start the clocks */
) ^4 O" P* u9 ~7 j0 eMcASPRxClkStart(SOC_MCASP_0_CTRL_REGS, MCASP_RX_CLK_EXTERNAL);
. k) H5 Y* k- @7 a4 lMcASPTxClkStart(SOC_MCASP_0_CTRL_REGS, MCASP_TX_CLK_INTERNAL);
/* Enable EDMA for the transfer */' i. h* ]0 U) f
EDMA3EnableTransfer(SOC_EDMA30CC_0_REGS, EDMA3_CHA_MCASP0_RX,
5 e" z+ B* U; l* b" rEDMA3_TRIG_MODE_EVENT);
! j* k9 `& A' I& m2 ]% {# c' bEDMA3EnableTransfer(SOC_EDMA30CC_0_REGS,
2 G6 U4 I# f" T( v. iEDMA3_CHA_MCASP0_TX, EDMA3_TRIG_MODE_EVENT);
/* Activate the serializers */$ C+ e6 S# @& U. y. J" Y9 ]
McASPRxSerActivate(SOC_MCASP_0_CTRL_REGS);' o( P/ ?: X, F* V$ ?6 ^
McASPTxSerActivate(SOC_MCASP_0_CTRL_REGS);
/* make sure that the XDATA bit is cleared to zero */
5 c) D- y5 C/ ~9 W; A% l: Xwhile(McASPTxStatusGet(SOC_MCASP_0_CTRL_REGS) & MCASP_TX_STAT_DATAREADY);
/* Activate the state machines */0 X" y. ^: c2 j$ X/ A4 e
McASPRxEnable(SOC_MCASP_0_CTRL_REGS);
. `* c: B: W! p5 AMcASPTxEnable(SOC_MCASP_0_CTRL_REGS);4 E. H  ^" z. x, y
}

4 L8 ]+ I7 b+ ^5 @% B
请问:问题出在哪了,时钟按照这样配是否有错。
另外我看XDATA一直是0,接收的rxbuf0,1,2里有一般全是FFFF一半全是0.

" H4 B  ~) c7 p$ d& k( n
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖
回复

使用道具 举报

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

本版积分规则

点击跳转“创龙科技服务通”

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

GMT+8, 2026-11-12 15:47 , Processed in 0.057570 second(s), 26 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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