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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

1

主题

1

帖子

23

积分

新手上路

Rank: 1

积分
23
跳转到指定楼层
楼主
发表于 2016-3-15 16:07:18 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
C6747和C6748感觉差不多,我想实现McASP发送中断方式控制音频信号,在轮询的例程基础上改的,轮询程序可以实现,但是中断一直实现不了,也找不到错误,求大神帮忙!下边是主要程序:
# T+ d% M( ^7 _( M. U) `, e; bmain文件:
' ^; E9 m2 P5 P3 t/ ]interrupt void interrupt4(void)  , y6 R8 u8 e* i1 _! C
{
" _0 S# v& `  V$ `  Uint32 sample;, |  {: A" E8 j" e1 M3 w9 m" ~$ P

7 R5 W# x% d+ D+ _& M  sample = input_sample(); // read L + R samples from ADC& b3 b  @- @" ^; W- [5 s
  output_sample(sample);   // write L + R samples to DAC
- |& w: s& o9 T. _  return;
2 W- _& Q7 A" U% c2 `8 |% I# l}+ v% F( K- E2 y: \7 h

. B2 u4 \. t* r. U$ I% eint main( void )
( ?3 }7 |# J# O  `2 q% _{, V$ p' V# E- O* k5 w) ]: e

7 p! \/ X8 f, e  B- L    /* Initialize BSL */$ t/ c/ `& F& T! a
    EVMC6747_init( );7 K, J2 O! G3 G# z* r
        /* Call evmc6747_intr function */
1 `1 e9 d) g: t+ Z/ I' O* W    aic3106_init( );, A; s$ d/ X$ b6 v% T: L
        while(1);8 C  L4 b$ E  \/ i7 }- e6 v
}
2 X( Z8 L$ G0 J" Q7 ]2 f8 p
+ [* Q& S& Z3 Q/ }; f- T" T  l  U0 w, w1 Z
aic3106_init文件的一部分,McASP配置部分,采用内部时钟,I2S方式,同步传输。音频芯片的配置应该没问题
9 w+ i4 o2 Y7 e: n/* Initialize MCASP1 */
4 I# A* Q. B9 }. t8 Y- P" l    mcasp = &MCASP_MODULE_1;& m: U2 U5 g' z5 g7 O# U% W0 p
    mcasp->regs->GBLCTL  = 0;       // Reset4 u2 _( L2 w9 V6 d& L; O
    mcasp->regs->RGBLCTL = 0;       // Reset RX
% z( r$ W) m9 O0 ]. W; f    mcasp->regs->XGBLCTL = 0;       // Reset TX: {5 \' C/ J& f/ k
    mcasp->regs->PWRDEMU = 1;       // Free-running
