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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

1

主题

5

帖子

1027

积分

金牌会员

Rank: 6Rank: 6

积分
1027
跳转到指定楼层
楼主
发表于 2015-10-29 09:47:24 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
我的McASP配置分别如下:$ k4 M3 [& Q7 Y1 u# x
管脚的复用设置是:
# E! C# P1 c4 U8 ~void McASPPinMuxSetup(void)& E) o' E, N1 k, o/ U
{( P% b4 I5 c! E& _- S0 w% m
    unsigned int savePinMux = 0;
0 R3 M  ?" V# Q7 C7 C9 S$ s    savePinMux = HWREG(SOC_SYSCFG_0_REGS + SYSCFG0_PINMUX(0)) & \
) C2 o2 j7 s; m7 M$ x! |6 J4 R                       ~(SYSCFG_PINMUX0_PINMUX0_27_24 | \
) O: V. J& v7 y  x                         SYSCFG_PINMUX0_PINMUX0_23_20 | \
; O% ^0 {% ~+ F1 ]8 I                         SYSCFG_PINMUX0_PINMUX0_19_16 | \8 _% r0 J6 O% M+ C1 a" U! n/ n2 R
                         SYSCFG_PINMUX0_PINMUX0_15_12 | \# j! {3 X  n7 T' [+ L* e/ ]
                         SYSCFG_PINMUX0_PINMUX0_11_8 | \
. \7 J* q& j/ c5 o& {, t  g                         SYSCFG_PINMUX0_PINMUX0_7_4 | \- I/ R4 ^% D- I) Q
                         SYSCFG_PINMUX0_PINMUX0_3_0);
* }- h/ i; P& l' u6 S* x% g2 n# |    HWREG(SOC_SYSCFG_0_REGS + SYSCFG0_PINMUX(0)) = \$ b7 m# w  B% ~0 a6 I
         (PINMUX0_MCASP0_AMUTE_ENABLE | PINMUX0_MCASP0_AHCLKX_ENABLE | \
6 |' \  ~) L, a  d          PINMUX0_MCASP0_AHCLKR_ENABLE | PINMUX0_MCASP0_AFSX_ENABLE | \
' H& ]  c/ e( x: Q4 B% f6 ~" R6 ~2 i          PINMUX0_MCASP0_AFSR_ENABLE | PINMUX0_MCASP0_ACLKX_ENABLE | \
5 j* |, k7 L' [* j1 l- k3 @9 ]+ L          PINMUX0_MCASP0_ACLKR_ENABLE | savePinMux);
8 ~/ a% L( @8 t, I. g    savePinMux = HWREG(SOC_SYSCFG_0_REGS + SYSCFG0_PINMUX(1)) & \
0 k2 a% _* g+ v                       ~(SYSCFG_PINMUX1_PINMUX1_19_16 | \/ o8 T: E) u% s* \  m. I
                         SYSCFG_PINMUX1_PINMUX1_15_12 | \
& ]- m* c9 o7 a) [* y                         SYSCFG_PINMUX1_PINMUX1_11_8  | \' A; k/ g; q! z) q
                         SYSCFG_PINMUX1_PINMUX1_7_4   | \& X' K- G+ ^+ v7 C: j3 G
                         SYSCFG_PINMUX1_PINMUX1_23_20 | \8 X' D- \4 k8 D4 S! v; s! u5 x
                         SYSCFG_PINMUX1_PINMUX1_27_24 | \
1 v5 ~3 ~+ s# y2 [1 Q                         SYSCFG_PINMUX1_PINMUX1_31_289 q7 \, u  q, L+ I, ]
                         );  H* N8 A; k/ T. B7 J$ l+ V
    HWREG(SOC_SYSCFG_0_REGS + SYSCFG0_PINMUX(1)) = \
. e7 K+ V. w& I) z- [: v         (PINMUX1_MCASP0_AXR11_ENABLE | \8 }; B0 T9 {# v
          PINMUX1_MCASP0_AXR12_ENABLE | \
5 |! u4 Q: D0 G+ N% G2 v          PINMUX1_MCASP0_AXR13_ENABLE | \
! Z/ @' G3 b, n% z" X+ M          PINMUX1_MCASP0_AXR14_ENABLE | \
4 }( @* u) o: C5 @( x8 x/ v) l          PINMUX1_MCASP0_AXR8_ENABLE  | \' a  E, B- x% \, e; Q
          PINMUX1_MCASP0_AXR9_ENABLE  | \
" Y4 E! a1 N2 |' v3 `2 }          PINMUX1_MCASP0_AXR10_ENABLE | \1 P. t: X- J8 W
          savePinMux);
, u1 O( b; a- B3 p* R}8 a2 f1 R$ v" ^9 I8 @
5 R4 Q9 E3 B* R( O
1.McASPI2SConfigure(); McASP的配置程序如下:* z. O4 b0 J: N/ B' g
static void McASPI2SConfigure(void)
+ j' ^, r: k7 @/ ^* M  j{
+ M8 D. Q3 I' x9 }    McASPRxReset(SOC_MCASP_0_CTRL_REGS);
: y6 Q6 q8 w2 x! o  R7 c    McASPTxReset(SOC_MCASP_0_CTRL_REGS);* t8 ^$ ]0 F4 B1 ~! i) Z5 C1 Z

