嵌入式开发者社区

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

作者: wapdasta    时间: 2018-11-7 13:28
标题: MCASP自环配置。
我项目上用OMAPL138的板子MCASP的引脚都是链接的FPGA,所以在FPGA这端设置的MCASP自环。把axr0接收到的通过axr1发回去。
部分代码如下
input mcasp_afsx,; u$ X3 [; K3 P
input mcasp_ahclkx,
" Y3 G0 q7 f) M% C5 |input mcasp_aclkx,
# X* a& v) E- Cinput axr0,9 R4 M! j7 l4 e
& X+ k. S, n  a1 ^7 R- R5 B
output mcasp_afsr,
/ b7 F4 y9 Y, ^$ g2 _output mcasp_ahclkr,
4 M) j/ [' l: V! v# |; ^+ V8 w5 youtput mcasp_aclkr,+ D% W; i8 t% P
output axr1,' L$ j) R8 h! K7 W1 o6 T( t
assign mcasp_afsr = mcasp_afsx;
" p+ r: w6 J/ N! cassign mcasp_aclkr = mcasp_aclkx;, D+ u( w# J- e6 ?8 x
assign mcasp_ahclkr = mcasp_ahclkx;8 ]6 w* h0 N, F/ e% c  F8 u
assign axr1 = axr0;

9 y+ J0 n; v- s8 ~# k
; U" `* ^0 s. }% V& \5 D
在OMAPL138这端,通过axr0接口发固定的数,axr1接收。
在配置MACASP的时候,发送全部取内部时钟,接收全部取外部时钟。
一直循环发送,但是接收不到。在FPGA端也没有看到时钟和信号的波形。
部分代码如下,关于edma3的部分未做变化。
0 C+ F# t* Q6 j  C/ ^- {
static void McASPI2SConfigure(void)
7 b0 H" e; ~5 ~' j% s0 W{) C% X& V* N7 ]5 [* C/ v/ j
McASPRxReset(SOC_MCASP_0_CTRL_REGS);
5 f! }  f9 U1 c2 ^& zMcASPTxReset(SOC_MCASP_0_CTRL_REGS);
/* Enable the FIFOs for DMA transfer */
7 O' {7 Q) D, L" {! {3 n- t1 zMcASPReadFifoEnable(SOC_MCASP_0_FIFO_REGS, 1, 1);
2 F1 l; z  k5 b. A- \6 t! O4 yMcASPWriteFifoEnable(SOC_MCASP_0_FIFO_REGS, 1, 1);
/* Set I2S format in the transmitter/receiver format units */
  r$ ?) w0 M3 ]' T+ UMcASPRxFmtI2SSet(SOC_MCASP_0_CTRL_REGS, WORD_SIZE, SLOT_SIZE,  u! g3 B( Q/ j! X5 G7 \& e. L