$ A  D, [5 T4 |( h) A  M   // configure McASP0 receive registers1 s6 J/ L+ r  x, ~4 c$ @" r5 j4 J( T
    mcasp->regs->RMASK      = 0xFFFFFFFF; // No padding used
8 X* F1 g( @. i( C3 K+ i6 P" S    mcasp->regs->RFMT       = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus. b( n! b6 v/ k2 b
    mcasp->regs->AFSRCTL    = 0x00000112; // 2TDM, 1bit Falling, External FS, word; R. g/ t0 N- Z5 W+ O
    mcasp->regs->ACLKRCTL   = 0x000000AF; // Rising INTERNAL CLK,(from tx side)- i. K, @; G  S" {2 s  C1 B
    mcasp->regs->AHCLKRCTL  = 0x00000000; // INT CLK (from tx side)
" R2 K8 z- o" \+ g8 j" |; I- T    mcasp->regs->RTDM       = 0x00000003; // Slots 0,1
& y; _, P5 h0 w! K5 j3 Y    mcasp->regs->RINTCTL    = 0x00000000; // Not used
: A* k9 s4 T; U7 I: V+ S8 y    mcasp->regs->RCLKCHK    = 0x00FF0008; // 255-MAX 0-MIN, div-by-256
9 O5 D7 |; L  I# Y( t$ o. U5 F
- h! d, d) {( y# S& f    mcasp->regs->XMASK      = 0xFFFFFFFF; // No padding used
# q1 c  C6 n) T/ b4 Y7 S    mcasp->regs->XFMT       = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus3 c$ q2 K; F& h4 G& J
    mcasp->regs->AFSXCTL    = 0x00000112; // 2TDM, 1bit Rising edge INTERNAL FS, word& `0 t0 _9 y* H" b( H/ y
    mcasp->regs->ACLKXCTL   = 0x000000AF; // ASYNC, Rising INTERNAL CLK, div-by-16
' N. q4 _" u' J, y* n    mcasp->regs->AHCLKXCTL  = 0x00000000; // EXT CLK
* u9 p. C! K' ?: h1 k6 P1 j2 P    mcasp->regs->XTDM       = 0x00000003; // Slots 0,1, t$ e- u% l9 y
    mcasp->regs->XINTCTL    = 0x00000020; // interrupt on transmit* f. s& b; q; e$ x5 j4 U: d4 f1 O! l
    mcasp->regs->XCLKCHK    = 0x00FF0008; // 255-MAX 0-MIN, div-by-256. d2 Y+ S% L+ i: a
: S4 K2 Q+ m" ~. ~7 x2 ?
    mcasp->regs->SRCTL5     = 0x000D;     // MCASP1.AXR1[5] --> DIN# ]$ ?% q4 }2 {+ U2 @
    mcasp->regs->SRCTL0     = 0x000E;     // MCASP1.AXR1[0] <-- DOUT
) Q3 S9 [- u4 F) j! ~" t( \    mcasp->regs->PFUNC      = 0;          // All MCASPs
* j) W0 ]6 U+ B+ g" r5 `4 l    mcasp->regs->PDIR       = 0x14000020; // All inputs except AXR0[5], ACLKX1, AFSX1+ v( d9 k8 |) w- P! t* k5 X

5 S" |/ x! k% w: `  \6 i. a7 b    mcasp->regs->DITCTL     = 0x00000000; // Not used% F9 i  |: [) z4 M9 b
    mcasp->regs->DLBCTL     = 0x00000000; // Not used( C$ T) R4 i5 |: T' t5 L4 h- r
    mcasp->regs->AMUTE      = 0x00000000; // Not used
, \( F& w9 j1 q- U5 O( f4 l; J/ N6 p9 V  b( }; u4 \' W
/* Starting sections of the McASP*/& ~- A8 E0 u( m1 U; @0 j- o
    mcasp->regs->XGBLCTL |= GBLCTL_XHCLKRST_ON; " P8 B' o6 G5 r8 I
    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XHCLKRST_ON ) != GBLCTL_XHCLKRST_ON );  
1 [6 g8 N) o8 G. V9 ^    mcasp->regs->RGBLCTL |= GBLCTL_RHCLKRST_ON;
5 L2 h; d2 a! n1 t2 _    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RHCLKRST_ON ) != GBLCTL_RHCLKRST_ON );
8 Q5 N4 y# d. U) D; H5 u/ W; b) f) S, d* n! w5 Q
    mcasp->regs->XGBLCTL |= GBLCTL_XCLKRST_ON;
