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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

1

主题

1

帖子

23

积分

新手上路

Rank: 1

积分
23
跳转到指定楼层
楼主
发表于 2016-3-15 16:07:18 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
C6747和C6748感觉差不多,我想实现McASP发送中断方式控制音频信号,在轮询的例程基础上改的,轮询程序可以实现,但是中断一直实现不了,也找不到错误,求大神帮忙!下边是主要程序:
( M. p" L: N6 x. u$ }6 v; ymain文件:4 y3 D! n- W2 C( w2 |
interrupt void interrupt4(void)  - _* `+ L* P4 C; i! m
{; G0 H( ^& K* E' R
  Uint32 sample;
) O: z+ s/ A" \; p  `
7 A, D( f7 s( y( l4 X) |) a8 ^+ a  sample = input_sample(); // read L + R samples from ADC* e$ y! w: a8 t. C( F
  output_sample(sample);   // write L + R samples to DAC
2 [9 r. H! {8 \2 c  return;
/ a* n1 r! r( q. X}, P# [% N) v9 B$ O& i

8 m( l; n( G2 _3 ~# v$ ^8 W! Eint main( void )
+ ]2 Q& w/ k; B4 l; H+ Y{
" [9 O4 A4 V6 I# L  A, j$ S  K+ |% E. P# D# n
    /* Initialize BSL */
6 g& Z8 V  ~* A- [* R    EVMC6747_init( );
# P2 y* n* Y1 \4 U* p* j# {        /* Call evmc6747_intr function */
8 o4 ^: {" d/ |+ N9 F- ~* ~    aic3106_init( );' A5 w1 _) `7 K1 c3 Z( R! [! ]4 N
        while(1);7 r& {4 `3 E1 q; F5 ~
}
3 F  i' ?) f7 G# |! K1 u4 H6 J+ n# t2 n
7 I8 }7 j9 J: Q7 ^
aic3106_init文件的一部分,McASP配置部分,采用内部时钟,I2S方式,同步传输。音频芯片的配置应该没问题& }% B: s2 t6 M5 R
/* Initialize MCASP1 */
- N& C7 X4 v3 ~+ }. s4 F    mcasp = &MCASP_MODULE_1;. N' J  k2 }5 ?$ R2 ?. M
    mcasp->regs->GBLCTL  = 0;       // Reset
2 a6 L* L. p3 O% a+ D  x; {  ~    mcasp->regs->RGBLCTL = 0;       // Reset RX/ O; V  K; T8 w" ^0 o
    mcasp->regs->XGBLCTL = 0;       // Reset TX
1 V" ^# x# D3 F$ ?2 v# ~; ]    mcasp->regs->PWRDEMU = 1;       // Free-running- Y( ~/ j5 U" B1 r% z! o( G
   // configure McASP0 receive registers( {8 F3 I) n$ v& `: L2 V
    mcasp->regs->RMASK      = 0xFFFFFFFF; // No padding used$ \+ T) l1 ?( V- f. `2 g/ x
    mcasp->regs->RFMT       = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus5 _3 i5 b  ]7 `% _. n; d6 N
    mcasp->regs->AFSRCTL    = 0x00000112; // 2TDM, 1bit Falling, External FS, word
' m' Z/ a; j% l) G$ z' {    mcasp->regs->ACLKRCTL   = 0x000000AF; // Rising INTERNAL CLK,(from tx side)- A' G( _5 }' o; Y
    mcasp->regs->AHCLKRCTL  = 0x00000000; // INT CLK (from tx side)/ p! @  `; [# ~8 u) E" g' D
    mcasp->regs->RTDM       = 0x00000003; // Slots 0,1
$ ^% K, o) u3 j" P; a    mcasp->regs->RINTCTL    = 0x00000000; // Not used: ]" h. n  ?% c" F
    mcasp->regs->RCLKCHK    = 0x00FF0008; // 255-MAX 0-MIN, div-by-256, V  Z6 Q. W3 L, M; L: w7 M
- f& V' ]! |+ Z3 P
    mcasp->regs->XMASK      = 0xFFFFFFFF; // No padding used
0 n7 C% S/ c  \+ g4 W: Q+ T9 P    mcasp->regs->XFMT       = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus
; L2 i+ ?2 ]: i" D) n    mcasp->regs->AFSXCTL    = 0x00000112; // 2TDM, 1bit Rising edge INTERNAL FS, word; B3 x/ W/ N* z9 w$ y; R) s
    mcasp->regs->ACLKXCTL   = 0x000000AF; // ASYNC, Rising INTERNAL CLK, div-by-16$ Q$ j$ b0 N: `, |# A  P
    mcasp->regs->AHCLKXCTL  = 0x00000000; // EXT CLK# G7 x8 r4 z5 P
    mcasp->regs->XTDM       = 0x00000003; // Slots 0,1
" P2 U1 }6 y: b    mcasp->regs->XINTCTL    = 0x00000020; // interrupt on transmit4 Y4 ]7 M7 _& W' o6 K  }
    mcasp->regs->XCLKCHK    = 0x00FF0008; // 255-MAX 0-MIN, div-by-256
& V+ M0 x) C9 c, D5 V; E# R, O6 g8 A+ o, p
    mcasp->regs->SRCTL5     = 0x000D;     // MCASP1.AXR1[5] --> DIN
& b0 d# v! l8 ]8 E1 w    mcasp->regs->SRCTL0     = 0x000E;     // MCASP1.AXR1[0] <-- DOUT5 d! B0 Z: q* U. w& G; X
    mcasp->regs->PFUNC      = 0;          // All MCASPs1 S2 H1 R' d5 O7 T, x+ k
    mcasp->regs->PDIR       = 0x14000020; // All inputs except AXR0[5], ACLKX1, AFSX1! ?. U: B5 @* q+ ]; @0 I* {
" d' d5 l1 e2 j5 b
    mcasp->regs->DITCTL     = 0x00000000; // Not used% p4 b5 P8 `' q4 C
    mcasp->regs->DLBCTL     = 0x00000000; // Not used' J# z' a; w' o- `5 S$ E
    mcasp->regs->AMUTE      = 0x00000000; // Not used( d* i. x3 D# T4 s3 V$ w9 i

9 ~# `! z, T9 N" z* M/* Starting sections of the McASP*/# q9 n9 q  q7 J0 b7 `6 h
    mcasp->regs->XGBLCTL |= GBLCTL_XHCLKRST_ON; 4 V9 D0 G$ M! B+ s1 `  h. f
    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XHCLKRST_ON ) != GBLCTL_XHCLKRST_ON );  0 I( l) x  U7 F
    mcasp->regs->RGBLCTL |= GBLCTL_RHCLKRST_ON; 4 Y; s" V8 S. _+ ~2 x5 l
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RHCLKRST_ON ) != GBLCTL_RHCLKRST_ON );7 d- L( p$ r# O' r9 `
8 |- ^$ X# g7 Y0 X
    mcasp->regs->XGBLCTL |= GBLCTL_XCLKRST_ON;   m4 g4 P/ |& x) r  Z
    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XCLKRST_ON ) != GBLCTL_XCLKRST_ON );
+ [* k/ r5 I, `8 l' J    mcasp->regs->RGBLCTL |= GBLCTL_RCLKRST_ON; + M, t  j: e% Y* N6 k) X
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RCLKRST_ON ) != GBLCTL_RCLKRST_ON );
; S/ B8 M' f: O  {
1 _4 O, h9 |" R" @9 J6 D" L    mcasp->regs->XSTAT = 0x0000ffff;
# Z& y7 o* Q  X) a3 X    mcasp->regs->RSTAT = 0x0000ffff;
( k) F# |4 j& B" t3 C! U* o
: O, a8 W  H1 X  I    mcasp->regs->XGBLCTL |= GBLCTL_XSRCLR_ON;
) U2 V9 \, r, j8 W    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSRCLR_ON ) != GBLCTL_XSRCLR_ON );
3 K$ ?! E" b* Z8 }    mcasp->regs->RGBLCTL |= GBLCTL_RSRCLR_ON;
1 P/ `& Y' l5 Z4 ^3 P    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSRCLR_ON ) != GBLCTL_RSRCLR_ON );
+ D. T$ U7 R# M" g  G8 e" p
% S* L) Q0 c- P9 f2 M    /* Write a 0, so that no underrun occurs after releasing the state machine */
8 x, j+ n2 Q& d1 o) G% h- v    mcasp->regs->XBUF5 = 0;
8 t0 M7 k0 g9 L    mcasp->regs->RBUF0 = 0;/ @- {6 e$ P; s4 I1 N8 e, ^* K
1 k/ \5 d8 i0 q6 g- p
    mcasp->regs->XGBLCTL |= GBLCTL_XSMRST_ON; 5 t6 X6 l5 i0 u' G* T# i. q
    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSMRST_ON ) != GBLCTL_XSMRST_ON );% W) @" ]! y" a/ I
    mcasp->regs->RGBLCTL |= GBLCTL_RSMRST_ON;
