嵌入式开发者社区
标题: MCASP自环配置。 [打印本页]
作者: wapdasta 时间: 2018-11-7 13:28
标题: MCASP自环配置。
我项目上用OMAPL138的板子MCASP的引脚都是链接的FPGA,所以在FPGA这端设置的MCASP自环。把axr0接收到的通过axr1发回去。
部分代码如下
input mcasp_afsx,+ w) q. \2 @4 c3 O
input mcasp_ahclkx,
7 D) y6 y/ u( m! }, o% _( dinput mcasp_aclkx,
+ c, G+ ~ \9 L; `- C! P5 s( ainput axr0,. z* L) _8 |+ e; @, A& }6 C
6 `; o/ V, M3 Q3 N( m2 [
output mcasp_afsr,: P: l0 Y- G/ n$ T# d
output mcasp_ahclkr,) v) d9 D( b3 @3 C
output mcasp_aclkr,
8 G: |' r7 w& ?output axr1,
4 ^7 ?% ~6 O' C' u5 h! }* V
assign mcasp_afsr = mcasp_afsx;, [2 L/ p( s8 U5 C) F- D
assign mcasp_aclkr = mcasp_aclkx; o8 Y9 Q J. X4 M$ f
assign mcasp_ahclkr = mcasp_ahclkx;
4 b% U9 G/ O4 l$ D' S. ^assign axr1 = axr0;
6 J! w% x q( l: N m
$ m/ q3 J" D" h/ V1 e3 I在OMAPL138这端,通过axr0接口发固定的数,axr1接收。
在配置MACASP的时候,发送全部取内部时钟,接收全部取外部时钟。
一直循环发送,但是接收不到。在FPGA端也没有看到时钟和信号的波形。
部分代码如下,关于edma3的部分未做变化。
$ i2 P2 \4 G) C' Q: A& cstatic void McASPI2SConfigure(void)
' _: a3 {" C4 V- `. z{ Z- c0 ^* H- Q4 E* I- ^* h/ a
McASPRxReset(SOC_MCASP_0_CTRL_REGS);3 T N0 `& P6 M% I+ F5 I
McASPTxReset(SOC_MCASP_0_CTRL_REGS);
/* Enable the FIFOs for DMA transfer */+ @3 ^/ x4 n, q1 N- h
McASPReadFifoEnable(SOC_MCASP_0_FIFO_REGS, 1, 1);
8 n( N# l1 p8 CMcASPWriteFifoEnable(SOC_MCASP_0_FIFO_REGS, 1, 1);
/* Set I2S format in the transmitter/receiver format units */5 j3 u" [; H+ X
McASPRxFmtI2SSet(SOC_MCASP_0_CTRL_REGS, WORD_SIZE, SLOT_SIZE,
$ d4 e4 I, e- M9 O V; g( UMCASP_RX_MODE_DMA);
: N" d' e* ^0 p2 d6 y- lMcASPTxFmtI2SSet(SOC_MCASP_0_CTRL_REGS, WORD_SIZE, SLOT_SIZE,
% Q, Y4 M+ Q& I8 f' FMCASP_TX_MODE_DMA);
/* Configure the frame sync. I2S shall work in TDM format with 2 slots */" A" y( ]- o+ l( D. w# ]# ^; m! s% q
McASPRxFrameSyncCfg(SOC_MCASP_0_CTRL_REGS, 2, MCASP_RX_FS_WIDTH_WORD, * N! t0 K- V: h- b9 @( { Q
MCASP_RX_FS_EXT_BEGIN_ON_FALL_EDGE);% ^: a0 w5 `/ G) A3 c5 B, a; O- {
McASPTxFrameSyncCfg(SOC_MCASP_0_CTRL_REGS, 2, MCASP_TX_FS_WIDTH_WORD,
! B7 J! ?% d& sMCASP_TX_FS_INT_BEGIN_ON_RIS_EDGE);
/* configure the clock for receiver */1 {! q- V5 s' x; X
McASPRxClkCfg(SOC_MCASP_0_CTRL_REGS, MCASP_RX_CLK_EXTERNAL, 0, 0);
& B; B2 ~, l( EMcASPRxClkPolaritySet(SOC_MCASP_0_CTRL_REGS, MCASP_RX_CLK_POL_RIS_EDGE);
" l( L* y9 k6 @) ~3 vMcASPRxClkCheckConfig(SOC_MCASP_0_CTRL_REGS, MCASP_RX_CLKCHCK_DIV32,( w. M& {* n* \3 ~! w6 O
0x00, 0xFF);
/* configure the clock for transmitter */
/ B! K" }) l/ M5 O/ s% PMcASPTxClkCfg(SOC_MCASP_0_CTRL_REGS, MCASP_TX_CLK_INTERNAL, 11, 1);
6 U, ?* q. t a4 n* W& W3 GMcASPTxClkPolaritySet(SOC_MCASP_0_CTRL_REGS, MCASP_TX_CLK_POL_FALL_EDGE);
8 S+ n! W' ]; }' d; [0 s: UMcASPTxClkCheckConfig(SOC_MCASP_0_CTRL_REGS, MCASP_TX_CLKCHCK_DIV32,
, g- [ y2 m! M3 ^0x00, 0xFF);0 q( V& d0 h# F) M$ \% u
5 D3 C# \5 U( C* n' D" C
/* Enable synchronization of RX and TX sections */ 4 ^& n' P8 g {- Y! r3 A, B
McASPTxRxClkSyncEnable(SOC_MCASP_0_CTRL_REGS);
/* Enable the transmitter/receiver slots. I2S uses 2 slots */& x$ h; r8 j1 L# T% u$ l; c* D, j
McASPRxTimeSlotSet(SOC_MCASP_0_CTRL_REGS, I2S_SLOTS);
; ~! c( Q0 |2 c$ f3 U. y7 u$ V$ GMcASPTxTimeSlotSet(SOC_MCASP_0_CTRL_REGS, I2S_SLOTS);
/*. i7 c5 r, p8 N% m, R' m
** Set the serializers, Currently only one serializer is set as
8 H' ]/ y: o. |" l" e# o9 _& ?5 A* T d** transmitter and one serializer as receiver.) l7 B7 L% U$ B# {. ]7 I
*/0 K- u% ~9 a& ?% d
McASPSerializerRxSet(SOC_MCASP_0_CTRL_REGS, MCASP_XSER_RX);
/ l- B6 D# z: j4 `! MMcASPSerializerTxSet(SOC_MCASP_0_CTRL_REGS, MCASP_XSER_TX);
/** L) q" G" ~: d. D: h, x" k
** Configure the McASP pins 9 Y9 K# n; x* z. t' g t- [
** Input - Frame Sync, Clock and Serializer Rx
; A% b1 |* f& F** Output - Serializer Tx is connected to the input of the codec x# ~7 r) W. d: p
*/- G* Q4 n6 k. u2 E+ i/ O1 F7 L
McASPPinMcASPSet(SOC_MCASP_0_CTRL_REGS, 0xFFFFFFFF);; z- ~, V9 A- L6 m9 z
McASPPinDirOutputSet(SOC_MCASP_0_CTRL_REGS,MCASP_PIN_AXR(MCASP_XSER_TX));
. O: f8 Y7 x# U1 q% C" |" W4 ZMcASPPinDirInputSet(SOC_MCASP_0_CTRL_REGS, MCASP_PIN_AFSX
% s1 K" l, \5 M0 u| MCASP_PIN_ACLKX ~* g9 H# L, T. ?) i; x9 ^( y
| MCASP_PIN_AHCLKX
* M% T1 H2 c! N8 c4 ?$ I7 a| MCASP_PIN_AXR(MCASP_XSER_RX));
/* Enable error interrupts for McASP */
* w2 C3 N$ c$ h+ WMcASPTxIntEnable(SOC_MCASP_0_CTRL_REGS, MCASP_TX_DMAERROR , e2 x% s0 j* A" A, s R
| MCASP_TX_CLKFAIL
0 R* n. R) S' z8 c' b/ ?& y. }% t| MCASP_TX_SYNCERROR. K3 L# B, i' S7 m
| MCASP_TX_UNDERRUN);
McASPRxIntEnable(SOC_MCASP_0_CTRL_REGS, MCASP_RX_DMAERROR ' Q5 i, ^ s. a/ O0 C
| MCASP_RX_CLKFAIL
5 R0 ]' N \: K. ]| MCASP_RX_SYNCERROR 9 R, l. ? X' f% X
| MCASP_RX_OVERRUN);
( r. V: H9 J8 a% x}
static void I2SDataTxRxActivate(void)6 b4 T7 _2 O' d7 U$ n% F2 v' a
{
V! q4 m3 ~- `- F& [3 V! S. Y, u6 @/* Start the clocks */
7 s6 U1 X d9 [+ ?McASPRxClkStart(SOC_MCASP_0_CTRL_REGS, MCASP_RX_CLK_EXTERNAL);3 b4 O; S9 F, n9 w6 \
McASPTxClkStart(SOC_MCASP_0_CTRL_REGS, MCASP_TX_CLK_INTERNAL);
/* Enable EDMA for the transfer */% r1 X# D' o$ l* X. l. V
EDMA3EnableTransfer(SOC_EDMA30CC_0_REGS, EDMA3_CHA_MCASP0_RX,
* c0 u; y% W) {EDMA3_TRIG_MODE_EVENT);: x$ ]3 \, G) @' i" o
EDMA3EnableTransfer(SOC_EDMA30CC_0_REGS, ) |: D7 w/ U, d; m5 I
EDMA3_CHA_MCASP0_TX, EDMA3_TRIG_MODE_EVENT);
/* Activate the serializers */' t ^; K$ k, y4 O) D+ o
McASPRxSerActivate(SOC_MCASP_0_CTRL_REGS);
" i, d5 z+ J a0 LMcASPTxSerActivate(SOC_MCASP_0_CTRL_REGS);
/* make sure that the XDATA bit is cleared to zero */4 V! h7 _' { X* b" h6 p
while(McASPTxStatusGet(SOC_MCASP_0_CTRL_REGS) & MCASP_TX_STAT_DATAREADY);
/* Activate the state machines *// [; v5 v$ B- r! s$ M7 H/ |- U
McASPRxEnable(SOC_MCASP_0_CTRL_REGS);
: Q( |& w* n$ j; |McASPTxEnable(SOC_MCASP_0_CTRL_REGS);* z6 R* Z: I# o
}
3 V; i* Y! G6 l5 Z6 H4 c+ I请问:问题出在哪了,时钟按照这样配是否有错。
另外我看XDATA一直是0,接收的rxbuf0,1,2里有一般全是FFFF一半全是0.
" d4 t/ y% l9 u8 p9 q
| 欢迎光临 嵌入式开发者社区 (https://www.51ele.net/) |
Powered by Discuz! X3.4 |