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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

[未解决] MCASP自环配置。

[复制链接]

6

主题

12

帖子

1215

积分

金牌会员

Rank: 6Rank: 6

积分
1215
跳转到指定楼层
楼主
发表于 2018-11-7 13:28:07 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
我项目上用OMAPL138的板子MCASP的引脚都是链接的FPGA,所以在FPGA这端设置的MCASP自环。把axr0接收到的通过axr1发回去。
部分代码如下
input mcasp_afsx,( E7 A7 m! {- [) k
input mcasp_ahclkx,
" ~( L9 Y! f6 xinput mcasp_aclkx,/ l- F3 Q9 r2 c$ Q* |
input axr0,7 t! a, O( s' G& _' k
! c: `3 W6 E$ v2 @8 R
output mcasp_afsr,
, m. W/ j+ ^/ o0 O/ _9 E' L$ l6 doutput mcasp_ahclkr,  f' `4 @  h/ y3 r  d
output mcasp_aclkr,) b3 I# x# y6 l# L2 I" U
output axr1,
- ^* A1 }! X; c7 y! D2 f/ ~$ v
assign mcasp_afsr = mcasp_afsx;
4 Y/ F9 Z! N% C( j: G1 s5 [9 @/ `assign mcasp_aclkr = mcasp_aclkx;8 `4 C: P) k9 l( J" @5 n, f; b
assign mcasp_ahclkr = mcasp_ahclkx;
# e# V: I7 g/ j: t2 lassign axr1 = axr0;

$ b: Y' c: t+ r' b+ L7 q
9 M5 Q1 c7 L0 H" n$ `
在OMAPL138这端,通过axr0接口发固定的数,axr1接收。
在配置MACASP的时候,发送全部取内部时钟,接收全部取外部时钟。
一直循环发送,但是接收不到。在FPGA端也没有看到时钟和信号的波形。
部分代码如下,关于edma3的部分未做变化。

0 L8 m0 L+ |; q7 D$ Z* n' c
static void McASPI2SConfigure(void)
- i- o9 c# L9 n+ J. t{
) B  R4 o- S6 iMcASPRxReset(SOC_MCASP_0_CTRL_REGS);
, E8 y6 L9 z1 ^, c  zMcASPTxReset(SOC_MCASP_0_CTRL_REGS);
/* Enable the FIFOs for DMA transfer */3 D5 X9 T( i3 R2 J
McASPReadFifoEnable(SOC_MCASP_0_FIFO_REGS, 1, 1);: I* J& q( J! L# b  f; F
McASPWriteFifoEnable(SOC_MCASP_0_FIFO_REGS, 1, 1);
/* Set I2S format in the transmitter/receiver format units */
, S5 x% S9 V/ ?/ X! I( oMcASPRxFmtI2SSet(SOC_MCASP_0_CTRL_REGS, WORD_SIZE, SLOT_SIZE,2 M, O8 k) p) N& O/ Z, x
MCASP_RX_MODE_DMA);
/ [0 A! c- M$ t/ v) kMcASPTxFmtI2SSet(SOC_MCASP_0_CTRL_REGS, WORD_SIZE, SLOT_SIZE,
. U! d* C' y7 sMCASP_TX_MODE_DMA);
/* Configure the frame sync. I2S shall work in TDM format with 2 slots */+ Q6 O9 q: i% H/ I( f) _7 I1 j
McASPRxFrameSyncCfg(SOC_MCASP_0_CTRL_REGS, 2, MCASP_RX_FS_WIDTH_WORD, " i1 V! P6 B# H- a$ e& ?
MCASP_RX_FS_EXT_BEGIN_ON_FALL_EDGE);
$ C/ F! _$ v, `McASPTxFrameSyncCfg(SOC_MCASP_0_CTRL_REGS, 2, MCASP_TX_FS_WIDTH_WORD, , z# \& @" D5 A' O
MCASP_TX_FS_INT_BEGIN_ON_RIS_EDGE);
/* configure the clock for receiver */7 A3 H' _. M7 l2 P  y1 n8 }$ p+ @
McASPRxClkCfg(SOC_MCASP_0_CTRL_REGS, MCASP_RX_CLK_EXTERNAL, 0, 0);1 p, p* t( i1 d/ g
McASPRxClkPolaritySet(SOC_MCASP_0_CTRL_REGS, MCASP_RX_CLK_POL_RIS_EDGE); ) c9 l' l0 L- J& N
McASPRxClkCheckConfig(SOC_MCASP_0_CTRL_REGS, MCASP_RX_CLKCHCK_DIV32,* `# l0 t7 `" Z$ D# G
0x00, 0xFF);
/* configure the clock for transmitter */4 @0 E0 ~+ J, o8 H  d- L6 K/ D7 V
McASPTxClkCfg(SOC_MCASP_0_CTRL_REGS, MCASP_TX_CLK_INTERNAL, 11, 1);
7 p& L( o8 ~! T- d4 IMcASPTxClkPolaritySet(SOC_MCASP_0_CTRL_REGS, MCASP_TX_CLK_POL_FALL_EDGE);
( s" K& Y$ J6 }1 xMcASPTxClkCheckConfig(SOC_MCASP_0_CTRL_REGS, MCASP_TX_CLKCHCK_DIV32,
8 ?" U. ]7 ^. ]5 m0x00, 0xFF);
# M4 p  w7 Q. O$ M7 g
- p4 @) M$ H4 t/ A: ^( \! C/* Enable synchronization of RX and TX sections */ ' Y8 E! t3 b& b3 n
McASPTxRxClkSyncEnable(SOC_MCASP_0_CTRL_REGS);
/* Enable the transmitter/receiver slots. I2S uses 2 slots */
7 b% O% r# N- O- oMcASPRxTimeSlotSet(SOC_MCASP_0_CTRL_REGS, I2S_SLOTS);
# U, a  m" h" [1 N' AMcASPTxTimeSlotSet(SOC_MCASP_0_CTRL_REGS, I2S_SLOTS);
/*
- b& E9 f4 f6 F6 t5 h: q* e** Set the serializers, Currently only one serializer is set as
% ]( I- A( {# B: ?2 V! V/ J** transmitter and one serializer as receiver.6 `( Y- q+ d; M7 R6 J$ i# y6 C
*/
6 X& Y4 w( i5 @! `McASPSerializerRxSet(SOC_MCASP_0_CTRL_REGS, MCASP_XSER_RX);
$ j: G. ]7 O" H3 \1 T. [# h( \6 |McASPSerializerTxSet(SOC_MCASP_0_CTRL_REGS, MCASP_XSER_TX);
/*
0 i; s& S- x- b** Configure the McASP pins - ?( z3 L0 G& l) U; \$ B
** Input - Frame Sync, Clock and Serializer Rx5 a: `  ]  T$ |* s0 C* }2 R# ~
** Output - Serializer Tx is connected to the input of the codec
7 @: Z$ a( c: g; f% P7 K*/
9 `7 X/ i. `" v) {McASPPinMcASPSet(SOC_MCASP_0_CTRL_REGS, 0xFFFFFFFF);
- a$ U7 g9 T9 j. b3 RMcASPPinDirOutputSet(SOC_MCASP_0_CTRL_REGS,MCASP_PIN_AXR(MCASP_XSER_TX));" F8 x1 G5 D! _3 ^0 x! p+ h
McASPPinDirInputSet(SOC_MCASP_0_CTRL_REGS, MCASP_PIN_AFSX0 h: p# @5 }( U( T$ y7 p# S$ \
| MCASP_PIN_ACLKX
/ A' ^0 `8 i6 f$ A2 || MCASP_PIN_AHCLKX% k; x6 R- {1 j& M
| MCASP_PIN_AXR(MCASP_XSER_RX));
/* Enable error interrupts for McASP */
4 s2 b4 p- b0 c. R0 e* GMcASPTxIntEnable(SOC_MCASP_0_CTRL_REGS, MCASP_TX_DMAERROR
6 j7 @+ F! |* Z' N$ b| MCASP_TX_CLKFAIL ! n- \! H( e* @! z* R
| MCASP_TX_SYNCERROR
( v. z; t- @- ?| MCASP_TX_UNDERRUN);
McASPRxIntEnable(SOC_MCASP_0_CTRL_REGS, MCASP_RX_DMAERROR
2 y8 T) M( T- K| MCASP_RX_CLKFAIL/ c$ {9 k9 s8 @
| MCASP_RX_SYNCERROR 3 m; Y' f1 [( _7 P3 v
| MCASP_RX_OVERRUN);
2 o) z. V* Z6 S2 G( M" P}
static void I2SDataTxRxActivate(void)
5 S& B! r% c. W8 E) A{
  s/ J2 F8 {. s  Q! c/ n% q, g9 [/* Start the clocks */
. b- q0 |+ d* o5 p& TMcASPRxClkStart(SOC_MCASP_0_CTRL_REGS, MCASP_RX_CLK_EXTERNAL);7 x4 A5 H, B, x% a1 D
McASPTxClkStart(SOC_MCASP_0_CTRL_REGS, MCASP_TX_CLK_INTERNAL);
/* Enable EDMA for the transfer */8 K" z* E* A2 B; L* a9 i
EDMA3EnableTransfer(SOC_EDMA30CC_0_REGS, EDMA3_CHA_MCASP0_RX,! S2 R+ c! ]7 i
EDMA3_TRIG_MODE_EVENT);' Y% x, e6 k; f0 t4 {
EDMA3EnableTransfer(SOC_EDMA30CC_0_REGS,
% G  G4 I4 I+ ~  J" vEDMA3_CHA_MCASP0_TX, EDMA3_TRIG_MODE_EVENT);
/* Activate the serializers */5 O! Y: j% D2 `6 c+ C3 i& U  o6 n
McASPRxSerActivate(SOC_MCASP_0_CTRL_REGS);7 X  n& y' ]9 b, K$ f
McASPTxSerActivate(SOC_MCASP_0_CTRL_REGS);
/* make sure that the XDATA bit is cleared to zero */
+ v: H* G4 K1 ]$ Uwhile(McASPTxStatusGet(SOC_MCASP_0_CTRL_REGS) & MCASP_TX_STAT_DATAREADY);
/* Activate the state machines */
, k7 D& m' k* cMcASPRxEnable(SOC_MCASP_0_CTRL_REGS);/ o; F! H) h0 D, I
McASPTxEnable(SOC_MCASP_0_CTRL_REGS);' b$ _+ H' ~9 R# ~- I: w: v
}
$ ~. j& o# w8 h. P3 x1 ?% E1 I
请问:问题出在哪了,时钟按照这样配是否有错。
另外我看XDATA一直是0,接收的rxbuf0,1,2里有一般全是FFFF一半全是0.

0 l' l, Q2 N. E% p/ t
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖
回复

使用道具 举报

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

本版积分规则

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

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

GMT+8, 2026-3-18 06:29 , Processed in 0.042689 second(s), 25 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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