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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

1

主题

1

帖子

23

积分

新手上路

Rank: 1

积分
23
跳转到指定楼层
楼主
发表于 2016-3-15 16:07:18 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
C6747和C6748感觉差不多,我想实现McASP发送中断方式控制音频信号,在轮询的例程基础上改的,轮询程序可以实现,但是中断一直实现不了,也找不到错误,求大神帮忙!下边是主要程序:1 a3 e7 i, R( n6 f6 n0 H# ^
main文件:: H* t" R+ u7 S' A
interrupt void interrupt4(void)  
) L/ d( q4 N6 S% r{
' h) t9 l3 a# O  Uint32 sample;7 ^. i: z) |( S

0 A. q/ x1 ]  F% D5 [; N3 h  sample = input_sample(); // read L + R samples from ADC( R; s7 I) f, N/ O- N
  output_sample(sample);   // write L + R samples to DAC # [- }# L& M; {& i; B
  return;
$ k& G4 H8 \4 ^6 k}
+ `2 k/ P# z! \% C$ B+ f$ l0 }' M5 I9 ~; @! \+ V
int main( void )
+ S* t9 N$ x) M" z: q{& W9 i  y9 d3 v

. P) u4 `" n. C* I    /* Initialize BSL */2 V6 ^% s- ^. ]' |- A! J
    EVMC6747_init( );
) W6 q5 |! C7 T" o$ l        /* Call evmc6747_intr function */
; S+ r5 ~: T6 W2 J8 }4 m    aic3106_init( );1 a) L$ c  E" ]# l) p
        while(1);) l( ~# K6 a. Q: l
}
5 _- ~) w% ?: [6 T% A$ a6 Z
. K5 j. X1 e6 }  b( D# F
1 d# B4 H/ x0 [3 M- s2 _aic3106_init文件的一部分,McASP配置部分,采用内部时钟,I2S方式,同步传输。音频芯片的配置应该没问题2 _" ]# Z2 L* T
/* Initialize MCASP1 */
3 ^7 C( r! X: Q7 o/ h( W+ W6 C1 K    mcasp = &MCASP_MODULE_1;9 v& L+ @6 c8 Q" s
    mcasp->regs->GBLCTL  = 0;       // Reset9 d  s! g6 }; a. E( X$ C+ p: m
    mcasp->regs->RGBLCTL = 0;       // Reset RX- y' K* j: k2 w2 f: P
    mcasp->regs->XGBLCTL = 0;       // Reset TX
% w# t6 g. x9 e) X7 l+ k    mcasp->regs->PWRDEMU = 1;       // Free-running2 p3 ~: G0 B# W
   // configure McASP0 receive registers! g) {$ S/ t% B- _5 }# d' v' m
    mcasp->regs->RMASK      = 0xFFFFFFFF; // No padding used
* E1 b4 Z0 _8 |5 @  e/ K( @    mcasp->regs->RFMT       = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus
4 s" R2 n' E5 P  I1 C5 c    mcasp->regs->AFSRCTL    = 0x00000112; // 2TDM, 1bit Falling, External FS, word! r" p: W: P) ]% i& ?
    mcasp->regs->ACLKRCTL   = 0x000000AF; // Rising INTERNAL CLK,(from tx side)
$ V1 M! I4 `7 O& Z( A) L    mcasp->regs->AHCLKRCTL  = 0x00000000; // INT CLK (from tx side)
6 H& J$ f8 e1 L% o; v+ d# P; h2 J7 P    mcasp->regs->RTDM       = 0x00000003; // Slots 0,16 W5 h) k: R, E3 i2 s, v
    mcasp->regs->RINTCTL    = 0x00000000; // Not used2 H  w! P8 l3 J, _
    mcasp->regs->RCLKCHK    = 0x00FF0008; // 255-MAX 0-MIN, div-by-256
) }. X/ i+ P" W' i  i% r
4 y! d0 Z5 ~9 E9 e    mcasp->regs->XMASK      = 0xFFFFFFFF; // No padding used
" A7 Z7 N4 {) u9 X/ X. I    mcasp->regs->XFMT       = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus% ?5 C8 m6 Y" ?: ~3 \
    mcasp->regs->AFSXCTL    = 0x00000112; // 2TDM, 1bit Rising edge INTERNAL FS, word
! p% l) h; w% E4 n  q    mcasp->regs->ACLKXCTL   = 0x000000AF; // ASYNC, Rising INTERNAL CLK, div-by-16
* |" B1 H; d: v5 G( t    mcasp->regs->AHCLKXCTL  = 0x00000000; // EXT CLK
% _9 o% [( v/ j    mcasp->regs->XTDM       = 0x00000003; // Slots 0,1! C, Y. S2 W+ W) N2 U* G2 @
    mcasp->regs->XINTCTL    = 0x00000020; // interrupt on transmit$ T$ \9 e+ [  n+ G
    mcasp->regs->XCLKCHK    = 0x00FF0008; // 255-MAX 0-MIN, div-by-256
6 \3 _7 s+ f7 y+ S0 r2 h& ?! z5 b
2 n: }% ?) U% M& Z$ E" ]. Z2 f" y    mcasp->regs->SRCTL5     = 0x000D;     // MCASP1.AXR1[5] --> DIN
6 M+ r5 r: h. n1 J9 q    mcasp->regs->SRCTL0     = 0x000E;     // MCASP1.AXR1[0] <-- DOUT
1 L0 l3 U" U* X    mcasp->regs->PFUNC      = 0;          // All MCASPs9 O0 }& i: D" e# v
    mcasp->regs->PDIR       = 0x14000020; // All inputs except AXR0[5], ACLKX1, AFSX1
- g1 d" X8 h" s
. d- v$ b4 ^7 L1 s. ^. X7 ?    mcasp->regs->DITCTL     = 0x00000000; // Not used
1 `( }9 v  ~- `+ y5 X4 n9 F( C4 ?    mcasp->regs->DLBCTL     = 0x00000000; // Not used
& i% |! R* {* k    mcasp->regs->AMUTE      = 0x00000000; // Not used
, }# A: D( l9 c4 N& y* q
+ Y, U$ m/ r/ b! D/* Starting sections of the McASP*/' W$ P! C) l" z9 q
    mcasp->regs->XGBLCTL |= GBLCTL_XHCLKRST_ON; ; I9 M8 ~1 V9 T3 f
    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XHCLKRST_ON ) != GBLCTL_XHCLKRST_ON );  
4 n% G& Y" E; f& U& ]/ d    mcasp->regs->RGBLCTL |= GBLCTL_RHCLKRST_ON;
0 O' H+ c* ~9 z% D2 T, F    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RHCLKRST_ON ) != GBLCTL_RHCLKRST_ON );' f" Y) ?1 H% e  Y) ~

3 z" Q/ r2 j3 x$ f( @$ r7 I    mcasp->regs->XGBLCTL |= GBLCTL_XCLKRST_ON; / ~. ?8 s4 b. u0 T1 j- {: o
    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XCLKRST_ON ) != GBLCTL_XCLKRST_ON );
2 r7 T9 w3 r% k6 r# z( ^    mcasp->regs->RGBLCTL |= GBLCTL_RCLKRST_ON; 0 e5 C! z: C4 u
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RCLKRST_ON ) != GBLCTL_RCLKRST_ON );
# E0 Y- V! G6 H, R! O1 l$ X9 p( D$ {* s# a( i
    mcasp->regs->XSTAT = 0x0000ffff;
7 s# O2 |9 M$ R! I& e. Z0 C, M: L    mcasp->regs->RSTAT = 0x0000ffff; / @: H& V- y4 C# Q9 p2 ?7 Y' x
+ W/ K8 c, I+ j2 J& m
    mcasp->regs->XGBLCTL |= GBLCTL_XSRCLR_ON;3 b+ n+ @* q: u2 q  R! }
    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSRCLR_ON ) != GBLCTL_XSRCLR_ON );, m1 }( `8 {" F0 u. A+ F
    mcasp->regs->RGBLCTL |= GBLCTL_RSRCLR_ON; $ ]) f8 e& ]1 i1 s4 W
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSRCLR_ON ) != GBLCTL_RSRCLR_ON );
4 S/ I: i( s- `/ N
# H* j+ S* K% W    /* Write a 0, so that no underrun occurs after releasing the state machine */% \7 T$ ^+ J7 l% R
    mcasp->regs->XBUF5 = 0;
7 E* X1 r/ o, {    mcasp->regs->RBUF0 = 0;
* ]% Z! J7 S; v6 E1 G
$ o6 g2 S( m% m! n" m9 ]    mcasp->regs->XGBLCTL |= GBLCTL_XSMRST_ON; ; T" D* }' n! C* S
    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSMRST_ON ) != GBLCTL_XSMRST_ON );
/ x5 R$ |: ^, N% G4 u' ~( {- o    mcasp->regs->RGBLCTL |= GBLCTL_RSMRST_ON; 7 H: j5 j- _5 _0 ?) p( q6 r
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSMRST_ON ) != GBLCTL_RSMRST_ON );+ H/ S, a3 t8 L0 \( M

8 m5 e5 T, }1 w" J# t0 Z4 ]    mcasp->regs->XGBLCTL |= GBLCTL_XFRST_ON;
# Y# c5 v( m) O+ x; t    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XFRST_ON ) != GBLCTL_XFRST_ON );% V% ^) q/ q4 K4 U1 m' d
    mcasp->regs->RGBLCTL |= GBLCTL_RFRST_ON; % w' U3 c3 ]/ x$ l, u
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RFRST_ON ) != GBLCTL_RFRST_ON );
. q( r* D# b; O3 [) T8 Y2 Y3 E* [# ^/ J, {: k' i
    CSR = 0x0000;
- c7 P( g( Y# b    INTC_INTMUX1 = 0x3d;$ H4 F3 g( e" {7 W- `- W: V
    ISTP = (unsigned int)vectors;3 H1 Y: z* k" K2 R' |
    ICR = 0xFFF0;  
  n4 n& M% j% m0 y9 y; ~    IER |= 0x12;  
4 F( r% f( `9 d  b    CSR |= 0x01;  : `1 l6 C. j3 d3 U  Y( f2 i

6 R5 a3 e6 J! C/ d+ N3 @4 D
" d0 @9 ]( Y* u! E( z6 s3 ^: k5 }& q( U' @- x# P. q2 r/ p
还有就是两个输入输出函数:* F# v- Z6 G! F& `5 P: o
void output_sample(Int32 out_data)
& m9 W# w! e( g" ]{/ S+ p  h% K- H6 R& X
  AIC31_data.uint = out_data;  ' x: f# A3 E; K  m8 G0 |9 ]4 k
  MCASP1_XBUF5_32BIT = AIC31_data.uint;$ s: l1 [8 y) P1 s
}! ], Q% C; p3 d, c6 ?7 O
8 j! ~* p0 g6 r  z2 n3 X
Int32 input_sample(void)7 [1 y6 H1 y& K1 A" X8 l7 v
{  9 `+ @' k( N' \, g* ]* m( q4 i
  AIC31_data.uint = MCASP1_RBUF0_32BIT;
+ F* ^3 q+ v/ Z- k6 d0 m% B  return (AIC31_data.uint);
, z. _$ u  i! J' b3 f) m}8 J9 |5 U2 y' ~' `: F; ?+ Q
7 `0 G! _) r. Y; d- ?) M
分享到:  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-11-18 12:05 , Processed in 0.040030 second(s), 24 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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