C6747利用McASP发送中断方式完成音频输入信号的直接输出 - OMAP-L138 - 嵌入式开发者社区 - 51ele.net
设为首页收藏本站
点击跳转“创龙科技服务通”

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

1

主题

1

帖子

23

积分

新手上路

Rank: 1

积分
23
跳转到指定楼层
楼主
发表于 2016-3-15 16:07:18 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
C6747和C6748感觉差不多,我想实现McASP发送中断方式控制音频信号,在轮询的例程基础上改的,轮询程序可以实现,但是中断一直实现不了,也找不到错误,求大神帮忙!下边是主要程序:
# T$ K$ J, S5 t5 r7 K, x& \main文件:0 W4 j- y8 {( g  Q% s
interrupt void interrupt4(void)  
& K& p/ D! V$ I+ T7 {{
. ~% Q" N& ]2 A, }  Uint32 sample;
! R" K: Z1 Y7 M6 ], R% \* f2 h7 j: d: B) q% o4 j! ^
  sample = input_sample(); // read L + R samples from ADC
) n( g; R0 Y0 t/ \* g# `- p  output_sample(sample);   // write L + R samples to DAC
1 S' j7 f5 a2 m# h$ b) U9 H  return;
( S- c6 d( d3 }  |1 \9 W}9 S" i$ a& s7 V0 ]: P& J$ n: E8 e

" k+ t/ x  w/ U- i. bint main( void )
8 N6 h( x% n  O* s{5 r- u6 q2 I/ j5 k, ~6 ]+ ]* O. v1 d9 S
( O. y0 o: l" m; Q2 u
    /* Initialize BSL */
' r, V' \0 d4 J7 @. i4 K0 H' B1 O3 W    EVMC6747_init( );( [/ X8 p  w' x- h$ A! X
        /* Call evmc6747_intr function */
9 S9 m+ f6 Y. B    aic3106_init( );# h3 p0 m: D% M. e& L, S% K
        while(1);# [  L' z8 l2 ?) F8 }
}
2 O; p: B  T+ Q, b/ }' ]
9 q" g( Q0 _4 \3 P6 G! j9 m5 M6 a, C. g+ v2 x! d
aic3106_init文件的一部分,McASP配置部分,采用内部时钟,I2S方式,同步传输。音频芯片的配置应该没问题" J' |9 U  b) w* w
/* Initialize MCASP1 */1 u( J9 P! u& c- ~
    mcasp = &MCASP_MODULE_1;
' K; U6 O: P6 ~    mcasp->regs->GBLCTL  = 0;       // Reset7 i7 W* D/ R% w
    mcasp->regs->RGBLCTL = 0;       // Reset RX# t9 r7 U6 X8 e9 J
    mcasp->regs->XGBLCTL = 0;       // Reset TX
6 U/ q* B( A4 _5 i. T' }( B    mcasp->regs->PWRDEMU = 1;       // Free-running
6 M2 r0 d1 r1 A7 ]. N6 v   // configure McASP0 receive registers' e/ z# U( k2 b1 F' b6 I* f+ p
    mcasp->regs->RMASK      = 0xFFFFFFFF; // No padding used
! T9 j: n, h& ?* j    mcasp->regs->RFMT       = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus) D3 H% w5 T2 S5 c/ S
    mcasp->regs->AFSRCTL    = 0x00000112; // 2TDM, 1bit Falling, External FS, word
' a3 o( m- @" F( s' H% F5 L3 n    mcasp->regs->ACLKRCTL   = 0x000000AF; // Rising INTERNAL CLK,(from tx side)
. l& p, A5 O( V2 [5 ^; M( p& ?    mcasp->regs->AHCLKRCTL  = 0x00000000; // INT CLK (from tx side)
: ^' q6 j0 l6 O% r1 r    mcasp->regs->RTDM       = 0x00000003; // Slots 0,18 T, i& I; m' p! o
    mcasp->regs->RINTCTL    = 0x00000000; // Not used0 v6 P; Q# e' u2 P  w3 }; s) D8 b/ X
    mcasp->regs->RCLKCHK    = 0x00FF0008; // 255-MAX 0-MIN, div-by-256% ~- N( m0 E. \4 b

( \) K- b+ h* I2 m0 k    mcasp->regs->XMASK      = 0xFFFFFFFF; // No padding used
; }# `. R3 d& D; T$ Y    mcasp->regs->XFMT       = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus: `9 H! b& T2 _- d. x& A2 R( T
    mcasp->regs->AFSXCTL    = 0x00000112; // 2TDM, 1bit Rising edge INTERNAL FS, word, ^" w) l4 b) z7 i' i6 A
    mcasp->regs->ACLKXCTL   = 0x000000AF; // ASYNC, Rising INTERNAL CLK, div-by-16
1 j; r# ?9 e' _  d    mcasp->regs->AHCLKXCTL  = 0x00000000; // EXT CLK
" p/ Q# L8 X) d  B- a8 y0 t    mcasp->regs->XTDM       = 0x00000003; // Slots 0,1
  A+ a2 ?6 _( S5 i    mcasp->regs->XINTCTL    = 0x00000020; // interrupt on transmit3 o( b( V- }/ X! y  ^# u
    mcasp->regs->XCLKCHK    = 0x00FF0008; // 255-MAX 0-MIN, div-by-256
: K: [7 p$ J2 S+ z! s' t' R3 p# y$ e! c# B$ ^3 g# g. |( }
    mcasp->regs->SRCTL5     = 0x000D;     // MCASP1.AXR1[5] --> DIN
) X7 j, Z. U, n/ m    mcasp->regs->SRCTL0     = 0x000E;     // MCASP1.AXR1[0] <-- DOUT
6 m' R; R0 u, O% y8 O    mcasp->regs->PFUNC      = 0;          // All MCASPs6 G9 }5 @8 @* o2 J3 x9 Q  a5 x
    mcasp->regs->PDIR       = 0x14000020; // All inputs except AXR0[5], ACLKX1, AFSX1: F! X; q$ F3 u) j% H
6 }/ a( @- N/ A1 u
    mcasp->regs->DITCTL     = 0x00000000; // Not used# k$ p7 u: x  J6 K
    mcasp->regs->DLBCTL     = 0x00000000; // Not used3 Y( |. Z7 D4 t& m" d3 g8 [: g; e% U
    mcasp->regs->AMUTE      = 0x00000000; // Not used
  X( d; {0 l+ A$ ]: q1 k7 g+ r4 T1 ^! g* |# X) `' G; O& z
/* Starting sections of the McASP*/# I* J! z7 \. o( v) t; w4 V8 x* z
    mcasp->regs->XGBLCTL |= GBLCTL_XHCLKRST_ON;
) V. _2 B2 i3 {) I% _8 b    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XHCLKRST_ON ) != GBLCTL_XHCLKRST_ON );  ( n- @5 x$ p! ~+ G- Q( n3 H
    mcasp->regs->RGBLCTL |= GBLCTL_RHCLKRST_ON; / p! O+ m. U, ?/ J, f3 x$ h
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RHCLKRST_ON ) != GBLCTL_RHCLKRST_ON );
  f' m6 R- q2 }, ~- z" \+ w$ H  b
: k& g% U+ i9 Y5 s    mcasp->regs->XGBLCTL |= GBLCTL_XCLKRST_ON; ( ~' R, Z/ Y$ ?. Y6 N# t
    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XCLKRST_ON ) != GBLCTL_XCLKRST_ON );  j3 y) R2 _( j7 u. o
    mcasp->regs->RGBLCTL |= GBLCTL_RCLKRST_ON;
  Y5 X2 g# Y4 k0 s+ j; X    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RCLKRST_ON ) != GBLCTL_RCLKRST_ON );$ z/ \# e0 I: G# s0 ^* O1 N

2 G3 F4 t" G: C    mcasp->regs->XSTAT = 0x0000ffff; ; S. g. q; n6 T
    mcasp->regs->RSTAT = 0x0000ffff; + c. q7 n6 T7 I6 k

6 [$ m8 ~8 ~! S- a  @1 c    mcasp->regs->XGBLCTL |= GBLCTL_XSRCLR_ON;
) a( V# y3 f& m1 [    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSRCLR_ON ) != GBLCTL_XSRCLR_ON );' k+ ]- @+ L( F
    mcasp->regs->RGBLCTL |= GBLCTL_RSRCLR_ON; - u. k& _7 V& T1 _
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSRCLR_ON ) != GBLCTL_RSRCLR_ON );
" ]3 f# S+ H# `- T5 h
- p& _3 S7 R( p    /* Write a 0, so that no underrun occurs after releasing the state machine */
& v  b# s4 h" z8 S: g    mcasp->regs->XBUF5 = 0;5 P+ u- c& V$ S* j6 F& c
    mcasp->regs->RBUF0 = 0;
* M2 M$ Z% B2 R- V- i  B, `
2 v5 b9 k: f+ L  P- ^    mcasp->regs->XGBLCTL |= GBLCTL_XSMRST_ON;
! ?- R7 f8 A% X" y    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSMRST_ON ) != GBLCTL_XSMRST_ON );
9 n. @9 _/ {' Y& @0 y    mcasp->regs->RGBLCTL |= GBLCTL_RSMRST_ON;
5 i5 N* D$ C/ O3 u( V    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSMRST_ON ) != GBLCTL_RSMRST_ON );$ N" {; K* e1 b  j1 ]/ ~

- |6 W4 V- u  Y0 X$ G" B    mcasp->regs->XGBLCTL |= GBLCTL_XFRST_ON; ( A- N/ \% T8 M) W$ y9 e$ I  l  j
    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XFRST_ON ) != GBLCTL_XFRST_ON );
' i: D1 `3 v6 q/ C# d: ]7 ?. x; E    mcasp->regs->RGBLCTL |= GBLCTL_RFRST_ON;
) N! j: }: K" t/ \. U    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RFRST_ON ) != GBLCTL_RFRST_ON );0 G, i4 H7 Q4 u$ m+ ^7 `% s% h  E
5 T3 z6 R/ ?+ w  v) e6 }; ~
    CSR = 0x0000;
