嵌入式开发者社区

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

作者: wapdasta    时间: 2018-11-7 13:28
标题: MCASP自环配置。
我项目上用OMAPL138的板子MCASP的引脚都是链接的FPGA,所以在FPGA这端设置的MCASP自环。把axr0接收到的通过axr1发回去。
部分代码如下
input mcasp_afsx,
* K2 o" ~3 F5 y! c  Qinput mcasp_ahclkx,
9 K4 ^; p+ R  m# xinput mcasp_aclkx,1 Z6 E% d6 s9 b/ c
input axr0,
0 H' i+ A# U1 T7 T8 W0 B
* B% r: a4 l' a) @: p& f9 }$ V, woutput mcasp_afsr,. ?% v" H2 J) ~, c+ e1 K8 b' Z
output mcasp_ahclkr,. C* b% S% N/ m+ ?3 ~) W
output mcasp_aclkr," m- A9 X" b- c' f0 A; q
output axr1,+ Q: k. t' [2 A( G3 t# E% N( a; b  m
assign mcasp_afsr = mcasp_afsx;
. S3 J5 p% T$ T- y, C+ {. C: @) sassign mcasp_aclkr = mcasp_aclkx;
7 Q0 P% ]1 Z' }+ Passign mcasp_ahclkr = mcasp_ahclkx;
% v$ p4 _5 N/ i" s1 Xassign axr1 = axr0;

