McASP无法通过McASPSeriActivate(); 请帮忙看看问题所在? - OMAP-L138 - 嵌入式开发者社区 - 51ele.net
设为首页收藏本站

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

查看: 8150|回复: 6
打印 上一主题 下一主题

[已解决] McASP无法通过McASPSeriActivate(); 请帮忙看看问题所在?

[复制链接]

1

主题

5

帖子

1027

积分

金牌会员

Rank: 6Rank: 6

积分
1027
跳转到指定楼层
楼主
发表于 2015-10-29 09:47:24 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
我的McASP配置分别如下:$ E4 q: [' L# ~- L5 x7 ^
管脚的复用设置是:
$ d. i" q( {  a+ j! ovoid McASPPinMuxSetup(void)
0 K3 O$ y; U; g, ?( \3 |! R{
( d  ]1 P( S9 [. a1 p, B    unsigned int savePinMux = 0;9 r+ _* F; c; {/ h* S9 |' }! h
    savePinMux = HWREG(SOC_SYSCFG_0_REGS + SYSCFG0_PINMUX(0)) & \
# \. K& N, |/ z, u. f                       ~(SYSCFG_PINMUX0_PINMUX0_27_24 | \  A: Z% g2 u7 _- V2 P  j+ ]
                         SYSCFG_PINMUX0_PINMUX0_23_20 | \
% |/ t* \% \; }2 j- R, v2 e0 z                         SYSCFG_PINMUX0_PINMUX0_19_16 | \  t1 h+ Y& O& L1 i0 G
                         SYSCFG_PINMUX0_PINMUX0_15_12 | \. T' X6 ^7 J8 `9 j
                         SYSCFG_PINMUX0_PINMUX0_11_8 | \
, ~& ]" T6 ^2 o6 e( E                         SYSCFG_PINMUX0_PINMUX0_7_4 | \
: g5 a# D0 g% V% A+ |2 }                         SYSCFG_PINMUX0_PINMUX0_3_0);
" B2 [" x: N4 ^0 U( v    HWREG(SOC_SYSCFG_0_REGS + SYSCFG0_PINMUX(0)) = \
" p2 U9 w% \  j& Q         (PINMUX0_MCASP0_AMUTE_ENABLE | PINMUX0_MCASP0_AHCLKX_ENABLE | \
' o: t- E. `9 G3 C: d          PINMUX0_MCASP0_AHCLKR_ENABLE | PINMUX0_MCASP0_AFSX_ENABLE | \7 S: {7 ?5 E- o9 l2 u! t& n# O" N/ g9 W
          PINMUX0_MCASP0_AFSR_ENABLE | PINMUX0_MCASP0_ACLKX_ENABLE | \
! I  ]" b0 I7 z# M          PINMUX0_MCASP0_ACLKR_ENABLE | savePinMux);$ r0 K1 {! t( `( N: \  _9 k& b$ W
    savePinMux = HWREG(SOC_SYSCFG_0_REGS + SYSCFG0_PINMUX(1)) & \, \3 b* l7 x" ~1 G9 _% r, i: l# W
                       ~(SYSCFG_PINMUX1_PINMUX1_19_16 | \& D- [) Z: N& F1 T5 h7 e
                         SYSCFG_PINMUX1_PINMUX1_15_12 | \
! i5 C3 w: J/ y- d; a                         SYSCFG_PINMUX1_PINMUX1_11_8  | \* K" y! i8 a$ W& B1 [( n" Z$ o
                         SYSCFG_PINMUX1_PINMUX1_7_4   | \
. `2 [. z, ^$ S4 P( }* f                         SYSCFG_PINMUX1_PINMUX1_23_20 | \
4 H' @6 B. i: W  `  J2 u3 @& A                         SYSCFG_PINMUX1_PINMUX1_27_24 | \
" x$ O1 l) K) x- F+ w0 i+ P                         SYSCFG_PINMUX1_PINMUX1_31_28# F8 `3 C8 U) R0 s2 q& A4 W
                         );
! C1 [5 j3 _+ i; p& n5 C    HWREG(SOC_SYSCFG_0_REGS + SYSCFG0_PINMUX(1)) = \. y( z/ @, K; n
         (PINMUX1_MCASP0_AXR11_ENABLE | \1 T% C/ w; W1 \- N4 D/ w# P  @
          PINMUX1_MCASP0_AXR12_ENABLE | \
- j8 z2 _1 {6 X          PINMUX1_MCASP0_AXR13_ENABLE | \: e+ e, Q( n# x- b5 y! s; @
          PINMUX1_MCASP0_AXR14_ENABLE | \
7 z8 d9 Q9 Q) H          PINMUX1_MCASP0_AXR8_ENABLE  | \
) e: V1 a$ q0 {- c2 G8 M          PINMUX1_MCASP0_AXR9_ENABLE  | \
$ ~2 z' O5 d% b* ~4 w          PINMUX1_MCASP0_AXR10_ENABLE | \
5 j5 P9 |5 O8 f, p$ K  }          savePinMux);
2 t: w' j5 z/ {# ^4 y}" B% t" C' D5 E
( i9 l' e' t( R
1.McASPI2SConfigure(); McASP的配置程序如下:
  _. J# ^, X1 `' n. f. q" Lstatic void McASPI2SConfigure(void)
, D: ]# E, t/ p' p0 t# R{+ ^  Z! c, o. a, T$ D2 E$ r
    McASPRxReset(SOC_MCASP_0_CTRL_REGS);( n5 J3 J8 ^7 {5 c
    McASPTxReset(SOC_MCASP_0_CTRL_REGS);
  R! m3 l  E9 v" n( ^2 a
# O% D# R( n, O! j5 d    /* Enable the FIFOs for DMA transfer */
: |* U7 h/ S3 ^4 t! o* E//    McASPReadFifoEnable(SOC_MCASP_0_FIFO_REGS, 6, 1);
$ n9 a0 n' k2 j8 t  H* l//    McASPWriteFifoEnable(SOC_MCASP_0_FIFO_REGS, 1, 1);
' t- b0 }! O1 P2 F. q# a, o) e  `- |7 T$ O
    /* Set I2S format in the transmitter/receiver format units */. R1 f2 l) c4 [2 [8 Q; ]
    McASPRxFmtI2SSet(SOC_MCASP_0_CTRL_REGS, WORD_SIZE, SLOT_SIZE,* i* ]" q: Z- m6 m3 q
      MCASP_RX_MODE_NON_DMA);
- m1 \$ [) G; X# \9 B+ J    McASPTxFmtI2SSet(SOC_MCASP_0_CTRL_REGS, WORD_SIZE, SLOT_SIZE,
7 Q( J  x5 x0 y# Q, y% [      MCASP_TX_MODE_NON_DMA);
3 ^% m( O5 H9 M& E) F* R) B0 |1 l! M3 _
    /* Configure the frame sync. I2S shall work in TDM format with 2 slots */! z0 Q+ y$ i0 L0 X
    McASPRxFrameSyncCfg(SOC_MCASP_0_CTRL_REGS, 2, MCASP_RX_FS_WIDTH_WORD, ; P8 p4 }8 M: p2 D- B* i4 h
                        MCASP_RX_FS_EXT_BEGIN_ON_FALL_EDGE);6 `0 L8 d, K" b5 P9 v
    McASPTxFrameSyncCfg(SOC_MCASP_0_CTRL_REGS, 2, MCASP_TX_FS_WIDTH_WORD,
" Y7 l% R7 P) Z, q% M7 E, x                        MCASP_TX_FS_EXT_BEGIN_ON_RIS_EDGE);
3 ^  A' u% t# L! t0 m& L; U9 Z+ M. `2 g) `
    /* configure the clock for receiver */6 b/ D, G3 m  b
//    McASPRxClkCfg(SOC_MCASP_0_CTRL_REGS, MCASP_RX_CLK_INTERNAL, 16u, 16u);
4 B; I8 L% _" C, A    McASPRxClkCfg(SOC_MCASP_0_CTRL_REGS, MCASP_RX_CLK_EXTERNAL, 0, 0);
8 ^0 |$ E& c+ y4 Q9 s  N4 n' g    McASPRxClkPolaritySet(SOC_MCASP_0_CTRL_REGS, MCASP_RX_CLK_POL_RIS_EDGE);
6 M, {' D" y0 _2 ?3 E: _    McASPRxClkCheckConfig(SOC_MCASP_0_CTRL_REGS, MCASP_RX_CLKCHCK_DIV32,7 O2 n9 v# G4 N& }
                          0x00, 0xFF);
, L/ }# ~2 h  x' I! P8 H8 g0 K; U2 i/ e* P
    /* configure the clock for transmitter */' Y. |# @2 w% A: f
//    HWREG(0x01D000A0) = (0x00001F00);* j* _& g( x/ N# H
//    McASPTxClkCfg(SOC_MCASP_0_CTRL_REGS, MCASP_TX_CLK_INTERNAL, 16u, 16u);
' B2 g* L' K7 y; `9 R. h+ X    McASPTxClkCfg(SOC_MCASP_0_CTRL_REGS, MCASP_TX_CLK_EXTERNAL, 0, 0);1 c; [% m- S1 l0 J
    McASPTxClkPolaritySet(SOC_MCASP_0_CTRL_REGS, MCASP_TX_CLK_POL_FALL_EDGE);
& q  x% @& V& Z4 J! r% J    McASPTxClkCheckConfig(SOC_MCASP_0_CTRL_REGS, MCASP_TX_CLKCHCK_DIV32,
( O2 {6 W4 q! g                            0x00, 0xFF);
9 o  E" c/ D2 l/ h& o* c! i
+ Q6 m5 Y) n! g- P  L7 s% Z% j    /* Enable synchronization of RX and TX sections  */  6 @" V3 Z+ e& |0 A8 s5 n+ I4 d  ~
    McASPTxRxClkSyncEnable(SOC_MCASP_0_CTRL_REGS);# }  b/ t3 n, d  d" f( k
) \) d9 m7 c5 @5 |6 z; Z; C
    /* Enable the transmitter/receiver slots. I2S uses 2 slots */
8 x. u- e1 S3 W& F9 |    McASPRxTimeSlotSet(SOC_MCASP_0_CTRL_REGS, I2S_SLOTS);
' O: I" ?! c: n1 D( r) @& C& i5 U    McASPTxTimeSlotSet(SOC_MCASP_0_CTRL_REGS, I2S_SLOTS);& S; K% p. t/ _, u$ ^/ _

, `1 f+ c  W( a8 e9 _0 }+ Q    /*  p) w% r+ e& t* x5 y
    ** Set the serializers, Currently only one serializer is set as1 m& u7 @+ o* u  W/ z# G6 }
    ** transmitter and one serializer as receiver.2 g9 O. p3 w, c6 I3 ?8 C
    */( S( x% Y" _( ~# k0 c' n
    McASPSerializerRxSet(SOC_MCASP_0_CTRL_REGS, MCASP_XSER_RX);
$ C1 O1 r& T/ j! @; z    McASPSerializerRxSet(SOC_MCASP_0_CTRL_REGS, 13u);
" T" n7 c+ V  U- P& d8 x" B3 f3 Z    McASPSerializerRxSet(SOC_MCASP_0_CTRL_REGS, 14u);7 k& l5 }1 ]/ G; o
    McASPSerializerRxSet(SOC_MCASP_0_CTRL_REGS, 8u);
' [& p4 h9 }! L8 M: b9 W    McASPSerializerRxSet(SOC_MCASP_0_CTRL_REGS, 10u);8 S' k* e9 r7 B: f
    McASPSerializerRxSet(SOC_MCASP_0_CTRL_REGS, 11u);. t9 _5 }0 b& W2 V( @3 d9 I
! c, x9 f+ C7 e! H
    McASPSerializerTxSet(SOC_MCASP_0_CTRL_REGS, MCASP_XSER_TX);
; Q7 |/ u0 D5 C7 O& q
9 o! F. b: \( ]    /*; o1 q) o) @/ l
    ** Configure the McASP pins
! R4 D+ U8 ?, ]) I    ** Input - Frame Sync, Clock and Serializer Rx
9 c3 G  E0 J4 X7 G! F    ** Output - Serializer Tx is connected to the input of the codec % v3 ^0 O2 N# \, i
    */8 R4 q0 v7 N) M& z3 ]
    McASPPinMcASPSet(SOC_MCASP_0_CTRL_REGS, 0xFFFFFFFF);7 X* S# [) G  f( Z
    McASPPinDirOutputSet(SOC_MCASP_0_CTRL_REGS,
# M& T3 o4 O7 f4 X9 _- ?                                           MCASP_PIN_AXR(MCASP_XSER_TX)! P; @2 a" k3 y$ g" \5 q6 ^
                                         | MCASP_PIN_AMUTE
! V; J3 f, Y: Q" b( }4 f                                         );% J) a$ G6 K* f+ i! z9 L
    McASPPinDirInputSet(SOC_MCASP_0_CTRL_REGS,
4 B- ~: q$ F! u# @9 f' M+ N                                           MCASP_PIN_AFSX
: g' P' w( z5 ]' ^/ s9 G                                   | MCASP_PIN_AFSR
& H. O- B3 c2 T+ Z) d% X9 m                 | MCASP_PIN_AHCLKX
+ A4 z4 X- g7 @. u( c                       | MCASP_PIN_AHCLKR
+ X5 J# F* R: b                       | MCASP_PIN_ACLKX
" Q2 V5 p) \0 y                       | MCASP_PIN_ACLKR: b8 n5 H7 H6 {7 B6 ?
                                               | MCASP_PIN_AXR(MCASP_XSER_RX)8 C8 C" V7 m. Y! S
                                               | MCASP_PIN_AXR(1u<<(13u))
" s) \' I% S+ ^9 i+ B7 d; j                                               | MCASP_PIN_AXR(1u<<(14u))5 ?+ H/ _2 N& w8 S0 D% U! j
                                               | MCASP_PIN_AXR(1u<<(8u))& ~' ^1 D: r" d* j
                                               | MCASP_PIN_AXR(1u<<(10u))
# t" N8 w( |4 z+ Y                                               | MCASP_PIN_AXR(1u<<(11u))
9 a( s2 s2 q/ u                                               );
# l' c5 N7 D; ^6 m, B9 O$ h5 V( ~
; I6 S; R$ y8 N+ n    /* Enable error interrupts for McASP */
' M! n  j/ E& X. D& A" t  d    McASPTxIntEnable(SOC_MCASP_0_CTRL_REGS,
, Q- Z0 y6 P. o6 O: s* c* t                                        MCASP_TX_DATAREADY6 Z7 |( u5 P  Q! `& W
                                            | MCASP_TX_CLKFAIL
- t/ t( X% Q0 d7 c                                            | MCASP_TX_SYNCERROR3 N- w2 S& ~0 u. U+ t
                                            | MCASP_TX_UNDERRUN);
/ u5 g  N' ?/ Y6 c$ M$ ]0 J1 D2 P8 o$ f. ]" [8 ]
    McASPRxIntEnable(SOC_MCASP_0_CTRL_REGS,: L4 Z4 O1 m# P7 ^
                                        MCASP_RX_DATAREADY
6 u6 X+ Z% \+ o! p* T9 c, S                                            | MCASP_RX_CLKFAIL
; e* N8 X7 U! o- N2 o9 o0 L                                            | MCASP_RX_SYNCERROR 0 s* k& n3 Z- S( ]" A' y
                                            | MCASP_RX_OVERRUN);
( s! C  u) l2 a" |! }1 a//MCASP_RX_DMAERROR MCASP_TX_DMAERROR
! H3 T% Q- c0 K5 i1 d
# `: |- I9 Z$ c}. f8 L, Z0 }% p' N* [9 _- ~2 j
4 {5 e  {: ~5 c+ H
2.运行完上述配置后激活发送接受I2SDataTxRxActivate(); 遇到这个问题:程序无法跳出红色部分的语句! i* ]  _/ E& q
static void I2SDataTxRxActivate(void)
5 E. v) }3 Z3 p2 E( k{
; J  m5 N( @3 \& N2 k3 Z    /* Start the clocks */
/ ?3 V: g* z  Y$ j% S    McASPRxClkStart(SOC_MCASP_0_CTRL_REGS, MCASP_RX_CLK_EXTERNAL);
' e! h# w4 z, K8 S    McASPTxClkStart(SOC_MCASP_0_CTRL_REGS, MCASP_TX_CLK_EXTERNAL);
" R5 D) n; R* z' `/ q* `" O0 D' m+ W. A& ~/ v) L7 U  \
    /* Enable EDMA for the transfer */
* k+ W4 D6 {$ B+ y! q2 E//    EDMA3EnableTransfer(SOC_EDMA30CC_0_REGS, EDMA3_CHA_MCASP0_RX,  P: A+ Y  J5 S1 e* ~
//                        EDMA3_TRIG_MODE_EVENT);
0 B; b7 A% z6 ?3 o: a3 h//    EDMA3EnableTransfer(SOC_EDMA30CC_0_REGS,9 d5 Q6 P0 G) D+ E' l
//                        EDMA3_CHA_MCASP0_TX, EDMA3_TRIG_MODE_EVENT);* f! y: x2 [7 V  L( L
    /* Activate the  serializers */7 h& @5 W8 l( }/ H  R3 K6 ~8 ?
    McASPRxSerActivate(SOC_MCASP_0_CTRL_REGS);
2 M/ k+ h- {+ s5 S- a# R) F    McASPTxSerActivate(SOC_MCASP_0_CTRL_REGS);
7 A0 y( F3 q% G& N' }
    /* make sure that the XDATA bit is cleared to zero */
! Q: {4 g: h3 C3 I- v2 I! m    while(McASPTxStatusGet(SOC_MCASP_0_CTRL_REGS) & MCASP_TX_STAT_DATAREADY);
( ~) Q/ p# Q! k7 C3 u% ]: `    /* Activate the state machines */: Z, @  f. {+ v
    McASPRxEnable(SOC_MCASP_0_CTRL_REGS);
) ?, B( o7 J8 ~; x1 k* u, O" W    McASPTxEnable(SOC_MCASP_0_CTRL_REGS);
# H8 p4 W6 F5 x    McASPTxBufWrite(SOC_MCASP_0_CTRL_REGS, MCASP_XSER_TX, 0);
8 w: j1 i! n9 U5 z5 A}  `& d2 H, [2 J; P
( c' z  X- X) ~+ }. c0 _
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏1 分享淘帖
回复

使用道具 举报

0

主题

184

帖子

1137

积分

QQ游客

积分
1137
沙发
发表于 2015-10-29 17:26:10 | 只看该作者
音频例程的McASP的所有时钟都由外部芯片提供:
- |' I4 C' A2 R6 f; G在音频例程里,
# {& L) ]4 ^' M' D9 MMcASP_AHCKLX 外部输入24.576M的时钟,
, I2 M6 a2 r) M+ ~1 |9 rMcASP_CLKX由外部输入1.536M的时钟,
& S7 d) j/ e. c* B9 j3 [" sMcASP_AFSX有外部输入48k时钟。
4 N" u6 B5 E6 @& l2 h& C不能激活McASP是由于McASP_CLKX没有时钟输入,在此引脚提供任意时钟即可通过激活函数。
回复 支持 反对

使用道具 举报

1

主题

5

帖子

1027

积分

金牌会员

Rank: 6Rank: 6

积分
1027
板凳
 楼主| 发表于 2015-10-31 11:40:34 | 只看该作者
Lewis 发表于 2015-10-29 17:26% k/ U" V) A( d% e8 [- E- I
音频例程的McASP的所有时钟都由外部芯片提供:# h. G* V; ?" W" T1 ^
在音频例程里,( M+ ?, }2 t" ]8 E$ k0 L7 _8 k
McASP_AHCKLX 外部输入24.576M的时钟,

$ z; X- C( w( {6 l谢谢啊,应该是你说的原因。我接上外部时钟,激活是通过了。现在到了判断XSTAT里面的状态那里,一直在死循环判断。没法通过,这又是什么原因?
回复 支持 反对

使用道具 举报

1

主题

5

帖子

1027

积分

金牌会员

Rank: 6Rank: 6

积分
1027
地板
 楼主| 发表于 2015-10-31 11:41:37 | 只看该作者
Ming 发表于 2015-10-31 11:40
) ~9 y0 h2 `) F9 x6 E谢谢啊,应该是你说的原因。我接上外部时钟,激活是通过了。现在到了判断XSTAT里面的状态那里,一直在死 ...

) p( \8 |, h! b就是这一句while( !(McASPRxStatusGet(SOC_MCASP_0_CTRL_REGS) & MCASP_RX_STAT_DATAREADY));
回复 支持 反对

使用道具 举报

1

主题

5

帖子

1027

积分

金牌会员

Rank: 6Rank: 6

积分
1027
5#
 楼主| 发表于 2015-10-31 11:42:09 | 只看该作者
Lewis 发表于 2015-10-29 17:26! u  i: N% _% Q3 B
音频例程的McASP的所有时钟都由外部芯片提供:, _$ q; E; U! D! B$ p5 L* b6 C
在音频例程里,
% D8 Z8 |; u. X; EMcASP_AHCKLX 外部输入24.576M的时钟,

: g- A1 h" n) c就是这一句while( !(McASPRxStatusGet(SOC_MCASP_0_CTRL_REGS) & MCASP_RX_STAT_DATAREADY));无法通过
回复 支持 反对

使用道具 举报

1

主题

5

帖子

1027

积分

金牌会员

Rank: 6Rank: 6

积分
1027
6#
 楼主| 发表于 2015-10-31 11:42:50 | 只看该作者
Lewis 发表于 2015-10-29 17:26
" G) ]/ {; p5 E& A. D音频例程的McASP的所有时钟都由外部芯片提供:
" F! R* O2 I7 [/ {/ |* u在音频例程里,4 b9 h0 Y; z% |7 e6 M
McASP_AHCKLX 外部输入24.576M的时钟,
) ~$ f) V& |: N- e% y! r
这句while( !(McASPRxStatusGet(SOC_MCASP_0_CTRL_REGS) & MCASP_RX_STAT_DATAREADY));无法通过
回复 支持 反对

使用道具 举报

0

主题

184

帖子

1137

积分

QQ游客

积分
1137
7#
发表于 2015-10-31 21:13:29 | 只看该作者
1、. b' i7 c: J+ @. w% d0 }1 t
McASP_CLKX 和 McASP_AFSX的时钟倍数要正确. u1 o2 v/ x9 L: H9 t. X: k  Z7 Z
2、McASP不支持仿真停止信号,如果加上了软件中断,则后面不能通过此函数。
6 x5 \9 y, s2 N# d8 z' m3 ~9 L
) p0 h! F  x: d' Q

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?立即注册

x
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|手机版|小黑屋|嵌入式开发者社区 ( 粤ICP备15055271号

GMT+8, 2024-6-17 11:29 , Processed in 0.043675 second(s), 24 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

快速回复 返回顶部 返回列表