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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

查看: 12934|回复: 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,
3 X! y  ~5 j* }& t2 Rinput mcasp_ahclkx,
% }. B& V. ?6 C! n: jinput mcasp_aclkx,( C/ f. [5 Z, C
input axr0,3 j: x5 R  T, H8 \
. q/ Q4 K3 f4 x3 K4 M
output mcasp_afsr,
0 ~% H% [0 o0 e8 ^output mcasp_ahclkr,
6 Q) C4 g6 R3 c0 z4 B3 v/ W8 K8 ooutput mcasp_aclkr,
8 V* s& g# ^/ G( eoutput axr1,
) ~3 _$ U- J9 n) B
assign mcasp_afsr = mcasp_afsx;
/ e' K5 h$ m) l4 J, W8 _* nassign mcasp_aclkr = mcasp_aclkx;) w& ?/ P# W- P) c
assign mcasp_ahclkr = mcasp_ahclkx;
4 ~. p; f! a9 u% X$ c) tassign axr1 = axr0;

5 M/ W, G$ T3 ~( F- n4 W7 N
! A% m( X' Z% |" D
在OMAPL138这端,通过axr0接口发固定的数,axr1接收。
在配置MACASP的时候,发送全部取内部时钟,接收全部取外部时钟。
一直循环发送,但是接收不到。在FPGA端也没有看到时钟和信号的波形。
部分代码如下,关于edma3的部分未做变化。
; g% G& P5 Y# ]2 a( p
static void McASPI2SConfigure(void)6 r* g2 j' {% i/ P! G' ^
{
' c" E  h1 }% `* A$ {McASPRxReset(SOC_MCASP_0_CTRL_REGS);
1 P/ {( }0 d" N5 h  S! nMcASPTxReset(SOC_MCASP_0_CTRL_REGS);
/* Enable the FIFOs for DMA transfer */% x) g5 ]1 m2 @  f
McASPReadFifoEnable(SOC_MCASP_0_FIFO_REGS, 1, 1);3 ]7 ?  q/ Y/ l2 V5 q6 P
McASPWriteFifoEnable(SOC_MCASP_0_FIFO_REGS, 1, 1);
/* Set I2S format in the transmitter/receiver format units */: f, w0 y+ D9 Z4 I
McASPRxFmtI2SSet(SOC_MCASP_0_CTRL_REGS, WORD_SIZE, SLOT_SIZE,# k2 V- `" I3 W5 U8 ^. L2 L) q" K
MCASP_RX_MODE_DMA);5 l) y0 f: S/ k
McASPTxFmtI2SSet(SOC_MCASP_0_CTRL_REGS, WORD_SIZE, SLOT_SIZE,: P$ i& v/ g7 i% D
MCASP_TX_MODE_DMA);
/* Configure the frame sync. I2S shall work in TDM format with 2 slots */9 |0 M7 p8 o6 ~
McASPRxFrameSyncCfg(SOC_MCASP_0_CTRL_REGS, 2, MCASP_RX_FS_WIDTH_WORD, - g2 ^' u% M9 Z8 ]- w
MCASP_RX_FS_EXT_BEGIN_ON_FALL_EDGE);' ^9 H% K. R3 B
McASPTxFrameSyncCfg(SOC_MCASP_0_CTRL_REGS, 2, MCASP_TX_FS_WIDTH_WORD,
: z% e% N+ r$ o  e# D: o) CMCASP_TX_FS_INT_BEGIN_ON_RIS_EDGE);
/* configure the clock for receiver */! r' T. t" d, o( I9 h
McASPRxClkCfg(SOC_MCASP_0_CTRL_REGS, MCASP_RX_CLK_EXTERNAL, 0, 0);
' K. @& M5 i& b3 C" o3 kMcASPRxClkPolaritySet(SOC_MCASP_0_CTRL_REGS, MCASP_RX_CLK_POL_RIS_EDGE);
& X" r. ~$ C: S0 y$ MMcASPRxClkCheckConfig(SOC_MCASP_0_CTRL_REGS, MCASP_RX_CLKCHCK_DIV32,3 X4 ]$ n" |& H  P( K2 q
0x00, 0xFF);
/* configure the clock for transmitter */
4 Z. B/ z$ ?: Y/ fMcASPTxClkCfg(SOC_MCASP_0_CTRL_REGS, MCASP_TX_CLK_INTERNAL, 11, 1);: s0 f6 ~( Y# T3 z2 b
McASPTxClkPolaritySet(SOC_MCASP_0_CTRL_REGS, MCASP_TX_CLK_POL_FALL_EDGE); & {+ L5 n, ?. Z7 r; z: q1 D
McASPTxClkCheckConfig(SOC_MCASP_0_CTRL_REGS, MCASP_TX_CLKCHCK_DIV32,. f% s' y3 t; N1 @7 d: L" G! C
0x00, 0xFF);* o: C( e% q5 c# c8 \2 P
" }( b' p# @7 B3 e3 H9 f% |
/* Enable synchronization of RX and TX sections */
  w3 y* o! @9 pMcASPTxRxClkSyncEnable(SOC_MCASP_0_CTRL_REGS);
/* Enable the transmitter/receiver slots. I2S uses 2 slots */# T' X- w! i& O+ d7 J
McASPRxTimeSlotSet(SOC_MCASP_0_CTRL_REGS, I2S_SLOTS);6 Z& n7 M2 a8 o$ b/ \) U' E
McASPTxTimeSlotSet(SOC_MCASP_0_CTRL_REGS, I2S_SLOTS);
/*
6 v5 E9 b. n6 H** Set the serializers, Currently only one serializer is set as+ {. p: O2 s6 K2 }
** transmitter and one serializer as receiver.
, w* [3 P8 s, M2 c9 D1 S) `, K*/$ d; q" l8 Q. |6 v: ?
McASPSerializerRxSet(SOC_MCASP_0_CTRL_REGS, MCASP_XSER_RX);
( K2 S) f! u7 |( p$ P2 s' i6 JMcASPSerializerTxSet(SOC_MCASP_0_CTRL_REGS, MCASP_XSER_TX);
/*
4 x/ L5 U7 j' U3 L+ r** Configure the McASP pins
8 j# @9 f  o' F; U7 y  s5 m3 E, b6 Q** Input - Frame Sync, Clock and Serializer Rx
. l8 W; q) e3 ]4 L3 ?** Output - Serializer Tx is connected to the input of the codec
- H5 m: L# c' H% k& \9 a*/
1 S& K) L6 x7 Z' T. sMcASPPinMcASPSet(SOC_MCASP_0_CTRL_REGS, 0xFFFFFFFF);
2 Q. n2 O; i! @5 |  M  G, N7 ~McASPPinDirOutputSet(SOC_MCASP_0_CTRL_REGS,MCASP_PIN_AXR(MCASP_XSER_TX));
" O' |  p/ s. @4 a- |McASPPinDirInputSet(SOC_MCASP_0_CTRL_REGS, MCASP_PIN_AFSX( g! I& a. s! k* L: r
| MCASP_PIN_ACLKX
* o' {8 E+ e3 j( z5 r( g| MCASP_PIN_AHCLKX
  n* d) y" q1 l7 ^2 k  o& w' t5 _| MCASP_PIN_AXR(MCASP_XSER_RX));
/* Enable error interrupts for McASP */# o7 w1 f2 `, k$ ~
McASPTxIntEnable(SOC_MCASP_0_CTRL_REGS, MCASP_TX_DMAERROR
  A5 {8 E8 V3 S5 q( ~2 q| MCASP_TX_CLKFAIL
. x0 S( A3 Z2 D| MCASP_TX_SYNCERROR
9 J# p7 Q  e8 D| MCASP_TX_UNDERRUN);
McASPRxIntEnable(SOC_MCASP_0_CTRL_REGS, MCASP_RX_DMAERROR
( @7 p" ]1 r. c2 p| MCASP_RX_CLKFAIL
0 p+ H9 n2 M; b  r  y7 h3 F| MCASP_RX_SYNCERROR   t1 e. F! ?9 B% N4 ~8 l6 x  b
| MCASP_RX_OVERRUN);
" V8 @  e0 _1 C5 B" k% I: Q}
static void I2SDataTxRxActivate(void)
' L0 u7 d6 Q! z5 P. J{: `9 Q9 P" e) q* D
/* Start the clocks */% B. K/ m/ J8 v9 C$ |- s* r
McASPRxClkStart(SOC_MCASP_0_CTRL_REGS, MCASP_RX_CLK_EXTERNAL);
) a- x4 t( _/ A3 v# _McASPTxClkStart(SOC_MCASP_0_CTRL_REGS, MCASP_TX_CLK_INTERNAL);
/* Enable EDMA for the transfer */" C% i+ }+ `* }# r
EDMA3EnableTransfer(SOC_EDMA30CC_0_REGS, EDMA3_CHA_MCASP0_RX,
3 C6 J) |; A# Z6 r7 OEDMA3_TRIG_MODE_EVENT);
/ L) y- v% k: n5 TEDMA3EnableTransfer(SOC_EDMA30CC_0_REGS,
# n' u: E5 }; k$ ?EDMA3_CHA_MCASP0_TX, EDMA3_TRIG_MODE_EVENT);
/* Activate the serializers */' q% Q( c4 E" L* `: e* n
McASPRxSerActivate(SOC_MCASP_0_CTRL_REGS);
+ H* Y' O& X: b" ^, fMcASPTxSerActivate(SOC_MCASP_0_CTRL_REGS);
/* make sure that the XDATA bit is cleared to zero */* I6 r, n$ d* P+ ^, g6 J
while(McASPTxStatusGet(SOC_MCASP_0_CTRL_REGS) & MCASP_TX_STAT_DATAREADY);
/* Activate the state machines *// s8 u; |' s" p: G1 F
McASPRxEnable(SOC_MCASP_0_CTRL_REGS);
7 [$ i& h/ m0 k$ iMcASPTxEnable(SOC_MCASP_0_CTRL_REGS);- o/ `1 a: f$ c1 c4 ]& Z3 |
}
: J6 K$ l9 `# C6 Q
请问:问题出在哪了,时钟按照这样配是否有错。
另外我看XDATA一直是0,接收的rxbuf0,1,2里有一般全是FFFF一半全是0.

' L5 |" c% A  D& E5 W0 y- }
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖
回复

使用道具 举报

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

本版积分规则

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

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

GMT+8, 2026-7-22 04:40 , Processed in 0.039627 second(s), 26 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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