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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

1

主题

1

帖子

23

积分

新手上路

Rank: 1

积分
23
跳转到指定楼层
楼主
发表于 2016-3-15 16:07:18 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
C6747和C6748感觉差不多,我想实现McASP发送中断方式控制音频信号,在轮询的例程基础上改的,轮询程序可以实现,但是中断一直实现不了,也找不到错误,求大神帮忙!下边是主要程序:
  X. G' J' w$ A% u4 ^& d( e/ J) Smain文件:
7 `/ i% S3 {4 ?: R% Cinterrupt void interrupt4(void)  / y! @! b4 V4 K- A8 \0 L/ G; y
{6 J7 l$ n  g: {7 p) i  Z3 ^
  Uint32 sample;
1 k+ q6 q; ~/ K! A- L) @5 Q: ?4 U
; F0 ~" \/ ~7 b, x, l  |" y1 ?  sample = input_sample(); // read L + R samples from ADC
1 S2 d: G: t2 d4 w: x0 _: U1 s  output_sample(sample);   // write L + R samples to DAC ; L/ I* T1 N& u: F# T! `
  return;1 H; R  j. w2 s2 r
}
) D1 Q! D/ L- {! L
  B1 Y9 z% i+ z- u) Nint main( void )
6 A  X$ ^2 f' f{
/ Q8 d8 X2 ]; F/ q( F$ G) |& _0 s' J7 @! f5 F
    /* Initialize BSL */
; Z6 m$ z1 [) P    EVMC6747_init( );
& h8 ~1 q) f: H# q* I        /* Call evmc6747_intr function */
: J0 j, `( Z& X1 A, y    aic3106_init( );
8 g/ `; r* ~- _5 `1 V        while(1);  A  @5 X- Y9 P, ], F
}
* }3 C7 C! _% @; m- n* X
( q) O, Z; J  e# s% T8 z* H. G. N3 f1 Q5 y' x. ~
aic3106_init文件的一部分,McASP配置部分,采用内部时钟,I2S方式,同步传输。音频芯片的配置应该没问题
0 R8 i1 N* [* S0 a" T- b( T/* Initialize MCASP1 */
. _' W( a6 |( b; g/ M8 z    mcasp = &MCASP_MODULE_1;' r9 W: M& I# |' Q1 T0 e: i
    mcasp->regs->GBLCTL  = 0;       // Reset
5 V/ D& L. X% R2 h5 K% a4 B    mcasp->regs->RGBLCTL = 0;       // Reset RX
7 d6 ]8 O# g' g: Z$ M! d    mcasp->regs->XGBLCTL = 0;       // Reset TX
. K& [( v+ E* ]* V    mcasp->regs->PWRDEMU = 1;       // Free-running' f6 R! c+ ?$ g3 O
   // configure McASP0 receive registers
; W9 }3 D% [% o1 ~9 o0 ]3 ^5 \    mcasp->regs->RMASK      = 0xFFFFFFFF; // No padding used9 D8 b" I! A- W
    mcasp->regs->RFMT       = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus
$ S- d5 X, s, U% u- e    mcasp->regs->AFSRCTL    = 0x00000112; // 2TDM, 1bit Falling, External FS, word& H) ]2 }  ^  i0 M
    mcasp->regs->ACLKRCTL   = 0x000000AF; // Rising INTERNAL CLK,(from tx side)
* Z! @0 w# \# c. ]/ [    mcasp->regs->AHCLKRCTL  = 0x00000000; // INT CLK (from tx side)
% p8 V* `! p8 W! j    mcasp->regs->RTDM       = 0x00000003; // Slots 0,1: S5 \" c/ P8 e6 `2 M+ y
    mcasp->regs->RINTCTL    = 0x00000000; // Not used7 x  ?& c: L* i8 h# y
    mcasp->regs->RCLKCHK    = 0x00FF0008; // 255-MAX 0-MIN, div-by-256
