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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

1

主题

1

帖子

23

积分

新手上路

Rank: 1

积分
23
跳转到指定楼层
楼主
发表于 2016-3-15 16:07:18 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
C6747和C6748感觉差不多,我想实现McASP发送中断方式控制音频信号,在轮询的例程基础上改的,轮询程序可以实现,但是中断一直实现不了,也找不到错误,求大神帮忙!下边是主要程序:. R9 H$ e& s: V! |3 i* E# H* _
main文件:2 d; e3 R; t, B! N: Z+ t+ J# M6 t0 z
interrupt void interrupt4(void)  
$ |; A+ A* |; ]4 \( w{9 m- y: m" k( j8 L
  Uint32 sample;+ c0 v" [: t8 _4 _# b: o

- }2 {' V% M1 l; J6 n  sample = input_sample(); // read L + R samples from ADC9 U. M: \. a# R* x* e1 |0 G
  output_sample(sample);   // write L + R samples to DAC   l  W7 ^4 w3 [3 a' T& P
  return;
* S( q  v' P! U}# k: T& q) a; @3 q5 |# {1 n

0 v' |" m2 z" a% a& i6 P6 Sint main( void )
9 p4 p1 G# C) e# r5 ~# ^{2 o; a; C7 v3 X# C

9 k+ k* a/ p5 P6 \% K    /* Initialize BSL */! \2 l8 l: j" H$ C/ K' t9 o
    EVMC6747_init( );
5 w* ]* m) r& _" x8 l1 }& O        /* Call evmc6747_intr function */. |' K* o& a: t0 p
    aic3106_init( );- Q9 {: i: v" U5 J
        while(1);
- T, Z5 f* J: ~% J! j; U9 X6 r}
8 }, y& t  N8 d- H1 m  N: l
$ F$ y, v2 S# x0 l! f2 v2 P% v
2 B1 b# m  ~% C1 ~2 W$ kaic3106_init文件的一部分,McASP配置部分,采用内部时钟,I2S方式,同步传输。音频芯片的配置应该没问题7 L, j7 A6 n6 S4 S7 v
/* Initialize MCASP1 */9 Z3 Y; c- D8 q- h7 ^. b
    mcasp = &MCASP_MODULE_1;
