嵌入式开发者社区

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

作者: wapdasta    时间: 2018-11-7 13:28
标题: MCASP自环配置。
我项目上用OMAPL138的板子MCASP的引脚都是链接的FPGA,所以在FPGA这端设置的MCASP自环。把axr0接收到的通过axr1发回去。
部分代码如下
input mcasp_afsx,( M% P1 T/ [: g! |8 x) ^
input mcasp_ahclkx,2 p3 a& T! r5 \: g! g
input mcasp_aclkx,. {- g+ n4 Q4 n9 v/ M+ r( G9 I
input axr0,
+ |  ]+ P0 [! i! k3 Y* r! n4 T9 N% s# B/ f+ G  _
output mcasp_afsr,
" l9 C" z3 n# v. A, @- M% F5 routput mcasp_ahclkr,
# c4 B! G* X% q& R2 y! Joutput mcasp_aclkr,
* k+ \/ A4 T) ^' g& L' ^output axr1,
/ _# n/ p2 m! ^" L* W3 a" W* C& R& @. N
assign mcasp_afsr = mcasp_afsx;2 u9 ^# O/ Y2 o! b
assign mcasp_aclkr = mcasp_aclkx;/ L8 ?, L! i+ `+ x! {- E
assign mcasp_ahclkr = mcasp_ahclkx;
6 [0 k1 Z! ~, R  y6 U- gassign axr1 = axr0;
7 Q8 z) [0 n3 G5 a

! ?) V. a1 h! \% [4 H6 p/ T
在OMAPL138这端,通过axr0接口发固定的数,axr1接收。
在配置MACASP的时候,发送全部取内部时钟,接收全部取外部时钟。
一直循环发送,但是接收不到。在FPGA端也没有看到时钟和信号的波形。
部分代码如下,关于edma3的部分未做变化。
* Z0 B% S+ s0 u" D& r+ D& Y) d* I/ i
static void McASPI2SConfigure(void): `7 u4 y4 U& \1 b( T, v
{9 W8 k$ N6 o6 @
McASPRxReset(SOC_MCASP_0_CTRL_REGS);
' A; o$ I/ M2 T& p: z/ w) h+ q7 X7 F7 UMcASPTxReset(SOC_MCASP_0_CTRL_REGS);
/* Enable the FIFOs for DMA transfer */4 X4 _2 S" c0 b: U9 |- A" e' q
McASPReadFifoEnable(SOC_MCASP_0_FIFO_REGS, 1, 1);( P, w- N6 [+ \: a- @
McASPWriteFifoEnable(SOC_MCASP_0_FIFO_REGS, 1, 1);
/* Set I2S format in the transmitter/receiver format units */% S4 }" I7 Y: Z8 A$ C$ C  b) l+ u
McASPRxFmtI2SSet(SOC_MCASP_0_CTRL_REGS, WORD_SIZE, SLOT_SIZE,+ v0 t* M4 H( @
MCASP_RX_MODE_DMA);
" N( s8 o- v' h* k1 G$ aMcASPTxFmtI2SSet(SOC_MCASP_0_CTRL_REGS, WORD_SIZE, SLOT_SIZE,( A1 i- R8 m: I6 f/ e
MCASP_TX_MODE_DMA);
/* Configure the frame sync. I2S shall work in TDM format with 2 slots */% S6 |$ F; g9 e3 b. z) }
McASPRxFrameSyncCfg(SOC_MCASP_0_CTRL_REGS, 2, MCASP_RX_FS_WIDTH_WORD,
% k" g5 B7 |2 B$ m* hMCASP_RX_FS_EXT_BEGIN_ON_FALL_EDGE);
! @9 L, b: k! Q' n! q  |McASPTxFrameSyncCfg(SOC_MCASP_0_CTRL_REGS, 2, MCASP_TX_FS_WIDTH_WORD,
6 |6 z4 r! Q: Y+ J% q$ l3 WMCASP_TX_FS_INT_BEGIN_ON_RIS_EDGE);
/* configure the clock for receiver */7 _! }# B4 L0 x5 O  z3 S$ V, n% u% W
McASPRxClkCfg(SOC_MCASP_0_CTRL_REGS, MCASP_RX_CLK_EXTERNAL, 0, 0);+ _% E' G3 U' I$ M2 y% @
McASPRxClkPolaritySet(SOC_MCASP_0_CTRL_REGS, MCASP_RX_CLK_POL_RIS_EDGE);
% E2 Y0 G; p; l- e2 |% RMcASPRxClkCheckConfig(SOC_MCASP_0_CTRL_REGS, MCASP_RX_CLKCHCK_DIV32," b1 k7 J' N) `. j
0x00, 0xFF);
/* configure the clock for transmitter */
) m) K" }- B' e, a0 BMcASPTxClkCfg(SOC_MCASP_0_CTRL_REGS, MCASP_TX_CLK_INTERNAL, 11, 1);& ?% L+ L" w4 B
McASPTxClkPolaritySet(SOC_MCASP_0_CTRL_REGS, MCASP_TX_CLK_POL_FALL_EDGE);
/ ~4 F/ ^. I* v6 N% J+ s( CMcASPTxClkCheckConfig(SOC_MCASP_0_CTRL_REGS, MCASP_TX_CLKCHCK_DIV32,4 n4 s# _; S: D3 v/ t2 E& H& s
0x00, 0xFF);% y* A9 V# y4 E; m/ w

2 L; L6 \% M1 `( t$ N, y/* Enable synchronization of RX and TX sections */
: w' _9 q1 j( f4 H0 DMcASPTxRxClkSyncEnable(SOC_MCASP_0_CTRL_REGS);
/* Enable the transmitter/receiver slots. I2S uses 2 slots */. [3 ]8 K! I% k% }7 Q
McASPRxTimeSlotSet(SOC_MCASP_0_CTRL_REGS, I2S_SLOTS);3 C! G  P- |! y
McASPTxTimeSlotSet(SOC_MCASP_0_CTRL_REGS, I2S_SLOTS);
/*4 b  B( E. p" W/ V7 ~; [
** Set the serializers, Currently only one serializer is set as
2 t6 [( B: `: Z- q2 D! Q- o  x2 L** transmitter and one serializer as receiver.
/ u$ Y/ Y" q  o# e*/
# x* d1 J# O) w* n, cMcASPSerializerRxSet(SOC_MCASP_0_CTRL_REGS, MCASP_XSER_RX);
6 u0 g2 ]) s' r' C. sMcASPSerializerTxSet(SOC_MCASP_0_CTRL_REGS, MCASP_XSER_TX);
/*2 E: l6 |6 Q+ W2 x  W0 s
** Configure the McASP pins 2 m. a/ j' v5 t- p# D/ Y9 @6 F
** Input - Frame Sync, Clock and Serializer Rx
! E0 P/ x# e4 `** Output - Serializer Tx is connected to the input of the codec
5 k8 r) S+ Y) ~7 T! E4 {: e( J0 Q6 h*/
4 Y: O# F6 f' O5 h+ J# K* aMcASPPinMcASPSet(SOC_MCASP_0_CTRL_REGS, 0xFFFFFFFF);9 q" b* H+ [5 _  A8 n
McASPPinDirOutputSet(SOC_MCASP_0_CTRL_REGS,MCASP_PIN_AXR(MCASP_XSER_TX));6 I4 x) o0 s0 q1 F0 A3 B
McASPPinDirInputSet(SOC_MCASP_0_CTRL_REGS, MCASP_PIN_AFSX
3 J$ {+ z1 h8 c! o- l| MCASP_PIN_ACLKX
' d7 E1 l0 |2 o7 j5 e" N8 [: n0 h| MCASP_PIN_AHCLKX7 \% _6 o  X4 l) W# {9 U0 G4 `, U
| MCASP_PIN_AXR(MCASP_XSER_RX));
/* Enable error interrupts for McASP */( h7 d9 x, G* [8 T( K0 q5 m
McASPTxIntEnable(SOC_MCASP_0_CTRL_REGS, MCASP_TX_DMAERROR
3 ]0 p4 I: A& a. E% J. E' [| MCASP_TX_CLKFAIL
6 ?7 w2 f* N8 S# F  r  |% || MCASP_TX_SYNCERROR* d1 G0 l9 t, P$ D4 }3 l8 S& C
| MCASP_TX_UNDERRUN);
McASPRxIntEnable(SOC_MCASP_0_CTRL_REGS, MCASP_RX_DMAERROR * x6 `4 Z) S8 K, \  E
| MCASP_RX_CLKFAIL
3 ?; Y1 ~) y( U- x| MCASP_RX_SYNCERROR 7 d( ^8 k/ _# c- {+ ~
| MCASP_RX_OVERRUN);1 u6 X8 m: q5 F" y
}
static void I2SDataTxRxActivate(void)
4 z0 ^1 N) T/ ?) i{, [8 w" L: r, b. J$ C& w
/* Start the clocks */. H3 [' d/ l" c# L
McASPRxClkStart(SOC_MCASP_0_CTRL_REGS, MCASP_RX_CLK_EXTERNAL);
+ o6 k' S  w# [. ZMcASPTxClkStart(SOC_MCASP_0_CTRL_REGS, MCASP_TX_CLK_INTERNAL);
/* Enable EDMA for the transfer */; |  x. f6 [- E% E4 M# P- W7 y; R
EDMA3EnableTransfer(SOC_EDMA30CC_0_REGS, EDMA3_CHA_MCASP0_RX,
! m8 n; F% d2 D: E2 P- J" [5 Z9 ]EDMA3_TRIG_MODE_EVENT);
) o. p: Y- X, G6 LEDMA3EnableTransfer(SOC_EDMA30CC_0_REGS,
: n3 ~: l9 a5 OEDMA3_CHA_MCASP0_TX, EDMA3_TRIG_MODE_EVENT);
/* Activate the serializers */
1 E. C* p  k) a' P& O, a' tMcASPRxSerActivate(SOC_MCASP_0_CTRL_REGS);
9 n! T$ f3 ^5 w& x4 U% B( D8 v3 rMcASPTxSerActivate(SOC_MCASP_0_CTRL_REGS);
/* make sure that the XDATA bit is cleared to zero */" G& A6 }, w* V, U
while(McASPTxStatusGet(SOC_MCASP_0_CTRL_REGS) & MCASP_TX_STAT_DATAREADY);
/* Activate the state machines */( v8 S# b" [* n; u  X, T' Y  A, g. I% F
McASPRxEnable(SOC_MCASP_0_CTRL_REGS);+ s6 w  e' T! Q3 |7 l
McASPTxEnable(SOC_MCASP_0_CTRL_REGS);
. {" f- p# ^' D* ?3 G0 C. Y% r}
2 T7 Q/ \8 @& ~" T  j4 p
请问:问题出在哪了,时钟按照这样配是否有错。
另外我看XDATA一直是0,接收的rxbuf0,1,2里有一般全是FFFF一半全是0.

9 g: h( b3 J$ F! K- W) y5 B




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