嵌入式开发者社区

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

作者: wapdasta    时间: 2018-11-7 13:28
标题: MCASP自环配置。
我项目上用OMAPL138的板子MCASP的引脚都是链接的FPGA,所以在FPGA这端设置的MCASP自环。把axr0接收到的通过axr1发回去。
部分代码如下
input mcasp_afsx,- ~$ \0 q  G( T/ e& S$ ?' U1 C
input mcasp_ahclkx,
) a4 x. U2 l) Q8 Q& _2 J; e7 ~4 Kinput mcasp_aclkx,
2 J. S3 O+ x3 _. t/ pinput axr0,% o; |( n1 I: O
4 J$ Q7 X; M, q1 H6 b6 O
output mcasp_afsr,
: L/ i" p1 t! n: d; Toutput mcasp_ahclkr," M1 K! ]1 ^3 ~) O3 E
output mcasp_aclkr,
- M: A, [* ]1 t) `" E4 J$ Koutput axr1,' y' u$ X* Q, {; G2 C2 Z$ |3 A8 h% f
assign mcasp_afsr = mcasp_afsx;
( i+ V" V6 B1 J6 U1 R% s. z* Passign mcasp_aclkr = mcasp_aclkx;$ B. A, m( n; f2 G) r: v
assign mcasp_ahclkr = mcasp_ahclkx;  ~2 B- t  i+ ?7 B5 _
assign axr1 = axr0;

+ y) t& u( g* ]6 \  W$ C+ G7 z& |0 k- B
在OMAPL138这端,通过axr0接口发固定的数,axr1接收。
在配置MACASP的时候,发送全部取内部时钟,接收全部取外部时钟。
一直循环发送,但是接收不到。在FPGA端也没有看到时钟和信号的波形。
部分代码如下,关于edma3的部分未做变化。
! V, l- y+ m! q8 [+ B4 @  L' Q
static void McASPI2SConfigure(void)) Q; Y& l( {( l& A8 J* K* c
{- s& }- |! F7 ?: v# r( X
McASPRxReset(SOC_MCASP_0_CTRL_REGS);4 N' i& e% A# K5 y  ^+ h3 \6 M
McASPTxReset(SOC_MCASP_0_CTRL_REGS);
/* Enable the FIFOs for DMA transfer */2 P3 [  f# j, q( }7 p. `7 z. I
McASPReadFifoEnable(SOC_MCASP_0_FIFO_REGS, 1, 1);0 ?1 z% T0 e; Z3 U% Y) L6 c
McASPWriteFifoEnable(SOC_MCASP_0_FIFO_REGS, 1, 1);
/* Set I2S format in the transmitter/receiver format units */- @0 {  l6 T, t# M% K
McASPRxFmtI2SSet(SOC_MCASP_0_CTRL_REGS, WORD_SIZE, SLOT_SIZE,
- F& I6 }8 w: f4 WMCASP_RX_MODE_DMA);
; f: F! u$ _& \- @+ sMcASPTxFmtI2SSet(SOC_MCASP_0_CTRL_REGS, WORD_SIZE, SLOT_SIZE,
. r3 @" [* @4 q& e. b* N5 OMCASP_TX_MODE_DMA);
/* Configure the frame sync. I2S shall work in TDM format with 2 slots */
- k9 o) ?( ]$ T- _0 l2 e" QMcASPRxFrameSyncCfg(SOC_MCASP_0_CTRL_REGS, 2, MCASP_RX_FS_WIDTH_WORD, & w/ B& T7 |# N' O! d
MCASP_RX_FS_EXT_BEGIN_ON_FALL_EDGE);
- F3 g6 w) `: M6 O/ OMcASPTxFrameSyncCfg(SOC_MCASP_0_CTRL_REGS, 2, MCASP_TX_FS_WIDTH_WORD, " w1 ^; Q: K5 P9 i7 _8 X0 M
MCASP_TX_FS_INT_BEGIN_ON_RIS_EDGE);
/* configure the clock for receiver */
- C! Z3 z* W( V! }McASPRxClkCfg(SOC_MCASP_0_CTRL_REGS, MCASP_RX_CLK_EXTERNAL, 0, 0);
# h6 n/ [8 U1 T+ `$ u5 sMcASPRxClkPolaritySet(SOC_MCASP_0_CTRL_REGS, MCASP_RX_CLK_POL_RIS_EDGE); * T: ?' G( t- X: k. u; @4 ~; f
McASPRxClkCheckConfig(SOC_MCASP_0_CTRL_REGS, MCASP_RX_CLKCHCK_DIV32,) O3 K  ?0 H% B9 o$ U
0x00, 0xFF);
/* configure the clock for transmitter */) t0 C5 H7 B" F1 s% m) D
McASPTxClkCfg(SOC_MCASP_0_CTRL_REGS, MCASP_TX_CLK_INTERNAL, 11, 1);4 O7 v, J1 P) u
McASPTxClkPolaritySet(SOC_MCASP_0_CTRL_REGS, MCASP_TX_CLK_POL_FALL_EDGE);
7 n: \  _7 a  z; U) D2 ZMcASPTxClkCheckConfig(SOC_MCASP_0_CTRL_REGS, MCASP_TX_CLKCHCK_DIV32,# n3 U: g: z: g& d
0x00, 0xFF);5 W4 N$ w1 E; d7 R  a
' l4 x1 _) L: m% `1 j
/* Enable synchronization of RX and TX sections */ ! ^& K; U9 R; v' E
McASPTxRxClkSyncEnable(SOC_MCASP_0_CTRL_REGS);
/* Enable the transmitter/receiver slots. I2S uses 2 slots */
" |! c' A1 X' j( {McASPRxTimeSlotSet(SOC_MCASP_0_CTRL_REGS, I2S_SLOTS);9 E6 Z7 S0 j6 e: j
McASPTxTimeSlotSet(SOC_MCASP_0_CTRL_REGS, I2S_SLOTS);
/*7 d0 U! I4 e% `8 a; U; H
** Set the serializers, Currently only one serializer is set as
8 f3 p1 `! T7 @' P0 E' j5 x** transmitter and one serializer as receiver.
2 v3 ^1 Y" ]2 b. K*/
  G* S6 M* {- I7 I9 yMcASPSerializerRxSet(SOC_MCASP_0_CTRL_REGS, MCASP_XSER_RX);
" h7 ]$ d$ N5 F6 E( l2 ~McASPSerializerTxSet(SOC_MCASP_0_CTRL_REGS, MCASP_XSER_TX);
/*
- L7 I2 K9 {+ O+ o+ L** Configure the McASP pins 9 p0 @- B, f6 D4 t2 v4 n
** Input - Frame Sync, Clock and Serializer Rx
" K, ?* a6 \. \0 t** Output - Serializer Tx is connected to the input of the codec
1 b: m8 r, u' T& G6 |, p: A*/2 L4 g3 b6 c5 \- G7 Q6 H& c
McASPPinMcASPSet(SOC_MCASP_0_CTRL_REGS, 0xFFFFFFFF);
7 t- h( a" }# L! C, Z5 mMcASPPinDirOutputSet(SOC_MCASP_0_CTRL_REGS,MCASP_PIN_AXR(MCASP_XSER_TX));
% @! {9 W* y: {% lMcASPPinDirInputSet(SOC_MCASP_0_CTRL_REGS, MCASP_PIN_AFSX
! f, ^: _  Q; g1 ^9 w# i| MCASP_PIN_ACLKX5 A" n3 ^" U6 Z/ A
| MCASP_PIN_AHCLKX" x$ z2 }! ], @: z
| MCASP_PIN_AXR(MCASP_XSER_RX));
/* Enable error interrupts for McASP */+ a" e8 k( m, z6 T9 x
McASPTxIntEnable(SOC_MCASP_0_CTRL_REGS, MCASP_TX_DMAERROR
% t, _) f. I7 L& z! p| MCASP_TX_CLKFAIL & p3 H, {' Q8 s) [* f
| MCASP_TX_SYNCERROR
: n) v+ f3 D2 S2 [| MCASP_TX_UNDERRUN);
McASPRxIntEnable(SOC_MCASP_0_CTRL_REGS, MCASP_RX_DMAERROR ) E' O9 R! \& R5 m
| MCASP_RX_CLKFAIL! Y8 ~9 ]0 U4 K# E% h
| MCASP_RX_SYNCERROR * ?& H, J, N4 t4 K, e/ r
| MCASP_RX_OVERRUN);
" K" k- w6 y3 o}
static void I2SDataTxRxActivate(void)
. G6 D" T: R) _6 Y; d{7 g5 k, R% e: ~" ~8 \+ R4 z. O. D& w
/* Start the clocks */# {2 V$ Y& u* t7 Z7 J- g
McASPRxClkStart(SOC_MCASP_0_CTRL_REGS, MCASP_RX_CLK_EXTERNAL);( ^0 ]+ I& p" c1 Y
McASPTxClkStart(SOC_MCASP_0_CTRL_REGS, MCASP_TX_CLK_INTERNAL);
/* Enable EDMA for the transfer */( v  R% D/ G+ ~6 L  H8 ^+ x$ o
EDMA3EnableTransfer(SOC_EDMA30CC_0_REGS, EDMA3_CHA_MCASP0_RX,
) ?0 Q2 x# i* O: [# D  oEDMA3_TRIG_MODE_EVENT);$ {- F+ q' |6 {0 U+ ], q4 j
EDMA3EnableTransfer(SOC_EDMA30CC_0_REGS, 0 a6 L. _/ ^" M. X( c* x( f6 t6 _
EDMA3_CHA_MCASP0_TX, EDMA3_TRIG_MODE_EVENT);
/* Activate the serializers */
+ P8 l: U9 a/ nMcASPRxSerActivate(SOC_MCASP_0_CTRL_REGS);$ }. o1 [3 D7 o9 x
McASPTxSerActivate(SOC_MCASP_0_CTRL_REGS);
/* make sure that the XDATA bit is cleared to zero */
( ?+ \6 y/ G) [( Bwhile(McASPTxStatusGet(SOC_MCASP_0_CTRL_REGS) & MCASP_TX_STAT_DATAREADY);
/* Activate the state machines */
4 }6 a5 A1 t( B. Q+ q. MMcASPRxEnable(SOC_MCASP_0_CTRL_REGS);
1 C0 N0 s8 x$ w/ DMcASPTxEnable(SOC_MCASP_0_CTRL_REGS);' k( l) m4 D1 f5 T' C" q5 E$ J# w
}
% W. t; `# h4 K: e1 D' L1 }% K
请问:问题出在哪了,时钟按照这样配是否有错。
另外我看XDATA一直是0,接收的rxbuf0,1,2里有一般全是FFFF一半全是0.
) q% m. N: S0 u* |





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