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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

1

主题

5

帖子

1027

积分

金牌会员

Rank: 6Rank: 6

积分
1027
跳转到指定楼层
楼主
发表于 2015-10-29 09:47:24 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
我的McASP配置分别如下:
( q4 C7 J" N% G# @  l$ Y5 H管脚的复用设置是:; X, R: g4 o8 {. @9 a, Y
void McASPPinMuxSetup(void)
! k- ~) m9 K  r1 q{9 R- i7 `$ G, U& b8 t, N) ~
    unsigned int savePinMux = 0;
1 u# \- Q& p1 \- I. v    savePinMux = HWREG(SOC_SYSCFG_0_REGS + SYSCFG0_PINMUX(0)) & \9 _/ M, B* ]" d7 U" \$ b
                       ~(SYSCFG_PINMUX0_PINMUX0_27_24 | \
5 q: B- n7 }1 A" @                         SYSCFG_PINMUX0_PINMUX0_23_20 | \
8 @: J) b" R# ^. B, D! _+ b                         SYSCFG_PINMUX0_PINMUX0_19_16 | \
/ C, \4 U) v. v2 B                         SYSCFG_PINMUX0_PINMUX0_15_12 | \
9 F% {4 a# l) J                         SYSCFG_PINMUX0_PINMUX0_11_8 | \
: [; n' ~" w% K8 m$ {' ~                         SYSCFG_PINMUX0_PINMUX0_7_4 | \4 g' _* x0 S" a' U
                         SYSCFG_PINMUX0_PINMUX0_3_0);
- x/ x, @; @) D' p    HWREG(SOC_SYSCFG_0_REGS + SYSCFG0_PINMUX(0)) = \
/ ~! r8 |. ]: S         (PINMUX0_MCASP0_AMUTE_ENABLE | PINMUX0_MCASP0_AHCLKX_ENABLE | \, \; m9 c2 u/ ]$ R/ I
          PINMUX0_MCASP0_AHCLKR_ENABLE | PINMUX0_MCASP0_AFSX_ENABLE | \  C; T+ y/ v7 W" ]; j! O2 l# j
          PINMUX0_MCASP0_AFSR_ENABLE | PINMUX0_MCASP0_ACLKX_ENABLE | \
& H8 h* w0 L- `          PINMUX0_MCASP0_ACLKR_ENABLE | savePinMux);
! [7 I7 l  V* l4 [    savePinMux = HWREG(SOC_SYSCFG_0_REGS + SYSCFG0_PINMUX(1)) & \3 j$ s5 Y: u5 A( ]- Y- {- s, t. s
                       ~(SYSCFG_PINMUX1_PINMUX1_19_16 | \& X; M4 \% T; v/ |4 |: D
                         SYSCFG_PINMUX1_PINMUX1_15_12 | \
5 m# V4 \* [7 N                         SYSCFG_PINMUX1_PINMUX1_11_8  | \: J# V6 j2 S5 O+ Y
                         SYSCFG_PINMUX1_PINMUX1_7_4   | \
6 o; C- |  h* H; x4 v                         SYSCFG_PINMUX1_PINMUX1_23_20 | \
6 M" S( a7 b& v1 `' Z/ M                         SYSCFG_PINMUX1_PINMUX1_27_24 | \& u" m" N. b! }" f/ ^/ {
                         SYSCFG_PINMUX1_PINMUX1_31_280 M% R- b" Z. u1 Q# F
                         );5 `  f# {8 p( e( H8 o- v/ j9 k
    HWREG(SOC_SYSCFG_0_REGS + SYSCFG0_PINMUX(1)) = \
4 r. F3 N8 t! {5 y         (PINMUX1_MCASP0_AXR11_ENABLE | \
, x$ c1 D! p- f# Q6 o: L          PINMUX1_MCASP0_AXR12_ENABLE | \! p  S. b! P. s
          PINMUX1_MCASP0_AXR13_ENABLE | \
8 y/ y: Q6 e1 P7 l0 _          PINMUX1_MCASP0_AXR14_ENABLE | \. H" _9 C" Q) P( U, R# X7 n
          PINMUX1_MCASP0_AXR8_ENABLE  | \0 Y5 s# G4 ?5 _" A( C
          PINMUX1_MCASP0_AXR9_ENABLE  | \
  p5 g8 E+ p+ F9 N          PINMUX1_MCASP0_AXR10_ENABLE | \0 [3 [! k9 v" E0 p/ x3 I/ W
          savePinMux);
1 ~) O  O2 k+ z7 U) @}- m9 j* R- `0 Z* r

. {0 v( I% c8 O# n3 I4 C1.McASPI2SConfigure(); McASP的配置程序如下:
0 D' o& l! b( _/ R) d. k' Fstatic void McASPI2SConfigure(void)$ r% K8 d# V. e
{/ u9 |% @+ d" c4 T. Q# i( \
    McASPRxReset(SOC_MCASP_0_CTRL_REGS);
$ E6 U5 v- k3 q    McASPTxReset(SOC_MCASP_0_CTRL_REGS);
. I% U9 c2 K& F& L3 z3 u4 M# p" W+ R7 Y6 n3 U# T0 l! y
    /* Enable the FIFOs for DMA transfer */' A! m7 Y% ]4 X  n# W! ^
//    McASPReadFifoEnable(SOC_MCASP_0_FIFO_REGS, 6, 1);
; e* W5 K: a# M; B1 K7 k8 M. O//    McASPWriteFifoEnable(SOC_MCASP_0_FIFO_REGS, 1, 1);
3 y& ~' l1 n. z2 T, [9 d$ f* E  ]: c1 r7 C; K0 V3 y
    /* Set I2S format in the transmitter/receiver format units */
; J/ w: @% e: Y4 d    McASPRxFmtI2SSet(SOC_MCASP_0_CTRL_REGS, WORD_SIZE, SLOT_SIZE,3 M& h, P! ~* r& R
      MCASP_RX_MODE_NON_DMA);
, C! |3 h+ p, U, k    McASPTxFmtI2SSet(SOC_MCASP_0_CTRL_REGS, WORD_SIZE, SLOT_SIZE,: s2 N' |  w! x! a) w0 L7 c! i1 W
      MCASP_TX_MODE_NON_DMA);
" X, r. J, K7 t! S) J* ]) U* P: H
    /* Configure the frame sync. I2S shall work in TDM format with 2 slots */
) n  G3 J) P' \# l0 H    McASPRxFrameSyncCfg(SOC_MCASP_0_CTRL_REGS, 2, MCASP_RX_FS_WIDTH_WORD, * _$ X1 ]4 Z  r9 U# a$ O
                        MCASP_RX_FS_EXT_BEGIN_ON_FALL_EDGE);4 g# i# [6 v# g- p: e3 [+ T% Z9 U
    McASPTxFrameSyncCfg(SOC_MCASP_0_CTRL_REGS, 2, MCASP_TX_FS_WIDTH_WORD,
* g7 E5 @3 e5 j( T5 ?# A; F/ B                        MCASP_TX_FS_EXT_BEGIN_ON_RIS_EDGE);! K8 a1 Y6 f, _" m" P3 [& M
7 I0 F+ L8 |! L2 @. n) X1 ?
    /* configure the clock for receiver */
! t6 L5 {. M1 s//    McASPRxClkCfg(SOC_MCASP_0_CTRL_REGS, MCASP_RX_CLK_INTERNAL, 16u, 16u);
9 X# w. `) K) `# Y* o1 l    McASPRxClkCfg(SOC_MCASP_0_CTRL_REGS, MCASP_RX_CLK_EXTERNAL, 0, 0);
3 c+ z" S4 O- o    McASPRxClkPolaritySet(SOC_MCASP_0_CTRL_REGS, MCASP_RX_CLK_POL_RIS_EDGE);
  s, D& U! j/ ^/ {+ a3 ?9 ]    McASPRxClkCheckConfig(SOC_MCASP_0_CTRL_REGS, MCASP_RX_CLKCHCK_DIV32,) o% P4 q2 a! B- W
                          0x00, 0xFF);
$ I* m# v: b7 K- B  I9 E% Y$ s7 l4 c" \
    /* configure the clock for transmitter */
$ O$ a6 e. n# X4 I//    HWREG(0x01D000A0) = (0x00001F00);
! `0 O2 ^9 s9 J$ b& ]& W4 }6 _//    McASPTxClkCfg(SOC_MCASP_0_CTRL_REGS, MCASP_TX_CLK_INTERNAL, 16u, 16u);
! l5 a: @# W; f8 c; y0 t( n- F    McASPTxClkCfg(SOC_MCASP_0_CTRL_REGS, MCASP_TX_CLK_EXTERNAL, 0, 0);
1 G! |, H* L. E9 V    McASPTxClkPolaritySet(SOC_MCASP_0_CTRL_REGS, MCASP_TX_CLK_POL_FALL_EDGE);/ ~# t5 C1 M1 W9 O  U
    McASPTxClkCheckConfig(SOC_MCASP_0_CTRL_REGS, MCASP_TX_CLKCHCK_DIV32,
; Z3 J$ @6 p7 q7 u; g  y4 [- ^7 \7 k                            0x00, 0xFF);
+ |5 k+ G, a" R6 h . C, l  h/ p3 k0 x$ D
    /* Enable synchronization of RX and TX sections  */  ' k2 x( F! ]' b* s+ N4 }: H! s
    McASPTxRxClkSyncEnable(SOC_MCASP_0_CTRL_REGS);
2 G% d* e  t3 c0 y4 j# o" u% q1 M- R2 R! H7 b
    /* Enable the transmitter/receiver slots. I2S uses 2 slots */: Q& ]  e$ a& \+ V6 S
    McASPRxTimeSlotSet(SOC_MCASP_0_CTRL_REGS, I2S_SLOTS);% ?4 q7 r# s- N) k/ g$ j% K  z, @
    McASPTxTimeSlotSet(SOC_MCASP_0_CTRL_REGS, I2S_SLOTS);
8 M# ~' G7 \( u. M. G7 `3 {1 d$ o8 {, Q: _5 B; Y) z- Q& \
    /*
6 u1 q) u/ r9 s& @    ** Set the serializers, Currently only one serializer is set as
5 j3 S! A" J7 R: r6 l8 t( q9 |    ** transmitter and one serializer as receiver., R/ T5 L( {9 E. @) r8 c
    */
- y: Y/ L: ~$ Z# {    McASPSerializerRxSet(SOC_MCASP_0_CTRL_REGS, MCASP_XSER_RX);
7 `. `5 B$ W! K+ z5 j* o/ }    McASPSerializerRxSet(SOC_MCASP_0_CTRL_REGS, 13u);- g2 I; b( e# t3 ]) W% l
    McASPSerializerRxSet(SOC_MCASP_0_CTRL_REGS, 14u);' }4 {9 I) O& z) v' w: v$ R3 Z
    McASPSerializerRxSet(SOC_MCASP_0_CTRL_REGS, 8u);. v: V1 M5 S5 W) A7 ~. o
    McASPSerializerRxSet(SOC_MCASP_0_CTRL_REGS, 10u);
' \- U. b/ m0 x2 |" H8 S: S    McASPSerializerRxSet(SOC_MCASP_0_CTRL_REGS, 11u);
9 [5 f) p0 S  [
. b3 A& ~& u  c- \+ B1 }9 [    McASPSerializerTxSet(SOC_MCASP_0_CTRL_REGS, MCASP_XSER_TX);
  H( b7 z/ ?$ X7 o' X* L2 H$ x' L3 j
  C. K/ v( Y) Z4 n# b    /*# G0 u5 w; @' w
    ** Configure the McASP pins
% a0 b: V* ?* x$ b- }    ** Input - Frame Sync, Clock and Serializer Rx
  t, o- u) ~* E0 f. A2 ~    ** Output - Serializer Tx is connected to the input of the codec - w  C) m; O* o( B& U
    */
/ P) y  u/ _' F    McASPPinMcASPSet(SOC_MCASP_0_CTRL_REGS, 0xFFFFFFFF);
7 H& B. L% y7 T$ f; e2 w# O    McASPPinDirOutputSet(SOC_MCASP_0_CTRL_REGS,
/ V- f0 u' i$ Y+ k* U                                           MCASP_PIN_AXR(MCASP_XSER_TX); O5 |+ ]4 u' X: }5 R  d9 }$ B
                                         | MCASP_PIN_AMUTE
2 ~7 s/ J9 I* E5 S+ [                                         );
4 g4 j; a1 K! {, v4 c    McASPPinDirInputSet(SOC_MCASP_0_CTRL_REGS,& c1 j+ w4 ^* ^( v
                                           MCASP_PIN_AFSX$ |/ _8 Q! x: e% m( h
                                   | MCASP_PIN_AFSR
" G, l4 U; D, W                 | MCASP_PIN_AHCLKX
* @) w# q5 a: i; O" D* k0 U7 G+ ~8 y                       | MCASP_PIN_AHCLKR
  W* _0 c. x9 X  j1 A. f; i                       | MCASP_PIN_ACLKX' g7 ~& c/ d2 v/ |4 Z' s6 e
                       | MCASP_PIN_ACLKR) c4 k  H1 k, m9 a3 N, Z
                                               | MCASP_PIN_AXR(MCASP_XSER_RX); }$ ^6 r, X, l" \) N! m& t
                                               | MCASP_PIN_AXR(1u<<(13u))
/ f+ W# a( w; z: ]                                               | MCASP_PIN_AXR(1u<<(14u))
& k0 N% \! ^7 y" z3 E                                               | MCASP_PIN_AXR(1u<<(8u))0 G; E' e3 `! d, W! V/ p
                                               | MCASP_PIN_AXR(1u<<(10u))
2 n3 U+ h; i! N                                               | MCASP_PIN_AXR(1u<<(11u))7 f) T% G0 ^: a4 Y" k0 ^
                                               );' _  w! Y' T! ]: ?# i

