嵌入式开发者社区

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

作者: wapdasta    时间: 2018-11-7 13:28
标题: MCASP自环配置。
我项目上用OMAPL138的板子MCASP的引脚都是链接的FPGA,所以在FPGA这端设置的MCASP自环。把axr0接收到的通过axr1发回去。
部分代码如下
input mcasp_afsx,3 ?, u7 K; C* J5 k- g4 d
input mcasp_ahclkx,
% I2 _8 C) s6 [( A. y, `input mcasp_aclkx,4 x: |* w; O0 f3 U1 @' Z
input axr0,; n* ~7 v3 n' u! p3 M2 L* D& ^. @* D

- q8 o. S0 h5 v6 q! O& ~8 S% @output mcasp_afsr,/ ^2 {# i. }" k( N
output mcasp_ahclkr,, w* K  O! `3 d/ a! K0 Y- B6 `1 |
output mcasp_aclkr,# H/ v! E: @7 _/ [) E4 s
output axr1,1 B! @$ R7 a+ V7 I) V4 H
assign mcasp_afsr = mcasp_afsx;: m) u& G: O) y# ^
assign mcasp_aclkr = mcasp_aclkx;4 V* [' R$ {- f7 \( A) i" b+ E
assign mcasp_ahclkr = mcasp_ahclkx;$ h5 e$ G1 s* r8 A
assign axr1 = axr0;

7 O, g2 Q  d8 f2 [3 Q1 P( k; Q. O$ f" M, {
在OMAPL138这端,通过axr0接口发固定的数,axr1接收。
在配置MACASP的时候,发送全部取内部时钟,接收全部取外部时钟。
一直循环发送,但是接收不到。在FPGA端也没有看到时钟和信号的波形。
部分代码如下,关于edma3的部分未做变化。
9 H) P2 ?' Q- W- C
static void McASPI2SConfigure(void)
$ h. O1 w0 D$ p: q  X{
  p6 B$ O5 H! L( a, F. e! mMcASPRxReset(SOC_MCASP_0_CTRL_REGS);
3 h8 u7 m1 m9 w, M$ L5 T  ~" XMcASPTxReset(SOC_MCASP_0_CTRL_REGS);
/* Enable the FIFOs for DMA transfer */
9 R) y. O8 B4 R0 \. |3 i8 k2 LMcASPReadFifoEnable(SOC_MCASP_0_FIFO_REGS, 1, 1);
2 K- s( J0 {; c2 d0 j% jMcASPWriteFifoEnable(SOC_MCASP_0_FIFO_REGS, 1, 1);
/* Set I2S format in the transmitter/receiver format units */* k- m$ l6 F5 G9 |1 w
McASPRxFmtI2SSet(SOC_MCASP_0_CTRL_REGS, WORD_SIZE, SLOT_SIZE,: U) |- P& q: I! E  u4 D
MCASP_RX_MODE_DMA);" n+ ^  G; A: [2 Y2 D: W" e
McASPTxFmtI2SSet(SOC_MCASP_0_CTRL_REGS, WORD_SIZE, SLOT_SIZE,
& j8 T  h* R7 n2 NMCASP_TX_MODE_DMA);
/* Configure the frame sync. I2S shall work in TDM format with 2 slots */( a6 i# c; q, l/ Y* M1 i1 w
McASPRxFrameSyncCfg(SOC_MCASP_0_CTRL_REGS, 2, MCASP_RX_FS_WIDTH_WORD, ' G  G2 K) m' o, z! x* w
MCASP_RX_FS_EXT_BEGIN_ON_FALL_EDGE);
5 M( b8 @/ t: O/ e. B% B' C0 g/ ZMcASPTxFrameSyncCfg(SOC_MCASP_0_CTRL_REGS, 2, MCASP_TX_FS_WIDTH_WORD, , S! r7 H5 H" H% F; K
MCASP_TX_FS_INT_BEGIN_ON_RIS_EDGE);
/* configure the clock for receiver */6 U# z  i6 T1 W4 ^
McASPRxClkCfg(SOC_MCASP_0_CTRL_REGS, MCASP_RX_CLK_EXTERNAL, 0, 0);
5 m# P) Q' P' M# g- YMcASPRxClkPolaritySet(SOC_MCASP_0_CTRL_REGS, MCASP_RX_CLK_POL_RIS_EDGE);
2 C0 o2 u, R. QMcASPRxClkCheckConfig(SOC_MCASP_0_CTRL_REGS, MCASP_RX_CLKCHCK_DIV32,) ~; b, R6 x' {9 _
0x00, 0xFF);
/* configure the clock for transmitter */  L2 s- u- _* L5 }; ~
McASPTxClkCfg(SOC_MCASP_0_CTRL_REGS, MCASP_TX_CLK_INTERNAL, 11, 1);: |5 l3 ^% Q/ T: P& y
McASPTxClkPolaritySet(SOC_MCASP_0_CTRL_REGS, MCASP_TX_CLK_POL_FALL_EDGE);   L8 U  N+ x/ t5 Y2 I- l( j6 }. I9 n# r
McASPTxClkCheckConfig(SOC_MCASP_0_CTRL_REGS, MCASP_TX_CLKCHCK_DIV32,
: l* [9 ^* ~! m, v( v0x00, 0xFF);
4 H2 f* f: J* M5 N6 i' g3 e
9 D" r* y) f0 K4 P/* Enable synchronization of RX and TX sections */ % y: u( F3 l+ l& a/ @. a# s! k
McASPTxRxClkSyncEnable(SOC_MCASP_0_CTRL_REGS);
/* Enable the transmitter/receiver slots. I2S uses 2 slots */3 H9 o. }. k2 z. n
McASPRxTimeSlotSet(SOC_MCASP_0_CTRL_REGS, I2S_SLOTS);. n" r& P6 d  |1 S8 e0 A: O
McASPTxTimeSlotSet(SOC_MCASP_0_CTRL_REGS, I2S_SLOTS);
/*
9 I, v3 a" {; {' p( T% ]! H. d** Set the serializers, Currently only one serializer is set as- A! u  I! Z9 X9 S3 k& }
** transmitter and one serializer as receiver.6 S% g7 F* S4 M  [/ X* }+ P
*/" J; _3 A( S" n, H% l( H% o0 e
McASPSerializerRxSet(SOC_MCASP_0_CTRL_REGS, MCASP_XSER_RX);2 k. f: }3 ^" r8 V
McASPSerializerTxSet(SOC_MCASP_0_CTRL_REGS, MCASP_XSER_TX);
/*
+ k9 L- S9 O* C% }** Configure the McASP pins
) @* T' r! s, I3 U; Q( Y! @- l% l** Input - Frame Sync, Clock and Serializer Rx( b) Q/ R0 U( ~+ n
** Output - Serializer Tx is connected to the input of the codec $ }: v; P9 M: I$ F, d
*/7 Y) ~6 g7 ~4 h' {
McASPPinMcASPSet(SOC_MCASP_0_CTRL_REGS, 0xFFFFFFFF);- b5 n- ~! P1 }
McASPPinDirOutputSet(SOC_MCASP_0_CTRL_REGS,MCASP_PIN_AXR(MCASP_XSER_TX));0 O1 w9 \& u# h  I+ f- U
McASPPinDirInputSet(SOC_MCASP_0_CTRL_REGS, MCASP_PIN_AFSX
( @3 a. K0 u0 s; F9 j* D| MCASP_PIN_ACLKX
! o% U7 k8 o5 k0 F1 }| MCASP_PIN_AHCLKX/ y1 D2 ^% y6 W: i4 i0 Q
| MCASP_PIN_AXR(MCASP_XSER_RX));
/* Enable error interrupts for McASP */
% p2 m& `/ W, w5 ]" A5 {McASPTxIntEnable(SOC_MCASP_0_CTRL_REGS, MCASP_TX_DMAERROR 2 q) q/ G7 j: u$ p) ]( F
| MCASP_TX_CLKFAIL 3 T1 L( T0 V+ b* {7 Z, B, [# J
| MCASP_TX_SYNCERROR
3 T3 |+ m4 K( d+ B9 g: g8 k. L| MCASP_TX_UNDERRUN);
McASPRxIntEnable(SOC_MCASP_0_CTRL_REGS, MCASP_RX_DMAERROR
5 n8 K6 V& ~, z: Y( ~; J* @| MCASP_RX_CLKFAIL
5 u, L  g% y/ `; l) f# ~| MCASP_RX_SYNCERROR
- h: ^+ v9 w5 n7 p' ^" I, {| MCASP_RX_OVERRUN);
- K; S+ U7 P0 T. l2 P}
static void I2SDataTxRxActivate(void)
5 e# i, G- d6 H/ ?5 G{
. ~6 ?: m& B8 J; x" x7 c/* Start the clocks */# c+ i7 }7 U4 y/ T4 J6 ^
McASPRxClkStart(SOC_MCASP_0_CTRL_REGS, MCASP_RX_CLK_EXTERNAL);3 W" X8 |& `) o  Z3 l
McASPTxClkStart(SOC_MCASP_0_CTRL_REGS, MCASP_TX_CLK_INTERNAL);
/* Enable EDMA for the transfer */
* g) C) u8 m+ P- F2 B9 f5 T! KEDMA3EnableTransfer(SOC_EDMA30CC_0_REGS, EDMA3_CHA_MCASP0_RX,
0 F* j0 L, T" d, _EDMA3_TRIG_MODE_EVENT);
) O- o0 I' v9 p- \8 sEDMA3EnableTransfer(SOC_EDMA30CC_0_REGS,
+ ^1 u; F0 l" _" V. _EDMA3_CHA_MCASP0_TX, EDMA3_TRIG_MODE_EVENT);
/* Activate the serializers */
7 B, {/ B8 ?! o% ?% j, {$ ]McASPRxSerActivate(SOC_MCASP_0_CTRL_REGS);
/ a& ~6 {3 K$ O- n3 F. ~' I( u+ uMcASPTxSerActivate(SOC_MCASP_0_CTRL_REGS);
/* make sure that the XDATA bit is cleared to zero */
" Q& k6 M$ Q1 o! x: X6 Kwhile(McASPTxStatusGet(SOC_MCASP_0_CTRL_REGS) & MCASP_TX_STAT_DATAREADY);
/* Activate the state machines */! k# u1 x; S$ \
McASPRxEnable(SOC_MCASP_0_CTRL_REGS);# J& J! Z/ Y" z& V) o
McASPTxEnable(SOC_MCASP_0_CTRL_REGS);4 u/ Q6 Q) n% E5 a4 G# w
}
/ B/ `" a) F0 f9 c
请问:问题出在哪了,时钟按照这样配是否有错。
另外我看XDATA一直是0,接收的rxbuf0,1,2里有一般全是FFFF一半全是0.

1 f% s; p# e/ i2 B




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