C6747利用McASP发送中断方式完成音频输入信号的直接输出 - OMAP-L138 - 嵌入式开发者社区 - 51ele.net
设为首页收藏本站

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

查看: 5114|回复: 1
打印 上一主题 下一主题

C6747利用McASP发送中断方式完成音频输入信号的直接输出

[复制链接]

1

主题

1

帖子

23

积分

新手上路

Rank: 1

积分
23
跳转到指定楼层
楼主
发表于 2016-3-15 16:07:18 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
C6747和C6748感觉差不多,我想实现McASP发送中断方式控制音频信号,在轮询的例程基础上改的,轮询程序可以实现,但是中断一直实现不了,也找不到错误,求大神帮忙!下边是主要程序:
/ u# S3 N2 _( O1 W  w: Bmain文件:% U% }6 m+ z* r: `- t
interrupt void interrupt4(void)  8 X" l0 K7 q* T
{# F3 J) v; Z/ d) }9 v8 P/ C+ r
  Uint32 sample;% c  G; Z' K# Q( \# A$ E! m
: S+ ?6 @7 N/ x
  sample = input_sample(); // read L + R samples from ADC
( h! P- {' Z' P$ ~' r+ m) M  output_sample(sample);   // write L + R samples to DAC 4 \( @" ~9 f% `
  return;* J* k- c8 ?( [6 P; O
}" a5 T. p5 r' Y6 u9 _# |; p9 g

# H& K/ Y0 O. i& R- R+ x: vint main( void )
7 G2 i4 [  J+ W* j1 d" o5 Y% Y{! ]$ ^5 Q; \* u  Q  J
) n) O1 t1 w& z0 z/ @
    /* Initialize BSL */
; z7 N  f0 b: T. ]) F  P    EVMC6747_init( );( n! L9 Z# E: }' g8 D
        /* Call evmc6747_intr function */
1 g! V* ]6 W) K8 s1 g    aic3106_init( );3 ]& u% S& w  a5 o  j7 m
        while(1);" G& T9 o# W! K# j
}
6 F. i; d8 ^, k# r# W1 O. l; `

, p! L% x  A  z9 laic3106_init文件的一部分,McASP配置部分,采用内部时钟,I2S方式,同步传输。音频芯片的配置应该没问题
+ n- \) ^! ?7 ~/* Initialize MCASP1 */. |3 f3 E( i9 V+ c1 p
    mcasp = &MCASP_MODULE_1;& ]0 @7 S3 J3 T$ w" Z% V
    mcasp->regs->GBLCTL  = 0;       // Reset
" e  ]3 h' A( V- `3 h% d# M    mcasp->regs->RGBLCTL = 0;       // Reset RX
1 E3 ?+ a% j- Z; h: E    mcasp->regs->XGBLCTL = 0;       // Reset TX
/ D$ E$ m" f9 o1 U/ n* E8 i  t    mcasp->regs->PWRDEMU = 1;       // Free-running
: E4 p4 h1 S, P" U* P. Y   // configure McASP0 receive registers
" O( O6 }# s' M% ]    mcasp->regs->RMASK      = 0xFFFFFFFF; // No padding used6 t0 ~, N7 ^' b' [. ]& }, i
    mcasp->regs->RFMT       = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus
# O+ r4 l9 z" V9 }( h# G    mcasp->regs->AFSRCTL    = 0x00000112; // 2TDM, 1bit Falling, External FS, word
$ _# ?" b. q2 {4 b    mcasp->regs->ACLKRCTL   = 0x000000AF; // Rising INTERNAL CLK,(from tx side)$ c* B5 P1 y# W- F# l8 H; ?, @
    mcasp->regs->AHCLKRCTL  = 0x00000000; // INT CLK (from tx side)
3 ?8 p* a. z% b8 b    mcasp->regs->RTDM       = 0x00000003; // Slots 0,1% b: `1 s1 r  m- y; R/ x/ o$ s
    mcasp->regs->RINTCTL    = 0x00000000; // Not used9 m1 O2 c. o0 ~7 n: D# j
    mcasp->regs->RCLKCHK    = 0x00FF0008; // 255-MAX 0-MIN, div-by-256: |2 |" t$ a! ?" E. G

