嵌入式开发者社区

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

作者: wapdasta    时间: 2018-11-7 13:28
标题: MCASP自环配置。
我项目上用OMAPL138的板子MCASP的引脚都是链接的FPGA,所以在FPGA这端设置的MCASP自环。把axr0接收到的通过axr1发回去。
部分代码如下
input mcasp_afsx,
8 Z* p  p* V5 ]input mcasp_ahclkx,
( r% O3 D, Q  tinput mcasp_aclkx,4 o0 F9 P0 h  F! p# u- ^8 l- @
input axr0,! k( ~0 _1 l1 d1 Q" H% M- C

" f% j9 l6 I! v/ L2 ]' moutput mcasp_afsr,
- {$ |4 C* E3 t: H( w- S4 Ioutput mcasp_ahclkr,
0 d+ M6 ]* e6 l* R1 O: T' P* q% H" Uoutput mcasp_aclkr,) G) n$ N- m; G
output axr1,; W" e1 o6 T/ {' k0 \* a
assign mcasp_afsr = mcasp_afsx;
. k+ A* Y+ s. J5 T: O- L5 d& `% }! uassign mcasp_aclkr = mcasp_aclkx;
! |* ?8 J$ L' E+ g8 b2 y& Oassign mcasp_ahclkr = mcasp_ahclkx;
% m+ N4 A/ N, q4 [. ?3 I( g: [assign axr1 = axr0;
4 b8 S8 C" `- b
& y- @: y; v' o/ }6 b) s
在OMAPL138这端,通过axr0接口发固定的数,axr1接收。
在配置MACASP的时候,发送全部取内部时钟,接收全部取外部时钟。
一直循环发送,但是接收不到。在FPGA端也没有看到时钟和信号的波形。
部分代码如下,关于edma3的部分未做变化。

+ G& b& h: P+ Q. J" A
static void McASPI2SConfigure(void)
6 [: Q% q& m2 I' B$ Z{6 l) m9 w/ j) W; {& s7 W
McASPRxReset(SOC_MCASP_0_CTRL_REGS);2 ^% g( J' D1 ~2 T
McASPTxReset(SOC_MCASP_0_CTRL_REGS);
/* Enable the FIFOs for DMA transfer */
# g1 y" Y5 o) R) h" B7 ^3 IMcASPReadFifoEnable(SOC_MCASP_0_FIFO_REGS, 1, 1);
  j7 ~. a9 o$ y/ C2 bMcASPWriteFifoEnable(SOC_MCASP_0_FIFO_REGS, 1, 1);
/* Set I2S format in the transmitter/receiver format units */
# _, |5 ], p9 }  E* A4 Z# YMcASPRxFmtI2SSet(SOC_MCASP_0_CTRL_REGS, WORD_SIZE, SLOT_SIZE,
2 z5 ^, [) F% U& FMCASP_RX_MODE_DMA);0 i1 I/ D* I8 c
McASPTxFmtI2SSet(SOC_MCASP_0_CTRL_REGS, WORD_SIZE, SLOT_SIZE,
# |2 e; E! T. a, `MCASP_TX_MODE_DMA);
/* Configure the frame sync. I2S shall work in TDM format with 2 slots */
9 Q: _" X/ [5 w+ f  {7 u/ {McASPRxFrameSyncCfg(SOC_MCASP_0_CTRL_REGS, 2, MCASP_RX_FS_WIDTH_WORD, 0 d9 }; }1 X6 I
MCASP_RX_FS_EXT_BEGIN_ON_FALL_EDGE);6 T* Q( o, A4 j
McASPTxFrameSyncCfg(SOC_MCASP_0_CTRL_REGS, 2, MCASP_TX_FS_WIDTH_WORD, . _& W( z* c& h5 p& Z3 S
MCASP_TX_FS_INT_BEGIN_ON_RIS_EDGE);
/* configure the clock for receiver */- I& b5 l1 \5 A  X
McASPRxClkCfg(SOC_MCASP_0_CTRL_REGS, MCASP_RX_CLK_EXTERNAL, 0, 0);
7 S' ?) M% b1 B, aMcASPRxClkPolaritySet(SOC_MCASP_0_CTRL_REGS, MCASP_RX_CLK_POL_RIS_EDGE); . K3 a8 L! B5 W! w3 F* H& ?
McASPRxClkCheckConfig(SOC_MCASP_0_CTRL_REGS, MCASP_RX_CLKCHCK_DIV32,3 j: T, y, i0 @- @
0x00, 0xFF);
/* configure the clock for transmitter */
8 I# \6 B" @$ @- J' l0 W" FMcASPTxClkCfg(SOC_MCASP_0_CTRL_REGS, MCASP_TX_CLK_INTERNAL, 11, 1);
4 B$ B9 |9 u! _; k+ NMcASPTxClkPolaritySet(SOC_MCASP_0_CTRL_REGS, MCASP_TX_CLK_POL_FALL_EDGE); $ h9 I- Z1 X' d1 c# B: O
McASPTxClkCheckConfig(SOC_MCASP_0_CTRL_REGS, MCASP_TX_CLKCHCK_DIV32,
" ^# q, K: |- @& j! l0x00, 0xFF);" z" a2 j9 x( H5 C& k6 v1 q
0 X* c. M/ a5 ?: m% x6 G3 z
/* Enable synchronization of RX and TX sections */ # J$ {# d! ~# s; ]4 w7 I6 |, K: h* u+ o
McASPTxRxClkSyncEnable(SOC_MCASP_0_CTRL_REGS);
/* Enable the transmitter/receiver slots. I2S uses 2 slots */
9 H% l' [. {5 U, qMcASPRxTimeSlotSet(SOC_MCASP_0_CTRL_REGS, I2S_SLOTS);' n& y( j0 |: H
McASPTxTimeSlotSet(SOC_MCASP_0_CTRL_REGS, I2S_SLOTS);
/*% c5 P9 R* m6 c  C
** Set the serializers, Currently only one serializer is set as' x# `3 @% A$ C7 B$ [
** transmitter and one serializer as receiver.' T% r* O4 r8 a0 k/ q
*/8 ]7 P( Q7 V$ r: y: p) \
McASPSerializerRxSet(SOC_MCASP_0_CTRL_REGS, MCASP_XSER_RX);
1 p2 {) Y4 k: f- O: g, I2 }. l: CMcASPSerializerTxSet(SOC_MCASP_0_CTRL_REGS, MCASP_XSER_TX);
/*% ]: Q+ k* v5 F* \7 y6 U
** Configure the McASP pins 1 p, Q  d# x2 H+ p
** Input - Frame Sync, Clock and Serializer Rx. }- N) m* ?% |4 ?5 q! {0 ^6 |
** Output - Serializer Tx is connected to the input of the codec
& k7 I% K# @1 A6 r' [3 P% Z*/
" x. @+ P  y7 Q* ~  Y; A; \McASPPinMcASPSet(SOC_MCASP_0_CTRL_REGS, 0xFFFFFFFF);" I# f& v+ k9 l" m
McASPPinDirOutputSet(SOC_MCASP_0_CTRL_REGS,MCASP_PIN_AXR(MCASP_XSER_TX));
% P3 s+ A* W" fMcASPPinDirInputSet(SOC_MCASP_0_CTRL_REGS, MCASP_PIN_AFSX+ M4 c; I+ k2 B) }2 @
| MCASP_PIN_ACLKX
* ^8 w/ t/ \. b3 k| MCASP_PIN_AHCLKX
8 Y7 |3 x5 Z+ }9 h| MCASP_PIN_AXR(MCASP_XSER_RX));
/* Enable error interrupts for McASP */
2 k$ }/ [) w. r% BMcASPTxIntEnable(SOC_MCASP_0_CTRL_REGS, MCASP_TX_DMAERROR 0 H: O$ o  _8 {8 p/ B+ q3 M/ ]
| MCASP_TX_CLKFAIL
) ~" P# B' K, \- N4 s5 q| MCASP_TX_SYNCERROR
0 h) L9 C2 d7 L3 ~| MCASP_TX_UNDERRUN);
McASPRxIntEnable(SOC_MCASP_0_CTRL_REGS, MCASP_RX_DMAERROR ) m  N! _- m7 Y# @
| MCASP_RX_CLKFAIL5 l* P+ g4 @0 C" Y1 w
| MCASP_RX_SYNCERROR
0 t" M: @- |  j0 \8 Y; f. Z| MCASP_RX_OVERRUN);: M  {, Z" u* [' V/ M
}
static void I2SDataTxRxActivate(void)" p. m9 C7 U6 ^% z" M2 U
{# A( w! d9 z$ K) D, g: [$ a! k' f5 r
/* Start the clocks */* l# j3 t# r3 {, x
McASPRxClkStart(SOC_MCASP_0_CTRL_REGS, MCASP_RX_CLK_EXTERNAL);
4 [8 h/ G& [# `4 Z9 [: bMcASPTxClkStart(SOC_MCASP_0_CTRL_REGS, MCASP_TX_CLK_INTERNAL);
/* Enable EDMA for the transfer */: i- k& ^4 [$ z
EDMA3EnableTransfer(SOC_EDMA30CC_0_REGS, EDMA3_CHA_MCASP0_RX,
* p3 z6 d+ ]& }' @! I0 CEDMA3_TRIG_MODE_EVENT);" M" q: j0 X  B* ]! g" e
EDMA3EnableTransfer(SOC_EDMA30CC_0_REGS,
5 S% c* m% ~1 C+ V: UEDMA3_CHA_MCASP0_TX, EDMA3_TRIG_MODE_EVENT);
/* Activate the serializers */! j+ H4 z* O  O  m7 ?2 _
McASPRxSerActivate(SOC_MCASP_0_CTRL_REGS);0 s5 }( Z* G) l% a' y; Z
McASPTxSerActivate(SOC_MCASP_0_CTRL_REGS);
/* make sure that the XDATA bit is cleared to zero */
( k6 p: n* N# b! T* Uwhile(McASPTxStatusGet(SOC_MCASP_0_CTRL_REGS) & MCASP_TX_STAT_DATAREADY);
/* Activate the state machines */, G4 E+ N; f, k& J* Y+ c
McASPRxEnable(SOC_MCASP_0_CTRL_REGS);
1 ~: V. s: v4 F  @$ x# s+ EMcASPTxEnable(SOC_MCASP_0_CTRL_REGS);
8 k  S, ~, H; r- z7 ]+ X) D+ w}

4 a7 L+ m  Q- l5 f" i: J
请问:问题出在哪了,时钟按照这样配是否有错。
另外我看XDATA一直是0,接收的rxbuf0,1,2里有一般全是FFFF一半全是0.

8 c  S6 t/ Y9 r- I  G4 l  [" ?




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