嵌入式开发者社区

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

作者: wapdasta    时间: 2018-11-7 13:28
标题: MCASP自环配置。
我项目上用OMAPL138的板子MCASP的引脚都是链接的FPGA,所以在FPGA这端设置的MCASP自环。把axr0接收到的通过axr1发回去。
部分代码如下
input mcasp_afsx,$ t8 E4 C6 c+ S" ]
input mcasp_ahclkx,
7 x3 H$ U# t" x/ c1 p, E; Sinput mcasp_aclkx,( U$ G  w3 f; j$ f7 T+ a
input axr0,
: O7 a$ o/ _+ ]' x* z- r' m
) n7 x# K! O0 b! t. H2 ?! \output mcasp_afsr,3 e! J2 m9 Y+ q) a+ ^
output mcasp_ahclkr,! d& o% m0 Q4 J6 k; L  e8 T
output mcasp_aclkr,- J$ U7 N+ O; e* r; S, c
output axr1,
9 g# Z: g: M6 `- O* Y) _
assign mcasp_afsr = mcasp_afsx;
& F, z' _+ R# ^4 V; Oassign mcasp_aclkr = mcasp_aclkx;
  c9 ?, m- Z2 N$ dassign mcasp_ahclkr = mcasp_ahclkx;: k' [6 f- {8 J5 P6 E2 e" P) p( t+ N
