嵌入式开发者社区

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

作者: wapdasta    时间: 2018-11-7 13:28
标题: MCASP自环配置。
我项目上用OMAPL138的板子MCASP的引脚都是链接的FPGA,所以在FPGA这端设置的MCASP自环。把axr0接收到的通过axr1发回去。
部分代码如下
input mcasp_afsx,
( Z; I" q- r/ ~& uinput mcasp_ahclkx,) c, Z3 P7 o  U, f. l
input mcasp_aclkx,
- x: ]' ~- d5 w% O7 F' _% Qinput axr0,; [4 z) Z9 h5 }; S

  [6 `  I7 j0 o5 [& ?3 @output mcasp_afsr,- T; a& n+ u' a+ q' I' O# q/ W
output mcasp_ahclkr,
& R& W3 J. H5 ^+ k* coutput mcasp_aclkr,8 R* R" A+ [0 f6 G: `
output axr1,0 L0 R  `* V; o$ f+ ~* o* U
assign mcasp_afsr = mcasp_afsx;
( K  N1 j6 v5 Massign mcasp_aclkr = mcasp_aclkx;% O3 ^/ N. s' P3 R8 s+ T
assign mcasp_ahclkr = mcasp_ahclkx;
6 y4 ^: S* a+ tassign axr1 = axr0;

8 o! p( e6 t5 v; e
+ _7 U9 ?* S$ R! A/ g$ l4 l
在OMAPL138这端,通过axr0接口发固定的数,axr1接收。
在配置MACASP的时候,发送全部取内部时钟,接收全部取外部时钟。
一直循环发送,但是接收不到。在FPGA端也没有看到时钟和信号的波形。
部分代码如下,关于edma3的部分未做变化。
( j1 m4 F3 N2 k; k% S! G
static void McASPI2SConfigure(void)
7 F, j- u$ H8 y$ g{
6 V( Y- n& w; @3 RMcASPRxReset(SOC_MCASP_0_CTRL_REGS);! _- M$ }  u7 r- Q  h" u; N
McASPTxReset(SOC_MCASP_0_CTRL_REGS);
/* Enable the FIFOs for DMA transfer */, i6 J# L2 A% P4 G/ w' j
McASPReadFifoEnable(SOC_MCASP_0_FIFO_REGS, 1, 1);, O6 p: L& r. ^# ]& [/ M8 K& K
McASPWriteFifoEnable(SOC_MCASP_0_FIFO_REGS, 1, 1);
/* Set I2S format in the transmitter/receiver format units */
5 I% I4 a8 ^9 y$ F. L, d1 x$ T: Z) XMcASPRxFmtI2SSet(SOC_MCASP_0_CTRL_REGS, WORD_SIZE, SLOT_SIZE,
0 ?4 O5 Q3 N1 o' MMCASP_RX_MODE_DMA);  O5 ?) e) d" [
McASPTxFmtI2SSet(SOC_MCASP_0_CTRL_REGS, WORD_SIZE, SLOT_SIZE,# Y, l; n% {& [# v" _
MCASP_TX_MODE_DMA);
/* Configure the frame sync. I2S shall work in TDM format with 2 slots */
6 J% }5 w& @- X; gMcASPRxFrameSyncCfg(SOC_MCASP_0_CTRL_REGS, 2, MCASP_RX_FS_WIDTH_WORD, 1 e& j- J2 T( M( ?! k
MCASP_RX_FS_EXT_BEGIN_ON_FALL_EDGE);% l1 v5 n0 ^3 c, T- m
McASPTxFrameSyncCfg(SOC_MCASP_0_CTRL_REGS, 2, MCASP_TX_FS_WIDTH_WORD,
$ v9 Y" N4 u+ U, t) y+ X. @3 kMCASP_TX_FS_INT_BEGIN_ON_RIS_EDGE);
/* configure the clock for receiver */
* x" x% {2 T* M7 p) nMcASPRxClkCfg(SOC_MCASP_0_CTRL_REGS, MCASP_RX_CLK_EXTERNAL, 0, 0);
- S$ m: `- N# w$ @McASPRxClkPolaritySet(SOC_MCASP_0_CTRL_REGS, MCASP_RX_CLK_POL_RIS_EDGE);
2 o+ W; K  f& x9 F: u* {McASPRxClkCheckConfig(SOC_MCASP_0_CTRL_REGS, MCASP_RX_CLKCHCK_DIV32,$ m0 Q2 f6 J/ s5 E! K, `
0x00, 0xFF);
/* configure the clock for transmitter */
( \, I( ?) r  u* rMcASPTxClkCfg(SOC_MCASP_0_CTRL_REGS, MCASP_TX_CLK_INTERNAL, 11, 1);/ Z3 B: ~$ V: A" z
McASPTxClkPolaritySet(SOC_MCASP_0_CTRL_REGS, MCASP_TX_CLK_POL_FALL_EDGE);
. l4 K% e4 n, L! {$ @$ dMcASPTxClkCheckConfig(SOC_MCASP_0_CTRL_REGS, MCASP_TX_CLKCHCK_DIV32,
0 C) W+ X1 o" D3 i" u, v0x00, 0xFF);
" \7 _+ u) b1 ]$ Y
3 w9 a! x$ V' G( z( ]; H# q5 q3 u/ e/* Enable synchronization of RX and TX sections */   `+ H. B$ S: r
McASPTxRxClkSyncEnable(SOC_MCASP_0_CTRL_REGS);
/* Enable the transmitter/receiver slots. I2S uses 2 slots */
4 A: |' A/ L. N( U6 e. L- d) oMcASPRxTimeSlotSet(SOC_MCASP_0_CTRL_REGS, I2S_SLOTS);1 h2 N. g# ^7 P& p& ]: q4 J
McASPTxTimeSlotSet(SOC_MCASP_0_CTRL_REGS, I2S_SLOTS);
/*4 v. F* T; b& c7 V8 p
** Set the serializers, Currently only one serializer is set as
2 f: u3 j( O  D; a, W** transmitter and one serializer as receiver.
/ D$ y: T5 M: v) R* i0 X*/7 G: v6 M* {! }+ u/ {: S  w
McASPSerializerRxSet(SOC_MCASP_0_CTRL_REGS, MCASP_XSER_RX);
" c4 H# Y3 C0 u5 \7 F+ PMcASPSerializerTxSet(SOC_MCASP_0_CTRL_REGS, MCASP_XSER_TX);
/*
7 v2 X7 j) u9 @/ P** Configure the McASP pins 3 i, R! V1 e( t1 V5 p& N
** Input - Frame Sync, Clock and Serializer Rx
  h7 O9 C' M9 {; G6 l** Output - Serializer Tx is connected to the input of the codec
. }0 M/ j' ?3 Z+ c*/
  n/ t8 T- z$ ?3 v; l, e/ zMcASPPinMcASPSet(SOC_MCASP_0_CTRL_REGS, 0xFFFFFFFF);
8 E- m# h3 F3 l7 r# yMcASPPinDirOutputSet(SOC_MCASP_0_CTRL_REGS,MCASP_PIN_AXR(MCASP_XSER_TX));
' [8 ~# ^& a+ @# t5 vMcASPPinDirInputSet(SOC_MCASP_0_CTRL_REGS, MCASP_PIN_AFSX
' Z1 b  K5 l. O/ t6 k" M: F| MCASP_PIN_ACLKX6 ^1 L0 h" E" B$ s( h4 B2 \
| MCASP_PIN_AHCLKX
& p# l3 B/ x8 q% X| MCASP_PIN_AXR(MCASP_XSER_RX));
/* Enable error interrupts for McASP */: R+ k$ x; t1 L/ i0 {1 c5 Y/ q
McASPTxIntEnable(SOC_MCASP_0_CTRL_REGS, MCASP_TX_DMAERROR
0 d$ L$ a+ n, G: ]| MCASP_TX_CLKFAIL 2 i0 \) Y3 J; d( i7 V. K
| MCASP_TX_SYNCERROR. s: o% J! J/ j. G5 c7 S/ y0 S/ _( m" ?
| MCASP_TX_UNDERRUN);
McASPRxIntEnable(SOC_MCASP_0_CTRL_REGS, MCASP_RX_DMAERROR
& H; d5 X; M5 z! H' F| MCASP_RX_CLKFAIL
% D+ J; h9 j/ x; j: [| MCASP_RX_SYNCERROR 7 m; ~* J7 t6 Z- d& G' |
| MCASP_RX_OVERRUN);
. C$ P3 F$ ~. \8 Y9 B}
static void I2SDataTxRxActivate(void)  q, \, R- k. F2 M- @6 D
{% C7 m' E  ^+ w5 _9 \
/* Start the clocks */6 I4 Y4 d. F3 o, |
McASPRxClkStart(SOC_MCASP_0_CTRL_REGS, MCASP_RX_CLK_EXTERNAL);! E/ o1 \: Y) q: x
McASPTxClkStart(SOC_MCASP_0_CTRL_REGS, MCASP_TX_CLK_INTERNAL);
/* Enable EDMA for the transfer */
2 L2 d1 `2 V- h$ {) ]5 R( |EDMA3EnableTransfer(SOC_EDMA30CC_0_REGS, EDMA3_CHA_MCASP0_RX,
6 U# k  d. U  J1 s- y- J1 D* OEDMA3_TRIG_MODE_EVENT);& L. @2 J9 o- }1 x5 c1 m6 \
EDMA3EnableTransfer(SOC_EDMA30CC_0_REGS,
0 M  k  l+ _1 c* gEDMA3_CHA_MCASP0_TX, EDMA3_TRIG_MODE_EVENT);
/* Activate the serializers */
* ~2 C0 N% ~3 |McASPRxSerActivate(SOC_MCASP_0_CTRL_REGS);
9 L4 f9 L3 p" A# v" E* B, fMcASPTxSerActivate(SOC_MCASP_0_CTRL_REGS);
/* make sure that the XDATA bit is cleared to zero */$ @: n6 q# h/ F# }$ w, _- m5 M2 E
while(McASPTxStatusGet(SOC_MCASP_0_CTRL_REGS) & MCASP_TX_STAT_DATAREADY);
/* Activate the state machines */2 N8 d$ r. J$ z, q
McASPRxEnable(SOC_MCASP_0_CTRL_REGS);
; k( J+ Y1 y) K' w& M$ {, R9 ~McASPTxEnable(SOC_MCASP_0_CTRL_REGS);
" `0 T& [& p4 P: b# t}

. N3 P7 P4 b2 Y; T( b4 o5 W' K
请问:问题出在哪了,时钟按照这样配是否有错。
另外我看XDATA一直是0,接收的rxbuf0,1,2里有一般全是FFFF一半全是0.

8 i5 g/ L+ O8 c1 E" c; a5 M




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