嵌入式开发者社区

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

作者: wapdasta    时间: 2018-11-7 13:28
标题: MCASP自环配置。
我项目上用OMAPL138的板子MCASP的引脚都是链接的FPGA,所以在FPGA这端设置的MCASP自环。把axr0接收到的通过axr1发回去。
部分代码如下
input mcasp_afsx,! k7 F4 I1 q# s. F( q5 N
input mcasp_ahclkx,. `) U" i, U8 z
input mcasp_aclkx,( A3 j4 M" T# u/ ~0 _- G: A
input axr0,
+ n) ~- q2 I* h4 v, H* f1 ?9 ?
& F" G% b4 B% j* v3 Qoutput mcasp_afsr,
, e' H$ J  ^  T8 A. o) Routput mcasp_ahclkr,
5 h. B2 G& d2 A% \. q' T* u* j+ Y. Eoutput mcasp_aclkr,+ [% d5 G; v; ?3 p3 j: P9 D
output axr1,
! p' G8 b5 y: B" ~1 l/ ]" ?
assign mcasp_afsr = mcasp_afsx;
; o  w4 O# f; k' ]0 w7 J: g2 c% Fassign mcasp_aclkr = mcasp_aclkx;
$ ?0 I* g  B( Fassign mcasp_ahclkr = mcasp_ahclkx;
. W& L: F6 _! ^0 L3 ?assign axr1 = axr0;

0 [: u6 _; a* e; i) X; U, e2 u4 u; _0 ~+ h. }- e
在OMAPL138这端,通过axr0接口发固定的数,axr1接收。
在配置MACASP的时候,发送全部取内部时钟,接收全部取外部时钟。
一直循环发送,但是接收不到。在FPGA端也没有看到时钟和信号的波形。
部分代码如下,关于edma3的部分未做变化。

" K. e  r6 k; I+ I+ \/ O  J/ H
static void McASPI2SConfigure(void)
8 j; ~6 e2 H$ s5 I{
) d5 @+ w/ j( t1 C9 R+ G! C% jMcASPRxReset(SOC_MCASP_0_CTRL_REGS);# o% T& t/ `9 s* l% v
McASPTxReset(SOC_MCASP_0_CTRL_REGS);
/* Enable the FIFOs for DMA transfer */
% Q+ q. X, j, k" Z) H( q3 KMcASPReadFifoEnable(SOC_MCASP_0_FIFO_REGS, 1, 1);
5 ]$ k$ c; R* I+ MMcASPWriteFifoEnable(SOC_MCASP_0_FIFO_REGS, 1, 1);
/* Set I2S format in the transmitter/receiver format units */
1 a# ^* ^1 [0 @/ j: [McASPRxFmtI2SSet(SOC_MCASP_0_CTRL_REGS, WORD_SIZE, SLOT_SIZE,+ `( K/ \2 U0 c3 _1 z/ K
MCASP_RX_MODE_DMA);! X- e1 X# ?, A: k7 f0 c5 z
McASPTxFmtI2SSet(SOC_MCASP_0_CTRL_REGS, WORD_SIZE, SLOT_SIZE,; p) f; w5 x3 ~  h  L% w
MCASP_TX_MODE_DMA);
/* Configure the frame sync. I2S shall work in TDM format with 2 slots */3 u/ u& w! D& s  J
McASPRxFrameSyncCfg(SOC_MCASP_0_CTRL_REGS, 2, MCASP_RX_FS_WIDTH_WORD,
7 E: X' m7 Q/ {7 V; `* wMCASP_RX_FS_EXT_BEGIN_ON_FALL_EDGE);+ Q/ m8 X" k4 e4 E) ]
McASPTxFrameSyncCfg(SOC_MCASP_0_CTRL_REGS, 2, MCASP_TX_FS_WIDTH_WORD, ! C, j! a  s0 M; m2 A' _
MCASP_TX_FS_INT_BEGIN_ON_RIS_EDGE);
/* configure the clock for receiver */' s* a7 J+ @5 [& t. `. Z
McASPRxClkCfg(SOC_MCASP_0_CTRL_REGS, MCASP_RX_CLK_EXTERNAL, 0, 0);
' N8 A+ _3 y6 _3 kMcASPRxClkPolaritySet(SOC_MCASP_0_CTRL_REGS, MCASP_RX_CLK_POL_RIS_EDGE); * L' L. G* y- R! B7 l; r0 e
McASPRxClkCheckConfig(SOC_MCASP_0_CTRL_REGS, MCASP_RX_CLKCHCK_DIV32,
$ b* b  V# }- Z* B0x00, 0xFF);
/* configure the clock for transmitter */
3 e1 F' }. m; H2 C8 jMcASPTxClkCfg(SOC_MCASP_0_CTRL_REGS, MCASP_TX_CLK_INTERNAL, 11, 1);
& B3 m* U! R9 R) U' s" L) E6 d# Z% ~McASPTxClkPolaritySet(SOC_MCASP_0_CTRL_REGS, MCASP_TX_CLK_POL_FALL_EDGE); 6 C2 H5 C' B3 w% X
McASPTxClkCheckConfig(SOC_MCASP_0_CTRL_REGS, MCASP_TX_CLKCHCK_DIV32,
1 b) A/ K" P- f/ Y7 ]1 C, o0x00, 0xFF);) m( S( c0 [0 y' S- C: z) h% v
3 L& ~4 H5 D5 D: m# }6 t
/* Enable synchronization of RX and TX sections */
- j2 r# ?3 R& H6 p" a; G) Z, \8 TMcASPTxRxClkSyncEnable(SOC_MCASP_0_CTRL_REGS);
/* Enable the transmitter/receiver slots. I2S uses 2 slots */
* W# ~; a, z( Q2 I- u! NMcASPRxTimeSlotSet(SOC_MCASP_0_CTRL_REGS, I2S_SLOTS);$ [- K: N5 e, X, g7 p6 `7 u
McASPTxTimeSlotSet(SOC_MCASP_0_CTRL_REGS, I2S_SLOTS);
/*
! ]5 L2 X6 r5 L7 f$ ^** Set the serializers, Currently only one serializer is set as
% a: B/ K8 T1 G- _** transmitter and one serializer as receiver.
7 p  b* X& G2 y( I*/
* T7 Z: `  M9 w) D: T3 Q8 HMcASPSerializerRxSet(SOC_MCASP_0_CTRL_REGS, MCASP_XSER_RX);
) x6 I; K- }4 t1 E  p3 rMcASPSerializerTxSet(SOC_MCASP_0_CTRL_REGS, MCASP_XSER_TX);
/*# g1 t7 g% L" K' Q5 K/ x
** Configure the McASP pins 9 d  r9 G+ A1 P- H& H' J6 U
** Input - Frame Sync, Clock and Serializer Rx
5 X) Z3 N9 c# y1 ~** Output - Serializer Tx is connected to the input of the codec 3 T, {9 e- \( b- \! B5 b( P; |# L
*/
6 x# @% P( |& T2 Z) ^3 b9 oMcASPPinMcASPSet(SOC_MCASP_0_CTRL_REGS, 0xFFFFFFFF);3 I- [6 i1 u- D$ L: ~9 j
McASPPinDirOutputSet(SOC_MCASP_0_CTRL_REGS,MCASP_PIN_AXR(MCASP_XSER_TX));
7 v4 T  j- p! W4 m5 _McASPPinDirInputSet(SOC_MCASP_0_CTRL_REGS, MCASP_PIN_AFSX
' s5 o" _/ A* j) |7 i( g| MCASP_PIN_ACLKX
$ B- v: J: e7 A8 Q! }| MCASP_PIN_AHCLKX* E! P! b- u; _, |/ s2 H6 k
| MCASP_PIN_AXR(MCASP_XSER_RX));
/* Enable error interrupts for McASP */
6 {6 e# l2 b7 w4 GMcASPTxIntEnable(SOC_MCASP_0_CTRL_REGS, MCASP_TX_DMAERROR
4 R. G1 j1 Q; Z| MCASP_TX_CLKFAIL
: n& F* R! y, b4 X6 C; S| MCASP_TX_SYNCERROR
5 W1 ]2 @2 Y1 T. M| MCASP_TX_UNDERRUN);
McASPRxIntEnable(SOC_MCASP_0_CTRL_REGS, MCASP_RX_DMAERROR 2 f# ?9 F  I! N) |! z! U
| MCASP_RX_CLKFAIL
/ n# G0 x9 S+ i3 |6 B0 O| MCASP_RX_SYNCERROR
4 k6 }5 m, N. A7 e, q  }% q| MCASP_RX_OVERRUN);& n0 \+ u2 i  S- `0 S
}
static void I2SDataTxRxActivate(void)# f( ^5 c3 j7 N, `$ V5 v$ A
{
! Z. h) V3 n, g  Z. Q; z3 R& Z/* Start the clocks */& `6 C! @9 w% s2 w/ g
McASPRxClkStart(SOC_MCASP_0_CTRL_REGS, MCASP_RX_CLK_EXTERNAL);
/ I, R  M* G& I" R/ g6 {- eMcASPTxClkStart(SOC_MCASP_0_CTRL_REGS, MCASP_TX_CLK_INTERNAL);
/* Enable EDMA for the transfer */1 ^! \* x6 j2 }: t' r
EDMA3EnableTransfer(SOC_EDMA30CC_0_REGS, EDMA3_CHA_MCASP0_RX,& g- f, X: I/ K6 f) U6 J
EDMA3_TRIG_MODE_EVENT);0 x' X3 }0 K. B
EDMA3EnableTransfer(SOC_EDMA30CC_0_REGS, / M& @* I5 ?. S3 J" O3 {
EDMA3_CHA_MCASP0_TX, EDMA3_TRIG_MODE_EVENT);
/* Activate the serializers */
9 m, m# g9 F0 rMcASPRxSerActivate(SOC_MCASP_0_CTRL_REGS);' a1 s: e- `( {! K, N% u, \
McASPTxSerActivate(SOC_MCASP_0_CTRL_REGS);
/* make sure that the XDATA bit is cleared to zero */$ Q) V0 {% J+ W5 }) {
while(McASPTxStatusGet(SOC_MCASP_0_CTRL_REGS) & MCASP_TX_STAT_DATAREADY);
/* Activate the state machines */
) v' U# B+ m' ~+ |* V$ ^' JMcASPRxEnable(SOC_MCASP_0_CTRL_REGS);
0 d% ]6 X  ?" m& l, zMcASPTxEnable(SOC_MCASP_0_CTRL_REGS);
9 }; t+ a5 t5 Z7 v% T+ ^9 A! p}

9 P7 F9 j9 ?3 u1 `, S
请问:问题出在哪了,时钟按照这样配是否有错。
另外我看XDATA一直是0,接收的rxbuf0,1,2里有一般全是FFFF一半全是0.

2 P, f2 U' K) N* c- ^




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