assign axr1 = axr0;
9 Y1 b3 F3 }* }% {. k4 _
6 y2 M0 Z% Y4 x3 R6 i$ ~
在OMAPL138这端,通过axr0接口发固定的数,axr1接收。
在配置MACASP的时候,发送全部取内部时钟,接收全部取外部时钟。
一直循环发送,但是接收不到。在FPGA端也没有看到时钟和信号的波形。
部分代码如下,关于edma3的部分未做变化。
7 k9 ]! m7 j$ l9 ~1 e; N. s1 y. A/ ~
static void McASPI2SConfigure(void)
6 K7 H$ j/ K$ t1 s5 g{
; g- e+ h' N: @McASPRxReset(SOC_MCASP_0_CTRL_REGS);1 k5 K3 p, R) @# n, m) W4 L
McASPTxReset(SOC_MCASP_0_CTRL_REGS);
/* Enable the FIFOs for DMA transfer *// l4 u4 o6 }+ E; a
McASPReadFifoEnable(SOC_MCASP_0_FIFO_REGS, 1, 1);
* @6 c0 ?; v6 j% U9 sMcASPWriteFifoEnable(SOC_MCASP_0_FIFO_REGS, 1, 1);
/* Set I2S format in the transmitter/receiver format units */+ h" a5 j: j" H) Y, t: i( ?2 W
McASPRxFmtI2SSet(SOC_MCASP_0_CTRL_REGS, WORD_SIZE, SLOT_SIZE,! W4 H4 V; T$ v9 L7 c
MCASP_RX_MODE_DMA);
3 O( L3 t! t! i8 @" a" iMcASPTxFmtI2SSet(SOC_MCASP_0_CTRL_REGS, WORD_SIZE, SLOT_SIZE,* M2 n6 F% j) o3 ?& ?$ N5 D
MCASP_TX_MODE_DMA);
/* Configure the frame sync. I2S shall work in TDM format with 2 slots */& H1 f' @# M; c
McASPRxFrameSyncCfg(SOC_MCASP_0_CTRL_REGS, 2, MCASP_RX_FS_WIDTH_WORD,
0 W) t  w% }% A8 gMCASP_RX_FS_EXT_BEGIN_ON_FALL_EDGE);5 |3 c( J0 L) ~. R0 l  f  u3 f5 n/ E
McASPTxFrameSyncCfg(SOC_MCASP_0_CTRL_REGS, 2, MCASP_TX_FS_WIDTH_WORD, % I, B# u2 X4 J9 w3 T
MCASP_TX_FS_INT_BEGIN_ON_RIS_EDGE);
/* configure the clock for receiver */
9 I! H9 j/ V9 u7 v* ^McASPRxClkCfg(SOC_MCASP_0_CTRL_REGS, MCASP_RX_CLK_EXTERNAL, 0, 0);$ l- b5 \1 {' d2 C8 p( M, H0 [* h& S
McASPRxClkPolaritySet(SOC_MCASP_0_CTRL_REGS, MCASP_RX_CLK_POL_RIS_EDGE); 1 h0 x" ~$ ~" Z( B5 D" S5 T
McASPRxClkCheckConfig(SOC_MCASP_0_CTRL_REGS, MCASP_RX_CLKCHCK_DIV32,3 a: y  H2 q% Q0 P% @. c6 x: F
0x00, 0xFF);
/* configure the clock for transmitter */
$ f# H# {2 w7 d: Y8 ^" VMcASPTxClkCfg(SOC_MCASP_0_CTRL_REGS, MCASP_TX_CLK_INTERNAL, 11, 1);! N( ^) S9 a" S9 J5 d$ N4 b, k
McASPTxClkPolaritySet(SOC_MCASP_0_CTRL_REGS, MCASP_TX_CLK_POL_FALL_EDGE); " }3 O( U+ J7 g
McASPTxClkCheckConfig(SOC_MCASP_0_CTRL_REGS, MCASP_TX_CLKCHCK_DIV32,
, g4 P2 V. Z6 c0 X6 @, M. p0x00, 0xFF);
3 O- v, K9 W' U  I+ B, m( \5 G, z# P+ c
/* Enable synchronization of RX and TX sections */ ' @6 e7 M# \2 ]8 N. ^7 k
McASPTxRxClkSyncEnable(SOC_MCASP_0_CTRL_REGS);
/* Enable the transmitter/receiver slots. I2S uses 2 slots */
9 Z3 Z9 n4 ~5 |" t% j3 |1 {' oMcASPRxTimeSlotSet(SOC_MCASP_0_CTRL_REGS, I2S_SLOTS);7 W2 A, c: l( ^1 i7 }
McASPTxTimeSlotSet(SOC_MCASP_0_CTRL_REGS, I2S_SLOTS);
/*5 s; T% x3 P+ o) C) ^
** Set the serializers, Currently only one serializer is set as
- G0 c) g' J- N# R: b+ }, a** transmitter and one serializer as receiver.
+ C" v0 I' \. \7 b" ?+ M*/! \' a+ e4 ?  R3 m
McASPSerializerRxSet(SOC_MCASP_0_CTRL_REGS, MCASP_XSER_RX);
, [. b4 W& c, `* d; o& _+ w1 KMcASPSerializerTxSet(SOC_MCASP_0_CTRL_REGS, MCASP_XSER_TX);
/*
% |* m; G. I: ]- }+ Y** Configure the McASP pins : F! J  p( j& e3 |% J5 K1 m3 v
** Input - Frame Sync, Clock and Serializer Rx
2 y; W+ @* ?1 H3 b4 K** Output - Serializer Tx is connected to the input of the codec ; J4 z  X. Q5 p' ?7 D! G
*/+ @- `- X9 i+ p2 q/ l
McASPPinMcASPSet(SOC_MCASP_0_CTRL_REGS, 0xFFFFFFFF);! I7 `% N/ j6 |
McASPPinDirOutputSet(SOC_MCASP_0_CTRL_REGS,MCASP_PIN_AXR(MCASP_XSER_TX));# o+ o  G  X$ Y: _6 R$ L$ M6 G
McASPPinDirInputSet(SOC_MCASP_0_CTRL_REGS, MCASP_PIN_AFSX
' ?' W. E9 S$ d1 l| MCASP_PIN_ACLKX
6 l6 ~  s. q+ J| MCASP_PIN_AHCLKX
0 P4 ^( {8 c8 }3 @* M| MCASP_PIN_AXR(MCASP_XSER_RX));
/* Enable error interrupts for McASP */% U' p" ~3 t& J4 n) m8 S
McASPTxIntEnable(SOC_MCASP_0_CTRL_REGS, MCASP_TX_DMAERROR ' }. E( A+ f7 c+ |5 j
| MCASP_TX_CLKFAIL
/ j; m5 v' K! q3 S/ A0 r" A8 m| MCASP_TX_SYNCERROR! E! J2 L& F7 E7 Z1 q
| MCASP_TX_UNDERRUN);
McASPRxIntEnable(SOC_MCASP_0_CTRL_REGS, MCASP_RX_DMAERROR
1 x0 N) F* w9 A0 O! ~8 M# ]- H| MCASP_RX_CLKFAIL
6 T, K  P# k) S1 d| MCASP_RX_SYNCERROR " R6 l; P+ k: L; c" L& |' j: D( Y
| MCASP_RX_OVERRUN);: @$ s8 H5 [6 ?& p* T: s+ o6 Z; C. |
}
static void I2SDataTxRxActivate(void)) x2 T' k! d0 Q; N
{
8 n5 W- f5 M+ m5 F8 \$ _& k/* Start the clocks */# ]5 c) {+ D/ S/ \" z2 H8 d+ L
McASPRxClkStart(SOC_MCASP_0_CTRL_REGS, MCASP_RX_CLK_EXTERNAL);
0 k5 c$ [! \- h& r' ?McASPTxClkStart(SOC_MCASP_0_CTRL_REGS, MCASP_TX_CLK_INTERNAL);
/* Enable EDMA for the transfer */
* c' e4 I, i# L! X  p6 oEDMA3EnableTransfer(SOC_EDMA30CC_0_REGS, EDMA3_CHA_MCASP0_RX,' C+ t6 w6 g9 Z9 z
EDMA3_TRIG_MODE_EVENT);
6 z/ S7 o; n* _4 m* d  HEDMA3EnableTransfer(SOC_EDMA30CC_0_REGS, 4 J  n" _. m! M2 n% U5 U" ^& n
EDMA3_CHA_MCASP0_TX, EDMA3_TRIG_MODE_EVENT);
/* Activate the serializers */
6 Q2 u, G: P% |6 E  x' T; jMcASPRxSerActivate(SOC_MCASP_0_CTRL_REGS);. t2 U" ]  f' A! d  w1 W4 U0 Z: \4 @) ]
McASPTxSerActivate(SOC_MCASP_0_CTRL_REGS);
/* make sure that the XDATA bit is cleared to zero */
/ W5 R! g# }  D4 z) r- Cwhile(McASPTxStatusGet(SOC_MCASP_0_CTRL_REGS) & MCASP_TX_STAT_DATAREADY);
/* Activate the state machines */0 S9 ]( g8 S6 d" ^
McASPRxEnable(SOC_MCASP_0_CTRL_REGS);3 u, q6 M( z% @  w5 L% R; C
McASPTxEnable(SOC_MCASP_0_CTRL_REGS);! ^) m% M( e7 k
}

0 k5 U- {; u9 K6 _
请问:问题出在哪了,时钟按照这样配是否有错。
另外我看XDATA一直是0,接收的rxbuf0,1,2里有一般全是FFFF一半全是0.

) z  A$ ^) a  V" I/ f# ^$ G* S




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