McASP无法通过McASPSeriActivate(); 请帮忙看看问题所在? - OMAP-L138 - 嵌入式开发者社区 - 51ele.net
设为首页收藏本站
点击跳转“创龙科技服务通”

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

1

主题

5

帖子

1027

积分

金牌会员

Rank: 6Rank: 6

积分
1027
跳转到指定楼层
楼主
发表于 2015-10-29 09:47:24 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
我的McASP配置分别如下:5 W; P+ j# y4 O3 T& _) W5 K/ g; W
管脚的复用设置是:
3 S; Z1 f6 }9 _void McASPPinMuxSetup(void)
& N5 @+ A0 ~, v4 ~8 z# N0 T( o{
. B6 z/ m+ f$ w    unsigned int savePinMux = 0;
) X' V! x9 [+ ^* R- l    savePinMux = HWREG(SOC_SYSCFG_0_REGS + SYSCFG0_PINMUX(0)) & \
5 t$ v' e) l5 B  Y! i5 V$ _2 _                       ~(SYSCFG_PINMUX0_PINMUX0_27_24 | \% y5 W- w  k! u5 Q$ k) [- }
                         SYSCFG_PINMUX0_PINMUX0_23_20 | \
" _: j$ Z0 S' n0 P' r- g& [                         SYSCFG_PINMUX0_PINMUX0_19_16 | \
. D6 g6 f7 G: g                         SYSCFG_PINMUX0_PINMUX0_15_12 | \5 i/ T: ]1 y" b, @6 G% l; w
                         SYSCFG_PINMUX0_PINMUX0_11_8 | \
, y7 ]7 ^& y# T2 r$ f) |  d                         SYSCFG_PINMUX0_PINMUX0_7_4 | \  c3 `8 Q8 r( C) `- L! @
                         SYSCFG_PINMUX0_PINMUX0_3_0);
+ C: S& v) Q. @8 A- ^; b    HWREG(SOC_SYSCFG_0_REGS + SYSCFG0_PINMUX(0)) = \
% l: W% y7 X) v8 L6 F3 n6 S         (PINMUX0_MCASP0_AMUTE_ENABLE | PINMUX0_MCASP0_AHCLKX_ENABLE | \
+ V1 o$ \" y# u          PINMUX0_MCASP0_AHCLKR_ENABLE | PINMUX0_MCASP0_AFSX_ENABLE | \
! g, f3 Z/ }9 s9 X4 w          PINMUX0_MCASP0_AFSR_ENABLE | PINMUX0_MCASP0_ACLKX_ENABLE | \
! J/ \- Y( L4 _' C. ^5 l% |          PINMUX0_MCASP0_ACLKR_ENABLE | savePinMux);
- H9 Q; ?; K: I: x4 \. g- M    savePinMux = HWREG(SOC_SYSCFG_0_REGS + SYSCFG0_PINMUX(1)) & \. C+ {" B/ C/ M: C" O" e
                       ~(SYSCFG_PINMUX1_PINMUX1_19_16 | \7 B: Q7 \: }4 e( d
                         SYSCFG_PINMUX1_PINMUX1_15_12 | \* ~' r! r( j4 q
                         SYSCFG_PINMUX1_PINMUX1_11_8  | \4 w5 p! Y9 @8 o+ E; B
                         SYSCFG_PINMUX1_PINMUX1_7_4   | \
, ~5 P: }# \  V0 _                         SYSCFG_PINMUX1_PINMUX1_23_20 | \, Z) M  ]4 [% d0 e
                         SYSCFG_PINMUX1_PINMUX1_27_24 | \: J  r- j2 H6 c0 I$ n/ R
                         SYSCFG_PINMUX1_PINMUX1_31_28# F7 d4 D% J( H
                         );0 O  G  O/ E4 ]" p4 T
    HWREG(SOC_SYSCFG_0_REGS + SYSCFG0_PINMUX(1)) = \
( e! S2 I! h2 I2 ?2 b! i+ d         (PINMUX1_MCASP0_AXR11_ENABLE | \
0 ]. f; y9 L8 b+ F          PINMUX1_MCASP0_AXR12_ENABLE | \4 P; ~! C: u* i3 ~5 N2 C, l2 I
          PINMUX1_MCASP0_AXR13_ENABLE | \8 O7 W' {# i; @9 Y1 g
          PINMUX1_MCASP0_AXR14_ENABLE | \" x% ]/ Q+ o8 G1 o3 {, Z
          PINMUX1_MCASP0_AXR8_ENABLE  | \9 ?9 ?' Z/ z& x% ~. K  J# X! p
          PINMUX1_MCASP0_AXR9_ENABLE  | \) Z! k, K5 V+ T3 X, X
          PINMUX1_MCASP0_AXR10_ENABLE | \
