嵌入式开发者社区

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

作者: wapdasta    时间: 2018-11-7 13:28
标题: MCASP自环配置。
我项目上用OMAPL138的板子MCASP的引脚都是链接的FPGA,所以在FPGA这端设置的MCASP自环。把axr0接收到的通过axr1发回去。
部分代码如下
input mcasp_afsx,/ o, Y: K  @' S. G
input mcasp_ahclkx,
% z' C' E. ]+ p# R- Kinput mcasp_aclkx,
3 `& j/ |( j# y& T6 h8 qinput axr0,* ^3 K* i7 T$ L# ^3 V! S3 `' P6 G

% s' r( V/ p, U6 _6 J/ E& K" w9 F& aoutput mcasp_afsr,
/ y- i0 T+ |, A+ Routput mcasp_ahclkr,
4 s% I7 u& R2 K; r" C. T6 i" I/ toutput mcasp_aclkr,# }0 w' G: w& f& ]! _$ h7 }* v
output axr1,$ p' ^* W& E) J& y9 q2 S
assign mcasp_afsr = mcasp_afsx;
5 u$ n9 D, [' ~' ?1 T- @9 iassign mcasp_aclkr = mcasp_aclkx;/ F) F& }% d2 X# A2 k5 N/ c
assign mcasp_ahclkr = mcasp_ahclkx;' w0 Y  q+ k* E" c
assign axr1 = axr0;

( W: i, s1 ]3 s$ o+ V. }2 J4 R" c" q! f" p- E7 b9 z0 D/ O
在OMAPL138这端,通过axr0接口发固定的数,axr1接收。
在配置MACASP的时候,发送全部取内部时钟,接收全部取外部时钟。
一直循环发送,但是接收不到。在FPGA端也没有看到时钟和信号的波形。
部分代码如下,关于edma3的部分未做变化。

