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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

[未解决] MCASP自环配置。

[复制链接]

6

主题

12

帖子

1214

积分

金牌会员

Rank: 6Rank: 6

积分
1214
跳转到指定楼层
楼主
发表于 2018-11-7 13:28:07 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
我项目上用OMAPL138的板子MCASP的引脚都是链接的FPGA,所以在FPGA这端设置的MCASP自环。把axr0接收到的通过axr1发回去。
部分代码如下
input mcasp_afsx,0 N& \  [9 P( N7 f. i! h' C+ ~
input mcasp_ahclkx,
/ L+ n0 A* I6 I1 j+ V+ r; qinput mcasp_aclkx,
/ W1 b/ h( h2 S) |input axr0,9 M7 j# k" z, U
4 Z) Y0 o+ q- s/ _% n- g
output mcasp_afsr,4 L/ b. C* ?/ K
output mcasp_ahclkr," ]6 l% l( t; D6 n3 P, }
output mcasp_aclkr,
* @3 O- v" @, F3 M0 ioutput axr1,
4 p8 S* e3 w) u. W& |, S
assign mcasp_afsr = mcasp_afsx;, _  X, i; i" |% A$ Q8 t* {: `
assign mcasp_aclkr = mcasp_aclkx;, b! r; ]/ [# P
assign mcasp_ahclkr = mcasp_ahclkx;6 g( ?, w  {* F$ R7 {& h* u
assign axr1 = axr0;
+ e8 ^  X/ ]' M/ [

: n- e0 t) [# Z; r( z
在OMAPL138这端,通过axr0接口发固定的数,axr1接收。
在配置MACASP的时候,发送全部取内部时钟,接收全部取外部时钟。
一直循环发送,但是接收不到。在FPGA端也没有看到时钟和信号的波形。
部分代码如下,关于edma3的部分未做变化。
, C) o; {4 m& E; ?4 U
static void McASPI2SConfigure(void)
$ v% T- a$ G2 a. j+ n. z{5 b: ~+ @  N9 [: z$ g+ l
McASPRxReset(SOC_MCASP_0_CTRL_REGS);3 V0 v: k& t0 q& Z/ c& b4 _" N7 N
McASPTxReset(SOC_MCASP_0_CTRL_REGS);
/* Enable the FIFOs for DMA transfer */
. P0 m, r( O/ E- ~McASPReadFifoEnable(SOC_MCASP_0_FIFO_REGS, 1, 1);
* z( T4 q' k3 m, q9 GMcASPWriteFifoEnable(SOC_MCASP_0_FIFO_REGS, 1, 1);
/* Set I2S format in the transmitter/receiver format units */3 I6 L( b9 L! B$ j& T6 A
McASPRxFmtI2SSet(SOC_MCASP_0_CTRL_REGS, WORD_SIZE, SLOT_SIZE,3 ]; d. T7 ]4 Q9 s# G
MCASP_RX_MODE_DMA);, b. C8 g, E, i
McASPTxFmtI2SSet(SOC_MCASP_0_CTRL_REGS, WORD_SIZE, SLOT_SIZE,
. ]1 B: ^7 P+ \4 y/ O0 iMCASP_TX_MODE_DMA);
/* Configure the frame sync. I2S shall work in TDM format with 2 slots */
  H' a1 T/ N) }4 j+ h% rMcASPRxFrameSyncCfg(SOC_MCASP_0_CTRL_REGS, 2, MCASP_RX_FS_WIDTH_WORD,
" \8 X7 l9 n4 ?+ k/ DMCASP_RX_FS_EXT_BEGIN_ON_FALL_EDGE);! @- i9 _/ o+ b4 _: T
McASPTxFrameSyncCfg(SOC_MCASP_0_CTRL_REGS, 2, MCASP_TX_FS_WIDTH_WORD, 1 b/ b' X- L  Y
MCASP_TX_FS_INT_BEGIN_ON_RIS_EDGE);
/* configure the clock for receiver */
$ i+ E2 a+ X$ P% |2 ?McASPRxClkCfg(SOC_MCASP_0_CTRL_REGS, MCASP_RX_CLK_EXTERNAL, 0, 0);
/ Z5 h9 s3 O+ ]4 m  pMcASPRxClkPolaritySet(SOC_MCASP_0_CTRL_REGS, MCASP_RX_CLK_POL_RIS_EDGE); ) l+ @* U1 T. U- x
McASPRxClkCheckConfig(SOC_MCASP_0_CTRL_REGS, MCASP_RX_CLKCHCK_DIV32,: ?1 i% b; Y5 i( w1 x; g5 S
0x00, 0xFF);
/* configure the clock for transmitter */
, j4 H* `0 a0 Q. gMcASPTxClkCfg(SOC_MCASP_0_CTRL_REGS, MCASP_TX_CLK_INTERNAL, 11, 1);! ]2 c: A) Y4 @; g
McASPTxClkPolaritySet(SOC_MCASP_0_CTRL_REGS, MCASP_TX_CLK_POL_FALL_EDGE); 9 p% u* G+ f* z9 s7 e
McASPTxClkCheckConfig(SOC_MCASP_0_CTRL_REGS, MCASP_TX_CLKCHCK_DIV32,
; q  f2 V2 I1 r8 s0x00, 0xFF);
) V; G( y5 a4 \0 |# {
' W9 L) c0 l! U4 x0 b/* Enable synchronization of RX and TX sections */ ! A  X9 C. ^* z9 u6 H. C
McASPTxRxClkSyncEnable(SOC_MCASP_0_CTRL_REGS);
/* Enable the transmitter/receiver slots. I2S uses 2 slots */# y# P% e; E* ]9 ?# R
McASPRxTimeSlotSet(SOC_MCASP_0_CTRL_REGS, I2S_SLOTS);
  I" n+ a9 W& q3 Q9 s8 Y9 sMcASPTxTimeSlotSet(SOC_MCASP_0_CTRL_REGS, I2S_SLOTS);
/*
/ U2 J2 }$ h3 ~% T( A** Set the serializers, Currently only one serializer is set as
! |3 l, `' q9 x8 l** transmitter and one serializer as receiver.6 W% z/ V+ F2 e, N# Z) x. Q
*/# i( q  x' |9 ~5 s
McASPSerializerRxSet(SOC_MCASP_0_CTRL_REGS, MCASP_XSER_RX);
& \  |& R1 v, B" N& x  s+ XMcASPSerializerTxSet(SOC_MCASP_0_CTRL_REGS, MCASP_XSER_TX);
/*+ i  C" {3 V- s- z/ f. N
** Configure the McASP pins 2 G% k# \1 ]+ B. f- P
** Input - Frame Sync, Clock and Serializer Rx) s. ^" b- J1 ]
** Output - Serializer Tx is connected to the input of the codec
3 W* d  u' O1 t*/
/ ^6 Q2 ]; r1 }# aMcASPPinMcASPSet(SOC_MCASP_0_CTRL_REGS, 0xFFFFFFFF);4 y1 k4 A) x1 ~' W  A
McASPPinDirOutputSet(SOC_MCASP_0_CTRL_REGS,MCASP_PIN_AXR(MCASP_XSER_TX));
" t* \: u# e  [' _" b# [/ ?0 ~8 xMcASPPinDirInputSet(SOC_MCASP_0_CTRL_REGS, MCASP_PIN_AFSX( H! P8 `- S( h6 B1 G# t
| MCASP_PIN_ACLKX
) k& g4 j5 s- B5 k9 E| MCASP_PIN_AHCLKX
. c. l+ l- {! s: _& y# V% s| MCASP_PIN_AXR(MCASP_XSER_RX));
/* Enable error interrupts for McASP */
9 ?% h! V0 |4 ]9 ~+ i- ~0 M2 V. XMcASPTxIntEnable(SOC_MCASP_0_CTRL_REGS, MCASP_TX_DMAERROR 1 B2 s9 \+ k" L
| MCASP_TX_CLKFAIL 3 C8 m4 I# n, q' s
| MCASP_TX_SYNCERROR! i  A; A; U4 p: J/ w$ V
| MCASP_TX_UNDERRUN);
McASPRxIntEnable(SOC_MCASP_0_CTRL_REGS, MCASP_RX_DMAERROR : \0 E# `% U3 o7 r  h
| MCASP_RX_CLKFAIL  p3 W3 w6 b1 s( e# \/ C/ w
| MCASP_RX_SYNCERROR 9 B2 P7 O4 a% n. w# H
| MCASP_RX_OVERRUN);- u3 I* T* y- l+ Q8 H+ `
}
static void I2SDataTxRxActivate(void)
$ b. q" t9 d6 G2 [) m{5 W  M# b9 Y6 m  x4 A
/* Start the clocks */
& W% v+ l, U9 r! {2 m4 \7 QMcASPRxClkStart(SOC_MCASP_0_CTRL_REGS, MCASP_RX_CLK_EXTERNAL);
8 W" u% g* O) HMcASPTxClkStart(SOC_MCASP_0_CTRL_REGS, MCASP_TX_CLK_INTERNAL);
/* Enable EDMA for the transfer */
: O) I0 x: a7 x: P4 S8 `/ LEDMA3EnableTransfer(SOC_EDMA30CC_0_REGS, EDMA3_CHA_MCASP0_RX,* u; L* P# [; M8 q0 B% F
EDMA3_TRIG_MODE_EVENT);: Q3 M8 P& Z) O" X6 C
EDMA3EnableTransfer(SOC_EDMA30CC_0_REGS, " E- U: Q1 N' m: K+ y; \$ V
EDMA3_CHA_MCASP0_TX, EDMA3_TRIG_MODE_EVENT);
/* Activate the serializers */
; i2 }$ T8 a$ ^$ kMcASPRxSerActivate(SOC_MCASP_0_CTRL_REGS);7 a+ ^3 q8 }: ^2 n4 [
McASPTxSerActivate(SOC_MCASP_0_CTRL_REGS);
/* make sure that the XDATA bit is cleared to zero */2 u2 M) Z  A- a+ ?1 ~6 |
while(McASPTxStatusGet(SOC_MCASP_0_CTRL_REGS) & MCASP_TX_STAT_DATAREADY);
/* Activate the state machines */% K' M2 Z$ U& t! h5 K7 S
McASPRxEnable(SOC_MCASP_0_CTRL_REGS);
8 L5 T+ `7 A2 `  JMcASPTxEnable(SOC_MCASP_0_CTRL_REGS);. e+ H7 [( `4 v# Y+ `1 f( [5 @
}

: q/ w' y- j7 k1 b5 g9 l2 ^/ N" B+ M
请问:问题出在哪了,时钟按照这样配是否有错。
另外我看XDATA一直是0,接收的rxbuf0,1,2里有一般全是FFFF一半全是0.
* T$ Z2 j. C0 P; W8 n
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖
回复

使用道具 举报

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

本版积分规则

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

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

GMT+8, 2026-1-13 14:48 , Processed in 0.040949 second(s), 26 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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