; K; j  e) r1 |* [, c' F/ s* e' l/ w    mcasp->regs->GBLCTL  = 0;       // Reset+ j  J& s- ^; F; M2 u5 p
    mcasp->regs->RGBLCTL = 0;       // Reset RX* Z7 W' D  k7 v
    mcasp->regs->XGBLCTL = 0;       // Reset TX( x* |. x2 F& O/ t  O8 w( v
    mcasp->regs->PWRDEMU = 1;       // Free-running
$ D; m, w- K9 o# x! z( `% z! i   // configure McASP0 receive registers! D4 z5 D5 y$ m9 {7 F9 ~! V1 K3 p8 e
    mcasp->regs->RMASK      = 0xFFFFFFFF; // No padding used1 Y( x8 ]1 }. B/ ^
    mcasp->regs->RFMT       = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus
; M/ Z$ X" L$ s3 i4 ^9 r' S7 G. u    mcasp->regs->AFSRCTL    = 0x00000112; // 2TDM, 1bit Falling, External FS, word
1 e; N: [5 q7 E) _: G& O& A, B    mcasp->regs->ACLKRCTL   = 0x000000AF; // Rising INTERNAL CLK,(from tx side)6 {& ]$ G7 A; J
    mcasp->regs->AHCLKRCTL  = 0x00000000; // INT CLK (from tx side)& H4 f: r# m7 g& L; P
    mcasp->regs->RTDM       = 0x00000003; // Slots 0,18 T1 M/ m, N0 a3 c
    mcasp->regs->RINTCTL    = 0x00000000; // Not used
+ f7 T  H+ J8 d" @    mcasp->regs->RCLKCHK    = 0x00FF0008; // 255-MAX 0-MIN, div-by-256
" H  Y# v# q) K1 I% @
+ C3 k! ~! e  W! l( N    mcasp->regs->XMASK      = 0xFFFFFFFF; // No padding used0 U7 N: C/ k' F1 ^. Q+ v5 @
    mcasp->regs->XFMT       = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus
; w" l, n) a" [8 Z) J    mcasp->regs->AFSXCTL    = 0x00000112; // 2TDM, 1bit Rising edge INTERNAL FS, word+ `4 m) @1 C4 o! s$ o! Z
    mcasp->regs->ACLKXCTL   = 0x000000AF; // ASYNC, Rising INTERNAL CLK, div-by-16
7 a- q5 Z5 C+ J- ]" ]9 A  F    mcasp->regs->AHCLKXCTL  = 0x00000000; // EXT CLK% }8 W* r( W4 g# Y
    mcasp->regs->XTDM       = 0x00000003; // Slots 0,1
( u% c4 i; @/ z& G' o7 t    mcasp->regs->XINTCTL    = 0x00000020; // interrupt on transmit0 |8 M4 \1 T6 O9 M+ L* h
    mcasp->regs->XCLKCHK    = 0x00FF0008; // 255-MAX 0-MIN, div-by-256
( t- f- M: A2 f8 u2 s4 d1 }1 U" C, Z' P1 i& W& [# p; ]* V; V
    mcasp->regs->SRCTL5     = 0x000D;     // MCASP1.AXR1[5] --> DIN+ N- r3 b, R  p. o! q- }  H% X8 c
    mcasp->regs->SRCTL0     = 0x000E;     // MCASP1.AXR1[0] <-- DOUT: Z2 l1 y0 ]/ m6 ^
    mcasp->regs->PFUNC      = 0;          // All MCASPs
) c* ]4 ?* c2 R3 L/ _8 p    mcasp->regs->PDIR       = 0x14000020; // All inputs except AXR0[5], ACLKX1, AFSX19 H) G0 M/ i# \  f. V. N
: |0 @$ U. v, \& m+ A) B- O
    mcasp->regs->DITCTL     = 0x00000000; // Not used+ M  @. H6 Q; H8 k1 B/ a' }
    mcasp->regs->DLBCTL     = 0x00000000; // Not used2 S+ j5 s- s4 ]( d3 _1 M
    mcasp->regs->AMUTE      = 0x00000000; // Not used: g* ~+ a/ @- e) p$ f: N# R* v

% K- \0 N  z7 s/* Starting sections of the McASP*/
- h. C7 i; m- ]4 t) u8 [! y4 h9 K% m    mcasp->regs->XGBLCTL |= GBLCTL_XHCLKRST_ON; 7 C- C6 |, \( y8 h$ k9 N8 t
    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XHCLKRST_ON ) != GBLCTL_XHCLKRST_ON );  
! M1 j9 n3 S% V  e! [5 J% @    mcasp->regs->RGBLCTL |= GBLCTL_RHCLKRST_ON; : z7 D% W, P. r
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RHCLKRST_ON ) != GBLCTL_RHCLKRST_ON );/ s) B* A7 Y7 a$ Z7 R1 [6 g
; ^* _! q( s9 Z1 J3 D. a
    mcasp->regs->XGBLCTL |= GBLCTL_XCLKRST_ON; ; T* D+ K6 f% ~' @, q& M5 K6 L
    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XCLKRST_ON ) != GBLCTL_XCLKRST_ON );
4 J2 C  s+ o1 `! }0 R+ X    mcasp->regs->RGBLCTL |= GBLCTL_RCLKRST_ON; + u; W9 T2 N  p. O. z
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RCLKRST_ON ) != GBLCTL_RCLKRST_ON );
. _1 h) T' \# ]% l+ D. x4 E
% S4 E) Y- q5 e, T6 }  h6 P    mcasp->regs->XSTAT = 0x0000ffff;
+ W3 g/ `" G9 s+ ~4 N1 e8 X  s    mcasp->regs->RSTAT = 0x0000ffff; 6 C! z# x3 }. M3 X
" n9 ^2 J( o, A* a8 f
    mcasp->regs->XGBLCTL |= GBLCTL_XSRCLR_ON;  J& w+ w; U, B  D
    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSRCLR_ON ) != GBLCTL_XSRCLR_ON );2 ~: N. K, v# R
    mcasp->regs->RGBLCTL |= GBLCTL_RSRCLR_ON; $ h8 i$ F5 c$ [4 o: u) O
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSRCLR_ON ) != GBLCTL_RSRCLR_ON );# Q; c" Q; f! L% [  o- L3 }
' l8 A' w' k  n" i
    /* Write a 0, so that no underrun occurs after releasing the state machine */
