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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

1

主题

5

帖子

1027

积分

金牌会员

Rank: 6Rank: 6

积分
1027
跳转到指定楼层
楼主
发表于 2015-10-29 09:47:24 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
我的McASP配置分别如下:
+ l% y8 ?! \4 P8 z8 W管脚的复用设置是:
- T- [6 [: D" `% r+ n+ s! nvoid McASPPinMuxSetup(void)1 s0 v+ Y/ Y  c5 P# r  A9 l
{3 {3 F4 i! X6 S# D3 O" r- |
    unsigned int savePinMux = 0;) n! \2 k% I5 U1 N* o# {( e
    savePinMux = HWREG(SOC_SYSCFG_0_REGS + SYSCFG0_PINMUX(0)) & \
. M% r* v8 [3 k. ?0 D# A                       ~(SYSCFG_PINMUX0_PINMUX0_27_24 | \
$ `# t2 ?8 T! z! X                         SYSCFG_PINMUX0_PINMUX0_23_20 | \
& a- s+ q. K. L# S' {- `                         SYSCFG_PINMUX0_PINMUX0_19_16 | \
+ B2 n" g" n- q% i                         SYSCFG_PINMUX0_PINMUX0_15_12 | \- g  y+ c3 ^, I0 s
                         SYSCFG_PINMUX0_PINMUX0_11_8 | \
2 L2 g: c- O# ^( ^1 r( k                         SYSCFG_PINMUX0_PINMUX0_7_4 | \
! d# {- O# m1 @& |+ v8 j                         SYSCFG_PINMUX0_PINMUX0_3_0);% ^. O. i8 n3 P# j6 I
    HWREG(SOC_SYSCFG_0_REGS + SYSCFG0_PINMUX(0)) = \$ K' ?  N/ [+ O# ^3 e
         (PINMUX0_MCASP0_AMUTE_ENABLE | PINMUX0_MCASP0_AHCLKX_ENABLE | \
4 f: _" V3 w5 M- J          PINMUX0_MCASP0_AHCLKR_ENABLE | PINMUX0_MCASP0_AFSX_ENABLE | \2 b' f! Y) K2 E3 W
          PINMUX0_MCASP0_AFSR_ENABLE | PINMUX0_MCASP0_ACLKX_ENABLE | \
2 O$ B: I( P: o/ w/ n( G/ T- N6 \          PINMUX0_MCASP0_ACLKR_ENABLE | savePinMux);; ~, J& Q; I$ o- b" n
    savePinMux = HWREG(SOC_SYSCFG_0_REGS + SYSCFG0_PINMUX(1)) & \
& B3 {, M8 u3 s+ s+ j1 Z% z7 x                       ~(SYSCFG_PINMUX1_PINMUX1_19_16 | \0 K& Y! ^+ P7 c# _+ t
                         SYSCFG_PINMUX1_PINMUX1_15_12 | \& x  M' T; y* `
                         SYSCFG_PINMUX1_PINMUX1_11_8  | \
" v/ o% a* J1 T% Y6 a5 _' c                         SYSCFG_PINMUX1_PINMUX1_7_4   | \/ `0 }- w! D0 z
                         SYSCFG_PINMUX1_PINMUX1_23_20 | \/ A! }# @0 j6 r
                         SYSCFG_PINMUX1_PINMUX1_27_24 | \
5 ~. }8 S6 E. W/ @  N% B* O                         SYSCFG_PINMUX1_PINMUX1_31_28
, l% U6 s+ |: Z, B$ m5 }* g0 @                         );
- S9 z1 _$ ~2 u0 s' ]+ i7 T    HWREG(SOC_SYSCFG_0_REGS + SYSCFG0_PINMUX(1)) = \
2 _) S) u) `8 {" ~& O         (PINMUX1_MCASP0_AXR11_ENABLE | \, d* D" S1 ^3 z3 D( ?* [
          PINMUX1_MCASP0_AXR12_ENABLE | \
& Q& v0 V' `+ t5 n          PINMUX1_MCASP0_AXR13_ENABLE | \
0 ?7 w7 J+ g% F7 ^* B          PINMUX1_MCASP0_AXR14_ENABLE | \
9 i3 U/ g% |, V0 \. e9 m  H          PINMUX1_MCASP0_AXR8_ENABLE  | \
, L9 b+ h; K& T5 _( q          PINMUX1_MCASP0_AXR9_ENABLE  | \
, U7 }6 H+ F: d8 g. c8 @. c. O) o          PINMUX1_MCASP0_AXR10_ENABLE | \
: F9 r' b; _1 L2 c          savePinMux);* c' ?9 B* }( m$ p8 [0 \
}
) S- Y3 ?' d7 w1 T) K/ |& W: m) Q' r5 l9 M
1.McASPI2SConfigure(); McASP的配置程序如下:! `6 F# H6 Q7 l# `4 Q/ G% ?
static void McASPI2SConfigure(void)# ?4 z5 L7 ^9 J7 ^. Y" \8 _
{
- f+ N  D- F5 G    McASPRxReset(SOC_MCASP_0_CTRL_REGS);" N) ~4 M2 O" S3 o+ ]/ S
    McASPTxReset(SOC_MCASP_0_CTRL_REGS);, ~) v) j* l/ o# B, F
) Q- o& \7 y) Q  U( q
    /* Enable the FIFOs for DMA transfer */5 X- b. D( h1 v% E
//    McASPReadFifoEnable(SOC_MCASP_0_FIFO_REGS, 6, 1);
4 _" h$ G. z$ h" S9 E8 Z6 I//    McASPWriteFifoEnable(SOC_MCASP_0_FIFO_REGS, 1, 1);2 y* H, n( X4 l3 n

! ^4 |9 j0 w" }7 y    /* Set I2S format in the transmitter/receiver format units */4 }2 |* d5 z) k2 [* g! A: Z
    McASPRxFmtI2SSet(SOC_MCASP_0_CTRL_REGS, WORD_SIZE, SLOT_SIZE,
; s4 l( h  S7 x6 _) \0 g4 ~5 h1 b; Y      MCASP_RX_MODE_NON_DMA);
! H$ z9 G7 x+ V' y# A. B, m# n! m    McASPTxFmtI2SSet(SOC_MCASP_0_CTRL_REGS, WORD_SIZE, SLOT_SIZE,8 _; u7 g. N; m) s. r/ C
      MCASP_TX_MODE_NON_DMA);
  o4 J+ a6 W# W) u
6 v! d2 t5 w; ~) e7 k1 t    /* Configure the frame sync. I2S shall work in TDM format with 2 slots */  @! b& L2 ~) K8 K- i
    McASPRxFrameSyncCfg(SOC_MCASP_0_CTRL_REGS, 2, MCASP_RX_FS_WIDTH_WORD,
3 D& o* D. o, B4 Y4 y* U                        MCASP_RX_FS_EXT_BEGIN_ON_FALL_EDGE);( g+ b, h, F0 N- j
    McASPTxFrameSyncCfg(SOC_MCASP_0_CTRL_REGS, 2, MCASP_TX_FS_WIDTH_WORD, $ I( b/ R9 ?. V( C2 U- `! K1 V
                        MCASP_TX_FS_EXT_BEGIN_ON_RIS_EDGE);
' G. e; S' C% B; W! S. a
  k0 H# I9 D. C7 k3 E% x    /* configure the clock for receiver */
- k0 y+ i' E5 a% G//    McASPRxClkCfg(SOC_MCASP_0_CTRL_REGS, MCASP_RX_CLK_INTERNAL, 16u, 16u);
5 w1 ?) J* b" ]- ?1 i+ J, s$ r    McASPRxClkCfg(SOC_MCASP_0_CTRL_REGS, MCASP_RX_CLK_EXTERNAL, 0, 0);
! s; Z+ h. @" z9 U- d    McASPRxClkPolaritySet(SOC_MCASP_0_CTRL_REGS, MCASP_RX_CLK_POL_RIS_EDGE);6 [( D) n6 \" p1 D; n8 r' H
    McASPRxClkCheckConfig(SOC_MCASP_0_CTRL_REGS, MCASP_RX_CLKCHCK_DIV32,
1 I9 e6 p7 z( h% [& ^+ R5 l% a, `                          0x00, 0xFF);
- |) o5 {" k: H1 V" c% T. }. J( H' R
    /* configure the clock for transmitter */" a* j. b2 Z1 R( [
//    HWREG(0x01D000A0) = (0x00001F00);. @, D+ g$ E6 S' E
//    McASPTxClkCfg(SOC_MCASP_0_CTRL_REGS, MCASP_TX_CLK_INTERNAL, 16u, 16u);2 l( O7 s  O; F6 \0 h3 d. g
    McASPTxClkCfg(SOC_MCASP_0_CTRL_REGS, MCASP_TX_CLK_EXTERNAL, 0, 0);
$ t( t# M) Q. j( P2 @    McASPTxClkPolaritySet(SOC_MCASP_0_CTRL_REGS, MCASP_TX_CLK_POL_FALL_EDGE);# j0 |; F  \8 }  A/ s4 d
    McASPTxClkCheckConfig(SOC_MCASP_0_CTRL_REGS, MCASP_TX_CLKCHCK_DIV32,
  t. _1 l& D' C* Q: n                            0x00, 0xFF);7 N/ Q' x. Y, F/ a0 q$ L' S
, J$ S5 N7 i. V  h. ~  x1 a
    /* Enable synchronization of RX and TX sections  */  
8 q- P: f( ^& l1 D% W    McASPTxRxClkSyncEnable(SOC_MCASP_0_CTRL_REGS);
* o! Y& W6 [- e% s, v1 |3 x5 r( N# d9 k0 w, S$ P5 X+ v
    /* Enable the transmitter/receiver slots. I2S uses 2 slots */1 M6 g: |: M8 n. g
    McASPRxTimeSlotSet(SOC_MCASP_0_CTRL_REGS, I2S_SLOTS);0 Y+ I& w, G9 s) R+ S) J9 ?
    McASPTxTimeSlotSet(SOC_MCASP_0_CTRL_REGS, I2S_SLOTS);, f% G& k& U. G7 Z9 F4 u- ]- n  m

: q0 u9 z  j8 t: w& {: j    /*
4 J- x& p; J+ B    ** Set the serializers, Currently only one serializer is set as
4 F' o2 n4 H; ^8 P4 g    ** transmitter and one serializer as receiver.
, L3 n: ?0 H- b9 E    */5 B0 r8 b3 m# C  Z, w. A4 p, ?
    McASPSerializerRxSet(SOC_MCASP_0_CTRL_REGS, MCASP_XSER_RX);
4 L& U) S8 |1 x' t8 |    McASPSerializerRxSet(SOC_MCASP_0_CTRL_REGS, 13u);, j2 a+ E. C: H* g6 z
    McASPSerializerRxSet(SOC_MCASP_0_CTRL_REGS, 14u);3 D+ c7 q. ]7 x5 t# L# k
    McASPSerializerRxSet(SOC_MCASP_0_CTRL_REGS, 8u);
  \  @4 D2 R& d4 L6 o* P$ M  Z    McASPSerializerRxSet(SOC_MCASP_0_CTRL_REGS, 10u);
! H" z4 d! r! Q    McASPSerializerRxSet(SOC_MCASP_0_CTRL_REGS, 11u);3 I0 |% Q; \: `9 |, w2 Q* B4 J

: w) B5 ?% A. v4 A- f$ p/ z- Y    McASPSerializerTxSet(SOC_MCASP_0_CTRL_REGS, MCASP_XSER_TX);: U0 {% ~0 y5 A8 e" P

" D, T  j/ M5 V+ k- L* a9 D4 x  t    /*- q' [( x' {+ ~* @
    ** Configure the McASP pins % D2 ?6 ~; Q, k6 G
    ** Input - Frame Sync, Clock and Serializer Rx
2 J* L( Z1 U, _! O) c3 v3 `3 U    ** Output - Serializer Tx is connected to the input of the codec 1 |$ w6 z, j, p4 @( u, E8 b; h
    */
% p' t4 y; q+ r# |: \    McASPPinMcASPSet(SOC_MCASP_0_CTRL_REGS, 0xFFFFFFFF);0 C# Z' }9 O4 e/ e4 a: H
    McASPPinDirOutputSet(SOC_MCASP_0_CTRL_REGS,
& {$ I; f" n1 l2 x* E                                           MCASP_PIN_AXR(MCASP_XSER_TX)
* G9 C5 A" y4 y' h- x) ^                                         | MCASP_PIN_AMUTE- g) t* J5 X+ T! _9 C1 @
                                         );4 ^' Q' [( f5 M
    McASPPinDirInputSet(SOC_MCASP_0_CTRL_REGS,
5 b+ z# p( _2 ~* S- ]5 u                                           MCASP_PIN_AFSX0 l7 W/ i# g% t  s$ C5 R
                                   | MCASP_PIN_AFSR
3 G# U6 q* e1 u# z5 B* k& V                 | MCASP_PIN_AHCLKX/ J: C( ~& u6 T+ E: \0 ?9 Y. I9 p
                       | MCASP_PIN_AHCLKR# |$ _+ l6 a  L
                       | MCASP_PIN_ACLKX
: a5 t; }7 R  {9 ]8 `+ R6 ]                       | MCASP_PIN_ACLKR
/ [. w' B1 ?2 B& ^# J) ^4 \# w                                               | MCASP_PIN_AXR(MCASP_XSER_RX)
: I! p4 N$ _; X                                               | MCASP_PIN_AXR(1u<<(13u))
: v. E- `/ B& a, t                                               | MCASP_PIN_AXR(1u<<(14u))
. g, r7 S" M7 b$ b9 W! B                                               | MCASP_PIN_AXR(1u<<(8u))8 Z: w  {2 j6 V+ N1 b
                                               | MCASP_PIN_AXR(1u<<(10u))" Q" K) [. T, w; {/ e& W: a
                                               | MCASP_PIN_AXR(1u<<(11u))5 K2 `! h; f, ]" X4 @$ e
                                               );! v7 m0 O+ c; E% H
6 L! P2 |) U; v2 O$ \% G' [! G
    /* Enable error interrupts for McASP */- {, ~4 r+ W* u( }5 v
    McASPTxIntEnable(SOC_MCASP_0_CTRL_REGS,
1 @* Z0 \1 C( R, R( l3 D5 S7 j9 ]                                        MCASP_TX_DATAREADY
" I; n+ s' B" Y9 Y3 Z                                            | MCASP_TX_CLKFAIL : G+ _5 {0 ~% W" V: H# [) W
                                            | MCASP_TX_SYNCERROR
2 c* r5 x, U' w- F4 K4 X+ E                                            | MCASP_TX_UNDERRUN);) C1 ]% [: E6 F/ d2 F# X$ O
$ L( c8 l! L$ q: p
    McASPRxIntEnable(SOC_MCASP_0_CTRL_REGS,0 ]! S/ K8 F3 x' z
                                        MCASP_RX_DATAREADY
1 G7 q- Z0 d3 y& l6 L7 ^                                            | MCASP_RX_CLKFAIL
( J! O0 L" p( O( z! H" s) ]% m( P/ z7 r                                            | MCASP_RX_SYNCERROR
( s! p3 n9 b3 T                                            | MCASP_RX_OVERRUN);
% P( X, \4 O! w8 |0 ]; h//MCASP_RX_DMAERROR MCASP_TX_DMAERROR# N$ W6 ~  b0 h- [! A' Z! ?

5 K3 W; P8 L, {' \) f}* v4 q8 Z& ~3 e) I% T
& n. P8 f! b8 o& h
2.运行完上述配置后激活发送接受I2SDataTxRxActivate(); 遇到这个问题:程序无法跳出红色部分的语句
) Q, [- H  Y! ~0 f) S" bstatic void I2SDataTxRxActivate(void)
3 F+ _7 Y, s$ ]. k; H/ q  M( n{
! {+ n" N1 F7 c    /* Start the clocks */
% z; L/ Z$ m3 {) @3 O5 z: M0 u    McASPRxClkStart(SOC_MCASP_0_CTRL_REGS, MCASP_RX_CLK_EXTERNAL);* ?9 c$ j0 R$ d0 q& J
    McASPTxClkStart(SOC_MCASP_0_CTRL_REGS, MCASP_TX_CLK_EXTERNAL);+ t7 L/ R" u8 b% D8 O

- @6 v0 v% u% T& {1 ?5 d" u8 `    /* Enable EDMA for the transfer */& y: B$ M( t* i& ]. t" b) `
//    EDMA3EnableTransfer(SOC_EDMA30CC_0_REGS, EDMA3_CHA_MCASP0_RX,
+ }0 ^$ V) K. p; x* C: E( ~//                        EDMA3_TRIG_MODE_EVENT);% A" Z) I3 i7 O' m6 q- K
//    EDMA3EnableTransfer(SOC_EDMA30CC_0_REGS,
* z: e) l6 {( Y0 ?) H' o6 h8 R0 P//                        EDMA3_CHA_MCASP0_TX, EDMA3_TRIG_MODE_EVENT);
1 A0 z8 s+ h; \    /* Activate the  serializers */+ Q8 n1 h1 Y1 f# c; _
    McASPRxSerActivate(SOC_MCASP_0_CTRL_REGS);
+ `/ G  G( R1 b" j0 H2 M    McASPTxSerActivate(SOC_MCASP_0_CTRL_REGS);

+ T' {( [! o8 h) O3 `- ?0 |    /* make sure that the XDATA bit is cleared to zero */
1 v. q9 I  T. H1 i3 F4 P    while(McASPTxStatusGet(SOC_MCASP_0_CTRL_REGS) & MCASP_TX_STAT_DATAREADY);
0 }" V& S1 V8 d: N, N) b& k    /* Activate the state machines */" ]. _# o/ f  |
    McASPRxEnable(SOC_MCASP_0_CTRL_REGS);
/ Y0 m( V) Y9 C- s+ @5 [% {    McASPTxEnable(SOC_MCASP_0_CTRL_REGS);
- O: Q: ~; O& t+ ~! M1 A! o- f    McASPTxBufWrite(SOC_MCASP_0_CTRL_REGS, MCASP_XSER_TX, 0);4 Q/ z2 b* h. H' F- L; G; F" Q% A
}+ m( g6 r% l2 Q) J/ q: F1 Z& j& F
6 r$ L$ D7 z$ m: M7 o+ m
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏1 分享淘帖
回复

使用道具 举报

0

主题

184

帖子

1137

积分

QQ游客

积分
1137
沙发
发表于 2015-10-29 17:26:10 | 只看该作者
音频例程的McASP的所有时钟都由外部芯片提供:! _# S+ T; P, C! A8 o
在音频例程里,/ E! S5 I% K5 l" V
McASP_AHCKLX 外部输入24.576M的时钟,
' b4 [; [$ Y! R" nMcASP_CLKX由外部输入1.536M的时钟,! M, r1 @) [5 s# D; b$ @
McASP_AFSX有外部输入48k时钟。
& L" J0 n2 t7 |+ X1 }不能激活McASP是由于McASP_CLKX没有时钟输入,在此引脚提供任意时钟即可通过激活函数。
回复 支持 反对

使用道具 举报

1

主题

5

帖子

1027

积分

金牌会员

Rank: 6Rank: 6

积分
1027
板凳
 楼主| 发表于 2015-10-31 11:40:34 | 只看该作者
Lewis 发表于 2015-10-29 17:26
0 f9 B& O; |1 V% K, n/ @8 g音频例程的McASP的所有时钟都由外部芯片提供:- g0 P. ~+ |; f6 f% q/ W
在音频例程里,
, y: u+ `  J: m$ ~1 j/ cMcASP_AHCKLX 外部输入24.576M的时钟,
: h# a' @( x- S. }6 A9 @
谢谢啊,应该是你说的原因。我接上外部时钟,激活是通过了。现在到了判断XSTAT里面的状态那里,一直在死循环判断。没法通过,这又是什么原因?
回复 支持 反对

使用道具 举报

1

主题

5

帖子

1027

积分

金牌会员

Rank: 6Rank: 6

积分
1027
地板
 楼主| 发表于 2015-10-31 11:41:37 | 只看该作者
Ming 发表于 2015-10-31 11:40
5 j* N6 i7 N+ s8 _* B谢谢啊,应该是你说的原因。我接上外部时钟,激活是通过了。现在到了判断XSTAT里面的状态那里,一直在死 ...
/ {+ Y, |0 i  l: n7 V
就是这一句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
0 f7 V, f, W+ a0 k0 u6 |' m音频例程的McASP的所有时钟都由外部芯片提供:# I6 G. g; H2 M
在音频例程里,. m2 g+ n# c3 ]. h
McASP_AHCKLX 外部输入24.576M的时钟,

$ B' z! a: N8 i* f3 g4 d就是这一句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:264 ~: t% V& P4 B9 T8 x0 d0 ]
音频例程的McASP的所有时钟都由外部芯片提供:
% N* E2 M3 {' b; J/ b% S在音频例程里,
5 j1 F% ~2 u; h5 S9 Q9 Y% bMcASP_AHCKLX 外部输入24.576M的时钟,
( N6 x& ?3 o7 ^1 p9 J
这句while( !(McASPRxStatusGet(SOC_MCASP_0_CTRL_REGS) & MCASP_RX_STAT_DATAREADY));无法通过
回复 支持 反对

使用道具 举报

0

主题

184

帖子

1137

积分

QQ游客

积分
1137
7#
发表于 2015-10-31 21:13:29 | 只看该作者
1、+ w: ?# x, d. |: ^% l
McASP_CLKX 和 McASP_AFSX的时钟倍数要正确  s$ B/ H4 ~- m0 J$ h4 k& t- Y
2、McASP不支持仿真停止信号,如果加上了软件中断,则后面不能通过此函数。
! n( Q2 [% |. [8 O9 h
* b  r6 t, g1 `! f* H

本帖子中包含更多资源

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

x
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-10-16 11:45 , Processed in 0.050458 second(s), 24 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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