, m5 l: b) k3 G2 J9 P9 M( _    /* Enable the FIFOs for DMA transfer */! o( z3 ~% K% ^. \
//    McASPReadFifoEnable(SOC_MCASP_0_FIFO_REGS, 6, 1);  M5 n$ a; t) D
//    McASPWriteFifoEnable(SOC_MCASP_0_FIFO_REGS, 1, 1);* R( |& ^5 ?# K- |$ A  k! ~% s2 s
5 e( N, d6 W( p  o; L$ H
    /* Set I2S format in the transmitter/receiver format units */
$ w& \0 }9 ?& x    McASPRxFmtI2SSet(SOC_MCASP_0_CTRL_REGS, WORD_SIZE, SLOT_SIZE,
0 R) Q: O* f( a& _1 N8 z5 a0 }      MCASP_RX_MODE_NON_DMA);
7 F1 A# F6 U" Y    McASPTxFmtI2SSet(SOC_MCASP_0_CTRL_REGS, WORD_SIZE, SLOT_SIZE,. }; j/ `. `/ [1 H6 ~* r6 o
      MCASP_TX_MODE_NON_DMA);! V# R  E$ K$ J: q/ Y, h- f) g; o

' @- m5 E. Q" ^    /* Configure the frame sync. I2S shall work in TDM format with 2 slots */5 r, L0 l0 z; U' O' P9 m9 }
    McASPRxFrameSyncCfg(SOC_MCASP_0_CTRL_REGS, 2, MCASP_RX_FS_WIDTH_WORD, 7 `4 F% z- `. C: @  i4 T# \
                        MCASP_RX_FS_EXT_BEGIN_ON_FALL_EDGE);
$ S& G% Z- _! D    McASPTxFrameSyncCfg(SOC_MCASP_0_CTRL_REGS, 2, MCASP_TX_FS_WIDTH_WORD,
# P0 s4 p% r, b                        MCASP_TX_FS_EXT_BEGIN_ON_RIS_EDGE);9 R& e+ W4 g* \" i/ F: U

6 ^1 I- b1 o6 ^: _, d    /* configure the clock for receiver */
/ E' Q  o/ o+ L. L2 o- [. t; |9 z0 k//    McASPRxClkCfg(SOC_MCASP_0_CTRL_REGS, MCASP_RX_CLK_INTERNAL, 16u, 16u);0 J) ?. T' G% d9 S
    McASPRxClkCfg(SOC_MCASP_0_CTRL_REGS, MCASP_RX_CLK_EXTERNAL, 0, 0);
1 c. {' L1 Y) i! z8 t    McASPRxClkPolaritySet(SOC_MCASP_0_CTRL_REGS, MCASP_RX_CLK_POL_RIS_EDGE);
" Y8 P* P$ p1 k% H# g- P1 D9 R    McASPRxClkCheckConfig(SOC_MCASP_0_CTRL_REGS, MCASP_RX_CLKCHCK_DIV32,
% M2 [8 C& N$ ~8 \# V9 J. b                          0x00, 0xFF);! g/ X, |2 Q" X: x6 j- v' y9 W

! d, o& W( o' ^  k+ ?8 T8 }' M    /* configure the clock for transmitter */
# M& ^7 N6 H  b' n7 p//    HWREG(0x01D000A0) = (0x00001F00);. A9 h5 t3 c$ a. d
//    McASPTxClkCfg(SOC_MCASP_0_CTRL_REGS, MCASP_TX_CLK_INTERNAL, 16u, 16u);8 C! f3 S5 g/ p! O3 a
    McASPTxClkCfg(SOC_MCASP_0_CTRL_REGS, MCASP_TX_CLK_EXTERNAL, 0, 0);
- C" P6 m* |  r  L    McASPTxClkPolaritySet(SOC_MCASP_0_CTRL_REGS, MCASP_TX_CLK_POL_FALL_EDGE);. o3 C" @/ q5 ]* T
    McASPTxClkCheckConfig(SOC_MCASP_0_CTRL_REGS, MCASP_TX_CLKCHCK_DIV32,2 M0 }1 Y( I! o8 b
                            0x00, 0xFF);5 R! L2 Q+ a7 J4 ?: W. w
" I$ ]4 z' x5 K7 s+ @5 Z6 L
    /* Enable synchronization of RX and TX sections  */  
7 H3 L$ W( s# C9 @2 N7 K    McASPTxRxClkSyncEnable(SOC_MCASP_0_CTRL_REGS);
7 I/ B% q& e& G
; b+ e0 Z9 w+ W" ?' m# N0 O    /* Enable the transmitter/receiver slots. I2S uses 2 slots */4 [; r9 Q$ B6 I+ ]! a$ |, [
    McASPRxTimeSlotSet(SOC_MCASP_0_CTRL_REGS, I2S_SLOTS);
. ?1 _& H  O& K& H5 _" \9 u7 K    McASPTxTimeSlotSet(SOC_MCASP_0_CTRL_REGS, I2S_SLOTS);
, V9 {$ q6 P7 h5 E# E! A8 g( D- I5 Y& N8 U# t) F
    /*
+ Z3 h4 H2 i' A5 {% j9 e' Q! o) j    ** Set the serializers, Currently only one serializer is set as$ c1 ^0 _6 U- O' V& K
    ** transmitter and one serializer as receiver.5 {. Q4 v$ m% v* _* W2 o+ {& `
    */7 T8 N: {' T8 E9 S8 g9 g  X" G. u
    McASPSerializerRxSet(SOC_MCASP_0_CTRL_REGS, MCASP_XSER_RX);
% R8 |+ i0 {7 r& x" K* a8 e    McASPSerializerRxSet(SOC_MCASP_0_CTRL_REGS, 13u);
9 R6 D/ {1 `9 u- I$ D    McASPSerializerRxSet(SOC_MCASP_0_CTRL_REGS, 14u);
  f' H) {9 g4 Z  d/ L    McASPSerializerRxSet(SOC_MCASP_0_CTRL_REGS, 8u);
: O( B. \, |4 A" ~    McASPSerializerRxSet(SOC_MCASP_0_CTRL_REGS, 10u);3 v8 Z( F) q: b1 L, w
    McASPSerializerRxSet(SOC_MCASP_0_CTRL_REGS, 11u);
/ V9 S5 B# E1 V9 ^' k7 c4 {& A, x7 @  _
$ F- k1 B3 \  {" z+ C/ N    McASPSerializerTxSet(SOC_MCASP_0_CTRL_REGS, MCASP_XSER_TX);5 A3 j) M* Z/ m! `# o7 z
( {6 n0 I1 ^7 `* Z% [3 r; _1 q* p
    /*8 M" C$ C8 u% b. h# t
    ** Configure the McASP pins - N( s$ k6 X  Y) P/ h- G* o
    ** Input - Frame Sync, Clock and Serializer Rx4 ?' B2 g* J+ t& F
    ** Output - Serializer Tx is connected to the input of the codec % i) o# R! R0 Z- Z! U) B% d8 h+ Y
    */
3 X# @2 `  s# j; C    McASPPinMcASPSet(SOC_MCASP_0_CTRL_REGS, 0xFFFFFFFF);! z: @+ @7 a# g* A: O0 K
    McASPPinDirOutputSet(SOC_MCASP_0_CTRL_REGS,
4 I; |' A/ a5 U, o. S1 F& K. K                                           MCASP_PIN_AXR(MCASP_XSER_TX)
$ w' @3 J& U. H8 N7 S                                         | MCASP_PIN_AMUTE! H+ m0 g' a. |4 D( I. L1 y1 v+ u
                                         );
- E' _3 t1 [' i7 j    McASPPinDirInputSet(SOC_MCASP_0_CTRL_REGS,8 Y3 P$ Y# f  x
                                           MCASP_PIN_AFSX
+ N3 Z$ C! o/ m4 r$ `                                   | MCASP_PIN_AFSR& L7 \2 g% W2 j
                 | MCASP_PIN_AHCLKX5 {/ J  b( f; T) ], e; L
                       | MCASP_PIN_AHCLKR
6 r: n  Z: G7 S2 [. V0 s                       | MCASP_PIN_ACLKX
7 ^5 ~) K& \( b& m' e$ L                       | MCASP_PIN_ACLKR
  \* u% y2 ~) \                                               | MCASP_PIN_AXR(MCASP_XSER_RX)
, q9 b" v, m: a% J! |% n& [& ]# h                                               | MCASP_PIN_AXR(1u<<(13u))
. m! L6 l' ~2 e3 a! {- C                                               | MCASP_PIN_AXR(1u<<(14u))
" ?8 k+ {6 g4 k3 ]2 U                                               | MCASP_PIN_AXR(1u<<(8u))
7 D! V& ?+ O" X7 J; m# k  a                                               | MCASP_PIN_AXR(1u<<(10u)), Z4 C/ E$ ?! r. U
                                               | MCASP_PIN_AXR(1u<<(11u))2 x6 a# B) Y* J8 j9 L: F3 A1 c1 ~
                                               );
; Y+ J" }7 B9 M5 y3 Y7 }2 [
8 C- w& R8 U% m6 y2 I    /* Enable error interrupts for McASP */
& f' H9 r/ {. T9 L! Q    McASPTxIntEnable(SOC_MCASP_0_CTRL_REGS,+ P5 A1 T, M0 {$ q8 o
                                        MCASP_TX_DATAREADY) `, u( c6 x0 E7 z; b2 d* b
                                            | MCASP_TX_CLKFAIL   F- M: u- X  `) o, ]% p9 ?
                                            | MCASP_TX_SYNCERROR
1 k' W9 [  V' A) O6 ~                                            | MCASP_TX_UNDERRUN);
% `$ Q' x3 k! @9 g; F
' n. [! m# [, t+ w    McASPRxIntEnable(SOC_MCASP_0_CTRL_REGS,
/ S. ~7 m' r. `7 z& q                                        MCASP_RX_DATAREADY. D0 O% ^! o: U( Y
                                            | MCASP_RX_CLKFAIL' P4 l% W4 A9 L2 J, p" {! ?1 G/ K
                                            | MCASP_RX_SYNCERROR
9 {6 n% o8 @, a: n0 d1 z$ y                                            | MCASP_RX_OVERRUN);
9 ^# ~: J4 ]9 E! K, F* u% j//MCASP_RX_DMAERROR MCASP_TX_DMAERROR
, [& r, P4 ^, L7 d8 Q3 o5 y0 Q! W. J2 f4 N# z# m
}/ `# U6 T3 ?- u& L# b# y( E) V# L
8 J: \. A0 x' T0 n; J$ _
2.运行完上述配置后激活发送接受I2SDataTxRxActivate(); 遇到这个问题:程序无法跳出红色部分的语句
1 E7 X1 n9 z' T3 O0 K5 P7 Mstatic void I2SDataTxRxActivate(void)
1 R0 R- X% B# g, U# V* T{
* W, `9 P; d6 d# M% D; U    /* Start the clocks */2 I1 K# r$ W" }3 D
    McASPRxClkStart(SOC_MCASP_0_CTRL_REGS, MCASP_RX_CLK_EXTERNAL);
2 {' I. T% o; G, S, }  r% I# s    McASPTxClkStart(SOC_MCASP_0_CTRL_REGS, MCASP_TX_CLK_EXTERNAL);
4 O- k1 N# Y5 G7 H2 H* A$ `3 }4 V8 n4 U$ G* M" h1 n
    /* Enable EDMA for the transfer */
8 `  Y& L/ q8 S3 K//    EDMA3EnableTransfer(SOC_EDMA30CC_0_REGS, EDMA3_CHA_MCASP0_RX,8 ^0 R8 h* P# p1 ^8 u7 K
//                        EDMA3_TRIG_MODE_EVENT);
8 |  }9 m3 Q' ]2 l8 S5 m$ e* ?//    EDMA3EnableTransfer(SOC_EDMA30CC_0_REGS,& s+ J( S) J- ]" q, h
//                        EDMA3_CHA_MCASP0_TX, EDMA3_TRIG_MODE_EVENT);
7 F; c$ g, @3 v: p' [; v5 ~    /* Activate the  serializers */
1 E3 O) [# P6 R  ]  B    McASPRxSerActivate(SOC_MCASP_0_CTRL_REGS);
- T. C6 Q3 i7 {2 I* c% k/ G    McASPTxSerActivate(SOC_MCASP_0_CTRL_REGS);
% y% J7 p/ U- h0 j5 l4 D. C
    /* make sure that the XDATA bit is cleared to zero */
3 m/ W$ \+ g/ ?, P    while(McASPTxStatusGet(SOC_MCASP_0_CTRL_REGS) & MCASP_TX_STAT_DATAREADY);: c- C& \+ a5 n6 ~4 l
    /* Activate the state machines */
; W, m6 V* @0 @/ s% f6 |    McASPRxEnable(SOC_MCASP_0_CTRL_REGS);
. s" X2 u9 I$ q" n$ _: f) h$ X" m! }    McASPTxEnable(SOC_MCASP_0_CTRL_REGS);
5 T4 w: L! j6 ?1 B# e! d; L    McASPTxBufWrite(SOC_MCASP_0_CTRL_REGS, MCASP_XSER_TX, 0);/ N8 N) u  j" B7 H* d1 _
}
  ?  R9 p. y+ m3 Q5 l' L& B7 ~0 U/ C. s8 c0 V0 D* R
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏1 分享淘帖
回复

使用道具 举报

0

主题

184

帖子

1137

积分

QQ游客

积分
1137
沙发
发表于 2015-10-29 17:26:10 | 只看该作者
音频例程的McASP的所有时钟都由外部芯片提供:% G/ N, c5 N8 E" O8 s- W
在音频例程里,
8 n' @3 d9 A3 F* `; V; oMcASP_AHCKLX 外部输入24.576M的时钟,  E1 Q4 n/ [( H% v" o& p
McASP_CLKX由外部输入1.536M的时钟,
5 G- H, ^% a7 C0 I: mMcASP_AFSX有外部输入48k时钟。- M/ P- K* s" l# ^
不能激活McASP是由于McASP_CLKX没有时钟输入,在此引脚提供任意时钟即可通过激活函数。
回复 支持 反对

使用道具 举报

1

主题

5

帖子

1027

积分

金牌会员

Rank: 6Rank: 6

积分
1027
板凳
 楼主| 发表于 2015-10-31 11:40:34 | 只看该作者
Lewis 发表于 2015-10-29 17:26
. [0 t- Z# W" q音频例程的McASP的所有时钟都由外部芯片提供:, T- s. q9 P" g
在音频例程里,* [$ s; }* v. V8 r1 Y# V
McASP_AHCKLX 外部输入24.576M的时钟,
% ?2 V$ }! W: W% x
谢谢啊,应该是你说的原因。我接上外部时钟,激活是通过了。现在到了判断XSTAT里面的状态那里,一直在死循环判断。没法通过,这又是什么原因?
回复 支持 反对

使用道具 举报

1

主题

5

帖子

1027

积分

金牌会员

Rank: 6Rank: 6

积分
1027
地板
 楼主| 发表于 2015-10-31 11:41:37 | 只看该作者
Ming 发表于 2015-10-31 11:40
, v7 I$ g9 L9 p# q# H8 y谢谢啊,应该是你说的原因。我接上外部时钟,激活是通过了。现在到了判断XSTAT里面的状态那里,一直在死 ...

# d6 v4 W0 C; e+ H0 C" K就是这一句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% X" w& d( z0 G) O- M: W6 N# m
音频例程的McASP的所有时钟都由外部芯片提供:$ l, y. ^4 U% T, x2 n! c8 |$ h% A" r
在音频例程里,
; y" S+ k' O9 B- N( C- `1 HMcASP_AHCKLX 外部输入24.576M的时钟,
( V  @* v4 ]; S4 g: U4 O
就是这一句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
! e2 @  Z5 ^5 h. Y, g音频例程的McASP的所有时钟都由外部芯片提供:% U' O# x3 j: N: O8 L" ?
在音频例程里,5 i: x( d' H9 I5 y4 g6 B9 S
McASP_AHCKLX 外部输入24.576M的时钟,

: o. y# Z) Q9 G( ~0 R3 ]9 ^这句while( !(McASPRxStatusGet(SOC_MCASP_0_CTRL_REGS) & MCASP_RX_STAT_DATAREADY));无法通过
回复 支持 反对

使用道具 举报

0

主题

184

帖子

1137

积分

QQ游客

积分
1137
7#
发表于 2015-10-31 21:13:29 | 只看该作者
1、
; H5 i4 j( O$ aMcASP_CLKX 和 McASP_AFSX的时钟倍数要正确, j5 U, o, O/ A0 J5 x& p
2、McASP不支持仿真停止信号,如果加上了软件中断,则后面不能通过此函数。
& i, ^! Y( `) P1 Y$ l) C# x5 S3 I! `: G* C

本帖子中包含更多资源

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

x
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-4-30 08:16 , Processed in 0.045822 second(s), 25 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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