( x2 p/ L9 S5 @4 F. V/ E    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XCLKRST_ON ) != GBLCTL_XCLKRST_ON );3 V. t" `3 M, ?) c% r* y
    mcasp->regs->RGBLCTL |= GBLCTL_RCLKRST_ON; ( l5 ]/ ^5 I- I9 \" s
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RCLKRST_ON ) != GBLCTL_RCLKRST_ON );
1 N9 O* v$ r- X; C7 c
/ M7 @: N% ?. ^6 Y    mcasp->regs->XSTAT = 0x0000ffff; . g& L+ Q& e1 _, i( w& b
    mcasp->regs->RSTAT = 0x0000ffff; 5 y. a$ R/ I7 k. D8 I

  J6 |2 i: ^* f$ m% F% \/ `$ h! x! i9 W    mcasp->regs->XGBLCTL |= GBLCTL_XSRCLR_ON;. |9 K6 b" m' y# B- q
    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSRCLR_ON ) != GBLCTL_XSRCLR_ON );& Z4 j, ^& h. r4 \6 o7 C, f& N
    mcasp->regs->RGBLCTL |= GBLCTL_RSRCLR_ON;
6 \% T9 @  `3 ~; K- b    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSRCLR_ON ) != GBLCTL_RSRCLR_ON );
! v+ d2 Q' q% M5 h3 z6 A$ M9 V; f4 @: t) _
    /* Write a 0, so that no underrun occurs after releasing the state machine */
; X( r# F: ^- b    mcasp->regs->XBUF5 = 0;9 k& R4 N2 x- t4 z& a1 S6 S, O( k4 z
    mcasp->regs->RBUF0 = 0;
7 `: n# j9 e- R$ ~! r
& ]8 `9 w' d( ?( }    mcasp->regs->XGBLCTL |= GBLCTL_XSMRST_ON;
+ k6 J* E' u/ ~' |9 q& ^    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSMRST_ON ) != GBLCTL_XSMRST_ON );4 |  @8 O1 j; B5 X1 q6 a& W6 g
    mcasp->regs->RGBLCTL |= GBLCTL_RSMRST_ON; ; g4 X& S1 d  C
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSMRST_ON ) != GBLCTL_RSMRST_ON );
5 @" X+ o) N6 n# H3 B5 J4 E( c7 N+ \1 Z( _  }# q$ V
    mcasp->regs->XGBLCTL |= GBLCTL_XFRST_ON;
1 f$ D' v) Z* ~$ _6 d. L$ w# P    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XFRST_ON ) != GBLCTL_XFRST_ON );
0 i. {9 V6 W1 N. W    mcasp->regs->RGBLCTL |= GBLCTL_RFRST_ON;   v4 u+ \' B7 X
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RFRST_ON ) != GBLCTL_RFRST_ON );
, `+ J; O# Y4 m
. E) ^" \' s0 K$ w    CSR = 0x0000;
8 U; ~* |+ W6 E* ?( N& M, a! Z$ `4 \    INTC_INTMUX1 = 0x3d;
4 S$ }' h) i1 m# \    ISTP = (unsigned int)vectors;( G8 Y& B  j% G% `5 ?
    ICR = 0xFFF0;  $ {+ @3 P1 t! M1 [# u( @
    IER |= 0x12;  4 d# j7 J: _& i: |1 {* P
    CSR |= 0x01;  % X$ x+ ?, U* L; Y

; E, a: J# Y( C2 V2 b' T
, K, \& x2 i# F% k7 ^$ {: `3 j6 c0 S( |+ b5 v5 N% S' c
还有就是两个输入输出函数:5 ]: C9 T( i( b' l/ N
void output_sample(Int32 out_data)' d  N& _* W) c# W4 o  u! A
{  C- j2 d! Z; P$ y
  AIC31_data.uint = out_data;  # \8 I2 s# T- t- E3 P* S. u! t2 Y
  MCASP1_XBUF5_32BIT = AIC31_data.uint;
5 v4 a& r/ G8 G# _}; ~4 D- \  h, H" ^2 e( [8 B1 k; `
% o' i+ D1 X+ t4 {: ~. `
Int32 input_sample(void)
( i8 G0 `5 c, D* [/ `8 a{  - ^5 J& w- U& `, ~4 F- _
  AIC31_data.uint = MCASP1_RBUF0_32BIT;
* M& Y& N% k% F8 c% q# A  return (AIC31_data.uint);/ W/ \- {! t  J  {/ b6 V, ~
}( u) b: j& C8 d* ^: |3 m! r
2 R5 o$ S& {0 w# q
分享到:  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-23 00:07 , Processed in 0.039735 second(s), 23 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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