$ R" b! T3 U( M9 c    INTC_INTMUX1 = 0x3d;
* |5 G% v) J# s, t8 E    ISTP = (unsigned int)vectors;
) t# D' [; v9 `; {( ?    ICR = 0xFFF0;  2 s4 O! y) N4 C) G  u7 J5 ?
    IER |= 0x12;  
  U4 o6 o( ]7 D0 b+ ]5 L    CSR |= 0x01;  4 o3 n8 }9 _7 l* r" _
9 E' h  i. n7 u- J# ~
' |! _; R/ u5 m9 A- F% d/ Z
$ b4 W' f3 m+ X2 J/ e  ], `6 q
还有就是两个输入输出函数:" d) J, u+ s% U8 K
void output_sample(Int32 out_data)) C7 r: d, L/ y
{
7 w" o& P9 u: d' T: x; K2 P1 i  AIC31_data.uint = out_data;  1 T1 u0 x. ?" N5 c# h
  MCASP1_XBUF5_32BIT = AIC31_data.uint;" L1 [( a2 s3 C4 o4 Y% q  b
}
5 H. }/ Z: m4 `8 t- i3 r* g* k  n8 q
Int32 input_sample(void)
0 r( I; P  ?/ b: S4 j{  8 b$ @! S7 S& ^) G3 m% Q: Y
  AIC31_data.uint = MCASP1_RBUF0_32BIT;8 N  o! |* y+ v2 \* k: G/ C. Q2 g( F. e
  return (AIC31_data.uint);# V5 t/ \" z' \/ ?8 y8 r" x
}
3 A8 L9 }* v/ a& W4 y) l: P' M
* _. S- @! I* ^
分享到:  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, 2026-3-30 10:33 , Processed in 0.042086 second(s), 24 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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