1 `9 [( }4 x: D. i2 y, w! k4 {          savePinMux);
8 \8 e# Q& A, ^}& @0 G8 y# ^0 F9 g

8 G8 \5 a) C1 d1.McASPI2SConfigure(); McASP的配置程序如下:
( g) z) [& ~( p3 z0 k! Xstatic void McASPI2SConfigure(void)3 P* s) Z5 E% ?8 a' b
{
; l, l6 w. L, a  @' D) I    McASPRxReset(SOC_MCASP_0_CTRL_REGS);/ z; `, J" t: o: K' w0 T" @0 Q
    McASPTxReset(SOC_MCASP_0_CTRL_REGS);. U* X( R) Z5 e, D7 z

& _0 |- q0 D4 i, R' E- R6 y    /* Enable the FIFOs for DMA transfer */
" V- M) Y6 k, b4 B+ o5 Y$ [/ g8 r* t//    McASPReadFifoEnable(SOC_MCASP_0_FIFO_REGS, 6, 1);2 J" L" z) f% J/ S& E+ D
//    McASPWriteFifoEnable(SOC_MCASP_0_FIFO_REGS, 1, 1);1 K" v9 {" g/ O# ?6 Q- [

& a4 l6 A/ ?" J9 y& B! i    /* Set I2S format in the transmitter/receiver format units */) Q4 j$ P0 q6 I: @
    McASPRxFmtI2SSet(SOC_MCASP_0_CTRL_REGS, WORD_SIZE, SLOT_SIZE,  R+ E5 F6 H( L6 ^
      MCASP_RX_MODE_NON_DMA);! g% h! i% y9 R
    McASPTxFmtI2SSet(SOC_MCASP_0_CTRL_REGS, WORD_SIZE, SLOT_SIZE,
& J; X6 f+ I; y& G2 F; `7 p+ P( t      MCASP_TX_MODE_NON_DMA);9 _  `) U: _5 l/ p4 m: P/ W5 W

( [9 e+ v# [/ y% r4 w8 A    /* Configure the frame sync. I2S shall work in TDM format with 2 slots */
- r2 |& _. b: K9 Z+ J* ]7 W    McASPRxFrameSyncCfg(SOC_MCASP_0_CTRL_REGS, 2, MCASP_RX_FS_WIDTH_WORD, + ~$ h1 q( F+ R, G6 r
                        MCASP_RX_FS_EXT_BEGIN_ON_FALL_EDGE);
% ^' ]" l* r" p( A+ W& O6 Z, O* r    McASPTxFrameSyncCfg(SOC_MCASP_0_CTRL_REGS, 2, MCASP_TX_FS_WIDTH_WORD,
3 T9 p4 p( x8 a8 E# q                        MCASP_TX_FS_EXT_BEGIN_ON_RIS_EDGE);: d2 \) ?4 i9 l* Z" I* ^

3 C* C3 E1 \2 f# r# z    /* configure the clock for receiver */
3 d" [; E3 |' ~$ m//    McASPRxClkCfg(SOC_MCASP_0_CTRL_REGS, MCASP_RX_CLK_INTERNAL, 16u, 16u);' E; b* N, M2 W# k2 o  r  _
    McASPRxClkCfg(SOC_MCASP_0_CTRL_REGS, MCASP_RX_CLK_EXTERNAL, 0, 0);6 O& D$ r: Y) J* G  A9 c
    McASPRxClkPolaritySet(SOC_MCASP_0_CTRL_REGS, MCASP_RX_CLK_POL_RIS_EDGE);% V1 d# u$ _' |/ c( o
    McASPRxClkCheckConfig(SOC_MCASP_0_CTRL_REGS, MCASP_RX_CLKCHCK_DIV32,
+ T9 q4 `1 u$ E6 Y4 W- `$ F* ]; ~* _                          0x00, 0xFF);0 z/ h3 g, r) e* T4 `! b/ }

% m* C/ {/ k3 ~$ P    /* configure the clock for transmitter */- C, _! k( X  \/ w8 E
//    HWREG(0x01D000A0) = (0x00001F00);3 `0 {' V8 s  n: h+ R; `
//    McASPTxClkCfg(SOC_MCASP_0_CTRL_REGS, MCASP_TX_CLK_INTERNAL, 16u, 16u);
8 Z$ A4 |* t1 C: Q    McASPTxClkCfg(SOC_MCASP_0_CTRL_REGS, MCASP_TX_CLK_EXTERNAL, 0, 0);
) Q$ M" |+ Q# Y3 ^: Z    McASPTxClkPolaritySet(SOC_MCASP_0_CTRL_REGS, MCASP_TX_CLK_POL_FALL_EDGE);5 l" L( M, {' R1 t9 W
    McASPTxClkCheckConfig(SOC_MCASP_0_CTRL_REGS, MCASP_TX_CLKCHCK_DIV32,
4 m' ^) z: L! T& g3 b( O+ `$ x                            0x00, 0xFF);
# c! u/ |% j2 u 5 }5 F& N. U$ l. @  q  N/ |
    /* Enable synchronization of RX and TX sections  */  & C8 T) U4 z: B8 ~
    McASPTxRxClkSyncEnable(SOC_MCASP_0_CTRL_REGS);
! |, V4 Y% Q( B" ?, `' ], u& v7 O
    /* Enable the transmitter/receiver slots. I2S uses 2 slots */+ U4 ~/ v5 }: G( L/ T# @9 e
    McASPRxTimeSlotSet(SOC_MCASP_0_CTRL_REGS, I2S_SLOTS);
" N- D0 _5 O6 K    McASPTxTimeSlotSet(SOC_MCASP_0_CTRL_REGS, I2S_SLOTS);
: G7 u- A& t8 A/ w, q1 [3 V
4 g4 _; C4 ?2 A9 ]$ h- C    /*+ m% q( X( t' @) R4 \
    ** Set the serializers, Currently only one serializer is set as
( {- z% |0 e% J( |; G5 H    ** transmitter and one serializer as receiver.2 C. v4 A% m; q
    */' ~8 H: R) x) }. X: H, j
    McASPSerializerRxSet(SOC_MCASP_0_CTRL_REGS, MCASP_XSER_RX);
; _$ j' {4 k/ p: m: a4 q- @    McASPSerializerRxSet(SOC_MCASP_0_CTRL_REGS, 13u);
1 x$ Z3 g! G* O, y8 V7 y' v+ A    McASPSerializerRxSet(SOC_MCASP_0_CTRL_REGS, 14u);( v: C+ l* P) r% N3 |6 O, F
    McASPSerializerRxSet(SOC_MCASP_0_CTRL_REGS, 8u);
7 g2 {6 l  ?% h2 x' i4 n: t    McASPSerializerRxSet(SOC_MCASP_0_CTRL_REGS, 10u);
* K: G7 i7 N6 d2 L, q    McASPSerializerRxSet(SOC_MCASP_0_CTRL_REGS, 11u);
" `+ ?- `5 I; T# P( }
+ r9 S' I  `2 y1 R  p0 ?: Z! w    McASPSerializerTxSet(SOC_MCASP_0_CTRL_REGS, MCASP_XSER_TX);/ r! Q+ T9 Q2 F" ]

0 o: R# Y" ~( U2 g' R, i. d: z4 f7 W    /*
1 ?/ x3 V9 }/ q8 ]( J& f5 Z    ** Configure the McASP pins 1 r9 T/ y2 g- t3 m% V" {) e
    ** Input - Frame Sync, Clock and Serializer Rx
) O7 v) d+ X! }3 {6 }% s' Q    ** Output - Serializer Tx is connected to the input of the codec - l3 O1 h, D& m3 @/ B
    */5 \8 T( e/ o, o1 h$ w0 ~4 m
    McASPPinMcASPSet(SOC_MCASP_0_CTRL_REGS, 0xFFFFFFFF);
  c4 ~. _( C( F    McASPPinDirOutputSet(SOC_MCASP_0_CTRL_REGS,, `) v1 u, _2 p; y
                                           MCASP_PIN_AXR(MCASP_XSER_TX)
- n, e2 G0 V2 D* R8 c9 l                                         | MCASP_PIN_AMUTE+ P1 Q% c3 _  I8 T3 H$ w
                                         );( q9 \* P! B3 Q. w! T
    McASPPinDirInputSet(SOC_MCASP_0_CTRL_REGS,8 E5 ~/ p* W  x" a1 X
                                           MCASP_PIN_AFSX
& k0 Y$ K7 q5 D4 X9 `7 G( }                                   | MCASP_PIN_AFSR) w5 r( {/ Q5 O
                 | MCASP_PIN_AHCLKX
, M9 s" s4 e8 X3 Z9 W) l3 R, x$ h                       | MCASP_PIN_AHCLKR9 {# k" ^" e- V, `1 }& N6 M
                       | MCASP_PIN_ACLKX! w# Y0 B6 J0 i1 X/ x( E
                       | MCASP_PIN_ACLKR
2 ?+ b8 i/ `+ k; h& \                                               | MCASP_PIN_AXR(MCASP_XSER_RX)
* g& k$ \# k1 r  k                                               | MCASP_PIN_AXR(1u<<(13u))
, k6 \) M' Q; Q9 H                                               | MCASP_PIN_AXR(1u<<(14u))
6 u- k% I# c$ [# _( R                                               | MCASP_PIN_AXR(1u<<(8u))& K( X# |; T3 B8 L) H
                                               | MCASP_PIN_AXR(1u<<(10u))7 N  j, }- i7 X% p0 _9 e  b2 J
                                               | MCASP_PIN_AXR(1u<<(11u)), p. ~: a1 I  N* S: g% L' O1 u
                                               );
. n+ l8 {# T1 Q" H/ {4 R, X. y( j% q5 D" X) c2 ~5 o
    /* Enable error interrupts for McASP */9 O# ^# X) Y# ?& _# t& ?+ I
    McASPTxIntEnable(SOC_MCASP_0_CTRL_REGS,
7 K3 _9 I" ]' S' `9 V: w* k' ]                                        MCASP_TX_DATAREADY
8 B" T# T$ P( ~# W7 M. |, e                                            | MCASP_TX_CLKFAIL * C1 f" M: `9 \1 u
                                            | MCASP_TX_SYNCERROR
1 f5 [' v3 p" t* Y6 f* g/ Y+ W                                            | MCASP_TX_UNDERRUN);0 s# R, n# R4 Z7 i, i0 L/ B  e: m- q

5 r9 D, j+ o  c' h* v2 S8 x    McASPRxIntEnable(SOC_MCASP_0_CTRL_REGS,
& d; n- g: S9 N2 I- q                                        MCASP_RX_DATAREADY
1 f7 Q# z6 y6 P5 p                                            | MCASP_RX_CLKFAIL
2 r5 E! S- I5 j" W                                            | MCASP_RX_SYNCERROR # b$ u3 E& A( Q( |- o0 l$ T
                                            | MCASP_RX_OVERRUN);
- N+ a9 @# X( G! i  k//MCASP_RX_DMAERROR MCASP_TX_DMAERROR; ^& s: g2 f5 E7 {+ M& |: j" Y5 v
6 ?/ ]$ b. j6 h0 T9 \7 \! B
}
) k& C! B" C* V, T" a& P2 V& T2 n  P) [! X/ x; c
2.运行完上述配置后激活发送接受I2SDataTxRxActivate(); 遇到这个问题:程序无法跳出红色部分的语句0 K0 v" J4 \7 W4 ]% D' p) H+ `
static void I2SDataTxRxActivate(void): F0 Z! J4 G! ^3 J& h7 m4 ]$ o! {
{' {+ g8 I# T$ N. n
    /* Start the clocks */
# E/ d7 p. Y$ w9 z  Z' C    McASPRxClkStart(SOC_MCASP_0_CTRL_REGS, MCASP_RX_CLK_EXTERNAL);1 Q8 C2 m4 ^, r# V4 X& y  }$ ]' T
    McASPTxClkStart(SOC_MCASP_0_CTRL_REGS, MCASP_TX_CLK_EXTERNAL);
0 t8 t% ^, Z* u+ k; L+ L4 A
' v2 E$ v! e2 U7 q+ T6 h7 Z    /* Enable EDMA for the transfer */
+ ]- j: ]/ Y: ]) |5 P//    EDMA3EnableTransfer(SOC_EDMA30CC_0_REGS, EDMA3_CHA_MCASP0_RX,
& T9 c; i+ q0 F$ {//                        EDMA3_TRIG_MODE_EVENT);
( v( N: B6 f: K//    EDMA3EnableTransfer(SOC_EDMA30CC_0_REGS,$ A6 Q* Z9 g( c1 `
//                        EDMA3_CHA_MCASP0_TX, EDMA3_TRIG_MODE_EVENT);; W8 H- N' m, b4 G' q! C) w
    /* Activate the  serializers */
: g9 F! T% O% _) @, F8 @    McASPRxSerActivate(SOC_MCASP_0_CTRL_REGS);; l; E6 B# m% U4 I/ C8 E
    McASPTxSerActivate(SOC_MCASP_0_CTRL_REGS);
* s/ P  s, K% E; i  ?. o  A( d% }7 [
    /* make sure that the XDATA bit is cleared to zero */4 n0 ~8 t7 K7 [; ~3 ?: N
    while(McASPTxStatusGet(SOC_MCASP_0_CTRL_REGS) & MCASP_TX_STAT_DATAREADY);; @$ f$ h  x; [( L
    /* Activate the state machines */! V# G4 Z. H: X
    McASPRxEnable(SOC_MCASP_0_CTRL_REGS);
6 Z& s$ E5 {, n7 R7 X3 ]( G3 G$ G    McASPTxEnable(SOC_MCASP_0_CTRL_REGS);% w  Y$ l0 Z$ {$ b
    McASPTxBufWrite(SOC_MCASP_0_CTRL_REGS, MCASP_XSER_TX, 0);
2 j0 _) Y0 B' O- M  d( h+ Y}! w; v* I5 b; E8 [

0 D2 O; q- t' i$ y) C0 z
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏1 分享淘帖
回复

使用道具 举报

0

主题

184

帖子

1137

积分

QQ游客

积分
1137
沙发
发表于 2015-10-29 17:26:10 | 只看该作者
音频例程的McASP的所有时钟都由外部芯片提供:
7 N* O. ^  H. j9 b% M在音频例程里,2 X- I" N5 Q* W; Z( k9 p1 |
McASP_AHCKLX 外部输入24.576M的时钟,' b/ L5 {/ ~  r4 y2 S# t0 x- q
McASP_CLKX由外部输入1.536M的时钟,$ I7 R  Z: I9 l% d9 q* E, n" k5 T
McASP_AFSX有外部输入48k时钟。
4 l" _2 d5 m9 S+ `0 |: q6 v不能激活McASP是由于McASP_CLKX没有时钟输入,在此引脚提供任意时钟即可通过激活函数。
回复 支持 反对

使用道具 举报

1

主题

5

帖子

1027

积分

金牌会员

Rank: 6Rank: 6

积分
1027
板凳
 楼主| 发表于 2015-10-31 11:40:34 | 只看该作者
Lewis 发表于 2015-10-29 17:26: L/ X: F+ g# ~6 @7 [  o3 P
音频例程的McASP的所有时钟都由外部芯片提供:
9 p6 v5 x' v) |1 M6 p% n在音频例程里,* I/ Y0 J; c! P* w6 E2 ^$ t& }1 l& C
McASP_AHCKLX 外部输入24.576M的时钟,

& M" U. i6 [5 E( [# y. N$ L& g% M2 r谢谢啊,应该是你说的原因。我接上外部时钟,激活是通过了。现在到了判断XSTAT里面的状态那里,一直在死循环判断。没法通过,这又是什么原因?
回复 支持 反对

使用道具 举报

1

主题

5

帖子

1027

积分

金牌会员

Rank: 6Rank: 6

积分
1027
地板
 楼主| 发表于 2015-10-31 11:41:37 | 只看该作者
Ming 发表于 2015-10-31 11:404 T3 {# X" @+ H' b' s
谢谢啊,应该是你说的原因。我接上外部时钟,激活是通过了。现在到了判断XSTAT里面的状态那里,一直在死 ...
7 ^7 h1 I7 ^4 l( H! W; X! _
就是这一句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
4 v0 M# c2 Y+ X9 N. k' n' K) o音频例程的McASP的所有时钟都由外部芯片提供:, r/ M" e6 Q" ?9 J/ t
在音频例程里,5 T8 e/ n, X2 X7 p$ B2 E
McASP_AHCKLX 外部输入24.576M的时钟,

9 M7 i9 U3 _$ ?就是这一句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
2 `6 |0 x: _2 v2 M音频例程的McASP的所有时钟都由外部芯片提供:
' e9 J9 l4 k. L  S2 p: V在音频例程里,! P$ }4 }5 {0 G" t
McASP_AHCKLX 外部输入24.576M的时钟,

9 n. D5 I+ i# X这句while( !(McASPRxStatusGet(SOC_MCASP_0_CTRL_REGS) & MCASP_RX_STAT_DATAREADY));无法通过
回复 支持 反对

使用道具 举报

0

主题

184

帖子

1137

积分

QQ游客

积分
1137
7#
发表于 2015-10-31 21:13:29 | 只看该作者
1、4 v. U4 e% |+ N  g! T( n) ?
McASP_CLKX 和 McASP_AFSX的时钟倍数要正确3 n2 W5 Q& t6 V8 `
2、McASP不支持仿真停止信号,如果加上了软件中断,则后面不能通过此函数。1 R6 z. R7 P) z3 Q( B& b' C

& Z% s  w# M' q7 G9 _& e6 O4 P# J

本帖子中包含更多资源

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

x
回复 支持 反对

使用道具 举报

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

本版积分规则

点击跳转“创龙科技服务通”

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

GMT+8, 2026-3-1 02:51 , Processed in 0.053690 second(s), 26 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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