嵌入式开发者社区

标题: MCASP自环配置。 [打印本页]

作者: wapdasta    时间: 2018-11-7 13:28
标题: MCASP自环配置。
我项目上用OMAPL138的板子MCASP的引脚都是链接的FPGA,所以在FPGA这端设置的MCASP自环。把axr0接收到的通过axr1发回去。
部分代码如下
input mcasp_afsx,- g: I9 _9 {. z# ~
input mcasp_ahclkx,& `0 ~: ^3 `0 ]$ v' e2 D0 o
input mcasp_aclkx,
3 }5 d: A- j2 W: V' `input axr0,) T/ k+ B/ ]1 G' p! {
3 n( e( a; A4 ^$ {2 U! E3 H. Q
output mcasp_afsr,
* X, o# q5 \  C- Z. _output mcasp_ahclkr,
# m7 m' J; ~5 m& ?output mcasp_aclkr,8 d6 P; ?1 P# i+ o+ O7 B: e6 _
output axr1,8 y; \) t$ L6 C& w/ H: t
assign mcasp_afsr = mcasp_afsx;
* j( d1 d# {8 c1 cassign mcasp_aclkr = mcasp_aclkx;: v  P+ q! s- N
assign mcasp_ahclkr = mcasp_ahclkx;
0 F7 ~' L1 v# ?( G- {+ X; Dassign axr1 = axr0;

0 H3 ^9 O3 h! M
5 P9 j9 A" a2 F+ d3 J
在OMAPL138这端,通过axr0接口发固定的数,axr1接收。
在配置MACASP的时候,发送全部取内部时钟,接收全部取外部时钟。
一直循环发送,但是接收不到。在FPGA端也没有看到时钟和信号的波形。
部分代码如下,关于edma3的部分未做变化。
7 W& t* ~7 I7 a( |& Q; l0 V% n  X3 @
static void McASPI2SConfigure(void)
, x$ x" K3 j' \1 f{
" V1 V7 I9 S, z/ AMcASPRxReset(SOC_MCASP_0_CTRL_REGS);' }: F) k  \7 H7 Z8 I
McASPTxReset(SOC_MCASP_0_CTRL_REGS);
/* Enable the FIFOs for DMA transfer */
& [/ C! c" i( }0 BMcASPReadFifoEnable(SOC_MCASP_0_FIFO_REGS, 1, 1);
% ]1 p! X( R) @! O! v3 d" OMcASPWriteFifoEnable(SOC_MCASP_0_FIFO_REGS, 1, 1);
/* Set I2S format in the transmitter/receiver format units */  `! `& ?' j9 T7 x
McASPRxFmtI2SSet(SOC_MCASP_0_CTRL_REGS, WORD_SIZE, SLOT_SIZE,) }2 e# P5 H7 B+ {" o
MCASP_RX_MODE_DMA);; u0 r0 k# n8 T  I8 ~8 [5 F
McASPTxFmtI2SSet(SOC_MCASP_0_CTRL_REGS, WORD_SIZE, SLOT_SIZE,+ k- F5 _/ ]7 }0 l6 s
MCASP_TX_MODE_DMA);
/* Configure the frame sync. I2S shall work in TDM format with 2 slots */
* i% E; c2 S% W% cMcASPRxFrameSyncCfg(SOC_MCASP_0_CTRL_REGS, 2, MCASP_RX_FS_WIDTH_WORD,
  k3 ~( ]7 i1 I" }MCASP_RX_FS_EXT_BEGIN_ON_FALL_EDGE);6 |% ?! R) y* z. @
McASPTxFrameSyncCfg(SOC_MCASP_0_CTRL_REGS, 2, MCASP_TX_FS_WIDTH_WORD, 9 k+ K7 g% X7 Z# i/ p
MCASP_TX_FS_INT_BEGIN_ON_RIS_EDGE);
/* configure the clock for receiver */( w' G3 P: ~6 H+ {! |2 {" Q
McASPRxClkCfg(SOC_MCASP_0_CTRL_REGS, MCASP_RX_CLK_EXTERNAL, 0, 0);5 o4 d; r  w2 k3 V: o
McASPRxClkPolaritySet(SOC_MCASP_0_CTRL_REGS, MCASP_RX_CLK_POL_RIS_EDGE);
5 A* J1 p- s! J0 R: p. kMcASPRxClkCheckConfig(SOC_MCASP_0_CTRL_REGS, MCASP_RX_CLKCHCK_DIV32,* c1 D& t" k# `+ f+ ?6 k
0x00, 0xFF);
/* configure the clock for transmitter */& t6 T+ J5 R* j$ F9 I! @
McASPTxClkCfg(SOC_MCASP_0_CTRL_REGS, MCASP_TX_CLK_INTERNAL, 11, 1);5 @( ~! F, c2 {$ ]
McASPTxClkPolaritySet(SOC_MCASP_0_CTRL_REGS, MCASP_TX_CLK_POL_FALL_EDGE);
( n( Q7 E0 T* ~McASPTxClkCheckConfig(SOC_MCASP_0_CTRL_REGS, MCASP_TX_CLKCHCK_DIV32,* |( `0 @. G6 y) U& k6 ]
0x00, 0xFF);
7 q7 C9 L. x" D5 Y3 _- _; g& j+ m9 p! S$ I
/* Enable synchronization of RX and TX sections */ 9 G) x( g2 N6 c3 ?% {
McASPTxRxClkSyncEnable(SOC_MCASP_0_CTRL_REGS);
/* Enable the transmitter/receiver slots. I2S uses 2 slots */
1 R6 U, e, K; D- OMcASPRxTimeSlotSet(SOC_MCASP_0_CTRL_REGS, I2S_SLOTS);4 ]' V( W$ b1 m
McASPTxTimeSlotSet(SOC_MCASP_0_CTRL_REGS, I2S_SLOTS);
/*
- V3 ?- R; l! K4 K8 O  x- D9 M+ a# B** Set the serializers, Currently only one serializer is set as
1 x1 n5 C9 C2 |$ H/ L% p  }** transmitter and one serializer as receiver.
2 D  O% ^1 Q& H+ f. |! A*/
1 x  U+ h3 K! Y+ J: q" nMcASPSerializerRxSet(SOC_MCASP_0_CTRL_REGS, MCASP_XSER_RX);: V' d0 j# C2 U; v  H, k3 r
McASPSerializerTxSet(SOC_MCASP_0_CTRL_REGS, MCASP_XSER_TX);
/*( _" G% h, o1 V  z0 k5 K/ _
** Configure the McASP pins 0 U, ^: v0 n/ H% Z+ F8 p
** Input - Frame Sync, Clock and Serializer Rx$ y  \, `& d6 z
** Output - Serializer Tx is connected to the input of the codec 4 Q8 U) A  O# P/ C* N
*/- |% T$ j' f% _
McASPPinMcASPSet(SOC_MCASP_0_CTRL_REGS, 0xFFFFFFFF);; d2 ?  s. \: ~" M0 ~
McASPPinDirOutputSet(SOC_MCASP_0_CTRL_REGS,MCASP_PIN_AXR(MCASP_XSER_TX));
: F: [- f, N" j' ~. SMcASPPinDirInputSet(SOC_MCASP_0_CTRL_REGS, MCASP_PIN_AFSX6 j5 ~7 g# C0 ~8 ^3 C7 I
| MCASP_PIN_ACLKX
& f0 }# [2 G. P| MCASP_PIN_AHCLKX
- q% h- O! G3 T  j9 Y5 g% N- _/ R| MCASP_PIN_AXR(MCASP_XSER_RX));
/* Enable error interrupts for McASP */. X# y% N- L: q
McASPTxIntEnable(SOC_MCASP_0_CTRL_REGS, MCASP_TX_DMAERROR " {4 X/ F- f2 E+ ~2 R. r: m
| MCASP_TX_CLKFAIL
; d% D% [6 \0 U' F; ~7 O1 O| MCASP_TX_SYNCERROR' l; k# J: J  l' g% l. W5 I
| MCASP_TX_UNDERRUN);
McASPRxIntEnable(SOC_MCASP_0_CTRL_REGS, MCASP_RX_DMAERROR
* `+ i# s/ W8 H; o' H, v| MCASP_RX_CLKFAIL
  X- m+ D' C6 |) r0 ?| MCASP_RX_SYNCERROR
. F# m8 {- I7 p* J- ]! B| MCASP_RX_OVERRUN);% w, N9 ]" B2 l; m  t
}
static void I2SDataTxRxActivate(void)
, H. ]9 h5 F) N' `# G5 V{& K+ \' G, r0 F% h' y+ @
/* Start the clocks */
  Z$ W! k* K- y3 _' o! o5 y" t5 uMcASPRxClkStart(SOC_MCASP_0_CTRL_REGS, MCASP_RX_CLK_EXTERNAL);
3 M" m: {3 W8 @; @( O* Y: OMcASPTxClkStart(SOC_MCASP_0_CTRL_REGS, MCASP_TX_CLK_INTERNAL);
/* Enable EDMA for the transfer */+ }+ w5 ^; V! o3 m* r0 G6 o
EDMA3EnableTransfer(SOC_EDMA30CC_0_REGS, EDMA3_CHA_MCASP0_RX,
2 S5 M3 L' X: P: KEDMA3_TRIG_MODE_EVENT);
  N$ \& p7 D7 u9 ?- dEDMA3EnableTransfer(SOC_EDMA30CC_0_REGS, : R$ @- U- X2 C( j$ G" [, E
EDMA3_CHA_MCASP0_TX, EDMA3_TRIG_MODE_EVENT);
/* Activate the serializers */
$ U- _$ D4 ^" ~8 e9 KMcASPRxSerActivate(SOC_MCASP_0_CTRL_REGS);+ ?* u1 j, z- Y: f. l7 Y
McASPTxSerActivate(SOC_MCASP_0_CTRL_REGS);
/* make sure that the XDATA bit is cleared to zero */! P7 |* o$ e2 q5 [
while(McASPTxStatusGet(SOC_MCASP_0_CTRL_REGS) & MCASP_TX_STAT_DATAREADY);
/* Activate the state machines */3 y+ b# J2 i6 {8 ~8 A$ B
McASPRxEnable(SOC_MCASP_0_CTRL_REGS);% r4 r; S4 J5 r7 D, M. {+ Q# L
McASPTxEnable(SOC_MCASP_0_CTRL_REGS);
8 P+ f0 x; Z- U- b" ]  X: g  h) _}

& C; s: y: P% f' I+ i8 P; o
请问:问题出在哪了,时钟按照这样配是否有错。
另外我看XDATA一直是0,接收的rxbuf0,1,2里有一般全是FFFF一半全是0.
) ^+ o2 }! f$ b) `9 q4 d





欢迎光临 嵌入式开发者社区 (https://www.51ele.net/) Powered by Discuz! X3.4