, F( G6 V! x# p$ E9 U. h% {
- Z; a$ f& v5 g# X: d1 Q
在OMAPL138这端,通过axr0接口发固定的数,axr1接收。
在配置MACASP的时候,发送全部取内部时钟,接收全部取外部时钟。
一直循环发送,但是接收不到。在FPGA端也没有看到时钟和信号的波形。
部分代码如下,关于edma3的部分未做变化。
& O& I" k# y8 C6 w+ V
static void McASPI2SConfigure(void); B' J2 ^7 s0 Q0 i# S
{, `2 [6 j4 {. u- D# m  h
McASPRxReset(SOC_MCASP_0_CTRL_REGS);2 k$ {, D4 O5 M
McASPTxReset(SOC_MCASP_0_CTRL_REGS);
/* Enable the FIFOs for DMA transfer */' H! C6 n3 h: P% ?
McASPReadFifoEnable(SOC_MCASP_0_FIFO_REGS, 1, 1);2 P, J" X$ l% ~: V1 B7 H
McASPWriteFifoEnable(SOC_MCASP_0_FIFO_REGS, 1, 1);
/* Set I2S format in the transmitter/receiver format units */8 A0 |( H7 ^, G; F& T& w* l
McASPRxFmtI2SSet(SOC_MCASP_0_CTRL_REGS, WORD_SIZE, SLOT_SIZE,3 G: X, @2 s1 v0 U8 S+ K) n
MCASP_RX_MODE_DMA);
, b7 I- ]# y1 w$ |% v* XMcASPTxFmtI2SSet(SOC_MCASP_0_CTRL_REGS, WORD_SIZE, SLOT_SIZE,
. O2 X5 {* c9 l; P* V; O+ \MCASP_TX_MODE_DMA);
/* Configure the frame sync. I2S shall work in TDM format with 2 slots */
& p- {! p- ~1 y5 ^/ \/ D; ^2 ]McASPRxFrameSyncCfg(SOC_MCASP_0_CTRL_REGS, 2, MCASP_RX_FS_WIDTH_WORD, % Z: |" Y+ n  H5 l, z. P
MCASP_RX_FS_EXT_BEGIN_ON_FALL_EDGE);
5 v4 q/ G# b+ X" ~; ?' C& `" yMcASPTxFrameSyncCfg(SOC_MCASP_0_CTRL_REGS, 2, MCASP_TX_FS_WIDTH_WORD, 1 G" s. i7 k) T" ^7 n
MCASP_TX_FS_INT_BEGIN_ON_RIS_EDGE);
/* configure the clock for receiver */
9 x! l6 L4 g0 i* K3 @McASPRxClkCfg(SOC_MCASP_0_CTRL_REGS, MCASP_RX_CLK_EXTERNAL, 0, 0);$ `) |$ o3 ^# d# [% V
McASPRxClkPolaritySet(SOC_MCASP_0_CTRL_REGS, MCASP_RX_CLK_POL_RIS_EDGE);
, @* Y8 B, f, x7 @7 s, qMcASPRxClkCheckConfig(SOC_MCASP_0_CTRL_REGS, MCASP_RX_CLKCHCK_DIV32,9 g8 L% p. p7 v+ w, E
0x00, 0xFF);
/* configure the clock for transmitter */' a3 F1 B) P. I( p4 ^5 Y
McASPTxClkCfg(SOC_MCASP_0_CTRL_REGS, MCASP_TX_CLK_INTERNAL, 11, 1);
  |! |1 _! @$ n, _% N& rMcASPTxClkPolaritySet(SOC_MCASP_0_CTRL_REGS, MCASP_TX_CLK_POL_FALL_EDGE); 5 x( B: x5 [% Z0 r* o$ J  W
McASPTxClkCheckConfig(SOC_MCASP_0_CTRL_REGS, MCASP_TX_CLKCHCK_DIV32,
: W2 \4 T# q* w: c' P& T/ K0x00, 0xFF);# @1 ]) X- @/ d( p$ S/ _9 ~  @
8 |4 e; `- O, R& e0 E, D& Y
/* Enable synchronization of RX and TX sections */ . j' @0 E) A- E4 x. B$ Q
McASPTxRxClkSyncEnable(SOC_MCASP_0_CTRL_REGS);
/* Enable the transmitter/receiver slots. I2S uses 2 slots */4 h' j. H  a) \, ^! b
McASPRxTimeSlotSet(SOC_MCASP_0_CTRL_REGS, I2S_SLOTS);
1 |6 j* L% b3 |: g7 u$ FMcASPTxTimeSlotSet(SOC_MCASP_0_CTRL_REGS, I2S_SLOTS);
/** W3 V1 H& h5 D" P# @: X% S+ [" D
** Set the serializers, Currently only one serializer is set as
2 }) o: h: f! Z8 \7 N, S** transmitter and one serializer as receiver.
8 T# h$ m3 R9 n( R, H* ~/ u*/
# j" n/ H: a: |& \5 [0 IMcASPSerializerRxSet(SOC_MCASP_0_CTRL_REGS, MCASP_XSER_RX);
$ S0 R+ D  f. O* E4 i! w1 T3 ?$ rMcASPSerializerTxSet(SOC_MCASP_0_CTRL_REGS, MCASP_XSER_TX);
/*2 r7 ^( ^& H2 m7 S8 v3 ?  D0 D
** Configure the McASP pins
. s3 l$ t/ e4 Z** Input - Frame Sync, Clock and Serializer Rx
9 O# P( C4 p0 }+ `. v' H' x4 S** Output - Serializer Tx is connected to the input of the codec * ]( L8 R" l% W% \( H( m
*/. N: D- q+ @4 l; t1 `& b/ h- e
McASPPinMcASPSet(SOC_MCASP_0_CTRL_REGS, 0xFFFFFFFF);  b# C; e( T6 z
McASPPinDirOutputSet(SOC_MCASP_0_CTRL_REGS,MCASP_PIN_AXR(MCASP_XSER_TX));! S3 i5 C2 ?( W  f
McASPPinDirInputSet(SOC_MCASP_0_CTRL_REGS, MCASP_PIN_AFSX  C$ _# w# D% m, O9 ^7 ^- e' m) n" m9 Q
| MCASP_PIN_ACLKX
$ P8 r* Q- y/ {+ || MCASP_PIN_AHCLKX
( e5 \7 h3 N3 t4 H6 F| MCASP_PIN_AXR(MCASP_XSER_RX));
/* Enable error interrupts for McASP */
5 f9 [/ _% U1 l- }McASPTxIntEnable(SOC_MCASP_0_CTRL_REGS, MCASP_TX_DMAERROR & a$ ]2 Y3 W/ }( s0 ]
| MCASP_TX_CLKFAIL * |# D, y/ J& `' w# [
| MCASP_TX_SYNCERROR" K1 S5 b* {! b9 |
| MCASP_TX_UNDERRUN);
McASPRxIntEnable(SOC_MCASP_0_CTRL_REGS, MCASP_RX_DMAERROR ( J. l. {4 J( W3 E- |. n) a1 @$ W. j
| MCASP_RX_CLKFAIL; `3 v8 e4 j' i/ j
| MCASP_RX_SYNCERROR
0 `  s% q; Z/ d$ W, i* J# s| MCASP_RX_OVERRUN);1 K, Q5 S. Q: t
}
static void I2SDataTxRxActivate(void)
( s2 D& |* C7 t8 A4 B! L' o{
& x( x; D- U, D  q: [% j/* Start the clocks */
2 A6 ?/ c( J7 ?5 @. W, l1 N$ `$ w, OMcASPRxClkStart(SOC_MCASP_0_CTRL_REGS, MCASP_RX_CLK_EXTERNAL);
& \; W: \! ?2 O" p6 HMcASPTxClkStart(SOC_MCASP_0_CTRL_REGS, MCASP_TX_CLK_INTERNAL);
/* Enable EDMA for the transfer */
% {5 m, z8 n% r* PEDMA3EnableTransfer(SOC_EDMA30CC_0_REGS, EDMA3_CHA_MCASP0_RX,% W7 S/ Q6 y, n& ]1 G. P% N/ d' _' E' |
EDMA3_TRIG_MODE_EVENT);
, Z2 ^% W! T* x- F5 N6 @EDMA3EnableTransfer(SOC_EDMA30CC_0_REGS,
, L5 F3 `% Y& Y/ {  U2 B' p. nEDMA3_CHA_MCASP0_TX, EDMA3_TRIG_MODE_EVENT);
/* Activate the serializers */
' ^! t  b5 z: X3 B8 z3 i! rMcASPRxSerActivate(SOC_MCASP_0_CTRL_REGS);& W! |$ X5 v4 d$ N8 [  R
McASPTxSerActivate(SOC_MCASP_0_CTRL_REGS);
/* make sure that the XDATA bit is cleared to zero */6 G* Q# o1 K# l! v3 h/ f7 s( T1 a
while(McASPTxStatusGet(SOC_MCASP_0_CTRL_REGS) & MCASP_TX_STAT_DATAREADY);
/* Activate the state machines */
/ c* b7 F$ I: H. h6 U# z" M1 MMcASPRxEnable(SOC_MCASP_0_CTRL_REGS);
4 w$ _# O+ `4 ^% _% pMcASPTxEnable(SOC_MCASP_0_CTRL_REGS);
% [1 g5 b; [+ V! Z& q}

7 K6 {. o9 v" E% `2 U
请问:问题出在哪了,时钟按照这样配是否有错。
另外我看XDATA一直是0,接收的rxbuf0,1,2里有一般全是FFFF一半全是0.

0 h. l' D& G* q& g. ?




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