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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

1

主题

1

帖子

23

积分

新手上路

Rank: 1

积分
23
跳转到指定楼层
楼主
发表于 2016-3-15 16:07:18 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
C6747和C6748感觉差不多,我想实现McASP发送中断方式控制音频信号,在轮询的例程基础上改的,轮询程序可以实现,但是中断一直实现不了,也找不到错误,求大神帮忙!下边是主要程序:# Y0 j+ d! Q+ _* \3 Q
main文件:1 c) H" T2 t' R9 H5 j$ ^
interrupt void interrupt4(void)  
! U: m  O& U# L8 W1 U6 u{) d; r! {- f6 Q3 a# F, i  J
  Uint32 sample;
" N7 ~) ]& z8 i
' o- X- S2 r3 u. e  sample = input_sample(); // read L + R samples from ADC
6 R6 H6 `! B6 D7 V+ t  output_sample(sample);   // write L + R samples to DAC
: h5 i5 Q! ~& ?  return;
* O4 l. r: n3 {7 ~" b% R: i4 N}
! Q" ^% R' H; S& G9 P/ L: M. t( I# X/ ^2 l
int main( void )
5 Y/ Q, W( _: |{8 ~  U8 k" J. J: Z) E
8 N+ |0 K4 j0 ~* i' m
    /* Initialize BSL */
; ?, f7 g( s, J; G# @) m# I/ E    EVMC6747_init( );: O/ N6 t  L9 t  n9 D, j( i
        /* Call evmc6747_intr function */4 j" L8 \% P& V+ u
    aic3106_init( );
- s9 i' e1 x0 N1 p$ }6 o& o        while(1);
, R* ~) F6 W, T2 S3 K7 Y}
' S& O4 `/ l. O" L$ s# \7 ^1 \6 x( v) ?; V
! I/ G$ Y6 d3 ~4 b7 ^% o
aic3106_init文件的一部分,McASP配置部分,采用内部时钟,I2S方式,同步传输。音频芯片的配置应该没问题
  o" w/ f! O- I0 D6 R" H  [( m/* Initialize MCASP1 */
7 b! j/ T: i! ^3 k' C2 V; z* W    mcasp = &MCASP_MODULE_1;0 r' j0 s; C$ r5 d" b
    mcasp->regs->GBLCTL  = 0;       // Reset$ Y+ Q$ q2 A" F, o
    mcasp->regs->RGBLCTL = 0;       // Reset RX. p6 K$ H$ Z2 E2 c( ^) y9 h2 ?; s
    mcasp->regs->XGBLCTL = 0;       // Reset TX
$ w* q0 }/ H/ j    mcasp->regs->PWRDEMU = 1;       // Free-running! O5 g) z! G& E2 a
   // configure McASP0 receive registers' h8 X7 f, Y8 N5 ?, Y
    mcasp->regs->RMASK      = 0xFFFFFFFF; // No padding used
$ a; h, \: G1 ^' s) a" g    mcasp->regs->RFMT       = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus
8 |* ?7 w2 t5 f    mcasp->regs->AFSRCTL    = 0x00000112; // 2TDM, 1bit Falling, External FS, word
' B6 ~! r4 s, C6 p    mcasp->regs->ACLKRCTL   = 0x000000AF; // Rising INTERNAL CLK,(from tx side)- @6 F& ~# T3 E$ @# Q9 s
    mcasp->regs->AHCLKRCTL  = 0x00000000; // INT CLK (from tx side)
5 B$ {5 w  n/ C: g; U& [: G/ g* ?1 u% y$ N    mcasp->regs->RTDM       = 0x00000003; // Slots 0,1
& C  b+ m" I1 Z& u$ Q  B    mcasp->regs->RINTCTL    = 0x00000000; // Not used
' q; m8 e/ W. H    mcasp->regs->RCLKCHK    = 0x00FF0008; // 255-MAX 0-MIN, div-by-256
( E5 b8 U. L- @7 E* b
$ |" ?# ]% P, G1 i9 \    mcasp->regs->XMASK      = 0xFFFFFFFF; // No padding used% ?. `. b5 q* ?& I4 H) y. \
    mcasp->regs->XFMT       = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus+ t/ S% [' x9 ?" s+ S# i2 P
    mcasp->regs->AFSXCTL    = 0x00000112; // 2TDM, 1bit Rising edge INTERNAL FS, word% v9 w6 f1 g" E2 A4 ]" Q9 ^) a
    mcasp->regs->ACLKXCTL   = 0x000000AF; // ASYNC, Rising INTERNAL CLK, div-by-168 k5 r- k5 p- @7 H" i( Q: z
    mcasp->regs->AHCLKXCTL  = 0x00000000; // EXT CLK( I" h! k  h8 B1 v8 c/ S
    mcasp->regs->XTDM       = 0x00000003; // Slots 0,1
/ U5 q  B& E1 r$ Q    mcasp->regs->XINTCTL    = 0x00000020; // interrupt on transmit
8 ]' G% R* ~' i. F4 M) j1 E7 m    mcasp->regs->XCLKCHK    = 0x00FF0008; // 255-MAX 0-MIN, div-by-256
9 b% {: n$ U+ F9 F8 o& z: i
7 W$ n1 R- z3 \3 i) m    mcasp->regs->SRCTL5     = 0x000D;     // MCASP1.AXR1[5] --> DIN# z* l$ f: F2 ]
    mcasp->regs->SRCTL0     = 0x000E;     // MCASP1.AXR1[0] <-- DOUT2 o0 h3 s8 `5 M  |9 a0 q
    mcasp->regs->PFUNC      = 0;          // All MCASPs
1 P' Q1 H) S3 q0 d3 s$ |; H$ O# U1 o    mcasp->regs->PDIR       = 0x14000020; // All inputs except AXR0[5], ACLKX1, AFSX1/ R1 q' U* C; M' V
/ f2 T2 d' b9 j! s
    mcasp->regs->DITCTL     = 0x00000000; // Not used
. F; w" _; N5 F    mcasp->regs->DLBCTL     = 0x00000000; // Not used# d5 X* E2 p! V- o
    mcasp->regs->AMUTE      = 0x00000000; // Not used2 ~9 Z2 J: `- \0 m: g% n" g# K, t+ ~, J

6 g% j5 i2 v7 x/* Starting sections of the McASP*/" y5 Q7 w. P5 T% }% h
    mcasp->regs->XGBLCTL |= GBLCTL_XHCLKRST_ON; ( t* `; m$ r4 r/ k/ M
    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XHCLKRST_ON ) != GBLCTL_XHCLKRST_ON );  
" o2 L* P+ [, W! c' ^+ U3 e    mcasp->regs->RGBLCTL |= GBLCTL_RHCLKRST_ON; 4 g. A2 y2 U- B6 {2 t0 G
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RHCLKRST_ON ) != GBLCTL_RHCLKRST_ON );: ^( M; T+ x4 [- \& r2 y2 ?* t
- Y6 `$ a$ L4 X
    mcasp->regs->XGBLCTL |= GBLCTL_XCLKRST_ON;
* a( g9 M$ b6 w8 @' O" e    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XCLKRST_ON ) != GBLCTL_XCLKRST_ON );
: x/ ?, a) ?8 y% \% q    mcasp->regs->RGBLCTL |= GBLCTL_RCLKRST_ON; 3 h7 j- u2 a& @. Y1 x# W
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RCLKRST_ON ) != GBLCTL_RCLKRST_ON );  N% y4 A3 Z" ~5 j$ ~) q" r0 ~
3 V2 ]- Z$ m5 _" O" K& e) u# s" I' i
    mcasp->regs->XSTAT = 0x0000ffff; 1 P" s  ?, n9 R: P3 R0 ^9 _
    mcasp->regs->RSTAT = 0x0000ffff;