+ q3 [' N6 ^% M. y  {$ I
) I& L# i/ F& V0 P$ v    mcasp->regs->XMASK      = 0xFFFFFFFF; // No padding used7 x$ V, B! B3 a/ c, Z9 z6 Q
    mcasp->regs->XFMT       = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus
% k4 b* v( _2 n8 g% ^6 l4 A    mcasp->regs->AFSXCTL    = 0x00000112; // 2TDM, 1bit Rising edge INTERNAL FS, word; |" ]+ R6 e6 u1 ?* M1 ~3 l
    mcasp->regs->ACLKXCTL   = 0x000000AF; // ASYNC, Rising INTERNAL CLK, div-by-16
, A$ `" k, z0 T% \8 X+ m    mcasp->regs->AHCLKXCTL  = 0x00000000; // EXT CLK0 E  r4 X0 Z! m5 r2 y
    mcasp->regs->XTDM       = 0x00000003; // Slots 0,1
( l1 \1 w! n+ n: v- R6 X    mcasp->regs->XINTCTL    = 0x00000020; // interrupt on transmit* @5 x  T1 ?( Q% a
    mcasp->regs->XCLKCHK    = 0x00FF0008; // 255-MAX 0-MIN, div-by-256
5 y, X0 V% A, S- s: }1 _
8 j( K& u7 ]" ~; i9 p  ]5 v    mcasp->regs->SRCTL5     = 0x000D;     // MCASP1.AXR1[5] --> DIN
- }! G9 t% E7 l    mcasp->regs->SRCTL0     = 0x000E;     // MCASP1.AXR1[0] <-- DOUT" d& T- y% b- Y5 B* V" J
    mcasp->regs->PFUNC      = 0;          // All MCASPs
/ _& W2 `) d2 o    mcasp->regs->PDIR       = 0x14000020; // All inputs except AXR0[5], ACLKX1, AFSX1
% u& J5 W8 u0 V8 ?& L+ T9 v
( Y4 g% F  W$ A" M% E  j    mcasp->regs->DITCTL     = 0x00000000; // Not used% \- T9 ^5 q$ f
    mcasp->regs->DLBCTL     = 0x00000000; // Not used# _1 N8 j) R: K
    mcasp->regs->AMUTE      = 0x00000000; // Not used
: y+ a" {, m7 ?' ]; L
% w7 o8 F0 }+ w' @' j/* Starting sections of the McASP*/, s% [, z+ Q3 u$ b& ]
    mcasp->regs->XGBLCTL |= GBLCTL_XHCLKRST_ON;
# T( n2 x+ y2 O& [  \    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XHCLKRST_ON ) != GBLCTL_XHCLKRST_ON );  % J$ [1 ~1 s& O0 U) B
    mcasp->regs->RGBLCTL |= GBLCTL_RHCLKRST_ON;
$ c# g6 b$ Q! P& C4 y) ?" q# q& m    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RHCLKRST_ON ) != GBLCTL_RHCLKRST_ON );
7 R0 N: W' A% E( g' S2 B" l2 ?1 u; Z4 z/ N5 Z' \, e( n2 p
    mcasp->regs->XGBLCTL |= GBLCTL_XCLKRST_ON;
1 a' W" U: l& D, p3 M    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XCLKRST_ON ) != GBLCTL_XCLKRST_ON );
* y# X; t+ S; b0 o* k    mcasp->regs->RGBLCTL |= GBLCTL_RCLKRST_ON;
' U4 K# I* e# B# M    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RCLKRST_ON ) != GBLCTL_RCLKRST_ON );
  U& c6 u+ U5 p2 q5 K# L3 H- [8 ]& J9 C" B
    mcasp->regs->XSTAT = 0x0000ffff;
4 B$ g9 v0 _5 M8 Z: I    mcasp->regs->RSTAT = 0x0000ffff;
) ^3 S/ |$ z) i) h& H$ W0 j. \3 v# H+ p7 {' l
    mcasp->regs->XGBLCTL |= GBLCTL_XSRCLR_ON;
