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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

查看: 12275|回复: 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,
. _8 ~2 L' u# j7 P$ Winput mcasp_ahclkx,- m0 i' _& C. d, v: ^
input mcasp_aclkx,
$ F9 B* p! ^$ ]# r5 winput axr0,8 G* M! m& n$ N% D

3 {: b7 G/ z% Foutput mcasp_afsr,
2 n- H" m. M2 |: i. foutput mcasp_ahclkr,
# Z. b; x0 \+ o6 w; ^output mcasp_aclkr,% t+ h" v5 w) y: y
output axr1,; Y" k/ ]8 d: m  y# j
assign mcasp_afsr = mcasp_afsx;8 w6 F- K5 z: j* ]
assign mcasp_aclkr = mcasp_aclkx;0 F) p' B; U# L) j% L0 T
assign mcasp_ahclkr = mcasp_ahclkx;+ t3 R: @: X  E
assign axr1 = axr0;

+ _2 w' c2 `) y) C6 ]# m0 q3 m. d( b+ j
在OMAPL138这端,通过axr0接口发固定的数,axr1接收。
在配置MACASP的时候,发送全部取内部时钟,接收全部取外部时钟。
一直循环发送,但是接收不到。在FPGA端也没有看到时钟和信号的波形。
部分代码如下,关于edma3的部分未做变化。
3 V$ T. o3 l! z) H- A2 _% T
static void McASPI2SConfigure(void)  q5 V) ^. _. e. ]
{4 Z' r1 P4 D7 Y
McASPRxReset(SOC_MCASP_0_CTRL_REGS);
8 W; H2 J! [- s4 E& R- L& e* VMcASPTxReset(SOC_MCASP_0_CTRL_REGS);
/* Enable the FIFOs for DMA transfer */
! v8 F2 w0 A2 L3 Z; D) xMcASPReadFifoEnable(SOC_MCASP_0_FIFO_REGS, 1, 1);! p* l3 b* B' u! B
McASPWriteFifoEnable(SOC_MCASP_0_FIFO_REGS, 1, 1);
/* Set I2S format in the transmitter/receiver format units */
+ L* R2 g4 h. _3 ^  c* S" @" S* [1 @+ yMcASPRxFmtI2SSet(SOC_MCASP_0_CTRL_REGS, WORD_SIZE, SLOT_SIZE,
$ s/ i7 B8 _! P1 r* [, Z2 R/ L1 FMCASP_RX_MODE_DMA);3 K- R( L. I, D2 g. T- V/ R4 ~
McASPTxFmtI2SSet(SOC_MCASP_0_CTRL_REGS, WORD_SIZE, SLOT_SIZE,
8 A3 ~6 Y# M1 z: [( lMCASP_TX_MODE_DMA);
/* Configure the frame sync. I2S shall work in TDM format with 2 slots */
' N* b* ~) }) d' H; l1 ?/ mMcASPRxFrameSyncCfg(SOC_MCASP_0_CTRL_REGS, 2, MCASP_RX_FS_WIDTH_WORD, ; O& l+ C* n% ~+ }, @
MCASP_RX_FS_EXT_BEGIN_ON_FALL_EDGE);+ c8 m6 H; W; l/ {! O) [3 {
McASPTxFrameSyncCfg(SOC_MCASP_0_CTRL_REGS, 2, MCASP_TX_FS_WIDTH_WORD,
' D6 O6 n1 x$ y  W9 U- uMCASP_TX_FS_INT_BEGIN_ON_RIS_EDGE);
/* configure the clock for receiver */
2 a- Z) {2 [" O  _McASPRxClkCfg(SOC_MCASP_0_CTRL_REGS, MCASP_RX_CLK_EXTERNAL, 0, 0);4 L# V+ E) h6 M
McASPRxClkPolaritySet(SOC_MCASP_0_CTRL_REGS, MCASP_RX_CLK_POL_RIS_EDGE);
5 ?+ [" I1 |; s+ G* u. }/ ?McASPRxClkCheckConfig(SOC_MCASP_0_CTRL_REGS, MCASP_RX_CLKCHCK_DIV32,; J7 M* a. ^4 q0 y
0x00, 0xFF);
/* configure the clock for transmitter */
, _5 S: C% u" j/ dMcASPTxClkCfg(SOC_MCASP_0_CTRL_REGS, MCASP_TX_CLK_INTERNAL, 11, 1);" N0 E& C% v8 M2 ^9 |
McASPTxClkPolaritySet(SOC_MCASP_0_CTRL_REGS, MCASP_TX_CLK_POL_FALL_EDGE);
, ]( W  U' j, y9 a' MMcASPTxClkCheckConfig(SOC_MCASP_0_CTRL_REGS, MCASP_TX_CLKCHCK_DIV32,: j  C4 G% h, w# x  a% x* {
0x00, 0xFF);5 w1 d4 W1 x" E0 ^" D

: w4 W  q+ f& [) c/* Enable synchronization of RX and TX sections */ 4 y% H4 O1 _' x8 x0 k3 Q
McASPTxRxClkSyncEnable(SOC_MCASP_0_CTRL_REGS);
/* Enable the transmitter/receiver slots. I2S uses 2 slots */
- S9 B' H1 t5 W1 ]% A2 a# ZMcASPRxTimeSlotSet(SOC_MCASP_0_CTRL_REGS, I2S_SLOTS);) z( j9 U3 j$ t: u
McASPTxTimeSlotSet(SOC_MCASP_0_CTRL_REGS, I2S_SLOTS);
/*
+ X/ Q. k* F0 k3 i+ l5 A- M** Set the serializers, Currently only one serializer is set as% i$ C$ j  d. w. t
** transmitter and one serializer as receiver./ v% y8 \0 q) @% B
*/+ C3 {6 X6 W$ R, [. G
McASPSerializerRxSet(SOC_MCASP_0_CTRL_REGS, MCASP_XSER_RX);! L  M6 i# j3 E8 C
McASPSerializerTxSet(SOC_MCASP_0_CTRL_REGS, MCASP_XSER_TX);
/*
0 Y0 J2 P1 a, X2 }6 P** Configure the McASP pins
% C. a" C( P1 z( F/ A- q+ ?** Input - Frame Sync, Clock and Serializer Rx
' s  u9 `5 v3 o! T7 l5 _# ?** Output - Serializer Tx is connected to the input of the codec ) J0 B* K8 N0 s: S9 V5 F
*/
- {3 T" o4 H- k! e2 tMcASPPinMcASPSet(SOC_MCASP_0_CTRL_REGS, 0xFFFFFFFF);: a0 D7 K7 `5 b8 e- x1 L8 |
McASPPinDirOutputSet(SOC_MCASP_0_CTRL_REGS,MCASP_PIN_AXR(MCASP_XSER_TX));( Z# [+ i4 }/ s& D; W
McASPPinDirInputSet(SOC_MCASP_0_CTRL_REGS, MCASP_PIN_AFSX1 N) O. {; ^( I
| MCASP_PIN_ACLKX
# ?; R% a1 z1 v; \7 g# h| MCASP_PIN_AHCLKX9 \+ z& c; S# w6 {" w
| MCASP_PIN_AXR(MCASP_XSER_RX));
/* Enable error interrupts for McASP */
5 R4 N2 P/ A6 w6 g' |/ HMcASPTxIntEnable(SOC_MCASP_0_CTRL_REGS, MCASP_TX_DMAERROR
# O' y3 a- m# W6 E9 r| MCASP_TX_CLKFAIL
! i3 [" J: Z" Q. o9 p3 j| MCASP_TX_SYNCERROR- s/ l3 j- p. T& M
| MCASP_TX_UNDERRUN);
McASPRxIntEnable(SOC_MCASP_0_CTRL_REGS, MCASP_RX_DMAERROR $ [2 l3 v) Z) X% p/ P% p
| MCASP_RX_CLKFAIL
3 B$ D  Y4 O+ z# ]* T| MCASP_RX_SYNCERROR
9 `6 y6 a* @2 `8 _| MCASP_RX_OVERRUN);$ M6 F4 Z+ _/ D
}
static void I2SDataTxRxActivate(void)
) s$ `  h0 P' E' z{
9 a- f9 T# g4 t/* Start the clocks */+ Z' T3 }$ W2 r9 c2 L
McASPRxClkStart(SOC_MCASP_0_CTRL_REGS, MCASP_RX_CLK_EXTERNAL);- \8 x2 H9 W6 B( G& C9 S
McASPTxClkStart(SOC_MCASP_0_CTRL_REGS, MCASP_TX_CLK_INTERNAL);
/* Enable EDMA for the transfer */3 ]- j! N, k( I
EDMA3EnableTransfer(SOC_EDMA30CC_0_REGS, EDMA3_CHA_MCASP0_RX,; ]# ^* g# f# Z- c1 ]7 f. F7 U
EDMA3_TRIG_MODE_EVENT);- p0 B7 U( ]8 }$ |% \
EDMA3EnableTransfer(SOC_EDMA30CC_0_REGS, 3 Y% S3 U! \# U% V$ T
EDMA3_CHA_MCASP0_TX, EDMA3_TRIG_MODE_EVENT);
/* Activate the serializers */4 X7 ~8 }% q- J5 A8 [
McASPRxSerActivate(SOC_MCASP_0_CTRL_REGS);
: l+ ^4 R9 f5 c3 p. Z. ^) d3 Z, OMcASPTxSerActivate(SOC_MCASP_0_CTRL_REGS);
/* make sure that the XDATA bit is cleared to zero */
: T9 V  L( y3 U- w! W' Zwhile(McASPTxStatusGet(SOC_MCASP_0_CTRL_REGS) & MCASP_TX_STAT_DATAREADY);
/* Activate the state machines */
, l6 ~! `# a; d0 ]' ^/ l; T$ zMcASPRxEnable(SOC_MCASP_0_CTRL_REGS);
9 R+ {  C, p1 j/ G0 ^* hMcASPTxEnable(SOC_MCASP_0_CTRL_REGS);
$ l. m. h  ?( N$ S8 ~/ k+ R0 G7 H}
3 W9 u  P- n2 R$ D5 b6 F
请问:问题出在哪了,时钟按照这样配是否有错。
另外我看XDATA一直是0,接收的rxbuf0,1,2里有一般全是FFFF一半全是0.

3 t/ ^0 @" K% h$ O2 v$ ^& W) _! p
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖
回复

使用道具 举报

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

本版积分规则

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

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

GMT+8, 2026-4-3 20:39 , Processed in 0.040176 second(s), 26 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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