; B& F& N( S/ S! a. N; I, }5 x- m* f# a6 A$ w1 ^3 j5 J
    mcasp->regs->XGBLCTL |= GBLCTL_XSRCLR_ON;
- @2 X& v( ?$ H+ H1 K, @    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSRCLR_ON ) != GBLCTL_XSRCLR_ON );* B5 Q: {( K4 C  H9 h% o
    mcasp->regs->RGBLCTL |= GBLCTL_RSRCLR_ON;
9 D7 m! b6 O2 D    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSRCLR_ON ) != GBLCTL_RSRCLR_ON );
) m+ \; _/ J7 e  C
, E0 I6 O; h, W6 Q3 ^    /* Write a 0, so that no underrun occurs after releasing the state machine */7 \9 P1 `/ K. E1 t( z* u& m
    mcasp->regs->XBUF5 = 0;  W- z6 J0 _/ F, E
    mcasp->regs->RBUF0 = 0;
* e2 D* Z, c0 h7 U* y  q
3 L9 o8 O' {9 I    mcasp->regs->XGBLCTL |= GBLCTL_XSMRST_ON; . ?, p4 X6 s) X8 i" w
    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSMRST_ON ) != GBLCTL_XSMRST_ON );
2 {0 T: \8 ]  m+ J( S" V' Y    mcasp->regs->RGBLCTL |= GBLCTL_RSMRST_ON; 0 u2 L( ?$ \3 w) Q, H+ Y
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSMRST_ON ) != GBLCTL_RSMRST_ON );. y& y  N. H, B1 g( x+ m
8 r9 M* V" n/ Q0 `' r, I
    mcasp->regs->XGBLCTL |= GBLCTL_XFRST_ON; 3 e0 h" n0 P1 n9 i$ ?7 ~6 [3 n7 |
    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XFRST_ON ) != GBLCTL_XFRST_ON );+ {! o1 K  U% X: I$ p
    mcasp->regs->RGBLCTL |= GBLCTL_RFRST_ON; ' @) ~7 F; c  P& W. i& G& ]
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RFRST_ON ) != GBLCTL_RFRST_ON );; z% u$ n8 K  a4 x7 d3 }, U
) O$ [( ?& r$ A2 Z1 s+ m! J+ K8 @
    CSR = 0x0000;5 [# L8 F- g, P
    INTC_INTMUX1 = 0x3d;. E8 N! n7 P. E- w
    ISTP = (unsigned int)vectors;; O) c+ Y) j$ H- ~2 l. y& t
    ICR = 0xFFF0;  ; P. i" [4 g; V) q/ A7 c- E
    IER |= 0x12;  - @  e: Y5 R2 {5 b/ J% f4 x
    CSR |= 0x01;  / {& [, y7 [+ j& K( w
+ P0 M- w% y: t, }1 s

9 O9 w( P$ U7 Q7 j: l
4 B5 B$ B" K" H还有就是两个输入输出函数:; w2 P8 ^5 M) g
void output_sample(Int32 out_data)8 Z  Y6 T4 Y7 s! U5 o
{( q* }0 d" x1 G; M# |; ?
  AIC31_data.uint = out_data;  
3 P2 y- M) W5 t' v) z  MCASP1_XBUF5_32BIT = AIC31_data.uint;3 q. {0 ^; j( a: Q+ y
}
4 j; M! q  X4 y+ p
+ `+ J5 x7 p% LInt32 input_sample(void)
* N: z; h- ~/ e$ K+ E{  , g% ?8 l2 i5 }+ _
  AIC31_data.uint = MCASP1_RBUF0_32BIT;& i, T# j5 A6 Y( o
  return (AIC31_data.uint);
* h6 y. x; ?+ _4 `& `3 I$ F}
( f- B2 X( H, v- p# @( B, m9 f" Q1 s3 ]
分享到:  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-12-14 21:09 , Processed in 0.038486 second(s), 23 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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