6 v8 l- X$ [6 F" c1 V    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSRCLR_ON ) != GBLCTL_XSRCLR_ON );
7 D# K! E% f, n; E5 E    mcasp->regs->RGBLCTL |= GBLCTL_RSRCLR_ON;
9 P- q) k( J% y9 O. {    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSRCLR_ON ) != GBLCTL_RSRCLR_ON );
, ^! s  u' I/ d7 h/ x, |. n
) W  I* j1 W9 V    /* Write a 0, so that no underrun occurs after releasing the state machine */) j) ]$ N' n' s' q; ?# C. n. `7 H
    mcasp->regs->XBUF5 = 0;
: {! t, ^- N# Y* _4 m9 r    mcasp->regs->RBUF0 = 0;
/ k- i. g) ], V! ~  Z( E& A9 @$ [1 x3 z- P' o" T
    mcasp->regs->XGBLCTL |= GBLCTL_XSMRST_ON; ; o, s+ L' C! }3 k
    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSMRST_ON ) != GBLCTL_XSMRST_ON );: r& T; R/ j2 n( G# C
    mcasp->regs->RGBLCTL |= GBLCTL_RSMRST_ON; 7 s/ L+ S6 @  w) L; u
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSMRST_ON ) != GBLCTL_RSMRST_ON );
4 R1 o0 a* R9 B- \6 I) p; {+ k' f+ @+ y0 G% B' w
    mcasp->regs->XGBLCTL |= GBLCTL_XFRST_ON;
: T1 v2 P! r1 ~" }8 B: l6 P9 }3 P. O# U    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XFRST_ON ) != GBLCTL_XFRST_ON );0 ]4 ^: B9 C9 c! t, G
    mcasp->regs->RGBLCTL |= GBLCTL_RFRST_ON;
& m4 O* k. G" g2 U4 J( k    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RFRST_ON ) != GBLCTL_RFRST_ON );
; @" q$ K% z7 P+ \  d; I7 h, e9 E. Z: @: ^8 O6 K
    CSR = 0x0000;
1 M6 ?% B: i7 K- y. O3 }# t    INTC_INTMUX1 = 0x3d;% Y* J) t) e0 }( [) m/ \
    ISTP = (unsigned int)vectors;
" F7 C8 {. F* O: u    ICR = 0xFFF0;  9 T" R4 F2 G" j$ e7 L* d% S" ]: I
    IER |= 0x12;  
2 c$ c/ y, G5 H! v, m. N    CSR |= 0x01;  
! Y. ^# N. ?# _" k. d7 L. L5 l7 k$ a* }' I/ r; B
- e# g# G* ]  Z" M% B/ u( Y8 b& W) H
" z5 n& S6 Z) X* q4 X" H' _
还有就是两个输入输出函数:
2 _1 a$ g9 n) @3 l0 p4 Cvoid output_sample(Int32 out_data)
! `  {9 a4 P# l, m{
3 Q$ Q; G8 Y3 W, Q+ @+ [  AIC31_data.uint = out_data;  4 R! _. r/ |! l
  MCASP1_XBUF5_32BIT = AIC31_data.uint;
% ]: H$ T- W) e. c3 H/ U0 }}
+ u; r6 D9 x( D4 n! _9 `  |5 B/ ~  `  j3 y" @6 G; C
Int32 input_sample(void)
+ z9 t7 g/ O1 O0 z, }' E  _{  " W1 x# G. ^3 c0 k
  AIC31_data.uint = MCASP1_RBUF0_32BIT;
/ O! D5 s, O6 X2 Z4 X4 j' m  return (AIC31_data.uint);
& @! j4 k7 [; Y4 h8 j2 S- u  ?$ _}
- |5 Z2 B0 m3 ?! {% |) F6 X& W
# R4 P$ v: J7 U; t8 g* k
分享到:  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-21 22:39 , Processed in 0.041357 second(s), 24 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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