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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

[未解决] MCASP自环配置。

[复制链接]

6

主题

12

帖子

1213

积分

金牌会员

Rank: 6Rank: 6

积分
1213
跳转到指定楼层
楼主
发表于 2018-11-7 13:28:07 | 只看该作者 回帖奖励 |正序浏览 |阅读模式
我项目上用OMAPL138的板子MCASP的引脚都是链接的FPGA,所以在FPGA这端设置的MCASP自环。把axr0接收到的通过axr1发回去。
部分代码如下
input mcasp_afsx,) G8 K6 N1 p. t" r
input mcasp_ahclkx,
) _& Z) q0 w' ]" w) Z: p! H: Vinput mcasp_aclkx,
; E% q0 Z; _  V) j0 @' zinput axr0,
4 J! B* }3 u& c) |4 ]2 U% y  e4 c
output mcasp_afsr,
. |- [1 m$ s$ e& t' c% \$ {5 z7 Ooutput mcasp_ahclkr,: O1 R/ E9 @& X; d1 r% X3 C
output mcasp_aclkr,
5 c! |  J/ F! ^9 n3 g* V+ @6 o* y& }output axr1,+ R! u& O) A0 p5 l
assign mcasp_afsr = mcasp_afsx;
/ E+ w# W4 J8 ]8 F& a- Lassign mcasp_aclkr = mcasp_aclkx;
& u/ S* u$ r8 o1 z& L5 X* Qassign mcasp_ahclkr = mcasp_ahclkx;
) E* J* Y6 k3 ^assign axr1 = axr0;