& o" B+ V/ N2 a% F& u3 N    mcasp->regs->XMASK      = 0xFFFFFFFF; // No padding used; i  M9 a/ k1 ]6 V7 a0 Y8 I
    mcasp->regs->XFMT       = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus* H$ S! E/ k; @# ]5 Z, s; H
    mcasp->regs->AFSXCTL    = 0x00000112; // 2TDM, 1bit Rising edge INTERNAL FS, word! I9 ^. \0 M+ }3 H2 s( U2 ]" K
    mcasp->regs->ACLKXCTL   = 0x000000AF; // ASYNC, Rising INTERNAL CLK, div-by-16% O: U& W2 I0 \
    mcasp->regs->AHCLKXCTL  = 0x00000000; // EXT CLK# f/ r, K* t+ b- l7 R* H5 P& D/ f
    mcasp->regs->XTDM       = 0x00000003; // Slots 0,1
, R, O* h! N3 j. m1 ]1 N    mcasp->regs->XINTCTL    = 0x00000020; // interrupt on transmit# `; x8 N+ e" O7 I6 M
    mcasp->regs->XCLKCHK    = 0x00FF0008; // 255-MAX 0-MIN, div-by-256' B+ R" l9 C1 q& o) `+ Y* u

6 M8 W2 T+ i% D0 t    mcasp->regs->SRCTL5     = 0x000D;     // MCASP1.AXR1[5] --> DIN
0 s! [4 T0 c* f6 p5 r9 I2 C    mcasp->regs->SRCTL0     = 0x000E;     // MCASP1.AXR1[0] <-- DOUT4 x! X/ l: u+ k/ ^  A
    mcasp->regs->PFUNC      = 0;          // All MCASPs3 n* d( C9 q0 A3 j' Y
    mcasp->regs->PDIR       = 0x14000020; // All inputs except AXR0[5], ACLKX1, AFSX1
5 G, C5 o# }, @+ ?, F3 V, y; |- Q# q3 e) Q$ |
    mcasp->regs->DITCTL     = 0x00000000; // Not used
) w- T) D, B7 M% u& Q8 w5 C* m7 D    mcasp->regs->DLBCTL     = 0x00000000; // Not used
. P4 @7 k, F2 S4 }    mcasp->regs->AMUTE      = 0x00000000; // Not used
/ K; z8 {3 w' U: ?1 r( z
3 [0 C/ _" X: d/* Starting sections of the McASP*/
) R" E+ B0 I' O" c    mcasp->regs->XGBLCTL |= GBLCTL_XHCLKRST_ON; 4 v" N0 x% m: @5 G* ~8 ?
    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XHCLKRST_ON ) != GBLCTL_XHCLKRST_ON );  , b! o( Y7 q9 i/ U; @
    mcasp->regs->RGBLCTL |= GBLCTL_RHCLKRST_ON;
6 U4 ^& S2 X4 Z/ U4 t4 }; v4 {5 y& Z( P    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RHCLKRST_ON ) != GBLCTL_RHCLKRST_ON );
; M' R# U* |2 n# ^+ |$ ~2 p7 v# ]! q- K0 Z8 P
    mcasp->regs->XGBLCTL |= GBLCTL_XCLKRST_ON; / f; {- }8 v3 P0 f6 l
    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XCLKRST_ON ) != GBLCTL_XCLKRST_ON );