" y4 D- M" {) `0 t# Z4 Q
static void McASPI2SConfigure(void)6 Z  Z8 I4 w: U8 B
{+ W( V: H7 V( M9 {5 Q
McASPRxReset(SOC_MCASP_0_CTRL_REGS);
4 ~4 M/ o5 h. P8 n0 b; L% e: ^5 d8 hMcASPTxReset(SOC_MCASP_0_CTRL_REGS);
/* Enable the FIFOs for DMA transfer */
6 a8 P5 |4 {: Q6 m, q+ K* @McASPReadFifoEnable(SOC_MCASP_0_FIFO_REGS, 1, 1);
! o4 d/ s% p) j1 l+ H. u; h# _McASPWriteFifoEnable(SOC_MCASP_0_FIFO_REGS, 1, 1);
/* Set I2S format in the transmitter/receiver format units */! Q+ q2 U; v8 V9 c
McASPRxFmtI2SSet(SOC_MCASP_0_CTRL_REGS, WORD_SIZE, SLOT_SIZE,% W& Y" E7 C0 z8 i0 K5 ?! L
MCASP_RX_MODE_DMA);9 V$ C3 W; Z! ~3 Z1 a
McASPTxFmtI2SSet(SOC_MCASP_0_CTRL_REGS, WORD_SIZE, SLOT_SIZE,
, [0 h2 ]7 R! ^) I, DMCASP_TX_MODE_DMA);
/* Configure the frame sync. I2S shall work in TDM format with 2 slots */
, H# K5 ^$ O6 S& m. JMcASPRxFrameSyncCfg(SOC_MCASP_0_CTRL_REGS, 2, MCASP_RX_FS_WIDTH_WORD, , W+ L: R, W% G  W" C
MCASP_RX_FS_EXT_BEGIN_ON_FALL_EDGE);6 N( ^. x* R7 H% q; W
McASPTxFrameSyncCfg(SOC_MCASP_0_CTRL_REGS, 2, MCASP_TX_FS_WIDTH_WORD,
: S# Z" W3 D) q3 T8 z% Q: J: pMCASP_TX_FS_INT_BEGIN_ON_RIS_EDGE);
/* configure the clock for receiver */
" J& W5 f- p* k; J5 i+ |McASPRxClkCfg(SOC_MCASP_0_CTRL_REGS, MCASP_RX_CLK_EXTERNAL, 0, 0);0 H8 ?2 P* `5 Z/ Q8 R+ Q( r7 }
McASPRxClkPolaritySet(SOC_MCASP_0_CTRL_REGS, MCASP_RX_CLK_POL_RIS_EDGE); . l3 |- X0 s: a( F7 B8 K
McASPRxClkCheckConfig(SOC_MCASP_0_CTRL_REGS, MCASP_RX_CLKCHCK_DIV32,8 X5 P, O8 d' V2 Q
0x00, 0xFF);
/* configure the clock for transmitter */% x4 d: J: v+ Q  J4 ?
McASPTxClkCfg(SOC_MCASP_0_CTRL_REGS, MCASP_TX_CLK_INTERNAL, 11, 1);( n! I, y& o2 y6 G: |
McASPTxClkPolaritySet(SOC_MCASP_0_CTRL_REGS, MCASP_TX_CLK_POL_FALL_EDGE); ; T# x5 @. d. C' }
McASPTxClkCheckConfig(SOC_MCASP_0_CTRL_REGS, MCASP_TX_CLKCHCK_DIV32,% H2 |) @2 P- b" x* D' k8 B) C
0x00, 0xFF);
; s; Q2 b1 W" n% y$ @& D3 o/ V7 S& _" |8 h! Y
/* Enable synchronization of RX and TX sections */
( k+ s1 J$ k8 ?0 h# bMcASPTxRxClkSyncEnable(SOC_MCASP_0_CTRL_REGS);
/* Enable the transmitter/receiver slots. I2S uses 2 slots */
% `7 T* `6 O+ k; u- q( \- |% SMcASPRxTimeSlotSet(SOC_MCASP_0_CTRL_REGS, I2S_SLOTS);) \9 l- G4 l" O! z
McASPTxTimeSlotSet(SOC_MCASP_0_CTRL_REGS, I2S_SLOTS);
/*
6 [% T7 h! K1 o- N; N# n** Set the serializers, Currently only one serializer is set as# c+ O: u6 p/ U- c, `% q' r( p
** transmitter and one serializer as receiver.0 }' ?6 q1 Y# [+ s, b  L) B
*/0 Q' B1 N" s1 W
McASPSerializerRxSet(SOC_MCASP_0_CTRL_REGS, MCASP_XSER_RX);) Z% n4 c" O$ O7 [7 {1 n1 O
McASPSerializerTxSet(SOC_MCASP_0_CTRL_REGS, MCASP_XSER_TX);
/*8 T. E$ u  q& B0 j6 c/ s
** Configure the McASP pins $ Y. U1 t2 t9 k8 l6 }: U8 B5 ^7 a+ B
** Input - Frame Sync, Clock and Serializer Rx2 U3 p! v) ?! @9 {
** Output - Serializer Tx is connected to the input of the codec 2 t5 L' ]* S6 y8 N! |
*/" d6 x* b) |2 p6 D. G6 c. W/ E
McASPPinMcASPSet(SOC_MCASP_0_CTRL_REGS, 0xFFFFFFFF);
# A% Z1 c4 I- bMcASPPinDirOutputSet(SOC_MCASP_0_CTRL_REGS,MCASP_PIN_AXR(MCASP_XSER_TX));
1 e4 J5 g3 W! A2 f2 ~' p# z- pMcASPPinDirInputSet(SOC_MCASP_0_CTRL_REGS, MCASP_PIN_AFSX. B( d3 c* z$ ~+ K. ^1 g
| MCASP_PIN_ACLKX" s7 g! L' L4 e. D
| MCASP_PIN_AHCLKX
7 _( Z! {7 E! Z2 O" `9 B6 _| MCASP_PIN_AXR(MCASP_XSER_RX));
/* Enable error interrupts for McASP */% k1 }7 X8 B* ]1 |' t- C7 D+ A: d
McASPTxIntEnable(SOC_MCASP_0_CTRL_REGS, MCASP_TX_DMAERROR * H8 A  O! \* a9 c% M( J
| MCASP_TX_CLKFAIL ! S$ ~8 S$ [0 ~6 Z; q! h' {; \* V
| MCASP_TX_SYNCERROR6 R$ ]5 g  v/ g: V9 U
| MCASP_TX_UNDERRUN);
McASPRxIntEnable(SOC_MCASP_0_CTRL_REGS, MCASP_RX_DMAERROR 4 R. w4 E: D/ F+ g2 N7 b
| MCASP_RX_CLKFAIL, U0 ]* n5 p7 Y* r' ^
| MCASP_RX_SYNCERROR
' |/ B( i% ?6 T. r7 }) ]5 [# _| MCASP_RX_OVERRUN);
  D+ w7 m1 ^) Q# t}
static void I2SDataTxRxActivate(void)2 i) P7 e# @+ p' b
{0 W! \/ E. g# l$ P3 r
/* Start the clocks */7 |1 h: A* q! C$ b2 `; y
McASPRxClkStart(SOC_MCASP_0_CTRL_REGS, MCASP_RX_CLK_EXTERNAL);$ _. ~; B8 a+ C7 r
McASPTxClkStart(SOC_MCASP_0_CTRL_REGS, MCASP_TX_CLK_INTERNAL);
/* Enable EDMA for the transfer */# ?  a1 W' \( Z! K- }" v
EDMA3EnableTransfer(SOC_EDMA30CC_0_REGS, EDMA3_CHA_MCASP0_RX,
0 w) ~3 d8 Z  eEDMA3_TRIG_MODE_EVENT);7 W4 t6 J4 R+ {9 y
EDMA3EnableTransfer(SOC_EDMA30CC_0_REGS, 1 W2 G* K8 `* U! y% c
EDMA3_CHA_MCASP0_TX, EDMA3_TRIG_MODE_EVENT);
/* Activate the serializers */3 U+ H" \$ w  B* _
McASPRxSerActivate(SOC_MCASP_0_CTRL_REGS);( c# _: o0 a$ r! }' x, `6 [
McASPTxSerActivate(SOC_MCASP_0_CTRL_REGS);
/* make sure that the XDATA bit is cleared to zero */
/ Q/ `( G4 p2 _  O6 Uwhile(McASPTxStatusGet(SOC_MCASP_0_CTRL_REGS) & MCASP_TX_STAT_DATAREADY);
/* Activate the state machines */- [0 K2 h% _+ m
McASPRxEnable(SOC_MCASP_0_CTRL_REGS);# s& r$ d& G5 e
McASPTxEnable(SOC_MCASP_0_CTRL_REGS);
8 A  X+ M! ~$ f6 Q5 u}
# W* O: s! E& O# {3 {- m# E; g% f
请问:问题出在哪了,时钟按照这样配是否有错。
另外我看XDATA一直是0,接收的rxbuf0,1,2里有一般全是FFFF一半全是0.
- R* n$ z" l( ]





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