" m' f$ Z; P' f4 S8 U    /* Enable error interrupts for McASP */0 S: C6 x* Z6 Q# x! i
    McASPTxIntEnable(SOC_MCASP_0_CTRL_REGS,
4 D0 L. s+ S, L' H                                        MCASP_TX_DATAREADY* S, _" W, x% G" M6 C# j8 `4 P! x
                                            | MCASP_TX_CLKFAIL
8 x8 R% m- e6 n                                            | MCASP_TX_SYNCERROR
! `  L% s% {; ?, g& e, A$ \                                            | MCASP_TX_UNDERRUN);
" {4 a" S9 Y1 u
. t, M' Z2 c4 p# w  G/ y    McASPRxIntEnable(SOC_MCASP_0_CTRL_REGS,
( J" ^; U0 [5 p7 J& j                                        MCASP_RX_DATAREADY
6 P- z% |  u' j5 A8 {! |. |7 T                                            | MCASP_RX_CLKFAIL
0 V, M( L$ g. j4 `5 Z                                            | MCASP_RX_SYNCERROR
: a; W! ~% c: u/ P                                            | MCASP_RX_OVERRUN);
/ A2 P/ Q7 C. W2 L//MCASP_RX_DMAERROR MCASP_TX_DMAERROR
0 p6 W( U; p0 [( L/ M" X0 _' ]$ _' x3 K
}4 X' u, d: S2 ^- @1 e1 D- Z
9 k! ^! a2 m& g
2.运行完上述配置后激活发送接受I2SDataTxRxActivate(); 遇到这个问题:程序无法跳出红色部分的语句
( U) c2 ^$ n/ Zstatic void I2SDataTxRxActivate(void)
7 g. `3 B1 B/ q8 @6 d  {{" ?( S6 ?. L# c! l4 P; M
    /* Start the clocks */
& U% a4 B$ z0 X) X$ g    McASPRxClkStart(SOC_MCASP_0_CTRL_REGS, MCASP_RX_CLK_EXTERNAL);
6 _) q/ U. e8 ]5 f- p    McASPTxClkStart(SOC_MCASP_0_CTRL_REGS, MCASP_TX_CLK_EXTERNAL);
5 s6 k( |8 H4 A$ v( A% q5 f9 K6 y( P
    /* Enable EDMA for the transfer */& D# u' {) G/ p
//    EDMA3EnableTransfer(SOC_EDMA30CC_0_REGS, EDMA3_CHA_MCASP0_RX,
! D( c: N& V1 u! N6 `! i//                        EDMA3_TRIG_MODE_EVENT);+ S( u+ i. B! K2 j
//    EDMA3EnableTransfer(SOC_EDMA30CC_0_REGS,
  }6 l8 [6 F% K//                        EDMA3_CHA_MCASP0_TX, EDMA3_TRIG_MODE_EVENT);( _, m/ M* {% v" O4 {
    /* Activate the  serializers */
' d8 A9 }; V& a    McASPRxSerActivate(SOC_MCASP_0_CTRL_REGS);, B& h8 a8 a3 ^% g  s
    McASPTxSerActivate(SOC_MCASP_0_CTRL_REGS);
" U. a. s' O! c8 i- g( n
    /* make sure that the XDATA bit is cleared to zero */: S: i3 V2 t* t2 I
    while(McASPTxStatusGet(SOC_MCASP_0_CTRL_REGS) & MCASP_TX_STAT_DATAREADY);
: @+ O. W  r' J3 Z( F( F: g" o, v    /* Activate the state machines */
, d8 R4 E' f  U' B    McASPRxEnable(SOC_MCASP_0_CTRL_REGS);
, l; E; m. _3 k0 p5 S6 ?    McASPTxEnable(SOC_MCASP_0_CTRL_REGS);! E$ l0 g' t3 A2 C* _  V1 k
    McASPTxBufWrite(SOC_MCASP_0_CTRL_REGS, MCASP_XSER_TX, 0);4 w& W( D1 I$ S7 p$ e8 G
}. l5 H* F  I9 J/ u" O, f

+ }- m0 A$ R' S/ y9 ?
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏1 分享淘帖
回复

使用道具 举报

0

主题

184

帖子

1137

积分

QQ游客

积分
1137
沙发
发表于 2015-10-29 17:26:10 | 只看该作者
音频例程的McASP的所有时钟都由外部芯片提供:' F7 o- g) y% |7 x2 b. F; t: x6 X4 A% |
在音频例程里,
. z+ R/ z! S- O: XMcASP_AHCKLX 外部输入24.576M的时钟,) M& r( {# `% R) j; K! q
McASP_CLKX由外部输入1.536M的时钟,
/ k# e5 c8 |3 SMcASP_AFSX有外部输入48k时钟。
# u: l9 V- S$ Z不能激活McASP是由于McASP_CLKX没有时钟输入,在此引脚提供任意时钟即可通过激活函数。
回复 支持 反对

使用道具 举报

1

主题

5

帖子

1027

积分

金牌会员

Rank: 6Rank: 6

积分
1027
板凳
 楼主| 发表于 2015-10-31 11:40:34 | 只看该作者
Lewis 发表于 2015-10-29 17:26
: x* x% W) E6 R* i5 A& o' Z音频例程的McASP的所有时钟都由外部芯片提供:
6 F+ u+ c2 _* o) @9 l, Q在音频例程里,' L8 K9 k1 W  |$ G
McASP_AHCKLX 外部输入24.576M的时钟,
8 [# q" x$ {+ J0 {# V: u+ o
谢谢啊,应该是你说的原因。我接上外部时钟,激活是通过了。现在到了判断XSTAT里面的状态那里,一直在死循环判断。没法通过,这又是什么原因?
回复 支持 反对

使用道具 举报

1

主题

5

帖子

1027

积分

金牌会员

Rank: 6Rank: 6

积分
1027
地板
 楼主| 发表于 2015-10-31 11:41:37 | 只看该作者
Ming 发表于 2015-10-31 11:40
; ^& ^4 k  I- T' g谢谢啊,应该是你说的原因。我接上外部时钟,激活是通过了。现在到了判断XSTAT里面的状态那里,一直在死 ...

$ l& h8 A/ U6 L) w3 I# T" |就是这一句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:260 P  Q, h  ~, Y9 V" Q+ Y
音频例程的McASP的所有时钟都由外部芯片提供:9 M( Z) N, L1 f# o' }; I/ J
在音频例程里,( Y8 \7 Y+ `2 Z' T
McASP_AHCKLX 外部输入24.576M的时钟,
( E' ^' s, U5 d6 {: ^& U& ^% t
就是这一句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
: V. r- }+ X1 f# d# a1 {音频例程的McASP的所有时钟都由外部芯片提供:  Y3 _1 j+ `5 P6 P; e
在音频例程里,
" B3 p9 {+ \) c6 q/ F( R  I; rMcASP_AHCKLX 外部输入24.576M的时钟,
: E4 H1 Y" L% b! g7 {' o. S
这句while( !(McASPRxStatusGet(SOC_MCASP_0_CTRL_REGS) & MCASP_RX_STAT_DATAREADY));无法通过
回复 支持 反对

使用道具 举报

0

主题

184

帖子

1137

积分

QQ游客

积分
1137
7#
发表于 2015-10-31 21:13:29 | 只看该作者
1、
8 M; p6 U. O3 h$ c! s9 MMcASP_CLKX 和 McASP_AFSX的时钟倍数要正确
5 w" M8 M0 f) _* w  {2 d2、McASP不支持仿真停止信号,如果加上了软件中断,则后面不能通过此函数。3 E5 n4 i! W! s# N2 i* A

: F3 c6 s, o% u

本帖子中包含更多资源

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

x
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-5-12 02:43 , Processed in 0.044801 second(s), 25 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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