嵌入式开发者社区

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

作者: wapdasta    时间: 2018-11-7 13:28
标题: MCASP自环配置。
我项目上用OMAPL138的板子MCASP的引脚都是链接的FPGA,所以在FPGA这端设置的MCASP自环。把axr0接收到的通过axr1发回去。
部分代码如下
input mcasp_afsx,
6 o4 w. T$ n1 F, U3 binput mcasp_ahclkx,
) @8 \7 y# ^7 u# y' Finput mcasp_aclkx,' K2 X: e8 T9 S* \
input axr0,
! k( \9 t# K9 E* t% r. y: `5 h' c4 s" ?- f* I
output mcasp_afsr,
( S7 y! x. L9 m  {) G/ B0 T( {output mcasp_ahclkr,
# G+ C( P  ^  r( n( K# j6 r. aoutput mcasp_aclkr,8 Y5 Y" q0 z/ [7 u/ {
output axr1,; M$ D! ^* e' f6 N& X* K6 _% g1 f
assign mcasp_afsr = mcasp_afsx;# R! U( W5 |- H& V
assign mcasp_aclkr = mcasp_aclkx;  H4 [) x+ |: j! E6 Q5 L1 X) v; ?
assign mcasp_ahclkr = mcasp_ahclkx;
- Z1 _" x# c3 ]  s5 \5 ^assign axr1 = axr0;
0 c  l, U' W, o7 c" q) K

5 y; \4 h. z6 g7 w- E- X( D3 Y
在OMAPL138这端,通过axr0接口发固定的数,axr1接收。
在配置MACASP的时候,发送全部取内部时钟,接收全部取外部时钟。
一直循环发送,但是接收不到。在FPGA端也没有看到时钟和信号的波形。
部分代码如下,关于edma3的部分未做变化。

1 {0 j* O/ e2 g$ T: w2 l
static void McASPI2SConfigure(void)
1 l: J0 q9 w* y9 ^{' ~# i( V- ]( `
McASPRxReset(SOC_MCASP_0_CTRL_REGS);# H& e: [4 {& z# }5 D* s6 _: s
McASPTxReset(SOC_MCASP_0_CTRL_REGS);
/* Enable the FIFOs for DMA transfer */
; p. u* a4 S, J3 K/ P5 nMcASPReadFifoEnable(SOC_MCASP_0_FIFO_REGS, 1, 1);
4 ?2 Q: |, w: T7 B& eMcASPWriteFifoEnable(SOC_MCASP_0_FIFO_REGS, 1, 1);
/* Set I2S format in the transmitter/receiver format units */
: X5 a2 W1 Z( }% `# DMcASPRxFmtI2SSet(SOC_MCASP_0_CTRL_REGS, WORD_SIZE, SLOT_SIZE,
, \' `- k: `! g+ DMCASP_RX_MODE_DMA);
7 j, j6 U. [4 @4 iMcASPTxFmtI2SSet(SOC_MCASP_0_CTRL_REGS, WORD_SIZE, SLOT_SIZE,' _: x' W* J$ _3 r$ c
MCASP_TX_MODE_DMA);
/* Configure the frame sync. I2S shall work in TDM format with 2 slots */
" q8 h7 w$ X1 |1 `5 N4 U9 ~  q8 ZMcASPRxFrameSyncCfg(SOC_MCASP_0_CTRL_REGS, 2, MCASP_RX_FS_WIDTH_WORD, : {$ g! y+ o+ ?9 y- h7 R, P) \
MCASP_RX_FS_EXT_BEGIN_ON_FALL_EDGE);4 Q' W: ]/ S0 z2 q6 k- {4 P
McASPTxFrameSyncCfg(SOC_MCASP_0_CTRL_REGS, 2, MCASP_TX_FS_WIDTH_WORD, . W% V4 _: b+ M3 S
MCASP_TX_FS_INT_BEGIN_ON_RIS_EDGE);
/* configure the clock for receiver */
0 ~/ W! {+ _9 A8 ~7 hMcASPRxClkCfg(SOC_MCASP_0_CTRL_REGS, MCASP_RX_CLK_EXTERNAL, 0, 0);
" w; V* o' b6 z: ^  RMcASPRxClkPolaritySet(SOC_MCASP_0_CTRL_REGS, MCASP_RX_CLK_POL_RIS_EDGE); / p5 U3 t) e4 P" P
McASPRxClkCheckConfig(SOC_MCASP_0_CTRL_REGS, MCASP_RX_CLKCHCK_DIV32,1 E  R$ d, E' a1 {3 t
0x00, 0xFF);
/* configure the clock for transmitter */
/ \  T' O+ ]0 W8 K- W% HMcASPTxClkCfg(SOC_MCASP_0_CTRL_REGS, MCASP_TX_CLK_INTERNAL, 11, 1);
7 f: ?" H: Q( |. ]8 W* Y9 oMcASPTxClkPolaritySet(SOC_MCASP_0_CTRL_REGS, MCASP_TX_CLK_POL_FALL_EDGE); " u+ I$ L3 Q+ e5 q
McASPTxClkCheckConfig(SOC_MCASP_0_CTRL_REGS, MCASP_TX_CLKCHCK_DIV32,
5 V1 ^0 \9 Q7 N9 X  H) s0x00, 0xFF);, h$ |; h- R, a$ H' K; x0 n5 G

+ _) B/ L% O2 Y; P) e) M! V3 ~" X/* Enable synchronization of RX and TX sections */ . d0 x5 o/ ~7 E$ u* m
McASPTxRxClkSyncEnable(SOC_MCASP_0_CTRL_REGS);
/* Enable the transmitter/receiver slots. I2S uses 2 slots */
* C( Z! U3 O0 ^* S7 s% XMcASPRxTimeSlotSet(SOC_MCASP_0_CTRL_REGS, I2S_SLOTS);
4 B2 s8 v1 `8 J# EMcASPTxTimeSlotSet(SOC_MCASP_0_CTRL_REGS, I2S_SLOTS);
/*& ]9 j& c/ h1 z  x
** Set the serializers, Currently only one serializer is set as
8 z$ Z( V0 B7 K3 u% f9 s** transmitter and one serializer as receiver.2 e# Y  O) a6 J1 s
*/8 J( y/ S: i' w$ a5 ?4 V4 Z0 i
McASPSerializerRxSet(SOC_MCASP_0_CTRL_REGS, MCASP_XSER_RX);/ b3 ~& n# l1 m4 {1 F
McASPSerializerTxSet(SOC_MCASP_0_CTRL_REGS, MCASP_XSER_TX);
/*
# x% v- Q% l( }" V* s2 ]** Configure the McASP pins
, H; N" h% i7 P** Input - Frame Sync, Clock and Serializer Rx7 k" k- P) @  D
** Output - Serializer Tx is connected to the input of the codec
4 r0 N" E$ D+ s& N# x*/" V2 L- O! s  K  z- Z/ [; U. H$ X5 s7 \
McASPPinMcASPSet(SOC_MCASP_0_CTRL_REGS, 0xFFFFFFFF);
$ d* s" o9 F  E! E: O5 fMcASPPinDirOutputSet(SOC_MCASP_0_CTRL_REGS,MCASP_PIN_AXR(MCASP_XSER_TX));3 [2 I! Z9 k) N8 U5 ?+ n
McASPPinDirInputSet(SOC_MCASP_0_CTRL_REGS, MCASP_PIN_AFSX
8 I9 [. l9 m8 \, z" Z/ _| MCASP_PIN_ACLKX
- W1 C& S, [6 P% ?| MCASP_PIN_AHCLKX
) i( ~/ v" U+ m7 ]0 R| MCASP_PIN_AXR(MCASP_XSER_RX));
/* Enable error interrupts for McASP */
4 K8 p* c& j: r9 ^9 T! aMcASPTxIntEnable(SOC_MCASP_0_CTRL_REGS, MCASP_TX_DMAERROR 4 y. ~6 M% w9 }
| MCASP_TX_CLKFAIL
' s9 A5 d- E( L| MCASP_TX_SYNCERROR
- u& X+ u. K5 C& S) C| MCASP_TX_UNDERRUN);
McASPRxIntEnable(SOC_MCASP_0_CTRL_REGS, MCASP_RX_DMAERROR
( L+ y' B  h1 D0 l| MCASP_RX_CLKFAIL# |: H7 f. k6 r9 j
| MCASP_RX_SYNCERROR 3 w0 D1 l- I& p* v4 W6 T9 @
| MCASP_RX_OVERRUN);
' v, J8 u9 Q5 V7 e0 ~* b! ~9 a9 B}
static void I2SDataTxRxActivate(void)
$ Q9 Q1 H8 A% l8 v1 @  T{7 ^3 A1 t. r7 X' O+ G' E/ `, S  O  \
/* Start the clocks */
) f" I6 |) z. O) L: Q4 j8 [0 tMcASPRxClkStart(SOC_MCASP_0_CTRL_REGS, MCASP_RX_CLK_EXTERNAL);
( h: X5 l+ N& j% ^McASPTxClkStart(SOC_MCASP_0_CTRL_REGS, MCASP_TX_CLK_INTERNAL);
/* Enable EDMA for the transfer */
" U+ D! F0 A( U1 }* p. S3 pEDMA3EnableTransfer(SOC_EDMA30CC_0_REGS, EDMA3_CHA_MCASP0_RX,% _; W0 F4 k  \, N& p# t. c
EDMA3_TRIG_MODE_EVENT);
3 W/ Y% u9 ]/ _. C/ TEDMA3EnableTransfer(SOC_EDMA30CC_0_REGS, $ ~, H  f. u9 h+ w" N
EDMA3_CHA_MCASP0_TX, EDMA3_TRIG_MODE_EVENT);
/* Activate the serializers */6 j0 c) _$ p0 _  ?  j2 w
McASPRxSerActivate(SOC_MCASP_0_CTRL_REGS);
6 d2 B. j$ F* _0 E+ a7 ]8 \McASPTxSerActivate(SOC_MCASP_0_CTRL_REGS);
/* make sure that the XDATA bit is cleared to zero */" x9 K& X: z2 V" K; {6 }. W
while(McASPTxStatusGet(SOC_MCASP_0_CTRL_REGS) & MCASP_TX_STAT_DATAREADY);
/* Activate the state machines */. a: Z$ c3 ~" m1 e0 y3 A1 t( k
McASPRxEnable(SOC_MCASP_0_CTRL_REGS);( C7 Q5 Z! \/ C3 J
McASPTxEnable(SOC_MCASP_0_CTRL_REGS);
- o" |: P/ F# A( {+ n}

% o; ]  @' p& @' U7 x! v7 t
请问:问题出在哪了,时钟按照这样配是否有错。
另外我看XDATA一直是0,接收的rxbuf0,1,2里有一般全是FFFF一半全是0.
. S2 }1 J1 ~1 Y* x+ g





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