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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

查看: 9762|回复: 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,8 R4 B& i* W. |% X5 D
input mcasp_ahclkx,+ B5 `$ i+ ]* z' X) a
input mcasp_aclkx,
( O2 p5 e4 O( g/ S2 Zinput axr0,: B  S! p0 }: @9 _( y" R! u

6 x4 {2 w. @$ Y! ^0 youtput mcasp_afsr,1 {3 E/ f: U0 Q: K7 [3 I! {! h
output mcasp_ahclkr,
- t1 s! Y3 K3 H, [4 ~& Qoutput mcasp_aclkr,# E. }" K1 _% T1 G# w, L/ C/ L
output axr1,
8 p' O! e( j/ X! I
assign mcasp_afsr = mcasp_afsx;- M; x3 M$ |4 ?0 k- d
assign mcasp_aclkr = mcasp_aclkx;
2 E% E! p$ H2 X: ?! [assign mcasp_ahclkr = mcasp_ahclkx;- K' `  T  T( I) i/ {! Q
assign axr1 = axr0;

3 q9 C. s- q$ ]+ u% e
0 b2 B* r4 E; {+ C
在OMAPL138这端,通过axr0接口发固定的数,axr1接收。
在配置MACASP的时候,发送全部取内部时钟,接收全部取外部时钟。
一直循环发送,但是接收不到。在FPGA端也没有看到时钟和信号的波形。
部分代码如下,关于edma3的部分未做变化。

: ^0 L+ y- S; B! F
static void McASPI2SConfigure(void)/ E9 _: O" [1 M% s4 T
{9 h- m! ~: s4 n. Q( {
McASPRxReset(SOC_MCASP_0_CTRL_REGS);
" f, |4 ^/ l2 z9 p) g! rMcASPTxReset(SOC_MCASP_0_CTRL_REGS);
/* Enable the FIFOs for DMA transfer */- d) W2 J! \6 P- N) R0 k
McASPReadFifoEnable(SOC_MCASP_0_FIFO_REGS, 1, 1);+ P# U% G! G( V3 ^
McASPWriteFifoEnable(SOC_MCASP_0_FIFO_REGS, 1, 1);
/* Set I2S format in the transmitter/receiver format units */9 t. X& Q8 E+ U: `
McASPRxFmtI2SSet(SOC_MCASP_0_CTRL_REGS, WORD_SIZE, SLOT_SIZE,8 Y; n' |% z# P) L: U3 T' [
MCASP_RX_MODE_DMA);* E. m4 r0 |" Z, o$ h) W) }
McASPTxFmtI2SSet(SOC_MCASP_0_CTRL_REGS, WORD_SIZE, SLOT_SIZE,
& t% b3 H6 V( o- d5 @" uMCASP_TX_MODE_DMA);
/* Configure the frame sync. I2S shall work in TDM format with 2 slots *// _. ]6 m& r4 C4 E
McASPRxFrameSyncCfg(SOC_MCASP_0_CTRL_REGS, 2, MCASP_RX_FS_WIDTH_WORD, * y4 K6 L& f# M2 d, d! X% k
MCASP_RX_FS_EXT_BEGIN_ON_FALL_EDGE);
% R3 H) ]' w# l* O. T! ], p( i) @4 B5 ^McASPTxFrameSyncCfg(SOC_MCASP_0_CTRL_REGS, 2, MCASP_TX_FS_WIDTH_WORD, * Z$ Z4 M6 j8 p4 R
MCASP_TX_FS_INT_BEGIN_ON_RIS_EDGE);
/* configure the clock for receiver */
& ~  w9 H5 z8 |  V, ?McASPRxClkCfg(SOC_MCASP_0_CTRL_REGS, MCASP_RX_CLK_EXTERNAL, 0, 0);
% a& w( l. r8 F3 `McASPRxClkPolaritySet(SOC_MCASP_0_CTRL_REGS, MCASP_RX_CLK_POL_RIS_EDGE); * z# u! z" Z. w4 _: k2 k
McASPRxClkCheckConfig(SOC_MCASP_0_CTRL_REGS, MCASP_RX_CLKCHCK_DIV32,
: r- g; N3 X5 F( I( I1 E% m0x00, 0xFF);
/* configure the clock for transmitter */! Y  z) ~1 m: i
McASPTxClkCfg(SOC_MCASP_0_CTRL_REGS, MCASP_TX_CLK_INTERNAL, 11, 1);
* U0 M9 o7 t9 D9 q1 lMcASPTxClkPolaritySet(SOC_MCASP_0_CTRL_REGS, MCASP_TX_CLK_POL_FALL_EDGE);
, D* F" {4 Q5 g# MMcASPTxClkCheckConfig(SOC_MCASP_0_CTRL_REGS, MCASP_TX_CLKCHCK_DIV32,
; q/ c7 {& X  S  g4 ~0x00, 0xFF);: r, t& G! ]& {
0 N3 w) L5 D* W- J0 s
/* Enable synchronization of RX and TX sections */ . ?0 M* o- y) v& w/ X
McASPTxRxClkSyncEnable(SOC_MCASP_0_CTRL_REGS);
/* Enable the transmitter/receiver slots. I2S uses 2 slots */
; {: J: ^2 i( \" _McASPRxTimeSlotSet(SOC_MCASP_0_CTRL_REGS, I2S_SLOTS);
+ S5 r* }# y% `. O. mMcASPTxTimeSlotSet(SOC_MCASP_0_CTRL_REGS, I2S_SLOTS);
/*! r- I8 G3 t! P2 y3 v8 y5 P" n/ i! J
** Set the serializers, Currently only one serializer is set as" ^7 ~0 {, J: Y% n7 b1 D8 Z, Y
** transmitter and one serializer as receiver.
; i& l2 e3 X6 w5 W7 N0 J*/
3 A1 g, Z" R' D4 Y$ n9 U# nMcASPSerializerRxSet(SOC_MCASP_0_CTRL_REGS, MCASP_XSER_RX);
% d6 @- A. z" uMcASPSerializerTxSet(SOC_MCASP_0_CTRL_REGS, MCASP_XSER_TX);
/*7 o0 g6 Z  k; P# W4 W5 t" w
** Configure the McASP pins
7 n6 P5 P  L  R% A- ]7 ~** Input - Frame Sync, Clock and Serializer Rx+ E& ?: ?  r3 B- l4 o
** Output - Serializer Tx is connected to the input of the codec
/ W# r% {% x7 j# C8 m3 E" R, z*/6 ?& m3 l3 U7 ^( [- W9 ]
McASPPinMcASPSet(SOC_MCASP_0_CTRL_REGS, 0xFFFFFFFF);
4 L% \2 ^. N) hMcASPPinDirOutputSet(SOC_MCASP_0_CTRL_REGS,MCASP_PIN_AXR(MCASP_XSER_TX));0 X0 H8 Z6 ~! D) C( w
McASPPinDirInputSet(SOC_MCASP_0_CTRL_REGS, MCASP_PIN_AFSX& Z( [: Y) z$ \2 x$ F7 s
| MCASP_PIN_ACLKX8 Y' w  k9 L( j% l# b. c
| MCASP_PIN_AHCLKX& k: L5 A7 K3 \4 X& ?
| MCASP_PIN_AXR(MCASP_XSER_RX));
/* Enable error interrupts for McASP */
( \" b+ g: Z5 }8 bMcASPTxIntEnable(SOC_MCASP_0_CTRL_REGS, MCASP_TX_DMAERROR
# C; S/ {6 _, R- e; E+ a, t| MCASP_TX_CLKFAIL + X" m3 }" P3 `% k
| MCASP_TX_SYNCERROR9 ^5 e4 E/ M% f5 k+ ~3 B; y
| MCASP_TX_UNDERRUN);
McASPRxIntEnable(SOC_MCASP_0_CTRL_REGS, MCASP_RX_DMAERROR 6 {: B2 s; _7 q1 k, A
| MCASP_RX_CLKFAIL
0 b3 |& x" ]6 V& ]8 M/ _| MCASP_RX_SYNCERROR ( B, Y, s7 v6 P# m& x8 X
| MCASP_RX_OVERRUN);4 C9 S6 B/ y- h, Y* S
}
static void I2SDataTxRxActivate(void), s/ C+ j4 p; E2 O
{
6 Z# _1 D% ~; E$ j/* Start the clocks */. \2 r  t: M% K7 B
McASPRxClkStart(SOC_MCASP_0_CTRL_REGS, MCASP_RX_CLK_EXTERNAL);0 U5 L! ^% ?5 c( v" L
McASPTxClkStart(SOC_MCASP_0_CTRL_REGS, MCASP_TX_CLK_INTERNAL);
/* Enable EDMA for the transfer */: B2 d- z4 O3 W/ R( T5 t
EDMA3EnableTransfer(SOC_EDMA30CC_0_REGS, EDMA3_CHA_MCASP0_RX,
9 i  y* Q) i9 `* N3 V3 Y0 [EDMA3_TRIG_MODE_EVENT);
, g: I. I2 [) O0 A5 ~EDMA3EnableTransfer(SOC_EDMA30CC_0_REGS,
- g& C' w+ t- G$ I( k- XEDMA3_CHA_MCASP0_TX, EDMA3_TRIG_MODE_EVENT);
/* Activate the serializers */
' Y6 M: J8 w) ~; P/ KMcASPRxSerActivate(SOC_MCASP_0_CTRL_REGS);
: S9 E+ S6 ]3 h% O: bMcASPTxSerActivate(SOC_MCASP_0_CTRL_REGS);
/* make sure that the XDATA bit is cleared to zero */# S# t& h' {- i. j
while(McASPTxStatusGet(SOC_MCASP_0_CTRL_REGS) & MCASP_TX_STAT_DATAREADY);
/* Activate the state machines */
" @/ B% Z1 e4 m+ x5 r. NMcASPRxEnable(SOC_MCASP_0_CTRL_REGS);
" m* e  R( h. d. c2 @; SMcASPTxEnable(SOC_MCASP_0_CTRL_REGS);! h& l; N: ]* `! `' J
}
: F7 L* N$ w! v6 k8 m
请问:问题出在哪了,时钟按照这样配是否有错。
另外我看XDATA一直是0,接收的rxbuf0,1,2里有一般全是FFFF一半全是0.

3 ]" u6 M; c: w0 N
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖
回复

使用道具 举报

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

本版积分规则

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

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

GMT+8, 2026-1-19 14:37 , Processed in 0.040450 second(s), 26 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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