, ^+ `$ }$ F8 a! g
5 O9 L) i1 F* ?7 t9 [
在OMAPL138这端,通过axr0接口发固定的数,axr1接收。
在配置MACASP的时候,发送全部取内部时钟,接收全部取外部时钟。
一直循环发送,但是接收不到。在FPGA端也没有看到时钟和信号的波形。
部分代码如下,关于edma3的部分未做变化。
0 \5 G# m# y0 U/ w
static void McASPI2SConfigure(void)
& n6 C# m! e& r3 ]0 y' T{3 ]/ |' u- T5 A
McASPRxReset(SOC_MCASP_0_CTRL_REGS);: i0 A$ t. N. s/ ~1 d
McASPTxReset(SOC_MCASP_0_CTRL_REGS);
/* Enable the FIFOs for DMA transfer */0 X  N: h) E, t9 v  M4 k2 k
McASPReadFifoEnable(SOC_MCASP_0_FIFO_REGS, 1, 1);/ E& D; n5 e8 e4 L! s# x3 y
McASPWriteFifoEnable(SOC_MCASP_0_FIFO_REGS, 1, 1);
/* Set I2S format in the transmitter/receiver format units */0 S0 X9 B# w: b/ I
McASPRxFmtI2SSet(SOC_MCASP_0_CTRL_REGS, WORD_SIZE, SLOT_SIZE,
( J7 @( Q; m0 ?8 {- t% VMCASP_RX_MODE_DMA);% `1 `: ?2 e2 W6 u
McASPTxFmtI2SSet(SOC_MCASP_0_CTRL_REGS, WORD_SIZE, SLOT_SIZE,' O! O: o8 i7 V" X( z7 o; j
MCASP_TX_MODE_DMA);
/* Configure the frame sync. I2S shall work in TDM format with 2 slots */9 \. _- @' p" Q# z
McASPRxFrameSyncCfg(SOC_MCASP_0_CTRL_REGS, 2, MCASP_RX_FS_WIDTH_WORD, & g$ A8 P5 J5 p3 x& ~& r
MCASP_RX_FS_EXT_BEGIN_ON_FALL_EDGE);
0 |1 a0 ?% U+ I/ J9 ?* r$ mMcASPTxFrameSyncCfg(SOC_MCASP_0_CTRL_REGS, 2, MCASP_TX_FS_WIDTH_WORD,
( e! c7 |+ X1 h5 s9 GMCASP_TX_FS_INT_BEGIN_ON_RIS_EDGE);
/* configure the clock for receiver */
5 I5 @# [- v% q6 `: E* OMcASPRxClkCfg(SOC_MCASP_0_CTRL_REGS, MCASP_RX_CLK_EXTERNAL, 0, 0);
; I, R9 T% @, @; H2 n1 i8 sMcASPRxClkPolaritySet(SOC_MCASP_0_CTRL_REGS, MCASP_RX_CLK_POL_RIS_EDGE);
* c+ n+ Z* @- t* w3 k2 D! vMcASPRxClkCheckConfig(SOC_MCASP_0_CTRL_REGS, MCASP_RX_CLKCHCK_DIV32,
. W- `$ x: ]/ Q/ k) T8 k0x00, 0xFF);
/* configure the clock for transmitter */
# n5 l6 u" Y0 OMcASPTxClkCfg(SOC_MCASP_0_CTRL_REGS, MCASP_TX_CLK_INTERNAL, 11, 1);2 D% ^# |; W3 r# U/ n
McASPTxClkPolaritySet(SOC_MCASP_0_CTRL_REGS, MCASP_TX_CLK_POL_FALL_EDGE); 7 ~) n* T$ e0 J; ^. c) y3 R
McASPTxClkCheckConfig(SOC_MCASP_0_CTRL_REGS, MCASP_TX_CLKCHCK_DIV32,* ]8 K/ g$ O1 @/ z/ [
0x00, 0xFF);
8 G- h% ^3 Q( a( Y0 B# r, n+ |
( O) r8 l" P& o3 T" I) b/* Enable synchronization of RX and TX sections */ 8 g- I) `3 Q9 S, ^9 Z! ~
McASPTxRxClkSyncEnable(SOC_MCASP_0_CTRL_REGS);
/* Enable the transmitter/receiver slots. I2S uses 2 slots */8 e  Y2 W* U$ [$ @4 |1 _! n
McASPRxTimeSlotSet(SOC_MCASP_0_CTRL_REGS, I2S_SLOTS);( T# _8 c9 B+ k' ~( u7 d/ s
McASPTxTimeSlotSet(SOC_MCASP_0_CTRL_REGS, I2S_SLOTS);
/*$ n( U7 L6 X* s/ {" I+ r8 M3 V
** Set the serializers, Currently only one serializer is set as
* M8 U, t+ G0 I! K- D** transmitter and one serializer as receiver.9 ]: n7 ^* z, O# m/ }/ F
*/
1 k+ j  B! ]) r" w) H0 Y. MMcASPSerializerRxSet(SOC_MCASP_0_CTRL_REGS, MCASP_XSER_RX);2 D! i9 j: f4 x
McASPSerializerTxSet(SOC_MCASP_0_CTRL_REGS, MCASP_XSER_TX);
/*, v+ q  ?% g& A
** Configure the McASP pins " j8 N; E. ~* ~0 {
** Input - Frame Sync, Clock and Serializer Rx
/ @! @6 q; B4 ?/ p! S' \1 p- X** Output - Serializer Tx is connected to the input of the codec 0 @% ^' }7 q: [* V
*/; Y1 S! ^2 H: d: ~1 Z
McASPPinMcASPSet(SOC_MCASP_0_CTRL_REGS, 0xFFFFFFFF);/ s" `, b. p4 q( s' P! I  }
McASPPinDirOutputSet(SOC_MCASP_0_CTRL_REGS,MCASP_PIN_AXR(MCASP_XSER_TX));
% `& I/ z2 C' a( B9 L+ PMcASPPinDirInputSet(SOC_MCASP_0_CTRL_REGS, MCASP_PIN_AFSX
9 Q: k4 r$ j7 N6 V| MCASP_PIN_ACLKX# }( C- I/ ~0 [$ |3 ]! c6 l- S% C8 n  W
| MCASP_PIN_AHCLKX
4 H. ]" p2 U+ G- U+ @| MCASP_PIN_AXR(MCASP_XSER_RX));
/* Enable error interrupts for McASP */
8 S& x+ f" Q+ H+ w) zMcASPTxIntEnable(SOC_MCASP_0_CTRL_REGS, MCASP_TX_DMAERROR , c7 ]7 \# g  g( ^' c4 Z+ `
| MCASP_TX_CLKFAIL
5 ~4 |$ t& _% I: A' p| MCASP_TX_SYNCERROR
; M# L+ W, W6 K% n| MCASP_TX_UNDERRUN);
McASPRxIntEnable(SOC_MCASP_0_CTRL_REGS, MCASP_RX_DMAERROR % a. T/ S4 K! U, h3 Z* J
| MCASP_RX_CLKFAIL
! R% J, ?$ M1 ?' E| MCASP_RX_SYNCERROR
" H; a* }; W" d+ V| MCASP_RX_OVERRUN);
- _% {2 ?7 e" P* `}
static void I2SDataTxRxActivate(void)
& T# W- m% `: B{: Z+ ^9 A5 A) M4 e: G
/* Start the clocks */
% k+ f4 F. k$ j7 I, GMcASPRxClkStart(SOC_MCASP_0_CTRL_REGS, MCASP_RX_CLK_EXTERNAL);
2 m  O/ W) W, ?' h# b& ]McASPTxClkStart(SOC_MCASP_0_CTRL_REGS, MCASP_TX_CLK_INTERNAL);
/* Enable EDMA for the transfer */
' v. p; r7 n& g9 S& M6 p& G2 l5 wEDMA3EnableTransfer(SOC_EDMA30CC_0_REGS, EDMA3_CHA_MCASP0_RX,
! ~% |5 r" D6 [) cEDMA3_TRIG_MODE_EVENT);% l3 ?" \4 Y" N& a1 _7 D
EDMA3EnableTransfer(SOC_EDMA30CC_0_REGS,
% J3 K7 t7 S; \EDMA3_CHA_MCASP0_TX, EDMA3_TRIG_MODE_EVENT);
/* Activate the serializers */
" M& {" y8 x" v+ A0 aMcASPRxSerActivate(SOC_MCASP_0_CTRL_REGS);
3 i' G; K& M5 oMcASPTxSerActivate(SOC_MCASP_0_CTRL_REGS);
/* make sure that the XDATA bit is cleared to zero */2 W4 g( Z2 q2 J: @4 f* L
while(McASPTxStatusGet(SOC_MCASP_0_CTRL_REGS) & MCASP_TX_STAT_DATAREADY);
/* Activate the state machines */
0 d2 A9 M' ^/ |McASPRxEnable(SOC_MCASP_0_CTRL_REGS);
5 ^6 W. H) a& }6 \McASPTxEnable(SOC_MCASP_0_CTRL_REGS);
6 N% X+ W$ T: p}

8 a2 @2 M$ Y  a( S  ?( P3 y. w
请问:问题出在哪了,时钟按照这样配是否有错。
另外我看XDATA一直是0,接收的rxbuf0,1,2里有一般全是FFFF一半全是0.

' ~5 ?# _0 v6 i+ E* k9 E
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖
回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2026-1-8 01:15 , Processed in 0.037418 second(s), 25 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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