. U: x( |) |" ^, H- G9 v    mcasp->regs->XBUF5 = 0;
# h( w5 t: W* Y5 n" {; r8 F! V    mcasp->regs->RBUF0 = 0;
$ b+ U; z$ J9 c. e6 M2 y) ]# @9 Y
  O+ c6 \& X1 N7 n3 `" ^2 h% J    mcasp->regs->XGBLCTL |= GBLCTL_XSMRST_ON; " s: W3 B" H: y5 `% ?
    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSMRST_ON ) != GBLCTL_XSMRST_ON );
8 t; G3 {& c# Y8 }1 N' V" ?# m    mcasp->regs->RGBLCTL |= GBLCTL_RSMRST_ON; $ l4 p) ?# x# R( J, ]' ^
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSMRST_ON ) != GBLCTL_RSMRST_ON );3 j7 V9 w( j$ k  u; S! F/ ~
# P' F& G3 F8 l8 g* k
    mcasp->regs->XGBLCTL |= GBLCTL_XFRST_ON;
# D7 k9 z' U( i+ T2 _2 z    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XFRST_ON ) != GBLCTL_XFRST_ON );
3 n2 _* z' e, ]4 F* ^% c' R    mcasp->regs->RGBLCTL |= GBLCTL_RFRST_ON;
  V  |7 e3 M1 _% P# C2 L+ y    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RFRST_ON ) != GBLCTL_RFRST_ON );+ ^( c* i* _: S  i+ ]
! |- \: M% T& |8 o8 b; T
    CSR = 0x0000;
& r) \9 ?4 z' N- n3 d) K    INTC_INTMUX1 = 0x3d;2 B! T' ?, e! p  O
    ISTP = (unsigned int)vectors;
. G( t, ]/ W7 \2 d' q, V  t8 q    ICR = 0xFFF0;  1 m& G- n! d, J* w& Y3 B' U
    IER |= 0x12;  
$ G, Y+ E  n7 e, X) ^5 z' T5 X    CSR |= 0x01;  
6 h5 `" \; b* D' ?' x7 c% \4 R0 `" L, ~/ P  K9 `

  Z) `2 w, t5 K0 Z8 n# O% S- ?
' I4 c( ]* T0 D2 b, t1 \还有就是两个输入输出函数:
- A4 Q; W( i) g( o9 Fvoid output_sample(Int32 out_data)
, o2 R2 E" h5 b% O( Q{
7 f' P4 D+ |; f: T, Z: Y/ R0 Z/ A  AIC31_data.uint = out_data;  
8 O; c% E5 y1 l+ S8 ]  MCASP1_XBUF5_32BIT = AIC31_data.uint;
( K" D) z/ `( J3 C2 _4 u}/ n" T0 n* A5 P! @- P! J8 o

& @, C' L. q3 o% g+ c4 PInt32 input_sample(void)8 K+ U' ^3 n1 [" K- U$ `+ W1 d- V, x
{  
" F2 S/ v" q' I3 [# [% ?  h2 h  AIC31_data.uint = MCASP1_RBUF0_32BIT;
2 r4 x- x- C- k6 h9 M' ]  return (AIC31_data.uint);! b  {, j9 g% P) A) r
}
! p, A, O. Y" a8 m2 ^# M: s* ^7 k% G  Y8 W
分享到:  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, 2026-1-9 07:59 , Processed in 0.039739 second(s), 25 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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