/ N9 m* X" s6 c    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSMRST_ON ) != GBLCTL_RSMRST_ON );! l5 J1 P: O, M& b/ z

* Z+ `4 C* w1 [* t    mcasp->regs->XGBLCTL |= GBLCTL_XFRST_ON;
  \' k9 Y) P5 k# b    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XFRST_ON ) != GBLCTL_XFRST_ON );% s8 o, m) r/ M: ~% q) h  [
    mcasp->regs->RGBLCTL |= GBLCTL_RFRST_ON; $ B8 }3 z) K' U1 q
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RFRST_ON ) != GBLCTL_RFRST_ON );( T+ }! M- }0 F7 u! j$ k+ ]

. ^5 Y& M+ t7 {' U  ?    CSR = 0x0000;* x, o6 @6 n7 I* O7 i& S
    INTC_INTMUX1 = 0x3d;
' p% ^, e5 ^0 ^0 E5 h" K    ISTP = (unsigned int)vectors;
1 z( F0 Q# f/ x: M; q    ICR = 0xFFF0;  
9 ~: I, |' j9 k! r! \/ K2 y    IER |= 0x12;  
6 s& @! T' A) ~8 t) |- s    CSR |= 0x01;  
$ z, G1 y7 Q/ T3 D
( n! M1 z$ J& d$ m+ v- E5 c& Q; }, F6 o0 b

1 L% i; c  q# A4 C& x' k还有就是两个输入输出函数:3 z" u, p* {# O4 I7 _
void output_sample(Int32 out_data)9 J+ r1 |+ L% I+ B/ b
{( ~1 ^- W: P3 [
  AIC31_data.uint = out_data;  
( K7 m* a) y/ r3 G% K( N: z% p  MCASP1_XBUF5_32BIT = AIC31_data.uint;' v" F( R* u- E6 f5 o0 d, r0 ]
}
, U1 N9 p8 ?6 ]6 H! T/ d; c" t2 ^" E# O
Int32 input_sample(void), M1 k& o; d1 x
{  ( C, I7 y9 g8 ?' s* |
  AIC31_data.uint = MCASP1_RBUF0_32BIT;
" m! I" X7 B! B4 J/ q4 l/ [  return (AIC31_data.uint);1 p! P. |( t& M$ A$ p5 g
}
8 I' P" A& h5 R  n' R/ t
8 `$ r6 B: z; B# k4 u
分享到:  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-15 03:48 , Processed in 0.038567 second(s), 23 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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