( e4 [/ s- n$ `# o( B3 ^3 a1 P4 z    mcasp->regs->RGBLCTL |= GBLCTL_RCLKRST_ON;
: ]! \' I  G  y0 }6 C: e- u" z    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RCLKRST_ON ) != GBLCTL_RCLKRST_ON );0 J  V( J; l! K% Y+ C2 k4 c. ?
8 U* c/ h! B" q2 N9 F7 Z" q/ u; |
    mcasp->regs->XSTAT = 0x0000ffff;
$ y7 F7 ]$ ?0 i$ }4 a- c    mcasp->regs->RSTAT = 0x0000ffff;
4 {# z% G# B- B0 e
5 _, M  W5 C6 ~: I6 a% |; }    mcasp->regs->XGBLCTL |= GBLCTL_XSRCLR_ON;
% I5 K# i9 D2 J1 M- a- L    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSRCLR_ON ) != GBLCTL_XSRCLR_ON );
# O$ P' q* C' H    mcasp->regs->RGBLCTL |= GBLCTL_RSRCLR_ON; 5 L# b- J4 y+ U- n
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSRCLR_ON ) != GBLCTL_RSRCLR_ON );. e7 `0 n1 g, D& F/ O

1 E) x6 \6 |" @2 D4 c. i    /* Write a 0, so that no underrun occurs after releasing the state machine */
  O3 I& F% W& I8 N7 c    mcasp->regs->XBUF5 = 0;7 K% \! c7 B( x2 n7 g+ G; n
    mcasp->regs->RBUF0 = 0;% I4 ^1 X  }: C; u4 |7 `9 _

) j! Y8 ^" E: Z    mcasp->regs->XGBLCTL |= GBLCTL_XSMRST_ON; ! e; M9 a$ u5 k3 s5 s) x5 l
    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSMRST_ON ) != GBLCTL_XSMRST_ON );
$ h) }0 L: Z% V/ s9 @; T! F    mcasp->regs->RGBLCTL |= GBLCTL_RSMRST_ON; 7 N* H# @/ D; b$ X( Y( _# B
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSMRST_ON ) != GBLCTL_RSMRST_ON );# ^: X6 S! l6 P6 ]; s3 C( h, f
5 N, u, g; E# O% R! g
    mcasp->regs->XGBLCTL |= GBLCTL_XFRST_ON; $ A2 M2 C# a. s# O. u4 M/ K) J
    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XFRST_ON ) != GBLCTL_XFRST_ON );
6 \1 X# B- K2 ?! t, p    mcasp->regs->RGBLCTL |= GBLCTL_RFRST_ON;
' }1 V1 G, S& X9 ~" w$ t  ?3 K    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RFRST_ON ) != GBLCTL_RFRST_ON );
( N, _, f4 x3 N8 d( N7 d9 ~
6 ^5 e/ @8 E3 g; a* M) v    CSR = 0x0000;) ^/ Q+ I3 l8 ^
    INTC_INTMUX1 = 0x3d;
; D6 ^0 n1 H7 j, a  Z* n  I    ISTP = (unsigned int)vectors;# M5 J( B! u7 G2 g( b
    ICR = 0xFFF0;  ) H! D: [- Y8 U3 s% p+ F* ?
    IER |= 0x12;  * m7 S* S1 w/ m
    CSR |= 0x01;  
' ?* ?+ a6 Y" V  R
2 f" _" U4 |$ h' t* O" B
  e  y- W5 ]: Z( b, p/ P- ]* ^% s+ P/ _9 v6 O7 `+ |  B! t* H: H/ g
还有就是两个输入输出函数:; ]5 `3 C" r# f( ^8 _
void output_sample(Int32 out_data)1 O  \8 j  z" M& z0 ~6 `) u
{
( u9 a6 N2 ]# B9 J6 z, ^9 T  AIC31_data.uint = out_data;  
) C/ A5 W( [$ B& P* ?2 j! f: X! E  MCASP1_XBUF5_32BIT = AIC31_data.uint;
: v9 ^; `4 @, E4 p9 T}
: \) j% b/ B. j9 p
) K9 Q! T: {# ~, _) ~; YInt32 input_sample(void)
8 P; c! A: D! Q' c. N{  
& V9 j+ M8 a4 d  AIC31_data.uint = MCASP1_RBUF0_32BIT;  w$ H* y) z# y+ w9 i. z8 n
  return (AIC31_data.uint);
" l' n# a' G" W/ D. E; j/ m}/ R0 w' N* G- J' H; e0 R2 K: q

# U  B6 J1 F. n9 L
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖
回复

使用道具 举报

3

主题

852

帖子

3538

积分

创龙

Rank: 8Rank: 8

积分
3538
沙发
发表于 2016-3-16 11:55:59 | 只看该作者
可以参看创龙提供的例程:AUDIO_LINE_OUT_INTR——Line Out 音频输出(中断方式)
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-7-7 07:16 , Processed in 0.036906 second(s), 24 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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