MCASP_RX_MODE_DMA);
, l9 O' |! o* i0 i0 u* F$ YMcASPTxFmtI2SSet(SOC_MCASP_0_CTRL_REGS, WORD_SIZE, SLOT_SIZE,
; @1 A0 G% r+ a& _8 l. H5 G0 e. HMCASP_TX_MODE_DMA);
/* Configure the frame sync. I2S shall work in TDM format with 2 slots */
+ H9 s4 z  i) A7 u2 A$ l( pMcASPRxFrameSyncCfg(SOC_MCASP_0_CTRL_REGS, 2, MCASP_RX_FS_WIDTH_WORD,
1 i6 F9 Z8 Q1 |  O$ Z7 YMCASP_RX_FS_EXT_BEGIN_ON_FALL_EDGE);9 Y6 R9 _& L/ W( V5 h
McASPTxFrameSyncCfg(SOC_MCASP_0_CTRL_REGS, 2, MCASP_TX_FS_WIDTH_WORD,
! p, _# r1 S- G. z9 i% T. pMCASP_TX_FS_INT_BEGIN_ON_RIS_EDGE);
/* configure the clock for receiver */  `3 t! t6 @' N# O8 B
McASPRxClkCfg(SOC_MCASP_0_CTRL_REGS, MCASP_RX_CLK_EXTERNAL, 0, 0);
: D0 @( z, \) v( O8 x) _/ U! JMcASPRxClkPolaritySet(SOC_MCASP_0_CTRL_REGS, MCASP_RX_CLK_POL_RIS_EDGE);
3 V8 ]* n; m  w! Z3 @$ _McASPRxClkCheckConfig(SOC_MCASP_0_CTRL_REGS, MCASP_RX_CLKCHCK_DIV32,! H  n% B8 D* t& `0 O7 m6 Y
0x00, 0xFF);
/* configure the clock for transmitter */
- t& X2 P* x9 C9 {' [. {McASPTxClkCfg(SOC_MCASP_0_CTRL_REGS, MCASP_TX_CLK_INTERNAL, 11, 1);4 d+ k3 B, Z" }! a) G( {! Q' n
McASPTxClkPolaritySet(SOC_MCASP_0_CTRL_REGS, MCASP_TX_CLK_POL_FALL_EDGE);
+ E- d$ Q; q/ J+ h; V) E8 [8 dMcASPTxClkCheckConfig(SOC_MCASP_0_CTRL_REGS, MCASP_TX_CLKCHCK_DIV32,5 o! _+ F! l7 t
0x00, 0xFF);
; D5 p* T# G6 Y4 X" u! C
/ v% B( m( i. P) N7 t2 `/* Enable synchronization of RX and TX sections */
# E' y! Q' o2 h/ `McASPTxRxClkSyncEnable(SOC_MCASP_0_CTRL_REGS);
/* Enable the transmitter/receiver slots. I2S uses 2 slots */2 v6 z( k* o, O
McASPRxTimeSlotSet(SOC_MCASP_0_CTRL_REGS, I2S_SLOTS);
2 c8 |5 b/ D1 W8 SMcASPTxTimeSlotSet(SOC_MCASP_0_CTRL_REGS, I2S_SLOTS);
/*# Q. o( y! _% j# c4 W7 L3 q
** Set the serializers, Currently only one serializer is set as
7 ^$ b8 E* ?+ R& D: \) h/ D** transmitter and one serializer as receiver.6 e) w& i5 r' R9 j% B" G
*/
$ x' A5 l$ I8 a, J" Q) b1 D  iMcASPSerializerRxSet(SOC_MCASP_0_CTRL_REGS, MCASP_XSER_RX);; |$ k( @" I# r5 J" }. c
McASPSerializerTxSet(SOC_MCASP_0_CTRL_REGS, MCASP_XSER_TX);
/*
- z" b# d  D4 ~0 }2 L** Configure the McASP pins ; G6 b8 J) m& D6 L& H& O: |
** Input - Frame Sync, Clock and Serializer Rx
, _3 |* ]: B; u: h& H& N** Output - Serializer Tx is connected to the input of the codec
  ~; }+ n/ ^- K*/% T/ r$ k7 a$ m" w+ d7 }
McASPPinMcASPSet(SOC_MCASP_0_CTRL_REGS, 0xFFFFFFFF);/ B' S8 s! Y7 G
McASPPinDirOutputSet(SOC_MCASP_0_CTRL_REGS,MCASP_PIN_AXR(MCASP_XSER_TX));
+ w! N9 r" J( x: L, ], XMcASPPinDirInputSet(SOC_MCASP_0_CTRL_REGS, MCASP_PIN_AFSX
# J" O  j2 z, A( |; j| MCASP_PIN_ACLKX
% I. u- e4 Q. U. e; D7 w| MCASP_PIN_AHCLKX8 p# f: b( a( D/ l
| MCASP_PIN_AXR(MCASP_XSER_RX));
/* Enable error interrupts for McASP */
% l6 Y6 {5 Q0 Z; MMcASPTxIntEnable(SOC_MCASP_0_CTRL_REGS, MCASP_TX_DMAERROR
( ~- V" i. H) H# O* P* J9 e| MCASP_TX_CLKFAIL
0 o' S8 p4 T# b8 Q( a: A) E| MCASP_TX_SYNCERROR
5 e' @) }1 G4 |8 C6 r9 j% t| MCASP_TX_UNDERRUN);
McASPRxIntEnable(SOC_MCASP_0_CTRL_REGS, MCASP_RX_DMAERROR
( u& V. @0 d/ x, y0 u- F( e5 X| MCASP_RX_CLKFAIL
$ e! _* G- Z/ w1 K/ S; ^  k| MCASP_RX_SYNCERROR 1 w# l: {3 c5 z* z* u
| MCASP_RX_OVERRUN);
% \3 H. V# j  [1 x* V8 o}
static void I2SDataTxRxActivate(void)% |* F! I4 z. y% ~) _) f' f. d
{
9 u7 v7 S, H5 `/ j* |5 S/* Start the clocks */( ]. d2 \) M; P! M
McASPRxClkStart(SOC_MCASP_0_CTRL_REGS, MCASP_RX_CLK_EXTERNAL);. w0 `/ T# P, H/ j, @: l
McASPTxClkStart(SOC_MCASP_0_CTRL_REGS, MCASP_TX_CLK_INTERNAL);
/* Enable EDMA for the transfer */
$ Z5 E5 q0 x' sEDMA3EnableTransfer(SOC_EDMA30CC_0_REGS, EDMA3_CHA_MCASP0_RX,3 p4 ~5 x8 ?2 r- A( I0 ?/ @
EDMA3_TRIG_MODE_EVENT);3 T* g6 j0 E9 k  p+ D7 R3 _
EDMA3EnableTransfer(SOC_EDMA30CC_0_REGS, 2 @6 M3 {' L: u! z  g6 A
EDMA3_CHA_MCASP0_TX, EDMA3_TRIG_MODE_EVENT);
/* Activate the serializers */$ T& @& A5 ]% W# W4 j: o
McASPRxSerActivate(SOC_MCASP_0_CTRL_REGS);) g  g: ^% M4 a
McASPTxSerActivate(SOC_MCASP_0_CTRL_REGS);
/* make sure that the XDATA bit is cleared to zero */
6 [# f5 f5 |" Uwhile(McASPTxStatusGet(SOC_MCASP_0_CTRL_REGS) & MCASP_TX_STAT_DATAREADY);
/* Activate the state machines */
( i6 J) H! g0 NMcASPRxEnable(SOC_MCASP_0_CTRL_REGS);
$ C/ y; `2 _2 }/ G# r: o1 b/ xMcASPTxEnable(SOC_MCASP_0_CTRL_REGS);8 r5 w4 s( F/ U: t3 K
}
2 C- _$ E9 U0 p4 J3 j, m
请问:问题出在哪了,时钟按照这样配是否有错。
另外我看XDATA一直是0,接收的rxbuf0,1,2里有一般全是FFFF一半全是0.
* H  m1 ~& |4 t* t  o; [& K; r





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